Mercurial > ~dholland > hg > ag > index.cgi
view tests/agcl/oldagsrc/good/xvmc.cpp @ 23:cac4c76600eb
Update lint ok file for recent change.
author | David A. Holland |
---|---|
date | Mon, 13 Jun 2022 00:17:10 -0400 |
parents | 13d2b8934445 |
children |
line wrap: on
line source
/* XVMC.SYN Extensible Scripting Language Copyright (c) 1998 Parsifal Software, All Rights Reserved. The expression syntax is borrowed from C but with the addition of the FORTRAN exponentiation operator (**). The supported operations are: Assignment operators: =, +=, -=, *=, /=, %=, , &=, |=, ^=>>=, <<= Conditional expressions: ? : Logical operators: !, &&, || Bitwise logical operators: &, |, ^, ~ Comparison operators: ==, !=, <, <=, >, >= Shift operators: <<, >> Binary arithmetic operators: +, -, *, /, % Unary arithmetic operators: +, - Exponentiation: ** Autoincrement operators: ++, --; Cast operators (<type name>) Parentheses Function calls Object method calls Built in data types are int, double and String. Statements may include variable declarations, expression statements, blocks, if/else statements, while , do/while, or for statements, following the rules of C. The statement syntax has been written to avoid the conventional if/else ambiguity. Input strings may contain any number of statements. White space may be used freely, including both C and C++ style comments. xvmc.syn is compiled with the AnaGram parser generator yielding xvm.h and xvm.cpp. For information about AnaGram, visit http://www.parsifalsoft.com. */ #include <math.h> #include "xvm.h" // defines external interface #include "integer.h" #include "double.h" #include "xstring.h" static VirtualMachine *vm; typedef VirtualMachine::CodeSeg Code; // For the sake of readability /* * AnaGram, A System for Syntax Directed Programming * File generated by: ... * * AnaGram Parsing Engine * Copyright 1993-2002 Parsifal Software. All Rights Reserved. * * This software is provided 'as-is', without any express or implied * warranty. In no event will the authors be held liable for any damages * arising from the use of this software. * * Permission is granted to anyone to use this software for any purpose, * including commercial applications, and to alter it and redistribute it * freely, subject to the following restrictions: * * 1. The origin of this software must not be misrepresented; you must not * claim that you wrote the original software. If you use this software * in a product, an acknowledgment in the product documentation would be * appreciated but is not required. * 2. Altered source versions must be plainly marked as such, and must not be * misrepresented as being the original software. * 3. This notice may not be removed or altered from any source distribution. */ #ifndef XVMC_H #include "xvmc.h" #endif #ifndef XVMC_H #error Mismatched header file #endif #include <ctype.h> #include <stdio.h> #define RULE_CONTEXT (&((PCB).cs[(PCB).ssx])) #define ERROR_CONTEXT ((PCB).cs[(PCB).error_frame_ssx]) #define CONTEXT ((PCB).cs[(PCB).ssx]) vmCompile_pcb_type vmCompile_pcb; #define PCB vmCompile_pcb #define CHANGE_REDUCTION(x) vmCompile_change_reduction(vmCompile_##x##_token) int vmCompile_change_reduction(vmCompile_token_type); Code vmCompile_value(void); #line - "xvmc.syn" // begin embedded C #include <string.h> ErrorRecord::ErrorRecord(char *msg) : message(msg), line(PCB.line), column(PCB.column) {/* Initializers do it all */} ErrorLog errorLog; #define SYNTAX_ERROR errorLog.add(PCB.error_message) int VirtualMachine::compile(char *text) { vm = this; resetCharStack(); vmCompile_pcb.pointer = (unsigned char *) text; vmCompile(); { Code program = vmCompile_value() << EXIT; int n = program.size(); codeStore = new int[n]; while (n--) codeStore[n] = program[n]; } return vmCompile_pcb.exit_flag != AG_SUCCESS_CODE; } Code VirtualMachine::codeWhile(Code x, Code s) { Code branch(VirtualMachine::BR); branch << 0; //if (!x.type->isTruthDefined()) errorLog.add("True/False not defined"); x << VirtualMachine::BRF << (s.size() + branch.size()); int blockLength = s.size() + x.size() + branch.size(); x << s << VirtualMachine::BR << -blockLength; return x; } Code VirtualMachine::codeDoWhile(Code s, Code x) { Code branch(VirtualMachine::BR); branch << 0; int blockLength = s.size() + x.size() + branch.size(); //if (!x.type->isTruthDefined()) errorLog.add("True/False not defined"); s << x << VirtualMachine::BRT << -blockLength; return s; } Code VirtualMachine::codeFor(Code init, Code cond, Code inc, Code s) { s << inc; // append increment code to end of body of for loop //if (!cond.type->isTruthDefined()) errorLog.add("True/False not defined"); init << codeWhile(cond, s); return init; } #line - "xvmc.cpp" #ifndef CONVERT_CASE #define CONVERT_CASE(c) (c) #endif #ifndef TAB_SPACING #define TAB_SPACING 8 #endif Code vmCompile_value(void) { Code returnValue; returnValue = (*(Code *) &(PCB).vs[(PCB).ssx]); return returnValue; } static Code ag_rp_1(void) { #line - "xvmc.syn" return Code(); #line - "xvmc.cpp" } static Code ag_rp_2(Code x) { #line - "xvmc.syn" return x; #line - "xvmc.cpp" } static Code ag_rp_3(Code x) { #line - "xvmc.syn" return x; #line - "xvmc.cpp" } static Code ag_rp_4(void) { #line - "xvmc.syn" return errorLog.add("Continuing scan"), Code(); #line - "xvmc.cpp" } static Code ag_rp_5(int t, int n) { #line - "xvmc.syn" return vm->declareVariable(t,n), Code(); #line - "xvmc.cpp" } static Code ag_rp_6(int t, int n, Code x) { #line - "xvmc.syn" int name = vm->declareVariable(t,n); return Code(VirtualMachine::PUSHV) << name << x << VirtualMachine::ASSIGN << VirtualMachine::POP; #line - "xvmc.cpp" } static Code ag_rp_7(int t, int n, Code size) { #line - "xvmc.syn" return vm->declareArray(t,n, size); #line - "xvmc.cpp" } static Code ag_rp_8(int t, int n, Code args) { #line - "xvmc.syn" return vm->declareObject(t,n,args); #line - "xvmc.cpp" } static Code ag_rp_9(void) { #line - "xvmc.syn" return Code(); #line - "xvmc.cpp" } static Code ag_rp_10(Code x) { #line - "xvmc.syn" return x; #line - "xvmc.cpp" } static Code ag_rp_11(Code x) { #line - "xvmc.syn" return x.initList(); #line - "xvmc.cpp" } static Code ag_rp_12(Code list, Code x) { #line - "xvmc.syn" return list.append(x); #line - "xvmc.cpp" } static Code ag_rp_13(Code x) { #line - "xvmc.syn" return x; #line - "xvmc.cpp" } static Code ag_rp_14(Code x, Code s) { #line - "xvmc.syn" return x << s; #line - "xvmc.cpp" } static Code ag_rp_15(Code x) { #line - "xvmc.syn" return x << VirtualMachine::POP; #line - "xvmc.cpp" } static Code ag_rp_16(void) { #line - "xvmc.syn" return Code(); #line - "xvmc.cpp" } static Code ag_rp_17(void) { #line - "xvmc.syn" return Code(); #line - "xvmc.cpp" } static Code ag_rp_18(Code s) { #line - "xvmc.syn" return s; #line - "xvmc.cpp" } static Code ag_rp_19(Code s) { #line - "xvmc.syn" return errorLog.add("Continuing scan"), s; #line - "xvmc.cpp" } static Code ag_rp_20(Code s, Code x) { #line - "xvmc.syn" return vm->codeDoWhile(s,x); #line - "xvmc.cpp" } static Code ag_rp_21(Code x, Code s) { #line - "xvmc.syn" return vm->codeWhile(x,s); #line - "xvmc.cpp" } static Code ag_rp_22(Code init, Code cond, Code inc, Code s) { #line - "xvmc.syn" return vm->codeFor(init, cond, inc, s); #line - "xvmc.cpp" } static Code ag_rp_23(void) { #line - "xvmc.syn" return Code(); #line - "xvmc.cpp" } static Code ag_rp_24(Code x) { #line - "xvmc.syn" return x << VirtualMachine::POP; #line - "xvmc.cpp" } static Code ag_rp_25(Code list, Code x) { #line - "xvmc.syn" return list << x << VirtualMachine::POP; #line - "xvmc.cpp" } static Code ag_rp_26(Code x) { #line - "xvmc.syn" return x; #line - "xvmc.cpp" } static Code ag_rp_27(Code x, Code s) { #line - "xvmc.syn" return vm->codeWhile(x,s); #line - "xvmc.cpp" } static Code ag_rp_28(Code init, Code cond, Code inc, Code s) { #line - "xvmc.syn" return vm->codeFor(init, cond, inc, s); #line - "xvmc.cpp" } static Code ag_rp_29(Code x, Code s) { #line - "xvmc.syn" return x << VirtualMachine::BRF << s.size() << s; #line - "xvmc.cpp" } static Code ag_rp_30(Code x, Code s1, Code s2) { #line - "xvmc.syn" s1 << VirtualMachine::BR << s2.size(); x << VirtualMachine::BRF << s1.size() << s1 << s2; return x; #line - "xvmc.cpp" } static Code ag_rp_31(Code x) { #line - "xvmc.syn" return x; #line - "xvmc.cpp" } static Code ag_rp_32(Code x) { #line - "xvmc.syn" return x.testOK(); #line - "xvmc.cpp" } static Code ag_rp_33(Code k, Code x) { #line - "xvmc.syn" return k << x << VirtualMachine::ASSIGN; #line - "xvmc.cpp" } static Code ag_rp_34(Code k, Code x) { #line - "xvmc.syn" return k << x << VirtualMachine::ADD_EQ; #line - "xvmc.cpp" } static Code ag_rp_35(Code k, Code x) { #line - "xvmc.syn" return k << x << VirtualMachine::SUB_EQ; #line - "xvmc.cpp" } static Code ag_rp_36(Code k, Code x) { #line - "xvmc.syn" return k << x << VirtualMachine::MULT_EQ; #line - "xvmc.cpp" } static Code ag_rp_37(Code k, Code x) { #line - "xvmc.syn" return k << x << VirtualMachine::DIV_EQ; #line - "xvmc.cpp" } static Code ag_rp_38(Code k, Code x) { #line - "xvmc.syn" return k << x << VirtualMachine::MOD_EQ; #line - "xvmc.cpp" } static Code ag_rp_39(Code k, Code x) { #line - "xvmc.syn" return k << x << VirtualMachine::OR_EQ; #line - "xvmc.cpp" } static Code ag_rp_40(Code k, Code x) { #line - "xvmc.syn" return k << x << VirtualMachine::AND_EQ; #line - "xvmc.cpp" } static Code ag_rp_41(Code k, Code x) { #line - "xvmc.syn" return k << x << VirtualMachine::XOR_EQ; #line - "xvmc.cpp" } static Code ag_rp_42(Code k, Code x) { #line - "xvmc.syn" return k << x << VirtualMachine::LS_EQ; #line - "xvmc.cpp" } static Code ag_rp_43(Code k, Code x) { #line - "xvmc.syn" return k << x << VirtualMachine::RS_EQ; #line - "xvmc.cpp" } static Code ag_rp_44(int k) { #line - "xvmc.syn" return Code(VirtualMachine::PUSHV).setType(vm->symbolTable[k].type) << k; #line - "xvmc.cpp" } static Code ag_rp_45(Code k, Code x) { #line - "xvmc.syn" return k.setType(k.type->element) << x << VirtualMachine::SUBSCRIPT; #line - "xvmc.cpp" } static Code ag_rp_46(Code c, Code x, Code y) { #line - "xvmc.syn" //if (!c.type->isTruthDefined()) errorLog.add("True/False not defined"); x << VirtualMachine::BR << y.size(); c << VirtualMachine::BRF << x.size() << x << y; return c; #line - "xvmc.cpp" } static Code ag_rp_47(Code x) { #line - "xvmc.syn" return x.testOK(); #line - "xvmc.cpp" } static Code ag_rp_48(Code x, Code y) { #line - "xvmc.syn" //if (!x.type->isTruthDefined()) errorLog.add("True/False not defined"); return x << VirtualMachine::OR << y.size() << y; #line - "xvmc.cpp" } static Code ag_rp_49(Code x, Code y) { #line - "xvmc.syn" //if (!x.type->isTruthDefined()) errorLog.add("True/False not defined"); return x << VirtualMachine::AND << y.size() << y; #line - "xvmc.cpp" } static Code ag_rp_50(Code x) { #line - "xvmc.syn" return x.testOK(); #line - "xvmc.cpp" } static Code ag_rp_51(Code x, Code y) { #line - "xvmc.syn" return x.binop(VirtualMachine::BITOR,y); #line - "xvmc.cpp" } static Code ag_rp_52(Code x, Code y) { #line - "xvmc.syn" return x.binop(VirtualMachine::XOR,y); #line - "xvmc.cpp" } static Code ag_rp_53(Code x, Code y) { #line - "xvmc.syn" return x.binop(VirtualMachine::BITAND,y); #line - "xvmc.cpp" } static Code ag_rp_54(Code x, Code y) { #line - "xvmc.syn" return x.binop(VirtualMachine::EQ,y); #line - "xvmc.cpp" } static Code ag_rp_55(Code x, Code y) { #line - "xvmc.syn" return x.binop(VirtualMachine::NE,y); #line - "xvmc.cpp" } static Code ag_rp_56(Code x, Code y) { #line - "xvmc.syn" return x.binop(VirtualMachine::LT,y); #line - "xvmc.cpp" } static Code ag_rp_57(Code x, Code y) { #line - "xvmc.syn" return x.binop(VirtualMachine::LE,y); #line - "xvmc.cpp" } static Code ag_rp_58(Code x, Code y) { #line - "xvmc.syn" return x.binop(VirtualMachine::GT,y); #line - "xvmc.cpp" } static Code ag_rp_59(Code x, Code y) { #line - "xvmc.syn" return x.binop(VirtualMachine::GE,y); #line - "xvmc.cpp" } static Code ag_rp_60(Code x, Code y) { #line - "xvmc.syn" return x.binop(VirtualMachine::LS,y); #line - "xvmc.cpp" } static Code ag_rp_61(Code x, Code y) { #line - "xvmc.syn" return x.binop(VirtualMachine::RS,y); #line - "xvmc.cpp" } static Code ag_rp_62(Code x, Code y) { #line - "xvmc.syn" return x.binop(VirtualMachine::ADD,y); #line - "xvmc.cpp" } static Code ag_rp_63(Code x, Code y) { #line - "xvmc.syn" return x.binop(VirtualMachine::SUB,y); #line - "xvmc.cpp" } static Code ag_rp_64(Code x, Code y) { #line - "xvmc.syn" return x.binop(VirtualMachine::MULT,y); #line - "xvmc.cpp" } static Code ag_rp_65(Code x, Code y) { #line - "xvmc.syn" return x.binop(VirtualMachine::DIV,y); #line - "xvmc.cpp" } static Code ag_rp_66(Code x, Code y) { #line - "xvmc.syn" return x.binop(VirtualMachine::MOD,y); #line - "xvmc.cpp" } static Code ag_rp_67(int t, Code x) { #line - "xvmc.syn" return x.cast((VirtualMachine::Type::Id) t) << VirtualMachine::CAST << t; #line - "xvmc.cpp" } static Code ag_rp_68(Code x) { #line - "xvmc.syn" return x << VirtualMachine::INCR; #line - "xvmc.cpp" } static Code ag_rp_69(Code x) { #line - "xvmc.syn" return x << VirtualMachine::INCR; #line - "xvmc.cpp" } static Code ag_rp_70(Code x) { #line - "xvmc.syn" return x << VirtualMachine::NEG; #line - "xvmc.cpp" } static Code ag_rp_71(Code x) { #line - "xvmc.syn" return x; #line - "xvmc.cpp" } static Code ag_rp_72(Code x) { #line - "xvmc.syn" return vm->list(stdout), x << VirtualMachine::NOT; #line - "xvmc.cpp" } static Code ag_rp_73(Code x) { #line - "xvmc.syn" return x << VirtualMachine::COMPL; #line - "xvmc.cpp" } static Code ag_rp_74(Code x, Code y) { #line - "xvmc.syn" return x.binop(VirtualMachine::POW,y); #line - "xvmc.cpp" } static Code ag_rp_75(double x) { #line - "xvmc.syn" return vm->doubleList.push(x), Code(VirtualMachine::PUSHD).setType(&DoubleType::doubleType) << (int)(vm->doubleList.size() - 1); #line - "xvmc.cpp" } static Code ag_rp_76(int x) { #line - "xvmc.syn" return Code(VirtualMachine::PUSHI).setType(&IntegerType::intType) << x; #line - "xvmc.cpp" } static Code ag_rp_77(int k) { #line - "xvmc.syn" return Code(VirtualMachine::PUSHS).setType(&StringType::stringType) << k; #line - "xvmc.cpp" } static Code ag_rp_78(Code k) { #line - "xvmc.syn" return k; #line - "xvmc.cpp" } static Code ag_rp_79(Code k) { #line - "xvmc.syn" return k << VirtualMachine::PUSH << VirtualMachine::INCR << VirtualMachine::POP; #line - "xvmc.cpp" } static Code ag_rp_80(Code k) { #line - "xvmc.syn" return k << VirtualMachine::PUSH << VirtualMachine::DECR << VirtualMachine::POP; #line - "xvmc.cpp" } static Code ag_rp_81(int n, Code args) { #line - "xvmc.syn" return vm->invokeFunction(n, args); #line - "xvmc.cpp" } static Code ag_rp_82(Code k, int n, Code args) { #line - "xvmc.syn" return vm->invokeMethod(k, n, args); #line - "xvmc.cpp" } static Code ag_rp_83(Code x) { #line - "xvmc.syn" return x; #line - "xvmc.cpp" } static double ag_rp_84(double x, int e) { #line - "xvmc.syn" return x*pow(10,e); #line - "xvmc.cpp" } static double ag_rp_85(double x, int e) { #line - "xvmc.syn" return x*pow(10,-e); #line - "xvmc.cpp" } static double ag_rp_86(int i, double f) { #line - "xvmc.syn" return i+f; #line - "xvmc.cpp" } static double ag_rp_87(int i) { #line - "xvmc.syn" return i; #line - "xvmc.cpp" } static double ag_rp_88(double f) { #line - "xvmc.syn" return f; #line - "xvmc.cpp" } static int ag_rp_89(int d) { #line - "xvmc.syn" return d-'0'; #line - "xvmc.cpp" } static int ag_rp_90(int x, int d) { #line - "xvmc.syn" return 10*x + d-'0'; #line - "xvmc.cpp" } static double ag_rp_91(int d) { #line - "xvmc.syn" return (d-'0')/10.; #line - "xvmc.cpp" } static double ag_rp_92(int d, double f) { #line - "xvmc.syn" return (d-'0' + f)/10.; #line - "xvmc.cpp" } static int ag_rp_93(int d) { #line - "xvmc.syn" return d-'0'; #line - "xvmc.cpp" } static int ag_rp_94(int x, int d) { #line - "xvmc.syn" return 10*x + d-'0'; #line - "xvmc.cpp" } static int ag_rp_95(int k) { #line - "xvmc.syn" char *name = popString(k); VirtualMachine::Type::Id id = VirtualMachine::Type::idType(name); if (id != VirtualMachine::Type::UNDEFINED) return (int) id; CHANGE_REDUCTION(variable_name); return vm->locateVariable(name); #line - "xvmc.cpp" } static int ag_rp_96(int c) { #line - "xvmc.syn" return pushChar(c), 1; #line - "xvmc.cpp" } static int ag_rp_97(int k, int c) { #line - "xvmc.syn" return pushChar(c), k+1; #line - "xvmc.cpp" } static int ag_rp_98(int c) { #line - "xvmc.syn" return c; #line - "xvmc.cpp" } static int ag_rp_99(int k) { #line - "xvmc.syn" return vm->stringList.push(CharString(popString(k))), vm->stringList.size() - 1; #line - "xvmc.cpp" } static int ag_rp_100(void) { #line - "xvmc.syn" return 0; #line - "xvmc.cpp" } static int ag_rp_101(int k, int c) { #line - "xvmc.syn" return pushChar(c), k+1; #line - "xvmc.cpp" } static int ag_rp_102(void) { #line - "xvmc.syn" return '\a'; #line - "xvmc.cpp" } static int ag_rp_103(void) { #line - "xvmc.syn" return '\b'; #line - "xvmc.cpp" } static int ag_rp_104(void) { #line - "xvmc.syn" return '\f'; #line - "xvmc.cpp" } static int ag_rp_105(void) { #line - "xvmc.syn" return '\n'; #line - "xvmc.cpp" } static int ag_rp_106(void) { #line - "xvmc.syn" return '\r'; #line - "xvmc.cpp" } static int ag_rp_107(void) { #line - "xvmc.syn" return '\t'; #line - "xvmc.cpp" } static int ag_rp_108(void) { #line - "xvmc.syn" return '\v'; #line - "xvmc.cpp" } static int ag_rp_109(void) { #line - "xvmc.syn" return '\\'; #line - "xvmc.cpp" } static int ag_rp_110(void) { #line - "xvmc.syn" return '\?'; #line - "xvmc.cpp" } static int ag_rp_111(void) { #line - "xvmc.syn" return '\''; #line - "xvmc.cpp" } static int ag_rp_112(void) { #line - "xvmc.syn" return '"'; #line - "xvmc.cpp" } static int ag_rp_113(int d) { #line - "xvmc.syn" return d-'0'; #line - "xvmc.cpp" } static int ag_rp_114(int n, int d) { #line - "xvmc.syn" return 8*n + d-'0'; #line - "xvmc.cpp" } static int ag_rp_115(int n, int d) { #line - "xvmc.syn" return 8*n + d-'0'; #line - "xvmc.cpp" } static int ag_rp_116(int d) { #line - "xvmc.syn" return d; #line - "xvmc.cpp" } static int ag_rp_117(int n, int d) { #line - "xvmc.syn" return 16*n + d; #line - "xvmc.cpp" } static int ag_rp_118(int d) { #line - "xvmc.syn" return (d&7) + 9; #line - "xvmc.cpp" } #define READ_COUNTS #define WRITE_COUNTS #undef V #define V(i,t) (*t (&(PCB).vs[(PCB).ssx + i])) #undef VS #define VS(i) (PCB).vs[(PCB).ssx + i] #ifndef GET_CONTEXT #define GET_CONTEXT CONTEXT = (PCB).input_context #endif typedef enum { ag_action_1, ag_action_2, ag_action_3, ag_action_4, ag_action_5, ag_action_6, ag_action_7, ag_action_8, ag_action_9, ag_action_10, ag_action_11, ag_action_12 } ag_parser_action; #ifndef NULL_VALUE_INITIALIZER #define NULL_VALUE_INITIALIZER = { 0 } #endif static vmCompile_vs_type const ag_null_value NULL_VALUE_INITIALIZER; static const unsigned char ag_rpx[] = { 0, 1, 2, 0, 0, 0, 0, 3, 0, 0, 4, 5, 6, 7, 8, 9, 10, 11, 12, 0, 0, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 0, 24, 25, 26, 27, 28, 29, 30, 31, 32, 0, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 0, 46, 47, 0, 48, 0, 49, 50, 0, 51, 0, 52, 0, 53, 0, 54, 55, 0, 56, 57, 58, 59, 0, 60, 61, 0, 62, 63, 0, 64, 65, 66, 0, 67, 0, 68, 69, 70, 71, 72, 73, 0, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 85, 86, 87, 88, 0, 0, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 0, 0, 99,100,101, 0, 0,102,103,104,105,106,107,108,109,110,111,112, 0, 0, 0, 0, 0, 113,114,115,116,117, 0,118 }; static const unsigned char ag_key_itt[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 1, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; static const unsigned short ag_key_pt[] = { 0,164, 0,165, 0,166, 0,167, 0,168,0 }; static const unsigned char ag_key_ch[] = { 0, 42, 47,255, 43, 45, 47,100,102,105,119,255, 42,255, 38, 61,255, 42, 61,255, 43, 61,255, 45, 61,255, 42, 47, 61,255, 61,255, 60, 61,255, 61, 255, 61, 62,255, 61,124,255, 33, 37, 38, 42, 43, 45, 47, 60, 61, 62, 94, 100,101,102,105,119,124,255, 43, 45,100,102,105,119,255, 34, 39, 63, 92, 97, 98,102,110,114,116,118,120,255, 92,255, 42, 47,255, 60, 61,255, 61, 62,255, 33, 38, 42, 47, 60, 61, 62,124,255, 42, 47,255, 43, 45, 47,255, 42, 47,255, 60, 61,255, 61, 62,255, 33, 38, 42, 43, 45, 47, 60, 61, 62, 124,255, 60, 61,255, 61, 62,255, 33, 38, 42, 60, 61, 62,124,255, 43, 45, 255, 60, 61,255, 61, 62,255, 33, 38, 60, 61, 62,124,255, 33, 38, 60, 61, 62,124,255, 33, 38, 61,124,255, 38,124,255, 38,255, 42, 47,255, 47,255, 124,255, 38, 61,255, 42, 61,255, 43, 61,255, 45, 61,255, 42, 47, 61,255, 61,255, 60, 61,255, 61,255, 61, 62,255, 61,124,255, 33, 37, 38, 42, 43, 45, 47, 60, 61, 62, 94,124,255, 42, 47,255, 43, 45, 47,100,101,102,105, 119,255, 38, 61,255, 42, 61,255, 43, 61,255, 45, 61,255, 61,255, 60, 61, 255, 61,255, 61, 62,255, 61,124,255, 33, 37, 38, 42, 43, 45, 47, 60, 61, 62, 94,124,255, 60, 61,255, 61, 62,255, 33, 38, 42, 43, 45, 60, 61, 62, 124,255, 43, 45,100,101,102,105,119,255,119,255, 42, 47,255, 60, 61,255, 61, 62,255, 33, 38, 42, 43, 45, 47, 60, 61, 62,100,102,105,119,124,255 }; static const unsigned char ag_key_act[] = { 0,0,0,4,3,3,2,7,7,7,7,4,3,4,0,0,4,0,0,4,0,0,4,0,0,4,0,0,0,4,0,4,1,0,4, 0,4,0,1,4,0,0,4,3,3,2,2,2,2,2,2,3,2,3,7,7,7,7,7,2,4,3,3,7,7,7,7,4,0,0, 0,0,0,0,0,0,0,0,0,0,4,2,4,0,0,4,0,0,4,0,0,4,3,3,3,2,2,3,2,3,4,0,0,4,3, 3,2,4,0,0,4,0,0,4,0,0,4,3,3,3,3,3,2,2,3,2,3,4,0,0,4,0,0,4,3,3,3,2,3,2, 3,4,3,3,4,0,0,4,0,0,4,3,3,2,3,2,3,4,3,3,3,3,3,3,4,3,3,3,3,4,3,3,4,3,4, 0,0,4,2,4,3,4,0,0,4,0,0,4,0,0,4,0,0,4,0,0,0,4,0,4,1,0,4,0,4,0,1,4,0,0, 4,3,3,2,2,2,2,2,2,3,2,3,2,4,0,0,4,3,3,2,7,7,7,7,7,4,0,0,4,0,0,4,0,0,4, 0,0,4,0,4,1,0,4,0,4,0,1,4,0,0,4,3,3,2,2,2,2,3,2,3,2,3,2,4,0,0,4,0,0,4, 3,3,3,3,3,2,3,2,3,4,3,3,7,7,7,7,7,4,7,4,0,0,4,0,0,4,0,0,4,3,3,3,3,3,2, 2,3,2,7,7,7,7,3,4 }; static const unsigned char ag_key_parm[] = { 0, 98,103, 0,199,200, 0, 0, 2, 8, 4, 0,102, 0,182,175, 0,203, 171, 0,199,169, 0,200,170, 0, 98,103,172, 0,177, 0,192,189, 0,178, 0,191,193, 0,174,181, 0,187,173, 0, 0, 0, 0, 0, 0,186, 0,176, 0, 6, 2, 8, 4, 0, 0,199,200, 0, 2, 8, 4, 0,135,134,133,132, 125,126,127,128,129,130,131,143, 0, 0, 0, 98,103, 0,192,189, 0,191, 193, 0,187,182,203, 0, 0,186, 0,181, 0, 98,103, 0,199,200, 0, 0, 98,103, 0,192,189, 0,191,193, 0,187,182,203,199,200, 0, 0,186, 0, 181, 0,192,189, 0,191,193, 0,187,182,203, 0,186, 0,181, 0,199,200, 0,192,189, 0,191,193, 0,187,182, 0,186, 0,181, 0,187,182,189,186, 191,181, 0,187,182,186,181, 0,182,181, 0,182, 0, 98,103, 0, 0, 0, 181, 0,182,175, 0,203,171, 0,199,169, 0,200,170, 0, 98,103,172, 0, 177, 0,192,189, 0,178, 0,191,193, 0,174,181, 0,187,173, 0, 0, 0, 0, 0, 0,186, 0,176, 0, 0, 98,103, 0,199,200, 0, 0, 6, 2, 8, 4, 0,182,175, 0,203,171, 0,199,169, 0,200,170, 0,177, 0,192,189, 0,178, 0,191,193, 0,174,181, 0,187,173, 0, 0, 0, 0,172, 0,186, 0,176, 0, 0,192,189, 0,191,193, 0,187,182,203,199,200, 0,186, 0, 181, 0,199,200, 0, 6, 2, 8, 4, 0, 4, 0, 98,103, 0,192,189, 0, 191,193, 0,187,182,203,199,200, 0, 0,186, 0, 0, 2, 8, 4,181, 0 }; static const unsigned short ag_key_jmp[] = { 0, 0, 0, 0, 0, 2, 1, 4, 6, 9, 11, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 18, 20, 14, 17, 20, 23, 26, 32, 22, 37, 24, 26, 28, 32, 35, 37, 40, 0, 42, 44, 46, 48, 51, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, 60, 62, 83, 86, 64, 89, 66, 0, 0, 0, 0, 68, 70,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 74, 76, 78, 80,108,111, 82,114, 84, 0, 0, 0, 0, 0, 0, 0, 86, 88, 90,128, 92,131, 94, 0, 96, 98, 0, 0, 0, 0, 0, 0, 0,100,102,145,104,148,106, 0,108,110,112,114, 116,118, 0,120,122,124,126, 0,128,130, 0,132, 0, 0, 0, 0,175, 0, 134, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,198, 0, 0, 0, 0, 0,203, 0, 0, 0, 0,136,138,182,185,188, 191,194,200,140,205,142,208, 0, 0, 0, 0,144,146,224,148,150,154,157, 159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248, 0, 0, 0, 0, 0,253, 0, 0, 0, 0,164,166,236,239,242,245,168,250,170, 255,172,258, 0, 0, 0, 0, 0, 0, 0,174,176,178,180,182,274,184,277, 186, 0,188,190,192,194,198,201,203, 0,208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,213,215,217,219,221,300,303,223,306,225,227,230,232,237, 0 }; static const unsigned short ag_key_index[] = { 4, 0, 12, 43, 61, 0, 0, 12, 12, 81, 0, 81, 92, 92, 92, 92, 92,104, 104,104,104,117,117,134,104,142,142,142,142,142,142,142,151,151,151,158, 165,170,170,173,170,170,178,178,180,180,211, 0,178, 0, 4, 4,227,261, 261, 61, 0, 61, 61, 61, 0, 0, 0, 0, 61, 0, 0, 81, 81, 81, 0, 92, 92, 0,104,142,142,280, 0, 0,104,142,104,142,104,142,142,142,104,142, 104,142,104,142,104,142,104,142,104,142,104,142,104,142,104,142,104,142, 104,142,104,142,104,142,104,142,142,142,178, 0,104,142,104,142,104,142, 104,142,104,142,104,142,104,142,104,142,104,142,104,142,104,142,104,142, 142,290,142,298, 61,227, 0,211,178,178,178,178,104,178,178,104,309,178, 178,178, 0, 0, 0, 0, 0,142,151,151,151,151,151,151,151,151,158,158, 165,170,170,170,170, 0, 0, 0, 0, 0, 0, 0, 4, 61, 0, 0, 0, 0, 142,142,142, 0, 92, 92,142,142,142,142,142, 0, 0, 0, 0, 0,142, 0, 61 }; static const unsigned char ag_key_ends[] = { 43,0, 45,0, 111,0, 111,114,0, 102,0, 104,105,108,101,0, 47,0, 61,0, 61,0, 61,0, 61,0, 111,0, 108,115,101,0, 111,114,0, 102,0, 104,105,108,101,0, 43,0, 45,0, 111,0, 111,114,0, 102,0, 104,105,108,101,0, 61,0, 38,0, 42,0, 61,0, 124,0, 43,0, 45,0, 61,0, 38,0, 42,0, 43,0, 45,0, 61,0, 124,0, 61,0, 38,0, 42,0, 61,0, 124,0, 43,0, 45,0, 61,0, 38,0, 61,0, 124,0, 61,0, 38,0, 61,0, 61,0, 61,0, 124,0, 61,0, 38,0, 61,0, 124,0, 38,0, 124,0, 38,0, 124,0, 61,0, 61,0, 61,0, 61,0, 43,0, 45,0, 111,0, 108,115,101,0, 111,114,0, 102,0, 104,105,108,101,0, 61,0, 61,0, 61,0, 61,0, 61,0, 61,0, 38,0, 42,0, 43,0, 45,0, 61,0, 124,0, 43,0, 45,0, 111,0, 108,115,101,0, 111,114,0, 102,0, 104,105,108,101,0, 104,105,108,101,0, 61,0, 38,0, 42,0, 43,0, 45,0, 61,0, 111,0, 111,114,0, 102,0, 104,105,108,101,0, 124,0, }; #define AG_TCV(x) ag_tcv[(x)] static const unsigned char ag_tcv[] = { 7,208,208,208,208,208,208,208,208,151,107,151,151,151,208,208,208,208, 208,208,208,208,208,208,208,208,208,208,208,208,208,208,151,201,209,208, 208,198,185,210,160,159,196,194,161,195,206,197,211,211,211,211,211,211, 211,211,212,212,179,154,188,156,190,180,208,213,213,213,213,214,213,215, 215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215, 215,158,216,157,184,215,208,213,213,213,213,214,213,215,215,215,215,215, 215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,163,183,162, 202,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208, 208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208, 208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208, 208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208, 208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208, 208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208, 208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208, 208,208,208,208 }; #ifndef SYNTAX_ERROR #define SYNTAX_ERROR fprintf(stderr,"%s, line %d, column %d\n", \ (PCB).error_message, (PCB).line, (PCB).column) #endif #ifndef FIRST_LINE #define FIRST_LINE 1 #endif #ifndef FIRST_COLUMN #define FIRST_COLUMN 1 #endif #ifndef PARSER_STACK_OVERFLOW #define PARSER_STACK_OVERFLOW {fprintf(stderr, \ "\nParser stack overflow, line %d, column %d\n",\ (PCB).line, (PCB).column);} #endif #ifndef REDUCTION_TOKEN_ERROR #define REDUCTION_TOKEN_ERROR {fprintf(stderr, \ "\nReduction token error, line %d, column %d\n", \ (PCB).line, (PCB).column);} #endif #ifndef INPUT_CODE #define INPUT_CODE(T) (T) #endif typedef enum {ag_accept_key, ag_set_key, ag_jmp_key, ag_end_key, ag_no_match_key, ag_cf_accept_key, ag_cf_set_key, ag_cf_end_key} key_words; static void ag_get_key_word(int ag_k) { int ag_save = (int) ((PCB).la_ptr - (PCB).pointer); const unsigned char *ag_p; int ag_ch; while (1) { switch (ag_key_act[ag_k]) { case ag_cf_end_key: { const unsigned char *sp = ag_key_ends + ag_key_jmp[ag_k]; do { if ((ag_ch = *sp++) == 0) { int ag_k1 = ag_key_parm[ag_k]; int ag_k2 = ag_key_pt[ag_k1]; if (ag_key_itt[ag_k2 + CONVERT_CASE(*(PCB).la_ptr)]) goto ag_fail; (PCB).token_number = (vmCompile_token_type) ag_key_pt[ag_k1 + 1]; return; } } while (CONVERT_CASE(*(PCB).la_ptr++) == ag_ch); goto ag_fail; } case ag_end_key: { const unsigned char *sp = ag_key_ends + ag_key_jmp[ag_k]; do { if ((ag_ch = *sp++) == 0) { (PCB).token_number = (vmCompile_token_type) ag_key_parm[ag_k]; return; } } while (CONVERT_CASE(*(PCB).la_ptr++) == ag_ch); } case ag_no_match_key: ag_fail: (PCB).la_ptr = (PCB).pointer + ag_save; return; case ag_cf_set_key: { int ag_k1 = ag_key_parm[ag_k]; int ag_k2 = ag_key_pt[ag_k1]; ag_k = ag_key_jmp[ag_k]; if (ag_key_itt[ag_k2 + CONVERT_CASE(*(PCB).la_ptr)]) break; ag_save = (int) ((PCB).la_ptr - (PCB).pointer); (PCB).token_number = (vmCompile_token_type) ag_key_pt[ag_k1+1]; break; } case ag_set_key: ag_save = (int) ((PCB).la_ptr - (PCB).pointer); (PCB).token_number = (vmCompile_token_type) ag_key_parm[ag_k]; case ag_jmp_key: ag_k = ag_key_jmp[ag_k]; break; case ag_accept_key: (PCB).token_number = (vmCompile_token_type) ag_key_parm[ag_k]; return; case ag_cf_accept_key: { int ag_k1 = ag_key_parm[ag_k]; int ag_k2 = ag_key_pt[ag_k1]; if (ag_key_itt[ag_k2 + CONVERT_CASE(*(PCB).la_ptr)]) (PCB).la_ptr = (PCB).pointer + ag_save; else (PCB).token_number = (vmCompile_token_type) ag_key_pt[ag_k1+1]; return; } } ag_ch = CONVERT_CASE(*(PCB).la_ptr++); ag_p = &ag_key_ch[ag_k]; if (ag_ch <= 255) while (*ag_p < ag_ch) ag_p++; if (ag_ch > 255 || *ag_p != ag_ch) { (PCB).la_ptr = (PCB).pointer + ag_save; return; } ag_k = (int) (ag_p - ag_key_ch); } } #ifndef AG_NEWLINE #define AG_NEWLINE 10 #endif #ifndef AG_RETURN #define AG_RETURN 13 #endif #ifndef AG_FORMFEED #define AG_FORMFEED 12 #endif #ifndef AG_TABCHAR #define AG_TABCHAR 9 #endif static void ag_track(void) { int ag_k = (int) ((PCB).la_ptr - (PCB).pointer); while (ag_k--) { switch (*(PCB).pointer++) { case AG_NEWLINE: (PCB).column = 1, (PCB).line++; case AG_RETURN: case AG_FORMFEED: break; case AG_TABCHAR: (PCB).column += (TAB_SPACING) - ((PCB).column - 1) % (TAB_SPACING); break; default: (PCB).column++; } } } static void ag_prot(void) { int ag_k; ag_k = 128 - ++(PCB).btsx; if (ag_k <= (PCB).ssx) { (PCB).exit_flag = AG_STACK_ERROR_CODE; PARSER_STACK_OVERFLOW; return; } (PCB).bts[(PCB).btsx] = (PCB).sn; (PCB).bts[ag_k] = (PCB).ssx; (PCB).vs[ag_k] = (PCB).vs[(PCB).ssx]; (PCB).ss[ag_k] = (PCB).ss[(PCB).ssx]; } static void ag_undo(void) { if ((PCB).drt == -1) return; while ((PCB).btsx) { int ag_k = 128 - (PCB).btsx; (PCB).sn = (PCB).bts[(PCB).btsx--]; (PCB).ssx = (PCB).bts[ag_k]; (PCB).vs[(PCB).ssx] = (PCB).vs[ag_k]; (PCB).ss[(PCB).ssx] = (PCB).ss[ag_k]; } (PCB).token_number = (vmCompile_token_type) (PCB).drt; (PCB).ssx = (PCB).dssx; (PCB).sn = (PCB).dsn; (PCB).drt = -1; } static const int ag_rtt[] = { 17, 53, 0 }; static const unsigned char ag_tstt[] = { 215,214,213,212,211,210,209,206,202,201,200,199,195,194,168,166,165,164,163, 160,154,151,107,103,98,7,0,1,152,153, 216,215,214,213,212,211,210,209,208,206,202,201,198,197,196,195,194,190,188, 185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107,0,105, 106, 216,215,214,213,212,211,210,209,208,206,202,201,198,197,196,195,194,190,188, 185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107,102,0, 100,101, 151,107,103,98,0,1, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,168,166,165,164,163, 160,154,9,7,0,2,3,4,5,6,8,13,14,15,16,17,19,22,27,28,29,31,32,33,37,38, 40,41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91, 92,93,95,108,112,114,121,155,204,205,207,217, 216,215,214,213,212,211,210,209,208,206,202,201,198,197,196,195,194,190,188, 185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,0, 107,0, 216,215,214,213,212,211,210,209,208,206,202,201,198,197,196,195,194,190,188, 185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107,0, 102,0, 216,215,214,213,212,211,209,208,206,202,201,198,197,196,195,194,190,188,185, 184,183,180,179,163,162,161,160,159,158,157,156,154,151,143,135,134,133, 132,131,130,129,128,127,126,125,0,118,120,136,137,138,139,140, 212,211,0,113,114, 216,215,214,213,212,211,210,209,208,206,202,201,198,197,196,195,194,190,188, 185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,143,135,134, 133,132,131,130,129,128,127,126,125,0,120,123,136,137,138,139,140, 203,198,197,196,195,194,193,192,191,190,189,188,187,186,185,184,183,182,181, 180,179,161,159,157,154,151,107,103,98,0,1,152,153, 212,211,206,203,198,197,196,195,194,193,192,191,190,189,188,187,186,185,184, 183,182,181,180,179,161,159,157,154,151,107,103,98,0,1,114,152,153, 214,0, 203,198,197,196,195,194,193,192,191,190,189,188,187,186,185,184,183,182,181, 180,179,161,159,157,154,151,107,103,98,0,1,152,153, 203,198,197,196,195,194,193,192,191,190,189,188,187,186,185,184,183,182,181, 180,179,161,159,157,154,151,107,103,98,0,1,152,153, 216,215,214,213,212,211,210,209,208,206,202,201,200,199,198,197,196,195,194, 190,188,185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107, 103,98,7,0,1,152,153, 216,215,214,213,212,211,210,209,208,206,202,201,200,199,198,197,196,195,194, 190,188,185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107, 103,98,7,0,1,152,153, 216,215,214,213,212,211,210,209,208,206,202,201,200,199,198,197,196,195,194, 190,188,185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107, 103,98,7,0,1,152,153, 216,215,214,213,212,211,210,209,208,206,202,201,200,199,198,197,196,195,194, 190,188,185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107, 103,98,7,0,1,152,153, 215,214,213,212,211,210,209,206,203,202,201,200,199,198,197,196,195,194,193, 192,191,190,189,188,187,186,185,184,183,182,181,180,179,161,160,159,157, 154,151,107,103,98,0,1,152,153, 215,214,213,212,211,210,209,206,203,202,201,200,199,198,197,196,195,194,193, 192,191,190,189,188,187,186,185,184,183,182,181,180,179,161,160,159,157, 154,151,107,103,98,0,1,152,153, 203,0,94, 216,215,214,213,212,211,210,209,208,206,202,201,200,199,198,197,196,195,194, 190,188,185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107, 103,98,7,0,1,152,153, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42, 53,81,82,87,88,89,90,91,92,93,95,108,112,114,121,155,204,205,207,217, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42, 53,81,82,87,88,89,90,91,92,93,95,108,112,114,121,155,204,205,207,217, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42, 53,81,82,87,88,89,90,91,92,93,95,108,112,114,121,155,204,205,207,217, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42, 53,81,82,87,88,89,90,91,92,93,95,108,112,114,121,155,204,205,207,217, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42, 53,81,82,87,88,89,90,91,92,93,95,108,112,114,121,155,204,205,207,217, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42, 53,81,82,87,88,89,90,91,92,93,95,108,112,114,121,155,204,205,207,217, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,17,19, 22,41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91, 92,93,95,108,112,114,121,155,204,205,207,217, 198,197,196,0,84,85,86, 195,194,0,81,82, 193,192,0,78,79, 191,190,189,188,0,73,74,75,76, 187,186,0,70,71, 185,0,68, 184,0,66, 182,0,62, 183,0,64, 182,181,180,179,161,159,157,154,0, 160,151,107,103,98,0,1,152,153, 160,151,107,103,98,0,1,152,153, 181,180,0,56,59, 181,180,179,161,159,157,154,0, 215,214,213,212,211,206,203,200,199,198,197,196,195,194,193,192,191,190,189, 188,187,186,185,184,183,182,181,180,179,178,177,176,175,174,173,172,171, 170,169,161,160,159,158,157,156,154,151,107,103,98,0,1,152,153, 160,0,22, 160,151,107,103,98,0,1,152,153, 160,0,22, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,168,166,165,164,163, 160,154,151,107,103,98,0,1,152,153, 216,215,214,213,212,211,210,209,208,206,202,201,200,199,198,197,196,195,194, 190,188,185,184,183,180,179,168,166,165,164,163,162,161,160,159,158,157, 156,154,151,107,103,98,7,0,1,152,153, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,168,167,166,165,164, 163,162,160,159,154,151,107,103,98,7,0,1,152,153, 206,203,200,199,198,197,196,195,194,193,192,191,190,189,188,187,186,185,184, 183,182,181,180,179,178,177,176,175,174,173,172,171,170,169,161,159,158, 157,156,154,0,18,20,43,44,45,46,47,48,49,50,51,52,89,90,96, 215,214,213,206,203,200,199,198,197,196,195,194,193,192,191,190,189,188,187, 186,185,184,183,182,181,180,179,178,177,176,175,174,173,172,171,170,169, 161,160,159,158,157,156,154,0,22, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,168,166,165,164,163, 160,154,0,2,3,4,5,14,16,19,22,27,28,29,31,32,33,37,38,40,41,42,53,54,55, 58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92,93,95,108,112, 114,121,155,204,205,207,217, 160,0,22, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,168,166,165,164,163, 160,154,0,2,3,4,5,16,19,22,27,28,29,31,32,33,37,38,40,41,42,53,54,55,58, 60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92,93,95,108,112,114, 121,155,204,205,207,217, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,168,166,165,164,163, 160,154,0,2,3,4,5,14,16,19,22,27,28,29,31,32,33,37,38,40,41,42,53,54,55, 58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92,93,95,108,112, 114,121,155,204,205,207,217, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,168,166,165,164,163, 162,160,154,9,0,2,3,4,5,8,13,14,15,16,17,19,22,27,28,29,30,31,32,33,37, 38,40,41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90, 91,92,93,95,108,112,114,121,155,204,205,207,217, 154,0,16, 215,214,213,0,3,155, 216,215,214,213,212,211,210,209,208,206,202,201,198,197,196,195,194,190,188, 185,184,183,180,179,163,161,160,159,158,157,156,154,0,11,12,18,20,21,22, 24,26,29,56,57,64,66,68,73,75,81,82,84,85,86,91,92,96,109,117,122,141, 142,147,148,149,150, 154,0,16, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,168,166,165,164,163, 160,154,9,7,0,2,3,4,5,13,14,15,16,17,19,22,27,28,29,31,32,33,37,38,40, 41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92, 93,95,108,112,114,121,155,204,205,207,217, 211,0, 214,213,212,211,0,144, 211,0, 211,0, 214,213,212,211,0,144, 210,0, 214,212,211,203,198,197,196,195,194,193,192,191,190,189,188,187,186,185,184, 183,182,181,180,179,161,159,157,154,151,107,103,98,0,113,114, 214,212,211,203,198,197,196,195,194,193,192,191,190,189,188,187,186,185,184, 183,182,181,180,179,161,159,157,154,151,107,103,98,0,113,114, 212,211,195,194,0,110, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,151,107,103,98, 0,1,152,153, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42, 53,81,82,87,88,89,90,91,92,93,95,108,112,114,121,155,204,205,207,217, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,19,22, 41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92, 93,95,108,112,114,121,155,204,205,207,217, 206,203,200,199,198,197,196,195,194,193,192,191,190,189,188,187,186,185,184, 183,182,181,180,179,161,159,158,157,154,0,20,89,90,96, 159,0,24, 159,0,24, 216,215,214,213,212,211,210,209,208,206,202,201,200,199,198,197,196,195,194, 190,188,185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107, 103,98,7,0,1,152,153, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42, 53,81,82,83,87,88,89,90,91,92,93,95,108,112,114,121,155,204,205,207,217, 216,215,214,213,212,211,210,209,208,206,202,201,200,199,198,197,196,195,194, 190,188,185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107, 103,98,7,0,1,152,153, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42, 53,81,82,83,87,88,89,90,91,92,93,95,108,112,114,121,155,204,205,207,217, 216,215,214,213,212,211,210,209,208,206,202,201,200,199,198,197,196,195,194, 190,188,185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107, 103,98,7,0,1,152,153, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42, 53,81,82,83,87,88,89,90,91,92,93,95,108,112,114,121,155,204,205,207,217, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42, 53,80,81,82,83,87,88,89,90,91,92,93,95,108,112,114,121,155,204,205,207, 217, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42, 53,80,81,82,83,87,88,89,90,91,92,93,95,108,112,114,121,155,204,205,207, 217, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,151,107,103,98, 0,1,152,153, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42, 53,77,80,81,82,83,87,88,89,90,91,92,93,95,108,112,114,121,155,204,205, 207,217, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,151,107,103,98, 0,1,152,153, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42, 53,77,80,81,82,83,87,88,89,90,91,92,93,95,108,112,114,121,155,204,205, 207,217, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,151,107,103,98, 0,1,152,153, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42, 53,72,77,80,81,82,83,87,88,89,90,91,92,93,95,108,112,114,121,155,204, 205,207,217, 216,215,214,213,212,211,210,209,208,206,202,201,200,199,198,197,196,195,194, 190,188,185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107, 103,98,7,0,1,152,153, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42, 53,72,77,80,81,82,83,87,88,89,90,91,92,93,95,108,112,114,121,155,204, 205,207,217, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,151,107,103,98, 0,1,152,153, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42, 53,72,77,80,81,82,83,87,88,89,90,91,92,93,95,108,112,114,121,155,204, 205,207,217, 216,215,214,213,212,211,210,209,208,206,202,201,200,199,198,197,196,195,194, 190,188,185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107, 103,98,7,0,1,152,153, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42, 53,72,77,80,81,82,83,87,88,89,90,91,92,93,95,108,112,114,121,155,204, 205,207,217, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,151,107,103,98, 0,1,152,153, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42, 53,69,72,77,80,81,82,83,87,88,89,90,91,92,93,95,108,112,114,121,155,204, 205,207,217, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,151,107,103,98, 0,1,152,153, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42, 53,69,72,77,80,81,82,83,87,88,89,90,91,92,93,95,108,112,114,121,155,204, 205,207,217, 216,215,214,213,212,211,210,209,208,206,202,201,200,199,198,197,196,195,194, 190,188,185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107, 103,98,7,0,1,152,153, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42, 53,67,69,72,77,80,81,82,83,87,88,89,90,91,92,93,95,108,112,114,121,155, 204,205,207,217, 216,215,214,213,212,211,210,209,208,206,202,201,200,199,198,197,196,195,194, 190,188,185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107, 103,98,7,0,1,152,153, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42, 53,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92,93,95,108,112,114,121, 155,204,205,207,217, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,151,107,103,98, 0,1,152,153, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42, 53,60,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92,93,95,108,112,114, 121,155,204,205,207,217, 216,215,214,213,212,211,210,209,208,206,202,201,200,199,198,197,196,195,194, 190,188,185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107, 103,98,7,0,1,152,153, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42, 53,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92,93,95,108,112,114, 121,155,204,205,207,217, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,151,107,103,98, 0,1,152,153, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42, 53,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92,93,95,108, 112,114,121,155,204,205,207,217, 216,215,214,213,212,211,210,209,208,206,202,201,200,199,198,197,196,195,194, 190,188,185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107, 103,98,7,0,1,152,153, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,19,22, 41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92, 93,95,108,112,114,121,155,204,205,207,217, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,19,22, 35,41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91, 92,93,95,108,112,114,121,155,204,205,207,217, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,19,22, 35,41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91, 92,93,95,108,112,114,121,155,204,205,207,217, 216,215,214,213,212,211,210,209,208,206,202,201,198,197,196,195,194,190,188, 185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107,103,98, 7,0,1,152,153, 215,214,213,0,3,155, 216,215,214,213,212,211,210,209,208,206,202,201,200,199,198,197,196,195,194, 190,188,185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107, 103,98,7,0,1,152,153, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,19,22, 41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92, 93,95,108,112,114,121,155,204,205,207,217, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,151,107,103,98, 0,1,152,153, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,19,22, 41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92, 93,95,108,112,114,121,155,204,205,207,217, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,151,107,103,98, 0,1,152,153, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,19,22, 41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92, 93,95,108,112,114,121,155,204,205,207,217, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,151,107,103,98, 0,1,152,153, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,19,22, 41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92, 93,95,108,112,114,121,155,204,205,207,217, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,151,107,103,98, 0,1,152,153, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,19,22, 41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92, 93,95,108,112,114,121,155,204,205,207,217, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,151,107,103,98, 0,1,152,153, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,19,22, 41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92, 93,95,108,112,114,121,155,204,205,207,217, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,151,107,103,98, 0,1,152,153, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,19,22, 41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92, 93,95,108,112,114,121,155,204,205,207,217, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,151,107,103,98, 0,1,152,153, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,19,22, 41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92, 93,95,108,112,114,121,155,204,205,207,217, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,151,107,103,98, 0,1,152,153, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,19,22, 41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92, 93,95,108,112,114,121,155,204,205,207,217, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,151,107,103,98, 0,1,152,153, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,19,22, 41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92, 93,95,108,112,114,121,155,204,205,207,217, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,151,107,103,98, 0,1,152,153, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,19,22, 41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92, 93,95,108,112,114,121,155,204,205,207,217, 216,215,214,213,212,211,210,209,208,206,202,201,200,199,198,197,196,195,194, 190,188,185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107, 103,98,7,0,1,152,153, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,19,22, 41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92, 93,95,108,112,114,121,155,204,205,207,217, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,159,0,2,3,4,5, 19,22,23,25,41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88, 89,90,91,92,93,95,108,112,114,121,155,204,205,207,217, 167,0,39, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,154,0,2,3,4,5, 19,22,34,36,41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88, 89,90,91,92,93,95,108,112,114,121,155,204,205,207,217, 166,0,32,37, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,168,166,165,164,163, 162,160,154,9,0,2,3,4,5,13,14,15,16,17,19,22,27,28,29,30,31,32,33,37,38, 40,41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91, 92,93,95,108,112,114,121,155,204,205,207,217, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,168,167,166,165,164, 163,162,160,154,151,107,103,98,7,0,1,152,153, 160,158,156,154,0,18,20,22, 216,215,214,213,212,211,210,209,208,206,203,202,201,200,199,198,197,196,195, 194,193,192,191,190,189,188,187,186,185,184,183,182,181,180,179,178,177, 176,175,174,173,172,171,170,169,163,162,161,160,159,158,157,156,154,151, 107,103,98,7,0,1,152,153, 216,215,214,213,212,211,210,209,208,206,202,201,198,197,196,195,194,190,188, 185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107,103,98, 7,0,1,152,153, 216,215,214,213,212,211,210,209,208,206,202,201,198,197,196,195,194,190,188, 185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107,103,98, 7,0,1,152,153, 216,215,214,213,212,211,210,209,208,206,202,201,198,197,196,195,194,190,188, 185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107,103,98, 7,0,1,152,153, 216,215,214,213,212,211,210,209,208,206,202,201,198,197,196,195,194,190,188, 185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107,103,98, 7,0,1,152,153, 216,215,214,213,212,211,210,209,208,206,202,201,200,199,198,197,196,195,194, 190,188,185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107, 103,98,7,0,1,152,153, 216,215,214,213,212,211,210,209,208,206,202,201,198,197,196,195,194,190,188, 185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107,103,98, 7,0,1,152,153, 216,215,214,213,212,211,210,209,208,206,202,201,198,197,196,195,194,190,188, 185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107,103,98, 7,0,1,152,153, 216,215,214,213,212,211,210,209,208,206,202,201,200,199,198,197,196,195,194, 190,188,185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107, 103,98,7,0,1,152,153, 216,215,214,213,212,211,210,209,208,206,203,202,201,200,199,198,197,196,195, 194,193,192,191,190,189,188,187,186,185,184,183,182,181,180,179,168,166, 165,164,163,162,161,160,159,158,157,156,154,151,107,103,98,7,0,1,152, 153, 216,215,214,213,212,211,210,209,208,206,202,201,198,197,196,195,194,190,188, 185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107,103,98, 7,0,1,152,153, 216,215,214,213,212,211,210,209,208,206,202,201,198,197,196,195,194,190,188, 185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107,103,98, 7,0,1,152,153, 216,215,214,213,212,211,210,209,208,206,202,201,198,197,196,195,194,190,188, 185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107,103,98, 7,0,1,152,153, 216,215,214,213,212,211,210,209,208,206,202,201,198,197,196,195,194,190,188, 185,184,183,180,179,163,161,160,159,158,157,156,0,18,20,21,22,24,26,29, 56,57,64,66,68,73,75,81,82,84,85,86,91,92,96,109,117,122,141,142,147, 148,149,150, 154,0,16, 216,215,214,213,212,211,210,209,208,206,202,201,198,197,196,195,194,190,188, 185,184,183,180,179,163,161,160,159,158,157,156,154,7,0,11,12,18,20,21, 22,24,26,29,56,57,64,66,68,73,75,81,82,84,85,86,91,92,96,109,117,122, 141,142,147,148,149,150, 212,211,0,111,114, 212,211,0,111,114, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42, 53,81,82,83,87,88,89,90,91,92,93,95,108,112,114,121,155,204,205,207,217, 198,197,196,195,194,193,192,191,190,189,188,187,186,185,184,183,182,181,180, 179,161,159,157,154,0,84,85,86, 198,197,196,195,194,193,192,191,190,189,188,187,186,185,184,183,182,181,180, 179,161,159,157,154,0,84,85,86, 195,194,193,192,191,190,189,188,187,186,185,184,183,182,181,180,179,161,159, 157,154,0,81,82, 195,194,193,192,191,190,189,188,187,186,185,184,183,182,181,180,179,161,159, 157,154,0,81,82, 193,192,191,190,189,188,187,186,185,184,183,182,181,180,179,161,159,157,154, 0,78,79, 193,192,191,190,189,188,187,186,185,184,183,182,181,180,179,161,159,157,154, 0,78,79, 193,192,191,190,189,188,187,186,185,184,183,182,181,180,179,161,159,157,154, 0,78,79, 193,192,191,190,189,188,187,186,185,184,183,182,181,180,179,161,159,157,154, 0,78,79, 191,190,189,188,187,186,185,184,183,182,181,180,179,161,159,157,154,0,73,74, 75,76, 191,190,189,188,187,186,185,184,183,182,181,180,179,161,159,157,154,0,73,74, 75,76, 187,186,185,184,183,182,181,180,179,161,159,157,154,0,70,71, 185,184,183,182,181,180,179,161,159,157,154,0,68, 183,182,181,180,179,161,159,157,154,0,64, 184,183,182,181,180,179,161,159,157,154,0,66, 182,181,180,179,161,159,157,154,0, 179,0,57, 159,0,24, 159,0,24, 160,0,22, 157,0,21, 161,159,0,26, 159,0,24, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,168,166,165,164,163, 160,154,151,107,103,98,0,1,152,153, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,168,166,165,164,163, 160,154,9,0,2,3,4,5,13,14,15,16,17,19,22,27,28,29,31,32,33,37,38,40,41, 42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92,93, 95,108,112,114,121,155,204,205,207,217, 161,0,26, 154,0,16, 154,0,16, 216,215,214,213,212,211,210,209,208,206,202,201,198,197,196,195,194,190,188, 185,184,183,180,179,163,162,161,160,159,158,157,156,154,0,11,12,18,20, 21,22,24,26,29,56,57,64,66,68,73,75,81,82,84,85,86,91,92,96,109,117,122, 141,142,147,148,149,150, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,159,0,2,3,4,5, 19,22,23,25,41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88, 89,90,91,92,93,95,108,112,114,121,155,204,205,207,217, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,19,22, 41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92, 93,95,108,112,114,121,155,204,205,207,217, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,19,22, 41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92, 93,95,108,112,114,121,155,204,205,207,217, 154,7,0,16, 212,211,203,198,197,196,195,194,193,192,191,190,189,188,187,186,185,184,183, 182,181,180,179,161,159,157,154,151,107,103,98,0,114, 212,211,203,198,197,196,195,194,193,192,191,190,189,188,187,186,185,184,183, 182,181,180,179,161,159,157,154,151,107,103,98,0,114, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,41, 42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92,93, 95,108,112,114,121,155,204,205,207,217, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,159,0,2,3,4,5, 19,22,23,25,41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88, 89,90,91,92,93,95,108,112,114,121,155,204,205,207,217, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,19,22, 41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92, 93,95,108,112,114,121,155,204,205,207,217, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,19,22, 41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92, 93,95,108,112,114,121,155,204,205,207,217, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,19,22, 35,41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91, 92,93,95,108,112,114,121,155,204,205,207,217, 162,154,0,16,30, 159,0,24, 157,0,21, 159,0,24, 154,0,16, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,159,0,2,3,4,5, 19,22,34,36,41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88, 89,90,91,92,93,95,108,112,114,121,155,204,205,207,217, 159,0,24, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,168,166,165,164,163, 160,154,0,2,3,4,5,16,19,22,27,28,29,31,32,33,37,38,40,41,42,53,54,55,58, 60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92,93,95,108,112,114, 121,155,204,205,207,217, }; static unsigned const char ag_astt[7073] = { 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,1,1,1,1,8,7,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,1,1,1,1,8,7,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,1,1,1,1,8,7,1,1,9,9,1,1, 5,3,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,7,2,1,2,2,0,1,2,2,1,2,1, 1,1,2,2,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2, 1,2,2,1,1,1,1,1,1,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, 9,9,9,9,9,9,5,3,7,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, 9,9,9,9,9,9,9,5,3,7,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,1,2,2,2,2,2,2,2,2,2,2,2,7,1,1,1,1,1,1,1,1,1,7,2,1,1,10,10,10, 10,10,10,2,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, 10,10,10,10,10,1,2,2,2,2,2,2,2,2,2,2,2,7,2,2,2,1,1,1,2,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,7,1,1,3,10,10,1,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,7,1,2,1,3,1,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,7,1,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,1,1,1,1,7,1,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,5,7,1,1,3,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,5,7,1,1,3,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,5,7,1, 1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 1,1,1,1,5,7,1,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,1,1,1,1,7,1,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,7,1,1,3,1,5,1,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,5,7,1,1,3, 2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,1,1,2,1,1,2,2,1,1,1,1,1,2,1,2,2,1, 1,1,1,1,1,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,1,1,2,1,1,2,2,1,1,1,1,1, 2,1,2,2,1,1,1,1,1,1,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,1,1,2,1,1,2,2, 1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,1,1, 2,1,1,2,2,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2, 1,2,2,1,1,2,1,1,2,2,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,2,2,2,2,2,1,2,1,1,1,1,1, 1,1,1,7,2,1,2,2,1,1,2,1,1,2,2,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,2,2,2,2,2,1,2, 1,1,1,1,1,1,1,1,7,2,1,2,2,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,2,1,2,2,1,1,1,1,1,1,1,1,1,5,1,1,1,1,1,5,1,1,1,1,5,1,1,1,1,1,1,5,1, 1,1,1,1,1,5,1,1,1,5,1,1,5,1,1,7,1,1,5,1,4,5,5,5,5,5,5,5,7,5,1,1,1,1,7,1,1, 3,5,1,1,1,1,7,1,1,3,1,1,7,1,1,4,4,5,5,5,5,5,7,10,10,10,10,10,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1, 1,7,1,1,3,1,7,1,5,1,1,1,1,7,1,1,3,1,7,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,1,1,1,1,7,1,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,5,7,1,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,1,1,1,1,5,7,1,1,3,1,4,1,1,4,4,4,4,4,4,4,4,4,4,4,4,4,4, 4,4,4,4,4,4,1,1,1,1,1,1,1,1,1,1,4,4,1,4,1,4,7,1,1,1,1,1,1,1,1,1,1,1,1,2,2, 1,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, 4,4,1,4,4,4,4,4,7,1,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,2,1,2,2,2, 2,1,1,1,2,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 2,1,2,2,1,1,1,1,1,1,1,7,1,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,2,1, 2,2,2,1,1,2,2,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,2,1,2,2,1,1,1,1,1,1,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,2,1,2, 2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,2,1,2,2,1,1,1,1,1,1,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,2, 1,2,2,1,2,2,1,2,1,1,1,2,2,1,2,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,1,7,2,2,2,2,7,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,8,7,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,1,7,3,2,2,2,2,2,1,2,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,2,7,2,1,2,2,2,2,1,2,1,1,1,2,2,1,1,1,1,1,1,1,1,1,2,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,2,7,2,2,2,2,7,2,2, 5,2,5,2,2,10,10,5,2,2,7,4,1,1,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, 4,4,4,4,4,4,4,7,2,1,4,1,1,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, 4,4,4,4,4,7,2,1,8,8,1,1,7,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,7,1,1,3, 2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,1,1,2,1,1,2,2,1,1,1,1,1,2,1,2,2,1, 1,1,1,1,1,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,1,1,1,1,2,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,1,4,1,1,4,4,4,4,4,4,4,4, 4,4,4,4,4,4,4,4,4,4,4,4,4,4,1,4,4,7,1,2,2,1,1,7,2,1,7,1,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,5,7,1,1,3,2,2, 2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,1,1,2,1,1,2,2,2,1,1,1,1,1,2,1,2,2,1,1, 1,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,1,1,1,1,5,7,1,1,3,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,1,1,2,1,1,2, 2,2,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,5,7,1,1,3,2,2,2,2,2,1,2,1,1,1,1,1,1, 1,1,7,2,1,2,2,1,1,2,1,1,2,2,2,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,2,2,2,2,2,1,2, 1,1,1,1,1,1,1,1,7,2,1,2,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1, 2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,2,1,2, 2,1,1,1,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,7,1,1,3,2,2,2,2,2,1,2, 1,1,1,1,1,1,1,1,7,2,1,2,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,1,1,1, 1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,7,1,1,3,2,2,2,2,2,1,2,1,1,1,1,1,1, 1,1,7,2,1,2,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,1,1,1,1,7,1,1,3,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2, 2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,5,7,1,1,3,2,2,2, 2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2, 1,1,1,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,7,1,1,3,2,2,2,2,2,1,2,1, 1,1,1,1,1,1,1,7,2,1,2,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,1,1,1, 1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1, 1,1,1,5,7,1,1,3,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,1,1,2,1,1,1,1,1,1, 1,1,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,7, 1,1,3,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,2,1,2,2,1,1,1,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,7,1,1,3,2, 2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2, 1,2,2,1,1,1,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,1,1,1,1,5,7,1,1,3,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,1, 1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,5,7,1,1,3,2,2,2, 2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2, 1,2,2,1,1,1,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,7,1,1,3,2,2,2,2,2, 1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2, 1,2,2,1,1,1,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,1,1,1,1,5,7,1,1,3,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,1, 1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,1,1,1,1,7,1,1,3,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,1,1, 2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,5,7,1,1, 3,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7, 2,1,2,2,2,1,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1, 1,1,1,1,1,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,2,1,1,2,1,2,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,5,7,1,1,3,2,2,2,7,1,1, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1, 1,1,5,7,1,1,3,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,1,1,1,1,2,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,1,1,1,1,7,1,1,3,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,2,1,2,1, 2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,7,1,1,3,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1, 2,2,2,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,1,1, 1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,7,1,1,3,2,2,2,2,2,1,2,1,1,1,1,1, 1,1,1,7,2,1,2,2,2,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1, 2,2,1,1,1,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,7,1,1,3,2,2,2,2,2,1, 2,1,1,1,1,1,1,1,1,7,2,1,2,2,2,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,2,1,2,2,1,1,1,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,7,1,1,3, 2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,2,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1, 1,1,7,1,1,3,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,2,1,2,1,2,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,1,1,1,1,7,1,1,3,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,2,1,2,1,2, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,1,1,1,1,7,1,1,3,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2, 2,2,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,1,1,1, 1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,7,1,1,3,2,2,2,2,2,1,2,1,1,1,1,1,1, 1,1,7,2,1,2,2,2,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2, 2,1,1,1,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,7,1,1,3,2,2,2,2,2,1,2, 1,1,1,1,1,1,1,1,7,2,1,2,2,2,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,2,1,2,2,1,1,1,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,5,7,1,1,3,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2, 1,2,2,2,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,1, 1,1,1,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,4,7,2,1,2,2,2,1,1,1,2,1,2,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,1,5,1,2,2,2,2,2,1,2,1, 1,1,1,1,1,1,1,4,7,2,1,2,2,2,1,1,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,1,7,1,1,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,7,2,1,2,2,2,2,1,2,1,1,1,2,2,1,2,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,5,7,1,1,3,1,1,1,4,7,1,1,1,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,1,1,1,1,5,7,1,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,5,7,1,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,5,7,1,1,3,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,5,7,1,1,3,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,5,7,1,1,3, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1, 1,1,5,7,1,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,1,1,1,1,5,7,1,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,1,1,1,1,5,7,1,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,5,7,1,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1, 1,1,5,7,1,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,1,1,1,1,5,7,1,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,1,1,1,1,5,7,1,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,5,7,1,1,3,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,5,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, 3,3,3,3,3,3,3,3,3,3,3,1,7,2,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,8,8,7,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,2,2,7,1,2,2,2,7,1,2,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2, 1,1,2,1,1,2,2,2,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,1,1,1,4,4,4,4,4,4,4,4,4,4,4, 4,4,4,4,4,4,4,4,4,4,7,1,1,1,1,1,1,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, 4,7,1,1,1,1,1,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,7,1,1,1,1,4,4,4,4,4,4, 4,4,4,4,4,4,4,4,4,4,4,4,4,7,1,1,1,1,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,7,1, 1,1,1,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,7,1,1,1,1,4,4,4,4,4,4,4,4,4,4,4,4, 4,4,4,4,4,7,1,1,1,1,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,7,1,1,1,1,1,1,4,4,4, 4,4,4,4,4,4,4,4,4,4,7,1,1,1,1,1,1,1,1,4,4,4,4,4,4,4,4,4,4,4,4,4,7,1,1,1,1, 1,1,4,4,4,4,4,4,4,4,4,4,4,7,1,1,1,4,4,4,4,4,4,4,4,4,4,7,1,1,4,4,4,4,4,4,4, 4,7,1,1,4,4,4,4,4,4,4,4,4,7,1,4,4,4,4,4,4,4,4,7,1,7,1,1,7,2,1,7,2,1,7,1,1, 7,2,1,4,7,1,1,7,2,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,7,1,1, 3,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,2,1,2,2,2,2,1,2,1,1,1,2,2, 1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1, 1,1,1,1,1,1,5,1,1,7,1,1,7,2,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,8,1,1,1,1,1,1,8,7,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,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,4,7,2,1,2,2,2,1,1,1,2,1,2,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,2,2,2,2,2,1,2, 1,1,1,1,1,1,1,1,7,2,1,2,2,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,2,1,2,2,1,1,1,1,1,1,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,2,1,2,1, 2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,1,2,7,2, 10,10,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,7,2,10,10, 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,7,2,2,2,2,2,2,1, 2,1,1,1,1,1,1,1,1,7,2,1,2,2,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,2,1,2,2,1,1,1,1,1,1,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,4,7,2,1,2,2,2,1,1, 1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,2, 2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,2,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1, 2,2,2,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,1,1, 1,1,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,2,1,1,2,1,2,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,1,1,7,2,2,1,7,2,1,7,2,1,7,2, 1,7,1,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,4,7,2,1,2,2,2,1,1,1,2,1,2,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,1,7,1,2,2,2,2,2,1,2,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,7,2,1,2,2,2,1,1,2,2,1,1,1,1,1,1,1,1,1,2,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1 }; static const unsigned short ag_pstt[] = { 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,1,2,4,0,3,3,4, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,1,5,6, 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,8,2,7, 8, 349,349,1,2,351,349, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,42,43,48,50,51,24,52,62,1,4, 99,54,101,100,0,64,21,21,63,24,61,60,31,21,21,59,58,57,56,49,55,47,60, 53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25,23, 100,14,100,129,11,46,16,15,12,13, 115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115, 115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,117, 118,6, 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,112, 113,8, 65,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70, 70,70,70,70,70,70,70,70,66,156,155,154,153,152,151,150,149,148,147,146, 9,70,70,70,69,68,67,70, 71,71,10,126,71, 65,143,143,143,143,143,143,141,143,143,143,143,143,143,143,143,143,143,143, 143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,66,156,155, 154,153,152,151,150,149,148,147,146,11,143,143,143,69,68,67,143, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, 350,350,350,350,350,350,3,3,1,2,12,3,3,405, 130,130,72,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, 350,350,350,350,350,350,350,350,350,3,3,1,2,13,3,130,3,415, 73,119, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, 350,350,350,350,350,350,3,3,1,2,15,3,3,403, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, 350,350,350,350,350,350,3,3,1,2,16,3,3,402, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2, 350,17,3,3,400, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2, 350,18,3,3,399, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2, 350,19,3,3,392, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2, 350,20,3,3,393, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, 350,3,3,1,2,21,3,3,398, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, 350,3,3,1,2,22,3,3,397, 74,97,75, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2, 350,24,3,3,358, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,25,99,54,101,100,76,77,54, 27,28,96,96,30,29,26,25,23,100,14,100,129,11,46,16,15,12,13, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,26,99,54,101,100,76,77,54, 27,28,95,95,30,29,26,25,23,100,14,100,129,11,46,16,15,12,13, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,27,99,54,101,100,76,77,54, 27,28,94,94,30,29,26,25,23,100,14,100,129,11,46,16,15,12,13, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,28,99,54,101,100,76,77,54, 27,28,93,93,30,29,26,25,23,100,14,100,129,11,46,16,15,12,13, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,29,99,54,101,100,76,77,54, 27,28,92,92,30,29,26,25,23,100,14,100,129,11,46,16,15,12,13, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,30,99,54,101,100,76,77,54, 27,28,91,91,30,29,26,25,23,100,14,100,129,11,46,16,15,12,13, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,31,99,54,101,100,79,78,31, 78,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25, 23,100,14,100,129,11,46,16,15,12,13, 80,82,84,81,85,83,81, 20,19,78,87,86, 88,90,73,91,89, 92,94,96,98,70,99,97,95,93, 100,102,68,103,101, 104,66,105, 106,64,107, 108,39,109, 110,61,111, 63,59,59,59,59,59,59,59,41, 350,3,3,1,2,42,3,3,366, 350,3,3,1,2,43,3,3,364, 112,114,44,115,113, 58,58,56,56,56,56,56,45, 137,137,137,137,137,350,350,350,350,350,350,350,350,350,350,350,350,350,350, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, 350,350,350,350,350,350,350,350,350,3,3,1,2,46,3,3,353, 24,47,116, 350,3,3,1,2,48,3,3,363, 24,49,117, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, 350,350,3,3,1,2,50,3,3,362, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, 350,350,3,3,1,2,350,51,3,3,361, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, 350,350,350,350,350,3,3,1,2,350,52,3,3,352, 118,102,21,22,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102, 102,102,102,102,102,122,124,126,128,130,132,134,136,138,140,102,102,120, 102,142,102,53,143,121,141,139,137,135,133,131,129,127,125,123,103,104, 119, 135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135, 135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135, 135,24,135,135,135,135,135,54,144, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,42,43,48,50,51,24,52,55,99, 54,101,100,38,24,60,31,145,38,59,58,57,56,49,55,47,60,53,54,45,44,41,40, 39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25,23,100,14,100,129,11, 46,16,15,12,13, 24,56,146, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,42,43,48,50,51,24,52,57,99, 54,101,100,24,60,31,29,36,59,58,57,56,49,55,47,60,53,54,45,44,41,40,39, 38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25,23,100,14,100,129,11,46, 16,15,12,13, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,42,43,48,50,51,24,52,58,99, 54,101,100,147,24,60,31,147,147,59,58,57,56,49,55,47,60,53,54,45,44,41, 40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25,23,100,14,100,129, 11,46,16,15,12,13, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,42,43,48,50,51,149,24,52,62, 59,99,54,101,100,148,21,21,63,24,61,60,31,21,21,59,25,58,57,56,49,55,47, 60,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25, 23,100,14,100,129,11,46,16,15,12,13, 52,60,23, 136,136,136,61,150,46, 152,153,154,155,157,158,161,162,163,118,17,18,80,82,84,20,19,94,98,104,106, 110,114,156,51,159,24,160,120,151,142,165,62,164,165,164,164,164,164, 164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164, 164,164,164,164,164,164,164,164,164, 52,63,9, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,42,43,48,50,51,24,52,166,2, 64,99,54,101,100,22,22,63,24,61,60,31,22,22,59,58,57,56,49,55,47,60,53, 54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25,23, 100,14,100,129,11,46,16,15,12,13, 162,65, 168,168,165,165,66,165, 164,160, 163,159, 168,168,166,166,158,166, 138,70, 131,71,71,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131, 131,131,131,131,131,131,131,131,131,131,131,131,131,71,132,71, 125,71,71,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, 125,125,125,125,125,125,125,125,125,125,125,125,125,72,124,71, 168,168,167,168,73,168, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,74,3,3, 401, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,75,99,54,101,100,76,77,54, 27,28,98,98,30,29,26,25,23,100,14,100,129,11,46,16,15,12,13, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,76,99,54,101,100,78,31,78, 53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25,23, 100,14,100,129,11,46,16,15,12,13, 118,102,21,22,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102, 102,102,102,102,102,102,102,120,102,102,77,121,103,104,119, 160,78,107, 160,79,169, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2, 350,80,3,3,396, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,81,99,54,101,100,31,77,54, 27,28,87,87,87,30,29,26,25,23,100,14,100,129,11,46,16,15,12,13, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2, 350,82,3,3,395, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,83,99,54,101,100,31,77,54, 27,28,86,86,86,30,29,26,25,23,100,14,100,129,11,46,16,15,12,13, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2, 350,84,3,3,394, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,85,99,54,101,100,31,77,54, 27,28,85,85,85,30,29,26,25,23,100,14,100,129,11,46,16,15,12,13, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,86,99,54,101,100,31,77,54, 170,27,28,170,170,170,30,29,26,25,23,100,14,100,129,11,46,16,15,12,13, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,87,99,54,101,100,31,77,54, 171,27,28,171,171,171,30,29,26,25,23,100,14,100,129,11,46,16,15,12,13, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,88,3,3, 391, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,89,99,54,101,100,31,77,54, 172,32,27,28,32,32,32,30,29,26,25,23,100,14,100,129,11,46,16,15,12,13, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,90,3,3, 390, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,91,99,54,101,100,31,77,54, 173,32,27,28,32,32,32,30,29,26,25,23,100,14,100,129,11,46,16,15,12,13, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,92,3,3, 389, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,93,99,54,101,100,31,77,54, 174,33,32,27,28,32,32,32,30,29,26,25,23,100,14,100,129,11,46,16,15,12, 13, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2, 350,94,3,3,388, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,95,99,54,101,100,31,77,54, 175,33,32,27,28,32,32,32,30,29,26,25,23,100,14,100,129,11,46,16,15,12, 13, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,96,3,3, 387, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,97,99,54,101,100,31,77,54, 176,33,32,27,28,32,32,32,30,29,26,25,23,100,14,100,129,11,46,16,15,12, 13, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2, 350,98,3,3,386, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,99,99,54,101,100,31,77,54, 177,33,32,27,28,32,32,32,30,29,26,25,23,100,14,100,129,11,46,16,15,12, 13, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,100,3,3, 385, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,101,99,54,101,100,31,77, 54,178,34,33,32,27,28,32,32,32,30,29,26,25,23,100,14,100,129,11,46,16, 15,12,13, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,102,3,3, 384, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,103,99,54,101,100,31,77, 54,179,34,33,32,27,28,32,32,32,30,29,26,25,23,100,14,100,129,11,46,16, 15,12,13, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2, 350,104,3,3,383, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,105,99,54,101,100,31,77, 54,180,35,34,33,32,27,28,32,32,32,30,29,26,25,23,100,14,100,129,11,46, 16,15,12,13, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2, 350,106,3,3,382, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,107,99,54,101,100,31,77, 54,181,36,35,34,33,32,27,28,32,32,32,30,29,26,25,23,100,14,100,129,11, 46,16,15,12,13, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,108,3,3, 380, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,109,99,54,101,100,31,77, 54,182,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25,23,100,14,100, 129,11,46,16,15,12,13, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2, 350,110,3,3,381, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,111,99,54,101,100,31,77, 54,183,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25,23,100,14,100,129, 11,46,16,15,12,13, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,112,3,3, 379, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,113,99,54,101,100,31,77, 54,184,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25,23,100,14, 100,129,11,46,16,15,12,13, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2, 350,114,3,3,378, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,115,99,54,101,100,185,31, 185,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26, 25,23,100,14,100,129,11,46,16,15,12,13, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,116,99,54,101,100,41,31, 186,41,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29, 26,25,23,100,14,100,129,11,46,16,15,12,13, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,117,99,54,101,100,41,31, 187,41,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29, 26,25,23,100,14,100,129,11,46,16,15,12,13, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,350,118, 3,3,404, 136,136,136,119,188,46, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2, 350,120,3,3,356, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,121,99,54,101,100,189,31, 189,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26, 25,23,100,14,100,129,11,46,16,15,12,13, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,122,3,3, 376, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,123,99,54,101,100,53,31, 53,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25, 23,100,14,100,129,11,46,16,15,12,13, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,124,3,3, 375, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,125,99,54,101,100,52,31, 52,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25, 23,100,14,100,129,11,46,16,15,12,13, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,126,3,3, 374, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,127,99,54,101,100,51,31, 51,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25, 23,100,14,100,129,11,46,16,15,12,13, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,128,3,3, 373, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,129,99,54,101,100,50,31, 50,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25, 23,100,14,100,129,11,46,16,15,12,13, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,130,3,3, 372, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,131,99,54,101,100,49,31, 49,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25, 23,100,14,100,129,11,46,16,15,12,13, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,132,3,3, 371, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,133,99,54,101,100,48,31, 48,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25, 23,100,14,100,129,11,46,16,15,12,13, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,134,3,3, 370, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,135,99,54,101,100,47,31, 47,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25, 23,100,14,100,129,11,46,16,15,12,13, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,136,3,3, 369, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,137,99,54,101,100,46,31, 46,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25, 23,100,14,100,129,11,46,16,15,12,13, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,138,3,3, 368, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,139,99,54,101,100,45,31, 45,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25, 23,100,14,100,129,11,46,16,15,12,13, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,140,3,3, 367, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,141,99,54,101,100,44,31, 44,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25, 23,100,14,100,129,11,46,16,15,12,13, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2, 350,142,3,3,354, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,143,99,54,101,100,43,31, 43,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25, 23,100,14,100,129,11,46,16,15,12,13, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,15,144,99,54,101,100,17, 31,191,190,17,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32, 30,29,26,25,23,100,14,100,129,11,46,16,15,12,13, 192,19,193, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,31,146,99,54,101,100,33, 31,195,194,33,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32, 30,29,26,25,23,100,14,100,129,11,46,16,15,12,13, 43,147,196,49, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,42,43,48,50,51,149,24,52,197, 148,99,54,101,100,22,22,63,24,61,60,31,22,22,59,26,58,57,56,49,55,47,60, 53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25,23, 100,14,100,129,11,46,16,15,12,13, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, 350,350,350,350,3,3,1,2,350,149,3,3,360, 24,120,142,11,150,200,199,198, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3, 1,2,350,151,3,3,355, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,350,152, 3,3,414, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,350,153, 3,3,413, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,350,154, 3,3,412, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,350,155, 3,3,411, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2, 350,156,3,3,377, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,350,157, 3,3,410, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,350,158, 3,3,409, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2, 350,159,3,3,359, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, 350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,350,160,3,3,357, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,350,161, 3,3,408, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,350,162, 3,3,407, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,350,163, 3,3,406, 152,153,154,155,157,158,161,162,163,118,17,18,80,82,84,20,19,94,98,104,106, 110,114,156,51,159,24,160,120,151,142,6,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, 52,165,10, 152,153,154,155,157,158,161,162,163,118,17,18,80,82,84,20,19,94,98,104,106, 110,114,156,51,159,24,160,120,151,142,201,201,166,164,201,164,164,164, 164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164, 164,164,164,164,164,164,164,164,164,164, 133,133,167,202,133, 133,133,168,203,133, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,169,99,54,101,100,31,77, 54,27,28,89,89,89,30,29,26,25,23,100,14,100,129,11,46,16,15,12,13, 80,82,84,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,170, 85,83,81, 80,82,84,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,171, 85,83,81, 20,19,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,172,87,86, 20,19,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,173,87,86, 88,90,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,174,91,89, 88,90,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,175,91,89, 88,90,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,176,91,89, 88,90,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,177,91,89, 92,94,96,98,72,72,72,72,72,72,72,72,72,72,72,72,72,178,99,97,95,93, 92,94,96,98,71,71,71,71,71,71,71,71,71,71,71,71,71,179,99,97,95,93, 100,102,69,69,69,69,69,69,69,69,69,69,69,180,103,101, 104,67,67,67,67,67,67,67,67,67,67,181,105, 110,62,62,62,62,62,62,62,62,182,111, 106,65,65,65,65,65,65,65,65,65,183,107, 63,60,60,60,60,60,60,60,184, 156,185,204, 160,186,40, 160,187,35, 24,188,205, 151,189,55, 159,16,190,206, 160,191,105, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, 350,350,3,3,1,2,192,3,3,365, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,42,43,48,50,51,24,52,62,193, 99,54,101,100,39,39,63,24,61,60,31,39,39,59,58,57,56,49,55,47,60,53,54, 45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25,23,100, 14,100,129,11,46,16,15,12,13, 159,32,207, 52,195,208, 52,196,28, 152,153,154,155,157,158,161,162,163,118,17,18,80,82,84,20,19,94,98,104,106, 110,114,156,51,209,159,24,160,120,151,142,209,197,164,209,164,164,164, 164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164, 164,164,164,164,164,164,164,164,164,164, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,15,198,99,54,101,100,17, 31,210,190,17,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32, 30,29,26,25,23,100,14,100,129,11,46,16,15,12,13, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,199,99,54,101,100,211,31, 211,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26, 25,23,100,14,100,129,11,46,16,15,12,13, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,200,99,54,101,100,12,31, 12,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25, 23,100,14,100,129,11,46,16,15,12,13, 52,7,201,10, 134,134,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123, 123,123,123,123,123,123,123,123,123,123,123,123,202,134, 134,134,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122, 122,122,122,122,122,122,122,122,122,122,122,122,203,134, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,204,99,54,101,100,31,57, 77,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25,23, 100,14,100,129,11,46,16,15,12,13, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,15,205,99,54,101,100,17, 31,212,190,17,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32, 30,29,26,25,23,100,14,100,129,11,46,16,15,12,13, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,206,99,54,101,100,18,31, 18,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25, 23,100,14,100,129,11,46,16,15,12,13, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,207,99,54,101,100,34,31, 34,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25, 23,100,14,100,129,11,46,16,15,12,13, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,208,99,54,101,100,41,31, 213,41,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29, 26,25,23,100,14,100,129,11,46,16,15,12,13, 149,52,209,10,27, 160,210,14, 151,211,13, 160,212,106, 52,213,214, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,31,214,99,54,101,100,33, 31,215,194,33,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32, 30,29,26,25,23,100,14,100,129,11,46,16,15,12,13, 160,215,216, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,42,43,48,50,51,24,52,216,99, 54,101,100,24,60,31,30,37,59,58,57,56,49,55,47,60,53,54,45,44,41,40,39, 38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25,23,100,14,100,129,11,46, 16,15,12,13, }; static const unsigned short ag_sbt[] = { 0, 30, 68, 107, 113, 194, 229, 231, 267, 269, 322, 327, 381, 414, 451, 453, 486, 519, 563, 607, 651, 695, 741, 787, 790, 834, 876, 918, 960,1002,1044,1086,1144,1151,1156,1161,1170,1175,1178,1181,1184,1187, 1196,1205,1214,1219,1227,1281,1284,1293,1296,1325,1373,1406,1462,1508, 1582,1585,1658,1732,1813,1816,1822,1888,1891,1970,1972,1978,1980,1982, 1988,1990,2025,2060,2066,2089,2131,2188,2222,2225,2228,2272,2315,2359, 2402,2446,2489,2533,2577,2600,2645,2668,2713,2736,2782,2826,2872,2895, 2941,2985,3031,3054,3101,3124,3171,3215,3263,3307,3356,3379,3430,3474, 3524,3547,3600,3644,3701,3759,3817,3859,3865,3909,3966,3989,4046,4069, 4126,4149,4206,4229,4286,4309,4366,4389,4446,4469,4526,4549,4606,4629, 4686,4709,4766,4810,4867,4927,4930,4990,4994,5074,5106,5114,5177,5219, 5261,5303,5345,5389,5431,5473,5517,5574,5616,5658,5700,5763,5766,5833, 5838,5843,5886,5914,5942,5966,5990,6012,6034,6056,6078,6100,6122,6138, 6151,6162,6174,6183,6186,6189,6192,6195,6198,6202,6205,6234,6312,6315, 6318,6321,6388,6448,6505,6562,6566,6599,6632,6688,6748,6805,6862,6920, 6925,6928,6931,6934,6937,6997,7000,7073 }; static const unsigned short ag_sbe[] = { 26, 65, 104, 111, 136, 228, 230, 266, 268, 314, 324, 373, 410, 446, 452, 482, 515, 559, 603, 647, 691, 737, 783, 788, 830, 849, 891, 933, 975,1017,1059,1101,1147,1153,1158,1165,1172,1176,1179,1182,1185,1195, 1201,1210,1216,1226,1277,1282,1289,1294,1321,1369,1402,1446,1506,1529, 1583,1606,1679,1755,1814,1819,1854,1889,1914,1971,1976,1979,1981,1986, 1989,2022,2057,2064,2085,2104,2146,2217,2223,2226,2268,2287,2355,2374, 2442,2461,2504,2548,2596,2615,2664,2683,2732,2751,2822,2841,2891,2910, 2981,3000,3050,3069,3120,3139,3211,3230,3303,3322,3375,3394,3470,3489, 3543,3562,3640,3659,3716,3774,3855,3862,3905,3924,3985,4004,4065,4084, 4145,4164,4225,4244,4305,4324,4385,4404,4465,4484,4545,4564,4625,4644, 4705,4724,4806,4825,4883,4928,4946,4991,5017,5102,5110,5173,5215,5257, 5299,5341,5385,5427,5469,5513,5570,5612,5654,5696,5731,5764,5799,5835, 5840,5858,5910,5938,5963,5987,6009,6031,6053,6075,6095,6117,6135,6149, 6160,6172,6182,6184,6187,6190,6193,6196,6200,6203,6230,6256,6313,6316, 6319,6354,6404,6463,6520,6564,6597,6630,6647,6704,6763,6820,6877,6922, 6926,6929,6932,6935,6953,6998,7021,7073 }; static const unsigned char ag_fl[] = { 2,1,2,1,2,0,1,4,1,2,3,2,4,5,5,0,1,1,3,1,1,1,2,2,1,2,3,5,4,2,9,0,1,1,3, 4,2,9,2,4,4,1,1,3,3,3,3,3,3,3,3,3,3,3,1,4,1,5,1,1,3,1,3,1,1,3,1,3,1,3, 1,3,3,1,3,3,3,3,1,3,3,1,3,3,1,3,3,3,1,4,1,2,2,2,2,2,2,1,3,1,1,1,1,2,2, 4,6,3,1,1,2,0,1,3,1,2,0,1,3,1,0,1,4,4,3,2,2,1,1,1,2,1,2,1,2,1,1,2,3,1, 1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,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,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,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,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,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,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2, 0,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 }; static const unsigned char ag_ptt[] = { 0, 6, 6, 11, 11, 12, 12, 6, 13, 13, 13, 15, 15, 15, 15, 23, 23, 25, 25, 14, 14, 8, 8, 27, 27, 27, 27, 27, 27, 27, 27, 34, 34, 36, 36, 32, 28, 28, 28, 28, 38, 35, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 42, 42, 41, 41, 55, 54, 54, 58, 58, 61, 60, 60, 63, 63, 65, 65, 67, 67, 67, 69, 69, 69, 69, 69, 72, 72, 72, 77, 77, 77, 80, 80, 80, 80, 83, 83, 87, 87, 87, 87, 87, 87, 87, 88, 88, 93, 93, 93, 93, 93, 93, 93, 93, 93, 1,100,100,101,101, 1,105,105,106,106, 1,204,110,110,204,204,108,108, 108, 95, 95,217,217,113,113,111,111, 17,155,155,207,118,118,205,121,121, 123,123,120,120,120,120,120,120,120,120,120,120,120,120,120,136,136,136, 138,139,140,137,137,144,144,114, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 97, 97, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99,104,104,104,104,104,104,104,104,104,104,104,104,104,104, 104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104, 104,104,115,115,115,116,116,116,116,116,119,119,119,119,119,119,119,119, 119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119, 119,119,119,119,119,119,124,124,124,124,124,124,124,124,124,124,124,124, 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124, 124,124,145,145,146,146,152,152,153,153, 16, 3, 18, 21, 20, 24, 22, 26, 30, 29, 31, 33, 37, 39, 40, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 57, 56, 59, 62, 64, 66, 68, 70, 71, 73, 74, 75, 76, 78, 79, 81, 82, 84, 85, 86, 89, 90, 91, 92, 94, 2, 4, 96, 5,147,122,117,142,148,149,109,150, 141,112 }; static const unsigned char *ag_valid(int ag_k) { const unsigned char *ag_tp = &ag_tstt[ag_sbt[(PCB).sn+1]]; while (*--ag_tp != (unsigned char) ag_k) if (*ag_tp == 0) return NULL; return ag_tp; } int vmCompile_change_reduction(vmCompile_token_type ag_k) { if (!ag_valid(ag_k)) return 0; (PCB).reduction_token = ag_k; return 1; } static void ag_default(const int *ag_tp) { (PCB).ag_dsn = (PCB).sn; (PCB).ag_dtl = ag_tp; while (!ag_valid((vmCompile_token_type) *ag_tp)) ag_tp++; (PCB).reduction_token = (vmCompile_token_type) *ag_tp; } static void ag_ra(void) { switch(ag_rpx[(PCB).ag_ap]) { case 1: V(0,(Code *)) = ag_rp_1(); break; case 2: V(0,(Code *)) = ag_rp_2(V(0,(Code *))); break; case 3: V(0,(Code *)) = ag_rp_3(V(0,(Code *))); break; case 4: V(0,(Code *)) = ag_rp_4(); break; case 5: V(0,(Code *)) = ag_rp_5(V(0,(int *)), V(1,(int *))); break; case 6: V(0,(Code *)) = ag_rp_6(V(0,(int *)), V(1,(int *)), V(3,(Code *))); break; case 7: V(0,(Code *)) = ag_rp_7(V(0,(int *)), V(1,(int *)), V(3,(Code *))); break; case 8: V(0,(Code *)) = ag_rp_8(V(0,(int *)), V(1,(int *)), V(3,(Code *))); break; case 9: V(0,(Code *)) = ag_rp_9(); break; case 10: V(0,(Code *)) = ag_rp_10(V(0,(Code *))); break; case 11: V(0,(Code *)) = ag_rp_11(V(0,(Code *))); break; case 12: V(0,(Code *)) = ag_rp_12(V(0,(Code *)), V(2,(Code *))); break; case 13: V(0,(Code *)) = ag_rp_13(V(0,(Code *))); break; case 14: V(0,(Code *)) = ag_rp_14(V(0,(Code *)), V(1,(Code *))); break; case 15: V(0,(Code *)) = ag_rp_15(V(0,(Code *))); break; case 16: V(0,(Code *)) = ag_rp_16(); break; case 17: V(0,(Code *)) = ag_rp_17(); break; case 18: V(0,(Code *)) = ag_rp_18(V(1,(Code *))); break; case 19: V(0,(Code *)) = ag_rp_19(V(1,(Code *))); break; case 20: V(0,(Code *)) = ag_rp_20(V(1,(Code *)), V(2,(Code *))); break; case 21: V(0,(Code *)) = ag_rp_21(V(0,(Code *)), V(1,(Code *))); break; case 22: V(0,(Code *)) = ag_rp_22(V(2,(Code *)), V(4,(Code *)), V(6,(Code *)), V(8,(Code *))); break; case 23: V(0,(Code *)) = ag_rp_23(); break; case 24: V(0,(Code *)) = ag_rp_24(V(0,(Code *))); break; case 25: V(0,(Code *)) = ag_rp_25(V(0,(Code *)), V(2,(Code *))); break; case 26: V(0,(Code *)) = ag_rp_26(V(2,(Code *))); break; case 27: V(0,(Code *)) = ag_rp_27(V(0,(Code *)), V(1,(Code *))); break; case 28: V(0,(Code *)) = ag_rp_28(V(2,(Code *)), V(4,(Code *)), V(6,(Code *)), V(8,(Code *))); break; case 29: V(0,(Code *)) = ag_rp_29(V(0,(Code *)), V(1,(Code *))); break; case 30: V(0,(Code *)) = ag_rp_30(V(0,(Code *)), V(1,(Code *)), V(3,(Code *))); break; case 31: V(0,(Code *)) = ag_rp_31(V(2,(Code *))); break; case 32: V(0,(Code *)) = ag_rp_32(V(0,(Code *))); break; case 33: V(0,(Code *)) = ag_rp_33(V(0,(Code *)), V(2,(Code *))); break; case 34: V(0,(Code *)) = ag_rp_34(V(0,(Code *)), V(2,(Code *))); break; case 35: V(0,(Code *)) = ag_rp_35(V(0,(Code *)), V(2,(Code *))); break; case 36: V(0,(Code *)) = ag_rp_36(V(0,(Code *)), V(2,(Code *))); break; case 37: V(0,(Code *)) = ag_rp_37(V(0,(Code *)), V(2,(Code *))); break; case 38: V(0,(Code *)) = ag_rp_38(V(0,(Code *)), V(2,(Code *))); break; case 39: V(0,(Code *)) = ag_rp_39(V(0,(Code *)), V(2,(Code *))); break; case 40: V(0,(Code *)) = ag_rp_40(V(0,(Code *)), V(2,(Code *))); break; case 41: V(0,(Code *)) = ag_rp_41(V(0,(Code *)), V(2,(Code *))); break; case 42: V(0,(Code *)) = ag_rp_42(V(0,(Code *)), V(2,(Code *))); break; case 43: V(0,(Code *)) = ag_rp_43(V(0,(Code *)), V(2,(Code *))); break; case 44: V(0,(Code *)) = ag_rp_44(V(0,(int *))); break; case 45: V(0,(Code *)) = ag_rp_45(V(0,(Code *)), V(2,(Code *))); break; case 46: V(0,(Code *)) = ag_rp_46(V(0,(Code *)), V(2,(Code *)), V(4,(Code *))); break; case 47: V(0,(Code *)) = ag_rp_47(V(0,(Code *))); break; case 48: V(0,(Code *)) = ag_rp_48(V(0,(Code *)), V(2,(Code *))); break; case 49: V(0,(Code *)) = ag_rp_49(V(0,(Code *)), V(2,(Code *))); break; case 50: V(0,(Code *)) = ag_rp_50(V(0,(Code *))); break; case 51: V(0,(Code *)) = ag_rp_51(V(0,(Code *)), V(2,(Code *))); break; case 52: V(0,(Code *)) = ag_rp_52(V(0,(Code *)), V(2,(Code *))); break; case 53: V(0,(Code *)) = ag_rp_53(V(0,(Code *)), V(2,(Code *))); break; case 54: V(0,(Code *)) = ag_rp_54(V(0,(Code *)), V(2,(Code *))); break; case 55: V(0,(Code *)) = ag_rp_55(V(0,(Code *)), V(2,(Code *))); break; case 56: V(0,(Code *)) = ag_rp_56(V(0,(Code *)), V(2,(Code *))); break; case 57: V(0,(Code *)) = ag_rp_57(V(0,(Code *)), V(2,(Code *))); break; case 58: V(0,(Code *)) = ag_rp_58(V(0,(Code *)), V(2,(Code *))); break; case 59: V(0,(Code *)) = ag_rp_59(V(0,(Code *)), V(2,(Code *))); break; case 60: V(0,(Code *)) = ag_rp_60(V(0,(Code *)), V(2,(Code *))); break; case 61: V(0,(Code *)) = ag_rp_61(V(0,(Code *)), V(2,(Code *))); break; case 62: V(0,(Code *)) = ag_rp_62(V(0,(Code *)), V(2,(Code *))); break; case 63: V(0,(Code *)) = ag_rp_63(V(0,(Code *)), V(2,(Code *))); break; case 64: V(0,(Code *)) = ag_rp_64(V(0,(Code *)), V(2,(Code *))); break; case 65: V(0,(Code *)) = ag_rp_65(V(0,(Code *)), V(2,(Code *))); break; case 66: V(0,(Code *)) = ag_rp_66(V(0,(Code *)), V(2,(Code *))); break; case 67: V(0,(Code *)) = ag_rp_67(V(1,(int *)), V(3,(Code *))); break; case 68: V(0,(Code *)) = ag_rp_68(V(1,(Code *))); break; case 69: V(0,(Code *)) = ag_rp_69(V(1,(Code *))); break; case 70: V(0,(Code *)) = ag_rp_70(V(1,(Code *))); break; case 71: V(0,(Code *)) = ag_rp_71(V(1,(Code *))); break; case 72: V(0,(Code *)) = ag_rp_72(V(1,(Code *))); break; case 73: V(0,(Code *)) = ag_rp_73(V(1,(Code *))); break; case 74: V(0,(Code *)) = ag_rp_74(V(0,(Code *)), V(2,(Code *))); break; case 75: V(0,(Code *)) = ag_rp_75(V(0,(double *))); break; case 76: V(0,(Code *)) = ag_rp_76(V(0,(int *))); break; case 77: V(0,(Code *)) = ag_rp_77(V(0,(int *))); break; case 78: V(0,(Code *)) = ag_rp_78(V(0,(Code *))); break; case 79: V(0,(Code *)) = ag_rp_79(V(0,(Code *))); break; case 80: V(0,(Code *)) = ag_rp_80(V(0,(Code *))); break; case 81: V(0,(Code *)) = ag_rp_81(V(0,(int *)), V(2,(Code *))); break; case 82: V(0,(Code *)) = ag_rp_82(V(0,(Code *)), V(2,(int *)), V(4,(Code *))); break; case 83: V(0,(Code *)) = ag_rp_83(V(1,(Code *))); break; case 84: V(0,(double *)) = ag_rp_84(V(0,(double *)), V(3,(int *))); break; case 85: V(0,(double *)) = ag_rp_85(V(0,(double *)), V(3,(int *))); break; case 86: V(0,(double *)) = ag_rp_86(V(0,(int *)), V(2,(double *))); break; case 87: V(0,(double *)) = ag_rp_87(V(0,(int *))); break; case 88: V(0,(double *)) = ag_rp_88(V(1,(double *))); break; case 89: V(0,(int *)) = ag_rp_89(V(0,(int *))); break; case 90: V(0,(int *)) = ag_rp_90(V(0,(int *)), V(1,(int *))); break; case 91: V(0,(double *)) = ag_rp_91(V(0,(int *))); break; case 92: V(0,(double *)) = ag_rp_92(V(0,(int *)), V(1,(double *))); break; case 93: V(0,(int *)) = ag_rp_93(V(0,(int *))); break; case 94: V(0,(int *)) = ag_rp_94(V(0,(int *)), V(1,(int *))); break; case 95: ag_default(&ag_rtt[0]); V(0,(int *)) = ag_rp_95(V(0,(int *))); break; case 96: V(0,(int *)) = ag_rp_96(V(0,(int *))); break; case 97: V(0,(int *)) = ag_rp_97(V(0,(int *)), V(1,(int *))); break; case 98: V(0,(int *)) = ag_rp_98(V(1,(int *))); break; case 99: V(0,(int *)) = ag_rp_99(V(0,(int *))); break; case 100: V(0,(int *)) = ag_rp_100(); break; case 101: V(0,(int *)) = ag_rp_101(V(0,(int *)), V(1,(int *))); break; case 102: V(0,(int *)) = ag_rp_102(); break; case 103: V(0,(int *)) = ag_rp_103(); break; case 104: V(0,(int *)) = ag_rp_104(); break; case 105: V(0,(int *)) = ag_rp_105(); break; case 106: V(0,(int *)) = ag_rp_106(); break; case 107: V(0,(int *)) = ag_rp_107(); break; case 108: V(0,(int *)) = ag_rp_108(); break; case 109: V(0,(int *)) = ag_rp_109(); break; case 110: V(0,(int *)) = ag_rp_110(); break; case 111: V(0,(int *)) = ag_rp_111(); break; case 112: V(0,(int *)) = ag_rp_112(); break; case 113: V(0,(int *)) = ag_rp_113(V(1,(int *))); break; case 114: V(0,(int *)) = ag_rp_114(V(0,(int *)), V(1,(int *))); break; case 115: V(0,(int *)) = ag_rp_115(V(0,(int *)), V(1,(int *))); break; case 116: V(0,(int *)) = ag_rp_116(V(1,(int *))); break; case 117: V(0,(int *)) = ag_rp_117(V(0,(int *)), V(1,(int *))); break; case 118: V(0,(int *)) = ag_rp_118(V(0,(int *))); break; } (PCB).la_ptr = (PCB).pointer; } #define TOKEN_NAMES vmCompile_token_names const char *const vmCompile_token_names[218] = { "input string", "white space", "real", "name string", "string literal", "character constant", "input string", "eof", "statements", "error", "", "", "", "statement", "executable statement", "declaration", "';'", "type name", "'='", "expression", "'['", "']'", "'('", "expression list", "')'", "expressions", "','", "unconditional statement", "conditional statement", "'{'", "'}'", "\"do\"", "while clause", "\"for\"", "for exprs", "condition", "for expr list", "\"while\"", "if clause", "\"else\"", "\"if\"", "conditional expression", "lvalue", "\"+=\"", "\"-=\"", "\"*=\"", "\"/=\"", "\"%=\"", "\"|=\"", "\"&=\"", "\"^=\"", "\"<<=\"", "\">>=\"", "variable name", "logical or expression", "logical or condition", "'\\?'", "':'", "logical and expression", "\"||\"", "bitwise or expression", "logical and condition", "\"&&\"", "bitwise xor expression", "'|'", "bitwise and expression", "'^'", "equality expression", "'&'", "relational expression", "\"==\"", "\"!=\"", "shift expression", "'<'", "\"<=\"", "'>'", "\">=\"", "additive expression", "\"<<\"", "\">>\"", "multiplicative expression", "'+'", "'-'", "cast expression", "'*'", "'/'", "'%'", "unary expression", "power expression", "\"++\"", "\"--\"", "'!'", "'~'", "primary", "\"**\"", "integer constant", "'.'", "space", "\"/*\"", "", "", "", "\"*/\"", "\"//\"", "", "", "", "'\\n'", "simple real", "", "", "exponent", "integer", "fraction part", "digit", "letter", "", "'\\''", "char constant element", "not single quote", "escape sequence", "string chars", "'\\\"'", "string char", "not double quote", "\"\\\\a\"", "\"\\\\b\"", "\"\\\\f\"", "\"\\\\n\"", "\"\\\\r\"", "\"\\\\t\"", "\"\\\\v\"", "\"\\\\\\\\\"", "\"\\\\?\"", "\"\\\\\\'\"", "\"\\\\\\\"\"", "octal escape", "hex escape", "one octal", "two octal", "three octal", "'\\\\'", "", "\"\\\\x\"", "hex digit", "", "", "", "", "", "", "", "", "", "';'", "name string", "'='", "']'", "'['", "')'", "'('", "','", "'}'", "'{'", "\"do\"", "\"for\"", "\"while\"", "\"else\"", "\"if\"", "\"+=\"", "\"-=\"", "\"*=\"", "\"/=\"", "\"%=\"", "\"|=\"", "\"&=\"", "\"^=\"", "\"<<=\"", "\">>=\"", "':'", "'\\?'", "\"||\"", "\"&&\"", "'|'", "'^'", "'&'", "\"==\"", "\"!=\"", "'<'", "\"<=\"", "'>'", "\">=\"", "\"<<\"", "\">>\"", "'+'", "'-'", "'*'", "'/'", "'%'", "\"++\"", "\"--\"", "'!'", "'~'", "\"**\"", "real", "string literal", "'.'", "character constant", "", "'\\\"'", "'\\''", "", "", "", "", "", "'\\\\'", "integer", }; #ifndef MISSING_FORMAT #define MISSING_FORMAT "Missing %s" #endif #ifndef UNEXPECTED_FORMAT #define UNEXPECTED_FORMAT "Unexpected %s" #endif #ifndef UNNAMED_TOKEN #define UNNAMED_TOKEN "input" #endif static void ag_diagnose(void) { int ag_snd = (PCB).sn; int ag_k = ag_sbt[ag_snd]; if (*TOKEN_NAMES[ag_tstt[ag_k]] && ag_astt[ag_k + 1] == ag_action_8) { sprintf((PCB).ag_msg, MISSING_FORMAT, TOKEN_NAMES[ag_tstt[ag_k]]); } else if (ag_astt[ag_sbe[(PCB).sn]] == ag_action_8 && (ag_k = (int) ag_sbe[(PCB).sn] + 1) == (int) ag_sbt[(PCB).sn+1] - 1 && *TOKEN_NAMES[ag_tstt[ag_k]]) { sprintf((PCB).ag_msg, MISSING_FORMAT, TOKEN_NAMES[ag_tstt[ag_k]]); } else if ((PCB).token_number && *TOKEN_NAMES[(PCB).token_number]) { sprintf((PCB).ag_msg, UNEXPECTED_FORMAT, TOKEN_NAMES[(PCB).token_number]); } else if (isprint(INPUT_CODE((*(PCB).pointer))) && INPUT_CODE((*(PCB).pointer)) != '\\') { char buf[20]; sprintf(buf, "\'%c\'", (char) INPUT_CODE((*(PCB).pointer))); sprintf((PCB).ag_msg, UNEXPECTED_FORMAT, buf); } else sprintf((PCB).ag_msg, UNEXPECTED_FORMAT, UNNAMED_TOKEN); (PCB).error_message = (PCB).ag_msg; } static int ag_action_1_r_proc(void); static int ag_action_2_r_proc(void); static int ag_action_3_r_proc(void); static int ag_action_4_r_proc(void); static int ag_action_1_s_proc(void); static int ag_action_3_s_proc(void); static int ag_action_1_proc(void); static int ag_action_2_proc(void); static int ag_action_3_proc(void); static int ag_action_4_proc(void); static int ag_action_5_proc(void); static int ag_action_6_proc(void); static int ag_action_7_proc(void); static int ag_action_8_proc(void); static int ag_action_9_proc(void); static int ag_action_10_proc(void); static int ag_action_11_proc(void); static int ag_action_8_proc(void); static int (*const ag_r_procs_scan[])(void) = { ag_action_1_r_proc, ag_action_2_r_proc, ag_action_3_r_proc, ag_action_4_r_proc }; static int (*const ag_s_procs_scan[])(void) = { ag_action_1_s_proc, ag_action_2_r_proc, ag_action_3_s_proc, ag_action_4_r_proc }; static int (*const ag_gt_procs_scan[])(void) = { ag_action_1_proc, ag_action_2_proc, ag_action_3_proc, ag_action_4_proc, ag_action_5_proc, ag_action_6_proc, ag_action_7_proc, ag_action_8_proc, ag_action_9_proc, ag_action_10_proc, ag_action_11_proc, ag_action_8_proc }; static int ag_action_1_er_proc(void); static int ag_action_2_er_proc(void); static int ag_action_3_er_proc(void); static int ag_action_4_er_proc(void); static int (*const ag_er_procs_scan[])(void) = { ag_action_1_er_proc, ag_action_2_er_proc, ag_action_3_er_proc, ag_action_4_er_proc }; static void ag_error_resynch(void) { int ag_k; int ag_ssx = (PCB).ssx; ag_diagnose(); SYNTAX_ERROR; if ((PCB).exit_flag != AG_RUNNING_CODE) return; while (1) { ag_k = ag_sbt[(PCB).sn]; while (ag_tstt[ag_k] != 9 && ag_tstt[ag_k]) ag_k++; if (ag_tstt[ag_k] || (PCB).ssx == 0) break; (PCB).sn = (PCB).ss[--(PCB).ssx]; } if (ag_tstt[ag_k] == 0) { (PCB).sn = PCB.ss[(PCB).ssx = ag_ssx]; (PCB).exit_flag = AG_SYNTAX_ERROR_CODE; return; } ag_k = ag_sbt[(PCB).sn]; while (ag_tstt[ag_k] != 9 && ag_tstt[ag_k]) ag_k++; (PCB).ag_ap = ag_pstt[ag_k]; (ag_er_procs_scan[ag_astt[ag_k]])(); while (1) { ag_k = ag_sbt[(PCB).sn]; while (ag_tstt[ag_k] != (unsigned char) (PCB).token_number && ag_tstt[ag_k]) ag_k++; if (ag_tstt[ag_k] && ag_astt[ag_k] != ag_action_10) break; if ((PCB).token_number == 7) {(PCB).exit_flag = AG_SYNTAX_ERROR_CODE; return;} {(PCB).la_ptr = (PCB).pointer + 1; ag_track();} (PCB).token_number = (vmCompile_token_type) AG_TCV(INPUT_CODE(*(PCB).la_ptr)); (PCB).la_ptr++; if (ag_key_index[(PCB).sn]) { unsigned ag_k = ag_key_index[(PCB).sn]; int ag_ch = CONVERT_CASE(INPUT_CODE(*(PCB).pointer)); if (ag_ch <= 255) { while (ag_key_ch[ag_k] < ag_ch) ag_k++; if (ag_key_ch[ag_k] == ag_ch) ag_get_key_word(ag_k); } } } (PCB).la_ptr = (PCB).pointer; } static int ag_action_10_proc(void) { int ag_t = (PCB).token_number; (PCB).btsx = 0, (PCB).drt = -1; do { ag_track(); (PCB).token_number = (vmCompile_token_type) AG_TCV(INPUT_CODE(*(PCB).la_ptr)); (PCB).la_ptr++; if (ag_key_index[(PCB).sn]) { unsigned ag_k = ag_key_index[(PCB).sn]; int ag_ch = CONVERT_CASE(INPUT_CODE(*(PCB).pointer)); if (ag_ch <= 255) { while (ag_key_ch[ag_k] < ag_ch) ag_k++; if (ag_key_ch[ag_k] == ag_ch) ag_get_key_word(ag_k); } } } while ((PCB).token_number == (vmCompile_token_type) ag_t); (PCB).la_ptr = (PCB).pointer; return 1; } static int ag_action_11_proc(void) { int ag_t = (PCB).token_number; (PCB).btsx = 0, (PCB).drt = -1; do { (*(int *) &(PCB).vs[(PCB).ssx]) = *(PCB).pointer; (PCB).ssx--; ag_track(); ag_ra(); if ((PCB).exit_flag != AG_RUNNING_CODE) return 0; (PCB).ssx++; (PCB).token_number = (vmCompile_token_type) AG_TCV(INPUT_CODE(*(PCB).la_ptr)); (PCB).la_ptr++; if (ag_key_index[(PCB).sn]) { unsigned ag_k = ag_key_index[(PCB).sn]; int ag_ch = CONVERT_CASE(INPUT_CODE(*(PCB).pointer)); if (ag_ch <= 255) { while (ag_key_ch[ag_k] < ag_ch) ag_k++; if (ag_key_ch[ag_k] == ag_ch) ag_get_key_word(ag_k); } } } while ((PCB).token_number == (vmCompile_token_type) ag_t); (PCB).la_ptr = (PCB).pointer; return 1; } static int ag_action_3_r_proc(void) { int ag_sd = ag_fl[(PCB).ag_ap] - 1; if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd]; (PCB).btsx = 0, (PCB).drt = -1; (PCB).reduction_token = (vmCompile_token_type) ag_ptt[(PCB).ag_ap]; ag_ra(); return (PCB).exit_flag == AG_RUNNING_CODE; } static int ag_action_3_s_proc(void) { int ag_sd = ag_fl[(PCB).ag_ap] - 1; if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd]; (PCB).btsx = 0, (PCB).drt = -1; (PCB).reduction_token = (vmCompile_token_type) ag_ptt[(PCB).ag_ap]; ag_ra(); return (PCB).exit_flag == AG_RUNNING_CODE; } static int ag_action_4_r_proc(void) { int ag_sd = ag_fl[(PCB).ag_ap] - 1; if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd]; (PCB).reduction_token = (vmCompile_token_type) ag_ptt[(PCB).ag_ap]; return 1; } static int ag_action_2_proc(void) { (PCB).btsx = 0, (PCB).drt = -1; if ((PCB).ssx >= 128) { (PCB).exit_flag = AG_STACK_ERROR_CODE; PARSER_STACK_OVERFLOW; } (*(int *) &(PCB).vs[(PCB).ssx]) = *(PCB).pointer; (PCB).ss[(PCB).ssx] = (PCB).sn; (PCB).ssx++; (PCB).sn = (PCB).ag_ap; ag_track(); return 0; } static int ag_action_9_proc(void) { if ((PCB).drt == -1) { (PCB).drt=(PCB).token_number; (PCB).dssx=(PCB).ssx; (PCB).dsn=(PCB).sn; } ag_prot(); (PCB).vs[(PCB).ssx] = ag_null_value; (PCB).ss[(PCB).ssx] = (PCB).sn; (PCB).ssx++; (PCB).sn = (PCB).ag_ap; (PCB).la_ptr = (PCB).pointer; return (PCB).exit_flag == AG_RUNNING_CODE; } static int ag_action_2_r_proc(void) { (PCB).ssx++; (PCB).sn = (PCB).ag_ap; return 0; } static int ag_action_7_proc(void) { --(PCB).ssx; (PCB).la_ptr = (PCB).pointer; (PCB).exit_flag = AG_SUCCESS_CODE; return 0; } static int ag_action_1_proc(void) { ag_track(); (PCB).exit_flag = AG_SUCCESS_CODE; return 0; } static int ag_action_1_r_proc(void) { (PCB).exit_flag = AG_SUCCESS_CODE; return 0; } static int ag_action_1_s_proc(void) { (PCB).exit_flag = AG_SUCCESS_CODE; return 0; } static int ag_action_4_proc(void) { int ag_sd = ag_fl[(PCB).ag_ap] - 1; (PCB).reduction_token = (vmCompile_token_type) ag_ptt[(PCB).ag_ap]; (PCB).btsx = 0, (PCB).drt = -1; (*(int *) &(PCB).vs[(PCB).ssx]) = *(PCB).pointer; if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd]; else (PCB).ss[(PCB).ssx] = (PCB).sn; ag_track(); while ((PCB).exit_flag == AG_RUNNING_CODE) { unsigned ag_t1 = ag_sbe[(PCB).sn] + 1; unsigned ag_t2 = ag_sbt[(PCB).sn+1] - 1; do { unsigned ag_tx = (ag_t1 + ag_t2)/2; if (ag_tstt[ag_tx] < (unsigned char)(PCB).reduction_token) ag_t1 = ag_tx + 1; else ag_t2 = ag_tx; } while (ag_t1 < ag_t2); if (ag_tstt[ag_t1] != (PCB).reduction_token) { (PCB).exit_flag = AG_REDUCTION_ERROR_CODE; REDUCTION_TOKEN_ERROR; break;} (PCB).ag_ap = ag_pstt[ag_t1]; if ((ag_s_procs_scan[ag_astt[ag_t1]])() == 0) break; } return 0; } static int ag_action_3_proc(void) { int ag_sd = ag_fl[(PCB).ag_ap] - 1; (PCB).btsx = 0, (PCB).drt = -1; (*(int *) &(PCB).vs[(PCB).ssx]) = *(PCB).pointer; if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd]; else (PCB).ss[(PCB).ssx] = (PCB).sn; ag_track(); (PCB).reduction_token = (vmCompile_token_type) ag_ptt[(PCB).ag_ap]; ag_ra(); while ((PCB).exit_flag == AG_RUNNING_CODE) { unsigned ag_t1 = ag_sbe[(PCB).sn] + 1; unsigned ag_t2 = ag_sbt[(PCB).sn+1] - 1; do { unsigned ag_tx = (ag_t1 + ag_t2)/2; if (ag_tstt[ag_tx] < (unsigned char)(PCB).reduction_token) ag_t1 = ag_tx + 1; else ag_t2 = ag_tx; } while (ag_t1 < ag_t2); if (ag_tstt[ag_t1] != (PCB).reduction_token) { (PCB).exit_flag = AG_REDUCTION_ERROR_CODE; REDUCTION_TOKEN_ERROR; break;} (PCB).ag_ap = ag_pstt[ag_t1]; if ((ag_s_procs_scan[ag_astt[ag_t1]])() == 0) break; } return 0; } static int ag_action_8_proc(void) { int ag_k = ag_sbt[(PCB).sn]; while (ag_tstt[ag_k] != 9 && ag_tstt[ag_k]) ag_k++; if (ag_tstt[ag_k] == 0) ag_undo(); (PCB).la_ptr = (PCB).pointer; ag_error_resynch(); return (PCB).exit_flag == AG_RUNNING_CODE; } static int ag_action_5_proc(void) { int ag_sd = ag_fl[(PCB).ag_ap]; (PCB).btsx = 0, (PCB).drt = -1; if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd]; else { (PCB).ss[(PCB).ssx] = (PCB).sn; } (PCB).la_ptr = (PCB).pointer; (PCB).reduction_token = (vmCompile_token_type) ag_ptt[(PCB).ag_ap]; ag_ra(); while ((PCB).exit_flag == AG_RUNNING_CODE) { unsigned ag_t1 = ag_sbe[(PCB).sn] + 1; unsigned ag_t2 = ag_sbt[(PCB).sn+1] - 1; do { unsigned ag_tx = (ag_t1 + ag_t2)/2; if (ag_tstt[ag_tx] < (unsigned char)(PCB).reduction_token) ag_t1 = ag_tx + 1; else ag_t2 = ag_tx; } while (ag_t1 < ag_t2); if (ag_tstt[ag_t1] != (PCB).reduction_token) { (PCB).exit_flag = AG_REDUCTION_ERROR_CODE; REDUCTION_TOKEN_ERROR; break;} (PCB).ag_ap = ag_pstt[ag_t1]; if ((ag_r_procs_scan[ag_astt[ag_t1]])() == 0) break; } return (PCB).exit_flag == AG_RUNNING_CODE; } static int ag_action_6_proc(void) { int ag_sd = ag_fl[(PCB).ag_ap]; (PCB).reduction_token = (vmCompile_token_type) ag_ptt[(PCB).ag_ap]; if ((PCB).drt == -1) { (PCB).drt=(PCB).token_number; (PCB).dssx=(PCB).ssx; (PCB).dsn=(PCB).sn; } if (ag_sd) { (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd]; } else { ag_prot(); (PCB).vs[(PCB).ssx] = ag_null_value; (PCB).ss[(PCB).ssx] = (PCB).sn; } (PCB).la_ptr = (PCB).pointer; while ((PCB).exit_flag == AG_RUNNING_CODE) { unsigned ag_t1 = ag_sbe[(PCB).sn] + 1; unsigned ag_t2 = ag_sbt[(PCB).sn+1] - 1; do { unsigned ag_tx = (ag_t1 + ag_t2)/2; if (ag_tstt[ag_tx] < (unsigned char)(PCB).reduction_token) ag_t1 = ag_tx + 1; else ag_t2 = ag_tx; } while (ag_t1 < ag_t2); if (ag_tstt[ag_t1] != (PCB).reduction_token) { (PCB).exit_flag = AG_REDUCTION_ERROR_CODE; REDUCTION_TOKEN_ERROR; break;} (PCB).ag_ap = ag_pstt[ag_t1]; if ((ag_r_procs_scan[ag_astt[ag_t1]])() == 0) break; } return (PCB).exit_flag == AG_RUNNING_CODE; } static int ag_action_2_er_proc(void) { (PCB).btsx = 0, (PCB).drt = -1; (*(int *) &(PCB).vs[(PCB).ssx]) = *(PCB).pointer; (PCB).ssx++; (PCB).sn = (PCB).ag_ap; return 0; } static int ag_action_1_er_proc(void) { (PCB).btsx = 0, (PCB).drt = -1; (PCB).exit_flag = AG_SUCCESS_CODE; return 0; } static int ag_action_4_er_proc(void) { int ag_sd = ag_fl[(PCB).ag_ap] - 1; (PCB).btsx = 0, (PCB).drt = -1; (PCB).reduction_token = (vmCompile_token_type) ag_ptt[(PCB).ag_ap]; if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd]; else (PCB).ss[(PCB).ssx] = (PCB).sn; while ((PCB).exit_flag == AG_RUNNING_CODE) { unsigned ag_t1 = ag_sbe[(PCB).sn] + 1; unsigned ag_t2 = ag_sbt[(PCB).sn+1] - 1; do { unsigned ag_tx = (ag_t1 + ag_t2)/2; if (ag_tstt[ag_tx] < (unsigned char)(PCB).reduction_token) ag_t1 = ag_tx + 1; else ag_t2 = ag_tx; } while (ag_t1 < ag_t2); if (ag_tstt[ag_t1] != (PCB).reduction_token) { (PCB).exit_flag = AG_REDUCTION_ERROR_CODE; REDUCTION_TOKEN_ERROR; break;} (PCB).ag_ap = ag_pstt[ag_t1]; if ((ag_s_procs_scan[ag_astt[ag_t1]])() == 0) break; } return 0; } static int ag_action_3_er_proc(void) { int ag_sd = ag_fl[(PCB).ag_ap] - 1; (PCB).btsx = 0, (PCB).drt = -1; if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd]; else (PCB).ss[(PCB).ssx] = (PCB).sn; (PCB).reduction_token = (vmCompile_token_type) ag_ptt[(PCB).ag_ap]; ag_ra(); while ((PCB).exit_flag == AG_RUNNING_CODE) { unsigned ag_t1 = ag_sbe[(PCB).sn] + 1; unsigned ag_t2 = ag_sbt[(PCB).sn+1] - 1; do { unsigned ag_tx = (ag_t1 + ag_t2)/2; if (ag_tstt[ag_tx] < (unsigned char)(PCB).reduction_token) ag_t1 = ag_tx + 1; else ag_t2 = ag_tx; } while (ag_t1 < ag_t2); if (ag_tstt[ag_t1] != (PCB).reduction_token) { (PCB).exit_flag = AG_REDUCTION_ERROR_CODE; REDUCTION_TOKEN_ERROR; break;} (PCB).ag_ap = ag_pstt[ag_t1]; if ((ag_s_procs_scan[ag_astt[ag_t1]])() == 0) break; } return 0; } void init_vmCompile(void) { (PCB).la_ptr = (PCB).pointer; (PCB).ss[0] = (PCB).sn = (PCB).ssx = 0; (PCB).exit_flag = AG_RUNNING_CODE; (PCB).line = FIRST_LINE; (PCB).column = FIRST_COLUMN; (PCB).btsx = 0, (PCB).drt = -1; } void vmCompile(void) { init_vmCompile(); (PCB).exit_flag = AG_RUNNING_CODE; while ((PCB).exit_flag == AG_RUNNING_CODE) { unsigned ag_t1 = ag_sbt[(PCB).sn]; if (ag_tstt[ag_t1]) { unsigned ag_t2 = ag_sbe[(PCB).sn] - 1; (PCB).token_number = (vmCompile_token_type) AG_TCV(INPUT_CODE(*(PCB).la_ptr)); (PCB).la_ptr++; if (ag_key_index[(PCB).sn]) { unsigned ag_k = ag_key_index[(PCB).sn]; int ag_ch = CONVERT_CASE(INPUT_CODE(*(PCB).pointer)); if (ag_ch <= 255) { while (ag_key_ch[ag_k] < ag_ch) ag_k++; if (ag_key_ch[ag_k] == ag_ch) ag_get_key_word(ag_k); } } do { unsigned ag_tx = (ag_t1 + ag_t2)/2; if (ag_tstt[ag_tx] > (unsigned char)(PCB).token_number) ag_t1 = ag_tx + 1; else ag_t2 = ag_tx; } while (ag_t1 < ag_t2); if (ag_tstt[ag_t1] != (unsigned char)(PCB).token_number) ag_t1 = ag_sbe[(PCB).sn]; } (PCB).ag_ap = ag_pstt[ag_t1]; (ag_gt_procs_scan[ag_astt[ag_t1]])(); } }