[Scummvm-git-logs] scummvm master -> 57f979c705c0e5463821fae0181568f8b14d7e4f

sev- sev at scummvm.org
Thu Dec 5 00:36:07 UTC 2019


This automated email contains information about 2 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
38cd13cdb4 DIRECTOR: LINGO: Simplify 'if' statement parser
57f979c705 DIRECTOR: LINGO: Further simplification of 'if' statements grammar.


Commit: 38cd13cdb492d15f40f6e991f9fda96195e90937
    https://github.com/scummvm/scummvm/commit/38cd13cdb492d15f40f6e991f9fda96195e90937
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2019-12-05T01:35:52+01:00

Commit Message:
DIRECTOR: LINGO: Simplify 'if' statement parser

Changed paths:
    engines/director/lingo/lingo-gr.cpp
    engines/director/lingo/lingo-gr.y


diff --git a/engines/director/lingo/lingo-gr.cpp b/engines/director/lingo/lingo-gr.cpp
index 582d6ff..3b7f90e 100644
--- a/engines/director/lingo/lingo-gr.cpp
+++ b/engines/director/lingo/lingo-gr.cpp
@@ -544,16 +544,16 @@ union yyalloc
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  128
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   1946
+#define YYLAST   1789
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  107
 /* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  43
+#define YYNNTS  41
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  171
+#define YYNRULES  166
 /* YYNRULES -- Number of states.  */
-#define YYNSTATES  388
+#define YYNSTATES  380
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
@@ -610,94 +610,91 @@ static const yytype_uint16 yyprhs[] =
        0,     0,     3,     7,     9,    12,    13,    15,    17,    22,
       27,    32,    37,    42,    47,    52,    57,    63,    69,    71,
       73,    75,    77,    79,    85,    96,   108,   112,   119,   124,
-     127,   129,   132,   134,   141,   143,   150,   157,   164,   174,
-     181,   192,   202,   211,   219,   229,   236,   244,   250,   255,
-     258,   262,   264,   266,   267,   268,   270,   273,   276,   280,
-     282,   284,   286,   288,   290,   292,   294,   296,   298,   301,
-     304,   309,   314,   316,   319,   321,   325,   329,   333,   337,
-     341,   345,   349,   353,   357,   361,   365,   369,   373,   376,
-     380,   384,   388,   392,   395,   398,   402,   406,   411,   416,
-     421,   428,   433,   440,   445,   452,   457,   464,   466,   469,
-     472,   474,   476,   479,   481,   484,   487,   490,   492,   495,
-     498,   500,   503,   508,   513,   520,   525,   528,   532,   534,
-     538,   540,   544,   546,   550,   553,   556,   559,   562,   566,
-     569,   572,   574,   578,   581,   584,   587,   591,   594,   595,
-     599,   600,   609,   612,   613,   622,   631,   638,   641,   642,
-     644,   648,   653,   654,   656,   660,   661,   664,   665,   667,
-     671,   673
+     131,   141,   148,   159,   169,   178,   186,   189,   191,   198,
+     205,   215,   223,   229,   234,   237,   241,   243,   245,   246,
+     247,   249,   252,   255,   259,   261,   263,   265,   267,   269,
+     271,   273,   275,   277,   280,   283,   288,   293,   295,   298,
+     300,   304,   308,   312,   316,   320,   324,   328,   332,   336,
+     340,   344,   348,   352,   355,   359,   363,   367,   371,   374,
+     377,   381,   385,   390,   395,   400,   407,   412,   419,   424,
+     431,   436,   443,   445,   448,   451,   453,   455,   458,   460,
+     463,   466,   469,   471,   474,   477,   479,   482,   487,   492,
+     499,   504,   507,   511,   513,   517,   519,   523,   525,   529,
+     532,   535,   538,   541,   545,   548,   551,   553,   557,   560,
+     563,   566,   570,   573,   574,   578,   579,   588,   591,   592,
+     601,   610,   617,   620,   621,   623,   627,   632,   633,   635,
+     639,   640,   643,   644,   646,   650,   652
 };
 
 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
 static const yytype_int16 yyrhs[] =
 {
      108,     0,    -1,   108,    99,   109,    -1,   109,    -1,     1,
-      99,    -1,    -1,   140,    -1,   112,    -1,    51,   129,    44,
-      30,    -1,    51,   129,    44,   130,    -1,    51,   129,    77,
-     129,    -1,    51,   129,    78,   129,    -1,    53,    30,    71,
-     129,    -1,    53,    15,    71,   129,    -1,    53,    30,    56,
-     129,    -1,    53,    15,    56,   129,    -1,    53,    16,   129,
-      56,   129,    -1,    53,    16,   128,    71,   129,    -1,   147,
-      -1,   129,    -1,   131,    -1,   111,    -1,   117,    -1,   119,
-     129,   125,   124,    34,    -1,   120,    71,   129,   124,    56,
-     129,   124,   125,   124,    34,    -1,   120,    71,   129,   124,
-      36,    56,   129,   124,   125,   124,    34,    -1,   126,   111,
-     124,    -1,   127,   129,    99,   125,   124,    34,    -1,   127,
-     129,    56,   129,    -1,   113,   116,    -1,   116,    -1,   114,
-     115,    -1,   115,    -1,   122,   129,    54,   123,   112,   124,
-      -1,   114,    -1,   122,   129,    54,   123,   125,   124,    -1,
-     122,   129,    55,   123,   125,   124,    -1,   121,   129,    55,
-     125,   124,    34,    -1,   121,   129,    54,   123,   111,   124,
-      37,   111,   124,    -1,   121,   129,    54,   123,   111,   124,
-      -1,   121,   129,    54,   123,   111,   124,   113,   124,   118,
-     124,    -1,   121,   129,    55,   125,   124,   113,   124,   118,
-     124,    -1,   121,   129,    54,   123,   111,   124,   118,   124,
-      -1,   121,   129,    55,   125,   124,   118,   124,    -1,   122,
-     129,    54,   123,   111,   124,    37,   111,   124,    -1,   122,
-     129,    54,   123,   111,   124,    -1,   122,   129,    55,   123,
-     125,   124,    34,    -1,    60,   123,   125,   124,    34,    -1,
-      60,   123,   111,   124,    -1,    52,    59,    -1,    52,    58,
-      30,    -1,    43,    -1,    38,    -1,    -1,    -1,   123,    -1,
-     125,    99,    -1,   125,   112,    -1,    57,    30,    54,    -1,
-      89,    -1,    12,    -1,    17,    -1,    33,    -1,    31,    -1,
-      30,    -1,   128,    -1,   130,    -1,    25,    -1,    26,   129,
-      -1,    27,   149,    -1,    27,   100,   149,   101,    -1,    30,
-     100,   148,   101,    -1,    15,    -1,    16,   129,    -1,   110,
-      -1,   129,    94,   129,    -1,   129,    95,   129,    -1,   129,
-      96,   129,    -1,   129,    97,   129,    -1,   129,    76,   129,
-      -1,   129,   102,   129,    -1,   129,   103,   129,    -1,   129,
-      71,   129,    -1,   129,    72,   129,    -1,   129,    67,   129,
-      -1,   129,    68,   129,    -1,   129,    73,   129,    -1,   129,
-      74,   129,    -1,    75,   129,    -1,   129,    93,   129,    -1,
-     129,    79,   129,    -1,   129,    80,   129,    -1,   129,    81,
-     129,    -1,    94,   129,    -1,    95,   129,    -1,   100,   129,
-     101,    -1,   104,   148,   105,    -1,    86,   129,    87,   129,
-      -1,    86,   129,    88,   129,    -1,    82,   129,    49,   129,
-      -1,    82,   129,    56,   129,    49,   129,    -1,    83,   129,
-      49,   129,    -1,    83,   129,    56,   129,    49,   129,    -1,
-      84,   129,    49,   129,    -1,    84,   129,    56,   129,    49,
-     129,    -1,    85,   129,    49,   129,    -1,    85,   129,    56,
-     129,    49,   129,    -1,    92,    -1,    29,   129,    -1,    51,
-     129,    -1,   135,    -1,   138,    -1,    39,    52,    -1,    39,
-      -1,    41,   132,    -1,    90,   133,    -1,    66,   134,    -1,
-      19,    -1,    21,   129,    -1,    20,   129,    -1,    20,    -1,
-      22,   149,    -1,    22,   100,   149,   101,    -1,    92,   100,
-      30,   101,    -1,    92,   100,    30,   106,   148,   101,    -1,
-      63,   129,    58,   129,    -1,    63,   129,    -1,    23,    30,
-     148,    -1,    30,    -1,   132,   106,    30,    -1,    30,    -1,
-     133,   106,    30,    -1,    30,    -1,   134,   106,    30,    -1,
-      42,    45,    -1,    42,    48,    -1,    42,    50,    -1,    42,
-     136,    -1,    42,   136,   137,    -1,    42,   137,    -1,    40,
-     129,    -1,   129,    -1,    49,    47,   129,    -1,    47,   129,
-      -1,    64,    65,    -1,    64,   136,    -1,    64,   136,   137,
-      -1,    64,   137,    -1,    -1,    35,   139,   148,    -1,    -1,
-      46,    30,   141,   123,   144,    99,   146,   125,    -1,    61,
-      30,    -1,    -1,    62,    30,   142,   123,   144,    99,   146,
-     125,    -1,   143,   123,   144,    99,   146,   125,    34,   145,
-      -1,   143,   123,   144,    99,   146,   125,    -1,    91,    30,
-      -1,    -1,    30,    -1,   144,   106,    30,    -1,   144,    99,
-     106,    30,    -1,    -1,    30,    -1,   145,   106,    30,    -1,
-      -1,    30,   149,    -1,    -1,   129,    -1,   148,   106,   129,
-      -1,   129,    -1,   149,   106,   129,    -1
+      99,    -1,    -1,   138,    -1,   112,    -1,    51,   127,    44,
+      30,    -1,    51,   127,    44,   128,    -1,    51,   127,    77,
+     127,    -1,    51,   127,    78,   127,    -1,    53,    30,    71,
+     127,    -1,    53,    15,    71,   127,    -1,    53,    30,    56,
+     127,    -1,    53,    15,    56,   127,    -1,    53,    16,   127,
+      56,   127,    -1,    53,    16,   126,    71,   127,    -1,   145,
+      -1,   127,    -1,   129,    -1,   111,    -1,   113,    -1,   117,
+     127,   123,   122,    34,    -1,   118,    71,   127,   122,    56,
+     127,   122,   123,   122,    34,    -1,   118,    71,   127,   122,
+      36,    56,   127,   122,   123,   122,    34,    -1,   124,   111,
+     122,    -1,   125,   127,    99,   123,   122,    34,    -1,   125,
+     127,    56,   127,    -1,   119,   127,    55,   123,   122,    34,
+      -1,   119,   127,    54,   121,   111,   122,    37,   111,   122,
+      -1,   119,   127,    54,   121,   111,   122,    -1,   119,   127,
+      54,   121,   111,   122,   114,   122,   116,   122,    -1,   119,
+     127,    55,   123,   122,   114,   122,   116,   122,    -1,   119,
+     127,    54,   121,   111,   122,   116,   122,    -1,   119,   127,
+      55,   123,   122,   116,   122,    -1,   114,   115,    -1,   115,
+      -1,   120,   127,    54,   121,   111,   122,    -1,   120,   127,
+      55,   121,   123,   122,    -1,   120,   127,    54,   121,   111,
+     122,    37,   111,   122,    -1,   120,   127,    55,   121,   123,
+     122,    34,    -1,    60,   121,   123,   122,    34,    -1,    60,
+     121,   111,   122,    -1,    52,    59,    -1,    52,    58,    30,
+      -1,    43,    -1,    38,    -1,    -1,    -1,   121,    -1,   123,
+      99,    -1,   123,   112,    -1,    57,    30,    54,    -1,    89,
+      -1,    12,    -1,    17,    -1,    33,    -1,    31,    -1,    30,
+      -1,   126,    -1,   128,    -1,    25,    -1,    26,   127,    -1,
+      27,   147,    -1,    27,   100,   147,   101,    -1,    30,   100,
+     146,   101,    -1,    15,    -1,    16,   127,    -1,   110,    -1,
+     127,    94,   127,    -1,   127,    95,   127,    -1,   127,    96,
+     127,    -1,   127,    97,   127,    -1,   127,    76,   127,    -1,
+     127,   102,   127,    -1,   127,   103,   127,    -1,   127,    71,
+     127,    -1,   127,    72,   127,    -1,   127,    67,   127,    -1,
+     127,    68,   127,    -1,   127,    73,   127,    -1,   127,    74,
+     127,    -1,    75,   127,    -1,   127,    93,   127,    -1,   127,
+      79,   127,    -1,   127,    80,   127,    -1,   127,    81,   127,
+      -1,    94,   127,    -1,    95,   127,    -1,   100,   127,   101,
+      -1,   104,   146,   105,    -1,    86,   127,    87,   127,    -1,
+      86,   127,    88,   127,    -1,    82,   127,    49,   127,    -1,
+      82,   127,    56,   127,    49,   127,    -1,    83,   127,    49,
+     127,    -1,    83,   127,    56,   127,    49,   127,    -1,    84,
+     127,    49,   127,    -1,    84,   127,    56,   127,    49,   127,
+      -1,    85,   127,    49,   127,    -1,    85,   127,    56,   127,
+      49,   127,    -1,    92,    -1,    29,   127,    -1,    51,   127,
+      -1,   133,    -1,   136,    -1,    39,    52,    -1,    39,    -1,
+      41,   130,    -1,    90,   131,    -1,    66,   132,    -1,    19,
+      -1,    21,   127,    -1,    20,   127,    -1,    20,    -1,    22,
+     147,    -1,    22,   100,   147,   101,    -1,    92,   100,    30,
+     101,    -1,    92,   100,    30,   106,   146,   101,    -1,    63,
+     127,    58,   127,    -1,    63,   127,    -1,    23,    30,   146,
+      -1,    30,    -1,   130,   106,    30,    -1,    30,    -1,   131,
+     106,    30,    -1,    30,    -1,   132,   106,    30,    -1,    42,
+      45,    -1,    42,    48,    -1,    42,    50,    -1,    42,   134,
+      -1,    42,   134,   135,    -1,    42,   135,    -1,    40,   127,
+      -1,   127,    -1,    49,    47,   127,    -1,    47,   127,    -1,
+      64,    65,    -1,    64,   134,    -1,    64,   134,   135,    -1,
+      64,   135,    -1,    -1,    35,   137,   146,    -1,    -1,    46,
+      30,   139,   121,   142,    99,   144,   123,    -1,    61,    30,
+      -1,    -1,    62,    30,   140,   121,   142,    99,   144,   123,
+      -1,   141,   121,   142,    99,   144,   123,    34,   143,    -1,
+     141,   121,   142,    99,   144,   123,    -1,    91,    30,    -1,
+      -1,    30,    -1,   142,   106,    30,    -1,   142,    99,   106,
+      30,    -1,    -1,    30,    -1,   143,   106,    30,    -1,    -1,
+      30,   147,    -1,    -1,   127,    -1,   146,   106,   127,    -1,
+     127,    -1,   147,   106,   127,    -1
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
@@ -706,21 +703,20 @@ static const yytype_uint16 yyrline[] =
        0,   120,   120,   121,   122,   125,   126,   127,   130,   136,
      139,   140,   141,   147,   154,   160,   167,   173,   181,   182,
      183,   186,   187,   192,   205,   223,   237,   242,   245,   250,
-     251,   254,   255,   258,   266,   267,   273,   281,   291,   302,
-     312,   322,   332,   342,   356,   362,   368,   376,   380,   384,
-     387,   394,   401,   409,   412,   415,   416,   417,   420,   426,
-     430,   433,   436,   439,   442,   448,   449,   450,   453,   456,
-     457,   458,   461,   469,   475,   476,   477,   478,   479,   480,
-     481,   482,   483,   484,   485,   486,   487,   488,   489,   490,
-     491,   492,   493,   494,   495,   496,   497,   498,   499,   500,
-     501,   502,   503,   504,   505,   506,   507,   508,   511,   516,
-     517,   518,   519,   520,   521,   522,   523,   524,   527,   530,
-     533,   537,   538,   539,   540,   541,   542,   543,   546,   547,
-     550,   551,   554,   555,   566,   567,   568,   569,   573,   577,
-     583,   584,   587,   588,   591,   592,   596,   600,   604,   604,
-     634,   634,   639,   640,   640,   645,   652,   658,   660,   661,
-     662,   663,   666,   667,   668,   671,   675,   683,   684,   685,
-     688,   689
+     260,   271,   281,   291,   301,   311,   324,   325,   328,   334,
+     342,   348,   356,   360,   364,   367,   374,   381,   389,   392,
+     395,   396,   397,   400,   406,   410,   413,   416,   419,   422,
+     428,   429,   430,   433,   436,   437,   438,   441,   449,   455,
+     456,   457,   458,   459,   460,   461,   462,   463,   464,   465,
+     466,   467,   468,   469,   470,   471,   472,   473,   474,   475,
+     476,   477,   478,   479,   480,   481,   482,   483,   484,   485,
+     486,   487,   488,   491,   496,   497,   498,   499,   500,   501,
+     502,   503,   504,   507,   510,   513,   517,   518,   519,   520,
+     521,   522,   523,   526,   527,   530,   531,   534,   535,   546,
+     547,   548,   549,   553,   557,   563,   564,   567,   568,   571,
+     572,   576,   580,   584,   584,   614,   614,   619,   620,   620,
+     625,   632,   638,   640,   641,   642,   643,   646,   647,   648,
+     651,   655,   663,   664,   665,   668,   669
 };
 #endif
 
@@ -745,13 +741,13 @@ static const char *const yytname[] =
   "tLINE", "tWORD", "tSPRITE", "tINTERSECTS", "tWITHIN", "tTELL",
   "tPROPERTY", "tON", "tME", "'&'", "'+'", "'-'", "'*'", "'/'", "'%'",
   "'\\n'", "'('", "')'", "'>'", "'<'", "'['", "']'", "','", "$accept",
-  "program", "programline", "asgn", "stmtoneliner", "stmt", "elseifstmt",
-  "elseifstmtoneliner", "elseifstmtoneliner1", "elseifstmt1", "ifstmt",
-  "endifstmt", "repeatwhile", "repeatwith", "if", "elseif", "begin", "end",
-  "stmtlist", "when", "tell", "simpleexpr", "expr", "reference", "proc",
-  "globallist", "propertylist", "instancelist", "gotofunc", "gotoframe",
-  "gotomovie", "playfunc", "@1", "defn", "@2", "@3", "on", "argdef",
-  "endargdef", "argstore", "macro", "arglist", "nonemptyarglist", 0
+  "program", "programline", "asgn", "stmtoneliner", "stmt", "ifstmt",
+  "elseifstmtlist", "elseifstmt", "endifstmt", "repeatwhile", "repeatwith",
+  "if", "elseif", "begin", "end", "stmtlist", "when", "tell", "simpleexpr",
+  "expr", "reference", "proc", "globallist", "propertylist",
+  "instancelist", "gotofunc", "gotoframe", "gotomovie", "playfunc", "@1",
+  "defn", "@2", "@3", "on", "argdef", "endargdef", "argstore", "macro",
+  "arglist", "nonemptyarglist", 0
 };
 #endif
 
@@ -780,21 +776,20 @@ static const yytype_uint8 yyr1[] =
        0,   107,   108,   108,   108,   109,   109,   109,   110,   110,
      110,   110,   110,   110,   110,   110,   110,   110,   111,   111,
      111,   112,   112,   112,   112,   112,   112,   112,   112,   113,
-     113,   114,   114,   115,   116,   116,   116,   117,   117,   117,
-     117,   117,   117,   117,   118,   118,   118,   118,   118,   119,
-     120,   121,   122,   123,   124,   125,   125,   125,   126,   127,
-     128,   128,   128,   128,   128,   129,   129,   129,   129,   129,
+     113,   113,   113,   113,   113,   113,   114,   114,   115,   115,
+     116,   116,   116,   116,   117,   118,   119,   120,   121,   122,
+     123,   123,   123,   124,   125,   126,   126,   126,   126,   126,
+     127,   127,   127,   127,   127,   127,   127,   127,   127,   127,
+     127,   127,   127,   127,   127,   127,   127,   127,   127,   127,
+     127,   127,   127,   127,   127,   127,   127,   127,   127,   127,
+     127,   127,   127,   127,   127,   127,   127,   127,   127,   127,
+     127,   127,   127,   128,   129,   129,   129,   129,   129,   129,
      129,   129,   129,   129,   129,   129,   129,   129,   129,   129,
-     129,   129,   129,   129,   129,   129,   129,   129,   129,   129,
-     129,   129,   129,   129,   129,   129,   129,   129,   129,   129,
-     129,   129,   129,   129,   129,   129,   129,   129,   130,   131,
-     131,   131,   131,   131,   131,   131,   131,   131,   131,   131,
-     131,   131,   131,   131,   131,   131,   131,   131,   132,   132,
-     133,   133,   134,   134,   135,   135,   135,   135,   135,   135,
-     136,   136,   137,   137,   138,   138,   138,   138,   139,   138,
-     141,   140,   140,   142,   140,   140,   140,   143,   144,   144,
-     144,   144,   145,   145,   145,   146,   147,   148,   148,   148,
-     149,   149
+     129,   129,   129,   130,   130,   131,   131,   132,   132,   133,
+     133,   133,   133,   133,   133,   134,   134,   135,   135,   136,
+     136,   136,   136,   137,   136,   139,   138,   138,   140,   138,
+     138,   138,   141,   142,   142,   142,   142,   143,   143,   143,
+     144,   145,   146,   146,   146,   147,   147
 };
 
 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
@@ -802,22 +797,21 @@ static const yytype_uint8 yyr2[] =
 {
        0,     2,     3,     1,     2,     0,     1,     1,     4,     4,
        4,     4,     4,     4,     4,     4,     5,     5,     1,     1,
-       1,     1,     1,     5,    10,    11,     3,     6,     4,     2,
-       1,     2,     1,     6,     1,     6,     6,     6,     9,     6,
-      10,     9,     8,     7,     9,     6,     7,     5,     4,     2,
-       3,     1,     1,     0,     0,     1,     2,     2,     3,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     2,     2,
-       4,     4,     1,     2,     1,     3,     3,     3,     3,     3,
-       3,     3,     3,     3,     3,     3,     3,     3,     2,     3,
-       3,     3,     3,     2,     2,     3,     3,     4,     4,     4,
-       6,     4,     6,     4,     6,     4,     6,     1,     2,     2,
-       1,     1,     2,     1,     2,     2,     2,     1,     2,     2,
-       1,     2,     4,     4,     6,     4,     2,     3,     1,     3,
-       1,     3,     1,     3,     2,     2,     2,     2,     3,     2,
-       2,     1,     3,     2,     2,     2,     3,     2,     0,     3,
-       0,     8,     2,     0,     8,     8,     6,     2,     0,     1,
-       3,     4,     0,     1,     3,     0,     2,     0,     1,     3,
-       1,     3
+       1,     1,     1,     5,    10,    11,     3,     6,     4,     6,
+       9,     6,    10,     9,     8,     7,     2,     1,     6,     6,
+       9,     7,     5,     4,     2,     3,     1,     1,     0,     0,
+       1,     2,     2,     3,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     2,     2,     4,     4,     1,     2,     1,
+       3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
+       3,     3,     3,     2,     3,     3,     3,     3,     2,     2,
+       3,     3,     4,     4,     4,     6,     4,     6,     4,     6,
+       4,     6,     1,     2,     2,     1,     1,     2,     1,     2,
+       2,     2,     1,     2,     2,     1,     2,     4,     4,     6,
+       4,     2,     3,     1,     3,     1,     3,     1,     3,     2,
+       2,     2,     2,     3,     2,     2,     1,     3,     2,     2,
+       2,     3,     2,     0,     3,     0,     8,     2,     0,     8,
+       8,     6,     2,     0,     1,     3,     4,     0,     1,     3,
+       0,     2,     0,     1,     3,     1,     3
 };
 
 /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
@@ -825,458 +819,421 @@ static const yytype_uint8 yyr2[] =
    means the default is an error.  */
 static const yytype_uint8 yydefact[] =
 {
-       0,     0,    60,    72,     0,    61,   117,   120,     0,     0,
-       0,    67,     0,     0,     0,    64,    63,    62,   148,   113,
-       0,     0,    51,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    59,
-       0,     0,   107,     0,     0,     0,   167,     0,     3,    74,
-      21,     7,    22,     0,     0,     0,     0,     0,    65,    19,
-      66,    20,   110,   111,     6,    53,    18,     4,    64,     0,
-     107,    73,   119,   118,     0,   170,   121,   167,    68,     0,
-      69,   108,   167,   166,   167,   112,   128,   114,     0,   134,
-       0,   135,     0,   136,   141,   137,   139,   150,   109,     0,
-      49,     0,     0,     0,     0,   152,   153,   126,   144,   145,
-     147,   132,   116,    88,     0,     0,     0,     0,     0,   130,
-     115,   157,     0,    93,    94,     0,   168,     0,     1,     5,
-      53,     0,     0,    54,     0,     0,     0,     0,     0,     0,
+       0,     0,    55,    67,     0,    56,   112,   115,     0,     0,
+       0,    62,     0,     0,     0,    59,    58,    57,   143,   108,
+       0,     0,    46,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    54,
+       0,     0,   102,     0,     0,     0,   162,     0,     3,    69,
+      21,     7,    22,     0,     0,     0,     0,     0,    60,    19,
+      61,    20,   105,   106,     6,    48,    18,     4,    59,     0,
+     102,    68,   114,   113,     0,   165,   116,   162,    63,     0,
+      64,   103,   162,   161,   162,   107,   123,   109,     0,   129,
+       0,   130,     0,   131,   136,   132,   134,   145,   104,     0,
+      44,     0,     0,     0,     0,   147,   148,   121,   139,   140,
+     142,   127,   111,    83,     0,     0,     0,     0,     0,   125,
+     110,   152,     0,    88,    89,     0,   163,     0,     1,     5,
+      48,     0,     0,    49,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   158,   167,     0,   170,     0,     0,   127,     0,
-     168,     0,   149,     0,   140,   143,     0,   138,    53,     0,
-       0,     0,    50,     0,     0,    65,     0,     0,     0,    58,
-      53,     0,   146,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    95,    96,     0,     2,
-      55,    54,    54,    53,    53,    26,     0,    53,    84,    85,
-      82,    83,    86,    87,    79,    90,    91,    92,    89,    75,
-      76,    77,    78,    80,    81,   159,     0,   122,   171,    70,
-      71,   129,   142,   158,     8,     9,    10,    11,    15,    13,
-       0,     0,    14,    12,   158,   125,   133,    99,     0,   101,
-       0,   103,     0,   105,     0,    97,    98,   131,   123,   167,
-     169,    56,    57,     0,     0,     0,    54,    28,    54,   165,
+       0,     0,   153,   162,     0,   165,     0,     0,   122,     0,
+     163,     0,   144,     0,   135,   138,     0,   133,    48,     0,
+       0,     0,    45,     0,     0,    60,     0,     0,     0,    53,
+      48,     0,   141,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    90,    91,     0,     2,
+      50,    49,    49,    48,    48,    26,     0,    48,    79,    80,
+      77,    78,    81,    82,    74,    85,    86,    87,    84,    70,
+      71,    72,    73,    75,    76,   154,     0,   117,   166,    65,
+      66,   124,   137,   153,     8,     9,    10,    11,    15,    13,
+       0,     0,    14,    12,   153,   120,   128,    94,     0,    96,
+       0,    98,     0,   100,     0,    92,    93,   126,   118,   162,
+     164,    51,    52,     0,     0,     0,    49,    28,    49,   160,
        0,     0,    17,    16,     0,     0,     0,     0,     0,     0,
-      23,     0,     0,    54,     0,     0,     0,    53,   160,   165,
-     165,   100,   102,   104,   106,   124,     0,    54,    39,    37,
-      52,    53,    54,    34,    32,    30,    54,     0,    27,   161,
-     156,    53,    53,    54,    53,     0,    54,    54,    53,    29,
-       0,     0,    31,     0,    43,     0,   162,   151,   154,    53,
-      54,    54,     0,    42,    54,    54,     0,    54,     0,     0,
-      53,    53,   163,   155,    54,     0,    38,    54,    48,     0,
-      53,    53,    41,     0,    53,    53,    53,     0,     0,    24,
-      40,    47,    53,    53,    53,    53,     0,    54,    54,    54,
-      54,   164,    25,    54,     0,    53,    45,    33,    35,    36,
-      36,    54,    54,     0,    46,     0,    54,    44
+      23,     0,     0,    49,     0,     0,     0,    48,   155,   160,
+     160,    95,    97,    99,   101,   119,     0,    49,    31,    29,
+      47,    48,    49,    37,    49,     0,    27,   156,   151,    48,
+      48,    49,    48,     0,    49,    49,    48,    36,     0,     0,
+      35,     0,   157,   146,   149,    48,    49,    49,     0,    34,
+      49,    49,     0,    49,     0,    48,    48,   158,   150,    49,
+       0,    30,    49,    43,     0,    48,    48,    33,     0,     0,
+      48,     0,     0,    24,    32,    42,     0,    48,    48,    48,
+      49,    49,   159,    25,    49,    49,     0,    48,    38,    39,
+      38,    39,    49,    49,     0,    41,     0,     0,    49,    40
 };
 
 /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-      -1,    47,    48,    49,    50,   262,   302,   303,   304,   305,
-      52,   306,    53,    54,    55,   307,   200,   376,   369,    56,
-      57,    58,    59,    60,    61,    87,   120,   112,    62,    95,
-      96,    63,    84,    64,   168,   180,    65,   226,   343,   287,
-      66,   161,    76
+      -1,    47,    48,    49,    50,   262,    52,   302,   303,   304,
+      53,    54,    55,   305,   200,   205,   201,    56,    57,    58,
+      59,    60,    61,    87,   120,   112,    62,    95,    96,    63,
+      84,    64,   168,   180,    65,   226,   338,   287,    66,   161,
+      76
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -288
+#define YYPACT_NINF -284
 static const yytype_int16 yypact[] =
 {
-     418,   -80,  -288,  -288,  1050,  -288,  -288,  1050,  1050,  1090,
-      23,  -288,  1050,  1171,  1050,  1211,  -288,  -288,  -288,   -29,
-      35,   929,  -288,    82,  1050,    97,    92,   101,   119,   121,
-    1050,   969,   132,  1050,  1050,  1050,  1050,  1050,  1050,  -288,
-     136,   139,    72,  1050,  1050,  1050,  1050,     2,  -288,  -288,
-    -288,  -288,  -288,  1050,   106,  1050,   848,  1050,  -288,  1810,
-    -288,  -288,  -288,  -288,  -288,  -288,  -288,  -288,    91,  1050,
-    -288,  1810,  1810,  1810,  1050,  1810,    86,  1050,  1810,  1050,
-      86,  1810,  1050,    86,  1050,  -288,  -288,    87,  1050,  -288,
-    1050,  -288,   150,  -288,  1810,    76,  -288,  -288,  1245,   168,
-    -288,    -8,  1050,    59,   145,  -288,  -288,  1707,  -288,    76,
-    -288,  -288,    94,    -9,  1278,  1311,  1344,  1377,  1740,  -288,
-      95,  -288,   172,    -9,    -9,  1773,  1810,    54,  -288,   504,
-    1810,  1050,  1509,  -288,  1674,  1050,  1050,  1050,  1050,  1050,
-    1050,  1050,  1050,  1050,  1050,  1050,  1050,  1050,  1050,  1050,
-    1050,  1050,   174,  1050,  1245,  1773,   -84,  1050,    99,   -45,
-    1773,   -42,    99,   176,  1810,  1810,  1050,  -288,  -288,   135,
-    1050,  1050,  -288,  1050,  1050,   138,   824,  1050,  1050,  -288,
-    -288,  1050,  -288,   177,  1050,  1050,  1050,  1050,  1050,  1050,
-    1050,  1050,  1050,  1050,   178,    51,  -288,  -288,  1050,  -288,
-    -288,   676,  1810,  -288,  -288,  -288,  1050,  -288,   137,   137,
-     137,   137,  1843,  1843,    -9,  1810,   137,   137,   204,   -19,
-     -19,    -9,    -9,  1810,  1810,  -288,   -17,  -288,  1810,  -288,
-    -288,  -288,  1810,   174,  -288,  -288,  1810,  1810,  1810,   137,
-    1050,  1050,  1810,   137,   174,  1810,  -288,  1810,    24,  1810,
-    1410,  1810,  1443,  1810,  1476,  1810,  1810,  -288,  -288,  1050,
-    1810,  -288,  -288,   180,    13,   848,   676,  1810,   676,   104,
-     181,     7,   137,  1810,    10,  1050,  1050,  1050,  1050,    52,
-    -288,   159,  1050,  -288,   -14,   183,   192,  -288,  -288,   104,
-     104,  1810,  1810,  1810,  1810,  -288,  1050,  1810,    30,  -288,
-    -288,  -288,   185,   185,  -288,  -288,  -288,  1050,  -288,  -288,
-     590,  -288,  -288,  1810,  -288,   848,   185,  -288,   848,  -288,
-    1050,    50,  -288,  1050,  -288,  1542,   194,   676,   676,  -288,
-     676,  -288,    50,  -288,  -288,   676,  1575,  -288,  1050,  1641,
-    -288,  -288,  -288,   120,   676,   193,  -288,  -288,  -288,   195,
-    -288,  -288,  -288,  1608,  -288,   762,  -288,   198,   201,  -288,
-    -288,  -288,   762,  -288,  -288,  -288,   762,    64,  -288,   676,
-     676,  -288,  -288,   676,   848,  -288,   205,  -288,  -288,   207,
-    -288,  -288,   676,   848,  -288,   207,  -288,  -288
+     380,   -76,  -284,  -284,   926,  -284,  -284,   926,   926,   966,
+      57,  -284,   926,  1047,   926,  1087,  -284,  -284,  -284,    29,
+      65,   805,  -284,    67,   926,    43,    44,    69,    77,    84,
+     926,   845,    93,   926,   926,   926,   926,   926,   926,  -284,
+      95,   118,    54,   926,   926,   926,   926,     7,  -284,  -284,
+    -284,  -284,  -284,   926,    85,   926,   724,   926,  -284,  1653,
+    -284,  -284,  -284,  -284,  -284,  -284,  -284,  -284,    60,   926,
+    -284,  1653,  1653,  1653,   926,  1653,    58,   926,  1653,   926,
+      58,  1653,   926,    58,   926,  -284,  -284,    59,   926,  -284,
+     926,  -284,   114,  -284,  1653,   -25,  -284,  -284,  1121,   133,
+    -284,    -2,   926,     8,   117,  -284,  -284,  1550,  -284,   -25,
+    -284,  -284,    66,   -36,   149,  1154,  1187,  1220,  1583,  -284,
+      70,  -284,   145,   -36,   -36,  1616,  1653,    -1,  -284,   466,
+    1653,   926,  1385,  -284,  1517,   926,   926,   926,   926,   926,
+     926,   926,   926,   926,   926,   926,   926,   926,   926,   926,
+     926,   926,   148,   926,  1121,  1616,   -87,   926,    73,   -49,
+    1616,    23,    73,   162,  1653,  1653,   926,  -284,  -284,    92,
+     926,   926,  -284,   926,   926,   124,   700,   926,   926,  -284,
+    -284,   926,  -284,   166,   926,   926,   926,   926,   926,   926,
+     926,   926,   926,   926,   169,    49,  -284,  -284,   926,  -284,
+    -284,   638,  1653,  -284,  -284,  -284,   926,  -284,    15,    15,
+      15,    15,  1686,  1686,   -36,  1653,    15,    15,   262,   -41,
+     -41,   -36,   -36,  1653,  1653,  -284,    -3,  -284,  1653,  -284,
+    -284,  -284,  1653,   148,  -284,  -284,  1653,  1653,  1653,    15,
+     926,   926,  1653,    15,   148,  1653,  -284,  1653,  1253,  1653,
+    1286,  1653,  1319,  1653,  1352,  1653,  1653,  -284,  -284,   926,
+    1653,  -284,  -284,   167,    12,   724,   638,  1653,   638,    94,
+     173,    14,    15,  1653,    20,   926,   926,   926,   926,    51,
+    -284,   151,   926,  -284,   -13,   170,   178,  -284,  -284,    94,
+      94,  1653,  1653,  1653,  1653,  -284,   926,  1653,    55,  -284,
+    -284,  -284,   171,  -284,  -284,   926,  -284,  -284,   552,  -284,
+    -284,  1653,  -284,   724,   171,  -284,   724,  -284,   926,   -10,
+    -284,  1418,   180,   638,   638,  -284,   638,  -284,   -10,  -284,
+    -284,   638,  1451,  -284,   926,  -284,  -284,  -284,   106,   638,
+     179,  -284,  -284,  -284,   184,  -284,  -284,  -284,  1484,   724,
+    -284,   194,   192,  -284,  -284,  -284,   724,  -284,  -284,  -284,
+    -284,   638,  -284,  -284,  -284,   638,   724,  -284,   190,   198,
+    -284,  -284,  -284,   638,   724,  -284,   190,   198,  -284,  -284
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -288,  -288,   114,  -288,   -53,     0,   -52,  -288,   -56,  -287,
-    -288,  -285,  -288,  -288,  -288,  -277,    -7,    43,   -93,  -288,
-    -288,   146,    -3,    80,  -288,  -288,  -288,  -288,  -288,   219,
-     -23,  -288,  -288,  -288,  -288,  -288,  -288,  -182,  -288,  -110,
-    -288,   -39,     1
+    -284,  -284,   104,  -284,   -54,     1,  -284,   -64,  -231,  -283,
+    -284,  -284,  -284,  -256,   -52,    13,  -119,  -284,  -284,   137,
+      -4,    71,  -284,  -284,  -284,  -284,  -284,   204,   -19,  -284,
+    -284,  -284,  -284,  -284,  -284,  -144,  -284,  -131,  -284,   -40,
+       3
 };
 
 /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
    positive, shift that token.  If negative, reduce the rule which
    number is the opposite.  If zero, do what YYDEFACT says.
    If YYTABLE_NINF, syntax error.  */
-#define YYTABLE_NINF -22
+#define YYTABLE_NINF -6
 static const yytype_int16 yytable[] =
 {
-      51,    71,   128,   133,    72,    73,    75,   127,   110,    78,
-      75,    81,    75,   317,    80,   319,    83,   227,    94,    67,
-     299,    98,   157,    85,   300,   320,   323,   107,    94,   319,
-     113,   114,   115,   116,   117,   118,   337,   201,   158,   320,
-     123,   124,   125,   126,   338,   162,   301,   347,   173,   281,
-     130,   271,   132,    77,   134,   338,   229,   141,   152,   230,
-     142,   157,   274,   174,   198,    86,   154,   315,   300,   282,
-     142,   155,   167,   275,   126,   156,   155,   148,   149,   160,
-     159,   126,   269,   150,   151,   164,   182,   165,   300,   270,
-     301,   135,   136,   150,   151,   137,   138,   139,   140,   176,
-     141,   129,   -21,   142,   143,   144,   289,   101,   102,   290,
-     301,   266,    97,   270,   268,   177,   270,   145,   146,   147,
-     148,   149,   103,    90,   -21,    92,   150,   151,   202,    51,
-     178,   104,   208,   209,   210,   211,   212,   213,   214,   215,
-     216,   217,   218,   219,   220,   221,   222,   223,   224,   105,
-     126,   106,   258,   295,   228,    99,   100,   259,   198,   197,
-     198,   233,   111,   232,    14,   234,   119,   236,   237,   121,
-     238,   239,   122,   244,   242,   243,   205,   131,   245,   311,
-     312,   247,   248,   249,   250,   251,   252,   253,   254,   255,
-     256,   153,   157,   163,   310,   260,   265,   166,   172,   179,
-     183,   194,   195,   267,   225,   198,   231,   246,   257,   240,
-     286,   288,   283,   141,   280,   296,   142,   308,   327,   328,
-     279,   330,   309,   300,   342,   335,   357,   359,   371,   361,
-     145,   146,   147,   148,   149,   372,   344,   272,   273,   150,
-     151,   384,   383,   199,   263,   264,   316,   322,   175,   235,
-     109,     0,     0,     0,     0,     0,   126,     0,     0,     0,
-       0,     0,   331,   370,     0,   334,     0,     0,     0,     0,
-     373,     0,   291,   292,   293,   294,     0,     0,     0,   297,
-     141,     0,   382,   142,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   313,   318,     0,     0,     0,   146,   147,
-     148,   149,   367,     0,   325,     0,   150,   151,     0,   284,
-       0,   285,     0,     0,     0,     0,     0,   336,     0,     0,
-     339,   381,     0,     0,     0,     0,   298,     0,     0,     0,
-     386,     0,     0,   355,   356,   353,     0,     0,     0,     0,
-     314,     0,     0,   362,   363,   321,     0,   366,     0,   324,
-       0,     0,     0,     0,     0,   368,   329,   374,   375,   332,
-     333,     0,   368,     0,     0,     0,   368,     0,     0,     0,
-       0,     0,     0,   345,   346,     0,     0,   348,   349,     0,
-     352,     0,     0,     0,     0,     0,     0,   358,     0,     0,
-     360,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   377,   378,   379,     0,     0,   380,     0,    -5,     1,
-       0,     0,     0,     0,     0,   385,     0,     0,     0,   387,
-       2,     0,     0,     3,     4,     5,     0,     6,     7,     8,
-       9,    10,     0,    11,    12,    13,     0,    14,    15,    16,
-       0,    17,     0,    18,     0,     0,     0,    19,     0,    20,
-      21,    22,     0,     0,    23,     0,     0,     0,     0,    24,
-      25,    26,     0,     0,     0,    27,     0,     0,     0,    28,
-      29,    30,    31,     0,    32,     0,     0,     0,     0,     0,
-       0,     0,     0,    33,     0,     0,     0,     0,     0,     0,
-      34,    35,    36,    37,    38,     0,     0,    39,    40,    41,
-      42,     0,    43,    44,     0,     0,     2,    -5,    45,     3,
-       4,     5,    46,     6,     7,     8,     9,    10,     0,    11,
-      12,    13,     0,    14,    15,    16,     0,    17,     0,    18,
-       0,     0,     0,    19,     0,    20,    21,    22,     0,     0,
-      23,     0,     0,     0,     0,    24,    25,    26,     0,     0,
-       0,    27,     0,     0,     0,    28,    29,    30,    31,     0,
-      32,     0,     0,     0,     0,     0,     0,     0,     0,    33,
-       0,     0,     0,     0,     0,     0,    34,    35,    36,    37,
-      38,     0,     0,    39,    40,    41,    42,     0,    43,    44,
-       0,     0,     2,     0,    45,     3,     4,     5,    46,     6,
+      71,    51,   133,    72,    73,    75,   127,   128,    78,    75,
+      81,    75,   110,   152,   227,   315,    80,    94,    83,   157,
+      98,   299,    90,    67,    92,   300,   107,    94,   300,   113,
+     114,   115,   116,   117,   118,   141,   333,   158,   142,   123,
+     124,   125,   126,   142,   162,   342,   318,   301,   281,   130,
+     301,   132,   229,   134,   173,   148,   149,   157,   318,   101,
+     102,   150,   151,   334,   177,   154,   150,   151,   282,   174,
+     155,   317,   334,   126,   103,   155,   167,   156,   160,   178,
+     126,    85,   159,   317,   164,   266,   165,    77,   268,   271,
+     182,   141,   313,   300,   142,    86,   269,    97,   176,   104,
+     274,    99,   100,   270,   197,   198,   129,   105,   145,   146,
+     147,   148,   149,   289,   106,   301,   233,   150,   151,   290,
+     270,    14,   234,   111,   230,   119,   270,   202,   244,   198,
+      51,   208,   209,   210,   211,   212,   213,   214,   215,   216,
+     217,   218,   219,   220,   221,   222,   223,   224,   121,   126,
+     258,   265,   295,   228,   122,   259,   131,   198,   309,   310,
+     153,   166,   232,   172,   157,   163,   236,   237,   308,   238,
+     239,   179,   183,   242,   243,   195,   194,   245,   225,   198,
+     247,   248,   249,   250,   251,   252,   253,   254,   255,   256,
+     323,   324,   231,   326,   260,   240,   246,   331,   184,   257,
+     286,   280,   267,   288,   306,   185,   339,   296,   307,   300,
+     337,   283,   351,   353,   263,   264,   135,   136,   355,   279,
+     137,   138,   139,   140,   362,   141,   363,   374,   142,   143,
+     144,   361,   375,   199,   314,   109,   272,   273,   365,   175,
+     235,     0,   145,   146,   147,   148,   149,     0,   373,   316,
+       0,   150,   151,     0,     0,   126,     0,     0,     0,   327,
+       0,     0,   330,     0,     0,     0,     0,     0,     0,     0,
+       0,   291,   292,   293,   294,     0,     0,     0,   297,   284,
+       0,   285,     0,   349,   350,     0,     0,     0,     0,     0,
+       0,     0,   311,   356,   357,   360,   298,     0,     0,     0,
+       0,   321,   364,     0,     0,     0,   366,   367,     0,     0,
+     312,     0,   372,     0,   332,   319,     0,   320,     0,     0,
+     378,     0,     0,     0,   325,     0,     0,   328,   329,     0,
+     348,     0,     0,     0,     0,     0,     0,     0,   141,   340,
+     341,   142,     0,   343,   344,     0,   347,     0,     0,     0,
+       0,     0,   352,     0,     0,   354,   146,   147,   148,   149,
+       0,     0,     0,     0,   150,   151,     0,     0,     0,     0,
+       0,     0,     0,   368,   369,     0,     0,   370,   371,     0,
+      -5,     1,     0,     0,     0,   376,   377,     0,     0,     0,
+       0,   379,     2,     0,     0,     3,     4,     5,     0,     6,
        7,     8,     9,    10,     0,    11,    12,    13,     0,    14,
-      15,    16,     0,    17,   326,    18,     0,     0,     0,    19,
-       0,    20,    21,    22,     0,     0,     0,     0,     0,     0,
+      15,    16,     0,    17,     0,    18,     0,     0,     0,    19,
+       0,    20,    21,    22,     0,     0,    23,     0,     0,     0,
        0,    24,    25,    26,     0,     0,     0,    27,     0,     0,
-       0,     0,     0,    30,    31,     0,    32,     0,     0,     0,
+       0,    28,    29,    30,    31,     0,    32,     0,     0,     0,
        0,     0,     0,     0,     0,    33,     0,     0,     0,     0,
        0,     0,    34,    35,    36,    37,    38,     0,     0,    39,
-      40,     0,    42,     0,    43,    44,     0,     0,     2,   261,
+      40,    41,    42,     0,    43,    44,     0,     0,     2,    -5,
       45,     3,     4,     5,    46,     6,     7,     8,     9,    10,
        0,    11,    12,    13,     0,    14,    15,    16,     0,    17,
        0,    18,     0,     0,     0,    19,     0,    20,    21,    22,
-       0,     0,     0,     0,     0,     0,     0,    24,    25,    26,
-       0,     0,     0,    27,     0,     0,     0,     0,     0,    30,
+       0,     0,    23,     0,     0,     0,     0,    24,    25,    26,
+       0,     0,     0,    27,     0,     0,     0,    28,    29,    30,
       31,     0,    32,     0,     0,     0,     0,     0,     0,     0,
        0,    33,     0,     0,     0,     0,     0,     0,    34,    35,
-      36,    37,    38,     0,     0,    39,    40,     0,    42,     0,
-      43,    44,     0,     0,     2,   261,    45,     3,     4,     5,
+      36,    37,    38,     0,     0,    39,    40,    41,    42,     0,
+      43,    44,     0,     0,     2,     0,    45,     3,     4,     5,
       46,     6,     7,     8,     9,    10,     0,    11,    12,    13,
-       0,    14,    15,    16,     0,    17,     0,    18,     0,     0,
+       0,    14,    15,    16,     0,    17,   322,    18,     0,     0,
        0,    19,     0,    20,    21,    22,     0,     0,     0,     0,
        0,     0,     0,    24,    25,    26,     0,     0,     0,    27,
        0,     0,     0,     0,     0,    30,    31,     0,    32,     0,
        0,     0,     0,     0,     0,     0,     0,    33,     0,     0,
        0,     0,     0,     0,    34,    35,    36,    37,    38,     0,
        0,    39,    40,     0,    42,     0,    43,    44,     0,     0,
-       2,     0,    45,     3,     4,     5,    46,     6,     7,     8,
+       2,   261,    45,     3,     4,     5,    46,     6,     7,     8,
        9,    10,     0,    11,    12,    13,     0,    14,    15,    16,
-     241,    17,     0,    18,     0,     0,     0,    19,     0,    20,
-      21,   135,   136,     0,     0,   137,   138,   139,   140,    24,
-     141,    26,     0,   142,   143,   144,     0,     0,     0,     0,
-       0,    30,    31,     0,    32,     0,     0,   145,   146,   147,
-     148,   149,     0,    33,     0,     0,   150,   151,     0,     0,
-      34,    35,    36,    37,    38,     0,     0,     0,    40,     0,
-      42,     2,    43,    44,     3,     4,     5,     0,    45,     0,
-       0,     0,    46,     0,    11,    12,    13,     0,    14,    68,
-      16,     0,    17,     0,     0,     0,     0,     0,     0,    88,
-       0,     0,     0,     0,    89,     0,    90,    91,    92,    93,
-      69,     2,    26,     0,     3,     4,     5,     0,     0,     0,
-       0,     0,     0,     0,    11,    12,    13,     0,    14,    68,
-      16,     0,    17,     0,    33,     0,     0,     0,     0,    88,
-       0,    34,    35,    36,    37,    38,    90,     0,    92,     0,
-      69,    70,    26,    43,    44,     0,     0,     0,     0,    45,
-       0,     0,     0,    46,   108,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    33,     0,     0,     0,     0,     0,
-       0,    34,    35,    36,    37,    38,     0,     0,     0,     0,
-       0,    70,     2,    43,    44,     3,     4,     5,     0,    45,
-       0,     0,     0,    46,     0,    11,    12,    13,     0,    14,
-      68,    16,     0,    17,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    69,     2,    26,     0,     3,     4,     5,     0,     0,
-       0,     0,     0,     0,     0,    11,    12,    13,     0,    14,
-      68,    16,     0,    17,     0,    33,     0,     0,     0,     0,
-       0,     0,    34,    35,    36,    37,    38,     0,     0,     0,
-       0,    69,    70,    26,    43,    44,     0,     0,     0,     0,
-      45,     0,     0,     0,    46,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    33,     0,     0,     0,     0,
-       0,     0,    34,    35,    36,    37,    38,     0,     0,     0,
-       0,     0,    70,     2,    43,    44,     3,     4,     5,     0,
-      74,     0,     0,     0,    46,     0,    11,    12,    13,     0,
-      14,    68,    16,     0,    17,     0,     0,     0,     0,     0,
+       0,    17,     0,    18,     0,     0,     0,    19,     0,    20,
+      21,    22,     0,     0,     0,     0,     0,     0,     0,    24,
+      25,    26,     0,     0,     0,    27,     0,     0,     0,     0,
+       0,    30,    31,     0,    32,     0,     0,     0,     0,     0,
+       0,     0,     0,    33,     0,     0,     0,     0,     0,     0,
+      34,    35,    36,    37,    38,     0,     0,    39,    40,     0,
+      42,     0,    43,    44,     0,     0,     2,   261,    45,     3,
+       4,     5,    46,     6,     7,     8,     9,    10,     0,    11,
+      12,    13,     0,    14,    15,    16,   241,    17,     0,    18,
+       0,     0,     0,    19,     0,    20,    21,   135,   136,     0,
+       0,   137,   138,   139,   140,    24,   141,    26,     0,   142,
+     143,   144,     0,     0,     0,     0,     0,    30,    31,     0,
+      32,     0,     0,   145,   146,   147,   148,   149,     0,    33,
+       0,     0,   150,   151,     0,     0,    34,    35,    36,    37,
+      38,     0,     0,     0,    40,     0,    42,     2,    43,    44,
+       3,     4,     5,     0,    45,     0,     0,     0,    46,     0,
+      11,    12,    13,     0,    14,    68,    16,     0,    17,     0,
+       0,     0,     0,     0,     0,    88,     0,     0,     0,     0,
+      89,     0,    90,    91,    92,    93,    69,     2,    26,     0,
+       3,     4,     5,     0,     0,     0,     0,     0,     0,     0,
+      11,    12,    13,     0,    14,    68,    16,     0,    17,     0,
+      33,     0,     0,     0,     0,    88,     0,    34,    35,    36,
+      37,    38,    90,     0,    92,     0,    69,    70,    26,    43,
+      44,     0,     0,     0,     0,    45,     0,     0,     0,    46,
+     108,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      33,     0,     0,     0,     0,     0,     0,    34,    35,    36,
+      37,    38,     0,     0,     0,     0,     0,    70,     2,    43,
+      44,     3,     4,     5,     0,    45,     0,     0,     0,    46,
+       0,    11,    12,    13,     0,    14,    68,    16,     0,    17,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    69,     2,    26,     0,     3,     4,     5,     0,
-       0,     0,     0,     0,     0,     0,    11,    12,    13,     0,
-      14,    68,    16,     0,    17,     0,    33,     0,     0,     0,
-       0,     0,     0,    34,    35,    36,    37,    38,     0,     0,
-       0,     0,    69,    70,    26,    43,    44,     0,     0,     0,
-       0,    79,     0,     0,     0,    46,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    33,     0,     0,   169,
-       0,     0,     0,    34,    35,    36,    37,    38,     0,     0,
-       0,     0,     0,    70,     0,    43,    44,     0,     0,     0,
-       0,    82,   135,   136,     0,    46,   137,   138,   139,   140,
-       0,   141,   170,   171,   142,   143,   144,   184,     0,     0,
-       0,     0,     0,     0,   185,     0,     0,     0,   145,   146,
-     147,   148,   149,     0,     0,   135,   136,   150,   151,   137,
-     138,   139,   140,     0,   141,     0,     0,   142,   143,   144,
-     186,     0,     0,     0,     0,     0,     0,   187,     0,     0,
-       0,   145,   146,   147,   148,   149,     0,     0,   135,   136,
-     150,   151,   137,   138,   139,   140,     0,   141,     0,     0,
-     142,   143,   144,   188,     0,     0,     0,     0,     0,     0,
-     189,     0,     0,     0,   145,   146,   147,   148,   149,     0,
+       0,     0,     0,     0,     0,     0,     0,    69,     2,    26,
+       0,     3,     4,     5,     0,     0,     0,     0,     0,     0,
+       0,    11,    12,    13,     0,    14,    68,    16,     0,    17,
+       0,    33,     0,     0,     0,     0,     0,     0,    34,    35,
+      36,    37,    38,     0,     0,     0,     0,    69,    70,    26,
+      43,    44,     0,     0,     0,     0,    45,     0,     0,     0,
+      46,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,    33,     0,     0,     0,     0,     0,     0,    34,    35,
+      36,    37,    38,     0,     0,     0,     0,     0,    70,     2,
+      43,    44,     3,     4,     5,     0,    74,     0,     0,     0,
+      46,     0,    11,    12,    13,     0,    14,    68,    16,     0,
+      17,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    69,     2,
+      26,     0,     3,     4,     5,     0,     0,     0,     0,     0,
+       0,     0,    11,    12,    13,     0,    14,    68,    16,     0,
+      17,     0,    33,     0,     0,     0,     0,     0,     0,    34,
+      35,    36,    37,    38,     0,     0,     0,     0,    69,    70,
+      26,    43,    44,     0,     0,     0,     0,    79,     0,     0,
+       0,    46,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    33,     0,     0,   169,     0,     0,     0,    34,
+      35,    36,    37,    38,     0,     0,     0,     0,     0,    70,
+       0,    43,    44,     0,     0,     0,     0,    82,   135,   136,
+       0,    46,   137,   138,   139,   140,     0,   141,   170,   171,
+     142,   143,   144,   186,     0,     0,     0,     0,     0,     0,
+     187,     0,     0,     0,   145,   146,   147,   148,   149,     0,
        0,   135,   136,   150,   151,   137,   138,   139,   140,     0,
-     141,     0,     0,   142,   143,   144,   190,     0,     0,     0,
-       0,     0,     0,   191,     0,     0,     0,   145,   146,   147,
+     141,     0,     0,   142,   143,   144,   188,     0,     0,     0,
+       0,     0,     0,   189,     0,     0,     0,   145,   146,   147,
      148,   149,     0,     0,   135,   136,   150,   151,   137,   138,
-     139,   140,     0,   141,     0,     0,   142,   143,   144,   276,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     139,   140,     0,   141,     0,     0,   142,   143,   144,   190,
+       0,     0,     0,     0,     0,     0,   191,     0,     0,     0,
      145,   146,   147,   148,   149,     0,     0,   135,   136,   150,
      151,   137,   138,   139,   140,     0,   141,     0,     0,   142,
-     143,   144,   277,     0,     0,     0,     0,     0,     0,     0,
+     143,   144,   275,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,   145,   146,   147,   148,   149,     0,     0,
      135,   136,   150,   151,   137,   138,   139,   140,     0,   141,
-       0,     0,   142,   143,   144,   278,     0,     0,     0,     0,
+       0,     0,   142,   143,   144,   276,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,   145,   146,   147,   148,
      149,     0,     0,   135,   136,   150,   151,   137,   138,   139,
-     140,     0,   141,     0,     0,   142,   143,   144,     0,     0,
-       0,     0,     0,   203,   204,     0,     0,     0,     0,   145,
+     140,     0,   141,     0,     0,   142,   143,   144,   277,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   145,
      146,   147,   148,   149,     0,     0,   135,   136,   150,   151,
      137,   138,   139,   140,     0,   141,     0,     0,   142,   143,
-     144,     0,     0,     0,     0,     0,   340,   341,     0,     0,
+     144,   278,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,   145,   146,   147,   148,   149,     0,     0,   135,
      136,   150,   151,   137,   138,   139,   140,     0,   141,     0,
-       0,   142,   143,   144,     0,     0,     0,     0,     0,   350,
-     351,     0,     0,     0,     0,   145,   146,   147,   148,   149,
+       0,   142,   143,   144,     0,     0,     0,     0,     0,   203,
+     204,     0,     0,     0,     0,   145,   146,   147,   148,   149,
        0,     0,   135,   136,   150,   151,   137,   138,   139,   140,
        0,   141,     0,     0,   142,   143,   144,     0,     0,     0,
-       0,     0,   364,   365,     0,     0,     0,     0,   145,   146,
+       0,     0,   335,   336,     0,     0,     0,     0,   145,   146,
      147,   148,   149,     0,     0,   135,   136,   150,   151,   137,
      138,   139,   140,     0,   141,     0,     0,   142,   143,   144,
-       0,     0,     0,     0,     0,   354,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   345,   346,     0,     0,     0,
        0,   145,   146,   147,   148,   149,     0,     0,   135,   136,
      150,   151,   137,   138,   139,   140,     0,   141,     0,     0,
-     142,   143,   144,     0,     0,     0,     0,     0,     0,     0,
-     206,     0,     0,     0,   145,   146,   147,   148,   149,     0,
+     142,   143,   144,     0,     0,     0,     0,     0,   358,   359,
+       0,     0,     0,     0,   145,   146,   147,   148,   149,     0,
        0,   135,   136,   150,   151,   137,   138,   139,   140,     0,
      141,     0,     0,   142,   143,   144,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   181,     0,   145,   146,   147,
-     148,   149,     0,   207,   135,   136,   150,   151,   137,   138,
+       0,     0,     0,   206,     0,     0,     0,   145,   146,   147,
+     148,   149,     0,     0,   135,   136,   150,   151,   137,   138,
      139,   140,     0,   141,     0,     0,   142,   143,   144,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     145,   146,   147,   148,   149,     0,     0,   135,   136,   150,
+       0,     0,     0,     0,     0,     0,     0,     0,   181,     0,
+     145,   146,   147,   148,   149,     0,   207,   135,   136,   150,
      151,   137,   138,   139,   140,     0,   141,     0,     0,   142,
-     143,   144,     0,     0,     0,     0,     0,   192,   193,     0,
+     143,   144,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,   145,   146,   147,   148,   149,     0,     0,
      135,   136,   150,   151,   137,   138,   139,   140,     0,   141,
        0,     0,   142,   143,   144,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   145,   146,   147,   148,
-     149,     0,     0,     0,   196,   150,   151,   135,   136,     0,
-       0,   137,   138,   139,   140,     0,   141,     0,     0,   142,
-     143,   144,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   145,   146,   147,   148,   149,     0,     0,
-     135,   136,   150,   151,   137,   138,     0,     0,     0,   141,
+     192,   193,     0,     0,     0,     0,   145,   146,   147,   148,
+     149,     0,     0,   135,   136,   150,   151,   137,   138,   139,
+     140,     0,   141,     0,     0,   142,   143,   144,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   145,
+     146,   147,   148,   149,     0,     0,     0,   196,   150,   151,
+     135,   136,     0,     0,   137,   138,   139,   140,     0,   141,
        0,     0,   142,   143,   144,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,   145,   146,   147,   148,
-     149,     0,     0,     0,     0,   150,   151
+     149,     0,     0,   135,   136,   150,   151,   137,   138,     0,
+       0,     0,   141,     0,     0,   142,   143,   144,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   145,
+     146,   147,   148,   149,     0,     0,     0,     0,   150,   151
 };
 
 static const yytype_int16 yycheck[] =
 {
-       0,     4,     0,    56,     7,     8,     9,    46,    31,    12,
-      13,    14,    15,   298,    13,   302,    15,   101,    21,    99,
-      34,    24,   106,    52,    38,   302,   303,    30,    31,   316,
-      33,    34,    35,    36,    37,    38,   321,   130,    77,   316,
-      43,    44,    45,    46,   321,    84,    60,   332,    56,    36,
-      53,   233,    55,    30,    57,   332,   101,    76,    65,   101,
-      79,   106,   244,    71,   106,    30,    69,    37,    38,    56,
-      79,    74,    95,    49,    77,    74,    79,    96,    97,    82,
-      79,    84,    99,   102,   103,    88,   109,    90,    38,   106,
-      60,    67,    68,   102,   103,    71,    72,    73,    74,   102,
-      76,    99,    38,    79,    80,    81,    99,    15,    16,    99,
-      60,   204,    30,   106,   207,    56,   106,    93,    94,    95,
-      96,    97,    30,    47,    60,    49,   102,   103,   131,   129,
-      71,    30,   135,   136,   137,   138,   139,   140,   141,   142,
-     143,   144,   145,   146,   147,   148,   149,   150,   151,    30,
-     153,    30,   101,   101,   157,    58,    59,   106,   106,   105,
-     106,   168,    30,   166,    29,    30,    30,   170,   171,    30,
-     173,   174,   100,   180,   177,   178,   133,    71,   181,   289,
-     290,   184,   185,   186,   187,   188,   189,   190,   191,   192,
-     193,   100,   106,   106,   287,   198,   203,    47,    30,    54,
-     106,   106,    30,   206,    30,   106,    30,    30,    30,    71,
-     106,    30,   265,    76,    34,    56,    79,    34,   311,   312,
-     259,   314,    30,    38,    30,   318,   106,    34,    30,    34,
-      93,    94,    95,    96,    97,    34,   329,   240,   241,   102,
-     103,    34,    37,   129,   201,   202,   298,   303,   102,   169,
-      31,    -1,    -1,    -1,    -1,    -1,   259,    -1,    -1,    -1,
-      -1,    -1,   315,   356,    -1,   318,    -1,    -1,    -1,    -1,
-     363,    -1,   275,   276,   277,   278,    -1,    -1,    -1,   282,
-      76,    -1,   375,    79,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   296,   301,    -1,    -1,    -1,    94,    95,
-      96,    97,   355,    -1,   307,    -1,   102,   103,    -1,   266,
-      -1,   268,    -1,    -1,    -1,    -1,    -1,   320,    -1,    -1,
-     323,   374,    -1,    -1,    -1,    -1,   283,    -1,    -1,    -1,
-     383,    -1,    -1,   340,   341,   338,    -1,    -1,    -1,    -1,
-     297,    -1,    -1,   350,   351,   302,    -1,   354,    -1,   306,
-      -1,    -1,    -1,    -1,    -1,   355,   313,   364,   365,   316,
-     317,    -1,   362,    -1,    -1,    -1,   366,    -1,    -1,    -1,
-      -1,    -1,    -1,   330,   331,    -1,    -1,   334,   335,    -1,
-     337,    -1,    -1,    -1,    -1,    -1,    -1,   344,    -1,    -1,
-     347,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   368,   369,   370,    -1,    -1,   373,    -1,     0,     1,
-      -1,    -1,    -1,    -1,    -1,   382,    -1,    -1,    -1,   386,
-      12,    -1,    -1,    15,    16,    17,    -1,    19,    20,    21,
-      22,    23,    -1,    25,    26,    27,    -1,    29,    30,    31,
-      -1,    33,    -1,    35,    -1,    -1,    -1,    39,    -1,    41,
-      42,    43,    -1,    -1,    46,    -1,    -1,    -1,    -1,    51,
-      52,    53,    -1,    -1,    -1,    57,    -1,    -1,    -1,    61,
-      62,    63,    64,    -1,    66,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    75,    -1,    -1,    -1,    -1,    -1,    -1,
-      82,    83,    84,    85,    86,    -1,    -1,    89,    90,    91,
-      92,    -1,    94,    95,    -1,    -1,    12,    99,   100,    15,
-      16,    17,   104,    19,    20,    21,    22,    23,    -1,    25,
-      26,    27,    -1,    29,    30,    31,    -1,    33,    -1,    35,
-      -1,    -1,    -1,    39,    -1,    41,    42,    43,    -1,    -1,
-      46,    -1,    -1,    -1,    -1,    51,    52,    53,    -1,    -1,
-      -1,    57,    -1,    -1,    -1,    61,    62,    63,    64,    -1,
-      66,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    75,
-      -1,    -1,    -1,    -1,    -1,    -1,    82,    83,    84,    85,
-      86,    -1,    -1,    89,    90,    91,    92,    -1,    94,    95,
-      -1,    -1,    12,    -1,   100,    15,    16,    17,   104,    19,
+       4,     0,    56,     7,     8,     9,    46,     0,    12,    13,
+      14,    15,    31,    65,   101,   298,    13,    21,    15,   106,
+      24,    34,    47,    99,    49,    38,    30,    31,    38,    33,
+      34,    35,    36,    37,    38,    76,   319,    77,    79,    43,
+      44,    45,    46,    79,    84,   328,   302,    60,    36,    53,
+      60,    55,   101,    57,    56,    96,    97,   106,   314,    15,
+      16,   102,   103,   319,    56,    69,   102,   103,    56,    71,
+      74,   302,   328,    77,    30,    79,    95,    74,    82,    71,
+      84,    52,    79,   314,    88,   204,    90,    30,   207,   233,
+     109,    76,    37,    38,    79,    30,    99,    30,   102,    30,
+     244,    58,    59,   106,   105,   106,    99,    30,    93,    94,
+      95,    96,    97,    99,    30,    60,   168,   102,   103,    99,
+     106,    29,    30,    30,   101,    30,   106,   131,   180,   106,
+     129,   135,   136,   137,   138,   139,   140,   141,   142,   143,
+     144,   145,   146,   147,   148,   149,   150,   151,    30,   153,
+     101,   203,   101,   157,   100,   106,    71,   106,   289,   290,
+     100,    47,   166,    30,   106,   106,   170,   171,   287,   173,
+     174,    54,   106,   177,   178,    30,   106,   181,    30,   106,
+     184,   185,   186,   187,   188,   189,   190,   191,   192,   193,
+     309,   310,    30,   312,   198,    71,    30,   316,    49,    30,
+     106,    34,   206,    30,    34,    56,   325,    56,    30,    38,
+      30,   265,   106,    34,   201,   202,    67,    68,    34,   259,
+      71,    72,    73,    74,    30,    76,    34,    37,    79,    80,
+      81,   350,    34,   129,   298,    31,   240,   241,   357,   102,
+     169,    -1,    93,    94,    95,    96,    97,    -1,   367,   301,
+      -1,   102,   103,    -1,    -1,   259,    -1,    -1,    -1,   313,
+      -1,    -1,   316,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   275,   276,   277,   278,    -1,    -1,    -1,   282,   266,
+      -1,   268,    -1,   335,   336,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   296,   345,   346,   349,   283,    -1,    -1,    -1,
+      -1,   305,   356,    -1,    -1,    -1,   358,   359,    -1,    -1,
+     297,    -1,   366,    -1,   318,   302,    -1,   304,    -1,    -1,
+     374,    -1,    -1,    -1,   311,    -1,    -1,   314,   315,    -1,
+     334,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    76,   326,
+     327,    79,    -1,   330,   331,    -1,   333,    -1,    -1,    -1,
+      -1,    -1,   339,    -1,    -1,   342,    94,    95,    96,    97,
+      -1,    -1,    -1,    -1,   102,   103,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   360,   361,    -1,    -1,   364,   365,    -1,
+       0,     1,    -1,    -1,    -1,   372,   373,    -1,    -1,    -1,
+      -1,   378,    12,    -1,    -1,    15,    16,    17,    -1,    19,
       20,    21,    22,    23,    -1,    25,    26,    27,    -1,    29,
-      30,    31,    -1,    33,    34,    35,    -1,    -1,    -1,    39,
-      -1,    41,    42,    43,    -1,    -1,    -1,    -1,    -1,    -1,
+      30,    31,    -1,    33,    -1,    35,    -1,    -1,    -1,    39,
+      -1,    41,    42,    43,    -1,    -1,    46,    -1,    -1,    -1,
       -1,    51,    52,    53,    -1,    -1,    -1,    57,    -1,    -1,
-      -1,    -1,    -1,    63,    64,    -1,    66,    -1,    -1,    -1,
+      -1,    61,    62,    63,    64,    -1,    66,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    75,    -1,    -1,    -1,    -1,
       -1,    -1,    82,    83,    84,    85,    86,    -1,    -1,    89,
-      90,    -1,    92,    -1,    94,    95,    -1,    -1,    12,    99,
+      90,    91,    92,    -1,    94,    95,    -1,    -1,    12,    99,
      100,    15,    16,    17,   104,    19,    20,    21,    22,    23,
       -1,    25,    26,    27,    -1,    29,    30,    31,    -1,    33,
       -1,    35,    -1,    -1,    -1,    39,    -1,    41,    42,    43,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    51,    52,    53,
-      -1,    -1,    -1,    57,    -1,    -1,    -1,    -1,    -1,    63,
+      -1,    -1,    46,    -1,    -1,    -1,    -1,    51,    52,    53,
+      -1,    -1,    -1,    57,    -1,    -1,    -1,    61,    62,    63,
       64,    -1,    66,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    75,    -1,    -1,    -1,    -1,    -1,    -1,    82,    83,
-      84,    85,    86,    -1,    -1,    89,    90,    -1,    92,    -1,
-      94,    95,    -1,    -1,    12,    99,   100,    15,    16,    17,
+      84,    85,    86,    -1,    -1,    89,    90,    91,    92,    -1,
+      94,    95,    -1,    -1,    12,    -1,   100,    15,    16,    17,
      104,    19,    20,    21,    22,    23,    -1,    25,    26,    27,
-      -1,    29,    30,    31,    -1,    33,    -1,    35,    -1,    -1,
+      -1,    29,    30,    31,    -1,    33,    34,    35,    -1,    -1,
       -1,    39,    -1,    41,    42,    43,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    51,    52,    53,    -1,    -1,    -1,    57,
       -1,    -1,    -1,    -1,    -1,    63,    64,    -1,    66,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    75,    -1,    -1,
       -1,    -1,    -1,    -1,    82,    83,    84,    85,    86,    -1,
       -1,    89,    90,    -1,    92,    -1,    94,    95,    -1,    -1,
-      12,    -1,   100,    15,    16,    17,   104,    19,    20,    21,
+      12,    99,   100,    15,    16,    17,   104,    19,    20,    21,
       22,    23,    -1,    25,    26,    27,    -1,    29,    30,    31,
-      56,    33,    -1,    35,    -1,    -1,    -1,    39,    -1,    41,
-      42,    67,    68,    -1,    -1,    71,    72,    73,    74,    51,
-      76,    53,    -1,    79,    80,    81,    -1,    -1,    -1,    -1,
-      -1,    63,    64,    -1,    66,    -1,    -1,    93,    94,    95,
-      96,    97,    -1,    75,    -1,    -1,   102,   103,    -1,    -1,
-      82,    83,    84,    85,    86,    -1,    -1,    -1,    90,    -1,
-      92,    12,    94,    95,    15,    16,    17,    -1,   100,    -1,
-      -1,    -1,   104,    -1,    25,    26,    27,    -1,    29,    30,
-      31,    -1,    33,    -1,    -1,    -1,    -1,    -1,    -1,    40,
-      -1,    -1,    -1,    -1,    45,    -1,    47,    48,    49,    50,
-      51,    12,    53,    -1,    15,    16,    17,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    25,    26,    27,    -1,    29,    30,
-      31,    -1,    33,    -1,    75,    -1,    -1,    -1,    -1,    40,
-      -1,    82,    83,    84,    85,    86,    47,    -1,    49,    -1,
-      51,    92,    53,    94,    95,    -1,    -1,    -1,    -1,   100,
-      -1,    -1,    -1,   104,    65,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    75,    -1,    -1,    -1,    -1,    -1,
-      -1,    82,    83,    84,    85,    86,    -1,    -1,    -1,    -1,
-      -1,    92,    12,    94,    95,    15,    16,    17,    -1,   100,
-      -1,    -1,    -1,   104,    -1,    25,    26,    27,    -1,    29,
-      30,    31,    -1,    33,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    51,    12,    53,    -1,    15,    16,    17,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    25,    26,    27,    -1,    29,
-      30,    31,    -1,    33,    -1,    75,    -1,    -1,    -1,    -1,
-      -1,    -1,    82,    83,    84,    85,    86,    -1,    -1,    -1,
-      -1,    51,    92,    53,    94,    95,    -1,    -1,    -1,    -1,
-     100,    -1,    -1,    -1,   104,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    75,    -1,    -1,    -1,    -1,
-      -1,    -1,    82,    83,    84,    85,    86,    -1,    -1,    -1,
-      -1,    -1,    92,    12,    94,    95,    15,    16,    17,    -1,
-     100,    -1,    -1,    -1,   104,    -1,    25,    26,    27,    -1,
-      29,    30,    31,    -1,    33,    -1,    -1,    -1,    -1,    -1,
+      -1,    33,    -1,    35,    -1,    -1,    -1,    39,    -1,    41,
+      42,    43,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    51,
+      52,    53,    -1,    -1,    -1,    57,    -1,    -1,    -1,    -1,
+      -1,    63,    64,    -1,    66,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    75,    -1,    -1,    -1,    -1,    -1,    -1,
+      82,    83,    84,    85,    86,    -1,    -1,    89,    90,    -1,
+      92,    -1,    94,    95,    -1,    -1,    12,    99,   100,    15,
+      16,    17,   104,    19,    20,    21,    22,    23,    -1,    25,
+      26,    27,    -1,    29,    30,    31,    56,    33,    -1,    35,
+      -1,    -1,    -1,    39,    -1,    41,    42,    67,    68,    -1,
+      -1,    71,    72,    73,    74,    51,    76,    53,    -1,    79,
+      80,    81,    -1,    -1,    -1,    -1,    -1,    63,    64,    -1,
+      66,    -1,    -1,    93,    94,    95,    96,    97,    -1,    75,
+      -1,    -1,   102,   103,    -1,    -1,    82,    83,    84,    85,
+      86,    -1,    -1,    -1,    90,    -1,    92,    12,    94,    95,
+      15,    16,    17,    -1,   100,    -1,    -1,    -1,   104,    -1,
+      25,    26,    27,    -1,    29,    30,    31,    -1,    33,    -1,
+      -1,    -1,    -1,    -1,    -1,    40,    -1,    -1,    -1,    -1,
+      45,    -1,    47,    48,    49,    50,    51,    12,    53,    -1,
+      15,    16,    17,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      25,    26,    27,    -1,    29,    30,    31,    -1,    33,    -1,
+      75,    -1,    -1,    -1,    -1,    40,    -1,    82,    83,    84,
+      85,    86,    47,    -1,    49,    -1,    51,    92,    53,    94,
+      95,    -1,    -1,    -1,    -1,   100,    -1,    -1,    -1,   104,
+      65,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      75,    -1,    -1,    -1,    -1,    -1,    -1,    82,    83,    84,
+      85,    86,    -1,    -1,    -1,    -1,    -1,    92,    12,    94,
+      95,    15,    16,    17,    -1,   100,    -1,    -1,    -1,   104,
+      -1,    25,    26,    27,    -1,    29,    30,    31,    -1,    33,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    51,    12,    53,    -1,    15,    16,    17,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    25,    26,    27,    -1,
-      29,    30,    31,    -1,    33,    -1,    75,    -1,    -1,    -1,
-      -1,    -1,    -1,    82,    83,    84,    85,    86,    -1,    -1,
-      -1,    -1,    51,    92,    53,    94,    95,    -1,    -1,    -1,
-      -1,   100,    -1,    -1,    -1,   104,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    75,    -1,    -1,    44,
-      -1,    -1,    -1,    82,    83,    84,    85,    86,    -1,    -1,
-      -1,    -1,    -1,    92,    -1,    94,    95,    -1,    -1,    -1,
-      -1,   100,    67,    68,    -1,   104,    71,    72,    73,    74,
-      -1,    76,    77,    78,    79,    80,    81,    49,    -1,    -1,
-      -1,    -1,    -1,    -1,    56,    -1,    -1,    -1,    93,    94,
-      95,    96,    97,    -1,    -1,    67,    68,   102,   103,    71,
-      72,    73,    74,    -1,    76,    -1,    -1,    79,    80,    81,
-      49,    -1,    -1,    -1,    -1,    -1,    -1,    56,    -1,    -1,
-      -1,    93,    94,    95,    96,    97,    -1,    -1,    67,    68,
-     102,   103,    71,    72,    73,    74,    -1,    76,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    51,    12,    53,
+      -1,    15,    16,    17,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    25,    26,    27,    -1,    29,    30,    31,    -1,    33,
+      -1,    75,    -1,    -1,    -1,    -1,    -1,    -1,    82,    83,
+      84,    85,    86,    -1,    -1,    -1,    -1,    51,    92,    53,
+      94,    95,    -1,    -1,    -1,    -1,   100,    -1,    -1,    -1,
+     104,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    75,    -1,    -1,    -1,    -1,    -1,    -1,    82,    83,
+      84,    85,    86,    -1,    -1,    -1,    -1,    -1,    92,    12,
+      94,    95,    15,    16,    17,    -1,   100,    -1,    -1,    -1,
+     104,    -1,    25,    26,    27,    -1,    29,    30,    31,    -1,
+      33,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    51,    12,
+      53,    -1,    15,    16,    17,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    25,    26,    27,    -1,    29,    30,    31,    -1,
+      33,    -1,    75,    -1,    -1,    -1,    -1,    -1,    -1,    82,
+      83,    84,    85,    86,    -1,    -1,    -1,    -1,    51,    92,
+      53,    94,    95,    -1,    -1,    -1,    -1,   100,    -1,    -1,
+      -1,   104,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    75,    -1,    -1,    44,    -1,    -1,    -1,    82,
+      83,    84,    85,    86,    -1,    -1,    -1,    -1,    -1,    92,
+      -1,    94,    95,    -1,    -1,    -1,    -1,   100,    67,    68,
+      -1,   104,    71,    72,    73,    74,    -1,    76,    77,    78,
       79,    80,    81,    49,    -1,    -1,    -1,    -1,    -1,    -1,
       56,    -1,    -1,    -1,    93,    94,    95,    96,    97,    -1,
       -1,    67,    68,   102,   103,    71,    72,    73,    74,    -1,
@@ -1284,7 +1241,7 @@ static const yytype_int16 yycheck[] =
       -1,    -1,    -1,    56,    -1,    -1,    -1,    93,    94,    95,
       96,    97,    -1,    -1,    67,    68,   102,   103,    71,    72,
       73,    74,    -1,    76,    -1,    -1,    79,    80,    81,    49,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    56,    -1,    -1,    -1,
       93,    94,    95,    96,    97,    -1,    -1,    67,    68,   102,
      103,    71,    72,    73,    74,    -1,    76,    -1,    -1,    79,
       80,    81,    49,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
@@ -1293,11 +1250,11 @@ static const yytype_int16 yycheck[] =
       -1,    -1,    79,    80,    81,    49,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    93,    94,    95,    96,
       97,    -1,    -1,    67,    68,   102,   103,    71,    72,    73,
-      74,    -1,    76,    -1,    -1,    79,    80,    81,    -1,    -1,
-      -1,    -1,    -1,    54,    55,    -1,    -1,    -1,    -1,    93,
+      74,    -1,    76,    -1,    -1,    79,    80,    81,    49,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    93,
       94,    95,    96,    97,    -1,    -1,    67,    68,   102,   103,
       71,    72,    73,    74,    -1,    76,    -1,    -1,    79,    80,
-      81,    -1,    -1,    -1,    -1,    -1,    54,    55,    -1,    -1,
+      81,    49,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    93,    94,    95,    96,    97,    -1,    -1,    67,
       68,   102,   103,    71,    72,    73,    74,    -1,    76,    -1,
       -1,    79,    80,    81,    -1,    -1,    -1,    -1,    -1,    54,
@@ -1307,32 +1264,35 @@ static const yytype_int16 yycheck[] =
       -1,    -1,    54,    55,    -1,    -1,    -1,    -1,    93,    94,
       95,    96,    97,    -1,    -1,    67,    68,   102,   103,    71,
       72,    73,    74,    -1,    76,    -1,    -1,    79,    80,    81,
-      -1,    -1,    -1,    -1,    -1,    54,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    54,    55,    -1,    -1,    -1,
       -1,    93,    94,    95,    96,    97,    -1,    -1,    67,    68,
      102,   103,    71,    72,    73,    74,    -1,    76,    -1,    -1,
-      79,    80,    81,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      56,    -1,    -1,    -1,    93,    94,    95,    96,    97,    -1,
+      79,    80,    81,    -1,    -1,    -1,    -1,    -1,    54,    55,
+      -1,    -1,    -1,    -1,    93,    94,    95,    96,    97,    -1,
       -1,    67,    68,   102,   103,    71,    72,    73,    74,    -1,
       76,    -1,    -1,    79,    80,    81,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    58,    -1,    93,    94,    95,
-      96,    97,    -1,    99,    67,    68,   102,   103,    71,    72,
+      -1,    -1,    -1,    56,    -1,    -1,    -1,    93,    94,    95,
+      96,    97,    -1,    -1,    67,    68,   102,   103,    71,    72,
       73,    74,    -1,    76,    -1,    -1,    79,    80,    81,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      93,    94,    95,    96,    97,    -1,    -1,    67,    68,   102,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    58,    -1,
+      93,    94,    95,    96,    97,    -1,    99,    67,    68,   102,
      103,    71,    72,    73,    74,    -1,    76,    -1,    -1,    79,
-      80,    81,    -1,    -1,    -1,    -1,    -1,    87,    88,    -1,
+      80,    81,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    93,    94,    95,    96,    97,    -1,    -1,
       67,    68,   102,   103,    71,    72,    73,    74,    -1,    76,
       -1,    -1,    79,    80,    81,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    93,    94,    95,    96,
-      97,    -1,    -1,    -1,   101,   102,   103,    67,    68,    -1,
-      -1,    71,    72,    73,    74,    -1,    76,    -1,    -1,    79,
-      80,    81,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    93,    94,    95,    96,    97,    -1,    -1,
-      67,    68,   102,   103,    71,    72,    -1,    -1,    -1,    76,
+      87,    88,    -1,    -1,    -1,    -1,    93,    94,    95,    96,
+      97,    -1,    -1,    67,    68,   102,   103,    71,    72,    73,
+      74,    -1,    76,    -1,    -1,    79,    80,    81,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    93,
+      94,    95,    96,    97,    -1,    -1,    -1,   101,   102,   103,
+      67,    68,    -1,    -1,    71,    72,    73,    74,    -1,    76,
       -1,    -1,    79,    80,    81,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    93,    94,    95,    96,
-      97,    -1,    -1,    -1,    -1,   102,   103
+      97,    -1,    -1,    67,    68,   102,   103,    71,    72,    -1,
+      -1,    -1,    76,    -1,    -1,    79,    80,    81,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    93,
+      94,    95,    96,    97,    -1,    -1,    -1,    -1,   102,   103
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -1344,40 +1304,39 @@ static const yytype_uint8 yystos[] =
       41,    42,    43,    46,    51,    52,    53,    57,    61,    62,
       63,    64,    66,    75,    82,    83,    84,    85,    86,    89,
       90,    91,    92,    94,    95,   100,   104,   108,   109,   110,
-     111,   112,   117,   119,   120,   121,   126,   127,   128,   129,
-     130,   131,   135,   138,   140,   143,   147,    99,    30,    51,
-      92,   129,   129,   129,   100,   129,   149,    30,   129,   100,
-     149,   129,   100,   149,   139,    52,    30,   132,    40,    45,
-      47,    48,    49,    50,   129,   136,   137,    30,   129,    58,
-      59,    15,    16,    30,    30,    30,    30,   129,    65,   136,
-     137,    30,   134,   129,   129,   129,   129,   129,   129,    30,
-     133,    30,   100,   129,   129,   129,   129,   148,     0,    99,
-     129,    71,   129,   111,   129,    67,    68,    71,    72,    73,
+     111,   112,   113,   117,   118,   119,   124,   125,   126,   127,
+     128,   129,   133,   136,   138,   141,   145,    99,    30,    51,
+      92,   127,   127,   127,   100,   127,   147,    30,   127,   100,
+     147,   127,   100,   147,   137,    52,    30,   130,    40,    45,
+      47,    48,    49,    50,   127,   134,   135,    30,   127,    58,
+      59,    15,    16,    30,    30,    30,    30,   127,    65,   134,
+     135,    30,   132,   127,   127,   127,   127,   127,   127,    30,
+     131,    30,   100,   127,   127,   127,   127,   146,     0,    99,
+     127,    71,   127,   111,   127,    67,    68,    71,    72,    73,
       74,    76,    79,    80,    81,    93,    94,    95,    96,    97,
-     102,   103,   123,   100,   129,   129,   149,   106,   148,   149,
-     129,   148,   148,   106,   129,   129,    47,   137,   141,    44,
-      77,    78,    30,    56,    71,   128,   129,    56,    71,    54,
-     142,    58,   137,   106,    49,    56,    49,    56,    49,    56,
+     102,   103,   121,   100,   127,   127,   147,   106,   146,   147,
+     127,   146,   146,   106,   127,   127,    47,   135,   139,    44,
+      77,    78,    30,    56,    71,   126,   127,    56,    71,    54,
+     140,    58,   135,   106,    49,    56,    49,    56,    49,    56,
       49,    56,    87,    88,   106,    30,   101,   105,   106,   109,
-     123,   125,   129,    54,    55,   124,    56,    99,   129,   129,
-     129,   129,   129,   129,   129,   129,   129,   129,   129,   129,
-     129,   129,   129,   129,   129,    30,   144,   101,   129,   101,
-     101,    30,   129,   123,    30,   130,   129,   129,   129,   129,
-      71,    56,   129,   129,   123,   129,    30,   129,   129,   129,
-     129,   129,   129,   129,   129,   129,   129,    30,   101,   106,
-     129,    99,   112,   124,   124,   123,   125,   129,   125,    99,
-     106,   144,   129,   129,   144,    49,    49,    49,    49,   148,
-      34,    36,    56,   111,   124,   124,   106,   146,    30,    99,
-      99,   129,   129,   129,   129,   101,    56,   129,   124,    34,
-      38,    60,   113,   114,   115,   116,   118,   122,    34,    30,
-     125,   146,   146,   129,   124,    37,   113,   118,   123,   116,
-     122,   124,   115,   122,   124,   129,    34,   125,   125,   124,
-     125,   111,   124,   124,   111,   125,   129,   118,   122,   129,
-      54,    55,    30,   145,   125,   124,   124,   118,   124,   124,
-      54,    55,   124,   129,    54,   123,   123,   106,   124,    34,
-     124,    34,   123,   123,    54,    55,   123,   111,   112,   125,
-     125,    30,    34,   125,   123,   123,   124,   124,   124,   124,
-     124,   111,   125,    37,    34,   124,   111,   124
+     121,   123,   127,    54,    55,   122,    56,    99,   127,   127,
+     127,   127,   127,   127,   127,   127,   127,   127,   127,   127,
+     127,   127,   127,   127,   127,    30,   142,   101,   127,   101,
+     101,    30,   127,   121,    30,   128,   127,   127,   127,   127,
+      71,    56,   127,   127,   121,   127,    30,   127,   127,   127,
+     127,   127,   127,   127,   127,   127,   127,    30,   101,   106,
+     127,    99,   112,   122,   122,   121,   123,   127,   123,    99,
+     106,   142,   127,   127,   142,    49,    49,    49,    49,   146,
+      34,    36,    56,   111,   122,   122,   106,   144,    30,    99,
+      99,   127,   127,   127,   127,   101,    56,   127,   122,    34,
+      38,    60,   114,   115,   116,   120,    34,    30,   123,   144,
+     144,   127,   122,    37,   114,   116,   121,   115,   120,   122,
+     122,   127,    34,   123,   123,   122,   123,   111,   122,   122,
+     111,   123,   127,   116,   120,    54,    55,    30,   143,   123,
+     122,   122,   116,   122,   122,    54,    55,   122,   127,   121,
+     121,   106,   122,    34,   122,    34,   121,   121,    54,    55,
+     111,   123,    30,    34,   111,   123,   121,   121,   122,   122,
+     122,   122,   111,   123,    37,    34,   122,   122,   111,   122
 };
 
 #define yyerrok		(yyerrstatus = 0)
@@ -2356,38 +2315,8 @@ yyreduce:
 		;}
     break;
 
-  case 33:
-#line 258 "engines/director/lingo/lingo-gr.y"
-    {
-		inst then = 0;
-		WRITE_UINT32(&then, (yyvsp[(4) - (6)].code) - (yyvsp[(1) - (6)].code));
-		(*g_lingo->_currentScript)[(yyvsp[(1) - (6)].code) + 1] = then;	/* thenpart */
-
-		g_lingo->codeLabel((yyvsp[(1) - (6)].code)); ;}
-    break;
-
-  case 35:
-#line 267 "engines/director/lingo/lingo-gr.y"
-    {
-		inst then = 0;
-		WRITE_UINT32(&then, (yyvsp[(5) - (6)].code) - (yyvsp[(1) - (6)].code));
-		(*g_lingo->_currentScript)[(yyvsp[(1) - (6)].code) + 1] = then;	/* thenpart */
-
-		g_lingo->codeLabel((yyvsp[(1) - (6)].code)); ;}
-    break;
-
-  case 36:
-#line 273 "engines/director/lingo/lingo-gr.y"
-    {
-		inst then = 0;
-		WRITE_UINT32(&then, (yyvsp[(5) - (6)].code) - (yyvsp[(1) - (6)].code));
-		(*g_lingo->_currentScript)[(yyvsp[(1) - (6)].code) + 1] = then;	/* thenpart */
-
-		g_lingo->codeLabel((yyvsp[(1) - (6)].code)); ;}
-    break;
-
-  case 37:
-#line 281 "engines/director/lingo/lingo-gr.y"
+  case 29:
+#line 250 "engines/director/lingo/lingo-gr.y"
     {
 		inst then = 0, end = 0;
 		WRITE_UINT32(&then, (yyvsp[(4) - (6)].code) - (yyvsp[(1) - (6)].code));
@@ -2400,8 +2329,8 @@ yyreduce:
 		g_lingo->processIf(0, 0); ;}
     break;
 
-  case 38:
-#line 291 "engines/director/lingo/lingo-gr.y"
+  case 30:
+#line 260 "engines/director/lingo/lingo-gr.y"
     {
 		inst then = 0, else1 = 0, end = 0;
 		WRITE_UINT32(&then, (yyvsp[(4) - (9)].code) - (yyvsp[(1) - (9)].code));
@@ -2414,8 +2343,8 @@ yyreduce:
 		g_lingo->processIf(0, (yyvsp[(9) - (9)].code) - (yyvsp[(1) - (9)].code)); ;}
     break;
 
-  case 39:
-#line 302 "engines/director/lingo/lingo-gr.y"
+  case 31:
+#line 271 "engines/director/lingo/lingo-gr.y"
     {
 		inst then = 0, else1 = 0, end = 0;
 		WRITE_UINT32(&then, (yyvsp[(4) - (6)].code) - (yyvsp[(1) - (6)].code));
@@ -2428,8 +2357,8 @@ yyreduce:
 		g_lingo->processIf(0, 0); ;}
     break;
 
-  case 40:
-#line 312 "engines/director/lingo/lingo-gr.y"
+  case 32:
+#line 281 "engines/director/lingo/lingo-gr.y"
     {
 		inst then = 0, else1 = 0, end = 0;
 		WRITE_UINT32(&then, (yyvsp[(4) - (10)].code) - (yyvsp[(1) - (10)].code));
@@ -2442,8 +2371,8 @@ yyreduce:
 		g_lingo->processIf(0, (yyvsp[(10) - (10)].code) - (yyvsp[(1) - (10)].code)); ;}
     break;
 
-  case 41:
-#line 322 "engines/director/lingo/lingo-gr.y"
+  case 33:
+#line 291 "engines/director/lingo/lingo-gr.y"
     {
 		inst then = 0, else1 = 0, end = 0;
 		WRITE_UINT32(&then, (yyvsp[(4) - (9)].code) - (yyvsp[(1) - (9)].code));
@@ -2456,8 +2385,8 @@ yyreduce:
 		g_lingo->processIf(0, 0); ;}
     break;
 
-  case 42:
-#line 332 "engines/director/lingo/lingo-gr.y"
+  case 34:
+#line 301 "engines/director/lingo/lingo-gr.y"
     {
 		inst then = 0, else1 = 0, end = 0;
 		WRITE_UINT32(&then, (yyvsp[(4) - (8)].code) - (yyvsp[(1) - (8)].code));
@@ -2470,8 +2399,8 @@ yyreduce:
 		g_lingo->processIf(0, (yyvsp[(8) - (8)].code) - (yyvsp[(1) - (8)].code)); ;}
     break;
 
-  case 43:
-#line 342 "engines/director/lingo/lingo-gr.y"
+  case 35:
+#line 311 "engines/director/lingo/lingo-gr.y"
     {
 		inst then = 0, else1 = 0, end = 0;
 		WRITE_UINT32(&then, (yyvsp[(4) - (7)].code) - (yyvsp[(1) - (7)].code));
@@ -2484,28 +2413,38 @@ yyreduce:
 		g_lingo->processIf(0, 0); ;}
     break;
 
-  case 44:
-#line 356 "engines/director/lingo/lingo-gr.y"
+  case 38:
+#line 328 "engines/director/lingo/lingo-gr.y"
     {
 		inst then = 0;
-		WRITE_UINT32(&then, (yyvsp[(4) - (9)].code) - (yyvsp[(1) - (9)].code));
-		(*g_lingo->_currentScript)[(yyvsp[(1) - (9)].code) + 1] = then;	/* thenpart */
+		WRITE_UINT32(&then, (yyvsp[(4) - (6)].code) - (yyvsp[(1) - (6)].code));
+		(*g_lingo->_currentScript)[(yyvsp[(1) - (6)].code) + 1] = then;	/* thenpart */
 
-		g_lingo->codeLabel((yyvsp[(1) - (9)].code)); ;}
+		g_lingo->codeLabel((yyvsp[(1) - (6)].code)); ;}
     break;
 
-  case 45:
-#line 362 "engines/director/lingo/lingo-gr.y"
+  case 39:
+#line 334 "engines/director/lingo/lingo-gr.y"
     {
 		inst then = 0;
-		WRITE_UINT32(&then, (yyvsp[(4) - (6)].code) - (yyvsp[(1) - (6)].code));
+		WRITE_UINT32(&then, (yyvsp[(5) - (6)].code) - (yyvsp[(1) - (6)].code));
 		(*g_lingo->_currentScript)[(yyvsp[(1) - (6)].code) + 1] = then;	/* thenpart */
 
 		g_lingo->codeLabel((yyvsp[(1) - (6)].code)); ;}
     break;
 
-  case 46:
-#line 368 "engines/director/lingo/lingo-gr.y"
+  case 40:
+#line 342 "engines/director/lingo/lingo-gr.y"
+    {
+		inst then = 0;
+		WRITE_UINT32(&then, (yyvsp[(4) - (9)].code) - (yyvsp[(1) - (9)].code));
+		(*g_lingo->_currentScript)[(yyvsp[(1) - (9)].code) + 1] = then;	/* thenpart */
+
+		g_lingo->codeLabel((yyvsp[(1) - (9)].code)); ;}
+    break;
+
+  case 41:
+#line 348 "engines/director/lingo/lingo-gr.y"
     {
 		inst then = 0;
 		WRITE_UINT32(&then, (yyvsp[(4) - (7)].code) - (yyvsp[(1) - (7)].code));
@@ -2516,27 +2455,27 @@ yyreduce:
 		checkEnd((yyvsp[(7) - (7)].s), "if", true); ;}
     break;
 
-  case 47:
-#line 376 "engines/director/lingo/lingo-gr.y"
+  case 42:
+#line 356 "engines/director/lingo/lingo-gr.y"
     {
 			g_lingo->codeLabel((yyvsp[(2) - (5)].code));
 
 			checkEnd((yyvsp[(5) - (5)].s), "if", true); ;}
     break;
 
-  case 48:
-#line 380 "engines/director/lingo/lingo-gr.y"
+  case 43:
+#line 360 "engines/director/lingo/lingo-gr.y"
     {
 			g_lingo->codeLabel((yyvsp[(2) - (4)].code)); ;}
     break;
 
-  case 49:
-#line 384 "engines/director/lingo/lingo-gr.y"
+  case 44:
+#line 364 "engines/director/lingo/lingo-gr.y"
     { (yyval.code) = g_lingo->code3(g_lingo->c_repeatwhilecode, STOP, STOP); ;}
     break;
 
-  case 50:
-#line 387 "engines/director/lingo/lingo-gr.y"
+  case 45:
+#line 367 "engines/director/lingo/lingo-gr.y"
     {
 		(yyval.code) = g_lingo->code3(g_lingo->c_repeatwithcode, STOP, STOP);
 		g_lingo->code3(STOP, STOP, STOP);
@@ -2544,8 +2483,8 @@ yyreduce:
 		delete (yyvsp[(3) - (3)].s); ;}
     break;
 
-  case 51:
-#line 394 "engines/director/lingo/lingo-gr.y"
+  case 46:
+#line 374 "engines/director/lingo/lingo-gr.y"
     {
 		(yyval.code) = g_lingo->code1(g_lingo->c_ifcode);
 		g_lingo->code3(STOP, STOP, STOP);
@@ -2553,8 +2492,8 @@ yyreduce:
 		g_lingo->codeLabel(0); ;}
     break;
 
-  case 52:
-#line 401 "engines/director/lingo/lingo-gr.y"
+  case 47:
+#line 381 "engines/director/lingo/lingo-gr.y"
     {
 		inst skipEnd;
 		WRITE_UINT32(&skipEnd, 1); // We have to skip end to avoid multiple executions
@@ -2563,23 +2502,23 @@ yyreduce:
 		g_lingo->code1(skipEnd); ;}
     break;
 
-  case 53:
-#line 409 "engines/director/lingo/lingo-gr.y"
+  case 48:
+#line 389 "engines/director/lingo/lingo-gr.y"
     { (yyval.code) = g_lingo->_currentScript->size(); ;}
     break;
 
-  case 54:
-#line 412 "engines/director/lingo/lingo-gr.y"
+  case 49:
+#line 392 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(STOP); (yyval.code) = g_lingo->_currentScript->size(); ;}
     break;
 
-  case 55:
-#line 415 "engines/director/lingo/lingo-gr.y"
+  case 50:
+#line 395 "engines/director/lingo/lingo-gr.y"
     { (yyval.code) = g_lingo->_currentScript->size(); ;}
     break;
 
-  case 58:
-#line 420 "engines/director/lingo/lingo-gr.y"
+  case 53:
+#line 400 "engines/director/lingo/lingo-gr.y"
     {
 		(yyval.code) = g_lingo->code1(g_lingo->c_whencode);
 		g_lingo->code1(STOP);
@@ -2587,87 +2526,87 @@ yyreduce:
 		delete (yyvsp[(2) - (3)].s); ;}
     break;
 
-  case 59:
-#line 426 "engines/director/lingo/lingo-gr.y"
+  case 54:
+#line 406 "engines/director/lingo/lingo-gr.y"
     {
 		(yyval.code) = g_lingo->code1(g_lingo->c_tellcode);
 		g_lingo->code1(STOP); ;}
     break;
 
-  case 60:
-#line 430 "engines/director/lingo/lingo-gr.y"
+  case 55:
+#line 410 "engines/director/lingo/lingo-gr.y"
     {
 		(yyval.code) = g_lingo->code1(g_lingo->c_intpush);
 		g_lingo->codeInt((yyvsp[(1) - (1)].i)); ;}
     break;
 
-  case 61:
-#line 433 "engines/director/lingo/lingo-gr.y"
+  case 56:
+#line 413 "engines/director/lingo/lingo-gr.y"
     {
 		(yyval.code) = g_lingo->code1(g_lingo->c_floatpush);
 		g_lingo->codeFloat((yyvsp[(1) - (1)].f)); ;}
     break;
 
-  case 62:
-#line 436 "engines/director/lingo/lingo-gr.y"
+  case 57:
+#line 416 "engines/director/lingo/lingo-gr.y"
     {											// D3
 		(yyval.code) = g_lingo->code1(g_lingo->c_symbolpush);
 		g_lingo->codeString((yyvsp[(1) - (1)].s)->c_str()); ;}
     break;
 
-  case 63:
-#line 439 "engines/director/lingo/lingo-gr.y"
+  case 58:
+#line 419 "engines/director/lingo/lingo-gr.y"
     {
 		(yyval.code) = g_lingo->code1(g_lingo->c_stringpush);
 		g_lingo->codeString((yyvsp[(1) - (1)].s)->c_str()); ;}
     break;
 
-  case 64:
-#line 442 "engines/director/lingo/lingo-gr.y"
+  case 59:
+#line 422 "engines/director/lingo/lingo-gr.y"
     {
 		(yyval.code) = g_lingo->code1(g_lingo->c_eval);
 		g_lingo->codeString((yyvsp[(1) - (1)].s)->c_str());
 		delete (yyvsp[(1) - (1)].s); ;}
     break;
 
-  case 65:
-#line 448 "engines/director/lingo/lingo-gr.y"
+  case 60:
+#line 428 "engines/director/lingo/lingo-gr.y"
     { (yyval.code) = (yyvsp[(1) - (1)].code); ;}
     break;
 
-  case 67:
-#line 450 "engines/director/lingo/lingo-gr.y"
+  case 62:
+#line 430 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->codeFunc((yyvsp[(1) - (1)].s), 0);
 		delete (yyvsp[(1) - (1)].s); ;}
     break;
 
-  case 68:
-#line 453 "engines/director/lingo/lingo-gr.y"
+  case 63:
+#line 433 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->codeFunc((yyvsp[(1) - (2)].s), 1);
 		delete (yyvsp[(1) - (2)].s); ;}
     break;
 
-  case 69:
-#line 456 "engines/director/lingo/lingo-gr.y"
+  case 64:
+#line 436 "engines/director/lingo/lingo-gr.y"
     { g_lingo->codeFunc((yyvsp[(1) - (2)].s), (yyvsp[(2) - (2)].narg)); ;}
     break;
 
-  case 70:
-#line 457 "engines/director/lingo/lingo-gr.y"
+  case 65:
+#line 437 "engines/director/lingo/lingo-gr.y"
     { g_lingo->codeFunc((yyvsp[(1) - (4)].s), (yyvsp[(3) - (4)].narg)); ;}
     break;
 
-  case 71:
-#line 458 "engines/director/lingo/lingo-gr.y"
+  case 66:
+#line 438 "engines/director/lingo/lingo-gr.y"
     {
 		(yyval.code) = g_lingo->codeFunc((yyvsp[(1) - (4)].s), (yyvsp[(3) - (4)].narg));
 		delete (yyvsp[(1) - (4)].s); ;}
     break;
 
-  case 72:
-#line 461 "engines/director/lingo/lingo-gr.y"
+  case 67:
+#line 441 "engines/director/lingo/lingo-gr.y"
     {
 		(yyval.code) = g_lingo->code1(g_lingo->c_intpush);
 		g_lingo->codeInt(0); // Put dummy id
@@ -2678,8 +2617,8 @@ yyreduce:
 		g_lingo->code2(e, f); ;}
     break;
 
-  case 73:
-#line 469 "engines/director/lingo/lingo-gr.y"
+  case 68:
+#line 449 "engines/director/lingo/lingo-gr.y"
     {
 		(yyval.code) = g_lingo->code1(g_lingo->c_theentitypush);
 		inst e = 0, f = 0;
@@ -2688,400 +2627,400 @@ yyreduce:
 		g_lingo->code2(e, f); ;}
     break;
 
-  case 75:
-#line 476 "engines/director/lingo/lingo-gr.y"
+  case 70:
+#line 456 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_add); ;}
     break;
 
-  case 76:
-#line 477 "engines/director/lingo/lingo-gr.y"
+  case 71:
+#line 457 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_sub); ;}
     break;
 
-  case 77:
-#line 478 "engines/director/lingo/lingo-gr.y"
+  case 72:
+#line 458 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_mul); ;}
     break;
 
-  case 78:
-#line 479 "engines/director/lingo/lingo-gr.y"
+  case 73:
+#line 459 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_div); ;}
     break;
 
-  case 79:
-#line 480 "engines/director/lingo/lingo-gr.y"
+  case 74:
+#line 460 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_mod); ;}
     break;
 
-  case 80:
-#line 481 "engines/director/lingo/lingo-gr.y"
+  case 75:
+#line 461 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_gt); ;}
     break;
 
-  case 81:
-#line 482 "engines/director/lingo/lingo-gr.y"
+  case 76:
+#line 462 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_lt); ;}
     break;
 
-  case 82:
-#line 483 "engines/director/lingo/lingo-gr.y"
+  case 77:
+#line 463 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_eq); ;}
     break;
 
-  case 83:
-#line 484 "engines/director/lingo/lingo-gr.y"
+  case 78:
+#line 464 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_neq); ;}
     break;
 
-  case 84:
-#line 485 "engines/director/lingo/lingo-gr.y"
+  case 79:
+#line 465 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_ge); ;}
     break;
 
-  case 85:
-#line 486 "engines/director/lingo/lingo-gr.y"
+  case 80:
+#line 466 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_le); ;}
     break;
 
-  case 86:
-#line 487 "engines/director/lingo/lingo-gr.y"
+  case 81:
+#line 467 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_and); ;}
     break;
 
-  case 87:
-#line 488 "engines/director/lingo/lingo-gr.y"
+  case 82:
+#line 468 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_or); ;}
     break;
 
-  case 88:
-#line 489 "engines/director/lingo/lingo-gr.y"
+  case 83:
+#line 469 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_not); ;}
     break;
 
-  case 89:
-#line 490 "engines/director/lingo/lingo-gr.y"
+  case 84:
+#line 470 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_ampersand); ;}
     break;
 
-  case 90:
-#line 491 "engines/director/lingo/lingo-gr.y"
+  case 85:
+#line 471 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_concat); ;}
     break;
 
-  case 91:
-#line 492 "engines/director/lingo/lingo-gr.y"
+  case 86:
+#line 472 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_contains); ;}
     break;
 
-  case 92:
-#line 493 "engines/director/lingo/lingo-gr.y"
+  case 87:
+#line 473 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_starts); ;}
     break;
 
-  case 93:
-#line 494 "engines/director/lingo/lingo-gr.y"
+  case 88:
+#line 474 "engines/director/lingo/lingo-gr.y"
     { (yyval.code) = (yyvsp[(2) - (2)].code); ;}
     break;
 
-  case 94:
-#line 495 "engines/director/lingo/lingo-gr.y"
+  case 89:
+#line 475 "engines/director/lingo/lingo-gr.y"
     { (yyval.code) = (yyvsp[(2) - (2)].code); g_lingo->code1(g_lingo->c_negate); ;}
     break;
 
-  case 95:
-#line 496 "engines/director/lingo/lingo-gr.y"
+  case 90:
+#line 476 "engines/director/lingo/lingo-gr.y"
     { (yyval.code) = (yyvsp[(2) - (3)].code); ;}
     break;
 
-  case 96:
-#line 497 "engines/director/lingo/lingo-gr.y"
+  case 91:
+#line 477 "engines/director/lingo/lingo-gr.y"
     { (yyval.code) = g_lingo->code1(g_lingo->c_arraypush); g_lingo->codeArray((yyvsp[(2) - (3)].narg)); ;}
     break;
 
-  case 97:
-#line 498 "engines/director/lingo/lingo-gr.y"
+  case 92:
+#line 478 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_intersects); ;}
     break;
 
-  case 98:
-#line 499 "engines/director/lingo/lingo-gr.y"
+  case 93:
+#line 479 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_within); ;}
     break;
 
-  case 99:
-#line 500 "engines/director/lingo/lingo-gr.y"
+  case 94:
+#line 480 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_charOf); ;}
     break;
 
-  case 100:
-#line 501 "engines/director/lingo/lingo-gr.y"
+  case 95:
+#line 481 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_charToOf); ;}
     break;
 
-  case 101:
-#line 502 "engines/director/lingo/lingo-gr.y"
+  case 96:
+#line 482 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_itemOf); ;}
     break;
 
-  case 102:
-#line 503 "engines/director/lingo/lingo-gr.y"
+  case 97:
+#line 483 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_itemToOf); ;}
     break;
 
-  case 103:
-#line 504 "engines/director/lingo/lingo-gr.y"
+  case 98:
+#line 484 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_lineOf); ;}
     break;
 
-  case 104:
-#line 505 "engines/director/lingo/lingo-gr.y"
+  case 99:
+#line 485 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_lineToOf); ;}
     break;
 
-  case 105:
-#line 506 "engines/director/lingo/lingo-gr.y"
+  case 100:
+#line 486 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_wordOf); ;}
     break;
 
-  case 106:
-#line 507 "engines/director/lingo/lingo-gr.y"
+  case 101:
+#line 487 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_wordToOf); ;}
     break;
 
-  case 107:
-#line 508 "engines/director/lingo/lingo-gr.y"
+  case 102:
+#line 488 "engines/director/lingo/lingo-gr.y"
     { g_lingo->codeMe(nullptr, 0); ;}
     break;
 
-  case 108:
-#line 511 "engines/director/lingo/lingo-gr.y"
+  case 103:
+#line 491 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->codeFunc((yyvsp[(1) - (2)].s), 1);
 		delete (yyvsp[(1) - (2)].s); ;}
     break;
 
-  case 109:
-#line 516 "engines/director/lingo/lingo-gr.y"
+  case 104:
+#line 496 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_printtop); ;}
     break;
 
-  case 112:
-#line 519 "engines/director/lingo/lingo-gr.y"
+  case 107:
+#line 499 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_exitRepeat); ;}
     break;
 
-  case 113:
-#line 520 "engines/director/lingo/lingo-gr.y"
+  case 108:
+#line 500 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_procret); ;}
     break;
 
-  case 117:
-#line 524 "engines/director/lingo/lingo-gr.y"
+  case 112:
+#line 504 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->codeFunc((yyvsp[(1) - (1)].s), 0);
 		delete (yyvsp[(1) - (1)].s); ;}
     break;
 
-  case 118:
-#line 527 "engines/director/lingo/lingo-gr.y"
+  case 113:
+#line 507 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->codeFunc((yyvsp[(1) - (2)].s), 1);
 		delete (yyvsp[(1) - (2)].s); ;}
     break;
 
-  case 119:
-#line 530 "engines/director/lingo/lingo-gr.y"
+  case 114:
+#line 510 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->codeFunc((yyvsp[(1) - (2)].s), 1);
 		delete (yyvsp[(1) - (2)].s); ;}
     break;
 
-  case 120:
-#line 533 "engines/director/lingo/lingo-gr.y"
+  case 115:
+#line 513 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->code1(g_lingo->c_voidpush);
 		g_lingo->codeFunc((yyvsp[(1) - (1)].s), 1);
 		delete (yyvsp[(1) - (1)].s); ;}
     break;
 
-  case 121:
-#line 537 "engines/director/lingo/lingo-gr.y"
+  case 116:
+#line 517 "engines/director/lingo/lingo-gr.y"
     { g_lingo->codeFunc((yyvsp[(1) - (2)].s), (yyvsp[(2) - (2)].narg)); ;}
     break;
 
-  case 122:
-#line 538 "engines/director/lingo/lingo-gr.y"
+  case 117:
+#line 518 "engines/director/lingo/lingo-gr.y"
     { g_lingo->codeFunc((yyvsp[(1) - (4)].s), (yyvsp[(3) - (4)].narg)); ;}
     break;
 
-  case 123:
-#line 539 "engines/director/lingo/lingo-gr.y"
+  case 118:
+#line 519 "engines/director/lingo/lingo-gr.y"
     { g_lingo->codeMe((yyvsp[(3) - (4)].s), 0); ;}
     break;
 
-  case 124:
-#line 540 "engines/director/lingo/lingo-gr.y"
+  case 119:
+#line 520 "engines/director/lingo/lingo-gr.y"
     { g_lingo->codeMe((yyvsp[(3) - (6)].s), (yyvsp[(5) - (6)].narg)); ;}
     break;
 
-  case 125:
-#line 541 "engines/director/lingo/lingo-gr.y"
+  case 120:
+#line 521 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_open); ;}
     break;
 
-  case 126:
-#line 542 "engines/director/lingo/lingo-gr.y"
+  case 121:
+#line 522 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code2(g_lingo->c_voidpush, g_lingo->c_open); ;}
     break;
 
-  case 127:
-#line 543 "engines/director/lingo/lingo-gr.y"
+  case 122:
+#line 523 "engines/director/lingo/lingo-gr.y"
     { Common::String s(*(yyvsp[(1) - (3)].s)); s += '-'; s += *(yyvsp[(2) - (3)].s); g_lingo->codeFunc(&s, (yyvsp[(3) - (3)].narg)); ;}
     break;
 
-  case 128:
-#line 546 "engines/director/lingo/lingo-gr.y"
+  case 123:
+#line 526 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_global); g_lingo->codeString((yyvsp[(1) - (1)].s)->c_str()); delete (yyvsp[(1) - (1)].s); ;}
     break;
 
-  case 129:
-#line 547 "engines/director/lingo/lingo-gr.y"
+  case 124:
+#line 527 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_global); g_lingo->codeString((yyvsp[(3) - (3)].s)->c_str()); delete (yyvsp[(3) - (3)].s); ;}
     break;
 
-  case 130:
-#line 550 "engines/director/lingo/lingo-gr.y"
+  case 125:
+#line 530 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_property); g_lingo->codeString((yyvsp[(1) - (1)].s)->c_str()); delete (yyvsp[(1) - (1)].s); ;}
     break;
 
-  case 131:
-#line 551 "engines/director/lingo/lingo-gr.y"
+  case 126:
+#line 531 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_property); g_lingo->codeString((yyvsp[(3) - (3)].s)->c_str()); delete (yyvsp[(3) - (3)].s); ;}
     break;
 
-  case 132:
-#line 554 "engines/director/lingo/lingo-gr.y"
+  case 127:
+#line 534 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_instance); g_lingo->codeString((yyvsp[(1) - (1)].s)->c_str()); delete (yyvsp[(1) - (1)].s); ;}
     break;
 
-  case 133:
-#line 555 "engines/director/lingo/lingo-gr.y"
+  case 128:
+#line 535 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_instance); g_lingo->codeString((yyvsp[(3) - (3)].s)->c_str()); delete (yyvsp[(3) - (3)].s); ;}
     break;
 
-  case 134:
-#line 566 "engines/director/lingo/lingo-gr.y"
+  case 129:
+#line 546 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_gotoloop); ;}
     break;
 
-  case 135:
-#line 567 "engines/director/lingo/lingo-gr.y"
+  case 130:
+#line 547 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_gotonext); ;}
     break;
 
-  case 136:
-#line 568 "engines/director/lingo/lingo-gr.y"
+  case 131:
+#line 548 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_gotoprevious); ;}
     break;
 
-  case 137:
-#line 569 "engines/director/lingo/lingo-gr.y"
+  case 132:
+#line 549 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->code1(g_lingo->c_intpush);
 		g_lingo->codeInt(1);
 		g_lingo->code1(g_lingo->c_goto); ;}
     break;
 
-  case 138:
-#line 573 "engines/director/lingo/lingo-gr.y"
+  case 133:
+#line 553 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->code1(g_lingo->c_intpush);
 		g_lingo->codeInt(3);
 		g_lingo->code1(g_lingo->c_goto); ;}
     break;
 
-  case 139:
-#line 577 "engines/director/lingo/lingo-gr.y"
+  case 134:
+#line 557 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->code1(g_lingo->c_intpush);
 		g_lingo->codeInt(2);
 		g_lingo->code1(g_lingo->c_goto); ;}
     break;
 
-  case 144:
-#line 591 "engines/director/lingo/lingo-gr.y"
+  case 139:
+#line 571 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_playdone); ;}
     break;
 
-  case 145:
-#line 592 "engines/director/lingo/lingo-gr.y"
+  case 140:
+#line 572 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->code1(g_lingo->c_intpush);
 		g_lingo->codeInt(1);
 		g_lingo->code1(g_lingo->c_play); ;}
     break;
 
-  case 146:
-#line 596 "engines/director/lingo/lingo-gr.y"
+  case 141:
+#line 576 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->code1(g_lingo->c_intpush);
 		g_lingo->codeInt(3);
 		g_lingo->code1(g_lingo->c_play); ;}
     break;
 
-  case 147:
-#line 600 "engines/director/lingo/lingo-gr.y"
+  case 142:
+#line 580 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->code1(g_lingo->c_intpush);
 		g_lingo->codeInt(2);
 		g_lingo->code1(g_lingo->c_play); ;}
     break;
 
-  case 148:
-#line 604 "engines/director/lingo/lingo-gr.y"
+  case 143:
+#line 584 "engines/director/lingo/lingo-gr.y"
     { g_lingo->codeSetImmediate(true); ;}
     break;
 
-  case 149:
-#line 604 "engines/director/lingo/lingo-gr.y"
+  case 144:
+#line 584 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->codeSetImmediate(false);
 		g_lingo->codeFunc((yyvsp[(1) - (3)].s), (yyvsp[(3) - (3)].narg)); ;}
     break;
 
-  case 150:
-#line 634 "engines/director/lingo/lingo-gr.y"
+  case 145:
+#line 614 "engines/director/lingo/lingo-gr.y"
     { g_lingo->_indef = true; g_lingo->_currentFactory.clear(); ;}
     break;
 
-  case 151:
-#line 635 "engines/director/lingo/lingo-gr.y"
+  case 146:
+#line 615 "engines/director/lingo/lingo-gr.y"
     {
 			g_lingo->code1(g_lingo->c_procret);
 			g_lingo->define(*(yyvsp[(2) - (8)].s), (yyvsp[(4) - (8)].code), (yyvsp[(5) - (8)].narg));
 			g_lingo->_indef = false; ;}
     break;
 
-  case 152:
-#line 639 "engines/director/lingo/lingo-gr.y"
+  case 147:
+#line 619 "engines/director/lingo/lingo-gr.y"
     { g_lingo->codeFactory(*(yyvsp[(2) - (2)].s)); ;}
     break;
 
-  case 153:
-#line 640 "engines/director/lingo/lingo-gr.y"
+  case 148:
+#line 620 "engines/director/lingo/lingo-gr.y"
     { g_lingo->_indef = true; ;}
     break;
 
-  case 154:
-#line 641 "engines/director/lingo/lingo-gr.y"
+  case 149:
+#line 621 "engines/director/lingo/lingo-gr.y"
     {
 			g_lingo->code1(g_lingo->c_procret);
 			g_lingo->define(*(yyvsp[(2) - (8)].s), (yyvsp[(4) - (8)].code), (yyvsp[(5) - (8)].narg) + 1, &g_lingo->_currentFactory);
 			g_lingo->_indef = false; ;}
     break;
 
-  case 155:
-#line 645 "engines/director/lingo/lingo-gr.y"
+  case 150:
+#line 625 "engines/director/lingo/lingo-gr.y"
     {	// D3
 		g_lingo->code1(g_lingo->c_procret);
 		g_lingo->define(*(yyvsp[(1) - (8)].s), (yyvsp[(2) - (8)].code), (yyvsp[(3) - (8)].narg));
@@ -3091,8 +3030,8 @@ yyreduce:
 		checkEnd((yyvsp[(7) - (8)].s), (yyvsp[(1) - (8)].s)->c_str(), false); ;}
     break;
 
-  case 156:
-#line 652 "engines/director/lingo/lingo-gr.y"
+  case 151:
+#line 632 "engines/director/lingo/lingo-gr.y"
     {	// D4. No 'end' clause
 		g_lingo->code1(g_lingo->c_procret);
 		g_lingo->define(*(yyvsp[(1) - (6)].s), (yyvsp[(2) - (6)].code), (yyvsp[(3) - (6)].narg));
@@ -3100,38 +3039,38 @@ yyreduce:
 		g_lingo->_ignoreMe = false; ;}
     break;
 
-  case 157:
-#line 658 "engines/director/lingo/lingo-gr.y"
+  case 152:
+#line 638 "engines/director/lingo/lingo-gr.y"
     { (yyval.s) = (yyvsp[(2) - (2)].s); g_lingo->_indef = true; g_lingo->_currentFactory.clear(); g_lingo->_ignoreMe = true; ;}
     break;
 
-  case 158:
-#line 660 "engines/director/lingo/lingo-gr.y"
+  case 153:
+#line 640 "engines/director/lingo/lingo-gr.y"
     { (yyval.narg) = 0; ;}
     break;
 
-  case 159:
-#line 661 "engines/director/lingo/lingo-gr.y"
+  case 154:
+#line 641 "engines/director/lingo/lingo-gr.y"
     { g_lingo->codeArg((yyvsp[(1) - (1)].s)); (yyval.narg) = 1; ;}
     break;
 
-  case 160:
-#line 662 "engines/director/lingo/lingo-gr.y"
+  case 155:
+#line 642 "engines/director/lingo/lingo-gr.y"
     { g_lingo->codeArg((yyvsp[(3) - (3)].s)); (yyval.narg) = (yyvsp[(1) - (3)].narg) + 1; ;}
     break;
 
-  case 161:
-#line 663 "engines/director/lingo/lingo-gr.y"
+  case 156:
+#line 643 "engines/director/lingo/lingo-gr.y"
     { g_lingo->codeArg((yyvsp[(4) - (4)].s)); (yyval.narg) = (yyvsp[(1) - (4)].narg) + 1; ;}
     break;
 
-  case 165:
-#line 671 "engines/director/lingo/lingo-gr.y"
+  case 160:
+#line 651 "engines/director/lingo/lingo-gr.y"
     { g_lingo->codeArgStore(); ;}
     break;
 
-  case 166:
-#line 675 "engines/director/lingo/lingo-gr.y"
+  case 161:
+#line 655 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->code1(g_lingo->c_call);
 		g_lingo->codeString((yyvsp[(1) - (2)].s)->c_str());
@@ -3140,34 +3079,34 @@ yyreduce:
 		g_lingo->code1(numpar); ;}
     break;
 
-  case 167:
-#line 683 "engines/director/lingo/lingo-gr.y"
+  case 162:
+#line 663 "engines/director/lingo/lingo-gr.y"
     { (yyval.narg) = 0; ;}
     break;
 
-  case 168:
-#line 684 "engines/director/lingo/lingo-gr.y"
+  case 163:
+#line 664 "engines/director/lingo/lingo-gr.y"
     { (yyval.narg) = 1; ;}
     break;
 
-  case 169:
-#line 685 "engines/director/lingo/lingo-gr.y"
+  case 164:
+#line 665 "engines/director/lingo/lingo-gr.y"
     { (yyval.narg) = (yyvsp[(1) - (3)].narg) + 1; ;}
     break;
 
-  case 170:
-#line 688 "engines/director/lingo/lingo-gr.y"
+  case 165:
+#line 668 "engines/director/lingo/lingo-gr.y"
     { (yyval.narg) = 1; ;}
     break;
 
-  case 171:
-#line 689 "engines/director/lingo/lingo-gr.y"
+  case 166:
+#line 669 "engines/director/lingo/lingo-gr.y"
     { (yyval.narg) = (yyvsp[(1) - (3)].narg) + 1; ;}
     break;
 
 
 /* Line 1267 of yacc.c.  */
-#line 3171 "engines/director/lingo/lingo-gr.cpp"
+#line 3110 "engines/director/lingo/lingo-gr.cpp"
       default: break;
     }
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@ -3381,6 +3320,6 @@ yyreturn:
 }
 
 
-#line 692 "engines/director/lingo/lingo-gr.y"
+#line 672 "engines/director/lingo/lingo-gr.y"
 
 
diff --git a/engines/director/lingo/lingo-gr.y b/engines/director/lingo/lingo-gr.y
index d49a761..1d1b2e0 100644
--- a/engines/director/lingo/lingo-gr.y
+++ b/engines/director/lingo/lingo-gr.y
@@ -247,37 +247,6 @@ stmt: stmtoneliner
 		}
 	;
 
-elseifstmt:	elseifstmt elseifstmt1
-	| elseifstmt1
-	;
-
-elseifstmtoneliner: elseifstmtoneliner elseifstmtoneliner1
-	| elseifstmtoneliner1
-	;
-
-elseifstmtoneliner1:	elseif expr tTHEN begin stmt end {
-		inst then = 0;
-		WRITE_UINT32(&then, $4 - $1);
-		(*g_lingo->_currentScript)[$1 + 1] = then;	/* thenpart */
-
-		g_lingo->codeLabel($1); }
-	;
-
-elseifstmt1: elseifstmtoneliner
-	| elseif expr tTHEN begin stmtlist end {
-		inst then = 0;
-		WRITE_UINT32(&then, $5 - $1);
-		(*g_lingo->_currentScript)[$1 + 1] = then;	/* thenpart */
-
-		g_lingo->codeLabel($1); }
-	| elseif expr tTHENNL begin stmtlist end {
-		inst then = 0;
-		WRITE_UINT32(&then, $5 - $1);
-		(*g_lingo->_currentScript)[$1 + 1] = then;	/* thenpart */
-
-		g_lingo->codeLabel($1); }
-	;
-
 ifstmt:	if expr tTHENNL stmtlist end ENDCLAUSE		{
 		inst then = 0, end = 0;
 		WRITE_UINT32(&then, $4 - $1);
@@ -309,7 +278,7 @@ ifstmt:	if expr tTHENNL stmtlist end ENDCLAUSE		{
 		(*g_lingo->_currentScript)[$1 + 3] = end; 	/* end, if cond fails */
 
 		g_lingo->processIf(0, 0); }
-	| if expr tTHEN begin stmtoneliner end elseifstmt end endifstmt end {
+	| if expr tTHEN begin stmtoneliner end elseifstmtlist end endifstmt end {
 		inst then = 0, else1 = 0, end = 0;
 		WRITE_UINT32(&then, $4 - $1);
 		WRITE_UINT32(&else1, $6 - $1);
@@ -319,7 +288,7 @@ ifstmt:	if expr tTHENNL stmtlist end ENDCLAUSE		{
 		(*g_lingo->_currentScript)[$1 + 3] = end;	/* end, if cond fails */
 
 		g_lingo->processIf(0, $10 - $1); }
-	| if expr tTHENNL stmtlist end elseifstmt end endifstmt end {
+	| if expr tTHENNL stmtlist end elseifstmtlist end endifstmt end {
 		inst then = 0, else1 = 0, end = 0;
 		WRITE_UINT32(&then, $4 - $1);
 		WRITE_UINT32(&else1, $7 - $1);
@@ -352,14 +321,25 @@ ifstmt:	if expr tTHENNL stmtlist end ENDCLAUSE		{
 
 	;
 
+elseifstmtlist:	elseifstmtlist elseifstmt
+	| elseifstmt
+	;
 
-endifstmt: elseif expr tTHEN begin stmtoneliner end tELSE stmtoneliner end {
+elseifstmt: elseif expr tTHEN begin stmtoneliner end {
 		inst then = 0;
 		WRITE_UINT32(&then, $4 - $1);
 		(*g_lingo->_currentScript)[$1 + 1] = then;	/* thenpart */
 
 		g_lingo->codeLabel($1); }
-	| elseif expr tTHEN begin stmtoneliner end {
+	| elseif expr tTHENNL begin stmtlist end {
+		inst then = 0;
+		WRITE_UINT32(&then, $5 - $1);
+		(*g_lingo->_currentScript)[$1 + 1] = then;	/* thenpart */
+
+		g_lingo->codeLabel($1); }
+	;
+
+endifstmt: elseif expr tTHEN begin stmtoneliner end tELSE stmtoneliner end {
 		inst then = 0;
 		WRITE_UINT32(&then, $4 - $1);
 		(*g_lingo->_currentScript)[$1 + 1] = then;	/* thenpart */


Commit: 57f979c705c0e5463821fae0181568f8b14d7e4f
    https://github.com/scummvm/scummvm/commit/57f979c705c0e5463821fae0181568f8b14d7e4f
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2019-12-05T01:35:52+01:00

Commit Message:
DIRECTOR: LINGO: Further simplification of 'if' statements grammar.

Still doesn't work fully

Changed paths:
    engines/director/lingo/lingo-gr.cpp
    engines/director/lingo/lingo-gr.y


diff --git a/engines/director/lingo/lingo-gr.cpp b/engines/director/lingo/lingo-gr.cpp
index 3b7f90e..1cca32d 100644
--- a/engines/director/lingo/lingo-gr.cpp
+++ b/engines/director/lingo/lingo-gr.cpp
@@ -544,16 +544,16 @@ union yyalloc
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  128
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   1789
+#define YYLAST   1711
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  107
 /* YYNNTS -- Number of nonterminals.  */
 #define YYNNTS  41
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  166
+#define YYNRULES  164
 /* YYNRULES -- Number of states.  */
-#define YYNSTATES  380
+#define YYNSTATES  365
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
@@ -610,20 +610,20 @@ static const yytype_uint16 yyprhs[] =
        0,     0,     3,     7,     9,    12,    13,    15,    17,    22,
       27,    32,    37,    42,    47,    52,    57,    63,    69,    71,
       73,    75,    77,    79,    85,    96,   108,   112,   119,   124,
-     131,   141,   148,   159,   169,   178,   186,   189,   191,   198,
-     205,   215,   223,   229,   234,   237,   241,   243,   245,   246,
-     247,   249,   252,   255,   259,   261,   263,   265,   267,   269,
-     271,   273,   275,   277,   280,   283,   288,   293,   295,   298,
-     300,   304,   308,   312,   316,   320,   324,   328,   332,   336,
-     340,   344,   348,   352,   355,   359,   363,   367,   371,   374,
-     377,   381,   385,   390,   395,   400,   407,   412,   419,   424,
-     431,   436,   443,   445,   448,   451,   453,   455,   458,   460,
-     463,   466,   469,   471,   474,   477,   479,   482,   487,   492,
-     499,   504,   507,   511,   513,   517,   519,   523,   525,   529,
-     532,   535,   538,   541,   545,   548,   551,   553,   557,   560,
-     563,   566,   570,   573,   574,   578,   579,   588,   591,   592,
-     601,   610,   617,   620,   621,   623,   627,   632,   633,   635,
-     639,   640,   643,   644,   646,   650,   652
+     132,   143,   150,   160,   161,   164,   171,   178,   188,   194,
+     199,   205,   210,   213,   217,   219,   221,   222,   223,   224,
+     227,   230,   234,   236,   238,   240,   242,   244,   246,   248,
+     250,   252,   255,   258,   263,   268,   270,   273,   275,   279,
+     283,   287,   291,   295,   299,   303,   307,   311,   315,   319,
+     323,   327,   330,   334,   338,   342,   346,   349,   352,   356,
+     360,   365,   370,   375,   382,   387,   394,   399,   406,   411,
+     418,   420,   423,   426,   428,   430,   433,   435,   438,   441,
+     444,   446,   449,   452,   454,   457,   462,   467,   474,   479,
+     482,   486,   488,   492,   494,   498,   500,   504,   507,   510,
+     513,   516,   520,   523,   526,   528,   532,   535,   538,   541,
+     545,   548,   549,   553,   554,   563,   566,   567,   576,   585,
+     592,   595,   596,   598,   602,   607,   608,   610,   614,   615,
+     618,   619,   621,   625,   627
 };
 
 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
@@ -641,60 +641,58 @@ static const yytype_int16 yyrhs[] =
      127,   122,   123,   122,    34,    -1,   118,    71,   127,   122,
       36,    56,   127,   122,   123,   122,    34,    -1,   124,   111,
      122,    -1,   125,   127,    99,   123,   122,    34,    -1,   125,
-     127,    56,   127,    -1,   119,   127,    55,   123,   122,    34,
-      -1,   119,   127,    54,   121,   111,   122,    37,   111,   122,
-      -1,   119,   127,    54,   121,   111,   122,    -1,   119,   127,
-      54,   121,   111,   122,   114,   122,   116,   122,    -1,   119,
-     127,    55,   123,   122,   114,   122,   116,   122,    -1,   119,
-     127,    54,   121,   111,   122,   116,   122,    -1,   119,   127,
-      55,   123,   122,   116,   122,    -1,   114,   115,    -1,   115,
-      -1,   120,   127,    54,   121,   111,   122,    -1,   120,   127,
-      55,   121,   123,   122,    -1,   120,   127,    54,   121,   111,
-     122,    37,   111,   122,    -1,   120,   127,    55,   121,   123,
-     122,    34,    -1,    60,   121,   123,   122,    34,    -1,    60,
-     121,   111,   122,    -1,    52,    59,    -1,    52,    58,    30,
-      -1,    43,    -1,    38,    -1,    -1,    -1,   121,    -1,   123,
-      99,    -1,   123,   112,    -1,    57,    30,    54,    -1,    89,
-      -1,    12,    -1,    17,    -1,    33,    -1,    31,    -1,    30,
-      -1,   126,    -1,   128,    -1,    25,    -1,    26,   127,    -1,
-      27,   147,    -1,    27,   100,   147,   101,    -1,    30,   100,
-     146,   101,    -1,    15,    -1,    16,   127,    -1,   110,    -1,
-     127,    94,   127,    -1,   127,    95,   127,    -1,   127,    96,
-     127,    -1,   127,    97,   127,    -1,   127,    76,   127,    -1,
-     127,   102,   127,    -1,   127,   103,   127,    -1,   127,    71,
-     127,    -1,   127,    72,   127,    -1,   127,    67,   127,    -1,
-     127,    68,   127,    -1,   127,    73,   127,    -1,   127,    74,
-     127,    -1,    75,   127,    -1,   127,    93,   127,    -1,   127,
-      79,   127,    -1,   127,    80,   127,    -1,   127,    81,   127,
-      -1,    94,   127,    -1,    95,   127,    -1,   100,   127,   101,
-      -1,   104,   146,   105,    -1,    86,   127,    87,   127,    -1,
-      86,   127,    88,   127,    -1,    82,   127,    49,   127,    -1,
-      82,   127,    56,   127,    49,   127,    -1,    83,   127,    49,
-     127,    -1,    83,   127,    56,   127,    49,   127,    -1,    84,
-     127,    49,   127,    -1,    84,   127,    56,   127,    49,   127,
-      -1,    85,   127,    49,   127,    -1,    85,   127,    56,   127,
-      49,   127,    -1,    92,    -1,    29,   127,    -1,    51,   127,
-      -1,   133,    -1,   136,    -1,    39,    52,    -1,    39,    -1,
-      41,   130,    -1,    90,   131,    -1,    66,   132,    -1,    19,
-      -1,    21,   127,    -1,    20,   127,    -1,    20,    -1,    22,
-     147,    -1,    22,   100,   147,   101,    -1,    92,   100,    30,
-     101,    -1,    92,   100,    30,   106,   146,   101,    -1,    63,
-     127,    58,   127,    -1,    63,   127,    -1,    23,    30,   146,
-      -1,    30,    -1,   130,   106,    30,    -1,    30,    -1,   131,
-     106,    30,    -1,    30,    -1,   132,   106,    30,    -1,    42,
-      45,    -1,    42,    48,    -1,    42,    50,    -1,    42,   134,
-      -1,    42,   134,   135,    -1,    42,   135,    -1,    40,   127,
-      -1,   127,    -1,    49,    47,   127,    -1,    47,   127,    -1,
-      64,    65,    -1,    64,   134,    -1,    64,   134,   135,    -1,
-      64,   135,    -1,    -1,    35,   137,   146,    -1,    -1,    46,
-      30,   139,   121,   142,    99,   144,   123,    -1,    61,    30,
-      -1,    -1,    62,    30,   140,   121,   142,    99,   144,   123,
-      -1,   141,   121,   142,    99,   144,   123,    34,   143,    -1,
-     141,   121,   142,    99,   144,   123,    -1,    91,    30,    -1,
-      -1,    30,    -1,   142,   106,    30,    -1,   142,    99,   106,
-      30,    -1,    -1,    30,    -1,   143,   106,    30,    -1,    -1,
-      30,   147,    -1,    -1,   127,    -1,   146,   106,   127,    -1,
-     127,    -1,   147,   106,   127,    -1
+     127,    56,   127,    -1,   119,   127,    54,   121,   111,   122,
+      99,    -1,   119,   127,    54,   121,   111,   122,   114,   122,
+     116,   122,    -1,   119,   127,    55,   123,   122,    34,    -1,
+     119,   127,    55,   123,   122,   114,   122,   116,   122,    -1,
+      -1,   115,   114,    -1,   120,   127,    54,   121,   111,   122,
+      -1,   120,   127,    55,   121,   123,   122,    -1,   120,   127,
+      54,   121,   111,   122,    37,   111,   122,    -1,    37,   121,
+     123,   122,    34,    -1,    37,   121,   111,   122,    -1,    60,
+     121,   123,   122,    34,    -1,    60,   121,   111,   122,    -1,
+      52,    59,    -1,    52,    58,    30,    -1,    43,    -1,    38,
+      -1,    -1,    -1,    -1,   123,    99,    -1,   123,   112,    -1,
+      57,    30,    54,    -1,    89,    -1,    12,    -1,    17,    -1,
+      33,    -1,    31,    -1,    30,    -1,   126,    -1,   128,    -1,
+      25,    -1,    26,   127,    -1,    27,   147,    -1,    27,   100,
+     147,   101,    -1,    30,   100,   146,   101,    -1,    15,    -1,
+      16,   127,    -1,   110,    -1,   127,    94,   127,    -1,   127,
+      95,   127,    -1,   127,    96,   127,    -1,   127,    97,   127,
+      -1,   127,    76,   127,    -1,   127,   102,   127,    -1,   127,
+     103,   127,    -1,   127,    71,   127,    -1,   127,    72,   127,
+      -1,   127,    67,   127,    -1,   127,    68,   127,    -1,   127,
+      73,   127,    -1,   127,    74,   127,    -1,    75,   127,    -1,
+     127,    93,   127,    -1,   127,    79,   127,    -1,   127,    80,
+     127,    -1,   127,    81,   127,    -1,    94,   127,    -1,    95,
+     127,    -1,   100,   127,   101,    -1,   104,   146,   105,    -1,
+      86,   127,    87,   127,    -1,    86,   127,    88,   127,    -1,
+      82,   127,    49,   127,    -1,    82,   127,    56,   127,    49,
+     127,    -1,    83,   127,    49,   127,    -1,    83,   127,    56,
+     127,    49,   127,    -1,    84,   127,    49,   127,    -1,    84,
+     127,    56,   127,    49,   127,    -1,    85,   127,    49,   127,
+      -1,    85,   127,    56,   127,    49,   127,    -1,    92,    -1,
+      29,   127,    -1,    51,   127,    -1,   133,    -1,   136,    -1,
+      39,    52,    -1,    39,    -1,    41,   130,    -1,    90,   131,
+      -1,    66,   132,    -1,    19,    -1,    21,   127,    -1,    20,
+     127,    -1,    20,    -1,    22,   147,    -1,    22,   100,   147,
+     101,    -1,    92,   100,    30,   101,    -1,    92,   100,    30,
+     106,   146,   101,    -1,    63,   127,    58,   127,    -1,    63,
+     127,    -1,    23,    30,   146,    -1,    30,    -1,   130,   106,
+      30,    -1,    30,    -1,   131,   106,    30,    -1,    30,    -1,
+     132,   106,    30,    -1,    42,    45,    -1,    42,    48,    -1,
+      42,    50,    -1,    42,   134,    -1,    42,   134,   135,    -1,
+      42,   135,    -1,    40,   127,    -1,   127,    -1,    49,    47,
+     127,    -1,    47,   127,    -1,    64,    65,    -1,    64,   134,
+      -1,    64,   134,   135,    -1,    64,   135,    -1,    -1,    35,
+     137,   146,    -1,    -1,    46,    30,   139,   121,   142,    99,
+     144,   123,    -1,    61,    30,    -1,    -1,    62,    30,   140,
+     121,   142,    99,   144,   123,    -1,   141,   121,   142,    99,
+     144,   123,    34,   143,    -1,   141,   121,   142,    99,   144,
+     123,    -1,    91,    30,    -1,    -1,    30,    -1,   142,   106,
+      30,    -1,   142,    99,   106,    30,    -1,    -1,    30,    -1,
+     143,   106,    30,    -1,    -1,    30,   147,    -1,    -1,   127,
+      -1,   146,   106,   127,    -1,   127,    -1,   147,   106,   127,
+      -1
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
@@ -703,20 +701,20 @@ static const yytype_uint16 yyrline[] =
        0,   120,   120,   121,   122,   125,   126,   127,   130,   136,
      139,   140,   141,   147,   154,   160,   167,   173,   181,   182,
      183,   186,   187,   192,   205,   223,   237,   242,   245,   250,
-     260,   271,   281,   291,   301,   311,   324,   325,   328,   334,
-     342,   348,   356,   360,   364,   367,   374,   381,   389,   392,
-     395,   396,   397,   400,   406,   410,   413,   416,   419,   422,
-     428,   429,   430,   433,   436,   437,   438,   441,   449,   455,
-     456,   457,   458,   459,   460,   461,   462,   463,   464,   465,
-     466,   467,   468,   469,   470,   471,   472,   473,   474,   475,
-     476,   477,   478,   479,   480,   481,   482,   483,   484,   485,
-     486,   487,   488,   491,   496,   497,   498,   499,   500,   501,
-     502,   503,   504,   507,   510,   513,   517,   518,   519,   520,
-     521,   522,   523,   526,   527,   530,   531,   534,   535,   546,
-     547,   548,   549,   553,   557,   563,   564,   567,   568,   571,
-     572,   576,   580,   584,   584,   614,   614,   619,   620,   620,
-     625,   632,   638,   640,   641,   642,   643,   646,   647,   648,
-     651,   655,   663,   664,   665,   668,   669
+     260,   270,   280,   292,   293,   296,   302,   310,   316,   320,
+     323,   327,   331,   334,   341,   348,   356,   359,   362,   363,
+     364,   367,   373,   377,   380,   383,   386,   389,   395,   396,
+     397,   400,   403,   404,   405,   408,   416,   422,   423,   424,
+     425,   426,   427,   428,   429,   430,   431,   432,   433,   434,
+     435,   436,   437,   438,   439,   440,   441,   442,   443,   444,
+     445,   446,   447,   448,   449,   450,   451,   452,   453,   454,
+     455,   458,   463,   464,   465,   466,   467,   468,   469,   470,
+     471,   474,   477,   480,   484,   485,   486,   487,   488,   489,
+     490,   493,   494,   497,   498,   501,   502,   513,   514,   515,
+     516,   520,   524,   530,   531,   534,   535,   538,   539,   543,
+     547,   551,   551,   581,   581,   586,   587,   587,   592,   599,
+     605,   607,   608,   609,   610,   613,   614,   615,   618,   622,
+     630,   631,   632,   635,   636
 };
 #endif
 
@@ -776,20 +774,20 @@ static const yytype_uint8 yyr1[] =
        0,   107,   108,   108,   108,   109,   109,   109,   110,   110,
      110,   110,   110,   110,   110,   110,   110,   110,   111,   111,
      111,   112,   112,   112,   112,   112,   112,   112,   112,   113,
-     113,   113,   113,   113,   113,   113,   114,   114,   115,   115,
-     116,   116,   116,   116,   117,   118,   119,   120,   121,   122,
-     123,   123,   123,   124,   125,   126,   126,   126,   126,   126,
+     113,   113,   113,   114,   114,   115,   115,   116,   116,   116,
+     116,   116,   117,   118,   119,   120,   121,   122,   123,   123,
+     123,   124,   125,   126,   126,   126,   126,   126,   127,   127,
      127,   127,   127,   127,   127,   127,   127,   127,   127,   127,
      127,   127,   127,   127,   127,   127,   127,   127,   127,   127,
      127,   127,   127,   127,   127,   127,   127,   127,   127,   127,
      127,   127,   127,   127,   127,   127,   127,   127,   127,   127,
-     127,   127,   127,   128,   129,   129,   129,   129,   129,   129,
+     127,   128,   129,   129,   129,   129,   129,   129,   129,   129,
      129,   129,   129,   129,   129,   129,   129,   129,   129,   129,
-     129,   129,   129,   130,   130,   131,   131,   132,   132,   133,
-     133,   133,   133,   133,   133,   134,   134,   135,   135,   136,
-     136,   136,   136,   137,   136,   139,   138,   138,   140,   138,
-     138,   138,   141,   142,   142,   142,   142,   143,   143,   143,
-     144,   145,   146,   146,   146,   147,   147
+     129,   130,   130,   131,   131,   132,   132,   133,   133,   133,
+     133,   133,   133,   134,   134,   135,   135,   136,   136,   136,
+     136,   137,   136,   139,   138,   138,   140,   138,   138,   138,
+     141,   142,   142,   142,   142,   143,   143,   143,   144,   145,
+     146,   146,   146,   147,   147
 };
 
 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
@@ -797,21 +795,21 @@ static const yytype_uint8 yyr2[] =
 {
        0,     2,     3,     1,     2,     0,     1,     1,     4,     4,
        4,     4,     4,     4,     4,     4,     5,     5,     1,     1,
-       1,     1,     1,     5,    10,    11,     3,     6,     4,     6,
-       9,     6,    10,     9,     8,     7,     2,     1,     6,     6,
-       9,     7,     5,     4,     2,     3,     1,     1,     0,     0,
-       1,     2,     2,     3,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     2,     2,     4,     4,     1,     2,     1,
+       1,     1,     1,     5,    10,    11,     3,     6,     4,     7,
+      10,     6,     9,     0,     2,     6,     6,     9,     5,     4,
+       5,     4,     2,     3,     1,     1,     0,     0,     0,     2,
+       2,     3,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     2,     2,     4,     4,     1,     2,     1,     3,     3,
        3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
-       3,     3,     3,     2,     3,     3,     3,     3,     2,     2,
-       3,     3,     4,     4,     4,     6,     4,     6,     4,     6,
-       4,     6,     1,     2,     2,     1,     1,     2,     1,     2,
-       2,     2,     1,     2,     2,     1,     2,     4,     4,     6,
-       4,     2,     3,     1,     3,     1,     3,     1,     3,     2,
-       2,     2,     2,     3,     2,     2,     1,     3,     2,     2,
-       2,     3,     2,     0,     3,     0,     8,     2,     0,     8,
-       8,     6,     2,     0,     1,     3,     4,     0,     1,     3,
-       0,     2,     0,     1,     3,     1,     3
+       3,     2,     3,     3,     3,     3,     2,     2,     3,     3,
+       4,     4,     4,     6,     4,     6,     4,     6,     4,     6,
+       1,     2,     2,     1,     1,     2,     1,     2,     2,     2,
+       1,     2,     2,     1,     2,     4,     4,     6,     4,     2,
+       3,     1,     3,     1,     3,     1,     3,     2,     2,     2,
+       2,     3,     2,     2,     1,     3,     2,     2,     2,     3,
+       2,     0,     3,     0,     8,     2,     0,     8,     8,     6,
+       2,     0,     1,     3,     4,     0,     1,     3,     0,     2,
+       0,     1,     3,     1,     3
 };
 
 /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
@@ -819,108 +817,106 @@ static const yytype_uint8 yyr2[] =
    means the default is an error.  */
 static const yytype_uint8 yydefact[] =
 {
-       0,     0,    55,    67,     0,    56,   112,   115,     0,     0,
-       0,    62,     0,     0,     0,    59,    58,    57,   143,   108,
-       0,     0,    46,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    54,
-       0,     0,   102,     0,     0,     0,   162,     0,     3,    69,
-      21,     7,    22,     0,     0,     0,     0,     0,    60,    19,
-      61,    20,   105,   106,     6,    48,    18,     4,    59,     0,
-     102,    68,   114,   113,     0,   165,   116,   162,    63,     0,
-      64,   103,   162,   161,   162,   107,   123,   109,     0,   129,
-       0,   130,     0,   131,   136,   132,   134,   145,   104,     0,
-      44,     0,     0,     0,     0,   147,   148,   121,   139,   140,
-     142,   127,   111,    83,     0,     0,     0,     0,     0,   125,
-     110,   152,     0,    88,    89,     0,   163,     0,     1,     5,
-      48,     0,     0,    49,     0,     0,     0,     0,     0,     0,
+       0,     0,    53,    65,     0,    54,   110,   113,     0,     0,
+       0,    60,     0,     0,     0,    57,    56,    55,   141,   106,
+       0,     0,    44,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    52,
+       0,     0,   100,     0,     0,     0,   160,     0,     3,    67,
+      21,     7,    22,     0,     0,     0,     0,     0,    58,    19,
+      59,    20,   103,   104,     6,    46,    18,     4,    57,     0,
+     100,    66,   112,   111,     0,   163,   114,   160,    61,     0,
+      62,   101,   160,   159,   160,   105,   121,   107,     0,   127,
+       0,   128,     0,   129,   134,   130,   132,   143,   102,     0,
+      42,     0,     0,     0,     0,   145,   146,   119,   137,   138,
+     140,   125,   109,    81,     0,     0,     0,     0,     0,   123,
+     108,   150,     0,    86,    87,     0,   161,     0,     1,     5,
+      48,     0,     0,    47,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   153,   162,     0,   165,     0,     0,   122,     0,
-     163,     0,   144,     0,   135,   138,     0,   133,    48,     0,
-       0,     0,    45,     0,     0,    60,     0,     0,     0,    53,
-      48,     0,   141,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    90,    91,     0,     2,
-      50,    49,    49,    48,    48,    26,     0,    48,    79,    80,
-      77,    78,    81,    82,    74,    85,    86,    87,    84,    70,
-      71,    72,    73,    75,    76,   154,     0,   117,   166,    65,
-      66,   124,   137,   153,     8,     9,    10,    11,    15,    13,
-       0,     0,    14,    12,   153,   120,   128,    94,     0,    96,
-       0,    98,     0,   100,     0,    92,    93,   126,   118,   162,
-     164,    51,    52,     0,     0,     0,    49,    28,    49,   160,
-       0,     0,    17,    16,     0,     0,     0,     0,     0,     0,
-      23,     0,     0,    49,     0,     0,     0,    48,   155,   160,
-     160,    95,    97,    99,   101,   119,     0,    49,    31,    29,
-      47,    48,    49,    37,    49,     0,    27,   156,   151,    48,
-      48,    49,    48,     0,    49,    49,    48,    36,     0,     0,
-      35,     0,   157,   146,   149,    48,    49,    49,     0,    34,
-      49,    49,     0,    49,     0,    48,    48,   158,   150,    49,
-       0,    30,    49,    43,     0,    48,    48,    33,     0,     0,
-      48,     0,     0,    24,    32,    42,     0,    48,    48,    48,
-      49,    49,   159,    25,    49,    49,     0,    48,    38,    39,
-      38,    39,    49,    49,     0,    41,     0,     0,    49,    40
+       0,     0,   151,   160,     0,   163,     0,     0,   120,     0,
+     161,     0,   142,     0,   133,   136,     0,   131,    46,     0,
+       0,     0,    43,     0,     0,    58,     0,     0,     0,    51,
+      46,     0,   139,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    88,    89,     0,     2,
+      47,    47,    46,    48,    26,     0,    48,    77,    78,    75,
+      76,    79,    80,    72,    83,    84,    85,    82,    68,    69,
+      70,    71,    73,    74,   152,     0,   115,   164,    63,    64,
+     122,   135,   151,     8,     9,    10,    11,    15,    13,     0,
+       0,    14,    12,   151,   118,   126,    92,     0,    94,     0,
+      96,     0,    98,     0,    90,    91,   124,   116,   160,   162,
+      49,    50,     0,     0,     0,    47,    28,    47,   158,     0,
+       0,    17,    16,     0,     0,     0,     0,     0,     0,    23,
+       0,     0,    47,    33,     0,     0,    48,   153,   158,   158,
+      93,    95,    97,    99,   117,     0,    47,    33,    31,    45,
+      47,    33,     0,    27,   154,   149,    48,    48,    47,    48,
+      29,    47,     0,    34,     0,   155,   144,   147,    48,    47,
+       0,    46,    46,    47,     0,    46,    46,   156,   148,    47,
+       0,    47,    48,    48,    32,     0,     0,    48,     0,     0,
+      24,    30,    47,    47,    47,    47,    46,    47,    47,   157,
+      25,    39,     0,    41,     0,     0,    35,    36,    38,    40,
+      47,     0,     0,    47,    37
 };
 
 /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-      -1,    47,    48,    49,    50,   262,    52,   302,   303,   304,
-      53,    54,    55,   305,   200,   205,   201,    56,    57,    58,
+      -1,    47,    48,    49,    50,   261,    52,   300,   301,   323,
+      53,    54,    55,   302,   152,   204,   200,    56,    57,    58,
       59,    60,    61,    87,   120,   112,    62,    95,    96,    63,
-      84,    64,   168,   180,    65,   226,   338,   287,    66,   161,
+      84,    64,   168,   180,    65,   225,   328,   286,    66,   161,
       76
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -284
+#define YYPACT_NINF -265
 static const yytype_int16 yypact[] =
 {
-     380,   -76,  -284,  -284,   926,  -284,  -284,   926,   926,   966,
-      57,  -284,   926,  1047,   926,  1087,  -284,  -284,  -284,    29,
-      65,   805,  -284,    67,   926,    43,    44,    69,    77,    84,
-     926,   845,    93,   926,   926,   926,   926,   926,   926,  -284,
-      95,   118,    54,   926,   926,   926,   926,     7,  -284,  -284,
-    -284,  -284,  -284,   926,    85,   926,   724,   926,  -284,  1653,
-    -284,  -284,  -284,  -284,  -284,  -284,  -284,  -284,    60,   926,
-    -284,  1653,  1653,  1653,   926,  1653,    58,   926,  1653,   926,
-      58,  1653,   926,    58,   926,  -284,  -284,    59,   926,  -284,
-     926,  -284,   114,  -284,  1653,   -25,  -284,  -284,  1121,   133,
-    -284,    -2,   926,     8,   117,  -284,  -284,  1550,  -284,   -25,
-    -284,  -284,    66,   -36,   149,  1154,  1187,  1220,  1583,  -284,
-      70,  -284,   145,   -36,   -36,  1616,  1653,    -1,  -284,   466,
-    1653,   926,  1385,  -284,  1517,   926,   926,   926,   926,   926,
-     926,   926,   926,   926,   926,   926,   926,   926,   926,   926,
-     926,   926,   148,   926,  1121,  1616,   -87,   926,    73,   -49,
-    1616,    23,    73,   162,  1653,  1653,   926,  -284,  -284,    92,
-     926,   926,  -284,   926,   926,   124,   700,   926,   926,  -284,
-    -284,   926,  -284,   166,   926,   926,   926,   926,   926,   926,
-     926,   926,   926,   926,   169,    49,  -284,  -284,   926,  -284,
-    -284,   638,  1653,  -284,  -284,  -284,   926,  -284,    15,    15,
-      15,    15,  1686,  1686,   -36,  1653,    15,    15,   262,   -41,
-     -41,   -36,   -36,  1653,  1653,  -284,    -3,  -284,  1653,  -284,
-    -284,  -284,  1653,   148,  -284,  -284,  1653,  1653,  1653,    15,
-     926,   926,  1653,    15,   148,  1653,  -284,  1653,  1253,  1653,
-    1286,  1653,  1319,  1653,  1352,  1653,  1653,  -284,  -284,   926,
-    1653,  -284,  -284,   167,    12,   724,   638,  1653,   638,    94,
-     173,    14,    15,  1653,    20,   926,   926,   926,   926,    51,
-    -284,   151,   926,  -284,   -13,   170,   178,  -284,  -284,    94,
-      94,  1653,  1653,  1653,  1653,  -284,   926,  1653,    55,  -284,
-    -284,  -284,   171,  -284,  -284,   926,  -284,  -284,   552,  -284,
-    -284,  1653,  -284,   724,   171,  -284,   724,  -284,   926,   -10,
-    -284,  1418,   180,   638,   638,  -284,   638,  -284,   -10,  -284,
-    -284,   638,  1451,  -284,   926,  -284,  -284,  -284,   106,   638,
-     179,  -284,  -284,  -284,   184,  -284,  -284,  -284,  1484,   724,
-    -284,   194,   192,  -284,  -284,  -284,   724,  -284,  -284,  -284,
-    -284,   638,  -284,  -284,  -284,   638,   724,  -284,   190,   198,
-    -284,  -284,  -284,   638,   724,  -284,   190,   198,  -284,  -284
+     302,   -75,  -265,  -265,   848,  -265,  -265,   848,   848,   888,
+       8,  -265,   848,   969,   848,  1009,  -265,  -265,  -265,     0,
+      41,   727,  -265,    44,   848,   -44,    39,    55,    77,    85,
+     848,   767,    91,   848,   848,   848,   848,   848,   848,  -265,
+      96,   100,    52,   848,   848,   848,   848,     7,  -265,  -265,
+    -265,  -265,  -265,   848,    86,   848,   646,   848,  -265,  1575,
+    -265,  -265,  -265,  -265,  -265,  -265,  -265,  -265,    56,   848,
+    -265,  1575,  1575,  1575,   848,  1575,    54,   848,  1575,   848,
+      54,  1575,   848,    54,   848,  -265,  -265,    58,   848,  -265,
+     848,  -265,   118,  -265,  1575,    67,  -265,  -265,  1043,   138,
+    -265,   -35,   848,   -28,   117,  -265,  -265,  1472,  -265,    67,
+    -265,  -265,    66,   -56,  1076,  1109,  1142,  1175,  1505,  -265,
+      69,  -265,   146,   -56,   -56,  1538,  1575,    -5,  -265,   388,
+    1575,   848,  1340,  -265,  1439,   848,   848,   848,   848,   848,
+     848,   848,   848,   848,   848,   848,   848,   848,   848,   848,
+     848,   848,   160,   848,  1043,  1538,   -38,   848,    87,   -13,
+    1538,   -12,    87,   161,  1575,  1575,   848,  -265,  -265,    95,
+     848,   848,  -265,   848,   848,   124,   622,   848,   848,  -265,
+    -265,   848,  -265,   167,   848,   848,   848,   848,   848,   848,
+     848,   848,   848,   848,   168,    -2,  -265,  -265,   848,  -265,
+     560,  1575,  -265,  -265,  -265,   848,  -265,    16,    16,    16,
+      16,  1608,  1608,   -56,  1575,    16,    16,   166,    26,    26,
+     -56,   -56,  1575,  1575,  -265,   -42,  -265,  1575,  -265,  -265,
+    -265,  1575,   160,  -265,  -265,  1575,  1575,  1575,    16,   848,
+     848,  1575,    16,   160,  1575,  -265,  1575,  1208,  1575,  1241,
+    1575,  1274,  1575,  1307,  1575,  1575,  -265,  -265,   848,  1575,
+    -265,  -265,   165,   -11,   646,   560,  1575,   560,    97,   172,
+     -39,    16,  1575,   -27,   848,   848,   848,   848,     2,  -265,
+     149,   848,  -265,    28,   174,   176,  -265,  -265,    97,    97,
+    1575,  1575,  1575,  1575,  -265,   848,  1575,   -16,  -265,  -265,
+    -265,   171,   848,  -265,  -265,   474,  -265,  -265,  1575,  -265,
+    -265,  -265,    21,  -265,  1373,   181,   560,   560,  -265,   560,
+      21,  -265,  -265,  -265,   848,  -265,  -265,  -265,   106,   560,
+     179,  -265,   646,   646,  -265,  1406,   646,  -265,   184,   182,
+    -265,  -265,  -265,   560,  -265,   560,  -265,  -265,   560,  -265,
+    -265,  -265,   183,  -265,   188,   646,  -265,  -265,  -265,  -265,
+    -265,   187,   646,  -265,  -265
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -284,  -284,   104,  -284,   -54,     1,  -284,   -64,  -231,  -283,
-    -284,  -284,  -284,  -256,   -52,    13,  -119,  -284,  -284,   137,
-      -4,    71,  -284,  -284,  -284,  -284,  -284,   204,   -19,  -284,
-    -284,  -284,  -284,  -284,  -284,  -144,  -284,  -131,  -284,   -40,
+    -265,  -265,    99,  -265,   -54,    19,  -265,  -210,  -265,   -94,
+    -265,  -265,  -265,  -264,  -167,  -104,   -86,  -265,  -265,   127,
+      -4,    61,  -265,  -265,  -265,  -265,  -265,   200,   -19,  -265,
+    -265,  -265,  -265,  -265,  -265,  -182,  -265,  -138,  -265,   -40,
        3
 };
 
@@ -931,368 +927,354 @@ static const yytype_int16 yypgoto[] =
 #define YYTABLE_NINF -6
 static const yytype_int16 yytable[] =
 {
-      71,    51,   133,    72,    73,    75,   127,   128,    78,    75,
-      81,    75,   110,   152,   227,   315,    80,    94,    83,   157,
-      98,   299,    90,    67,    92,   300,   107,    94,   300,   113,
-     114,   115,   116,   117,   118,   141,   333,   158,   142,   123,
-     124,   125,   126,   142,   162,   342,   318,   301,   281,   130,
-     301,   132,   229,   134,   173,   148,   149,   157,   318,   101,
-     102,   150,   151,   334,   177,   154,   150,   151,   282,   174,
-     155,   317,   334,   126,   103,   155,   167,   156,   160,   178,
-     126,    85,   159,   317,   164,   266,   165,    77,   268,   271,
-     182,   141,   313,   300,   142,    86,   269,    97,   176,   104,
-     274,    99,   100,   270,   197,   198,   129,   105,   145,   146,
-     147,   148,   149,   289,   106,   301,   233,   150,   151,   290,
-     270,    14,   234,   111,   230,   119,   270,   202,   244,   198,
-      51,   208,   209,   210,   211,   212,   213,   214,   215,   216,
-     217,   218,   219,   220,   221,   222,   223,   224,   121,   126,
-     258,   265,   295,   228,   122,   259,   131,   198,   309,   310,
-     153,   166,   232,   172,   157,   163,   236,   237,   308,   238,
-     239,   179,   183,   242,   243,   195,   194,   245,   225,   198,
-     247,   248,   249,   250,   251,   252,   253,   254,   255,   256,
-     323,   324,   231,   326,   260,   240,   246,   331,   184,   257,
-     286,   280,   267,   288,   306,   185,   339,   296,   307,   300,
-     337,   283,   351,   353,   263,   264,   135,   136,   355,   279,
-     137,   138,   139,   140,   362,   141,   363,   374,   142,   143,
-     144,   361,   375,   199,   314,   109,   272,   273,   365,   175,
-     235,     0,   145,   146,   147,   148,   149,     0,   373,   316,
-       0,   150,   151,     0,     0,   126,     0,     0,     0,   327,
-       0,     0,   330,     0,     0,     0,     0,     0,     0,     0,
-       0,   291,   292,   293,   294,     0,     0,     0,   297,   284,
-       0,   285,     0,   349,   350,     0,     0,     0,     0,     0,
-       0,     0,   311,   356,   357,   360,   298,     0,     0,     0,
-       0,   321,   364,     0,     0,     0,   366,   367,     0,     0,
-     312,     0,   372,     0,   332,   319,     0,   320,     0,     0,
-     378,     0,     0,     0,   325,     0,     0,   328,   329,     0,
-     348,     0,     0,     0,     0,     0,     0,     0,   141,   340,
-     341,   142,     0,   343,   344,     0,   347,     0,     0,     0,
-       0,     0,   352,     0,     0,   354,   146,   147,   148,   149,
-       0,     0,     0,     0,   150,   151,     0,     0,     0,     0,
-       0,     0,     0,   368,   369,     0,     0,   370,   371,     0,
-      -5,     1,     0,     0,     0,   376,   377,     0,     0,     0,
-       0,   379,     2,     0,     0,     3,     4,     5,     0,     6,
-       7,     8,     9,    10,     0,    11,    12,    13,     0,    14,
-      15,    16,     0,    17,     0,    18,     0,     0,     0,    19,
-       0,    20,    21,    22,     0,     0,    23,     0,     0,     0,
-       0,    24,    25,    26,     0,     0,     0,    27,     0,     0,
-       0,    28,    29,    30,    31,     0,    32,     0,     0,     0,
-       0,     0,     0,     0,     0,    33,     0,     0,     0,     0,
-       0,     0,    34,    35,    36,    37,    38,     0,     0,    39,
-      40,    41,    42,     0,    43,    44,     0,     0,     2,    -5,
-      45,     3,     4,     5,    46,     6,     7,     8,     9,    10,
-       0,    11,    12,    13,     0,    14,    15,    16,     0,    17,
-       0,    18,     0,     0,     0,    19,     0,    20,    21,    22,
-       0,     0,    23,     0,     0,     0,     0,    24,    25,    26,
-       0,     0,     0,    27,     0,     0,     0,    28,    29,    30,
-      31,     0,    32,     0,     0,     0,     0,     0,     0,     0,
-       0,    33,     0,     0,     0,     0,     0,     0,    34,    35,
-      36,    37,    38,     0,     0,    39,    40,    41,    42,     0,
-      43,    44,     0,     0,     2,     0,    45,     3,     4,     5,
-      46,     6,     7,     8,     9,    10,     0,    11,    12,    13,
-       0,    14,    15,    16,     0,    17,   322,    18,     0,     0,
-       0,    19,     0,    20,    21,    22,     0,     0,     0,     0,
+      71,   232,   133,    72,    73,    75,   127,   128,    78,    75,
+      81,    75,   110,   243,    99,   100,    80,    94,    83,    51,
+      98,   173,   299,   142,    67,   280,   107,    94,   177,   113,
+     114,   115,   116,   117,   118,   264,   174,   158,    77,   123,
+     124,   125,   126,   178,   162,   281,   150,   151,   324,   130,
+     270,   132,    85,   134,   101,   102,   324,   268,   321,   299,
+     288,   273,   298,   226,   269,   154,   299,   269,   157,   103,
+     155,    86,   289,   126,    97,   155,   167,   156,   160,   269,
+     126,   322,   159,   310,   164,   104,   165,   311,   228,   229,
+     182,   313,   141,   157,   198,   142,   262,   263,   176,   257,
+     197,   198,   141,   294,   258,   142,   129,   105,   198,   145,
+     146,   147,   148,   149,    90,   106,    92,   265,   150,   151,
+     267,   111,   148,   149,    14,   233,   119,   201,   150,   151,
+     121,   207,   208,   209,   210,   211,   212,   213,   214,   215,
+     216,   217,   218,   219,   220,   221,   222,   223,    51,   126,
+     306,   307,   122,   227,   332,   333,   153,   131,   336,   337,
+     157,   283,   231,   284,   163,   166,   235,   236,   172,   237,
+     238,   179,   183,   241,   242,   194,   195,   244,   297,   355,
+     246,   247,   248,   249,   250,   251,   252,   253,   254,   255,
+     224,   230,   309,   198,   259,   239,   312,   245,   256,   279,
+     305,   266,   287,   285,   318,   295,   304,   320,   303,   299,
+     282,   327,   338,   340,   349,   330,   350,   358,   278,   334,
+     316,   317,   359,   319,   362,   339,   331,   341,   199,   175,
+     234,   109,   329,     0,     0,   271,   272,     0,   351,   352,
+     353,   354,   141,   356,   357,   142,   343,   345,     0,     0,
+       0,   348,     0,     0,   126,     0,   361,     0,     0,   364,
+     146,   147,   148,   149,     0,     0,     0,     0,   150,   151,
+     290,   291,   292,   293,     0,     0,     0,   296,   342,   344,
+       0,     0,   347,     0,     0,     0,     0,     0,     0,     0,
+       0,   308,     0,     0,     0,     0,     0,     0,   314,     0,
+       0,   360,    -5,     1,     0,     0,     0,     0,   363,     0,
+       0,     0,     0,     0,     2,     0,     0,     3,     4,     5,
+     335,     6,     7,     8,     9,    10,     0,    11,    12,    13,
+       0,    14,    15,    16,     0,    17,     0,    18,     0,     0,
+       0,    19,     0,    20,    21,    22,     0,     0,    23,     0,
        0,     0,     0,    24,    25,    26,     0,     0,     0,    27,
-       0,     0,     0,     0,     0,    30,    31,     0,    32,     0,
+       0,     0,     0,    28,    29,    30,    31,     0,    32,     0,
        0,     0,     0,     0,     0,     0,     0,    33,     0,     0,
        0,     0,     0,     0,    34,    35,    36,    37,    38,     0,
-       0,    39,    40,     0,    42,     0,    43,    44,     0,     0,
-       2,   261,    45,     3,     4,     5,    46,     6,     7,     8,
+       0,    39,    40,    41,    42,     0,    43,    44,     0,     0,
+       2,    -5,    45,     3,     4,     5,    46,     6,     7,     8,
        9,    10,     0,    11,    12,    13,     0,    14,    15,    16,
        0,    17,     0,    18,     0,     0,     0,    19,     0,    20,
-      21,    22,     0,     0,     0,     0,     0,     0,     0,    24,
-      25,    26,     0,     0,     0,    27,     0,     0,     0,     0,
-       0,    30,    31,     0,    32,     0,     0,     0,     0,     0,
+      21,    22,     0,     0,    23,     0,     0,     0,     0,    24,
+      25,    26,     0,     0,     0,    27,     0,     0,     0,    28,
+      29,    30,    31,     0,    32,     0,     0,     0,     0,     0,
        0,     0,     0,    33,     0,     0,     0,     0,     0,     0,
-      34,    35,    36,    37,    38,     0,     0,    39,    40,     0,
-      42,     0,    43,    44,     0,     0,     2,   261,    45,     3,
+      34,    35,    36,    37,    38,     0,     0,    39,    40,    41,
+      42,     0,    43,    44,     0,     0,     2,     0,    45,     3,
        4,     5,    46,     6,     7,     8,     9,    10,     0,    11,
-      12,    13,     0,    14,    15,    16,   241,    17,     0,    18,
-       0,     0,     0,    19,     0,    20,    21,   135,   136,     0,
-       0,   137,   138,   139,   140,    24,   141,    26,     0,   142,
-     143,   144,     0,     0,     0,     0,     0,    30,    31,     0,
-      32,     0,     0,   145,   146,   147,   148,   149,     0,    33,
-       0,     0,   150,   151,     0,     0,    34,    35,    36,    37,
-      38,     0,     0,     0,    40,     0,    42,     2,    43,    44,
-       3,     4,     5,     0,    45,     0,     0,     0,    46,     0,
-      11,    12,    13,     0,    14,    68,    16,     0,    17,     0,
-       0,     0,     0,     0,     0,    88,     0,     0,     0,     0,
-      89,     0,    90,    91,    92,    93,    69,     2,    26,     0,
-       3,     4,     5,     0,     0,     0,     0,     0,     0,     0,
-      11,    12,    13,     0,    14,    68,    16,     0,    17,     0,
-      33,     0,     0,     0,     0,    88,     0,    34,    35,    36,
-      37,    38,    90,     0,    92,     0,    69,    70,    26,    43,
-      44,     0,     0,     0,     0,    45,     0,     0,     0,    46,
-     108,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      33,     0,     0,     0,     0,     0,     0,    34,    35,    36,
-      37,    38,     0,     0,     0,     0,     0,    70,     2,    43,
-      44,     3,     4,     5,     0,    45,     0,     0,     0,    46,
-       0,    11,    12,    13,     0,    14,    68,    16,     0,    17,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    69,     2,    26,
-       0,     3,     4,     5,     0,     0,     0,     0,     0,     0,
-       0,    11,    12,    13,     0,    14,    68,    16,     0,    17,
-       0,    33,     0,     0,     0,     0,     0,     0,    34,    35,
-      36,    37,    38,     0,     0,     0,     0,    69,    70,    26,
-      43,    44,     0,     0,     0,     0,    45,     0,     0,     0,
-      46,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    33,     0,     0,     0,     0,     0,     0,    34,    35,
-      36,    37,    38,     0,     0,     0,     0,     0,    70,     2,
-      43,    44,     3,     4,     5,     0,    74,     0,     0,     0,
+      12,    13,     0,    14,    15,    16,     0,    17,   315,    18,
+       0,     0,     0,    19,     0,    20,    21,    22,     0,     0,
+       0,     0,     0,     0,     0,    24,    25,    26,     0,     0,
+       0,    27,     0,     0,     0,     0,     0,    30,    31,     0,
+      32,     0,     0,     0,     0,     0,     0,     0,     0,    33,
+       0,     0,     0,     0,     0,     0,    34,    35,    36,    37,
+      38,     0,     0,    39,    40,     0,    42,     0,    43,    44,
+       0,     0,     2,   260,    45,     3,     4,     5,    46,     6,
+       7,     8,     9,    10,     0,    11,    12,    13,     0,    14,
+      15,    16,     0,    17,     0,    18,     0,     0,     0,    19,
+       0,    20,    21,    22,     0,     0,     0,     0,     0,     0,
+       0,    24,    25,    26,     0,     0,     0,    27,     0,     0,
+       0,     0,     0,    30,    31,     0,    32,     0,     0,     0,
+       0,     0,     0,     0,     0,    33,     0,     0,     0,     0,
+       0,     0,    34,    35,    36,    37,    38,     0,     0,    39,
+      40,     0,    42,     0,    43,    44,     0,     0,     2,   260,
+      45,     3,     4,     5,    46,     6,     7,     8,     9,    10,
+       0,    11,    12,    13,     0,    14,    15,    16,   240,    17,
+       0,    18,     0,     0,     0,    19,     0,    20,    21,   135,
+     136,     0,     0,   137,   138,   139,   140,    24,   141,    26,
+       0,   142,   143,   144,     0,     0,     0,     0,     0,    30,
+      31,     0,    32,     0,     0,   145,   146,   147,   148,   149,
+       0,    33,     0,     0,   150,   151,     0,     0,    34,    35,
+      36,    37,    38,     0,     0,     0,    40,     0,    42,     2,
+      43,    44,     3,     4,     5,     0,    45,     0,     0,     0,
       46,     0,    11,    12,    13,     0,    14,    68,    16,     0,
-      17,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    69,     2,
+      17,     0,     0,     0,     0,     0,     0,    88,     0,     0,
+       0,     0,    89,     0,    90,    91,    92,    93,    69,     2,
       26,     0,     3,     4,     5,     0,     0,     0,     0,     0,
        0,     0,    11,    12,    13,     0,    14,    68,    16,     0,
-      17,     0,    33,     0,     0,     0,     0,     0,     0,    34,
-      35,    36,    37,    38,     0,     0,     0,     0,    69,    70,
-      26,    43,    44,     0,     0,     0,     0,    79,     0,     0,
-       0,    46,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    33,     0,     0,   169,     0,     0,     0,    34,
+      17,     0,    33,     0,     0,     0,     0,    88,     0,    34,
+      35,    36,    37,    38,    90,     0,    92,     0,    69,    70,
+      26,    43,    44,     0,     0,     0,     0,    45,     0,     0,
+       0,    46,   108,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    33,     0,     0,     0,     0,     0,     0,    34,
       35,    36,    37,    38,     0,     0,     0,     0,     0,    70,
-       0,    43,    44,     0,     0,     0,     0,    82,   135,   136,
-       0,    46,   137,   138,   139,   140,     0,   141,   170,   171,
-     142,   143,   144,   186,     0,     0,     0,     0,     0,     0,
-     187,     0,     0,     0,   145,   146,   147,   148,   149,     0,
-       0,   135,   136,   150,   151,   137,   138,   139,   140,     0,
-     141,     0,     0,   142,   143,   144,   188,     0,     0,     0,
-       0,     0,     0,   189,     0,     0,     0,   145,   146,   147,
-     148,   149,     0,     0,   135,   136,   150,   151,   137,   138,
-     139,   140,     0,   141,     0,     0,   142,   143,   144,   190,
-       0,     0,     0,     0,     0,     0,   191,     0,     0,     0,
-     145,   146,   147,   148,   149,     0,     0,   135,   136,   150,
-     151,   137,   138,   139,   140,     0,   141,     0,     0,   142,
-     143,   144,   275,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   145,   146,   147,   148,   149,     0,     0,
-     135,   136,   150,   151,   137,   138,   139,   140,     0,   141,
-       0,     0,   142,   143,   144,   276,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   145,   146,   147,   148,
+       2,    43,    44,     3,     4,     5,     0,    45,     0,     0,
+       0,    46,     0,    11,    12,    13,     0,    14,    68,    16,
+       0,    17,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    69,
+       2,    26,     0,     3,     4,     5,     0,     0,     0,     0,
+       0,     0,     0,    11,    12,    13,     0,    14,    68,    16,
+       0,    17,     0,    33,     0,     0,     0,     0,     0,     0,
+      34,    35,    36,    37,    38,     0,     0,     0,     0,    69,
+      70,    26,    43,    44,     0,     0,     0,     0,    45,     0,
+       0,     0,    46,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,    33,     0,     0,     0,     0,     0,     0,
+      34,    35,    36,    37,    38,     0,     0,     0,     0,     0,
+      70,     2,    43,    44,     3,     4,     5,     0,    74,     0,
+       0,     0,    46,     0,    11,    12,    13,     0,    14,    68,
+      16,     0,    17,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      69,     2,    26,     0,     3,     4,     5,     0,     0,     0,
+       0,     0,     0,     0,    11,    12,    13,     0,    14,    68,
+      16,     0,    17,     0,    33,     0,     0,     0,     0,     0,
+       0,    34,    35,    36,    37,    38,     0,     0,     0,     0,
+      69,    70,    26,    43,    44,     0,     0,     0,     0,    79,
+       0,     0,     0,    46,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,    33,     0,     0,   169,     0,     0,
+       0,    34,    35,    36,    37,    38,     0,     0,     0,     0,
+       0,    70,     0,    43,    44,     0,     0,     0,     0,    82,
+     135,   136,     0,    46,   137,   138,   139,   140,     0,   141,
+     170,   171,   142,   143,   144,   184,     0,     0,     0,     0,
+       0,     0,   185,     0,     0,     0,   145,   146,   147,   148,
      149,     0,     0,   135,   136,   150,   151,   137,   138,   139,
-     140,     0,   141,     0,     0,   142,   143,   144,   277,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   145,
+     140,     0,   141,     0,     0,   142,   143,   144,   186,     0,
+       0,     0,     0,     0,     0,   187,     0,     0,     0,   145,
      146,   147,   148,   149,     0,     0,   135,   136,   150,   151,
      137,   138,   139,   140,     0,   141,     0,     0,   142,   143,
-     144,   278,     0,     0,     0,     0,     0,     0,     0,     0,
+     144,   188,     0,     0,     0,     0,     0,     0,   189,     0,
        0,     0,   145,   146,   147,   148,   149,     0,     0,   135,
      136,   150,   151,   137,   138,   139,   140,     0,   141,     0,
-       0,   142,   143,   144,     0,     0,     0,     0,     0,   203,
-     204,     0,     0,     0,     0,   145,   146,   147,   148,   149,
+       0,   142,   143,   144,   190,     0,     0,     0,     0,     0,
+       0,   191,     0,     0,     0,   145,   146,   147,   148,   149,
        0,     0,   135,   136,   150,   151,   137,   138,   139,   140,
-       0,   141,     0,     0,   142,   143,   144,     0,     0,     0,
-       0,     0,   335,   336,     0,     0,     0,     0,   145,   146,
+       0,   141,     0,     0,   142,   143,   144,   274,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   145,   146,
      147,   148,   149,     0,     0,   135,   136,   150,   151,   137,
      138,   139,   140,     0,   141,     0,     0,   142,   143,   144,
-       0,     0,     0,     0,     0,   345,   346,     0,     0,     0,
+     275,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,   145,   146,   147,   148,   149,     0,     0,   135,   136,
      150,   151,   137,   138,   139,   140,     0,   141,     0,     0,
-     142,   143,   144,     0,     0,     0,     0,     0,   358,   359,
+     142,   143,   144,   276,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,   145,   146,   147,   148,   149,     0,
        0,   135,   136,   150,   151,   137,   138,   139,   140,     0,
-     141,     0,     0,   142,   143,   144,     0,     0,     0,     0,
-       0,     0,     0,   206,     0,     0,     0,   145,   146,   147,
+     141,     0,     0,   142,   143,   144,   277,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   145,   146,   147,
      148,   149,     0,     0,   135,   136,   150,   151,   137,   138,
      139,   140,     0,   141,     0,     0,   142,   143,   144,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   181,     0,
-     145,   146,   147,   148,   149,     0,   207,   135,   136,   150,
+       0,     0,     0,     0,   202,   203,     0,     0,     0,     0,
+     145,   146,   147,   148,   149,     0,     0,   135,   136,   150,
      151,   137,   138,   139,   140,     0,   141,     0,     0,   142,
-     143,   144,     0,     0,     0,     0,     0,     0,     0,     0,
+     143,   144,     0,     0,     0,     0,     0,   325,   326,     0,
        0,     0,     0,   145,   146,   147,   148,   149,     0,     0,
      135,   136,   150,   151,   137,   138,   139,   140,     0,   141,
        0,     0,   142,   143,   144,     0,     0,     0,     0,     0,
-     192,   193,     0,     0,     0,     0,   145,   146,   147,   148,
+     346,     0,     0,     0,     0,     0,   145,   146,   147,   148,
      149,     0,     0,   135,   136,   150,   151,   137,   138,   139,
      140,     0,   141,     0,     0,   142,   143,   144,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   145,
-     146,   147,   148,   149,     0,     0,     0,   196,   150,   151,
-     135,   136,     0,     0,   137,   138,   139,   140,     0,   141,
-       0,     0,   142,   143,   144,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   145,   146,   147,   148,
-     149,     0,     0,   135,   136,   150,   151,   137,   138,     0,
-       0,     0,   141,     0,     0,   142,   143,   144,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   145,
-     146,   147,   148,   149,     0,     0,     0,     0,   150,   151
+       0,     0,     0,     0,     0,   205,     0,     0,     0,   145,
+     146,   147,   148,   149,     0,     0,   135,   136,   150,   151,
+     137,   138,   139,   140,     0,   141,     0,     0,   142,   143,
+     144,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     181,     0,   145,   146,   147,   148,   149,     0,   206,   135,
+     136,   150,   151,   137,   138,   139,   140,     0,   141,     0,
+       0,   142,   143,   144,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   145,   146,   147,   148,   149,
+       0,     0,   135,   136,   150,   151,   137,   138,   139,   140,
+       0,   141,     0,     0,   142,   143,   144,     0,     0,     0,
+       0,     0,   192,   193,     0,     0,     0,     0,   145,   146,
+     147,   148,   149,     0,     0,   135,   136,   150,   151,   137,
+     138,   139,   140,     0,   141,     0,     0,   142,   143,   144,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   145,   146,   147,   148,   149,     0,     0,     0,   196,
+     150,   151,   135,   136,     0,     0,   137,   138,   139,   140,
+       0,   141,     0,     0,   142,   143,   144,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   145,   146,
+     147,   148,   149,     0,     0,   135,   136,   150,   151,   137,
+     138,     0,     0,     0,   141,     0,     0,   142,   143,   144,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   145,   146,   147,   148,   149,     0,     0,     0,     0,
+     150,   151
 };
 
 static const yytype_int16 yycheck[] =
 {
-       4,     0,    56,     7,     8,     9,    46,     0,    12,    13,
-      14,    15,    31,    65,   101,   298,    13,    21,    15,   106,
-      24,    34,    47,    99,    49,    38,    30,    31,    38,    33,
-      34,    35,    36,    37,    38,    76,   319,    77,    79,    43,
-      44,    45,    46,    79,    84,   328,   302,    60,    36,    53,
-      60,    55,   101,    57,    56,    96,    97,   106,   314,    15,
-      16,   102,   103,   319,    56,    69,   102,   103,    56,    71,
-      74,   302,   328,    77,    30,    79,    95,    74,    82,    71,
-      84,    52,    79,   314,    88,   204,    90,    30,   207,   233,
-     109,    76,    37,    38,    79,    30,    99,    30,   102,    30,
-     244,    58,    59,   106,   105,   106,    99,    30,    93,    94,
-      95,    96,    97,    99,    30,    60,   168,   102,   103,    99,
-     106,    29,    30,    30,   101,    30,   106,   131,   180,   106,
-     129,   135,   136,   137,   138,   139,   140,   141,   142,   143,
-     144,   145,   146,   147,   148,   149,   150,   151,    30,   153,
-     101,   203,   101,   157,   100,   106,    71,   106,   289,   290,
-     100,    47,   166,    30,   106,   106,   170,   171,   287,   173,
-     174,    54,   106,   177,   178,    30,   106,   181,    30,   106,
+       4,   168,    56,     7,     8,     9,    46,     0,    12,    13,
+      14,    15,    31,   180,    58,    59,    13,    21,    15,     0,
+      24,    56,    38,    79,    99,    36,    30,    31,    56,    33,
+      34,    35,    36,    37,    38,   202,    71,    77,    30,    43,
+      44,    45,    46,    71,    84,    56,   102,   103,   312,    53,
+     232,    55,    52,    57,    15,    16,   320,    99,    37,    38,
+      99,   243,    34,   101,   106,    69,    38,   106,   106,    30,
+      74,    30,    99,    77,    30,    79,    95,    74,    82,   106,
+      84,    60,    79,    99,    88,    30,    90,   297,   101,   101,
+     109,   301,    76,   106,   106,    79,   200,   201,   102,   101,
+     105,   106,    76,   101,   106,    79,    99,    30,   106,    93,
+      94,    95,    96,    97,    47,    30,    49,   203,   102,   103,
+     206,    30,    96,    97,    29,    30,    30,   131,   102,   103,
+      30,   135,   136,   137,   138,   139,   140,   141,   142,   143,
+     144,   145,   146,   147,   148,   149,   150,   151,   129,   153,
+     288,   289,   100,   157,   321,   322,   100,    71,   325,   326,
+     106,   265,   166,   267,   106,    47,   170,   171,    30,   173,
+     174,    54,   106,   177,   178,   106,    30,   181,   282,   346,
      184,   185,   186,   187,   188,   189,   190,   191,   192,   193,
-     309,   310,    30,   312,   198,    71,    30,   316,    49,    30,
-     106,    34,   206,    30,    34,    56,   325,    56,    30,    38,
-      30,   265,   106,    34,   201,   202,    67,    68,    34,   259,
-      71,    72,    73,    74,    30,    76,    34,    37,    79,    80,
-      81,   350,    34,   129,   298,    31,   240,   241,   357,   102,
-     169,    -1,    93,    94,    95,    96,    97,    -1,   367,   301,
-      -1,   102,   103,    -1,    -1,   259,    -1,    -1,    -1,   313,
-      -1,    -1,   316,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   275,   276,   277,   278,    -1,    -1,    -1,   282,   266,
-      -1,   268,    -1,   335,   336,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   296,   345,   346,   349,   283,    -1,    -1,    -1,
-      -1,   305,   356,    -1,    -1,    -1,   358,   359,    -1,    -1,
-     297,    -1,   366,    -1,   318,   302,    -1,   304,    -1,    -1,
-     374,    -1,    -1,    -1,   311,    -1,    -1,   314,   315,    -1,
-     334,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    76,   326,
-     327,    79,    -1,   330,   331,    -1,   333,    -1,    -1,    -1,
-      -1,    -1,   339,    -1,    -1,   342,    94,    95,    96,    97,
-      -1,    -1,    -1,    -1,   102,   103,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   360,   361,    -1,    -1,   364,   365,    -1,
-       0,     1,    -1,    -1,    -1,   372,   373,    -1,    -1,    -1,
-      -1,   378,    12,    -1,    -1,    15,    16,    17,    -1,    19,
-      20,    21,    22,    23,    -1,    25,    26,    27,    -1,    29,
-      30,    31,    -1,    33,    -1,    35,    -1,    -1,    -1,    39,
-      -1,    41,    42,    43,    -1,    -1,    46,    -1,    -1,    -1,
-      -1,    51,    52,    53,    -1,    -1,    -1,    57,    -1,    -1,
-      -1,    61,    62,    63,    64,    -1,    66,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    75,    -1,    -1,    -1,    -1,
-      -1,    -1,    82,    83,    84,    85,    86,    -1,    -1,    89,
-      90,    91,    92,    -1,    94,    95,    -1,    -1,    12,    99,
-     100,    15,    16,    17,   104,    19,    20,    21,    22,    23,
-      -1,    25,    26,    27,    -1,    29,    30,    31,    -1,    33,
-      -1,    35,    -1,    -1,    -1,    39,    -1,    41,    42,    43,
-      -1,    -1,    46,    -1,    -1,    -1,    -1,    51,    52,    53,
-      -1,    -1,    -1,    57,    -1,    -1,    -1,    61,    62,    63,
-      64,    -1,    66,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    75,    -1,    -1,    -1,    -1,    -1,    -1,    82,    83,
-      84,    85,    86,    -1,    -1,    89,    90,    91,    92,    -1,
-      94,    95,    -1,    -1,    12,    -1,   100,    15,    16,    17,
-     104,    19,    20,    21,    22,    23,    -1,    25,    26,    27,
-      -1,    29,    30,    31,    -1,    33,    34,    35,    -1,    -1,
-      -1,    39,    -1,    41,    42,    43,    -1,    -1,    -1,    -1,
+      30,    30,   296,   106,   198,    71,   300,    30,    30,    34,
+     286,   205,    30,   106,   308,    56,    30,   311,    34,    38,
+     264,    30,   106,    34,    30,   319,    34,    34,   258,   323,
+     306,   307,    34,   309,    37,   329,   320,   331,   129,   102,
+     169,    31,   318,    -1,    -1,   239,   240,    -1,   342,   343,
+     344,   345,    76,   347,   348,    79,   332,   333,    -1,    -1,
+      -1,   337,    -1,    -1,   258,    -1,   360,    -1,    -1,   363,
+      94,    95,    96,    97,    -1,    -1,    -1,    -1,   102,   103,
+     274,   275,   276,   277,    -1,    -1,    -1,   281,   332,   333,
+      -1,    -1,   336,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   295,    -1,    -1,    -1,    -1,    -1,    -1,   302,    -1,
+      -1,   355,     0,     1,    -1,    -1,    -1,    -1,   362,    -1,
+      -1,    -1,    -1,    -1,    12,    -1,    -1,    15,    16,    17,
+     324,    19,    20,    21,    22,    23,    -1,    25,    26,    27,
+      -1,    29,    30,    31,    -1,    33,    -1,    35,    -1,    -1,
+      -1,    39,    -1,    41,    42,    43,    -1,    -1,    46,    -1,
       -1,    -1,    -1,    51,    52,    53,    -1,    -1,    -1,    57,
-      -1,    -1,    -1,    -1,    -1,    63,    64,    -1,    66,    -1,
+      -1,    -1,    -1,    61,    62,    63,    64,    -1,    66,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    75,    -1,    -1,
       -1,    -1,    -1,    -1,    82,    83,    84,    85,    86,    -1,
-      -1,    89,    90,    -1,    92,    -1,    94,    95,    -1,    -1,
+      -1,    89,    90,    91,    92,    -1,    94,    95,    -1,    -1,
       12,    99,   100,    15,    16,    17,   104,    19,    20,    21,
       22,    23,    -1,    25,    26,    27,    -1,    29,    30,    31,
       -1,    33,    -1,    35,    -1,    -1,    -1,    39,    -1,    41,
-      42,    43,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    51,
-      52,    53,    -1,    -1,    -1,    57,    -1,    -1,    -1,    -1,
-      -1,    63,    64,    -1,    66,    -1,    -1,    -1,    -1,    -1,
+      42,    43,    -1,    -1,    46,    -1,    -1,    -1,    -1,    51,
+      52,    53,    -1,    -1,    -1,    57,    -1,    -1,    -1,    61,
+      62,    63,    64,    -1,    66,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    75,    -1,    -1,    -1,    -1,    -1,    -1,
-      82,    83,    84,    85,    86,    -1,    -1,    89,    90,    -1,
-      92,    -1,    94,    95,    -1,    -1,    12,    99,   100,    15,
+      82,    83,    84,    85,    86,    -1,    -1,    89,    90,    91,
+      92,    -1,    94,    95,    -1,    -1,    12,    -1,   100,    15,
       16,    17,   104,    19,    20,    21,    22,    23,    -1,    25,
-      26,    27,    -1,    29,    30,    31,    56,    33,    -1,    35,
-      -1,    -1,    -1,    39,    -1,    41,    42,    67,    68,    -1,
-      -1,    71,    72,    73,    74,    51,    76,    53,    -1,    79,
-      80,    81,    -1,    -1,    -1,    -1,    -1,    63,    64,    -1,
-      66,    -1,    -1,    93,    94,    95,    96,    97,    -1,    75,
-      -1,    -1,   102,   103,    -1,    -1,    82,    83,    84,    85,
-      86,    -1,    -1,    -1,    90,    -1,    92,    12,    94,    95,
-      15,    16,    17,    -1,   100,    -1,    -1,    -1,   104,    -1,
-      25,    26,    27,    -1,    29,    30,    31,    -1,    33,    -1,
-      -1,    -1,    -1,    -1,    -1,    40,    -1,    -1,    -1,    -1,
-      45,    -1,    47,    48,    49,    50,    51,    12,    53,    -1,
-      15,    16,    17,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      25,    26,    27,    -1,    29,    30,    31,    -1,    33,    -1,
-      75,    -1,    -1,    -1,    -1,    40,    -1,    82,    83,    84,
-      85,    86,    47,    -1,    49,    -1,    51,    92,    53,    94,
-      95,    -1,    -1,    -1,    -1,   100,    -1,    -1,    -1,   104,
-      65,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      75,    -1,    -1,    -1,    -1,    -1,    -1,    82,    83,    84,
-      85,    86,    -1,    -1,    -1,    -1,    -1,    92,    12,    94,
-      95,    15,    16,    17,    -1,   100,    -1,    -1,    -1,   104,
-      -1,    25,    26,    27,    -1,    29,    30,    31,    -1,    33,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    51,    12,    53,
-      -1,    15,    16,    17,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    25,    26,    27,    -1,    29,    30,    31,    -1,    33,
-      -1,    75,    -1,    -1,    -1,    -1,    -1,    -1,    82,    83,
-      84,    85,    86,    -1,    -1,    -1,    -1,    51,    92,    53,
-      94,    95,    -1,    -1,    -1,    -1,   100,    -1,    -1,    -1,
-     104,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    75,    -1,    -1,    -1,    -1,    -1,    -1,    82,    83,
-      84,    85,    86,    -1,    -1,    -1,    -1,    -1,    92,    12,
+      26,    27,    -1,    29,    30,    31,    -1,    33,    34,    35,
+      -1,    -1,    -1,    39,    -1,    41,    42,    43,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    51,    52,    53,    -1,    -1,
+      -1,    57,    -1,    -1,    -1,    -1,    -1,    63,    64,    -1,
+      66,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    75,
+      -1,    -1,    -1,    -1,    -1,    -1,    82,    83,    84,    85,
+      86,    -1,    -1,    89,    90,    -1,    92,    -1,    94,    95,
+      -1,    -1,    12,    99,   100,    15,    16,    17,   104,    19,
+      20,    21,    22,    23,    -1,    25,    26,    27,    -1,    29,
+      30,    31,    -1,    33,    -1,    35,    -1,    -1,    -1,    39,
+      -1,    41,    42,    43,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    51,    52,    53,    -1,    -1,    -1,    57,    -1,    -1,
+      -1,    -1,    -1,    63,    64,    -1,    66,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    75,    -1,    -1,    -1,    -1,
+      -1,    -1,    82,    83,    84,    85,    86,    -1,    -1,    89,
+      90,    -1,    92,    -1,    94,    95,    -1,    -1,    12,    99,
+     100,    15,    16,    17,   104,    19,    20,    21,    22,    23,
+      -1,    25,    26,    27,    -1,    29,    30,    31,    56,    33,
+      -1,    35,    -1,    -1,    -1,    39,    -1,    41,    42,    67,
+      68,    -1,    -1,    71,    72,    73,    74,    51,    76,    53,
+      -1,    79,    80,    81,    -1,    -1,    -1,    -1,    -1,    63,
+      64,    -1,    66,    -1,    -1,    93,    94,    95,    96,    97,
+      -1,    75,    -1,    -1,   102,   103,    -1,    -1,    82,    83,
+      84,    85,    86,    -1,    -1,    -1,    90,    -1,    92,    12,
       94,    95,    15,    16,    17,    -1,   100,    -1,    -1,    -1,
      104,    -1,    25,    26,    27,    -1,    29,    30,    31,    -1,
-      33,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    51,    12,
+      33,    -1,    -1,    -1,    -1,    -1,    -1,    40,    -1,    -1,
+      -1,    -1,    45,    -1,    47,    48,    49,    50,    51,    12,
       53,    -1,    15,    16,    17,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    25,    26,    27,    -1,    29,    30,    31,    -1,
-      33,    -1,    75,    -1,    -1,    -1,    -1,    -1,    -1,    82,
-      83,    84,    85,    86,    -1,    -1,    -1,    -1,    51,    92,
+      33,    -1,    75,    -1,    -1,    -1,    -1,    40,    -1,    82,
+      83,    84,    85,    86,    47,    -1,    49,    -1,    51,    92,
       53,    94,    95,    -1,    -1,    -1,    -1,   100,    -1,    -1,
-      -1,   104,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    75,    -1,    -1,    44,    -1,    -1,    -1,    82,
+      -1,   104,    65,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    75,    -1,    -1,    -1,    -1,    -1,    -1,    82,
       83,    84,    85,    86,    -1,    -1,    -1,    -1,    -1,    92,
-      -1,    94,    95,    -1,    -1,    -1,    -1,   100,    67,    68,
-      -1,   104,    71,    72,    73,    74,    -1,    76,    77,    78,
-      79,    80,    81,    49,    -1,    -1,    -1,    -1,    -1,    -1,
-      56,    -1,    -1,    -1,    93,    94,    95,    96,    97,    -1,
-      -1,    67,    68,   102,   103,    71,    72,    73,    74,    -1,
-      76,    -1,    -1,    79,    80,    81,    49,    -1,    -1,    -1,
-      -1,    -1,    -1,    56,    -1,    -1,    -1,    93,    94,    95,
-      96,    97,    -1,    -1,    67,    68,   102,   103,    71,    72,
-      73,    74,    -1,    76,    -1,    -1,    79,    80,    81,    49,
-      -1,    -1,    -1,    -1,    -1,    -1,    56,    -1,    -1,    -1,
-      93,    94,    95,    96,    97,    -1,    -1,    67,    68,   102,
-     103,    71,    72,    73,    74,    -1,    76,    -1,    -1,    79,
-      80,    81,    49,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    93,    94,    95,    96,    97,    -1,    -1,
-      67,    68,   102,   103,    71,    72,    73,    74,    -1,    76,
-      -1,    -1,    79,    80,    81,    49,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    93,    94,    95,    96,
+      12,    94,    95,    15,    16,    17,    -1,   100,    -1,    -1,
+      -1,   104,    -1,    25,    26,    27,    -1,    29,    30,    31,
+      -1,    33,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    51,
+      12,    53,    -1,    15,    16,    17,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    25,    26,    27,    -1,    29,    30,    31,
+      -1,    33,    -1,    75,    -1,    -1,    -1,    -1,    -1,    -1,
+      82,    83,    84,    85,    86,    -1,    -1,    -1,    -1,    51,
+      92,    53,    94,    95,    -1,    -1,    -1,    -1,   100,    -1,
+      -1,    -1,   104,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    75,    -1,    -1,    -1,    -1,    -1,    -1,
+      82,    83,    84,    85,    86,    -1,    -1,    -1,    -1,    -1,
+      92,    12,    94,    95,    15,    16,    17,    -1,   100,    -1,
+      -1,    -1,   104,    -1,    25,    26,    27,    -1,    29,    30,
+      31,    -1,    33,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      51,    12,    53,    -1,    15,    16,    17,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    25,    26,    27,    -1,    29,    30,
+      31,    -1,    33,    -1,    75,    -1,    -1,    -1,    -1,    -1,
+      -1,    82,    83,    84,    85,    86,    -1,    -1,    -1,    -1,
+      51,    92,    53,    94,    95,    -1,    -1,    -1,    -1,   100,
+      -1,    -1,    -1,   104,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    75,    -1,    -1,    44,    -1,    -1,
+      -1,    82,    83,    84,    85,    86,    -1,    -1,    -1,    -1,
+      -1,    92,    -1,    94,    95,    -1,    -1,    -1,    -1,   100,
+      67,    68,    -1,   104,    71,    72,    73,    74,    -1,    76,
+      77,    78,    79,    80,    81,    49,    -1,    -1,    -1,    -1,
+      -1,    -1,    56,    -1,    -1,    -1,    93,    94,    95,    96,
       97,    -1,    -1,    67,    68,   102,   103,    71,    72,    73,
       74,    -1,    76,    -1,    -1,    79,    80,    81,    49,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    93,
+      -1,    -1,    -1,    -1,    -1,    56,    -1,    -1,    -1,    93,
       94,    95,    96,    97,    -1,    -1,    67,    68,   102,   103,
       71,    72,    73,    74,    -1,    76,    -1,    -1,    79,    80,
-      81,    49,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      81,    49,    -1,    -1,    -1,    -1,    -1,    -1,    56,    -1,
       -1,    -1,    93,    94,    95,    96,    97,    -1,    -1,    67,
       68,   102,   103,    71,    72,    73,    74,    -1,    76,    -1,
-      -1,    79,    80,    81,    -1,    -1,    -1,    -1,    -1,    54,
-      55,    -1,    -1,    -1,    -1,    93,    94,    95,    96,    97,
+      -1,    79,    80,    81,    49,    -1,    -1,    -1,    -1,    -1,
+      -1,    56,    -1,    -1,    -1,    93,    94,    95,    96,    97,
       -1,    -1,    67,    68,   102,   103,    71,    72,    73,    74,
-      -1,    76,    -1,    -1,    79,    80,    81,    -1,    -1,    -1,
-      -1,    -1,    54,    55,    -1,    -1,    -1,    -1,    93,    94,
+      -1,    76,    -1,    -1,    79,    80,    81,    49,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    93,    94,
       95,    96,    97,    -1,    -1,    67,    68,   102,   103,    71,
       72,    73,    74,    -1,    76,    -1,    -1,    79,    80,    81,
-      -1,    -1,    -1,    -1,    -1,    54,    55,    -1,    -1,    -1,
+      49,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    93,    94,    95,    96,    97,    -1,    -1,    67,    68,
      102,   103,    71,    72,    73,    74,    -1,    76,    -1,    -1,
-      79,    80,    81,    -1,    -1,    -1,    -1,    -1,    54,    55,
+      79,    80,    81,    49,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    93,    94,    95,    96,    97,    -1,
       -1,    67,    68,   102,   103,    71,    72,    73,    74,    -1,
-      76,    -1,    -1,    79,    80,    81,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    56,    -1,    -1,    -1,    93,    94,    95,
+      76,    -1,    -1,    79,    80,    81,    49,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    93,    94,    95,
       96,    97,    -1,    -1,    67,    68,   102,   103,    71,    72,
       73,    74,    -1,    76,    -1,    -1,    79,    80,    81,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    58,    -1,
-      93,    94,    95,    96,    97,    -1,    99,    67,    68,   102,
+      -1,    -1,    -1,    -1,    54,    55,    -1,    -1,    -1,    -1,
+      93,    94,    95,    96,    97,    -1,    -1,    67,    68,   102,
      103,    71,    72,    73,    74,    -1,    76,    -1,    -1,    79,
-      80,    81,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      80,    81,    -1,    -1,    -1,    -1,    -1,    54,    55,    -1,
       -1,    -1,    -1,    93,    94,    95,    96,    97,    -1,    -1,
       67,    68,   102,   103,    71,    72,    73,    74,    -1,    76,
       -1,    -1,    79,    80,    81,    -1,    -1,    -1,    -1,    -1,
-      87,    88,    -1,    -1,    -1,    -1,    93,    94,    95,    96,
+      54,    -1,    -1,    -1,    -1,    -1,    93,    94,    95,    96,
       97,    -1,    -1,    67,    68,   102,   103,    71,    72,    73,
       74,    -1,    76,    -1,    -1,    79,    80,    81,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    93,
-      94,    95,    96,    97,    -1,    -1,    -1,   101,   102,   103,
-      67,    68,    -1,    -1,    71,    72,    73,    74,    -1,    76,
-      -1,    -1,    79,    80,    81,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    93,    94,    95,    96,
-      97,    -1,    -1,    67,    68,   102,   103,    71,    72,    -1,
-      -1,    -1,    76,    -1,    -1,    79,    80,    81,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    93,
-      94,    95,    96,    97,    -1,    -1,    -1,    -1,   102,   103
+      -1,    -1,    -1,    -1,    -1,    56,    -1,    -1,    -1,    93,
+      94,    95,    96,    97,    -1,    -1,    67,    68,   102,   103,
+      71,    72,    73,    74,    -1,    76,    -1,    -1,    79,    80,
+      81,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      58,    -1,    93,    94,    95,    96,    97,    -1,    99,    67,
+      68,   102,   103,    71,    72,    73,    74,    -1,    76,    -1,
+      -1,    79,    80,    81,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    93,    94,    95,    96,    97,
+      -1,    -1,    67,    68,   102,   103,    71,    72,    73,    74,
+      -1,    76,    -1,    -1,    79,    80,    81,    -1,    -1,    -1,
+      -1,    -1,    87,    88,    -1,    -1,    -1,    -1,    93,    94,
+      95,    96,    97,    -1,    -1,    67,    68,   102,   103,    71,
+      72,    73,    74,    -1,    76,    -1,    -1,    79,    80,    81,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    93,    94,    95,    96,    97,    -1,    -1,    -1,   101,
+     102,   103,    67,    68,    -1,    -1,    71,    72,    73,    74,
+      -1,    76,    -1,    -1,    79,    80,    81,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    93,    94,
+      95,    96,    97,    -1,    -1,    67,    68,   102,   103,    71,
+      72,    -1,    -1,    -1,    76,    -1,    -1,    79,    80,    81,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    93,    94,    95,    96,    97,    -1,    -1,    -1,    -1,
+     102,   103
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -1319,24 +1301,23 @@ static const yytype_uint8 yystos[] =
       77,    78,    30,    56,    71,   126,   127,    56,    71,    54,
      140,    58,   135,   106,    49,    56,    49,    56,    49,    56,
       49,    56,    87,    88,   106,    30,   101,   105,   106,   109,
-     121,   123,   127,    54,    55,   122,    56,    99,   127,   127,
+     123,   127,    54,    55,   122,    56,    99,   127,   127,   127,
      127,   127,   127,   127,   127,   127,   127,   127,   127,   127,
-     127,   127,   127,   127,   127,    30,   142,   101,   127,   101,
-     101,    30,   127,   121,    30,   128,   127,   127,   127,   127,
-      71,    56,   127,   127,   121,   127,    30,   127,   127,   127,
-     127,   127,   127,   127,   127,   127,   127,    30,   101,   106,
-     127,    99,   112,   122,   122,   121,   123,   127,   123,    99,
-     106,   142,   127,   127,   142,    49,    49,    49,    49,   146,
-      34,    36,    56,   111,   122,   122,   106,   144,    30,    99,
-      99,   127,   127,   127,   127,   101,    56,   127,   122,    34,
-      38,    60,   114,   115,   116,   120,    34,    30,   123,   144,
-     144,   127,   122,    37,   114,   116,   121,   115,   120,   122,
-     122,   127,    34,   123,   123,   122,   123,   111,   122,   122,
-     111,   123,   127,   116,   120,    54,    55,    30,   143,   123,
-     122,   122,   116,   122,   122,    54,    55,   122,   127,   121,
-     121,   106,   122,    34,   122,    34,   121,   121,    54,    55,
-     111,   123,    30,    34,   111,   123,   121,   121,   122,   122,
-     122,   122,   111,   123,    37,    34,   122,   122,   111,   122
+     127,   127,   127,   127,    30,   142,   101,   127,   101,   101,
+      30,   127,   121,    30,   128,   127,   127,   127,   127,    71,
+      56,   127,   127,   121,   127,    30,   127,   127,   127,   127,
+     127,   127,   127,   127,   127,   127,    30,   101,   106,   127,
+      99,   112,   122,   122,   121,   123,   127,   123,    99,   106,
+     142,   127,   127,   142,    49,    49,    49,    49,   146,    34,
+      36,    56,   111,   122,   122,   106,   144,    30,    99,    99,
+     127,   127,   127,   127,   101,    56,   127,   122,    34,    38,
+     114,   115,   120,    34,    30,   123,   144,   144,   127,   122,
+      99,   114,   122,   114,   127,    34,   123,   123,   122,   123,
+     122,    37,    60,   116,   120,    54,    55,    30,   143,   123,
+     122,   116,   121,   121,   122,   127,   121,   121,   106,   122,
+      34,   122,   111,   123,   111,   123,    54,   111,   123,    30,
+      34,   122,   122,   122,   122,   121,   122,   122,    34,    34,
+     111,   122,    37,   111,   122
 };
 
 #define yyerrok		(yyerrstatus = 0)
@@ -2318,13 +2299,13 @@ yyreduce:
   case 29:
 #line 250 "engines/director/lingo/lingo-gr.y"
     {
-		inst then = 0, end = 0;
-		WRITE_UINT32(&then, (yyvsp[(4) - (6)].code) - (yyvsp[(1) - (6)].code));
-		WRITE_UINT32(&end, (yyvsp[(5) - (6)].code) - (yyvsp[(1) - (6)].code));
-		(*g_lingo->_currentScript)[(yyvsp[(1) - (6)].code) + 1] = then;	/* thenpart */
-		(*g_lingo->_currentScript)[(yyvsp[(1) - (6)].code) + 3] = end;	/* end, if cond fails */
-
-		checkEnd((yyvsp[(6) - (6)].s), "if", true);
+		inst then = 0, else1 = 0, end = 0;
+		WRITE_UINT32(&then, (yyvsp[(4) - (7)].code) - (yyvsp[(1) - (7)].code));
+		WRITE_UINT32(&else1, 0);
+		WRITE_UINT32(&end, (yyvsp[(6) - (7)].code) - (yyvsp[(1) - (7)].code));
+		(*g_lingo->_currentScript)[(yyvsp[(1) - (7)].code) + 1] = then;	/* thenpart */
+		(*g_lingo->_currentScript)[(yyvsp[(1) - (7)].code) + 2] = else1;	/* elsepart */
+		(*g_lingo->_currentScript)[(yyvsp[(1) - (7)].code) + 3] = end; 	/* end, if cond fails */
 
 		g_lingo->processIf(0, 0); ;}
     break;
@@ -2333,46 +2314,32 @@ yyreduce:
 #line 260 "engines/director/lingo/lingo-gr.y"
     {
 		inst then = 0, else1 = 0, end = 0;
-		WRITE_UINT32(&then, (yyvsp[(4) - (9)].code) - (yyvsp[(1) - (9)].code));
-		WRITE_UINT32(&else1, (yyvsp[(6) - (9)].code) - (yyvsp[(1) - (9)].code));
-		WRITE_UINT32(&end, (yyvsp[(9) - (9)].code) - (yyvsp[(1) - (9)].code));
-		(*g_lingo->_currentScript)[(yyvsp[(1) - (9)].code) + 1] = then;	/* thenpart */
-		(*g_lingo->_currentScript)[(yyvsp[(1) - (9)].code) + 2] = else1;	/* elsepart */
-		(*g_lingo->_currentScript)[(yyvsp[(1) - (9)].code) + 3] = end; 	/* end, if cond fails */
+		WRITE_UINT32(&then, (yyvsp[(4) - (10)].code) - (yyvsp[(1) - (10)].code));
+		WRITE_UINT32(&else1, (yyvsp[(6) - (10)].code) - (yyvsp[(1) - (10)].code));
+		WRITE_UINT32(&end, (yyvsp[(10) - (10)].code) - (yyvsp[(1) - (10)].code));
+		(*g_lingo->_currentScript)[(yyvsp[(1) - (10)].code) + 1] = then;	/* thenpart */
+		(*g_lingo->_currentScript)[(yyvsp[(1) - (10)].code) + 2] = else1;	/* elsepart */
+		(*g_lingo->_currentScript)[(yyvsp[(1) - (10)].code) + 3] = end;	/* end, if cond fails */
 
-		g_lingo->processIf(0, (yyvsp[(9) - (9)].code) - (yyvsp[(1) - (9)].code)); ;}
+		g_lingo->processIf(0, (yyvsp[(10) - (10)].code) - (yyvsp[(1) - (10)].code)); ;}
     break;
 
   case 31:
-#line 271 "engines/director/lingo/lingo-gr.y"
+#line 270 "engines/director/lingo/lingo-gr.y"
     {
-		inst then = 0, else1 = 0, end = 0;
+		inst then = 0, end = 0;
 		WRITE_UINT32(&then, (yyvsp[(4) - (6)].code) - (yyvsp[(1) - (6)].code));
-		WRITE_UINT32(&else1, 0);
-		WRITE_UINT32(&end, (yyvsp[(6) - (6)].code) - (yyvsp[(1) - (6)].code));
+		WRITE_UINT32(&end, (yyvsp[(5) - (6)].code) - (yyvsp[(1) - (6)].code));
 		(*g_lingo->_currentScript)[(yyvsp[(1) - (6)].code) + 1] = then;	/* thenpart */
-		(*g_lingo->_currentScript)[(yyvsp[(1) - (6)].code) + 2] = else1;	/* elsepart */
-		(*g_lingo->_currentScript)[(yyvsp[(1) - (6)].code) + 3] = end; 	/* end, if cond fails */
+		(*g_lingo->_currentScript)[(yyvsp[(1) - (6)].code) + 3] = end;	/* end, if cond fails */
+
+		checkEnd((yyvsp[(6) - (6)].s), "if", true);
 
 		g_lingo->processIf(0, 0); ;}
     break;
 
   case 32:
-#line 281 "engines/director/lingo/lingo-gr.y"
-    {
-		inst then = 0, else1 = 0, end = 0;
-		WRITE_UINT32(&then, (yyvsp[(4) - (10)].code) - (yyvsp[(1) - (10)].code));
-		WRITE_UINT32(&else1, (yyvsp[(6) - (10)].code) - (yyvsp[(1) - (10)].code));
-		WRITE_UINT32(&end, (yyvsp[(10) - (10)].code) - (yyvsp[(1) - (10)].code));
-		(*g_lingo->_currentScript)[(yyvsp[(1) - (10)].code) + 1] = then;	/* thenpart */
-		(*g_lingo->_currentScript)[(yyvsp[(1) - (10)].code) + 2] = else1;	/* elsepart */
-		(*g_lingo->_currentScript)[(yyvsp[(1) - (10)].code) + 3] = end;	/* end, if cond fails */
-
-		g_lingo->processIf(0, (yyvsp[(10) - (10)].code) - (yyvsp[(1) - (10)].code)); ;}
-    break;
-
-  case 33:
-#line 291 "engines/director/lingo/lingo-gr.y"
+#line 280 "engines/director/lingo/lingo-gr.y"
     {
 		inst then = 0, else1 = 0, end = 0;
 		WRITE_UINT32(&then, (yyvsp[(4) - (9)].code) - (yyvsp[(1) - (9)].code));
@@ -2385,36 +2352,8 @@ yyreduce:
 		g_lingo->processIf(0, 0); ;}
     break;
 
-  case 34:
-#line 301 "engines/director/lingo/lingo-gr.y"
-    {
-		inst then = 0, else1 = 0, end = 0;
-		WRITE_UINT32(&then, (yyvsp[(4) - (8)].code) - (yyvsp[(1) - (8)].code));
-		WRITE_UINT32(&else1, (yyvsp[(6) - (8)].code) - (yyvsp[(1) - (8)].code));
-		WRITE_UINT32(&end, (yyvsp[(8) - (8)].code) - (yyvsp[(1) - (8)].code));
-		(*g_lingo->_currentScript)[(yyvsp[(1) - (8)].code) + 1] = then;	/* thenpart */
-		(*g_lingo->_currentScript)[(yyvsp[(1) - (8)].code) + 2] = else1;	/* elsepart */
-		(*g_lingo->_currentScript)[(yyvsp[(1) - (8)].code) + 3] = end;	/* end, if cond fails */
-
-		g_lingo->processIf(0, (yyvsp[(8) - (8)].code) - (yyvsp[(1) - (8)].code)); ;}
-    break;
-
   case 35:
-#line 311 "engines/director/lingo/lingo-gr.y"
-    {
-		inst then = 0, else1 = 0, end = 0;
-		WRITE_UINT32(&then, (yyvsp[(4) - (7)].code) - (yyvsp[(1) - (7)].code));
-		WRITE_UINT32(&else1, (yyvsp[(7) - (7)].code) - (yyvsp[(1) - (7)].code));
-		WRITE_UINT32(&end, (yyvsp[(7) - (7)].code) - (yyvsp[(1) - (7)].code));
-		(*g_lingo->_currentScript)[(yyvsp[(1) - (7)].code) + 1] = then;	/* thenpart */
-		(*g_lingo->_currentScript)[(yyvsp[(1) - (7)].code) + 2] = else1;	/* elsepart */
-		(*g_lingo->_currentScript)[(yyvsp[(1) - (7)].code) + 3] = end;	/* end, if cond fails */
-
-		g_lingo->processIf(0, 0); ;}
-    break;
-
-  case 38:
-#line 328 "engines/director/lingo/lingo-gr.y"
+#line 296 "engines/director/lingo/lingo-gr.y"
     {
 		inst then = 0;
 		WRITE_UINT32(&then, (yyvsp[(4) - (6)].code) - (yyvsp[(1) - (6)].code));
@@ -2423,8 +2362,8 @@ yyreduce:
 		g_lingo->codeLabel((yyvsp[(1) - (6)].code)); ;}
     break;
 
-  case 39:
-#line 334 "engines/director/lingo/lingo-gr.y"
+  case 36:
+#line 302 "engines/director/lingo/lingo-gr.y"
     {
 		inst then = 0;
 		WRITE_UINT32(&then, (yyvsp[(5) - (6)].code) - (yyvsp[(1) - (6)].code));
@@ -2433,8 +2372,8 @@ yyreduce:
 		g_lingo->codeLabel((yyvsp[(1) - (6)].code)); ;}
     break;
 
-  case 40:
-#line 342 "engines/director/lingo/lingo-gr.y"
+  case 37:
+#line 310 "engines/director/lingo/lingo-gr.y"
     {
 		inst then = 0;
 		WRITE_UINT32(&then, (yyvsp[(4) - (9)].code) - (yyvsp[(1) - (9)].code));
@@ -2443,39 +2382,41 @@ yyreduce:
 		g_lingo->codeLabel((yyvsp[(1) - (9)].code)); ;}
     break;
 
-  case 41:
-#line 348 "engines/director/lingo/lingo-gr.y"
+  case 38:
+#line 316 "engines/director/lingo/lingo-gr.y"
     {
-		inst then = 0;
-		WRITE_UINT32(&then, (yyvsp[(4) - (7)].code) - (yyvsp[(1) - (7)].code));
-		(*g_lingo->_currentScript)[(yyvsp[(1) - (7)].code) + 1] = then;	/* thenpart */
+			g_lingo->codeLabel((yyvsp[(2) - (5)].code));
 
-		g_lingo->codeLabel((yyvsp[(1) - (7)].code));
+			checkEnd((yyvsp[(5) - (5)].s), "if", true); ;}
+    break;
 
-		checkEnd((yyvsp[(7) - (7)].s), "if", true); ;}
+  case 39:
+#line 320 "engines/director/lingo/lingo-gr.y"
+    {
+			g_lingo->codeLabel((yyvsp[(2) - (4)].code)); ;}
     break;
 
-  case 42:
-#line 356 "engines/director/lingo/lingo-gr.y"
+  case 40:
+#line 323 "engines/director/lingo/lingo-gr.y"
     {
 			g_lingo->codeLabel((yyvsp[(2) - (5)].code));
 
 			checkEnd((yyvsp[(5) - (5)].s), "if", true); ;}
     break;
 
-  case 43:
-#line 360 "engines/director/lingo/lingo-gr.y"
+  case 41:
+#line 327 "engines/director/lingo/lingo-gr.y"
     {
 			g_lingo->codeLabel((yyvsp[(2) - (4)].code)); ;}
     break;
 
-  case 44:
-#line 364 "engines/director/lingo/lingo-gr.y"
+  case 42:
+#line 331 "engines/director/lingo/lingo-gr.y"
     { (yyval.code) = g_lingo->code3(g_lingo->c_repeatwhilecode, STOP, STOP); ;}
     break;
 
-  case 45:
-#line 367 "engines/director/lingo/lingo-gr.y"
+  case 43:
+#line 334 "engines/director/lingo/lingo-gr.y"
     {
 		(yyval.code) = g_lingo->code3(g_lingo->c_repeatwithcode, STOP, STOP);
 		g_lingo->code3(STOP, STOP, STOP);
@@ -2483,8 +2424,8 @@ yyreduce:
 		delete (yyvsp[(3) - (3)].s); ;}
     break;
 
-  case 46:
-#line 374 "engines/director/lingo/lingo-gr.y"
+  case 44:
+#line 341 "engines/director/lingo/lingo-gr.y"
     {
 		(yyval.code) = g_lingo->code1(g_lingo->c_ifcode);
 		g_lingo->code3(STOP, STOP, STOP);
@@ -2492,8 +2433,8 @@ yyreduce:
 		g_lingo->codeLabel(0); ;}
     break;
 
-  case 47:
-#line 381 "engines/director/lingo/lingo-gr.y"
+  case 45:
+#line 348 "engines/director/lingo/lingo-gr.y"
     {
 		inst skipEnd;
 		WRITE_UINT32(&skipEnd, 1); // We have to skip end to avoid multiple executions
@@ -2502,23 +2443,23 @@ yyreduce:
 		g_lingo->code1(skipEnd); ;}
     break;
 
-  case 48:
-#line 389 "engines/director/lingo/lingo-gr.y"
+  case 46:
+#line 356 "engines/director/lingo/lingo-gr.y"
     { (yyval.code) = g_lingo->_currentScript->size(); ;}
     break;
 
-  case 49:
-#line 392 "engines/director/lingo/lingo-gr.y"
+  case 47:
+#line 359 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(STOP); (yyval.code) = g_lingo->_currentScript->size(); ;}
     break;
 
-  case 50:
-#line 395 "engines/director/lingo/lingo-gr.y"
+  case 48:
+#line 362 "engines/director/lingo/lingo-gr.y"
     { (yyval.code) = g_lingo->_currentScript->size(); ;}
     break;
 
-  case 53:
-#line 400 "engines/director/lingo/lingo-gr.y"
+  case 51:
+#line 367 "engines/director/lingo/lingo-gr.y"
     {
 		(yyval.code) = g_lingo->code1(g_lingo->c_whencode);
 		g_lingo->code1(STOP);
@@ -2526,87 +2467,87 @@ yyreduce:
 		delete (yyvsp[(2) - (3)].s); ;}
     break;
 
-  case 54:
-#line 406 "engines/director/lingo/lingo-gr.y"
+  case 52:
+#line 373 "engines/director/lingo/lingo-gr.y"
     {
 		(yyval.code) = g_lingo->code1(g_lingo->c_tellcode);
 		g_lingo->code1(STOP); ;}
     break;
 
-  case 55:
-#line 410 "engines/director/lingo/lingo-gr.y"
+  case 53:
+#line 377 "engines/director/lingo/lingo-gr.y"
     {
 		(yyval.code) = g_lingo->code1(g_lingo->c_intpush);
 		g_lingo->codeInt((yyvsp[(1) - (1)].i)); ;}
     break;
 
-  case 56:
-#line 413 "engines/director/lingo/lingo-gr.y"
+  case 54:
+#line 380 "engines/director/lingo/lingo-gr.y"
     {
 		(yyval.code) = g_lingo->code1(g_lingo->c_floatpush);
 		g_lingo->codeFloat((yyvsp[(1) - (1)].f)); ;}
     break;
 
-  case 57:
-#line 416 "engines/director/lingo/lingo-gr.y"
+  case 55:
+#line 383 "engines/director/lingo/lingo-gr.y"
     {											// D3
 		(yyval.code) = g_lingo->code1(g_lingo->c_symbolpush);
 		g_lingo->codeString((yyvsp[(1) - (1)].s)->c_str()); ;}
     break;
 
-  case 58:
-#line 419 "engines/director/lingo/lingo-gr.y"
+  case 56:
+#line 386 "engines/director/lingo/lingo-gr.y"
     {
 		(yyval.code) = g_lingo->code1(g_lingo->c_stringpush);
 		g_lingo->codeString((yyvsp[(1) - (1)].s)->c_str()); ;}
     break;
 
-  case 59:
-#line 422 "engines/director/lingo/lingo-gr.y"
+  case 57:
+#line 389 "engines/director/lingo/lingo-gr.y"
     {
 		(yyval.code) = g_lingo->code1(g_lingo->c_eval);
 		g_lingo->codeString((yyvsp[(1) - (1)].s)->c_str());
 		delete (yyvsp[(1) - (1)].s); ;}
     break;
 
-  case 60:
-#line 428 "engines/director/lingo/lingo-gr.y"
+  case 58:
+#line 395 "engines/director/lingo/lingo-gr.y"
     { (yyval.code) = (yyvsp[(1) - (1)].code); ;}
     break;
 
-  case 62:
-#line 430 "engines/director/lingo/lingo-gr.y"
+  case 60:
+#line 397 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->codeFunc((yyvsp[(1) - (1)].s), 0);
 		delete (yyvsp[(1) - (1)].s); ;}
     break;
 
-  case 63:
-#line 433 "engines/director/lingo/lingo-gr.y"
+  case 61:
+#line 400 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->codeFunc((yyvsp[(1) - (2)].s), 1);
 		delete (yyvsp[(1) - (2)].s); ;}
     break;
 
-  case 64:
-#line 436 "engines/director/lingo/lingo-gr.y"
+  case 62:
+#line 403 "engines/director/lingo/lingo-gr.y"
     { g_lingo->codeFunc((yyvsp[(1) - (2)].s), (yyvsp[(2) - (2)].narg)); ;}
     break;
 
-  case 65:
-#line 437 "engines/director/lingo/lingo-gr.y"
+  case 63:
+#line 404 "engines/director/lingo/lingo-gr.y"
     { g_lingo->codeFunc((yyvsp[(1) - (4)].s), (yyvsp[(3) - (4)].narg)); ;}
     break;
 
-  case 66:
-#line 438 "engines/director/lingo/lingo-gr.y"
+  case 64:
+#line 405 "engines/director/lingo/lingo-gr.y"
     {
 		(yyval.code) = g_lingo->codeFunc((yyvsp[(1) - (4)].s), (yyvsp[(3) - (4)].narg));
 		delete (yyvsp[(1) - (4)].s); ;}
     break;
 
-  case 67:
-#line 441 "engines/director/lingo/lingo-gr.y"
+  case 65:
+#line 408 "engines/director/lingo/lingo-gr.y"
     {
 		(yyval.code) = g_lingo->code1(g_lingo->c_intpush);
 		g_lingo->codeInt(0); // Put dummy id
@@ -2617,8 +2558,8 @@ yyreduce:
 		g_lingo->code2(e, f); ;}
     break;
 
-  case 68:
-#line 449 "engines/director/lingo/lingo-gr.y"
+  case 66:
+#line 416 "engines/director/lingo/lingo-gr.y"
     {
 		(yyval.code) = g_lingo->code1(g_lingo->c_theentitypush);
 		inst e = 0, f = 0;
@@ -2627,400 +2568,400 @@ yyreduce:
 		g_lingo->code2(e, f); ;}
     break;
 
-  case 70:
-#line 456 "engines/director/lingo/lingo-gr.y"
+  case 68:
+#line 423 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_add); ;}
     break;
 
-  case 71:
-#line 457 "engines/director/lingo/lingo-gr.y"
+  case 69:
+#line 424 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_sub); ;}
     break;
 
-  case 72:
-#line 458 "engines/director/lingo/lingo-gr.y"
+  case 70:
+#line 425 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_mul); ;}
     break;
 
-  case 73:
-#line 459 "engines/director/lingo/lingo-gr.y"
+  case 71:
+#line 426 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_div); ;}
     break;
 
-  case 74:
-#line 460 "engines/director/lingo/lingo-gr.y"
+  case 72:
+#line 427 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_mod); ;}
     break;
 
-  case 75:
-#line 461 "engines/director/lingo/lingo-gr.y"
+  case 73:
+#line 428 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_gt); ;}
     break;
 
-  case 76:
-#line 462 "engines/director/lingo/lingo-gr.y"
+  case 74:
+#line 429 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_lt); ;}
     break;
 
-  case 77:
-#line 463 "engines/director/lingo/lingo-gr.y"
+  case 75:
+#line 430 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_eq); ;}
     break;
 
-  case 78:
-#line 464 "engines/director/lingo/lingo-gr.y"
+  case 76:
+#line 431 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_neq); ;}
     break;
 
-  case 79:
-#line 465 "engines/director/lingo/lingo-gr.y"
+  case 77:
+#line 432 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_ge); ;}
     break;
 
-  case 80:
-#line 466 "engines/director/lingo/lingo-gr.y"
+  case 78:
+#line 433 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_le); ;}
     break;
 
-  case 81:
-#line 467 "engines/director/lingo/lingo-gr.y"
+  case 79:
+#line 434 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_and); ;}
     break;
 
-  case 82:
-#line 468 "engines/director/lingo/lingo-gr.y"
+  case 80:
+#line 435 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_or); ;}
     break;
 
-  case 83:
-#line 469 "engines/director/lingo/lingo-gr.y"
+  case 81:
+#line 436 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_not); ;}
     break;
 
-  case 84:
-#line 470 "engines/director/lingo/lingo-gr.y"
+  case 82:
+#line 437 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_ampersand); ;}
     break;
 
-  case 85:
-#line 471 "engines/director/lingo/lingo-gr.y"
+  case 83:
+#line 438 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_concat); ;}
     break;
 
-  case 86:
-#line 472 "engines/director/lingo/lingo-gr.y"
+  case 84:
+#line 439 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_contains); ;}
     break;
 
-  case 87:
-#line 473 "engines/director/lingo/lingo-gr.y"
+  case 85:
+#line 440 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_starts); ;}
     break;
 
-  case 88:
-#line 474 "engines/director/lingo/lingo-gr.y"
+  case 86:
+#line 441 "engines/director/lingo/lingo-gr.y"
     { (yyval.code) = (yyvsp[(2) - (2)].code); ;}
     break;
 
-  case 89:
-#line 475 "engines/director/lingo/lingo-gr.y"
+  case 87:
+#line 442 "engines/director/lingo/lingo-gr.y"
     { (yyval.code) = (yyvsp[(2) - (2)].code); g_lingo->code1(g_lingo->c_negate); ;}
     break;
 
-  case 90:
-#line 476 "engines/director/lingo/lingo-gr.y"
+  case 88:
+#line 443 "engines/director/lingo/lingo-gr.y"
     { (yyval.code) = (yyvsp[(2) - (3)].code); ;}
     break;
 
-  case 91:
-#line 477 "engines/director/lingo/lingo-gr.y"
+  case 89:
+#line 444 "engines/director/lingo/lingo-gr.y"
     { (yyval.code) = g_lingo->code1(g_lingo->c_arraypush); g_lingo->codeArray((yyvsp[(2) - (3)].narg)); ;}
     break;
 
-  case 92:
-#line 478 "engines/director/lingo/lingo-gr.y"
+  case 90:
+#line 445 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_intersects); ;}
     break;
 
-  case 93:
-#line 479 "engines/director/lingo/lingo-gr.y"
+  case 91:
+#line 446 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_within); ;}
     break;
 
-  case 94:
-#line 480 "engines/director/lingo/lingo-gr.y"
+  case 92:
+#line 447 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_charOf); ;}
     break;
 
-  case 95:
-#line 481 "engines/director/lingo/lingo-gr.y"
+  case 93:
+#line 448 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_charToOf); ;}
     break;
 
-  case 96:
-#line 482 "engines/director/lingo/lingo-gr.y"
+  case 94:
+#line 449 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_itemOf); ;}
     break;
 
-  case 97:
-#line 483 "engines/director/lingo/lingo-gr.y"
+  case 95:
+#line 450 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_itemToOf); ;}
     break;
 
-  case 98:
-#line 484 "engines/director/lingo/lingo-gr.y"
+  case 96:
+#line 451 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_lineOf); ;}
     break;
 
-  case 99:
-#line 485 "engines/director/lingo/lingo-gr.y"
+  case 97:
+#line 452 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_lineToOf); ;}
     break;
 
-  case 100:
-#line 486 "engines/director/lingo/lingo-gr.y"
+  case 98:
+#line 453 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_wordOf); ;}
     break;
 
-  case 101:
-#line 487 "engines/director/lingo/lingo-gr.y"
+  case 99:
+#line 454 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_wordToOf); ;}
     break;
 
-  case 102:
-#line 488 "engines/director/lingo/lingo-gr.y"
+  case 100:
+#line 455 "engines/director/lingo/lingo-gr.y"
     { g_lingo->codeMe(nullptr, 0); ;}
     break;
 
-  case 103:
-#line 491 "engines/director/lingo/lingo-gr.y"
+  case 101:
+#line 458 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->codeFunc((yyvsp[(1) - (2)].s), 1);
 		delete (yyvsp[(1) - (2)].s); ;}
     break;
 
-  case 104:
-#line 496 "engines/director/lingo/lingo-gr.y"
+  case 102:
+#line 463 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_printtop); ;}
     break;
 
-  case 107:
-#line 499 "engines/director/lingo/lingo-gr.y"
+  case 105:
+#line 466 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_exitRepeat); ;}
     break;
 
-  case 108:
-#line 500 "engines/director/lingo/lingo-gr.y"
+  case 106:
+#line 467 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_procret); ;}
     break;
 
-  case 112:
-#line 504 "engines/director/lingo/lingo-gr.y"
+  case 110:
+#line 471 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->codeFunc((yyvsp[(1) - (1)].s), 0);
 		delete (yyvsp[(1) - (1)].s); ;}
     break;
 
-  case 113:
-#line 507 "engines/director/lingo/lingo-gr.y"
+  case 111:
+#line 474 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->codeFunc((yyvsp[(1) - (2)].s), 1);
 		delete (yyvsp[(1) - (2)].s); ;}
     break;
 
-  case 114:
-#line 510 "engines/director/lingo/lingo-gr.y"
+  case 112:
+#line 477 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->codeFunc((yyvsp[(1) - (2)].s), 1);
 		delete (yyvsp[(1) - (2)].s); ;}
     break;
 
-  case 115:
-#line 513 "engines/director/lingo/lingo-gr.y"
+  case 113:
+#line 480 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->code1(g_lingo->c_voidpush);
 		g_lingo->codeFunc((yyvsp[(1) - (1)].s), 1);
 		delete (yyvsp[(1) - (1)].s); ;}
     break;
 
-  case 116:
-#line 517 "engines/director/lingo/lingo-gr.y"
+  case 114:
+#line 484 "engines/director/lingo/lingo-gr.y"
     { g_lingo->codeFunc((yyvsp[(1) - (2)].s), (yyvsp[(2) - (2)].narg)); ;}
     break;
 
-  case 117:
-#line 518 "engines/director/lingo/lingo-gr.y"
+  case 115:
+#line 485 "engines/director/lingo/lingo-gr.y"
     { g_lingo->codeFunc((yyvsp[(1) - (4)].s), (yyvsp[(3) - (4)].narg)); ;}
     break;
 
-  case 118:
-#line 519 "engines/director/lingo/lingo-gr.y"
+  case 116:
+#line 486 "engines/director/lingo/lingo-gr.y"
     { g_lingo->codeMe((yyvsp[(3) - (4)].s), 0); ;}
     break;
 
-  case 119:
-#line 520 "engines/director/lingo/lingo-gr.y"
+  case 117:
+#line 487 "engines/director/lingo/lingo-gr.y"
     { g_lingo->codeMe((yyvsp[(3) - (6)].s), (yyvsp[(5) - (6)].narg)); ;}
     break;
 
-  case 120:
-#line 521 "engines/director/lingo/lingo-gr.y"
+  case 118:
+#line 488 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_open); ;}
     break;
 
-  case 121:
-#line 522 "engines/director/lingo/lingo-gr.y"
+  case 119:
+#line 489 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code2(g_lingo->c_voidpush, g_lingo->c_open); ;}
     break;
 
-  case 122:
-#line 523 "engines/director/lingo/lingo-gr.y"
+  case 120:
+#line 490 "engines/director/lingo/lingo-gr.y"
     { Common::String s(*(yyvsp[(1) - (3)].s)); s += '-'; s += *(yyvsp[(2) - (3)].s); g_lingo->codeFunc(&s, (yyvsp[(3) - (3)].narg)); ;}
     break;
 
-  case 123:
-#line 526 "engines/director/lingo/lingo-gr.y"
+  case 121:
+#line 493 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_global); g_lingo->codeString((yyvsp[(1) - (1)].s)->c_str()); delete (yyvsp[(1) - (1)].s); ;}
     break;
 
-  case 124:
-#line 527 "engines/director/lingo/lingo-gr.y"
+  case 122:
+#line 494 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_global); g_lingo->codeString((yyvsp[(3) - (3)].s)->c_str()); delete (yyvsp[(3) - (3)].s); ;}
     break;
 
-  case 125:
-#line 530 "engines/director/lingo/lingo-gr.y"
+  case 123:
+#line 497 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_property); g_lingo->codeString((yyvsp[(1) - (1)].s)->c_str()); delete (yyvsp[(1) - (1)].s); ;}
     break;
 
-  case 126:
-#line 531 "engines/director/lingo/lingo-gr.y"
+  case 124:
+#line 498 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_property); g_lingo->codeString((yyvsp[(3) - (3)].s)->c_str()); delete (yyvsp[(3) - (3)].s); ;}
     break;
 
-  case 127:
-#line 534 "engines/director/lingo/lingo-gr.y"
+  case 125:
+#line 501 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_instance); g_lingo->codeString((yyvsp[(1) - (1)].s)->c_str()); delete (yyvsp[(1) - (1)].s); ;}
     break;
 
-  case 128:
-#line 535 "engines/director/lingo/lingo-gr.y"
+  case 126:
+#line 502 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_instance); g_lingo->codeString((yyvsp[(3) - (3)].s)->c_str()); delete (yyvsp[(3) - (3)].s); ;}
     break;
 
-  case 129:
-#line 546 "engines/director/lingo/lingo-gr.y"
+  case 127:
+#line 513 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_gotoloop); ;}
     break;
 
-  case 130:
-#line 547 "engines/director/lingo/lingo-gr.y"
+  case 128:
+#line 514 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_gotonext); ;}
     break;
 
-  case 131:
-#line 548 "engines/director/lingo/lingo-gr.y"
+  case 129:
+#line 515 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_gotoprevious); ;}
     break;
 
-  case 132:
-#line 549 "engines/director/lingo/lingo-gr.y"
+  case 130:
+#line 516 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->code1(g_lingo->c_intpush);
 		g_lingo->codeInt(1);
 		g_lingo->code1(g_lingo->c_goto); ;}
     break;
 
-  case 133:
-#line 553 "engines/director/lingo/lingo-gr.y"
+  case 131:
+#line 520 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->code1(g_lingo->c_intpush);
 		g_lingo->codeInt(3);
 		g_lingo->code1(g_lingo->c_goto); ;}
     break;
 
-  case 134:
-#line 557 "engines/director/lingo/lingo-gr.y"
+  case 132:
+#line 524 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->code1(g_lingo->c_intpush);
 		g_lingo->codeInt(2);
 		g_lingo->code1(g_lingo->c_goto); ;}
     break;
 
-  case 139:
-#line 571 "engines/director/lingo/lingo-gr.y"
+  case 137:
+#line 538 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_playdone); ;}
     break;
 
-  case 140:
-#line 572 "engines/director/lingo/lingo-gr.y"
+  case 138:
+#line 539 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->code1(g_lingo->c_intpush);
 		g_lingo->codeInt(1);
 		g_lingo->code1(g_lingo->c_play); ;}
     break;
 
-  case 141:
-#line 576 "engines/director/lingo/lingo-gr.y"
+  case 139:
+#line 543 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->code1(g_lingo->c_intpush);
 		g_lingo->codeInt(3);
 		g_lingo->code1(g_lingo->c_play); ;}
     break;
 
-  case 142:
-#line 580 "engines/director/lingo/lingo-gr.y"
+  case 140:
+#line 547 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->code1(g_lingo->c_intpush);
 		g_lingo->codeInt(2);
 		g_lingo->code1(g_lingo->c_play); ;}
     break;
 
-  case 143:
-#line 584 "engines/director/lingo/lingo-gr.y"
+  case 141:
+#line 551 "engines/director/lingo/lingo-gr.y"
     { g_lingo->codeSetImmediate(true); ;}
     break;
 
-  case 144:
-#line 584 "engines/director/lingo/lingo-gr.y"
+  case 142:
+#line 551 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->codeSetImmediate(false);
 		g_lingo->codeFunc((yyvsp[(1) - (3)].s), (yyvsp[(3) - (3)].narg)); ;}
     break;
 
-  case 145:
-#line 614 "engines/director/lingo/lingo-gr.y"
+  case 143:
+#line 581 "engines/director/lingo/lingo-gr.y"
     { g_lingo->_indef = true; g_lingo->_currentFactory.clear(); ;}
     break;
 
-  case 146:
-#line 615 "engines/director/lingo/lingo-gr.y"
+  case 144:
+#line 582 "engines/director/lingo/lingo-gr.y"
     {
 			g_lingo->code1(g_lingo->c_procret);
 			g_lingo->define(*(yyvsp[(2) - (8)].s), (yyvsp[(4) - (8)].code), (yyvsp[(5) - (8)].narg));
 			g_lingo->_indef = false; ;}
     break;
 
-  case 147:
-#line 619 "engines/director/lingo/lingo-gr.y"
+  case 145:
+#line 586 "engines/director/lingo/lingo-gr.y"
     { g_lingo->codeFactory(*(yyvsp[(2) - (2)].s)); ;}
     break;
 
-  case 148:
-#line 620 "engines/director/lingo/lingo-gr.y"
+  case 146:
+#line 587 "engines/director/lingo/lingo-gr.y"
     { g_lingo->_indef = true; ;}
     break;
 
-  case 149:
-#line 621 "engines/director/lingo/lingo-gr.y"
+  case 147:
+#line 588 "engines/director/lingo/lingo-gr.y"
     {
 			g_lingo->code1(g_lingo->c_procret);
 			g_lingo->define(*(yyvsp[(2) - (8)].s), (yyvsp[(4) - (8)].code), (yyvsp[(5) - (8)].narg) + 1, &g_lingo->_currentFactory);
 			g_lingo->_indef = false; ;}
     break;
 
-  case 150:
-#line 625 "engines/director/lingo/lingo-gr.y"
+  case 148:
+#line 592 "engines/director/lingo/lingo-gr.y"
     {	// D3
 		g_lingo->code1(g_lingo->c_procret);
 		g_lingo->define(*(yyvsp[(1) - (8)].s), (yyvsp[(2) - (8)].code), (yyvsp[(3) - (8)].narg));
@@ -3030,8 +2971,8 @@ yyreduce:
 		checkEnd((yyvsp[(7) - (8)].s), (yyvsp[(1) - (8)].s)->c_str(), false); ;}
     break;
 
-  case 151:
-#line 632 "engines/director/lingo/lingo-gr.y"
+  case 149:
+#line 599 "engines/director/lingo/lingo-gr.y"
     {	// D4. No 'end' clause
 		g_lingo->code1(g_lingo->c_procret);
 		g_lingo->define(*(yyvsp[(1) - (6)].s), (yyvsp[(2) - (6)].code), (yyvsp[(3) - (6)].narg));
@@ -3039,38 +2980,38 @@ yyreduce:
 		g_lingo->_ignoreMe = false; ;}
     break;
 
-  case 152:
-#line 638 "engines/director/lingo/lingo-gr.y"
+  case 150:
+#line 605 "engines/director/lingo/lingo-gr.y"
     { (yyval.s) = (yyvsp[(2) - (2)].s); g_lingo->_indef = true; g_lingo->_currentFactory.clear(); g_lingo->_ignoreMe = true; ;}
     break;
 
-  case 153:
-#line 640 "engines/director/lingo/lingo-gr.y"
+  case 151:
+#line 607 "engines/director/lingo/lingo-gr.y"
     { (yyval.narg) = 0; ;}
     break;
 
-  case 154:
-#line 641 "engines/director/lingo/lingo-gr.y"
+  case 152:
+#line 608 "engines/director/lingo/lingo-gr.y"
     { g_lingo->codeArg((yyvsp[(1) - (1)].s)); (yyval.narg) = 1; ;}
     break;
 
-  case 155:
-#line 642 "engines/director/lingo/lingo-gr.y"
+  case 153:
+#line 609 "engines/director/lingo/lingo-gr.y"
     { g_lingo->codeArg((yyvsp[(3) - (3)].s)); (yyval.narg) = (yyvsp[(1) - (3)].narg) + 1; ;}
     break;
 
-  case 156:
-#line 643 "engines/director/lingo/lingo-gr.y"
+  case 154:
+#line 610 "engines/director/lingo/lingo-gr.y"
     { g_lingo->codeArg((yyvsp[(4) - (4)].s)); (yyval.narg) = (yyvsp[(1) - (4)].narg) + 1; ;}
     break;
 
-  case 160:
-#line 651 "engines/director/lingo/lingo-gr.y"
+  case 158:
+#line 618 "engines/director/lingo/lingo-gr.y"
     { g_lingo->codeArgStore(); ;}
     break;
 
-  case 161:
-#line 655 "engines/director/lingo/lingo-gr.y"
+  case 159:
+#line 622 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->code1(g_lingo->c_call);
 		g_lingo->codeString((yyvsp[(1) - (2)].s)->c_str());
@@ -3079,34 +3020,34 @@ yyreduce:
 		g_lingo->code1(numpar); ;}
     break;
 
-  case 162:
-#line 663 "engines/director/lingo/lingo-gr.y"
+  case 160:
+#line 630 "engines/director/lingo/lingo-gr.y"
     { (yyval.narg) = 0; ;}
     break;
 
-  case 163:
-#line 664 "engines/director/lingo/lingo-gr.y"
+  case 161:
+#line 631 "engines/director/lingo/lingo-gr.y"
     { (yyval.narg) = 1; ;}
     break;
 
-  case 164:
-#line 665 "engines/director/lingo/lingo-gr.y"
+  case 162:
+#line 632 "engines/director/lingo/lingo-gr.y"
     { (yyval.narg) = (yyvsp[(1) - (3)].narg) + 1; ;}
     break;
 
-  case 165:
-#line 668 "engines/director/lingo/lingo-gr.y"
+  case 163:
+#line 635 "engines/director/lingo/lingo-gr.y"
     { (yyval.narg) = 1; ;}
     break;
 
-  case 166:
-#line 669 "engines/director/lingo/lingo-gr.y"
+  case 164:
+#line 636 "engines/director/lingo/lingo-gr.y"
     { (yyval.narg) = (yyvsp[(1) - (3)].narg) + 1; ;}
     break;
 
 
 /* Line 1267 of yacc.c.  */
-#line 3110 "engines/director/lingo/lingo-gr.cpp"
+#line 3051 "engines/director/lingo/lingo-gr.cpp"
       default: break;
     }
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@ -3320,6 +3261,6 @@ yyreturn:
 }
 
 
-#line 672 "engines/director/lingo/lingo-gr.y"
+#line 639 "engines/director/lingo/lingo-gr.y"
 
 
diff --git a/engines/director/lingo/lingo-gr.y b/engines/director/lingo/lingo-gr.y
index 1d1b2e0..ed537b7 100644
--- a/engines/director/lingo/lingo-gr.y
+++ b/engines/director/lingo/lingo-gr.y
@@ -247,28 +247,7 @@ stmt: stmtoneliner
 		}
 	;
 
-ifstmt:	if expr tTHENNL stmtlist end ENDCLAUSE		{
-		inst then = 0, end = 0;
-		WRITE_UINT32(&then, $4 - $1);
-		WRITE_UINT32(&end, $5 - $1);
-		(*g_lingo->_currentScript)[$1 + 1] = then;	/* thenpart */
-		(*g_lingo->_currentScript)[$1 + 3] = end;	/* end, if cond fails */
-
-		checkEnd($6, "if", true);
-
-		g_lingo->processIf(0, 0); }
-	| if expr tTHEN begin stmtoneliner end tELSE stmtoneliner end {
-		inst then = 0, else1 = 0, end = 0;
-		WRITE_UINT32(&then, $4 - $1);
-		WRITE_UINT32(&else1, $6 - $1);
-		WRITE_UINT32(&end, $9 - $1);
-		(*g_lingo->_currentScript)[$1 + 1] = then;	/* thenpart */
-		(*g_lingo->_currentScript)[$1 + 2] = else1;	/* elsepart */
-		(*g_lingo->_currentScript)[$1 + 3] = end; 	/* end, if cond fails */
-
-		g_lingo->processIf(0, $9 - $1); }
-
-	| if expr tTHEN begin stmtoneliner end {
+ifstmt: if expr tTHEN begin stmtoneliner end '\n' {
 		inst then = 0, else1 = 0, end = 0;
 		WRITE_UINT32(&then, $4 - $1);
 		WRITE_UINT32(&else1, 0);
@@ -288,41 +267,30 @@ ifstmt:	if expr tTHENNL stmtlist end ENDCLAUSE		{
 		(*g_lingo->_currentScript)[$1 + 3] = end;	/* end, if cond fails */
 
 		g_lingo->processIf(0, $10 - $1); }
-	| if expr tTHENNL stmtlist end elseifstmtlist end endifstmt end {
-		inst then = 0, else1 = 0, end = 0;
+	| if expr tTHENNL stmtlist end ENDCLAUSE {
+		inst then = 0, end = 0;
 		WRITE_UINT32(&then, $4 - $1);
-		WRITE_UINT32(&else1, $7 - $1);
-		WRITE_UINT32(&end, $9 - $1);
+		WRITE_UINT32(&end, $5 - $1);
 		(*g_lingo->_currentScript)[$1 + 1] = then;	/* thenpart */
-		(*g_lingo->_currentScript)[$1 + 2] = else1;	/* elsepart */
 		(*g_lingo->_currentScript)[$1 + 3] = end;	/* end, if cond fails */
 
-		g_lingo->processIf(0, 0); }
-	| if expr tTHEN begin stmtoneliner end endifstmt end {
-		inst then = 0, else1 = 0, end = 0;
-		WRITE_UINT32(&then, $4 - $1);
-		WRITE_UINT32(&else1, $6 - $1);
-		WRITE_UINT32(&end, $8 - $1);
-		(*g_lingo->_currentScript)[$1 + 1] = then;	/* thenpart */
-		(*g_lingo->_currentScript)[$1 + 2] = else1;	/* elsepart */
-		(*g_lingo->_currentScript)[$1 + 3] = end;	/* end, if cond fails */
+		checkEnd($6, "if", true);
 
-		g_lingo->processIf(0, $8 - $1); }
-	| if expr tTHENNL stmtlist end endifstmt end {
+		g_lingo->processIf(0, 0); }
+	| if expr tTHENNL stmtlist end elseifstmtlist end endifstmt end {
 		inst then = 0, else1 = 0, end = 0;
 		WRITE_UINT32(&then, $4 - $1);
 		WRITE_UINT32(&else1, $7 - $1);
-		WRITE_UINT32(&end, $7 - $1);
+		WRITE_UINT32(&end, $9 - $1);
 		(*g_lingo->_currentScript)[$1 + 1] = then;	/* thenpart */
 		(*g_lingo->_currentScript)[$1 + 2] = else1;	/* elsepart */
 		(*g_lingo->_currentScript)[$1 + 3] = end;	/* end, if cond fails */
 
 		g_lingo->processIf(0, 0); }
-
 	;
 
-elseifstmtlist:	elseifstmtlist elseifstmt
-	| elseifstmt
+elseifstmtlist:	/* nothing */
+	| elseifstmt elseifstmtlist
 	;
 
 elseifstmt: elseif expr tTHEN begin stmtoneliner end {
@@ -345,14 +313,13 @@ endifstmt: elseif expr tTHEN begin stmtoneliner end tELSE stmtoneliner end {
 		(*g_lingo->_currentScript)[$1 + 1] = then;	/* thenpart */
 
 		g_lingo->codeLabel($1); }
-	| elseif expr tTHENNL begin stmtlist end ENDCLAUSE {
-		inst then = 0;
-		WRITE_UINT32(&then, $4 - $1);
-		(*g_lingo->_currentScript)[$1 + 1] = then;	/* thenpart */
+	| tELSE begin stmtlist end ENDCLAUSE {
+			g_lingo->codeLabel($2);
 
-		g_lingo->codeLabel($1);
+			checkEnd($5, "if", true); }
+	| tELSE begin stmtoneliner end {
+			g_lingo->codeLabel($2); }
 
-		checkEnd($7, "if", true); }
 	| tNLELSE begin stmtlist end ENDCLAUSE {
 			g_lingo->codeLabel($2);
 
@@ -392,7 +359,7 @@ begin:	  /* nothing */		{ $$ = g_lingo->_currentScript->size(); }
 end:	  /* nothing */		{ g_lingo->code1(STOP); $$ = g_lingo->_currentScript->size(); }
 	;
 
-stmtlist: begin				{ $$ = g_lingo->_currentScript->size(); }
+stmtlist: 					{ $$ = g_lingo->_currentScript->size(); }
 	| stmtlist '\n'
 	| stmtlist stmt
 	;




More information about the Scummvm-git-logs mailing list