pkgsrc-Changes archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

CVS commit: pkgsrc/lang/nawk



Module Name:    pkgsrc
Committed By:   vins
Date:           Tue Sep 12 19:16:52 UTC 2023

Modified Files:
        pkgsrc/lang/nawk: DESCR Makefile
        pkgsrc/lang/nawk/files: FIXES README awk.h awkgram.tab.c awkgram.tab.h
            awkgram.y b.c lex.c lib.c main.c nawk.1 parse.c proctab.c proto.h
            run.c tran.c

Log Message:
lang/nawk: update to release 20230911

This release marks the official 2nd edition of the AWK programming
language!

# CHANGES (since 20220122)

Sep 11, 2023:
        Added --csv option to enable processing of comma-separated
        values inputs.  When --csv is enabled, fields are separated
        by commas, fields may be quoted with " double quotes, fields
        may contain embedded newlines.

        If no explicit separator argument is provided, split() uses
        the setting of --csv to determine how fields are split.

        Strings may now contain UTF-8 code points (not necessarily
        characters).  Functions that operate on characters, like
        length, substr, index, match, etc., use UTF-8, so the length
        of a string of 3 emojis is 3, not 12 as it would be if bytes
        were counted.

        Regular expressions are processes as UTF-8.

        Unicode literals can be written as \u followed by one
        to eight hexadecimal digits.  These may appear in strings and
        regular expressions.

Sep 06, 2023:
        Fix edge case where FS is changed on commandline. Thanks to
        Gordon Shephard and Miguel Pineiro Jr.

        Fix regular expression clobbering in the lexer, where lexer does
        not make a copy of regexp literals. also makedfa memory leaks have
        been plugged. Thanks to Miguel Pineiro Jr.

Dec 15, 2022:
        Force hex escapes in strings to be no more than two characters,
        as they already are in regular expressions. This brings internal
        consistency, as well as consistency with gawk. Thanks to
        Arnold Robbins.

Sep 12, 2022:
        adjbuf minlen error (cannot be 0) in cat, resulting in NULL pbuf.
        discovered by todd miller. also use-after-free issue with
        tempfree in cat, thanks to Miguel Pineiro Jr and valgrind.

Aug 30, 2022:
        Various leaks and use-after-free issues plugged/fixed.
        Thanks to Miguel Pineiro Jr. <mpj%pineiro.cc@localhost>.

May 23, 2022:
        Memory leak when assigning a string to some of the built-in
        variables. allocated string erroneously marked DONTFREE.
        Thanks to Miguel Pineiro Jr. <mpj%pineiro.cc@localhost>.

Mar 14, 2022:
        Historic bug: command-line "name=value" assignment had been
        truncating its entry in ARGV. (circa 1989) Thanks to
        Miguel Pineiro Jr. <mpj%pineiro.cc@localhost>.

Mar 3, 2022:
        Fixed file management memory leak that appears to have been
        there since the files array was first initialized with stdin,
        stdout, and stderr (circa 1992). Thanks to Miguel Pineiro Jr.
        <mpj%pineiro.cc@localhost>.


To generate a diff of this commit:
cvs rdiff -u -r1.2 -r1.3 pkgsrc/lang/nawk/DESCR
cvs rdiff -u -r1.44 -r1.45 pkgsrc/lang/nawk/Makefile
cvs rdiff -u -r1.3 -r1.4 pkgsrc/lang/nawk/files/FIXES \
    pkgsrc/lang/nawk/files/README pkgsrc/lang/nawk/files/awkgram.y \
    pkgsrc/lang/nawk/files/lex.c pkgsrc/lang/nawk/files/main.c
cvs rdiff -u -r1.4 -r1.5 pkgsrc/lang/nawk/files/awk.h \
    pkgsrc/lang/nawk/files/b.c pkgsrc/lang/nawk/files/proctab.c \
    pkgsrc/lang/nawk/files/run.c
cvs rdiff -u -r1.1 -r1.2 pkgsrc/lang/nawk/files/awkgram.tab.c \
    pkgsrc/lang/nawk/files/awkgram.tab.h
cvs rdiff -u -r1.5 -r1.6 pkgsrc/lang/nawk/files/lib.c \
    pkgsrc/lang/nawk/files/proto.h pkgsrc/lang/nawk/files/tran.c
cvs rdiff -u -r1.2 -r1.3 pkgsrc/lang/nawk/files/nawk.1 \
    pkgsrc/lang/nawk/files/parse.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: pkgsrc/lang/nawk/DESCR
diff -u pkgsrc/lang/nawk/DESCR:1.2 pkgsrc/lang/nawk/DESCR:1.3
--- pkgsrc/lang/nawk/DESCR:1.2  Wed May 18 05:22:43 2005
+++ pkgsrc/lang/nawk/DESCR      Tue Sep 12 19:16:52 2023
@@ -1,5 +1,6 @@
 The one, true implementation of the AWK pattern-directed scanning and
 processing language, by one of the language's creators, Brian Kernighan.
-This is the version of awk described in "The AWK Programming Language",
-by Al Aho, Brian Kernighan, and Peter Weinberger (Addison-Wesley,
-1988, ISBN 0-201-07981-X).  It is also known as new awk, or nawk.
+This is the version of awk described in The AWK Programming Language,
+Second Edition, by Al Aho, Brian Kernighan, and Peter Weinberger
+(Addison-Wesley, 2024, ISBN-13 978-0138269722, ISBN-10 0138269726).
+It is also known as new awk, or nawk.

Index: pkgsrc/lang/nawk/Makefile
diff -u pkgsrc/lang/nawk/Makefile:1.44 pkgsrc/lang/nawk/Makefile:1.45
--- pkgsrc/lang/nawk/Makefile:1.44      Fri Feb 24 20:57:50 2023
+++ pkgsrc/lang/nawk/Makefile   Tue Sep 12 19:16:52 2023
@@ -1,6 +1,6 @@
-# $NetBSD: Makefile,v 1.44 2023/02/24 20:57:50 vins Exp $
+# $NetBSD: Makefile,v 1.45 2023/09/12 19:16:52 vins Exp $
 
-DISTNAME=      nawk-20220122
+DISTNAME=      nawk-20230911
 CATEGORIES=    lang
 MASTER_SITES=  # empty
 DISTFILES=     # empty

Index: pkgsrc/lang/nawk/files/FIXES
diff -u pkgsrc/lang/nawk/files/FIXES:1.3 pkgsrc/lang/nawk/files/FIXES:1.4
--- pkgsrc/lang/nawk/files/FIXES:1.3    Fri Feb 24 20:57:50 2023
+++ pkgsrc/lang/nawk/files/FIXES        Tue Sep 12 19:16:52 2023
@@ -23,7 +23,67 @@ THIS SOFTWARE.
 ****************************************************************/
 
 This file lists all bug fixes, changes, etc., made since the AWK book
-was sent to the printers in August, 1987.
+was sent to the printers in August 1987.
+
+Sep 11, 2023:
+       Added --csv option to enable processing of comma-separated
+       values inputs.  When --csv is enabled, fields are separated
+       by commas, fields may be quoted with " double quotes, fields
+       may contain embedded newlines.
+
+       If no explicit separator argument is provided, split() uses
+       the setting of --csv to determine how fields are split.
+
+       Strings may now contain UTF-8 code points (not necessarily
+       characters).  Functions that operate on characters, like
+       length, substr, index, match, etc., use UTF-8, so the length
+       of a string of 3 emojis is 3, not 12 as it would be if bytes
+       were counted.
+
+       Regular expressions are processes as UTF-8.
+
+       Unicode literals can be written as \u followed by one
+       to eight hexadecimal digits.  These may appear in strings and
+       regular expressions.
+
+Sep 06, 2023:
+       Fix edge case where FS is changed on commandline. Thanks to 
+       Gordon Shephard and Miguel Pineiro Jr.
+
+       Fix regular expression clobbering in the lexer, where lexer does
+       not make a copy of regexp literals. also makedfa memory leaks have
+       been plugged. Thanks to Miguel Pineiro Jr.
+       
+Dec 15, 2022:
+       Force hex escapes in strings to be no more than two characters,
+       as they already are in regular expressions. This brings internal
+       consistency, as well as consistency with gawk. Thanks to
+       Arnold Robbins.
+
+Sep 12, 2022:
+       adjbuf minlen error (cannot be 0) in cat, resulting in NULL pbuf.
+       discovered by todd miller. also use-after-free issue with
+       tempfree in cat, thanks to Miguel Pineiro Jr and valgrind.
+
+Aug 30, 2022:
+       Various leaks and use-after-free issues plugged/fixed.
+       Thanks to Miguel Pineiro Jr. <mpj%pineiro.cc@localhost>.
+
+May 23, 2022:
+       Memory leak when assigning a string to some of the built-in
+       variables. allocated string erroneously marked DONTFREE.
+       Thanks to Miguel Pineiro Jr. <mpj%pineiro.cc@localhost>.
+
+Mar 14, 2022:
+       Historic bug: command-line "name=value" assignment had been
+       truncating its entry in ARGV. (circa 1989) Thanks to 
+       Miguel Pineiro Jr. <mpj%pineiro.cc@localhost>.
+
+Mar 3, 2022:
+       Fixed file management memory leak that appears to have been
+       there since the files array was first initialized with stdin,
+       stdout, and stderr (circa 1992). Thanks to Miguel Pineiro Jr.
+       <mpj%pineiro.cc@localhost>.
 
 December 8, 2021:
        The error handling in closefile and closeall was mangled. Long
@@ -309,7 +369,7 @@ Mar 3, 2019:
        #12: Avoid undefined behaviour when using ctype(3) functions in
             relex(). Thanks to GitHub user iamleot.
        #31: Make getline handle numeric strings, and update FIXES. Thanks
-            to GitHub user arnoldrobbins.
+            to GitHub user Arnold Robbins (arnoldrobbins)
        #32: maketab: support build systems with read-only source. Thanks
             to GitHub user enh.
 
Index: pkgsrc/lang/nawk/files/README
diff -u pkgsrc/lang/nawk/files/README:1.3 pkgsrc/lang/nawk/files/README:1.4
--- pkgsrc/lang/nawk/files/README:1.3   Fri Feb 24 20:57:50 2023
+++ pkgsrc/lang/nawk/files/README       Tue Sep 12 19:16:52 2023
@@ -1,8 +1,38 @@
 # The One True Awk
 
 This is the version of `awk` described in _The AWK Programming Language_,
-by Al Aho, Brian Kernighan, and Peter Weinberger
-(Addison-Wesley, 1988, ISBN 0-201-07981-X).
+Second Edition, by Al Aho, Brian Kernighan, and Peter Weinberger
+(Addison-Wesley, 2024, ISBN-13 978-0138269722, ISBN-10 0138269726).
+
+## What's New? ##
+
+This version of Awk handles UTF-8 and comma-separated values (CSV) input.
+
+### Strings ###
+
+Functions that process strings now count Unicode code points, not bytes;
+this affects `length`, `substr`, `index`, `match`, `split`,
+`sub`, `gsub`, and others.  Note that code
+points are not necessarily characters.
+
+UTF-8 sequences may appear in literal strings and regular expressions.
+Aribtrary characters may be included with `\u` followed by 1 to 8 hexadecimal digits.
+
+### Regular expressions ###
+
+Regular expressions may include UTF-8 code points, including `\u`.
+Character classes are likely to be limited to about 256 characters
+when expanded.
+
+### CSV ###
+
+The option `--csv` turns on CSV processing of input:
+fields are separated by commas, fields may be quoted with
+double-quote (`"`) characters, fields may contain embedded newlines.
+In CSV mode, `FS` is ignored.
+
+If no explicit separator argument is provided,
+field-splitting in `split` is determined by CSV mode.
 
 ## Copyright
 
@@ -35,7 +65,7 @@ in `FIXES`.  If you distribute this code
 distribute `FIXES` with it.
 
 If you find errors, please report them
-to bwk%cs.princeton.edu@localhost.
+to the current maintainer, ozan.yigit%gmail.com@localhost.
 Please _also_ open an issue in the GitHub issue tracker, to make
 it easy to track issues.
 Thanks.
@@ -66,23 +96,21 @@ The program itself is created by
        make
 
 which should produce a sequence of messages roughly like this:
-
-       yacc -d awkgram.y
-       conflicts: 43 shift/reduce, 85 reduce/reduce
-       mv y.tab.c ytab.c
-       mv y.tab.h ytab.h
-       cc -c ytab.c
-       cc -c b.c
-       cc -c main.c
-       cc -c parse.c
-       cc maketab.c -o maketab
-       ./maketab >proctab.c
-       cc -c proctab.c
-       cc -c tran.c
-       cc -c lib.c
-       cc -c run.c
-       cc -c lex.c
-       cc ytab.o b.o main.o parse.o proctab.o tran.o lib.o run.o lex.o -lm
+       
+       yacc -d -b awkgram  awkgram.y
+       yacc: 44 shift/reduce conflicts, 85 reduce/reduce conflicts.
+       cc -g -Wall -pedantic -Wcast-qual   -O2   -c -o awkgram.tab.o awkgram.tab.c
+       cc -g -Wall -pedantic -Wcast-qual   -O2   -c -o b.o b.c
+       cc -g -Wall -pedantic -Wcast-qual   -O2   -c -o main.o main.c
+       cc -g -Wall -pedantic -Wcast-qual   -O2   -c -o parse.o parse.c
+       cc -g -Wall -pedantic -Wcast-qual -O2 maketab.c -o maketab
+       ./maketab awkgram.tab.h >proctab.c
+       cc -g -Wall -pedantic -Wcast-qual   -O2   -c -o proctab.o proctab.c
+       cc -g -Wall -pedantic -Wcast-qual   -O2   -c -o tran.o tran.c
+       cc -g -Wall -pedantic -Wcast-qual   -O2   -c -o lib.o lib.c
+       cc -g -Wall -pedantic -Wcast-qual   -O2   -c -o run.o run.c
+       cc -g -Wall -pedantic -Wcast-qual   -O2   -c -o lex.o lex.c
+       cc -g -Wall -pedantic -Wcast-qual   -O2 awkgram.tab.o b.o main.o parse.o proctab.o tran.o lib.o run.o lex.o   -lm
 
 This produces an executable `a.out`; you will eventually want to
 move this to some place like `/usr/bin/awk`.
@@ -90,7 +118,7 @@ move this to some place like `/usr/bin/a
 If your system does not have `yacc` or `bison` (the GNU
 equivalent), you need to install one of them first.
 
-NOTE: This version uses ANSI C (C 99), as you should also.  We have
+NOTE: This version uses ISO/IEC C99, as you should also.  We have
 compiled this without any changes using `gcc -Wall` and/or local C
 compilers on a variety of systems, but new systems or compilers
 may raise some new complaint; reports of difficulties are
@@ -102,14 +130,9 @@ the standard developer tools.
 You can also use `make CC=g++` to build with the GNU C++ compiler,
 should you choose to do so.
 
-The version of `malloc` that comes with some systems is sometimes
-astonishly slow.  If `awk` seems slow, you might try fixing that.
-More generally, turning on optimization can significantly improve
-`awk`'s speed, perhaps by 1/3 for highest levels.
-
 ## A Note About Releases
 
-We don't do releases. 
+We don't usually do releases.
 
 ## A Note About Maintenance
 
@@ -120,4 +143,4 @@ is not at the top of our priority list.
 
 #### Last Updated
 
-Sat Jul 25 14:00:07 EDT 2021
+Sun Sep  3 09:26:43 EDT 2023
Index: pkgsrc/lang/nawk/files/awkgram.y
diff -u pkgsrc/lang/nawk/files/awkgram.y:1.3 pkgsrc/lang/nawk/files/awkgram.y:1.4
--- pkgsrc/lang/nawk/files/awkgram.y:1.3        Fri Feb 24 20:57:50 2023
+++ pkgsrc/lang/nawk/files/awkgram.y    Tue Sep 12 19:16:52 2023
@@ -204,11 +204,12 @@ ppattern:
                { $$ = op2(BOR, notnull($1), notnull($3)); }
        | ppattern and ppattern %prec AND
                { $$ = op2(AND, notnull($1), notnull($3)); }
-       | ppattern MATCHOP reg_expr     { $$ = op3($2, NIL, $1, (Node*)makedfa($3, 0)); }
+       | ppattern MATCHOP reg_expr     { $$ = op3($2, NIL, $1, (Node*)makedfa($3, 0)); free($3); }
        | ppattern MATCHOP ppattern
-               { if (constnode($3))
+               { if (constnode($3)) {
                        $$ = op3($2, NIL, $1, (Node*)makedfa(strnode($3), 0));
-                 else
+                       free($3);
+                 } else
                        $$ = op3($2, (Node *)1, $1, $3); }
        | ppattern IN varname           { $$ = op2(INTEST, $1, makearr($3)); }
        | '(' plist ')' IN varname      { $$ = op2(INTEST, $2, makearr($5)); }
@@ -231,11 +232,12 @@ pattern:
        | pattern LE pattern            { $$ = op2($2, $1, $3); }
        | pattern LT pattern            { $$ = op2($2, $1, $3); }
        | pattern NE pattern            { $$ = op2($2, $1, $3); }
-       | pattern MATCHOP reg_expr      { $$ = op3($2, NIL, $1, (Node*)makedfa($3, 0)); }
+       | pattern MATCHOP reg_expr      { $$ = op3($2, NIL, $1, (Node*)makedfa($3, 0)); free($3); }
        | pattern MATCHOP pattern
-               { if (constnode($3))
+               { if (constnode($3)) {
                        $$ = op3($2, NIL, $1, (Node*)makedfa(strnode($3), 0));
-                 else
+                       free($3);
+                 } else
                        $$ = op3($2, (Node *)1, $1, $3); }
        | pattern IN varname            { $$ = op2(INTEST, $1, makearr($3)); }
        | '(' plist ')' IN varname      { $$ = op2(INTEST, $2, makearr($5)); }
@@ -280,7 +282,7 @@ rbrace:
 
 re:
           reg_expr
-               { $$ = op3(MATCH, NIL, rectonode(), (Node*)makedfa($1, 0)); }
+               { $$ = op3(MATCH, NIL, rectonode(), (Node*)makedfa($1, 0)); free($1); }
        | NOT re        { $$ = op1(NOT, notnull($2)); }
        ;
 
@@ -386,34 +388,37 @@ term:
                  $$ = op2(INDEX, $3, (Node*)$5); }
        | '(' pattern ')'               { $$ = $2; }
        | MATCHFCN '(' pattern comma reg_expr ')'
-               { $$ = op3(MATCHFCN, NIL, $3, (Node*)makedfa($5, 1)); }
+               { $$ = op3(MATCHFCN, NIL, $3, (Node*)makedfa($5, 1)); free($5); }
        | MATCHFCN '(' pattern comma pattern ')'
-               { if (constnode($5))
+               { if (constnode($5)) {
                        $$ = op3(MATCHFCN, NIL, $3, (Node*)makedfa(strnode($5), 1));
-                 else
+                       free($5);
+                 } else
                        $$ = op3(MATCHFCN, (Node *)1, $3, $5); }
        | NUMBER                        { $$ = celltonode($1, CCON); }
        | SPLIT '(' pattern comma varname comma pattern ')'     /* string */
                { $$ = op4(SPLIT, $3, makearr($5), $7, (Node*)STRING); }
        | SPLIT '(' pattern comma varname comma reg_expr ')'    /* const /regexp/ */
-               { $$ = op4(SPLIT, $3, makearr($5), (Node*)makedfa($7, 1), (Node *)REGEXPR); }
+               { $$ = op4(SPLIT, $3, makearr($5), (Node*)makedfa($7, 1), (Node *)REGEXPR); free($7); }
        | SPLIT '(' pattern comma varname ')'
                { $$ = op4(SPLIT, $3, makearr($5), NIL, (Node*)STRING); }  /* default */
        | SPRINTF '(' patlist ')'       { $$ = op1($1, $3); }
        | string                        { $$ = celltonode($1, CCON); }
        | subop '(' reg_expr comma pattern ')'
-               { $$ = op4($1, NIL, (Node*)makedfa($3, 1), $5, rectonode()); }
+               { $$ = op4($1, NIL, (Node*)makedfa($3, 1), $5, rectonode()); free($3); }
        | subop '(' pattern comma pattern ')'
-               { if (constnode($3))
+               { if (constnode($3)) {
                        $$ = op4($1, NIL, (Node*)makedfa(strnode($3), 1), $5, rectonode());
-                 else
+                       free($3);
+                 } else
                        $$ = op4($1, (Node *)1, $3, $5, rectonode()); }
        | subop '(' reg_expr comma pattern comma var ')'
-               { $$ = op4($1, NIL, (Node*)makedfa($3, 1), $5, $7); }
+               { $$ = op4($1, NIL, (Node*)makedfa($3, 1), $5, $7); free($3); }
        | subop '(' pattern comma pattern comma var ')'
-               { if (constnode($3))
+               { if (constnode($3)) {
                        $$ = op4($1, NIL, (Node*)makedfa(strnode($3), 1), $5, $7);
-                 else
+                       free($3);
+                 } else
                        $$ = op4($1, (Node *)1, $3, $5, $7); }
        | SUBSTR '(' pattern comma pattern comma pattern ')'
                { $$ = op3(SUBSTR, $3, $5, $7); }
Index: pkgsrc/lang/nawk/files/lex.c
diff -u pkgsrc/lang/nawk/files/lex.c:1.3 pkgsrc/lang/nawk/files/lex.c:1.4
--- pkgsrc/lang/nawk/files/lex.c:1.3    Fri Feb 24 20:57:50 2023
+++ pkgsrc/lang/nawk/files/lex.c        Tue Sep 12 19:16:52 2023
@@ -368,6 +368,8 @@ int yylex(void)
        }
 }
 
+extern int runetochar(char *str, int c);
+
 int string(void)
 {
        int c, n;
@@ -415,20 +417,50 @@ int string(void)
                                *bp++ = n;
                                break;
 
-                       case 'x':       /* hex  \x0-9a-fA-F + */
-                           {   char xbuf[100], *px;
-                               for (px = xbuf; (c = input()) != 0 && px-xbuf < 100-2; ) {
-                                       if (isdigit(c)
-                                        || (c >= 'a' && c <= 'f')
-                                        || (c >= 'A' && c <= 'F'))
-                                               *px++ = c;
-                                       else
+                       case 'x':       /* hex  \x0-9a-fA-F (exactly two) */
+                           {
+                               int i;
+
+                               n = 0;
+                               for (i = 1; i <= 2; i++) {
+                                       c = input();
+                                       if (c == 0)
+                                               break;
+                                       if (isxdigit(c)) {
+                                               c = tolower(c);
+                                               n *= 16;
+                                               if (isdigit(c))
+                                                       n += (c - '0');
+                                               else
+                                                       n += 10 + (c - 'a');
+                                       } else
+                                               break;
+                               }
+                               if (n)
+                                       *bp++ = n;
+                               else
+                                       unput(c);
+                               break;
+                           }
+
+                       case 'u':       /* utf  \u0-9a-fA-F (1..8) */
+                           {
+                               int i;
+
+                               n = 0;
+                               for (i = 0; i < 8; i++) {
+                                       c = input();
+                                       if (!isxdigit(c) || c == 0)
                                                break;
+                                       c = tolower(c);
+                                       n *= 16;
+                                       if (isdigit(c))
+                                               n += (c - '0');
+                                       else
+                                               n += 10 + (c - 'a');
                                }
-                               *px = 0;
                                unput(c);
-                               sscanf(xbuf, "%x", (unsigned int *) &n);
-                               *bp++ = n;
+                               bp += runetochar(bp, n);
                                break;
                            }
 
@@ -525,7 +557,7 @@ int regexpr(void)
        char *bp;
 
        if (buf == NULL && (buf = (char *) malloc(bufsz)) == NULL)
-               FATAL("out of space for rex expr");
+               FATAL("out of space for reg expr");
        bp = buf;
        for ( ; (c = input()) != '/' && c != 0; ) {
                if (!adjbuf(&buf, &bufsz, bp-buf+3, 500, &bp, "regexpr"))
Index: pkgsrc/lang/nawk/files/main.c
diff -u pkgsrc/lang/nawk/files/main.c:1.3 pkgsrc/lang/nawk/files/main.c:1.4
--- pkgsrc/lang/nawk/files/main.c:1.3   Fri Feb 24 20:57:50 2023
+++ pkgsrc/lang/nawk/files/main.c       Tue Sep 12 19:16:52 2023
@@ -22,7 +22,7 @@ ARISING OUT OF OR IN CONNECTION WITH THE
 THIS SOFTWARE.
 ****************************************************************/
 
-const char     *version = "version 20211208";
+const char     *version = "version 20230911";
 
 #define DEBUG
 #include <stdio.h>
@@ -49,6 +49,8 @@ static size_t maxpfile;       /* max program f
 static size_t  npfile;         /* number of filenames */
 static size_t  curpfile;       /* current filename */
 
+bool   CSV = false;    /* true for csv input */
+
 bool   safe = false;   /* true => "safe" mode */
 
 static noreturn void fpecatch(int n
@@ -150,6 +152,12 @@ int main(int argc, char *argv[])
                        argv++;
                        break;
                }
+               if (strcmp(argv[1], "--csv") == 0) {    /* turn on csv input processing */
+                       CSV = true;
+                       argc--;
+                       argv++;
+                       continue;
+               }
                switch (argv[1][1]) {
                case 's':
                        if (strcmp(argv[1], "-safe") == 0)

Index: pkgsrc/lang/nawk/files/awk.h
diff -u pkgsrc/lang/nawk/files/awk.h:1.4 pkgsrc/lang/nawk/files/awk.h:1.5
--- pkgsrc/lang/nawk/files/awk.h:1.4    Fri Feb 24 20:57:50 2023
+++ pkgsrc/lang/nawk/files/awk.h        Tue Sep 12 19:16:52 2023
@@ -37,7 +37,7 @@ typedef double        Awkfloat;
 
 typedef        unsigned char uschar;
 
-#define        xfree(a)        { if ((a) != NULL) { free((void *)(intptr_t)(a)); (a) = NULL; } }
+#define        xfree(a)        { free((void *)(intptr_t)(a)); (a) = NULL; }
 /*
  * We sometimes cheat writing read-only pointers to NUL-terminate them
  * and then put back the original value
@@ -78,6 +78,8 @@ extern char   **SUBSEP;
 extern Awkfloat *RSTART;
 extern Awkfloat *RLENGTH;
 
+extern bool    CSV;            /* true for csv input */
+
 extern char    *record;        /* points to $0 */
 extern int     lineno;         /* line number in awk program */
 extern int     errorflag;      /* 1 if error has occurred */
@@ -225,7 +227,8 @@ extern      int     pairstack[], paircnt;
 
 /* structures used by regular expression matching machinery, mostly b.c: */
 
-#define NCHARS (256+3)         /* 256 handles 8-bit chars; 128 does 7-bit */
+#define NCHARS (1256+3)                /* 256 handles 8-bit chars; 128 does 7-bit */
+                               /* BUG: some overflows (caught) if we use 256 */
                                /* watch out in match(), etc. */
 #define        HAT     (NCHARS+2)      /* matches ^ in regular expr */
 #define NSTATES        32
@@ -236,12 +239,19 @@ typedef struct rrow {
                int i;
                Node *np;
                uschar *up;
+               int *rp; /* rune representation of char class */
        } lval;         /* because Al stores a pointer in it! */
        int     *lfollow;
 } rrow;
 
+typedef struct gtt { /* gototab entry */
+       unsigned int ch;
+       unsigned int state;
+} gtt;
+
 typedef struct fa {
-       unsigned int    **gototab;
+       gtt     **gototab;
+       int     gototab_len;
        uschar  *out;
        uschar  *restr;
        int     **posns;
Index: pkgsrc/lang/nawk/files/b.c
diff -u pkgsrc/lang/nawk/files/b.c:1.4 pkgsrc/lang/nawk/files/b.c:1.5
--- pkgsrc/lang/nawk/files/b.c:1.4      Fri Feb 24 20:57:50 2023
+++ pkgsrc/lang/nawk/files/b.c  Tue Sep 12 19:16:52 2023
@@ -80,6 +80,41 @@ int  patlen;
 fa     *fatab[NFA];
 int    nfatab  = 0;    /* entries in fatab */
 
+
+/* utf-8 mechanism:
+
+   For most of Awk, utf-8 strings just "work", since they look like
+   null-terminated sequences of 8-bit bytes.
+
+   Functions like length(), index(), and substr() have to operate
+   in units of utf-8 characters.  The u8_* functions in run.c
+   handle this.
+
+   Regular expressions are more complicated, since the basic
+   mechanism of the goto table used 8-bit byte indices into the
+   gototab entries to compute the next state.  Unicode is a lot
+   bigger, so the gototab entries are now structs with a character
+   and a next state, and there is a linear search of the characters
+   to find the state.  (Yes, this is slower, by a significant
+   amount.  Tough.)
+
+   Throughout the RE mechanism in b.c, utf-8 characters are
+   converted to their utf-32 value.  This mostly shows up in
+   cclenter, which expands character class ranges like a-z and now
+   alpha-omega.  The size of a gototab array is still about 256.
+   This should be dynamic, but for now things work ok for a single
+   code page of Unicode, which is the most likely case.
+
+   The code changes are localized in run.c and b.c.  I have added a
+   handful of functions to somewhat better hide the implementation,
+   but a lot more could be done.
+
+ */
+
+static int get_gototab(fa*, int, int);
+static int set_gototab(fa*, int, int, int);
+extern int u8_rune(int *, const uschar *);
+
 static int *
 intalloc(size_t n, const char *f)
 {
@@ -105,7 +140,7 @@ resizesetvec(const char *f)
 static void
 resize_state(fa *f, int state)
 {
-       unsigned int **p;
+       gtt **p;
        uschar *p2;
        int **p3;
        int i, new_count;
@@ -115,7 +150,7 @@ resize_state(fa *f, int state)
 
        new_count = state + 10; /* needs to be tuned */
 
-       p = (unsigned int **) realloc(f->gototab, new_count * sizeof(f->gototab[0]));
+       p = (gtt **) realloc(f->gototab, new_count * sizeof(f->gototab[0]));
        if (p == NULL)
                goto out;
        f->gototab = p;
@@ -131,12 +166,13 @@ resize_state(fa *f, int state)
        f->posns = p3;
 
        for (i = f->state_count; i < new_count; ++i) {
-               f->gototab[i] = (unsigned int *) calloc(NCHARS, sizeof(**f->gototab));
+               f->gototab[i] = (gtt *) calloc(NCHARS, sizeof(**f->gototab));
                if (f->gototab[i] == NULL)
                        goto out;
                f->out[i]  = 0;
                f->posns[i] = NULL;
        }
+       f->gototab_len = NCHARS; /* should be variable, growable */
        f->state_count = new_count;
        return;
 out:
@@ -231,7 +267,7 @@ int makeinit(fa *f, bool anchor)
        if ((f->posns[2])[1] == f->accept)
                f->out[2] = 1;
        for (i = 0; i < NCHARS; i++)
-               f->gototab[2][i] = 0;
+               set_gototab(f, 2, 0, 0); /* f->gototab[2][i] = 0; */
        f->curstat = cgoto(f, 2, HAT);
        if (anchor) {
                *f->posns[2] = k-1;     /* leave out position 0 */
@@ -300,13 +336,13 @@ void freetr(Node *p)      /* free parse tree 
 /* in the parsing of regular expressions, metacharacters like . have */
 /* to be seen literally;  \056 is not a metacharacter. */
 
-int hexstr(const uschar **pp)  /* find and eval hex string at pp, return new p */
+int hexstr(const uschar **pp, int max) /* find and eval hex string at pp, return new p */
 {                      /* only pick up one 8-bit byte (2 chars) */
        const uschar *p;
        int n = 0;
        int i;
 
-       for (i = 0, p = *pp; i < 2 && isxdigit(*p); i++, p++) {
+       for (i = 0, p = *pp; i < max && isxdigit(*p); i++, p++) {
                if (isdigit(*p))
                        n = 16 * n + *p - '0';
                else if (*p >= 'a' && *p <= 'f')
@@ -318,6 +354,8 @@ int hexstr(const uschar **pp)       /* find an
        return n;
 }
 
+
+
 #define isoctdigit(c) ((c) >= '0' && (c) <= '7')       /* multiple use of arg */
 
 int quoted(const uschar **pp)  /* pick up next thing after a \\ */
@@ -326,24 +364,28 @@ int quoted(const uschar **pp)     /* pick up
        const uschar *p = *pp;
        int c;
 
-       if ((c = *p++) == 't')
+/* BUG: should advance by utf-8 char even if makes no sense */
+
+       if ((c = *p++) == 't') {
                c = '\t';
-       else if (c == 'n')
+       } else if (c == 'n') {
                c = '\n';
-       else if (c == 'f')
+       } else if (c == 'f') {
                c = '\f';
-       else if (c == 'r')
+       } else if (c == 'r') {
                c = '\r';
-       else if (c == 'b')
+       } else if (c == 'b') {
                c = '\b';
-       else if (c == 'v')
+       } else if (c == 'v') {
                c = '\v';
-       else if (c == 'a')
+       } else if (c == 'a') {
                c = '\a';
-       else if (c == '\\')
+       } else if (c == '\\') {
                c = '\\';
-       else if (c == 'x') {    /* hexadecimal goo follows */
-               c = hexstr(&p); /* this adds a null if number is invalid */
+       } else if (c == 'x') {  /* 2 hex digits follow */
+               c = hexstr(&p, 2);      /* this adds a null if number is invalid */
+       } else if (c == 'u') {  /* unicode char number up to 8 hex digits */
+               c = hexstr(&p, 8);
        } else if (isoctdigit(c)) {     /* \d \dd \ddd */
                int n = c - '0';
                if (isoctdigit(*p)) {
@@ -358,50 +400,67 @@ int quoted(const uschar **pp)     /* pick up
        return c;
 }
 
-char *cclenter(const char *argp)       /* add a character class */
+int *cclenter(const char *argp)        /* add a character class */
 {
        int i, c, c2;
-       const uschar *op, *p = (const uschar *) argp;
-       uschar *bp;
-       static uschar *buf = NULL;
+       int n;
+       const uschar *p = (const uschar *) argp;
+       int *bp, *retp;
+       static int *buf = NULL;
        static int bufsz = 100;
 
-       op = p;
-       if (buf == NULL && (buf = (uschar *) malloc(bufsz)) == NULL)
+       if (buf == NULL && (buf = (int *) calloc(bufsz, sizeof(int))) == NULL)
                FATAL("out of space for character class [%.10s...] 1", p);
        bp = buf;
-       for (i = 0; (c = *p++) != 0; ) {
+       for (i = 0; *p != 0; ) {
+               n = u8_rune(&c, p);
+               p += n;
                if (c == '\\') {
                        c = quoted(&p);
                } else if (c == '-' && i > 0 && bp[-1] != 0) {
                        if (*p != 0) {
                                c = bp[-1];
-                               c2 = *p++;
+                               /* c2 = *p++; */
+                               n = u8_rune(&c2, p);
+                               p += n;
                                if (c2 == '\\')
-                                       c2 = quoted(&p);
+                                       c2 = quoted(&p); /* BUG: sets p, has to be u8 size */
                                if (c > c2) {   /* empty; ignore */
                                        bp--;
                                        i--;
                                        continue;
                                }
                                while (c < c2) {
-                                       if (!adjbuf((char **) &buf, &bufsz, bp-buf+2, 100, (char **) &bp, "cclenter1"))
-                                               FATAL("out of space for character class [%.10s...] 2", p);
+                                       if (i >= bufsz) {
+                                               bufsz *= 2;
+                                               buf = (int *) realloc(buf, bufsz * sizeof(int));
+                                               if (buf == NULL)
+                                                       FATAL("out of space for character class [%.10s...] 2", p);
+                                               bp = buf + i;
+                                       }
                                        *bp++ = ++c;
                                        i++;
                                }
                                continue;
                        }
                }
-               if (!adjbuf((char **) &buf, &bufsz, bp-buf+2, 100, (char **) &bp, "cclenter2"))
-                       FATAL("out of space for character class [%.10s...] 3", p);
+               if (i >= bufsz) {
+                       bufsz *= 2;
+                       buf = (int *) realloc(buf, bufsz * sizeof(int));
+                       if (buf == NULL)
+                               FATAL("out of space for character class [%.10s...] 2", p);
+                       bp = buf + i;
+               }
                *bp++ = c;
                i++;
        }
        *bp = 0;
-       DPRINTF("cclenter: in = |%s|, out = |%s|\n", op, buf);
-       xfree(op);
-       return (char *) tostring((char *) buf);
+       /* DPRINTF("cclenter: in = |%s|, out = |%s|\n", op, buf); BUG: can't print array of int */
+       /* xfree(op);  BUG: what are we freeing here? */
+       retp = (int *) calloc(bp-buf+1, sizeof(int));
+       for (i = 0; i < bp-buf+1; i++)
+               retp[i] = buf[i];
+       return retp;
 }
 
 void overflo(const char *s)
@@ -524,9 +583,9 @@ void follow(Node *v)        /* collects leaves 
        }
 }
 
-int member(int c, const char *sarg)    /* is c in s? */
+int member(int c, int *sarg)   /* is c in s? */
 {
-       const uschar *s = (const uschar *) sarg;
+       int *s = (int *) sarg;
 
        while (*s)
                if (c == *s++)
@@ -534,11 +593,41 @@ int member(int c, const char *sarg)       /* i
        return(0);
 }
 
+static int get_gototab(fa *f, int state, int ch) /* hide gototab inplementation */
+{
+       int i;
+       for (i = 0; i < f->gototab_len; i++) {
+               if (f->gototab[state][i].ch == 0)
+                       break;
+               if (f->gototab[state][i].ch == ch)
+                       return f->gototab[state][i].state;
+       }
+       return 0;
+}
+
+static int set_gototab(fa *f, int state, int ch, int val) /* hide gototab inplementation */
+{
+       int i;
+       for (i = 0; i < f->gototab_len; i++) {
+               if (f->gototab[state][i].ch == 0 || f->gototab[state][i].ch == ch) {
+                       f->gototab[state][i].ch = ch;
+                       f->gototab[state][i].state = val;
+                       return val;
+               }
+       }
+       overflo(__func__);
+       return val; /* not used anywhere at the moment */
+}
+
 int match(fa *f, const char *p0)       /* shortest match ? */
 {
        int s, ns;
+       int n;
+       int rune;
        const uschar *p = (const uschar *) p0;
 
+       /* return pmatch(f, p0); does it matter whether longest or shortest? */
+
        s = f->initstat;
        assert (s < f->state_count);
 
@@ -546,19 +635,25 @@ int match(fa *f, const char *p0)  /* shor
                return(1);
        do {
                /* assert(*p < NCHARS); */
-               if ((ns = f->gototab[s][*p]) != 0)
+               n = u8_rune(&rune, p);
+               if ((ns = get_gototab(f, s, rune)) != 0)
                        s = ns;
                else
-                       s = cgoto(f, s, *p);
+                       s = cgoto(f, s, rune);
                if (f->out[s])
                        return(1);
-       } while (*p++ != 0);
+               if (*p == 0)
+                       break;
+               p += n;
+       } while (1);  /* was *p++ != 0 */
        return(0);
 }
 
 int pmatch(fa *f, const char *p0)      /* longest match, for sub */
 {
        int s, ns;
+       int n;
+       int rune;
        const uschar *p = (const uschar *) p0;
        const uschar *q;
 
@@ -573,10 +668,11 @@ int pmatch(fa *f, const char *p0) /* lon
                        if (f->out[s])          /* final state */
                                patlen = q-p;
                        /* assert(*q < NCHARS); */
-                       if ((ns = f->gototab[s][*q]) != 0)
+                       n = u8_rune(&rune, q);
+                       if ((ns = get_gototab(f, s, rune)) != 0)
                                s = ns;
                        else
-                               s = cgoto(f, s, *q);
+                               s = cgoto(f, s, rune);
 
                        assert(s < f->state_count);
 
@@ -588,7 +684,11 @@ int pmatch(fa *f, const char *p0)  /* lon
                                else
                                        goto nextin;    /* no match */
                        }
-               } while (*q++ != 0);
+                       if (*q == 0)
+                               break;
+                       q += n;
+               } while (1);
+               q++;  /* was *q++ */
                if (f->out[s])
                        patlen = q-p-1; /* don't count $ */
                if (patlen >= 0) {
@@ -597,13 +697,19 @@ int pmatch(fa *f, const char *p0) /* lon
                }
        nextin:
                s = 2;
-       } while (*p++);
+               if (*p == 0)
+                       break;
+               n = u8_rune(&rune, p);
+               p += n;
+       } while (1); /* was *p++ */
        return (0);
 }
 
 int nematch(fa *f, const char *p0)     /* non-empty match, for sub */
 {
        int s, ns;
+        int n;
+        int rune;
        const uschar *p = (const uschar *) p0;
        const uschar *q;
 
@@ -618,10 +724,11 @@ int nematch(fa *f, const char *p0)        /* no
                        if (f->out[s])          /* final state */
                                patlen = q-p;
                        /* assert(*q < NCHARS); */
-                       if ((ns = f->gototab[s][*q]) != 0)
+                       n = u8_rune(&rune, q);
+                       if ((ns = get_gototab(f, s, rune)) != 0)
                                s = ns;
                        else
-                               s = cgoto(f, s, *q);
+                               s = cgoto(f, s, rune);
                        if (s == 1) {   /* no transition */
                                if (patlen > 0) {
                                        patbeg = (const char *) p;
@@ -629,7 +736,11 @@ int nematch(fa *f, const char *p0) /* no
                                } else
                                        goto nnextin;   /* no nonempty match */
                        }
-               } while (*q++ != 0);
+                       if (*q == 0)
+                               break;
+                       q += n;
+               } while (1);
+               q++;
                if (f->out[s])
                        patlen = q-p-1; /* don't count $ */
                if (patlen > 0 ) {
@@ -643,6 +754,35 @@ int nematch(fa *f, const char *p0) /* no
        return (0);
 }
 
+static int getrune(FILE *fp, char **pbuf, int *pbufsize, int quantum,
+                  int *curpos, int *lastpos)
+{
+       int c = 0;
+       char *buf = *pbuf;
+       static const int max_bytes = 4; // max multiple bytes in UTF-8 is 4
+       int i, rune;
+       uschar private_buf[max_bytes + 1];
+
+       for (i = 0; i <= max_bytes; i++) {
+               if (++*curpos == *lastpos) {
+                       if (*lastpos == *pbufsize)
+                               if (!adjbuf((char **) pbuf, pbufsize, *pbufsize+1, quantum, 0, "getrune"))
+                                       FATAL("stream '%.30s...' too long", buf);
+                       buf[(*lastpos)++] = (c = getc(fp)) != EOF ? c : 0;
+                       private_buf[i] = c;
+               }
+               if (c == 0 || c < 128 ||  (c >> 6) == 4) { // 10xxxxxx starts a new character
+                       ungetc(c, fp);
+                       private_buf[i] = 0;
+                       break;
+               }
+       }
+
+       u8_rune(& rune, private_buf);
+
+       return rune;
+}
+
 
 /*
  * NAME
@@ -664,6 +804,7 @@ bool fnematch(fa *pfa, FILE *f, char **p
        char *buf = *pbuf;
        int bufsize = *pbufsize;
        int c, i, j, k, ns, s;
+       int rune;
 
        s = pfa->initstat;
        patlen = 0;
@@ -687,12 +828,19 @@ bool fnematch(fa *pfa, FILE *f, char **p
                                buf[k++] = (c = getc(f)) != EOF ? c : 0;
                        }
                        c = (uschar)buf[j];
-                       /* assert(c < NCHARS); */
+                       if (c < 128)
+                               rune = c;
+                       else {
+                               j--;
+                               k--;
+                               ungetc(c, f);
+                               rune = getrune(f, &buf, &bufsize, quantum, &j, &k);
+                       }
 
-                       if ((ns = pfa->gototab[s][c]) != 0)
+                       if ((ns = get_gototab(pfa, s, rune)) != 0)
                                s = ns;
                        else
-                               s = cgoto(pfa, s, c);
+                               s = cgoto(pfa, s, rune);
 
                        if (pfa->out[s]) {      /* final state */
                                patlen = j - i + 1;
@@ -1019,6 +1167,8 @@ static int repeat(const uschar *reptok, 
        return 0;
 }
 
+extern int u8_rune(int *, const uschar *); /* run.c; should be in header file */
+
 int relex(void)                /* lexical analyzer for reparse */
 {
        int c, n;
@@ -1036,6 +1186,12 @@ int relex(void)          /* lexical analyzer for
 rescan:
        starttok = prestr;
 
+       if ((n = u8_rune(&rlxval, prestr)) > 1) {
+               prestr += n;
+               starttok = prestr;
+               return CHAR;
+       }
+
        switch (c = *prestr++) {
        case '|': return OR;
        case '*': return STAR;
@@ -1073,10 +1229,15 @@ rescan:
                }
                else
                        cflag = 0;
-               n = 2 * strlen((const char *) prestr)+1;
+               n = 5 * strlen((const char *) prestr)+1; /* BUG: was 2.  what value? */
                if (!adjbuf((char **) &buf, &bufsz, n, n, (char **) &bp, "relex1"))
                        FATAL("out of space for reg expr %.10s...", lastre);
                for (; ; ) {
+                       if ((n = u8_rune(&rlxval, prestr)) > 1) {
+                               for (i = 0; i < n; i++)
+                                       *bp++ = *prestr++;
+                               continue;
+                       }
                        if ((c = *prestr++) == '\\') {
                                *bp++ = '\\';
                                if ((c = *prestr++) == '\0')
@@ -1243,7 +1404,7 @@ int cgoto(fa *f, int s, int c)
        int *p, *q;
        int i, j, k;
 
-       assert(c == HAT || c < NCHARS);
+       /* assert(c == HAT || c < NCHARS);  BUG: seg fault if disable test */
        while (f->accept >= maxsetvec) {        /* guessing here! */
                resizesetvec(__func__);
        }
@@ -1259,8 +1420,8 @@ int cgoto(fa *f, int s, int c)
                         || (k == DOT && c != 0 && c != HAT)
                         || (k == ALL && c != 0)
                         || (k == EMPTYRE && c != 0)
-                        || (k == CCL && member(c, (char *) f->re[p[i]].lval.up))
-                        || (k == NCCL && !member(c, (char *) f->re[p[i]].lval.up) && c != 0 && c != HAT)) {
+                        || (k == CCL && member(c, (int *) f->re[p[i]].lval.rp))
+                        || (k == NCCL && !member(c, (int *) f->re[p[i]].lval.rp) && c != 0 && c != HAT)) {
                                q = f->re[p[i]].lfollow;
                                for (j = 1; j <= *q; j++) {
                                        if (q[j] >= maxsetvec) {
@@ -1292,7 +1453,7 @@ int cgoto(fa *f, int s, int c)
                                goto different;
                /* setvec is state i */
                if (c != HAT)
-                       f->gototab[s][c] = i;
+                       set_gototab(f, s, c, i);
                return i;
          different:;
        }
@@ -1301,13 +1462,13 @@ int cgoto(fa *f, int s, int c)
        ++(f->curstat);
        resize_state(f, f->curstat);
        for (i = 0; i < NCHARS; i++)
-               f->gototab[f->curstat][i] = 0;
+               set_gototab(f, f->curstat, 0, 0);
        xfree(f->posns[f->curstat]);
        p = intalloc(setcnt + 1, __func__);
 
        f->posns[f->curstat] = p;
        if (c != HAT)
-               f->gototab[s][c] = f->curstat;
+               set_gototab(f, s, c, f->curstat);
        for (i = 0; i <= setcnt; i++)
                p[i] = tmpset[i];
        if (setvec[f->accept])
Index: pkgsrc/lang/nawk/files/proctab.c
diff -u pkgsrc/lang/nawk/files/proctab.c:1.4 pkgsrc/lang/nawk/files/proctab.c:1.5
--- pkgsrc/lang/nawk/files/proctab.c:1.4        Fri Feb 24 20:57:50 2023
+++ pkgsrc/lang/nawk/files/proctab.c    Tue Sep 12 19:16:52 2023
@@ -3,101 +3,101 @@
 #include "awkgram.tab.h"
 
 static const char * const printname[95] = {
-       "FIRSTTOKEN",   /* 258 */
-       "PROGRAM",      /* 259 */
-       "PASTAT",       /* 260 */
-       "PASTAT2",      /* 261 */
-       "XBEGIN",       /* 262 */
-       "XEND", /* 263 */
-       "NL",   /* 264 */
-       "ARRAY",        /* 265 */
-       "MATCH",        /* 266 */
-       "NOTMATCH",     /* 267 */
-       "MATCHOP",      /* 268 */
-       "FINAL",        /* 269 */
-       "DOT",  /* 270 */
-       "ALL",  /* 271 */
-       "CCL",  /* 272 */
-       "NCCL", /* 273 */
-       "CHAR", /* 274 */
-       "OR",   /* 275 */
-       "STAR", /* 276 */
-       "QUEST",        /* 277 */
-       "PLUS", /* 278 */
-       "EMPTYRE",      /* 279 */
-       "ZERO", /* 280 */
-       "AND",  /* 281 */
-       "BOR",  /* 282 */
-       "APPEND",       /* 283 */
-       "EQ",   /* 284 */
-       "GE",   /* 285 */
-       "GT",   /* 286 */
-       "LE",   /* 287 */
-       "LT",   /* 288 */
-       "NE",   /* 289 */
-       "IN",   /* 290 */
-       "ARG",  /* 291 */
-       "BLTIN",        /* 292 */
-       "BREAK",        /* 293 */
-       "CLOSE",        /* 294 */
-       "CONTINUE",     /* 295 */
-       "DELETE",       /* 296 */
-       "DO",   /* 297 */
-       "EXIT", /* 298 */
-       "FOR",  /* 299 */
-       "FUNC", /* 300 */
-       "SUB",  /* 301 */
-       "GSUB", /* 302 */
-       "IF",   /* 303 */
-       "INDEX",        /* 304 */
-       "LSUBSTR",      /* 305 */
-       "MATCHFCN",     /* 306 */
-       "NEXT", /* 307 */
-       "NEXTFILE",     /* 308 */
-       "ADD",  /* 309 */
-       "MINUS",        /* 310 */
-       "MULT", /* 311 */
-       "DIVIDE",       /* 312 */
-       "MOD",  /* 313 */
-       "ASSIGN",       /* 314 */
-       "ASGNOP",       /* 315 */
-       "ADDEQ",        /* 316 */
-       "SUBEQ",        /* 317 */
-       "MULTEQ",       /* 318 */
-       "DIVEQ",        /* 319 */
-       "MODEQ",        /* 320 */
-       "POWEQ",        /* 321 */
-       "PRINT",        /* 322 */
-       "PRINTF",       /* 323 */
-       "SPRINTF",      /* 324 */
-       "ELSE", /* 325 */
-       "INTEST",       /* 326 */
-       "CONDEXPR",     /* 327 */
-       "POSTINCR",     /* 328 */
-       "PREINCR",      /* 329 */
-       "POSTDECR",     /* 330 */
-       "PREDECR",      /* 331 */
-       "VAR",  /* 332 */
-       "IVAR", /* 333 */
-       "VARNF",        /* 334 */
-       "CALL", /* 335 */
-       "NUMBER",       /* 336 */
-       "STRING",       /* 337 */
-       "REGEXPR",      /* 338 */
-       "GETLINE",      /* 339 */
-       "RETURN",       /* 340 */
-       "SPLIT",        /* 341 */
-       "SUBSTR",       /* 342 */
-       "WHILE",        /* 343 */
-       "CAT",  /* 344 */
-       "NOT",  /* 345 */
-       "UMINUS",       /* 346 */
-       "UPLUS",        /* 347 */
-       "POWER",        /* 348 */
-       "DECR", /* 349 */
-       "INCR", /* 350 */
-       "INDIRECT",     /* 351 */
-       "LASTTOKEN",    /* 352 */
+       "FIRSTTOKEN",   /* 257 */
+       "PROGRAM",      /* 258 */
+       "PASTAT",       /* 259 */
+       "PASTAT2",      /* 260 */
+       "XBEGIN",       /* 261 */
+       "XEND", /* 262 */
+       "NL",   /* 263 */
+       "ARRAY",        /* 264 */
+       "MATCH",        /* 265 */
+       "NOTMATCH",     /* 266 */
+       "MATCHOP",      /* 267 */
+       "FINAL",        /* 268 */
+       "DOT",  /* 269 */
+       "ALL",  /* 270 */
+       "CCL",  /* 271 */
+       "NCCL", /* 272 */
+       "CHAR", /* 273 */
+       "OR",   /* 274 */
+       "STAR", /* 275 */
+       "QUEST",        /* 276 */
+       "PLUS", /* 277 */
+       "EMPTYRE",      /* 278 */
+       "ZERO", /* 279 */
+       "AND",  /* 280 */
+       "BOR",  /* 281 */
+       "APPEND",       /* 282 */
+       "EQ",   /* 283 */
+       "GE",   /* 284 */
+       "GT",   /* 285 */
+       "LE",   /* 286 */
+       "LT",   /* 287 */
+       "NE",   /* 288 */
+       "IN",   /* 289 */
+       "ARG",  /* 290 */
+       "BLTIN",        /* 291 */
+       "BREAK",        /* 292 */
+       "CLOSE",        /* 293 */
+       "CONTINUE",     /* 294 */
+       "DELETE",       /* 295 */
+       "DO",   /* 296 */
+       "EXIT", /* 297 */
+       "FOR",  /* 298 */
+       "FUNC", /* 299 */
+       "SUB",  /* 300 */
+       "GSUB", /* 301 */
+       "IF",   /* 302 */
+       "INDEX",        /* 303 */
+       "LSUBSTR",      /* 304 */
+       "MATCHFCN",     /* 305 */
+       "NEXT", /* 306 */
+       "NEXTFILE",     /* 307 */
+       "ADD",  /* 308 */
+       "MINUS",        /* 309 */
+       "MULT", /* 310 */
+       "DIVIDE",       /* 311 */
+       "MOD",  /* 312 */
+       "ASSIGN",       /* 313 */
+       "ASGNOP",       /* 314 */
+       "ADDEQ",        /* 315 */
+       "SUBEQ",        /* 316 */
+       "MULTEQ",       /* 317 */
+       "DIVEQ",        /* 318 */
+       "MODEQ",        /* 319 */
+       "POWEQ",        /* 320 */
+       "PRINT",        /* 321 */
+       "PRINTF",       /* 322 */
+       "SPRINTF",      /* 323 */
+       "ELSE", /* 324 */
+       "INTEST",       /* 325 */
+       "CONDEXPR",     /* 326 */
+       "POSTINCR",     /* 327 */
+       "PREINCR",      /* 328 */
+       "POSTDECR",     /* 329 */
+       "PREDECR",      /* 330 */
+       "VAR",  /* 331 */
+       "IVAR", /* 332 */
+       "VARNF",        /* 333 */
+       "CALL", /* 334 */
+       "NUMBER",       /* 335 */
+       "STRING",       /* 336 */
+       "REGEXPR",      /* 337 */
+       "GETLINE",      /* 338 */
+       "RETURN",       /* 339 */
+       "SPLIT",        /* 340 */
+       "SUBSTR",       /* 341 */
+       "WHILE",        /* 342 */
+       "CAT",  /* 343 */
+       "NOT",  /* 344 */
+       "UMINUS",       /* 345 */
+       "UPLUS",        /* 346 */
+       "POWER",        /* 347 */
+       "DECR", /* 348 */
+       "INCR", /* 349 */
+       "INDIRECT",     /* 350 */
+       "LASTTOKEN",    /* 351 */
 };
 
 
Index: pkgsrc/lang/nawk/files/run.c
diff -u pkgsrc/lang/nawk/files/run.c:1.4 pkgsrc/lang/nawk/files/run.c:1.5
--- pkgsrc/lang/nawk/files/run.c:1.4    Fri Feb 24 20:57:50 2023
+++ pkgsrc/lang/nawk/files/run.c        Tue Sep 12 19:16:52 2023
@@ -26,7 +26,6 @@ THIS SOFTWARE.
 #include <stdio.h>
 #include <ctype.h>
 #include <errno.h>
-#include <wchar.h>
 #include <wctype.h>
 #include <fcntl.h>
 #include <setjmp.h>
@@ -40,8 +39,10 @@ THIS SOFTWARE.
 #include "awk.h"
 #include "awkgram.tab.h"
 
+
 static void stdinit(void);
 static void flush_all(void);
+static char *wide_char_to_byte_str(int rune, size_t *outlen);
 
 #if 1
 #define tempfree(x)    do { if (istemp(x)) tfree(x); } while (/*CONSTCOND*/0)
@@ -579,11 +580,225 @@ Cell *intest(Node **a, int n)    /* a[0] is
 }
 
 
+/* ======== utf-8 code ========== */
+
+/*
+ * Awk strings can contain ascii, random 8-bit items (eg Latin-1),
+ * or utf-8.  u8_isutf tests whether a string starts with a valid
+ * utf-8 sequence, and returns 0 if not (e.g., high bit set).
+ * u8_nextlen returns length of next valid sequence, which is
+ * 1 for ascii, 2..4 for utf-8, or 1 for high bit non-utf.
+ * u8_strlen returns length of string in valid utf-8 sequences
+ * and/or high-bit bytes.  Conversion functions go between byte
+ * number and character number.
+ *
+ * In theory, this behaves the same as before for non-utf8 bytes.
+ *
+ * Limited checking! This is a potential security hole.
+ */
+
+/* is s the beginning of a valid utf-8 string? */
+/* return length 1..4 if yes, 0 if no */
+int u8_isutf(const char *s)
+{
+       int n, ret;
+       unsigned char c;
+
+       c = s[0];
+       if (c < 128)
+               return 1; /* what if it's 0? */
+
+       n = strlen(s);
+       if (n >= 2 && ((c>>5) & 0x7) == 0x6 && (s[1] & 0xC0) == 0x80) {
+               ret = 2; /* 110xxxxx 10xxxxxx */
+       } else if (n >= 3 && ((c>>4) & 0xF) == 0xE && (s[1] & 0xC0) == 0x80
+                        && (s[2] & 0xC0) == 0x80) {
+               ret = 3; /* 1110xxxx 10xxxxxx 10xxxxxx */
+       } else if (n >= 4 && ((c>>3) & 0x1F) == 0x1E && (s[1] & 0xC0) == 0x80
+                        && (s[2] & 0xC0) == 0x80 && (s[3] & 0xC0) == 0x80) {
+               ret = 4; /* 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx */
+       } else {
+               ret = 0;
+       }
+       return ret;
+}
+
+/* Convert (prefix of) utf8 string to utf-32 rune. */
+/* Sets *rune to the value, returns the length. */
+/* No error checking: watch out. */
+int u8_rune(int *rune, const char *s)
+{
+       int n, ret;
+       unsigned char c;
+
+       c = s[0];
+       if (c < 128) {
+               *rune = c;
+               return 1;
+       }
+
+       n = strlen(s);
+       if (n >= 2 && ((c>>5) & 0x7) == 0x6 && (s[1] & 0xC0) == 0x80) {
+               *rune = ((c & 0x1F) << 6) | (s[1] & 0x3F); /* 110xxxxx 10xxxxxx */
+               ret = 2;
+       } else if (n >= 3 && ((c>>4) & 0xF) == 0xE && (s[1] & 0xC0) == 0x80
+                         && (s[2] & 0xC0) == 0x80) {
+               *rune = ((c & 0xF) << 12) | ((s[1] & 0x3F) << 6) | (s[2] & 0x3F);
+                       /* 1110xxxx 10xxxxxx 10xxxxxx */
+               ret = 3;
+       } else if (n >= 4 && ((c>>3) & 0x1F) == 0x1E && (s[1] & 0xC0) == 0x80
+                         && (s[2] & 0xC0) == 0x80 && (s[3] & 0xC0) == 0x80) {
+               *rune = ((c & 0x7) << 18) | ((s[1] & 0x3F) << 12) | ((s[2] & 0x3F) << 6) | (s[3] & 0x3F);
+                       /* 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx */
+               ret = 4;
+       } else {
+               *rune = c;
+               ret = 1;
+       }
+       return ret; /* returns one byte if sequence doesn't look like utf */
+}
+
+/* return length of next sequence: 1 for ascii or random, 2..4 for valid utf8 */
+int u8_nextlen(const char *s)
+{
+       int len;
+
+       len = u8_isutf(s);
+       if (len == 0)
+               len = 1;
+       return len;
+}
+
+/* return number of utf characters or single non-utf bytes */
+int u8_strlen(const char *s)
+{
+       int i, len, n, totlen;
+       unsigned char c;
+
+       n = strlen(s);
+       totlen = 0;
+       for (i = 0; i < n; i += len) {
+               c = s[i];
+               if (c < 128) {
+                       len = 1;
+               } else {
+                       len = u8_nextlen(&s[i]);
+               }
+               totlen++;
+               if (i > n)
+                       FATAL("bad utf count [%s] n=%d i=%d\n", s, n, i);
+       }
+       return totlen;
+}
+
+/* convert utf-8 char number in a string to its byte offset */
+int u8_char2byte(const char *s, int charnum)
+{
+       int n;
+       int bytenum = 0;
+
+       while (charnum > 0) {
+               n = u8_nextlen(s);
+               s += n;
+               bytenum += n;
+               charnum--;
+       }
+       return bytenum;
+}
+
+/* convert byte offset in s to utf-8 char number that starts there */
+int u8_byte2char(const char *s, int bytenum)
+{
+       int i, len, b;
+       int charnum = 0; /* BUG: what origin? */
+       /* should be 0 to match start==0 which means no match */        
+
+       b = strlen(s);
+       if (bytenum >= b) {
+               return -1; /* ??? */
+       }
+       for (i = 0; i <= bytenum; i += len) {
+               len = u8_nextlen(s+i);
+               charnum++;
+       }
+       return charnum;
+}
+
+/* runetochar() adapted from rune.c in the Plan 9 distributione */
+
+enum
+{
+       Runeerror = 128, /* from somewhere else */
+       Runemax = 0x10FFFF,
+
+       Bit1    = 7,
+       Bitx    = 6,
+       Bit2    = 5,
+       Bit3    = 4,
+       Bit4    = 3,
+       Bit5    = 2,
+
+       T1      = ((1<<(Bit1+1))-1) ^ 0xFF,     /* 0000 0000 */
+       Tx      = ((1<<(Bitx+1))-1) ^ 0xFF,     /* 1000 0000 */
+       T2      = ((1<<(Bit2+1))-1) ^ 0xFF,     /* 1100 0000 */
+       T3      = ((1<<(Bit3+1))-1) ^ 0xFF,     /* 1110 0000 */
+       T4      = ((1<<(Bit4+1))-1) ^ 0xFF,     /* 1111 0000 */
+       T5      = ((1<<(Bit5+1))-1) ^ 0xFF,     /* 1111 1000 */
+
+       Rune1   = (1<<(Bit1+0*Bitx))-1,         /* 0000 0000 0000 0000 0111 1111 */
+       Rune2   = (1<<(Bit2+1*Bitx))-1,         /* 0000 0000 0000 0111 1111 1111 */
+       Rune3   = (1<<(Bit3+2*Bitx))-1,         /* 0000 0000 1111 1111 1111 1111 */
+       Rune4   = (1<<(Bit4+3*Bitx))-1,         /* 0011 1111 1111 1111 1111 1111 */
+
+       Maskx   = (1<<Bitx)-1,                  /* 0011 1111 */
+       Testx   = Maskx ^ 0xFF,                 /* 1100 0000 */
+
+};
+
+int runetochar(char *str, int c)
+{      
+       /* one character sequence 00000-0007F => 00-7F */     
+       if (c <= Rune1) {
+               str[0] = c;
+               return 1;
+       }
+       
+       /* two character sequence 00080-007FF => T2 Tx */
+       if (c <= Rune2) {
+               str[0] = T2 | (c >> 1*Bitx);
+               str[1] = Tx | (c & Maskx);
+               return 2;
+       }
+
+       /* three character sequence 00800-0FFFF => T3 Tx Tx */
+       if (c > Runemax)
+               c = Runeerror;
+       if (c <= Rune3) {
+               str[0] = T3 |  (c >> 2*Bitx);
+               str[1] = Tx | ((c >> 1*Bitx) & Maskx);
+               str[2] = Tx |  (c & Maskx);
+               return 3;
+       }
+       
+       /* four character sequence 010000-1FFFFF => T4 Tx Tx Tx */
+       str[0] = T4 |  (c >> 3*Bitx);
+       str[1] = Tx | ((c >> 2*Bitx) & Maskx);
+       str[2] = Tx | ((c >> 1*Bitx) & Maskx);
+       str[3] = Tx |  (c & Maskx);
+       return 4;
+}               
+
+
+/* ========== end of utf8 code =========== */
+
+
+
 Cell *matchop(Node **a, int n) /* ~ and match() */
 {
        Cell *x, *y;
        char *s, *t;
        int i;
+       int cstart, cpatlen, len;
        fa *pfa;
        int (*mf)(fa *, const char *) = match, mode = 0;
 
@@ -604,9 +819,21 @@ Cell *matchop(Node **a, int n)     /* ~ and 
        }
        tempfree(x);
        if (n == MATCHFCN) {
-               int start = patbeg - s + 1;
-               if (patlen < 0)
-                       start = 0;
+               int start = patbeg - s + 1; /* origin 1 */
+               if (patlen < 0) {
+                       start = 0; /* not found */
+               } else {
+                       cstart = u8_byte2char(s, start-1);
+                       cpatlen = 0;
+                       for (i = 0; i < patlen; i += len) {
+                               len = u8_nextlen(patbeg+i);
+                               cpatlen++;
+                       }
+
+                       start = cstart;
+                       patlen = cpatlen;
+               }
+
                setfval(rstartloc, (Awkfloat) start);
                setfval(rlengthloc, (Awkfloat) patlen);
                x = gettemp();
@@ -657,10 +884,15 @@ Cell *relop(Node **a, int n)      /* a[0 < a[
        int i;
        Cell *x, *y;
        Awkfloat j;
+       bool x_is_nan, y_is_nan;
 
        x = execute(a[0]);
        y = execute(a[1]);
+       x_is_nan = isnan(x->fval);
+       y_is_nan = isnan(y->fval);
        if (x->tval&NUM && y->tval&NUM) {
+               if ((x_is_nan || y_is_nan) && n != NE)
+                       return(False);
                j = x->fval - y->fval;
                i = j<0? -1: (j>0? 1: 0);
        } else {
@@ -673,7 +905,8 @@ Cell *relop(Node **a, int n)        /* a[0 < a[
                        else return(False);
        case LE:        if (i<=0) return(True);
                        else return(False);
-       case NE:        if (i!=0) return(True);
+       case NE:        if (x_is_nan && y_is_nan) return(True);
+                       else if (i!=0) return(True);
                        else return(False);
        case EQ:        if (i == 0) return(True);
                        else return(False);
@@ -742,6 +975,7 @@ Cell *indirect(Node **a, int n)     /* $( a[
 Cell *substr(Node **a, int nnn)                /* substr(a[0], a[1], a[2]) */
 {
        int k, m, n;
+       int mb, nb;
        char *s;
        int temp;
        Cell *x, *y, *z = NULL;
@@ -777,12 +1011,16 @@ Cell *substr(Node **a, int nnn)          /* subs
                n = 0;
        else if (n > k - m)
                n = k - m;
+       /* m is start, n is length from there */
        DPRINTF("substr: m=%d, n=%d, s=%s\n", m, n, s);
        y = gettemp();
-       temp = s[n+m-1];        /* with thanks to John Linderman */
-       s[n+m-1] = '\0';
-       setsval(y, s + m - 1);
-       s[n+m-1] = temp;
+       mb = u8_char2byte(s, m-1); /* byte offset of start char in s */
+       nb = u8_char2byte(s, m-1+n);  /* byte offset of end+1 char in s */
+
+       temp = s[nb];   /* with thanks to John Linderman */
+       s[nb] = '\0';
+       setsval(y, s + mb);
+       s[nb] = temp;
        tempfree(x);
        return(y);
 }
@@ -803,7 +1041,15 @@ Cell *sindex(Node **a, int nnn)           /* inde
                for (q = p1, p2 = s2; *p2 != '\0' && *q == *p2; q++, p2++)
                        continue;
                if (*p2 == '\0') {
-                       v = (Awkfloat) (p1 - s1 + 1);   /* origin 1 */
+                       /* v = (Awkfloat) (p1 - s1 + 1);         origin 1 */
+
+                  /* should be a function: used in match() as well */
+                       int i, len;
+                       v = 0;
+                       for (i = 0; i < p1-s1+1; i += len) {
+                               len = u8_nextlen(s1+i);
+                               v++;
+                       }
                        break;
                }
        }
@@ -813,6 +1059,18 @@ Cell *sindex(Node **a, int nnn)           /* inde
        return(z);
 }
 
+int has_utf8(char *s)  /* return 1 if s contains any utf-8 (2 bytes or more) character */
+{
+       int n;
+
+       for (n = 0; *s != 0; s += n) {
+               n = u8_nextlen(s);
+               if (n > 1)
+                       return 1;
+       }
+       return 0;
+}
+
 #define        MAXNUMSIZE      50
 
 int format(char **pbuf, int *pbufsize, const char *s, Node *a) /* printf-like conversions */
@@ -855,7 +1113,6 @@ int format(char **pbuf, int *pbufsize, c
                        s += 2;
                        continue;
                }
-               /* have to be real careful in case this is a huge number, eg, %100000d */
                fmtwd = atoi(s+1);
                if (fmtwd < 0)
                        fmtwd = -fmtwd;
@@ -928,7 +1185,8 @@ int format(char **pbuf, int *pbufsize, c
                        n = fmtwd;
                adjbuf(&buf, &bufsize, 1+n+p-buf, recsize, &p, "format5");
                switch (flag) {
-               case '?':       snprintf(p, BUFSZ(p), "%s", fmt);       /* unknown, so dump it too */
+               case '?':
+                       snprintf(p, BUFSZ(p), "%s", fmt);       /* unknown, so dump it too */
                        t = getsval(x);
                        n = strlen(t);
                        if (fmtwd > n)
@@ -942,37 +1200,186 @@ int format(char **pbuf, int *pbufsize, c
                case 'f':       snprintf(p, BUFSZ(p), fmt, getfval(x)); break;
                case 'd':       snprintf(p, BUFSZ(p), fmt, (intmax_t) getfval(x)); break;
                case 'u':       snprintf(p, BUFSZ(p), fmt, (uintmax_t) getfval(x)); break;
-               case 's':
+
+               case 's': {
                        t = getsval(x);
                        n = strlen(t);
-                       if (fmtwd > n)
-                               n = fmtwd;
-                       if (!adjbuf(&buf, &bufsize, 1+n+p-buf, recsize, &p, "format7"))
-                               FATAL("huge string/format (%d chars) in printf %.30s... ran format() out of memory", n, t);
-                       snprintf(p, BUFSZ(p), fmt, t);
+                       /* if simple format or no utf-8 in the string, sprintf works */
+                       if (!has_utf8(t) || strcmp(fmt,"%s") == 0) {
+                               if (fmtwd > n)
+                                       n = fmtwd;
+                               if (!adjbuf(&buf, &bufsize, 1+n+p-buf, recsize, &p, "format7"))
+                                       FATAL("huge string/format (%d chars) in printf %.30s..." \
+                                               " ran format() out of memory", n, t);
+                               snprintf(p, BUFSZ(p), fmt, t);
+                               break;
+                       }
+
+                       /* get here if string has utf-8 chars and fmt is not plain %s */
+                       /* "%-w.ps", where -, w and .p are all optional */
+                       /* '0' before the w is a flag character */
+                       /* fmt points at % */
+                       int ljust = 0, wid = 0, prec = n, pad = 0;
+                       char *f = fmt+1;
+                       if (f[0] == '-') {
+                               ljust = 1;
+                               f++;
+                       }
+                       // flags '0' and '+' are recognized but skipped
+                       if (f[0] == '0') {
+                               f++;
+                               if (f[0] == '+')
+                                       f++;
+                       }
+                       if (f[0] == '+') {
+                               f++;
+                               if (f[0] == '0')
+                                       f++;
+                       }
+                       if (isdigit(f[0])) { /* there is a wid */
+                               wid = strtol(f, &f, 10);
+                       }
+                       if (f[0] == '.') { /* there is a .prec */
+                               prec = strtol(++f, &f, 10);
+                       }
+                       if (prec > u8_strlen(t))
+                               prec = u8_strlen(t);
+                       pad = wid>prec ? wid - prec : 0;  // has to be >= 0
+                       int i, k, n;
+                       
+                       if (ljust) { // print prec chars from t, then pad blanks
+                               n = u8_char2byte(t, prec);
+                               for (k = 0; k < n; k++) {
+                                       //putchar(t[k]);
+                                       *p++ = t[k];
+                               }
+                               for (i = 0; i < pad; i++) {
+                                       //printf(" ");
+                                       *p++ = ' ';
+                               }
+                       } else { // print pad blanks, then prec chars from t
+                               for (i = 0; i < pad; i++) {
+                                       //printf(" ");
+                                       *p++ = ' ';
+                               }
+                               n = u8_char2byte(t, prec);
+                               for (k = 0; k < n; k++) {
+                                       //putchar(t[k]);
+                                       *p++ = t[k];
+                               }
+                       }
+                       *p = 0;
                        break;
-               case 'c':
+               }
+
+               case 'c': {
+                       /*
+                        * If a numeric value is given, awk should just turn
+                        * it into a character and print it:
+                        *      BEGIN { printf("%c\n", 65) }
+                        * prints "A".
+                        *
+                        * But what if the numeric value is > 128 and
+                        * represents a valid Unicode code point?!? We do
+                        * our best to convert it back into UTF-8. If we
+                        * can't, we output the encoding of the Unicode
+                        * "invalid character", 0xFFFD.
+                        */
                        if (isnum(x)) {
-                               if ((int)getfval(x))
-                                       snprintf(p, BUFSZ(p), fmt, (int) getfval(x));
-                               else {
+                               int charval = (int) getfval(x);
+
+                               if (charval != 0) {
+                                       if (charval < 128)
+                                               snprintf(p, BUFSZ(p), fmt, charval);
+                                       else {
+                                               // possible unicode character
+                                               size_t count;
+                                               char *bs = wide_char_to_byte_str(charval, &count);
+
+                                               if (bs == NULL) { // invalid character
+                                                       // use unicode invalid character, 0xFFFD
+                                                       bs = "\357\277\275";
+                                                       count = 3;
+                                               }
+                                               t = bs;
+                                               n = count;
+                                               goto format_percent_c;
+                                       }
+                               } else {
                                        *p++ = '\0'; /* explicit null byte */
                                        *p = '\0';   /* next output will start here */
                                }
-                       } else
+                               break;
+                       }
+                       t = getsval(x);
+                       n = u8_nextlen(t);
+               format_percent_c:
+                       if (n < 2) { /* not utf8 */
                                snprintf(p, BUFSZ(p), fmt, getsval(x)[0]);
+                               break;
+                       }
+
+                       // utf8 character, almost same song and dance as for %s
+                       int ljust = 0, wid = 0, prec = n, pad = 0;
+                       char *f = fmt+1;
+                       if (f[0] == '-') {
+                               ljust = 1;
+                               f++;
+                       }
+                       // flags '0' and '+' are recognized but skipped
+                       if (f[0] == '0') {
+                               f++;
+                               if (f[0] == '+')
+                                       f++;
+                       }
+                       if (f[0] == '+') {
+                               f++;
+                               if (f[0] == '0')
+                                       f++;
+                       }
+                       if (isdigit(f[0])) { /* there is a wid */
+                               wid = strtol(f, &f, 10);
+                       }
+                       if (f[0] == '.') { /* there is a .prec */
+                               prec = strtol(++f, &f, 10);
+                       }
+                       if (prec > 1)           // %c --> only one character
+                               prec = 1;
+                       pad = wid>prec ? wid - prec : 0;  // has to be >= 0
+                       int i;
+
+                       if (ljust) { // print one char from t, then pad blanks
+                               for (int i = 0; i < n; i++)
+                                       *p++ = t[i];
+                               for (i = 0; i < pad; i++) {
+                                       //printf(" ");
+                                       *p++ = ' ';
+                               }
+                       } else { // print pad blanks, then prec chars from t
+                               for (i = 0; i < pad; i++) {
+                                       //printf(" ");
+                                       *p++ = ' ';
+                               }
+                               for (int i = 0; i < n; i++)
+                                       *p++ = t[i];
+                       }
+                       *p = 0;
                        break;
+               }
                default:
                        FATAL("can't happen: bad conversion %c in format()", flag);
                }
+
                tempfree(x);
                p += strlen(p);
                s++;
        }
        *p = '\0';
        free(fmt);
-       for ( ; a; a = a->nnext)                /* evaluate any remaining args */
-               execute(a);
+       for ( ; a; a = a->nnext) {              /* evaluate any remaining args */
+               x = execute(a);
+               tempfree(x);
+       }
        *pbuf = buf;
        *pbufsize = bufsize;
        return p - buf;
@@ -1195,16 +1602,17 @@ Cell *cat(Node **a, int q)      /* a[0] cat a
 
        x = execute(a[0]);
        n1 = strlen(getsval(x));
-       adjbuf(&s, &ssz, n1, recsize, 0, "cat1");
+       adjbuf(&s, &ssz, n1 + 1, recsize, 0, "cat1");
        memcpy(s, x->sval, n1);
 
+       tempfree(x);
+
        y = execute(a[1]);
        n2 = strlen(getsval(y));
        adjbuf(&s, &ssz, n1 + n2 + 1, recsize, 0, "cat2");
        memcpy(s + n1, y->sval, n2);
        s[n1 + n2] = '\0';
 
-       tempfree(x);
        tempfree(y);
 
        z = gettemp();
@@ -1262,23 +1670,27 @@ Cell *split(Node **a, int nnn)  /* split(
        int sep;
        char temp, num[50];
        int n, tempstat, arg3type;
+       int j;
        double result;
 
        y = execute(a[0]);      /* source string */
        origs = s = strdup(getsval(y));
+       tempfree(y);
        arg3type = ptoi(a[3]);
-       if (a[2] == NULL)               /* fs string */
+       if (a[2] == NULL) {             /* BUG: CSV should override implicit fs but not explicit */
                fs = getsval(fsloc);
-       else if (arg3type == STRING) {  /* split(str,arr,"string") */
+       } else if (arg3type == STRING) {        /* split(str,arr,"string") */
                x = execute(a[2]);
                fs = origfs = strdup(getsval(x));
                tempfree(x);
-       } else if (arg3type == REGEXPR)
+       } else if (arg3type == REGEXPR) {
                fs = "(regexpr)";       /* split(str,arr,/regexpr/) */
-       else
+       } else {
                FATAL("illegal type of split");
+       }
        sep = *fs;
        ap = execute(a[1]);     /* array name */
+/* BUG 7/26/22: this appears not to reset array: see C1/asplit */
        freesymtab(ap);
        DPRINTF("split: s=|%s|, a=%s, sep=|%s|\n", s, NN(ap->nval), fs);
        ap->tval &= ~STR;
@@ -1332,7 +1744,41 @@ Cell *split(Node **a, int nnn)   /* split(
                        setsymtab(num, s, 0.0, STR, (Array *) ap->sval);
   spdone:
                pfa = NULL;
-       } else if (sep == ' ') {
+
+       } else if (a[2] == NULL && CSV) {       /* CSV only if no explicit separator */
+               char *newt = (char *) malloc(strlen(s)); /* for building new string; reuse for each field */
+               for (;;) {
+                       char *fr = newt;
+                       n++;
+                       if (*s == '"' ) { /* start of "..." */
+                               for (s++ ; *s != '\0'; ) {
+                                       if (*s == '"' && s[1] != '\0' && s[1] == '"') {
+                                               s += 2; /* doubled quote */
+                                               *fr++ = '"';
+                                       } else if (*s == '"' && (s[1] == '\0' || s[1] == ',')) {
+                                               s++; /* skip over closing quote */
+                                               break;
+                                       } else {
+                                               *fr++ = *s++;
+                                       }
+                               }
+                               *fr++ = 0;
+                       } else {        /* unquoted field */
+                               while (*s != ',' && *s != '\0')
+                                       *fr++ = *s++;
+                               *fr++ = 0;
+                       }
+                       snprintf(num, sizeof(num), "%d", n);
+                       if (is_number(newt, &result))
+                               setsymtab(num, newt, result, STR|NUM, (Array *) ap->sval);
+                       else
+                               setsymtab(num, newt, 0.0, STR, (Array *) ap->sval);
+                       if (*s++ == '\0')
+                               break;
+               }
+               free(newt);
+
+       } else if (!CSV && sep == ' ') { /* usual case: split on white space */
                for (n = 0; ; ) {
 #define ISWS(c)        ((c) == ' ' || (c) == '\t' || (c) == '\n')
                        while (ISWS(*s))
@@ -1355,19 +1801,25 @@ Cell *split(Node **a, int nnn)  /* split(
                        if (*s != '\0')
                                s++;
                }
+
        } else if (sep == 0) {  /* new: split(s, a, "") => 1 char/elem */
-               for (n = 0; *s != '\0'; s++) {
-                       char buf[2];
+               for (n = 0; *s != '\0'; s += u8_nextlen(s)) {
+                       char buf[10];
                        n++;
                        snprintf(num, sizeof(num), "%d", n);
-                       buf[0] = *s;
-                       buf[1] = '\0';
+
+                       for (j = 0; j < u8_nextlen(s); j++) {
+                               buf[j] = s[j];
+                       }
+                       buf[j] = '\0';
+
                        if (isdigit((uschar)buf[0]))
                                setsymtab(num, buf, atof(buf), STR|NUM, (Array *) ap->sval);
                        else
                                setsymtab(num, buf, 0.0, STR, (Array *) ap->sval);
                }
-       } else if (*s != '\0') {
+
+       } else if (*s != '\0') {  /* some random single character */
                for (;;) {
                        n++;
                        t = s;
@@ -1386,7 +1838,6 @@ Cell *split(Node **a, int nnn)    /* split(
                }
        }
        tempfree(ap);
-       tempfree(y);
        xfree(origs);
        xfree(origfs);
        x = gettemp();
@@ -1527,6 +1978,7 @@ static char *nawk_convert(const char *s,
        size_t n       = 0;
        wchar_t wc;
        size_t sz = MB_CUR_MAX;
+       int unused;
 
        if (sz == 1) {
                buf = tostring(s);
@@ -1546,7 +1998,7 @@ static char *nawk_convert(const char *s,
                 * doesn't work.)
                 * Increment said variable to avoid a different warning.
                 */
-               int unused = wctomb(NULL, L'\0');
+               unused = wctomb(NULL, L'\0');
                unused++;
 
                ps   = s;
@@ -1600,6 +2052,8 @@ static char *nawk_tolower(const char *s)
        return nawk_convert(s, tolower, towlower);
 }
 
+
+
 Cell *bltin(Node **a, int n)   /* builtin functions. a[0] is type, a[1] is arg list */
 {
        Cell *x, *y;
@@ -1619,7 +2073,7 @@ Cell *bltin(Node **a, int n)      /* builtin 
                if (isarr(x))
                        u = ((Array *) x->sval)->nelem; /* GROT.  should be function*/
                else
-                       u = strlen(getsval(x));
+                       u = u8_strlen(getsval(x));
                break;
        case FLOG:
                errno = 0;
@@ -1712,8 +2166,10 @@ Cell *bltin(Node **a, int n)     /* builtin 
        setfval(x, u);
        if (nextarg != NULL) {
                WARNING("warning: function has too many arguments");
-               for ( ; nextarg; nextarg = nextarg->nnext)
-                       execute(nextarg);
+               for ( ; nextarg; nextarg = nextarg->nnext) {
+                       y = execute(nextarg);
+                       tempfree(y);
+               }
        }
        return(x);
 }
@@ -1780,13 +2236,13 @@ static void stdinit(void)       /* in case std
        if (files == NULL)
                FATAL("can't allocate file memory for %zu files", nfiles);
         files[0].fp = stdin;
-       files[0].fname = "/dev/stdin";
+       files[0].fname = tostring("/dev/stdin");
        files[0].mode = LT;
         files[1].fp = stdout;
-       files[1].fname = "/dev/stdout";
+       files[1].fname = tostring("/dev/stdout");
        files[1].mode = GT;
         files[2].fp = stderr;
-       files[2].fname = "/dev/stderr";
+       files[2].fname = tostring("/dev/stderr");
        files[2].mode = GT;
 }
 
@@ -1890,8 +2346,7 @@ Cell *closefile(Node **a, int n)
                        stat = fclose(files[i].fp) == EOF;
                if (stat)
                        WARNING("i/o error occurred closing %s", files[i].fname);
-               if (i > 2)      /* don't do /dev/std... */
-                       xfree(files[i].fname);
+               xfree(files[i].fname);
                files[i].fname = NULL;  /* watch out for ref thru this */
                files[i].fp = NULL;
                break;
@@ -2140,3 +2595,41 @@ void backsub(char **pb_ptr, const char *
        *pb_ptr = pb;
        *sptr_ptr = sptr;
 }
+
+static char *wide_char_to_byte_str(int rune, size_t *outlen)
+{
+       static char buf[5];
+       int len;
+
+       if (rune < 0 || rune > 0x10FFFF)
+               return NULL;
+
+       memset(buf, 0, sizeof(buf));
+
+       len = 0;
+       if (rune <= 0x0000007F) {
+               buf[len++] = rune;
+       } else if (rune <= 0x000007FF) {
+               // 110xxxxx 10xxxxxx
+               buf[len++] = 0xC0 | (rune >> 6);
+               buf[len++] = 0x80 | (rune & 0x3F);
+       } else if (rune <= 0x0000FFFF) {
+               // 1110xxxx 10xxxxxx 10xxxxxx
+               buf[len++] = 0xE0 | (rune >> 12);
+               buf[len++] = 0x80 | ((rune >> 6) & 0x3F);
+               buf[len++] = 0x80 | (rune & 0x3F);
+
+       } else {
+               // 0x00010000 - 0x10FFFF
+               // 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
+               buf[len++] = 0xF0 | (rune >> 18);
+               buf[len++] = 0x80 | ((rune >> 12) & 0x3F);
+               buf[len++] = 0x80 | ((rune >> 6) & 0x3F);
+               buf[len++] = 0x80 | (rune & 0x3F);
+       }
+
+       *outlen = len;
+       buf[len++] = '\0';
+
+       return buf;
+}

Index: pkgsrc/lang/nawk/files/awkgram.tab.c
diff -u pkgsrc/lang/nawk/files/awkgram.tab.c:1.1 pkgsrc/lang/nawk/files/awkgram.tab.c:1.2
--- pkgsrc/lang/nawk/files/awkgram.tab.c:1.1    Fri Feb 24 20:57:50 2023
+++ pkgsrc/lang/nawk/files/awkgram.tab.c        Tue Sep 12 19:16:52 2023
@@ -1,74 +1,25 @@
-/* A Bison parser, made by GNU Bison 3.8.2.  */
+/* original parser id follows */
+/* yysccsid[] = "@(#)yaccpar   1.9 (Berkeley) 02/21/93" */
+/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */
+
+#define YYBYACC 1
+#define YYMAJOR 2
+#define YYMINOR 0
+
+#define YYEMPTY        (-1)
+#define yyclearin      (yychar = YYEMPTY)
+#define yyerrok        (yyerrflag = 0)
+#define YYRECOVERING() (yyerrflag != 0)
+#define YYENOMEM       (-2)
+#define YYEOF          0
+#undef YYBTYACC
+#define YYBTYACC 0
+#define YYDEBUGSTR YYPREFIX "debug"
+#define YYPREFIX "yy"
 
-/* Bison implementation for Yacc-like parsers in C
-
-   Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2021 Free Software Foundation,
-   Inc.
-
-   This program is free software: you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation, either version 3 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
-
-/* As a special exception, you may create a larger work that contains
-   part or all of the Bison parser skeleton and distribute that work
-   under terms of your choice, so long as that work isn't itself a
-   parser generator using the skeleton or a modified version thereof
-   as a parser skeleton.  Alternatively, if you modify or redistribute
-   the parser skeleton itself, you may (at your option) remove this
-   special exception, which will cause the skeleton and the resulting
-   Bison output files to be licensed under the GNU General Public
-   License without this special exception.
-
-   This special exception was added by the Free Software Foundation in
-   version 2.2 of Bison.  */
-
-/* C LALR(1) parser skeleton written by Richard Stallman, by
-   simplifying the original so-called "semantic" parser.  */
-
-/* DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual,
-   especially those whose name start with YY_ or yy_.  They are
-   private implementation details that can be changed or removed.  */
-
-/* All symbols defined below should begin with yy or YY, to avoid
-   infringing on user name space.  This should be done even for local
-   variables, as they might otherwise be expanded by user macros.
-   There are some unavoidable exceptions within include files to
-   define necessary library symbols; they are noted "INFRINGES ON
-   USER NAME SPACE" below.  */
-
-/* Identify Bison output, and Bison version.  */
-#define YYBISON 30802
-
-/* Bison version string.  */
-#define YYBISON_VERSION "3.8.2"
-
-/* Skeleton name.  */
-#define YYSKELETON_NAME "yacc.c"
-
-/* Pure parsers.  */
 #define YYPURE 0
 
-/* Push parsers.  */
-#define YYPUSH 0
-
-/* Pull parsers.  */
-#define YYPULL 1
-
-
-
-
-/* First part of user prologue.  */
-#line 25 "awkgram.y"
-
+#line 26 "awkgram.y"
 #include <stdio.h>
 #include <string.h>
 #include "awk.h"
@@ -82,3374 +33,5328 @@ bool    infunc  = false;        /* = true if in arg
 int    inloop  = 0;    /* >= 1 if in while, for, do; can't be bool, since loops can next */
 char   *curfname = 0;  /* current function name */
 Node   *arglist = 0;   /* list of args for current function */
-
-#line 87 "awkgram.tab.c"
-
-# ifndef YY_CAST
-#  ifdef __cplusplus
-#   define YY_CAST(Type, Val) static_cast<Type> (Val)
-#   define YY_REINTERPRET_CAST(Type, Val) reinterpret_cast<Type> (Val)
-#  else
-#   define YY_CAST(Type, Val) ((Type) (Val))
-#   define YY_REINTERPRET_CAST(Type, Val) ((Type) (Val))
-#  endif
-# endif
-# ifndef YY_NULLPTR
-#  if defined __cplusplus
-#   if 201103L <= __cplusplus
-#    define YY_NULLPTR nullptr
-#   else
-#    define YY_NULLPTR 0
-#   endif
-#  else
-#   define YY_NULLPTR ((void*)0)
-#  endif
-# endif
-
-#include "awkgram.tab.h"
-/* Symbol kind.  */
-enum yysymbol_kind_t
-{
-  YYSYMBOL_YYEMPTY = -2,
-  YYSYMBOL_YYEOF = 0,                      /* "end of file"  */
-  YYSYMBOL_YYerror = 1,                    /* error  */
-  YYSYMBOL_YYUNDEF = 2,                    /* "invalid token"  */
-  YYSYMBOL_FIRSTTOKEN = 3,                 /* FIRSTTOKEN  */
-  YYSYMBOL_PROGRAM = 4,                    /* PROGRAM  */
-  YYSYMBOL_PASTAT = 5,                     /* PASTAT  */
-  YYSYMBOL_PASTAT2 = 6,                    /* PASTAT2  */
-  YYSYMBOL_XBEGIN = 7,                     /* XBEGIN  */
-  YYSYMBOL_XEND = 8,                       /* XEND  */
-  YYSYMBOL_NL = 9,                         /* NL  */
-  YYSYMBOL_10_ = 10,                       /* ','  */
-  YYSYMBOL_11_ = 11,                       /* '{'  */
-  YYSYMBOL_12_ = 12,                       /* '('  */
-  YYSYMBOL_13_ = 13,                       /* '|'  */
-  YYSYMBOL_14_ = 14,                       /* ';'  */
-  YYSYMBOL_15_ = 15,                       /* '/'  */
-  YYSYMBOL_16_ = 16,                       /* ')'  */
-  YYSYMBOL_17_ = 17,                       /* '}'  */
-  YYSYMBOL_18_ = 18,                       /* '['  */
-  YYSYMBOL_19_ = 19,                       /* ']'  */
-  YYSYMBOL_ARRAY = 20,                     /* ARRAY  */
-  YYSYMBOL_MATCH = 21,                     /* MATCH  */
-  YYSYMBOL_NOTMATCH = 22,                  /* NOTMATCH  */
-  YYSYMBOL_MATCHOP = 23,                   /* MATCHOP  */
-  YYSYMBOL_FINAL = 24,                     /* FINAL  */
-  YYSYMBOL_DOT = 25,                       /* DOT  */
-  YYSYMBOL_ALL = 26,                       /* ALL  */
-  YYSYMBOL_CCL = 27,                       /* CCL  */
-  YYSYMBOL_NCCL = 28,                      /* NCCL  */
-  YYSYMBOL_CHAR = 29,                      /* CHAR  */
-  YYSYMBOL_OR = 30,                        /* OR  */
-  YYSYMBOL_STAR = 31,                      /* STAR  */
-  YYSYMBOL_QUEST = 32,                     /* QUEST  */
-  YYSYMBOL_PLUS = 33,                      /* PLUS  */
-  YYSYMBOL_EMPTYRE = 34,                   /* EMPTYRE  */
-  YYSYMBOL_ZERO = 35,                      /* ZERO  */
-  YYSYMBOL_AND = 36,                       /* AND  */
-  YYSYMBOL_BOR = 37,                       /* BOR  */
-  YYSYMBOL_APPEND = 38,                    /* APPEND  */
-  YYSYMBOL_EQ = 39,                        /* EQ  */
-  YYSYMBOL_GE = 40,                        /* GE  */
-  YYSYMBOL_GT = 41,                        /* GT  */
-  YYSYMBOL_LE = 42,                        /* LE  */
-  YYSYMBOL_LT = 43,                        /* LT  */
-  YYSYMBOL_NE = 44,                        /* NE  */
-  YYSYMBOL_IN = 45,                        /* IN  */
-  YYSYMBOL_ARG = 46,                       /* ARG  */
-  YYSYMBOL_BLTIN = 47,                     /* BLTIN  */
-  YYSYMBOL_BREAK = 48,                     /* BREAK  */
-  YYSYMBOL_CLOSE = 49,                     /* CLOSE  */
-  YYSYMBOL_CONTINUE = 50,                  /* CONTINUE  */
-  YYSYMBOL_DELETE = 51,                    /* DELETE  */
-  YYSYMBOL_DO = 52,                        /* DO  */
-  YYSYMBOL_EXIT = 53,                      /* EXIT  */
-  YYSYMBOL_FOR = 54,                       /* FOR  */
-  YYSYMBOL_FUNC = 55,                      /* FUNC  */
-  YYSYMBOL_SUB = 56,                       /* SUB  */
-  YYSYMBOL_GSUB = 57,                      /* GSUB  */
-  YYSYMBOL_IF = 58,                        /* IF  */
-  YYSYMBOL_INDEX = 59,                     /* INDEX  */
-  YYSYMBOL_LSUBSTR = 60,                   /* LSUBSTR  */
-  YYSYMBOL_MATCHFCN = 61,                  /* MATCHFCN  */
-  YYSYMBOL_NEXT = 62,                      /* NEXT  */
-  YYSYMBOL_NEXTFILE = 63,                  /* NEXTFILE  */
-  YYSYMBOL_ADD = 64,                       /* ADD  */
-  YYSYMBOL_MINUS = 65,                     /* MINUS  */
-  YYSYMBOL_MULT = 66,                      /* MULT  */
-  YYSYMBOL_DIVIDE = 67,                    /* DIVIDE  */
-  YYSYMBOL_MOD = 68,                       /* MOD  */
-  YYSYMBOL_ASSIGN = 69,                    /* ASSIGN  */
-  YYSYMBOL_ASGNOP = 70,                    /* ASGNOP  */
-  YYSYMBOL_ADDEQ = 71,                     /* ADDEQ  */
-  YYSYMBOL_SUBEQ = 72,                     /* SUBEQ  */
-  YYSYMBOL_MULTEQ = 73,                    /* MULTEQ  */
-  YYSYMBOL_DIVEQ = 74,                     /* DIVEQ  */
-  YYSYMBOL_MODEQ = 75,                     /* MODEQ  */
-  YYSYMBOL_POWEQ = 76,                     /* POWEQ  */
-  YYSYMBOL_PRINT = 77,                     /* PRINT  */
-  YYSYMBOL_PRINTF = 78,                    /* PRINTF  */
-  YYSYMBOL_SPRINTF = 79,                   /* SPRINTF  */
-  YYSYMBOL_ELSE = 80,                      /* ELSE  */
-  YYSYMBOL_INTEST = 81,                    /* INTEST  */
-  YYSYMBOL_CONDEXPR = 82,                  /* CONDEXPR  */
-  YYSYMBOL_POSTINCR = 83,                  /* POSTINCR  */
-  YYSYMBOL_PREINCR = 84,                   /* PREINCR  */
-  YYSYMBOL_POSTDECR = 85,                  /* POSTDECR  */
-  YYSYMBOL_PREDECR = 86,                   /* PREDECR  */
-  YYSYMBOL_VAR = 87,                       /* VAR  */
-  YYSYMBOL_IVAR = 88,                      /* IVAR  */
-  YYSYMBOL_VARNF = 89,                     /* VARNF  */
-  YYSYMBOL_CALL = 90,                      /* CALL  */
-  YYSYMBOL_NUMBER = 91,                    /* NUMBER  */
-  YYSYMBOL_STRING = 92,                    /* STRING  */
-  YYSYMBOL_REGEXPR = 93,                   /* REGEXPR  */
-  YYSYMBOL_94_ = 94,                       /* '?'  */
-  YYSYMBOL_95_ = 95,                       /* ':'  */
-  YYSYMBOL_GETLINE = 96,                   /* GETLINE  */
-  YYSYMBOL_RETURN = 97,                    /* RETURN  */
-  YYSYMBOL_SPLIT = 98,                     /* SPLIT  */
-  YYSYMBOL_SUBSTR = 99,                    /* SUBSTR  */
-  YYSYMBOL_WHILE = 100,                    /* WHILE  */
-  YYSYMBOL_CAT = 101,                      /* CAT  */
-  YYSYMBOL_102_ = 102,                     /* '+'  */
-  YYSYMBOL_103_ = 103,                     /* '-'  */
-  YYSYMBOL_104_ = 104,                     /* '*'  */
-  YYSYMBOL_105_ = 105,                     /* '%'  */
-  YYSYMBOL_NOT = 106,                      /* NOT  */
-  YYSYMBOL_UMINUS = 107,                   /* UMINUS  */
-  YYSYMBOL_UPLUS = 108,                    /* UPLUS  */
-  YYSYMBOL_POWER = 109,                    /* POWER  */
-  YYSYMBOL_DECR = 110,                     /* DECR  */
-  YYSYMBOL_INCR = 111,                     /* INCR  */
-  YYSYMBOL_INDIRECT = 112,                 /* INDIRECT  */
-  YYSYMBOL_LASTTOKEN = 113,                /* LASTTOKEN  */
-  YYSYMBOL_YYACCEPT = 114,                 /* $accept  */
-  YYSYMBOL_program = 115,                  /* program  */
-  YYSYMBOL_and = 116,                      /* and  */
-  YYSYMBOL_bor = 117,                      /* bor  */
-  YYSYMBOL_comma = 118,                    /* comma  */
-  YYSYMBOL_do = 119,                       /* do  */
-  YYSYMBOL_else = 120,                     /* else  */
-  YYSYMBOL_for = 121,                      /* for  */
-  YYSYMBOL_122_1 = 122,                    /* $@1  */
-  YYSYMBOL_123_2 = 123,                    /* $@2  */
-  YYSYMBOL_124_3 = 124,                    /* $@3  */
-  YYSYMBOL_funcname = 125,                 /* funcname  */
-  YYSYMBOL_if = 126,                       /* if  */
-  YYSYMBOL_lbrace = 127,                   /* lbrace  */
-  YYSYMBOL_nl = 128,                       /* nl  */
-  YYSYMBOL_opt_nl = 129,                   /* opt_nl  */
-  YYSYMBOL_opt_pst = 130,                  /* opt_pst  */
-  YYSYMBOL_opt_simple_stmt = 131,          /* opt_simple_stmt  */
-  YYSYMBOL_pas = 132,                      /* pas  */
-  YYSYMBOL_pa_pat = 133,                   /* pa_pat  */
-  YYSYMBOL_pa_stat = 134,                  /* pa_stat  */
-  YYSYMBOL_135_4 = 135,                    /* $@4  */
-  YYSYMBOL_pa_stats = 136,                 /* pa_stats  */
-  YYSYMBOL_patlist = 137,                  /* patlist  */
-  YYSYMBOL_ppattern = 138,                 /* ppattern  */
-  YYSYMBOL_pattern = 139,                  /* pattern  */
-  YYSYMBOL_plist = 140,                    /* plist  */
-  YYSYMBOL_pplist = 141,                   /* pplist  */
-  YYSYMBOL_prarg = 142,                    /* prarg  */
-  YYSYMBOL_print = 143,                    /* print  */
-  YYSYMBOL_pst = 144,                      /* pst  */
-  YYSYMBOL_rbrace = 145,                   /* rbrace  */
-  YYSYMBOL_re = 146,                       /* re  */
-  YYSYMBOL_reg_expr = 147,                 /* reg_expr  */
-  YYSYMBOL_148_5 = 148,                    /* $@5  */
-  YYSYMBOL_rparen = 149,                   /* rparen  */
-  YYSYMBOL_simple_stmt = 150,              /* simple_stmt  */
-  YYSYMBOL_st = 151,                       /* st  */
-  YYSYMBOL_stmt = 152,                     /* stmt  */
-  YYSYMBOL_153_6 = 153,                    /* $@6  */
-  YYSYMBOL_154_7 = 154,                    /* $@7  */
-  YYSYMBOL_155_8 = 155,                    /* $@8  */
-  YYSYMBOL_stmtlist = 156,                 /* stmtlist  */
-  YYSYMBOL_subop = 157,                    /* subop  */
-  YYSYMBOL_string = 158,                   /* string  */
-  YYSYMBOL_term = 159,                     /* term  */
-  YYSYMBOL_var = 160,                      /* var  */
-  YYSYMBOL_varlist = 161,                  /* varlist  */
-  YYSYMBOL_varname = 162,                  /* varname  */
-  YYSYMBOL_while = 163                     /* while  */
-};
-typedef enum yysymbol_kind_t yysymbol_kind_t;
-
-
-
-
-#ifdef short
-# undef short
+#ifdef YYSTYPE
+#undef  YYSTYPE_IS_DECLARED
+#define YYSTYPE_IS_DECLARED 1
 #endif
-
-/* On compilers that do not define __PTRDIFF_MAX__ etc., make sure
-   <limits.h> and (if available) <stdint.h> are included
-   so that the code can choose integer types of a good width.  */
-
-#ifndef __PTRDIFF_MAX__
-# include <limits.h> /* INFRINGES ON USER NAME SPACE */
-# if defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__
-#  include <stdint.h> /* INFRINGES ON USER NAME SPACE */
-#  define YY_STDINT_H
+#ifndef YYSTYPE_IS_DECLARED
+#define YYSTYPE_IS_DECLARED 1
+#line 41 "awkgram.y"
+typedef union {
+       Node    *p;
+       Cell    *cp;
+       int     i;
+       char    *s;
+} YYSTYPE;
+#endif /* !YYSTYPE_IS_DECLARED */
+#line 51 "awkgram.tab.c"
+
+/* compatibility with bison */
+#ifdef YYPARSE_PARAM
+/* compatibility with FreeBSD */
+# ifdef YYPARSE_PARAM_TYPE
+#  define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
+# else
+#  define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
 # endif
-#endif
-
-/* Narrow types that promote to a signed type and that can represent a
-   signed or unsigned integer of at least N bits.  In tables they can
-   save space and decrease cache pressure.  Promoting to a signed type
-   helps avoid bugs in integer arithmetic.  */
-
-#ifdef __INT_LEAST8_MAX__
-typedef __INT_LEAST8_TYPE__ yytype_int8;
-#elif defined YY_STDINT_H
-typedef int_least8_t yytype_int8;
 #else
-typedef signed char yytype_int8;
+# define YYPARSE_DECL() yyparse(void)
 #endif
 
-#ifdef __INT_LEAST16_MAX__
-typedef __INT_LEAST16_TYPE__ yytype_int16;
-#elif defined YY_STDINT_H
-typedef int_least16_t yytype_int16;
+/* Parameters sent to lex. */
+#ifdef YYLEX_PARAM
+# define YYLEX_DECL() yylex(void *YYLEX_PARAM)
+# define YYLEX yylex(YYLEX_PARAM)
 #else
-typedef short yytype_int16;
+# define YYLEX_DECL() yylex(void)
+# define YYLEX yylex()
 #endif
 
-/* Work around bug in HP-UX 11.23, which defines these macros
-   incorrectly for preprocessor constants.  This workaround can likely
-   be removed in 2023, as HPE has promised support for HP-UX 11.23
-   (aka HP-UX 11i v2) only through the end of 2022; see Table 2 of
-   <https://h20195.www2.hpe.com/V2/getpdf.aspx/4AA4-7673ENW.pdf>.  */
-#ifdef __hpux
-# undef UINT_LEAST8_MAX
-# undef UINT_LEAST16_MAX
-# define UINT_LEAST8_MAX 255
-# define UINT_LEAST16_MAX 65535
-#endif
-
-#if defined __UINT_LEAST8_MAX__ && __UINT_LEAST8_MAX__ <= __INT_MAX__
-typedef __UINT_LEAST8_TYPE__ yytype_uint8;
-#elif (!defined __UINT_LEAST8_MAX__ && defined YY_STDINT_H \
-       && UINT_LEAST8_MAX <= INT_MAX)
-typedef uint_least8_t yytype_uint8;
-#elif !defined __UINT_LEAST8_MAX__ && UCHAR_MAX <= INT_MAX
-typedef unsigned char yytype_uint8;
-#else
-typedef short yytype_uint8;
+#if !(defined(yylex) || defined(YYSTATE))
+int YYLEX_DECL();
 #endif
 
-#if defined __UINT_LEAST16_MAX__ && __UINT_LEAST16_MAX__ <= __INT_MAX__
-typedef __UINT_LEAST16_TYPE__ yytype_uint16;
-#elif (!defined __UINT_LEAST16_MAX__ && defined YY_STDINT_H \
-       && UINT_LEAST16_MAX <= INT_MAX)
-typedef uint_least16_t yytype_uint16;
-#elif !defined __UINT_LEAST16_MAX__ && USHRT_MAX <= INT_MAX
-typedef unsigned short yytype_uint16;
-#else
-typedef int yytype_uint16;
+/* Parameters sent to yyerror. */
+#ifndef YYERROR_DECL
+#define YYERROR_DECL() yyerror(const char *s)
 #endif
-
-#ifndef YYPTRDIFF_T
-# if defined __PTRDIFF_TYPE__ && defined __PTRDIFF_MAX__
-#  define YYPTRDIFF_T __PTRDIFF_TYPE__
-#  define YYPTRDIFF_MAXIMUM __PTRDIFF_MAX__
-# elif defined PTRDIFF_MAX
-#  ifndef ptrdiff_t
-#   include <stddef.h> /* INFRINGES ON USER NAME SPACE */
-#  endif
-#  define YYPTRDIFF_T ptrdiff_t
-#  define YYPTRDIFF_MAXIMUM PTRDIFF_MAX
-# else
-#  define YYPTRDIFF_T long
-#  define YYPTRDIFF_MAXIMUM LONG_MAX
-# endif
+#ifndef YYERROR_CALL
+#define YYERROR_CALL(msg) yyerror(msg)
 #endif
 
-#ifndef YYSIZE_T
-# ifdef __SIZE_TYPE__
-#  define YYSIZE_T __SIZE_TYPE__
-# elif defined size_t
-#  define YYSIZE_T size_t
-# elif defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__
-#  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
-#  define YYSIZE_T size_t
-# else
-#  define YYSIZE_T unsigned
-# endif
-#endif
-
-#define YYSIZE_MAXIMUM                                  \
-  YY_CAST (YYPTRDIFF_T,                                 \
-           (YYPTRDIFF_MAXIMUM < YY_CAST (YYSIZE_T, -1)  \
-            ? YYPTRDIFF_MAXIMUM                         \
-            : YY_CAST (YYSIZE_T, -1)))
-
-#define YYSIZEOF(X) YY_CAST (YYPTRDIFF_T, sizeof (X))
-
-
-/* Stored state numbers (used for stacks). */
-typedef yytype_int16 yy_state_t;
-
-/* State numbers in computations.  */
-typedef int yy_state_fast_t;
-
-#ifndef YY_
-# if defined YYENABLE_NLS && YYENABLE_NLS
-#  if ENABLE_NLS
-#   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
-#   define YY_(Msgid) dgettext ("bison-runtime", Msgid)
-#  endif
-# endif
-# ifndef YY_
-#  define YY_(Msgid) Msgid
-# endif
-#endif
+extern int YYPARSE_DECL();
 
-
-#ifndef YY_ATTRIBUTE_PURE
-# if defined __GNUC__ && 2 < __GNUC__ + (96 <= __GNUC_MINOR__)
-#  define YY_ATTRIBUTE_PURE __attribute__ ((__pure__))
-# else
-#  define YY_ATTRIBUTE_PURE
-# endif
-#endif
-
-#ifndef YY_ATTRIBUTE_UNUSED
-# if defined __GNUC__ && 2 < __GNUC__ + (7 <= __GNUC_MINOR__)
-#  define YY_ATTRIBUTE_UNUSED __attribute__ ((__unused__))
-# else
-#  define YY_ATTRIBUTE_UNUSED
-# endif
-#endif
-
-/* Suppress unused-variable warnings by "using" E.  */
-#if ! defined lint || defined __GNUC__
-# define YY_USE(E) ((void) (E))
-#else
-# define YY_USE(E) /* empty */
+#define FIRSTTOKEN 257
+#define PROGRAM 258
+#define PASTAT 259
+#define PASTAT2 260
+#define XBEGIN 261
+#define XEND 262
+#define NL 263
+#define ARRAY 264
+#define MATCH 265
+#define NOTMATCH 266
+#define MATCHOP 267
+#define FINAL 268
+#define DOT 269
+#define ALL 270
+#define CCL 271
+#define NCCL 272
+#define CHAR 273
+#define OR 274
+#define STAR 275
+#define QUEST 276
+#define PLUS 277
+#define EMPTYRE 278
+#define ZERO 279
+#define AND 280
+#define BOR 281
+#define APPEND 282
+#define EQ 283
+#define GE 284
+#define GT 285
+#define LE 286
+#define LT 287
+#define NE 288
+#define IN 289
+#define ARG 290
+#define BLTIN 291
+#define BREAK 292
+#define CLOSE 293
+#define CONTINUE 294
+#define DELETE 295
+#define DO 296
+#define EXIT 297
+#define FOR 298
+#define FUNC 299
+#define SUB 300
+#define GSUB 301
+#define IF 302
+#define INDEX 303
+#define LSUBSTR 304
+#define MATCHFCN 305
+#define NEXT 306
+#define NEXTFILE 307
+#define ADD 308
+#define MINUS 309
+#define MULT 310
+#define DIVIDE 311
+#define MOD 312
+#define ASSIGN 313
+#define ASGNOP 314
+#define ADDEQ 315
+#define SUBEQ 316
+#define MULTEQ 317
+#define DIVEQ 318
+#define MODEQ 319
+#define POWEQ 320
+#define PRINT 321
+#define PRINTF 322
+#define SPRINTF 323
+#define ELSE 324
+#define INTEST 325
+#define CONDEXPR 326
+#define POSTINCR 327
+#define PREINCR 328
+#define POSTDECR 329
+#define PREDECR 330
+#define VAR 331
+#define IVAR 332
+#define VARNF 333
+#define CALL 334
+#define NUMBER 335
+#define STRING 336
+#define REGEXPR 337
+#define GETLINE 338
+#define RETURN 339
+#define SPLIT 340
+#define SUBSTR 341
+#define WHILE 342
+#define CAT 343
+#define NOT 344
+#define UMINUS 345
+#define UPLUS 346
+#define POWER 347
+#define DECR 348
+#define INCR 349
+#define INDIRECT 350
+#define LASTTOKEN 351
+#define YYERRCODE 256
+typedef int YYINT;
+static const YYINT yylhs[] = {                           -1,
+    0,    0,   36,   36,   37,   37,   33,   33,   26,   26,
+   24,   24,   41,   22,   42,   22,   43,   22,   20,   20,
+   23,   30,   30,   34,   34,   35,   35,   29,   29,   15,
+   15,    1,    1,   10,   11,   11,   11,   11,   11,   11,
+   11,   44,   11,   12,   12,    6,    6,    3,    3,    3,
+    3,    3,    3,    3,    3,    3,    3,    3,    2,    2,
+    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
+    2,    2,    2,    2,    2,    2,    2,    4,    4,    5,
+    5,    7,    7,    7,   39,   39,   28,   28,   28,   28,
+   31,   31,    9,    9,   45,   13,   32,   32,   14,   14,
+   14,   14,   14,   14,   14,   14,   27,   27,   16,   16,
+   46,   47,   16,   16,   16,   16,   16,   16,   16,   16,
+   16,   16,   16,   16,   48,   16,   16,   17,   17,   38,
+   38,   40,   40,    8,    8,    8,    8,    8,    8,    8,
+    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,
+    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,
+    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,
+    8,    8,    8,    8,    8,   18,   18,   18,   18,   21,
+   21,   21,   19,   19,   19,   25,
+};
+static const YYINT yylen[] = {                            2,
+    1,    1,    1,    2,    1,    2,    1,    2,    1,    2,
+    1,    2,    0,   12,    0,   10,    0,    8,    1,    1,
+    4,    1,    2,    1,    2,    0,    1,    0,    1,    0,
+    1,    1,    3,    1,    1,    4,    4,    7,    3,    4,
+    4,    0,    9,    1,    3,    1,    3,    3,    5,    3,
+    3,    3,    3,    3,    5,    2,    1,    1,    3,    5,
+    3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
+    3,    5,    4,    3,    2,    1,    1,    3,    3,    1,
+    3,    0,    1,    3,    1,    1,    1,    1,    2,    2,
+    1,    2,    1,    2,    0,    4,    1,    2,    4,    4,
+    4,    2,    5,    2,    1,    1,    1,    2,    2,    2,
+    0,    0,    9,    3,    2,    1,    4,    2,    3,    2,
+    2,    3,    2,    2,    0,    3,    2,    1,    2,    1,
+    1,    1,    2,    4,    3,    3,    3,    3,    3,    3,
+    2,    2,    2,    3,    4,    1,    3,    4,    2,    2,
+    2,    2,    2,    4,    3,    2,    1,    6,    6,    3,
+    6,    6,    1,    8,    8,    6,    4,    1,    6,    6,
+    8,    8,    8,    6,    1,    1,    4,    1,    2,    0,
+    1,    3,    1,    1,    1,    4,
+};
+static const YYINT yydefred[] = {                         0,
+    2,   87,   88,    0,    1,    0,    0,   89,   90,    0,
+    0,   22,    0,   95,  184,    0,    0,    0,  130,  131,
+    0,    0,    0,  183,  178,  185,    0,  163,  132,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+   76,    0,   44,    0,   93,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+   19,   20,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,   94,  150,  151,  179,    0,    0,
+    3,    5,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,  152,  153,    0,  106,   23,    0,    0,
+    0,    0,    9,    0,    0,    0,    0,    0,   85,   86,
+    0,    0,    0,    0,  128,    0,  116,    0,  125,    0,
+    0,    0,    0,  133,    0,    0,    7,  160,    0,    0,
+    0,    0,  144,    0,    0,    0,    0,    0,    0,    0,
+  147,    0,    0,    0,    0,    0,    0,    0,   69,    0,
+    0,    0,    0,    0,    0,   71,    0,    4,    0,    6,
+    0,    0,    0,    0,    0,    0,    0,    0,   24,    0,
+    0,    0,   45,    0,    0,  127,    0,  109,    0,  110,
+    0,    0,  115,    0,    0,  120,  121,    0,  123,    0,
+  124,   39,  129,    0,    0,   10,    0,    0,    0,    0,
+    0,    0,    0,   57,    0,    0,    0,   40,   41,    8,
+    0,    0,    0,   96,  145,    0,  181,    0,    0,    0,
+  167,  148,    0,    0,    0,   73,    0,    0,   25,    0,
+   36,  177,  108,    0,  114,   31,    0,    0,    0,  122,
+    0,   11,    0,  126,  112,   91,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,   72,    0,   97,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,   12,
+  117,    0,   92,    0,    0,    0,   52,   54,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,   98,    0,
+  182,  158,  159,  162,  161,  166,    0,  174,    0,    0,
+  103,    0,    0,    0,    0,    0,    0,    0,  170,    0,
+  169,    0,    0,    0,    0,    0,   38,    0,    0,    0,
+    0,   55,    0,    0,    0,    0,    0,  164,  165,  173,
+    0,    0,    0,    0,  172,  171,   43,    0,    0,   18,
+    0,    0,    0,  113,   16,    0,    0,   14,
+};
+#if defined(YYDESTRUCT_CALL) || defined(YYSTYPE_TOSTRING)
+static const YYINT yystos[] = {                           0,
+  256,  263,   59,  353,  354,  381,  382,  263,   59,  261,
+  262,  123,   40,   47,  290,  291,  293,  299,  300,  301,
+  303,  305,  323,  331,  332,  333,  334,  335,  336,  338,
+  340,  341,   43,   45,  344,  348,  349,  350,  355,  361,
+  362,  363,  364,  365,  366,  371,  372,  383,  391,  393,
+  383,  383,  355,  357,  398,   40,   40,  344,  361,  371,
+  331,  334,  373,   40,   40,   40,   40,  287,  371,   40,
+   40,  361,  361,  361,  362,  371,  371,  361,  124,  267,
+  280,  281,  283,  284,  285,  286,  287,  288,  289,   63,
+  361,  389,  390,   47,   43,   45,   42,   37,  347,   44,
+  383,  382,  314,  348,  349,   91,  256,  263,   59,  292,
+  294,  295,  296,  297,  298,  302,  306,  307,  321,  322,
+  339,  342,  355,  367,  369,  370,  375,  376,  378,  379,
+  383,  392,   40,  336,  370,  370,   44,   41,  386,   41,
+  386,  337,   41,  355,  359,  355,   40,  355,  355,  359,
+   41,  359,  361,  287,  355,  355,  338,  355,  366,  355,
+  355,  355,  355,  355,  355,  372,  355,  263,  355,  263,
+  355,  314,  361,  361,  361,  361,  361,  361,  263,  387,
+  388,  370,  364,  355,  359,  388,   59,  380,  387,  380,
+  372,  355,  380,   40,   40,  380,  380,  355,  380,   40,
+  380,  125,  369,  369,  401,  263,  399,  370,   40,  356,
+  358,  360,  361,  362,  371,  355,  366,  125,  125,  263,
+  355,  289,  355,   47,   41,  386,  331,  374,  386,  386,
+   41,   41,  361,  386,  386,  371,   58,  361,  263,  363,
+  125,   93,  388,   91,  380,  367,  368,  372,  355,  380,
+  355,  324,  377,  369,  369,  125,  384,  357,  267,  289,
+   63,  361,  389,  390,  386,  124,  282,  285,  314,  386,
+  386,  372,  355,   41,  385,  386,  355,  366,  355,  366,
+  372,  355,  355,  383,  359,   59,  289,  385,  385,  263,
+  369,  400,  263,   41,   40,  356,  366,  372,  356,  356,
+  356,  356,  361,  361,  361,  356,  355,  355,  263,  397,
+  331,   41,   41,   41,   41,   41,  386,   41,  386,  370,
+   93,   59,  388,  372,  342,  289,  357,   58,   41,  386,
+   41,  386,  383,  355,  366,  355,  125,  388,  355,  385,
+   40,  372,   41,  356,  371,  371,  370,   41,   41,   41,
+  368,   59,  396,  355,   41,   41,  125,  385,  388,  369,
+   41,  395,  368,  380,  369,  385,  394,  369,
+};
+#endif /* YYDESTRUCT_CALL || YYSTYPE_TOSTRING */
+static const YYINT yydgoto[] = {                          4,
+    5,  123,  210,   54,  211,  145,  212,   40,   41,   42,
+   43,   44,   45,  124,  247,  125,  126,   46,   47,   63,
+  228,  127,  128,  253,  129,  130,  188,    6,    7,  131,
+  257,  275,  226,  189,  181,   92,   93,   49,  132,   50,
+  367,  362,  353,  310,   55,  207,  292,  205,
+};
+static const YYINT yysindex[] = {                       -55,
+    0,    0,    0,    0,    0,  -39, 8470,    0,    0,  -66,
+  -66,    0, 5698,    0,    0,   32, 1365, -255,    0,    0,
+   43,   53,   64,    0,    0,    0,   89,    0,    0,   56,
+   90,  107, 1365, 1365, 9050, -114, -114, 1365, 7895,  -37,
+    0,  -13,    0,  -29,    0, -264,   40, 5023,  108, -184,
+ 5023, 5023, 1864,   46, -179,  368, 5698, 1365,  -37, -230,
+    0,    0,  120, 5698, 5698, 5698, 3071, 1365, -117, 5698,
+ 5698, -176, -176, -176,    0,    0,    0,    0, -151, 5698,
+    0,    0, 5698, 5698, 5698, 5698, 5698, 5698, -178, 5698,
+  -37, 8646, 8734,  866, 1365, 1365, 1365, 1365, 1365,  -74,
+ 5023, 8470, 5698,    0,    0, 5698,    0,    0,  -74,  -24,
+  -24, -178,    0, 8566,  165,  172,  -24,  -24,    0,    0,
+ 8566,  205, 7895,  -24,    0, 5157,    0, 6011,    0,   -2,
+ 5023, 9074, 5698,    0, 5352, 5425,    0,    0, 8801,  -19,
+ 8801,  203,    0, 7895,   96, 7035,  -64, 7107, 7107,  100,
+    0,  102,  -37, 1365, 7107, 7107, -114, 9202,    0, 9202,
+ 9202, 9202, 9202, 9202, 9202,    0, 7182,    0, 8331,    0,
+ 8240, 1365, -176,  -35,  -35, -176, -176, -176,    0,    3,
+ 5698, 5486,    0, 7895,  -23,    0,  -74,    0,    3,    0,
+  180, 6709,    0, 1771, 5698,    0,    0, 6709,    0, 5698,
+    0,    0,    0,  -52, 6011,    0, 6011, 5547, 5698, 8542,
+  233, -108,  -37,    0, -252, 7107,  233,    0,    0,    0,
+ 7895, -178, 7895,    0,    0, 8801,    0,  118, 8801, 8801,
+    0,    0,  -37, -210, 8801,    0, 5698,  -37,    0,  -66,
+    0,    0,    0, 5698,    0,    0,  236,  -80, 7289,    0,
+ 7289,    0, 5621,    0,    0,    0,   44,  134, 9126, -178,
+ 9126,  -37, 8877, 8959, 8983, 1365, 1365, 1365, 9126, 8801,
+ 8801,    0, 7895,    0,   50, -223, 7374,  256, 7461,  281,
+  138, 6781, 7895, 5023,    8,   -5, -178,   50,   50,    0,
+    0,  -17,    0,   38, 5698, 9202,    0,    0, 8407, 4219,
+  271, 8542,  -37,  -37,  -37, 8542, 6853, 6963,    0,  -66,
+    0,    0,    0,    0,    0,    0, 8801,    0, 8801, 5815,
+    0,  -74, 5698,  282,  291, -178,  142, 9126,    0,   36,
+    0,   36, 5023, 7556,  297, 7641,    0, 1771, 7727,   50,
+ 5698,    0,   38, 8542,  303,  314, 5889,    0,    0,    0,
+  282,  -74, 6011, 7823,    0,    0,    0,   50, 1771,    0,
+  -24, 6011,  282,    0,    0,   50, 6011,    0,
+};
+static const YYINT yyrindex[] = {                      3301,
+    0,    0,    0,    0,    0, 3353,  356,    0,    0,    0,
+    0,    0,    0,    0,    0,   91,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0, 3620,
+    0,    0,    0,    0,    0,    0,    0,    0,   67, 2889,
+    0, 3155,    0, 3301,    0, 1993,    1,    0,    0,  185,
+    0,    0,    0,    0,    0,    0,    0,    0, 2349, 1682,
+    0,    0,    0,    0,    0,    0,    0,    0,  500,    0,
+    0,  590,  684,  999,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+ 2983,    0,    0,    0,    0,    0,    0,    0,    0, 9150,
+    0,  362,    0,    0,    0,    0,    0,    0, 4816,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,  -32,    0,    0,    0,    0,    0,    0, 6084,
+    0,  239,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,   22,    0,    0,  162,    0,    0,    0,
+    0,    0, 2443,    0,    0,    0, 3690, 1047,    0, 1546,
+ 2490, 3723, 3774, 3784, 3817,    0,    0,    0, 4547,    0,
+  856,    0, 1089, 2083, 2177, 1183, 1498, 1588,    0, 4099,
+    0,    0,    0,   58,    0,    0, 4816,    0, 4928,    0,
+  -22,    0,    0,  305,    0,    0,    0,    0,    0,    0,
+    0,    0,    0, 5950,    0,    0,    0,    0,    0, 1011,
+  306,    6, 8077,    0, 4755,    0, 7981,    0,    0,    0,
+  163,    0,  169,    0,    0,    0,    0,    0,    0,    0,
+    0,    0, 2533,    0,    0,    0,    0, 2799,    0, 3249,
+    0,    0,    0,    0,    0,    0,    0, 4662,    0,    0,
+    0,    0,    0,    0,    0,    0, 5084,    0,    0,    0,
+    0, 8153,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,   34,    0,  247,    0,    0, 7981,    0, 7981,
+    0,    0,   98,    0,    0, 9150,    0, 6157, 6218,    0,
+    0,    0,    0,  403,    0,  216,    0,    0,    0,  179,
+  635, 1034,   10,   30,   33,  539,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0, 6620,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0, 7981,    0,    0,  342,    0, 6279,
+    0,    0,    0,  768,    0,    0,    0,    0,    0,    0,
+    0, 6620,    0,    0,    0,    0,    0, 6352,  342,    0,
+    0,    0,    0,    0,    0, 6425,    0,    0,
+};
+#if YYBTYACC
+static const YYINT yycindex[] = {                         0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,
+};
 #endif
-
-/* Suppress an incorrect diagnostic about yylval being uninitialized.  */
-#if defined __GNUC__ && ! defined __ICC && 406 <= __GNUC__ * 100 + __GNUC_MINOR__
-# if __GNUC__ * 100 + __GNUC_MINOR__ < 407
-#  define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN                           \
-    _Pragma ("GCC diagnostic push")                                     \
-    _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")
-# else
-#  define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN                           \
-    _Pragma ("GCC diagnostic push")                                     \
-    _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")              \
-    _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"")
-# endif
-# define YY_IGNORE_MAYBE_UNINITIALIZED_END      \
-    _Pragma ("GCC diagnostic pop")
-#else
-# define YY_INITIAL_VALUE(Value) Value
+static const YYINT yygindex[] = {                         0,
+    0, 4594,  391, -175,    0,  -11,    0, 4313,  -10,  204,
+  293,    0,  -65, -166, -277, 1227,  -28, 4033,  891,    0,
+    0,    0,    0,    0,    0,    0,  -85,    0,  349,    7,
+    0, -163,  429,  -87, -106, -133, -104,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,
+};
+#define YYTABLESIZE 9552
+static const YYINT yytable[] = {                         98,
+  176,   98,  186,    3,   97,   95,   97,   96,  105,   94,
+  106,   94,  180,   48,  159,  266,   51,   52,  104,    9,
+  137,  180,  135,  136,   75,  190,  105,  246,  193,    3,
+  100,  196,  197,  258,  187,  199,  104,  176,  201,  220,
+  176,  176,  176,  176,  176,  176,  102,  176,  101,  103,
+   99,  137,  220,  322,  150,  152,   12,   59,  176,  176,
+  351,  269,   46,  176,  102,   46,   34,  217,   99,  242,
+  100,   56,  182,  101,   47,   61,  263,   47,   62,   15,
+  243,  363,   64,  104,  105,  288,  140,  289,  100,  137,
+  146,  101,   65,  176,  185,  104,  105,   60,   59,  180,
+  321,   59,  208,   66,   59,  264,  245,  311,   48,   12,
+   34,   15,  250,   34,   46,   59,   59,  104,  105,  327,
+   24,  214,   26,  176,  176,   34,   47,  146,   67,   70,
+  106,  146,  146,  146,  146,  146,  225,  146,   60,  137,
+  231,   60,  232,  137,   60,  137,   71,  133,  146,  146,
+   59,  134,   24,  146,   26,   60,   60,  142,  274,  147,
+  340,  137,  263,  278,  280,  263,  263,  263,  263,  154,
+   99,  246,  263,  267,  294,   15,  268,  137,  316,  323,
+   59,  137,  343,  146,  168,  137,  157,  358,  179,   34,
+   60,  264,  246,  297,  264,  264,  264,  264,  180,  366,
+    1,  264,  180,   78,  194,  180,   78,    2,  287,   79,
+  263,  195,   79,  146,  146,  338,   24,   25,   26,   51,
+   60,  168,   51,    8,  168,  168,  168,  168,  168,  168,
+  105,  168,  285,    2,  180,   38,   51,   51,  179,  264,
+  104,   51,  168,  168,  200,  359,  284,  168,  214,  224,
+  214,  335,  214,  214,  214,  320,   53,  179,  214,   53,
+  206,  176,  176,  176,  180,  239,  227,  176,  102,  222,
+  244,  252,   99,   53,   53,  364,  137,  168,   53,   82,
+  176,  176,  176,  176,  176,  176,  176,  176,  176,  176,
+  176,  176,  100,  176,  286,  101,  313,   82,  220,  176,
+  176,  176,   51,  176,  347,  176,  293,  168,  168,   99,
+   57,   99,  309,   33,  176,   34,  333,  214,   59,   59,
+   59,  315,  274,  176,  325,   15,  326,   34,   34,   34,
+  341,  176,  176,  176,  176,  176,  176,  349,  176,   53,
+  176,  176,   68,  355,  176,   15,   83,  176,  176,  176,
+  176,  146,  146,  146,  356,   32,   59,  146,   60,   60,
+   60,   33,   82,   30,   83,   34,   24,   25,   26,   42,
+  146,  146,  146,  146,  146,  146,  146,  146,  146,  146,
+  146,  146,   30,  146,  240,   38,   24,   25,   26,  146,
+  146,  146,  102,  146,  183,  146,   60,    0,    0,    0,
+    0,    0,    0,    0,  146,   38,    0,   13,  143,    0,
+   33,    0,   34,  146,   14,    0,    0,    0,    0,    0,
+    0,  146,  146,  146,  146,  146,  146,    0,  146,   83,
+  146,  146,    0,    0,  146,    0,    0,  146,  146,  146,
+  146,   51,    0,   84,    0,  168,  168,  168,    0,    0,
+    0,  168,    0,    0,    0,    0,    0,    0,   51,   51,
+   51,   84,    0,   51,  168,  168,  168,  168,  168,  168,
+  168,  168,  168,  168,  168,  168,    0,  168,   53,    0,
+    0,  139,  141,  168,  168,  168,    0,  168,    0,  168,
+    0,    0,    0,    0,    0,   53,   53,   53,  168,  156,
+   53,   82,    0,    0,    0,    0,    0,  168,    0,    0,
+    0,    0,    0,    0,    0,  168,  168,  168,  168,  168,
+   82,    0,  168,   82,  168,  168,   84,    0,  168,    0,
+    0,  168,  168,  168,  168,    0,  156,  259,    0,  156,
+  156,  156,  156,  156,  156,    0,  156,    0,    0,    0,
+   81,    0,    0,   53,    0,    0,    0,  156,  156,  260,
+   15,   16,  156,   17,    0,    0,    0,    0,   83,    0,
+   19,   20,    0,   21,    0,   22,  229,  230,    0,   48,
+    0,    0,   48,  234,  235,    0,    0,   83,    0,  142,
+   83,    0,  156,   23,    0,    0,   48,   48,    0,    0,
+    0,   24,   25,   26,   27,   28,   29,    0,   30,    0,
+   31,   32,    0,    0,   58,    0,    0,    0,   36,   37,
+   38,    0,  156,  156,    0,    0,  142,    0,    0,  142,
+  142,  142,  142,  142,  142,    0,  142,    0,    0,  265,
+    0,    0,    0,    0,  270,  271,    0,  142,  142,  296,
+    0,  299,  142,  300,  301,  302,  276,   15,   16,  306,
+   17,    0,   48,    0,    0,   84,    0,   19,   20,    0,
+   21,    0,   22,    0,    0,   50,    0,    0,   50,    0,
+    0,    0,  142,  141,   84,    0,  141,   84,    0,    0,
+   23,    0,   50,   50,    0,    0,    0,   50,   24,   25,
+   26,   27,   28,   29,    0,   30,    0,   31,   32,  317,
+  319,   35,  142,  142,    0,   36,   37,   38,  344,    0,
+  141,    0,    0,  141,  141,  141,  141,  141,  141,    0,
+  141,    0,    0,    0,    0,  330,  332,    0,    0,    0,
+    0,  141,  141,    0,    0,    0,  141,    0,    0,    0,
+    0,    0,    0,    0,    0,  141,    0,    0,   50,    0,
+  156,  156,  156,    0,    0,    0,  156,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,  141,    0,    0,  156,
+  156,  156,  156,  156,  156,  156,    0,  156,  156,  156,
+  156,    0,  156,    0,    0,    0,    0,    0,  156,  156,
+  156,   48,  156,    0,  156,    0,  141,  141,   49,    0,
+    0,   49,    0,  156,    0,    0,    0,    0,    0,    0,
+   48,    0,  156,   48,    0,   49,   49,    0,    0,    0,
+  156,  156,  156,  156,  156,  156,    0,  156,    0,  156,
+  156,    0,    0,  156,    0,    0,  156,  156,  156,  156,
+  142,  142,  142,    0,    0,   61,  142,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,  142,
+  142,  142,  142,  142,  142,  142,  142,  142,  142,  142,
+  142,    0,  142,    0,    0,    0,    0,    0,  142,  142,
+  142,   49,  142,    0,  142,    0,   61,   50,    0,   61,
+    0,    0,   61,  142,    0,   57,    0,    0,   33,    0,
+   34,    0,  142,   61,   61,   50,   50,    0,   61,   50,
+  142,  142,  142,  142,  142,  142,    0,  142,    0,  142,
+  142,    0,    0,  142,    0,    0,    0,  142,  142,  142,
+    0,    0,    0,    0,  141,  141,  141,    0,   61,    0,
+  141,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,  141,  141,  141,  141,  141,  141,  141,
+  141,  141,  141,  141,  141,    0,  141,    0,   61,  166,
+    0,    0,  141,  141,  141,    0,  141,    0,  141,    0,
+    0,    0,    0,    0,    0,    0,    0,  141,  143,    0,
+    0,    0,  191,    0,    0,    0,  141,    0,    0,    0,
+    0,    0,    0,    0,  141,  141,  141,  141,  141,  141,
+    0,  141,    0,  141,  141,    0,    0,  141,    0,    0,
+   49,  141,  141,  141,    0,  143,    0,    0,  143,  143,
+  143,  143,  143,  143,    0,  143,   70,    0,    0,   49,
+    0,   80,   49,    0,   80,    0,  143,  143,    0,    0,
+    0,  143,    0,    0,    0,    0,    0,    0,    0,   80,
+    0,    0,    0,    0,   81,    0,    0,   81,    0,    0,
+    0,    0,    0,    0,  248,    0,    0,   70,  138,    0,
+   70,  143,   81,   70,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,   70,   70,    0,    0,    0,   70,
+    0,    0,  272,    0,    0,    0,   61,   61,   61,    0,
+    0,  143,  143,    0,  281,  138,    0,    0,  138,  138,
+  138,  138,  138,  138,   80,  138,   61,    0,    0,   70,
+    0,    0,    0,    0,    0,    0,  138,  138,    0,    0,
+  298,  138,    0,    0,   61,   15,   16,   81,   17,    0,
+    0,    0,    0,    0,    0,   19,   20,    0,   21,   70,
+   22,    0,    0,    0,    0,    0,    0,  324,    0,  172,
+    0,  138,  137,    0,    0,    0,    0,    0,   23,    0,
+    0,    0,    0,    0,    0,    0,   24,   25,   26,   27,
+   28,   29,    0,   30,    0,   31,   32,    0,    0,   58,
+    0,  138,  138,   36,   37,   38,  342,    0,    0,  137,
+    0,    0,  137,  137,  137,  137,  137,  137,    0,  137,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+  137,  137,    0,    0,    0,  137,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,  143,
+  143,  143,    0,    0,    0,  143,    0,    0,    0,    0,
+    0,    0,    0,   80,    0,  137,    0,    0,  143,  143,
+  143,  143,  143,  143,  143,  143,  143,  143,  143,  143,
+    0,  143,   80,    0,    0,   80,   81,  143,  143,  143,
+    0,  143,    0,  143,    0,  137,  137,   70,   70,   70,
+    0,    0,  143,    0,    0,   81,    0,    0,   81,    0,
+    0,  143,    0,    0,    0,    0,   70,   70,    0,  143,
+  143,  143,  143,  143,  143,    0,  143,    0,  143,  143,
+    0,    0,  143,    0,    0,   70,  143,  143,  143,  138,
+  138,  138,  203,    0,  204,  138,    0,    0,    0,    0,
+    0,  203,  203,    0,    0,    0,    0,    0,  138,  138,
+  138,  138,  138,  138,  138,  138,  138,  138,  138,  138,
+    0,  138,    0,    0,   70,    0,    0,  138,  138,  138,
+    0,  138,    0,  138,    0,    0,    0,    0,    0,    0,
+    0,    0,  138,    0,   57,    0,    0,   33,  203,   34,
+    0,  138,    0,    0,    0,    0,    0,    0,    0,  138,
+  138,  138,  138,  138,  138,    0,  138,    0,  138,  138,
+    0,  254,  138,  255,  203,    0,  138,  138,  138,    0,
+    0,    0,    0,  137,  137,  137,    0,    0,    0,  137,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,  137,  137,  137,  137,  137,  137,  137,  137,
+  137,  137,  137,  137,    0,  137,    0,    0,    0,  291,
+    0,  137,  137,  137,    0,  137,    0,  137,    0,    0,
+    0,    0,    0,    0,    0,    0,  137,  139,    0,    0,
+    0,    0,    0,    0,    0,  137,    0,    0,    0,    0,
+    0,    0,    0,  137,  137,  137,  137,  137,  137,    0,
+  137,    0,  137,  137,    0,    0,  137,    0,    0,    0,
+  137,  137,  137,    0,  139,    0,    0,  139,  139,  139,
+  139,  139,  139,    0,  139,   63,  203,    0,    0,    0,
+    0,    0,    0,    0,    0,  139,  139,    0,    0,    0,
+  139,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,  203,    0,    0,    0,    0,    0,  360,
+    0,    0,    0,    0,    0,    0,   63,  140,  365,   63,
+  139,    0,   63,  368,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,   63,   63,    0,    0,    0,   63,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+  139,  139,    0,    0,  140,    0,    0,  140,  140,  140,
+  140,  140,  140,    0,  140,    0,    0,    0,   63,    0,
+    0,    0,    0,    0,    0,  140,  140,    0,    0,    0,
+  140,    0,    0,    0,   15,   16,    0,   17,    0,    0,
+    0,    0,    0,    0,   19,   20,    0,   21,   63,   22,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+  140,  175,    0,    0,    0,    0,    0,   23,    0,    0,
+    0,    0,    0,    0,    0,   24,   25,   26,   27,   28,
+   29,    0,   30,    0,   31,   32,    0,    0,   58,    0,
+  140,  140,   36,   37,   38,    0,    0,    0,  175,    0,
+    0,  175,  175,  175,  175,  175,  175,    0,  175,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,  175,
+  175,    0,    0,    0,  175,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,  139,  139,
+  139,    0,    0,    0,  139,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,  175,    0,    0,  139,  139,  139,
+  139,  139,  139,  139,  139,  139,  139,  139,  139,    0,
+  139,    0,    0,    0,    0,    0,  139,  139,  139,    0,
+  139,    0,  139,    0,  175,  175,   63,   63,   63,    0,
+   13,  139,    0,   33,    0,   34,    0,   14,    0,    0,
+  139,    0,    0,    0,    0,   63,   63,    0,  139,  139,
+  139,  139,  139,  139,    0,  139,    0,  139,  139,    0,
+    0,  139,    0,    0,   63,  139,  139,  139,  140,  140,
+  140,    0,    0,    0,  140,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,  140,  140,  140,
+  140,  140,  140,  140,  140,  140,  140,  140,  140,    0,
+  140,    0,    0,   63,    0,    0,  140,  140,  140,    0,
+  140,    0,  140,    0,    0,    0,    0,    0,    0,    0,
+    0,  140,    0,   57,  138,    0,   33,  137,   34,    0,
+  140,    0,    0,    0,    0,    0,    0,    0,  140,  140,
+  140,  140,  140,  140,    0,  140,   90,  140,  140,    0,
+    0,  140,    0,    0,    0,  140,  140,  140,    0,    0,
+    0,    0,  175,  175,  175,    0,    0,    0,  175,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,  175,  175,  175,  175,  175,  175,  175,  175,  175,
+  175,  175,  175,    0,  175,    0,    0,    0,    0,    0,
+  175,  175,  175,    0,  175,    0,  175,   79,    0,    0,
+    0,    0,  175,    0,    0,  175,    0,    0,    0,    0,
+    0,    0,    0,    0,  175,    0,    0,    0,    0,    0,
+    0,    0,  175,  175,  175,  175,  175,  175,    0,  175,
+    0,  175,  175,    0,    0,  175,  107,    0,  175,  175,
+    0,  175,  175,  175,  175,  175,  175,  175,    0,  175,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+  175,  175,    0,    0,    0,  175,    0,    0,    0,    0,
+   15,   16,    0,   17,    0,  112,    0,    0,    0,    0,
+   19,   20,    0,   21,    0,   22,    0,    0,    0,    0,
+    0,    0,  135,    0,    0,  175,    0,    0,    0,    0,
+    0,  119,  120,   23,    0,    0,    0,    0,    0,    0,
+    0,   24,   25,   26,   27,   28,   29,    0,   30,    0,
+   31,   32,    0,    0,   35,  175,  175,    0,   36,   37,
+   38,    0,  135,  135,    0,  135,  135,  135,    0,    0,
+   80,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+  135,  135,    0,   81,   82,  135,   83,   84,   85,   86,
+   87,   88,   89,   15,   16,    0,   17,    0,    0,    0,
+    0,    0,    0,   19,   20,    0,   21,    0,   22,    0,
+    0,    0,    0,    0,    0,  135,  136,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,   23,    0,    0,    0,
+    0,    0,    0,    0,   24,   25,   26,   27,   28,   29,
+    0,   30,    0,   31,   32,  135,  135,   58,    0,    0,
+    0,   36,   37,   38,    0,    0,  136,  136,    0,  136,
+  136,  136,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,  136,  136,    0,    0,    0,  136,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,  175,  175,  175,    0,    0,    0,  175,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,  136,
+    0,    0,  175,  175,    0,  175,  175,  175,  175,  175,
+  175,  175,  175,  175,    0,  175,    0,    0,    0,    0,
+    0,  175,  175,  175,    0,  175,    0,  175,    0,  136,
+  136,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,  175,    0,    0,    0,    0,
+    0,    0,    0,  175,  175,  175,  175,  175,  175,    0,
+  175,    0,  175,  175,    0,    0,  175,    0,    0,  175,
+    0,    0,  175,  135,  135,  135,    0,    0,  149,  135,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,  135,  135,  135,  135,  135,  135,  135,  135,
+  135,  135,  135,  135,    0,  135,    0,    0,    0,    0,
+    0,  135,  135,  135,    0,  135,    0,  135,  149,  149,
+    0,    0,  149,    0,    0,    0,  135,    0,    0,    0,
+    0,    0,    0,    0,    0,  135,  149,  149,    0,    0,
+    0,  149,    0,  135,  135,  135,  135,  135,  135,    0,
+  135,    0,  135,  135,    0,    0,  135,    0,    0,    0,
+  135,  135,  135,    0,    0,    0,    0,  136,  136,  136,
+    0,  149,  155,  136,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,  136,  136,  136,  136,
+  136,  136,  136,  136,  136,  136,  136,  136,    0,  136,
+    0,  149,  149,    0,    0,  136,  136,  136,    0,  136,
+    0,  136,  155,  155,    0,    0,  155,    0,    0,   64,
+  136,    0,    0,    0,    0,    0,    0,    0,    0,  136,
+  155,  155,    0,    0,    0,  155,    0,  136,  136,  136,
+  136,  136,  136,    0,  136,    0,  136,  136,    0,    0,
+  136,    0,    0,    0,  136,  136,  136,    0,    0,    0,
+   64,    0,  154,   64,    0,  155,   64,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,   64,   64,    0,
+    0,    0,   64,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,  155,  155,    0,    0,    0,
+    0,    0,  154,  154,    0,    0,  154,    0,    0,    0,
+    0,    0,   64,    0,    0,    0,    0,    0,    0,    0,
+  154,  154,    0,    0,    0,  154,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,  149,
+  149,  149,   64,    0,    0,  149,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,  154,    0,    0,  149,  149,
+  149,  149,  149,  149,  149,  149,  149,  149,  149,  149,
+    0,  149,    0,    0,    0,    0,    0,  149,  149,  149,
+    0,  149,    0,  149,    0,  154,  154,    0,    0,    0,
+    0,    0,  149,    0,    0,    0,    0,    0,    0,    0,
+    0,  149,    0,    0,    0,    0,    0,    0,    0,  149,
+  149,  149,  149,  149,  149,    0,  149,    0,  149,  149,
+    0,    0,  149,    0,    0,    0,  149,  149,  149,    0,
+    0,    0,    0,  155,  155,  155,    0,    0,    0,  155,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,  155,  155,  155,  155,  155,  155,  155,  155,
+  155,  155,  155,  155,    0,  155,    0,    0,    0,    0,
+    0,  155,  155,  155,    0,  155,    0,  155,    0,    0,
+   64,   64,   64,    0,    0,    0,  155,    0,    0,    0,
+    0,    0,    0,    0,    0,  155,    0,    0,    0,   64,
+   64,    0,    0,  155,  155,  155,  155,  155,  155,    0,
+  155,    0,  155,  155,    0,    0,  155,    0,   64,    0,
+  155,  155,  155,  154,  154,  154,    0,    0,  134,  154,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,  154,  154,  154,  154,  154,  154,  154,  154,
+  154,  154,  154,  154,    0,  154,    0,   64,    0,    0,
+    0,  154,  154,  154,    0,  154,    0,  154,  134,  134,
+    0,    0,  134,    0,    0,    0,  154,    0,    0,    0,
+    0,    0,    0,    0,    0,  154,  134,  134,    0,    0,
+    0,  134,    0,  154,  154,  154,  154,  154,  154,    0,
+  154,    0,  154,  154,    0,    0,  154,    0,    0,    0,
+  154,  154,  154,    0,    0,    0,    0,    0,   77,    0,
+    0,  134,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,  134,  134,    0,    0,    0,    0,    0,   77,   77,
+    0,    0,   77,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,   77,   77,    0,    0,
+    0,   77,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,   77,   75,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,   77,   77,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,   75,   75,    0,    0,   75,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+   75,   75,    0,    0,    0,   75,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,  134,
+  134,  134,    0,    0,    0,  134,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,   75,    0,    0,  134,  134,
+  134,  134,  134,  134,  134,  134,  134,  134,  134,  134,
+    0,  134,    0,    0,    0,    0,    0,  134,  134,  134,
+    0,  134,    0,  134,    0,   75,   75,    0,    0,    0,
+   13,  151,  134,   33,    0,   34,    0,   14,    0,    0,
+    0,  134,    0,    0,    0,    0,    0,    0,    0,  134,
+  134,  134,  134,  134,  134,    0,  134,    0,  134,  134,
+    0,    0,  134,    0,    0,    0,  134,  134,  134,   77,
+   77,   77,    0,    0,   35,   77,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,   77,   77,
+    0,   77,   77,   77,   77,   77,   77,   77,   77,   77,
+    0,   77,    0,    0,    0,    0,    0,   77,   77,   77,
+    0,   77,    0,   77,   35,    0,    0,   35,    0,   35,
+    0,   35,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,   77,    0,   35,    0,    0,    0,    0,    0,   77,
+   77,   77,   77,   77,   77,    0,   77,    0,   77,   77,
+    0,    0,   77,    0,    0,    0,   77,   77,   77,    0,
+    0,    0,    0,   75,   75,   75,    0,    0,   37,   75,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,   75,   75,    0,   75,   75,   75,   75,   75,
+   75,   75,   75,   75,    0,   75,    0,    0,    0,    0,
+    0,   75,   75,   75,    0,   75,    0,   75,   37,    0,
+    0,   37,    0,   37,    0,   37,    0,    0,    0,    0,
+   28,    0,    0,    0,    0,   75,    0,   37,    0,    0,
+    0,    0,    0,   75,   75,   75,   75,   75,   75,    0,
+   75,    0,   75,   75,    0,    0,   75,    0,    0,    0,
+   75,   75,   75,    0,    0,    0,    0,    0,    0,    0,
+   28,    0,    0,   28,    0,   28,    0,   28,    0,    0,
+    0,    0,   29,    0,    0,    0,    0,    0,    0,    0,
+   15,   16,    0,   17,    0,    0,    0,    0,    0,    0,
+   19,   20,    0,   21,    0,   22,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,   29,   23,    0,   29,    0,   29,    0,   29,
+    0,   24,   25,   26,   27,   28,   29,    0,   30,    0,
+   31,   32,    0,    0,   35,   35,   35,   35,   36,   37,
+   38,    0,    0,   28,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,   35,   35,    0,   35,    0,    0,
+    0,    0,    0,   35,   35,   35,    0,   35,    0,   35,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,   29,    0,   35,    0,    0,
+    0,    0,    0,    0,    0,   35,   35,   35,   35,   35,
+   35,    0,   35,    0,   35,   35,    0,    0,   35,    0,
+    0,    0,   35,   35,   35,    0,    0,    0,    0,   37,
+   37,   37,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,   37,   37,
+    0,   37,    0,    0,    0,    0,    0,   37,   37,   37,
+    0,   37,    0,   37,    0,    0,    0,    0,    0,    0,
+    0,   28,   28,    0,    0,    0,    0,    0,    0,    0,
+    0,   37,    0,    0,    0,    0,    0,    0,    0,   37,
+   37,   37,   37,   37,   37,    0,   37,    0,   37,   37,
+   28,   28,   37,   28,    0,    0,   37,   37,   37,   28,
+   28,   28,    0,   28,    0,   28,    0,    0,    0,    0,
+    0,    0,    0,   29,   29,    0,    0,    0,    0,  157,
+    0,    0,    0,   28,    0,    0,    0,    0,    0,    0,
+    0,   28,   28,   28,   28,   28,   28,    0,   28,    0,
+   28,   28,   29,   29,   28,   29,    0,    0,   28,   28,
+   28,   29,   29,   29,    0,   29,  157,   29,    0,  157,
+  157,  157,  157,  157,  157,    0,  157,    0,    0,    0,
+    0,    0,    0,    0,    0,   29,    0,  157,  157,    0,
+    0,    0,  157,   29,   29,   29,   29,   29,   29,   74,
+   29,    0,   29,   29,    0,    0,   29,    0,    0,    0,
+   29,   29,   29,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,  157,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,   65,    0,    0,    0,    0,    0,    0,   74,
+   74,    0,   74,   74,   74,    0,   74,    0,    0,    0,
+    0,    0,  157,  157,    0,    0,    0,   74,   74,    0,
+    0,    0,   74,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,   65,    0,    0,   65,    0,    0,   65,
+    0,    0,    0,   66,    0,    0,    0,    0,    0,    0,
+   65,   65,   74,   67,    0,   65,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,   74,   74,   66,   65,   68,   66,    0,    0,
+   66,    0,    0,    0,   67,    0,    0,   67,    0,    0,
+   67,   66,   66,    0,    0,    0,   66,    0,    0,    0,
+    0,   67,   67,    0,    0,   65,   67,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,   68,    0,    0,
+   68,    0,    0,   68,    0,    0,   66,    0,    0,    0,
+    0,    0,    0,    0,   68,   68,   67,    0,    0,   68,
+  157,  157,  157,    0,    0,    0,  157,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,   66,    0,    0,  157,
+  157,  157,  157,  157,  157,  157,   67,  157,  157,   68,
+  157,    0,  157,    0,    0,    0,    0,    0,  157,  157,
+  157,    0,  157,    0,  157,    0,    0,    0,    0,    0,
+    0,    0,    0,  157,    0,    0,    0,    0,    0,   68,
+    0,    0,  157,    0,    0,    0,    0,    0,    0,    0,
+   74,   74,   74,  157,  157,  157,   74,  157,    0,  157,
+  157,    0,    0,  157,    0,    0,  157,  157,  157,   74,
+   74,    0,   74,   74,   74,   74,   74,   74,   74,    0,
+   74,    0,   74,   65,   65,   65,    0,    0,   74,   74,
+   74,    0,   74,    0,   74,    0,    0,    0,    0,    0,
+    0,    0,   65,   65,    0,    0,    0,    0,    0,    0,
+    0,    0,   74,    0,    0,    0,    0,    0,    0,    0,
+    0,   65,    0,   74,   74,   74,    0,   74,    0,   74,
+   74,    0,    0,   74,   66,   66,   66,   74,   74,    0,
+    0,    0,    0,    0,   67,   67,   67,    0,    0,   60,
+    0,    0,    0,   66,   66,    0,    0,    0,    0,    0,
+   65,    0,   69,   67,   67,   60,   60,   60,   76,   77,
+   60,   60,   66,    0,    0,    0,    0,   68,   68,   68,
+    0,    0,   67,    0,    0,   60,    0,    0,    0,    0,
+   60,    0,    0,    0,    0,    0,   68,   68,    0,    0,
+   60,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,   66,    0,    0,    0,   68,    0,    0,    0,    0,
+    0,   67,    0,    0,    0,    0,   60,   60,   60,   60,
+   60,   60,    0,    0,    0,    0,    0,    0,   27,   27,
+    0,   27,    0,   27,    0,   27,    0,    0,    0,    0,
+    0,    0,    0,    0,   68,   60,    0,   27,    0,    0,
+    0,    0,    0,    0,  215,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,   60,    0,   60,    0,
+   60,   60,    0,    0,    0,    0,   60,   60,   60,  236,
+   60,    0,   60,   60,   60,   60,   60,   60,    0,   60,
+    0,   60,    0,   60,   60,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,   60,    0,    0,    0,
+    0,   27,    0,   27,   60,    0,    0,    0,    0,    0,
+   60,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,   60,    0,    0,    0,    0,    0,   60,    0,
+    0,    0,    0,   60,    0,   60,    0,    0,   57,    0,
+    0,   33,    0,   34,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,   60,    0,   60,    0,    0,    0,    0,    0,    0,
+    0,  215,    0,  215,    0,  215,  215,  215,   60,   60,
+   60,  215,    0,    0,    0,   60,    0,    0,    0,   60,
+    0,   60,    0,    0,   60,   60,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,   60,   59,
+    0,   60,   60,   60,   60,    0,    0,    0,   60,   60,
+   60,    0,    0,    0,    0,   72,   73,   74,    0,    0,
+   78,   91,    0,    0,   27,    0,    0,    0,    0,    0,
+  215,    0,  345,    0,  346,   91,   60,    0,   60,    0,
+   74,   60,    0,    0,    0,    0,   60,    0,    0,    0,
+  153,    0,    0,    0,    0,    0,   60,    0,   27,   27,
+   27,   27,   27,   27,   27,   27,   27,    0,   27,   27,
+   27,   27,    0,   27,   27,   27,  173,  174,  175,  176,
+  177,  178,    0,    0,    0,    0,    0,    0,    0,   27,
+   27,   27,   27,    0,    0,    0,    0,    0,    0,   27,
+   27,   27,   27,   27,   27,   91,   27,   27,   27,   27,
+   27,    0,   27,    0,  213,    0,   27,   27,   27,    0,
+    0,    0,    0,    0,    0,    0,   91,    0,   91,    0,
+   91,   91,    0,    0,    0,    0,  233,   91,   91,    0,
+   91,    0,   91,   91,   91,   91,   91,   91,    0,   91,
+    0,   91,    0,   91,  238,  259,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,   91,    0,    0,    0,
+    0,    0,    0,    0,   91,    0,    0,  260,   15,   16,
+   91,   17,    0,    0,    0,    0,    0,    0,   19,   20,
+    0,   21,  262,   22,    0,    0,    0,    0,   91,    0,
+    0,    0,    0,   91,    0,   91,    0,    0,    0,    0,
+    0,   23,    0,    0,    0,    0,   62,    0,    0,   24,
+   25,   26,   27,   28,   29,    0,   30,    0,   31,   32,
+    0,   91,   58,   91,    0,    0,   36,   37,   38,    0,
+    0,  213,    0,  213,    0,  213,  213,  213,  303,  304,
+  305,  213,    0,    0,    0,   91,    0,   62,    0,   91,
+   62,   91,    0,   62,   91,   91,    0,    0,    0,    0,
+   39,    0,    0,    0,   62,   62,   53,    0,  262,   62,
+    0,  262,  262,  262,  262,    0,    0,    0,  262,   91,
+   91,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,   62,
+  213,    0,    0,    0,    0,    0,   91,    0,   91,  144,
+  146,   91,    0,    0,    0,    0,  262,  148,  149,  144,
+  144,    0,    0,  155,  156,    0,   91,    0,    0,   62,
+    0,    0,    0,  158,    0,    0,  160,  161,  162,  163,
+  164,  165,    0,  167,    0,  169,  171,    0,    0,    0,
+    0,    0,    0,    0,    0,   39,  184,    0,  176,  144,
+    0,  176,    0,  176,  176,    0,  176,  192,  176,    0,
+    0,    0,    0,    0,  198,    0,    0,    0,    0,    0,
+  176,    0,    0,    0,  176,    0,  216,    0,    0,    0,
+    0,    0,  221,    0,  223,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,   39,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,  176,    0,    0,  249,    0,
+    0,  175,    0,  251,  175,  175,  175,  175,  175,  175,
+    0,  175,   53,    0,    0,    0,    0,   62,   62,   62,
+    0,    0,  175,  175,    0,    0,    0,  175,    0,  273,
+    0,    0,  277,  279,    0,    0,   62,   62,  282,    0,
+  283,    0,    0,    0,    0,    0,    0,  144,    0,    0,
+    0,    0,    0,    0,    0,   62,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,   26,    0,    0,   26,    0,
+   26,    0,   26,  307,  308,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,   26,    0,    0,    0,  175,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,   53,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+  334,    0,  336,    0,    0,    0,  339,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,  176,    0,
+    0,    0,    0,    0,  354,    0,    0,    0,   26,    0,
+   26,  176,  176,    0,  176,  176,  176,  176,  176,  176,
+    0,  176,  176,    0,  176,    0,    0,    0,    0,    0,
+    0,  176,  176,    0,  176,    0,  176,  107,    0,    0,
+  107,    0,  107,    0,  107,  176,    0,    0,    0,    0,
+    0,    0,    0,    0,  176,    0,  107,    0,    0,    0,
+    0,    0,  176,  176,  176,  176,  176,  176,    0,  176,
+    0,  176,  176,    0,    0,  176,    0,    0,  176,  176,
+  176,  176,    0,    0,    0,    0,    0,  175,    0,    0,
+    0,  175,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,  175,  175,  175,    0,    0,  175,
+    0,    0,    0,  175,  175,  175,    0,  175,    0,    0,
+  107,    0,  107,    0,  175,  175,    0,  175,    0,  175,
+    0,    0,   13,    0,    0,   33,    0,   34,    0,   14,
+    0,   26,    0,    0,    0,    0,    0,  175,    0,    0,
+    0,  109,    0,    0,    0,  175,  175,  175,  175,  175,
+  175,    0,  175,    0,  175,  175,    0,    0,  175,    0,
+    0,  175,    0,    0,  175,   26,   26,   26,   26,   26,
+   26,   26,   26,   26,    0,   26,   26,   26,   26,    0,
+   26,   26,   26,  119,    0,    0,  119,    0,  119,    0,
+  119,    0,    0,    0,    0,    0,   26,   26,   26,   26,
+    0,    0,  119,    0,    0,   12,   26,   26,   26,   26,
+   26,   26,    0,   26,   26,   26,   26,   26,    0,   26,
+    0,    0,    0,   26,   26,   26,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,  107,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,   13,    0,    0,   33,
+    0,   34,    0,   14,    0,    0,  119,    0,  119,    0,
+    0,    0,    0,    0,    0,  109,    0,  107,  107,  107,
+  107,  107,  107,  107,  107,  107,    0,  107,  107,  107,
+  107,    0,  107,  107,  107,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,  107,  107,
+  107,  107,    0,    0,    0,    0,    0,    0,  107,  107,
+  107,  107,  107,  107,    0,  107,  107,  107,  107,  107,
+    0,  107,    0,    0,    0,  107,  107,  107,  107,   12,
+    0,  202,    0,    0,    0,  108,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,   15,   16,  110,   17,  111,  112,  113,  114,
+  115,    0,   19,   20,  116,   21,    0,   22,  117,  118,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,  119,
+    0,    0,    0,  119,  120,   23,    0,    0,    0,    0,
+    0,    0,    0,   24,   25,   26,   27,   28,   29,    0,
+   30,  121,   31,   32,  122,    0,   35,    0,    0,    0,
+   36,   37,   38,  119,  119,  119,  119,  119,  119,  119,
+  119,  119,    0,  119,  119,  119,  119,    0,  119,  119,
+  119,   13,    0,    0,   33,    0,   34,    0,   14,    0,
+    0,    0,    0,    0,  119,  119,  119,  119,    0,    0,
+  109,    0,  107,    0,  119,  119,  119,  119,  119,  119,
+    0,  119,  119,  119,  119,  119,    0,  119,    0,    0,
+    0,  119,  119,  119,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,   15,   16,  110,   17,
+  111,  112,  113,  114,  115,    0,   19,   20,  116,   21,
+    0,   22,  117,  118,   13,    0,    0,   33,    0,   34,
+    0,   14,    0,    0,   12,    0,  218,  119,  120,   23,
+    0,    0,    0,  109,    0,    0,    0,   24,   25,   26,
+   27,   28,   29,    0,   30,  121,   31,   32,  122,    0,
+   35,    0,    0,    0,   36,   37,   38,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,   13,    0,    0,   33,    0,
+   34,    0,   14,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,  109,    0,    0,   12,    0,  219,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,   13,    0,    0,   33,
+    0,   34,    0,   14,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,  109,    0,  107,   12,    0,
+  241,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,   15,   16,  110,   17,  111,  112,  113,  114,  115,
+    0,   19,   20,  116,   21,    0,   22,  117,  118,    0,
+   13,    0,    0,   33,    0,   34,    0,   14,    0,   12,
+    0,  256,  119,  120,   23,    0,    0,    0,    0,  109,
+  107,    0,   24,   25,   26,   27,   28,   29,    0,   30,
+  121,   31,   32,  122,    0,   35,    0,    0,    0,   36,
+   37,   38,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,   15,   16,  110,   17,  111,  112,
+  113,  114,  115,    0,   19,   20,  116,   21,    0,   22,
+  117,  118,    0,    0,    0,    0,    0,   13,    0,    0,
+   33,  107,   34,   12,   14,  119,  120,   23,    0,    0,
+    0,    0,    0,    0,    0,   24,   25,   26,   27,   28,
+   29,    0,   30,  121,   31,   32,  122,    0,   35,    0,
+    0,    0,   36,   37,   38,   15,   16,  110,   17,  111,
+  112,  113,  114,  115,    0,   19,   20,  116,   21,    0,
+   22,  117,  118,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,  107,    0,    0,    0,  119,  120,   23,    0,
+    0,    0,    0,    0,    0,    0,   24,   25,   26,   27,
+   28,   29,    0,   30,  121,   31,   32,  122,    0,   35,
+    0,    0,    0,   36,   37,   38,   15,   16,  110,   17,
+  111,  112,  113,  114,  115,    0,   19,   20,  116,   21,
+    0,   22,  117,  118,   13,    0,    0,   33,    0,   34,
+    0,   14,    0,    0,    0,    0,    0,  119,  120,   23,
+    0,    0,    0,  109,    0,    0,  107,   24,   25,   26,
+   27,   28,   29,  290,   30,  121,   31,   32,  122,    0,
+   35,    0,    0,    0,   36,   37,   38,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+   15,   16,  110,   17,  111,  112,  113,  114,  115,    0,
+   19,   20,  116,   21,    0,   22,  117,  118,   13,    0,
+    0,   33,    0,   34,    0,   14,    0,   12,    0,  337,
+    0,  119,  120,   23,    0,    0,    0,  109,    0,    0,
+    0,   24,   25,   26,   27,   28,   29,    0,   30,  121,
+   31,   32,  122,    0,   35,    0,    0,    0,   36,   37,
+   38,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,   15,   16,  118,
+   17,    0,  118,    0,  118,    0,  118,   19,   20,    0,
+   21,    0,   22,    0,    0,    0,    0,    0,  118,    0,
+    0,   12,    0,  357,    0,    0,    0,    0,    0,    0,
+   23,    0,    0,    0,    0,    0,    0,    0,   24,   25,
+   26,   27,   28,   29,    0,   30,    0,   31,   32,    0,
+    0,   35,    0,    0,    0,   36,   37,   38,    0,    0,
+   13,    0,    0,   33,    0,   34,    0,   14,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,  109,
+  107,    0,  118,    0,  118,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,   15,   16,  110,   17,  111,  112,
+  113,  114,  115,    0,   19,   20,  116,   21,    0,   22,
+  117,  118,    0,  111,    0,    0,  111,    0,  111,    0,
+  111,    0,    0,   12,    0,  119,  120,   23,    0,    0,
+    0,    0,  111,    0,  107,   24,   25,   26,   27,   28,
+   29,    0,   30,  121,   31,   32,  122,    0,   35,    0,
+    0,    0,   36,   37,   38,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,   15,   16,
+  110,   17,  111,  112,  113,  114,  115,    0,   19,   20,
+  116,   21,    0,   22,  117,  118,   21,    0,    0,   21,
+    0,   21,    0,   21,    0,  118,  111,    0,    0,  119,
+  120,   23,    0,    0,    0,   21,    0,    0,    0,   24,
+   25,   26,   27,   28,   29,    0,   30,  121,   31,   32,
+  122,    0,   35,    0,    0,    0,   36,   37,   38,  118,
+  118,  118,  118,  118,  118,  118,  118,  118,    0,  118,
+  118,  118,  118,    0,  118,  118,  118,  186,    0,    0,
+  186,    0,  186,    0,  186,    0,  107,    0,    0,    0,
+  118,  118,  118,    0,    0,    0,  186,    0,    0,   21,
+  118,  118,  118,  118,  118,  118,    0,  118,  118,  118,
+  118,  118,    0,  118,    0,    0,    0,  118,  118,  118,
+   15,   16,  110,   17,  111,  112,  113,  114,  115,    0,
+   19,   20,  116,   21,    0,   22,  117,  118,   17,    0,
+    0,   17,    0,   17,    0,   17,    0,    0,    0,    0,
+    0,  119,  120,   23,    0,    0,    0,   17,    0,  111,
+  186,   24,   25,   26,   27,   28,   29,    0,   30,  121,
+   31,   32,  122,    0,   35,    0,    0,    0,   36,   37,
+   38,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,  111,  111,  111,  111,  111,  111,  111,
+  111,  111,    0,  111,  111,  111,  111,    0,  111,  111,
+  111,   15,    0,    0,   15,    0,   15,    0,   15,    0,
+    0,   17,    0,    0,  111,  111,  111,    0,    0,    0,
+   15,    0,   21,    0,  111,  111,  111,  111,  111,  111,
+    0,  111,  111,  111,  111,  111,    0,  111,    0,    0,
+    0,  111,  111,  111,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,   21,   21,   21,   21,
+   21,   21,   21,   21,   21,    0,   21,   21,   21,   21,
+    0,   21,   21,   21,   13,    0,    0,   13,    0,   13,
+    0,   13,    0,  186,   15,    0,    0,   21,   21,   21,
+    0,    0,    0,   13,    0,    0,    0,   21,   21,   21,
+   21,   21,   21,    0,   21,   21,   21,   21,   21,    0,
+   21,    0,    0,    0,   21,   21,   21,  186,  186,  186,
+  186,  186,  186,  186,  186,  186,    0,  186,  186,  186,
+  186,    0,  186,  186,  186,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,   17,    0,    0,    0,  186,  186,
+  186,    0,    0,    0,    0,    0,    0,   13,  186,  186,
+  186,  186,  186,  186,    0,  186,  186,  186,  186,  186,
+    0,  186,    0,    0,    0,  186,  186,  186,   17,   17,
+   17,   17,   17,   17,   17,   17,   17,    0,   17,   17,
+   17,   17,    0,   17,   17,   17,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,   17,
+   17,   17,    0,    0,    0,    0,    0,   15,    0,   17,
+   17,   17,   17,   17,   17,    0,   17,   17,   17,   17,
+   17,    0,   17,    0,    0,    0,   17,   17,   17,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,   15,   15,   15,   15,   15,   15,   15,   15,   15,
+    0,   15,   15,   15,   15,    0,   15,   15,   15,   26,
+   26,    0,   26,    0,   26,    0,   26,    0,    0,    0,
+    0,    0,   15,   15,   15,    0,    0,    0,    0,    0,
+   13,    0,   15,   15,   15,   15,   15,   15,    0,   15,
+   15,   15,   15,   15,    0,   15,    0,    0,    0,   15,
+   15,   15,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,   13,   13,   13,   13,   13,   13,
+   13,   13,   13,    0,   13,   13,   13,   13,    0,   13,
+   13,   13,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,   13,   13,   13,   57,    0,
+    0,   33,    0,   34,    0,   13,   13,   13,   13,   13,
+   13,    0,   13,   13,   13,   13,   13,  187,   13,    0,
+    0,   90,   13,   13,   13,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+   57,  318,    0,   33,  137,   34,    0,    0,    0,    0,
+    0,    0,   79,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,   90,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,   26,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,   57,  329,    0,   33,  137,   34,    0,    0,
+    0,    0,    0,    0,   79,    0,    0,    0,    0,   26,
+   26,    0,   26,    0,   26,   90,    0,    0,    0,   26,
+   26,    0,   26,    0,   26,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+   26,   26,   26,    0,    0,    0,    0,    0,    0,    0,
+   26,   26,   26,   26,   26,   26,    0,   26,    0,   26,
+   26,    0,    0,   26,    0,    0,    0,   26,   26,   26,
+    0,  179,    0,    0,    0,   80,   79,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,   81,   82,
+    0,   83,   84,   85,   86,   87,   88,   89,   15,   16,
+    0,   17,   57,  331,    0,   33,  137,   34,   19,   20,
+    0,   21,    0,   22,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,   90,    0,    0,    0,    0,
+    0,   23,    0,    0,    0,    0,    0,    0,    0,   24,
+   25,   26,   27,   28,   29,    0,   30,   80,   31,   32,
+    0,    0,   58,    0,    0,    0,   36,   37,   38,    0,
+   81,   82,    0,   83,   84,   85,   86,   87,   88,   89,
+   15,   16,    0,   17,   57,  138,    0,   33,    0,   34,
+   19,   20,    0,   21,    0,   22,   79,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,   90,    0,    0,
+    0,    0,    0,   23,    0,    0,    0,    0,    0,    0,
+    0,   24,   25,   26,   27,   28,   29,    0,   30,   80,
+   31,   32,    0,    0,   58,    0,    0,    0,   36,   37,
+   38,    0,   81,   82,    0,   83,   84,   85,   86,   87,
+   88,   89,   15,   16,    0,   17,   57,    0,    0,   33,
+  137,   34,   19,   20,    0,   21,    0,   22,   79,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,   90,
+    0,    0,    0,    0,    0,   23,    0,    0,    0,    0,
+    0,    0,    0,   24,   25,   26,   27,   28,   29,    0,
+   30,    0,   31,   32,    0,    0,   58,    0,    0,    0,
+   36,   37,   38,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,   57,    0,    0,   33,    0,   34,    0,    0,   80,
+   79,    0,    0,    0,    0,    0,    0,    0,    0,  237,
+    0,    0,   81,   82,   90,   83,   84,   85,   86,   87,
+   88,   89,   15,   16,    0,   17,    0,    0,    0,    0,
+    0,    0,   19,   20,    0,   21,    0,   22,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,   23,    0,    0,    0,    0,
+    0,    0,    0,   24,   25,   26,   27,   28,   29,    0,
+   30,   80,   31,   32,    0,   79,   58,    0,    0,    0,
+   36,   37,   38,    0,   81,   82,    0,   83,   84,   85,
+   86,   87,   88,   89,   15,   16,    0,   17,   57,  274,
+    0,   33,    0,   34,   19,   20,    0,   21,    0,   22,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,   90,    0,    0,    0,    0,    0,   23,    0,    0,
+    0,    0,    0,    0,    0,   24,   25,   26,   27,   28,
+   29,    0,   30,   80,   31,   32,    0,    0,   58,    0,
+    0,    0,   36,   37,   38,    0,   81,   82,    0,   83,
+   84,   85,   86,   87,   88,   89,   15,   16,    0,   17,
+    0,    0,    0,    0,    0,    0,   19,   20,    0,   21,
+    0,   22,   79,   57,  312,    0,   33,    0,   34,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,   23,
+    0,    0,    0,    0,    0,    0,   90,   24,   25,   26,
+   27,   28,   29,    0,   30,    0,   31,   32,   80,    0,
+   58,    0,    0,    0,   36,   37,   38,    0,    0,    0,
+    0,   81,   82,    0,   83,   84,   85,   86,   87,   88,
+   89,   15,   16,    0,   17,    0,    0,    0,    0,    0,
+    0,   19,   20,    0,   21,    0,   22,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,   79,    0,    0,
+   57,  314,    0,   33,   23,   34,    0,    0,    0,    0,
+    0,    0,   24,   25,   26,   27,   28,   29,    0,   30,
+    0,   31,   32,   90,    0,   58,    0,    0,    0,   36,
+   37,   38,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,   80,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,   81,   82,
+    0,   83,   84,   85,   86,   87,   88,   89,   15,   16,
+    0,   17,    0,    0,   79,    0,    0,    0,   19,   20,
+    0,   21,    0,   22,    0,   57,  348,    0,   33,    0,
+   34,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,   23,    0,    0,    0,    0,    0,    0,   90,   24,
+   25,   26,   27,   28,   29,    0,   30,    0,   31,   32,
+    0,    0,   58,    0,    0,    0,   36,   37,   38,    0,
+   80,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,   81,   82,    0,   83,   84,   85,   86,
+   87,   88,   89,   15,   16,    0,   17,    0,    0,    0,
+    0,    0,    0,   19,   20,    0,   21,    0,   22,   79,
+   57,  350,    0,   33,    0,   34,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,   23,    0,    0,    0,
+    0,    0,    0,   90,   24,   25,   26,   27,   28,   29,
+    0,   30,    0,   31,   32,    0,    0,   58,    0,    0,
+    0,   36,   37,   38,    0,    0,    0,   80,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+   81,   82,    0,   83,   84,   85,   86,   87,   88,   89,
+   15,   16,    0,   17,    0,    0,    0,    0,    0,    0,
+   19,   20,    0,   21,   79,   22,   57,    0,    0,   33,
+    0,   34,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,   23,    0,  352,    0,    0,    0,   90,
+    0,   24,   25,   26,   27,   28,   29,    0,   30,    0,
+   31,   32,    0,    0,   58,    0,    0,    0,   36,   37,
+   38,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,   80,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,   81,   82,    0,   83,   84,
+   85,   86,   87,   88,   89,   15,   16,    0,   17,    0,
+   79,    0,    0,    0,    0,   19,   20,    0,   21,    0,
+   22,    0,   57,  361,    0,   33,    0,   34,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,   23,    0,
+    0,    0,    0,    0,    0,   90,   24,   25,   26,   27,
+   28,   29,    0,   30,    0,   31,   32,    0,    0,   58,
+    0,    0,    0,   36,   37,   38,    0,   80,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+   81,   82,    0,   83,   84,   85,   86,   87,   88,   89,
+   15,   16,    0,   17,   57,    0,    0,   33,    0,   34,
+   19,   20,    0,   21,    0,   22,   79,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,   90,    0,    0,
+    0,    0,    0,   23,    0,    0,    0,    0,    0,    0,
+    0,   24,   25,   26,   27,   28,   29,    0,   30,    0,
+   31,   32,    0,    0,   58,    0,    0,    0,   36,   37,
+   38,    0,    0,   80,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,   81,   82,    0,   83,
+   84,   85,   86,   87,   88,   89,   15,   16,   79,   17,
+   93,    0,    0,   93,    0,   93,   19,   20,    0,   21,
+    0,   22,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,   93,    0,    0,    0,    0,    0,   23,
+    0,    0,    0,    0,    0,    0,    0,   24,   25,   26,
+   27,   28,   29,    0,   30,    0,   31,   32,    0,    0,
+   58,    0,    0,    0,   36,   37,   38,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,   80,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,   81,   82,   93,   83,   84,   85,   86,   87,
+   88,   89,   15,   16,    0,   17,   58,   58,    0,    0,
+   58,    0,   19,   20,    0,   21,    0,   22,    0,    0,
+    0,    0,    0,    0,   58,   58,    0,    0,    0,   58,
+    0,    0,    0,    0,    0,   23,    0,    0,    0,    0,
+    0,    0,    0,   24,   25,   26,   27,   28,   29,    0,
+   30,   80,   31,   32,    0,    0,   58,    0,    0,    0,
+   36,   37,   38,    0,   81,   82,    0,   83,   84,   85,
+   86,   87,   88,   89,   15,   16,    0,   17,    0,    0,
+    0,    0,   56,   56,   19,   20,   56,   21,    0,   22,
+   58,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+   56,   56,    0,    0,    0,   56,    0,   23,    0,    0,
+    0,    0,    0,    0,    0,   24,   25,   26,   27,   28,
+   29,    0,   30,    0,   31,   32,    0,    0,   58,    0,
+    0,    0,   36,   37,   38,    0,    0,   93,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+   93,   93,    0,   93,   93,   93,   93,   93,   93,   93,
+   93,   93,    0,   93,    0,    0,   56,    0,    0,   57,
+   93,   93,   33,   93,   34,   93,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,   93,    0,    0,    0,    0,    0,    0,
+    0,   93,   93,   93,   93,   93,   93,    0,   93,    0,
+   93,   93,    0,    0,   93,    0,    0,    0,   93,   93,
+   93,    0,    0,    0,    0,    0,    0,    0,    0,   58,
+    0,    0,    0,   58,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,   58,   58,   58,    0,
+    0,   58,    0,   79,    0,   58,   58,   58,    0,   58,
+   57,    0,    0,   33,    0,   34,   58,   58,    0,   58,
+    0,   58,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,   58,
+    0,    0,    0,    0,    0,    0,    0,   58,   58,   58,
+   58,   58,   58,    0,   58,   56,   58,   58,    0,   56,
+   58,    0,    0,    0,   58,   58,   58,    0,    0,    0,
+    0,    0,   56,   56,   56,    0,    0,   56,    0,    0,
+    0,   56,   56,   56,    0,   56,   57,    0,    0,   33,
+    0,   34,   56,   56,   79,   56,    0,   56,    0,    0,
+    0,    0,    0,    0,  328,    0,    0,    0,    0,  261,
+    0,    0,    0,    0,    0,   56,    0,    0,    0,    0,
+    0,    0,    0,   56,   56,   56,   56,   56,   56,    0,
+   56,    0,   56,   56,    0,    0,   56,    0,    0,    0,
+   56,   56,   56,    0,    0,    0,   80,    0,    0,   13,
+    0,    0,   33,    0,   34,    0,   14,    0,    0,   81,
+    0,    0,   83,   84,   85,   86,   87,   88,   89,   15,
+   16,    0,   17,    0,    0,    0,    0,    0,    0,   19,
+   20,    0,   21,    0,   22,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,   23,    0,    0,    0,    0,    0,    0,    0,
+   24,   25,   26,   27,   28,   29,    0,   30,    0,   31,
+   32,   57,    0,   58,   33,    0,   34,   36,   37,   38,
+    0,    0,   12,    0,    0,    0,    0,   80,    0,    0,
+    0,    0,    0,    0,  261,   13,    0,    0,   33,    0,
+   34,    0,   14,   83,   84,   85,   86,   87,   88,   89,
+   15,   16,    0,   17,  187,    0,    0,    0,    0,    0,
+   19,   20,    0,   21,    0,   22,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,   23,    0,    0,    0,    0,    0,    0,
+    0,   24,   25,   26,   27,   28,   29,    0,   30,    0,
+   31,   32,    0,  259,   58,    0,    0,    0,   36,   37,
+   38,    0,    0,    0,    0,   13,   81,   82,   33,    0,
+   34,    0,   14,    0,    0,  260,   15,   16,    0,   17,
+    0,    0,    0,    0,    0,    0,   19,   20,    0,   21,
+    0,   22,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,   23,
+   10,   11,    0,    0,    0,    0,    0,   24,   25,   26,
+   27,   28,   29,    0,   30,    0,   31,   32,    0,    0,
+   58,    0,    0,    0,   36,   37,   38,    0,    0,   15,
+   16,    0,   17,    0,    0,    0,    0,    0,   18,   19,
+   20,    0,   21,   13,   22,    0,   33,    0,   34,    0,
+   14,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,   23,    0,    0,    0,    0,    0,    0,    0,
+   24,   25,   26,   27,   28,   29,    0,   30,  259,   31,
+   32,    0,    0,   35,    0,    0,    0,   36,   37,   38,
+    0,   81,   82,    0,    0,    0,    0,    0,  179,    0,
+  260,   15,   16,    0,   17,    0,    0,    0,    0,    0,
+   13,   19,   20,   33,   21,   34,   22,   14,    0,    0,
+    0,    0,    0,    0,    0,   15,   16,    0,   17,    0,
+    0,    0,    0,    0,   23,   19,   20,    0,   21,    0,
+   22,    0,   24,   25,   26,   27,   28,   29,    0,   30,
+    0,   31,   32,    0,    0,   58,    0,    0,   23,   36,
+   37,   38,    0,    0,    0,    0,   24,   25,   26,   27,
+   28,   29,    0,   30,    0,   31,   32,    0,  168,   35,
+    0,    0,    0,   36,   37,   38,  295,    0,    0,   33,
+    0,   34,    0,   14,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,   15,   16,    0,   17,    0,
+    0,    0,    0,    0,    0,   19,   20,    0,   21,    0,
+   22,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,   23,    0,
+    0,    0,    0,    0,    0,    0,   24,   25,   26,   27,
+   28,   29,    0,   30,    0,   31,   32,    0,    0,   35,
+    0,    0,    0,   36,   37,   38,  170,    0,  295,    0,
+    0,   33,    0,   34,    0,   14,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,  295,   15,   16,   33,   17,   34,    0,   14,
+    0,    0,    0,   19,   20,    0,   21,    0,   22,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,   23,    0,    0,    0,
+    0,    0,    0,  220,   24,   25,   26,   27,   28,   29,
+    0,   30,    0,   31,   32,    0,    0,   35,    0,    0,
+    0,   36,   37,   38,    0,    0,    0,    0,    0,   57,
+   15,   16,   33,   17,   34,    0,   14,    0,    0,    0,
+   19,   20,    0,   21,    0,   22,    0,    0,    0,    0,
+    0,    0,    0,  209,    0,    0,   33,    0,   34,    0,
+   14,    0,    0,   23,    0,    0,    0,    0,    0,    0,
+    0,   24,   25,   26,   27,   28,   29,    0,   30,  168,
+   31,   32,    0,    0,   35,    0,    0,    0,   36,   37,
+   38,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,  295,   15,   16,   33,   17,
+   34,    0,   14,    0,    0,    0,   19,   20,    0,   21,
+    0,   22,    0,    0,    0,    0,    0,    0,    0,   26,
+    0,    0,   26,    0,   26,    0,   26,    0,    0,   23,
+    0,    0,    0,    0,    0,    0,    0,   24,   25,   26,
+   27,   28,   29,    0,   30,    0,   31,   32,    0,    0,
+   35,  170,    0,    0,   36,   37,   38,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,   57,    0,    0,   33,  220,   34,    0,   15,   16,
+    0,   17,    0,    0,    0,    0,    0,    0,   19,   20,
+    0,   21,    0,   22,    0,    0,    0,    0,    0,    0,
+    0,    0,   15,   16,    0,   17,    0,    0,    0,    0,
+    0,   23,   19,   20,    0,   21,    0,   22,    0,   24,
+   25,   26,   27,   28,   29,    0,   30,    0,   31,   32,
+    0,    0,   35,    0,    0,   23,   36,   37,   38,    0,
+    0,    0,    0,   24,   25,   26,   27,   28,   29,    0,
+   30,    0,   31,   32,    0,    0,   35,    0,    0,    0,
+   36,   37,   38,    0,    0,    0,    0,    0,    0,   15,
+   16,    0,   17,    0,    0,    0,    0,    0,    0,   19,
+   20,    0,   21,    0,   22,    0,    0,    0,    0,    0,
+    0,    0,    0,   15,   16,    0,   17,    0,    0,    0,
+    0,    0,   23,   19,   20,    0,   21,    0,   22,    0,
+   24,   25,   26,   27,   28,   29,    0,   30,    0,   31,
+   32,    0,    0,   35,    0,    0,   23,   36,   37,   38,
+    0,    0,    0,    0,   24,   25,   26,   27,   28,   29,
+    0,   30,    0,   31,   32,   15,   16,   35,   17,    0,
+    0,   36,   37,   38,    0,   19,   20,    0,   21,    0,
+   22,    0,    0,    0,    0,    0,    0,    0,    0,   26,
+   26,    0,   26,    0,    0,    0,    0,    0,   23,   26,
+   26,    0,   26,    0,   26,    0,   24,   25,   26,   27,
+   28,   29,    0,   30,    0,   31,   32,    0,    0,   35,
+    0,    0,   26,   36,   37,   38,    0,    0,    0,    0,
+   26,   26,   26,   26,   26,   26,    0,   26,    0,   26,
+   26,   15,   16,   26,   17,    0,    0,   26,   26,   26,
+    0,   19,   20,    0,   21,    0,   22,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,   23,    0,    0,    0,    0,    0,
+    0,    0,   24,   25,   26,   27,   28,   29,    0,    0,
+    0,   31,   32,    0,    0,   58,    0,    0,    0,   36,
+   37,   38,
+};
+static const YYINT yycheck[] = {                         37,
+    0,   37,  109,   59,   42,   43,   42,   45,   41,   47,
+   91,   47,  100,    7,   80,  124,   10,   11,   41,   59,
+   44,  109,   51,   52,   35,  111,   59,  194,  114,   59,
+   44,  117,  118,  209,   59,  121,   59,   37,  124,  263,
+   40,   41,   42,   43,   44,   45,   41,   47,   42,  314,
+   41,   44,  263,   59,   66,   67,  123,    0,   58,   59,
+  338,  314,   41,   63,   59,   44,    0,  133,   59,   93,
+   41,   40,  101,   41,   41,  331,  210,   44,  334,  290,
+  187,  359,   40,  348,  349,  249,   41,  251,   59,   44,
+    0,   59,   40,   93,  106,  348,  349,    0,   41,  187,
+   93,   44,  131,   40,   47,  210,  192,  331,  102,  123,
+   44,  290,  198,   47,   93,   58,   59,  348,  349,  295,
+  331,  132,  333,  123,  124,   59,   93,   37,   40,   40,
+   91,   41,   42,   43,   44,   45,   41,   47,   41,   44,
+   41,   44,   41,   44,   47,   44,   40,   40,   58,   59,
+   93,  336,  331,   63,  333,   58,   59,  337,   41,   40,
+  324,   44,  296,  229,  230,  299,  300,  301,  302,  287,
+  347,  338,  306,  282,   41,  290,  285,   44,   41,  286,
+  123,   44,   41,   93,    0,   44,  338,  351,  263,  123,
+   93,  296,  359,  259,  299,  300,  301,  302,  286,  363,
+  256,  306,   41,   41,   40,   44,   44,  263,  289,   41,
+  344,   40,   44,  123,  124,  322,  331,  332,  333,   41,
+  123,   37,   44,  263,   40,   41,   42,   43,   44,   45,
+  263,   47,  244,  263,  322,  350,   58,   59,  263,  344,
+  263,   63,   58,   59,   40,  352,  240,   63,  259,   47,
+  261,  317,  263,  264,  265,  284,   41,  263,  269,   44,
+  263,  261,  262,  263,  352,  263,  331,  267,  263,  289,
+   91,  324,  263,   58,   59,  361,   44,   93,   63,   41,
+  280,  281,  282,  283,  284,  285,  286,  287,  288,  289,
+  290,  291,  263,  293,   59,  263,   41,   59,  263,  299,
+  300,  301,  124,  303,  333,  305,  263,  123,  124,  347,
+   40,  347,  263,   43,  314,   45,  310,  328,  261,  262,
+  263,   41,   41,  323,  342,  290,  289,  261,  262,  263,
+   40,  331,  332,  333,  334,  335,  336,   41,  338,  124,
+  340,  341,  287,   41,  344,  290,   41,  347,  348,  349,
+  350,  261,  262,  263,   41,    0,  299,  267,  261,  262,
+  263,    0,  124,   59,   59,  299,  331,  332,  333,  123,
+  280,  281,  282,  283,  284,  285,  286,  287,  288,  289,
+  290,  291,   41,  293,  181,  350,  331,  332,  333,  299,
+  300,  301,   44,  303,  102,  305,  299,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,  314,  350,   -1,   40,   41,   -1,
+   43,   -1,   45,  323,   47,   -1,   -1,   -1,   -1,   -1,
+   -1,  331,  332,  333,  334,  335,  336,   -1,  338,  124,
+  340,  341,   -1,   -1,  344,   -1,   -1,  347,  348,  349,
+  350,  263,   -1,   41,   -1,  261,  262,  263,   -1,   -1,
+   -1,  267,   -1,   -1,   -1,   -1,   -1,   -1,  280,  281,
+  282,   59,   -1,  285,  280,  281,  282,  283,  284,  285,
+  286,  287,  288,  289,  290,  291,   -1,  293,  263,   -1,
+   -1,   53,   54,  299,  300,  301,   -1,  303,   -1,  305,
+   -1,   -1,   -1,   -1,   -1,  280,  281,  282,  314,    0,
+  285,  263,   -1,   -1,   -1,   -1,   -1,  323,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,  331,  332,  333,  334,  335,
+  282,   -1,  338,  285,  340,  341,  124,   -1,  344,   -1,
+   -1,  347,  348,  349,  350,   -1,   37,  267,   -1,   40,
+   41,   42,   43,   44,   45,   -1,   47,   -1,   -1,   -1,
+  280,   -1,   -1,  338,   -1,   -1,   -1,   58,   59,  289,
+  290,  291,   63,  293,   -1,   -1,   -1,   -1,  263,   -1,
+  300,  301,   -1,  303,   -1,  305,  148,  149,   -1,   41,
+   -1,   -1,   44,  155,  156,   -1,   -1,  282,   -1,    0,
+  285,   -1,   93,  323,   -1,   -1,   58,   59,   -1,   -1,
+   -1,  331,  332,  333,  334,  335,  336,   -1,  338,   -1,
+  340,  341,   -1,   -1,  344,   -1,   -1,   -1,  348,  349,
+  350,   -1,  123,  124,   -1,   -1,   37,   -1,   -1,   40,
+   41,   42,   43,   44,   45,   -1,   47,   -1,   -1,  211,
+   -1,   -1,   -1,   -1,  216,  217,   -1,   58,   59,  259,
+   -1,  261,   63,  263,  264,  265,  228,  290,  291,  269,
+  293,   -1,  124,   -1,   -1,  263,   -1,  300,  301,   -1,
+  303,   -1,  305,   -1,   -1,   41,   -1,   -1,   44,   -1,
+   -1,   -1,   93,    0,  282,   -1,  258,  285,   -1,   -1,
+  323,   -1,   58,   59,   -1,   -1,   -1,   63,  331,  332,
+  333,  334,  335,  336,   -1,  338,   -1,  340,  341,  281,
+  282,  344,  123,  124,   -1,  348,  349,  350,  328,   -1,
+   37,   -1,   -1,   40,   41,   42,   43,   44,   45,   -1,
+   47,   -1,   -1,   -1,   -1,  307,  308,   -1,   -1,   -1,
+   -1,   58,   59,   -1,   -1,   -1,   63,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,  327,   -1,   -1,  124,   -1,
+  261,  262,  263,   -1,   -1,   -1,  267,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   93,   -1,   -1,  280,
+  281,  282,  283,  284,  285,  286,   -1,  288,  289,  290,
+  291,   -1,  293,   -1,   -1,   -1,   -1,   -1,  299,  300,
+  301,  263,  303,   -1,  305,   -1,  123,  124,   41,   -1,
+   -1,   44,   -1,  314,   -1,   -1,   -1,   -1,   -1,   -1,
+  282,   -1,  323,  285,   -1,   58,   59,   -1,   -1,   -1,
+  331,  332,  333,  334,  335,  336,   -1,  338,   -1,  340,
+  341,   -1,   -1,  344,   -1,   -1,  347,  348,  349,  350,
+  261,  262,  263,   -1,   -1,    0,  267,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  280,
+  281,  282,  283,  284,  285,  286,  287,  288,  289,  290,
+  291,   -1,  293,   -1,   -1,   -1,   -1,   -1,  299,  300,
+  301,  124,  303,   -1,  305,   -1,   41,  263,   -1,   44,
+   -1,   -1,   47,  314,   -1,   40,   -1,   -1,   43,   -1,
+   45,   -1,  323,   58,   59,  281,  282,   -1,   63,  285,
+  331,  332,  333,  334,  335,  336,   -1,  338,   -1,  340,
+  341,   -1,   -1,  344,   -1,   -1,   -1,  348,  349,  350,
+   -1,   -1,   -1,   -1,  261,  262,  263,   -1,   93,   -1,
+  267,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,  280,  281,  282,  283,  284,  285,  286,
+  287,  288,  289,  290,  291,   -1,  293,   -1,  123,   89,
+   -1,   -1,  299,  300,  301,   -1,  303,   -1,  305,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,  314,    0,   -1,
+   -1,   -1,  112,   -1,   -1,   -1,  323,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,  331,  332,  333,  334,  335,  336,
+   -1,  338,   -1,  340,  341,   -1,   -1,  344,   -1,   -1,
+  263,  348,  349,  350,   -1,   37,   -1,   -1,   40,   41,
+   42,   43,   44,   45,   -1,   47,    0,   -1,   -1,  282,
+   -1,   41,  285,   -1,   44,   -1,   58,   59,   -1,   -1,
+   -1,   63,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   59,
+   -1,   -1,   -1,   -1,   41,   -1,   -1,   44,   -1,   -1,
+   -1,   -1,   -1,   -1,  194,   -1,   -1,   41,    0,   -1,
+   44,   93,   59,   47,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   58,   59,   -1,   -1,   -1,   63,
+   -1,   -1,  222,   -1,   -1,   -1,  261,  262,  263,   -1,
+   -1,  123,  124,   -1,  234,   37,   -1,   -1,   40,   41,
+   42,   43,   44,   45,  124,   47,  281,   -1,   -1,   93,
+   -1,   -1,   -1,   -1,   -1,   -1,   58,   59,   -1,   -1,
+  260,   63,   -1,   -1,  299,  290,  291,  124,  293,   -1,
+   -1,   -1,   -1,   -1,   -1,  300,  301,   -1,  303,  123,
+  305,   -1,   -1,   -1,   -1,   -1,   -1,  287,   -1,  314,
+   -1,   93,    0,   -1,   -1,   -1,   -1,   -1,  323,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,  331,  332,  333,  334,
+  335,  336,   -1,  338,   -1,  340,  341,   -1,   -1,  344,
+   -1,  123,  124,  348,  349,  350,  326,   -1,   -1,   37,
+   -1,   -1,   40,   41,   42,   43,   44,   45,   -1,   47,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   58,   59,   -1,   -1,   -1,   63,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  261,
+  262,  263,   -1,   -1,   -1,  267,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,  263,   -1,   93,   -1,   -1,  280,  281,
+  282,  283,  284,  285,  286,  287,  288,  289,  290,  291,
+   -1,  293,  282,   -1,   -1,  285,  263,  299,  300,  301,
+   -1,  303,   -1,  305,   -1,  123,  124,  261,  262,  263,
+   -1,   -1,  314,   -1,   -1,  282,   -1,   -1,  285,   -1,
+   -1,  323,   -1,   -1,   -1,   -1,  280,  281,   -1,  331,
+  332,  333,  334,  335,  336,   -1,  338,   -1,  340,  341,
+   -1,   -1,  344,   -1,   -1,  299,  348,  349,  350,  261,
+  262,  263,  126,   -1,  128,  267,   -1,   -1,   -1,   -1,
+   -1,  135,  136,   -1,   -1,   -1,   -1,   -1,  280,  281,
+  282,  283,  284,  285,  286,  287,  288,  289,  290,  291,
+   -1,  293,   -1,   -1,  338,   -1,   -1,  299,  300,  301,
+   -1,  303,   -1,  305,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,  314,   -1,   40,   -1,   -1,   43,  182,   45,
+   -1,  323,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  331,
+  332,  333,  334,  335,  336,   -1,  338,   -1,  340,  341,
+   -1,  205,  344,  207,  208,   -1,  348,  349,  350,   -1,
+   -1,   -1,   -1,  261,  262,  263,   -1,   -1,   -1,  267,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,  280,  281,  282,  283,  284,  285,  286,  287,
+  288,  289,  290,  291,   -1,  293,   -1,   -1,   -1,  253,
+   -1,  299,  300,  301,   -1,  303,   -1,  305,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,  314,    0,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,  323,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,  331,  332,  333,  334,  335,  336,   -1,
+  338,   -1,  340,  341,   -1,   -1,  344,   -1,   -1,   -1,
+  348,  349,  350,   -1,   37,   -1,   -1,   40,   41,   42,
+   43,   44,   45,   -1,   47,    0,  320,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   58,   59,   -1,   -1,   -1,
+   63,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,  347,   -1,   -1,   -1,   -1,   -1,  353,
+   -1,   -1,   -1,   -1,   -1,   -1,   41,    0,  362,   44,
+   93,   -1,   47,  367,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   58,   59,   -1,   -1,   -1,   63,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+  123,  124,   -1,   -1,   37,   -1,   -1,   40,   41,   42,
+   43,   44,   45,   -1,   47,   -1,   -1,   -1,   93,   -1,
+   -1,   -1,   -1,   -1,   -1,   58,   59,   -1,   -1,   -1,
+   63,   -1,   -1,   -1,  290,  291,   -1,  293,   -1,   -1,
+   -1,   -1,   -1,   -1,  300,  301,   -1,  303,  123,  305,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   93,    0,   -1,   -1,   -1,   -1,   -1,  323,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,  331,  332,  333,  334,  335,
+  336,   -1,  338,   -1,  340,  341,   -1,   -1,  344,   -1,
+  123,  124,  348,  349,  350,   -1,   -1,   -1,   37,   -1,
+   -1,   40,   41,   42,   43,   44,   45,   -1,   47,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   58,
+   59,   -1,   -1,   -1,   63,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  261,  262,
+  263,   -1,   -1,   -1,  267,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   93,   -1,   -1,  280,  281,  282,
+  283,  284,  285,  286,  287,  288,  289,  290,  291,   -1,
+  293,   -1,   -1,   -1,   -1,   -1,  299,  300,  301,   -1,
+  303,   -1,  305,   -1,  123,  124,  261,  262,  263,   -1,
+   40,  314,   -1,   43,   -1,   45,   -1,   47,   -1,   -1,
+  323,   -1,   -1,   -1,   -1,  280,  281,   -1,  331,  332,
+  333,  334,  335,  336,   -1,  338,   -1,  340,  341,   -1,
+   -1,  344,   -1,   -1,  299,  348,  349,  350,  261,  262,
+  263,   -1,   -1,   -1,  267,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,  280,  281,  282,
+  283,  284,  285,  286,  287,  288,  289,  290,  291,   -1,
+  293,   -1,   -1,  338,   -1,   -1,  299,  300,  301,   -1,
+  303,   -1,  305,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  314,   -1,   40,   41,   -1,   43,   44,   45,   -1,
+  323,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  331,  332,
+  333,  334,  335,  336,   -1,  338,   63,  340,  341,   -1,
+   -1,  344,   -1,   -1,   -1,  348,  349,  350,   -1,   -1,
+   -1,   -1,  261,  262,  263,   -1,   -1,   -1,  267,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  280,  281,  282,  283,  284,  285,  286,  287,  288,
+  289,  290,  291,   -1,  293,   -1,   -1,   -1,   -1,   -1,
+  299,  300,  301,   -1,  303,   -1,  305,  124,   -1,   -1,
+   -1,   -1,    0,   -1,   -1,  314,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,  323,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,  331,  332,  333,  334,  335,  336,   -1,  338,
+   -1,  340,  341,   -1,   -1,  344,  256,   -1,  347,   37,
+   -1,  350,   40,   41,   42,   43,   44,   45,   -1,   47,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   58,   59,   -1,   -1,   -1,   63,   -1,   -1,   -1,   -1,
+  290,  291,   -1,  293,   -1,  295,   -1,   -1,   -1,   -1,
+  300,  301,   -1,  303,   -1,  305,   -1,   -1,   -1,   -1,
+   -1,   -1,    0,   -1,   -1,   93,   -1,   -1,   -1,   -1,
+   -1,  321,  322,  323,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  331,  332,  333,  334,  335,  336,   -1,  338,   -1,
+  340,  341,   -1,   -1,  344,  123,  124,   -1,  348,  349,
+  350,   -1,   40,   41,   -1,   43,   44,   45,   -1,   -1,
+  267,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   58,   59,   -1,  280,  281,   63,  283,  284,  285,  286,
+  287,  288,  289,  290,  291,   -1,  293,   -1,   -1,   -1,
+   -1,   -1,   -1,  300,  301,   -1,  303,   -1,  305,   -1,
+   -1,   -1,   -1,   -1,   -1,   93,    0,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,  323,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,  331,  332,  333,  334,  335,  336,
+   -1,  338,   -1,  340,  341,  123,  124,  344,   -1,   -1,
+   -1,  348,  349,  350,   -1,   -1,   40,   41,   -1,   43,
+   44,   45,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   58,   59,   -1,   -1,   -1,   63,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,  261,  262,  263,   -1,   -1,   -1,  267,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   93,
+   -1,   -1,  280,  281,   -1,  283,  284,  285,  286,  287,
+  288,  289,  290,  291,   -1,  293,   -1,   -1,   -1,   -1,
+   -1,  299,  300,  301,   -1,  303,   -1,  305,   -1,  123,
+  124,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,  323,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,  331,  332,  333,  334,  335,  336,   -1,
+  338,   -1,  340,  341,   -1,   -1,  344,   -1,   -1,  347,
+   -1,   -1,  350,  261,  262,  263,   -1,   -1,    0,  267,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,  280,  281,  282,  283,  284,  285,  286,  287,
+  288,  289,  290,  291,   -1,  293,   -1,   -1,   -1,   -1,
+   -1,  299,  300,  301,   -1,  303,   -1,  305,   40,   41,
+   -1,   -1,   44,   -1,   -1,   -1,  314,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,  323,   58,   59,   -1,   -1,
+   -1,   63,   -1,  331,  332,  333,  334,  335,  336,   -1,
+  338,   -1,  340,  341,   -1,   -1,  344,   -1,   -1,   -1,
+  348,  349,  350,   -1,   -1,   -1,   -1,  261,  262,  263,
+   -1,   93,    0,  267,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,  280,  281,  282,  283,
+  284,  285,  286,  287,  288,  289,  290,  291,   -1,  293,
+   -1,  123,  124,   -1,   -1,  299,  300,  301,   -1,  303,
+   -1,  305,   40,   41,   -1,   -1,   44,   -1,   -1,    0,
+  314,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  323,
+   58,   59,   -1,   -1,   -1,   63,   -1,  331,  332,  333,
+  334,  335,  336,   -1,  338,   -1,  340,  341,   -1,   -1,
+  344,   -1,   -1,   -1,  348,  349,  350,   -1,   -1,   -1,
+   41,   -1,    0,   44,   -1,   93,   47,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   58,   59,   -1,
+   -1,   -1,   63,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,  123,  124,   -1,   -1,   -1,
+   -1,   -1,   40,   41,   -1,   -1,   44,   -1,   -1,   -1,
+   -1,   -1,   93,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   58,   59,   -1,   -1,   -1,   63,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  261,
+  262,  263,  123,   -1,   -1,  267,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   93,   -1,   -1,  280,  281,
+  282,  283,  284,  285,  286,  287,  288,  289,  290,  291,
+   -1,  293,   -1,   -1,   -1,   -1,   -1,  299,  300,  301,
+   -1,  303,   -1,  305,   -1,  123,  124,   -1,   -1,   -1,
+   -1,   -1,  314,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  323,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  331,
+  332,  333,  334,  335,  336,   -1,  338,   -1,  340,  341,
+   -1,   -1,  344,   -1,   -1,   -1,  348,  349,  350,   -1,
+   -1,   -1,   -1,  261,  262,  263,   -1,   -1,   -1,  267,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,  280,  281,  282,  283,  284,  285,  286,  287,
+  288,  289,  290,  291,   -1,  293,   -1,   -1,   -1,   -1,
+   -1,  299,  300,  301,   -1,  303,   -1,  305,   -1,   -1,
+  261,  262,  263,   -1,   -1,   -1,  314,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,  323,   -1,   -1,   -1,  280,
+  281,   -1,   -1,  331,  332,  333,  334,  335,  336,   -1,
+  338,   -1,  340,  341,   -1,   -1,  344,   -1,  299,   -1,
+  348,  349,  350,  261,  262,  263,   -1,   -1,    0,  267,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,  280,  281,  282,  283,  284,  285,  286,  287,
+  288,  289,  290,  291,   -1,  293,   -1,  338,   -1,   -1,
+   -1,  299,  300,  301,   -1,  303,   -1,  305,   40,   41,
+   -1,   -1,   44,   -1,   -1,   -1,  314,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,  323,   58,   59,   -1,   -1,
+   -1,   63,   -1,  331,  332,  333,  334,  335,  336,   -1,
+  338,   -1,  340,  341,   -1,   -1,  344,   -1,   -1,   -1,
+  348,  349,  350,   -1,   -1,   -1,   -1,   -1,    0,   -1,
+   -1,   93,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  123,  124,   -1,   -1,   -1,   -1,   -1,   40,   41,
+   -1,   -1,   44,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   58,   59,   -1,   -1,
+   -1,   63,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   93,    0,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  123,  124,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   40,   41,   -1,   -1,   44,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   58,   59,   -1,   -1,   -1,   63,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  261,
+  262,  263,   -1,   -1,   -1,  267,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   93,   -1,   -1,  280,  281,
+  282,  283,  284,  285,  286,  287,  288,  289,  290,  291,
+   -1,  293,   -1,   -1,   -1,   -1,   -1,  299,  300,  301,
+   -1,  303,   -1,  305,   -1,  123,  124,   -1,   -1,   -1,
+   40,   41,  314,   43,   -1,   45,   -1,   47,   -1,   -1,
+   -1,  323,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  331,
+  332,  333,  334,  335,  336,   -1,  338,   -1,  340,  341,
+   -1,   -1,  344,   -1,   -1,   -1,  348,  349,  350,  261,
+  262,  263,   -1,   -1,    0,  267,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  280,  281,
+   -1,  283,  284,  285,  286,  287,  288,  289,  290,  291,
+   -1,  293,   -1,   -1,   -1,   -1,   -1,  299,  300,  301,
+   -1,  303,   -1,  305,   40,   -1,   -1,   43,   -1,   45,
+   -1,   47,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  323,   -1,   59,   -1,   -1,   -1,   -1,   -1,  331,
+  332,  333,  334,  335,  336,   -1,  338,   -1,  340,  341,
+   -1,   -1,  344,   -1,   -1,   -1,  348,  349,  350,   -1,
+   -1,   -1,   -1,  261,  262,  263,   -1,   -1,    0,  267,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,  280,  281,   -1,  283,  284,  285,  286,  287,
+  288,  289,  290,  291,   -1,  293,   -1,   -1,   -1,   -1,
+   -1,  299,  300,  301,   -1,  303,   -1,  305,   40,   -1,
+   -1,   43,   -1,   45,   -1,   47,   -1,   -1,   -1,   -1,
+    0,   -1,   -1,   -1,   -1,  323,   -1,   59,   -1,   -1,
+   -1,   -1,   -1,  331,  332,  333,  334,  335,  336,   -1,
+  338,   -1,  340,  341,   -1,   -1,  344,   -1,   -1,   -1,
+  348,  349,  350,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   40,   -1,   -1,   43,   -1,   45,   -1,   47,   -1,   -1,
+   -1,   -1,    0,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+  290,  291,   -1,  293,   -1,   -1,   -1,   -1,   -1,   -1,
+  300,  301,   -1,  303,   -1,  305,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   40,  323,   -1,   43,   -1,   45,   -1,   47,
+   -1,  331,  332,  333,  334,  335,  336,   -1,  338,   -1,
+  340,  341,   -1,   -1,  344,  261,  262,  263,  348,  349,
+  350,   -1,   -1,  123,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,  290,  291,   -1,  293,   -1,   -1,
+   -1,   -1,   -1,  299,  300,  301,   -1,  303,   -1,  305,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,  123,   -1,  323,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,  331,  332,  333,  334,  335,
+  336,   -1,  338,   -1,  340,  341,   -1,   -1,  344,   -1,
+   -1,   -1,  348,  349,  350,   -1,   -1,   -1,   -1,  261,
+  262,  263,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  290,  291,
+   -1,  293,   -1,   -1,   -1,   -1,   -1,  299,  300,  301,
+   -1,  303,   -1,  305,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  261,  262,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  323,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  331,
+  332,  333,  334,  335,  336,   -1,  338,   -1,  340,  341,
+  290,  291,  344,  293,   -1,   -1,  348,  349,  350,  299,
+  300,  301,   -1,  303,   -1,  305,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,  261,  262,   -1,   -1,   -1,   -1,    0,
+   -1,   -1,   -1,  323,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  331,  332,  333,  334,  335,  336,   -1,  338,   -1,
+  340,  341,  290,  291,  344,  293,   -1,   -1,  348,  349,
+  350,  299,  300,  301,   -1,  303,   37,  305,   -1,   40,
+   41,   42,   43,   44,   45,   -1,   47,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,  323,   -1,   58,   59,   -1,
+   -1,   -1,   63,  331,  332,  333,  334,  335,  336,    0,
+  338,   -1,  340,  341,   -1,   -1,  344,   -1,   -1,   -1,
+  348,  349,  350,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   93,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,    0,   -1,   -1,   -1,   -1,   -1,   -1,   40,
+   41,   -1,   43,   44,   45,   -1,   47,   -1,   -1,   -1,
+   -1,   -1,  123,  124,   -1,   -1,   -1,   58,   59,   -1,
+   -1,   -1,   63,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   41,   -1,   -1,   44,   -1,   -1,   47,
+   -1,   -1,   -1,    0,   -1,   -1,   -1,   -1,   -1,   -1,
+   58,   59,   93,    0,   -1,   63,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,  123,  124,   41,   93,    0,   44,   -1,   -1,
+   47,   -1,   -1,   -1,   41,   -1,   -1,   44,   -1,   -1,
+   47,   58,   59,   -1,   -1,   -1,   63,   -1,   -1,   -1,
+   -1,   58,   59,   -1,   -1,  123,   63,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   41,   -1,   -1,
+   44,   -1,   -1,   47,   -1,   -1,   93,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   58,   59,   93,   -1,   -1,   63,
+  261,  262,  263,   -1,   -1,   -1,  267,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,  123,   -1,   -1,  280,
+  281,  282,  283,  284,  285,  286,  123,  288,  289,   93,
+  291,   -1,  293,   -1,   -1,   -1,   -1,   -1,  299,  300,
+  301,   -1,  303,   -1,  305,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,  314,   -1,   -1,   -1,   -1,   -1,  123,
+   -1,   -1,  323,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+  261,  262,  263,  334,  335,  336,  267,  338,   -1,  340,
+  341,   -1,   -1,  344,   -1,   -1,  347,  348,  349,  280,
+  281,   -1,  283,  284,  285,  286,  287,  288,  289,   -1,
+  291,   -1,  293,  261,  262,  263,   -1,   -1,  299,  300,
+  301,   -1,  303,   -1,  305,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,  280,  281,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,  323,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  299,   -1,  334,  335,  336,   -1,  338,   -1,  340,
+  341,   -1,   -1,  344,  261,  262,  263,  348,  349,   -1,
+   -1,   -1,   -1,   -1,  261,  262,  263,   -1,   -1,   17,
+   -1,   -1,   -1,  280,  281,   -1,   -1,   -1,   -1,   -1,
+  338,   -1,   30,  280,  281,   33,   34,   35,   36,   37,
+   38,   39,  299,   -1,   -1,   -1,   -1,  261,  262,  263,
+   -1,   -1,  299,   -1,   -1,   53,   -1,   -1,   -1,   -1,
+   58,   -1,   -1,   -1,   -1,   -1,  280,  281,   -1,   -1,
+   68,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  338,   -1,   -1,   -1,  299,   -1,   -1,   -1,   -1,
+   -1,  338,   -1,   -1,   -1,   -1,   94,   95,   96,   97,
+   98,   99,   -1,   -1,   -1,   -1,   -1,   -1,   40,   41,
+   -1,   43,   -1,   45,   -1,   47,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,  338,  123,   -1,   59,   -1,   -1,
+   -1,   -1,   -1,   -1,  132,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,  144,   -1,  146,   -1,
+  148,  149,   -1,   -1,   -1,   -1,  154,  155,  156,  157,
+  158,   -1,  160,  161,  162,  163,  164,  165,   -1,  167,
+   -1,  169,   -1,  171,  172,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,  184,   -1,   -1,   -1,
+   -1,  123,   -1,  125,  192,   -1,   -1,   -1,   -1,   -1,
+  198,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,  210,   -1,   -1,   -1,   -1,   -1,  216,   -1,
+   -1,   -1,   -1,  221,   -1,  223,   -1,   -1,   40,   -1,
+   -1,   43,   -1,   45,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  249,   -1,  251,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  259,   -1,  261,   -1,  263,  264,  265,  266,  267,
+  268,  269,   -1,   -1,   -1,  273,   -1,   -1,   -1,  277,
+   -1,  279,   -1,   -1,  282,  283,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  296,   17,
+   -1,  299,  300,  301,  302,   -1,   -1,   -1,  306,  307,
+  308,   -1,   -1,   -1,   -1,   33,   34,   35,   -1,   -1,
+   38,   39,   -1,   -1,  256,   -1,   -1,   -1,   -1,   -1,
+  328,   -1,  330,   -1,  332,   53,  334,   -1,  336,   -1,
+   58,  339,   -1,   -1,   -1,   -1,  344,   -1,   -1,   -1,
+   68,   -1,   -1,   -1,   -1,   -1,  354,   -1,  290,  291,
+  292,  293,  294,  295,  296,  297,  298,   -1,  300,  301,
+  302,  303,   -1,  305,  306,  307,   94,   95,   96,   97,
+   98,   99,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  321,
+  322,  323,  324,   -1,   -1,   -1,   -1,   -1,   -1,  331,
+  332,  333,  334,  335,  336,  123,  338,  339,  340,  341,
+  342,   -1,  344,   -1,  132,   -1,  348,  349,  350,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,  144,   -1,  146,   -1,
+  148,  149,   -1,   -1,   -1,   -1,  154,  155,  156,   -1,
+  158,   -1,  160,  161,  162,  163,  164,  165,   -1,  167,
+   -1,  169,   -1,  171,  172,  267,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,  184,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,  192,   -1,   -1,  289,  290,  291,
+  198,  293,   -1,   -1,   -1,   -1,   -1,   -1,  300,  301,
+   -1,  303,  210,  305,   -1,   -1,   -1,   -1,  216,   -1,
+   -1,   -1,   -1,  221,   -1,  223,   -1,   -1,   -1,   -1,
+   -1,  323,   -1,   -1,   -1,   -1,    0,   -1,   -1,  331,
+  332,  333,  334,  335,  336,   -1,  338,   -1,  340,  341,
+   -1,  249,  344,  251,   -1,   -1,  348,  349,  350,   -1,
+   -1,  259,   -1,  261,   -1,  263,  264,  265,  266,  267,
+  268,  269,   -1,   -1,   -1,  273,   -1,   41,   -1,  277,
+   44,  279,   -1,   47,  282,  283,   -1,   -1,   -1,   -1,
+    7,   -1,   -1,   -1,   58,   59,   13,   -1,  296,   63,
+   -1,  299,  300,  301,  302,   -1,   -1,   -1,  306,  307,
+  308,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   93,
+  328,   -1,   -1,   -1,   -1,   -1,  334,   -1,  336,   56,
+   57,  339,   -1,   -1,   -1,   -1,  344,   64,   65,   66,
+   67,   -1,   -1,   70,   71,   -1,  354,   -1,   -1,  123,
+   -1,   -1,   -1,   80,   -1,   -1,   83,   84,   85,   86,
+   87,   88,   -1,   90,   -1,   92,   93,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,  102,  103,   -1,   37,  106,
+   -1,   40,   -1,   42,   43,   -1,   45,  114,   47,   -1,
+   -1,   -1,   -1,   -1,  121,   -1,   -1,   -1,   -1,   -1,
+   59,   -1,   -1,   -1,   63,   -1,  133,   -1,   -1,   -1,
+   -1,   -1,  139,   -1,  141,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,  181,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,  124,   -1,   -1,  195,   -1,
+   -1,   37,   -1,  200,   40,   41,   42,   43,   44,   45,
+   -1,   47,  209,   -1,   -1,   -1,   -1,  261,  262,  263,
+   -1,   -1,   58,   59,   -1,   -1,   -1,   63,   -1,  226,
+   -1,   -1,  229,  230,   -1,   -1,  280,  281,  235,   -1,
+  237,   -1,   -1,   -1,   -1,   -1,   -1,  244,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,  299,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   40,   -1,   -1,   43,   -1,
+   45,   -1,   47,  270,  271,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   59,   -1,   -1,   -1,  124,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  295,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+  317,   -1,  319,   -1,   -1,   -1,  323,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  267,   -1,
+   -1,   -1,   -1,   -1,  341,   -1,   -1,   -1,  123,   -1,
+  125,  280,  281,   -1,  283,  284,  285,  286,  287,  288,
+   -1,  290,  291,   -1,  293,   -1,   -1,   -1,   -1,   -1,
+   -1,  300,  301,   -1,  303,   -1,  305,   40,   -1,   -1,
+   43,   -1,   45,   -1,   47,  314,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,  323,   -1,   59,   -1,   -1,   -1,
+   -1,   -1,  331,  332,  333,  334,  335,  336,   -1,  338,
+   -1,  340,  341,   -1,   -1,  344,   -1,   -1,  347,  348,
+  349,  350,   -1,   -1,   -1,   -1,   -1,  263,   -1,   -1,
+   -1,  267,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,  280,  281,  282,   -1,   -1,  285,
+   -1,   -1,   -1,  289,  290,  291,   -1,  293,   -1,   -1,
+  123,   -1,  125,   -1,  300,  301,   -1,  303,   -1,  305,
+   -1,   -1,   40,   -1,   -1,   43,   -1,   45,   -1,   47,
+   -1,  256,   -1,   -1,   -1,   -1,   -1,  323,   -1,   -1,
+   -1,   59,   -1,   -1,   -1,  331,  332,  333,  334,  335,
+  336,   -1,  338,   -1,  340,  341,   -1,   -1,  344,   -1,
+   -1,  347,   -1,   -1,  350,  290,  291,  292,  293,  294,
+  295,  296,  297,  298,   -1,  300,  301,  302,  303,   -1,
+  305,  306,  307,   40,   -1,   -1,   43,   -1,   45,   -1,
+   47,   -1,   -1,   -1,   -1,   -1,  321,  322,  323,  324,
+   -1,   -1,   59,   -1,   -1,  123,  331,  332,  333,  334,
+  335,  336,   -1,  338,  339,  340,  341,  342,   -1,  344,
+   -1,   -1,   -1,  348,  349,  350,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,  256,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   40,   -1,   -1,   43,
+   -1,   45,   -1,   47,   -1,   -1,  123,   -1,  125,   -1,
+   -1,   -1,   -1,   -1,   -1,   59,   -1,  290,  291,  292,
+  293,  294,  295,  296,  297,  298,   -1,  300,  301,  302,
+  303,   -1,  305,  306,  307,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  321,  322,
+  323,  324,   -1,   -1,   -1,   -1,   -1,   -1,  331,  332,
+  333,  334,  335,  336,   -1,  338,  339,  340,  341,  342,
+   -1,  344,   -1,   -1,   -1,  348,  349,  350,  256,  123,
+   -1,  125,   -1,   -1,   -1,  263,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,  290,  291,  292,  293,  294,  295,  296,  297,
+  298,   -1,  300,  301,  302,  303,   -1,  305,  306,  307,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  256,
+   -1,   -1,   -1,  321,  322,  323,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,  331,  332,  333,  334,  335,  336,   -1,
+  338,  339,  340,  341,  342,   -1,  344,   -1,   -1,   -1,
+  348,  349,  350,  290,  291,  292,  293,  294,  295,  296,
+  297,  298,   -1,  300,  301,  302,  303,   -1,  305,  306,
+  307,   40,   -1,   -1,   43,   -1,   45,   -1,   47,   -1,
+   -1,   -1,   -1,   -1,  321,  322,  323,  324,   -1,   -1,
+   59,   -1,  256,   -1,  331,  332,  333,  334,  335,  336,
+   -1,  338,  339,  340,  341,  342,   -1,  344,   -1,   -1,
+   -1,  348,  349,  350,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,  290,  291,  292,  293,
+  294,  295,  296,  297,  298,   -1,  300,  301,  302,  303,
+   -1,  305,  306,  307,   40,   -1,   -1,   43,   -1,   45,
+   -1,   47,   -1,   -1,  123,   -1,  125,  321,  322,  323,
+   -1,   -1,   -1,   59,   -1,   -1,   -1,  331,  332,  333,
+  334,  335,  336,   -1,  338,  339,  340,  341,  342,   -1,
+  344,   -1,   -1,   -1,  348,  349,  350,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   40,   -1,   -1,   43,   -1,
+   45,   -1,   47,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   59,   -1,   -1,  123,   -1,  125,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   40,   -1,   -1,   43,
+   -1,   45,   -1,   47,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   59,   -1,  256,  123,   -1,
+  125,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  290,  291,  292,  293,  294,  295,  296,  297,  298,
+   -1,  300,  301,  302,  303,   -1,  305,  306,  307,   -1,
+   40,   -1,   -1,   43,   -1,   45,   -1,   47,   -1,  123,
+   -1,  125,  321,  322,  323,   -1,   -1,   -1,   -1,   59,
+  256,   -1,  331,  332,  333,  334,  335,  336,   -1,  338,
+  339,  340,  341,  342,   -1,  344,   -1,   -1,   -1,  348,
+  349,  350,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,  290,  291,  292,  293,  294,  295,
+  296,  297,  298,   -1,  300,  301,  302,  303,   -1,  305,
+  306,  307,   -1,   -1,   -1,   -1,   -1,   40,   -1,   -1,
+   43,  256,   45,  123,   47,  321,  322,  323,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,  331,  332,  333,  334,  335,
+  336,   -1,  338,  339,  340,  341,  342,   -1,  344,   -1,
+   -1,   -1,  348,  349,  350,  290,  291,  292,  293,  294,
+  295,  296,  297,  298,   -1,  300,  301,  302,  303,   -1,
+  305,  306,  307,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,  256,   -1,   -1,   -1,  321,  322,  323,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,  331,  332,  333,  334,
+  335,  336,   -1,  338,  339,  340,  341,  342,   -1,  344,
+   -1,   -1,   -1,  348,  349,  350,  290,  291,  292,  293,
+  294,  295,  296,  297,  298,   -1,  300,  301,  302,  303,
+   -1,  305,  306,  307,   40,   -1,   -1,   43,   -1,   45,
+   -1,   47,   -1,   -1,   -1,   -1,   -1,  321,  322,  323,
+   -1,   -1,   -1,   59,   -1,   -1,  256,  331,  332,  333,
+  334,  335,  336,  263,  338,  339,  340,  341,  342,   -1,
+  344,   -1,   -1,   -1,  348,  349,  350,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+  290,  291,  292,  293,  294,  295,  296,  297,  298,   -1,
+  300,  301,  302,  303,   -1,  305,  306,  307,   40,   -1,
+   -1,   43,   -1,   45,   -1,   47,   -1,  123,   -1,  125,
+   -1,  321,  322,  323,   -1,   -1,   -1,   59,   -1,   -1,
+   -1,  331,  332,  333,  334,  335,  336,   -1,  338,  339,
+  340,  341,  342,   -1,  344,   -1,   -1,   -1,  348,  349,
+  350,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,  290,  291,   40,
+  293,   -1,   43,   -1,   45,   -1,   47,  300,  301,   -1,
+  303,   -1,  305,   -1,   -1,   -1,   -1,   -1,   59,   -1,
+   -1,  123,   -1,  125,   -1,   -1,   -1,   -1,   -1,   -1,
+  323,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  331,  332,
+  333,  334,  335,  336,   -1,  338,   -1,  340,  341,   -1,
+   -1,  344,   -1,   -1,   -1,  348,  349,  350,   -1,   -1,
+   40,   -1,   -1,   43,   -1,   45,   -1,   47,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   59,
+  256,   -1,  123,   -1,  125,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,  290,  291,  292,  293,  294,  295,
+  296,  297,  298,   -1,  300,  301,  302,  303,   -1,  305,
+  306,  307,   -1,   40,   -1,   -1,   43,   -1,   45,   -1,
+   47,   -1,   -1,  123,   -1,  321,  322,  323,   -1,   -1,
+   -1,   -1,   59,   -1,  256,  331,  332,  333,  334,  335,
+  336,   -1,  338,  339,  340,  341,  342,   -1,  344,   -1,
+   -1,   -1,  348,  349,  350,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  290,  291,
+  292,  293,  294,  295,  296,  297,  298,   -1,  300,  301,
+  302,  303,   -1,  305,  306,  307,   40,   -1,   -1,   43,
+   -1,   45,   -1,   47,   -1,  256,  123,   -1,   -1,  321,
+  322,  323,   -1,   -1,   -1,   59,   -1,   -1,   -1,  331,
+  332,  333,  334,  335,  336,   -1,  338,  339,  340,  341,
+  342,   -1,  344,   -1,   -1,   -1,  348,  349,  350,  290,
+  291,  292,  293,  294,  295,  296,  297,  298,   -1,  300,
+  301,  302,  303,   -1,  305,  306,  307,   40,   -1,   -1,
+   43,   -1,   45,   -1,   47,   -1,  256,   -1,   -1,   -1,
+  321,  322,  323,   -1,   -1,   -1,   59,   -1,   -1,  123,
+  331,  332,  333,  334,  335,  336,   -1,  338,  339,  340,
+  341,  342,   -1,  344,   -1,   -1,   -1,  348,  349,  350,
+  290,  291,  292,  293,  294,  295,  296,  297,  298,   -1,
+  300,  301,  302,  303,   -1,  305,  306,  307,   40,   -1,
+   -1,   43,   -1,   45,   -1,   47,   -1,   -1,   -1,   -1,
+   -1,  321,  322,  323,   -1,   -1,   -1,   59,   -1,  256,
+  123,  331,  332,  333,  334,  335,  336,   -1,  338,  339,
+  340,  341,  342,   -1,  344,   -1,   -1,   -1,  348,  349,
+  350,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,  290,  291,  292,  293,  294,  295,  296,
+  297,  298,   -1,  300,  301,  302,  303,   -1,  305,  306,
+  307,   40,   -1,   -1,   43,   -1,   45,   -1,   47,   -1,
+   -1,  123,   -1,   -1,  321,  322,  323,   -1,   -1,   -1,
+   59,   -1,  256,   -1,  331,  332,  333,  334,  335,  336,
+   -1,  338,  339,  340,  341,  342,   -1,  344,   -1,   -1,
+   -1,  348,  349,  350,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,  290,  291,  292,  293,
+  294,  295,  296,  297,  298,   -1,  300,  301,  302,  303,
+   -1,  305,  306,  307,   40,   -1,   -1,   43,   -1,   45,
+   -1,   47,   -1,  256,  123,   -1,   -1,  321,  322,  323,
+   -1,   -1,   -1,   59,   -1,   -1,   -1,  331,  332,  333,
+  334,  335,  336,   -1,  338,  339,  340,  341,  342,   -1,
+  344,   -1,   -1,   -1,  348,  349,  350,  290,  291,  292,
+  293,  294,  295,  296,  297,  298,   -1,  300,  301,  302,
+  303,   -1,  305,  306,  307,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,  256,   -1,   -1,   -1,  321,  322,
+  323,   -1,   -1,   -1,   -1,   -1,   -1,  123,  331,  332,
+  333,  334,  335,  336,   -1,  338,  339,  340,  341,  342,
+   -1,  344,   -1,   -1,   -1,  348,  349,  350,  290,  291,
+  292,  293,  294,  295,  296,  297,  298,   -1,  300,  301,
+  302,  303,   -1,  305,  306,  307,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  321,
+  322,  323,   -1,   -1,   -1,   -1,   -1,  256,   -1,  331,
+  332,  333,  334,  335,  336,   -1,  338,  339,  340,  341,
+  342,   -1,  344,   -1,   -1,   -1,  348,  349,  350,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  290,  291,  292,  293,  294,  295,  296,  297,  298,
+   -1,  300,  301,  302,  303,   -1,  305,  306,  307,   40,
+   41,   -1,   43,   -1,   45,   -1,   47,   -1,   -1,   -1,
+   -1,   -1,  321,  322,  323,   -1,   -1,   -1,   -1,   -1,
+  256,   -1,  331,  332,  333,  334,  335,  336,   -1,  338,
+  339,  340,  341,  342,   -1,  344,   -1,   -1,   -1,  348,
+  349,  350,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,  290,  291,  292,  293,  294,  295,
+  296,  297,  298,   -1,  300,  301,  302,  303,   -1,  305,
+  306,  307,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,  321,  322,  323,   40,   -1,
+   -1,   43,   -1,   45,   -1,  331,  332,  333,  334,  335,
+  336,   -1,  338,  339,  340,  341,  342,   59,  344,   -1,
+   -1,   63,  348,  349,  350,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   40,   41,   -1,   43,   44,   45,   -1,   -1,   -1,   -1,
+   -1,   -1,  124,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   63,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,  256,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   40,   41,   -1,   43,   44,   45,   -1,   -1,
+   -1,   -1,   -1,   -1,  124,   -1,   -1,   -1,   -1,  290,
+  291,   -1,  293,   -1,  295,   63,   -1,   -1,   -1,  300,
+  301,   -1,  303,   -1,  305,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+  321,  322,  323,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+  331,  332,  333,  334,  335,  336,   -1,  338,   -1,  340,
+  341,   -1,   -1,  344,   -1,   -1,   -1,  348,  349,  350,
+   -1,  263,   -1,   -1,   -1,  267,  124,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  280,  281,
+   -1,  283,  284,  285,  286,  287,  288,  289,  290,  291,
+   -1,  293,   40,   41,   -1,   43,   44,   45,  300,  301,
+   -1,  303,   -1,  305,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   63,   -1,   -1,   -1,   -1,
+   -1,  323,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  331,
+  332,  333,  334,  335,  336,   -1,  338,  267,  340,  341,
+   -1,   -1,  344,   -1,   -1,   -1,  348,  349,  350,   -1,
+  280,  281,   -1,  283,  284,  285,  286,  287,  288,  289,
+  290,  291,   -1,  293,   40,   41,   -1,   43,   -1,   45,
+  300,  301,   -1,  303,   -1,  305,  124,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   63,   -1,   -1,
+   -1,   -1,   -1,  323,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  331,  332,  333,  334,  335,  336,   -1,  338,  267,
+  340,  341,   -1,   -1,  344,   -1,   -1,   -1,  348,  349,
+  350,   -1,  280,  281,   -1,  283,  284,  285,  286,  287,
+  288,  289,  290,  291,   -1,  293,   40,   -1,   -1,   43,
+   44,   45,  300,  301,   -1,  303,   -1,  305,  124,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   63,
+   -1,   -1,   -1,   -1,   -1,  323,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,  331,  332,  333,  334,  335,  336,   -1,
+  338,   -1,  340,  341,   -1,   -1,  344,   -1,   -1,   -1,
+  348,  349,  350,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   40,   -1,   -1,   43,   -1,   45,   -1,   -1,  267,
+  124,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   58,
+   -1,   -1,  280,  281,   63,  283,  284,  285,  286,  287,
+  288,  289,  290,  291,   -1,  293,   -1,   -1,   -1,   -1,
+   -1,   -1,  300,  301,   -1,  303,   -1,  305,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,  323,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,  331,  332,  333,  334,  335,  336,   -1,
+  338,  267,  340,  341,   -1,  124,  344,   -1,   -1,   -1,
+  348,  349,  350,   -1,  280,  281,   -1,  283,  284,  285,
+  286,  287,  288,  289,  290,  291,   -1,  293,   40,   41,
+   -1,   43,   -1,   45,  300,  301,   -1,  303,   -1,  305,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   63,   -1,   -1,   -1,   -1,   -1,  323,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,  331,  332,  333,  334,  335,
+  336,   -1,  338,  267,  340,  341,   -1,   -1,  344,   -1,
+   -1,   -1,  348,  349,  350,   -1,  280,  281,   -1,  283,
+  284,  285,  286,  287,  288,  289,  290,  291,   -1,  293,
+   -1,   -1,   -1,   -1,   -1,   -1,  300,  301,   -1,  303,
+   -1,  305,  124,   40,   41,   -1,   43,   -1,   45,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  323,
+   -1,   -1,   -1,   -1,   -1,   -1,   63,  331,  332,  333,
+  334,  335,  336,   -1,  338,   -1,  340,  341,  267,   -1,
+  344,   -1,   -1,   -1,  348,  349,  350,   -1,   -1,   -1,
+   -1,  280,  281,   -1,  283,  284,  285,  286,  287,  288,
+  289,  290,  291,   -1,  293,   -1,   -1,   -1,   -1,   -1,
+   -1,  300,  301,   -1,  303,   -1,  305,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,  124,   -1,   -1,
+   40,   41,   -1,   43,  323,   45,   -1,   -1,   -1,   -1,
+   -1,   -1,  331,  332,  333,  334,  335,  336,   -1,  338,
+   -1,  340,  341,   63,   -1,  344,   -1,   -1,   -1,  348,
+  349,  350,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,  267,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  280,  281,
+   -1,  283,  284,  285,  286,  287,  288,  289,  290,  291,
+   -1,  293,   -1,   -1,  124,   -1,   -1,   -1,  300,  301,
+   -1,  303,   -1,  305,   -1,   40,   41,   -1,   43,   -1,
+   45,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  323,   -1,   -1,   -1,   -1,   -1,   -1,   63,  331,
+  332,  333,  334,  335,  336,   -1,  338,   -1,  340,  341,
+   -1,   -1,  344,   -1,   -1,   -1,  348,  349,  350,   -1,
+  267,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,  280,  281,   -1,  283,  284,  285,  286,
+  287,  288,  289,  290,  291,   -1,  293,   -1,   -1,   -1,
+   -1,   -1,   -1,  300,  301,   -1,  303,   -1,  305,  124,
+   40,   41,   -1,   43,   -1,   45,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,  323,   -1,   -1,   -1,
+   -1,   -1,   -1,   63,  331,  332,  333,  334,  335,  336,
+   -1,  338,   -1,  340,  341,   -1,   -1,  344,   -1,   -1,
+   -1,  348,  349,  350,   -1,   -1,   -1,  267,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+  280,  281,   -1,  283,  284,  285,  286,  287,  288,  289,
+  290,  291,   -1,  293,   -1,   -1,   -1,   -1,   -1,   -1,
+  300,  301,   -1,  303,  124,  305,   40,   -1,   -1,   43,
+   -1,   45,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,  323,   -1,   59,   -1,   -1,   -1,   63,
+   -1,  331,  332,  333,  334,  335,  336,   -1,  338,   -1,
+  340,  341,   -1,   -1,  344,   -1,   -1,   -1,  348,  349,
+  350,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,  267,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,  280,  281,   -1,  283,  284,
+  285,  286,  287,  288,  289,  290,  291,   -1,  293,   -1,
+  124,   -1,   -1,   -1,   -1,  300,  301,   -1,  303,   -1,
+  305,   -1,   40,   41,   -1,   43,   -1,   45,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  323,   -1,
+   -1,   -1,   -1,   -1,   -1,   63,  331,  332,  333,  334,
+  335,  336,   -1,  338,   -1,  340,  341,   -1,   -1,  344,
+   -1,   -1,   -1,  348,  349,  350,   -1,  267,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+  280,  281,   -1,  283,  284,  285,  286,  287,  288,  289,
+  290,  291,   -1,  293,   40,   -1,   -1,   43,   -1,   45,
+  300,  301,   -1,  303,   -1,  305,  124,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   63,   -1,   -1,
+   -1,   -1,   -1,  323,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  331,  332,  333,  334,  335,  336,   -1,  338,   -1,
+  340,  341,   -1,   -1,  344,   -1,   -1,   -1,  348,  349,
+  350,   -1,   -1,  267,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,  280,  281,   -1,  283,
+  284,  285,  286,  287,  288,  289,  290,  291,  124,  293,
+   40,   -1,   -1,   43,   -1,   45,  300,  301,   -1,  303,
+   -1,  305,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   63,   -1,   -1,   -1,   -1,   -1,  323,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,  331,  332,  333,
+  334,  335,  336,   -1,  338,   -1,  340,  341,   -1,   -1,
+  344,   -1,   -1,   -1,  348,  349,  350,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  267,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,  280,  281,  124,  283,  284,  285,  286,  287,
+  288,  289,  290,  291,   -1,  293,   40,   41,   -1,   -1,
+   44,   -1,  300,  301,   -1,  303,   -1,  305,   -1,   -1,
+   -1,   -1,   -1,   -1,   58,   59,   -1,   -1,   -1,   63,
+   -1,   -1,   -1,   -1,   -1,  323,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,  331,  332,  333,  334,  335,  336,   -1,
+  338,  267,  340,  341,   -1,   -1,  344,   -1,   -1,   -1,
+  348,  349,  350,   -1,  280,  281,   -1,  283,  284,  285,
+  286,  287,  288,  289,  290,  291,   -1,  293,   -1,   -1,
+   -1,   -1,   40,   41,  300,  301,   44,  303,   -1,  305,
+  124,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   58,   59,   -1,   -1,   -1,   63,   -1,  323,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,  331,  332,  333,  334,  335,
+  336,   -1,  338,   -1,  340,  341,   -1,   -1,  344,   -1,
+   -1,   -1,  348,  349,  350,   -1,   -1,  267,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+  280,  281,   -1,  283,  284,  285,  286,  287,  288,  289,
+  290,  291,   -1,  293,   -1,   -1,  124,   -1,   -1,   40,
+  300,  301,   43,  303,   45,  305,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,  323,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  331,  332,  333,  334,  335,  336,   -1,  338,   -1,
+  340,  341,   -1,   -1,  344,   -1,   -1,   -1,  348,  349,
+  350,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  263,
+   -1,   -1,   -1,  267,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,  280,  281,  282,   -1,
+   -1,  285,   -1,  124,   -1,  289,  290,  291,   -1,  293,
+   40,   -1,   -1,   43,   -1,   45,  300,  301,   -1,  303,
+   -1,  305,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  323,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,  331,  332,  333,
+  334,  335,  336,   -1,  338,  263,  340,  341,   -1,  267,
+  344,   -1,   -1,   -1,  348,  349,  350,   -1,   -1,   -1,
+   -1,   -1,  280,  281,  282,   -1,   -1,  285,   -1,   -1,
+   -1,  289,  290,  291,   -1,  293,   40,   -1,   -1,   43,
+   -1,   45,  300,  301,  124,  303,   -1,  305,   -1,   -1,
+   -1,   -1,   -1,   -1,   58,   -1,   -1,   -1,   -1,   63,
+   -1,   -1,   -1,   -1,   -1,  323,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,  331,  332,  333,  334,  335,  336,   -1,
+  338,   -1,  340,  341,   -1,   -1,  344,   -1,   -1,   -1,
+  348,  349,  350,   -1,   -1,   -1,  267,   -1,   -1,   40,
+   -1,   -1,   43,   -1,   45,   -1,   47,   -1,   -1,  280,
+   -1,   -1,  283,  284,  285,  286,  287,  288,  289,  290,
+  291,   -1,  293,   -1,   -1,   -1,   -1,   -1,   -1,  300,
+  301,   -1,  303,   -1,  305,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,  323,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+  331,  332,  333,  334,  335,  336,   -1,  338,   -1,  340,
+  341,   40,   -1,  344,   43,   -1,   45,  348,  349,  350,
+   -1,   -1,  123,   -1,   -1,   -1,   -1,  267,   -1,   -1,
+   -1,   -1,   -1,   -1,   63,   40,   -1,   -1,   43,   -1,
+   45,   -1,   47,  283,  284,  285,  286,  287,  288,  289,
+  290,  291,   -1,  293,   59,   -1,   -1,   -1,   -1,   -1,
+  300,  301,   -1,  303,   -1,  305,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,  323,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  331,  332,  333,  334,  335,  336,   -1,  338,   -1,
+  340,  341,   -1,  267,  344,   -1,   -1,   -1,  348,  349,
+  350,   -1,   -1,   -1,   -1,   40,  280,  281,   43,   -1,
+   45,   -1,   47,   -1,   -1,  289,  290,  291,   -1,  293,
+   -1,   -1,   -1,   -1,   -1,   -1,  300,  301,   -1,  303,
+   -1,  305,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  323,
+  261,  262,   -1,   -1,   -1,   -1,   -1,  331,  332,  333,
+  334,  335,  336,   -1,  338,   -1,  340,  341,   -1,   -1,
+  344,   -1,   -1,   -1,  348,  349,  350,   -1,   -1,  290,
+  291,   -1,  293,   -1,   -1,   -1,   -1,   -1,  299,  300,
+  301,   -1,  303,   40,  305,   -1,   43,   -1,   45,   -1,
+   47,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,  323,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+  331,  332,  333,  334,  335,  336,   -1,  338,  267,  340,
+  341,   -1,   -1,  344,   -1,   -1,   -1,  348,  349,  350,
+   -1,  280,  281,   -1,   -1,   -1,   -1,   -1,  263,   -1,
+  289,  290,  291,   -1,  293,   -1,   -1,   -1,   -1,   -1,
+   40,  300,  301,   43,  303,   45,  305,   47,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,  290,  291,   -1,  293,   -1,
+   -1,   -1,   -1,   -1,  323,  300,  301,   -1,  303,   -1,
+  305,   -1,  331,  332,  333,  334,  335,  336,   -1,  338,
+   -1,  340,  341,   -1,   -1,  344,   -1,   -1,  323,  348,
+  349,  350,   -1,   -1,   -1,   -1,  331,  332,  333,  334,
+  335,  336,   -1,  338,   -1,  340,  341,   -1,  263,  344,
+   -1,   -1,   -1,  348,  349,  350,   40,   -1,   -1,   43,
+   -1,   45,   -1,   47,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,  290,  291,   -1,  293,   -1,
+   -1,   -1,   -1,   -1,   -1,  300,  301,   -1,  303,   -1,
+  305,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  323,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,  331,  332,  333,  334,
+  335,  336,   -1,  338,   -1,  340,  341,   -1,   -1,  344,
+   -1,   -1,   -1,  348,  349,  350,  263,   -1,   40,   -1,
+   -1,   43,   -1,   45,   -1,   47,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   40,  290,  291,   43,  293,   45,   -1,   47,
+   -1,   -1,   -1,  300,  301,   -1,  303,   -1,  305,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,  323,   -1,   -1,   -1,
+   -1,   -1,   -1,  263,  331,  332,  333,  334,  335,  336,
+   -1,  338,   -1,  340,  341,   -1,   -1,  344,   -1,   -1,
+   -1,  348,  349,  350,   -1,   -1,   -1,   -1,   -1,   40,
+  290,  291,   43,  293,   45,   -1,   47,   -1,   -1,   -1,
+  300,  301,   -1,  303,   -1,  305,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   40,   -1,   -1,   43,   -1,   45,   -1,
+   47,   -1,   -1,  323,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  331,  332,  333,  334,  335,  336,   -1,  338,  263,
+  340,  341,   -1,   -1,  344,   -1,   -1,   -1,  348,  349,
+  350,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   40,  290,  291,   43,  293,
+   45,   -1,   47,   -1,   -1,   -1,  300,  301,   -1,  303,
+   -1,  305,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   40,
+   -1,   -1,   43,   -1,   45,   -1,   47,   -1,   -1,  323,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,  331,  332,  333,
+  334,  335,  336,   -1,  338,   -1,  340,  341,   -1,   -1,
+  344,  263,   -1,   -1,  348,  349,  350,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   40,   -1,   -1,   43,  263,   45,   -1,  290,  291,
+   -1,  293,   -1,   -1,   -1,   -1,   -1,   -1,  300,  301,
+   -1,  303,   -1,  305,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,  290,  291,   -1,  293,   -1,   -1,   -1,   -1,
+   -1,  323,  300,  301,   -1,  303,   -1,  305,   -1,  331,
+  332,  333,  334,  335,  336,   -1,  338,   -1,  340,  341,
+   -1,   -1,  344,   -1,   -1,  323,  348,  349,  350,   -1,
+   -1,   -1,   -1,  331,  332,  333,  334,  335,  336,   -1,
+  338,   -1,  340,  341,   -1,   -1,  344,   -1,   -1,   -1,
+  348,  349,  350,   -1,   -1,   -1,   -1,   -1,   -1,  290,
+  291,   -1,  293,   -1,   -1,   -1,   -1,   -1,   -1,  300,
+  301,   -1,  303,   -1,  305,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,  290,  291,   -1,  293,   -1,   -1,   -1,
+   -1,   -1,  323,  300,  301,   -1,  303,   -1,  305,   -1,
+  331,  332,  333,  334,  335,  336,   -1,  338,   -1,  340,
+  341,   -1,   -1,  344,   -1,   -1,  323,  348,  349,  350,
+   -1,   -1,   -1,   -1,  331,  332,  333,  334,  335,  336,
+   -1,  338,   -1,  340,  341,  290,  291,  344,  293,   -1,
+   -1,  348,  349,  350,   -1,  300,  301,   -1,  303,   -1,
+  305,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  290,
+  291,   -1,  293,   -1,   -1,   -1,   -1,   -1,  323,  300,
+  301,   -1,  303,   -1,  305,   -1,  331,  332,  333,  334,
+  335,  336,   -1,  338,   -1,  340,  341,   -1,   -1,  344,
+   -1,   -1,  323,  348,  349,  350,   -1,   -1,   -1,   -1,
+  331,  332,  333,  334,  335,  336,   -1,  338,   -1,  340,
+  341,  290,  291,  344,  293,   -1,   -1,  348,  349,  350,
+   -1,  300,  301,   -1,  303,   -1,  305,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,  323,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,  331,  332,  333,  334,  335,  336,   -1,   -1,
+   -1,  340,  341,   -1,   -1,  344,   -1,   -1,   -1,  348,
+  349,  350,
+};
+#if YYBTYACC
+static const YYINT yyctable[] = {                        -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,
+};
 #endif
-#ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
-# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
-# define YY_IGNORE_MAYBE_UNINITIALIZED_END
-#endif
-#ifndef YY_INITIAL_VALUE
-# define YY_INITIAL_VALUE(Value) /* Nothing. */
-#endif
-
-#if defined __cplusplus && defined __GNUC__ && ! defined __ICC && 6 <= __GNUC__
-# define YY_IGNORE_USELESS_CAST_BEGIN                          \
-    _Pragma ("GCC diagnostic push")                            \
-    _Pragma ("GCC diagnostic ignored \"-Wuseless-cast\"")
-# define YY_IGNORE_USELESS_CAST_END            \
-    _Pragma ("GCC diagnostic pop")
-#endif
-#ifndef YY_IGNORE_USELESS_CAST_BEGIN
-# define YY_IGNORE_USELESS_CAST_BEGIN
-# define YY_IGNORE_USELESS_CAST_END
+#define YYFINAL 4
+#ifndef YYDEBUG
+#define YYDEBUG 0
 #endif
+#define YYMAXTOKEN 351
+#define YYUNDFTOKEN 402
+#define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a))
+#if YYDEBUG
+static const char *const yyname[] = {
 
-
-#define YY_ASSERT(E) ((void) (0 && (E)))
-
-#if !defined yyoverflow
-
-/* The parser invokes alloca or malloc; define the necessary symbols.  */
-
-# ifdef YYSTACK_USE_ALLOCA
-#  if YYSTACK_USE_ALLOCA
-#   ifdef __GNUC__
-#    define YYSTACK_ALLOC __builtin_alloca
-#   elif defined __BUILTIN_VA_ARG_INCR
-#    include <alloca.h> /* INFRINGES ON USER NAME SPACE */
-#   elif defined _AIX
-#    define YYSTACK_ALLOC __alloca
-#   elif defined _MSC_VER
-#    include <malloc.h> /* INFRINGES ON USER NAME SPACE */
-#    define alloca _alloca
-#   else
-#    define YYSTACK_ALLOC alloca
-#    if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS
-#     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
-      /* Use EXIT_SUCCESS as a witness for stdlib.h.  */
-#     ifndef EXIT_SUCCESS
-#      define EXIT_SUCCESS 0
-#     endif
-#    endif
-#   endif
-#  endif
-# endif
-
-# ifdef YYSTACK_ALLOC
-   /* Pacify GCC's 'empty if-body' warning.  */
-#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
-#  ifndef YYSTACK_ALLOC_MAXIMUM
-    /* The OS might guarantee only one guard page at the bottom of the stack,
-       and a page size can be as small as 4096 bytes.  So we cannot safely
-       invoke alloca (N) if N exceeds 4096.  Use a slightly smaller number
-       to allow for a few compiler-allocated temporary stack slots.  */
-#   define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
-#  endif
-# else
-#  define YYSTACK_ALLOC YYMALLOC
-#  define YYSTACK_FREE YYFREE
-#  ifndef YYSTACK_ALLOC_MAXIMUM
-#   define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
-#  endif
-#  if (defined __cplusplus && ! defined EXIT_SUCCESS \
-       && ! ((defined YYMALLOC || defined malloc) \
-             && (defined YYFREE || defined free)))
-#   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
-#   ifndef EXIT_SUCCESS
-#    define EXIT_SUCCESS 0
-#   endif
-#  endif
-#  ifndef YYMALLOC
-#   define YYMALLOC malloc
-#   if ! defined malloc && ! defined EXIT_SUCCESS
-void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
-#   endif
-#  endif
-#  ifndef YYFREE
-#   define YYFREE free
-#   if ! defined free && ! defined EXIT_SUCCESS
-void free (void *); /* INFRINGES ON USER NAME SPACE */
-#   endif
-#  endif
-# endif
-#endif /* !defined yyoverflow */
-
-#if (! defined yyoverflow \
-     && (! defined __cplusplus \
-         || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
-
-/* A type that is properly aligned for any stack member.  */
-union yyalloc
-{
-  yy_state_t yyss_alloc;
-  YYSTYPE yyvs_alloc;
+"$end",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+"'%'",0,0,"'('","')'","'*'","'+'","','","'-'",0,"'/'",0,0,0,0,0,0,0,0,0,0,"':'",
+"';'",0,0,0,"'?'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'['",0,
+"']'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'{'","'|'",
+"'}'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,"error","FIRSTTOKEN","PROGRAM","PASTAT","PASTAT2",
+"XBEGIN","XEND","NL","ARRAY","MATCH","NOTMATCH","MATCHOP","FINAL","DOT","ALL",
+"CCL","NCCL","CHAR","OR","STAR","QUEST","PLUS","EMPTYRE","ZERO","AND","BOR",
+"APPEND","EQ","GE","GT","LE","LT","NE","IN","ARG","BLTIN","BREAK","CLOSE",
+"CONTINUE","DELETE","DO","EXIT","FOR","FUNC","SUB","GSUB","IF","INDEX",
+"LSUBSTR","MATCHFCN","NEXT","NEXTFILE","ADD","MINUS","MULT","DIVIDE","MOD",
+"ASSIGN","ASGNOP","ADDEQ","SUBEQ","MULTEQ","DIVEQ","MODEQ","POWEQ","PRINT",
+"PRINTF","SPRINTF","ELSE","INTEST","CONDEXPR","POSTINCR","PREINCR","POSTDECR",
+"PREDECR","VAR","IVAR","VARNF","CALL","NUMBER","STRING","REGEXPR","GETLINE",
+"RETURN","SPLIT","SUBSTR","WHILE","CAT","NOT","UMINUS","UPLUS","POWER","DECR",
+"INCR","INDIRECT","LASTTOKEN","$accept","program","pas","pattern","ppattern",
+"plist","pplist","patlist","prarg","term","re","pa_pat","pa_stat","pa_stats",
+"reg_expr","simple_stmt","opt_simple_stmt","stmt","stmtlist","var","varname",
+"funcname","varlist","for","if","else","while","do","st","pst","opt_pst",
+"lbrace","rbrace","rparen","comma","nl","opt_nl","and","bor","subop","print",
+"string","$$1","$$2","$$3","$$4","$$5","$$6","$$7","$$8","illegal-symbol",
 };
+static const char *const yyrule[] = {
+"$accept : program",
+"program : pas",
+"program : error",
+"and : AND",
+"and : and NL",
+"bor : BOR",
+"bor : bor NL",
+"comma : ','",
+"comma : comma NL",
+"do : DO",
+"do : do NL",
+"else : ELSE",
+"else : else NL",
+"$$1 :",
+"for : FOR '(' opt_simple_stmt ';' opt_nl pattern ';' opt_nl opt_simple_stmt rparen $$1 stmt",
+"$$2 :",
+"for : FOR '(' opt_simple_stmt ';' ';' opt_nl opt_simple_stmt rparen $$2 stmt",
+"$$3 :",
+"for : FOR '(' varname IN varname rparen $$3 stmt",
+"funcname : VAR",
+"funcname : CALL",
+"if : IF '(' pattern rparen",
+"lbrace : '{'",
+"lbrace : lbrace NL",
+"nl : NL",
+"nl : nl NL",
+"opt_nl :",
+"opt_nl : nl",
+"opt_pst :",
+"opt_pst : pst",
+"opt_simple_stmt :",
+"opt_simple_stmt : simple_stmt",
+"pas : opt_pst",
+"pas : opt_pst pa_stats opt_pst",
+"pa_pat : pattern",
+"pa_stat : pa_pat",
+"pa_stat : pa_pat lbrace stmtlist '}'",
+"pa_stat : pa_pat ',' opt_nl pa_pat",
+"pa_stat : pa_pat ',' opt_nl pa_pat lbrace stmtlist '}'",
+"pa_stat : lbrace stmtlist '}'",
+"pa_stat : XBEGIN lbrace stmtlist '}'",
+"pa_stat : XEND lbrace stmtlist '}'",
+"$$4 :",
+"pa_stat : FUNC funcname '(' varlist rparen $$4 lbrace stmtlist '}'",
+"pa_stats : pa_stat",
+"pa_stats : pa_stats opt_pst pa_stat",
+"patlist : pattern",
+"patlist : patlist comma pattern",
+"ppattern : var ASGNOP ppattern",
+"ppattern : ppattern '?' ppattern ':' ppattern",
+"ppattern : ppattern bor ppattern",
+"ppattern : ppattern and ppattern",
+"ppattern : ppattern MATCHOP reg_expr",
+"ppattern : ppattern MATCHOP ppattern",
+"ppattern : ppattern IN varname",
+"ppattern : '(' plist ')' IN varname",
+"ppattern : ppattern term",
+"ppattern : re",
+"ppattern : term",
+"pattern : var ASGNOP pattern",
+"pattern : pattern '?' pattern ':' pattern",
+"pattern : pattern bor pattern",
+"pattern : pattern and pattern",
+"pattern : pattern EQ pattern",
+"pattern : pattern GE pattern",
+"pattern : pattern GT pattern",
+"pattern : pattern LE pattern",
+"pattern : pattern LT pattern",
+"pattern : pattern NE pattern",
+"pattern : pattern MATCHOP reg_expr",
+"pattern : pattern MATCHOP pattern",
+"pattern : pattern IN varname",
+"pattern : '(' plist ')' IN varname",
+"pattern : pattern '|' GETLINE var",
+"pattern : pattern '|' GETLINE",
+"pattern : pattern term",
+"pattern : re",
+"pattern : term",
+"plist : pattern comma pattern",
+"plist : plist comma pattern",
+"pplist : ppattern",
+"pplist : pplist comma ppattern",
+"prarg :",
+"prarg : pplist",
+"prarg : '(' plist ')'",
+"print : PRINT",
+"print : PRINTF",
+"pst : NL",
+"pst : ';'",
+"pst : pst NL",
+"pst : pst ';'",
+"rbrace : '}'",
+"rbrace : rbrace NL",
+"re : reg_expr",
+"re : NOT re",
+"$$5 :",
+"reg_expr : '/' $$5 REGEXPR '/'",
+"rparen : ')'",
+"rparen : rparen NL",
+"simple_stmt : print prarg '|' term",
+"simple_stmt : print prarg APPEND term",
+"simple_stmt : print prarg GT term",
+"simple_stmt : print prarg",
+"simple_stmt : DELETE varname '[' patlist ']'",
+"simple_stmt : DELETE varname",
+"simple_stmt : pattern",
+"simple_stmt : error",
+"st : nl",
+"st : ';' opt_nl",
+"stmt : BREAK st",
+"stmt : CONTINUE st",
+"$$6 :",
+"$$7 :",
+"stmt : do $$6 stmt $$7 WHILE '(' pattern ')' st",
+"stmt : EXIT pattern st",
+"stmt : EXIT st",
+"stmt : for",
+"stmt : if stmt else stmt",
+"stmt : if stmt",
+"stmt : lbrace stmtlist rbrace",
+"stmt : NEXT st",
+"stmt : NEXTFILE st",
+"stmt : RETURN pattern st",
+"stmt : RETURN st",
+"stmt : simple_stmt st",
+"$$8 :",
+"stmt : while $$8 stmt",
+"stmt : ';' opt_nl",
+"stmtlist : stmt",
+"stmtlist : stmtlist stmt",
+"subop : SUB",
+"subop : GSUB",
+"string : STRING",
+"string : string STRING",
+"term : term '/' ASGNOP term",
+"term : term '+' term",
+"term : term '-' term",
+"term : term '*' term",
+"term : term '/' term",
+"term : term '%' term",
+"term : term POWER term",
+"term : '-' term",
+"term : '+' term",
+"term : NOT term",
+"term : BLTIN '(' ')'",
+"term : BLTIN '(' patlist ')'",
+"term : BLTIN",
+"term : CALL '(' ')'",
+"term : CALL '(' patlist ')'",
+"term : CLOSE term",
+"term : DECR var",
+"term : INCR var",
+"term : var DECR",
+"term : var INCR",
+"term : GETLINE var LT term",
+"term : GETLINE LT term",
+"term : GETLINE var",
+"term : GETLINE",
+"term : INDEX '(' pattern comma pattern ')'",
+"term : INDEX '(' pattern comma reg_expr ')'",
+"term : '(' pattern ')'",
+"term : MATCHFCN '(' pattern comma reg_expr ')'",
+"term : MATCHFCN '(' pattern comma pattern ')'",
+"term : NUMBER",
+"term : SPLIT '(' pattern comma varname comma pattern ')'",
+"term : SPLIT '(' pattern comma varname comma reg_expr ')'",
+"term : SPLIT '(' pattern comma varname ')'",
+"term : SPRINTF '(' patlist ')'",
+"term : string",
+"term : subop '(' reg_expr comma pattern ')'",
+"term : subop '(' pattern comma pattern ')'",
+"term : subop '(' reg_expr comma pattern comma var ')'",
+"term : subop '(' pattern comma pattern comma var ')'",
+"term : SUBSTR '(' pattern comma pattern comma pattern ')'",
+"term : SUBSTR '(' pattern comma pattern ')'",
+"term : var",
+"var : varname",
+"var : varname '[' patlist ']'",
+"var : IVAR",
+"var : INDIRECT term",
+"varlist :",
+"varlist : VAR",
+"varlist : varlist comma VAR",
+"varname : VAR",
+"varname : ARG",
+"varname : VARNF",
+"while : WHILE '(' pattern rparen",
 
-/* The size of the maximum gap between one aligned stack and the next.  */
-# define YYSTACK_GAP_MAXIMUM (YYSIZEOF (union yyalloc) - 1)
-
-/* The size of an array large to enough to hold all stacks, each with
-   N elements.  */
-# define YYSTACK_BYTES(N) \
-     ((N) * (YYSIZEOF (yy_state_t) + YYSIZEOF (YYSTYPE)) \
-      + YYSTACK_GAP_MAXIMUM)
-
-# define YYCOPY_NEEDED 1
-
-/* Relocate STACK from its old location to the new one.  The
-   local variables YYSIZE and YYSTACKSIZE give the old and new number of
-   elements in the stack, and YYPTR gives the new location of the
-   stack.  Advance YYPTR to a properly aligned location for the next
-   stack.  */
-# define YYSTACK_RELOCATE(Stack_alloc, Stack)                           \
-    do                                                                  \
-      {                                                                 \
-        YYPTRDIFF_T yynewbytes;                                         \
-        YYCOPY (&yyptr->Stack_alloc, Stack, yysize);                    \
-        Stack = &yyptr->Stack_alloc;                                    \
-        yynewbytes = yystacksize * YYSIZEOF (*Stack) + YYSTACK_GAP_MAXIMUM; \
-        yyptr += yynewbytes / YYSIZEOF (*yyptr);                        \
-      }                                                                 \
-    while (0)
-
-#endif
-
-#if defined YYCOPY_NEEDED && YYCOPY_NEEDED
-/* Copy COUNT objects from SRC to DST.  The source and destination do
-   not overlap.  */
-# ifndef YYCOPY
-#  if defined __GNUC__ && 1 < __GNUC__
-#   define YYCOPY(Dst, Src, Count) \
-      __builtin_memcpy (Dst, Src, YY_CAST (YYSIZE_T, (Count)) * sizeof (*(Src)))
-#  else
-#   define YYCOPY(Dst, Src, Count)              \
-      do                                        \
-        {                                       \
-          YYPTRDIFF_T yyi;                      \
-          for (yyi = 0; yyi < (Count); yyi++)   \
-            (Dst)[yyi] = (Src)[yyi];            \
-        }                                       \
-      while (0)
-#  endif
-# endif
-#endif /* !YYCOPY_NEEDED */
-
-/* YYFINAL -- State number of the termination state.  */
-#define YYFINAL  8
-/* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   4608
-
-/* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  114
-/* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  50
-/* YYNRULES -- Number of rules.  */
-#define YYNRULES  187
-/* YYNSTATES -- Number of states.  */
-#define YYNSTATES  370
-
-/* YYMAXUTOK -- Last valid token kind.  */
-#define YYMAXUTOK   352
-
-
-/* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM
-   as returned by yylex, with out-of-bounds checking.  */
-#define YYTRANSLATE(YYX)                                \
-  (0 <= (YYX) && (YYX) <= YYMAXUTOK                     \
-   ? YY_CAST (yysymbol_kind_t, yytranslate[YYX])        \
-   : YYSYMBOL_YYUNDEF)
-
-/* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM
-   as returned by yylex.  */
-static const yytype_int8 yytranslate[] =
-{
-       0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,   105,     2,     2,
-      12,    16,   104,   102,    10,   103,     2,    15,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,    95,    14,
-       2,     2,     2,    94,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,    18,     2,    19,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,    11,    13,    17,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     1,     2,     3,     4,
-       5,     6,     7,     8,     9,    20,    21,    22,    23,    24,
-      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
-      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
-      65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
-      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
-      85,    86,    87,    88,    89,    90,    91,    92,    93,    96,
-      97,    98,    99,   100,   101,   106,   107,   108,   109,   110,
-     111,   112,   113
 };
+#endif
 
 #if YYDEBUG
-/* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
-static const yytype_int16 yyrline[] =
-{
-       0,    99,    99,   101,   105,   105,   109,   109,   113,   113,
-     117,   117,   121,   121,   125,   125,   127,   127,   129,   129,
-     134,   135,   139,   143,   143,   147,   147,   151,   152,   156,
-     157,   162,   163,   167,   168,   172,   176,   177,   178,   179,
-     180,   181,   183,   185,   185,   190,   191,   195,   196,   200,
-     201,   203,   205,   207,   208,   213,   214,   215,   216,   217,
-     221,   222,   224,   226,   228,   229,   230,   231,   232,   233,
-     234,   235,   240,   241,   242,   245,   248,   249,   250,   254,
-     255,   259,   260,   264,   265,   266,   270,   270,   274,   274,
-     274,   274,   278,   278,   282,   284,   288,   288,   292,   292,
-     296,   299,   302,   305,   306,   307,   308,   309,   313,   314,
-     318,   320,   322,   322,   322,   324,   325,   326,   327,   328,
-     329,   330,   333,   336,   337,   338,   339,   339,   340,   344,
-     345,   349,   349,   353,   354,   358,   359,   360,   361,   362,
-     363,   364,   365,   366,   367,   368,   369,   370,   371,   372,
-     373,   374,   375,   376,   377,   378,   379,   380,   381,   382,
-     384,   387,   388,   390,   395,   396,   398,   400,   402,   403,
-     404,   406,   411,   413,   418,   420,   422,   426,   427,   428,
-     429,   433,   434,   435,   441,   442,   443,   448
-};
+int      yydebug;
 #endif
 
-/** Accessing symbol of state STATE.  */
-#define YY_ACCESSING_SYMBOL(State) YY_CAST (yysymbol_kind_t, yystos[State])
-
-#if YYDEBUG || 0
-/* The user-facing name of the symbol whose (internal) number is
-   YYSYMBOL.  No bounds checking.  */
-static const char *yysymbol_name (yysymbol_kind_t yysymbol) YY_ATTRIBUTE_UNUSED;
-
-/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
-   First, the terminals, then, starting at YYNTOKENS, nonterminals.  */
-static const char *const yytname[] =
-{
-  "\"end of file\"", "error", "\"invalid token\"", "FIRSTTOKEN",
-  "PROGRAM", "PASTAT", "PASTAT2", "XBEGIN", "XEND", "NL", "','", "'{'",
-  "'('", "'|'", "';'", "'/'", "')'", "'}'", "'['", "']'", "ARRAY", "MATCH",
-  "NOTMATCH", "MATCHOP", "FINAL", "DOT", "ALL", "CCL", "NCCL", "CHAR",
-  "OR", "STAR", "QUEST", "PLUS", "EMPTYRE", "ZERO", "AND", "BOR", "APPEND",
-  "EQ", "GE", "GT", "LE", "LT", "NE", "IN", "ARG", "BLTIN", "BREAK",
-  "CLOSE", "CONTINUE", "DELETE", "DO", "EXIT", "FOR", "FUNC", "SUB",
-  "GSUB", "IF", "INDEX", "LSUBSTR", "MATCHFCN", "NEXT", "NEXTFILE", "ADD",
-  "MINUS", "MULT", "DIVIDE", "MOD", "ASSIGN", "ASGNOP", "ADDEQ", "SUBEQ",
-  "MULTEQ", "DIVEQ", "MODEQ", "POWEQ", "PRINT", "PRINTF", "SPRINTF",
-  "ELSE", "INTEST", "CONDEXPR", "POSTINCR", "PREINCR", "POSTDECR",
-  "PREDECR", "VAR", "IVAR", "VARNF", "CALL", "NUMBER", "STRING", "REGEXPR",
-  "'?'", "':'", "GETLINE", "RETURN", "SPLIT", "SUBSTR", "WHILE", "CAT",
-  "'+'", "'-'", "'*'", "'%'", "NOT", "UMINUS", "UPLUS", "POWER", "DECR",
-  "INCR", "INDIRECT", "LASTTOKEN", "$accept", "program", "and", "bor",
-  "comma", "do", "else", "for", "$@1", "$@2", "$@3", "funcname", "if",
-  "lbrace", "nl", "opt_nl", "opt_pst", "opt_simple_stmt", "pas", "pa_pat",
-  "pa_stat", "$@4", "pa_stats", "patlist", "ppattern", "pattern", "plist",
-  "pplist", "prarg", "print", "pst", "rbrace", "re", "reg_expr", "$@5",
-  "rparen", "simple_stmt", "st", "stmt", "$@6", "$@7", "$@8", "stmtlist",
-  "subop", "string", "term", "var", "varlist", "varname", "while", YY_NULLPTR
-};
-
-static const char *
-yysymbol_name (yysymbol_kind_t yysymbol)
-{
-  return yytname[yysymbol];
-}
+int      yyerrflag;
+int      yychar;
+YYSTYPE  yyval;
+YYSTYPE  yylval;
+int      yynerrs;
+
+#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
+YYLTYPE  yyloc; /* position returned by actions */
+YYLTYPE  yylloc; /* position from the lexer */
 #endif
 
-#define YYPACT_NINF (-316)
-
-#define yypact_value_is_default(Yyn) \
-  ((Yyn) == YYPACT_NINF)
-
-#define YYTABLE_NINF (-32)
-
-#define yytable_value_is_error(Yyn) \
-  ((Yyn) == YYTABLE_NINF)
-
-/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
-   STATE-NUM.  */
-static const yytype_int16 yypact[] =
-{
-     635,  -316,  -316,  -316,    10,  1580,  -316,   151,  -316,     3,
-       3,  -316,  4178,  -316,  -316,    29,  4496,    18,  -316,  -316,
-      40,    44,    56,  -316,  -316,  -316,    71,  -316,  -316,    81,
-      95,   104,  4496,  4496,  4226,   261,   261,  4496,   763,    76,
-    -316,   157,  3511,  -316,  -316,   106,   -62,    -3,   -34,   117,
-    -316,  -316,   763,   763,  2184,    39,    53,  4014,  4178,  4496,
-      -3,    32,  -316,  -316,   113,  4178,  4178,  4178,  4072,  4496,
-     115,  4178,  4178,    65,    65,  -316,    65,  -316,  -316,  -316,
-    -316,  -316,   166,   158,   158,   -14,  -316,  1733,   164,   178,
-     158,   158,  -316,  -316,  1733,   186,   190,  -316,  1386,   763,
-    3511,  4284,   158,  -316,   832,  -316,   166,   763,  1580,   108,
-    4178,  -316,  -316,  4178,  4178,  4178,  4178,  4178,  4178,   -14,
-    4178,  1791,  1849,    -3,  4178,  -316,  4332,  4496,  4496,  4496,
-    4496,  4496,  4178,  -316,  -316,  4178,   901,   970,  -316,  -316,
-    1907,   155,  1907,   192,  -316,    62,  3511,  2680,   116,  2588,
-    2588,    80,  -316,    87,    -3,  4496,  2588,  2588,  -316,   196,
-    -316,   166,   196,  -316,  -316,   191,  1675,  -316,  1454,  4178,
-    -316,  -316,  1675,  -316,  4178,  -316,  1386,   130,  1039,  4178,
-    3894,   201,    57,  -316,    -3,   -30,  -316,  -316,  -316,  1386,
-    4178,  1108,  -316,   261,  3765,  -316,  3765,  3765,  3765,  3765,
-    3765,  3765,  -316,  2772,  -316,  3684,  -316,  3603,  2588,   201,
-    4496,    65,    43,    43,    65,    65,    65,  3511,    27,  -316,
-    -316,  -316,  3511,   -14,  3511,  -316,  -316,  1907,  -316,   107,
-    1907,  1907,  -316,  -316,    -3,     2,  1907,  -316,  -316,  4178,
-    -316,   203,  -316,   -11,  2864,  -316,  2864,  -316,  -316,  1179,
-    -316,   206,   128,  4400,   -14,  4400,  1965,  2023,    -3,  2081,
-    4496,  4496,  4496,  4400,  -316,     3,  -316,  -316,  4178,  1907,
-    1907,    -3,  -316,  -316,  3511,  -316,     6,   210,  2956,   204,
-    3048,   213,   143,  2287,    47,   188,   -14,   210,   210,   132,
-    -316,  -316,  -316,   193,  4178,  4448,  -316,  -316,  3813,  4120,
-    3966,  3894,    -3,    -3,    -3,  3894,   763,  3511,  2390,  2493,
-    -316,  -316,     3,  -316,  -316,  -316,  -316,  -316,  1907,  -316,
-    1907,  -316,   166,  4178,   217,   223,   -14,   147,  4400,  1248,
-    -316,    33,  -316,    33,   763,  3140,   220,  3232,  1522,  3327,
-     210,  4178,  -316,   193,  3894,  -316,   226,   232,  1317,  -316,
-    -316,  -316,   217,   166,  1386,  3419,  -316,  -316,  -316,   210,
-    1522,  -316,   158,  1386,   217,  -316,  -316,   210,  1386,  -316
-};
-
-/* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
-   Performed when YYTABLE does not specify something else to do.  Zero
-   means the default is an error.  */
-static const yytype_uint8 yydefact[] =
-{
-       0,     3,    88,    89,     0,    33,     2,    30,     1,     0,
-       0,    23,     0,    96,   185,   147,     0,     0,   131,   132,
-       0,     0,     0,   184,   179,   186,     0,   164,   133,   158,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    36,
-      45,    29,    35,    77,    94,     0,   169,    78,   176,   177,
-      90,    91,     0,     0,     0,     0,     0,     0,     0,     0,
-     150,   176,    20,    21,     0,     0,     0,     0,     0,     0,
-     157,     0,     0,   143,   142,    95,   144,   151,   152,   180,
-     107,    24,    27,     0,     0,     0,    10,     0,     0,     0,
-       0,     0,    86,    87,     0,     0,   112,   117,     0,     0,
-     106,    83,     0,   129,     0,   126,    27,     0,    34,     0,
-       0,     4,     6,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    76,     0,   134,     0,     0,     0,     0,
-       0,     0,     0,   153,   154,     0,     0,     0,     8,   161,
-       0,     0,     0,     0,   145,     0,    47,     0,   181,     0,
-       0,     0,   148,     0,   156,     0,     0,     0,    25,    28,
-     128,    27,   108,   110,   111,   105,     0,   116,     0,     0,
-     121,   122,     0,   124,     0,    11,     0,   119,     0,     0,
-      81,    84,   103,    58,    59,   176,   125,    40,   130,     0,
-       0,     0,    46,    75,    71,    70,    64,    65,    66,    67,
-      68,    69,    72,     0,     5,    63,     7,    62,     0,    94,
-       0,   139,   136,   137,   138,   140,   141,    60,     0,    41,
-      42,     9,    79,     0,    80,    97,   146,     0,   182,     0,
-       0,     0,   168,   149,   155,     0,     0,    26,   109,     0,
-     115,     0,    32,   177,     0,   123,     0,   113,    12,     0,
-      92,   120,     0,     0,     0,     0,     0,     0,    57,     0,
-       0,     0,     0,     0,   127,    38,    37,    74,     0,     0,
-       0,   135,   178,    73,    48,    98,     0,    43,     0,    94,
-       0,    94,     0,     0,     0,    27,     0,    22,   187,     0,
-      13,   118,    93,    85,     0,    54,    53,    55,     0,    52,
-      51,    82,   100,   101,   102,    49,     0,    61,     0,     0,
-     183,    99,     0,   159,   160,   163,   162,   167,     0,   175,
-       0,   104,    27,     0,     0,     0,     0,     0,     0,     0,
-     171,     0,   170,     0,     0,     0,    94,     0,     0,     0,
-      18,     0,    56,     0,    50,    39,     0,     0,     0,   165,
-     166,   174,     0,    27,     0,     0,   173,   172,    44,    16,
-       0,    19,     0,     0,     0,   114,    17,    14,     0,    15
-};
-
-/* YYPGOTO[NTERM-NUM].  */
-static const yytype_int16 yypgoto[] =
-{
-    -316,  -316,    -1,    46,     5,  -316,  -316,  -316,  -316,  -316,
-    -316,  -316,  -316,    -4,   -73,   -67,   209,  -315,  -316,    61,
-     145,  -316,  -316,   -43,  -192,   482,  -175,  -316,  -316,  -316,
-    -316,  -316,   -32,  -102,  -316,  -215,  -165,   -40,   381,  -316,
-    -316,  -316,   -25,  -316,  -316,   236,   -16,  -316,   103,  -316
-};
+#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
+#ifndef YYLLOC_DEFAULT
+#define YYLLOC_DEFAULT(loc, rhs, n) \
+do \
+{ \
+    if (n == 0) \
+    { \
+        (loc).first_line   = YYRHSLOC(rhs, 0).last_line; \
+        (loc).first_column = YYRHSLOC(rhs, 0).last_column; \
+        (loc).last_line    = YYRHSLOC(rhs, 0).last_line; \
+        (loc).last_column  = YYRHSLOC(rhs, 0).last_column; \
+    } \
+    else \
+    { \
+        (loc).first_line   = YYRHSLOC(rhs, 1).first_line; \
+        (loc).first_column = YYRHSLOC(rhs, 1).first_column; \
+        (loc).last_line    = YYRHSLOC(rhs, n).last_line; \
+        (loc).last_column  = YYRHSLOC(rhs, n).last_column; \
+    } \
+} while (0)
+#endif /* YYLLOC_DEFAULT */
+#endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */
+#if YYBTYACC
 
-/* YYDEFGOTO[NTERM-NUM].  */
-static const yytype_int16 yydefgoto[] =
-{
-       0,     4,   121,   122,   227,    96,   249,    97,   368,   363,
-     354,    64,    98,    99,   162,   160,     5,   241,     6,    39,
-      40,   312,    41,   145,   180,   100,    55,   181,   182,   101,
-       7,   251,    43,    44,    56,   277,   102,   163,   103,   176,
-     289,   189,   104,    45,    46,    47,    48,   229,    49,   105
-};
+#ifndef YYLVQUEUEGROWTH
+#define YYLVQUEUEGROWTH 32
+#endif
+#endif /* YYBTYACC */
 
-/* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
-   positive, shift that token.  If negative, reduce the rule whose
-   number is the opposite.  If YYTABLE_NINF, syntax error.  */
-static const yytype_int16 yytable[] =
-{
-      61,    38,    75,   242,   252,    52,    53,   135,   195,   159,
-       8,   221,   126,    70,    11,   221,    61,    61,    61,    77,
-      78,    61,   209,   352,   151,   153,    61,   136,   137,   287,
-     125,   288,    14,   159,   286,   107,   132,   138,    61,   190,
-     263,    57,   221,    61,   164,   364,   272,   167,    14,   138,
-     170,   171,    65,    61,   173,   141,    66,   138,   126,   140,
-     142,   295,   186,   298,   299,   300,   321,   301,    67,   183,
-     260,   305,   138,    23,   178,    25,   133,   134,   226,    14,
-     133,   134,   191,    68,    61,   185,   106,    11,   159,    23,
-     138,    25,   218,   310,   238,   261,   232,   138,   262,   127,
-     128,   129,   130,   233,    38,    62,   131,    71,    63,   340,
-      61,    61,    61,    61,    61,    61,    72,   138,   124,   327,
-      23,    24,    25,   275,    69,   148,   240,    14,   279,   281,
-      61,    61,   245,    61,    61,   135,   344,   359,   138,    61,
-      61,    61,   133,   134,   293,    37,   143,   129,   130,   367,
-      61,   296,   131,   138,   230,   231,    61,   138,   155,   317,
-      50,   235,   236,   343,    61,    51,     2,   158,    23,    24,
-      25,     3,   161,   242,   131,   158,   168,   267,    61,   256,
-      61,    61,    61,    61,    61,    61,   259,    61,   165,    61,
-     169,    61,    61,    37,    61,   242,   284,   158,   174,   175,
-     223,    61,   322,   228,   193,   237,    61,   225,    61,   239,
-     248,   138,   159,   269,   270,   292,   336,   285,   323,   311,
-     314,   183,   202,   183,   183,   183,   257,   183,    61,   316,
-      61,   183,   325,   275,   276,   341,   350,   185,   326,   185,
-     185,   185,   356,   185,    61,    61,    61,   185,   357,   159,
-     108,   265,    60,   192,     0,   338,     0,   142,    61,     0,
-       0,   306,    61,     0,    61,     0,     0,    61,    73,    74,
-      76,   243,     0,    79,     0,     0,     0,     0,   123,    61,
-     159,   329,    61,    61,    61,    61,   360,   318,   320,    61,
-     123,    61,    61,    61,   256,    76,   183,   256,   256,   256,
-     256,     0,     0,     0,   256,   154,     0,    14,   334,   348,
-       0,     0,   185,   331,   333,   346,     0,   347,     0,    61,
-       0,    61,   365,    61,     0,     0,   273,     0,    61,     0,
-       0,     0,   142,     0,     0,     0,   123,   184,   282,    61,
-       0,   257,     0,   256,   257,   257,   257,   257,    23,    24,
-      25,   257,     0,     0,     0,     0,     0,   297,     0,     0,
-       0,     0,   211,   212,   213,   214,   215,   216,     0,     0,
-       0,     0,     0,    37,     0,     0,     0,     0,     0,     0,
-       0,     0,   123,   123,     0,   123,   123,     0,     0,   324,
-     257,   234,   123,   123,     0,     0,     0,     0,     0,     0,
-       0,     0,   123,     0,     0,     0,     0,     0,   123,     0,
-       0,     0,     0,     0,     0,     0,   258,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   342,
-     123,     0,   123,   123,   123,   123,   123,   123,     0,   123,
-       0,   123,     0,   123,   123,     0,   271,     0,     0,     0,
-       0,     0,     0,   123,     0,     0,     0,     0,   123,     0,
-     123,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   177,
-     123,     0,   123,     0,     0,   188,     0,    42,     0,   184,
-       0,   184,   184,   184,    54,   184,   302,   303,   304,   184,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     123,     0,     0,     0,   123,     0,   123,   188,   188,   123,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   258,     0,     0,   258,   258,   258,   258,     0,   146,
-     147,   258,     0,   123,   123,   123,     0,   149,   150,   146,
-     146,     0,     0,   156,   157,     0,     0,   247,     0,   188,
-       0,     0,     0,     0,   184,     0,     0,     0,     0,   166,
-     264,   123,   188,   123,     0,   123,   172,     0,     0,     0,
-     258,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      42,   123,   194,     0,     0,   196,   197,   198,   199,   200,
-     201,     0,   203,   205,   207,     0,   208,     0,     0,     0,
-       0,     0,     0,     0,   217,     0,     0,   146,     0,     0,
-       0,     0,   222,     0,   224,     0,     0,     0,     0,     0,
-     291,     0,     0,     0,     0,   -29,     1,     0,     0,     0,
-       0,     0,   -29,   -29,     2,     0,   -29,   -29,     0,     3,
-     -29,   244,     0,     0,     0,     0,   246,     0,     0,     0,
-       0,    54,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    42,     0,     0,     0,     0,     0,     0,     0,
-       0,   -29,   -29,     0,   -29,     0,     0,     0,     0,     0,
-     -29,   -29,   -29,     0,   -29,     0,   -29,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   274,
-     188,     0,   278,   280,   -29,     0,     0,     0,   283,     0,
-       0,   146,   -29,   -29,   -29,   -29,   -29,   -29,     0,   188,
-       0,   -29,     0,   -29,   -29,   361,     0,   -29,   -29,     0,
-       0,   -29,     0,     0,   366,   -29,   -29,   -29,     0,   369,
-     307,   308,   309,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    80,     0,     0,     0,     0,     0,
-       0,     0,    81,     0,    11,    12,    54,    82,    13,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     335,     0,   337,     0,     0,   339,     0,     0,     0,    14,
-      15,    83,    16,    84,    85,    86,    87,    88,     0,    18,
-      19,    89,    20,   355,    21,    90,    91,     0,     0,     0,
-       0,     0,     0,    80,     0,     0,     0,     0,     0,     0,
-      92,    93,    22,    11,    12,     0,    82,    13,     0,   187,
-      23,    24,    25,    26,    27,    28,     0,     0,     0,    29,
-      94,    30,    31,    95,     0,    32,    33,     0,     0,    34,
-       0,     0,     0,    35,    36,    37,     0,     0,    14,    15,
-      83,    16,    84,    85,    86,    87,    88,     0,    18,    19,
-      89,    20,     0,    21,    90,    91,     0,     0,     0,     0,
-       0,     0,    80,     0,     0,     0,     0,     0,     0,    92,
-      93,    22,    11,    12,     0,    82,    13,     0,   219,    23,
-      24,    25,    26,    27,    28,     0,     0,     0,    29,    94,
-      30,    31,    95,     0,    32,    33,     0,     0,    34,     0,
-       0,     0,    35,    36,    37,     0,     0,    14,    15,    83,
-      16,    84,    85,    86,    87,    88,     0,    18,    19,    89,
-      20,     0,    21,    90,    91,     0,     0,     0,     0,     0,
-       0,    80,     0,     0,     0,     0,     0,     0,    92,    93,
-      22,    11,    12,     0,    82,    13,     0,   220,    23,    24,
-      25,    26,    27,    28,     0,     0,     0,    29,    94,    30,
-      31,    95,     0,    32,    33,     0,     0,    34,     0,     0,
-       0,    35,    36,    37,     0,     0,    14,    15,    83,    16,
-      84,    85,    86,    87,    88,     0,    18,    19,    89,    20,
-       0,    21,    90,    91,     0,     0,     0,     0,     0,     0,
-      80,     0,     0,     0,     0,     0,     0,    92,    93,    22,
-      11,    12,     0,    82,    13,     0,   250,    23,    24,    25,
-      26,    27,    28,     0,     0,     0,    29,    94,    30,    31,
-      95,     0,    32,    33,     0,     0,    34,     0,     0,     0,
-      35,    36,    37,     0,     0,    14,    15,    83,    16,    84,
-      85,    86,    87,    88,     0,    18,    19,    89,    20,     0,
-      21,    90,    91,     0,     0,     0,     0,     0,     0,    80,
-       0,     0,     0,     0,     0,     0,    92,    93,    22,    11,
-      12,     0,    82,    13,     0,   266,    23,    24,    25,    26,
-      27,    28,     0,     0,     0,    29,    94,    30,    31,    95,
-       0,    32,    33,     0,     0,    34,     0,     0,     0,    35,
-      36,    37,     0,     0,    14,    15,    83,    16,    84,    85,
-      86,    87,    88,     0,    18,    19,    89,    20,     0,    21,
-      90,    91,     0,     0,     0,     0,     0,     0,     0,     0,
-      80,     0,     0,     0,     0,    92,    93,    22,   290,     0,
-      11,    12,     0,    82,    13,    23,    24,    25,    26,    27,
-      28,     0,     0,     0,    29,    94,    30,    31,    95,     0,
-      32,    33,     0,     0,    34,     0,     0,     0,    35,    36,
-      37,     0,     0,     0,     0,    14,    15,    83,    16,    84,
-      85,    86,    87,    88,     0,    18,    19,    89,    20,     0,
-      21,    90,    91,     0,     0,     0,     0,     0,     0,    80,
-       0,     0,     0,     0,     0,     0,    92,    93,    22,    11,
-      12,     0,    82,    13,     0,   345,    23,    24,    25,    26,
-      27,    28,     0,     0,     0,    29,    94,    30,    31,    95,
-       0,    32,    33,     0,     0,    34,     0,     0,     0,    35,
-      36,    37,     0,     0,    14,    15,    83,    16,    84,    85,
-      86,    87,    88,     0,    18,    19,    89,    20,     0,    21,
-      90,    91,     0,     0,     0,     0,     0,     0,    80,     0,
-       0,     0,     0,     0,     0,    92,    93,    22,    11,    12,
-       0,    82,    13,     0,   358,    23,    24,    25,    26,    27,
-      28,     0,     0,     0,    29,    94,    30,    31,    95,     0,
-      32,    33,     0,     0,    34,     0,     0,     0,    35,    36,
-      37,     0,     0,    14,    15,    83,    16,    84,    85,    86,
-      87,    88,     0,    18,    19,    89,    20,     0,    21,    90,
-      91,     0,     0,     0,     0,     0,     0,    80,     0,     0,
-       0,     0,     0,     0,    92,    93,    22,    11,    12,     0,
-      82,    13,     0,     0,    23,    24,    25,    26,    27,    28,
-       0,     0,     0,    29,    94,    30,    31,    95,     0,    32,
-      33,     0,     0,    34,     0,     0,     0,    35,    36,    37,
-       0,     0,    14,    15,    83,    16,    84,    85,    86,    87,
-      88,     0,    18,    19,    89,    20,     0,    21,    90,    91,
-       0,     0,     0,     0,     0,    80,     0,     0,     0,     0,
-       0,     0,     0,    92,    93,    22,    12,     0,   -31,    13,
-       0,     0,     0,    23,    24,    25,    26,    27,    28,     0,
-       0,     0,    29,    94,    30,    31,    95,     0,    32,    33,
-       0,     0,    34,     0,     0,     0,    35,    36,    37,     0,
-      14,    15,     0,    16,     0,    85,     0,     0,     0,     0,
-      18,    19,     0,    20,     0,    21,     0,     0,     0,     0,
-       0,     0,     0,    80,     0,     0,     0,     0,     0,     0,
-       0,    92,    93,    22,    12,     0,     0,    13,   -31,     0,
-       0,    23,    24,    25,    26,    27,    28,     0,     0,     0,
-      29,     0,    30,    31,     0,     0,    32,    33,     0,     0,
-      34,     0,     0,     0,    35,    36,    37,     0,    14,    15,
-       0,    16,     0,    85,     0,     0,     0,     0,    18,    19,
-       0,    20,     0,    21,     0,     0,     0,     9,    10,     0,
-       0,    11,    12,     0,     0,    13,     0,     0,     0,    92,
-      93,    22,     0,     0,     0,     0,     0,     0,     0,    23,
-      24,    25,    26,    27,    28,     0,     0,     0,    29,     0,
-      30,    31,     0,     0,    32,    33,    14,    15,    34,    16,
-       0,     0,    35,    36,    37,    17,    18,    19,     0,    20,
-       0,    21,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    22,
-       0,     0,     0,     0,     0,     0,     0,    23,    24,    25,
-      26,    27,    28,     0,     0,     0,    29,     0,    30,    31,
-       0,     0,    32,    33,   158,     0,    34,    58,   109,   161,
-      35,    36,    37,     0,     0,     0,     0,     0,   110,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   111,   112,     0,   113,   114,   115,   116,   117,   118,
-     119,    14,    15,     0,    16,     0,     0,     0,     0,     0,
-       0,    18,    19,     0,    20,     0,    21,     0,     0,     0,
-       0,     0,   158,     0,     0,    12,     0,   161,    13,     0,
-       0,     0,     0,     0,    22,     0,     0,     0,     0,     0,
-       0,     0,    23,    24,    25,    26,    27,    28,     0,   120,
-       0,    29,     0,    30,    31,     0,     0,    32,    33,    14,
-      15,    59,    16,     0,     0,    35,    36,    37,     0,    18,
-      19,     0,    20,     0,    21,     0,     0,     0,     0,     0,
-     204,     0,     0,    12,     0,     0,    13,     0,     0,     0,
-       0,     0,    22,     0,     0,     0,     0,     0,     0,     0,
-      23,    24,    25,    26,    27,    28,     0,     0,     0,    29,
-       0,    30,    31,     0,     0,    32,    33,    14,    15,    34,
-      16,     0,     0,    35,    36,    37,     0,    18,    19,     0,
-      20,     0,    21,     0,     0,     0,     0,     0,   206,     0,
-       0,    12,     0,     0,    13,     0,     0,     0,     0,     0,
-      22,     0,     0,     0,     0,     0,     0,     0,    23,    24,
-      25,    26,    27,    28,     0,     0,     0,    29,     0,    30,
-      31,     0,     0,    32,    33,    14,    15,    34,    16,     0,
-       0,    35,    36,    37,     0,    18,    19,     0,    20,     0,
-      21,     0,     0,     0,     0,     0,   221,     0,     0,    12,
-       0,     0,    13,     0,     0,     0,     0,     0,    22,     0,
-       0,     0,     0,     0,     0,     0,    23,    24,    25,    26,
-      27,    28,     0,     0,     0,    29,     0,    30,    31,     0,
-       0,    32,    33,    14,    15,    34,    16,     0,     0,    35,
-      36,    37,     0,    18,    19,     0,    20,     0,    21,     0,
-       0,     0,     0,     0,   204,     0,     0,   294,     0,     0,
-      13,     0,     0,     0,     0,     0,    22,     0,     0,     0,
-       0,     0,     0,     0,    23,    24,    25,    26,    27,    28,
-       0,     0,     0,    29,     0,    30,    31,     0,     0,    32,
-      33,    14,    15,    34,    16,     0,     0,    35,    36,    37,
-       0,    18,    19,     0,    20,     0,    21,     0,     0,     0,
-       0,     0,   206,     0,     0,   294,     0,     0,    13,     0,
-       0,     0,     0,     0,    22,     0,     0,     0,     0,     0,
-       0,     0,    23,    24,    25,    26,    27,    28,     0,     0,
-       0,    29,     0,    30,    31,     0,     0,    32,    33,    14,
-      15,    34,    16,     0,     0,    35,    36,    37,     0,    18,
-      19,     0,    20,     0,    21,     0,     0,     0,     0,     0,
-     221,     0,     0,   294,     0,     0,    13,     0,     0,     0,
-       0,     0,    22,     0,     0,     0,     0,     0,     0,     0,
-      23,    24,    25,    26,    27,    28,     0,     0,     0,    29,
-       0,    30,    31,     0,     0,    32,    33,    14,    15,    34,
-      16,     0,     0,    35,    36,    37,     0,    18,    19,     0,
-      20,     0,    21,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      22,     0,     0,     0,     0,     0,     0,     0,    23,    24,
-      25,    26,    27,    28,     0,     0,     0,    29,     0,    30,
-      31,     0,     0,    32,    33,     0,     0,    34,     0,     0,
-       0,    35,    36,    37,   138,     0,    58,   109,     0,     0,
-     139,     0,     0,     0,     0,     0,     0,   110,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     111,   112,     0,   113,   114,   115,   116,   117,   118,   119,
-      14,    15,     0,    16,     0,     0,     0,     0,     0,     0,
-      18,    19,     0,    20,     0,    21,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    22,     0,     0,     0,     0,     0,     0,
-       0,    23,    24,    25,    26,    27,    28,     0,   120,     0,
-      29,     0,    30,    31,     0,     0,    32,    33,     0,     0,
-      59,     0,     0,     0,    35,    36,    37,   138,     0,    58,
-     109,     0,     0,   319,     0,     0,     0,     0,     0,     0,
-     110,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   111,   112,     0,   113,   114,   115,   116,
-     117,   118,   119,    14,    15,     0,    16,     0,     0,     0,
-       0,     0,     0,    18,    19,     0,    20,     0,    21,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    22,     0,     0,     0,
-       0,     0,     0,     0,    23,    24,    25,    26,    27,    28,
-       0,   120,     0,    29,     0,    30,    31,     0,     0,    32,
-      33,     0,     0,    59,     0,     0,     0,    35,    36,    37,
-     138,     0,    58,   109,     0,     0,   330,     0,     0,     0,
-       0,     0,     0,   110,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   111,   112,     0,   113,
-     114,   115,   116,   117,   118,   119,    14,    15,     0,    16,
-       0,     0,     0,     0,     0,     0,    18,    19,     0,    20,
-       0,    21,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    22,
-       0,     0,     0,     0,     0,     0,     0,    23,    24,    25,
-      26,    27,    28,     0,   120,     0,    29,     0,    30,    31,
-       0,     0,    32,    33,     0,     0,    59,     0,     0,     0,
-      35,    36,    37,   138,     0,    58,   109,     0,     0,   332,
-       0,     0,     0,     0,     0,     0,   110,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   111,
-     112,     0,   113,   114,   115,   116,   117,   118,   119,    14,
-      15,     0,    16,     0,     0,     0,     0,     0,     0,    18,
-      19,     0,    20,     0,    21,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    22,     0,     0,     0,     0,     0,     0,     0,
-      23,    24,    25,    26,    27,    28,     0,   120,     0,    29,
-       0,    30,    31,     0,     0,    32,    33,     0,   138,    59,
-      58,   109,     0,    35,    36,    37,     0,     0,     0,     0,
-       0,   110,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   111,   112,     0,   113,   114,   115,
-     116,   117,   118,   119,    14,    15,     0,    16,     0,     0,
-       0,     0,     0,     0,    18,    19,     0,    20,     0,    21,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    22,     0,     0,
-       0,     0,     0,     0,     0,    23,    24,    25,    26,    27,
-      28,     0,   120,     0,    29,     0,    30,    31,     0,     0,
-      32,    33,    58,   109,    59,     0,   139,     0,    35,    36,
-      37,     0,     0,   110,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   111,   112,     0,   113,
-     114,   115,   116,   117,   118,   119,    14,    15,     0,    16,
-       0,     0,     0,     0,     0,     0,    18,    19,     0,    20,
-       0,    21,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    22,
-       0,     0,     0,     0,     0,     0,     0,    23,    24,    25,
-      26,    27,    28,     0,   120,     0,    29,     0,    30,    31,
-       0,     0,    32,    33,    58,   109,    59,     0,     0,     0,
-      35,    36,    37,     0,     0,   110,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   111,   112,
-       0,   113,   114,   115,   116,   117,   118,   119,    14,    15,
-       0,    16,     0,     0,     0,     0,     0,     0,    18,    19,
-       0,    20,     0,    21,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    22,     0,     0,     0,     0,     0,     0,     0,    23,
-      24,    25,    26,    27,    28,     0,   120,   268,    29,     0,
-      30,    31,     0,     0,    32,    33,    58,   109,    59,     0,
-     275,     0,    35,    36,    37,     0,     0,   110,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     111,   112,     0,   113,   114,   115,   116,   117,   118,   119,
-      14,    15,     0,    16,     0,     0,     0,     0,     0,     0,
-      18,    19,     0,    20,     0,    21,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    22,     0,     0,     0,     0,     0,     0,
-       0,    23,    24,    25,    26,    27,    28,     0,   120,     0,
-      29,     0,    30,    31,     0,     0,    32,    33,    58,   109,
-      59,     0,   313,     0,    35,    36,    37,     0,     0,   110,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   111,   112,     0,   113,   114,   115,   116,   117,
-     118,   119,    14,    15,     0,    16,     0,     0,     0,     0,
-       0,     0,    18,    19,     0,    20,     0,    21,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    22,     0,     0,     0,     0,
-       0,     0,     0,    23,    24,    25,    26,    27,    28,     0,
-     120,     0,    29,     0,    30,    31,     0,     0,    32,    33,
-      58,   109,    59,     0,   315,     0,    35,    36,    37,     0,
-       0,   110,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   111,   112,     0,   113,   114,   115,
-     116,   117,   118,   119,    14,    15,     0,    16,     0,     0,
-       0,     0,     0,     0,    18,    19,     0,    20,     0,    21,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    22,     0,     0,
-       0,     0,     0,     0,     0,    23,    24,    25,    26,    27,
-      28,     0,   120,     0,    29,     0,    30,    31,     0,     0,
-      32,    33,    58,   109,    59,     0,   349,     0,    35,    36,
-      37,     0,     0,   110,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   111,   112,     0,   113,
-     114,   115,   116,   117,   118,   119,    14,    15,     0,    16,
-       0,     0,     0,     0,     0,     0,    18,    19,     0,    20,
-       0,    21,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    22,
-       0,     0,     0,     0,     0,     0,     0,    23,    24,    25,
-      26,    27,    28,     0,   120,     0,    29,     0,    30,    31,
-       0,     0,    32,    33,    58,   109,    59,     0,   351,     0,
-      35,    36,    37,     0,     0,   110,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   111,   112,
-       0,   113,   114,   115,   116,   117,   118,   119,    14,    15,
-       0,    16,     0,     0,     0,     0,     0,     0,    18,    19,
-       0,    20,     0,    21,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    22,     0,     0,     0,     0,     0,     0,     0,    23,
-      24,    25,    26,    27,    28,     0,   120,     0,    29,     0,
-      30,    31,     0,     0,    32,    33,     0,     0,    59,    58,
-     109,   353,    35,    36,    37,     0,     0,     0,     0,     0,
-     110,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   111,   112,     0,   113,   114,   115,   116,
-     117,   118,   119,    14,    15,     0,    16,     0,     0,     0,
-       0,     0,     0,    18,    19,     0,    20,     0,    21,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    22,     0,     0,     0,
-       0,     0,     0,     0,    23,    24,    25,    26,    27,    28,
-       0,   120,     0,    29,     0,    30,    31,     0,     0,    32,
-      33,    58,   109,    59,     0,   362,     0,    35,    36,    37,
-       0,     0,   110,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   111,   112,     0,   113,   114,
-     115,   116,   117,   118,   119,    14,    15,     0,    16,     0,
-       0,     0,     0,     0,     0,    18,    19,     0,    20,     0,
-      21,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    22,     0,
-       0,     0,     0,     0,     0,     0,    23,    24,    25,    26,
-      27,    28,     0,   120,     0,    29,     0,    30,    31,     0,
-       0,    32,    33,    58,   109,    59,     0,     0,     0,    35,
-      36,    37,     0,     0,   110,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   111,   112,     0,
-     113,   114,   115,   116,   117,   118,   119,    14,    15,     0,
-      16,     0,     0,     0,     0,     0,     0,    18,    19,     0,
-      20,     0,    21,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      22,     0,     0,     0,     0,     0,     0,     0,    23,    24,
-      25,    26,    27,    28,     0,   120,     0,    29,     0,    30,
-      31,     0,     0,    32,    33,    58,   109,    59,     0,     0,
-       0,    35,    36,    37,     0,     0,   110,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   111,
-       0,     0,   113,   114,   115,   116,   117,   118,   119,    14,
-      15,     0,    16,     0,     0,     0,     0,     0,     0,    18,
-      19,     0,    20,     0,    21,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    22,     0,     0,     0,     0,     0,     0,     0,
-      23,    24,    25,    26,    27,    28,    58,   109,     0,    29,
-       0,    30,    31,     0,     0,    32,    33,   110,     0,    59,
-       0,     0,     0,    35,    36,    37,     0,     0,     0,     0,
-       0,     0,     0,   113,   114,   115,   116,   117,   118,   119,
-      14,    15,     0,    16,     0,     0,     0,     0,     0,     0,
-      18,    19,     0,    20,     0,    21,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    22,     0,     0,     0,     0,     0,     0,
-       0,    23,    24,    25,    26,    27,    28,    58,   -32,     0,
-      29,     0,    30,    31,     0,     0,    32,    33,   -32,     0,
-      59,     0,     0,     0,    35,    36,    37,     0,     0,     0,
-       0,     0,     0,     0,   -32,   -32,   -32,   -32,   -32,   -32,
-     -32,    14,    15,     0,    16,     0,     0,     0,     0,     0,
-       0,    18,    19,     0,    20,    58,    21,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   253,     0,     0,     0,
-       0,     0,     0,     0,    22,     0,     0,     0,     0,   111,
-     112,     0,    23,    24,    25,    26,    27,    28,   254,    14,
-      15,     0,    16,    30,    31,     0,     0,    32,    33,    18,
-      19,    59,    20,     0,    21,    35,    36,    37,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    22,     0,     0,     0,     0,     0,     0,     0,
-      23,    24,    25,    26,    27,    28,    58,   255,   328,    29,
-       0,    30,    31,     0,     0,    32,    33,   253,     0,    59,
-       0,     0,     0,    35,    36,    37,     0,     0,     0,     0,
-     111,   112,     0,     0,     0,     0,     0,     0,     0,   254,
-      14,    15,     0,    16,     0,     0,     0,     0,     0,     0,
-      18,    19,     0,    20,     0,    21,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    22,     0,     0,     0,     0,    58,     0,
-       0,    23,    24,    25,    26,    27,    28,     0,   255,   253,
-      29,     0,    30,    31,     0,     0,    32,    33,     0,     0,
-      59,     0,   111,     0,    35,    36,    37,     0,     0,     0,
-       0,   254,    14,    15,     0,    16,     0,     0,     0,     0,
-       0,     0,    18,    19,     0,    20,    12,    21,     0,    13,
-     144,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    22,     0,     0,     0,     0,
-       0,     0,     0,    23,    24,    25,    26,    27,    28,     0,
-      14,    15,    29,    16,    30,    31,     0,     0,    32,    33,
-      18,    19,    59,    20,     0,    21,    35,    36,    37,     0,
-       0,     0,     0,     0,    12,     0,     0,    13,   152,     0,
-       0,     0,     0,    22,     0,     0,     0,     0,     0,     0,
-       0,    23,    24,    25,    26,    27,    28,     0,     0,     0,
-      29,     0,    30,    31,     0,     0,    32,    33,    14,    15,
-      34,    16,     0,     0,    35,    36,    37,     0,    18,    19,
-       0,    20,    58,    21,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   253,     0,     0,     0,     0,     0,     0,
-       0,    22,     0,     0,     0,     0,     0,     0,     0,    23,
-      24,    25,    26,    27,    28,   254,    14,    15,    29,    16,
-      30,    31,     0,     0,    32,    33,    18,    19,    34,    20,
-       0,    21,    35,    36,    37,     0,     0,     0,     0,     0,
-      12,     0,     0,    13,     0,     0,     0,     0,     0,    22,
-       0,     0,     0,     0,     0,     0,     0,    23,    24,    25,
-      26,    27,    28,     0,     0,     0,    29,     0,    30,    31,
-       0,     0,    32,    33,    14,    15,    59,    16,     0,     0,
-      35,    36,    37,     0,    18,    19,     0,    20,    58,    21,
-       0,    13,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    22,     0,     0,
-       0,     0,     0,     0,     0,    23,    24,    25,    26,    27,
-      28,     0,    14,    15,    29,    16,    30,    31,     0,     0,
-      32,    33,    18,    19,    34,    20,     0,    21,    35,    36,
-      37,     0,     0,     0,     0,     0,   179,     0,     0,    13,
-       0,     0,     0,     0,     0,    22,     0,     0,     0,     0,
-       0,     0,     0,    23,    24,    25,    26,    27,    28,     0,
-       0,     0,    29,     0,    30,    31,     0,     0,    32,    33,
-      14,    15,    34,    16,     0,     0,    35,    36,    37,     0,
-      18,    19,     0,    20,    58,    21,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    22,     0,     0,     0,     0,     0,     0,
-       0,    23,    24,    25,    26,    27,    28,     0,    14,    15,
-      29,    16,    30,    31,     0,     0,    32,    33,    18,    19,
-      34,    20,     0,    21,    35,    36,    37,     0,     0,     0,
-       0,     0,   210,     0,     0,     0,     0,     0,     0,     0,
-       0,    22,   294,     0,     0,    13,     0,     0,     0,    23,
-      24,    25,    26,    27,    28,     0,     0,     0,    29,     0,
-      30,    31,     0,     0,    32,    33,     0,     0,    59,     0,
-       0,     0,    35,    36,    37,     0,    14,    15,     0,    16,
-       0,     0,     0,     0,     0,     0,    18,    19,     0,    20,
-      58,    21,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   -32,     0,     0,     0,     0,     0,     0,     0,    22,
-       0,     0,     0,     0,     0,     0,     0,    23,    24,    25,
-      26,    27,    28,   -32,    14,    15,    29,    16,    30,    31,
-       0,     0,    32,    33,    18,    19,    34,    20,    58,    21,
-      35,    36,    37,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    22,     0,     0,
-       0,     0,     0,     0,     0,    23,    24,    25,    26,    27,
-      28,     0,    14,    15,     0,    16,    30,    31,     0,     0,
-      32,    33,    18,    19,    59,    20,     0,    21,    35,    36,
-      37,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    22,     0,     0,     0,     0,
-       0,     0,     0,    23,    24,    25,    26,    27,    28,     0,
-       0,     0,    29,     0,    30,    31,     0,     0,    32,    33,
-       0,     0,    59,     0,     0,     0,    35,    36,    37
-};
+/* define the initial stack-sizes */
+#ifdef YYSTACKSIZE
+#undef YYMAXDEPTH
+#define YYMAXDEPTH  YYSTACKSIZE
+#else
+#ifdef YYMAXDEPTH
+#define YYSTACKSIZE YYMAXDEPTH
+#else
+#define YYSTACKSIZE 10000
+#define YYMAXDEPTH  10000
+#endif
+#endif
 
-static const yytype_int16 yycheck[] =
-{
-      16,     5,    34,   168,   179,     9,    10,    18,   110,    82,
-       0,     9,    15,    29,    11,     9,    32,    33,    34,    35,
-      36,    37,   124,   338,    67,    68,    42,    52,    53,   244,
-      92,   246,    46,   106,    45,    39,    70,    10,    54,   106,
-      70,    12,     9,    59,    84,   360,    19,    87,    46,    10,
-      90,    91,    12,    69,    94,    16,    12,    10,    15,    54,
-      55,   253,   102,   255,   256,   257,    19,   259,    12,   101,
-      13,   263,    10,    87,    99,    89,   110,   111,    16,    46,
-     110,   111,   107,    12,   100,   101,    10,    11,   161,    87,
-      10,    89,   135,    87,   161,    38,    16,    10,    41,   102,
-     103,   104,   105,    16,   108,    87,   109,    12,    90,   324,
-     126,   127,   128,   129,   130,   131,    12,    10,    12,   294,
-      87,    88,    89,    16,    43,    12,   166,    46,   230,   231,
-     146,   147,   172,   149,   150,    18,   328,   352,    10,   155,
-     156,   157,   110,   111,    16,   112,    93,   104,   105,   364,
-     166,   253,   109,    10,   149,   150,   172,    10,    43,    16,
-       9,   156,   157,    16,   180,    14,     9,     9,    87,    88,
-      89,    14,    14,   338,   109,     9,    12,   193,   194,   180,
-     196,   197,   198,   199,   200,   201,   181,   203,    85,   205,
-      12,   207,   208,   112,   210,   360,   239,     9,    12,     9,
-      45,   217,    14,    87,    96,     9,   222,    15,   224,    18,
-      80,    10,   285,   208,   209,     9,   318,    14,   285,     9,
-      16,   253,   119,   255,   256,   257,   180,   259,   244,    16,
-     246,   263,   100,    16,   229,    12,    16,   253,    45,   255,
-     256,   257,    16,   259,   260,   261,   262,   263,    16,   322,
-      41,   190,    16,   108,    -1,   322,    -1,   252,   274,    -1,
-      -1,   265,   278,    -1,   280,    -1,    -1,   283,    32,    33,
-      34,   168,    -1,    37,    -1,    -1,    -1,    -1,    42,   295,
-     353,   306,   298,   299,   300,   301,   353,   282,   283,   305,
-      54,   307,   308,   309,   295,    59,   328,   298,   299,   300,
-     301,    -1,    -1,    -1,   305,    69,    -1,    46,   312,   334,
-      -1,    -1,   328,   308,   309,   331,    -1,   333,    -1,   335,
-      -1,   337,   362,   339,    -1,    -1,   223,    -1,   344,    -1,
-      -1,    -1,   327,    -1,    -1,    -1,   100,   101,   235,   355,
-      -1,   295,    -1,   344,   298,   299,   300,   301,    87,    88,
-      89,   305,    -1,    -1,    -1,    -1,    -1,   254,    -1,    -1,
-      -1,    -1,   126,   127,   128,   129,   130,   131,    -1,    -1,
-      -1,    -1,    -1,   112,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   146,   147,    -1,   149,   150,    -1,    -1,   286,
-     344,   155,   156,   157,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   166,    -1,    -1,    -1,    -1,    -1,   172,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   180,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   326,
-     194,    -1,   196,   197,   198,   199,   200,   201,    -1,   203,
-      -1,   205,    -1,   207,   208,    -1,   210,    -1,    -1,    -1,
-      -1,    -1,    -1,   217,    -1,    -1,    -1,    -1,   222,    -1,
-     224,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    98,
-     244,    -1,   246,    -1,    -1,   104,    -1,     5,    -1,   253,
-      -1,   255,   256,   257,    12,   259,   260,   261,   262,   263,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     274,    -1,    -1,    -1,   278,    -1,   280,   136,   137,   283,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   295,    -1,    -1,   298,   299,   300,   301,    -1,    57,
-      58,   305,    -1,   307,   308,   309,    -1,    65,    66,    67,
-      68,    -1,    -1,    71,    72,    -1,    -1,   176,    -1,   178,
-      -1,    -1,    -1,    -1,   328,    -1,    -1,    -1,    -1,    87,
-     189,   335,   191,   337,    -1,   339,    94,    -1,    -1,    -1,
-     344,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     108,   355,   110,    -1,    -1,   113,   114,   115,   116,   117,
-     118,    -1,   120,   121,   122,    -1,   124,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   132,    -1,    -1,   135,    -1,    -1,
-      -1,    -1,   140,    -1,   142,    -1,    -1,    -1,    -1,    -1,
-     249,    -1,    -1,    -1,    -1,     0,     1,    -1,    -1,    -1,
-      -1,    -1,     7,     8,     9,    -1,    11,    12,    -1,    14,
-      15,   169,    -1,    -1,    -1,    -1,   174,    -1,    -1,    -1,
-      -1,   179,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   190,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    46,    47,    -1,    49,    -1,    -1,    -1,    -1,    -1,
-      55,    56,    57,    -1,    59,    -1,    61,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   227,
-     329,    -1,   230,   231,    79,    -1,    -1,    -1,   236,    -1,
-      -1,   239,    87,    88,    89,    90,    91,    92,    -1,   348,
-      -1,    96,    -1,    98,    99,   354,    -1,   102,   103,    -1,
-      -1,   106,    -1,    -1,   363,   110,   111,   112,    -1,   368,
-     268,   269,   270,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,     1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,     9,    -1,    11,    12,   294,    14,    15,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     318,    -1,   320,    -1,    -1,   323,    -1,    -1,    -1,    46,
-      47,    48,    49,    50,    51,    52,    53,    54,    -1,    56,
-      57,    58,    59,   341,    61,    62,    63,    -1,    -1,    -1,
-      -1,    -1,    -1,     1,    -1,    -1,    -1,    -1,    -1,    -1,
-      77,    78,    79,    11,    12,    -1,    14,    15,    -1,    17,
-      87,    88,    89,    90,    91,    92,    -1,    -1,    -1,    96,
-      97,    98,    99,   100,    -1,   102,   103,    -1,    -1,   106,
-      -1,    -1,    -1,   110,   111,   112,    -1,    -1,    46,    47,
-      48,    49,    50,    51,    52,    53,    54,    -1,    56,    57,
-      58,    59,    -1,    61,    62,    63,    -1,    -1,    -1,    -1,
-      -1,    -1,     1,    -1,    -1,    -1,    -1,    -1,    -1,    77,
-      78,    79,    11,    12,    -1,    14,    15,    -1,    17,    87,
-      88,    89,    90,    91,    92,    -1,    -1,    -1,    96,    97,
-      98,    99,   100,    -1,   102,   103,    -1,    -1,   106,    -1,
-      -1,    -1,   110,   111,   112,    -1,    -1,    46,    47,    48,
-      49,    50,    51,    52,    53,    54,    -1,    56,    57,    58,
-      59,    -1,    61,    62,    63,    -1,    -1,    -1,    -1,    -1,
-      -1,     1,    -1,    -1,    -1,    -1,    -1,    -1,    77,    78,
-      79,    11,    12,    -1,    14,    15,    -1,    17,    87,    88,
-      89,    90,    91,    92,    -1,    -1,    -1,    96,    97,    98,
-      99,   100,    -1,   102,   103,    -1,    -1,   106,    -1,    -1,
-      -1,   110,   111,   112,    -1,    -1,    46,    47,    48,    49,
-      50,    51,    52,    53,    54,    -1,    56,    57,    58,    59,
-      -1,    61,    62,    63,    -1,    -1,    -1,    -1,    -1,    -1,
-       1,    -1,    -1,    -1,    -1,    -1,    -1,    77,    78,    79,
-      11,    12,    -1,    14,    15,    -1,    17,    87,    88,    89,
-      90,    91,    92,    -1,    -1,    -1,    96,    97,    98,    99,
-     100,    -1,   102,   103,    -1,    -1,   106,    -1,    -1,    -1,
-     110,   111,   112,    -1,    -1,    46,    47,    48,    49,    50,
-      51,    52,    53,    54,    -1,    56,    57,    58,    59,    -1,
-      61,    62,    63,    -1,    -1,    -1,    -1,    -1,    -1,     1,
-      -1,    -1,    -1,    -1,    -1,    -1,    77,    78,    79,    11,
-      12,    -1,    14,    15,    -1,    17,    87,    88,    89,    90,
-      91,    92,    -1,    -1,    -1,    96,    97,    98,    99,   100,
-      -1,   102,   103,    -1,    -1,   106,    -1,    -1,    -1,   110,
-     111,   112,    -1,    -1,    46,    47,    48,    49,    50,    51,
-      52,    53,    54,    -1,    56,    57,    58,    59,    -1,    61,
-      62,    63,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       1,    -1,    -1,    -1,    -1,    77,    78,    79,     9,    -1,
-      11,    12,    -1,    14,    15,    87,    88,    89,    90,    91,
-      92,    -1,    -1,    -1,    96,    97,    98,    99,   100,    -1,
-     102,   103,    -1,    -1,   106,    -1,    -1,    -1,   110,   111,
-     112,    -1,    -1,    -1,    -1,    46,    47,    48,    49,    50,
-      51,    52,    53,    54,    -1,    56,    57,    58,    59,    -1,
-      61,    62,    63,    -1,    -1,    -1,    -1,    -1,    -1,     1,
-      -1,    -1,    -1,    -1,    -1,    -1,    77,    78,    79,    11,
-      12,    -1,    14,    15,    -1,    17,    87,    88,    89,    90,
-      91,    92,    -1,    -1,    -1,    96,    97,    98,    99,   100,
-      -1,   102,   103,    -1,    -1,   106,    -1,    -1,    -1,   110,
-     111,   112,    -1,    -1,    46,    47,    48,    49,    50,    51,
-      52,    53,    54,    -1,    56,    57,    58,    59,    -1,    61,
-      62,    63,    -1,    -1,    -1,    -1,    -1,    -1,     1,    -1,
-      -1,    -1,    -1,    -1,    -1,    77,    78,    79,    11,    12,
-      -1,    14,    15,    -1,    17,    87,    88,    89,    90,    91,
-      92,    -1,    -1,    -1,    96,    97,    98,    99,   100,    -1,
-     102,   103,    -1,    -1,   106,    -1,    -1,    -1,   110,   111,
-     112,    -1,    -1,    46,    47,    48,    49,    50,    51,    52,
-      53,    54,    -1,    56,    57,    58,    59,    -1,    61,    62,
-      63,    -1,    -1,    -1,    -1,    -1,    -1,     1,    -1,    -1,
-      -1,    -1,    -1,    -1,    77,    78,    79,    11,    12,    -1,
-      14,    15,    -1,    -1,    87,    88,    89,    90,    91,    92,
-      -1,    -1,    -1,    96,    97,    98,    99,   100,    -1,   102,
-     103,    -1,    -1,   106,    -1,    -1,    -1,   110,   111,   112,
-      -1,    -1,    46,    47,    48,    49,    50,    51,    52,    53,
-      54,    -1,    56,    57,    58,    59,    -1,    61,    62,    63,
-      -1,    -1,    -1,    -1,    -1,     1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    77,    78,    79,    12,    -1,    14,    15,
-      -1,    -1,    -1,    87,    88,    89,    90,    91,    92,    -1,
-      -1,    -1,    96,    97,    98,    99,   100,    -1,   102,   103,
-      -1,    -1,   106,    -1,    -1,    -1,   110,   111,   112,    -1,
-      46,    47,    -1,    49,    -1,    51,    -1,    -1,    -1,    -1,
-      56,    57,    -1,    59,    -1,    61,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,     1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    77,    78,    79,    12,    -1,    -1,    15,    16,    -1,
-      -1,    87,    88,    89,    90,    91,    92,    -1,    -1,    -1,
-      96,    -1,    98,    99,    -1,    -1,   102,   103,    -1,    -1,
-     106,    -1,    -1,    -1,   110,   111,   112,    -1,    46,    47,
-      -1,    49,    -1,    51,    -1,    -1,    -1,    -1,    56,    57,
-      -1,    59,    -1,    61,    -1,    -1,    -1,     7,     8,    -1,
-      -1,    11,    12,    -1,    -1,    15,    -1,    -1,    -1,    77,
-      78,    79,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    87,
-      88,    89,    90,    91,    92,    -1,    -1,    -1,    96,    -1,
-      98,    99,    -1,    -1,   102,   103,    46,    47,   106,    49,
-      -1,    -1,   110,   111,   112,    55,    56,    57,    -1,    59,
-      -1,    61,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    79,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    87,    88,    89,
-      90,    91,    92,    -1,    -1,    -1,    96,    -1,    98,    99,
-      -1,    -1,   102,   103,     9,    -1,   106,    12,    13,    14,
-     110,   111,   112,    -1,    -1,    -1,    -1,    -1,    23,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    36,    37,    -1,    39,    40,    41,    42,    43,    44,
-      45,    46,    47,    -1,    49,    -1,    -1,    -1,    -1,    -1,
-      -1,    56,    57,    -1,    59,    -1,    61,    -1,    -1,    -1,
-      -1,    -1,     9,    -1,    -1,    12,    -1,    14,    15,    -1,
-      -1,    -1,    -1,    -1,    79,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    87,    88,    89,    90,    91,    92,    -1,    94,
-      -1,    96,    -1,    98,    99,    -1,    -1,   102,   103,    46,
-      47,   106,    49,    -1,    -1,   110,   111,   112,    -1,    56,
-      57,    -1,    59,    -1,    61,    -1,    -1,    -1,    -1,    -1,
-       9,    -1,    -1,    12,    -1,    -1,    15,    -1,    -1,    -1,
-      -1,    -1,    79,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      87,    88,    89,    90,    91,    92,    -1,    -1,    -1,    96,
-      -1,    98,    99,    -1,    -1,   102,   103,    46,    47,   106,
-      49,    -1,    -1,   110,   111,   112,    -1,    56,    57,    -1,
-      59,    -1,    61,    -1,    -1,    -1,    -1,    -1,     9,    -1,
-      -1,    12,    -1,    -1,    15,    -1,    -1,    -1,    -1,    -1,
-      79,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    87,    88,
-      89,    90,    91,    92,    -1,    -1,    -1,    96,    -1,    98,
-      99,    -1,    -1,   102,   103,    46,    47,   106,    49,    -1,
-      -1,   110,   111,   112,    -1,    56,    57,    -1,    59,    -1,
-      61,    -1,    -1,    -1,    -1,    -1,     9,    -1,    -1,    12,
-      -1,    -1,    15,    -1,    -1,    -1,    -1,    -1,    79,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    87,    88,    89,    90,
-      91,    92,    -1,    -1,    -1,    96,    -1,    98,    99,    -1,
-      -1,   102,   103,    46,    47,   106,    49,    -1,    -1,   110,
-     111,   112,    -1,    56,    57,    -1,    59,    -1,    61,    -1,
-      -1,    -1,    -1,    -1,     9,    -1,    -1,    12,    -1,    -1,
-      15,    -1,    -1,    -1,    -1,    -1,    79,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    87,    88,    89,    90,    91,    92,
-      -1,    -1,    -1,    96,    -1,    98,    99,    -1,    -1,   102,
-     103,    46,    47,   106,    49,    -1,    -1,   110,   111,   112,
-      -1,    56,    57,    -1,    59,    -1,    61,    -1,    -1,    -1,
-      -1,    -1,     9,    -1,    -1,    12,    -1,    -1,    15,    -1,
-      -1,    -1,    -1,    -1,    79,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    87,    88,    89,    90,    91,    92,    -1,    -1,
-      -1,    96,    -1,    98,    99,    -1,    -1,   102,   103,    46,
-      47,   106,    49,    -1,    -1,   110,   111,   112,    -1,    56,
-      57,    -1,    59,    -1,    61,    -1,    -1,    -1,    -1,    -1,
-       9,    -1,    -1,    12,    -1,    -1,    15,    -1,    -1,    -1,
-      -1,    -1,    79,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      87,    88,    89,    90,    91,    92,    -1,    -1,    -1,    96,
-      -1,    98,    99,    -1,    -1,   102,   103,    46,    47,   106,
-      49,    -1,    -1,   110,   111,   112,    -1,    56,    57,    -1,
-      59,    -1,    61,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      79,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    87,    88,
-      89,    90,    91,    92,    -1,    -1,    -1,    96,    -1,    98,
-      99,    -1,    -1,   102,   103,    -1,    -1,   106,    -1,    -1,
-      -1,   110,   111,   112,    10,    -1,    12,    13,    -1,    -1,
-      16,    -1,    -1,    -1,    -1,    -1,    -1,    23,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      36,    37,    -1,    39,    40,    41,    42,    43,    44,    45,
-      46,    47,    -1,    49,    -1,    -1,    -1,    -1,    -1,    -1,
-      56,    57,    -1,    59,    -1,    61,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    79,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    87,    88,    89,    90,    91,    92,    -1,    94,    -1,
-      96,    -1,    98,    99,    -1,    -1,   102,   103,    -1,    -1,
-     106,    -1,    -1,    -1,   110,   111,   112,    10,    -1,    12,
-      13,    -1,    -1,    16,    -1,    -1,    -1,    -1,    -1,    -1,
-      23,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    36,    37,    -1,    39,    40,    41,    42,
-      43,    44,    45,    46,    47,    -1,    49,    -1,    -1,    -1,
-      -1,    -1,    -1,    56,    57,    -1,    59,    -1,    61,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    79,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    87,    88,    89,    90,    91,    92,
-      -1,    94,    -1,    96,    -1,    98,    99,    -1,    -1,   102,
-     103,    -1,    -1,   106,    -1,    -1,    -1,   110,   111,   112,
-      10,    -1,    12,    13,    -1,    -1,    16,    -1,    -1,    -1,
-      -1,    -1,    -1,    23,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    36,    37,    -1,    39,
-      40,    41,    42,    43,    44,    45,    46,    47,    -1,    49,
-      -1,    -1,    -1,    -1,    -1,    -1,    56,    57,    -1,    59,
-      -1,    61,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    79,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    87,    88,    89,
-      90,    91,    92,    -1,    94,    -1,    96,    -1,    98,    99,
-      -1,    -1,   102,   103,    -1,    -1,   106,    -1,    -1,    -1,
-     110,   111,   112,    10,    -1,    12,    13,    -1,    -1,    16,
-      -1,    -1,    -1,    -1,    -1,    -1,    23,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    36,
-      37,    -1,    39,    40,    41,    42,    43,    44,    45,    46,
-      47,    -1,    49,    -1,    -1,    -1,    -1,    -1,    -1,    56,
-      57,    -1,    59,    -1,    61,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    79,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      87,    88,    89,    90,    91,    92,    -1,    94,    -1,    96,
-      -1,    98,    99,    -1,    -1,   102,   103,    -1,    10,   106,
-      12,    13,    -1,   110,   111,   112,    -1,    -1,    -1,    -1,
-      -1,    23,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    36,    37,    -1,    39,    40,    41,
-      42,    43,    44,    45,    46,    47,    -1,    49,    -1,    -1,
-      -1,    -1,    -1,    -1,    56,    57,    -1,    59,    -1,    61,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    79,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    87,    88,    89,    90,    91,
-      92,    -1,    94,    -1,    96,    -1,    98,    99,    -1,    -1,
-     102,   103,    12,    13,   106,    -1,    16,    -1,   110,   111,
-     112,    -1,    -1,    23,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    36,    37,    -1,    39,
-      40,    41,    42,    43,    44,    45,    46,    47,    -1,    49,
-      -1,    -1,    -1,    -1,    -1,    -1,    56,    57,    -1,    59,
-      -1,    61,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    79,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    87,    88,    89,
-      90,    91,    92,    -1,    94,    -1,    96,    -1,    98,    99,
-      -1,    -1,   102,   103,    12,    13,   106,    -1,    -1,    -1,
-     110,   111,   112,    -1,    -1,    23,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    36,    37,
-      -1,    39,    40,    41,    42,    43,    44,    45,    46,    47,
-      -1,    49,    -1,    -1,    -1,    -1,    -1,    -1,    56,    57,
-      -1,    59,    -1,    61,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    79,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    87,
-      88,    89,    90,    91,    92,    -1,    94,    95,    96,    -1,
-      98,    99,    -1,    -1,   102,   103,    12,    13,   106,    -1,
-      16,    -1,   110,   111,   112,    -1,    -1,    23,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      36,    37,    -1,    39,    40,    41,    42,    43,    44,    45,
-      46,    47,    -1,    49,    -1,    -1,    -1,    -1,    -1,    -1,
-      56,    57,    -1,    59,    -1,    61,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    79,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    87,    88,    89,    90,    91,    92,    -1,    94,    -1,
-      96,    -1,    98,    99,    -1,    -1,   102,   103,    12,    13,
-     106,    -1,    16,    -1,   110,   111,   112,    -1,    -1,    23,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    36,    37,    -1,    39,    40,    41,    42,    43,
-      44,    45,    46,    47,    -1,    49,    -1,    -1,    -1,    -1,
-      -1,    -1,    56,    57,    -1,    59,    -1,    61,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    79,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    87,    88,    89,    90,    91,    92,    -1,
-      94,    -1,    96,    -1,    98,    99,    -1,    -1,   102,   103,
-      12,    13,   106,    -1,    16,    -1,   110,   111,   112,    -1,
-      -1,    23,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    36,    37,    -1,    39,    40,    41,
-      42,    43,    44,    45,    46,    47,    -1,    49,    -1,    -1,
-      -1,    -1,    -1,    -1,    56,    57,    -1,    59,    -1,    61,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    79,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    87,    88,    89,    90,    91,
-      92,    -1,    94,    -1,    96,    -1,    98,    99,    -1,    -1,
-     102,   103,    12,    13,   106,    -1,    16,    -1,   110,   111,
-     112,    -1,    -1,    23,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    36,    37,    -1,    39,
-      40,    41,    42,    43,    44,    45,    46,    47,    -1,    49,
-      -1,    -1,    -1,    -1,    -1,    -1,    56,    57,    -1,    59,
-      -1,    61,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    79,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    87,    88,    89,
-      90,    91,    92,    -1,    94,    -1,    96,    -1,    98,    99,
-      -1,    -1,   102,   103,    12,    13,   106,    -1,    16,    -1,
-     110,   111,   112,    -1,    -1,    23,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    36,    37,
-      -1,    39,    40,    41,    42,    43,    44,    45,    46,    47,
-      -1,    49,    -1,    -1,    -1,    -1,    -1,    -1,    56,    57,
-      -1,    59,    -1,    61,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    79,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    87,
-      88,    89,    90,    91,    92,    -1,    94,    -1,    96,    -1,
-      98,    99,    -1,    -1,   102,   103,    -1,    -1,   106,    12,
-      13,    14,   110,   111,   112,    -1,    -1,    -1,    -1,    -1,
-      23,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    36,    37,    -1,    39,    40,    41,    42,
-      43,    44,    45,    46,    47,    -1,    49,    -1,    -1,    -1,
-      -1,    -1,    -1,    56,    57,    -1,    59,    -1,    61,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    79,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    87,    88,    89,    90,    91,    92,
-      -1,    94,    -1,    96,    -1,    98,    99,    -1,    -1,   102,
-     103,    12,    13,   106,    -1,    16,    -1,   110,   111,   112,
-      -1,    -1,    23,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    36,    37,    -1,    39,    40,
-      41,    42,    43,    44,    45,    46,    47,    -1,    49,    -1,
-      -1,    -1,    -1,    -1,    -1,    56,    57,    -1,    59,    -1,
-      61,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    79,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    87,    88,    89,    90,
-      91,    92,    -1,    94,    -1,    96,    -1,    98,    99,    -1,
-      -1,   102,   103,    12,    13,   106,    -1,    -1,    -1,   110,
-     111,   112,    -1,    -1,    23,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    36,    37,    -1,
-      39,    40,    41,    42,    43,    44,    45,    46,    47,    -1,
-      49,    -1,    -1,    -1,    -1,    -1,    -1,    56,    57,    -1,
-      59,    -1,    61,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      79,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    87,    88,
-      89,    90,    91,    92,    -1,    94,    -1,    96,    -1,    98,
-      99,    -1,    -1,   102,   103,    12,    13,   106,    -1,    -1,
-      -1,   110,   111,   112,    -1,    -1,    23,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    36,
-      -1,    -1,    39,    40,    41,    42,    43,    44,    45,    46,
-      47,    -1,    49,    -1,    -1,    -1,    -1,    -1,    -1,    56,
-      57,    -1,    59,    -1,    61,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    79,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      87,    88,    89,    90,    91,    92,    12,    13,    -1,    96,
-      -1,    98,    99,    -1,    -1,   102,   103,    23,    -1,   106,
-      -1,    -1,    -1,   110,   111,   112,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    39,    40,    41,    42,    43,    44,    45,
-      46,    47,    -1,    49,    -1,    -1,    -1,    -1,    -1,    -1,
-      56,    57,    -1,    59,    -1,    61,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    79,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    87,    88,    89,    90,    91,    92,    12,    13,    -1,
-      96,    -1,    98,    99,    -1,    -1,   102,   103,    23,    -1,
-     106,    -1,    -1,    -1,   110,   111,   112,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    39,    40,    41,    42,    43,    44,
-      45,    46,    47,    -1,    49,    -1,    -1,    -1,    -1,    -1,
-      -1,    56,    57,    -1,    59,    12,    61,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    23,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    79,    -1,    -1,    -1,    -1,    36,
-      37,    -1,    87,    88,    89,    90,    91,    92,    45,    46,
-      47,    -1,    49,    98,    99,    -1,    -1,   102,   103,    56,
-      57,   106,    59,    -1,    61,   110,   111,   112,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    79,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      87,    88,    89,    90,    91,    92,    12,    94,    95,    96,
-      -1,    98,    99,    -1,    -1,   102,   103,    23,    -1,   106,
-      -1,    -1,    -1,   110,   111,   112,    -1,    -1,    -1,    -1,
-      36,    37,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    45,
-      46,    47,    -1,    49,    -1,    -1,    -1,    -1,    -1,    -1,
-      56,    57,    -1,    59,    -1,    61,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    79,    -1,    -1,    -1,    -1,    12,    -1,
-      -1,    87,    88,    89,    90,    91,    92,    -1,    94,    23,
-      96,    -1,    98,    99,    -1,    -1,   102,   103,    -1,    -1,
-     106,    -1,    36,    -1,   110,   111,   112,    -1,    -1,    -1,
-      -1,    45,    46,    47,    -1,    49,    -1,    -1,    -1,    -1,
-      -1,    -1,    56,    57,    -1,    59,    12,    61,    -1,    15,
-      16,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    79,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    87,    88,    89,    90,    91,    92,    -1,
-      46,    47,    96,    49,    98,    99,    -1,    -1,   102,   103,
-      56,    57,   106,    59,    -1,    61,   110,   111,   112,    -1,
-      -1,    -1,    -1,    -1,    12,    -1,    -1,    15,    16,    -1,
-      -1,    -1,    -1,    79,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    87,    88,    89,    90,    91,    92,    -1,    -1,    -1,
-      96,    -1,    98,    99,    -1,    -1,   102,   103,    46,    47,
-     106,    49,    -1,    -1,   110,   111,   112,    -1,    56,    57,
-      -1,    59,    12,    61,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    23,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    79,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    87,
-      88,    89,    90,    91,    92,    45,    46,    47,    96,    49,
-      98,    99,    -1,    -1,   102,   103,    56,    57,   106,    59,
-      -1,    61,   110,   111,   112,    -1,    -1,    -1,    -1,    -1,
-      12,    -1,    -1,    15,    -1,    -1,    -1,    -1,    -1,    79,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    87,    88,    89,
-      90,    91,    92,    -1,    -1,    -1,    96,    -1,    98,    99,
-      -1,    -1,   102,   103,    46,    47,   106,    49,    -1,    -1,
-     110,   111,   112,    -1,    56,    57,    -1,    59,    12,    61,
-      -1,    15,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    79,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    87,    88,    89,    90,    91,
-      92,    -1,    46,    47,    96,    49,    98,    99,    -1,    -1,
-     102,   103,    56,    57,   106,    59,    -1,    61,   110,   111,
-     112,    -1,    -1,    -1,    -1,    -1,    12,    -1,    -1,    15,
-      -1,    -1,    -1,    -1,    -1,    79,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    87,    88,    89,    90,    91,    92,    -1,
-      -1,    -1,    96,    -1,    98,    99,    -1,    -1,   102,   103,
-      46,    47,   106,    49,    -1,    -1,   110,   111,   112,    -1,
-      56,    57,    -1,    59,    12,    61,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    79,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    87,    88,    89,    90,    91,    92,    -1,    46,    47,
-      96,    49,    98,    99,    -1,    -1,   102,   103,    56,    57,
-     106,    59,    -1,    61,   110,   111,   112,    -1,    -1,    -1,
-      -1,    -1,    70,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    79,    12,    -1,    -1,    15,    -1,    -1,    -1,    87,
-      88,    89,    90,    91,    92,    -1,    -1,    -1,    96,    -1,
-      98,    99,    -1,    -1,   102,   103,    -1,    -1,   106,    -1,
-      -1,    -1,   110,   111,   112,    -1,    46,    47,    -1,    49,
-      -1,    -1,    -1,    -1,    -1,    -1,    56,    57,    -1,    59,
-      12,    61,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    23,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    79,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    87,    88,    89,
-      90,    91,    92,    45,    46,    47,    96,    49,    98,    99,
-      -1,    -1,   102,   103,    56,    57,   106,    59,    12,    61,
-     110,   111,   112,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    79,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    87,    88,    89,    90,    91,
-      92,    -1,    46,    47,    -1,    49,    98,    99,    -1,    -1,
-     102,   103,    56,    57,   106,    59,    -1,    61,   110,   111,
-     112,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    79,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    87,    88,    89,    90,    91,    92,    -1,
-      -1,    -1,    96,    -1,    98,    99,    -1,    -1,   102,   103,
-      -1,    -1,   106,    -1,    -1,    -1,   110,   111,   112
-};
+#ifndef YYINITSTACKSIZE
+#define YYINITSTACKSIZE 200
+#endif
 
-/* YYSTOS[STATE-NUM] -- The symbol kind of the accessing symbol of
-   state STATE-NUM.  */
-static const yytype_uint8 yystos[] =
-{
-       0,     1,     9,    14,   115,   130,   132,   144,     0,     7,
-       8,    11,    12,    15,    46,    47,    49,    55,    56,    57,
-      59,    61,    79,    87,    88,    89,    90,    91,    92,    96,
-      98,    99,   102,   103,   106,   110,   111,   112,   127,   133,
-     134,   136,   139,   146,   147,   157,   158,   159,   160,   162,
-       9,    14,   127,   127,   139,   140,   148,    12,    12,   106,
-     159,   160,    87,    90,   125,    12,    12,    12,    12,    43,
-     160,    12,    12,   159,   159,   146,   159,   160,   160,   159,
-       1,     9,    14,    48,    50,    51,    52,    53,    54,    58,
-      62,    63,    77,    78,    97,   100,   119,   121,   126,   127,
-     139,   143,   150,   152,   156,   163,    10,   127,   130,    13,
-      23,    36,    37,    39,    40,    41,    42,    43,    44,    45,
-      94,   116,   117,   159,    12,    92,    15,   102,   103,   104,
-     105,   109,    70,   110,   111,    18,   156,   156,    10,    16,
-     118,    16,   118,    93,    16,   137,   139,   139,    12,   139,
-     139,   137,    16,   137,   159,    43,   139,   139,     9,   128,
-     129,    14,   128,   151,   151,   162,   139,   151,    12,    12,
-     151,   151,   139,   151,    12,     9,   153,   152,   156,    12,
-     138,   141,   142,   146,   159,   160,   151,    17,   152,   155,
-     129,   156,   134,    96,   139,   147,   139,   139,   139,   139,
-     139,   139,   162,   139,     9,   139,     9,   139,   139,   147,
-      70,   159,   159,   159,   159,   159,   159,   139,   137,    17,
-      17,     9,   139,    45,   139,    15,    16,   118,    87,   161,
-     118,   118,    16,    16,   159,   118,   118,     9,   129,    18,
-     151,   131,   150,   162,   139,   151,   139,   152,    80,   120,
-      17,   145,   140,    23,    45,    94,   116,   117,   159,   118,
-      13,    38,    41,    70,   152,   133,    17,   160,    95,   118,
-     118,   159,    19,   162,   139,    16,   118,   149,   139,   147,
-     139,   147,   162,   139,   137,    14,    45,   149,   149,   154,
-       9,   152,     9,    16,    12,   138,   147,   162,   138,   138,
-     138,   138,   159,   159,   159,   138,   127,   139,   139,   139,
-      87,     9,   135,    16,    16,    16,    16,    16,   118,    16,
-     118,    19,    14,   129,   162,   100,    45,   140,    95,   156,
-      16,   118,    16,   118,   127,   139,   147,   139,   129,   139,
-     149,    12,   162,    16,   138,    17,   160,   160,   156,    16,
-      16,    16,   131,    14,   124,   139,    16,    16,    17,   149,
-     129,   152,    16,   123,   131,   151,   152,   149,   122,   152
-};
+typedef struct {
+    unsigned stacksize;
+    YYINT    *s_base;
+    YYINT    *s_mark;
+    YYINT    *s_last;
+    YYSTYPE  *l_base;
+    YYSTYPE  *l_mark;
+#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
+    YYLTYPE  *p_base;
+    YYLTYPE  *p_mark;
+#endif
+} YYSTACKDATA;
+#if YYBTYACC
 
-/* YYR1[RULE-NUM] -- Symbol kind of the left-hand side of rule RULE-NUM.  */
-static const yytype_uint8 yyr1[] =
+struct YYParseState_s
 {
-       0,   114,   115,   115,   116,   116,   117,   117,   118,   118,
-     119,   119,   120,   120,   122,   121,   123,   121,   124,   121,
-     125,   125,   126,   127,   127,   128,   128,   129,   129,   130,
-     130,   131,   131,   132,   132,   133,   134,   134,   134,   134,
-     134,   134,   134,   135,   134,   136,   136,   137,   137,   138,
-     138,   138,   138,   138,   138,   138,   138,   138,   138,   138,
-     139,   139,   139,   139,   139,   139,   139,   139,   139,   139,
-     139,   139,   139,   139,   139,   139,   139,   139,   139,   140,
-     140,   141,   141,   142,   142,   142,   143,   143,   144,   144,
-     144,   144,   145,   145,   146,   146,   148,   147,   149,   149,
-     150,   150,   150,   150,   150,   150,   150,   150,   151,   151,
-     152,   152,   153,   154,   152,   152,   152,   152,   152,   152,
-     152,   152,   152,   152,   152,   152,   155,   152,   152,   156,
-     156,   157,   157,   158,   158,   159,   159,   159,   159,   159,
-     159,   159,   159,   159,   159,   159,   159,   159,   159,   159,
-     159,   159,   159,   159,   159,   159,   159,   159,   159,   159,
-     159,   159,   159,   159,   159,   159,   159,   159,   159,   159,
-     159,   159,   159,   159,   159,   159,   159,   160,   160,   160,
-     160,   161,   161,   161,   162,   162,   162,   163
+    struct YYParseState_s *save;    /* Previously saved parser state */
+    YYSTACKDATA            yystack; /* saved parser stack */
+    int                    state;   /* saved parser state */
+    int                    errflag; /* saved error recovery status */
+    int                    lexeme;  /* saved index of the conflict lexeme in the lexical queue */
+    YYINT                  ctry;    /* saved index in yyctable[] for this conflict */
 };
+typedef struct YYParseState_s YYParseState;
+#endif /* YYBTYACC */
+/* variables for the parser stack */
+static YYSTACKDATA yystack;
+#if YYBTYACC
 
-/* YYR2[RULE-NUM] -- Number of symbols on the right-hand side of rule RULE-NUM.  */
-static const yytype_int8 yyr2[] =
-{
-       0,     2,     1,     1,     1,     2,     1,     2,     1,     2,
-       1,     2,     1,     2,     0,    12,     0,    10,     0,     8,
-       1,     1,     4,     1,     2,     1,     2,     0,     1,     0,
-       1,     0,     1,     1,     3,     1,     1,     4,     4,     7,
-       3,     4,     4,     0,     9,     1,     3,     1,     3,     3,
-       5,     3,     3,     3,     3,     3,     5,     2,     1,     1,
-       3,     5,     3,     3,     3,     3,     3,     3,     3,     3,
-       3,     3,     3,     5,     4,     3,     2,     1,     1,     3,
-       3,     1,     3,     0,     1,     3,     1,     1,     1,     1,
-       2,     2,     1,     2,     1,     2,     0,     4,     1,     2,
-       4,     4,     4,     2,     5,     2,     1,     1,     1,     2,
-       2,     2,     0,     0,     9,     3,     2,     1,     4,     2,
-       3,     2,     2,     3,     2,     2,     0,     3,     2,     1,
-       2,     1,     1,     1,     2,     4,     3,     3,     3,     3,
-       3,     3,     2,     2,     2,     3,     4,     1,     3,     4,
-       2,     2,     2,     2,     2,     4,     3,     2,     1,     6,
-       6,     3,     6,     6,     1,     8,     8,     6,     4,     1,
-       6,     6,     8,     8,     8,     6,     1,     1,     4,     1,
-       2,     0,     1,     3,     1,     1,     1,     4
-};
+/* Current parser state */
+static YYParseState *yyps = 0;
 
+/* yypath != NULL: do the full parse, starting at *yypath parser state. */
+static YYParseState *yypath = 0;
 
-enum { YYENOMEM = -2 };
+/* Base of the lexical value queue */
+static YYSTYPE *yylvals = 0;
 
-#define yyerrok         (yyerrstatus = 0)
-#define yyclearin       (yychar = YYEMPTY)
+/* Current position at lexical value queue */
+static YYSTYPE *yylvp = 0;
 
-#define YYACCEPT        goto yyacceptlab
-#define YYABORT         goto yyabortlab
-#define YYERROR         goto yyerrorlab
-#define YYNOMEM         goto yyexhaustedlab
-
-
-#define YYRECOVERING()  (!!yyerrstatus)
-
-#define YYBACKUP(Token, Value)                                    \
-  do                                                              \
-    if (yychar == YYEMPTY)                                        \
-      {                                                           \
-        yychar = (Token);                                         \
-        yylval = (Value);                                         \
-        YYPOPSTACK (yylen);                                       \
-        yystate = *yyssp;                                         \
-        goto yybackup;                                            \
-      }                                                           \
-    else                                                          \
-      {                                                           \
-        yyerror (YY_("syntax error: cannot back up")); \
-        YYERROR;                                                  \
-      }                                                           \
-  while (0)
-
-/* Backward compatibility with an undocumented macro.
-   Use YYerror or YYUNDEF. */
-#define YYERRCODE YYUNDEF
-
-
-/* Enable debugging if requested.  */
-#if YYDEBUG
-
-# ifndef YYFPRINTF
-#  include <stdio.h> /* INFRINGES ON USER NAME SPACE */
-#  define YYFPRINTF fprintf
-# endif
+/* End position of lexical value queue */
+static YYSTYPE *yylve = 0;
 
-# define YYDPRINTF(Args)                        \
-do {                                            \
-  if (yydebug)                                  \
-    YYFPRINTF Args;                             \
-} while (0)
+/* The last allocated position at the lexical value queue */
+static YYSTYPE *yylvlim = 0;
 
+#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
+/* Base of the lexical position queue */
+static YYLTYPE *yylpsns = 0;
 
+/* Current position at lexical position queue */
+static YYLTYPE *yylpp = 0;
 
+/* End position of lexical position queue */
+static YYLTYPE *yylpe = 0;
 
-# define YY_SYMBOL_PRINT(Title, Kind, Value, Location)                    \
-do {                                                                      \
-  if (yydebug)                                                            \
-    {                                                                     \
-      YYFPRINTF (stderr, "%s ", Title);                                   \
-      yy_symbol_print (stderr,                                            \
-                  Kind, Value); \
-      YYFPRINTF (stderr, "\n");                                           \
-    }                                                                     \
-} while (0)
+/* The last allocated position at the lexical position queue */
+static YYLTYPE *yylplim = 0;
+#endif
 
+/* Current position at lexical token queue */
+static YYINT  *yylexp = 0;
 
-/*-----------------------------------.
-| Print this symbol's value on YYO.  |
-`-----------------------------------*/
+static YYINT  *yylexemes = 0;
+#endif /* YYBTYACC */
+#line 457 "awkgram.y"
 
-static void
-yy_symbol_value_print (FILE *yyo,
-                       yysymbol_kind_t yykind, YYSTYPE const * const yyvaluep)
+void setfname(Cell *p)
 {
-  FILE *yyoutput = yyo;
-  YY_USE (yyoutput);
-  if (!yyvaluep)
-    return;
-  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
-  YY_USE (yykind);
-  YY_IGNORE_MAYBE_UNINITIALIZED_END
+       if (isarr(p))
+               SYNTAX("%s is an array, not a function", p->nval);
+       else if (isfcn(p))
+               SYNTAX("you can't define function %s more than once", p->nval);
+       curfname = p->nval;
 }
 
-
-/*---------------------------.
-| Print this symbol on YYO.  |
-`---------------------------*/
-
-static void
-yy_symbol_print (FILE *yyo,
-                 yysymbol_kind_t yykind, YYSTYPE const * const yyvaluep)
+int constnode(Node *p)
 {
-  YYFPRINTF (yyo, "%s %s (",
-             yykind < YYNTOKENS ? "token" : "nterm", yysymbol_name (yykind));
-
-  yy_symbol_value_print (yyo, yykind, yyvaluep);
-  YYFPRINTF (yyo, ")");
+       return isvalue(p) && ((Cell *) (p->narg[0]))->csub == CCON;
 }
 
-/*------------------------------------------------------------------.
-| yy_stack_print -- Print the state stack from its BOTTOM up to its |
-| TOP (included).                                                   |
-`------------------------------------------------------------------*/
-
-static void
-yy_stack_print (yy_state_t *yybottom, yy_state_t *yytop)
+char *strnode(Node *p)
 {
-  YYFPRINTF (stderr, "Stack now");
-  for (; yybottom <= yytop; yybottom++)
-    {
-      int yybot = *yybottom;
-      YYFPRINTF (stderr, " %d", yybot);
-    }
-  YYFPRINTF (stderr, "\n");
+       return ((Cell *)(p->narg[0]))->sval;
 }
 
-# define YY_STACK_PRINT(Bottom, Top)                            \
-do {                                                            \
-  if (yydebug)                                                  \
-    yy_stack_print ((Bottom), (Top));                           \
-} while (0)
-
-
-/*------------------------------------------------.
-| Report that the YYRULE is going to be reduced.  |
-`------------------------------------------------*/
+Node *notnull(Node *n)
+{
+       switch (n->nobj) {
+       case LE: case LT: case EQ: case NE: case GT: case GE:
+       case BOR: case AND: case NOT:
+               return n;
+       default:
+               return op2(NE, n, nullnode);
+       }
+}
 
-static void
-yy_reduce_print (yy_state_t *yyssp, YYSTYPE *yyvsp,
-                 int yyrule)
+void checkdup(Node *vl, Cell *cp)      /* check if name already in list */
 {
-  int yylno = yyrline[yyrule];
-  int yynrhs = yyr2[yyrule];
-  int yyi;
-  YYFPRINTF (stderr, "Reducing stack by rule %d (line %d):\n",
-             yyrule - 1, yylno);
-  /* The symbols being reduced.  */
-  for (yyi = 0; yyi < yynrhs; yyi++)
-    {
-      YYFPRINTF (stderr, "   $%d = ", yyi + 1);
-      yy_symbol_print (stderr,
-                       YY_ACCESSING_SYMBOL (+yyssp[yyi + 1 - yynrhs]),
-                       &yyvsp[(yyi + 1) - (yynrhs)]);
-      YYFPRINTF (stderr, "\n");
-    }
+       char *s = cp->nval;
+       for ( ; vl; vl = vl->nnext) {
+               if (strcmp(s, ((Cell *)(vl->narg[0]))->nval) == 0) {
+                       SYNTAX("duplicate argument %s", s);
+                       break;
+               }
+       }
 }
+#line 3712 "awkgram.tab.c"
 
-# define YY_REDUCE_PRINT(Rule)          \
-do {                                    \
-  if (yydebug)                          \
-    yy_reduce_print (yyssp, yyvsp, Rule); \
-} while (0)
+/* For use in generated program */
+#define yydepth (int)(yystack.s_mark - yystack.s_base)
+#if YYBTYACC
+#define yytrial (yyps->save)
+#endif /* YYBTYACC */
 
-/* Nonzero means print parse trace.  It is left uninitialized so that
-   multiple parsers can coexist.  */
-int yydebug;
-#else /* !YYDEBUG */
-# define YYDPRINTF(Args) ((void) 0)
-# define YY_SYMBOL_PRINT(Title, Kind, Value, Location)
-# define YY_STACK_PRINT(Bottom, Top)
-# define YY_REDUCE_PRINT(Rule)
-#endif /* !YYDEBUG */
+#if YYDEBUG
+#include <stdio.h>     /* needed for printf */
+#endif
 
+#include <stdlib.h>    /* needed for malloc, etc */
+#include <string.h>    /* needed for memset */
 
-/* YYINITDEPTH -- initial size of the parser's stacks.  */
-#ifndef YYINITDEPTH
-# define YYINITDEPTH 200
+/* allocate initial stack or double stack size, up to YYMAXDEPTH */
+static int yygrowstack(YYSTACKDATA *data)
+{
+    int i;
+    unsigned newsize;
+    YYINT *newss;
+    YYSTYPE *newvs;
+#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
+    YYLTYPE *newps;
 #endif
 
-/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
-   if the built-in stack extension method is used).
+    if ((newsize = data->stacksize) == 0)
+        newsize = YYINITSTACKSIZE;
+    else if (newsize >= YYMAXDEPTH)
+        return YYENOMEM;
+    else if ((newsize *= 2) > YYMAXDEPTH)
+        newsize = YYMAXDEPTH;
+
+    i = (int) (data->s_mark - data->s_base);
+    newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss));
+    if (newss == 0)
+        return YYENOMEM;
+
+    data->s_base = newss;
+    data->s_mark = newss + i;
+
+    newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
+    if (newvs == 0)
+        return YYENOMEM;
+
+    data->l_base = newvs;
+    data->l_mark = newvs + i;
+
+#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
+    newps = (YYLTYPE *)realloc(data->p_base, newsize * sizeof(*newps));
+    if (newps == 0)
+        return YYENOMEM;
 
-   Do not make this value too large; the results are undefined if
-   YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
-   evaluated with infinite-precision integer arithmetic.  */
-
-#ifndef YYMAXDEPTH
-# define YYMAXDEPTH 10000
+    data->p_base = newps;
+    data->p_mark = newps + i;
 #endif
 
+    data->stacksize = newsize;
+    data->s_last = data->s_base + newsize - 1;
 
+#if YYDEBUG
+    if (yydebug)
+        fprintf(stderr, "%sdebug: stack size increased to %d\n", YYPREFIX, newsize);
+#endif
+    return 0;
+}
 
+#if YYPURE || defined(YY_NO_LEAKS)
+static void yyfreestack(YYSTACKDATA *data)
+{
+    free(data->s_base);
+    free(data->l_base);
+#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
+    free(data->p_base);
+#endif
+    memset(data, 0, sizeof(*data));
+}
+#else
+#define yyfreestack(data) /* nothing */
+#endif /* YYPURE || defined(YY_NO_LEAKS) */
+#if YYBTYACC
 
+static YYParseState *
+yyNewState(unsigned size)
+{
+    YYParseState *p = (YYParseState *) malloc(sizeof(YYParseState));
+    if (p == NULL) return NULL;
 
+    p->yystack.stacksize = size;
+    if (size == 0)
+    {
+        p->yystack.s_base = NULL;
+        p->yystack.l_base = NULL;
+#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
+        p->yystack.p_base = NULL;
+#endif
+        return p;
+    }
+    p->yystack.s_base    = (YYINT *) malloc(size * sizeof(YYINT));
+    if (p->yystack.s_base == NULL) return NULL;
+    p->yystack.l_base    = (YYSTYPE *) malloc(size * sizeof(YYSTYPE));
+    if (p->yystack.l_base == NULL) return NULL;
+    memset(p->yystack.l_base, 0, size * sizeof(YYSTYPE));
+#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
+    p->yystack.p_base    = (YYLTYPE *) malloc(size * sizeof(YYLTYPE));
+    if (p->yystack.p_base == NULL) return NULL;
+    memset(p->yystack.p_base, 0, size * sizeof(YYLTYPE));
+#endif
 
-/*-----------------------------------------------.
-| Release the memory associated to this symbol.  |
-`-----------------------------------------------*/
+    return p;
+}
 
 static void
-yydestruct (const char *yymsg,
-            yysymbol_kind_t yykind, YYSTYPE *yyvaluep)
+yyFreeState(YYParseState *p)
 {
-  YY_USE (yyvaluep);
-  if (!yymsg)
-    yymsg = "Deleting";
-  YY_SYMBOL_PRINT (yymsg, yykind, yyvaluep, yylocationp);
-
-  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
-  YY_USE (yykind);
-  YY_IGNORE_MAYBE_UNINITIALIZED_END
+    yyfreestack(&p->yystack);
+    free(p);
 }
+#endif /* YYBTYACC */
 
-
-/* Lookahead token kind.  */
-int yychar;
-
-/* The semantic value of the lookahead symbol.  */
-YYSTYPE yylval;
-/* Number of syntax errors so far.  */
-int yynerrs;
-
-
-
-
-/*----------.
-| yyparse.  |
-`----------*/
+#define YYABORT  goto yyabort
+#define YYREJECT goto yyabort
+#define YYACCEPT goto yyaccept
+#define YYERROR  goto yyerrlab
+#if YYBTYACC
+#define YYVALID        do { if (yyps->save)            goto yyvalid; } while(0)
+#define YYVALID_NESTED do { if (yyps->save && \
+                                yyps->save->save == 0) goto yyvalid; } while(0)
+#endif /* YYBTYACC */
 
 int
-yyparse (void)
+YYPARSE_DECL()
 {
-    yy_state_fast_t yystate = 0;
-    /* Number of tokens to shift before error messages enabled.  */
-    int yyerrstatus = 0;
-
-    /* Refer to the stacks through separate pointers, to allow yyoverflow
-       to reallocate them elsewhere.  */
-
-    /* Their size.  */
-    YYPTRDIFF_T yystacksize = YYINITDEPTH;
-
-    /* The state stack: array, bottom, top.  */
-    yy_state_t yyssa[YYINITDEPTH];
-    yy_state_t *yyss = yyssa;
-    yy_state_t *yyssp = yyss;
-
-    /* The semantic value stack: array, bottom, top.  */
-    YYSTYPE yyvsa[YYINITDEPTH];
-    YYSTYPE *yyvs = yyvsa;
-    YYSTYPE *yyvsp = yyvs;
-
-  int yyn;
-  /* The return value of yyparse.  */
-  int yyresult;
-  /* Lookahead symbol kind.  */
-  yysymbol_kind_t yytoken = YYSYMBOL_YYEMPTY;
-  /* The variables used to return semantic value and location from the
-     action routines.  */
-  YYSTYPE yyval;
-
-
-
-#define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N))
-
-  /* The number of symbols on the RHS of the reduced rule.
-     Keep to zero when no symbol should be popped.  */
-  int yylen = 0;
-
-  YYDPRINTF ((stderr, "Starting parse\n"));
-
-  yychar = YYEMPTY; /* Cause a token to be read.  */
-
-  goto yysetstate;
+    int yym, yyn, yystate, yyresult;
+#if YYBTYACC
+    int yynewerrflag;
+    YYParseState *yyerrctx = NULL;
+#endif /* YYBTYACC */
+#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
+    YYLTYPE  yyerror_loc_range[3]; /* position of error start/end (0 unused) */
+#endif
+#if YYDEBUG
+    const char *yys;
 
+    if ((yys = getenv("YYDEBUG")) != 0)
+    {
+        yyn = *yys;
+        if (yyn >= '0' && yyn <= '9')
+            yydebug = yyn - '0';
+    }
+    if (yydebug)
+        fprintf(stderr, "%sdebug[<# of symbols on state stack>]\n", YYPREFIX);
+#endif
+#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
+    memset(yyerror_loc_range, 0, sizeof(yyerror_loc_range));
+#endif
 
-/*------------------------------------------------------------.
-| yynewstate -- push a new state, which is found in yystate.  |
-`------------------------------------------------------------*/
-yynewstate:
-  /* In all cases, when you get here, the value and location stacks
-     have just been pushed.  So pushing a state here evens the stacks.  */
-  yyssp++;
+#if YYBTYACC
+    yyps = yyNewState(0); if (yyps == 0) goto yyenomem;
+    yyps->save = 0;
+#endif /* YYBTYACC */
+    yym = 0;
+    yyn = 0;
+    yynerrs = 0;
+    yyerrflag = 0;
+    yychar = YYEMPTY;
+    yystate = 0;
 
+#if YYPURE
+    memset(&yystack, 0, sizeof(yystack));
+#endif
 
-/*--------------------------------------------------------------------.
-| yysetstate -- set current state (the top of the stack) to yystate.  |
-`--------------------------------------------------------------------*/
-yysetstate:
-  YYDPRINTF ((stderr, "Entering state %d\n", yystate));
-  YY_ASSERT (0 <= yystate && yystate < YYNSTATES);
-  YY_IGNORE_USELESS_CAST_BEGIN
-  *yyssp = YY_CAST (yy_state_t, yystate);
-  YY_IGNORE_USELESS_CAST_END
-  YY_STACK_PRINT (yyss, yyssp);
+    if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
+    yystack.s_mark = yystack.s_base;
+    yystack.l_mark = yystack.l_base;
+#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
+    yystack.p_mark = yystack.p_base;
+#endif
+    yystate = 0;
+    *yystack.s_mark = 0;
 
-  if (yyss + yystacksize - 1 <= yyssp)
-#if !defined yyoverflow && !defined YYSTACK_RELOCATE
-    YYNOMEM;
-#else
+yyloop:
+    if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
+    if (yychar < 0)
     {
-      /* Get the current used size of the three stacks, in elements.  */
-      YYPTRDIFF_T yysize = yyssp - yyss + 1;
+#if YYBTYACC
+        do {
+        if (yylvp < yylve)
+        {
+            /* we're currently re-reading tokens */
+            yylval = *yylvp++;
+#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
+            yylloc = *yylpp++;
+#endif
+            yychar = *yylexp++;
+            break;
+        }
+        if (yyps->save)
+        {
+            /* in trial mode; save scanner results for future parse attempts */
+            if (yylvp == yylvlim)
+            {   /* Enlarge lexical value queue */
+                size_t p = (size_t) (yylvp - yylvals);
+                size_t s = (size_t) (yylvlim - yylvals);
+
+                s += YYLVQUEUEGROWTH;
+                if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem;
+                if ((yylvals   = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem;
+#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
+                if ((yylpsns   = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem;
+#endif
+                yylvp   = yylve = yylvals + p;
+                yylvlim = yylvals + s;
+#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
+                yylpp   = yylpe = yylpsns + p;
+                yylplim = yylpsns + s;
+#endif
+                yylexp  = yylexemes + p;
+            }
+            *yylexp = (YYINT) YYLEX;
+            *yylvp++ = yylval;
+            yylve++;
+#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
+            *yylpp++ = yylloc;
+            yylpe++;
+#endif
+            yychar = *yylexp++;
+            break;
+        }
+        /* normal operation, no conflict encountered */
+#endif /* YYBTYACC */
+        yychar = YYLEX;
+#if YYBTYACC
+        } while (0);
+#endif /* YYBTYACC */
+        if (yychar < 0) yychar = YYEOF;
+#if YYDEBUG
+        if (yydebug)
+        {
+            if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
+            fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)",
+                            YYDEBUGSTR, yydepth, yystate, yychar, yys);
+#ifdef YYSTYPE_TOSTRING
+#if YYBTYACC
+            if (!yytrial)
+#endif /* YYBTYACC */
+                fprintf(stderr, " <%s>", YYSTYPE_TOSTRING(yychar, yylval));
+#endif
+            fputc('\n', stderr);
+        }
+#endif
+    }
+#if YYBTYACC
 
-# if defined yyoverflow
-      {
-        /* Give user a chance to reallocate the stack.  Use copies of
-           these so that the &'s don't force the real ones into
-           memory.  */
-        yy_state_t *yyss1 = yyss;
-        YYSTYPE *yyvs1 = yyvs;
-
-        /* Each stack pointer address is followed by the size of the
-           data in use in that stack, in bytes.  This used to be a
-           conditional around just the two extra args, but that might
-           be undefined if yyoverflow is a macro.  */
-        yyoverflow (YY_("memory exhausted"),
-                    &yyss1, yysize * YYSIZEOF (*yyssp),
-                    &yyvs1, yysize * YYSIZEOF (*yyvsp),
-                    &yystacksize);
-        yyss = yyss1;
-        yyvs = yyvs1;
-      }
-# else /* defined YYSTACK_RELOCATE */
-      /* Extend the stack our own way.  */
-      if (YYMAXDEPTH <= yystacksize)
-        YYNOMEM;
-      yystacksize *= 2;
-      if (YYMAXDEPTH < yystacksize)
-        yystacksize = YYMAXDEPTH;
-
-      {
-        yy_state_t *yyss1 = yyss;
-        union yyalloc *yyptr =
-          YY_CAST (union yyalloc *,
-                   YYSTACK_ALLOC (YY_CAST (YYSIZE_T, YYSTACK_BYTES (yystacksize))));
-        if (! yyptr)
-          YYNOMEM;
-        YYSTACK_RELOCATE (yyss_alloc, yyss);
-        YYSTACK_RELOCATE (yyvs_alloc, yyvs);
-#  undef YYSTACK_RELOCATE
-        if (yyss1 != yyssa)
-          YYSTACK_FREE (yyss1);
-      }
-# endif
+    /* Do we have a conflict? */
+    if (((yyn = yycindex[yystate]) != 0) && (yyn += yychar) >= 0 &&
+        yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
+    {
+        YYINT ctry;
 
-      yyssp = yyss + yysize - 1;
-      yyvsp = yyvs + yysize - 1;
+        if (yypath)
+        {
+            YYParseState *save;
+#if YYDEBUG
+            if (yydebug)
+                fprintf(stderr, "%s[%d]: CONFLICT in state %d: following successful trial parse\n",
+                                YYDEBUGSTR, yydepth, yystate);
+#endif
+            /* Switch to the next conflict context */
+            save = yypath;
+            yypath = save->save;
+            save->save = NULL;
+            ctry = save->ctry;
+            if (save->state != yystate) YYABORT;
+            yyFreeState(save);
 
-      YY_IGNORE_USELESS_CAST_BEGIN
-      YYDPRINTF ((stderr, "Stack size increased to %ld\n",
-                  YY_CAST (long, yystacksize)));
-      YY_IGNORE_USELESS_CAST_END
+        }
+        else
+        {
 
-      if (yyss + yystacksize - 1 <= yyssp)
-        YYABORT;
+            /* Unresolved conflict - start/continue trial parse */
+            YYParseState *save;
+#if YYDEBUG
+            if (yydebug)
+            {
+                fprintf(stderr, "%s[%d]: CONFLICT in state %d. ", YYDEBUGSTR, yydepth, yystate);
+                if (yyps->save)
+                    fputs("ALREADY in conflict, continuing trial parse.\n", stderr);
+                else
+                    fputs("Starting trial parse.\n", stderr);
+            }
+#endif
+            save                  = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1));
+            if (save == NULL) goto yyenomem;
+            save->save            = yyps->save;
+            save->state           = yystate;
+            save->errflag         = yyerrflag;
+            save->yystack.s_mark  = save->yystack.s_base + (yystack.s_mark - yystack.s_base);
+            memcpy (save->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT));
+            save->yystack.l_mark  = save->yystack.l_base + (yystack.l_mark - yystack.l_base);
+            memcpy (save->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));
+#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
+            save->yystack.p_mark  = save->yystack.p_base + (yystack.p_mark - yystack.p_base);
+            memcpy (save->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));
+#endif
+            ctry                  = yytable[yyn];
+            if (yyctable[ctry] == -1)
+            {
+#if YYDEBUG
+                if (yydebug && yychar >= YYEOF)
+                    fprintf(stderr, "%s[%d]: backtracking 1 token\n", YYDEBUGSTR, yydepth);
+#endif
+                ctry++;
+            }
+            save->ctry = ctry;
+            if (yyps->save == NULL)
+            {
+                /* If this is a first conflict in the stack, start saving lexemes */
+                if (!yylexemes)
+                {
+                    yylexemes = (YYINT *) malloc((YYLVQUEUEGROWTH) * sizeof(YYINT));
+                    if (yylexemes == NULL) goto yyenomem;
+                    yylvals   = (YYSTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYSTYPE));
+                    if (yylvals == NULL) goto yyenomem;
+                    yylvlim   = yylvals + YYLVQUEUEGROWTH;
+#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
+                    yylpsns   = (YYLTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYLTYPE));
+                    if (yylpsns == NULL) goto yyenomem;
+                    yylplim   = yylpsns + YYLVQUEUEGROWTH;
+#endif
+                }
+                if (yylvp == yylve)
+                {
+                    yylvp  = yylve = yylvals;
+#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
+                    yylpp  = yylpe = yylpsns;
+#endif
+                    yylexp = yylexemes;
+                    if (yychar >= YYEOF)
+                    {
+                        *yylve++ = yylval;
+#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
+                        *yylpe++ = yylloc;
+#endif
+                        *yylexp  = (YYINT) yychar;
+                        yychar   = YYEMPTY;
+                    }
+                }
+            }
+            if (yychar >= YYEOF)
+            {
+                yylvp--;
+#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
+                yylpp--;
+#endif
+                yylexp--;
+                yychar = YYEMPTY;
+            }
+            save->lexeme = (int) (yylvp - yylvals);
+            yyps->save   = save;
+        }
+        if (yytable[yyn] == ctry)
+        {
+#if YYDEBUG
+            if (yydebug)
+                fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n",
+                                YYDEBUGSTR, yydepth, yystate, yyctable[ctry]);
+#endif
+            if (yychar < 0)
+            {
+                yylvp++;
+#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
+                yylpp++;
+#endif
+                yylexp++;
+            }
+            if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
+                goto yyoverflow;
+            yystate = yyctable[ctry];
+            *++yystack.s_mark = (YYINT) yystate;
+            *++yystack.l_mark = yylval;
+#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
+            *++yystack.p_mark = yylloc;
+#endif
+            yychar  = YYEMPTY;
+            if (yyerrflag > 0) --yyerrflag;
+            goto yyloop;
+        }
+        else
+        {
+            yyn = yyctable[ctry];
+            goto yyreduce;
+        }
+    } /* End of code dealing with conflicts */
+#endif /* YYBTYACC */
+    if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 &&
+            yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
+    {
+#if YYDEBUG
+        if (yydebug)
+            fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n",
+                            YYDEBUGSTR, yydepth, yystate, yytable[yyn]);
+#endif
+        if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
+        yystate = yytable[yyn];
+        *++yystack.s_mark = yytable[yyn];
+        *++yystack.l_mark = yylval;
+#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
+        *++yystack.p_mark = yylloc;
+#endif
+        yychar = YYEMPTY;
+        if (yyerrflag > 0)  --yyerrflag;
+        goto yyloop;
+    }
+    if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 &&
+            yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
+    {
+        yyn = yytable[yyn];
+        goto yyreduce;
     }
-#endif /* !defined yyoverflow && !defined YYSTACK_RELOCATE */
-
+    if (yyerrflag != 0) goto yyinrecovery;
+#if YYBTYACC
 
-  if (yystate == YYFINAL)
-    YYACCEPT;
-
-  goto yybackup;
+    yynewerrflag = 1;
+    goto yyerrhandler;
+    goto yyerrlab; /* redundant goto avoids 'unused label' warning */
 
+yyerrlab:
+    /* explicit YYERROR from an action -- pop the rhs of the rule reduced
+     * before looking for error recovery */
+    yystack.s_mark -= yym;
+    yystate = *yystack.s_mark;
+    yystack.l_mark -= yym;
+#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
+    yystack.p_mark -= yym;
+#endif
 
-/*-----------.
-| yybackup.  |
-`-----------*/
-yybackup:
-  /* Do appropriate processing given the current state.  Read a
-     lookahead token if we need one and don't already have one.  */
+    yynewerrflag = 0;
+yyerrhandler:
+    while (yyps->save)
+    {
+        int ctry;
+        YYParseState *save = yyps->save;
+#if YYDEBUG
+        if (yydebug)
+            fprintf(stderr, "%s[%d]: ERROR in state %d, CONFLICT BACKTRACKING to state %d, %d tokens\n",
+                            YYDEBUGSTR, yydepth, yystate, yyps->save->state,
+                    (int)(yylvp - yylvals - yyps->save->lexeme));
+#endif
+        /* Memorize most forward-looking error state in case it's really an error. */
+        if (yyerrctx == NULL || yyerrctx->lexeme < yylvp - yylvals)
+        {
+            /* Free old saved error context state */
+            if (yyerrctx) yyFreeState(yyerrctx);
+            /* Create and fill out new saved error context state */
+            yyerrctx                 = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1));
+            if (yyerrctx == NULL) goto yyenomem;
+            yyerrctx->save           = yyps->save;
+            yyerrctx->state          = yystate;
+            yyerrctx->errflag        = yyerrflag;
+            yyerrctx->yystack.s_mark = yyerrctx->yystack.s_base + (yystack.s_mark - yystack.s_base);
+            memcpy (yyerrctx->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT));
+            yyerrctx->yystack.l_mark = yyerrctx->yystack.l_base + (yystack.l_mark - yystack.l_base);
+            memcpy (yyerrctx->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));
+#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
+            yyerrctx->yystack.p_mark = yyerrctx->yystack.p_base + (yystack.p_mark - yystack.p_base);
+            memcpy (yyerrctx->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));
+#endif
+            yyerrctx->lexeme         = (int) (yylvp - yylvals);
+        }
+        yylvp          = yylvals   + save->lexeme;
+#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
+        yylpp          = yylpsns   + save->lexeme;
+#endif
+        yylexp         = yylexemes + save->lexeme;
+        yychar         = YYEMPTY;
+        yystack.s_mark = yystack.s_base + (save->yystack.s_mark - save->yystack.s_base);
+        memcpy (yystack.s_base, save->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT));
+        yystack.l_mark = yystack.l_base + (save->yystack.l_mark - save->yystack.l_base);
+        memcpy (yystack.l_base, save->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));
+#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
+        yystack.p_mark = yystack.p_base + (save->yystack.p_mark - save->yystack.p_base);
+        memcpy (yystack.p_base, save->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));
+#endif
+        ctry           = ++save->ctry;
+        yystate        = save->state;
+        /* We tried shift, try reduce now */
+        if ((yyn = yyctable[ctry]) >= 0) goto yyreduce;
+        yyps->save     = save->save;
+        save->save     = NULL;
+        yyFreeState(save);
 
-  /* First try to decide what to do without reference to lookahead token.  */
-  yyn = yypact[yystate];
-  if (yypact_value_is_default (yyn))
-    goto yydefault;
+        /* Nothing left on the stack -- error */
+        if (!yyps->save)
+        {
+#if YYDEBUG
+            if (yydebug)
+                fprintf(stderr, "%sdebug[%d,trial]: trial parse FAILED, entering ERROR mode\n",
+                                YYPREFIX, yydepth);
+#endif
+            /* Restore state as it was in the most forward-advanced error */
+            yylvp          = yylvals   + yyerrctx->lexeme;
+#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
+            yylpp          = yylpsns   + yyerrctx->lexeme;
+#endif
+            yylexp         = yylexemes + yyerrctx->lexeme;
+            yychar         = yylexp[-1];
+            yylval         = yylvp[-1];
+#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
+            yylloc         = yylpp[-1];
+#endif
+            yystack.s_mark = yystack.s_base + (yyerrctx->yystack.s_mark - yyerrctx->yystack.s_base);
+            memcpy (yystack.s_base, yyerrctx->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT));
+            yystack.l_mark = yystack.l_base + (yyerrctx->yystack.l_mark - yyerrctx->yystack.l_base);
+            memcpy (yystack.l_base, yyerrctx->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));
+#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
+            yystack.p_mark = yystack.p_base + (yyerrctx->yystack.p_mark - yyerrctx->yystack.p_base);
+            memcpy (yystack.p_base, yyerrctx->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));
+#endif
+            yystate        = yyerrctx->state;
+            yyFreeState(yyerrctx);
+            yyerrctx       = NULL;
+        }
+        yynewerrflag = 1;
+    }
+    if (yynewerrflag == 0) goto yyinrecovery;
+#endif /* YYBTYACC */
 
-  /* Not known => get a lookahead token if don't already have one.  */
+    YYERROR_CALL("syntax error");
+#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
+    yyerror_loc_range[1] = yylloc; /* lookahead position is error start position */
+#endif
 
-  /* YYCHAR is either empty, or end-of-input, or a valid lookahead.  */
-  if (yychar == YYEMPTY)
-    {
-      YYDPRINTF ((stderr, "Reading a token\n"));
-      yychar = yylex ();
-    }
+#if !YYBTYACC
+    goto yyerrlab; /* redundant goto avoids 'unused label' warning */
+yyerrlab:
+#endif
+    ++yynerrs;
 
-  if (yychar <= YYEOF)
+yyinrecovery:
+    if (yyerrflag < 3)
     {
-      yychar = YYEOF;
-      yytoken = YYSYMBOL_YYEOF;
-      YYDPRINTF ((stderr, "Now at end of input.\n"));
+        yyerrflag = 3;
+        for (;;)
+        {
+            if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 &&
+                    yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE)
+            {
+#if YYDEBUG
+                if (yydebug)
+                    fprintf(stderr, "%s[%d]: state %d, error recovery shifting to state %d\n",
+                                    YYDEBUGSTR, yydepth, *yystack.s_mark, yytable[yyn]);
+#endif
+                if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
+                yystate = yytable[yyn];
+                *++yystack.s_mark = yytable[yyn];
+                *++yystack.l_mark = yylval;
+#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
+                /* lookahead position is error end position */
+                yyerror_loc_range[2] = yylloc;
+                YYLLOC_DEFAULT(yyloc, yyerror_loc_range, 2); /* position of error span */
+                *++yystack.p_mark = yyloc;
+#endif
+                goto yyloop;
+            }
+            else
+            {
+#if YYDEBUG
+                if (yydebug)
+                    fprintf(stderr, "%s[%d]: error recovery discarding state %d\n",
+                                    YYDEBUGSTR, yydepth, *yystack.s_mark);
+#endif
+                if (yystack.s_mark <= yystack.s_base) goto yyabort;
+#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
+                /* the current TOS position is the error start position */
+                yyerror_loc_range[1] = *yystack.p_mark;
+#endif
+#if defined(YYDESTRUCT_CALL)
+#if YYBTYACC
+                if (!yytrial)
+#endif /* YYBTYACC */
+#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
+                    YYDESTRUCT_CALL("error: discarding state",
+                                    yystos[*yystack.s_mark], yystack.l_mark, yystack.p_mark);
+#else
+                    YYDESTRUCT_CALL("error: discarding state",
+                                    yystos[*yystack.s_mark], yystack.l_mark);
+#endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */
+#endif /* defined(YYDESTRUCT_CALL) */
+                --yystack.s_mark;
+                --yystack.l_mark;
+#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
+                --yystack.p_mark;
+#endif
+            }
+        }
     }
-  else if (yychar == YYerror)
+    else
     {
-      /* The scanner already issued an error message, process directly
-         to error recovery.  But do not keep the error token as
-         lookahead, it is too special and may lead us to an endless
-         loop in error recovery. */
-      yychar = YYUNDEF;
-      yytoken = YYSYMBOL_YYerror;
-      goto yyerrlab1;
+        if (yychar == YYEOF) goto yyabort;
+#if YYDEBUG
+        if (yydebug)
+        {
+            if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
+            fprintf(stderr, "%s[%d]: state %d, error recovery discarding token %d (%s)\n",
+                            YYDEBUGSTR, yydepth, yystate, yychar, yys);
+        }
+#endif
+#if defined(YYDESTRUCT_CALL)
+#if YYBTYACC
+        if (!yytrial)
+#endif /* YYBTYACC */
+#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
+            YYDESTRUCT_CALL("error: discarding token", yychar, &yylval, &yylloc);
+#else
+            YYDESTRUCT_CALL("error: discarding token", yychar, &yylval);
+#endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */
+#endif /* defined(YYDESTRUCT_CALL) */
+        yychar = YYEMPTY;
+        goto yyloop;
     }
-  else
+
+yyreduce:
+    yym = yylen[yyn];
+#if YYDEBUG
+    if (yydebug)
     {
-      yytoken = YYTRANSLATE (yychar);
-      YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
+        fprintf(stderr, "%s[%d]: state %d, reducing by rule %d (%s)",
+                        YYDEBUGSTR, yydepth, yystate, yyn, yyrule[yyn]);
+#ifdef YYSTYPE_TOSTRING
+#if YYBTYACC
+        if (!yytrial)
+#endif /* YYBTYACC */
+            if (yym > 0)
+            {
+                int i;
+                fputc('<', stderr);
+                for (i = yym; i > 0; i--)
+                {
+                    if (i != yym) fputs(", ", stderr);
+                    fputs(YYSTYPE_TOSTRING(yystos[yystack.s_mark[1-i]],
+                                           yystack.l_mark[1-i]), stderr);
+                }
+                fputc('>', stderr);
+            }
+#endif
+        fputc('\n', stderr);
     }
-
-  /* If the proper action on seeing token YYTOKEN is to reduce or to
-     detect an error, take that action.  */
-  yyn += yytoken;
-  if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
-    goto yydefault;
-  yyn = yytable[yyn];
-  if (yyn <= 0)
+#endif
+    if (yym > 0)
+        yyval = yystack.l_mark[1-yym];
+    else
+        memset(&yyval, 0, sizeof yyval);
+#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
+
+    /* Perform position reduction */
+    memset(&yyloc, 0, sizeof(yyloc));
+#if YYBTYACC
+    if (!yytrial)
+#endif /* YYBTYACC */
     {
-      if (yytable_value_is_error (yyn))
-        goto yyerrlab;
-      yyn = -yyn;
-      goto yyreduce;
+        YYLLOC_DEFAULT(yyloc, &yystack.p_mark[-yym], yym);
+        /* just in case YYERROR is invoked within the action, save
+           the start of the rhs as the error start position */
+        yyerror_loc_range[1] = yystack.p_mark[1-yym];
     }
+#endif
 
-  /* Count tokens shifted since error; after three, turn off error
-     status.  */
-  if (yyerrstatus)
-    yyerrstatus--;
-
-  /* Shift the lookahead token.  */
-  YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
-  yystate = yyn;
-  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
-  *++yyvsp = yylval;
-  YY_IGNORE_MAYBE_UNINITIALIZED_END
-
-  /* Discard the shifted token.  */
-  yychar = YYEMPTY;
-  goto yynewstate;
-
-
-/*-----------------------------------------------------------.
-| yydefault -- do the default action for the current state.  |
-`-----------------------------------------------------------*/
-yydefault:
-  yyn = yydefact[yystate];
-  if (yyn == 0)
-    goto yyerrlab;
-  goto yyreduce;
-
-
-/*-----------------------------.
-| yyreduce -- do a reduction.  |
-`-----------------------------*/
-yyreduce:
-  /* yyn is the number of a rule to reduce with.  */
-  yylen = yyr2[yyn];
-
-  /* If YYLEN is nonzero, implement the default value of the action:
-     '$$ = $1'.
-
-     Otherwise, the following line sets YYVAL to garbage.
-     This behavior is undocumented and Bison
-     users should not rely upon it.  Assigning to YYVAL
-     unconditionally makes the parser a bit smaller, and it avoids a
-     GCC warning that YYVAL may be used uninitialized.  */
-  yyval = yyvsp[1-yylen];
-
-
-  YY_REDUCE_PRINT (yyn);
-  switch (yyn)
+    switch (yyn)
     {
-  case 2: /* program: pas  */
+case 1:
 #line 99 "awkgram.y"
-                { if (errorflag==0)
-                       winner = (Node *)stat3(PROGRAM, beginloc, (yyvsp[0].p), endloc); }
-#line 2343 "awkgram.tab.c"
-    break;
-
-  case 3: /* program: error  */
+       { if (errorflag==0)
+                       winner = (Node *)stat3(PROGRAM, beginloc, yystack.l_mark[0].p, endloc); }
+#line 1 ""
+break;
+case 2:
 #line 101 "awkgram.y"
-                { yyclearin; bracecheck(); SYNTAX("bailing out"); }
-#line 2349 "awkgram.tab.c"
-    break;
-
-  case 14: /* $@1: %empty  */
+       { yyclearin; bracecheck(); SYNTAX("bailing out"); }
+#line 1 ""
+break;
+case 13:
 #line 125 "awkgram.y"
-                                                                                       {inloop++;}
-#line 2355 "awkgram.tab.c"
-    break;
-
-  case 15: /* for: FOR '(' opt_simple_stmt ';' opt_nl pattern ';' opt_nl opt_simple_stmt rparen $@1 stmt  */
+       {inloop++;}
+#line 1 ""
+break;
+case 14:
 #line 126 "awkgram.y"
-                { --inloop; (yyval.p) = stat4(FOR, (yyvsp[-9].p), notnull((yyvsp[-6].p)), (yyvsp[-3].p), (yyvsp[0].p)); }
-#line 2361 "awkgram.tab.c"
-    break;
-
-  case 16: /* $@2: %empty  */
+       { --inloop; yyval.p = stat4(FOR, yystack.l_mark[-9].p, notnull(yystack.l_mark[-6].p), yystack.l_mark[-3].p, yystack.l_mark[0].p); }
+#line 1 ""
+break;
+case 15:
 #line 127 "awkgram.y"
-                                                                         {inloop++;}
-#line 2367 "awkgram.tab.c"
-    break;
-
-  case 17: /* for: FOR '(' opt_simple_stmt ';' ';' opt_nl opt_simple_stmt rparen $@2 stmt  */
+       {inloop++;}
+#line 1 ""
+break;
+case 16:
 #line 128 "awkgram.y"
-                { --inloop; (yyval.p) = stat4(FOR, (yyvsp[-7].p), NIL, (yyvsp[-3].p), (yyvsp[0].p)); }
-#line 2373 "awkgram.tab.c"
-    break;
-
-  case 18: /* $@3: %empty  */
+       { --inloop; yyval.p = stat4(FOR, yystack.l_mark[-7].p, NIL, yystack.l_mark[-3].p, yystack.l_mark[0].p); }
+#line 1 ""
+break;
+case 17:
 #line 129 "awkgram.y"
-                                            {inloop++;}
-#line 2379 "awkgram.tab.c"
-    break;
-
-  case 19: /* for: FOR '(' varname IN varname rparen $@3 stmt  */
+       {inloop++;}
+#line 1 ""
+break;
+case 18:
 #line 130 "awkgram.y"
-                { --inloop; (yyval.p) = stat3(IN, (yyvsp[-5].p), makearr((yyvsp[-3].p)), (yyvsp[0].p)); }
-#line 2385 "awkgram.tab.c"
-    break;
-
-  case 20: /* funcname: VAR  */
+       { --inloop; yyval.p = stat3(IN, yystack.l_mark[-5].p, makearr(yystack.l_mark[-3].p), yystack.l_mark[0].p); }
+#line 1 ""
+break;
+case 19:
 #line 134 "awkgram.y"
-                { setfname((yyvsp[0].cp)); }
-#line 2391 "awkgram.tab.c"
-    break;
-
-  case 21: /* funcname: CALL  */
+       { setfname(yystack.l_mark[0].cp); }
+#line 1 ""
+break;
+case 20:
 #line 135 "awkgram.y"
-                { setfname((yyvsp[0].cp)); }
-#line 2397 "awkgram.tab.c"
-    break;
-
-  case 22: /* if: IF '(' pattern rparen  */
+       { setfname(yystack.l_mark[0].cp); }
+#line 1 ""
+break;
+case 21:
 #line 139 "awkgram.y"
-                                        { (yyval.p) = notnull((yyvsp[-1].p)); }
-#line 2403 "awkgram.tab.c"
-    break;
-
-  case 27: /* opt_nl: %empty  */
+       { yyval.p = notnull(yystack.l_mark[-1].p); }
+#line 1 ""
+break;
+case 26:
 #line 151 "awkgram.y"
-                        { (yyval.i) = 0; }
-#line 2409 "awkgram.tab.c"
-    break;
-
-  case 29: /* opt_pst: %empty  */
+       { yyval.i = 0; }
+#line 1 ""
+break;
+case 28:
 #line 156 "awkgram.y"
-                        { (yyval.i) = 0; }
-#line 2415 "awkgram.tab.c"
-    break;
-
-  case 31: /* opt_simple_stmt: %empty  */
+       { yyval.i = 0; }
+#line 1 ""
+break;
+case 30:
 #line 162 "awkgram.y"
-                                        { (yyval.p) = 0; }
-#line 2421 "awkgram.tab.c"
-    break;
-
-  case 33: /* pas: opt_pst  */
+       { yyval.p = 0; }
+#line 1 ""
+break;
+case 32:
 #line 167 "awkgram.y"
-                                        { (yyval.p) = 0; }
-#line 2427 "awkgram.tab.c"
-    break;
-
-  case 34: /* pas: opt_pst pa_stats opt_pst  */
+       { yyval.p = 0; }
+#line 1 ""
+break;
+case 33:
 #line 168 "awkgram.y"
-                                        { (yyval.p) = (yyvsp[-1].p); }
-#line 2433 "awkgram.tab.c"
-    break;
-
-  case 35: /* pa_pat: pattern  */
+       { yyval.p = yystack.l_mark[-1].p; }
+#line 1 ""
+break;
+case 34:
 #line 172 "awkgram.y"
-                        { (yyval.p) = notnull((yyvsp[0].p)); }
-#line 2439 "awkgram.tab.c"
-    break;
-
-  case 36: /* pa_stat: pa_pat  */
+       { yyval.p = notnull(yystack.l_mark[0].p); }
+#line 1 ""
+break;
+case 35:
 #line 176 "awkgram.y"
-                                        { (yyval.p) = stat2(PASTAT, (yyvsp[0].p), stat2(PRINT, rectonode(), NIL)); }
-#line 2445 "awkgram.tab.c"
-    break;
-
-  case 37: /* pa_stat: pa_pat lbrace stmtlist '}'  */
+       { yyval.p = stat2(PASTAT, yystack.l_mark[0].p, stat2(PRINT, rectonode(), NIL)); }
+#line 1 ""
+break;
+case 36:
 #line 177 "awkgram.y"
-                                        { (yyval.p) = stat2(PASTAT, (yyvsp[-3].p), (yyvsp[-1].p)); }
-#line 2451 "awkgram.tab.c"
-    break;
-
-  case 38: /* pa_stat: pa_pat ',' opt_nl pa_pat  */
+       { yyval.p = stat2(PASTAT, yystack.l_mark[-3].p, yystack.l_mark[-1].p); }
+#line 1 ""
+break;
+case 37:
 #line 178 "awkgram.y"
-                                                { (yyval.p) = pa2stat((yyvsp[-3].p), (yyvsp[0].p), stat2(PRINT, rectonode(), NIL)); }
-#line 2457 "awkgram.tab.c"
-    break;
-
-  case 39: /* pa_stat: pa_pat ',' opt_nl pa_pat lbrace stmtlist '}'  */
+       { yyval.p = pa2stat(yystack.l_mark[-3].p, yystack.l_mark[0].p, stat2(PRINT, rectonode(), NIL)); }
+#line 1 ""
+break;
+case 38:
 #line 179 "awkgram.y"
-                                                        { (yyval.p) = pa2stat((yyvsp[-6].p), (yyvsp[-3].p), (yyvsp[-1].p)); }
-#line 2463 "awkgram.tab.c"
-    break;
-
-  case 40: /* pa_stat: lbrace stmtlist '}'  */
+       { yyval.p = pa2stat(yystack.l_mark[-6].p, yystack.l_mark[-3].p, yystack.l_mark[-1].p); }
+#line 1 ""
+break;
+case 39:
 #line 180 "awkgram.y"
-                                        { (yyval.p) = stat2(PASTAT, NIL, (yyvsp[-1].p)); }
-#line 2469 "awkgram.tab.c"
-    break;
-
-  case 41: /* pa_stat: XBEGIN lbrace stmtlist '}'  */
+       { yyval.p = stat2(PASTAT, NIL, yystack.l_mark[-1].p); }
+#line 1 ""
+break;
+case 40:
 #line 182 "awkgram.y"
-                { beginloc = linkum(beginloc, (yyvsp[-1].p)); (yyval.p) = 0; }
-#line 2475 "awkgram.tab.c"
-    break;
-
-  case 42: /* pa_stat: XEND lbrace stmtlist '}'  */
+       { beginloc = linkum(beginloc, yystack.l_mark[-1].p); yyval.p = 0; }
+#line 1 ""
+break;
+case 41:
 #line 184 "awkgram.y"
-                { endloc = linkum(endloc, (yyvsp[-1].p)); (yyval.p) = 0; }
-#line 2481 "awkgram.tab.c"
-    break;
-
-  case 43: /* $@4: %empty  */
+       { endloc = linkum(endloc, yystack.l_mark[-1].p); yyval.p = 0; }
+#line 1 ""
+break;
+case 42:
 #line 185 "awkgram.y"
-                                           {infunc = true;}
-#line 2487 "awkgram.tab.c"
-    break;
-
-  case 44: /* pa_stat: FUNC funcname '(' varlist rparen $@4 lbrace stmtlist '}'  */
+       {infunc = true;}
+#line 1 ""
+break;
+case 43:
 #line 186 "awkgram.y"
-                { infunc = false; curfname=0; defn((Cell *)(yyvsp[-7].p), (yyvsp[-5].p), (yyvsp[-1].p)); (yyval.p) = 0; }
-#line 2493 "awkgram.tab.c"
-    break;
-
-  case 46: /* pa_stats: pa_stats opt_pst pa_stat  */
+       { infunc = false; curfname=0; defn((Cell *)yystack.l_mark[-7].p, yystack.l_mark[-5].p, yystack.l_mark[-1].p); yyval.p = 0; }
+#line 1 ""
+break;
+case 45:
 #line 191 "awkgram.y"
-                                        { (yyval.p) = linkum((yyvsp[-2].p), (yyvsp[0].p)); }
-#line 2499 "awkgram.tab.c"
-    break;
-
-  case 48: /* patlist: patlist comma pattern  */
+       { yyval.p = linkum(yystack.l_mark[-2].p, yystack.l_mark[0].p); }
+#line 1 ""
+break;
+case 47:
 #line 196 "awkgram.y"
-                                        { (yyval.p) = linkum((yyvsp[-2].p), (yyvsp[0].p)); }
-#line 2505 "awkgram.tab.c"
-    break;
-
-  case 49: /* ppattern: var ASGNOP ppattern  */
+       { yyval.p = linkum(yystack.l_mark[-2].p, yystack.l_mark[0].p); }
+#line 1 ""
+break;
+case 48:
 #line 200 "awkgram.y"
-                                        { (yyval.p) = op2((yyvsp[-1].i), (yyvsp[-2].p), (yyvsp[0].p)); }
-#line 2511 "awkgram.tab.c"
-    break;
-
-  case 50: /* ppattern: ppattern '?' ppattern ':' ppattern  */
+       { yyval.p = op2(yystack.l_mark[-1].i, yystack.l_mark[-2].p, yystack.l_mark[0].p); }
+#line 1 ""
+break;
+case 49:
 #line 202 "awkgram.y"
-                { (yyval.p) = op3(CONDEXPR, notnull((yyvsp[-4].p)), (yyvsp[-2].p), (yyvsp[0].p)); }
-#line 2517 "awkgram.tab.c"
-    break;
-
-  case 51: /* ppattern: ppattern bor ppattern  */
+       { yyval.p = op3(CONDEXPR, notnull(yystack.l_mark[-4].p), yystack.l_mark[-2].p, yystack.l_mark[0].p); }
+#line 1 ""
+break;
+case 50:
 #line 204 "awkgram.y"
-                { (yyval.p) = op2(BOR, notnull((yyvsp[-2].p)), notnull((yyvsp[0].p))); }
-#line 2523 "awkgram.tab.c"
-    break;
-
-  case 52: /* ppattern: ppattern and ppattern  */
+       { yyval.p = op2(BOR, notnull(yystack.l_mark[-2].p), notnull(yystack.l_mark[0].p)); }
+#line 1 ""
+break;
+case 51:
 #line 206 "awkgram.y"
-                { (yyval.p) = op2(AND, notnull((yyvsp[-2].p)), notnull((yyvsp[0].p))); }
-#line 2529 "awkgram.tab.c"
-    break;
-
-  case 53: /* ppattern: ppattern MATCHOP reg_expr  */
+       { yyval.p = op2(AND, notnull(yystack.l_mark[-2].p), notnull(yystack.l_mark[0].p)); }
+#line 1 ""
+break;
+case 52:
 #line 207 "awkgram.y"
-                                        { (yyval.p) = op3((yyvsp[-1].i), NIL, (yyvsp[-2].p), (Node*)makedfa((yyvsp[0].s), 0)); }
-#line 2535 "awkgram.tab.c"
-    break;
-
-  case 54: /* ppattern: ppattern MATCHOP ppattern  */
+       { yyval.p = op3(yystack.l_mark[-1].i, NIL, yystack.l_mark[-2].p, (Node*)makedfa(yystack.l_mark[0].s, 0)); free(yystack.l_mark[0].s); }
+#line 1 ""
+break;
+case 53:
 #line 209 "awkgram.y"
-                { if (constnode((yyvsp[0].p)))
-                       (yyval.p) = op3((yyvsp[-1].i), NIL, (yyvsp[-2].p), (Node*)makedfa(strnode((yyvsp[0].p)), 0));
-                 else
-                       (yyval.p) = op3((yyvsp[-1].i), (Node *)1, (yyvsp[-2].p), (yyvsp[0].p)); }
-#line 2544 "awkgram.tab.c"
-    break;
-
-  case 55: /* ppattern: ppattern IN varname  */
-#line 213 "awkgram.y"
-                                        { (yyval.p) = op2(INTEST, (yyvsp[-2].p), makearr((yyvsp[0].p))); }
-#line 2550 "awkgram.tab.c"
-    break;
-
-  case 56: /* ppattern: '(' plist ')' IN varname  */
+       { if (constnode(yystack.l_mark[0].p)) {
+                       yyval.p = op3(yystack.l_mark[-1].i, NIL, yystack.l_mark[-2].p, (Node*)makedfa(strnode(yystack.l_mark[0].p), 0));
+                       free(yystack.l_mark[0].p);
+                 } else
+                       yyval.p = op3(yystack.l_mark[-1].i, (Node *)1, yystack.l_mark[-2].p, yystack.l_mark[0].p); }
+#line 1 ""
+break;
+case 54:
 #line 214 "awkgram.y"
-                                        { (yyval.p) = op2(INTEST, (yyvsp[-3].p), makearr((yyvsp[0].p))); }
-#line 2556 "awkgram.tab.c"
-    break;
-
-  case 57: /* ppattern: ppattern term  */
+       { yyval.p = op2(INTEST, yystack.l_mark[-2].p, makearr(yystack.l_mark[0].p)); }
+#line 1 ""
+break;
+case 55:
 #line 215 "awkgram.y"
-                                        { (yyval.p) = op2(CAT, (yyvsp[-1].p), (yyvsp[0].p)); }
-#line 2562 "awkgram.tab.c"
-    break;
-
-  case 60: /* pattern: var ASGNOP pattern  */
-#line 221 "awkgram.y"
-                                        { (yyval.p) = op2((yyvsp[-1].i), (yyvsp[-2].p), (yyvsp[0].p)); }
-#line 2568 "awkgram.tab.c"
-    break;
-
-  case 61: /* pattern: pattern '?' pattern ':' pattern  */
-#line 223 "awkgram.y"
-                { (yyval.p) = op3(CONDEXPR, notnull((yyvsp[-4].p)), (yyvsp[-2].p), (yyvsp[0].p)); }
-#line 2574 "awkgram.tab.c"
-    break;
-
-  case 62: /* pattern: pattern bor pattern  */
-#line 225 "awkgram.y"
-                { (yyval.p) = op2(BOR, notnull((yyvsp[-2].p)), notnull((yyvsp[0].p))); }
-#line 2580 "awkgram.tab.c"
-    break;
-
-  case 63: /* pattern: pattern and pattern  */
-#line 227 "awkgram.y"
-                { (yyval.p) = op2(AND, notnull((yyvsp[-2].p)), notnull((yyvsp[0].p))); }
-#line 2586 "awkgram.tab.c"
-    break;
-
-  case 64: /* pattern: pattern EQ pattern  */
+       { yyval.p = op2(INTEST, yystack.l_mark[-3].p, makearr(yystack.l_mark[0].p)); }
+#line 1 ""
+break;
+case 56:
+#line 216 "awkgram.y"
+       { yyval.p = op2(CAT, yystack.l_mark[-1].p, yystack.l_mark[0].p); }
+#line 1 ""
+break;
+case 59:
+#line 222 "awkgram.y"
+       { yyval.p = op2(yystack.l_mark[-1].i, yystack.l_mark[-2].p, yystack.l_mark[0].p); }
+#line 1 ""
+break;
+case 60:
+#line 224 "awkgram.y"
+       { yyval.p = op3(CONDEXPR, notnull(yystack.l_mark[-4].p), yystack.l_mark[-2].p, yystack.l_mark[0].p); }
+#line 1 ""
+break;
+case 61:
+#line 226 "awkgram.y"
+       { yyval.p = op2(BOR, notnull(yystack.l_mark[-2].p), notnull(yystack.l_mark[0].p)); }
+#line 1 ""
+break;
+case 62:
 #line 228 "awkgram.y"
-                                        { (yyval.p) = op2((yyvsp[-1].i), (yyvsp[-2].p), (yyvsp[0].p)); }
-#line 2592 "awkgram.tab.c"
-    break;
-
-  case 65: /* pattern: pattern GE pattern  */
+       { yyval.p = op2(AND, notnull(yystack.l_mark[-2].p), notnull(yystack.l_mark[0].p)); }
+#line 1 ""
+break;
+case 63:
 #line 229 "awkgram.y"
-                                        { (yyval.p) = op2((yyvsp[-1].i), (yyvsp[-2].p), (yyvsp[0].p)); }
-#line 2598 "awkgram.tab.c"
-    break;
-
-  case 66: /* pattern: pattern GT pattern  */
+       { yyval.p = op2(yystack.l_mark[-1].i, yystack.l_mark[-2].p, yystack.l_mark[0].p); }
+#line 1 ""
+break;
+case 64:
 #line 230 "awkgram.y"
-                                        { (yyval.p) = op2((yyvsp[-1].i), (yyvsp[-2].p), (yyvsp[0].p)); }
-#line 2604 "awkgram.tab.c"
-    break;
-
-  case 67: /* pattern: pattern LE pattern  */
+       { yyval.p = op2(yystack.l_mark[-1].i, yystack.l_mark[-2].p, yystack.l_mark[0].p); }
+#line 1 ""
+break;
+case 65:
 #line 231 "awkgram.y"
-                                        { (yyval.p) = op2((yyvsp[-1].i), (yyvsp[-2].p), (yyvsp[0].p)); }
-#line 2610 "awkgram.tab.c"
-    break;
-
-  case 68: /* pattern: pattern LT pattern  */
+       { yyval.p = op2(yystack.l_mark[-1].i, yystack.l_mark[-2].p, yystack.l_mark[0].p); }
+#line 1 ""
+break;
+case 66:
 #line 232 "awkgram.y"
-                                        { (yyval.p) = op2((yyvsp[-1].i), (yyvsp[-2].p), (yyvsp[0].p)); }
-#line 2616 "awkgram.tab.c"
-    break;
-
-  case 69: /* pattern: pattern NE pattern  */
+       { yyval.p = op2(yystack.l_mark[-1].i, yystack.l_mark[-2].p, yystack.l_mark[0].p); }
+#line 1 ""
+break;
+case 67:
 #line 233 "awkgram.y"
-                                        { (yyval.p) = op2((yyvsp[-1].i), (yyvsp[-2].p), (yyvsp[0].p)); }
-#line 2622 "awkgram.tab.c"
-    break;
-
-  case 70: /* pattern: pattern MATCHOP reg_expr  */
+       { yyval.p = op2(yystack.l_mark[-1].i, yystack.l_mark[-2].p, yystack.l_mark[0].p); }
+#line 1 ""
+break;
+case 68:
 #line 234 "awkgram.y"
-                                        { (yyval.p) = op3((yyvsp[-1].i), NIL, (yyvsp[-2].p), (Node*)makedfa((yyvsp[0].s), 0)); }
-#line 2628 "awkgram.tab.c"
-    break;
-
-  case 71: /* pattern: pattern MATCHOP pattern  */
-#line 236 "awkgram.y"
-                { if (constnode((yyvsp[0].p)))
-                       (yyval.p) = op3((yyvsp[-1].i), NIL, (yyvsp[-2].p), (Node*)makedfa(strnode((yyvsp[0].p)), 0));
-                 else
-                       (yyval.p) = op3((yyvsp[-1].i), (Node *)1, (yyvsp[-2].p), (yyvsp[0].p)); }
-#line 2637 "awkgram.tab.c"
-    break;
-
-  case 72: /* pattern: pattern IN varname  */
-#line 240 "awkgram.y"
-                                        { (yyval.p) = op2(INTEST, (yyvsp[-2].p), makearr((yyvsp[0].p))); }
-#line 2643 "awkgram.tab.c"
-    break;
-
-  case 73: /* pattern: '(' plist ')' IN varname  */
-#line 241 "awkgram.y"
-                                        { (yyval.p) = op2(INTEST, (yyvsp[-3].p), makearr((yyvsp[0].p))); }
-#line 2649 "awkgram.tab.c"
-    break;
-
-  case 74: /* pattern: pattern '|' GETLINE var  */
+       { yyval.p = op2(yystack.l_mark[-1].i, yystack.l_mark[-2].p, yystack.l_mark[0].p); }
+#line 1 ""
+break;
+case 69:
+#line 235 "awkgram.y"
+       { yyval.p = op3(yystack.l_mark[-1].i, NIL, yystack.l_mark[-2].p, (Node*)makedfa(yystack.l_mark[0].s, 0)); free(yystack.l_mark[0].s); }
+#line 1 ""
+break;
+case 70:
+#line 237 "awkgram.y"
+       { if (constnode(yystack.l_mark[0].p)) {
+                       yyval.p = op3(yystack.l_mark[-1].i, NIL, yystack.l_mark[-2].p, (Node*)makedfa(strnode(yystack.l_mark[0].p), 0));
+                       free(yystack.l_mark[0].p);
+                 } else
+                       yyval.p = op3(yystack.l_mark[-1].i, (Node *)1, yystack.l_mark[-2].p, yystack.l_mark[0].p); }
+#line 1 ""
+break;
+case 71:
 #line 242 "awkgram.y"
-                                        {
+       { yyval.p = op2(INTEST, yystack.l_mark[-2].p, makearr(yystack.l_mark[0].p)); }
+#line 1 ""
+break;
+case 72:
+#line 243 "awkgram.y"
+       { yyval.p = op2(INTEST, yystack.l_mark[-3].p, makearr(yystack.l_mark[0].p)); }
+#line 1 ""
+break;
+case 73:
+#line 244 "awkgram.y"
+       {
                        if (safe) SYNTAX("cmd | getline is unsafe");
-                       else (yyval.p) = op3(GETLINE, (yyvsp[0].p), itonp((yyvsp[-2].i)), (yyvsp[-3].p)); }
-#line 2657 "awkgram.tab.c"
-    break;
-
-  case 75: /* pattern: pattern '|' GETLINE  */
-#line 245 "awkgram.y"
-                                        {
+                       else yyval.p = op3(GETLINE, yystack.l_mark[0].p, itonp(yystack.l_mark[-2].i), yystack.l_mark[-3].p); }
+#line 1 ""
+break;
+case 74:
+#line 247 "awkgram.y"
+       {
                        if (safe) SYNTAX("cmd | getline is unsafe");
-                       else (yyval.p) = op3(GETLINE, (Node*)0, itonp((yyvsp[-1].i)), (yyvsp[-2].p)); }
-#line 2665 "awkgram.tab.c"
-    break;
-
-  case 76: /* pattern: pattern term  */
-#line 248 "awkgram.y"
-                                        { (yyval.p) = op2(CAT, (yyvsp[-1].p), (yyvsp[0].p)); }
-#line 2671 "awkgram.tab.c"
-    break;
-
-  case 79: /* plist: pattern comma pattern  */
-#line 254 "awkgram.y"
-                                        { (yyval.p) = linkum((yyvsp[-2].p), (yyvsp[0].p)); }
-#line 2677 "awkgram.tab.c"
-    break;
-
-  case 80: /* plist: plist comma pattern  */
-#line 255 "awkgram.y"
-                                        { (yyval.p) = linkum((yyvsp[-2].p), (yyvsp[0].p)); }
-#line 2683 "awkgram.tab.c"
-    break;
-
-  case 82: /* pplist: pplist comma ppattern  */
-#line 260 "awkgram.y"
-                                        { (yyval.p) = linkum((yyvsp[-2].p), (yyvsp[0].p)); }
-#line 2689 "awkgram.tab.c"
-    break;
-
-  case 83: /* prarg: %empty  */
-#line 264 "awkgram.y"
-                                        { (yyval.p) = rectonode(); }
-#line 2695 "awkgram.tab.c"
-    break;
-
-  case 85: /* prarg: '(' plist ')'  */
+                       else yyval.p = op3(GETLINE, (Node*)0, itonp(yystack.l_mark[-1].i), yystack.l_mark[-2].p); }
+#line 1 ""
+break;
+case 75:
+#line 250 "awkgram.y"
+       { yyval.p = op2(CAT, yystack.l_mark[-1].p, yystack.l_mark[0].p); }
+#line 1 ""
+break;
+case 78:
+#line 256 "awkgram.y"
+       { yyval.p = linkum(yystack.l_mark[-2].p, yystack.l_mark[0].p); }
+#line 1 ""
+break;
+case 79:
+#line 257 "awkgram.y"
+       { yyval.p = linkum(yystack.l_mark[-2].p, yystack.l_mark[0].p); }
+#line 1 ""
+break;
+case 81:
+#line 262 "awkgram.y"
+       { yyval.p = linkum(yystack.l_mark[-2].p, yystack.l_mark[0].p); }
+#line 1 ""
+break;
+case 82:
 #line 266 "awkgram.y"
-                                        { (yyval.p) = (yyvsp[-1].p); }
-#line 2701 "awkgram.tab.c"
-    break;
-
-  case 94: /* re: reg_expr  */
-#line 283 "awkgram.y"
-                { (yyval.p) = op3(MATCH, NIL, rectonode(), (Node*)makedfa((yyvsp[0].s), 0)); }
-#line 2707 "awkgram.tab.c"
-    break;
-
-  case 95: /* re: NOT re  */
-#line 284 "awkgram.y"
-                        { (yyval.p) = op1(NOT, notnull((yyvsp[0].p))); }
-#line 2713 "awkgram.tab.c"
-    break;
-
-  case 96: /* $@5: %empty  */
-#line 288 "awkgram.y"
-              {startreg();}
-#line 2719 "awkgram.tab.c"
-    break;
-
-  case 97: /* reg_expr: '/' $@5 REGEXPR '/'  */
-#line 288 "awkgram.y"
-                                                { (yyval.s) = (yyvsp[-1].s); }
-#line 2725 "awkgram.tab.c"
-    break;
-
-  case 100: /* simple_stmt: print prarg '|' term  */
-#line 296 "awkgram.y"
-                                        {
+       { yyval.p = rectonode(); }
+#line 1 ""
+break;
+case 84:
+#line 268 "awkgram.y"
+       { yyval.p = yystack.l_mark[-1].p; }
+#line 1 ""
+break;
+case 93:
+#line 285 "awkgram.y"
+       { yyval.p = op3(MATCH, NIL, rectonode(), (Node*)makedfa(yystack.l_mark[0].s, 0)); free(yystack.l_mark[0].s); }
+#line 1 ""
+break;
+case 94:
+#line 286 "awkgram.y"
+       { yyval.p = op1(NOT, notnull(yystack.l_mark[0].p)); }
+#line 1 ""
+break;
+case 95:
+#line 290 "awkgram.y"
+       {startreg();}
+#line 1 ""
+break;
+case 96:
+#line 290 "awkgram.y"
+       { yyval.s = yystack.l_mark[-1].s; }
+#line 1 ""
+break;
+case 99:
+#line 298 "awkgram.y"
+       {
                        if (safe) SYNTAX("print | is unsafe");
-                       else (yyval.p) = stat3((yyvsp[-3].i), (yyvsp[-2].p), itonp((yyvsp[-1].i)), (yyvsp[0].p)); }
-#line 2733 "awkgram.tab.c"
-    break;
-
-  case 101: /* simple_stmt: print prarg APPEND term  */
-#line 299 "awkgram.y"
-                                        {
+                       else yyval.p = stat3(yystack.l_mark[-3].i, yystack.l_mark[-2].p, itonp(yystack.l_mark[-1].i), yystack.l_mark[0].p); }
+#line 1 ""
+break;
+case 100:
+#line 301 "awkgram.y"
+       {
                        if (safe) SYNTAX("print >> is unsafe");
-                       else (yyval.p) = stat3((yyvsp[-3].i), (yyvsp[-2].p), itonp((yyvsp[-1].i)), (yyvsp[0].p)); }
-#line 2741 "awkgram.tab.c"
-    break;
-
-  case 102: /* simple_stmt: print prarg GT term  */
-#line 302 "awkgram.y"
-                                        {
+                       else yyval.p = stat3(yystack.l_mark[-3].i, yystack.l_mark[-2].p, itonp(yystack.l_mark[-1].i), yystack.l_mark[0].p); }
+#line 1 ""
+break;
+case 101:
+#line 304 "awkgram.y"
+       {
                        if (safe) SYNTAX("print > is unsafe");
-                       else (yyval.p) = stat3((yyvsp[-3].i), (yyvsp[-2].p), itonp((yyvsp[-1].i)), (yyvsp[0].p)); }
-#line 2749 "awkgram.tab.c"
-    break;
-
-  case 103: /* simple_stmt: print prarg  */
-#line 305 "awkgram.y"
-                                        { (yyval.p) = stat3((yyvsp[-1].i), (yyvsp[0].p), NIL, NIL); }
-#line 2755 "awkgram.tab.c"
-    break;
-
-  case 104: /* simple_stmt: DELETE varname '[' patlist ']'  */
-#line 306 "awkgram.y"
-                                         { (yyval.p) = stat2(DELETE, makearr((yyvsp[-3].p)), (yyvsp[-1].p)); }
-#line 2761 "awkgram.tab.c"
-    break;
-
-  case 105: /* simple_stmt: DELETE varname  */
+                       else yyval.p = stat3(yystack.l_mark[-3].i, yystack.l_mark[-2].p, itonp(yystack.l_mark[-1].i), yystack.l_mark[0].p); }
+#line 1 ""
+break;
+case 102:
 #line 307 "awkgram.y"
-                                         { (yyval.p) = stat2(DELETE, makearr((yyvsp[0].p)), 0); }
-#line 2767 "awkgram.tab.c"
-    break;
-
-  case 106: /* simple_stmt: pattern  */
+       { yyval.p = stat3(yystack.l_mark[-1].i, yystack.l_mark[0].p, NIL, NIL); }
+#line 1 ""
+break;
+case 103:
 #line 308 "awkgram.y"
-                                        { (yyval.p) = exptostat((yyvsp[0].p)); }
-#line 2773 "awkgram.tab.c"
-    break;
-
-  case 107: /* simple_stmt: error  */
+       { yyval.p = stat2(DELETE, makearr(yystack.l_mark[-3].p), yystack.l_mark[-1].p); }
+#line 1 ""
+break;
+case 104:
 #line 309 "awkgram.y"
-                                        { yyclearin; SYNTAX("illegal statement"); }
-#line 2779 "awkgram.tab.c"
-    break;
-
-  case 110: /* stmt: BREAK st  */
-#line 318 "awkgram.y"
-                                { if (!inloop) SYNTAX("break illegal outside of loops");
-                                 (yyval.p) = stat1(BREAK, NIL); }
-#line 2786 "awkgram.tab.c"
-    break;
-
-  case 111: /* stmt: CONTINUE st  */
+       { yyval.p = stat2(DELETE, makearr(yystack.l_mark[0].p), 0); }
+#line 1 ""
+break;
+case 105:
+#line 310 "awkgram.y"
+       { yyval.p = exptostat(yystack.l_mark[0].p); }
+#line 1 ""
+break;
+case 106:
+#line 311 "awkgram.y"
+       { yyclearin; SYNTAX("illegal statement"); }
+#line 1 ""
+break;
+case 109:
 #line 320 "awkgram.y"
-                                {  if (!inloop) SYNTAX("continue illegal outside of loops");
-                                 (yyval.p) = stat1(CONTINUE, NIL); }
-#line 2793 "awkgram.tab.c"
-    break;
-
-  case 112: /* $@6: %empty  */
+       { if (!inloop) SYNTAX("break illegal outside of loops");
+                                 yyval.p = stat1(BREAK, NIL); }
+#line 1 ""
+break;
+case 110:
 #line 322 "awkgram.y"
-             {inloop++;}
-#line 2799 "awkgram.tab.c"
-    break;
-
-  case 113: /* $@7: %empty  */
-#line 322 "awkgram.y"
-                              {--inloop;}
-#line 2805 "awkgram.tab.c"
-    break;
-
-  case 114: /* stmt: do $@6 stmt $@7 WHILE '(' pattern ')' st  */
-#line 323 "awkgram.y"
-                { (yyval.p) = stat2(DO, (yyvsp[-6].p), notnull((yyvsp[-2].p))); }
-#line 2811 "awkgram.tab.c"
-    break;
-
-  case 115: /* stmt: EXIT pattern st  */
+       {  if (!inloop) SYNTAX("continue illegal outside of loops");
+                                 yyval.p = stat1(CONTINUE, NIL); }
+#line 1 ""
+break;
+case 111:
 #line 324 "awkgram.y"
-                                { (yyval.p) = stat1(EXIT, (yyvsp[-1].p)); }
-#line 2817 "awkgram.tab.c"
-    break;
-
-  case 116: /* stmt: EXIT st  */
+       {inloop++;}
+#line 1 ""
+break;
+case 112:
+#line 324 "awkgram.y"
+       {--inloop;}
+#line 1 ""
+break;
+case 113:
 #line 325 "awkgram.y"
-                                { (yyval.p) = stat1(EXIT, NIL); }
-#line 2823 "awkgram.tab.c"
-    break;
-
-  case 118: /* stmt: if stmt else stmt  */
+       { yyval.p = stat2(DO, yystack.l_mark[-6].p, notnull(yystack.l_mark[-2].p)); }
+#line 1 ""
+break;
+case 114:
+#line 326 "awkgram.y"
+       { yyval.p = stat1(EXIT, yystack.l_mark[-1].p); }
+#line 1 ""
+break;
+case 115:
 #line 327 "awkgram.y"
-                                { (yyval.p) = stat3(IF, (yyvsp[-3].p), (yyvsp[-2].p), (yyvsp[0].p)); }
-#line 2829 "awkgram.tab.c"
-    break;
-
-  case 119: /* stmt: if stmt  */
-#line 328 "awkgram.y"
-                                { (yyval.p) = stat3(IF, (yyvsp[-1].p), (yyvsp[0].p), NIL); }
-#line 2835 "awkgram.tab.c"
-    break;
-
-  case 120: /* stmt: lbrace stmtlist rbrace  */
+       { yyval.p = stat1(EXIT, NIL); }
+#line 1 ""
+break;
+case 117:
 #line 329 "awkgram.y"
-                                 { (yyval.p) = (yyvsp[-1].p); }
-#line 2841 "awkgram.tab.c"
-    break;
-
-  case 121: /* stmt: NEXT st  */
+       { yyval.p = stat3(IF, yystack.l_mark[-3].p, yystack.l_mark[-2].p, yystack.l_mark[0].p); }
+#line 1 ""
+break;
+case 118:
 #line 330 "awkgram.y"
-                        { if (infunc)
+       { yyval.p = stat3(IF, yystack.l_mark[-1].p, yystack.l_mark[0].p, NIL); }
+#line 1 ""
+break;
+case 119:
+#line 331 "awkgram.y"
+       { yyval.p = yystack.l_mark[-1].p; }
+#line 1 ""
+break;
+case 120:
+#line 332 "awkgram.y"
+       { if (infunc)
                                SYNTAX("next is illegal inside a function");
-                         (yyval.p) = stat1(NEXT, NIL); }
-#line 2849 "awkgram.tab.c"
-    break;
-
-  case 122: /* stmt: NEXTFILE st  */
-#line 333 "awkgram.y"
-                        { if (infunc)
+                         yyval.p = stat1(NEXT, NIL); }
+#line 1 ""
+break;
+case 121:
+#line 335 "awkgram.y"
+       { if (infunc)
                                SYNTAX("nextfile is illegal inside a function");
-                         (yyval.p) = stat1(NEXTFILE, NIL); }
-#line 2857 "awkgram.tab.c"
-    break;
-
-  case 123: /* stmt: RETURN pattern st  */
-#line 336 "awkgram.y"
-                                { (yyval.p) = stat1(RETURN, (yyvsp[-1].p)); }
-#line 2863 "awkgram.tab.c"
-    break;
-
-  case 124: /* stmt: RETURN st  */
-#line 337 "awkgram.y"
-                                { (yyval.p) = stat1(RETURN, NIL); }
-#line 2869 "awkgram.tab.c"
-    break;
-
-  case 126: /* $@8: %empty  */
-#line 339 "awkgram.y"
-                {inloop++;}
-#line 2875 "awkgram.tab.c"
-    break;
-
-  case 127: /* stmt: while $@8 stmt  */
+                         yyval.p = stat1(NEXTFILE, NIL); }
+#line 1 ""
+break;
+case 122:
+#line 338 "awkgram.y"
+       { yyval.p = stat1(RETURN, yystack.l_mark[-1].p); }
+#line 1 ""
+break;
+case 123:
 #line 339 "awkgram.y"
-                                        { --inloop; (yyval.p) = stat2(WHILE, (yyvsp[-2].p), (yyvsp[0].p)); }
-#line 2881 "awkgram.tab.c"
-    break;
-
-  case 128: /* stmt: ';' opt_nl  */
-#line 340 "awkgram.y"
-                                { (yyval.p) = 0; }
-#line 2887 "awkgram.tab.c"
-    break;
-
-  case 130: /* stmtlist: stmtlist stmt  */
-#line 345 "awkgram.y"
-                                { (yyval.p) = linkum((yyvsp[-1].p), (yyvsp[0].p)); }
-#line 2893 "awkgram.tab.c"
-    break;
-
-  case 134: /* string: string STRING  */
-#line 354 "awkgram.y"
-                                { (yyval.cp) = catstr((yyvsp[-1].cp), (yyvsp[0].cp)); }
-#line 2899 "awkgram.tab.c"
-    break;
-
-  case 135: /* term: term '/' ASGNOP term  */
-#line 358 "awkgram.y"
-                                        { (yyval.p) = op2(DIVEQ, (yyvsp[-3].p), (yyvsp[0].p)); }
-#line 2905 "awkgram.tab.c"
-    break;
-
-  case 136: /* term: term '+' term  */
-#line 359 "awkgram.y"
-                                        { (yyval.p) = op2(ADD, (yyvsp[-2].p), (yyvsp[0].p)); }
-#line 2911 "awkgram.tab.c"
-    break;
-
-  case 137: /* term: term '-' term  */
+       { yyval.p = stat1(RETURN, NIL); }
+#line 1 ""
+break;
+case 125:
+#line 341 "awkgram.y"
+       {inloop++;}
+#line 1 ""
+break;
+case 126:
+#line 341 "awkgram.y"
+       { --inloop; yyval.p = stat2(WHILE, yystack.l_mark[-2].p, yystack.l_mark[0].p); }
+#line 1 ""
+break;
+case 127:
+#line 342 "awkgram.y"
+       { yyval.p = 0; }
+#line 1 ""
+break;
+case 129:
+#line 347 "awkgram.y"
+       { yyval.p = linkum(yystack.l_mark[-1].p, yystack.l_mark[0].p); }
+#line 1 ""
+break;
+case 133:
+#line 356 "awkgram.y"
+       { yyval.cp = catstr(yystack.l_mark[-1].cp, yystack.l_mark[0].cp); }
+#line 1 ""
+break;
+case 134:
 #line 360 "awkgram.y"
-                                        { (yyval.p) = op2(MINUS, (yyvsp[-2].p), (yyvsp[0].p)); }
-#line 2917 "awkgram.tab.c"
-    break;
-
-  case 138: /* term: term '*' term  */
+       { yyval.p = op2(DIVEQ, yystack.l_mark[-3].p, yystack.l_mark[0].p); }
+#line 1 ""
+break;
+case 135:
 #line 361 "awkgram.y"
-                                        { (yyval.p) = op2(MULT, (yyvsp[-2].p), (yyvsp[0].p)); }
-#line 2923 "awkgram.tab.c"
-    break;
-
-  case 139: /* term: term '/' term  */
+       { yyval.p = op2(ADD, yystack.l_mark[-2].p, yystack.l_mark[0].p); }
+#line 1 ""
+break;
+case 136:
 #line 362 "awkgram.y"
-                                        { (yyval.p) = op2(DIVIDE, (yyvsp[-2].p), (yyvsp[0].p)); }
-#line 2929 "awkgram.tab.c"
-    break;
-
-  case 140: /* term: term '%' term  */
+       { yyval.p = op2(MINUS, yystack.l_mark[-2].p, yystack.l_mark[0].p); }
+#line 1 ""
+break;
+case 137:
 #line 363 "awkgram.y"
-                                        { (yyval.p) = op2(MOD, (yyvsp[-2].p), (yyvsp[0].p)); }
-#line 2935 "awkgram.tab.c"
-    break;
-
-  case 141: /* term: term POWER term  */
+       { yyval.p = op2(MULT, yystack.l_mark[-2].p, yystack.l_mark[0].p); }
+#line 1 ""
+break;
+case 138:
 #line 364 "awkgram.y"
-                                        { (yyval.p) = op2(POWER, (yyvsp[-2].p), (yyvsp[0].p)); }
-#line 2941 "awkgram.tab.c"
-    break;
-
-  case 142: /* term: '-' term  */
+       { yyval.p = op2(DIVIDE, yystack.l_mark[-2].p, yystack.l_mark[0].p); }
+#line 1 ""
+break;
+case 139:
 #line 365 "awkgram.y"
-                                        { (yyval.p) = op1(UMINUS, (yyvsp[0].p)); }
-#line 2947 "awkgram.tab.c"
-    break;
-
-  case 143: /* term: '+' term  */
+       { yyval.p = op2(MOD, yystack.l_mark[-2].p, yystack.l_mark[0].p); }
+#line 1 ""
+break;
+case 140:
 #line 366 "awkgram.y"
-                                        { (yyval.p) = op1(UPLUS, (yyvsp[0].p)); }
-#line 2953 "awkgram.tab.c"
-    break;
-
-  case 144: /* term: NOT term  */
+       { yyval.p = op2(POWER, yystack.l_mark[-2].p, yystack.l_mark[0].p); }
+#line 1 ""
+break;
+case 141:
 #line 367 "awkgram.y"
-                                        { (yyval.p) = op1(NOT, notnull((yyvsp[0].p))); }
-#line 2959 "awkgram.tab.c"
-    break;
-
-  case 145: /* term: BLTIN '(' ')'  */
+       { yyval.p = op1(UMINUS, yystack.l_mark[0].p); }
+#line 1 ""
+break;
+case 142:
 #line 368 "awkgram.y"
-                                        { (yyval.p) = op2(BLTIN, itonp((yyvsp[-2].i)), rectonode()); }
-#line 2965 "awkgram.tab.c"
-    break;
-
-  case 146: /* term: BLTIN '(' patlist ')'  */
+       { yyval.p = op1(UPLUS, yystack.l_mark[0].p); }
+#line 1 ""
+break;
+case 143:
 #line 369 "awkgram.y"
-                                        { (yyval.p) = op2(BLTIN, itonp((yyvsp[-3].i)), (yyvsp[-1].p)); }
-#line 2971 "awkgram.tab.c"
-    break;
-
-  case 147: /* term: BLTIN  */
+       { yyval.p = op1(NOT, notnull(yystack.l_mark[0].p)); }
+#line 1 ""
+break;
+case 144:
 #line 370 "awkgram.y"
-                                        { (yyval.p) = op2(BLTIN, itonp((yyvsp[0].i)), rectonode()); }
-#line 2977 "awkgram.tab.c"
-    break;
-
-  case 148: /* term: CALL '(' ')'  */
+       { yyval.p = op2(BLTIN, itonp(yystack.l_mark[-2].i), rectonode()); }
+#line 1 ""
+break;
+case 145:
 #line 371 "awkgram.y"
-                                        { (yyval.p) = op2(CALL, celltonode((yyvsp[-2].cp),CVAR), NIL); }
-#line 2983 "awkgram.tab.c"
-    break;
-
-  case 149: /* term: CALL '(' patlist ')'  */
+       { yyval.p = op2(BLTIN, itonp(yystack.l_mark[-3].i), yystack.l_mark[-1].p); }
+#line 1 ""
+break;
+case 146:
 #line 372 "awkgram.y"
-                                        { (yyval.p) = op2(CALL, celltonode((yyvsp[-3].cp),CVAR), (yyvsp[-1].p)); }
-#line 2989 "awkgram.tab.c"
-    break;
-
-  case 150: /* term: CLOSE term  */
+       { yyval.p = op2(BLTIN, itonp(yystack.l_mark[0].i), rectonode()); }
+#line 1 ""
+break;
+case 147:
 #line 373 "awkgram.y"
-                                        { (yyval.p) = op1(CLOSE, (yyvsp[0].p)); }
-#line 2995 "awkgram.tab.c"
-    break;
-
-  case 151: /* term: DECR var  */
+       { yyval.p = op2(CALL, celltonode(yystack.l_mark[-2].cp,CVAR), NIL); }
+#line 1 ""
+break;
+case 148:
 #line 374 "awkgram.y"
-                                        { (yyval.p) = op1(PREDECR, (yyvsp[0].p)); }
-#line 3001 "awkgram.tab.c"
-    break;
-
-  case 152: /* term: INCR var  */
+       { yyval.p = op2(CALL, celltonode(yystack.l_mark[-3].cp,CVAR), yystack.l_mark[-1].p); }
+#line 1 ""
+break;
+case 149:
 #line 375 "awkgram.y"
-                                        { (yyval.p) = op1(PREINCR, (yyvsp[0].p)); }
-#line 3007 "awkgram.tab.c"
-    break;
-
-  case 153: /* term: var DECR  */
+       { yyval.p = op1(CLOSE, yystack.l_mark[0].p); }
+#line 1 ""
+break;
+case 150:
 #line 376 "awkgram.y"
-                                        { (yyval.p) = op1(POSTDECR, (yyvsp[-1].p)); }
-#line 3013 "awkgram.tab.c"
-    break;
-
-  case 154: /* term: var INCR  */
+       { yyval.p = op1(PREDECR, yystack.l_mark[0].p); }
+#line 1 ""
+break;
+case 151:
 #line 377 "awkgram.y"
-                                        { (yyval.p) = op1(POSTINCR, (yyvsp[-1].p)); }
-#line 3019 "awkgram.tab.c"
-    break;
-
-  case 155: /* term: GETLINE var LT term  */
+       { yyval.p = op1(PREINCR, yystack.l_mark[0].p); }
+#line 1 ""
+break;
+case 152:
 #line 378 "awkgram.y"
-                                        { (yyval.p) = op3(GETLINE, (yyvsp[-2].p), itonp((yyvsp[-1].i)), (yyvsp[0].p)); }
-#line 3025 "awkgram.tab.c"
-    break;
-
-  case 156: /* term: GETLINE LT term  */
+       { yyval.p = op1(POSTDECR, yystack.l_mark[-1].p); }
+#line 1 ""
+break;
+case 153:
 #line 379 "awkgram.y"
-                                        { (yyval.p) = op3(GETLINE, NIL, itonp((yyvsp[-1].i)), (yyvsp[0].p)); }
-#line 3031 "awkgram.tab.c"
-    break;
-
-  case 157: /* term: GETLINE var  */
+       { yyval.p = op1(POSTINCR, yystack.l_mark[-1].p); }
+#line 1 ""
+break;
+case 154:
 #line 380 "awkgram.y"
-                                        { (yyval.p) = op3(GETLINE, (yyvsp[0].p), NIL, NIL); }
-#line 3037 "awkgram.tab.c"
-    break;
-
-  case 158: /* term: GETLINE  */
+       { yyval.p = op3(GETLINE, yystack.l_mark[-2].p, itonp(yystack.l_mark[-1].i), yystack.l_mark[0].p); }
+#line 1 ""
+break;
+case 155:
 #line 381 "awkgram.y"
-                                        { (yyval.p) = op3(GETLINE, NIL, NIL, NIL); }
-#line 3043 "awkgram.tab.c"
-    break;
-
-  case 159: /* term: INDEX '(' pattern comma pattern ')'  */
+       { yyval.p = op3(GETLINE, NIL, itonp(yystack.l_mark[-1].i), yystack.l_mark[0].p); }
+#line 1 ""
+break;
+case 156:
+#line 382 "awkgram.y"
+       { yyval.p = op3(GETLINE, yystack.l_mark[0].p, NIL, NIL); }
+#line 1 ""
+break;
+case 157:
 #line 383 "awkgram.y"
-                { (yyval.p) = op2(INDEX, (yyvsp[-3].p), (yyvsp[-1].p)); }
-#line 3049 "awkgram.tab.c"
-    break;
-
-  case 160: /* term: INDEX '(' pattern comma reg_expr ')'  */
+       { yyval.p = op3(GETLINE, NIL, NIL, NIL); }
+#line 1 ""
+break;
+case 158:
 #line 385 "awkgram.y"
-                { SYNTAX("index() doesn't permit regular expressions");
-                 (yyval.p) = op2(INDEX, (yyvsp[-3].p), (Node*)(yyvsp[-1].s)); }
-#line 3056 "awkgram.tab.c"
-    break;
-
-  case 161: /* term: '(' pattern ')'  */
+       { yyval.p = op2(INDEX, yystack.l_mark[-3].p, yystack.l_mark[-1].p); }
+#line 1 ""
+break;
+case 159:
 #line 387 "awkgram.y"
-                                        { (yyval.p) = (yyvsp[-1].p); }
-#line 3062 "awkgram.tab.c"
-    break;
-
-  case 162: /* term: MATCHFCN '(' pattern comma reg_expr ')'  */
+       { SYNTAX("index() doesn't permit regular expressions");
+                 yyval.p = op2(INDEX, yystack.l_mark[-3].p, (Node*)yystack.l_mark[-1].s); }
+#line 1 ""
+break;
+case 160:
 #line 389 "awkgram.y"
-                { (yyval.p) = op3(MATCHFCN, NIL, (yyvsp[-3].p), (Node*)makedfa((yyvsp[-1].s), 1)); }
-#line 3068 "awkgram.tab.c"
-    break;
-
-  case 163: /* term: MATCHFCN '(' pattern comma pattern ')'  */
+       { yyval.p = yystack.l_mark[-1].p; }
+#line 1 ""
+break;
+case 161:
 #line 391 "awkgram.y"
-                { if (constnode((yyvsp[-1].p)))
-                       (yyval.p) = op3(MATCHFCN, NIL, (yyvsp[-3].p), (Node*)makedfa(strnode((yyvsp[-1].p)), 1));
-                 else
-                       (yyval.p) = op3(MATCHFCN, (Node *)1, (yyvsp[-3].p), (yyvsp[-1].p)); }
-#line 3077 "awkgram.tab.c"
-    break;
-
-  case 164: /* term: NUMBER  */
-#line 395 "awkgram.y"
-                                        { (yyval.p) = celltonode((yyvsp[0].cp), CCON); }
-#line 3083 "awkgram.tab.c"
-    break;
-
-  case 165: /* term: SPLIT '(' pattern comma varname comma pattern ')'  */
-#line 397 "awkgram.y"
-                { (yyval.p) = op4(SPLIT, (yyvsp[-5].p), makearr((yyvsp[-3].p)), (yyvsp[-1].p), (Node*)STRING); }
-#line 3089 "awkgram.tab.c"
-    break;
-
-  case 166: /* term: SPLIT '(' pattern comma varname comma reg_expr ')'  */
-#line 399 "awkgram.y"
-                { (yyval.p) = op4(SPLIT, (yyvsp[-5].p), makearr((yyvsp[-3].p)), (Node*)makedfa((yyvsp[-1].s), 1), (Node *)REGEXPR); }
-#line 3095 "awkgram.tab.c"
-    break;
-
-  case 167: /* term: SPLIT '(' pattern comma varname ')'  */
-#line 401 "awkgram.y"
-                { (yyval.p) = op4(SPLIT, (yyvsp[-3].p), makearr((yyvsp[-1].p)), NIL, (Node*)STRING); }
-#line 3101 "awkgram.tab.c"
-    break;
-
-  case 168: /* term: SPRINTF '(' patlist ')'  */
+       { yyval.p = op3(MATCHFCN, NIL, yystack.l_mark[-3].p, (Node*)makedfa(yystack.l_mark[-1].s, 1)); free(yystack.l_mark[-1].s); }
+#line 1 ""
+break;
+case 162:
+#line 393 "awkgram.y"
+       { if (constnode(yystack.l_mark[-1].p)) {
+                       yyval.p = op3(MATCHFCN, NIL, yystack.l_mark[-3].p, (Node*)makedfa(strnode(yystack.l_mark[-1].p), 1));
+                       free(yystack.l_mark[-1].p);
+                 } else
+                       yyval.p = op3(MATCHFCN, (Node *)1, yystack.l_mark[-3].p, yystack.l_mark[-1].p); }
+#line 1 ""
+break;
+case 163:
+#line 398 "awkgram.y"
+       { yyval.p = celltonode(yystack.l_mark[0].cp, CCON); }
+#line 1 ""
+break;
+case 164:
+#line 400 "awkgram.y"
+       { yyval.p = op4(SPLIT, yystack.l_mark[-5].p, makearr(yystack.l_mark[-3].p), yystack.l_mark[-1].p, (Node*)STRING); }
+#line 1 ""
+break;
+case 165:
 #line 402 "awkgram.y"
-                                        { (yyval.p) = op1((yyvsp[-3].i), (yyvsp[-1].p)); }
-#line 3107 "awkgram.tab.c"
-    break;
-
-  case 169: /* term: string  */
-#line 403 "awkgram.y"
-                                        { (yyval.p) = celltonode((yyvsp[0].cp), CCON); }
-#line 3113 "awkgram.tab.c"
-    break;
-
-  case 170: /* term: subop '(' reg_expr comma pattern ')'  */
+       { yyval.p = op4(SPLIT, yystack.l_mark[-5].p, makearr(yystack.l_mark[-3].p), (Node*)makedfa(yystack.l_mark[-1].s, 1), (Node *)REGEXPR); free(yystack.l_mark[-1].s); }
+#line 1 ""
+break;
+case 166:
+#line 404 "awkgram.y"
+       { yyval.p = op4(SPLIT, yystack.l_mark[-3].p, makearr(yystack.l_mark[-1].p), NIL, (Node*)STRING); }
+#line 1 ""
+break;
+case 167:
 #line 405 "awkgram.y"
-                { (yyval.p) = op4((yyvsp[-5].i), NIL, (Node*)makedfa((yyvsp[-3].s), 1), (yyvsp[-1].p), rectonode()); }
-#line 3119 "awkgram.tab.c"
-    break;
-
-  case 171: /* term: subop '(' pattern comma pattern ')'  */
-#line 407 "awkgram.y"
-                { if (constnode((yyvsp[-3].p)))
-                       (yyval.p) = op4((yyvsp[-5].i), NIL, (Node*)makedfa(strnode((yyvsp[-3].p)), 1), (yyvsp[-1].p), rectonode());
-                 else
-                       (yyval.p) = op4((yyvsp[-5].i), (Node *)1, (yyvsp[-3].p), (yyvsp[-1].p), rectonode()); }
-#line 3128 "awkgram.tab.c"
-    break;
-
-  case 172: /* term: subop '(' reg_expr comma pattern comma var ')'  */
-#line 412 "awkgram.y"
-                { (yyval.p) = op4((yyvsp[-7].i), NIL, (Node*)makedfa((yyvsp[-5].s), 1), (yyvsp[-3].p), (yyvsp[-1].p)); }
-#line 3134 "awkgram.tab.c"
-    break;
-
-  case 173: /* term: subop '(' pattern comma pattern comma var ')'  */
-#line 414 "awkgram.y"
-                { if (constnode((yyvsp[-5].p)))
-                       (yyval.p) = op4((yyvsp[-7].i), NIL, (Node*)makedfa(strnode((yyvsp[-5].p)), 1), (yyvsp[-3].p), (yyvsp[-1].p));
-                 else
-                       (yyval.p) = op4((yyvsp[-7].i), (Node *)1, (yyvsp[-5].p), (yyvsp[-3].p), (yyvsp[-1].p)); }
-#line 3143 "awkgram.tab.c"
-    break;
-
-  case 174: /* term: SUBSTR '(' pattern comma pattern comma pattern ')'  */
-#line 419 "awkgram.y"
-                { (yyval.p) = op3(SUBSTR, (yyvsp[-5].p), (yyvsp[-3].p), (yyvsp[-1].p)); }
-#line 3149 "awkgram.tab.c"
-    break;
-
-  case 175: /* term: SUBSTR '(' pattern comma pattern ')'  */
-#line 421 "awkgram.y"
-                { (yyval.p) = op3(SUBSTR, (yyvsp[-3].p), (yyvsp[-1].p), NIL); }
-#line 3155 "awkgram.tab.c"
-    break;
-
-  case 178: /* var: varname '[' patlist ']'  */
-#line 427 "awkgram.y"
-                                        { (yyval.p) = op2(ARRAY, makearr((yyvsp[-3].p)), (yyvsp[-1].p)); }
-#line 3161 "awkgram.tab.c"
-    break;
-
-  case 179: /* var: IVAR  */
-#line 428 "awkgram.y"
-                                        { (yyval.p) = op1(INDIRECT, celltonode((yyvsp[0].cp), CVAR)); }
-#line 3167 "awkgram.tab.c"
-    break;
-
-  case 180: /* var: INDIRECT term  */
-#line 429 "awkgram.y"
-                                        { (yyval.p) = op1(INDIRECT, (yyvsp[0].p)); }
-#line 3173 "awkgram.tab.c"
-    break;
-
-  case 181: /* varlist: %empty  */
+       { yyval.p = op1(yystack.l_mark[-3].i, yystack.l_mark[-1].p); }
+#line 1 ""
+break;
+case 168:
+#line 406 "awkgram.y"
+       { yyval.p = celltonode(yystack.l_mark[0].cp, CCON); }
+#line 1 ""
+break;
+case 169:
+#line 408 "awkgram.y"
+       { yyval.p = op4(yystack.l_mark[-5].i, NIL, (Node*)makedfa(yystack.l_mark[-3].s, 1), yystack.l_mark[-1].p, rectonode()); free(yystack.l_mark[-3].s); }
+#line 1 ""
+break;
+case 170:
+#line 410 "awkgram.y"
+       { if (constnode(yystack.l_mark[-3].p)) {
+                       yyval.p = op4(yystack.l_mark[-5].i, NIL, (Node*)makedfa(strnode(yystack.l_mark[-3].p), 1), yystack.l_mark[-1].p, rectonode());
+                       free(yystack.l_mark[-3].p);
+                 } else
+                       yyval.p = op4(yystack.l_mark[-5].i, (Node *)1, yystack.l_mark[-3].p, yystack.l_mark[-1].p, rectonode()); }
+#line 1 ""
+break;
+case 171:
+#line 416 "awkgram.y"
+       { yyval.p = op4(yystack.l_mark[-7].i, NIL, (Node*)makedfa(yystack.l_mark[-5].s, 1), yystack.l_mark[-3].p, yystack.l_mark[-1].p); free(yystack.l_mark[-5].s); }
+#line 1 ""
+break;
+case 172:
+#line 418 "awkgram.y"
+       { if (constnode(yystack.l_mark[-5].p)) {
+                       yyval.p = op4(yystack.l_mark[-7].i, NIL, (Node*)makedfa(strnode(yystack.l_mark[-5].p), 1), yystack.l_mark[-3].p, yystack.l_mark[-1].p);
+                       free(yystack.l_mark[-5].p);
+                 } else
+                       yyval.p = op4(yystack.l_mark[-7].i, (Node *)1, yystack.l_mark[-5].p, yystack.l_mark[-3].p, yystack.l_mark[-1].p); }
+#line 1 ""
+break;
+case 173:
+#line 424 "awkgram.y"
+       { yyval.p = op3(SUBSTR, yystack.l_mark[-5].p, yystack.l_mark[-3].p, yystack.l_mark[-1].p); }
+#line 1 ""
+break;
+case 174:
+#line 426 "awkgram.y"
+       { yyval.p = op3(SUBSTR, yystack.l_mark[-3].p, yystack.l_mark[-1].p, NIL); }
+#line 1 ""
+break;
+case 177:
+#line 432 "awkgram.y"
+       { yyval.p = op2(ARRAY, makearr(yystack.l_mark[-3].p), yystack.l_mark[-1].p); }
+#line 1 ""
+break;
+case 178:
 #line 433 "awkgram.y"
-                                { arglist = (yyval.p) = 0; }
-#line 3179 "awkgram.tab.c"
-    break;
-
-  case 182: /* varlist: VAR  */
+       { yyval.p = op1(INDIRECT, celltonode(yystack.l_mark[0].cp, CVAR)); }
+#line 1 ""
+break;
+case 179:
 #line 434 "awkgram.y"
-                                { arglist = (yyval.p) = celltonode((yyvsp[0].cp),CVAR); }
-#line 3185 "awkgram.tab.c"
-    break;
-
-  case 183: /* varlist: varlist comma VAR  */
-#line 435 "awkgram.y"
-                                {
-                       checkdup((yyvsp[-2].p), (yyvsp[0].cp));
-                       arglist = (yyval.p) = linkum((yyvsp[-2].p),celltonode((yyvsp[0].cp),CVAR)); }
-#line 3193 "awkgram.tab.c"
-    break;
-
-  case 184: /* varname: VAR  */
-#line 441 "awkgram.y"
-                                { (yyval.p) = celltonode((yyvsp[0].cp), CVAR); }
-#line 3199 "awkgram.tab.c"
-    break;
-
-  case 185: /* varname: ARG  */
-#line 442 "awkgram.y"
-                                { (yyval.p) = op1(ARG, itonp((yyvsp[0].i))); }
-#line 3205 "awkgram.tab.c"
-    break;
-
-  case 186: /* varname: VARNF  */
-#line 443 "awkgram.y"
-                                { (yyval.p) = op1(VARNF, (Node *) (yyvsp[0].cp)); }
-#line 3211 "awkgram.tab.c"
-    break;
-
-  case 187: /* while: WHILE '(' pattern rparen  */
+       { yyval.p = op1(INDIRECT, yystack.l_mark[0].p); }
+#line 1 ""
+break;
+case 180:
+#line 438 "awkgram.y"
+       { arglist = yyval.p = 0; }
+#line 1 ""
+break;
+case 181:
+#line 439 "awkgram.y"
+       { arglist = yyval.p = celltonode(yystack.l_mark[0].cp,CVAR); }
+#line 1 ""
+break;
+case 182:
+#line 440 "awkgram.y"
+       {
+                       checkdup(yystack.l_mark[-2].p, yystack.l_mark[0].cp);
+                       arglist = yyval.p = linkum(yystack.l_mark[-2].p,celltonode(yystack.l_mark[0].cp,CVAR)); }
+#line 1 ""
+break;
+case 183:
+#line 446 "awkgram.y"
+       { yyval.p = celltonode(yystack.l_mark[0].cp, CVAR); }
+#line 1 ""
+break;
+case 184:
+#line 447 "awkgram.y"
+       { yyval.p = op1(ARG, itonp(yystack.l_mark[0].i)); }
+#line 1 ""
+break;
+case 185:
 #line 448 "awkgram.y"
-                                        { (yyval.p) = notnull((yyvsp[-1].p)); }
-#line 3217 "awkgram.tab.c"
-    break;
-
-
-#line 3221 "awkgram.tab.c"
-
-      default: break;
-    }
-  /* User semantic actions sometimes alter yychar, and that requires
-     that yytoken be updated with the new translation.  We take the
-     approach of translating immediately before every use of yytoken.
-     One alternative is translating here after every semantic action,
-     but that translation would be missed if the semantic action invokes
-     YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or
-     if it invokes YYBACKUP.  In the case of YYABORT or YYACCEPT, an
-     incorrect destructor might then be invoked immediately.  In the
-     case of YYERROR or YYBACKUP, subsequent parser actions might lead
-     to an incorrect destructor call or verbose syntax error message
-     before the lookahead is translated.  */
-  YY_SYMBOL_PRINT ("-> $$ =", YY_CAST (yysymbol_kind_t, yyr1[yyn]), &yyval, &yyloc);
-
-  YYPOPSTACK (yylen);
-  yylen = 0;
-
-  *++yyvsp = yyval;
-
-  /* Now 'shift' the result of the reduction.  Determine what state
-     that goes to, based on the state we popped back to and the rule
-     number reduced by.  */
-  {
-    const int yylhs = yyr1[yyn] - YYNTOKENS;
-    const int yyi = yypgoto[yylhs] + *yyssp;
-    yystate = (0 <= yyi && yyi <= YYLAST && yycheck[yyi] == *yyssp
-               ? yytable[yyi]
-               : yydefgoto[yylhs]);
-  }
-
-  goto yynewstate;
-
-
-/*--------------------------------------.
-| yyerrlab -- here on detecting error.  |
-`--------------------------------------*/
-yyerrlab:
-  /* Make sure we have latest lookahead translation.  See comments at
-     user semantic actions for why this is necessary.  */
-  yytoken = yychar == YYEMPTY ? YYSYMBOL_YYEMPTY : YYTRANSLATE (yychar);
-  /* If not already recovering from an error, report this error.  */
-  if (!yyerrstatus)
-    {
-      ++yynerrs;
-      yyerror (YY_("syntax error"));
+       { yyval.p = op1(VARNF, (Node *) yystack.l_mark[0].cp); }
+#line 1 ""
+break;
+case 186:
+#line 453 "awkgram.y"
+       { yyval.p = notnull(yystack.l_mark[-1].p); }
+#line 1 ""
+break;
+#line 5127 "awkgram.tab.c"
+    default:
+        break;
     }
-
-  if (yyerrstatus == 3)
+    yystack.s_mark -= yym;
+    yystate = *yystack.s_mark;
+    yystack.l_mark -= yym;
+#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
+    yystack.p_mark -= yym;
+#endif
+    yym = yylhs[yyn];
+    if (yystate == 0 && yym == 0)
     {
-      /* If just tried and failed to reuse lookahead token after an
-         error, discard it.  */
-
-      if (yychar <= YYEOF)
-        {
-          /* Return failure if at end of input.  */
-          if (yychar == YYEOF)
-            YYABORT;
-        }
-      else
+#if YYDEBUG
+        if (yydebug)
         {
-          yydestruct ("Error: discarding",
-                      yytoken, &yylval);
-          yychar = YYEMPTY;
+            fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth);
+#ifdef YYSTYPE_TOSTRING
+#if YYBTYACC
+            if (!yytrial)
+#endif /* YYBTYACC */
+                fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[YYFINAL], yyval));
+#endif
+            fprintf(stderr, "shifting from state 0 to final state %d\n", YYFINAL);
         }
-    }
-
-  /* Else will try to reuse lookahead token after shifting the error
-     token.  */
-  goto yyerrlab1;
-
-
-/*---------------------------------------------------.
-| yyerrorlab -- error raised explicitly by YYERROR.  |
-`---------------------------------------------------*/
-yyerrorlab:
-  /* Pacify compilers when the user code never invokes YYERROR and the
-     label yyerrorlab therefore never appears in user code.  */
-  if (0)
-    YYERROR;
-  ++yynerrs;
-
-  /* Do not reclaim the symbols of the rule whose action triggered
-     this YYERROR.  */
-  YYPOPSTACK (yylen);
-  yylen = 0;
-  YY_STACK_PRINT (yyss, yyssp);
-  yystate = *yyssp;
-  goto yyerrlab1;
-
-
-/*-------------------------------------------------------------.
-| yyerrlab1 -- common code for both syntax error and YYERROR.  |
-`-------------------------------------------------------------*/
-yyerrlab1:
-  yyerrstatus = 3;      /* Each real token shifted decrements this.  */
-
-  /* Pop stack until we find a state that shifts the error token.  */
-  for (;;)
-    {
-      yyn = yypact[yystate];
-      if (!yypact_value_is_default (yyn))
+#endif
+        yystate = YYFINAL;
+        *++yystack.s_mark = YYFINAL;
+        *++yystack.l_mark = yyval;
+#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
+        *++yystack.p_mark = yyloc;
+#endif
+        if (yychar < 0)
         {
-          yyn += YYSYMBOL_YYerror;
-          if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYSYMBOL_YYerror)
+#if YYBTYACC
+            do {
+            if (yylvp < yylve)
+            {
+                /* we're currently re-reading tokens */
+                yylval = *yylvp++;
+#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
+                yylloc = *yylpp++;
+#endif
+                yychar = *yylexp++;
+                break;
+            }
+            if (yyps->save)
             {
-              yyn = yytable[yyn];
-              if (0 < yyn)
+                /* in trial mode; save scanner results for future parse attempts */
+                if (yylvp == yylvlim)
+                {   /* Enlarge lexical value queue */
+                    size_t p = (size_t) (yylvp - yylvals);
+                    size_t s = (size_t) (yylvlim - yylvals);
+
+                    s += YYLVQUEUEGROWTH;
+                    if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL)
+                        goto yyenomem;
+                    if ((yylvals   = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL)
+                        goto yyenomem;
+#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
+                    if ((yylpsns   = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL)
+                        goto yyenomem;
+#endif
+                    yylvp   = yylve = yylvals + p;
+                    yylvlim = yylvals + s;
+#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
+                    yylpp   = yylpe = yylpsns + p;
+                    yylplim = yylpsns + s;
+#endif
+                    yylexp  = yylexemes + p;
+                }
+                *yylexp = (YYINT) YYLEX;
+                *yylvp++ = yylval;
+                yylve++;
+#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
+                *yylpp++ = yylloc;
+                yylpe++;
+#endif
+                yychar = *yylexp++;
                 break;
             }
+            /* normal operation, no conflict encountered */
+#endif /* YYBTYACC */
+            yychar = YYLEX;
+#if YYBTYACC
+            } while (0);
+#endif /* YYBTYACC */
+            if (yychar < 0) yychar = YYEOF;
+#if YYDEBUG
+            if (yydebug)
+            {
+                if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
+                fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)\n",
+                                YYDEBUGSTR, yydepth, YYFINAL, yychar, yys);
+            }
+#endif
         }
-
-      /* Pop the current state because it cannot handle the error token.  */
-      if (yyssp == yyss)
-        YYABORT;
-
-
-      yydestruct ("Error: popping",
-                  YY_ACCESSING_SYMBOL (yystate), yyvsp);
-      YYPOPSTACK (1);
-      yystate = *yyssp;
-      YY_STACK_PRINT (yyss, yyssp);
+        if (yychar == YYEOF) goto yyaccept;
+        goto yyloop;
     }
+    if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 &&
+            yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate)
+        yystate = yytable[yyn];
+    else
+        yystate = yydgoto[yym];
+#if YYDEBUG
+    if (yydebug)
+    {
+        fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth);
+#ifdef YYSTYPE_TOSTRING
+#if YYBTYACC
+        if (!yytrial)
+#endif /* YYBTYACC */
+            fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[yystate], yyval));
+#endif
+        fprintf(stderr, "shifting from state %d to state %d\n", *yystack.s_mark, yystate);
+    }
+#endif
+    if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
+    *++yystack.s_mark = (YYINT) yystate;
+    *++yystack.l_mark = yyval;
+#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
+    *++yystack.p_mark = yyloc;
+#endif
+    goto yyloop;
+#if YYBTYACC
 
-  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
-  *++yyvsp = yylval;
-  YY_IGNORE_MAYBE_UNINITIALIZED_END
-
-
-  /* Shift the error token.  */
-  YY_SYMBOL_PRINT ("Shifting", YY_ACCESSING_SYMBOL (yyn), yyvsp, yylsp);
-
-  yystate = yyn;
-  goto yynewstate;
-
-
-/*-------------------------------------.
-| yyacceptlab -- YYACCEPT comes here.  |
-`-------------------------------------*/
-yyacceptlab:
-  yyresult = 0;
-  goto yyreturnlab;
-
-
-/*-----------------------------------.
-| yyabortlab -- YYABORT comes here.  |
-`-----------------------------------*/
-yyabortlab:
-  yyresult = 1;
-  goto yyreturnlab;
-
-
-/*-----------------------------------------------------------.
-| yyexhaustedlab -- YYNOMEM (memory exhaustion) comes here.  |
-`-----------------------------------------------------------*/
-yyexhaustedlab:
-  yyerror (YY_("memory exhausted"));
-  yyresult = 2;
-  goto yyreturnlab;
-
-
-/*----------------------------------------------------------.
-| yyreturnlab -- parsing is finished, clean up and return.  |
-`----------------------------------------------------------*/
-yyreturnlab:
-  if (yychar != YYEMPTY)
+    /* Reduction declares that this path is valid. Set yypath and do a full parse */
+yyvalid:
+    if (yypath) YYABORT;
+    while (yyps->save)
     {
-      /* Make sure we have latest lookahead translation.  See comments at
-         user semantic actions for why this is necessary.  */
-      yytoken = YYTRANSLATE (yychar);
-      yydestruct ("Cleanup: discarding lookahead",
-                  yytoken, &yylval);
+        YYParseState *save = yyps->save;
+        yyps->save = save->save;
+        save->save = yypath;
+        yypath = save;
     }
-  /* Do not reclaim the symbols of the rule whose action triggered
-     this YYABORT or YYACCEPT.  */
-  YYPOPSTACK (yylen);
-  YY_STACK_PRINT (yyss, yyssp);
-  while (yyssp != yyss)
+#if YYDEBUG
+    if (yydebug)
+        fprintf(stderr, "%s[%d]: state %d, CONFLICT trial successful, backtracking to state %d, %d tokens\n",
+                        YYDEBUGSTR, yydepth, yystate, yypath->state, (int)(yylvp - yylvals - yypath->lexeme));
+#endif
+    if (yyerrctx)
     {
-      yydestruct ("Cleanup: popping",
-                  YY_ACCESSING_SYMBOL (+*yyssp), yyvsp);
-      YYPOPSTACK (1);
+        yyFreeState(yyerrctx);
+        yyerrctx = NULL;
     }
-#ifndef yyoverflow
-  if (yyss != yyssa)
-    YYSTACK_FREE (yyss);
+    yylvp          = yylvals + yypath->lexeme;
+#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
+    yylpp          = yylpsns + yypath->lexeme;
 #endif
+    yylexp         = yylexemes + yypath->lexeme;
+    yychar         = YYEMPTY;
+    yystack.s_mark = yystack.s_base + (yypath->yystack.s_mark - yypath->yystack.s_base);
+    memcpy (yystack.s_base, yypath->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT));
+    yystack.l_mark = yystack.l_base + (yypath->yystack.l_mark - yypath->yystack.l_base);
+    memcpy (yystack.l_base, yypath->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));
+#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
+    yystack.p_mark = yystack.p_base + (yypath->yystack.p_mark - yypath->yystack.p_base);
+    memcpy (yystack.p_base, yypath->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));
+#endif
+    yystate        = yypath->state;
+    goto yyloop;
+#endif /* YYBTYACC */
+
+yyoverflow:
+    YYERROR_CALL("yacc stack overflow");
+#if YYBTYACC
+    goto yyabort_nomem;
+yyenomem:
+    YYERROR_CALL("memory exhausted");
+yyabort_nomem:
+#endif /* YYBTYACC */
+    yyresult = 2;
+    goto yyreturn;
+
+yyabort:
+    yyresult = 1;
+    goto yyreturn;
+
+yyaccept:
+#if YYBTYACC
+    if (yyps->save) goto yyvalid;
+#endif /* YYBTYACC */
+    yyresult = 0;
+
+yyreturn:
+#if defined(YYDESTRUCT_CALL)
+    if (yychar != YYEOF && yychar != YYEMPTY)
+#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
+        YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval, &yylloc);
+#else
+        YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval);
+#endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */
 
-  return yyresult;
-}
-
-#line 451 "awkgram.y"
-
-
-void setfname(Cell *p)
-{
-       if (isarr(p))
-               SYNTAX("%s is an array, not a function", p->nval);
-       else if (isfcn(p))
-               SYNTAX("you can't define function %s more than once", p->nval);
-       curfname = p->nval;
-}
-
-int constnode(Node *p)
-{
-       return isvalue(p) && ((Cell *) (p->narg[0]))->csub == CCON;
-}
-
-char *strnode(Node *p)
-{
-       return ((Cell *)(p->narg[0]))->sval;
-}
-
-Node *notnull(Node *n)
-{
-       switch (n->nobj) {
-       case LE: case LT: case EQ: case NE: case GT: case GE:
-       case BOR: case AND: case NOT:
-               return n;
-       default:
-               return op2(NE, n, nullnode);
-       }
-}
+    {
+        YYSTYPE *pv;
+#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
+        YYLTYPE *pp;
+
+        for (pv = yystack.l_base, pp = yystack.p_base; pv <= yystack.l_mark; ++pv, ++pp)
+             YYDESTRUCT_CALL("cleanup: discarding state",
+                             yystos[*(yystack.s_base + (pv - yystack.l_base))], pv, pp);
+#else
+        for (pv = yystack.l_base; pv <= yystack.l_mark; ++pv)
+             YYDESTRUCT_CALL("cleanup: discarding state",
+                             yystos[*(yystack.s_base + (pv - yystack.l_base))], pv);
+#endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */
+    }
+#endif /* defined(YYDESTRUCT_CALL) */
 
-void checkdup(Node *vl, Cell *cp)      /* check if name already in list */
-{
-       char *s = cp->nval;
-       for ( ; vl; vl = vl->nnext) {
-               if (strcmp(s, ((Cell *)(vl->narg[0]))->nval) == 0) {
-                       SYNTAX("duplicate argument %s", s);
-                       break;
-               }
-       }
+#if YYBTYACC
+    if (yyerrctx)
+    {
+        yyFreeState(yyerrctx);
+        yyerrctx = NULL;
+    }
+    while (yyps)
+    {
+        YYParseState *save = yyps;
+        yyps = save->save;
+        save->save = NULL;
+        yyFreeState(save);
+    }
+    while (yypath)
+    {
+        YYParseState *save = yypath;
+        yypath = save->save;
+        save->save = NULL;
+        yyFreeState(save);
+    }
+#endif /* YYBTYACC */
+    yyfreestack(&yystack);
+    return (yyresult);
 }
Index: pkgsrc/lang/nawk/files/awkgram.tab.h
diff -u pkgsrc/lang/nawk/files/awkgram.tab.h:1.1 pkgsrc/lang/nawk/files/awkgram.tab.h:1.2
--- pkgsrc/lang/nawk/files/awkgram.tab.h:1.1    Fri Feb 24 20:57:50 2023
+++ pkgsrc/lang/nawk/files/awkgram.tab.h        Tue Sep 12 19:16:52 2023
@@ -1,182 +1,114 @@
-/* A Bison parser, made by GNU Bison 3.8.2.  */
+#ifndef _yy_defines_h_
+#define _yy_defines_h_
 
-/* Bison interface for Yacc-like parsers in C
-
-   Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2021 Free Software Foundation,
-   Inc.
-
-   This program is free software: you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation, either version 3 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
-
-/* As a special exception, you may create a larger work that contains
-   part or all of the Bison parser skeleton and distribute that work
-   under terms of your choice, so long as that work isn't itself a
-   parser generator using the skeleton or a modified version thereof
-   as a parser skeleton.  Alternatively, if you modify or redistribute
-   the parser skeleton itself, you may (at your option) remove this
-   special exception, which will cause the skeleton and the resulting
-   Bison output files to be licensed under the GNU General Public
-   License without this special exception.
-
-   This special exception was added by the Free Software Foundation in
-   version 2.2 of Bison.  */
-
-/* DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual,
-   especially those whose name start with YY_ or yy_.  They are
-   private implementation details that can be changed or removed.  */
-
-#ifndef YY_YY_AWKGRAM_TAB_H_INCLUDED
-# define YY_YY_AWKGRAM_TAB_H_INCLUDED
-/* Debug traces.  */
-#ifndef YYDEBUG
-# define YYDEBUG 0
-#endif
-#if YYDEBUG
-extern int yydebug;
-#endif
-
-/* Token kinds.  */
-#ifndef YYTOKENTYPE
-# define YYTOKENTYPE
-  enum yytokentype
-  {
-    YYEMPTY = -2,
-    YYEOF = 0,                     /* "end of file"  */
-    YYerror = 256,                 /* error  */
-    YYUNDEF = 257,                 /* "invalid token"  */
-    FIRSTTOKEN = 258,              /* FIRSTTOKEN  */
-    PROGRAM = 259,                 /* PROGRAM  */
-    PASTAT = 260,                  /* PASTAT  */
-    PASTAT2 = 261,                 /* PASTAT2  */
-    XBEGIN = 262,                  /* XBEGIN  */
-    XEND = 263,                    /* XEND  */
-    NL = 264,                      /* NL  */
-    ARRAY = 265,                   /* ARRAY  */
-    MATCH = 266,                   /* MATCH  */
-    NOTMATCH = 267,                /* NOTMATCH  */
-    MATCHOP = 268,                 /* MATCHOP  */
-    FINAL = 269,                   /* FINAL  */
-    DOT = 270,                     /* DOT  */
-    ALL = 271,                     /* ALL  */
-    CCL = 272,                     /* CCL  */
-    NCCL = 273,                    /* NCCL  */
-    CHAR = 274,                    /* CHAR  */
-    OR = 275,                      /* OR  */
-    STAR = 276,                    /* STAR  */
-    QUEST = 277,                   /* QUEST  */
-    PLUS = 278,                    /* PLUS  */
-    EMPTYRE = 279,                 /* EMPTYRE  */
-    ZERO = 280,                    /* ZERO  */
-    AND = 281,                     /* AND  */
-    BOR = 282,                     /* BOR  */
-    APPEND = 283,                  /* APPEND  */
-    EQ = 284,                      /* EQ  */
-    GE = 285,                      /* GE  */
-    GT = 286,                      /* GT  */
-    LE = 287,                      /* LE  */
-    LT = 288,                      /* LT  */
-    NE = 289,                      /* NE  */
-    IN = 290,                      /* IN  */
-    ARG = 291,                     /* ARG  */
-    BLTIN = 292,                   /* BLTIN  */
-    BREAK = 293,                   /* BREAK  */
-    CLOSE = 294,                   /* CLOSE  */
-    CONTINUE = 295,                /* CONTINUE  */
-    DELETE = 296,                  /* DELETE  */
-    DO = 297,                      /* DO  */
-    EXIT = 298,                    /* EXIT  */
-    FOR = 299,                     /* FOR  */
-    FUNC = 300,                    /* FUNC  */
-    SUB = 301,                     /* SUB  */
-    GSUB = 302,                    /* GSUB  */
-    IF = 303,                      /* IF  */
-    INDEX = 304,                   /* INDEX  */
-    LSUBSTR = 305,                 /* LSUBSTR  */
-    MATCHFCN = 306,                /* MATCHFCN  */
-    NEXT = 307,                    /* NEXT  */
-    NEXTFILE = 308,                /* NEXTFILE  */
-    ADD = 309,                     /* ADD  */
-    MINUS = 310,                   /* MINUS  */
-    MULT = 311,                    /* MULT  */
-    DIVIDE = 312,                  /* DIVIDE  */
-    MOD = 313,                     /* MOD  */
-    ASSIGN = 314,                  /* ASSIGN  */
-    ASGNOP = 315,                  /* ASGNOP  */
-    ADDEQ = 316,                   /* ADDEQ  */
-    SUBEQ = 317,                   /* SUBEQ  */
-    MULTEQ = 318,                  /* MULTEQ  */
-    DIVEQ = 319,                   /* DIVEQ  */
-    MODEQ = 320,                   /* MODEQ  */
-    POWEQ = 321,                   /* POWEQ  */
-    PRINT = 322,                   /* PRINT  */
-    PRINTF = 323,                  /* PRINTF  */
-    SPRINTF = 324,                 /* SPRINTF  */
-    ELSE = 325,                    /* ELSE  */
-    INTEST = 326,                  /* INTEST  */
-    CONDEXPR = 327,                /* CONDEXPR  */
-    POSTINCR = 328,                /* POSTINCR  */
-    PREINCR = 329,                 /* PREINCR  */
-    POSTDECR = 330,                /* POSTDECR  */
-    PREDECR = 331,                 /* PREDECR  */
-    VAR = 332,                     /* VAR  */
-    IVAR = 333,                    /* IVAR  */
-    VARNF = 334,                   /* VARNF  */
-    CALL = 335,                    /* CALL  */
-    NUMBER = 336,                  /* NUMBER  */
-    STRING = 337,                  /* STRING  */
-    REGEXPR = 338,                 /* REGEXPR  */
-    GETLINE = 339,                 /* GETLINE  */
-    RETURN = 340,                  /* RETURN  */
-    SPLIT = 341,                   /* SPLIT  */
-    SUBSTR = 342,                  /* SUBSTR  */
-    WHILE = 343,                   /* WHILE  */
-    CAT = 344,                     /* CAT  */
-    NOT = 345,                     /* NOT  */
-    UMINUS = 346,                  /* UMINUS  */
-    UPLUS = 347,                   /* UPLUS  */
-    POWER = 348,                   /* POWER  */
-    DECR = 349,                    /* DECR  */
-    INCR = 350,                    /* INCR  */
-    INDIRECT = 351,                /* INDIRECT  */
-    LASTTOKEN = 352                /* LASTTOKEN  */
-  };
-  typedef enum yytokentype yytoken_kind_t;
+#define FIRSTTOKEN 257
+#define PROGRAM 258
+#define PASTAT 259
+#define PASTAT2 260
+#define XBEGIN 261
+#define XEND 262
+#define NL 263
+#define ARRAY 264
+#define MATCH 265
+#define NOTMATCH 266
+#define MATCHOP 267
+#define FINAL 268
+#define DOT 269
+#define ALL 270
+#define CCL 271
+#define NCCL 272
+#define CHAR 273
+#define OR 274
+#define STAR 275
+#define QUEST 276
+#define PLUS 277
+#define EMPTYRE 278
+#define ZERO 279
+#define AND 280
+#define BOR 281
+#define APPEND 282
+#define EQ 283
+#define GE 284
+#define GT 285
+#define LE 286
+#define LT 287
+#define NE 288
+#define IN 289
+#define ARG 290
+#define BLTIN 291
+#define BREAK 292
+#define CLOSE 293
+#define CONTINUE 294
+#define DELETE 295
+#define DO 296
+#define EXIT 297
+#define FOR 298
+#define FUNC 299
+#define SUB 300
+#define GSUB 301
+#define IF 302
+#define INDEX 303
+#define LSUBSTR 304
+#define MATCHFCN 305
+#define NEXT 306
+#define NEXTFILE 307
+#define ADD 308
+#define MINUS 309
+#define MULT 310
+#define DIVIDE 311
+#define MOD 312
+#define ASSIGN 313
+#define ASGNOP 314
+#define ADDEQ 315
+#define SUBEQ 316
+#define MULTEQ 317
+#define DIVEQ 318
+#define MODEQ 319
+#define POWEQ 320
+#define PRINT 321
+#define PRINTF 322
+#define SPRINTF 323
+#define ELSE 324
+#define INTEST 325
+#define CONDEXPR 326
+#define POSTINCR 327
+#define PREINCR 328
+#define POSTDECR 329
+#define PREDECR 330
+#define VAR 331
+#define IVAR 332
+#define VARNF 333
+#define CALL 334
+#define NUMBER 335
+#define STRING 336
+#define REGEXPR 337
+#define GETLINE 338
+#define RETURN 339
+#define SPLIT 340
+#define SUBSTR 341
+#define WHILE 342
+#define CAT 343
+#define NOT 344
+#define UMINUS 345
+#define UPLUS 346
+#define POWER 347
+#define DECR 348
+#define INCR 349
+#define INDIRECT 350
+#define LASTTOKEN 351
+#ifdef YYSTYPE
+#undef  YYSTYPE_IS_DECLARED
+#define YYSTYPE_IS_DECLARED 1
 #endif
-
-/* Value type.  */
-#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
-union YYSTYPE
-{
-#line 41 "awkgram.y"
-
+#ifndef YYSTYPE_IS_DECLARED
+#define YYSTYPE_IS_DECLARED 1
+typedef union {
        Node    *p;
        Cell    *cp;
        int     i;
        char    *s;
-
-#line 168 "awkgram.tab.h"
-
-};
-typedef union YYSTYPE YYSTYPE;
-# define YYSTYPE_IS_TRIVIAL 1
-# define YYSTYPE_IS_DECLARED 1
-#endif
-
-
+} YYSTYPE;
+#endif /* !YYSTYPE_IS_DECLARED */
 extern YYSTYPE yylval;
 
-
-int yyparse (void);
-
-
-#endif /* !YY_YY_AWKGRAM_TAB_H_INCLUDED  */
+#endif /* _yy_defines_h_ */

Index: pkgsrc/lang/nawk/files/lib.c
diff -u pkgsrc/lang/nawk/files/lib.c:1.5 pkgsrc/lang/nawk/files/lib.c:1.6
--- pkgsrc/lang/nawk/files/lib.c:1.5    Fri Feb 24 20:57:50 2023
+++ pkgsrc/lang/nawk/files/lib.c        Tue Sep 12 19:16:52 2023
@@ -34,6 +34,8 @@ THIS SOFTWARE.
 #include <math.h>
 #include "awk.h"
 
+extern int u8_nextlen(const char *s);
+
 char   EMPTY[] = { '\0' };
 FILE   *infile = NULL;
 bool   innew;          /* true = infile has not been read by readrec */
@@ -150,11 +152,6 @@ int getrec(char **pbuf, int *pbufsize, b
        }
        DPRINTF("RS=<%s>, FS=<%s>, ARGC=%g, FILENAME=%s\n",
                *RS, *FS, *ARGC, *FILENAME);
-       if (isrecord) {
-               donefld = false;
-               donerec = true;
-               savefs();
-       }
        saveb0 = buf[0];
        buf[0] = 0;
        while (argno < *ARGC || infile == stdin) {
@@ -194,6 +191,9 @@ int getrec(char **pbuf, int *pbufsize, b
                                        fldtab[0]->fval = result;
                                        fldtab[0]->tval |= NUM;
                                }
+                               donefld = false;
+                               donerec = true;
+                               savefs();
                        }
                        setfval(nrloc, nrloc->fval+1);
                        setfval(fnrloc, fnrloc->fval+1);
@@ -221,14 +221,19 @@ void nextfile(void)
        argno++;
 }
 
+extern int readcsvrec(char **pbuf, int *pbufsize, FILE *inf, bool newflag);
+
 int readrec(char **pbuf, int *pbufsize, FILE *inf, bool newflag)       /* read one record into buf */
 {
-       int sep, c, isrec;
-       char *rr, *buf = *pbuf;
+       int sep, c, isrec; // POTENTIAL BUG? isrec is a macro in awk.h
+       char *rr = *pbuf, *buf = *pbuf;
        int bufsize = *pbufsize;
        char *rs = getsval(rsloc);
 
-       if (*rs && rs[1]) {
+       if (CSV) {
+               c = readcsvrec(pbuf, pbufsize, inf, newflag);
+               isrec = (c == EOF && rr == buf) ? false : true;
+       } else if (*rs && rs[1]) {
                bool found;
 
                fa *pfa = makedfa(rs, 1);
@@ -243,6 +248,7 @@ int readrec(char **pbuf, int *pbufsize, 
                if (found)
                        setptr(patbeg, '\0');
                isrec = (found == 0 && *buf == '\0') ? false : true;
+
        } else {
                if ((sep = *rs) == 0) {
                        sep = '\n';
@@ -280,6 +286,52 @@ int readrec(char **pbuf, int *pbufsize, 
        return isrec;
 }
 
+
+/*******************
+ * loose ends here:
+ *   \r\n should become \n
+ *   what about bare \r?  Excel uses that for embedded newlines
+ *   can't have "" in unquoted fields, according to RFC 4180
+*/
+
+
+int readcsvrec(char **pbuf, int *pbufsize, FILE *inf, bool newflag) /* csv can have \n's */
+{                      /* so read a complete record that might be multiple lines */
+       int sep, c;
+       char *rr = *pbuf, *buf = *pbuf;
+       int bufsize = *pbufsize;
+       bool in_quote = false;
+
+       sep = '\n'; /* the only separator; have to skip over \n embedded in "..." */
+       rr = buf;
+       while ((c = getc(inf)) != EOF) {
+               if (c == sep) {
+                       if (! in_quote)
+                               break;
+                       if (rr > buf && rr[-1] == '\r') // remove \r if was \r\n
+                               rr--;
+               }
+
+               if (rr-buf+1 > bufsize)
+                       if (!adjbuf(&buf, &bufsize, 1+rr-buf,
+                           recsize, &rr, "readcsvrec 1"))
+                               FATAL("input record `%.30s...' too long", buf);
+               *rr++ = c;
+               if (c == '"')
+                       in_quote = ! in_quote;
+       }
+       if (c == '\n' && rr > buf && rr[-1] == '\r')    // remove \r if was \r\n
+               rr--;
+
+       if (!adjbuf(&buf, &bufsize, 1+rr-buf, recsize, &rr, "readcsvrec 4"))
+               FATAL("input record `%.30s...' too long", buf);
+       *rr = 0;
+       *pbuf = buf;
+       *pbufsize = bufsize;
+       DPRINTF("readcsvrec saw <%s>, returns %d\n", buf, c);
+       return c;
+}
+
 char *getargv(int n)   /* get ARGV[n] */
 {
        Cell *x;
@@ -297,12 +349,16 @@ char *getargv(int n)      /* get ARGV[n] */
 
 void setclvar(char *s) /* set var=value from s */
 {
-       char *p;
+       char *e, *p;
        Cell *q;
        double result;
 
+/* commit f3d9187d4e0f02294fb1b0e31152070506314e67 broke T.argv test */
+/* I don't understand why it was changed. */
+
        for (p=s; *p != '='; p++)
                ;
+       e = p;
        *p++ = 0;
        p = qstring(p, '\0');
        q = setsymtab(s, p, 0.0, STR, symtab);
@@ -312,6 +368,8 @@ void setclvar(char *s)      /* set var=value 
                q->tval |= NUM;
        }
        DPRINTF("command line set %s to |%s|\n", s, p);
+       free(p);
+       *e = '=';
 }
 
 
@@ -342,7 +400,7 @@ void fldbld(void)   /* create fields from 
                savefs();
        if (strlen(inputFS) > 1) {      /* it's a regular expression */
                i = refldbld(r, inputFS);
-       } else if ((sep = *inputFS) == ' ') {   /* default whitespace */
+       } else if (!CSV && (sep = *inputFS) == ' ') {   /* default whitespace */
                for (i = 0; ; ) {
                        while (*r == ' ' || *r == '\t' || *r == '\n')
                                r++;
@@ -361,26 +419,58 @@ void fldbld(void) /* create fields from 
                        *fr++ = 0;
                }
                *fr = 0;
-       } else if ((sep = *inputFS) == 0) {             /* new: FS="" => 1 char/field */
-               for (i = 0; *r != '\0'; r += n) {
-                       char buf[MB_LEN_MAX + 1];
-
+       } else if (CSV) {       /* CSV processing.  no error handling */
+               if (*r != 0) {
+                       for (;;) {
+                               i++;
+                               if (i > nfields)
+                                       growfldtab(i);
+                               if (freeable(fldtab[i]))
+                                       xfree(fldtab[i]->sval);
+                               fldtab[i]->sval = fr;
+                               fldtab[i]->tval = FLD | STR | DONTFREE;
+                               if (*r == '"' ) { /* start of "..." */
+                                       for (r++ ; *r != '\0'; ) {
+                                               if (*r == '"' && r[1] != '\0' && r[1] == '"') {
+                                                       r += 2; /* doubled quote */
+                                                       *fr++ = '"';
+                                               } else if (*r == '"' && (r[1] == '\0' || r[1] == ',')) {
+                                                       r++; /* skip over closing quote */
+                                                       break;
+                                               } else {
+                                                       *fr++ = *r++;
+                                               }
+                                       }
+                                       *fr++ = 0;
+                               } else {        /* unquoted field */
+                                       while (*r != ',' && *r != '\0')
+                                               *fr++ = *r++;
+                                       *fr++ = 0;
+                               }
+                               if (*r++ == 0)
+                                       break;
+       
+                       }
+               }
+               *fr = 0;
+       } else if ((sep = *inputFS) == 0) {     /* new: FS="" => 1 char/field */
+               for (i = 0; *r != '\0'; ) {
+                       char buf[10];
                        i++;
                        if (i > nfields)
                                growfldtab(i);
                        if (freeable(fldtab[i]))
                                xfree(fldtab[i]->sval);
-                       n = mblen(r, MB_LEN_MAX);
-                       if (n < 0)
-                               n = 1;
-                       memcpy(buf, r, n);
-                       buf[n] = '\0';
+                       n = u8_nextlen(r);
+                       for (j = 0; j < n; j++)
+                               buf[j] = *r++;
+                       buf[j] = '\0';
                        fldtab[i]->sval = tostring(buf);
                        fldtab[i]->tval = FLD | STR;
                }
                *fr = 0;
        } else if (*r != 0) {   /* if 0, it's a null field */
-               /* subtlecase : if length(FS) == 1 && length(RS > 0)
+               /* subtle case: if length(FS) == 1 && length(RS > 0)
                 * \n is NOT a field separator (cf awk book 61,84).
                 * this variable is tested in the inner while loop.
                 */
@@ -795,11 +885,11 @@ bool is_valid_number(const char *s, bool
        while (isspace(*s))
                s++;
 
-       // no hex floating point, sorry
+       /* no hex floating point, sorry */
        if (s[0] == '0' && tolower(s[1]) == 'x')
                return false;
 
-       // allow +nan, -nan, +inf, -inf, any other letter, no
+       /* allow +nan, -nan, +inf, -inf, any other letter, no */
        if (s[0] == '+' || s[0] == '-') {
                is_nan = (strncasecmp(s+1, "nan", 3) == 0);
                is_inf = (strncasecmp(s+1, "inf", 3) == 0);
@@ -833,7 +923,7 @@ convert:
        if (no_trailing != NULL)
                *no_trailing = (*ep == '\0');
 
-        // return true if found the end, or trailing stuff is allowed
+        /* return true if found the end, or trailing stuff is allowed */
        retval = *ep == '\0' || trailing_stuff_ok;
 
        return retval;
Index: pkgsrc/lang/nawk/files/proto.h
diff -u pkgsrc/lang/nawk/files/proto.h:1.5 pkgsrc/lang/nawk/files/proto.h:1.6
--- pkgsrc/lang/nawk/files/proto.h:1.5  Fri Feb 24 20:57:50 2023
+++ pkgsrc/lang/nawk/files/proto.h      Tue Sep 12 19:16:52 2023
@@ -43,14 +43,13 @@ extern      fa      *mkdfa(const char *, bool);
 extern int     makeinit(fa *, bool);
 extern void    penter(Node *);
 extern void    freetr(Node *);
-extern int     hexstr(const uschar **);
 extern int     quoted(const uschar **);
-extern char    *cclenter(const char *);
+extern int     *cclenter(const char *);
 extern noreturn void   overflo(const char *);
 extern void    cfoll(fa *, Node *);
 extern int     first(Node *);
 extern void    follow(Node *);
-extern int     member(int, const char *);
+extern int     member(int, int *);
 extern int     match(fa *, const char *);
 extern int     pmatch(fa *, const char *);
 extern int     nematch(fa *, const char *);
@@ -68,7 +67,7 @@ extern        void    freefa(fa *);
 extern int     pgetc(void);
 extern char    *cursource(void);
 
-extern Node    *nodealloc(int);
+extern Node    *nodealloc(size_t);
 extern Node    *exptostat(Node *);
 extern Node    *node1(int, Node *);
 extern Node    *node2(int, Node *, Node *);
Index: pkgsrc/lang/nawk/files/tran.c
diff -u pkgsrc/lang/nawk/files/tran.c:1.5 pkgsrc/lang/nawk/files/tran.c:1.6
--- pkgsrc/lang/nawk/files/tran.c:1.5   Fri Feb 24 20:57:50 2023
+++ pkgsrc/lang/nawk/files/tran.c       Tue Sep 12 19:16:52 2023
@@ -70,18 +70,6 @@ Cell *literal0;
 
 extern Cell **fldtab;
 
-static void
-setfree(Cell *vp)
-{
-       if (&vp->sval == FS || &vp->sval == RS ||
-           &vp->sval == OFS || &vp->sval == ORS ||
-           &vp->sval == OFMT || &vp->sval == CONVFMT ||
-           &vp->sval == FILENAME || &vp->sval == SUBSEP)
-               vp->tval |= DONTFREE;
-       else
-               vp->tval &= ~DONTFREE;
-}
-
 void syminit(void)     /* initialize symbol table with builtin vars */
 {
        literal0 = setsymtab("0", "0", 0.0, NUM|STR|CON|DONTFREE, symtab);
@@ -320,7 +308,7 @@ Awkfloat setfval(Cell *vp, Awkfloat f)      /
        } else if (&vp->fval == NF) {
                donerec = false;        /* mark $0 invalid */
                setlastfld(f);
-               DPRINTF("setting NF to %g\n", f);
+               DPRINTF("setfval: setting NF to %g\n", f);
        } else if (isrec(vp)) {
                donefld = false;        /* mark $1... invalid */
                donerec = true;
@@ -360,6 +348,10 @@ char *setsval(Cell *vp, const char *s)     /
                (void*)vp, NN(vp->nval), s, vp->tval, donerec, donefld);
        if ((vp->tval & (NUM | STR)) == 0)
                funnyvar(vp, "assign to");
+       if (CSV && (vp == rsloc))
+               WARNING("danger: don't set RS when --csv is in effect");
+       if (CSV && (vp == fsloc))
+               WARNING("danger: don't set FS when --csv is in effect");
        if (isfld(vp)) {
                donerec = false;        /* mark $0 invalid */
                fldno = atoi(vp->nval);
@@ -377,10 +369,9 @@ char *setsval(Cell *vp, const char *s)     /
        t = s ? tostring(s) : tostring("");     /* in case it's self-assign */
        if (freeable(vp))
                xfree(vp->sval);
-       vp->tval &= ~(NUM|CONVC|CONVO);
+       vp->tval &= ~(NUM|DONTFREE|CONVC|CONVO);
        vp->tval |= STR;
        vp->fmt = NULL;
-       setfree(vp);
        DPRINTF("setsval %p: %s = \"%s (%p) \", t=%o r,f=%d,%d\n",
                (void*)vp, NN(vp->nval), t, (void*)t, vp->tval, donerec, donefld);
        vp->sval = t;
@@ -388,7 +379,7 @@ char *setsval(Cell *vp, const char *s)      /
                donerec = false;        /* mark $0 invalid */
                f = getfval(vp);
                setlastfld(f);
-               DPRINTF("setting NF to %g\n", f);
+               DPRINTF("setsval: setting NF to %g\n", f);
        }
 
        return(vp->sval);
@@ -576,7 +567,6 @@ Cell *catstr(Cell *a, Cell *b) /* concat
 
 char *qstring(const char *is, int delim)       /* collect string up to next delim */
 {
-       const char *os = is;
        int c, n;
        const uschar *s = (const uschar *) is;
        uschar *buf, *bp;
@@ -585,7 +575,7 @@ char *qstring(const char *is, int delim)
                FATAL( "out of space in qstring(%s)", s);
        for (bp = buf; (c = *s) != delim; s++) {
                if (c == '\n')
-                       SYNTAX( "newline in string %.20s...", os );
+                       SYNTAX( "newline in string %.20s...", is );
                else if (c != '\\')
                        *bp++ = c;
                else {  /* \something */

Index: pkgsrc/lang/nawk/files/nawk.1
diff -u pkgsrc/lang/nawk/files/nawk.1:1.2 pkgsrc/lang/nawk/files/nawk.1:1.3
--- pkgsrc/lang/nawk/files/nawk.1:1.2   Fri Feb 24 20:57:50 2023
+++ pkgsrc/lang/nawk/files/nawk.1       Tue Sep 12 19:16:52 2023
@@ -1,4 +1,4 @@
-.\" $NetBSD: nawk.1,v 1.2 2023/02/24 20:57:50 vins Exp $
+.\" $NetBSD: nawk.1,v 1.3 2023/09/12 19:16:52 vins Exp $
 .\"
 .\" This file is copied from awk.1 but with the following modifications
 .\" for pkgsrc:
@@ -29,6 +29,8 @@ nawk \- pattern-directed scanning and pr
 [
 .BI \-F
 .I fs
+|
+.B \-\^\-csv
 ]
 [
 .BI \-v
@@ -85,6 +87,12 @@ The
 .I fs
 option defines the input field separator to be the regular expression
 .IR fs .
+The
+.B \-\^\-csv
+option causes
+.I nawk
+to process records using (more or less) standard comma-separated values
+(CSV) format.
 .PP
 An input line is normally made up of fields separated by white space,
 or by the regular expression
@@ -211,9 +219,9 @@ and
 .B sqrt
 are built in.
 Other built-in functions:
-.TF length
+.TF "\fBlength(\fR[\fIv\^\fR]\fB)\fR"
 .TP
-.B length
+\fBlength(\fR[\fIv\^\fR]\fB)\fR
 the length of its argument
 taken as a string,
 number of elements in an array for an array argument,
@@ -221,15 +229,15 @@ or length of
 .B $0
 if no argument.
 .TP
-.B rand
+.B rand()
 random number on [0,1).
 .TP
-.B srand
+\fBsrand(\fR[\fIs\^\fR]\fB)\fR
 sets seed for
 .B rand
 and returns the previous seed.
 .TP
-.B int
+.BI int( x\^ )
 truncates to an integer value.
 .TP
 \fBsubstr(\fIs\fB, \fIm\fR [\fB, \fIn\^\fR]\fB)\fR
@@ -398,7 +406,7 @@ in a pattern.
 A pattern may consist of two patterns separated by a comma;
 in this case, the action is performed for all lines
 from an occurrence of the first pattern
-though an occurrence of the second.
+through an occurrence of the second, inclusive.
 .PP
 A relational expression is one of the following:
 .IP
@@ -408,7 +416,7 @@ A relational expression is one of the fo
 .br
 .IB expression " in " array-name
 .br
-.BI ( expr , expr,... ") in " array-name
+.BI ( expr ,\| expr ,\| ... ") in " array-name
 .PP
 where a
 .I relop
@@ -508,7 +516,7 @@ separates multiple subscripts (default 0
 Functions may be defined (at the position of a pattern-action statement) thus:
 .IP
 .B
-function foo(a, b, c) { ...; return x }
+function foo(a, b, c) { ... }
 .PP
 Parameters are passed by value if scalar and by reference if array name;
 functions may be called recursively.
@@ -574,8 +582,8 @@ BEGIN       {       # Simulate echo(1)
 .IR sed (1)
 .br
 A. V. Aho, B. W. Kernighan, P. J. Weinberger,
-.IR "The AWK Programming Language" ,
-Addison-Wesley, 1988.  ISBN 0-201-07981-X.
+.IR "The NAWK Programming Language, Second Edition" ,
+Addison-Wesley, 2024.  ISBN 978-0-13-826972-2, 0-13-826972-6.
 .SH BUGS
 There are no explicit conversions between numbers and strings.
 To force an expression to be treated as a number add 0 to it;
@@ -585,7 +593,8 @@ to force it to be treated as a string co
 The scope rules for variables in functions are a botch;
 the syntax is worse.
 .PP
-Only eight-bit characters sets are handled correctly.
+Input is expected to be UTF-8 encoded. Other multibyte
+character sets are not handled.
 .SH UNUSUAL FLOATING-POINT VALUES
 .I Nawk
 was designed before IEEE 754 arithmetic defined Not-A-Number (NaN)
@@ -617,7 +626,7 @@ printing
 instead of zero.
 .PP
 .I Nawk
-now follows GNU AWK, and prefilters string values before attempting
+now follows GNU NAWK, and prefilters string values before attempting
 to convert them to numbers, as follows:
 .TP
 .I "Hexadecimal values"
Index: pkgsrc/lang/nawk/files/parse.c
diff -u pkgsrc/lang/nawk/files/parse.c:1.2 pkgsrc/lang/nawk/files/parse.c:1.3
--- pkgsrc/lang/nawk/files/parse.c:1.2  Fri Feb 24 20:57:50 2023
+++ pkgsrc/lang/nawk/files/parse.c      Tue Sep 12 19:16:52 2023
@@ -29,7 +29,7 @@ THIS SOFTWARE.
 #include "awk.h"
 #include "awkgram.tab.h"
 
-Node *nodealloc(int n)
+Node *nodealloc(size_t n)
 {
        Node *x;
 



Home | Main Index | Thread Index | Old Index