diff tests/agcl/examples/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/examples/good/dsl.cpp	Sat Dec 22 17:52:45 2007 -0500
@@ -0,0 +1,3838 @@
+                                           // C Prologue
+/*****
+
+ AnaGram Programming Examples
+
+ A Dos Script Language
+
+ Copyright 1993 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.
+
+*****/
+
+#include "stack.h"
+#include "charsink.h"
+#include "strdict.h"
+#include "array.h"
+#include "symbol.h"
+#include "query.h"
+
+#ifdef __BCPLUSPLUS__
+extern unsigned _stklen = 0x4000;                // set stack size
+#endif
+
+
+// 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 <stdlib.h>
+#include <ctype.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <time.h>
+#include <assert.h>
+#include <errno.h>
+
+#if defined(__MSDOS__) || defined(__WINDOWS__)
+#include <io.h>
+#include <conio.h>
+#include <process.h>
+#else
+#include <unistd.h>
+
+/* This is only meant to compile, not run. (Unix) */
+static int kbhit(void) { return 0; }
+static int getch(void) { return '?'; }
+static void ungetch(int) { }
+static void strupr(char *) { }
+static int spawnvp(int, const char *, char *const *) { return -1; }
+#define O_TEXT 0
+#define O_BINARY 0
+#define P_WAIT 0
+#define _MAX_PATH 128
+#define _MAX_DRIVE 4
+#define _MAX_DIR  128
+#define _MAX_FNAME 16
+#define _MAX_EXT   4
+static void _splitpath(const char *, char *, char *, char *, char *) {}
+static void _makepath(char *, const char *, const char *, const char *,
+	const char *) {}
+
+#endif
+
+#ifdef __MSDOS__
+#include <dos.h>
+#else
+
+/* This is only meant to compile, not run. (Windows, Unix) */
+
+#define far
+struct find_t { int attrib; char name[16]; };
+int _dos_findfirst(const char *, int, struct find_t *) { return -1; }
+int _dos_findnext(struct find_t *) { return -1; }
+#define _A_SUBDIR 1
+struct diskfree_t {
+       unsigned avail_clusters, bytes_per_sector, sectors_per_cluster;
+};
+void _dos_getdiskfree(int, struct diskfree_t *f) {
+   f->avail_clusters = 0;
+   f->bytes_per_sector = 512;
+   f->sectors_per_cluster = 4;
+}
+void _dos_getftime(int, unsigned short *d, unsigned short *t) { *d=*t=0; }
+
+#endif /* not MSDOS */
+
+#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--).top(),"r");
+  if (f != NULL) fclose(f);
+  return f != NULL;
+}
+
+long directory_exists(void) {
+  struct find_t ff;
+  int result;
+
+  sa << "\\*.*";
+  result = _dos_findfirst((sa--).top(),_A_SUBDIR,&ff);
+  return result == 0;
+}
+
+long string_length(void) {
+  return size(sa--);
+}
+
+long get_file_length(void) {
+  int handle = open((sa--).top(), O_RDONLY);
+  long length;
+  if (handle < 0) return 0;
+  length = filelength(handle);
+  close(handle);
+  return length;
+}
+
+long disk_space(void) {
+  struct diskfree_t free;
+  int drive = toupper(*(sa--).top()) - 64;
+  long avail;
+
+  _dos_getdiskfree(drive, &free);
+  avail = (long) free.avail_clusters
+        * (long) free.bytes_per_sector
+        * (long) free.sectors_per_cluster;
+  return avail;
+}
+
+long file_time(void) {
+  int handle = open((sa--).top(), O_RDONLY);
+#ifdef __BCPLUSPLUS__
+  unsigned date, time;
+#else
+  unsigned short date, time;
+#endif
+  struct tm t;
+
+  if (handle < 0) return 0;
+  _dos_getftime(handle, &date, &time);
+  close(handle);
+  t.tm_year = ((date & 0xfe00) >> 9) + 80;
+  t.tm_mon  = ((date & 0x1e00) >> 5) - 1;
+  t.tm_mday = date & 0x001f;
+  ;
+  t.tm_hour = (time & 0xf800) >> 11;
+  t.tm_min  = (time & 0x07e0) >> 5;
+  t.tm_sec  = (time & 0x001f) << 1;
+  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--).top(), n+1);
+  return strcmp((sa--).top(),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( (sa--).top() + 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.top()];
+  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;
+    }
+    default:
+      /* not supposed to happen? */
+      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--).top();
+  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;
+    default:
+      /* not supposed to happen? */
+      break;
+  }
+  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, char *args[]) {
+  int i;
+  const char *cs = "";
+  for (i = 1; args[i]; i++) printf("%s%s", cs, args[i]), cs = " ";
+  printf("\n");
+  fflush(stdout);
+  return 0;
+}
+
+int pause(int, char *[]) {
+  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], "%d", &exitcode);
+  exit(exitcode);
+  return exitcode;
+}
+
+/*
+int return_script(int n_args, char *args[]) {
+  if (n_args > 1) sscanf(args[1], "%d", &exitcode);
+  PCB.exit_flag = AG_SUCCESS_CODE;
+  return exitcode;
+}
+*/
+
+int subdirs(int, char *args[]) {
+  struct find_t file_block;
+  int flag;
+  int length = strlen(args[1]);
+  array <char> name(args[1],length + 5);
+
+  strcat(name, "\\*.*");
+  for (flag = _dos_findfirst(name, _A_SUBDIR, &file_block);
+       flag == 0; flag = _dos_findnext(&file_block)) {
+    if ((file_block.attrib & _A_SUBDIR) == 0) continue;
+    if (strcmp(file_block.name, ".") == 0) continue;
+    if (strcmp(file_block.name, "..") == 0) continue;
+    puts(file_block.name);
+  }
+  return 0;
+}
+
+int files(int, char *args[]) {
+  struct find_t file_block;
+  int flag;
+  int length = strlen(args[1]);
+  array<char> name(args[1],length + 5);
+
+  strcat(name, "\\*.*");
+  for (flag = _dos_findfirst(name, 0, &file_block);
+       flag == 0; flag = _dos_findnext(&file_block)) {
+    puts(file_block.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;
+  unsigned uc_index;
+  int i;
+
+  array <char *> args(n);
+  while (n--) ps >> args[n];
+
+  index = sd[args[0]];
+  while (index && st[index].type == string_type) {
+     args[0] = st[index].data.text;                // stack value
+     index = sd[args[0]];
+  }
+  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();
+  }
+  strupr(args[0]);
+  uc_index = sd[args[0]];
+  if (n_args == 1 && strlen(args[0]) == 2 && args[0][1] == ':') {
+    errorlevel = system(args[0]);
+  }
+  else if ( *args[0] && uc_index) switch (st[uc_index].type) {
+    case internal_type: {
+      errorlevel = (*st[uc_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]);
+      if (errorlevel == -1) {
+        fprintf(stderr,"Error invoking %s: %s\n", args[0], strerror(errno));
+        exit(1);
+      }
+      break;
+    }
+    default:
+      /* not supposed to happen? */
+      break;
+  }
+  else if ( *args[0] && index) switch (st[index].type) {
+    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]];
+      }
+      break;
+    }
+    default: {
+      char **tmpargs = args;
+      errorlevel = spawnvp(P_WAIT,args[0], tmpargs);
+      if (errorlevel == -1) {
+        fprintf(stderr,"Error invoking %s: %s\n", args[0], strerror(errno));
+        exit(1);
+      }
+    }
+  }
+  else {
+  }
+  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--).top());
+  exec();
+}
+
+char *exec_pipe_out(void) {
+  fflush(stdout);
+  redirect sout(STDOUT);
+  exec();
+  fflush(stdout);
+  return save_file(sout);
+}
+
+char *exec_pipe_in_pipe_out(char *file_name) {
+  char *result;
+  {
+    redirect sin(STDIN, file_name);
+    fflush(stdout);
+    redirect sout(STDOUT);
+    exec();
+    fflush(stdout);
+    result = save_file(sout);
+  }
+  discard_temp_file(file_name);
+  return result;
+}
+
+char *exec_redirect_in_pipe_out(void) {
+  fflush(stdout);
+  redirect sout(STDOUT);
+  exec_redirect_in();
+  fflush(stdout);
+  return save_file(sout);
+}
+
+unsigned check_integer(void) {
+  unsigned index = sd << (sa--).top();
+  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.top());                         // delete old file
+  rename(temp_name, (sa--).top());          // rename temp file
+  delete [] temp_name;                      // discard name string
+}
+
+void append_output(char *temp_name) {
+  fflush(stdout);
+  redirect sout(STDOUT, (sa--).top(), 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);
+  }
+  fflush(stdout);
+  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;
+  fflush(stdout);
+  redirect sout(STDOUT);
+  char *result;
+
+  ap.pointer = action;
+  perform_action(ap);
+  fflush(stdout);
+  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;
+  const 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--).top(), n + 1);
+
+
+  unsigned index = sd << (sa--).top();
+
+  ++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.top(), O_TEXT | O_RDONLY);
+  long size;
+  unsigned n;
+  action_pointer ap;
+
+  if (handle < 0) {
+    fprintf(stderr,"Cannot open %s\n", (sa--).top());
+    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, const char *e) {
+  char s[_MAX_PATH];
+  char drive[_MAX_DRIVE];
+  char dir[_MAX_DIR];
+  char file[_MAX_FNAME];
+  char ext[_MAX_EXT];
+
+  _splitpath(path,drive,dir,file,ext);
+  _makepath(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.
+*/
+
+int 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 -- /%c\n", argv[i][1]);
+      return 1;
+    }
+    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
+  return exitcode;
+}
+#line - "dsl.cpp"
+
+#ifndef CONVERT_CASE
+#define CONVERT_CASE(c) (c)
+#endif
+#ifndef TAB_SPACING
+#define TAB_SPACING 8
+#endif
+
+#define ag_rp_1(v) (++sa << sd[v], lookup())
+
+#define ag_rp_2(v) (++sa << sd[v], lookup())
+
+#define ag_rp_3(v) (++sa << sd[v], lookup())
+
+#define ag_rp_4() (sa << '[')
+
+#define ag_rp_5() (concat(sa) << ']', lookup())
+
+#define ag_rp_6() (concat(sa))
+
+#define ag_rp_7() (concat(sa))
+
+#define ag_rp_8(c) (++sa << c)
+
+#define ag_rp_9(c) (sa << c)
+
+#define ag_rp_10() (action_string())
+
+#define ag_rp_11() (as << CONTEXT)
+
+static void ag_rp_12(void) {
+#line - "dsl.syn"
+action_pointer a; as >> a;
+#line - "dsl.cpp"
+}
+
+#define ag_rp_13() (--sa)
+
+#define ag_rp_14() (--sa)
+
+#define ag_rp_15() (--sa)
+
+#define ag_rp_16() (++sa)
+
+#define ag_rp_17(c) (sa << c)
+
+#define ag_rp_18() (sa << '(')
+
+#define ag_rp_19() (concat(sa) << ')')
+
+#define ag_rp_20() (++sa)
+
+#define ag_rp_21(c) (sa << c)
+
+#define ag_rp_22(c) (sa << c)
+
+#define ag_rp_23() ('\a')
+
+#define ag_rp_24() ('\b')
+
+#define ag_rp_25() ('\f')
+
+#define ag_rp_26() ('\n')
+
+#define ag_rp_27() ('\r')
+
+#define ag_rp_28() ('\t')
+
+#define ag_rp_29() ('\v')
+
+#define ag_rp_30() ('\\')
+
+#define ag_rp_31() ('\?')
+
+#define ag_rp_32() ('\'')
+
+#define ag_rp_33() ('"')
+
+#define ag_rp_34(d) (d-'0')
+
+#define ag_rp_35(n, d) (8*n + d-'0')
+
+#define ag_rp_36(n, d) (8*n + d-'0')
+
+#define ag_rp_37(n) ((int) n)
+
+#define ag_rp_38(n, d) (16*n + d)
+
+#define ag_rp_39() (exec())
+
+#define ag_rp_40() (exec_redirect_in())
+
+#define ag_rp_41(file) (exec_pipe_in(file))
+
+#define ag_rp_42(file) (grab_output(file))
+
+#define ag_rp_43(file) (append_output(file))
+
+#define ag_rp_44() (exec_pipe_out())
+
+#define ag_rp_45() (exec_redirect_in_pipe_out())
+
+#define ag_rp_46(file) (exec_pipe_in_pipe_out(file))
+
+#define ag_rp_47() (sa << 0, ++ps << (sa.top()))
+
+#define ag_rp_48() (ps << (sa.top()), sa << 0)
+
+#define ag_rp_49() (ps << (sa.top()), sa << 0)
+
+#define ag_rp_50(pc) (do_if(pc,1))
+
+#define ag_rp_51(cc) (cc)
+
+#define ag_rp_52(cc) (cc)
+
+#define ag_rp_53(pc, cc) (do_if(pc,cc!=0))
+
+#define ag_rp_54(cc) ((int) cc)
+
+#define ag_rp_55(cc) (do_if(0,cc != 0))
+
+#define ag_rp_56(v) (assign_value(v))
+
+#define ag_rp_57(v, x) (st[v].data.integer = (int) x)
+
+#define ag_rp_58(v) (st[v].data.text = copy(sa--))
+
+#define ag_rp_59(v, n, x) (st[v].data.text[(unsigned)n] = (char) x)
+
+#define ag_rp_60() (check_integer())
+
+#define ag_rp_61(cc) (do_while(cc != 0))
+
+#define ag_rp_62() (do_for_loop())
+
+#define ag_rp_63(n) (define_action(n))
+
+#define ag_rp_64(x) (define_integer((sa--).top(), x))
+
+#define ag_rp_65() (define_string())
+
+#define ag_rp_66() (0)
+
+#define ag_rp_67(n) (n+1)
+
+#define ag_rp_68(c) (++sa << c)
+
+#define ag_rp_69(c) (sa << c)
+
+#define ag_rp_70(c) (sa << c)
+
+#define ag_rp_71(c, x, y) (c != 0 ? x : y)
+
+#define ag_rp_72(x, y) (x != 0 || y!=0)
+
+#define ag_rp_73(x, y) (x != 0 && y !=0)
+
+#define ag_rp_74(x, y) (x | y)
+
+#define ag_rp_75(x, y) (x ^ y)
+
+#define ag_rp_76(x, y) (x & y)
+
+#define ag_rp_77(x, y) (x == y)
+
+#define ag_rp_78(x, y) (x != y)
+
+#define ag_rp_79() (string_comp() == 0)
+
+#define ag_rp_80() (string_comp() != 0)
+
+#define ag_rp_81(x, y) (x < y)
+
+#define ag_rp_82(x, y) (x > y)
+
+#define ag_rp_83(x, y) (x <= y)
+
+#define ag_rp_84(x, y) (x >= y)
+
+#define ag_rp_85() (string_comp() < 0)
+
+#define ag_rp_86() (string_comp() > 0)
+
+#define ag_rp_87() (string_comp() <= 0)
+
+#define ag_rp_88() (string_comp() >= 0)
+
+#define ag_rp_89(x, y) (x << (int) y)
+
+#define ag_rp_90(x, y) (x >> (int) y)
+
+#define ag_rp_91(x, y) (x + y)
+
+#define ag_rp_92(x, y) (x - y)
+
+#define ag_rp_93(x, y) (x * y)
+
+#define ag_rp_94(x, y) (x / y)
+
+#define ag_rp_95(x, y) (x % y)
+
+static long ag_rp_96(long x) {
+#line - "dsl.syn"
+      assert(x);
+      return x;
+    
+#line - "dsl.cpp"
+}
+
+#define ag_rp_97(x) (x)
+
+#define ag_rp_98(x) (-x)
+
+#define ag_rp_99(x) (~x)
+
+#define ag_rp_100(x) (!x)
+
+#define ag_rp_101(x) (x)
+
+#define ag_rp_102(x) (x)
+
+#define ag_rp_103(n) (((unsigned char *) (sa--).top())[(int) n])
+
+static long ag_rp_104(void) {
+#line - "dsl.syn"
+                              long temp;
+                              sscanf((sa--).top(), "%ld", &temp);
+                              return temp;
+                            
+#line - "dsl.cpp"
+}
+
+#define ag_rp_105(x) (x)
+
+#define ag_rp_106(x) ((*st[(unsigned)x].data.func)())
+
+#define ag_rp_107() (name_type())
+
+#define ag_rp_108() (concat(sa))
+
+#define ag_rp_109(first, last) (extract((unsigned)first, (unsigned) last))
+
+#define ag_rp_110() (sa << '[')
+
+#define ag_rp_111() (concat(sa) << ']', lookup())
+
+#define ag_rp_112(x) (++sa << st[(unsigned)x].data.text)
+
+#define ag_rp_113(x) (++sa << sd[(unsigned)x])
+
+#define ag_rp_114() (action_string())
+
+#define ag_rp_115(x) (++sa,sa.printf("%ld",x))
+
+#define ag_rp_116() (0)
+
+#define ag_rp_117(x, d) (16*x + d)
+
+#define ag_rp_118(d) (d - '0')
+
+#define ag_rp_119(d) ((d&7) + 9)
+
+#define ag_rp_120() (0)
+
+#define ag_rp_121(n, d) (8*n + d-'0')
+
+#define ag_rp_122(d) (d-'0')
+
+#define ag_rp_123(n, d) (10*n + d-'0')
+
+#define ag_rp_124(c) (c)
+
+#define ag_rp_125(scd) (display_queries(scd))
+
+#define ag_rp_126() (reset(qs), new screen_descriptor)
+
+#define ag_rp_127(scd) (scd->title = formula(), scd)
+
+#define ag_rp_128(scd, c) (scd->color = (char) c, scd)
+
+#define ag_rp_129(scd, c) (scd->entry_color = (char) c, scd)
+
+#define ag_rp_130(scd, c) (scd->highlight_color = (char) c, scd)
+
+#define ag_rp_131(scd, w, h) (scd->width = (unsigned)w, scd->height = (unsigned) h, scd)
+
+#define ag_rp_132(scd, px, py) (scd->pos.x = (unsigned) px,scd->pos.y = (unsigned) py, scd)
+
+#define ag_rp_133(scd, q) (qs << *q, delete q, scd)
+
+#define ag_rp_134(scd, q) (qs << *q, delete q, scd)
+
+#define ag_rp_135(fg, bg) (COLOR((unsigned)fg,(unsigned)bg))
+
+#define ag_rp_136() (clear(new query_item))
+
+#define ag_rp_137(q) (q->id = sd << (sa--).top(), q)
+
+#define ag_rp_138(q) (q->value = formula(), q)
+
+#define ag_rp_139(q) (q->prompt = formula(), q)
+
+#define ag_rp_140(q) (q->explanation = formula(),q)
+
+#define ag_rp_141() (clear(new query_item))
+
+#define ag_rp_142(q) (q->prompt = formula(), q)
+
+#define ag_rp_143(q) (q->explanation = formula(),q)
+
+#define ag_rp_144(q) (q->action = copy_action(), q)
+
+#define ag_rp_145() (reset(is) << (sd << (sa--).top()))
+
+#define ag_rp_146() (is << (sd << (sa--).top()))
+
+#define ag_rp_147() (sa << '[')
+
+#define ag_rp_148() (concat(sa) << ']')
+
+
+#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,  4,  5,  0,  6,  0,  7,  8,  9,  0, 10,
+    0, 11,  0,  0, 12,  0, 13, 14, 15,  0,  0,  0,  0,  0,  0, 16,  0, 17,
+   18, 19,  0, 20,  0, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33,
+    0,  0,  0,  0,  0, 34, 35, 36, 37,  0, 38,  0,  0, 39, 40, 41, 42, 43,
+   44, 45, 46, 47, 48, 49,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 50,
+    0, 51, 52, 53, 54, 55,  0,  0,  0,  0,  0,  0,  0,  0, 56,  0,  0, 57,
+   58, 59, 60, 61,  0,  0, 62, 63, 64, 65, 66,  0,  0, 67, 68, 69, 70,  0,
+   71,  0, 72,  0, 73,  0, 74,  0, 75,  0, 76,  0, 77, 78, 79, 80,  0, 81,
+   82, 83, 84, 85, 86, 87, 88,  0, 89, 90,  0, 91, 92,  0, 93, 94, 95, 96,
+    0, 97, 98, 99,100,101,102,103,104,  0,105,106,  0,107,  0,108,  0,109,
+  110,111,  0,112,113,114,115,  0,  0,  0,  0,  0,  0,116,117,118,119,120,
+  121,122,123,124,  0,  0,125,126,  0,127,128,129,130,131,132,133,134,135,
+  136,  0,137,138,139,140,141,  0,142,143,144,145,146,  0,  0,  0,147,148
+};
+
+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,213,  0,216,  0,220,  0,224,  0,222,  0,221,  0,226,  0,227,
+  0,228,  0,164,  0,165,  0,250,  0,251,  0,252,  0,253,  0,255,
+  0,256,  0,257,  0,258,  0,259,  0,260,  0,261,  0,262,  0,263,
+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, 33,
+   38, 46, 47, 60, 61, 62,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,100,101,102,104,105,108,115,116,124,255, 42, 47,255, 47, 62,100,255,
+   42, 47,255, 47, 62,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,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, 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, 60,
+   61,255, 61, 62,255,105,116,255, 33, 38, 46, 47, 60, 61, 62,104,105,108,
+  115,116,124,255, 42, 47,255, 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, 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, 61, 62,255,105,116,255, 33,
+   38, 46, 47, 60, 61, 62, 97, 98, 99,100,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,3,3,3,2,2,3,2,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,7,2,7,3,4,
+  0,0,4,2,3,7,4,0,0,4,2,3,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,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,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,0,0,4,0,0,4,7,7,4,
+  3,3,3,2,2,3,2,7,7,7,2,7,3,4,0,0,4,2,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,0,0,4,7,7,4,3,3,3,
+  2,3,3,2,7,7,7,7,7,7,7,7,7,2,7,3,4
+};
+
+static const unsigned short far ag_key_parm[] = {
+    0, 14, 17,  0,  0, 12, 14, 16,  0, 13, 14,  0, 14, 17,  0, 20, 18,  0,
+  239,237,  0,238,212,  0, 40, 10,  0,  0, 26, 44,  0, 36,  6,  0, 14,  0,
+    2,  8,  0, 22, 30, 16,  0,236,232,249,  0,  0,  0,235,  0, 12, 46, 34,
+    0,  0,  0, 28,  0, 32, 42,  0, 24, 38,  4,231,  0, 17, 12, 14, 16,  0,
+   14,  0, 14, 17,  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, 14, 17,
+    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, 17, 12,  6,  0,  0,  4,  0, 14, 17,  0,239,237,  0,238,212,  0,236,
+  232,249,  0,  0,235,  0,231,  0,  2, 14,  0, 22, 16,  0, 12,  6,  0,  0,
+    4,  0, 14, 17,  0, 20, 18,  0,  0,  0,  0, 20, 18,  0,  0,  0, 17,  0,
+   69, 68, 67, 66, 59, 60, 61, 62, 63, 64, 65, 77,  0,  0,  0, 14, 17,  0,
+  239,237,  0,238,212,  0, 30, 16,  0,236,232,249,  0,  0,235,  0, 12, 46,
+   34, 10, 26, 36, 28, 14, 32,  0, 24,231,  0, 14, 17,  0,  0,212, 10,  0,
+   14, 17,  0,  0,212,  0, 17,212,  0, 17, 46, 34, 26, 36, 28, 32, 30, 24,
+    0,212,  0, 17,  4,  0, 17,  0,  0, 20, 18,  0, 14,  0,  0, 30, 16,  0,
+  236,232,249, 17,237,235,238, 12, 46, 34, 26, 36, 28, 14, 32,  0, 24,231,
+    0, 14, 17,  0,239,237,  0,238,212,  0, 30, 16,  0,236,232,249,  0,  0,
+  235,  0, 12, 46, 34, 26, 36, 28, 14, 32,  0, 24,231,  0, 14, 17,  0,239,
+  237,  0,238,212,  0, 30, 16,  0,236,232,249,  0,  0,235,  0, 28, 14, 32,
+    0, 24,231,  0, 14, 17,  0,  0,  0,239,237,  0,238,212,  0, 30, 16,  0,
+  236,232,249, 17,  0,235,  0, 12, 46, 34, 26, 36, 28, 14, 32,  0, 24,231,
+    0,236,237,235,238,  0, 30, 16,  0,236,232,249, 17,235, 12, 46, 34, 26,
+   36, 28, 14, 32,  0, 24,231,  0, 30, 16,  0,232,249, 17, 12, 46, 34, 26,
+   36, 28, 14, 32,  0, 24,231,  0, 30, 16,  0,249, 17, 12, 46, 34, 26, 36,
+   28, 14, 32,  0, 24,231,  0, 14, 17,  0,239,237,  0,238,212,  0,  0, 26,
+    0, 30, 16,  0,236,232,249,  0,  0,235,  0, 12, 46, 34, 10,  0, 36, 28,
+   14, 32,  0, 24,  4,231,  0, 17, 44, 42,  0, 17, 40, 44, 42, 38,  0, 14,
+   34,  0, 34,  0,  8,  0, 17,212, 10,  0,  2, 14,  0, 22, 16,  0, 17, 12,
+    0,  6,  0,  0,  4,  0,  0,  0, 14, 17,  0,  0,  2,  0, 17,  2,  0,237,
+  238,  0, 10,  0,  2,  0,249,  0, 14, 17,  0,238,212,  0, 30, 16,  0,236,
+  232,249,  0,237,235,  0, 12, 46, 34, 10, 26, 36, 28, 14, 32,  0, 24,231,
+    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,379,
+  381,383,152,155,385,158,387,  0,  0,398,  0,400,405,  0,389,395,170,173,
+  410,  0,  0,  0,  0,  0,  0,  0,182,185,  0,  0,  0,  0,191,  0,415,  0,
+    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,198,  0,  0,  0,  0,
+    0,  0,  0,  0,  0,  0,474,477,  0,417,419,421,213,216,423,219,425,431,
+  437,442,444,449,454,463,466,222,482,487,  0,  0,  0,  0,245,489,491,  0,
+    0,  0,  0,252,493,  0,495,497,  0,499,501,507,512,517,522,531,539,543,
+    0,548,  0,550,552,  0,557,559,  0,  0,  0,  0,563,279,  0,626,629,  0,
+  565,567,569,571,573,575,577,579,585,591,596,601,606,615,618,285,634,639,
+    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,696,699,  0,641,643,645,307,310,
+  647,313,649,655,661,666,671,676,685,688,316,704,709,  0,  0,  0,  0,  0,
+    0,  0,  0,  0,  0,739,742,  0,711,713,715,338,341,717,344,719,728,731,
+  347,747,752,  0,  0,  0,  0,364,  0,  0,  0,  0,  0,  0,  0,811,814,  0,
+  754,756,758,760,369,762,372,764,770,776,781,786,791,800,803,375,819,824,
+    0,826,828,830,832,  0,891,894,  0,834,836,838,840,842,844,850,856,861,
+  866,871,880,883,402,899,904,  0,959,962,  0,906,908,910,912,918,924,929,
+  934,939,948,951,422,967,972,  0,1025,1028,  0,974,976,978,984,990,995,
+  1000,1005,1014,1017,440,1033,1038,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+    0,1067,1070,  0,1099,1102,  0,1040,1042,1044,457,460,1046,463,1048,1054,
+  1060,1065,466,1074,1079,1088,1091,469,1107,1112,1117,  0,1119,1121,1132,
+    0,1138,1140,1147,1158,1164,  0,1172,1174,  0,1179,  0,1184,  0,1186,
+  1188,1190,  0,  0,1207,  0,1209,1214,  0,1192,1194,1200,1204,514,517,1219,
+    0,1224,  0,  0,  0,  0,530,1228,  0,1230,1232,  0,1234,1236,  0,1238,
+    0,1240,  0,1242,  0,  0,  0,  0,  0,  0,  0,1303,1306,  0,1244,1246,
+  1248,548,1250,1252,551,1254,1260,1266,1271,1273,1278,1283,1292,1295,554,
+  1311,1316,  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,
+  161,  0,  0, 72, 72,  0,145,176,188,  0,194, 72,196,211,  0,225,248, 72,
+   72,255,258, 72,  0,  0, 72,258,  0,261,  0,258,258,258,271,258,  0,273,
+  276,196,  0,282,  0,194,288, 67,211,319,319,350,367,319,319,282,282,282,
+  282,  0,  0,194,194,194,194,194,378,378,397,378,397,288,405,425,425,425,
+  425,443, 67, 72,188,188,188,188,196,472,  0,  0,211,211,  0, 72,  0,194,
+    0,194, 72,  0,493, 72,  0,497, 72,  0, 72,  0,503,506,503,506, 72,  0,
+  196, 72,  0,508,194,  0,194,  0,282,  0,  0,  0,510,258,258,258,520,528,
+  145,  0,  0,  0,  0,  0,  4,  0,  0,397,  0,282,194,282,194,282,194,194,
+  194,194,194,282,194,282,  0,282,  0,  0,  0,282,  0,282,  0,194,194,194,
+  194,194,194,282,194,282,194,194,282,194,282,194,282,194,  0,211,  0,  0,
+    0,258,  0,196, 72,  0, 72,  0,196,  0,  0, 72,  0, 72,  0,196,194,194,
+  196,196,194,  0, 72,  0,  0,196,196,196,196,196,258,  0,258,  0,533,536,
+  319,  0,194,288,  0,378,378,194,378,378,288,288,288,288,405,405,378,378,
+  378,378,539,288,288,405,425,425,425,425,  0,  0,  0,  0,  0,  0,  0,  0,
+    0,  0,  0,  0,  0,  0,196,196,542,194,258,258,544,  0,546,546,282,194,
+    0,557,196,196,196,196,196,196,282,194,194,194,  0,  0, 72,  0,196,  0,
+  282,194,  0,196,  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, 
+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, 
+111,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, 62,0, 111,0, 62,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, 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, 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, 61,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, 99,116,105,111,110,0, 
+117,116,116,111,110,0, 111,108,111,114,0, 111,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[] = {
+   27,195,195,195,195,195,195,195,195, 10, 16, 10, 10, 10,195,195,195,195,
+  195,195,195,195,195,195,195,195, 27,195,195,195,195,195, 10,246, 55,205,
+  195,244,234,171,215,214,242,240,254,241,195,243,169,196,196,196,196,196,
+  196,196,197,197,229,218,209,217,211,230,219,168,168,168,168,168,168,198,
+  198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,
+  198,204, 75,203,233,198,195,168,168,168,168,168,168,198,198,198,198,198,
+  198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,207,210,206,
+  245,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,
+  195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,
+  195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,
+  195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,
+  195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,
+  195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,
+  195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,
+  195,195,195,195
+};
+
+#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[] = {
+   29, 30, 31,  0,154,157,155,158,  0
+};
+
+static const unsigned short far ag_tstt[] = {
+228,227,226,207,27,17,16,14,10,0,1,11,12,119,199,
+254,246,245,244,243,242,241,240,234,233,230,229,219,218,217,215,214,211,210,
+  209,207,206,205,204,203,198,197,196,195,171,169,168,75,55,16,14,13,10,0,
+  11,12,
+14,10,0,1,11,12,
+228,227,226,207,27,17,16,0,7,21,22,23,24,25,26,43,116,117,118,200,
+254,246,245,244,243,242,241,240,234,233,230,229,219,218,217,215,214,211,210,
+  209,207,206,205,204,203,198,197,196,195,171,169,168,75,55,16,10,0,19,20,
+198,168,14,10,0,1,11,12,119,199,
+198,168,14,10,0,1,11,12,119,199,
+254,246,245,244,243,242,241,240,234,233,230,229,218,198,197,196,195,171,169,
+  168,75,14,10,0,1,11,12,119,199,
+263,262,261,260,259,258,257,256,255,254,253,252,251,250,246,245,244,243,242,
+  241,240,234,233,230,229,228,227,226,224,220,219,218,217,216,215,211,210,
+  209,207,206,205,198,197,196,195,171,169,168,75,55,17,16,14,10,0,1,11,12,
+  119,199,
+263,262,261,260,259,258,257,256,255,254,253,252,251,250,246,245,244,243,242,
+  241,240,234,233,230,229,228,227,226,224,220,219,218,217,216,215,213,211,
+  210,209,207,206,205,198,197,196,195,171,169,168,75,55,27,17,16,14,10,0,
+  1,11,12,119,199,
+198,168,0,9,223,
+198,168,0,9,223,
+254,246,245,244,243,242,241,240,234,233,230,229,218,198,197,196,195,171,169,
+  168,75,0,8,208,225,
+254,250,246,245,244,243,242,241,240,234,233,230,229,228,227,226,224,220,218,
+  216,215,206,198,197,196,195,171,169,168,75,55,17,16,0,7,89,90,200,
+228,227,226,207,17,16,0,7,22,23,24,43,116,117,118,200,
+27,0,
+254,246,245,244,243,242,241,240,234,233,230,229,219,218,217,215,214,211,210,
+  209,207,206,205,204,203,198,197,196,195,171,169,168,75,55,10,0,
+16,0,
+254,249,244,243,242,241,240,239,238,237,236,235,234,233,232,231,230,229,219,
+  218,217,215,214,212,211,210,209,207,206,205,204,198,197,196,169,168,27,
+  17,16,14,10,0,1,11,12,119,121,199,
+217,0,105,
+217,0,105,
+254,246,245,244,243,242,241,240,234,233,230,229,218,198,197,196,195,171,169,
+  168,75,0,
+207,14,10,0,1,11,12,119,199,
+207,0,40,41,43,
+17,16,0,7,200,
+254,250,246,245,244,243,242,241,240,234,233,230,229,228,227,226,224,220,218,
+  216,215,206,198,197,196,195,171,169,168,75,55,0,2,4,5,23,28,29,30,31,36,
+  48,54,80,81,85,91,92,93,94,96,97,98,100,101,102,103,104,111,112,116,117,
+  118,174,175,201,202,208,
+254,246,245,244,243,242,241,240,234,233,230,229,219,218,217,215,211,210,209,
+  207,206,205,198,197,196,195,171,169,168,165,164,75,55,17,16,14,10,0,1,
+  11,12,119,199,
+217,215,207,198,168,55,0,4,9,40,41,43,50,54,105,108,152,153,157,158,202,223,
+246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,0,3,4,6,
+  9,37,40,41,43,50,54,99,105,108,110,122,125,127,129,130,132,134,137,140,
+  142,143,144,145,150,151,152,153,154,155,157,158,161,162,163,166,202,223,
+  247,248,
+254,246,245,244,243,242,241,240,234,233,230,229,218,198,197,196,195,171,169,
+  168,75,14,10,0,1,11,12,208,
+254,246,245,244,243,242,241,240,234,233,230,229,219,218,217,215,211,210,209,
+  207,206,205,198,197,196,195,171,169,168,75,55,17,16,0,2,4,5,7,37,40,41,
+  42,43,44,48,54,84,86,87,105,109,200,201,202,208,
+254,246,245,244,243,242,241,240,234,233,230,229,219,218,217,215,214,211,210,
+  209,207,206,205,204,203,198,197,196,195,171,169,168,77,75,69,68,67,66,
+  65,64,63,62,61,60,59,55,10,0,56,58,70,71,72,73,74,
+254,246,245,244,243,242,241,240,234,233,230,229,219,218,217,215,214,211,210,
+  209,207,206,205,204,203,198,197,196,195,171,169,168,75,55,16,10,0,51,53,
+263,258,257,256,255,254,253,252,251,249,246,245,244,243,242,241,240,239,238,
+  237,236,235,234,233,232,231,230,229,228,227,226,221,219,218,217,215,214,
+  212,211,210,209,207,206,205,204,203,198,197,196,195,171,169,168,75,55,
+  27,17,16,14,10,0,1,11,12,119,199,
+254,246,245,244,243,242,241,240,234,233,230,229,221,219,218,217,215,214,212,
+  211,210,209,207,206,205,204,203,198,197,196,195,171,169,168,75,55,17,16,
+  14,10,0,1,11,12,119,199,
+215,14,10,0,1,11,12,119,199,
+207,14,10,0,1,11,12,119,199,
+254,246,245,244,243,242,241,240,234,233,230,229,219,218,217,215,214,212,211,
+  210,209,207,206,205,204,203,198,197,196,195,171,169,168,75,55,17,16,14,
+  10,0,1,11,12,119,199,
+204,0,32,
+215,14,10,0,1,11,12,119,199,
+215,0,50,
+207,0,43,
+198,168,14,10,0,1,11,12,119,199,
+205,0,37,
+215,0,50,
+263,258,257,256,255,253,252,251,206,17,16,0,7,42,176,178,179,180,181,183,
+  184,185,186,187,192,200,
+198,168,0,9,223,
+219,217,0,105,109,
+217,0,105,
+217,0,105,
+212,211,210,0,86,87,88,
+254,246,245,244,243,242,241,240,234,233,230,229,218,215,212,211,210,209,207,
+  206,198,197,196,195,171,169,168,75,55,17,16,0,2,4,5,28,29,30,31,34,38,
+  40,41,43,48,54,82,83,201,202,208,
+207,0,40,41,43,
+220,0,103,111,
+213,206,17,16,0,7,89,90,200,
+206,17,16,0,7,89,90,200,
+206,0,42,
+254,246,245,244,243,242,241,240,234,233,230,229,218,217,215,207,205,198,197,
+  196,195,171,169,168,165,164,75,55,14,10,0,1,11,12,119,199,
+217,215,207,198,168,55,0,4,9,40,41,43,50,54,105,108,152,153,157,158,202,223,
+217,215,207,205,198,197,196,171,169,168,165,164,55,0,3,4,6,9,37,40,41,43,50,
+  54,105,110,152,153,154,155,157,158,161,162,163,166,202,223,247,248,
+219,204,0,32,109,
+228,227,226,218,207,206,205,27,17,16,0,37,106,107,
+254,246,245,244,243,242,241,240,234,233,230,229,219,218,217,215,214,211,210,
+  209,207,206,205,204,203,198,197,196,195,169,168,77,75,69,68,67,66,65,64,
+  63,62,61,60,59,55,10,0,58,70,71,72,73,74,172,
+197,196,169,0,
+196,169,0,
+197,196,169,168,0,79,
+254,246,245,244,243,242,241,240,234,233,230,229,219,218,217,215,211,210,209,
+  207,206,205,198,197,196,195,171,169,168,75,55,17,16,14,10,0,1,11,12,119,
+  199,
+263,258,257,256,255,254,253,252,251,249,244,243,242,241,240,239,238,237,236,
+  235,234,233,232,231,230,229,228,227,226,219,218,217,214,212,211,210,209,
+  207,206,205,204,27,17,16,14,10,0,1,11,12,119,199,
+263,258,257,256,255,254,253,252,251,249,244,243,242,241,240,239,238,237,236,
+  235,234,233,232,231,230,229,228,227,226,219,218,217,214,212,211,210,209,
+  207,206,205,204,27,17,16,14,10,0,1,11,12,119,199,
+246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,14,10,0,
+  1,11,12,119,199,
+246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,14,10,0,
+  1,11,12,119,199,
+246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,14,10,0,
+  1,11,12,119,199,
+246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,14,10,0,
+  1,11,12,119,199,
+215,0,50,156,
+217,215,207,198,168,55,0,4,9,40,41,43,50,54,105,153,157,158,202,223,
+246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,0,3,4,6,
+  9,37,40,41,43,50,54,105,110,143,144,145,150,151,152,153,154,155,157,158,
+  161,162,163,166,202,223,247,248,
+246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,0,3,4,6,
+  9,37,40,41,43,50,54,105,110,143,144,145,150,151,152,153,154,155,157,158,
+  161,162,163,166,202,223,247,248,
+246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,0,3,4,6,
+  9,37,40,41,43,50,54,105,110,143,144,145,150,151,152,153,154,155,157,158,
+  161,162,163,166,202,223,247,248,
+246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,0,3,4,6,
+  9,37,40,41,43,50,54,105,110,143,144,145,150,151,152,153,154,155,157,158,
+  161,162,163,166,202,223,247,248,
+246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,0,3,4,6,
+  9,37,40,41,43,50,54,99,105,108,110,122,125,127,129,130,132,134,137,140,
+  142,143,144,145,150,151,152,153,154,155,157,158,161,162,163,166,202,223,
+  247,248,
+244,243,242,0,146,147,149,
+241,240,0,143,144,
+219,204,0,32,109,
+239,212,0,88,141,
+238,237,236,235,211,209,205,0,37,84,87,135,136,138,139,
+238,237,211,209,0,84,87,138,139,
+236,235,0,135,136,
+234,0,133,
+233,0,131,
+210,0,86,
+232,0,128,
+231,230,0,123,126,
+228,227,226,218,207,206,27,17,16,0,106,107,
+254,246,245,244,243,242,241,240,234,233,230,229,218,198,197,196,195,171,169,
+  168,75,0,
+254,246,245,244,243,242,241,240,234,233,230,229,219,218,217,215,211,210,209,
+  207,206,205,198,197,196,195,171,169,168,165,164,75,55,17,16,14,10,0,1,
+  11,12,119,199,
+254,246,245,244,243,242,241,240,234,233,230,229,219,218,217,215,211,210,209,
+  207,206,205,198,197,196,195,171,169,168,165,164,75,55,17,16,14,10,0,1,
+  11,12,119,199,
+254,246,245,244,243,242,241,240,234,233,230,229,219,218,217,215,211,210,209,
+  207,206,205,198,197,196,195,171,169,168,165,164,75,55,17,16,14,10,0,1,
+  11,12,119,199,
+254,246,245,244,243,242,241,240,234,233,230,229,219,218,217,215,211,210,209,
+  207,206,205,198,197,196,195,171,169,168,165,164,75,55,17,16,14,10,0,1,
+  11,12,119,199,
+204,0,32,
+263,258,257,256,255,254,253,252,251,249,246,245,244,243,242,241,240,239,238,
+  237,236,235,234,233,232,231,230,229,228,227,226,221,220,219,218,217,215,
+  214,213,212,211,210,209,207,206,205,204,203,198,197,196,195,171,169,168,
+  75,55,27,17,16,14,10,0,1,11,12,119,199,
+196,169,0,
+197,196,169,168,0,78,79,
+196,169,0,
+196,169,0,
+215,0,48,
+254,246,245,244,243,242,241,240,234,233,230,229,218,215,207,198,197,196,195,
+  171,169,168,75,55,14,10,0,1,11,12,119,199,
+254,246,245,244,243,242,241,240,234,233,230,229,218,215,207,198,197,196,195,
+  171,169,168,75,55,0,33,
+246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,0,3,4,6,
+  9,37,40,41,43,50,54,99,105,108,110,122,125,127,129,130,132,134,137,140,
+  142,143,144,145,150,151,152,153,154,155,157,158,161,162,163,166,202,223,
+  247,248,
+254,246,245,244,243,242,241,240,234,233,230,229,218,215,198,197,196,195,171,
+  169,168,75,55,0,2,4,5,28,29,30,31,48,54,201,202,208,
+246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,0,3,4,6,
+  9,37,40,41,43,50,54,99,105,108,110,122,125,127,129,130,132,134,137,140,
+  142,143,144,145,150,151,152,153,154,155,157,158,161,162,163,166,202,223,
+  247,248,
+207,14,10,0,1,11,12,119,199,
+207,0,43,
+262,261,207,206,17,16,0,7,40,41,42,43,190,191,200,
+207,14,10,0,1,11,12,119,199,
+207,0,43,
+262,261,260,259,206,17,16,0,7,42,188,189,190,191,200,
+217,14,10,0,1,11,12,119,199,
+217,0,105,
+217,14,10,0,1,11,12,119,199,
+217,0,105,
+257,14,10,0,1,11,12,119,199,
+257,0,178,186,
+257,14,10,0,1,11,12,119,199,
+257,0,178,186,
+217,14,10,0,1,11,12,119,199,
+217,0,105,
+17,16,0,7,200,
+217,14,10,0,1,11,12,119,199,
+217,0,105,
+222,0,113,
+217,215,207,205,198,197,196,171,169,168,165,164,55,0,3,4,6,9,37,40,41,43,50,
+  54,105,110,152,153,154,155,157,158,161,162,163,166,202,223,247,248,
+217,215,207,198,168,55,0,4,9,40,41,43,50,54,105,108,152,153,157,158,202,223,
+246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,0,3,4,6,
+  9,37,40,41,43,50,54,99,105,108,110,122,125,127,129,130,132,134,137,140,
+  142,143,144,145,150,151,152,153,154,155,157,158,161,162,163,166,202,223,
+  247,248,
+254,246,245,244,243,242,241,240,234,233,230,229,218,215,207,198,197,196,195,
+  171,169,168,75,55,0,2,4,5,28,29,30,31,34,38,40,41,43,48,54,201,202,208,
+254,246,245,244,243,242,241,240,234,233,230,229,218,217,215,207,205,198,197,
+  196,195,171,169,168,165,164,75,55,14,10,0,1,11,12,119,199,
+254,246,245,244,243,242,241,240,234,233,230,229,218,215,207,198,197,196,195,
+  171,169,168,75,55,0,2,4,5,28,29,30,31,34,38,40,41,43,48,54,201,202,208,
+254,246,245,244,243,242,241,240,234,233,230,229,218,215,207,198,197,196,195,
+  171,169,168,75,55,0,2,4,5,28,29,30,31,34,38,40,41,43,48,54,201,202,208,
+254,246,245,244,243,242,241,240,234,233,230,229,218,215,198,197,196,195,171,
+  169,168,75,55,0,2,4,5,28,29,30,31,36,48,54,81,201,202,208,
+204,0,32,
+205,0,37,
+254,246,245,244,243,242,241,240,234,233,230,229,218,215,207,198,197,196,195,
+  171,169,168,75,55,0,2,4,5,28,29,30,31,34,38,40,41,43,48,54,201,202,208,
+212,211,210,209,206,17,16,0,84,
+254,250,246,245,244,243,242,241,240,234,233,230,229,228,227,226,224,220,218,
+  216,215,198,197,196,195,171,169,168,75,55,17,16,0,2,4,5,7,23,28,29,30,
+  31,36,48,54,80,81,85,94,96,97,98,100,101,102,103,104,111,112,116,117,
+  118,174,175,200,201,202,208,
+213,0,95,
+254,250,246,245,244,243,242,241,240,234,233,230,229,228,227,226,224,220,218,
+  216,215,198,197,196,195,171,169,168,75,55,17,16,0,2,4,5,7,23,28,29,30,
+  31,36,48,54,80,81,85,94,96,97,98,100,101,102,103,104,111,112,116,117,
+  118,174,175,200,201,202,208,
+214,205,0,37,49,
+219,204,0,32,109,
+254,246,245,244,243,242,241,240,234,233,230,229,218,215,207,198,197,196,195,
+  171,169,168,75,55,0,160,
+215,0,50,
+217,215,207,198,168,55,0,4,9,40,41,43,50,54,105,152,153,157,158,202,223,
+228,227,226,207,206,27,17,16,14,10,0,1,11,12,119,199,
+171,0,
+254,246,245,244,243,242,241,240,234,233,230,229,218,215,207,198,197,196,195,
+  171,169,168,75,55,0,2,4,5,28,29,30,31,34,38,40,41,43,48,54,201,202,208,
+238,237,236,235,214,211,209,205,0,37,49,84,87,135,136,138,139,
+214,0,49,
+246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,14,10,0,
+  1,11,12,119,199,
+246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,0,3,4,6,
+  9,37,40,41,43,50,54,105,110,143,144,145,148,150,151,152,153,154,155,157,
+  158,161,162,163,166,202,223,247,248,
+246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,14,10,0,
+  1,11,12,119,199,
+246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,0,3,4,6,
+  9,37,40,41,43,50,54,105,110,143,144,145,148,150,151,152,153,154,155,157,
+  158,161,162,163,166,202,223,247,248,
+246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,14,10,0,
+  1,11,12,119,199,
+246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,0,3,4,6,
+  9,37,40,41,43,50,54,105,110,143,144,145,150,151,152,153,154,155,157,158,
+  161,162,163,166,202,223,247,248,
+246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,0,3,4,6,
+  9,37,40,41,43,50,54,105,110,142,143,144,145,150,151,152,153,154,155,157,
+  158,161,162,163,166,202,223,247,248,
+246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,0,3,4,6,
+  9,37,40,41,43,50,54,105,110,142,143,144,145,150,151,152,153,154,155,157,
+  158,161,162,163,166,202,223,247,248,
+217,215,207,205,198,197,196,171,169,168,165,164,55,0,3,4,6,9,37,40,41,43,50,
+  54,105,110,152,153,154,155,157,158,161,162,163,166,202,223,247,248,
+246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,0,3,4,6,
+  9,37,40,41,43,50,54,105,110,140,142,143,144,145,150,151,152,153,154,155,
+  157,158,161,162,163,166,202,223,247,248,
+246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,14,10,0,
+  1,11,12,119,199,
+246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,0,3,4,6,
+  9,37,40,41,43,50,54,105,110,140,142,143,144,145,150,151,152,153,154,155,
+  157,158,161,162,163,166,202,223,247,248,
+246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,14,10,0,
+  1,11,12,119,199,
+217,215,207,198,168,55,0,4,9,40,41,43,50,54,105,108,152,153,157,158,202,223,
+246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,14,10,0,
+  1,11,12,119,199,
+217,215,207,198,168,55,0,4,9,40,41,43,50,54,105,108,152,153,157,158,202,223,
+217,215,207,198,168,55,0,4,9,40,41,43,50,54,105,108,152,153,157,158,202,223,
+217,215,207,198,168,55,0,4,9,40,41,43,50,54,105,108,152,153,157,158,202,223,
+246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,14,10,0,
+  1,11,12,119,199,
+217,215,207,198,168,55,0,4,9,40,41,43,50,54,105,108,152,153,157,158,202,223,
+246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,14,10,0,
+  1,11,12,119,199,
+217,215,207,198,168,55,0,4,9,40,41,43,50,54,105,108,152,153,157,158,202,223,
+246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,0,3,4,6,
+  9,37,40,41,43,50,54,105,110,137,140,142,143,144,145,150,151,152,153,154,
+  155,157,158,161,162,163,166,202,223,247,248,
+246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,0,3,4,6,
+  9,37,40,41,43,50,54,105,110,137,140,142,143,144,145,150,151,152,153,154,
+  155,157,158,161,162,163,166,202,223,247,248,
+246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,0,3,4,6,
+  9,37,40,41,43,50,54,105,110,137,140,142,143,144,145,150,151,152,153,154,
+  155,157,158,161,162,163,166,202,223,247,248,
+246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,0,3,4,6,
+  9,37,40,41,43,50,54,105,110,137,140,142,143,144,145,150,151,152,153,154,
+  155,157,158,161,162,163,166,202,223,247,248,
+246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,0,3,4,6,
+  9,37,40,41,43,50,54,105,108,110,134,137,140,142,143,144,145,150,151,152,
+  153,154,155,157,158,161,162,163,166,202,223,247,248,
+246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,0,3,4,6,
+  9,37,40,41,43,50,54,105,108,110,134,137,140,142,143,144,145,150,151,152,
+  153,154,155,157,158,161,162,163,166,202,223,247,248,
+246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,14,10,0,
+  1,11,12,119,199,
+246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,0,3,4,6,
+  9,37,40,41,43,50,54,105,108,110,132,134,137,140,142,143,144,145,150,151,
+  152,153,154,155,157,158,161,162,163,166,202,223,247,248,
+246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,14,10,0,
+  1,11,12,119,199,
+246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,0,3,4,6,
+  9,37,40,41,43,50,54,105,108,110,130,132,134,137,140,142,143,144,145,150,
+  151,152,153,154,155,157,158,161,162,163,166,202,223,247,248,
+246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,0,3,4,6,
+  9,37,40,41,43,50,54,105,108,110,129,130,132,134,137,140,142,143,144,145,
+  150,151,152,153,154,155,157,158,161,162,163,166,202,223,247,248,
+246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,14,10,0,
+  1,11,12,119,199,
+246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,0,3,4,6,
+  9,37,40,41,43,50,54,105,108,110,127,129,130,132,134,137,140,142,143,144,
+  145,150,151,152,153,154,155,157,158,161,162,163,166,202,223,247,248,
+246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,14,10,0,
+  1,11,12,119,199,
+246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,0,3,4,6,
+  9,37,40,41,43,50,54,105,108,110,125,127,129,130,132,134,137,140,142,143,
+  144,145,150,151,152,153,154,155,157,158,161,162,163,166,202,223,247,248,
+246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,14,10,0,
+  1,11,12,119,199,
+246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,0,3,4,6,
+  9,37,40,41,43,50,54,99,105,108,110,122,125,127,129,130,132,134,137,140,
+  142,143,144,145,150,151,152,153,154,155,157,158,161,162,163,166,202,223,
+  247,248,
+254,246,245,244,243,242,241,240,234,233,230,229,218,215,207,198,197,196,195,
+  171,169,168,75,55,0,2,4,5,40,41,43,44,46,47,48,54,201,202,208,
+197,196,169,168,0,79,
+254,246,245,244,243,242,241,240,234,233,230,229,219,218,217,215,214,211,210,
+  209,207,206,205,204,203,198,197,196,195,171,169,168,75,55,16,10,0,51,53,
+254,246,245,244,243,242,241,240,234,233,230,229,218,215,207,198,197,196,195,
+  171,169,168,75,55,0,2,4,5,28,29,30,31,34,38,40,41,43,48,54,201,202,208,
+214,0,49,
+204,0,32,
+214,0,49,
+17,16,0,7,200,
+217,14,10,0,1,11,12,119,199,
+217,0,105,
+217,14,10,0,1,11,12,119,199,
+217,0,105,
+17,16,0,7,200,
+217,0,105,
+217,0,105,
+217,14,10,0,1,11,12,119,199,
+217,0,105,
+217,14,10,0,1,11,12,119,199,
+217,0,105,
+17,16,0,7,200,
+246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,0,3,4,6,
+  9,37,40,41,43,50,54,99,105,108,110,122,125,127,129,130,132,134,137,140,
+  142,143,144,145,150,151,152,153,154,155,157,158,161,162,163,166,202,223,
+  247,248,
+246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,0,3,4,6,
+  9,37,40,41,43,50,54,99,105,108,110,122,125,127,129,130,132,134,137,140,
+  142,143,144,145,150,151,152,153,154,155,157,158,161,162,163,166,202,223,
+  247,248,
+17,16,0,7,200,
+17,16,0,7,200,
+246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,0,3,4,6,
+  9,37,40,41,43,50,54,99,105,108,110,122,125,127,129,130,132,134,137,140,
+  142,143,144,145,150,151,152,153,154,155,157,158,161,162,163,166,202,223,
+  247,248,
+254,246,245,244,243,242,241,240,234,233,230,229,218,215,198,197,196,195,171,
+  169,168,75,55,0,2,4,5,48,54,177,193,201,202,208,
+254,246,245,244,243,242,241,240,234,233,230,229,218,215,207,198,197,196,195,
+  171,169,168,75,55,14,10,0,1,11,12,119,199,
+254,246,245,244,243,242,241,240,234,233,230,229,218,215,207,198,197,196,195,
+  171,169,168,75,55,0,2,4,5,28,29,30,31,34,38,40,41,43,48,54,201,202,208,
+217,0,105,
+218,206,205,17,16,0,37,106,107,
+218,206,17,16,0,106,107,
+205,0,37,
+205,0,37,
+205,0,37,
+254,246,245,244,243,242,241,240,234,233,230,229,218,215,212,211,210,207,206,
+  198,197,196,195,171,169,168,75,55,17,16,0,2,4,5,28,29,30,31,34,38,40,41,
+  43,48,54,82,83,201,202,208,
+254,246,245,244,243,242,241,240,234,233,230,229,218,215,207,198,197,196,195,
+  171,169,168,75,55,0,2,4,5,28,29,30,31,38,40,41,43,48,54,201,202,208,
+205,0,37,
+254,246,245,244,243,242,241,240,234,233,230,229,218,215,207,198,197,196,195,
+  171,169,168,75,55,0,2,4,5,28,29,30,31,34,38,40,41,43,48,54,201,202,208,
+216,207,17,16,14,10,0,1,11,12,119,199,
+216,207,17,16,0,7,40,41,43,89,90,200,
+263,258,257,256,255,254,253,252,251,249,244,243,242,241,240,239,238,237,236,
+  235,234,233,232,231,230,229,228,227,226,219,218,217,214,212,211,210,209,
+  207,206,205,204,27,17,16,14,10,0,1,11,12,119,199,
+254,246,245,244,243,242,241,240,234,233,230,229,218,215,207,198,197,196,195,
+  171,169,168,75,55,0,2,4,5,28,29,30,31,34,38,40,41,43,48,54,201,202,208,
+246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,0,3,4,6,
+  9,37,40,41,43,50,54,99,105,108,110,122,125,127,129,130,132,134,137,140,
+  142,143,144,145,150,151,152,153,154,155,157,158,161,162,163,166,202,223,
+  247,248,
+219,204,0,32,109,
+214,205,0,37,49,
+244,243,242,0,146,147,149,
+244,243,242,0,146,147,149,
+246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,0,3,4,6,
+  9,37,40,41,43,50,54,99,105,108,110,122,125,127,129,130,132,134,137,140,
+  142,143,144,145,150,151,152,153,154,155,157,158,161,162,163,166,202,223,
+  247,248,
+241,240,0,143,144,
+241,240,0,143,144,
+205,0,37,
+205,0,37,
+205,0,37,
+205,0,37,
+205,0,37,
+205,0,37,
+239,212,0,88,141,
+239,212,0,88,141,
+239,212,0,88,141,
+239,212,0,88,141,
+238,237,211,209,205,0,37,84,87,138,139,
+238,237,211,209,0,84,87,138,139,
+238,237,211,209,0,84,87,138,139,
+236,235,0,135,136,
+234,0,133,
+233,0,131,
+210,0,86,
+232,0,128,
+229,0,124,
+204,0,32,
+205,203,0,35,37,
+205,203,0,35,37,
+207,0,40,41,43,
+254,246,245,244,243,242,241,240,234,233,230,229,218,215,198,197,196,195,171,
+  169,168,75,55,0,2,4,5,48,54,177,193,201,202,208,
+254,246,245,244,243,242,241,240,234,233,230,229,218,215,198,197,196,195,171,
+  169,168,75,55,0,2,4,5,48,54,177,193,201,202,208,
+254,246,245,244,243,242,241,240,234,233,230,229,218,215,198,197,196,195,171,
+  169,168,75,55,0,2,4,5,48,54,177,193,201,202,208,
+254,246,245,244,243,242,241,240,234,233,230,229,218,215,198,197,196,195,171,
+  169,168,75,55,0,2,4,5,48,54,177,193,201,202,208,
+254,246,245,244,243,242,241,240,234,233,230,229,218,215,198,197,196,195,171,
+  169,168,75,55,0,2,4,5,48,54,177,193,201,202,208,
+254,246,245,244,243,242,241,240,234,233,230,229,218,198,197,196,195,171,169,
+  168,75,0,2,208,
+254,0,182,
+254,0,182,
+254,0,182,
+204,0,32,
+205,17,16,0,7,37,200,
+221,207,205,0,37,114,115,
+246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,0,3,4,6,
+  9,37,40,41,43,50,54,99,105,108,110,122,125,127,129,130,132,134,137,140,
+  142,143,144,145,150,151,152,153,154,155,157,158,161,162,163,166,202,223,
+  247,248,
+212,211,210,206,17,16,0,
+212,211,210,206,205,17,16,0,37,
+216,0,97,98,
+205,203,0,35,37,
+249,0,159,
+249,214,0,49,159,
+246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,14,10,0,
+  1,11,12,119,199,
+246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,0,3,4,6,
+  9,37,40,41,43,50,54,99,105,108,110,122,125,127,129,130,132,134,137,140,
+  142,143,144,145,150,151,152,153,154,155,157,158,161,162,163,166,202,223,
+  247,248,
+254,246,245,244,243,242,241,240,234,233,230,229,218,215,207,198,197,196,195,
+  171,169,168,75,55,0,2,4,5,40,41,43,44,47,48,54,201,202,208,
+263,258,257,256,255,254,253,252,251,249,246,245,244,243,242,241,240,238,237,
+  236,235,234,233,232,231,230,229,228,227,226,221,219,218,217,215,214,212,
+  211,210,209,207,206,205,204,203,198,197,196,195,171,169,168,75,55,27,17,
+  16,14,10,0,1,11,12,119,199,
+205,17,16,0,7,37,200,
+205,17,16,0,7,37,200,
+205,17,16,0,7,37,200,
+205,17,16,0,7,37,200,
+205,17,16,0,7,37,200,
+17,16,0,7,200,
+246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,14,10,0,
+  1,11,12,119,199,
+246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,0,3,4,6,
+  9,37,40,41,43,50,54,99,105,108,110,122,125,127,129,130,132,134,137,140,
+  142,143,144,145,150,151,152,153,154,155,157,158,161,162,163,166,202,223,
+  247,248,
+246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,0,3,4,6,
+  9,37,40,41,43,50,54,99,105,108,110,122,125,127,129,130,132,134,137,140,
+  142,143,144,145,150,151,152,153,154,155,157,158,161,162,163,166,202,223,
+  247,248,
+246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,0,3,4,6,
+  9,37,40,41,43,50,54,99,105,108,110,122,125,127,129,130,132,134,137,140,
+  142,143,144,145,150,151,152,153,154,155,157,158,161,162,163,166,202,223,
+  247,248,
+254,246,245,244,243,242,241,240,234,233,230,229,218,215,207,198,197,196,195,
+  171,169,168,75,55,0,194,
+254,246,245,244,243,242,241,240,234,233,230,229,218,215,198,197,196,195,171,
+  169,168,75,55,0,2,4,5,48,54,193,201,202,208,
+207,14,10,0,1,11,12,119,199,
+207,0,40,41,43,
+218,206,17,16,0,106,107,
+207,0,40,41,43,
+246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,14,10,0,
+  1,11,12,119,199,
+246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,0,3,4,6,
+  9,37,40,41,43,50,54,99,105,108,110,122,125,127,129,130,132,134,137,140,
+  142,143,144,145,150,151,152,153,154,155,157,158,161,162,163,166,202,223,
+  247,248,
+254,246,245,244,243,242,241,240,234,233,230,229,218,215,207,198,197,196,195,
+  171,169,168,75,55,0,2,4,5,28,29,30,31,34,38,40,41,43,48,54,201,202,208,
+204,0,32,
+214,0,49,
+205,203,0,35,37,
+
+};
+
+
+static unsigned const char far ag_astt[6843] = {
+  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,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,2,2,7,1,
+  1,2,2,7,1,1,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,5,8,8,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,10,10,10,10,10,5,5,5,1,1,7,1,1,1,1,2,3,1,7,1,1,7,1,10,10,
+  10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,4,5,1,1,7,1,1,1,1,
+  3,1,7,2,1,2,1,1,5,3,1,2,1,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,2,1,2,8,2,2,2,2,
+  2,2,2,2,2,7,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,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,2,2,2,7,1,2,2,1,2,1,1,1,1,1,1,2,2,1,1,1,1,1,1,
+  1,1,1,1,2,2,2,1,2,2,2,2,2,7,2,1,2,2,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+  1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2,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,1,9,5,3,3,1,1,2,2,2,2,2,2,2,2,2,2,2,2,1,2,1,2,1,1,1,1,1,1,2,2,2,2,
+  2,2,2,2,2,1,1,7,2,2,2,3,3,2,1,3,2,1,1,1,3,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,4,3,2,2,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,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,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,5,10,5,5,5,5,5,5,5,5,5,5,5,5,10,10,10,10,10,10,10,
+  10,5,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,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,2,2,
+  7,1,1,1,1,4,1,1,1,4,1,1,4,1,1,1,1,7,1,1,1,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,2,2,5,5,7,2,1,1,1,2,2,2,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,1,1,7,1,1,1,1,3,1,1,1,2,2,2,7,1,2,2,1,
+  2,1,1,1,1,1,1,2,2,1,1,1,1,1,1,2,2,2,1,2,2,2,2,2,7,2,1,2,2,1,2,1,2,1,1,1,2,
+  1,1,2,1,2,2,1,1,1,2,1,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,2,2,2,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,2,2,2,7,2,2,2,1,2,1,1,1,2,2,2,1,
+  1,1,1,1,1,1,1,1,1,2,2,2,1,2,2,2,2,2,7,2,1,2,2,1,2,1,2,1,1,1,2,1,1,2,1,1,1,
+  1,2,1,2,2,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,2,2,2,2,2,7,2,1,2,2,1,2,
+  1,2,1,1,1,2,1,1,2,1,1,1,1,2,1,2,2,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,
+  2,2,2,2,2,7,2,1,2,2,1,2,1,2,1,1,1,2,1,1,2,1,1,1,1,2,1,2,2,1,1,1,2,1,1,1,1,
+  1,1,1,1,1,1,1,1,2,2,2,1,2,2,2,2,2,7,2,1,2,2,1,2,1,2,1,1,1,2,1,1,2,1,1,1,1,
+  2,1,2,2,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,2,2,2,2,2,7,2,1,2,2,1,2,1,
+  2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2,1,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,5,5,5,5,5,5,5,5,5,5,5,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,5,1,5,5,5,5,5,5,5,5,5,5,
+  5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,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,2,2,2,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,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,7,1,1,1,1,1,1,1,1,1,2,2,2,1,2,
+  2,2,2,2,7,2,1,2,2,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+  1,2,2,1,1,1,2,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,7,2,1,
+  1,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,2,2,2,2,2,7,2,1,2,2,1,2,1,2,1,
+  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2,1,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,7,1,1,1,1,1,2,2,2,1,2,2,2,2,2,7,2,
+  1,2,2,1,2,1,2,1,1,1,1,1,1,1,1,2,2,1,1,1,2,1,1,1,1,1,1,1,2,2,2,7,1,2,2,1,2,
+  1,1,1,1,1,1,2,2,1,1,1,1,1,1,1,1,1,1,2,2,2,1,2,2,2,2,2,7,2,1,2,2,1,2,1,2,1,
+  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2,1,1,1,1,2,2,2,
+  2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,7,2,1,1,1,2,2,2,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,1,1,7,1,1,1,1,
+  3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,7,2,1,1,1,2,2,2,1,1,2,1,
+  2,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,7,2,1,1,1,2,2,
+  2,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,7,2,1,
+  1,1,2,2,2,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,1,2,2,2,2,
+  2,2,2,2,2,5,2,1,1,1,2,2,2,1,1,2,1,2,1,1,1,1,1,4,4,4,1,4,4,4,7,1,2,1,2,2,2,
+  2,2,2,2,2,2,2,2,1,1,1,1,1,2,1,2,2,2,2,2,2,2,2,2,2,1,1,5,2,1,1,3,3,1,1,1,1,
+  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,5,1,2,1,2,2,2,2,2,2,
+  2,2,2,2,2,1,1,1,1,1,2,1,2,2,2,2,2,2,2,2,2,2,1,1,5,2,1,1,3,3,1,1,1,1,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,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,7,1,1,7,1,1,1,1,2,2,2,7,1,2,2,1,2,
+  1,1,1,1,1,2,2,1,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,1,2,2,2,2,2,2,2,2,2,7,2,1,1,1,2,2,2,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,2,2,2,1,2,2,2,2,2,7,2,1,2,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,1,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,2,2,2,1,2,2,2,2,2,7,2,1,2,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,1,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,2,2,2,1,2,2,2,2,2,7,2,1,2,2,1,2,1,2,1,1,1,2,1,1,
+  2,1,1,1,1,2,1,2,2,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,2,2,2,2,2,7,2,1,
+  2,2,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,
+  1,2,2,2,1,2,2,2,2,2,7,2,1,2,2,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,
+  1,2,1,1,1,1,1,1,1,1,2,2,2,1,2,2,2,2,2,7,2,1,2,2,1,2,1,2,1,1,1,2,1,1,2,1,2,
+  2,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,2,2,2,2,2,7,2,1,2,2,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,1,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,2,2,2,1,2,2,2,2,2,7,2,1,2,2,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,1,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,2,2,2,7,1,2,2,1,2,1,1,1,1,1,1,2,2,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,2,2,2,7,1,2,2,1,2,1,1,
+  1,1,1,1,2,2,1,1,1,1,1,2,2,2,7,1,2,2,1,2,1,1,1,1,1,1,2,2,1,1,1,1,1,2,2,2,7,
+  1,2,2,1,2,1,1,1,1,1,1,2,2,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,2,2,2,7,1,2,2,1,2,1,1,1,1,1,1,2,2,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,2,2,2,7,1,2,2,1,2,1,1,1,1,1,1,2,2,1,1,1,1,
+  1,1,1,1,1,1,2,2,2,1,2,2,2,2,2,7,2,1,2,2,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,
+  1,1,1,2,2,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,2,2,2,2,2,7,2,1,2,2,1,2,
+  1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,2,
+  2,2,1,2,2,2,2,2,7,2,1,2,2,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,
+  1,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,2,2,2,2,2,7,2,1,2,2,1,2,1,2,1,1,1,1,1,
+  1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,2,2,2,2,
+  2,7,2,1,2,2,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2,1,1,1,
+  1,1,1,1,1,1,1,1,1,2,2,2,1,2,2,2,2,2,7,2,1,2,2,1,2,1,2,1,1,1,1,1,1,1,1,1,1,
+  1,1,1,1,1,1,1,1,2,2,1,1,1,2,1,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,2,2,2,1,2,2,2,2,2,7,2,1,2,2,1,2,1,2,1,1,1,1,1,
+  1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2,1,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,2,2,2,1,2,2,2,2,2,7,2,1,2,2,1,2,1,
+  2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2,1,1,1,1,1,1,1,1,1,1,
+  1,1,2,2,2,1,2,2,2,2,2,7,2,1,2,2,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+  1,1,1,1,2,2,1,1,1,2,1,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,2,2,2,1,2,2,2,2,2,7,2,1,2,2,1,2,1,2,1,1,1,1,1,1,1,1,1,
+  1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2,1,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,2,2,2,1,2,2,2,2,2,7,2,1,2,2,1,2,1,2,
+  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2,1,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,2,2,2,1,2,2,2,2,
+  2,7,2,1,2,2,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,
+  1,1,1,2,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,7,2,2,2,1,
+  1,2,1,1,1,1,1,1,1,1,2,2,2,2,4,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,2,2,7,3,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,
+  2,2,2,2,2,7,2,1,1,1,2,2,2,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,2,2,
+  2,1,2,2,2,2,2,7,2,1,2,2,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+  1,1,1,1,2,2,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,2,2,2,2,2,7,2,1,2,2,1,
+  2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2,1,1,1,
+  1,1,1,7,2,1,1,1,7,2,1,1,1,1,1,1,1,1,1,2,2,2,1,2,2,2,2,2,7,2,1,2,2,1,2,1,2,
+  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2,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,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,1,1,7,1,1,1,1,3,2,2,2,2,2,2,2,2,2,2,
+  2,2,2,2,1,2,2,2,2,2,2,2,2,2,7,2,1,1,1,2,2,2,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,
+  5,5,5,1,5,2,2,2,2,2,2,2,2,2,5,5,7,2,1,1,1,2,2,2,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,1,2,2,2,2,2,2,2,2,2,7,2,1,1,1,2,2,2,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,1,2,2,2,2,2,2,2,2,2,7,2,1,1,1,2,2,
+  2,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,1,2,2,2,2,2,2,2,2,2,
+  7,2,1,1,1,2,2,2,1,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,2,2,2,2,2,7,2,
+  1,2,2,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,
+  2,1,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,
+  2,2,2,1,2,2,2,2,2,7,2,1,2,2,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+  1,1,1,1,1,1,2,2,1,1,1,2,1,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,5,1,1,1,7,3,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,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,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,
+  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,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,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,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,2,2,2,1,2,2,2,2,2,7,2,
+  1,2,2,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,
+  2,1,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,2,2,2,
+  1,2,2,2,2,2,7,2,1,2,2,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,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,
+  7,2,2,2,3,1,2,1,3,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,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,2,2,2,1,2,2,2,2,2,7,2,1,2,2,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,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,2,2,2,2,2,
+  7,2,1,2,2,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,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,2,2,2,2,2,7,2,1,2,2,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,1,1,1,1,4,4,4,4,4,4,
+  4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,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,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,2,2,2,1,2,2,2,2,2,7,2,1,2,2,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+  1,1,1,1,1,1,1,2,2,1,1,1,2,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,
+  2,2,2,2,7,2,1,1,1,2,2,2,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,138,461,138,138,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,
+460,460,1,2,5,2,2,1,2,490,
+460,460,1,2,6,2,2,1,2,489,
+460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,
+  460,460,1,2,7,2,2,1,2,488,
+460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,
+  460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,
+  460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,1,2,8,2,2,1,
+  2,469,
+460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,
+  460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,
+  460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,1,2,
+  9,2,2,1,2,462,
+140,140,10,19,18,
+140,140,11,20,18,
+32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,12,23,21,22,
+25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,98,25,25,25,
+  25,25,25,25,25,25,4,9,13,24,24,25,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,
+460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,
+  460,460,460,460,460,460,460,460,460,460,460,460,141,142,142,142,141,460,
+  460,460,1,2,18,2,2,1,2,142,485,
+26,19,27,
+26,20,28,
+33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,136,
+460,1,29,22,29,29,1,29,487,
+8,23,133,30,37,
+4,9,99,97,9,
+32,36,32,32,32,32,32,32,32,32,32,32,32,5,6,7,42,35,32,39,51,56,32,32,32,32,
+  32,32,32,32,57,25,128,38,38,55,38,48,47,49,43,32,31,55,51,50,55,54,56,
+  55,54,52,44,55,55,55,53,53,40,46,12,11,10,45,41,34,33,37,
+460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,
+  460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,1,2,26,
+  2,2,1,2,479,
+26,57,8,140,140,57,27,60,193,203,30,37,58,31,59,61,60,60,201,202,33,18,
+69,70,71,72,26,57,8,66,140,217,217,62,215,140,211,211,57,28,185,82,186,193,
+  74,203,30,37,79,31,92,59,84,80,91,90,89,88,87,86,85,83,81,80,78,77,80,
+  76,75,82,82,80,73,201,202,65,64,63,211,33,18,68,67,
+32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,1,138,461,
+  138,138,1,93,
+32,32,32,32,32,32,32,32,32,32,32,32,95,32,26,51,96,94,97,8,99,66,32,32,32,
+  32,32,32,32,32,57,4,9,30,44,43,42,39,41,40,30,36,37,98,32,31,41,41,41,
+  41,41,9,34,33,37,
+59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,
+  59,59,59,59,59,59,59,101,100,71,70,69,68,67,66,65,64,63,62,61,56,59,31,
+  58,60,60,60,103,102,60,
+53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,54,50,53,53,53,53,53,53,53,53,
+  53,53,53,53,53,53,53,53,53,53,53,32,52,104,
+460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,
+  460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,
+  460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,
+  460,460,460,1,2,33,2,2,1,2,464,
+460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,
+  460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,
+  460,1,2,34,2,2,1,2,463,
+460,1,2,35,2,2,1,2,482,
+460,1,2,36,2,2,1,2,512,
+33,33,33,33,33,33,33,33,33,33,33,33,460,33,460,460,460,460,460,460,460,460,
+  460,460,460,460,33,33,33,33,33,33,33,33,460,460,460,1,2,37,2,2,1,2,470,
+105,28,106,
+460,1,2,39,2,2,1,2,478,
+57,40,107,
+8,41,223,
+460,460,1,2,42,2,2,1,2,486,
+66,93,108,
+57,44,109,
+110,113,124,116,118,120,122,127,99,4,9,45,224,222,128,126,123,121,119,117,
+  115,112,125,114,111,9,
+140,140,46,129,18,
+95,26,24,131,130,
+26,23,132,
+26,25,133,
+134,96,94,50,137,136,135,
+32,32,32,32,32,32,32,32,32,32,32,32,32,51,83,83,83,141,8,83,32,32,32,32,32,
+  32,32,32,57,83,83,51,128,138,138,138,23,24,25,139,139,35,30,37,32,31,
+  140,141,34,33,37,
+8,52,113,30,37,
+35,121,120,40,
+143,98,4,9,54,142,142,143,9,
+98,4,9,55,144,144,101,9,
+99,56,103,
+460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,
+  460,460,460,460,460,460,460,460,460,1,2,57,2,2,1,2,477,
+26,57,8,140,140,57,58,60,193,203,30,37,58,31,59,145,60,60,201,202,33,18,
+26,57,8,66,140,217,217,62,215,140,211,211,57,59,185,146,186,193,74,203,30,
+  37,79,31,59,204,146,146,204,73,201,202,65,64,63,211,33,18,68,67,
+95,105,194,147,148,
+123,123,123,150,123,123,66,123,123,123,61,149,135,135,
+151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,
+  151,151,151,151,151,151,151,151,151,151,151,151,101,100,71,70,69,68,67,
+  66,65,64,63,62,61,151,151,62,151,151,151,103,102,151,151,
+218,218,218,208,
+216,216,207,
+213,213,213,214,206,212,
+460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,
+  460,460,460,460,460,460,460,460,460,460,460,460,460,460,1,2,66,2,2,1,2,
+  467,
+460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,
+  460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,
+  460,460,460,460,460,460,460,1,2,67,2,2,1,2,510,
+460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,
+  460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,
+  460,460,460,460,460,460,460,1,2,68,2,2,1,2,509,
+460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,1,2,69,
+  2,2,1,2,508,
+460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,1,2,70,
+  2,2,1,2,507,
+460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,1,2,71,
+  2,2,1,2,503,
+460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,1,2,72,
+  2,2,1,2,502,
+57,73,152,191,
+26,57,8,140,140,57,74,188,193,203,30,37,58,31,59,188,201,202,33,18,
+69,70,71,72,26,57,8,66,140,217,217,62,215,140,211,211,57,75,185,146,186,193,
+  74,203,30,37,79,31,59,184,78,77,184,76,75,146,146,184,73,201,202,65,64,
+  63,211,33,18,68,67,
+69,70,71,72,26,57,8,66,140,217,217,62,215,140,211,211,57,76,185,146,186,193,
+  74,203,30,37,79,31,59,183,78,77,183,76,75,146,146,183,73,201,202,65,64,
+  63,211,33,18,68,67,
+69,70,71,72,26,57,8,66,140,217,217,62,215,140,211,211,57,77,185,146,186,193,
+  74,203,30,37,79,31,59,182,78,77,182,76,75,146,146,182,73,201,202,65,64,
+  63,211,33,18,68,67,
+69,70,71,72,26,57,8,66,140,217,217,62,215,140,211,211,57,78,185,146,186,193,
+  74,203,30,37,79,31,59,181,78,77,181,76,75,146,146,181,73,201,202,65,64,
+  63,211,33,18,68,67,
+69,70,71,72,26,57,8,66,140,217,217,62,215,140,211,211,57,79,185,82,186,193,
+  74,203,30,37,79,31,154,59,153,80,91,90,89,88,87,86,85,83,81,80,78,77,80,
+  76,75,82,82,80,73,201,202,65,64,63,211,33,18,68,67,
+155,157,159,172,160,158,156,
+71,72,169,162,161,
+95,105,194,147,163,
+165,134,160,164,166,
+167,169,173,175,96,97,66,84,149,172,171,176,174,170,168,
+167,169,96,97,155,180,179,178,177,
+173,175,153,182,181,
+183,151,184,
+185,149,186,
+94,147,187,
+188,145,189,
+190,192,143,193,191,
+123,123,123,150,123,123,123,123,123,92,134,134,
+33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,139,
+460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,
+  460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,1,2,94,
+  2,2,1,2,472,
+460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,
+  460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,1,2,95,
+  2,2,1,2,481,
+460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,
+  460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,1,2,96,
+  2,2,1,2,473,
+460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,
+  460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,1,2,97,
+  2,2,1,2,471,
+105,38,194,
+460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,
+  460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,
+  460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,
+  460,460,460,460,460,1,2,99,2,2,1,2,468,
+77,77,100,
+213,213,213,214,101,195,195,
+79,79,75,
+78,78,74,
+51,104,196,
+460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,
+  460,460,460,460,460,1,2,105,2,2,1,2,466,
+26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,106,
+  197,
+69,70,71,72,26,57,8,66,140,217,217,62,215,140,211,211,57,107,185,82,186,193,
+  74,203,30,37,79,31,198,59,84,80,91,90,89,88,87,86,85,83,81,80,78,77,80,
+  76,75,82,82,80,73,201,202,65,64,63,211,33,18,68,67,
+32,32,32,32,32,32,32,32,32,32,32,32,32,51,32,32,32,32,32,32,32,32,57,108,
+  128,199,199,199,23,24,25,32,31,34,33,37,
+69,70,71,72,26,57,8,66,140,217,217,62,215,140,211,211,57,109,185,82,186,193,
+  74,203,30,37,79,31,200,59,84,80,91,90,89,88,87,86,85,83,81,80,78,77,80,
+  76,75,82,82,80,73,201,202,65,64,63,211,33,18,68,67,
+460,1,2,110,2,2,1,2,525,
+8,111,240,
+202,204,8,99,4,9,112,241,201,30,206,37,205,203,9,
+460,1,2,113,2,2,1,2,520,
+8,114,234,
+202,204,209,211,99,4,9,115,235,213,212,210,208,207,9,
+460,1,2,116,2,2,1,2,518,
+26,117,214,
+460,1,2,118,2,2,1,2,517,
+26,119,215,
+460,1,2,120,2,2,1,2,515,
+124,121,216,125,
+460,1,2,122,2,2,1,2,514,
+124,123,217,125,
+460,1,2,124,2,2,1,2,519,
+26,125,218,
+4,9,126,226,9,
+460,1,2,127,2,2,1,2,513,
+26,128,219,
+220,129,221,
+26,57,8,66,140,217,217,62,215,140,211,211,57,130,185,146,186,193,74,203,30,
+  37,79,31,59,222,146,146,222,73,201,202,65,64,63,211,33,18,68,67,
+26,57,8,140,140,57,131,60,193,203,30,37,58,31,59,223,60,60,201,202,33,18,
+69,70,71,72,26,57,8,66,140,217,217,62,215,140,211,211,57,132,185,82,186,193,
+  74,203,30,37,79,31,224,59,84,80,91,90,89,88,87,86,85,83,81,80,78,77,80,
+  76,75,82,82,80,73,201,202,65,64,63,211,33,18,68,67,
+32,32,32,32,32,32,32,32,32,32,32,32,32,51,8,32,32,32,32,32,32,32,32,57,133,
+  128,138,138,138,23,24,25,225,225,35,30,37,32,31,34,33,37,
+460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,
+  460,460,460,460,460,460,460,460,460,1,2,134,2,2,1,2,474,
+32,32,32,32,32,32,32,32,32,32,32,32,32,51,8,32,32,32,32,32,32,32,32,57,135,
+  128,138,138,138,23,24,25,226,226,35,30,37,32,31,34,33,37,
+32,32,32,32,32,32,32,32,32,32,32,32,32,51,8,32,32,32,32,32,32,32,32,57,136,
+  128,138,138,138,23,24,25,227,227,35,30,37,32,31,34,33,37,
+32,32,32,32,32,32,32,32,32,32,32,32,32,51,32,32,32,32,32,32,32,32,57,137,
+  128,38,38,38,23,24,25,43,32,31,228,34,33,37,
+105,34,106,
+66,94,229,
+32,32,32,32,32,32,32,32,32,32,32,32,32,51,8,32,32,32,32,32,32,32,32,57,84,
+  128,138,138,138,23,24,25,230,230,35,30,37,32,31,34,33,37,
+90,90,90,97,85,85,85,141,231,
+32,36,32,32,32,32,32,32,32,32,32,32,32,5,6,7,42,35,32,39,51,32,32,32,32,32,
+  32,32,32,57,4,9,99,128,38,38,97,106,38,48,47,49,43,32,31,106,51,50,106,
+  109,52,44,106,106,106,53,53,40,46,12,11,10,45,41,9,34,33,37,
+232,102,233,
+32,36,32,32,32,32,32,32,32,32,32,32,32,5,6,7,42,35,32,39,51,32,32,32,32,32,
+  32,32,32,57,4,9,99,128,38,38,97,105,38,48,47,49,43,32,31,105,51,50,105,
+  110,52,44,105,105,105,53,53,40,46,12,11,10,45,41,9,34,33,37,
+234,66,145,149,205,
+95,105,146,147,163,
+198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,
+  198,198,198,198,198,147,235,
+57,148,236,
+26,57,8,140,140,57,149,237,193,203,30,37,58,31,59,237,237,201,202,33,18,
+460,460,460,460,460,460,460,460,1,2,150,2,2,1,2,480,
+219,151,
+32,32,32,32,32,32,32,32,32,32,32,32,32,51,8,32,32,32,32,32,32,32,32,57,152,
+  128,138,138,138,23,24,25,238,238,35,30,37,32,31,34,33,37,
+167,169,173,175,234,96,97,66,153,149,205,172,171,176,174,170,168,
+234,154,190,
+460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,1,2,155,
+  2,2,1,2,506,
+69,70,71,72,26,57,8,66,140,217,217,62,215,140,211,211,57,156,185,146,186,
+  193,74,203,30,37,79,31,59,179,78,77,179,178,76,75,146,146,179,73,201,
+  202,65,64,63,211,33,18,68,67,
+460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,1,2,157,
+  2,2,1,2,505,
+69,70,71,72,26,57,8,66,140,217,217,62,215,140,211,211,57,158,185,146,186,
+  193,74,203,30,37,79,31,59,179,78,77,179,177,76,75,146,146,179,73,201,
+  202,65,64,63,211,33,18,68,67,
+460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,1,2,159,
+  2,2,1,2,504,
+69,70,71,72,26,57,8,66,140,217,217,62,215,140,211,211,57,160,185,146,186,
+  193,74,203,30,37,79,31,59,176,78,77,176,76,75,146,146,176,73,201,202,65,
+  64,63,211,33,18,68,67,
+69,70,71,72,26,57,8,66,140,217,217,62,215,140,211,211,57,161,185,146,186,
+  193,74,203,30,37,79,31,59,239,239,78,77,239,76,75,146,146,239,73,201,
+  202,65,64,63,211,33,18,68,67,
+69,70,71,72,26,57,8,66,140,217,217,62,215,140,211,211,57,162,185,146,186,
+  193,74,203,30,37,79,31,59,240,240,78,77,240,76,75,146,146,240,73,201,
+  202,65,64,63,211,33,18,68,67,
+26,57,8,66,140,217,217,62,215,140,211,211,57,163,185,146,186,193,74,203,30,
+  37,241,31,59,187,146,146,187,73,201,202,65,64,63,211,33,18,68,67,
+69,70,71,72,26,57,8,66,140,217,217,62,215,140,211,211,57,164,185,146,186,
+  193,74,203,30,37,79,31,59,80,242,80,78,77,80,76,75,146,146,80,73,201,
+  202,65,64,63,211,33,18,68,67,
+460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,1,2,165,
+  2,2,1,2,501,
+69,70,71,72,26,57,8,66,140,217,217,62,215,140,211,211,57,166,185,146,186,
+  193,74,203,30,37,79,31,59,80,243,80,78,77,80,76,75,146,146,80,73,201,
+  202,65,64,63,211,33,18,68,67,
+460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,1,2,167,
+  2,2,1,2,500,
+26,57,8,140,140,57,168,60,193,203,30,37,58,31,59,244,60,60,201,202,33,18,
+460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,1,2,169,
+  2,2,1,2,499,
+26,57,8,140,140,57,170,60,193,203,30,37,58,31,59,245,60,60,201,202,33,18,
+26,57,8,140,140,57,171,60,193,203,30,37,58,31,59,246,60,60,201,202,33,18,
+26,57,8,140,140,57,172,60,193,203,30,37,58,31,59,247,60,60,201,202,33,18,
+460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,1,2,173,
+  2,2,1,2,498,
+26,57,8,140,140,57,174,60,193,203,30,37,58,31,59,248,60,60,201,202,33,18,
+460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,1,2,175,
+  2,2,1,2,497,
+26,57,8,140,140,57,176,60,193,203,30,37,58,31,59,249,60,60,201,202,33,18,
+69,70,71,72,26,57,8,66,140,217,217,62,215,140,211,211,57,177,185,146,186,
+  193,74,203,30,37,79,31,59,80,250,81,80,78,77,80,76,75,146,146,80,73,201,
+  202,65,64,63,211,33,18,68,67,
+69,70,71,72,26,57,8,66,140,217,217,62,215,140,211,211,57,178,185,146,186,
+  193,74,203,30,37,79,31,59,80,251,81,80,78,77,80,76,75,146,146,80,73,201,
+  202,65,64,63,211,33,18,68,67,
+69,70,71,72,26,57,8,66,140,217,217,62,215,140,211,211,57,179,185,146,186,
+  193,74,203,30,37,79,31,59,80,252,81,80,78,77,80,76,75,146,146,80,73,201,
+  202,65,64,63,211,33,18,68,67,
+69,70,71,72,26,57,8,66,140,217,217,62,215,140,211,211,57,180,185,146,186,
+  193,74,203,30,37,79,31,59,80,253,81,80,78,77,80,76,75,146,146,80,73,201,
+  202,65,64,63,211,33,18,68,67,
+69,70,71,72,26,57,8,66,140,217,217,62,215,140,211,211,57,181,185,82,186,193,
+  74,203,30,37,79,31,59,254,80,255,83,81,80,78,77,80,76,75,82,82,80,73,
+  201,202,65,64,63,211,33,18,68,67,
+69,70,71,72,26,57,8,66,140,217,217,62,215,140,211,211,57,182,185,82,186,193,
+  74,203,30,37,79,31,59,254,80,256,83,81,80,78,77,80,76,75,82,82,80,73,
+  201,202,65,64,63,211,33,18,68,67,
+460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,1,2,183,
+  2,2,1,2,496,
+69,70,71,72,26,57,8,66,140,217,217,62,215,140,211,211,57,184,185,82,186,193,
+  74,203,30,37,79,31,59,84,80,257,85,83,81,80,78,77,80,76,75,82,82,80,73,
+  201,202,65,64,63,211,33,18,68,67,
+460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,1,2,185,
+  2,2,1,2,495,
+69,70,71,72,26,57,8,66,140,217,217,62,215,140,211,211,57,186,185,82,186,193,
+  74,203,30,37,79,31,59,84,80,258,86,85,83,81,80,78,77,80,76,75,82,82,80,
+  73,201,202,65,64,63,211,33,18,68,67,
+69,70,71,72,26,57,8,66,140,217,217,62,215,140,211,211,57,187,185,82,186,193,
+  74,203,30,37,79,31,59,84,80,259,87,86,85,83,81,80,78,77,80,76,75,82,82,
+  80,73,201,202,65,64,63,211,33,18,68,67,
+460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,1,2,188,
+  2,2,1,2,494,
+69,70,71,72,26,57,8,66,140,217,217,62,215,140,211,211,57,189,185,82,186,193,
+  74,203,30,37,79,31,59,84,80,260,88,87,86,85,83,81,80,78,77,80,76,75,82,
+  82,80,73,201,202,65,64,63,211,33,18,68,67,
+460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,1,2,190,
+  2,2,1,2,493,
+69,70,71,72,26,57,8,66,140,217,217,62,215,140,211,211,57,191,185,82,186,193,
+  74,203,30,37,79,31,59,84,80,261,89,88,87,86,85,83,81,80,78,77,80,76,75,
+  82,82,80,73,201,202,65,64,63,211,33,18,68,67,
+460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,1,2,192,
+  2,2,1,2,492,
+69,70,71,72,26,57,8,66,140,217,217,62,215,140,211,211,57,193,185,82,186,193,
+  74,203,30,37,79,31,262,59,84,80,91,90,89,88,87,86,85,83,81,80,78,77,80,
+  76,75,82,82,80,73,201,202,65,64,63,211,33,18,68,67,
+32,32,32,32,32,32,32,32,32,32,32,32,32,51,8,32,32,32,32,32,32,32,32,57,194,
+  44,43,42,264,30,37,263,264,264,32,31,34,33,37,
+213,213,213,214,80,82,
+53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,54,55,53,53,53,53,53,53,53,53,
+  53,53,53,53,53,53,53,53,53,53,53,196,52,104,
+32,32,32,32,32,32,32,32,32,32,32,32,32,51,8,32,32,32,32,32,32,32,32,57,197,
+  128,138,138,138,23,24,25,265,265,35,30,37,32,31,34,33,37,
+234,198,266,
+105,29,106,
+234,200,112,
+4,9,201,244,9,
+460,1,2,202,2,2,1,2,524,
+26,203,267,
+460,1,2,204,2,2,1,2,523,
+26,205,268,
+4,9,206,232,9,
+26,207,269,
+26,208,270,
+460,1,2,209,2,2,1,2,522,
+26,210,271,
+460,1,2,211,2,2,1,2,521,
+26,212,272,
+4,9,213,231,9,
+69,70,71,72,26,57,8,66,140,217,217,62,215,140,211,211,57,214,185,82,186,193,
+  74,203,30,37,79,31,273,59,84,80,91,90,89,88,87,86,85,83,81,80,78,77,80,
+  76,75,82,82,80,73,201,202,65,64,63,211,33,18,68,67,
+69,70,71,72,26,57,8,66,140,217,217,62,215,140,211,211,57,215,185,82,186,193,
+  74,203,30,37,79,31,274,59,84,80,91,90,89,88,87,86,85,83,81,80,78,77,80,
+  76,75,82,82,80,73,201,202,65,64,63,211,33,18,68,67,
+4,9,216,228,9,
+4,9,217,227,9,
+69,70,71,72,26,57,8,66,140,217,217,62,215,140,211,211,57,218,185,82,186,193,
+  74,203,30,37,79,31,275,59,84,80,91,90,89,88,87,86,85,83,81,80,78,77,80,
+  76,75,82,82,80,73,201,202,65,64,63,211,33,18,68,67,
+32,32,32,32,32,32,32,32,32,32,32,32,32,51,32,32,32,32,32,32,32,32,57,219,
+  276,276,276,32,31,277,276,34,33,37,
+460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,
+  460,460,460,460,460,1,2,220,2,2,1,2,484,
+32,32,32,32,32,32,32,32,32,32,32,32,32,51,8,32,32,32,32,32,32,32,32,57,221,
+  128,138,138,138,23,24,25,278,278,35,30,37,32,31,34,33,37,
+26,222,279,
+150,123,66,123,123,223,149,126,126,
+150,123,123,123,224,125,125,
+66,122,229,
+66,89,229,
+66,88,229,
+32,32,32,32,32,32,32,32,32,32,32,32,32,51,83,83,83,8,83,32,32,32,32,32,32,
+  32,32,57,83,83,228,128,138,138,138,23,24,25,139,139,35,30,37,32,31,140,
+  280,34,33,37,
+32,32,32,32,32,32,32,32,32,32,32,32,32,51,8,32,32,32,32,32,32,32,32,57,229,
+  128,138,138,138,23,24,25,31,35,30,37,32,31,34,33,37,
+66,95,229,
+32,32,32,32,32,32,32,32,32,32,32,32,32,51,8,32,32,32,32,32,32,32,32,57,231,
+  128,138,138,138,23,24,25,281,281,35,30,37,32,31,34,33,37,
+460,460,460,460,1,2,232,2,2,1,2,475,
+282,8,4,9,233,24,107,30,37,24,282,9,
+460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,
+  460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,
+  460,460,460,460,460,460,460,1,2,234,2,2,1,2,476,
+32,32,32,32,32,32,32,32,32,32,32,32,32,51,8,32,32,32,32,32,32,32,32,57,235,
+  128,138,138,138,23,24,25,283,283,35,30,37,32,31,34,33,37,
+69,70,71,72,26,57,8,66,140,217,217,62,215,140,211,211,57,236,185,82,186,193,
+  74,203,30,37,79,31,284,59,84,80,91,90,89,88,87,86,85,83,81,80,78,77,80,
+  76,75,82,82,80,73,201,202,65,64,63,211,33,18,68,67,
+95,105,195,147,148,
+234,66,238,229,192,
+155,157,159,174,160,158,156,
+155,157,159,173,160,158,156,
+69,70,71,72,26,57,8,66,140,217,217,62,215,140,211,211,57,241,185,82,186,193,
+  74,203,30,37,79,31,285,59,153,80,91,90,89,88,87,86,85,83,81,80,78,77,80,
+  76,75,82,82,80,73,201,202,65,64,63,211,33,18,68,67,
+71,72,171,162,161,
+71,72,170,162,161,
+66,168,149,
+66,167,149,
+66,166,149,
+66,165,149,
+66,159,149,
+66,158,149,
+165,134,164,164,166,
+165,134,163,164,166,
+165,134,162,164,166,
+165,134,161,164,166,
+167,169,96,97,66,254,149,172,171,170,168,
+167,169,96,97,157,180,179,178,177,
+167,169,96,97,156,180,179,178,177,
+173,175,154,182,181,
+183,152,184,
+185,150,186,
+94,148,187,
+188,146,189,
+286,262,287,
+105,48,194,
+66,289,264,45,288,
+66,289,265,27,229,
+8,266,129,30,37,
+32,32,32,32,32,32,32,32,32,32,32,32,32,51,32,32,32,32,32,32,32,32,57,267,
+  276,276,276,32,31,290,276,34,33,37,
+32,32,32,32,32,32,32,32,32,32,32,32,32,51,32,32,32,32,32,32,32,32,57,268,
+  276,276,276,32,31,291,276,34,33,37,
+32,32,32,32,32,32,32,32,32,32,32,32,32,51,32,32,32,32,32,32,32,32,57,269,
+  276,276,276,32,31,292,276,34,33,37,
+32,32,32,32,32,32,32,32,32,32,32,32,32,51,32,32,32,32,32,32,32,32,57,270,
+  276,276,276,32,31,293,276,34,33,37,
+32,32,32,32,32,32,32,32,32,32,32,32,32,51,32,32,32,32,32,32,32,32,57,271,
+  276,276,276,32,31,294,276,34,33,37,
+32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,272,295,37,
+296,273,297,
+296,274,298,
+296,275,299,
+105,245,300,
+66,4,9,277,225,301,9,
+302,303,66,278,229,303,303,
+69,70,71,72,26,57,8,66,140,217,217,62,215,140,211,211,57,279,185,82,186,193,
+  74,203,30,37,79,31,304,59,84,80,91,90,89,88,87,86,85,83,81,80,78,77,80,
+  76,75,82,82,80,73,201,202,65,64,63,211,33,18,68,67,
+92,92,92,87,87,87,280,
+91,91,91,86,66,86,86,281,229,
+39,282,305,44,
+66,289,283,199,229,
+306,284,307,
+306,234,285,190,307,
+460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,1,2,286,
+  2,2,1,2,491,
+69,70,71,72,26,57,8,66,140,217,217,62,215,140,211,211,57,287,185,82,186,193,
+  74,203,30,37,79,31,144,59,84,80,91,90,89,88,87,86,85,83,81,80,78,77,80,
+  76,75,82,82,80,73,201,202,65,64,63,211,33,18,68,67,
+32,32,32,32,32,32,32,32,32,32,32,32,32,51,8,32,32,32,32,32,32,32,32,57,288,
+  44,43,42,47,30,37,263,47,32,31,34,33,37,
+460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,
+  460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,
+  460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,
+  460,460,1,2,289,2,2,1,2,465,
+66,4,9,290,243,301,9,
+66,4,9,291,242,301,9,
+66,4,9,292,239,301,9,
+66,4,9,293,238,301,9,
+66,4,9,294,237,301,9,
+4,9,295,236,9,
+460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,1,2,296,
+  2,2,1,2,516,
+69,70,71,72,26,57,8,66,140,217,217,62,215,140,211,211,57,297,185,82,186,193,
+  74,203,30,37,79,31,230,59,84,80,91,90,89,88,87,86,85,83,81,80,78,77,80,
+  76,75,82,82,80,73,201,202,65,64,63,211,33,18,68,67,
+69,70,71,72,26,57,8,66,140,217,217,62,215,140,211,211,57,298,185,82,186,193,
+  74,203,30,37,79,31,229,59,84,80,91,90,89,88,87,86,85,83,81,80,78,77,80,
+  76,75,82,82,80,73,201,202,65,64,63,211,33,18,68,67,
+69,70,71,72,26,57,8,66,140,217,217,62,215,140,211,211,57,299,185,82,186,193,
+  74,203,30,37,79,31,233,59,84,80,91,90,89,88,87,86,85,83,81,80,78,77,80,
+  76,75,82,82,80,73,201,202,65,64,63,211,33,18,68,67,
+250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,
+  250,250,250,250,250,300,308,
+32,32,32,32,32,32,32,32,32,32,32,32,32,51,32,32,32,32,32,32,32,32,57,301,
+  309,309,309,32,31,309,34,33,37,
+460,1,2,302,2,2,1,2,483,
+8,303,132,30,37,
+150,123,123,123,304,127,127,
+8,305,111,30,37,
+460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,1,2,306,
+  2,2,1,2,511,
+69,70,71,72,26,57,8,66,140,217,217,62,215,140,211,211,57,307,185,82,186,193,
+  74,203,30,37,79,31,310,59,84,80,91,90,89,88,87,86,85,83,81,80,78,77,80,
+  76,75,82,82,80,73,201,202,65,64,63,211,33,18,68,67,
+32,32,32,32,32,32,32,32,32,32,32,32,32,51,8,32,32,32,32,32,32,32,32,57,308,
+  128,138,138,138,23,24,25,311,311,35,30,37,32,31,34,33,37,
+105,246,300,
+234,310,197,
+66,289,311,251,229,
+
+};
+
+
+static const unsigned short far ag_sbt[] = {
+     0,  15,  56,  62,  82, 121, 131, 141, 170, 230, 292, 297, 302, 327,
+   365, 381, 383, 419, 421, 469, 472, 475, 497, 506, 511, 516, 584, 627,
+   649, 710, 738, 793, 848, 887, 953, 999,1008,1017,1062,1065,1074,1077,
+  1080,1090,1093,1096,1122,1127,1132,1135,1138,1145,1196,1201,1205,1214,
+  1222,1225,1261,1283,1323,1328,1342,1396,1400,1403,1409,1450,1502,1554,
+  1579,1604,1629,1654,1658,1678,1727,1776,1825,1874,1935,1942,1947,1952,
+  1957,1972,1981,1986,1989,1992,1995,1998,2003,2015,2037,2080,2123,2166,
+  2209,2212,2280,2283,2290,2293,2296,2299,2331,2357,2418,2454,2515,2524,
+  2527,2542,2551,2554,2569,2578,2581,2590,2593,2602,2606,2615,2619,2628,
+  2631,2636,2645,2648,2651,2691,2713,2774,2816,2852,2894,2936,2974,2977,
+  2980,3022,3031,3099,3102,3170,3175,3180,3206,3209,3230,3246,3248,3290,
+  3307,3310,3335,3385,3410,3460,3485,3534,3584,3634,3674,3725,3750,3801,
+  3826,3848,3873,3895,3917,3939,3964,3986,4011,4033,4085,4137,4189,4241,
+  4295,4349,4374,4429,4454,4510,4567,4592,4650,4675,4734,4759,4820,4859,
+  4865,4904,4946,4949,4952,4955,4960,4969,4972,4981,4984,4989,4992,4995,
+  5004,5007,5016,5019,5024,5085,5146,5151,5156,5217,5251,5283,5325,5328,
+  5337,5344,5347,5350,5353,5403,5444,5447,5489,5501,5513,5565,5607,5668,
+  5673,5678,5685,5692,5753,5758,5763,5766,5769,5772,5775,5778,5781,5786,
+  5791,5796,5801,5812,5821,5830,5835,5838,5841,5844,5847,5850,5853,5858,
+  5863,5868,5902,5936,5970,6004,6038,6062,6065,6068,6071,6074,6081,6088,
+  6149,6156,6165,6169,6174,6177,6182,6207,6268,6306,6371,6378,6385,6392,
+  6399,6406,6411,6436,6497,6558,6619,6645,6678,6687,6692,6699,6704,6729,
+  6790,6832,6835,6838,6843
+};
+
+
+static const unsigned short far ag_sbe[] = {
+     9,  53,  58,  69, 118, 125, 135, 164, 224, 286, 294, 299, 323, 360,
+   371, 382, 418, 420, 462, 470, 473, 496, 500, 507, 513, 547, 621, 633,
+   666, 733, 771, 840, 884, 947, 993,1002,1011,1056,1063,1068,1075,1078,
+  1084,1091,1094,1107,1124,1129,1133,1136,1141,1176,1197,1202,1209,1217,
+  1223,1255,1267,1296,1325,1338,1388,1399,1402,1407,1444,1496,1548,1573,
+  1598,1623,1648,1655,1664,1695,1744,1793,1842,1891,1938,1944,1949,1954,
+  1964,1976,1983,1987,1990,1993,1996,2000,2012,2036,2074,2117,2160,2203,
+  2210,2274,2282,2287,2292,2295,2297,2325,2355,2374,2441,2471,2518,2525,
+  2533,2545,2552,2561,2572,2579,2584,2591,2596,2603,2609,2616,2622,2629,
+  2633,2639,2646,2649,2664,2697,2730,2798,2846,2876,2918,2959,2975,2978,
+  3004,3029,3063,3100,3134,3172,3177,3204,3207,3215,3240,3247,3272,3298,
+  3308,3329,3352,3404,3427,3479,3502,3551,3601,3647,3691,3744,3767,3820,
+  3832,3867,3879,3901,3923,3958,3970,4005,4017,4050,4102,4154,4206,4258,
+  4312,4368,4391,4448,4471,4527,4586,4609,4669,4692,4753,4776,4844,4863,
+  4901,4928,4947,4950,4953,4957,4963,4970,4975,4982,4986,4990,4993,4998,
+  5005,5010,5017,5021,5041,5102,5148,5153,5173,5240,5277,5307,5326,5333,
+  5341,5345,5348,5351,5383,5427,5445,5471,5495,5505,5559,5589,5624,5670,
+  5675,5681,5688,5709,5755,5760,5764,5767,5770,5773,5776,5779,5783,5788,
+  5793,5798,5806,5816,5825,5832,5836,5839,5842,5845,5848,5851,5855,5860,
+  5864,5891,5925,5959,5993,6027,6059,6063,6066,6069,6072,6077,6084,6105,
+  6155,6163,6166,6171,6175,6179,6201,6224,6292,6365,6374,6381,6388,6395,
+  6402,6408,6430,6453,6514,6575,6643,6668,6681,6688,6696,6700,6723,6746,
+  6814,6833,6836,6840,6843
+};
+
+
+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,1,1,0,5,1,3,1,3,1,2,1,
+  1,2,1,2,2,2,2,1,1,1,4,1,3,1,1,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,0,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+  2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+  2
+};
+
+static const unsigned short far ag_ptt[] = {
+    0,  1,  1, 11, 12, 12, 12,200, 19, 19, 20, 20,200, 24, 24, 24, 25, 25,
+   26, 26, 21, 28, 28, 28, 28, 28, 33, 28, 36, 36, 34, 34,208,208, 38, 38,
+   40, 41, 41, 41, 41, 41, 44, 44, 44, 44, 46, 46, 47, 47,201, 48, 48, 51,
+   53, 51,202, 54, 54, 56, 56, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+   58, 58, 70, 70, 70, 72, 73, 74, 71, 78, 78, 83, 83, 80, 80, 80, 80, 80,
+   85, 85, 85, 81, 82, 82, 89, 89, 90, 90, 93, 93, 93, 22, 91, 91, 91, 91,
+   92, 92, 92, 92, 97, 96, 94, 94, 94, 94, 94,104,104, 94,100,107,107,100,
+  100,100, 29,103,115,115,101, 23, 23, 23,225,119,119,225,223,223,223, 99,
+   99,122,122,125,125,127,127,129,129,130,130,132,132,132,132,132,134,134,
+  134,134,134,134,134,134,134,137,137,137,140,140,140,142,142,142,142,148,
+  145,145,145,145,145,110,110,110,110,110,110,110,156,154,108,108,152,152,
+  160,152,153,153,153,153,153,153,247,247,247,166,166,161,161, 79, 79,162,
+  162,163,163,248,172,172,102,174,174,174,174,174,174,174,174,174,174,178,
+  184,184,184,184,184,184,185,185,185,185,185,177,177,193,193,193,194,193,
+  121, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+   15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+   15, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+   18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+   39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
+   39, 39, 39, 45, 45, 45, 45, 45, 45, 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, 52, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57,
+   57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57,
+   57, 57, 57, 57, 76, 76,120,120,167,167,167,170,170,173,173,173,173,173,
+  173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
+  173,173,173,173,173,173,173,173,173,173,199,199,  7,  5,  4, 35, 32, 37,
+   42, 43,  2, 84, 86, 87, 88, 95, 49, 50, 98,105,106,109,111,114,113,  9,
+  112,  8,116,117,118,124,123,126,128,131,133,135,136,138,139,141,143,144,
+  146,147,149,150,151,  3,  6,159,175,176,179,180,182,181,183,186,187,188,
+  189,190,191,192
+};
+
+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(V(0,(unsigned *))); break;
+    case 2: ag_rp_2(V(0,(unsigned *))); break;
+    case 3: ag_rp_3(V(0,(unsigned *))); break;
+    case 4: ag_rp_4(); break;
+    case 5: ag_rp_5(); break;
+    case 6: ag_rp_6(); break;
+    case 7: ag_rp_7(); break;
+    case 8: ag_rp_8(V(0,(int *))); break;
+    case 9: ag_rp_9(V(1,(int *))); break;
+    case 10: ag_rp_10(); break;
+    case 11: ag_rp_11(); break;
+    case 12: ag_rp_12(); break;
+    case 13: ag_rp_13(); 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(); break;
+    case 19: ag_rp_19(); break;
+    case 20: ag_rp_20(); break;
+    case 21: ag_rp_21(V(0,(int *))); break;
+    case 22: ag_rp_22(V(0,(int *))); 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(); break;
+    case 31: V(0,(int *)) = ag_rp_31(); break;
+    case 32: V(0,(int *)) = ag_rp_32(); break;
+    case 33: V(0,(int *)) = ag_rp_33(); break;
+    case 34: V(0,(int *)) = ag_rp_34(V(1,(int *))); break;
+    case 35: V(0,(int *)) = ag_rp_35(V(0,(int *)), V(1,(int *))); break;
+    case 36: V(0,(int *)) = ag_rp_36(V(0,(int *)), V(1,(int *))); break;
+    case 37: V(0,(int *)) = ag_rp_37(V(1,(long *))); break;
+    case 38: V(0,(long *)) = ag_rp_38(V(0,(long *)), V(1,(long *))); break;
+    case 39: ag_rp_39(); break;
+    case 40: ag_rp_40(); break;
+    case 41: ag_rp_41(V(0,(char * *))); break;
+    case 42: ag_rp_42(V(0,(char * *))); break;
+    case 43: ag_rp_43(V(0,(char * *))); break;
+    case 44: V(0,(char * *)) = ag_rp_44(); break;
+    case 45: V(0,(char * *)) = ag_rp_45(); break;
+    case 46: V(0,(char * *)) = ag_rp_46(V(0,(char * *))); break;
+    case 47: ag_rp_47(); break;
+    case 48: ag_rp_48(); break;
+    case 49: ag_rp_49(); break;
+    case 50: ag_rp_50(V(0,(int *))); break;
+    case 51: V(0,(int *)) = ag_rp_51(V(2,(int *))); break;
+    case 52: V(0,(int *)) = ag_rp_52(V(2,(int *))); break;
+    case 53: V(0,(int *)) = ag_rp_53(V(0,(int *)), V(4,(int *))); break;
+    case 54: V(0,(int *)) = ag_rp_54(V(2,(long *))); break;
+    case 55: V(0,(int *)) = ag_rp_55(V(0,(int *))); break;
+    case 56: ag_rp_56(V(0,(unsigned *))); break;
+    case 57: ag_rp_57(V(0,(unsigned *)), V(2,(long *))); break;
+    case 58: ag_rp_58(V(0,(unsigned *))); break;
+    case 59: ag_rp_59(V(0,(unsigned *)), V(2,(long *)), V(4,(long *))); break;
+    case 60: ag_default(&ag_rtt[0]); V(0,(unsigned *)) = ag_rp_60(); break;
+    case 61: ag_rp_61(V(2,(long *))); break;
+    case 62: ag_rp_62(); break;
+    case 63: ag_rp_63(V(1,(int *))); break;
+    case 64: ag_rp_64(V(3,(long *))); break;
+    case 65: ag_rp_65(); break;
+    case 66: V(0,(int *)) = ag_rp_66(); break;
+    case 67: V(0,(int *)) = ag_rp_67(V(0,(int *))); break;
+    case 68: ag_rp_68(V(0,(int *))); break;
+    case 69: ag_rp_69(V(1,(int *))); break;
+    case 70: ag_rp_70(V(1,(int *))); break;
+    case 71: V(0,(long *)) = ag_rp_71(V(0,(long *)), V(2,(long *)), V(4,(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(V(0,(long *)), V(2,(long *))); break;
+    case 76: V(0,(long *)) = ag_rp_76(V(0,(long *)), V(2,(long *))); 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(); break;
+    case 80: V(0,(long *)) = ag_rp_80(); break;
+    case 81: V(0,(long *)) = ag_rp_81(V(0,(long *)), V(2,(long *))); break;
+    case 82: V(0,(long *)) = ag_rp_82(V(0,(long *)), V(2,(long *))); break;
+    case 83: V(0,(long *)) = ag_rp_83(V(0,(long *)), V(2,(long *))); break;
+    case 84: V(0,(long *)) = ag_rp_84(V(0,(long *)), V(2,(long *))); break;
+    case 85: V(0,(long *)) = ag_rp_85(); break;
+    case 86: V(0,(long *)) = ag_rp_86(); break;
+    case 87: V(0,(long *)) = ag_rp_87(); break;
+    case 88: V(0,(long *)) = ag_rp_88(); 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 *)), V(2,(long *))); break;
+    case 93: V(0,(long *)) = ag_rp_93(V(0,(long *)), V(2,(long *))); break;
+    case 94: V(0,(long *)) = ag_rp_94(V(0,(long *)), V(2,(long *))); break;
+    case 95: V(0,(long *)) = ag_rp_95(V(0,(long *)), V(2,(long *))); break;
+    case 96: V(0,(long *)) = ag_rp_96(V(0,(long *))); break;
+    case 97: V(0,(long *)) = ag_rp_97(V(1,(long *))); break;
+    case 98: V(0,(long *)) = ag_rp_98(V(1,(long *))); break;
+    case 99: V(0,(long *)) = ag_rp_99(V(1,(long *))); break;
+    case 100: V(0,(long *)) = ag_rp_100(V(1,(long *))); break;
+    case 101: V(0,(long *)) = ag_rp_101(V(0,(long *))); break;
+    case 102: V(0,(long *)) = ag_rp_102(V(0,(int *))); break;
+    case 103: V(0,(long *)) = ag_rp_103(V(2,(long *))); break;
+    case 104: V(0,(long *)) = ag_rp_104(); break;
+    case 105: V(0,(long *)) = ag_rp_105(V(1,(long *))); break;
+    case 106: V(0,(long *)) = ag_rp_106(V(0,(long *))); break;
+    case 107: ag_default(&ag_rtt[4]); V(0,(long *)) = ag_rp_107(); break;
+    case 108: ag_rp_108(); break;
+    case 109: ag_rp_109(V(3,(long *)), V(5,(long *))); break;
+    case 110: ag_rp_110(); break;
+    case 111: ag_rp_111(); break;
+    case 112: ag_rp_112(V(0,(long *))); break;
+    case 113: ag_rp_113(V(0,(long *))); break;
+    case 114: ag_rp_114(); break;
+    case 115: ag_rp_115(V(1,(long *))); break;
+    case 116: V(0,(long *)) = ag_rp_116(); break;
+    case 117: V(0,(long *)) = ag_rp_117(V(0,(long *)), V(1,(long *))); break;
+    case 118: V(0,(long *)) = ag_rp_118(V(0,(int *))); break;
+    case 119: V(0,(long *)) = ag_rp_119(V(0,(int *))); break;
+    case 120: V(0,(long *)) = ag_rp_120(); break;
+    case 121: V(0,(long *)) = ag_rp_121(V(0,(long *)), V(1,(int *))); break;
+    case 122: V(0,(long *)) = ag_rp_122(V(0,(int *))); break;
+    case 123: V(0,(long *)) = ag_rp_123(V(0,(long *)), V(1,(int *))); break;
+    case 124: V(0,(int *)) = ag_rp_124(V(1,(int *))); break;
+    case 125: ag_rp_125(V(0,(screen_descriptor * *))); break;
+    case 126: V(0,(screen_descriptor * *)) = ag_rp_126(); break;
+    case 127: V(0,(screen_descriptor * *)) = ag_rp_127(V(0,(screen_descriptor * *))); break;
+    case 128: V(0,(screen_descriptor * *)) = ag_rp_128(V(0,(screen_descriptor * *)), V(1,(int *))); break;
+    case 129: V(0,(screen_descriptor * *)) = ag_rp_129(V(0,(screen_descriptor * *)), V(2,(int *))); break;
+    case 130: V(0,(screen_descriptor * *)) = ag_rp_130(V(0,(screen_descriptor * *)), V(2,(int *))); break;
+    case 131: V(0,(screen_descriptor * *)) = ag_rp_131(V(0,(screen_descriptor * *)), V(3,(long *)), V(5,(long *))); break;
+    case 132: V(0,(screen_descriptor * *)) = ag_rp_132(V(0,(screen_descriptor * *)), V(3,(long *)), V(5,(long *))); break;
+    case 133: V(0,(screen_descriptor * *)) = ag_rp_133(V(0,(screen_descriptor * *)), V(1,(query_item * *))); break;
+    case 134: V(0,(screen_descriptor * *)) = ag_rp_134(V(0,(screen_descriptor * *)), V(1,(query_item * *))); break;
+    case 135: V(0,(int *)) = ag_rp_135(V(2,(long *)), V(4,(long *))); break;
+    case 136: V(0,(query_item * *)) = ag_rp_136(); break;
+    case 137: V(0,(query_item * *)) = ag_rp_137(V(0,(query_item * *))); break;
+    case 138: V(0,(query_item * *)) = ag_rp_138(V(0,(query_item * *))); break;
+    case 139: V(0,(query_item * *)) = ag_rp_139(V(0,(query_item * *))); break;
+    case 140: V(0,(query_item * *)) = ag_rp_140(V(0,(query_item * *))); break;
+    case 141: V(0,(query_item * *)) = ag_rp_141(); break;
+    case 142: V(0,(query_item * *)) = ag_rp_142(V(0,(query_item * *))); break;
+    case 143: V(0,(query_item * *)) = ag_rp_143(V(0,(query_item * *))); break;
+    case 144: V(0,(query_item * *)) = ag_rp_144(V(0,(query_item * *))); break;
+    case 145: ag_rp_145(); break;
+    case 146: ag_rp_146(); break;
+    case 147: ag_rp_147(); break;
+    case 148: ag_rp_148(); break;
+  }
+  (PCB).la_ptr = (PCB).pointer;
+}
+
+#define TOKEN_NAMES dsl_token_names
+const char *const dsl_token_names[264] = {
+  "script file",
+  "ws",
+  "literal",
+  "integer constant",
+  "string literal",
+  "paren string",
+  "character constant",
+  "eol",
+  "literals",
+  "name",
+  "white",
+  "comment",
+  "comment head",
+  "\"*/\"",
+  "\"/*\"",
+  "",
+  "'\\n'",
+  "\"//\"",
+  "not eol",
+  "",
+  "",
+  "script file",
+  "execution block",
+  "declaration",
+  "",
+  "",
+  "",
+  "eof",
+  "word",
+  "integer variable",
+  "string variable",
+  "undeclared variable",
+  "'['",
+  "",
+  "parameter string",
+  "']'",
+  "string",
+  "'#'",
+  "param word",
+  "text char",
+  "action text",
+  "action text head",
+  "'}'",
+  "'{'",
+  "action word",
+  "",
+  "action parameter string",
+  "action param word",
+  "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",
+  "",
+  "'='",
+  "';'",
+  "",
+  "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\"",
+  "name",
+  "\"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]])();
+  }
+}
+
+