#ifndef lint
static const char yysccsid[] = "@(#)yaccpar	1.9 (Berkeley) 02/21/93";
#endif

#include <stdlib.h>

#define YYBYACC 1
#define YYMAJOR 1
#define YYMINOR 9
#define YYPATCH 20050813

#define YYEMPTY (-1)
#define yyclearin    (yychar = YYEMPTY)
#define yyerrok      (yyerrflag = 0)
#define YYRECOVERING (yyerrflag != 0)

extern int yyparse(void);

static int yygrowstack(void);
#define YYPREFIX "yy"
#line 2 "gram.y"
/* $Header$ */

/*
 * Copyright © 1988-2004 Keith Packard and Bart Massey.
 * All Rights Reserved.  See the file COPYING in this directory
 * for licensing information.
 */

#include	"nickle.h"
#include	<stdio.h>

/*
 * This grammar generates 1 shift/reduce conflict and 4 reduce/reduce:
 * 
 * 2 reduce/reduce conflicts on:
 *
 *	    *int . func 
 *	    **int . func
 *
 *	Is the '*' a dereference operator or a pointer type modifier?
 *	The grammar is ordered to make this a type modifier since
 *	the other way is less common.  Use parens when you want this.
 *
 * 2 reduce/reduce conflicts on:
 *
 *	   &int . func
 *	   &&int . func
 *
 *	Is the '&' a reference operator or a reference type modifier?
 *	The grammar is ordered to make this a type modifier since
 *	the other way is less common.  Use parens when you want this.
 *
 *  shift/reduce conflict in ASSIGN in initializers
 *
 *	That's because struct initializers look like assignment
 *	expressions while array initializers permit any expression.
 *	Shift yields struct initialization, so the effect is
 *	to make assignment expressions invalid in array initializers.
 *	(Of course, you can always enclose an assignment in parens.)
 *      (I can't see any obvious way to use operator precedence to
 *      get rid of this: seems like you'd need to duplicate simpleexpr
 *      with different precedence. --BCM)
 *
 */
int ignorenl;
int notCommand;
int seeComment;
NamespacePtr	LexNamespace;
int funcDepth;

void ParseError (char *fmt, ...);
void yyerror (char *msg);

typedef enum _CanonTypeResult {
    CanonTypeUndefined,
    CanonTypeForward,
    CanonTypeDefined,
} CanonTypeResult;
    
static Expr *
ParseCanonFor (Expr *expr);

static CanonTypeResult
ParseCanonType (TypePtr type, Bool forwardAllowed);

static SymbolPtr
ParseNewSymbol (Publish publish, Class class, Type *type, Atom name);

#line 72 "gram.y"
typedef union {
    int		    ints;
    Value	    value;
    Class	    class;
    ArgType	    *argType;
    Type	    *type;
    Publish	    publish;
    ExprPtr	    expr;
    Atom	    atom;
    DeclListPtr	    declList;
    MemListPtr	    memList;
    Fulltype	    fulltype;
    ArgDecl	    argDecl;
    SymbolPtr	    symbol;
    NamespacePtr    namespace;
    CodePtr	    code;
    Bool	    bool;
    AtomListPtr	    atomList;
    FuncDecl	    funcDecl;
} YYSTYPE;
#line 112 "gram.c"
#define VAR 257
#define EXPR 258
#define ARRAY 259
#define STRUCT 260
#define UNION 261
#define ENUM 262
#define COMP 263
#define HASH 264
#define SEMI 265
#define MOD 266
#define OC 267
#define CC 268
#define DOLLAR 269
#define DOTDOTDOT 270
#define ENDFILE 271
#define GLOBAL 272
#define AUTO 273
#define STATIC 274
#define CONST 275
#define POLY 276
#define INTEGER 277
#define NATURAL 278
#define RATIONAL 279
#define REAL 280
#define STRING 281
#define FOREIGN 282
#define FILET 283
#define MUTEX 284
#define SEMAPHORE 285
#define CONTINUATION 286
#define THREAD 287
#define VOID 288
#define BOOL 289
#define FUNCTION 290
#define FUNC 291
#define EXCEPTION 292
#define RAISE 293
#define TYPEDEF 294
#define IMPORT 295
#define NEW 296
#define ANONINIT 297
#define NAMESPACE 298
#define PUBLIC 299
#define PROTECTED 300
#define EXTEND 301
#define WHILE 302
#define DO 303
#define FOR 304
#define SWITCH 305
#define BREAK 306
#define CONTINUE 307
#define RETURNTOK 308
#define FORK 309
#define CASE 310
#define DEFAULT 311
#define TWIXT 312
#define NAME 313
#define TYPENAME 314
#define NAMESPACENAME 315
#define COMMAND 316
#define NAMECOMMAND 317
#define TEN_NUM 318
#define OCTAL0_NUM 319
#define OCTAL_NUM 320
#define BINARY_NUM 321
#define HEX_NUM 322
#define TEN_FLOAT 323
#define OCTAL0_FLOAT 324
#define OCTAL_FLOAT 325
#define BINARY_FLOAT 326
#define HEX_FLOAT 327
#define CHAR_CONST 328
#define STRING_CONST 329
#define POLY_CONST 330
#define THREAD_CONST 331
#define COMMENT_CONST 332
#define VOIDVAL 333
#define BOOLVAL 334
#define DARROW 335
#define POUND 336
#define COMMA 337
#define ASSIGN 338
#define ASSIGNPLUS 339
#define ASSIGNMINUS 340
#define ASSIGNTIMES 341
#define ASSIGNDIVIDE 342
#define ASSIGNDIV 343
#define ASSIGNMOD 344
#define ASSIGNPOW 345
#define ASSIGNSHIFTL 346
#define ASSIGNSHIFTR 347
#define ASSIGNLXOR 348
#define ASSIGNLAND 349
#define ASSIGNLOR 350
#define ASSIGNOR 351
#define ASSIGNAND 352
#define QUEST 353
#define COLON 354
#define OR 355
#define AND 356
#define LOR 357
#define LXOR 358
#define LAND 359
#define EQ 360
#define NE 361
#define LT 362
#define GT 363
#define LE 364
#define GE 365
#define SHIFTL 366
#define SHIFTR 367
#define PLUS 368
#define MINUS 369
#define TIMES 370
#define DIVIDE 371
#define DIV 372
#define POW 373
#define STARSTAR 374
#define POW2 375
#define POW3 376
#define UNIONCAST 377
#define UMINUS 378
#define BANG 379
#define FACT 380
#define LNOT 381
#define INC 382
#define DEC 383
#define STAR 384
#define AMPER 385
#define THREADID 386
#define OS 387
#define CS 388
#define DOT 389
#define ARROW 390
#define STAROS 391
#define CALL 392
#define OP 393
#define CP 394
#define POINTER 395
#define COLONCOLON 396
#define IF 397
#define TRY 398
#define NONL 399
#define ELSE 400
#define CATCH 401
#define NL 402
#define YYERRCODE 256
short yylhs[] = {                                        -1,
    0,    0,   96,   96,   99,   99,   99,  100,  101,   98,
  102,  103,  103,  104,  104,  105,  105,   97,   97,   97,
   97,   97,   97,   97,    3,    3,    5,    5,    4,    7,
    7,    7,    6,    6,   27,   27,    1,    1,    2,    2,
   28,   28,   60,   60,  106,  107,    8,  108,  109,   14,
   14,   17,   17,   15,   15,   16,   16,   16,   16,   16,
   16,   16,   16,   16,   16,   16,   16,   16,   16,   16,
   16,  111,   16,   16,   16,   16,   70,   70,   19,   19,
   18,   12,   12,   13,    9,    9,  112,   10,   20,   20,
  110,  110,  113,   81,   82,   82,   21,   22,   22,   23,
   23,   24,   25,   25,   26,   26,   37,   37,   33,   33,
   35,   35,   40,   40,   34,   34,   36,   43,   38,   39,
   39,   39,   41,   41,   41,   42,   42,   42,   46,   46,
   46,   46,   46,   46,   45,   45,   45,   45,   45,   47,
   47,   47,   47,   47,   47,   44,   44,   51,   51,   51,
   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,
   48,   48,   49,   49,   50,   50,   52,   52,   53,   53,
   54,   54,   56,   56,   55,   55,   55,   55,   57,   57,
   58,   58,   59,   59,   61,   61,   62,   62,   63,   63,
   66,   64,   64,   65,   65,   67,   67,   68,   68,   69,
   69,   71,   71,   77,   77,   72,   72,   73,   73,   75,
   75,   76,   76,   11,  114,   11,   74,   74,   74,   74,
   74,   74,   74,   74,   74,   74,   74,   74,   74,   74,
   74,   74,   74,   74,   74,   74,   74,   74,   74,   74,
   74,   74,   74,   74,   74,   74,   74,   74,   74,   74,
   74,   74,   74,   74,   74,   74,   74,   74,   74,   74,
   74,   74,   74,   74,   74,   74,   74,   74,   74,   74,
   74,   74,   74,   74,   74,   74,   74,   74,   74,   74,
   74,   74,   74,   74,   74,   74,   79,   79,   78,   78,
   78,   78,   78,   78,   78,   78,   78,   78,   78,   78,
   78,   78,   78,   80,   80,   80,   80,   80,   83,   83,
   83,   84,   84,   29,   29,   30,   30,   31,   32,   85,
   85,   86,   86,   87,   87,   87,   88,   89,   89,   90,
   90,   91,   91,   92,   93,   93,   94,   94,   95,   95,
   95,   95,
};
short yylen[] = {                                         2,
    2,    0,    1,    3,    1,    1,    1,    0,    0,    0,
    0,    1,    0,    1,    0,    1,    0,    4,    6,    4,
    6,    6,    1,    1,    1,    0,    3,    1,    2,    1,
    1,    1,    3,    0,    2,    1,    2,    1,    1,    3,
    3,    2,    1,    1,    0,    0,    3,    2,    2,    2,
    0,    7,    9,    1,    1,    3,    9,   10,    9,    9,
   10,    2,    2,    3,    2,    1,    4,   10,    6,    6,
    7,    0,    9,    6,    2,   11,    3,    1,    1,    3,
    4,    2,    0,    7,    1,    1,    0,    2,    1,    4,
    1,    1,    0,    2,    1,    0,    3,    2,    0,    4,
    3,    3,    2,    0,    7,    3,    1,    0,    3,    1,
    3,    1,    1,    1,    4,    2,    1,    1,    4,    3,
    4,    4,    2,    2,    0,    4,    3,    2,    2,    4,
    4,    4,    4,    0,    2,    2,    2,    2,    2,    1,
    4,    4,    4,    3,    1,    1,    0,    1,    1,    1,
    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
    1,    0,    3,    1,    3,    1,    3,    1,    4,    0,
    4,    0,    1,    0,    1,    1,    1,    1,    1,    0,
    1,    1,    1,    1,    3,    2,    3,    2,    2,    1,
    3,    2,    1,    3,    2,    2,    1,    1,    0,    1,
    0,    1,    2,    1,    3,    1,    0,    3,    1,    1,
    0,    3,    2,    3,    0,    2,    3,    7,    2,    2,
    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
    2,    2,    3,    3,    3,    3,    3,    3,    3,    2,
    2,    3,    3,    5,    3,    3,    3,    3,    3,    3,
    3,    3,    3,    3,    3,    1,    1,    1,    1,    1,
    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
    2,    6,    8,    8,    8,    3,    6,    2,    1,    3,
    3,    4,    4,    4,    3,    3,    1,    0,    1,    1,
    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
    1,    1,    1,    1,    1,    1,    1,    1,    1,    2,
    0,    5,    9,    2,    1,    3,    1,    1,    0,    3,
    1,    1,    1,    1,    2,    0,    4,    3,    1,    3,
    2,    1,    1,    4,    3,    1,    3,    3,    1,    1,
    1,    2,
};
short yydefred[] = {                                      2,
    0,   10,   24,   23,    1,    3,    0,    0,    0,    0,
    0,   66,    0,   45,    0,  175,  176,  177,  178,  148,
  149,  150,  151,  152,  160,  153,  154,  155,  156,  157,
  158,  159,    8,    0,  181,  182,  184,    8,    8,    8,
    8,    0,    0,    0,    0,    8,   43,   36,    0,    0,
    0,  257,  259,  258,  260,  261,  262,  264,  263,  265,
  266,  267,  268,  269,  270,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,  279,    0,    8,    8,  256,
   55,   10,   54,   46,    9,  145,    0,   93,   45,    0,
    0,    0,    0,  140,    0,    0,    0,    0,   38,    0,
    0,    0,    0,    0,    6,    7,    5,    4,    0,    0,
    0,  304,  306,  305,  307,  308,  219,   48,  278,  287,
    0,    0,    0,   45,   45,   45,   45,   62,   63,    0,
    0,    0,    0,    0,  200,    0,    0,   45,   42,   10,
  206,    0,   10,    0,   25,    0,  138,    0,  139,    0,
    0,  136,    0,  137,    0,    0,    0,    0,    0,  271,
    0,    0,    0,    0,   45,    0,    0,    9,   75,   35,
    0,   37,    0,    0,    8,    0,    0,  203,    0,   45,
    0,   12,  128,    0,    0,  135,    0,    0,    0,    0,
    0,    0,    0,    0,    0,  146,    8,    8,    8,  173,
    0,    8,   65,    0,    0,    0,  303,  289,  290,  291,
  292,  293,  294,  295,  296,  297,  298,  299,  300,  301,
  302,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,  240,  241,  227,  229,  231,    0,    0,    0,    0,
    0,    0,    0,   46,    0,    0,    8,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,  117,
   64,    0,    0,    0,    0,   34,   30,   32,   31,    0,
    0,    0,    0,    0,    0,  281,    0,    0,  280,    0,
    0,   79,   83,   20,   56,   41,   86,   46,   85,    0,
   95,   94,    0,    0,    0,  120,    0,    0,    0,  276,
  166,    0,    0,    0,    0,    0,  186,    0,    0,    0,
  129,  138,  139,  136,  137,    0,    0,  127,    0,    0,
    0,    0,    0,   10,   18,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,  285,  286,    0,
    0,    0,  210,    0,    0,    0,   47,   50,   45,    0,
  141,    0,  142,    0,  143,  122,    0,    0,    0,    0,
    0,    0,   14,    0,  208,    0,   27,   33,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,   67,   89,
   88,    0,  119,    0,    0,  192,    0,  121,    0,    0,
  339,  341,  340,  124,  118,    0,    8,   93,    0,    0,
    0,    0,    0,  189,  185,  198,    0,  188,  144,   45,
  114,    0,    0,    0,    0,    0,    0,  126,   44,   72,
    0,    0,  283,  282,    0,  213,  284,   49,    0,    0,
    0,  109,    0,    0,    0,    0,    0,    0,    0,   21,
   22,   45,  163,   45,   45,  167,    0,   46,    0,   80,
    0,   82,    0,  196,    0,  195,  342,    0,    0,    0,
    0,    0,  321,    0,  329,    0,  336,  323,  115,    0,
    0,  133,  130,  165,  131,  132,  187,    0,    9,    0,
  113,    0,    0,    9,    0,   19,    0,  212,    0,  169,
  171,   69,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,  272,    0,   45,    0,  194,    0,    0,  331,
  333,    0,    0,    0,    0,    0,    0,    0,    0,  191,
   46,    0,    0,   46,   70,  111,    9,   40,   74,    0,
    0,   46,    0,   77,   46,   46,    0,    0,    0,   46,
  324,    0,   46,    0,   46,  309,    0,    0,   90,    0,
  338,  318,  319,    0,  330,    0,  320,    0,    0,  328,
  327,    0,  335,  334,  218,    0,  216,   93,   71,    0,
    0,    9,   46,    9,    9,    0,    0,   46,    0,    0,
  325,  275,  273,  310,  274,    0,   93,    0,    0,  312,
    0,    0,    9,   46,    0,   57,    9,   59,   60,    0,
    0,   97,   98,   46,   53,    0,    0,  316,    9,   73,
    9,   45,    0,   46,    0,   58,    0,  101,    9,   46,
    0,  315,   46,   68,   61,    0,    0,  102,  103,  100,
   76,   84,  314,    0,    0,  106,  313,  107,    0,    0,
   46,  105,
};
short yydgoto[] = {                                       1,
   80,  437,  143,  144,  145,  146,  280,   81,  298,  299,
  541,  398,  472,  254,  255,   83,   84,   85,  293,  401,
  556,  598,  599,  614,  634,  635,   86,   87,  643,  573,
  574,  608,  263,  178,  433,  179,  659,   88,   89,  434,
  308,   90,  416,   91,  136,  186,   93,  313,  283,  315,
   94,  284,  259,  261,   95,  201,   96,   97,   98,   99,
  187,  319,  320,  303,  406,  418,  407,  428,  456,  457,
  256,  140,  141,  101,  362,  363,  102,  252,  119,  117,
  173,  302,  565,  411,  482,  483,  560,  412,  484,  485,
  530,  413,  486,  487,  488,    5,    6,    8,  108,  304,
  169,    7,  183,  384,  535,  118,  366,  103,  367,  104,
  505,  300,  174,  543,
};
short yysindex[] = {                                      0,
 -245,    0,    0,    0,    0,    0, 1261, -255, -210, -182,
 -154,    0,  -99,    0,  -99,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0, -108,    0,    0,    0,    0,    0,    0,
    0, -121,  -74, 5325, 6495,    0,    0,    0, -360, 6495,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0, 6495, 6495, 6495, 6495, 6495,
 6495, 6495, 6495, 6495,  -92,    0, 5195,    0,    0,    0,
    0,    0,    0,    0,    0,    0,  122,    0,    0, -204,
  -11, -199, -112,    0, 6650,   43,   42,   11,    0, -236,
 6919,    3, 1395,   50,    0,    0,    0,    0, 6650, 6650,
   21,    0,    0,    0,    0,    0,    0,    0,    0,    0,
   46,    1,   65,    0,    0,    0,    0,    0,    0, -182,
 -154,   69,   42,  102,    0,    7, 2167,    0,    0,    0,
    0, 1925,    0,   70,    0,  143,    0,  165,    0,  165,
  165,    0,  165,    0,  165,  165,  165,  165,  165,    0,
 5845,   18,  -81,   32,    0, 1529,   28,    0,    0,    0,
   45,    0,  173,  113,    0,  133,   55,    0,  114,    0,
  140,    0,    0, 5975, 4008,    0, -112, -360, 6650, 6650,
 6650, 6650, 6650,   13,   28,    0,    0,    0,    0,    0,
 6650,    0,    0, 5325,   58, 6495,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0, 6495, 6495, 6495, 6495, 6495, 6495, 6495, 6495, 6495,
 6495, 6495, 6495, 6495, 6495, 6495, 6495, 6495, 6495, 6495,
 6495,    0,    0,    0,    0,    0, 6495,  148,  151, 6495,
 6495, 6495, 6495,    0, 1395,  200,    0,   21,  201,   21,
  205,  137,  209,   89, 6495,   94, 1395,   98,  100,    0,
    0,  101,  216, 6495,  216,    0,    0,    0,    0,   87,
 6495,  -25,  -86,  109, 2055,    0,  190,    0,    0,  119,
 1395,    0,    0,    0,    0,    0,    0,    0,    0,  247,
    0,    0,  124, 6650,  127,    0, 6105,  185,  130,    0,
    0,   -2,  138,  195,  -68,  139,    0,  221,  141, -164,
    0,    0,    0,    0,    0,  152,   45,    0,  229, 6610,
 -108,   28,   86,    0,    0,  355, 6745, 2278, 2389, 2500,
 2611,  474,  634,  634,  800,  800,  800,  800,  310,  310,
  943,  943,  355,  355,  355,  355,  157,    0,    0,  161,
 6689,  159,    0, 6919, 6919,  291,    0,    0,    0,  295,
    0,  297,    0,   21,    0,    0,  169, 5325,  263, 5325,
 5325, 5325,    0,  164,    0,  168,    0,    0,  179,  204,
  181,  183, 6495,  184,  314, 5325,  316,  187,    0,    0,
    0,  248,    0,  281,    0,    0,  -61,    0, 5455, 6919,
    0,    0,    0,    0,    0,   69,    0,    0, -112, -112,
  325, -112, -112,    0,    0,    0, 6650,    0,    0,    0,
    0,    0,  331,  261,   37,  265,  335,    0,    0,    0,
  202, 6495,    0,    0, 6495,    0,    0,    0,  214, 6650,
 6650,    0,  343,  222,  224,  350,  225,  228,  358,    0,
    0,    0,    0,    0,    0,    0, 6495,    0,  232,    0,
 -108,    0, 6495,    0, 6650,    0,    0,  289, 6105,  -92,
 6804,  292,    0,  294,    0,  296,    0,    0,    0,  238,
    0,    0,    0,    0,    0,    0,    0,  241,    0,   37,
    0,  370, -108,    0,  369,    0, 2167,    0, 5325,    0,
    0,    0, 1395, 5325, 5325, 1395,  247, 5325,  371,  372,
  375,  165,    0, 1395,    0, 1664,    0, 6105, 6919,    0,
    0,  324, 6105, 6105,  373, 6235,  376,  332,  380,    0,
    0,  311,  247,    0,    0,    0,    0,    0,    0, 1395,
  256,    0,  258,    0,    0,    0,   99,  260, 5585,    0,
    0, 6365,    0, 5715,    0,    0,  255,  130,    0, 6919,
    0,    0,    0,  319,    0, 6919,    0,  389, 6804,    0,
    0,  289,    0,    0,    0, 6495,    0,    0,    0,  390,
  247,    0,    0,    0,    0, 5325,  306,    0,   99, 1395,
    0,    0,    0,    0,    0, 1395,    0,  273,  324,    0,
 6919,  397,    0,    0,  111,    0,    0,    0,    0,  309,
 1395,    0,    0,    0,    0,  247, -206,    0,    0,    0,
    0,    0,  312,    0,  111,    0, 1395,    0,    0,    0,
 6105,    0,    0,    0,    0,  351, 1395,    0,    0,    0,
    0,    0,    0,  401,  352,    0,    0,    0,  317, 1395,
    0,    0,
};
short yyrindex[] = {                                      0,
 1127,    0,    0,    0,    0,    0,   54,    0,    0,  367,
  378,    0,    0,    0, 1599,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,  -66,  383,    0,    0,    0, 1729, -238,
 -198,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,  383,  383,  383,  383,  383,
  383,  383,  383,  383,    0,    0,  383,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0, -103,   40,    0, -262,  379,  953,    0,    0,  285,
 -244,   57,    9,    0,    0,    0,    0,    0, -186, -101,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,  993,    0,    0,  399, 5051,    0,    0,    0,
    0, -253,    0, -231,    0,    0,    0, 2119,    0, 2231,
 2343,    0, 2455,    0, 2567, 2679, 2791, 2903, 3015,    0,
  383,    0,   20,    0,    0,   54,  829,    0,    0,    0,
 1729,    0, -145,  -65,    0,    0, -185,    0, -141,    0,
    0,    0,    0, -249,    0,    0,   40,    0,    0,    0,
    0,    0,    0,    0,  -22,    0,    0,    0,    0,    0,
 -262,    0,    0,  383,    0,  383,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,  383,  383,  383,  383,  383,  383,  383,  383,  383,
  383,  383,  383,  383,  383,  383,  383,  383,  383,  383,
  383,    0,    0,    0,    0,    0,  383,    0,    0,  383,
 -268,  383,  383,    0,  194,    0,    0,    0,    0,    0,
    0,   64,    0,    0, -259,    0,   54,    0,    0,    0,
    0,    0,  293,  383,  293,    0,    0,    0,    0, -232,
 -243,  399,    0,    0,  303,    0,    0,  334,    0,    0,
    9,    0,    0,    0,    0,    0,    0,    0,    0,  364,
    0,    0,    0, -293,    0,    0,  383,   61,    0,    0,
    0,  399,    0,  308,    0,    0,    0, -239,    0,  313,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,  -22,    0,    0,    0, 3239,    0, 4960, 4938, 4845,
 4821, 4724, 4599, 4696, 4195, 4296, 4397, 4498, 3989, 4092,
 3779, 3884, 3347, 3455, 3563, 3671,    0,    0,    0,    0,
  313,    0,    0, -246,  -18,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,  383,    0, -251,
  383,  -66,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,  383, 6863,    0,  383,    0,  499,    0,    0,
    0,    0,    0,    0, -218,    0,  313,    0,  383,   29,
    0,    0,    0,    0,    0,    0,    0,    0,   40,   40,
    0,   40,   40,    0,    0,    0,    0,    0,    0,    0,
    0,  103,    0,  439,    0,  440,    0,    0,    0,    0,
    0,  383,    0,    0,  383,    0,    0,    0,    0, -186,
 -101,    0,    0,    0,    0,  315,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,  383,    0,    0,    0,
    0,    0,  383,    0,  393,    0,    0, 1793,  383,  395,
 -156,   88,    0,  443,    0,  443,    0,    0,    0,    0,
 -130,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0, 5071,    0,  383,    0,
    0,    0,   54,  383, -251,   54,    0, -256, 1859,    0,
 1989, 3127,    0,   54,    0,    0,    0,  383, -219,    0,
    0,    0,  383,   15,  445,   14,    0,  446,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    9,
    0,    0,    0,    0,    0,    0,  447,    0,  383,    0,
    0,  383,    0,  383,    0,    0,  659,    0,    0, -122,
    0,    0,    0,  328,    0, -156,    0,    0,    0,    0,
    0,    0,    0,    0,    0,  383,    0,    0,    0,    0,
    0,    0,    0,    0,    0,  383,    0,    0,  447,   54,
    0,    0,    0,    0,    0,   54,    0,    0,    0,    0,
   25,    0,    0,    0,  449,    0,    0,    0,    0,    0,
  194,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,  449,    0,  194,    0,    0,    0,
  383,    0,    0,    0,    0,    0,  194,    0,    0,    0,
    0,    0,    0,    0,  365,    0,    0,    0,    0,  194,
    0,    0,
};
short yygindex[] = {                                      0,
  -32,  215,    0,    0,  450,    0,    0,  -76,    0,    0,
    0,    0,    0, -252,   -3,  559,    0,    0,    0,    0,
    0,  134,    0,    0,   97,    0,    0,  420,    0,  126,
    0,    0, -202,  323, -229,    0,    0,    0,    0,    0,
    0,  -39,    0,  -26,   -7, -157,    0,    0,  557,    0,
    0, -143,  299,  301,  -52,    0,    0,   22,    0,  -79,
  245,  320,    0,  336,  279,  188,    0, -343,  -38,  242,
   10,  493,  488,    5,    0,  318,    0,    0,    0,  754,
 -409,    0,    0,  -88,    0, -521,    0,  276,    0,  326,
  244,    0,    0,  321, -261,    0,    0,  -75,    0,   90,
   81,    0, -152,  521, -114,   36,   27, -470, -501,    0,
    0,    0,    0,    0,
};
#define YYTABLESIZE 7312
short yytable[] = {                                      92,
  162,  122,  368,   82,  132,  134,  167,  172,  491,  105,
    2,  209,  577,  201,  294,  106,  100,  446,  217,  147,
  204,  217,  147,  217,  205,    3,  207,  147,  203,  321,
  190,  147,   29,   28,  147,  139,   92,  132,  397,  147,
  316,  147,  328,  172,  200,  414,  557,  147,  332,  137,
  147,  197,  147,  135,  142,  370,  109,  372,  147,  149,
   14,  152,  154,  476,  273,  133,   26,  275,  195,  163,
  148,  150,  151,  153,  155,  156,  157,  158,  159,  117,
  200,  170,  258,  260,  110,  176,  164,  196,  217,  217,
  217,  204,  204,  164,  146,   92,  622,  190,  133,  204,
  193,  196,  196,  357,   29,  426,  360,  217,  177,  204,
  168,  322,  111,  322,   34,   34,   34,  332,  197,  653,
  615,   87,  121,  125,  175,  211,  147,  124,  125,  126,
  127,  641,  648,  468,  207,  138,  215,  201,  162,  147,
  209,  217,  201,  128,  164,  337,  107,  217,  209,  204,
  117,  117,  117,  282,  190,  217,    4,  204,   92,  266,
  267,  268,  269,  207,  132,  285,  172,  165,  166,   29,
   28,  452,  427,  272,  332,  197,  312,  318,  612,  438,
  322,  322,  323,  324,  325,  326,   13,  146,  285,  181,
  129,  578,   87,  196,  125,  125,   92,  626,  201,   96,
  290,   96,  182,   26,   47,  502,   49,    9,  426,   13,
  336,  147,  125,  334,  337,  309,  117,  531,  112,  113,
  114,  115,  116,  400,  147,  133,  337,  338,  339,  340,
  341,  342,  343,  344,  345,  346,  347,  348,  349,  350,
  351,  352,  353,  354,  355,  356,  205,   92,  295,  466,
  390,  285,  125,  440,  285,  361,  364,  365,  441,   92,
  125,  492,  493,  379,  495,  496,  571,   13,  421,  142,
  546,  531,   96,  152,  184,  475,   51,  404,  142,  180,
  185,   16,   16,   92,   16,  153,  329,  330,  331,  214,
   13,  333,  214,  123,  214,  160,  405,  590,  436,  147,
  180,  391,  180,  180,  147,  147,  180,  287,  202,  134,
  146,  410,  288,   16,   17,   18,   19,  205,  205,  422,
  182,  202,  435,  395,  399,  116,  170,  327,  110,  134,
  134,  110,   13,  262,  197,  205,  198,  199,  132,  253,
  132,  132,  132,  459,  147,  180,  369,  180,  180,  431,
  501,  180,  134,  134,  257,   17,  132,   17,  264,  214,
  214,  214,  389,  181,  123,  123,  271,  113,  638,  537,
   92,  539,   92,   92,   92,  205,  134,   47,  214,  171,
  402,  270,  123,  205,  650,  419,  181,  454,   92,  135,
  458,  135,  202,  265,  656,  181,  116,  285,   47,  133,
  439,  133,  133,  133,  449,  469,  276,  661,  596,  597,
  202,  286,  214,  481,  116,   36,   36,  133,  214,  318,
  632,  633,  123,  258,  260,  289,  214,  134,  134,  182,
  123,  563,  566,  134,   47,  170,  171,  297,  525,  113,
  296,  134,  196,  196,  301,  305,  507,  306,  404,  361,
  202,  307,  310,  123,  116,  277,  278,  279,  202,  335,
  358,   51,  116,  359,  203,  498,  587,  405,  371,  132,
  436,  522,  373,  374,  132,  132,  375,  526,  132,  558,
  383,  376,  388,  529,  147,  180,  378,  180,  180,   36,
  380,  180,  381,  382,  523,   36,  392,  519,   81,  520,
  521,   92,  394,   51,   51,   92,   92,   92,   92,  552,
   92,  396,  555,   14,  194,  532,   92,  403,  551,  408,
  567,  415,  417,  553,  135,  420,  423,  135,  194,  194,
  133,  390,  570,  424,  425,  133,  133,  529,  576,  133,
  579,  430,   92,  244,  443,  429,  245,  246,  444,  640,
  642,  247,  447,  248,  249,  250,  132,  251,  448,  450,
  568,  451,  453,  579,  455,  460,  576,  585,  576,  461,
  588,  542,  462,  463,  464,  206,  465,  467,  592,  545,
  409,  594,  595,  470,  549,  473,  602,  471,   92,  603,
  611,  605,   92,  474,  494,  499,  624,  500,   92,  504,
   45,  503,  625,  506,  194,  620,  509,  512,  194,  194,
  194,  194,  194,   92,  515,  513,  514,  133,  516,  617,
  194,  517,  518,  144,  144,  524,  528,  589,  534,   92,
  536,  540,  538,  185,  547,  550,  572,  559,  562,   92,
  631,  564,  426,  581,  582,  576,  144,  584,  586,  591,
  639,  593,   92,  600,  606,  609,  610,  613,   52,  621,
  627,  629,  637,  655,  658,  647,  652,  646,  657,  654,
  660,   91,  616,  147,  618,  619,  183,  236,  237,  238,
  239,  240,   92,  241,  242,  243,   10,  662,  244,  146,
  168,  245,  246,  630,   15,  161,  247,  636,  248,  249,
  250,    9,  251,  112,   39,  147,  199,   45,   78,  644,
   17,  645,  199,   16,   99,  317,  104,  548,  108,  651,
  144,  144,  144,  194,  292,  387,  144,  144,  241,  242,
  243,  649,  623,  244,  628,  144,  245,  246,  489,  206,
  314,  247,  544,  248,  249,  250,  497,  251,  510,  194,
  123,  511,  490,  527,   81,  607,  554,  377,   81,   81,
   81,  385,  508,   81,   81,   81,   81,   81,  120,   81,
   81,   81,   81,   81,   81,   81,  575,   81,   81,   81,
   81,   81,   81,   81,   81,   81,   81,   81,   81,   81,
   81,   81,   81,   81,  561,  386,   81,   81,   81,   81,
   81,   81,   81,   81,   81,   81,   81,   81,   81,   81,
   81,   81,   81,   81,   81,   81,   81,   81,   81,   81,
   81,   81,   81,   81,   81,   81,   81,   81,   13,    0,
    0,   81,   81,  228,  229,  230,  231,  232,  233,  234,
  235,  236,  237,  238,  239,  240,  194,  241,  242,  243,
    0,    0,  244,    0,   81,  245,  246,   81,  583,    0,
  247,  580,  248,  249,  250,    0,  251,   81,   81,  194,
  194,    0,   81,    0,    0,    0,    0,   81,    0,   81,
   81,   81,    0,    0,    0,   81,    0,   81,    0,    0,
  123,   81,    0,    0,  194,   81,   81,    0,   81,  206,
   81,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,   52,    0,    0,    0,   52,   52,
   52,    0,  123,   52,   52,   52,   52,   52,    0,   52,
   52,   52,   52,   52,   52,   52,    0,   52,   52,   52,
   52,   52,   52,   52,   52,   52,   52,   52,   52,   52,
   52,   52,   52,   52,    0,    0,   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,    0,    0,
    0,   52,   52,    0,    0,  230,  231,  232,  233,  234,
  235,  236,  237,  238,  239,  240,    0,  241,  242,  243,
    0,    0,  244,    0,   52,  245,  246,   52,    0,    0,
  247,    0,  248,  249,  250,    0,  251,   52,   52,    0,
    0,    0,   52,    0,    0,    0,    0,   52,    0,   52,
   52,   52,    0,    0,    0,   52,    0,   52,    0,    0,
    0,   52,    0,    0,    0,   52,   52,    0,    0,   52,
   52,    0,    0,    0,    0,  206,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,   13,    0,    0,    0,   13,   13,
   13,    0,    0,   13,   13,   13,    0,   13,    0,   13,
   13,   13,   13,   13,   13,   13,    0,   13,   13,   13,
   13,   13,   13,   13,   13,   13,   13,   13,   13,   13,
   13,   13,   13,   13,    0,    0,   13,   13,   13,   13,
   13,   13,   13,   13,   13,   13,   13,   13,    0,    0,
   13,   13,   13,   13,   13,   13,   13,   13,   13,   13,
   13,   13,   13,   13,   13,   13,   13,   13,    0,    0,
    0,   13,   13,    0,    0,  234,  235,  236,  237,  238,
  239,  240,    0,  241,  242,  243,    0,    0,  244,    0,
    0,  245,  246,    0,   13,    0,  247,   13,  248,  249,
  250,    0,  251,    0,    0,    0,    0,   13,   13,    0,
    0,    0,   13,    0,    0,    0,    0,   13,  206,   13,
   13,   13,  174,  174,  174,   13,    0,   13,    0,    0,
    0,   13,    0,    0,    0,   13,   13,    0,  174,  174,
    0,  174,  174,  174,  174,  174,  174,  174,  174,  174,
  174,  174,  174,    0,  179,    0,  179,  179,    0,    0,
  179,    0,  174,  174,  174,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,  174,  174,  174,  174,  174,
    0,  174,  174,  174,  174,  174,  174,  174,  174,  174,
  174,  174,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,  174,  174,  174,  174,    0,
    0,  174,  238,  239,  240,    0,  241,  242,  243,    0,
    0,  244,  174,    0,  245,  246,  174,    0,    0,  247,
    0,  248,  249,  250,    0,  251,    0,    0,    0,    0,
    0,    0,    0,    0,    0,  174,    0,    0,  174,    0,
    0,  174,    0,    0,  174,    0,    0,    0,    0,    0,
    0,    0,  174,    0,    0,    0,  174,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,  174,   11,   11,   11,    0,
    0,   11,   11,   11,  174,   11,    0,    0,   11,   11,
   11,   11,   11,   11,    0,   11,   11,   11,   11,   11,
   11,   11,   11,   11,   11,   11,   11,   11,   11,   11,
   11,   11,    0,    0,   11,   11,   11,   11,   11,   11,
   11,   11,   11,   11,   11,   11,    0,    0,   11,   11,
   11,   11,   11,   11,   11,   11,   11,   11,   11,   11,
   11,   11,   11,   11,   11,   11,    0,    0,    0,   11,
   11,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,   11,    0,    0,   11,    0,    0,    0,    0,
    0,    0,    0,    0,    0,   11,   11,    0,    0,    0,
   11,    0,    0,    0,    0,   11,    0,   11,   11,   11,
    0,    0,    0,   11,    0,   11,    0,    0,    0,   11,
    9,   10,   11,   11,   11,   12,   13,   14,    0,   15,
    0,    0,   16,   17,   18,   19,   20,   21,    0,   22,
   23,   24,   25,   26,   27,   28,   29,   30,   31,   32,
   33,    0,    0,   34,    0,    0,    0,    0,    0,   35,
   36,   37,   38,   39,   40,   41,   42,   43,   44,   45,
    0,    0,   46,   47,   48,   49,   50,   51,   52,   53,
   54,   55,   56,   57,   58,   59,   60,   61,   62,   63,
    0,    0,    0,   64,   65,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,   66,    0,    0,   67,
    0,    0,    0,    0,    0,    0,    0,    0,    0,   68,
   69,    0,    0,    0,   70,    0,    0,    0,    0,   71,
    0,   72,   73,   74,    0,    0,    0,   75,    0,   76,
    0,    0,    0,   77,    9,   10,   11,   78,   79,   12,
   13,   14,    0,   15,    0,    0,   16,   17,   18,   19,
   20,   21,    0,   22,   23,   24,   25,   26,   27,   28,
   29,   30,   31,   32,   33,    0,    0,   34,    0,    0,
    0,    0,    0,   35,   36,   37,   38,   39,   40,   41,
   42,   43,   44,   45,    0,    0,   46,   47,   48,   49,
    0,    0,   52,   53,   54,   55,   56,   57,   58,   59,
   60,   61,   62,   63,    0,    0,    0,   64,   65,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
   66,    0,    0,   67,    0,    0,    0,    0,    0,    0,
    0,    0,    0,   68,   69,    0,    0,    0,   70,    0,
    0,    0,    0,   71,    0,   72,   73,   74,    0,    0,
    0,   75,    0,   76,    0,    0,    0,   77,    9,   10,
   11,   78,   79,   12,   13,  291,    0,   15,    0,    0,
   16,   17,   18,   19,   20,   21,    0,   22,   23,   24,
   25,   26,   27,   28,   29,   30,   31,   32,   33,    0,
    0,   34,    0,    0,    0,    0,    0,   35,   36,   37,
   38,   39,   40,   41,   42,   43,   44,   45,    0,    0,
   46,   47,   48,   49,    0,    0,   52,   53,   54,   55,
   56,   57,   58,   59,   60,   61,   62,   63,    0,    0,
    0,   64,   65,  288,  288,    0,  288,    0,  288,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,   66,    0,    0,   67,    0,    0,
    0,    0,    0,    0,    0,    0,    0,   68,   69,    0,
    0,    0,   70,    0,    0,    0,    0,   71,    0,   72,
   73,   74,    0,    0,    0,   75,    0,   76,    0,    0,
    0,   77,    0,    0,    0,   78,   79,    0,  569,  206,
    0,    0,    0,  288,  288,  288,  288,  288,  288,  288,
  288,  288,  288,  288,  288,  288,  288,  288,  288,  288,
  288,  288,  288,  288,  288,  288,  288,  288,  288,  288,
  288,  288,  288,  288,  288,  288,  288,  288,  288,  288,
  288,    0,  288,  288,  288,    0,    0,  288,    0,    0,
  288,  288,    0,    0,    0,  288,  288,  288,  288,  288,
    0,  288,  288,   44,   44,    0,   44,    0,   44,    0,
  288,  207,  208,  209,  210,  211,  212,  213,  214,  215,
  216,  217,  218,  219,  220,  221,  222,    0,  223,  224,
  225,  226,  227,  228,  229,  230,  231,  232,  233,  234,
  235,  236,  237,  238,  239,  240,    0,  241,  242,  243,
    0,    0,  244,    0,    0,  245,  246,    0,    0,    0,
  247,    0,  248,  249,  250,    0,  251,    0,   43,    0,
   43,    0,   43,   44,   44,   44,   44,   44,   44,   44,
   44,   44,   44,   44,   44,   44,   44,   44,   44,   44,
   44,   44,   44,   44,   44,   44,   44,   44,   44,   44,
   44,   44,   44,   44,   44,   44,   44,   44,   44,   44,
   44,    0,   44,   44,   44,    0,    0,   44,    0,    0,
   44,   44,    0,    0,    0,   44,   44,   44,   44,   44,
    0,   44,   44,  326,  326,    0,  326,   43,  326,   43,
   44,   43,   43,   43,   43,   43,   43,   43,   43,   43,
   43,   43,   43,   43,   43,   43,    0,   43,   43,   43,
   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
   43,   43,   43,   43,   43,    0,   43,   43,   43,    0,
    0,   43,    0,    0,   43,   43,    0,    0,    0,   43,
    0,   43,   43,   43,    0,   43,    0,    0,    0,    0,
  206,    0,    0,  326,  326,  326,  326,  326,  326,  326,
  326,  326,  326,  326,  326,  326,  326,  326,  326,  326,
  326,  326,  326,  326,  326,  326,  326,  326,  326,  326,
  326,  326,  326,  326,  326,  326,  326,  326,  326,  326,
  326,    0,  326,  326,  326,    0,    0,  326,    0,    0,
  326,  326,    0,    0,    0,  326,  326,  326,  326,  326,
    0,  326,  326,  311,  311,    0,  311,    0,  311,    0,
  326,  274,  207,  208,  209,  210,  211,  212,  213,  214,
  215,  216,  217,  218,  219,  220,  221,  222,    0,  223,
  224,  225,  226,  227,  228,  229,  230,  231,  232,  233,
  234,  235,  236,  237,  238,  239,  240,    0,  241,  242,
  243,    0,    0,  244,    0,    0,  245,  246,    0,    0,
    0,  247,    0,  248,  249,  250,    0,  251,    0,    0,
  206,    0,    0,  311,  311,  311,  311,  311,  311,  311,
  311,  311,  311,  311,  311,  311,  311,  311,  311,  311,
  311,  311,  311,  311,  311,  311,  311,  311,  311,  311,
  311,  311,  311,  311,  311,  311,  311,  311,  311,  311,
  311,    0,  311,  311,  311,    0,    0,  311,    0,    0,
  311,  311,    0,    0,    0,  311,  311,  311,  311,  311,
    0,  311,  311,  223,  223,    0,  223,    0,  223,    0,
  311,  393,  207,  208,  209,  210,  211,  212,  213,  214,
  215,  216,  217,  218,  219,  220,  221,  222,    0,  223,
  224,  225,  226,  227,  228,  229,  230,  231,  232,  233,
  234,  235,  236,  237,  238,  239,  240,    0,  241,  242,
  243,    0,  206,  244,    0,    0,  245,  246,    0,    0,
    0,  247,    0,  248,  249,  250,    0,  251,    0,    0,
    0,    0,    0,  223,  223,  223,  223,  223,  223,  223,
  223,  223,  223,  223,  223,  223,  223,  223,  223,  223,
  223,  223,  223,  223,  223,  223,  223,  223,  223,  223,
  223,  223,  223,  223,  223,  223,  223,  223,  223,  223,
  223,    0,  223,  223,  223,  222,  222,    0,  222,    0,
  222,    0,    0,    0,    0,    0,  223,    0,    0,    0,
    0,    0,  223,    0,    0,    0,    0,    0,    0,  222,
  223,  223,  224,  225,  226,  227,  228,  229,  230,  231,
  232,  233,  234,  235,  236,  237,  238,  239,  240,    0,
  241,  242,  243,  206,    0,  244,    0,    0,  245,  246,
    0,    0,    0,  247,    0,  248,  249,  250,    0,  251,
    0,    0,    0,    0,    0,  222,  222,  222,  222,  222,
  222,  222,  222,  222,  222,  222,  222,  222,  222,  222,
  222,  222,  222,  222,  222,  222,  222,  222,  222,  222,
  222,  222,  222,  222,  222,  222,  222,  222,  222,  222,
  222,  222,  222,    0,  222,  222,  222,  224,  224,    0,
  224,    0,  224,    0,    0,    0,    0,    0,  222,    0,
    0,    0,    0,    0,  222,    0,    0,    0,    0,    0,
    0,    0,  222,  224,  225,  226,  227,  228,  229,  230,
  231,  232,  233,  234,  235,  236,  237,  238,  239,  240,
    0,  241,  242,  243,  206,    0,  244,    0,    0,  245,
  246,    0,    0,    0,  247,    0,  248,  249,  250,    0,
  251,    0,    0,    0,    0,    0,    0,  224,  224,  224,
  224,  224,  224,  224,  224,  224,  224,  224,  224,  224,
  224,  224,  224,  224,  224,  224,  224,  224,  224,  224,
  224,  224,  224,  224,  224,  224,  224,  224,  224,  224,
  224,  224,  224,  224,  224,    0,  224,  224,  224,  220,
  220,    0,  220,    0,  220,    0,    0,    0,    0,    0,
  224,    0,    0,    0,    0,    0,  224,    0,    0,    0,
    0,    0,    0,    0,  224,  225,  226,  227,  228,  229,
  230,  231,  232,  233,  234,  235,  236,  237,  238,  239,
  240,    0,  241,  242,  243,  206,    0,  244,    0,    0,
  245,  246,    0,    0,    0,  247,    0,  248,  249,  250,
    0,  251,    0,    0,    0,    0,    0,    0,    0,  220,
  220,  220,  220,  220,  220,  220,  220,  220,  220,  220,
  220,  220,  220,  220,  220,  220,  220,  220,  220,  220,
  220,  220,  220,  220,  220,  220,  220,  220,  220,  220,
  220,  220,  220,  220,  220,  220,  220,    0,  220,  220,
  220,  221,  221,    0,  221,    0,  221,    0,    0,    0,
    0,    0,  220,    0,    0,    0,    0,    0,  220,    0,
    0,    0,    0,    0,    0,    0,  220,  226,  227,  228,
  229,  230,  231,  232,  233,  234,  235,  236,  237,  238,
  239,  240,    0,  241,  242,  243,  206,    0,  244,    0,
    0,  245,  246,    0,    0,    0,  247,    0,  248,  249,
  250,    0,  251,    0,    0,    0,    0,    0,    0,    0,
    0,  221,  221,  221,  221,  221,  221,  221,  221,  221,
  221,  221,  221,  221,  221,  221,  221,  221,  221,  221,
  221,  221,  221,  221,  221,  221,  221,  221,  221,  221,
  221,  221,  221,  221,  221,  221,  221,  221,  221,    0,
  221,  221,  221,  226,  226,    0,  226,    0,  226,    0,
    0,    0,    0,    0,  221,    0,    0,    0,    0,    0,
  221,    0,    0,    0,    0,    0,    0,    0,  221,  227,
  228,  229,  230,  231,  232,  233,  234,  235,  236,  237,
  238,  239,  240,    0,  241,  242,  243,    0,    0,  244,
    0,    0,  245,  246,    0,    0,    0,  247,    0,  248,
  249,  250,    0,  251,    0,    0,    0,    0,    0,    0,
    0,    0,    0,  226,  226,  226,  226,  226,  226,  226,
  226,  226,  226,  226,  226,  226,  226,  226,  226,  226,
  226,  226,  226,  226,  226,  226,  226,  226,  226,  226,
  226,  226,  226,  226,  226,  226,  226,  226,  226,  226,
  226,    0,  226,  226,  226,  225,  225,    0,  225,    0,
  225,    0,    0,    0,    0,    0,  226,    0,    0,    0,
    0,    0,  226,    0,    0,    0,    0,    0,    0,    0,
  226,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,  225,  225,  225,  225,  225,
  225,  225,  225,  225,  225,  225,  225,  225,  225,  225,
  225,  225,  225,  225,  225,  225,  225,  225,  225,  225,
  225,  225,  225,  225,  225,  225,  225,  225,  225,  225,
  225,  225,  225,    0,  225,  225,  225,  228,  228,    0,
  228,    0,  228,    0,    0,    0,    0,    0,  225,    0,
    0,    0,    0,    0,  225,    0,    0,    0,    0,    0,
    0,    0,  225,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,  228,  228,  228,
  228,  228,  228,  228,  228,  228,  228,  228,  228,  228,
  228,  228,  228,  228,  228,  228,  228,  228,  228,  228,
  228,  228,  228,  228,  228,  228,  228,  228,  228,  228,
  228,  228,  228,  228,  228,    0,  228,  228,  228,  230,
  230,    0,  230,    0,  230,    0,    0,    0,    0,    0,
  228,    0,    0,    0,    0,    0,  228,    0,    0,    0,
    0,    0,    0,    0,  228,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,  230,
  230,  230,  230,  230,  230,  230,  230,  230,  230,  230,
  230,  230,  230,  230,  230,  230,  230,  230,  230,  230,
  230,  230,  230,  230,  230,  230,  230,  230,  230,  230,
  230,  230,  230,  230,  230,  230,  230,    0,  230,  230,
  230,  277,  277,    0,  277,    0,  277,    0,    0,    0,
    0,    0,  230,    0,    0,    0,    0,    0,  230,    0,
    0,    0,    0,    0,    0,    0,  230,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,  277,  277,  277,  277,  277,  277,  277,  277,  277,
  277,  277,  277,  277,  277,  277,  277,  277,  277,  277,
  277,  277,  277,  277,  277,  277,  277,  277,  277,  277,
  277,  277,  277,  277,  277,  277,  277,  277,  277,    0,
  277,  277,  277,  238,  238,    0,  238,    0,  238,    0,
    0,    0,    0,    0,  277,    0,    0,    0,    0,    0,
  277,    0,    0,    0,    0,    0,    0,    0,  277,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,  238,  238,  238,  238,  238,  238,  238,
  238,  238,  238,  238,  238,  238,  238,  238,  238,  238,
  238,  238,  238,  238,  238,  238,  238,  238,  238,  238,
  238,  238,  238,  238,  238,  238,  238,  238,  238,  238,
  238,  235,  235,    0,  235,    0,  235,    0,    0,    0,
    0,    0,    0,    0,    0,    0,  238,    0,    0,    0,
    0,    0,  238,    0,    0,    0,    0,    0,    0,    0,
  238,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,  235,  235,  235,  235,  235,  235,  235,  235,  235,
  235,  235,  235,  235,  235,  235,  235,  235,  235,  235,
  235,  235,  235,  235,  235,  235,  235,  235,  235,  235,
  235,  235,  235,  235,  235,  235,  235,  235,  235,  236,
  236,    0,  236,    0,  236,    0,    0,    0,    0,    0,
    0,    0,    0,    0,  235,    0,    0,    0,    0,    0,
  235,    0,    0,    0,    0,    0,    0,    0,  235,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,  236,
  236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
  236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
  236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
  236,  236,  236,  236,  236,  236,  236,  237,  237,    0,
  237,    0,  237,    0,    0,    0,    0,    0,    0,    0,
    0,    0,  236,    0,    0,    0,    0,    0,  236,    0,
    0,    0,    0,    0,    0,    0,  236,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,  237,  237,  237,
  237,  237,  237,  237,  237,  237,  237,  237,  237,  237,
  237,  237,  237,  237,  237,  237,  237,  237,  237,  237,
  237,  237,  237,  237,  237,  237,  237,  237,  237,  237,
  237,  237,  237,  237,  237,  239,  239,    0,  239,    0,
  239,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  237,    0,    0,    0,    0,    0,  237,    0,    0,    0,
    0,    0,    0,    0,  237,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,  239,  239,  239,  239,  239,
  239,  239,  239,  239,  239,  239,  239,  239,  239,  239,
  239,  239,  239,  239,  239,  239,  239,  239,  239,  239,
  239,  239,  239,  239,  239,  239,  239,  239,  239,  239,
  239,  239,  239,  233,    0,    0,  233,    0,  233,    0,
    0,    0,    0,    0,    0,    0,    0,    0,  239,    0,
    0,    0,    0,    0,  239,    0,    0,    0,    0,    0,
    0,    0,  239,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,  233,  233,  233,  233,  233,  233,  233,
  233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
  233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
  233,  233,  233,  233,  233,  233,  233,  233,  234,    0,
    0,  234,    0,  234,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,  233,    0,    0,    0,
    0,    0,  233,    0,    0,    0,    0,    0,    0,    0,
  233,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,  234,  234,
  234,  234,  234,  234,  234,  234,  234,  234,  234,  234,
  234,  234,  234,  234,  234,  234,  234,  234,  234,  234,
  234,  234,  234,  234,  234,  234,  234,  234,  234,  234,
  234,  234,  234,  242,    0,    0,  242,    0,  242,    0,
    0,    0,    0,    0,    0,    0,    0,    9,  130,  131,
    0,  234,    0,    0,    0,    0,    0,  234,    0,    0,
    0,    0,    0,   20,   21,  234,   22,   23,   24,   25,
   26,   27,   28,   29,   30,   31,   32,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,   48,  188,  242,  242,  242,  242,  242,  242,  242,
  242,  242,  242,  242,  242,  242,  242,  242,  242,  242,
  242,  242,  242,  242,  242,  242,  242,  242,  242,  242,
  242,  242,  242,  242,  242,  242,  243,    0,    0,  243,
    0,  243,    0,  189,    0,    0,  190,    0,    0,    0,
    0,    0,    0,    0,    0,    0,  242,  191,    0,    0,
    0,  192,  242,    0,    0,    0,    0,    0,    0,    0,
  242,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  193,  317,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,  243,  243,  243,  243,
  243,  243,  243,  243,  243,  243,  243,  243,  243,  243,
  243,  243,  243,  243,  243,  243,  243,  243,  243,  243,
  243,  243,  243,  243,  243,  243,  243,  243,  243,  252,
    0,    0,  252,    0,  252,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,  243,
    0,    0,    0,    0,    0,  243,    0,    0,    0,    0,
    0,    0,    0,  243,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,  252,
  252,  252,  252,  252,  252,  252,  252,  252,  252,  252,
  252,  252,  252,  252,  252,  252,  252,  252,  252,  252,
  252,  252,  252,  252,  252,  252,  252,  252,  252,  252,
  253,    0,    0,  253,    0,  253,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,  252,    0,    0,    0,    0,    0,  252,    0,
    0,    0,    0,    0,    0,    0,  252,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  253,  253,  253,  253,  253,  253,  253,  253,  253,  253,
  253,  253,  253,  253,  253,  253,  253,  253,  253,  253,
  253,  253,  253,  253,  253,  253,  253,  253,  253,  253,
  253,  254,    0,    0,  254,    0,  254,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,  253,    0,    0,    0,    0,    0,  253,
    0,    0,    0,    0,    0,    0,    0,  253,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,  254,  254,  254,  254,  254,  254,  254,  254,  254,
  254,  254,  254,  254,  254,  254,  254,  254,  254,  254,
  254,  254,  254,  254,  254,  254,  254,  254,  254,  254,
  254,  254,  255,    0,    0,  255,    0,  255,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,  254,    0,    0,    0,    0,    0,
  254,    0,    0,    0,    0,    0,    0,    0,  254,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,  255,  255,  255,  255,  255,  255,  255,  255,
  255,  255,  255,  255,  255,  255,  255,  255,  255,  255,
  255,  255,  255,  255,  255,  255,  255,  255,  255,  255,
  255,  255,  255,  250,    0,    0,  250,    0,  250,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,  255,    0,    0,    0,    0,
    0,  255,    0,    0,    0,    0,    0,    0,    0,  255,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,  250,  250,  250,  250,  250,  250,  250,
  250,  250,  250,  250,  250,  250,  250,  250,  250,  250,
  250,  250,  250,  250,  250,  250,  250,  250,  250,  250,
  251,    0,    0,  251,    0,  251,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,  250,    0,  246,    0,
    0,  246,  250,  246,    0,    0,    0,    0,    0,    0,
  250,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  251,  251,  251,  251,  251,  251,  251,  251,  251,  251,
  251,  251,  251,  251,  251,  251,  251,  251,  251,  251,
  251,  251,  251,  251,  251,  251,  251,    0,  246,  246,
  246,  246,  246,  246,  246,  246,  246,  246,  246,  246,
  246,  246,  246,  246,  246,  246,  246,  246,  246,  246,
  246,  246,  246,  251,    0,  245,    0,    0,  245,  251,
  245,    0,    0,    0,    0,    0,    0,  251,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,  247,
    0,  246,  247,    0,  247,    0,    0,  246,    0,    0,
    0,    0,    0,    0,    0,  246,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,  245,  245,  245,  245,  245,
  245,  245,  245,  245,  245,  245,  245,  245,  245,  245,
  245,  245,  245,  245,  245,  245,  245,  245,  245,  247,
  247,  247,  247,  247,  247,  247,  247,  247,  247,  247,
  247,  247,  247,  247,  247,  247,  247,  247,  247,  247,
  247,  247,  248,    0,    0,  248,    0,  248,  245,    0,
    0,    0,    0,    0,  245,    0,    0,    0,    0,    0,
    0,    0,  245,    0,  249,    0,    0,  249,    0,  249,
    0,    0,  247,    0,    0,    0,    0,    0,  247,    0,
    0,    0,    0,    0,    0,    0,  247,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,  248,  248,  248,  248,  248,  248,  248,  248,
  248,  248,  248,  248,  248,  248,  248,  248,  248,  248,
  248,  248,  248,  248,  249,  249,  249,  249,  249,  249,
  249,  249,  249,  249,  249,  249,  249,  249,  249,  249,
  249,  249,  249,  249,  249,  232,    0,    0,  232,    0,
  232,    0,    0,    0,    0,  248,    0,    0,    0,    0,
    0,  248,    0,    0,    0,  244,    0,    0,  244,  248,
  244,    0,    0,    0,    0,    0,    0,  249,    0,    0,
    0,    0,    0,  249,    0,    0,    0,    0,    0,    0,
    0,  249,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,  232,  232,  232,  232,  232,
  232,  232,  232,  232,  232,  232,  232,  232,  232,  232,
  232,  232,  232,    0,  232,  244,  244,  244,  244,  244,
  244,  244,  244,  244,  244,  244,  244,  244,  244,  244,
  244,  244,  244,    0,  244,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,  232,    0,
    0,    0,    0,    0,  232,    0,    0,    0,    0,    0,
    0,    0,  232,    0,    9,  130,  131,    0,  244,    0,
   13,   14,    0,   15,  244,    0,   16,   17,   18,   19,
   20,   21,  244,   22,   23,   24,   25,   26,   27,   28,
   29,   30,   31,   32,    0,    0,    0,    0,    0,    0,
    0,    0,    0,   35,   36,    0,    0,    0,    0,    0,
    0,    0,    0,   45,    0,    0,    0,   47,   48,   49,
    0,    0,   52,   53,   54,   55,   56,   57,   58,   59,
   60,   61,   62,   63,    0,    0,    0,   64,   65,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
   66,    0,    0,   67,    0,    0,    0,    0,    0,    0,
    0,    0,    0,   68,   69,    0,    0,    0,   70,    0,
    0,    0,    0,   71,    0,   72,   73,   74,    0,    0,
    0,  161,    0,   76,    9,  130,  131,   77,    0,    0,
   13,    0,    0,   15,    0,    0,   16,   17,   18,   19,
   20,   21,    0,   22,   23,   24,   25,   26,   27,   28,
   29,   30,   31,   32,    0,    0,    0,    0,    0,    0,
    0,    0,    0,   35,   36,    0,    0,    0,    0,    0,
    0,    0,    0,   45,    0,    0,    0,   47,   48,   49,
    0,    0,   52,   53,   54,   55,   56,   57,   58,   59,
   60,   61,   62,   63,    0,    0,    0,   64,   65,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
   66,    0,    0,   67,    0,    0,    0,    0,    0,    0,
    0,    0,    0,   68,   69,    0,    0,    0,   70,    0,
    0,    0,    0,   71,    0,   72,   73,   74,    0,    0,
    0,   75,    0,   76,    9,  130,  131,   77,    0,    0,
   13,  409,  477,   15,    0,    0,    0,    0,    0,    0,
   20,   21,    0,   22,   23,   24,   25,   26,   27,   28,
   29,   30,   31,   32,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,   45,    0,    0,    0,  478,   48,   49,
    0,    0,   52,   53,   54,   55,   56,   57,   58,   59,
   60,   61,   62,   63,    0,    0,    0,   64,   65,  479,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
   66,    0,    0,   67,    0,    0,    0,    0,    0,    0,
    0,    0,    0,   68,   69,    0,    0,    0,   70,    0,
    0,    0,    0,   71,    0,   72,   73,   74,    0,    0,
    0,  480,    0,   76,    9,  130,  131,   77,    0,    0,
   13,    0,  601,   15,    0,    0,    0,    0,    0,    0,
   20,   21,    0,   22,   23,   24,   25,   26,   27,   28,
   29,   30,   31,   32,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,   45,    0,    0,    0,   47,   48,   49,
    0,    0,   52,   53,   54,   55,   56,   57,   58,   59,
   60,   61,   62,   63,    0,    0,    0,   64,   65,  479,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
   66,    0,    0,   67,    0,    0,    0,    0,    0,    0,
    0,    0,    0,   68,   69,    0,    0,    0,   70,    0,
    0,    0,    0,   71,    0,   72,   73,   74,    0,    0,
    0,   75,    0,   76,    9,  130,  131,   77,    0,    0,
   13,  409,  604,   15,    0,    0,    0,    0,    0,    0,
   20,   21,    0,   22,   23,   24,   25,   26,   27,   28,
   29,   30,   31,   32,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,   45,    0,    0,    0,   47,   48,   49,
    0,    0,   52,   53,   54,   55,   56,   57,   58,   59,
   60,   61,   62,   63,    0,    0,    0,   64,   65,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
   66,    0,    0,   67,    0,    0,    0,    0,    0,    0,
    0,    0,    0,   68,   69,    0,    0,    0,   70,    0,
    0,    0,    0,   71,    0,   72,   73,   74,    0,    0,
    0,  480,    0,   76,    9,  130,  131,   77,    0,    0,
   13,    0,    0,   15,    0,    0,    0,    0,    0,    0,
   20,   21,    0,   22,   23,   24,   25,   26,   27,   28,
   29,   30,   31,   32,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,   45,    0,    0,    0,   47,   48,   49,
    0,    0,   52,   53,   54,   55,   56,   57,   58,   59,
   60,   61,   62,   63,    0,    0,    0,   64,   65,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
   66,    0,    0,   67,    0,    0,    0,    0,    0,    0,
    0,    0,    0,   68,  281,    0,    0,    0,   70,    0,
    0,    0,    0,   71,    0,   72,   73,   74,    0,    0,
    0,   75,  160,   76,    9,  130,  131,   77,    0,    0,
   13,    0,    0,   15,  311,    0,    0,    0,    0,    0,
   20,   21,    0,   22,   23,   24,   25,   26,   27,   28,
   29,   30,   31,   32,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,   45,    0,    0,    0,   47,   48,   49,
    0,    0,   52,   53,   54,   55,   56,   57,   58,   59,
   60,   61,   62,   63,    0,    0,    0,   64,   65,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
   66,    0,    0,   67,    0,    0,    0,    0,    0,    0,
    0,    0,    0,   68,  281,    0,    0,    0,   70,    0,
    0,    0,    0,   71,    0,   72,   73,   74,    0,    0,
    0,   75,    0,   76,    9,  130,  131,   77,    0,    0,
   13,  409,    0,   15,    0,    0,    0,    0,    0,    0,
   20,   21,    0,   22,   23,   24,   25,   26,   27,   28,
   29,   30,   31,   32,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,   45,    0,    0,    0,   47,   48,   49,
    0,    0,   52,   53,   54,   55,   56,   57,   58,   59,
   60,   61,   62,   63,    0,    0,    0,   64,   65,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
   66,    0,    0,   67,    0,    0,    0,    0,    0,    0,
    0,    0,    0,   68,   69,    0,    0,    0,   70,    0,
    0,    0,    0,   71,    0,   72,   73,   74,    0,    0,
    0,   75,    0,   76,    9,  130,  131,   77,    0,    0,
   13,    0,    0,   15,    0,    0,    0,    0,    0,    0,
   20,   21,    0,   22,   23,   24,   25,   26,   27,   28,
   29,   30,   31,   32,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,   45,    0,    0,    0,   47,   48,   49,
    0,    0,   52,   53,   54,   55,   56,   57,   58,   59,
   60,   61,   62,   63,    0,    0,    0,   64,   65,  479,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
   66,    0,    0,   67,    0,    0,    0,    0,    0,    0,
    0,    0,    0,   68,   69,    0,    0,    0,   70,    0,
    0,    0,    0,   71,    0,   72,   73,   74,    0,    0,
    0,   75,    0,   76,    9,  130,  131,   77,    0,    0,
   13,  409,    0,   15,    0,    0,    0,    0,    0,    0,
   20,   21,    0,   22,   23,   24,   25,   26,   27,   28,
   29,   30,   31,   32,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,   45,    0,    0,    0,   47,   48,   49,
    0,    0,   52,   53,   54,   55,   56,   57,   58,   59,
   60,   61,   62,   63,    0,    0,    0,   64,   65,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
   66,    0,    0,   67,    0,    0,    0,    0,    0,    0,
    0,    0,    0,   68,   69,    0,    0,    0,   70,    0,
    0,    0,    0,   71,    0,   72,   73,   74,    0,    0,
    0,  480,    0,   76,    9,  130,  131,   77,    0,    0,
   13,    0,    0,   15,    0,    0,    0,    0,    0,    0,
   20,   21,    0,   22,   23,   24,   25,   26,   27,   28,
   29,   30,   31,   32,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,   45,    0,    0,    0,   47,   48,   49,
    0,    0,   52,   53,   54,   55,   56,   57,   58,   59,
   60,   61,   62,   63,    0,    0,    0,   64,   65,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
   66,    0,    0,   67,    0,    0,    0,    0,    0,    0,
    0,    0,    0,   68,   69,    0,    0,    0,   70,    9,
  130,  131,    0,   71,    0,   72,   73,   74,    0,    0,
    0,   75,    0,   76,    0,   20,   21,   77,   22,   23,
   24,   25,   26,   27,   28,   29,   30,   31,   32,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    9,
  130,  131,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,  431,  432,  188,   20,   21,    0,   22,   23,
   24,   25,   26,   27,   28,   29,   30,   31,   32,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,  206,    0,    0,    0,  426,    0,
    0,    0,    0,   48,  188,  189,    0,    0,  190,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,  191,
    0,    0,    0,  192,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,  193,    0,    0,  189,    0,    0,  190,    0,
  206,    0,    0,    0,    0,    0,    0,    0,    0,  191,
    0,    0,    0,  192,    0,  445,  207,  208,  209,  210,
  211,  212,  213,  214,  215,  216,  217,  218,  219,  220,
  221,  222,  193,  223,  224,  225,  226,  227,  228,  229,
  230,  231,  232,  233,  234,  235,  236,  237,  238,  239,
  240,    0,  241,  242,  243,    0,    0,  244,    0,  206,
  245,  246,    0,    0,    0,  247,    0,  248,  249,  250,
    0,  251,  207,  208,  209,  210,  211,  212,  213,  214,
  215,  216,  217,  218,  219,  220,  221,  222,  442,  223,
  224,  225,  226,  227,  228,  229,  230,  231,  232,  233,
  234,  235,  236,  237,  238,  239,  240,    0,  241,  242,
  243,    0,    0,  244,    0,    0,  245,  246,  276,    0,
    0,  247,    0,  248,  249,  250,    0,  251,  533,    0,
    0,  207,  208,  209,  210,  211,  212,  213,  214,  215,
  216,  217,  218,  219,  220,  221,  222,    0,  223,  224,
  225,  226,  227,  228,  229,  230,  231,  232,  233,  234,
  235,  236,  237,  238,  239,  240,    0,  241,  242,  243,
    0,    0,  244,    0,  206,  245,  246,    0,    0,    0,
  247,    0,  248,  249,  250,    0,  251,    0,    0,  276,
  276,  276,  276,  276,  276,  276,  276,  276,  276,  276,
  276,  276,  276,  276,  276,  276,    0,  276,  276,  276,
  276,  276,  276,  276,  276,  276,  276,  276,  276,  276,
  276,  276,  276,  276,  276,    0,  276,  276,  276,    0,
    0,  276,    0,    0,  276,  276,    0,    0,    0,  276,
    0,  276,  276,  276,    0,  276,  207,  208,  209,  210,
  211,  212,  213,  214,  215,  216,  217,  218,  219,  220,
  221,  222,    0,  223,  224,  225,  226,  227,  228,  229,
  230,  231,  232,  233,  234,  235,  236,  237,  238,  239,
  240,    0,  241,  242,  243,    0,    0,  244,    0,    0,
  245,  246,    0,    0,    0,  247,    0,  248,  249,  250,
    0,  251,
};
short yycheck[] = {                                       7,
   77,   34,  255,    7,   44,   44,   82,   87,  418,  265,
  256,  265,  534,  265,  167,  271,    7,  361,  265,  313,
  265,  268,  291,  270,  100,  271,  265,  290,  265,  187,
  270,  291,  265,  265,  291,  396,   44,   77,  291,  291,
  184,  291,  195,  123,   97,  307,  517,  291,  268,   45,
  313,  270,  291,   44,   50,  258,  267,  260,   66,   67,
  267,   69,   70,  407,  140,   44,  265,  143,   95,   77,
   66,   67,   68,   69,   70,   71,   72,   73,   74,  265,
  133,  268,  109,  110,  267,  290,   77,   95,  335,  336,
  337,  336,  337,  337,  313,  103,  598,  337,   77,  336,
  394,  109,  110,  247,  337,  270,  250,  354,  313,  354,
   84,  268,  267,  270,  313,  314,  315,  337,  337,  641,
  591,  267,   33,  265,   89,  394,  313,   38,   39,   40,
   41,  338,  634,  395,  394,   46,  267,  394,  388,  402,
  394,  388,  394,  265,  388,  268,  402,  394,  402,  394,
  336,  337,  338,  161,  394,  402,  402,  402,  166,  124,
  125,  126,  127,  402,  204,  161,  268,   78,   79,  402,
  402,  374,  337,  138,  201,  394,  184,  185,  588,  332,
  337,  189,  190,  191,  192,  193,  290,  291,  184,  389,
  265,  535,  338,  201,  336,  337,  204,  607,  265,  265,
  165,  267,  402,  402,  313,  435,  315,  338,  270,  313,
  206,  313,  354,  204,  337,  180,  402,  479,  318,  319,
  320,  321,  322,  300,  291,  204,  222,  223,  224,  225,
  226,  227,  228,  229,  230,  231,  232,  233,  234,  235,
  236,  237,  238,  239,  240,  241,  265,  255,  168,  393,
  337,  247,  394,  333,  250,  251,  252,  253,  334,  267,
  402,  419,  420,  267,  422,  423,  528,  290,  337,  265,
  500,  533,  338,  281,  387,  337,  268,  304,  274,  291,
  393,  268,  268,  291,  270,  281,  197,  198,  199,  265,
  313,  202,  268,  265,  270,  388,  304,  550,  331,  291,
  292,  388,  294,  295,  291,  291,  298,  389,  298,  270,
  291,  307,  394,  272,  273,  274,  275,  336,  337,  388,
  402,  265,  330,  288,  298,  265,  314,  315,  265,  290,
  291,  268,  313,  313,  292,  354,  294,  295,  378,  337,
  380,  381,  382,  382,  291,  292,  257,  294,  295,  313,
  314,  298,  313,  314,  305,  268,  396,  270,  313,  335,
  336,  337,  388,  389,  336,  337,  265,  265,  621,  484,
  378,  486,  380,  381,  382,  394,  337,  313,  354,  315,
  300,  313,  354,  402,  637,  388,  389,  378,  396,  380,
  381,  382,  336,  393,  647,  389,  336,  393,  313,  378,
  315,  380,  381,  382,  369,  396,  337,  660,  310,  311,
  354,  394,  388,  409,  354,  313,  314,  396,  394,  427,
  310,  311,  394,  450,  451,  394,  402,  388,  389,  402,
  402,  520,  521,  394,  313,  314,  315,  265,  471,  337,
  396,  402,  450,  451,  332,  313,  442,  393,  475,  445,
  394,  338,  313,   34,  394,  313,  314,  315,  402,  402,
  313,  268,  402,  313,  265,  430,  543,  475,  268,  509,
  503,  467,  268,  337,  514,  515,  268,  473,  518,  518,
  265,  393,  396,  479,  291,  292,  393,  294,  295,  387,
  393,  298,  393,  393,  468,  393,  388,  462,    0,  464,
  465,  509,  313,  310,  311,  513,  514,  515,  516,  513,
  518,  393,  516,  267,   95,  480,  524,  394,  509,  393,
  524,  337,  393,  514,  515,  388,  388,  518,  109,  110,
  509,  337,  528,  313,  394,  514,  515,  533,  534,  518,
  536,  313,  550,  379,  388,  394,  382,  383,  388,  626,
  627,  387,  394,  389,  390,  391,  596,  393,  268,  265,
  525,  265,  394,  559,  302,  402,  562,  541,  564,  402,
  544,  491,  394,  370,  394,  266,  394,  394,  552,  499,
  267,  555,  556,  268,  504,  338,  560,  401,  596,  563,
  586,  565,  600,  313,  270,  265,  600,  337,  606,  265,
  267,  337,  606,  402,  185,  596,  393,  265,  189,  190,
  191,  192,  193,  621,  265,  394,  393,  596,  394,  593,
  201,  394,  265,  290,  291,  394,  338,  547,  337,  637,
  337,  394,  337,  393,  265,  267,  313,  267,  267,  647,
  614,  267,  270,  268,  313,  641,  313,  268,  338,  394,
  624,  394,  660,  394,  400,  337,  268,  268,    0,  354,
  388,  265,  354,  313,  313,  354,  640,  632,  268,  643,
  354,  305,  592,  291,  594,  595,  298,  368,  369,  370,
  371,  372,  305,  374,  375,  376,  402,  661,  379,  291,
  388,  382,  383,  613,  402,  388,  387,  617,  389,  390,
  391,  338,  393,  265,  265,  313,  394,  313,  394,  629,
  268,  631,  268,  268,  268,  388,  268,  503,  354,  639,
  387,  388,  389,  304,  166,  276,  393,  394,  374,  375,
  376,  635,  599,  379,  609,  402,  382,  383,  416,  266,
  184,  387,  498,  389,  390,  391,  427,  393,  450,  330,
  331,  451,  417,  475,  256,  568,  515,  265,  260,  261,
  262,  274,  445,  265,  266,  267,  268,  269,   15,  271,
  272,  273,  274,  275,  276,  277,  533,  279,  280,  281,
  282,  283,  284,  285,  286,  287,  288,  289,  290,  291,
  292,  293,  294,  295,  519,  275,  298,  299,  300,  301,
  302,  303,  304,  305,  306,  307,  308,  309,  310,  311,
  312,  313,  314,  315,  316,  317,  318,  319,  320,  321,
  322,  323,  324,  325,  326,  327,  328,  329,    0,   -1,
   -1,  333,  334,  360,  361,  362,  363,  364,  365,  366,
  367,  368,  369,  370,  371,  372,  427,  374,  375,  376,
   -1,   -1,  379,   -1,  356,  382,  383,  359,  538,   -1,
  387,  536,  389,  390,  391,   -1,  393,  369,  370,  450,
  451,   -1,  374,   -1,   -1,   -1,   -1,  379,   -1,  381,
  382,  383,   -1,   -1,   -1,  387,   -1,  389,   -1,   -1,
  471,  393,   -1,   -1,  475,  397,  398,   -1,  400,  266,
  402,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,  256,   -1,   -1,   -1,  260,  261,
  262,   -1,  503,  265,  266,  267,  268,  269,   -1,  271,
  272,  273,  274,  275,  276,  277,   -1,  279,  280,  281,
  282,  283,  284,  285,  286,  287,  288,  289,  290,  291,
  292,  293,  294,  295,   -1,   -1,  298,  299,  300,  301,
  302,  303,  304,  305,  306,  307,  308,  309,  310,  311,
  312,  313,  314,  315,  316,  317,  318,  319,  320,  321,
  322,  323,  324,  325,  326,  327,  328,  329,   -1,   -1,
   -1,  333,  334,   -1,   -1,  362,  363,  364,  365,  366,
  367,  368,  369,  370,  371,  372,   -1,  374,  375,  376,
   -1,   -1,  379,   -1,  356,  382,  383,  359,   -1,   -1,
  387,   -1,  389,  390,  391,   -1,  393,  369,  370,   -1,
   -1,   -1,  374,   -1,   -1,   -1,   -1,  379,   -1,  381,
  382,  383,   -1,   -1,   -1,  387,   -1,  389,   -1,   -1,
   -1,  393,   -1,   -1,   -1,  397,  398,   -1,   -1,  401,
  402,   -1,   -1,   -1,   -1,  266,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,  256,   -1,   -1,   -1,  260,  261,
  262,   -1,   -1,  265,  266,  267,   -1,  269,   -1,  271,
  272,  273,  274,  275,  276,  277,   -1,  279,  280,  281,
  282,  283,  284,  285,  286,  287,  288,  289,  290,  291,
  292,  293,  294,  295,   -1,   -1,  298,  299,  300,  301,
  302,  303,  304,  305,  306,  307,  308,  309,   -1,   -1,
  312,  313,  314,  315,  316,  317,  318,  319,  320,  321,
  322,  323,  324,  325,  326,  327,  328,  329,   -1,   -1,
   -1,  333,  334,   -1,   -1,  366,  367,  368,  369,  370,
  371,  372,   -1,  374,  375,  376,   -1,   -1,  379,   -1,
   -1,  382,  383,   -1,  356,   -1,  387,  359,  389,  390,
  391,   -1,  393,   -1,   -1,   -1,   -1,  369,  370,   -1,
   -1,   -1,  374,   -1,   -1,   -1,   -1,  379,  266,  381,
  382,  383,  260,  261,  262,  387,   -1,  389,   -1,   -1,
   -1,  393,   -1,   -1,   -1,  397,  398,   -1,  276,  277,
   -1,  279,  280,  281,  282,  283,  284,  285,  286,  287,
  288,  289,  290,   -1,  292,   -1,  294,  295,   -1,   -1,
  298,   -1,  260,  261,  262,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,  313,  314,  315,  276,  277,
   -1,  279,  280,  281,  282,  283,  284,  285,  286,  287,
  288,  289,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,  313,  314,  315,  356,   -1,
   -1,  359,  370,  371,  372,   -1,  374,  375,  376,   -1,
   -1,  379,  370,   -1,  382,  383,  374,   -1,   -1,  387,
   -1,  389,  390,  391,   -1,  393,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,  393,   -1,   -1,  356,   -1,
   -1,  359,   -1,   -1,  402,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,  370,   -1,   -1,   -1,  374,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,  393,  260,  261,  262,   -1,
   -1,  265,  266,  267,  402,  269,   -1,   -1,  272,  273,
  274,  275,  276,  277,   -1,  279,  280,  281,  282,  283,
  284,  285,  286,  287,  288,  289,  290,  291,  292,  293,
  294,  295,   -1,   -1,  298,  299,  300,  301,  302,  303,
  304,  305,  306,  307,  308,  309,   -1,   -1,  312,  313,
  314,  315,  316,  317,  318,  319,  320,  321,  322,  323,
  324,  325,  326,  327,  328,  329,   -1,   -1,   -1,  333,
  334,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,  356,   -1,   -1,  359,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,  369,  370,   -1,   -1,   -1,
  374,   -1,   -1,   -1,   -1,  379,   -1,  381,  382,  383,
   -1,   -1,   -1,  387,   -1,  389,   -1,   -1,   -1,  393,
  260,  261,  262,  397,  398,  265,  266,  267,   -1,  269,
   -1,   -1,  272,  273,  274,  275,  276,  277,   -1,  279,
  280,  281,  282,  283,  284,  285,  286,  287,  288,  289,
  290,   -1,   -1,  293,   -1,   -1,   -1,   -1,   -1,  299,
  300,  301,  302,  303,  304,  305,  306,  307,  308,  309,
   -1,   -1,  312,  313,  314,  315,  316,  317,  318,  319,
  320,  321,  322,  323,  324,  325,  326,  327,  328,  329,
   -1,   -1,   -1,  333,  334,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,  356,   -1,   -1,  359,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  369,
  370,   -1,   -1,   -1,  374,   -1,   -1,   -1,   -1,  379,
   -1,  381,  382,  383,   -1,   -1,   -1,  387,   -1,  389,
   -1,   -1,   -1,  393,  260,  261,  262,  397,  398,  265,
  266,  267,   -1,  269,   -1,   -1,  272,  273,  274,  275,
  276,  277,   -1,  279,  280,  281,  282,  283,  284,  285,
  286,  287,  288,  289,  290,   -1,   -1,  293,   -1,   -1,
   -1,   -1,   -1,  299,  300,  301,  302,  303,  304,  305,
  306,  307,  308,  309,   -1,   -1,  312,  313,  314,  315,
   -1,   -1,  318,  319,  320,  321,  322,  323,  324,  325,
  326,  327,  328,  329,   -1,   -1,   -1,  333,  334,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
  356,   -1,   -1,  359,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,  369,  370,   -1,   -1,   -1,  374,   -1,
   -1,   -1,   -1,  379,   -1,  381,  382,  383,   -1,   -1,
   -1,  387,   -1,  389,   -1,   -1,   -1,  393,  260,  261,
  262,  397,  398,  265,  266,  267,   -1,  269,   -1,   -1,
  272,  273,  274,  275,  276,  277,   -1,  279,  280,  281,
  282,  283,  284,  285,  286,  287,  288,  289,  290,   -1,
   -1,  293,   -1,   -1,   -1,   -1,   -1,  299,  300,  301,
  302,  303,  304,  305,  306,  307,  308,  309,   -1,   -1,
  312,  313,  314,  315,   -1,   -1,  318,  319,  320,  321,
  322,  323,  324,  325,  326,  327,  328,  329,   -1,   -1,
   -1,  333,  334,  265,  266,   -1,  268,   -1,  270,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,  356,   -1,   -1,  359,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,  369,  370,   -1,
   -1,   -1,  374,   -1,   -1,   -1,   -1,  379,   -1,  381,
  382,  383,   -1,   -1,   -1,  387,   -1,  389,   -1,   -1,
   -1,  393,   -1,   -1,   -1,  397,  398,   -1,  265,  266,
   -1,   -1,   -1,  335,  336,  337,  338,  339,  340,  341,
  342,  343,  344,  345,  346,  347,  348,  349,  350,  351,
  352,  353,  354,  355,  356,  357,  358,  359,  360,  361,
  362,  363,  364,  365,  366,  367,  368,  369,  370,  371,
  372,   -1,  374,  375,  376,   -1,   -1,  379,   -1,   -1,
  382,  383,   -1,   -1,   -1,  387,  388,  389,  390,  391,
   -1,  393,  394,  265,  266,   -1,  268,   -1,  270,   -1,
  402,  338,  339,  340,  341,  342,  343,  344,  345,  346,
  347,  348,  349,  350,  351,  352,  353,   -1,  355,  356,
  357,  358,  359,  360,  361,  362,  363,  364,  365,  366,
  367,  368,  369,  370,  371,  372,   -1,  374,  375,  376,
   -1,   -1,  379,   -1,   -1,  382,  383,   -1,   -1,   -1,
  387,   -1,  389,  390,  391,   -1,  393,   -1,  266,   -1,
  268,   -1,  270,  335,  336,  337,  338,  339,  340,  341,
  342,  343,  344,  345,  346,  347,  348,  349,  350,  351,
  352,  353,  354,  355,  356,  357,  358,  359,  360,  361,
  362,  363,  364,  365,  366,  367,  368,  369,  370,  371,
  372,   -1,  374,  375,  376,   -1,   -1,  379,   -1,   -1,
  382,  383,   -1,   -1,   -1,  387,  388,  389,  390,  391,
   -1,  393,  394,  265,  266,   -1,  268,  335,  270,  337,
  402,  339,  340,  341,  342,  343,  344,  345,  346,  347,
  348,  349,  350,  351,  352,  353,   -1,  355,  356,  357,
  358,  359,  360,  361,  362,  363,  364,  365,  366,  367,
  368,  369,  370,  371,  372,   -1,  374,  375,  376,   -1,
   -1,  379,   -1,   -1,  382,  383,   -1,   -1,   -1,  387,
   -1,  389,  390,  391,   -1,  393,   -1,   -1,   -1,   -1,
  266,   -1,   -1,  335,  336,  337,  338,  339,  340,  341,
  342,  343,  344,  345,  346,  347,  348,  349,  350,  351,
  352,  353,  354,  355,  356,  357,  358,  359,  360,  361,
  362,  363,  364,  365,  366,  367,  368,  369,  370,  371,
  372,   -1,  374,  375,  376,   -1,   -1,  379,   -1,   -1,
  382,  383,   -1,   -1,   -1,  387,  388,  389,  390,  391,
   -1,  393,  394,  265,  266,   -1,  268,   -1,  270,   -1,
  402,  337,  338,  339,  340,  341,  342,  343,  344,  345,
  346,  347,  348,  349,  350,  351,  352,  353,   -1,  355,
  356,  357,  358,  359,  360,  361,  362,  363,  364,  365,
  366,  367,  368,  369,  370,  371,  372,   -1,  374,  375,
  376,   -1,   -1,  379,   -1,   -1,  382,  383,   -1,   -1,
   -1,  387,   -1,  389,  390,  391,   -1,  393,   -1,   -1,
  266,   -1,   -1,  335,  336,  337,  338,  339,  340,  341,
  342,  343,  344,  345,  346,  347,  348,  349,  350,  351,
  352,  353,  354,  355,  356,  357,  358,  359,  360,  361,
  362,  363,  364,  365,  366,  367,  368,  369,  370,  371,
  372,   -1,  374,  375,  376,   -1,   -1,  379,   -1,   -1,
  382,  383,   -1,   -1,   -1,  387,  388,  389,  390,  391,
   -1,  393,  394,  265,  266,   -1,  268,   -1,  270,   -1,
  402,  337,  338,  339,  340,  341,  342,  343,  344,  345,
  346,  347,  348,  349,  350,  351,  352,  353,   -1,  355,
  356,  357,  358,  359,  360,  361,  362,  363,  364,  365,
  366,  367,  368,  369,  370,  371,  372,   -1,  374,  375,
  376,   -1,  266,  379,   -1,   -1,  382,  383,   -1,   -1,
   -1,  387,   -1,  389,  390,  391,   -1,  393,   -1,   -1,
   -1,   -1,   -1,  335,  336,  337,  338,  339,  340,  341,
  342,  343,  344,  345,  346,  347,  348,  349,  350,  351,
  352,  353,  354,  355,  356,  357,  358,  359,  360,  361,
  362,  363,  364,  365,  366,  367,  368,  369,  370,  371,
  372,   -1,  374,  375,  376,  265,  266,   -1,  268,   -1,
  270,   -1,   -1,   -1,   -1,   -1,  388,   -1,   -1,   -1,
   -1,   -1,  394,   -1,   -1,   -1,   -1,   -1,   -1,  353,
  402,  355,  356,  357,  358,  359,  360,  361,  362,  363,
  364,  365,  366,  367,  368,  369,  370,  371,  372,   -1,
  374,  375,  376,  266,   -1,  379,   -1,   -1,  382,  383,
   -1,   -1,   -1,  387,   -1,  389,  390,  391,   -1,  393,
   -1,   -1,   -1,   -1,   -1,  335,  336,  337,  338,  339,
  340,  341,  342,  343,  344,  345,  346,  347,  348,  349,
  350,  351,  352,  353,  354,  355,  356,  357,  358,  359,
  360,  361,  362,  363,  364,  365,  366,  367,  368,  369,
  370,  371,  372,   -1,  374,  375,  376,  265,  266,   -1,
  268,   -1,  270,   -1,   -1,   -1,   -1,   -1,  388,   -1,
   -1,   -1,   -1,   -1,  394,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,  402,  356,  357,  358,  359,  360,  361,  362,
  363,  364,  365,  366,  367,  368,  369,  370,  371,  372,
   -1,  374,  375,  376,  266,   -1,  379,   -1,   -1,  382,
  383,   -1,   -1,   -1,  387,   -1,  389,  390,  391,   -1,
  393,   -1,   -1,   -1,   -1,   -1,   -1,  335,  336,  337,
  338,  339,  340,  341,  342,  343,  344,  345,  346,  347,
  348,  349,  350,  351,  352,  353,  354,  355,  356,  357,
  358,  359,  360,  361,  362,  363,  364,  365,  366,  367,
  368,  369,  370,  371,  372,   -1,  374,  375,  376,  265,
  266,   -1,  268,   -1,  270,   -1,   -1,   -1,   -1,   -1,
  388,   -1,   -1,   -1,   -1,   -1,  394,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,  402,  357,  358,  359,  360,  361,
  362,  363,  364,  365,  366,  367,  368,  369,  370,  371,
  372,   -1,  374,  375,  376,  266,   -1,  379,   -1,   -1,
  382,  383,   -1,   -1,   -1,  387,   -1,  389,  390,  391,
   -1,  393,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  335,
  336,  337,  338,  339,  340,  341,  342,  343,  344,  345,
  346,  347,  348,  349,  350,  351,  352,  353,  354,  355,
  356,  357,  358,  359,  360,  361,  362,  363,  364,  365,
  366,  367,  368,  369,  370,  371,  372,   -1,  374,  375,
  376,  265,  266,   -1,  268,   -1,  270,   -1,   -1,   -1,
   -1,   -1,  388,   -1,   -1,   -1,   -1,   -1,  394,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,  402,  358,  359,  360,
  361,  362,  363,  364,  365,  366,  367,  368,  369,  370,
  371,  372,   -1,  374,  375,  376,  266,   -1,  379,   -1,
   -1,  382,  383,   -1,   -1,   -1,  387,   -1,  389,  390,
  391,   -1,  393,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,  335,  336,  337,  338,  339,  340,  341,  342,  343,
  344,  345,  346,  347,  348,  349,  350,  351,  352,  353,
  354,  355,  356,  357,  358,  359,  360,  361,  362,  363,
  364,  365,  366,  367,  368,  369,  370,  371,  372,   -1,
  374,  375,  376,  265,  266,   -1,  268,   -1,  270,   -1,
   -1,   -1,   -1,   -1,  388,   -1,   -1,   -1,   -1,   -1,
  394,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  402,  359,
  360,  361,  362,  363,  364,  365,  366,  367,  368,  369,
  370,  371,  372,   -1,  374,  375,  376,   -1,   -1,  379,
   -1,   -1,  382,  383,   -1,   -1,   -1,  387,   -1,  389,
  390,  391,   -1,  393,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,  335,  336,  337,  338,  339,  340,  341,
  342,  343,  344,  345,  346,  347,  348,  349,  350,  351,
  352,  353,  354,  355,  356,  357,  358,  359,  360,  361,
  362,  363,  364,  365,  366,  367,  368,  369,  370,  371,
  372,   -1,  374,  375,  376,  265,  266,   -1,  268,   -1,
  270,   -1,   -1,   -1,   -1,   -1,  388,   -1,   -1,   -1,
   -1,   -1,  394,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
  402,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,  335,  336,  337,  338,  339,
  340,  341,  342,  343,  344,  345,  346,  347,  348,  349,
  350,  351,  352,  353,  354,  355,  356,  357,  358,  359,
  360,  361,  362,  363,  364,  365,  366,  367,  368,  369,
  370,  371,  372,   -1,  374,  375,  376,  265,  266,   -1,
  268,   -1,  270,   -1,   -1,   -1,   -1,   -1,  388,   -1,
   -1,   -1,   -1,   -1,  394,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,  402,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,  335,  336,  337,
  338,  339,  340,  341,  342,  343,  344,  345,  346,  347,
  348,  349,  350,  351,  352,  353,  354,  355,  356,  357,
  358,  359,  360,  361,  362,  363,  364,  365,  366,  367,
  368,  369,  370,  371,  372,   -1,  374,  375,  376,  265,
  266,   -1,  268,   -1,  270,   -1,   -1,   -1,   -1,   -1,
  388,   -1,   -1,   -1,   -1,   -1,  394,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,  402,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  335,
  336,  337,  338,  339,  340,  341,  342,  343,  344,  345,
  346,  347,  348,  349,  350,  351,  352,  353,  354,  355,
  356,  357,  358,  359,  360,  361,  362,  363,  364,  365,
  366,  367,  368,  369,  370,  371,  372,   -1,  374,  375,
  376,  265,  266,   -1,  268,   -1,  270,   -1,   -1,   -1,
   -1,   -1,  388,   -1,   -1,   -1,   -1,   -1,  394,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,  402,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,  335,  336,  337,  338,  339,  340,  341,  342,  343,
  344,  345,  346,  347,  348,  349,  350,  351,  352,  353,
  354,  355,  356,  357,  358,  359,  360,  361,  362,  363,
  364,  365,  366,  367,  368,  369,  370,  371,  372,   -1,
  374,  375,  376,  265,  266,   -1,  268,   -1,  270,   -1,
   -1,   -1,   -1,   -1,  388,   -1,   -1,   -1,   -1,   -1,
  394,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  402,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,  335,  336,  337,  338,  339,  340,  341,
  342,  343,  344,  345,  346,  347,  348,  349,  350,  351,
  352,  353,  354,  355,  356,  357,  358,  359,  360,  361,
  362,  363,  364,  365,  366,  367,  368,  369,  370,  371,
  372,  265,  266,   -1,  268,   -1,  270,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,  388,   -1,   -1,   -1,
   -1,   -1,  394,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
  402,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,  335,  336,  337,  338,  339,  340,  341,  342,  343,
  344,  345,  346,  347,  348,  349,  350,  351,  352,  353,
  354,  355,  356,  357,  358,  359,  360,  361,  362,  363,
  364,  365,  366,  367,  368,  369,  370,  371,  372,  265,
  266,   -1,  268,   -1,  270,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,  388,   -1,   -1,   -1,   -1,   -1,
  394,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  402,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  335,
  336,  337,  338,  339,  340,  341,  342,  343,  344,  345,
  346,  347,  348,  349,  350,  351,  352,  353,  354,  355,
  356,  357,  358,  359,  360,  361,  362,  363,  364,  365,
  366,  367,  368,  369,  370,  371,  372,  265,  266,   -1,
  268,   -1,  270,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,  388,   -1,   -1,   -1,   -1,   -1,  394,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,  402,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,  335,  336,  337,
  338,  339,  340,  341,  342,  343,  344,  345,  346,  347,
  348,  349,  350,  351,  352,  353,  354,  355,  356,  357,
  358,  359,  360,  361,  362,  363,  364,  365,  366,  367,
  368,  369,  370,  371,  372,  265,  266,   -1,  268,   -1,
  270,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
  388,   -1,   -1,   -1,   -1,   -1,  394,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,  402,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,  335,  336,  337,  338,  339,
  340,  341,  342,  343,  344,  345,  346,  347,  348,  349,
  350,  351,  352,  353,  354,  355,  356,  357,  358,  359,
  360,  361,  362,  363,  364,  365,  366,  367,  368,  369,
  370,  371,  372,  265,   -1,   -1,  268,   -1,  270,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  388,   -1,
   -1,   -1,   -1,   -1,  394,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,  402,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,  335,  336,  337,  338,  339,  340,  341,
  342,  343,  344,  345,  346,  347,  348,  349,  350,  351,
  352,  353,  354,  355,  356,  357,  358,  359,  360,  361,
  362,  363,  364,  365,  366,  367,  368,  369,  265,   -1,
   -1,  268,   -1,  270,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,  388,   -1,   -1,   -1,
   -1,   -1,  394,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
  402,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  335,  336,
  337,  338,  339,  340,  341,  342,  343,  344,  345,  346,
  347,  348,  349,  350,  351,  352,  353,  354,  355,  356,
  357,  358,  359,  360,  361,  362,  363,  364,  365,  366,
  367,  368,  369,  265,   -1,   -1,  268,   -1,  270,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,  260,  261,  262,
   -1,  388,   -1,   -1,   -1,   -1,   -1,  394,   -1,   -1,
   -1,   -1,   -1,  276,  277,  402,  279,  280,  281,  282,
  283,  284,  285,  286,  287,  288,  289,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,  314,  315,  335,  336,  337,  338,  339,  340,  341,
  342,  343,  344,  345,  346,  347,  348,  349,  350,  351,
  352,  353,  354,  355,  356,  357,  358,  359,  360,  361,
  362,  363,  364,  365,  366,  367,  265,   -1,   -1,  268,
   -1,  270,   -1,  356,   -1,   -1,  359,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,  388,  370,   -1,   -1,
   -1,  374,  394,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
  402,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
  393,  394,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,  335,  336,  337,  338,
  339,  340,  341,  342,  343,  344,  345,  346,  347,  348,
  349,  350,  351,  352,  353,  354,  355,  356,  357,  358,
  359,  360,  361,  362,  363,  364,  365,  366,  367,  265,
   -1,   -1,  268,   -1,  270,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  388,
   -1,   -1,   -1,   -1,   -1,  394,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,  402,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  335,
  336,  337,  338,  339,  340,  341,  342,  343,  344,  345,
  346,  347,  348,  349,  350,  351,  352,  353,  354,  355,
  356,  357,  358,  359,  360,  361,  362,  363,  364,  365,
  265,   -1,   -1,  268,   -1,  270,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,  388,   -1,   -1,   -1,   -1,   -1,  394,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,  402,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
  335,  336,  337,  338,  339,  340,  341,  342,  343,  344,
  345,  346,  347,  348,  349,  350,  351,  352,  353,  354,
  355,  356,  357,  358,  359,  360,  361,  362,  363,  364,
  365,  265,   -1,   -1,  268,   -1,  270,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,  388,   -1,   -1,   -1,   -1,   -1,  394,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,  402,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,  335,  336,  337,  338,  339,  340,  341,  342,  343,
  344,  345,  346,  347,  348,  349,  350,  351,  352,  353,
  354,  355,  356,  357,  358,  359,  360,  361,  362,  363,
  364,  365,  265,   -1,   -1,  268,   -1,  270,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,  388,   -1,   -1,   -1,   -1,   -1,
  394,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  402,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,  335,  336,  337,  338,  339,  340,  341,  342,
  343,  344,  345,  346,  347,  348,  349,  350,  351,  352,
  353,  354,  355,  356,  357,  358,  359,  360,  361,  362,
  363,  364,  365,  265,   -1,   -1,  268,   -1,  270,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,  388,   -1,   -1,   -1,   -1,
   -1,  394,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  402,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,  335,  336,  337,  338,  339,  340,  341,
  342,  343,  344,  345,  346,  347,  348,  349,  350,  351,
  352,  353,  354,  355,  356,  357,  358,  359,  360,  361,
  265,   -1,   -1,  268,   -1,  270,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,  388,   -1,  265,   -1,
   -1,  268,  394,  270,   -1,   -1,   -1,   -1,   -1,   -1,
  402,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
  335,  336,  337,  338,  339,  340,  341,  342,  343,  344,
  345,  346,  347,  348,  349,  350,  351,  352,  353,  354,
  355,  356,  357,  358,  359,  360,  361,   -1,  335,  336,
  337,  338,  339,  340,  341,  342,  343,  344,  345,  346,
  347,  348,  349,  350,  351,  352,  353,  354,  355,  356,
  357,  358,  359,  388,   -1,  265,   -1,   -1,  268,  394,
  270,   -1,   -1,   -1,   -1,   -1,   -1,  402,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  265,
   -1,  388,  268,   -1,  270,   -1,   -1,  394,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,  402,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,  335,  336,  337,  338,  339,
  340,  341,  342,  343,  344,  345,  346,  347,  348,  349,
  350,  351,  352,  353,  354,  355,  356,  357,  358,  335,
  336,  337,  338,  339,  340,  341,  342,  343,  344,  345,
  346,  347,  348,  349,  350,  351,  352,  353,  354,  355,
  356,  357,  265,   -1,   -1,  268,   -1,  270,  388,   -1,
   -1,   -1,   -1,   -1,  394,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,  402,   -1,  265,   -1,   -1,  268,   -1,  270,
   -1,   -1,  388,   -1,   -1,   -1,   -1,   -1,  394,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,  402,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,  335,  336,  337,  338,  339,  340,  341,  342,
  343,  344,  345,  346,  347,  348,  349,  350,  351,  352,
  353,  354,  355,  356,  335,  336,  337,  338,  339,  340,
  341,  342,  343,  344,  345,  346,  347,  348,  349,  350,
  351,  352,  353,  354,  355,  265,   -1,   -1,  268,   -1,
  270,   -1,   -1,   -1,   -1,  388,   -1,   -1,   -1,   -1,
   -1,  394,   -1,   -1,   -1,  265,   -1,   -1,  268,  402,
  270,   -1,   -1,   -1,   -1,   -1,   -1,  388,   -1,   -1,
   -1,   -1,   -1,  394,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,  402,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,  335,  336,  337,  338,  339,
  340,  341,  342,  343,  344,  345,  346,  347,  348,  349,
  350,  351,  352,   -1,  354,  335,  336,  337,  338,  339,
  340,  341,  342,  343,  344,  345,  346,  347,  348,  349,
  350,  351,  352,   -1,  354,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  388,   -1,
   -1,   -1,   -1,   -1,  394,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,  402,   -1,  260,  261,  262,   -1,  388,   -1,
  266,  267,   -1,  269,  394,   -1,  272,  273,  274,  275,
  276,  277,  402,  279,  280,  281,  282,  283,  284,  285,
  286,  287,  288,  289,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,  299,  300,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,  309,   -1,   -1,   -1,  313,  314,  315,
   -1,   -1,  318,  319,  320,  321,  322,  323,  324,  325,
  326,  327,  328,  329,   -1,   -1,   -1,  333,  334,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
  356,   -1,   -1,  359,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,  369,  370,   -1,   -1,   -1,  374,   -1,
   -1,   -1,   -1,  379,   -1,  381,  382,  383,   -1,   -1,
   -1,  387,   -1,  389,  260,  261,  262,  393,   -1,   -1,
  266,   -1,   -1,  269,   -1,   -1,  272,  273,  274,  275,
  276,  277,   -1,  279,  280,  281,  282,  283,  284,  285,
  286,  287,  288,  289,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,  299,  300,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,  309,   -1,   -1,   -1,  313,  314,  315,
   -1,   -1,  318,  319,  320,  321,  322,  323,  324,  325,
  326,  327,  328,  329,   -1,   -1,   -1,  333,  334,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
  356,   -1,   -1,  359,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,  369,  370,   -1,   -1,   -1,  374,   -1,
   -1,   -1,   -1,  379,   -1,  381,  382,  383,   -1,   -1,
   -1,  387,   -1,  389,  260,  261,  262,  393,   -1,   -1,
  266,  267,  268,  269,   -1,   -1,   -1,   -1,   -1,   -1,
  276,  277,   -1,  279,  280,  281,  282,  283,  284,  285,
  286,  287,  288,  289,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,  309,   -1,   -1,   -1,  313,  314,  315,
   -1,   -1,  318,  319,  320,  321,  322,  323,  324,  325,
  326,  327,  328,  329,   -1,   -1,   -1,  333,  334,  335,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
  356,   -1,   -1,  359,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,  369,  370,   -1,   -1,   -1,  374,   -1,
   -1,   -1,   -1,  379,   -1,  381,  382,  383,   -1,   -1,
   -1,  387,   -1,  389,  260,  261,  262,  393,   -1,   -1,
  266,   -1,  268,  269,   -1,   -1,   -1,   -1,   -1,   -1,
  276,  277,   -1,  279,  280,  281,  282,  283,  284,  285,
  286,  287,  288,  289,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,  309,   -1,   -1,   -1,  313,  314,  315,
   -1,   -1,  318,  319,  320,  321,  322,  323,  324,  325,
  326,  327,  328,  329,   -1,   -1,   -1,  333,  334,  335,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
  356,   -1,   -1,  359,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,  369,  370,   -1,   -1,   -1,  374,   -1,
   -1,   -1,   -1,  379,   -1,  381,  382,  383,   -1,   -1,
   -1,  387,   -1,  389,  260,  261,  262,  393,   -1,   -1,
  266,  267,  268,  269,   -1,   -1,   -1,   -1,   -1,   -1,
  276,  277,   -1,  279,  280,  281,  282,  283,  284,  285,
  286,  287,  288,  289,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,  309,   -1,   -1,   -1,  313,  314,  315,
   -1,   -1,  318,  319,  320,  321,  322,  323,  324,  325,
  326,  327,  328,  329,   -1,   -1,   -1,  333,  334,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
  356,   -1,   -1,  359,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,  369,  370,   -1,   -1,   -1,  374,   -1,
   -1,   -1,   -1,  379,   -1,  381,  382,  383,   -1,   -1,
   -1,  387,   -1,  389,  260,  261,  262,  393,   -1,   -1,
  266,   -1,   -1,  269,   -1,   -1,   -1,   -1,   -1,   -1,
  276,  277,   -1,  279,  280,  281,  282,  283,  284,  285,
  286,  287,  288,  289,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,  309,   -1,   -1,   -1,  313,  314,  315,
   -1,   -1,  318,  319,  320,  321,  322,  323,  324,  325,
  326,  327,  328,  329,   -1,   -1,   -1,  333,  334,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
  356,   -1,   -1,  359,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,  369,  370,   -1,   -1,   -1,  374,   -1,
   -1,   -1,   -1,  379,   -1,  381,  382,  383,   -1,   -1,
   -1,  387,  388,  389,  260,  261,  262,  393,   -1,   -1,
  266,   -1,   -1,  269,  270,   -1,   -1,   -1,   -1,   -1,
  276,  277,   -1,  279,  280,  281,  282,  283,  284,  285,
  286,  287,  288,  289,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,  309,   -1,   -1,   -1,  313,  314,  315,
   -1,   -1,  318,  319,  320,  321,  322,  323,  324,  325,
  326,  327,  328,  329,   -1,   -1,   -1,  333,  334,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
  356,   -1,   -1,  359,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,  369,  370,   -1,   -1,   -1,  374,   -1,
   -1,   -1,   -1,  379,   -1,  381,  382,  383,   -1,   -1,
   -1,  387,   -1,  389,  260,  261,  262,  393,   -1,   -1,
  266,  267,   -1,  269,   -1,   -1,   -1,   -1,   -1,   -1,
  276,  277,   -1,  279,  280,  281,  282,  283,  284,  285,
  286,  287,  288,  289,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,  309,   -1,   -1,   -1,  313,  314,  315,
   -1,   -1,  318,  319,  320,  321,  322,  323,  324,  325,
  326,  327,  328,  329,   -1,   -1,   -1,  333,  334,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
  356,   -1,   -1,  359,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,  369,  370,   -1,   -1,   -1,  374,   -1,
   -1,   -1,   -1,  379,   -1,  381,  382,  383,   -1,   -1,
   -1,  387,   -1,  389,  260,  261,  262,  393,   -1,   -1,
  266,   -1,   -1,  269,   -1,   -1,   -1,   -1,   -1,   -1,
  276,  277,   -1,  279,  280,  281,  282,  283,  284,  285,
  286,  287,  288,  289,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,  309,   -1,   -1,   -1,  313,  314,  315,
   -1,   -1,  318,  319,  320,  321,  322,  323,  324,  325,
  326,  327,  328,  329,   -1,   -1,   -1,  333,  334,  335,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
  356,   -1,   -1,  359,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,  369,  370,   -1,   -1,   -1,  374,   -1,
   -1,   -1,   -1,  379,   -1,  381,  382,  383,   -1,   -1,
   -1,  387,   -1,  389,  260,  261,  262,  393,   -1,   -1,
  266,  267,   -1,  269,   -1,   -1,   -1,   -1,   -1,   -1,
  276,  277,   -1,  279,  280,  281,  282,  283,  284,  285,
  286,  287,  288,  289,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,  309,   -1,   -1,   -1,  313,  314,  315,
   -1,   -1,  318,  319,  320,  321,  322,  323,  324,  325,
  326,  327,  328,  329,   -1,   -1,   -1,  333,  334,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
  356,   -1,   -1,  359,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,  369,  370,   -1,   -1,   -1,  374,   -1,
   -1,   -1,   -1,  379,   -1,  381,  382,  383,   -1,   -1,
   -1,  387,   -1,  389,  260,  261,  262,  393,   -1,   -1,
  266,   -1,   -1,  269,   -1,   -1,   -1,   -1,   -1,   -1,
  276,  277,   -1,  279,  280,  281,  282,  283,  284,  285,
  286,  287,  288,  289,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,  309,   -1,   -1,   -1,  313,  314,  315,
   -1,   -1,  318,  319,  320,  321,  322,  323,  324,  325,
  326,  327,  328,  329,   -1,   -1,   -1,  333,  334,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
  356,   -1,   -1,  359,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,  369,  370,   -1,   -1,   -1,  374,  260,
  261,  262,   -1,  379,   -1,  381,  382,  383,   -1,   -1,
   -1,  387,   -1,  389,   -1,  276,  277,  393,  279,  280,
  281,  282,  283,  284,  285,  286,  287,  288,  289,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  260,
  261,  262,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,  313,  314,  315,  276,  277,   -1,  279,  280,
  281,  282,  283,  284,  285,  286,  287,  288,  289,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,  266,   -1,   -1,   -1,  270,   -1,
   -1,   -1,   -1,  314,  315,  356,   -1,   -1,  359,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  370,
   -1,   -1,   -1,  374,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,  393,   -1,   -1,  356,   -1,   -1,  359,   -1,
  266,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  370,
   -1,   -1,   -1,  374,   -1,  337,  338,  339,  340,  341,
  342,  343,  344,  345,  346,  347,  348,  349,  350,  351,
  352,  353,  393,  355,  356,  357,  358,  359,  360,  361,
  362,  363,  364,  365,  366,  367,  368,  369,  370,  371,
  372,   -1,  374,  375,  376,   -1,   -1,  379,   -1,  266,
  382,  383,   -1,   -1,   -1,  387,   -1,  389,  390,  391,
   -1,  393,  338,  339,  340,  341,  342,  343,  344,  345,
  346,  347,  348,  349,  350,  351,  352,  353,  354,  355,
  356,  357,  358,  359,  360,  361,  362,  363,  364,  365,
  366,  367,  368,  369,  370,  371,  372,   -1,  374,  375,
  376,   -1,   -1,  379,   -1,   -1,  382,  383,  266,   -1,
   -1,  387,   -1,  389,  390,  391,   -1,  393,  335,   -1,
   -1,  338,  339,  340,  341,  342,  343,  344,  345,  346,
  347,  348,  349,  350,  351,  352,  353,   -1,  355,  356,
  357,  358,  359,  360,  361,  362,  363,  364,  365,  366,
  367,  368,  369,  370,  371,  372,   -1,  374,  375,  376,
   -1,   -1,  379,   -1,  266,  382,  383,   -1,   -1,   -1,
  387,   -1,  389,  390,  391,   -1,  393,   -1,   -1,  337,
  338,  339,  340,  341,  342,  343,  344,  345,  346,  347,
  348,  349,  350,  351,  352,  353,   -1,  355,  356,  357,
  358,  359,  360,  361,  362,  363,  364,  365,  366,  367,
  368,  369,  370,  371,  372,   -1,  374,  375,  376,   -1,
   -1,  379,   -1,   -1,  382,  383,   -1,   -1,   -1,  387,
   -1,  389,  390,  391,   -1,  393,  338,  339,  340,  341,
  342,  343,  344,  345,  346,  347,  348,  349,  350,  351,
  352,  353,   -1,  355,  356,  357,  358,  359,  360,  361,
  362,  363,  364,  365,  366,  367,  368,  369,  370,  371,
  372,   -1,  374,  375,  376,   -1,   -1,  379,   -1,   -1,
  382,  383,   -1,   -1,   -1,  387,   -1,  389,  390,  391,
   -1,  393,
};
#define YYFINAL 1
#ifndef YYDEBUG
#define YYDEBUG 0
#endif
#define YYMAXTOKEN 402
#if YYDEBUG
char *yyname[] = {
"end-of-file",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"VAR","EXPR","ARRAY","STRUCT",
"UNION","ENUM","COMP","HASH","SEMI","MOD","OC","CC","DOLLAR","DOTDOTDOT",
"ENDFILE","GLOBAL","AUTO","STATIC","CONST","POLY","INTEGER","NATURAL",
"RATIONAL","REAL","STRING","FOREIGN","FILET","MUTEX","SEMAPHORE","CONTINUATION",
"THREAD","VOID","BOOL","FUNCTION","FUNC","EXCEPTION","RAISE","TYPEDEF","IMPORT",
"NEW","ANONINIT","NAMESPACE","PUBLIC","PROTECTED","EXTEND","WHILE","DO","FOR",
"SWITCH","BREAK","CONTINUE","RETURNTOK","FORK","CASE","DEFAULT","TWIXT","NAME",
"TYPENAME","NAMESPACENAME","COMMAND","NAMECOMMAND","TEN_NUM","OCTAL0_NUM",
"OCTAL_NUM","BINARY_NUM","HEX_NUM","TEN_FLOAT","OCTAL0_FLOAT","OCTAL_FLOAT",
"BINARY_FLOAT","HEX_FLOAT","CHAR_CONST","STRING_CONST","POLY_CONST",
"THREAD_CONST","COMMENT_CONST","VOIDVAL","BOOLVAL","DARROW","POUND","COMMA",
"ASSIGN","ASSIGNPLUS","ASSIGNMINUS","ASSIGNTIMES","ASSIGNDIVIDE","ASSIGNDIV",
"ASSIGNMOD","ASSIGNPOW","ASSIGNSHIFTL","ASSIGNSHIFTR","ASSIGNLXOR","ASSIGNLAND",
"ASSIGNLOR","ASSIGNOR","ASSIGNAND","QUEST","COLON","OR","AND","LOR","LXOR",
"LAND","EQ","NE","LT","GT","LE","GE","SHIFTL","SHIFTR","PLUS","MINUS","TIMES",
"DIVIDE","DIV","POW","STARSTAR","POW2","POW3","UNIONCAST","UMINUS","BANG",
"FACT","LNOT","INC","DEC","STAR","AMPER","THREADID","OS","CS","DOT","ARROW",
"STAROS","CALL","OP","CP","POINTER","COLONCOLON","IF","TRY","NONL","ELSE",
"CATCH","NL",
};
char *yyrule[] = {
"$accept : lines",
"lines : lines pcommand",
"lines :",
"pcommand : command",
"pcommand : error reset eend",
"eend : NL",
"eend : SEMI",
"eend : ENDFILE",
"ignorenl :",
"attendnl :",
"reset :",
"not_command :",
"opt_nl : NL",
"opt_nl :",
"opt_semi : SEMI",
"opt_semi :",
"opt_comma : COMMA",
"opt_comma :",
"command : not_command expr reset NL",
"command : not_command expr POUND expr reset NL",
"command : not_command statement reset opt_nl",
"command : not_command COMMAND opt_exprs reset opt_semi NL",
"command : not_command NAMECOMMAND opt_rawnames reset opt_semi NL",
"command : NL",
"command : ENDFILE",
"opt_rawnames : rawnames",
"opt_rawnames :",
"rawnames : rawname COMMA rawnames",
"rawnames : rawname",
"rawname : rawnamespace rawatom",
"rawatom : NAME",
"rawatom : NAMESPACENAME",
"rawatom : TYPENAME",
"rawnamespace : rawnamespace rawatom COLONCOLON",
"rawnamespace :",
"fulltype : namespace TYPENAME",
"fulltype : TYPENAME",
"fullname : namespace namespacename",
"fullname : namespacename",
"fullnames : fullname",
"fullnames : fullname COMMA fullnames",
"namespace : namespace NAMESPACENAME COLONCOLON",
"namespace : NAMESPACENAME COLONCOLON",
"namespacename : NAME",
"namespacename : NAMESPACENAME",
"namespace_start :",
"namespace_end :",
"block : block_start statements block_end",
"block_start : OC namespace_start",
"block_end : namespace_end CC",
"statements : statement statements",
"statements :",
"if_statement : IF ignorenl namespace_start OP expr CP statement",
"if_statement : IF ignorenl namespace_start OP expr CP statement ELSE statement",
"statement : simple_statement",
"statement : block",
"simple_statement : if_statement namespace_end attendnl",
"simple_statement : WHILE ignorenl namespace_start OP expr CP statement namespace_end attendnl",
"simple_statement : DO ignorenl namespace_start statement WHILE OP expr CP namespace_end attendnl",
"simple_statement : FOR ignorenl namespace_start OP for_exprs CP statement namespace_end attendnl",
"simple_statement : SWITCH ignorenl namespace_start OP expr CP case_block namespace_end attendnl",
"simple_statement : union_or_enum SWITCH ignorenl namespace_start OP expr CP union_case_block namespace_end attendnl",
"simple_statement : BREAK SEMI",
"simple_statement : CONTINUE SEMI",
"simple_statement : RETURNTOK opt_expr SEMI",
"simple_statement : expr SEMI",
"simple_statement : SEMI",
"simple_statement : func_decl doc_string opt_func_body namespace_end",
"simple_statement : opt_publish EXCEPTION ignorenl NAME namespace_start opt_argdecls namespace_end doc_string SEMI attendnl",
"simple_statement : RAISE fullname OP opt_exprs CP SEMI",
"simple_statement : opt_publish TYPEDEF ignorenl typenames SEMI attendnl",
"simple_statement : opt_publish TYPEDEF ignorenl type typenames SEMI attendnl",
"$$1 :",
"simple_statement : publish_extend NAMESPACE ignorenl namespacename $$1 OC statements CC attendnl",
"simple_statement : opt_publish IMPORT ignorenl fullnames SEMI attendnl",
"simple_statement : try_statement attendnl",
"simple_statement : TWIXT ignorenl namespace_start OP opt_expr SEMI opt_expr CP statement namespace_end attendnl",
"for_exprs : opt_expr SEMI for_exprs",
"for_exprs : opt_expr",
"try_body_statement : simple_statement",
"try_body_statement : OC statements CC",
"try_statement : TRY ignorenl try_body_statement catches",
"catches : catches catch",
"catches :",
"catch : CATCH fullname namespace_start args doc_string block namespace_end",
"opt_func_body : func_body",
"opt_func_body : SEMI",
"$$2 :",
"func_body : $$2 block_or_expr",
"block_or_expr : block",
"block_or_expr : attendnl ASSIGN simpleexpr SEMI",
"union_or_enum : UNION",
"union_or_enum : ENUM",
"see_comment :",
"doc_string : see_comment opt_comment",
"opt_comment : COMMENT_CONST",
"opt_comment :",
"case_block : block_start cases block_end",
"cases : case cases",
"cases :",
"case : CASE expr COLON statements",
"case : DEFAULT COLON statements",
"union_case_block : block_start union_cases block_end",
"union_cases : union_case union_cases",
"union_cases :",
"union_case : CASE namespace_start NAME opt_name COLON statements namespace_end",
"union_case : DEFAULT COLON statements",
"opt_name : NAME",
"opt_name :",
"atoms : NAME COMMA atoms",
"atoms : NAME",
"typenames : typename COMMA typenames",
"typenames : typename",
"typename : TYPENAME",
"typename : NAME",
"initnames : name opt_init next_decl initnames",
"initnames : name opt_init",
"name : NAME",
"next_decl : COMMA",
"func_decl : func_name namespace_start opt_argdefines CP",
"func_name : decl NAME OP",
"func_name : decl FUNCTION NAME OP",
"func_name : FUNCTION ignorenl NAME OP",
"opt_init : ASSIGN simpleexpr",
"opt_init : ASSIGN init",
"opt_init :",
"decl : publish opt_class opt_type opt_nl",
"decl : class opt_type opt_nl",
"decl : type opt_nl",
"subscripts : opt_argdecls subscripts",
"subscripts : OS opt_stars CS subscripts",
"subscripts : OS dotdotdots CS subscripts",
"subscripts : OS dims CS subscripts",
"subscripts : OS type CS subscripts",
"subscripts :",
"type : subtype subscripts",
"type : TIMES type",
"type : STARSTAR type",
"type : AND type",
"type : LAND type",
"subtype : basetype",
"subtype : STRUCT OC struct_members CC",
"subtype : UNION OC union_members CC",
"subtype : ENUM OC atoms CC",
"subtype : OP type CP",
"subtype : fulltype",
"opt_type : type",
"opt_type :",
"basetype : POLY",
"basetype : INTEGER",
"basetype : RATIONAL",
"basetype : REAL",
"basetype : STRING",
"basetype : FILET",
"basetype : MUTEX",
"basetype : SEMAPHORE",
"basetype : CONTINUATION",
"basetype : THREAD",
"basetype : VOID",
"basetype : BOOL",
"basetype : FOREIGN",
"opt_stars : stars",
"opt_stars :",
"stars : stars COMMA TIMES",
"stars : TIMES",
"dotdotdots : dotdotdots COMMA DOTDOTDOT",
"dotdotdots : DOTDOTDOT",
"dims : simpleexpr COMMA dims",
"dims : simpleexpr",
"struct_members : opt_type atoms SEMI struct_members",
"struct_members :",
"union_members : opt_type atoms SEMI union_members",
"union_members :",
"opt_class : class",
"opt_class :",
"class : GLOBAL",
"class : AUTO",
"class : STATIC",
"class : CONST",
"opt_publish : publish",
"opt_publish :",
"publish : PUBLIC",
"publish : PROTECTED",
"publish_extend : opt_publish",
"publish_extend : EXTEND",
"opt_argdecls : OP argdecls CP",
"opt_argdecls : OP CP",
"argdecls : argdecl COMMA argdecls",
"argdecls : argdecl opt_dotdotdot",
"argdecl : type NAME",
"argdecl : type",
"args : OP opt_argdefines CP",
"opt_argdefines : ignorenl argdefines",
"opt_argdefines : ignorenl",
"argdefines : argdefine COMMA argdefines",
"argdefines : argdefine opt_dotdotdot",
"argdefine : opt_type NAME",
"argdefine : type",
"opt_dotdotdot : DOTDOTDOT",
"opt_dotdotdot :",
"opt_expr : expr",
"opt_expr :",
"expr : comma_expr",
"expr : decl initnames",
"comma_expr : simpleexpr",
"comma_expr : comma_expr COMMA simpleexpr",
"opt_exprs : exprs",
"opt_exprs :",
"exprs : simpleexpr COMMA exprs",
"exprs : simpleexpr",
"opt_actuals : actuals",
"opt_actuals :",
"actuals : simpleexpr COMMA actuals",
"actuals : simpleexpr opt_dotdotdot",
"func_right : attendnl ASSIGN simpleexpr",
"$$3 :",
"func_right : $$3 block",
"simpleexpr : simpleexpr assignop simpleexpr",
"simpleexpr : opt_type FUNC namespace_start args doc_string func_right namespace_end",
"simpleexpr : MOD integer",
"simpleexpr : TIMES simpleexpr",
"simpleexpr : STARSTAR simpleexpr",
"simpleexpr : LAND simpleexpr",
"simpleexpr : AND simpleexpr",
"simpleexpr : MINUS simpleexpr",
"simpleexpr : LNOT simpleexpr",
"simpleexpr : BANG simpleexpr",
"simpleexpr : simpleexpr BANG",
"simpleexpr : INC simpleexpr",
"simpleexpr : simpleexpr INC",
"simpleexpr : DEC simpleexpr",
"simpleexpr : simpleexpr DEC",
"simpleexpr : FORK simpleexpr",
"simpleexpr : simpleexpr PLUS simpleexpr",
"simpleexpr : simpleexpr MINUS simpleexpr",
"simpleexpr : simpleexpr TIMES simpleexpr",
"simpleexpr : simpleexpr DIVIDE simpleexpr",
"simpleexpr : simpleexpr DIV simpleexpr",
"simpleexpr : simpleexpr MOD simpleexpr",
"simpleexpr : simpleexpr STARSTAR simpleexpr",
"simpleexpr : simpleexpr POW2",
"simpleexpr : simpleexpr POW3",
"simpleexpr : simpleexpr SHIFTL simpleexpr",
"simpleexpr : simpleexpr SHIFTR simpleexpr",
"simpleexpr : simpleexpr QUEST simpleexpr COLON simpleexpr",
"simpleexpr : simpleexpr LXOR simpleexpr",
"simpleexpr : simpleexpr LAND simpleexpr",
"simpleexpr : simpleexpr LOR simpleexpr",
"simpleexpr : simpleexpr AND simpleexpr",
"simpleexpr : simpleexpr OR simpleexpr",
"simpleexpr : simpleexpr EQ simpleexpr",
"simpleexpr : simpleexpr NE simpleexpr",
"simpleexpr : simpleexpr LT simpleexpr",
"simpleexpr : simpleexpr GT simpleexpr",
"simpleexpr : simpleexpr LE simpleexpr",
"simpleexpr : simpleexpr GE simpleexpr",
"simpleexpr : fullname",
"simpleexpr : TEN_NUM",
"simpleexpr : OCTAL_NUM",
"simpleexpr : OCTAL0_NUM",
"simpleexpr : BINARY_NUM",
"simpleexpr : HEX_NUM",
"simpleexpr : TEN_FLOAT",
"simpleexpr : OCTAL_FLOAT",
"simpleexpr : OCTAL0_FLOAT",
"simpleexpr : BINARY_FLOAT",
"simpleexpr : HEX_FLOAT",
"simpleexpr : CHAR_CONST",
"simpleexpr : STRING_CONST",
"simpleexpr : VOIDVAL",
"simpleexpr : BOOLVAL",
"simpleexpr : OS CS",
"simpleexpr : OP type CP namespace_start init namespace_end",
"simpleexpr : OP OS stars CS CP namespace_start arrayinit namespace_end",
"simpleexpr : OP OS dims CS CP namespace_start opt_arrayinit namespace_end",
"simpleexpr : OP OS type CS CP namespace_start opt_hashinit namespace_end",
"simpleexpr : type DOT NAME",
"simpleexpr : OP type DOT NAME CP simpleexpr",
"simpleexpr : DOLLAR opt_integer",
"simpleexpr : DOT",
"simpleexpr : OP expr CP",
"simpleexpr : OP block CP",
"simpleexpr : simpleexpr STAROS dims CS",
"simpleexpr : simpleexpr OS dims CS",
"simpleexpr : simpleexpr OP opt_actuals CP",
"simpleexpr : simpleexpr DOT NAME",
"simpleexpr : simpleexpr ARROW NAME",
"opt_integer : integer",
"opt_integer :",
"assignop : ASSIGNPLUS",
"assignop : ASSIGNMINUS",
"assignop : ASSIGNTIMES",
"assignop : ASSIGNDIVIDE",
"assignop : ASSIGNDIV",
"assignop : ASSIGNMOD",
"assignop : ASSIGNPOW",
"assignop : ASSIGNSHIFTL",
"assignop : ASSIGNSHIFTR",
"assignop : ASSIGNLXOR",
"assignop : ASSIGNLAND",
"assignop : ASSIGNLOR",
"assignop : ASSIGNOR",
"assignop : ASSIGNAND",
"assignop : ASSIGN",
"integer : TEN_NUM",
"integer : OCTAL_NUM",
"integer : OCTAL0_NUM",
"integer : BINARY_NUM",
"integer : HEX_NUM",
"opt_arrayinit : arrayinit",
"opt_arrayinit : OC CC",
"opt_arrayinit :",
"arrayinit : OC arrayelts opt_comma opt_dotdotdot CC",
"arrayinit : OC OS namespace_start compnames comparray CS comprehension namespace_end CC",
"comprehension : ASSIGN arrayelt",
"comprehension : block",
"compnames : compname COMMA compnames",
"compnames : compname",
"compname : NAME",
"comparray :",
"arrayelts : arrayelts COMMA arrayelt",
"arrayelts : arrayelt",
"arrayelt : simpleexpr",
"arrayelt : init",
"opt_hashinit : hashinit",
"opt_hashinit : OC CC",
"opt_hashinit :",
"hashinit : OC hashelts opt_comma CC",
"hashelts : hashelts COMMA hashelt",
"hashelts : hashelt",
"hashelt : simpleexpr DARROW hashvalue",
"hashelt : DARROW hashvalue",
"hashvalue : simpleexpr",
"hashvalue : init",
"structinit : OC structelts opt_comma CC",
"structelts : structelts COMMA structelt",
"structelts : structelt",
"structelt : NAME ASSIGN simpleexpr",
"structelt : NAME ASSIGN init",
"init : arrayinit",
"init : structinit",
"init : hashinit",
"init : OC CC",
};
#endif
#if YYDEBUG
#include <stdio.h>
#endif

/* define the initial stack-sizes */
#ifdef YYSTACKSIZE
#undef YYMAXDEPTH
#define YYMAXDEPTH  YYSTACKSIZE
#else
#ifdef YYMAXDEPTH
#define YYSTACKSIZE YYMAXDEPTH
#else
#define YYSTACKSIZE 500
#define YYMAXDEPTH  500
#endif
#endif

#define YYINITSTACKSIZE 500

int      yydebug;
int      yynerrs;
int      yyerrflag;
int      yychar;
short   *yyssp;
YYSTYPE *yyvsp;
YYSTYPE  yyval;
YYSTYPE  yylval;

/* variables for the parser stack */
static short   *yyss;
static short   *yysslim;
static YYSTYPE *yyvs;
static int      yystacksize;
#line 1606 "gram.y"

static void
DeclListMark (void *object)
{
    DeclListPtr	dl = object;

    MemReference (dl->next);
    MemReference (dl->init);
}

DataType DeclListType = { DeclListMark, 0, "DeclListType" };

DeclListPtr
NewDeclList (Atom name, ExprPtr init, DeclListPtr next)
{
    ENTER ();
    DeclListPtr	dl;

    dl = ALLOCATE (&DeclListType, sizeof (DeclList));
    dl->next = next;
    dl->name = name;
    dl->symbol = 0;
    dl->init = init;
    RETURN (dl);
}

static void
MemListMark (void *object)
{
    MemListPtr	ml = object;

    MemReference (ml->next);
    MemReference (ml->type);
    MemReference (ml->atoms);
}

DataType MemListType = { MemListMark, 0, "MemListType" };

MemListPtr
NewMemList (AtomListPtr atoms, Type *type, MemListPtr next)
{
    ENTER ();
    MemListPtr	ml;

    ml = ALLOCATE (&MemListType, sizeof (MemList));
    ml->next = next;
    ml->type = type;
    ml->atoms = atoms;
    RETURN (ml);
}


extern NamespacePtr	CurrentNamespace;
FramePtr	CurrentFrame;

Value
lookupVar (char *ns, char *n)
{
    ENTER ();
    Value	    v;
    SymbolPtr	    symbol;
    NamespacePtr    namespace;
    Bool	    search;

    search = True;
    namespace = CurrentNamespace;
    if (ns)
    {
	symbol = NamespaceFindName (CurrentNamespace, AtomId (ns), True);
	if (symbol && symbol->symbol.class == class_namespace)
	    namespace = symbol->namespace.namespace;
	else
	    namespace = 0;
    }
    if (namespace)
	symbol = NamespaceFindName (namespace, AtomId (n), search);
    else
	symbol = 0;
    if (symbol && symbol->symbol.class == class_global)
	v = BoxValue (symbol->global.value, 0);
    else
	v = Void;
    RETURN (v);
}

void
setVar (NamespacePtr namespace, char *n, Value v, Type *type)
{
    ENTER ();
    Atom	atom;
    SymbolPtr	symbol;

    atom = AtomId (n);
    symbol = NamespaceFindName (namespace, atom, True);
    if (!symbol)
	symbol = NamespaceAddName (namespace,
				   NewSymbolGlobal (atom, type),
				   publish_private);
    if (symbol->symbol.class == class_global)
	BoxValueSet (symbol->global.value, 0, v);
    EXIT ();
}

void
GetNamespace (NamespacePtr *scope, FramePtr *fp, CodePtr *cp)
{
    *scope = CurrentNamespace;
    *fp = CurrentFrame;
    if (CurrentFrame)
	*cp = CurrentFrame->function->func.code;
    else
	*cp = 0;
}

ExprPtr
BuildName (char *ns, char *n)
{
    ENTER ();
    SymbolPtr	    symbol, ns_symbol = 0;
    Atom	    atom, ns_atom = 0;
    Bool	    search = True;
    NamespacePtr    namespace = CurrentNamespace;
    ExprPtr	    e;
    Bool	    ns_privateFound = False;
    Bool	    privateFound = False;

    if (ns)
    {
	ns_atom = AtomId (ns);
	ns_symbol = NamespaceFindName (namespace, ns_atom, search);
	if (ns_symbol && ns_symbol->symbol.class == class_namespace)
	    namespace = ns_symbol->namespace.namespace;
	else
	{
	    if (!ns_symbol)
		ns_privateFound = NamespaceIsNamePrivate (namespace, ns_atom, search);
	    namespace = 0;
	}
	search = False;
    }
    atom = AtomId (n);
    if (namespace)
    {
	symbol = NamespaceFindName (namespace, atom, search);
	if (!symbol)
	    privateFound = NamespaceIsNamePrivate (namespace, atom, search);
    }
    else
	symbol = 0;
    e = NewExprAtom (atom, symbol, privateFound);
    if (ns_atom)
	e = NewExprTree (COLONCOLON, NewExprAtom (ns_atom, ns_symbol, ns_privateFound), e);
    RETURN (e);
}

static Value
AtomString (Atom id)
{
    ENTER ();
    RETURN (NewStrString (AtomName (id)));
}

ExprPtr
BuildRawname (ExprPtr colonnames, Atom name)
{
    ENTER ();
    int     len;
    Value   array;
    ExprPtr e;

    len = 1;
    for (e = colonnames; e; e = e->tree.left)
	len++;
    array = NewArray (False, False, typePrim[rep_string], 1, &len);
    len--;
    ArrayValueSet (&array->array, len, AtomString (name));
    e = colonnames;
    while (--len >= 0)
    {
	ArrayValueSet (&array->array, len, AtomString (e->tree.right->atom.atom));
	e = e->tree.left;
    }
    e = NewExprConst (POLY_CONST, array);
    RETURN (e);
}

	    
ExprPtr
BuildFullname (ExprPtr left, Atom atom)
{
    ENTER ();
    NamespacePtr    namespace;
    SymbolPtr	    symbol;
    Bool	    search;
    ExprPtr	    nameExpr;
    Bool	    privateFound = False;

    if (left)
    {
	if (left->base.tag == COLONCOLON)
	    symbol = left->tree.right->atom.symbol;
	else
	    symbol = left->atom.symbol;
	if (symbol && symbol->symbol.class == class_namespace)
	    namespace = symbol->namespace.namespace;
	else
	    namespace = 0;
        search = False;
    }
    else
    {
	namespace = CurrentNamespace;
	search = True;
    }
    if (namespace)
    {
	symbol = NamespaceFindName (namespace, atom, search);
	if (!symbol)
	    privateFound = NamespaceIsNamePrivate (namespace, atom, search);
    }
    else
	symbol = 0;
    nameExpr = NewExprAtom (atom, symbol, privateFound);
    if (left)
	nameExpr = NewExprTree (COLONCOLON, left, nameExpr);
    RETURN (nameExpr);
}

ExprPtr
BuildCall (char *scope, char *name, int nargs, ...)
{
    ENTER ();
    va_list	    alist;
    ExprPtr	    args, *prev;
    ExprPtr	    f;
    ExprPtr	    e;

    va_start (alist, nargs);
    prev = &args;
    args = 0;
    while (nargs--)
    {
	*prev = NewExprTree (COMMA, va_arg (alist, ExprPtr), 0);
	prev = &(*prev)->tree.right;
    }
    va_end (alist);
    f = BuildName (scope, name);
    e = NewExprTree (OP, f, args);
#ifdef DEBUG
    printExpr (stdout, e, -1, 0);
    printf ("\n");
#endif
    RETURN (e);
}

/*
 * Walk for() loop arguments and normalize the list
 */
static Expr *
ParseCanonFor (Expr *expr)
{
    if (!expr || !expr->tree.right) {
        ParseError ("Too few exprs in for()\n");
        return 0;
    }
    if (!expr->tree.right->tree.right) {
        /* 2-argument for() */
        expr = NewExprTree(FOR, 0, expr);
    }
    if (expr->tree.right->tree.right->tree.right) {
        ParseError ("Too many exprs in for()\n");
        return 0;
    }
    return expr;
}

/*
 * Walk a type structure and resolve any type names
 */
static CanonTypeResult
ParseCanonType (TypePtr type, Bool forwardAllowed)
{
    ArgType	    *arg;
    int		    n;
    CanonTypeResult ret = CanonTypeDefined, t;
    Bool	    anyResolved;
    
    if (!type)
    {
	ParseError ("Type missing inside compiler");
	return False;
    }
    switch (type->base.tag) {
    case type_prim:
	break;
    case type_name:
	if (!TypeNameType(type))
	{
	    if (!type->name.name)
	    {
		ExprPtr e;
		e = type->name.expr;
		if (e->base.tag == COLONCOLON)
		    e = e->tree.right;
		type->name.name = e->atom.symbol;
		if (!type->name.name)
		{
		    ParseError ("No typedef \"%A\" in namespace",
				e->atom.atom);
		    ret = CanonTypeUndefined;
		    break;
		}
	    }
	    if (type->name.name->symbol.class != class_typedef)
	    {
		ParseError ("Symbol \"%A\" not a typedef", 
			    type->name.name->symbol.name);
		ret = CanonTypeUndefined;
	    }
	    else if (!TypeNameType(type))
	    {
		if (!forwardAllowed)
		    ParseError ("Typedef \"%A\" not defined yet", 
				type->name.name->symbol.name);
		ret = CanonTypeForward;
	    }
	    else
	    {
		ret = ParseCanonType (TypeNameType(type), forwardAllowed);
	    }
	}
	break;
    case type_ref:
	ret = ParseCanonType (type->ref.ref, True);
	if (ret == CanonTypeForward)
	    ret = CanonTypeDefined;
	break;
    case type_func:
	if (type->func.ret)
	    ret = ParseCanonType (type->func.ret, forwardAllowed);
	for (arg = type->func.args; arg; arg = arg->next)
	{
	    t = ParseCanonType (arg->type, forwardAllowed);
	    if (t < ret)
		ret = t;
	}
	break;
    case type_array:
	ret = ParseCanonType (type->array.type, forwardAllowed);
	break;
    case type_hash:
	ret = ParseCanonType (type->hash.type, forwardAllowed);
	t = ParseCanonType (type->hash.keyType, forwardAllowed);
	if (t < ret)
	    ret = t;
	break;
    case type_struct:
	for (n = 0; n < type->structs.structs->nelements; n++)
	{
	    StructType   *st = type->structs.structs;

	    t = ParseCanonType (BoxTypesElements(st->types)[n], forwardAllowed);
	    if (t < ret)
		ret = t;
	}
	break;
    case type_union:
	anyResolved = False;
	for (n = 0; n < type->structs.structs->nelements; n++)
	{
	    StructType   *st = type->structs.structs;

	    t = ParseCanonType (BoxTypesElements(st->types)[n], True);
	    if (t < ret)
		ret = t;
	    if (t == CanonTypeDefined)
		anyResolved = True;
	}
	if (ret == CanonTypeForward)
	{
	    if (anyResolved)
		ret = CanonTypeDefined;
	    else if (!forwardAllowed)
		ParseError ("No member of '%T' defined yet", type);
	}
	break;
    case type_types:
	break;
    }
    return ret;
}

static SymbolPtr
ParseNewSymbol (Publish publish, Class class, Type *type, Atom name)
{
    ENTER ();
    SymbolPtr	s = 0;
    
    if (class == class_undef)
	class = funcDepth ? class_auto : class_global;

    if (class == class_namespace || 
	(class == class_typedef && type == 0) || 	
	ParseCanonType (type, False) == CanonTypeDefined)
    {
	switch (class) {
	case class_const:
	    s = NewSymbolConst (name, type);
	    break;
	case class_global:
	    s = NewSymbolGlobal (name, type);
	    break;
	case class_static:
	    s = NewSymbolStatic (name, type);
	    break;
	case class_arg:
	    s = NewSymbolArg (name, type);
	    break;
	case class_auto:
	    s = NewSymbolAuto (name, type);
	    break;
	case class_exception:
	    s = NewSymbolException (name, type, Void);
	    break;
	case class_typedef:
	    /*
	     * Special case for typedefs --
	     * allow forward declaration of untyped
	     * typedef names, then hook the
	     * new type to the old name
	     */
	    if (type)
	    {
		s = NamespaceFindName (CurrentNamespace, name, False);
		if (s && s->symbol.class == class_typedef && !s->symbol.type)
		{
		    s->symbol.type = type;
		    RETURN (s);
		}
	    }
	    s = NewSymbolType (name, type);
	    break;
	case class_namespace:
	    s = NewSymbolNamespace (name, NewNamespace (CurrentNamespace));
	    break;
	case class_undef:
	    break;
	}
	if (s)
	    NamespaceAddName (CurrentNamespace, s, publish);
    }
    RETURN (s);
}

int
yywrap (void)
{
    if (LexInteractive())
	printf ("\n");
    if (CurrentFrame)
    {
	do_Debug_done ();
	return 0;
    }
    return 1;
}

extern	char *yytext;

void
ParseError (char *fmt, ...)
{
    va_list	args;

    if (LexFileName ())
	FilePrintf (FileStderr, "%A:%d: ",
		    LexFileName (), LexFileLine ());
    va_start (args, fmt);
    FileVPrintf (FileStderr, fmt, args);
    FilePrintf (FileStderr, "\n");
    va_end (args);
}

void
yyerror (char *msg)
{
    ignorenl = 0;
    ParseError ("%s before %S", msg, yytext);
}
#line 2940 "gram.c"
/* allocate initial stack or double stack size, up to YYMAXDEPTH */
static int yygrowstack(void)
{
    int newsize, i;
    short *newss;
    YYSTYPE *newvs;

    if ((newsize = yystacksize) == 0)
        newsize = YYINITSTACKSIZE;
    else if (newsize >= YYMAXDEPTH)
        return -1;
    else if ((newsize *= 2) > YYMAXDEPTH)
        newsize = YYMAXDEPTH;

    i = yyssp - yyss;
    newss = (yyss != 0)
          ? (short *)realloc(yyss, newsize * sizeof(*newss))
          : (short *)malloc(newsize * sizeof(*newss));
    if (newss == 0)
        return -1;

    yyss  = newss;
    yyssp = newss + i;
    newvs = (yyvs != 0)
          ? (YYSTYPE *)realloc(yyvs, newsize * sizeof(*newvs))
          : (YYSTYPE *)malloc(newsize * sizeof(*newvs));
    if (newvs == 0)
        return -1;

    yyvs = newvs;
    yyvsp = newvs + i;
    yystacksize = newsize;
    yysslim = yyss + newsize - 1;
    return 0;
}

#define YYABORT goto yyabort
#define YYREJECT goto yyabort
#define YYACCEPT goto yyaccept
#define YYERROR goto yyerrlab
int
yyparse(void)
{
    register int yym, yyn, yystate;
#if YYDEBUG
    register const char *yys;

    if ((yys = getenv("YYDEBUG")) != 0)
    {
        yyn = *yys;
        if (yyn >= '0' && yyn <= '9')
            yydebug = yyn - '0';
    }
#endif

    yynerrs = 0;
    yyerrflag = 0;
    yychar = YYEMPTY;

    if (yyss == NULL && yygrowstack()) goto yyoverflow;
    yyssp = yyss;
    yyvsp = yyvs;
    *yyssp = yystate = 0;

yyloop:
    if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
    if (yychar < 0)
    {
        if ((yychar = yylex()) < 0) yychar = 0;
#if YYDEBUG
        if (yydebug)
        {
            yys = 0;
            if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
            if (!yys) yys = "illegal-symbol";
            printf("%sdebug: state %d, reading %d (%s)\n",
                    YYPREFIX, yystate, yychar, yys);
        }
#endif
    }
    if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
            yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
    {
#if YYDEBUG
        if (yydebug)
            printf("%sdebug: state %d, shifting to state %d\n",
                    YYPREFIX, yystate, yytable[yyn]);
#endif
        if (yyssp >= yysslim && yygrowstack())
        {
            goto yyoverflow;
        }
        *++yyssp = yystate = yytable[yyn];
        *++yyvsp = yylval;
        yychar = YYEMPTY;
        if (yyerrflag > 0)  --yyerrflag;
        goto yyloop;
    }
    if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
            yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
    {
        yyn = yytable[yyn];
        goto yyreduce;
    }
    if (yyerrflag) goto yyinrecovery;

    yyerror("syntax error");

#ifdef lint
    goto yyerrlab;
#endif

yyerrlab:
    ++yynerrs;

yyinrecovery:
    if (yyerrflag < 3)
    {
        yyerrflag = 3;
        for (;;)
        {
            if ((yyn = yysindex[*yyssp]) && (yyn += YYERRCODE) >= 0 &&
                    yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
            {
#if YYDEBUG
                if (yydebug)
                    printf("%sdebug: state %d, error recovery shifting\
 to state %d\n", YYPREFIX, *yyssp, yytable[yyn]);
#endif
                if (yyssp >= yysslim && yygrowstack())
                {
                    goto yyoverflow;
                }
                *++yyssp = yystate = yytable[yyn];
                *++yyvsp = yylval;
                goto yyloop;
            }
            else
            {
#if YYDEBUG
                if (yydebug)
                    printf("%sdebug: error recovery discarding state %d\n",
                            YYPREFIX, *yyssp);
#endif
                if (yyssp <= yyss) goto yyabort;
                --yyssp;
                --yyvsp;
            }
        }
    }
    else
    {
        if (yychar == 0) goto yyabort;
#if YYDEBUG
        if (yydebug)
        {
            yys = 0;
            if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
            if (!yys) yys = "illegal-symbol";
            printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
                    YYPREFIX, yystate, yychar, yys);
        }
#endif
        yychar = YYEMPTY;
        goto yyloop;
    }

yyreduce:
#if YYDEBUG
    if (yydebug)
        printf("%sdebug: state %d, reducing by rule %d (%s)\n",
                YYPREFIX, yystate, yyn, yyrule[yyn]);
#endif
    yym = yylen[yyn];
    yyval = yyvsp[1-yym];
    switch (yyn)
    {
case 5:
#line 197 "gram.y"
{ yyerrok; }
break;
case 6:
#line 199 "gram.y"
{ yyerrok; }
break;
case 7:
#line 201 "gram.y"
{ yyerrok; }
break;
case 8:
#line 209 "gram.y"
{ ignorenl++; }
break;
case 9:
#line 212 "gram.y"
{ if (ignorenl > 0) ignorenl--; }
break;
case 10:
#line 215 "gram.y"
{ 
			ignorenl = 0; 
			LexNamespace = 0; 
			CurrentNamespace = TopNamespace; 
			funcDepth = 0; 
			notCommand = 0;
		    }
break;
case 11:
#line 232 "gram.y"
{ notCommand = 1; }
break;
case 18:
#line 247 "gram.y"
{
			ENTER ();
			ExprPtr	e;
			Value	t;
			NamespacePtr	s;
			FramePtr	f;
			CodePtr		c;
			
			e = BuildCall ("Command", "display",
				       1,NewExprTree (EXPR, yyvsp[-2].expr, 0));
			GetNamespace (&s, &f, &c);
			t = NewThread (f, CompileExpr (e, c));
			ThreadsRun (t, 0);
			EXIT ();
		    }
break;
case 19:
#line 263 "gram.y"
{
			ENTER ();
			ExprPtr	e;
			Value	t;
			NamespacePtr	s;
			FramePtr	f;
			CodePtr		c;

			e = BuildCall("Command", "display_base",
				      2, NewExprTree (EXPR, yyvsp[-4].expr, 0), yyvsp[-2].expr);
			GetNamespace (&s, &f, &c);
			t = NewThread (f, CompileExpr (e, c));
			ThreadsRun (t, 0);
			EXIT ();
		    }
break;
case 20:
#line 279 "gram.y"
{ 
			ENTER ();
			NamespacePtr    s;
			FramePtr	f;
			CodePtr		c;
			Value		t;
			
			GetNamespace (&s, &f, &c);
			t = NewThread (f, CompileStat (yyvsp[-2].expr, c));
			ThreadsRun (t, 0);
			EXIT ();
		    }
break;
case 21:
#line 292 "gram.y"
{
			ENTER();
			ExprPtr	e;
			Value	t;
			NamespacePtr	s;
			FramePtr	f;
			CodePtr		c;
			CommandPtr	cmd;

			cmd = CommandFind (CurrentCommands, yyvsp[-4].atom);
			if (!cmd)
			    ParseError ("Undefined command \"%s\"", AtomName (yyvsp[-4].atom));
			else
			{
			    e = NewExprTree (OP, 
					     NewExprConst (POLY_CONST, cmd->func),
					     yyvsp[-3].expr);
			    GetNamespace (&s, &f, &c);
			    t = NewThread (f, CompileExpr (e, c));
			    ThreadsRun (t, 0);
			}
			EXIT ();
		    }
break;
case 22:
#line 316 "gram.y"
{
			ENTER ();
			ExprPtr e;

			Value	t;
			NamespacePtr	s;
			FramePtr	f;
			CodePtr		c;
			CommandPtr	cmd;

			cmd = CommandFind (CurrentCommands, yyvsp[-4].atom);
			if (!cmd)
			    ParseError ("Undefined command \"%s\"", AtomName (yyvsp[-4].atom));
			else
			{
			    e = NewExprTree (OP, 
					     NewExprConst (POLY_CONST, cmd->func),
					     yyvsp[-3].expr);
			    GetNamespace (&s, &f, &c);
			    t = NewThread (f, CompileExpr (e, c));
			    ThreadsRun (t, 0);
			}
			EXIT ();
		    }
break;
case 26:
#line 345 "gram.y"
{ yyval.expr = 0; }
break;
case 27:
#line 348 "gram.y"
{ yyval.expr = NewExprTree (COMMA, yyvsp[-2].expr, yyvsp[0].expr); }
break;
case 28:
#line 350 "gram.y"
{ yyval.expr = NewExprTree (COMMA, yyvsp[0].expr, 0); }
break;
case 29:
#line 353 "gram.y"
{ yyval.expr = BuildRawname (yyvsp[-1].expr, yyvsp[0].atom); }
break;
case 33:
#line 360 "gram.y"
{ yyval.expr = NewExprTree (COLONCOLON, yyvsp[-2].expr, NewExprAtom (yyvsp[-1].atom, 0, False)); }
break;
case 34:
#line 362 "gram.y"
{ yyval.expr = 0; }
break;
case 35:
#line 365 "gram.y"
{ 
			yyval.expr = BuildFullname (yyvsp[-1].expr, yyvsp[0].atom);
			LexNamespace = 0;
		    }
break;
case 36:
#line 370 "gram.y"
{ 
			yyval.expr = BuildFullname (0, yyvsp[0].atom);
			LexNamespace = 0;
		    }
break;
case 37:
#line 376 "gram.y"
{ 
			yyval.expr = BuildFullname (yyvsp[-1].expr, yyvsp[0].atom);
			LexNamespace = 0;
		    }
break;
case 38:
#line 381 "gram.y"
{
			yyval.expr = BuildFullname (0, yyvsp[0].atom);
			LexNamespace = 0;
		    }
break;
case 39:
#line 387 "gram.y"
{
			yyval.expr = yyvsp[0].expr;
		    }
break;
case 40:
#line 391 "gram.y"
{
			yyval.expr = NewExprTree (COMMA, yyvsp[-2].expr, yyvsp[0].expr);
		    }
break;
case 41:
#line 396 "gram.y"
{ 
			ExprPtr	    e;
			SymbolPtr   symbol;

			e = BuildFullname (yyvsp[-2].expr, yyvsp[-1].atom);
			if (e->base.tag == COLONCOLON)
			    symbol = e->tree.right->atom.symbol;
			else
			    symbol = e->atom.symbol;
			if (!symbol)
			{
			    ParseError ("non-existant namespace \"%A\"", yyvsp[-1].atom);
			    YYERROR;
			}
			else if (symbol->symbol.class != class_namespace)
			{
			    ParseError ("%A is not a namespace", yyvsp[-1].atom);
			    YYERROR;
			}
			LexNamespace = symbol->namespace.namespace;
			yyval.expr = e;
		    }
break;
case 42:
#line 419 "gram.y"
{ 
			ExprPtr	    e;
			SymbolPtr   symbol;

			e = BuildFullname (0, yyvsp[-1].atom);
			if (e->base.tag == COLONCOLON)
			    symbol = e->tree.right->atom.symbol;
			else
			    symbol = e->atom.symbol;
			if (!symbol)
			{
			    ParseError ("non-existant namespace \"%A\"", yyvsp[-1].atom);
			    YYERROR;
			}
			else if (symbol->symbol.class != class_namespace)
			{
			    ParseError ("%A is not a namespace", yyvsp[-1].atom);
			    YYERROR;
			}
			LexNamespace = symbol->namespace.namespace;
			yyval.expr = e;
		    }
break;
case 45:
#line 449 "gram.y"
{ CurrentNamespace = NewNamespace (CurrentNamespace); }
break;
case 46:
#line 452 "gram.y"
{ CurrentNamespace = CurrentNamespace->previous; }
break;
case 47:
#line 455 "gram.y"
{ yyval.expr = yyvsp[-1].expr; }
break;
case 50:
#line 462 "gram.y"
{ yyval.expr = NewExprTree(OC, yyvsp[-1].expr, yyvsp[0].expr); }
break;
case 51:
#line 464 "gram.y"
{ yyval.expr = NewExprTree(OC, 0, 0); }
break;
case 52:
#line 467 "gram.y"
{ yyval.expr = NewExprTree(IF, yyvsp[-2].expr, yyvsp[0].expr); }
break;
case 53:
#line 469 "gram.y"
{ yyval.expr = NewExprTree(ELSE, yyvsp[-4].expr, NewExprTree(ELSE, yyvsp[-2].expr, yyvsp[0].expr)); }
break;
case 56:
#line 476 "gram.y"
{ yyval.expr = yyvsp[-2].expr; }
break;
case 57:
#line 478 "gram.y"
{ yyval.expr = NewExprTree(WHILE, yyvsp[-4].expr, yyvsp[-2].expr); }
break;
case 58:
#line 480 "gram.y"
{ yyval.expr = NewExprTree(DO, yyvsp[-6].expr, yyvsp[-3].expr); }
break;
case 59:
#line 482 "gram.y"
{ Expr *expr = ParseCanonFor(yyvsp[-4].expr);
		      if (!expr)
                          YYERROR;
		      yyval.expr = NewExprTree(FOR, expr, yyvsp[-2].expr); }
break;
case 60:
#line 487 "gram.y"
{ yyval.expr = NewExprTree (SWITCH, yyvsp[-4].expr, yyvsp[-2].expr); }
break;
case 61:
#line 489 "gram.y"
{ yyval.expr = NewExprTree (UNION, yyvsp[-4].expr, yyvsp[-2].expr); }
break;
case 62:
#line 491 "gram.y"
{ yyval.expr = NewExprTree(BREAK, (Expr *) 0, (Expr *) 0); }
break;
case 63:
#line 493 "gram.y"
{ yyval.expr = NewExprTree(CONTINUE, (Expr *) 0, (Expr *) 0); }
break;
case 64:
#line 495 "gram.y"
{ yyval.expr = NewExprTree (RETURNTOK, (Expr *) 0, yyvsp[-1].expr); }
break;
case 65:
#line 497 "gram.y"
{ yyval.expr = NewExprTree(EXPR, yyvsp[-1].expr, (Expr *) 0); }
break;
case 66:
#line 499 "gram.y"
{ yyval.expr = NewExprTree(SEMI, (Expr *) 0, (Expr *) 0); }
break;
case 67:
#line 501 "gram.y"
{ 
			DeclList    *decl = yyvsp[-3].funcDecl.decl;
			SymbolPtr   symbol = decl->symbol;
			Class	    class = yyvsp[-3].funcDecl.type.class;
			Publish	    publish = yyvsp[-3].funcDecl.type.publish;
			TypePtr	    type = yyvsp[-3].funcDecl.type.type;
			TypePtr	    ret = type->func.ret;
			ArgType	    *argType = type->func.args;

			if (symbol)
			{
			    if (yyvsp[-1].expr)
			    {
				symbol->symbol.forward = False;
				ParseCanonType (ret, False);
				decl->init = NewExprCode (NewFuncCode (ret,
								       argType,
								       yyvsp[-1].expr,
								       yyvsp[-2].value),
							  NewExprAtom (symbol->symbol.name, symbol, False));
			    }
			    else
				symbol->symbol.forward = True;
			}
			yyval.expr = NewExprDecl (FUNC, decl, class, type, publish);
		    }
break;
case 68:
#line 528 "gram.y"
{ 
			DeclListPtr decl;

			decl = NewDeclList (yyvsp[-6].atom, 0, 0);
			decl->symbol = ParseNewSymbol (yyvsp[-9].publish, 
						       class_exception, 
						       typePoly, yyvsp[-6].atom);
			decl->symbol->exception.doc = yyvsp[-2].value;
			yyval.expr = NewExprDecl (EXCEPTION,
					  decl,
					  class_exception,
					  NewTypeFunc (typePoly, yyvsp[-4].argType),
					  yyvsp[-9].publish);
		    }
break;
case 69:
#line 543 "gram.y"
{ yyval.expr = NewExprTree (RAISE, yyvsp[-4].expr, yyvsp[-2].expr); }
break;
case 70:
#line 545 "gram.y"
{ 
			DeclListPtr decl;

			for (decl = yyvsp[-2].declList; decl; decl = decl->next)
			    decl->symbol = ParseNewSymbol (yyvsp[-5].publish, class_typedef,
							   0, decl->name);
			yyval.expr = NewExprTree (TYPEDEF, NewExprDecl (TYPEDEF, yyvsp[-2].declList, class_typedef, 0, yyvsp[-5].publish), 0);
		    }
break;
case 71:
#line 554 "gram.y"
{ 
			DeclListPtr decl;

			for (decl = yyvsp[-2].declList; decl; decl = decl->next)
			    decl->symbol = ParseNewSymbol (yyvsp[-6].publish, class_typedef,
							   yyvsp[-3].type, decl->name);
			yyval.expr = NewExprTree (TYPEDEF, NewExprDecl (TYPEDEF, yyvsp[-2].declList, class_typedef, yyvsp[-3].type, yyvsp[-6].publish), 0);
		    }
break;
case 72:
#line 563 "gram.y"
{
			SymbolPtr   symbol;
			Publish	    publish = yyvsp[-3].publish;
			
			/*
			 * this is a hack - save the current namespace
			 * on the parser stack to be restored after
			 * the block is compiled.
			 */
			yyvsp[-2].namespace = CurrentNamespace;
			if (publish == publish_extend)
			{
			    symbol = NamespaceFindName (CurrentNamespace, yyvsp[0].atom, True);
			    if (!symbol)
			    {
				ParseError ("non-existant namespace %A", yyvsp[0].atom);
				YYERROR;
			    }
			    else if (symbol->symbol.class != class_namespace)
			    {
				ParseError ("%A is not a namespace", yyvsp[0].atom);
				YYERROR;
			    }
			    else
				CurrentNamespace = symbol->namespace.namespace;
			}
			else
			{
			    symbol = ParseNewSymbol (yyvsp[-3].publish, class_namespace,
						     0, yyvsp[0].atom);
			    CurrentNamespace = NewNamespace (CurrentNamespace);
			    symbol->namespace.namespace = CurrentNamespace;
			}
			/*
			 * Make all of the symbols visible while compiling within
			 * the namespace
			 */
			if (CurrentNamespace != yyvsp[-2].namespace)
			    CurrentNamespace->publish = publish_public;
		    }
break;
case 73:
#line 604 "gram.y"
{
			/*
			 * close the namespace to non-public lookups
			 */
			if (CurrentNamespace != yyvsp[-7].namespace)
			    CurrentNamespace->publish = publish_private;
			/*
			 * Restore to the namespace saved on
			 * the parser stack
			 */
			CurrentNamespace = yyvsp[-7].namespace;
			yyval.expr = NewExprTree (NAMESPACE, NewExprAtom (yyvsp[-5].atom, 0, False), yyvsp[-2].expr);
		    }
break;
case 74:
#line 618 "gram.y"
{
			SymbolPtr	symbol;
			ExprPtr		p, e, n;

			p = yyvsp[-2].expr;
			for (p = yyvsp[-2].expr; p; p = n)
			{
			    if (p->base.tag == COMMA)
			    {
				e = p->tree.left;
				n = p->tree.right;
			    }
			    else
			    {
				e = p;
				n = 0;
			    }
			    if (e->base.tag == COLONCOLON)
				e = e->tree.right;
			    symbol = e->atom.symbol;
			    if (!symbol)
			    {
				ParseError ("non-existant namespace %A", e->atom.atom);
				YYERROR;
			    }
			    else if (symbol->symbol.class != class_namespace)
			    {
				ParseError ("%A is not a namespace", e->atom.atom);
				YYERROR;
			    }
			    NamespaceImport (CurrentNamespace, 
					     symbol->namespace.namespace, yyvsp[-5].publish);
			}
			yyval.expr = NewExprTree (IMPORT, yyvsp[-2].expr, NewExprDecl (IMPORT,
								   0, 
								   class_undef,
								   0,
								   yyvsp[-5].publish));
		    }
break;
case 75:
#line 658 "gram.y"
{ yyval.expr = yyvsp[-1].expr; }
break;
case 76:
#line 660 "gram.y"
{ yyval.expr = NewExprTree (TWIXT, 
					NewExprTree (TWIXT, yyvsp[-6].expr, yyvsp[-4].expr),
					NewExprTree (TWIXT, yyvsp[-2].expr, 0));
		    }
break;
case 77:
#line 666 "gram.y"
{ yyval.expr = NewExprTree(SEMI, yyvsp[-2].expr, yyvsp[0].expr); }
break;
case 78:
#line 668 "gram.y"
{ yyval.expr = NewExprTree(SEMI, yyvsp[0].expr, 0); }
break;
case 80:
#line 673 "gram.y"
{ yyval.expr = yyvsp[-1].expr; }
break;
case 81:
#line 676 "gram.y"
{ yyval.expr = NewExprTree (CATCH, yyvsp[0].expr, yyvsp[-1].expr); }
break;
case 82:
#line 680 "gram.y"
{ yyval.expr = NewExprTree (CATCH, yyvsp[-1].expr, yyvsp[0].expr); }
break;
case 83:
#line 682 "gram.y"
{ yyval.expr = 0; }
break;
case 84:
#line 685 "gram.y"
{ yyval.expr = NewExprCode (NewFuncCode (typePrim[rep_void],
						     yyvsp[-3].argType, yyvsp[-1].expr, yyvsp[-2].value),
					yyvsp[-5].expr); 
		    }
break;
case 86:
#line 692 "gram.y"
{ yyval.expr = 0; }
break;
case 87:
#line 694 "gram.y"
{ ++funcDepth; }
break;
case 88:
#line 694 "gram.y"
{ --funcDepth; yyval.expr = yyvsp[0].expr; }
break;
case 89:
#line 697 "gram.y"
{ yyval.expr = yyvsp[0].expr; }
break;
case 90:
#line 699 "gram.y"
{ 
			yyval.expr = NewExprTree (OC,
					  NewExprTree (RETURNTOK, 0, yyvsp[-1].expr),
					  NewExprTree (OC, 0, 0));
		    }
break;
case 93:
#line 709 "gram.y"
{ seeComment = 1; }
break;
case 94:
#line 712 "gram.y"
{ seeComment = 0; yyval.value = yyvsp[0].value; }
break;
case 96:
#line 716 "gram.y"
{ yyval.value = Void; }
break;
case 97:
#line 719 "gram.y"
{ yyval.expr = yyvsp[-1].expr; }
break;
case 98:
#line 722 "gram.y"
{ yyval.expr = NewExprTree (CASE, yyvsp[-1].expr, yyvsp[0].expr); }
break;
case 99:
#line 724 "gram.y"
{ yyval.expr = 0; }
break;
case 100:
#line 727 "gram.y"
{ yyval.expr = NewExprTree (CASE, yyvsp[-2].expr, yyvsp[0].expr); }
break;
case 101:
#line 729 "gram.y"
{ yyval.expr = NewExprTree (CASE, 0, yyvsp[0].expr); }
break;
case 102:
#line 732 "gram.y"
{ yyval.expr = yyvsp[-1].expr; }
break;
case 103:
#line 735 "gram.y"
{ yyval.expr = NewExprTree (CASE, yyvsp[-1].expr, yyvsp[0].expr); }
break;
case 104:
#line 737 "gram.y"
{ yyval.expr = 0; }
break;
case 105:
#line 740 "gram.y"
{ 
			SymbolPtr   sym = yyvsp[-3].symbol;
			Atom	    sym_atom = sym ? sym->symbol.name : 0;
			ExprPtr	    name = 0;
			
			if (sym)
			    name = NewExprAtom (sym_atom, sym, False);
			    
			yyval.expr = NewExprTree (CASE, 
					  NewExprTree (CASE,
						       NewExprAtom (yyvsp[-4].atom, 0, False),
						       name),
					  yyvsp[-1].expr);
		    }
break;
case 106:
#line 755 "gram.y"
{ yyval.expr = NewExprTree (CASE, 0, yyvsp[0].expr); }
break;
case 107:
#line 758 "gram.y"
{
			yyval.symbol = ParseNewSymbol (publish_private,
					     class_undef,
					     typePoly,
					     yyvsp[0].atom);
		    }
break;
case 108:
#line 765 "gram.y"
{ yyval.symbol = 0; }
break;
case 109:
#line 771 "gram.y"
{ yyval.atomList = NewAtomList (yyvsp[0].atomList, yyvsp[-2].atom); }
break;
case 110:
#line 773 "gram.y"
{ yyval.atomList = NewAtomList (0, yyvsp[0].atom); }
break;
case 111:
#line 776 "gram.y"
{ yyval.declList = NewDeclList (yyvsp[-2].atom, 0, yyvsp[0].declList); }
break;
case 112:
#line 778 "gram.y"
{ yyval.declList = NewDeclList (yyvsp[0].atom, 0, 0); }
break;
case 115:
#line 792 "gram.y"
{ 
			if (yyvsp[-3].symbol)
			{
			    yyval.declList = NewDeclList (yyvsp[-3].symbol->symbol.name, yyvsp[-2].expr, yyvsp[0].declList); 
			    yyval.declList->symbol = yyvsp[-3].symbol;
			}
			else
			    yyval.declList = yyvsp[0].declList;
		    }
break;
case 116:
#line 802 "gram.y"
{ 
			if (yyvsp[-1].symbol)
			{
			    yyval.declList = NewDeclList (yyvsp[-1].symbol->symbol.name, yyvsp[0].expr, 0);
			    yyval.declList->symbol = yyvsp[-1].symbol;
			}
			else
			    yyvsp[-1].symbol = 0;
		    }
break;
case 117:
#line 813 "gram.y"
{	
			yyval.symbol = ParseNewSymbol (yyvsp[-1].fulltype.publish,
					     yyvsp[-1].fulltype.class,
					     yyvsp[-1].fulltype.type,
					     yyvsp[0].atom);
		    }
break;
case 118:
#line 825 "gram.y"
{ yyval.fulltype = yyvsp[-3].fulltype; }
break;
case 119:
#line 831 "gram.y"
{
			NamespacePtr	save = CurrentNamespace;
			SymbolPtr	symbol;
			Type		*type = NewTypeFunc (yyvsp[-3].funcDecl.type.type, yyvsp[-1].argType);
			/*
			 * namespace_start pushed a new namespace, make sure
			 * this symbol is placed in the original namespace
			 */
			CurrentNamespace = save->previous;
			symbol = NamespaceFindName (CurrentNamespace, yyvsp[-3].funcDecl.decl->name, True);
			if (symbol && symbol->symbol.forward)
			{
			    if (!TypeIsSupertype (symbol->symbol.type, type))
			    {
				ParseError ("%A redefinition with different type",
					    yyvsp[-3].funcDecl.decl->name);
				symbol = 0;
			    }
			}
			else
			{
			    symbol = ParseNewSymbol (yyvsp[-3].funcDecl.type.publish,
						     yyvsp[-3].funcDecl.type.class, 
						     type,
						     yyvsp[-3].funcDecl.decl->name);
			}
			CurrentNamespace = save;
			yyval.funcDecl = yyvsp[-3].funcDecl;
			yyval.funcDecl.decl->symbol = symbol;
			yyval.funcDecl.type.type = type;
		    }
break;
case 120:
#line 864 "gram.y"
{ yyval.funcDecl.type = yyvsp[-2].fulltype; yyval.funcDecl.decl = NewDeclList (yyvsp[-1].atom, 0, 0); }
break;
case 121:
#line 866 "gram.y"
{ yyval.funcDecl.type = yyvsp[-3].fulltype; yyval.funcDecl.decl = NewDeclList (yyvsp[-1].atom, 0, 0); }
break;
case 122:
#line 868 "gram.y"
{ 
			yyval.funcDecl.type.publish = publish_private;
			yyval.funcDecl.type.class = class_undef;
			yyval.funcDecl.type.type = typePoly;
			yyval.funcDecl.decl = NewDeclList (yyvsp[-1].atom, 0, 0); 
		    }
break;
case 123:
#line 876 "gram.y"
{ yyval.expr = yyvsp[0].expr; }
break;
case 124:
#line 878 "gram.y"
{ yyval.expr = yyvsp[0].expr; }
break;
case 125:
#line 880 "gram.y"
{ yyval.expr = 0; }
break;
case 126:
#line 886 "gram.y"
{ yyval.fulltype.publish = yyvsp[-3].publish; yyval.fulltype.class = yyvsp[-2].class; yyval.fulltype.type = yyvsp[-1].type; }
break;
case 127:
#line 888 "gram.y"
{ yyval.fulltype.publish = publish_private; yyval.fulltype.class = yyvsp[-2].class; yyval.fulltype.type = yyvsp[-1].type; }
break;
case 128:
#line 890 "gram.y"
{ yyval.fulltype.publish = publish_private; yyval.fulltype.class = class_undef; yyval.fulltype.type = yyvsp[-1].type; }
break;
case 129:
#line 896 "gram.y"
{ yyval.type = NewTypeFunc (yyvsp[0].type, yyvsp[-1].argType); }
break;
case 130:
#line 898 "gram.y"
{ yyval.type = NewTypeArray (yyvsp[0].type, yyvsp[-2].expr, False); }
break;
case 131:
#line 900 "gram.y"
{ yyval.type = NewTypeArray (yyvsp[0].type, yyvsp[-2].expr, True); }
break;
case 132:
#line 902 "gram.y"
{ yyval.type = NewTypeArray (yyvsp[0].type, yyvsp[-2].expr, False); }
break;
case 133:
#line 904 "gram.y"
{ yyval.type = NewTypeHash (yyvsp[0].type, yyvsp[-2].type); }
break;
case 134:
#line 906 "gram.y"
{ yyval.type = 0; }
break;
case 135:
#line 909 "gram.y"
{
			Type	*top = yyvsp[0].type;
			Type	*t, **bot = &top;

			/*
			 * Walk down the type chain to hang the
			 * base type off of the end.  This
			 * makes int[]() be an array of functions
			 * rather than a function returning an array
			 */
			while ((t = *bot))
			    switch (t->base.tag) {
			    case type_array:
				bot = &t->array.type;
				break;
			    case type_hash:
				bot = &t->hash.type;
				break;
			    case type_func:
				bot = &t->func.ret;
				break;
			    default:
				assert(0);
			    }
			*bot = yyvsp[-1].type;
			yyval.type = top;
		    }
break;
case 136:
#line 937 "gram.y"
{ yyval.type = NewTypeRef (yyvsp[0].type, True); }
break;
case 137:
#line 939 "gram.y"
{ yyval.type = NewTypeRef (NewTypeRef (yyvsp[0].type, True), True); }
break;
case 138:
#line 941 "gram.y"
{ yyval.type = NewTypeRef (NewTypeRef (yyvsp[0].type, False), False); }
break;
case 139:
#line 943 "gram.y"
{ yyval.type = NewTypeRef (yyvsp[0].type, False); }
break;
case 141:
#line 947 "gram.y"
{
			AtomListPtr	al;
			StructType	*st;
			MemListPtr	ml;
			int		nelements;

			nelements = 0;
			for (ml = yyvsp[-1].memList; ml; ml = ml->next)
			{
			    for (al = ml->atoms; al; al = al->next)
				nelements++;
			}
			st = NewStructType (nelements);
			nelements = 0;
			for (ml = yyvsp[-1].memList; ml; ml = ml->next)
			{
			    for (al = ml->atoms; al; al = al->next)
			    {
				AddBoxType (&st->types, ml->type);
				StructTypeAtoms(st)[nelements] = al->atom;
				nelements++;
			    }
			}
			yyval.type = NewTypeStruct (st);
		    }
break;
case 142:
#line 973 "gram.y"
{
			AtomListPtr	al;
			StructType	*st;
			MemListPtr	ml;
			int		nelements;

			nelements = 0;
			for (ml = yyvsp[-1].memList; ml; ml = ml->next)
			{
			    for (al = ml->atoms; al; al = al->next)
				nelements++;
			}
			st = NewStructType (nelements);
			nelements = 0;
			for (ml = yyvsp[-1].memList; ml; ml = ml->next)
			{
			    for (al = ml->atoms; al; al = al->next)
			    {
				AddBoxType (&st->types, ml->type);
				StructTypeAtoms(st)[nelements] = al->atom;
				nelements++;
			    }
			}
			yyval.type = NewTypeUnion (st, False);
		    }
break;
case 143:
#line 999 "gram.y"
{
			AtomListPtr	al;
			StructType	*st;
			int		nelements;

			nelements = 0;
			for (al = yyvsp[-1].atomList; al; al = al->next)
			    nelements++;
			
			st = NewStructType (nelements);
			nelements = 0;
			for (al = yyvsp[-1].atomList; al; al = al->next)
			{
			    AddBoxType (&st->types, typePrim[rep_void]);
			    StructTypeAtoms(st)[nelements] = al->atom;
			    nelements++;
			}
			yyval.type = NewTypeUnion (st, True);
		    }
break;
case 144:
#line 1020 "gram.y"
{ yyval.type = yyvsp[-1].type; }
break;
case 145:
#line 1022 "gram.y"
{ yyval.type = NewTypeName (yyvsp[0].expr, 0); }
break;
case 147:
#line 1026 "gram.y"
{ yyval.type = typePoly; }
break;
case 162:
#line 1044 "gram.y"
{ yyval.expr = 0; }
break;
case 163:
#line 1047 "gram.y"
{ yyval.expr = NewExprTree (COMMA, 0, yyvsp[-2].expr); }
break;
case 164:
#line 1049 "gram.y"
{ yyval.expr = NewExprTree (COMMA, 0, 0); }
break;
case 165:
#line 1052 "gram.y"
{ yyval.expr = NewExprTree (COMMA, 0, yyvsp[-2].expr); }
break;
case 166:
#line 1054 "gram.y"
{ yyval.expr = NewExprTree (COMMA, 0, 0); }
break;
case 167:
#line 1057 "gram.y"
{ yyval.expr = NewExprTree (COMMA, yyvsp[-2].expr, yyvsp[0].expr); }
break;
case 168:
#line 1059 "gram.y"
{ yyval.expr = NewExprTree (COMMA, yyvsp[0].expr, 0); }
break;
case 169:
#line 1065 "gram.y"
{ yyval.memList = NewMemList (yyvsp[-2].atomList, yyvsp[-3].type, yyvsp[0].memList); }
break;
case 170:
#line 1067 "gram.y"
{ yyval.memList = 0; }
break;
case 171:
#line 1070 "gram.y"
{ yyval.memList = NewMemList (yyvsp[-2].atomList, yyvsp[-3].type, yyvsp[0].memList); }
break;
case 172:
#line 1072 "gram.y"
{ yyval.memList = 0; }
break;
case 174:
#line 1079 "gram.y"
{ yyval.class = class_undef; }
break;
case 180:
#line 1088 "gram.y"
{ yyval.publish = publish_private; }
break;
case 185:
#line 1102 "gram.y"
{ yyval.argType = yyvsp[-1].argType; }
break;
case 186:
#line 1104 "gram.y"
{ yyval.argType = 0; }
break;
case 187:
#line 1107 "gram.y"
{ yyval.argType = NewArgType (yyvsp[-2].argDecl.type, False, yyvsp[-2].argDecl.name, 0, yyvsp[0].argType); }
break;
case 188:
#line 1109 "gram.y"
{ yyval.argType = NewArgType (yyvsp[-1].argDecl.type, yyvsp[0].bool, yyvsp[-1].argDecl.name, 0, 0); }
break;
case 189:
#line 1112 "gram.y"
{ 
			ParseCanonType (yyvsp[-1].type, False);
			yyval.argDecl.type = yyvsp[-1].type; 
			yyval.argDecl.name = yyvsp[0].atom; 
		    }
break;
case 190:
#line 1118 "gram.y"
{ 
			ParseCanonType (yyvsp[0].type, False);
			yyval.argDecl.type = yyvsp[0].type;
			yyval.argDecl.name = 0; 
		    }
break;
case 191:
#line 1129 "gram.y"
{ yyval.argType = yyvsp[-1].argType; }
break;
case 192:
#line 1132 "gram.y"
{
			ArgType	*args;
			Type	*type;

			for (args = yyvsp[0].argType; args; args = args->next)
			{
			    type = args->type;
			    if (ParseCanonType (type, False) != CanonTypeDefined)
				break;
			    if (args->varargs)
			    {
				type = NewTypeArray (type,
						     NewExprTree (COMMA,
								  NewExprConst (TEN_NUM, 
										NewInt (0)),
								  0),
						     False);
			    }
			    args->symbol = ParseNewSymbol (publish_private,
							   class_arg, 
							   type, args->name);
			}
			yyval.argType = yyvsp[0].argType;
		    }
break;
case 193:
#line 1157 "gram.y"
{ yyval.argType = 0; }
break;
case 194:
#line 1160 "gram.y"
{ yyval.argType = NewArgType (yyvsp[-2].argDecl.type, False, yyvsp[-2].argDecl.name, 0, yyvsp[0].argType); }
break;
case 195:
#line 1162 "gram.y"
{ yyval.argType = NewArgType (yyvsp[-1].argDecl.type, yyvsp[0].bool, yyvsp[-1].argDecl.name, 0, 0); }
break;
case 196:
#line 1165 "gram.y"
{ yyval.argDecl.type = yyvsp[-1].type; yyval.argDecl.name = yyvsp[0].atom; }
break;
case 197:
#line 1167 "gram.y"
{ yyval.argDecl.type = yyvsp[0].type; yyval.argDecl.name = 0; }
break;
case 198:
#line 1170 "gram.y"
{ yyval.bool = True; }
break;
case 199:
#line 1172 "gram.y"
{ yyval.bool = False; }
break;
case 201:
#line 1180 "gram.y"
{ yyval.expr = 0; }
break;
case 203:
#line 1184 "gram.y"
{ 
			DeclList    *decl;

			for (decl = yyvsp[0].declList; decl; decl = decl->next)
			{
			    if (decl->init)
			    {
				if (!decl->init->base.type)
				    decl->init->base.type = yyvsp[-1].fulltype.type;
			    }
			}

			yyval.expr = NewExprDecl (VAR, yyvsp[0].declList, yyvsp[-1].fulltype.class, yyvsp[-1].fulltype.type, yyvsp[-1].fulltype.publish); 
		    }
break;
case 205:
#line 1201 "gram.y"
{ yyval.expr = NewExprTree(COMMA, yyvsp[-2].expr, yyvsp[0].expr); }
break;
case 207:
#line 1208 "gram.y"
{ yyval.expr = 0; }
break;
case 208:
#line 1211 "gram.y"
{ yyval.expr = NewExprTree (COMMA, yyvsp[-2].expr, yyvsp[0].expr); }
break;
case 209:
#line 1213 "gram.y"
{ yyval.expr = NewExprTree (COMMA, yyvsp[0].expr, 0); }
break;
case 211:
#line 1217 "gram.y"
{ yyval.expr = 0; }
break;
case 212:
#line 1220 "gram.y"
{ yyval.expr = NewExprTree (COMMA, yyvsp[-2].expr, yyvsp[0].expr); }
break;
case 213:
#line 1222 "gram.y"
{	
			ExprPtr	arg = yyvsp[0].bool ? NewExprTree (DOTDOTDOT, yyvsp[-1].expr, 0) : yyvsp[-1].expr;
			yyval.expr = NewExprTree (COMMA, arg, 0); 
		    }
break;
case 214:
#line 1228 "gram.y"
{ 
			yyval.expr = NewExprTree (OC,
					  NewExprTree (RETURNTOK, 0, yyvsp[0].expr),
					  NewExprTree (OC, 0, 0));
		    }
break;
case 215:
#line 1233 "gram.y"
{ ++funcDepth; }
break;
case 216:
#line 1233 "gram.y"
{ --funcDepth; yyval.expr = yyvsp[0].expr; }
break;
case 217:
#line 1239 "gram.y"
{ 
			if (yyvsp[-1].ints == ASSIGNPOW)
			    yyval.expr = NewExprTree (ASSIGNPOW, 
					      BuildName ("Math", "assign_pow"),
					      NewExprTree (ASSIGNPOW, yyvsp[-2].expr, yyvsp[0].expr));
			else
			{
			    ExprPtr left = yyvsp[-2].expr;
			    /*
			     * Automatically declare names used in
			     * simple assignements at the top level
			     */
			    if (yyvsp[-1].ints == ASSIGN && 
				funcDepth == 0 &&
				left->base.tag == NAME && 
				!(left->atom.symbol))
			    {
				yyvsp[-2].expr->atom.symbol = ParseNewSymbol (publish_private,
								  class_undef, 
								  typePoly, 
								  yyvsp[-2].expr->atom.atom);
			    }
			    yyval.expr = NewExprTree(yyvsp[-1].ints, yyvsp[-2].expr, yyvsp[0].expr); 
			}
		    }
break;
case 218:
#line 1265 "gram.y"
{
			ParseCanonType (yyvsp[-6].type, False);
			yyval.expr = NewExprCode (NewFuncCode (yyvsp[-6].type, yyvsp[-3].argType, yyvsp[-1].expr, yyvsp[-2].value), 0); 
		    }
break;
case 219:
#line 1270 "gram.y"
{   Value	t;
			t = do_Thread_id_to_thread (yyvsp[0].value);
			if (t == Void)
			{
			    ParseError ("No thread %v", yyvsp[0].value);
			    YYERROR;
			}
			else
			    yyval.expr = NewExprConst(THREAD_CONST, t); 
		    }
break;
case 220:
#line 1281 "gram.y"
{ yyval.expr = NewExprTree(STAR, yyvsp[0].expr, (Expr *) 0); }
break;
case 221:
#line 1283 "gram.y"
{ yyval.expr = NewExprTree(STAR, NewExprTree (STAR, yyvsp[0].expr, 0), 0); }
break;
case 222:
#line 1285 "gram.y"
{ yyval.expr = NewExprTree(AMPER, yyvsp[0].expr, (Expr *) 0); }
break;
case 223:
#line 1287 "gram.y"
{ yyval.expr = NewExprTree(AMPER, 
				       NewExprTree (AMPER, yyvsp[0].expr, (Expr *) 0), 
				       (Expr *) 0); }
break;
case 224:
#line 1291 "gram.y"
{ yyval.expr = NewExprTree(UMINUS, yyvsp[0].expr, (Expr *) 0); }
break;
case 225:
#line 1293 "gram.y"
{ yyval.expr = NewExprTree(LNOT, yyvsp[0].expr, (Expr *) 0); }
break;
case 226:
#line 1295 "gram.y"
{ yyval.expr = NewExprTree(BANG, yyvsp[0].expr, (Expr *) 0); }
break;
case 227:
#line 1297 "gram.y"
{ yyval.expr = NewExprTree(FACT, yyvsp[-1].expr, (Expr *) 0); }
break;
case 228:
#line 1299 "gram.y"
{ yyval.expr = NewExprTree(INC, yyvsp[0].expr, (Expr *) 0); }
break;
case 229:
#line 1301 "gram.y"
{ yyval.expr = NewExprTree(INC, (Expr *) 0, yyvsp[-1].expr); }
break;
case 230:
#line 1303 "gram.y"
{ yyval.expr = NewExprTree(DEC, yyvsp[0].expr, (Expr *) 0); }
break;
case 231:
#line 1305 "gram.y"
{ yyval.expr = NewExprTree(DEC, (Expr *) 0, yyvsp[-1].expr); }
break;
case 232:
#line 1307 "gram.y"
{ yyval.expr = NewExprTree (FORK, (Expr *) 0, yyvsp[0].expr); }
break;
case 233:
#line 1309 "gram.y"
{ yyval.expr = NewExprTree(PLUS, yyvsp[-2].expr, yyvsp[0].expr); }
break;
case 234:
#line 1311 "gram.y"
{ yyval.expr = NewExprTree(MINUS, yyvsp[-2].expr, yyvsp[0].expr); }
break;
case 235:
#line 1313 "gram.y"
{ yyval.expr = NewExprTree(TIMES, yyvsp[-2].expr, yyvsp[0].expr); }
break;
case 236:
#line 1315 "gram.y"
{ yyval.expr = NewExprTree(DIVIDE, yyvsp[-2].expr, yyvsp[0].expr); }
break;
case 237:
#line 1317 "gram.y"
{ yyval.expr = NewExprTree(DIV, yyvsp[-2].expr, yyvsp[0].expr); }
break;
case 238:
#line 1319 "gram.y"
{ yyval.expr = NewExprTree(MOD, yyvsp[-2].expr, yyvsp[0].expr); }
break;
case 239:
#line 1321 "gram.y"
{ 
			yyval.expr = NewExprTree(POW, 
					 BuildName ("Math", "pow"), 
					 NewExprTree (POW, yyvsp[-2].expr, yyvsp[0].expr)); 
		    }
break;
case 240:
#line 1327 "gram.y"
{
			yyval.expr = NewExprTree (POW,
					  BuildName("Math", "pow"),
					  NewExprTree (POW, yyvsp[-1].expr,
						       NewExprConst (TEN_NUM,
								     NewInt(2))));
		    }
break;
case 241:
#line 1335 "gram.y"
{
			yyval.expr = NewExprTree (POW,
					  BuildName("Math", "pow"),
					  NewExprTree (POW, yyvsp[-1].expr,
						       NewExprConst (TEN_NUM,
								     NewInt(3))));
		    }
break;
case 242:
#line 1343 "gram.y"
{ yyval.expr = NewExprTree(SHIFTL, yyvsp[-2].expr, yyvsp[0].expr); }
break;
case 243:
#line 1345 "gram.y"
{ yyval.expr = NewExprTree(SHIFTR, yyvsp[-2].expr, yyvsp[0].expr); }
break;
case 244:
#line 1347 "gram.y"
{ yyval.expr = NewExprTree(QUEST, yyvsp[-4].expr, NewExprTree(COLON, yyvsp[-2].expr, yyvsp[0].expr)); }
break;
case 245:
#line 1349 "gram.y"
{ yyval.expr = NewExprTree(LXOR, yyvsp[-2].expr, yyvsp[0].expr); }
break;
case 246:
#line 1351 "gram.y"
{ yyval.expr = NewExprTree(LAND, yyvsp[-2].expr, yyvsp[0].expr); }
break;
case 247:
#line 1353 "gram.y"
{ yyval.expr = NewExprTree(LOR, yyvsp[-2].expr, yyvsp[0].expr); }
break;
case 248:
#line 1355 "gram.y"
{ yyval.expr = NewExprTree(AND, yyvsp[-2].expr, yyvsp[0].expr); }
break;
case 249:
#line 1357 "gram.y"
{ yyval.expr = NewExprTree(OR, yyvsp[-2].expr, yyvsp[0].expr); }
break;
case 250:
#line 1359 "gram.y"
{ yyval.expr = NewExprTree(EQ, yyvsp[-2].expr, yyvsp[0].expr); }
break;
case 251:
#line 1361 "gram.y"
{ yyval.expr = NewExprTree(NE, yyvsp[-2].expr, yyvsp[0].expr); }
break;
case 252:
#line 1363 "gram.y"
{ yyval.expr = NewExprTree(LT, yyvsp[-2].expr, yyvsp[0].expr); }
break;
case 253:
#line 1365 "gram.y"
{ yyval.expr = NewExprTree(GT, yyvsp[-2].expr, yyvsp[0].expr); }
break;
case 254:
#line 1367 "gram.y"
{ yyval.expr = NewExprTree(LE, yyvsp[-2].expr, yyvsp[0].expr); }
break;
case 255:
#line 1369 "gram.y"
{ yyval.expr = NewExprTree(GE, yyvsp[-2].expr, yyvsp[0].expr); }
break;
case 257:
#line 1372 "gram.y"
{ yyval.expr = NewExprConst(TEN_NUM, yyvsp[0].value); }
break;
case 258:
#line 1374 "gram.y"
{ yyval.expr = NewExprConst(OCTAL_NUM, yyvsp[0].value); }
break;
case 259:
#line 1376 "gram.y"
{ yyval.expr = NewExprConst(OCTAL0_NUM, yyvsp[0].value); }
break;
case 260:
#line 1378 "gram.y"
{ yyval.expr = NewExprConst(BINARY_NUM, yyvsp[0].value); }
break;
case 261:
#line 1380 "gram.y"
{ yyval.expr = NewExprConst(HEX_NUM, yyvsp[0].value); }
break;
case 262:
#line 1382 "gram.y"
{ yyval.expr = NewExprConst(TEN_FLOAT, yyvsp[0].value); }
break;
case 263:
#line 1384 "gram.y"
{ yyval.expr = NewExprConst(OCTAL_FLOAT, yyvsp[0].value); }
break;
case 264:
#line 1386 "gram.y"
{ yyval.expr = NewExprConst(OCTAL0_FLOAT, yyvsp[0].value); }
break;
case 265:
#line 1388 "gram.y"
{ yyval.expr = NewExprConst(BINARY_FLOAT, yyvsp[0].value); }
break;
case 266:
#line 1390 "gram.y"
{ yyval.expr = NewExprConst(HEX_FLOAT, yyvsp[0].value); }
break;
case 267:
#line 1392 "gram.y"
{ yyval.expr = NewExprConst(CHAR_CONST, yyvsp[0].value); }
break;
case 268:
#line 1394 "gram.y"
{ yyval.expr = NewExprConst(STRING_CONST, yyvsp[0].value); }
break;
case 269:
#line 1396 "gram.y"
{ yyval.expr = NewExprConst(VOIDVAL, yyvsp[0].value); }
break;
case 270:
#line 1398 "gram.y"
{ yyval.expr = NewExprConst(BOOLVAL, yyvsp[0].value); }
break;
case 271:
#line 1400 "gram.y"
{ 
			yyval.expr = BuildFullname (0, AtomId ("[]"));
		    }
break;
case 272:
#line 1404 "gram.y"
{ 
			ParseCanonType (yyvsp[-4].type, False);
			if (yyvsp[-1].expr)
			    yyvsp[-1].expr->base.type = yyvsp[-4].type;
			yyval.expr = NewExprTree (NEW, yyvsp[-1].expr, 0);
			yyval.expr->base.type = yyvsp[-4].type;
		    }
break;
case 273:
#line 1412 "gram.y"
{ 
			yyvsp[-1].expr->base.type = NewTypeArray (typePoly, yyvsp[-5].expr, True); 
			ParseCanonType (yyvsp[-1].expr->base.type, False);
			yyval.expr = NewExprTree (NEW, yyvsp[-1].expr, 0); 
			yyval.expr->base.type = yyvsp[-1].expr->base.type;
		    }
break;
case 274:
#line 1419 "gram.y"
{ 
			TypePtr	t = NewTypeArray (typePoly, yyvsp[-5].expr, False);
			ParseCanonType (t, False);
			yyval.expr = NewExprTree (NEW, yyvsp[-1].expr, 0); 
			if (yyvsp[-1].expr)
			    yyvsp[-1].expr->base.type = t;
			yyval.expr->base.type = t;
		    }
break;
case 275:
#line 1428 "gram.y"
{
			TypePtr t = NewTypeHash (typePoly, yyvsp[-5].type);
			ParseCanonType (t, False);
			yyval.expr = NewExprTree (NEW, yyvsp[-1].expr, 0);
			if (yyvsp[-1].expr)
			    yyvsp[-1].expr->base.type = t;
			yyval.expr->base.type = t;
		    }
break;
case 276:
#line 1437 "gram.y"
{
			ParseCanonType (yyvsp[-2].type, False);
			yyval.expr = NewExprTree (UNION, NewExprAtom (yyvsp[0].atom, 0, False), 0); 
			yyval.expr->base.type = yyvsp[-2].type;
		    }
break;
case 277:
#line 1443 "gram.y"
{ 
			ParseCanonType (yyvsp[-4].type, False);
			yyval.expr = NewExprTree (UNION, NewExprAtom (yyvsp[-2].atom, 0, False), yyvsp[0].expr); 
			yyval.expr->base.type = yyvsp[-4].type;
		    }
break;
case 278:
#line 1449 "gram.y"
{ yyval.expr = BuildCall ("History", "fetch", 1, NewExprConst (TEN_NUM, yyvsp[0].value)); }
break;
case 279:
#line 1451 "gram.y"
{ yyval.expr = NewExprTree (DOLLAR, 0, 0); }
break;
case 280:
#line 1453 "gram.y"
{ yyval.expr = yyvsp[-1].expr; }
break;
case 281:
#line 1455 "gram.y"
{ yyval.expr = yyvsp[-1].expr; }
break;
case 282:
#line 1457 "gram.y"
{ yyval.expr = NewExprTree (OS, NewExprTree (STAR, yyvsp[-3].expr, (Expr *) 0), yyvsp[-1].expr); }
break;
case 283:
#line 1459 "gram.y"
{ yyval.expr = NewExprTree(OS, yyvsp[-3].expr, yyvsp[-1].expr); }
break;
case 284:
#line 1461 "gram.y"
{ yyval.expr = NewExprTree (OP, yyvsp[-3].expr, yyvsp[-1].expr); }
break;
case 285:
#line 1463 "gram.y"
{ yyval.expr = NewExprTree(DOT, yyvsp[-2].expr, NewExprAtom (yyvsp[0].atom, 0, False)); }
break;
case 286:
#line 1465 "gram.y"
{ yyval.expr = NewExprTree(ARROW, yyvsp[-2].expr, NewExprAtom (yyvsp[0].atom, 0, False)); }
break;
case 288:
#line 1469 "gram.y"
{ yyval.value = Zero; }
break;
case 310:
#line 1497 "gram.y"
{ yyval.expr = 0; }
break;
case 311:
#line 1499 "gram.y"
{ yyval.expr = 0; }
break;
case 312:
#line 1502 "gram.y"
{ 
			ExprPtr	elts = yyvsp[-3].expr ? ExprRehang (yyvsp[-3].expr, 0) : 0;
			if (yyvsp[-1].bool)
			{
			    ExprPtr i = elts;
			    while (i->tree.right)
				i = i->tree.right;
			    i->tree.right = NewExprTree (COMMA, 
							 NewExprTree (DOTDOTDOT, 0, 0),
							 0);
			}
			yyval.expr = NewExprTree (ARRAY, elts, 0); 
		    }
break;
case 313:
#line 1516 "gram.y"
{
			yyval.expr = NewExprTree (COMP, NewExprTree (COMP, yyvsp[-5].expr, yyvsp[-4].expr), yyvsp[-2].expr);
		    }
break;
case 314:
#line 1521 "gram.y"
{ yyval.expr = yyvsp[0].expr; }
break;
case 316:
#line 1525 "gram.y"
{ yyval.expr = NewExprTree (COMMA, yyvsp[-2].expr, yyvsp[0].expr); }
break;
case 318:
#line 1529 "gram.y"
{ 
			SymbolPtr   s;
			s = ParseNewSymbol (publish_private, class_arg, 
					    typePrim[rep_integer], yyvsp[0].atom);
			yyval.expr = NewExprAtom (yyvsp[0].atom, s, False); 
		    }
break;
case 319:
#line 1537 "gram.y"
{
			SymbolPtr   s;
			Atom	    a = AtomId("[]");
			s = ParseNewSymbol (publish_private, class_undef,
					    typePoly, a);
			yyval.expr = NewExprAtom (a, s, False);
		    }
break;
case 320:
#line 1546 "gram.y"
{ yyval.expr = NewExprTree (COMMA, yyvsp[-2].expr, yyvsp[0].expr); }
break;
case 321:
#line 1548 "gram.y"
{ yyval.expr = NewExprTree (COMMA, 0, yyvsp[0].expr); }
break;
case 325:
#line 1559 "gram.y"
{ yyval.expr = 0; }
break;
case 326:
#line 1561 "gram.y"
{ yyval.expr = 0; }
break;
case 327:
#line 1564 "gram.y"
{
			ExprPtr elts = yyvsp[-2].expr ? ExprRehang (yyvsp[-2].expr, 0) : 0;
			yyval.expr = NewExprTree (HASH, elts, 0);
		    }
break;
case 328:
#line 1570 "gram.y"
{ yyval.expr = NewExprTree (COMMA, yyvsp[-2].expr, yyvsp[0].expr); }
break;
case 329:
#line 1572 "gram.y"
{ yyval.expr = NewExprTree (COMMA, 0, yyvsp[0].expr); }
break;
case 330:
#line 1575 "gram.y"
{ yyval.expr = NewExprTree (DARROW, yyvsp[-2].expr, yyvsp[0].expr); }
break;
case 331:
#line 1577 "gram.y"
{ yyval.expr = NewExprTree (DARROW, 0, yyvsp[0].expr); }
break;
case 334:
#line 1586 "gram.y"
{ yyval.expr = NewExprTree (STRUCT, ExprRehang (yyvsp[-2].expr, 0), 0); }
break;
case 335:
#line 1589 "gram.y"
{ yyval.expr = NewExprTree (COMMA, yyvsp[-2].expr, yyvsp[0].expr); }
break;
case 336:
#line 1591 "gram.y"
{ yyval.expr = NewExprTree (COMMA, 0, yyvsp[0].expr); }
break;
case 337:
#line 1594 "gram.y"
{ yyval.expr = NewExprTree (ASSIGN, NewExprAtom (yyvsp[-2].atom, 0, False), yyvsp[0].expr); }
break;
case 338:
#line 1596 "gram.y"
{ yyval.expr = NewExprTree (ASSIGN, NewExprAtom (yyvsp[-2].atom, 0, False), yyvsp[0].expr); }
break;
case 342:
#line 1603 "gram.y"
{ yyval.expr = NewExprTree (ANONINIT, 0, 0); }
break;
#line 4750 "gram.c"
    }
    yyssp -= yym;
    yystate = *yyssp;
    yyvsp -= yym;
    yym = yylhs[yyn];
    if (yystate == 0 && yym == 0)
    {
#if YYDEBUG
        if (yydebug)
            printf("%sdebug: after reduction, shifting from state 0 to\
 state %d\n", YYPREFIX, YYFINAL);
#endif
        yystate = YYFINAL;
        *++yyssp = YYFINAL;
        *++yyvsp = yyval;
        if (yychar < 0)
        {
            if ((yychar = yylex()) < 0) yychar = 0;
#if YYDEBUG
            if (yydebug)
            {
                yys = 0;
                if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
                if (!yys) yys = "illegal-symbol";
                printf("%sdebug: state %d, reading %d (%s)\n",
                        YYPREFIX, YYFINAL, yychar, yys);
            }
#endif
        }
        if (yychar == 0) goto yyaccept;
        goto yyloop;
    }
    if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
            yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
        yystate = yytable[yyn];
    else
        yystate = yydgoto[yym];
#if YYDEBUG
    if (yydebug)
        printf("%sdebug: after reduction, shifting from state %d \
to state %d\n", YYPREFIX, *yyssp, yystate);
#endif
    if (yyssp >= yysslim && yygrowstack())
    {
        goto yyoverflow;
    }
    *++yyssp = yystate;
    *++yyvsp = yyval;
    goto yyloop;

yyoverflow:
    yyerror("yacc stack overflow");

yyabort:
    return (1);

yyaccept:
    return (0);
}


syntax highlighted by Code2HTML, v. 0.9.1