view tests/agcl/parsifal/good/ss-fp.cpp @ 24:a4899cdfc2d6 default tip

Obfuscate the regexps to strip off the IBM compiler's copyright banners. I don't want bots scanning github to think they're real copyright notices because that could cause real problems.
author David A. Holland
date Mon, 13 Jun 2022 00:40:23 -0400
parents 13d2b8934445
children
line wrap: on
line source

/*
Copyright 1992, Jerome T. Holland
See the file COPYING for license and usage terms.
*/

#include "ssd.h"
#include "kb.h"
#include "num.h"


/*
 * 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 SS-FP_H
#include "ss-fp.h"
#endif

#ifndef SS-FP_H
#error Mismatched header file
#endif

#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])



/*  Line -, ss-fp.syn */
fp_pcb_type *fp_pcb;
#define PCB (*fp_pcb)


#define CELL_NAME_REQUEST 255
#define INPUT_LINE_REQUEST 254
#define BLOCK_REQUEST 253

#define SYNTAX_ERROR
#define PARSER_STACK_OVERFLOW

static int cell_refs;
static int error_flag;

static number bound_variable[26];
static number xvalue;

number num(double x) {
  number n;
  n.error = 0;
  n.truth = 1;
  n.v = x;
  return n;
}

void init_bv(void) {
  int i;
  for (i = 0; i < 26; i++) bound_variable[i].error = 1;
}

double round(double x) {
  long n = x+.5;
  return n;
}

double trunc(double x) {
  long n = x;
  return n;
}

double sqr(double x) {
  return x*x;
}

double pow10d(double x) {
  long n = x;
  return pow10d(n);
}

number cell_value(pair<int> loc) {
  number x;
  cell_pointer cp;
  int save_ef = error_flag;

  cell_refs++;
  cp = ss[loc.row][loc.col];
  if (cp == NULL) {
    x.truth = 1;
    x.v = 0;
    return x;
  }
  if (cp->type == text) {
    x.error = 1;
    x.truth = 0;
    return x;
  }
  if (cp->type == formula) {
    if ((inserted_columns || inserted_rows));
    else if (recalc_flag) {
      if (cp->recalc == recalc_count) eval(cp);
      if (cp->recalc & 1) circular_flag = 1;
    }
  }
  x.error = cp->error;
  x.truth = 1;
  x.v = cp->value;
  return x;
}

void eval(cell_pointer cp) {
  fp_pcb_type pcb, *save_pcb = fp_pcb;

  fp_pcb = &pcb;
  cell_refs = 0;
  PCB.pointer = (unsigned char *) &cp->text;
  cp->recalc += recalc_flag;
  error_flag = 0;
  fp();
  cp->recalc += recalc_flag;
  if (PCB.exit_flag != 1) {cp->type = text; cp->error = 1; return;}
  else if (cell_refs == 0) cp->type = value;
  else cp->type = formula;
  {
    cp->error = xvalue.error;
    cp->value = xvalue.v;
  }
  fp_pcb = save_pcb;
}

number evalx(char *xs) {
  fp_pcb_type pcb, *save_pcb = fp_pcb;
  number x;

  fp_pcb = &pcb;
  PCB.pointer = (unsigned char *) xs;
  error_flag = 0;
  fp();
  fp_pcb = save_pcb;
  return xvalue;
}

pair<int> id_cell(int row, int col) {
  pair<int> goto_cell = {0,0};
  if (row >= MAXROWS || col >= MAXCOLS) {
    PCB.exit_flag = 5;
    return goto_cell;
  }
  if (inserted_rows && row >= new_row) row += inserted_rows;
  goto_cell.row = row;
  goto_cell.col = col;
  if (inserted_columns == 0 && inserted_rows == 0) return goto_cell;
  sprintf((char *)icnptr,"%d",row+1);
  icnptr += strlen((char *)icnptr);
  icoptr = PCB.pointer;
  return goto_cell;
}

int matherr(struct exception *e) {
  error_flag++;
  e->retval = 0;
  return 1;
}

number apply(double(*f)(double), number n) {
  number r;
  if (n.error) return n;
  error_flag = 0;
  r.v = f(n.v);
  r.error = error_flag != 0;
  return r;
}

number pow(number x, number n) {
  number r;
  r.error = x.error || n.error;
  if (r.error) return r;
  r.v = pow(x.v, n.v);
  return r;
}

void parse_block(void) {
  int flag;
  fp_pcb_type pcb;

  fp_pcb = &pcb;
  PCB.pointer = (unsigned char *) text_buffer;
  text_buffer[0] = BLOCK_REQUEST;
  fp();
  flag = PCB.exit_flag != 1
       || first_cell.row > last_cell.row
       || first_cell.col > last_cell.col
       || last_cell.row > MAXROWS
       || last_cell.col > MAXCOLS;
  if (flag) {
    kb_pcb.reduction_token = kb_bad_block_token;
    display_message(&bad_block_message);
    set_cursor(text_cursor);
  }
  else _setcursortype(_NOCURSOR);
}

void parse_cell_name(void) {
  int flag;
  fp_pcb_type pcb;

  fp_pcb = &pcb;
  PCB.pointer = (unsigned char *) text_buffer;
  text_buffer[0] = CELL_NAME_REQUEST;
  fp();
  flag = PCB.exit_flag != 1
       || goto_cell.row > MAXROWS
       || goto_cell.col > MAXCOLS;
  if (flag) {
    kb_pcb.reduction_token = kb_bad_cell_name_token;
    display_message(&bad_cell_message);
    set_cursor(text_cursor);
  }
  else _setcursortype(_NOCURSOR);
}

int rel_column_id(int a, int b) {
  int cn = 26*a + b;
  int nidc = a?2:1;
  int n;
  unsigned char case_bit = 0;
  char *cp;

  if (inserted_columns == 0 && inserted_rows == 0) return cn;
  if (cn >= new_column) cn += inserted_columns;
  n = (PCB.pointer - icoptr) - nidc;
  memmove((char *)icnptr, (char *)icoptr, n);
  icnptr += n;
  cp = (char *)PCB.pointer;
  while (nidc--) case_bit |= *--cp;
  case_bit &= 0x20;
  cp = column_label(cn,case_bit);
  strcpy((char *)icnptr,cp);
  icnptr += strlen(cp);
  return cn;
}

void relabel_formula(cell_pointer cp) {
  fp_pcb_type pcb, *save_pcb = fp_pcb;

  fp_pcb = &pcb;
  icoptr = PCB.pointer = (unsigned char *) &cp->text;
  icnptr = (unsigned char *) relabel_buf;
  fp();
  assert(PCB.exit_flag == 1);
  strcpy((char *)icnptr, (char *)icoptr);
  cp = (cell_descriptor *) realloc(cp, sizeof(cell_descriptor) + strlen(relabel_buf));
  assert(cp);
  strcpy(cp->text, relabel_buf);
  fp_pcb = save_pcb;
}

void scan_input_line(void) {
  fp_pcb_type pcb, *save_pcb = fp_pcb;

  fp_pcb = &pcb;
  PCB.pointer = (unsigned char *) text_buffer;
  text_buffer[0] = INPUT_LINE_REQUEST;
  fp();
  fp_pcb = save_pcb;
}

void set_column_width(void) {
  int n;
  char *tb = text_buffer + 1;
  int flag;

  highlight_off();
  for (n = 0; *tb;) n = 10*n + *tb++ - '0';
  flag = n < 3 || n > 75;
  if (flag) {
    kb_pcb.reduction_token = kb_column_width_request_token;
    display_message(&bad_cw_message);
    beep();
    set_cursor(text_cursor);
    return;
  }
  _setcursortype(_NOCURSOR);
  if (ac.scc.col + n > 81) move_data_left();
  cols[ac.ssc.col].width = n;
  display_column_guide();
  update_screen();
  highlight_on();
}


void stuff_cell(pair<int> loc) {
  char *tb = (char *) fp_pcb->pointer;
  cell_pointer cp = (cell_descriptor *) realloc(
    ss[loc.row][loc.col],
    sizeof(cell_descriptor) + strlen(tb));

  assert(cp);
  if (loc.row > max_row) max_row = loc.row;
  if (loc.col > max_col) max_col = loc.col;
  strcpy(cp->text, tb);
  ss[loc.row][loc.col] = cp;
  cp->recalc = recalc_count;
  eval(cp);
}

void stuff_format(format_code f,pair<int> first,pair<int> last){
  int i,j;
  for (i=first.row;i<=last.row;i++) for (j=first.col;j<=last.col;j++) {
    fmt[i][j] = f;
  }
  if (last.row > fmt_max_row) fmt_max_row = last.row;
  if (last.col > fmt_max_col) fmt_max_col = last.col;
}

number sum_cells(pair<int> first,pair<int> last){
  pair<int> cp;
  number sum;
  sum.error = sum.truth = 1;
  sum.v = 0;
  for (cp.row = first.row; cp.row <= last.row; cp.row++)
  for (cp.col = first.col; cp.col <= last.col; cp.col++) {
    number cv = cell_value(cp);
    if (cv.error) return sum;
    sum.v += cv.v;
  }
  sum.error = 0;
  return sum;
}

number summation(char *xb, char *xf, int bv, number f, number s, number l) {
  number sum;
  int k;
  char *xs;
  number delta;
  int n;

  sum.error = f.error + s.error + l.error;
  sum.v = 0;
  if (sum.error) return sum;
  k = (int) (xf - xb);
  xs = (char *) malloc(k+1);
  memmove(xs,xb,k);
  xs[k] = 0;
  delta = s-f;
  if (delta.v == 0) {
    sum.error = 1;
    return sum;
  }
  n = ((l-f+delta)/delta).v + .5;
  while (n--) {
    bound_variable[bv] = f;
    sum = sum + evalx(xs);
    if (sum.error) break;
    f = f+delta;
  }
  bound_variable[bv].error = 1;
  free(xs);
  return sum;
}



#ifndef CONVERT_CASE

static const char agCaseTable[31] = {
  0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
  0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
  0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,    0,
  0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20
};

static int agConvertCase(int c) {
  if (c >= 'a' && c <= 'z') return c ^= 0x20;
  if (c >= 0xe0 && c < 0xff) c ^= agCaseTable[c-0xe0];
  return c;
}

#define CONVERT_CASE(c) agConvertCase(c)

#endif


#ifndef TAB_SPACING
#define TAB_SPACING 8
#endif

static void ag_rp_1(pair<int> cp) {
/* Line -, ss-fp.syn */
  goto_cell = cp;
}

static void ag_rp_2(number x) {
/* Line -, ss-fp.syn */
  xvalue = x;
}

static void ag_rp_3(pair<int> f, pair<int> l) {
/* Line -, ss-fp.syn */
  first_cell=f, last_cell = l;
}

static void ag_rp_4(pair<int> loc) {
/* Line -, ss-fp.syn */
  stuff_cell(loc);
}

static void ag_rp_5(pair<int> f, pair<int> l, format_code fmt) {
/* Line -, ss-fp.syn */
  stuff_format(fmt,f,l);
}

static format_code ag_rp_6(int a, int c, int n) {
/* Line -, ss-fp.syn */
   format_code f;
   f.alignment = a;
   f.conversion =c;
   f.decimals = n;
   f.flag = 0;
   return f;

}

static int ag_rp_7(void) {
/* Line -, ss-fp.syn */
  return 0;
}

static int ag_rp_8(void) {
/* Line -, ss-fp.syn */
  return 1;
}

static int ag_rp_9(void) {
/* Line -, ss-fp.syn */
  return 2;
}

static int ag_rp_10(void) {
/* Line -, ss-fp.syn */
  return 0;
}

static int ag_rp_11(void) {
/* Line -, ss-fp.syn */
  return 1;
}

static int ag_rp_12(void) {
/* Line -, ss-fp.syn */
  return 2;
}

static pair<int> ag_rp_13(int col, int row) {
/* Line -, ss-fp.syn */
  return id_cell(row-1,col);
}

static int ag_rp_14(int a, int b) {
/* Line -, ss-fp.syn */
  return rel_column_id(a-'A'+1, b-'A');
}

static int ag_rp_15(int a) {
/* Line -, ss-fp.syn */
  return rel_column_id(0, a-'A');
}

static int ag_rp_16(int d) {
/* Line -, ss-fp.syn */
  return d-'0';
}

static int ag_rp_17(int n, int d) {
/* Line -, ss-fp.syn */
  return 10*n + d-'0';
}

static number ag_rp_18(number x, number c, number y) {
/* Line -, ss-fp.syn */
  number z;
  switch (c.tv){
  case 0:
    z = y;
    break;
  case 1:
    z = x;
    break;
  case 2:
    z.error = 1;
  }
  return z;

}

static number ag_rp_19(number x, number y) {
/* Line -, ss-fp.syn */
  return x||y;
}

static number ag_rp_20(number x, number y) {
/* Line -, ss-fp.syn */
  return x&&y;
}

static number ag_rp_21(number x) {
/* Line -, ss-fp.syn */
  return x;
}

static number ag_rp_22(number x) {
/* Line -, ss-fp.syn */
  return !x;
}

static number ag_rp_23(number x, number y) {
/* Line -, ss-fp.syn */
  return x<y;
}

static number ag_rp_24(number x, number y) {
/* Line -, ss-fp.syn */
  return x>y;
}

static number ag_rp_25(number x, number y) {
/* Line -, ss-fp.syn */
  return x<=y;
}

static number ag_rp_26(number x, number y) {
/* Line -, ss-fp.syn */
  return x>=y;
}

static number ag_rp_27(number x, number y) {
/* Line -, ss-fp.syn */
  return x==y;
}

static number ag_rp_28(number x, number y) {
/* Line -, ss-fp.syn */
  return x!=y;
}

static number ag_rp_29(number x, number y) {
/* Line -, ss-fp.syn */
  return x+y;
}

static number ag_rp_30(number x, number y) {
/* Line -, ss-fp.syn */
  return x-y;
}

static number ag_rp_31(number x, number y) {
/* Line -, ss-fp.syn */
  return x+y;
}

static number ag_rp_32(number x, number y) {
/* Line -, ss-fp.syn */
  return x-y;
}

static number ag_rp_33(number x, number y) {
/* Line -, ss-fp.syn */
  return x*y;
}

static number ag_rp_34(function_name f, number y) {
/* Line -, ss-fp.syn */
  return apply(f,y);
}

static number ag_rp_35(number x, function_name f, number y) {
/* Line -, ss-fp.syn */
  return x*apply(f,y);
}

static number ag_rp_36(number x, number n) {
/* Line -, ss-fp.syn */
  return pow(x,n);
}

static number ag_rp_37(number x) {
/* Line -, ss-fp.syn */
  return -x;
}

static number ag_rp_38(number x, number y) {
/* Line -, ss-fp.syn */
  return x/y;
}

static number ag_rp_39(number x, number y) {
/* Line -, ss-fp.syn */
  return x*y;
}

static number ag_rp_40(number x, number y) {
/* Line -, ss-fp.syn */
  return x*y;
}

static number ag_rp_41(pair<int> cp) {
/* Line -, ss-fp.syn */
  return cell_value(cp);
}

static number ag_rp_42(void) {
/* Line -, ss-fp.syn */
  return num(M_PI);
}

static number ag_rp_43(pair<int> first, pair<int> last) {
/* Line -, ss-fp.syn */
  return sum_cells(first,last);
}

static number ag_rp_44(int k) {
/* Line -, ss-fp.syn */
  return bound_variable[k-'A'];
}

static number ag_rp_45(char * xb, char * xf, int k, number f, number s, number l) {
/* Line -, ss-fp.syn */
  return summation(xb,xf,k-'A', f, s, l);
}

static char * ag_rp_46(void) {
/* Line -, ss-fp.syn */
  return (char *)PCB.pointer;
}

static char * ag_rp_47(void) {
/* Line -, ss-fp.syn */
  return (char *)PCB.pointer;
}

static number ag_rp_48(number x) {
/* Line -, ss-fp.syn */
  return x;
}

static function_name ag_rp_49(void) {
/* Line -, ss-fp.syn */
  return fabs;
}

static function_name ag_rp_50(void) {
/* Line -, ss-fp.syn */
  return acos;
}

static function_name ag_rp_51(void) {
/* Line -, ss-fp.syn */
  return asin;
}

static function_name ag_rp_52(void) {
/* Line -, ss-fp.syn */
  return atan;
}

static function_name ag_rp_53(void) {
/* Line -, ss-fp.syn */
  return cosh;
}

static function_name ag_rp_54(void) {
/* Line -, ss-fp.syn */
  return cos;
}

static function_name ag_rp_55(void) {
/* Line -, ss-fp.syn */
  return exp;
}

static function_name ag_rp_56(void) {
/* Line -, ss-fp.syn */
  return log10;
}

static function_name ag_rp_57(void) {
/* Line -, ss-fp.syn */
  return log;
}

static function_name ag_rp_58(void) {
/* Line -, ss-fp.syn */
  return pow10d;
}

static function_name ag_rp_59(void) {
/* Line -, ss-fp.syn */
  return round;
}

static function_name ag_rp_60(void) {
/* Line -, ss-fp.syn */
  return sinh;
}

static function_name ag_rp_61(void) {
/* Line -, ss-fp.syn */
  return sin;
}

static function_name ag_rp_62(void) {
/* Line -, ss-fp.syn */
  return sqr;
}

static function_name ag_rp_63(void) {
/* Line -, ss-fp.syn */
  return sqrt;
}

static function_name ag_rp_64(void) {
/* Line -, ss-fp.syn */
  return tanh;
}

static function_name ag_rp_65(void) {
/* Line -, ss-fp.syn */
  return tan;
}

static function_name ag_rp_66(void) {
/* Line -, ss-fp.syn */
  return trunc;
}

static number ag_rp_67(double x) {
/* Line -, ss-fp.syn */
  return num(x);
}

static number ag_rp_68(double x, double y) {
/* Line -, ss-fp.syn */
  return num(x+y);
}

static number ag_rp_69(double x) {
/* Line -, ss-fp.syn */
  return num(x);
}

static double ag_rp_70(int d) {
/* Line -, ss-fp.syn */
  return d-'0';
}

static double ag_rp_71(double n, int d) {
/* Line -, ss-fp.syn */
  return 10*n+d-'0';
}

static double ag_rp_72(int d) {
/* Line -, ss-fp.syn */
  return (d-'0')/10.;
}

static double ag_rp_73(int d, double f) {
/* Line -, ss-fp.syn */
  return (d-'0'+f)/10.;
}


#ifndef AG_TRACE_FILE_NAME
#define AG_TRACE_FILE_NAME "ss-fp.etr"
#endif

static void ag_trace_error(void) {
  FILE *ag_file = fopen(AG_TRACE_FILE_NAME, "w");
  int i;
  if (ag_file == NULL) return;
  fprintf(ag_file, "%d\n", (PCB).ssx);
  for (i = 0; i < (PCB).ssx; i++) fprintf(ag_file, "%d\n", (PCB).ss[i]);
  fprintf(ag_file, "%d\n", (PCB).sn);
  fprintf(ag_file, "%d\n", (PCB).token_number);
  fclose(ag_file);
}


#define READ_COUNTS ss-fp_read_counts()
#define WRITE_COUNTS ss-fp_write_counts()
unsigned ss-fp_nrc[183];
void ss-fp_read_counts(void) {
  FILE *ag_file = fopen("ss-fp.nrc", "r");
  int i;

  if (ag_file) {
    long ag_file_id;
    fscanf(ag_file, "%ld", &ag_file_id);
    if (ag_file_id == 0L) {
      for (i = 0; i < 183; i++)
        fscanf(ag_file,"%u", &(ss-fp_nrc[i]));
      fclose(ag_file);
      return;
    }
  }
  for (i = 0; i < 183; i++) ss-fp_nrc[i] = 0;
}

void ss-fp_write_counts(void) {
  FILE *ag_file = fopen("ss-fp.nrc", "w");
  int i;

  if (ag_file == NULL) return;
  fprintf(ag_file, "%ld\n", 0L);
  for (i = 0; i < 183; i++)
    fprintf(ag_file,"%u\n", ss-fp_nrc[i]);
  fclose(ag_file);
}


#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 ss-fp_vs_type const ag_null_value NULL_VALUE_INITIALIZER;

static const unsigned char ag_rpx[] = {
    0,  1,  0,  0,  0,  0,  0,  0,  2,  3,  4,  5,  0,  0,  0,  6,  7,  8,
    9, 10, 11, 12, 13, 14, 15, 16, 17,  0, 18,  0, 19,  0, 20,  0, 21, 22,
   23, 24, 25, 26, 27, 28,  0,  0,  0,  0, 29, 30,  0, 31, 32,  0, 33,  0,
   34, 35,  0, 36, 37,  0, 38,  0, 39,  0,  0,  0, 40,  0, 41,  0, 42, 43,
   44, 45, 46, 47,  0,  0,  0, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58,
   59, 60, 61, 62, 63, 64, 65, 66,  0,  0, 67, 68, 69, 70, 71, 72, 73
};

static const unsigned char ag_key_itt[] = {
 0
};

static const unsigned short ag_key_pt[] = {
0
};

static const unsigned char ag_key_ch[] = {
    0, 66, 67, 83, 84,255, 72,255, 83,255, 79,255, 49,255, 71,255, 79,255,
   72,255, 78,255, 84,255, 82,255, 73, 81,255, 72,255, 78,255, 65, 82,255,
   65, 67, 69, 76, 80, 82, 83, 84,255, 66, 67, 83, 84,255, 72,255, 83,255,
   79,255, 49,255, 71,255, 79,255, 72,255, 78,255, 84,255, 82,255, 73, 81,
  255, 72,255, 78,255, 65, 82,255, 33, 46, 60, 61, 62, 65, 67, 69, 76, 80,
   82, 83, 84,255, 33, 46, 60, 61, 62,255, 33, 60, 61, 62,255, 46,255
};

static const unsigned char ag_key_act[] = {
  0,3,3,3,3,4,0,4,1,4,2,4,3,4,1,4,2,4,0,4,1,4,0,4,1,4,2,2,4,0,4,1,4,2,3,
  4,2,2,3,2,3,3,2,2,4,3,3,3,3,4,0,4,1,4,2,4,3,4,1,4,2,4,0,4,1,4,0,4,1,4,
  2,2,4,0,4,1,4,2,3,4,3,3,3,3,3,2,2,3,2,3,3,2,2,4,3,3,3,3,3,4,3,3,3,3,4,
  3,4
};

static const unsigned char ag_key_parm[] = {
    0,145,146,147,148,  0,149,  0,150,  0,  0,  0,152,  0,153,  0,  0,  0,
  156,  0,157,  0,159,  0,158,  0,  0,  0,  0,160,  0,161,  0,  0,162,  0,
    0,  0,151,  0,154,155,  0,  0,  0,145,146,147,148,  0,149,  0,150,  0,
    0,  0,152,  0,153,  0,  0,  0,156,  0,157,  0,159,  0,158,  0,  0,  0,
    0,160,  0,161,  0,  0,162,  0,137,143,134,136,135,  0,  0,151,  0,154,
  155,  0,  0,  0,137,143,134,136,135,  0,137,134,136,135,  0,143,  0
};

static const unsigned char ag_key_jmp[] = {
    0,  0,  2,  5,  8,  0,  0,  0,  6,  0,  8,  0, 14,  0, 12,  0, 14,  0,
    0,  0, 18,  0,  0,  0, 22,  0, 20, 24,  0,  0,  0, 29,  0, 31, 26,  0,
    1, 10, 11, 16, 16, 21, 26, 33,  0, 41, 43, 46, 49,  0,  0,  0, 50,  0,
   52,  0, 55,  0, 56,  0, 58,  0,  0,  0, 62,  0,  0,  0, 66,  0, 64, 68,
    0,  0,  0, 73,  0, 75, 67,  0, 30, 32, 35, 37, 39, 45, 54, 52, 60, 57,
   62, 70, 77,  0, 71, 73, 76, 78, 80,  0, 82, 84, 86, 88,  0, 90,  0
};

static const unsigned char ag_key_index[] = {
   36, 80, 36, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 36,  0, 80, 80,
   36,  0,  0, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
    0,  0,  0,  0, 36, 80, 80, 80, 80,  0,  0, 94, 36, 80,  0, 36, 94,  0,
  100,  0,  0,  0,  0,  0,  0,  0, 80, 80, 80,  0,  0,  0,  0,  0,  0, 94,
    0, 36, 36, 36, 36, 36, 36, 36, 36,  0, 36, 36,  0,  0,  0,  0,  0,  0,
   80,  0,  0,  0, 94, 94,  0,100,  0, 36,100,  0,  0,  0,  0,  0, 36,  0,
    0, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,100,  0, 36, 36,
   36, 36, 36, 36,  0,  0, 36,100,100,100,100,100,100,  0,  0,  0,  0, 36,
   36,  0, 36, 36,  0,  0,105,  0, 36, 36,  0,  0,  0,  0,  0,  0,  0,  0,
    0
};

static const unsigned char ag_key_ends[] = {
83,0, 79,83,0, 73,78,0, 65,78,0, 88,80,0, 48,0, 79,87,49,48,0, 
79,85,78,68,0, 85,78,67,0, 61,0, 46,46,0, 61,0, 61,0, 61,0, 
83,0, 79,83,0, 73,78,0, 65,78,0, 88,80,0, 48,0, 79,87,49,48,0, 
79,85,78,68,0, 85,78,67,0, 61,0, 46,46,0, 61,0, 61,0, 61,0, 
61,0, 61,0, 61,0, 61,0, 46,46,0, 
};

#define AG_TCV(x) ag_tcv[(x)]

static const unsigned char ag_tcv[] = {
    5,  0,  0,  0,  0,  0,  0,  0,  0,  0,111,  0,  0,  0,  0,  0,  0,  0,
    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,131,  0,  0,
    0,  0,128,  0,130,129,140,138,119,139,116,114,164,125,125,125,125,125,
  125,125,125,125,117,126,132,113,133,  0,115,120,165,163,118,165,123,124,
  165,165,165,165,121,165,165,165,165,165,122,165,165,165,165,165,165,165,
  165,  0,  0,  0,141,  0,  0,120,165,163,118,165,123,124,165,165,165,165,
  121,165,165,165,165,165,122,165,165,165,165,165,165,165,165,  0,127,  0,
    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,142,144,  0,
    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
    0,  0,  0,  0,  0,112,110,  0,  0,  0,  0,142,144,  0,  0,  0,  0,  0,
    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
    0,112,110,109
};

#ifndef SYNTAX_ERROR
#define SYNTAX_ERROR fprintf(stderr,"%s\n", (PCB).error_message)
#endif

#ifndef PARSER_STACK_OVERFLOW
#define PARSER_STACK_OVERFLOW {fprintf(stderr, \
  "\nParser stack overflow\n");}
#endif

#ifndef REDUCTION_TOKEN_ERROR
#define REDUCTION_TOKEN_ERROR {fprintf(stderr, \
  "\nReduction token error\n");}
#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 = (ss-fp_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 = (ss-fp_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 = (ss-fp_token_type) ag_key_pt[ag_k1+1];
      break;
    }
    case ag_set_key:
      ag_save = (int) ((PCB).la_ptr - (PCB).pointer);
      (PCB).token_number = (ss-fp_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 = (ss-fp_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 = (ss-fp_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);
  }
}


static const unsigned char ag_tstt[] = {
165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
  146,145,144,142,139,130,125,124,123,122,121,120,118,116,112,110,109,1,0,
  107,108,
1,0,
165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
  146,145,144,142,139,130,125,124,123,122,121,120,118,116,112,110,109,0,2,
  3,4,6,8,13,19,21,27,29,31,32,33,34,35,36,38,39,47,57,59,60,61,63,64,65,
  66,67,69,70,71,72,73,74,75,76,77,80,81,82,83,84,85,86,87,88,89,90,91,92,
  93,94,95,96,97,98,99,100,104,105,106,
165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
  146,145,144,143,142,141,140,139,138,137,136,135,134,133,132,130,129,128,
  127,126,125,124,123,122,121,120,119,118,117,116,114,113,111,5,1,0,107,
  108,
165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
  146,145,144,143,142,141,140,139,138,137,136,135,134,133,132,130,129,128,
  127,126,125,124,123,122,121,120,119,118,117,116,114,113,111,5,1,0,107,
  108,
165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
  146,145,144,143,142,141,140,139,138,137,136,135,134,133,132,130,129,128,
  127,126,125,124,123,122,121,120,119,118,117,116,114,111,5,1,0,107,108,
165,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,146,
  145,143,141,140,139,138,137,136,135,134,133,132,129,128,127,126,125,124,
  123,122,121,120,119,118,117,114,113,111,5,1,0,107,108,
165,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,146,
  145,143,141,140,139,138,137,136,135,134,133,132,129,128,127,126,125,124,
  123,122,121,120,119,118,117,114,113,111,5,1,0,107,108,
165,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,146,
  145,143,141,140,139,138,137,136,135,134,133,132,129,128,127,126,125,124,
  123,122,121,120,119,118,117,114,113,111,5,1,0,107,108,
165,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,146,
  145,143,141,140,139,138,137,136,135,134,133,132,129,128,127,126,125,124,
  123,122,121,120,119,118,117,114,113,111,5,1,0,107,108,
165,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,146,
  145,143,141,140,139,138,137,136,135,134,133,132,129,128,127,126,125,124,
  123,122,121,120,119,118,117,114,113,111,5,1,0,107,108,
165,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,146,
  145,143,141,140,139,138,137,136,135,134,133,132,129,128,127,126,125,124,
  123,122,121,120,119,118,117,114,113,111,5,1,0,107,108,
165,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,146,
  145,143,141,140,139,138,137,136,135,134,133,132,129,128,127,126,125,124,
  123,122,121,120,119,118,117,114,113,111,5,1,0,107,108,
165,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,146,
  145,143,141,140,139,138,137,136,135,134,133,132,129,128,127,126,125,124,
  123,122,121,120,119,118,117,114,113,111,5,1,0,107,108,
165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
  146,145,144,142,139,131,130,125,124,123,122,121,120,118,116,1,0,107,108,
165,163,124,123,122,121,120,118,0,21,27,29,31,32,33,35,104,106,
165,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,146,
  145,143,141,140,139,138,137,136,135,134,133,132,129,128,127,126,125,124,
  123,122,121,120,119,118,117,114,111,5,0,
165,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,146,
  145,144,143,142,141,140,139,138,137,136,135,134,133,132,130,129,128,127,
  126,124,123,122,121,120,119,118,117,114,111,5,1,0,107,108,
165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
  146,145,144,142,139,130,125,124,123,122,121,120,118,116,0,4,8,19,21,27,
  29,31,32,33,34,35,36,38,39,47,57,59,60,61,63,64,65,66,67,69,70,71,72,73,
  74,75,76,77,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,
  100,104,105,106,
125,0,28,36,
164,125,0,36,102,105,
165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
  146,145,144,143,142,141,140,139,138,137,136,135,134,133,132,130,129,128,
  127,126,125,124,123,122,121,120,119,118,117,116,114,111,5,0,19,36,100,
  101,105,
165,164,163,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108,
165,164,163,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108,
165,164,163,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108,
165,164,163,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108,
165,164,163,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108,
165,164,163,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108,
165,164,163,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108,
165,164,163,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108,
165,164,163,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108,
165,164,163,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108,
165,164,163,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108,
165,164,163,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108,
165,164,163,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108,
165,164,163,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108,
165,164,163,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108,
165,164,163,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108,
165,164,163,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108,
165,164,163,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108,
165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
  146,145,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108,
165,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,146,
  145,144,143,142,141,140,139,138,137,136,135,134,133,132,130,129,128,127,
  126,124,123,122,121,120,119,118,117,114,111,5,0,
165,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,146,
  145,144,143,142,141,140,139,138,137,136,135,134,133,132,130,129,128,127,
  126,124,123,122,121,120,119,118,117,114,111,5,0,
162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,146,145,143,
  141,140,139,138,137,136,135,134,133,132,129,128,127,126,119,117,114,111,
  5,0,
165,163,144,142,130,124,123,122,121,120,118,0,4,21,27,29,31,32,33,34,35,47,
  70,72,74,75,76,77,80,104,106,
165,164,163,144,142,139,130,125,124,123,122,121,120,118,116,0,4,19,21,27,29,
  31,32,33,34,35,36,47,59,63,65,66,67,69,70,71,72,73,74,75,76,77,80,99,
  100,104,105,106,
141,0,68,
114,0,17,
165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
  146,145,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108,
162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,146,145,0,
  64,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,
165,164,163,144,142,139,130,125,124,123,122,121,120,118,116,0,4,19,21,27,29,
  31,32,33,34,35,36,47,59,63,65,66,67,69,70,71,72,73,74,75,76,77,80,99,
  100,104,105,106,
165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
  146,145,144,142,139,130,125,124,123,122,121,120,118,116,0,4,19,21,27,29,
  31,32,33,34,35,36,38,39,47,57,59,60,61,63,64,65,66,67,69,70,71,72,73,74,
  75,76,77,78,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,
  100,104,105,106,
140,0,62,
165,163,124,123,122,121,120,118,1,0,107,108,
139,138,117,0,22,58,59,
165,163,124,123,122,121,120,118,115,1,0,107,108,
165,163,124,123,122,121,120,118,1,0,107,108,
165,163,124,123,122,121,120,118,0,4,21,27,29,31,32,33,34,35,104,106,
111,5,0,9,10,11,12,
165,163,124,123,122,121,120,118,115,0,4,7,16,21,27,29,31,32,33,34,35,104,
  106,
165,163,124,123,122,121,120,118,0,4,21,27,29,31,32,33,34,35,104,106,
129,0,48,
164,125,0,36,105,
164,125,0,36,102,105,
164,125,0,36,102,105,
165,163,124,123,122,121,120,118,0,4,21,27,29,31,32,33,34,35,104,106,
165,164,163,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108,
165,164,163,144,142,139,130,125,124,123,122,121,120,118,116,0,4,19,21,27,29,
  31,32,33,34,35,36,47,59,63,65,66,67,69,70,71,72,73,74,75,76,77,80,99,
  100,104,105,106,
165,164,163,144,142,130,125,124,123,122,121,120,118,116,1,0,107,108,
165,164,163,144,142,130,125,124,123,122,121,120,118,116,0,4,19,21,27,29,31,
  32,33,34,35,36,47,65,69,70,71,72,73,74,75,76,77,80,99,100,104,105,106,
165,164,163,144,142,139,130,125,124,123,122,121,120,118,116,0,4,19,21,27,29,
  31,32,33,34,35,36,47,59,63,65,66,67,69,70,71,72,73,74,75,76,77,80,99,
  100,104,105,106,
139,138,0,58,59,
117,0,22,
116,0,19,
165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
  146,145,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108,
165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
  146,145,144,142,139,130,125,124,123,122,121,120,118,116,0,4,19,21,27,29,
  31,32,33,34,35,36,47,59,61,63,64,65,66,67,69,70,71,72,73,74,75,76,77,80,
  81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,104,105,
  106,
165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
  146,145,144,142,139,130,125,124,123,122,121,120,118,116,0,4,19,21,27,29,
  31,32,33,34,35,36,47,57,59,60,61,63,64,65,66,67,69,70,71,72,73,74,75,76,
  77,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,104,
  105,106,
165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
  146,145,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108,
165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
  146,145,144,142,139,130,125,124,123,122,121,120,118,116,0,4,19,21,27,29,
  31,32,33,34,35,36,47,57,59,60,61,63,64,65,66,67,69,70,71,72,73,74,75,76,
  77,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,104,
  105,106,
165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
  146,145,144,142,139,131,130,125,124,123,122,121,120,118,116,1,0,107,108,
165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
  146,145,144,142,139,131,130,125,124,123,122,121,120,118,116,0,4,19,21,
  27,29,31,32,33,34,35,36,38,39,40,42,44,46,47,49,50,57,59,60,61,63,64,65,
  66,67,69,70,71,72,73,74,75,76,77,80,81,82,83,84,85,86,87,88,89,90,91,92,
  93,94,95,96,97,98,99,100,104,105,106,
116,0,14,19,
165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
  146,145,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108,
165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
  146,145,144,142,139,130,125,124,123,122,121,120,118,116,0,4,8,19,21,27,
  29,31,32,33,34,35,36,38,39,47,57,59,60,61,63,64,65,66,67,69,70,71,72,73,
  74,75,76,77,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,
  100,104,105,106,
111,0,9,10,
5,0,
165,163,124,123,122,121,120,118,1,0,107,108,
165,163,124,123,122,121,120,118,0,4,21,27,29,31,32,33,34,35,104,106,
113,0,15,
5,0,
165,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,146,
  145,144,143,142,141,140,139,138,137,136,135,134,133,132,130,129,128,127,
  126,124,123,122,121,120,119,118,117,114,111,5,1,0,107,108,
116,0,19,
165,163,124,123,122,121,120,118,0,21,27,29,31,32,33,77,104,106,
165,163,124,123,122,121,120,118,116,0,19,20,
140,0,62,
140,0,62,
130,1,0,107,108,
137,136,135,134,133,132,0,51,52,53,54,55,56,
130,0,47,
165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
  146,145,144,142,139,131,130,125,124,123,122,121,120,118,116,0,4,8,19,21,
  27,29,31,32,33,34,35,36,38,39,40,42,44,46,47,49,50,57,59,60,61,63,64,65,
  66,67,69,70,71,72,73,74,75,76,77,80,81,82,83,84,85,86,87,88,89,90,91,92,
  93,94,95,96,97,98,99,100,104,105,106,
137,136,135,134,133,132,129,128,127,126,0,
128,0,45,
127,126,0,41,43,
165,163,124,123,122,121,120,118,116,0,19,20,
165,163,124,123,122,121,120,118,0,4,21,27,29,31,32,33,34,35,104,106,
116,0,14,19,
165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
  146,145,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108,
113,0,15,
165,163,124,123,122,121,120,118,0,4,21,27,29,31,32,33,34,35,104,106,
165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
  146,145,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108,
165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
  146,145,144,142,139,130,125,124,123,122,121,120,118,116,0,4,19,21,27,29,
  31,32,33,34,35,36,39,47,59,60,61,63,64,65,66,67,69,70,71,72,73,74,75,76,
  77,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,104,
  105,106,
165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
  146,145,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108,
165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
  146,145,144,142,139,130,125,124,123,122,121,120,118,116,0,4,19,21,27,29,
  31,32,33,34,35,36,39,47,59,60,61,63,64,65,66,67,69,70,71,72,73,74,75,76,
  77,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,104,
  105,106,
165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
  146,145,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108,
165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
  146,145,144,142,139,130,125,124,123,122,121,120,118,116,0,4,19,21,27,29,
  31,32,33,34,35,36,39,47,59,60,61,63,64,65,66,67,69,70,71,72,73,74,75,76,
  77,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,104,
  105,106,
165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
  146,145,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108,
165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
  146,145,144,142,139,130,125,124,123,122,121,120,118,116,0,4,19,21,27,29,
  31,32,33,34,35,36,39,47,59,60,61,63,64,65,66,67,69,70,71,72,73,74,75,76,
  77,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,104,
  105,106,
165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
  146,145,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108,
165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
  146,145,144,142,139,130,125,124,123,122,121,120,118,116,0,4,19,21,27,29,
  31,32,33,34,35,36,39,47,59,60,61,63,64,65,66,67,69,70,71,72,73,74,75,76,
  77,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,104,
  105,106,
165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
  146,145,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108,
165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
  146,145,144,142,139,130,125,124,123,122,121,120,118,116,0,4,19,21,27,29,
  31,32,33,34,35,36,39,47,59,60,61,63,64,65,66,67,69,70,71,72,73,74,75,76,
  77,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,104,
  105,106,
165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
  146,145,144,142,139,131,130,125,124,123,122,121,120,118,116,0,4,19,21,
  27,29,31,32,33,34,35,36,38,39,40,42,44,46,47,49,50,57,59,60,61,63,64,65,
  66,67,69,70,71,72,73,74,75,76,77,80,81,82,83,84,85,86,87,88,89,90,91,92,
  93,94,95,96,97,98,99,100,104,105,106,
137,136,135,134,133,132,129,0,
129,127,0,43,48,
165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
  146,145,144,142,139,131,130,125,124,123,122,121,120,118,116,1,0,107,108,
165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
  146,145,144,142,139,131,130,125,124,123,122,121,120,118,116,0,4,19,21,
  27,29,31,32,33,34,35,36,38,39,44,46,47,49,50,57,59,60,61,63,64,65,66,67,
  69,70,71,72,73,74,75,76,77,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,
  95,96,97,98,99,100,104,105,106,
165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
  146,145,144,142,139,131,130,125,124,123,122,121,120,118,116,1,0,107,108,
165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
  146,145,144,142,139,131,130,125,124,123,122,121,120,118,116,0,4,19,21,
  27,29,31,32,33,34,35,36,38,39,42,44,46,47,49,50,57,59,60,61,63,64,65,66,
  67,69,70,71,72,73,74,75,76,77,80,81,82,83,84,85,86,87,88,89,90,91,92,93,
  94,95,96,97,98,99,100,104,105,106,
165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
  146,145,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108,
165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
  146,145,144,142,139,130,125,124,123,122,121,120,118,116,0,4,8,19,21,27,
  29,31,32,33,34,35,36,38,39,47,57,59,60,61,63,64,65,66,67,69,70,71,72,73,
  74,75,76,77,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,
  100,104,105,106,
5,0,
165,163,124,123,122,121,120,118,0,4,21,27,29,31,32,33,34,35,104,106,
165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
  146,145,144,142,139,130,125,124,123,122,121,120,118,116,0,4,19,21,27,29,
  31,32,33,34,35,36,38,39,47,57,59,60,61,63,64,65,66,67,69,70,71,72,73,74,
  75,76,77,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,
  100,104,105,106,
139,138,0,58,59,
139,138,0,58,59,
139,138,0,58,59,
139,138,0,58,59,
139,138,0,58,59,
139,138,0,58,59,
129,127,0,43,48,
128,0,45,
114,0,17,
119,0,24,
165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
  146,145,144,142,139,130,125,124,123,122,121,120,118,116,0,4,19,21,27,29,
  31,32,33,34,35,36,47,59,60,61,63,64,65,66,67,69,70,71,72,73,74,75,76,77,
  80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,104,105,
  106,
165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
  146,145,144,142,139,130,125,124,123,122,121,120,118,116,0,4,19,21,27,29,
  31,32,33,34,35,36,47,59,60,61,63,64,65,66,67,69,70,71,72,73,74,75,76,77,
  80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,104,105,
  106,
120,0,18,21,
165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
  146,145,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108,
165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
  146,145,144,142,139,130,125,124,123,122,121,120,118,116,0,4,19,21,27,29,
  31,32,33,34,35,36,38,39,47,57,59,60,61,63,64,65,66,67,69,70,71,72,73,74,
  75,76,77,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,
  100,104,105,106,
117,0,22,
5,0,
143,0,79,
163,122,121,0,23,29,31,104,
165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
  146,145,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108,
165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
  146,145,144,142,139,130,125,124,123,122,121,120,118,116,0,4,19,21,27,29,
  31,32,33,34,35,36,38,39,47,57,59,60,61,63,64,65,66,67,69,70,71,72,73,74,
  75,76,77,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,
  100,104,105,106,
119,0,24,
163,0,104,
117,0,22,
163,124,123,0,26,32,33,104,
119,0,24,
118,0,27,
117,0,22,
125,0,28,36,
164,125,0,36,105,

};


static unsigned const char ag_astt[5069] = {
  5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,3,
  7,1,1,9,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,7,0,1,2,1,1,1,3,1,1,1,1,1,1,1,1,2,3,1,1,3,1,1,3,3,1,1,1,1,1,1,1,1,
  3,3,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,2,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,3,7,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,3,7,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,3,7,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,3,7,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,3,7,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,3,7,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,3,7,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,3,7,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,3,7,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,3,7,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,3,7,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,3,7,1,3,1,1,1,1,1,1,1,1,4,3,3,3,3,
  3,3,2,3,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,7,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
  5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,3,7,1,3,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,2,1,3,1,1,1,1,1,
  1,1,1,2,3,1,1,3,1,1,3,3,1,1,1,1,1,1,1,1,3,3,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,
  2,2,2,2,2,2,2,1,1,1,2,1,1,7,1,2,1,1,7,1,2,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,1,5,5,5,5,5,5,5,5,1,5,5,5,
  7,3,2,1,2,2,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,3,7,1,3,5,5,5,5,5,5,5,5,5,5,5,5,
  5,5,5,3,7,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,3,7,1,3,5,5,5,5,5,5,5,5,5,5,5,
  5,5,5,5,3,7,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,3,7,1,3,5,5,5,5,5,5,5,5,5,5,
  5,5,5,5,5,3,7,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,3,7,1,3,5,5,5,5,5,5,5,5,5,
  5,5,5,5,5,5,3,7,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,3,7,1,3,5,5,5,5,5,5,5,5,
  5,5,5,5,5,5,5,3,7,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,3,7,1,3,5,5,5,5,5,5,5,
  5,5,5,5,5,5,5,5,3,7,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,3,7,1,3,5,5,5,5,5,5,
  5,5,5,5,5,5,5,5,5,3,7,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,3,7,1,3,5,5,5,5,5,
  5,5,5,5,5,5,5,5,5,5,3,7,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,3,7,1,3,5,5,5,5,
  5,5,5,5,5,5,5,5,5,5,5,3,7,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,3,7,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,7,5,5,5,5,5,5,5,5,5,
  5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
  5,5,5,7,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
  5,5,5,5,5,7,1,1,1,1,1,1,1,1,1,1,1,5,2,1,1,1,1,1,1,1,1,1,2,2,3,2,1,2,2,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,2,3,1,1,1,1,1,1,1,1,2,1,1,2,3,1,1,1,1,1,1,
  3,3,2,1,2,2,1,1,1,2,1,1,7,1,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,3,7,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,1,
  2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,2,3,1,
  1,1,1,1,1,1,1,2,1,1,2,3,1,1,1,1,1,1,3,3,2,1,2,2,1,1,1,2,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,3,1,1,1,1,1,1,1,1,2,
  2,1,1,3,1,1,3,3,1,1,1,1,1,1,1,1,3,3,2,1,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
  2,2,2,2,1,1,1,2,1,1,5,1,5,5,5,5,5,5,5,5,3,7,1,3,1,1,1,5,1,1,1,5,5,5,5,5,5,
  5,5,5,3,7,1,3,5,5,5,5,5,5,5,5,3,7,1,3,1,1,1,1,1,1,1,1,7,1,3,3,3,3,3,3,1,1,
  3,3,1,5,7,1,3,1,1,1,1,1,1,1,1,1,1,1,7,1,3,1,3,3,3,3,3,3,1,1,3,3,1,1,1,1,1,
  1,1,1,7,1,3,3,3,3,3,3,1,1,3,3,1,7,2,1,1,4,2,2,1,1,4,1,2,1,1,1,5,1,2,1,1,1,
  1,1,1,1,1,1,7,1,3,3,3,3,3,3,1,1,3,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,3,7,1,3,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,2,3,1,1,1,1,1,1,1,1,2,1,1,2,3,1,1,1,1,1,1,
  3,3,2,1,2,2,1,1,1,2,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,3,7,1,3,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,7,2,3,1,1,1,1,1,1,1,1,2,1,2,1,3,3,3,3,3,2,1,2,2,1,1,1,2,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,7,2,3,1,1,1,1,1,1,1,1,2,1,1,2,3,1,1,1,1,1,1,3,3,
  2,1,2,2,1,1,1,2,1,1,1,5,1,1,1,7,1,1,4,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
  5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,3,7,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,2,3,1,1,1,1,1,1,1,1,2,1,1,2,3,1,1,1,1,1,
  1,1,1,3,3,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,2,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,2,3,1,1,1,1,1,1,
  1,1,2,1,2,1,1,3,3,1,1,1,1,1,1,1,1,3,3,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
  2,2,2,2,1,1,1,2,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,3,7,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,7,2,3,1,1,1,1,1,1,1,1,2,1,2,1,1,3,3,1,1,1,1,1,1,1,1,3,3,2,1,2,2,
  2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,2,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,3,7,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,2,3,1,1,1,1,1,1,1,1,2,3,1,1,1,
  3,1,1,1,1,3,1,1,3,3,1,1,1,1,1,1,1,1,3,3,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
  2,2,2,2,2,1,1,1,2,1,1,7,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
  5,5,5,5,5,5,5,5,5,5,3,7,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,7,2,3,3,1,1,1,1,1,1,1,1,2,3,1,1,3,1,1,3,3,1,1,1,1,1,1,
  1,1,3,3,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,2,1,1,5,1,3,2,7,
  5,5,5,5,5,5,5,5,3,7,1,3,1,1,1,1,1,1,1,1,7,1,3,3,3,3,3,3,1,1,3,3,1,7,2,2,7,
  5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
  5,5,5,5,5,5,5,5,5,5,5,5,3,7,1,3,1,7,1,1,1,1,1,1,1,1,1,7,3,3,3,3,3,3,1,3,3,
  5,5,5,5,5,5,5,5,1,7,3,1,1,4,1,1,4,1,5,3,7,1,3,1,1,1,1,1,1,7,1,1,1,1,1,1,1,
  7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,
  2,1,3,1,1,1,1,1,1,1,1,2,1,1,1,1,3,1,1,1,1,3,1,1,3,3,1,1,1,1,1,1,1,1,3,3,2,
  1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,2,1,5,5,5,5,5,5,5,5,5,5,7,
  1,5,1,1,1,7,1,1,5,5,5,5,5,5,5,5,1,7,3,3,1,1,1,1,1,1,1,1,7,1,3,3,3,3,3,3,1,
  1,3,3,1,7,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
  5,5,5,3,7,1,3,1,7,1,1,1,1,1,1,1,1,1,7,2,3,3,3,3,3,3,1,1,3,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,3,7,1,3,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,2,3,1,1,1,1,1,1,1,1,
  2,1,1,1,1,3,3,1,1,1,1,1,1,1,1,3,3,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
  2,2,1,1,1,2,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,3,7,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,7,2,3,1,1,1,1,1,1,1,1,2,1,1,1,1,3,3,1,1,1,1,1,1,1,1,3,3,2,1,2,2,2,2,
  2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,2,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,3,7,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,2,3,1,1,1,1,1,1,1,1,2,1,1,1,1,3,3,1,1,
  1,1,1,1,1,1,3,3,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,2,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,3,7,1,3,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,2,3,1,1,1,
  1,1,1,1,1,2,1,1,1,1,3,3,1,1,1,1,1,1,1,1,3,3,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,
  2,2,2,2,2,2,2,1,1,1,2,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,3,7,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,7,2,3,1,1,1,1,1,1,1,1,2,1,1,1,1,3,3,1,1,1,1,1,1,1,1,3,3,2,
  1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,2,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,3,7,1,3,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,2,3,1,1,1,1,1,1,1,1,2,1,1,1,
  1,3,3,1,1,1,1,1,1,1,1,3,3,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,
  1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  7,2,3,1,1,1,1,1,1,1,1,2,3,1,1,1,3,1,1,1,1,3,1,1,3,3,1,1,1,1,1,1,1,1,3,3,2,
  1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,2,1,5,5,5,5,5,5,5,7,1,1,7,
  1,2,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,3,
  7,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  7,2,3,1,1,1,1,1,1,1,1,2,3,1,2,1,1,1,1,3,1,1,3,3,1,1,1,1,1,1,1,1,3,3,2,1,2,
  2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,2,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,3,7,1,3,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,2,3,1,1,1,1,1,1,1,1,2,3,1,1,
  3,1,1,1,1,3,1,1,3,3,1,1,1,1,1,1,1,1,3,3,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
  2,2,2,2,2,1,1,1,2,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,3,7,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,7,2,2,3,1,1,1,1,1,1,1,1,2,3,1,1,3,1,1,3,3,1,1,1,1,1,1,1,1,3,3,
  2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,2,1,2,7,1,1,1,1,1,1,1,1,
  7,1,3,3,3,3,3,3,1,1,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,7,2,3,1,1,1,1,1,1,1,1,2,1,1,1,3,1,1,3,3,1,1,1,1,1,1,1,1,3,
  3,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,2,1,1,1,4,1,1,1,1,4,1,
  1,1,1,4,1,1,1,1,4,1,1,1,1,4,1,1,1,1,4,1,1,1,1,7,1,2,1,4,1,1,7,1,1,7,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,2,3,1,1,1,
  1,1,1,1,1,2,1,1,1,3,3,1,1,1,1,1,1,1,1,3,3,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
  2,2,2,2,2,2,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,7,2,3,1,1,1,1,1,1,1,1,2,1,1,1,3,3,1,1,1,1,1,1,1,1,3,3,2,1,2,
  2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,2,1,1,7,1,1,5,5,5,5,5,5,5,5,5,
  5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,3,7,1,3,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,2,3,1,1,1,1,1,1,1,1,2,1,
  1,1,3,1,1,3,3,1,1,1,1,1,1,1,1,3,3,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
  2,2,1,1,1,2,1,1,7,1,2,7,1,7,1,1,1,1,7,1,2,2,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,3,7,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,2,3,1,1,1,1,1,1,1,1,2,2,1,1,3,1,1,
  3,3,1,1,1,1,1,1,1,1,3,3,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,
  2,1,1,7,1,1,7,1,1,7,1,1,1,1,7,1,2,2,2,1,7,1,1,7,1,1,7,1,1,7,1,2,1,1,4,2,2
};


static const unsigned char ag_pstt[] = {
124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
  124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,
  0,1,2,
123,125,
12,4,11,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,48,17,40,14,3,
  8,9,6,7,13,10,5,53,55,56,2,0,60,68,59,58,57,109,16,16,16,16,16,16,19,15,
  103,27,54,18,45,45,52,51,53,50,49,47,46,44,43,42,41,67,69,70,51,72,74,
  80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,21,20,16,103,16,
124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
  124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
  124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,3,1,
  142,
124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
  124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
  124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,4,1,
  181,
124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
  124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
  124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,5,1,133,
124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
  124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
  124,124,124,124,124,124,124,124,124,124,124,122,6,1,139,
124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
  124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
  124,124,124,124,124,124,124,124,124,124,124,122,7,1,138,
124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
  124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
  124,124,124,124,124,124,124,124,124,124,124,122,8,1,141,
124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
  124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
  124,124,124,124,124,124,124,124,124,124,124,122,9,1,140,
124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
  124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
  124,124,124,124,124,124,124,124,124,124,124,122,10,1,135,
124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
  124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
  124,124,124,124,124,124,124,124,124,124,124,122,11,1,180,
124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
  124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
  124,124,124,124,124,124,124,124,124,124,124,122,12,1,182,
124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
  124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
  124,124,124,124,124,124,124,124,124,124,124,122,13,1,137,
124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
  124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,14,1,
  147,
12,11,8,9,6,7,13,10,24,107,107,107,107,107,107,23,107,107,
107,107,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
  108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,107,107,
  107,107,107,107,108,107,108,108,108,108,16,
124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
  124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
  124,124,124,124,124,124,124,124,124,124,124,124,122,17,1,159,
12,4,11,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,48,17,40,14,3,
  8,9,6,7,13,10,5,18,68,61,109,16,16,16,16,16,16,19,15,103,27,54,18,45,45,
  52,51,53,50,49,47,46,44,43,42,41,67,69,70,51,72,74,80,81,82,83,84,85,86,
  87,88,89,90,91,92,93,94,95,96,97,21,20,16,103,16,
3,19,62,25,
4,3,20,63,102,63,
98,4,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,
  98,98,98,98,98,98,98,98,98,98,98,98,98,98,3,98,98,98,98,98,98,98,98,5,
  98,98,98,21,109,104,64,100,104,
124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,22,1,179,
124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,23,1,178,
124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,24,1,177,
124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,25,1,176,
124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,26,1,175,
124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,27,1,174,
124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,28,1,173,
124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,29,1,172,
124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,30,1,171,
124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,31,1,170,
124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,32,1,169,
124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,33,1,168,
124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,34,1,167,
124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,35,1,166,
124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,36,1,165,
124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,37,1,164,
124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,38,1,163,
124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,39,1,162,
124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
  124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,40,1,156,
65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,77,65,
  65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,
  41,
64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,76,64,
  64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,
  42,
63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,78,63,63,63,63,63,
  63,63,63,63,63,63,63,63,63,63,63,63,63,43,
12,11,48,17,14,8,9,6,7,13,10,61,68,16,16,16,16,16,16,19,15,18,62,66,69,70,
  65,72,74,16,16,
12,4,11,48,17,40,14,3,8,9,6,7,13,10,5,45,68,109,16,16,16,16,16,16,19,15,103,
  18,45,58,59,47,46,44,43,42,41,67,69,70,65,72,74,21,20,16,103,16,
66,46,67,
68,56,69,
124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
  124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,48,1,161,
22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,59,70,80,81,82,83,84,
  85,86,87,88,89,90,91,92,93,94,95,96,97,
12,4,11,48,17,40,14,3,8,9,6,7,13,10,5,50,68,109,16,16,16,16,16,16,19,15,103,
  18,45,54,59,47,46,44,43,42,41,67,69,70,65,72,74,21,20,16,103,16,
12,4,11,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,48,17,40,14,3,
  8,9,6,7,13,10,5,51,73,109,16,16,16,16,16,16,19,15,103,75,71,18,45,45,52,
  51,53,50,49,47,46,44,43,42,41,67,69,70,51,72,72,74,80,81,82,83,84,85,86,
  87,88,89,90,91,92,93,94,95,96,97,21,20,16,103,16,
74,48,75,
124,124,124,124,124,124,124,124,122,53,1,129,
40,77,79,44,80,78,76,
124,124,124,124,124,124,124,124,124,122,55,1,127,
124,124,124,124,124,124,124,124,122,56,1,126,
12,11,8,9,6,7,13,10,57,81,107,107,107,107,107,107,19,15,107,107,
82,6,58,83,4,84,85,
12,11,8,9,6,7,13,10,86,59,88,2,87,107,107,107,107,107,107,19,15,107,107,
12,11,8,9,6,7,13,10,60,89,107,107,107,107,107,107,19,15,107,107,
90,61,79,
4,3,22,26,26,
4,3,105,63,106,63,
4,3,99,63,101,63,
12,11,8,9,6,7,13,10,65,91,107,107,107,107,107,107,19,15,107,107,
124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,66,1,158,
12,4,11,48,17,40,14,3,8,9,6,7,13,10,5,67,68,109,16,16,16,16,16,16,19,15,103,
  18,45,57,59,47,46,44,43,42,41,67,69,70,65,72,74,21,20,16,103,16,
124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,68,1,131,
12,4,11,48,17,14,3,8,9,6,7,13,10,5,69,68,109,16,16,16,16,16,16,19,15,103,18,
  60,44,63,64,65,67,69,70,65,72,74,21,20,16,103,16,
12,4,11,48,17,40,14,3,8,9,6,7,13,10,5,70,68,109,16,16,16,16,16,16,19,15,103,
  18,45,55,59,47,46,44,43,42,41,67,69,70,65,72,74,21,20,16,103,16,
40,77,44,78,76,
79,72,92,
5,68,93,
124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
  124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,74,1,157,
12,4,11,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,48,17,40,14,3,
  8,9,6,7,13,10,5,75,68,109,16,16,16,16,16,16,19,15,103,18,45,52,53,50,49,
  47,46,44,43,42,41,67,69,70,65,72,74,80,81,82,83,84,85,86,87,88,89,90,91,
  92,93,94,95,96,97,21,20,16,103,16,
12,4,11,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,48,17,40,14,3,
  8,9,6,7,13,10,5,76,68,109,16,16,16,16,16,16,19,15,103,18,47,45,94,51,53,
  50,49,47,46,44,43,42,41,67,69,70,51,72,74,80,81,82,83,84,85,86,87,88,89,
  90,91,92,93,94,95,96,97,21,20,16,103,16,
124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
  124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,77,1,155,
12,4,11,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,48,17,40,14,3,
  8,9,6,7,13,10,5,78,68,109,16,16,16,16,16,16,19,15,103,18,46,45,95,51,53,
  50,49,47,46,44,43,42,41,67,69,70,51,72,74,80,81,82,83,84,85,86,87,88,89,
  90,91,92,93,94,95,96,97,21,20,16,103,16,
124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
  124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,79,1,
  134,
12,4,11,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,48,17,40,96,
  14,3,8,9,6,7,13,10,5,80,68,109,16,16,16,16,16,16,19,15,103,42,71,102,
  101,31,100,99,98,97,45,45,52,51,53,50,49,47,46,44,43,42,41,67,69,70,51,
  72,74,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,21,20,16,
  103,16,
5,81,104,103,
124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
  124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,82,1,128,
12,4,11,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,48,17,40,14,3,
  8,9,6,7,13,10,5,83,68,3,109,16,16,16,16,16,16,19,15,103,27,54,18,45,45,
  52,51,53,50,49,47,46,44,43,42,41,67,69,70,51,72,74,80,81,82,83,84,85,86,
  87,88,89,90,91,92,93,94,95,96,97,21,20,16,103,16,
82,7,83,5,
8,85,
124,124,124,124,124,124,124,124,122,86,1,132,
12,11,8,9,6,7,13,10,87,105,107,107,107,107,107,107,19,15,107,107,
106,88,10,
1,89,
124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
  124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
  124,124,124,124,124,124,124,124,124,124,124,124,122,90,1,146,
5,91,93,
12,11,8,9,6,7,13,10,92,108,108,108,108,108,108,107,108,108,
12,12,12,12,12,12,12,12,5,93,13,108,
74,50,75,
74,49,75,
124,122,96,1,148,
109,111,113,115,117,119,97,120,118,116,114,112,110,
14,98,121,
12,4,11,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,48,17,40,96,
  14,3,8,9,6,7,13,10,5,99,68,61,109,16,16,16,16,16,16,19,15,103,122,54,
  123,101,31,100,99,98,97,45,45,52,51,53,50,49,47,46,44,43,42,41,67,69,70,
  51,72,74,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,21,20,16,
  103,16,
43,43,43,43,43,43,33,33,33,33,100,
124,29,125,
126,128,102,129,127,
12,12,12,12,12,12,12,12,5,103,13,14,
12,11,8,9,6,7,13,10,104,130,107,107,107,107,107,107,19,15,107,107,
5,105,131,103,
124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
  124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,106,1,130,
106,107,132,
12,11,8,9,6,7,13,10,108,71,107,107,107,107,107,107,19,15,107,107,
124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
  124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,109,1,154,
12,4,11,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,48,17,40,14,3,
  8,9,6,7,13,10,5,110,68,109,16,16,16,16,16,16,19,15,103,133,18,45,52,51,
  53,50,49,47,46,44,43,42,41,67,69,70,65,72,74,80,81,82,83,84,85,86,87,88,
  89,90,91,92,93,94,95,96,97,21,20,16,103,16,
124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
  124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,111,1,153,
12,4,11,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,48,17,40,14,3,
  8,9,6,7,13,10,5,112,68,109,16,16,16,16,16,16,19,15,103,134,18,45,52,51,
  53,50,49,47,46,44,43,42,41,67,69,70,65,72,74,80,81,82,83,84,85,86,87,88,
  89,90,91,92,93,94,95,96,97,21,20,16,103,16,
124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
  124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,113,1,152,
12,4,11,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,48,17,40,14,3,
  8,9,6,7,13,10,5,114,68,109,16,16,16,16,16,16,19,15,103,135,18,45,52,51,
  53,50,49,47,46,44,43,42,41,67,69,70,65,72,74,80,81,82,83,84,85,86,87,88,
  89,90,91,92,93,94,95,96,97,21,20,16,103,16,
124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
  124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,115,1,151,
12,4,11,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,48,17,40,14,3,
  8,9,6,7,13,10,5,116,68,109,16,16,16,16,16,16,19,15,103,136,18,45,52,51,
  53,50,49,47,46,44,43,42,41,67,69,70,65,72,74,80,81,82,83,84,85,86,87,88,
  89,90,91,92,93,94,95,96,97,21,20,16,103,16,
124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
  124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,117,1,150,
12,4,11,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,48,17,40,14,3,
  8,9,6,7,13,10,5,118,68,109,16,16,16,16,16,16,19,15,103,137,18,45,52,51,
  53,50,49,47,46,44,43,42,41,67,69,70,65,72,74,80,81,82,83,84,85,86,87,88,
  89,90,91,92,93,94,95,96,97,21,20,16,103,16,
124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
  124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,119,1,149,
12,4,11,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,48,17,40,14,3,
  8,9,6,7,13,10,5,120,68,109,16,16,16,16,16,16,19,15,103,138,18,45,52,51,
  53,50,49,47,46,44,43,42,41,67,69,70,65,72,74,80,81,82,83,84,85,86,87,88,
  89,90,91,92,93,94,95,96,97,21,20,16,103,16,
12,4,11,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,48,17,40,96,
  14,3,8,9,6,7,13,10,5,121,68,109,16,16,16,16,16,16,19,15,103,42,71,139,
  101,31,100,99,98,97,45,45,52,51,53,50,49,47,46,44,43,42,41,67,69,70,51,
  72,74,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,21,20,16,
  103,16,
42,42,42,42,42,42,27,122,
90,126,123,127,34,
124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
  124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,124,1,
  145,
12,4,11,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,48,17,40,96,
  14,3,8,9,6,7,13,10,5,125,68,109,16,16,16,16,16,16,19,15,103,42,71,32,
  100,99,98,97,45,45,52,51,53,50,49,47,46,44,43,42,41,67,69,70,51,72,74,
  80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,21,20,16,103,16,
124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
  124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,126,1,
  144,
12,4,11,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,48,17,40,96,
  14,3,8,9,6,7,13,10,5,127,68,109,16,16,16,16,16,16,19,15,103,42,71,140,
  31,100,99,98,97,45,45,52,51,53,50,49,47,46,44,43,42,41,67,69,70,51,72,
  74,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,21,20,16,103,
  16,
124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
  124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,128,1,143,
12,4,11,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,48,17,40,14,3,
  8,9,6,7,13,10,5,129,68,28,109,16,16,16,16,16,16,19,15,103,27,54,18,45,
  45,52,51,53,50,49,47,46,44,43,42,41,67,69,70,51,72,74,80,81,82,83,84,85,
  86,87,88,89,90,91,92,93,94,95,96,97,21,20,16,103,16,
9,130,
12,11,8,9,6,7,13,10,131,141,107,107,107,107,107,107,19,15,107,107,
12,4,11,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,48,17,40,14,3,
  8,9,6,7,13,10,5,132,68,109,16,16,16,16,16,16,19,15,103,142,71,18,45,45,
  52,51,53,50,49,47,46,44,43,42,41,67,69,70,51,72,74,80,81,82,83,84,85,86,
  87,88,89,90,91,92,93,94,95,96,97,21,20,16,103,16,
40,77,41,144,143,
40,77,40,144,143,
40,77,39,144,143,
40,77,38,144,143,
40,77,37,144,143,
40,77,36,144,143,
90,126,139,127,35,
124,30,125,
68,141,145,
146,142,147,
12,4,11,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,48,17,40,14,3,
  8,9,6,7,13,10,5,143,68,109,16,16,16,16,16,16,19,15,103,18,45,94,51,53,
  50,49,47,46,44,43,42,41,67,69,70,65,72,74,80,81,82,83,84,85,86,87,88,89,
  90,91,92,93,94,95,96,97,21,20,16,103,16,
12,4,11,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,48,17,40,14,3,
  8,9,6,7,13,10,5,144,68,109,16,16,16,16,16,16,19,15,103,18,45,95,51,53,
  50,49,47,46,44,43,42,41,67,69,70,65,72,74,80,81,82,83,84,85,86,87,88,89,
  90,91,92,93,94,95,96,97,21,20,16,103,16,
13,145,149,148,
124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
  124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,146,1,136,
12,4,11,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,48,17,40,14,3,
  8,9,6,7,13,10,5,147,68,109,16,16,16,16,16,16,19,15,103,150,71,18,45,45,
  52,51,53,50,49,47,46,44,43,42,41,67,69,70,51,72,74,80,81,82,83,84,85,86,
  87,88,89,90,91,92,93,94,95,96,97,21,20,16,103,16,
79,148,151,
11,149,
152,150,153,
11,6,7,151,154,16,18,17,
124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
  124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,152,1,160,
12,4,11,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,48,17,40,14,3,
  8,9,6,7,13,10,5,153,68,109,16,16,16,16,16,16,19,15,103,73,71,18,45,45,
  52,51,53,50,49,47,46,44,43,42,41,67,69,70,51,72,74,80,81,82,83,84,85,86,
  87,88,89,90,91,92,93,94,95,96,97,21,20,16,103,16,
146,154,155,
11,155,156,
79,156,157,
11,8,9,157,158,20,21,19,
146,158,159,
10,159,160,
79,160,161,
3,161,162,25,
4,3,15,26,26,

};


static const unsigned short ag_sbt[] = {
     0,  40,  42, 140, 197, 254, 310, 362, 414, 466, 518, 570, 622, 674,
   726, 764, 782, 830, 883, 974, 978, 984,1042,1061,1080,1099,1118,1137,
  1156,1175,1194,1213,1232,1251,1270,1289,1308,1327,1346,1365,1384,1421,
  1471,1521,1560,1591,1639,1642,1645,1682,1720,1768,1859,1862,1874,1881,
  1894,1906,1926,1933,1956,1976,1979,1984,1990,1996,2016,2035,2083,2101,
  2144,2192,2197,2200,2203,2240,2326,2414,2451,2539,2577,2674,2678,2715,
  2806,2810,2812,2824,2844,2847,2849,2902,2905,2923,2935,2938,2941,2946,
  2959,2962,3060,3071,3074,3079,3091,3111,3115,3152,3155,3175,3212,3300,
  3337,3425,3462,3550,3587,3675,3712,3800,3837,3925,4022,4030,4035,4073,
  4168,4206,4302,4339,4430,4432,4452,4542,4547,4552,4557,4562,4567,4572,
  4577,4580,4583,4586,4673,4760,4764,4801,4891,4894,4896,4899,4907,4944,
  5034,5037,5040,5043,5051,5054,5057,5060,5064,5069
};


static const unsigned short ag_sbe[] = {
    37,  41,  78, 194, 251, 307, 359, 411, 463, 515, 567, 619, 671, 723,
   761, 772, 829, 880, 916, 975, 980,1036,1058,1077,1096,1115,1134,1153,
  1172,1191,1210,1229,1248,1267,1286,1305,1324,1343,1362,1381,1418,1470,
  1520,1559,1571,1606,1640,1643,1679,1700,1735,1801,1860,1871,1877,1891,
  1903,1914,1928,1942,1964,1977,1981,1986,1992,2004,2032,2050,2098,2115,
  2159,2194,2198,2201,2237,2273,2359,2448,2484,2574,2611,2675,2712,2748,
  2807,2811,2821,2832,2845,2848,2899,2903,2913,2932,2936,2939,2943,2952,
  2960,2996,3070,3072,3076,3088,3099,3112,3149,3153,3163,3209,3245,3334,
  3370,3459,3495,3584,3620,3709,3745,3834,3870,3959,4029,4032,4070,4107,
  4203,4240,4336,4372,4431,4440,4485,4544,4549,4554,4559,4564,4569,4574,
  4578,4581,4584,4619,4706,4761,4798,4834,4892,4895,4897,4902,4941,4977,
  5035,5038,5041,5046,5052,5055,5058,5061,5066,5069
};


static const unsigned char ag_fl[] = {
  2,3,2,2,1,2,0,1,3,5,2,7,0,1,2,11,1,1,1,1,1,1,2,2,1,1,2,1,5,1,3,1,3,1,3,
  4,3,3,3,3,3,3,1,1,1,1,3,3,1,3,3,1,3,1,2,3,1,3,2,1,3,1,2,1,1,1,2,1,1,1,
  1,5,1,10,1,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,2,3,2,1,2,
  1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,0,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
  2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
  2,2,2,2,2,2,2,2
};

static const unsigned char ag_ptt[] = {
    0,  2,  2, 10, 11, 11, 12, 12,  2,  2,  7,  7, 20, 20, 14, 18, 23, 23,
   23, 26, 26, 26,  4, 34, 34, 28, 28,  8,  8, 40, 40, 42, 42, 44, 44, 44,
   46, 46, 46, 46, 46, 46, 50, 50, 38, 38, 38, 38, 39, 39, 39, 60, 60, 61,
   61, 61, 63, 63, 63, 66, 66, 65, 65, 65, 69, 69, 69, 71, 72, 72, 72, 72,
   70, 57, 76, 78, 67, 67, 67, 74, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
   64, 64, 64, 64, 64, 64, 64, 64,101,101, 73, 73, 73, 99, 99,102,102, 35,
   77,100, 25, 30, 37, 37,103,103,103,103,103,103,103,103,107,107,108,108,
    3,  6,  9, 13, 15, 17, 16, 19, 22, 27, 24, 21, 29, 31, 32, 33, 36, 41,
   43, 45, 48, 47, 49, 51, 52, 53, 54, 55, 56, 58, 59, 62, 68, 75, 79, 80,
   81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98,
  104,105,106
};


static void ag_ra(void)
{
  switch(ag_rpx[(PCB).ag_ap]) {
    case 1: ag_rp_1(V(1,(pair<int> *))); break;
    case 2: ag_rp_2(V(0,(number *))); break;
    case 3: ag_rp_3(V(1,(pair<int> *)), V(3,(pair<int> *))); break;
    case 4: ag_rp_4(V(0,(pair<int> *))); break;
    case 5: ag_rp_5(V(1,(pair<int> *)), V(3,(pair<int> *)), V(5,(format_code *))); break;
    case 6: V(0,(format_code *)) = ag_rp_6(V(2,(int *)), V(6,(int *)), V(10,(int *))); break;
    case 7: V(0,(int *)) = ag_rp_7(); break;
    case 8: V(0,(int *)) = ag_rp_8(); break;
    case 9: V(0,(int *)) = ag_rp_9(); break;
    case 10: V(0,(int *)) = ag_rp_10(); break;
    case 11: V(0,(int *)) = ag_rp_11(); break;
    case 12: V(0,(int *)) = ag_rp_12(); break;
    case 13: V(0,(pair<int> *)) = ag_rp_13(V(0,(int *)), V(1,(int *))); break;
    case 14: V(0,(int *)) = ag_rp_14(V(0,(int *)), V(1,(int *))); break;
    case 15: V(0,(int *)) = ag_rp_15(V(0,(int *))); break;
    case 16: V(0,(int *)) = ag_rp_16(V(0,(int *))); break;
    case 17: V(0,(int *)) = ag_rp_17(V(0,(int *)), V(1,(int *))); break;
    case 18: V(0,(number *)) = ag_rp_18(V(0,(number *)), V(2,(number *)), V(4,(number *))); break;
    case 19: V(0,(number *)) = ag_rp_19(V(0,(number *)), V(2,(number *))); break;
    case 20: V(0,(number *)) = ag_rp_20(V(0,(number *)), V(2,(number *))); break;
    case 21: V(0,(number *)) = ag_rp_21(V(1,(number *))); break;
    case 22: V(0,(number *)) = ag_rp_22(V(2,(number *))); break;
    case 23: V(0,(number *)) = ag_rp_23(V(0,(number *)), V(2,(number *))); break;
    case 24: V(0,(number *)) = ag_rp_24(V(0,(number *)), V(2,(number *))); break;
    case 25: V(0,(number *)) = ag_rp_25(V(0,(number *)), V(2,(number *))); break;
    case 26: V(0,(number *)) = ag_rp_26(V(0,(number *)), V(2,(number *))); break;
    case 27: V(0,(number *)) = ag_rp_27(V(0,(number *)), V(2,(number *))); break;
    case 28: V(0,(number *)) = ag_rp_28(V(0,(number *)), V(2,(number *))); break;
    case 29: V(0,(number *)) = ag_rp_29(V(0,(number *)), V(2,(number *))); break;
    case 30: V(0,(number *)) = ag_rp_30(V(0,(number *)), V(2,(number *))); break;
    case 31: V(0,(number *)) = ag_rp_31(V(0,(number *)), V(2,(number *))); break;
    case 32: V(0,(number *)) = ag_rp_32(V(0,(number *)), V(2,(number *))); break;
    case 33: V(0,(number *)) = ag_rp_33(V(0,(number *)), V(2,(number *))); break;
    case 34: V(0,(number *)) = ag_rp_34(V(0,(function_name *)), V(1,(number *))); break;
    case 35: V(0,(number *)) = ag_rp_35(V(0,(number *)), V(1,(function_name *)), V(2,(number *))); break;
    case 36: V(0,(number *)) = ag_rp_36(V(0,(number *)), V(2,(number *))); break;
    case 37: V(0,(number *)) = ag_rp_37(V(1,(number *))); break;
    case 38: V(0,(number *)) = ag_rp_38(V(0,(number *)), V(2,(number *))); break;
    case 39: V(0,(number *)) = ag_rp_39(V(0,(number *)), V(1,(number *))); break;
    case 40: V(0,(number *)) = ag_rp_40(V(0,(number *)), V(1,(number *))); break;
    case 41: V(0,(number *)) = ag_rp_41(V(0,(pair<int> *))); break;
    case 42: V(0,(number *)) = ag_rp_42(); break;
    case 43: V(0,(number *)) = ag_rp_43(V(1,(pair<int> *)), V(4,(pair<int> *))); break;
    case 44: V(0,(number *)) = ag_rp_44(V(0,(int *))); break;
    case 45: V(0,(number *)) = ag_rp_45(V(0,(char * *)), V(1,(char * *)), V(3,(int *)), V(5,(number *)), V(7,(number *)), V(9,(number *))); break;
    case 46: V(0,(char * *)) = ag_rp_46(); break;
    case 47: V(0,(char * *)) = ag_rp_47(); break;
    case 48: V(0,(number *)) = ag_rp_48(V(1,(number *))); break;
    case 49: V(0,(function_name *)) = ag_rp_49(); break;
    case 50: V(0,(function_name *)) = ag_rp_50(); break;
    case 51: V(0,(function_name *)) = ag_rp_51(); break;
    case 52: V(0,(function_name *)) = ag_rp_52(); break;
    case 53: V(0,(function_name *)) = ag_rp_53(); break;
    case 54: V(0,(function_name *)) = ag_rp_54(); break;
    case 55: V(0,(function_name *)) = ag_rp_55(); break;
    case 56: V(0,(function_name *)) = ag_rp_56(); break;
    case 57: V(0,(function_name *)) = ag_rp_57(); break;
    case 58: V(0,(function_name *)) = ag_rp_58(); break;
    case 59: V(0,(function_name *)) = ag_rp_59(); break;
    case 60: V(0,(function_name *)) = ag_rp_60(); break;
    case 61: V(0,(function_name *)) = ag_rp_61(); break;
    case 62: V(0,(function_name *)) = ag_rp_62(); break;
    case 63: V(0,(function_name *)) = ag_rp_63(); break;
    case 64: V(0,(function_name *)) = ag_rp_64(); break;
    case 65: V(0,(function_name *)) = ag_rp_65(); break;
    case 66: V(0,(function_name *)) = ag_rp_66(); break;
    case 67: V(0,(number *)) = ag_rp_67(V(0,(double *))); break;
    case 68: V(0,(number *)) = ag_rp_68(V(0,(double *)), V(2,(double *))); break;
    case 69: V(0,(number *)) = ag_rp_69(V(1,(double *))); break;
    case 70: V(0,(double *)) = ag_rp_70(V(0,(int *))); break;
    case 71: V(0,(double *)) = ag_rp_71(V(0,(double *)), V(1,(int *))); break;
    case 72: V(0,(double *)) = ag_rp_72(V(0,(int *))); break;
    case 73: V(0,(double *)) = ag_rp_73(V(0,(int *)), V(1,(double *))); break;
  }
  (PCB).la_ptr = (PCB).pointer;
}

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;
  ss-fp_nrc[(PCB).ag_ap]++;
  do {
    ss-fp_nrc[(PCB).ag_ap]++;
    (PCB).pointer = (PCB).la_ptr;
    (PCB).token_number = (ss-fp_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 == (ss-fp_token_type) ag_t);
  (PCB).la_ptr =  (PCB).pointer;
  return 1;
}

static int ag_action_11_proc(void) {
  int ag_t = (PCB).token_number;

  ss-fp_nrc[(PCB).ag_ap]++;
  do {
    (*(int *) &(PCB).vs[(PCB).ssx]) = *(PCB).pointer;
    (PCB).ssx--;
    (PCB).pointer = (PCB).la_ptr;
    ag_ra();
    if ((PCB).exit_flag != AG_RUNNING_CODE) return 0;
    (PCB).ssx++;
    (PCB).token_number = (ss-fp_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 == (ss-fp_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];
  ss-fp_nrc[(PCB).ag_ap]++;
  (PCB).reduction_token = (ss-fp_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];
  ss-fp_nrc[(PCB).ag_ap]++;
  (PCB).reduction_token = (ss-fp_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];
  ss-fp_nrc[(PCB).ag_ap]++;
  (PCB).reduction_token = (ss-fp_token_type) ag_ptt[(PCB).ag_ap];
  return 1;
}

static int ag_action_2_proc(void) {
  if ((PCB).ssx >= 128) {
    ag_trace_error();
    (PCB).exit_flag = AG_STACK_ERROR_CODE;
    PARSER_STACK_OVERFLOW;
  }
  (*(int *) &(PCB).vs[(PCB).ssx]) = *(PCB).pointer;
  (PCB).ss[(PCB).ssx] = (PCB).sn;
  (PCB).ssx++;
  (PCB).sn = (PCB).ag_ap;
  (PCB).pointer = (PCB).la_ptr;
  return 0;
}

static int ag_action_9_proc(void) {
  if ((PCB).ssx >= 128) {
    ag_trace_error();
    (PCB).exit_flag = AG_STACK_ERROR_CODE;
    PARSER_STACK_OVERFLOW;
  }
  (PCB).vs[(PCB).ssx] = ag_null_value;
  (PCB).ss[(PCB).ssx] = (PCB).sn;
  (PCB).ssx++;
  (PCB).sn = (PCB).ag_ap;
  (PCB).la_ptr =  (PCB).pointer;
  return (PCB).exit_flag == AG_RUNNING_CODE;
}

static int ag_action_2_r_proc(void) {
  (PCB).ssx++;
  (PCB).sn = (PCB).ag_ap;
  return 0;
}

static int ag_action_7_proc(void) {
  --(PCB).ssx;
  (PCB).la_ptr =  (PCB).pointer;
  ss-fp_nrc[0]++;
  (PCB).exit_flag = AG_SUCCESS_CODE;
  return 0;
}

static int ag_action_1_proc(void) {
  (PCB).pointer = (PCB).la_ptr;
  ss-fp_nrc[0]++;
  (PCB).exit_flag = AG_SUCCESS_CODE;
  return 0;
}

static int ag_action_1_r_proc(void) {
  ss-fp_nrc[0]++;
  (PCB).exit_flag = AG_SUCCESS_CODE;
  return 0;
}

static int ag_action_1_s_proc(void) {
  ss-fp_nrc[0]++;
  (PCB).exit_flag = AG_SUCCESS_CODE;
  return 0;
}

static int ag_action_4_proc(void) {
  int ag_sd = ag_fl[(PCB).ag_ap] - 1;
  ss-fp_nrc[(PCB).ag_ap]++;
  (PCB).reduction_token = (ss-fp_token_type) ag_ptt[(PCB).ag_ap];
  (*(int *) &(PCB).vs[(PCB).ssx]) = *(PCB).pointer;
  if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd];
  else (PCB).ss[(PCB).ssx] = (PCB).sn;
  (PCB).pointer = (PCB).la_ptr;
  while ((PCB).exit_flag == AG_RUNNING_CODE) {
    unsigned ag_t1 = ag_sbe[(PCB).sn] + 1;
    unsigned ag_t2 = ag_sbt[(PCB).sn+1] - 1;
    do {
      unsigned ag_tx = (ag_t1 + ag_t2)/2;
      if (ag_tstt[ag_tx] < (unsigned char)(PCB).reduction_token) ag_t1 = ag_tx + 1;
      else ag_t2 = ag_tx;
    } while (ag_t1 < ag_t2);
    (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;
  (*(int *) &(PCB).vs[(PCB).ssx]) = *(PCB).pointer;
  if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd];
  else (PCB).ss[(PCB).ssx] = (PCB).sn;
  (PCB).pointer = (PCB).la_ptr;
  ss-fp_nrc[(PCB).ag_ap]++;
  (PCB).reduction_token = (ss-fp_token_type) ag_ptt[(PCB).ag_ap];
  ag_ra();
  while ((PCB).exit_flag == AG_RUNNING_CODE) {
    unsigned ag_t1 = ag_sbe[(PCB).sn] + 1;
    unsigned ag_t2 = ag_sbt[(PCB).sn+1] - 1;
    do {
      unsigned ag_tx = (ag_t1 + ag_t2)/2;
      if (ag_tstt[ag_tx] < (unsigned char)(PCB).reduction_token) ag_t1 = ag_tx + 1;
      else ag_t2 = ag_tx;
    } while (ag_t1 < ag_t2);
    (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_trace_error();
  (PCB).la_ptr =  (PCB).pointer;
  (PCB).exit_flag = AG_SYNTAX_ERROR_CODE;
  SYNTAX_ERROR;
  (PCB).la_ptr = ++(PCB).pointer;
  return (PCB).exit_flag == AG_RUNNING_CODE;
}

static int ag_action_5_proc(void) {
  int ag_sd = ag_fl[(PCB).ag_ap];
  if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd];
  else {
    (PCB).ss[(PCB).ssx] = (PCB).sn;
  }
  (PCB).la_ptr =  (PCB).pointer;
  ss-fp_nrc[(PCB).ag_ap]++;
  (PCB).reduction_token = (ss-fp_token_type) ag_ptt[(PCB).ag_ap];
  ag_ra();
  while ((PCB).exit_flag == AG_RUNNING_CODE) {
    unsigned ag_t1 = ag_sbe[(PCB).sn] + 1;
    unsigned ag_t2 = ag_sbt[(PCB).sn+1] - 1;
    do {
      unsigned ag_tx = (ag_t1 + ag_t2)/2;
      if (ag_tstt[ag_tx] < (unsigned char)(PCB).reduction_token) ag_t1 = ag_tx + 1;
      else ag_t2 = ag_tx;
    } while (ag_t1 < ag_t2);
    (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];
  ss-fp_nrc[(PCB).ag_ap]++;
  (PCB).reduction_token = (ss-fp_token_type) ag_ptt[(PCB).ag_ap];
  if (ag_sd) {
    (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd];
  }
  else {
    if ((PCB).ssx >= 128) {
      ag_trace_error();
      (PCB).exit_flag = AG_STACK_ERROR_CODE;
      PARSER_STACK_OVERFLOW;
    }
    (PCB).vs[(PCB).ssx] = ag_null_value;
    (PCB).ss[(PCB).ssx] = (PCB).sn;
  }
  (PCB).la_ptr =  (PCB).pointer;
  while ((PCB).exit_flag == AG_RUNNING_CODE) {
    unsigned ag_t1 = ag_sbe[(PCB).sn] + 1;
    unsigned ag_t2 = ag_sbt[(PCB).sn+1] - 1;
    do {
      unsigned ag_tx = (ag_t1 + ag_t2)/2;
      if (ag_tstt[ag_tx] < (unsigned char)(PCB).reduction_token) ag_t1 = ag_tx + 1;
      else ag_t2 = ag_tx;
    } while (ag_t1 < ag_t2);
    (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_ss-fp(void) {
  (PCB).la_ptr = (PCB).pointer;
  (PCB).error_message = "Syntax Error";
  (PCB).ss[0] = (PCB).sn = (PCB).ssx = 0;
  (PCB).exit_flag = AG_RUNNING_CODE;
}

void ss-fp(void) {
  init_ss-fp();
  (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 = (ss-fp_token_type) AG_TCV(INPUT_CODE(*(PCB).la_ptr));
      (PCB).la_ptr++;
      if (ag_key_index[(PCB).sn]) {
        unsigned ag_k = ag_key_index[(PCB).sn];
        int ag_ch = CONVERT_CASE(INPUT_CODE(*(PCB).pointer));
        if (ag_ch <= 255) {
          while (ag_key_ch[ag_k] < ag_ch) ag_k++;
          if (ag_key_ch[ag_k] == ag_ch) ag_get_key_word(ag_k);
        }
      }
      do {
        unsigned ag_tx = (ag_t1 + ag_t2)/2;
        if (ag_tstt[ag_tx] > (unsigned char)(PCB).token_number)
          ag_t1 = ag_tx + 1;
        else ag_t2 = ag_tx;
      } while (ag_t1 < ag_t2);
      if (ag_tstt[ag_t1] != (unsigned char)(PCB).token_number)
        ag_t1 = ag_sbe[(PCB).sn];
    }
    (PCB).ag_ap = ag_pstt[ag_t1];
    (ag_gt_procs_scan[ag_astt[ag_t1]])();
  }
}