diff tests/agcl/oldagsrc/good/xvmc.cpp @ 0:13d2b8934445

Import AnaGram (near-)release tree into Mercurial.
author David A. Holland
date Sat, 22 Dec 2007 17:52:45 -0500
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/agcl/oldagsrc/good/xvmc.cpp	Sat Dec 22 17:52:45 2007 -0500
@@ -0,0 +1,3367 @@
+/*
+ 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]])();
+  }
+}
+
+