diff tests/agcl/contrib/good/bug-I158.c @ 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/contrib/good/bug-I158.c	Sat Dec 22 17:52:45 2007 -0500
@@ -0,0 +1,3989 @@
+/*
+     YABASIC --- a tiny integrated Basic Compiler/Interpreter
+
+     BISON - part
+
+     this Program is subject to the GNU General Public License;
+     see the file yabasic.c for details.
+*/
+
+
+#undef WINDOWS
+#include "yabasic.h"     /* definitions of yabasic */
+#include <malloc.h>
+
+#if HAVE_ALLOCA_H
+#include <alloca.h>
+#endif
+
+void __yy_bcopy(char *,char *,int); /* prototype missing */
+
+int yylineno=1;
+int yylex(void);
+
+
+/*
+ * 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 BUG-I158_H
+#include "bug-I158.h"
+#endif
+
+#ifndef BUG-I158_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])
+
+
+
+bug-I158_pcb_type bug-I158_pcb;
+#define PCB bug-I158_pcb
+#define CHANGE_REDUCTION(x) bug-I158_change_reduction(bug-I158_##x##_token)
+int bug-I158_change_reduction(bug-I158_token_type);
+
+
+#ifndef CONVERT_CASE
+#define CONVERT_CASE(c) (c)
+#endif
+#ifndef TAB_SPACING
+#define TAB_SPACING 8
+#endif
+
+#define ag_rp_1(x, e) (x*pow(10,e))
+
+#define ag_rp_2(x, e) (x*pow(10,-e))
+
+#define ag_rp_3(i, f) (i+f)
+
+#define ag_rp_4(f) (f)
+
+#define ag_rp_5(d) (d-'0')
+
+#define ag_rp_6(x, d) (10*x + d-'0')
+
+#define ag_rp_7(d) ((d-'0')/10.)
+
+#define ag_rp_8(d, f) ((d-'0' + f)/10.)
+
+#define ag_rp_9(d) (d-'0')
+
+#define ag_rp_10(x, d) (10*x + d-'0')
+
+#define ag_rp_11(c) (pushChar(c), 1)
+
+#define ag_rp_12(k, c) (pushChar(c), k+1)
+
+#define ag_rp_13(k) (strdup(popString(k)))
+
+#define ag_rp_14(k) (pushChar('$'), strdup(popString(k+1)))
+
+#define ag_rp_15(k) (strdup(popString(k)))
+
+#define ag_rp_16(d) (pushChar(d), 1)
+
+#define ag_rp_17(k, d) (pushChar(d), k+1)
+
+#define ag_rp_18(k) (strdup(popString(k)))
+
+#define ag_rp_19(k) (strdup(popString(k)))
+
+static void ag_rp_20(void) {
+/* Line -, bug-I158.syn */
+if (errorlevel<=ERROR) {YYABORT;}
+}
+
+static void ag_rp_21(void) {
+/* Line -, bug-I158.syn */
+yylineno+=$3;
+}
+
+static void ag_rp_22(void) {
+/* Line -, bug-I158.syn */
+create_goto($2);
+}
+
+static void ag_rp_23(void) {
+/* Line -, bug-I158.syn */
+create_gosub($2);
+}
+
+static void ag_rp_24(void) {
+/* Line -, bug-I158.syn */
+create_exception(TRUE);
+}
+
+static void ag_rp_25(void) {
+/* Line -, bug-I158.syn */
+create_exception(FALSE);
+}
+
+static void ag_rp_26(void) {
+/* Line -, bug-I158.syn */
+create_skipper();
+}
+
+static void ag_rp_27(void) {
+/* Line -, bug-I158.syn */
+create_nop();
+}
+
+static void ag_rp_28(void) {
+/* Line -, bug-I158.syn */
+create_skipper();
+}
+
+static void ag_rp_29(void) {
+/* Line -, bug-I158.syn */
+create_nop();
+}
+
+static void ag_rp_30(void) {
+/* Line -, bug-I158.syn */
+create_label($2);
+}
+
+static void ag_rp_31(void) {
+/* Line -, bug-I158.syn */
+create_myopen($2,'+');
+}
+
+static void ag_rp_32(void) {
+/* Line -, bug-I158.syn */
+create_myopen($2,'-');
+}
+
+static void ag_rp_33(void) {
+/* Line -, bug-I158.syn */
+create_myclose($2);
+}
+
+static void ag_rp_34(void) {
+/* Line -, bug-I158.syn */
+create_revert(FALSE);
+}
+
+static void ag_rp_35(void) {
+/* Line -, bug-I158.syn */
+lastinput->args=0;
+}
+
+static void ag_rp_36(void) {
+/* Line -, bug-I158.syn */
+create_restore("");
+}
+
+static void ag_rp_37(void) {
+/* Line -, bug-I158.syn */
+create_restore($2);
+}
+
+static void ag_rp_38(void) {
+/* Line -, bug-I158.syn */
+create_return();
+}
+
+static void ag_rp_39(void) {
+/* Line -, bug-I158.syn */
+create_openwin(FALSE);
+}
+
+static void ag_rp_40(void) {
+/* Line -, bug-I158.syn */
+create_openwin(TRUE);
+}
+
+static void ag_rp_41(void) {
+/* Line -, bug-I158.syn */
+create_dot();
+}
+
+static void ag_rp_42(void) {
+/* Line -, bug-I158.syn */
+create_line('l');
+}
+
+static void ag_rp_43(void) {
+/* Line -, bug-I158.syn */
+create_circle()
+}
+
+static void ag_rp_44(void) {
+/* Line -, bug-I158.syn */
+create_text(TRUE);
+}
+
+static void ag_rp_45(void) {
+/* Line -, bug-I158.syn */
+create_text(FALSE);
+}
+
+static void ag_rp_46(void) {
+/* Line -, bug-I158.syn */
+create_makemap();
+}
+
+static void ag_rp_47(void) {
+/* Line -, bug-I158.syn */
+create_line('a');
+}
+
+static void ag_rp_48(void) {
+/* Line -, bug-I158.syn */
+create_tick(1);
+}
+
+static void ag_rp_49(void) {
+/* Line -, bug-I158.syn */
+create_tick(3);
+}
+
+static void ag_rp_50(void) {
+/* Line -, bug-I158.syn */
+create_tick(0);
+}
+
+static void ag_rp_51(void) {
+/* Line -, bug-I158.syn */
+create_tick(2);
+}
+
+static void ag_rp_52(void) {
+/* Line -, bug-I158.syn */
+create_closewin();
+}
+
+static void ag_rp_53(void) {
+/* Line -, bug-I158.syn */
+create_clearwin();
+}
+
+static void ag_rp_54(void) {
+/* Line -, bug-I158.syn */
+create_clearscreen();
+}
+
+static void ag_rp_55(void) {
+/* Line -, bug-I158.syn */
+create_openprinter(0);
+}
+
+static void ag_rp_56(void) {
+/* Line -, bug-I158.syn */
+create_openprinter(1);
+}
+
+static void ag_rp_57(void) {
+/* Line -, bug-I158.syn */
+create_closeprinter();
+}
+
+static void ag_rp_58(void) {
+/* Line -, bug-I158.syn */
+create_mywait();
+}
+
+static void ag_rp_59(void) {
+/* Line -, bug-I158.syn */
+create_bell();
+}
+
+static void ag_rp_60(void) {
+/* Line -, bug-I158.syn */
+create_function(MYINKEY); create_popstrsym(NULL);
+}
+
+static void ag_rp_61(void) {
+/* Line -, bug-I158.syn */
+create_function(MYSYSTEM2);
+	create_popdblsym(NULL);
+}
+
+static void ag_rp_62(void) {
+/* Line -, bug-I158.syn */
+create_poke('s');
+}
+
+static void ag_rp_63(void) {
+/* Line -, bug-I158.syn */
+create_poke('d');
+}
+
+static void ag_rp_64(void) {
+/* Line -, bug-I158.syn */
+create_myend();
+}
+
+static void ag_rp_65(void) {
+/* Line -, bug-I158.syn */
+create_popstrsym($1);
+}
+
+static void ag_rp_66(void) {
+/* Line -, bug-I158.syn */
+create_pushstrptr($3);
+}
+
+static void ag_rp_67(void) {
+/* Line -, bug-I158.syn */
+create_changestring(MYMID);
+}
+
+static void ag_rp_68(void) {
+/* Line -, bug-I158.syn */
+create_pushstrptr($3);
+}
+
+static void ag_rp_69(void) {
+/* Line -, bug-I158.syn */
+create_changestring(MYLEFT);
+}
+
+static void ag_rp_70(void) {
+/* Line -, bug-I158.syn */
+create_pushstrptr($3);
+}
+
+static void ag_rp_71(void) {
+/* Line -, bug-I158.syn */
+create_changestring(MYRIGHT);
+}
+
+static void ag_rp_72(void) {
+/* Line -, bug-I158.syn */
+pushcounter();
+}
+
+static void ag_rp_73(void) {
+/* Line -, bug-I158.syn */
+create_doarray($1,ASSIGNSTRINGARRAY);
+}
+
+static void ag_rp_74(void) {
+/* Line -, bug-I158.syn */
+pushcounter();
+}
+
+static void ag_rp_75(void) {
+/* Line -, bug-I158.syn */
+create_doarray($3,GETSTRINGPOINTER);
+}
+
+static void ag_rp_76(void) {
+/* Line -, bug-I158.syn */
+create_changestring(MYMID);
+}
+
+static void ag_rp_77(void) {
+/* Line -, bug-I158.syn */
+pushcounter();
+}
+
+static void ag_rp_78(void) {
+/* Line -, bug-I158.syn */
+create_doarray($3,GETSTRINGPOINTER);
+}
+
+static void ag_rp_79(void) {
+/* Line -, bug-I158.syn */
+create_changestring(MYLEFT);
+}
+
+static void ag_rp_80(void) {
+/* Line -, bug-I158.syn */
+pushcounter();
+}
+
+static void ag_rp_81(void) {
+/* Line -, bug-I158.syn */
+create_doarray($3,GETSTRINGPOINTER);
+}
+
+static void ag_rp_82(void) {
+/* Line -, bug-I158.syn */
+create_changestring(MYRIGHT);
+}
+
+static void ag_rp_83(void) {
+/* Line -, bug-I158.syn */
+create_pushstrsym($1);
+}
+
+static void ag_rp_84(void) {
+/* Line -, bug-I158.syn */
+if ($1==NULL) {error(ERROR,"String not terminated");create_pushstr("");} else {create_pushstr($1);}
+}
+
+static void ag_rp_85(void) {
+/* Line -, bug-I158.syn */
+create_concat();
+}
+
+static void ag_rp_86(void) {
+/* Line -, bug-I158.syn */
+pushcounter();
+}
+
+static void ag_rp_87(void) {
+/* Line -, bug-I158.syn */
+create_doarray($1,CALLSTRINGARRAY);
+}
+
+static void ag_rp_88(void) {
+/* Line -, bug-I158.syn */
+create_function(MYLEFT);
+}
+
+static void ag_rp_89(void) {
+/* Line -, bug-I158.syn */
+create_function(MYRIGHT);
+}
+
+static void ag_rp_90(void) {
+/* Line -, bug-I158.syn */
+create_function(MYMID);
+}
+
+static void ag_rp_91(void) {
+/* Line -, bug-I158.syn */
+create_function(MYSTR);
+}
+
+static void ag_rp_92(void) {
+/* Line -, bug-I158.syn */
+create_function(MYSTR2);
+}
+
+static void ag_rp_93(void) {
+/* Line -, bug-I158.syn */
+create_function(MYINKEY);
+}
+
+static void ag_rp_94(void) {
+/* Line -, bug-I158.syn */
+create_function(MYCHR);
+}
+
+static void ag_rp_95(void) {
+/* Line -, bug-I158.syn */
+create_function(MYUPPER);
+}
+
+static void ag_rp_96(void) {
+/* Line -, bug-I158.syn */
+create_function(MYLOWER);
+}
+
+static void ag_rp_97(void) {
+/* Line -, bug-I158.syn */
+create_function(MYLTRIM);
+}
+
+static void ag_rp_98(void) {
+/* Line -, bug-I158.syn */
+create_function(MYRTRIM);
+}
+
+static void ag_rp_99(void) {
+/* Line -, bug-I158.syn */
+create_function(MYTRIM);
+}
+
+static void ag_rp_100(void) {
+/* Line -, bug-I158.syn */
+create_function(MYSYSTEM);
+}
+
+static void ag_rp_101(void) {
+/* Line -, bug-I158.syn */
+create_function(MYDATE);
+}
+
+static void ag_rp_102(void) {
+/* Line -, bug-I158.syn */
+create_function(MYTIME);
+}
+
+static void ag_rp_103(void) {
+/* Line -, bug-I158.syn */
+create_function(MYPEEK2);
+}
+
+static void ag_rp_104(void) {
+/* Line -, bug-I158.syn */
+create_popdblsym($1);
+}
+
+static void ag_rp_105(void) {
+/* Line -, bug-I158.syn */
+pushcounter();
+}
+
+static void ag_rp_106(void) {
+/* Line -, bug-I158.syn */
+create_doarray($1,ASSIGNARRAY);
+}
+
+static void ag_rp_107(void) {
+/* Line -, bug-I158.syn */
+create_pushdbl($1);
+}
+
+static void ag_rp_108(void) {
+/* Line -, bug-I158.syn */
+create_pushdblsym($1);
+}
+
+static void ag_rp_109(void) {
+/* Line -, bug-I158.syn */
+pushcounter();
+}
+
+static void ag_rp_110(void) {
+/* Line -, bug-I158.syn */
+create_doarray($1,CALLARRAY);
+}
+
+static void ag_rp_111(void) {
+/* Line -, bug-I158.syn */
+create_dblbin('+');
+}
+
+static void ag_rp_112(void) {
+/* Line -, bug-I158.syn */
+create_dblbin('-');
+}
+
+static void ag_rp_113(void) {
+/* Line -, bug-I158.syn */
+create_dblbin('*');
+}
+
+static void ag_rp_114(void) {
+/* Line -, bug-I158.syn */
+create_dblbin('/');
+}
+
+static void ag_rp_115(void) {
+/* Line -, bug-I158.syn */
+create_dblbin('^');
+}
+
+static void ag_rp_116(void) {
+/* Line -, bug-I158.syn */
+create_negate();
+}
+
+static void ag_rp_117(void) {
+/* Line -, bug-I158.syn */
+create_map();
+}
+
+static void ag_rp_118(void) {
+/* Line -, bug-I158.syn */
+create_function(MYSIN);
+}
+
+static void ag_rp_119(void) {
+/* Line -, bug-I158.syn */
+create_function(MYASIN);
+}
+
+static void ag_rp_120(void) {
+/* Line -, bug-I158.syn */
+create_function(MYCOS);
+}
+
+static void ag_rp_121(void) {
+/* Line -, bug-I158.syn */
+create_function(MYACOS);
+}
+
+static void ag_rp_122(void) {
+/* Line -, bug-I158.syn */
+create_function(MYTAN);
+}
+
+static void ag_rp_123(void) {
+/* Line -, bug-I158.syn */
+create_function(MYATAN);
+}
+
+static void ag_rp_124(void) {
+/* Line -, bug-I158.syn */
+create_function(MYATAN2);
+}
+
+static void ag_rp_125(void) {
+/* Line -, bug-I158.syn */
+create_function(MYEXP);
+}
+
+static void ag_rp_126(void) {
+/* Line -, bug-I158.syn */
+create_function(MYLOG);
+}
+
+static void ag_rp_127(void) {
+/* Line -, bug-I158.syn */
+create_function(MYSQRT);
+}
+
+static void ag_rp_128(void) {
+/* Line -, bug-I158.syn */
+create_function(MYINT);
+}
+
+static void ag_rp_129(void) {
+/* Line -, bug-I158.syn */
+create_function(MYFRAC);
+}
+
+static void ag_rp_130(void) {
+/* Line -, bug-I158.syn */
+create_function(MYMOD);
+}
+
+static void ag_rp_131(void) {
+/* Line -, bug-I158.syn */
+create_function(MYRAN);
+}
+
+static void ag_rp_132(void) {
+/* Line -, bug-I158.syn */
+create_function(MYRAN2);
+}
+
+static void ag_rp_133(void) {
+/* Line -, bug-I158.syn */
+create_function(MYMIN);
+}
+
+static void ag_rp_134(void) {
+/* Line -, bug-I158.syn */
+create_function(MYMAX);
+}
+
+static void ag_rp_135(void) {
+/* Line -, bug-I158.syn */
+create_function(MYXMAP);
+}
+
+static void ag_rp_136(void) {
+/* Line -, bug-I158.syn */
+create_function(MYYMAP);
+}
+
+static void ag_rp_137(void) {
+/* Line -, bug-I158.syn */
+create_function(MYLEN);
+}
+
+static void ag_rp_138(void) {
+/* Line -, bug-I158.syn */
+create_function(MYVAL);
+}
+
+static void ag_rp_139(void) {
+/* Line -, bug-I158.syn */
+create_function(MYASC);
+}
+
+static void ag_rp_140(void) {
+/* Line -, bug-I158.syn */
+create_function(MYINSTR);
+}
+
+static void ag_rp_141(void) {
+/* Line -, bug-I158.syn */
+create_function(MYSYSTEM2);
+}
+
+static void ag_rp_142(void) {
+/* Line -, bug-I158.syn */
+create_function(MYPEEK);
+}
+
+static double ag_rp_143(void) {
+/* Line -, bug-I158.syn */
+$$=$1;
+}
+
+static double ag_rp_144(void) {
+/* Line -, bug-I158.syn */
+$$=$2;
+}
+
+static double ag_rp_145(void) {
+/* Line -, bug-I158.syn */
+$$=-$2;
+}
+
+static double ag_rp_146(void) {
+/* Line -, bug-I158.syn */
+$$=$1;
+}
+
+static double ag_rp_147(void) {
+/* Line -, bug-I158.syn */
+$$=atoi($1);
+}
+
+static int ag_rp_148(void) {
+/* Line -, bug-I158.syn */
+$$=atoi($1);
+}
+
+static char * ag_rp_149(void) {
+/* Line -, bug-I158.syn */
+$$=$1;
+}
+
+static char * ag_rp_150(void) {
+/* Line -, bug-I158.syn */
+$$=$1;
+}
+
+static void ag_rp_151(void) {
+/* Line -, bug-I158.syn */
+pushcounter();
+}
+
+static void ag_rp_152(void) {
+/* Line -, bug-I158.syn */
+create_dim($1,'d');
+}
+
+static void ag_rp_153(void) {
+/* Line -, bug-I158.syn */
+pushcounter();
+}
+
+static void ag_rp_154(void) {
+/* Line -, bug-I158.syn */
+create_dim($3,'d');
+}
+
+static void ag_rp_155(void) {
+/* Line -, bug-I158.syn */
+pushcounter();
+}
+
+static void ag_rp_156(void) {
+/* Line -, bug-I158.syn */
+create_dim($1,'s');
+}
+
+static void ag_rp_157(void) {
+/* Line -, bug-I158.syn */
+pushcounter();
+}
+
+static void ag_rp_158(void) {
+/* Line -, bug-I158.syn */
+create_dim($3,'s');
+}
+
+static void ag_rp_159(void) {
+/* Line -, bug-I158.syn */
+inccounter();
+}
+
+static void ag_rp_160(void) {
+/* Line -, bug-I158.syn */
+inccounter();
+}
+
+static void ag_rp_161(void) {
+/* Line -, bug-I158.syn */
+pushname($2);create_popdblsym($2);pushgoto();
+             create_pushdblsym($2);
+}
+
+static void ag_rp_162(void) {
+/* Line -, bug-I158.syn */
+	     create_dblrelop(($8>0)?'{':'}');
+             create_decide();
+             pushlabel();
+}
+
+static void ag_rp_163(void) {
+/* Line -, bug-I158.syn */
+yylineno+=$10;
+}
+
+static void ag_rp_164(void) {
+/* Line -, bug-I158.syn */
+             create_pushdbl($8);
+	     create_pushdblsym($2);
+             create_dblbin('+');
+	     create_popdblsym($2);
+             swap();popgoto();poplabel();
+}
+
+static void ag_rp_165(void) {
+/* Line -, bug-I158.syn */
+end_of_file=TRUE;
+	    error(ERROR,"'next'-statement is missing"); YYABORT;
+}
+
+static double ag_rp_166(void) {
+/* Line -, bug-I158.syn */
+$$=1.0;
+}
+
+static double ag_rp_167(void) {
+/* Line -, bug-I158.syn */
+$$=$2;
+}
+
+static void ag_rp_168(void) {
+/* Line -, bug-I158.syn */
+pop();
+}
+
+static void ag_rp_169(void) {
+/* Line -, bug-I158.syn */
+if (strcmp(pop()->pointer,$1))
+             {error(ERROR,"'for' and 'next' do not match"); YYABORT;}
+           
+}
+
+static void ag_rp_170(void) {
+/* Line -, bug-I158.syn */
+create_decide();pushlabel();
+}
+
+static void ag_rp_171(void) {
+/* Line -, bug-I158.syn */
+pushlabel();swap();poplabel();
+}
+
+static void ag_rp_172(void) {
+/* Line -, bug-I158.syn */
+poplabel();
+}
+
+static void ag_rp_173(void) {
+/* Line -, bug-I158.syn */
+end_of_file=TRUE;
+            error(ERROR,"'endif'-statement is missing"); YYABORT;
+}
+
+static void ag_rp_174(void) {
+/* Line -, bug-I158.syn */
+create_boole('|');
+}
+
+static void ag_rp_175(void) {
+/* Line -, bug-I158.syn */
+create_boole('&');
+}
+
+static void ag_rp_176(void) {
+/* Line -, bug-I158.syn */
+create_boole('!');
+}
+
+static void ag_rp_177(void) {
+/* Line -, bug-I158.syn */
+create_strrelop('=');
+}
+
+static void ag_rp_178(void) {
+/* Line -, bug-I158.syn */
+create_strrelop('!');
+}
+
+static void ag_rp_179(void) {
+/* Line -, bug-I158.syn */
+create_strrelop('<');
+}
+
+static void ag_rp_180(void) {
+/* Line -, bug-I158.syn */
+create_strrelop('{');
+}
+
+static void ag_rp_181(void) {
+/* Line -, bug-I158.syn */
+create_strrelop('>');
+}
+
+static void ag_rp_182(void) {
+/* Line -, bug-I158.syn */
+create_strrelop('}');
+}
+
+static void ag_rp_183(void) {
+/* Line -, bug-I158.syn */
+create_dblrelop('=');
+}
+
+static void ag_rp_184(void) {
+/* Line -, bug-I158.syn */
+create_dblrelop('!');
+}
+
+static void ag_rp_185(void) {
+/* Line -, bug-I158.syn */
+create_dblrelop('<');
+}
+
+static void ag_rp_186(void) {
+/* Line -, bug-I158.syn */
+create_dblrelop('{');
+}
+
+static void ag_rp_187(void) {
+/* Line -, bug-I158.syn */
+create_dblrelop('>');
+}
+
+static void ag_rp_188(void) {
+/* Line -, bug-I158.syn */
+create_dblrelop('}');
+}
+
+static void ag_rp_189(void) {
+/* Line -, bug-I158.syn */
+create_testeof($3);
+}
+
+static void ag_rp_190(void) {
+/* Line -, bug-I158.syn */
+create_myread('d');create_popdblsym($1);
+}
+
+static void ag_rp_191(void) {
+/* Line -, bug-I158.syn */
+pushcounter();
+}
+
+static void ag_rp_192(void) {
+/* Line -, bug-I158.syn */
+create_myread('d');create_doarray($1,ASSIGNARRAY);
+}
+
+static void ag_rp_193(void) {
+/* Line -, bug-I158.syn */
+create_myread('s');create_popstrsym($1);
+}
+
+static void ag_rp_194(void) {
+/* Line -, bug-I158.syn */
+pushcounter();
+}
+
+static void ag_rp_195(void) {
+/* Line -, bug-I158.syn */
+create_myread('s');create_doarray($1,ASSIGNSTRINGARRAY);
+}
+
+static void ag_rp_196(void) {
+/* Line -, bug-I158.syn */
+create_readdata('d');create_popdblsym($1);
+}
+
+static void ag_rp_197(void) {
+/* Line -, bug-I158.syn */
+pushcounter();
+}
+
+static void ag_rp_198(void) {
+/* Line -, bug-I158.syn */
+create_readdata('d');create_doarray($1,ASSIGNARRAY);
+}
+
+static void ag_rp_199(void) {
+/* Line -, bug-I158.syn */
+create_readdata('s');create_popstrsym($1);
+}
+
+static void ag_rp_200(void) {
+/* Line -, bug-I158.syn */
+pushcounter();
+}
+
+static void ag_rp_201(void) {
+/* Line -, bug-I158.syn */
+create_readdata('s');create_doarray($1,ASSIGNSTRINGARRAY);
+}
+
+static void ag_rp_202(void) {
+/* Line -, bug-I158.syn */
+create_strdata($1);
+}
+
+static void ag_rp_203(void) {
+/* Line -, bug-I158.syn */
+create_dbldata($1);
+}
+
+static void ag_rp_204(void) {
+/* Line -, bug-I158.syn */
+create_strdata($3);
+}
+
+static void ag_rp_205(void) {
+/* Line -, bug-I158.syn */
+create_dbldata($3);
+}
+
+static void ag_rp_206(void) {
+/* Line -, bug-I158.syn */
+create_print('d');
+}
+
+static void ag_rp_207(void) {
+/* Line -, bug-I158.syn */
+create_print('d');
+}
+
+static void ag_rp_208(void) {
+/* Line -, bug-I158.syn */
+create_print('s');
+}
+
+static void ag_rp_209(void) {
+/* Line -, bug-I158.syn */
+create_print('s');
+}
+
+static void ag_rp_210(void) {
+/* Line -, bug-I158.syn */
+create_myswitch(0);create_readline(NULL);
+}
+
+static void ag_rp_211(void) {
+/* Line -, bug-I158.syn */
+create_myswitch(0);create_readline(NULL);
+}
+
+static void ag_rp_212(void) {
+/* Line -, bug-I158.syn */
+create_myswitch(0);
+}
+
+static void ag_rp_213(void) {
+/* Line -, bug-I158.syn */
+create_myswitch(0);
+}
+
+static void ag_rp_214(void) {
+/* Line -, bug-I158.syn */
+create_myswitch(0);
+}
+
+static void ag_rp_215(void) {
+/* Line -, bug-I158.syn */
+create_revert(TRUE);create_myswitch(0);
+}
+
+static void ag_rp_216(void) {
+/* Line -, bug-I158.syn */
+create_myswitch(0);
+}
+
+static void ag_rp_217(void) {
+/* Line -, bug-I158.syn */
+create_revert(TRUE);create_myswitch(0);
+}
+
+static void ag_rp_218(void) {
+/* Line -, bug-I158.syn */
+create_readline($1);
+}
+
+static void ag_rp_219(void) {
+/* Line -, bug-I158.syn */
+create_mymove();
+}
+
+static void ag_rp_220(void) {
+/* Line -, bug-I158.syn */
+create_myswitch($2);
+}
+
+static int ag_rp_221(void) {
+/* Line -, bug-I158.syn */
+$$=$2;
+}
+
+static int ag_rp_222(void) {
+/* Line -, bug-I158.syn */
+$$=$1;
+}
+
+static void ag_rp_223(void) {
+/* Line -, bug-I158.syn */
+create_print('n');
+}
+
+static void ag_rp_224(void) {
+/* Line -, bug-I158.syn */
+create_goto($1);create_findnop();
+}
+
+static void ag_rp_225(void) {
+/* Line -, bug-I158.syn */
+create_goto($3);create_findnop();
+}
+
+static void ag_rp_226(void) {
+/* Line -, bug-I158.syn */
+create_gosub($1);create_findnop();
+}
+
+static void ag_rp_227(void) {
+/* Line -, bug-I158.syn */
+create_gosub($3);create_findnop();
+}
+
+
+#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 bug-I158_vs_type const ag_null_value NULL_VALUE_INITIALIZER;
+
+static const unsigned char ag_rpx[] = {
+    0,  0,  0,  0,  1,  2,  3,  0,  0,  0,  4,  5,  6,  7,  8,  9, 10, 11,
+   12, 13, 14, 15, 16, 17, 18, 19,  0,  0,  0,  0, 20, 21,  0,  0,  0,  0,
+    0,  0, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,  0, 35,  0,
+    0, 36, 37, 38,  0, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51,
+   52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69,
+   70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83,  0, 84, 85, 86,
+   87,  0, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99,100,101,102,103,
+  104,105,106,107,  0,108,109,110,  0,111,112,113,114,115,116,  0,117,118,
+  119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,
+  137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,
+  155,156,157,158,159,160,161,162,163,164,  0,  0,165,166,167,168,169,170,
+  171,172,  0,  0,173,  0,174,175,176,177,178,179,180,181,182,183,184,185,
+  186,187,188,189,  0,  0,  0,  0,190,191,192,193,194,195,  0,  0,196,197,
+  198,199,200,201,202,203,204,205,  0,206,207,208,209,210,  0,211,212,  0,
+  213,  0,214,  0,215,216,217,218,219,220,221,222,223,  0,224,225,226,227
+};
+
+static const unsigned char ag_key_itt[] = {
+ 0
+};
+
+static const unsigned short ag_key_pt[] = {
+0
+};
+
+static const unsigned char ag_key_ch[] = {
+    0, 83, 84,255, 79,255, 70, 71,255, 83, 84,255, 79,255, 71, 83, 84,255,
+   84,255, 83, 84,255, 79,255, 71,255, 83,255, 78,255
+};
+
+static const unsigned char ag_key_act[] = {
+  0,3,3,4,2,4,3,2,4,3,3,4,2,4,2,3,3,4,3,4,3,3,4,2,4,2,4,3,4,3,4
+};
+
+static const unsigned char ag_key_parm[] = {
+    0,135,134,  0,  0,  0,176,  0,  0,135,134,  0,  0,  0,  0,184,153,  0,
+  153,  0,135,134,  0,  0,  0,  0,  0,184,  0,183,  0
+};
+
+static const unsigned char ag_key_jmp[] = {
+    0,  3,  6,  0,  1,  0,  0,  4,  0,  8, 11,  0,  9,  0, 12, 13, 17,  0,
+   19,  0, 21, 24,  0, 20,  0, 23,  0, 26,  0, 30,  0
+};
+
+static const unsigned char ag_key_index[] = {
+    0,  0,  0,  0,  6,  6,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+    0,  0, 14,  0, 14, 14, 14,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+    0,  0,  0,  0,  0,  0,  0,  0, 14,  0,  0,  0,  0,  0,  0,  0, 14,  0,
+    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 18,
+    0,  0,  0,  0,  0, 18,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+    0,  0,  0,  0,  0,  0,  0,  0, 25,  0, 14, 14,  0,  0,  0,  0,  0,  0,
+    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 14,  0,  0,  0,  0,
+    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+    0,  0,  0,  0, 14, 14, 14, 14, 14,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+    0, 18,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 18,  0,  0,  0,
+    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+   14, 14,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 18,  0,  0,  0,
+    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+    0,  0,  0, 27,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+    0,  0,  0,  0,  0,  0,  0,  0, 18,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 29,  0,  0,  0,  0, 29,  0,
+    0,  0,  0,  0,  0,  0,  0,  0,  0
+};
+
+static const unsigned char ag_key_ends[] = {
+79,82,0, 85,66,0, 79,0, 85,66,0, 79,0, 84,69,80,0, 79,0, 
+79,0, 85,66,0, 79,0, 84,69,80,0, 69,88,84,0, 
+};
+#define AG_TCV(x) (((int)(x) >= -1 && (int)(x) <= 255) ? ag_tcv[(x) + 1] : 0)
+
+static const unsigned char ag_tcv[] = {
+  125,125,  0,  0,  0,  0,  0,  0,  0,  0,  0, 32,  0,  0,  0,  0,  0,  0,
+    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 30,
+  202, 26,  0,  0,  0,154,155,118, 12,141, 15, 17,119, 20, 20, 20, 20, 20,
+   20, 20, 20, 20, 20,  0,203,  0,  0,  0,  0,  0,204,204,204,204, 11,204,
+  204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,
+  204,204,  0,  0,  0,120,  0,  0,204,204,204,204, 11,204,204,204,204,204,
+  204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,  0,  0,
+    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+    0,  0,  0,  0,  0
+};
+
+#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
+
+
+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;
+
+#ifndef GET_INPUT
+#define GET_INPUT ((PCB).input_code = getchar())
+#endif
+
+
+static int ag_look_ahead(void) {
+  if ((PCB).rx < (PCB).fx) {
+    return CONVERT_CASE((PCB).lab[(PCB).rx++]);
+  }
+  GET_INPUT;
+  (PCB).fx++;
+  return CONVERT_CASE((PCB).lab[(PCB).rx++] = (PCB).input_code);
+}
+
+static void ag_get_key_word(int ag_k) {
+  int save_index = (PCB).rx;
+  const  unsigned char *sp;
+  int ag_ch;
+  while (1) {
+    switch (ag_key_act[ag_k]) {
+    case ag_cf_end_key:
+      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 + ag_look_ahead()]) goto ag_fail;
+          (PCB).rx--;
+          (PCB).token_number = (bug-I158_token_type) ag_key_pt[ag_k1 + 1];
+          return;
+        }
+      } while (ag_look_ahead() == ag_ch);
+      goto ag_fail;
+    case ag_end_key:
+      sp = ag_key_ends + ag_key_jmp[ag_k];
+      do {
+        if ((ag_ch = *sp++) == 0) {
+          (PCB).token_number = (bug-I158_token_type) ag_key_parm[ag_k];
+          return;
+        }
+      } while (ag_look_ahead() == ag_ch);
+    case ag_no_match_key:
+ag_fail:
+      (PCB).rx = save_index;
+      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 + (ag_ch = ag_look_ahead())]) break;
+      save_index = --(PCB).rx;
+      (PCB).token_number = (bug-I158_token_type) ag_key_pt[ag_k1+1];
+      break;
+    }
+    case ag_set_key:
+      save_index = (PCB).rx;
+      (PCB).token_number = (bug-I158_token_type) ag_key_parm[ag_k];
+    case ag_jmp_key:
+      ag_k = ag_key_jmp[ag_k];
+      ag_ch = ag_look_ahead();
+      break;
+    case ag_accept_key:
+      (PCB).token_number =  (bug-I158_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 + ag_look_ahead()]) (PCB).rx = save_index;
+      else {
+        (PCB).rx--;
+        (PCB).token_number =  (bug-I158_token_type) ag_key_pt[ag_k1+1];
+      }
+      return;
+    }
+    default:
+      /* not reachable; here to suppress compiler warnings */
+      goto ag_fail;
+    }
+    if (ag_ch <= 255) while (ag_key_ch[ag_k] < ag_ch) ag_k++;
+    if (ag_ch > 255 || ag_key_ch[ag_k] != ag_ch) {
+      (PCB).rx = save_index;
+      return;
+    }
+  }
+}
+
+
+#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 = 0;
+  while (ag_k < (PCB).rx) {
+    int ag_ch = (PCB).lab[ag_k++];
+    switch (ag_ch) {
+    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++;
+    }
+  }
+  ag_k = 0;
+  while ((PCB).rx < (PCB).fx) (PCB).lab[ag_k++] = (PCB).lab[(PCB).rx++];
+  (PCB).fx = ag_k;
+  (PCB).rx = 0;
+}
+
+
+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 = (bug-I158_token_type) (PCB).drt;
+  (PCB).ssx = (PCB).dssx;
+  (PCB).sn = (PCB).dsn;
+  (PCB).drt = -1;
+}
+
+
+static const unsigned char ag_tstt[] = {
+126,125,0,123,124,
+7,0,127,
+125,0,
+7,0,
+204,176,135,134,125,115,112,102,98,97,96,79,78,77,74,73,72,70,69,68,67,65,
+  64,63,62,61,48,47,46,45,44,43,39,35,34,11,0,128,
+204,176,135,134,125,115,112,102,98,97,96,79,78,77,74,73,72,70,69,68,67,65,
+  64,63,62,61,48,47,46,45,44,43,39,35,34,11,0,21,24,25,129,130,131,132,
+  133,
+204,26,20,11,0,
+204,154,117,116,114,113,112,111,110,109,108,107,106,105,104,103,102,101,100,
+  99,98,97,96,95,94,93,92,91,90,89,88,87,86,85,84,83,82,81,80,76,75,54,30,
+  20,17,15,11,0,3,9,10,16,21,24,25,27,28,29,136,142,167,170,185,
+204,11,0,21,24,
+154,60,0,
+154,0,
+154,0,
+154,0,
+154,60,0,
+204,154,117,116,114,111,109,108,107,106,105,103,102,101,98,97,96,30,11,0,21,
+  25,29,142,167,
+154,0,
+204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,
+  76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170,
+66,50,0,
+204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,
+  76,75,74,20,17,15,11,0,3,9,10,16,21,24,27,28,136,152,170,
+204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,
+  76,75,74,20,17,15,11,0,3,9,10,16,21,24,27,28,136,152,170,
+204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,
+  76,75,74,20,17,15,11,0,3,9,10,16,21,24,27,28,136,152,170,
+204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,
+  76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170,
+204,154,117,116,114,113,112,111,110,109,108,107,106,105,104,103,102,101,100,
+  99,98,97,96,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,76,75,74,30,20,
+  17,15,11,0,3,9,10,16,21,24,25,27,28,29,136,142,152,167,170,
+204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,
+  76,75,74,20,17,15,11,0,3,9,10,16,21,24,27,28,136,152,170,
+204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,
+  76,75,74,20,17,15,11,0,3,9,10,16,21,24,27,28,136,152,170,
+204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,
+  76,75,74,20,17,15,11,0,3,9,10,16,21,24,27,28,136,152,170,
+204,11,0,21,24,25,151,
+204,20,11,0,5,21,24,27,28,
+30,20,17,15,12,0,2,3,9,10,16,27,28,29,150,
+204,11,0,21,24,25,149,194,
+204,202,49,30,11,0,147,197,198,199,
+204,203,202,154,141,125,117,116,114,113,112,111,110,109,108,107,106,105,104,
+  103,102,101,100,99,98,97,96,95,94,93,92,91,90,88,87,86,85,84,83,82,81,
+  80,76,75,51,49,30,20,17,15,11,0,143,197,198,
+202,71,66,20,0,4,6,27,28,
+202,71,66,20,0,4,6,27,28,
+204,20,11,0,5,21,24,27,28,
+204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,
+  76,75,36,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170,
+204,20,11,0,5,21,24,27,28,
+204,20,11,0,5,21,24,27,28,
+203,184,155,153,141,135,134,125,120,119,118,60,59,58,57,56,55,53,52,40,20,
+  17,15,12,11,7,0,
+20,0,18,
+203,184,155,153,141,135,134,125,120,119,118,60,59,58,57,56,55,53,52,40,20,
+  17,15,12,11,7,0,19,
+20,0,
+11,0,
+154,0,
+154,0,
+154,0,
+154,0,
+154,0,
+154,0,
+154,0,
+154,0,
+154,0,
+154,0,
+154,0,
+154,0,
+154,0,
+154,0,
+154,0,
+154,0,
+154,0,
+154,0,
+154,0,
+154,0,
+154,0,
+154,0,
+154,0,
+31,0,
+154,0,
+154,0,
+154,0,
+154,0,
+154,0,
+154,0,
+154,0,
+154,0,
+154,0,
+154,0,
+154,0,
+154,0,
+204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,
+  76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170,
+154,0,
+154,0,
+154,0,
+120,119,118,60,59,58,57,56,55,15,12,0,
+60,59,58,57,56,55,12,0,
+204,154,117,116,114,113,112,111,110,109,108,107,106,105,104,103,102,101,100,
+  99,98,97,96,95,94,93,92,91,90,89,88,87,86,85,84,83,82,81,80,76,75,54,30,
+  20,17,15,11,0,3,9,10,16,21,24,25,27,28,29,136,142,167,170,185,
+204,154,117,116,114,113,112,111,110,109,108,107,106,105,104,103,102,101,100,
+  99,98,97,96,95,94,93,92,91,90,89,88,87,86,85,84,83,82,81,80,76,75,54,30,
+  20,17,15,11,0,3,9,10,16,21,24,25,27,28,29,136,142,167,170,185,
+53,52,40,0,186,
+204,20,11,0,
+60,0,
+204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,
+  76,75,20,17,15,11,0,169,
+204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,
+  76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170,
+204,11,0,21,25,
+204,11,0,21,25,
+204,11,0,21,25,
+204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,
+  76,75,20,17,15,11,0,159,
+204,154,117,116,114,111,109,108,107,106,105,103,102,101,98,97,96,30,11,0,21,
+  25,29,142,167,
+204,26,20,11,0,
+204,154,117,116,114,111,109,108,107,106,105,103,102,101,98,97,96,30,11,0,21,
+  25,29,142,167,
+141,12,0,
+204,154,117,116,114,111,109,108,107,106,105,103,102,101,98,97,96,30,11,0,21,
+  25,29,142,167,
+204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,
+  76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170,
+120,119,118,15,12,0,
+154,0,
+141,120,119,118,15,12,0,
+141,0,
+141,0,
+153,0,
+141,120,119,118,15,12,0,
+141,0,
+204,154,117,116,114,113,112,111,110,109,108,107,106,105,104,103,102,101,100,
+  99,98,97,96,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,76,75,30,20,17,
+  15,11,0,3,9,10,16,21,24,25,27,28,29,136,142,167,170,
+141,12,0,
+141,0,
+153,0,
+154,0,
+154,0,
+141,0,
+20,17,0,3,9,10,16,27,28,
+20,17,0,3,9,10,16,27,28,
+141,0,
+154,0,
+154,0,
+141,0,
+154,0,
+20,0,4,27,28,
+30,0,29,200,
+204,30,11,0,201,
+204,11,0,21,24,25,148,191,
+49,0,198,
+204,203,154,141,125,117,116,114,113,112,111,110,109,108,107,106,105,104,103,
+  102,101,100,99,98,97,96,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,76,
+  75,30,20,17,15,11,0,3,9,10,16,21,24,25,27,28,29,136,142,144,167,170,
+20,0,4,27,28,
+204,154,117,116,114,111,109,108,107,106,105,103,102,101,98,97,96,30,11,0,21,
+  25,29,142,167,
+204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,
+  76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170,
+141,0,
+135,134,120,119,118,15,12,0,
+38,37,0,
+20,0,18,
+20,0,18,
+20,15,12,0,13,
+204,154,117,116,114,111,109,108,107,106,105,103,102,101,98,97,96,30,11,0,21,
+  25,29,142,167,
+204,154,117,116,114,111,109,108,107,106,105,103,102,101,98,97,96,30,11,0,21,
+  25,29,142,167,
+204,154,117,116,114,111,109,108,107,106,105,103,102,101,98,97,96,30,11,0,21,
+  25,29,142,167,
+204,154,117,116,114,111,109,108,107,106,105,103,102,101,98,97,96,30,11,0,21,
+  25,29,142,167,
+204,154,117,116,114,111,109,108,107,106,105,103,102,101,98,97,96,30,11,0,21,
+  25,29,142,167,
+204,154,117,116,114,111,109,108,107,106,105,103,102,101,98,97,96,30,11,0,21,
+  25,29,142,167,
+204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,
+  76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170,
+204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,
+  76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170,
+204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,
+  76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170,
+204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,
+  76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170,
+204,155,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,
+  81,80,76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170,
+204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,
+  76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170,
+204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,
+  76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170,
+204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,
+  76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170,
+204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,
+  76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170,
+204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,
+  76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170,
+204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,
+  76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170,
+204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,
+  76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170,
+204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,
+  76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170,
+204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,
+  76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170,
+204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,
+  76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170,
+204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,
+  76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170,
+204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,
+  76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170,
+32,30,0,
+204,154,117,116,114,111,109,108,107,106,105,103,102,101,98,97,96,30,11,0,21,
+  25,29,142,167,
+204,154,117,116,114,111,109,108,107,106,105,103,102,101,98,97,96,30,11,0,21,
+  25,29,142,167,
+204,154,117,116,114,111,109,108,107,106,105,103,102,101,98,97,96,30,11,0,21,
+  25,29,142,167,
+204,154,117,116,114,111,109,108,107,106,105,103,102,101,98,97,96,30,11,0,21,
+  25,29,142,167,
+204,154,117,116,114,111,109,108,107,106,105,103,102,101,98,97,96,30,11,0,21,
+  25,29,142,167,
+204,154,117,116,114,111,109,108,107,106,105,103,102,101,98,97,96,30,11,0,21,
+  25,29,142,167,
+204,154,117,116,114,111,109,108,107,106,105,103,102,101,98,97,96,30,11,0,21,
+  25,29,142,167,
+204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,
+  76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170,
+204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,
+  76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170,
+204,154,117,116,114,111,109,108,107,106,105,103,102,101,98,97,96,30,11,0,21,
+  25,29,142,167,
+204,154,117,116,114,111,109,108,107,106,105,103,102,101,98,97,96,30,11,0,21,
+  25,29,142,167,
+204,154,117,116,114,111,109,108,107,106,105,103,102,101,98,97,96,30,11,0,21,
+  25,29,142,167,
+120,119,118,0,
+204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,
+  76,75,20,17,15,11,0,171,
+204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,
+  76,75,20,17,15,11,0,168,
+202,20,0,4,6,27,28,
+204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,
+  76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170,
+204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,
+  76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170,
+204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,
+  76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170,
+204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,
+  76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170,
+204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,
+  76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170,
+204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,
+  76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170,
+204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,
+  76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170,
+204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,
+  76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170,
+204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,
+  76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170,
+204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,
+  76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170,
+204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,
+  76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170,
+204,154,117,116,114,111,109,108,107,106,105,103,102,101,98,97,96,30,11,0,21,
+  25,29,142,167,
+204,154,117,116,114,111,109,108,107,106,105,103,102,101,98,97,96,30,11,0,21,
+  25,29,142,167,
+204,154,117,116,114,111,109,108,107,106,105,103,102,101,98,97,96,30,11,0,21,
+  25,29,142,167,
+204,154,117,116,114,111,109,108,107,106,105,103,102,101,98,97,96,30,11,0,21,
+  25,29,142,167,
+204,154,117,116,114,111,109,108,107,106,105,103,102,101,98,97,96,30,11,0,21,
+  25,29,142,167,
+204,154,117,116,114,111,109,108,107,106,105,103,102,101,98,97,96,30,11,0,21,
+  25,29,142,167,
+204,154,117,116,114,111,109,108,107,106,105,103,102,101,98,97,96,30,11,0,21,
+  25,29,142,167,
+0,
+155,53,52,0,
+155,120,119,118,60,59,58,57,56,55,15,12,0,
+155,60,59,58,57,56,55,12,0,
+204,154,117,116,114,113,112,111,110,109,108,107,106,105,104,103,102,101,100,
+  99,98,97,96,95,94,93,92,91,90,89,88,87,86,85,84,83,82,81,80,76,75,54,30,
+  20,17,15,11,0,3,9,10,16,21,24,25,27,28,29,136,142,167,170,185,
+204,154,117,116,114,113,112,111,110,109,108,107,106,105,104,103,102,101,100,
+  99,98,97,96,95,94,93,92,91,90,89,88,87,86,85,84,83,82,81,80,76,75,54,30,
+  20,17,15,11,0,3,9,10,16,21,24,25,27,28,29,136,142,167,170,185,
+40,0,
+204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,
+  76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170,
+204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,
+  76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,160,170,
+120,119,118,15,12,0,
+154,141,0,158,
+154,141,0,157,
+154,141,0,156,
+204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,
+  76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,160,170,
+12,0,
+155,12,0,
+204,154,117,116,114,113,112,111,110,109,108,107,106,105,104,103,102,101,100,
+  99,98,97,96,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,76,75,30,20,17,
+  15,11,0,3,9,10,16,21,24,25,27,28,29,136,142,167,170,
+155,12,0,
+155,120,119,118,15,12,0,
+204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,
+  76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170,
+204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,
+  76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170,
+204,154,117,116,114,111,109,108,107,106,105,103,102,101,98,97,96,30,11,0,21,
+  25,29,142,167,
+204,154,117,116,114,111,109,108,107,106,105,103,102,101,98,97,96,30,11,0,21,
+  25,29,142,167,
+204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,
+  76,75,74,20,17,15,11,0,3,9,10,16,21,24,27,28,136,152,170,
+204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,
+  76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170,
+204,154,117,116,114,111,109,108,107,106,105,103,102,101,98,97,96,30,11,0,21,
+  25,29,142,167,
+204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,
+  76,75,74,20,17,15,11,0,3,9,10,16,21,24,27,28,136,152,170,
+204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,
+  76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170,
+204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,
+  76,75,74,20,17,15,11,0,3,9,10,16,21,24,27,28,136,152,170,
+204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,
+  76,75,20,17,15,11,0,174,
+204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,
+  76,75,20,17,15,11,0,172,
+204,11,0,21,24,25,
+30,20,17,15,12,0,2,3,9,10,16,27,28,29,
+204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,
+  76,75,20,17,15,11,0,196,
+204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,
+  76,75,20,17,15,11,0,195,
+204,11,0,21,24,25,194,
+204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,
+  76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170,
+30,0,29,200,
+154,0,
+154,0,
+141,0,
+12,0,
+120,119,118,15,12,0,
+203,141,125,0,145,
+12,0,
+141,120,119,118,15,12,0,
+204,154,117,116,114,111,109,108,107,106,105,103,102,101,98,97,96,30,11,0,21,
+  25,29,142,167,
+204,20,11,0,139,
+204,20,11,0,137,
+20,0,14,
+20,0,14,
+155,12,0,
+155,12,0,
+141,12,0,
+155,12,0,
+155,12,0,
+155,12,0,
+155,120,119,118,15,12,0,
+155,120,119,118,15,12,0,
+141,120,119,118,15,12,0,
+141,120,119,118,15,12,0,
+155,120,119,118,15,12,0,
+141,120,119,118,15,12,0,
+155,120,119,118,15,12,0,
+155,120,119,118,15,12,0,
+155,120,119,118,15,12,0,
+155,120,119,118,15,12,0,
+155,120,119,118,15,12,0,
+155,141,120,119,118,15,12,0,
+155,120,119,118,15,12,0,
+155,120,119,118,15,12,0,
+155,120,119,118,15,12,0,
+155,120,119,118,15,12,0,
+155,120,119,118,15,12,0,
+155,12,0,
+155,12,0,
+155,12,0,
+155,12,0,
+155,12,0,
+155,12,0,
+155,12,0,
+155,120,119,118,15,12,0,
+155,141,120,119,118,15,12,0,
+141,12,0,
+141,12,0,
+141,12,0,
+204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,
+  76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,160,170,
+204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,
+  76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,160,170,
+155,0,
+120,119,118,15,12,0,
+120,119,118,15,12,0,
+120,119,118,15,12,0,
+120,119,118,15,12,0,
+120,119,118,15,12,0,
+120,119,118,15,12,0,
+0,
+120,0,
+120,0,
+120,119,118,0,
+120,119,118,0,
+12,0,
+12,0,
+12,0,
+12,0,
+12,0,
+12,0,
+0,
+0,
+52,0,
+126,0,
+153,120,119,118,15,12,0,177,
+120,119,118,15,12,0,
+155,141,0,
+204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,
+  76,75,20,17,15,11,0,165,
+141,0,
+204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,
+  76,75,20,17,15,11,0,163,
+141,0,
+204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,
+  76,75,20,17,15,11,0,161,
+141,0,
+155,141,0,
+120,119,118,15,12,0,
+12,0,
+141,120,119,118,15,12,0,
+120,119,118,15,12,0,
+12,0,
+12,0,
+141,120,119,118,15,12,0,
+12,0,
+120,119,118,15,12,0,
+204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,
+  76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,160,170,
+204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,
+  76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,160,170,
+154,0,
+154,0,
+204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,
+  76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,160,170,
+204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,
+  76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,160,170,
+141,120,119,118,15,12,0,
+204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,
+  76,75,20,17,15,11,0,193,
+204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,
+  76,75,20,17,15,11,0,192,
+204,11,0,21,24,25,148,191,
+204,154,117,116,114,113,112,111,110,109,108,107,106,105,104,103,102,101,100,
+  99,98,97,96,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,76,75,30,20,17,
+  15,11,0,3,9,10,16,21,24,25,27,28,29,136,142,167,170,
+203,125,0,146,
+204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,
+  76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170,
+141,12,0,
+204,20,11,0,5,21,24,27,28,140,
+204,20,11,0,5,21,24,27,28,138,
+20,0,
+20,0,
+204,154,117,116,114,111,109,108,107,106,105,103,102,101,98,97,96,30,11,0,21,
+  25,29,142,167,
+204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,
+  76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170,
+204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,
+  76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170,
+204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,
+  76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170,
+204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,
+  76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170,
+204,154,117,116,114,111,109,108,107,106,105,103,102,101,98,97,96,30,11,0,21,
+  25,29,142,167,
+204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,
+  76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170,
+204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,
+  76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170,
+204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,
+  76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170,
+155,141,0,
+155,141,0,
+42,41,8,0,187,
+153,0,
+204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,
+  76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170,
+60,0,
+204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,
+  76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,160,170,
+204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,
+  76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170,
+204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,
+  76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,160,170,
+204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,
+  76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170,
+204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,
+  76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,160,170,
+204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,
+  76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170,
+60,0,
+204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,
+  76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170,
+204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,
+  76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170,
+155,141,0,
+155,141,0,
+204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,
+  76,75,20,17,15,11,0,175,
+204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,
+  76,75,20,17,15,11,0,173,
+155,141,0,
+155,141,0,
+204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,
+  76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170,
+204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,
+  76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,160,170,
+204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,
+  76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,160,170,
+12,0,
+120,119,118,15,12,0,
+141,120,119,118,15,12,0,
+204,154,117,116,114,111,109,108,107,106,105,103,102,101,98,97,96,30,11,0,21,
+  25,29,142,167,
+141,0,
+141,0,
+155,12,0,
+155,120,119,118,15,12,0,
+155,120,119,118,15,12,0,
+155,120,119,118,15,12,0,
+155,120,119,118,15,12,0,
+155,12,0,
+141,120,119,118,15,12,0,
+155,120,119,118,15,12,0,
+155,120,119,118,15,12,0,
+42,41,8,0,188,
+204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,
+  76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170,
+120,119,118,15,12,0,
+204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,
+  76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170,
+155,141,0,
+155,120,119,118,15,12,0,
+155,141,0,
+155,120,119,118,15,12,0,
+155,141,0,
+141,120,119,118,15,12,0,
+204,154,117,116,114,111,109,108,107,106,105,103,102,101,98,97,96,30,11,0,21,
+  25,29,142,167,
+155,120,119,118,15,12,0,
+141,120,119,118,15,12,0,
+204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,
+  76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,160,170,
+204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,
+  76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,160,170,
+155,120,119,118,15,12,0,
+155,141,0,
+155,141,0,
+204,154,117,116,114,111,109,108,107,106,105,103,102,101,98,97,96,30,11,0,21,
+  25,29,142,167,
+12,0,
+204,20,11,0,5,21,24,27,28,
+204,20,11,0,5,21,24,27,28,
+204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,
+  76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170,
+126,0,
+42,8,0,189,
+184,120,119,118,15,12,7,0,1,
+120,119,118,15,12,0,
+141,0,166,
+60,0,
+141,0,164,
+60,0,
+141,0,162,
+204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,
+  76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170,
+12,0,
+204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,
+  76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170,
+155,141,0,
+155,141,0,
+12,0,
+155,120,119,118,15,12,0,
+42,8,0,190,
+20,17,15,12,0,2,3,9,10,16,27,28,
+7,0,178,
+141,0,
+204,154,117,116,114,111,109,108,107,106,105,103,102,101,98,97,96,30,11,0,21,
+  25,29,142,167,
+141,0,
+204,154,117,116,114,111,109,108,107,106,105,103,102,101,98,97,96,30,11,0,21,
+  25,29,142,167,
+141,0,
+155,120,119,118,15,12,0,
+153,120,119,118,15,12,0,
+7,0,
+204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,
+  76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170,
+12,0,
+204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,
+  76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170,
+12,0,
+204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,
+  76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170,
+60,0,
+204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,
+  76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170,
+126,0,179,
+155,120,119,118,15,12,0,
+155,120,119,118,15,12,0,
+141,120,119,118,15,12,0,
+204,154,117,116,114,111,109,108,107,106,105,103,102,101,98,97,96,30,11,0,21,
+  25,29,142,167,
+141,120,119,118,15,12,0,
+126,0,
+60,0,
+60,0,
+204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,
+  76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170,
+12,0,
+204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,
+  76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170,
+183,8,0,180,
+204,154,117,116,114,111,109,108,107,106,105,103,102,101,98,97,96,30,11,0,21,
+  25,29,142,167,
+204,154,117,116,114,111,109,108,107,106,105,103,102,101,98,97,96,30,11,0,21,
+  25,29,142,167,
+155,120,119,118,15,12,0,
+141,120,119,118,15,12,0,
+183,8,0,181,
+12,0,
+12,0,
+60,0,
+204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,
+  76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170,
+204,125,11,0,21,24,182,
+204,154,117,116,114,111,109,108,107,106,105,103,102,101,98,97,96,30,11,0,21,
+  25,29,142,167,
+141,120,119,118,15,12,0,
+12,0,
+204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,
+  76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170,
+120,119,118,15,12,0,
+
+};
+
+
+static unsigned const char ag_astt[7483] = {
+  1,8,7,0,1,4,7,1,3,7,1,7,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,7,1,2,1,1,1,5,1,1,2,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,
+  1,1,2,1,2,1,1,1,1,1,1,2,7,1,1,1,3,3,3,3,3,10,2,10,10,4,2,1,2,2,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,1,1,1,1,1,1,1,2,
+  7,2,2,1,1,1,1,1,2,1,2,1,1,1,1,1,2,2,7,1,1,1,1,7,1,7,1,7,1,7,1,1,7,2,1,2,2,
+  1,1,1,1,1,1,1,1,2,1,1,1,1,1,2,7,1,1,2,1,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,1,1,2,7,2,2,1,1,1,1,2,1,1,1,2,2,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,2,7,2,2,1,1,1,1,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,1,1,1,1,1,1,2,7,2,2,1,1,1,1,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,1,1,1,1,1,1,2,7,2,2,1,1,
+  1,1,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,1,1,1,1,1,2,7,
+  2,2,1,1,1,1,2,1,1,1,2,1,2,2,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,1,1,1,1,1,1,2,7,2,2,1,1,1,1,1,2,1,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,1,1,1,1,1,1,2,7,2,2,1,1,1,1,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,1,1,1,1,1,1,2,7,2,2,1,
+  1,1,1,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,1,1,1,1,1,1,
+  2,7,2,2,1,1,1,1,2,1,1,2,1,2,2,7,1,1,1,1,2,2,2,4,2,1,2,2,1,1,1,1,1,1,7,2,2,
+  2,1,1,2,1,2,1,2,2,7,1,1,1,1,1,4,1,1,4,4,7,1,1,1,1,4,4,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,4,4,4,1,1,4,4,4,
+  4,4,7,1,1,2,1,2,2,2,7,2,2,2,1,1,1,1,2,7,2,1,2,1,2,2,2,7,2,1,2,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,1,1,1,1,1,1,2,7,2,2,1,1,1,1,2,1,1,1,
+  2,2,2,7,2,1,2,2,1,2,2,2,7,2,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,7,1,7,2,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,10,1,5,5,5,5,
+  7,3,10,4,1,5,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,
+  7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,
+  1,7,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,2,7,2,2,1,
+  1,1,1,2,1,1,1,1,4,1,4,1,7,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,7,2,1,2,2,
+  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,1,1,
+  1,1,1,1,1,2,7,2,2,1,1,1,1,1,2,1,2,1,1,1,1,1,2,1,2,2,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,1,1,1,1,1,1,1,2,7,2,2,1,1,
+  1,1,1,2,1,2,1,1,1,1,1,1,1,4,7,1,10,10,10,4,1,7,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,1,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,2,7,2,2,1,1,1,1,2,1,1,1,2,2,7,1,1,2,2,7,1,1,2,2,7,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,1,2,1,2,2,1,1,1,1,
+  1,1,1,1,2,1,1,1,1,1,2,7,1,1,2,1,1,10,2,10,10,7,2,1,2,2,1,1,1,1,1,1,1,1,2,1,
+  1,1,1,1,2,7,1,1,2,1,1,1,1,7,2,1,2,2,1,1,1,1,1,1,1,1,2,1,1,1,1,1,2,7,1,1,2,
+  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,1,1,1,1,1,2,7,2,2,1,1,1,
+  1,2,1,1,1,1,1,1,1,1,4,1,7,1,1,1,1,1,1,7,1,4,1,4,1,7,1,1,1,1,1,1,7,1,7,2,1,
+  2,2,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,
+  1,1,1,1,1,2,7,2,2,1,1,1,1,1,2,1,2,1,1,1,1,1,1,7,1,7,1,7,1,7,1,7,1,5,1,1,7,
+  2,2,1,1,2,1,1,1,7,2,2,1,1,2,1,1,5,1,4,1,4,1,5,1,7,2,7,2,2,1,1,7,2,3,4,4,4,
+  7,1,2,2,7,1,1,1,2,1,1,4,2,2,5,1,8,5,2,2,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,1,1,1,1,1,2,7,2,2,1,1,1,1,1,2,1,2,1,1,
+  1,1,1,2,7,2,2,1,2,1,2,2,1,1,1,1,1,1,1,1,2,1,1,1,1,1,2,4,1,1,2,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,1,1,1,1,1,2,7,2,2,1,1,1,1,2,1,1,1,1,
+  7,1,1,1,1,1,1,1,7,2,2,7,1,4,2,1,5,2,8,1,1,7,1,2,1,2,2,1,1,1,1,1,1,1,1,2,1,
+  1,1,1,1,2,7,1,1,2,1,1,2,1,2,2,1,1,1,1,1,1,1,1,2,1,1,1,1,1,2,7,1,1,2,1,1,2,
+  1,2,2,1,1,1,1,1,1,1,1,2,1,1,1,1,1,2,7,1,1,2,1,1,2,1,2,2,1,1,1,1,1,1,1,1,2,
+  1,1,1,1,1,2,7,1,1,2,1,1,2,1,2,2,1,1,1,1,1,1,1,1,2,1,1,1,1,1,2,7,1,1,2,1,1,
+  2,1,2,2,1,1,1,1,1,1,1,1,2,1,1,1,1,1,2,7,1,1,2,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,1,1,1,1,1,2,7,2,2,1,1,1,1,2,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,1,1,1,1,1,2,7,2,2,1,1,1,1,2,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,1,1,1,1,1,2,7,2,2,1,1,1,1,2,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,1,1,1,1,1,2,7,2,2,1,1,1,1,2,1,1,1,
+  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,2,7,2,2,1,1,1,1,
+  2,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,1,1,1,1,1,2,7,2,2,1,
+  1,1,1,2,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,1,1,1,1,1,2,7,
+  2,2,1,1,1,1,2,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,1,1,1,1,
+  1,2,7,2,2,1,1,1,1,2,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,1,
+  1,1,1,1,2,7,2,2,1,1,1,1,2,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,1,1,1,1,1,2,7,2,2,1,1,1,1,2,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,1,1,1,1,1,2,7,2,2,1,1,1,1,2,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,1,1,1,1,1,2,7,2,2,1,1,1,1,2,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,1,1,1,1,1,2,7,2,2,1,1,1,1,2,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,1,1,1,1,1,2,7,2,2,1,1,1,1,2,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,1,1,1,1,1,2,7,2,2,1,1,1,1,2,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,1,1,1,1,1,2,7,2,2,1,1,1,1,2,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,1,1,1,1,1,2,7,2,2,1,1,1,1,2,
+  1,1,1,2,2,7,2,1,2,2,1,1,1,1,1,1,1,1,2,1,1,1,1,1,2,7,1,1,2,1,1,2,1,2,2,1,1,
+  1,1,1,1,1,1,2,1,1,1,1,1,2,7,1,1,2,1,1,2,1,2,2,1,1,1,1,1,1,1,1,2,1,1,1,1,1,
+  2,7,1,1,2,1,1,2,1,2,2,1,1,1,1,1,1,1,1,2,1,1,1,1,1,2,7,1,1,2,1,1,2,1,2,2,1,
+  1,1,1,1,1,1,1,2,1,1,1,1,1,2,7,1,1,2,1,1,2,1,2,2,1,1,1,1,1,1,1,1,2,1,1,1,1,
+  1,2,7,1,1,2,1,1,2,1,2,2,1,1,1,1,1,1,1,1,2,1,1,1,1,1,2,7,1,1,2,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,1,1,1,1,1,2,7,2,2,1,1,1,1,2,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,1,1,1,1,1,2,7,2,2,1,1,1,1,2,1,
+  1,1,2,1,2,2,1,1,1,1,1,1,1,1,2,1,1,1,1,1,2,7,1,1,2,1,1,2,1,2,2,1,1,1,1,1,1,
+  1,1,2,1,1,1,1,1,2,7,1,1,2,1,1,2,1,2,2,1,1,1,1,1,1,1,1,2,1,1,1,1,1,2,7,1,1,
+  2,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,4,4,4,4,4,4,4,4,4,7,
+  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,1,1,2,7,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,1,1,1,1,1,2,7,2,2,1,1,1,
+  1,2,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,1,1,1,1,1,2,7,2,2,
+  1,1,1,1,2,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,1,1,1,1,1,2,
+  7,2,2,1,1,1,1,2,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,1,1,1,
+  1,1,2,7,2,2,1,1,1,1,2,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,
+  1,1,1,1,1,2,7,2,2,1,1,1,1,2,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,1,1,1,1,1,2,7,2,2,1,1,1,1,2,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,1,1,1,1,1,2,7,2,2,1,1,1,1,2,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,1,1,1,1,1,2,7,2,2,1,1,1,1,2,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,1,1,1,1,1,2,7,2,2,1,1,1,1,2,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,1,1,1,1,1,2,7,2,2,1,1,1,1,2,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,1,1,1,1,1,2,7,2,2,1,1,1,1,2,1,1,1,2,1,
+  2,2,1,1,1,1,1,1,1,1,2,1,1,1,1,1,2,7,1,1,2,1,1,2,1,2,2,1,1,1,1,1,1,1,1,2,1,
+  1,1,1,1,2,7,1,1,2,1,1,2,1,2,2,1,1,1,1,1,1,1,1,2,1,1,1,1,1,2,7,1,1,2,1,1,2,
+  1,2,2,1,1,1,1,1,1,1,1,2,1,1,1,1,1,2,7,1,1,2,1,1,2,1,2,2,1,1,1,1,1,1,1,1,2,
+  1,1,1,1,1,2,7,1,1,2,1,1,2,1,2,2,1,1,1,1,1,1,1,1,2,1,1,1,1,1,2,7,1,1,2,1,1,
+  2,1,2,2,1,1,1,1,1,1,1,1,2,1,1,1,1,1,2,7,1,1,2,1,1,4,3,1,1,7,3,1,1,1,1,1,1,
+  1,1,1,1,1,7,3,1,1,1,1,1,1,1,7,2,1,2,2,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,1,1,1,1,1,1,1,2,7,2,2,1,1,1,1,1,2,1,2,1,
+  1,1,1,1,2,1,2,2,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,1,1,1,1,1,1,1,2,7,2,2,1,1,1,1,1,2,1,2,1,1,1,1,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,1,1,2,7,2,2,1,1,1,1,2,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,1,1,1,1,1,2,7,2,2,1,1,1,1,2,1,1,
+  1,1,1,1,1,1,1,4,1,4,7,1,1,4,7,1,1,4,7,1,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,2,7,2,2,1,1,1,1,2,1,1,1,1,1,4,3,1,7,2,1,2,2,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,1,1,1,1,1,2,
+  7,2,2,1,1,1,1,1,2,1,2,1,1,1,1,2,1,7,3,1,1,1,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,1,1,2,7,2,2,1,1,1,1,2,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,1,1,1,1,1,2,7,2,2,1,1,1,1,2,1,1,1,2,1,2,2,1,1,
+  1,1,1,1,1,1,2,1,1,1,1,1,2,7,1,1,2,1,1,2,1,2,2,1,1,1,1,1,1,1,1,2,1,1,1,1,1,
+  2,7,1,1,2,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,1,1,1,1,1,1,2,
+  7,2,2,1,1,1,1,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,1,1,
+  1,1,1,2,7,2,2,1,1,1,1,2,1,1,1,2,1,2,2,1,1,1,1,1,1,1,1,2,1,1,1,1,1,2,7,1,1,
+  2,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,1,1,1,1,1,1,2,7,2,2,1,
+  1,1,1,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,1,1,1,1,1,2,
+  7,2,2,1,1,1,1,2,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,1,1,1,
+  1,1,1,2,7,2,2,1,1,1,1,2,1,1,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,7,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,1,2,2,7,1,1,1,1,1,1,1,1,7,2,2,2,1,1,2,1,2,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,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,1,2,2,7,1,1,1,3,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,2,7,2,2,1,1,1,1,2,1,1,1,1,7,2,3,1,4,1,4,1,5,1,4,1,1,1,
+  1,1,4,4,1,4,7,1,1,4,1,1,1,1,1,1,7,2,1,2,2,1,1,1,1,1,1,1,1,2,1,1,1,1,1,2,7,
+  1,1,2,1,1,4,4,4,7,1,4,4,4,7,1,2,7,1,2,7,1,2,1,7,2,1,7,1,1,7,2,1,7,2,1,7,2,
+  1,7,2,1,1,1,1,1,7,2,1,1,1,1,1,7,1,1,1,1,1,1,7,1,1,1,1,1,1,7,2,1,1,1,1,1,7,
+  1,1,1,1,1,1,7,2,1,1,1,1,1,7,2,1,1,1,1,1,7,2,1,1,1,1,1,7,2,1,1,1,1,1,7,2,1,
+  1,1,1,1,7,2,1,1,1,1,1,1,7,2,1,1,1,1,1,7,2,1,1,1,1,1,7,2,1,1,1,1,1,7,2,1,1,
+  1,1,1,7,2,1,1,1,1,1,7,2,1,7,2,1,7,2,1,7,2,1,7,2,1,7,2,1,7,2,1,7,2,1,1,1,1,
+  1,7,2,1,1,1,1,1,1,7,1,1,7,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,1,1,2,7,2,2,1,1,1,1,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,1,1,1,1,1,2,7,2,2,1,1,1,1,2,1,1,1,1,2,7,1,1,1,1,1,4,1,1,
+  1,1,1,4,1,1,1,1,1,4,1,1,1,1,1,4,1,1,1,1,1,4,1,1,1,1,1,4,4,1,4,1,4,1,1,1,4,
+  1,1,1,4,1,4,1,4,1,4,1,4,1,4,1,4,4,4,1,4,1,7,4,1,1,1,1,1,7,1,1,1,1,1,1,4,1,
+  1,7,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,1,1,7,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,1,1,7,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,1,1,7,1,1,7,1,1,1,1,1,4,1,
+  4,1,1,1,1,1,1,7,1,1,1,1,1,5,1,4,1,4,1,1,1,1,1,1,7,1,4,1,1,1,1,1,4,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,2,7,2,2,1,1,1,1,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,1,1,1,1,1,2,7,2,2,1,1,1,1,2,
+  1,1,1,1,1,7,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,2,
+  7,2,2,1,1,1,1,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,1,1,
+  1,1,1,2,7,2,2,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,7,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,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,1,2,2,7,1,1,1,3,1,2,1,2,2,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,1,1,1,1,1,2,7,2,2,1,1,1,1,1,2,1,
+  2,1,1,1,1,3,4,7,3,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,
+  2,7,2,2,1,1,1,1,2,1,1,1,1,1,4,2,2,2,7,2,1,2,2,1,1,2,2,2,7,2,1,2,2,1,1,10,4,
+  10,4,2,1,2,2,1,1,1,1,1,1,1,1,2,1,1,1,1,1,2,7,1,1,2,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,1,1,1,1,1,2,7,2,2,1,1,1,1,2,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,1,1,1,1,1,2,7,2,2,1,1,1,1,2,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,1,1,1,1,1,2,7,2,2,1,1,1,1,2,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,1,1,1,1,1,2,7,2,2,1,1,1,1,2,1,
+  1,1,2,1,2,2,1,1,1,1,1,1,1,1,2,1,1,1,1,1,2,7,1,1,2,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,1,1,1,1,1,2,7,2,2,1,1,1,1,2,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,1,1,1,1,1,2,7,2,2,1,1,1,1,2,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,1,1,1,1,1,2,7,2,2,1,1,1,1,2,1,1,1,2,
+  1,7,2,1,7,4,4,4,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,1,1,2,7,2,2,1,1,1,1,2,1,1,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,1,1,2,7,2,2,1,1,1,1,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,1,1,1,1,1,2,7,2,2,1,1,1,1,2,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,1,1,1,1,1,2,7,2,2,1,1,1,1,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,1,1,1,1,1,2,7,2,2,1,1,1,1,2,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,1,1,1,1,1,2,7,2,2,1,1,1,1,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,1,1,1,1,1,2,7,2,2,1,1,1,1,2,1,1,
+  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,1,1,2,7,2,2,1,1,
+  1,1,2,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,1,1,1,1,1,2,7,2,
+  2,1,1,1,1,2,1,1,1,2,1,7,2,1,7,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,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,1,2,1,7,2,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,
+  2,7,2,2,1,1,1,1,2,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,1,1,
+  1,1,1,2,7,2,2,1,1,1,1,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,1,1,1,1,1,2,7,2,2,1,1,1,1,2,1,1,1,1,1,4,1,1,1,1,1,4,1,1,1,1,1,1,4,2,1,
+  2,2,1,1,1,1,1,1,1,1,2,1,1,1,1,1,2,7,1,1,2,1,1,1,4,1,4,2,1,7,2,1,1,1,1,1,7,
+  2,1,1,1,1,1,7,2,1,1,1,1,1,7,2,1,1,1,1,1,7,2,1,7,1,1,1,1,1,1,7,2,1,1,1,1,1,
+  7,2,1,1,1,1,1,7,5,1,5,7,1,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,2,7,2,2,1,1,1,1,2,1,1,1,1,1,1,1,1,4,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,2,7,2,2,1,1,1,1,2,1,1,1,1,1,7,1,1,1,1,1,1,7,1,1,
+  7,1,1,1,1,1,1,7,1,1,7,1,1,1,1,1,1,7,2,1,2,2,1,1,1,1,1,1,1,1,2,1,1,1,1,1,2,
+  7,1,1,2,1,1,2,1,1,1,1,1,7,1,1,1,1,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,1,1,2,7,2,2,1,1,1,1,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,1,1,1,1,1,2,7,2,2,1,1,1,1,2,1,1,1,1,2,1,1,1,1,1,7,2,1,
+  7,2,1,7,2,1,2,2,1,1,1,1,1,1,1,1,2,1,1,1,1,1,2,7,1,1,2,1,1,1,4,2,2,2,7,2,1,
+  2,2,1,2,2,2,7,2,1,2,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,1,1,
+  1,1,1,2,7,2,2,1,1,1,1,2,1,1,1,3,7,4,4,7,1,1,1,1,1,1,1,4,7,1,1,1,1,1,1,4,4,
+  7,1,1,7,4,7,1,1,7,4,7,1,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,2,7,2,2,1,1,1,1,2,1,1,1,1,4,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,2,7,2,2,1,1,1,1,2,1,1,1,2,1,7,2,1,7,1,4,2,1,1,1,1,1,7,3,2,
+  7,3,1,1,1,1,7,2,2,2,1,1,2,1,4,7,1,1,7,2,1,2,2,1,1,1,1,1,1,1,1,2,1,1,1,1,1,
+  2,7,1,1,2,1,1,1,7,2,1,2,2,1,1,1,1,1,1,1,1,2,1,1,1,1,1,2,7,1,1,2,1,1,1,7,1,
+  1,1,1,1,1,7,1,1,1,1,1,1,7,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,2,7,2,2,1,1,1,1,2,1,1,1,1,4,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,2,7,2,2,1,1,1,1,2,1,1,1,1,4,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,2,7,2,2,1,1,1,1,2,1,1,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,1,1,2,7,2,2,1,1,1,1,2,1,1,1,4,7,1,1,
+  1,1,1,1,1,7,1,1,1,1,1,1,7,1,1,1,1,1,1,7,2,1,2,2,1,1,1,1,1,1,1,1,2,1,1,1,1,
+  1,2,7,1,1,2,1,1,1,1,1,1,1,1,7,1,7,1,7,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,2,7,2,2,1,1,1,1,2,1,1,1,1,4,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,2,7,2,2,1,1,1,1,2,1,1,1,4,4,7,1,2,1,2,2,
+  1,1,1,1,1,1,1,1,2,1,1,1,1,1,2,7,1,1,2,1,1,2,1,2,2,1,1,1,1,1,1,1,1,2,1,1,1,
+  1,1,2,7,1,1,2,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,7,1,2,7,1,1,4,1,4,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,2,7,2,2,1,1,1,1,2,1,1,1,2,
+  4,2,7,1,2,3,2,1,2,2,1,1,1,1,1,1,1,1,2,1,1,1,1,1,2,7,1,1,2,1,1,1,1,1,1,1,1,
+  7,1,4,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,2,7,2,2,1,1,
+  1,1,2,1,1,1,1,1,1,1,1,4
+};
+
+
+static const unsigned short ag_pstt[] = {
+1,2,0,0,2,
+30,1,3,
+28,2,
+4,3,
+31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,
+  31,31,31,31,31,31,31,31,31,31,31,4,5,
+17,8,36,37,33,14,15,80,12,10,11,18,19,20,21,79,16,17,22,23,25,32,33,27,28,
+  29,84,26,57,24,30,31,7,35,34,17,5,6,9,13,32,32,32,32,32,
+18,20,18,18,19,
+17,86,124,123,67,43,44,68,45,70,71,69,72,73,46,74,115,75,51,52,76,77,78,47,
+  48,53,54,55,56,82,57,58,59,60,61,62,63,64,65,49,50,85,66,38,39,79,17,7,
+  129,171,42,40,6,80,81,172,41,105,83,84,84,83,87,
+17,17,8,88,89,
+90,91,9,
+92,10,
+93,11,
+94,12,
+95,96,13,
+17,98,124,123,67,68,70,71,69,72,73,74,115,75,76,77,78,66,17,14,97,81,105,99,
+  99,
+100,15,
+17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50,
+  38,39,79,17,16,129,171,42,40,88,80,172,41,102,102,
+73,74,17,
+17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50,
+  103,38,39,79,17,18,129,171,42,40,88,80,172,41,104,105,104,
+17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50,
+  103,38,39,79,17,19,129,171,42,40,88,80,172,41,104,106,104,
+17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50,
+  103,38,39,79,17,20,129,171,42,40,88,80,172,41,104,107,104,
+17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50,
+  38,39,79,17,21,129,171,42,40,88,80,172,41,108,108,
+17,110,124,123,67,43,44,68,45,70,71,69,72,73,46,74,115,75,51,52,76,77,78,47,
+  48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50,103,66,38,39,79,17,22,
+  129,171,42,40,6,80,81,172,41,105,104,111,109,111,104,
+17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50,
+  103,38,39,79,17,23,129,171,42,40,88,80,172,41,104,112,104,
+17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50,
+  103,38,39,79,17,24,129,171,42,40,88,80,172,41,104,113,104,
+17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50,
+  103,38,39,79,17,25,129,171,42,40,88,80,172,41,104,61,104,
+17,17,26,6,115,114,116,
+17,22,17,55,56,88,175,174,41,
+66,38,39,117,118,28,239,168,171,42,40,172,41,238,119,
+17,17,29,6,121,120,122,122,
+247,124,123,250,247,30,127,127,126,125,
+254,254,124,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,
+  254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,
+  254,254,254,254,254,254,254,128,123,254,254,254,254,254,31,129,129,257,
+130,77,72,22,32,263,49,173,41,
+130,131,132,22,33,263,133,173,41,
+17,22,17,34,46,88,175,174,41,
+17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50,
+  135,38,39,79,17,35,129,171,42,40,88,80,172,41,134,134,
+17,22,17,36,39,88,175,174,41,
+17,22,17,37,38,88,175,174,41,
+11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
+  11,38,
+136,39,10,
+7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,12,137,7,7,7,7,40,9,
+23,21,
+138,1,
+139,43,
+140,44,
+141,45,
+142,46,
+143,47,
+144,48,
+145,49,
+146,50,
+147,51,
+148,52,
+149,53,
+150,54,
+151,55,
+152,56,
+153,57,
+154,58,
+155,59,
+156,60,
+157,61,
+158,62,
+159,63,
+160,64,
+161,65,
+162,66,
+163,67,
+164,68,
+165,69,
+166,70,
+167,71,
+168,72,
+169,73,
+170,74,
+171,75,
+172,76,
+173,77,
+174,78,
+17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50,
+  38,39,79,17,79,129,171,42,40,88,80,172,41,175,175,
+176,131,
+177,103,
+178,82,
+185,186,187,184,180,182,179,181,183,188,189,83,
+195,191,193,190,192,194,196,84,
+17,86,124,123,67,43,44,68,45,70,71,69,72,73,46,74,115,75,51,52,76,77,78,47,
+  48,53,54,55,56,82,57,58,59,60,61,62,63,64,65,49,50,85,66,38,39,79,17,85,
+  129,171,42,40,6,80,81,172,41,105,83,84,84,83,197,
+17,86,124,123,67,43,44,68,45,70,71,69,72,73,46,74,115,75,51,52,76,77,78,47,
+  48,53,54,55,56,82,57,58,59,60,61,62,63,64,65,49,50,85,66,38,39,79,17,86,
+  129,171,42,40,6,80,81,172,41,105,199,200,200,199,198,
+202,201,197,87,203,
+18,18,18,19,
+204,89,
+127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,
+  127,127,127,127,127,127,127,127,127,127,90,205,
+17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50,
+  38,39,79,17,91,129,171,42,40,88,80,172,41,206,206,
+17,17,92,97,207,
+17,17,93,97,208,
+17,17,94,97,209,
+92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,
+  92,92,92,92,95,210,
+17,98,124,123,67,68,70,71,69,72,73,74,115,75,76,77,78,66,17,96,97,81,105,
+  211,211,
+18,20,18,18,97,
+17,98,124,123,67,68,70,71,69,72,73,74,115,75,76,77,78,66,17,98,97,81,105,
+  212,212,
+213,196,99,
+17,98,124,123,67,68,70,71,69,72,73,74,115,75,76,77,78,66,17,100,97,81,105,
+  214,214,
+17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50,
+  38,39,79,17,101,129,171,42,40,88,80,172,41,215,215,
+185,186,187,188,189,78,
+216,103,
+217,185,186,187,188,189,104,
+218,71,
+219,70,
+220,107,
+221,185,186,187,188,189,108,
+222,109,
+17,110,124,123,67,43,44,68,45,70,71,69,72,73,46,74,115,75,51,52,76,77,78,47,
+  48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50,66,38,39,79,17,110,129,
+  171,42,40,6,80,81,172,41,105,215,212,212,215,
+223,196,111,
+224,112,
+225,113,
+226,114,
+227,115,
+228,58,
+38,39,117,170,171,42,40,172,41,
+38,39,118,169,171,42,40,172,41,
+229,54,
+230,235,
+231,232,
+232,53,
+233,123,
+22,124,261,173,41,
+66,125,259,251,
+249,252,249,126,234,
+17,17,127,6,236,235,52,237,
+123,256,258,
+17,242,110,240,242,124,123,67,43,44,68,45,70,71,69,72,73,46,74,115,75,51,52,
+  76,77,78,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50,66,38,39,79,
+  17,129,129,171,42,40,6,80,81,172,41,105,239,238,240,238,239,
+22,130,262,173,41,
+17,98,124,123,67,68,70,71,69,72,73,74,115,75,76,77,78,66,17,75,97,81,105,
+  241,241,
+17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50,
+  38,39,79,17,132,129,171,42,40,88,80,172,41,242,242,
+243,133,
+244,245,185,186,187,188,189,134,
+41,40,135,
+136,13,14,
+136,8,6,
+247,246,247,138,247,
+17,98,124,123,67,68,70,71,69,72,73,74,115,75,76,77,78,66,17,139,97,81,105,
+  248,248,
+17,98,124,123,67,68,70,71,69,72,73,74,115,75,76,77,78,66,17,140,97,81,105,
+  249,249,
+17,98,124,123,67,68,70,71,69,72,73,74,115,75,76,77,78,66,17,141,97,81,105,
+  250,250,
+17,98,124,123,67,68,70,71,69,72,73,74,115,75,76,77,78,66,17,142,97,81,105,
+  251,251,
+17,98,124,123,67,68,70,71,69,72,73,74,115,75,76,77,78,66,17,143,97,81,105,
+  252,252,
+17,98,124,123,67,68,70,71,69,72,73,74,115,75,76,77,78,66,17,144,97,81,105,
+  253,253,
+17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50,
+  38,39,79,17,145,129,171,42,40,88,80,172,41,254,254,
+17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50,
+  38,39,79,17,146,129,171,42,40,88,80,172,41,255,255,
+17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50,
+  38,39,79,17,147,129,171,42,40,88,80,172,41,256,256,
+17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50,
+  38,39,79,17,148,129,171,42,40,88,80,172,41,257,257,
+17,157,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,
+  49,50,38,39,79,17,149,129,171,42,40,88,80,172,41,258,258,
+17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50,
+  38,39,79,17,150,129,171,42,40,88,80,172,41,259,259,
+17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50,
+  38,39,79,17,151,129,171,42,40,88,80,172,41,260,260,
+17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50,
+  38,39,79,17,152,129,171,42,40,88,80,172,41,261,261,
+17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50,
+  38,39,79,17,153,129,171,42,40,88,80,172,41,262,262,
+17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50,
+  38,39,79,17,154,129,171,42,40,88,80,172,41,263,263,
+17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50,
+  38,39,79,17,155,129,171,42,40,88,80,172,41,264,264,
+17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50,
+  38,39,79,17,156,129,171,42,40,88,80,172,41,265,265,
+17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50,
+  38,39,79,17,157,129,171,42,40,88,80,172,41,266,266,
+17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50,
+  38,39,79,17,158,129,171,42,40,88,80,172,41,267,267,
+17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50,
+  38,39,79,17,159,129,171,42,40,88,80,172,41,268,268,
+17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50,
+  38,39,79,17,160,129,171,42,40,88,80,172,41,269,269,
+17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50,
+  38,39,79,17,161,129,171,42,40,88,80,172,41,270,270,
+25,24,162,
+17,98,124,123,67,68,70,71,69,72,73,74,115,75,76,77,78,66,17,163,97,81,105,
+  271,271,
+17,98,124,123,67,68,70,71,69,72,73,74,115,75,76,77,78,66,17,164,97,81,105,
+  272,272,
+17,98,124,123,67,68,70,71,69,72,73,74,115,75,76,77,78,66,17,165,97,81,105,
+  273,273,
+17,98,124,123,67,68,70,71,69,72,73,74,115,75,76,77,78,66,17,166,97,81,105,
+  274,274,
+17,98,124,123,67,68,70,71,69,72,73,74,115,75,76,77,78,66,17,167,97,81,105,
+  275,275,
+17,98,124,123,67,68,70,71,69,72,73,74,115,75,76,77,78,66,17,168,97,81,105,
+  276,276,
+17,98,124,123,67,68,70,71,69,72,73,74,115,75,76,77,78,66,17,169,97,81,105,
+  277,277,
+17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50,
+  38,39,79,17,170,129,171,42,40,88,80,172,41,278,278,
+17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50,
+  38,39,79,17,171,129,171,42,40,88,80,172,41,279,279,
+17,98,124,123,67,68,70,71,69,72,73,74,115,75,76,77,78,66,17,172,97,81,105,
+  280,280,
+17,98,124,123,67,68,70,71,69,72,73,74,115,75,76,77,78,66,17,173,97,81,105,
+  281,281,
+17,98,124,123,67,68,70,71,69,72,73,74,115,75,76,77,78,66,17,174,97,81,105,
+  282,282,
+185,186,187,140,
+132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,
+  132,132,132,132,132,132,132,132,132,132,176,283,
+107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,
+  107,107,107,107,107,107,107,107,107,107,177,284,
+130,22,178,263,285,173,41,
+17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50,
+  38,39,79,17,179,129,171,42,40,88,80,172,41,286,286,
+17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50,
+  38,39,79,17,180,129,171,42,40,88,80,172,41,287,287,
+17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50,
+  38,39,79,17,181,129,171,42,40,88,80,172,41,288,288,
+17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50,
+  38,39,79,17,182,129,171,42,40,88,80,172,41,289,289,
+17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50,
+  38,39,79,17,183,129,171,42,40,88,80,172,41,290,290,
+17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50,
+  38,39,79,17,184,129,171,42,40,88,80,172,41,291,291,
+17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50,
+  38,39,79,17,185,129,171,42,40,88,80,172,41,292,292,
+17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50,
+  38,39,79,17,186,129,171,42,40,88,80,172,41,293,293,
+17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50,
+  38,39,79,17,187,129,171,42,40,88,80,172,41,294,294,
+17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50,
+  38,39,79,17,188,129,171,42,40,88,80,172,41,295,295,
+17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50,
+  38,39,79,17,189,129,171,42,40,88,80,172,41,296,296,
+17,98,124,123,67,68,70,71,69,72,73,74,115,75,76,77,78,66,17,190,97,81,105,
+  297,297,
+17,98,124,123,67,68,70,71,69,72,73,74,115,75,76,77,78,66,17,191,97,81,105,
+  298,298,
+17,98,124,123,67,68,70,71,69,72,73,74,115,75,76,77,78,66,17,192,97,81,105,
+  299,299,
+17,98,124,123,67,68,70,71,69,72,73,74,115,75,76,77,78,66,17,193,97,81,105,
+  300,300,
+17,98,124,123,67,68,70,71,69,72,73,74,115,75,76,77,78,66,17,194,97,81,105,
+  301,301,
+17,98,124,123,67,68,70,71,69,72,73,74,115,75,76,77,78,66,17,195,97,81,105,
+  302,302,
+17,98,124,123,67,68,70,71,69,72,73,74,115,75,76,77,78,66,17,196,97,81,105,
+  303,303,
+206,
+203,202,201,198,
+134,185,186,187,184,180,182,179,181,183,188,189,199,
+109,195,191,193,190,192,194,196,200,
+17,86,124,123,67,43,44,68,45,70,71,69,72,73,46,74,115,75,51,52,76,77,78,47,
+  48,53,54,55,56,82,57,58,59,60,61,62,63,64,65,49,50,85,66,38,39,79,17,
+  201,129,171,42,40,6,80,81,172,41,105,83,84,84,83,304,
+17,86,124,123,67,43,44,68,45,70,71,69,72,73,46,74,115,75,51,52,76,77,78,47,
+  48,53,54,55,56,82,57,58,59,60,61,62,63,64,65,49,50,85,66,38,39,79,17,
+  202,129,171,42,40,6,80,81,172,41,105,83,84,84,83,305,
+306,203,
+17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50,
+  38,39,79,17,204,129,171,42,40,88,80,172,41,307,307,
+17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50,
+  38,39,79,17,205,129,171,42,40,88,80,172,41,308,309,308,
+185,186,187,188,189,126,
+310,90,207,311,
+312,88,208,313,
+314,86,209,315,
+17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50,
+  38,39,79,17,210,129,171,42,40,88,80,172,41,308,316,308,
+196,85,
+109,196,212,
+17,110,124,123,67,43,44,68,45,70,71,69,72,73,46,74,115,75,51,52,76,77,78,47,
+  48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50,66,38,39,79,17,213,129,
+  171,42,40,6,80,81,172,41,105,317,318,318,317,
+81,196,214,
+134,185,186,187,188,189,215,
+17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50,
+  38,39,79,17,216,129,171,42,40,88,80,172,41,319,319,
+17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50,
+  38,39,79,17,217,129,171,42,40,88,80,172,41,320,320,
+17,98,124,123,67,68,70,71,69,72,73,74,115,75,76,77,78,66,17,218,97,81,105,
+  321,321,
+17,98,124,123,67,68,70,71,69,72,73,74,115,75,76,77,78,66,17,219,97,81,105,
+  322,322,
+17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50,
+  103,38,39,79,17,220,129,171,42,40,88,80,172,41,104,67,104,
+17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50,
+  38,39,79,17,221,129,171,42,40,88,80,172,41,323,323,
+17,98,124,123,67,68,70,71,69,72,73,74,115,75,76,77,78,66,17,222,97,81,105,
+  324,324,
+17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50,
+  103,38,39,79,17,223,129,171,42,40,88,80,172,41,104,64,104,
+17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50,
+  38,39,79,17,224,129,171,42,40,88,80,172,41,325,325,
+17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50,
+  103,38,39,79,17,225,129,171,42,40,88,80,172,41,104,62,104,
+180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,
+  180,180,180,180,180,180,180,180,180,180,226,326,
+176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,
+  176,176,176,176,176,176,176,176,176,176,227,327,
+17,17,228,6,329,328,
+66,38,39,117,118,229,241,168,171,42,40,172,41,240,
+236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,
+  236,236,236,236,236,236,236,236,236,236,230,330,
+233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,
+  233,233,233,233,233,233,233,233,233,233,231,331,
+17,17,232,6,121,120,231,
+17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50,
+  38,39,79,17,233,129,171,42,40,88,80,172,41,332,332,
+66,234,259,253,
+333,227,
+334,224,
+335,222,
+196,245,
+185,186,187,188,189,243,
+50,336,50,240,337,
+196,76,
+338,185,186,187,188,189,242,
+17,98,124,123,67,68,70,71,69,72,73,74,115,75,76,77,78,66,17,243,97,81,105,
+  339,339,
+44,44,44,244,340,
+42,42,42,245,341,
+15,246,342,
+15,247,343,
+167,196,248,
+166,196,249,
+344,196,250,
+164,196,251,
+163,196,252,
+162,196,253,
+161,185,186,187,188,189,254,
+160,185,186,187,188,189,255,
+345,185,186,187,188,189,256,
+346,185,186,187,188,189,257,
+156,185,186,187,188,189,258,
+347,185,186,187,188,189,259,
+154,185,186,187,188,189,260,
+153,185,186,187,188,189,261,
+152,185,186,187,188,189,262,
+151,185,186,187,188,189,263,
+150,185,186,187,188,189,264,
+148,348,185,186,187,188,189,265,
+147,185,186,187,188,189,266,
+146,185,186,187,188,189,267,
+145,185,186,187,188,189,268,
+144,185,186,187,188,189,269,
+143,185,186,187,188,189,270,
+125,196,271,
+122,196,272,
+121,196,273,
+120,196,274,
+119,196,275,
+118,196,276,
+117,196,277,
+116,185,186,187,188,189,278,
+113,349,185,186,187,188,189,279,
+350,196,280,
+351,196,281,
+352,196,282,
+17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50,
+  38,39,79,17,283,129,171,42,40,88,80,172,41,308,353,308,
+17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50,
+  38,39,79,17,284,129,171,42,40,88,80,172,41,308,354,308,
+219,285,
+185,186,187,188,189,218,
+185,186,187,188,189,217,
+185,186,187,188,189,216,
+185,186,187,188,189,215,
+185,186,187,188,189,214,
+185,186,187,188,189,213,
+139,
+185,138,
+185,137,
+185,186,187,136,
+185,186,187,135,
+196,212,
+196,211,
+196,210,
+196,209,
+196,208,
+196,207,
+106,
+205,
+201,204,
+355,306,
+186,185,186,187,188,189,307,356,
+185,186,187,188,189,184,
+358,357,309,
+100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,
+  100,100,100,100,100,100,100,100,100,100,310,359,
+360,311,
+97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,
+  97,97,97,97,312,361,
+362,313,
+94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,
+  94,94,94,94,314,363,
+364,315,
+365,357,316,
+185,186,187,188,189,83,
+196,82,
+366,185,186,187,188,189,319,
+185,186,187,188,189,141,
+196,69,
+196,68,
+367,185,186,187,188,189,323,
+196,65,
+185,186,187,188,189,63,
+17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50,
+  38,39,79,17,326,129,171,42,40,88,80,172,41,308,368,308,
+17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50,
+  38,39,79,17,327,129,171,42,40,88,80,172,41,308,369,308,
+370,328,
+371,329,
+17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50,
+  38,39,79,17,330,129,171,42,40,88,80,172,41,308,372,308,
+17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50,
+  38,39,79,17,331,129,171,42,40,88,80,172,41,308,373,308,
+374,185,186,187,188,189,332,
+228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,
+  228,228,228,228,228,228,228,228,228,228,333,375,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+  225,225,225,225,225,225,225,225,225,225,334,376,
+17,17,335,6,236,235,223,237,
+17,110,124,123,67,43,44,68,45,70,71,69,72,73,46,74,115,75,51,52,76,77,78,47,
+  48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50,66,38,39,79,17,336,129,
+  171,42,40,6,80,81,172,41,105,378,377,377,378,
+51,264,337,51,
+17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50,
+  38,39,79,17,338,129,171,42,40,88,80,172,41,379,379,
+380,196,48,
+17,22,17,340,268,88,175,174,41,381,
+17,22,17,341,266,88,175,174,41,382,
+16,5,
+16,4,
+17,98,124,123,67,68,70,71,69,72,73,74,115,75,76,77,78,66,17,344,97,81,105,
+  383,383,
+17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50,
+  38,39,79,17,345,129,171,42,40,88,80,172,41,384,384,
+17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50,
+  38,39,79,17,346,129,171,42,40,88,80,172,41,385,385,
+17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50,
+  38,39,79,17,347,129,171,42,40,88,80,172,41,386,386,
+17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50,
+  38,39,79,17,348,129,171,42,40,88,80,172,41,387,387,
+17,98,124,123,67,68,70,71,69,72,73,74,115,75,76,77,78,66,17,349,97,81,105,
+  388,388,
+17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50,
+  38,39,79,17,350,129,171,42,40,88,80,172,41,389,389,
+17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50,
+  38,39,79,17,351,129,171,42,40,88,80,172,41,390,390,
+17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50,
+  38,39,79,17,352,129,171,42,40,88,80,172,41,391,391,
+133,357,353,
+108,357,354,
+198,198,198,355,392,
+393,356,
+17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50,
+  38,39,79,17,357,129,171,42,40,88,80,172,41,394,394,
+395,358,
+17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50,
+  38,39,79,17,359,129,171,42,40,88,80,172,41,308,396,308,
+17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50,
+  38,39,79,17,360,129,171,42,40,88,80,172,41,397,397,
+17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50,
+  38,39,79,17,361,129,171,42,40,88,80,172,41,308,398,308,
+17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50,
+  38,39,79,17,362,129,171,42,40,88,80,172,41,399,399,
+17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50,
+  38,39,79,17,363,129,171,42,40,88,80,172,41,308,400,308,
+17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50,
+  38,39,79,17,364,129,171,42,40,88,80,172,41,401,401,
+402,365,
+17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50,
+  38,39,79,17,366,129,171,42,40,88,80,172,41,403,403,
+17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50,
+  38,39,79,17,367,129,171,42,40,88,80,172,41,404,404,
+181,357,368,
+177,357,369,
+182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,
+  182,182,182,182,182,182,182,182,182,182,370,405,
+178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,
+  178,178,178,178,178,178,178,178,178,178,371,406,
+237,357,372,
+234,357,373,
+17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50,
+  38,39,79,17,374,129,171,42,40,88,80,172,41,407,407,
+17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50,
+  38,39,79,17,375,129,171,42,40,88,80,172,41,308,408,308,
+17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50,
+  38,39,79,17,376,129,171,42,40,88,80,172,41,308,409,308,
+196,246,
+185,186,187,188,189,244,
+410,185,186,187,188,189,59,
+17,98,124,123,67,68,70,71,69,72,73,74,115,75,76,77,78,66,17,380,97,81,105,
+  411,411,
+412,45,
+413,43,
+165,196,383,
+159,185,186,187,188,189,384,
+158,185,186,187,188,189,385,
+155,185,186,187,188,189,386,
+149,185,186,187,188,189,387,
+114,196,388,
+414,185,186,187,188,189,389,
+111,185,186,187,188,189,390,
+110,185,186,187,188,189,391,
+220,415,220,392,416,
+17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50,
+  38,39,79,17,393,129,171,42,40,88,80,172,41,417,417,
+185,186,187,188,189,185,
+17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50,
+  38,39,79,17,395,129,171,42,40,88,80,172,41,418,418,
+419,357,396,
+420,185,186,187,188,189,397,
+421,357,398,
+422,185,186,187,188,189,399,
+423,357,400,
+424,185,186,187,188,189,401,
+17,98,124,123,67,68,70,71,69,72,73,74,115,75,76,77,78,66,17,402,97,81,105,
+  425,425,
+142,185,186,187,188,189,403,
+426,185,186,187,188,189,404,
+17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50,
+  38,39,79,17,405,129,171,42,40,88,80,172,41,308,427,308,
+17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50,
+  38,39,79,17,406,129,171,42,40,88,80,172,41,308,428,308,
+260,185,186,187,188,189,407,
+229,357,408,
+226,357,409,
+17,98,124,123,67,68,70,71,69,72,73,74,115,75,76,77,78,66,17,410,97,81,105,
+  429,429,
+196,47,
+17,22,17,412,269,88,175,174,41,
+17,22,17,413,267,88,175,174,41,
+17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50,
+  38,39,79,17,414,129,171,42,40,88,80,172,41,430,430,
+221,415,
+199,199,416,431,
+432,185,186,187,188,189,193,417,433,
+185,186,187,188,189,128,
+101,419,434,
+435,420,
+98,421,436,
+437,422,
+95,423,438,
+17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50,
+  38,39,79,17,424,129,171,42,40,88,80,172,41,439,439,
+196,93,
+17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50,
+  38,39,79,17,426,129,171,42,40,88,80,172,41,440,440,
+183,357,427,
+179,357,428,
+196,60,
+112,185,186,187,188,189,430,
+200,202,431,200,
+38,39,117,118,432,194,168,171,42,40,172,41,
+187,433,441,
+442,434,
+17,98,124,123,67,68,70,71,69,72,73,74,115,75,76,77,78,66,17,435,97,81,105,
+  443,443,
+444,436,
+17,98,124,123,67,68,70,71,69,72,73,74,115,75,76,77,78,66,17,437,97,81,105,
+  445,445,
+446,438,
+447,185,186,187,188,189,439,
+448,185,186,187,188,189,440,
+449,441,
+17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50,
+  38,39,79,17,442,129,171,42,40,88,80,172,41,450,450,
+196,91,
+17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50,
+  38,39,79,17,444,129,171,42,40,88,80,172,41,451,451,
+196,89,
+17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50,
+  38,39,79,17,446,129,171,42,40,88,80,172,41,452,452,
+453,447,
+17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50,
+  38,39,79,17,448,129,171,42,40,88,80,172,41,454,454,
+188,449,455,
+456,185,186,187,188,189,450,
+457,185,186,187,188,189,451,
+458,185,186,187,188,189,452,
+17,98,124,123,67,68,70,71,69,72,73,74,115,75,76,77,78,66,17,453,97,81,105,
+  459,459,
+460,185,186,187,188,189,454,
+461,455,
+462,456,
+463,457,
+17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50,
+  38,39,79,17,458,129,171,42,40,88,80,172,41,464,464,
+196,87,
+17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50,
+  38,39,79,17,460,129,171,42,40,88,80,172,41,465,465,
+189,189,461,466,
+17,98,124,123,67,68,70,71,69,72,73,74,115,75,76,77,78,66,17,462,97,81,105,
+  467,467,
+17,98,124,123,67,68,70,71,69,72,73,74,115,75,76,77,78,66,17,463,97,81,105,
+  468,468,
+469,185,186,187,188,189,464,
+470,185,186,187,188,189,465,
+471,192,466,471,
+196,102,
+196,99,
+472,469,
+17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50,
+  38,39,79,17,470,129,171,42,40,88,80,172,41,473,473,
+17,195,17,471,88,196,190,
+17,98,124,123,67,68,70,71,69,72,73,74,115,75,76,77,78,66,17,472,97,81,105,
+  474,474,
+475,185,186,187,188,189,473,
+196,96,
+17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50,
+  38,39,79,17,475,129,171,42,40,88,80,172,41,476,476,
+185,186,187,188,189,66,
+
+};
+
+
+static const unsigned short ag_sbt[] = {
+     0,   5,   8,  10,  12,  50,  95, 100, 163, 168, 171, 173, 175, 177,
+   180, 205, 207, 247, 250, 292, 334, 376, 416, 478, 520, 562, 604, 611,
+   620, 635, 643, 653, 708, 717, 726, 735, 776, 785, 794, 821, 824, 852,
+   854, 856, 858, 860, 862, 864, 866, 868, 870, 872, 874, 876, 878, 880,
+   882, 884, 886, 888, 890, 892, 894, 896, 898, 900, 902, 904, 906, 908,
+   910, 912, 914, 916, 918, 920, 922, 924, 926, 928, 968, 970, 972, 974,
+   986, 994,1057,1120,1125,1129,1131,1162,1202,1207,1212,1217,1248,1273,
+  1278,1303,1306,1331,1371,1377,1379,1386,1388,1390,1392,1399,1401,1461,
+  1464,1466,1468,1470,1472,1474,1483,1492,1494,1496,1498,1500,1502,1507,
+  1511,1516,1524,1527,1591,1596,1621,1661,1663,1671,1674,1677,1680,1685,
+  1710,1735,1760,1785,1810,1835,1875,1915,1955,1995,2036,2076,2116,2156,
+  2196,2236,2276,2316,2356,2396,2436,2476,2516,2519,2544,2569,2594,2619,
+  2644,2669,2694,2734,2774,2799,2824,2849,2853,2884,2915,2922,2962,3002,
+  3042,3082,3122,3162,3202,3242,3282,3322,3362,3387,3412,3437,3462,3487,
+  3512,3537,3538,3542,3555,3564,3627,3690,3692,3732,3773,3779,3783,3787,
+  3791,3832,3834,3837,3897,3900,3907,3947,3987,4012,4037,4079,4119,4144,
+  4186,4226,4268,4299,4330,4336,4350,4381,4412,4419,4459,4463,4465,4467,
+  4469,4471,4477,4482,4484,4491,4516,4521,4526,4529,4532,4535,4538,4541,
+  4544,4547,4550,4557,4564,4571,4578,4585,4592,4599,4606,4613,4620,4627,
+  4635,4642,4649,4656,4663,4670,4673,4676,4679,4682,4685,4688,4691,4698,
+  4706,4709,4712,4715,4756,4797,4799,4805,4811,4817,4823,4829,4835,4836,
+  4838,4840,4844,4848,4850,4852,4854,4856,4858,4860,4861,4862,4864,4866,
+  4874,4880,4883,4914,4916,4947,4949,4980,4982,4985,4991,4993,5000,5006,
+  5008,5010,5017,5019,5025,5066,5107,5109,5111,5152,5193,5200,5231,5262,
+  5270,5330,5334,5374,5377,5387,5397,5399,5401,5426,5466,5506,5546,5586,
+  5611,5651,5691,5731,5734,5737,5742,5744,5784,5786,5827,5867,5908,5948,
+  5989,6029,6031,6071,6111,6114,6117,6148,6179,6182,6185,6225,6266,6307,
+  6309,6315,6322,6347,6349,6351,6354,6361,6368,6375,6382,6385,6392,6399,
+  6406,6411,6451,6457,6497,6500,6507,6510,6517,6520,6527,6552,6559,6566,
+  6607,6648,6655,6658,6661,6686,6688,6697,6706,6746,6748,6752,6761,6767,
+  6770,6772,6775,6777,6780,6820,6822,6862,6865,6868,6870,6877,6881,6893,
+  6896,6898,6923,6925,6950,6952,6959,6966,6968,7008,7010,7050,7052,7092,
+  7094,7134,7137,7144,7151,7158,7183,7190,7192,7194,7196,7236,7238,7278,
+  7282,7307,7332,7339,7346,7350,7352,7354,7356,7396,7403,7428,7435,7437,
+  7477,7483
+};
+
+
+static const unsigned short ag_sbe[] = {
+     2,   6,   9,  11,  48,  86,  99, 147, 165, 170, 172, 174, 176, 179,
+   199, 206, 236, 249, 280, 322, 364, 405, 462, 508, 550, 592, 606, 614,
+   625, 637, 648, 704, 712, 721, 729, 765, 779, 788, 820, 822, 850, 853,
+   855, 857, 859, 861, 863, 865, 867, 869, 871, 873, 875, 877, 879, 881,
+   883, 885, 887, 889, 891, 893, 895, 897, 899, 901, 903, 905, 907, 909,
+   911, 913, 915, 917, 919, 921, 923, 925, 927, 957, 969, 971, 973, 985,
+   993,1041,1104,1123,1128,1130,1160,1191,1204,1209,1214,1246,1267,1277,
+  1297,1305,1325,1360,1376,1378,1385,1387,1389,1391,1398,1400,1446,1463,
+  1465,1467,1469,1471,1473,1476,1485,1493,1495,1497,1499,1501,1503,1508,
+  1514,1518,1525,1575,1592,1615,1650,1662,1670,1673,1675,1678,1683,1704,
+  1729,1754,1779,1804,1829,1864,1904,1944,1984,2025,2065,2105,2145,2185,
+  2225,2265,2305,2345,2385,2425,2465,2505,2518,2538,2563,2588,2613,2638,
+  2663,2688,2723,2763,2793,2818,2843,2852,2882,2913,2917,2951,2991,3031,
+  3071,3111,3151,3191,3231,3271,3311,3351,3381,3406,3431,3456,3481,3506,
+  3531,3537,3541,3554,3563,3611,3674,3691,3721,3761,3778,3781,3785,3789,
+  3820,3833,3836,3882,3899,3906,3936,3976,4006,4031,4067,4108,4138,4174,
+  4215,4256,4297,4328,4332,4341,4379,4410,4414,4448,4460,4464,4466,4468,
+  4470,4476,4480,4483,4490,4510,4519,4524,4527,4530,4534,4537,4540,4543,
+  4546,4549,4556,4563,4570,4577,4584,4591,4598,4605,4612,4619,4626,4634,
+  4641,4648,4655,4662,4669,4672,4675,4678,4681,4684,4687,4690,4697,4705,
+  4708,4711,4714,4744,4785,4798,4804,4810,4816,4822,4828,4834,4835,4837,
+  4839,4843,4847,4849,4851,4853,4855,4857,4859,4860,4861,4863,4865,4872,
+  4879,4882,4912,4915,4945,4948,4978,4981,4984,4990,4992,4999,5005,5007,
+  5009,5016,5018,5024,5054,5095,5108,5110,5140,5181,5199,5229,5260,5264,
+  5315,5332,5363,5376,5380,5390,5398,5400,5420,5455,5495,5535,5575,5605,
+  5640,5680,5720,5733,5736,5740,5743,5773,5785,5815,5856,5896,5937,5977,
+  6018,6030,6060,6100,6113,6116,6146,6177,6181,6184,6214,6254,6295,6308,
+  6314,6321,6341,6348,6350,6353,6360,6367,6374,6381,6384,6391,6398,6405,
+  6409,6440,6456,6486,6499,6506,6509,6516,6519,6526,6546,6558,6565,6595,
+  6636,6654,6657,6660,6680,6687,6691,6700,6735,6747,6750,6759,6766,6768,
+  6771,6773,6776,6778,6809,6821,6851,6864,6867,6869,6876,6879,6885,6894,
+  6897,6917,6924,6944,6951,6958,6965,6967,6997,7009,7039,7051,7081,7093,
+  7123,7135,7143,7150,7157,7177,7189,7191,7193,7195,7225,7237,7267,7280,
+  7301,7326,7338,7345,7348,7351,7353,7355,7385,7399,7422,7434,7436,7466,
+  7482,7483
+};
+
+
+static const unsigned char ag_fl[] = {
+  1,1,0,1,4,4,3,0,1,2,2,1,2,1,2,1,2,1,2,1,2,1,1,2,3,3,1,2,2,0,0,0,5,0,1,
+  1,1,1,2,2,3,3,0,5,0,5,2,6,4,2,0,5,3,2,2,1,2,1,2,5,7,2,4,4,4,4,16,4,4,4,
+  2,2,2,2,2,2,3,2,2,1,1,4,4,4,1,3,0,11,0,9,0,9,0,7,0,0,15,0,0,13,0,0,13,
+  1,1,1,3,0,5,3,6,6,8,4,6,1,4,4,4,4,4,4,4,1,1,4,3,0,7,1,1,1,0,5,3,3,3,3,
+  3,3,2,3,6,4,4,4,4,4,4,6,4,4,4,4,4,6,4,3,6,6,4,4,4,4,4,6,4,4,1,2,2,1,1,
+  1,1,1,0,5,0,7,0,5,0,7,1,3,0,0,0,0,15,1,1,0,2,0,1,0,0,0,9,1,1,3,3,3,2,3,
+  3,3,3,3,3,3,3,3,3,3,3,4,0,2,1,3,1,0,5,1,0,5,1,3,1,0,5,1,0,5,1,1,3,3,0,
+  1,3,1,3,0,1,1,0,2,0,3,0,1,1,1,2,1,6,2,2,1,0,1,1,3,1,3
+};
+
+static const unsigned char ag_ptt[] = {
+    0,  9, 13, 13,  9,  9, 10, 19, 19, 10, 10, 16, 16, 18, 18, 14, 14, 21,
+   21, 24, 25, 27, 28, 28, 29, 29,122,122,123,124,127,128,124,129,129,129,
+  129,129,129,129,129,129,137,129,139,129,129,129,129,129,145,129,129,129,
+  129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,
+  129,129,129,129,129,129,129,129,129,129,129,129,129,130,156,130,157,130,
+  158,130,159,130,161,162,130,163,164,130,165,166,130,142,142,142,142,168,
+  142,142,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,
+  131,169,131,136,136,136,171,136,136,136,136,136,136,136,136,152,152,170,
+  170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,
+  170,170,170,170,170,170,  2,  2,  2,  3,  3,  4,  5,  5,172,151,173,151,
+  174,151,175,151,160,160,177,178,179,180,132,181,181,  1,  1,182,182,186,
+  187,189,133,190,190,185,185,185,185,185,185,185,185,185,185,185,185,185,
+  185,185,185,185,188,188,148,148,191,192,191,191,193,191,149,149,194,195,
+  194,194,196,194,150,150,150,150,144,144,144,144,144,147,147,147,199,147,
+  201,147,143,143,143,143,143,200,198,197,  6,  6,146,146,138,138,140,140
+};
+
+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 bug-I158_change_reduction(bug-I158_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((bug-I158_token_type) *ag_tp)) ag_tp++;
+  (PCB).reduction_token = (bug-I158_token_type) *ag_tp;
+}
+
+
+
+static void ag_ra(void)
+{
+  switch(ag_rpx[(PCB).ag_ap]) {
+    case 1: ag_rp_1(V(0,(void *)), V(3,(int *))); break;
+    case 2: ag_rp_2(V(0,(void *)), V(3,(int *))); break;
+    case 3: ag_rp_3(V(0,(void *)), V(2,(void *))); break;
+    case 4: ag_rp_4(V(1,(void *))); break;
+    case 5: ag_rp_5(V(0,(int *))); break;
+    case 6: ag_rp_6(V(0,(void *)), V(1,(int *))); break;
+    case 7: ag_rp_7(V(0,(int *))); break;
+    case 8: ag_rp_8(V(0,(int *)), V(1,(void *))); break;
+    case 9: V(0,(int *)) = ag_rp_9(V(0,(int *))); break;
+    case 10: V(0,(int *)) = ag_rp_10(V(0,(int *)), V(1,(int *))); break;
+    case 11: V(0,(int *)) = ag_rp_11(V(0,(int *))); break;
+    case 12: V(0,(int *)) = ag_rp_12(V(0,(int *)), V(1,(int *))); break;
+    case 13: V(0,(char * *)) = ag_rp_13(V(0,(int *))); break;
+    case 14: V(0,(char * *)) = ag_rp_14(V(0,(int *))); break;
+    case 15: V(0,(char * *)) = ag_rp_15(V(0,(int *))); break;
+    case 16: V(0,(int *)) = ag_rp_16(V(0,(int *))); break;
+    case 17: V(0,(int *)) = ag_rp_17(V(0,(int *)), V(1,(int *))); break;
+    case 18: V(0,(char * *)) = ag_rp_18(V(1,(int *))); break;
+    case 19: V(0,(char * *)) = ag_rp_19(V(1,(int *))); break;
+    case 20: ag_rp_20(); break;
+    case 21: ag_rp_21(); break;
+    case 22: ag_rp_22(); break;
+    case 23: ag_rp_23(); break;
+    case 24: ag_rp_24(); break;
+    case 25: ag_rp_25(); break;
+    case 26: ag_rp_26(); break;
+    case 27: ag_rp_27(); break;
+    case 28: ag_rp_28(); break;
+    case 29: ag_rp_29(); break;
+    case 30: ag_rp_30(); break;
+    case 31: ag_rp_31(); break;
+    case 32: ag_rp_32(); break;
+    case 33: ag_rp_33(); break;
+    case 34: ag_rp_34(); break;
+    case 35: ag_rp_35(); break;
+    case 36: ag_rp_36(); break;
+    case 37: ag_rp_37(); break;
+    case 38: ag_rp_38(); break;
+    case 39: ag_rp_39(); break;
+    case 40: ag_rp_40(); break;
+    case 41: ag_rp_41(); break;
+    case 42: ag_rp_42(); break;
+    case 43: ag_rp_43(); break;
+    case 44: ag_rp_44(); break;
+    case 45: ag_rp_45(); break;
+    case 46: ag_rp_46(); break;
+    case 47: ag_rp_47(); break;
+    case 48: ag_rp_48(); break;
+    case 49: ag_rp_49(); break;
+    case 50: ag_rp_50(); break;
+    case 51: ag_rp_51(); break;
+    case 52: ag_rp_52(); break;
+    case 53: ag_rp_53(); break;
+    case 54: ag_rp_54(); break;
+    case 55: ag_rp_55(); break;
+    case 56: ag_rp_56(); break;
+    case 57: ag_rp_57(); break;
+    case 58: ag_rp_58(); break;
+    case 59: ag_rp_59(); break;
+    case 60: ag_rp_60(); break;
+    case 61: ag_rp_61(); break;
+    case 62: ag_rp_62(); break;
+    case 63: ag_rp_63(); break;
+    case 64: ag_rp_64(); break;
+    case 65: ag_rp_65(); break;
+    case 66: ag_rp_66(); break;
+    case 67: ag_rp_67(); break;
+    case 68: ag_rp_68(); break;
+    case 69: ag_rp_69(); break;
+    case 70: ag_rp_70(); break;
+    case 71: ag_rp_71(); break;
+    case 72: ag_rp_72(); break;
+    case 73: ag_rp_73(); break;
+    case 74: ag_rp_74(); break;
+    case 75: ag_rp_75(); break;
+    case 76: ag_rp_76(); break;
+    case 77: ag_rp_77(); break;
+    case 78: ag_rp_78(); break;
+    case 79: ag_rp_79(); break;
+    case 80: ag_rp_80(); break;
+    case 81: ag_rp_81(); break;
+    case 82: ag_rp_82(); break;
+    case 83: ag_rp_83(); break;
+    case 84: ag_rp_84(); break;
+    case 85: ag_rp_85(); break;
+    case 86: ag_rp_86(); break;
+    case 87: ag_rp_87(); break;
+    case 88: ag_rp_88(); break;
+    case 89: ag_rp_89(); break;
+    case 90: ag_rp_90(); break;
+    case 91: ag_rp_91(); break;
+    case 92: ag_rp_92(); break;
+    case 93: ag_rp_93(); break;
+    case 94: ag_rp_94(); break;
+    case 95: ag_rp_95(); break;
+    case 96: ag_rp_96(); break;
+    case 97: ag_rp_97(); break;
+    case 98: ag_rp_98(); break;
+    case 99: ag_rp_99(); break;
+    case 100: ag_rp_100(); break;
+    case 101: ag_rp_101(); break;
+    case 102: ag_rp_102(); break;
+    case 103: ag_rp_103(); break;
+    case 104: ag_rp_104(); break;
+    case 105: ag_rp_105(); break;
+    case 106: ag_rp_106(); break;
+    case 107: ag_rp_107(); break;
+    case 108: ag_rp_108(); break;
+    case 109: ag_rp_109(); break;
+    case 110: ag_rp_110(); break;
+    case 111: ag_rp_111(); break;
+    case 112: ag_rp_112(); break;
+    case 113: ag_rp_113(); break;
+    case 114: ag_rp_114(); break;
+    case 115: ag_rp_115(); break;
+    case 116: ag_rp_116(); break;
+    case 117: ag_rp_117(); break;
+    case 118: ag_rp_118(); break;
+    case 119: ag_rp_119(); break;
+    case 120: ag_rp_120(); break;
+    case 121: ag_rp_121(); break;
+    case 122: ag_rp_122(); break;
+    case 123: ag_rp_123(); break;
+    case 124: ag_rp_124(); break;
+    case 125: ag_rp_125(); break;
+    case 126: ag_rp_126(); break;
+    case 127: ag_rp_127(); break;
+    case 128: ag_rp_128(); break;
+    case 129: ag_rp_129(); break;
+    case 130: ag_rp_130(); break;
+    case 131: ag_rp_131(); break;
+    case 132: ag_rp_132(); break;
+    case 133: ag_rp_133(); break;
+    case 134: ag_rp_134(); break;
+    case 135: ag_rp_135(); break;
+    case 136: ag_rp_136(); break;
+    case 137: ag_rp_137(); break;
+    case 138: ag_rp_138(); break;
+    case 139: ag_rp_139(); break;
+    case 140: ag_rp_140(); break;
+    case 141: ag_rp_141(); break;
+    case 142: ag_rp_142(); break;
+    case 143: V(0,(double *)) = ag_rp_143(); break;
+    case 144: V(0,(double *)) = ag_rp_144(); break;
+    case 145: V(0,(double *)) = ag_rp_145(); break;
+    case 146: V(0,(double *)) = ag_rp_146(); break;
+    case 147: V(0,(double *)) = ag_rp_147(); break;
+    case 148: V(0,(int *)) = ag_rp_148(); break;
+    case 149: V(0,(char * *)) = ag_rp_149(); break;
+    case 150: V(0,(char * *)) = ag_rp_150(); break;
+    case 151: ag_rp_151(); break;
+    case 152: ag_rp_152(); break;
+    case 153: ag_rp_153(); break;
+    case 154: ag_rp_154(); break;
+    case 155: ag_rp_155(); break;
+    case 156: ag_rp_156(); break;
+    case 157: ag_rp_157(); break;
+    case 158: ag_rp_158(); break;
+    case 159: ag_rp_159(); break;
+    case 160: ag_rp_160(); break;
+    case 161: ag_rp_161(); break;
+    case 162: ag_rp_162(); break;
+    case 163: ag_rp_163(); break;
+    case 164: ag_rp_164(); break;
+    case 165: ag_rp_165(); break;
+    case 166: V(0,(double *)) = ag_rp_166(); break;
+    case 167: V(0,(double *)) = ag_rp_167(); break;
+    case 168: ag_rp_168(); break;
+    case 169: ag_rp_169(); break;
+    case 170: ag_rp_170(); break;
+    case 171: ag_rp_171(); break;
+    case 172: ag_rp_172(); break;
+    case 173: ag_rp_173(); break;
+    case 174: ag_rp_174(); break;
+    case 175: ag_rp_175(); break;
+    case 176: ag_rp_176(); break;
+    case 177: ag_rp_177(); break;
+    case 178: ag_rp_178(); break;
+    case 179: ag_rp_179(); break;
+    case 180: ag_rp_180(); break;
+    case 181: ag_rp_181(); break;
+    case 182: ag_rp_182(); break;
+    case 183: ag_rp_183(); break;
+    case 184: ag_rp_184(); break;
+    case 185: ag_rp_185(); break;
+    case 186: ag_rp_186(); break;
+    case 187: ag_rp_187(); break;
+    case 188: ag_rp_188(); break;
+    case 189: ag_rp_189(); break;
+    case 190: ag_rp_190(); break;
+    case 191: ag_rp_191(); break;
+    case 192: ag_rp_192(); break;
+    case 193: ag_rp_193(); break;
+    case 194: ag_rp_194(); break;
+    case 195: ag_rp_195(); break;
+    case 196: ag_rp_196(); break;
+    case 197: ag_rp_197(); break;
+    case 198: ag_rp_198(); break;
+    case 199: ag_rp_199(); break;
+    case 200: ag_rp_200(); break;
+    case 201: ag_rp_201(); break;
+    case 202: ag_rp_202(); break;
+    case 203: ag_rp_203(); break;
+    case 204: ag_rp_204(); break;
+    case 205: ag_rp_205(); break;
+    case 206: ag_rp_206(); break;
+    case 207: ag_rp_207(); break;
+    case 208: ag_rp_208(); break;
+    case 209: ag_rp_209(); break;
+    case 210: ag_rp_210(); break;
+    case 211: ag_rp_211(); break;
+    case 212: ag_rp_212(); break;
+    case 213: ag_rp_213(); break;
+    case 214: ag_rp_214(); break;
+    case 215: ag_rp_215(); break;
+    case 216: ag_rp_216(); break;
+    case 217: ag_rp_217(); break;
+    case 218: ag_rp_218(); break;
+    case 219: ag_rp_219(); break;
+    case 220: ag_rp_220(); break;
+    case 221: V(0,(int *)) = ag_rp_221(); break;
+    case 222: V(0,(int *)) = ag_rp_222(); break;
+    case 223: ag_rp_223(); break;
+    case 224: ag_rp_224(); break;
+    case 225: ag_rp_225(); break;
+    case 226: ag_rp_226(); break;
+    case 227: ag_rp_227(); break;
+  }
+}
+
+#define TOKEN_NAMES bug-I158_token_names
+const char *const bug-I158_token_names[205] = {
+  "program",
+  "step_part",
+  "const",
+  "number",
+  "intnum",
+  "symbol_or_lineno",
+  "hashed_number",
+  "SEP",
+  "EOFILE",
+  "FNUM",
+  "simple real",
+  "",
+  "'+'",
+  "",
+  "exponent",
+  "'-'",
+  "integer part",
+  "'.'",
+  "fraction part",
+  "",
+  "digit",
+  "name",
+  "letter",
+  "",
+  "SYMBOL",
+  "STRSYM",
+  "'$'",
+  "DIGITS",
+  "digit string",
+  "STRING",
+  "'\\\"'",
+  "string text",
+  "'\\n'",
+  "GOSUB",
+  "LABEL",
+  "ON",
+  "INTERRUPT",
+  "BREAK",
+  "CONTINUE",
+  "IF",
+  "THEN",
+  "ELSE",
+  "ENDIF",
+  "PRINT",
+  "INPUT",
+  "LINE",
+  "RETURN",
+  "DIM",
+  "END",
+  "AT",
+  "SCREEN",
+  "REVERSE",
+  "AND",
+  "OR",
+  "NOT",
+  "NE",
+  "LE",
+  "GE",
+  "LT",
+  "GT",
+  "EQ",
+  "READ",
+  "DATA",
+  "RESTORE",
+  "OPEN",
+  "CLOSE",
+  "WINDOW",
+  "DOT",
+  "CIRCLE",
+  "TEXT",
+  "CLEAR",
+  "PRINTER",
+  "WAIT",
+  "BELL",
+  "MAP",
+  "XMAP",
+  "YMAP",
+  "ARROW",
+  "XTICK",
+  "YTICK",
+  "SIN",
+  "ASIN",
+  "COS",
+  "ACOS",
+  "TAN",
+  "ATAN",
+  "EXP",
+  "LOG",
+  "SQRT",
+  "MYEOF",
+  "INT",
+  "FRAC",
+  "MOD",
+  "RAN",
+  "LEN",
+  "VAL",
+  "LEFT",
+  "RIGHT",
+  "MID",
+  "MIN",
+  "MAX",
+  "STR",
+  "INKEY",
+  "CHR",
+  "ASC",
+  "UPPER",
+  "LOWER",
+  "TRIM",
+  "LTRIM",
+  "RTRIM",
+  "INSTR",
+  "SYSTEM",
+  "SYSTEM2",
+  "PEEK",
+  "PEEK2",
+  "POKE",
+  "DATE",
+  "TIME",
+  "'*'",
+  "'/'",
+  "'^'",
+  "UMINUS",
+  "NAME",
+  "program",
+  "statement list",
+  "eof",
+  "statement_list",
+  "",
+  "",
+  "statement",
+  "string_assignment",
+  "assignment",
+  "for_loop",
+  "if_clause",
+  "\"GOTO\"",
+  "\"GOSUB\"",
+  "expression",
+  "",
+  "goto_list",
+  "",
+  "gosub_list",
+  "','",
+  "string_expression",
+  "printintro",
+  "printlist",
+  "",
+  "semicolon",
+  "inputintro",
+  "inputlist",
+  "readlist",
+  "datalist",
+  "dimlist",
+  "mapping",
+  "\"TO\"",
+  "'('",
+  "')'",
+  "",
+  "",
+  "",
+  "",
+  "indexlist",
+  "",
+  "",
+  "",
+  "",
+  "",
+  "",
+  "string_function",
+  "",
+  "",
+  "function",
+  "",
+  "",
+  "",
+  "",
+  "",
+  "\"FOR\"",
+  "",
+  "",
+  "",
+  "",
+  "next_or_eofile",
+  "next_symbol",
+  "\"NEXT\"",
+  "\"STEP\"",
+  "condition",
+  "",
+  "",
+  "else_part",
+  "",
+  "endif_or_eof",
+  "input",
+  "",
+  "",
+  "readitem",
+  "",
+  "",
+  "stream",
+  "position",
+  "",
+  "prompt",
+  "",
+  "'#'",
+  "';'",
+  "",
+
+};
+
+#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((*(PCB).lab)) && (*(PCB).lab) != '\\') {
+    char buf[20];
+    sprintf(buf, "\'%c\'", (char) (*(PCB).lab));
+    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_10_proc(void) {
+  int ag_t = (PCB).token_number;
+  (PCB).btsx = 0, (PCB).drt = -1;
+  do {
+    ag_track();
+    if ((PCB).rx < (PCB).fx) {
+      (PCB).input_code = (PCB).lab[(PCB).rx++];
+      (PCB).token_number = (bug-I158_token_type) AG_TCV((PCB).input_code);}
+    else {
+      GET_INPUT;
+      (PCB).lab[(PCB).fx++] = (PCB).input_code;
+      (PCB).token_number = (bug-I158_token_type) AG_TCV((PCB).input_code);
+      (PCB).rx++;
+    }
+    if (ag_key_index[(PCB).sn]) {
+      unsigned ag_k = ag_key_index[(PCB).sn];
+      int ag_ch = CONVERT_CASE((PCB).input_code);
+      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 == (bug-I158_token_type) ag_t);
+  (PCB).rx = 0;
+  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).lab;
+    (PCB).ssx--;
+    ag_track();
+    ag_ra();
+    if ((PCB).exit_flag != AG_RUNNING_CODE) return 0;
+    (PCB).ssx++;
+    if ((PCB).rx < (PCB).fx) {
+      (PCB).input_code = (PCB).lab[(PCB).rx++];
+      (PCB).token_number = (bug-I158_token_type) AG_TCV((PCB).input_code);}
+    else {
+      GET_INPUT;
+      (PCB).lab[(PCB).fx++] = (PCB).input_code;
+      (PCB).token_number = (bug-I158_token_type) AG_TCV((PCB).input_code);
+      (PCB).rx++;
+    }
+    if (ag_key_index[(PCB).sn]) {
+      unsigned ag_k = ag_key_index[(PCB).sn];
+      int ag_ch = CONVERT_CASE((PCB).input_code);
+      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 == (bug-I158_token_type) ag_t);
+  (PCB).rx = 0;
+  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 = (bug-I158_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 = (bug-I158_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 = (bug-I158_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).lab;
+  (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).rx = 0;
+  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).rx = 0;
+  (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 = (bug-I158_token_type) ag_ptt[(PCB).ag_ap];
+  (PCB).btsx = 0, (PCB).drt = -1;
+  (*(int *) &(PCB).vs[(PCB).ssx]) = *(PCB).lab;
+  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).lab;
+  if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd];
+  else (PCB).ss[(PCB).ssx] = (PCB).sn;
+  ag_track();
+  (PCB).reduction_token = (bug-I158_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) {
+  ag_undo();
+  (PCB).rx = 0;
+  (PCB).exit_flag = AG_SYNTAX_ERROR_CODE;
+  ag_diagnose();
+  SYNTAX_ERROR;
+  {(PCB).rx = 1; ag_track();}
+  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).rx = 0;
+  (PCB).reduction_token = (bug-I158_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 = (bug-I158_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).rx = 0;
+  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;
+}
+
+
+void init_bug-I158(void) {
+  (PCB).rx = (PCB).fx = 0;
+  (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 bug-I158(void) {
+  init_bug-I158();
+  (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;
+      if ((PCB).rx < (PCB).fx) {
+        (PCB).input_code = (PCB).lab[(PCB).rx++];
+        (PCB).token_number = (bug-I158_token_type) AG_TCV((PCB).input_code);}
+      else {
+        GET_INPUT;
+        (PCB).lab[(PCB).fx++] = (PCB).input_code;
+        (PCB).token_number = (bug-I158_token_type) AG_TCV((PCB).input_code);
+        (PCB).rx++;
+      }
+      if (ag_key_index[(PCB).sn]) {
+        unsigned ag_k = ag_key_index[(PCB).sn];
+        int ag_ch = CONVERT_CASE((PCB).input_code);
+        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]])();
+  }
+}
+
+