packages feed

pcre2 2.0.2 → 2.0.3

raw patch · 37 files changed

+8325/−7797 lines, 37 files

Files

ChangeLog.md view
@@ -1,5 +1,10 @@ # Changelog and Acknowledgements +## 2.0.3+* Updated PCRE2 to 10.39 (no API changes).  The C sources are now drawn from+  https://github.com/PhilipHazel/pcre2.git, which fixes+  [#10](https://github.com/sjshuck/hs-pcre2/issues/10).+ ## 2.0.2 * Fixed a minor issue where the caret indicating pattern location of a   `Pcre2CompileException` was misplaced if the pattern contained a newline.
README.md view
@@ -63,7 +63,7 @@   speedup over `pcre-light`, and 20× over `regex-pcre`, for longer   captures. * Few dependencies.-* Bundled, statically-linked UTF-16 build of up-to-date PCRE2 (version 10.37),+* Bundled, statically-linked UTF-16 build of up-to-date PCRE2 (version 10.39),   with a complete, exposed Haskell binding.  ## Wishlist
pcre2.cabal view
@@ -5,7 +5,7 @@ -- see: https://github.com/sol/hpack  name:           pcre2-version:        2.0.2+version:        2.0.3 synopsis:       Regular expressions via the PCRE2 C library (included) description:    Please see the README on GitHub at <https://github.com/sjshuck/hs-pcre2> category:       Text
src/c/config.h view
@@ -103,6 +103,9 @@ /* Define to 1 if you have the <readline/readline.h> header file. */ /* #undef HAVE_READLINE_READLINE_H */ +/* Define to 1 if you have the `realpath' function. */+/* #undef HAVE_REALPATH */+ /* Define to 1 if you have the `secure_getenv' function. */ /* #undef HAVE_SECURE_GETENV */ @@ -230,7 +233,7 @@ #define PACKAGE_NAME "PCRE2"  /* Define to the full name and version of this package. */-#define PACKAGE_STRING "PCRE2 10.37"+#define PACKAGE_STRING "PCRE2 10.39"  /* Define to the one symbol short name of this package. */ #define PACKAGE_TARNAME "pcre2"@@ -239,7 +242,7 @@ #define PACKAGE_URL ""  /* Define to the version of this package. */-#define PACKAGE_VERSION "10.37"+#define PACKAGE_VERSION "10.39"  /* The value of PARENS_NEST_LIMIT specifies the maximum depth of nested    parentheses (of any kind) in a pattern. This limits the amount of system@@ -432,7 +435,7 @@ #endif  /* Version number of package */-#define VERSION "10.37"+#define VERSION "10.39"  /* Define to empty if `const' does not conform to ANSI C. */ /* #undef const */
src/c/pcre2.h view
@@ -5,7 +5,7 @@ /* This is the public header file for the PCRE library, second API, to be #included by applications that call PCRE2 functions. -           Copyright (c) 2016-2020 University of Cambridge+           Copyright (c) 2016-2021 University of Cambridge  ----------------------------------------------------------------------------- Redistribution and use in source and binary forms, with or without@@ -42,9 +42,9 @@ /* The current PCRE version information. */  #define PCRE2_MAJOR           10-#define PCRE2_MINOR           37+#define PCRE2_MINOR           39 #define PCRE2_PRERELEASE      -#define PCRE2_DATE            2021-05-26+#define PCRE2_DATE            2021-10-29  /* When an application links to a PCRE DLL in Windows, the symbols that are imported have to be identified as such. When building PCRE2, the appropriate@@ -84,8 +84,8 @@ /* Have to include limits.h, stdlib.h, and inttypes.h to ensure that size_t and uint8_t, UCHAR_MAX, etc are defined. Some systems that do have inttypes.h do not have stdint.h, which is why we use inttypes.h, which according to the C-standard is a superset of stdint.h. If none of these headers are available,-the relevant values must be provided by some other means. */+standard is a superset of stdint.h. If inttypes.h is not available the build+will break and the relevant values must be provided by some other means. */  #include <limits.h> #include <stdlib.h>@@ -152,6 +152,7 @@ #define PCRE2_EXTRA_MATCH_LINE               0x00000008u  /* C */ #define PCRE2_EXTRA_ESCAPED_CR_IS_LF         0x00000010u  /* C */ #define PCRE2_EXTRA_ALT_BSUX                 0x00000020u  /* C */+#define PCRE2_EXTRA_ALLOW_LOOKAROUND_BSK     0x00000040u  /* C */  /* These are for pcre2_jit_compile(). */ @@ -311,6 +312,7 @@ #define PCRE2_ERROR_SCRIPT_RUN_NOT_AVAILABLE       196 #define PCRE2_ERROR_TOO_MANY_CAPTURES              197 #define PCRE2_ERROR_CONDITION_ATOMIC_ASSERTION_EXPECTED  198+#define PCRE2_ERROR_BACKSLASH_K_IN_LOOKAROUND      199   /* "Expected" matching error codes: no match and partial match. */
src/c/pcre2/src/pcre2_compile.c view
@@ -7,7 +7,7 @@                         Written by Philip Hazel      Original API code Copyright (c) 1997-2012 University of Cambridge-          New API code Copyright (c) 2016-2020 University of Cambridge+          New API code Copyright (c) 2016-2021 University of Cambridge  ----------------------------------------------------------------------------- Redistribution and use in source and binary forms, with or without@@ -137,7 +137,7 @@  static int   check_lookbehinds(uint32_t *, uint32_t **, parsed_recurse_check *,-    compile_block *);+    compile_block *, int *);   /*************************************************@@ -782,12 +782,15 @@ #define PUBLIC_COMPILE_EXTRA_OPTIONS \    (PUBLIC_LITERAL_COMPILE_EXTRA_OPTIONS| \     PCRE2_EXTRA_ALLOW_SURROGATE_ESCAPES|PCRE2_EXTRA_BAD_ESCAPE_IS_LITERAL| \-    PCRE2_EXTRA_ESCAPED_CR_IS_LF|PCRE2_EXTRA_ALT_BSUX)+    PCRE2_EXTRA_ESCAPED_CR_IS_LF|PCRE2_EXTRA_ALT_BSUX| \+    PCRE2_EXTRA_ALLOW_LOOKAROUND_BSK)  /* Compile time error code numbers. They are given names so that they can more easily be tracked. When a new number is added, the tables called eint1 and eint2 in pcre2posix.c may need to be updated, and a new error text must be-added to compile_error_texts in pcre2_error.c. */+added to compile_error_texts in pcre2_error.c. Also, the error codes in+pcre2.h.in must be updated - their values are exactly 100 greater than these+values. */  enum { ERR0 = COMPILE_ERROR_BASE,        ERR1,  ERR2,  ERR3,  ERR4,  ERR5,  ERR6,  ERR7,  ERR8,  ERR9,  ERR10,@@ -799,7 +802,7 @@        ERR61, ERR62, ERR63, ERR64, ERR65, ERR66, ERR67, ERR68, ERR69, ERR70,        ERR71, ERR72, ERR73, ERR74, ERR75, ERR76, ERR77, ERR78, ERR79, ERR80,        ERR81, ERR82, ERR83, ERR84, ERR85, ERR86, ERR87, ERR88, ERR89, ERR90,-       ERR91, ERR92, ERR93, ERR94, ERR95, ERR96, ERR97, ERR98 };+       ERR91, ERR92, ERR93, ERR94, ERR95, ERR96, ERR97, ERR98, ERR99 };  /* This is a table of start-of-pattern options such as (*UTF) and settings such as (*LIMIT_MATCH=nnnn) and (*CRLF). For completeness and backward@@ -7799,6 +7802,16 @@       } #endif +    /* \K is forbidden in lookarounds since 10.38 because that's what Perl has+    done. However, there's an option, in case anyone was relying on it. */++    if (cb->assert_depth > 0 && meta_arg == ESC_K &&+        (cb->cx->extra_options & PCRE2_EXTRA_ALLOW_LOOKAROUND_BSK) == 0)+      {+      *errorcodeptr = ERR99;+      return 0;+      }+     /* For the rest (including \X when Unicode is supported - if not it's     faulted at parse time), the OP value is the escape value when PCRE2_UCP is     not set; if it is set, these escapes do not show up here because they are@@ -9148,7 +9161,7 @@     case META_LOOKAHEAD:     case META_LOOKAHEADNOT:     case META_LOOKAHEAD_NA:-    *errcodeptr = check_lookbehinds(pptr + 1, &pptr, recurses, cb);+    *errcodeptr = check_lookbehinds(pptr + 1, &pptr, recurses, cb, lcptr);     if (*errcodeptr != 0) return -1;      /* Ignore any qualifiers that follow a lookahead assertion. */@@ -9488,16 +9501,16 @@   retptr    if not NULL, return the ket pointer here   recurses  chain of recurse_check to catch mutual recursion   cb        points to the compile block+  lcptr     points to loop counter  Returns:    0 on success, or an errorcode (cb->erroroffset will be set) */  static int check_lookbehinds(uint32_t *pptr, uint32_t **retptr,-  parsed_recurse_check *recurses, compile_block *cb)+  parsed_recurse_check *recurses, compile_block *cb, int *lcptr) { int errorcode = 0;-int loopcount = 0; int nestlevel = 0;  cb->erroroffset = PCRE2_UNSET;@@ -9623,7 +9636,7 @@     case META_LOOKBEHIND:     case META_LOOKBEHINDNOT:     case META_LOOKBEHIND_NA:-    if (!set_lookbehind_lengths(&pptr, &errorcode, &loopcount, recurses, cb))+    if (!set_lookbehind_lengths(&pptr, &errorcode, lcptr, recurses, cb))       return errorcode;     break;     }@@ -10078,7 +10091,8 @@  if (has_lookbehind)   {-  errorcode = check_lookbehinds(cb.parsed_pattern, NULL, NULL, &cb);+  int loopcount = 0;+  errorcode = check_lookbehinds(cb.parsed_pattern, NULL, NULL, &cb, &loopcount);   if (errorcode != 0) goto HAD_CB_ERROR;   } 
src/c/pcre2/src/pcre2_dfa_match.c view
@@ -7,7 +7,7 @@                         Written by Philip Hazel      Original API code Copyright (c) 1997-2012 University of Cambridge-          New API code Copyright (c) 2016-2020 University of Cambridge+          New API code Copyright (c) 2016-2021 University of Cambridge  ----------------------------------------------------------------------------- Redistribution and use in source and binary forms, with or without@@ -3256,8 +3256,8 @@ BOOL has_req_cu = FALSE;  #if PCRE2_CODE_UNIT_WIDTH == 8-BOOL memchr_not_found_first_cu = FALSE;-BOOL memchr_not_found_first_cu2 = FALSE;+PCRE2_SPTR memchr_found_first_cu = NULL;+PCRE2_SPTR memchr_found_first_cu2 = NULL; #endif  PCRE2_UCHAR first_cu = 0;@@ -3648,13 +3648,7 @@         }       } -    /* Not anchored. Advance to a unique first code unit if there is one. In-    8-bit mode, the use of memchr() gives a big speed up, even though we have-    to call it twice in caseless mode, in order to find the earliest occurrence-    of the character in either of its cases. If a call to memchr() that-    searches the rest of the subject fails to find one case, remember that in-    order not to keep on repeating the search. This can make a huge difference-    when the strings are very long and only one case is present. */+    /* Not anchored. Advance to a unique first code unit if there is one. */      else       {@@ -3662,43 +3656,68 @@         {         if (first_cu != first_cu2)  /* Caseless */           {+          /* In 16-bit and 32_bit modes we have to do our own search, so can+          look for both cases at once. */+ #if PCRE2_CODE_UNIT_WIDTH != 8           PCRE2_UCHAR smc;           while (start_match < end_subject &&                 (smc = UCHAR21TEST(start_match)) != first_cu &&-                  smc != first_cu2)+                 smc != first_cu2)             start_match++;+#else+          /* In 8-bit mode, the use of memchr() gives a big speed up, even+          though we have to call it twice in order to find the earliest+          occurrence of the code unit in either of its cases. Caching is used+          to remember the positions of previously found code units. This can+          make a huge difference when the strings are very long and only one+          case is actually present. */ -#else  /* 8-bit code units */           PCRE2_SPTR pp1 = NULL;           PCRE2_SPTR pp2 = NULL;-          PCRE2_SIZE cu2size = end_subject - start_match;+          PCRE2_SIZE searchlength = end_subject - start_match; -          if (!memchr_not_found_first_cu)+          /* If we haven't got a previously found position for first_cu, or if+          the current starting position is later, we need to do a search. If+          the code unit is not found, set it to the end. */++          if (memchr_found_first_cu == NULL ||+              start_match > memchr_found_first_cu)             {-            pp1 = memchr(start_match, first_cu, end_subject - start_match);-            if (pp1 == NULL) memchr_not_found_first_cu = TRUE;-              else cu2size = pp1 - start_match;+            pp1 = memchr(start_match, first_cu, searchlength);+            memchr_found_first_cu = (pp1 == NULL)? end_subject : pp1;             } -          /* If pp1 is not NULL, we have arranged to search only as far as pp1,-          to see if the other case is earlier, so we can set "not found" only-          when both searches have returned NULL. */+          /* If the start is before a previously found position, use the+          previous position, or NULL if a previous search failed. */ -          if (!memchr_not_found_first_cu2)+          else pp1 = (memchr_found_first_cu == end_subject)? NULL :+            memchr_found_first_cu;++          /* Do the same thing for the other case. */++          if (memchr_found_first_cu2 == NULL ||+              start_match > memchr_found_first_cu2)             {-            pp2 = memchr(start_match, first_cu2, cu2size);-            memchr_not_found_first_cu2 = (pp2 == NULL && pp1 == NULL);+            pp2 = memchr(start_match, first_cu2, searchlength);+            memchr_found_first_cu2 = (pp2 == NULL)? end_subject : pp2;             } +          else pp2 = (memchr_found_first_cu2 == end_subject)? NULL :+            memchr_found_first_cu2;++          /* Set the start to the end of the subject if neither case was found.+          Otherwise, use the earlier found point. */+           if (pp1 == NULL)             start_match = (pp2 == NULL)? end_subject : pp2;           else             start_match = (pp2 == NULL || pp1 < pp2)? pp1 : pp2;-#endif++#endif  /* 8-bit handling */           } -        /* The caseful case */+        /* The caseful case is much simpler. */          else           {
src/c/pcre2/src/pcre2_error.c view
@@ -7,7 +7,7 @@                         Written by Philip Hazel      Original API code Copyright (c) 1997-2012 University of Cambridge-          New API code Copyright (c) 2016-2019 University of Cambridge+          New API code Copyright (c) 2016-2021 University of Cambridge  ----------------------------------------------------------------------------- Redistribution and use in source and binary forms, with or without@@ -186,6 +186,7 @@   "script runs require Unicode support, which this version of PCRE2 does not have\0"   "too many capturing groups (maximum 65535)\0"   "atomic assertion expected after (?( or (?(?C)\0"+  "\\K is not allowed in lookarounds (but see PCRE2_EXTRA_ALLOW_LOOKAROUND_BSK)\0"   ;  /* Match-time and UTF error texts are in the same format. */
src/c/pcre2/src/pcre2_jit_compile.c view
@@ -1236,24 +1236,28 @@  return: current number of iterators enhanced with fast fail */-static int detect_early_fail(compiler_common *common, PCRE2_SPTR cc, int *private_data_start, sljit_s32 depth, int start)+static int detect_early_fail(compiler_common *common, PCRE2_SPTR cc, int *private_data_start,+   sljit_s32 depth, int start, BOOL fast_forward_allowed) { PCRE2_SPTR begin = cc; PCRE2_SPTR next_alt; PCRE2_SPTR end; PCRE2_SPTR accelerated_start;+BOOL prev_fast_forward_allowed; int result = 0; int count;-BOOL fast_forward_allowed = TRUE;  SLJIT_ASSERT(*cc == OP_ONCE || *cc == OP_BRA || *cc == OP_CBRA); SLJIT_ASSERT(*cc != OP_CBRA || common->optimized_cbracket[GET2(cc, 1 + LINK_SIZE)] != 0); SLJIT_ASSERT(start < EARLY_FAIL_ENHANCE_MAX); +next_alt = cc + GET(cc, 1);+if (*next_alt == OP_ALT)+  fast_forward_allowed = FALSE;+ do   {   count = start;-  next_alt = cc + GET(cc, 1);   cc += 1 + LINK_SIZE + ((*cc == OP_CBRA) ? IMM2_SIZE : 0);    while (TRUE)@@ -1476,6 +1480,7 @@       case OP_CBRA:       end = cc + GET(cc, 1); +      prev_fast_forward_allowed = fast_forward_allowed;       fast_forward_allowed = FALSE;       if (depth >= 4)         break;@@ -1484,7 +1489,7 @@       if (*end != OP_KET || (*cc == OP_CBRA && common->optimized_cbracket[GET2(cc, 1 + LINK_SIZE)] == 0))         break; -      count = detect_early_fail(common, cc, private_data_start, depth + 1, count);+      count = detect_early_fail(common, cc, private_data_start, depth + 1, count, prev_fast_forward_allowed);        if (PRIVATE_DATA(cc) != 0)         common->private_data_ptrs[begin - common->start] = 1;@@ -1510,7 +1515,7 @@         {         count++; -        if (fast_forward_allowed && *next_alt == OP_KET)+        if (fast_forward_allowed)           {           common->fast_forward_bc_ptr = accelerated_start;           common->private_data_ptrs[(accelerated_start + 1) - common->start] = ((*private_data_start) << 3) | type_skip;@@ -1560,8 +1565,8 @@   else if (result < count)     result = count; -  fast_forward_allowed = FALSE;   cc = next_alt;+  next_alt = cc + GET(cc, 1);   } while (*cc == OP_ALT); @@ -4197,9 +4202,6 @@ and it is destroyed. Does not modify STR_PTR for invalid character sequences. */ DEFINE_COMPILER; -SLJIT_UNUSED_ARG(backtracks);-SLJIT_UNUSED_ARG(must_be_valid);- #if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32 struct sljit_jump *jump; #endif@@ -4273,6 +4275,10 @@   } #endif /* PCRE2_CODE_UNIT_WIDTH == [8|16|32] */ #endif /* SUPPORT_UNICODE */++SLJIT_UNUSED_ARG(backtracks);+SLJIT_UNUSED_ARG(must_be_valid);+ OP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1)); } @@ -8135,7 +8141,7 @@     }   else     OP2(SLJIT_AND32 | SLJIT_SET_Z, SLJIT_UNUSED, 0, SLJIT_MEM1(ARGUMENTS), SLJIT_OFFSETOF(jit_arguments, options), SLJIT_IMM, PCRE2_NOTEOL);-  add_jump(compiler, backtracks, JUMP(SLJIT_NOT_ZERO32));+  add_jump(compiler, backtracks, JUMP(SLJIT_NOT_ZERO));    if (!common->endonly)     compile_simple_assertion_matchingpath(common, OP_EODN, cc, backtracks);@@ -8155,7 +8161,7 @@     }   else     OP2(SLJIT_AND32 | SLJIT_SET_Z, SLJIT_UNUSED, 0, SLJIT_MEM1(ARGUMENTS), SLJIT_OFFSETOF(jit_arguments, options), SLJIT_IMM, PCRE2_NOTEOL);-  add_jump(compiler, backtracks, JUMP(SLJIT_NOT_ZERO32));+  add_jump(compiler, backtracks, JUMP(SLJIT_NOT_ZERO));   check_partial(common, FALSE);   jump[0] = JUMP(SLJIT_JUMP);   JUMPHERE(jump[1]);@@ -8195,14 +8201,14 @@     OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(TMP2), SLJIT_OFFSETOF(jit_arguments, begin));     add_jump(compiler, backtracks, CMP(SLJIT_GREATER, STR_PTR, 0, TMP1, 0));     OP2(SLJIT_AND32 | SLJIT_SET_Z, SLJIT_UNUSED, 0, SLJIT_MEM1(TMP2), SLJIT_OFFSETOF(jit_arguments, options), SLJIT_IMM, PCRE2_NOTBOL);-    add_jump(compiler, backtracks, JUMP(SLJIT_NOT_ZERO32));+    add_jump(compiler, backtracks, JUMP(SLJIT_NOT_ZERO));     }   else     {     OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(ARGUMENTS), SLJIT_OFFSETOF(jit_arguments, begin));     add_jump(compiler, backtracks, CMP(SLJIT_GREATER, STR_PTR, 0, TMP1, 0));     OP2(SLJIT_AND32 | SLJIT_SET_Z, SLJIT_UNUSED, 0, SLJIT_MEM1(ARGUMENTS), SLJIT_OFFSETOF(jit_arguments, options), SLJIT_IMM, PCRE2_NOTBOL);-    add_jump(compiler, backtracks, JUMP(SLJIT_NOT_ZERO32));+    add_jump(compiler, backtracks, JUMP(SLJIT_NOT_ZERO));     }   return cc; @@ -8221,7 +8227,7 @@     jump[1] = CMP(SLJIT_GREATER, STR_PTR, 0, TMP2, 0);     OP2(SLJIT_AND32 | SLJIT_SET_Z, SLJIT_UNUSED, 0, SLJIT_MEM1(ARGUMENTS), SLJIT_OFFSETOF(jit_arguments, options), SLJIT_IMM, PCRE2_NOTBOL);     }-  add_jump(compiler, backtracks, JUMP(SLJIT_NOT_ZERO32));+  add_jump(compiler, backtracks, JUMP(SLJIT_NOT_ZERO));   jump[0] = JUMP(SLJIT_JUMP);   JUMPHERE(jump[1]); @@ -9575,11 +9581,11 @@  /* Check return value. */ OP2(SLJIT_SUB32 | SLJIT_SET_Z | SLJIT_SET_SIG_GREATER, SLJIT_UNUSED, 0, SLJIT_RETURN_REG, 0, SLJIT_IMM, 0);-add_jump(compiler, &backtrack->topbacktracks, JUMP(SLJIT_SIG_GREATER32));+add_jump(compiler, &backtrack->topbacktracks, JUMP(SLJIT_SIG_GREATER)); if (common->abort_label == NULL)-  add_jump(compiler, &common->abort, JUMP(SLJIT_NOT_EQUAL32) /* SIG_LESS */);+  add_jump(compiler, &common->abort, JUMP(SLJIT_NOT_EQUAL) /* SIG_LESS */); else-  JUMPTO(SLJIT_NOT_EQUAL32 /* SIG_LESS */, common->abort_label);+  JUMPTO(SLJIT_NOT_EQUAL /* SIG_LESS */, common->abort_label); return cc + callout_length; } @@ -11226,7 +11232,7 @@ early_fail_ptr >>= 3;  /* During recursion, these optimizations are disabled. */-if (common->early_fail_start_ptr == 0)+if (common->early_fail_start_ptr == 0 && common->fast_forward_bc_ptr == NULL)   {   early_fail_ptr = 0;   early_fail_type = type_skip;@@ -13657,7 +13663,7 @@ private_data_size = common->cbra_ptr + (re->top_bracket + 1) * sizeof(sljit_sw);  if ((re->overall_options & PCRE2_ANCHORED) == 0 && (re->overall_options & PCRE2_NO_START_OPTIMIZE) == 0 && !common->has_skip_in_assert_back)-  detect_early_fail(common, common->start, &private_data_size, 0, 0);+  detect_early_fail(common, common->start, &private_data_size, 0, 0, TRUE);  set_private_data_ptrs(common, &private_data_size, ccend); @@ -14126,6 +14132,10 @@ pcre2_jit_compile(pcre2_code *code, uint32_t options) { pcre2_real_code *re = (pcre2_real_code *)code;+#ifdef SUPPORT_JIT+executable_functions *functions;+static int executable_allocator_is_working = 0;+#endif  if (code == NULL)   return PCRE2_ERROR_NULL;@@ -14160,8 +14170,7 @@ */  #ifdef SUPPORT_JIT-executable_functions *functions = (executable_functions *)re->executable_jit;-static int executable_allocator_is_working = 0;+functions = (executable_functions *)re->executable_jit; #endif  if ((options & PCRE2_JIT_INVALID_UTF) != 0)
src/c/pcre2/src/pcre2_jit_simd_inc.h view
@@ -1356,8 +1356,6 @@   sljit_emit_op_custom(compiler, instruction, 6);   } -/* TODO: use sljit_set_current_flags */- /* VLGVB */ instruction[0] = (sljit_u16)(0xe700 | (tmp1_reg_ind << 4) | data_ind); instruction[1] = 7;@@ -1403,7 +1401,8 @@   sljit_emit_op_custom(compiler, instruction, 6);   } -/* TODO: use sljit_set_current_flags */+sljit_set_current_flags(compiler, SLJIT_SET_OVERFLOW);+JUMPTO(SLJIT_OVERFLOW, start);  /* VLGVB */ instruction[0] = (sljit_u16)(0xe700 | (tmp1_reg_ind << 4) | data_ind);@@ -1411,8 +1410,6 @@ instruction[2] = (sljit_u16)((0x4 << 8) | 0x21); sljit_emit_op_custom(compiler, instruction, 6); -CMPTO(SLJIT_GREATER_EQUAL, TMP1, 0, SLJIT_IMM, 16, start);- OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, TMP1, 0);  JUMPHERE(quit);@@ -1549,8 +1546,6 @@   sljit_emit_op_custom(compiler, instruction, 6);   } -/* TODO: use sljit_set_current_flags */- /* VLGVB */ instruction[0] = (sljit_u16)(0xe700 | (tmp3_reg_ind << 4) | data_ind); instruction[1] = 7;@@ -1594,7 +1589,8 @@   sljit_emit_op_custom(compiler, instruction, 6);   } -/* TODO: use sljit_set_current_flags */+sljit_set_current_flags(compiler, SLJIT_SET_OVERFLOW);+JUMPTO(SLJIT_OVERFLOW, start);  /* VLGVB */ instruction[0] = (sljit_u16)(0xe700 | (tmp3_reg_ind << 4) | data_ind);@@ -1602,8 +1598,6 @@ instruction[2] = (sljit_u16)((0x4 << 8) | 0x21); sljit_emit_op_custom(compiler, instruction, 6); -CMPTO(SLJIT_GREATER_EQUAL, TMP3, 0, SLJIT_IMM, 16, start);- OP2(SLJIT_ADD, TMP1, 0, TMP1, 0, TMP3, 0);  JUMPHERE(quit);@@ -1778,8 +1772,6 @@ instruction[2] = (sljit_u16)((0xe << 8) | 0x81); sljit_emit_op_custom(compiler, instruction, 6); -/* TODO: use sljit_set_current_flags */- /* VLGVB */ instruction[0] = (sljit_u16)(0xe700 | (tmp1_reg_ind << 4) | data1_ind); instruction[1] = 7;@@ -1819,15 +1811,14 @@ instruction[2] = (sljit_u16)((0xe << 8) | 0x81); sljit_emit_op_custom(compiler, instruction, 6); -/* TODO: use sljit_set_current_flags */+sljit_set_current_flags(compiler, SLJIT_SET_OVERFLOW);+JUMPTO(SLJIT_OVERFLOW, start);  /* VLGVB */ instruction[0] = (sljit_u16)(0xe700 | (tmp2_reg_ind << 4) | data1_ind); instruction[1] = 7; instruction[2] = (sljit_u16)((0x4 << 8) | 0x21); sljit_emit_op_custom(compiler, instruction, 6);--CMPTO(SLJIT_GREATER_EQUAL, TMP2, 0, SLJIT_IMM, 16, start);  OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, TMP2, 0); 
src/c/pcre2/src/pcre2_jit_test.c view
@@ -351,6 +351,8 @@ 	{ MU, A, 0, 0, ".[ab]*a", "xxa" }, 	{ MU, A, 0, 0, ".[ab]?.", "xx" }, 	{ MU, A, 0, 0, "_[ab]+_*a", "_aa" },+	{ MU, A, 0, 0, "#(A+)#\\d+", "#A#A#0" },+	{ MU, A, 0, 0, "(?P<size>\\d+)m|M", "4M" },  	/* Bracket repeats with limit. */ 	{ MU, A, 0, 0, "(?:(ab){2}){5}M", "abababababababababababM" },
src/c/pcre2/src/pcre2_match.c view
@@ -7,7 +7,7 @@                         Written by Philip Hazel      Original API code Copyright (c) 1997-2012 University of Cambridge-          New API code Copyright (c) 2015-2020 University of Cambridge+          New API code Copyright (c) 2015-2021 University of Cambridge  ----------------------------------------------------------------------------- Redistribution and use in source and binary forms, with or without@@ -6117,8 +6117,8 @@ BOOL startline;  #if PCRE2_CODE_UNIT_WIDTH == 8-BOOL memchr_not_found_first_cu;-BOOL memchr_not_found_first_cu2;+PCRE2_SPTR memchr_found_first_cu;+PCRE2_SPTR memchr_found_first_cu2; #endif  PCRE2_UCHAR first_cu = 0;@@ -6712,8 +6712,8 @@ mb->hitend = FALSE;  #if PCRE2_CODE_UNIT_WIDTH == 8-memchr_not_found_first_cu = FALSE;-memchr_not_found_first_cu2 = FALSE;+memchr_found_first_cu = NULL;+memchr_found_first_cu2 = NULL; #endif  for(;;)@@ -6782,13 +6782,7 @@         }       } -    /* Not anchored. Advance to a unique first code unit if there is one. In-    8-bit mode, the use of memchr() gives a big speed up, even though we have-    to call it twice in caseless mode, in order to find the earliest occurrence-    of the character in either of its cases. If a call to memchr() that-    searches the rest of the subject fails to find one case, remember that in-    order not to keep on repeating the search. This can make a huge difference-    when the strings are very long and only one case is present. */+    /* Not anchored. Advance to a unique first code unit if there is one. */      else       {@@ -6796,43 +6790,68 @@         {         if (first_cu != first_cu2)  /* Caseless */           {+          /* In 16-bit and 32_bit modes we have to do our own search, so can+          look for both cases at once. */+ #if PCRE2_CODE_UNIT_WIDTH != 8           PCRE2_UCHAR smc;           while (start_match < end_subject &&                 (smc = UCHAR21TEST(start_match)) != first_cu &&-                  smc != first_cu2)+                 smc != first_cu2)             start_match++;+#else+          /* In 8-bit mode, the use of memchr() gives a big speed up, even+          though we have to call it twice in order to find the earliest+          occurrence of the code unit in either of its cases. Caching is used+          to remember the positions of previously found code units. This can+          make a huge difference when the strings are very long and only one+          case is actually present. */ -#else  /* 8-bit code units */           PCRE2_SPTR pp1 = NULL;           PCRE2_SPTR pp2 = NULL;-          PCRE2_SIZE cu2size = end_subject - start_match;+          PCRE2_SIZE searchlength = end_subject - start_match; -          if (!memchr_not_found_first_cu)+          /* If we haven't got a previously found position for first_cu, or if+          the current starting position is later, we need to do a search. If+          the code unit is not found, set it to the end. */++          if (memchr_found_first_cu == NULL ||+              start_match > memchr_found_first_cu)             {-            pp1 = memchr(start_match, first_cu, end_subject - start_match);-            if (pp1 == NULL) memchr_not_found_first_cu = TRUE;-              else cu2size = pp1 - start_match;+            pp1 = memchr(start_match, first_cu, searchlength);+            memchr_found_first_cu = (pp1 == NULL)? end_subject : pp1;             } -          /* If pp1 is not NULL, we have arranged to search only as far as pp1,-          to see if the other case is earlier, so we can set "not found" only-          when both searches have returned NULL. */+          /* If the start is before a previously found position, use the+          previous position, or NULL if a previous search failed. */ -          if (!memchr_not_found_first_cu2)+          else pp1 = (memchr_found_first_cu == end_subject)? NULL :+            memchr_found_first_cu;++          /* Do the same thing for the other case. */++          if (memchr_found_first_cu2 == NULL ||+              start_match > memchr_found_first_cu2)             {-            pp2 = memchr(start_match, first_cu2, cu2size);-            memchr_not_found_first_cu2 = (pp2 == NULL && pp1 == NULL);+            pp2 = memchr(start_match, first_cu2, searchlength);+            memchr_found_first_cu2 = (pp2 == NULL)? end_subject : pp2;             } +          else pp2 = (memchr_found_first_cu2 == end_subject)? NULL :+            memchr_found_first_cu2;++          /* Set the start to the end of the subject if neither case was found.+          Otherwise, use the earlier found point. */+           if (pp1 == NULL)             start_match = (pp2 == NULL)? end_subject : pp2;           else             start_match = (pp2 == NULL || pp1 < pp2)? pp1 : pp2;-#endif++#endif  /* 8-bit handling */           } -        /* The caseful case */+        /* The caseful case is much simpler. */          else           {
src/c/pcre2/src/pcre2_tables.c view
@@ -273,6 +273,7 @@ #define STRING_Cs0 STR_C STR_s "\0" #define STRING_Cuneiform0 STR_C STR_u STR_n STR_e STR_i STR_f STR_o STR_r STR_m "\0" #define STRING_Cypriot0 STR_C STR_y STR_p STR_r STR_i STR_o STR_t "\0"+#define STRING_Cypro_Minoan0 STR_C STR_y STR_p STR_r STR_o STR_UNDERSCORE STR_M STR_i STR_n STR_o STR_a STR_n "\0" #define STRING_Cyrillic0 STR_C STR_y STR_r STR_i STR_l STR_l STR_i STR_c "\0" #define STRING_Deseret0 STR_D STR_e STR_s STR_e STR_r STR_e STR_t "\0" #define STRING_Devanagari0 STR_D STR_e STR_v STR_a STR_n STR_a STR_g STR_a STR_r STR_i "\0"@@ -371,6 +372,7 @@ #define STRING_Old_Sogdian0 STR_O STR_l STR_d STR_UNDERSCORE STR_S STR_o STR_g STR_d STR_i STR_a STR_n "\0" #define STRING_Old_South_Arabian0 STR_O STR_l STR_d STR_UNDERSCORE STR_S STR_o STR_u STR_t STR_h STR_UNDERSCORE STR_A STR_r STR_a STR_b STR_i STR_a STR_n "\0" #define STRING_Old_Turkic0 STR_O STR_l STR_d STR_UNDERSCORE STR_T STR_u STR_r STR_k STR_i STR_c "\0"+#define STRING_Old_Uyghur0 STR_O STR_l STR_d STR_UNDERSCORE STR_U STR_y STR_g STR_h STR_u STR_r "\0" #define STRING_Oriya0 STR_O STR_r STR_i STR_y STR_a "\0" #define STRING_Osage0 STR_O STR_s STR_a STR_g STR_e "\0" #define STRING_Osmanya0 STR_O STR_s STR_m STR_a STR_n STR_y STR_a "\0"@@ -415,6 +417,7 @@ #define STRING_Tai_Viet0 STR_T STR_a STR_i STR_UNDERSCORE STR_V STR_i STR_e STR_t "\0" #define STRING_Takri0 STR_T STR_a STR_k STR_r STR_i "\0" #define STRING_Tamil0 STR_T STR_a STR_m STR_i STR_l "\0"+#define STRING_Tangsa0 STR_T STR_a STR_n STR_g STR_s STR_a "\0" #define STRING_Tangut0 STR_T STR_a STR_n STR_g STR_u STR_t "\0" #define STRING_Telugu0 STR_T STR_e STR_l STR_u STR_g STR_u "\0" #define STRING_Thaana0 STR_T STR_h STR_a STR_a STR_n STR_a "\0"@@ -422,9 +425,11 @@ #define STRING_Tibetan0 STR_T STR_i STR_b STR_e STR_t STR_a STR_n "\0" #define STRING_Tifinagh0 STR_T STR_i STR_f STR_i STR_n STR_a STR_g STR_h "\0" #define STRING_Tirhuta0 STR_T STR_i STR_r STR_h STR_u STR_t STR_a "\0"+#define STRING_Toto0 STR_T STR_o STR_t STR_o "\0" #define STRING_Ugaritic0 STR_U STR_g STR_a STR_r STR_i STR_t STR_i STR_c "\0" #define STRING_Unknown0 STR_U STR_n STR_k STR_n STR_o STR_w STR_n "\0" #define STRING_Vai0 STR_V STR_a STR_i "\0"+#define STRING_Vithkuqi0 STR_V STR_i STR_t STR_h STR_k STR_u STR_q STR_i "\0" #define STRING_Wancho0 STR_W STR_a STR_n STR_c STR_h STR_o "\0" #define STRING_Warang_Citi0 STR_W STR_a STR_r STR_a STR_n STR_g STR_UNDERSCORE STR_C STR_i STR_t STR_i "\0" #define STRING_Xan0 STR_X STR_a STR_n "\0"@@ -476,6 +481,7 @@   STRING_Cs0   STRING_Cuneiform0   STRING_Cypriot0+  STRING_Cypro_Minoan0   STRING_Cyrillic0   STRING_Deseret0   STRING_Devanagari0@@ -574,6 +580,7 @@   STRING_Old_Sogdian0   STRING_Old_South_Arabian0   STRING_Old_Turkic0+  STRING_Old_Uyghur0   STRING_Oriya0   STRING_Osage0   STRING_Osmanya0@@ -618,6 +625,7 @@   STRING_Tai_Viet0   STRING_Takri0   STRING_Tamil0+  STRING_Tangsa0   STRING_Tangut0   STRING_Telugu0   STRING_Thaana0@@ -625,9 +633,11 @@   STRING_Tibetan0   STRING_Tifinagh0   STRING_Tirhuta0+  STRING_Toto0   STRING_Ugaritic0   STRING_Unknown0   STRING_Vai0+  STRING_Vithkuqi0   STRING_Wancho0   STRING_Warang_Citi0   STRING_Xan0@@ -679,172 +689,177 @@   { 255, PT_PC, ucp_Cs },   { 258, PT_SC, ucp_Cuneiform },   { 268, PT_SC, ucp_Cypriot },-  { 276, PT_SC, ucp_Cyrillic },-  { 285, PT_SC, ucp_Deseret },-  { 293, PT_SC, ucp_Devanagari },-  { 304, PT_SC, ucp_Dives_Akuru },-  { 316, PT_SC, ucp_Dogra },-  { 322, PT_SC, ucp_Duployan },-  { 331, PT_SC, ucp_Egyptian_Hieroglyphs },-  { 352, PT_SC, ucp_Elbasan },-  { 360, PT_SC, ucp_Elymaic },-  { 368, PT_SC, ucp_Ethiopic },-  { 377, PT_SC, ucp_Georgian },-  { 386, PT_SC, ucp_Glagolitic },-  { 397, PT_SC, ucp_Gothic },-  { 404, PT_SC, ucp_Grantha },-  { 412, PT_SC, ucp_Greek },-  { 418, PT_SC, ucp_Gujarati },-  { 427, PT_SC, ucp_Gunjala_Gondi },-  { 441, PT_SC, ucp_Gurmukhi },-  { 450, PT_SC, ucp_Han },-  { 454, PT_SC, ucp_Hangul },-  { 461, PT_SC, ucp_Hanifi_Rohingya },-  { 477, PT_SC, ucp_Hanunoo },-  { 485, PT_SC, ucp_Hatran },-  { 492, PT_SC, ucp_Hebrew },-  { 499, PT_SC, ucp_Hiragana },-  { 508, PT_SC, ucp_Imperial_Aramaic },-  { 525, PT_SC, ucp_Inherited },-  { 535, PT_SC, ucp_Inscriptional_Pahlavi },-  { 557, PT_SC, ucp_Inscriptional_Parthian },-  { 580, PT_SC, ucp_Javanese },-  { 589, PT_SC, ucp_Kaithi },-  { 596, PT_SC, ucp_Kannada },-  { 604, PT_SC, ucp_Katakana },-  { 613, PT_SC, ucp_Kayah_Li },-  { 622, PT_SC, ucp_Kharoshthi },-  { 633, PT_SC, ucp_Khitan_Small_Script },-  { 653, PT_SC, ucp_Khmer },-  { 659, PT_SC, ucp_Khojki },-  { 666, PT_SC, ucp_Khudawadi },-  { 676, PT_GC, ucp_L },-  { 678, PT_LAMP, 0 },-  { 681, PT_SC, ucp_Lao },-  { 685, PT_SC, ucp_Latin },-  { 691, PT_SC, ucp_Lepcha },-  { 698, PT_SC, ucp_Limbu },-  { 704, PT_SC, ucp_Linear_A },-  { 713, PT_SC, ucp_Linear_B },-  { 722, PT_SC, ucp_Lisu },-  { 727, PT_PC, ucp_Ll },-  { 730, PT_PC, ucp_Lm },-  { 733, PT_PC, ucp_Lo },-  { 736, PT_PC, ucp_Lt },-  { 739, PT_PC, ucp_Lu },-  { 742, PT_SC, ucp_Lycian },-  { 749, PT_SC, ucp_Lydian },-  { 756, PT_GC, ucp_M },-  { 758, PT_SC, ucp_Mahajani },-  { 767, PT_SC, ucp_Makasar },-  { 775, PT_SC, ucp_Malayalam },-  { 785, PT_SC, ucp_Mandaic },-  { 793, PT_SC, ucp_Manichaean },-  { 804, PT_SC, ucp_Marchen },-  { 812, PT_SC, ucp_Masaram_Gondi },-  { 826, PT_PC, ucp_Mc },-  { 829, PT_PC, ucp_Me },-  { 832, PT_SC, ucp_Medefaidrin },-  { 844, PT_SC, ucp_Meetei_Mayek },-  { 857, PT_SC, ucp_Mende_Kikakui },-  { 871, PT_SC, ucp_Meroitic_Cursive },-  { 888, PT_SC, ucp_Meroitic_Hieroglyphs },-  { 909, PT_SC, ucp_Miao },-  { 914, PT_PC, ucp_Mn },-  { 917, PT_SC, ucp_Modi },-  { 922, PT_SC, ucp_Mongolian },-  { 932, PT_SC, ucp_Mro },-  { 936, PT_SC, ucp_Multani },-  { 944, PT_SC, ucp_Myanmar },-  { 952, PT_GC, ucp_N },-  { 954, PT_SC, ucp_Nabataean },-  { 964, PT_SC, ucp_Nandinagari },-  { 976, PT_PC, ucp_Nd },-  { 979, PT_SC, ucp_New_Tai_Lue },-  { 991, PT_SC, ucp_Newa },-  { 996, PT_SC, ucp_Nko },-  { 1000, PT_PC, ucp_Nl },-  { 1003, PT_PC, ucp_No },-  { 1006, PT_SC, ucp_Nushu },-  { 1012, PT_SC, ucp_Nyiakeng_Puachue_Hmong },-  { 1035, PT_SC, ucp_Ogham },-  { 1041, PT_SC, ucp_Ol_Chiki },-  { 1050, PT_SC, ucp_Old_Hungarian },-  { 1064, PT_SC, ucp_Old_Italic },-  { 1075, PT_SC, ucp_Old_North_Arabian },-  { 1093, PT_SC, ucp_Old_Permic },-  { 1104, PT_SC, ucp_Old_Persian },-  { 1116, PT_SC, ucp_Old_Sogdian },-  { 1128, PT_SC, ucp_Old_South_Arabian },-  { 1146, PT_SC, ucp_Old_Turkic },-  { 1157, PT_SC, ucp_Oriya },-  { 1163, PT_SC, ucp_Osage },-  { 1169, PT_SC, ucp_Osmanya },-  { 1177, PT_GC, ucp_P },-  { 1179, PT_SC, ucp_Pahawh_Hmong },-  { 1192, PT_SC, ucp_Palmyrene },-  { 1202, PT_SC, ucp_Pau_Cin_Hau },-  { 1214, PT_PC, ucp_Pc },-  { 1217, PT_PC, ucp_Pd },-  { 1220, PT_PC, ucp_Pe },-  { 1223, PT_PC, ucp_Pf },-  { 1226, PT_SC, ucp_Phags_Pa },-  { 1235, PT_SC, ucp_Phoenician },-  { 1246, PT_PC, ucp_Pi },-  { 1249, PT_PC, ucp_Po },-  { 1252, PT_PC, ucp_Ps },-  { 1255, PT_SC, ucp_Psalter_Pahlavi },-  { 1271, PT_SC, ucp_Rejang },-  { 1278, PT_SC, ucp_Runic },-  { 1284, PT_GC, ucp_S },-  { 1286, PT_SC, ucp_Samaritan },-  { 1296, PT_SC, ucp_Saurashtra },-  { 1307, PT_PC, ucp_Sc },-  { 1310, PT_SC, ucp_Sharada },-  { 1318, PT_SC, ucp_Shavian },-  { 1326, PT_SC, ucp_Siddham },-  { 1334, PT_SC, ucp_SignWriting },-  { 1346, PT_SC, ucp_Sinhala },-  { 1354, PT_PC, ucp_Sk },-  { 1357, PT_PC, ucp_Sm },-  { 1360, PT_PC, ucp_So },-  { 1363, PT_SC, ucp_Sogdian },-  { 1371, PT_SC, ucp_Sora_Sompeng },-  { 1384, PT_SC, ucp_Soyombo },-  { 1392, PT_SC, ucp_Sundanese },-  { 1402, PT_SC, ucp_Syloti_Nagri },-  { 1415, PT_SC, ucp_Syriac },-  { 1422, PT_SC, ucp_Tagalog },-  { 1430, PT_SC, ucp_Tagbanwa },-  { 1439, PT_SC, ucp_Tai_Le },-  { 1446, PT_SC, ucp_Tai_Tham },-  { 1455, PT_SC, ucp_Tai_Viet },-  { 1464, PT_SC, ucp_Takri },-  { 1470, PT_SC, ucp_Tamil },-  { 1476, PT_SC, ucp_Tangut },-  { 1483, PT_SC, ucp_Telugu },-  { 1490, PT_SC, ucp_Thaana },-  { 1497, PT_SC, ucp_Thai },-  { 1502, PT_SC, ucp_Tibetan },-  { 1510, PT_SC, ucp_Tifinagh },-  { 1519, PT_SC, ucp_Tirhuta },-  { 1527, PT_SC, ucp_Ugaritic },-  { 1536, PT_SC, ucp_Unknown },-  { 1544, PT_SC, ucp_Vai },-  { 1548, PT_SC, ucp_Wancho },-  { 1555, PT_SC, ucp_Warang_Citi },-  { 1567, PT_ALNUM, 0 },-  { 1571, PT_PXSPACE, 0 },-  { 1575, PT_SPACE, 0 },-  { 1579, PT_UCNC, 0 },-  { 1583, PT_WORD, 0 },-  { 1587, PT_SC, ucp_Yezidi },-  { 1594, PT_SC, ucp_Yi },-  { 1597, PT_GC, ucp_Z },-  { 1599, PT_SC, ucp_Zanabazar_Square },-  { 1616, PT_PC, ucp_Zl },-  { 1619, PT_PC, ucp_Zp },-  { 1622, PT_PC, ucp_Zs }+  { 276, PT_SC, ucp_Cypro_Minoan },+  { 289, PT_SC, ucp_Cyrillic },+  { 298, PT_SC, ucp_Deseret },+  { 306, PT_SC, ucp_Devanagari },+  { 317, PT_SC, ucp_Dives_Akuru },+  { 329, PT_SC, ucp_Dogra },+  { 335, PT_SC, ucp_Duployan },+  { 344, PT_SC, ucp_Egyptian_Hieroglyphs },+  { 365, PT_SC, ucp_Elbasan },+  { 373, PT_SC, ucp_Elymaic },+  { 381, PT_SC, ucp_Ethiopic },+  { 390, PT_SC, ucp_Georgian },+  { 399, PT_SC, ucp_Glagolitic },+  { 410, PT_SC, ucp_Gothic },+  { 417, PT_SC, ucp_Grantha },+  { 425, PT_SC, ucp_Greek },+  { 431, PT_SC, ucp_Gujarati },+  { 440, PT_SC, ucp_Gunjala_Gondi },+  { 454, PT_SC, ucp_Gurmukhi },+  { 463, PT_SC, ucp_Han },+  { 467, PT_SC, ucp_Hangul },+  { 474, PT_SC, ucp_Hanifi_Rohingya },+  { 490, PT_SC, ucp_Hanunoo },+  { 498, PT_SC, ucp_Hatran },+  { 505, PT_SC, ucp_Hebrew },+  { 512, PT_SC, ucp_Hiragana },+  { 521, PT_SC, ucp_Imperial_Aramaic },+  { 538, PT_SC, ucp_Inherited },+  { 548, PT_SC, ucp_Inscriptional_Pahlavi },+  { 570, PT_SC, ucp_Inscriptional_Parthian },+  { 593, PT_SC, ucp_Javanese },+  { 602, PT_SC, ucp_Kaithi },+  { 609, PT_SC, ucp_Kannada },+  { 617, PT_SC, ucp_Katakana },+  { 626, PT_SC, ucp_Kayah_Li },+  { 635, PT_SC, ucp_Kharoshthi },+  { 646, PT_SC, ucp_Khitan_Small_Script },+  { 666, PT_SC, ucp_Khmer },+  { 672, PT_SC, ucp_Khojki },+  { 679, PT_SC, ucp_Khudawadi },+  { 689, PT_GC, ucp_L },+  { 691, PT_LAMP, 0 },+  { 694, PT_SC, ucp_Lao },+  { 698, PT_SC, ucp_Latin },+  { 704, PT_SC, ucp_Lepcha },+  { 711, PT_SC, ucp_Limbu },+  { 717, PT_SC, ucp_Linear_A },+  { 726, PT_SC, ucp_Linear_B },+  { 735, PT_SC, ucp_Lisu },+  { 740, PT_PC, ucp_Ll },+  { 743, PT_PC, ucp_Lm },+  { 746, PT_PC, ucp_Lo },+  { 749, PT_PC, ucp_Lt },+  { 752, PT_PC, ucp_Lu },+  { 755, PT_SC, ucp_Lycian },+  { 762, PT_SC, ucp_Lydian },+  { 769, PT_GC, ucp_M },+  { 771, PT_SC, ucp_Mahajani },+  { 780, PT_SC, ucp_Makasar },+  { 788, PT_SC, ucp_Malayalam },+  { 798, PT_SC, ucp_Mandaic },+  { 806, PT_SC, ucp_Manichaean },+  { 817, PT_SC, ucp_Marchen },+  { 825, PT_SC, ucp_Masaram_Gondi },+  { 839, PT_PC, ucp_Mc },+  { 842, PT_PC, ucp_Me },+  { 845, PT_SC, ucp_Medefaidrin },+  { 857, PT_SC, ucp_Meetei_Mayek },+  { 870, PT_SC, ucp_Mende_Kikakui },+  { 884, PT_SC, ucp_Meroitic_Cursive },+  { 901, PT_SC, ucp_Meroitic_Hieroglyphs },+  { 922, PT_SC, ucp_Miao },+  { 927, PT_PC, ucp_Mn },+  { 930, PT_SC, ucp_Modi },+  { 935, PT_SC, ucp_Mongolian },+  { 945, PT_SC, ucp_Mro },+  { 949, PT_SC, ucp_Multani },+  { 957, PT_SC, ucp_Myanmar },+  { 965, PT_GC, ucp_N },+  { 967, PT_SC, ucp_Nabataean },+  { 977, PT_SC, ucp_Nandinagari },+  { 989, PT_PC, ucp_Nd },+  { 992, PT_SC, ucp_New_Tai_Lue },+  { 1004, PT_SC, ucp_Newa },+  { 1009, PT_SC, ucp_Nko },+  { 1013, PT_PC, ucp_Nl },+  { 1016, PT_PC, ucp_No },+  { 1019, PT_SC, ucp_Nushu },+  { 1025, PT_SC, ucp_Nyiakeng_Puachue_Hmong },+  { 1048, PT_SC, ucp_Ogham },+  { 1054, PT_SC, ucp_Ol_Chiki },+  { 1063, PT_SC, ucp_Old_Hungarian },+  { 1077, PT_SC, ucp_Old_Italic },+  { 1088, PT_SC, ucp_Old_North_Arabian },+  { 1106, PT_SC, ucp_Old_Permic },+  { 1117, PT_SC, ucp_Old_Persian },+  { 1129, PT_SC, ucp_Old_Sogdian },+  { 1141, PT_SC, ucp_Old_South_Arabian },+  { 1159, PT_SC, ucp_Old_Turkic },+  { 1170, PT_SC, ucp_Old_Uyghur },+  { 1181, PT_SC, ucp_Oriya },+  { 1187, PT_SC, ucp_Osage },+  { 1193, PT_SC, ucp_Osmanya },+  { 1201, PT_GC, ucp_P },+  { 1203, PT_SC, ucp_Pahawh_Hmong },+  { 1216, PT_SC, ucp_Palmyrene },+  { 1226, PT_SC, ucp_Pau_Cin_Hau },+  { 1238, PT_PC, ucp_Pc },+  { 1241, PT_PC, ucp_Pd },+  { 1244, PT_PC, ucp_Pe },+  { 1247, PT_PC, ucp_Pf },+  { 1250, PT_SC, ucp_Phags_Pa },+  { 1259, PT_SC, ucp_Phoenician },+  { 1270, PT_PC, ucp_Pi },+  { 1273, PT_PC, ucp_Po },+  { 1276, PT_PC, ucp_Ps },+  { 1279, PT_SC, ucp_Psalter_Pahlavi },+  { 1295, PT_SC, ucp_Rejang },+  { 1302, PT_SC, ucp_Runic },+  { 1308, PT_GC, ucp_S },+  { 1310, PT_SC, ucp_Samaritan },+  { 1320, PT_SC, ucp_Saurashtra },+  { 1331, PT_PC, ucp_Sc },+  { 1334, PT_SC, ucp_Sharada },+  { 1342, PT_SC, ucp_Shavian },+  { 1350, PT_SC, ucp_Siddham },+  { 1358, PT_SC, ucp_SignWriting },+  { 1370, PT_SC, ucp_Sinhala },+  { 1378, PT_PC, ucp_Sk },+  { 1381, PT_PC, ucp_Sm },+  { 1384, PT_PC, ucp_So },+  { 1387, PT_SC, ucp_Sogdian },+  { 1395, PT_SC, ucp_Sora_Sompeng },+  { 1408, PT_SC, ucp_Soyombo },+  { 1416, PT_SC, ucp_Sundanese },+  { 1426, PT_SC, ucp_Syloti_Nagri },+  { 1439, PT_SC, ucp_Syriac },+  { 1446, PT_SC, ucp_Tagalog },+  { 1454, PT_SC, ucp_Tagbanwa },+  { 1463, PT_SC, ucp_Tai_Le },+  { 1470, PT_SC, ucp_Tai_Tham },+  { 1479, PT_SC, ucp_Tai_Viet },+  { 1488, PT_SC, ucp_Takri },+  { 1494, PT_SC, ucp_Tamil },+  { 1500, PT_SC, ucp_Tangsa },+  { 1507, PT_SC, ucp_Tangut },+  { 1514, PT_SC, ucp_Telugu },+  { 1521, PT_SC, ucp_Thaana },+  { 1528, PT_SC, ucp_Thai },+  { 1533, PT_SC, ucp_Tibetan },+  { 1541, PT_SC, ucp_Tifinagh },+  { 1550, PT_SC, ucp_Tirhuta },+  { 1558, PT_SC, ucp_Toto },+  { 1563, PT_SC, ucp_Ugaritic },+  { 1572, PT_SC, ucp_Unknown },+  { 1580, PT_SC, ucp_Vai },+  { 1584, PT_SC, ucp_Vithkuqi },+  { 1593, PT_SC, ucp_Wancho },+  { 1600, PT_SC, ucp_Warang_Citi },+  { 1612, PT_ALNUM, 0 },+  { 1616, PT_PXSPACE, 0 },+  { 1620, PT_SPACE, 0 },+  { 1624, PT_UCNC, 0 },+  { 1628, PT_WORD, 0 },+  { 1632, PT_SC, ucp_Yezidi },+  { 1639, PT_SC, ucp_Yi },+  { 1642, PT_GC, ucp_Z },+  { 1644, PT_SC, ucp_Zanabazar_Square },+  { 1661, PT_PC, ucp_Zl },+  { 1664, PT_PC, ucp_Zp },+  { 1667, PT_PC, ucp_Zs } };  const size_t PRIV(utt_size) = sizeof(PRIV(utt)) / sizeof(ucp_type_table);
src/c/pcre2/src/pcre2_ucd.c view
@@ -20,4513 +20,4599 @@  /* Unicode character database. */ /* This file was autogenerated by the MultiStage2.py script. */-/* Total size: 101044 bytes, block size: 128. */--/* The tables herein are needed only when UCP support is built,-and in PCRE2 that happens automatically with UTF support.-This module should not be referenced otherwise, so-it should not matter whether it is compiled or not. However-a comment was received about space saving - maybe the guy linked-all the modules rather than using a library - so we include a-condition to cut out the tables when not needed. But don't leave-a totally empty module because some compilers barf at that.-Instead, just supply some small dummy tables. */--#ifndef SUPPORT_UNICODE-const ucd_record PRIV(ucd_records)[] = {{0,0,0,0,0,0,0 }};-const uint16_t PRIV(ucd_stage1)[] = {0};-const uint16_t PRIV(ucd_stage2)[] = {0};-const uint32_t PRIV(ucd_caseless_sets)[] = {0};-#else--const char *PRIV(unicode_version) = "13.0.0";--/* If the 32-bit library is run in non-32-bit mode, character values-greater than 0x10ffff may be encountered. For these we set up a-special record. */--#if PCRE2_CODE_UNIT_WIDTH == 32-const ucd_record PRIV(dummy_ucd_record)[] = {{-  ucp_Unknown,    /* script */-  ucp_Cn,         /* type unassigned */-  ucp_gbOther,    /* grapheme break property */-  0,              /* case set */-  0,              /* other case */-  ucp_Unknown,    /* script extension */-  0,              /* dummy filler */-  }};-#endif--/* When recompiling tables with a new Unicode version, please check the-types in this structure definition from pcre2_internal.h (the actual-field names will be different):--typedef struct {-uint8_t property_0;-uint8_t property_1;-uint8_t property_2;-uint8_t property_3;-pcre_int32 property_4;-pcre_int16 property_5;-uint16_t property_6;-} ucd_record;-*/--/* This table contains lists of characters that are caseless sets of-more than one character. Each list is terminated by NOTACHAR. */--const uint32_t PRIV(ucd_caseless_sets)[] = {-  NOTACHAR,-  0x0053,   0x0073,   0x017f,   NOTACHAR,-  0x01c4,   0x01c5,   0x01c6,   NOTACHAR,-  0x01c7,   0x01c8,   0x01c9,   NOTACHAR,-  0x01ca,   0x01cb,   0x01cc,   NOTACHAR,-  0x01f1,   0x01f2,   0x01f3,   NOTACHAR,-  0x0345,   0x0399,   0x03b9,   0x1fbe,   NOTACHAR,-  0x00b5,   0x039c,   0x03bc,   NOTACHAR,-  0x03a3,   0x03c2,   0x03c3,   NOTACHAR,-  0x0392,   0x03b2,   0x03d0,   NOTACHAR,-  0x0398,   0x03b8,   0x03d1,   0x03f4,   NOTACHAR,-  0x03a6,   0x03c6,   0x03d5,   NOTACHAR,-  0x03a0,   0x03c0,   0x03d6,   NOTACHAR,-  0x039a,   0x03ba,   0x03f0,   NOTACHAR,-  0x03a1,   0x03c1,   0x03f1,   NOTACHAR,-  0x0395,   0x03b5,   0x03f5,   NOTACHAR,-  0x0412,   0x0432,   0x1c80,   NOTACHAR,-  0x0414,   0x0434,   0x1c81,   NOTACHAR,-  0x041e,   0x043e,   0x1c82,   NOTACHAR,-  0x0421,   0x0441,   0x1c83,   NOTACHAR,-  0x0422,   0x0442,   0x1c84,   0x1c85,   NOTACHAR,-  0x042a,   0x044a,   0x1c86,   NOTACHAR,-  0x0462,   0x0463,   0x1c87,   NOTACHAR,-  0x1e60,   0x1e61,   0x1e9b,   NOTACHAR,-  0x03a9,   0x03c9,   0x2126,   NOTACHAR,-  0x004b,   0x006b,   0x212a,   NOTACHAR,-  0x00c5,   0x00e5,   0x212b,   NOTACHAR,-  0x1c88,   0xa64a,   0xa64b,   NOTACHAR,-};--/* When #included in pcre2test, we don't need the table of digit-sets, nor the the large main UCD tables. */--#ifndef PCRE2_PCRE2TEST--/* This table lists the code points for the '9' characters in each-set of decimal digits. It is used to ensure that all the digits in-a script run come from the same set. */--const uint32_t PRIV(ucd_digit_sets)[] = {-  65,  /* Number of subsequent values */-  0x00039, 0x00669, 0x006f9, 0x007c9, 0x0096f, 0x009ef, 0x00a6f, 0x00aef,-  0x00b6f, 0x00bef, 0x00c6f, 0x00cef, 0x00d6f, 0x00def, 0x00e59, 0x00ed9,-  0x00f29, 0x01049, 0x01099, 0x017e9, 0x01819, 0x0194f, 0x019d9, 0x01a89,-  0x01a99, 0x01b59, 0x01bb9, 0x01c49, 0x01c59, 0x0a629, 0x0a8d9, 0x0a909,-  0x0a9d9, 0x0a9f9, 0x0aa59, 0x0abf9, 0x0ff19, 0x104a9, 0x10d39, 0x1106f,-  0x110f9, 0x1113f, 0x111d9, 0x112f9, 0x11459, 0x114d9, 0x11659, 0x116c9,-  0x11739, 0x118e9, 0x11959, 0x11c59, 0x11d59, 0x11da9, 0x16a69, 0x16b59,-  0x1d7d7, 0x1d7e1, 0x1d7eb, 0x1d7f5, 0x1d7ff, 0x1e149, 0x1e2f9, 0x1e959,-  0x1fbf9,-};--/* This vector is a list of lists of scripts for the Script Extension-property. Each sublist is zero-terminated. */--const uint8_t PRIV(ucd_script_sets)[] = {-  /*   0 */   0,-  /*   1 */   1,  11,   0,-  /*   4 */   1, 144,   0,-  /*   7 */   1,  50,   0,-  /*  10 */   1,  56,   0,-  /*  13 */   3,  15,   0,-  /*  16 */   4,  23,   0,-  /*  19 */   6,  84,   0,-  /*  22 */  12,  36,   0,-  /*  25 */  13,  18,   0,-  /*  28 */  13,  34,   0,-  /*  31 */  13, 118,   0,-  /*  34 */  13,  50,   0,-  /*  37 */  15, 107,   0,-  /*  40 */  15, 150,   0,-  /*  43 */  15, 100,   0,-  /*  46 */  15,  54,   0,-  /*  49 */  17,  34,   0,-  /*  52 */ 107,  54,   0,-  /*  55 */  21, 108,   0,-  /*  58 */  22, 129,   0,-  /*  61 */  23,  34,   0,-  /*  64 */  27,  30,   0,-  /*  67 */  29, 150,   0,-  /*  70 */  34,  38,   0,-  /*  73 */  38,  65,   0,-  /*  76 */   1,  50,  56,   0,-  /*  80 */   1,  56, 156,   0,-  /*  84 */   3,  96,  49,   0,-  /*  88 */  96,  39,  53,   0,-  /*  92 */  12, 110,  36,   0,-  /*  96 */  15, 107,  29,   0,-  /* 100 */  15, 107,  34,   0,-  /* 104 */  23,  27,  30,   0,-  /* 108 */  69,  34,  39,   0,-  /* 112 */   3,  15, 107,  29,   0,-  /* 117 */   7,  25,  52,  51,   0,-  /* 122 */  15, 142,  85, 111,   0,-  /* 127 */   1, 144,  50,  56, 156,   0,-  /* 133 */   4,  24,  23,  27,  30,   0,-  /* 139 */   4,  24,  23,  27,  30,  61,   0,-  /* 146 */  15,  29,  37,  44,  54,  55,   0,-  /* 153 */ 132,   1,  95, 112, 121, 144, 148,  50,   0,-  /* 162 */   3,  15, 107,  29, 150,  44,  55, 124,   0,-  /* 171 */  15, 142,  21,  22, 108,  85, 111, 114, 109, 102, 124,   0,-  /* 183 */   3,  15, 107,  21,  22,  29,  34,  37,  44,  54,  55, 124,   0,-  /* 196 */   3,  15, 107,  21,  22,  29,  34,  37,  44, 100,  54,  55, 124,   0,-  /* 210 */  15, 142,  21,  22, 108,  29,  85, 111, 114, 150, 109, 102, 124,   0,-  /* 224 */  15, 142,  21,  22, 108,  29,  85, 111,  37, 114, 150, 109, 102, 124,   0,-  /* 239 */   3,  15, 142, 143, 138, 107,  21,  22,  29, 111,  37, 150,  44, 109,  48,  49, 102,  54,  55, 124,   0,-  /* 260 */   3,  15, 142, 143, 138, 107,  21,  22,  29,  35, 111,  37, 150,  44, 109,  48,  49, 102,  54,  55, 124,   0,-  /* 282 */-};--/* These are the main two-stage UCD tables. The fields in each record are:-script (8 bits), character type (8 bits), grapheme break property (8 bits),-offset to multichar other cases or zero (8 bits), offset to other case-or zero (32 bits, signed), script extension (16 bits, signed), and a dummy-16-bit field to make the whole thing a multiple of 4 bytes. */--const ucd_record PRIV(ucd_records)[] = { /* 11700 bytes, record size 12 */-  {    10,      0,      2,      0,      0,     10,    256, }, /*   0 */-  {    10,      0,      2,      0,      0,     10,      0, }, /*   1 */-  {    10,      0,      1,      0,      0,     10,      0, }, /*   2 */-  {    10,      0,      0,      0,      0,     10,      0, }, /*   3 */-  {    10,     29,     12,      0,      0,     10,      0, }, /*   4 */-  {    10,     21,     12,      0,      0,     10,      0, }, /*   5 */-  {    10,     23,     12,      0,      0,     10,      0, }, /*   6 */-  {    10,     22,     12,      0,      0,     10,      0, }, /*   7 */-  {    10,     18,     12,      0,      0,     10,      0, }, /*   8 */-  {    10,     25,     12,      0,      0,     10,      0, }, /*   9 */-  {    10,     17,     12,      0,      0,     10,      0, }, /*  10 */-  {    10,     13,     12,      0,      0,     10,      0, }, /*  11 */-  {    34,      9,     12,      0,     32,     34,      0, }, /*  12 */-  {    34,      9,     12,    100,     32,     34,      0, }, /*  13 */-  {    34,      9,     12,      1,     32,     34,      0, }, /*  14 */-  {    10,     24,     12,      0,      0,     10,      0, }, /*  15 */-  {    10,     16,     12,      0,      0,     10,      0, }, /*  16 */-  {    34,      5,     12,      0,    -32,     34,      0, }, /*  17 */-  {    34,      5,     12,    100,    -32,     34,      0, }, /*  18 */-  {    34,      5,     12,      1,    -32,     34,      0, }, /*  19 */-  {    10,     26,     12,      0,      0,     10,      0, }, /*  20 */-  {    10,     26,     14,      0,      0,     10,      0, }, /*  21 */-  {    34,      7,     12,      0,      0,     34,      0, }, /*  22 */-  {    10,     20,     12,      0,      0,     10,      0, }, /*  23 */-  {    10,      1,      2,      0,      0,     10,      0, }, /*  24 */-  {    10,     15,     12,      0,      0,     10,      0, }, /*  25 */-  {    10,      5,     12,     26,    775,     10,      0, }, /*  26 */-  {    10,     19,     12,      0,      0,     10,      0, }, /*  27 */-  {    34,      9,     12,    104,     32,     34,      0, }, /*  28 */-  {    34,      5,     12,      0,   7615,     34,      0, }, /*  29 */-  {    34,      5,     12,    104,    -32,     34,      0, }, /*  30 */-  {    34,      5,     12,      0,    121,     34,      0, }, /*  31 */-  {    34,      9,     12,      0,      1,     34,      0, }, /*  32 */-  {    34,      5,     12,      0,     -1,     34,      0, }, /*  33 */-  {    34,      9,     12,      0,      0,     34,      0, }, /*  34 */-  {    34,      5,     12,      0,      0,     34,      0, }, /*  35 */-  {    34,      9,     12,      0,   -121,     34,      0, }, /*  36 */-  {    34,      5,     12,      1,   -268,     34,      0, }, /*  37 */-  {    34,      5,     12,      0,    195,     34,      0, }, /*  38 */-  {    34,      9,     12,      0,    210,     34,      0, }, /*  39 */-  {    34,      9,     12,      0,    206,     34,      0, }, /*  40 */-  {    34,      9,     12,      0,    205,     34,      0, }, /*  41 */-  {    34,      9,     12,      0,     79,     34,      0, }, /*  42 */-  {    34,      9,     12,      0,    202,     34,      0, }, /*  43 */-  {    34,      9,     12,      0,    203,     34,      0, }, /*  44 */-  {    34,      9,     12,      0,    207,     34,      0, }, /*  45 */-  {    34,      5,     12,      0,     97,     34,      0, }, /*  46 */-  {    34,      9,     12,      0,    211,     34,      0, }, /*  47 */-  {    34,      9,     12,      0,    209,     34,      0, }, /*  48 */-  {    34,      5,     12,      0,    163,     34,      0, }, /*  49 */-  {    34,      9,     12,      0,    213,     34,      0, }, /*  50 */-  {    34,      5,     12,      0,    130,     34,      0, }, /*  51 */-  {    34,      9,     12,      0,    214,     34,      0, }, /*  52 */-  {    34,      9,     12,      0,    218,     34,      0, }, /*  53 */-  {    34,      9,     12,      0,    217,     34,      0, }, /*  54 */-  {    34,      9,     12,      0,    219,     34,      0, }, /*  55 */-  {    34,      5,     12,      0,     56,     34,      0, }, /*  56 */-  {    34,      9,     12,      5,      2,     34,      0, }, /*  57 */-  {    34,      8,     12,      5,      1,     34,      0, }, /*  58 */-  {    34,      5,     12,      5,     -2,     34,      0, }, /*  59 */-  {    34,      9,     12,      9,      2,     34,      0, }, /*  60 */-  {    34,      8,     12,      9,      1,     34,      0, }, /*  61 */-  {    34,      5,     12,      9,     -2,     34,      0, }, /*  62 */-  {    34,      9,     12,     13,      2,     34,      0, }, /*  63 */-  {    34,      8,     12,     13,      1,     34,      0, }, /*  64 */-  {    34,      5,     12,     13,     -2,     34,      0, }, /*  65 */-  {    34,      5,     12,      0,    -79,     34,      0, }, /*  66 */-  {    34,      9,     12,     17,      2,     34,      0, }, /*  67 */-  {    34,      8,     12,     17,      1,     34,      0, }, /*  68 */-  {    34,      5,     12,     17,     -2,     34,      0, }, /*  69 */-  {    34,      9,     12,      0,    -97,     34,      0, }, /*  70 */-  {    34,      9,     12,      0,    -56,     34,      0, }, /*  71 */-  {    34,      9,     12,      0,   -130,     34,      0, }, /*  72 */-  {    34,      9,     12,      0,  10795,     34,      0, }, /*  73 */-  {    34,      9,     12,      0,   -163,     34,      0, }, /*  74 */-  {    34,      9,     12,      0,  10792,     34,      0, }, /*  75 */-  {    34,      5,     12,      0,  10815,     34,      0, }, /*  76 */-  {    34,      9,     12,      0,   -195,     34,      0, }, /*  77 */-  {    34,      9,     12,      0,     69,     34,      0, }, /*  78 */-  {    34,      9,     12,      0,     71,     34,      0, }, /*  79 */-  {    34,      5,     12,      0,  10783,     34,      0, }, /*  80 */-  {    34,      5,     12,      0,  10780,     34,      0, }, /*  81 */-  {    34,      5,     12,      0,  10782,     34,      0, }, /*  82 */-  {    34,      5,     12,      0,   -210,     34,      0, }, /*  83 */-  {    34,      5,     12,      0,   -206,     34,      0, }, /*  84 */-  {    34,      5,     12,      0,   -205,     34,      0, }, /*  85 */-  {    34,      5,     12,      0,   -202,     34,      0, }, /*  86 */-  {    34,      5,     12,      0,   -203,     34,      0, }, /*  87 */-  {    34,      5,     12,      0,  42319,     34,      0, }, /*  88 */-  {    34,      5,     12,      0,  42315,     34,      0, }, /*  89 */-  {    34,      5,     12,      0,   -207,     34,      0, }, /*  90 */-  {    34,      5,     12,      0,  42280,     34,      0, }, /*  91 */-  {    34,      5,     12,      0,  42308,     34,      0, }, /*  92 */-  {    34,      5,     12,      0,   -209,     34,      0, }, /*  93 */-  {    34,      5,     12,      0,   -211,     34,      0, }, /*  94 */-  {    34,      5,     12,      0,  10743,     34,      0, }, /*  95 */-  {    34,      5,     12,      0,  42305,     34,      0, }, /*  96 */-  {    34,      5,     12,      0,  10749,     34,      0, }, /*  97 */-  {    34,      5,     12,      0,   -213,     34,      0, }, /*  98 */-  {    34,      5,     12,      0,   -214,     34,      0, }, /*  99 */-  {    34,      5,     12,      0,  10727,     34,      0, }, /* 100 */-  {    34,      5,     12,      0,   -218,     34,      0, }, /* 101 */-  {    34,      5,     12,      0,  42307,     34,      0, }, /* 102 */-  {    34,      5,     12,      0,  42282,     34,      0, }, /* 103 */-  {    34,      5,     12,      0,    -69,     34,      0, }, /* 104 */-  {    34,      5,     12,      0,   -217,     34,      0, }, /* 105 */-  {    34,      5,     12,      0,    -71,     34,      0, }, /* 106 */-  {    34,      5,     12,      0,   -219,     34,      0, }, /* 107 */-  {    34,      5,     12,      0,  42261,     34,      0, }, /* 108 */-  {    34,      5,     12,      0,  42258,     34,      0, }, /* 109 */-  {    34,      6,     12,      0,      0,     34,      0, }, /* 110 */-  {    10,      6,     12,      0,      0,     10,      0, }, /* 111 */-  {     4,     24,     12,      0,      0,      4,      0, }, /* 112 */-  {    28,     12,      3,      0,      0,     28,      0, }, /* 113 */-  {    28,     12,      3,      0,      0,     20,      0, }, /* 114 */-  {    28,     12,      3,     21,    116,     20,      0, }, /* 115 */-  {    28,     12,      3,      0,      0,     34,      0, }, /* 116 */-  {    20,      9,     12,      0,      1,     20,      0, }, /* 117 */-  {    20,      5,     12,      0,     -1,     20,      0, }, /* 118 */-  {    20,     24,     12,      0,      0,     20,      0, }, /* 119 */-  {     0,      2,     12,      0,      0,      0,      0, }, /* 120 */-  {    20,      6,     12,      0,      0,     20,      0, }, /* 121 */-  {    20,      5,     12,      0,    130,     20,      0, }, /* 122 */-  {    20,      9,     12,      0,    116,     20,      0, }, /* 123 */-  {    20,      9,     12,      0,     38,     20,      0, }, /* 124 */-  {    20,      9,     12,      0,     37,     20,      0, }, /* 125 */-  {    20,      9,     12,      0,     64,     20,      0, }, /* 126 */-  {    20,      9,     12,      0,     63,     20,      0, }, /* 127 */-  {    20,      5,     12,      0,      0,     20,      0, }, /* 128 */-  {    20,      9,     12,      0,     32,     20,      0, }, /* 129 */-  {    20,      9,     12,     34,     32,     20,      0, }, /* 130 */-  {    20,      9,     12,     59,     32,     20,      0, }, /* 131 */-  {    20,      9,     12,     38,     32,     20,      0, }, /* 132 */-  {    20,      9,     12,     21,     32,     20,      0, }, /* 133 */-  {    20,      9,     12,     51,     32,     20,      0, }, /* 134 */-  {    20,      9,     12,     26,     32,     20,      0, }, /* 135 */-  {    20,      9,     12,     47,     32,     20,      0, }, /* 136 */-  {    20,      9,     12,     55,     32,     20,      0, }, /* 137 */-  {    20,      9,     12,     30,     32,     20,      0, }, /* 138 */-  {    20,      9,     12,     43,     32,     20,      0, }, /* 139 */-  {    20,      9,     12,     96,     32,     20,      0, }, /* 140 */-  {    20,      5,     12,      0,    -38,     20,      0, }, /* 141 */-  {    20,      5,     12,      0,    -37,     20,      0, }, /* 142 */-  {    20,      5,     12,      0,    -32,     20,      0, }, /* 143 */-  {    20,      5,     12,     34,    -32,     20,      0, }, /* 144 */-  {    20,      5,     12,     59,    -32,     20,      0, }, /* 145 */-  {    20,      5,     12,     38,    -32,     20,      0, }, /* 146 */-  {    20,      5,     12,     21,   -116,     20,      0, }, /* 147 */-  {    20,      5,     12,     51,    -32,     20,      0, }, /* 148 */-  {    20,      5,     12,     26,   -775,     20,      0, }, /* 149 */-  {    20,      5,     12,     47,    -32,     20,      0, }, /* 150 */-  {    20,      5,     12,     55,    -32,     20,      0, }, /* 151 */-  {    20,      5,     12,     30,      1,     20,      0, }, /* 152 */-  {    20,      5,     12,     30,    -32,     20,      0, }, /* 153 */-  {    20,      5,     12,     43,    -32,     20,      0, }, /* 154 */-  {    20,      5,     12,     96,    -32,     20,      0, }, /* 155 */-  {    20,      5,     12,      0,    -64,     20,      0, }, /* 156 */-  {    20,      5,     12,      0,    -63,     20,      0, }, /* 157 */-  {    20,      9,     12,      0,      8,     20,      0, }, /* 158 */-  {    20,      5,     12,     34,    -30,     20,      0, }, /* 159 */-  {    20,      5,     12,     38,    -25,     20,      0, }, /* 160 */-  {    20,      9,     12,      0,      0,     20,      0, }, /* 161 */-  {    20,      5,     12,     43,    -15,     20,      0, }, /* 162 */-  {    20,      5,     12,     47,    -22,     20,      0, }, /* 163 */-  {    20,      5,     12,      0,     -8,     20,      0, }, /* 164 */-  {    11,      9,     12,      0,      1,     11,      0, }, /* 165 */-  {    11,      5,     12,      0,     -1,     11,      0, }, /* 166 */-  {    20,      5,     12,     51,    -54,     20,      0, }, /* 167 */-  {    20,      5,     12,     55,    -48,     20,      0, }, /* 168 */-  {    20,      5,     12,      0,      7,     20,      0, }, /* 169 */-  {    20,      5,     12,      0,   -116,     20,      0, }, /* 170 */-  {    20,      9,     12,     38,    -60,     20,      0, }, /* 171 */-  {    20,      5,     12,     59,    -64,     20,      0, }, /* 172 */-  {    20,     25,     12,      0,      0,     20,      0, }, /* 173 */-  {    20,      9,     12,      0,     -7,     20,      0, }, /* 174 */-  {    20,      9,     12,      0,   -130,     20,      0, }, /* 175 */-  {    13,      9,     12,      0,     80,     13,      0, }, /* 176 */-  {    13,      9,     12,      0,     32,     13,      0, }, /* 177 */-  {    13,      9,     12,     63,     32,     13,      0, }, /* 178 */-  {    13,      9,     12,     67,     32,     13,      0, }, /* 179 */-  {    13,      9,     12,     71,     32,     13,      0, }, /* 180 */-  {    13,      9,     12,     75,     32,     13,      0, }, /* 181 */-  {    13,      9,     12,     79,     32,     13,      0, }, /* 182 */-  {    13,      9,     12,     84,     32,     13,      0, }, /* 183 */-  {    13,      5,     12,      0,    -32,     13,      0, }, /* 184 */-  {    13,      5,     12,     63,    -32,     13,      0, }, /* 185 */-  {    13,      5,     12,     67,    -32,     13,      0, }, /* 186 */-  {    13,      5,     12,     71,    -32,     13,      0, }, /* 187 */-  {    13,      5,     12,     75,    -32,     13,      0, }, /* 188 */-  {    13,      5,     12,     79,    -32,     13,      0, }, /* 189 */-  {    13,      5,     12,     84,    -32,     13,      0, }, /* 190 */-  {    13,      5,     12,      0,    -80,     13,      0, }, /* 191 */-  {    13,      9,     12,      0,      1,     13,      0, }, /* 192 */-  {    13,      5,     12,      0,     -1,     13,      0, }, /* 193 */-  {    13,      9,     12,     88,      1,     13,      0, }, /* 194 */-  {    13,      5,     12,     88,     -1,     13,      0, }, /* 195 */-  {    13,     26,     12,      0,      0,     13,      0, }, /* 196 */-  {    13,     12,      3,      0,      0,    -31,      0, }, /* 197 */-  {    13,     12,      3,      0,      0,    -25,      0, }, /* 198 */-  {    28,     12,      3,      0,      0,    -28,      0, }, /* 199 */-  {    13,     11,      3,      0,      0,     13,      0, }, /* 200 */-  {    13,      9,     12,      0,     15,     13,      0, }, /* 201 */-  {    13,      5,     12,      0,    -15,     13,      0, }, /* 202 */-  {     2,      9,     12,      0,     48,      2,      0, }, /* 203 */-  {     2,      6,     12,      0,      0,      2,      0, }, /* 204 */-  {     2,     21,     12,      0,      0,      2,      0, }, /* 205 */-  {     2,      5,     12,      0,      0,      2,      0, }, /* 206 */-  {     2,      5,     12,      0,    -48,      2,      0, }, /* 207 */-  {     2,     17,     12,      0,      0,      2,      0, }, /* 208 */-  {     2,     26,     12,      0,      0,      2,      0, }, /* 209 */-  {     2,     23,     12,      0,      0,      2,      0, }, /* 210 */-  {    26,     12,      3,      0,      0,     26,      0, }, /* 211 */-  {    26,     17,     12,      0,      0,     26,      0, }, /* 212 */-  {    26,     21,     12,      0,      0,     26,      0, }, /* 213 */-  {    26,      7,     12,      0,      0,     26,      0, }, /* 214 */-  {     1,      1,      4,      0,      0,      1,      0, }, /* 215 */-  {    10,      1,      4,      0,      0,     10,      0, }, /* 216 */-  {     1,     25,     12,      0,      0,      1,      0, }, /* 217 */-  {     1,     21,     12,      0,      0,      1,      0, }, /* 218 */-  {     1,     23,     12,      0,      0,      1,      0, }, /* 219 */-  {    10,     21,     12,      0,      0,   -127,      0, }, /* 220 */-  {     1,     26,     12,      0,      0,      1,      0, }, /* 221 */-  {     1,     12,      3,      0,      0,      1,      0, }, /* 222 */-  {     1,      1,      2,      0,      0,    -76,      0, }, /* 223 */-  {     1,      7,     12,      0,      0,      1,      0, }, /* 224 */-  {    10,      6,     12,      0,      0,   -153,      0, }, /* 225 */-  {    28,     12,      3,      0,      0,     -7,      0, }, /* 226 */-  {     1,     13,     12,      0,      0,    -80,      0, }, /* 227 */-  {     1,     21,     12,      0,      0,     -4,      0, }, /* 228 */-  {     1,      6,     12,      0,      0,      1,      0, }, /* 229 */-  {     1,     13,     12,      0,      0,      1,      0, }, /* 230 */-  {    50,     21,     12,      0,      0,     50,      0, }, /* 231 */-  {    50,      1,      4,      0,      0,     50,      0, }, /* 232 */-  {    50,      7,     12,      0,      0,     50,      0, }, /* 233 */-  {    50,     12,      3,      0,      0,     50,      0, }, /* 234 */-  {    56,      7,     12,      0,      0,     56,      0, }, /* 235 */-  {    56,     12,      3,      0,      0,     56,      0, }, /* 236 */-  {    64,     13,     12,      0,      0,     64,      0, }, /* 237 */-  {    64,      7,     12,      0,      0,     64,      0, }, /* 238 */-  {    64,     12,      3,      0,      0,     64,      0, }, /* 239 */-  {    64,      6,     12,      0,      0,     64,      0, }, /* 240 */-  {    64,     26,     12,      0,      0,     64,      0, }, /* 241 */-  {    64,     21,     12,      0,      0,     64,      0, }, /* 242 */-  {    64,     23,     12,      0,      0,     64,      0, }, /* 243 */-  {    90,      7,     12,      0,      0,     90,      0, }, /* 244 */-  {    90,     12,      3,      0,      0,     90,      0, }, /* 245 */-  {    90,      6,     12,      0,      0,     90,      0, }, /* 246 */-  {    90,     21,     12,      0,      0,     90,      0, }, /* 247 */-  {    95,      7,     12,      0,      0,     95,      0, }, /* 248 */-  {    95,     12,      3,      0,      0,     95,      0, }, /* 249 */-  {    95,     21,     12,      0,      0,     95,      0, }, /* 250 */-  {    15,     12,      3,      0,      0,     15,      0, }, /* 251 */-  {    15,     10,      5,      0,      0,     15,      0, }, /* 252 */-  {    15,      7,     12,      0,      0,     15,      0, }, /* 253 */-  {    28,     12,      3,      0,      0,   -196,      0, }, /* 254 */-  {    28,     12,      3,      0,      0,   -183,      0, }, /* 255 */-  {    10,     21,     12,      0,      0,   -239,      0, }, /* 256 */-  {    10,     21,     12,      0,      0,   -260,      0, }, /* 257 */-  {    15,     13,     12,      0,      0,   -122,      0, }, /* 258 */-  {    15,     21,     12,      0,      0,     15,      0, }, /* 259 */-  {    15,      6,     12,      0,      0,     15,      0, }, /* 260 */-  {     3,      7,     12,      0,      0,      3,      0, }, /* 261 */-  {     3,     12,      3,      0,      0,      3,      0, }, /* 262 */-  {     3,     10,      5,      0,      0,      3,      0, }, /* 263 */-  {     3,     10,      3,      0,      0,      3,      0, }, /* 264 */-  {     3,     13,     12,      0,      0,    -84,      0, }, /* 265 */-  {     3,     23,     12,      0,      0,      3,      0, }, /* 266 */-  {     3,     15,     12,      0,      0,      3,      0, }, /* 267 */-  {     3,     26,     12,      0,      0,      3,      0, }, /* 268 */-  {     3,     21,     12,      0,      0,      3,      0, }, /* 269 */-  {    22,     12,      3,      0,      0,     22,      0, }, /* 270 */-  {    22,     10,      5,      0,      0,     22,      0, }, /* 271 */-  {    22,      7,     12,      0,      0,     22,      0, }, /* 272 */-  {    22,     13,     12,      0,      0,    -58,      0, }, /* 273 */-  {    22,     21,     12,      0,      0,     22,      0, }, /* 274 */-  {    21,     12,      3,      0,      0,     21,      0, }, /* 275 */-  {    21,     10,      5,      0,      0,     21,      0, }, /* 276 */-  {    21,      7,     12,      0,      0,     21,      0, }, /* 277 */-  {    21,     13,     12,      0,      0,    -55,      0, }, /* 278 */-  {    21,     21,     12,      0,      0,     21,      0, }, /* 279 */-  {    21,     23,     12,      0,      0,     21,      0, }, /* 280 */-  {    44,     12,      3,      0,      0,     44,      0, }, /* 281 */-  {    44,     10,      5,      0,      0,     44,      0, }, /* 282 */-  {    44,      7,     12,      0,      0,     44,      0, }, /* 283 */-  {    44,     10,      3,      0,      0,     44,      0, }, /* 284 */-  {    44,     13,     12,      0,      0,     44,      0, }, /* 285 */-  {    44,     26,     12,      0,      0,     44,      0, }, /* 286 */-  {    44,     15,     12,      0,      0,     44,      0, }, /* 287 */-  {    54,     12,      3,      0,      0,     54,      0, }, /* 288 */-  {    54,      7,     12,      0,      0,     54,      0, }, /* 289 */-  {    54,     10,      3,      0,      0,     54,      0, }, /* 290 */-  {    54,     10,      5,      0,      0,     54,      0, }, /* 291 */-  {    54,     13,     12,      0,      0,    -52,      0, }, /* 292 */-  {    54,     15,     12,      0,      0,    -52,      0, }, /* 293 */-  {    54,     26,     12,      0,      0,    -52,      0, }, /* 294 */-  {    54,     26,     12,      0,      0,     54,      0, }, /* 295 */-  {    54,     23,     12,      0,      0,     54,      0, }, /* 296 */-  {    55,     12,      3,      0,      0,     55,      0, }, /* 297 */-  {    55,     10,      5,      0,      0,     55,      0, }, /* 298 */-  {    55,      7,     12,      0,      0,     55,      0, }, /* 299 */-  {    55,     13,     12,      0,      0,     55,      0, }, /* 300 */-  {    55,     21,     12,      0,      0,     55,      0, }, /* 301 */-  {    55,     15,     12,      0,      0,     55,      0, }, /* 302 */-  {    55,     26,     12,      0,      0,     55,      0, }, /* 303 */-  {    29,      7,     12,      0,      0,     29,      0, }, /* 304 */-  {    29,     12,      3,      0,      0,     29,      0, }, /* 305 */-  {    29,     10,      5,      0,      0,     29,      0, }, /* 306 */-  {    29,     21,     12,      0,      0,     29,      0, }, /* 307 */-  {    29,     10,      3,      0,      0,     29,      0, }, /* 308 */-  {    29,     13,     12,      0,      0,    -67,      0, }, /* 309 */-  {    37,     12,      3,      0,      0,     37,      0, }, /* 310 */-  {    37,     10,      5,      0,      0,     37,      0, }, /* 311 */-  {    37,      7,     12,      0,      0,     37,      0, }, /* 312 */-  {    37,     10,      3,      0,      0,     37,      0, }, /* 313 */-  {    37,      7,      4,      0,      0,     37,      0, }, /* 314 */-  {    37,     26,     12,      0,      0,     37,      0, }, /* 315 */-  {    37,     15,     12,      0,      0,     37,      0, }, /* 316 */-  {    37,     13,     12,      0,      0,     37,      0, }, /* 317 */-  {    48,     12,      3,      0,      0,     48,      0, }, /* 318 */-  {    48,     10,      5,      0,      0,     48,      0, }, /* 319 */-  {    48,      7,     12,      0,      0,     48,      0, }, /* 320 */-  {    48,     10,      3,      0,      0,     48,      0, }, /* 321 */-  {    48,     13,     12,      0,      0,     48,      0, }, /* 322 */-  {    48,     21,     12,      0,      0,     48,      0, }, /* 323 */-  {    57,      7,     12,      0,      0,     57,      0, }, /* 324 */-  {    57,     12,      3,      0,      0,     57,      0, }, /* 325 */-  {    57,      7,      5,      0,      0,     57,      0, }, /* 326 */-  {    57,      6,     12,      0,      0,     57,      0, }, /* 327 */-  {    57,     21,     12,      0,      0,     57,      0, }, /* 328 */-  {    57,     13,     12,      0,      0,     57,      0, }, /* 329 */-  {    33,      7,     12,      0,      0,     33,      0, }, /* 330 */-  {    33,     12,      3,      0,      0,     33,      0, }, /* 331 */-  {    33,      7,      5,      0,      0,     33,      0, }, /* 332 */-  {    33,      6,     12,      0,      0,     33,      0, }, /* 333 */-  {    33,     13,     12,      0,      0,     33,      0, }, /* 334 */-  {    58,      7,     12,      0,      0,     58,      0, }, /* 335 */-  {    58,     26,     12,      0,      0,     58,      0, }, /* 336 */-  {    58,     21,     12,      0,      0,     58,      0, }, /* 337 */-  {    58,     12,      3,      0,      0,     58,      0, }, /* 338 */-  {    58,     13,     12,      0,      0,     58,      0, }, /* 339 */-  {    58,     15,     12,      0,      0,     58,      0, }, /* 340 */-  {    58,     22,     12,      0,      0,     58,      0, }, /* 341 */-  {    58,     18,     12,      0,      0,     58,      0, }, /* 342 */-  {    58,     10,      5,      0,      0,     58,      0, }, /* 343 */-  {    39,      7,     12,      0,      0,     39,      0, }, /* 344 */-  {    39,     10,     12,      0,      0,     39,      0, }, /* 345 */-  {    39,     12,      3,      0,      0,     39,      0, }, /* 346 */-  {    39,     10,      5,      0,      0,     39,      0, }, /* 347 */-  {    39,     13,     12,      0,      0,    -88,      0, }, /* 348 */-  {    39,     21,     12,      0,      0,     39,      0, }, /* 349 */-  {    39,     13,     12,      0,      0,     39,      0, }, /* 350 */-  {    39,     26,     12,      0,      0,     39,      0, }, /* 351 */-  {    17,      9,     12,      0,   7264,     17,      0, }, /* 352 */-  {    17,      5,     12,      0,   3008,     17,      0, }, /* 353 */-  {    10,     21,     12,      0,      0,    -49,      0, }, /* 354 */-  {    17,      6,     12,      0,      0,     17,      0, }, /* 355 */-  {    24,      7,      6,      0,      0,     24,      0, }, /* 356 */-  {    24,      7,      7,      0,      0,     24,      0, }, /* 357 */-  {    24,      7,      8,      0,      0,     24,      0, }, /* 358 */-  {    16,      7,     12,      0,      0,     16,      0, }, /* 359 */-  {    16,     12,      3,      0,      0,     16,      0, }, /* 360 */-  {    16,     21,     12,      0,      0,     16,      0, }, /* 361 */-  {    16,     15,     12,      0,      0,     16,      0, }, /* 362 */-  {    16,     26,     12,      0,      0,     16,      0, }, /* 363 */-  {     9,      9,     12,      0,  38864,      9,      0, }, /* 364 */-  {     9,      9,     12,      0,      8,      9,      0, }, /* 365 */-  {     9,      5,     12,      0,     -8,      9,      0, }, /* 366 */-  {     8,     17,     12,      0,      0,      8,      0, }, /* 367 */-  {     8,      7,     12,      0,      0,      8,      0, }, /* 368 */-  {     8,     26,     12,      0,      0,      8,      0, }, /* 369 */-  {     8,     21,     12,      0,      0,      8,      0, }, /* 370 */-  {    41,     29,     12,      0,      0,     41,      0, }, /* 371 */-  {    41,      7,     12,      0,      0,     41,      0, }, /* 372 */-  {    41,     22,     12,      0,      0,     41,      0, }, /* 373 */-  {    41,     18,     12,      0,      0,     41,      0, }, /* 374 */-  {    46,      7,     12,      0,      0,     46,      0, }, /* 375 */-  {    46,     14,     12,      0,      0,     46,      0, }, /* 376 */-  {    51,      7,     12,      0,      0,     51,      0, }, /* 377 */-  {    51,     12,      3,      0,      0,     51,      0, }, /* 378 */-  {    25,      7,     12,      0,      0,     25,      0, }, /* 379 */-  {    25,     12,      3,      0,      0,     25,      0, }, /* 380 */-  {    10,     21,     12,      0,      0,   -117,      0, }, /* 381 */-  {     7,      7,     12,      0,      0,      7,      0, }, /* 382 */-  {     7,     12,      3,      0,      0,      7,      0, }, /* 383 */-  {    52,      7,     12,      0,      0,     52,      0, }, /* 384 */-  {    52,     12,      3,      0,      0,     52,      0, }, /* 385 */-  {    32,      7,     12,      0,      0,     32,      0, }, /* 386 */-  {    32,     12,      3,      0,      0,     32,      0, }, /* 387 */-  {    32,     10,      5,      0,      0,     32,      0, }, /* 388 */-  {    32,     21,     12,      0,      0,     32,      0, }, /* 389 */-  {    32,      6,     12,      0,      0,     32,      0, }, /* 390 */-  {    32,     23,     12,      0,      0,     32,      0, }, /* 391 */-  {    32,     13,     12,      0,      0,     32,      0, }, /* 392 */-  {    32,     15,     12,      0,      0,     32,      0, }, /* 393 */-  {    38,     21,     12,      0,      0,     38,      0, }, /* 394 */-  {    10,     21,     12,      0,      0,    -73,      0, }, /* 395 */-  {    38,     17,     12,      0,      0,     38,      0, }, /* 396 */-  {    38,     12,      3,      0,      0,     38,      0, }, /* 397 */-  {    38,      1,      2,      0,      0,     38,      0, }, /* 398 */-  {    38,     13,     12,      0,      0,     38,      0, }, /* 399 */-  {    38,      7,     12,      0,      0,     38,      0, }, /* 400 */-  {    38,      6,     12,      0,      0,     38,      0, }, /* 401 */-  {    35,      7,     12,      0,      0,     35,      0, }, /* 402 */-  {    35,     12,      3,      0,      0,     35,      0, }, /* 403 */-  {    35,     10,      5,      0,      0,     35,      0, }, /* 404 */-  {    35,     26,     12,      0,      0,     35,      0, }, /* 405 */-  {    35,     21,     12,      0,      0,     35,      0, }, /* 406 */-  {    35,     13,     12,      0,      0,     35,      0, }, /* 407 */-  {    53,      7,     12,      0,      0,     53,      0, }, /* 408 */-  {    40,      7,     12,      0,      0,     40,      0, }, /* 409 */-  {    40,     13,     12,      0,      0,     40,      0, }, /* 410 */-  {    40,     15,     12,      0,      0,     40,      0, }, /* 411 */-  {    40,     26,     12,      0,      0,     40,      0, }, /* 412 */-  {    32,     26,     12,      0,      0,     32,      0, }, /* 413 */-  {     6,      7,     12,      0,      0,      6,      0, }, /* 414 */-  {     6,     12,      3,      0,      0,      6,      0, }, /* 415 */-  {     6,     10,      5,      0,      0,      6,      0, }, /* 416 */-  {     6,     21,     12,      0,      0,      6,      0, }, /* 417 */-  {    91,      7,     12,      0,      0,     91,      0, }, /* 418 */-  {    91,     10,      5,      0,      0,     91,      0, }, /* 419 */-  {    91,     12,      3,      0,      0,     91,      0, }, /* 420 */-  {    91,     10,     12,      0,      0,     91,      0, }, /* 421 */-  {    91,     13,     12,      0,      0,     91,      0, }, /* 422 */-  {    91,     21,     12,      0,      0,     91,      0, }, /* 423 */-  {    91,      6,     12,      0,      0,     91,      0, }, /* 424 */-  {    28,     11,      3,      0,      0,     28,      0, }, /* 425 */-  {    62,     12,      3,      0,      0,     62,      0, }, /* 426 */-  {    62,     10,      5,      0,      0,     62,      0, }, /* 427 */-  {    62,      7,     12,      0,      0,     62,      0, }, /* 428 */-  {    62,     10,      3,      0,      0,     62,      0, }, /* 429 */-  {    62,     13,     12,      0,      0,     62,      0, }, /* 430 */-  {    62,     21,     12,      0,      0,     62,      0, }, /* 431 */-  {    62,     26,     12,      0,      0,     62,      0, }, /* 432 */-  {    76,     12,      3,      0,      0,     76,      0, }, /* 433 */-  {    76,     10,      5,      0,      0,     76,      0, }, /* 434 */-  {    76,      7,     12,      0,      0,     76,      0, }, /* 435 */-  {    76,     13,     12,      0,      0,     76,      0, }, /* 436 */-  {    93,      7,     12,      0,      0,     93,      0, }, /* 437 */-  {    93,     12,      3,      0,      0,     93,      0, }, /* 438 */-  {    93,     10,      5,      0,      0,     93,      0, }, /* 439 */-  {    93,     21,     12,      0,      0,     93,      0, }, /* 440 */-  {    70,      7,     12,      0,      0,     70,      0, }, /* 441 */-  {    70,     10,      5,      0,      0,     70,      0, }, /* 442 */-  {    70,     12,      3,      0,      0,     70,      0, }, /* 443 */-  {    70,     21,     12,      0,      0,     70,      0, }, /* 444 */-  {    70,     13,     12,      0,      0,     70,      0, }, /* 445 */-  {    73,     13,     12,      0,      0,     73,      0, }, /* 446 */-  {    73,      7,     12,      0,      0,     73,      0, }, /* 447 */-  {    73,      6,     12,      0,      0,     73,      0, }, /* 448 */-  {    73,     21,     12,      0,      0,     73,      0, }, /* 449 */-  {    13,      5,     12,     63,  -6222,     13,      0, }, /* 450 */-  {    13,      5,     12,     67,  -6221,     13,      0, }, /* 451 */-  {    13,      5,     12,     71,  -6212,     13,      0, }, /* 452 */-  {    13,      5,     12,     75,  -6210,     13,      0, }, /* 453 */-  {    13,      5,     12,     79,  -6210,     13,      0, }, /* 454 */-  {    13,      5,     12,     79,  -6211,     13,      0, }, /* 455 */-  {    13,      5,     12,     84,  -6204,     13,      0, }, /* 456 */-  {    13,      5,     12,     88,  -6180,     13,      0, }, /* 457 */-  {    13,      5,     12,    108,  35267,     13,      0, }, /* 458 */-  {    17,      9,     12,      0,  -3008,     17,      0, }, /* 459 */-  {    76,     21,     12,      0,      0,     76,      0, }, /* 460 */-  {    28,     12,      3,      0,      0,   -112,      0, }, /* 461 */-  {    28,     12,      3,      0,      0,     15,      0, }, /* 462 */-  {    10,     21,     12,      0,      0,    -37,      0, }, /* 463 */-  {    28,     12,      3,      0,      0,    -13,      0, }, /* 464 */-  {    28,     12,      3,      0,      0,    -43,      0, }, /* 465 */-  {    28,     12,      3,      0,      0,   -146,      0, }, /* 466 */-  {    10,     10,      5,      0,      0,    -13,      0, }, /* 467 */-  {    10,      7,     12,      0,      0,    -40,      0, }, /* 468 */-  {    10,      7,     12,      0,      0,    -13,      0, }, /* 469 */-  {    10,      7,     12,      0,      0,     15,      0, }, /* 470 */-  {    10,      7,     12,      0,      0,   -162,      0, }, /* 471 */-  {    10,      7,     12,      0,      0,    -37,      0, }, /* 472 */-  {    28,     12,      3,      0,      0,    -96,      0, }, /* 473 */-  {    10,     10,      5,      0,      0,      3,      0, }, /* 474 */-  {    28,     12,      3,      0,      0,    -37,      0, }, /* 475 */-  {    10,      7,     12,      0,      0,    150,      0, }, /* 476 */-  {    13,      5,     12,      0,      0,     13,      0, }, /* 477 */-  {    13,      6,     12,      0,      0,     13,      0, }, /* 478 */-  {    34,      5,     12,      0,  35332,     34,      0, }, /* 479 */-  {    34,      5,     12,      0,   3814,     34,      0, }, /* 480 */-  {    34,      5,     12,      0,  35384,     34,      0, }, /* 481 */-  {    28,     12,      3,      0,      0,    -34,      0, }, /* 482 */-  {    34,      9,     12,     92,      1,     34,      0, }, /* 483 */-  {    34,      5,     12,     92,     -1,     34,      0, }, /* 484 */-  {    34,      5,     12,     92,    -58,     34,      0, }, /* 485 */-  {    34,      9,     12,      0,  -7615,     34,      0, }, /* 486 */-  {    20,      5,     12,      0,      8,     20,      0, }, /* 487 */-  {    20,      9,     12,      0,     -8,     20,      0, }, /* 488 */-  {    20,      5,     12,      0,     74,     20,      0, }, /* 489 */-  {    20,      5,     12,      0,     86,     20,      0, }, /* 490 */-  {    20,      5,     12,      0,    100,     20,      0, }, /* 491 */-  {    20,      5,     12,      0,    128,     20,      0, }, /* 492 */-  {    20,      5,     12,      0,    112,     20,      0, }, /* 493 */-  {    20,      5,     12,      0,    126,     20,      0, }, /* 494 */-  {    20,      8,     12,      0,     -8,     20,      0, }, /* 495 */-  {    20,      5,     12,      0,      9,     20,      0, }, /* 496 */-  {    20,      9,     12,      0,    -74,     20,      0, }, /* 497 */-  {    20,      8,     12,      0,     -9,     20,      0, }, /* 498 */-  {    20,      5,     12,     21,  -7173,     20,      0, }, /* 499 */-  {    20,      9,     12,      0,    -86,     20,      0, }, /* 500 */-  {    20,      9,     12,      0,   -100,     20,      0, }, /* 501 */-  {    20,      9,     12,      0,   -112,     20,      0, }, /* 502 */-  {    20,      9,     12,      0,   -128,     20,      0, }, /* 503 */-  {    20,      9,     12,      0,   -126,     20,      0, }, /* 504 */-  {    28,      1,      3,      0,      0,     28,      0, }, /* 505 */-  {    28,      1,     13,      0,      0,     28,      0, }, /* 506 */-  {    10,     27,      2,      0,      0,     10,      0, }, /* 507 */-  {    10,     28,      2,      0,      0,     10,      0, }, /* 508 */-  {    10,     29,     12,      0,      0,    -70,      0, }, /* 509 */-  {    10,     21,     14,      0,      0,     10,      0, }, /* 510 */-  {     0,      2,      2,      0,      0,      0,      0, }, /* 511 */-  {    28,     12,      3,      0,      0,   -100,      0, }, /* 512 */-  {    10,      9,     12,      0,      0,     10,      0, }, /* 513 */-  {    10,      5,     12,      0,      0,     10,      0, }, /* 514 */-  {    20,      9,     12,     96,  -7517,     20,      0, }, /* 515 */-  {    34,      9,     12,    100,  -8383,     34,      0, }, /* 516 */-  {    34,      9,     12,    104,  -8262,     34,      0, }, /* 517 */-  {    34,      9,     12,      0,     28,     34,      0, }, /* 518 */-  {    10,      7,     12,      0,      0,     10,      0, }, /* 519 */-  {    10,      5,     14,      0,      0,     10,      0, }, /* 520 */-  {    34,      5,     12,      0,    -28,     34,      0, }, /* 521 */-  {    34,     14,     12,      0,     16,     34,      0, }, /* 522 */-  {    34,     14,     12,      0,    -16,     34,      0, }, /* 523 */-  {    34,     14,     12,      0,      0,     34,      0, }, /* 524 */-  {    10,     25,     14,      0,      0,     10,      0, }, /* 525 */-  {    10,     26,     12,      0,     26,     10,      0, }, /* 526 */-  {    10,     26,     14,      0,     26,     10,      0, }, /* 527 */-  {    10,     26,     12,      0,    -26,     10,      0, }, /* 528 */-  {     5,     26,     12,      0,      0,      5,      0, }, /* 529 */-  {    18,      9,     12,      0,     48,     18,      0, }, /* 530 */-  {    18,      5,     12,      0,    -48,     18,      0, }, /* 531 */-  {    34,      9,     12,      0, -10743,     34,      0, }, /* 532 */-  {    34,      9,     12,      0,  -3814,     34,      0, }, /* 533 */-  {    34,      9,     12,      0, -10727,     34,      0, }, /* 534 */-  {    34,      5,     12,      0, -10795,     34,      0, }, /* 535 */-  {    34,      5,     12,      0, -10792,     34,      0, }, /* 536 */-  {    34,      9,     12,      0, -10780,     34,      0, }, /* 537 */-  {    34,      9,     12,      0, -10749,     34,      0, }, /* 538 */-  {    34,      9,     12,      0, -10783,     34,      0, }, /* 539 */-  {    34,      9,     12,      0, -10782,     34,      0, }, /* 540 */-  {    34,      9,     12,      0, -10815,     34,      0, }, /* 541 */-  {    11,      5,     12,      0,      0,     11,      0, }, /* 542 */-  {    11,     26,     12,      0,      0,     11,      0, }, /* 543 */-  {    11,     12,      3,      0,      0,     11,      0, }, /* 544 */-  {    11,     21,     12,      0,      0,     11,      0, }, /* 545 */-  {    11,     15,     12,      0,      0,     11,      0, }, /* 546 */-  {    17,      5,     12,      0,  -7264,     17,      0, }, /* 547 */-  {    59,      7,     12,      0,      0,     59,      0, }, /* 548 */-  {    59,      6,     12,      0,      0,     59,      0, }, /* 549 */-  {    59,     21,     12,      0,      0,     59,      0, }, /* 550 */-  {    59,     12,      3,      0,      0,     59,      0, }, /* 551 */-  {    13,     12,      3,      0,      0,     13,      0, }, /* 552 */-  {    10,     21,     12,      0,      0,    -25,      0, }, /* 553 */-  {    23,     26,     12,      0,      0,     23,      0, }, /* 554 */-  {    10,     21,     12,      0,      0,   -139,      0, }, /* 555 */-  {    10,     21,     12,      0,      0,   -133,      0, }, /* 556 */-  {    23,      6,     12,      0,      0,     23,      0, }, /* 557 */-  {    10,      7,     12,      0,      0,     23,      0, }, /* 558 */-  {    23,     14,     12,      0,      0,     23,      0, }, /* 559 */-  {    10,     22,     12,      0,      0,   -139,      0, }, /* 560 */-  {    10,     18,     12,      0,      0,   -139,      0, }, /* 561 */-  {    10,     26,     12,      0,      0,   -133,      0, }, /* 562 */-  {    10,     17,     12,      0,      0,   -133,      0, }, /* 563 */-  {    10,     22,     12,      0,      0,   -133,      0, }, /* 564 */-  {    10,     18,     12,      0,      0,   -133,      0, }, /* 565 */-  {    28,     12,      3,      0,      0,    -16,      0, }, /* 566 */-  {    24,     10,      3,      0,      0,     24,      0, }, /* 567 */-  {    10,     17,     14,      0,      0,   -133,      0, }, /* 568 */-  {    10,      6,     12,      0,      0,    -64,      0, }, /* 569 */-  {    10,      7,     12,      0,      0,   -104,      0, }, /* 570 */-  {    10,     21,     14,      0,      0,   -104,      0, }, /* 571 */-  {    10,     26,     12,      0,      0,     23,      0, }, /* 572 */-  {    27,      7,     12,      0,      0,     27,      0, }, /* 573 */-  {    28,     12,      3,      0,      0,    -64,      0, }, /* 574 */-  {    10,     24,     12,      0,      0,    -64,      0, }, /* 575 */-  {    27,      6,     12,      0,      0,     27,      0, }, /* 576 */-  {    10,     17,     12,      0,      0,    -64,      0, }, /* 577 */-  {    30,      7,     12,      0,      0,     30,      0, }, /* 578 */-  {    30,      6,     12,      0,      0,     30,      0, }, /* 579 */-  {     4,      7,     12,      0,      0,      4,      0, }, /* 580 */-  {    24,      7,     12,      0,      0,     24,      0, }, /* 581 */-  {    10,     15,     12,      0,      0,     23,      0, }, /* 582 */-  {    24,     26,     12,      0,      0,     24,      0, }, /* 583 */-  {    10,     26,     14,      0,      0,     23,      0, }, /* 584 */-  {    30,     26,     12,      0,      0,     30,      0, }, /* 585 */-  {    23,      7,     12,      0,      0,     23,      0, }, /* 586 */-  {    61,      7,     12,      0,      0,     61,      0, }, /* 587 */-  {    61,      6,     12,      0,      0,     61,      0, }, /* 588 */-  {    61,     26,     12,      0,      0,     61,      0, }, /* 589 */-  {    86,      7,     12,      0,      0,     86,      0, }, /* 590 */-  {    86,      6,     12,      0,      0,     86,      0, }, /* 591 */-  {    86,     21,     12,      0,      0,     86,      0, }, /* 592 */-  {    77,      7,     12,      0,      0,     77,      0, }, /* 593 */-  {    77,      6,     12,      0,      0,     77,      0, }, /* 594 */-  {    77,     21,     12,      0,      0,     77,      0, }, /* 595 */-  {    77,     13,     12,      0,      0,     77,      0, }, /* 596 */-  {    13,      9,     12,    108,      1,     13,      0, }, /* 597 */-  {    13,      5,     12,    108, -35267,     13,      0, }, /* 598 */-  {    13,      7,     12,      0,      0,     13,      0, }, /* 599 */-  {    13,     21,     12,      0,      0,     13,      0, }, /* 600 */-  {    79,      7,     12,      0,      0,     79,      0, }, /* 601 */-  {    79,     14,     12,      0,      0,     79,      0, }, /* 602 */-  {    79,     12,      3,      0,      0,     79,      0, }, /* 603 */-  {    79,     21,     12,      0,      0,     79,      0, }, /* 604 */-  {    10,     24,     12,      0,      0,    -61,      0, }, /* 605 */-  {    34,      9,     12,      0, -35332,     34,      0, }, /* 606 */-  {    34,      9,     12,      0, -42280,     34,      0, }, /* 607 */-  {    34,      5,     12,      0,     48,     34,      0, }, /* 608 */-  {    34,      9,     12,      0, -42308,     34,      0, }, /* 609 */-  {    34,      9,     12,      0, -42319,     34,      0, }, /* 610 */-  {    34,      9,     12,      0, -42315,     34,      0, }, /* 611 */-  {    34,      9,     12,      0, -42305,     34,      0, }, /* 612 */-  {    34,      9,     12,      0, -42258,     34,      0, }, /* 613 */-  {    34,      9,     12,      0, -42282,     34,      0, }, /* 614 */-  {    34,      9,     12,      0, -42261,     34,      0, }, /* 615 */-  {    34,      9,     12,      0,    928,     34,      0, }, /* 616 */-  {    34,      9,     12,      0,    -48,     34,      0, }, /* 617 */-  {    34,      9,     12,      0, -42307,     34,      0, }, /* 618 */-  {    34,      9,     12,      0, -35384,     34,      0, }, /* 619 */-  {    49,      7,     12,      0,      0,     49,      0, }, /* 620 */-  {    49,     12,      3,      0,      0,     49,      0, }, /* 621 */-  {    49,     10,      5,      0,      0,     49,      0, }, /* 622 */-  {    49,     26,     12,      0,      0,     49,      0, }, /* 623 */-  {    10,     15,     12,      0,      0,   -224,      0, }, /* 624 */-  {    10,     15,     12,      0,      0,   -210,      0, }, /* 625 */-  {    10,     26,     12,      0,      0,   -171,      0, }, /* 626 */-  {    10,     23,     12,      0,      0,   -171,      0, }, /* 627 */-  {    65,      7,     12,      0,      0,     65,      0, }, /* 628 */-  {    65,     21,     12,      0,      0,     65,      0, }, /* 629 */-  {    75,     10,      5,      0,      0,     75,      0, }, /* 630 */-  {    75,      7,     12,      0,      0,     75,      0, }, /* 631 */-  {    75,     12,      3,      0,      0,     75,      0, }, /* 632 */-  {    75,     21,     12,      0,      0,     75,      0, }, /* 633 */-  {    75,     13,     12,      0,      0,     75,      0, }, /* 634 */-  {    15,     12,      3,      0,      0,    -13,      0, }, /* 635 */-  {    15,      7,     12,      0,      0,    -46,      0, }, /* 636 */-  {    69,     13,     12,      0,      0,     69,      0, }, /* 637 */-  {    69,      7,     12,      0,      0,     69,      0, }, /* 638 */-  {    69,     12,      3,      0,      0,     69,      0, }, /* 639 */-  {    10,     21,     12,      0,      0,   -108,      0, }, /* 640 */-  {    69,     21,     12,      0,      0,     69,      0, }, /* 641 */-  {    74,      7,     12,      0,      0,     74,      0, }, /* 642 */-  {    74,     12,      3,      0,      0,     74,      0, }, /* 643 */-  {    74,     10,      5,      0,      0,     74,      0, }, /* 644 */-  {    74,     21,     12,      0,      0,     74,      0, }, /* 645 */-  {    84,     12,      3,      0,      0,     84,      0, }, /* 646 */-  {    84,     10,      5,      0,      0,     84,      0, }, /* 647 */-  {    84,      7,     12,      0,      0,     84,      0, }, /* 648 */-  {    84,     21,     12,      0,      0,     84,      0, }, /* 649 */-  {    10,      6,     12,      0,      0,    -19,      0, }, /* 650 */-  {    84,     13,     12,      0,      0,     84,      0, }, /* 651 */-  {    39,      6,     12,      0,      0,     39,      0, }, /* 652 */-  {    68,      7,     12,      0,      0,     68,      0, }, /* 653 */-  {    68,     12,      3,      0,      0,     68,      0, }, /* 654 */-  {    68,     10,      5,      0,      0,     68,      0, }, /* 655 */-  {    68,     13,     12,      0,      0,     68,      0, }, /* 656 */-  {    68,     21,     12,      0,      0,     68,      0, }, /* 657 */-  {    92,      7,     12,      0,      0,     92,      0, }, /* 658 */-  {    92,     12,      3,      0,      0,     92,      0, }, /* 659 */-  {    92,      6,     12,      0,      0,     92,      0, }, /* 660 */-  {    92,     21,     12,      0,      0,     92,      0, }, /* 661 */-  {    87,      7,     12,      0,      0,     87,      0, }, /* 662 */-  {    87,     10,      5,      0,      0,     87,      0, }, /* 663 */-  {    87,     12,      3,      0,      0,     87,      0, }, /* 664 */-  {    87,     21,     12,      0,      0,     87,      0, }, /* 665 */-  {    87,      6,     12,      0,      0,     87,      0, }, /* 666 */-  {    34,      5,     12,      0,   -928,     34,      0, }, /* 667 */-  {     9,      5,     12,      0, -38864,      9,      0, }, /* 668 */-  {    87,     13,     12,      0,      0,     87,      0, }, /* 669 */-  {    24,      7,      9,      0,      0,     24,      0, }, /* 670 */-  {    24,      7,     10,      0,      0,     24,      0, }, /* 671 */-  {     0,      4,     12,      0,      0,      0,      0, }, /* 672 */-  {     0,      3,     12,      0,      0,      0,      0, }, /* 673 */-  {    26,     25,     12,      0,      0,     26,      0, }, /* 674 */-  {     1,     24,     12,      0,      0,      1,      0, }, /* 675 */-  {     1,      7,     12,      0,      0,    -10,      0, }, /* 676 */-  {     1,     26,     12,      0,      0,    -10,      0, }, /* 677 */-  {    10,      6,      3,      0,      0,    -64,      0, }, /* 678 */-  {    36,      7,     12,      0,      0,     36,      0, }, /* 679 */-  {    10,     21,     12,      0,      0,    -22,      0, }, /* 680 */-  {    10,     15,     12,      0,      0,    -92,      0, }, /* 681 */-  {    10,     26,     12,      0,      0,    -22,      0, }, /* 682 */-  {    20,     14,     12,      0,      0,     20,      0, }, /* 683 */-  {    20,     15,     12,      0,      0,     20,      0, }, /* 684 */-  {    20,     26,     12,      0,      0,     20,      0, }, /* 685 */-  {    71,      7,     12,      0,      0,     71,      0, }, /* 686 */-  {    67,      7,     12,      0,      0,     67,      0, }, /* 687 */-  {    28,     12,      3,      0,      0,     -1,      0, }, /* 688 */-  {    10,     15,     12,      0,      0,     -1,      0, }, /* 689 */-  {    42,      7,     12,      0,      0,     42,      0, }, /* 690 */-  {    42,     15,     12,      0,      0,     42,      0, }, /* 691 */-  {    19,      7,     12,      0,      0,     19,      0, }, /* 692 */-  {    19,     14,     12,      0,      0,     19,      0, }, /* 693 */-  {   118,      7,     12,      0,      0,    118,      0, }, /* 694 */-  {   118,     12,      3,      0,      0,    118,      0, }, /* 695 */-  {    60,      7,     12,      0,      0,     60,      0, }, /* 696 */-  {    60,     21,     12,      0,      0,     60,      0, }, /* 697 */-  {    43,      7,     12,      0,      0,     43,      0, }, /* 698 */-  {    43,     21,     12,      0,      0,     43,      0, }, /* 699 */-  {    43,     14,     12,      0,      0,     43,      0, }, /* 700 */-  {    14,      9,     12,      0,     40,     14,      0, }, /* 701 */-  {    14,      5,     12,      0,    -40,     14,      0, }, /* 702 */-  {    47,      7,     12,      0,      0,     47,      0, }, /* 703 */-  {    45,      7,     12,      0,      0,     45,      0, }, /* 704 */-  {    45,     13,     12,      0,      0,     45,      0, }, /* 705 */-  {   136,      9,     12,      0,     40,    136,      0, }, /* 706 */-  {   136,      5,     12,      0,    -40,    136,      0, }, /* 707 */-  {   106,      7,     12,      0,      0,    106,      0, }, /* 708 */-  {   104,      7,     12,      0,      0,    104,      0, }, /* 709 */-  {   104,     21,     12,      0,      0,    104,      0, }, /* 710 */-  {   110,      7,     12,      0,      0,    110,      0, }, /* 711 */-  {    12,      7,     12,      0,      0,     12,      0, }, /* 712 */-  {    81,      7,     12,      0,      0,     81,      0, }, /* 713 */-  {    81,     21,     12,      0,      0,     81,      0, }, /* 714 */-  {    81,     15,     12,      0,      0,     81,      0, }, /* 715 */-  {   120,      7,     12,      0,      0,    120,      0, }, /* 716 */-  {   120,     26,     12,      0,      0,    120,      0, }, /* 717 */-  {   120,     15,     12,      0,      0,    120,      0, }, /* 718 */-  {   116,      7,     12,      0,      0,    116,      0, }, /* 719 */-  {   116,     15,     12,      0,      0,    116,      0, }, /* 720 */-  {   128,      7,     12,      0,      0,    128,      0, }, /* 721 */-  {   128,     15,     12,      0,      0,    128,      0, }, /* 722 */-  {    66,      7,     12,      0,      0,     66,      0, }, /* 723 */-  {    66,     15,     12,      0,      0,     66,      0, }, /* 724 */-  {    66,     21,     12,      0,      0,     66,      0, }, /* 725 */-  {    72,      7,     12,      0,      0,     72,      0, }, /* 726 */-  {    72,     21,     12,      0,      0,     72,      0, }, /* 727 */-  {    98,      7,     12,      0,      0,     98,      0, }, /* 728 */-  {    97,      7,     12,      0,      0,     97,      0, }, /* 729 */-  {    97,     15,     12,      0,      0,     97,      0, }, /* 730 */-  {    31,      7,     12,      0,      0,     31,      0, }, /* 731 */-  {    31,     12,      3,      0,      0,     31,      0, }, /* 732 */-  {    31,     15,     12,      0,      0,     31,      0, }, /* 733 */-  {    31,     21,     12,      0,      0,     31,      0, }, /* 734 */-  {    88,      7,     12,      0,      0,     88,      0, }, /* 735 */-  {    88,     15,     12,      0,      0,     88,      0, }, /* 736 */-  {    88,     21,     12,      0,      0,     88,      0, }, /* 737 */-  {   117,      7,     12,      0,      0,    117,      0, }, /* 738 */-  {   117,     15,     12,      0,      0,    117,      0, }, /* 739 */-  {   112,      7,     12,      0,      0,    112,      0, }, /* 740 */-  {   112,     26,     12,      0,      0,    112,      0, }, /* 741 */-  {   112,     12,      3,      0,      0,    112,      0, }, /* 742 */-  {   112,     15,     12,      0,      0,    112,      0, }, /* 743 */-  {   112,     21,     12,      0,      0,    112,      0, }, /* 744 */-  {    78,      7,     12,      0,      0,     78,      0, }, /* 745 */-  {    78,     21,     12,      0,      0,     78,      0, }, /* 746 */-  {    83,      7,     12,      0,      0,     83,      0, }, /* 747 */-  {    83,     15,     12,      0,      0,     83,      0, }, /* 748 */-  {    82,      7,     12,      0,      0,     82,      0, }, /* 749 */-  {    82,     15,     12,      0,      0,     82,      0, }, /* 750 */-  {   121,      7,     12,      0,      0,    121,      0, }, /* 751 */-  {   121,     21,     12,      0,      0,    121,      0, }, /* 752 */-  {   121,     15,     12,      0,      0,    121,      0, }, /* 753 */-  {    89,      7,     12,      0,      0,     89,      0, }, /* 754 */-  {   130,      9,     12,      0,     64,    130,      0, }, /* 755 */-  {   130,      5,     12,      0,    -64,    130,      0, }, /* 756 */-  {   130,     15,     12,      0,      0,    130,      0, }, /* 757 */-  {   144,      7,     12,      0,      0,    144,      0, }, /* 758 */-  {   144,     12,      3,      0,      0,    144,      0, }, /* 759 */-  {   144,     13,     12,      0,      0,    144,      0, }, /* 760 */-  {     1,     15,     12,      0,      0,      1,      0, }, /* 761 */-  {   156,      7,     12,      0,      0,    156,      0, }, /* 762 */-  {   156,     12,      3,      0,      0,    156,      0, }, /* 763 */-  {   156,     17,     12,      0,      0,    156,      0, }, /* 764 */-  {   147,      7,     12,      0,      0,    147,      0, }, /* 765 */-  {   147,     15,     12,      0,      0,    147,      0, }, /* 766 */-  {   148,      7,     12,      0,      0,    148,      0, }, /* 767 */-  {   148,     12,      3,      0,      0,    148,      0, }, /* 768 */-  {   148,     15,     12,      0,      0,    148,      0, }, /* 769 */-  {   148,     21,     12,      0,      0,    148,      0, }, /* 770 */-  {   153,      7,     12,      0,      0,    153,      0, }, /* 771 */-  {   153,     15,     12,      0,      0,    153,      0, }, /* 772 */-  {   149,      7,     12,      0,      0,    149,      0, }, /* 773 */-  {    94,     10,      5,      0,      0,     94,      0, }, /* 774 */-  {    94,     12,      3,      0,      0,     94,      0, }, /* 775 */-  {    94,      7,     12,      0,      0,     94,      0, }, /* 776 */-  {    94,     21,     12,      0,      0,     94,      0, }, /* 777 */-  {    94,     15,     12,      0,      0,     94,      0, }, /* 778 */-  {    94,     13,     12,      0,      0,     94,      0, }, /* 779 */-  {    85,     12,      3,      0,      0,     85,      0, }, /* 780 */-  {    85,     10,      5,      0,      0,     85,      0, }, /* 781 */-  {    85,      7,     12,      0,      0,     85,      0, }, /* 782 */-  {    85,     21,     12,      0,      0,     85,      0, }, /* 783 */-  {    85,      1,      4,      0,      0,     85,      0, }, /* 784 */-  {   101,      7,     12,      0,      0,    101,      0, }, /* 785 */-  {   101,     13,     12,      0,      0,    101,      0, }, /* 786 */-  {    96,     12,      3,      0,      0,     96,      0, }, /* 787 */-  {    96,      7,     12,      0,      0,     96,      0, }, /* 788 */-  {    96,     10,      5,      0,      0,     96,      0, }, /* 789 */-  {    96,     13,     12,      0,      0,     96,      0, }, /* 790 */-  {    96,     21,     12,      0,      0,     96,      0, }, /* 791 */-  {   111,      7,     12,      0,      0,    111,      0, }, /* 792 */-  {   111,     12,      3,      0,      0,    111,      0, }, /* 793 */-  {   111,     21,     12,      0,      0,    111,      0, }, /* 794 */-  {   100,     12,      3,      0,      0,    100,      0, }, /* 795 */-  {   100,     10,      5,      0,      0,    100,      0, }, /* 796 */-  {   100,      7,     12,      0,      0,    100,      0, }, /* 797 */-  {   100,      7,      4,      0,      0,    100,      0, }, /* 798 */-  {   100,     21,     12,      0,      0,    100,      0, }, /* 799 */-  {   100,     13,     12,      0,      0,    100,      0, }, /* 800 */-  {    48,     15,     12,      0,      0,     48,      0, }, /* 801 */-  {   108,      7,     12,      0,      0,    108,      0, }, /* 802 */-  {   108,     10,      5,      0,      0,    108,      0, }, /* 803 */-  {   108,     12,      3,      0,      0,    108,      0, }, /* 804 */-  {   108,     21,     12,      0,      0,    108,      0, }, /* 805 */-  {   129,      7,     12,      0,      0,    129,      0, }, /* 806 */-  {   129,     21,     12,      0,      0,    129,      0, }, /* 807 */-  {   109,      7,     12,      0,      0,    109,      0, }, /* 808 */-  {   109,     12,      3,      0,      0,    109,      0, }, /* 809 */-  {   109,     10,      5,      0,      0,    109,      0, }, /* 810 */-  {   109,     13,     12,      0,      0,    109,      0, }, /* 811 */-  {   107,     12,      3,      0,      0,    107,      0, }, /* 812 */-  {   107,     12,      3,      0,      0,    -52,      0, }, /* 813 */-  {   107,     10,      5,      0,      0,    107,      0, }, /* 814 */-  {   107,     10,      5,      0,      0,    -52,      0, }, /* 815 */-  {   107,      7,     12,      0,      0,    107,      0, }, /* 816 */-  {    28,     12,      3,      0,      0,    -52,      0, }, /* 817 */-  {   107,     10,      3,      0,      0,    107,      0, }, /* 818 */-  {   135,      7,     12,      0,      0,    135,      0, }, /* 819 */-  {   135,     10,      5,      0,      0,    135,      0, }, /* 820 */-  {   135,     12,      3,      0,      0,    135,      0, }, /* 821 */-  {   135,     21,     12,      0,      0,    135,      0, }, /* 822 */-  {   135,     13,     12,      0,      0,    135,      0, }, /* 823 */-  {   124,      7,     12,      0,      0,    124,      0, }, /* 824 */-  {   124,     10,      3,      0,      0,    124,      0, }, /* 825 */-  {   124,     10,      5,      0,      0,    124,      0, }, /* 826 */-  {   124,     12,      3,      0,      0,    124,      0, }, /* 827 */-  {   124,     21,     12,      0,      0,    124,      0, }, /* 828 */-  {   124,     13,     12,      0,      0,    124,      0, }, /* 829 */-  {   123,      7,     12,      0,      0,    123,      0, }, /* 830 */-  {   123,     10,      3,      0,      0,    123,      0, }, /* 831 */-  {   123,     10,      5,      0,      0,    123,      0, }, /* 832 */-  {   123,     12,      3,      0,      0,    123,      0, }, /* 833 */-  {   123,     21,     12,      0,      0,    123,      0, }, /* 834 */-  {   114,      7,     12,      0,      0,    114,      0, }, /* 835 */-  {   114,     10,      5,      0,      0,    114,      0, }, /* 836 */-  {   114,     12,      3,      0,      0,    114,      0, }, /* 837 */-  {   114,     21,     12,      0,      0,    114,      0, }, /* 838 */-  {   114,     13,     12,      0,      0,    114,      0, }, /* 839 */-  {   102,      7,     12,      0,      0,    102,      0, }, /* 840 */-  {   102,     12,      3,      0,      0,    102,      0, }, /* 841 */-  {   102,     10,      5,      0,      0,    102,      0, }, /* 842 */-  {   102,     13,     12,      0,      0,    102,      0, }, /* 843 */-  {   126,      7,     12,      0,      0,    126,      0, }, /* 844 */-  {   126,     12,      3,      0,      0,    126,      0, }, /* 845 */-  {   126,     10,      5,      0,      0,    126,      0, }, /* 846 */-  {   126,     13,     12,      0,      0,    126,      0, }, /* 847 */-  {   126,     15,     12,      0,      0,    126,      0, }, /* 848 */-  {   126,     21,     12,      0,      0,    126,      0, }, /* 849 */-  {   126,     26,     12,      0,      0,    126,      0, }, /* 850 */-  {   142,      7,     12,      0,      0,    142,      0, }, /* 851 */-  {   142,     10,      5,      0,      0,    142,      0, }, /* 852 */-  {   142,     12,      3,      0,      0,    142,      0, }, /* 853 */-  {   142,     21,     12,      0,      0,    142,      0, }, /* 854 */-  {   125,      9,     12,      0,     32,    125,      0, }, /* 855 */-  {   125,      5,     12,      0,    -32,    125,      0, }, /* 856 */-  {   125,     13,     12,      0,      0,    125,      0, }, /* 857 */-  {   125,     15,     12,      0,      0,    125,      0, }, /* 858 */-  {   125,      7,     12,      0,      0,    125,      0, }, /* 859 */-  {   154,      7,     12,      0,      0,    154,      0, }, /* 860 */-  {   154,     10,      3,      0,      0,    154,      0, }, /* 861 */-  {   154,     10,      5,      0,      0,    154,      0, }, /* 862 */-  {   154,     12,      3,      0,      0,    154,      0, }, /* 863 */-  {   154,      7,      4,      0,      0,    154,      0, }, /* 864 */-  {   154,     21,     12,      0,      0,    154,      0, }, /* 865 */-  {   154,     13,     12,      0,      0,    154,      0, }, /* 866 */-  {   150,      7,     12,      0,      0,    150,      0, }, /* 867 */-  {   150,     10,      5,      0,      0,    150,      0, }, /* 868 */-  {   150,     12,      3,      0,      0,    150,      0, }, /* 869 */-  {   150,     21,     12,      0,      0,    150,      0, }, /* 870 */-  {   141,      7,     12,      0,      0,    141,      0, }, /* 871 */-  {   141,     12,      3,      0,      0,    141,      0, }, /* 872 */-  {   141,     10,      5,      0,      0,    141,      0, }, /* 873 */-  {   141,      7,      4,      0,      0,    141,      0, }, /* 874 */-  {   141,     21,     12,      0,      0,    141,      0, }, /* 875 */-  {   140,      7,     12,      0,      0,    140,      0, }, /* 876 */-  {   140,     12,      3,      0,      0,    140,      0, }, /* 877 */-  {   140,     10,      5,      0,      0,    140,      0, }, /* 878 */-  {   140,      7,      4,      0,      0,    140,      0, }, /* 879 */-  {   140,     21,     12,      0,      0,    140,      0, }, /* 880 */-  {   122,      7,     12,      0,      0,    122,      0, }, /* 881 */-  {   133,      7,     12,      0,      0,    133,      0, }, /* 882 */-  {   133,     10,      5,      0,      0,    133,      0, }, /* 883 */-  {   133,     12,      3,      0,      0,    133,      0, }, /* 884 */-  {   133,     21,     12,      0,      0,    133,      0, }, /* 885 */-  {   133,     13,     12,      0,      0,    133,      0, }, /* 886 */-  {   133,     15,     12,      0,      0,    133,      0, }, /* 887 */-  {   134,     21,     12,      0,      0,    134,      0, }, /* 888 */-  {   134,      7,     12,      0,      0,    134,      0, }, /* 889 */-  {   134,     12,      3,      0,      0,    134,      0, }, /* 890 */-  {   134,     10,      5,      0,      0,    134,      0, }, /* 891 */-  {   138,      7,     12,      0,      0,    138,      0, }, /* 892 */-  {   138,     12,      3,      0,      0,    138,      0, }, /* 893 */-  {   138,      7,      4,      0,      0,    138,      0, }, /* 894 */-  {   138,     13,     12,      0,      0,    138,      0, }, /* 895 */-  {   143,      7,     12,      0,      0,    143,      0, }, /* 896 */-  {   143,     10,      5,      0,      0,    143,      0, }, /* 897 */-  {   143,     12,      3,      0,      0,    143,      0, }, /* 898 */-  {   143,     13,     12,      0,      0,    143,      0, }, /* 899 */-  {   145,      7,     12,      0,      0,    145,      0, }, /* 900 */-  {   145,     12,      3,      0,      0,    145,      0, }, /* 901 */-  {   145,     10,      5,      0,      0,    145,      0, }, /* 902 */-  {   145,     21,     12,      0,      0,    145,      0, }, /* 903 */-  {    54,     15,     12,      0,      0,     54,      0, }, /* 904 */-  {    54,     21,     12,      0,      0,     54,      0, }, /* 905 */-  {    63,      7,     12,      0,      0,     63,      0, }, /* 906 */-  {    63,     14,     12,      0,      0,     63,      0, }, /* 907 */-  {    63,     21,     12,      0,      0,     63,      0, }, /* 908 */-  {    80,      7,     12,      0,      0,     80,      0, }, /* 909 */-  {    80,      1,      2,      0,      0,     80,      0, }, /* 910 */-  {   127,      7,     12,      0,      0,    127,      0, }, /* 911 */-  {   115,      7,     12,      0,      0,    115,      0, }, /* 912 */-  {   115,     13,     12,      0,      0,    115,      0, }, /* 913 */-  {   115,     21,     12,      0,      0,    115,      0, }, /* 914 */-  {   103,      7,     12,      0,      0,    103,      0, }, /* 915 */-  {   103,     12,      3,      0,      0,    103,      0, }, /* 916 */-  {   103,     21,     12,      0,      0,    103,      0, }, /* 917 */-  {   119,      7,     12,      0,      0,    119,      0, }, /* 918 */-  {   119,     12,      3,      0,      0,    119,      0, }, /* 919 */-  {   119,     21,     12,      0,      0,    119,      0, }, /* 920 */-  {   119,     26,     12,      0,      0,    119,      0, }, /* 921 */-  {   119,      6,     12,      0,      0,    119,      0, }, /* 922 */-  {   119,     13,     12,      0,      0,    119,      0, }, /* 923 */-  {   119,     15,     12,      0,      0,    119,      0, }, /* 924 */-  {   146,      9,     12,      0,     32,    146,      0, }, /* 925 */-  {   146,      5,     12,      0,    -32,    146,      0, }, /* 926 */-  {   146,     15,     12,      0,      0,    146,      0, }, /* 927 */-  {   146,     21,     12,      0,      0,    146,      0, }, /* 928 */-  {    99,      7,     12,      0,      0,     99,      0, }, /* 929 */-  {    99,     12,      3,      0,      0,     99,      0, }, /* 930 */-  {    99,     10,      5,      0,      0,     99,      0, }, /* 931 */-  {    99,      6,     12,      0,      0,     99,      0, }, /* 932 */-  {   137,      6,     12,      0,      0,    137,      0, }, /* 933 */-  {   139,      6,     12,      0,      0,    139,      0, }, /* 934 */-  {   155,     12,      3,      0,      0,    155,      0, }, /* 935 */-  {    23,     10,      5,      0,      0,     23,      0, }, /* 936 */-  {   137,      7,     12,      0,      0,    137,      0, }, /* 937 */-  {   155,      7,     12,      0,      0,    155,      0, }, /* 938 */-  {   139,      7,     12,      0,      0,    139,      0, }, /* 939 */-  {   105,      7,     12,      0,      0,    105,      0, }, /* 940 */-  {   105,     26,     12,      0,      0,    105,      0, }, /* 941 */-  {   105,     12,      3,      0,      0,    105,      0, }, /* 942 */-  {   105,     21,     12,      0,      0,    105,      0, }, /* 943 */-  {    10,      1,      2,      0,      0,    105,      0, }, /* 944 */-  {    10,     10,      3,      0,      0,     10,      0, }, /* 945 */-  {    10,     10,      5,      0,      0,     10,      0, }, /* 946 */-  {    20,     12,      3,      0,      0,     20,      0, }, /* 947 */-  {   131,     26,     12,      0,      0,    131,      0, }, /* 948 */-  {   131,     12,      3,      0,      0,    131,      0, }, /* 949 */-  {   131,     21,     12,      0,      0,    131,      0, }, /* 950 */-  {    18,     12,      3,      0,      0,     18,      0, }, /* 951 */-  {   151,      7,     12,      0,      0,    151,      0, }, /* 952 */-  {   151,     12,      3,      0,      0,    151,      0, }, /* 953 */-  {   151,      6,     12,      0,      0,    151,      0, }, /* 954 */-  {   151,     13,     12,      0,      0,    151,      0, }, /* 955 */-  {   151,     26,     12,      0,      0,    151,      0, }, /* 956 */-  {   152,      7,     12,      0,      0,    152,      0, }, /* 957 */-  {   152,     12,      3,      0,      0,    152,      0, }, /* 958 */-  {   152,     13,     12,      0,      0,    152,      0, }, /* 959 */-  {   152,     23,     12,      0,      0,    152,      0, }, /* 960 */-  {   113,      7,     12,      0,      0,    113,      0, }, /* 961 */-  {   113,     15,     12,      0,      0,    113,      0, }, /* 962 */-  {   113,     12,      3,      0,      0,    113,      0, }, /* 963 */-  {   132,      9,     12,      0,     34,    132,      0, }, /* 964 */-  {   132,      5,     12,      0,    -34,    132,      0, }, /* 965 */-  {   132,     12,      3,      0,      0,    132,      0, }, /* 966 */-  {   132,      6,     12,      0,      0,    132,      0, }, /* 967 */-  {   132,     13,     12,      0,      0,    132,      0, }, /* 968 */-  {   132,     21,     12,      0,      0,    132,      0, }, /* 969 */-  {     0,      2,     14,      0,      0,      0,      0, }, /* 970 */-  {    10,     26,     11,      0,      0,     10,      0, }, /* 971 */-  {    27,     26,     12,      0,      0,     27,      0, }, /* 972 */-  {    10,     24,      3,      0,      0,     10,      0, }, /* 973 */-  {    10,      1,      3,      0,      0,     10,      0, }, /* 974 */-};--const uint16_t PRIV(ucd_stage1)[] = { /* 17408 bytes */-  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, /* U+0000 */- 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, /* U+0800 */- 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 41, 41, 42, 43, 44, 45, /* U+1000 */- 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, /* U+1800 */- 62, 63, 64, 65, 66, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, /* U+2000 */- 77, 77, 78, 79, 66, 66, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, /* U+2800 */- 90, 91, 92, 93, 94, 95, 96, 97, 98, 98, 98, 98, 98, 98, 98, 98, /* U+3000 */- 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+3800 */- 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+4000 */- 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 99, 98, 98, 98, 98, /* U+4800 */- 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+5000 */- 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+5800 */- 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+6000 */- 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+6800 */- 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+7000 */- 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+7800 */- 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+8000 */- 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+8800 */- 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+9000 */- 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,100, /* U+9800 */-101,102,102,102,102,102,102,102,102,103,104,104,105,106,107,108, /* U+A000 */-109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,117, /* U+A800 */-118,119,120,121,122,123,117,118,119,120,121,122,123,117,118,119, /* U+B000 */-120,121,122,123,117,118,119,120,121,122,123,117,118,119,120,121, /* U+B800 */-122,123,117,118,119,120,121,122,123,117,118,119,120,121,122,123, /* U+C000 */-117,118,119,120,121,122,123,117,118,119,120,121,122,123,117,118, /* U+C800 */-119,120,121,122,123,117,118,119,120,121,122,123,117,118,119,124, /* U+D000 */-125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+D800 */-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+E000 */-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+E800 */-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+F000 */-126,126, 98, 98,127,128,129,130,131,131,132,133,134,135,136,137, /* U+F800 */-138,139,140,141,142,143,144,145,146,147,148,142,149,149,150,142, /* U+10000 */-151,152,153,154,155,156,157,158,159,160,161,142,162,163,164,165, /* U+10800 */-166,167,168,169,170,171,172,142,173,174,142,175,176,177,178,142, /* U+11000 */-179,180,181,182,183,184,142,142,185,186,187,188,142,189,142,190, /* U+11800 */-191,191,191,191,191,191,191,192,193,191,194,142,142,142,142,142, /* U+12000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+12800 */-195,195,195,195,195,195,195,195,196,142,142,142,142,142,142,142, /* U+13000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+13800 */-142,142,142,142,142,142,142,142,197,197,197,197,198,142,142,142, /* U+14000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+14800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+15000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+15800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+16000 */-199,199,199,199,200,201,202,203,142,142,142,142,204,205,206,207, /* U+16800 */-208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208, /* U+17000 */-208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208, /* U+17800 */-208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,209, /* U+18000 */-208,208,208,208,208,208,210,210,210,211,212,142,142,142,142,142, /* U+18800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+19000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+19800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+1A000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+1A800 */-213,214,215,216,216,217,142,142,142,142,142,142,142,142,142,142, /* U+1B000 */-142,142,142,142,142,142,142,142,218,219,142,142,142,142,142,142, /* U+1B800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+1C000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+1C800 */- 71,220,221,222,223,224,225,142,226,227,228,229,230,231,232,233, /* U+1D000 */-234,234,234,234,235,236,142,142,142,142,142,142,142,142,142,142, /* U+1D800 */-237,142,238,142,142,239,142,142,142,142,142,142,142,142,142,142, /* U+1E000 */-240,241,242,142,142,142,142,142,243,244,245,142,246,247,142,142, /* U+1E800 */-248,249,250,251,252,253,254,255,254,254,256,254,257,258,259,260, /* U+1F000 */-261,262,263,264,265,266, 71,267,253,253,253,253,253,253,253,268, /* U+1F800 */- 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+20000 */- 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+20800 */- 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+21000 */- 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+21800 */- 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+22000 */- 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+22800 */- 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+23000 */- 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+23800 */- 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+24000 */- 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+24800 */- 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+25000 */- 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+25800 */- 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+26000 */- 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+26800 */- 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+27000 */- 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+27800 */- 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+28000 */- 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+28800 */- 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+29000 */- 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+29800 */- 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,269, 98, 98, /* U+2A000 */- 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+2A800 */- 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,270, 98, /* U+2B000 */-271, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+2B800 */- 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+2C000 */- 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,272, 98, 98, /* U+2C800 */- 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+2D000 */- 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+2D800 */- 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+2E000 */- 98, 98, 98, 98, 98, 98, 98,273,142,142,142,142,142,142,142,142, /* U+2E800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+2F000 */- 98, 98, 98, 98,274,142,142,142,142,142,142,142,142,142,142,142, /* U+2F800 */- 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+30000 */- 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+30800 */- 98, 98, 98, 98, 98, 98,275,142,142,142,142,142,142,142,142,142, /* U+31000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+31800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+32000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+32800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+33000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+33800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+34000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+34800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+35000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+35800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+36000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+36800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+37000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+37800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+38000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+38800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+39000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+39800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+3A000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+3A800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+3B000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+3B800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+3C000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+3C800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+3D000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+3D800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+3E000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+3E800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+3F000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+3F800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+40000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+40800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+41000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+41800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+42000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+42800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+43000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+43800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+44000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+44800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+45000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+45800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+46000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+46800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+47000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+47800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+48000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+48800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+49000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+49800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+4A000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+4A800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+4B000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+4B800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+4C000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+4C800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+4D000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+4D800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+4E000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+4E800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+4F000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+4F800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+50000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+50800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+51000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+51800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+52000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+52800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+53000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+53800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+54000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+54800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+55000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+55800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+56000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+56800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+57000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+57800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+58000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+58800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+59000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+59800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+5A000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+5A800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+5B000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+5B800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+5C000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+5C800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+5D000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+5D800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+5E000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+5E800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+5F000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+5F800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+60000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+60800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+61000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+61800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+62000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+62800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+63000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+63800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+64000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+64800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+65000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+65800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+66000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+66800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+67000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+67800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+68000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+68800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+69000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+69800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+6A000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+6A800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+6B000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+6B800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+6C000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+6C800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+6D000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+6D800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+6E000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+6E800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+6F000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+6F800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+70000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+70800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+71000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+71800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+72000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+72800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+73000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+73800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+74000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+74800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+75000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+75800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+76000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+76800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+77000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+77800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+78000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+78800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+79000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+79800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+7A000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+7A800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+7B000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+7B800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+7C000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+7C800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+7D000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+7D800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+7E000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+7E800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+7F000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+7F800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+80000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+80800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+81000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+81800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+82000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+82800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+83000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+83800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+84000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+84800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+85000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+85800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+86000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+86800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+87000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+87800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+88000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+88800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+89000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+89800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+8A000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+8A800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+8B000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+8B800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+8C000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+8C800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+8D000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+8D800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+8E000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+8E800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+8F000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+8F800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+90000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+90800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+91000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+91800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+92000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+92800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+93000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+93800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+94000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+94800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+95000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+95800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+96000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+96800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+97000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+97800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+98000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+98800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+99000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+99800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+9A000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+9A800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+9B000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+9B800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+9C000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+9C800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+9D000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+9D800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+9E000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+9E800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+9F000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+9F800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+A0000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+A0800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+A1000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+A1800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+A2000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+A2800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+A3000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+A3800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+A4000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+A4800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+A5000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+A5800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+A6000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+A6800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+A7000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+A7800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+A8000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+A8800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+A9000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+A9800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+AA000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+AA800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+AB000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+AB800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+AC000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+AC800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+AD000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+AD800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+AE000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+AE800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+AF000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+AF800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+B0000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+B0800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+B1000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+B1800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+B2000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+B2800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+B3000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+B3800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+B4000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+B4800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+B5000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+B5800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+B6000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+B6800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+B7000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+B7800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+B8000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+B8800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+B9000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+B9800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+BA000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+BA800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+BB000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+BB800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+BC000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+BC800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+BD000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+BD800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+BE000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+BE800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+BF000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+BF800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+C0000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+C0800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+C1000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+C1800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+C2000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+C2800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+C3000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+C3800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+C4000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+C4800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+C5000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+C5800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+C6000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+C6800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+C7000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+C7800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+C8000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+C8800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+C9000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+C9800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+CA000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+CA800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+CB000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+CB800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+CC000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+CC800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+CD000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+CD800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+CE000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+CE800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+CF000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+CF800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+D0000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+D0800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+D1000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+D1800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+D2000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+D2800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+D3000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+D3800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+D4000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+D4800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+D5000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+D5800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+D6000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+D6800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+D7000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+D7800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+D8000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+D8800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+D9000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+D9800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+DA000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+DA800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+DB000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+DB800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+DC000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+DC800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+DD000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+DD800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+DE000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+DE800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+DF000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+DF800 */-276,277,278,279,277,277,277,277,277,277,277,277,277,277,277,277, /* U+E0000 */-277,277,277,277,277,277,277,277,277,277,277,277,277,277,277,277, /* U+E0800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+E1000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+E1800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+E2000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+E2800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+E3000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+E3800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+E4000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+E4800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+E5000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+E5800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+E6000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+E6800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+E7000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+E7800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+E8000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+E8800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+E9000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+E9800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+EA000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+EA800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+EB000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+EB800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+EC000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+EC800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+ED000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+ED800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+EE000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+EE800 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+EF000 */-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+EF800 */-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+F0000 */-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+F0800 */-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+F1000 */-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+F1800 */-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+F2000 */-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+F2800 */-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+F3000 */-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+F3800 */-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+F4000 */-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+F4800 */-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+F5000 */-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+F5800 */-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+F6000 */-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+F6800 */-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+F7000 */-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+F7800 */-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+F8000 */-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+F8800 */-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+F9000 */-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+F9800 */-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+FA000 */-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+FA800 */-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+FB000 */-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+FB800 */-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+FC000 */-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+FC800 */-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+FD000 */-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+FD800 */-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+FE000 */-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+FE800 */-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+FF000 */-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,280, /* U+FF800 */-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+100000 */-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+100800 */-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+101000 */-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+101800 */-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+102000 */-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+102800 */-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+103000 */-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+103800 */-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+104000 */-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+104800 */-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+105000 */-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+105800 */-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+106000 */-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+106800 */-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+107000 */-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+107800 */-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+108000 */-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+108800 */-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+109000 */-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+109800 */-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+10A000 */-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+10A800 */-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+10B000 */-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+10B800 */-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+10C000 */-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+10C800 */-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+10D000 */-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+10D800 */-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+10E000 */-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+10E800 */-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+10F000 */-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,280, /* U+10F800 */-};--const uint16_t PRIV(ucd_stage2)[] = { /* 71936 bytes, block = 128 */-/* block 0 */-  0,  1,  1,  1,  1,  1,  1,  1,  1,  1,  2,  1,  1,  3,  1,  1,-  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,-  4,  5,  5,  5,  6,  5,  5,  5,  7,  8,  5,  9,  5, 10,  5,  5,- 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,  5,  5,  9,  9,  9,  5,-  5, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13, 12, 12, 12, 12,- 12, 12, 12, 14, 12, 12, 12, 12, 12, 12, 12,  7,  5,  8, 15, 16,- 15, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 18, 17, 17, 17, 17,- 17, 17, 17, 19, 17, 17, 17, 17, 17, 17, 17,  7,  9,  8,  9,  1,--/* block 1 */-  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,-  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,-  4,  5,  6,  6,  6,  6, 20,  5, 15, 21, 22, 23,  9, 24, 21, 15,- 20,  9, 25, 25, 15, 26,  5,  5, 15, 25, 22, 27, 25, 25, 25,  5,- 12, 12, 12, 12, 12, 28, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,- 12, 12, 12, 12, 12, 12, 12,  9, 12, 12, 12, 12, 12, 12, 12, 29,- 17, 17, 17, 17, 17, 30, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,- 17, 17, 17, 17, 17, 17, 17,  9, 17, 17, 17, 17, 17, 17, 17, 31,--/* block 2 */- 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,- 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,- 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,- 34, 35, 32, 33, 32, 33, 32, 33, 35, 32, 33, 32, 33, 32, 33, 32,- 33, 32, 33, 32, 33, 32, 33, 32, 33, 35, 32, 33, 32, 33, 32, 33,- 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,- 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,- 32, 33, 32, 33, 32, 33, 32, 33, 36, 32, 33, 32, 33, 32, 33, 37,--/* block 3 */- 38, 39, 32, 33, 32, 33, 40, 32, 33, 41, 41, 32, 33, 35, 42, 43,- 44, 32, 33, 41, 45, 46, 47, 48, 32, 33, 49, 35, 47, 50, 51, 52,- 32, 33, 32, 33, 32, 33, 53, 32, 33, 53, 35, 35, 32, 33, 53, 32,- 33, 54, 54, 32, 33, 32, 33, 55, 32, 33, 35, 22, 32, 33, 35, 56,- 22, 22, 22, 22, 57, 58, 59, 60, 61, 62, 63, 64, 65, 32, 33, 32,- 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 66, 32, 33,- 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,- 35, 67, 68, 69, 32, 33, 70, 71, 32, 33, 32, 33, 32, 33, 32, 33,--/* block 4 */- 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,- 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,- 72, 35, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,- 32, 33, 32, 33, 35, 35, 35, 35, 35, 35, 73, 32, 33, 74, 75, 76,- 76, 32, 33, 77, 78, 79, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,- 80, 81, 82, 83, 84, 35, 85, 85, 35, 86, 35, 87, 88, 35, 35, 35,- 85, 89, 35, 90, 35, 91, 92, 35, 93, 94, 92, 95, 96, 35, 35, 94,- 35, 97, 98, 35, 35, 99, 35, 35, 35, 35, 35, 35, 35,100, 35, 35,--/* block 5 */-101, 35,102,101, 35, 35, 35,103,101,104,105,105,106, 35, 35, 35,- 35, 35,107, 35, 22, 35, 35, 35, 35, 35, 35, 35, 35,108,109, 35,- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,-110,110,110,110,110,110,110,110,110,111,111,111,111,111,111,111,-111,111, 15, 15, 15, 15,111,111,111,111,111,111,111,111,111,111,-111,111, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,-110,110,110,110,110, 15, 15, 15, 15, 15,112,112,111, 15,111, 15,- 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,--/* block 6 */-113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,-113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,-113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,-113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,-113,113,114,113,113,115,113,113,113,113,113,113,113,113,113,113,-113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,-113,113,113,116,116,116,116,116,116,116,116,116,116,116,116,116,-117,118,117,118,111,119,117,118,120,120,121,122,122,122,  5,123,--/* block 7 */-120,120,120,120,119, 15,124,  5,125,125,125,120,126,120,127,127,-128,129,130,129,129,131,129,129,132,133,134,129,135,129,129,129,-136,137,120,138,129,129,139,129,129,140,129,129,141,142,142,142,-128,143,144,143,143,145,143,143,146,147,148,143,149,143,143,143,-150,151,152,153,143,143,154,143,143,155,143,143,156,157,157,158,-159,160,161,161,161,162,163,164,117,118,117,118,117,118,117,118,-117,118,165,166,165,166,165,166,165,166,165,166,165,166,165,166,-167,168,169,170,171,172,173,117,118,174,117,118,128,175,175,175,--/* block 8 */-176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,-177,177,178,177,179,177,177,177,177,177,177,177,177,177,180,177,-177,181,182,177,177,177,177,177,177,177,183,177,177,177,177,177,-184,184,185,184,186,184,184,184,184,184,184,184,184,184,187,184,-184,188,189,184,184,184,184,184,184,184,190,184,184,184,184,184,-191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,-192,193,194,195,192,193,192,193,192,193,192,193,192,193,192,193,-192,193,192,193,192,193,192,193,192,193,192,193,192,193,192,193,--/* block 9 */-192,193,196,197,198,199,199,198,200,200,192,193,192,193,192,193,-192,193,192,193,192,193,192,193,192,193,192,193,192,193,192,193,-192,193,192,193,192,193,192,193,192,193,192,193,192,193,192,193,-192,193,192,193,192,193,192,193,192,193,192,193,192,193,192,193,-201,192,193,192,193,192,193,192,193,192,193,192,193,192,193,202,-192,193,192,193,192,193,192,193,192,193,192,193,192,193,192,193,-192,193,192,193,192,193,192,193,192,193,192,193,192,193,192,193,-192,193,192,193,192,193,192,193,192,193,192,193,192,193,192,193,--/* block 10 */-192,193,192,193,192,193,192,193,192,193,192,193,192,193,192,193,-192,193,192,193,192,193,192,193,192,193,192,193,192,193,192,193,-192,193,192,193,192,193,192,193,192,193,192,193,192,193,192,193,-120,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,-203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,-203,203,203,203,203,203,203,120,120,204,205,205,205,205,205,205,-206,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,-207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,--/* block 11 */-207,207,207,207,207,207,207,206,206,205,208,120,120,209,209,210,-120,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,-211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,-211,211,211,211,211,211,211,211,211,211,211,211,211,211,212,211,-213,211,211,213,211,211,213,211,120,120,120,120,120,120,120,120,-214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,-214,214,214,214,214,214,214,214,214,214,214,120,120,120,120,214,-214,214,214,213,213,120,120,120,120,120,120,120,120,120,120,120,--/* block 12 */-215,215,215,215,215,216,217,217,217,218,218,219,220,218,221,221,-222,222,222,222,222,222,222,222,222,222,222,220,223,120,218,220,-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,-225,224,224,224,224,224,224,224,224,224,224,226,226,226,226,226,-226,226,226,226,226,226,222,222,222,222,222,222,222,222,222,222,-227,227,227,227,227,227,227,227,227,227,218,218,218,218,224,224,-226,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,--/* block 13 */-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,-224,224,224,224,228,224,222,222,222,222,222,222,222,216,221,222,-222,222,222,222,222,229,229,222,222,221,222,222,222,222,224,224,-230,230,230,230,230,230,230,230,230,230,224,224,224,221,221,224,--/* block 14 */-231,231,231,231,231,231,231,231,231,231,231,231,231,231,120,232,-233,234,233,233,233,233,233,233,233,233,233,233,233,233,233,233,-233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,-234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,-234,234,234,234,234,234,234,234,234,234,234,120,120,233,233,233,-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,--/* block 15 */-235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,-235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,-235,235,235,235,235,235,236,236,236,236,236,236,236,236,236,236,-236,235,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-237,237,237,237,237,237,237,237,237,237,238,238,238,238,238,238,-238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,-238,238,238,238,238,238,238,238,238,238,238,239,239,239,239,239,-239,239,239,239,240,240,241,242,242,242,240,120,120,239,243,243,--/* block 16 */-244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,-244,244,244,244,244,244,245,245,245,245,246,245,245,245,245,245,-245,245,245,245,246,245,245,245,246,245,245,245,245,245,120,120,-247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,120,-248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,-248,248,248,248,248,248,248,248,248,249,249,249,120,120,250,120,-233,233,233,233,233,233,233,233,233,233,233,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,--/* block 17 */-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,-224,224,224,224,224,120,224,224,224,224,224,224,224,224,224,224,-224,224,224,224,224,224,224,224,120,120,120,120,120,120,120,120,-120,120,120,222,222,222,222,222,222,222,222,222,222,222,222,222,-222,222,216,222,222,222,222,222,222,222,222,222,222,222,222,222,-222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,--/* block 18 */-251,251,251,252,253,253,253,253,253,253,253,253,253,253,253,253,-253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,-253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,-253,253,253,253,253,253,253,253,253,253,251,252,251,253,252,252,-252,251,251,251,251,251,251,251,251,252,252,252,252,251,252,252,-253,254,255,113,113,251,251,251,253,253,253,253,253,253,253,253,-253,253,251,251,256,257,258,258,258,258,258,258,258,258,258,258,-259,260,253,253,253,253,253,253,253,253,253,253,253,253,253,253,--/* block 19 */-261,262,263,263,120,261,261,261,261,261,261,261,261,120,120,261,-261,120,120,261,261,261,261,261,261,261,261,261,261,261,261,261,-261,261,261,261,261,261,261,261,261,120,261,261,261,261,261,261,-261,120,261,120,120,120,261,261,261,261,120,120,262,261,264,263,-263,262,262,262,262,120,120,263,263,120,120,263,263,262,261,120,-120,120,120,120,120,120,120,264,120,120,120,120,261,261,120,261,-261,261,262,262,120,120,265,265,265,265,265,265,265,265,265,265,-261,261,266,266,267,267,267,267,267,267,268,266,261,269,262,120,--/* block 20 */-120,270,270,271,120,272,272,272,272,272,272,120,120,120,120,272,-272,120,120,272,272,272,272,272,272,272,272,272,272,272,272,272,-272,272,272,272,272,272,272,272,272,120,272,272,272,272,272,272,-272,120,272,272,120,272,272,120,272,272,120,120,270,120,271,271,-271,270,270,120,120,120,120,270,270,120,120,270,270,270,120,120,-120,270,120,120,120,120,120,120,120,272,272,272,272,120,272,120,-120,120,120,120,120,120,273,273,273,273,273,273,273,273,273,273,-270,270,272,272,272,270,274,120,120,120,120,120,120,120,120,120,--/* block 21 */-120,275,275,276,120,277,277,277,277,277,277,277,277,277,120,277,-277,277,120,277,277,277,277,277,277,277,277,277,277,277,277,277,-277,277,277,277,277,277,277,277,277,120,277,277,277,277,277,277,-277,120,277,277,120,277,277,277,277,277,120,120,275,277,276,276,-276,275,275,275,275,275,120,275,275,276,120,276,276,275,120,120,-277,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-277,277,275,275,120,120,278,278,278,278,278,278,278,278,278,278,-279,280,120,120,120,120,120,120,120,277,275,275,275,275,275,275,--/* block 22 */-120,281,282,282,120,283,283,283,283,283,283,283,283,120,120,283,-283,120,120,283,283,283,283,283,283,283,283,283,283,283,283,283,-283,283,283,283,283,283,283,283,283,120,283,283,283,283,283,283,-283,120,283,283,120,283,283,283,283,283,120,120,281,283,284,281,-282,281,281,281,281,120,120,282,282,120,120,282,282,281,120,120,-120,120,120,120,120,281,281,284,120,120,120,120,283,283,120,283,-283,283,281,281,120,120,285,285,285,285,285,285,285,285,285,285,-286,283,287,287,287,287,287,287,120,120,120,120,120,120,120,120,--/* block 23 */-120,120,288,289,120,289,289,289,289,289,289,120,120,120,289,289,-289,120,289,289,289,289,120,120,120,289,289,120,289,120,289,289,-120,120,120,289,289,120,120,120,289,289,289,120,120,120,289,289,-289,289,289,289,289,289,289,289,289,289,120,120,120,120,290,291,-288,291,291,120,120,120,291,291,291,120,291,291,291,288,120,120,-289,120,120,120,120,120,120,290,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,292,292,292,292,292,292,292,292,292,292,-293,293,293,294,295,295,295,295,295,296,295,120,120,120,120,120,--/* block 24 */-297,298,298,298,297,299,299,299,299,299,299,299,299,120,299,299,-299,120,299,299,299,299,299,299,299,299,299,299,299,299,299,299,-299,299,299,299,299,299,299,299,299,120,299,299,299,299,299,299,-299,299,299,299,299,299,299,299,299,299,120,120,120,299,297,297,-297,298,298,298,298,120,297,297,297,120,297,297,297,297,120,120,-120,120,120,120,120,297,297,120,299,299,299,120,120,120,120,120,-299,299,297,297,120,120,300,300,300,300,300,300,300,300,300,300,-120,120,120,120,120,120,120,301,302,302,302,302,302,302,302,303,--/* block 25 */-304,305,306,306,307,304,304,304,304,304,304,304,304,120,304,304,-304,120,304,304,304,304,304,304,304,304,304,304,304,304,304,304,-304,304,304,304,304,304,304,304,304,120,304,304,304,304,304,304,-304,304,304,304,120,304,304,304,304,304,120,120,305,304,306,305,-306,306,308,306,306,120,305,306,306,120,306,306,305,305,120,120,-120,120,120,120,120,308,308,120,120,120,120,120,120,120,304,120,-304,304,305,305,120,120,309,309,309,309,309,309,309,309,309,309,-120,304,304,120,120,120,120,120,120,120,120,120,120,120,120,120,--/* block 26 */-310,310,311,311,312,312,312,312,312,312,312,312,312,120,312,312,-312,120,312,312,312,312,312,312,312,312,312,312,312,312,312,312,-312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,-312,312,312,312,312,312,312,312,312,312,312,310,310,312,313,311,-311,310,310,310,310,120,311,311,311,120,311,311,311,310,314,315,-120,120,120,120,312,312,312,313,316,316,316,316,316,316,316,312,-312,312,310,310,120,120,317,317,317,317,317,317,317,317,317,317,-316,316,316,316,316,316,316,316,316,315,312,312,312,312,312,312,--/* block 27 */-120,318,319,319,120,320,320,320,320,320,320,320,320,320,320,320,-320,320,320,320,320,320,320,120,120,120,320,320,320,320,320,320,-320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,-320,320,120,320,320,320,320,320,320,320,320,320,120,320,120,120,-320,320,320,320,320,320,320,120,120,120,318,120,120,120,120,321,-319,319,318,318,318,120,318,120,319,319,319,319,319,319,319,321,-120,120,120,120,120,120,322,322,322,322,322,322,322,322,322,322,-120,120,319,319,323,120,120,120,120,120,120,120,120,120,120,120,--/* block 28 */-120,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,-324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,-324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,-324,325,324,326,325,325,325,325,325,325,325,120,120,120,120,  6,-324,324,324,324,324,324,327,325,325,325,325,325,325,325,325,328,-329,329,329,329,329,329,329,329,329,329,328,328,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,--/* block 29 */-120,330,330,120,330,120,330,330,330,330,330,120,330,330,330,330,-330,330,330,330,330,330,330,330,330,330,330,330,330,330,330,330,-330,330,330,330,120,330,120,330,330,330,330,330,330,330,330,330,-330,331,330,332,331,331,331,331,331,331,331,331,331,330,120,120,-330,330,330,330,330,120,333,120,331,331,331,331,331,331,120,120,-334,334,334,334,334,334,334,334,334,334,120,120,330,330,330,330,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,--/* block 30 */-335,336,336,336,337,337,337,337,337,337,337,337,337,337,337,337,-337,337,337,336,337,336,336,336,338,338,336,336,336,336,336,336,-339,339,339,339,339,339,339,339,339,339,340,340,340,340,340,340,-340,340,340,340,336,338,336,338,336,338,341,342,341,342,343,343,-335,335,335,335,335,335,335,335,120,335,335,335,335,335,335,335,-335,335,335,335,335,335,335,335,335,335,335,335,335,335,335,335,-335,335,335,335,335,335,335,335,335,335,335,335,335,120,120,120,-120,338,338,338,338,338,338,338,338,338,338,338,338,338,338,343,--/* block 31 */-338,338,338,338,338,337,338,338,335,335,335,335,335,338,338,338,-338,338,338,338,338,338,338,338,120,338,338,338,338,338,338,338,-338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,-338,338,338,338,338,338,338,338,338,338,338,338,338,120,336,336,-336,336,336,336,336,336,338,336,336,336,336,336,336,120,336,336,-337,337,337,337,337, 20, 20, 20, 20,337,337,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,--/* block 32 */-344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,-344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,-344,344,344,344,344,344,344,344,344,344,344,345,345,346,346,346,-346,347,346,346,346,346,346,346,345,346,346,347,347,346,346,344,-348,348,348,348,348,348,348,348,348,348,349,349,349,349,349,349,-344,344,344,344,344,344,347,347,346,346,344,344,344,344,346,346,-346,344,345,345,345,344,344,345,345,345,345,345,345,345,344,344,-344,346,346,346,346,344,344,344,344,344,344,344,344,344,344,344,--/* block 33 */-344,344,346,345,347,346,346,345,345,345,345,345,345,346,344,345,-350,350,350,350,350,350,350,350,350,350,345,345,345,346,351,351,-352,352,352,352,352,352,352,352,352,352,352,352,352,352,352,352,-352,352,352,352,352,352,352,352,352,352,352,352,352,352,352,352,-352,352,352,352,352,352,120,352,120,120,120,120,120,352,120,120,-353,353,353,353,353,353,353,353,353,353,353,353,353,353,353,353,-353,353,353,353,353,353,353,353,353,353,353,353,353,353,353,353,-353,353,353,353,353,353,353,353,353,353,353,354,355,353,353,353,--/* block 34 */-356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,-356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,-356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,-356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,-356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,-356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,-357,357,357,357,357,357,357,357,357,357,357,357,357,357,357,357,-357,357,357,357,357,357,357,357,357,357,357,357,357,357,357,357,--/* block 35 */-357,357,357,357,357,357,357,357,357,357,357,357,357,357,357,357,-357,357,357,357,357,357,357,357,357,357,357,357,357,357,357,357,-357,357,357,357,357,357,357,357,358,358,358,358,358,358,358,358,-358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,-358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,-358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,-358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,-358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,--/* block 36 */-359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,-359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,-359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,-359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,-359,359,359,359,359,359,359,359,359,120,359,359,359,359,120,120,-359,359,359,359,359,359,359,120,359,120,359,359,359,359,120,120,-359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,-359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,--/* block 37 */-359,359,359,359,359,359,359,359,359,120,359,359,359,359,120,120,-359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,-359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,-359,120,359,359,359,359,120,120,359,359,359,359,359,359,359,120,-359,120,359,359,359,359,120,120,359,359,359,359,359,359,359,359,-359,359,359,359,359,359,359,120,359,359,359,359,359,359,359,359,-359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,-359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,--/* block 38 */-359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,-359,120,359,359,359,359,120,120,359,359,359,359,359,359,359,359,-359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,-359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,-359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,-359,359,359,359,359,359,359,359,359,359,359,120,120,360,360,360,-361,361,361,361,361,361,361,361,361,362,362,362,362,362,362,362,-362,362,362,362,362,362,362,362,362,362,362,362,362,120,120,120,--/* block 39 */-359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,-363,363,363,363,363,363,363,363,363,363,120,120,120,120,120,120,-364,364,364,364,364,364,364,364,364,364,364,364,364,364,364,364,-364,364,364,364,364,364,364,364,364,364,364,364,364,364,364,364,-364,364,364,364,364,364,364,364,364,364,364,364,364,364,364,364,-364,364,364,364,364,364,364,364,364,364,364,364,364,364,364,364,-364,364,364,364,364,364,364,364,364,364,364,364,364,364,364,364,-365,365,365,365,365,365,120,120,366,366,366,366,366,366,120,120,--/* block 40 */-367,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,-368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,-368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,-368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,-368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,-368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,-368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,-368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,--/* block 41 */-368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,-368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,-368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,-368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,-368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,-368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,-368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,-368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,--/* block 42 */-368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,-368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,-368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,-368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,-368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,-368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,-368,368,368,368,368,368,368,368,368,368,368,368,368,369,370,368,-368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,--/* block 43 */-371,372,372,372,372,372,372,372,372,372,372,372,372,372,372,372,-372,372,372,372,372,372,372,372,372,372,372,373,374,120,120,120,-375,375,375,375,375,375,375,375,375,375,375,375,375,375,375,375,-375,375,375,375,375,375,375,375,375,375,375,375,375,375,375,375,-375,375,375,375,375,375,375,375,375,375,375,375,375,375,375,375,-375,375,375,375,375,375,375,375,375,375,375,375,375,375,375,375,-375,375,375,375,375,375,375,375,375,375,375,  5,  5,  5,376,376,-376,375,375,375,375,375,375,375,375,120,120,120,120,120,120,120,--/* block 44 */-377,377,377,377,377,377,377,377,377,377,377,377,377,120,377,377,-377,377,378,378,378,120,120,120,120,120,120,120,120,120,120,120,-379,379,379,379,379,379,379,379,379,379,379,379,379,379,379,379,-379,379,380,380,380,381,381,120,120,120,120,120,120,120,120,120,-382,382,382,382,382,382,382,382,382,382,382,382,382,382,382,382,-382,382,383,383,120,120,120,120,120,120,120,120,120,120,120,120,-384,384,384,384,384,384,384,384,384,384,384,384,384,120,384,384,-384,120,385,385,120,120,120,120,120,120,120,120,120,120,120,120,--/* block 45 */-386,386,386,386,386,386,386,386,386,386,386,386,386,386,386,386,-386,386,386,386,386,386,386,386,386,386,386,386,386,386,386,386,-386,386,386,386,386,386,386,386,386,386,386,386,386,386,386,386,-386,386,386,386,387,387,388,387,387,387,387,387,387,387,388,388,-388,388,388,388,388,388,387,388,388,387,387,387,387,387,387,387,-387,387,387,387,389,389,389,390,389,389,389,391,386,387,120,120,-392,392,392,392,392,392,392,392,392,392,120,120,120,120,120,120,-393,393,393,393,393,393,393,393,393,393,120,120,120,120,120,120,--/* block 46 */-394,394,395,395,394,395,396,394,394,394,394,397,397,397,398,120,-399,399,399,399,399,399,399,399,399,399,120,120,120,120,120,120,-400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,-400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,-400,400,400,401,400,400,400,400,400,400,400,400,400,400,400,400,-400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,-400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,-400,400,400,400,400,400,400,400,400,120,120,120,120,120,120,120,--/* block 47 */-400,400,400,400,400,397,397,400,400,400,400,400,400,400,400,400,-400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,-400,400,400,400,400,400,400,400,400,397,400,120,120,120,120,120,-368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,-368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,-368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,-368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,-368,368,368,368,368,368,120,120,120,120,120,120,120,120,120,120,--/* block 48 */-402,402,402,402,402,402,402,402,402,402,402,402,402,402,402,402,-402,402,402,402,402,402,402,402,402,402,402,402,402,402,402,120,-403,403,403,404,404,404,404,403,403,404,404,404,120,120,120,120,-404,404,403,404,404,404,404,404,404,403,403,403,120,120,120,120,-405,120,120,120,406,406,407,407,407,407,407,407,407,407,407,407,-408,408,408,408,408,408,408,408,408,408,408,408,408,408,408,408,-408,408,408,408,408,408,408,408,408,408,408,408,408,408,120,120,-408,408,408,408,408,120,120,120,120,120,120,120,120,120,120,120,--/* block 49 */-409,409,409,409,409,409,409,409,409,409,409,409,409,409,409,409,-409,409,409,409,409,409,409,409,409,409,409,409,409,409,409,409,-409,409,409,409,409,409,409,409,409,409,409,409,120,120,120,120,-409,409,409,409,409,409,409,409,409,409,409,409,409,409,409,409,-409,409,409,409,409,409,409,409,409,409,120,120,120,120,120,120,-410,410,410,410,410,410,410,410,410,410,411,120,120,120,412,412,-413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,-413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,--/* block 50 */-414,414,414,414,414,414,414,414,414,414,414,414,414,414,414,414,-414,414,414,414,414,414,414,415,415,416,416,415,120,120,417,417,-418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,-418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,-418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,-418,418,418,418,418,419,420,419,420,420,420,420,420,420,420,120,-420,421,420,421,421,420,420,420,420,420,420,420,420,419,419,419,-419,419,419,420,420,420,420,420,420,420,420,420,420,120,120,420,--/* block 51 */-422,422,422,422,422,422,422,422,422,422,120,120,120,120,120,120,-422,422,422,422,422,422,422,422,422,422,120,120,120,120,120,120,-423,423,423,423,423,423,423,424,423,423,423,423,423,423,120,120,-113,113,113,113,113,113,113,113,113,113,113,113,113,113,425,113,-113,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,--/* block 52 */-426,426,426,426,427,428,428,428,428,428,428,428,428,428,428,428,-428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,-428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,-428,428,428,428,426,429,426,426,426,426,426,427,426,427,427,427,-427,427,426,427,427,428,428,428,428,428,428,428,120,120,120,120,-430,430,430,430,430,430,430,430,430,430,431,431,431,431,431,431,-431,432,432,432,432,432,432,432,432,432,432,426,426,426,426,426,-426,426,426,426,432,432,432,432,432,432,432,432,432,120,120,120,--/* block 53 */-433,433,434,435,435,435,435,435,435,435,435,435,435,435,435,435,-435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,-435,434,433,433,433,433,434,434,433,433,434,433,433,433,435,435,-436,436,436,436,436,436,436,436,436,436,435,435,435,435,435,435,-437,437,437,437,437,437,437,437,437,437,437,437,437,437,437,437,-437,437,437,437,437,437,437,437,437,437,437,437,437,437,437,437,-437,437,437,437,437,437,438,439,438,438,439,439,439,438,439,438,-438,438,439,439,120,120,120,120,120,120,120,120,440,440,440,440,--/* block 54 */-441,441,441,441,441,441,441,441,441,441,441,441,441,441,441,441,-441,441,441,441,441,441,441,441,441,441,441,441,441,441,441,441,-441,441,441,441,442,442,442,442,442,442,442,442,443,443,443,443,-443,443,443,443,442,442,443,443,120,120,120,444,444,444,444,444,-445,445,445,445,445,445,445,445,445,445,120,120,120,441,441,441,-446,446,446,446,446,446,446,446,446,446,447,447,447,447,447,447,-447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,-447,447,447,447,447,447,447,447,448,448,448,448,448,448,449,449,--/* block 55 */-450,451,452,453,454,455,456,457,458,120,120,120,120,120,120,120,-459,459,459,459,459,459,459,459,459,459,459,459,459,459,459,459,-459,459,459,459,459,459,459,459,459,459,459,459,459,459,459,459,-459,459,459,459,459,459,459,459,459,459,459,120,120,459,459,459,-460,460,460,460,460,460,460,460,120,120,120,120,120,120,120,120,-461,462,461,463,462,464,464,465,464,465,466,462,465,465,462,462,-465,467,462,462,462,462,462,462,462,468,469,470,470,464,470,470,-470,470,471,472,473,469,469,474,475,475,476,120,120,120,120,120,--/* block 56 */- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,- 35, 35, 35, 35, 35, 35,128,128,128,128,128,477,110,110,110,110,-110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,-110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,-110,110,110,110,110,110,110,110,110,110,110,110,110,121,121,121,-121,121,110,110,110,110,121,121,121,121,121, 35, 35, 35, 35, 35,- 35, 35, 35, 35, 35, 35, 35, 35,478,479, 35, 35, 35,480, 35, 35,--/* block 57 */- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,481, 35,- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,110,110,110,110,110,-110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,-110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,121,-114,114,113,113,113,113,113,113,113,113,113,113,113,113,113,113,-113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,-113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,-113,113,113,113,113,113,113,113,482,113,120,113,113,113,113,113,--/* block 58 */- 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,- 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,- 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,- 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,- 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,- 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,-483,484, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,- 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,--/* block 59 */- 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,- 32, 33, 32, 33, 32, 33, 35, 35, 35, 35, 35,485, 35, 35,486, 35,- 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,- 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,- 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,- 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,- 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,- 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,--/* block 60 */-487,487,487,487,487,487,487,487,488,488,488,488,488,488,488,488,-487,487,487,487,487,487,120,120,488,488,488,488,488,488,120,120,-487,487,487,487,487,487,487,487,488,488,488,488,488,488,488,488,-487,487,487,487,487,487,487,487,488,488,488,488,488,488,488,488,-487,487,487,487,487,487,120,120,488,488,488,488,488,488,120,120,-128,487,128,487,128,487,128,487,120,488,120,488,120,488,120,488,-487,487,487,487,487,487,487,487,488,488,488,488,488,488,488,488,-489,489,490,490,490,490,491,491,492,492,493,493,494,494,120,120,--/* block 61 */-487,487,487,487,487,487,487,487,495,495,495,495,495,495,495,495,-487,487,487,487,487,487,487,487,495,495,495,495,495,495,495,495,-487,487,487,487,487,487,487,487,495,495,495,495,495,495,495,495,-487,487,128,496,128,120,128,128,488,488,497,497,498,119,499,119,-119,119,128,496,128,120,128,128,500,500,500,500,498,119,119,119,-487,487,128,128,120,120,128,128,488,488,501,501,120,119,119,119,-487,487,128,128,128,169,128,128,488,488,502,502,174,119,119,119,-120,120,128,496,128,120,128,128,503,503,504,504,498,119,119,120,--/* block 62 */-  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4, 24,505,506, 24, 24,- 10, 10, 10, 10, 10, 10,  5,  5, 23, 27,  7, 23, 23, 27,  7, 23,-  5,  5,  5,  5,  5,  5,  5,  5,507,508, 24, 24, 24, 24, 24,509,-  5,  5,  5,  5,  5,  5,  5,  5,  5, 23, 27,  5,510,  5,  5, 16,- 16,  5,  5,  5,  9,  7,  8,  5,  5,510,  5,  5,  5,  5,  5,  5,-  5,  5,  9,  5, 16,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  4,- 24, 24, 24, 24, 24,511, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,- 25,110,120,120, 25, 25, 25, 25, 25, 25,  9,  9,  9,  7,  8,110,--/* block 63 */- 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,  9,  9,  9,  7,  8,120,-110,110,110,110,110,110,110,110,110,110,110,110,110,120,120,120,-  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,-  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-113,113,113,113,113,113,113,113,113,113,113,113,113,425,425,425,-425,113,425,425,425,113,113,113,113,113,113,113,113,113,113,113,-512,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,--/* block 64 */- 20, 20,513, 20, 20, 20, 20,513, 20, 20,514,513,513,513,514,514,-513,513,513,514, 20,513, 20, 20,  9,513,513,513,513,513, 20, 20,- 20, 20, 21, 20,513, 20,515, 20,513, 20,516,517,513,513, 20,514,-513,513,518,513,514,519,519,519,519,520, 20, 20,514,514,513,513,-  9,  9,  9,  9,  9,513,514,514,514,514, 20,  9, 20, 20,521, 20,- 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,-522,522,522,522,522,522,522,522,522,522,522,522,522,522,522,522,-523,523,523,523,523,523,523,523,523,523,523,523,523,523,523,523,--/* block 65 */-524,524,524, 32, 33,524,524,524,524, 25, 20, 20,120,120,120,120,-  9,  9,  9,  9,525, 21, 21, 21, 21, 21,  9,  9, 20, 20, 20, 20,-  9, 20, 20,  9, 20, 20,  9, 20, 20, 21, 21, 20, 20, 20,  9, 20,- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,  9,  9,- 20, 20,  9, 20,  9, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,- 20, 20, 20, 20,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,--/* block 66 */-  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,-  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,-  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,-  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,-  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,-  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,-  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,-  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,--/* block 67 */- 20, 20, 20, 20, 20, 20, 20, 20,  7,  8,  7,  8, 20, 20, 20, 20,- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21, 21, 20, 20, 20, 20,-  9,  9, 20, 20, 20, 20, 20, 20, 21,  7,  8, 20, 20, 20, 20, 20,- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,  9, 20, 20, 20,--/* block 68 */- 20, 20, 20, 20, 20, 20, 20, 20, 21, 20, 20, 20, 20, 20, 20, 20,- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,  9,  9,  9,  9,  9,-  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,-  9,  9,  9,  9, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21,- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,  9,  9,  9,  9,-  9,  9, 20, 20, 20, 20, 20, 20, 20, 21, 21, 21, 21, 21, 21, 21,- 21, 21, 21, 21, 20, 20, 20, 20, 21, 21, 21, 20, 20, 20, 20, 20,--/* block 69 */- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,- 20, 20, 20, 20, 20, 20, 20,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,- 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,- 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,--/* block 70 */- 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,- 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 20, 20, 20, 20,- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,- 20, 20, 20, 20, 20, 20,526,526,526,526,526,526,526,526,526,526,-526,526,527,526,526,526,526,526,526,526,526,526,526,526,526,526,-528,528,528,528,528,528,528,528,528,528,528,528,528,528,528,528,-528,528,528,528,528,528,528,528,528,528, 25, 25, 25, 25, 25, 25,- 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,--/* block 71 */- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,--/* block 72 */- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21, 21, 20, 20, 20, 20,- 20, 20, 20, 20, 20, 20, 21,  9, 20, 20, 20, 20, 20, 20, 20, 20,- 21,  9, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,- 20, 20, 20, 20, 20, 20, 20, 20,  9,  9,  9,525,525,525,525,  9,--/* block 73 */- 21, 21, 21, 21, 21, 21, 20, 21, 21, 21, 21, 21, 21, 21, 21, 21,- 21, 21, 21, 20, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,525,- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,--/* block 74 */- 21, 21, 21, 21, 21, 21, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,--/* block 75 */- 21, 21, 21, 21, 21, 21, 20, 20, 21, 21, 21, 21, 21, 21, 21, 21,- 21, 21, 21, 20, 21, 20, 21, 20, 20, 20, 20, 20, 20, 21, 20, 20,- 20, 21, 20, 20, 20, 20, 20, 20, 21, 20, 20, 20, 20, 20, 20, 20,- 20, 20, 20, 21, 21, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,- 20, 20, 20, 20, 21, 20, 20, 21, 20, 20, 20, 20, 21, 20, 21, 20,- 20, 20, 20, 21, 21, 21, 20, 21, 20, 20, 20, 20, 20, 20, 20, 20,- 20, 20, 20, 21, 21, 21, 21, 21,  7,  8,  7,  8,  7,  8,  7,  8,-  7,  8,  7,  8,  7,  8, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,--/* block 76 */- 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,- 25, 25, 25, 25, 20, 21, 21, 21, 20, 20, 20, 20, 20, 20, 20, 20,- 20, 21, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,- 21, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21,-  9,  9,  9,  9,  9,  7,  8,  9,  9,  9,  9,  9,  9,  9,  9,  9,-  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,-  9,  9,  9,  9,  9,  9,  7,  8,  7,  8,  7,  8,  7,  8,  7,  8,-  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,--/* block 77 */-529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,-529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,-529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,-529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,-529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,-529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,-529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,-529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,--/* block 78 */-  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,-  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,-  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,-  9,  9,  9,  9,525,525,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,-  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,-  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,-  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,-  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,--/* block 79 */-  9,  9,  9,  7,  8,  7,  8,  7,  8,  7,  8,  7,  8,  7,  8,  7,-  8,  7,  8,  7,  8,  7,  8,  7,  8,  9,  9,  9,  9,  9,  9,  9,-  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,-  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,-  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,-  9,  9,  9,  9,  9,  9,  9,  9,  7,  8,  7,  8,  9,  9,  9,  9,-  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,-  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  7,  8,  9,  9,--/* block 80 */- 20, 20, 20, 20, 20, 21, 21, 21, 20, 20, 20, 20, 20, 20, 20, 20,- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21, 21, 20, 20, 20,- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,-  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,-  9,  9,  9,  9,  9, 20, 20,  9,  9,  9,  9,  9,  9, 20, 20, 20,- 21, 20, 20, 20, 20, 21, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,- 20, 20, 20, 20,120,120, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,--/* block 81 */- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,- 20, 20, 20, 20, 20, 20,120, 20, 20, 20, 20, 20, 20, 20, 20, 20,- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,--/* block 82 */-530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,-530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,-530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,120,-531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,-531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,-531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,120,- 32, 33,532,533,534,535,536, 32, 33, 32, 33, 32, 33,537,538,539,-540, 35, 32, 33, 35, 32, 33, 35, 35, 35, 35, 35,110,110,541,541,--/* block 83 */-165,166,165,166,165,166,165,166,165,166,165,166,165,166,165,166,-165,166,165,166,165,166,165,166,165,166,165,166,165,166,165,166,-165,166,165,166,165,166,165,166,165,166,165,166,165,166,165,166,-165,166,165,166,165,166,165,166,165,166,165,166,165,166,165,166,-165,166,165,166,165,166,165,166,165,166,165,166,165,166,165,166,-165,166,165,166,165,166,165,166,165,166,165,166,165,166,165,166,-165,166,165,166,542,543,543,543,543,543,543,165,166,165,166,544,-544,544,165,166,120,120,120,120,120,545,545,545,545,546,545,545,--/* block 84 */-547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,-547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,-547,547,547,547,547,547,120,547,120,120,120,120,120,547,120,120,-548,548,548,548,548,548,548,548,548,548,548,548,548,548,548,548,-548,548,548,548,548,548,548,548,548,548,548,548,548,548,548,548,-548,548,548,548,548,548,548,548,548,548,548,548,548,548,548,548,-548,548,548,548,548,548,548,548,120,120,120,120,120,120,120,549,-550,120,120,120,120,120,120,120,120,120,120,120,120,120,120,551,--/* block 85 */-359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,-359,359,359,359,359,359,359,120,120,120,120,120,120,120,120,120,-359,359,359,359,359,359,359,120,359,359,359,359,359,359,359,120,-359,359,359,359,359,359,359,120,359,359,359,359,359,359,359,120,-359,359,359,359,359,359,359,120,359,359,359,359,359,359,359,120,-359,359,359,359,359,359,359,120,359,359,359,359,359,359,359,120,-552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,-552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,--/* block 86 */-  5,  5, 23, 27, 23, 27,  5,  5,  5, 23, 27,  5, 23, 27,  5,  5,-  5,  5,  5,  5,  5,  5,  5, 10,  5,  5, 10,  5, 23, 27,  5,  5,- 23, 27,  7,  8,  7,  8,  7,  8,  7,  8,  5,  5,  5,  5,  5,111,-  5,  5,  5,  5,  5,  5,  5,  5,  5,  5, 10, 10,  5,  5,  5,  5,- 10,  5,  7,553,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,- 20, 20,  5,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,--/* block 87 */-554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,-554,554,554,554,554,554,554,554,554,554,120,554,554,554,554,554,-554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,-554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,-554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,-554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,-554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,-554,554,554,554,120,120,120,120,120,120,120,120,120,120,120,120,--/* block 88 */-554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,-554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,-554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,-554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,-554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,-554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,-554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,-554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,--/* block 89 */-554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,-554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,-554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,-554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,-554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,-554,554,554,554,554,554,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,120,120,120,120,--/* block 90 */-  4,555,555,556, 20,557,558,559,560,561,560,561,560,561,560,561,-560,561, 20,562,560,561,560,561,560,561,560,561,563,564,565,565,- 20,559,559,559,559,559,559,559,559,559,566,566,566,566,567,567,-568,569,569,569,569,569, 20,562,559,559,559,557,570,571,572,572,-120,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,-573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,-573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,-573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,--/* block 91 */-573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,-573,573,573,573,573,573,573,120,120,574,574,575,575,576,576,573,-577,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,-578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,-578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,-578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,-578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,-578,578,578,578,578,578,578,578,578,578,578,555,569,579,579,578,--/* block 92 */-120,120,120,120,120,580,580,580,580,580,580,580,580,580,580,580,-580,580,580,580,580,580,580,580,580,580,580,580,580,580,580,580,-580,580,580,580,580,580,580,580,580,580,580,580,580,580,580,580,-120,581,581,581,581,581,581,581,581,581,581,581,581,581,581,581,-581,581,581,581,581,581,581,581,581,581,581,581,581,581,581,581,-581,581,581,581,581,581,581,581,581,581,581,581,581,581,581,581,-581,581,581,581,581,581,581,581,581,581,581,581,581,581,581,581,-581,581,581,581,581,581,581,581,581,581,581,581,581,581,581,581,--/* block 93 */-581,581,581,581,581,581,581,581,581,581,581,581,581,581,581,120,-572,572,582,582,582,582,572,572,572,572,572,572,572,572,572,572,-580,580,580,580,580,580,580,580,580,580,580,580,580,580,580,580,-580,580,580,580,580,580,580,580,580,580,580,580,580,580,580,580,-572,572,572,572,572,572,572,572,572,572,572,572,572,572,572,572,-572,572,572,572,572,572,572,572,572,572,572,572,572,572,572,572,-572,572,572,572,120,120,120,120,120,120,120,120,120,120,120,120,-578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,--/* block 94 */-583,583,583,583,583,583,583,583,583,583,583,583,583,583,583,583,-583,583,583,583,583,583,583,583,583,583,583,583,583,583,583,120,-582,582,582,582,582,582,582,582,582,582,572,572,572,572,572,572,-572,572,572,572,572,572,572,572,572,572,572,572,572,572,572,572,-572,572,572,572,572,572,572,572, 25, 25, 25, 25, 25, 25, 25, 25,- 20, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,-583,583,583,583,583,583,583,583,583,583,583,583,583,583,583,583,-583,583,583,583,583,583,583,583,583,583,583,583,583,583,583, 20,--/* block 95 */-582,582,582,582,582,582,582,582,582,582,572,572,572,572,572,572,-572,572,572,572,572,572,572,584,572,584,572,572,572,572,572,572,-572,572,572,572,572,572,572,572,572,572,572,572,572,572,572,572,-572, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,-572,572,572,572,572,572,572,572,572,572,572,572, 20, 20, 20, 20,-585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,-585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,-585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,572,--/* block 96 */-585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,-585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,-585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,-585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,-585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,-585,585,585,585,585,585,585,585,572,572,572,572,572,572,572,572,-572,572,572,572,572,572,572,572,572,572,572,572,572,572,572,572,-572, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,572,572,572,572,572,--/* block 97 */- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,-572,572,572,572,572,572,572,572,572,572,572,572,572,572,572,572,-572,572,572,572,572,572,572,572,572,572,572,572,572,572,572, 20,--/* block 98 */-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,--/* block 99 */-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,--/* block 100 */-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,-586,586,586,586,586,586,586,586,586,586,586,586,586,120,120,120,--/* block 101 */-587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,-587,587,587,587,587,588,587,587,587,587,587,587,587,587,587,587,-587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,-587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,-587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,-587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,-587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,-587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,--/* block 102 */-587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,-587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,-587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,-587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,-587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,-587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,-587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,-587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,--/* block 103 */-587,587,587,587,587,587,587,587,587,587,587,587,587,120,120,120,-589,589,589,589,589,589,589,589,589,589,589,589,589,589,589,589,-589,589,589,589,589,589,589,589,589,589,589,589,589,589,589,589,-589,589,589,589,589,589,589,589,589,589,589,589,589,589,589,589,-589,589,589,589,589,589,589,120,120,120,120,120,120,120,120,120,-590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,-590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,-590,590,590,590,590,590,590,590,591,591,591,591,591,591,592,592,--/* block 104 */-593,593,593,593,593,593,593,593,593,593,593,593,593,593,593,593,-593,593,593,593,593,593,593,593,593,593,593,593,593,593,593,593,-593,593,593,593,593,593,593,593,593,593,593,593,593,593,593,593,-593,593,593,593,593,593,593,593,593,593,593,593,593,593,593,593,-593,593,593,593,593,593,593,593,593,593,593,593,593,593,593,593,-593,593,593,593,593,593,593,593,593,593,593,593,593,593,593,593,-593,593,593,593,593,593,593,593,593,593,593,593,593,593,593,593,-593,593,593,593,593,593,593,593,593,593,593,593,593,593,593,593,--/* block 105 */-593,593,593,593,593,593,593,593,593,593,593,593,594,595,595,595,-593,593,593,593,593,593,593,593,593,593,593,593,593,593,593,593,-596,596,596,596,596,596,596,596,596,596,593,593,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-192,193,192,193,192,193,192,193,192,193,597,598,192,193,192,193,-192,193,192,193,192,193,192,193,192,193,192,193,192,193,192,193,-192,193,192,193,192,193,192,193,192,193,192,193,192,193,599,198,-200,200,200,600,552,552,552,552,552,552,552,552,552,552,600,478,--/* block 106 */-192,193,192,193,192,193,192,193,192,193,192,193,192,193,192,193,-192,193,192,193,192,193,192,193,192,193,192,193,478,478,552,552,-601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,-601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,-601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,-601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,-601,601,601,601,601,601,602,602,602,602,602,602,602,602,602,602,-603,603,604,604,604,604,604,604,120,120,120,120,120,120,120,120,--/* block 107 */-605,605,605,605,605,605,605,605, 15, 15, 15, 15, 15, 15, 15, 15,- 15, 15, 15, 15, 15, 15, 15,111,111,111,111,111,111,111,111,111,- 15, 15, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,- 35, 35, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,- 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,- 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,- 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,-110, 35, 35, 35, 35, 35, 35, 35, 35, 32, 33, 32, 33,606, 32, 33,--/* block 108 */- 32, 33, 32, 33, 32, 33, 32, 33,111, 15, 15, 32, 33,607, 35, 22,- 32, 33, 32, 33,608, 35, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,- 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,609,610,611,612,609, 35,-613,614,615,616, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,-120,120, 32, 33,617,618,619, 32, 33, 32, 33,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120, 32, 33, 22,110,110, 35, 22, 22, 22, 22, 22,--/* block 109 */-620,620,621,620,620,620,621,620,620,620,620,621,620,620,620,620,-620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,-620,620,620,622,622,621,621,622,623,623,623,623,621,120,120,120,-624,624,624,625,625,625,626,626,627,626,120,120,120,120,120,120,-628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,-628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,-628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,-628,628,628,628,629,629,629,629,120,120,120,120,120,120,120,120,--/* block 110 */-630,630,631,631,631,631,631,631,631,631,631,631,631,631,631,631,-631,631,631,631,631,631,631,631,631,631,631,631,631,631,631,631,-631,631,631,631,631,631,631,631,631,631,631,631,631,631,631,631,-631,631,631,631,630,630,630,630,630,630,630,630,630,630,630,630,-630,630,630,630,632,632,120,120,120,120,120,120,120,120,633,633,-634,634,634,634,634,634,634,634,634,634,120,120,120,120,120,120,-251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,-251,635,253,636,253,253,253,253,259,259,259,253,259,253,253,251,--/* block 111 */-637,637,637,637,637,637,637,637,637,637,638,638,638,638,638,638,-638,638,638,638,638,638,638,638,638,638,638,638,638,638,638,638,-638,638,638,638,638,638,639,639,639,639,639,639,639,639,640,641,-642,642,642,642,642,642,642,642,642,642,642,642,642,642,642,642,-642,642,642,642,642,642,642,643,643,643,643,643,643,643,643,643,-643,643,644,644,120,120,120,120,120,120,120,120,120,120,120,645,-356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,-356,356,356,356,356,356,356,356,356,356,356,356,356,120,120,120,--/* block 112 */-646,646,646,647,648,648,648,648,648,648,648,648,648,648,648,648,-648,648,648,648,648,648,648,648,648,648,648,648,648,648,648,648,-648,648,648,648,648,648,648,648,648,648,648,648,648,648,648,648,-648,648,648,646,647,647,646,646,646,646,647,647,646,646,647,647,-647,649,649,649,649,649,649,649,649,649,649,649,649,649,120,650,-651,651,651,651,651,651,651,651,651,651,120,120,120,120,649,649,-344,344,344,344,344,346,652,344,344,344,344,344,344,344,344,344,-350,350,350,350,350,350,350,350,350,350,344,344,344,344,344,120,--/* block 113 */-653,653,653,653,653,653,653,653,653,653,653,653,653,653,653,653,-653,653,653,653,653,653,653,653,653,653,653,653,653,653,653,653,-653,653,653,653,653,653,653,653,653,654,654,654,654,654,654,655,-655,654,654,655,655,654,654,120,120,120,120,120,120,120,120,120,-653,653,653,654,653,653,653,653,653,653,653,653,654,655,120,120,-656,656,656,656,656,656,656,656,656,656,120,120,657,657,657,657,-344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,-652,344,344,344,344,344,344,351,351,351,344,345,346,345,344,344,--/* block 114 */-658,658,658,658,658,658,658,658,658,658,658,658,658,658,658,658,-658,658,658,658,658,658,658,658,658,658,658,658,658,658,658,658,-658,658,658,658,658,658,658,658,658,658,658,658,658,658,658,658,-659,658,659,659,659,658,658,659,659,658,658,658,658,658,659,659,-658,659,658,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,658,658,660,661,661,-662,662,662,662,662,662,662,662,662,662,662,663,664,664,663,663,-665,665,662,666,666,663,664,120,120,120,120,120,120,120,120,120,--/* block 115 */-120,359,359,359,359,359,359,120,120,359,359,359,359,359,359,120,-120,359,359,359,359,359,359,120,120,120,120,120,120,120,120,120,-359,359,359,359,359,359,359,120,359,359,359,359,359,359,359,120,- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,- 35, 35, 35,667, 35, 35, 35, 35, 35, 35, 35, 15,110,110,110,110,- 35, 35, 35, 35, 35,128, 35, 35, 35,110, 15, 15,120,120,120,120,-668,668,668,668,668,668,668,668,668,668,668,668,668,668,668,668,--/* block 116 */-668,668,668,668,668,668,668,668,668,668,668,668,668,668,668,668,-668,668,668,668,668,668,668,668,668,668,668,668,668,668,668,668,-668,668,668,668,668,668,668,668,668,668,668,668,668,668,668,668,-668,668,668,668,668,668,668,668,668,668,668,668,668,668,668,668,-662,662,662,662,662,662,662,662,662,662,662,662,662,662,662,662,-662,662,662,662,662,662,662,662,662,662,662,662,662,662,662,662,-662,662,662,663,663,664,663,663,664,663,663,665,663,664,120,120,-669,669,669,669,669,669,669,669,669,669,120,120,120,120,120,120,--/* block 117 */-670,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,-671,671,671,671,671,671,671,671,671,671,671,671,670,671,671,671,-671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,-671,671,671,671,671,671,671,671,670,671,671,671,671,671,671,671,-671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,-671,671,671,671,670,671,671,671,671,671,671,671,671,671,671,671,-671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,-670,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,--/* block 118 */-671,671,671,671,671,671,671,671,671,671,671,671,670,671,671,671,-671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,-671,671,671,671,671,671,671,671,670,671,671,671,671,671,671,671,-671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,-671,671,671,671,670,671,671,671,671,671,671,671,671,671,671,671,-671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,-670,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,-671,671,671,671,671,671,671,671,671,671,671,671,670,671,671,671,--/* block 119 */-671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,-671,671,671,671,671,671,671,671,670,671,671,671,671,671,671,671,-671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,-671,671,671,671,670,671,671,671,671,671,671,671,671,671,671,671,-671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,-670,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,-671,671,671,671,671,671,671,671,671,671,671,671,670,671,671,671,-671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,--/* block 120 */-671,671,671,671,671,671,671,671,670,671,671,671,671,671,671,671,-671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,-671,671,671,671,670,671,671,671,671,671,671,671,671,671,671,671,-671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,-670,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,-671,671,671,671,671,671,671,671,671,671,671,671,670,671,671,671,-671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,-671,671,671,671,671,671,671,671,670,671,671,671,671,671,671,671,--/* block 121 */-671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,-671,671,671,671,670,671,671,671,671,671,671,671,671,671,671,671,-671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,-670,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,-671,671,671,671,671,671,671,671,671,671,671,671,670,671,671,671,-671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,-671,671,671,671,671,671,671,671,670,671,671,671,671,671,671,671,-671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,--/* block 122 */-671,671,671,671,670,671,671,671,671,671,671,671,671,671,671,671,-671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,-670,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,-671,671,671,671,671,671,671,671,671,671,671,671,670,671,671,671,-671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,-671,671,671,671,671,671,671,671,670,671,671,671,671,671,671,671,-671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,-671,671,671,671,670,671,671,671,671,671,671,671,671,671,671,671,--/* block 123 */-671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,-670,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,-671,671,671,671,671,671,671,671,671,671,671,671,670,671,671,671,-671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,-671,671,671,671,671,671,671,671,670,671,671,671,671,671,671,671,-671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,-671,671,671,671,670,671,671,671,671,671,671,671,671,671,671,671,-671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,--/* block 124 */-671,671,671,671,671,671,671,671,670,671,671,671,671,671,671,671,-671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,-671,671,671,671,120,120,120,120,120,120,120,120,120,120,120,120,-357,357,357,357,357,357,357,357,357,357,357,357,357,357,357,357,-357,357,357,357,357,357,357,120,120,120,120,358,358,358,358,358,-358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,-358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,-358,358,358,358,358,358,358,358,358,358,358,358,120,120,120,120,--/* block 125 */-672,672,672,672,672,672,672,672,672,672,672,672,672,672,672,672,-672,672,672,672,672,672,672,672,672,672,672,672,672,672,672,672,-672,672,672,672,672,672,672,672,672,672,672,672,672,672,672,672,-672,672,672,672,672,672,672,672,672,672,672,672,672,672,672,672,-672,672,672,672,672,672,672,672,672,672,672,672,672,672,672,672,-672,672,672,672,672,672,672,672,672,672,672,672,672,672,672,672,-672,672,672,672,672,672,672,672,672,672,672,672,672,672,672,672,-672,672,672,672,672,672,672,672,672,672,672,672,672,672,672,672,--/* block 126 */-673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,-673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,-673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,-673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,-673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,-673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,-673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,-673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,--/* block 127 */-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,-586,586,586,586,586,586,586,586,586,586,586,586,586,586,120,120,-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,--/* block 128 */-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,-586,586,586,586,586,586,586,586,586,586,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,--/* block 129 */- 35, 35, 35, 35, 35, 35, 35,120,120,120,120,120,120,120,120,120,-120,120,120,206,206,206,206,206,120,120,120,120,120,214,211,214,-214,214,214,214,214,214,214,214,214,674,214,214,214,214,214,214,-214,214,214,214,214,214,214,120,214,214,214,214,214,120,214,120,-214,214,120,214,214,120,214,214,214,214,214,214,214,214,214,214,-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,--/* block 130 */-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,-224,224,675,675,675,675,675,675,675,675,675,675,675,675,675,675,-675,675,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,224,224,224,224,224,224,224,224,224,224,224,224,224,-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,--/* block 131 */-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,--/* block 132 */-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,-224,224,224,224,224,224,224,224,224,224,224,224,224,224,  8,  7,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,--/* block 133 */-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,-120,120,224,224,224,224,224,224,224,224,224,224,224,224,224,224,-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,-224,224,224,224,224,224,224,224,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-224,224,676,224,224,224,224,224,224,224,224,224,219,677,120,120,--/* block 134 */-113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,-  5,  5,  5,  5,  5,  5,  5,  7,  8,  5,120,120,120,120,120,120,-113,113,113,113,113,113,113,113,113,113,113,113,113,113,552,552,-  5, 10, 10, 16, 16,  7,  8,  7,  8,  7,  8,  7,  8,  7,  8,  7,-  8,  7,  8,  7,  8,556,556,  7,  8,  5,  5,  5,  5, 16, 16, 16,-  5,  5,  5,120,  5,  5,  5,  5, 10,  7,  8,  7,  8,  7,  8,  5,-  5,  5,  9, 10,  9,  9,  9,120,  5,  6,  5,  5,120,120,120,120,-224,224,224,224,224,120,224,224,224,224,224,224,224,224,224,224,--/* block 135 */-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,-224,224,224,224,224,224,224,224,224,224,224,224,224,120,120, 24,--/* block 136 */-120,  5,  5,  5,  6,  5,  5,  5,  7,  8,  5,  9,  5, 10,  5,  5,- 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,  5,  5,  9,  9,  9,  5,-  5, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,- 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,  7,  5,  8, 15, 16,- 15, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,  7,  9,  8,  9,  7,-  8,555,560,561,555,555,578,578,578,578,578,578,578,578,578,578,-569,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,--/* block 137 */-578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,-578,578,578,578,578,578,578,578,578,578,578,578,578,578,678,678,-581,581,581,581,581,581,581,581,581,581,581,581,581,581,581,581,-581,581,581,581,581,581,581,581,581,581,581,581,581,581,581,120,-120,120,581,581,581,581,581,581,120,120,581,581,581,581,581,581,-120,120,581,581,581,581,581,581,120,120,581,581,581,120,120,120,-  6,  6,  9, 15, 20,  6,  6,120, 20,  9,  9,  9,  9, 20, 20,120,-511,511,511,511,511,511,511,511,511, 24, 24, 24, 20, 20,120,120,--/* block 138 */-679,679,679,679,679,679,679,679,679,679,679,679,120,679,679,679,-679,679,679,679,679,679,679,679,679,679,679,679,679,679,679,679,-679,679,679,679,679,679,679,120,679,679,679,679,679,679,679,679,-679,679,679,679,679,679,679,679,679,679,679,120,679,679,120,679,-679,679,679,679,679,679,679,679,679,679,679,679,679,679,120,120,-679,679,679,679,679,679,679,679,679,679,679,679,679,679,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,--/* block 139 */-679,679,679,679,679,679,679,679,679,679,679,679,679,679,679,679,-679,679,679,679,679,679,679,679,679,679,679,679,679,679,679,679,-679,679,679,679,679,679,679,679,679,679,679,679,679,679,679,679,-679,679,679,679,679,679,679,679,679,679,679,679,679,679,679,679,-679,679,679,679,679,679,679,679,679,679,679,679,679,679,679,679,-679,679,679,679,679,679,679,679,679,679,679,679,679,679,679,679,-679,679,679,679,679,679,679,679,679,679,679,679,679,679,679,679,-679,679,679,679,679,679,679,679,679,679,679,120,120,120,120,120,--/* block 140 */-680,680,680,120,120,120,120,681,681,681,681,681,681,681,681,681,-681,681,681,681,681,681,681,681,681,681,681,681,681,681,681,681,-681,681,681,681,681,681,681,681,681,681,681,681,681,681,681,681,-681,681,681,681,120,120,120,682,682,682,682,682,682,682,682,682,-683,683,683,683,683,683,683,683,683,683,683,683,683,683,683,683,-683,683,683,683,683,683,683,683,683,683,683,683,683,683,683,683,-683,683,683,683,683,683,683,683,683,683,683,683,683,683,683,683,-683,683,683,683,683,684,684,684,684,685,685,685,685,685,685,685,--/* block 141 */-685,685,685,685,685,685,685,685,685,685,684,684,685,685,685,120,- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,120,120,120,-685,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,113,120,120,--/* block 142 */-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,--/* block 143 */-686,686,686,686,686,686,686,686,686,686,686,686,686,686,686,686,-686,686,686,686,686,686,686,686,686,686,686,686,686,120,120,120,-687,687,687,687,687,687,687,687,687,687,687,687,687,687,687,687,-687,687,687,687,687,687,687,687,687,687,687,687,687,687,687,687,-687,687,687,687,687,687,687,687,687,687,687,687,687,687,687,687,-687,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-688,689,689,689,689,689,689,689,689,689,689,689,689,689,689,689,-689,689,689,689,689,689,689,689,689,689,689,689,120,120,120,120,--/* block 144 */-690,690,690,690,690,690,690,690,690,690,690,690,690,690,690,690,-690,690,690,690,690,690,690,690,690,690,690,690,690,690,690,690,-691,691,691,691,120,120,120,120,120,120,120,120,120,690,690,690,-692,692,692,692,692,692,692,692,692,692,692,692,692,692,692,692,-692,693,692,692,692,692,692,692,692,692,693,120,120,120,120,120,-694,694,694,694,694,694,694,694,694,694,694,694,694,694,694,694,-694,694,694,694,694,694,694,694,694,694,694,694,694,694,694,694,-694,694,694,694,694,694,695,695,695,695,695,120,120,120,120,120,--/* block 145 */-696,696,696,696,696,696,696,696,696,696,696,696,696,696,696,696,-696,696,696,696,696,696,696,696,696,696,696,696,696,696,120,697,-698,698,698,698,698,698,698,698,698,698,698,698,698,698,698,698,-698,698,698,698,698,698,698,698,698,698,698,698,698,698,698,698,-698,698,698,698,120,120,120,120,698,698,698,698,698,698,698,698,-699,700,700,700,700,700,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,--/* block 146 */-701,701,701,701,701,701,701,701,701,701,701,701,701,701,701,701,-701,701,701,701,701,701,701,701,701,701,701,701,701,701,701,701,-701,701,701,701,701,701,701,701,702,702,702,702,702,702,702,702,-702,702,702,702,702,702,702,702,702,702,702,702,702,702,702,702,-702,702,702,702,702,702,702,702,702,702,702,702,702,702,702,702,-703,703,703,703,703,703,703,703,703,703,703,703,703,703,703,703,-703,703,703,703,703,703,703,703,703,703,703,703,703,703,703,703,-703,703,703,703,703,703,703,703,703,703,703,703,703,703,703,703,--/* block 147 */-704,704,704,704,704,704,704,704,704,704,704,704,704,704,704,704,-704,704,704,704,704,704,704,704,704,704,704,704,704,704,120,120,-705,705,705,705,705,705,705,705,705,705,120,120,120,120,120,120,-706,706,706,706,706,706,706,706,706,706,706,706,706,706,706,706,-706,706,706,706,706,706,706,706,706,706,706,706,706,706,706,706,-706,706,706,706,120,120,120,120,707,707,707,707,707,707,707,707,-707,707,707,707,707,707,707,707,707,707,707,707,707,707,707,707,-707,707,707,707,707,707,707,707,707,707,707,707,120,120,120,120,--/* block 148 */-708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,-708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,-708,708,708,708,708,708,708,708,120,120,120,120,120,120,120,120,-709,709,709,709,709,709,709,709,709,709,709,709,709,709,709,709,-709,709,709,709,709,709,709,709,709,709,709,709,709,709,709,709,-709,709,709,709,709,709,709,709,709,709,709,709,709,709,709,709,-709,709,709,709,120,120,120,120,120,120,120,120,120,120,120,710,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,--/* block 149 */-711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,-711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,-711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,-711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,-711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,-711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,-711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,-711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,--/* block 150 */-711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,-711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,-711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,-711,711,711,711,711,711,711,120,120,120,120,120,120,120,120,120,-711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,-711,711,711,711,711,711,120,120,120,120,120,120,120,120,120,120,-711,711,711,711,711,711,711,711,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,--/* block 151 */-712,712,712,712,712,712,120,120,712,120,712,712,712,712,712,712,-712,712,712,712,712,712,712,712,712,712,712,712,712,712,712,712,-712,712,712,712,712,712,712,712,712,712,712,712,712,712,712,712,-712,712,712,712,712,712,120,712,712,120,120,120,712,120,120,712,-713,713,713,713,713,713,713,713,713,713,713,713,713,713,713,713,-713,713,713,713,713,713,120,714,715,715,715,715,715,715,715,715,-716,716,716,716,716,716,716,716,716,716,716,716,716,716,716,716,-716,716,716,716,716,716,716,717,717,718,718,718,718,718,718,718,--/* block 152 */-719,719,719,719,719,719,719,719,719,719,719,719,719,719,719,719,-719,719,719,719,719,719,719,719,719,719,719,719,719,719,719,120,-120,120,120,120,120,120,120,720,720,720,720,720,720,720,720,720,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-721,721,721,721,721,721,721,721,721,721,721,721,721,721,721,721,-721,721,721,120,721,721,120,120,120,120,120,722,722,722,722,722,--/* block 153 */-723,723,723,723,723,723,723,723,723,723,723,723,723,723,723,723,-723,723,723,723,723,723,724,724,724,724,724,724,120,120,120,725,-726,726,726,726,726,726,726,726,726,726,726,726,726,726,726,726,-726,726,726,726,726,726,726,726,726,726,120,120,120,120,120,727,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,--/* block 154 */-728,728,728,728,728,728,728,728,728,728,728,728,728,728,728,728,-728,728,728,728,728,728,728,728,728,728,728,728,728,728,728,728,-729,729,729,729,729,729,729,729,729,729,729,729,729,729,729,729,-729,729,729,729,729,729,729,729,120,120,120,120,730,730,729,729,-730,730,730,730,730,730,730,730,730,730,730,730,730,730,730,730,-120,120,730,730,730,730,730,730,730,730,730,730,730,730,730,730,-730,730,730,730,730,730,730,730,730,730,730,730,730,730,730,730,-730,730,730,730,730,730,730,730,730,730,730,730,730,730,730,730,--/* block 155 */-731,732,732,732,120,732,732,120,120,120,120,120,732,732,732,732,-731,731,731,731,120,731,731,731,120,731,731,731,731,731,731,731,-731,731,731,731,731,731,731,731,731,731,731,731,731,731,731,731,-731,731,731,731,731,731,120,120,732,732,732,120,120,120,120,732,-733,733,733,733,733,733,733,733,733,120,120,120,120,120,120,120,-734,734,734,734,734,734,734,734,734,120,120,120,120,120,120,120,-735,735,735,735,735,735,735,735,735,735,735,735,735,735,735,735,-735,735,735,735,735,735,735,735,735,735,735,735,735,736,736,737,--/* block 156 */-738,738,738,738,738,738,738,738,738,738,738,738,738,738,738,738,-738,738,738,738,738,738,738,738,738,738,738,738,738,739,739,739,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-740,740,740,740,740,740,740,740,741,740,740,740,740,740,740,740,-740,740,740,740,740,740,740,740,740,740,740,740,740,740,740,740,-740,740,740,740,740,742,742,120,120,120,120,743,743,743,743,743,-744,744,744,744,744,744,744,120,120,120,120,120,120,120,120,120,--/* block 157 */-745,745,745,745,745,745,745,745,745,745,745,745,745,745,745,745,-745,745,745,745,745,745,745,745,745,745,745,745,745,745,745,745,-745,745,745,745,745,745,745,745,745,745,745,745,745,745,745,745,-745,745,745,745,745,745,120,120,120,746,746,746,746,746,746,746,-747,747,747,747,747,747,747,747,747,747,747,747,747,747,747,747,-747,747,747,747,747,747,120,120,748,748,748,748,748,748,748,748,-749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,-749,749,749,120,120,120,120,120,750,750,750,750,750,750,750,750,--/* block 158 */-751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,-751,751,120,120,120,120,120,120,120,752,752,752,752,120,120,120,-120,120,120,120,120,120,120,120,120,753,753,753,753,753,753,753,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,--/* block 159 */-754,754,754,754,754,754,754,754,754,754,754,754,754,754,754,754,-754,754,754,754,754,754,754,754,754,754,754,754,754,754,754,754,-754,754,754,754,754,754,754,754,754,754,754,754,754,754,754,754,-754,754,754,754,754,754,754,754,754,754,754,754,754,754,754,754,-754,754,754,754,754,754,754,754,754,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,--/* block 160 */-755,755,755,755,755,755,755,755,755,755,755,755,755,755,755,755,-755,755,755,755,755,755,755,755,755,755,755,755,755,755,755,755,-755,755,755,755,755,755,755,755,755,755,755,755,755,755,755,755,-755,755,755,120,120,120,120,120,120,120,120,120,120,120,120,120,-756,756,756,756,756,756,756,756,756,756,756,756,756,756,756,756,-756,756,756,756,756,756,756,756,756,756,756,756,756,756,756,756,-756,756,756,756,756,756,756,756,756,756,756,756,756,756,756,756,-756,756,756,120,120,120,120,120,120,120,757,757,757,757,757,757,--/* block 161 */-758,758,758,758,758,758,758,758,758,758,758,758,758,758,758,758,-758,758,758,758,758,758,758,758,758,758,758,758,758,758,758,758,-758,758,758,758,759,759,759,759,120,120,120,120,120,120,120,120,-760,760,760,760,760,760,760,760,760,760,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,--/* block 162 */-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-761,761,761,761,761,761,761,761,761,761,761,761,761,761,761,761,-761,761,761,761,761,761,761,761,761,761,761,761,761,761,761,120,--/* block 163 */-762,762,762,762,762,762,762,762,762,762,762,762,762,762,762,762,-762,762,762,762,762,762,762,762,762,762,762,762,762,762,762,762,-762,762,762,762,762,762,762,762,762,762,120,763,763,764,120,120,-762,762,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,--/* block 164 */-765,765,765,765,765,765,765,765,765,765,765,765,765,765,765,765,-765,765,765,765,765,765,765,765,765,765,765,765,765,766,766,766,-766,766,766,766,766,766,766,765,120,120,120,120,120,120,120,120,-767,767,767,767,767,767,767,767,767,767,767,767,767,767,767,767,-767,767,767,767,767,767,768,768,768,768,768,768,768,768,768,768,-768,769,769,769,769,770,770,770,770,770,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,--/* block 165 */-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,-771,771,771,771,771,772,772,772,772,772,772,772,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,-773,773,773,773,773,773,773,120,120,120,120,120,120,120,120,120,--/* block 166 */-774,775,774,776,776,776,776,776,776,776,776,776,776,776,776,776,-776,776,776,776,776,776,776,776,776,776,776,776,776,776,776,776,-776,776,776,776,776,776,776,776,776,776,776,776,776,776,776,776,-776,776,776,776,776,776,776,776,775,775,775,775,775,775,775,775,-775,775,775,775,775,775,775,777,777,777,777,777,777,777,120,120,-120,120,778,778,778,778,778,778,778,778,778,778,778,778,778,778,-778,778,778,778,778,778,779,779,779,779,779,779,779,779,779,779,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,775,--/* block 167 */-780,780,781,782,782,782,782,782,782,782,782,782,782,782,782,782,-782,782,782,782,782,782,782,782,782,782,782,782,782,782,782,782,-782,782,782,782,782,782,782,782,782,782,782,782,782,782,782,782,-781,781,781,780,780,780,780,781,781,780,780,783,783,784,783,783,-783,783,120,120,120,120,120,120,120,120,120,120,120,784,120,120,-785,785,785,785,785,785,785,785,785,785,785,785,785,785,785,785,-785,785,785,785,785,785,785,785,785,120,120,120,120,120,120,120,-786,786,786,786,786,786,786,786,786,786,120,120,120,120,120,120,--/* block 168 */-787,787,787,788,788,788,788,788,788,788,788,788,788,788,788,788,-788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,-788,788,788,788,788,788,788,787,787,787,787,787,789,787,787,787,-787,787,787,787,787,120,790,790,790,790,790,790,790,790,790,790,-791,791,791,791,788,789,789,788,120,120,120,120,120,120,120,120,-792,792,792,792,792,792,792,792,792,792,792,792,792,792,792,792,-792,792,792,792,792,792,792,792,792,792,792,792,792,792,792,792,-792,792,792,793,794,794,792,120,120,120,120,120,120,120,120,120,--/* block 169 */-795,795,796,797,797,797,797,797,797,797,797,797,797,797,797,797,-797,797,797,797,797,797,797,797,797,797,797,797,797,797,797,797,-797,797,797,797,797,797,797,797,797,797,797,797,797,797,797,797,-797,797,797,796,796,796,795,795,795,795,795,795,795,795,795,796,-796,797,798,798,797,799,799,799,799,795,795,795,795,799,796,795,-800,800,800,800,800,800,800,800,800,800,797,799,797,799,799,799,-120,801,801,801,801,801,801,801,801,801,801,801,801,801,801,801,-801,801,801,801,801,120,120,120,120,120,120,120,120,120,120,120,--/* block 170 */-802,802,802,802,802,802,802,802,802,802,802,802,802,802,802,802,-802,802,120,802,802,802,802,802,802,802,802,802,802,802,802,802,-802,802,802,802,802,802,802,802,802,802,802,802,803,803,803,804,-804,804,803,803,804,803,804,804,805,805,805,805,805,805,804,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,--/* block 171 */-806,806,806,806,806,806,806,120,806,120,806,806,806,806,120,806,-806,806,806,806,806,806,806,806,806,806,806,806,806,806,120,806,-806,806,806,806,806,806,806,806,806,807,120,120,120,120,120,120,-808,808,808,808,808,808,808,808,808,808,808,808,808,808,808,808,-808,808,808,808,808,808,808,808,808,808,808,808,808,808,808,808,-808,808,808,808,808,808,808,808,808,808,808,808,808,808,808,809,-810,810,810,809,809,809,809,809,809,809,809,120,120,120,120,120,-811,811,811,811,811,811,811,811,811,811,120,120,120,120,120,120,--/* block 172 */-812,813,814,815,120,816,816,816,816,816,816,816,816,120,120,816,-816,120,120,816,816,816,816,816,816,816,816,816,816,816,816,816,-816,816,816,816,816,816,816,816,816,120,816,816,816,816,816,816,-816,120,816,816,120,816,816,816,816,816,120,817,813,816,818,814,-812,814,814,814,814,120,120,814,814,120,120,814,814,814,120,120,-816,120,120,120,120,120,120,818,120,120,120,120,120,816,816,816,-816,816,814,814,120,120,812,812,812,812,812,812,812,120,120,120,-812,812,812,812,812,120,120,120,120,120,120,120,120,120,120,120,--/* block 173 */-819,819,819,819,819,819,819,819,819,819,819,819,819,819,819,819,-819,819,819,819,819,819,819,819,819,819,819,819,819,819,819,819,-819,819,819,819,819,819,819,819,819,819,819,819,819,819,819,819,-819,819,819,819,819,820,820,820,821,821,821,821,821,821,821,821,-820,820,821,821,821,820,821,819,819,819,819,822,822,822,822,822,-823,823,823,823,823,823,823,823,823,823,822,822,120,822,821,819,-819,819,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,--/* block 174 */-824,824,824,824,824,824,824,824,824,824,824,824,824,824,824,824,-824,824,824,824,824,824,824,824,824,824,824,824,824,824,824,824,-824,824,824,824,824,824,824,824,824,824,824,824,824,824,824,824,-825,826,826,827,827,827,827,827,827,826,827,826,826,825,826,827,-827,826,827,827,824,824,828,824,120,120,120,120,120,120,120,120,-829,829,829,829,829,829,829,829,829,829,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,--/* block 175 */-830,830,830,830,830,830,830,830,830,830,830,830,830,830,830,830,-830,830,830,830,830,830,830,830,830,830,830,830,830,830,830,830,-830,830,830,830,830,830,830,830,830,830,830,830,830,830,830,831,-832,832,833,833,833,833,120,120,832,832,832,832,833,833,832,833,-833,834,834,834,834,834,834,834,834,834,834,834,834,834,834,834,-834,834,834,834,834,834,834,834,830,830,830,830,833,833,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,--/* block 176 */-835,835,835,835,835,835,835,835,835,835,835,835,835,835,835,835,-835,835,835,835,835,835,835,835,835,835,835,835,835,835,835,835,-835,835,835,835,835,835,835,835,835,835,835,835,835,835,835,835,-836,836,836,837,837,837,837,837,837,837,837,836,836,837,836,837,-837,838,838,838,835,120,120,120,120,120,120,120,120,120,120,120,-839,839,839,839,839,839,839,839,839,839,120,120,120,120,120,120,-394,394,394,394,394,394,394,394,394,394,394,394,394,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,--/* block 177 */-840,840,840,840,840,840,840,840,840,840,840,840,840,840,840,840,-840,840,840,840,840,840,840,840,840,840,840,840,840,840,840,840,-840,840,840,840,840,840,840,840,840,840,840,841,842,841,842,842,-841,841,841,841,841,841,842,841,840,120,120,120,120,120,120,120,-843,843,843,843,843,843,843,843,843,843,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,--/* block 178 */-844,844,844,844,844,844,844,844,844,844,844,844,844,844,844,844,-844,844,844,844,844,844,844,844,844,844,844,120,120,845,845,845,-846,846,845,845,845,845,846,845,845,845,845,845,120,120,120,120,-847,847,847,847,847,847,847,847,847,847,848,848,849,849,849,850,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,--/* block 179 */-851,851,851,851,851,851,851,851,851,851,851,851,851,851,851,851,-851,851,851,851,851,851,851,851,851,851,851,851,851,851,851,851,-851,851,851,851,851,851,851,851,851,851,851,851,852,852,852,853,-853,853,853,853,853,853,853,853,852,853,853,854,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,--/* block 180 */-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-855,855,855,855,855,855,855,855,855,855,855,855,855,855,855,855,-855,855,855,855,855,855,855,855,855,855,855,855,855,855,855,855,-856,856,856,856,856,856,856,856,856,856,856,856,856,856,856,856,-856,856,856,856,856,856,856,856,856,856,856,856,856,856,856,856,-857,857,857,857,857,857,857,857,857,857,858,858,858,858,858,858,-858,858,858,120,120,120,120,120,120,120,120,120,120,120,120,859,--/* block 181 */-860,860,860,860,860,860,860,120,120,860,120,120,860,860,860,860,-860,860,860,860,120,860,860,120,860,860,860,860,860,860,860,860,-860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,-861,862,862,862,862,862,120,862,862,120,120,863,863,862,863,864,-862,864,862,863,865,865,865,120,120,120,120,120,120,120,120,120,-866,866,866,866,866,866,866,866,866,866,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,--/* block 182 */-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-867,867,867,867,867,867,867,867,120,120,867,867,867,867,867,867,-867,867,867,867,867,867,867,867,867,867,867,867,867,867,867,867,-867,867,867,867,867,867,867,867,867,867,867,867,867,867,867,867,-867,868,868,868,869,869,869,869,120,120,869,869,868,868,868,868,-869,867,870,867,868,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,--/* block 183 */-871,872,872,872,872,872,872,872,872,872,872,871,871,871,871,871,-871,871,871,871,871,871,871,871,871,871,871,871,871,871,871,871,-871,871,871,871,871,871,871,871,871,871,871,871,871,871,871,871,-871,871,871,872,872,872,872,872,872,873,874,872,872,872,872,875,-875,875,875,875,875,875,875,872,120,120,120,120,120,120,120,120,-876,877,877,877,877,877,877,878,878,877,877,877,876,876,876,876,-876,876,876,876,876,876,876,876,876,876,876,876,876,876,876,876,-876,876,876,876,876,876,876,876,876,876,876,876,876,876,876,876,--/* block 184 */-876,876,876,876,879,879,879,879,879,879,877,877,877,877,877,877,-877,877,877,877,877,877,877,878,877,877,880,880,880,876,880,880,-880,880,880,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-881,881,881,881,881,881,881,881,881,881,881,881,881,881,881,881,-881,881,881,881,881,881,881,881,881,881,881,881,881,881,881,881,-881,881,881,881,881,881,881,881,881,881,881,881,881,881,881,881,-881,881,881,881,881,881,881,881,881,120,120,120,120,120,120,120,--/* block 185 */-882,882,882,882,882,882,882,882,882,120,882,882,882,882,882,882,-882,882,882,882,882,882,882,882,882,882,882,882,882,882,882,882,-882,882,882,882,882,882,882,882,882,882,882,882,882,882,882,883,-884,884,884,884,884,884,884,120,884,884,884,884,884,884,883,884,-882,885,885,885,885,885,120,120,120,120,120,120,120,120,120,120,-886,886,886,886,886,886,886,886,886,886,887,887,887,887,887,887,-887,887,887,887,887,887,887,887,887,887,887,887,887,120,120,120,-888,888,889,889,889,889,889,889,889,889,889,889,889,889,889,889,--/* block 186 */-889,889,889,889,889,889,889,889,889,889,889,889,889,889,889,889,-120,120,890,890,890,890,890,890,890,890,890,890,890,890,890,890,-890,890,890,890,890,890,890,890,120,891,890,890,890,890,890,890,-890,891,890,890,891,890,890,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,--/* block 187 */-892,892,892,892,892,892,892,120,892,892,120,892,892,892,892,892,-892,892,892,892,892,892,892,892,892,892,892,892,892,892,892,892,-892,892,892,892,892,892,892,892,892,892,892,892,892,892,892,892,-892,893,893,893,893,893,893,120,120,120,893,120,893,893,120,893,-893,893,893,893,893,893,894,893,120,120,120,120,120,120,120,120,-895,895,895,895,895,895,895,895,895,895,120,120,120,120,120,120,-896,896,896,896,896,896,120,896,896,120,896,896,896,896,896,896,-896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,--/* block 188 */-896,896,896,896,896,896,896,896,896,896,897,897,897,897,897,120,-898,898,120,897,897,898,897,898,896,120,120,120,120,120,120,120,-899,899,899,899,899,899,899,899,899,899,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,--/* block 189 */-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-900,900,900,900,900,900,900,900,900,900,900,900,900,900,900,900,-900,900,900,901,901,902,902,903,903,120,120,120,120,120,120,120,--/* block 190 */-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-590,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-904,904,904,904,904,904,904,904,904,904,904,904,904,904,904,904,-293,293,904,293,904,295,295,295,295,295,295,295,295,296,296,296,-296,295,295,295,295,295,295,295,295,295,295,295,295,295,295,295,-295,295,120,120,120,120,120,120,120,120,120,120,120,120,120,905,--/* block 191 */-906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,-906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,-906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,-906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,-906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,-906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,-906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,-906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,--/* block 192 */-906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,-906,906,906,906,906,906,906,906,906,906,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,--/* block 193 */-907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,-907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,-907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,-907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,-907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,-907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,-907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,120,-908,908,908,908,908,120,120,120,120,120,120,120,120,120,120,120,--/* block 194 */-906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,-906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,-906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,-906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,-906,906,906,906,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,--/* block 195 */-909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,-909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,-909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,-909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,-909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,-909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,-909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,-909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,--/* block 196 */-909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,-909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,-909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,120,-910,910,910,910,910,910,910,910,910,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,--/* block 197 */-911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,-911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,-911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,-911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,-911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,-911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,-911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,-911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,--/* block 198 */-911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,-911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,-911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,-911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,-911,911,911,911,911,911,911,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,--/* block 199 */-601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,-601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,-601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,-601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,-601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,-601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,-601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,-601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,--/* block 200 */-601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,-601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,-601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,-601,601,601,601,601,601,601,601,601,120,120,120,120,120,120,120,-912,912,912,912,912,912,912,912,912,912,912,912,912,912,912,912,-912,912,912,912,912,912,912,912,912,912,912,912,912,912,912,120,-913,913,913,913,913,913,913,913,913,913,120,120,120,120,914,914,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,--/* block 201 */-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,-915,915,915,915,915,915,915,915,915,915,915,915,915,915,120,120,-916,916,916,916,916,917,120,120,120,120,120,120,120,120,120,120,--/* block 202 */-918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,-918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,-918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,-919,919,919,919,919,919,919,920,920,920,920,920,921,921,921,921,-922,922,922,922,920,921,120,120,120,120,120,120,120,120,120,120,-923,923,923,923,923,923,923,923,923,923,120,924,924,924,924,924,-924,924,120,918,918,918,918,918,918,918,918,918,918,918,918,918,-918,918,918,918,918,918,918,918,120,120,120,120,120,918,918,918,--/* block 203 */-918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,--/* block 204 */-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-925,925,925,925,925,925,925,925,925,925,925,925,925,925,925,925,-925,925,925,925,925,925,925,925,925,925,925,925,925,925,925,925,-926,926,926,926,926,926,926,926,926,926,926,926,926,926,926,926,-926,926,926,926,926,926,926,926,926,926,926,926,926,926,926,926,--/* block 205 */-927,927,927,927,927,927,927,927,927,927,927,927,927,927,927,927,-927,927,927,927,927,927,927,928,928,928,928,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,--/* block 206 */-929,929,929,929,929,929,929,929,929,929,929,929,929,929,929,929,-929,929,929,929,929,929,929,929,929,929,929,929,929,929,929,929,-929,929,929,929,929,929,929,929,929,929,929,929,929,929,929,929,-929,929,929,929,929,929,929,929,929,929,929,929,929,929,929,929,-929,929,929,929,929,929,929,929,929,929,929,120,120,120,120,930,-929,931,931,931,931,931,931,931,931,931,931,931,931,931,931,931,-931,931,931,931,931,931,931,931,931,931,931,931,931,931,931,931,-931,931,931,931,931,931,931,931,931,931,931,931,931,931,931,931,--/* block 207 */-931,931,931,931,931,931,931,931,120,120,120,120,120,120,120,930,-930,930,930,932,932,932,932,932,932,932,932,932,932,932,932,932,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-933,934,  5,111,935,120,120,120,120,120,120,120,120,120,120,120,-936,936,120,120,120,120,120,120,120,120,120,120,120,120,120,120,--/* block 208 */-937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,-937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,-937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,-937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,-937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,-937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,-937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,-937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,--/* block 209 */-937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,-937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,-937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,-937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,-937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,-937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,-937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,-937,937,937,937,937,937,937,937,120,120,120,120,120,120,120,120,--/* block 210 */-938,938,938,938,938,938,938,938,938,938,938,938,938,938,938,938,-938,938,938,938,938,938,938,938,938,938,938,938,938,938,938,938,-938,938,938,938,938,938,938,938,938,938,938,938,938,938,938,938,-938,938,938,938,938,938,938,938,938,938,938,938,938,938,938,938,-938,938,938,938,938,938,938,938,938,938,938,938,938,938,938,938,-938,938,938,938,938,938,938,938,938,938,938,938,938,938,938,938,-938,938,938,938,938,938,938,938,938,938,938,938,938,938,938,938,-938,938,938,938,938,938,938,938,938,938,938,938,938,938,938,938,--/* block 211 */-938,938,938,938,938,938,938,938,938,938,938,938,938,938,938,938,-938,938,938,938,938,938,938,938,938,938,938,938,938,938,938,938,-938,938,938,938,938,938,938,938,938,938,938,938,938,938,938,938,-938,938,938,938,938,938,938,938,938,938,938,938,938,938,938,938,-938,938,938,938,938,938,938,938,938,938,938,938,938,938,938,938,-938,938,938,938,938,938,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,--/* block 212 */-937,937,937,937,937,937,937,937,937,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,--/* block 213 */-578,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,-573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,-573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,-573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,-573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,-573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,-573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,-573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,--/* block 214 */-573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,-573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,-573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,-573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,-573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,-573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,-573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,-573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,--/* block 215 */-573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,-573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-573,573,573,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,578,578,578,578,120,120,120,120,120,120,120,120,-939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,--/* block 216 */-939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,-939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,-939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,-939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,-939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,-939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,-939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,-939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,--/* block 217 */-939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,-939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,-939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,-939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,-939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,-939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,-939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,-939,939,939,939,939,939,939,939,939,939,939,939,120,120,120,120,--/* block 218 */-940,940,940,940,940,940,940,940,940,940,940,940,940,940,940,940,-940,940,940,940,940,940,940,940,940,940,940,940,940,940,940,940,-940,940,940,940,940,940,940,940,940,940,940,940,940,940,940,940,-940,940,940,940,940,940,940,940,940,940,940,940,940,940,940,940,-940,940,940,940,940,940,940,940,940,940,940,940,940,940,940,940,-940,940,940,940,940,940,940,940,940,940,940,940,940,940,940,940,-940,940,940,940,940,940,940,940,940,940,940,120,120,120,120,120,-940,940,940,940,940,940,940,940,940,940,940,940,940,120,120,120,--/* block 219 */-940,940,940,940,940,940,940,940,940,120,120,120,120,120,120,120,-940,940,940,940,940,940,940,940,940,940,120,120,941,942,942,943,-944,944,944,944,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,--/* block 220 */- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,- 20, 20, 20, 20, 20, 20,120,120,120,120,120,120,120,120,120,120,--/* block 221 */- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,- 20, 20, 20, 20, 20, 20, 20,120,120, 20, 20, 20, 20, 20, 20, 20,- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,- 20, 20, 20, 20, 20,945,946,113,113,113, 20, 20, 20,946,945,945,-945,945,945, 24, 24, 24, 24, 24, 24, 24, 24,113,113,113,113,113,--/* block 222 */-113,113,113, 20, 20,113,113,113,113,113,113,113, 20, 20, 20, 20,- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,113,113,113,113, 20, 20,- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,- 20, 20, 20, 20, 20, 20, 20, 20, 20,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,--/* block 223 */-685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,-685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,-685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,-685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,-685,685,947,947,947,685,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,--/* block 224 */-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,- 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,- 25, 25, 25, 25,120,120,120,120,120,120,120,120,120,120,120,120,--/* block 225 */- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,- 20, 20, 20, 20, 20, 20, 20,120,120,120,120,120,120,120,120,120,-582,582,582,582,582,582,582,582,582,582,582,582,582,582,582,582,-582,582, 25, 25, 25, 25, 25, 25, 25,120,120,120,120,120,120,120,--/* block 226 */-513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,-513,513,513,513,513,513,513,513,513,513,514,514,514,514,514,514,-514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,-514,514,514,514,513,513,513,513,513,513,513,513,513,513,513,513,-513,513,513,513,513,513,513,513,513,513,513,513,513,513,514,514,-514,514,514,514,514,120,514,514,514,514,514,514,514,514,514,514,-514,514,514,514,514,514,514,514,513,513,513,513,513,513,513,513,-513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,--/* block 227 */-513,513,514,514,514,514,514,514,514,514,514,514,514,514,514,514,-514,514,514,514,514,514,514,514,514,514,514,514,513,120,513,513,-120,120,513,120,120,513,513,120,120,513,513,513,513,120,513,513,-513,513,513,513,513,513,514,514,514,514,120,514,120,514,514,514,-514,514,514,514,120,514,514,514,514,514,514,514,514,514,514,514,-513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,-513,513,513,513,513,513,513,513,513,513,514,514,514,514,514,514,-514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,--/* block 228 */-514,514,514,514,513,513,120,513,513,513,513,120,120,513,513,513,-513,513,513,513,513,120,513,513,513,513,513,513,513,120,514,514,-514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,-514,514,514,514,514,514,514,514,513,513,120,513,513,513,513,120,-513,513,513,513,513,120,513,120,120,120,513,513,513,513,513,513,-513,120,514,514,514,514,514,514,514,514,514,514,514,514,514,514,-514,514,514,514,514,514,514,514,514,514,514,514,513,513,513,513,-513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,--/* block 229 */-513,513,513,513,513,513,514,514,514,514,514,514,514,514,514,514,-514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,-513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,-513,513,513,513,513,513,513,513,513,513,514,514,514,514,514,514,-514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,-514,514,514,514,513,513,513,513,513,513,513,513,513,513,513,513,-513,513,513,513,513,513,513,513,513,513,513,513,513,513,514,514,-514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,--/* block 230 */-514,514,514,514,514,514,514,514,513,513,513,513,513,513,513,513,-513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,-513,513,514,514,514,514,514,514,514,514,514,514,514,514,514,514,-514,514,514,514,514,514,514,514,514,514,514,514,513,513,513,513,-513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,-513,513,513,513,513,513,514,514,514,514,514,514,514,514,514,514,-514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,-513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,--/* block 231 */-513,513,513,513,513,513,513,513,513,513,514,514,514,514,514,514,-514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,-514,514,514,514,514,514,120,120,513,513,513,513,513,513,513,513,-513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,-513,  9,514,514,514,514,514,514,514,514,514,514,514,514,514,514,-514,514,514,514,514,514,514,514,514,514,514,  9,514,514,514,514,-514,514,513,513,513,513,513,513,513,513,513,513,513,513,513,513,-513,513,513,513,513,513,513,513,513,513,513,  9,514,514,514,514,--/* block 232 */-514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,-514,514,514,514,514,  9,514,514,514,514,514,514,513,513,513,513,-513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,-513,513,513,513,513,  9,514,514,514,514,514,514,514,514,514,514,-514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,  9,-514,514,514,514,514,514,513,513,513,513,513,513,513,513,513,513,-513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,  9,-514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,--/* block 233 */-514,514,514,514,514,514,514,514,514,  9,514,514,514,514,514,514,-513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,-513,513,513,513,513,513,513,513,513,  9,514,514,514,514,514,514,-514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,-514,514,514,  9,514,514,514,514,514,514,513,514,120,120, 11, 11,- 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,- 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,- 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,--/* block 234 */-948,948,948,948,948,948,948,948,948,948,948,948,948,948,948,948,-948,948,948,948,948,948,948,948,948,948,948,948,948,948,948,948,-948,948,948,948,948,948,948,948,948,948,948,948,948,948,948,948,-948,948,948,948,948,948,948,948,948,948,948,948,948,948,948,948,-948,948,948,948,948,948,948,948,948,948,948,948,948,948,948,948,-948,948,948,948,948,948,948,948,948,948,948,948,948,948,948,948,-948,948,948,948,948,948,948,948,948,948,948,948,948,948,948,948,-948,948,948,948,948,948,948,948,948,948,948,948,948,948,948,948,--/* block 235 */-949,949,949,949,949,949,949,949,949,949,949,949,949,949,949,949,-949,949,949,949,949,949,949,949,949,949,949,949,949,949,949,949,-949,949,949,949,949,949,949,949,949,949,949,949,949,949,949,949,-949,949,949,949,949,949,949,948,948,948,948,949,949,949,949,949,-949,949,949,949,949,949,949,949,949,949,949,949,949,949,949,949,-949,949,949,949,949,949,949,949,949,949,949,949,949,949,949,949,-949,949,949,949,949,949,949,949,949,949,949,949,949,948,948,948,-948,948,948,948,948,949,948,948,948,948,948,948,948,948,948,948,--/* block 236 */-948,948,948,948,949,948,948,950,950,950,950,950,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,949,949,949,949,949,-120,949,949,949,949,949,949,949,949,949,949,949,949,949,949,949,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,--/* block 237 */-951,951,951,951,951,951,951,120,951,951,951,951,951,951,951,951,-951,951,951,951,951,951,951,951,951,120,120,951,951,951,951,951,-951,951,120,951,951,120,951,951,951,951,951,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,--/* block 238 */-952,952,952,952,952,952,952,952,952,952,952,952,952,952,952,952,-952,952,952,952,952,952,952,952,952,952,952,952,952,952,952,952,-952,952,952,952,952,952,952,952,952,952,952,952,952,120,120,120,-953,953,953,953,953,953,953,954,954,954,954,954,954,954,120,120,-955,955,955,955,955,955,955,955,955,955,120,120,120,120,952,956,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,--/* block 239 */-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,-957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,-957,957,957,957,957,957,957,957,957,957,957,957,958,958,958,958,-959,959,959,959,959,959,959,959,959,959,120,120,120,120,120,960,--/* block 240 */-961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,-961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,-961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,-961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,-961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,-961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,-961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,-961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,--/* block 241 */-961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,-961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,-961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,-961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,-961,961,961,961,961,120,120,962,962,962,962,962,962,962,962,962,-963,963,963,963,963,963,963,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,--/* block 242 */-964,964,964,964,964,964,964,964,964,964,964,964,964,964,964,964,-964,964,964,964,964,964,964,964,964,964,964,964,964,964,964,964,-964,964,965,965,965,965,965,965,965,965,965,965,965,965,965,965,-965,965,965,965,965,965,965,965,965,965,965,965,965,965,965,965,-965,965,965,965,966,966,966,966,966,966,966,967,120,120,120,120,-968,968,968,968,968,968,968,968,968,968,120,120,120,120,969,969,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,--/* block 243 */-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,--/* block 244 */- 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,- 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,- 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 20, 25, 25, 25,-  6, 25, 25, 25, 25,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,--/* block 245 */-120, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,- 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,- 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 20, 25,- 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,--/* block 246 */-224,224,224,224,120,224,224,224,224,224,224,224,224,224,224,224,-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,-120,224,224,120,224,120,120,224,120,224,224,224,224,224,224,224,-224,224,224,120,224,224,224,224,120,224,120,224,120,120,120,120,-120,120,224,120,120,120,120,224,120,224,120,224,120,224,224,224,-120,224,224,120,224,120,120,224,120,224,120,224,120,224,120,224,-120,224,224,120,224,120,120,224,224,224,224,120,224,224,224,224,-224,224,224,120,224,224,224,224,120,224,224,224,224,120,224,120,--/* block 247 */-224,224,224,224,224,224,224,224,224,224,120,224,224,224,224,224,-224,224,224,224,224,224,224,224,224,224,224,224,120,120,120,120,-120,224,224,224,120,224,224,224,224,224,120,224,224,224,224,224,-224,224,224,224,224,224,224,224,224,224,224,224,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-217,217,120,120,120,120,120,120,120,120,120,120,120,120,120,120,--/* block 248 */- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,970,970,970,970,- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,--/* block 249 */- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,- 21, 21, 21, 21,970,970,970,970,970,970,970,970,970,970,970,970,- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,970,-970, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,-970, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,-970, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,- 21, 21, 21, 21, 21, 21,970,970,970,970,970,970,970,970,970,970,--/* block 250 */- 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 21, 21, 21,- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21,- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21, 21, 21, 21,- 21, 21, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21, 21,--/* block 251 */- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21, 20,- 20, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 20, 20, 20, 20, 20,- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21,970,970,-970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,-970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,-970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,-970,970,970,970,970,970,971,971,971,971,971,971,971,971,971,971,-971,971,971,971,971,971,971,971,971,971,971,971,971,971,971,971,--/* block 252 */-972, 21, 21,970,970,970,970,970,970,970,970,970,970,970,970,970,- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21, 20, 20, 20, 20, 20,- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21,- 20, 20, 21, 21, 21, 21, 21, 21, 21, 21, 21, 20,970,970,970,970,- 20, 20, 20, 20, 20, 20, 20, 20, 20,970,970,970,970,970,970,970,-584,584,970,970,970,970,970,970,970,970,970,970,970,970,970,970,- 21, 21, 21, 21, 21, 21,970,970,970,970,970,970,970,970,970,970,-970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,--/* block 253 */-970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,-970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,-970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,-970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,-970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,-970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,-970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,-970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,--/* block 254 */- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,--/* block 255 */- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,973,973,973,973,973,--/* block 256 */- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 20, 20,- 20, 20, 20, 20, 20, 20, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,--/* block 257 */- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,--/* block 258 */- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,- 21, 21, 21, 21, 21, 21, 21, 21,970,970,970,970,970,970,970,970,- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,970,970,970,- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,970,970,970,--/* block 259 */- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,- 20, 20, 20, 20,970,970,970,970,970,970,970,970,970,970,970,970,--/* block 260 */- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,- 20, 20, 20, 20, 20, 21, 21, 21, 21,970,970,970,970,970,970,970,- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,970,970,970,970,-970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,--/* block 261 */- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,970,970,970,970,- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,- 20, 20, 20, 20, 20, 20, 20, 20,970,970,970,970,970,970,970,970,- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,970,970,970,970,970,970,- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,--/* block 262 */- 20, 20, 20, 20, 20, 20, 20, 20,970,970,970,970,970,970,970,970,- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,970,970,- 21, 21,970,970,970,970,970,970,970,970,970,970,970,970,970,970,-970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,-970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,-970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,-970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,--/* block 263 */- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21, 21, 21, 21,- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 20, 21, 21, 21, 21,- 21, 21, 21, 21, 21, 21, 20, 21, 21, 21, 21, 21, 21, 21, 21, 21,- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,- 21, 21, 21, 21, 21, 21, 21, 21, 21,970, 21, 21, 21, 21, 21, 21,--/* block 264 */- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,970, 21, 21, 21,- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,--/* block 265 */- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,- 21, 21, 21, 21,970,970,970,970,970,970,970,970,970,970,970,970,- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,970,970,- 21, 21, 21, 21, 21,970,970,970, 21, 21, 21,970,970,970,970,970,--/* block 266 */- 21, 21, 21, 21, 21, 21, 21,970,970,970,970,970,970,970,970,970,- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,- 21, 21, 21, 21, 21, 21, 21, 21, 21,970,970,970,970,970,970,970,- 21, 21, 21, 21, 21, 21, 21,970,970,970,970,970,970,970,970,970,- 21, 21, 21,970,970,970,970,970,970,970,970,970,970,970,970,970,- 21, 21, 21, 21, 21, 21, 21,970,970,970,970,970,970,970,970,970,-970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,-970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,--/* block 267 */- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,- 20, 20, 20,120, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,- 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,120,120,120,120,120,120,--/* block 268 */-970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,-970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,-970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,-970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,-970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,-970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,-970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,-970,970,970,970,970,970,970,970,970,970,970,970,970,970,120,120,--/* block 269 */-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,-586,586,586,586,586,586,586,586,586,586,586,586,586,586,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,--/* block 270 */-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,-586,586,586,586,586,120,120,120,120,120,120,120,120,120,120,120,-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,--/* block 271 */-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,-586,586,586,586,586,586,586,586,586,586,586,586,586,586,120,120,-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,--/* block 272 */-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,-586,586,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,--/* block 273 */-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,-586,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,--/* block 274 */-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,-586,586,586,586,586,586,586,586,586,586,586,586,586,586,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,--/* block 275 */-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,-586,586,586,586,586,586,586,586,586,586,586,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,--/* block 276 */-511, 24,511,511,511,511,511,511,511,511,511,511,511,511,511,511,-511,511,511,511,511,511,511,511,511,511,511,511,511,511,511,511,-974,974,974,974,974,974,974,974,974,974,974,974,974,974,974,974,-974,974,974,974,974,974,974,974,974,974,974,974,974,974,974,974,-974,974,974,974,974,974,974,974,974,974,974,974,974,974,974,974,-974,974,974,974,974,974,974,974,974,974,974,974,974,974,974,974,-974,974,974,974,974,974,974,974,974,974,974,974,974,974,974,974,-974,974,974,974,974,974,974,974,974,974,974,974,974,974,974,974,--/* block 277 */-511,511,511,511,511,511,511,511,511,511,511,511,511,511,511,511,-511,511,511,511,511,511,511,511,511,511,511,511,511,511,511,511,-511,511,511,511,511,511,511,511,511,511,511,511,511,511,511,511,-511,511,511,511,511,511,511,511,511,511,511,511,511,511,511,511,-511,511,511,511,511,511,511,511,511,511,511,511,511,511,511,511,-511,511,511,511,511,511,511,511,511,511,511,511,511,511,511,511,-511,511,511,511,511,511,511,511,511,511,511,511,511,511,511,511,-511,511,511,511,511,511,511,511,511,511,511,511,511,511,511,511,--/* block 278 */-113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,-113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,-113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,-113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,-113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,-113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,-113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,-113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,--/* block 279 */-113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,-113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,-113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,-113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,-113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,-113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,-113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,-511,511,511,511,511,511,511,511,511,511,511,511,511,511,511,511,--/* block 280 */-673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,-673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,-673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,-673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,-673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,-673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,-673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,-673,673,673,673,673,673,673,673,673,673,673,673,673,673,120,120,+/* Total size: 102844 bytes, block size: 128. */++/* The tables herein are needed only when UCP support is built,+and in PCRE2 that happens automatically with UTF support.+This module should not be referenced otherwise, so+it should not matter whether it is compiled or not. However+a comment was received about space saving - maybe the guy linked+all the modules rather than using a library - so we include a+condition to cut out the tables when not needed. But don't leave+a totally empty module because some compilers barf at that.+Instead, just supply some small dummy tables. */++#ifndef SUPPORT_UNICODE+const ucd_record PRIV(ucd_records)[] = {{0,0,0,0,0,0,0 }};+const uint16_t PRIV(ucd_stage1)[] = {0};+const uint16_t PRIV(ucd_stage2)[] = {0};+const uint32_t PRIV(ucd_caseless_sets)[] = {0};+#else++const char *PRIV(unicode_version) = "14.0.0";++/* If the 32-bit library is run in non-32-bit mode, character values+greater than 0x10ffff may be encountered. For these we set up a+special record. */++#if PCRE2_CODE_UNIT_WIDTH == 32+const ucd_record PRIV(dummy_ucd_record)[] = {{+  ucp_Unknown,    /* script */+  ucp_Cn,         /* type unassigned */+  ucp_gbOther,    /* grapheme break property */+  0,              /* case set */+  0,              /* other case */+  ucp_Unknown,    /* script extension */+  0,              /* dummy filler */+  }};+#endif++/* When recompiling tables with a new Unicode version, please check the+types in this structure definition from pcre2_internal.h (the actual+field names will be different):++typedef struct {+uint8_t property_0;+uint8_t property_1;+uint8_t property_2;+uint8_t property_3;+pcre_int32 property_4;+pcre_int16 property_5;+uint16_t property_6;+} ucd_record;+*/++/* This table contains lists of characters that are caseless sets of+more than one character. Each list is terminated by NOTACHAR. */++const uint32_t PRIV(ucd_caseless_sets)[] = {+  NOTACHAR,+  0x0053,   0x0073,   0x017f,   NOTACHAR,+  0x01c4,   0x01c5,   0x01c6,   NOTACHAR,+  0x01c7,   0x01c8,   0x01c9,   NOTACHAR,+  0x01ca,   0x01cb,   0x01cc,   NOTACHAR,+  0x01f1,   0x01f2,   0x01f3,   NOTACHAR,+  0x0345,   0x0399,   0x03b9,   0x1fbe,   NOTACHAR,+  0x00b5,   0x039c,   0x03bc,   NOTACHAR,+  0x03a3,   0x03c2,   0x03c3,   NOTACHAR,+  0x0392,   0x03b2,   0x03d0,   NOTACHAR,+  0x0398,   0x03b8,   0x03d1,   0x03f4,   NOTACHAR,+  0x03a6,   0x03c6,   0x03d5,   NOTACHAR,+  0x03a0,   0x03c0,   0x03d6,   NOTACHAR,+  0x039a,   0x03ba,   0x03f0,   NOTACHAR,+  0x03a1,   0x03c1,   0x03f1,   NOTACHAR,+  0x0395,   0x03b5,   0x03f5,   NOTACHAR,+  0x0412,   0x0432,   0x1c80,   NOTACHAR,+  0x0414,   0x0434,   0x1c81,   NOTACHAR,+  0x041e,   0x043e,   0x1c82,   NOTACHAR,+  0x0421,   0x0441,   0x1c83,   NOTACHAR,+  0x0422,   0x0442,   0x1c84,   0x1c85,   NOTACHAR,+  0x042a,   0x044a,   0x1c86,   NOTACHAR,+  0x0462,   0x0463,   0x1c87,   NOTACHAR,+  0x1e60,   0x1e61,   0x1e9b,   NOTACHAR,+  0x03a9,   0x03c9,   0x2126,   NOTACHAR,+  0x004b,   0x006b,   0x212a,   NOTACHAR,+  0x00c5,   0x00e5,   0x212b,   NOTACHAR,+  0x1c88,   0xa64a,   0xa64b,   NOTACHAR,+};++/* When #included in pcre2test, we don't need the table of digit+sets, nor the the large main UCD tables. */++#ifndef PCRE2_PCRE2TEST++/* This table lists the code points for the '9' characters in each+set of decimal digits. It is used to ensure that all the digits in+a script run come from the same set. */++const uint32_t PRIV(ucd_digit_sets)[] = {+  66,  /* Number of subsequent values */+  0x00039, 0x00669, 0x006f9, 0x007c9, 0x0096f, 0x009ef, 0x00a6f, 0x00aef,+  0x00b6f, 0x00bef, 0x00c6f, 0x00cef, 0x00d6f, 0x00def, 0x00e59, 0x00ed9,+  0x00f29, 0x01049, 0x01099, 0x017e9, 0x01819, 0x0194f, 0x019d9, 0x01a89,+  0x01a99, 0x01b59, 0x01bb9, 0x01c49, 0x01c59, 0x0a629, 0x0a8d9, 0x0a909,+  0x0a9d9, 0x0a9f9, 0x0aa59, 0x0abf9, 0x0ff19, 0x104a9, 0x10d39, 0x1106f,+  0x110f9, 0x1113f, 0x111d9, 0x112f9, 0x11459, 0x114d9, 0x11659, 0x116c9,+  0x11739, 0x118e9, 0x11959, 0x11c59, 0x11d59, 0x11da9, 0x16a69, 0x16ac9,+  0x16b59, 0x1d7d7, 0x1d7e1, 0x1d7eb, 0x1d7f5, 0x1d7ff, 0x1e149, 0x1e2f9,+  0x1e959, 0x1fbf9,+};++/* This vector is a list of lists of scripts for the Script Extension+property. Each sublist is zero-terminated. */++const uint8_t PRIV(ucd_script_sets)[] = {+  /*   0 */   0,+  /*   1 */   1,  11,   0,+  /*   4 */   1, 144,   0,+  /*   7 */   1,  64,   0,+  /*  10 */   1,  50,   0,+  /*  13 */   1,  56,   0,+  /*  16 */   3,  15,   0,+  /*  19 */   4,  23,   0,+  /*  22 */   6,  84,   0,+  /*  25 */  12,  36,   0,+  /*  28 */  13,  18,   0,+  /*  31 */  13,  34,   0,+  /*  34 */  13, 118,   0,+  /*  37 */  13,  50,   0,+  /*  40 */  15, 107,   0,+  /*  43 */  15, 150,   0,+  /*  46 */  15, 100,   0,+  /*  49 */  15,  54,   0,+  /*  52 */  17,  34,   0,+  /*  55 */ 107,  54,   0,+  /*  58 */  21, 108,   0,+  /*  61 */  22, 129,   0,+  /*  64 */  23,  34,   0,+  /*  67 */  27,  30,   0,+  /*  70 */  29, 150,   0,+  /*  73 */  34,  38,   0,+  /*  76 */ 112, 158,   0,+  /*  79 */  38,  65,   0,+  /*  82 */   1,  50,  56,   0,+  /*  86 */   1,  56, 156,   0,+  /*  90 */   3,  96,  49,   0,+  /*  94 */  96,  39,  53,   0,+  /*  98 */ 157,  12,  36,   0,+  /* 102 */  12, 110,  36,   0,+  /* 106 */  15, 107,  29,   0,+  /* 110 */  15, 107,  34,   0,+  /* 114 */  23,  27,  30,   0,+  /* 118 */  69,  34,  39,   0,+  /* 122 */   3,  15, 107,  29,   0,+  /* 127 */   7,  25,  52,  51,   0,+  /* 132 */  15, 142,  85, 111,   0,+  /* 137 */   4,  24,  23,  27,  30,   0,+  /* 143 */   1,  64, 144,  50,  56, 156,   0,+  /* 150 */   4,  24,  23,  27,  30,  61,   0,+  /* 157 */  15,  29,  37,  44,  54,  55,   0,+  /* 164 */ 132,   1,  64, 144,  50,  56, 156,   0,+  /* 172 */   3,  15, 107,  29, 150,  44,  55, 124,   0,+  /* 181 */ 132,   1,  95, 112, 158, 121, 144, 148,  50,   0,+  /* 191 */  15, 142,  21,  22, 108,  85, 111, 114, 109, 102, 124,   0,+  /* 203 */   3,  15, 107,  21,  22,  29,  34,  37,  44,  54,  55, 124,   0,+  /* 216 */   3,  15, 107,  21,  22,  29,  34,  37,  44, 100,  54,  55, 124,   0,+  /* 230 */  15, 142,  21,  22, 108,  29,  85, 111, 114, 150, 109, 102, 124,   0,+  /* 244 */  15, 142,  21,  22, 108,  29,  85, 111,  37, 114, 150, 109, 102, 124,   0,+  /* 259 */   3,  15, 142, 143, 138, 107,  21,  22,  29, 111,  37, 150,  44, 109,  48,  49, 102,  54,  55, 124,   0,+  /* 280 */   3,  15, 142, 143, 138, 107,  21,  22,  29,  35, 111,  37, 150,  44, 109,  48,  49, 102,  54,  55, 124,   0,+  /* 302 */+};++/* These are the main two-stage UCD tables. The fields in each record are:+script (8 bits), character type (8 bits), grapheme break property (8 bits),+offset to multichar other cases or zero (8 bits), offset to other case+or zero (32 bits, signed), script extension (16 bits, signed), and a dummy+16-bit field to make the whole thing a multiple of 4 bytes. */++const ucd_record PRIV(ucd_records)[] = { /* 11964 bytes, record size 12 */+  {    10,      0,      2,      0,      0,     10,    256, }, /*   0 */+  {    10,      0,      2,      0,      0,     10,      0, }, /*   1 */+  {    10,      0,      1,      0,      0,     10,      0, }, /*   2 */+  {    10,      0,      0,      0,      0,     10,      0, }, /*   3 */+  {    10,     29,     12,      0,      0,     10,      0, }, /*   4 */+  {    10,     21,     12,      0,      0,     10,      0, }, /*   5 */+  {    10,     23,     12,      0,      0,     10,      0, }, /*   6 */+  {    10,     22,     12,      0,      0,     10,      0, }, /*   7 */+  {    10,     18,     12,      0,      0,     10,      0, }, /*   8 */+  {    10,     25,     12,      0,      0,     10,      0, }, /*   9 */+  {    10,     17,     12,      0,      0,     10,      0, }, /*  10 */+  {    10,     13,     12,      0,      0,     10,      0, }, /*  11 */+  {    34,      9,     12,      0,     32,     34,      0, }, /*  12 */+  {    34,      9,     12,    100,     32,     34,      0, }, /*  13 */+  {    34,      9,     12,      1,     32,     34,      0, }, /*  14 */+  {    10,     24,     12,      0,      0,     10,      0, }, /*  15 */+  {    10,     16,     12,      0,      0,     10,      0, }, /*  16 */+  {    34,      5,     12,      0,    -32,     34,      0, }, /*  17 */+  {    34,      5,     12,    100,    -32,     34,      0, }, /*  18 */+  {    34,      5,     12,      1,    -32,     34,      0, }, /*  19 */+  {    10,     26,     12,      0,      0,     10,      0, }, /*  20 */+  {    10,     26,     14,      0,      0,     10,      0, }, /*  21 */+  {    34,      7,     12,      0,      0,     34,      0, }, /*  22 */+  {    10,     20,     12,      0,      0,     10,      0, }, /*  23 */+  {    10,      1,      2,      0,      0,     10,      0, }, /*  24 */+  {    10,     15,     12,      0,      0,     10,      0, }, /*  25 */+  {    10,      5,     12,     26,    775,     10,      0, }, /*  26 */+  {    10,     19,     12,      0,      0,     10,      0, }, /*  27 */+  {    34,      9,     12,    104,     32,     34,      0, }, /*  28 */+  {    34,      5,     12,      0,   7615,     34,      0, }, /*  29 */+  {    34,      5,     12,    104,    -32,     34,      0, }, /*  30 */+  {    34,      5,     12,      0,    121,     34,      0, }, /*  31 */+  {    34,      9,     12,      0,      1,     34,      0, }, /*  32 */+  {    34,      5,     12,      0,     -1,     34,      0, }, /*  33 */+  {    34,      9,     12,      0,      0,     34,      0, }, /*  34 */+  {    34,      5,     12,      0,      0,     34,      0, }, /*  35 */+  {    34,      9,     12,      0,   -121,     34,      0, }, /*  36 */+  {    34,      5,     12,      1,   -268,     34,      0, }, /*  37 */+  {    34,      5,     12,      0,    195,     34,      0, }, /*  38 */+  {    34,      9,     12,      0,    210,     34,      0, }, /*  39 */+  {    34,      9,     12,      0,    206,     34,      0, }, /*  40 */+  {    34,      9,     12,      0,    205,     34,      0, }, /*  41 */+  {    34,      9,     12,      0,     79,     34,      0, }, /*  42 */+  {    34,      9,     12,      0,    202,     34,      0, }, /*  43 */+  {    34,      9,     12,      0,    203,     34,      0, }, /*  44 */+  {    34,      9,     12,      0,    207,     34,      0, }, /*  45 */+  {    34,      5,     12,      0,     97,     34,      0, }, /*  46 */+  {    34,      9,     12,      0,    211,     34,      0, }, /*  47 */+  {    34,      9,     12,      0,    209,     34,      0, }, /*  48 */+  {    34,      5,     12,      0,    163,     34,      0, }, /*  49 */+  {    34,      9,     12,      0,    213,     34,      0, }, /*  50 */+  {    34,      5,     12,      0,    130,     34,      0, }, /*  51 */+  {    34,      9,     12,      0,    214,     34,      0, }, /*  52 */+  {    34,      9,     12,      0,    218,     34,      0, }, /*  53 */+  {    34,      9,     12,      0,    217,     34,      0, }, /*  54 */+  {    34,      9,     12,      0,    219,     34,      0, }, /*  55 */+  {    34,      5,     12,      0,     56,     34,      0, }, /*  56 */+  {    34,      9,     12,      5,      2,     34,      0, }, /*  57 */+  {    34,      8,     12,      5,      1,     34,      0, }, /*  58 */+  {    34,      5,     12,      5,     -2,     34,      0, }, /*  59 */+  {    34,      9,     12,      9,      2,     34,      0, }, /*  60 */+  {    34,      8,     12,      9,      1,     34,      0, }, /*  61 */+  {    34,      5,     12,      9,     -2,     34,      0, }, /*  62 */+  {    34,      9,     12,     13,      2,     34,      0, }, /*  63 */+  {    34,      8,     12,     13,      1,     34,      0, }, /*  64 */+  {    34,      5,     12,     13,     -2,     34,      0, }, /*  65 */+  {    34,      5,     12,      0,    -79,     34,      0, }, /*  66 */+  {    34,      9,     12,     17,      2,     34,      0, }, /*  67 */+  {    34,      8,     12,     17,      1,     34,      0, }, /*  68 */+  {    34,      5,     12,     17,     -2,     34,      0, }, /*  69 */+  {    34,      9,     12,      0,    -97,     34,      0, }, /*  70 */+  {    34,      9,     12,      0,    -56,     34,      0, }, /*  71 */+  {    34,      9,     12,      0,   -130,     34,      0, }, /*  72 */+  {    34,      9,     12,      0,  10795,     34,      0, }, /*  73 */+  {    34,      9,     12,      0,   -163,     34,      0, }, /*  74 */+  {    34,      9,     12,      0,  10792,     34,      0, }, /*  75 */+  {    34,      5,     12,      0,  10815,     34,      0, }, /*  76 */+  {    34,      9,     12,      0,   -195,     34,      0, }, /*  77 */+  {    34,      9,     12,      0,     69,     34,      0, }, /*  78 */+  {    34,      9,     12,      0,     71,     34,      0, }, /*  79 */+  {    34,      5,     12,      0,  10783,     34,      0, }, /*  80 */+  {    34,      5,     12,      0,  10780,     34,      0, }, /*  81 */+  {    34,      5,     12,      0,  10782,     34,      0, }, /*  82 */+  {    34,      5,     12,      0,   -210,     34,      0, }, /*  83 */+  {    34,      5,     12,      0,   -206,     34,      0, }, /*  84 */+  {    34,      5,     12,      0,   -205,     34,      0, }, /*  85 */+  {    34,      5,     12,      0,   -202,     34,      0, }, /*  86 */+  {    34,      5,     12,      0,   -203,     34,      0, }, /*  87 */+  {    34,      5,     12,      0,  42319,     34,      0, }, /*  88 */+  {    34,      5,     12,      0,  42315,     34,      0, }, /*  89 */+  {    34,      5,     12,      0,   -207,     34,      0, }, /*  90 */+  {    34,      5,     12,      0,  42280,     34,      0, }, /*  91 */+  {    34,      5,     12,      0,  42308,     34,      0, }, /*  92 */+  {    34,      5,     12,      0,   -209,     34,      0, }, /*  93 */+  {    34,      5,     12,      0,   -211,     34,      0, }, /*  94 */+  {    34,      5,     12,      0,  10743,     34,      0, }, /*  95 */+  {    34,      5,     12,      0,  42305,     34,      0, }, /*  96 */+  {    34,      5,     12,      0,  10749,     34,      0, }, /*  97 */+  {    34,      5,     12,      0,   -213,     34,      0, }, /*  98 */+  {    34,      5,     12,      0,   -214,     34,      0, }, /*  99 */+  {    34,      5,     12,      0,  10727,     34,      0, }, /* 100 */+  {    34,      5,     12,      0,   -218,     34,      0, }, /* 101 */+  {    34,      5,     12,      0,  42307,     34,      0, }, /* 102 */+  {    34,      5,     12,      0,  42282,     34,      0, }, /* 103 */+  {    34,      5,     12,      0,    -69,     34,      0, }, /* 104 */+  {    34,      5,     12,      0,   -217,     34,      0, }, /* 105 */+  {    34,      5,     12,      0,    -71,     34,      0, }, /* 106 */+  {    34,      5,     12,      0,   -219,     34,      0, }, /* 107 */+  {    34,      5,     12,      0,  42261,     34,      0, }, /* 108 */+  {    34,      5,     12,      0,  42258,     34,      0, }, /* 109 */+  {    34,      6,     12,      0,      0,     34,      0, }, /* 110 */+  {    10,      6,     12,      0,      0,     10,      0, }, /* 111 */+  {     4,     24,     12,      0,      0,      4,      0, }, /* 112 */+  {    28,     12,      3,      0,      0,     28,      0, }, /* 113 */+  {    28,     12,      3,      0,      0,     20,      0, }, /* 114 */+  {    28,     12,      3,     21,    116,     20,      0, }, /* 115 */+  {    28,     12,      3,      0,      0,     34,      0, }, /* 116 */+  {    20,      9,     12,      0,      1,     20,      0, }, /* 117 */+  {    20,      5,     12,      0,     -1,     20,      0, }, /* 118 */+  {    20,     24,     12,      0,      0,     20,      0, }, /* 119 */+  {     0,      2,     12,      0,      0,      0,      0, }, /* 120 */+  {    20,      6,     12,      0,      0,     20,      0, }, /* 121 */+  {    20,      5,     12,      0,    130,     20,      0, }, /* 122 */+  {    20,      9,     12,      0,    116,     20,      0, }, /* 123 */+  {    20,      9,     12,      0,     38,     20,      0, }, /* 124 */+  {    20,      9,     12,      0,     37,     20,      0, }, /* 125 */+  {    20,      9,     12,      0,     64,     20,      0, }, /* 126 */+  {    20,      9,     12,      0,     63,     20,      0, }, /* 127 */+  {    20,      5,     12,      0,      0,     20,      0, }, /* 128 */+  {    20,      9,     12,      0,     32,     20,      0, }, /* 129 */+  {    20,      9,     12,     34,     32,     20,      0, }, /* 130 */+  {    20,      9,     12,     59,     32,     20,      0, }, /* 131 */+  {    20,      9,     12,     38,     32,     20,      0, }, /* 132 */+  {    20,      9,     12,     21,     32,     20,      0, }, /* 133 */+  {    20,      9,     12,     51,     32,     20,      0, }, /* 134 */+  {    20,      9,     12,     26,     32,     20,      0, }, /* 135 */+  {    20,      9,     12,     47,     32,     20,      0, }, /* 136 */+  {    20,      9,     12,     55,     32,     20,      0, }, /* 137 */+  {    20,      9,     12,     30,     32,     20,      0, }, /* 138 */+  {    20,      9,     12,     43,     32,     20,      0, }, /* 139 */+  {    20,      9,     12,     96,     32,     20,      0, }, /* 140 */+  {    20,      5,     12,      0,    -38,     20,      0, }, /* 141 */+  {    20,      5,     12,      0,    -37,     20,      0, }, /* 142 */+  {    20,      5,     12,      0,    -32,     20,      0, }, /* 143 */+  {    20,      5,     12,     34,    -32,     20,      0, }, /* 144 */+  {    20,      5,     12,     59,    -32,     20,      0, }, /* 145 */+  {    20,      5,     12,     38,    -32,     20,      0, }, /* 146 */+  {    20,      5,     12,     21,   -116,     20,      0, }, /* 147 */+  {    20,      5,     12,     51,    -32,     20,      0, }, /* 148 */+  {    20,      5,     12,     26,   -775,     20,      0, }, /* 149 */+  {    20,      5,     12,     47,    -32,     20,      0, }, /* 150 */+  {    20,      5,     12,     55,    -32,     20,      0, }, /* 151 */+  {    20,      5,     12,     30,      1,     20,      0, }, /* 152 */+  {    20,      5,     12,     30,    -32,     20,      0, }, /* 153 */+  {    20,      5,     12,     43,    -32,     20,      0, }, /* 154 */+  {    20,      5,     12,     96,    -32,     20,      0, }, /* 155 */+  {    20,      5,     12,      0,    -64,     20,      0, }, /* 156 */+  {    20,      5,     12,      0,    -63,     20,      0, }, /* 157 */+  {    20,      9,     12,      0,      8,     20,      0, }, /* 158 */+  {    20,      5,     12,     34,    -30,     20,      0, }, /* 159 */+  {    20,      5,     12,     38,    -25,     20,      0, }, /* 160 */+  {    20,      9,     12,      0,      0,     20,      0, }, /* 161 */+  {    20,      5,     12,     43,    -15,     20,      0, }, /* 162 */+  {    20,      5,     12,     47,    -22,     20,      0, }, /* 163 */+  {    20,      5,     12,      0,     -8,     20,      0, }, /* 164 */+  {    11,      9,     12,      0,      1,     11,      0, }, /* 165 */+  {    11,      5,     12,      0,     -1,     11,      0, }, /* 166 */+  {    20,      5,     12,     51,    -54,     20,      0, }, /* 167 */+  {    20,      5,     12,     55,    -48,     20,      0, }, /* 168 */+  {    20,      5,     12,      0,      7,     20,      0, }, /* 169 */+  {    20,      5,     12,      0,   -116,     20,      0, }, /* 170 */+  {    20,      9,     12,     38,    -60,     20,      0, }, /* 171 */+  {    20,      5,     12,     59,    -64,     20,      0, }, /* 172 */+  {    20,     25,     12,      0,      0,     20,      0, }, /* 173 */+  {    20,      9,     12,      0,     -7,     20,      0, }, /* 174 */+  {    20,      9,     12,      0,   -130,     20,      0, }, /* 175 */+  {    13,      9,     12,      0,     80,     13,      0, }, /* 176 */+  {    13,      9,     12,      0,     32,     13,      0, }, /* 177 */+  {    13,      9,     12,     63,     32,     13,      0, }, /* 178 */+  {    13,      9,     12,     67,     32,     13,      0, }, /* 179 */+  {    13,      9,     12,     71,     32,     13,      0, }, /* 180 */+  {    13,      9,     12,     75,     32,     13,      0, }, /* 181 */+  {    13,      9,     12,     79,     32,     13,      0, }, /* 182 */+  {    13,      9,     12,     84,     32,     13,      0, }, /* 183 */+  {    13,      5,     12,      0,    -32,     13,      0, }, /* 184 */+  {    13,      5,     12,     63,    -32,     13,      0, }, /* 185 */+  {    13,      5,     12,     67,    -32,     13,      0, }, /* 186 */+  {    13,      5,     12,     71,    -32,     13,      0, }, /* 187 */+  {    13,      5,     12,     75,    -32,     13,      0, }, /* 188 */+  {    13,      5,     12,     79,    -32,     13,      0, }, /* 189 */+  {    13,      5,     12,     84,    -32,     13,      0, }, /* 190 */+  {    13,      5,     12,      0,    -80,     13,      0, }, /* 191 */+  {    13,      9,     12,      0,      1,     13,      0, }, /* 192 */+  {    13,      5,     12,      0,     -1,     13,      0, }, /* 193 */+  {    13,      9,     12,     88,      1,     13,      0, }, /* 194 */+  {    13,      5,     12,     88,     -1,     13,      0, }, /* 195 */+  {    13,     26,     12,      0,      0,     13,      0, }, /* 196 */+  {    13,     12,      3,      0,      0,    -34,      0, }, /* 197 */+  {    13,     12,      3,      0,      0,    -28,      0, }, /* 198 */+  {    28,     12,      3,      0,      0,    -31,      0, }, /* 199 */+  {    13,     11,      3,      0,      0,     13,      0, }, /* 200 */+  {    13,      9,     12,      0,     15,     13,      0, }, /* 201 */+  {    13,      5,     12,      0,    -15,     13,      0, }, /* 202 */+  {     2,      9,     12,      0,     48,      2,      0, }, /* 203 */+  {     2,      6,     12,      0,      0,      2,      0, }, /* 204 */+  {     2,     21,     12,      0,      0,      2,      0, }, /* 205 */+  {     2,      5,     12,      0,      0,      2,      0, }, /* 206 */+  {     2,      5,     12,      0,    -48,      2,      0, }, /* 207 */+  {     2,     17,     12,      0,      0,      2,      0, }, /* 208 */+  {     2,     26,     12,      0,      0,      2,      0, }, /* 209 */+  {     2,     23,     12,      0,      0,      2,      0, }, /* 210 */+  {    26,     12,      3,      0,      0,     26,      0, }, /* 211 */+  {    26,     17,     12,      0,      0,     26,      0, }, /* 212 */+  {    26,     21,     12,      0,      0,     26,      0, }, /* 213 */+  {    26,      7,     12,      0,      0,     26,      0, }, /* 214 */+  {     1,      1,      4,      0,      0,      1,      0, }, /* 215 */+  {    10,      1,      4,      0,      0,     10,      0, }, /* 216 */+  {     1,     25,     12,      0,      0,      1,      0, }, /* 217 */+  {     1,     21,     12,      0,      0,      1,      0, }, /* 218 */+  {     1,     23,     12,      0,      0,      1,      0, }, /* 219 */+  {    10,     21,     12,      0,      0,   -143,      0, }, /* 220 */+  {     1,     26,     12,      0,      0,      1,      0, }, /* 221 */+  {     1,     12,      3,      0,      0,      1,      0, }, /* 222 */+  {     1,      1,      2,      0,      0,    -82,      0, }, /* 223 */+  {    10,     21,     12,      0,      0,   -164,      0, }, /* 224 */+  {     1,      7,     12,      0,      0,      1,      0, }, /* 225 */+  {    10,      6,     12,      0,      0,   -181,      0, }, /* 226 */+  {    28,     12,      3,      0,      0,    -10,      0, }, /* 227 */+  {     1,     13,     12,      0,      0,    -86,      0, }, /* 228 */+  {     1,     21,     12,      0,      0,     -4,      0, }, /* 229 */+  {     1,      6,     12,      0,      0,      1,      0, }, /* 230 */+  {     1,     13,     12,      0,      0,      1,      0, }, /* 231 */+  {    50,     21,     12,      0,      0,     50,      0, }, /* 232 */+  {    50,      1,      4,      0,      0,     50,      0, }, /* 233 */+  {    50,      7,     12,      0,      0,     50,      0, }, /* 234 */+  {    50,     12,      3,      0,      0,     50,      0, }, /* 235 */+  {    56,      7,     12,      0,      0,     56,      0, }, /* 236 */+  {    56,     12,      3,      0,      0,     56,      0, }, /* 237 */+  {    64,     13,     12,      0,      0,     64,      0, }, /* 238 */+  {    64,      7,     12,      0,      0,     64,      0, }, /* 239 */+  {    64,     12,      3,      0,      0,     64,      0, }, /* 240 */+  {    64,      6,     12,      0,      0,     64,      0, }, /* 241 */+  {    64,     26,     12,      0,      0,     64,      0, }, /* 242 */+  {    64,     21,     12,      0,      0,     64,      0, }, /* 243 */+  {    64,     23,     12,      0,      0,     64,      0, }, /* 244 */+  {    90,      7,     12,      0,      0,     90,      0, }, /* 245 */+  {    90,     12,      3,      0,      0,     90,      0, }, /* 246 */+  {    90,      6,     12,      0,      0,     90,      0, }, /* 247 */+  {    90,     21,     12,      0,      0,     90,      0, }, /* 248 */+  {    95,      7,     12,      0,      0,     95,      0, }, /* 249 */+  {    95,     12,      3,      0,      0,     95,      0, }, /* 250 */+  {    95,     21,     12,      0,      0,     95,      0, }, /* 251 */+  {     1,     24,     12,      0,      0,      1,      0, }, /* 252 */+  {    15,     12,      3,      0,      0,     15,      0, }, /* 253 */+  {    15,     10,      5,      0,      0,     15,      0, }, /* 254 */+  {    15,      7,     12,      0,      0,     15,      0, }, /* 255 */+  {    28,     12,      3,      0,      0,   -216,      0, }, /* 256 */+  {    28,     12,      3,      0,      0,   -203,      0, }, /* 257 */+  {    10,     21,     12,      0,      0,   -259,      0, }, /* 258 */+  {    10,     21,     12,      0,      0,   -280,      0, }, /* 259 */+  {    15,     13,     12,      0,      0,   -132,      0, }, /* 260 */+  {    15,     21,     12,      0,      0,     15,      0, }, /* 261 */+  {    15,      6,     12,      0,      0,     15,      0, }, /* 262 */+  {     3,      7,     12,      0,      0,      3,      0, }, /* 263 */+  {     3,     12,      3,      0,      0,      3,      0, }, /* 264 */+  {     3,     10,      5,      0,      0,      3,      0, }, /* 265 */+  {     3,     10,      3,      0,      0,      3,      0, }, /* 266 */+  {     3,     13,     12,      0,      0,    -90,      0, }, /* 267 */+  {     3,     23,     12,      0,      0,      3,      0, }, /* 268 */+  {     3,     15,     12,      0,      0,      3,      0, }, /* 269 */+  {     3,     26,     12,      0,      0,      3,      0, }, /* 270 */+  {     3,     21,     12,      0,      0,      3,      0, }, /* 271 */+  {    22,     12,      3,      0,      0,     22,      0, }, /* 272 */+  {    22,     10,      5,      0,      0,     22,      0, }, /* 273 */+  {    22,      7,     12,      0,      0,     22,      0, }, /* 274 */+  {    22,     13,     12,      0,      0,    -61,      0, }, /* 275 */+  {    22,     21,     12,      0,      0,     22,      0, }, /* 276 */+  {    21,     12,      3,      0,      0,     21,      0, }, /* 277 */+  {    21,     10,      5,      0,      0,     21,      0, }, /* 278 */+  {    21,      7,     12,      0,      0,     21,      0, }, /* 279 */+  {    21,     13,     12,      0,      0,    -58,      0, }, /* 280 */+  {    21,     21,     12,      0,      0,     21,      0, }, /* 281 */+  {    21,     23,     12,      0,      0,     21,      0, }, /* 282 */+  {    44,     12,      3,      0,      0,     44,      0, }, /* 283 */+  {    44,     10,      5,      0,      0,     44,      0, }, /* 284 */+  {    44,      7,     12,      0,      0,     44,      0, }, /* 285 */+  {    44,     10,      3,      0,      0,     44,      0, }, /* 286 */+  {    44,     13,     12,      0,      0,     44,      0, }, /* 287 */+  {    44,     26,     12,      0,      0,     44,      0, }, /* 288 */+  {    44,     15,     12,      0,      0,     44,      0, }, /* 289 */+  {    54,     12,      3,      0,      0,     54,      0, }, /* 290 */+  {    54,      7,     12,      0,      0,     54,      0, }, /* 291 */+  {    54,     10,      3,      0,      0,     54,      0, }, /* 292 */+  {    54,     10,      5,      0,      0,     54,      0, }, /* 293 */+  {    54,     13,     12,      0,      0,    -55,      0, }, /* 294 */+  {    54,     15,     12,      0,      0,    -55,      0, }, /* 295 */+  {    54,     26,     12,      0,      0,    -55,      0, }, /* 296 */+  {    54,     26,     12,      0,      0,     54,      0, }, /* 297 */+  {    54,     23,     12,      0,      0,     54,      0, }, /* 298 */+  {    55,     12,      3,      0,      0,     55,      0, }, /* 299 */+  {    55,     10,      5,      0,      0,     55,      0, }, /* 300 */+  {    55,      7,     12,      0,      0,     55,      0, }, /* 301 */+  {    55,     13,     12,      0,      0,     55,      0, }, /* 302 */+  {    55,     21,     12,      0,      0,     55,      0, }, /* 303 */+  {    55,     15,     12,      0,      0,     55,      0, }, /* 304 */+  {    55,     26,     12,      0,      0,     55,      0, }, /* 305 */+  {    29,      7,     12,      0,      0,     29,      0, }, /* 306 */+  {    29,     12,      3,      0,      0,     29,      0, }, /* 307 */+  {    29,     10,      5,      0,      0,     29,      0, }, /* 308 */+  {    29,     21,     12,      0,      0,     29,      0, }, /* 309 */+  {    29,     10,      3,      0,      0,     29,      0, }, /* 310 */+  {    29,     13,     12,      0,      0,    -70,      0, }, /* 311 */+  {    37,     12,      3,      0,      0,     37,      0, }, /* 312 */+  {    37,     10,      5,      0,      0,     37,      0, }, /* 313 */+  {    37,      7,     12,      0,      0,     37,      0, }, /* 314 */+  {    37,     10,      3,      0,      0,     37,      0, }, /* 315 */+  {    37,      7,      4,      0,      0,     37,      0, }, /* 316 */+  {    37,     26,     12,      0,      0,     37,      0, }, /* 317 */+  {    37,     15,     12,      0,      0,     37,      0, }, /* 318 */+  {    37,     13,     12,      0,      0,     37,      0, }, /* 319 */+  {    48,     12,      3,      0,      0,     48,      0, }, /* 320 */+  {    48,     10,      5,      0,      0,     48,      0, }, /* 321 */+  {    48,      7,     12,      0,      0,     48,      0, }, /* 322 */+  {    48,     10,      3,      0,      0,     48,      0, }, /* 323 */+  {    48,     13,     12,      0,      0,     48,      0, }, /* 324 */+  {    48,     21,     12,      0,      0,     48,      0, }, /* 325 */+  {    57,      7,     12,      0,      0,     57,      0, }, /* 326 */+  {    57,     12,      3,      0,      0,     57,      0, }, /* 327 */+  {    57,      7,      5,      0,      0,     57,      0, }, /* 328 */+  {    57,      6,     12,      0,      0,     57,      0, }, /* 329 */+  {    57,     21,     12,      0,      0,     57,      0, }, /* 330 */+  {    57,     13,     12,      0,      0,     57,      0, }, /* 331 */+  {    33,      7,     12,      0,      0,     33,      0, }, /* 332 */+  {    33,     12,      3,      0,      0,     33,      0, }, /* 333 */+  {    33,      7,      5,      0,      0,     33,      0, }, /* 334 */+  {    33,      6,     12,      0,      0,     33,      0, }, /* 335 */+  {    33,     13,     12,      0,      0,     33,      0, }, /* 336 */+  {    58,      7,     12,      0,      0,     58,      0, }, /* 337 */+  {    58,     26,     12,      0,      0,     58,      0, }, /* 338 */+  {    58,     21,     12,      0,      0,     58,      0, }, /* 339 */+  {    58,     12,      3,      0,      0,     58,      0, }, /* 340 */+  {    58,     13,     12,      0,      0,     58,      0, }, /* 341 */+  {    58,     15,     12,      0,      0,     58,      0, }, /* 342 */+  {    58,     22,     12,      0,      0,     58,      0, }, /* 343 */+  {    58,     18,     12,      0,      0,     58,      0, }, /* 344 */+  {    58,     10,      5,      0,      0,     58,      0, }, /* 345 */+  {    39,      7,     12,      0,      0,     39,      0, }, /* 346 */+  {    39,     10,     12,      0,      0,     39,      0, }, /* 347 */+  {    39,     12,      3,      0,      0,     39,      0, }, /* 348 */+  {    39,     10,      5,      0,      0,     39,      0, }, /* 349 */+  {    39,     13,     12,      0,      0,    -94,      0, }, /* 350 */+  {    39,     21,     12,      0,      0,     39,      0, }, /* 351 */+  {    39,     13,     12,      0,      0,     39,      0, }, /* 352 */+  {    39,     26,     12,      0,      0,     39,      0, }, /* 353 */+  {    17,      9,     12,      0,   7264,     17,      0, }, /* 354 */+  {    17,      5,     12,      0,   3008,     17,      0, }, /* 355 */+  {    10,     21,     12,      0,      0,    -52,      0, }, /* 356 */+  {    17,      6,     12,      0,      0,     17,      0, }, /* 357 */+  {    24,      7,      6,      0,      0,     24,      0, }, /* 358 */+  {    24,      7,      7,      0,      0,     24,      0, }, /* 359 */+  {    24,      7,      8,      0,      0,     24,      0, }, /* 360 */+  {    16,      7,     12,      0,      0,     16,      0, }, /* 361 */+  {    16,     12,      3,      0,      0,     16,      0, }, /* 362 */+  {    16,     21,     12,      0,      0,     16,      0, }, /* 363 */+  {    16,     15,     12,      0,      0,     16,      0, }, /* 364 */+  {    16,     26,     12,      0,      0,     16,      0, }, /* 365 */+  {     9,      9,     12,      0,  38864,      9,      0, }, /* 366 */+  {     9,      9,     12,      0,      8,      9,      0, }, /* 367 */+  {     9,      5,     12,      0,     -8,      9,      0, }, /* 368 */+  {     8,     17,     12,      0,      0,      8,      0, }, /* 369 */+  {     8,      7,     12,      0,      0,      8,      0, }, /* 370 */+  {     8,     26,     12,      0,      0,      8,      0, }, /* 371 */+  {     8,     21,     12,      0,      0,      8,      0, }, /* 372 */+  {    41,     29,     12,      0,      0,     41,      0, }, /* 373 */+  {    41,      7,     12,      0,      0,     41,      0, }, /* 374 */+  {    41,     22,     12,      0,      0,     41,      0, }, /* 375 */+  {    41,     18,     12,      0,      0,     41,      0, }, /* 376 */+  {    46,      7,     12,      0,      0,     46,      0, }, /* 377 */+  {    46,     14,     12,      0,      0,     46,      0, }, /* 378 */+  {    51,      7,     12,      0,      0,     51,      0, }, /* 379 */+  {    51,     12,      3,      0,      0,     51,      0, }, /* 380 */+  {    51,     10,      5,      0,      0,     51,      0, }, /* 381 */+  {    25,      7,     12,      0,      0,     25,      0, }, /* 382 */+  {    25,     12,      3,      0,      0,     25,      0, }, /* 383 */+  {    25,     10,      5,      0,      0,     25,      0, }, /* 384 */+  {    10,     21,     12,      0,      0,   -127,      0, }, /* 385 */+  {     7,      7,     12,      0,      0,      7,      0, }, /* 386 */+  {     7,     12,      3,      0,      0,      7,      0, }, /* 387 */+  {    52,      7,     12,      0,      0,     52,      0, }, /* 388 */+  {    52,     12,      3,      0,      0,     52,      0, }, /* 389 */+  {    32,      7,     12,      0,      0,     32,      0, }, /* 390 */+  {    32,     12,      3,      0,      0,     32,      0, }, /* 391 */+  {    32,     10,      5,      0,      0,     32,      0, }, /* 392 */+  {    32,     21,     12,      0,      0,     32,      0, }, /* 393 */+  {    32,      6,     12,      0,      0,     32,      0, }, /* 394 */+  {    32,     23,     12,      0,      0,     32,      0, }, /* 395 */+  {    32,     13,     12,      0,      0,     32,      0, }, /* 396 */+  {    32,     15,     12,      0,      0,     32,      0, }, /* 397 */+  {    38,     21,     12,      0,      0,     38,      0, }, /* 398 */+  {    10,     21,     12,      0,      0,    -79,      0, }, /* 399 */+  {    38,     17,     12,      0,      0,     38,      0, }, /* 400 */+  {    38,     12,      3,      0,      0,     38,      0, }, /* 401 */+  {    38,      1,      2,      0,      0,     38,      0, }, /* 402 */+  {    38,     13,     12,      0,      0,     38,      0, }, /* 403 */+  {    38,      7,     12,      0,      0,     38,      0, }, /* 404 */+  {    38,      6,     12,      0,      0,     38,      0, }, /* 405 */+  {    35,      7,     12,      0,      0,     35,      0, }, /* 406 */+  {    35,     12,      3,      0,      0,     35,      0, }, /* 407 */+  {    35,     10,      5,      0,      0,     35,      0, }, /* 408 */+  {    35,     26,     12,      0,      0,     35,      0, }, /* 409 */+  {    35,     21,     12,      0,      0,     35,      0, }, /* 410 */+  {    35,     13,     12,      0,      0,     35,      0, }, /* 411 */+  {    53,      7,     12,      0,      0,     53,      0, }, /* 412 */+  {    40,      7,     12,      0,      0,     40,      0, }, /* 413 */+  {    40,     13,     12,      0,      0,     40,      0, }, /* 414 */+  {    40,     15,     12,      0,      0,     40,      0, }, /* 415 */+  {    40,     26,     12,      0,      0,     40,      0, }, /* 416 */+  {    32,     26,     12,      0,      0,     32,      0, }, /* 417 */+  {     6,      7,     12,      0,      0,      6,      0, }, /* 418 */+  {     6,     12,      3,      0,      0,      6,      0, }, /* 419 */+  {     6,     10,      5,      0,      0,      6,      0, }, /* 420 */+  {     6,     21,     12,      0,      0,      6,      0, }, /* 421 */+  {    91,      7,     12,      0,      0,     91,      0, }, /* 422 */+  {    91,     10,      5,      0,      0,     91,      0, }, /* 423 */+  {    91,     12,      3,      0,      0,     91,      0, }, /* 424 */+  {    91,     10,     12,      0,      0,     91,      0, }, /* 425 */+  {    91,     13,     12,      0,      0,     91,      0, }, /* 426 */+  {    91,     21,     12,      0,      0,     91,      0, }, /* 427 */+  {    91,      6,     12,      0,      0,     91,      0, }, /* 428 */+  {    28,     11,      3,      0,      0,     28,      0, }, /* 429 */+  {    62,     12,      3,      0,      0,     62,      0, }, /* 430 */+  {    62,     10,      5,      0,      0,     62,      0, }, /* 431 */+  {    62,      7,     12,      0,      0,     62,      0, }, /* 432 */+  {    62,     10,      3,      0,      0,     62,      0, }, /* 433 */+  {    62,     13,     12,      0,      0,     62,      0, }, /* 434 */+  {    62,     21,     12,      0,      0,     62,      0, }, /* 435 */+  {    62,     26,     12,      0,      0,     62,      0, }, /* 436 */+  {    76,     12,      3,      0,      0,     76,      0, }, /* 437 */+  {    76,     10,      5,      0,      0,     76,      0, }, /* 438 */+  {    76,      7,     12,      0,      0,     76,      0, }, /* 439 */+  {    76,     13,     12,      0,      0,     76,      0, }, /* 440 */+  {    93,      7,     12,      0,      0,     93,      0, }, /* 441 */+  {    93,     12,      3,      0,      0,     93,      0, }, /* 442 */+  {    93,     10,      5,      0,      0,     93,      0, }, /* 443 */+  {    93,     21,     12,      0,      0,     93,      0, }, /* 444 */+  {    70,      7,     12,      0,      0,     70,      0, }, /* 445 */+  {    70,     10,      5,      0,      0,     70,      0, }, /* 446 */+  {    70,     12,      3,      0,      0,     70,      0, }, /* 447 */+  {    70,     21,     12,      0,      0,     70,      0, }, /* 448 */+  {    70,     13,     12,      0,      0,     70,      0, }, /* 449 */+  {    73,     13,     12,      0,      0,     73,      0, }, /* 450 */+  {    73,      7,     12,      0,      0,     73,      0, }, /* 451 */+  {    73,      6,     12,      0,      0,     73,      0, }, /* 452 */+  {    73,     21,     12,      0,      0,     73,      0, }, /* 453 */+  {    13,      5,     12,     63,  -6222,     13,      0, }, /* 454 */+  {    13,      5,     12,     67,  -6221,     13,      0, }, /* 455 */+  {    13,      5,     12,     71,  -6212,     13,      0, }, /* 456 */+  {    13,      5,     12,     75,  -6210,     13,      0, }, /* 457 */+  {    13,      5,     12,     79,  -6210,     13,      0, }, /* 458 */+  {    13,      5,     12,     79,  -6211,     13,      0, }, /* 459 */+  {    13,      5,     12,     84,  -6204,     13,      0, }, /* 460 */+  {    13,      5,     12,     88,  -6180,     13,      0, }, /* 461 */+  {    13,      5,     12,    108,  35267,     13,      0, }, /* 462 */+  {    17,      9,     12,      0,  -3008,     17,      0, }, /* 463 */+  {    76,     21,     12,      0,      0,     76,      0, }, /* 464 */+  {    28,     12,      3,      0,      0,   -122,      0, }, /* 465 */+  {    28,     12,      3,      0,      0,     15,      0, }, /* 466 */+  {    10,     21,     12,      0,      0,    -40,      0, }, /* 467 */+  {    28,     12,      3,      0,      0,    -16,      0, }, /* 468 */+  {    28,     12,      3,      0,      0,    -46,      0, }, /* 469 */+  {    28,     12,      3,      0,      0,   -157,      0, }, /* 470 */+  {    10,     10,      5,      0,      0,    -16,      0, }, /* 471 */+  {    10,      7,     12,      0,      0,    -43,      0, }, /* 472 */+  {    10,      7,     12,      0,      0,    -16,      0, }, /* 473 */+  {    10,      7,     12,      0,      0,     15,      0, }, /* 474 */+  {    10,      7,     12,      0,      0,   -172,      0, }, /* 475 */+  {    10,      7,     12,      0,      0,    -40,      0, }, /* 476 */+  {    28,     12,      3,      0,      0,   -106,      0, }, /* 477 */+  {    10,     10,      5,      0,      0,      3,      0, }, /* 478 */+  {    28,     12,      3,      0,      0,    -40,      0, }, /* 479 */+  {    10,      7,     12,      0,      0,    150,      0, }, /* 480 */+  {    13,      5,     12,      0,      0,     13,      0, }, /* 481 */+  {    13,      6,     12,      0,      0,     13,      0, }, /* 482 */+  {    34,      5,     12,      0,  35332,     34,      0, }, /* 483 */+  {    34,      5,     12,      0,   3814,     34,      0, }, /* 484 */+  {    34,      5,     12,      0,  35384,     34,      0, }, /* 485 */+  {    28,     12,      3,      0,      0,    -37,      0, }, /* 486 */+  {    28,     12,      3,      0,      0,     50,      0, }, /* 487 */+  {    34,      9,     12,     92,      1,     34,      0, }, /* 488 */+  {    34,      5,     12,     92,     -1,     34,      0, }, /* 489 */+  {    34,      5,     12,     92,    -58,     34,      0, }, /* 490 */+  {    34,      9,     12,      0,  -7615,     34,      0, }, /* 491 */+  {    20,      5,     12,      0,      8,     20,      0, }, /* 492 */+  {    20,      9,     12,      0,     -8,     20,      0, }, /* 493 */+  {    20,      5,     12,      0,     74,     20,      0, }, /* 494 */+  {    20,      5,     12,      0,     86,     20,      0, }, /* 495 */+  {    20,      5,     12,      0,    100,     20,      0, }, /* 496 */+  {    20,      5,     12,      0,    128,     20,      0, }, /* 497 */+  {    20,      5,     12,      0,    112,     20,      0, }, /* 498 */+  {    20,      5,     12,      0,    126,     20,      0, }, /* 499 */+  {    20,      8,     12,      0,     -8,     20,      0, }, /* 500 */+  {    20,      5,     12,      0,      9,     20,      0, }, /* 501 */+  {    20,      9,     12,      0,    -74,     20,      0, }, /* 502 */+  {    20,      8,     12,      0,     -9,     20,      0, }, /* 503 */+  {    20,      5,     12,     21,  -7173,     20,      0, }, /* 504 */+  {    20,      9,     12,      0,    -86,     20,      0, }, /* 505 */+  {    20,      9,     12,      0,   -100,     20,      0, }, /* 506 */+  {    20,      9,     12,      0,   -112,     20,      0, }, /* 507 */+  {    20,      9,     12,      0,   -128,     20,      0, }, /* 508 */+  {    20,      9,     12,      0,   -126,     20,      0, }, /* 509 */+  {    28,      1,      3,      0,      0,     28,      0, }, /* 510 */+  {    28,      1,     13,      0,      0,     28,      0, }, /* 511 */+  {    10,     27,      2,      0,      0,     10,      0, }, /* 512 */+  {    10,     28,      2,      0,      0,     10,      0, }, /* 513 */+  {    10,     29,     12,      0,      0,    -73,      0, }, /* 514 */+  {    10,     21,     14,      0,      0,     10,      0, }, /* 515 */+  {     0,      2,      2,      0,      0,      0,      0, }, /* 516 */+  {    28,     12,      3,      0,      0,   -110,      0, }, /* 517 */+  {    10,      9,     12,      0,      0,     10,      0, }, /* 518 */+  {    10,      5,     12,      0,      0,     10,      0, }, /* 519 */+  {    20,      9,     12,     96,  -7517,     20,      0, }, /* 520 */+  {    34,      9,     12,    100,  -8383,     34,      0, }, /* 521 */+  {    34,      9,     12,    104,  -8262,     34,      0, }, /* 522 */+  {    34,      9,     12,      0,     28,     34,      0, }, /* 523 */+  {    10,      7,     12,      0,      0,     10,      0, }, /* 524 */+  {    10,      5,     14,      0,      0,     10,      0, }, /* 525 */+  {    34,      5,     12,      0,    -28,     34,      0, }, /* 526 */+  {    34,     14,     12,      0,     16,     34,      0, }, /* 527 */+  {    34,     14,     12,      0,    -16,     34,      0, }, /* 528 */+  {    34,     14,     12,      0,      0,     34,      0, }, /* 529 */+  {    10,     25,     14,      0,      0,     10,      0, }, /* 530 */+  {    10,     26,     12,      0,     26,     10,      0, }, /* 531 */+  {    10,     26,     14,      0,     26,     10,      0, }, /* 532 */+  {    10,     26,     12,      0,    -26,     10,      0, }, /* 533 */+  {     5,     26,     12,      0,      0,      5,      0, }, /* 534 */+  {    18,      9,     12,      0,     48,     18,      0, }, /* 535 */+  {    18,      5,     12,      0,    -48,     18,      0, }, /* 536 */+  {    34,      9,     12,      0, -10743,     34,      0, }, /* 537 */+  {    34,      9,     12,      0,  -3814,     34,      0, }, /* 538 */+  {    34,      9,     12,      0, -10727,     34,      0, }, /* 539 */+  {    34,      5,     12,      0, -10795,     34,      0, }, /* 540 */+  {    34,      5,     12,      0, -10792,     34,      0, }, /* 541 */+  {    34,      9,     12,      0, -10780,     34,      0, }, /* 542 */+  {    34,      9,     12,      0, -10749,     34,      0, }, /* 543 */+  {    34,      9,     12,      0, -10783,     34,      0, }, /* 544 */+  {    34,      9,     12,      0, -10782,     34,      0, }, /* 545 */+  {    34,      9,     12,      0, -10815,     34,      0, }, /* 546 */+  {    11,      5,     12,      0,      0,     11,      0, }, /* 547 */+  {    11,     26,     12,      0,      0,     11,      0, }, /* 548 */+  {    11,     12,      3,      0,      0,     11,      0, }, /* 549 */+  {    11,     21,     12,      0,      0,     11,      0, }, /* 550 */+  {    11,     15,     12,      0,      0,     11,      0, }, /* 551 */+  {    17,      5,     12,      0,  -7264,     17,      0, }, /* 552 */+  {    59,      7,     12,      0,      0,     59,      0, }, /* 553 */+  {    59,      6,     12,      0,      0,     59,      0, }, /* 554 */+  {    59,     21,     12,      0,      0,     59,      0, }, /* 555 */+  {    59,     12,      3,      0,      0,     59,      0, }, /* 556 */+  {    13,     12,      3,      0,      0,     13,      0, }, /* 557 */+  {    10,     21,     12,      0,      0,    -28,      0, }, /* 558 */+  {    23,     26,     12,      0,      0,     23,      0, }, /* 559 */+  {    10,     21,     12,      0,      0,   -150,      0, }, /* 560 */+  {    10,     21,     12,      0,      0,   -137,      0, }, /* 561 */+  {    23,      6,     12,      0,      0,     23,      0, }, /* 562 */+  {    10,      7,     12,      0,      0,     23,      0, }, /* 563 */+  {    23,     14,     12,      0,      0,     23,      0, }, /* 564 */+  {    10,     22,     12,      0,      0,   -150,      0, }, /* 565 */+  {    10,     18,     12,      0,      0,   -150,      0, }, /* 566 */+  {    10,     26,     12,      0,      0,   -137,      0, }, /* 567 */+  {    10,     17,     12,      0,      0,   -137,      0, }, /* 568 */+  {    10,     22,     12,      0,      0,   -137,      0, }, /* 569 */+  {    10,     18,     12,      0,      0,   -137,      0, }, /* 570 */+  {    28,     12,      3,      0,      0,    -19,      0, }, /* 571 */+  {    24,     10,      3,      0,      0,     24,      0, }, /* 572 */+  {    10,     17,     14,      0,      0,   -137,      0, }, /* 573 */+  {    10,      6,     12,      0,      0,    -67,      0, }, /* 574 */+  {    10,      7,     12,      0,      0,   -114,      0, }, /* 575 */+  {    10,     21,     14,      0,      0,   -114,      0, }, /* 576 */+  {    10,     26,     12,      0,      0,     23,      0, }, /* 577 */+  {    27,      7,     12,      0,      0,     27,      0, }, /* 578 */+  {    28,     12,      3,      0,      0,    -67,      0, }, /* 579 */+  {    10,     24,     12,      0,      0,    -67,      0, }, /* 580 */+  {    27,      6,     12,      0,      0,     27,      0, }, /* 581 */+  {    10,     17,     12,      0,      0,    -67,      0, }, /* 582 */+  {    30,      7,     12,      0,      0,     30,      0, }, /* 583 */+  {    30,      6,     12,      0,      0,     30,      0, }, /* 584 */+  {     4,      7,     12,      0,      0,      4,      0, }, /* 585 */+  {    24,      7,     12,      0,      0,     24,      0, }, /* 586 */+  {    10,     15,     12,      0,      0,     23,      0, }, /* 587 */+  {    24,     26,     12,      0,      0,     24,      0, }, /* 588 */+  {    10,     26,     14,      0,      0,     23,      0, }, /* 589 */+  {    30,     26,     12,      0,      0,     30,      0, }, /* 590 */+  {    23,      7,     12,      0,      0,     23,      0, }, /* 591 */+  {    61,      7,     12,      0,      0,     61,      0, }, /* 592 */+  {    61,      6,     12,      0,      0,     61,      0, }, /* 593 */+  {    61,     26,     12,      0,      0,     61,      0, }, /* 594 */+  {    86,      7,     12,      0,      0,     86,      0, }, /* 595 */+  {    86,      6,     12,      0,      0,     86,      0, }, /* 596 */+  {    86,     21,     12,      0,      0,     86,      0, }, /* 597 */+  {    77,      7,     12,      0,      0,     77,      0, }, /* 598 */+  {    77,      6,     12,      0,      0,     77,      0, }, /* 599 */+  {    77,     21,     12,      0,      0,     77,      0, }, /* 600 */+  {    77,     13,     12,      0,      0,     77,      0, }, /* 601 */+  {    13,      9,     12,    108,      1,     13,      0, }, /* 602 */+  {    13,      5,     12,    108, -35267,     13,      0, }, /* 603 */+  {    13,      7,     12,      0,      0,     13,      0, }, /* 604 */+  {    13,     21,     12,      0,      0,     13,      0, }, /* 605 */+  {    79,      7,     12,      0,      0,     79,      0, }, /* 606 */+  {    79,     14,     12,      0,      0,     79,      0, }, /* 607 */+  {    79,     12,      3,      0,      0,     79,      0, }, /* 608 */+  {    79,     21,     12,      0,      0,     79,      0, }, /* 609 */+  {    10,     24,     12,      0,      0,    -64,      0, }, /* 610 */+  {    34,      9,     12,      0, -35332,     34,      0, }, /* 611 */+  {    34,      9,     12,      0, -42280,     34,      0, }, /* 612 */+  {    34,      5,     12,      0,     48,     34,      0, }, /* 613 */+  {    34,      9,     12,      0, -42308,     34,      0, }, /* 614 */+  {    34,      9,     12,      0, -42319,     34,      0, }, /* 615 */+  {    34,      9,     12,      0, -42315,     34,      0, }, /* 616 */+  {    34,      9,     12,      0, -42305,     34,      0, }, /* 617 */+  {    34,      9,     12,      0, -42258,     34,      0, }, /* 618 */+  {    34,      9,     12,      0, -42282,     34,      0, }, /* 619 */+  {    34,      9,     12,      0, -42261,     34,      0, }, /* 620 */+  {    34,      9,     12,      0,    928,     34,      0, }, /* 621 */+  {    34,      9,     12,      0,    -48,     34,      0, }, /* 622 */+  {    34,      9,     12,      0, -42307,     34,      0, }, /* 623 */+  {    34,      9,     12,      0, -35384,     34,      0, }, /* 624 */+  {    49,      7,     12,      0,      0,     49,      0, }, /* 625 */+  {    49,     12,      3,      0,      0,     49,      0, }, /* 626 */+  {    49,     10,      5,      0,      0,     49,      0, }, /* 627 */+  {    49,     26,     12,      0,      0,     49,      0, }, /* 628 */+  {    10,     15,     12,      0,      0,   -244,      0, }, /* 629 */+  {    10,     15,     12,      0,      0,   -230,      0, }, /* 630 */+  {    10,     26,     12,      0,      0,   -191,      0, }, /* 631 */+  {    10,     23,     12,      0,      0,   -191,      0, }, /* 632 */+  {    65,      7,     12,      0,      0,     65,      0, }, /* 633 */+  {    65,     21,     12,      0,      0,     65,      0, }, /* 634 */+  {    75,     10,      5,      0,      0,     75,      0, }, /* 635 */+  {    75,      7,     12,      0,      0,     75,      0, }, /* 636 */+  {    75,     12,      3,      0,      0,     75,      0, }, /* 637 */+  {    75,     21,     12,      0,      0,     75,      0, }, /* 638 */+  {    75,     13,     12,      0,      0,     75,      0, }, /* 639 */+  {    15,     12,      3,      0,      0,    -16,      0, }, /* 640 */+  {    15,      7,     12,      0,      0,    -49,      0, }, /* 641 */+  {    69,     13,     12,      0,      0,     69,      0, }, /* 642 */+  {    69,      7,     12,      0,      0,     69,      0, }, /* 643 */+  {    69,     12,      3,      0,      0,     69,      0, }, /* 644 */+  {    10,     21,     12,      0,      0,   -118,      0, }, /* 645 */+  {    69,     21,     12,      0,      0,     69,      0, }, /* 646 */+  {    74,      7,     12,      0,      0,     74,      0, }, /* 647 */+  {    74,     12,      3,      0,      0,     74,      0, }, /* 648 */+  {    74,     10,      5,      0,      0,     74,      0, }, /* 649 */+  {    74,     21,     12,      0,      0,     74,      0, }, /* 650 */+  {    84,     12,      3,      0,      0,     84,      0, }, /* 651 */+  {    84,     10,      5,      0,      0,     84,      0, }, /* 652 */+  {    84,      7,     12,      0,      0,     84,      0, }, /* 653 */+  {    84,     21,     12,      0,      0,     84,      0, }, /* 654 */+  {    10,      6,     12,      0,      0,    -22,      0, }, /* 655 */+  {    84,     13,     12,      0,      0,     84,      0, }, /* 656 */+  {    39,      6,     12,      0,      0,     39,      0, }, /* 657 */+  {    68,      7,     12,      0,      0,     68,      0, }, /* 658 */+  {    68,     12,      3,      0,      0,     68,      0, }, /* 659 */+  {    68,     10,      5,      0,      0,     68,      0, }, /* 660 */+  {    68,     13,     12,      0,      0,     68,      0, }, /* 661 */+  {    68,     21,     12,      0,      0,     68,      0, }, /* 662 */+  {    92,      7,     12,      0,      0,     92,      0, }, /* 663 */+  {    92,     12,      3,      0,      0,     92,      0, }, /* 664 */+  {    92,      6,     12,      0,      0,     92,      0, }, /* 665 */+  {    92,     21,     12,      0,      0,     92,      0, }, /* 666 */+  {    87,      7,     12,      0,      0,     87,      0, }, /* 667 */+  {    87,     10,      5,      0,      0,     87,      0, }, /* 668 */+  {    87,     12,      3,      0,      0,     87,      0, }, /* 669 */+  {    87,     21,     12,      0,      0,     87,      0, }, /* 670 */+  {    87,      6,     12,      0,      0,     87,      0, }, /* 671 */+  {    34,      5,     12,      0,   -928,     34,      0, }, /* 672 */+  {     9,      5,     12,      0, -38864,      9,      0, }, /* 673 */+  {    87,     13,     12,      0,      0,     87,      0, }, /* 674 */+  {    24,      7,      9,      0,      0,     24,      0, }, /* 675 */+  {    24,      7,     10,      0,      0,     24,      0, }, /* 676 */+  {     0,      4,     12,      0,      0,      0,      0, }, /* 677 */+  {     0,      3,     12,      0,      0,      0,      0, }, /* 678 */+  {    26,     25,     12,      0,      0,     26,      0, }, /* 679 */+  {    10,     18,     12,      0,      0,     -7,      0, }, /* 680 */+  {    10,     22,     12,      0,      0,     -7,      0, }, /* 681 */+  {     1,      7,     12,      0,      0,    -13,      0, }, /* 682 */+  {     1,     26,     12,      0,      0,    -13,      0, }, /* 683 */+  {    10,      6,      3,      0,      0,    -67,      0, }, /* 684 */+  {    36,      7,     12,      0,      0,     36,      0, }, /* 685 */+  {    10,     21,     12,      0,      0,    -98,      0, }, /* 686 */+  {    10,     21,     12,      0,      0,    -25,      0, }, /* 687 */+  {    10,     15,     12,      0,      0,   -102,      0, }, /* 688 */+  {    10,     26,     12,      0,      0,    -25,      0, }, /* 689 */+  {    20,     14,     12,      0,      0,     20,      0, }, /* 690 */+  {    20,     15,     12,      0,      0,     20,      0, }, /* 691 */+  {    20,     26,     12,      0,      0,     20,      0, }, /* 692 */+  {    71,      7,     12,      0,      0,     71,      0, }, /* 693 */+  {    67,      7,     12,      0,      0,     67,      0, }, /* 694 */+  {    28,     12,      3,      0,      0,     -1,      0, }, /* 695 */+  {    10,     15,     12,      0,      0,     -1,      0, }, /* 696 */+  {    42,      7,     12,      0,      0,     42,      0, }, /* 697 */+  {    42,     15,     12,      0,      0,     42,      0, }, /* 698 */+  {    19,      7,     12,      0,      0,     19,      0, }, /* 699 */+  {    19,     14,     12,      0,      0,     19,      0, }, /* 700 */+  {   118,      7,     12,      0,      0,    118,      0, }, /* 701 */+  {   118,     12,      3,      0,      0,    118,      0, }, /* 702 */+  {    60,      7,     12,      0,      0,     60,      0, }, /* 703 */+  {    60,     21,     12,      0,      0,     60,      0, }, /* 704 */+  {    43,      7,     12,      0,      0,     43,      0, }, /* 705 */+  {    43,     21,     12,      0,      0,     43,      0, }, /* 706 */+  {    43,     14,     12,      0,      0,     43,      0, }, /* 707 */+  {    14,      9,     12,      0,     40,     14,      0, }, /* 708 */+  {    14,      5,     12,      0,    -40,     14,      0, }, /* 709 */+  {    47,      7,     12,      0,      0,     47,      0, }, /* 710 */+  {    45,      7,     12,      0,      0,     45,      0, }, /* 711 */+  {    45,     13,     12,      0,      0,     45,      0, }, /* 712 */+  {   136,      9,     12,      0,     40,    136,      0, }, /* 713 */+  {   136,      5,     12,      0,    -40,    136,      0, }, /* 714 */+  {   106,      7,     12,      0,      0,    106,      0, }, /* 715 */+  {   104,      7,     12,      0,      0,    104,      0, }, /* 716 */+  {   104,     21,     12,      0,      0,    104,      0, }, /* 717 */+  {   161,      9,     12,      0,     39,    161,      0, }, /* 718 */+  {   161,      5,     12,      0,    -39,    161,      0, }, /* 719 */+  {   110,      7,     12,      0,      0,    110,      0, }, /* 720 */+  {    12,      7,     12,      0,      0,     12,      0, }, /* 721 */+  {    81,      7,     12,      0,      0,     81,      0, }, /* 722 */+  {    81,     21,     12,      0,      0,     81,      0, }, /* 723 */+  {    81,     15,     12,      0,      0,     81,      0, }, /* 724 */+  {   120,      7,     12,      0,      0,    120,      0, }, /* 725 */+  {   120,     26,     12,      0,      0,    120,      0, }, /* 726 */+  {   120,     15,     12,      0,      0,    120,      0, }, /* 727 */+  {   116,      7,     12,      0,      0,    116,      0, }, /* 728 */+  {   116,     15,     12,      0,      0,    116,      0, }, /* 729 */+  {   128,      7,     12,      0,      0,    128,      0, }, /* 730 */+  {   128,     15,     12,      0,      0,    128,      0, }, /* 731 */+  {    66,      7,     12,      0,      0,     66,      0, }, /* 732 */+  {    66,     15,     12,      0,      0,     66,      0, }, /* 733 */+  {    66,     21,     12,      0,      0,     66,      0, }, /* 734 */+  {    72,      7,     12,      0,      0,     72,      0, }, /* 735 */+  {    72,     21,     12,      0,      0,     72,      0, }, /* 736 */+  {    98,      7,     12,      0,      0,     98,      0, }, /* 737 */+  {    97,      7,     12,      0,      0,     97,      0, }, /* 738 */+  {    97,     15,     12,      0,      0,     97,      0, }, /* 739 */+  {    31,      7,     12,      0,      0,     31,      0, }, /* 740 */+  {    31,     12,      3,      0,      0,     31,      0, }, /* 741 */+  {    31,     15,     12,      0,      0,     31,      0, }, /* 742 */+  {    31,     21,     12,      0,      0,     31,      0, }, /* 743 */+  {    88,      7,     12,      0,      0,     88,      0, }, /* 744 */+  {    88,     15,     12,      0,      0,     88,      0, }, /* 745 */+  {    88,     21,     12,      0,      0,     88,      0, }, /* 746 */+  {   117,      7,     12,      0,      0,    117,      0, }, /* 747 */+  {   117,     15,     12,      0,      0,    117,      0, }, /* 748 */+  {   112,      7,     12,      0,      0,    112,      0, }, /* 749 */+  {   112,     26,     12,      0,      0,    112,      0, }, /* 750 */+  {   112,     12,      3,      0,      0,    112,      0, }, /* 751 */+  {   112,     15,     12,      0,      0,    112,      0, }, /* 752 */+  {   112,     21,     12,      0,      0,    112,      0, }, /* 753 */+  {   112,     21,     12,      0,      0,    -76,      0, }, /* 754 */+  {    78,      7,     12,      0,      0,     78,      0, }, /* 755 */+  {    78,     21,     12,      0,      0,     78,      0, }, /* 756 */+  {    83,      7,     12,      0,      0,     83,      0, }, /* 757 */+  {    83,     15,     12,      0,      0,     83,      0, }, /* 758 */+  {    82,      7,     12,      0,      0,     82,      0, }, /* 759 */+  {    82,     15,     12,      0,      0,     82,      0, }, /* 760 */+  {   121,      7,     12,      0,      0,    121,      0, }, /* 761 */+  {   121,     21,     12,      0,      0,    121,      0, }, /* 762 */+  {   121,     15,     12,      0,      0,    121,      0, }, /* 763 */+  {    89,      7,     12,      0,      0,     89,      0, }, /* 764 */+  {   130,      9,     12,      0,     64,    130,      0, }, /* 765 */+  {   130,      5,     12,      0,    -64,    130,      0, }, /* 766 */+  {   130,     15,     12,      0,      0,    130,      0, }, /* 767 */+  {   144,      7,     12,      0,      0,    144,      0, }, /* 768 */+  {   144,     12,      3,      0,      0,    144,      0, }, /* 769 */+  {   144,     13,     12,      0,      0,    144,      0, }, /* 770 */+  {     1,     15,     12,      0,      0,      1,      0, }, /* 771 */+  {   156,      7,     12,      0,      0,    156,      0, }, /* 772 */+  {   156,     12,      3,      0,      0,    156,      0, }, /* 773 */+  {   156,     17,     12,      0,      0,    156,      0, }, /* 774 */+  {   147,      7,     12,      0,      0,    147,      0, }, /* 775 */+  {   147,     15,     12,      0,      0,    147,      0, }, /* 776 */+  {   148,      7,     12,      0,      0,    148,      0, }, /* 777 */+  {   148,     12,      3,      0,      0,    148,      0, }, /* 778 */+  {   148,     15,     12,      0,      0,    148,      0, }, /* 779 */+  {   148,     21,     12,      0,      0,    148,      0, }, /* 780 */+  {   158,      7,     12,      0,      0,    158,      0, }, /* 781 */+  {   158,     12,      3,      0,      0,    158,      0, }, /* 782 */+  {   158,     21,     12,      0,      0,    158,      0, }, /* 783 */+  {   153,      7,     12,      0,      0,    153,      0, }, /* 784 */+  {   153,     15,     12,      0,      0,    153,      0, }, /* 785 */+  {   149,      7,     12,      0,      0,    149,      0, }, /* 786 */+  {    94,     10,      5,      0,      0,     94,      0, }, /* 787 */+  {    94,     12,      3,      0,      0,     94,      0, }, /* 788 */+  {    94,      7,     12,      0,      0,     94,      0, }, /* 789 */+  {    94,     21,     12,      0,      0,     94,      0, }, /* 790 */+  {    94,     15,     12,      0,      0,     94,      0, }, /* 791 */+  {    94,     13,     12,      0,      0,     94,      0, }, /* 792 */+  {    85,     12,      3,      0,      0,     85,      0, }, /* 793 */+  {    85,     10,      5,      0,      0,     85,      0, }, /* 794 */+  {    85,      7,     12,      0,      0,     85,      0, }, /* 795 */+  {    85,     21,     12,      0,      0,     85,      0, }, /* 796 */+  {    85,      1,      4,      0,      0,     85,      0, }, /* 797 */+  {   101,      7,     12,      0,      0,    101,      0, }, /* 798 */+  {   101,     13,     12,      0,      0,    101,      0, }, /* 799 */+  {    96,     12,      3,      0,      0,     96,      0, }, /* 800 */+  {    96,      7,     12,      0,      0,     96,      0, }, /* 801 */+  {    96,     10,      5,      0,      0,     96,      0, }, /* 802 */+  {    96,     13,     12,      0,      0,     96,      0, }, /* 803 */+  {    96,     21,     12,      0,      0,     96,      0, }, /* 804 */+  {   111,      7,     12,      0,      0,    111,      0, }, /* 805 */+  {   111,     12,      3,      0,      0,    111,      0, }, /* 806 */+  {   111,     21,     12,      0,      0,    111,      0, }, /* 807 */+  {   100,     12,      3,      0,      0,    100,      0, }, /* 808 */+  {   100,     10,      5,      0,      0,    100,      0, }, /* 809 */+  {   100,      7,     12,      0,      0,    100,      0, }, /* 810 */+  {   100,      7,      4,      0,      0,    100,      0, }, /* 811 */+  {   100,     21,     12,      0,      0,    100,      0, }, /* 812 */+  {   100,     13,     12,      0,      0,    100,      0, }, /* 813 */+  {    48,     15,     12,      0,      0,     48,      0, }, /* 814 */+  {   108,      7,     12,      0,      0,    108,      0, }, /* 815 */+  {   108,     10,      5,      0,      0,    108,      0, }, /* 816 */+  {   108,     12,      3,      0,      0,    108,      0, }, /* 817 */+  {   108,     21,     12,      0,      0,    108,      0, }, /* 818 */+  {   129,      7,     12,      0,      0,    129,      0, }, /* 819 */+  {   129,     21,     12,      0,      0,    129,      0, }, /* 820 */+  {   109,      7,     12,      0,      0,    109,      0, }, /* 821 */+  {   109,     12,      3,      0,      0,    109,      0, }, /* 822 */+  {   109,     10,      5,      0,      0,    109,      0, }, /* 823 */+  {   109,     13,     12,      0,      0,    109,      0, }, /* 824 */+  {   107,     12,      3,      0,      0,    107,      0, }, /* 825 */+  {   107,     12,      3,      0,      0,    -55,      0, }, /* 826 */+  {   107,     10,      5,      0,      0,    107,      0, }, /* 827 */+  {   107,     10,      5,      0,      0,    -55,      0, }, /* 828 */+  {   107,      7,     12,      0,      0,    107,      0, }, /* 829 */+  {    28,     12,      3,      0,      0,    -55,      0, }, /* 830 */+  {   107,     10,      3,      0,      0,    107,      0, }, /* 831 */+  {   135,      7,     12,      0,      0,    135,      0, }, /* 832 */+  {   135,     10,      5,      0,      0,    135,      0, }, /* 833 */+  {   135,     12,      3,      0,      0,    135,      0, }, /* 834 */+  {   135,     21,     12,      0,      0,    135,      0, }, /* 835 */+  {   135,     13,     12,      0,      0,    135,      0, }, /* 836 */+  {   124,      7,     12,      0,      0,    124,      0, }, /* 837 */+  {   124,     10,      3,      0,      0,    124,      0, }, /* 838 */+  {   124,     10,      5,      0,      0,    124,      0, }, /* 839 */+  {   124,     12,      3,      0,      0,    124,      0, }, /* 840 */+  {   124,     21,     12,      0,      0,    124,      0, }, /* 841 */+  {   124,     13,     12,      0,      0,    124,      0, }, /* 842 */+  {   123,      7,     12,      0,      0,    123,      0, }, /* 843 */+  {   123,     10,      3,      0,      0,    123,      0, }, /* 844 */+  {   123,     10,      5,      0,      0,    123,      0, }, /* 845 */+  {   123,     12,      3,      0,      0,    123,      0, }, /* 846 */+  {   123,     21,     12,      0,      0,    123,      0, }, /* 847 */+  {   114,      7,     12,      0,      0,    114,      0, }, /* 848 */+  {   114,     10,      5,      0,      0,    114,      0, }, /* 849 */+  {   114,     12,      3,      0,      0,    114,      0, }, /* 850 */+  {   114,     21,     12,      0,      0,    114,      0, }, /* 851 */+  {   114,     13,     12,      0,      0,    114,      0, }, /* 852 */+  {   102,      7,     12,      0,      0,    102,      0, }, /* 853 */+  {   102,     12,      3,      0,      0,    102,      0, }, /* 854 */+  {   102,     10,      5,      0,      0,    102,      0, }, /* 855 */+  {   102,     21,     12,      0,      0,    102,      0, }, /* 856 */+  {   102,     13,     12,      0,      0,    102,      0, }, /* 857 */+  {   126,      7,     12,      0,      0,    126,      0, }, /* 858 */+  {   126,     12,      3,      0,      0,    126,      0, }, /* 859 */+  {   126,     10,     12,      0,      0,    126,      0, }, /* 860 */+  {   126,     10,      5,      0,      0,    126,      0, }, /* 861 */+  {   126,     13,     12,      0,      0,    126,      0, }, /* 862 */+  {   126,     15,     12,      0,      0,    126,      0, }, /* 863 */+  {   126,     21,     12,      0,      0,    126,      0, }, /* 864 */+  {   126,     26,     12,      0,      0,    126,      0, }, /* 865 */+  {   142,      7,     12,      0,      0,    142,      0, }, /* 866 */+  {   142,     10,      5,      0,      0,    142,      0, }, /* 867 */+  {   142,     12,      3,      0,      0,    142,      0, }, /* 868 */+  {   142,     21,     12,      0,      0,    142,      0, }, /* 869 */+  {   125,      9,     12,      0,     32,    125,      0, }, /* 870 */+  {   125,      5,     12,      0,    -32,    125,      0, }, /* 871 */+  {   125,     13,     12,      0,      0,    125,      0, }, /* 872 */+  {   125,     15,     12,      0,      0,    125,      0, }, /* 873 */+  {   125,      7,     12,      0,      0,    125,      0, }, /* 874 */+  {   154,      7,     12,      0,      0,    154,      0, }, /* 875 */+  {   154,     10,      3,      0,      0,    154,      0, }, /* 876 */+  {   154,     10,      5,      0,      0,    154,      0, }, /* 877 */+  {   154,     12,      3,      0,      0,    154,      0, }, /* 878 */+  {   154,      7,      4,      0,      0,    154,      0, }, /* 879 */+  {   154,     21,     12,      0,      0,    154,      0, }, /* 880 */+  {   154,     13,     12,      0,      0,    154,      0, }, /* 881 */+  {   150,      7,     12,      0,      0,    150,      0, }, /* 882 */+  {   150,     10,      5,      0,      0,    150,      0, }, /* 883 */+  {   150,     12,      3,      0,      0,    150,      0, }, /* 884 */+  {   150,     21,     12,      0,      0,    150,      0, }, /* 885 */+  {   141,      7,     12,      0,      0,    141,      0, }, /* 886 */+  {   141,     12,      3,      0,      0,    141,      0, }, /* 887 */+  {   141,     10,      5,      0,      0,    141,      0, }, /* 888 */+  {   141,      7,      4,      0,      0,    141,      0, }, /* 889 */+  {   141,     21,     12,      0,      0,    141,      0, }, /* 890 */+  {   140,      7,     12,      0,      0,    140,      0, }, /* 891 */+  {   140,     12,      3,      0,      0,    140,      0, }, /* 892 */+  {   140,     10,      5,      0,      0,    140,      0, }, /* 893 */+  {   140,      7,      4,      0,      0,    140,      0, }, /* 894 */+  {   140,     21,     12,      0,      0,    140,      0, }, /* 895 */+  {   122,      7,     12,      0,      0,    122,      0, }, /* 896 */+  {   133,      7,     12,      0,      0,    133,      0, }, /* 897 */+  {   133,     10,      5,      0,      0,    133,      0, }, /* 898 */+  {   133,     12,      3,      0,      0,    133,      0, }, /* 899 */+  {   133,     21,     12,      0,      0,    133,      0, }, /* 900 */+  {   133,     13,     12,      0,      0,    133,      0, }, /* 901 */+  {   133,     15,     12,      0,      0,    133,      0, }, /* 902 */+  {   134,     21,     12,      0,      0,    134,      0, }, /* 903 */+  {   134,      7,     12,      0,      0,    134,      0, }, /* 904 */+  {   134,     12,      3,      0,      0,    134,      0, }, /* 905 */+  {   134,     10,      5,      0,      0,    134,      0, }, /* 906 */+  {   138,      7,     12,      0,      0,    138,      0, }, /* 907 */+  {   138,     12,      3,      0,      0,    138,      0, }, /* 908 */+  {   138,      7,      4,      0,      0,    138,      0, }, /* 909 */+  {   138,     13,     12,      0,      0,    138,      0, }, /* 910 */+  {   143,      7,     12,      0,      0,    143,      0, }, /* 911 */+  {   143,     10,      5,      0,      0,    143,      0, }, /* 912 */+  {   143,     12,      3,      0,      0,    143,      0, }, /* 913 */+  {   143,     13,     12,      0,      0,    143,      0, }, /* 914 */+  {   145,      7,     12,      0,      0,    145,      0, }, /* 915 */+  {   145,     12,      3,      0,      0,    145,      0, }, /* 916 */+  {   145,     10,      5,      0,      0,    145,      0, }, /* 917 */+  {   145,     21,     12,      0,      0,    145,      0, }, /* 918 */+  {    54,     15,     12,      0,      0,     54,      0, }, /* 919 */+  {    54,     21,     12,      0,      0,     54,      0, }, /* 920 */+  {    63,      7,     12,      0,      0,     63,      0, }, /* 921 */+  {    63,     14,     12,      0,      0,     63,      0, }, /* 922 */+  {    63,     21,     12,      0,      0,     63,      0, }, /* 923 */+  {   157,      7,     12,      0,      0,    157,      0, }, /* 924 */+  {   157,     21,     12,      0,      0,    157,      0, }, /* 925 */+  {    80,      7,     12,      0,      0,     80,      0, }, /* 926 */+  {    80,      1,      2,      0,      0,     80,      0, }, /* 927 */+  {   127,      7,     12,      0,      0,    127,      0, }, /* 928 */+  {   115,      7,     12,      0,      0,    115,      0, }, /* 929 */+  {   115,     13,     12,      0,      0,    115,      0, }, /* 930 */+  {   115,     21,     12,      0,      0,    115,      0, }, /* 931 */+  {   159,      7,     12,      0,      0,    159,      0, }, /* 932 */+  {   159,     13,     12,      0,      0,    159,      0, }, /* 933 */+  {   103,      7,     12,      0,      0,    103,      0, }, /* 934 */+  {   103,     12,      3,      0,      0,    103,      0, }, /* 935 */+  {   103,     21,     12,      0,      0,    103,      0, }, /* 936 */+  {   119,      7,     12,      0,      0,    119,      0, }, /* 937 */+  {   119,     12,      3,      0,      0,    119,      0, }, /* 938 */+  {   119,     21,     12,      0,      0,    119,      0, }, /* 939 */+  {   119,     26,     12,      0,      0,    119,      0, }, /* 940 */+  {   119,      6,     12,      0,      0,    119,      0, }, /* 941 */+  {   119,     13,     12,      0,      0,    119,      0, }, /* 942 */+  {   119,     15,     12,      0,      0,    119,      0, }, /* 943 */+  {   146,      9,     12,      0,     32,    146,      0, }, /* 944 */+  {   146,      5,     12,      0,    -32,    146,      0, }, /* 945 */+  {   146,     15,     12,      0,      0,    146,      0, }, /* 946 */+  {   146,     21,     12,      0,      0,    146,      0, }, /* 947 */+  {    99,      7,     12,      0,      0,     99,      0, }, /* 948 */+  {    99,     12,      3,      0,      0,     99,      0, }, /* 949 */+  {    99,     10,      5,      0,      0,     99,      0, }, /* 950 */+  {    99,      6,     12,      0,      0,     99,      0, }, /* 951 */+  {   137,      6,     12,      0,      0,    137,      0, }, /* 952 */+  {   139,      6,     12,      0,      0,    139,      0, }, /* 953 */+  {    23,     21,     12,      0,      0,     23,      0, }, /* 954 */+  {   155,     12,      3,      0,      0,    155,      0, }, /* 955 */+  {    23,     10,      5,      0,      0,     23,      0, }, /* 956 */+  {   137,      7,     12,      0,      0,    137,      0, }, /* 957 */+  {   155,      7,     12,      0,      0,    155,      0, }, /* 958 */+  {   139,      7,     12,      0,      0,    139,      0, }, /* 959 */+  {   105,      7,     12,      0,      0,    105,      0, }, /* 960 */+  {   105,     26,     12,      0,      0,    105,      0, }, /* 961 */+  {   105,     12,      3,      0,      0,    105,      0, }, /* 962 */+  {   105,     21,     12,      0,      0,    105,      0, }, /* 963 */+  {    10,      1,      2,      0,      0,    105,      0, }, /* 964 */+  {    10,     10,      3,      0,      0,     10,      0, }, /* 965 */+  {    10,     10,      5,      0,      0,     10,      0, }, /* 966 */+  {    20,     12,      3,      0,      0,     20,      0, }, /* 967 */+  {   131,     26,     12,      0,      0,    131,      0, }, /* 968 */+  {   131,     12,      3,      0,      0,    131,      0, }, /* 969 */+  {   131,     21,     12,      0,      0,    131,      0, }, /* 970 */+  {    18,     12,      3,      0,      0,     18,      0, }, /* 971 */+  {   151,      7,     12,      0,      0,    151,      0, }, /* 972 */+  {   151,     12,      3,      0,      0,    151,      0, }, /* 973 */+  {   151,      6,     12,      0,      0,    151,      0, }, /* 974 */+  {   151,     13,     12,      0,      0,    151,      0, }, /* 975 */+  {   151,     26,     12,      0,      0,    151,      0, }, /* 976 */+  {   160,      7,     12,      0,      0,    160,      0, }, /* 977 */+  {   160,     12,      3,      0,      0,    160,      0, }, /* 978 */+  {   152,      7,     12,      0,      0,    152,      0, }, /* 979 */+  {   152,     12,      3,      0,      0,    152,      0, }, /* 980 */+  {   152,     13,     12,      0,      0,    152,      0, }, /* 981 */+  {   152,     23,     12,      0,      0,    152,      0, }, /* 982 */+  {   113,      7,     12,      0,      0,    113,      0, }, /* 983 */+  {   113,     15,     12,      0,      0,    113,      0, }, /* 984 */+  {   113,     12,      3,      0,      0,    113,      0, }, /* 985 */+  {   132,      9,     12,      0,     34,    132,      0, }, /* 986 */+  {   132,      5,     12,      0,    -34,    132,      0, }, /* 987 */+  {   132,     12,      3,      0,      0,    132,      0, }, /* 988 */+  {   132,      6,     12,      0,      0,    132,      0, }, /* 989 */+  {   132,     13,     12,      0,      0,    132,      0, }, /* 990 */+  {   132,     21,     12,      0,      0,    132,      0, }, /* 991 */+  {     0,      2,     14,      0,      0,      0,      0, }, /* 992 */+  {    10,     26,     11,      0,      0,     10,      0, }, /* 993 */+  {    27,     26,     12,      0,      0,     27,      0, }, /* 994 */+  {    10,     24,      3,      0,      0,     10,      0, }, /* 995 */+  {    10,      1,      3,      0,      0,     10,      0, }, /* 996 */+};++const uint16_t PRIV(ucd_stage1)[] = { /* 17408 bytes */+  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, /* U+0000 */+ 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, /* U+0800 */+ 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 41, 41, 42, 43, 44, 45, /* U+1000 */+ 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, /* U+1800 */+ 62, 63, 64, 65, 66, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, /* U+2000 */+ 77, 77, 78, 79, 66, 66, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, /* U+2800 */+ 90, 91, 92, 93, 94, 95, 96, 97, 98, 98, 98, 98, 98, 98, 98, 98, /* U+3000 */+ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+3800 */+ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+4000 */+ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 99, 98, 98, 98, 98, /* U+4800 */+ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+5000 */+ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+5800 */+ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+6000 */+ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+6800 */+ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+7000 */+ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+7800 */+ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+8000 */+ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+8800 */+ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+9000 */+ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+9800 */+100,101,101,101,101,101,101,101,101,102,103,103,104,105,106,107, /* U+A000 */+108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,116, /* U+A800 */+117,118,119,120,121,122,116,117,118,119,120,121,122,116,117,118, /* U+B000 */+119,120,121,122,116,117,118,119,120,121,122,116,117,118,119,120, /* U+B800 */+121,122,116,117,118,119,120,121,122,116,117,118,119,120,121,122, /* U+C000 */+116,117,118,119,120,121,122,116,117,118,119,120,121,122,116,117, /* U+C800 */+118,119,120,121,122,116,117,118,119,120,121,122,116,117,118,123, /* U+D000 */+124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124, /* U+D800 */+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+E000 */+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+E800 */+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+F000 */+125,125, 98, 98,126,127,128,129,130,130,131,132,133,134,135,136, /* U+F800 */+137,138,139,140,141,142,143,144,145,146,147,148,149,149,150,151, /* U+10000 */+152,153,154,155,156,157,158,159,160,161,162,141,163,164,165,166, /* U+10800 */+167,168,169,170,171,172,173,141,174,175,141,176,177,178,179,141, /* U+11000 */+180,181,182,183,184,185,141,141,186,187,188,189,141,190,141,191, /* U+11800 */+192,192,192,192,192,192,192,193,194,192,195,141,141,141,141,141, /* U+12000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,196, /* U+12800 */+197,197,197,197,197,197,197,197,198,141,141,141,141,141,141,141, /* U+13000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+13800 */+141,141,141,141,141,141,141,141,199,199,199,199,200,141,141,141, /* U+14000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+14800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+15000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+15800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+16000 */+201,201,201,201,202,203,204,205,141,141,141,141,206,207,208,209, /* U+16800 */+210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210, /* U+17000 */+210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210, /* U+17800 */+210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,211, /* U+18000 */+210,210,210,210,210,210,212,212,212,213,214,141,141,141,141,141, /* U+18800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+19000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+19800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+1A000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,215, /* U+1A800 */+216,217,218,219,219,220,141,141,141,141,141,141,141,141,141,141, /* U+1B000 */+141,141,141,141,141,141,141,141,221,222,141,141,141,141,141,141, /* U+1B800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+1C000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,223,224, /* U+1C800 */+ 71,225,226,227,228,229,230,141,231,232,233,234,235,236,237,238, /* U+1D000 */+239,239,239,239,240,241,141,141,141,141,141,141,141,141,242,141, /* U+1D800 */+243,141,244,141,141,245,141,141,141,141,141,141,141,141,141,246, /* U+1E000 */+247,248,249,141,141,141,141,141,250,251,252,141,253,254,141,141, /* U+1E800 */+255,256,257,258,259,260,261,262,261,261,263,261,264,265,266,267, /* U+1F000 */+268,269,270,261,271,272, 71,273,260,260,260,260,260,260,260,274, /* U+1F800 */+ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+20000 */+ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+20800 */+ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+21000 */+ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+21800 */+ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+22000 */+ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+22800 */+ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+23000 */+ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+23800 */+ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+24000 */+ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+24800 */+ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+25000 */+ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+25800 */+ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+26000 */+ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+26800 */+ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+27000 */+ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+27800 */+ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+28000 */+ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+28800 */+ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+29000 */+ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+29800 */+ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,275, 98, 98, /* U+2A000 */+ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+2A800 */+ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,276, 98, /* U+2B000 */+277, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+2B800 */+ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+2C000 */+ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,278, 98, 98, /* U+2C800 */+ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+2D000 */+ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+2D800 */+ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+2E000 */+ 98, 98, 98, 98, 98, 98, 98,279,141,141,141,141,141,141,141,141, /* U+2E800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+2F000 */+ 98, 98, 98, 98,280,141,141,141,141,141,141,141,141,141,141,141, /* U+2F800 */+ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+30000 */+ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+30800 */+ 98, 98, 98, 98, 98, 98,281,141,141,141,141,141,141,141,141,141, /* U+31000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+31800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+32000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+32800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+33000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+33800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+34000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+34800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+35000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+35800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+36000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+36800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+37000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+37800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+38000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+38800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+39000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+39800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+3A000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+3A800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+3B000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+3B800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+3C000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+3C800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+3D000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+3D800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+3E000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+3E800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+3F000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+3F800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+40000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+40800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+41000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+41800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+42000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+42800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+43000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+43800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+44000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+44800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+45000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+45800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+46000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+46800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+47000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+47800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+48000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+48800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+49000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+49800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+4A000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+4A800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+4B000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+4B800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+4C000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+4C800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+4D000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+4D800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+4E000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+4E800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+4F000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+4F800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+50000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+50800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+51000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+51800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+52000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+52800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+53000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+53800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+54000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+54800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+55000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+55800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+56000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+56800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+57000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+57800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+58000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+58800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+59000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+59800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+5A000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+5A800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+5B000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+5B800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+5C000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+5C800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+5D000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+5D800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+5E000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+5E800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+5F000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+5F800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+60000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+60800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+61000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+61800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+62000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+62800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+63000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+63800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+64000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+64800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+65000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+65800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+66000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+66800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+67000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+67800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+68000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+68800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+69000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+69800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+6A000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+6A800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+6B000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+6B800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+6C000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+6C800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+6D000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+6D800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+6E000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+6E800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+6F000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+6F800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+70000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+70800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+71000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+71800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+72000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+72800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+73000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+73800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+74000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+74800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+75000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+75800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+76000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+76800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+77000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+77800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+78000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+78800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+79000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+79800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+7A000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+7A800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+7B000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+7B800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+7C000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+7C800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+7D000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+7D800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+7E000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+7E800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+7F000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+7F800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+80000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+80800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+81000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+81800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+82000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+82800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+83000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+83800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+84000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+84800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+85000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+85800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+86000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+86800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+87000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+87800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+88000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+88800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+89000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+89800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+8A000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+8A800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+8B000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+8B800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+8C000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+8C800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+8D000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+8D800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+8E000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+8E800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+8F000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+8F800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+90000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+90800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+91000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+91800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+92000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+92800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+93000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+93800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+94000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+94800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+95000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+95800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+96000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+96800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+97000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+97800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+98000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+98800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+99000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+99800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+9A000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+9A800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+9B000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+9B800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+9C000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+9C800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+9D000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+9D800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+9E000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+9E800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+9F000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+9F800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+A0000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+A0800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+A1000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+A1800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+A2000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+A2800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+A3000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+A3800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+A4000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+A4800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+A5000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+A5800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+A6000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+A6800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+A7000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+A7800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+A8000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+A8800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+A9000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+A9800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+AA000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+AA800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+AB000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+AB800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+AC000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+AC800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+AD000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+AD800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+AE000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+AE800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+AF000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+AF800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+B0000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+B0800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+B1000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+B1800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+B2000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+B2800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+B3000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+B3800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+B4000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+B4800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+B5000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+B5800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+B6000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+B6800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+B7000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+B7800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+B8000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+B8800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+B9000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+B9800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+BA000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+BA800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+BB000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+BB800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+BC000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+BC800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+BD000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+BD800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+BE000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+BE800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+BF000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+BF800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+C0000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+C0800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+C1000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+C1800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+C2000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+C2800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+C3000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+C3800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+C4000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+C4800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+C5000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+C5800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+C6000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+C6800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+C7000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+C7800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+C8000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+C8800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+C9000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+C9800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+CA000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+CA800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+CB000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+CB800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+CC000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+CC800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+CD000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+CD800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+CE000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+CE800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+CF000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+CF800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+D0000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+D0800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+D1000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+D1800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+D2000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+D2800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+D3000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+D3800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+D4000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+D4800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+D5000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+D5800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+D6000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+D6800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+D7000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+D7800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+D8000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+D8800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+D9000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+D9800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+DA000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+DA800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+DB000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+DB800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+DC000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+DC800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+DD000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+DD800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+DE000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+DE800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+DF000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+DF800 */+282,283,284,285,283,283,283,283,283,283,283,283,283,283,283,283, /* U+E0000 */+283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283, /* U+E0800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+E1000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+E1800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+E2000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+E2800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+E3000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+E3800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+E4000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+E4800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+E5000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+E5800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+E6000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+E6800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+E7000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+E7800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+E8000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+E8800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+E9000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+E9800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+EA000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+EA800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+EB000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+EB800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+EC000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+EC800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+ED000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+ED800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+EE000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+EE800 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+EF000 */+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+EF800 */+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+F0000 */+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+F0800 */+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+F1000 */+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+F1800 */+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+F2000 */+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+F2800 */+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+F3000 */+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+F3800 */+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+F4000 */+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+F4800 */+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+F5000 */+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+F5800 */+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+F6000 */+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+F6800 */+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+F7000 */+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+F7800 */+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+F8000 */+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+F8800 */+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+F9000 */+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+F9800 */+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+FA000 */+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+FA800 */+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+FB000 */+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+FB800 */+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+FC000 */+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+FC800 */+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+FD000 */+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+FD800 */+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+FE000 */+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+FE800 */+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+FF000 */+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,286, /* U+FF800 */+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+100000 */+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+100800 */+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+101000 */+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+101800 */+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+102000 */+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+102800 */+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+103000 */+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+103800 */+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+104000 */+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+104800 */+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+105000 */+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+105800 */+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+106000 */+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+106800 */+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+107000 */+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+107800 */+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+108000 */+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+108800 */+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+109000 */+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+109800 */+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+10A000 */+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+10A800 */+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+10B000 */+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+10B800 */+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+10C000 */+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+10C800 */+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+10D000 */+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+10D800 */+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+10E000 */+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+10E800 */+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+10F000 */+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,286, /* U+10F800 */+};++const uint16_t PRIV(ucd_stage2)[] = { /* 73472 bytes, block = 128 */+/* block 0 */+  0,  1,  1,  1,  1,  1,  1,  1,  1,  1,  2,  1,  1,  3,  1,  1,+  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,+  4,  5,  5,  5,  6,  5,  5,  5,  7,  8,  5,  9,  5, 10,  5,  5,+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,  5,  5,  9,  9,  9,  5,+  5, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13, 12, 12, 12, 12,+ 12, 12, 12, 14, 12, 12, 12, 12, 12, 12, 12,  7,  5,  8, 15, 16,+ 15, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 18, 17, 17, 17, 17,+ 17, 17, 17, 19, 17, 17, 17, 17, 17, 17, 17,  7,  9,  8,  9,  1,++/* block 1 */+  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,+  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,+  4,  5,  6,  6,  6,  6, 20,  5, 15, 21, 22, 23,  9, 24, 21, 15,+ 20,  9, 25, 25, 15, 26,  5,  5, 15, 25, 22, 27, 25, 25, 25,  5,+ 12, 12, 12, 12, 12, 28, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,+ 12, 12, 12, 12, 12, 12, 12,  9, 12, 12, 12, 12, 12, 12, 12, 29,+ 17, 17, 17, 17, 17, 30, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,+ 17, 17, 17, 17, 17, 17, 17,  9, 17, 17, 17, 17, 17, 17, 17, 31,++/* block 2 */+ 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,+ 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,+ 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,+ 34, 35, 32, 33, 32, 33, 32, 33, 35, 32, 33, 32, 33, 32, 33, 32,+ 33, 32, 33, 32, 33, 32, 33, 32, 33, 35, 32, 33, 32, 33, 32, 33,+ 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,+ 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,+ 32, 33, 32, 33, 32, 33, 32, 33, 36, 32, 33, 32, 33, 32, 33, 37,++/* block 3 */+ 38, 39, 32, 33, 32, 33, 40, 32, 33, 41, 41, 32, 33, 35, 42, 43,+ 44, 32, 33, 41, 45, 46, 47, 48, 32, 33, 49, 35, 47, 50, 51, 52,+ 32, 33, 32, 33, 32, 33, 53, 32, 33, 53, 35, 35, 32, 33, 53, 32,+ 33, 54, 54, 32, 33, 32, 33, 55, 32, 33, 35, 22, 32, 33, 35, 56,+ 22, 22, 22, 22, 57, 58, 59, 60, 61, 62, 63, 64, 65, 32, 33, 32,+ 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 66, 32, 33,+ 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,+ 35, 67, 68, 69, 32, 33, 70, 71, 32, 33, 32, 33, 32, 33, 32, 33,++/* block 4 */+ 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,+ 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,+ 72, 35, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,+ 32, 33, 32, 33, 35, 35, 35, 35, 35, 35, 73, 32, 33, 74, 75, 76,+ 76, 32, 33, 77, 78, 79, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,+ 80, 81, 82, 83, 84, 35, 85, 85, 35, 86, 35, 87, 88, 35, 35, 35,+ 85, 89, 35, 90, 35, 91, 92, 35, 93, 94, 92, 95, 96, 35, 35, 94,+ 35, 97, 98, 35, 35, 99, 35, 35, 35, 35, 35, 35, 35,100, 35, 35,++/* block 5 */+101, 35,102,101, 35, 35, 35,103,101,104,105,105,106, 35, 35, 35,+ 35, 35,107, 35, 22, 35, 35, 35, 35, 35, 35, 35, 35,108,109, 35,+ 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,+110,110,110,110,110,110,110,110,110,111,111,111,111,111,111,111,+111,111, 15, 15, 15, 15,111,111,111,111,111,111,111,111,111,111,+111,111, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,+110,110,110,110,110, 15, 15, 15, 15, 15,112,112,111, 15,111, 15,+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,++/* block 6 */+113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,+113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,+113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,+113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,+113,113,114,113,113,115,113,113,113,113,113,113,113,113,113,113,+113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,+113,113,113,116,116,116,116,116,116,116,116,116,116,116,116,116,+117,118,117,118,111,119,117,118,120,120,121,122,122,122,  5,123,++/* block 7 */+120,120,120,120,119, 15,124,  5,125,125,125,120,126,120,127,127,+128,129,130,129,129,131,129,129,132,133,134,129,135,129,129,129,+136,137,120,138,129,129,139,129,129,140,129,129,141,142,142,142,+128,143,144,143,143,145,143,143,146,147,148,143,149,143,143,143,+150,151,152,153,143,143,154,143,143,155,143,143,156,157,157,158,+159,160,161,161,161,162,163,164,117,118,117,118,117,118,117,118,+117,118,165,166,165,166,165,166,165,166,165,166,165,166,165,166,+167,168,169,170,171,172,173,117,118,174,117,118,128,175,175,175,++/* block 8 */+176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,+177,177,178,177,179,177,177,177,177,177,177,177,177,177,180,177,+177,181,182,177,177,177,177,177,177,177,183,177,177,177,177,177,+184,184,185,184,186,184,184,184,184,184,184,184,184,184,187,184,+184,188,189,184,184,184,184,184,184,184,190,184,184,184,184,184,+191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,+192,193,194,195,192,193,192,193,192,193,192,193,192,193,192,193,+192,193,192,193,192,193,192,193,192,193,192,193,192,193,192,193,++/* block 9 */+192,193,196,197,198,199,199,198,200,200,192,193,192,193,192,193,+192,193,192,193,192,193,192,193,192,193,192,193,192,193,192,193,+192,193,192,193,192,193,192,193,192,193,192,193,192,193,192,193,+192,193,192,193,192,193,192,193,192,193,192,193,192,193,192,193,+201,192,193,192,193,192,193,192,193,192,193,192,193,192,193,202,+192,193,192,193,192,193,192,193,192,193,192,193,192,193,192,193,+192,193,192,193,192,193,192,193,192,193,192,193,192,193,192,193,+192,193,192,193,192,193,192,193,192,193,192,193,192,193,192,193,++/* block 10 */+192,193,192,193,192,193,192,193,192,193,192,193,192,193,192,193,+192,193,192,193,192,193,192,193,192,193,192,193,192,193,192,193,+192,193,192,193,192,193,192,193,192,193,192,193,192,193,192,193,+120,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,+203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,+203,203,203,203,203,203,203,120,120,204,205,205,205,205,205,205,+206,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,+207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,++/* block 11 */+207,207,207,207,207,207,207,206,206,205,208,120,120,209,209,210,+120,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,+211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,+211,211,211,211,211,211,211,211,211,211,211,211,211,211,212,211,+213,211,211,213,211,211,213,211,120,120,120,120,120,120,120,120,+214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,+214,214,214,214,214,214,214,214,214,214,214,120,120,120,120,214,+214,214,214,213,213,120,120,120,120,120,120,120,120,120,120,120,++/* block 12 */+215,215,215,215,215,216,217,217,217,218,218,219,220,218,221,221,+222,222,222,222,222,222,222,222,222,222,222,220,223,218,218,224,+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,+226,225,225,225,225,225,225,225,225,225,225,227,227,227,227,227,+227,227,227,227,227,227,222,222,222,222,222,222,222,222,222,222,+228,228,228,228,228,228,228,228,228,228,218,218,218,218,225,225,+227,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,++/* block 13 */+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,+225,225,225,225,229,225,222,222,222,222,222,222,222,216,221,222,+222,222,222,222,222,230,230,222,222,221,222,222,222,222,225,225,+231,231,231,231,231,231,231,231,231,231,225,225,225,221,221,225,++/* block 14 */+232,232,232,232,232,232,232,232,232,232,232,232,232,232,120,233,+234,235,234,234,234,234,234,234,234,234,234,234,234,234,234,234,+234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,+235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,+235,235,235,235,235,235,235,235,235,235,235,120,120,234,234,234,+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,++/* block 15 */+236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,+236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,+236,236,236,236,236,236,237,237,237,237,237,237,237,237,237,237,+237,236,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+238,238,238,238,238,238,238,238,238,238,239,239,239,239,239,239,+239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,+239,239,239,239,239,239,239,239,239,239,239,240,240,240,240,240,+240,240,240,240,241,241,242,243,243,243,241,120,120,240,244,244,++/* block 16 */+245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,+245,245,245,245,245,245,246,246,246,246,247,246,246,246,246,246,+246,246,246,246,247,246,246,246,247,246,246,246,246,246,120,120,+248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,120,+249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,+249,249,249,249,249,249,249,249,249,250,250,250,120,120,251,120,+234,234,234,234,234,234,234,234,234,234,234,120,120,120,120,120,+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,++/* block 17 */+225,225,225,225,225,225,225,225,252,225,225,225,225,225,225,120,+215,215,120,120,120,120,120,120,222,222,222,222,222,222,222,222,+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,+225,225,225,225,225,225,225,225,225,230,222,222,222,222,222,222,+222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,+222,222,216,222,222,222,222,222,222,222,222,222,222,222,222,222,+222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,++/* block 18 */+253,253,253,254,255,255,255,255,255,255,255,255,255,255,255,255,+255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,+255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,+255,255,255,255,255,255,255,255,255,255,253,254,253,255,254,254,+254,253,253,253,253,253,253,253,253,254,254,254,254,253,254,254,+255,256,257,113,113,253,253,253,255,255,255,255,255,255,255,255,+255,255,253,253,258,259,260,260,260,260,260,260,260,260,260,260,+261,262,255,255,255,255,255,255,255,255,255,255,255,255,255,255,++/* block 19 */+263,264,265,265,120,263,263,263,263,263,263,263,263,120,120,263,+263,120,120,263,263,263,263,263,263,263,263,263,263,263,263,263,+263,263,263,263,263,263,263,263,263,120,263,263,263,263,263,263,+263,120,263,120,120,120,263,263,263,263,120,120,264,263,266,265,+265,264,264,264,264,120,120,265,265,120,120,265,265,264,263,120,+120,120,120,120,120,120,120,266,120,120,120,120,263,263,120,263,+263,263,264,264,120,120,267,267,267,267,267,267,267,267,267,267,+263,263,268,268,269,269,269,269,269,269,270,268,263,271,264,120,++/* block 20 */+120,272,272,273,120,274,274,274,274,274,274,120,120,120,120,274,+274,120,120,274,274,274,274,274,274,274,274,274,274,274,274,274,+274,274,274,274,274,274,274,274,274,120,274,274,274,274,274,274,+274,120,274,274,120,274,274,120,274,274,120,120,272,120,273,273,+273,272,272,120,120,120,120,272,272,120,120,272,272,272,120,120,+120,272,120,120,120,120,120,120,120,274,274,274,274,120,274,120,+120,120,120,120,120,120,275,275,275,275,275,275,275,275,275,275,+272,272,274,274,274,272,276,120,120,120,120,120,120,120,120,120,++/* block 21 */+120,277,277,278,120,279,279,279,279,279,279,279,279,279,120,279,+279,279,120,279,279,279,279,279,279,279,279,279,279,279,279,279,+279,279,279,279,279,279,279,279,279,120,279,279,279,279,279,279,+279,120,279,279,120,279,279,279,279,279,120,120,277,279,278,278,+278,277,277,277,277,277,120,277,277,278,120,278,278,277,120,120,+279,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+279,279,277,277,120,120,280,280,280,280,280,280,280,280,280,280,+281,282,120,120,120,120,120,120,120,279,277,277,277,277,277,277,++/* block 22 */+120,283,284,284,120,285,285,285,285,285,285,285,285,120,120,285,+285,120,120,285,285,285,285,285,285,285,285,285,285,285,285,285,+285,285,285,285,285,285,285,285,285,120,285,285,285,285,285,285,+285,120,285,285,120,285,285,285,285,285,120,120,283,285,286,283,+284,283,283,283,283,120,120,284,284,120,120,284,284,283,120,120,+120,120,120,120,120,283,283,286,120,120,120,120,285,285,120,285,+285,285,283,283,120,120,287,287,287,287,287,287,287,287,287,287,+288,285,289,289,289,289,289,289,120,120,120,120,120,120,120,120,++/* block 23 */+120,120,290,291,120,291,291,291,291,291,291,120,120,120,291,291,+291,120,291,291,291,291,120,120,120,291,291,120,291,120,291,291,+120,120,120,291,291,120,120,120,291,291,291,120,120,120,291,291,+291,291,291,291,291,291,291,291,291,291,120,120,120,120,292,293,+290,293,293,120,120,120,293,293,293,120,293,293,293,290,120,120,+291,120,120,120,120,120,120,292,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,294,294,294,294,294,294,294,294,294,294,+295,295,295,296,297,297,297,297,297,298,297,120,120,120,120,120,++/* block 24 */+299,300,300,300,299,301,301,301,301,301,301,301,301,120,301,301,+301,120,301,301,301,301,301,301,301,301,301,301,301,301,301,301,+301,301,301,301,301,301,301,301,301,120,301,301,301,301,301,301,+301,301,301,301,301,301,301,301,301,301,120,120,299,301,299,299,+299,300,300,300,300,120,299,299,299,120,299,299,299,299,120,120,+120,120,120,120,120,299,299,120,301,301,301,120,120,301,120,120,+301,301,299,299,120,120,302,302,302,302,302,302,302,302,302,302,+120,120,120,120,120,120,120,303,304,304,304,304,304,304,304,305,++/* block 25 */+306,307,308,308,309,306,306,306,306,306,306,306,306,120,306,306,+306,120,306,306,306,306,306,306,306,306,306,306,306,306,306,306,+306,306,306,306,306,306,306,306,306,120,306,306,306,306,306,306,+306,306,306,306,120,306,306,306,306,306,120,120,307,306,308,307,+308,308,310,308,308,120,307,308,308,120,308,308,307,307,120,120,+120,120,120,120,120,310,310,120,120,120,120,120,120,306,306,120,+306,306,307,307,120,120,311,311,311,311,311,311,311,311,311,311,+120,306,306,120,120,120,120,120,120,120,120,120,120,120,120,120,++/* block 26 */+312,312,313,313,314,314,314,314,314,314,314,314,314,120,314,314,+314,120,314,314,314,314,314,314,314,314,314,314,314,314,314,314,+314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,+314,314,314,314,314,314,314,314,314,314,314,312,312,314,315,313,+313,312,312,312,312,120,313,313,313,120,313,313,313,312,316,317,+120,120,120,120,314,314,314,315,318,318,318,318,318,318,318,314,+314,314,312,312,120,120,319,319,319,319,319,319,319,319,319,319,+318,318,318,318,318,318,318,318,318,317,314,314,314,314,314,314,++/* block 27 */+120,320,321,321,120,322,322,322,322,322,322,322,322,322,322,322,+322,322,322,322,322,322,322,120,120,120,322,322,322,322,322,322,+322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,+322,322,120,322,322,322,322,322,322,322,322,322,120,322,120,120,+322,322,322,322,322,322,322,120,120,120,320,120,120,120,120,323,+321,321,320,320,320,120,320,120,321,321,321,321,321,321,321,323,+120,120,120,120,120,120,324,324,324,324,324,324,324,324,324,324,+120,120,321,321,325,120,120,120,120,120,120,120,120,120,120,120,++/* block 28 */+120,326,326,326,326,326,326,326,326,326,326,326,326,326,326,326,+326,326,326,326,326,326,326,326,326,326,326,326,326,326,326,326,+326,326,326,326,326,326,326,326,326,326,326,326,326,326,326,326,+326,327,326,328,327,327,327,327,327,327,327,120,120,120,120,  6,+326,326,326,326,326,326,329,327,327,327,327,327,327,327,327,330,+331,331,331,331,331,331,331,331,331,331,330,330,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,++/* block 29 */+120,332,332,120,332,120,332,332,332,332,332,120,332,332,332,332,+332,332,332,332,332,332,332,332,332,332,332,332,332,332,332,332,+332,332,332,332,120,332,120,332,332,332,332,332,332,332,332,332,+332,333,332,334,333,333,333,333,333,333,333,333,333,332,120,120,+332,332,332,332,332,120,335,120,333,333,333,333,333,333,120,120,+336,336,336,336,336,336,336,336,336,336,120,120,332,332,332,332,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,++/* block 30 */+337,338,338,338,339,339,339,339,339,339,339,339,339,339,339,339,+339,339,339,338,339,338,338,338,340,340,338,338,338,338,338,338,+341,341,341,341,341,341,341,341,341,341,342,342,342,342,342,342,+342,342,342,342,338,340,338,340,338,340,343,344,343,344,345,345,+337,337,337,337,337,337,337,337,120,337,337,337,337,337,337,337,+337,337,337,337,337,337,337,337,337,337,337,337,337,337,337,337,+337,337,337,337,337,337,337,337,337,337,337,337,337,120,120,120,+120,340,340,340,340,340,340,340,340,340,340,340,340,340,340,345,++/* block 31 */+340,340,340,340,340,339,340,340,337,337,337,337,337,340,340,340,+340,340,340,340,340,340,340,340,120,340,340,340,340,340,340,340,+340,340,340,340,340,340,340,340,340,340,340,340,340,340,340,340,+340,340,340,340,340,340,340,340,340,340,340,340,340,120,338,338,+338,338,338,338,338,338,340,338,338,338,338,338,338,120,338,338,+339,339,339,339,339, 20, 20, 20, 20,339,339,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,++/* block 32 */+346,346,346,346,346,346,346,346,346,346,346,346,346,346,346,346,+346,346,346,346,346,346,346,346,346,346,346,346,346,346,346,346,+346,346,346,346,346,346,346,346,346,346,346,347,347,348,348,348,+348,349,348,348,348,348,348,348,347,348,348,349,349,348,348,346,+350,350,350,350,350,350,350,350,350,350,351,351,351,351,351,351,+346,346,346,346,346,346,349,349,348,348,346,346,346,346,348,348,+348,346,347,347,347,346,346,347,347,347,347,347,347,347,346,346,+346,348,348,348,348,346,346,346,346,346,346,346,346,346,346,346,++/* block 33 */+346,346,348,347,349,348,348,347,347,347,347,347,347,348,346,347,+352,352,352,352,352,352,352,352,352,352,347,347,347,348,353,353,+354,354,354,354,354,354,354,354,354,354,354,354,354,354,354,354,+354,354,354,354,354,354,354,354,354,354,354,354,354,354,354,354,+354,354,354,354,354,354,120,354,120,120,120,120,120,354,120,120,+355,355,355,355,355,355,355,355,355,355,355,355,355,355,355,355,+355,355,355,355,355,355,355,355,355,355,355,355,355,355,355,355,+355,355,355,355,355,355,355,355,355,355,355,356,357,355,355,355,++/* block 34 */+358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,+358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,+358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,+358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,+358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,+358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,+359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,+359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,++/* block 35 */+359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,+359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,+359,359,359,359,359,359,359,359,360,360,360,360,360,360,360,360,+360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,+360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,+360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,+360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,+360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,++/* block 36 */+361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,+361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,+361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,+361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,+361,361,361,361,361,361,361,361,361,120,361,361,361,361,120,120,+361,361,361,361,361,361,361,120,361,120,361,361,361,361,120,120,+361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,+361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,++/* block 37 */+361,361,361,361,361,361,361,361,361,120,361,361,361,361,120,120,+361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,+361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,+361,120,361,361,361,361,120,120,361,361,361,361,361,361,361,120,+361,120,361,361,361,361,120,120,361,361,361,361,361,361,361,361,+361,361,361,361,361,361,361,120,361,361,361,361,361,361,361,361,+361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,+361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,++/* block 38 */+361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,+361,120,361,361,361,361,120,120,361,361,361,361,361,361,361,361,+361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,+361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,+361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,+361,361,361,361,361,361,361,361,361,361,361,120,120,362,362,362,+363,363,363,363,363,363,363,363,363,364,364,364,364,364,364,364,+364,364,364,364,364,364,364,364,364,364,364,364,364,120,120,120,++/* block 39 */+361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,+365,365,365,365,365,365,365,365,365,365,120,120,120,120,120,120,+366,366,366,366,366,366,366,366,366,366,366,366,366,366,366,366,+366,366,366,366,366,366,366,366,366,366,366,366,366,366,366,366,+366,366,366,366,366,366,366,366,366,366,366,366,366,366,366,366,+366,366,366,366,366,366,366,366,366,366,366,366,366,366,366,366,+366,366,366,366,366,366,366,366,366,366,366,366,366,366,366,366,+367,367,367,367,367,367,120,120,368,368,368,368,368,368,120,120,++/* block 40 */+369,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,+370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,+370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,+370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,+370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,+370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,+370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,+370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,++/* block 41 */+370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,+370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,+370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,+370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,+370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,+370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,+370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,+370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,++/* block 42 */+370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,+370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,+370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,+370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,+370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,+370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,+370,370,370,370,370,370,370,370,370,370,370,370,370,371,372,370,+370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,++/* block 43 */+373,374,374,374,374,374,374,374,374,374,374,374,374,374,374,374,+374,374,374,374,374,374,374,374,374,374,374,375,376,120,120,120,+377,377,377,377,377,377,377,377,377,377,377,377,377,377,377,377,+377,377,377,377,377,377,377,377,377,377,377,377,377,377,377,377,+377,377,377,377,377,377,377,377,377,377,377,377,377,377,377,377,+377,377,377,377,377,377,377,377,377,377,377,377,377,377,377,377,+377,377,377,377,377,377,377,377,377,377,377,  5,  5,  5,378,378,+378,377,377,377,377,377,377,377,377,120,120,120,120,120,120,120,++/* block 44 */+379,379,379,379,379,379,379,379,379,379,379,379,379,379,379,379,+379,379,380,380,380,381,120,120,120,120,120,120,120,120,120,379,+382,382,382,382,382,382,382,382,382,382,382,382,382,382,382,382,+382,382,383,383,384,385,385,120,120,120,120,120,120,120,120,120,+386,386,386,386,386,386,386,386,386,386,386,386,386,386,386,386,+386,386,387,387,120,120,120,120,120,120,120,120,120,120,120,120,+388,388,388,388,388,388,388,388,388,388,388,388,388,120,388,388,+388,120,389,389,120,120,120,120,120,120,120,120,120,120,120,120,++/* block 45 */+390,390,390,390,390,390,390,390,390,390,390,390,390,390,390,390,+390,390,390,390,390,390,390,390,390,390,390,390,390,390,390,390,+390,390,390,390,390,390,390,390,390,390,390,390,390,390,390,390,+390,390,390,390,391,391,392,391,391,391,391,391,391,391,392,392,+392,392,392,392,392,392,391,392,392,391,391,391,391,391,391,391,+391,391,391,391,393,393,393,394,393,393,393,395,390,391,120,120,+396,396,396,396,396,396,396,396,396,396,120,120,120,120,120,120,+397,397,397,397,397,397,397,397,397,397,120,120,120,120,120,120,++/* block 46 */+398,398,399,399,398,399,400,398,398,398,398,401,401,401,402,401,+403,403,403,403,403,403,403,403,403,403,120,120,120,120,120,120,+404,404,404,404,404,404,404,404,404,404,404,404,404,404,404,404,+404,404,404,404,404,404,404,404,404,404,404,404,404,404,404,404,+404,404,404,405,404,404,404,404,404,404,404,404,404,404,404,404,+404,404,404,404,404,404,404,404,404,404,404,404,404,404,404,404,+404,404,404,404,404,404,404,404,404,404,404,404,404,404,404,404,+404,404,404,404,404,404,404,404,404,120,120,120,120,120,120,120,++/* block 47 */+404,404,404,404,404,401,401,404,404,404,404,404,404,404,404,404,+404,404,404,404,404,404,404,404,404,404,404,404,404,404,404,404,+404,404,404,404,404,404,404,404,404,401,404,120,120,120,120,120,+370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,+370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,+370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,+370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,+370,370,370,370,370,370,120,120,120,120,120,120,120,120,120,120,++/* block 48 */+406,406,406,406,406,406,406,406,406,406,406,406,406,406,406,406,+406,406,406,406,406,406,406,406,406,406,406,406,406,406,406,120,+407,407,407,408,408,408,408,407,407,408,408,408,120,120,120,120,+408,408,407,408,408,408,408,408,408,407,407,407,120,120,120,120,+409,120,120,120,410,410,411,411,411,411,411,411,411,411,411,411,+412,412,412,412,412,412,412,412,412,412,412,412,412,412,412,412,+412,412,412,412,412,412,412,412,412,412,412,412,412,412,120,120,+412,412,412,412,412,120,120,120,120,120,120,120,120,120,120,120,++/* block 49 */+413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,+413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,+413,413,413,413,413,413,413,413,413,413,413,413,120,120,120,120,+413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,+413,413,413,413,413,413,413,413,413,413,120,120,120,120,120,120,+414,414,414,414,414,414,414,414,414,414,415,120,120,120,416,416,+417,417,417,417,417,417,417,417,417,417,417,417,417,417,417,417,+417,417,417,417,417,417,417,417,417,417,417,417,417,417,417,417,++/* block 50 */+418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,+418,418,418,418,418,418,418,419,419,420,420,419,120,120,421,421,+422,422,422,422,422,422,422,422,422,422,422,422,422,422,422,422,+422,422,422,422,422,422,422,422,422,422,422,422,422,422,422,422,+422,422,422,422,422,422,422,422,422,422,422,422,422,422,422,422,+422,422,422,422,422,423,424,423,424,424,424,424,424,424,424,120,+424,425,424,425,425,424,424,424,424,424,424,424,424,423,423,423,+423,423,423,424,424,424,424,424,424,424,424,424,424,120,120,424,++/* block 51 */+426,426,426,426,426,426,426,426,426,426,120,120,120,120,120,120,+426,426,426,426,426,426,426,426,426,426,120,120,120,120,120,120,+427,427,427,427,427,427,427,428,427,427,427,427,427,427,120,120,+113,113,113,113,113,113,113,113,113,113,113,113,113,113,429,113,+113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,++/* block 52 */+430,430,430,430,431,432,432,432,432,432,432,432,432,432,432,432,+432,432,432,432,432,432,432,432,432,432,432,432,432,432,432,432,+432,432,432,432,432,432,432,432,432,432,432,432,432,432,432,432,+432,432,432,432,430,433,430,430,430,430,430,431,430,431,431,431,+431,431,430,431,431,432,432,432,432,432,432,432,432,120,120,120,+434,434,434,434,434,434,434,434,434,434,435,435,435,435,435,435,+435,436,436,436,436,436,436,436,436,436,436,430,430,430,430,430,+430,430,430,430,436,436,436,436,436,436,436,436,436,435,435,120,++/* block 53 */+437,437,438,439,439,439,439,439,439,439,439,439,439,439,439,439,+439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,+439,438,437,437,437,437,438,438,437,437,438,437,437,437,439,439,+440,440,440,440,440,440,440,440,440,440,439,439,439,439,439,439,+441,441,441,441,441,441,441,441,441,441,441,441,441,441,441,441,+441,441,441,441,441,441,441,441,441,441,441,441,441,441,441,441,+441,441,441,441,441,441,442,443,442,442,443,443,443,442,443,442,+442,442,443,443,120,120,120,120,120,120,120,120,444,444,444,444,++/* block 54 */+445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,+445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,+445,445,445,445,446,446,446,446,446,446,446,446,447,447,447,447,+447,447,447,447,446,446,447,447,120,120,120,448,448,448,448,448,+449,449,449,449,449,449,449,449,449,449,120,120,120,445,445,445,+450,450,450,450,450,450,450,450,450,450,451,451,451,451,451,451,+451,451,451,451,451,451,451,451,451,451,451,451,451,451,451,451,+451,451,451,451,451,451,451,451,452,452,452,452,452,452,453,453,++/* block 55 */+454,455,456,457,458,459,460,461,462,120,120,120,120,120,120,120,+463,463,463,463,463,463,463,463,463,463,463,463,463,463,463,463,+463,463,463,463,463,463,463,463,463,463,463,463,463,463,463,463,+463,463,463,463,463,463,463,463,463,463,463,120,120,463,463,463,+464,464,464,464,464,464,464,464,120,120,120,120,120,120,120,120,+465,466,465,467,466,468,468,469,468,469,470,466,469,469,466,466,+469,471,466,466,466,466,466,466,466,472,473,474,474,468,474,474,+474,474,475,476,477,473,473,478,479,479,480,120,120,120,120,120,++/* block 56 */+ 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,+ 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,+ 35, 35, 35, 35, 35, 35,128,128,128,128,128,481,110,110,110,110,+110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,+110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,+110,110,110,110,110,110,110,110,110,110,110,110,110,121,121,121,+121,121,110,110,110,110,121,121,121,121,121, 35, 35, 35, 35, 35,+ 35, 35, 35, 35, 35, 35, 35, 35,482,483, 35, 35, 35,484, 35, 35,++/* block 57 */+ 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,485, 35,+ 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,110,110,110,110,110,+110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,+110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,121,+114,114,113,113,113,113,113,113,113,113,113,113,113,113,113,113,+113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,+113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,+113,113,113,113,113,113,113,113,486,113,487,113,113,113,113,113,++/* block 58 */+ 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,+ 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,+ 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,+ 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,+ 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,+ 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,+488,489, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,+ 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,++/* block 59 */+ 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,+ 32, 33, 32, 33, 32, 33, 35, 35, 35, 35, 35,490, 35, 35,491, 35,+ 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,+ 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,+ 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,+ 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,+ 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,+ 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,++/* block 60 */+492,492,492,492,492,492,492,492,493,493,493,493,493,493,493,493,+492,492,492,492,492,492,120,120,493,493,493,493,493,493,120,120,+492,492,492,492,492,492,492,492,493,493,493,493,493,493,493,493,+492,492,492,492,492,492,492,492,493,493,493,493,493,493,493,493,+492,492,492,492,492,492,120,120,493,493,493,493,493,493,120,120,+128,492,128,492,128,492,128,492,120,493,120,493,120,493,120,493,+492,492,492,492,492,492,492,492,493,493,493,493,493,493,493,493,+494,494,495,495,495,495,496,496,497,497,498,498,499,499,120,120,++/* block 61 */+492,492,492,492,492,492,492,492,500,500,500,500,500,500,500,500,+492,492,492,492,492,492,492,492,500,500,500,500,500,500,500,500,+492,492,492,492,492,492,492,492,500,500,500,500,500,500,500,500,+492,492,128,501,128,120,128,128,493,493,502,502,503,119,504,119,+119,119,128,501,128,120,128,128,505,505,505,505,503,119,119,119,+492,492,128,128,120,120,128,128,493,493,506,506,120,119,119,119,+492,492,128,128,128,169,128,128,493,493,507,507,174,119,119,119,+120,120,128,501,128,120,128,128,508,508,509,509,503,119,119,120,++/* block 62 */+  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4, 24,510,511, 24, 24,+ 10, 10, 10, 10, 10, 10,  5,  5, 23, 27,  7, 23, 23, 27,  7, 23,+  5,  5,  5,  5,  5,  5,  5,  5,512,513, 24, 24, 24, 24, 24,514,+  5,  5,  5,  5,  5,  5,  5,  5,  5, 23, 27,  5,515,  5,  5, 16,+ 16,  5,  5,  5,  9,  7,  8,  5,  5,515,  5,  5,  5,  5,  5,  5,+  5,  5,  9,  5, 16,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  4,+ 24, 24, 24, 24, 24,516, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,+ 25,110,120,120, 25, 25, 25, 25, 25, 25,  9,  9,  9,  7,  8,110,++/* block 63 */+ 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,  9,  9,  9,  7,  8,120,+110,110,110,110,110,110,110,110,110,110,110,110,110,120,120,120,+  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,+  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,+  6,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+113,113,113,113,113,113,113,113,113,113,113,113,113,429,429,429,+429,113,429,429,429,113,113,113,113,113,113,113,113,113,113,113,+517,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,++/* block 64 */+ 20, 20,518, 20, 20, 20, 20,518, 20, 20,519,518,518,518,519,519,+518,518,518,519, 20,518, 20, 20,  9,518,518,518,518,518, 20, 20,+ 20, 20, 21, 20,518, 20,520, 20,518, 20,521,522,518,518, 20,519,+518,518,523,518,519,524,524,524,524,525, 20, 20,519,519,518,518,+  9,  9,  9,  9,  9,518,519,519,519,519, 20,  9, 20, 20,526, 20,+ 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,+527,527,527,527,527,527,527,527,527,527,527,527,527,527,527,527,+528,528,528,528,528,528,528,528,528,528,528,528,528,528,528,528,++/* block 65 */+529,529,529, 32, 33,529,529,529,529, 25, 20, 20,120,120,120,120,+  9,  9,  9,  9,530, 21, 21, 21, 21, 21,  9,  9, 20, 20, 20, 20,+  9, 20, 20,  9, 20, 20,  9, 20, 20, 21, 21, 20, 20, 20,  9, 20,+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,  9,  9,+ 20, 20,  9, 20,  9, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,+ 20, 20, 20, 20,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,++/* block 66 */+  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,+  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,+  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,+  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,+  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,+  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,+  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,+  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,++/* block 67 */+ 20, 20, 20, 20, 20, 20, 20, 20,  7,  8,  7,  8, 20, 20, 20, 20,+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21, 21, 20, 20, 20, 20,+  9,  9, 20, 20, 20, 20, 20, 20, 21,  7,  8, 20, 20, 20, 20, 20,+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,  9, 20, 20, 20,++/* block 68 */+ 20, 20, 20, 20, 20, 20, 20, 20, 21, 20, 20, 20, 20, 20, 20, 20,+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,  9,  9,  9,  9,  9,+  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,+  9,  9,  9,  9, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21,+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,  9,  9,  9,  9,+  9,  9, 20, 20, 20, 20, 20, 20, 20, 21, 21, 21, 21, 21, 21, 21,+ 21, 21, 21, 21, 20, 20, 20, 20, 21, 21, 21, 20, 20, 20, 20, 20,++/* block 69 */+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,+ 20, 20, 20, 20, 20, 20, 20,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+ 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,+ 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,++/* block 70 */+ 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,+ 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 20, 20, 20, 20,+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,+ 20, 20, 20, 20, 20, 20,531,531,531,531,531,531,531,531,531,531,+531,531,532,531,531,531,531,531,531,531,531,531,531,531,531,531,+533,533,533,533,533,533,533,533,533,533,533,533,533,533,533,533,+533,533,533,533,533,533,533,533,533,533, 25, 25, 25, 25, 25, 25,+ 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,++/* block 71 */+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,++/* block 72 */+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21, 21, 20, 20, 20, 20,+ 20, 20, 20, 20, 20, 20, 21,  9, 20, 20, 20, 20, 20, 20, 20, 20,+ 21,  9, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,+ 20, 20, 20, 20, 20, 20, 20, 20,  9,  9,  9,530,530,530,530,  9,++/* block 73 */+ 21, 21, 21, 21, 21, 21, 20, 21, 21, 21, 21, 21, 21, 21, 21, 21,+ 21, 21, 21, 20, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,530,+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,++/* block 74 */+ 21, 21, 21, 21, 21, 21, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,++/* block 75 */+ 21, 21, 21, 21, 21, 21, 20, 20, 21, 21, 21, 21, 21, 21, 21, 21,+ 21, 21, 21, 20, 21, 20, 21, 20, 20, 20, 20, 20, 20, 21, 20, 20,+ 20, 21, 20, 20, 20, 20, 20, 20, 21, 20, 20, 20, 20, 20, 20, 20,+ 20, 20, 20, 21, 21, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,+ 20, 20, 20, 20, 21, 20, 20, 21, 20, 20, 20, 20, 21, 20, 21, 20,+ 20, 20, 20, 21, 21, 21, 20, 21, 20, 20, 20, 20, 20, 20, 20, 20,+ 20, 20, 20, 21, 21, 21, 21, 21,  7,  8,  7,  8,  7,  8,  7,  8,+  7,  8,  7,  8,  7,  8, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,++/* block 76 */+ 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,+ 25, 25, 25, 25, 20, 21, 21, 21, 20, 20, 20, 20, 20, 20, 20, 20,+ 20, 21, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,+ 21, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21,+  9,  9,  9,  9,  9,  7,  8,  9,  9,  9,  9,  9,  9,  9,  9,  9,+  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,+  9,  9,  9,  9,  9,  9,  7,  8,  7,  8,  7,  8,  7,  8,  7,  8,+  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,++/* block 77 */+534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,+534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,+534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,+534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,+534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,+534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,+534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,+534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,++/* block 78 */+  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,+  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,+  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,+  9,  9,  9,  9,530,530,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,+  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,+  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,+  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,+  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,++/* block 79 */+  9,  9,  9,  7,  8,  7,  8,  7,  8,  7,  8,  7,  8,  7,  8,  7,+  8,  7,  8,  7,  8,  7,  8,  7,  8,  9,  9,  9,  9,  9,  9,  9,+  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,+  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,+  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,+  9,  9,  9,  9,  9,  9,  9,  9,  7,  8,  7,  8,  9,  9,  9,  9,+  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,+  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  7,  8,  9,  9,++/* block 80 */+ 20, 20, 20, 20, 20, 21, 21, 21, 20, 20, 20, 20, 20, 20, 20, 20,+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21, 21, 20, 20, 20,+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,+  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,+  9,  9,  9,  9,  9, 20, 20,  9,  9,  9,  9,  9,  9, 20, 20, 20,+ 21, 20, 20, 20, 20, 21, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,+ 20, 20, 20, 20,120,120, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,++/* block 81 */+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,+ 20, 20, 20, 20, 20, 20,120, 20, 20, 20, 20, 20, 20, 20, 20, 20,+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,++/* block 82 */+535,535,535,535,535,535,535,535,535,535,535,535,535,535,535,535,+535,535,535,535,535,535,535,535,535,535,535,535,535,535,535,535,+535,535,535,535,535,535,535,535,535,535,535,535,535,535,535,535,+536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,+536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,+536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,+ 32, 33,537,538,539,540,541, 32, 33, 32, 33, 32, 33,542,543,544,+545, 35, 32, 33, 35, 32, 33, 35, 35, 35, 35, 35,110,110,546,546,++/* block 83 */+165,166,165,166,165,166,165,166,165,166,165,166,165,166,165,166,+165,166,165,166,165,166,165,166,165,166,165,166,165,166,165,166,+165,166,165,166,165,166,165,166,165,166,165,166,165,166,165,166,+165,166,165,166,165,166,165,166,165,166,165,166,165,166,165,166,+165,166,165,166,165,166,165,166,165,166,165,166,165,166,165,166,+165,166,165,166,165,166,165,166,165,166,165,166,165,166,165,166,+165,166,165,166,547,548,548,548,548,548,548,165,166,165,166,549,+549,549,165,166,120,120,120,120,120,550,550,550,550,551,550,550,++/* block 84 */+552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,+552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,+552,552,552,552,552,552,120,552,120,120,120,120,120,552,120,120,+553,553,553,553,553,553,553,553,553,553,553,553,553,553,553,553,+553,553,553,553,553,553,553,553,553,553,553,553,553,553,553,553,+553,553,553,553,553,553,553,553,553,553,553,553,553,553,553,553,+553,553,553,553,553,553,553,553,120,120,120,120,120,120,120,554,+555,120,120,120,120,120,120,120,120,120,120,120,120,120,120,556,++/* block 85 */+361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,+361,361,361,361,361,361,361,120,120,120,120,120,120,120,120,120,+361,361,361,361,361,361,361,120,361,361,361,361,361,361,361,120,+361,361,361,361,361,361,361,120,361,361,361,361,361,361,361,120,+361,361,361,361,361,361,361,120,361,361,361,361,361,361,361,120,+361,361,361,361,361,361,361,120,361,361,361,361,361,361,361,120,+557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,+557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,++/* block 86 */+  5,  5, 23, 27, 23, 27,  5,  5,  5, 23, 27,  5, 23, 27,  5,  5,+  5,  5,  5,  5,  5,  5,  5, 10,  5,  5, 10,  5, 23, 27,  5,  5,+ 23, 27,  7,  8,  7,  8,  7,  8,  7,  8,  5,  5,  5,  5,  5,111,+  5,  5,  5,  5,  5,  5,  5,  5,  5,  5, 10, 10,  5,  5,  5,  5,+ 10,  5,  7,558,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,+ 20, 20,  5,  5,  5,  7,  8,  7,  8,  7,  8,  7,  8, 10,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,++/* block 87 */+559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,+559,559,559,559,559,559,559,559,559,559,120,559,559,559,559,559,+559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,+559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,+559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,+559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,+559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,+559,559,559,559,120,120,120,120,120,120,120,120,120,120,120,120,++/* block 88 */+559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,+559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,+559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,+559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,+559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,+559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,+559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,+559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,++/* block 89 */+559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,+559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,+559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,+559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,+559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,+559,559,559,559,559,559,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,120,120,120,120,++/* block 90 */+  4,560,560,561, 20,562,563,564,565,566,565,566,565,566,565,566,+565,566, 20,567,565,566,565,566,565,566,565,566,568,569,570,570,+ 20,564,564,564,564,564,564,564,564,564,571,571,571,571,572,572,+573,574,574,574,574,574, 20,567,564,564,564,562,575,576,577,577,+120,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,+578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,+578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,+578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,++/* block 91 */+578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,+578,578,578,578,578,578,578,120,120,579,579,580,580,581,581,578,+582,583,583,583,583,583,583,583,583,583,583,583,583,583,583,583,+583,583,583,583,583,583,583,583,583,583,583,583,583,583,583,583,+583,583,583,583,583,583,583,583,583,583,583,583,583,583,583,583,+583,583,583,583,583,583,583,583,583,583,583,583,583,583,583,583,+583,583,583,583,583,583,583,583,583,583,583,583,583,583,583,583,+583,583,583,583,583,583,583,583,583,583,583,560,574,584,584,583,++/* block 92 */+120,120,120,120,120,585,585,585,585,585,585,585,585,585,585,585,+585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,+585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,+120,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,+586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,+586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,+586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,+586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,++/* block 93 */+586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,120,+577,577,587,587,587,587,577,577,577,577,577,577,577,577,577,577,+585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,+585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,+577,577,577,577,577,577,577,577,577,577,577,577,577,577,577,577,+577,577,577,577,577,577,577,577,577,577,577,577,577,577,577,577,+577,577,577,577,120,120,120,120,120,120,120,120,120,120,120,120,+583,583,583,583,583,583,583,583,583,583,583,583,583,583,583,583,++/* block 94 */+588,588,588,588,588,588,588,588,588,588,588,588,588,588,588,588,+588,588,588,588,588,588,588,588,588,588,588,588,588,588,588,120,+587,587,587,587,587,587,587,587,587,587,577,577,577,577,577,577,+577,577,577,577,577,577,577,577,577,577,577,577,577,577,577,577,+577,577,577,577,577,577,577,577, 25, 25, 25, 25, 25, 25, 25, 25,+ 20, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,+588,588,588,588,588,588,588,588,588,588,588,588,588,588,588,588,+588,588,588,588,588,588,588,588,588,588,588,588,588,588,588, 20,++/* block 95 */+587,587,587,587,587,587,587,587,587,587,577,577,577,577,577,577,+577,577,577,577,577,577,577,589,577,589,577,577,577,577,577,577,+577,577,577,577,577,577,577,577,577,577,577,577,577,577,577,577,+577, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,+577,577,577,577,577,577,577,577,577,577,577,577, 20, 20, 20, 20,+590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,+590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,+590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,577,++/* block 96 */+590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,+590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,+590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,+590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,+590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,+590,590,590,590,590,590,590,590,577,577,577,577,577,577,577,577,+577,577,577,577,577,577,577,577,577,577,577,577,577,577,577,577,+577, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,577,577,577,577,577,++/* block 97 */+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,+577,577,577,577,577,577,577,577,577,577,577,577,577,577,577,577,+577,577,577,577,577,577,577,577,577,577,577,577,577,577,577, 20,++/* block 98 */+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,++/* block 99 */+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,++/* block 100 */+592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,+592,592,592,592,592,593,592,592,592,592,592,592,592,592,592,592,+592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,+592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,+592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,+592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,+592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,+592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,++/* block 101 */+592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,+592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,+592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,+592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,+592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,+592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,+592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,+592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,++/* block 102 */+592,592,592,592,592,592,592,592,592,592,592,592,592,120,120,120,+594,594,594,594,594,594,594,594,594,594,594,594,594,594,594,594,+594,594,594,594,594,594,594,594,594,594,594,594,594,594,594,594,+594,594,594,594,594,594,594,594,594,594,594,594,594,594,594,594,+594,594,594,594,594,594,594,120,120,120,120,120,120,120,120,120,+595,595,595,595,595,595,595,595,595,595,595,595,595,595,595,595,+595,595,595,595,595,595,595,595,595,595,595,595,595,595,595,595,+595,595,595,595,595,595,595,595,596,596,596,596,596,596,597,597,++/* block 103 */+598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,+598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,+598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,+598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,+598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,+598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,+598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,+598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,++/* block 104 */+598,598,598,598,598,598,598,598,598,598,598,598,599,600,600,600,+598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,+601,601,601,601,601,601,601,601,601,601,598,598,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+192,193,192,193,192,193,192,193,192,193,602,603,192,193,192,193,+192,193,192,193,192,193,192,193,192,193,192,193,192,193,192,193,+192,193,192,193,192,193,192,193,192,193,192,193,192,193,604,198,+200,200,200,605,557,557,557,557,557,557,557,557,557,557,605,482,++/* block 105 */+192,193,192,193,192,193,192,193,192,193,192,193,192,193,192,193,+192,193,192,193,192,193,192,193,192,193,192,193,482,482,557,557,+606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,+606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,+606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,+606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,+606,606,606,606,606,606,607,607,607,607,607,607,607,607,607,607,+608,608,609,609,609,609,609,609,120,120,120,120,120,120,120,120,++/* block 106 */+610,610,610,610,610,610,610,610, 15, 15, 15, 15, 15, 15, 15, 15,+ 15, 15, 15, 15, 15, 15, 15,111,111,111,111,111,111,111,111,111,+ 15, 15, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,+ 35, 35, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,+ 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,+ 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,+ 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,+110, 35, 35, 35, 35, 35, 35, 35, 35, 32, 33, 32, 33,611, 32, 33,++/* block 107 */+ 32, 33, 32, 33, 32, 33, 32, 33,111, 15, 15, 32, 33,612, 35, 22,+ 32, 33, 32, 33,613, 35, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,+ 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,614,615,616,617,614, 35,+618,619,620,621, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,+ 32, 33, 32, 33,622,623,624, 32, 33, 32, 33,120,120,120,120,120,+ 32, 33,120, 35,120, 35, 32, 33, 32, 33,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,110,110,110, 32, 33, 22,110,110, 35, 22, 22, 22, 22, 22,++/* block 108 */+625,625,626,625,625,625,626,625,625,625,625,626,625,625,625,625,+625,625,625,625,625,625,625,625,625,625,625,625,625,625,625,625,+625,625,625,627,627,626,626,627,628,628,628,628,626,120,120,120,+629,629,629,630,630,630,631,631,632,631,120,120,120,120,120,120,+633,633,633,633,633,633,633,633,633,633,633,633,633,633,633,633,+633,633,633,633,633,633,633,633,633,633,633,633,633,633,633,633,+633,633,633,633,633,633,633,633,633,633,633,633,633,633,633,633,+633,633,633,633,634,634,634,634,120,120,120,120,120,120,120,120,++/* block 109 */+635,635,636,636,636,636,636,636,636,636,636,636,636,636,636,636,+636,636,636,636,636,636,636,636,636,636,636,636,636,636,636,636,+636,636,636,636,636,636,636,636,636,636,636,636,636,636,636,636,+636,636,636,636,635,635,635,635,635,635,635,635,635,635,635,635,+635,635,635,635,637,637,120,120,120,120,120,120,120,120,638,638,+639,639,639,639,639,639,639,639,639,639,120,120,120,120,120,120,+253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,+253,640,255,641,255,255,255,255,261,261,261,255,261,255,255,253,++/* block 110 */+642,642,642,642,642,642,642,642,642,642,643,643,643,643,643,643,+643,643,643,643,643,643,643,643,643,643,643,643,643,643,643,643,+643,643,643,643,643,643,644,644,644,644,644,644,644,644,645,646,+647,647,647,647,647,647,647,647,647,647,647,647,647,647,647,647,+647,647,647,647,647,647,647,648,648,648,648,648,648,648,648,648,+648,648,649,649,120,120,120,120,120,120,120,120,120,120,120,650,+358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,+358,358,358,358,358,358,358,358,358,358,358,358,358,120,120,120,++/* block 111 */+651,651,651,652,653,653,653,653,653,653,653,653,653,653,653,653,+653,653,653,653,653,653,653,653,653,653,653,653,653,653,653,653,+653,653,653,653,653,653,653,653,653,653,653,653,653,653,653,653,+653,653,653,651,652,652,651,651,651,651,652,652,651,651,652,652,+652,654,654,654,654,654,654,654,654,654,654,654,654,654,120,655,+656,656,656,656,656,656,656,656,656,656,120,120,120,120,654,654,+346,346,346,346,346,348,657,346,346,346,346,346,346,346,346,346,+352,352,352,352,352,352,352,352,352,352,346,346,346,346,346,120,++/* block 112 */+658,658,658,658,658,658,658,658,658,658,658,658,658,658,658,658,+658,658,658,658,658,658,658,658,658,658,658,658,658,658,658,658,+658,658,658,658,658,658,658,658,658,659,659,659,659,659,659,660,+660,659,659,660,660,659,659,120,120,120,120,120,120,120,120,120,+658,658,658,659,658,658,658,658,658,658,658,658,659,660,120,120,+661,661,661,661,661,661,661,661,661,661,120,120,662,662,662,662,+346,346,346,346,346,346,346,346,346,346,346,346,346,346,346,346,+657,346,346,346,346,346,346,353,353,353,346,347,348,347,346,346,++/* block 113 */+663,663,663,663,663,663,663,663,663,663,663,663,663,663,663,663,+663,663,663,663,663,663,663,663,663,663,663,663,663,663,663,663,+663,663,663,663,663,663,663,663,663,663,663,663,663,663,663,663,+664,663,664,664,664,663,663,664,664,663,663,663,663,663,664,664,+663,664,663,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,663,663,665,666,666,+667,667,667,667,667,667,667,667,667,667,667,668,669,669,668,668,+670,670,667,671,671,668,669,120,120,120,120,120,120,120,120,120,++/* block 114 */+120,361,361,361,361,361,361,120,120,361,361,361,361,361,361,120,+120,361,361,361,361,361,361,120,120,120,120,120,120,120,120,120,+361,361,361,361,361,361,361,120,361,361,361,361,361,361,361,120,+ 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,+ 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,+ 35, 35, 35,672, 35, 35, 35, 35, 35, 35, 35, 15,110,110,110,110,+ 35, 35, 35, 35, 35,128, 35, 35, 35,110, 15, 15,120,120,120,120,+673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,++/* block 115 */+673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,+673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,+673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,+673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,+667,667,667,667,667,667,667,667,667,667,667,667,667,667,667,667,+667,667,667,667,667,667,667,667,667,667,667,667,667,667,667,667,+667,667,667,668,668,669,668,668,669,668,668,670,668,669,120,120,+674,674,674,674,674,674,674,674,674,674,120,120,120,120,120,120,++/* block 116 */+675,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,+676,676,676,676,676,676,676,676,676,676,676,676,675,676,676,676,+676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,+676,676,676,676,676,676,676,676,675,676,676,676,676,676,676,676,+676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,+676,676,676,676,675,676,676,676,676,676,676,676,676,676,676,676,+676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,+675,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,++/* block 117 */+676,676,676,676,676,676,676,676,676,676,676,676,675,676,676,676,+676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,+676,676,676,676,676,676,676,676,675,676,676,676,676,676,676,676,+676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,+676,676,676,676,675,676,676,676,676,676,676,676,676,676,676,676,+676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,+675,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,+676,676,676,676,676,676,676,676,676,676,676,676,675,676,676,676,++/* block 118 */+676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,+676,676,676,676,676,676,676,676,675,676,676,676,676,676,676,676,+676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,+676,676,676,676,675,676,676,676,676,676,676,676,676,676,676,676,+676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,+675,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,+676,676,676,676,676,676,676,676,676,676,676,676,675,676,676,676,+676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,++/* block 119 */+676,676,676,676,676,676,676,676,675,676,676,676,676,676,676,676,+676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,+676,676,676,676,675,676,676,676,676,676,676,676,676,676,676,676,+676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,+675,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,+676,676,676,676,676,676,676,676,676,676,676,676,675,676,676,676,+676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,+676,676,676,676,676,676,676,676,675,676,676,676,676,676,676,676,++/* block 120 */+676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,+676,676,676,676,675,676,676,676,676,676,676,676,676,676,676,676,+676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,+675,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,+676,676,676,676,676,676,676,676,676,676,676,676,675,676,676,676,+676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,+676,676,676,676,676,676,676,676,675,676,676,676,676,676,676,676,+676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,++/* block 121 */+676,676,676,676,675,676,676,676,676,676,676,676,676,676,676,676,+676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,+675,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,+676,676,676,676,676,676,676,676,676,676,676,676,675,676,676,676,+676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,+676,676,676,676,676,676,676,676,675,676,676,676,676,676,676,676,+676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,+676,676,676,676,675,676,676,676,676,676,676,676,676,676,676,676,++/* block 122 */+676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,+675,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,+676,676,676,676,676,676,676,676,676,676,676,676,675,676,676,676,+676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,+676,676,676,676,676,676,676,676,675,676,676,676,676,676,676,676,+676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,+676,676,676,676,675,676,676,676,676,676,676,676,676,676,676,676,+676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,++/* block 123 */+676,676,676,676,676,676,676,676,675,676,676,676,676,676,676,676,+676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,+676,676,676,676,120,120,120,120,120,120,120,120,120,120,120,120,+359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,+359,359,359,359,359,359,359,120,120,120,120,360,360,360,360,360,+360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,+360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,+360,360,360,360,360,360,360,360,360,360,360,360,120,120,120,120,++/* block 124 */+677,677,677,677,677,677,677,677,677,677,677,677,677,677,677,677,+677,677,677,677,677,677,677,677,677,677,677,677,677,677,677,677,+677,677,677,677,677,677,677,677,677,677,677,677,677,677,677,677,+677,677,677,677,677,677,677,677,677,677,677,677,677,677,677,677,+677,677,677,677,677,677,677,677,677,677,677,677,677,677,677,677,+677,677,677,677,677,677,677,677,677,677,677,677,677,677,677,677,+677,677,677,677,677,677,677,677,677,677,677,677,677,677,677,677,+677,677,677,677,677,677,677,677,677,677,677,677,677,677,677,677,++/* block 125 */+678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,+678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,+678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,+678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,+678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,+678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,+678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,+678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,++/* block 126 */+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,+591,591,591,591,591,591,591,591,591,591,591,591,591,591,120,120,+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,++/* block 127 */+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,+591,591,591,591,591,591,591,591,591,591,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,++/* block 128 */+ 35, 35, 35, 35, 35, 35, 35,120,120,120,120,120,120,120,120,120,+120,120,120,206,206,206,206,206,120,120,120,120,120,214,211,214,+214,214,214,214,214,214,214,214,214,679,214,214,214,214,214,214,+214,214,214,214,214,214,214,120,214,214,214,214,214,120,214,120,+214,214,120,214,214,120,214,214,214,214,214,214,214,214,214,214,+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,++/* block 129 */+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,+225,225,252,252,252,252,252,252,252,252,252,252,252,252,252,252,+252,252,252,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,225,225,225,225,225,225,225,225,225,225,225,225,225,+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,++/* block 130 */+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,++/* block 131 */+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,+225,225,225,225,225,225,225,225,225,225,225,225,225,225,680,681,+221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,++/* block 132 */+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,+120,120,225,225,225,225,225,225,225,225,225,225,225,225,225,225,+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,+225,225,225,225,225,225,225,225,120,120,120,120,120,120,120,221,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+225,225,682,225,225,225,225,225,225,225,225,225,219,683,221,221,++/* block 133 */+113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,+  5,  5,  5,  5,  5,  5,  5,  7,  8,  5,120,120,120,120,120,120,+113,113,113,113,113,113,113,113,113,113,113,113,113,113,557,557,+  5, 10, 10, 16, 16,  7,  8,  7,  8,  7,  8,  7,  8,  7,  8,  7,+  8,  7,  8,  7,  8,561,561,  7,  8,  5,  5,  5,  5, 16, 16, 16,+  5,  5,  5,120,  5,  5,  5,  5, 10,  7,  8,  7,  8,  7,  8,  5,+  5,  5,  9, 10,  9,  9,  9,120,  5,  6,  5,  5,120,120,120,120,+225,225,225,225,225,120,225,225,225,225,225,225,225,225,225,225,++/* block 134 */+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,+225,225,225,225,225,225,225,225,225,225,225,225,225,120,120, 24,++/* block 135 */+120,  5,  5,  5,  6,  5,  5,  5,  7,  8,  5,  9,  5, 10,  5,  5,+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,  5,  5,  9,  9,  9,  5,+  5, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,  7,  5,  8, 15, 16,+ 15, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,  7,  9,  8,  9,  7,+  8,560,565,566,560,560,583,583,583,583,583,583,583,583,583,583,+574,583,583,583,583,583,583,583,583,583,583,583,583,583,583,583,++/* block 136 */+583,583,583,583,583,583,583,583,583,583,583,583,583,583,583,583,+583,583,583,583,583,583,583,583,583,583,583,583,583,583,684,684,+586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,+586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,120,+120,120,586,586,586,586,586,586,120,120,586,586,586,586,586,586,+120,120,586,586,586,586,586,586,120,120,586,586,586,120,120,120,+  6,  6,  9, 15, 20,  6,  6,120, 20,  9,  9,  9,  9, 20, 20,120,+516,516,516,516,516,516,516,516,516, 24, 24, 24, 20, 20,120,120,++/* block 137 */+685,685,685,685,685,685,685,685,685,685,685,685,120,685,685,685,+685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,+685,685,685,685,685,685,685,120,685,685,685,685,685,685,685,685,+685,685,685,685,685,685,685,685,685,685,685,120,685,685,120,685,+685,685,685,685,685,685,685,685,685,685,685,685,685,685,120,120,+685,685,685,685,685,685,685,685,685,685,685,685,685,685,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,++/* block 138 */+685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,+685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,+685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,+685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,+685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,+685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,+685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,+685,685,685,685,685,685,685,685,685,685,685,120,120,120,120,120,++/* block 139 */+686,686,687,120,120,120,120,688,688,688,688,688,688,688,688,688,+688,688,688,688,688,688,688,688,688,688,688,688,688,688,688,688,+688,688,688,688,688,688,688,688,688,688,688,688,688,688,688,688,+688,688,688,688,120,120,120,689,689,689,689,689,689,689,689,689,+690,690,690,690,690,690,690,690,690,690,690,690,690,690,690,690,+690,690,690,690,690,690,690,690,690,690,690,690,690,690,690,690,+690,690,690,690,690,690,690,690,690,690,690,690,690,690,690,690,+690,690,690,690,690,691,691,691,691,692,692,692,692,692,692,692,++/* block 140 */+692,692,692,692,692,692,692,692,692,692,691,691,692,692,692,120,+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,120,120,120,+692,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,113,120,120,++/* block 141 */+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,++/* block 142 */+693,693,693,693,693,693,693,693,693,693,693,693,693,693,693,693,+693,693,693,693,693,693,693,693,693,693,693,693,693,120,120,120,+694,694,694,694,694,694,694,694,694,694,694,694,694,694,694,694,+694,694,694,694,694,694,694,694,694,694,694,694,694,694,694,694,+694,694,694,694,694,694,694,694,694,694,694,694,694,694,694,694,+694,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+695,696,696,696,696,696,696,696,696,696,696,696,696,696,696,696,+696,696,696,696,696,696,696,696,696,696,696,696,120,120,120,120,++/* block 143 */+697,697,697,697,697,697,697,697,697,697,697,697,697,697,697,697,+697,697,697,697,697,697,697,697,697,697,697,697,697,697,697,697,+698,698,698,698,120,120,120,120,120,120,120,120,120,697,697,697,+699,699,699,699,699,699,699,699,699,699,699,699,699,699,699,699,+699,700,699,699,699,699,699,699,699,699,700,120,120,120,120,120,+701,701,701,701,701,701,701,701,701,701,701,701,701,701,701,701,+701,701,701,701,701,701,701,701,701,701,701,701,701,701,701,701,+701,701,701,701,701,701,702,702,702,702,702,120,120,120,120,120,++/* block 144 */+703,703,703,703,703,703,703,703,703,703,703,703,703,703,703,703,+703,703,703,703,703,703,703,703,703,703,703,703,703,703,120,704,+705,705,705,705,705,705,705,705,705,705,705,705,705,705,705,705,+705,705,705,705,705,705,705,705,705,705,705,705,705,705,705,705,+705,705,705,705,120,120,120,120,705,705,705,705,705,705,705,705,+706,707,707,707,707,707,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,++/* block 145 */+708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,+708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,+708,708,708,708,708,708,708,708,709,709,709,709,709,709,709,709,+709,709,709,709,709,709,709,709,709,709,709,709,709,709,709,709,+709,709,709,709,709,709,709,709,709,709,709,709,709,709,709,709,+710,710,710,710,710,710,710,710,710,710,710,710,710,710,710,710,+710,710,710,710,710,710,710,710,710,710,710,710,710,710,710,710,+710,710,710,710,710,710,710,710,710,710,710,710,710,710,710,710,++/* block 146 */+711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,+711,711,711,711,711,711,711,711,711,711,711,711,711,711,120,120,+712,712,712,712,712,712,712,712,712,712,120,120,120,120,120,120,+713,713,713,713,713,713,713,713,713,713,713,713,713,713,713,713,+713,713,713,713,713,713,713,713,713,713,713,713,713,713,713,713,+713,713,713,713,120,120,120,120,714,714,714,714,714,714,714,714,+714,714,714,714,714,714,714,714,714,714,714,714,714,714,714,714,+714,714,714,714,714,714,714,714,714,714,714,714,120,120,120,120,++/* block 147 */+715,715,715,715,715,715,715,715,715,715,715,715,715,715,715,715,+715,715,715,715,715,715,715,715,715,715,715,715,715,715,715,715,+715,715,715,715,715,715,715,715,120,120,120,120,120,120,120,120,+716,716,716,716,716,716,716,716,716,716,716,716,716,716,716,716,+716,716,716,716,716,716,716,716,716,716,716,716,716,716,716,716,+716,716,716,716,716,716,716,716,716,716,716,716,716,716,716,716,+716,716,716,716,120,120,120,120,120,120,120,120,120,120,120,717,+718,718,718,718,718,718,718,718,718,718,718,120,718,718,718,718,++/* block 148 */+718,718,718,718,718,718,718,718,718,718,718,120,718,718,718,718,+718,718,718,120,718,718,120,719,719,719,719,719,719,719,719,719,+719,719,120,719,719,719,719,719,719,719,719,719,719,719,719,719,+719,719,120,719,719,719,719,719,719,719,120,719,719,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,++/* block 149 */+720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,+720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,+720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,+720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,+720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,+720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,+720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,+720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,++/* block 150 */+720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,+720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,+720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,+720,720,720,720,720,720,720,120,120,120,120,120,120,120,120,120,+720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,+720,720,720,720,720,720,120,120,120,120,120,120,120,120,120,120,+720,720,720,720,720,720,720,720,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,++/* block 151 */+110,110,110,110,110,110,120,110,110,110,110,110,110,110,110,110,+110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,+110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,+110,120,110,110,110,110,110,110,110,110,110,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,++/* block 152 */+721,721,721,721,721,721,120,120,721,120,721,721,721,721,721,721,+721,721,721,721,721,721,721,721,721,721,721,721,721,721,721,721,+721,721,721,721,721,721,721,721,721,721,721,721,721,721,721,721,+721,721,721,721,721,721,120,721,721,120,120,120,721,120,120,721,+722,722,722,722,722,722,722,722,722,722,722,722,722,722,722,722,+722,722,722,722,722,722,120,723,724,724,724,724,724,724,724,724,+725,725,725,725,725,725,725,725,725,725,725,725,725,725,725,725,+725,725,725,725,725,725,725,726,726,727,727,727,727,727,727,727,++/* block 153 */+728,728,728,728,728,728,728,728,728,728,728,728,728,728,728,728,+728,728,728,728,728,728,728,728,728,728,728,728,728,728,728,120,+120,120,120,120,120,120,120,729,729,729,729,729,729,729,729,729,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+730,730,730,730,730,730,730,730,730,730,730,730,730,730,730,730,+730,730,730,120,730,730,120,120,120,120,120,731,731,731,731,731,++/* block 154 */+732,732,732,732,732,732,732,732,732,732,732,732,732,732,732,732,+732,732,732,732,732,732,733,733,733,733,733,733,120,120,120,734,+735,735,735,735,735,735,735,735,735,735,735,735,735,735,735,735,+735,735,735,735,735,735,735,735,735,735,120,120,120,120,120,736,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,++/* block 155 */+737,737,737,737,737,737,737,737,737,737,737,737,737,737,737,737,+737,737,737,737,737,737,737,737,737,737,737,737,737,737,737,737,+738,738,738,738,738,738,738,738,738,738,738,738,738,738,738,738,+738,738,738,738,738,738,738,738,120,120,120,120,739,739,738,738,+739,739,739,739,739,739,739,739,739,739,739,739,739,739,739,739,+120,120,739,739,739,739,739,739,739,739,739,739,739,739,739,739,+739,739,739,739,739,739,739,739,739,739,739,739,739,739,739,739,+739,739,739,739,739,739,739,739,739,739,739,739,739,739,739,739,++/* block 156 */+740,741,741,741,120,741,741,120,120,120,120,120,741,741,741,741,+740,740,740,740,120,740,740,740,120,740,740,740,740,740,740,740,+740,740,740,740,740,740,740,740,740,740,740,740,740,740,740,740,+740,740,740,740,740,740,120,120,741,741,741,120,120,120,120,741,+742,742,742,742,742,742,742,742,742,120,120,120,120,120,120,120,+743,743,743,743,743,743,743,743,743,120,120,120,120,120,120,120,+744,744,744,744,744,744,744,744,744,744,744,744,744,744,744,744,+744,744,744,744,744,744,744,744,744,744,744,744,744,745,745,746,++/* block 157 */+747,747,747,747,747,747,747,747,747,747,747,747,747,747,747,747,+747,747,747,747,747,747,747,747,747,747,747,747,747,748,748,748,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+749,749,749,749,749,749,749,749,750,749,749,749,749,749,749,749,+749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,+749,749,749,749,749,751,751,120,120,120,120,752,752,752,752,752,+753,753,754,753,753,753,753,120,120,120,120,120,120,120,120,120,++/* block 158 */+755,755,755,755,755,755,755,755,755,755,755,755,755,755,755,755,+755,755,755,755,755,755,755,755,755,755,755,755,755,755,755,755,+755,755,755,755,755,755,755,755,755,755,755,755,755,755,755,755,+755,755,755,755,755,755,120,120,120,756,756,756,756,756,756,756,+757,757,757,757,757,757,757,757,757,757,757,757,757,757,757,757,+757,757,757,757,757,757,120,120,758,758,758,758,758,758,758,758,+759,759,759,759,759,759,759,759,759,759,759,759,759,759,759,759,+759,759,759,120,120,120,120,120,760,760,760,760,760,760,760,760,++/* block 159 */+761,761,761,761,761,761,761,761,761,761,761,761,761,761,761,761,+761,761,120,120,120,120,120,120,120,762,762,762,762,120,120,120,+120,120,120,120,120,120,120,120,120,763,763,763,763,763,763,763,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,++/* block 160 */+764,764,764,764,764,764,764,764,764,764,764,764,764,764,764,764,+764,764,764,764,764,764,764,764,764,764,764,764,764,764,764,764,+764,764,764,764,764,764,764,764,764,764,764,764,764,764,764,764,+764,764,764,764,764,764,764,764,764,764,764,764,764,764,764,764,+764,764,764,764,764,764,764,764,764,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,++/* block 161 */+765,765,765,765,765,765,765,765,765,765,765,765,765,765,765,765,+765,765,765,765,765,765,765,765,765,765,765,765,765,765,765,765,+765,765,765,765,765,765,765,765,765,765,765,765,765,765,765,765,+765,765,765,120,120,120,120,120,120,120,120,120,120,120,120,120,+766,766,766,766,766,766,766,766,766,766,766,766,766,766,766,766,+766,766,766,766,766,766,766,766,766,766,766,766,766,766,766,766,+766,766,766,766,766,766,766,766,766,766,766,766,766,766,766,766,+766,766,766,120,120,120,120,120,120,120,767,767,767,767,767,767,++/* block 162 */+768,768,768,768,768,768,768,768,768,768,768,768,768,768,768,768,+768,768,768,768,768,768,768,768,768,768,768,768,768,768,768,768,+768,768,768,768,769,769,769,769,120,120,120,120,120,120,120,120,+770,770,770,770,770,770,770,770,770,770,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,++/* block 163 */+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,+771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,120,++/* block 164 */+772,772,772,772,772,772,772,772,772,772,772,772,772,772,772,772,+772,772,772,772,772,772,772,772,772,772,772,772,772,772,772,772,+772,772,772,772,772,772,772,772,772,772,120,773,773,774,120,120,+772,772,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,++/* block 165 */+775,775,775,775,775,775,775,775,775,775,775,775,775,775,775,775,+775,775,775,775,775,775,775,775,775,775,775,775,775,776,776,776,+776,776,776,776,776,776,776,775,120,120,120,120,120,120,120,120,+777,777,777,777,777,777,777,777,777,777,777,777,777,777,777,777,+777,777,777,777,777,777,778,778,778,778,778,778,778,778,778,778,+778,779,779,779,779,780,780,780,780,780,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,++/* block 166 */+781,781,782,782,782,782,783,783,783,783,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+784,784,784,784,784,784,784,784,784,784,784,784,784,784,784,784,+784,784,784,784,784,785,785,785,785,785,785,785,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+786,786,786,786,786,786,786,786,786,786,786,786,786,786,786,786,+786,786,786,786,786,786,786,120,120,120,120,120,120,120,120,120,++/* block 167 */+787,788,787,789,789,789,789,789,789,789,789,789,789,789,789,789,+789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,+789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,+789,789,789,789,789,789,789,789,788,788,788,788,788,788,788,788,+788,788,788,788,788,788,788,790,790,790,790,790,790,790,120,120,+120,120,791,791,791,791,791,791,791,791,791,791,791,791,791,791,+791,791,791,791,791,791,792,792,792,792,792,792,792,792,792,792,+788,789,789,788,788,789,120,120,120,120,120,120,120,120,120,788,++/* block 168 */+793,793,794,795,795,795,795,795,795,795,795,795,795,795,795,795,+795,795,795,795,795,795,795,795,795,795,795,795,795,795,795,795,+795,795,795,795,795,795,795,795,795,795,795,795,795,795,795,795,+794,794,794,793,793,793,793,794,794,793,793,796,796,797,796,796,+796,796,793,120,120,120,120,120,120,120,120,120,120,797,120,120,+798,798,798,798,798,798,798,798,798,798,798,798,798,798,798,798,+798,798,798,798,798,798,798,798,798,120,120,120,120,120,120,120,+799,799,799,799,799,799,799,799,799,799,120,120,120,120,120,120,++/* block 169 */+800,800,800,801,801,801,801,801,801,801,801,801,801,801,801,801,+801,801,801,801,801,801,801,801,801,801,801,801,801,801,801,801,+801,801,801,801,801,801,801,800,800,800,800,800,802,800,800,800,+800,800,800,800,800,120,803,803,803,803,803,803,803,803,803,803,+804,804,804,804,801,802,802,801,120,120,120,120,120,120,120,120,+805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,+805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,+805,805,805,806,807,807,805,120,120,120,120,120,120,120,120,120,++/* block 170 */+808,808,809,810,810,810,810,810,810,810,810,810,810,810,810,810,+810,810,810,810,810,810,810,810,810,810,810,810,810,810,810,810,+810,810,810,810,810,810,810,810,810,810,810,810,810,810,810,810,+810,810,810,809,809,809,808,808,808,808,808,808,808,808,808,809,+809,810,811,811,810,812,812,812,812,808,808,808,808,812,809,808,+813,813,813,813,813,813,813,813,813,813,810,812,810,812,812,812,+120,814,814,814,814,814,814,814,814,814,814,814,814,814,814,814,+814,814,814,814,814,120,120,120,120,120,120,120,120,120,120,120,++/* block 171 */+815,815,815,815,815,815,815,815,815,815,815,815,815,815,815,815,+815,815,120,815,815,815,815,815,815,815,815,815,815,815,815,815,+815,815,815,815,815,815,815,815,815,815,815,815,816,816,816,817,+817,817,816,816,817,816,817,817,818,818,818,818,818,818,817,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,++/* block 172 */+819,819,819,819,819,819,819,120,819,120,819,819,819,819,120,819,+819,819,819,819,819,819,819,819,819,819,819,819,819,819,120,819,+819,819,819,819,819,819,819,819,819,820,120,120,120,120,120,120,+821,821,821,821,821,821,821,821,821,821,821,821,821,821,821,821,+821,821,821,821,821,821,821,821,821,821,821,821,821,821,821,821,+821,821,821,821,821,821,821,821,821,821,821,821,821,821,821,822,+823,823,823,822,822,822,822,822,822,822,822,120,120,120,120,120,+824,824,824,824,824,824,824,824,824,824,120,120,120,120,120,120,++/* block 173 */+825,826,827,828,120,829,829,829,829,829,829,829,829,120,120,829,+829,120,120,829,829,829,829,829,829,829,829,829,829,829,829,829,+829,829,829,829,829,829,829,829,829,120,829,829,829,829,829,829,+829,120,829,829,120,829,829,829,829,829,120,830,826,829,831,827,+825,827,827,827,827,120,120,827,827,120,120,827,827,827,120,120,+829,120,120,120,120,120,120,831,120,120,120,120,120,829,829,829,+829,829,827,827,120,120,825,825,825,825,825,825,825,120,120,120,+825,825,825,825,825,120,120,120,120,120,120,120,120,120,120,120,++/* block 174 */+832,832,832,832,832,832,832,832,832,832,832,832,832,832,832,832,+832,832,832,832,832,832,832,832,832,832,832,832,832,832,832,832,+832,832,832,832,832,832,832,832,832,832,832,832,832,832,832,832,+832,832,832,832,832,833,833,833,834,834,834,834,834,834,834,834,+833,833,834,834,834,833,834,832,832,832,832,835,835,835,835,835,+836,836,836,836,836,836,836,836,836,836,835,835,120,835,834,832,+832,832,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,++/* block 175 */+837,837,837,837,837,837,837,837,837,837,837,837,837,837,837,837,+837,837,837,837,837,837,837,837,837,837,837,837,837,837,837,837,+837,837,837,837,837,837,837,837,837,837,837,837,837,837,837,837,+838,839,839,840,840,840,840,840,840,839,840,839,839,838,839,840,+840,839,840,840,837,837,841,837,120,120,120,120,120,120,120,120,+842,842,842,842,842,842,842,842,842,842,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,++/* block 176 */+843,843,843,843,843,843,843,843,843,843,843,843,843,843,843,843,+843,843,843,843,843,843,843,843,843,843,843,843,843,843,843,843,+843,843,843,843,843,843,843,843,843,843,843,843,843,843,843,844,+845,845,846,846,846,846,120,120,845,845,845,845,846,846,845,846,+846,847,847,847,847,847,847,847,847,847,847,847,847,847,847,847,+847,847,847,847,847,847,847,847,843,843,843,843,846,846,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,++/* block 177 */+848,848,848,848,848,848,848,848,848,848,848,848,848,848,848,848,+848,848,848,848,848,848,848,848,848,848,848,848,848,848,848,848,+848,848,848,848,848,848,848,848,848,848,848,848,848,848,848,848,+849,849,849,850,850,850,850,850,850,850,850,849,849,850,849,850,+850,851,851,851,848,120,120,120,120,120,120,120,120,120,120,120,+852,852,852,852,852,852,852,852,852,852,120,120,120,120,120,120,+398,398,398,398,398,398,398,398,398,398,398,398,398,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,++/* block 178 */+853,853,853,853,853,853,853,853,853,853,853,853,853,853,853,853,+853,853,853,853,853,853,853,853,853,853,853,853,853,853,853,853,+853,853,853,853,853,853,853,853,853,853,853,854,855,854,855,855,+854,854,854,854,854,854,855,854,853,856,120,120,120,120,120,120,+857,857,857,857,857,857,857,857,857,857,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,++/* block 179 */+858,858,858,858,858,858,858,858,858,858,858,858,858,858,858,858,+858,858,858,858,858,858,858,858,858,858,858,120,120,859,859,859,+860,860,859,859,859,859,861,859,859,859,859,859,120,120,120,120,+862,862,862,862,862,862,862,862,862,862,863,863,864,864,864,865,+858,858,858,858,858,858,858,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,++/* block 180 */+866,866,866,866,866,866,866,866,866,866,866,866,866,866,866,866,+866,866,866,866,866,866,866,866,866,866,866,866,866,866,866,866,+866,866,866,866,866,866,866,866,866,866,866,866,867,867,867,868,+868,868,868,868,868,868,868,868,867,868,868,869,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,++/* block 181 */+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,+870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,+871,871,871,871,871,871,871,871,871,871,871,871,871,871,871,871,+871,871,871,871,871,871,871,871,871,871,871,871,871,871,871,871,+872,872,872,872,872,872,872,872,872,872,873,873,873,873,873,873,+873,873,873,120,120,120,120,120,120,120,120,120,120,120,120,874,++/* block 182 */+875,875,875,875,875,875,875,120,120,875,120,120,875,875,875,875,+875,875,875,875,120,875,875,120,875,875,875,875,875,875,875,875,+875,875,875,875,875,875,875,875,875,875,875,875,875,875,875,875,+876,877,877,877,877,877,120,877,877,120,120,878,878,877,878,879,+877,879,877,878,880,880,880,120,120,120,120,120,120,120,120,120,+881,881,881,881,881,881,881,881,881,881,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,++/* block 183 */+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+882,882,882,882,882,882,882,882,120,120,882,882,882,882,882,882,+882,882,882,882,882,882,882,882,882,882,882,882,882,882,882,882,+882,882,882,882,882,882,882,882,882,882,882,882,882,882,882,882,+882,883,883,883,884,884,884,884,120,120,884,884,883,883,883,883,+884,882,885,882,883,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,++/* block 184 */+886,887,887,887,887,887,887,887,887,887,887,886,886,886,886,886,+886,886,886,886,886,886,886,886,886,886,886,886,886,886,886,886,+886,886,886,886,886,886,886,886,886,886,886,886,886,886,886,886,+886,886,886,887,887,887,887,887,887,888,889,887,887,887,887,890,+890,890,890,890,890,890,890,887,120,120,120,120,120,120,120,120,+891,892,892,892,892,892,892,893,893,892,892,892,891,891,891,891,+891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,+891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,++/* block 185 */+891,891,891,891,894,894,894,894,894,894,892,892,892,892,892,892,+892,892,892,892,892,892,892,893,892,892,895,895,895,891,895,895,+895,895,895,120,120,120,120,120,120,120,120,120,120,120,120,120,+370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,+896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,+896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,+896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,+896,896,896,896,896,896,896,896,896,120,120,120,120,120,120,120,++/* block 186 */+897,897,897,897,897,897,897,897,897,120,897,897,897,897,897,897,+897,897,897,897,897,897,897,897,897,897,897,897,897,897,897,897,+897,897,897,897,897,897,897,897,897,897,897,897,897,897,897,898,+899,899,899,899,899,899,899,120,899,899,899,899,899,899,898,899,+897,900,900,900,900,900,120,120,120,120,120,120,120,120,120,120,+901,901,901,901,901,901,901,901,901,901,902,902,902,902,902,902,+902,902,902,902,902,902,902,902,902,902,902,902,902,120,120,120,+903,903,904,904,904,904,904,904,904,904,904,904,904,904,904,904,++/* block 187 */+904,904,904,904,904,904,904,904,904,904,904,904,904,904,904,904,+120,120,905,905,905,905,905,905,905,905,905,905,905,905,905,905,+905,905,905,905,905,905,905,905,120,906,905,905,905,905,905,905,+905,906,905,905,906,905,905,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,++/* block 188 */+907,907,907,907,907,907,907,120,907,907,120,907,907,907,907,907,+907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,+907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,+907,908,908,908,908,908,908,120,120,120,908,120,908,908,120,908,+908,908,908,908,908,908,909,908,120,120,120,120,120,120,120,120,+910,910,910,910,910,910,910,910,910,910,120,120,120,120,120,120,+911,911,911,911,911,911,120,911,911,120,911,911,911,911,911,911,+911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,++/* block 189 */+911,911,911,911,911,911,911,911,911,911,912,912,912,912,912,120,+913,913,120,912,912,913,912,913,911,120,120,120,120,120,120,120,+914,914,914,914,914,914,914,914,914,914,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,++/* block 190 */+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,+915,915,915,916,916,917,917,918,918,120,120,120,120,120,120,120,++/* block 191 */+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+595,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+919,919,919,919,919,919,919,919,919,919,919,919,919,919,919,919,+295,295,919,295,919,297,297,297,297,297,297,297,297,298,298,298,+298,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,+297,297,120,120,120,120,120,120,120,120,120,120,120,120,120,920,++/* block 192 */+921,921,921,921,921,921,921,921,921,921,921,921,921,921,921,921,+921,921,921,921,921,921,921,921,921,921,921,921,921,921,921,921,+921,921,921,921,921,921,921,921,921,921,921,921,921,921,921,921,+921,921,921,921,921,921,921,921,921,921,921,921,921,921,921,921,+921,921,921,921,921,921,921,921,921,921,921,921,921,921,921,921,+921,921,921,921,921,921,921,921,921,921,921,921,921,921,921,921,+921,921,921,921,921,921,921,921,921,921,921,921,921,921,921,921,+921,921,921,921,921,921,921,921,921,921,921,921,921,921,921,921,++/* block 193 */+921,921,921,921,921,921,921,921,921,921,921,921,921,921,921,921,+921,921,921,921,921,921,921,921,921,921,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,++/* block 194 */+922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,+922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,+922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,+922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,+922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,+922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,+922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,120,+923,923,923,923,923,120,120,120,120,120,120,120,120,120,120,120,++/* block 195 */+921,921,921,921,921,921,921,921,921,921,921,921,921,921,921,921,+921,921,921,921,921,921,921,921,921,921,921,921,921,921,921,921,+921,921,921,921,921,921,921,921,921,921,921,921,921,921,921,921,+921,921,921,921,921,921,921,921,921,921,921,921,921,921,921,921,+921,921,921,921,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,++/* block 196 */+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+924,924,924,924,924,924,924,924,924,924,924,924,924,924,924,924,+924,924,924,924,924,924,924,924,924,924,924,924,924,924,924,924,+924,924,924,924,924,924,924,924,924,924,924,924,924,924,924,924,+924,924,924,924,924,924,924,924,924,924,924,924,924,924,924,924,+924,924,924,924,924,924,924,924,924,924,924,924,924,924,924,924,+924,924,924,924,924,924,924,924,924,924,924,924,924,924,924,924,+924,925,925,120,120,120,120,120,120,120,120,120,120,120,120,120,++/* block 197 */+926,926,926,926,926,926,926,926,926,926,926,926,926,926,926,926,+926,926,926,926,926,926,926,926,926,926,926,926,926,926,926,926,+926,926,926,926,926,926,926,926,926,926,926,926,926,926,926,926,+926,926,926,926,926,926,926,926,926,926,926,926,926,926,926,926,+926,926,926,926,926,926,926,926,926,926,926,926,926,926,926,926,+926,926,926,926,926,926,926,926,926,926,926,926,926,926,926,926,+926,926,926,926,926,926,926,926,926,926,926,926,926,926,926,926,+926,926,926,926,926,926,926,926,926,926,926,926,926,926,926,926,++/* block 198 */+926,926,926,926,926,926,926,926,926,926,926,926,926,926,926,926,+926,926,926,926,926,926,926,926,926,926,926,926,926,926,926,926,+926,926,926,926,926,926,926,926,926,926,926,926,926,926,926,120,+927,927,927,927,927,927,927,927,927,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,++/* block 199 */+928,928,928,928,928,928,928,928,928,928,928,928,928,928,928,928,+928,928,928,928,928,928,928,928,928,928,928,928,928,928,928,928,+928,928,928,928,928,928,928,928,928,928,928,928,928,928,928,928,+928,928,928,928,928,928,928,928,928,928,928,928,928,928,928,928,+928,928,928,928,928,928,928,928,928,928,928,928,928,928,928,928,+928,928,928,928,928,928,928,928,928,928,928,928,928,928,928,928,+928,928,928,928,928,928,928,928,928,928,928,928,928,928,928,928,+928,928,928,928,928,928,928,928,928,928,928,928,928,928,928,928,++/* block 200 */+928,928,928,928,928,928,928,928,928,928,928,928,928,928,928,928,+928,928,928,928,928,928,928,928,928,928,928,928,928,928,928,928,+928,928,928,928,928,928,928,928,928,928,928,928,928,928,928,928,+928,928,928,928,928,928,928,928,928,928,928,928,928,928,928,928,+928,928,928,928,928,928,928,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,++/* block 201 */+606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,+606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,+606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,+606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,+606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,+606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,+606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,+606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,++/* block 202 */+606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,+606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,+606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,+606,606,606,606,606,606,606,606,606,120,120,120,120,120,120,120,+929,929,929,929,929,929,929,929,929,929,929,929,929,929,929,929,+929,929,929,929,929,929,929,929,929,929,929,929,929,929,929,120,+930,930,930,930,930,930,930,930,930,930,120,120,120,120,931,931,+932,932,932,932,932,932,932,932,932,932,932,932,932,932,932,932,++/* block 203 */+932,932,932,932,932,932,932,932,932,932,932,932,932,932,932,932,+932,932,932,932,932,932,932,932,932,932,932,932,932,932,932,932,+932,932,932,932,932,932,932,932,932,932,932,932,932,932,932,932,+932,932,932,932,932,932,932,932,932,932,932,932,932,932,932,120,+933,933,933,933,933,933,933,933,933,933,120,120,120,120,120,120,+934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,+934,934,934,934,934,934,934,934,934,934,934,934,934,934,120,120,+935,935,935,935,935,936,120,120,120,120,120,120,120,120,120,120,++/* block 204 */+937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,+937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,+937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,+938,938,938,938,938,938,938,939,939,939,939,939,940,940,940,940,+941,941,941,941,939,940,120,120,120,120,120,120,120,120,120,120,+942,942,942,942,942,942,942,942,942,942,120,943,943,943,943,943,+943,943,120,937,937,937,937,937,937,937,937,937,937,937,937,937,+937,937,937,937,937,937,937,937,120,120,120,120,120,937,937,937,++/* block 205 */+937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,++/* block 206 */+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+944,944,944,944,944,944,944,944,944,944,944,944,944,944,944,944,+944,944,944,944,944,944,944,944,944,944,944,944,944,944,944,944,+945,945,945,945,945,945,945,945,945,945,945,945,945,945,945,945,+945,945,945,945,945,945,945,945,945,945,945,945,945,945,945,945,++/* block 207 */+946,946,946,946,946,946,946,946,946,946,946,946,946,946,946,946,+946,946,946,946,946,946,946,947,947,947,947,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,++/* block 208 */+948,948,948,948,948,948,948,948,948,948,948,948,948,948,948,948,+948,948,948,948,948,948,948,948,948,948,948,948,948,948,948,948,+948,948,948,948,948,948,948,948,948,948,948,948,948,948,948,948,+948,948,948,948,948,948,948,948,948,948,948,948,948,948,948,948,+948,948,948,948,948,948,948,948,948,948,948,120,120,120,120,949,+948,950,950,950,950,950,950,950,950,950,950,950,950,950,950,950,+950,950,950,950,950,950,950,950,950,950,950,950,950,950,950,950,+950,950,950,950,950,950,950,950,950,950,950,950,950,950,950,950,++/* block 209 */+950,950,950,950,950,950,950,950,120,120,120,120,120,120,120,949,+949,949,949,951,951,951,951,951,951,951,951,951,951,951,951,951,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+952,953,954,562,955,120,120,120,120,120,120,120,120,120,120,120,+956,956,120,120,120,120,120,120,120,120,120,120,120,120,120,120,++/* block 210 */+957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,+957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,+957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,+957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,+957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,+957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,+957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,+957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,++/* block 211 */+957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,+957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,+957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,+957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,+957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,+957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,+957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,+957,957,957,957,957,957,957,957,120,120,120,120,120,120,120,120,++/* block 212 */+958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,+958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,+958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,+958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,+958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,+958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,+958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,+958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,++/* block 213 */+958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,+958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,+958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,+958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,+958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,+958,958,958,958,958,958,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,++/* block 214 */+957,957,957,957,957,957,957,957,957,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,++/* block 215 */+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+584,584,584,584,120,584,584,584,584,584,584,584,120,584,584,120,++/* block 216 */+583,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,+578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,+578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,+578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,+578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,+578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,+578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,+578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,++/* block 217 */+578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,+578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,+578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,+578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,+578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,+578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,+578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,+578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,++/* block 218 */+578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,+578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,+583,583,583,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+578,578,578,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,583,583,583,583,120,120,120,120,120,120,120,120,+959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,++/* block 219 */+959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,+959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,+959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,+959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,+959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,+959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,+959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,+959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,++/* block 220 */+959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,+959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,+959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,+959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,+959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,+959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,+959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,+959,959,959,959,959,959,959,959,959,959,959,959,120,120,120,120,++/* block 221 */+960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,+960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,+960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,+960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,+960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,+960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,+960,960,960,960,960,960,960,960,960,960,960,120,120,120,120,120,+960,960,960,960,960,960,960,960,960,960,960,960,960,120,120,120,++/* block 222 */+960,960,960,960,960,960,960,960,960,120,120,120,120,120,120,120,+960,960,960,960,960,960,960,960,960,960,120,120,961,962,962,963,+964,964,964,964,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,++/* block 223 */+113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,+113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,+113,113,113,113,113,113,113,113,113,113,113,113,113,113,120,120,+113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,+113,113,113,113,113,113,113,120,120,120,120,120,120,120,120,120,+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,++/* block 224 */+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,+ 20, 20, 20, 20,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,++/* block 225 */+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,+ 20, 20, 20, 20, 20, 20,120,120,120,120,120,120,120,120,120,120,++/* block 226 */+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,+ 20, 20, 20, 20, 20, 20, 20,120,120, 20, 20, 20, 20, 20, 20, 20,+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,+ 20, 20, 20, 20, 20,965,966,113,113,113, 20, 20, 20,966,965,965,+965,965,965, 24, 24, 24, 24, 24, 24, 24, 24,113,113,113,113,113,++/* block 227 */+113,113,113, 20, 20,113,113,113,113,113,113,113, 20, 20, 20, 20,+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,113,113,113,113, 20, 20,+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,++/* block 228 */+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,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,967,967,967,692,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,++/* block 229 */+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+ 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,+ 25, 25, 25, 25,120,120,120,120,120,120,120,120,120,120,120,120,++/* block 230 */+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,+ 20, 20, 20, 20, 20, 20, 20,120,120,120,120,120,120,120,120,120,+587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,+587,587, 25, 25, 25, 25, 25, 25, 25,120,120,120,120,120,120,120,++/* block 231 */+518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,+518,518,518,518,518,518,518,518,518,518,519,519,519,519,519,519,+519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,+519,519,519,519,518,518,518,518,518,518,518,518,518,518,518,518,+518,518,518,518,518,518,518,518,518,518,518,518,518,518,519,519,+519,519,519,519,519,120,519,519,519,519,519,519,519,519,519,519,+519,519,519,519,519,519,519,519,518,518,518,518,518,518,518,518,+518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,++/* block 232 */+518,518,519,519,519,519,519,519,519,519,519,519,519,519,519,519,+519,519,519,519,519,519,519,519,519,519,519,519,518,120,518,518,+120,120,518,120,120,518,518,120,120,518,518,518,518,120,518,518,+518,518,518,518,518,518,519,519,519,519,120,519,120,519,519,519,+519,519,519,519,120,519,519,519,519,519,519,519,519,519,519,519,+518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,+518,518,518,518,518,518,518,518,518,518,519,519,519,519,519,519,+519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,++/* block 233 */+519,519,519,519,518,518,120,518,518,518,518,120,120,518,518,518,+518,518,518,518,518,120,518,518,518,518,518,518,518,120,519,519,+519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,+519,519,519,519,519,519,519,519,518,518,120,518,518,518,518,120,+518,518,518,518,518,120,518,120,120,120,518,518,518,518,518,518,+518,120,519,519,519,519,519,519,519,519,519,519,519,519,519,519,+519,519,519,519,519,519,519,519,519,519,519,519,518,518,518,518,+518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,++/* block 234 */+518,518,518,518,518,518,519,519,519,519,519,519,519,519,519,519,+519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,+518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,+518,518,518,518,518,518,518,518,518,518,519,519,519,519,519,519,+519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,+519,519,519,519,518,518,518,518,518,518,518,518,518,518,518,518,+518,518,518,518,518,518,518,518,518,518,518,518,518,518,519,519,+519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,++/* block 235 */+519,519,519,519,519,519,519,519,518,518,518,518,518,518,518,518,+518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,+518,518,519,519,519,519,519,519,519,519,519,519,519,519,519,519,+519,519,519,519,519,519,519,519,519,519,519,519,518,518,518,518,+518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,+518,518,518,518,518,518,519,519,519,519,519,519,519,519,519,519,+519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,+518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,++/* block 236 */+518,518,518,518,518,518,518,518,518,518,519,519,519,519,519,519,+519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,+519,519,519,519,519,519,120,120,518,518,518,518,518,518,518,518,+518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,+518,  9,519,519,519,519,519,519,519,519,519,519,519,519,519,519,+519,519,519,519,519,519,519,519,519,519,519,  9,519,519,519,519,+519,519,518,518,518,518,518,518,518,518,518,518,518,518,518,518,+518,518,518,518,518,518,518,518,518,518,518,  9,519,519,519,519,++/* block 237 */+519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,+519,519,519,519,519,  9,519,519,519,519,519,519,518,518,518,518,+518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,+518,518,518,518,518,  9,519,519,519,519,519,519,519,519,519,519,+519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,  9,+519,519,519,519,519,519,518,518,518,518,518,518,518,518,518,518,+518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,  9,+519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,++/* block 238 */+519,519,519,519,519,519,519,519,519,  9,519,519,519,519,519,519,+518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,+518,518,518,518,518,518,518,518,518,  9,519,519,519,519,519,519,+519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,+519,519,519,  9,519,519,519,519,519,519,518,519,120,120, 11, 11,+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,++/* block 239 */+968,968,968,968,968,968,968,968,968,968,968,968,968,968,968,968,+968,968,968,968,968,968,968,968,968,968,968,968,968,968,968,968,+968,968,968,968,968,968,968,968,968,968,968,968,968,968,968,968,+968,968,968,968,968,968,968,968,968,968,968,968,968,968,968,968,+968,968,968,968,968,968,968,968,968,968,968,968,968,968,968,968,+968,968,968,968,968,968,968,968,968,968,968,968,968,968,968,968,+968,968,968,968,968,968,968,968,968,968,968,968,968,968,968,968,+968,968,968,968,968,968,968,968,968,968,968,968,968,968,968,968,++/* block 240 */+969,969,969,969,969,969,969,969,969,969,969,969,969,969,969,969,+969,969,969,969,969,969,969,969,969,969,969,969,969,969,969,969,+969,969,969,969,969,969,969,969,969,969,969,969,969,969,969,969,+969,969,969,969,969,969,969,968,968,968,968,969,969,969,969,969,+969,969,969,969,969,969,969,969,969,969,969,969,969,969,969,969,+969,969,969,969,969,969,969,969,969,969,969,969,969,969,969,969,+969,969,969,969,969,969,969,969,969,969,969,969,969,968,968,968,+968,968,968,968,968,969,968,968,968,968,968,968,968,968,968,968,++/* block 241 */+968,968,968,968,969,968,968,970,970,970,970,970,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,969,969,969,969,969,+120,969,969,969,969,969,969,969,969,969,969,969,969,969,969,969,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,++/* block 242 */+ 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 22, 35, 35, 35, 35, 35,+ 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,++/* block 243 */+971,971,971,971,971,971,971,120,971,971,971,971,971,971,971,971,+971,971,971,971,971,971,971,971,971,120,120,971,971,971,971,971,+971,971,120,971,971,120,971,971,971,971,971,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,++/* block 244 */+972,972,972,972,972,972,972,972,972,972,972,972,972,972,972,972,+972,972,972,972,972,972,972,972,972,972,972,972,972,972,972,972,+972,972,972,972,972,972,972,972,972,972,972,972,972,120,120,120,+973,973,973,973,973,973,973,974,974,974,974,974,974,974,120,120,+975,975,975,975,975,975,975,975,975,975,120,120,120,120,972,976,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,++/* block 245 */+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,+977,977,977,977,977,977,977,977,977,977,977,977,977,977,978,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+979,979,979,979,979,979,979,979,979,979,979,979,979,979,979,979,+979,979,979,979,979,979,979,979,979,979,979,979,979,979,979,979,+979,979,979,979,979,979,979,979,979,979,979,979,980,980,980,980,+981,981,981,981,981,981,981,981,981,981,120,120,120,120,120,982,++/* block 246 */+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+361,361,361,361,361,361,361,120,361,361,361,361,120,361,361,120,+361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,120,++/* block 247 */+983,983,983,983,983,983,983,983,983,983,983,983,983,983,983,983,+983,983,983,983,983,983,983,983,983,983,983,983,983,983,983,983,+983,983,983,983,983,983,983,983,983,983,983,983,983,983,983,983,+983,983,983,983,983,983,983,983,983,983,983,983,983,983,983,983,+983,983,983,983,983,983,983,983,983,983,983,983,983,983,983,983,+983,983,983,983,983,983,983,983,983,983,983,983,983,983,983,983,+983,983,983,983,983,983,983,983,983,983,983,983,983,983,983,983,+983,983,983,983,983,983,983,983,983,983,983,983,983,983,983,983,++/* block 248 */+983,983,983,983,983,983,983,983,983,983,983,983,983,983,983,983,+983,983,983,983,983,983,983,983,983,983,983,983,983,983,983,983,+983,983,983,983,983,983,983,983,983,983,983,983,983,983,983,983,+983,983,983,983,983,983,983,983,983,983,983,983,983,983,983,983,+983,983,983,983,983,120,120,984,984,984,984,984,984,984,984,984,+985,985,985,985,985,985,985,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,++/* block 249 */+986,986,986,986,986,986,986,986,986,986,986,986,986,986,986,986,+986,986,986,986,986,986,986,986,986,986,986,986,986,986,986,986,+986,986,987,987,987,987,987,987,987,987,987,987,987,987,987,987,+987,987,987,987,987,987,987,987,987,987,987,987,987,987,987,987,+987,987,987,987,988,988,988,988,988,988,988,989,120,120,120,120,+990,990,990,990,990,990,990,990,990,990,120,120,120,120,991,991,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,++/* block 250 */+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,++/* block 251 */+ 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,+ 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,+ 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 20, 25, 25, 25,+  6, 25, 25, 25, 25,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,++/* block 252 */+120, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,+ 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,+ 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 20, 25,+ 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,++/* block 253 */+225,225,225,225,120,225,225,225,225,225,225,225,225,225,225,225,+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,+120,225,225,120,225,120,120,225,120,225,225,225,225,225,225,225,+225,225,225,120,225,225,225,225,120,225,120,225,120,120,120,120,+120,120,225,120,120,120,120,225,120,225,120,225,120,225,225,225,+120,225,225,120,225,120,120,225,120,225,120,225,120,225,120,225,+120,225,225,120,225,120,120,225,225,225,225,120,225,225,225,225,+225,225,225,120,225,225,225,225,120,225,225,225,225,120,225,120,++/* block 254 */+225,225,225,225,225,225,225,225,225,225,120,225,225,225,225,225,+225,225,225,225,225,225,225,225,225,225,225,225,120,120,120,120,+120,225,225,225,120,225,225,225,225,225,120,225,225,225,225,225,+225,225,225,225,225,225,225,225,225,225,225,225,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+217,217,120,120,120,120,120,120,120,120,120,120,120,120,120,120,++/* block 255 */+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,992,992,992,992,+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,++/* block 256 */+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,+ 21, 21, 21, 21,992,992,992,992,992,992,992,992,992,992,992,992,+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,992,+992, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,+992, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,+992, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,+ 21, 21, 21, 21, 21, 21,992,992,992,992,992,992,992,992,992,992,++/* block 257 */+ 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 21, 21, 21,+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21,+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21, 21, 21, 21,+ 21, 21, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21, 21,++/* block 258 */+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21, 20,+ 20, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 20, 20, 20, 20, 20,+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21,992,992,+992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,+992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,+992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,+992,992,992,992,992,992,993,993,993,993,993,993,993,993,993,993,+993,993,993,993,993,993,993,993,993,993,993,993,993,993,993,993,++/* block 259 */+994, 21, 21,992,992,992,992,992,992,992,992,992,992,992,992,992,+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21, 20, 20, 20, 20, 20,+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21,+ 20, 20, 21, 21, 21, 21, 21, 21, 21, 21, 21, 20,992,992,992,992,+ 20, 20, 20, 20, 20, 20, 20, 20, 20,992,992,992,992,992,992,992,+589,589,992,992,992,992,992,992,992,992,992,992,992,992,992,992,+ 21, 21, 21, 21, 21, 21,992,992,992,992,992,992,992,992,992,992,+992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,++/* block 260 */+992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,+992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,+992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,+992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,+992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,+992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,+992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,+992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,++/* block 261 */+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,++/* block 262 */+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,995,995,995,995,995,++/* block 263 */+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 20, 20,+ 20, 20, 20, 20, 20, 20, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,++/* block 264 */+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,++/* block 265 */+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,+ 21, 21, 21, 21, 21, 21, 21, 21,992,992,992,992,992, 21, 21, 21,+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,992,992,992,+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,992,992,992,++/* block 266 */+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,+ 20, 20, 20, 20,992,992,992,992,992,992,992,992,992,992,992,992,++/* block 267 */+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,+ 20, 20, 20, 20, 20, 21, 21, 21, 21,992,992,992,992,992,992,992,+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,992,992,992,992,+ 21,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,++/* block 268 */+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,992,992,992,992,+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,+ 20, 20, 20, 20, 20, 20, 20, 20,992,992,992,992,992,992,992,992,+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,992,992,992,992,992,992,+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,++/* block 269 */+ 20, 20, 20, 20, 20, 20, 20, 20,992,992,992,992,992,992,992,992,+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,992,992,+ 21, 21,992,992,992,992,992,992,992,992,992,992,992,992,992,992,+992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,+992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,+992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,+992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,++/* block 270 */+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21, 21, 21, 21,+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 20, 21, 21, 21, 21,+ 21, 21, 21, 21, 21, 21, 20, 21, 21, 21, 21, 21, 21, 21, 21, 21,+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,++/* block 271 */+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,+ 21, 21, 21, 21,992,992,992,992,992,992,992,992,992,992,992,992,+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,992,992,+ 21, 21, 21, 21, 21,992,992,992, 21, 21, 21, 21, 21,992,992,992,++/* block 272 */+ 21, 21, 21, 21, 21, 21, 21,992,992,992,992,992,992,992,992,992,+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,992,992,992,+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,992,992,992,992,992,+ 21, 21, 21, 21, 21, 21,992,992,992,992,992,992,992,992,992,992,+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,992,992,992,992,992,992,+ 21, 21, 21, 21, 21, 21, 21, 21,992,992,992,992,992,992,992,992,+ 21, 21, 21, 21, 21, 21, 21,992,992,992,992,992,992,992,992,992,++/* block 273 */+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,+ 20, 20, 20,120, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,120,120,120,120,120,120,++/* block 274 */+992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,+992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,+992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,+992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,+992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,+992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,+992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,+992,992,992,992,992,992,992,992,992,992,992,992,992,992,120,120,++/* block 275 */+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,++/* block 276 */+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,+591,591,591,591,591,591,591,591,591,120,120,120,120,120,120,120,+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,++/* block 277 */+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,+591,591,591,591,591,591,591,591,591,591,591,591,591,591,120,120,+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,++/* block 278 */+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,+591,591,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,++/* block 279 */+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,+591,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,++/* block 280 */+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,+591,591,591,591,591,591,591,591,591,591,591,591,591,591,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,++/* block 281 */+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,+591,591,591,591,591,591,591,591,591,591,591,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,++/* block 282 */+516, 24,516,516,516,516,516,516,516,516,516,516,516,516,516,516,+516,516,516,516,516,516,516,516,516,516,516,516,516,516,516,516,+996,996,996,996,996,996,996,996,996,996,996,996,996,996,996,996,+996,996,996,996,996,996,996,996,996,996,996,996,996,996,996,996,+996,996,996,996,996,996,996,996,996,996,996,996,996,996,996,996,+996,996,996,996,996,996,996,996,996,996,996,996,996,996,996,996,+996,996,996,996,996,996,996,996,996,996,996,996,996,996,996,996,+996,996,996,996,996,996,996,996,996,996,996,996,996,996,996,996,++/* block 283 */+516,516,516,516,516,516,516,516,516,516,516,516,516,516,516,516,+516,516,516,516,516,516,516,516,516,516,516,516,516,516,516,516,+516,516,516,516,516,516,516,516,516,516,516,516,516,516,516,516,+516,516,516,516,516,516,516,516,516,516,516,516,516,516,516,516,+516,516,516,516,516,516,516,516,516,516,516,516,516,516,516,516,+516,516,516,516,516,516,516,516,516,516,516,516,516,516,516,516,+516,516,516,516,516,516,516,516,516,516,516,516,516,516,516,516,+516,516,516,516,516,516,516,516,516,516,516,516,516,516,516,516,++/* block 284 */+113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,+113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,+113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,+113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,+113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,+113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,+113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,+113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,++/* block 285 */+113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,+113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,+113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,+113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,+113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,+113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,+113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,+516,516,516,516,516,516,516,516,516,516,516,516,516,516,516,516,++/* block 286 */+678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,+678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,+678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,+678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,+678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,+678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,+678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,+678,678,678,678,678,678,678,678,678,678,678,678,678,678,120,120,  }; 
src/c/pcre2/src/pcre2_ucp.h view
@@ -291,7 +291,13 @@   ucp_Chorasmian,   ucp_Dives_Akuru,   ucp_Khitan_Small_Script,-  ucp_Yezidi+  ucp_Yezidi,+  /* New for Unicode 14.0.0 */+  ucp_Cypro_Minoan,+  ucp_Old_Uyghur,+  ucp_Tangsa,+  ucp_Toto,+  ucp_Vithkuqi };  #endif  /* PCRE2_UCP_H_IDEMPOTENT_GUARD */
src/c/pcre2/src/pcre2demo.c view
@@ -198,8 +198,8 @@   return 1;   } -/* Match succeded. Get a pointer to the output vector, where string offsets are-stored. */+/* Match succeeded. Get a pointer to the output vector, where string offsets+are stored. */  ovector = pcre2_get_ovector_pointer(match_data); printf("Match succeeded at offset %d\n", (int)ovector[0]);@@ -217,9 +217,12 @@ if (rc == 0)   printf("ovector was not big enough for all the captured substrings\n"); -/* We must guard against patterns such as /(?=.\K)/ that use \K in an assertion-to set the start of a match later than its end. In this demonstration program,-we just detect this case and give up. */+/* Since release 10.38 PCRE2 has locked out the use of \K in lookaround+assertions. However, there is an option to re-enable the old behaviour. If that+is set, it is possible to run patterns such as /(?=.\K)/ that use \K in an+assertion to set the start of a match later than its end. In this demonstration+program, we show how to detect this case, but it shouldn't arise because the+option is never set. */  if (ovector[0] > ovector[1])   {@@ -436,7 +439,7 @@     return 1;     } -  /* Match succeded */+  /* Match succeeded */    printf("\nMatch succeeded again at offset %d\n", (int)ovector[0]); 
src/c/pcre2/src/pcre2grep.c view
@@ -63,7 +63,7 @@ #define WIN32 #endif -/* Some cmake's define it still */+/* Some CMake's define it still */ #if defined(__CYGWIN__) && defined(WIN32) #undef WIN32 #endif@@ -110,17 +110,18 @@ #define snprintf _snprintf #endif -/* VC and older compilers don't support %td or %zu, and even some that claim to+/* old VC and older compilers don't support %td or %zu, and even some that claim to be C99 don't support it (hence DISABLE_PERCENT_ZT). */ -#if defined(_MSC_VER) || !defined(__STDC_VERSION__) || __STDC_VERSION__ < 199901L || defined(DISABLE_PERCENT_ZT)-#define PTR_FORM "lu"+#if defined(DISABLE_PERCENT_ZT) || (defined(_MSC_VER) && (_MSC_VER < 1800)) || \+  (!defined(_MSC_VER) && (!defined(__STDC_VERSION__) || __STDC_VERSION__ < 199901L))+#ifdef _WIN64+#define SIZ_FORM "llu"+#else #define SIZ_FORM "lu"-#define SIZ_CAST (unsigned long int)+#endif #else-#define PTR_FORM "td" #define SIZ_FORM "zu"-#define SIZ_CAST #endif  #define FALSE 0@@ -423,6 +424,7 @@ #define N_OM_SEPARATOR (-22) #define N_MAX_BUFSIZE  (-23) #define N_OM_CAPTURE   (-24)+#define N_ALLABSK      (-25)  static option_item optionlist[] = {   { OP_NODATA,     N_NULL,   NULL,              "",              "terminate options" },@@ -490,6 +492,7 @@   { OP_NODATA,    'v',      NULL,              "invert-match",  "select non-matching lines" },   { OP_NODATA,    'w',      NULL,              "word-regex(p)", "force patterns to match only as words"  },   { OP_NODATA,    'x',      NULL,              "line-regex(p)", "force patterns to match only whole lines" },+  { OP_NODATA,   N_ALLABSK, NULL,              "allow-lookaround-bsk", "allow \\K in lookarounds" },   { OP_NODATA,    0,        NULL,               NULL,            NULL } }; @@ -1854,8 +1857,7 @@     unsigned char mbuffer[256];     PCRE2_SIZE startchar = pcre2_get_startchar(match_data);     (void)pcre2_get_error_message(*mrc, mbuffer, sizeof(mbuffer));-    fprintf(stderr, "%s at offset %" SIZ_FORM "\n\n", mbuffer,-      SIZ_CAST startchar);+    fprintf(stderr, "%s at offset %" SIZ_FORM "\n\n", mbuffer, startchar);     }   if (*mrc == PCRE2_ERROR_MATCHLIMIT || *mrc == PCRE2_ERROR_DEPTHLIMIT ||       *mrc == PCRE2_ERROR_HEAPLIMIT || *mrc == PCRE2_ERROR_JIT_STACKLIMIT)@@ -3327,7 +3329,7 @@    if (dee_action == dee_RECURSE)     {-    char buffer[FNBUFSIZ];+    char childpath[FNBUFSIZ];     char *nextfile;     directory_type *dir = opendirectory(pathname); @@ -3349,8 +3351,36 @@         rc = 2;         break;         }-      sprintf(buffer, "%s%c%s", pathname, FILESEP, nextfile);-      frc = grep_or_recurse(buffer, dir_recurse, FALSE);+      sprintf(childpath, "%s%c%s", pathname, FILESEP, nextfile);++      /* If the realpath() function is available, we can try to prevent endless+      recursion caused by a symlink pointing to a parent directory (GitHub+      issue #2 (old Bugzilla #2794). Original patch from Thomas Tempelmann.+      Modified to avoid using strlcat() because that isn't a standard C+      function, and also modified not to copy back the fully resolved path,+      because that affects the output from pcre2grep. */++#ifdef HAVE_REALPATH+      {+      char resolvedpath[PATH_MAX];+      BOOL isSame;+      size_t rlen;+      if (realpath(childpath, resolvedpath) == NULL)+        continue;     /* This path is invalid - we can skip processing this */+      isSame = strcmp(pathname, resolvedpath) == 0;+      if (isSame) continue;    /* We have a recursion */+      rlen = strlen(resolvedpath);+      if (rlen++ < sizeof(resolvedpath) - 3)+        {+        BOOL contained;+        strcat(resolvedpath, "/");+        contained = strncmp(pathname, resolvedpath, rlen) == 0;+        if (contained) continue;    /* We have a recursion */+        }+      }+#endif  /* HAVE_REALPATH */++      frc = grep_or_recurse(childpath, dir_recurse, FALSE);       if (frc > 1) rc = frc;        else if (frc == 0 && rc == 1) rc = 0;       }@@ -3521,7 +3551,7 @@   /*************************************************-*    Handle a single-letter, no data option      *+*          Handle a no-data option               * *************************************************/  static int@@ -3534,6 +3564,7 @@   case N_LBUFFER: line_buffered = TRUE; break;   case N_LOFFSETS: line_offsets = number = TRUE; break;   case N_NOJIT: use_jit = FALSE; break;+  case N_ALLABSK: extra_options |= PCRE2_EXTRA_ALLOW_LOOKAROUND_BSK; break;   case 'a': binary_files = BIN_TEXT; break;   case 'c': count_only = TRUE; break;   case 'F': options |= PCRE2_LITERAL; break;
src/c/pcre2/src/pcre2posix.c view
@@ -148,6 +148,7 @@   37, REG_EESCAPE, /* PCRE2 does not support \L, \l, \N{name}, \U, or \u */   56, REG_INVARG,  /* internal error: unknown newline setting */   92, REG_INVARG,  /* invalid option bits with PCRE2_LITERAL */+  99, REG_EESCAPE  /* \K in lookaround */ };  /* Table of texts corresponding to POSIX error codes */
src/c/pcre2/src/pcre2test.c view
@@ -11,7 +11,7 @@                         Written by Philip Hazel      Original code Copyright (c) 1997-2012 University of Cambridge-    Rewritten code Copyright (c) 2016-2020 University of Cambridge+    Rewritten code Copyright (c) 2016-2021 University of Cambridge  ----------------------------------------------------------------------------- Redistribution and use in source and binary forms, with or without@@ -169,19 +169,21 @@ /* void vms_setsymbol( char *, char *, int ); Original code from [1]. */ #endif -/* VC and older compilers don't support %td or %zu, and even some that claim to-be C99 don't support it (hence DISABLE_PERCENT_ZT). There are some non-C99-environments where %lu gives a warning with 32-bit pointers. As there doesn't-seem to be an easy way round this, just live with it (the cases are rare). */+/* old VC and older compilers don't support %td or %zu, and even some that+claim to be C99 don't support it (hence DISABLE_PERCENT_ZT). */ -#if defined(_MSC_VER) || !defined(__STDC_VERSION__) || __STDC_VERSION__ < 199901L || defined(DISABLE_PERCENT_ZT)-#define PTR_FORM "lu"+#if defined(DISABLE_PERCENT_ZT) || (defined(_MSC_VER) && (_MSC_VER < 1800)) || \+  (!defined(_MSC_VER) && (!defined(__STDC_VERSION__) || (__STDC_VERSION__ < 199901L)))+#ifdef _WIN64+#define PTR_FORM "lld"+#define SIZ_FORM "llu"+#else+#define PTR_FORM "ld" #define SIZ_FORM "lu"-#define SIZ_CAST (unsigned long int)+#endif #else #define PTR_FORM "td" #define SIZ_FORM "zu"-#define SIZ_CAST #endif  /* ------------------End of system-specific definitions -------------------- */@@ -622,6 +624,7 @@   { "allaftertext",                MOD_PNDP, MOD_CTL, CTL_ALLAFTERTEXT,           PO(control) },   { "allcaptures",                 MOD_PND,  MOD_CTL, CTL_ALLCAPTURES,            PO(control) },   { "allow_empty_class",           MOD_PAT,  MOD_OPT, PCRE2_ALLOW_EMPTY_CLASS,    PO(options) },+  { "allow_lookaround_bsk",        MOD_CTC,  MOD_OPT, PCRE2_EXTRA_ALLOW_LOOKAROUND_BSK, CO(extra_options) },   { "allow_surrogate_escapes",     MOD_CTC,  MOD_OPT, PCRE2_EXTRA_ALLOW_SURROGATE_ESCAPES, CO(extra_options) },   { "allusedtext",                 MOD_PNDP, MOD_CTL, CTL_ALLUSEDTEXT,            PO(control) },   { "allvector",                   MOD_PND,  MOD_CTL, CTL2_ALLVECTOR,             PO(control2) },@@ -2745,11 +2748,11 @@   {   if (block == NULL)     {-    fprintf(outfile, "** malloc() failed for %" SIZ_FORM "\n", SIZ_CAST size);+    fprintf(outfile, "** malloc() failed for %" SIZ_FORM "\n", size);     }   else     {-    fprintf(outfile, "malloc  %5" SIZ_FORM, SIZ_CAST size);+    fprintf(outfile, "malloc  %5" SIZ_FORM, size); #ifdef DEBUG_SHOW_MALLOC_ADDRESSES     fprintf(outfile, " %p", block);   /* Not portable */ #endif@@ -2779,7 +2782,7 @@     {     if (block == malloclist[i])       {-      fprintf(outfile, "    %5" SIZ_FORM, SIZ_CAST malloclistlength[i]);+      fprintf(outfile, "    %5" SIZ_FORM, malloclistlength[i]);       malloclistptr--;       for (j = i; j < malloclistptr; j++)         {@@ -3159,7 +3162,7 @@   if (pbuffer16 == NULL)     {     fprintf(stderr, "pcre2test: malloc(%" SIZ_FORM ") failed for pbuffer16\n",-      SIZ_CAST pbuffer16_size);+      pbuffer16_size);     exit(1);     }   }@@ -3246,7 +3249,7 @@   if (pbuffer32 == NULL)     {     fprintf(stderr, "pcre2test: malloc(%" SIZ_FORM ") failed for pbuffer32\n",-      SIZ_CAST pbuffer32_size);+      pbuffer32_size);     exit(1);     }   }@@ -5031,7 +5034,7 @@   if (serial == NULL)     {     fprintf(outfile, "** Failed to get memory (size %" SIZ_FORM ") for #load\n",-      SIZ_CAST serial_size);+      serial_size);     fclose(f);     return PR_ABEND;     }@@ -5706,7 +5709,7 @@   if (rc != 0)     {     fprintf(outfile, "** Pattern conversion error at offset %" SIZ_FORM ": ",-      SIZ_CAST converted_length);+      converted_length);     convert_return = print_error_message(rc, "", "\n")? PR_SKIP:PR_ABEND;     } @@ -6107,13 +6110,13 @@  fprintf(outfile, "%2d(%d) Old %" SIZ_FORM " %" SIZ_FORM " \"",   scb->subscount, scb->oveccount,-  SIZ_CAST scb->ovector[0], SIZ_CAST scb->ovector[1]);+  scb->ovector[0], scb->ovector[1]);  PCHARSV(scb->input, scb->ovector[0], scb->ovector[1] - scb->ovector[0],   utf, outfile);  fprintf(outfile, "\" New %" SIZ_FORM " %" SIZ_FORM " \"",-  SIZ_CAST scb->output_offsets[0], SIZ_CAST scb->output_offsets[1]);+  scb->output_offsets[0], scb->output_offsets[1]);  PCHARSV(scb->output, scb->output_offsets[0],   scb->output_offsets[1] - scb->output_offsets[0], utf, outfile);@@ -6200,7 +6203,7 @@   {   uint32_t delimiter = CODE_UNIT(cb->callout_string, -1);   fprintf(outfile, "Callout (%" SIZ_FORM "): %c",-    SIZ_CAST cb->callout_string_offset, delimiter);+    cb->callout_string_offset, delimiter);   PCHARSV(cb->callout_string, 0,     cb->callout_string_length, utf, outfile);   for (i = 0; callout_start_delims[i] != 0; i++)@@ -6400,11 +6403,11 @@     else if (length2 != length)       {       fprintf(outfile, "Mismatched substring lengths: %"-        SIZ_FORM " %" SIZ_FORM "\n", SIZ_CAST length, SIZ_CAST length2);+        SIZ_FORM " %" SIZ_FORM "\n", length, length2);       }     fprintf(outfile, "%2dC ", n);     PCHARSV(copybuffer, 0, length, utf, outfile);-    fprintf(outfile, " (%" SIZ_FORM ")\n", SIZ_CAST length);+    fprintf(outfile, " (%" SIZ_FORM ")\n", length);     }   } @@ -6455,11 +6458,11 @@     else if (length2 != length)       {       fprintf(outfile, "Mismatched substring lengths: %"-        SIZ_FORM " %" SIZ_FORM "\n", SIZ_CAST length, SIZ_CAST length2);+        SIZ_FORM " %" SIZ_FORM "\n", length, length2);       }     fprintf(outfile, "  C ");     PCHARSV(copybuffer, 0, length, utf, outfile);-    fprintf(outfile, " (%" SIZ_FORM ") %s", SIZ_CAST length, nptr);+    fprintf(outfile, " (%" SIZ_FORM ") %s", length, nptr);     if (groupnumber >= 0) fprintf(outfile, " (group %d)\n", groupnumber);       else fprintf(outfile, " (non-unique)\n");     }@@ -6484,7 +6487,7 @@     {     fprintf(outfile, "%2dG ", n);     PCHARSV(gotbuffer, 0, length, utf, outfile);-    fprintf(outfile, " (%" SIZ_FORM ")\n", SIZ_CAST length);+    fprintf(outfile, " (%" SIZ_FORM ")\n", length);     PCRE2_SUBSTRING_FREE(gotbuffer);     }   }@@ -6528,7 +6531,7 @@     {     fprintf(outfile, "  G ");     PCHARSV(gotbuffer, 0, length, utf, outfile);-    fprintf(outfile, " (%" SIZ_FORM ") %s", SIZ_CAST length, nptr);+    fprintf(outfile, " (%" SIZ_FORM ") %s", length, nptr);     if (groupnumber >= 0) fprintf(outfile, " (group %d)\n", groupnumber);       else fprintf(outfile, " (non-unique)\n");     PCRE2_SUBSTRING_FREE(gotbuffer);@@ -7364,7 +7367,7 @@     if (n > nsize)       {       fprintf(outfile, "Replacement buffer setting (%" SIZ_FORM ") is too "-        "large (max %" SIZ_FORM ")\n", SIZ_CAST n, SIZ_CAST nsize);+        "large (max %" SIZ_FORM ")\n", n, nsize);       return PR_OK;       }     nsize = n;@@ -7996,7 +7999,7 @@         {         PCRE2_SIZE startchar;         PCRE2_GET_STARTCHAR(startchar, match_data);-        fprintf(outfile, " at offset %" SIZ_FORM, SIZ_CAST startchar);+        fprintf(outfile, " at offset %" SIZ_FORM, startchar);         }       fprintf(outfile, "\n");       break;@@ -8852,7 +8855,7 @@     if (pbuffer16 == NULL)       {       fprintf(stderr, "pcre2test: malloc(%" SIZ_FORM ") failed for pbuffer16\n",-        SIZ_CAST pbuffer16_size);+        pbuffer16_size);       yield = 1;       goto EXIT;       }@@ -8867,7 +8870,7 @@     if (pbuffer32 == NULL)       {       fprintf(stderr, "pcre2test: malloc(%" SIZ_FORM ") failed for pbuffer32\n",-        SIZ_CAST pbuffer32_size);+        pbuffer32_size);       yield = 1;       goto EXIT;       }
src/c/pcre2/src/sljit/sljitConfigInternal.h view
@@ -761,6 +761,18 @@ #define SLJIT_NUMBER_OF_SCRATCH_FLOAT_REGISTERS \ 	(SLJIT_NUMBER_OF_FLOAT_REGISTERS - SLJIT_NUMBER_OF_SAVED_FLOAT_REGISTERS) +/********************************/+/* CPU status flags management. */+/********************************/++#if (defined SLJIT_CONFIG_ARM_32 && SLJIT_CONFIG_ARM_32) \+	|| (defined SLJIT_CONFIG_ARM_64 && SLJIT_CONFIG_ARM_64) \+	|| (defined SLJIT_CONFIG_MIPS && SLJIT_CONFIG_MIPS) \+	|| (defined SLJIT_CONFIG_SPARC && SLJIT_CONFIG_SPARC) \+	|| (defined SLJIT_CONFIG_S390X && SLJIT_CONFIG_S390X)+#define SLJIT_HAS_STATUS_FLAGS_STATE 1+#endif+ /*************************************/ /* Debug and verbose related macros. */ /*************************************/
src/c/pcre2/src/sljit/sljitLir.c view
@@ -532,13 +532,21 @@ 		put_label->label = label; } +#define SLJIT_CURRENT_FLAGS_ALL \+	(SLJIT_CURRENT_FLAGS_I32_OP | SLJIT_CURRENT_FLAGS_ADD_SUB | SLJIT_CURRENT_FLAGS_COMPARE)+ SLJIT_API_FUNC_ATTRIBUTE void sljit_set_current_flags(struct sljit_compiler *compiler, sljit_s32 current_flags) { 	SLJIT_UNUSED_ARG(compiler); 	SLJIT_UNUSED_ARG(current_flags); +#if (defined SLJIT_HAS_STATUS_FLAGS_STATE && SLJIT_HAS_STATUS_FLAGS_STATE)+	compiler->status_flags_state = current_flags;+#endif+ #if (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS)-	if ((current_flags & ~(VARIABLE_FLAG_MASK | SLJIT_I32_OP | SLJIT_SET_Z)) == 0) {+	compiler->last_flags = 0;+	if ((current_flags & ~(VARIABLE_FLAG_MASK | SLJIT_SET_Z | SLJIT_CURRENT_FLAGS_ALL)) == 0) { 		compiler->last_flags = GET_FLAG_TYPE(current_flags) | (current_flags & (SLJIT_I32_OP | SLJIT_SET_Z)); 	} #endif@@ -968,7 +976,7 @@ };  #define JUMP_POSTFIX(type) \-	((type & 0xff) <= SLJIT_MUL_NOT_OVERFLOW ? ((type & SLJIT_I32_OP) ? "32" : "") \+	((type & 0xff) <= SLJIT_NOT_OVERFLOW ? ((type & SLJIT_I32_OP) ? "32" : "") \ 	: ((type & 0xff) <= SLJIT_ORDERED_F64 ? ((type & SLJIT_F32_OP) ? ".f32" : ".f64") : ""))  static char* jump_names[] = {@@ -978,7 +986,6 @@ 	(char*)"sig_less", (char*)"sig_greater_equal", 	(char*)"sig_greater", (char*)"sig_less_equal", 	(char*)"overflow", (char*)"not_overflow",-	(char*)"mul_overflow", (char*)"mul_not_overflow", 	(char*)"carry", (char*)"", 	(char*)"equal", (char*)"not_equal", 	(char*)"less", (char*)"greater_equal",@@ -1278,7 +1285,7 @@ 	case SLJIT_MUL: 		CHECK_ARGUMENT(!(op & SLJIT_SET_Z)); 		CHECK_ARGUMENT(!(op & VARIABLE_FLAG_MASK)-			|| GET_FLAG_TYPE(op) == SLJIT_MUL_OVERFLOW);+			|| GET_FLAG_TYPE(op) == SLJIT_OVERFLOW); 		break; 	case SLJIT_ADD: 		CHECK_ARGUMENT(!(op & VARIABLE_FLAG_MASK)@@ -1601,9 +1608,7 @@ 			CHECK_ARGUMENT(compiler->last_flags & SLJIT_SET_Z); 		else 			CHECK_ARGUMENT((type & 0xff) == (compiler->last_flags & 0xff)-				|| ((type & 0xff) == SLJIT_NOT_OVERFLOW && (compiler->last_flags & 0xff) == SLJIT_OVERFLOW)-				|| ((type & 0xff) == SLJIT_MUL_NOT_OVERFLOW && (compiler->last_flags & 0xff) == SLJIT_MUL_OVERFLOW));-		CHECK_ARGUMENT((type & SLJIT_I32_OP) == (compiler->last_flags & SLJIT_I32_OP));+				|| ((type & 0xff) == SLJIT_NOT_OVERFLOW && (compiler->last_flags & 0xff) == SLJIT_OVERFLOW)); 	} #endif #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE)@@ -1818,8 +1823,7 @@ 		CHECK_ARGUMENT(compiler->last_flags & SLJIT_SET_Z); 	else 		CHECK_ARGUMENT((type & 0xff) == (compiler->last_flags & 0xff)-			|| ((type & 0xff) == SLJIT_NOT_OVERFLOW && (compiler->last_flags & 0xff) == SLJIT_OVERFLOW)-			|| ((type & 0xff) == SLJIT_MUL_NOT_OVERFLOW && (compiler->last_flags & 0xff) == SLJIT_MUL_OVERFLOW));+			|| ((type & 0xff) == SLJIT_NOT_OVERFLOW && (compiler->last_flags & 0xff) == SLJIT_OVERFLOW));  	FUNCTION_CHECK_DST(dst, dstw, 0); @@ -1858,8 +1862,7 @@ 		CHECK_ARGUMENT(compiler->last_flags & SLJIT_SET_Z); 	else 		CHECK_ARGUMENT((type & 0xff) == (compiler->last_flags & 0xff)-			|| ((type & 0xff) == SLJIT_NOT_OVERFLOW && (compiler->last_flags & 0xff) == SLJIT_OVERFLOW)-			|| ((type & 0xff) == SLJIT_MUL_NOT_OVERFLOW && (compiler->last_flags & 0xff) == SLJIT_MUL_OVERFLOW));+			|| ((type & 0xff) == SLJIT_NOT_OVERFLOW && (compiler->last_flags & 0xff) == SLJIT_OVERFLOW)); #endif #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) 	if (SLJIT_UNLIKELY(!!compiler->verbose)) {
src/c/pcre2/src/sljit/sljitLir.h view
@@ -412,6 +412,10 @@ 	/* Executable size for statistical purposes. */ 	sljit_uw executable_size; +#if (defined SLJIT_HAS_STATUS_FLAGS_STATE && SLJIT_HAS_STATUS_FLAGS_STATE)+	sljit_s32 status_flags_state;+#endif+ #if (defined SLJIT_CONFIG_X86_32 && SLJIT_CONFIG_X86_32) 	sljit_s32 args; 	sljit_s32 locals_offset;@@ -460,7 +464,7 @@  #if (defined SLJIT_CONFIG_S390X && SLJIT_CONFIG_S390X) 	/* Need to allocate register save area to make calls. */-	sljit_s32 have_save_area;+	sljit_s32 mode; #endif  #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE)@@ -996,7 +1000,7 @@ #define SLJIT_SUBC			(SLJIT_OP2_BASE + 3) #define SLJIT_SUBC32			(SLJIT_SUBC | SLJIT_I32_OP) /* Note: integer mul-   Flags: MUL_OVERFLOW */+   Flags: OVERFLOW */ #define SLJIT_MUL			(SLJIT_OP2_BASE + 4) #define SLJIT_MUL32			(SLJIT_MUL | SLJIT_I32_OP) /* Flags: Z */@@ -1141,89 +1145,69 @@  /* Integer comparison types. */ #define SLJIT_EQUAL			0-#define SLJIT_EQUAL32			(SLJIT_EQUAL | SLJIT_I32_OP)-#define SLJIT_ZERO			0-#define SLJIT_ZERO32			(SLJIT_ZERO | SLJIT_I32_OP)+#define SLJIT_ZERO			SLJIT_EQUAL #define SLJIT_NOT_EQUAL			1-#define SLJIT_NOT_EQUAL32		(SLJIT_NOT_EQUAL | SLJIT_I32_OP)-#define SLJIT_NOT_ZERO			1-#define SLJIT_NOT_ZERO32		(SLJIT_NOT_ZERO | SLJIT_I32_OP)+#define SLJIT_NOT_ZERO			SLJIT_NOT_EQUAL  #define SLJIT_LESS			2-#define SLJIT_LESS32			(SLJIT_LESS | SLJIT_I32_OP) #define SLJIT_SET_LESS			SLJIT_SET(SLJIT_LESS) #define SLJIT_GREATER_EQUAL		3-#define SLJIT_GREATER_EQUAL32		(SLJIT_GREATER_EQUAL | SLJIT_I32_OP) #define SLJIT_SET_GREATER_EQUAL		SLJIT_SET(SLJIT_GREATER_EQUAL) #define SLJIT_GREATER			4-#define SLJIT_GREATER32			(SLJIT_GREATER | SLJIT_I32_OP) #define SLJIT_SET_GREATER		SLJIT_SET(SLJIT_GREATER) #define SLJIT_LESS_EQUAL		5-#define SLJIT_LESS_EQUAL32		(SLJIT_LESS_EQUAL | SLJIT_I32_OP) #define SLJIT_SET_LESS_EQUAL		SLJIT_SET(SLJIT_LESS_EQUAL) #define SLJIT_SIG_LESS			6-#define SLJIT_SIG_LESS32		(SLJIT_SIG_LESS | SLJIT_I32_OP) #define SLJIT_SET_SIG_LESS		SLJIT_SET(SLJIT_SIG_LESS) #define SLJIT_SIG_GREATER_EQUAL		7-#define SLJIT_SIG_GREATER_EQUAL32	(SLJIT_SIG_GREATER_EQUAL | SLJIT_I32_OP) #define SLJIT_SET_SIG_GREATER_EQUAL	SLJIT_SET(SLJIT_SIG_GREATER_EQUAL) #define SLJIT_SIG_GREATER		8-#define SLJIT_SIG_GREATER32		(SLJIT_SIG_GREATER | SLJIT_I32_OP) #define SLJIT_SET_SIG_GREATER		SLJIT_SET(SLJIT_SIG_GREATER) #define SLJIT_SIG_LESS_EQUAL		9-#define SLJIT_SIG_LESS_EQUAL32		(SLJIT_SIG_LESS_EQUAL | SLJIT_I32_OP) #define SLJIT_SET_SIG_LESS_EQUAL	SLJIT_SET(SLJIT_SIG_LESS_EQUAL)  #define SLJIT_OVERFLOW			10-#define SLJIT_OVERFLOW32		(SLJIT_OVERFLOW | SLJIT_I32_OP) #define SLJIT_SET_OVERFLOW		SLJIT_SET(SLJIT_OVERFLOW) #define SLJIT_NOT_OVERFLOW		11-#define SLJIT_NOT_OVERFLOW32		(SLJIT_NOT_OVERFLOW | SLJIT_I32_OP) -#define SLJIT_MUL_OVERFLOW		12-#define SLJIT_MUL_OVERFLOW32		(SLJIT_MUL_OVERFLOW | SLJIT_I32_OP)-#define SLJIT_SET_MUL_OVERFLOW		SLJIT_SET(SLJIT_MUL_OVERFLOW)-#define SLJIT_MUL_NOT_OVERFLOW		13-#define SLJIT_MUL_NOT_OVERFLOW32	(SLJIT_MUL_NOT_OVERFLOW | SLJIT_I32_OP)- /* There is no SLJIT_CARRY or SLJIT_NOT_CARRY. */-#define SLJIT_SET_CARRY			SLJIT_SET(14)+#define SLJIT_SET_CARRY			SLJIT_SET(12)  /* Floating point comparison types. */-#define SLJIT_EQUAL_F64			16+#define SLJIT_EQUAL_F64			14 #define SLJIT_EQUAL_F32			(SLJIT_EQUAL_F64 | SLJIT_F32_OP) #define SLJIT_SET_EQUAL_F		SLJIT_SET(SLJIT_EQUAL_F64)-#define SLJIT_NOT_EQUAL_F64		17+#define SLJIT_NOT_EQUAL_F64		15 #define SLJIT_NOT_EQUAL_F32		(SLJIT_NOT_EQUAL_F64 | SLJIT_F32_OP) #define SLJIT_SET_NOT_EQUAL_F		SLJIT_SET(SLJIT_NOT_EQUAL_F64)-#define SLJIT_LESS_F64			18+#define SLJIT_LESS_F64			16 #define SLJIT_LESS_F32			(SLJIT_LESS_F64 | SLJIT_F32_OP) #define SLJIT_SET_LESS_F		SLJIT_SET(SLJIT_LESS_F64)-#define SLJIT_GREATER_EQUAL_F64		19+#define SLJIT_GREATER_EQUAL_F64		17 #define SLJIT_GREATER_EQUAL_F32		(SLJIT_GREATER_EQUAL_F64 | SLJIT_F32_OP) #define SLJIT_SET_GREATER_EQUAL_F	SLJIT_SET(SLJIT_GREATER_EQUAL_F64)-#define SLJIT_GREATER_F64		20+#define SLJIT_GREATER_F64		18 #define SLJIT_GREATER_F32		(SLJIT_GREATER_F64 | SLJIT_F32_OP) #define SLJIT_SET_GREATER_F		SLJIT_SET(SLJIT_GREATER_F64)-#define SLJIT_LESS_EQUAL_F64		21+#define SLJIT_LESS_EQUAL_F64		19 #define SLJIT_LESS_EQUAL_F32		(SLJIT_LESS_EQUAL_F64 | SLJIT_F32_OP) #define SLJIT_SET_LESS_EQUAL_F		SLJIT_SET(SLJIT_LESS_EQUAL_F64)-#define SLJIT_UNORDERED_F64		22+#define SLJIT_UNORDERED_F64		20 #define SLJIT_UNORDERED_F32		(SLJIT_UNORDERED_F64 | SLJIT_F32_OP) #define SLJIT_SET_UNORDERED_F		SLJIT_SET(SLJIT_UNORDERED_F64)-#define SLJIT_ORDERED_F64		23+#define SLJIT_ORDERED_F64		21 #define SLJIT_ORDERED_F32		(SLJIT_ORDERED_F64 | SLJIT_F32_OP) #define SLJIT_SET_ORDERED_F		SLJIT_SET(SLJIT_ORDERED_F64)  /* Unconditional jump types. */-#define SLJIT_JUMP			24+#define SLJIT_JUMP			22 	/* Fast calling method. See sljit_emit_fast_enter / SLJIT_FAST_RETURN. */-#define SLJIT_FAST_CALL			25+#define SLJIT_FAST_CALL			23 	/* Called function must be declared with the SLJIT_FUNC attribute. */-#define SLJIT_CALL			26+#define SLJIT_CALL			24 	/* Called function must be declared with cdecl attribute. 	   This is the default attribute for C functions. */-#define SLJIT_CALL_CDECL		27+#define SLJIT_CALL_CDECL		25  /* The target can be changed during runtime (see: sljit_set_jump_addr). */ #define SLJIT_REWRITABLE_JUMP		0x1000@@ -1534,8 +1518,22 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_custom(struct sljit_compiler *compiler, 	void *instruction, sljit_s32 size); -/* Define the currently available CPU status flags. It is usually used after an-   sljit_emit_op_custom call to define which flags are set. */+/* Flags were set by a 32 bit operation. */+#define SLJIT_CURRENT_FLAGS_I32_OP		SLJIT_I32_OP++/* Flags were set by an ADD, ADDC, SUB, SUBC, or NEG operation. */+#define SLJIT_CURRENT_FLAGS_ADD_SUB		0x01++/* Flags were set by a SUB with unused destination.+   Must be combined with SLJIT_CURRENT_FLAGS_ADD_SUB. */+#define SLJIT_CURRENT_FLAGS_COMPARE		0x02++/* Define the currently available CPU status flags. It is usually used after+   an sljit_emit_label or sljit_emit_op_custom operations to define which CPU+   status flags are available.++   The current_flags must be a valid combination of SLJIT_SET_* and+   SLJIT_CURRENT_FLAGS_* constants. */  SLJIT_API_FUNC_ATTRIBUTE void sljit_set_current_flags(struct sljit_compiler *compiler, 	sljit_s32 current_flags);
src/c/pcre2/src/sljit/sljitNativeARM_32.c view
@@ -1197,6 +1197,8 @@  	case SLJIT_ADD: 		SLJIT_ASSERT(!(flags & INV_IMM));+		compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD_SUB;+ 		if ((flags & (UNUSED_RETURN | SET_FLAGS)) == (UNUSED_RETURN | SET_FLAGS) && !(flags & ARGS_SWAPPED)) 			return push_inst(compiler, CMN | SET_FLAGS | RN(src1) | ((src2 & SRC2_IMM) ? src2 : RM(src2))); 		return push_inst(compiler, ADD | (flags & SET_FLAGS) | RD(dst) | RN(src1) | ((src2 & SRC2_IMM) ? src2 : RM(src2)));@@ -1207,6 +1209,8 @@  	case SLJIT_SUB: 		SLJIT_ASSERT(!(flags & INV_IMM));+		compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD_SUB;+ 		if ((flags & (UNUSED_RETURN | SET_FLAGS)) == (UNUSED_RETURN | SET_FLAGS) && !(flags & ARGS_SWAPPED)) 			return push_inst(compiler, CMP | SET_FLAGS | RN(src1) | ((src2 & SRC2_IMM) ? src2 : RM(src2))); 		return push_inst(compiler, (!(flags & ARGS_SWAPPED) ? SUB : RSB) | (flags & SET_FLAGS)@@ -1220,6 +1224,7 @@ 	case SLJIT_MUL: 		SLJIT_ASSERT(!(flags & INV_IMM)); 		SLJIT_ASSERT(!(src2 & SRC2_IMM));+		compiler->status_flags_state = 0;  		if (!HAS_FLAGS(op)) 			return push_inst(compiler, MUL | (reg_map[dst] << 16) | (reg_map[src2] << 8) | reg_map[src1]);@@ -2153,16 +2158,14 @@ /*  Conditional instructions                                             */ /* --------------------------------------------------------------------- */ -static sljit_uw get_cc(sljit_s32 type)+static sljit_uw get_cc(struct sljit_compiler *compiler, sljit_s32 type) { 	switch (type) { 	case SLJIT_EQUAL:-	case SLJIT_MUL_NOT_OVERFLOW: 	case SLJIT_EQUAL_F64: 		return 0x00000000;  	case SLJIT_NOT_EQUAL:-	case SLJIT_MUL_OVERFLOW: 	case SLJIT_NOT_EQUAL_F64: 		return 0x10000000; @@ -2195,10 +2198,16 @@ 		return 0xd0000000;  	case SLJIT_OVERFLOW:+		if (!(compiler->status_flags_state & SLJIT_CURRENT_FLAGS_ADD_SUB))+			return 0x10000000;+ 	case SLJIT_UNORDERED_F64: 		return 0x60000000;  	case SLJIT_NOT_OVERFLOW:+		if (!(compiler->status_flags_state & SLJIT_CURRENT_FLAGS_ADD_SUB))+			return 0x00000000;+ 	case SLJIT_ORDERED_F64: 		return 0x70000000; @@ -2242,7 +2251,7 @@ 	if (type >= SLJIT_FAST_CALL) 		PTR_FAIL_IF(prepare_blx(compiler)); 	PTR_FAIL_IF(push_inst_with_unique_literal(compiler, ((EMIT_DATA_TRANSFER(WORD_SIZE | LOAD_DATA, 1,-		type <= SLJIT_JUMP ? TMP_PC : TMP_REG1, TMP_PC, 0)) & ~COND_MASK) | get_cc(type), 0));+		type <= SLJIT_JUMP ? TMP_PC : TMP_REG1, TMP_PC, 0)) & ~COND_MASK) | get_cc(compiler, type), 0));  	if (jump->flags & SLJIT_REWRITABLE_JUMP) { 		jump->addr = compiler->size;@@ -2260,7 +2269,7 @@ 	if (type >= SLJIT_FAST_CALL) 		jump->flags |= IS_BL; 	PTR_FAIL_IF(emit_imm(compiler, TMP_REG1, 0));-	PTR_FAIL_IF(push_inst(compiler, (((type <= SLJIT_JUMP ? BX : BLX) | RM(TMP_REG1)) & ~COND_MASK) | get_cc(type)));+	PTR_FAIL_IF(push_inst(compiler, (((type <= SLJIT_JUMP ? BX : BLX) | RM(TMP_REG1)) & ~COND_MASK) | get_cc(compiler, type))); 	jump->addr = compiler->size; #endif 	return jump;@@ -2589,7 +2598,7 @@ 	ADJUST_LOCAL_OFFSET(dst, dstw);  	op = GET_OPCODE(op);-	cc = get_cc(type & 0xff);+	cc = get_cc(compiler, type & 0xff); 	dst_reg = FAST_IS_REG(dst) ? dst : TMP_REG1;  	if (op < SLJIT_ADD) {@@ -2629,7 +2638,7 @@  	dst_reg &= ~SLJIT_I32_OP; -	cc = get_cc(type & 0xff);+	cc = get_cc(compiler, type & 0xff);  	if (SLJIT_UNLIKELY(src & SLJIT_IMM)) { 		tmp = get_imm(srcw);
src/c/pcre2/src/sljit/sljitNativeARM_64.c view
@@ -644,6 +644,7 @@ 			imm = -imm; 			/* Fall through. */ 		case SLJIT_ADD:+			compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD_SUB; 			if (imm == 0) { 				CHECK_FLAGS(1 << 29); 				return push_inst(compiler, ((op == SLJIT_ADD ? ADDI : SUBI) ^ inv_bits) | RD(dst) | RN(reg));@@ -781,6 +782,7 @@ 		break; /* Set flags. */ 	case SLJIT_NEG: 		SLJIT_ASSERT(arg1 == TMP_REG1);+		compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD_SUB; 		if (flags & SET_FLAGS) 			inv_bits |= 1 << 29; 		return push_inst(compiler, (SUB ^ inv_bits) | RD(dst) | RN(TMP_ZERO) | RM(arg2));@@ -789,17 +791,20 @@ 		return push_inst(compiler, (CLZ ^ inv_bits) | RD(dst) | RN(arg2)); 	case SLJIT_ADD: 		CHECK_FLAGS(1 << 29);+		compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD_SUB; 		return push_inst(compiler, (ADD ^ inv_bits) | RD(dst) | RN(arg1) | RM(arg2)); 	case SLJIT_ADDC: 		CHECK_FLAGS(1 << 29); 		return push_inst(compiler, (ADC ^ inv_bits) | RD(dst) | RN(arg1) | RM(arg2)); 	case SLJIT_SUB: 		CHECK_FLAGS(1 << 29);+		compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD_SUB; 		return push_inst(compiler, (SUB ^ inv_bits) | RD(dst) | RN(arg1) | RM(arg2)); 	case SLJIT_SUBC: 		CHECK_FLAGS(1 << 29); 		return push_inst(compiler, (SBC ^ inv_bits) | RD(dst) | RN(arg1) | RM(arg2)); 	case SLJIT_MUL:+		compiler->status_flags_state = 0; 		if (!(flags & SET_FLAGS)) 			return push_inst(compiler, (MADD ^ inv_bits) | RD(dst) | RN(arg1) | RM(arg2) | RT2(TMP_ZERO)); 		if (flags & INT_OP) {@@ -1600,16 +1605,14 @@ /*  Conditional instructions                                             */ /* --------------------------------------------------------------------- */ -static sljit_uw get_cc(sljit_s32 type)+static sljit_uw get_cc(struct sljit_compiler *compiler, sljit_s32 type) { 	switch (type) { 	case SLJIT_EQUAL:-	case SLJIT_MUL_NOT_OVERFLOW: 	case SLJIT_EQUAL_F64: 		return 0x1;  	case SLJIT_NOT_EQUAL:-	case SLJIT_MUL_OVERFLOW: 	case SLJIT_NOT_EQUAL_F64: 		return 0x0; @@ -1642,10 +1645,16 @@ 		return 0xc;  	case SLJIT_OVERFLOW:+		if (!(compiler->status_flags_state & SLJIT_CURRENT_FLAGS_ADD_SUB))+			return 0x0;+ 	case SLJIT_UNORDERED_F64: 		return 0x7;  	case SLJIT_NOT_OVERFLOW:+		if (!(compiler->status_flags_state & SLJIT_CURRENT_FLAGS_ADD_SUB))+			return 0x1;+ 	case SLJIT_ORDERED_F64: 		return 0x6; @@ -1685,7 +1694,7 @@  	if (type < SLJIT_JUMP) { 		jump->flags |= IS_COND;-		PTR_FAIL_IF(push_inst(compiler, B_CC | (6 << 5) | get_cc(type)));+		PTR_FAIL_IF(push_inst(compiler, B_CC | (6 << 5) | get_cc(compiler, type))); 	} 	else if (type >= SLJIT_FAST_CALL) 		jump->flags |= IS_BL;@@ -1799,7 +1808,7 @@ 	CHECK(check_sljit_emit_op_flags(compiler, op, dst, dstw, type)); 	ADJUST_LOCAL_OFFSET(dst, dstw); -	cc = get_cc(type & 0xff);+	cc = get_cc(compiler, type & 0xff); 	dst_r = FAST_IS_REG(dst) ? dst : TMP_REG1;  	if (GET_OPCODE(op) < SLJIT_ADD) {@@ -1854,7 +1863,7 @@ 		srcw = 0; 	} -	cc = get_cc(type & 0xff);+	cc = get_cc(compiler, type & 0xff); 	dst_reg &= ~SLJIT_I32_OP;  	return push_inst(compiler, (CSEL ^ inv_bits) | (cc << 12) | RD(dst_reg) | RN(dst_reg) | RM(src));
src/c/pcre2/src/sljit/sljitNativeARM_T2_32.c view
@@ -610,6 +610,7 @@ 			   Although some clever things could be done here, "NOT IMM" does not worth the efforts. */ 			break; 		case SLJIT_ADD:+			compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD_SUB; 			nimm = -(sljit_sw)imm; 			if (IS_2_LO_REGS(reg, dst)) { 				if (imm <= 0x7)@@ -643,6 +644,7 @@ 			break; 		case SLJIT_SUB: 			/* SUB operation can be replaced by ADD because of the negative carry flag. */+			compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD_SUB; 			if (flags & ARG1_IMM) { 				if (imm == 0 && IS_2_LO_REGS(reg, dst)) 					return push_inst16(compiler, RSBSI | RD3(dst) | RN3(reg));@@ -801,6 +803,7 @@ 		FAIL_IF(push_inst32(compiler, CLZ | RN4(arg2) | RD4(dst) | RM4(arg2))); 		return SLJIT_SUCCESS; 	case SLJIT_ADD:+		compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD_SUB; 		if (IS_3_LO_REGS(dst, arg1, arg2)) 			return push_inst16(compiler, ADDS | RD3(dst) | RN3(arg1) | RM3(arg2)); 		if (dst == arg1 && !(flags & SET_FLAGS))@@ -811,6 +814,7 @@ 			return push_inst16(compiler, ADCS | RD3(dst) | RN3(arg2)); 		return push_inst32(compiler, ADC_W | (flags & SET_FLAGS) | RD4(dst) | RN4(arg1) | RM4(arg2)); 	case SLJIT_SUB:+		compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD_SUB; 		if (flags & UNUSED_RETURN) { 			if (IS_2_LO_REGS(arg1, arg2)) 				return push_inst16(compiler, CMP | RD3(arg1) | RN3(arg2));@@ -824,6 +828,7 @@ 			return push_inst16(compiler, SBCS | RD3(dst) | RN3(arg2)); 		return push_inst32(compiler, SBC_W | (flags & SET_FLAGS) | RD4(dst) | RN4(arg1) | RM4(arg2)); 	case SLJIT_MUL:+		compiler->status_flags_state = 0; 		if (!(flags & SET_FLAGS)) 			return push_inst32(compiler, MUL | RD4(dst) | RN4(arg1) | RM4(arg2)); 		SLJIT_ASSERT(dst != TMP_REG2);@@ -1760,16 +1765,14 @@ /*  Conditional instructions                                             */ /* --------------------------------------------------------------------- */ -static sljit_uw get_cc(sljit_s32 type)+static sljit_uw get_cc(struct sljit_compiler *compiler, sljit_s32 type) { 	switch (type) { 	case SLJIT_EQUAL:-	case SLJIT_MUL_NOT_OVERFLOW: 	case SLJIT_EQUAL_F64: 		return 0x0;  	case SLJIT_NOT_EQUAL:-	case SLJIT_MUL_OVERFLOW: 	case SLJIT_NOT_EQUAL_F64: 		return 0x1; @@ -1802,10 +1805,16 @@ 		return 0xd;  	case SLJIT_OVERFLOW:+		if (!(compiler->status_flags_state & SLJIT_CURRENT_FLAGS_ADD_SUB))+			return 0x1;+ 	case SLJIT_UNORDERED_F64: 		return 0x6;  	case SLJIT_NOT_OVERFLOW:+		if (!(compiler->status_flags_state & SLJIT_CURRENT_FLAGS_ADD_SUB))+			return 0x0;+ 	case SLJIT_ORDERED_F64: 		return 0x7; @@ -1847,7 +1856,7 @@ 	PTR_FAIL_IF(emit_imm32_const(compiler, TMP_REG1, 0)); 	if (type < SLJIT_JUMP) { 		jump->flags |= IS_COND;-		cc = get_cc(type);+		cc = get_cc(compiler, type); 		jump->flags |= cc << 8; 		PTR_FAIL_IF(push_inst16(compiler, IT | (cc << 4) | 0x8)); 	}@@ -2177,7 +2186,7 @@ 	ADJUST_LOCAL_OFFSET(dst, dstw);  	op = GET_OPCODE(op);-	cc = get_cc(type & 0xff);+	cc = get_cc(compiler, type & 0xff); 	dst_r = FAST_IS_REG(dst) ? dst : TMP_REG1;  	if (op < SLJIT_ADD) {@@ -2229,7 +2238,7 @@  	dst_reg &= ~SLJIT_I32_OP; -	cc = get_cc(type & 0xff);+	cc = get_cc(compiler, type & 0xff);  	if (!(src & SLJIT_IMM)) { 		FAIL_IF(push_inst16(compiler, IT | (cc << 4) | 0x8));
src/c/pcre2/src/sljit/sljitNativeMIPS_32.c view
@@ -367,7 +367,7 @@ 	case SLJIT_MUL: 		SLJIT_ASSERT(!(flags & SRC2_IMM)); -		if (GET_FLAG_TYPE(op) != SLJIT_MUL_OVERFLOW) {+		if (GET_FLAG_TYPE(op) != SLJIT_OVERFLOW) { #if (defined SLJIT_MIPS_REV && SLJIT_MIPS_REV >= 1) 			return push_inst(compiler, MUL | S(src1) | T(src2) | D(dst), DR(dst)); #else /* SLJIT_MIPS_REV < 1 */
src/c/pcre2/src/sljit/sljitNativeMIPS_64.c view
@@ -458,7 +458,7 @@ 	case SLJIT_MUL: 		SLJIT_ASSERT(!(flags & SRC2_IMM)); -		if (GET_FLAG_TYPE(op) != SLJIT_MUL_OVERFLOW) {+		if (GET_FLAG_TYPE(op) != SLJIT_OVERFLOW) { #if (defined SLJIT_MIPS_REV && SLJIT_MIPS_REV >= 6) 			return push_inst(compiler, SELECT_OP(DMUL, MUL) | S(src1) | T(src2) | D(dst), DR(dst)); #elif (defined SLJIT_MIPS_REV && SLJIT_MIPS_REV >= 1)
src/c/pcre2/src/sljit/sljitNativeMIPS_common.c view
@@ -1377,6 +1377,7 @@ 		return emit_op(compiler, op, flags, dst, dstw, TMP_REG1, 0, src, srcw);  	case SLJIT_NEG:+		compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD_SUB; 		return emit_op(compiler, SLJIT_SUB | GET_ALL_FLAGS(op), flags | IMM_OP, dst, dstw, SLJIT_IMM, 0, src, srcw);  	case SLJIT_CLZ:@@ -1424,13 +1425,16 @@ 	switch (GET_OPCODE(op)) { 	case SLJIT_ADD: 	case SLJIT_ADDC:+		compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD_SUB; 		return emit_op(compiler, op, flags | CUMULATIVE_OP | IMM_OP, dst, dstw, src1, src1w, src2, src2w);  	case SLJIT_SUB: 	case SLJIT_SUBC:+		compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD_SUB; 		return emit_op(compiler, op, flags | IMM_OP, dst, dstw, src1, src1w, src2, src2w);  	case SLJIT_MUL:+		compiler->status_flags_state = 0; 		return emit_op(compiler, op, flags | CUMULATIVE_OP, dst, dstw, src1, src1w, src2, src2w);  	case SLJIT_AND:@@ -1860,7 +1864,6 @@ 	case SLJIT_SIG_LESS: 	case SLJIT_SIG_GREATER: 	case SLJIT_OVERFLOW:-	case SLJIT_MUL_OVERFLOW: 		BR_Z(OTHER_FLAG); 		break; 	case SLJIT_GREATER_EQUAL:@@ -1868,7 +1871,6 @@ 	case SLJIT_SIG_GREATER_EQUAL: 	case SLJIT_SIG_LESS_EQUAL: 	case SLJIT_NOT_OVERFLOW:-	case SLJIT_MUL_NOT_OVERFLOW: 		BR_NZ(OTHER_FLAG); 		break; 	case SLJIT_NOT_EQUAL_F64:@@ -2127,8 +2129,12 @@ 		FAIL_IF(push_inst(compiler, SLTIU | SA(EQUAL_FLAG) | TA(dst_ar) | IMM(1), dst_ar)); 		src_ar = dst_ar; 		break;-	case SLJIT_MUL_OVERFLOW:-	case SLJIT_MUL_NOT_OVERFLOW:+	case SLJIT_OVERFLOW:+	case SLJIT_NOT_OVERFLOW:+		if (compiler->status_flags_state & SLJIT_CURRENT_FLAGS_ADD_SUB) {+			src_ar = OTHER_FLAG;+			break;+		} 		FAIL_IF(push_inst(compiler, SLTIU | SA(OTHER_FLAG) | TA(dst_ar) | IMM(1), dst_ar)); 		src_ar = dst_ar; 		type ^= 0x1; /* Flip type bit for the XORI below. */@@ -2219,7 +2225,6 @@ 	case SLJIT_SIG_LESS: 	case SLJIT_SIG_GREATER: 	case SLJIT_OVERFLOW:-	case SLJIT_MUL_OVERFLOW: 		ins = MOVN | TA(OTHER_FLAG); 		break; 	case SLJIT_GREATER_EQUAL:@@ -2227,7 +2232,6 @@ 	case SLJIT_SIG_GREATER_EQUAL: 	case SLJIT_SIG_LESS_EQUAL: 	case SLJIT_NOT_OVERFLOW:-	case SLJIT_MUL_NOT_OVERFLOW: 		ins = MOVZ | TA(OTHER_FLAG); 		break; 	case SLJIT_EQUAL_F64:
src/c/pcre2/src/sljit/sljitNativePPC_32.c view
@@ -119,9 +119,10 @@ 			SLJIT_ASSERT(src2 == TMP_REG2); 			return push_inst(compiler, ADDIC | D(dst) | A(src1) | compiler->imm); 		}+		SLJIT_ASSERT(!(flags & ALT_FORM4)); 		if (!(flags & ALT_SET_FLAGS)) 			return push_inst(compiler, ADD | D(dst) | A(src1) | B(src2));-		if (flags & ALT_FORM4)+		if (flags & ALT_FORM5) 			return push_inst(compiler, ADDC | RC(ALT_SET_FLAGS) | D(dst) | A(src1) | B(src2)); 		return push_inst(compiler, ADD | RC(flags) | D(dst) | A(src1) | B(src2)); @@ -143,22 +144,27 @@ 		}  		if (flags & ALT_FORM2) {+			if (flags & ALT_FORM3) {+				FAIL_IF(push_inst(compiler, CMPI | CRD(0) | A(src1) | compiler->imm));+				if (!(flags & ALT_FORM4))+					return SLJIT_SUCCESS;+				return push_inst(compiler, ADDI | D(dst) | A(src1) | (-compiler->imm & 0xffff));+			}+			FAIL_IF(push_inst(compiler, CMP | CRD(0) | A(src1) | B(src2)));+			if (!(flags & ALT_FORM4))+				return SLJIT_SUCCESS;+			return push_inst(compiler, SUBF | D(dst) | A(src2) | B(src1));+		}++		if (flags & ALT_FORM3) { 			/* Setting XER SO is not enough, CR SO is also needed. */ 			return push_inst(compiler, SUBF | OE(ALT_SET_FLAGS) | RC(ALT_SET_FLAGS) | D(dst) | A(src2) | B(src1)); 		} -		if (flags & ALT_FORM3) {+		if (flags & ALT_FORM4) { 			/* Flags does not set: BIN_IMM_EXTS unnecessary. */ 			SLJIT_ASSERT(src2 == TMP_REG2); 			return push_inst(compiler, SUBFIC | D(dst) | A(src1) | compiler->imm);-		}--		if (flags & ALT_FORM4) {-			if (flags & ALT_FORM5) {-				SLJIT_ASSERT(src2 == TMP_REG2);-				return push_inst(compiler, CMPI | CRD(0) | A(src1) | compiler->imm);-			}-			return push_inst(compiler, CMP | CRD(0) | A(src1) | B(src2)); 		}  		if (!(flags & ALT_SET_FLAGS))
src/c/pcre2/src/sljit/sljitNativePPC_64.c view
@@ -252,10 +252,17 @@ 			BIN_IMM_EXTS(); 			return push_inst(compiler, ADDIC | D(dst) | A(src1) | compiler->imm); 		}+		if (flags & ALT_FORM4) {+			if (flags & ALT_FORM5)+				FAIL_IF(push_inst(compiler, ADDI | D(dst) | A(src1) | compiler->imm));+			else+				FAIL_IF(push_inst(compiler, ADD | D(dst) | A(src1) | B(src2)));+			return push_inst(compiler, CMPI | A(dst) | 0);+		} 		if (!(flags & ALT_SET_FLAGS)) 			return push_inst(compiler, ADD | D(dst) | A(src1) | B(src2)); 		BIN_EXTS();-		if (flags & ALT_FORM4)+		if (flags & ALT_FORM5) 			return push_inst(compiler, ADDC | RC(ALT_SET_FLAGS) | D(dst) | A(src1) | B(src2)); 		return push_inst(compiler, ADD | RC(flags) | D(dst) | A(src1) | B(src2)); @@ -278,6 +285,19 @@ 		}  		if (flags & ALT_FORM2) {+			if (flags & ALT_FORM3) {+				FAIL_IF(push_inst(compiler, CMPI | CRD(0 | ((flags & ALT_SIGN_EXT) ? 0 : 1)) | A(src1) | compiler->imm));+				if (!(flags & ALT_FORM4))+					return SLJIT_SUCCESS;+				return push_inst(compiler, ADDI | D(dst) | A(src1) | (-compiler->imm & 0xffff));+			}+			FAIL_IF(push_inst(compiler, CMP | CRD(0 | ((flags & ALT_SIGN_EXT) ? 0 : 1)) | A(src1) | B(src2)));+			if (!(flags & ALT_FORM4))+				return SLJIT_SUCCESS;+			return push_inst(compiler, SUBF | D(dst) | A(src2) | B(src1));+		}++		if (flags & ALT_FORM3) { 			if (flags & ALT_SIGN_EXT) { 				FAIL_IF(push_inst(compiler, RLDI(TMP_REG1, src1, 32, 31, 1))); 				src1 = TMP_REG1;@@ -291,18 +311,10 @@ 			return SLJIT_SUCCESS; 		} -		if (flags & ALT_FORM3) {+		if (flags & ALT_FORM4) { 			/* Flags does not set: BIN_IMM_EXTS unnecessary. */ 			SLJIT_ASSERT(src2 == TMP_REG2); 			return push_inst(compiler, SUBFIC | D(dst) | A(src1) | compiler->imm);-		}--		if (flags & ALT_FORM4) {-			if (flags & ALT_FORM5) {-				SLJIT_ASSERT(src2 == TMP_REG2);-				return push_inst(compiler, CMPI | CRD(0 | ((flags & ALT_SIGN_EXT) ? 0 : 1)) | A(src1) | compiler->imm);-			}-			return push_inst(compiler, CMP | CRD(0 | ((flags & ALT_SIGN_EXT) ? 0 : 1)) | A(src1) | B(src2)); 		}  		if (!(flags & ALT_SET_FLAGS))
src/c/pcre2/src/sljit/sljitNativePPC_common.c view
@@ -1324,6 +1324,25 @@ 	((src) & SLJIT_IMM) #endif +#if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64)+#define TEST_ADD_FORM1(op) \+	(GET_FLAG_TYPE(op) == SLJIT_OVERFLOW \+		|| (op & (SLJIT_I32_OP | SLJIT_SET_Z | VARIABLE_FLAG_MASK)) == (SLJIT_I32_OP | SLJIT_SET_Z | SLJIT_SET_CARRY))+#define TEST_SUB_FORM2(op) \+	((GET_FLAG_TYPE(op) >= SLJIT_SIG_LESS && GET_FLAG_TYPE(op) <= SLJIT_SIG_LESS_EQUAL) \+		|| (op & (SLJIT_I32_OP | SLJIT_SET_Z | VARIABLE_FLAG_MASK)) == (SLJIT_I32_OP | SLJIT_SET_Z))+#define TEST_SUB_FORM3(op) \+	(GET_FLAG_TYPE(op) == SLJIT_OVERFLOW \+		|| (op & (SLJIT_I32_OP | SLJIT_SET_Z)) == (SLJIT_I32_OP | SLJIT_SET_Z))+#else+#define TEST_ADD_FORM1(op) \+	(GET_FLAG_TYPE(op) == SLJIT_OVERFLOW)+#define TEST_SUB_FORM2(op) \+	(GET_FLAG_TYPE(op) >= SLJIT_SIG_LESS && GET_FLAG_TYPE(op) <= SLJIT_SIG_LESS_EQUAL)+#define TEST_SUB_FORM3(op) \+	(GET_FLAG_TYPE(op) == SLJIT_OVERFLOW)+#endif+ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compiler, sljit_s32 op, 	sljit_s32 dst, sljit_sw dstw, 	sljit_s32 src1, sljit_sw src1w,@@ -1362,7 +1381,7 @@  	switch (GET_OPCODE(op)) { 	case SLJIT_ADD:-		if (GET_FLAG_TYPE(op) == SLJIT_OVERFLOW)+		if (TEST_ADD_FORM1(op)) 			return emit_op(compiler, SLJIT_ADD, flags | ALT_FORM1, dst, dstw, src1, src1w, src2, src2w);  		if (!HAS_FLAGS(op) && ((src1 | src2) & SLJIT_IMM)) {@@ -1392,6 +1411,20 @@ 				return emit_op(compiler, SLJIT_ADD, flags | ALT_FORM2 | ALT_FORM4, dst, dstw, src2, src2w, TMP_REG2, 0); 			} 		}++#if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64)+		if ((op & (SLJIT_I32_OP | SLJIT_SET_Z)) == (SLJIT_I32_OP | SLJIT_SET_Z)) {+			if (TEST_SL_IMM(src2, src2w)) {+				compiler->imm = src2w & 0xffff;+				return emit_op(compiler, SLJIT_ADD, flags | ALT_FORM4 | ALT_FORM5, dst, dstw, src1, src1w, TMP_REG2, 0);+			}+			if (TEST_SL_IMM(src1, src1w)) {+				compiler->imm = src1w & 0xffff;+				return emit_op(compiler, SLJIT_ADD, flags | ALT_FORM4 | ALT_FORM5, dst, dstw, src2, src2w, TMP_REG2, 0);+			}+			return emit_op(compiler, SLJIT_ADD, flags | ALT_FORM4, dst, dstw, src1, src1w, src2, src2w);+		}+#endif 		if (HAS_FLAGS(op)) { 			if (TEST_SL_IMM(src2, src2w)) { 				compiler->imm = src2w & 0xffff;@@ -1402,7 +1435,7 @@ 				return emit_op(compiler, SLJIT_ADD, flags | ALT_FORM3, dst, dstw, src2, src2w, TMP_REG2, 0); 			} 		}-		return emit_op(compiler, SLJIT_ADD, flags | ((GET_FLAG_TYPE(op) == GET_FLAG_TYPE(SLJIT_SET_CARRY)) ? ALT_FORM4 : 0), dst, dstw, src1, src1w, src2, src2w);+		return emit_op(compiler, SLJIT_ADD, flags | ((GET_FLAG_TYPE(op) == GET_FLAG_TYPE(SLJIT_SET_CARRY)) ? ALT_FORM5 : 0), dst, dstw, src1, src1w, src2, src2w);  	case SLJIT_ADDC: 		return emit_op(compiler, SLJIT_ADDC, flags, dst, dstw, src1, src1w, src2, src2w);@@ -1424,18 +1457,36 @@ 			return emit_op(compiler, SLJIT_SUB, flags | ALT_FORM1 | ALT_FORM3, dst, dstw, src1, src1w, src2, src2w); 		} -		if (GET_FLAG_TYPE(op) == SLJIT_OVERFLOW)+		if (dst == SLJIT_UNUSED && GET_FLAG_TYPE(op) <= SLJIT_SIG_LESS_EQUAL) {+			if (TEST_SL_IMM(src2, src2w)) {+				compiler->imm = src2w & 0xffff;+				return emit_op(compiler, SLJIT_SUB, flags | ALT_FORM2 | ALT_FORM3, dst, dstw, src1, src1w, TMP_REG2, 0);+			} 			return emit_op(compiler, SLJIT_SUB, flags | ALT_FORM2, dst, dstw, src1, src1w, src2, src2w);+		} -		if (!HAS_FLAGS(op) && ((src1 | src2) & SLJIT_IMM)) {-			if (TEST_SL_IMM(src2, -src2w)) {-				compiler->imm = (-src2w) & 0xffff;-				return emit_op(compiler, SLJIT_ADD, flags | ALT_FORM2, dst, dstw, src1, src1w, TMP_REG2, 0);-			}-			if (TEST_SL_IMM(src1, src1w)) {-				compiler->imm = src1w & 0xffff;-				return emit_op(compiler, SLJIT_SUB, flags | ALT_FORM3, dst, dstw, src2, src2w, TMP_REG2, 0);+		if (TEST_SUB_FORM2(op)) {+			if ((src2 & SLJIT_IMM) && src2w >= -SIMM_MAX && src2w <= SIMM_MAX) {+				compiler->imm = src2w & 0xffff;+				return emit_op(compiler, SLJIT_SUB, flags | ALT_FORM2 | ALT_FORM3 | ALT_FORM4, dst, dstw, src1, src1w, TMP_REG2, 0); 			}+			return emit_op(compiler, SLJIT_SUB, flags | ALT_FORM2 | ALT_FORM4, dst, dstw, src1, src1w, src2, src2w);+		}++		if (TEST_SUB_FORM3(op))+			return emit_op(compiler, SLJIT_SUB, flags | ALT_FORM3, dst, dstw, src1, src1w, src2, src2w);++		if (TEST_SL_IMM(src2, -src2w)) {+			compiler->imm = (-src2w) & 0xffff;+			return emit_op(compiler, SLJIT_ADD, flags | (!HAS_FLAGS(op) ? ALT_FORM2 : ALT_FORM3), dst, dstw, src1, src1w, TMP_REG2, 0);+		}++		if (TEST_SL_IMM(src1, src1w) && !(op & SLJIT_SET_Z)) {+			compiler->imm = src1w & 0xffff;+			return emit_op(compiler, SLJIT_SUB, flags | ALT_FORM4, dst, dstw, src2, src2w, TMP_REG2, 0);+		}++		if (!HAS_FLAGS(op)) { 			if (TEST_SH_IMM(src2, -src2w)) { 				compiler->imm = ((-src2w) >> 16) & 0xffff; 				return emit_op(compiler, SLJIT_ADD, flags |  ALT_FORM2 | ALT_FORM3, dst, dstw, src1, src1w, TMP_REG2, 0);@@ -1447,18 +1498,6 @@ 			} 		} -		if (dst == SLJIT_UNUSED && GET_FLAG_TYPE(op) != GET_FLAG_TYPE(SLJIT_SET_CARRY)) {-			if (TEST_SL_IMM(src2, src2w)) {-				compiler->imm = src2w & 0xffff;-				return emit_op(compiler, SLJIT_SUB, flags | ALT_FORM4 | ALT_FORM5, dst, dstw, src1, src1w, TMP_REG2, 0);-			}-			return emit_op(compiler, SLJIT_SUB, flags | ALT_FORM4, dst, dstw, src1, src1w, src2, src2w);-		}--		if (TEST_SL_IMM(src2, -src2w)) {-			compiler->imm = (-src2w) & 0xffff;-			return emit_op(compiler, SLJIT_ADD, flags | ALT_FORM3, dst, dstw, src1, src1w, TMP_REG2, 0);-		} 		/* We know ALT_SIGN_EXT is set if it is an SLJIT_I32_OP on 64 bit systems. */ 		return emit_op(compiler, SLJIT_SUB, flags | ((GET_FLAG_TYPE(op) == GET_FLAG_TYPE(SLJIT_SET_CARRY)) ? ALT_FORM5 : 0), dst, dstw, src1, src1w, src2, src2w); @@ -1536,6 +1575,10 @@ 	return SLJIT_SUCCESS; } +#undef TEST_ADD_FORM1+#undef TEST_SUB_FORM2+#undef TEST_SUB_FORM3+ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_src(struct sljit_compiler *compiler, sljit_s32 op, 	sljit_s32 src, sljit_sw srcw) {@@ -1941,11 +1984,9 @@ 		return (4 << 21) | ((4 + 1) << 16);  	case SLJIT_OVERFLOW:-	case SLJIT_MUL_OVERFLOW: 		return (12 << 21) | (3 << 16);  	case SLJIT_NOT_OVERFLOW:-	case SLJIT_MUL_NOT_OVERFLOW: 		return (4 << 21) | (3 << 16);  	case SLJIT_EQUAL_F64:@@ -2143,12 +2184,10 @@ 		break;  	case SLJIT_OVERFLOW:-	case SLJIT_MUL_OVERFLOW: 		cr_bit = 3; 		break;  	case SLJIT_NOT_OVERFLOW:-	case SLJIT_MUL_NOT_OVERFLOW: 		cr_bit = 3; 		invert = 1; 		break;
src/c/pcre2/src/sljit/sljitNativeS390X.c view
@@ -45,2760 +45,2981 @@ static const sljit_ins sljit_ins_const = (sljit_ins)1 << 48;  static const sljit_u8 reg_map[SLJIT_NUMBER_OF_REGISTERS + 4] = {-	14, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 15, 0, 1-};--/* there are also a[2-15] available, but they are slower to access and- * their use is limited as mundaym explained:- *   https://github.com/zherczeg/sljit/pull/91#discussion_r486895689- */--/* General Purpose Registers [0-15]. */-typedef sljit_uw sljit_gpr;--/*- * WARNING- * the following code is non standard and should be improved for- * consistency, but doesn't use SLJIT_NUMBER_OF_REGISTERS based- * registers because r0 and r1 are the ABI recommended volatiles.- * there is a gpr() function that maps sljit to physical register numbers- * that should be used instead of the usual index into reg_map[] and- * will be retired ASAP (TODO: carenas)- */--static const sljit_gpr r0 = 0;		/* reg_map[SLJIT_NUMBER_OF_REGISTERS + 2]: 0 in address calculations; reserved */-static const sljit_gpr r1 = 1;		/* reg_map[SLJIT_NUMBER_OF_REGISTERS + 3]: reserved */-static const sljit_gpr r2 = 2;		/* reg_map[1]: 1st argument */-static const sljit_gpr r3 = 3;		/* reg_map[2]: 2nd argument */-static const sljit_gpr r4 = 4;		/* reg_map[3]: 3rd argument */-static const sljit_gpr r5 = 5;		/* reg_map[4]: 4th argument */-static const sljit_gpr r6 = 6;		/* reg_map[5]: 5th argument; 1st saved register */-static const sljit_gpr r7 = 7;		/* reg_map[6] */-static const sljit_gpr r8 = 8;		/* reg_map[7] */-static const sljit_gpr r9 = 9;		/* reg_map[8] */-static const sljit_gpr r10 = 10;	/* reg_map[9] */-static const sljit_gpr r11 = 11;	/* reg_map[10] */-static const sljit_gpr r12 = 12;	/* reg_map[11]: GOT */-static const sljit_gpr r13 = 13;	/* reg_map[12]: Literal Pool pointer */-static const sljit_gpr r14 = 14;	/* reg_map[0]: return address and flag register */-static const sljit_gpr r15 = 15;	/* reg_map[SLJIT_NUMBER_OF_REGISTERS + 1]: stack pointer */--/* WARNING: r12 and r13 shouldn't be used as per ABI recommendation */-/* TODO(carenas): r12 might conflict in PIC code, reserve? */-/* TODO(carenas): r13 is usually pointed to "pool" per ABI, using a tmp- *                like we do know might be faster though, reserve?- */--/* TODO(carenas): should be named TMP_REG[1-2] for consistency */-#define tmp0	r0-#define tmp1	r1--/* TODO(carenas): flags should move to a different register so that- *                link register doesn't need to change- */--/* Link registers. The normal link register is r14, but since-   we use that for flags we need to use r0 instead to do fast-   calls so that flags are preserved. */-static const sljit_gpr link_r = 14;     /* r14 */-static const sljit_gpr fast_link_r = 0; /* r0 */--/* Flag register layout:--   0               32  33  34      36      64-   +---------------+---+---+-------+-------+-   |      ZERO     | 0 | 0 |  C C  |///////|-   +---------------+---+---+-------+-------+-*/-static const sljit_gpr flag_r = 14; /* r14 */--struct sljit_s390x_const {-	struct sljit_const const_; /* must be first */-	sljit_sw init_value;       /* required to build literal pool */-};--/* Convert SLJIT register to hardware register. */-static SLJIT_INLINE sljit_gpr gpr(sljit_s32 r)-{-	SLJIT_ASSERT(r != SLJIT_UNUSED);-	SLJIT_ASSERT(r < (sljit_s32)(sizeof(reg_map) / sizeof(reg_map[0])));-	return reg_map[r];-}--/* Size of instruction in bytes. Tags must already be cleared. */-static SLJIT_INLINE sljit_uw sizeof_ins(sljit_ins ins)-{-	/* keep faulting instructions */-	if (ins == 0)-		 return 2;--	if ((ins & 0x00000000ffffL) == ins)-		 return 2;-	if ((ins & 0x0000ffffffffL) == ins)-		 return 4;-	if ((ins & 0xffffffffffffL) == ins)-		 return 6;--	SLJIT_UNREACHABLE();-	return (sljit_uw)-1;-}--static sljit_s32 push_inst(struct sljit_compiler *compiler, sljit_ins ins)-{-	sljit_ins *ibuf = (sljit_ins *)ensure_buf(compiler, sizeof(sljit_ins));-	FAIL_IF(!ibuf);-	*ibuf = ins;-	compiler->size++;-	return SLJIT_SUCCESS;-}--static sljit_s32 encode_inst(void **ptr, sljit_ins ins)-{-	sljit_u16 *ibuf = (sljit_u16 *)*ptr;-	sljit_uw size = sizeof_ins(ins);--	SLJIT_ASSERT((size & 6) == size);-	switch (size) {-	case 6:-		*ibuf++ = (sljit_u16)(ins >> 32);-		/* fallthrough */-	case 4:-		*ibuf++ = (sljit_u16)(ins >> 16);-		/* fallthrough */-	case 2:-		*ibuf++ = (sljit_u16)(ins);-	}-	*ptr = (void*)ibuf;-	return SLJIT_SUCCESS;-}--/* Map the given type to a 4-bit condition code mask. */-static SLJIT_INLINE sljit_u8 get_cc(sljit_s32 type) {-	const sljit_u8 eq = 1 << 3; /* equal {,to zero} */-	const sljit_u8 lt = 1 << 2; /* less than {,zero} */-	const sljit_u8 gt = 1 << 1; /* greater than {,zero} */-	const sljit_u8 ov = 1 << 0; /* {overflow,NaN} */--	switch (type) {-	case SLJIT_EQUAL:-	case SLJIT_EQUAL_F64:-		return eq;--	case SLJIT_NOT_EQUAL:-	case SLJIT_NOT_EQUAL_F64:-		return ~eq;--	case SLJIT_LESS:-	case SLJIT_SIG_LESS:-	case SLJIT_LESS_F64:-		return lt;--	case SLJIT_LESS_EQUAL:-	case SLJIT_SIG_LESS_EQUAL:-	case SLJIT_LESS_EQUAL_F64:-		return (lt | eq);--	case SLJIT_GREATER:-	case SLJIT_SIG_GREATER:-	case SLJIT_GREATER_F64:-		return gt;--	case SLJIT_GREATER_EQUAL:-	case SLJIT_SIG_GREATER_EQUAL:-	case SLJIT_GREATER_EQUAL_F64:-		return (gt | eq);--	case SLJIT_OVERFLOW:-	case SLJIT_MUL_OVERFLOW:-	case SLJIT_UNORDERED_F64:-		return ov;--	case SLJIT_NOT_OVERFLOW:-	case SLJIT_MUL_NOT_OVERFLOW:-	case SLJIT_ORDERED_F64:-		return ~ov;-	}--	SLJIT_UNREACHABLE();-	return (sljit_u8)-1;-}--/* Facility to bit index mappings.-   Note: some facilities share the same bit index. */-typedef sljit_uw facility_bit;-#define STORE_FACILITY_LIST_EXTENDED_FACILITY 7-#define FAST_LONG_DISPLACEMENT_FACILITY 19-#define EXTENDED_IMMEDIATE_FACILITY 21-#define GENERAL_INSTRUCTION_EXTENSION_FACILITY 34-#define DISTINCT_OPERAND_FACILITY 45-#define HIGH_WORD_FACILITY 45-#define POPULATION_COUNT_FACILITY 45-#define LOAD_STORE_ON_CONDITION_1_FACILITY 45-#define MISCELLANEOUS_INSTRUCTION_EXTENSIONS_1_FACILITY 49-#define LOAD_STORE_ON_CONDITION_2_FACILITY 53-#define MISCELLANEOUS_INSTRUCTION_EXTENSIONS_2_FACILITY 58-#define VECTOR_FACILITY 129-#define VECTOR_ENHANCEMENTS_1_FACILITY 135--/* Report whether a facility is known to be present due to the compiler-   settings. This function should always be compiled to a constant-   value given a constant argument. */-static SLJIT_INLINE int have_facility_static(facility_bit x)-{-#if ENABLE_STATIC_FACILITY_DETECTION-	switch (x) {-	case FAST_LONG_DISPLACEMENT_FACILITY:-		return (__ARCH__ >=  6 /* z990 */);-	case EXTENDED_IMMEDIATE_FACILITY:-	case STORE_FACILITY_LIST_EXTENDED_FACILITY:-		return (__ARCH__ >=  7 /* z9-109 */);-	case GENERAL_INSTRUCTION_EXTENSION_FACILITY:-		return (__ARCH__ >=  8 /* z10 */);-	case DISTINCT_OPERAND_FACILITY:-		return (__ARCH__ >=  9 /* z196 */);-	case MISCELLANEOUS_INSTRUCTION_EXTENSIONS_1_FACILITY:-		return (__ARCH__ >= 10 /* zEC12 */);-	case LOAD_STORE_ON_CONDITION_2_FACILITY:-	case VECTOR_FACILITY:-		return (__ARCH__ >= 11 /* z13 */);-	case MISCELLANEOUS_INSTRUCTION_EXTENSIONS_2_FACILITY:-	case VECTOR_ENHANCEMENTS_1_FACILITY:-		return (__ARCH__ >= 12 /* z14 */);-	default:-		SLJIT_UNREACHABLE();-	}-#endif-	return 0;-}--static SLJIT_INLINE unsigned long get_hwcap()-{-	static unsigned long hwcap = 0;-	if (SLJIT_UNLIKELY(!hwcap)) {-		hwcap = getauxval(AT_HWCAP);-		SLJIT_ASSERT(hwcap != 0);-	}-	return hwcap;-}--static SLJIT_INLINE int have_stfle()-{-	if (have_facility_static(STORE_FACILITY_LIST_EXTENDED_FACILITY))-		return 1;--	return (get_hwcap() & HWCAP_S390_STFLE);-}--/* Report whether the given facility is available. This function always-   performs a runtime check. */-static int have_facility_dynamic(facility_bit x)-{-#if ENABLE_DYNAMIC_FACILITY_DETECTION-	static struct {-		sljit_uw bits[4];-	} cpu_features;-	size_t size = sizeof(cpu_features);-	const sljit_uw word_index = x >> 6;-	const sljit_uw bit_index = ((1UL << 63) >> (x & 63));--	SLJIT_ASSERT(x < size * 8);-	if (SLJIT_UNLIKELY(!have_stfle()))-		return 0;--	if (SLJIT_UNLIKELY(cpu_features.bits[0] == 0)) {-		__asm__ __volatile__ (-			"lgr   %%r0, %0;"-			"stfle 0(%1);"-			/* outputs  */:-			/* inputs   */: "d" ((size / 8) - 1), "a" (&cpu_features)-			/* clobbers */: "r0", "cc", "memory"-		);-		SLJIT_ASSERT(cpu_features.bits[0] != 0);-	}-	return (cpu_features.bits[word_index] & bit_index) != 0;-#else-	return 0;-#endif-}--#define HAVE_FACILITY(name, bit) \-static SLJIT_INLINE int name() \-{ \-	static int have = -1; \-	/* Static check first. May allow the function to be optimized away. */ \-	if (have_facility_static(bit)) \-		have = 1; \-	else if (SLJIT_UNLIKELY(have < 0)) \-		have = have_facility_dynamic(bit) ? 1 : 0; \-\-	return have; \-}--HAVE_FACILITY(have_eimm,    EXTENDED_IMMEDIATE_FACILITY)-HAVE_FACILITY(have_ldisp,   FAST_LONG_DISPLACEMENT_FACILITY)-HAVE_FACILITY(have_genext,  GENERAL_INSTRUCTION_EXTENSION_FACILITY)-HAVE_FACILITY(have_lscond1, LOAD_STORE_ON_CONDITION_1_FACILITY)-HAVE_FACILITY(have_lscond2, LOAD_STORE_ON_CONDITION_2_FACILITY)-HAVE_FACILITY(have_misc2,   MISCELLANEOUS_INSTRUCTION_EXTENSIONS_2_FACILITY)-#undef HAVE_FACILITY--#define is_u12(d)	(0 <= (d) && (d) <= 0x00000fffL)-#define is_u32(d)	(0 <= (d) && (d) <= 0xffffffffL)--#define CHECK_SIGNED(v, bitlen) \-	((v) == (((v) << (sizeof(v) * 8 - bitlen)) >> (sizeof(v) * 8 - bitlen)))--#define is_s16(d)	CHECK_SIGNED((d), 16)-#define is_s20(d)	CHECK_SIGNED((d), 20)-#define is_s32(d)	CHECK_SIGNED((d), 32)--static SLJIT_INLINE sljit_uw disp_s20(sljit_s32 d)-{-	sljit_uw dh = (d >> 12) & 0xff;-	sljit_uw dl = (d << 8) & 0xfff00;--	SLJIT_ASSERT(is_s20(d));-	return dh | dl;-}--/* TODO(carenas): variadic macro is not strictly needed */-#define SLJIT_S390X_INSTRUCTION(op, ...) \-static SLJIT_INLINE sljit_ins op(__VA_ARGS__)--/* RR form instructions. */-#define SLJIT_S390X_RR(name, pattern) \-SLJIT_S390X_INSTRUCTION(name, sljit_gpr dst, sljit_gpr src) \-{ \-	return (pattern) | ((dst & 0xf) << 4) | (src & 0xf); \-}--/* ADD */-SLJIT_S390X_RR(ar,   0x1a00)--/* ADD LOGICAL */-SLJIT_S390X_RR(alr,  0x1e00)--/* AND */-SLJIT_S390X_RR(nr,   0x1400)--/* BRANCH AND SAVE */-SLJIT_S390X_RR(basr, 0x0d00)--/* BRANCH ON CONDITION */-SLJIT_S390X_RR(bcr,  0x0700) /* TODO(mundaym): type for mask? */--/* COMPARE */-SLJIT_S390X_RR(cr,   0x1900)--/* COMPARE LOGICAL */-SLJIT_S390X_RR(clr,  0x1500)--/* DIVIDE */-SLJIT_S390X_RR(dr,   0x1d00)--/* EXCLUSIVE OR */-SLJIT_S390X_RR(xr,   0x1700)--/* LOAD */-SLJIT_S390X_RR(lr,   0x1800)--/* LOAD COMPLEMENT */-SLJIT_S390X_RR(lcr,  0x1300)--/* OR */-SLJIT_S390X_RR(or,   0x1600)--/* SUBTRACT */-SLJIT_S390X_RR(sr,   0x1b00)--/* SUBTRACT LOGICAL */-SLJIT_S390X_RR(slr,  0x1f00)--#undef SLJIT_S390X_RR--/* RRE form instructions */-#define SLJIT_S390X_RRE(name, pattern) \-SLJIT_S390X_INSTRUCTION(name, sljit_gpr dst, sljit_gpr src) \-{ \-	return (pattern) | ((dst & 0xf) << 4) | (src & 0xf); \-}--/* ADD */-SLJIT_S390X_RRE(agr,   0xb9080000)--/* ADD LOGICAL */-SLJIT_S390X_RRE(algr,  0xb90a0000)--/* ADD LOGICAL WITH CARRY */-SLJIT_S390X_RRE(alcr,  0xb9980000)-SLJIT_S390X_RRE(alcgr, 0xb9880000)--/* AND */-SLJIT_S390X_RRE(ngr,   0xb9800000)--/* COMPARE */-SLJIT_S390X_RRE(cgr,   0xb9200000)--/* COMPARE LOGICAL */-SLJIT_S390X_RRE(clgr,  0xb9210000)--/* DIVIDE LOGICAL */-SLJIT_S390X_RRE(dlr,   0xb9970000)-SLJIT_S390X_RRE(dlgr,  0xb9870000)--/* DIVIDE SINGLE */-SLJIT_S390X_RRE(dsgr,  0xb90d0000)--/* EXCLUSIVE OR */-SLJIT_S390X_RRE(xgr,   0xb9820000)--/* LOAD */-SLJIT_S390X_RRE(lgr,   0xb9040000)-SLJIT_S390X_RRE(lgfr,  0xb9140000)--/* LOAD BYTE */-SLJIT_S390X_RRE(lbr,   0xb9260000)-SLJIT_S390X_RRE(lgbr,  0xb9060000)--/* LOAD COMPLEMENT */-SLJIT_S390X_RRE(lcgr,  0xb9030000)--/* LOAD HALFWORD */-SLJIT_S390X_RRE(lhr,   0xb9270000)-SLJIT_S390X_RRE(lghr,  0xb9070000)--/* LOAD LOGICAL */-SLJIT_S390X_RRE(llgfr, 0xb9160000)--/* LOAD LOGICAL CHARACTER */-SLJIT_S390X_RRE(llcr,  0xb9940000)-SLJIT_S390X_RRE(llgcr, 0xb9840000)--/* LOAD LOGICAL HALFWORD */-SLJIT_S390X_RRE(llhr,  0xb9950000)-SLJIT_S390X_RRE(llghr, 0xb9850000)--/* MULTIPLY LOGICAL */-SLJIT_S390X_RRE(mlgr,  0xb9860000)--/* MULTIPLY SINGLE */-SLJIT_S390X_RRE(msr,   0xb2520000)-SLJIT_S390X_RRE(msgr,  0xb90c0000)-SLJIT_S390X_RRE(msgfr, 0xb91c0000)--/* OR */-SLJIT_S390X_RRE(ogr,   0xb9810000)--/* SUBTRACT */-SLJIT_S390X_RRE(sgr,   0xb9090000)--/* SUBTRACT LOGICAL */-SLJIT_S390X_RRE(slgr,  0xb90b0000)--/* SUBTRACT LOGICAL WITH BORROW */-SLJIT_S390X_RRE(slbr,  0xb9990000)-SLJIT_S390X_RRE(slbgr, 0xb9890000)--#undef SLJIT_S390X_RRE--/* RI-a form instructions */-#define SLJIT_S390X_RIA(name, pattern, imm_type) \-SLJIT_S390X_INSTRUCTION(name, sljit_gpr reg, imm_type imm) \-{ \-	return (pattern) | ((reg & 0xf) << 20) | (imm & 0xffff); \-}--/* ADD HALFWORD IMMEDIATE */-SLJIT_S390X_RIA(ahi,   0xa70a0000, sljit_s16)-SLJIT_S390X_RIA(aghi,  0xa70b0000, sljit_s16)--/* COMPARE HALFWORD IMMEDIATE */-SLJIT_S390X_RIA(chi,   0xa70e0000, sljit_s16)-SLJIT_S390X_RIA(cghi,  0xa70f0000, sljit_s16)--/* LOAD HALFWORD IMMEDIATE */-SLJIT_S390X_RIA(lhi,   0xa7080000, sljit_s16)-SLJIT_S390X_RIA(lghi,  0xa7090000, sljit_s16)--/* LOAD LOGICAL IMMEDIATE */-SLJIT_S390X_RIA(llihh, 0xa50c0000, sljit_u16)-SLJIT_S390X_RIA(llihl, 0xa50d0000, sljit_u16)-SLJIT_S390X_RIA(llilh, 0xa50e0000, sljit_u16)-SLJIT_S390X_RIA(llill, 0xa50f0000, sljit_u16)--/* MULTIPLY HALFWORD IMMEDIATE */-SLJIT_S390X_RIA(mhi,   0xa70c0000, sljit_s16)-SLJIT_S390X_RIA(mghi,  0xa70d0000, sljit_s16)--/* OR IMMEDIATE */-SLJIT_S390X_RIA(oilh,  0xa50a0000, sljit_u16)--/* TEST UNDER MASK */-SLJIT_S390X_RIA(tmlh,  0xa7000000, sljit_u16)--#undef SLJIT_S390X_RIA--/* RIL-a form instructions (requires extended immediate facility) */-#define SLJIT_S390X_RILA(name, pattern, imm_type) \-SLJIT_S390X_INSTRUCTION(name, sljit_gpr reg, imm_type imm) \-{ \-	SLJIT_ASSERT(have_eimm()); \-	return (pattern) | ((sljit_ins)(reg & 0xf) << 36) | (imm & 0xffffffff); \-}--/* ADD IMMEDIATE */-SLJIT_S390X_RILA(afi,   0xc20900000000, sljit_s32)-SLJIT_S390X_RILA(agfi,  0xc20800000000, sljit_s32)--/* ADD IMMEDIATE HIGH */-SLJIT_S390X_RILA(aih,   0xcc0800000000, sljit_s32) /* TODO(mundaym): high-word facility? */--/* ADD LOGICAL IMMEDIATE */-SLJIT_S390X_RILA(alfi,  0xc20b00000000, sljit_u32)-SLJIT_S390X_RILA(algfi, 0xc20a00000000, sljit_u32)--/* AND IMMEDIATE */-SLJIT_S390X_RILA(nihf,  0xc00a00000000, sljit_u32)-SLJIT_S390X_RILA(nilf,  0xc00b00000000, sljit_u32)--/* COMPARE IMMEDIATE */-SLJIT_S390X_RILA(cfi,   0xc20d00000000, sljit_s32)-SLJIT_S390X_RILA(cgfi,  0xc20c00000000, sljit_s32)--/* COMPARE IMMEDIATE HIGH */-SLJIT_S390X_RILA(cih,   0xcc0d00000000, sljit_s32) /* TODO(mundaym): high-word facility? */--/* COMPARE LOGICAL IMMEDIATE */-SLJIT_S390X_RILA(clfi,  0xc20f00000000, sljit_u32)-SLJIT_S390X_RILA(clgfi, 0xc20e00000000, sljit_u32)--/* EXCLUSIVE OR IMMEDIATE */-SLJIT_S390X_RILA(xilf,  0xc00700000000, sljit_u32)--/* INSERT IMMEDIATE */-SLJIT_S390X_RILA(iihf,  0xc00800000000, sljit_u32)-SLJIT_S390X_RILA(iilf,  0xc00900000000, sljit_u32)--/* LOAD IMMEDIATE */-SLJIT_S390X_RILA(lgfi,  0xc00100000000, sljit_s32)--/* LOAD LOGICAL IMMEDIATE */-SLJIT_S390X_RILA(llihf, 0xc00e00000000, sljit_u32)-SLJIT_S390X_RILA(llilf, 0xc00f00000000, sljit_u32)--/* OR IMMEDIATE */-SLJIT_S390X_RILA(oilf,  0xc00d00000000, sljit_u32)--#undef SLJIT_S390X_RILA--/* RX-a form instructions */-#define SLJIT_S390X_RXA(name, pattern) \-SLJIT_S390X_INSTRUCTION(name, sljit_gpr r, sljit_u16 d, sljit_gpr x, sljit_gpr b) \-{ \-	sljit_ins ri, xi, bi, di; \-\-	SLJIT_ASSERT((d & 0xfff) == d); \-	ri = (sljit_ins)(r & 0xf) << 20; \-	xi = (sljit_ins)(x & 0xf) << 16; \-	bi = (sljit_ins)(b & 0xf) << 12; \-	di = (sljit_ins)(d & 0xfff); \-\-	return (pattern) | ri | xi | bi | di; \-}--/* ADD */-SLJIT_S390X_RXA(a,   0x5a000000)--/* ADD LOGICAL */-SLJIT_S390X_RXA(al,  0x5e000000)--/* AND */-SLJIT_S390X_RXA(n,   0x54000000)--/* EXCLUSIVE OR */-SLJIT_S390X_RXA(x,   0x57000000)--/* LOAD */-SLJIT_S390X_RXA(l,   0x58000000)--/* LOAD ADDRESS */-SLJIT_S390X_RXA(la,  0x41000000)--/* LOAD HALFWORD */-SLJIT_S390X_RXA(lh,  0x48000000)--/* MULTIPLY SINGLE */-SLJIT_S390X_RXA(ms,  0x71000000)--/* OR */-SLJIT_S390X_RXA(o,   0x56000000)--/* STORE */-SLJIT_S390X_RXA(st,  0x50000000)--/* STORE CHARACTER */-SLJIT_S390X_RXA(stc, 0x42000000)--/* STORE HALFWORD */-SLJIT_S390X_RXA(sth, 0x40000000)--/* SUBTRACT */-SLJIT_S390X_RXA(s,   0x5b000000)--/* SUBTRACT LOGICAL */-SLJIT_S390X_RXA(sl,  0x5f000000)--#undef SLJIT_S390X_RXA--/* RXY-a instructions */-#define SLJIT_S390X_RXYA(name, pattern, cond) \-SLJIT_S390X_INSTRUCTION(name, sljit_gpr r, sljit_s32 d, sljit_gpr x, sljit_gpr b) \-{ \-	sljit_ins ri, xi, bi, di; \-\-	SLJIT_ASSERT(cond); \-	ri = (sljit_ins)(r & 0xf) << 36; \-	xi = (sljit_ins)(x & 0xf) << 32; \-	bi = (sljit_ins)(b & 0xf) << 28; \-	di = (sljit_ins)disp_s20(d) << 8; \-\-	return (pattern) | ri | xi | bi | di; \-}--/* ADD */-SLJIT_S390X_RXYA(ay,    0xe3000000005a, have_ldisp())-SLJIT_S390X_RXYA(ag,    0xe30000000008, 1)--/* ADD LOGICAL */-SLJIT_S390X_RXYA(aly,   0xe3000000005e, have_ldisp())-SLJIT_S390X_RXYA(alg,   0xe3000000000a, 1)--/* ADD LOGICAL WITH CARRY */-SLJIT_S390X_RXYA(alc,   0xe30000000098, 1)-SLJIT_S390X_RXYA(alcg,  0xe30000000088, 1)--/* AND */-SLJIT_S390X_RXYA(ny,    0xe30000000054, have_ldisp())-SLJIT_S390X_RXYA(ng,    0xe30000000080, 1)--/* EXCLUSIVE OR */-SLJIT_S390X_RXYA(xy,    0xe30000000057, have_ldisp())-SLJIT_S390X_RXYA(xg,    0xe30000000082, 1)--/* LOAD */-SLJIT_S390X_RXYA(ly,    0xe30000000058, have_ldisp())-SLJIT_S390X_RXYA(lg,    0xe30000000004, 1)-SLJIT_S390X_RXYA(lgf,   0xe30000000014, 1)--/* LOAD BYTE */-SLJIT_S390X_RXYA(lb,    0xe30000000076, have_ldisp())-SLJIT_S390X_RXYA(lgb,   0xe30000000077, have_ldisp())--/* LOAD HALFWORD */-SLJIT_S390X_RXYA(lhy,   0xe30000000078, have_ldisp())-SLJIT_S390X_RXYA(lgh,   0xe30000000015, 1)--/* LOAD LOGICAL */-SLJIT_S390X_RXYA(llgf,  0xe30000000016, 1)--/* LOAD LOGICAL CHARACTER */-SLJIT_S390X_RXYA(llc,   0xe30000000094, have_eimm())-SLJIT_S390X_RXYA(llgc,  0xe30000000090, 1)--/* LOAD LOGICAL HALFWORD */-SLJIT_S390X_RXYA(llh,   0xe30000000095, have_eimm())-SLJIT_S390X_RXYA(llgh,  0xe30000000091, 1)--/* MULTIPLY SINGLE */-SLJIT_S390X_RXYA(msy,   0xe30000000051, have_ldisp())-SLJIT_S390X_RXYA(msg,   0xe3000000000c, 1)--/* OR */-SLJIT_S390X_RXYA(oy,    0xe30000000056, have_ldisp())-SLJIT_S390X_RXYA(og,    0xe30000000081, 1)--/* STORE */-SLJIT_S390X_RXYA(sty,   0xe30000000050, have_ldisp())-SLJIT_S390X_RXYA(stg,   0xe30000000024, 1)--/* STORE CHARACTER */-SLJIT_S390X_RXYA(stcy,  0xe30000000072, have_ldisp())--/* STORE HALFWORD */-SLJIT_S390X_RXYA(sthy,  0xe30000000070, have_ldisp())--/* SUBTRACT */-SLJIT_S390X_RXYA(sy,    0xe3000000005b, have_ldisp())-SLJIT_S390X_RXYA(sg,    0xe30000000009, 1)--/* SUBTRACT LOGICAL */-SLJIT_S390X_RXYA(sly,   0xe3000000005f, have_ldisp())-SLJIT_S390X_RXYA(slg,   0xe3000000000b, 1)--/* SUBTRACT LOGICAL WITH BORROW */-SLJIT_S390X_RXYA(slb,   0xe30000000099, 1)-SLJIT_S390X_RXYA(slbg,  0xe30000000089, 1)--#undef SLJIT_S390X_RXYA--/* RS-a instructions */-#define SLJIT_S390X_RSA(name, pattern) \-SLJIT_S390X_INSTRUCTION(name, sljit_gpr reg, sljit_sw d, sljit_gpr b) \-{ \-	sljit_ins r1 = (sljit_ins)(reg & 0xf) << 20; \-	sljit_ins b2 = (sljit_ins)(b & 0xf) << 12; \-	sljit_ins d2 = (sljit_ins)(d & 0xfff); \-	return (pattern) | r1 | b2 | d2; \-}--/* SHIFT LEFT SINGLE LOGICAL */-SLJIT_S390X_RSA(sll, 0x89000000)--/* SHIFT RIGHT SINGLE */-SLJIT_S390X_RSA(sra, 0x8a000000)--/* SHIFT RIGHT SINGLE LOGICAL */-SLJIT_S390X_RSA(srl, 0x88000000)--#undef SLJIT_S390X_RSA--/* RSY-a instructions */-#define SLJIT_S390X_RSYA(name, pattern, cond) \-SLJIT_S390X_INSTRUCTION(name, sljit_gpr dst, sljit_gpr src, sljit_sw d, sljit_gpr b) \-{ \-	sljit_ins r1, r3, b2, d2; \-\-	SLJIT_ASSERT(cond); \-	r1 = (sljit_ins)(dst & 0xf) << 36; \-	r3 = (sljit_ins)(src & 0xf) << 32; \-	b2 = (sljit_ins)(b & 0xf) << 28; \-	d2 = (sljit_ins)disp_s20(d) << 8; \-\-	return (pattern) | r1 | r3 | b2 | d2; \-}--/* LOAD MULTIPLE */-SLJIT_S390X_RSYA(lmg,   0xeb0000000004, 1)--/* SHIFT LEFT LOGICAL */-SLJIT_S390X_RSYA(sllg,  0xeb000000000d, 1)--/* SHIFT RIGHT SINGLE */-SLJIT_S390X_RSYA(srag,  0xeb000000000a, 1)--/* SHIFT RIGHT SINGLE LOGICAL */-SLJIT_S390X_RSYA(srlg,  0xeb000000000c, 1)--/* STORE MULTIPLE */-SLJIT_S390X_RSYA(stmg,  0xeb0000000024, 1)--#undef SLJIT_S390X_RSYA--/* RIE-f instructions (require general-instructions-extension facility) */-#define SLJIT_S390X_RIEF(name, pattern) \-SLJIT_S390X_INSTRUCTION(name, sljit_gpr dst, sljit_gpr src, sljit_u8 start, sljit_u8 end, sljit_u8 rot) \-{ \-	sljit_ins r1, r2, i3, i4, i5; \-\-	SLJIT_ASSERT(have_genext()); \-	r1 = (sljit_ins)(dst & 0xf) << 36; \-	r2 = (sljit_ins)(src & 0xf) << 32; \-	i3 = (sljit_ins)start << 24; \-	i4 = (sljit_ins)end << 16; \-	i5 = (sljit_ins)rot << 8; \-\-	return (pattern) | r1 | r2 | i3 | i4 | i5; \-}--/* ROTATE THEN AND SELECTED BITS */-/* SLJIT_S390X_RIEF(rnsbg,  0xec0000000054) */--/* ROTATE THEN EXCLUSIVE OR SELECTED BITS */-/* SLJIT_S390X_RIEF(rxsbg,  0xec0000000057) */--/* ROTATE THEN OR SELECTED BITS */-SLJIT_S390X_RIEF(rosbg,  0xec0000000056)--/* ROTATE THEN INSERT SELECTED BITS */-/* SLJIT_S390X_RIEF(risbg,  0xec0000000055) */-/* SLJIT_S390X_RIEF(risbgn, 0xec0000000059) */--/* ROTATE THEN INSERT SELECTED BITS HIGH */-SLJIT_S390X_RIEF(risbhg, 0xec000000005d)--/* ROTATE THEN INSERT SELECTED BITS LOW */-/* SLJIT_S390X_RIEF(risblg, 0xec0000000051) */--#undef SLJIT_S390X_RIEF--/* RRF-a instructions */-#define SLJIT_S390X_RRFA(name, pattern, cond) \-SLJIT_S390X_INSTRUCTION(name, sljit_gpr dst, sljit_gpr src1, sljit_gpr src2) \-{ \-	sljit_ins r1, r2, r3; \-\-	SLJIT_ASSERT(cond); \-	r1 = (sljit_ins)(dst & 0xf) << 4; \-	r2 = (sljit_ins)(src1 & 0xf); \-	r3 = (sljit_ins)(src2 & 0xf) << 12; \-\-	return (pattern) | r3 | r1 | r2; \-}--/* MULTIPLY */-SLJIT_S390X_RRFA(msrkc,  0xb9fd0000, have_misc2())-SLJIT_S390X_RRFA(msgrkc, 0xb9ed0000, have_misc2())--#undef SLJIT_S390X_RRFA--/* RRF-c instructions (require load/store-on-condition 1 facility) */-#define SLJIT_S390X_RRFC(name, pattern) \-SLJIT_S390X_INSTRUCTION(name, sljit_gpr dst, sljit_gpr src, sljit_uw mask) \-{ \-	sljit_ins r1, r2, m3; \-\-	SLJIT_ASSERT(have_lscond1()); \-	r1 = (sljit_ins)(dst & 0xf) << 4; \-	r2 = (sljit_ins)(src & 0xf); \-	m3 = (sljit_ins)(mask & 0xf) << 12; \-\-	return (pattern) | m3 | r1 | r2; \-}--/* LOAD HALFWORD IMMEDIATE ON CONDITION */-SLJIT_S390X_RRFC(locr,  0xb9f20000)-SLJIT_S390X_RRFC(locgr, 0xb9e20000)--#undef SLJIT_S390X_RRFC--/* RIE-g instructions (require load/store-on-condition 2 facility) */-#define SLJIT_S390X_RIEG(name, pattern) \-SLJIT_S390X_INSTRUCTION(name, sljit_gpr reg, sljit_sw imm, sljit_uw mask) \-{ \-	sljit_ins r1, m3, i2; \-\-	SLJIT_ASSERT(have_lscond2()); \-	r1 = (sljit_ins)(reg & 0xf) << 36; \-	m3 = (sljit_ins)(mask & 0xf) << 32; \-	i2 = (sljit_ins)(imm & 0xffffL) << 16; \-\-	return (pattern) | r1 | m3 | i2; \-}--/* LOAD HALFWORD IMMEDIATE ON CONDITION */-SLJIT_S390X_RIEG(lochi,  0xec0000000042)-SLJIT_S390X_RIEG(locghi, 0xec0000000046)--#undef SLJIT_S390X_RIEG--#define SLJIT_S390X_RILB(name, pattern, cond) \-SLJIT_S390X_INSTRUCTION(name, sljit_gpr reg, sljit_sw ri) \-{ \-	sljit_ins r1, ri2; \-\-	SLJIT_ASSERT(cond); \-	r1 = (sljit_ins)(reg & 0xf) << 36; \-	ri2 = (sljit_ins)(ri & 0xffffffff); \-\-	return (pattern) | r1 | ri2; \-}--/* BRANCH RELATIVE AND SAVE LONG */-SLJIT_S390X_RILB(brasl, 0xc00500000000, 1)--/* LOAD ADDRESS RELATIVE LONG */-SLJIT_S390X_RILB(larl,  0xc00000000000, 1)--/* LOAD RELATIVE LONG */-SLJIT_S390X_RILB(lgrl,  0xc40800000000, have_genext())--#undef SLJIT_S390X_RILB--SLJIT_S390X_INSTRUCTION(br, sljit_gpr target)-{-	return 0x07f0 | target;-}--SLJIT_S390X_INSTRUCTION(brcl, sljit_uw mask, sljit_sw target)-{-	sljit_ins m1 = (sljit_ins)(mask & 0xf) << 36;-	sljit_ins ri2 = (sljit_ins)target & 0xffffffff;-	return 0xc00400000000L | m1 | ri2;-}--SLJIT_S390X_INSTRUCTION(flogr, sljit_gpr dst, sljit_gpr src)-{-	sljit_ins r1 = ((sljit_ins)dst & 0xf) << 8;-	sljit_ins r2 = ((sljit_ins)src & 0xf);-	SLJIT_ASSERT(have_eimm());-	return 0xb9830000 | r1 | r2;-}--/* INSERT PROGRAM MASK */-SLJIT_S390X_INSTRUCTION(ipm, sljit_gpr dst)-{-	return 0xb2220000 | ((sljit_ins)(dst & 0xf) << 4);-}--/* ROTATE THEN INSERT SELECTED BITS HIGH (ZERO) */-SLJIT_S390X_INSTRUCTION(risbhgz, sljit_gpr dst, sljit_gpr src, sljit_u8 start, sljit_u8 end, sljit_u8 rot)-{-	return risbhg(dst, src, start, 0x8 | end, rot);-}--#undef SLJIT_S390X_INSTRUCTION--/* load condition code as needed to match type */-static sljit_s32 push_load_cc(struct sljit_compiler *compiler, sljit_s32 type)-{-	type &= ~SLJIT_I32_OP;-	switch (type) {-	case SLJIT_ZERO:-	case SLJIT_NOT_ZERO:-		return push_inst(compiler, cih(flag_r, 0));-		break;-	default:-		return push_inst(compiler, tmlh(flag_r, 0x3000));-		break;-	}-	return SLJIT_SUCCESS;-}--static sljit_s32 push_store_zero_flag(struct sljit_compiler *compiler, sljit_s32 op, sljit_gpr source)-{-	/* insert low 32-bits into high 32-bits of flag register */-	FAIL_IF(push_inst(compiler, risbhgz(flag_r, source, 0, 31, 32)));-	if (!(op & SLJIT_I32_OP)) {-		/* OR high 32-bits with high 32-bits of flag register */-		return push_inst(compiler, rosbg(flag_r, source, 0, 31, 0));-	}-	return SLJIT_SUCCESS;-}--/* load 64-bit immediate into register without clobbering flags */-static sljit_s32 push_load_imm_inst(struct sljit_compiler *compiler, sljit_gpr target, sljit_sw v)-{-	/* 4 byte instructions */-	if (is_s16(v))-		return push_inst(compiler, lghi(target, (sljit_s16)v));--	if ((sljit_uw)v == (v & 0x000000000000ffffU))-		return push_inst(compiler, llill(target, (sljit_u16)v));--	if ((sljit_uw)v == (v & 0x00000000ffff0000U))-		return push_inst(compiler, llilh(target, (sljit_u16)(v >> 16)));--	if ((sljit_uw)v == (v & 0x0000ffff00000000U))-		return push_inst(compiler, llihl(target, (sljit_u16)(v >> 32)));--	if ((sljit_uw)v == (v & 0xffff000000000000U))-		return push_inst(compiler, llihh(target, (sljit_u16)(v >> 48)));--	/* 6 byte instructions (requires extended immediate facility) */-	if (have_eimm()) {-		if (is_s32(v))-			return push_inst(compiler, lgfi(target, (sljit_s32)v));--		if ((sljit_uw)v == (v & 0x00000000ffffffffU))-			return push_inst(compiler, llilf(target, (sljit_u32)v));--		if ((sljit_uw)v == (v & 0xffffffff00000000U))-			return push_inst(compiler, llihf(target, (sljit_u32)(v >> 32)));--		FAIL_IF(push_inst(compiler, llilf(target, (sljit_u32)v)));-		return push_inst(compiler, iihf(target, (sljit_u32)(v >> 32)));-	}-	/* TODO(mundaym): instruction sequences that don't use extended immediates */-	abort();-}--struct addr {-	sljit_gpr base;-	sljit_gpr index;-	sljit_sw  offset;-};--/* transform memory operand into D(X,B) form with a signed 20-bit offset */-static sljit_s32 make_addr_bxy(struct sljit_compiler *compiler,-	struct addr *addr, sljit_s32 mem, sljit_sw off,-	sljit_gpr tmp /* clobbered, must not be r0 */)-{-	sljit_gpr base = r0;-	sljit_gpr index = r0;--	SLJIT_ASSERT(tmp != r0);-	if (mem & REG_MASK)-		base = gpr(mem & REG_MASK);--	if (mem & OFFS_REG_MASK) {-		index = gpr(OFFS_REG(mem));-		if (off != 0) {-			/* shift and put the result into tmp */-			SLJIT_ASSERT(0 <= off && off < 64);-			FAIL_IF(push_inst(compiler, sllg(tmp, index, off, 0)));-			index = tmp;-			off = 0; /* clear offset */-		}-	}-	else if (!is_s20(off)) {-		FAIL_IF(push_load_imm_inst(compiler, tmp, off));-		index = tmp;-		off = 0; /* clear offset */-	}-	addr->base = base;-	addr->index = index;-	addr->offset = off;-	return SLJIT_SUCCESS;-}--/* transform memory operand into D(X,B) form with an unsigned 12-bit offset */-static sljit_s32 make_addr_bx(struct sljit_compiler *compiler,-	struct addr *addr, sljit_s32 mem, sljit_sw off,-	sljit_gpr tmp /* clobbered, must not be r0 */)-{-	sljit_gpr base = r0;-	sljit_gpr index = r0;--	SLJIT_ASSERT(tmp != r0);-	if (mem & REG_MASK)-		base = gpr(mem & REG_MASK);--	if (mem & OFFS_REG_MASK) {-		index = gpr(OFFS_REG(mem));-		if (off != 0) {-			/* shift and put the result into tmp */-			SLJIT_ASSERT(0 <= off && off < 64);-			FAIL_IF(push_inst(compiler, sllg(tmp, index, off, 0)));-			index = tmp;-			off = 0; /* clear offset */-		}-	}-	else if (!is_u12(off)) {-		FAIL_IF(push_load_imm_inst(compiler, tmp, off));-		index = tmp;-		off = 0; /* clear offset */-	}-	addr->base = base;-	addr->index = index;-	addr->offset = off;-	return SLJIT_SUCCESS;-}--#define EVAL(op, r, addr) op(r, addr.offset, addr.index, addr.base)-#define WHEN(cond, r, i1, i2, addr) \-	(cond) ? EVAL(i1, r, addr) : EVAL(i2, r, addr)--static sljit_s32 load_word(struct sljit_compiler *compiler, sljit_gpr dst,-		sljit_s32 src, sljit_sw srcw,-		sljit_gpr tmp /* clobbered */, sljit_s32 is_32bit)-{-	struct addr addr;-	sljit_ins ins;--	SLJIT_ASSERT(src & SLJIT_MEM);-	if (have_ldisp() || !is_32bit)-		FAIL_IF(make_addr_bxy(compiler, &addr, src, srcw, tmp));-	else-		FAIL_IF(make_addr_bx(compiler, &addr, src, srcw, tmp));--	if (is_32bit)-		ins = WHEN(is_u12(addr.offset), dst, l, ly, addr);-	else-		ins = lg(dst, addr.offset, addr.index, addr.base);--	return push_inst(compiler, ins);-}--static sljit_s32 store_word(struct sljit_compiler *compiler, sljit_gpr src,-		sljit_s32 dst, sljit_sw dstw,-		sljit_gpr tmp /* clobbered */, sljit_s32 is_32bit)-{-	struct addr addr;-	sljit_ins ins;--	SLJIT_ASSERT(dst & SLJIT_MEM);-	if (have_ldisp() || !is_32bit)-		FAIL_IF(make_addr_bxy(compiler, &addr, dst, dstw, tmp));-	else-		FAIL_IF(make_addr_bx(compiler, &addr, dst, dstw, tmp));--	if (is_32bit)-		ins = WHEN(is_u12(addr.offset), src, st, sty, addr);-	else-		ins = stg(src, addr.offset, addr.index, addr.base);--	return push_inst(compiler, ins);-}--#undef WHEN--SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compiler)-{-	struct sljit_label *label;-	struct sljit_jump *jump;-	struct sljit_s390x_const *const_;-	struct sljit_put_label *put_label;-	sljit_sw executable_offset;-	sljit_uw ins_size = 0; /* instructions */-	sljit_uw pool_size = 0; /* literal pool */-	sljit_uw pad_size;-	sljit_uw i, j = 0;-	struct sljit_memory_fragment *buf;-	void *code, *code_ptr;-	sljit_uw *pool, *pool_ptr;--	sljit_uw source;-	sljit_sw offset; /* TODO(carenas): only need 32 bit */--	CHECK_ERROR_PTR();-	CHECK_PTR(check_sljit_generate_code(compiler));-	reverse_buf(compiler);--	/* branch handling */-	label = compiler->labels;-	jump = compiler->jumps;-	put_label = compiler->put_labels;--	/* TODO(carenas): compiler->executable_size could be calculated-         *                before to avoid the following loop (except for-         *                pool_size)-         */-	/* calculate the size of the code */-	for (buf = compiler->buf; buf != NULL; buf = buf->next) {-		sljit_uw len = buf->used_size / sizeof(sljit_ins);-		sljit_ins *ibuf = (sljit_ins *)buf->memory;-		for (i = 0; i < len; ++i, ++j) {-			sljit_ins ins = ibuf[i];--			/* TODO(carenas): instruction tag vs size/addr == j-			 * using instruction tags for const is creative-			 * but unlike all other architectures, and is not-			 * done consistently for all other objects.-			 * This might need reviewing later.-			 */-			if (ins & sljit_ins_const) {-				pool_size += sizeof(*pool);-				ins &= ~sljit_ins_const;-			}-			if (label && label->size == j) {-				label->size = ins_size;-				label = label->next;-			}-			if (jump && jump->addr == j) {-				if ((jump->flags & SLJIT_REWRITABLE_JUMP) || (jump->flags & JUMP_ADDR)) {-					/* encoded: */-					/*   brasl %r14, <rel_addr> (or brcl <mask>, <rel_addr>) */-					/* replace with: */-					/*   lgrl %r1, <pool_addr> */-					/*   bras %r14, %r1 (or bcr <mask>, %r1) */-					pool_size += sizeof(*pool);-					ins_size += 2;-				}-				jump = jump->next;-			}-			if (put_label && put_label->addr == j) {-				pool_size += sizeof(*pool);-				put_label = put_label->next;-			}-			ins_size += sizeof_ins(ins);-		}-	}--	/* emit trailing label */-	if (label && label->size == j) {-		label->size = ins_size;-		label = label->next;-	}--	SLJIT_ASSERT(!label);-	SLJIT_ASSERT(!jump);-	SLJIT_ASSERT(!put_label);--	/* pad code size to 8 bytes so is accessible with half word offsets */-	/* the literal pool needs to be doubleword aligned */-	pad_size = ((ins_size + 7UL) & ~7UL) - ins_size;-	SLJIT_ASSERT(pad_size < 8UL);--	/* allocate target buffer */-	code = SLJIT_MALLOC_EXEC(ins_size + pad_size + pool_size,-					compiler->exec_allocator_data);-	PTR_FAIL_WITH_EXEC_IF(code);-	code_ptr = code;-	executable_offset = SLJIT_EXEC_OFFSET(code);--	/* TODO(carenas): pool is optional, and the ABI recommends it to-         *                be created before the function code, instead of-         *                globally; if generated code is too big could-         *                need offsets bigger than 32bit words and asser()-         */-	pool = (sljit_uw *)((sljit_uw)code + ins_size + pad_size);-	pool_ptr = pool;-	const_ = (struct sljit_s390x_const *)compiler->consts;--	/* update label addresses */-	label = compiler->labels;-	while (label) {-		label->addr = (sljit_uw)SLJIT_ADD_EXEC_OFFSET(-			(sljit_uw)code_ptr + label->size, executable_offset);-		label = label->next;-	}--	/* reset jumps */-	jump = compiler->jumps;-	put_label = compiler->put_labels;--	/* emit the code */-	j = 0;-	for (buf = compiler->buf; buf != NULL; buf = buf->next) {-		sljit_uw len = buf->used_size / sizeof(sljit_ins);-		sljit_ins *ibuf = (sljit_ins *)buf->memory;-		for (i = 0; i < len; ++i, ++j) {-			sljit_ins ins = ibuf[i];-			if (ins & sljit_ins_const) {-				/* clear the const tag */-				ins &= ~sljit_ins_const;--				/* update instruction with relative address of constant */-				source = (sljit_uw)code_ptr;-				offset = (sljit_uw)pool_ptr - source;-				SLJIT_ASSERT(!(offset & 1));-				offset >>= 1; /* halfword (not byte) offset */-				SLJIT_ASSERT(is_s32(offset));-				ins |= (sljit_ins)offset & 0xffffffff;--				/* update address */-				const_->const_.addr = (sljit_uw)pool_ptr;--				/* store initial value into pool and update pool address */-				*(pool_ptr++) = const_->init_value;--				/* move to next constant */-				const_ = (struct sljit_s390x_const *)const_->const_.next;-			}-			if (jump && jump->addr == j) {-				sljit_sw target = (jump->flags & JUMP_LABEL) ? jump->u.label->addr : jump->u.target;-				if ((jump->flags & SLJIT_REWRITABLE_JUMP) || (jump->flags & JUMP_ADDR)) {-					jump->addr = (sljit_uw)pool_ptr;--					/* load address into tmp1 */-					source = (sljit_uw)SLJIT_ADD_EXEC_OFFSET(code_ptr, executable_offset);-					offset = (sljit_uw)SLJIT_ADD_EXEC_OFFSET(pool_ptr, executable_offset) - source;-					SLJIT_ASSERT(!(offset & 1));-					offset >>= 1;-					SLJIT_ASSERT(is_s32(offset));-					encode_inst(&code_ptr,-						lgrl(tmp1, offset & 0xffffffff));--					/* store jump target into pool and update pool address */-					*(pool_ptr++) = target;--					/* branch to tmp1 */-					sljit_ins op = (ins >> 32) & 0xf;-					sljit_ins arg = (ins >> 36) & 0xf;-					switch (op) {-					case 4: /* brcl -> bcr */-						ins = bcr(arg, tmp1);-						break;-					case 5: /* brasl -> basr */-						ins = basr(arg, tmp1);-						break;-					default:-						abort();-					}-				}-				else {-					jump->addr = (sljit_uw)code_ptr + 2;-					source = (sljit_uw)SLJIT_ADD_EXEC_OFFSET(code_ptr, executable_offset);-					offset = target - source;--					/* offset must be halfword aligned */-					SLJIT_ASSERT(!(offset & 1));-					offset >>= 1;-					SLJIT_ASSERT(is_s32(offset)); /* TODO(mundaym): handle arbitrary offsets */--					/* patch jump target */-					ins |= (sljit_ins)offset & 0xffffffff;-				}-				jump = jump->next;-			}-			if (put_label && put_label->addr == j) {-				source = (sljit_uw)SLJIT_ADD_EXEC_OFFSET(code_ptr, executable_offset);--				SLJIT_ASSERT(put_label->label);-				put_label->addr = (sljit_uw)code_ptr;--				/* store target into pool */-				*pool_ptr = put_label->label->addr;-				offset = (sljit_uw)SLJIT_ADD_EXEC_OFFSET(pool_ptr, executable_offset) - source;-				pool_ptr++;--				SLJIT_ASSERT(!(offset & 1));-				offset >>= 1;-				SLJIT_ASSERT(is_s32(offset));-				ins |= (sljit_ins)offset & 0xffffffff;--				put_label = put_label->next;-			}-			encode_inst(&code_ptr, ins);-		}-	}-	SLJIT_ASSERT((sljit_u8 *)code + ins_size == code_ptr);-	SLJIT_ASSERT((sljit_u8 *)pool + pool_size == (sljit_u8 *)pool_ptr);--	compiler->error = SLJIT_ERR_COMPILED;-	compiler->executable_offset = executable_offset;-	compiler->executable_size = ins_size;-	code = SLJIT_ADD_EXEC_OFFSET(code, executable_offset);-	code_ptr = SLJIT_ADD_EXEC_OFFSET(code_ptr, executable_offset);-	SLJIT_CACHE_FLUSH(code, code_ptr);-	SLJIT_UPDATE_WX_FLAGS(code, code_ptr, 1);-	return code;-}--SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_has_cpu_feature(sljit_s32 feature_type)-{-	/* TODO(mundaym): implement all */-	switch (feature_type) {-	case SLJIT_HAS_CLZ:-		return have_eimm() ? 1 : 0; /* FLOGR instruction */-	case SLJIT_HAS_CMOV:-		return have_lscond1() ? 1 : 0;-	case SLJIT_HAS_FPU:-		return 0;-	}-	return 0;-}--/* --------------------------------------------------------------------- */-/*  Entry, exit                                                          */-/* --------------------------------------------------------------------- */--SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_enter(struct sljit_compiler *compiler,-	sljit_s32 options, sljit_s32 arg_types, sljit_s32 scratches, sljit_s32 saveds,-	sljit_s32 fscratches, sljit_s32 fsaveds, sljit_s32 local_size)-{-	sljit_s32 args = get_arg_count(arg_types);-	sljit_sw frame_size;--	CHECK_ERROR();-	CHECK(check_sljit_emit_enter(compiler, options, arg_types, scratches, saveds, fscratches, fsaveds, local_size));-	set_emit_enter(compiler, options, arg_types, scratches, saveds, fscratches, fsaveds, local_size);--	/* saved registers go in callee allocated save area */-	compiler->local_size = (local_size + 0xf) & ~0xf;-	frame_size = compiler->local_size + SLJIT_S390X_DEFAULT_STACK_FRAME_SIZE;--	FAIL_IF(push_inst(compiler, stmg(r6, r15, r6 * sizeof(sljit_sw), r15))); /* save registers TODO(MGM): optimize */-	if (frame_size != 0) {-		if (is_s16(-frame_size))-			FAIL_IF(push_inst(compiler, aghi(r15, -((sljit_s16)frame_size))));-		else if (is_s32(-frame_size))-			FAIL_IF(push_inst(compiler, agfi(r15, -((sljit_s32)frame_size))));-		else {-			FAIL_IF(push_load_imm_inst(compiler, tmp1, -frame_size));-			FAIL_IF(push_inst(compiler, la(r15, 0, tmp1, r15)));-		}-	}--	if (args >= 1)-		FAIL_IF(push_inst(compiler, lgr(gpr(SLJIT_S0), gpr(SLJIT_R0))));-	if (args >= 2)-		FAIL_IF(push_inst(compiler, lgr(gpr(SLJIT_S1), gpr(SLJIT_R1))));-	if (args >= 3)-		FAIL_IF(push_inst(compiler, lgr(gpr(SLJIT_S2), gpr(SLJIT_R2))));-	SLJIT_ASSERT(args < 4);--	return SLJIT_SUCCESS;-}--SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_set_context(struct sljit_compiler *compiler,-	sljit_s32 options, sljit_s32 arg_types, sljit_s32 scratches, sljit_s32 saveds,-	sljit_s32 fscratches, sljit_s32 fsaveds, sljit_s32 local_size)-{-	CHECK_ERROR();-	CHECK(check_sljit_set_context(compiler, options, arg_types, scratches, saveds, fscratches, fsaveds, local_size));-	set_set_context(compiler, options, arg_types, scratches, saveds, fscratches, fsaveds, local_size);--	/* TODO(mundaym): stack space for saved floating point registers */-	compiler->local_size = (local_size + 0xf) & ~0xf;-	return SLJIT_SUCCESS;-}--SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_return(struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 src, sljit_sw srcw)-{-	sljit_sw size;-	sljit_gpr end;--	CHECK_ERROR();-	CHECK(check_sljit_emit_return(compiler, op, src, srcw));--	FAIL_IF(emit_mov_before_return(compiler, op, src, srcw));--	size = compiler->local_size + SLJIT_S390X_DEFAULT_STACK_FRAME_SIZE + (r6 * sizeof(sljit_sw));-	if (!is_s20(size)) {-		FAIL_IF(push_load_imm_inst(compiler, tmp1, compiler->local_size + SLJIT_S390X_DEFAULT_STACK_FRAME_SIZE));-		FAIL_IF(push_inst(compiler, la(r15, 0, tmp1, r15)));-		size = r6 * sizeof(sljit_sw);-		end = r14; /* r15 has been restored already */-	}-	else-		end = r15;--	FAIL_IF(push_inst(compiler, lmg(r6, end, size, r15))); /* restore registers TODO(MGM): optimize */-	FAIL_IF(push_inst(compiler, br(r14))); /* return */--	return SLJIT_SUCCESS;-}--/* --------------------------------------------------------------------- */-/*  Operators                                                            */-/* --------------------------------------------------------------------- */--SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op0(struct sljit_compiler *compiler, sljit_s32 op)-{-	sljit_gpr arg0 = gpr(SLJIT_R0);-	sljit_gpr arg1 = gpr(SLJIT_R1);--	CHECK_ERROR();-	CHECK(check_sljit_emit_op0(compiler, op));--	op = GET_OPCODE(op) | (op & SLJIT_I32_OP);-	switch (op) {-	case SLJIT_BREAKPOINT:-		/* The following invalid instruction is emitted by gdb. */-		return push_inst(compiler, 0x0001 /* 2-byte trap */);-	case SLJIT_NOP:-		return push_inst(compiler, 0x0700 /* 2-byte nop */);-	case SLJIT_LMUL_UW:-		FAIL_IF(push_inst(compiler, mlgr(arg0, arg0)));-		break;-	case SLJIT_LMUL_SW:-		/* signed multiplication from: */-		/* Hacker's Delight, Second Edition: Chapter 8-3. */-		FAIL_IF(push_inst(compiler, srag(tmp0, arg0, 63, 0)));-		FAIL_IF(push_inst(compiler, srag(tmp1, arg1, 63, 0)));-		FAIL_IF(push_inst(compiler, ngr(tmp0, arg1)));-		FAIL_IF(push_inst(compiler, ngr(tmp1, arg0)));--		/* unsigned multiplication */-		FAIL_IF(push_inst(compiler, mlgr(arg0, arg0)));--		FAIL_IF(push_inst(compiler, sgr(arg0, tmp0)));-		FAIL_IF(push_inst(compiler, sgr(arg0, tmp1)));-		break;-	case SLJIT_DIV_U32:-	case SLJIT_DIVMOD_U32:-		FAIL_IF(push_inst(compiler, lhi(tmp0, 0)));-		FAIL_IF(push_inst(compiler, lr(tmp1, arg0)));-		FAIL_IF(push_inst(compiler, dlr(tmp0, arg1)));-		FAIL_IF(push_inst(compiler, lr(arg0, tmp1))); /* quotient */-		if (op == SLJIT_DIVMOD_U32)-			return push_inst(compiler, lr(arg1, tmp0)); /* remainder */--		return SLJIT_SUCCESS;-	case SLJIT_DIV_S32:-	case SLJIT_DIVMOD_S32:-		FAIL_IF(push_inst(compiler, lhi(tmp0, 0)));-		FAIL_IF(push_inst(compiler, lr(tmp1, arg0)));-		FAIL_IF(push_inst(compiler, dr(tmp0, arg1)));-		FAIL_IF(push_inst(compiler, lr(arg0, tmp1))); /* quotient */-		if (op == SLJIT_DIVMOD_S32)-			return push_inst(compiler, lr(arg1, tmp0)); /* remainder */--		return SLJIT_SUCCESS;-	case SLJIT_DIV_UW:-	case SLJIT_DIVMOD_UW:-		FAIL_IF(push_inst(compiler, lghi(tmp0, 0)));-		FAIL_IF(push_inst(compiler, lgr(tmp1, arg0)));-		FAIL_IF(push_inst(compiler, dlgr(tmp0, arg1)));-		FAIL_IF(push_inst(compiler, lgr(arg0, tmp1))); /* quotient */-		if (op == SLJIT_DIVMOD_UW)-			return push_inst(compiler, lgr(arg1, tmp0)); /* remainder */--		return SLJIT_SUCCESS;-	case SLJIT_DIV_SW:-	case SLJIT_DIVMOD_SW:-		FAIL_IF(push_inst(compiler, lgr(tmp1, arg0)));-		FAIL_IF(push_inst(compiler, dsgr(tmp0, arg1)));-		FAIL_IF(push_inst(compiler, lgr(arg0, tmp1))); /* quotient */-		if (op == SLJIT_DIVMOD_SW)-			return push_inst(compiler, lgr(arg1, tmp0)); /* remainder */--		return SLJIT_SUCCESS;-	case SLJIT_ENDBR:-		return SLJIT_SUCCESS;-	case SLJIT_SKIP_FRAMES_BEFORE_RETURN:-		return SLJIT_SUCCESS;-	default:-		SLJIT_UNREACHABLE();-	}-	/* swap result registers */-	FAIL_IF(push_inst(compiler, lgr(tmp0, arg0)));-	FAIL_IF(push_inst(compiler, lgr(arg0, arg1)));-	return push_inst(compiler, lgr(arg1, tmp0));-}--/* LEVAL will be defined later with different parameters as needed */-#define WHEN2(cond, i1, i2) (cond) ? LEVAL(i1) : LEVAL(i2)--SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compiler, sljit_s32 op,-        sljit_s32 dst, sljit_sw dstw,-        sljit_s32 src, sljit_sw srcw)-{-	sljit_ins ins;-	struct addr mem;-	sljit_gpr dst_r;-	sljit_gpr src_r;-	sljit_s32 opcode = GET_OPCODE(op);--	CHECK_ERROR();-	CHECK(check_sljit_emit_op1(compiler, op, dst, dstw, src, srcw));-	ADJUST_LOCAL_OFFSET(dst, dstw);-	ADJUST_LOCAL_OFFSET(src, srcw);--	if ((dst == SLJIT_UNUSED) && !HAS_FLAGS(op)) {-		/* TODO(carenas): implement prefetch? */-		return SLJIT_SUCCESS;-	}-	if (opcode >= SLJIT_MOV && opcode <= SLJIT_MOV_P) {-		/* LOAD REGISTER */-		if (FAST_IS_REG(dst) && FAST_IS_REG(src)) {-			dst_r = gpr(dst);-			src_r = gpr(src);-			switch (opcode | (op & SLJIT_I32_OP)) {-			/* 32-bit */-			case SLJIT_MOV32_U8:-				ins = llcr(dst_r, src_r);-				break;-			case SLJIT_MOV32_S8:-				ins = lbr(dst_r, src_r);-				break;-			case SLJIT_MOV32_U16:-				ins = llhr(dst_r, src_r);-				break;-			case SLJIT_MOV32_S16:-				ins = lhr(dst_r, src_r);-				break;-			case SLJIT_MOV32:-				ins = lr(dst_r, src_r);-				break;-			/* 64-bit */-			case SLJIT_MOV_U8:-				ins = llgcr(dst_r, src_r);-				break;-			case SLJIT_MOV_S8:-				ins = lgbr(dst_r, src_r);-				break;-			case SLJIT_MOV_U16:-				ins = llghr(dst_r, src_r);-				break;-			case SLJIT_MOV_S16:-				ins = lghr(dst_r, src_r);-				break;-			case SLJIT_MOV_U32:-				ins = llgfr(dst_r, src_r);-				break;-			case SLJIT_MOV_S32:-				ins = lgfr(dst_r, src_r);-				break;-			case SLJIT_MOV:-			case SLJIT_MOV_P:-				ins = lgr(dst_r, src_r);-				break;-			default:-				ins = 0;-				SLJIT_UNREACHABLE();-			}-			FAIL_IF(push_inst(compiler, ins));-			if (HAS_FLAGS(op)) {-				/* only handle zero flag */-				SLJIT_ASSERT(!(op & VARIABLE_FLAG_MASK));-				return push_store_zero_flag(compiler, op, dst_r);-			}-			return SLJIT_SUCCESS;-		}-		/* LOAD IMMEDIATE */-		if (FAST_IS_REG(dst) && (src & SLJIT_IMM)) {-			switch (opcode) {-			case SLJIT_MOV_U8:-				srcw = (sljit_sw)((sljit_u8)(srcw));-				break;-			case SLJIT_MOV_S8:-				srcw = (sljit_sw)((sljit_s8)(srcw));-				break;-			case SLJIT_MOV_U16:-				srcw = (sljit_sw)((sljit_u16)(srcw));-				break;-			case SLJIT_MOV_S16:-				srcw = (sljit_sw)((sljit_s16)(srcw));-				break;-			case SLJIT_MOV_U32:-				srcw = (sljit_sw)((sljit_u32)(srcw));-				break;-			case SLJIT_MOV_S32:-				srcw = (sljit_sw)((sljit_s32)(srcw));-				break;-			}-			return push_load_imm_inst(compiler, gpr(dst), srcw);-		}-		/* LOAD */-		/* TODO(carenas): avoid reg being defined later */-		#define LEVAL(i) EVAL(i, reg, mem)-		if (FAST_IS_REG(dst) && (src & SLJIT_MEM)) {-			sljit_gpr reg = gpr(dst);--			FAIL_IF(make_addr_bxy(compiler, &mem, src, srcw, tmp1));-			/* TODO(carenas): convert all calls below to LEVAL */-			switch (opcode | (op & SLJIT_I32_OP)) {-			case SLJIT_MOV32_U8:-				ins = llc(reg, mem.offset, mem.index, mem.base);-				break;-			case SLJIT_MOV32_S8:-				ins = lb(reg, mem.offset, mem.index, mem.base);-				break;-			case SLJIT_MOV32_U16:-				ins = llh(reg, mem.offset, mem.index, mem.base);-				break;-			case SLJIT_MOV32_S16:-				ins = WHEN2(is_u12(mem.offset), lh, lhy);-				break;-			case SLJIT_MOV32:-				ins = WHEN2(is_u12(mem.offset), l, ly);-				break;-			case SLJIT_MOV_U8:-				ins = LEVAL(llgc);-				break;-			case SLJIT_MOV_S8:-				ins = lgb(reg, mem.offset, mem.index, mem.base);-				break;-			case SLJIT_MOV_U16:-				ins = LEVAL(llgh);-				break;-			case SLJIT_MOV_S16:-				ins = lgh(reg, mem.offset, mem.index, mem.base);-				break;-			case SLJIT_MOV_U32:-				ins = LEVAL(llgf);-				break;-			case SLJIT_MOV_S32:-				ins = lgf(reg, mem.offset, mem.index, mem.base);-				break;-			case SLJIT_MOV_P:-			case SLJIT_MOV:-				ins = lg(reg, mem.offset, mem.index, mem.base);-				break;-			default:-				SLJIT_UNREACHABLE();-			}-			FAIL_IF(push_inst(compiler, ins));-			if (HAS_FLAGS(op)) {-				/* only handle zero flag */-				SLJIT_ASSERT(!(op & VARIABLE_FLAG_MASK));-				return push_store_zero_flag(compiler, op, reg);-			}-			return SLJIT_SUCCESS;-		}-		/* STORE and STORE IMMEDIATE */-		if ((dst & SLJIT_MEM)-			&& (FAST_IS_REG(src) || (src & SLJIT_IMM))) {-			sljit_gpr reg = FAST_IS_REG(src) ? gpr(src) : tmp0;-			if (src & SLJIT_IMM) {-				/* TODO(mundaym): MOVE IMMEDIATE? */-				FAIL_IF(push_load_imm_inst(compiler, reg, srcw));-			}-			struct addr mem;-			FAIL_IF(make_addr_bxy(compiler, &mem, dst, dstw, tmp1));-			switch (opcode) {-			case SLJIT_MOV_U8:-			case SLJIT_MOV_S8:-				return push_inst(compiler,-					WHEN2(is_u12(mem.offset), stc, stcy));-			case SLJIT_MOV_U16:-			case SLJIT_MOV_S16:-				return push_inst(compiler,-					WHEN2(is_u12(mem.offset), sth, sthy));-			case SLJIT_MOV_U32:-			case SLJIT_MOV_S32:-				return push_inst(compiler,-					WHEN2(is_u12(mem.offset), st, sty));-			case SLJIT_MOV_P:-			case SLJIT_MOV:-				FAIL_IF(push_inst(compiler, LEVAL(stg)));-				if (HAS_FLAGS(op)) {-					/* only handle zero flag */-					SLJIT_ASSERT(!(op & VARIABLE_FLAG_MASK));-					return push_store_zero_flag(compiler, op, reg);-				}-				return SLJIT_SUCCESS;-			default:-				SLJIT_UNREACHABLE();-			}-		}-		#undef LEVAL-		/* MOVE CHARACTERS */-		if ((dst & SLJIT_MEM) && (src & SLJIT_MEM)) {-			struct addr mem;-			FAIL_IF(make_addr_bxy(compiler, &mem, src, srcw, tmp1));-			switch (opcode) {-			case SLJIT_MOV_U8:-			case SLJIT_MOV_S8:-				FAIL_IF(push_inst(compiler,-					EVAL(llgc, tmp0, mem)));-				FAIL_IF(make_addr_bxy(compiler, &mem, dst, dstw, tmp1));-				return push_inst(compiler,-					EVAL(stcy, tmp0, mem));-			case SLJIT_MOV_U16:-			case SLJIT_MOV_S16:-				FAIL_IF(push_inst(compiler,-					EVAL(llgh, tmp0, mem)));-				FAIL_IF(make_addr_bxy(compiler, &mem, dst, dstw, tmp1));-				return push_inst(compiler,-					EVAL(sthy, tmp0, mem));-			case SLJIT_MOV_U32:-			case SLJIT_MOV_S32:-				FAIL_IF(push_inst(compiler,-					EVAL(ly, tmp0, mem)));-				FAIL_IF(make_addr_bxy(compiler, &mem, dst, dstw, tmp1));-				return push_inst(compiler,-					EVAL(sty, tmp0, mem));-			case SLJIT_MOV_P:-			case SLJIT_MOV:-				FAIL_IF(push_inst(compiler,-					EVAL(lg, tmp0, mem)));-				FAIL_IF(make_addr_bxy(compiler, &mem, dst, dstw, tmp1));-				FAIL_IF(push_inst(compiler,-					EVAL(stg, tmp0, mem)));-				if (HAS_FLAGS(op)) {-					/* only handle zero flag */-					SLJIT_ASSERT(!(op & VARIABLE_FLAG_MASK));-					return push_store_zero_flag(compiler, op, tmp0);-				}-				return SLJIT_SUCCESS;-			default:-				SLJIT_UNREACHABLE();-			}-		}-		SLJIT_UNREACHABLE();-	}--	SLJIT_ASSERT((src & SLJIT_IMM) == 0); /* no immediates */--	dst_r = SLOW_IS_REG(dst) ? gpr(REG_MASK & dst) : tmp0;-	src_r = FAST_IS_REG(src) ? gpr(REG_MASK & src) : tmp0;-	if (src & SLJIT_MEM)-		FAIL_IF(load_word(compiler, src_r, src, srcw, tmp1, src & SLJIT_I32_OP));--	/* TODO(mundaym): optimize loads and stores */-	switch (opcode | (op & SLJIT_I32_OP)) {-	case SLJIT_NOT:-		/* emulate ~x with x^-1 */-		FAIL_IF(push_load_imm_inst(compiler, tmp1, -1));-		if (src_r != dst_r)-			FAIL_IF(push_inst(compiler, lgr(dst_r, src_r)));--		FAIL_IF(push_inst(compiler, xgr(dst_r, tmp1)));-		break;-	case SLJIT_NOT32:-		/* emulate ~x with x^-1 */-		if (have_eimm())-			FAIL_IF(push_inst(compiler, xilf(dst_r, -1)));-		else {-			FAIL_IF(push_load_imm_inst(compiler, tmp1, -1));-			if (src_r != dst_r)-				FAIL_IF(push_inst(compiler, lr(dst_r, src_r)));--			FAIL_IF(push_inst(compiler, xr(dst_r, tmp1)));-		}-		break;-	case SLJIT_NEG:-		FAIL_IF(push_inst(compiler, lcgr(dst_r, src_r)));-		break;-	case SLJIT_NEG32:-		FAIL_IF(push_inst(compiler, lcr(dst_r, src_r)));-		break;-	case SLJIT_CLZ:-		if (have_eimm()) {-			FAIL_IF(push_inst(compiler, flogr(tmp0, src_r))); /* clobbers tmp1 */-			if (dst_r != tmp0)-				FAIL_IF(push_inst(compiler, lgr(dst_r, tmp0)));-		} else {-			abort(); /* TODO(mundaym): no eimm (?) */-		}-		break;-	case SLJIT_CLZ32:-		if (have_eimm()) {-			FAIL_IF(push_inst(compiler, sllg(tmp1, src_r, 32, 0)));-			FAIL_IF(push_inst(compiler, iilf(tmp1, 0xffffffff)));-			FAIL_IF(push_inst(compiler, flogr(tmp0, tmp1))); /* clobbers tmp1 */-			if (dst_r != tmp0)-				FAIL_IF(push_inst(compiler, lr(dst_r, tmp0)));-		} else {-			abort(); /* TODO(mundaym): no eimm (?) */-		}-		break;-	default:-		SLJIT_UNREACHABLE();-	}--	/* write condition code to emulated flag register */-	if (op & VARIABLE_FLAG_MASK)-		FAIL_IF(push_inst(compiler, ipm(flag_r)));--	/* write zero flag to emulated flag register */-	if (op & SLJIT_SET_Z)-		FAIL_IF(push_store_zero_flag(compiler, op, dst_r));--	/* TODO(carenas): doesn't need FAIL_IF */-	if ((dst != SLJIT_UNUSED) && (dst & SLJIT_MEM))-		FAIL_IF(store_word(compiler, dst_r, dst, dstw, tmp1, op & SLJIT_I32_OP));--	return SLJIT_SUCCESS;-}--static SLJIT_INLINE int is_commutative(sljit_s32 op)-{-	switch (GET_OPCODE(op)) {-	case SLJIT_ADD:-	case SLJIT_ADDC:-	case SLJIT_MUL:-	case SLJIT_AND:-	case SLJIT_OR:-	case SLJIT_XOR:-		return 1;-	}-	return 0;-}--static SLJIT_INLINE int is_shift(sljit_s32 op) {-	sljit_s32 v = GET_OPCODE(op);-	return (v == SLJIT_SHL || v == SLJIT_ASHR || v == SLJIT_LSHR) ? 1 : 0;-}--static SLJIT_INLINE int sets_signed_flag(sljit_s32 op)-{-	switch (GET_FLAG_TYPE(op)) {-	case SLJIT_OVERFLOW:-	case SLJIT_NOT_OVERFLOW:-	case SLJIT_SIG_LESS:-	case SLJIT_SIG_LESS_EQUAL:-	case SLJIT_SIG_GREATER:-	case SLJIT_SIG_GREATER_EQUAL:-		return 1;-	}-	return 0;-}--/* Report whether we have an instruction for:-     op dst src imm-   where dst and src are separate registers. */-static int have_op_3_imm(sljit_s32 op, sljit_sw imm) {-	return 0; /* TODO(mundaym): implement */-}--/* Report whether we have an instruction for:-     op reg imm-  where reg is both a source and the destination. */-static int have_op_2_imm(sljit_s32 op, sljit_sw imm) {-	switch (GET_OPCODE(op) | (op & SLJIT_I32_OP)) {-	case SLJIT_ADD32:-	case SLJIT_ADD:-		if (!HAS_FLAGS(op) || sets_signed_flag(op))-			return have_eimm() ? is_s32(imm) : is_s16(imm);--		return have_eimm() && is_u32(imm);-	case SLJIT_MUL32:-	case SLJIT_MUL:-		/* TODO(mundaym): general extension check */-		/* for ms{,g}fi */-		if (op & VARIABLE_FLAG_MASK)-			return 0;--		return have_genext() && is_s16(imm);-	case SLJIT_OR32:-	case SLJIT_XOR32:-	case SLJIT_AND32:-		/* only use if have extended immediate facility */-		/* this ensures flags are set correctly */-		return have_eimm();-	case SLJIT_AND:-	case SLJIT_OR:-	case SLJIT_XOR:-		/* TODO(mundaym): make this more flexible */-		/* avoid using immediate variations, flags */-		/* won't be set correctly */-		return 0;-	case SLJIT_ADDC32:-	case SLJIT_ADDC:-		/* no ADD LOGICAL WITH CARRY IMMEDIATE */-		return 0;-	case SLJIT_SUB:-	case SLJIT_SUB32:-	case SLJIT_SUBC:-	case SLJIT_SUBC32:-		/* no SUBTRACT IMMEDIATE */-		/* TODO(mundaym): SUBTRACT LOGICAL IMMEDIATE */-		return 0;-	}-	return 0;-}--SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compiler, sljit_s32 op,-	sljit_s32 dst, sljit_sw dstw,-	sljit_s32 src1, sljit_sw src1w,-	sljit_s32 src2, sljit_sw src2w)-{-	CHECK_ERROR();-	CHECK(check_sljit_emit_op2(compiler, op, dst, dstw, src1, src1w, src2, src2w));-	ADJUST_LOCAL_OFFSET(dst, dstw);-	ADJUST_LOCAL_OFFSET(src1, src1w);-	ADJUST_LOCAL_OFFSET(src2, src2w);--	if (dst == SLJIT_UNUSED && !HAS_FLAGS(op))-		return SLJIT_SUCCESS;--	sljit_gpr dst_r = SLOW_IS_REG(dst) ? gpr(dst & REG_MASK) : tmp0;--	if (is_commutative(op)) {-		#define SWAP_ARGS \-		do {                         \-			sljit_s32 t = src1;  \-			sljit_sw tw = src1w; \-			src1 = src2;         \-			src1w = src2w;       \-			src2 = t;            \-			src2w = tw;          \-		} while(0);--		/* prefer immediate in src2 */-		if (src1 & SLJIT_IMM) {-			SWAP_ARGS-		}--		/* prefer to have src1 use same register as dst */-		if (FAST_IS_REG(src2) && gpr(src2 & REG_MASK) == dst_r) {-			SWAP_ARGS-		}--		/* prefer memory argument in src2 */-		if (FAST_IS_REG(src2) && (src1 & SLJIT_MEM)) {-			SWAP_ARGS-		}-		#undef SWAP_ARGS-	}--	/* src1 must be in a register */-	sljit_gpr src1_r = FAST_IS_REG(src1) ? gpr(src1 & REG_MASK) : tmp0;-	if (src1 & SLJIT_IMM)-		FAIL_IF(push_load_imm_inst(compiler, src1_r, src1w));--	if (src1 & SLJIT_MEM)-		FAIL_IF(load_word(compiler, src1_r, src1, src1w, tmp1, op & SLJIT_I32_OP));--	/* emit comparison before subtract */-	if (GET_OPCODE(op) == SLJIT_SUB && (op & VARIABLE_FLAG_MASK)) {-		sljit_sw cmp = 0;-		switch (GET_FLAG_TYPE(op)) {-		case SLJIT_LESS:-		case SLJIT_LESS_EQUAL:-		case SLJIT_GREATER:-		case SLJIT_GREATER_EQUAL:-			cmp = 1; /* unsigned */-			break;-		case SLJIT_EQUAL:-		case SLJIT_SIG_LESS:-		case SLJIT_SIG_LESS_EQUAL:-		case SLJIT_SIG_GREATER:-		case SLJIT_SIG_GREATER_EQUAL:-			cmp = -1; /* signed */-			break;-		}-		if (cmp) {-			/* clear flags - no need to generate now */-			op &= ~VARIABLE_FLAG_MASK;-			sljit_gpr src2_r = FAST_IS_REG(src2) ? gpr(src2 & REG_MASK) : tmp1;-			if (src2 & SLJIT_IMM) {-				#define LEVAL(i) i(src1_r, src2w)-				if (cmp > 0 && is_u32(src2w)) {-					/* unsigned */-					FAIL_IF(push_inst(compiler,-					WHEN2(op & SLJIT_I32_OP, clfi, clgfi)));-				}-				else if (cmp < 0 && is_s16(src2w)) {-					/* signed */-					FAIL_IF(push_inst(compiler,-					WHEN2(op & SLJIT_I32_OP, chi, cghi)));-				}-				else if (cmp < 0 && is_s32(src2w)) {-					/* signed */-					FAIL_IF(push_inst(compiler,-					WHEN2(op & SLJIT_I32_OP, cfi, cgfi)));-				}-				#undef LEVAL-				#define LEVAL(i) i(src1_r, src2_r)-				else {-					FAIL_IF(push_load_imm_inst(compiler, src2_r, src2w));-					if (cmp > 0) {-						/* unsigned */-						FAIL_IF(push_inst(compiler,-						WHEN2(op & SLJIT_I32_OP, clr, clgr)));-					}-					if (cmp < 0) {-						/* signed */-						FAIL_IF(push_inst(compiler,-						WHEN2(op & SLJIT_I32_OP, cr, cgr)));-					}-				}-			}-			else {-				if (src2 & SLJIT_MEM) {-					/* TODO(mundaym): comparisons with memory */-					/* load src2 into register */-					FAIL_IF(load_word(compiler, src2_r, src2, src2w, tmp1, op & SLJIT_I32_OP));-				}-				if (cmp > 0) {-					/* unsigned */-					FAIL_IF(push_inst(compiler,-						WHEN2(op & SLJIT_I32_OP, clr, clgr)));-				}-				if (cmp < 0) {-					/* signed */-					FAIL_IF(push_inst(compiler,-						WHEN2(op & SLJIT_I32_OP, cr, cgr)));-				}-				#undef LEVAL-			}-			FAIL_IF(push_inst(compiler, ipm(flag_r)));-		}-	}--	if (!HAS_FLAGS(op) && dst == SLJIT_UNUSED)-		return SLJIT_SUCCESS;--	/* need to specify signed or logical operation */-	int signed_flags = sets_signed_flag(op);--	if (is_shift(op)) {-		/* handle shifts first, they have more constraints than other operations */-		sljit_sw d = 0;-		sljit_gpr b = FAST_IS_REG(src2) ? gpr(src2 & REG_MASK) : r0;-		if (src2 & SLJIT_IMM)-			d = src2w & ((op & SLJIT_I32_OP) ? 31 : 63);--		if (src2 & SLJIT_MEM) {-			/* shift amount (b) cannot be in r0 (i.e. tmp0) */-			FAIL_IF(load_word(compiler, tmp1, src2, src2w, tmp1, op & SLJIT_I32_OP));-			b = tmp1;-		}-		/* src1 and dst share the same register in the base 32-bit ISA */-		/* TODO(mundaym): not needed when distinct-operand facility is available */-		int workaround_alias = op & SLJIT_I32_OP && src1_r != dst_r;-		if (workaround_alias) {-			/* put src1 into tmp0 so we can overwrite it */-			FAIL_IF(push_inst(compiler, lr(tmp0, src1_r)));-			src1_r = tmp0;-		}-		switch (GET_OPCODE(op) | (op & SLJIT_I32_OP)) {-		case SLJIT_SHL:-			FAIL_IF(push_inst(compiler, sllg(dst_r, src1_r, d, b)));-			break;-		case SLJIT_SHL32:-			FAIL_IF(push_inst(compiler, sll(src1_r, d, b)));-			break;-		case SLJIT_LSHR:-			FAIL_IF(push_inst(compiler, srlg(dst_r, src1_r, d, b)));-			break;-		case SLJIT_LSHR32:-			FAIL_IF(push_inst(compiler, srl(src1_r, d, b)));-			break;-		case SLJIT_ASHR:-			FAIL_IF(push_inst(compiler, srag(dst_r, src1_r, d, b)));-			break;-		case SLJIT_ASHR32:-			FAIL_IF(push_inst(compiler, sra(src1_r, d, b)));-			break;-		default:-			SLJIT_UNREACHABLE();-		}-		if (workaround_alias && dst_r != src1_r)-			FAIL_IF(push_inst(compiler, lr(dst_r, src1_r)));--	}-	else if ((GET_OPCODE(op) == SLJIT_MUL) && HAS_FLAGS(op)) {-		/* multiply instructions do not generally set flags so we need to manually */-		/* detect overflow conditions */-		/* TODO(mundaym): 64-bit overflow */-		SLJIT_ASSERT(GET_FLAG_TYPE(op) == SLJIT_MUL_OVERFLOW ||-		             GET_FLAG_TYPE(op) == SLJIT_MUL_NOT_OVERFLOW);-		sljit_gpr src2_r = FAST_IS_REG(src2) ? gpr(src2 & REG_MASK) : tmp1;-		if (src2 & SLJIT_IMM) {-			/* load src2 into register */-			FAIL_IF(push_load_imm_inst(compiler, src2_r, src2w));-		}-		if (src2 & SLJIT_MEM) {-			/* load src2 into register */-			FAIL_IF(load_word(compiler, src2_r, src2, src2w, tmp1, op & SLJIT_I32_OP));-		}-		if (have_misc2()) {-			#define LEVAL(i) i(dst_r, src1_r, src2_r)-			FAIL_IF(push_inst(compiler,-				WHEN2(op & SLJIT_I32_OP, msrkc, msgrkc)));-			#undef LEVAL-		}-		else if (op & SLJIT_I32_OP) {-			op &= ~VARIABLE_FLAG_MASK;-			FAIL_IF(push_inst(compiler, lgfr(tmp0, src1_r)));-			FAIL_IF(push_inst(compiler, msgfr(tmp0, src2_r)));-			if (dst_r != tmp0) {-				FAIL_IF(push_inst(compiler, lr(dst_r, tmp0)));-			}-			FAIL_IF(push_inst(compiler, aih(tmp0, 1)));-			FAIL_IF(push_inst(compiler, nihf(tmp0, ~1U)));-			FAIL_IF(push_inst(compiler, ipm(flag_r)));-			FAIL_IF(push_inst(compiler, oilh(flag_r, 0x2000)));-		}-		else-			return SLJIT_ERR_UNSUPPORTED;--	}-	else if ((GET_OPCODE(op) == SLJIT_SUB) && (op & SLJIT_SET_Z) && !signed_flags) {-		/* subtract logical instructions do not set the right flags unfortunately */-		/* instead, negate src2 and issue an add logical */-		/* TODO(mundaym): distinct operand facility where needed */-		if (src1_r != dst_r && src1_r != tmp0) {-			#define LEVAL(i) i(tmp0, src1_r)-			FAIL_IF(push_inst(compiler,-				WHEN2(op & SLJIT_I32_OP, lr, lgr)));-			src1_r = tmp0;-			#undef LEVAL-		}-		sljit_gpr src2_r = FAST_IS_REG(src2) ? gpr(src2 & REG_MASK) : tmp1;-		if (src2 & SLJIT_IMM) {-			/* load src2 into register */-			FAIL_IF(push_load_imm_inst(compiler, src2_r, src2w));-		}-		if (src2 & SLJIT_MEM) {-			/* load src2 into register */-			FAIL_IF(load_word(compiler, src2_r, src2, src2w, tmp1, op & SLJIT_I32_OP));-		}-		if (op & SLJIT_I32_OP) {-			FAIL_IF(push_inst(compiler, lcr(tmp1, src2_r)));-			FAIL_IF(push_inst(compiler, alr(src1_r, tmp1)));-			if (src1_r != dst_r)-				FAIL_IF(push_inst(compiler, lr(dst_r, src1_r)));-		}-		else {-			FAIL_IF(push_inst(compiler, lcgr(tmp1, src2_r)));-			FAIL_IF(push_inst(compiler, algr(src1_r, tmp1)));-			if (src1_r != dst_r)-				FAIL_IF(push_inst(compiler, lgr(dst_r, src1_r)));-		}-	}-	else if ((src2 & SLJIT_IMM) && (src1_r == dst_r) && have_op_2_imm(op, src2w)) {-		switch (GET_OPCODE(op) | (op & SLJIT_I32_OP)) {-		#define LEVAL(i) i(dst_r, src2w)-		case SLJIT_ADD:-			if (!HAS_FLAGS(op) || signed_flags) {-				FAIL_IF(push_inst(compiler,-					WHEN2(is_s16(src2w), aghi, agfi)));-			}-			else-				FAIL_IF(push_inst(compiler, LEVAL(algfi)));--			break;-		case SLJIT_ADD32:-			if (!HAS_FLAGS(op) || signed_flags)-				FAIL_IF(push_inst(compiler,-					WHEN2(is_s16(src2w), ahi, afi)));-			else-				FAIL_IF(push_inst(compiler, LEVAL(alfi)));--			break;-		#undef LEVAL /* TODO(carenas): move down and refactor? */-		case SLJIT_MUL:-			FAIL_IF(push_inst(compiler, mhi(dst_r, src2w)));-			break;-		case SLJIT_MUL32:-			FAIL_IF(push_inst(compiler, mghi(dst_r, src2w)));-			break;-		case SLJIT_OR32:-			FAIL_IF(push_inst(compiler, oilf(dst_r, src2w)));-			break;-		case SLJIT_XOR32:-			FAIL_IF(push_inst(compiler, xilf(dst_r, src2w)));-			break;-		case SLJIT_AND32:-			FAIL_IF(push_inst(compiler, nilf(dst_r, src2w)));-			break;-		default:-			SLJIT_UNREACHABLE();-		}-	}-	else if ((src2 & SLJIT_IMM) && have_op_3_imm(op, src2w)) {-		abort(); /* TODO(mundaym): implement */-	}-	else if ((src2 & SLJIT_MEM) && (dst_r == src1_r)) {-		/* most 32-bit instructions can only handle 12-bit immediate offsets */-		int need_u12 = !have_ldisp() &&-			(op & SLJIT_I32_OP) &&-			(GET_OPCODE(op) != SLJIT_ADDC) &&-			(GET_OPCODE(op) != SLJIT_SUBC);-		struct addr mem;-		if (need_u12)-			FAIL_IF(make_addr_bx(compiler, &mem, src2, src2w, tmp1));-		else-			FAIL_IF(make_addr_bxy(compiler, &mem, src2, src2w, tmp1));--		int can_u12 = is_u12(mem.offset) ? 1 : 0;-		sljit_ins ins = 0;-		switch (GET_OPCODE(op) | (op & SLJIT_I32_OP)) {-		/* 64-bit ops */-		#define LEVAL(i) EVAL(i, dst_r, mem)-		case SLJIT_ADD:-			ins = WHEN2(signed_flags, ag, alg);-			break;-		case SLJIT_SUB:-			ins = WHEN2(signed_flags, sg, slg);-			break;-		case SLJIT_ADDC:-			ins = LEVAL(alcg);-			break;-		case SLJIT_SUBC:-			ins = LEVAL(slbg);-			break;-		case SLJIT_MUL:-			ins = LEVAL(msg);-			break;-		case SLJIT_OR:-			ins = LEVAL(og);-			break;-		case SLJIT_XOR:-			ins = LEVAL(xg);-			break;-		case SLJIT_AND:-			ins = LEVAL(ng);-			break;-		/* 32-bit ops */-		case SLJIT_ADD32:-			if (signed_flags)-				ins = WHEN2(can_u12, a, ay);-			else-				ins = WHEN2(can_u12, al, aly);-			break;-		case SLJIT_SUB32:-			if (signed_flags)-				ins = WHEN2(can_u12, s, sy);-			else-				ins = WHEN2(can_u12, sl, sly);-			break;-		case SLJIT_ADDC32:-			ins = LEVAL(alc);-			break;-		case SLJIT_SUBC32:-			ins = LEVAL(slb);-			break;-		case SLJIT_MUL32:-			ins = WHEN2(can_u12, ms, msy);-			break;-		case SLJIT_OR32:-			ins = WHEN2(can_u12, o, oy);-			break;-		case SLJIT_XOR32:-			ins = WHEN2(can_u12, x, xy);-			break;-		case SLJIT_AND32:-			ins = WHEN2(can_u12, n, ny);-			break;-		#undef LEVAL-		default:-			SLJIT_UNREACHABLE();-		}-		FAIL_IF(push_inst(compiler, ins));-	}-	else {-		sljit_gpr src2_r = FAST_IS_REG(src2) ? gpr(src2 & REG_MASK) : tmp1;-		if (src2 & SLJIT_IMM) {-			/* load src2 into register */-			FAIL_IF(push_load_imm_inst(compiler, src2_r, src2w));-		}-		if (src2 & SLJIT_MEM) {-			/* load src2 into register */-			FAIL_IF(load_word(compiler, src2_r, src2, src2w, tmp1, op & SLJIT_I32_OP));-		}-		/* TODO(mundaym): distinct operand facility where needed */-		#define LEVAL(i) i(tmp0, src1_r)-		if (src1_r != dst_r && src1_r != tmp0) {-			FAIL_IF(push_inst(compiler,-				WHEN2(op & SLJIT_I32_OP, lr, lgr)));-			src1_r = tmp0;-		}-		#undef LEVAL-		sljit_ins ins = 0;-		switch (GET_OPCODE(op) | (op & SLJIT_I32_OP)) {-		#define LEVAL(i) i(src1_r, src2_r)-		/* 64-bit ops */-		case SLJIT_ADD:-			ins = WHEN2(signed_flags, agr, algr);-			break;-		case SLJIT_SUB:-			ins = WHEN2(signed_flags, sgr, slgr);-			break;-		case SLJIT_ADDC:-			ins = LEVAL(alcgr);-			break;-		case SLJIT_SUBC:-			ins = LEVAL(slbgr);-			break;-		case SLJIT_MUL:-			ins = LEVAL(msgr);-			break;-		case SLJIT_AND:-			ins = LEVAL(ngr);-			break;-		case SLJIT_OR:-			ins = LEVAL(ogr);-			break;-		case SLJIT_XOR:-			ins = LEVAL(xgr);-			break;-		/* 32-bit ops */-		case SLJIT_ADD32:-			ins = WHEN2(signed_flags, ar, alr);-			break;-		case SLJIT_SUB32:-			ins = WHEN2(signed_flags, sr, slr);-			break;-		case SLJIT_ADDC32:-			ins = LEVAL(alcr);-			break;-		case SLJIT_SUBC32:-			ins = LEVAL(slbr);-			break;-		case SLJIT_MUL32:-			ins = LEVAL(msr);-			break;-		case SLJIT_AND32:-			ins = LEVAL(nr);-			break;-		case SLJIT_OR32:-			ins = LEVAL(or);-			break;-		case SLJIT_XOR32:-			ins = LEVAL(xr);-			break;-		#undef LEVAL-		default:-			SLJIT_UNREACHABLE();-		}-		FAIL_IF(push_inst(compiler, ins));-		#define LEVAL(i) i(dst_r, src1_r)-		if (src1_r != dst_r)-			FAIL_IF(push_inst(compiler,-				WHEN2(op & SLJIT_I32_OP, lr, lgr)));-		#undef LEVAL-	}--	/* write condition code to emulated flag register */-	if (op & VARIABLE_FLAG_MASK)-		FAIL_IF(push_inst(compiler, ipm(flag_r)));--	/* write zero flag to emulated flag register */-	if (op & SLJIT_SET_Z)-		FAIL_IF(push_store_zero_flag(compiler, op, dst_r));--	/* finally write the result to memory if required */-	if (dst & SLJIT_MEM) {-		SLJIT_ASSERT(dst_r != tmp1);-		/* TODO(carenas): s/FAIL_IF/ return */-		FAIL_IF(store_word(compiler, dst_r, dst, dstw, tmp1, op & SLJIT_I32_OP));-	}--	return SLJIT_SUCCESS;-}--SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_src(-	struct sljit_compiler *compiler,-	sljit_s32 op, sljit_s32 src, sljit_sw srcw)-{-	sljit_gpr src_r;--	CHECK_ERROR();-	CHECK(check_sljit_emit_op_src(compiler, op, src, srcw));-	ADJUST_LOCAL_OFFSET(src, srcw);--	switch (op) {-	case SLJIT_FAST_RETURN:-		src_r = FAST_IS_REG(src) ? gpr(src) : tmp1;-		if (src & SLJIT_MEM)-			FAIL_IF(load_word(compiler, tmp1, src, srcw, tmp1, 0));--		return push_inst(compiler, br(src_r));-	case SLJIT_SKIP_FRAMES_BEFORE_FAST_RETURN:-		/* TODO(carenas): implement? */-		return SLJIT_SUCCESS;-	case SLJIT_PREFETCH_L1:-	case SLJIT_PREFETCH_L2:-	case SLJIT_PREFETCH_L3:-	case SLJIT_PREFETCH_ONCE:-		/* TODO(carenas): implement */-		return SLJIT_SUCCESS;-	default:-                /* TODO(carenas): probably should not success by default */-		return SLJIT_SUCCESS;-	}--	return SLJIT_SUCCESS;-}--SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_get_register_index(sljit_s32 reg)-{-	CHECK_REG_INDEX(check_sljit_get_register_index(reg));-	return gpr(reg);-}--SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_get_float_register_index(sljit_s32 reg)-{-	CHECK_REG_INDEX(check_sljit_get_float_register_index(reg));-	abort();-}--SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_custom(struct sljit_compiler *compiler,-	void *instruction, sljit_s32 size)-{-	sljit_ins ins = 0;--	CHECK_ERROR();-	CHECK(check_sljit_emit_op_custom(compiler, instruction, size));--	memcpy((sljit_u8 *)&ins + sizeof(ins) - size, instruction, size);-	return push_inst(compiler, ins);-}--/* --------------------------------------------------------------------- */-/*  Floating point operators                                             */-/* --------------------------------------------------------------------- */--SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fop1(struct sljit_compiler *compiler, sljit_s32 op,-	sljit_s32 dst, sljit_sw dstw,-	sljit_s32 src, sljit_sw srcw)-{-	CHECK_ERROR();-	abort();-}--SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fop2(struct sljit_compiler *compiler, sljit_s32 op,-	sljit_s32 dst, sljit_sw dstw,-	sljit_s32 src1, sljit_sw src1w,-	sljit_s32 src2, sljit_sw src2w)-{-	CHECK_ERROR();-	abort();-}--/* --------------------------------------------------------------------- */-/*  Other instructions                                                   */-/* --------------------------------------------------------------------- */--SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fast_enter(struct sljit_compiler *compiler, sljit_s32 dst, sljit_sw dstw)-{-	CHECK_ERROR();-	CHECK(check_sljit_emit_fast_enter(compiler, dst, dstw));-	ADJUST_LOCAL_OFFSET(dst, dstw);--	if (FAST_IS_REG(dst))-		return push_inst(compiler, lgr(gpr(dst), fast_link_r));--	/* memory */-	return store_word(compiler, fast_link_r, dst, dstw, tmp1, 0);-}--/* --------------------------------------------------------------------- */-/*  Conditional instructions                                             */-/* --------------------------------------------------------------------- */--SLJIT_API_FUNC_ATTRIBUTE struct sljit_label* sljit_emit_label(struct sljit_compiler *compiler)-{-	struct sljit_label *label;--	CHECK_ERROR_PTR();-	CHECK_PTR(check_sljit_emit_label(compiler));--	if (compiler->last_label && compiler->last_label->size == compiler->size)-		return compiler->last_label;--	label = (struct sljit_label*)ensure_abuf(compiler, sizeof(struct sljit_label));-	PTR_FAIL_IF(!label);-	set_label(label, compiler);-	return label;-}--SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_jump(struct sljit_compiler *compiler, sljit_s32 type)-{-	sljit_u8 mask = ((type & 0xff) < SLJIT_JUMP) ? get_cc(type & 0xff) : 0xf;--	CHECK_ERROR_PTR();-	CHECK_PTR(check_sljit_emit_jump(compiler, type));--	/* reload condition code */-	if (mask != 0xf)-		PTR_FAIL_IF(push_load_cc(compiler, type & 0xff));--	/* record jump */-	struct sljit_jump *jump = (struct sljit_jump *)-		ensure_abuf(compiler, sizeof(struct sljit_jump));-	PTR_FAIL_IF(!jump);-	set_jump(jump, compiler, type & SLJIT_REWRITABLE_JUMP);-	jump->addr = compiler->size;--	/* emit jump instruction */-	type &= 0xff;-	if (type >= SLJIT_FAST_CALL)-		PTR_FAIL_IF(push_inst(compiler, brasl(type == SLJIT_FAST_CALL ? fast_link_r : link_r, 0)));-	else-		PTR_FAIL_IF(push_inst(compiler, brcl(mask, 0)));--	return jump;-}--SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_call(struct sljit_compiler *compiler, sljit_s32 type,-	sljit_s32 arg_types)-{-	CHECK_ERROR_PTR();-	CHECK_PTR(check_sljit_emit_call(compiler, type, arg_types));--#if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) \-		|| (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS)-	compiler->skip_checks = 1;-#endif--	return sljit_emit_jump(compiler, type);-}--SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_ijump(struct sljit_compiler *compiler, sljit_s32 type, sljit_s32 src, sljit_sw srcw)-{-	sljit_gpr src_r = FAST_IS_REG(src) ? gpr(src) : tmp1;--	CHECK_ERROR();-	CHECK(check_sljit_emit_ijump(compiler, type, src, srcw));-	ADJUST_LOCAL_OFFSET(src, srcw);--	if (src & SLJIT_IMM) {-		SLJIT_ASSERT(!(srcw & 1)); /* target address must be even */-		FAIL_IF(push_load_imm_inst(compiler, src_r, srcw));-	}-	else if (src & SLJIT_MEM)-		FAIL_IF(load_word(compiler, src_r, src, srcw, tmp1, 0 /* 64-bit */));--	/* emit jump instruction */-	if (type >= SLJIT_FAST_CALL)-		return push_inst(compiler, basr(type == SLJIT_FAST_CALL ? fast_link_r : link_r, src_r));--	return push_inst(compiler, br(src_r));-}--SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_icall(struct sljit_compiler *compiler, sljit_s32 type,-	sljit_s32 arg_types,-	sljit_s32 src, sljit_sw srcw)-{-	CHECK_ERROR();-	CHECK(check_sljit_emit_icall(compiler, type, arg_types, src, srcw));--#if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) \-		|| (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS)-	compiler->skip_checks = 1;-#endif--	return sljit_emit_ijump(compiler, type, src, srcw);-}--SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_flags(struct sljit_compiler *compiler, sljit_s32 op,-	sljit_s32 dst, sljit_sw dstw,-	sljit_s32 type)-{-	sljit_u8 mask = get_cc(type & 0xff);--	CHECK_ERROR();-	CHECK(check_sljit_emit_op_flags(compiler, op, dst, dstw, type));--	sljit_gpr dst_r = FAST_IS_REG(dst) ? gpr(dst & REG_MASK) : tmp0;-	sljit_gpr loc_r = tmp1;-	switch (GET_OPCODE(op)) {-	case SLJIT_AND:-	case SLJIT_OR:-	case SLJIT_XOR:-		/* dst is also source operand */-		if (dst & SLJIT_MEM)-			FAIL_IF(load_word(compiler, dst_r, dst, dstw, tmp1, op & SLJIT_I32_OP));--		break;-	case SLJIT_MOV:-	case (SLJIT_MOV32 & ~SLJIT_I32_OP):-		/* can write straight into destination */-		loc_r = dst_r;-		break;-	default:-		SLJIT_UNREACHABLE();-	}--	if (mask != 0xf)-		FAIL_IF(push_load_cc(compiler, type & 0xff));--	/* TODO(mundaym): fold into cmov helper function? */-	#define LEVAL(i) i(loc_r, 1, mask)-	if (have_lscond2()) {-		FAIL_IF(push_load_imm_inst(compiler, loc_r, 0));-		FAIL_IF(push_inst(compiler,-			WHEN2(op & SLJIT_I32_OP, lochi, locghi)));-	} else {-		/* TODO(mundaym): no load/store-on-condition 2 facility (ipm? branch-and-set?) */-		abort();-	}-	#undef LEVAL--	/* apply bitwise op and set condition codes */-	switch (GET_OPCODE(op)) {-	#define LEVAL(i) i(dst_r, loc_r)-	case SLJIT_AND:-		FAIL_IF(push_inst(compiler,-			WHEN2(op & SLJIT_I32_OP, nr, ngr)));-		break;-	case SLJIT_OR:-		FAIL_IF(push_inst(compiler,-			WHEN2(op & SLJIT_I32_OP, or, ogr)));-		break;-	case SLJIT_XOR:-		FAIL_IF(push_inst(compiler,-			WHEN2(op & SLJIT_I32_OP, xr, xgr)));-		break;-	#undef LEVAL-	}--	/* set zero flag if needed */-	if (op & SLJIT_SET_Z)-		FAIL_IF(push_store_zero_flag(compiler, op, dst_r));--	/* store result to memory if required */-	/* TODO(carenas): s/FAIL_IF/ return */-	if (dst & SLJIT_MEM)-		FAIL_IF(store_word(compiler, dst_r, dst, dstw, tmp1, op & SLJIT_I32_OP));--	return SLJIT_SUCCESS;-}--SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_cmov(struct sljit_compiler *compiler, sljit_s32 type,-	sljit_s32 dst_reg,-	sljit_s32 src, sljit_sw srcw)-{-	sljit_u8 mask = get_cc(type & 0xff);-	sljit_gpr dst_r = gpr(dst_reg & ~SLJIT_I32_OP);-	sljit_gpr src_r = FAST_IS_REG(src) ? gpr(src) : tmp0;--	CHECK_ERROR();-	CHECK(check_sljit_emit_cmov(compiler, type, dst_reg, src, srcw));--	if (mask != 0xf)-		FAIL_IF(push_load_cc(compiler, type & 0xff));--	if (src & SLJIT_IMM) {-		/* TODO(mundaym): fast path with lscond2 */-		FAIL_IF(push_load_imm_inst(compiler, src_r, srcw));-	}--	#define LEVAL(i) i(dst_r, src_r, mask)-	if (have_lscond1())-		return push_inst(compiler,-			WHEN2(dst_reg & SLJIT_I32_OP, locr, locgr));--	#undef LEVAL--	/* TODO(mundaym): implement */-	return SLJIT_ERR_UNSUPPORTED;-}--/* --------------------------------------------------------------------- */-/*  Other instructions                                                   */-/* --------------------------------------------------------------------- */--/* On s390x we build a literal pool to hold constants. This has two main-   advantages:--     1. we only need one instruction in the instruction stream (LGRL)-     2. we can store 64 bit addresses and use 32 bit offsets--   To retrofit the extra information needed to build the literal pool we-   add a new sljit_s390x_const struct that contains the initial value but-   can still be cast to a sljit_const. */--SLJIT_API_FUNC_ATTRIBUTE struct sljit_const* sljit_emit_const(struct sljit_compiler *compiler, sljit_s32 dst, sljit_sw dstw, sljit_sw init_value)-{-	struct sljit_s390x_const *const_;-	sljit_gpr dst_r;--	CHECK_ERROR_PTR();-	CHECK_PTR(check_sljit_emit_const(compiler, dst, dstw, init_value));--	const_ = (struct sljit_s390x_const*)ensure_abuf(compiler,-					sizeof(struct sljit_s390x_const));-	PTR_FAIL_IF(!const_);-	set_const((struct sljit_const*)const_, compiler);-	const_->init_value = init_value;--	dst_r = FAST_IS_REG(dst) ? gpr(dst & REG_MASK) : tmp0;-	if (have_genext())-		PTR_FAIL_IF(push_inst(compiler, sljit_ins_const | lgrl(dst_r, 0)));-	else {-		PTR_FAIL_IF(push_inst(compiler, sljit_ins_const | larl(tmp1, 0)));-		PTR_FAIL_IF(push_inst(compiler, lg(dst_r, 0, r0, tmp1)));-	}--	if (dst & SLJIT_MEM)-		PTR_FAIL_IF(store_word(compiler, dst_r, dst, dstw, tmp1, 0 /* always 64-bit */));--	return (struct sljit_const*)const_;-}--SLJIT_API_FUNC_ATTRIBUTE void sljit_set_jump_addr(sljit_uw addr, sljit_uw new_target, sljit_sw executable_offset)-{-	/* Update the constant pool. */-	sljit_uw *ptr = (sljit_uw *)addr;-	SLJIT_UNUSED_ARG(executable_offset);--	SLJIT_UPDATE_WX_FLAGS(ptr, ptr + 1, 0);-	*ptr = new_target;-	SLJIT_UPDATE_WX_FLAGS(ptr, ptr + 1, 1);-	SLJIT_CACHE_FLUSH(ptr, ptr + 1);-}--SLJIT_API_FUNC_ATTRIBUTE void sljit_set_const(sljit_uw addr, sljit_sw new_constant, sljit_sw executable_offset)-{-	sljit_set_jump_addr(addr, new_constant, executable_offset);-}--SLJIT_API_FUNC_ATTRIBUTE struct sljit_put_label *sljit_emit_put_label(-	struct sljit_compiler *compiler,-	sljit_s32 dst, sljit_sw dstw)-{-	struct sljit_put_label *put_label;-	sljit_gpr dst_r;--	CHECK_ERROR_PTR();-	CHECK_PTR(check_sljit_emit_put_label(compiler, dst, dstw));-	ADJUST_LOCAL_OFFSET(dst, dstw);--	put_label = (struct sljit_put_label*)ensure_abuf(compiler, sizeof(struct sljit_put_label));-	PTR_FAIL_IF(!put_label);-	set_put_label(put_label, compiler, 0);--	dst_r = FAST_IS_REG(dst) ? gpr(dst & REG_MASK) : tmp0;--	if (have_genext())-		PTR_FAIL_IF(push_inst(compiler, lgrl(dst_r, 0)));-	else {-		PTR_FAIL_IF(push_inst(compiler, larl(tmp1, 0)));-		PTR_FAIL_IF(push_inst(compiler, lg(dst_r, 0, r0, tmp1)));-	}--	if (dst & SLJIT_MEM)-		PTR_FAIL_IF(store_word(compiler, dst_r, dst, dstw, tmp1, 0));+	0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 15, 0, 1+};++/* there are also a[2-15] available, but they are slower to access and+ * their use is limited as mundaym explained:+ *   https://github.com/zherczeg/sljit/pull/91#discussion_r486895689+ */++/* General Purpose Registers [0-15]. */+typedef sljit_uw sljit_gpr;++/*+ * WARNING+ * the following code is non standard and should be improved for+ * consistency, but doesn't use SLJIT_NUMBER_OF_REGISTERS based+ * registers because r0 and r1 are the ABI recommended volatiles.+ * there is a gpr() function that maps sljit to physical register numbers+ * that should be used instead of the usual index into reg_map[] and+ * will be retired ASAP (TODO: carenas)+ */++static const sljit_gpr r0 = 0;		/* reg_map[SLJIT_NUMBER_OF_REGISTERS + 2]: 0 in address calculations; reserved */+static const sljit_gpr r1 = 1;		/* reg_map[SLJIT_NUMBER_OF_REGISTERS + 3]: reserved */+static const sljit_gpr r2 = 2;		/* reg_map[1]: 1st argument */+static const sljit_gpr r3 = 3;		/* reg_map[2]: 2nd argument */+static const sljit_gpr r4 = 4;		/* reg_map[3]: 3rd argument */+static const sljit_gpr r5 = 5;		/* reg_map[4]: 4th argument */+static const sljit_gpr r6 = 6;		/* reg_map[5]: 5th argument; 1st saved register */+static const sljit_gpr r7 = 7;		/* reg_map[6] */+static const sljit_gpr r8 = 8;		/* reg_map[7] */+static const sljit_gpr r9 = 9;		/* reg_map[8] */+static const sljit_gpr r10 = 10;	/* reg_map[9] */+static const sljit_gpr r11 = 11;	/* reg_map[10] */+static const sljit_gpr r12 = 12;	/* reg_map[11]: GOT */+static const sljit_gpr r13 = 13;	/* reg_map[12]: Literal Pool pointer */+static const sljit_gpr r14 = 14;	/* reg_map[0]: return address and flag register */+static const sljit_gpr r15 = 15;	/* reg_map[SLJIT_NUMBER_OF_REGISTERS + 1]: stack pointer */++/* WARNING: r12 and r13 shouldn't be used as per ABI recommendation */+/* TODO(carenas): r12 might conflict in PIC code, reserve? */+/* TODO(carenas): r13 is usually pointed to "pool" per ABI, using a tmp+ *                like we do know might be faster though, reserve?+ */++/* TODO(carenas): should be named TMP_REG[1-2] for consistency */+#define tmp0	r0+#define tmp1	r1++/* TODO(carenas): flags should move to a different register so that+ *                link register doesn't need to change+ */++/* Link registers. The normal link register is r14, but since+   we use that for flags we need to use r0 instead to do fast+   calls so that flags are preserved. */+static const sljit_gpr link_r = 14;     /* r14 */+static const sljit_gpr fast_link_r = 0; /* r0 */++/* Flag register layout:++   0               32  33  34      36      64+   +---------------+---+---+-------+-------++   |      ZERO     | 0 | 0 |  C C  |///////|+   +---------------+---+---+-------+-------++*/+static const sljit_gpr flag_r = 14; /* r14 */++struct sljit_s390x_const {+	struct sljit_const const_; /* must be first */+	sljit_sw init_value;       /* required to build literal pool */+};++/* Convert SLJIT register to hardware register. */+static SLJIT_INLINE sljit_gpr gpr(sljit_s32 r)+{+	SLJIT_ASSERT(r >= 0 && r < (sljit_s32)(sizeof(reg_map) / sizeof(reg_map[0])));+	return reg_map[r];+}++/* Size of instruction in bytes. Tags must already be cleared. */+static SLJIT_INLINE sljit_uw sizeof_ins(sljit_ins ins)+{+	/* keep faulting instructions */+	if (ins == 0)+		 return 2;++	if ((ins & 0x00000000ffffL) == ins)+		 return 2;+	if ((ins & 0x0000ffffffffL) == ins)+		 return 4;+	if ((ins & 0xffffffffffffL) == ins)+		 return 6;++	SLJIT_UNREACHABLE();+	return (sljit_uw)-1;+}++static sljit_s32 push_inst(struct sljit_compiler *compiler, sljit_ins ins)+{+	sljit_ins *ibuf = (sljit_ins *)ensure_buf(compiler, sizeof(sljit_ins));+	FAIL_IF(!ibuf);+	*ibuf = ins;+	compiler->size++;+	return SLJIT_SUCCESS;+}++static sljit_s32 encode_inst(void **ptr, sljit_ins ins)+{+	sljit_u16 *ibuf = (sljit_u16 *)*ptr;+	sljit_uw size = sizeof_ins(ins);++	SLJIT_ASSERT((size & 6) == size);+	switch (size) {+	case 6:+		*ibuf++ = (sljit_u16)(ins >> 32);+		/* fallthrough */+	case 4:+		*ibuf++ = (sljit_u16)(ins >> 16);+		/* fallthrough */+	case 2:+		*ibuf++ = (sljit_u16)(ins);+	}+	*ptr = (void*)ibuf;+	return SLJIT_SUCCESS;+}++#define SLJIT_ADD_SUB_NO_COMPARE(status_flags_state) \+	(((status_flags_state) & (SLJIT_CURRENT_FLAGS_ADD_SUB | SLJIT_CURRENT_FLAGS_COMPARE)) == SLJIT_CURRENT_FLAGS_ADD_SUB)++/* Map the given type to a 4-bit condition code mask. */+static SLJIT_INLINE sljit_u8 get_cc(struct sljit_compiler *compiler, sljit_s32 type) {+	const sljit_u8 cc0 = 1 << 3; /* equal {,to zero} */+	const sljit_u8 cc1 = 1 << 2; /* less than {,zero} */+	const sljit_u8 cc2 = 1 << 1; /* greater than {,zero} */+	const sljit_u8 cc3 = 1 << 0; /* {overflow,NaN} */++	switch (type) {+	case SLJIT_EQUAL:+		if (SLJIT_ADD_SUB_NO_COMPARE(compiler->status_flags_state)) {+			sljit_s32 type = GET_FLAG_TYPE(compiler->status_flags_state);+			if (type >= SLJIT_SIG_LESS && type <= SLJIT_SIG_LESS_EQUAL)+				return cc0;+			if (type == SLJIT_OVERFLOW)+				return (cc0 | cc3);+			return (cc0 | cc2);+		}++	case SLJIT_EQUAL_F64:+		return cc0;++	case SLJIT_NOT_EQUAL:+		if (SLJIT_ADD_SUB_NO_COMPARE(compiler->status_flags_state)) {+			sljit_s32 type = GET_FLAG_TYPE(compiler->status_flags_state);+			if (type >= SLJIT_SIG_LESS && type <= SLJIT_SIG_LESS_EQUAL)+				return (cc1 | cc2 | cc3);+			if (type == SLJIT_OVERFLOW)+				return (cc1 | cc2);+			return (cc1 | cc3);+		}++	case SLJIT_NOT_EQUAL_F64:+		return (cc1 | cc2 | cc3);++	case SLJIT_LESS:+		return cc1;++	case SLJIT_GREATER_EQUAL:+		return (cc0 | cc2 | cc3);++	case SLJIT_GREATER:+		if (compiler->status_flags_state & SLJIT_CURRENT_FLAGS_COMPARE)+			return cc2;+		return cc3;++	case SLJIT_LESS_EQUAL:+		if (compiler->status_flags_state & SLJIT_CURRENT_FLAGS_COMPARE)+			return (cc0 | cc1);+		return (cc0 | cc1 | cc2);++	case SLJIT_SIG_LESS:+	case SLJIT_LESS_F64:+		return cc1;++	case SLJIT_SIG_LESS_EQUAL:+	case SLJIT_LESS_EQUAL_F64:+		return (cc0 | cc1);++	case SLJIT_SIG_GREATER:+		/* Overflow is considered greater, see SLJIT_SUB. */+		return cc2 | cc3;++	case SLJIT_SIG_GREATER_EQUAL:+		return (cc0 | cc2 | cc3);++	case SLJIT_OVERFLOW:+		if (compiler->status_flags_state & SLJIT_SET_Z)+			return (cc2 | cc3);++	case SLJIT_UNORDERED_F64:+		return cc3;++	case SLJIT_NOT_OVERFLOW:+		if (compiler->status_flags_state & SLJIT_SET_Z)+			return (cc0 | cc1);++	case SLJIT_ORDERED_F64:+		return (cc0 | cc1 | cc2);++	case SLJIT_GREATER_F64:+		return cc2;++	case SLJIT_GREATER_EQUAL_F64:+		return (cc0 | cc2);+	}++	SLJIT_UNREACHABLE();+	return (sljit_u8)-1;+}++/* Facility to bit index mappings.+   Note: some facilities share the same bit index. */+typedef sljit_uw facility_bit;+#define STORE_FACILITY_LIST_EXTENDED_FACILITY 7+#define FAST_LONG_DISPLACEMENT_FACILITY 19+#define EXTENDED_IMMEDIATE_FACILITY 21+#define GENERAL_INSTRUCTION_EXTENSION_FACILITY 34+#define DISTINCT_OPERAND_FACILITY 45+#define HIGH_WORD_FACILITY 45+#define POPULATION_COUNT_FACILITY 45+#define LOAD_STORE_ON_CONDITION_1_FACILITY 45+#define MISCELLANEOUS_INSTRUCTION_EXTENSIONS_1_FACILITY 49+#define LOAD_STORE_ON_CONDITION_2_FACILITY 53+#define MISCELLANEOUS_INSTRUCTION_EXTENSIONS_2_FACILITY 58+#define VECTOR_FACILITY 129+#define VECTOR_ENHANCEMENTS_1_FACILITY 135++/* Report whether a facility is known to be present due to the compiler+   settings. This function should always be compiled to a constant+   value given a constant argument. */+static SLJIT_INLINE int have_facility_static(facility_bit x)+{+#if ENABLE_STATIC_FACILITY_DETECTION+	switch (x) {+	case FAST_LONG_DISPLACEMENT_FACILITY:+		return (__ARCH__ >=  6 /* z990 */);+	case EXTENDED_IMMEDIATE_FACILITY:+	case STORE_FACILITY_LIST_EXTENDED_FACILITY:+		return (__ARCH__ >=  7 /* z9-109 */);+	case GENERAL_INSTRUCTION_EXTENSION_FACILITY:+		return (__ARCH__ >=  8 /* z10 */);+	case DISTINCT_OPERAND_FACILITY:+		return (__ARCH__ >=  9 /* z196 */);+	case MISCELLANEOUS_INSTRUCTION_EXTENSIONS_1_FACILITY:+		return (__ARCH__ >= 10 /* zEC12 */);+	case LOAD_STORE_ON_CONDITION_2_FACILITY:+	case VECTOR_FACILITY:+		return (__ARCH__ >= 11 /* z13 */);+	case MISCELLANEOUS_INSTRUCTION_EXTENSIONS_2_FACILITY:+	case VECTOR_ENHANCEMENTS_1_FACILITY:+		return (__ARCH__ >= 12 /* z14 */);+	default:+		SLJIT_UNREACHABLE();+	}+#endif+	return 0;+}++static SLJIT_INLINE unsigned long get_hwcap()+{+	static unsigned long hwcap = 0;+	if (SLJIT_UNLIKELY(!hwcap)) {+		hwcap = getauxval(AT_HWCAP);+		SLJIT_ASSERT(hwcap != 0);+	}+	return hwcap;+}++static SLJIT_INLINE int have_stfle()+{+	if (have_facility_static(STORE_FACILITY_LIST_EXTENDED_FACILITY))+		return 1;++	return (get_hwcap() & HWCAP_S390_STFLE);+}++/* Report whether the given facility is available. This function always+   performs a runtime check. */+static int have_facility_dynamic(facility_bit x)+{+#if ENABLE_DYNAMIC_FACILITY_DETECTION+	static struct {+		sljit_uw bits[4];+	} cpu_features;+	size_t size = sizeof(cpu_features);+	const sljit_uw word_index = x >> 6;+	const sljit_uw bit_index = ((1UL << 63) >> (x & 63));++	SLJIT_ASSERT(x < size * 8);+	if (SLJIT_UNLIKELY(!have_stfle()))+		return 0;++	if (SLJIT_UNLIKELY(cpu_features.bits[0] == 0)) {+		__asm__ __volatile__ (+			"lgr   %%r0, %0;"+			"stfle 0(%1);"+			/* outputs  */:+			/* inputs   */: "d" ((size / 8) - 1), "a" (&cpu_features)+			/* clobbers */: "r0", "cc", "memory"+		);+		SLJIT_ASSERT(cpu_features.bits[0] != 0);+	}+	return (cpu_features.bits[word_index] & bit_index) != 0;+#else+	return 0;+#endif+}++#define HAVE_FACILITY(name, bit) \+static SLJIT_INLINE int name() \+{ \+	static int have = -1; \+	/* Static check first. May allow the function to be optimized away. */ \+	if (have_facility_static(bit)) \+		have = 1; \+	else if (SLJIT_UNLIKELY(have < 0)) \+		have = have_facility_dynamic(bit) ? 1 : 0; \+\+	return have; \+}++HAVE_FACILITY(have_eimm,    EXTENDED_IMMEDIATE_FACILITY)+HAVE_FACILITY(have_ldisp,   FAST_LONG_DISPLACEMENT_FACILITY)+HAVE_FACILITY(have_genext,  GENERAL_INSTRUCTION_EXTENSION_FACILITY)+HAVE_FACILITY(have_lscond1, LOAD_STORE_ON_CONDITION_1_FACILITY)+HAVE_FACILITY(have_lscond2, LOAD_STORE_ON_CONDITION_2_FACILITY)+HAVE_FACILITY(have_misc2,   MISCELLANEOUS_INSTRUCTION_EXTENSIONS_2_FACILITY)+#undef HAVE_FACILITY++#define is_u12(d)	(0 <= (d) && (d) <= 0x00000fffL)+#define is_u32(d)	(0 <= (d) && (d) <= 0xffffffffL)++#define CHECK_SIGNED(v, bitlen) \+	((v) >= -(1 << ((bitlen) - 1)) && (v) < (1 << ((bitlen) - 1)))++#define is_s8(d)	CHECK_SIGNED((d), 8)+#define is_s16(d)	CHECK_SIGNED((d), 16)+#define is_s20(d)	CHECK_SIGNED((d), 20)+#define is_s32(d)	((d) == (sljit_s32)(d))++static SLJIT_INLINE sljit_ins disp_s20(sljit_s32 d)+{+	SLJIT_ASSERT(is_s20(d));++	sljit_uw dh = (d >> 12) & 0xff;+	sljit_uw dl = (d << 8) & 0xfff00;+	return (dh | dl) << 8;+}++/* TODO(carenas): variadic macro is not strictly needed */+#define SLJIT_S390X_INSTRUCTION(op, ...) \+static SLJIT_INLINE sljit_ins op(__VA_ARGS__)++/* RR form instructions. */+#define SLJIT_S390X_RR(name, pattern) \+SLJIT_S390X_INSTRUCTION(name, sljit_gpr dst, sljit_gpr src) \+{ \+	return (pattern) | ((dst & 0xf) << 4) | (src & 0xf); \+}++/* AND */+SLJIT_S390X_RR(nr,   0x1400)++/* BRANCH AND SAVE */+SLJIT_S390X_RR(basr, 0x0d00)++/* BRANCH ON CONDITION */+SLJIT_S390X_RR(bcr,  0x0700) /* TODO(mundaym): type for mask? */++/* DIVIDE */+SLJIT_S390X_RR(dr,   0x1d00)++/* EXCLUSIVE OR */+SLJIT_S390X_RR(xr,   0x1700)++/* LOAD */+SLJIT_S390X_RR(lr,   0x1800)++/* LOAD COMPLEMENT */+SLJIT_S390X_RR(lcr,  0x1300)++/* OR */+SLJIT_S390X_RR(or,   0x1600)++#undef SLJIT_S390X_RR++/* RRE form instructions */+#define SLJIT_S390X_RRE(name, pattern) \+SLJIT_S390X_INSTRUCTION(name, sljit_gpr dst, sljit_gpr src) \+{ \+	return (pattern) | ((dst & 0xf) << 4) | (src & 0xf); \+}++/* AND */+SLJIT_S390X_RRE(ngr,   0xb9800000)++/* DIVIDE LOGICAL */+SLJIT_S390X_RRE(dlr,   0xb9970000)+SLJIT_S390X_RRE(dlgr,  0xb9870000)++/* DIVIDE SINGLE */+SLJIT_S390X_RRE(dsgr,  0xb90d0000)++/* EXCLUSIVE OR */+SLJIT_S390X_RRE(xgr,   0xb9820000)++/* LOAD */+SLJIT_S390X_RRE(lgr,   0xb9040000)+SLJIT_S390X_RRE(lgfr,  0xb9140000)++/* LOAD BYTE */+SLJIT_S390X_RRE(lbr,   0xb9260000)+SLJIT_S390X_RRE(lgbr,  0xb9060000)++/* LOAD COMPLEMENT */+SLJIT_S390X_RRE(lcgr,  0xb9030000)++/* LOAD HALFWORD */+SLJIT_S390X_RRE(lhr,   0xb9270000)+SLJIT_S390X_RRE(lghr,  0xb9070000)++/* LOAD LOGICAL */+SLJIT_S390X_RRE(llgfr, 0xb9160000)++/* LOAD LOGICAL CHARACTER */+SLJIT_S390X_RRE(llcr,  0xb9940000)+SLJIT_S390X_RRE(llgcr, 0xb9840000)++/* LOAD LOGICAL HALFWORD */+SLJIT_S390X_RRE(llhr,  0xb9950000)+SLJIT_S390X_RRE(llghr, 0xb9850000)++/* MULTIPLY LOGICAL */+SLJIT_S390X_RRE(mlgr,  0xb9860000)++/* MULTIPLY SINGLE */+SLJIT_S390X_RRE(msgfr, 0xb91c0000)++/* OR */+SLJIT_S390X_RRE(ogr,   0xb9810000)++/* SUBTRACT */+SLJIT_S390X_RRE(sgr,   0xb9090000)++#undef SLJIT_S390X_RRE++/* RI-a form instructions */+#define SLJIT_S390X_RIA(name, pattern, imm_type) \+SLJIT_S390X_INSTRUCTION(name, sljit_gpr reg, imm_type imm) \+{ \+	return (pattern) | ((reg & 0xf) << 20) | (imm & 0xffff); \+}++/* ADD HALFWORD IMMEDIATE */+SLJIT_S390X_RIA(aghi,  0xa70b0000, sljit_s16)++/* LOAD HALFWORD IMMEDIATE */+SLJIT_S390X_RIA(lhi,   0xa7080000, sljit_s16)+SLJIT_S390X_RIA(lghi,  0xa7090000, sljit_s16)++/* LOAD LOGICAL IMMEDIATE */+SLJIT_S390X_RIA(llihh, 0xa50c0000, sljit_u16)+SLJIT_S390X_RIA(llihl, 0xa50d0000, sljit_u16)+SLJIT_S390X_RIA(llilh, 0xa50e0000, sljit_u16)+SLJIT_S390X_RIA(llill, 0xa50f0000, sljit_u16)++/* MULTIPLY HALFWORD IMMEDIATE */+SLJIT_S390X_RIA(mhi,   0xa70c0000, sljit_s16)+SLJIT_S390X_RIA(mghi,  0xa70d0000, sljit_s16)++/* OR IMMEDIATE */+SLJIT_S390X_RIA(oilh,  0xa50a0000, sljit_u16)++#undef SLJIT_S390X_RIA++/* RIL-a form instructions (requires extended immediate facility) */+#define SLJIT_S390X_RILA(name, pattern, imm_type) \+SLJIT_S390X_INSTRUCTION(name, sljit_gpr reg, imm_type imm) \+{ \+	SLJIT_ASSERT(have_eimm()); \+	return (pattern) | ((sljit_ins)(reg & 0xf) << 36) | (imm & 0xffffffff); \+}++/* ADD IMMEDIATE */+SLJIT_S390X_RILA(agfi,  0xc20800000000, sljit_s32)++/* ADD IMMEDIATE HIGH */+SLJIT_S390X_RILA(aih,   0xcc0800000000, sljit_s32) /* TODO(mundaym): high-word facility? */++/* AND IMMEDIATE */+SLJIT_S390X_RILA(nihf,  0xc00a00000000, sljit_u32)++/* EXCLUSIVE OR IMMEDIATE */+SLJIT_S390X_RILA(xilf,  0xc00700000000, sljit_u32)++/* INSERT IMMEDIATE */+SLJIT_S390X_RILA(iihf,  0xc00800000000, sljit_u32)+SLJIT_S390X_RILA(iilf,  0xc00900000000, sljit_u32)++/* LOAD IMMEDIATE */+SLJIT_S390X_RILA(lgfi,  0xc00100000000, sljit_s32)++/* LOAD LOGICAL IMMEDIATE */+SLJIT_S390X_RILA(llihf, 0xc00e00000000, sljit_u32)+SLJIT_S390X_RILA(llilf, 0xc00f00000000, sljit_u32)++/* SUBTRACT LOGICAL IMMEDIATE */+SLJIT_S390X_RILA(slfi,  0xc20500000000, sljit_u32)++#undef SLJIT_S390X_RILA++/* RX-a form instructions */+#define SLJIT_S390X_RXA(name, pattern) \+SLJIT_S390X_INSTRUCTION(name, sljit_gpr r, sljit_u16 d, sljit_gpr x, sljit_gpr b) \+{ \+	sljit_ins ri, xi, bi, di; \+\+	SLJIT_ASSERT((d & 0xfff) == d); \+	ri = (sljit_ins)(r & 0xf) << 20; \+	xi = (sljit_ins)(x & 0xf) << 16; \+	bi = (sljit_ins)(b & 0xf) << 12; \+	di = (sljit_ins)(d & 0xfff); \+\+	return (pattern) | ri | xi | bi | di; \+}++/* LOAD */+SLJIT_S390X_RXA(l,   0x58000000)++/* LOAD ADDRESS */+SLJIT_S390X_RXA(la,  0x41000000)++/* LOAD HALFWORD */+SLJIT_S390X_RXA(lh,  0x48000000)++/* MULTIPLY SINGLE */+SLJIT_S390X_RXA(ms,  0x71000000)++/* STORE */+SLJIT_S390X_RXA(st,  0x50000000)++/* STORE CHARACTER */+SLJIT_S390X_RXA(stc, 0x42000000)++/* STORE HALFWORD */+SLJIT_S390X_RXA(sth, 0x40000000)++#undef SLJIT_S390X_RXA++/* RXY-a instructions */+#define SLJIT_S390X_RXYA(name, pattern, cond) \+SLJIT_S390X_INSTRUCTION(name, sljit_gpr r, sljit_s32 d, sljit_gpr x, sljit_gpr b) \+{ \+	sljit_ins ri, xi, bi, di; \+\+	SLJIT_ASSERT(cond); \+	ri = (sljit_ins)(r & 0xf) << 36; \+	xi = (sljit_ins)(x & 0xf) << 32; \+	bi = (sljit_ins)(b & 0xf) << 28; \+	di = disp_s20(d); \+\+	return (pattern) | ri | xi | bi | di; \+}++/* LOAD */+SLJIT_S390X_RXYA(ly,    0xe30000000058, have_ldisp())+SLJIT_S390X_RXYA(lg,    0xe30000000004, 1)+SLJIT_S390X_RXYA(lgf,   0xe30000000014, 1)++/* LOAD BYTE */+SLJIT_S390X_RXYA(lb,    0xe30000000076, have_ldisp())+SLJIT_S390X_RXYA(lgb,   0xe30000000077, have_ldisp())++/* LOAD HALFWORD */+SLJIT_S390X_RXYA(lhy,   0xe30000000078, have_ldisp())+SLJIT_S390X_RXYA(lgh,   0xe30000000015, 1)++/* LOAD LOGICAL */+SLJIT_S390X_RXYA(llgf,  0xe30000000016, 1)++/* LOAD LOGICAL CHARACTER */+SLJIT_S390X_RXYA(llc,   0xe30000000094, have_eimm())+SLJIT_S390X_RXYA(llgc,  0xe30000000090, 1)++/* LOAD LOGICAL HALFWORD */+SLJIT_S390X_RXYA(llh,   0xe30000000095, have_eimm())+SLJIT_S390X_RXYA(llgh,  0xe30000000091, 1)++/* MULTIPLY SINGLE */+SLJIT_S390X_RXYA(msy,   0xe30000000051, have_ldisp())+SLJIT_S390X_RXYA(msg,   0xe3000000000c, 1)++/* STORE */+SLJIT_S390X_RXYA(sty,   0xe30000000050, have_ldisp())+SLJIT_S390X_RXYA(stg,   0xe30000000024, 1)++/* STORE CHARACTER */+SLJIT_S390X_RXYA(stcy,  0xe30000000072, have_ldisp())++/* STORE HALFWORD */+SLJIT_S390X_RXYA(sthy,  0xe30000000070, have_ldisp())++#undef SLJIT_S390X_RXYA++/* RSY-a instructions */+#define SLJIT_S390X_RSYA(name, pattern, cond) \+SLJIT_S390X_INSTRUCTION(name, sljit_gpr dst, sljit_gpr src, sljit_sw d, sljit_gpr b) \+{ \+	sljit_ins r1, r3, b2, d2; \+\+	SLJIT_ASSERT(cond); \+	r1 = (sljit_ins)(dst & 0xf) << 36; \+	r3 = (sljit_ins)(src & 0xf) << 32; \+	b2 = (sljit_ins)(b & 0xf) << 28; \+	d2 = disp_s20(d); \+\+	return (pattern) | r1 | r3 | b2 | d2; \+}++/* LOAD MULTIPLE */+SLJIT_S390X_RSYA(lmg,   0xeb0000000004, 1)++/* SHIFT LEFT LOGICAL */+SLJIT_S390X_RSYA(sllg,  0xeb000000000d, 1)++/* SHIFT RIGHT SINGLE */+SLJIT_S390X_RSYA(srag,  0xeb000000000a, 1)++/* STORE MULTIPLE */+SLJIT_S390X_RSYA(stmg,  0xeb0000000024, 1)++#undef SLJIT_S390X_RSYA++/* RIE-f instructions (require general-instructions-extension facility) */+#define SLJIT_S390X_RIEF(name, pattern) \+SLJIT_S390X_INSTRUCTION(name, sljit_gpr dst, sljit_gpr src, sljit_u8 start, sljit_u8 end, sljit_u8 rot) \+{ \+	sljit_ins r1, r2, i3, i4, i5; \+\+	SLJIT_ASSERT(have_genext()); \+	r1 = (sljit_ins)(dst & 0xf) << 36; \+	r2 = (sljit_ins)(src & 0xf) << 32; \+	i3 = (sljit_ins)start << 24; \+	i4 = (sljit_ins)end << 16; \+	i5 = (sljit_ins)rot << 8; \+\+	return (pattern) | r1 | r2 | i3 | i4 | i5; \+}++/* ROTATE THEN AND SELECTED BITS */+/* SLJIT_S390X_RIEF(rnsbg,  0xec0000000054) */++/* ROTATE THEN EXCLUSIVE OR SELECTED BITS */+/* SLJIT_S390X_RIEF(rxsbg,  0xec0000000057) */++/* ROTATE THEN OR SELECTED BITS */+SLJIT_S390X_RIEF(rosbg,  0xec0000000056)++/* ROTATE THEN INSERT SELECTED BITS */+/* SLJIT_S390X_RIEF(risbg,  0xec0000000055) */+/* SLJIT_S390X_RIEF(risbgn, 0xec0000000059) */++/* ROTATE THEN INSERT SELECTED BITS HIGH */+SLJIT_S390X_RIEF(risbhg, 0xec000000005d)++/* ROTATE THEN INSERT SELECTED BITS LOW */+/* SLJIT_S390X_RIEF(risblg, 0xec0000000051) */++#undef SLJIT_S390X_RIEF++/* RRF-c instructions (require load/store-on-condition 1 facility) */+#define SLJIT_S390X_RRFC(name, pattern) \+SLJIT_S390X_INSTRUCTION(name, sljit_gpr dst, sljit_gpr src, sljit_uw mask) \+{ \+	sljit_ins r1, r2, m3; \+\+	SLJIT_ASSERT(have_lscond1()); \+	r1 = (sljit_ins)(dst & 0xf) << 4; \+	r2 = (sljit_ins)(src & 0xf); \+	m3 = (sljit_ins)(mask & 0xf) << 12; \+\+	return (pattern) | m3 | r1 | r2; \+}++/* LOAD HALFWORD IMMEDIATE ON CONDITION */+SLJIT_S390X_RRFC(locr,  0xb9f20000)+SLJIT_S390X_RRFC(locgr, 0xb9e20000)++#undef SLJIT_S390X_RRFC++/* RIE-g instructions (require load/store-on-condition 2 facility) */+#define SLJIT_S390X_RIEG(name, pattern) \+SLJIT_S390X_INSTRUCTION(name, sljit_gpr reg, sljit_sw imm, sljit_uw mask) \+{ \+	sljit_ins r1, m3, i2; \+\+	SLJIT_ASSERT(have_lscond2()); \+	r1 = (sljit_ins)(reg & 0xf) << 36; \+	m3 = (sljit_ins)(mask & 0xf) << 32; \+	i2 = (sljit_ins)(imm & 0xffffL) << 16; \+\+	return (pattern) | r1 | m3 | i2; \+}++/* LOAD HALFWORD IMMEDIATE ON CONDITION */+SLJIT_S390X_RIEG(lochi,  0xec0000000042)+SLJIT_S390X_RIEG(locghi, 0xec0000000046)++#undef SLJIT_S390X_RIEG++#define SLJIT_S390X_RILB(name, pattern, cond) \+SLJIT_S390X_INSTRUCTION(name, sljit_gpr reg, sljit_sw ri) \+{ \+	sljit_ins r1, ri2; \+\+	SLJIT_ASSERT(cond); \+	r1 = (sljit_ins)(reg & 0xf) << 36; \+	ri2 = (sljit_ins)(ri & 0xffffffff); \+\+	return (pattern) | r1 | ri2; \+}++/* BRANCH RELATIVE AND SAVE LONG */+SLJIT_S390X_RILB(brasl, 0xc00500000000, 1)++/* LOAD ADDRESS RELATIVE LONG */+SLJIT_S390X_RILB(larl,  0xc00000000000, 1)++/* LOAD RELATIVE LONG */+SLJIT_S390X_RILB(lgrl,  0xc40800000000, have_genext())++#undef SLJIT_S390X_RILB++SLJIT_S390X_INSTRUCTION(br, sljit_gpr target)+{+	return 0x07f0 | target;+}++SLJIT_S390X_INSTRUCTION(brc, sljit_uw mask, sljit_sw target)+{+	sljit_ins m1 = (sljit_ins)(mask & 0xf) << 20;+	sljit_ins ri2 = (sljit_ins)target & 0xffff;+	return 0xa7040000L | m1 | ri2;+}++SLJIT_S390X_INSTRUCTION(brcl, sljit_uw mask, sljit_sw target)+{+	sljit_ins m1 = (sljit_ins)(mask & 0xf) << 36;+	sljit_ins ri2 = (sljit_ins)target & 0xffffffff;+	return 0xc00400000000L | m1 | ri2;+}++SLJIT_S390X_INSTRUCTION(flogr, sljit_gpr dst, sljit_gpr src)+{+	sljit_ins r1 = ((sljit_ins)dst & 0xf) << 8;+	sljit_ins r2 = ((sljit_ins)src & 0xf);+	SLJIT_ASSERT(have_eimm());+	return 0xb9830000 | r1 | r2;+}++/* INSERT PROGRAM MASK */+SLJIT_S390X_INSTRUCTION(ipm, sljit_gpr dst)+{+	return 0xb2220000 | ((sljit_ins)(dst & 0xf) << 4);+}++/* SET PROGRAM MASK */+SLJIT_S390X_INSTRUCTION(spm, sljit_gpr dst)+{+	return 0x0400 | ((sljit_ins)(dst & 0xf) << 4);+}++/* ROTATE THEN INSERT SELECTED BITS HIGH (ZERO) */+SLJIT_S390X_INSTRUCTION(risbhgz, sljit_gpr dst, sljit_gpr src, sljit_u8 start, sljit_u8 end, sljit_u8 rot)+{+	return risbhg(dst, src, start, 0x8 | end, rot);+}++#undef SLJIT_S390X_INSTRUCTION++static sljit_s32 update_zero_overflow(struct sljit_compiler *compiler, sljit_s32 op, sljit_gpr dst_r)+{+	/* Condition codes: bits 18 and 19.+	   Transformation:+	     0 (zero and no overflow) : unchanged+	     1 (non-zero and no overflow) : unchanged+	     2 (zero and overflow) : decreased by 1+	     3 (non-zero and overflow) : decreased by 1 if non-zero */+	FAIL_IF(push_inst(compiler, brc(0xc, 2 + 2 + ((op & SLJIT_I32_OP) ? 1 : 2) + 2 + 3 + 1)));+	FAIL_IF(push_inst(compiler, ipm(flag_r)));+	FAIL_IF(push_inst(compiler, (op & SLJIT_I32_OP) ? or(dst_r, dst_r) : ogr(dst_r, dst_r)));+	FAIL_IF(push_inst(compiler, brc(0x8, 2 + 3)));+	FAIL_IF(push_inst(compiler, slfi(flag_r, 0x10000000)));+	FAIL_IF(push_inst(compiler, spm(flag_r)));+	return SLJIT_SUCCESS;+}++/* load 64-bit immediate into register without clobbering flags */+static sljit_s32 push_load_imm_inst(struct sljit_compiler *compiler, sljit_gpr target, sljit_sw v)+{+	/* 4 byte instructions */+	if (is_s16(v))+		return push_inst(compiler, lghi(target, (sljit_s16)v));++	if ((sljit_uw)v == (v & 0x000000000000ffffU))+		return push_inst(compiler, llill(target, (sljit_u16)v));++	if ((sljit_uw)v == (v & 0x00000000ffff0000U))+		return push_inst(compiler, llilh(target, (sljit_u16)(v >> 16)));++	if ((sljit_uw)v == (v & 0x0000ffff00000000U))+		return push_inst(compiler, llihl(target, (sljit_u16)(v >> 32)));++	if ((sljit_uw)v == (v & 0xffff000000000000U))+		return push_inst(compiler, llihh(target, (sljit_u16)(v >> 48)));++	/* 6 byte instructions (requires extended immediate facility) */+	if (have_eimm()) {+		if (is_s32(v))+			return push_inst(compiler, lgfi(target, (sljit_s32)v));++		if ((sljit_uw)v == (v & 0x00000000ffffffffU))+			return push_inst(compiler, llilf(target, (sljit_u32)v));++		if ((sljit_uw)v == (v & 0xffffffff00000000U))+			return push_inst(compiler, llihf(target, (sljit_u32)(v >> 32)));++		FAIL_IF(push_inst(compiler, llilf(target, (sljit_u32)v)));+		return push_inst(compiler, iihf(target, (sljit_u32)(v >> 32)));+	}+	/* TODO(mundaym): instruction sequences that don't use extended immediates */+	abort();+}++struct addr {+	sljit_gpr base;+	sljit_gpr index;+	sljit_sw  offset;+};++/* transform memory operand into D(X,B) form with a signed 20-bit offset */+static sljit_s32 make_addr_bxy(struct sljit_compiler *compiler,+	struct addr *addr, sljit_s32 mem, sljit_sw off,+	sljit_gpr tmp /* clobbered, must not be r0 */)+{+	sljit_gpr base = r0;+	sljit_gpr index = r0;++	SLJIT_ASSERT(tmp != r0);+	if (mem & REG_MASK)+		base = gpr(mem & REG_MASK);++	if (mem & OFFS_REG_MASK) {+		index = gpr(OFFS_REG(mem));+		if (off != 0) {+			/* shift and put the result into tmp */+			SLJIT_ASSERT(0 <= off && off < 64);+			FAIL_IF(push_inst(compiler, sllg(tmp, index, off, 0)));+			index = tmp;+			off = 0; /* clear offset */+		}+	}+	else if (!is_s20(off)) {+		FAIL_IF(push_load_imm_inst(compiler, tmp, off));+		index = tmp;+		off = 0; /* clear offset */+	}+	addr->base = base;+	addr->index = index;+	addr->offset = off;+	return SLJIT_SUCCESS;+}++/* transform memory operand into D(X,B) form with an unsigned 12-bit offset */+static sljit_s32 make_addr_bx(struct sljit_compiler *compiler,+	struct addr *addr, sljit_s32 mem, sljit_sw off,+	sljit_gpr tmp /* clobbered, must not be r0 */)+{+	sljit_gpr base = r0;+	sljit_gpr index = r0;++	SLJIT_ASSERT(tmp != r0);+	if (mem & REG_MASK)+		base = gpr(mem & REG_MASK);++	if (mem & OFFS_REG_MASK) {+		index = gpr(OFFS_REG(mem));+		if (off != 0) {+			/* shift and put the result into tmp */+			SLJIT_ASSERT(0 <= off && off < 64);+			FAIL_IF(push_inst(compiler, sllg(tmp, index, off, 0)));+			index = tmp;+			off = 0; /* clear offset */+		}+	}+	else if (!is_u12(off)) {+		FAIL_IF(push_load_imm_inst(compiler, tmp, off));+		index = tmp;+		off = 0; /* clear offset */+	}+	addr->base = base;+	addr->index = index;+	addr->offset = off;+	return SLJIT_SUCCESS;+}++#define EVAL(op, r, addr) op(r, addr.offset, addr.index, addr.base)+#define WHEN(cond, r, i1, i2, addr) \+	(cond) ? EVAL(i1, r, addr) : EVAL(i2, r, addr)++/* May clobber tmp1. */+static sljit_s32 load_word(struct sljit_compiler *compiler, sljit_gpr dst,+		sljit_s32 src, sljit_sw srcw,+		sljit_s32 is_32bit)+{+	struct addr addr;+	sljit_ins ins;++	SLJIT_ASSERT(src & SLJIT_MEM);+	if (have_ldisp() || !is_32bit)+		FAIL_IF(make_addr_bxy(compiler, &addr, src, srcw, tmp1));+	else+		FAIL_IF(make_addr_bx(compiler, &addr, src, srcw, tmp1));++	if (is_32bit)+		ins = WHEN(is_u12(addr.offset), dst, l, ly, addr);+	else+		ins = lg(dst, addr.offset, addr.index, addr.base);++	return push_inst(compiler, ins);+}++/* May clobber tmp1. */+static sljit_s32 store_word(struct sljit_compiler *compiler, sljit_gpr src,+		sljit_s32 dst, sljit_sw dstw,+		sljit_s32 is_32bit)+{+	struct addr addr;+	sljit_ins ins;++	SLJIT_ASSERT(dst & SLJIT_MEM);+	if (have_ldisp() || !is_32bit)+		FAIL_IF(make_addr_bxy(compiler, &addr, dst, dstw, tmp1));+	else+		FAIL_IF(make_addr_bx(compiler, &addr, dst, dstw, tmp1));++	if (is_32bit)+		ins = WHEN(is_u12(addr.offset), src, st, sty, addr);+	else+		ins = stg(src, addr.offset, addr.index, addr.base);++	return push_inst(compiler, ins);+}++#undef WHEN++static sljit_s32 emit_move(struct sljit_compiler *compiler,+	sljit_gpr dst_r,+	sljit_s32 src, sljit_sw srcw)+{+	SLJIT_ASSERT(!SLOW_IS_REG(src) || dst_r != gpr(src & REG_MASK));++	if (src & SLJIT_IMM)+		return push_load_imm_inst(compiler, dst_r, srcw);++	if (src & SLJIT_MEM)+		return load_word(compiler, dst_r, src, srcw, (compiler->mode & SLJIT_I32_OP) != 0);++	sljit_gpr src_r = gpr(src & REG_MASK);+	return push_inst(compiler, (compiler->mode & SLJIT_I32_OP) ? lr(dst_r, src_r) : lgr(dst_r, src_r));+}++static sljit_s32 emit_rr(struct sljit_compiler *compiler, sljit_ins ins,+	sljit_s32 dst,+	sljit_s32 src1, sljit_sw src1w,+	sljit_s32 src2, sljit_sw src2w)+{+	sljit_gpr dst_r = tmp0;+	sljit_gpr src_r = tmp1;+	sljit_s32 needs_move = 1;++	if (SLOW_IS_REG(dst)) {+		dst_r = gpr(dst & REG_MASK);++		if (dst == src1)+			needs_move = 0;+		else if (dst == src2) {+			dst_r = tmp0;+			needs_move = 2;+		}+	}++	if (needs_move)+		FAIL_IF(emit_move(compiler, dst_r, src1, src1w));++	if (FAST_IS_REG(src2))+		src_r = gpr(src2 & REG_MASK);+	else+		FAIL_IF(emit_move(compiler, tmp1, src2, src2w));++	FAIL_IF(push_inst(compiler, ins | (dst_r << 4) | src_r));++	if (needs_move != 2)+		return SLJIT_SUCCESS;++	dst_r = gpr(dst & REG_MASK);+	return push_inst(compiler, (compiler->mode & SLJIT_I32_OP) ? lr(dst_r, tmp0) : lgr(dst_r, tmp0));+}++static sljit_s32 emit_rrf(struct sljit_compiler *compiler, sljit_ins ins,+	sljit_s32 dst,+	sljit_s32 src1, sljit_sw src1w,+	sljit_s32 src2, sljit_sw src2w)+{+	sljit_gpr dst_r = SLOW_IS_REG(dst) ? gpr(dst & REG_MASK) : tmp0;+	sljit_gpr src1_r = tmp0;+	sljit_gpr src2_r = tmp1;++	if (FAST_IS_REG(src1))+		src1_r = gpr(src1 & REG_MASK);+	else+		FAIL_IF(emit_move(compiler, tmp0, src1, src1w));++	if (FAST_IS_REG(src2))+		src2_r = gpr(src2 & REG_MASK);+	else+		FAIL_IF(emit_move(compiler, tmp1, src2, src2w));++	return push_inst(compiler, ins | (dst_r << 4) | src1_r | (src2_r << 12));+}++typedef enum {+	RI_A,+	RIL_A,+} emit_ril_type;++static sljit_s32 emit_ri(struct sljit_compiler *compiler, sljit_ins ins,+	sljit_s32 dst,+	sljit_s32 src1, sljit_sw src1w,+	sljit_sw src2w,+	emit_ril_type type)+{+	sljit_gpr dst_r = tmp0;+	sljit_s32 needs_move = 1;++	if (SLOW_IS_REG(dst)) {+		dst_r = gpr(dst & REG_MASK);++		if (dst == src1)+			needs_move = 0;+	}++	if (needs_move)+		FAIL_IF(emit_move(compiler, dst_r, src1, src1w));++	if (type == RIL_A)+		return push_inst(compiler, ins | (dst_r << 36) | (src2w & 0xffffffff));+	return push_inst(compiler, ins | (dst_r << 20) | (src2w & 0xffff));+}++static sljit_s32 emit_rie_d(struct sljit_compiler *compiler, sljit_ins ins,+	sljit_s32 dst,+	sljit_s32 src1, sljit_sw src1w,+	sljit_sw src2w)+{+	sljit_gpr dst_r = SLOW_IS_REG(dst) ? gpr(dst & REG_MASK) : tmp0;+	sljit_gpr src_r = tmp0;++	if (!SLOW_IS_REG(src1))+		FAIL_IF(emit_move(compiler, tmp0, src1, src1w));+	else+		src_r = gpr(src1 & REG_MASK);++	return push_inst(compiler, ins | (dst_r << 36) | (src_r << 32) | (src2w & 0xffff) << 16);+}++typedef enum {+	RX_A,+	RXY_A,+} emit_rx_type;++static sljit_s32 emit_rx(struct sljit_compiler *compiler, sljit_ins ins,+	sljit_s32 dst,+	sljit_s32 src1, sljit_sw src1w,+	sljit_s32 src2, sljit_sw src2w,+	emit_rx_type type)+{+	sljit_gpr dst_r = tmp0;+	sljit_s32 needs_move = 1;+	sljit_gpr base, index;++	SLJIT_ASSERT(src2 & SLJIT_MEM);++	if (SLOW_IS_REG(dst)) {+		dst_r = gpr(dst);++		if (dst == src1)+			needs_move = 0;+		else if (dst == (src2 & REG_MASK) || (dst == OFFS_REG(src2))) {+			dst_r = tmp0;+			needs_move = 2;+		}+	}++	if (needs_move)+		FAIL_IF(emit_move(compiler, dst_r, src1, src1w));++	base = gpr(src2 & REG_MASK);+	index = tmp0;++	if (src2 & OFFS_REG_MASK) {+		index = gpr(OFFS_REG(src2));++		if (src2w != 0) {+			FAIL_IF(push_inst(compiler, sllg(tmp1, index, src2w & 0x3, 0)));+			src2w = 0;+			index = tmp1;+		}+	} else if ((type == RX_A && !is_u12(src2w)) || (type == RXY_A && !is_s20(src2w))) {+		FAIL_IF(push_load_imm_inst(compiler, tmp1, src2w));++		if (src2 & REG_MASK)+			index = tmp1;+		else+			base = tmp1;+		src2w = 0;+	}++	if (type == RX_A)+		ins |= (dst_r << 20) | (index << 16) | (base << 12) | src2w;+	else+		ins |= (dst_r << 36) | (index << 32) | (base << 28) | disp_s20(src2w);++	FAIL_IF(push_inst(compiler, ins));++	if (needs_move != 2)+		return SLJIT_SUCCESS;++	dst_r = gpr(dst);+	return push_inst(compiler, (compiler->mode & SLJIT_I32_OP) ? lr(dst_r, tmp0) : lgr(dst_r, tmp0));+}++static sljit_s32 emit_siy(struct sljit_compiler *compiler, sljit_ins ins,+	sljit_s32 dst, sljit_sw dstw,+	sljit_sw srcw)+{+	SLJIT_ASSERT(dst & SLJIT_MEM);++	sljit_gpr dst_r = tmp1;++	if (dst & OFFS_REG_MASK) {+		sljit_gpr index = tmp1;++		if ((dstw & 0x3) == 0)+			index = gpr(OFFS_REG(dst));+		else+			FAIL_IF(push_inst(compiler, sllg(tmp1, index, dstw & 0x3, 0)));++		FAIL_IF(push_inst(compiler, la(tmp1, 0, dst_r, index)));+		dstw = 0;+	}+	else if (!is_s20(dstw)) {+		FAIL_IF(push_load_imm_inst(compiler, tmp1, dstw));++		if (dst & REG_MASK)+			FAIL_IF(push_inst(compiler, la(tmp1, 0, dst_r, tmp1)));++		dstw = 0;+	}+	else+		dst_r = gpr(dst & REG_MASK);++	return push_inst(compiler, ins | ((srcw & 0xff) << 32) | (dst_r << 28) | disp_s20(dstw));+}++struct ins_forms {+	sljit_ins op_r;+	sljit_ins op_gr;+	sljit_ins op_rk;+	sljit_ins op_grk;+	sljit_ins op;+	sljit_ins op_y;+	sljit_ins op_g;+};++static sljit_s32 emit_commutative(struct sljit_compiler *compiler, const struct ins_forms *forms,+	sljit_s32 dst, sljit_sw dstw,+	sljit_s32 src1, sljit_sw src1w,+	sljit_s32 src2, sljit_sw src2w)+{+	sljit_s32 mode = compiler->mode;+	sljit_ins ins, ins_k;++	if ((src1 | src2) & SLJIT_MEM) {+		sljit_ins ins12, ins20;++		if (mode & SLJIT_I32_OP) {+			ins12 = forms->op;+			ins20 = forms->op_y;+		}+		else {+			ins12 = 0;+			ins20 = forms->op_g;+		}++		if (ins12 && ins20) {+			/* Extra instructions needed for address computation can be executed independently. */+			if ((src2 & SLJIT_MEM) && (!(src1 & SLJIT_MEM)+					|| ((src1 & OFFS_REG_MASK) ? (src1w & 0x3) == 0 : is_s20(src1w)))) {+				if ((src2 & OFFS_REG_MASK) || is_u12(src2w) || !is_s20(src2w))+					return emit_rx(compiler, ins12, dst, src1, src1w, src2, src2w, RX_A);++				return emit_rx(compiler, ins20, dst, src1, src1w, src2, src2w, RXY_A);+			}++			if (src1 & SLJIT_MEM) {+				if ((src1 & OFFS_REG_MASK) || is_u12(src1w) || !is_s20(src1w))+					return emit_rx(compiler, ins12, dst, src2, src2w, src1, src1w, RX_A);++				return emit_rx(compiler, ins20, dst, src2, src2w, src1, src1w, RXY_A);+			}+		}+		else if (ins12 || ins20) {+			emit_rx_type rx_type;++			if (ins12) {+				rx_type = RX_A;+				ins = ins12;+			}+			else {+				rx_type = RXY_A;+				ins = ins20;+			}++			if ((src2 & SLJIT_MEM) && (!(src1 & SLJIT_MEM)+					|| ((src1 & OFFS_REG_MASK) ? (src1w & 0x3) == 0 : (rx_type == RX_A ? is_u12(src1w) : is_s20(src1w)))))+				return emit_rx(compiler, ins, dst, src1, src1w, src2, src2w, rx_type);++			if (src1 & SLJIT_MEM)+				return emit_rx(compiler, ins, dst, src2, src2w, src1, src1w, rx_type);+		}+	}++	if (mode & SLJIT_I32_OP) {+		ins = forms->op_r;+		ins_k = forms->op_rk;+	}+	else {+		ins = forms->op_gr;+		ins_k = forms->op_grk;+	}++	SLJIT_ASSERT(ins != 0 || ins_k != 0);++	if (ins && SLOW_IS_REG(dst)) {+		if (dst == src1)+			return emit_rr(compiler, ins, dst, src1, src1w, src2, src2w);++		if (dst == src2)+			return emit_rr(compiler, ins, dst, src2, src2w, src1, src1w);+	}++	if (ins_k == 0)+		return emit_rr(compiler, ins, dst, src1, src1w, src2, src2w);++	return emit_rrf(compiler, ins_k, dst, src1, src1w, src2, src2w);+}++static sljit_s32 emit_non_commutative(struct sljit_compiler *compiler, const struct ins_forms *forms,+	sljit_s32 dst, sljit_sw dstw,+	sljit_s32 src1, sljit_sw src1w,+	sljit_s32 src2, sljit_sw src2w)+{+	sljit_s32 mode = compiler->mode;+	sljit_ins ins;++	if (src2 & SLJIT_MEM) {+		sljit_ins ins12, ins20;++		if (mode & SLJIT_I32_OP) {+			ins12 = forms->op;+			ins20 = forms->op_y;+		}+		else {+			ins12 = 0;+			ins20 = forms->op_g;+		}++		if (ins12 && ins20) {+			if ((src2 & OFFS_REG_MASK) || is_u12(src2w) || !is_s20(src2w))+				return emit_rx(compiler, ins12, dst, src1, src1w, src2, src2w, RX_A);++			return emit_rx(compiler, ins20, dst, src1, src1w, src2, src2w, RXY_A);+		}+		else if (ins12)+			return emit_rx(compiler, ins12, dst, src1, src1w, src2, src2w, RX_A);+		else if (ins20)+			return emit_rx(compiler, ins20, dst, src1, src1w, src2, src2w, RXY_A);+	}++	ins = (mode & SLJIT_I32_OP) ? forms->op_rk : forms->op_grk;++	if (ins == 0 || (SLOW_IS_REG(dst) && dst == src1))+		return emit_rr(compiler, (mode & SLJIT_I32_OP) ? forms->op_r : forms->op_gr, dst, src1, src1w, src2, src2w);++	return emit_rrf(compiler, ins, dst, src1, src1w, src2, src2w);+}++SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compiler)+{+	struct sljit_label *label;+	struct sljit_jump *jump;+	struct sljit_s390x_const *const_;+	struct sljit_put_label *put_label;+	sljit_sw executable_offset;+	sljit_uw ins_size = 0; /* instructions */+	sljit_uw pool_size = 0; /* literal pool */+	sljit_uw pad_size;+	sljit_uw i, j = 0;+	struct sljit_memory_fragment *buf;+	void *code, *code_ptr;+	sljit_uw *pool, *pool_ptr;++	sljit_uw source;+	sljit_sw offset; /* TODO(carenas): only need 32 bit */++	CHECK_ERROR_PTR();+	CHECK_PTR(check_sljit_generate_code(compiler));+	reverse_buf(compiler);++	/* branch handling */+	label = compiler->labels;+	jump = compiler->jumps;+	put_label = compiler->put_labels;++	/* TODO(carenas): compiler->executable_size could be calculated+         *                before to avoid the following loop (except for+         *                pool_size)+         */+	/* calculate the size of the code */+	for (buf = compiler->buf; buf != NULL; buf = buf->next) {+		sljit_uw len = buf->used_size / sizeof(sljit_ins);+		sljit_ins *ibuf = (sljit_ins *)buf->memory;+		for (i = 0; i < len; ++i, ++j) {+			sljit_ins ins = ibuf[i];++			/* TODO(carenas): instruction tag vs size/addr == j+			 * using instruction tags for const is creative+			 * but unlike all other architectures, and is not+			 * done consistently for all other objects.+			 * This might need reviewing later.+			 */+			if (ins & sljit_ins_const) {+				pool_size += sizeof(*pool);+				ins &= ~sljit_ins_const;+			}+			if (label && label->size == j) {+				label->size = ins_size;+				label = label->next;+			}+			if (jump && jump->addr == j) {+				if ((jump->flags & SLJIT_REWRITABLE_JUMP) || (jump->flags & JUMP_ADDR)) {+					/* encoded: */+					/*   brasl %r14, <rel_addr> (or brcl <mask>, <rel_addr>) */+					/* replace with: */+					/*   lgrl %r1, <pool_addr> */+					/*   bras %r14, %r1 (or bcr <mask>, %r1) */+					pool_size += sizeof(*pool);+					ins_size += 2;+				}+				jump = jump->next;+			}+			if (put_label && put_label->addr == j) {+				pool_size += sizeof(*pool);+				put_label = put_label->next;+			}+			ins_size += sizeof_ins(ins);+		}+	}++	/* emit trailing label */+	if (label && label->size == j) {+		label->size = ins_size;+		label = label->next;+	}++	SLJIT_ASSERT(!label);+	SLJIT_ASSERT(!jump);+	SLJIT_ASSERT(!put_label);++	/* pad code size to 8 bytes so is accessible with half word offsets */+	/* the literal pool needs to be doubleword aligned */+	pad_size = ((ins_size + 7UL) & ~7UL) - ins_size;+	SLJIT_ASSERT(pad_size < 8UL);++	/* allocate target buffer */+	code = SLJIT_MALLOC_EXEC(ins_size + pad_size + pool_size,+					compiler->exec_allocator_data);+	PTR_FAIL_WITH_EXEC_IF(code);+	code_ptr = code;+	executable_offset = SLJIT_EXEC_OFFSET(code);++	/* TODO(carenas): pool is optional, and the ABI recommends it to+         *                be created before the function code, instead of+         *                globally; if generated code is too big could+         *                need offsets bigger than 32bit words and asser()+         */+	pool = (sljit_uw *)((sljit_uw)code + ins_size + pad_size);+	pool_ptr = pool;+	const_ = (struct sljit_s390x_const *)compiler->consts;++	/* update label addresses */+	label = compiler->labels;+	while (label) {+		label->addr = (sljit_uw)SLJIT_ADD_EXEC_OFFSET(+			(sljit_uw)code_ptr + label->size, executable_offset);+		label = label->next;+	}++	/* reset jumps */+	jump = compiler->jumps;+	put_label = compiler->put_labels;++	/* emit the code */+	j = 0;+	for (buf = compiler->buf; buf != NULL; buf = buf->next) {+		sljit_uw len = buf->used_size / sizeof(sljit_ins);+		sljit_ins *ibuf = (sljit_ins *)buf->memory;+		for (i = 0; i < len; ++i, ++j) {+			sljit_ins ins = ibuf[i];+			if (ins & sljit_ins_const) {+				/* clear the const tag */+				ins &= ~sljit_ins_const;++				/* update instruction with relative address of constant */+				source = (sljit_uw)code_ptr;+				offset = (sljit_uw)pool_ptr - source;+				SLJIT_ASSERT(!(offset & 1));+				offset >>= 1; /* halfword (not byte) offset */+				SLJIT_ASSERT(is_s32(offset));+				ins |= (sljit_ins)offset & 0xffffffff;++				/* update address */+				const_->const_.addr = (sljit_uw)pool_ptr;++				/* store initial value into pool and update pool address */+				*(pool_ptr++) = const_->init_value;++				/* move to next constant */+				const_ = (struct sljit_s390x_const *)const_->const_.next;+			}+			if (jump && jump->addr == j) {+				sljit_sw target = (jump->flags & JUMP_LABEL) ? jump->u.label->addr : jump->u.target;+				if ((jump->flags & SLJIT_REWRITABLE_JUMP) || (jump->flags & JUMP_ADDR)) {+					jump->addr = (sljit_uw)pool_ptr;++					/* load address into tmp1 */+					source = (sljit_uw)SLJIT_ADD_EXEC_OFFSET(code_ptr, executable_offset);+					offset = (sljit_uw)SLJIT_ADD_EXEC_OFFSET(pool_ptr, executable_offset) - source;+					SLJIT_ASSERT(!(offset & 1));+					offset >>= 1;+					SLJIT_ASSERT(is_s32(offset));+					encode_inst(&code_ptr,+						lgrl(tmp1, offset & 0xffffffff));++					/* store jump target into pool and update pool address */+					*(pool_ptr++) = target;++					/* branch to tmp1 */+					sljit_ins op = (ins >> 32) & 0xf;+					sljit_ins arg = (ins >> 36) & 0xf;+					switch (op) {+					case 4: /* brcl -> bcr */+						ins = bcr(arg, tmp1);+						break;+					case 5: /* brasl -> basr */+						ins = basr(arg, tmp1);+						break;+					default:+						abort();+					}+				}+				else {+					jump->addr = (sljit_uw)code_ptr + 2;+					source = (sljit_uw)SLJIT_ADD_EXEC_OFFSET(code_ptr, executable_offset);+					offset = target - source;++					/* offset must be halfword aligned */+					SLJIT_ASSERT(!(offset & 1));+					offset >>= 1;+					SLJIT_ASSERT(is_s32(offset)); /* TODO(mundaym): handle arbitrary offsets */++					/* patch jump target */+					ins |= (sljit_ins)offset & 0xffffffff;+				}+				jump = jump->next;+			}+			if (put_label && put_label->addr == j) {+				source = (sljit_uw)SLJIT_ADD_EXEC_OFFSET(code_ptr, executable_offset);++				SLJIT_ASSERT(put_label->label);+				put_label->addr = (sljit_uw)code_ptr;++				/* store target into pool */+				*pool_ptr = put_label->label->addr;+				offset = (sljit_uw)SLJIT_ADD_EXEC_OFFSET(pool_ptr, executable_offset) - source;+				pool_ptr++;++				SLJIT_ASSERT(!(offset & 1));+				offset >>= 1;+				SLJIT_ASSERT(is_s32(offset));+				ins |= (sljit_ins)offset & 0xffffffff;++				put_label = put_label->next;+			}+			encode_inst(&code_ptr, ins);+		}+	}+	SLJIT_ASSERT((sljit_u8 *)code + ins_size == code_ptr);+	SLJIT_ASSERT((sljit_u8 *)pool + pool_size == (sljit_u8 *)pool_ptr);++	compiler->error = SLJIT_ERR_COMPILED;+	compiler->executable_offset = executable_offset;+	compiler->executable_size = ins_size;+	code = SLJIT_ADD_EXEC_OFFSET(code, executable_offset);+	code_ptr = SLJIT_ADD_EXEC_OFFSET(code_ptr, executable_offset);+	SLJIT_CACHE_FLUSH(code, code_ptr);+	SLJIT_UPDATE_WX_FLAGS(code, code_ptr, 1);+	return code;+}++SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_has_cpu_feature(sljit_s32 feature_type)+{+	/* TODO(mundaym): implement all */+	switch (feature_type) {+	case SLJIT_HAS_CLZ:+		return have_eimm() ? 1 : 0; /* FLOGR instruction */+	case SLJIT_HAS_CMOV:+		return have_lscond1() ? 1 : 0;+	case SLJIT_HAS_FPU:+		return 0;+	}+	return 0;+}++/* --------------------------------------------------------------------- */+/*  Entry, exit                                                          */+/* --------------------------------------------------------------------- */++SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_enter(struct sljit_compiler *compiler,+	sljit_s32 options, sljit_s32 arg_types, sljit_s32 scratches, sljit_s32 saveds,+	sljit_s32 fscratches, sljit_s32 fsaveds, sljit_s32 local_size)+{+	sljit_s32 args = get_arg_count(arg_types);+	sljit_sw frame_size;++	CHECK_ERROR();+	CHECK(check_sljit_emit_enter(compiler, options, arg_types, scratches, saveds, fscratches, fsaveds, local_size));+	set_emit_enter(compiler, options, arg_types, scratches, saveds, fscratches, fsaveds, local_size);++	/* saved registers go in callee allocated save area */+	compiler->local_size = (local_size + 0xf) & ~0xf;+	frame_size = compiler->local_size + SLJIT_S390X_DEFAULT_STACK_FRAME_SIZE;++	FAIL_IF(push_inst(compiler, stmg(r6, r15, r6 * sizeof(sljit_sw), r15))); /* save registers TODO(MGM): optimize */+	if (frame_size != 0) {+		if (is_s16(-frame_size))+			FAIL_IF(push_inst(compiler, aghi(r15, -((sljit_s16)frame_size))));+		else if (is_s32(-frame_size))+			FAIL_IF(push_inst(compiler, agfi(r15, -((sljit_s32)frame_size))));+		else {+			FAIL_IF(push_load_imm_inst(compiler, tmp1, -frame_size));+			FAIL_IF(push_inst(compiler, la(r15, 0, tmp1, r15)));+		}+	}++	if (args >= 1)+		FAIL_IF(push_inst(compiler, lgr(gpr(SLJIT_S0), gpr(SLJIT_R0))));+	if (args >= 2)+		FAIL_IF(push_inst(compiler, lgr(gpr(SLJIT_S1), gpr(SLJIT_R1))));+	if (args >= 3)+		FAIL_IF(push_inst(compiler, lgr(gpr(SLJIT_S2), gpr(SLJIT_R2))));+	SLJIT_ASSERT(args < 4);++	return SLJIT_SUCCESS;+}++SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_set_context(struct sljit_compiler *compiler,+	sljit_s32 options, sljit_s32 arg_types, sljit_s32 scratches, sljit_s32 saveds,+	sljit_s32 fscratches, sljit_s32 fsaveds, sljit_s32 local_size)+{+	CHECK_ERROR();+	CHECK(check_sljit_set_context(compiler, options, arg_types, scratches, saveds, fscratches, fsaveds, local_size));+	set_set_context(compiler, options, arg_types, scratches, saveds, fscratches, fsaveds, local_size);++	/* TODO(mundaym): stack space for saved floating point registers */+	compiler->local_size = (local_size + 0xf) & ~0xf;+	return SLJIT_SUCCESS;+}++SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_return(struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 src, sljit_sw srcw)+{+	sljit_sw size;+	sljit_gpr end;++	CHECK_ERROR();+	CHECK(check_sljit_emit_return(compiler, op, src, srcw));++	FAIL_IF(emit_mov_before_return(compiler, op, src, srcw));++	size = compiler->local_size + SLJIT_S390X_DEFAULT_STACK_FRAME_SIZE + (r6 * sizeof(sljit_sw));+	if (!is_s20(size)) {+		FAIL_IF(push_load_imm_inst(compiler, tmp1, compiler->local_size + SLJIT_S390X_DEFAULT_STACK_FRAME_SIZE));+		FAIL_IF(push_inst(compiler, la(r15, 0, tmp1, r15)));+		size = r6 * sizeof(sljit_sw);+		end = r14; /* r15 has been restored already */+	}+	else+		end = r15;++	FAIL_IF(push_inst(compiler, lmg(r6, end, size, r15))); /* restore registers TODO(MGM): optimize */+	FAIL_IF(push_inst(compiler, br(r14))); /* return */++	return SLJIT_SUCCESS;+}++/* --------------------------------------------------------------------- */+/*  Operators                                                            */+/* --------------------------------------------------------------------- */++SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op0(struct sljit_compiler *compiler, sljit_s32 op)+{+	sljit_gpr arg0 = gpr(SLJIT_R0);+	sljit_gpr arg1 = gpr(SLJIT_R1);++	CHECK_ERROR();+	CHECK(check_sljit_emit_op0(compiler, op));++	op = GET_OPCODE(op) | (op & SLJIT_I32_OP);+	switch (op) {+	case SLJIT_BREAKPOINT:+		/* The following invalid instruction is emitted by gdb. */+		return push_inst(compiler, 0x0001 /* 2-byte trap */);+	case SLJIT_NOP:+		return push_inst(compiler, 0x0700 /* 2-byte nop */);+	case SLJIT_LMUL_UW:+		FAIL_IF(push_inst(compiler, mlgr(arg0, arg0)));+		break;+	case SLJIT_LMUL_SW:+		/* signed multiplication from: */+		/* Hacker's Delight, Second Edition: Chapter 8-3. */+		FAIL_IF(push_inst(compiler, srag(tmp0, arg0, 63, 0)));+		FAIL_IF(push_inst(compiler, srag(tmp1, arg1, 63, 0)));+		FAIL_IF(push_inst(compiler, ngr(tmp0, arg1)));+		FAIL_IF(push_inst(compiler, ngr(tmp1, arg0)));++		/* unsigned multiplication */+		FAIL_IF(push_inst(compiler, mlgr(arg0, arg0)));++		FAIL_IF(push_inst(compiler, sgr(arg0, tmp0)));+		FAIL_IF(push_inst(compiler, sgr(arg0, tmp1)));+		break;+	case SLJIT_DIV_U32:+	case SLJIT_DIVMOD_U32:+		FAIL_IF(push_inst(compiler, lhi(tmp0, 0)));+		FAIL_IF(push_inst(compiler, lr(tmp1, arg0)));+		FAIL_IF(push_inst(compiler, dlr(tmp0, arg1)));+		FAIL_IF(push_inst(compiler, lr(arg0, tmp1))); /* quotient */+		if (op == SLJIT_DIVMOD_U32)+			return push_inst(compiler, lr(arg1, tmp0)); /* remainder */++		return SLJIT_SUCCESS;+	case SLJIT_DIV_S32:+	case SLJIT_DIVMOD_S32:+		FAIL_IF(push_inst(compiler, lhi(tmp0, 0)));+		FAIL_IF(push_inst(compiler, lr(tmp1, arg0)));+		FAIL_IF(push_inst(compiler, dr(tmp0, arg1)));+		FAIL_IF(push_inst(compiler, lr(arg0, tmp1))); /* quotient */+		if (op == SLJIT_DIVMOD_S32)+			return push_inst(compiler, lr(arg1, tmp0)); /* remainder */++		return SLJIT_SUCCESS;+	case SLJIT_DIV_UW:+	case SLJIT_DIVMOD_UW:+		FAIL_IF(push_inst(compiler, lghi(tmp0, 0)));+		FAIL_IF(push_inst(compiler, lgr(tmp1, arg0)));+		FAIL_IF(push_inst(compiler, dlgr(tmp0, arg1)));+		FAIL_IF(push_inst(compiler, lgr(arg0, tmp1))); /* quotient */+		if (op == SLJIT_DIVMOD_UW)+			return push_inst(compiler, lgr(arg1, tmp0)); /* remainder */++		return SLJIT_SUCCESS;+	case SLJIT_DIV_SW:+	case SLJIT_DIVMOD_SW:+		FAIL_IF(push_inst(compiler, lgr(tmp1, arg0)));+		FAIL_IF(push_inst(compiler, dsgr(tmp0, arg1)));+		FAIL_IF(push_inst(compiler, lgr(arg0, tmp1))); /* quotient */+		if (op == SLJIT_DIVMOD_SW)+			return push_inst(compiler, lgr(arg1, tmp0)); /* remainder */++		return SLJIT_SUCCESS;+	case SLJIT_ENDBR:+		return SLJIT_SUCCESS;+	case SLJIT_SKIP_FRAMES_BEFORE_RETURN:+		return SLJIT_SUCCESS;+	default:+		SLJIT_UNREACHABLE();+	}+	/* swap result registers */+	FAIL_IF(push_inst(compiler, lgr(tmp0, arg0)));+	FAIL_IF(push_inst(compiler, lgr(arg0, arg1)));+	return push_inst(compiler, lgr(arg1, tmp0));+}++/* LEVAL will be defined later with different parameters as needed */+#define WHEN2(cond, i1, i2) (cond) ? LEVAL(i1) : LEVAL(i2)++SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compiler, sljit_s32 op,+        sljit_s32 dst, sljit_sw dstw,+        sljit_s32 src, sljit_sw srcw)+{+	sljit_ins ins;+	struct addr mem;+	sljit_gpr dst_r;+	sljit_gpr src_r;+	sljit_s32 opcode = GET_OPCODE(op);++	CHECK_ERROR();+	CHECK(check_sljit_emit_op1(compiler, op, dst, dstw, src, srcw));+	ADJUST_LOCAL_OFFSET(dst, dstw);+	ADJUST_LOCAL_OFFSET(src, srcw);++	if ((dst == SLJIT_UNUSED) && !HAS_FLAGS(op)) {+		/* TODO(carenas): implement prefetch? */+		return SLJIT_SUCCESS;+	}++	if (opcode >= SLJIT_MOV && opcode <= SLJIT_MOV_P) {+		/* LOAD REGISTER */+		if (FAST_IS_REG(dst) && FAST_IS_REG(src)) {+			dst_r = gpr(dst);+			src_r = gpr(src);+			switch (opcode | (op & SLJIT_I32_OP)) {+			/* 32-bit */+			case SLJIT_MOV32_U8:+				ins = llcr(dst_r, src_r);+				break;+			case SLJIT_MOV32_S8:+				ins = lbr(dst_r, src_r);+				break;+			case SLJIT_MOV32_U16:+				ins = llhr(dst_r, src_r);+				break;+			case SLJIT_MOV32_S16:+				ins = lhr(dst_r, src_r);+				break;+			case SLJIT_MOV32:+				ins = lr(dst_r, src_r);+				break;+			/* 64-bit */+			case SLJIT_MOV_U8:+				ins = llgcr(dst_r, src_r);+				break;+			case SLJIT_MOV_S8:+				ins = lgbr(dst_r, src_r);+				break;+			case SLJIT_MOV_U16:+				ins = llghr(dst_r, src_r);+				break;+			case SLJIT_MOV_S16:+				ins = lghr(dst_r, src_r);+				break;+			case SLJIT_MOV_U32:+				ins = llgfr(dst_r, src_r);+				break;+			case SLJIT_MOV_S32:+				ins = lgfr(dst_r, src_r);+				break;+			case SLJIT_MOV:+			case SLJIT_MOV_P:+				ins = lgr(dst_r, src_r);+				break;+			default:+				ins = 0;+				SLJIT_UNREACHABLE();+			}+			FAIL_IF(push_inst(compiler, ins));+			return SLJIT_SUCCESS;+		}+		/* LOAD IMMEDIATE */+		if (FAST_IS_REG(dst) && (src & SLJIT_IMM)) {+			switch (opcode) {+			case SLJIT_MOV_U8:+				srcw = (sljit_sw)((sljit_u8)(srcw));+				break;+			case SLJIT_MOV_S8:+				srcw = (sljit_sw)((sljit_s8)(srcw));+				break;+			case SLJIT_MOV_U16:+				srcw = (sljit_sw)((sljit_u16)(srcw));+				break;+			case SLJIT_MOV_S16:+				srcw = (sljit_sw)((sljit_s16)(srcw));+				break;+			case SLJIT_MOV_U32:+				srcw = (sljit_sw)((sljit_u32)(srcw));+				break;+			case SLJIT_MOV_S32:+				srcw = (sljit_sw)((sljit_s32)(srcw));+				break;+			}+			return push_load_imm_inst(compiler, gpr(dst), srcw);+		}+		/* LOAD */+		/* TODO(carenas): avoid reg being defined later */+		#define LEVAL(i) EVAL(i, reg, mem)+		if (FAST_IS_REG(dst) && (src & SLJIT_MEM)) {+			sljit_gpr reg = gpr(dst);++			FAIL_IF(make_addr_bxy(compiler, &mem, src, srcw, tmp1));+			/* TODO(carenas): convert all calls below to LEVAL */+			switch (opcode | (op & SLJIT_I32_OP)) {+			case SLJIT_MOV32_U8:+				ins = llc(reg, mem.offset, mem.index, mem.base);+				break;+			case SLJIT_MOV32_S8:+				ins = lb(reg, mem.offset, mem.index, mem.base);+				break;+			case SLJIT_MOV32_U16:+				ins = llh(reg, mem.offset, mem.index, mem.base);+				break;+			case SLJIT_MOV32_S16:+				ins = WHEN2(is_u12(mem.offset), lh, lhy);+				break;+			case SLJIT_MOV32:+				ins = WHEN2(is_u12(mem.offset), l, ly);+				break;+			case SLJIT_MOV_U8:+				ins = LEVAL(llgc);+				break;+			case SLJIT_MOV_S8:+				ins = lgb(reg, mem.offset, mem.index, mem.base);+				break;+			case SLJIT_MOV_U16:+				ins = LEVAL(llgh);+				break;+			case SLJIT_MOV_S16:+				ins = lgh(reg, mem.offset, mem.index, mem.base);+				break;+			case SLJIT_MOV_U32:+				ins = LEVAL(llgf);+				break;+			case SLJIT_MOV_S32:+				ins = lgf(reg, mem.offset, mem.index, mem.base);+				break;+			case SLJIT_MOV_P:+			case SLJIT_MOV:+				ins = lg(reg, mem.offset, mem.index, mem.base);+				break;+			default:+				SLJIT_UNREACHABLE();+			}+			FAIL_IF(push_inst(compiler, ins));+			return SLJIT_SUCCESS;+		}+		/* STORE and STORE IMMEDIATE */+		if ((dst & SLJIT_MEM)+			&& (FAST_IS_REG(src) || (src & SLJIT_IMM))) {+			sljit_gpr reg = FAST_IS_REG(src) ? gpr(src) : tmp0;+			if (src & SLJIT_IMM) {+				/* TODO(mundaym): MOVE IMMEDIATE? */+				FAIL_IF(push_load_imm_inst(compiler, reg, srcw));+			}+			struct addr mem;+			FAIL_IF(make_addr_bxy(compiler, &mem, dst, dstw, tmp1));+			switch (opcode) {+			case SLJIT_MOV_U8:+			case SLJIT_MOV_S8:+				return push_inst(compiler,+					WHEN2(is_u12(mem.offset), stc, stcy));+			case SLJIT_MOV_U16:+			case SLJIT_MOV_S16:+				return push_inst(compiler,+					WHEN2(is_u12(mem.offset), sth, sthy));+			case SLJIT_MOV_U32:+			case SLJIT_MOV_S32:+				return push_inst(compiler,+					WHEN2(is_u12(mem.offset), st, sty));+			case SLJIT_MOV_P:+			case SLJIT_MOV:+				FAIL_IF(push_inst(compiler, LEVAL(stg)));+				return SLJIT_SUCCESS;+			default:+				SLJIT_UNREACHABLE();+			}+		}+		#undef LEVAL+		/* MOVE CHARACTERS */+		if ((dst & SLJIT_MEM) && (src & SLJIT_MEM)) {+			struct addr mem;+			FAIL_IF(make_addr_bxy(compiler, &mem, src, srcw, tmp1));+			switch (opcode) {+			case SLJIT_MOV_U8:+			case SLJIT_MOV_S8:+				FAIL_IF(push_inst(compiler,+					EVAL(llgc, tmp0, mem)));+				FAIL_IF(make_addr_bxy(compiler, &mem, dst, dstw, tmp1));+				return push_inst(compiler,+					EVAL(stcy, tmp0, mem));+			case SLJIT_MOV_U16:+			case SLJIT_MOV_S16:+				FAIL_IF(push_inst(compiler,+					EVAL(llgh, tmp0, mem)));+				FAIL_IF(make_addr_bxy(compiler, &mem, dst, dstw, tmp1));+				return push_inst(compiler,+					EVAL(sthy, tmp0, mem));+			case SLJIT_MOV_U32:+			case SLJIT_MOV_S32:+				FAIL_IF(push_inst(compiler,+					EVAL(ly, tmp0, mem)));+				FAIL_IF(make_addr_bxy(compiler, &mem, dst, dstw, tmp1));+				return push_inst(compiler,+					EVAL(sty, tmp0, mem));+			case SLJIT_MOV_P:+			case SLJIT_MOV:+				FAIL_IF(push_inst(compiler,+					EVAL(lg, tmp0, mem)));+				FAIL_IF(make_addr_bxy(compiler, &mem, dst, dstw, tmp1));+				FAIL_IF(push_inst(compiler,+					EVAL(stg, tmp0, mem)));+				return SLJIT_SUCCESS;+			default:+				SLJIT_UNREACHABLE();+			}+		}+		SLJIT_UNREACHABLE();+	}++	SLJIT_ASSERT((src & SLJIT_IMM) == 0); /* no immediates */++	dst_r = SLOW_IS_REG(dst) ? gpr(REG_MASK & dst) : tmp0;+	src_r = FAST_IS_REG(src) ? gpr(REG_MASK & src) : tmp0;+	if (src & SLJIT_MEM)+		FAIL_IF(load_word(compiler, src_r, src, srcw, src & SLJIT_I32_OP));++	compiler->status_flags_state = op & (VARIABLE_FLAG_MASK | SLJIT_SET_Z);++	/* TODO(mundaym): optimize loads and stores */+	switch (opcode | (op & SLJIT_I32_OP)) {+	case SLJIT_NOT:+		/* emulate ~x with x^-1 */+		FAIL_IF(push_load_imm_inst(compiler, tmp1, -1));+		if (src_r != dst_r)+			FAIL_IF(push_inst(compiler, lgr(dst_r, src_r)));++		FAIL_IF(push_inst(compiler, xgr(dst_r, tmp1)));+		break;+	case SLJIT_NOT32:+		/* emulate ~x with x^-1 */+		if (have_eimm())+			FAIL_IF(push_inst(compiler, xilf(dst_r, -1)));+		else {+			FAIL_IF(push_load_imm_inst(compiler, tmp1, -1));+			if (src_r != dst_r)+				FAIL_IF(push_inst(compiler, lr(dst_r, src_r)));++			FAIL_IF(push_inst(compiler, xr(dst_r, tmp1)));+		}+		break;+	case SLJIT_NEG:+		compiler->status_flags_state |= SLJIT_CURRENT_FLAGS_ADD_SUB;+		FAIL_IF(push_inst(compiler, lcgr(dst_r, src_r)));+		break;+	case SLJIT_NEG32:+		compiler->status_flags_state |= SLJIT_CURRENT_FLAGS_ADD_SUB;+		FAIL_IF(push_inst(compiler, lcr(dst_r, src_r)));+		break;+	case SLJIT_CLZ:+		if (have_eimm()) {+			FAIL_IF(push_inst(compiler, flogr(tmp0, src_r))); /* clobbers tmp1 */+			if (dst_r != tmp0)+				FAIL_IF(push_inst(compiler, lgr(dst_r, tmp0)));+		} else {+			abort(); /* TODO(mundaym): no eimm (?) */+		}+		break;+	case SLJIT_CLZ32:+		if (have_eimm()) {+			FAIL_IF(push_inst(compiler, sllg(tmp1, src_r, 32, 0)));+			FAIL_IF(push_inst(compiler, iilf(tmp1, 0xffffffff)));+			FAIL_IF(push_inst(compiler, flogr(tmp0, tmp1))); /* clobbers tmp1 */+			if (dst_r != tmp0)+				FAIL_IF(push_inst(compiler, lr(dst_r, tmp0)));+		} else {+			abort(); /* TODO(mundaym): no eimm (?) */+		}+		break;+	default:+		SLJIT_UNREACHABLE();+	}++	if ((op & (SLJIT_SET_Z | VARIABLE_FLAG_MASK)) == (SLJIT_SET_Z | SLJIT_SET_OVERFLOW))+		FAIL_IF(update_zero_overflow(compiler, op, dst_r));++	/* TODO(carenas): doesn't need FAIL_IF */+	if ((dst != SLJIT_UNUSED) && (dst & SLJIT_MEM))+		FAIL_IF(store_word(compiler, dst_r, dst, dstw, op & SLJIT_I32_OP));++	return SLJIT_SUCCESS;+}++static SLJIT_INLINE int is_commutative(sljit_s32 op)+{+	switch (GET_OPCODE(op)) {+	case SLJIT_ADD:+	case SLJIT_ADDC:+	case SLJIT_MUL:+	case SLJIT_AND:+	case SLJIT_OR:+	case SLJIT_XOR:+		return 1;+	}+	return 0;+}++static SLJIT_INLINE int is_shift(sljit_s32 op) {+	sljit_s32 v = GET_OPCODE(op);+	return (v == SLJIT_SHL || v == SLJIT_ASHR || v == SLJIT_LSHR) ? 1 : 0;+}++static SLJIT_INLINE int sets_signed_flag(sljit_s32 op)+{+	switch (GET_FLAG_TYPE(op)) {+	case SLJIT_OVERFLOW:+	case SLJIT_NOT_OVERFLOW:+	case SLJIT_SIG_LESS:+	case SLJIT_SIG_LESS_EQUAL:+	case SLJIT_SIG_GREATER:+	case SLJIT_SIG_GREATER_EQUAL:+		return 1;+	}+	return 0;+}++static const struct ins_forms add_forms = {+	0x1a00, /* ar */+	0xb9080000, /* agr */+	0xb9f80000, /* ark */+	0xb9e80000, /* agrk */+	0x5a000000, /* a */+	0xe3000000005a, /* ay */+	0xe30000000008, /* ag */+};++static const struct ins_forms logical_add_forms = {+	0x1e00, /* alr */+	0xb90a0000, /* algr */+	0xb9fa0000, /* alrk */+	0xb9ea0000, /* algrk */+	0x5e000000, /* al */+	0xe3000000005e, /* aly */+	0xe3000000000a, /* alg */+};++static sljit_s32 sljit_emit_add(struct sljit_compiler *compiler, sljit_s32 op,+	sljit_s32 dst, sljit_sw dstw,+	sljit_s32 src1, sljit_sw src1w,+	sljit_s32 src2, sljit_sw src2w)+{+	int sets_overflow = (op & VARIABLE_FLAG_MASK) == SLJIT_SET_OVERFLOW;+	int sets_zero_overflow = (op & (SLJIT_SET_Z | VARIABLE_FLAG_MASK)) == (SLJIT_SET_Z | SLJIT_SET_OVERFLOW);+	const struct ins_forms *forms;+	sljit_ins ins;++	if (src2 & SLJIT_IMM) {+		if (!sets_zero_overflow && is_s8(src2w) && (src1 & SLJIT_MEM) && (dst == src1 && dstw == src1w)) {+			if (sets_overflow)+				ins = (op & SLJIT_I32_OP) ? 0xeb000000006a /* asi */ : 0xeb000000007a /* agsi */;+			else+				ins = (op & SLJIT_I32_OP) ? 0xeb000000006e /* alsi */ : 0xeb000000007e /* algsi */;+			return emit_siy(compiler, ins, dst, dstw, src2w);+		}++		if (is_s16(src2w)) {+			if (sets_overflow)+				ins = (op & SLJIT_I32_OP) ? 0xec00000000d8 /* ahik */ : 0xec00000000d9 /* aghik */;+			else+				ins = (op & SLJIT_I32_OP) ? 0xec00000000da /* alhsik */ : 0xec00000000db /* alghsik */;+			FAIL_IF(emit_rie_d(compiler, ins, dst, src1, src1w, src2w));+			goto done;+		}++		if (!sets_overflow) {+			if ((op & SLJIT_I32_OP) || is_u32(src2w)) {+				ins = (op & SLJIT_I32_OP) ? 0xc20b00000000 /* alfi */ : 0xc20a00000000 /* algfi */;+				FAIL_IF(emit_ri(compiler, ins, dst, src1, src1w, src2w, RIL_A));+				goto done;+			}+			if (is_u32(-src2w)) {+				FAIL_IF(emit_ri(compiler, 0xc20400000000 /* slgfi */, dst, src1, src1w, -src2w, RIL_A));+				goto done;+			}+		}+		else if ((op & SLJIT_I32_OP) || is_s32(src2w)) {+			ins = (op & SLJIT_I32_OP) ? 0xc20900000000 /* afi */ : 0xc20800000000 /* agfi */;+			FAIL_IF(emit_ri(compiler, ins, dst, src1, src1w, src2w, RIL_A));+			goto done;+		}+	}++	forms = sets_overflow ? &add_forms : &logical_add_forms;+	FAIL_IF(emit_commutative(compiler, forms, dst, dstw, src1, src1w, src2, src2w));++done:+	if (sets_zero_overflow)+		FAIL_IF(update_zero_overflow(compiler, op, SLOW_IS_REG(dst) ? gpr(dst & REG_MASK) : tmp0));++	if (dst & SLJIT_MEM)+		return store_word(compiler, tmp0, dst, dstw, op & SLJIT_I32_OP);++	return SLJIT_SUCCESS;+}++static const struct ins_forms sub_forms = {+	0x1b00, /* sr */+	0xb9090000, /* sgr */+	0xb9f90000, /* srk */+	0xb9e90000, /* sgrk */+	0x5b000000, /* s */+	0xe3000000005b, /* sy */+	0xe30000000009, /* sg */+};++static const struct ins_forms logical_sub_forms = {+	0x1f00, /* slr */+	0xb90b0000, /* slgr */+	0xb9fb0000, /* slrk */+	0xb9eb0000, /* slgrk */+	0x5f000000, /* sl */+	0xe3000000005f, /* sly */+	0xe3000000000b, /* slg */+};++static sljit_s32 sljit_emit_sub(struct sljit_compiler *compiler, sljit_s32 op,+	sljit_s32 dst, sljit_sw dstw,+	sljit_s32 src1, sljit_sw src1w,+	sljit_s32 src2, sljit_sw src2w)+{+	int sets_signed = sets_signed_flag(op);+	int sets_zero_overflow = (op & (SLJIT_SET_Z | VARIABLE_FLAG_MASK)) == (SLJIT_SET_Z | SLJIT_SET_OVERFLOW);+	const struct ins_forms *forms;+	sljit_ins ins;++	if (dst == SLJIT_UNUSED && GET_FLAG_TYPE(op) <= SLJIT_SIG_LESS_EQUAL) {+		int compare_signed = GET_FLAG_TYPE(op) >= SLJIT_SIG_LESS;++		compiler->status_flags_state |= SLJIT_CURRENT_FLAGS_COMPARE;++		if (src2 & SLJIT_IMM) {+			if (compare_signed || ((op & VARIABLE_FLAG_MASK) == 0 && is_s32(src2w)))+			{+				if ((op & SLJIT_I32_OP) || is_s32(src2w)) {+					ins = (op & SLJIT_I32_OP) ? 0xc20d00000000 /* cfi */ : 0xc20c00000000 /* cgfi */;+					return emit_ri(compiler, ins, src1, src1, src1w, src2w, RIL_A);+				}+			}+			else {+				if ((op & SLJIT_I32_OP) || is_u32(src2w)) {+					ins = (op & SLJIT_I32_OP) ? 0xc20f00000000 /* clfi */ : 0xc20e00000000 /* clgfi */;+					return emit_ri(compiler, ins, src1, src1, src1w, src2w, RIL_A);+				}+				if (is_s16(src2w))+					return emit_rie_d(compiler, 0xec00000000db /* alghsik */, SLJIT_UNUSED, src1, src1w, src2w);+			}+		}+		else if (src2 & SLJIT_MEM) {+			if ((op & SLJIT_I32_OP) && ((src2 & OFFS_REG_MASK) || is_u12(src2w))) {+				ins = compare_signed ? 0x59000000 /* c */ : 0x55000000 /* cl */;+				return emit_rx(compiler, ins, src1, src1, src1w, src2, src2w, RX_A);+			}++			if (compare_signed)+				ins = (op & SLJIT_I32_OP) ? 0xe30000000059 /* cy */ : 0xe30000000020 /* cg */;+			else+				ins = (op & SLJIT_I32_OP) ? 0xe30000000055 /* cly */ : 0xe30000000021 /* clg */;+			return emit_rx(compiler, ins, src1, src1, src1w, src2, src2w, RXY_A);+		}++		if (compare_signed)+			ins = (op & SLJIT_I32_OP) ? 0x1900 /* cr */ : 0xb9200000 /* cgr */;+		else+			ins = (op & SLJIT_I32_OP) ? 0x1500 /* clr */ : 0xb9210000 /* clgr */;+		return emit_rr(compiler, ins, src1, src1, src1w, src2, src2w);+	}++	if (src2 & SLJIT_IMM) {+		sljit_sw neg_src2w = -src2w;++		if (sets_signed || neg_src2w != 0 || (op & (SLJIT_SET_Z | VARIABLE_FLAG_MASK)) == 0) {+			if (!sets_zero_overflow && is_s8(neg_src2w) && (src1 & SLJIT_MEM) && (dst == src1 && dstw == src1w)) {+				if (sets_signed)+					ins = (op & SLJIT_I32_OP) ? 0xeb000000006a /* asi */ : 0xeb000000007a /* agsi */;+				else+					ins = (op & SLJIT_I32_OP) ? 0xeb000000006e /* alsi */ : 0xeb000000007e /* algsi */;+				return emit_siy(compiler, ins, dst, dstw, neg_src2w);+			}++			if (is_s16(neg_src2w)) {+				if (sets_signed)+					ins = (op & SLJIT_I32_OP) ? 0xec00000000d8 /* ahik */ : 0xec00000000d9 /* aghik */;+				else+					ins = (op & SLJIT_I32_OP) ? 0xec00000000da /* alhsik */ : 0xec00000000db /* alghsik */;+				FAIL_IF(emit_rie_d(compiler, ins, dst, src1, src1w, neg_src2w));+				goto done;+			}+		}++		if (!sets_signed) {+			if ((op & SLJIT_I32_OP) || is_u32(src2w)) {+				ins = (op & SLJIT_I32_OP) ? 0xc20500000000 /* slfi */ : 0xc20400000000 /* slgfi */;+				FAIL_IF(emit_ri(compiler, ins, dst, src1, src1w, src2w, RIL_A));+				goto done;+			}+			if (is_u32(neg_src2w)) {+				FAIL_IF(emit_ri(compiler, 0xc20a00000000 /* algfi */, dst, src1, src1w, neg_src2w, RIL_A));+				goto done;+			}+		}+		else if ((op & SLJIT_I32_OP) || is_s32(neg_src2w)) {+			ins = (op & SLJIT_I32_OP) ? 0xc20900000000 /* afi */ : 0xc20800000000 /* agfi */;+			FAIL_IF(emit_ri(compiler, ins, dst, src1, src1w, neg_src2w, RIL_A));+			goto done;+		}+	}++	forms = sets_signed ? &sub_forms : &logical_sub_forms;+	FAIL_IF(emit_non_commutative(compiler, forms, dst, dstw, src1, src1w, src2, src2w));++done:+	if (sets_signed) {+		sljit_gpr dst_r = SLOW_IS_REG(dst) ? gpr(dst & REG_MASK) : tmp0;++		if ((op & VARIABLE_FLAG_MASK) != SLJIT_SET_OVERFLOW) {+			/* In case of overflow, the sign bit of the two source operands must be different, and+			     - the first operand is greater if the sign bit of the result is set+			     - the first operand is less if the sign bit of the result is not set+			   The -result operation sets the corrent sign, because the result cannot be zero.+			   The overflow is considered greater, since the result must be equal to INT_MIN so its sign bit is set. */+			FAIL_IF(push_inst(compiler, brc(0xe, 2 + 2)));+			FAIL_IF(push_inst(compiler, (op & SLJIT_I32_OP) ? lcr(tmp1, dst_r) : lcgr(tmp1, dst_r)));+		}+		else if (op & SLJIT_SET_Z)+			FAIL_IF(update_zero_overflow(compiler, op, dst_r));+	}++	if (dst & SLJIT_MEM)+		return store_word(compiler, tmp0, dst, dstw, op & SLJIT_I32_OP);++	return SLJIT_SUCCESS;+}++static const struct ins_forms multiply_forms = {+	0xb2520000, /* msr */+	0xb90c0000, /* msgr */+	0xb9fd0000, /* msrkc */+	0xb9ed0000, /* msgrkc */+	0x71000000, /* ms */+	0xe30000000051, /* msy */+	0xe3000000000c, /* msg */+};++static const struct ins_forms multiply_overflow_forms = {+	0,+	0,+	0xb9fd0000, /* msrkc */+	0xb9ed0000, /* msgrkc */+	0,+	0xe30000000053, /* msc */+	0xe30000000083, /* msgc */+};++static sljit_s32 sljit_emit_multiply(struct sljit_compiler *compiler, sljit_s32 op,+	sljit_s32 dst, sljit_sw dstw,+	sljit_s32 src1, sljit_sw src1w,+	sljit_s32 src2, sljit_sw src2w)+{+	sljit_ins ins;++	if (HAS_FLAGS(op)) {+		/* if have_misc2 fails, this operation should be emulated. 32 bit emulation:+		FAIL_IF(push_inst(compiler, lgfr(tmp0, src1_r)));+		FAIL_IF(push_inst(compiler, msgfr(tmp0, src2_r)));+		if (dst_r != tmp0) {+			FAIL_IF(push_inst(compiler, lr(dst_r, tmp0)));+		}+		FAIL_IF(push_inst(compiler, aih(tmp0, 1)));+		FAIL_IF(push_inst(compiler, nihf(tmp0, ~1U)));+		FAIL_IF(push_inst(compiler, ipm(flag_r)));+		FAIL_IF(push_inst(compiler, oilh(flag_r, 0x2000))); */++		return emit_commutative(compiler, &multiply_overflow_forms, dst, dstw, src1, src1w, src2, src2w);+	}++	if (src2 & SLJIT_IMM) {+		if (is_s16(src2w)) {+			ins = (op & SLJIT_I32_OP) ? 0xa70c0000 /* mhi */ : 0xa70d0000 /* mghi */;+			return emit_ri(compiler, ins, dst, src1, src1w, src2w, RI_A);+		}++		if (is_s32(src2w)) {+			ins = (op & SLJIT_I32_OP) ? 0xc20100000000 /* msfi */ : 0xc20000000000 /* msgfi */;+			return emit_ri(compiler, ins, dst, src1, src1w, src2w, RIL_A);+		}+	}++	return emit_commutative(compiler, &multiply_forms, dst, dstw, src1, src1w, src2, src2w);+}++static sljit_s32 sljit_emit_bitwise_imm(struct sljit_compiler *compiler, sljit_s32 type,+	sljit_s32 dst, sljit_sw dstw,+	sljit_s32 src1, sljit_sw src1w,+	sljit_uw imm, sljit_s32 count16)+{+	sljit_s32 mode = compiler->mode;+	sljit_gpr dst_r = tmp0;+	sljit_s32 needs_move = 1;++	if (SLOW_IS_REG(dst)) {+		dst_r = gpr(dst & REG_MASK);+		if (dst == src1)+			needs_move = 0;+	}++	if (needs_move)+		FAIL_IF(emit_move(compiler, dst_r, src1, src1w));++	if (type == SLJIT_AND) {+		if (!(mode & SLJIT_I32_OP))+			FAIL_IF(push_inst(compiler, 0xc00a00000000 /* nihf */ | (dst_r << 36) | (imm >> 32)));+		return push_inst(compiler, 0xc00b00000000 /* nilf */ | (dst_r << 36) | (imm & 0xffffffff));+	}+	else if (type == SLJIT_OR) {+		if (count16 >= 3) {+			FAIL_IF(push_inst(compiler, 0xc00c00000000 /* oihf */ | (dst_r << 36) | (imm >> 32)));+			return push_inst(compiler, 0xc00d00000000 /* oilf */ | (dst_r << 36) | (imm & 0xffffffff));+		}++		if (count16 >= 2) {+			if ((imm & 0x00000000ffffffffull) == 0)+				return push_inst(compiler, 0xc00c00000000 /* oihf */ | (dst_r << 36) | (imm >> 32));+			if ((imm & 0xffffffff00000000ull) == 0)+				return push_inst(compiler, 0xc00d00000000 /* oilf */ | (dst_r << 36) | (imm & 0xffffffff));+		}++		if ((imm & 0xffff000000000000ull) != 0)+			FAIL_IF(push_inst(compiler, 0xa5080000 /* oihh */ | (dst_r << 20) | (imm >> 48)));+		if ((imm & 0x0000ffff00000000ull) != 0)+			FAIL_IF(push_inst(compiler, 0xa5090000 /* oihl */ | (dst_r << 20) | ((imm >> 32) & 0xffff)));+		if ((imm & 0x00000000ffff0000ull) != 0)+			FAIL_IF(push_inst(compiler, 0xa50a0000 /* oilh */ | (dst_r << 20) | ((imm >> 16) & 0xffff)));+		if ((imm & 0x000000000000ffffull) != 0 || imm == 0)+			return push_inst(compiler, 0xa50b0000 /* oill */ | (dst_r << 20) | (imm & 0xffff));+		return SLJIT_SUCCESS;+	}++	if ((imm & 0xffffffff00000000ull) != 0)+		FAIL_IF(push_inst(compiler, 0xc00600000000 /* xihf */ | (dst_r << 36) | (imm >> 32)));+	if ((imm & 0x00000000ffffffffull) != 0 || imm == 0)+		return push_inst(compiler, 0xc00700000000 /* xilf */ | (dst_r << 36) | (imm & 0xffffffff));+	return SLJIT_SUCCESS;+}++static const struct ins_forms bitwise_and_forms = {+	0x1400, /* nr */+	0xb9800000, /* ngr */+	0xb9f40000, /* nrk */+	0xb9e40000, /* ngrk */+	0x54000000, /* n */+	0xe30000000054, /* ny */+	0xe30000000080, /* ng */+};++static const struct ins_forms bitwise_or_forms = {+	0x1600, /* or */+	0xb9810000, /* ogr */+	0xb9f60000, /* ork */+	0xb9e60000, /* ogrk */+	0x56000000, /* o */+	0xe30000000056, /* oy */+	0xe30000000081, /* og */+};++static const struct ins_forms bitwise_xor_forms = {+	0x1700, /* xr */+	0xb9820000, /* xgr */+	0xb9f70000, /* xrk */+	0xb9e70000, /* xgrk */+	0x57000000, /* x */+	0xe30000000057, /* xy */+	0xe30000000082, /* xg */+};++static sljit_s32 sljit_emit_bitwise(struct sljit_compiler *compiler, sljit_s32 op,+	sljit_s32 dst, sljit_sw dstw,+	sljit_s32 src1, sljit_sw src1w,+	sljit_s32 src2, sljit_sw src2w)+{+	sljit_s32 type = GET_OPCODE(op);+	const struct ins_forms *forms;++	if ((src2 & SLJIT_IMM) && (!(op & SLJIT_SET_Z) || (type == SLJIT_AND && dst == SLJIT_UNUSED))) {+		sljit_s32 count16 = 0;+		sljit_uw imm = (sljit_uw)src2w;++		if (op & SLJIT_I32_OP)+			imm &= 0xffffffffull;++		if ((imm & 0x000000000000ffffull) != 0 || imm == 0)+			count16++;+		if ((imm & 0x00000000ffff0000ull) != 0)+			count16++;+		if ((imm & 0x0000ffff00000000ull) != 0)+			count16++;+		if ((imm & 0xffff000000000000ull) != 0)+			count16++;++		if (type == SLJIT_AND && dst == SLJIT_UNUSED && count16 == 1) {+			sljit_gpr src_r = tmp0;++			if (FAST_IS_REG(src1))+				src_r = gpr(src1 & REG_MASK);+			else+				FAIL_IF(emit_move(compiler, tmp0, src1, src1w));++			if ((imm & 0x000000000000ffffull) != 0 || imm == 0)+				return push_inst(compiler, 0xa7010000 | (src_r << 20) | imm);+			if ((imm & 0x00000000ffff0000ull) != 0)+				return push_inst(compiler, 0xa7000000 | (src_r << 20) | (imm >> 16));+			if ((imm & 0x0000ffff00000000ull) != 0)+				return push_inst(compiler, 0xa7030000 | (src_r << 20) | (imm >> 32));+			return push_inst(compiler, 0xa7020000 | (src_r << 20) | (imm >> 48));+		}++		if (!(op & SLJIT_SET_Z))+			return sljit_emit_bitwise_imm(compiler, type, dst, dstw, src1, src1w, imm, count16);+	}++	if (type == SLJIT_AND)+		forms = &bitwise_and_forms;+	else if (type == SLJIT_OR)+		forms = &bitwise_or_forms;+	else+		forms = &bitwise_xor_forms;++	return emit_commutative(compiler, forms, dst, dstw, src1, src1w, src2, src2w);+}++static sljit_s32 sljit_emit_shift(struct sljit_compiler *compiler, sljit_s32 op,+	sljit_s32 dst, sljit_sw dstw,+	sljit_s32 src1, sljit_sw src1w,+	sljit_s32 src2, sljit_sw src2w)+{+	sljit_s32 type = GET_OPCODE(op);+	sljit_gpr dst_r = SLOW_IS_REG(dst) ? gpr(dst & REG_MASK) : tmp0;+	sljit_gpr src_r = tmp0;+	sljit_gpr base_r = tmp0;+	sljit_ins imm = 0;+	sljit_ins ins;++	if (FAST_IS_REG(src1))+		src_r = gpr(src1 & REG_MASK);+	else+		FAIL_IF(emit_move(compiler, tmp0, src1, src1w));++	if (src2 & SLJIT_IMM)+		imm = src2w & ((op & SLJIT_I32_OP) ? 0x1f : 0x3f);+	else if (FAST_IS_REG(src2))+		base_r = gpr(src2 & REG_MASK);+	else {+		FAIL_IF(emit_move(compiler, tmp1, src2, src2w));+		base_r = tmp1;+	}++	if ((op & SLJIT_I32_OP) && dst_r == src_r) {+		if (type == SLJIT_SHL)+			ins = 0x89000000 /* sll */;+		else if (type == SLJIT_LSHR)+			ins = 0x88000000 /* srl */;+		else+			ins = 0x8a000000 /* sra */;++		FAIL_IF(push_inst(compiler, ins | (dst_r << 20) | (base_r << 12) | imm));+	}+	else {+		if (type == SLJIT_SHL)+			ins = (op & SLJIT_I32_OP) ? 0xeb00000000df /* sllk */ : 0xeb000000000d /* sllg */;+		else if (type == SLJIT_LSHR)+			ins = (op & SLJIT_I32_OP) ? 0xeb00000000de /* srlk */ : 0xeb000000000c /* srlg */;+		else+			ins = (op & SLJIT_I32_OP) ? 0xeb00000000dc /* srak */ : 0xeb000000000a /* srag */;++		FAIL_IF(push_inst(compiler, ins | (dst_r << 36) | (src_r << 32) | (base_r << 28) | (imm << 16)));+	}++	if ((op & SLJIT_SET_Z) && type != SLJIT_ASHR)+		return push_inst(compiler, (op & SLJIT_I32_OP) ? or(dst_r, dst_r) : ogr(dst_r, dst_r));++	return SLJIT_SUCCESS;+}++static const struct ins_forms addc_forms = {+	0xb9980000, /* alcr */+	0xb9880000, /* alcgr */+	0,+	0,+	0,+	0xe30000000098, /* alc */+	0xe30000000088, /* alcg */+};++static const struct ins_forms subc_forms = {+	0xb9990000, /* slbr */+	0xb9890000, /* slbgr */+	0,+	0,+	0,+	0xe30000000099, /* slb */+	0xe30000000089, /* slbg */+};++SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compiler, sljit_s32 op,+	sljit_s32 dst, sljit_sw dstw,+	sljit_s32 src1, sljit_sw src1w,+	sljit_s32 src2, sljit_sw src2w)+{+	CHECK_ERROR();+	CHECK(check_sljit_emit_op2(compiler, op, dst, dstw, src1, src1w, src2, src2w));+	ADJUST_LOCAL_OFFSET(dst, dstw);+	ADJUST_LOCAL_OFFSET(src1, src1w);+	ADJUST_LOCAL_OFFSET(src2, src2w);++	if (dst == SLJIT_UNUSED && !HAS_FLAGS(op))+		return SLJIT_SUCCESS;++	compiler->mode = op & SLJIT_I32_OP;+	compiler->status_flags_state = op & (VARIABLE_FLAG_MASK | SLJIT_SET_Z);++	if (GET_OPCODE(op) >= SLJIT_ADD || GET_OPCODE(op) <= SLJIT_SUBC)+		compiler->status_flags_state |= SLJIT_CURRENT_FLAGS_ADD_SUB;++	if (is_commutative(op) && (src1 & SLJIT_IMM) && !(src2 & SLJIT_IMM)) {+		src1 ^= src2;+		src2 ^= src1;+		src1 ^= src2;++		src1w ^= src2w;+		src2w ^= src1w;+		src1w ^= src2w;+	}++	switch (GET_OPCODE(op)) {+	case SLJIT_ADD:+		return sljit_emit_add(compiler, op, dst, dstw, src1, src1w, src2, src2w);+	case SLJIT_ADDC:+		FAIL_IF(emit_commutative(compiler, &addc_forms, dst, dstw, src1, src1w, src2, src2w));+		if (dst & SLJIT_MEM)+			return store_word(compiler, tmp0, dst, dstw, op & SLJIT_I32_OP);+		return SLJIT_SUCCESS;+	case SLJIT_SUB:+		return sljit_emit_sub(compiler, op, dst, dstw, src1, src1w, src2, src2w);+	case SLJIT_SUBC:+		FAIL_IF(emit_non_commutative(compiler, &subc_forms, dst, dstw, src1, src1w, src2, src2w));+		if (dst & SLJIT_MEM)+			return store_word(compiler, tmp0, dst, dstw, op & SLJIT_I32_OP);+		return SLJIT_SUCCESS;+	case SLJIT_MUL:+		FAIL_IF(sljit_emit_multiply(compiler, op, dst, dstw, src1, src1w, src2, src2w));+		break;+	case SLJIT_AND:+	case SLJIT_OR:+	case SLJIT_XOR:+		FAIL_IF(sljit_emit_bitwise(compiler, op, dst, dstw, src1, src1w, src2, src2w));+		break;+	case SLJIT_SHL:+	case SLJIT_LSHR:+	case SLJIT_ASHR:+		FAIL_IF(sljit_emit_shift(compiler, op, dst, dstw, src1, src1w, src2, src2w));+		break;+	}++	if (dst & SLJIT_MEM)+		return store_word(compiler, tmp0, dst, dstw, op & SLJIT_I32_OP);+	return SLJIT_SUCCESS;+}++SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_src(+	struct sljit_compiler *compiler,+	sljit_s32 op, sljit_s32 src, sljit_sw srcw)+{+	sljit_gpr src_r;++	CHECK_ERROR();+	CHECK(check_sljit_emit_op_src(compiler, op, src, srcw));+	ADJUST_LOCAL_OFFSET(src, srcw);++	switch (op) {+	case SLJIT_FAST_RETURN:+		src_r = FAST_IS_REG(src) ? gpr(src) : tmp1;+		if (src & SLJIT_MEM)+			FAIL_IF(load_word(compiler, tmp1, src, srcw, 0));++		return push_inst(compiler, br(src_r));+	case SLJIT_SKIP_FRAMES_BEFORE_FAST_RETURN:+		/* TODO(carenas): implement? */+		return SLJIT_SUCCESS;+	case SLJIT_PREFETCH_L1:+	case SLJIT_PREFETCH_L2:+	case SLJIT_PREFETCH_L3:+	case SLJIT_PREFETCH_ONCE:+		/* TODO(carenas): implement */+		return SLJIT_SUCCESS;+	default:+                /* TODO(carenas): probably should not success by default */+		return SLJIT_SUCCESS;+	}++	return SLJIT_SUCCESS;+}++SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_get_register_index(sljit_s32 reg)+{+	CHECK_REG_INDEX(check_sljit_get_register_index(reg));+	return gpr(reg);+}++SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_get_float_register_index(sljit_s32 reg)+{+	CHECK_REG_INDEX(check_sljit_get_float_register_index(reg));+	abort();+}++SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_custom(struct sljit_compiler *compiler,+	void *instruction, sljit_s32 size)+{+	sljit_ins ins = 0;++	CHECK_ERROR();+	CHECK(check_sljit_emit_op_custom(compiler, instruction, size));++	memcpy((sljit_u8 *)&ins + sizeof(ins) - size, instruction, size);+	return push_inst(compiler, ins);+}++/* --------------------------------------------------------------------- */+/*  Floating point operators                                             */+/* --------------------------------------------------------------------- */++SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fop1(struct sljit_compiler *compiler, sljit_s32 op,+	sljit_s32 dst, sljit_sw dstw,+	sljit_s32 src, sljit_sw srcw)+{+	CHECK_ERROR();+	abort();+}++SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fop2(struct sljit_compiler *compiler, sljit_s32 op,+	sljit_s32 dst, sljit_sw dstw,+	sljit_s32 src1, sljit_sw src1w,+	sljit_s32 src2, sljit_sw src2w)+{+	CHECK_ERROR();+	abort();+}++/* --------------------------------------------------------------------- */+/*  Other instructions                                                   */+/* --------------------------------------------------------------------- */++SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fast_enter(struct sljit_compiler *compiler, sljit_s32 dst, sljit_sw dstw)+{+	CHECK_ERROR();+	CHECK(check_sljit_emit_fast_enter(compiler, dst, dstw));+	ADJUST_LOCAL_OFFSET(dst, dstw);++	if (FAST_IS_REG(dst))+		return push_inst(compiler, lgr(gpr(dst), fast_link_r));++	/* memory */+	return store_word(compiler, fast_link_r, dst, dstw, 0);+}++/* --------------------------------------------------------------------- */+/*  Conditional instructions                                             */+/* --------------------------------------------------------------------- */++SLJIT_API_FUNC_ATTRIBUTE struct sljit_label* sljit_emit_label(struct sljit_compiler *compiler)+{+	struct sljit_label *label;++	CHECK_ERROR_PTR();+	CHECK_PTR(check_sljit_emit_label(compiler));++	if (compiler->last_label && compiler->last_label->size == compiler->size)+		return compiler->last_label;++	label = (struct sljit_label*)ensure_abuf(compiler, sizeof(struct sljit_label));+	PTR_FAIL_IF(!label);+	set_label(label, compiler);+	return label;+}++SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_jump(struct sljit_compiler *compiler, sljit_s32 type)+{+	sljit_u8 mask = ((type & 0xff) < SLJIT_JUMP) ? get_cc(compiler, type & 0xff) : 0xf;++	CHECK_ERROR_PTR();+	CHECK_PTR(check_sljit_emit_jump(compiler, type));++	/* record jump */+	struct sljit_jump *jump = (struct sljit_jump *)+		ensure_abuf(compiler, sizeof(struct sljit_jump));+	PTR_FAIL_IF(!jump);+	set_jump(jump, compiler, type & SLJIT_REWRITABLE_JUMP);+	jump->addr = compiler->size;++	/* emit jump instruction */+	type &= 0xff;+	if (type >= SLJIT_FAST_CALL)+		PTR_FAIL_IF(push_inst(compiler, brasl(type == SLJIT_FAST_CALL ? fast_link_r : link_r, 0)));+	else+		PTR_FAIL_IF(push_inst(compiler, brcl(mask, 0)));++	return jump;+}++SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_call(struct sljit_compiler *compiler, sljit_s32 type,+	sljit_s32 arg_types)+{+	CHECK_ERROR_PTR();+	CHECK_PTR(check_sljit_emit_call(compiler, type, arg_types));++#if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) \+		|| (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS)+	compiler->skip_checks = 1;+#endif++	return sljit_emit_jump(compiler, type);+}++SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_ijump(struct sljit_compiler *compiler, sljit_s32 type, sljit_s32 src, sljit_sw srcw)+{+	sljit_gpr src_r = FAST_IS_REG(src) ? gpr(src) : tmp1;++	CHECK_ERROR();+	CHECK(check_sljit_emit_ijump(compiler, type, src, srcw));+	ADJUST_LOCAL_OFFSET(src, srcw);++	if (src & SLJIT_IMM) {+		SLJIT_ASSERT(!(srcw & 1)); /* target address must be even */+		FAIL_IF(push_load_imm_inst(compiler, src_r, srcw));+	}+	else if (src & SLJIT_MEM)+		FAIL_IF(load_word(compiler, src_r, src, srcw, 0 /* 64-bit */));++	/* emit jump instruction */+	if (type >= SLJIT_FAST_CALL)+		return push_inst(compiler, basr(type == SLJIT_FAST_CALL ? fast_link_r : link_r, src_r));++	return push_inst(compiler, br(src_r));+}++SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_icall(struct sljit_compiler *compiler, sljit_s32 type,+	sljit_s32 arg_types,+	sljit_s32 src, sljit_sw srcw)+{+	CHECK_ERROR();+	CHECK(check_sljit_emit_icall(compiler, type, arg_types, src, srcw));++#if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) \+		|| (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS)+	compiler->skip_checks = 1;+#endif++	return sljit_emit_ijump(compiler, type, src, srcw);+}++SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_flags(struct sljit_compiler *compiler, sljit_s32 op,+	sljit_s32 dst, sljit_sw dstw,+	sljit_s32 type)+{+	sljit_u8 mask = get_cc(compiler, type & 0xff);++	CHECK_ERROR();+	CHECK(check_sljit_emit_op_flags(compiler, op, dst, dstw, type));++	sljit_gpr dst_r = FAST_IS_REG(dst) ? gpr(dst & REG_MASK) : tmp0;+	sljit_gpr loc_r = tmp1;+	switch (GET_OPCODE(op)) {+	case SLJIT_AND:+	case SLJIT_OR:+	case SLJIT_XOR:+		compiler->status_flags_state = op & SLJIT_SET_Z;++		/* dst is also source operand */+		if (dst & SLJIT_MEM)+			FAIL_IF(load_word(compiler, dst_r, dst, dstw, op & SLJIT_I32_OP));++		break;+	case SLJIT_MOV:+	case (SLJIT_MOV32 & ~SLJIT_I32_OP):+		/* can write straight into destination */+		loc_r = dst_r;+		break;+	default:+		SLJIT_UNREACHABLE();+	}++	/* TODO(mundaym): fold into cmov helper function? */+	#define LEVAL(i) i(loc_r, 1, mask)+	if (have_lscond2()) {+		FAIL_IF(push_load_imm_inst(compiler, loc_r, 0));+		FAIL_IF(push_inst(compiler,+			WHEN2(op & SLJIT_I32_OP, lochi, locghi)));+	} else {+		/* TODO(mundaym): no load/store-on-condition 2 facility (ipm? branch-and-set?) */+		abort();+	}+	#undef LEVAL++	/* apply bitwise op and set condition codes */+	switch (GET_OPCODE(op)) {+	#define LEVAL(i) i(dst_r, loc_r)+	case SLJIT_AND:+		FAIL_IF(push_inst(compiler,+			WHEN2(op & SLJIT_I32_OP, nr, ngr)));+		break;+	case SLJIT_OR:+		FAIL_IF(push_inst(compiler,+			WHEN2(op & SLJIT_I32_OP, or, ogr)));+		break;+	case SLJIT_XOR:+		FAIL_IF(push_inst(compiler,+			WHEN2(op & SLJIT_I32_OP, xr, xgr)));+		break;+	#undef LEVAL+	}++	/* store result to memory if required */+	if (dst & SLJIT_MEM)+		return store_word(compiler, dst_r, dst, dstw, op & SLJIT_I32_OP);++	return SLJIT_SUCCESS;+}++SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_cmov(struct sljit_compiler *compiler, sljit_s32 type,+	sljit_s32 dst_reg,+	sljit_s32 src, sljit_sw srcw)+{+	sljit_u8 mask = get_cc(compiler, type & 0xff);+	sljit_gpr dst_r = gpr(dst_reg & ~SLJIT_I32_OP);+	sljit_gpr src_r = FAST_IS_REG(src) ? gpr(src) : tmp0;++	CHECK_ERROR();+	CHECK(check_sljit_emit_cmov(compiler, type, dst_reg, src, srcw));++	if (src & SLJIT_IMM) {+		/* TODO(mundaym): fast path with lscond2 */+		FAIL_IF(push_load_imm_inst(compiler, src_r, srcw));+	}++	#define LEVAL(i) i(dst_r, src_r, mask)+	if (have_lscond1())+		return push_inst(compiler,+			WHEN2(dst_reg & SLJIT_I32_OP, locr, locgr));++	#undef LEVAL++	/* TODO(mundaym): implement */+	return SLJIT_ERR_UNSUPPORTED;+}++/* --------------------------------------------------------------------- */+/*  Other instructions                                                   */+/* --------------------------------------------------------------------- */++/* On s390x we build a literal pool to hold constants. This has two main+   advantages:++     1. we only need one instruction in the instruction stream (LGRL)+     2. we can store 64 bit addresses and use 32 bit offsets++   To retrofit the extra information needed to build the literal pool we+   add a new sljit_s390x_const struct that contains the initial value but+   can still be cast to a sljit_const. */++SLJIT_API_FUNC_ATTRIBUTE struct sljit_const* sljit_emit_const(struct sljit_compiler *compiler, sljit_s32 dst, sljit_sw dstw, sljit_sw init_value)+{+	struct sljit_s390x_const *const_;+	sljit_gpr dst_r;++	CHECK_ERROR_PTR();+	CHECK_PTR(check_sljit_emit_const(compiler, dst, dstw, init_value));++	const_ = (struct sljit_s390x_const*)ensure_abuf(compiler,+					sizeof(struct sljit_s390x_const));+	PTR_FAIL_IF(!const_);+	set_const((struct sljit_const*)const_, compiler);+	const_->init_value = init_value;++	dst_r = FAST_IS_REG(dst) ? gpr(dst & REG_MASK) : tmp0;+	if (have_genext())+		PTR_FAIL_IF(push_inst(compiler, sljit_ins_const | lgrl(dst_r, 0)));+	else {+		PTR_FAIL_IF(push_inst(compiler, sljit_ins_const | larl(tmp1, 0)));+		PTR_FAIL_IF(push_inst(compiler, lg(dst_r, 0, r0, tmp1)));+	}++	if (dst & SLJIT_MEM)+		PTR_FAIL_IF(store_word(compiler, dst_r, dst, dstw, 0 /* always 64-bit */));++	return (struct sljit_const*)const_;+}++SLJIT_API_FUNC_ATTRIBUTE void sljit_set_jump_addr(sljit_uw addr, sljit_uw new_target, sljit_sw executable_offset)+{+	/* Update the constant pool. */+	sljit_uw *ptr = (sljit_uw *)addr;+	SLJIT_UNUSED_ARG(executable_offset);++	SLJIT_UPDATE_WX_FLAGS(ptr, ptr + 1, 0);+	*ptr = new_target;+	SLJIT_UPDATE_WX_FLAGS(ptr, ptr + 1, 1);+	SLJIT_CACHE_FLUSH(ptr, ptr + 1);+}++SLJIT_API_FUNC_ATTRIBUTE void sljit_set_const(sljit_uw addr, sljit_sw new_constant, sljit_sw executable_offset)+{+	sljit_set_jump_addr(addr, new_constant, executable_offset);+}++SLJIT_API_FUNC_ATTRIBUTE struct sljit_put_label *sljit_emit_put_label(+	struct sljit_compiler *compiler,+	sljit_s32 dst, sljit_sw dstw)+{+	struct sljit_put_label *put_label;+	sljit_gpr dst_r;++	CHECK_ERROR_PTR();+	CHECK_PTR(check_sljit_emit_put_label(compiler, dst, dstw));+	ADJUST_LOCAL_OFFSET(dst, dstw);++	put_label = (struct sljit_put_label*)ensure_abuf(compiler, sizeof(struct sljit_put_label));+	PTR_FAIL_IF(!put_label);+	set_put_label(put_label, compiler, 0);++	dst_r = FAST_IS_REG(dst) ? gpr(dst & REG_MASK) : tmp0;++	if (have_genext())+		PTR_FAIL_IF(push_inst(compiler, lgrl(dst_r, 0)));+	else {+		PTR_FAIL_IF(push_inst(compiler, larl(tmp1, 0)));+		PTR_FAIL_IF(push_inst(compiler, lg(dst_r, 0, r0, tmp1)));+	}++	if (dst & SLJIT_MEM)+		PTR_FAIL_IF(store_word(compiler, dst_r, dst, dstw, 0));  	return put_label; }
src/c/pcre2/src/sljit/sljitNativeSPARC_32.c view
@@ -93,18 +93,21 @@ 		return push_inst(compiler, ADD | D(dst) | S1(dst) | IMM(1), UNMOVABLE_INS);  	case SLJIT_ADD:+		compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD_SUB; 		return push_inst(compiler, ADD | (flags & SET_FLAGS) | D(dst) | S1(src1) | ARG2(flags, src2), DR(dst) | (flags & SET_FLAGS));  	case SLJIT_ADDC: 		return push_inst(compiler, ADDC | (flags & SET_FLAGS) | D(dst) | S1(src1) | ARG2(flags, src2), DR(dst) | (flags & SET_FLAGS));  	case SLJIT_SUB:+		compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD_SUB; 		return push_inst(compiler, SUB | (flags & SET_FLAGS) | D(dst) | S1(src1) | ARG2(flags, src2), DR(dst) | (flags & SET_FLAGS));  	case SLJIT_SUBC: 		return push_inst(compiler, SUBC | (flags & SET_FLAGS) | D(dst) | S1(src1) | ARG2(flags, src2), DR(dst) | (flags & SET_FLAGS));  	case SLJIT_MUL:+		compiler->status_flags_state = 0; 		FAIL_IF(push_inst(compiler, SMUL | D(dst) | S1(src1) | ARG2(flags, src2), DR(dst))); 		if (!(flags & SET_FLAGS)) 			return SLJIT_SUCCESS;
src/c/pcre2/src/sljit/sljitNativeSPARC_common.c view
@@ -1275,16 +1275,14 @@ 	return label; } -static sljit_ins get_cc(sljit_s32 type)+static sljit_ins get_cc(struct sljit_compiler *compiler, sljit_s32 type) { 	switch (type) { 	case SLJIT_EQUAL:-	case SLJIT_MUL_NOT_OVERFLOW: 	case SLJIT_NOT_EQUAL_F64: /* Unordered. */ 		return DA(0x1);  	case SLJIT_NOT_EQUAL:-	case SLJIT_MUL_OVERFLOW: 	case SLJIT_EQUAL_F64: 		return DA(0x9); @@ -1317,10 +1315,16 @@ 		return DA(0x2);  	case SLJIT_OVERFLOW:+		if (!(compiler->status_flags_state & SLJIT_CURRENT_FLAGS_ADD_SUB))+			return DA(0x9);+ 	case SLJIT_UNORDERED_F64: 		return DA(0x7);  	case SLJIT_NOT_OVERFLOW:+		if (!(compiler->status_flags_state & SLJIT_CURRENT_FLAGS_ADD_SUB))+			return DA(0x1);+ 	case SLJIT_ORDERED_F64: 		return DA(0xf); @@ -1347,7 +1351,7 @@ 		if (((compiler->delay_slot & DST_INS_MASK) != UNMOVABLE_INS) && !(compiler->delay_slot & ICC_IS_SET)) 			jump->flags |= IS_MOVABLE; #if (defined SLJIT_CONFIG_SPARC_32 && SLJIT_CONFIG_SPARC_32)-		PTR_FAIL_IF(push_inst(compiler, BICC | get_cc(type ^ 1) | 5, UNMOVABLE_INS));+		PTR_FAIL_IF(push_inst(compiler, BICC | get_cc(compiler, type ^ 1) | 5, UNMOVABLE_INS)); #else #error "Implementation required" #endif@@ -1357,7 +1361,7 @@ 		if (((compiler->delay_slot & DST_INS_MASK) != UNMOVABLE_INS) && !(compiler->delay_slot & FCC_IS_SET)) 			jump->flags |= IS_MOVABLE; #if (defined SLJIT_CONFIG_SPARC_32 && SLJIT_CONFIG_SPARC_32)-		PTR_FAIL_IF(push_inst(compiler, FBFCC | get_cc(type ^ 1) | 5, UNMOVABLE_INS));+		PTR_FAIL_IF(push_inst(compiler, FBFCC | get_cc(compiler, type ^ 1) | 5, UNMOVABLE_INS)); #else #error "Implementation required" #endif@@ -1474,9 +1478,9 @@  	type &= 0xff; 	if (type < SLJIT_EQUAL_F64)-		FAIL_IF(push_inst(compiler, BICC | get_cc(type) | 3, UNMOVABLE_INS));+		FAIL_IF(push_inst(compiler, BICC | get_cc(compiler, type) | 3, UNMOVABLE_INS)); 	else-		FAIL_IF(push_inst(compiler, FBFCC | get_cc(type) | 3, UNMOVABLE_INS));+		FAIL_IF(push_inst(compiler, FBFCC | get_cc(compiler, type) | 3, UNMOVABLE_INS));  	FAIL_IF(push_inst(compiler, OR | D(reg) | S1(0) | IMM(1), UNMOVABLE_INS)); 	FAIL_IF(push_inst(compiler, OR | D(reg) | S1(0) | IMM(0), UNMOVABLE_INS));
src/c/pcre2/src/sljit/sljitNativeX86_common.c view
@@ -411,11 +411,9 @@ 		return 0x8e /* jle */;  	case SLJIT_OVERFLOW:-	case SLJIT_MUL_OVERFLOW: 		return 0x80 /* jo */;  	case SLJIT_NOT_OVERFLOW:-	case SLJIT_MUL_NOT_OVERFLOW: 		return 0x81 /* jno */;  	case SLJIT_UNORDERED_F64:
src/hs/Text/Regex/Pcre2/Internal.hs view
@@ -1,6 +1,5 @@ {-# LANGUAGE DeriveFunctor #-} {-# LANGUAGE ExistentialQuantification #-}-{-# LANGUAGE FunctionalDependencies #-} {-# LANGUAGE LambdaCase #-} {-# LANGUAGE MultiWayIf #-} {-# LANGUAGE RankNTypes #-}@@ -16,7 +15,7 @@ import           Data.Foldable              (foldl', toList) import           Data.Functor.Identity      (Identity(..)) import           Data.IORef-import           Data.IntMap.Strict         (IntMap, (!?))+import           Data.IntMap.Strict         (IntMap) import qualified Data.IntMap.Strict         as IM import           Data.List.NonEmpty         (NonEmpty(..)) import           Data.Maybe                 (fromMaybe)@@ -28,7 +27,7 @@ import           Data.Typeable              (cast) import           Data.Void                  (Void, absurd) import           Foreign-import           Foreign.C.Types+import           Foreign.C.Types            (CInt(..), CUInt(..), CUShort) import qualified Foreign.Concurrent         as Conc import           Lens.Micro import           Lens.Micro.Extras          (preview, view)@@ -117,14 +116,14 @@         | Text.length substring > Text.length text `div` 2 = substring         | otherwise                                        = Text.copy substring --- | Probably unnecessary, but unrestricted 'castPtr' feels dangerous.-class CastCUs a b | a -> b where-    castCUs :: Ptr a -> Ptr b-    castCUs = castPtr-    {-# INLINE castCUs #-}-instance CastCUs CUShort Word16-instance CastCUs Word16 CUShort+-- | Safe, type-restricted `castPtr`.+fromCUs :: Ptr CUShort -> Ptr Word16+fromCUs = castPtr +-- | Safe, type-restricted `castPtr`.+toCUs :: Ptr Word16 -> Ptr CUShort+toCUs = castPtr+ -- ** Lens utilities  -- | A more general `toListOf` that collects targets into any `Alternative`.@@ -139,9 +138,9 @@ -- | A @FreeT@-style stream that can short-circuit. data Stream b m a     = StreamPure a-    | StreamYield b (Stream b m a)    -- ^ yield a value and keep going-    | StreamEffect (m (Stream b m a)) -- ^ have an effect and keep going-    | StreamStop                      -- ^ short-circuit+    | StreamYield b (Stream b m a)    -- ^ Yield a value and keep going.+    | StreamEffect (m (Stream b m a)) -- ^ Have an effect and keep going.+    | StreamStop                      -- ^ Short-circuit.     deriving (Functor)  instance (Functor m) => Applicative (Stream b m) where@@ -323,7 +322,7 @@     -- argument.  Returning @False@ aborts pattern compilation with an     -- exception.  Multiples of this option before the rightmost are ignored.     ---    -- /NOTE: Currently (PCRE2 version 10\.37) patterns seem to be compiled in/+    -- /NOTE: Currently (PCRE2 version 10\.39) patterns seem to be compiled in/     -- /two passes, both times triggering the recursion guard.  Also, it is/     -- /triggered at the beginning of the pattern, passing 0.  None of this is/     -- /documented; expect the unexpected in the presence of side effects!/@@ -593,36 +592,33 @@     xtraOpts <- bitOr <$> extractOptsOf _CompileExtraOption     recGuard <- preview _last <$> extractOptsOf _CompileRecGuardOption -    compileEnvCtx <- sequence $ do-        guard $ not $ null ctxUpds && xtraOpts == 0 && null recGuard-        Just $ liftIO $ do+    if null ctxUpds && xtraOpts == 0 && null recGuard+        then return CompileEnv{+            compileEnvCtx  = Nothing,+            compileEnvERef = Nothing}++        else liftIO $ do             ctx <- mkForeignPtr pcre2_compile_context_free $                 pcre2_compile_context_create nullPtr              forM_ ctxUpds $ \update -> update ctx+             when (xtraOpts /= 0) $ withForeignPtr ctx $ \ctxPtr ->                 pcre2_set_compile_extra_options ctxPtr xtraOpts >>= check (== 0) -            return ctx--    compileEnvERef <- sequence $ do-        ctx <- compileEnvCtx-        f <- recGuard-        Just $ liftIO $ do-            eRef <- newIORef Nothing-            funPtr <- mkFunPtr ctx $ mkRecursionGuard $ \depth _ -> do-                resultOrE <- try $ f (fromIntegral depth) >>= evaluate-                case resultOrE of-                    Right success -> return $ if success then 0 else 1-                    Left e        -> writeIORef eRef (Just e) >> return 1--            withForeignPtr ctx $ \ctxPtr ->-                pcre2_set_compile_recursion_guard ctxPtr funPtr nullPtr >>=-                    check (== 0)--            return eRef+            compileEnvERef <- forM recGuard $ \f -> do+                eRef <- newIORef Nothing+                funPtr <- mkFunPtr ctx $ mkRecursionGuard $ \depth _ -> do+                    resultOrE <- try $ f (fromIntegral depth) >>= evaluate+                    case resultOrE of+                        Right success -> return $ if success then 0 else 1+                        Left e        -> writeIORef eRef (Just e) >> return 1+                withForeignPtr ctx $ \ctxPtr ->+                    pcre2_set_compile_recursion_guard ctxPtr funPtr nullPtr >>=+                        check (== 0)+                return eRef -    return CompileEnv{..}+            return CompileEnv{compileEnvCtx = Just ctx, ..}  -- | Inputs to `Code` compilation besides the pattern. data CompileEnv = CompileEnv{@@ -642,7 +638,7 @@         alloca $ \errorOffPtr ->         withForeignOrNullPtr compileEnvCtx $ \ctxPtr -> do             codePtr <- pcre2_compile-                (castCUs pattPtr)+                (toCUs pattPtr)                 (fromIntegral pattCUs)                 opts                 errorCodePtr@@ -650,7 +646,7 @@                 ctxPtr             when (codePtr == nullPtr) $ do                 -- Re-throw exception (if any) from recursion guard (if any)-                forOf_ _Just compileEnvERef $ readIORef >=> mapM_ throwIO+                forM_ compileEnvERef $ readIORef >=> mapM_ throwIO                 -- Otherwise throw PCRE2 error                 errorCode <- peek errorCodePtr                 offCUs <- peek errorOffPtr@@ -678,9 +674,7 @@         ctxUpds -> liftIO $ Just <$> do             ctx <- mkForeignPtr pcre2_match_context_free $                 pcre2_match_context_create nullPtr-             forM_ ctxUpds $ \update -> update ctx-             return ctx      matchEnvCallout <- preview _last <$> extractOptsOf _CalloutOption@@ -710,7 +704,7 @@             result <- liftIO $ withForeignOrNullPtr matchTempEnvCtx $ \ctxPtr ->                 pcre2_match                     codePtr-                    (castCUs subjPtr)+                    (toCUs subjPtr)                     (fromIntegral subjCUs)                     curOff                     matchEnvOpts@@ -776,13 +770,13 @@             run :: CUInt -> Ptr Pcre2_match_context -> PCRE2_SPTR -> IO CInt             run curOpts ctxPtr outBufPtr = pcre2_substitute                 codePtr-                (castCUs subjPtr)+                (toCUs subjPtr)                 (fromIntegral subjCUs)                 0                 (matchEnvOpts .|. curOpts)                 nullPtr                 ctxPtr-                (castCUs replPtr)+                (toCUs replPtr)                 (fromIntegral replCUs)                 outBufPtr                 outLenPtr@@ -792,7 +786,7 @@             checkAndGetOutput result outBufPtr = do                 check (> 0) result                 outLen <- peek outLenPtr-                out <- Text.fromPtr (castCUs outBufPtr) (fromIntegral outLen)+                out <- Text.fromPtr (fromCUs outBufPtr) (fromIntegral outLen)                 return (result, out)          poke outLenPtr $ fromIntegral initOutLen@@ -818,7 +812,7 @@                         -- Do not run any substitution callouts run previously.                         matchEnvSubCallout = fastFwd <$> matchEnvSubCallout}                     fastFwd f = \info ->-                        case subsLog !? subCalloutSubsCount info of+                        case subsLog IM.!? subCalloutSubsCount info of                             Just result -> return result                             Nothing     -> f info                 MatchTempEnv{..} <- mkMatchTempEnv finalMatchEnv subject@@ -844,20 +838,28 @@     -> Text -- ^ Callout info requires access to the original subject.     -> IO MatchTempEnv mkMatchTempEnv MatchEnv{..} subject-    | null matchEnvCallout && null matchEnvSubCallout = return noCallouts-    | otherwise                                       = do+    | null matchEnvCallout && null matchEnvSubCallout = return MatchTempEnv{+        matchTempEnvCtx = matchEnvCtx,+        matchTempEnvRef = Nothing}++    | otherwise = do         stateRef <- newIORef CalloutState{             calloutStateException = Nothing,             calloutStateSubsLog   = IM.empty}-        ctx <- mkForeignPtr pcre2_match_context_free ctxPtrForCallouts +        ctx <- mkForeignPtr pcre2_match_context_free $ case matchEnvCtx of+            -- No pre-existing match context, so create one afresh.+            Nothing -> pcre2_match_context_create nullPtr+            -- Pre-existing match context, so copy it.+            Just ctx -> withForeignPtr ctx pcre2_match_context_copy+         -- Install C function pointers in the @pcre2_match_context@.  When         -- dereferenced and called, they will force the user-supplied Haskell         -- callout functions and their results, catching any exceptions and         -- saving them.          -- Install callout, if any-        forOf_ _Just matchEnvCallout $ \f -> do+        forM_ matchEnvCallout $ \f -> do             funPtr <- mkFunPtr ctx $ mkCallout $ \blockPtr _ -> do                 info <- getCalloutInfo subject blockPtr                 resultOrE <- try $ f info >>= evaluate@@ -873,7 +875,7 @@                 pcre2_set_callout ctxPtr funPtr nullPtr >>= check (== 0)          -- Install substitution callout, if any-        forOf_ _Just matchEnvSubCallout $ \f -> do+        forM_ matchEnvSubCallout $ \f -> do             funPtr <- mkFunPtr ctx $ mkCallout $ \blockPtr _ -> do                 info <- getSubCalloutInfo subject blockPtr                 resultOrE <- try $ f info >>= evaluate@@ -888,24 +890,14 @@                     Left e -> do                         modifyIORef' stateRef $ _calloutStateException ?~ e                         return (-1)-            withForeignPtr ctx $ \ctxPtr -> do-                result <- pcre2_set_substitute_callout ctxPtr funPtr nullPtr-                check (== 0) result+            withForeignPtr ctx $ \ctxPtr ->+                pcre2_set_substitute_callout ctxPtr funPtr nullPtr >>=+                    check (== 0)          return MatchTempEnv{             matchTempEnvCtx = Just ctx,             matchTempEnvRef = Just stateRef} -    where-    noCallouts = MatchTempEnv{-        matchTempEnvCtx = matchEnvCtx,-        matchTempEnvRef = Nothing}-    ctxPtrForCallouts = case matchEnvCtx of-        -- No pre-existing match context, so create one afresh.-        Nothing -> pcre2_match_context_create nullPtr-        -- Pre-existing match context, so copy it.-        Just ctx -> withForeignPtr ctx pcre2_match_context_copy- -- | Per-call data for @pcre2_match()@ etc. data MatchTempEnv = MatchTempEnv{     matchTempEnvCtx :: !(Maybe MatchContext),@@ -947,7 +939,7 @@             else do                 -- String callout                 len <- pcre2_callout_block_callout_string_length blockPtr-                CalloutName <$> Text.fromPtr (castCUs str) (fromIntegral len)+                CalloutName <$> Text.fromPtr (fromCUs str) (fromIntegral len)      calloutCaptures <- do         ovecPtr <- pcre2_callout_block_offset_vector blockPtr@@ -969,7 +961,7 @@                 len <- fix1 0 $ \continue off -> peekElemOff ptr off >>= \case                     0 -> return off                     _ -> continue $ off + 1-                Text.fromPtr (castCUs ptr) (fromIntegral len)+                Text.fromPtr (fromCUs ptr) (fromIntegral len)      flags <- pcre2_callout_block_callout_flags blockPtr     let calloutIsFirst = flags .&. pcre2_CALLOUT_STARTMATCH /= 0@@ -1000,7 +992,7 @@         offsetsPtr <- pcre2_substitute_callout_block_output_offsets blockPtr         [start, end] <- forM [0, 1] $ peekElemOff offsetsPtr         Text.fromPtr-            (castCUs $ advancePtr outPtr $ fromIntegral start)+            (fromCUs $ advancePtr outPtr $ fromIntegral start)             (fromIntegral $ end - start)      return SubCalloutInfo{..}@@ -1059,7 +1051,10 @@ -- -- * `Identity` when we only want the 0th; ----- * `Proxy` when we are only checking if a match succeeded.+-- * `Proxy` when we are only checking if a match succeeded;+--+-- * `[]` when we want to easily pattern match specific capture groups via+--   Template Haskell-generated @ViewPatterns@. type FromMatch t = Ptr Pcre2_match_data -> IO (t Slice)  -- | Read all specifically indexed captures\' offsets from match results.@@ -1240,13 +1235,13 @@         groupNumber <- peek entryPtr         groupNameLen <- lengthArray0 0 groupNamePtr         groupName <- Text.fromPtr-            (castCUs groupNamePtr)+            (fromCUs groupNamePtr)             (fromIntegral groupNameLen)         return (fromIntegral groupNumber, groupName)      hiCaptNum <- getCodeInfo @CUInt codePtr pcre2_INFO_CAPTURECOUNT -    return $ map (names !?) [1 .. fromIntegral hiCaptNum]+    return $ map (names IM.!?) [1 .. fromIntegral hiCaptNum]  -- | Low-level access to compiled pattern info, per the docs. getCodeInfo :: (Storable a) => Ptr Pcre2_code -> CUInt -> IO a@@ -1306,7 +1301,7 @@     let bufCUs = 120     allocaBytes (bufCUs * 2) $ \bufPtr -> do         cus <- pcre2_get_error_message errorCode bufPtr (fromIntegral bufCUs)-        Text.fromPtr (castCUs bufPtr) (fromIntegral cus)+        Text.fromPtr (fromCUs bufPtr) (fromIntegral cus)  -- | Most PCRE2 C functions return an @int@ indicating a possible error.  Test -- it against a predicate, and throw an exception upon failure.
src/hs/Text/Regex/Pcre2/TH.hs view
@@ -20,7 +20,7 @@ import           Data.Proxy                 (Proxy(..)) import           Data.Text                  (Text) import qualified Data.Text                  as Text-import           Data.Type.Bool             (If, type (||))+import           Data.Type.Bool             (type (||), If) import           Data.Type.Equality         (type (==)) import           GHC.TypeLits               hiding (Text) import qualified GHC.TypeLits               as TypeLits@@ -46,9 +46,6 @@ -- be written with the help of @{-\# LANGUAGE PartialTypeSignatures \#-}@. newtype Captures (info :: CapturesInfo) = Captures (NonEmpty Text) -captured :: Lens' (NonEmpty Text) (Captures info)-captured f cs = f (Captures cs) <&> \(Captures cs') -> cs'- -- | The kind of `Captures`\'s @info@.  The first number is the total number of -- parenthesized captures, and the list is a lookup table from capture names to -- numbers.@@ -154,13 +151,11 @@  -- | Helper for `regex` with no parenthesized captures. matchTH :: (Alternative f) => Text -> Text -> f Text-matchTH patt = toAlternativeOf $-    _gcaptures (memoMatcher patt) get0thSlice . _Identity+matchTH patt = toAlternativeOf $ _matchTH patt  -- | Helper for `regex` with parenthesized captures. capturesTH :: (Alternative f) => Text -> Proxy info -> Text -> f (Captures info)-capturesTH patt _ = toAlternativeOf $-    _gcaptures (memoMatcher patt) getAllSlices . captured+capturesTH patt proxy = toAlternativeOf $ _capturesTH patt proxy  -- | Helper for `regex` as a guard pattern. matchesTH :: Text -> Text -> Bool@@ -177,7 +172,8 @@  -- | Helper for `_regex` with parenthesized captures. _capturesTH :: Text -> Proxy info -> Traversal' Text (Captures info)-_capturesTH patt _ = _gcaptures (memoMatcher patt) getAllSlices . captured+_capturesTH patt _ = _gcaptures (memoMatcher patt) getAllSlices . captured where+    captured f cs = f (Captures cs) <&> \(Captures cs') -> cs'  -- | === As an expression --