Mercurial > ~dholland > hg > ag > index.cgi
diff tests/agcl/oldagsrc/good/dsl.cpp @ 0:13d2b8934445
Import AnaGram (near-)release tree into Mercurial.
author | David A. Holland |
---|---|
date | Sat, 22 Dec 2007 17:52:45 -0500 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/agcl/oldagsrc/good/dsl.cpp Sat Dec 22 17:52:45 2007 -0500 @@ -0,0 +1,4248 @@ + // C Prologue +/* + AnaGram, a System for Syntax Directed Programming + + A Dos Script Language + + Copyright (c) 1993, Parsifal Software. + All Rights Reserved. + +*/ + + +#include "stack.h" +#include "charsink.h" +#include "strdict.h" +#include "array.h" +#include "symbol.h" +#include "query.h" +#include <conio.h> + + +// Define stacks for temporary storage + +stack <action_pointer> as(25); // Stack actions +stack <int> is(100); // Stack string indices +stack <char *> ps(1000,20); // Stack parameter strings +stack <query_item> qs(23); // Stack query items + + +// Define data structures for symbol table + +#define N_STRINGS 2000 + +string_accumulator sa(64000U,500); +string_dictionary sd(N_STRINGS); +array <symbol_table_entry> st(N_STRINGS); + + +/* + * 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 DSL_H +#include "dsl.h" +#endif + +#ifndef DSL_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]) + + + +dsl_pcb_type dsl_pcb; +#define PCB dsl_pcb +#define CHANGE_REDUCTION(x) dsl_change_reduction(dsl_##x##_token) +int dsl_change_reduction(dsl_token_type); + + +#line - "dsl.syn" +#include <process.h> +#include <stdlib.h> +#include <ctype.h> +#include <sys/stat.h> +#include <fcntl.h> +#include <io.h> +#include <conio.h> +#include <dir.h> +#include <dos.h> +#include <time.h> +#include "assert.h" + +#include "edit.h" + + +#include "screen.h" +#include "util.h" +#include "redirect.h" + +#define GET_CONTEXT CONTEXT.pointer = PCB.pointer;\ + CONTEXT.line=PCB.line;\ + CONTEXT.column = PCB.column; + + +int debug_switch = 0; +char *error_msg = NULL; +unsigned errorlevel_index; +int errorlevel; +int exitcode = 0; +int exitflag = 0; +int first_line = 1; +int first_column = 1; +unsigned stderr_index; + +void display_queries(screen_descriptor *); + +#define FIRST_LINE first_line +#define FIRST_COLUMN first_column + + +/***** + + Internal Functions + +*****/ + +long file_exists(void) { + FILE *f = fopen(sa--,"r"); + if (f != NULL) fclose(f); + return f != NULL; +} + +long directory_exists(void) { + struct ffblk ff; + int result; + + sa << "\\*.*"; + result = findfirst(sa--,&ff,FA_DIREC); + return result == 0; +} + +long string_length(void) { + return size(sa--); +} + +long get_file_length(void) { + int handle = open(sa--, O_RDONLY); + long length; + if (handle < 0) return 0; + length = filelength(handle); + close(handle); + return length; +} + +long disk_space(void) { + struct dfree free; + int drive = toupper(*(char *)sa--) - 64; + long avail; + + getdfree(drive, &free); + avail = (long) free.df_avail * (long) free.df_bsec * (long) free.df_sclus; + return avail; +} + +long file_time(void) { + int handle = open(sa--, O_RDONLY); + struct ftime ft; + struct tm t; + + if (handle < 0) return 0; + getftime(handle, &ft); + close(handle); + t.tm_year = ft.ft_year + 70; + t.tm_mon = ft.ft_month; + t.tm_mday = ft.ft_day; + t.tm_hour = ft.ft_hour; + t.tm_min = ft.ft_min; + t.tm_sec = ft.ft_tsec*2; + return mktime(&t); +} + + +// Support for reduction procecures + +// Compare top strings on string accumulator + +/* + pops top two strings from string accumulator using strcmp + and returns + -1 if first string is less than top string + 0 if strings match + +1 if top string is greater than first string +*/ + +int string_comp(void) { + int n = size(sa); + array<char> right_string(sa--, n+1); + return strcmp(sa--,right_string); +} + +/* + replace the top string on the stack, with a substring where the index + of the first character in the substring is given by "first" and the index + of the last character is given by "last" +*/ + +void extract(unsigned first, unsigned last) { + int n = last - first + 1; + assert (last >= first); + array <char> x((char *) sa-- + first, n+1); + x[n] = 0; + ++sa << x; +} + +/* + Look up the top string on the accumulator stack in the string dictionary. + If it has a value in the symbol table, replace it with the symbol table + value. If the value is numeric, convert it to integer. Otherwise, leave the + string untouched on the stack. +*/ + +void lookup(void) { + unsigned index = sd[sa]; + if (index == 0) return; + switch (st[index].type) { + case string_type: + case value_type: { + --sa; // discard name + ++sa << st[index].data.text; // stack value + break; + } + case integer_type: { + --sa; // discard name + (++sa).printf("%ld", st[index].data.integer); // convert to ascii + break; + } + } +} + +/* + Find the data type of a symbol and change the reduction accordingly. + Return the dictionary index for strings, and the value itself for integers. +*/ + +long name_type(void) { + unsigned index = sd << sa--; + switch (st[index].type) { + case value_type: + case string_type: { + CHANGE_REDUCTION(string_name); + return index; + } + case built_in_function_type: { + CHANGE_REDUCTION(built_in_name); + return index; + } + case undefined_type: { + CHANGE_REDUCTION(undefined_name); + return index; + } + case integer_type: return st[index].data.integer; + } + return 0; +} + +/* + Store a string formula. A string formula is a sequence of string identifiers + the values of which are to be concatenated. The parser has accumulated the + identifiers on the integer_stack, is. The formula is terminated by a zero + entry. +*/ + +int *formula(void) { + int n = size(is << 0); + int *f = new int[n]; + while (n--) is >> f[n]; + return f; +} + +/* + Make a copy of an action that has been identified in the text stream. + An action pointer was stacked at the beginning of the action text on the + action stack, as. +*/ + +action_pointer copy_action(void) { + action_pointer ap; + as >> ap; // pop action descriptor + unsigned length = (unsigned) (PCB.pointer - ap.pointer); + unsigned char *action = memdup(ap.pointer,length + 1); + action[length] = 0; + ap.pointer = action; + return ap; +} + + +// Internal Commands + +int echo(int n_args, char *args[]) { + int i; + char *cs = ""; + for (i = 1; args[i]; i++) printf("%s%s", cs, args[i]), cs = " "; + printf("\n"); + return 0; +} + +int pause(int n_args, char *args[]) { + int c; + while (kbhit()) getch(); // Empty buffer + printf("Press any key to continue . . .\n"); + c = getch(); + if (c == 3) exit(1); + return c; +} + +int exit_script(int n_args, char *args[]) { + if (n_args > 1) sscanf(args[1], "%ld", &exitcode); + exit(exitcode); + return exitcode; +} + +/* +int return_script(int n_args, char *args[]) { + if (n_args > 1) sscanf(args[1], "%ld", &exitcode); + PCB.exit_flag = AG_SUCCESS_CODE; + return exitcode; +} +*/ + +int subdirs(int n_args, char *args[]) { + ffblk file_block; + int flag; + int length = strlen(args[1]); + array <char> name(args[1],length + 5); + + strcat(name, "\\*.*"); + for(flag = findfirst(name, &file_block, FA_DIREC); + flag == 0; flag = findnext(&file_block)) { + if ((file_block.ff_attrib & FA_DIREC) == 0) continue; + if (strcmp(file_block.ff_name, ".") == 0) continue; + if (strcmp(file_block.ff_name, "..") == 0) continue; + puts(file_block.ff_name); + } + return 0; +} + +int files(int n_args, char *args[]) { + ffblk file_block; + int flag; + int length = strlen(args[1]); + array<char> name(args[1],length + 5); + + strcat(name, "\\*.*"); + for(flag = findfirst(name, &file_block, 0); + flag == 0; flag = findnext(&file_block)) { + puts(file_block.ff_name); + } + return 0; +} + + +/***** + + Execute Command Line + +*****/ + + +void perform_action(action_pointer ap) { + dsl_pcb_type save_pcb = PCB; + + PCB.pointer = ap.pointer; + first_line = ap.line; + first_column = ap.column; + dsl(); + exitflag = PCB.exit_flag != AG_SUCCESS_CODE; + PCB = save_pcb; + if (exitflag) PCB.exit_flag = AG_SEMANTIC_ERROR_CODE; +} + +void exec(void) { + int n = size(ps << (char *) NULL); + int n_args = n - 1; + unsigned index; + char *cs; + int i; + + array <char *> args(n); + while (n--) ps >> args[n]; + + cs = args[0]; + for (i = 0; cs[i]; i++) cs[i] = toupper(cs[i]); + if (debug_switch) { + for (i = 0; args[i]; i++) fprintf(stderr, "%s ", args[i]); + fprintf(stderr,"\nPress any key to continue\n"); + while (!kbhit()); + getch(); + } + index = sd[args[0]]; + if (n_args == 1 && strlen(cs) == 2 && cs[1] == ':') { + errorlevel = system(args[0]); + } + else if ( *cs && index) switch (st[index].type) { + case internal_type: { + errorlevel = (*st[index].data.proc)(n_args, args); + break; + } + case dos_type: { + int i; + for (i = 1; args[i]; i++) args[i][-1] = ' '; + errorlevel = system(args[0]); + assert(errorlevel >= 0); + break; + } + case action_type: { + action_descriptor d = *st[index].data.action; + stack <symbol_table_entry> old_entries(d.n_args); + for (i = 0; i < d.n_args && args[i+1]; i++) { + old_entries << st[d.args[i]]; + st[d.args[i]].type = value_type; + st[d.args[i]].data.text = memdup(args[i+1], 1 + strlen(args[i+1])); + } + perform_action(d.ap); + for (i = d.n_args; i--;) { + release(st[d.args[i]]); + old_entries >> st[d.args[i]]; + } + } + } + else { + errorlevel = spawnvp(P_WAIT, args[0], args); + assert(errorlevel >= 0); + } + st[errorlevel_index].data.integer = errorlevel; + while (n_args--) --sa; + --ps; + if (kbhit()) { + int c = getch(); + if (c == 3) exit(1); + ungetch(c); + } +} + +void discard_temp_file(char *file_name) { + unlink(file_name); // Delete file + delete [] file_name; // Free storage for name +} + + +/***** + + Execute Command with piped input + +*****/ + + +void exec_pipe_in(char *file_name) { + { + redirect sin(STDIN, file_name); + exec(); + } + discard_temp_file(file_name); +} + + +/***** + + Execute Command with redirected I/O + +*****/ + +void exec_redirect_in(void) { + redirect sin(STDIN, sa--); + exec(); +} + +char *exec_pipe_out(void) { + redirect sout(STDOUT); + exec(); + return save_file(sout); +} + +char *exec_pipe_in_pipe_out(char *file_name) { + char *result; + { + redirect sin(STDIN, file_name); + redirect sout(STDOUT); + exec(); + result = save_file(sout); + } + discard_temp_file(file_name); + return result; +} + +char *exec_redirect_in_pipe_out(void) { + redirect sout(STDOUT); + exec_redirect_in(); + return save_file(sout); +} + +unsigned check_integer(void) { + unsigned index = sd << sa--; + if (st[index].type == integer_type) return index; + CHANGE_REDUCTION(undeclared_variable); + if (st[index].type == string_type) CHANGE_REDUCTION(string_variable); + return index; +} + +void assign_value(unsigned index) { + char *text = copy(sa--); + release(st[index]); + st[index].type = value_type; + st[index].data.text = text; +} + +void grab_output(char *temp_name) { + unlink(sa); // delete old file + rename(temp_name, sa--); // rename temp file + delete [] temp_name; // discard name string +} + +void append_output(char *temp_name) { + redirect sout(STDOUT, sa--, 1); // append to file named on sa + redirect sin(STDIN, temp_name); + char *buf[2000]; + int n; + while (1) { + n = read(STDIN, buf, 2000); + if (n == 0) break; + write(STDOUT, buf, n); + } + unlink(temp_name); + delete [] temp_name; +} + +void action_string(void) { + action_pointer ap; + as >> ap; + unsigned length = (unsigned)(PCB.pointer - ap.pointer); + array <unsigned char> action(ap.pointer,length + 1); + action[length] = 0; + redirect sout(STDOUT); + char *result; + + ap.pointer = action; + perform_action(ap); + result = content(sout); + ++sa << result; + delete [] result; +} + + +// Program Control functions + +// If/else statement + +int do_if(int pc, int cc) { + action_pointer ap; + as >> ap; + if (!pc && cc && exitflag == 0) { + unsigned length = (unsigned) (PCB.pointer - ap.pointer); + array<unsigned char> q(ap.pointer, length+1); + q[length] = 0; + ap.pointer = q; + perform_action(ap); + } + return pc || cc; +} + +// While statement + +void do_while(int cc) { + unsigned length; + action_pointer ap; + as >> ap; + if (cc == 0) return; + length = (unsigned) (PCB.pointer - ap.pointer); + array<unsigned char> q(ap.pointer, length+1); + q[length] = 0; + ap.pointer = q; + perform_action(ap); + if (exitflag) return; + PCB.pointer = CONTEXT.pointer; + PCB.line = CONTEXT.line; + PCB.column = CONTEXT.column; +} + + +// For Statement +// Note that this is the for statement in the DOS batch languange for, not C + +void do_for_loop(void) { + int n,k; + char *q; + char *seps = " \t\v\f\r\n"; + action_pointer ap; + as >> ap; + unsigned length = (unsigned)(PCB.pointer - ap.pointer); + array <unsigned char> action(ap.pointer, length + 1); + action[length] = 0; + + ap.pointer = action; + n = size(sa); + array<char> text(sa--, n + 1); + + + unsigned index = sd << sa--; + + ++ps; + for (q = strtok(text, seps); q != NULL; q = strtok(NULL,seps)) { + if (*q == '(') { + int k = strlen(q) - 1; + assert(q[k] == ')'); + q[k] = 0; + q++; + } + else if (*q == '"') { + int k = strlen(q) - 1; + assert(q[k] == '"'); + q[k] = 0; + q++; + } + ps << q; + } + k = n = size(ps); + array<char *> args(n); + while (k--) ps >> args[k]; + --ps; + symbol_table_entry save_table_entry = st[index]; + st[index].type = value_type; + + for (k = 0; k < n && exitflag == 0; k++) { + st[index].data.text = args[k]; + perform_action(ap); + } + st[index] = save_table_entry; +} + +void invoke_script(void) { + int handle = open(sa, O_TEXT | O_RDONLY); + long size; + unsigned n; + action_pointer ap; + + if (handle < 0) { + fprintf(stderr,"Cannot open %s\n", (char *) sa--); + exit(1); + } + --sa; + size = filelength(handle); + assert(size < 65536L); + array <unsigned char> data((unsigned) size+1); + n = (unsigned) read(handle,data,(unsigned) size); + data[n] = 0; + close(handle); + exitflag = 0; + ap.pointer = data; + ap.line = ap.column = 1; + perform_action(ap); + st[errorlevel_index].data.integer = exitcode; + exitflag = exitcode = 0; + return; +} + +internal_commands_descriptor internal_commands[] = { + {"ECHO", echo}, + {"EXIT", exit_script}, + {"FILES", files}, + {"PAUSE", pause}, +// {"RETURN", return_script}, + {"SUBDIRS", subdirs}, + {NULL, NULL} +}; + +struct built_ins_descriptor built_ins[] = { + {"file_exists", file_exists}, + {"directory_exists", directory_exists}, + {"string_length", string_length}, + {"file_length", get_file_length}, + {"disk_space", disk_space}, + {"file_time", file_time}, + {NULL, NULL} +}; + +void set_extension(char *path, char *e) { + char s[MAXPATH]; + char drive[MAXDRIVE]; + char dir[MAXDIR]; + char file[MAXFILE]; + char ext[MAXEXT]; + + fnsplit(path,drive,dir,file,ext); + fnmerge(s, drive, dir, file, e); + ++sa << s; +} + +/* + Note that if this program is called without any arguments, it looks for a + script with the same name as the executable. Thus, to make an install + program that picks up the install script without any arguments, you simply + rename DSL.EXE to INSTALL.EXE. Then when you run it without any arguments + it will run the INSTALL.DSL script. +*/ + +void main(int argc, char *argv[]) { + int arg_number = 0; + int i = 1; + int j = 0; + + init_dos_internals(); + set_arg(j++, argv[0]); + if (argc > i && (argv[i][0] == '/' || argv[i][0] == '-')) { + if (toupper(argv[i][1]) != 'D') { + printf("Unrecognized switch -- /%s\n",argv[i][1]); + return; + } + debug_switch = 1; + i++; + } + if (argc > i) arg_number = i++; + set_extension(argv[arg_number], "DSL"); + set_arg(j++,copy(sa)); + while (i < argc) set_arg(j++, argv[i++]); + define_integer("argc", j); + invoke_script(); // Takes file name from sa + exit(exitcode); +} +#line - "dsl.cpp" + +#ifndef CONVERT_CASE +#define CONVERT_CASE(c) (c) +#endif +#ifndef TAB_SPACING +#define TAB_SPACING 8 +#endif + +static void ag_rp_1(void) { +#line - "dsl.syn" + lookup(); +#line - "dsl.cpp" +} + +static void ag_rp_2(void) { +#line - "dsl.syn" + sa << '['; +#line - "dsl.cpp" +} + +static void ag_rp_3(void) { +#line - "dsl.syn" + concat(sa) << ']', lookup(); +#line - "dsl.cpp" +} + +static void ag_rp_4(void) { +#line - "dsl.syn" + concat(sa); +#line - "dsl.cpp" +} + +static void ag_rp_5(void) { +#line - "dsl.syn" + concat(sa); +#line - "dsl.cpp" +} + +static void ag_rp_6(int c) { +#line - "dsl.syn" + ++sa << c; +#line - "dsl.cpp" +} + +static void ag_rp_7(int c) { +#line - "dsl.syn" + sa << c; +#line - "dsl.cpp" +} + +static void ag_rp_8(void) { +#line - "dsl.syn" + action_string(); +#line - "dsl.cpp" +} + +static void ag_rp_9(void) { +#line - "dsl.syn" + as << CONTEXT; +#line - "dsl.cpp" +} + +static void ag_rp_10(void) { +#line - "dsl.syn" + --sa; +#line - "dsl.cpp" +} + +static void ag_rp_11(void) { +#line - "dsl.syn" +action_pointer a; as >> a; +#line - "dsl.cpp" +} + +static void ag_rp_12(void) { +#line - "dsl.syn" + ++sa; +#line - "dsl.cpp" +} + +static void ag_rp_13(int c) { +#line - "dsl.syn" + sa << c; +#line - "dsl.cpp" +} + +static void ag_rp_14(void) { +#line - "dsl.syn" + sa << '('; +#line - "dsl.cpp" +} + +static void ag_rp_15(void) { +#line - "dsl.syn" + concat(sa) << ')'; +#line - "dsl.cpp" +} + +static void ag_rp_16(void) { +#line - "dsl.syn" + ++sa; +#line - "dsl.cpp" +} + +static void ag_rp_17(int c) { +#line - "dsl.syn" + sa << c; +#line - "dsl.cpp" +} + +static void ag_rp_18(int c) { +#line - "dsl.syn" + sa << c; +#line - "dsl.cpp" +} + +static int ag_rp_19(void) { +#line - "dsl.syn" + return '\a'; +#line - "dsl.cpp" +} + +static int ag_rp_20(void) { +#line - "dsl.syn" + return '\b'; +#line - "dsl.cpp" +} + +static int ag_rp_21(void) { +#line - "dsl.syn" + return '\f'; +#line - "dsl.cpp" +} + +static int ag_rp_22(void) { +#line - "dsl.syn" + return '\n'; +#line - "dsl.cpp" +} + +static int ag_rp_23(void) { +#line - "dsl.syn" + return '\r'; +#line - "dsl.cpp" +} + +static int ag_rp_24(void) { +#line - "dsl.syn" + return '\t'; +#line - "dsl.cpp" +} + +static int ag_rp_25(void) { +#line - "dsl.syn" + return '\v'; +#line - "dsl.cpp" +} + +static int ag_rp_26(void) { +#line - "dsl.syn" + return '\\'; +#line - "dsl.cpp" +} + +static int ag_rp_27(void) { +#line - "dsl.syn" + return '\?'; +#line - "dsl.cpp" +} + +static int ag_rp_28(void) { +#line - "dsl.syn" + return '\''; +#line - "dsl.cpp" +} + +static int ag_rp_29(void) { +#line - "dsl.syn" + return '"'; +#line - "dsl.cpp" +} + +static int ag_rp_30(int d) { +#line - "dsl.syn" + return d-'0'; +#line - "dsl.cpp" +} + +static int ag_rp_31(int n, int d) { +#line - "dsl.syn" + return 8*n + d-'0'; +#line - "dsl.cpp" +} + +static int ag_rp_32(int n, int d) { +#line - "dsl.syn" + return 8*n + d-'0'; +#line - "dsl.cpp" +} + +static int ag_rp_33(long n) { +#line - "dsl.syn" + return (int) n; +#line - "dsl.cpp" +} + +static long ag_rp_34(long n, long d) { +#line - "dsl.syn" + return 16*n + d; +#line - "dsl.cpp" +} + +static void ag_rp_35(void) { +#line - "dsl.syn" + exec(); +#line - "dsl.cpp" +} + +static void ag_rp_36(void) { +#line - "dsl.syn" + exec_redirect_in(); +#line - "dsl.cpp" +} + +static void ag_rp_37(char * file) { +#line - "dsl.syn" + exec_pipe_in(file); +#line - "dsl.cpp" +} + +static void ag_rp_38(char * file) { +#line - "dsl.syn" + grab_output(file); +#line - "dsl.cpp" +} + +static void ag_rp_39(char * file) { +#line - "dsl.syn" + append_output(file); +#line - "dsl.cpp" +} + +static char * ag_rp_40(void) { +#line - "dsl.syn" + return exec_pipe_out(); +#line - "dsl.cpp" +} + +static char * ag_rp_41(void) { +#line - "dsl.syn" + return exec_redirect_in_pipe_out(); +#line - "dsl.cpp" +} + +static char * ag_rp_42(char * file) { +#line - "dsl.syn" + return exec_pipe_in_pipe_out(file); +#line - "dsl.cpp" +} + +static void ag_rp_43(void) { +#line - "dsl.syn" + sa << 0, ++ps << sa; +#line - "dsl.cpp" +} + +static void ag_rp_44(void) { +#line - "dsl.syn" + ps << sa, sa << 0; +#line - "dsl.cpp" +} + +static void ag_rp_45(void) { +#line - "dsl.syn" + ps << sa, sa << 0; +#line - "dsl.cpp" +} + +static void ag_rp_46(int pc) { +#line - "dsl.syn" + do_if(pc,1); +#line - "dsl.cpp" +} + +static int ag_rp_47(int cc) { +#line - "dsl.syn" + return cc; +#line - "dsl.cpp" +} + +static int ag_rp_48(int cc) { +#line - "dsl.syn" + return cc; +#line - "dsl.cpp" +} + +static int ag_rp_49(int pc, int cc) { +#line - "dsl.syn" + return do_if(pc,cc!=0); +#line - "dsl.cpp" +} + +static int ag_rp_50(long cc) { +#line - "dsl.syn" + return (int) cc; +#line - "dsl.cpp" +} + +static int ag_rp_51(int cc) { +#line - "dsl.syn" + return do_if(0,cc != 0); +#line - "dsl.cpp" +} + +static void ag_rp_52(unsigned v) { +#line - "dsl.syn" + assign_value(v); +#line - "dsl.cpp" +} + +static void ag_rp_53(unsigned v, long x) { +#line - "dsl.syn" + st[v].data.integer = (int) x; +#line - "dsl.cpp" +} + +static void ag_rp_54(unsigned v) { +#line - "dsl.syn" + st[v].data.text = copy(sa--); +#line - "dsl.cpp" +} + +static void ag_rp_55(unsigned v, long n, long x) { +#line - "dsl.syn" + st[v].data.text[(unsigned)n] = (int) x; +#line - "dsl.cpp" +} + +static unsigned ag_rp_56(void) { +#line - "dsl.syn" + return check_integer(); +#line - "dsl.cpp" +} + +static void ag_rp_57(long cc) { +#line - "dsl.syn" + do_while(cc != 0); +#line - "dsl.cpp" +} + +static void ag_rp_58(void) { +#line - "dsl.syn" + do_for_loop(); +#line - "dsl.cpp" +} + +static void ag_rp_59(int n) { +#line - "dsl.syn" + define_action(n); +#line - "dsl.cpp" +} + +static void ag_rp_60(long x) { +#line - "dsl.syn" + define_integer(sa--, x); +#line - "dsl.cpp" +} + +static void ag_rp_61(void) { +#line - "dsl.syn" + define_string(); +#line - "dsl.cpp" +} + +static int ag_rp_62(void) { +#line - "dsl.syn" + return 0; +#line - "dsl.cpp" +} + +static int ag_rp_63(int n) { +#line - "dsl.syn" + return n+1; +#line - "dsl.cpp" +} + +static void ag_rp_64(int c) { +#line - "dsl.syn" + ++sa << c; +#line - "dsl.cpp" +} + +static void ag_rp_65(int c) { +#line - "dsl.syn" + sa << c; +#line - "dsl.cpp" +} + +static void ag_rp_66(int c) { +#line - "dsl.syn" + sa << c; +#line - "dsl.cpp" +} + +static long ag_rp_67(long c, long x, long y) { +#line - "dsl.syn" + return c != 0 ? x : y; +#line - "dsl.cpp" +} + +static long ag_rp_68(long x, long y) { +#line - "dsl.syn" + return x != 0 || y!=0; +#line - "dsl.cpp" +} + +static long ag_rp_69(long x, long y) { +#line - "dsl.syn" + return x != 0 && y !=0; +#line - "dsl.cpp" +} + +static long ag_rp_70(long x, long y) { +#line - "dsl.syn" + return x | y; +#line - "dsl.cpp" +} + +static long ag_rp_71(long x, long y) { +#line - "dsl.syn" + return x ^ y; +#line - "dsl.cpp" +} + +static long ag_rp_72(long x, long y) { +#line - "dsl.syn" + return x & y; +#line - "dsl.cpp" +} + +static long ag_rp_73(long x, long y) { +#line - "dsl.syn" + return x == y; +#line - "dsl.cpp" +} + +static long ag_rp_74(long x, long y) { +#line - "dsl.syn" + return x != y; +#line - "dsl.cpp" +} + +static long ag_rp_75(void) { +#line - "dsl.syn" + return string_comp() == 0; +#line - "dsl.cpp" +} + +static long ag_rp_76(void) { +#line - "dsl.syn" + return string_comp() != 0; +#line - "dsl.cpp" +} + +static long ag_rp_77(long x, long y) { +#line - "dsl.syn" + return x < y; +#line - "dsl.cpp" +} + +static long ag_rp_78(long x, long y) { +#line - "dsl.syn" + return x > y; +#line - "dsl.cpp" +} + +static long ag_rp_79(long x, long y) { +#line - "dsl.syn" + return x <= y; +#line - "dsl.cpp" +} + +static long ag_rp_80(long x, long y) { +#line - "dsl.syn" + return x >= y; +#line - "dsl.cpp" +} + +static long ag_rp_81(void) { +#line - "dsl.syn" + return string_comp() < 0; +#line - "dsl.cpp" +} + +static long ag_rp_82(void) { +#line - "dsl.syn" + return string_comp() > 0; +#line - "dsl.cpp" +} + +static long ag_rp_83(void) { +#line - "dsl.syn" + return string_comp() <= 0; +#line - "dsl.cpp" +} + +static long ag_rp_84(void) { +#line - "dsl.syn" + return string_comp() >= 0; +#line - "dsl.cpp" +} + +static long ag_rp_85(long x, long y) { +#line - "dsl.syn" + return x << y; +#line - "dsl.cpp" +} + +static long ag_rp_86(long x, long y) { +#line - "dsl.syn" + return x >> y; +#line - "dsl.cpp" +} + +static long ag_rp_87(long x, long y) { +#line - "dsl.syn" + return x + y; +#line - "dsl.cpp" +} + +static long ag_rp_88(long x, long y) { +#line - "dsl.syn" + return x - y; +#line - "dsl.cpp" +} + +static long ag_rp_89(long x, long y) { +#line - "dsl.syn" + return x * y; +#line - "dsl.cpp" +} + +static long ag_rp_90(long x, long y) { +#line - "dsl.syn" + return x / y; +#line - "dsl.cpp" +} + +static long ag_rp_91(long x, long y) { +#line - "dsl.syn" + return x % y; +#line - "dsl.cpp" +} + +static long ag_rp_92(long x) { +#line - "dsl.syn" + assert(x); + return x; + +#line - "dsl.cpp" +} + +static long ag_rp_93(long x) { +#line - "dsl.syn" + return x; +#line - "dsl.cpp" +} + +static long ag_rp_94(long x) { +#line - "dsl.syn" + return -x; +#line - "dsl.cpp" +} + +static long ag_rp_95(long x) { +#line - "dsl.syn" + return ~x; +#line - "dsl.cpp" +} + +static long ag_rp_96(long x) { +#line - "dsl.syn" + return !x; +#line - "dsl.cpp" +} + +static long ag_rp_97(long n) { +#line - "dsl.syn" + return ((unsigned char *) sa--)[(unsigned) n]; +#line - "dsl.cpp" +} + +static long ag_rp_98(void) { +#line - "dsl.syn" + long temp; + sscanf(sa--, "%ld", &temp); + return temp; + +#line - "dsl.cpp" +} + +static long ag_rp_99(long x) { +#line - "dsl.syn" + return x; +#line - "dsl.cpp" +} + +static long ag_rp_100(long x) { +#line - "dsl.syn" + return (*st[(unsigned)x].data.func)(); +#line - "dsl.cpp" +} + +static long ag_rp_101(void) { +#line - "dsl.syn" + return name_type(); +#line - "dsl.cpp" +} + +static void ag_rp_102(void) { +#line - "dsl.syn" + concat(sa); +#line - "dsl.cpp" +} + +static void ag_rp_103(long first, long last) { +#line - "dsl.syn" + extract((unsigned)first, (unsigned) last); +#line - "dsl.cpp" +} + +static void ag_rp_104(void) { +#line - "dsl.syn" + sa << '['; +#line - "dsl.cpp" +} + +static void ag_rp_105(void) { +#line - "dsl.syn" + concat(sa) << ']', lookup(); +#line - "dsl.cpp" +} + +static void ag_rp_106(long x) { +#line - "dsl.syn" + ++sa << st[(unsigned)x].data.text; +#line - "dsl.cpp" +} + +static void ag_rp_107(long x) { +#line - "dsl.syn" + ++sa << sd[(unsigned)x]; +#line - "dsl.cpp" +} + +static void ag_rp_108(void) { +#line - "dsl.syn" + action_string(); +#line - "dsl.cpp" +} + +static void ag_rp_109(long x) { +#line - "dsl.syn" + ++sa,sa.printf("%ld",x); +#line - "dsl.cpp" +} + +static long ag_rp_110(void) { +#line - "dsl.syn" + return 0; +#line - "dsl.cpp" +} + +static long ag_rp_111(long x, long d) { +#line - "dsl.syn" + return 16*x + d-'0'; +#line - "dsl.cpp" +} + +static long ag_rp_112(int d) { +#line - "dsl.syn" + return (d&7) + 9; +#line - "dsl.cpp" +} + +static long ag_rp_113(void) { +#line - "dsl.syn" + return 0; +#line - "dsl.cpp" +} + +static long ag_rp_114(long n, int d) { +#line - "dsl.syn" + return 8*n + d-'0'; +#line - "dsl.cpp" +} + +static long ag_rp_115(int d) { +#line - "dsl.syn" + return d-'0'; +#line - "dsl.cpp" +} + +static long ag_rp_116(long n, int d) { +#line - "dsl.syn" + return 10*n + d-'0'; +#line - "dsl.cpp" +} + +static int ag_rp_117(int c) { +#line - "dsl.syn" + return c; +#line - "dsl.cpp" +} + +static void ag_rp_118(screen_descriptor * scd) { +#line - "dsl.syn" + display_queries(scd); +#line - "dsl.cpp" +} + +static screen_descriptor * ag_rp_119(void) { +#line - "dsl.syn" + return reset(qs), new screen_descriptor; +#line - "dsl.cpp" +} + +static screen_descriptor * ag_rp_120(screen_descriptor * scd) { +#line - "dsl.syn" + return scd->title = formula(), scd; +#line - "dsl.cpp" +} + +static screen_descriptor * ag_rp_121(screen_descriptor * scd, int c) { +#line - "dsl.syn" + return scd->color = c, scd; +#line - "dsl.cpp" +} + +static screen_descriptor * ag_rp_122(screen_descriptor * scd, int c) { +#line - "dsl.syn" + return scd->entry_color = c, scd; +#line - "dsl.cpp" +} + +static screen_descriptor * ag_rp_123(screen_descriptor * scd, int c) { +#line - "dsl.syn" + return scd->highlight_color = c, scd; +#line - "dsl.cpp" +} + +static screen_descriptor * ag_rp_124(screen_descriptor * scd, long w, long h) { +#line - "dsl.syn" + return scd->width = (unsigned)w, scd->height = (unsigned) h, scd; +#line - "dsl.cpp" +} + +static screen_descriptor * ag_rp_125(screen_descriptor * scd, long x, long y) { +#line - "dsl.syn" + return scd->pos.x = (unsigned) x,scd->pos.y = (unsigned) y, scd; +#line - "dsl.cpp" +} + +static screen_descriptor * ag_rp_126(screen_descriptor * scd, query_item * q) { +#line - "dsl.syn" + return qs << *q, delete q, scd; +#line - "dsl.cpp" +} + +static screen_descriptor * ag_rp_127(screen_descriptor * scd, query_item * q) { +#line - "dsl.syn" + return qs << *q, delete q, scd; +#line - "dsl.cpp" +} + +static int ag_rp_128(long fg, long bg) { +#line - "dsl.syn" + return COLOR((unsigned)fg,(unsigned)bg); +#line - "dsl.cpp" +} + +static query_item * ag_rp_129(void) { +#line - "dsl.syn" + return clear(new query_item); +#line - "dsl.cpp" +} + +static query_item * ag_rp_130(query_item * q) { +#line - "dsl.syn" + return q->id = sd << sa--, q; +#line - "dsl.cpp" +} + +static query_item * ag_rp_131(query_item * q) { +#line - "dsl.syn" + return q->value = formula(), q; +#line - "dsl.cpp" +} + +static query_item * ag_rp_132(query_item * q) { +#line - "dsl.syn" + return q->prompt = formula(), q; +#line - "dsl.cpp" +} + +static query_item * ag_rp_133(query_item * q) { +#line - "dsl.syn" + return q->explanation = formula(),q; +#line - "dsl.cpp" +} + +static query_item * ag_rp_134(void) { +#line - "dsl.syn" + return clear(new query_item); +#line - "dsl.cpp" +} + +static query_item * ag_rp_135(query_item * q) { +#line - "dsl.syn" + return q->prompt = formula(), q; +#line - "dsl.cpp" +} + +static query_item * ag_rp_136(query_item * q) { +#line - "dsl.syn" + return q->explanation = formula(),q; +#line - "dsl.cpp" +} + +static query_item * ag_rp_137(query_item * q) { +#line - "dsl.syn" + return q->action = copy_action(), q; +#line - "dsl.cpp" +} + +static void ag_rp_138(void) { +#line - "dsl.syn" + reset(is) << (sd << sa--); +#line - "dsl.cpp" +} + +static void ag_rp_139(void) { +#line - "dsl.syn" + is << (sd << sa--); +#line - "dsl.cpp" +} + +static void ag_rp_140(void) { +#line - "dsl.syn" + sa << '['; +#line - "dsl.cpp" +} + +static void ag_rp_141(void) { +#line - "dsl.syn" + concat(sa) << ']'; +#line - "dsl.cpp" +} + + +#define READ_COUNTS +#define WRITE_COUNTS +#undef V +#define V(i,t) (*t (&(PCB).vs[(PCB).ssx + i])) +#undef VS +#define VS(i) (PCB).vs[(PCB).ssx + i] + +#ifndef GET_CONTEXT +#define GET_CONTEXT CONTEXT = (PCB).input_context +#endif + +typedef enum { + ag_action_1, + ag_action_2, + ag_action_3, + ag_action_4, + ag_action_5, + ag_action_6, + ag_action_7, + ag_action_8, + ag_action_9, + ag_action_10, + ag_action_11, + ag_action_12 +} ag_parser_action; + + +#ifndef NULL_VALUE_INITIALIZER +#define NULL_VALUE_INITIALIZER = { 0 } +#endif + +static dsl_vs_type const ag_null_value NULL_VALUE_INITIALIZER; + +static const unsigned char far ag_rpx[] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 2, 3, 0, 4, 0, 5, 6, 7, 0, 8, 0, 9, + 10, 0, 11, 0, 0, 12, 0, 13, 14, 15, 0, 16, 0, 17, 18, 19, 20, 21, + 22, 23, 24, 25, 26, 27, 28, 29, 0, 0, 0, 0, 0, 30, 31, 32, 33, 0, + 34, 0, 0, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 46, 0, 47, 48, 49, 50, 51, 0, 0, 0, 0, + 0, 0, 0, 0, 52, 0, 0, 53, 54, 55, 56, 57, 0, 0, 58, 59, 60, 61, + 62, 0, 0, 63, 64, 65, 66, 0, 67, 0, 68, 0, 69, 0, 70, 0, 71, 0, + 72, 0, 73, 74, 75, 76, 0, 77, 78, 79, 80, 81, 82, 83, 84, 0, 85, 86, + 0, 87, 88, 0, 89, 90, 91, 92, 0, 93, 94, 95, 96, 0, 0, 97, 98, 0, + 99,100, 0,101, 0,102, 0,103,104,105, 0,106,107,108,109, 0, 0, 0, + 0, 0, 0,110,111, 0,112,113,114,115,116,117, 0, 0,118,119, 0,120, + 121,122,123,124,125,126,127,128,129, 0,130,131,132,133,134, 0,135,136, + 137,138,139, 0, 0, 0,140,141 +}; + +static const unsigned char far ag_key_itt[] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0 +}; + +static const unsigned short far ag_key_pt[] = { + 0,211, 0,214, 0,218, 0,221, 0,220, 0,219, 0,223, 0,224, + 0,225, 0,162, 0,163, 0,247, 0,248, 0,249, 0,250, 0,252, + 0,253, 0,254, 0,255, 0,256, 0,257, 0,258, 0,259, 0,260, +0 +}; + +static const unsigned char far ag_key_ch[] = { + 0, 42, 47,255, 47, 97,105,115,255, 42, 47,255, 42, 47,255, 88,120,255, + 60, 61,255, 61, 62,255,101,111,255,108,110,120,255,105,111,255,116,255, + 102,110,255, 99,105,116,255, 33, 38, 46, 47, 48, 60, 61, 62, 97, 98, 99, + 100,101,102,104,105,108,112,115,116,118,119,124,255, 47, 97,105,115,255, + 47,255, 42, 47,255,110,120,255,105,111,255,102,110,255, 99,105,116,255, + 47, 97, 98, 99,100,101,102,104,105,108,112,115,116,118,119,255, 42, 47, + 255,108,110,120,255,105,111,255,102,110,255, 99,105,116,255, 47, 97, 98, + 99,100,101,102,104,105,108,112,115,116,118,119,255,102,110,255, 99,116, + 255, 47, 97,102,105,115,119,255, 42, 47,255, 60, 61,255, 61, 62,255,116, + 255,110,255,105,116,255, 33, 38, 46, 47, 60, 61, 62, 97, 98, 99,101,102, + 104,105,108,115,116,124,255,102,110,255, 99,116,255, 97,102,105,115,119, + 255, 42, 47,255, 88,120,255, 47, 48,255, 88,120,255, 48,255, 47,255, 34, + 39, 63, 92, 97, 98,102,110,114,116,118,120,255, 92,255, 42, 47,255, 60, + 61,255, 61, 62,255,105,116,255, 33, 38, 46, 47, 60, 61, 62, 97, 98, 99, + 101,102,104,105,108,115,116,124,255, 42, 47,255, 47,255, 47, 62,255, 47, + 98, 99,101,102,104,108,115,116,255, 62,255, 47,119,255, 47,101,255, 88, + 120,255, 47, 48,255, 60, 61,255, 61, 62,255, 33, 38, 46, 47, 60, 61, 62, + 124,255,105,116,255, 33, 38, 46, 47, 60, 61, 62, 97, 98, 99,101,102,104, + 105,108,115,116,124,255, 60, 61,255, 61, 62,255,105,116,255, 33, 38, 46, + 47, 60, 61, 62, 97, 98, 99,101,102,104,105,108,115,116,124,255, 33, 60, + 61, 62,255,105,116,255, 33, 38, 46, 47, 61, 97, 98, 99,101,102,104,105, + 108,115,116,124,255,105,116,255, 38, 46, 47, 97, 98, 99,101,102,104,105, + 108,115,116,124,255,105,116,255, 46, 47, 97, 98, 99,101,102,104,105,108, + 115,116,124,255, 42, 47,255, 60, 61,255, 61, 62,255,108,110,255,105,116, + 255, 33, 38, 46, 47, 60, 61, 62, 97, 98, 99,100,101,102,104,105,108,115, + 116,119,124,255, 47,101,112,255, 47,100,101,112,118,255, 47, 99,255, 99, + 255,105,255, 47, 62,100,255,102,110,255, 99,116,255, 47, 97,101,102,105, + 115,119,255,101,255, 42, 47,255, 47,105,255, 47,105,255, 60, 62,255,100, + 255,105,255, 46,255, 42, 47,255,105,116,255, 33, 38, 46, 47, 60, 61, 62, + 97, 98, 99,101,102,104,105,108,115,116,124,255 +}; + +static const unsigned char far ag_key_act[] = { + 0,0,0,4,2,7,7,7,4,3,3,4,0,0,4,5,5,4,0,0,4,0,0,4,7,5,4,7,7,7,4,7,7,4,5, + 4,5,6,4,7,7,7,4,3,3,3,2,2,2,3,2,7,7,7,2,2,2,7,2,7,7,2,7,7,7,3,4,3,7,7, + 7,4,3,4,0,0,4,7,7,4,7,7,4,5,7,4,7,7,7,4,2,7,7,7,7,2,2,7,2,7,7,2,7,7,7, + 4,0,0,4,7,7,7,4,7,7,4,5,7,4,7,7,7,4,2,7,7,7,7,2,2,7,2,7,7,2,7,7,7,4,5, + 7,4,7,7,4,3,7,7,2,2,7,4,0,0,4,0,0,4,0,0,4,5,4,6,4,7,7,4,3,3,3,2,2,3,2, + 7,7,7,7,7,7,2,7,2,7,3,4,5,7,4,7,7,4,7,7,2,2,7,4,0,0,4,5,5,4,2,2,4,5,5, + 4,2,4,3,4,0,0,0,0,0,0,0,0,0,0,0,0,4,2,4,0,0,4,0,0,4,0,0,4,7,7,4,3,3,3, + 2,2,3,2,7,7,7,7,7,7,7,7,2,7,3,4,0,0,4,2,4,3,3,4,3,7,7,7,7,7,7,7,7,4,3, + 4,3,7,4,3,7,4,5,5,4,3,2,4,0,0,4,0,0,4,3,3,3,3,2,3,2,3,4,7,7,4,3,3,3,3, + 3,3,3,7,7,7,7,7,7,7,7,2,7,3,4,0,0,4,0,0,4,7,7,4,3,3,3,3,2,3,2,7,7,7,7, + 7,7,7,7,2,7,3,4,3,3,3,3,4,7,7,4,3,3,3,3,3,7,7,7,7,7,7,7,7,2,7,3,4,7,7, + 4,3,3,3,7,7,7,7,7,7,7,7,2,7,3,4,7,7,4,3,3,7,7,7,7,7,7,7,7,2,7,3,4,0,0, + 4,0,0,4,0,0,4,7,7,4,7,7,4,3,3,3,2,2,3,2,7,7,7,7,2,7,7,7,7,2,7,7,3,4,3, + 7,7,4,3,7,7,7,7,4,3,7,4,7,4,7,4,3,3,7,4,5,7,4,7,7,4,3,7,7,7,2,2,7,4,7, + 4,0,0,4,2,7,4,3,7,4,3,3,4,7,4,7,4,3,4,0,0,4,7,7,4,3,3,3,2,3,3,3,7,7,7, + 7,7,7,7,7,2,7,3,4 +}; + +static const unsigned short far ag_key_parm[] = { + 0, 15, 18, 0, 0, 12, 14, 16, 0, 14, 15, 0, 15, 18, 0, 20, 18, 0, + 236,234, 0,235,210, 0, 40, 10, 0, 0, 26, 44, 0, 36, 6, 0, 14, 0, + 2, 8, 0, 22, 30, 16, 0,233,229,246, 0, 0, 0,232, 0, 12, 46, 34, + 0, 0, 0, 28, 0, 32, 42, 0, 24, 38, 4,228, 0, 18, 12, 14, 16, 0, + 15, 0, 15, 18, 0, 26, 44, 0, 36, 6, 0, 2, 14, 0, 22, 30, 16, 0, + 0, 12, 46, 34, 40, 0, 0, 28, 0, 32, 42, 0, 24, 38, 4, 0, 15, 18, + 0, 0, 26, 44, 0, 36, 6, 0, 2, 14, 0, 22, 30, 16, 0, 0, 12, 46, + 34, 40, 0, 0, 28, 0, 32, 42, 0, 24, 38, 4, 0, 2, 14, 0, 22, 16, + 0, 18, 12, 6, 0, 0, 4, 0, 15, 18, 0,236,234, 0,235,210, 0, 14, + 0, 8, 0, 30, 16, 0,233,229,246, 0, 0,232, 0, 12, 46, 34, 26, 36, + 28, 0, 32, 0, 24,228, 0, 2, 14, 0, 22, 16, 0, 12, 6, 0, 0, 4, + 0, 15, 18, 0, 20, 18, 0, 0, 0, 0, 20, 18, 0, 0, 0, 18, 0, 64, + 63, 62, 61, 54, 55, 56, 57, 58, 59, 60, 72, 0, 0, 0, 15, 18, 0,236, + 234, 0,235,210, 0, 30, 16, 0,233,229,246, 0, 0,232, 0, 12, 46, 34, + 26, 36, 28, 14, 32, 0, 24,228, 0, 15, 18, 0, 0, 0, 18,210, 0, 18, + 46, 34, 26, 36, 28, 32, 30, 24, 0,210, 0, 18, 4, 0, 18, 0, 0, 20, + 18, 0, 15, 0, 0,236,234, 0,235,210, 0,233,229,246, 18, 0,232, 0, + 228, 0, 30, 16, 0,233,229,246, 18,234,232,235, 12, 46, 34, 26, 36, 28, + 14, 32, 0, 24,228, 0,236,234, 0,235,210, 0, 30, 16, 0,233,229,246, + 18, 0,232, 0, 12, 46, 34, 26, 36, 28, 14, 32, 0, 24,228, 0,233,234, + 232,235, 0, 30, 16, 0,233,229,246, 18,232, 12, 46, 34, 26, 36, 28, 14, + 32, 0, 24,228, 0, 30, 16, 0,229,246, 18, 12, 46, 34, 26, 36, 28, 14, + 32, 0, 24,228, 0, 30, 16, 0,246, 18, 12, 46, 34, 26, 36, 28, 14, 32, + 0, 24,228, 0, 15, 18, 0,236,234, 0,235,210, 0, 0, 26, 0, 30, 16, + 0,233,229,246, 0, 0,232, 0, 12, 46, 34, 10, 0, 36, 28, 14, 32, 0, + 24, 4,228, 0, 18, 44, 42, 0, 18, 40, 44, 42, 38, 0, 15, 34, 0, 34, + 0, 8, 0, 18,210, 10, 0, 2, 14, 0, 22, 16, 0, 18, 12, 0, 6, 0, + 0, 4, 0, 0, 0, 15, 18, 0, 0, 2, 0, 18, 2, 0,234,235, 0, 10, + 0, 2, 0,246, 0, 15, 18, 0, 30, 16, 0,233,229,246, 0,234,232,235, + 12, 46, 34, 26, 36, 28, 14, 32, 0, 24,228, 0 +}; + +static const unsigned short far ag_key_jmp[] = { + 0, 0, 0, 0, 1, 0, 6, 9, 0, 15, 17, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 44, 0, 0, 50, 53, 57, 0, 67, 71, 0, 0, 0, + 0, 34, 0, 96,101,104, 0, 19, 21, 23, 12, 15, 18, 25, 21, 27, 33, 39, + 24, 27, 31, 73, 36, 82, 90, 39,109,114,122,127, 0,129,131,137,140, 0, + 146, 0, 0, 0, 0,172,176, 0,186,190, 0, 0,201, 0,217,222,225, 0, + 74,148,154,160,165, 77, 80,192, 83,203,211, 86,230,235,243, 0, 0, 0, + 0,272,275,279, 0,289,293, 0, 0,304, 0,320,325,328, 0,106,248,254, + 260,265,109,113,295,116,306,314,119,333,338,346, 0, 0,362, 0,364,369, + 0,351,353,359,139,142,374, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,161, 0,431,434, 0,379,381,383,152,155,385,158,387,393,399,404,409, + 414,163,423,165,439,444, 0, 0,455, 0,457,462, 0,446,452,187,190,467, + 0, 0, 0, 0, 0, 0, 0,199,202, 0, 0, 0, 0,208, 0,472, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,215, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,529,532, 0,474,476,478,230,233,480,236,482,488,494, + 499,504,509,518,521,239,537,542, 0, 0, 0, 0,261, 0,544,546, 0,548, + 550,556,561,566,571,580,588,592, 0,597, 0,599,601, 0,606,608, 0, 0, + 0, 0,612,287, 0, 0, 0, 0, 0, 0, 0,614,616,618,620,293,622,296, + 624, 0,687,690, 0,626,628,630,632,634,636,638,640,646,652,657,662,667, + 676,679,308,695,700, 0, 0, 0, 0, 0, 0, 0,759,762, 0,702,704,706, + 708,330,710,333,712,718,724,729,734,739,748,751,336,767,772, 0,774,776, + 778,780, 0,839,842, 0,782,784,786,788,790,792,798,804,809,814,819,828, + 831,363,847,852, 0,907,910, 0,854,856,858,860,866,872,877,882,887,896, + 899,383,915,920, 0,973,976, 0,922,924,926,932,938,943,948,953,962,965, + 401,981,986, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,1015,1018, 0,1047, + 1050, 0,988,990,992,418,421,994,424,996,1002,1008,1013,427,1022,1027, + 1036,1039,430,1055,1060,1065, 0,1067,1069,1080, 0,1086,1088,1095,1106, + 1112, 0,1120,1122, 0,1127, 0,1132, 0,1134,1136,1138, 0, 0,1155, 0, + 1157,1162, 0,1140,1142,1148,1152,475,478,1167, 0,1172, 0, 0, 0, 0, + 491,1176, 0,1178,1180, 0,1182,1184, 0,1186, 0,1188, 0,1190, 0, 0, + 0, 0,1251,1254, 0,1192,1194,1196,509,1198,1200,1202,1204,1210,1216, + 1221,1226,1231,1240,1243,512,1259,1264, 0 +}; + +static const unsigned short far ag_key_index[] = { + 4, 9, 43, 67, 0, 72, 72, 72, 90,123, 0, 0, 0,145, 67, 0, 0, 0, + 168,168, 0, 0, 0, 72, 0,145,193,205, 0,211, 72,213,228, 0,242,264, + 72, 72,264,266, 72, 0, 0, 72, 0,266, 0,269, 0, 0, 0, 0,279,266, + 0,281,284,213, 0,290,299, 0,211,311, 67,228,242,242,242,264,242,242, + 290,290,290,290, 0, 0,211,211,211,211,211,339,339,358,339,358,311,366, + 386,386,386,386,404, 67, 0,205,205,205,213,433, 0, 0,228,228, 0, 72, + 0,211, 0,211, 72, 0,454, 72, 0,458, 72, 0, 72, 0,464,467,464,467, + 72, 0,213, 72, 0,469,290,211, 0,211, 0,290, 0, 0, 0,471,266,266, + 266,481,489,145, 0, 0, 0, 0, 0, 4, 0, 0,358, 0,290,211,290,211, + 290,211,211,211,211,211,290,211,290, 0,290, 0, 0, 0,290, 0,290, 0, + 211,211,211,211,211,211,290,211,290,211,211,290,211,290,211,290,211,228, + 0, 0, 0,266, 0,213, 72, 0, 72, 0,213, 0, 0, 72, 0, 72, 0,213, + 211,211,213,213,211, 0, 72, 0, 0,213,213,213,213,213,266, 0,266, 0, + 494,497,242, 0,211,311, 0,339,339,211,339,339,311,311,311,311,366,366, + 339,339,339,339,500,311,311,366,386,386,386,386, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,213,213,503,211,266,266,505, 0,507,507,290,211, + 515,213,213,213,213,213,213,290,211,211,211, 0, 0, 72, 0,213, 0,290, + 211, 0,213, 0, 0 +}; + +static const unsigned char far ag_key_ends[] = { +99,116,105,111,110,0, 110,116,0, 116,114,105,110,103,0, 47,0, +42,0, 61,0, 38,0, 46,0, 61,0, 99,116,105,111,110,0, +117,116,116,111,110,0, 111,108,111,114,0, 102,97,117,108,116,0, +115,101,0, 116,114,121,0, 112,108,97,110,97,116,105,111,110,0, +101,108,100,0, 114,0, 105,103,104,108,105,103,104,116,0, +111,99,97,116,105,111,110,0, 114,111,109,112,116,0, 114,101,101,110,0, +122,101,0, 114,105,110,103,0, 105,116,108,101,0, +97,114,105,97,98,108,101,0, 104,105,108,101,0, 124,0, 47,0, +99,116,105,111,110,0, 110,116,0, 116,114,105,110,103,0, 42,0, +99,116,105,111,110,0, 117,116,116,111,110,0, 111,108,111,114,0, +101,102,97,117,108,116,0, 116,114,121,0, +112,108,97,110,97,116,105,111,110,0, 101,108,100,0, 114,0, +105,103,104,108,105,103,104,116,0, 116,0, 111,99,97,116,105,111,110,0, +114,111,109,112,116,0, 114,101,101,110,0, 122,101,0, +114,105,110,103,0, 105,116,108,101,0, 97,114,105,97,98,108,101,0, +104,105,108,101,0, 99,116,105,111,110,0, 117,116,116,111,110,0, +111,108,111,114,0, 101,102,97,117,108,116,0, 115,101,0, +116,114,121,0, 112,108,97,110,97,116,105,111,110,0, 101,108,100,0, +114,0, 105,103,104,108,105,103,104,116,0, 116,0, +111,99,97,116,105,111,110,0, 114,111,109,112,116,0, 114,101,101,110,0, +122,101,0, 114,105,110,103,0, 105,116,108,101,0, +97,114,105,97,98,108,101,0, 104,105,108,101,0, 47,0, +99,116,105,111,110,0, 111,114,0, 116,0, 114,101,101,110,0, +114,105,110,103,0, 104,105,108,101,0, 61,0, 38,0, 46,0, 61,0, +99,116,105,111,110,0, 117,116,116,111,110,0, 111,108,111,114,0, +110,116,114,121,0, 105,101,108,100,0, 105,103,104,108,105,103,104,116,0, +111,99,97,116,105,111,110,0, 122,101,0, 114,105,110,103,0, +105,116,108,101,0, 124,0, 99,116,105,111,110,0, 111,114,0, 116,0, +114,101,101,110,0, 114,105,110,103,0, 104,105,108,101,0, 47,0, +61,0, 38,0, 46,0, 61,0, 99,116,105,111,110,0, 117,116,116,111,110,0, +111,108,111,114,0, 110,116,114,121,0, 105,101,108,100,0, +105,103,104,108,105,103,104,116,0, 110,116,0, +111,99,97,116,105,111,110,0, 122,101,0, 114,105,110,103,0, +105,116,108,101,0, 124,0, 47,0, 62,0, 47,0, 117,116,116,111,110,0, +111,108,111,114,0, 110,116,114,121,0, 105,101,108,100,0, +105,103,104,108,105,103,104,116,0, 111,99,97,116,105,111,110,0, +105,122,101,0, 105,116,108,101,0, 62,0, 47,0, 104,105,108,101,0, +47,0, 108,115,101,0, 42,0, 61,0, 38,0, 46,0, 47,0, 61,0, +124,0, 61,0, 38,0, 46,0, 47,0, 61,0, 61,0, 61,0, +99,116,105,111,110,0, 117,116,116,111,110,0, 111,108,111,114,0, +110,116,114,121,0, 105,101,108,100,0, 105,103,104,108,105,103,104,116,0, +110,116,0, 111,99,97,116,105,111,110,0, 122,101,0, 114,105,110,103,0, +105,116,108,101,0, 124,0, 61,0, 38,0, 46,0, 47,0, 61,0, +99,116,105,111,110,0, 117,116,116,111,110,0, 111,108,111,114,0, +110,116,114,121,0, 105,101,108,100,0, 105,103,104,108,105,103,104,116,0, +110,116,0, 111,99,97,116,105,111,110,0, 122,101,0, 114,105,110,103,0, +105,116,108,101,0, 124,0, 61,0, 61,0, 61,0, 61,0, 61,0, 38,0, +46,0, 47,0, 61,0, 99,116,105,111,110,0, 117,116,116,111,110,0, +111,108,111,114,0, 110,116,114,121,0, 105,101,108,100,0, +105,103,104,108,105,103,104,116,0, 110,116,0, +111,99,97,116,105,111,110,0, 122,101,0, 114,105,110,103,0, +105,116,108,101,0, 124,0, 38,0, 46,0, 47,0, 99,116,105,111,110,0, +117,116,116,111,110,0, 111,108,111,114,0, 110,116,114,121,0, +105,101,108,100,0, 105,103,104,108,105,103,104,116,0, 110,116,0, +111,99,97,116,105,111,110,0, 122,101,0, 114,105,110,103,0, +105,116,108,101,0, 124,0, 46,0, 47,0, 99,116,105,111,110,0, +117,116,116,111,110,0, 111,108,111,114,0, 110,116,114,121,0, +105,101,108,100,0, 105,103,104,108,105,103,104,116,0, 110,116,0, +111,99,97,116,105,111,110,0, 122,101,0, 114,105,110,103,0, +105,116,108,101,0, 124,0, 61,0, 38,0, 46,0, 61,0, +99,116,105,111,110,0, 117,116,116,111,110,0, 111,108,111,114,0, +111,0, 115,101,0, 116,114,121,0, 105,101,108,100,0, +105,103,104,108,105,103,104,116,0, 110,116,0, +111,99,97,116,105,111,110,0, 122,101,0, 114,105,110,103,0, +105,116,108,101,0, 104,105,108,101,0, 124,0, 47,0, +120,112,108,97,110,97,116,105,111,110,0, 114,111,109,112,116,0, +47,0, 101,102,97,117,108,116,0, 120,112,108,97,110,97,116,105,111,110,0, +114,111,109,112,116,0, 97,114,105,97,98,108,101,0, 42,0, +111,108,111,114,0, 111,108,111,114,0, 110,0, 47,0, 62,0, 111,0, +47,0, 99,116,105,111,110,0, 108,115,101,0, 111,114,0, 116,0, +114,101,101,110,0, 114,105,110,103,0, 104,105,108,101,0, +108,115,101,0, 102,0, 47,0, 102,0, 61,0, 61,0, 111,0, 102,0, +46,0, 61,0, 38,0, 46,0, 61,0, 61,0, 61,0, 99,116,105,111,110,0, +117,116,116,111,110,0, 111,108,111,114,0, 110,116,114,121,0, +105,101,108,100,0, 105,103,104,108,105,103,104,116,0, 110,116,0, +111,99,97,116,105,111,110,0, 122,101,0, 114,105,110,103,0, +105,116,108,101,0, 124,0, +}; + +#define AG_TCV(x) ag_tcv[(x)] + +static const unsigned short far ag_tcv[] = { + 28,193,193,193,193,193,193,193,193, 11, 17, 11, 11, 11,193,193,193,193, + 193,193,193,193,193,193,193,193, 28,193,193,193,193,193, 11,243, 50,204, + 193,241,231,169,213,212,239,237,251,238,193,240,167,194,194,194,194,194, + 194,194,195,195,226,216,207,215,209,227,217,261,261,261,261,261,261,262, + 262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262, + 262,203, 70,202,230,262,193,261,261,261,261,261,261,262,262,262,262,262, + 262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,206,208,205, + 242,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193, + 193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193, + 193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193, + 193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193, + 193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193, + 193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193, + 193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193, + 193,193,193,193 +}; + +#ifndef SYNTAX_ERROR +#define SYNTAX_ERROR fprintf(stderr,"%s, line %d, column %d\n", \ + (PCB).error_message, (PCB).line, (PCB).column) +#endif + +#ifndef FIRST_LINE +#define FIRST_LINE 1 +#endif + +#ifndef FIRST_COLUMN +#define FIRST_COLUMN 1 +#endif + +#ifndef PARSER_STACK_OVERFLOW +#define PARSER_STACK_OVERFLOW {fprintf(stderr, \ + "\nParser stack overflow, line %d, column %d\n",\ + (PCB).line, (PCB).column);} +#endif + +#ifndef REDUCTION_TOKEN_ERROR +#define REDUCTION_TOKEN_ERROR {fprintf(stderr, \ + "\nReduction token error, line %d, column %d\n", \ + (PCB).line, (PCB).column);} +#endif + + +#ifndef INPUT_CODE +#define INPUT_CODE(T) (T) +#endif + +typedef enum + {ag_accept_key, ag_set_key, ag_jmp_key, ag_end_key, ag_no_match_key, + ag_cf_accept_key, ag_cf_set_key, ag_cf_end_key} key_words; + +static void ag_get_key_word(int ag_k) { + int ag_save = (int) ((PCB).la_ptr - (PCB).pointer); + const unsigned char *ag_p; + int ag_ch; + while (1) { + switch (ag_key_act[ag_k]) { + case ag_cf_end_key: { + const unsigned char *sp = ag_key_ends + ag_key_jmp[ag_k]; + do { + if ((ag_ch = *sp++) == 0) { + int ag_k1 = ag_key_parm[ag_k]; + int ag_k2 = ag_key_pt[ag_k1]; + if (ag_key_itt[ag_k2 + CONVERT_CASE(*(PCB).la_ptr)]) goto ag_fail; + (PCB).token_number = (dsl_token_type) ag_key_pt[ag_k1 + 1]; + return; + } + } while (CONVERT_CASE(*(PCB).la_ptr++) == ag_ch); + goto ag_fail; + } + case ag_end_key: { + const unsigned char *sp = ag_key_ends + ag_key_jmp[ag_k]; + do { + if ((ag_ch = *sp++) == 0) { + (PCB).token_number = (dsl_token_type) ag_key_parm[ag_k]; + return; + } + } while (CONVERT_CASE(*(PCB).la_ptr++) == ag_ch); + } + case ag_no_match_key: +ag_fail: + (PCB).la_ptr = (PCB).pointer + ag_save; + return; + case ag_cf_set_key: { + int ag_k1 = ag_key_parm[ag_k]; + int ag_k2 = ag_key_pt[ag_k1]; + ag_k = ag_key_jmp[ag_k]; + if (ag_key_itt[ag_k2 + CONVERT_CASE(*(PCB).la_ptr)]) break; + ag_save = (int) ((PCB).la_ptr - (PCB).pointer); + (PCB).token_number = (dsl_token_type) ag_key_pt[ag_k1+1]; + break; + } + case ag_set_key: + ag_save = (int) ((PCB).la_ptr - (PCB).pointer); + (PCB).token_number = (dsl_token_type) ag_key_parm[ag_k]; + case ag_jmp_key: + ag_k = ag_key_jmp[ag_k]; + break; + case ag_accept_key: + (PCB).token_number = (dsl_token_type) ag_key_parm[ag_k]; + return; + case ag_cf_accept_key: { + int ag_k1 = ag_key_parm[ag_k]; + int ag_k2 = ag_key_pt[ag_k1]; + if (ag_key_itt[ag_k2 + CONVERT_CASE(*(PCB).la_ptr)]) + (PCB).la_ptr = (PCB).pointer + ag_save; + else (PCB).token_number = (dsl_token_type) ag_key_pt[ag_k1+1]; + return; + } + } + ag_ch = CONVERT_CASE(*(PCB).la_ptr++); + ag_p = &ag_key_ch[ag_k]; + if (ag_ch <= 255) while (*ag_p < ag_ch) ag_p++; + if (ag_ch > 255 || *ag_p != ag_ch) { + (PCB).la_ptr = (PCB).pointer + ag_save; + return; + } + ag_k = (int) (ag_p - ag_key_ch); + } +} + + +#ifndef AG_NEWLINE +#define AG_NEWLINE 10 +#endif + +#ifndef AG_RETURN +#define AG_RETURN 13 +#endif + +#ifndef AG_FORMFEED +#define AG_FORMFEED 12 +#endif + +#ifndef AG_TABCHAR +#define AG_TABCHAR 9 +#endif + +static void ag_track(void) { + int ag_k = (int) ((PCB).la_ptr - (PCB).pointer); + while (ag_k--) { + switch (*(PCB).pointer++) { + case AG_NEWLINE: + (PCB).column = 1, (PCB).line++; + case AG_RETURN: + case AG_FORMFEED: + break; + case AG_TABCHAR: + (PCB).column += (TAB_SPACING) - ((PCB).column - 1) % (TAB_SPACING); + break; + default: + (PCB).column++; + } + } +} + + +static void ag_prot(void) { + int ag_k; + ag_k = 128 - ++(PCB).btsx; + if (ag_k <= (PCB).ssx) { + (PCB).exit_flag = AG_STACK_ERROR_CODE; + PARSER_STACK_OVERFLOW; + return; + } + (PCB).bts[(PCB).btsx] = (PCB).sn; + (PCB).bts[ag_k] = (PCB).ssx; + (PCB).vs[ag_k] = (PCB).vs[(PCB).ssx]; + (PCB).ss[ag_k] = (PCB).ss[(PCB).ssx]; + (PCB).cs[ag_k] = (PCB).cs[(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).cs[(PCB).ssx] = (PCB).cs[ag_k]; + } + (PCB).token_number = (dsl_token_type) (PCB).drt; + (PCB).ssx = (PCB).dssx; + (PCB).sn = (PCB).dsn; + (PCB).drt = -1; +} + + + +static const int far ag_rtt[] = { + 102,105,100, 0,152,155,153,156, 0 +}; + +static const unsigned short far ag_tstt[] = { +225,224,223,206,28,18,17,15,11,0,2,12,13,117,197, +262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,215,213,212, + 209,208,207,206,205,204,203,202,195,194,193,169,167,70,50,17,15,14,11,0, + 12,13, +15,11,0,2,12,13, +225,224,223,206,28,18,17,0,8,22,23,24,25,26,27,41,114,115,116,198, +262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,215,213,212, + 209,208,207,206,205,204,203,202,195,194,193,169,167,70,50,17,11,0,20,21, +262,261,15,11,0,2,12,13,117,197, +262,261,15,11,0,2,12,13,117,197, +262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,195,194,193, + 169,167,70,15,11,0,2,12,13,117,197, +262,261,260,259,258,257,256,255,254,253,252,251,250,249,248,247,243,242,241, + 240,239,238,237,231,230,227,226,225,224,223,221,218,217,216,215,214,213, + 209,208,207,206,205,204,195,194,193,169,167,70,50,18,17,15,11,0,2,12,13, + 117,197, +262,261,260,259,258,257,256,255,254,253,252,251,250,249,248,247,243,242,241, + 240,239,238,237,231,230,227,226,225,224,223,221,218,217,216,215,214,213, + 211,209,208,207,206,205,204,195,194,193,169,167,70,50,28,18,17,15,11,0, + 2,12,13,117,197, +262,261,0,1,166,196, +262,261,0,1,166,196, +262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,195,194,193, + 169,167,70,0,9,201,222, +262,261,251,247,243,242,241,240,239,238,237,231,230,227,226,225,224,223,221, + 218,217,216,214,213,205,195,194,193,169,167,70,50,18,17,0,8,84,85,198, +225,224,223,206,18,17,0,8,23,24,25,41,114,115,116,198, +28,0, +262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,215,213,212, + 209,208,207,206,205,204,203,202,195,194,193,169,167,70,50,11,0, +17,0, +262,261,260,255,254,253,252,251,250,249,248,246,241,240,239,238,237,236,235, + 234,233,232,231,230,229,228,227,226,225,224,223,220,217,216,215,213,212, + 210,209,208,207,206,205,204,203,195,194,167,28,18,17,15,11,0,2,12,13, + 117,197, +262,261,260,255,254,253,252,251,250,249,248,246,241,240,239,238,237,236,235, + 234,233,232,231,230,229,228,227,226,225,224,223,220,217,216,215,213,212, + 210,209,208,207,206,205,204,203,195,194,167,28,18,17,15,11,0,2,12,13, + 117,197, +262,261,215,195,194,167,0,101,119,166,196, +262,261,215,195,194,167,0,101,119,166,196, +262,261,251,243,242,241,240,239,238,237,231,230,227,226,216,195,194,193,169, + 167,70,0, +15,11,0,2,12,13,117,197, +206,0,38,39,41, +18,17,0,8,198, +262,261,251,247,243,242,241,240,239,238,237,231,230,227,226,225,224,223,221, + 218,217,216,214,213,205,195,194,193,169,167,70,50,0,3,5,6,10,24,33,43, + 49,75,76,80,86,87,88,89,91,92,93,95,96,97,98,99,100,102,105,109,110,114, + 115,116,172,173,199,200,201, +262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,215,213,209, + 208,207,206,205,204,195,194,193,169,167,163,162,70,50,18,17,15,11,0,2, + 12,13,117,197, +262,261,215,213,206,50,0,1,5,38,39,41,45,49,101,106,150,151,155,156,166,196, + 200, +262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5, + 7,34,38,39,41,45,49,94,101,106,108,120,123,125,127,128,130,132,135,138, + 140,141,142,143,148,149,150,151,152,153,155,156,159,160,161,164,166,196, + 200,244,245, +262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,195,194,193, + 169,167,70,15,11,0,2,12,13,201, +262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,215,213,209, + 208,207,206,205,204,195,194,193,169,167,70,50,18,17,0,3,5,6,8,10,34,38, + 39,40,41,43,49,79,81,82,101,198,199,200,201, +262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,215,213,212, + 209,208,207,206,205,204,203,202,195,194,193,169,167,72,70,64,63,62,61, + 60,59,58,57,56,55,54,50,11,0,51,53,65,66,67,68,69, +262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,215,213,212, + 209,208,207,206,205,204,203,202,195,194,193,169,167,70,50,17,11,0,46,48, +260,255,254,253,252,251,250,249,248,246,241,240,239,238,237,236,235,234,233, + 232,231,230,229,228,227,226,225,224,223,217,216,215,212,210,209,208,207, + 206,205,204,203,28,18,17,15,11,0,2,12,13,117,197, +204,203,18,17,15,11,0,2,12,13,117,197, +213,15,11,0,2,12,13,117,197, +206,15,11,0,2,12,13,117,197, +262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,215,204,203, + 195,194,193,169,167,70,18,17,15,11,0,2,12,13,117,197, +203,0,29, +213,15,11,0,2,12,13,117,197, +213,0,45, +206,0,41, +262,261,15,11,0,2,12,13,117,197, +217,215,0, +204,0,34, +213,0,45, +260,255,254,253,252,250,249,248,205,18,17,0,8,40,174,176,177,178,179,181, + 182,183,184,185,190,198, +262,261,0,1,166,196, +217,215,0,101,107, +215,0,101, +215,0,101, +210,209,208,0,81,82,83, +262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,213,210,209, + 208,207,206,205,195,194,193,169,167,70,50,18,17,0,3,5,6,10,31,35,38,39, + 41,43,49,77,78,199,200,201, +206,0,38,39,41, +218,0,98,109, +211,205,18,17,0,8,84,85,198, +205,18,17,0,8,84,85,198, +205,0,40, +262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,215,213,206, + 204,195,194,193,169,167,163,162,70,50,15,11,0,2,12,13,117,197, +262,261,195,194,167,0,119,166,196, +262,261,215,213,206,50,0,1,5,38,39,41,45,49,101,106,150,151,155,156,166,196, + 200, +262,261,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5,7,34,38,39,41,45, + 49,101,108,150,151,152,153,155,156,159,160,161,164,166,196,200,244,245, +217,203,0,29,107, +225,224,223,216,206,205,204,28,18,17,0,34,103,104, +262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,215,213,212, + 209,208,207,206,205,204,203,202,195,194,193,167,72,70,64,63,62,61,60,59, + 58,57,56,55,54,50,11,0,53,65,66,67,68,69,170, +195,194,167,0, +194,167,0, +261,195,194,167,0,74, +262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,215,213,209, + 208,207,206,205,204,195,194,193,169,167,70,50,18,17,15,11,0,2,12,13,117, + 197, +260,255,254,253,252,251,250,249,248,246,241,240,239,238,237,236,235,234,233, + 232,231,230,229,228,227,226,225,224,223,217,216,215,212,210,209,208,207, + 206,205,204,203,28,18,17,15,11,0,2,12,13,117,197, +260,255,254,253,252,251,250,249,248,246,241,240,239,238,237,236,235,234,233, + 232,231,230,229,228,227,226,225,224,223,217,216,215,212,210,209,208,207, + 206,205,204,203,28,18,17,15,11,0,2,12,13,117,197, +262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,15,11,0, + 2,12,13,117,197, +262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,15,11,0, + 2,12,13,117,197, +262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,15,11,0, + 2,12,13,117,197, +262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,15,11,0, + 2,12,13,117,197, +213,0,45,154, +262,261,215,213,206,50,0,1,5,38,39,41,45,49,101,151,155,156,166,196,200, +262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5, + 7,34,38,39,41,45,49,101,108,141,142,143,148,149,150,151,152,153,155,156, + 159,160,161,164,166,196,200,244,245, +262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5, + 7,34,38,39,41,45,49,101,108,141,142,143,148,149,150,151,152,153,155,156, + 159,160,161,164,166,196,200,244,245, +262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5, + 7,34,38,39,41,45,49,101,108,141,142,143,148,149,150,151,152,153,155,156, + 159,160,161,164,166,196,200,244,245, +262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5, + 7,34,38,39,41,45,49,101,108,141,142,143,148,149,150,151,152,153,155,156, + 159,160,161,164,166,196,200,244,245, +262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5, + 7,34,38,39,41,45,49,94,101,106,108,120,123,125,127,128,130,132,135,138, + 140,141,142,143,148,149,150,151,152,153,155,156,159,160,161,164,166,196, + 200,244,245, +241,240,239,0,144,145,147, +238,237,0,141,142, +217,203,0,29,107, +236,210,0,83,139, +235,234,233,232,209,207,204,0,34,79,82,133,134,136,137, +235,234,209,207,0,79,82,136,137, +233,232,0,133,134, +231,0,131, +230,0,129, +208,0,81, +229,0,126, +228,227,0,121,124, +225,224,223,216,206,205,28,18,17,0,103,104, +262,261,251,243,242,241,240,239,238,237,231,230,227,226,216,195,194,193,169, + 167,70,0, +262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,215,213,209, + 208,207,206,205,204,195,194,193,169,167,163,162,70,50,18,17,15,11,0,2, + 12,13,117,197, +262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,215,213,209, + 208,207,206,205,204,195,194,193,169,167,163,162,70,50,18,17,15,11,0,2, + 12,13,117,197, +262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,215,213,209, + 208,207,206,205,204,195,194,193,169,167,163,162,70,50,18,17,15,11,0,2, + 12,13,117,197, +203,0,29, +262,261,260,255,254,253,252,251,250,249,248,246,243,242,241,240,239,238,237, + 236,235,234,233,232,231,230,229,228,227,226,225,224,223,219,218,217,216, + 215,213,212,211,210,209,208,207,206,205,204,203,202,195,194,193,169,167, + 70,50,28,18,17,15,11,0,2,12,13,117,197, +194,167,0, +261,195,194,167,0,73,74, +194,167,0, +194,167,0, +213,0,43, +262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,213,206,195, + 194,193,169,167,70,50,15,11,0,2,12,13,117,197, +262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,213,206,195, + 194,193,169,167,70,50,0,30, +262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5, + 7,34,38,39,41,45,49,94,101,106,108,120,123,125,127,128,130,132,135,138, + 140,141,142,143,148,149,150,151,152,153,155,156,159,160,161,164,166,196, + 200,244,245, +262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,213,195,194, + 193,169,167,70,50,0,3,5,6,10,43,49,199,200,201, +262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5, + 7,34,38,39,41,45,49,94,101,106,108,120,123,125,127,128,130,132,135,138, + 140,141,142,143,148,149,150,151,152,153,155,156,159,160,161,164,166,196, + 200,244,245, +206,15,11,0,2,12,13,117,197, +206,0,41, +259,258,206,205,18,17,0,8,38,39,40,41,188,189,198, +206,15,11,0,2,12,13,117,197, +206,0,41, +259,258,257,256,205,18,17,0,8,40,186,187,188,189,198, +215,15,11,0,2,12,13,117,197, +215,0,101, +215,15,11,0,2,12,13,117,197, +215,0,101, +254,15,11,0,2,12,13,117,197, +254,0,176,184, +254,15,11,0,2,12,13,117,197, +254,0,176,184, +215,15,11,0,2,12,13,117,197, +215,0,101, +18,17,0,8,198, +215,15,11,0,2,12,13,117,197, +215,0,101, +262,261,220,195,194,167,0,111,119,166,196, +262,261,215,213,206,204,195,194,169,167,163,162,50,15,11,0,2,12,13,117,197, +262,261,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5,7,34,38,39,41,45, + 49,101,108,150,151,152,153,155,156,159,160,161,164,166,196,200,244,245, +262,261,215,213,206,50,0,1,5,38,39,41,45,49,101,106,150,151,155,156,166,196, + 200, +262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5, + 7,34,38,39,41,45,49,94,101,106,108,120,123,125,127,128,130,132,135,138, + 140,141,142,143,148,149,150,151,152,153,155,156,159,160,161,164,166,196, + 200,244,245, +262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,213,206,195, + 194,193,169,167,70,50,0,3,5,6,10,31,35,38,39,41,43,49,199,200,201, +262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,215,213,206, + 204,195,194,193,169,167,163,162,70,50,15,11,0,2,12,13,117,197, +262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,213,206,195, + 194,193,169,167,70,50,0,3,5,6,10,31,35,38,39,41,43,49,199,200,201, +262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,213,206,195, + 194,193,169,167,70,50,0,3,5,6,10,31,35,38,39,41,43,49,199,200,201, +262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,213,195,194, + 193,169,167,70,50,0,3,5,6,10,33,43,49,76,199,200,201, +203,0,29, +204,0,34, +262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,213,206,195, + 194,193,169,167,70,50,0,3,5,6,10,31,35,38,39,41,43,49,199,200,201, +210,209,208,207,205,18,17,0,79, +262,261,251,247,243,242,241,240,239,238,237,231,230,227,226,225,224,223,221, + 218,217,216,214,213,195,194,193,169,167,70,50,18,17,0,3,5,6,8,10,24,33, + 43,49,75,76,80,89,91,92,93,95,96,97,98,99,100,102,105,109,110,114,115, + 116,172,173,198,199,200,201, +211,0,90, +262,261,251,247,243,242,241,240,239,238,237,231,230,227,226,225,224,223,221, + 218,217,216,214,213,195,194,193,169,167,70,50,18,17,0,3,5,6,8,10,24,33, + 43,49,75,76,80,89,91,92,93,95,96,97,98,99,100,102,105,109,110,114,115, + 116,172,173,198,199,200,201, +212,204,0,34,44, +217,203,0,29,107, +262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,213,206,195, + 194,193,169,167,70,50,0,158, +213,0,45, +262,261,215,213,206,50,0,1,5,38,39,41,45,49,101,150,151,155,156,166,196,200, +225,224,223,206,205,28,18,17,15,11,0,2,12,13,117,197, +169,0, +262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,213,206,195, + 194,193,169,167,70,50,0,3,5,6,10,31,35,38,39,41,43,49,199,200,201, +235,234,233,232,212,209,207,204,0,34,44,79,82,133,134,136,137, +212,0,44, +262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,15,11,0, + 2,12,13,117,197, +262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5, + 7,34,38,39,41,45,49,101,108,141,142,143,146,148,149,150,151,152,153,155, + 156,159,160,161,164,166,196,200,244,245, +262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,15,11,0, + 2,12,13,117,197, +262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5, + 7,34,38,39,41,45,49,101,108,141,142,143,146,148,149,150,151,152,153,155, + 156,159,160,161,164,166,196,200,244,245, +262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,15,11,0, + 2,12,13,117,197, +262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5, + 7,34,38,39,41,45,49,101,108,141,142,143,148,149,150,151,152,153,155,156, + 159,160,161,164,166,196,200,244,245, +262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5, + 7,34,38,39,41,45,49,101,108,140,141,142,143,148,149,150,151,152,153,155, + 156,159,160,161,164,166,196,200,244,245, +262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5, + 7,34,38,39,41,45,49,101,108,140,141,142,143,148,149,150,151,152,153,155, + 156,159,160,161,164,166,196,200,244,245, +262,261,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5,7,34,38,39,41,45, + 49,101,108,150,151,152,153,155,156,159,160,161,164,166,196,200,244,245, +262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5, + 7,34,38,39,41,45,49,101,108,138,140,141,142,143,148,149,150,151,152,153, + 155,156,159,160,161,164,166,196,200,244,245, +262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,15,11,0, + 2,12,13,117,197, +262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5, + 7,34,38,39,41,45,49,101,108,138,140,141,142,143,148,149,150,151,152,153, + 155,156,159,160,161,164,166,196,200,244,245, +262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,15,11,0, + 2,12,13,117,197, +262,261,215,213,206,50,0,1,5,38,39,41,45,49,101,106,150,151,155,156,166,196, + 200, +262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,15,11,0, + 2,12,13,117,197, +262,261,215,213,206,50,0,1,5,38,39,41,45,49,101,106,150,151,155,156,166,196, + 200, +262,261,215,213,206,50,0,1,5,38,39,41,45,49,101,106,150,151,155,156,166,196, + 200, +262,261,215,213,206,50,0,1,5,38,39,41,45,49,101,106,150,151,155,156,166,196, + 200, +262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,15,11,0, + 2,12,13,117,197, +262,261,215,213,206,50,0,1,5,38,39,41,45,49,101,106,150,151,155,156,166,196, + 200, +262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,15,11,0, + 2,12,13,117,197, +262,261,215,213,206,50,0,1,5,38,39,41,45,49,101,106,150,151,155,156,166,196, + 200, +262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5, + 7,34,38,39,41,45,49,101,108,135,138,140,141,142,143,148,149,150,151,152, + 153,155,156,159,160,161,164,166,196,200,244,245, +262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5, + 7,34,38,39,41,45,49,101,108,135,138,140,141,142,143,148,149,150,151,152, + 153,155,156,159,160,161,164,166,196,200,244,245, +262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5, + 7,34,38,39,41,45,49,101,108,135,138,140,141,142,143,148,149,150,151,152, + 153,155,156,159,160,161,164,166,196,200,244,245, +262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5, + 7,34,38,39,41,45,49,101,108,135,138,140,141,142,143,148,149,150,151,152, + 153,155,156,159,160,161,164,166,196,200,244,245, +262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5, + 7,34,38,39,41,45,49,101,106,108,132,135,138,140,141,142,143,148,149,150, + 151,152,153,155,156,159,160,161,164,166,196,200,244,245, +262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5, + 7,34,38,39,41,45,49,101,106,108,132,135,138,140,141,142,143,148,149,150, + 151,152,153,155,156,159,160,161,164,166,196,200,244,245, +262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,15,11,0, + 2,12,13,117,197, +262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5, + 7,34,38,39,41,45,49,101,106,108,130,132,135,138,140,141,142,143,148,149, + 150,151,152,153,155,156,159,160,161,164,166,196,200,244,245, +262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,15,11,0, + 2,12,13,117,197, +262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5, + 7,34,38,39,41,45,49,101,106,108,128,130,132,135,138,140,141,142,143,148, + 149,150,151,152,153,155,156,159,160,161,164,166,196,200,244,245, +262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5, + 7,34,38,39,41,45,49,101,106,108,127,128,130,132,135,138,140,141,142,143, + 148,149,150,151,152,153,155,156,159,160,161,164,166,196,200,244,245, +262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,15,11,0, + 2,12,13,117,197, +262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5, + 7,34,38,39,41,45,49,101,106,108,125,127,128,130,132,135,138,140,141,142, + 143,148,149,150,151,152,153,155,156,159,160,161,164,166,196,200,244,245, +262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,15,11,0, + 2,12,13,117,197, +262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5, + 7,34,38,39,41,45,49,101,106,108,123,125,127,128,130,132,135,138,140,141, + 142,143,148,149,150,151,152,153,155,156,159,160,161,164,166,196,200,244, + 245, +262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,15,11,0, + 2,12,13,117,197, +262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5, + 7,34,38,39,41,45,49,94,101,106,108,120,123,125,127,128,130,132,135,138, + 140,141,142,143,148,149,150,151,152,153,155,156,159,160,161,164,166,196, + 200,244,245, +261,195,194,167,0,74, +262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,215,213,212, + 209,208,207,206,205,204,203,202,195,194,193,169,167,70,50,17,11,0,46,48, +262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,213,206,195, + 194,193,169,167,70,50,0,3,5,6,10,31,35,38,39,41,43,49,199,200,201, +212,0,44, +203,0,29, +212,0,44, +18,17,0,8,198, +215,15,11,0,2,12,13,117,197, +215,0,101, +215,15,11,0,2,12,13,117,197, +215,0,101, +18,17,0,8,198, +215,0,101, +215,0,101, +215,15,11,0,2,12,13,117,197, +215,0,101, +215,15,11,0,2,12,13,117,197, +215,0,101, +18,17,0,8,198, +262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5, + 7,34,38,39,41,45,49,94,101,106,108,120,123,125,127,128,130,132,135,138, + 140,141,142,143,148,149,150,151,152,153,155,156,159,160,161,164,166,196, + 200,244,245, +262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5, + 7,34,38,39,41,45,49,94,101,106,108,120,123,125,127,128,130,132,135,138, + 140,141,142,143,148,149,150,151,152,153,155,156,159,160,161,164,166,196, + 200,244,245, +18,17,0,8,198, +18,17,0,8,198, +262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5, + 7,34,38,39,41,45,49,94,101,106,108,120,123,125,127,128,130,132,135,138, + 140,141,142,143,148,149,150,151,152,153,155,156,159,160,161,164,166,196, + 200,244,245, +262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,213,195,194, + 193,169,167,70,50,0,3,5,6,43,49,175,191,199,200,201, +262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,213,206,195, + 194,193,169,167,70,50,15,11,0,2,12,13,117,197, +262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,213,206,195, + 194,193,169,167,70,50,0,3,5,6,10,31,35,38,39,41,43,49,199,200,201, +215,0,101, +216,205,204,18,17,0,34,103,104, +216,205,18,17,0,103,104, +204,0,34, +204,0,34, +204,0,34, +262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,213,210,209, + 208,206,205,195,194,193,169,167,70,50,18,17,0,3,5,6,10,31,35,38,39,41, + 43,49,77,78,199,200,201, +262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,213,206,195, + 194,193,169,167,70,50,0,3,5,6,10,35,38,39,41,43,49,199,200,201, +204,0,34, +262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,213,206,195, + 194,193,169,167,70,50,0,3,5,6,10,31,35,38,39,41,43,49,199,200,201, +214,206,18,17,15,11,0,2,12,13,117,197, +214,206,18,17,0,8,38,39,41,84,85,198, +260,255,254,253,252,251,250,249,248,246,241,240,239,238,237,236,235,234,233, + 232,231,230,229,228,227,226,225,224,223,217,216,215,212,210,209,208,207, + 206,205,204,203,28,18,17,15,11,0,2,12,13,117,197, +262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,213,206,195, + 194,193,169,167,70,50,0,3,5,6,10,31,35,38,39,41,43,49,199,200,201, +262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5, + 7,34,38,39,41,45,49,94,101,106,108,120,123,125,127,128,130,132,135,138, + 140,141,142,143,148,149,150,151,152,153,155,156,159,160,161,164,166,196, + 200,244,245, +217,203,0,29,107, +212,204,0,34,44, +241,240,239,0,144,145,147, +241,240,239,0,144,145,147, +262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5, + 7,34,38,39,41,45,49,94,101,106,108,120,123,125,127,128,130,132,135,138, + 140,141,142,143,148,149,150,151,152,153,155,156,159,160,161,164,166,196, + 200,244,245, +238,237,0,141,142, +238,237,0,141,142, +204,0,34, +204,0,34, +204,0,34, +204,0,34, +204,0,34, +204,0,34, +236,210,0,83,139, +236,210,0,83,139, +236,210,0,83,139, +236,210,0,83,139, +235,234,209,207,204,0,34,79,82,136,137, +235,234,209,207,0,79,82,136,137, +235,234,209,207,0,79,82,136,137, +233,232,0,133,134, +231,0,131, +230,0,129, +208,0,81, +229,0,126, +226,0,122, +204,202,0,32,34, +206,0,38,39,41, +262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,213,195,194, + 193,169,167,70,50,0,3,5,6,43,49,175,191,199,200,201, +262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,213,195,194, + 193,169,167,70,50,0,3,5,6,43,49,175,191,199,200,201, +262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,213,195,194, + 193,169,167,70,50,0,3,5,6,43,49,175,191,199,200,201, +262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,213,195,194, + 193,169,167,70,50,0,3,5,6,43,49,175,191,199,200,201, +262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,213,195,194, + 193,169,167,70,50,0,3,5,6,43,49,175,191,199,200,201, +262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,195,194,193, + 169,167,70,0,3,201, +251,0,180, +251,0,180, +251,0,180, +203,0,29, +204,18,17,0,8,34,198, +219,206,204,0,34,112,113, +262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5, + 7,34,38,39,41,45,49,94,101,106,108,120,123,125,127,128,130,132,135,138, + 140,141,142,143,148,149,150,151,152,153,155,156,159,160,161,164,166,196, + 200,244,245, +210,209,208,205,18,17,0, +210,209,208,205,204,18,17,0,34, +214,0,92,93, +204,202,0,32,34, +246,0,157, +246,212,0,44,157, +262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,15,11,0, + 2,12,13,117,197, +262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5, + 7,34,38,39,41,45,49,94,101,106,108,120,123,125,127,128,130,132,135,138, + 140,141,142,143,148,149,150,151,152,153,155,156,159,160,161,164,166,196, + 200,244,245, +260,255,254,253,252,251,250,249,248,246,235,234,233,232,231,230,229,228,227, + 226,225,224,223,217,216,212,209,208,207,206,205,204,203,28,18,17,15,11, + 0,2,12,13,117,197, +204,18,17,0,8,34,198, +204,18,17,0,8,34,198, +204,18,17,0,8,34,198, +204,18,17,0,8,34,198, +204,18,17,0,8,34,198, +18,17,0,8,198, +262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,15,11,0, + 2,12,13,117,197, +262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5, + 7,34,38,39,41,45,49,94,101,106,108,120,123,125,127,128,130,132,135,138, + 140,141,142,143,148,149,150,151,152,153,155,156,159,160,161,164,166,196, + 200,244,245, +262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5, + 7,34,38,39,41,45,49,94,101,106,108,120,123,125,127,128,130,132,135,138, + 140,141,142,143,148,149,150,151,152,153,155,156,159,160,161,164,166,196, + 200,244,245, +262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5, + 7,34,38,39,41,45,49,94,101,106,108,120,123,125,127,128,130,132,135,138, + 140,141,142,143,148,149,150,151,152,153,155,156,159,160,161,164,166,196, + 200,244,245, +262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,213,206,195, + 194,193,169,167,70,50,0,192, +262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,213,195,194, + 193,169,167,70,50,0,3,5,6,43,49,191,199,200,201, +206,15,11,0,2,12,13,117,197, +206,0,38,39,41, +216,205,18,17,0,103,104, +206,0,38,39,41, +262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,15,11,0, + 2,12,13,117,197, +262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5, + 7,34,38,39,41,45,49,94,101,106,108,120,123,125,127,128,130,132,135,138, + 140,141,142,143,148,149,150,151,152,153,155,156,159,160,161,164,166,196, + 200,244,245, +262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,213,206,195, + 194,193,169,167,70,50,0,3,5,6,10,31,35,38,39,41,43,49,199,200,201, +203,0,29, +212,0,44, +204,202,0,32,34, + +}; + + +static unsigned const char far ag_astt[6809] = { + 8,8,8,8,8,8,8,1,1,7,1,1,1,1,1,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, + 9,9,9,9,9,9,9,9,9,9,9,9,9,1,3,9,7,3,1,1,9,5,3,3,1,1,1,1,1,8,1,1,7,1,0,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,8,1,7,1,1,5,5,1,1,7,1,1,1,1,3,5,5,1,1,7,1,1,1,1,3,5,5,5,5,5,5,5, + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,1,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 5,1,1,7,1,1,1,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,1,1,3,1,1,7, + 1,2,2,1,1,7,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,7,1,1,1,8,8, + 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,5,8,8,8,8,8,8,8,1,1,7,1,1,1,1, + 1,1,1,1,1,1,5,3,3,3,3,1,1,1,1,1,3,7,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, + 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,5,3,7,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1, + 1,1,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,1,1,3,1,1,1,10,10,10,7,1,2,2, + 2,1,1,1,10,10,10,7,1,2,2,2,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, + 10,10,10,10,10,4,1,1,5,1,1,1,1,3,1,7,2,1,2,1,1,5,3,1,2,2,2,1,2,2,2,2,2,2,2, + 2,2,2,2,1,1,1,1,1,2,2,1,2,8,2,2,2,2,2,2,2,7,1,3,3,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,1,1,3,1,1,1,1,1,2,7,1,1,2, + 1,2,1,1,1,1,1,1,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,7,1,1,1,1,1,2, + 1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2,2,2,1,1, + 1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,9,5,3,3,1,1,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,2,2,2,2,2,2,2,1,1,7,2,3,3,3,1,3,2,1,3,2, + 1,1,3,3,3,3,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,3,2,7,3,2,2,2,1,1,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,4,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,7,3,1,5,5,5,5,5,5,5, + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 1,1,7,1,1,1,1,3,5,5,5,5,1,1,7,1,1,1,1,3,5,1,1,7,1,1,1,1,3,5,1,1,7,1,1,1,1, + 3,10,10,10,10,10,10,10,10,10,10,10,10,10,10,5,10,5,5,5,10,10,10,10,10,10,5, + 5,1,1,7,1,1,1,1,3,1,5,1,5,1,1,7,1,1,1,1,3,1,7,1,1,7,2,5,5,1,1,7,1,1,1,1,3, + 4,4,4,1,4,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,7,3,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 7,1,2,2,1,1,7,1,1,1,7,1,1,7,1,1,1,1,7,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,5,5,5,8,1,5,2,2,2,2,2,2,2,5,5,7,2,3,3,1,1,1,2,1,2,1,1,1,1,1,1,1,1,7,2, + 1,2,1,5,3,1,8,5,1,1,7,1,1,1,1,5,1,1,7,1,1,3,1,1,7,3,5,5,5,5,5,5,5,5,5,5,5, + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,1,1,3,1,1,10,10,10,4,2,2,2,1, + 1,1,1,1,2,7,1,1,2,1,2,1,1,1,1,1,1,2,2,2,2,1,1,1,1,1,1,1,2,2,1,2,2,2,2,7,1, + 2,1,2,1,2,1,2,1,1,1,2,1,1,2,1,2,2,1,1,1,2,2,2,1,1,1,1,1,5,1,1,5,5,5,1,5,5, + 1,5,5,5,7,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,1,1, + 1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,1,1,7,1,1,1,1,1,1,1,10,10,10,5,10,10,5,2,10, + 10,10,5,2,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 5,1,1,7,1,1,1,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,1,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5, + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,1, + 1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,1,1,3,5,5,5,5,5,5,5,5,5,5, + 5,5,5,5,5,5,5,1,1,7,1,1,1,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1, + 1,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,1,1,3,1,7,1,2,1,1,1,1,1, + 2,7,1,2,2,1,2,1,1,1,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,7,1,2,1, + 2,1,2,1,2,1,1,1,2,1,1,2,1,1,1,1,2,1,2,2,1,1,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1, + 1,1,2,2,1,2,2,2,2,7,1,2,1,2,1,2,1,2,1,1,1,2,1,1,2,1,1,1,1,2,1,2,2,1,1,1,2, + 2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,7,1,2,1,2,1,2,1,2,1,1,1,2,1,1, + 2,1,1,1,1,2,1,2,2,1,1,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,7,1, + 2,1,2,1,2,1,2,1,1,1,2,1,1,2,1,1,1,1,2,1,2,2,1,1,1,2,2,2,1,1,1,1,1,1,1,1,1, + 1,1,1,1,2,2,1,2,2,2,2,7,1,1,1,1,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,2,2,1,1,1,2,2,2,1,1,1,1,1,1,5,1,1,1,1,1,5,1,1,1,1,5,1,1,1, + 1,5,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,5,1,1,1,1,1,1,5,1,1,1,5,1,1, + 5,1,1,5,1,1,5,1,1,1,5,1,1,5,5,5,1,5,5,5,5,5,7,2,2,10,10,10,10,10,10,10,10, + 10,10,10,10,10,10,10,10,10,10,10,10,10,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,1,1,3,5,5,5,5,5,5,5,5,5,5,5, + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,1,1,3,5,5,5,5,5, + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,1,1, + 3,1,4,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,1,1,3,2,2, + 7,2,1,1,1,7,1,1,2,2,5,2,2,5,2,7,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 5,5,5,5,5,1,1,7,1,1,1,1,3,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,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,7,1,1,1,1,1,2,1,2,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2,2,2,1,1,1,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,7,2,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2, + 1,2,2,2,2,7,1,1,1,1,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,2,2,1,1,1,2,2,2,1,1,1,5,1,1,7,1,1,1,1,3,1,7,2,1,1,1,1,1,1,7,3,1,1,1,2, + 1,1,1,5,1,1,7,1,1,1,1,3,1,7,2,1,1,1,1,1,1,1,7,3,1,1,1,1,1,1,5,1,1,7,1,1,1, + 1,3,1,7,1,5,1,1,7,1,1,1,1,3,1,7,1,5,1,1,7,1,1,1,1,3,1,7,1,1,5,1,1,7,1,1,1, + 1,3,1,7,1,1,5,1,1,7,1,1,1,1,3,1,7,1,1,1,7,2,1,5,1,1,7,1,1,1,1,3,1,7,1,1,1, + 1,10,10,10,7,1,2,2,2,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,1,1,3,1,1,1,1,1,1, + 2,2,1,2,2,2,2,7,1,1,1,1,1,2,1,2,1,1,1,1,1,1,1,1,2,2,1,1,1,2,2,2,1,1,1,1,1, + 1,1,1,2,7,1,1,2,1,2,1,1,1,1,1,1,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2, + 2,7,1,1,1,1,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2, + 1,1,1,2,2,2,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,7,2,3, + 3,1,1,1,2,1,2,1,1,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 5,5,5,5,1,1,7,1,1,1,1,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2, + 7,2,3,3,1,1,1,2,1,2,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2, + 2,2,2,7,2,3,3,1,1,1,2,1,2,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,7,2,3,3,1,1,1,1,1,1,1,1,1,5,1,1,4,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,1,2,2,2,2,2,2,2,5,2,3,3,1,1,1,2,1,2,1,1,1,1,1,4,4,4,1,4,4,4,7,1,2,2, + 2,1,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,2,2,1,2,2,2,2,2,2,2,2,1,1,5,1,3,3,3,1, + 3,1,1,1,3,1,1,3,2,1,1,3,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,1,2,2,2,1, + 2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,2,2,1,2,2,2,2,2,2,2,2,1,1,5,1,3,3,3,1,3,1, + 1,1,3,1,1,3,2,1,1,3,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,3,1,1,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,7,1,1,7,1,1,1,1,1,1,2, + 7,1,1,2,1,2,1,1,1,1,1,2,2,2,2,1,5,5,5,5,5,5,5,5,1,1,7,1,1,1,1,3,2,7,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,7,2,3,3,1,1,1,2,1,2,1,1,1,1,1, + 1,1,1,1,1,1,1,1,7,1,3,1,1,1,1,1,1,1,7,2,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 1,1,7,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,7,1,2,1,2,1,2,1,2,1,1,1, + 2,1,1,2,2,1,1,1,1,2,1,2,2,1,1,1,2,2,2,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 5,5,1,1,7,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,7,1,2,1,2,1,2,1,2,1, + 1,1,2,1,1,2,2,1,1,1,1,2,1,2,2,1,1,1,2,2,2,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5, + 5,5,5,5,1,1,7,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,7,1,2,1,2,1,2,1, + 2,1,1,1,2,1,1,2,1,1,1,1,2,1,2,2,1,1,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2, + 1,2,2,2,2,7,1,1,1,1,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2,2,2,1, + 1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,7,1,1,1,1,1,2,1,2,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,2,2,1,1,1,2,2,2,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,7,1,2,1,2,1,2,1, + 2,1,1,1,2,1,1,2,1,2,2,1,1,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2, + 7,1,1,1,1,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2,2,2,1,1,1,5,5, + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,2,2,1,2, + 2,2,2,7,1,1,1,1,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2,2,2,1,1, + 1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,1,1,3,1,1,1,1,1,2,7,1,1,2,1, + 2,1,1,1,1,1,1,2,2,2,2,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,1,1,3, + 1,1,1,1,1,2,7,1,1,2,1,2,1,1,1,1,1,1,2,2,2,2,1,1,1,1,1,1,2,7,1,1,2,1,2,1,1, + 1,1,1,1,2,2,2,2,1,1,1,1,1,1,2,7,1,1,2,1,2,1,1,1,1,1,1,2,2,2,2,1,5,5,5,5,5, + 5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,1,1,3,1,1,1,1,1,2,7,1,1,2,1,2,1,1,1,1,1, + 1,2,2,2,2,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,1,1,3,1,1,1,1,1,2, + 7,1,1,2,1,2,1,1,1,1,1,1,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,7,1,1, + 1,1,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2,2,2,1,1,1,1,1,1,1, + 1,1,1,1,1,1,2,2,1,2,2,2,2,7,1,1,1,1,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,2,2,1,1,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,7,1,1,1,1,1,2,1, + 2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1, + 1,2,2,1,2,2,2,2,7,1,1,1,1,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1, + 1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,7,1,1,1,1,1,2,1,2,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2, + 1,2,2,2,2,7,1,1,1,1,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1, + 2,2,2,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,1,1,3,1,1,1,1,1,1, + 1,1,1,1,2,2,1,2,2,2,2,7,1,1,1,1,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,2,2,1,1,1,2,2,2,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,1,1, + 3,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,7,1,1,1,1,1,2,1,2,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2, + 2,7,1,1,1,1,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2, + 2,2,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,1,1,3,1,1,1,1,1,1,1, + 1,1,1,2,2,1,2,2,2,2,7,1,1,1,1,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,2,2,1,1,1,2,2,2,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1, + 1,1,3,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,7,1,1,1,1,1,2,1,2,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2,2,2,1,1,1,5,5,5,5,5,5,5,5,5,5,5, + 5,5,5,5,5,5,1,1,7,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,7,1,1,1,1,1, + 2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2,2,2,1, + 1,1,2,10,10,10,4,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,4,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,7,3,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,7, + 2,3,3,1,1,1,2,1,2,1,1,1,1,1,1,7,1,1,4,1,1,7,2,1,1,7,2,1,5,1,1,7,1,1,1,1,3, + 1,7,1,5,1,1,7,1,1,1,1,3,1,7,1,1,1,7,2,1,1,7,1,1,7,1,5,1,1,7,1,1,1,1,3,1,7, + 1,5,1,1,7,1,1,1,1,3,1,7,1,1,1,7,2,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,7,1, + 1,1,1,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1, + 2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,7,1,1,1,1,1,2,1,2,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2,2,2,1,1,1,1,1,7,2,1,1, + 1,7,2,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,7,1,1,1,1,1,2,1,2,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2,2,2,1,1,1,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,7,1,1,1,1,1,1,1,1,1,1,5,5,5,5,5,5,5,5,5,5, + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,1,1,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,1,2,2,2,2,2,2,2,7,2,3,3,1,1,1,2,1,2,1,1,1,1,1,1,7,1,1,5,1,5,5,7,1,2, + 2,1,5,5,5,7,2,2,1,4,1,1,4,1,1,4,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,5,5,5, + 1,5,2,2,2,2,2,2,2,5,5,7,2,3,3,1,1,1,2,1,2,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,7,2,3,3,1,2,2,1,2,1,1,1,1,1,1,4,1,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,7,2,3,3,1,1,1,2,1,2,1,1,1,1,1,5, + 5,5,5,1,1,7,1,1,1,1,3,8,1,1,1,7,1,2,1,2,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,1,1, + 3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,7,2,3,3,1,1,1,2,1,2,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,7,1,1,1,1,1,2,1,2,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2,2,2,1,1,1,1,1,4,1,1,1,1,7, + 1,3,1,1,1,4,1,1,1,1,1,1,4,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,7,1,1,1, + 1,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2,2, + 2,1,1,1,1,1,4,1,1,1,1,4,1,1,1,4,1,1,4,1,1,4,1,1,4,1,1,4,1,1,4,1,1,1,4,1,1, + 1,1,4,1,1,1,1,4,1,1,1,1,4,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,4,1,1,1,1,1,1, + 1,1,4,1,1,1,1,1,1,4,1,1,1,4,1,1,4,1,1,4,1,1,4,1,1,7,1,1,1,7,2,1,1,7,2,1,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,7,1,1,1,1,1,1,1,1,1,1,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,7,1,1,1,1,1,1,1,1,1,1,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,7,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,7,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,7,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,7,1,1,1,7,1,1,7,1,1,7,1,1,4,1,1,1,1,7,2,1,1,1,8,1, + 7,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,7,1,1,1,1,1,2,1,2,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2,2,2,1,1,1,4,4,4,4,4,4,7,4, + 4,4,4,1,4,4,7,1,1,7,1,1,1,1,7,2,1,1,7,1,1,1,7,2,1,5,5,5,5,5,5,5,5,5,5,5,5, + 5,5,5,5,5,1,1,7,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,7,1,1,1,1,1,2, + 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,2,2,1,1,1,2,2,2,1,1, + 1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 1,1,7,1,1,1,1,3,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,7,2,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,1,1,3,1, + 1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,7,1,1,1,1,1,2,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,2,2,1,1,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1, + 2,2,2,2,7,1,1,1,1,1,2,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,2,2,1,1,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,7,1,1,1,1,1,2,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,2,2,1,1,1,2,2,2,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,7,1,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,7,1,1,1,1,1,1,1,1,1,5,1,1,7,1,1,1,1,3,1,7,2,1, + 2,1,5,5,5,7,2,2,1,7,2,1,2,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,1,1, + 3,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,7,1,1,1,1,1,2,1,2,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2,2,2,1,1,1,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,1,2,2,2,2,2,2,2,7,2,3,3,1,1,1,2,1,2,1,1,1,1,1,1,4,1,1,7,2,1,1, + 7,2,1 +}; + + +static const unsigned short far ag_pstt[] = { +3,3,3,3,3,3,3,1,2,0,2,2,1,2,3, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,3,5, + 1,6,1, +1,128,472,128,128,1, +5,6,7,8,15,4,9,3,14,0,14,14,14,14,15,13,12,11,10,9, +16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,17,16,4,16,17, +471,471,1,2,5,2,2,1,2,500, +471,471,1,2,6,2,2,1,2,499, +471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471, + 471,471,471,1,2,7,2,2,1,2,498, +471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471, + 471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471, + 471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,1,2,8,2,2,1, + 2,481, +471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471, + 471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471, + 471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,1,2, + 9,2,2,1,2,473, +18,19,10,20,130,130, +18,19,11,21,130,130, +30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,12,24,22, + 23, +26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,88, + 26,26,26,26,26,26,26,4,9,13,25,25,26,9, +5,6,7,8,4,9,19,17,17,17,17,13,12,11,10,9, +20,15, +9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,11, +12,17, +471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471, + 471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471, + 471,471,471,471,471,471,471,471,471,471,471,471,471,471,1,2,18,2,2,1,2, + 537, +471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471, + 471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471, + 471,471,471,471,471,471,471,471,471,471,471,471,471,471,1,2,19,2,2,1,2, + 536, +18,19,27,132,132,132,20,28,132,131,131, +18,19,27,132,132,132,21,29,132,131,131, +31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,126, +1,30,471,30,30,1,30,497, +8,24,123,31,35, +4,9,89,87,9, +30,30,30,37,30,30,30,30,30,30,30,30,30,30,30,5,6,7,43,36,30,30,40,41,58,30, + 30,30,30,30,30,47,26,44,22,21,39,57,45,33,32,57,53,52,57,56,58,57,56,54, + 46,57,57,57,55,55,51,50,49,41,48,12,11,10,47,42,35,34,38, +471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471, + 471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,1,2,27, + 2,2,1,2,490, +18,19,27,59,8,47,28,60,63,193,31,35,61,32,62,64,63,63,191,192,130,130,34, +18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,29,60,83,85,83,77, + 193,31,35,82,32,95,62,87,83,94,93,92,91,90,89,88,86,84,83,81,80,83,79, + 78,85,85,83,76,191,192,68,67,66,201,130,130,34,71,70, +30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,1,128,472, + 128,128,1,96, +30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,27,41,98,97,99,8,101,69,30, + 30,30,30,30,30,47,4,9,31,23,22,21,37,100,39,38,31,34,35,33,32,39,39,39, + 39,9,35,34,38, +49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49, + 49,49,49,49,49,49,49,103,102,61,60,59,58,57,56,55,54,53,52,51,46,49,32, + 48,50,50,50,105,104,50, +43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,44,40,43,43,43,43,43,43, + 43,43,43,43,43,43,43,43,43,43,43,33,42,106, +471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471, + 471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471, + 471,471,471,471,471,471,471,1,2,34,2,2,1,2,475, +471,471,471,471,1,2,35,2,2,1,2,474, +471,1,2,36,2,2,1,2,493, +471,1,2,37,2,2,1,2,522, +31,31,31,31,31,31,31,31,31,31,31,31,31,31,471,31,471,471,471,31,31,31,31,31, + 31,471,471,1,2,38,2,2,1,2,476, +107,26,108, +471,1,2,40,2,2,1,2,489, +59,41,109, +8,42,213, +471,471,1,2,43,2,2,1,2,496, +118,118,23, +69,83,110, +59,46,111, +112,115,126,118,120,122,124,129,101,4,9,47,214,212,130,128,125,123,121,119, + 117,114,127,116,113,9, +18,19,48,131,130,130, +132,27,49,134,133, +27,50,135, +27,51,136, +137,98,97,52,140,139,138, +30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,41,73,73,73,144,8,73,30,30, + 30,30,30,30,47,73,73,53,23,22,21,141,142,142,33,31,35,33,32,143,144,35, + 34,38, +8,54,103,31,35, +36,111,110,41, +146,88,4,9,56,145,145,146,9, +88,4,9,57,147,147,91,9, +101,58,93, +471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471, + 471,471,471,471,471,471,471,471,471,471,1,2,59,2,2,1,2,488, +18,19,132,132,132,183,132,131,131, +18,19,27,59,8,47,61,60,63,193,31,35,61,32,62,148,63,63,191,192,130,130,34, +18,19,27,59,8,69,207,207,65,205,201,201,47,62,60,194,149,194,77,193,31,35, + 82,32,62,194,149,149,194,76,191,192,68,67,66,201,130,130,34,71,70, +132,107,184,150,151, +113,113,113,153,113,113,69,113,113,113,64,152,125,125, +154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154, + 154,154,154,154,154,154,154,154,154,154,154,154,103,102,61,60,59,58,57, + 56,55,54,53,52,51,154,154,65,154,154,154,105,104,154,154, +208,208,208,198, +206,206,197, +204,202,202,202,196,202, +471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471, + 471,471,471,471,471,471,471,471,471,471,471,471,471,471,1,2,69,2,2,1,2, + 479, +471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471, + 471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471, + 471,471,471,471,471,471,471,1,2,70,2,2,1,2,520, +471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471, + 471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471, + 471,471,471,471,471,471,471,1,2,71,2,2,1,2,519, +471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,1,2,72, + 2,2,1,2,518, +471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,1,2,73, + 2,2,1,2,517, +471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,1,2,74, + 2,2,1,2,513, +471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,1,2,75, + 2,2,1,2,512, +59,76,155,181, +18,19,27,59,8,47,77,60,178,193,31,35,61,32,62,178,191,192,130,130,34, +18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,78,60,174,149,174,77, + 193,31,35,82,32,62,174,81,80,174,79,78,149,149,174,76,191,192,68,67,66, + 201,130,130,34,71,70, +18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,79,60,173,149,173,77, + 193,31,35,82,32,62,173,81,80,173,79,78,149,149,173,76,191,192,68,67,66, + 201,130,130,34,71,70, +18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,80,60,172,149,172,77, + 193,31,35,82,32,62,172,81,80,172,79,78,149,149,172,76,191,192,68,67,66, + 201,130,130,34,71,70, +18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,81,60,171,149,171,77, + 193,31,35,82,32,62,171,81,80,171,79,78,149,149,171,76,191,192,68,67,66, + 201,130,130,34,71,70, +18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,82,60,83,85,83,77, + 193,31,35,82,32,157,62,156,83,94,93,92,91,90,89,88,86,84,83,81,80,83,79, + 78,85,85,83,76,191,192,68,67,66,201,130,130,34,71,70, +158,160,162,162,163,161,159, +74,75,159,165,164, +132,107,184,150,166, +168,137,150,167,169, +170,172,176,178,98,99,69,87,152,175,174,179,177,173,171, +170,172,98,99,145,183,182,181,180, +176,178,143,185,184, +186,141,187, +188,139,189, +97,137,190, +191,135,192, +193,195,133,196,194, +113,113,113,153,113,113,113,113,113,95,124,124, +31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,129, +471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471, + 471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,1,2,97, + 2,2,1,2,483, +471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471, + 471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,1,2,98, + 2,2,1,2,484, +471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471, + 471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,1,2,99, + 2,2,1,2,482, +107,36,108, +471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471, + 471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471, + 471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471, + 471,471,471,471,471,1,2,101,2,2,1,2,480, +67,67,102, +204,197,197,197,103,197,197, +69,69,65, +68,68,64, +41,106,198, +471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471, + 471,471,471,471,471,471,1,2,107,2,2,1,2,478, +24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, + 108,199, +18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,109,60,83,85,83,77, + 193,31,35,82,32,200,62,87,83,94,93,92,91,90,89,88,86,84,83,81,80,83,79, + 78,85,85,83,76,191,192,68,67,66,201,130,130,34,71,70, +30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,41,30,30,30,30,30,30,47,110, + 23,22,21,201,33,32,35,34,38, +18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,111,60,83,85,83,77, + 193,31,35,82,32,202,62,87,83,94,93,92,91,90,89,88,86,84,83,81,80,83,79, + 78,85,85,83,76,191,192,68,67,66,201,130,130,34,71,70, +471,1,2,112,2,2,1,2,535, +8,113,230, +204,206,8,101,4,9,114,231,203,31,208,35,207,205,9, +471,1,2,115,2,2,1,2,530, +8,116,224, +204,206,211,213,101,4,9,117,225,215,214,212,210,209,9, +471,1,2,118,2,2,1,2,528, +27,119,216, +471,1,2,120,2,2,1,2,527, +27,121,217, +471,1,2,122,2,2,1,2,525, +126,123,218,127, +471,1,2,124,2,2,1,2,524, +126,125,219,127, +471,1,2,126,2,2,1,2,529, +27,127,220, +4,9,128,216,9, +471,1,2,129,2,2,1,2,523, +27,130,221, +18,19,222,132,132,132,131,223,132,131,131, +471,471,471,471,471,471,471,471,471,471,471,471,471,1,2,132,2,2,1,2,492, +18,19,27,59,8,69,207,207,65,205,201,201,47,133,60,224,149,224,77,193,31,35, + 82,32,62,224,149,149,224,76,191,192,68,67,66,201,130,130,34,71,70, +18,19,27,59,8,47,134,60,63,193,31,35,61,32,62,225,63,63,191,192,130,130,34, +18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,135,60,83,85,83,77, + 193,31,35,82,32,226,62,87,83,94,93,92,91,90,89,88,86,84,83,81,80,83,79, + 78,85,85,83,76,191,192,68,67,66,201,130,130,34,71,70, +30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,41,8,30,30,30,30,30,30,47, + 136,23,22,21,141,227,227,33,31,35,33,32,35,34,38, +471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471, + 471,471,471,471,471,471,471,471,471,471,1,2,137,2,2,1,2,485, +30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,41,8,30,30,30,30,30,30,47, + 138,23,22,21,141,228,228,33,31,35,33,32,35,34,38, +30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,41,8,30,30,30,30,30,30,47, + 139,23,22,21,141,229,229,33,31,35,33,32,35,34,38, +30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,41,30,30,30,30,30,30,47,140, + 23,22,21,39,45,33,32,230,35,34,38, +107,32,108, +69,84,231, +30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,41,8,30,30,30,30,30,30,47, + 74,23,22,21,141,232,232,33,31,35,33,32,35,34,38, +80,80,80,99,75,75,75,144,233, +30,30,30,37,30,30,30,30,30,30,30,30,30,30,30,5,6,7,43,36,30,30,40,41,30,30, + 30,30,30,30,47,4,9,89,44,22,21,87,39,96,45,33,32,96,53,52,96,99,54,46, + 96,96,96,55,55,51,50,49,41,48,12,11,10,47,42,9,35,34,38, +234,92,235, +30,30,30,37,30,30,30,30,30,30,30,30,30,30,30,5,6,7,43,36,30,30,40,41,30,30, + 30,30,30,30,47,4,9,89,44,22,21,87,39,95,45,33,32,95,53,52,95,100,54,46, + 95,95,95,55,55,51,50,49,41,48,12,11,10,47,42,9,35,34,38, +236,69,148,152,195, +132,107,149,150,166, +188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188, + 188,188,188,188,188,188,150,237, +59,151,238, +18,19,27,59,8,47,152,60,239,193,31,35,61,32,62,239,239,191,192,130,130,34, +471,471,471,471,471,471,471,471,1,2,153,2,2,1,2,491, +209,154, +30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,41,8,30,30,30,30,30,30,47, + 155,23,22,21,141,240,240,33,31,35,33,32,35,34,38, +170,172,176,178,236,98,99,69,156,152,195,175,174,179,177,173,171, +236,157,180, +471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,1,2,158, + 2,2,1,2,516, +18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,159,60,169,149,169, + 77,193,31,35,82,32,62,169,81,80,169,168,79,78,149,149,169,76,191,192,68, + 67,66,201,130,130,34,71,70, +471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,1,2,160, + 2,2,1,2,515, +18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,161,60,169,149,169, + 77,193,31,35,82,32,62,169,81,80,169,167,79,78,149,149,169,76,191,192,68, + 67,66,201,130,130,34,71,70, +471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,1,2,162, + 2,2,1,2,514, +18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,163,60,166,149,166, + 77,193,31,35,82,32,62,166,81,80,166,79,78,149,149,166,76,191,192,68,67, + 66,201,130,130,34,71,70, +18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,164,60,241,149,241, + 77,193,31,35,82,32,62,241,241,81,80,241,79,78,149,149,241,76,191,192,68, + 67,66,201,130,130,34,71,70, +18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,165,60,242,149,242, + 77,193,31,35,82,32,62,242,242,81,80,242,79,78,149,149,242,76,191,192,68, + 67,66,201,130,130,34,71,70, +18,19,27,59,8,69,207,207,65,205,201,201,47,166,60,177,149,177,77,193,31,35, + 243,32,62,177,149,149,177,76,191,192,68,67,66,201,130,130,34,71,70, +18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,167,60,83,149,83,77, + 193,31,35,82,32,62,83,244,83,81,80,83,79,78,149,149,83,76,191,192,68,67, + 66,201,130,130,34,71,70, +471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,1,2,168, + 2,2,1,2,511, +18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,169,60,83,149,83,77, + 193,31,35,82,32,62,83,245,83,81,80,83,79,78,149,149,83,76,191,192,68,67, + 66,201,130,130,34,71,70, +471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,1,2,170, + 2,2,1,2,510, +18,19,27,59,8,47,171,60,63,193,31,35,61,32,62,246,63,63,191,192,130,130,34, +471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,1,2,172, + 2,2,1,2,509, +18,19,27,59,8,47,173,60,63,193,31,35,61,32,62,247,63,63,191,192,130,130,34, +18,19,27,59,8,47,174,60,63,193,31,35,61,32,62,248,63,63,191,192,130,130,34, +18,19,27,59,8,47,175,60,63,193,31,35,61,32,62,249,63,63,191,192,130,130,34, +471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,1,2,176, + 2,2,1,2,508, +18,19,27,59,8,47,177,60,63,193,31,35,61,32,62,250,63,63,191,192,130,130,34, +471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,1,2,178, + 2,2,1,2,507, +18,19,27,59,8,47,179,60,63,193,31,35,61,32,62,251,63,63,191,192,130,130,34, +18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,180,60,83,149,83,77, + 193,31,35,82,32,62,83,252,84,83,81,80,83,79,78,149,149,83,76,191,192,68, + 67,66,201,130,130,34,71,70, +18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,181,60,83,149,83,77, + 193,31,35,82,32,62,83,253,84,83,81,80,83,79,78,149,149,83,76,191,192,68, + 67,66,201,130,130,34,71,70, +18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,182,60,83,149,83,77, + 193,31,35,82,32,62,83,254,84,83,81,80,83,79,78,149,149,83,76,191,192,68, + 67,66,201,130,130,34,71,70, +18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,183,60,83,149,83,77, + 193,31,35,82,32,62,83,255,84,83,81,80,83,79,78,149,149,83,76,191,192,68, + 67,66,201,130,130,34,71,70, +18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,184,60,83,85,83,77, + 193,31,35,82,32,62,256,83,257,86,84,83,81,80,83,79,78,85,85,83,76,191, + 192,68,67,66,201,130,130,34,71,70, +18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,185,60,83,85,83,77, + 193,31,35,82,32,62,256,83,258,86,84,83,81,80,83,79,78,85,85,83,76,191, + 192,68,67,66,201,130,130,34,71,70, +471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,1,2,186, + 2,2,1,2,506, +18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,187,60,83,85,83,77, + 193,31,35,82,32,62,87,83,259,88,86,84,83,81,80,83,79,78,85,85,83,76,191, + 192,68,67,66,201,130,130,34,71,70, +471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,1,2,188, + 2,2,1,2,505, +18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,189,60,83,85,83,77, + 193,31,35,82,32,62,87,83,260,89,88,86,84,83,81,80,83,79,78,85,85,83,76, + 191,192,68,67,66,201,130,130,34,71,70, +18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,190,60,83,85,83,77, + 193,31,35,82,32,62,87,83,261,90,89,88,86,84,83,81,80,83,79,78,85,85,83, + 76,191,192,68,67,66,201,130,130,34,71,70, +471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,1,2,191, + 2,2,1,2,504, +18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,192,60,83,85,83,77, + 193,31,35,82,32,62,87,83,262,91,90,89,88,86,84,83,81,80,83,79,78,85,85, + 83,76,191,192,68,67,66,201,130,130,34,71,70, +471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,1,2,193, + 2,2,1,2,503, +18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,194,60,83,85,83,77, + 193,31,35,82,32,62,87,83,263,92,91,90,89,88,86,84,83,81,80,83,79,78,85, + 85,83,76,191,192,68,67,66,201,130,130,34,71,70, +471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,1,2,195, + 2,2,1,2,502, +18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,196,60,83,85,83,77, + 193,31,35,82,32,264,62,87,83,94,93,92,91,90,89,88,86,84,83,81,80,83,79, + 78,85,85,83,76,191,192,68,67,66,201,130,130,34,71,70, +204,72,72,72,70,72, +43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,44,45,43,43,43,43,43,43, + 43,43,43,43,43,43,43,43,43,43,43,198,42,106, +30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,41,8,30,30,30,30,30,30,47, + 199,23,22,21,141,265,265,33,31,35,33,32,35,34,38, +236,200,266, +107,27,108, +236,202,102, +4,9,203,234,9, +471,1,2,204,2,2,1,2,534, +27,205,267, +471,1,2,206,2,2,1,2,533, +27,207,268, +4,9,208,222,9, +27,209,269, +27,210,270, +471,1,2,211,2,2,1,2,532, +27,212,271, +471,1,2,213,2,2,1,2,531, +27,214,272, +4,9,215,221,9, +18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,216,60,83,85,83,77, + 193,31,35,82,32,273,62,87,83,94,93,92,91,90,89,88,86,84,83,81,80,83,79, + 78,85,85,83,76,191,192,68,67,66,201,130,130,34,71,70, +18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,217,60,83,85,83,77, + 193,31,35,82,32,274,62,87,83,94,93,92,91,90,89,88,86,84,83,81,80,83,79, + 78,85,85,83,76,191,192,68,67,66,201,130,130,34,71,70, +4,9,218,218,9, +4,9,219,217,9, +18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,220,60,83,85,83,77, + 193,31,35,82,32,275,62,87,83,94,93,92,91,90,89,88,86,84,83,81,80,83,79, + 78,85,85,83,76,191,192,68,67,66,201,130,130,34,71,70, +30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,41,30,30,30,30,30,30,47,221, + 276,276,276,33,32,277,276,35,34,38, +471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471, + 471,471,471,471,471,471,1,2,222,2,2,1,2,495, +30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,41,8,30,30,30,30,30,30,47, + 223,23,22,21,141,278,278,33,31,35,33,32,35,34,38, +27,224,279, +153,113,69,113,113,225,152,116,116, +153,113,113,113,226,115,115, +69,112,231, +69,79,231, +69,78,231, +30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,41,73,73,73,8,73,30,30,30, + 30,30,30,47,73,73,230,23,22,21,141,142,142,33,31,35,33,32,143,280,35,34, + 38, +30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,41,8,30,30,30,30,30,30,47, + 231,23,22,21,141,29,33,31,35,33,32,35,34,38, +69,85,231, +30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,41,8,30,30,30,30,30,30,47, + 233,23,22,21,141,281,281,33,31,35,33,32,35,34,38, +471,471,471,471,1,2,234,2,2,1,2,486, +282,8,4,9,235,25,97,31,35,25,282,9, +471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471, + 471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471, + 471,471,471,471,471,471,471,1,2,236,2,2,1,2,487, +30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,41,8,30,30,30,30,30,30,47, + 237,23,22,21,141,283,283,33,31,35,33,32,35,34,38, +18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,238,60,83,85,83,77, + 193,31,35,82,32,284,62,87,83,94,93,92,91,90,89,88,86,84,83,81,80,83,79, + 78,85,85,83,76,191,192,68,67,66,201,130,130,34,71,70, +132,107,185,150,151, +236,69,240,231,182, +158,160,162,164,163,161,159, +158,160,162,163,163,161,159, +18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,243,60,83,85,83,77, + 193,31,35,82,32,285,62,156,83,94,93,92,91,90,89,88,86,84,83,81,80,83,79, + 78,85,85,83,76,191,192,68,67,66,201,130,130,34,71,70, +74,75,161,165,164, +74,75,160,165,164, +69,158,152, +69,157,152, +69,156,152, +69,155,152, +69,149,152, +69,148,152, +168,137,154,167,169, +168,137,153,167,169, +168,137,152,167,169, +168,137,151,167,169, +170,172,98,99,69,256,152,175,174,173,171, +170,172,98,99,147,183,182,181,180, +170,172,98,99,146,183,182,181,180, +176,178,144,185,184, +186,142,187, +188,140,189, +97,138,190, +191,136,192, +286,264,287, +69,288,265,25,231, +8,266,119,31,35, +30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,41,30,30,30,30,30,30,47,267, + 276,276,276,33,32,289,276,35,34,38, +30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,41,30,30,30,30,30,30,47,268, + 276,276,276,33,32,290,276,35,34,38, +30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,41,30,30,30,30,30,30,47,269, + 276,276,276,33,32,291,276,35,34,38, +30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,41,30,30,30,30,30,30,47,270, + 276,276,276,33,32,292,276,35,34,38, +30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,41,30,30,30,30,30,30,47,271, + 276,276,276,33,32,293,276,35,34,38, +30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,272,294, + 38, +295,273,296, +295,274,297, +295,275,298, +107,235,299, +69,4,9,277,215,300,9, +301,302,69,278,231,302,302, +18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,279,60,83,85,83,77, + 193,31,35,82,32,303,62,87,83,94,93,92,91,90,89,88,86,84,83,81,80,83,79, + 78,85,85,83,76,191,192,68,67,66,201,130,130,34,71,70, +82,82,82,77,77,77,280, +81,81,81,76,69,76,76,281,231, +40,282,304,46, +69,288,283,189,231, +305,284,306, +305,236,285,180,306, +471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,1,2,286, + 2,2,1,2,501, +18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,287,60,83,85,83,77, + 193,31,35,82,32,134,62,87,83,94,93,92,91,90,89,88,86,84,83,81,80,83,79, + 78,85,85,83,76,191,192,68,67,66,201,130,130,34,71,70, +471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471, + 471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,1,2, + 288,2,2,1,2,477, +69,4,9,289,233,300,9, +69,4,9,290,232,300,9, +69,4,9,291,229,300,9, +69,4,9,292,228,300,9, +69,4,9,293,227,300,9, +4,9,294,226,9, +471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,1,2,295, + 2,2,1,2,526, +18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,296,60,83,85,83,77, + 193,31,35,82,32,220,62,87,83,94,93,92,91,90,89,88,86,84,83,81,80,83,79, + 78,85,85,83,76,191,192,68,67,66,201,130,130,34,71,70, +18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,297,60,83,85,83,77, + 193,31,35,82,32,219,62,87,83,94,93,92,91,90,89,88,86,84,83,81,80,83,79, + 78,85,85,83,76,191,192,68,67,66,201,130,130,34,71,70, +18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,298,60,83,85,83,77, + 193,31,35,82,32,223,62,87,83,94,93,92,91,90,89,88,86,84,83,81,80,83,79, + 78,85,85,83,76,191,192,68,67,66,201,130,130,34,71,70, +240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240, + 240,240,240,240,240,240,299,307, +30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,41,30,30,30,30,30,30,47,300, + 308,308,308,33,32,308,35,34,38, +471,1,2,301,2,2,1,2,494, +8,302,122,31,35, +153,113,113,113,303,117,117, +8,304,101,31,35, +471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,1,2,305, + 2,2,1,2,521, +18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,306,60,83,85,83,77, + 193,31,35,82,32,309,62,87,83,94,93,92,91,90,89,88,86,84,83,81,80,83,79, + 78,85,85,83,76,191,192,68,67,66,201,130,130,34,71,70, +30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,41,8,30,30,30,30,30,30,47, + 307,23,22,21,141,310,310,33,31,35,33,32,35,34,38, +107,236,299, +236,309,187, +69,288,310,241,231, + +}; + + +static const unsigned short far ag_sbt[] = { + 0, 15, 56, 62, 82, 121, 131, 141, 171, 231, 293, 299, 305, 331, + 370, 386, 388, 424, 426, 485, 544, 555, 566, 588, 596, 601, 606, 675, + 718, 741, 803, 832, 886, 941, 980,1032,1044,1053,1062,1097,1100,1109, + 1112,1115,1125,1128,1131,1134,1160,1166,1171,1174,1177,1184,1233,1238, + 1242,1251,1259,1262,1299,1308,1331,1372,1377,1391,1445,1449,1452,1458, + 1499,1551,1603,1628,1653,1678,1703,1707,1728,1778,1828,1878,1928,1990, + 1997,2002,2007,2012,2027,2036,2041,2044,2047,2050,2053,2058,2070,2092, + 2135,2178,2221,2224,2292,2295,2302,2305,2308,2311,2344,2371,2433,2467, + 2529,2538,2541,2556,2565,2568,2583,2592,2595,2604,2607,2616,2620,2629, + 2633,2642,2645,2650,2659,2662,2673,2694,2735,2758,2820,2860,2897,2937, + 2977,3013,3016,3019,3059,3068,3137,3140,3209,3214,3219,3246,3249,3271, + 3287,3289,3329,3346,3349,3374,3425,3450,3501,3526,3576,3627,3678,3719, + 3771,3796,3848,3873,3896,3921,3944,3967,3990,4015,4038,4063,4086,4139, + 4192,4245,4298,4353,4408,4433,4489,4514,4571,4629,4654,4713,4738,4798, + 4823,4885,4891,4930,4970,4973,4976,4979,4984,4993,4996,5005,5008,5013, + 5016,5019,5028,5031,5040,5043,5048,5110,5172,5177,5182,5244,5279,5312, + 5352,5355,5364,5371,5374,5377,5380,5428,5467,5470,5510,5522,5534,5586, + 5626,5688,5693,5698,5705,5712,5774,5779,5784,5787,5790,5793,5796,5799, + 5802,5807,5812,5817,5822,5833,5842,5851,5856,5859,5862,5865,5868,5871, + 5876,5881,5916,5951,5986,6021,6056,6081,6084,6087,6090,6093,6100,6107, + 6169,6176,6185,6189,6194,6197,6202,6227,6289,6333,6340,6347,6354,6361, + 6368,6373,6398,6460,6522,6584,6611,6645,6654,6659,6666,6671,6696,6758, + 6798,6801,6804,6809 +}; + + +static const unsigned short far ag_sbe[] = { + 9, 53, 58, 69, 118, 125, 135, 165, 225, 287, 295, 301, 327, 365, + 376, 387, 423, 425, 479, 538, 550, 561, 587, 590, 597, 603, 638, 712, + 724, 758, 827, 865, 933, 977,1026,1038,1047,1056,1091,1098,1103,1110, + 1113,1119,1127,1129,1132,1145,1162,1168,1172,1175,1180,1216,1234,1239, + 1246,1254,1260,1293,1304,1314,1344,1374,1387,1437,1448,1451,1456,1493, + 1545,1597,1622,1647,1672,1697,1704,1713,1745,1795,1845,1895,1945,1993, + 1999,2004,2009,2019,2031,2038,2042,2045,2048,2051,2055,2067,2091,2129, + 2172,2215,2222,2286,2294,2299,2304,2307,2309,2338,2369,2388,2457,2484, + 2532,2539,2547,2559,2566,2575,2586,2593,2598,2605,2610,2617,2623,2630, + 2636,2643,2647,2653,2660,2668,2688,2707,2741,2775,2845,2891,2922,2962, + 3001,3014,3017,3044,3066,3101,3138,3173,3211,3216,3244,3247,3255,3281, + 3288,3314,3337,3347,3368,3391,3444,3467,3520,3543,3593,3644,3691,3736, + 3790,3813,3867,3879,3915,3927,3950,3973,4009,4021,4057,4069,4103,4156, + 4209,4262,4315,4370,4427,4450,4508,4531,4588,4648,4671,4732,4755,4817, + 4840,4889,4927,4955,4971,4974,4977,4981,4987,4994,4999,5006,5010,5014, + 5017,5022,5029,5034,5041,5045,5065,5127,5174,5179,5199,5268,5306,5337, + 5353,5360,5368,5372,5375,5378,5411,5453,5468,5495,5516,5526,5580,5611, + 5643,5690,5695,5701,5708,5729,5776,5781,5785,5788,5791,5794,5797,5800, + 5804,5809,5814,5819,5827,5837,5846,5853,5857,5860,5863,5866,5869,5873, + 5877,5905,5940,5975,6010,6045,6078,6082,6085,6088,6091,6096,6103,6124, + 6175,6183,6186,6191,6195,6199,6221,6244,6327,6336,6343,6350,6357,6364, + 6370,6392,6415,6477,6539,6609,6635,6648,6655,6663,6667,6690,6713,6783, + 6799,6802,6806,6809 +}; + + +static const unsigned char far ag_fl[] = { + 2,1,1,2,1,2,2,1,1,2,0,1,3,1,1,1,1,2,0,1,2,1,1,1,0,5,1,3,1,3,1,2,1,1,2, + 1,2,2,2,2,2,1,2,1,0,3,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2, + 2,1,2,0,1,2,4,4,3,3,2,4,4,1,1,2,1,2,0,1,0,2,2,4,1,3,3,4,1,3,3,6,4,2,1, + 1,1,1,1,1,2,1,3,0,1,4,4,6,1,5,0,1,6,3,5,5,1,1,2,3,1,2,2,1,5,1,3,1,3,1, + 3,1,3,1,3,1,3,3,3,3,1,3,3,3,3,3,3,3,3,1,3,3,1,3,3,1,3,3,3,1,1,2,2,2,2, + 1,1,3,2,1,3,2,3,1,1,3,1,7,0,5,1,1,1,1,2,3,1,1,1,1,1,1,2,1,1,1,2,1,2,3, + 1,1,2,2,2,5,3,4,4,6,6,4,4,5,2,2,5,5,5,5,2,2,5,5,3,1,3,1,1,1,0,5,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2 +}; + +static const unsigned short far ag_ptt[] = { + 0, 2, 2, 12, 13, 13, 13,198, 20, 20, 21, 21,198, 25, 25, 25, 26, 26, + 27, 27, 22, 10, 10, 10, 30, 10, 33, 33, 31, 31,201,201, 35, 35, 38, 39, + 39, 39, 39, 39,199, 43, 43, 46, 48, 46,200, 49, 49, 51, 51, 53, 53, 53, + 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 65, 65, 65, 67, 68, 69, 66, 73, + 73, 78, 78, 75, 75, 75, 75, 75, 80, 80, 80, 76, 77, 77, 84, 84, 85, 85, + 88, 88, 88, 23, 86, 86, 86, 86, 87, 87, 87, 87, 92, 91, 89, 89, 89, 89, + 89, 99, 99, 89, 95,104,104, 95, 95, 95,102, 98,113,113, 96, 24, 24, 24, + 222,117,117,222, 1, 1, 1, 94, 94,120,120,123,123,125,125,127,127,128, + 128,130,130,130,130,130,132,132,132,132,132,132,132,132,132,135,135,135, + 138,138,138,140,140,140,140,146,143,143,143,143,143,108,108,108,108,108, + 108,108,154,152,106,106,150,150,158,150,151,151,151,151,151,151,244,244, + 244,164,164,159,159, 74, 74,160,160,161,161,245,170,170, 97,172,172,172, + 172,172,172,172,172,172,172,176,182,182,182,182,182,182,183,183,183,183, + 183,175,175,191,191,191,192,191,119, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 19, 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, + 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 37, 37, 37, 37, 37, 37, + 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 42, 42, 42, + 42, 42, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 71, 71,118, + 118,165,165,165,168,168,171,171,171,171,171,171,171,171,171,171,171,171, + 171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171, + 171,171,171,197,197, 8, 6, 5, 3, 32, 29, 34, 40, 41, 79, 81, 82, 83, + 90, 44, 45, 93,101,103,107,109,112,111,110, 9,114,115,116,122,121,124, + 126,129,131,133,134,136,137,139,141,142,144,145,147,148,149, 4, 7,157, + 173,174,177,178,180,179,181,184,185,186,187,188,189,190,166,196 +}; + +static const unsigned short far *ag_valid(int ag_k) { + const unsigned short far *ag_tp = &ag_tstt[ag_sbt[(PCB).sn+1]]; + while (*--ag_tp != (unsigned short) ag_k) if (*ag_tp == 0) return NULL; + return ag_tp; +} + +int dsl_change_reduction(dsl_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((dsl_token_type) *ag_tp)) ag_tp++; + (PCB).reduction_token = (dsl_token_type) *ag_tp; +} + + + +static void ag_ra(void) +{ + switch(ag_rpx[(PCB).ag_ap]) { + case 1: ag_rp_1(); break; + case 2: ag_rp_2(); break; + case 3: ag_rp_3(); break; + case 4: ag_rp_4(); break; + case 5: ag_rp_5(); break; + case 6: ag_rp_6(V(0,(int *))); break; + case 7: ag_rp_7(V(1,(int *))); break; + case 8: ag_rp_8(); break; + case 9: ag_rp_9(); break; + case 10: ag_rp_10(); break; + case 11: ag_rp_11(); break; + case 12: ag_rp_12(); break; + case 13: ag_rp_13(V(0,(int *))); break; + case 14: ag_rp_14(); break; + case 15: ag_rp_15(); break; + case 16: ag_rp_16(); break; + case 17: ag_rp_17(V(0,(int *))); break; + case 18: ag_rp_18(V(0,(int *))); break; + case 19: V(0,(int *)) = ag_rp_19(); break; + case 20: V(0,(int *)) = ag_rp_20(); break; + case 21: V(0,(int *)) = ag_rp_21(); break; + case 22: V(0,(int *)) = ag_rp_22(); break; + case 23: V(0,(int *)) = ag_rp_23(); break; + case 24: V(0,(int *)) = ag_rp_24(); break; + case 25: V(0,(int *)) = ag_rp_25(); break; + case 26: V(0,(int *)) = ag_rp_26(); break; + case 27: V(0,(int *)) = ag_rp_27(); break; + case 28: V(0,(int *)) = ag_rp_28(); break; + case 29: V(0,(int *)) = ag_rp_29(); break; + case 30: V(0,(int *)) = ag_rp_30(V(1,(int *))); break; + case 31: V(0,(int *)) = ag_rp_31(V(0,(int *)), V(1,(int *))); break; + case 32: V(0,(int *)) = ag_rp_32(V(0,(int *)), V(1,(int *))); break; + case 33: V(0,(int *)) = ag_rp_33(V(1,(long *))); break; + case 34: V(0,(long *)) = ag_rp_34(V(0,(long *)), V(1,(long *))); break; + case 35: ag_rp_35(); break; + case 36: ag_rp_36(); break; + case 37: ag_rp_37(V(0,(char * *))); break; + case 38: ag_rp_38(V(0,(char * *))); break; + case 39: ag_rp_39(V(0,(char * *))); break; + case 40: V(0,(char * *)) = ag_rp_40(); break; + case 41: V(0,(char * *)) = ag_rp_41(); break; + case 42: V(0,(char * *)) = ag_rp_42(V(0,(char * *))); break; + case 43: ag_rp_43(); break; + case 44: ag_rp_44(); break; + case 45: ag_rp_45(); break; + case 46: ag_rp_46(V(0,(int *))); break; + case 47: V(0,(int *)) = ag_rp_47(V(2,(int *))); break; + case 48: V(0,(int *)) = ag_rp_48(V(2,(int *))); break; + case 49: V(0,(int *)) = ag_rp_49(V(0,(int *)), V(4,(int *))); break; + case 50: V(0,(int *)) = ag_rp_50(V(2,(long *))); break; + case 51: V(0,(int *)) = ag_rp_51(V(0,(int *))); break; + case 52: ag_rp_52(V(0,(unsigned *))); break; + case 53: ag_rp_53(V(0,(unsigned *)), V(2,(long *))); break; + case 54: ag_rp_54(V(0,(unsigned *))); break; + case 55: ag_rp_55(V(0,(unsigned *)), V(2,(long *)), V(4,(long *))); break; + case 56: ag_default(&ag_rtt[0]); V(0,(unsigned *)) = ag_rp_56(); break; + case 57: ag_rp_57(V(2,(long *))); break; + case 58: ag_rp_58(); break; + case 59: ag_rp_59(V(1,(int *))); break; + case 60: ag_rp_60(V(3,(long *))); break; + case 61: ag_rp_61(); break; + case 62: V(0,(int *)) = ag_rp_62(); break; + case 63: V(0,(int *)) = ag_rp_63(V(0,(int *))); break; + case 64: ag_rp_64(V(0,(int *))); break; + case 65: ag_rp_65(V(1,(int *))); break; + case 66: ag_rp_66(V(1,(int *))); break; + case 67: V(0,(long *)) = ag_rp_67(V(0,(long *)), V(2,(long *)), V(4,(long *))); break; + case 68: V(0,(long *)) = ag_rp_68(V(0,(long *)), V(2,(long *))); break; + case 69: V(0,(long *)) = ag_rp_69(V(0,(long *)), V(2,(long *))); break; + case 70: V(0,(long *)) = ag_rp_70(V(0,(long *)), V(2,(long *))); break; + case 71: V(0,(long *)) = ag_rp_71(V(0,(long *)), V(2,(long *))); break; + case 72: V(0,(long *)) = ag_rp_72(V(0,(long *)), V(2,(long *))); break; + case 73: V(0,(long *)) = ag_rp_73(V(0,(long *)), V(2,(long *))); break; + case 74: V(0,(long *)) = ag_rp_74(V(0,(long *)), V(2,(long *))); break; + case 75: V(0,(long *)) = ag_rp_75(); break; + case 76: V(0,(long *)) = ag_rp_76(); break; + case 77: V(0,(long *)) = ag_rp_77(V(0,(long *)), V(2,(long *))); break; + case 78: V(0,(long *)) = ag_rp_78(V(0,(long *)), V(2,(long *))); break; + case 79: V(0,(long *)) = ag_rp_79(V(0,(long *)), V(2,(long *))); break; + case 80: V(0,(long *)) = ag_rp_80(V(0,(long *)), V(2,(long *))); break; + case 81: V(0,(long *)) = ag_rp_81(); break; + case 82: V(0,(long *)) = ag_rp_82(); break; + case 83: V(0,(long *)) = ag_rp_83(); break; + case 84: V(0,(long *)) = ag_rp_84(); break; + case 85: V(0,(long *)) = ag_rp_85(V(0,(long *)), V(2,(long *))); break; + case 86: V(0,(long *)) = ag_rp_86(V(0,(long *)), V(2,(long *))); break; + case 87: V(0,(long *)) = ag_rp_87(V(0,(long *)), V(2,(long *))); break; + case 88: V(0,(long *)) = ag_rp_88(V(0,(long *)), V(2,(long *))); break; + case 89: V(0,(long *)) = ag_rp_89(V(0,(long *)), V(2,(long *))); break; + case 90: V(0,(long *)) = ag_rp_90(V(0,(long *)), V(2,(long *))); break; + case 91: V(0,(long *)) = ag_rp_91(V(0,(long *)), V(2,(long *))); break; + case 92: V(0,(long *)) = ag_rp_92(V(0,(long *))); break; + case 93: V(0,(long *)) = ag_rp_93(V(1,(long *))); break; + case 94: V(0,(long *)) = ag_rp_94(V(1,(long *))); break; + case 95: V(0,(long *)) = ag_rp_95(V(1,(long *))); break; + case 96: V(0,(long *)) = ag_rp_96(V(1,(long *))); break; + case 97: V(0,(long *)) = ag_rp_97(V(2,(long *))); break; + case 98: V(0,(long *)) = ag_rp_98(); break; + case 99: V(0,(long *)) = ag_rp_99(V(1,(long *))); break; + case 100: V(0,(long *)) = ag_rp_100(V(0,(long *))); break; + case 101: ag_default(&ag_rtt[4]); V(0,(long *)) = ag_rp_101(); break; + case 102: ag_rp_102(); break; + case 103: ag_rp_103(V(3,(long *)), V(5,(long *))); break; + case 104: ag_rp_104(); break; + case 105: ag_rp_105(); break; + case 106: ag_rp_106(V(0,(long *))); break; + case 107: ag_rp_107(V(0,(long *))); break; + case 108: ag_rp_108(); break; + case 109: ag_rp_109(V(1,(long *))); break; + case 110: V(0,(long *)) = ag_rp_110(); break; + case 111: V(0,(long *)) = ag_rp_111(V(0,(long *)), V(1,(long *))); break; + case 112: V(0,(long *)) = ag_rp_112(V(0,(int *))); break; + case 113: V(0,(long *)) = ag_rp_113(); break; + case 114: V(0,(long *)) = ag_rp_114(V(0,(long *)), V(1,(int *))); break; + case 115: V(0,(long *)) = ag_rp_115(V(0,(int *))); break; + case 116: V(0,(long *)) = ag_rp_116(V(0,(long *)), V(1,(int *))); break; + case 117: V(0,(int *)) = ag_rp_117(V(1,(int *))); break; + case 118: ag_rp_118(V(0,(screen_descriptor * *))); break; + case 119: V(0,(screen_descriptor * *)) = ag_rp_119(); break; + case 120: V(0,(screen_descriptor * *)) = ag_rp_120(V(0,(screen_descriptor * *))); break; + case 121: V(0,(screen_descriptor * *)) = ag_rp_121(V(0,(screen_descriptor * *)), V(1,(int *))); break; + case 122: V(0,(screen_descriptor * *)) = ag_rp_122(V(0,(screen_descriptor * *)), V(2,(int *))); break; + case 123: V(0,(screen_descriptor * *)) = ag_rp_123(V(0,(screen_descriptor * *)), V(2,(int *))); break; + case 124: V(0,(screen_descriptor * *)) = ag_rp_124(V(0,(screen_descriptor * *)), V(3,(long *)), V(5,(long *))); break; + case 125: V(0,(screen_descriptor * *)) = ag_rp_125(V(0,(screen_descriptor * *)), V(3,(long *)), V(5,(long *))); break; + case 126: V(0,(screen_descriptor * *)) = ag_rp_126(V(0,(screen_descriptor * *)), V(1,(query_item * *))); break; + case 127: V(0,(screen_descriptor * *)) = ag_rp_127(V(0,(screen_descriptor * *)), V(1,(query_item * *))); break; + case 128: V(0,(int *)) = ag_rp_128(V(2,(long *)), V(4,(long *))); break; + case 129: V(0,(query_item * *)) = ag_rp_129(); break; + case 130: V(0,(query_item * *)) = ag_rp_130(V(0,(query_item * *))); break; + case 131: V(0,(query_item * *)) = ag_rp_131(V(0,(query_item * *))); break; + case 132: V(0,(query_item * *)) = ag_rp_132(V(0,(query_item * *))); break; + case 133: V(0,(query_item * *)) = ag_rp_133(V(0,(query_item * *))); break; + case 134: V(0,(query_item * *)) = ag_rp_134(); break; + case 135: V(0,(query_item * *)) = ag_rp_135(V(0,(query_item * *))); break; + case 136: V(0,(query_item * *)) = ag_rp_136(V(0,(query_item * *))); break; + case 137: V(0,(query_item * *)) = ag_rp_137(V(0,(query_item * *))); 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; + } + (PCB).la_ptr = (PCB).pointer; +} + +#define TOKEN_NAMES dsl_token_names +const char *const dsl_token_names[263] = { + "script file", + "name", + "ws", + "literal", + "integer constant", + "string literal", + "paren string", + "character constant", + "eol", + "literals", + "word", + "white", + "comment", + "comment head", + "\"*/\"", + "\"/*\"", + "", + "'\\n'", + "\"//\"", + "not eol", + "", + "", + "script file", + "execution block", + "declaration", + "", + "", + "", + "eof", + "'['", + "", + "parameter string", + "']'", + "string", + "'#'", + "param word", + "", + "text char", + "action text", + "action text head", + "'}'", + "'{'", + "operator", + "paren string chars", + "')'", + "'('", + "paren string char", + "not paren", + "", + "string chars", + "'\\\"'", + "string char", + "not double quote", + "escape sequence", + "\"\\\\a\"", + "\"\\\\b\"", + "\"\\\\f\"", + "\"\\\\n\"", + "\"\\\\r\"", + "\"\\\\t\"", + "\"\\\\v\"", + "\"\\\\\\\\\"", + "\"\\\\?\"", + "\"\\\\\\'\"", + "\"\\\\\\\"\"", + "octal escape", + "hex escape", + "one octal", + "two octal", + "three octal", + "'\\\\'", + "", + "\"\\\\x\"", + "hex number", + "hex digit", + "command", + "identifier", + "parameters", + "", + "'<'", + "piped command", + "'|'", + "'>'", + "\">>\"", + "", + "", + "command sequence", + "if sequence", + "", + "statement", + "\"else\"", + "if statement", + "if condition", + "\"if\"", + "conditional exp", + "assignment", + "for statement", + "screen description", + "while statement", + "", + "undeclared variable", + "'='", + "integer variable", + "';'", + "", + "string variable", + "string exp", + "'@'", + "primary exp", + "\"while\"", + "\"for\"", + "\"in\"", + "\"do\"", + "", + "\"action\"", + "\"int\"", + "\"string\"", + "", + "letter", + "digit", + "logical or exp", + "'\\?'", + "':'", + "logical and exp", + "\"||\"", + "inclusive or exp", + "\"&&\"", + "exclusive or exp", + "and exp", + "'^'", + "equality exp", + "'&'", + "relational exp", + "\"==\"", + "\"!=\"", + "shift exp", + "\"<=\"", + "\">=\"", + "additive exp", + "\"<<\"", + "multiplicative exp", + "'+'", + "'-'", + "unary exp", + "'*'", + "'/'", + "nonzero", + "'%'", + "'~'", + "'!'", + "string term", + "string element", + "numeric name", + "built_in name", + "built_in argument", + "string name", + "undefined name", + "\"..\"", + "", + "hex constant", + "octal constant", + "decimal constant", + "\"0x\"", + "\"0X\"", + "", + "", + "", + "'0'", + "", + "'\\''", + "char constant element", + "not single quote", + "screen items", + "\"screen\"", + "\"title\"", + "formula", + "color spec", + "\"entry\"", + "\"highlight\"", + "\"size\"", + "','", + "\"location\"", + "query line", + "button line", + "\"color\"", + "\"field\"", + "\"variable\"", + "\"default\"", + "\"prompt\"", + "\"explanation\"", + "\"button\"", + "formula element", + "", + "", + "", + "", + "", + "", + "eol", + "paren string", + "string literal", + "literal", + "']'", + "'['", + "'#'", + "'}'", + "'{'", + "'<'", + "'|'", + "'>'", + "\">>\"", + "\"else\"", + "')'", + "'('", + "\"if\"", + "'='", + "';'", + "'@'", + "\"while\"", + "\"do\"", + "\"in\"", + "\"for\"", + "literals", + "\"action\"", + "\"int\"", + "\"string\"", + "':'", + "'\\?'", + "\"||\"", + "\"&&\"", + "'^'", + "'&'", + "\"==\"", + "\"!=\"", + "\"<=\"", + "\">=\"", + "\"<<\"", + "'+'", + "'-'", + "'*'", + "'/'", + "'%'", + "'~'", + "'!'", + "integer constant", + "character constant", + "\"..\"", + "\"screen\"", + "\"title\"", + "\"entry\"", + "\"highlight\"", + "','", + "\"size\"", + "\"location\"", + "\"color\"", + "\"field\"", + "\"variable\"", + "\"default\"", + "\"prompt\"", + "\"explanation\"", + "\"button\"", + "", + "", + +}; + +#ifndef MISSING_FORMAT +#define MISSING_FORMAT "Missing %s" +#endif +#ifndef UNEXPECTED_FORMAT +#define UNEXPECTED_FORMAT "Unexpected %s" +#endif +#ifndef UNNAMED_TOKEN +#define UNNAMED_TOKEN "input" +#endif + + +static void ag_diagnose(void) { + int ag_snd = (PCB).sn; + int ag_k = ag_sbt[ag_snd]; + + if (*TOKEN_NAMES[ag_tstt[ag_k]] && ag_astt[ag_k + 1] == ag_action_8) { + sprintf((PCB).ag_msg, MISSING_FORMAT, TOKEN_NAMES[ag_tstt[ag_k]]); + } + else if (ag_astt[ag_sbe[(PCB).sn]] == ag_action_8 + && (ag_k = (int) ag_sbe[(PCB).sn] + 1) == (int) ag_sbt[(PCB).sn+1] - 1 + && *TOKEN_NAMES[ag_tstt[ag_k]]) { + sprintf((PCB).ag_msg, MISSING_FORMAT, TOKEN_NAMES[ag_tstt[ag_k]]); + } + else if ((PCB).token_number && *TOKEN_NAMES[(PCB).token_number]) { + sprintf((PCB).ag_msg, UNEXPECTED_FORMAT, TOKEN_NAMES[(PCB).token_number]); + } + else if (isprint(INPUT_CODE((*(PCB).pointer))) && INPUT_CODE((*(PCB).pointer)) != '\\') { + char buf[20]; + sprintf(buf, "\'%c\'", (char) INPUT_CODE((*(PCB).pointer))); + sprintf((PCB).ag_msg, UNEXPECTED_FORMAT, buf); + } + else sprintf((PCB).ag_msg, UNEXPECTED_FORMAT, UNNAMED_TOKEN); + (PCB).error_message = (PCB).ag_msg; + + +} +static int ag_action_1_r_proc(void); +static int ag_action_2_r_proc(void); +static int ag_action_3_r_proc(void); +static int ag_action_4_r_proc(void); +static int ag_action_1_s_proc(void); +static int ag_action_3_s_proc(void); +static int ag_action_1_proc(void); +static int ag_action_2_proc(void); +static int ag_action_3_proc(void); +static int ag_action_4_proc(void); +static int ag_action_5_proc(void); +static int ag_action_6_proc(void); +static int ag_action_7_proc(void); +static int ag_action_8_proc(void); +static int ag_action_9_proc(void); +static int ag_action_10_proc(void); +static int ag_action_11_proc(void); +static int ag_action_8_proc(void); + + +static int (*const ag_r_procs_scan[])(void) = { + ag_action_1_r_proc, + ag_action_2_r_proc, + ag_action_3_r_proc, + ag_action_4_r_proc +}; + +static int (*const ag_s_procs_scan[])(void) = { + ag_action_1_s_proc, + ag_action_2_r_proc, + ag_action_3_s_proc, + ag_action_4_r_proc +}; + +static int (*const ag_gt_procs_scan[])(void) = { + ag_action_1_proc, + ag_action_2_proc, + ag_action_3_proc, + ag_action_4_proc, + ag_action_5_proc, + ag_action_6_proc, + ag_action_7_proc, + ag_action_8_proc, + ag_action_9_proc, + ag_action_10_proc, + ag_action_11_proc, + ag_action_8_proc +}; + + +static int ag_action_10_proc(void) { + int ag_t = (PCB).token_number; + (PCB).btsx = 0, (PCB).drt = -1; + do { + ag_track(); + (PCB).token_number = (dsl_token_type) AG_TCV(INPUT_CODE(*(PCB).la_ptr)); + (PCB).la_ptr++; + if (ag_key_index[(PCB).sn]) { + unsigned ag_k = ag_key_index[(PCB).sn]; + int ag_ch = CONVERT_CASE(INPUT_CODE(*(PCB).pointer)); + if (ag_ch <= 255) { + while (ag_key_ch[ag_k] < ag_ch) ag_k++; + if (ag_key_ch[ag_k] == ag_ch) ag_get_key_word(ag_k); + } + } + } while ((PCB).token_number == (dsl_token_type) ag_t); + (PCB).la_ptr = (PCB).pointer; + return 1; +} + +static int ag_action_11_proc(void) { + int ag_t = (PCB).token_number; + + (PCB).btsx = 0, (PCB).drt = -1; + do { + (*(int *) &(PCB).vs[(PCB).ssx]) = *(PCB).pointer; + (PCB).ssx--; + ag_track(); + ag_ra(); + if ((PCB).exit_flag != AG_RUNNING_CODE) return 0; + (PCB).ssx++; + (PCB).token_number = (dsl_token_type) AG_TCV(INPUT_CODE(*(PCB).la_ptr)); + (PCB).la_ptr++; + if (ag_key_index[(PCB).sn]) { + unsigned ag_k = ag_key_index[(PCB).sn]; + int ag_ch = CONVERT_CASE(INPUT_CODE(*(PCB).pointer)); + if (ag_ch <= 255) { + while (ag_key_ch[ag_k] < ag_ch) ag_k++; + if (ag_key_ch[ag_k] == ag_ch) ag_get_key_word(ag_k); + } + } + } + while ((PCB).token_number == (dsl_token_type) ag_t); + (PCB).la_ptr = (PCB).pointer; + return 1; +} + +static int ag_action_3_r_proc(void) { + int ag_sd = ag_fl[(PCB).ag_ap] - 1; + if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd]; + (PCB).btsx = 0, (PCB).drt = -1; + (PCB).reduction_token = (dsl_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 = (dsl_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 = (dsl_token_type) ag_ptt[(PCB).ag_ap]; + return 1; +} + +static int ag_action_2_proc(void) { + (PCB).btsx = 0, (PCB).drt = -1; + if ((PCB).ssx >= 128) { + (PCB).exit_flag = AG_STACK_ERROR_CODE; + PARSER_STACK_OVERFLOW; + } + (*(int *) &(PCB).vs[(PCB).ssx]) = *(PCB).pointer; + GET_CONTEXT; + (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; + GET_CONTEXT; + (PCB).ss[(PCB).ssx] = (PCB).sn; + (PCB).ssx++; + (PCB).sn = (PCB).ag_ap; + (PCB).la_ptr = (PCB).pointer; + return (PCB).exit_flag == AG_RUNNING_CODE; +} + +static int ag_action_2_r_proc(void) { + (PCB).ssx++; + (PCB).sn = (PCB).ag_ap; + return 0; +} + +static int ag_action_7_proc(void) { + --(PCB).ssx; + (PCB).la_ptr = (PCB).pointer; + (PCB).exit_flag = AG_SUCCESS_CODE; + return 0; +} + +static int ag_action_1_proc(void) { + ag_track(); + (PCB).exit_flag = AG_SUCCESS_CODE; + return 0; +} + +static int ag_action_1_r_proc(void) { + (PCB).exit_flag = AG_SUCCESS_CODE; + return 0; +} + +static int ag_action_1_s_proc(void) { + (PCB).exit_flag = AG_SUCCESS_CODE; + return 0; +} + +static int ag_action_4_proc(void) { + int ag_sd = ag_fl[(PCB).ag_ap] - 1; + (PCB).reduction_token = (dsl_token_type) ag_ptt[(PCB).ag_ap]; + (PCB).btsx = 0, (PCB).drt = -1; + (*(int *) &(PCB).vs[(PCB).ssx]) = *(PCB).pointer; + if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd]; + else GET_CONTEXT; + (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 short)(PCB).reduction_token) ag_t1 = ag_tx + 1; + else ag_t2 = ag_tx; + } while (ag_t1 < ag_t2); + if (ag_tstt[ag_t1] != (PCB).reduction_token) { + (PCB).exit_flag = AG_REDUCTION_ERROR_CODE; + REDUCTION_TOKEN_ERROR; break;} + (PCB).ag_ap = ag_pstt[ag_t1]; + if ((ag_s_procs_scan[ag_astt[ag_t1]])() == 0) break; + } + return 0; +} + +static int ag_action_3_proc(void) { + int ag_sd = ag_fl[(PCB).ag_ap] - 1; + (PCB).btsx = 0, (PCB).drt = -1; + (*(int *) &(PCB).vs[(PCB).ssx]) = *(PCB).pointer; + if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd]; + else GET_CONTEXT; + (PCB).ss[(PCB).ssx] = (PCB).sn; + ag_track(); + (PCB).reduction_token = (dsl_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 short)(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).la_ptr = (PCB).pointer; + (PCB).exit_flag = AG_SYNTAX_ERROR_CODE; + ag_diagnose(); + SYNTAX_ERROR; + {(PCB).la_ptr = (PCB).pointer + 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 { + GET_CONTEXT; + (PCB).ss[(PCB).ssx] = (PCB).sn; + } + (PCB).la_ptr = (PCB).pointer; + (PCB).reduction_token = (dsl_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 short)(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 = (dsl_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; + GET_CONTEXT; + (PCB).ss[(PCB).ssx] = (PCB).sn; + } + (PCB).la_ptr = (PCB).pointer; + while ((PCB).exit_flag == AG_RUNNING_CODE) { + unsigned ag_t1 = ag_sbe[(PCB).sn] + 1; + unsigned ag_t2 = ag_sbt[(PCB).sn+1] - 1; + do { + unsigned ag_tx = (ag_t1 + ag_t2)/2; + if (ag_tstt[ag_tx] < (unsigned short)(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_dsl(void) { + (PCB).la_ptr = (PCB).pointer; + (PCB).ss[0] = (PCB).sn = (PCB).ssx = 0; + (PCB).exit_flag = AG_RUNNING_CODE; + (PCB).line = FIRST_LINE; + (PCB).column = FIRST_COLUMN; + (PCB).btsx = 0, (PCB).drt = -1; +} + +void dsl(void) { + init_dsl(); + (PCB).exit_flag = AG_RUNNING_CODE; + while ((PCB).exit_flag == AG_RUNNING_CODE) { + unsigned ag_t1 = ag_sbt[(PCB).sn]; + if (ag_tstt[ag_t1]) { + unsigned ag_t2 = ag_sbe[(PCB).sn] - 1; + (PCB).token_number = (dsl_token_type) AG_TCV(INPUT_CODE(*(PCB).la_ptr)); + (PCB).la_ptr++; + if (ag_key_index[(PCB).sn]) { + unsigned ag_k = ag_key_index[(PCB).sn]; + int ag_ch = CONVERT_CASE(INPUT_CODE(*(PCB).pointer)); + if (ag_ch <= 255) { + while (ag_key_ch[ag_k] < ag_ch) ag_k++; + if (ag_key_ch[ag_k] == ag_ch) ag_get_key_word(ag_k); + } + } + do { + unsigned ag_tx = (ag_t1 + ag_t2)/2; + if (ag_tstt[ag_tx] > (unsigned short)(PCB).token_number) + ag_t1 = ag_tx + 1; + else ag_t2 = ag_tx; + } while (ag_t1 < ag_t2); + if (ag_tstt[ag_t1] != (unsigned short)(PCB).token_number) + ag_t1 = ag_sbe[(PCB).sn]; + } + (PCB).ag_ap = ag_pstt[ag_t1]; + (ag_gt_procs_scan[ag_astt[ag_t1]])(); + } +} + +