Use perfect hash for NFC and NFKC Unicode Normalization quick check
authorMichael Paquier <[email protected]>
Sun, 11 Oct 2020 10:09:01 +0000 (19:09 +0900)
committerMichael Paquier <[email protected]>
Sun, 11 Oct 2020 10:09:01 +0000 (19:09 +0900)
This makes the normalization quick check about 30% faster for NFC and
50% faster for NFKC than the binary search used previously.  The hash
lookup reuses the existing array of bit fields used for the binary
search to get the quick check property and is generated as part of "make
update-unicode" in src/common/unicode/.

Author: John Naylor
Reviewed-by: Mark Dilger, Michael Paquier
Discussion: https://postgr.es/m/CACPNZCt4fbJ0_bGrN5QPt34N4whv=mszM0LMVQdoa2rC9UMRXA@mail.gmail.com

src/common/unicode/generate-unicode_normprops_table.pl
src/common/unicode_norm.c
src/include/common/unicode_normprops_table.h
src/tools/pgindent/exclude_file_patterns
src/tools/pgindent/typedefs.list

index e8e5097c094b09cfb32458db278ad3c2ae9576b2..d652b95965dc75891b7e1ff11d2a7511280bf3b5 100644 (file)
@@ -9,6 +9,10 @@
 use strict;
 use warnings;
 
+use FindBin;
+use lib "$FindBin::RealBin/../../tools/";
+use PerfectHash;
+
 my %data;
 
 print
@@ -18,13 +22,25 @@ print <<EOS;
 #include "common/unicode_norm.h"
 
 /*
- * We use a bit field here to save space.
+ * Normalization quick check entry for codepoint.  We use a bit field
+ * here to save space.
  */
 typedef struct
 {
    unsigned int codepoint:21;
    signed int  quickcheck:4;   /* really UnicodeNormalizationQC */
-}          pg_unicode_normprops;
+} pg_unicode_normprops;
+
+/* Typedef for hash function on quick check table */
+typedef int (*qc_hash_func) (const void *key);
+
+/* Information for quick check lookup with perfect hash function */
+typedef struct
+{
+   const pg_unicode_normprops *normprops;
+   qc_hash_func    hash;
+   int     num_normprops;
+} pg_unicode_norminfo;
 EOS
 
 foreach my $line (<ARGV>)
@@ -66,6 +82,7 @@ foreach my $prop (sort keys %data)
      "static const pg_unicode_normprops UnicodeNormProps_${prop}[] = {\n";
 
    my %subdata = %{ $data{$prop} };
+   my @cp_packed;
    foreach my $cp (sort { $a <=> $b } keys %subdata)
    {
        my $qc;
@@ -82,7 +99,27 @@ foreach my $prop (sort keys %data)
            die;
        }
        printf "\t{0x%04X, %s},\n", $cp, $qc;
+
+       # Save the bytes as a string in network order.
+       push @cp_packed, pack('N', $cp);
    }
 
    print "};\n";
+
+   # Emit the definition of the perfect hash function.
+   my $funcname = $prop . '_hash_func';
+   my $f        = PerfectHash::generate_hash_function(\@cp_packed, $funcname,
+       fixed_key_length => 4);
+   printf "\n/* Perfect hash function for %s */", $prop;
+   print "\nstatic $f\n";
+
+   # Emit the structure that wraps the hash lookup information into
+   # one variable.
+   printf "/* Hash lookup information for %s */", $prop;
+   printf "\nstatic const pg_unicode_norminfo ";
+   printf "UnicodeNormInfo_%s = {\n", $prop;
+   printf "\tUnicodeNormProps_%s,\n", $prop;
+   printf "\t%s,\n",                  $funcname;
+   printf "\t%d\n",                   scalar @cp_packed;
+   printf "};\n";
 }
index ab5ce5934569bda20a004bad4afc441a3b9f0710..626645ac87058b70c06bdca2a661bab6944cdaf0 100644 (file)
@@ -465,15 +465,32 @@ get_canonical_class(pg_wchar ch)
        return entry->comb_class;
 }
 
-static int
-qc_compare(const void *p1, const void *p2)
+static const pg_unicode_normprops *
+qc_hash_lookup(pg_wchar ch, const pg_unicode_norminfo *norminfo)
 {
-   uint32      v1,
-               v2;
+   int         h;
+   uint32      hashkey;
 
-   v1 = ((const pg_unicode_normprops *) p1)->codepoint;
-   v2 = ((const pg_unicode_normprops *) p2)->codepoint;
-   return (v1 - v2);
+   /*
+    * Compute the hash function. The hash key is the codepoint with the bytes
+    * in network order.
+    */
+   hashkey = htonl(ch);
+   h = norminfo->hash(&hashkey);
+
+   /* An out-of-range result implies no match */
+   if (h < 0 || h >= norminfo->num_normprops)
+       return NULL;
+
+   /*
+    * Since it's a perfect hash, we need only match to the specific codepoint
+    * it identifies.
+    */
+   if (ch != norminfo->normprops[h].codepoint)
+       return NULL;
+
+   /* Success! */
+   return &norminfo->normprops[h];
 }
 
 /*
@@ -482,26 +499,15 @@ qc_compare(const void *p1, const void *p2)
 static UnicodeNormalizationQC
 qc_is_allowed(UnicodeNormalizationForm form, pg_wchar ch)
 {
-   pg_unicode_normprops key;
-   pg_unicode_normprops *found = NULL;
-
-   key.codepoint = ch;
+   const pg_unicode_normprops *found = NULL;
 
    switch (form)
    {
        case UNICODE_NFC:
-           found = bsearch(&key,
-                           UnicodeNormProps_NFC_QC,
-                           lengthof(UnicodeNormProps_NFC_QC),
-                           sizeof(pg_unicode_normprops),
-                           qc_compare);
+           found = qc_hash_lookup(ch, &UnicodeNormInfo_NFC_QC);
            break;
        case UNICODE_NFKC:
-           found = bsearch(&key,
-                           UnicodeNormProps_NFKC_QC,
-                           lengthof(UnicodeNormProps_NFKC_QC),
-                           sizeof(pg_unicode_normprops),
-                           qc_compare);
+           found = qc_hash_lookup(ch, &UnicodeNormInfo_NFKC_QC);
            break;
        default:
            Assert(false);
index 93a2e55b75837672650f0b42de8a8e5e9acf8744..2ae13d847f2af993e1e980b76e0c7d7491675ace 100644 (file)
@@ -3,7 +3,8 @@
 #include "common/unicode_norm.h"
 
 /*
- * We use a bit field here to save space.
+ * Normalization quick check entry for codepoint.  We use a bit field
+ * here to save space.
  */
 typedef struct
 {
@@ -11,6 +12,17 @@ typedef struct
    signed int  quickcheck:4;   /* really UnicodeNormalizationQC */
 } pg_unicode_normprops;
 
+/* Typedef for hash function on quick check table */
+typedef int (*qc_hash_func) (const void *key);
+
+/* Information for quick check lookup with perfect hash function */
+typedef struct
+{
+   const pg_unicode_normprops *normprops;
+   qc_hash_func    hash;
+   int     num_normprops;
+} pg_unicode_norminfo;
+
 static const pg_unicode_normprops UnicodeNormProps_NFC_QC[] = {
    {0x0300, UNICODE_NORM_QC_MAYBE},
    {0x0301, UNICODE_NORM_QC_MAYBE},
@@ -1245,6 +1257,343 @@ static const pg_unicode_normprops UnicodeNormProps_NFC_QC[] = {
    {0x2FA1D, UNICODE_NORM_QC_NO},
 };
 
+/* Perfect hash function for NFC_QC */
+static int
+NFC_QC_hash_func(const void *key)
+{
+   static const int16 h[2463] = {
+            0,  -2717,      0,    221,   1293,    223,   1295,    225,
+          226,    241,      0,    229,    230,    231,      0,      0,
+            0,      0,      0,      0,      0,      0,      0,      0,
+            0,      0,      0,      0,      0,      0,      0,      0,
+         -386,      0,      0,      0,      0,      0,      0,      0,
+         -163,      0,      0,      0,      0,      0,      0,      0,
+            0,      0,      0,      0,      0,      0,      0,      0,
+            0,      0,      0,      0,      0,      0,      0,      0,
+         -246,   -175,   1260,      0,      0,      0,   -174,   -173,
+            0,   -172,      0,      0,      0,      0,      0,      0,
+         1049,      0,    300,    301,   1071,      0,   1071,      0,
+         1071,   1071,   1057,      0,      0,      0,      0,   1061,
+            0,  -1053,   1664,      0,   2956,      0,      0,    -13,
+            0,      0,      0,      0,   2156,      0,      0,      0,
+            0,      0,      0,      0,     71,      0,   1082,      0,
+         1083,   1083,      0,   1084,      0,      0,      0,      0,
+            0,      0,      0,      0,      0,      0,      0,      0,
+            0,      0,      0,      0,      0,    359,    360,    361,
+        -1091,    363,   -762,   -130,   -129,   -128,   -127,   -126,
+          137,   -124,   -708,   -707,   -706,   -120,   -185,   -705,
+         -117,   -184,  -1307,   -114,   -113,   -112,   -111,      0,
+          386,    387,    388,    389,    -90,    391,    171,    172,
+          394,    -94,   -183,    397,    398,    399,    -98,   -225,
+          402,  -1019,   -636,  -1019,   -225,    407,    408,    409,
+          410,    411,    674,    413,   -171,   -170,   -169,    417,
+          352,   -168,    420,    353,   -770,    423,    424,    425,
+          426,    427,    428,  32767,    239,    239,    239,    239,
+          239,    239,    239,    239,    239,    239,    239,    239,
+          239,    239,  32767,  32767,    237,  32767,    236,  32767,
+        32767,    234,    234,    234,    234,    617,    234,    234,
+          234,  -2483,    234,  -1430,   1526,  -1430,   1527,     47,
+           48,    471,    230,  32767,  32767,  32767,    227,    227,
+          227,    227,    227,    227,    227,    227,    227,    227,
+          227,    227,    227,    227,    227,    227,    227,    227,
+         -159,    227,    227,    227,    227,    227,    227,    227,
+           64,    227,    227,    227,    227,    227,    227,    227,
+          227,    227,    227,    227,    227,    227,    227,    227,
+          227,    227,    227,    227,    227,    227,    227,    227,
+          -19,     52,   1487,    227,    227,    227,     53,     54,
+          227,     55,    227,    227,    227,    227,    227,    227,
+         1276,    227,   -989,  32767,   1296,    225,   1296,    225,
+         1296,   1296,   1282,    225,    225,    225,    225,   1286,
+          225,   -828,   1889,    225,   3181,    225,    225,    212,
+          225,    225,    225,    225,   2381,    225,    225,    225,
+          225,    225,    225,    225,    296,    225,   1307,    225,
+         1308,   1308,    225,   1309,    225,    225,    225,    225,
+          225,    225,    225,    225,    225,    225,    225,    225,
+          225,    225,    225,    225,    225,    584,    585,    586,
+         -866,    588,   -537,     95,     96,     97,     98,     99,
+          362,    101,   -483,   -482,   -481,    105,     40,   -480,
+          108,     41,  -1082,    111,    112,    113,    114,    225,
+          611,    612,    613,    614,    135,    616,    396,    397,
+          619,    131,     42,    622,    623,    624,    127,      0,
+          627,   -794,   -411,   -794,      0,    632,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+         -272,  32767,  32767,  32767,      0,  32767,  32767,  32767,
+        32767,  32767,   -166,   -165,  32767,  32767,  32767,  32767,
+         -164,      0,      0,      0,      0,      0,      0,      0,
+            0,      0,      0,      0,      0,      0,      0,      0,
+            0,      0,      0,      0,      0,      0,      0,      0,
+            0,      0,      0,      0,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,    397,  32767,    396,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,    386,
+            0,    386,    386,    386,    386,    386,    386,    386,
+          223,    386,    386,    386,  32767,    385,    385,    385,
+          385,    385,  32767,    384,  32767,    383,    383,  32767,
+          382,    382,  32767,    381,    381,    381,    381,    381,
+          135,    206,   1641,    381,  32767,  32767,  32767,  32767,
+        32767,  32767,   -160,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,   1148,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,      0,
+        32767,  32767,  32767,      0,      0,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,   -257,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,   -910,   -910,  32767,  32767,
+            0,  32767,      0,  32767,      0,  32767,      0,  32767,
+          147,  32767,      0,  32767,      0,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,      0,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,    143,  32767,    144,  32767,    145,
+        32767,    146,  32767,      0,  32767,    148,  32767,    149,
+        32767,  32767,  32767,   -160,  32767,  32767,  32767,  32767,
+        32767,  32767,     15,  32767,  32767,      0,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+          145,  32767,    144,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,      0,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,      0,   -148,  32767,  32767,  32767,  32767,
+        32767,  32767,   2009,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,      0,  32767,  32767,    135,   -918,  32767,
+          151,  32767,  32767,      0,      1,      2,      3,      4,
+          133,      5,      6,      7,      8,      9,     10,     11,
+        32767,  32767,  -1248,  32767,     13,    154,    188,    188,
+        32767,  32767,  32767,  32767,  32767,    155,     16,  32767,
+        32767,  32767,  32767,  32767,  32767,  -1853,  -1054,     18,
+        -1052,  -1051,  -1036,     22,  32767,    157,  32767,     28,
+           23,   1077,    673,     25,  -2930,      0,  32767,  32767,
+        32767,  32767,  32767,     27,  32767,    155,  32767,    154,
+        32767,  32767,    -62,     28,    -42,     30,  -1051,     32,
+        -1050,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,     34,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,    129,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,    672,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,      0,  32767,
+        32767,  32767,  32767,  32767,   -156,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,   -155,  32767,  32767,
+        32767,      0,      0,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+           73,  32767,  32767,  32767,  32767,     74,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,    675,
+        32767,  32767,  32767,  32767,  32767,     75,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,    165,  32767,  32767,  32767,    166,    167,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,    170,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,    689,    690,    691,    692,    693,    694,    695,
+          696,    697,    698,    699,    700,    701,    702,    703,
+          704,    705,    706,    707,    708,    709,    710,    711,
+          712,    713,    714,    715,    716,    717,    718,    719,
+          720,    721,    722,   -304,   -303,   -302,   -301,   -300,
+         -299,   -298,   -297,    930,   -295,   -294,   -293,   -292,
+         -291,   -290,   -289,   -288,   -287,   -286,   -285,   -284,
+         -283,   -282,   -281,   -280,   -279,   -278,   -277,   -276,
+         -275,    753,    754,    755,    646,    757,   -712,  -1765,
+          952,   -712,   2244,   -712,   2245,    765,    766,    767,
+          768,    125,    770,    771,    772,    773,    774,    775,
+          603,    777,    778,    779,    780,    781,    782,    783,
+          784,   2011,    786,    787,    788,    789,    790,    791,
+          792,    793,    794,    795,    796,    797,    798,    799,
+          800,    801,    802,    803,    804,    805,    806,    603,
+          603,    809,    603,    811,    603,    603,    814,    815,
+          816,    817,    435,    819,    820,    821,   3539,    823,
+          603,   -468,    603,   -468,    603,    603,    589,    831,
+          603,    603,    603,    835,    836,    837,    838,    839,
+          840,    841,    842,    843,    844,    845,    846,    847,
+          848,    849,    850,    851,    852,   1239,    854,    855,
+          856,    857,    858,    859,    860,   1024,    862,    863,
+          864,    865,    866,    867,    868,    869,    870,    871,
+          872,    873,    874,    875,    876,    877,    878,    879,
+          880,    881,    882,    883,    884,   1131,   1061,   -373,
+          888,    889,    890,   1065,   1065,    893,   1066,    895,
+          896,    897,    898,    899,    900,   -148,    902,    603,
+          603,   -166,    906,   -164,    908,   -162,   -161,   -146,
+          912,    913,    914,    915,   -145,    917,   1971,   -745,
+          920,  -2035,    922,    923,    937,    925,    926,    927,
+          928,  -1227,    930,    931,    932,    933,    934,    935,
+          936,    866,    938,   -143,    940,   -142,   -141,    943,
+         -140,  32767,    945,    946,    947,    948,    949,    950,
+          951,    952,    953,    954,    955,    956,    957,    958,
+          959,    960,    961,    -65,    -64,    -63,    -62,    -61,
+          -60,    -59,    -58,   1169,    -56,    -55,    -54,    -53,
+          -52,    -51,    -50,    -49,    -48,    -47,    -46,    -45,
+          -44,    -43,    -42,    -41,    -40,    -39,    -38,    -37,
+          -36,    992,    993,    994,    885,    996,   -473,  -1526,
+         1191,   -473,   2483,   -473,   2484,   1004,   1005,   1006,
+         1007,    364,   1009,   1010,   1011,   1012,   1013,   1014,
+          842,   1016,   1017,   1018,   1019,   1020,   1021,   1022,
+         1023,   2250,   1025,   1026,   1027,   1028,   1029,   1030,
+         1031,   1032,   1033,   1034,   1035,   1036,   1037,   1038,
+         1039,   1040,   1041,   1042,   1043,   1044,   1045,    842,
+          842,   1048,    842,   1050,    842,    842,   1053,   1054,
+         1055,   1056,    674,   1058,   1059,   1060,   3778,   1062,
+          842,   -229,    842,   -229,    842,    842,    828,   1070,
+          842,    842,    842,   1074,   1075,   1076,   1077,   1078,
+         1079,   1080,   1081,   1082,   1083,   1084,   1085,   1086,
+         1087,   1088,   1089,   1090,   1091,   1478,   1093,   1094,
+         1095,   1096,   1097,   1098,   1099,   1263,   1101,   1102,
+         1103,   1104,   1105,   1106,   1107,   1108,   1109,   1110,
+         1111,   1112,   1113,   1114,   1115,   1116,   1117,   1118,
+         1119,   1120,   1121,   1122,   1123,   1370,   1300,   -134,
+         1127,   1128,   1129,   1304,   1304,   1132,   1305,   1134,
+         1135,   1136,   1137,   1138,   1139,     91,   1141,    842,
+          842,     73,   1145,     75,   1147,     77,     78,     93,
+         1151,   1152,   1153,   1154,     94,   1156,   2210,   -506,
+         1159,  -1796,   1161,   1162,   1176,   1164,   1165,   1166,
+         1167,   -988,   1169,   1170,   1171,   1172,   1173,   1174,
+         1175,   1105,   1177,     96,   1179,     97,     98,   1182,
+           99,   1184,   1185,   1186,   1187,   1188,   1189,   1190,
+         1191,   1192,   1193,   1194,   1195,   1196,   1197,   1198,
+         1199,   1200,      0,    174,    175,    176,    177,    178,
+          179,    180,    181,   1408,    183,    184,    185,    186,
+          187,    188,    189,    190,    191,    192,    193,    194,
+          195,    196,    197,    198,    199,    200,    201,    202,
+          203,      0,      0,    206,      0,    208,      0,      0,
+          211,    212,    213,    214,   -168,    216,    217,    218,
+         2936,    220,      0,  -1071,      0,  -1071,      0,      0,
+          -14,    228,      0,      0,      0,    232,    233,    234,
+          235,    236,    237,    238,    239,    240,    241,    242,
+          243,    244,    245,    246,    247,    248,    249,    636,
+          251,    252,    253,    254,    255,    256,    257,    421,
+          259,    260,    261,    262,    263,    264,    265,    266,
+          267,    268,    269,    270,    271,    272,    273,    274,
+          275,    276,    277,    278,    279,    280,    281,    528,
+          458,   -976,    285,    286,    287,    462,    462,    290,
+          463,    292,    293,    294,    295,    296,    297,   -751,
+          299,      0,      0,   -769,    303,   -767,    305,   -765,
+         -764,   -749,    309,    310,    311,    312,   -748,    314,
+         1368,  -1348,    317,  -2638,    319,    320,    334,    322,
+          323,    324,    325,  -1830,    327,    328,    329,    330,
+          331,    332,    333,    263,    335,   -746,    337,   -745,
+         -744,    340,   -743,    342,    343,    344,    345,    346,
+          347,    348,    349,    350,    351,    352,    353,    354,
+          355,    356,    357,    358,      0,      0,      0,   1453,
+            0,   1126,    495,    495,    495,    495,    495,    233,
+          495,   1080,   1080,   1080,    495,    561,   1082,    495,
+          563,   1687,    495,    495,    495,    495,    385,      0,
+            0,      0,      0,    480,      0,    221,    221,      0,
+          489,    579,      0,      0,      0,    498,    626,      0,
+         1422,   1040,   1424,    631,      0,      0,      0,      0,
+            0,   -262,      0,    585,    585,    585,      0,     66,
+          587,      0,     68,   1192,      0,      0,      0,      0,
+            0,      0,  32767,  32767,  32767,  32767,    669,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,    670,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,    142,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,    115,    116,    117,    118,    119,    120,
+          121,    122,    123,    124,    125,    126,    127,    128,
+          129,    130,    131,    132,    133,    134,    135,    136,
+          137,    138,    139,    140,    141,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,      0,      0,      0,      0,      0,
+            0,      0,      0,      0,      0,      0,      0,      0,
+            0,      0,      0,      0,      0,      0,      0,      0,
+            0,      0,      0,      0,      0,      0,      0,      0,
+            0,      0,      0,      0,      0,   1027,   1027,   1027,
+         1027,   1027,   1027,   1027,   1027,   -199,   1027,   1027,
+         1027,   1027,   1027,   1027,   1027,   1027,   1027,   1027,
+         1027,   1027,   1027,   1027,   1027,   1027,   1027,   1027,
+         1027,   1027,   1027,      0,      0,      0,    110,      0,
+         1470,   2524,   -192,   1473,  -1482,   1475,  -1481,      0,
+            0,      0,      0,    644,      0,      0,      0,      0,
+            0,      0,    173,      0,      0,      0,      0,      0,
+            0,      0,      0,  -1226,      0,      0,      0,      0,
+            0,      0,      0,      0,      0,      0,      0,      0,
+            0,      0,      0,      0,      0,      0,      0,      0,
+            0,    204,    205,      0,    207,      0,    209,    210,
+            0,      0,      0,      0,    383,      0,      0,
+   };
+
+   const unsigned char *k = (const unsigned char *) key;
+   size_t      keylen = 4;
+   uint32      a = 0;
+   uint32      b = 0;
+
+   while (keylen--)
+   {
+       unsigned char c = *k++;
+
+       a = a * 257 + c;
+       b = b * 17 + c;
+   }
+   return h[a % 2463] + h[b % 2463];
+}
+
+/* Hash lookup information for NFC_QC */
+static const pg_unicode_norminfo UnicodeNormInfo_NFC_QC = {
+   UnicodeNormProps_NFC_QC,
+   NFC_QC_hash_func,
+   1231
+};
+
 static const pg_unicode_normprops UnicodeNormProps_NFKC_QC[] = {
    {0x00A0, UNICODE_NORM_QC_NO},
    {0x00A8, UNICODE_NORM_QC_NO},
@@ -6165,3 +6514,1262 @@ static const pg_unicode_normprops UnicodeNormProps_NFKC_QC[] = {
    {0x2FA1C, UNICODE_NORM_QC_NO},
    {0x2FA1D, UNICODE_NORM_QC_NO},
 };
+
+/* Perfect hash function for NFKC_QC */
+static int
+NFKC_QC_hash_func(const void *key)
+{
+   static const int16 h[9837] = {
+        -2472,  -2472,  -2472,  -2472,  -2472,  -2472,  -2472,  -2472,
+        -2472,  -2472,  -2472,  -2472,  -2472,  -2472,  -2472,  -2472,
+        -2472,  -2472,  -2472,  -2472,  -2472,  -2472,  -2472,  -2472,
+        -2472,  -2472,  -2472,  -2472,  -2472,  32767,  32767,  32767,
+        -2475,  -2475,  -2475,  -2475,  -2475,  -2475,  -2475,  -2475,
+        -2475,  -2475,  -2475,  -2475,  -2475,  -2475,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,    865,    865,    865,    865,    865,    865,    865,
+          865,    865,    865,    865,  -2255,  32767,  -5207,  32767,
+        -5207,    860,    860,    860,    860,    860,    860,    860,
+          860,    860,   4250,    861,    861,    861,   3339,   3339,
+         3339,   3339,   3339,   3339,   3339,   3339,   3339,   3339,
+         3339,   3339,   3339,   3339,   3339,   3339,   3339,   3339,
+        32767,   3338,   3338,   3338,   3338,   3338,   3338,   3338,
+         3338,   3338,   3338,   3338,   3338,   3338,   3338,   3338,
+         3338,   3338,   3338,   3338,   3338,   3338,   3338,   3338,
+         3338,   3338,   3338,   3338,   3338,   3338,   3338,   3338,
+         3338,      9,     10,  32767,     11,     12,      0,  32767,
+            0,   2913,   2914,   2915,   2916,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,   2917,  32767,   2918,   -100,
+         2919,   2920,   2921,    840,    840,    840,   2922,      0,
+            0,      0,      0,      0,   2206,      0,   2923,      0,
+         2924,   2925,   2926,      0,      0,      0,  -2590,      0,
+            0,      0,      0,      0,      0,      0,   2934,      0,
+         2474,   2931,   2932,      0,      0,      0,      0,      0,
+           14,    805,      0,      0,   2933,      0,   2934,      0,
+         2935,   2936,      0,      0,      0,     16,     17,      0,
+            0,      0,      0,      0,      0,      0,      0,     18,
+            0,      0,      0,      0,      0,      0,      0,      0,
+            0,      0,      0,      0,      0,      0,      0,      0,
+            0,      0,      0,      0,      0,      0,      0,      0,
+            0,      0,      0,      0,      0,      0,      0,      0,
+            0,      0,      0,      0,   -790,      0,      0,      0,
+            0,      0,      0,      0,      0,      0,      0,      0,
+            0,      0,  -1675,      0,      0,     19,      0,  -1679,
+            0,      0,      0,      0,      0,      0,      0,      0,
+            0,      0,      0,      0,      0,      0,      0,  -1694,
+            0,      0,      0,      0,      0,      0,      0,      0,
+            0,      0,      0,      0,      0,      0,      0,      0,
+            0,      0,      0,      0,      0,      0,      0,      0,
+            0,      0,      0,      0,      0,      0,      0,      0,
+            0,      0,      0,      0,      0,      0,      0,      0,
+            0,      0,      0,      0,      0,      0,      0,      0,
+            0,      0,     20,     21,     22,     23,     24,     25,
+           26,     27,     28,      0,      0,      0,      0,      0,
+            0,      0,      0,      0,      0,      0,      0,      0,
+            0,      0,      0,      0,      0,      0,      0,      0,
+            0,      0,      0,      0,      0,      0,      0,      0,
+            0,      0,      0,      0,      0,      0,      0,      0,
+            0,      0,      0,      0,      0,      0,      0,      0,
+            0,      0,      0,      0,      0,      0,      0,      0,
+            0,      0,      0,      0,      0,      0,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,     29,     30,     31,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,    724,   2668,    724,   4350,  -2633,  -2633,
+         2533,   2534,   2535,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,   2518,   2519,   2520,   1431,     45,     46,
+        32767,  32767,     47,     48,     49,     50,     51,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  -3011,     53,  -1125,  -3010,  -3010,
+        32767,  -3334,  -1123,  -3011,     60,     61,     62,     63,
+        32767,  32767,     64,  32767,     65,  32767,     66,     67,
+        32767,  32767,  32767,  32767,  32767,  32767,   2268,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,     69,     70,
+           71,     72,     73,     74,  32767,  32767,  32767,  32767,
+           75,     76,  32767,     77,    281,  32767,  32767,  32767,
+        32767,  32767,  32767,    811,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,   1341,   1342,   1343,   1344,   1345,
+         1346,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,     86,
+        32767,  32767,  32767,  32767,  32767,   4550,  32767,  32767,
+        32767,   1135,  32767,  32767,  32767,  32767,  32767,   1130,
+         3016,  32767,   3017,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,    677,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,   2858,   2859,    651,   2861,   -438,
+         2863,   2864,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  -5305,  -5305,  -5305,  32767,  -5306,
+        -5306,  32767,  32767,  32767,   2871,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,   3022,   3023,    680,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,   -272,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,   4308,   4309,   4310,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,   4311,   4312,   4313,
+         4314,   4315,   4316,   4317,   4318,   4319,   4320,   4321,
+         4322,   4323,   4324,   4325,   4326,   4307,   4307,   4307,
+         4307,   4307,   4307,   4307,   4307,   4307,   4336,   4337,
+         4338,   4339,   4340,   4341,   4342,   4343,   4344,   4345,
+         4346,   4347,   4348,   4349,   4350,   4351,   4352,   4353,
+         4354,  32767,  32767,  32767,  32767,   4355,   4356,   4357,
+         4358,   4359,   4360,   4361,   4362,   4363,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,   4364,   4365,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+            0,      0,      0,      0,      0,      0,      0,      0,
+            0,      0,   2202,      0,      0,      0,     59,      0,
+            0,     35,      0,      0,      0,   3549,      0,      0,
+            0,      0,      0,   3394,      0,      0,   3399,      0,
+            0,      0,      0,      0,      0,      0,      0,   2012,
+            0,      0,      0,      0,     87,   2022,      0,   7490,
+            0,      0,      0,      0,      0,      0,      0,      0,
+            0,      0,      0,      0,      0,      0,      0,      0,
+         2255,      0,   2256,   2256,   2256,      0,      0,      0,
+            0,      0,      0,      0,      0,      0,      0,      0,
+            0,      0,      0,      0,      0,  32767,      0,      0,
+            0,      0,      0,      0,  -1759,      0,      0,      0,
+            0,      0,      0,      0,      0,      0,      0,      0,
+            0,      0,      0,      0,      0,      0,      0,      0,
+            0,      0,      0,      0,      0,      0,      0,      0,
+            0,      0,      0,      0,      0,      0,      0,      0,
+            0,      0,      0,      0,   4767,      0,      0,   4772,
+            0,      0,      0,      0,      0,      0,      0,      0,
+            0,      0,      0,      0,      0,      0,      0,      0,
+            0,      0,      0,      0,      0,  32767,   5977,      0,
+          892,  32767,      0,  32767,  32767,      0,      0,  32767,
+        32767,   2344,   4834,   4835,   4836,  32767,      0,   4840,
+            0,      0,      0,      0,      0,      0,      0,      0,
+            0,      0,  32767,      0,  32767,      0,      0,      0,
+            0,      0,      0,      0,  32767,      0,      0,      0,
+            0,      0,      0,      0,      0,      0,      0,      0,
+            0,      0,      0,      0,      0,      0,      0,      0,
+            0,      0,      0,      0,      0,      0,      0,      0,
+            0,      0,      0,      0,      0,      0,      0,      0,
+            0,      0,      0,      0,      0,      0,      0,      0,
+            0,      0,      0,      0,      0,      0,      0,      0,
+            0,      0,      0,      0,      0,      0,      0,      0,
+        32767,  32767,      0,  32767,      0,      0,      0,  32767,
+        32767,  32767,  32767,   3261,   3262,  32767,   3007,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,    106,    107,    108,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,    109,    110,    111,    112,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,      0,      0,  -2344,
+        -2344,      0,  32767,      0,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  -1642,   1469,  -1641,   1469,  -1640,   1469,
+         1469,   1457,   1469,   1469,   1469,  -4254,  -4254,  -4254,
+        -4254,  -4254,  -4254,  -4254,  -4254,  -4254,  -4254,  -4254,
+        -4254,  -4254,  -4254,  -4254,  -4254,  -4254,  -3359,  -4254,
+        -4254,  -4254,  -4254,  -4254,  -4254,  -4254,  -4254,  -4254,
+        -4254,  -4254,  -4254,  -4254,  -4254,  -4254,  -4254,  -4254,
+        -4254,  -4254,  -4254,  -4254,  -4254,  -4254,  -4254,  -4254,
+        -4254,  -4254,  -4254,  -4254,  -4254,  -4254,  -4254,  -4254,
+        -4254,  -4254,  -4254,  -4254,  -4254,  -4254,  -4254,  -4103,
+        -1478,      0,  -4254,  -4254,  -4254,  -4254,  -4254,  -4254,
+        -4254,  -4254,  -4254,  -2433,  -4254,  -4254,  -4254,  -3658,
+        -4254,  -4254,  -4254,  -4254,  -4254,  -4254,  -4254,  -4254,
+        -4254,  -4254,      0,  -4253,  -4253,  -4253,  -4253,  -4253,
+        -4253,  -4253,  -4253,  -4253,   -678,   -677,   -676,   -675,
+         -674,   -673,   -672,  -4253,    314,  -4253,  -4253,  -4253,
+        -4253,  -4253,  -4253,  -4253,  -4253,  -4253,  -4253,  -4253,
+        -4253,      0,      0,      0,      0,      0,      0,      0,
+            0,      0,      0,      0,      0,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,   1464,   1465,   1466,   1467,
+         1468,   1469,      0,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,      0,
+            0,      0,      0,      0,  32767,  32767,  32767,  32767,
+        32767,      0,  32767,      0,      0,      0,      0,      0,
+            0,      0,      0,      0,      0,      0,      0,      0,
+            0,      0,      0,      0,      0,      0,      0,      0,
+            0,    827,    828,    829,  -2469,  -2469,   -260,      0,
+            0,  32767,      0,  32767,      0,      0,  32767,      0,
+            0,  32767,      0,      0,      0,      0,      0,      0,
+            0,      0,      0,      0,      0,      0,      0,      0,
+            0,      0,      0,      0,      0,      0,      0,      0,
+            0,      0,      0,      0,      0,      0,      0,      0,
+         3575,   3576,   3577,   3578,   3579,   3580,   3581,      0,
+         4567,      0,      0,      0,      0,      0,      0,      0,
+            0,      0,      0,      0,      0,      0,      0,      0,
+            0,      0,      0,   2201,   4411,      0,      0,      0,
+            0,      0,      0,      0,      0,      0,      0,      0,
+            0,      0,      0,      0,      0,      0,      0,      0,
+            0,      0,      0,      0,  -3338,      0,      0,      0,
+            0,      0,      0,      0,  -3337,      0,  -3336,      0,
+            0,      0,      0,  -3335,      0,      0,  -3334,  -3333,
+        -3332,  -3331,      0,      0,  -3330,      0,      0,  32767,
+            0,      0,     13,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,      0,
+            0,      0,      0,      0,      0,      0,      0,      0,
+            0,      0,      0,      0,      0,      0,      0,      0,
+            0,      0,      0,      0,      0,      0,      0,      0,
+            0,      0,      0,      0,      0,      0,      0,      0,
+            0,      0,      0,      0,      0,      0,      0,      0,
+            0,      0,      0,      0,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,   3073,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        -2556,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+         3074,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,   2355,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,   -488,   -488,   -488,   -302,  -3067,  -3067,
+        -3067,  -3067,   -488,   -488,   -488,   -488,   2999,   -488,
+         2999,   -488,   -488,   -488,  -3067,  -3067,  -3067,   -488,
+         -488,  -3067,  -3067,  -3067,   -488,   -488,   -488,   2463,
+         -488,   -488,   -488,   -301,   2465,   -488,   2466,   2467,
+        -3600,   -493,  -3599,   -488,  -3598,   -488,  -3597,   -488,
+         -488,   -500,   -488,   -488,   -488,   -488,   -488,   2470,
+         2471,   2472,   -488,   -488,   -254,   -488,   -488,   -488,
+         -488,   -488,   -104,   -488,   -488,   -488,   -102,   -101,
+         -100,    -99,    -98,    -97,    -96,    -95,    -94,    -93,
+          -92,   -488,   -488,   -488,   -488,   -488,   -488,   -488,
+         -488,   -488,  -2194,  -2194,  -2194,  -2194,  -2194,  -2194,
+        -2194,  -2194,  -2194,  -2194,   5211,   3269,   5213,   3269,
+         6895,    -88,    -88,   5078,   5079,   5080,   1773,    -92,
+          -92,   1773,   1773,   1773,   1773,   1773,   1773,   5072,
+         5073,   2865,   5075,   1776,   5077,   5078,   1778,   1778,
+         6942,   6943,   1778,   1778,   1778,   5086,   6952,   6953,
+         5089,   5090,   5091,   5092,   5093,   5094,   5095,   5096,
+         4007,   5098,   2333,   2334,   2335,   2336,   2337,  -3066,
+        -3066,  -3066,   2341,  -3066,  -3066,   2344,   2345,   2346,
+         5114,    317,   2349,    848,    849,    850,   2353,    852,
+          853,    854,    855,    856,    857,    858,    859,    860,
+          861,    692,    692,    692,    692,    692,    692,    692,
+          692,    692,    692,    692,    692,    692,    692,    692,
+          692,    692,    692,    692,    692,    692,    692,    692,
+          692,    692,    692,    692,    692,    692,    692,    692,
+          692,    692,    692,    692,    692,    692,    692,    692,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,   3093,   3094,   3095,   3096,   3097,   3098,   3099,
+         3100,   3101,   3102,    901,   3104,   3105,   3106,   3048,
+         3108,   3109,   3075,   3111,   3112,   3113,   -435,   3115,
+         3116,   3117,   3118,   3119,   -274,   3121,   3122,   -276,
+         3124,   3125,   3126,   3127,   3128,   3129,   3130,   3131,
+         1120,   3133,   3134,   3135,   3136,   3050,   1116,   3139,
+        -4350,   3141,   3142,   3143,   3144,   3145,   3146,   3147,
+         3148,   3149,   3150,   3151,   3152,   3153,   3154,   3155,
+         3156,    902,   3158,    903,    904,    905,   3162,   3163,
+         3164,   3165,   3166,   3167,   3168,   3169,   3170,   3171,
+         3172,   3173,   3174,   3175,   3176,   3177,  32767,   3178,
+         3179,   3180,   3181,   3182,   3183,   4943,   3185,   3186,
+         3187,   3188,   3189,   3190,   3191,   3192,   3193,   3194,
+         3195,   3196,   3197,   3198,   3199,   3200,   3201,   3202,
+         3203,   3204,   3205,   3206,   3207,   3208,   3209,   3210,
+         3211,   3212,   3213,   3214,   3215,   3216,   3217,   3218,
+         3219,   3220,   3221,   3222,   3223,  -1543,   3225,   3226,
+        -1545,   3228,   3229,   3230,   3231,   3232,   3233,   3234,
+         3235,   3236,   3237,   3238,   3239,   3240,   3241,   3242,
+         3243,   3244,   3245,   3246,   3247,   3248,  -1251,  -2728,
+         3250,  32767,  32767,   3251,    906,    907,   3252,   3253,
+        32767,  32767,    910,  -1579,  -1579,  -1579,  32767,   3258,
+        -1581,   3260,   3261,   3262,   3263,   3264,   3265,   3266,
+         3267,   3268,   3269,  32767,   3270,  32767,   3271,   3272,
+         3273,   3274,   3275,   3276,   3277,  32767,   3278,   3279,
+         3280,   3281,   3282,   3283,   3284,   3285,   3286,   3287,
+         3288,   3289,   3290,   3291,   3292,   3293,   3294,   3295,
+         3296,   3297,   3298,   3299,   3300,   3301,   3302,   3303,
+         3304,   3305,   3306,   3307,   3308,   3309,   3310,   3311,
+         3312,   3313,   3314,   3315,   3316,   3317,   3318,   3319,
+         3320,   3321,   3322,   3323,   3324,   3325,   3326,   3327,
+         3328,   3329,   3330,   3331,   3332,   3333,   3334,   3335,
+         3336,  32767,   3337,   3338,   3339,   3340,   3341,   3342,
+            0,   3343,   3344,   3345,   3346,  32767,  32767,   3347,
+         3348,   3349,   3350,   3351,   3352,   3353,   3354,  32767,
+         3355,   3356,   3357,   3358,   3359,   3360,   3361,  32767,
+         3362,   3363,   3364,   3365,   3366,   3367,   3368,   3369,
+         3370,   3371,   3372,   3373,   3374,   3375,   3376,   3377,
+         3378,   3379,   3380,   3381,   3382,   3383,   3384,   3385,
+         3386,   3387,   3388,   3389,      0,   3390,   3391,   3392,
+          915,    916,    917,    918,    919,    920,    921,    922,
+          923,    924,    925,    926,    927,    928,    929,    930,
+          931,    932,    933,    934,    935,    936,    937,    938,
+          939,    940,    941,    942,    943,    944,    945,    946,
+          947,    948,    949,    950,    951,    952,    953,    954,
+          955,    956,    957,    958,    959,    960,    961,    962,
+          963,    964,    965,    966,    967,    968,    969,    970,
+          971,    972,    973,    974,    975,    976,   3449,   3450,
+         3451,   3452,   3453,   3454,   3455,   3456,   3457,   3458,
+         3459,   3460,   3461,   3462,   3463,   3464,   3465,   3466,
+         3467,   3468,   3469,   3470,   3471,   3472,   3473,   3474,
+         3475,   3476,   3477,   3478,   3479,   3480,   3481,   3482,
+         3483,   3484,   3485,   3486,   3487,   3488,   3489,   3490,
+         3491,   3492,   3493,   3494,   3495,   3496,   3497,   3498,
+         3499,   3500,   3501,   3502,   3503,   3504,   3505,   3506,
+         3507,   3508,   3509,   3510,   3511,   3512,   3513,   3514,
+         3515,   3516,   3517,   3518,   3519,   3520,   3521,   3522,
+         3523,   3524,   3525,   3526,   3527,   3528,   3529,   3530,
+         3531,   3532,   3533,   3534,   3535,   3536,   3537,   3538,
+         3539,   3540,   3541,   3542,   3543,   3544,   3545,   3546,
+         3547,   3548,   3549,   3550,   3551,   3552,   3553,   3554,
+         3555,   3556,   3557,   3558,   3559,   3560,   3561,   3562,
+         3563,   3564,   3565,   3566,   3567,   3568,   3569,   3570,
+         3571,   3572,   3573,   3574,   3575,   3576,   3577,   6056,
+         6057,   6058,  32767,   3581,   3582,   3583,   3584,   3585,
+         4157,   4158,   4159,   3589,   4162,  -4510,  -1558,  -1557,
+        -1556,  -1742,  -4507,  -1553,  -4506,  -4506,   1562,  -1544,
+         1563,  -1547,   1564,  -1545,   1565,  -1543,  -1542,  -1529,
+        -1540,  -1539,  -1538,  -1537,  -1536,  -4493,  -4493,  -4493,
+        -1532,  -1531,  -1764,  -1529,   3622,  -1528,  -1527,  -1526,
+        -1909,  -1524,  -1523,  -1522,  -1907,  -1907,  -1907,  -1907,
+        -1907,  -1907,  -1907,  -1907,  -1907,  -1907,  -1907,  -1510,
+        -1509,   1071,   1072,   1073,   1074,   1075,   1076,   1077,
+         1078,   1079,   1080,   1081,   1082,   1083,   1084,   1085,
+         1086,   1087,   1088,   1089,   1090,   3663,   3664,   3665,
+         3666,   3667,   3668,   3669,   3670,   3671,   3672,   3673,
+         3674,   1095,   1096,   1097,   1098,   1099,   1100,   1101,
+         3682,   1103,   3684,   1105,   3686,   3687,   3688,   1109,
+         1110,   1111,   3692,   1113,   1114,   1115,   1116,   1117,
+         1118,   1119,   3700,   1121,   3702,   3703,   3704,   1125,
+         1126,   1127,  -1809,  -1809,  -1809,  -1809,  -1809,  -1809,
+         3720,   3721,   3722,   3717,   3718,   3719,   3720,   1140,
+         1141,   1142,   1143,  -1802,   1145,   1146,   1147,   1148,
+         3730,  -1797,   3732,   1152,   3734,   3735,   1155,   1156,
+         3738,   3739,   3740,   3741,   3742,   3743,  -1785,  -1785,
+        -1785,  -1779,  -1324,   1168,   1169,   1170,   1171,   1172,
+         3752,   3753,   1175,   1176,   1177,    992,   3758,   3759,
+         3760,   3761,   1183,   1184,   1185,   1186,  -2300,   1188,
+        -2298,   1190,   1191,   1192,   3772,   3773,   3774,   1196,
+         1197,   3777,   3778,   3779,   1201,   1202,   1203,  -1747,
+         1205,   1206,   1207,   1021,  -1744,   1210,  -1743,  -1743,
+         4325,   1219,   4326,   1216,   4327,   1218,   4328,   1220,
+         1221,   1234,   1223,   1224,   1225,   1226,   1227,  -1730,
+        -1730,  -1730,   1231,   1232,    999,   1234,   1235,   1236,
+         1237,   1238,    855,   1240,   1241,   1242,    857,    857,
+          857,    857,    857,    857,    857,    857,    857,    857,
+          857,   1254,   1255,   1256,   1257,   1258,   1259,   1260,
+         1261,   1262,   2969,   2970,   2971,   2972,   2973,   2974,
+         2975,   2976,   2977,   2978,  -4426,  -2483,  -4426,  -2481,
+        -6106,    878,    879,  -4286,  -4286,  -4286,   -978,    888,
+          889,   -975,   -974,   -973,   -972,   -971,   -970,  -4268,
+        -4268,  -2059,  -4268,   -968,  -4268,  -4268,   -967,   -966,
+        -6129,  -6129,   -963,   -962,   -961,  -4268,  -6133,  -6133,
+        -4268,  -4268,  -4268,  -4268,  -4268,  -4268,  -4268,  -4268,
+        -3178,  -4268,  -1502,  -1502,  -1502,  -1502,  -1502,   3902,
+         3903,   3904,  -1502,   3906,   3907,  -1502,  -1502,  -1502,
+        -4269,    529,  -1502,      0,      0,      0,  -1502,      0,
+            0,      0,      0,      0,      0,      0,      0,      0,
+            0,    170,    171,    172,    173,    174,    175,    176,
+          177,    178,    179,    180,    181,    182,    183,    184,
+          185,    186,    187,    188,    189,    190,    191,    192,
+          193,    194,    195,    196,    197,    198,    199,    200,
+          201,    202,    203,    204,    205,    206,    207,    208,
+          209,    210,    211,    212,    213,    214,    215,    216,
+          217,    218,    219,  -3194,    221,    222,    223,    224,
+        -1657,    226,    227,  -1657,    229,    230,  -1655,    555,
+        -1655,    234,    235,    236,    732,    238,    239,    240,
+          241,    242,    243,  -1655,    245,    246,    247,    248,
+        -1655,    250,  -1655,    252,  -1655,  -1655,  -1655,  -1655,
+        -1655,  -1655,    259,  -1655,  -1655,  -1655,  -1655,    264,
+        -1655,    266,  -1655,    268,  -1655,  -3620,    271,    272,
+        -1655,    274,    275,  -1655,    277,  -1655,  -1655,    280,
+        -1655,    282,   5746,   5747,   5748,   5749,  -1655,    288,
+        -1655,    290,  -3335,   3649,   3650,  -1515,  -1515,  -1515,
+         1793,   3659,   3660,   1796,   1797,   1798,   1799,   1800,
+         1801,  -1497,  -1497,    712,  -1497,   1803,  -1497,  -1497,
+         1804,   1805,  -3358,  -3358,   1808,   1809,   1810,  -1497,
+        -3362,  -3362,  -1497,  -1497,  -1497,  -1497,  -1497,  -1497,
+        -1497,  -1497,   -407,  -1497,  -1497,  -1497,  -1497,  -1497,
+        -1497,   3667,   3668,  -1497,  -1497,  -1497,   1811,   3677,
+         3678,  32767,   1814,  32767,   1815,  32767,  32767,   1816,
+         1817,  32767,  32767,  32767,   1818,   1819,   1820,   1821,
+        -3342,  -3342,   1824,   1825,   1826,   1827,   1828,   1829,
+         1830,   1831,   1832,   1833,   1834,   1835,   1836,   1837,
+         1838,   1839,   1840,   1841,   1842,   1843,   1844,   1845,
+         1846,   1847,   1848,   1849,   1850,   1851,   1852,   1853,
+         1854,   1855,   1856,   1857,   1858,   1859,   1860,   1861,
+         1862,   1863,   1864,   1865,   1866,   1867,   1868,   1869,
+         1870,   1871,   1872,   1873,   1874,   1875,   1876,  -1537,
+         1878,   1879,   1880,   1881,      0,   1883,   1884,      0,
+          529,      0,      0,   2210,      0,   1889,   1890,   1891,
+         2387,   1893,   1894,   1895,   1896,   1897,   1898,      0,
+         1900,   1901,   1902,   1903,      0,   1905,      0,   1907,
+            0,      0,      0,      0,      0,      0,   1914,      0,
+            0,      0,      0,   1919,      0,   1921,      0,   1923,
+            0,  -1965,   1926,   1927,      0,   1929,   1930,      0,
+         1932,      0,      0,   1935,      0,   1937,   7401,   7402,
+         7403,   7404,      0,   1943,      0,   1945,   1946,      0,
+         1948,      0,      0,   1951,   1952,   1953,   1954,      0,
+         1956,   1957,   1958,   1959,   1960,   1961,   1962,      0,
+         1964,   1965,   1966,   1967,      0,   1969,   1970,   1971,
+         1972,      0,   1974,      0,   1976,   1977,   1978,   1979,
+         1980,   1981,   1982,   1983,   1984,   1985,      0,   1987,
+         1988,   1989,   1990,   1991,    566,    566,    566,   5141,
+         5142,    566,    566,    566,    566,    566,    566,    566,
+            0,      0,      0,      0,      0,      0,      0,      0,
+            0,      0,   8673,   5722,   5722,   5722,      0,   8676,
+         5723,   8677,   8678,   2611,   5718,   2612,   5723,   2613,
+         5723,   2614,   5723,   5723,   5711,   5723,   5723,   5723,
+            0,      0,      0,      0,      0,      0,      0,      0,
+            0,      0,      0,      0,      0,      0,      0,      0,
+            0,    895,      0,      0,      0,      0,      0,      0,
+            0,      0,      0,      0,      0,      0,      0,      0,
+            0,      0,      0,      0,      0,      0,      0,      0,
+            0,      0,      0,      0,      0,      0,      0,      0,
+            0,      0,      0,      0,      0,      0,      0,      0,
+            0,      0,    151,   2776,   4254,      0,      0,      0,
+            0,      0,      0,      0,      0,      0,   1821,      0,
+            0,      0,    596,      0,      0,      0,      0,      0,
+            0,      0,      0,      0,      0,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  -2856,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  -2901,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  -1025,  32767,  32767,  32767,
+        32767,  -2910,  32767,  32767,  32767,  32767,    157,  32767,
+        32767,  32767,  32767,    158,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+         2359,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,    160,  32767,    161,    162,    163,    164,
+          165,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+          898,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,   1428,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,   1254,  32767,  32767,  32767,
+        32767,   1250,  32767,  32767,  32767,  32767,   1246,  32767,
+        32767,  32767,  32767,   1243,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+         1231,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,   1842,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+         3177,   1235,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  -4323,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,      0,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,      0,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,    174,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,   1830,   -112,   1832,   -112,   3514,  -3469,
+        -3469,   1697,   1698,   1699,  -1608,  -3473,  -3473,  -1608,
+        -1608,  -1608,  -1608,  -1608,  -1608,   1691,   1692,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  -1623,  -1623,  -1623,   3541,   3542,  -1623,  -1623,
+        -1623,  -1623,  -1623,  -1623,  -1623,  -1623,  -1623,  -1623,
+        -1623,  -1623,  -1623,  -1623,  -1623,  -1623,  -1623,  -1623,
+        -1623,  -1623,  -1623,  -1623,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,   -766,   2253,   2254,   2255,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+         1531,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,      0,      0,  32767,      0,      0,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,   -173,   -173,   -173,   -173,   -173,
+         -173,   -173,   -173,   -173,   -173,   -173,   -173,   3241,
+         -173,   -173,   -173,   -173,   1709,   -173,   -173,   1712,
+         -173,   -173,   1713,   -496,   1715,   -173,   -173,   -173,
+         -668,   -173,   -173,   -173,   -173,   -173,   -173,   1726,
+         -173,   -173,   -173,   -173,   1731,   -173,   1733,   -173,
+         1735,   1736,   1737,   1738,   1739,   1740,   -173,   1742,
+         1743,   1744,   1745,   -173,   1747,   -173,   1749,   -173,
+         1751,   3717,   -173,   -173,   1755,   -173,   -173,   1758,
+         -173,   1760,   1761,   -173,   1763,   -173,  -5636,  -5636,
+        -5636,  -5636,   1769,   -173,   1771,   -173,   3453,  -3530,
+        -3530,   1636,   1637,   1638,  -1669,  -3534,  -3534,  -1669,
+        -1669,  -1669,  -1669,  -1669,  -1669,   1630,   1631,   -577,
+         1633,  -1666,   1635,   1636,  -1664,  -1664,   3500,   3501,
+        -1664,  -1664,  -1664,   1644,   3510,   3511,   1647,   1648,
+         1649,   1650,   1651,   1652,   1653,   1654,    565,   1656,
+         1657,   1658,   1659,   1660,   1661,  -3502,  -3502,   1664,
+         1665,   1666,   1667,   1668,   1669,   1670,   1671,   1672,
+         1673,   1674,   1675,   1676,   1677,   1678,   1679,   1680,
+         1681,   1682,   1683,   1684,   1685,   1686,   1687,   1688,
+         1689,   1690,   1691,   1692,   1693,   1694,   1695,   1696,
+         1697,   1698,   1699,   1700,   1701,   1702,   1703,   1704,
+         1705,   1706,   1707,   1708,   1709,   1710,   1711,   1712,
+         1713,   1714,   1715,   1716,  -1697,   1718,   1719,   1720,
+         1721,   -160,   1723,   1724,   -160,   1726,   1727,   -158,
+         2052,   -158,   1731,   1732,   1733,   2229,   1735,   1736,
+         1737,   1738,   1739,   1740,   -158,   1742,   1743,   1744,
+         1745,   -158,   1747,   -158,   1749,   -158,   -158,   -158,
+         -158,   -158,   -158,   1756,   -158,   -158,   -158,   -158,
+         1761,   -158,   1763,   -158,   1765,   -158,  -2123,   1768,
+         1769,   -158,   1771,   1772,   -158,   1774,   -158,   -158,
+         1777,   -158,   1779,   7243,   7244,   7245,   7246,   -158,
+         1785,   -158,   1787,  -1838,   5146,   5147,    -18,    -18,
+          -18,   3290,   5156,   5157,   3293,   3294,   3295,   3296,
+         3297,   3298,      0,      0,   2209,      0,   3300,      0,
+            0,   3301,   3302,  -1861,  -1861,   3305,   3306,   3307,
+            0,  -1865,  -1865,      0,      0,      0,      0,      0,
+            0,      0,      0,   1090,      0,      0,      0,      0,
+            0,      0,   5164,   5165,      0,      0,      0,      0,
+            0,      0,      0,      0,      0,      0,      0,      0,
+            0,      0,      0,      0,      0,      0,      0,      0,
+            0,      0,      0,      0,      0,      0,      0,      0,
+            0,      0,      0,      0,      0,      0,      0,      0,
+            0,      0,      0,      0,      0,      0,      0,      0,
+            0,      0,      0,      0,      0,      0,      0,      0,
+            0,   3414,      0,      0,      0,      0,   1882,      0,
+            0,   1885,      0,      0,   1886,   -323,   1888,      0,
+            0,      0,   -495,      0,      0,      0,      0,      0,
+            0,   1899,      0,      0,      0,      0,   1904,      0,
+         1906,      0,   1908,   1909,   1910,   1911,   1912,   1913,
+            0,   1915,   1916,   1917,   1918,      0,   1920,      0,
+         1922,      0,   1924,   3890,      0,      0,   1928,      0,
+            0,   1931,      0,   1933,   1934,      0,   1936,      0,
+        -5463,  -5463,  -5463,  -5463,   1942,      0,   1944,      0,
+            0,   1947,      0,   1949,   1950,      0,      0,      0,
+            0,   1955,      0,      0,      0,      0,      0,      0,
+            0,   1963,      0,      0,      0,      0,   1968,      0,
+            0,      0,      0,   1973,      0,   1975,      0,      0,
+            0,      0,      0,      0,      0,      0,      0,      0,
+         1986,      0,      0,      0,      0,      0,      0,      0,
+            0,      0,      0,      0,      0,      0,      0,      0,
+            0,      0,      0,      0,      0,      0,      0,      0,
+            0,      0,      0,      0,      0,      0,      0,      0,
+            0,      0,      0,    527,    527,    527,    527,      0,
+          528,    528,    528,    528,    528,    528,    528,    528,
+          528,    528,    528,   1998,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+         1999,   2000,   2001,   2002,   2003,  32767,  32767,  32767,
+        32767,  32767,   2004,  32767,   2005,   2006,   2007,   2008,
+         2009,   2010,   2011,   2012,   2013,   2014,   2015,   2016,
+         2017,   2018,   2019,   2020,   2021,   2022,   2023,   2024,
+         2025,   2026,   1200,   1200,  32767,   4498,   4499,   2291,
+         2032,   2033,  32767,   2034,  32767,   2035,   2036,  32767,
+         2037,   2038,  32767,   2039,   2040,   2041,   2042,   2043,
+         2044,   2045,   2046,   2047,   2048,   2049,   2050,   2051,
+         2052,   2053,   2054,   2055,   2056,   2057,   2058,   2059,
+         2060,   2061,   2062,   2063,   2064,   2065,   2066,   2067,
+         2068,  -1506,  -1506,  -1506,  -1506,  -1506,  -1506,  -1506,
+         2076,  -2490,   2078,   2079,   2080,   2081,   2082,   2083,
+         2084,   2085,   2086,   2087,   2088,   2089,   2090,   2091,
+         2092,   2093,   2094,   2095,   -105,  -2314,   2098,   2099,
+         2100,   2101,   2102,   2103,   2104,   2105,   2106,   2107,
+         2108,   2109,   2110,   2111,   2112,   2113,   2114,   2115,
+         2116,   2117,   2118,   2119,   2120,   5459,   2122,   2123,
+         2124,   2125,   2126,   2127,   2128,   5466,   2130,   5467,
+         2132,   2133,   2134,   2135,   5471,   2137,   2138,   5473,
+         5473,   5473,   5473,   2143,   2144,   5475,   2146,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+         2147,   2148,   2149,   2150,   2151,   2152,   2153,   2154,
+         2155,   2156,   2157,   2158,   2159,   2160,   2161,   2162,
+         2163,   2164,   2165,   2166,   2167,   2168,   2169,   2170,
+         2171,   2172,   2173,   2174,   2175,   2176,   2177,   2178,
+         2179,   2180,   2181,   2182,   2183,   2184,   2185,   2186,
+         2187,   2188,   2189,   2190,   2191,  32767,   -726,   2293,
+         -725,   -725,   -725,   1357,   1358,   1359,   -722,   2201,
+         2202,   2203,   2204,   2205,      0,   2207,   -715,   2209,
+         -714,   -714,   -714,   2213,   2214,   2215,   4806,   2217,
+         2218,   2219,   2220,   2221,   2222,   2223,   -710,   2225,
+         -248,   -704,   -704,   2229,   2230,   2231,   2232,   2233,
+         2220,   1430,   2236,   2237,   -695,   2239,   -694,   2241,
+         -693,   -693,   2244,   2245,   2246,   2231,   2231,   2249,
+         2250,   2251,   2252,   2253,   2254,   2255,   2256,   2239,
+         2258,   2259,   2260,   2261,   2262,   2263,   2264,   2265,
+         2266,   2267,   2268,   2269,   2270,   2271,   2272,   2273,
+         2274,   2275,   2276,   2277,   2278,   2279,   2280,   2281,
+         2282,   2283,   2284,   2285,   2286,   2287,   2288,   2289,
+         2290,   2291,   2292,   2293,   3084,   2295,   2296,   2297,
+         2298,   2299,   2300,   2301,   2302,   2303,   2304,   2305,
+         2306,   2307,   3983,   2309,   2310,   2292,   2312,   3992,
+         2314,   2315,   2316,   2317,   2318,   2319,   2320,   2321,
+         2322,   2323,   2324,   2325,   2326,   2327,   2328,   4023,
+         2330,   2331,   2332,   2333,   2334,   2335,   2336,   2337,
+         2338,   2339,   2340,   2341,   2342,   2343,   2344,   2345,
+         2346,   2347,   2348,   2349,   2350,   2351,   2352,   2353,
+         2354,   2355,   2356,   2357,   2358,   2359,   2360,   2361,
+         2362,   2363,   2364,   2365,   2366,   2367,   2368,   2369,
+         2370,   2371,   2372,   2373,   2374,   2375,   2376,   2377,
+         2378,   2379,   2360,   2360,   2360,   2360,   2360,   2360,
+         2360,   2360,   2360,   2389,   2390,   2391,   2392,   2393,
+         2394,   2395,   2396,   2397,   2398,   2399,   2400,   2401,
+         2402,   2403,   2404,   2405,   2406,   2407,   2408,   2409,
+         2410,   2411,   2412,   2413,   2414,   2415,   2416,   2417,
+         2418,   2419,   2420,   2421,   2422,   2423,   2424,   2425,
+         2426,   2427,   2428,   2429,   2430,   2431,   2432,   2433,
+         2434,   2435,   2436,   2437,   2438,   2439,   2440,   2441,
+         2442,   2443,   2444,   2445,   2446,   2447,  32767,   2448,
+         2449,   2450,   2451,   2452,   2453,   2454,   2455,   2456,
+         2457,   2458,   2459,   2460,   2461,   2462,   2463,   2464,
+         2465,   2466,   2467,   2468,   2469,   2470,   2471,   2472,
+         2473,   2474,   2475,   2476,   2477,   2478,   2479,   2480,
+         2481,   2482,   2483,   2484,   2485,   2486,   2487,   2488,
+         2489,   2490,   2491,   2492,   2493,   2494,   2495,   2496,
+         2497,   2498,   2499,   2500,   2501,   2502,   2503,   2504,
+         2505,   2506,   2507,   2508,   2509,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,   2510,
+         2511,   2512,   2513,   3266,   3266,   3266,   3266,   2518,
+         3267,   3267,   3267,   2522,   3268,   3268,   3268,   3268,
+         3268,   3268,   3268,   6682,   3268,   3268,   3268,   2534,
+         5151,   3269,   2537,   2538,   3271,   3271,   5157,   2948,
+         5159,   2544,   2545,   3273,   2778,   3273,   2549,   3274,
+         2551,   3275,   2553,   5175,   2555,   3277,   3277,   3277,
+         5181,   2560,   5184,   3278,   5186,   2564,   5189,   5190,
+         5191,   5192,   3279,   5194,   5195,   2572,   5198,  32767,
+        32767,   3278,   5200,   3278,   2577,   2578,   2579,   2580,
+         5210,   3282,   3282,   5213,   3282,   2586,   2587,   2588,
+         2589,   2590,   2591,  -2175,  -2175,  -2175,   5230,   3288,
+         5232,   3288,   6914,    -69,    -69,   5097,   5098,   5099,
+         1792,    -73,    -73,   1792,   1792,   1792,   1792,   1792,
+         1792,   5091,   5092,   2884,   5094,   1795,   5096,   5097,
+         1797,   1797,   6961,   6962,   1797,   1797,   1797,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,   2578,   2578,   2578,   2578,   2578,
+         2578,    872,    872,    872,    872,    872,    872,    872,
+          872,    872,    872,   8277,   6335,   8279,   6335,   9961,
+         2978,   2978,   8144,   8145,   8146,   4839,   2974,   2974,
+         4839,   4839,   4839,   4839,   4839,   4839,   8138,   8139,
+         5931,   8141,   4842,   8143,   8144,   4844,   4844,  10008,
+        10009,   4844,   4844,   4844,   8152,  10018,  10019,   8155,
+         8156,   8157,   8158,   8159,   8160,   8161,   8162,   7073,
+         8164,   5399,   5400,   5401,   5402,   5403,      0,      0,
+            0,   5407,      0,      0,   5410,   5411,   5412,   8180,
+         3383,   5415,   3914,   3915,   3916,   5419,   3918,   3919,
+         3920,   3921,   3922,   3923,   3924,   3925,   3926,   3927,
+         3758,   3758,   3758,   3758,   3758,   3758,   3758,   3758,
+         3758,   3758,   3758,   3758,   3758,   3758,   3758,   3758,
+         3758,   3758,   3758,   3758,   3758,   3758,   3758,   3758,
+         3758,   3758,   3758,   3758,   3758,   3758,   3758,   3758,
+         3758,   3758,   3758,   3758,   3758,   3758,   3758,   3758,
+         3758,   3758,   3758,   3758,   3758,   3758,   3758,   3758,
+         3758,   3758,   7172,   3758,   3758,   3758,   3758,   5640,
+         3758,   3758,   5643,   3758,   3758,   5644,   3435,   5646,
+         3758,   3758,   3758,   3263,   3758,   3758,   3758,   3758,
+         3758,   3758,   5657,   3758,   3758,   3758,   3758,   5662,
+         3758,   5664,   3758,   5666,   5667,   5668,   5669,   5670,
+         5671,   3758,   5673,   5674,   5675,   5676,   3758,   5678,
+         3758,   5680,   3758,   5682,   7648,   3758,   3758,   5686,
+         3758,   3758,   5689,   3758,   5691,   5692,   3758,  -1707,
+        -1707,  -1707,  -1707,  -1707,  -1707,   5698,   3756,   5700,
+         3756,   7382,    399,    399,   5565,   5566,   5567,   2260,
+          395,    395,   2260,   2260,   2260,   2260,   2260,   2260,
+         5559,   5560,   3352,   5562,   2263,   5564,   5565,   2265,
+         2265,   7429,   7430,   2265,   2265,   2265,   5573,   7439,
+         7440,   5576,   5577,   5578,   5579,   5580,   5581,   5582,
+         5583,   4494,   5585,   2820,   2821,   2822,   2823,   2824,
+        -2579,  -2579,  -2579,   2828,  -2579,  -2579,   2831,   2832,
+         2833,   5601,    804,   2836,   1335,   1336,   1337,   2840,
+         1339,   1340,   1341,   1342,   1343,   1344,   1345,   1346,
+         1347,   1348,   1179,   1179,   1179,   1179,   1179,   1179,
+         1179,   1179,   1179,   1179,   1179,   1179,   1179,   1179,
+         1179,   1179,   1179,   1179,   1179,   1179,   1179,   1179,
+         1179,   1179,   1179,   1179,   1179,   1179,   1179,   1179,
+         1179,   1179,   1179,   1179,   1179,   1179,   1179,   1179,
+         1179,   1179,   1179,   1179,   1179,   1179,   1179,   1179,
+         1179,   1179,   1179,   1179,   4593,   1179,   1179,   1179,
+         1179,   3061,   1179,   1179,   3064,   1179,   1179,   3065,
+          856,   3067,   1179,   1179,   1179,    684,   1179,   1179,
+         1179,   1179,   1179,   1179,   3078,   1179,   1179,   1179,
+         1179,   3083,   1179,   3085,   1179,   3087,   3088,   3089,
+         3090,   3091,   3092,   1179,   3094,   3095,   3096,   3097,
+         1179,   3099,   1179,   3101,   1179,   3103,   5069,   1179,
+         1179,   3107,   1179,   1179,   3110,   1179,   3112,   3113,
+         1179,   3115,   1179,  -4284,  -4284,  -4284,  -4284,   3121,
+         1179,   3123,   1179,   4805,  -2178,  -2178,   2988,   2989,
+         2990,   -317,  -2182,  -2182,   -317,   -317,   -317,   -317,
+         -317,   -317,   2982,   2983,    775,   2985,   -314,   2987,
+         2988,   -312,   -312,   4852,   4853,   -312,   -312,   -312,
+         2996,   4862,   4863,   2999,   3000,   3001,   3002,   3003,
+         3004,   3005,   3006,   1917,   3008,   3009,   3010,   3011,
+         3012,   3013,  -2150,  -2150,   3016,   3017,   3018,   3019,
+         3020,   3021,   3022,   3023,   3024,   3025,   3026,   3027,
+         3028,   3029,   3030,   3031,   3032,   3033,   3034,   3035,
+        32767,  32767,  32767,   3036,   3037,   3038,   3039,   3040,
+         3041,  32767,  32767,   3042,   3043,   3044,   3045,   3046,
+         3047,  32767,  32767,   3048,   3049,   3050,   3051,   3052,
+         3053,  32767,  32767,   3054,   3055,   3056,  32767,  32767,
+        32767,   -357,   3058,   3059,   3060,   3061,   1180,   3063,
+            0,   1179,   3065,   3066,   1181,   3391,   1181,   3070,
+            0,      0,      0,      0,  32767,      0,      0,  32767,
+            0,  32767,      0,      0,  -4973,  32767,  32767,  -7368,
+        -2202,  -2201,  -2200,  -5507,  -7372,  -7372,  -5507,  -5507,
+        -5507,  32767,      0,      0,      0,      0,      0,      0,
+            0,      0,      0,  32767,      0,      0,  32767,      0,
+         -203,  -2234,   -732,   -732,   -732,  -2234,   -732,   -732,
+        -2763,  -1261,  -1261,  -1261,  -2763,  -1261,  -1261,  -1261,
+        -1261,  -1261,  -1261,  -1261,  -1261,  -1261,  -1261,  -1091,
+        -1090,  -1089,  -1088,  -1087,  32767,  32767,  -1086,  -1085,
+        -1084,  -1083,  -1082,  -1081,  -1080,  -1079,  -1078,  -1077,
+        -1076,  -1075,  32767,  -1074,  -1073,  -1072,  -1071,  -1070,
+        -1069,  -1068,  -1067,  -1066,  -1065,  -1064,  -1063,  -1062,
+        -1061,  -1060,  -1059,  -1058,  -1057,  -1056,  32767,  -1055,
+        -1054,  -1053,  -1052,      0,  32767,  32767,  32767,  -1051,
+        -1050,  -4463,  32767,  -1048,  32767,  -1047,  -2928,  -1045,
+        -1044,  -2928,  -1042,  -1041,  -2926,   -716,  -2926,  -1037,
+        -1036,  -1035,   -539,  -1033,  -1032,  -1031,  -1030,  -1029,
+        -1028,  -2926,  -1026,  -1025,  -1024,  -1023,  -2926,  -1021,
+        -2926,  -1019,  -2926,  -2926,  -2926,  -2926,  -2926,  -2926,
+        -1012,  -2926,  -2926,  -2926,  -2926,  -1007,  -2926,  -1005,
+        -2926,  -1003,  -2926,  -4891,  -1000,   -999,  -2926,   -997,
+         -996,  -2926,   -994,  -2926,  -2926,   -991,   4475,   4476,
+         4477,   4478,   4479,   4480,  -2924,   -981,  -2924,   -979,
+        -4604,   2380,   2381,  -2784,  -2784,  -2784,    524,   2390,
+         2391,    527,    528,    529,    530,    531,    532,  -2766,
+        -2766,   -557,  -2766,    534,  -2766,  -2766,    535,    536,
+        -4627,  -4627,    539,    540,    541,  -2766,  -4631,  -4631,
+        -2766,  -2766,  -2766,  -2766,  -2766,  -2766,  -2766,  -2766,
+        -1676,  -2766,      0,      0,      0,      0,      0,   5404,
+         5405,   5406,      0,   5408,   5409,      0,      0,      0,
+        -2767,   2031,      0,   1502,   1502,   1502,      0,   1502,
+         1502,   1502,   1502,   1502,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,    224,    225,    226,  32767,    227,    228,    229,
+          230,    231,    232,    233,    234,    235,    236,     67,
+        32767,     66,     66,     66,     66,     66,     66,     66,
+           66,     66,     66,     66,     66,     66,     66,     66,
+           66,     66,     66,  32767,     65,     65,     65,     65,
+           65,     65,     65,     65,     65,     65,     65,     65,
+           65,     65,     65,     65,     65,     65,     65,     65,
+           65,     65,     65,     65,     65,     65,     65,     65,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,   -271,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+         1940,     18,   1942,   3908,     18,     18,   1946,     18,
+           18,   1949,     18,   1951,   1952,     18,   1954,     18,
+        -5445,  -5445,  -5445,  -5445,   1960,     18,   1962,     18,
+         3644,  -3339,  -3339,   1827,   1828,   1829,  -1478,  -3343,
+        -3343,  -1478,  -1478,  -1478,  -1478,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,      0,      0,      0,
+            0,  32767,      0,      0,      0,      0,      0,      0,
+            0,      0,      0,      0,      0,      0,   1340,   1341,
+         1342,   1343,   1344,   1345,   1346,   1347,   1348,   1349,
+        -2064,   1351,   1352,   1353,   1354,  32767,   1355,   1356,
+        32767,      0,  32767,  32767,   1679,  32767,   1357,   1358,
+         1359,   1855,   1361,   1362,   1363,   1364,   1365,   1366,
+        32767,   1367,   1368,   1369,   1370,  32767,   1371,  32767,
+         1372,  32767,  32767,  32767,  32767,  32767,  32767,   1373,
+        32767,  32767,  32767,  32767,   1374,  32767,   1375,  32767,
+         1376,  32767,  -2513,   1378,   1379,  32767,   1380,   1381,
+        32767,   1382,  32767,  32767,   1383,  32767,   1384,  32767,
+         6848,  32767,   6849,  32767,   1387,  32767,   1388,   1389,
+        32767,   1390,  32767,  32767,   1391,   1392,   1393,   1394,
+        32767,   1395,   1396,   1397,   1398,   1399,   1400,   1401,
+        32767,   1402,   1403,   1404,   1405,  32767,   1406,   1407,
+         1408,   1409,  32767,   1410,  32767,   1411,   1412,   1413,
+         1414,   1415,   1416,   1417,   1418,   1419,   1420,  32767,
+         1421,   1422,   1423,   1424,   1425,      0,      0,      0,
+         4575,   4576,      0,      0,      0,      0,      0,      0,
+            0,      0,      0,      0,      0,      0,   -571,   -571,
+         -571,      0,   -572,   8101,   5150,   5150,   5150,   5337,
+         8103,   5150,   8104,   8105,   2038,   5145,   2039,   5150,
+         2040,   5150,   2041,   5150,   5150,   5138,   5150,   5150,
+         5150,   5150,   5150,   8108,   8109,   8110,   5150,   5150,
+         5384,   5150,      0,   5151,   5151,   5151,   5535,   5151,
+         5151,   5151,   5537,   5538,   5539,   5540,   5541,   5542,
+         5543,   5544,   5545,   5546,   5547,   5151,   5151,   2572,
+         2572,   2572,   2572,   2572,   2572,   2572,   2572,   2572,
+         2572,   2572,   2572,   2572,   2572,   2572,   2572,   2572,
+         2572,   2572,   2572,      0,      0,      0,      0,      0,
+            0,      0,      0,      0,      0,      0,      0,   2580,
+         2580,   2580,   2580,   2580,   2580,   2580,      0,   2580,
+            0,   2580,      0,      0,      0,   2580,   2580,   2580,
+            0,   2580,   2580,   2580,   2580,   2580,   2580,   2580,
+            0,   2580,      0,      0,      0,   2580,   2580,   2580,
+         5517,   5518,   5519,   5520,   5521,   5522,     -6,     -6,
+           -6,      0,      0,      0,      0,   2581,   2581,   2581,
+         2581,   5527,   2581,   2581,   2581,   2581,      0,   5528,
+            0,   2581,      0,      0,   2581,   2581,      0,      0,
+            0,      0,      0,      0,   5529,   5530,   5531,  32767,
+        32767,   2579,   2579,   2579,   2579,   2579,      0,      0,
+         2579,   2579,   2579,   2765,      0,      0,      0,      0,
+         2579,   2579,   2579,   2579,   6066,   2579,   6066,   2579,
+         2579,   2579,      0,      0,      0,   2579,   2579,      0,
+            0,      0,   2579,   2579,   2579,   5530,   2579,   2579,
+         2579,   2766,   5532,   2579,   5533,   5534,   -533,   2574,
+         -532,   2579,   -531,   2579,   -530,   2579,   2579,   2567,
+         2579,   2579,   2579,   2579,   2579,   5537,   5538,   5539,
+         2579,   2579,   2813,   2579,   2579,   2579,   2579,   2579,
+         2963,   2579,   2579,   2579,   2965,   2966,   2967,   2968,
+         2969,   2970,   2971,   2972,   2973,   2974,   2975,   2579,
+         2579,      0,      0,      0,      0,      0,      0,      0,
+            0,      0,      0,      0,      0,      0,      0,      0,
+            0,      0,      0,      0,      0,  32767,  32767,  32767,
+        32767,  32767,    331,  32767,    332,  -2580,  -2580,  -2580,
+        -2580,      0,      0,      0,      0,      0,      0,      0,
+        -2580,      0,  -2580,      0,  -2580,  -2580,  -2580,      0,
+            0,      0,  -2580,      0,      0,      0,      0,      0,
+            0,      0,  -2580,      0,  -2580,  -2580,  -2580,      0,
+            0,      0,   2937,   2938,   2939,   2940,   2941,   2942,
+        -2586,  -2586,  -2586,  -2580,  -2125,  -2581,  -2581,      0,
+            0,      0,      0,   2946,      0,      0,      0,      0,
+        -2581,   2947,  -2581,      0,  -2581,  -2581,      0,      0,
+        -2581,  -2581,  -2581,  -2581,  -2581,  -2581,   2948,   2949,
+         2950,   2945,   2491,      0,      0,      0,      0,      0,
+        -2579,  -2579,      0,      0,      0,    186,  -2579,  -2579,
+        -2579,  -2579,      0,      0,      0,      0,   3487,      0,
+         3487,      0,      0,      0,  -2579,  -2579,  -2579,      0,
+            0,  -2579,  -2579,  -2579,      0,      0,      0,   2951,
+            0,      0,      0,    187,   2953,      0,   2954,   2955,
+        -3112,     -5,  -3111,      0,  -3110,      0,  -3109,      0,
+            0,    -12,      0,      0,      0,      0,      0,   2958,
+         2959,   2960,      0,      0,    234,      0,      0,      0,
+            0,      0,    384,      0,      0,      0,    386,    387,
+          388,    389,    390,    391,    392,    393,    394,    395,
+          396,      0,      0,      0,      0,      0,      0,      0,
+            0,      0,  -1706,  -1706,  -1706,      0,      0,      0,
+            0,    385,      0,      0,      0,      0,      0,      0,
+            0,      0,      0,      0,      0,      0,      0,    397,
+          398,    399,    400,    401,    402,    403,    404,    405,
+         2112,   2113,   2114,    409,    410,    411,    412,  32767,
+          413,    414,    415,    416,    417,    418,    419,    420,
+          421,    422,    423,    424,    425,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        -1688,  32767,  32767,  32767,  32767,      0,      0,      0,
+            0,      0,      0,      0,      0,      0,      0,      0,
+            0,      0,      0,      0,      0,      0,      0,      0,
+            0,      0,      0,      0,      0,      0,      0,      0,
+            0,      0,      0,      0,      0,      0,      0,      0,
+            0,      0,      0,      0,      0,      0,      0,      0,
+            0,      0,      0,      0,      0,      0,      0,      0,
+            0,      0,      0,      0,      0,      0,      0,      0,
+            0,      0,      0,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,      0,      0,      0,
+            0,   -752,   -751,   -750,   -749,      0,   -748,   -747,
+         -746,      0,   -745,   -744,   -743,   -742,   -741,   -740,
+         -739,  -4152,   -737,   -736,   -735,      0,  -2616,   -733,
+            0,      0,   -732,   -731,  -2616,   -406,  -2616,      0,
+            0,   -727,   -231,   -725,      0,   -724,      0,   -723,
+            0,  -2621,      0,   -721,   -720,   -719,  -2622,      0,
+        -2623,   -716,  -2623,      0,  -2624,  -2624,  -2624,  -2624,
+         -710,  -2624,  -2624,      0,  -2625,   -706,  -2625,   -704,
+        -2625,   -702,      0,      0,      0,      0,  -2629,   -700,
+         -699,  -2629,   -697,      0,      0,      0,      0,      0,
+            0,   4767,   4768,   4769,  -2635,   -692,  -2635,   -690,
+        -4315,   2669,   2670,  -2495,  -2495,  -2495,    813,   2679,
+         2680,    816,    817,    818,    819,    820,    821,  -2477,
+        -2477,   -268,  -2477,    823,  -2477,  -2477,    824,    825,
+        -4338,  -4338,    828,    829,    830,  -2477,  -4342,  -4342,
+        -2477,  -2477,  -2477,  -2477,  -2477,  -2477,  -2477,  -2477,
+        -1387,      0,      0,  32767,  32767,      0,      0,      0,
+            0,      0,  -2486,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,   1756,   1757,   1758,
+         1759,  -5645,  -3702,  -5645,  -3700,  -7325,   -341,   -340,
+        -5505,  -5505,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,    532,    533,
+        32767,    534,    535,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,   -781,   1084,   1084,   1084,   1084,
+         1084,   1084,   4383,   4384,   2176,   4386,   1087,   4388,
+         4389,   1089,   1089,   6253,   6254,   1089,   1089,   1089,
+         4397,   6263,   6264,   4400,   4401,   4402,   4403,   4404,
+         4405,   4406,   4407,   3318,   4409,   4410,   4411,   4412,
+         4413,   4414,   -749,   -749,   4417,   4418,   4419,   4420,
+         4421,   4422,   4423,   4424,   4425,   4426,   4427,   4428,
+         4429,   4430,   4431,   4432,   4433,   4434,   4435,   4436,
+         4437,   4438,   4439,   4440,   4441,   4442,   4443,   4444,
+         4445,   4446,   4447,   4448,   4449,   4450,   4451,   4452,
+         4453,   4454,   4455,   4456,   4457,   4458,   4459,   4460,
+         4461,   4462,   4463,   4464,   4465,   4466,   4467,   4468,
+         4469,   1056,   4471,   4472,   4473,   4474,   2593,   4476,
+         4477,   2593,   4479,   4480,   2595,   4805,   2595,   4484,
+         4485,   4486,   4982,   4488,   4489,   4490,   4491,   4492,
+         4493,   2595,   4495,   4496,   4497,   4498,   2595,   4500,
+         2595,   4502,   2595,   2595,   2595,   2595,   2595,   2595,
+         4509,   2595,   2595,   2595,   2595,   4514,   2595,   4516,
+         2595,   4518,   2595,    630,   4521,   4522,   2595,   4524,
+         4525,   2595,   4527,   2595,   2595,   4530,   2595,   4532,
+         9996,   9997,   9998,   9999,   2595,   4538,   2595,   4540,
+         4541,   2595,   4543,   2595,   2595,   4546,   4547,   4548,
+         4549,   2595,   4551,   4552,   4553,   4554,   4555,   4556,
+         4557,   2595,   4559,   4560,   4561,   4562,   2595,   4564,
+         4565,   4566,   4567,   2595,   4569,   2595,   4571,   4572,
+         4573,   4574,   4575,   4576,   4577,   4578,   4579,   4580,
+         2595,   4582,   4583,   4584,   4585,   4586,   4587,   4588,
+         4589,   4590,   4591,   4592,   4593,   4594,   4595,   4596,
+         4597,   4598,   4599,   4600,   4601,   4602,   4603,   4604,
+         4605,   4606,   4607,   4608,   4609,   4610,   4611,   4612,
+         4613,   4614,   4615,   4089,   4090,   4091,   4092,   4620,
+         4093,   4094,   4095,   4096,   4097,   4098,   4099,   4100,
+         4101,   4102,   4103,   4104,   2765,   2765,   2765,   2765,
+         2765,   2765,   2765,   2765,   2765,   2765,   6179,   2765,
+         2765,   2765,   2765,   4647,   2765,   2765,   4650,   4122,
+         4652,   4653,   2444,   4655,   2767,   2767,   2767,   2272,
+         2767,   2767,   2767,   2767,   2767,   2767,   4666,   2767,
+         2767,   2767,   2767,   4671,   2767,   4673,   2767,   4675,
+         4676,   4677,   4678,   4679,   4680,   2767,   4682,   4683,
+         4684,   4685,   2767,   4687,   2767,   4689,   2767,   4691,
+         6657,   2767,   2767,   4695,   2767,   2767,   4698,   2767,
+         4700,   4701,   2767,   4703,   2767,  -2696,  -2696,  -2696,
+        -2696,   4709,   2767,   4711,   2767,   2767,   4714,   2767,
+         4716,   4717,   2767,   2767,   2767,   2767,   4722,   2767,
+         2767,   2767,   2767,   2767,   2767,   2767,   4730,   2767,
+         2767,   2767,   2767,   4735,   2767,   2767,   2767,   2767,
+         4740,   2767,   4742,   2767,   2767,   2767,   2767,   2767,
+         2767,   2767,   2767,   2767,   2767,   4753,   2767,   2767,
+         2767,   2767,   2767,   4193,   4194,   4195,   -379,   -379,
+         4198,   4199,   4200,   4201,   4202,   4203,   4204,   4771,
+         4772,   4773,   4774,   4775,   4776,   4777,   4778,   4779,
+         4780,  -3892,   -940,   -939,   -938,   4785,  -3890,   -936,
+        -3889,  -3889,   2179,   -927,   2180,   -930,   2181,   -928,
+         2182,   -926,   -925,   -912,   -923,   -922,   -921,   4803,
+         4804,   4805,   4806,   4807,   4808,   4809,   4810,   4811,
+         4812,   4813,   4814,   4815,   4816,   4817,   4818,   4819,
+         3925,   4821,   4822,   4823,   4824,   4825,   4826,   4827,
+         4828,   4829,   4830,   4831,   4832,   4833,   4834,   4835,
+         4836,   4837,   4838,   4839,   4840,   4841,   4842,   4843,
+         4844,   4845,   4846,   4847,   4848,   4849,   4850,   4851,
+         4852,   4853,   4854,   4855,   4856,   4857,   4858,   4859,
+         4860,   4710,   2086,    609,   4864,   4865,   4866,   4867,
+         4868,   4869,   4870,   4871,   4872,   3052,   4874,   4875,
+         4876,   4281,   4878,   4879,   4880,   4881,   4882,   4883,
+         4884,   4885,   4886,   4887,    634,   4888,   4889,   4890,
+         4891,   4892,   4893,   4894,   4895,   4896,   1322,   1322,
+         1322,   1322,   1322,   1322,   1322,   4904,    338,   4906,
+         4907,   4908,   4909,   4910,   4911,   4912,   4913,   4914,
+         4915,   4916,   4917,    665,    666,    667,    668,    669,
+          670,    671,    672,    673,    674,    675,    676,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,  32767,  32767,  32767,      0,
+            0,      0,      0,      0,      0,  32767,      0,      0,
+            0,      0,  32767,  32767,      0,      0,      0,      0,
+            0,      0,      0,      0,  32767,      0,      0,      0,
+            0,      0,      0,      0,  32767,      0,      0,      0,
+            0,      0,      0,      0,      0,      0,      0,      0,
+            0,      0,      0,      0,      0,      0,      0,      0,
+            0,      0,      0,      0,      0,      0,      0,      0,
+            0,  32767,      0,      0,      0,   2478,  32767,   2477,
+         2477,   2477,   2477,   2477,  32767,   2476,  32767,  32767,
+        32767,   2473,   2473,   2473,   2473,   2473,   2473,   2473,
+        32767,   2472,   2472,   2472,   2472,   2472,   2472,   2472,
+         2472,   2472,   2472,   2472,   2472,   2472,   2472,   2472,
+         2472,   2472,   2472,   2472,   2472,   2472,   2472,   2472,
+         2472,   2472,   2472,   2472,   2472,   2472,   2472,   2472,
+         2472,   2472,   2472,   2472,   2472,   2472,   2472,   2472,
+         2472,   2472,   2472,      0,      0,      0,      0,      0,
+            0,      0,      0,      0,      0,      0,      0,      0,
+            0,      0,      0,      0,      0,      0,      0,      0,
+            0,      0,      0,      0,      0,      0,      0,      0,
+            0,      0,      0,      0,      0,      0,      0,      0,
+            0,      0,      0,      0,      0,      0,      0,      0,
+            0,      0,      0,      0,      0,      0,      0,      0,
+            0,      0,      0,      0,      0,      0,      0,      0,
+            0,      0,      0,      0,      0,      0,      0,      0,
+            0,      0,      0,      0,      0,      0,      0,      0,
+            0,      0,      0,      0,      0,      0,      0,      0,
+            0,      0,      0,      0,      0,      0,      0,      0,
+            0,      0,      0,      0,      0,      0,      0,      0,
+            0,      0,      0,      0,      0,      0,      0,      0,
+            0,      0,      0,      0,      0,      0,      0,      0,
+            0,      0,      0,      0,      0,      0,      0,      0,
+            0,      0,      0,      0,  -2478,  -2478,  -2478,      0,
+            0,      0,      0,      0,      0,      0,      0,      0,
+            0,      0,      0,      0,      0,      0,      0,      0,
+            0,      0,      0,      0,      0,      0,      0,      0,
+            0,      0,      0,      0,      0,      0,      0,      0,
+            0,      0,      0,      0,      0,      0,      0,      0,
+            0,      0,      0,      0,      0,      0,      0,      0,
+            0,      0,      0,      0,      0,      0,      0,      0,
+            0,      0,      0,      0,      0,
+   };
+
+   const unsigned char *k = (const unsigned char *) key;
+   size_t      keylen = 4;
+   uint32      a = 0;
+   uint32      b = 1;
+
+   while (keylen--)
+   {
+       unsigned char c = *k++;
+
+       a = a * 257 + c;
+       b = b * 8191 + c;
+   }
+   return h[a % 9837] + h[b % 9837];
+}
+
+/* Hash lookup information for NFKC_QC */
+static const pg_unicode_norminfo UnicodeNormInfo_NFKC_QC = {
+   UnicodeNormProps_NFKC_QC,
+   NFKC_QC_hash_func,
+   4918
+};
index bfe103f1955a910b6337dbb79d7ee6e51f5cd254..86bdd9d6dcbf0b8023572c39780b3007555f21df 100644 (file)
@@ -18,6 +18,11 @@ src/backend/utils/fmgrprotos\.h$
 # they match pgindent style, they'd look worse not better, so exclude them.
 kwlist_d\.h$
 #
+# This is generated by the scripts from src/common/unicode/.  It uses
+# hash functions generated by PerfectHash.pm whose format looks worse with
+# pgindent.
+src/include/common/unicode_normprops_table\.h$
+#
 # Exclude ecpg test files to avoid breaking the ecpg regression tests
 # (but include files at the top level of the ecpg/test/ directory).
 src/interfaces/ecpg/test/.*/
index be570329ea73a713b1df95004360fb5d11c1a823..c52f20d4ba4d1902b581c51be082ab012bfdfd06 100644 (file)
@@ -3191,6 +3191,7 @@ pg_tz
 pg_tz_cache
 pg_tzenum
 pg_unicode_decomposition
+pg_unicode_norminfo
 pg_unicode_normprops
 pg_utf_to_local_combined
 pg_uuid_t