This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Look up state subs in the pad
authorFather Chrysostomos <sprout@cpan.org>
Sat, 7 Jul 2012 06:35:15 +0000 (23:35 -0700)
committerFather Chrysostomos <sprout@cpan.org>
Sun, 16 Sep 2012 05:44:58 +0000 (22:44 -0700)
This commit does just enough to get things compiling.  The padcv op
is still unimplemented (in fact, converting the padany to a padcv is
still not done), so you can’t actually run the code yet.

Bareword lookup in yylex now produces PRIVATEREF tokens for state
subs, so the grammar has been adjusted to accept a ‘subname’ in sub
calls (PRIVATEREF or WORD) where previously only a WORD was permitted.

perly.act
perly.h
perly.tab
perly.y
toke.c

index d541e85..0ecccc6 100644 (file)
--- a/perly.act
+++ b/perly.act
@@ -1785,6 +1785,6 @@ case 2:
     
 
 /* Generated from:
- * a216aadb9729f2e06283be0b4e7f08adc1209abb0bb9b50c453be450c6104a81 perly.y
+ * 46a0f37bedef614c67088ca538be1a60acad74ce92b27d0244bd16b23eb7fd8d perly.y
  * 4a3ced51fe6585f6ec59e65e1ffd74bc976c498b0e6992eaab337219fee72e51 regen_perly.pl
  * ex: set ro: */
diff --git a/perly.h b/perly.h
index 63133c7..1758c41 100644 (file)
--- a/perly.h
+++ b/perly.h
@@ -268,6 +268,6 @@ typedef union YYSTYPE
 
 
 /* Generated from:
- * a216aadb9729f2e06283be0b4e7f08adc1209abb0bb9b50c453be450c6104a81 perly.y
+ * 46a0f37bedef614c67088ca538be1a60acad74ce92b27d0244bd16b23eb7fd8d perly.y
  * 4a3ced51fe6585f6ec59e65e1ffd74bc976c498b0e6992eaab337219fee72e51 regen_perly.pl
  * ex: set ro: */
index 6c7fb0d..e404319 100644 (file)
--- a/perly.tab
+++ b/perly.tab
@@ -6,7 +6,7 @@
 
 #define YYFINAL  14
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   2820
+#define YYLAST   2821
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  105
@@ -15,7 +15,7 @@
 /* YYNRULES -- Number of rules.  */
 #define YYNRULES  227
 /* YYNRULES -- Number of states.  */
-#define YYNSTATES  460
+#define YYNSTATES  461
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
@@ -153,7 +153,7 @@ static const yytype_int16 yyrhs[] =
      157,    -1,    99,   157,    -1,    11,   147,    12,    -1,    11,
       12,    -1,    67,   147,    20,    10,    -1,    67,    20,    10,
       -1,    39,   140,   143,   144,   113,    -1,    66,   157,    -1,
-      66,   113,    -1,    66,    23,   103,   102,    -1,    66,    23,
+      66,   113,    -1,    66,   142,   103,   102,    -1,    66,   142,
      103,   147,   102,    -1,    66,   165,   103,   102,    -1,    66,
      165,   103,   147,   102,    -1,   153,    -1,   154,    -1,   155,
       -1,   156,    -1,   157,    83,   157,    84,   157,    -1,    94,
@@ -162,7 +162,7 @@ static const yytype_int16 yyrhs[] =
      167,    -1,   166,    -1,   168,    -1,   152,    -1,   166,    11,
      147,    12,    -1,   166,     9,   147,    20,    10,    -1,    26,
       -1,   164,    -1,   164,   103,   102,    -1,   164,   103,   147,
-     102,    -1,    68,    23,   161,    -1,    53,    -1,    53,   157,
+     102,    -1,    68,   142,   161,    -1,    53,    -1,    53,   157,
       -1,    80,   148,    -1,    59,    -1,    59,   113,    -1,    59,
      157,    -1,    72,    -1,    72,   157,    -1,    32,    -1,    32,
      157,    -1,    56,    -1,    56,   103,   102,    -1,    30,    -1,
@@ -332,116 +332,118 @@ static const yytype_uint8 yydefact[] =
       23,     0,     0,   149,     0,   140,   141,   224,   227,   226,
      225,   219,   220,   221,   223,   218,   213,     0,     0,     0,
        0,   192,     0,    84,   184,     0,     0,   215,   187,   188,
-     224,   214,   106,   225,     0,   222,   202,   154,   153,   170,
-       0,     0,   213,   166,     0,   207,   210,   212,   211,   190,
-     185,   142,   143,   164,   147,   146,   169,     0,     0,     0,
-       0,    97,     0,     0,     0,     0,     0,     0,     0,     0,
+     224,   214,   106,   225,     0,   222,   202,    83,   154,     0,
+     153,   170,     0,     0,    82,   213,   166,     0,   207,   210,
+     212,   211,   190,   185,   142,   143,   164,   147,   146,   169,
+       0,     0,     0,     0,    97,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     145,   144,     0,     0,     0,     0,     0,     0,     0,    19,
-      78,    82,    83,    79,     0,    34,    16,    16,    16,    16,
-      16,    16,     0,    16,    16,    40,     0,     0,    47,    50,
-       0,     0,     0,     0,     0,     0,    26,    25,    20,   148,
-     104,   215,     0,     0,   196,   108,    85,    86,   194,   198,
-       0,     0,     0,   100,     0,     0,   151,     0,   182,   209,
-       0,    90,   206,     0,   167,    95,    94,    93,    98,     0,
-       0,   122,     0,   135,   131,   132,   128,   129,   126,     0,
-     138,   137,   136,   134,   133,   130,   139,   127,     0,     0,
-     110,     0,   103,   111,   180,     0,     0,     0,     0,     0,
-       0,     0,    77,     0,    30,     0,     0,    71,     0,     0,
-       0,     0,     0,    16,     0,     0,    84,    67,    59,    60,
-      73,    57,    58,    61,    62,     0,     0,   124,   213,    88,
-       0,   199,   107,     0,   155,     0,   157,     0,   150,   208,
-      89,     0,     0,     0,   115,   121,     0,     0,     0,   119,
-       0,   215,   181,     0,   113,     0,   176,     0,    14,    16,
-      29,    84,    16,    33,     0,     0,    72,     0,     0,    74,
-      76,     0,     0,   217,    70,    75,     0,     0,    56,     0,
-       0,     0,    86,   105,   201,   109,    87,   152,   101,   156,
-     158,   125,     0,   118,   163,     0,   114,   120,     0,   116,
-     177,   112,     0,    86,    48,   213,    68,    68,     0,     0,
-       0,     0,    71,     0,     0,     0,     0,   123,   117,   102,
-       0,     0,    19,     0,     0,     0,    18,    63,    63,     0,
-      66,     0,     0,    38,    39,    92,    91,    32,    21,    31,
-       0,    35,    66,    66,    19,     0,     0,    36,    37,     0,
-      46,    68,    66,     0,    49,    41,    42,     0,    64,     0,
-      66,     0,    45,     0,    53,    22,    17,     0,    44,     0,
-      15,    19,    52,     0,     0,     0,    63,    43,    54,    65
+       0,     0,     0,   145,   144,     0,     0,     0,     0,     0,
+       0,     0,    19,    78,    79,     0,    34,    16,    16,    16,
+      16,    16,    16,     0,    16,    16,    40,     0,     0,    47,
+      50,     0,     0,     0,     0,     0,     0,    26,    25,    20,
+     148,   104,   215,     0,     0,   196,   108,    85,    86,   194,
+     198,     0,     0,     0,   100,     0,     0,   151,     0,   182,
+     209,     0,    90,   206,     0,   167,    95,    94,    93,    98,
+       0,     0,   122,     0,   135,   131,   132,   128,   129,   126,
+       0,   138,   137,   136,   134,   133,   130,   139,   127,     0,
+       0,   110,     0,   103,   111,   180,     0,     0,     0,     0,
+       0,     0,     0,    77,     0,    30,     0,     0,    71,     0,
+       0,     0,     0,     0,    16,     0,     0,    84,    67,    59,
+      60,    73,    57,    58,    61,    62,     0,     0,   124,   213,
+      88,     0,   199,   107,     0,   155,     0,   157,     0,   150,
+     208,    89,     0,     0,     0,   115,   121,     0,     0,     0,
+     119,     0,   215,   181,     0,   113,     0,   176,     0,    14,
+      16,    29,    84,    16,    33,     0,     0,    72,     0,     0,
+      74,    76,     0,     0,   217,    70,    75,     0,     0,    56,
+       0,     0,     0,    86,   105,   201,   109,    87,   152,   101,
+     156,   158,   125,     0,   118,   163,     0,   114,   120,     0,
+     116,   177,   112,     0,    86,    48,   213,    68,    68,     0,
+       0,     0,     0,    71,     0,     0,     0,     0,   123,   117,
+     102,     0,     0,    19,     0,     0,     0,    18,    63,    63,
+       0,    66,     0,     0,    38,    39,    92,    91,    32,    21,
+      31,     0,    35,    66,    66,    19,     0,     0,    36,    37,
+       0,    46,    68,    66,     0,    49,    41,    42,     0,    64,
+       0,    66,     0,    45,     0,    53,    22,    17,     0,    44,
+       0,    15,    19,    52,     0,     0,     0,    63,    43,    54,
+      65
 };
 
 /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-      -1,     7,     8,     9,    10,    11,    12,    13,   109,   340,
-      15,   407,   424,   101,   433,   218,    99,   100,   341,   286,
-     402,   445,   452,    95,   427,   208,   404,   355,   345,   299,
-     348,   357,   351,   283,   195,   122,   190,   193,   227,   310,
-     242,   417,    96,    58,    59,   308,   272,    60,    61,    62,
-      63,    64,    65,   118,    66,   145,   132,    67,   352,    68,
+      -1,     7,     8,     9,    10,    11,    12,    13,   109,   341,
+      15,   408,   425,   101,   434,   219,    99,   100,   342,   287,
+     403,   446,   453,    95,   428,   209,   405,   356,   346,   300,
+     349,   358,   352,   284,   196,   122,   193,   139,   228,   311,
+     243,   418,    96,    58,    59,   309,   273,    60,    61,    62,
+      63,    64,    65,   118,    66,   148,   132,    67,   353,    68,
       69,    70,    71,    72,    73,   111
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -399
+#define YYPACT_NINF -390
 static const yytype_int16 yypact[] =
 {
-     307,  -399,  -399,  -399,  -399,  -399,  -399,    17,  -399,  2656,
-      34,  1107,  1011,  -399,  -399,  -399,  1730,  2656,  2656,   410,
-     410,   410,   410,   410,  -399,   410,   410,  -399,  -399,    15,
-     -47,  -399,  2656,  -399,  -399,  -399,  2656,  -399,   -27,    37,
-      43,  1544,  1451,   410,  1637,  1821,    78,  2656,    21,  2656,
-    2656,  2656,  2656,  2656,  2656,  2656,  1912,    26,    12,  -399,
-       7,  -399,  -399,  -399,  -399,  2719,  -399,  -399,    48,    50,
-      77,  -399,  -399,   104,  -399,  -399,  -399,  -399,  -399,  -399,
-      55,    83,  -399,    57,    69,    85,    86,     5,    90,    91,
-      34,  -399,  -399,   114,  -399,   125,  2096,  1011,  -399,  -399,
-    -399,   435,   531,  -399,    -7,   517,   517,  -399,  -399,  -399,
-    -399,  -399,  -399,  -399,  -399,  -399,  2656,    93,   101,  2656,
-     109,  1990,    34,   187,  2719,   112,  2005,  1451,  -399,  1990,
-     279,    12,  -399,  1357,  2656,  -399,   117,  -399,  1990,    38,
-     205,    59,  2656,  1990,  2098,   153,  -399,  -399,  -399,  1990,
-      12,   517,   517,   517,   127,   127,   220,   294,  2656,  2656,
-    2656,  2656,  2656,  2656,  2191,  2656,  2656,  2656,  2656,  2656,
-    2656,  2656,  2656,  2656,  2656,  2656,  2656,  2656,  2656,  2656,
-    -399,  -399,    24,  2284,  2656,  2656,  2656,  2656,  2656,  -399,
-     213,  -399,  -399,  -399,   219,  -399,  -399,  -399,  -399,  -399,
-    -399,  -399,   156,  -399,  -399,  -399,    55,    34,  -399,  -399,
-    2656,  2656,  2656,  2656,  2656,  2656,  -399,  -399,  -399,  -399,
-    -399,  2656,  2656,    65,  -399,  -399,  -399,   170,  -399,  -399,
-     322,   160,  2656,    12,  2377,  2470,  -399,   255,  -399,  -399,
-     419,   246,  -399,  2656,   263,   197,   197,  -399,  2719,   217,
-      70,  -399,   431,  1439,  1897,  1715,   612,   207,  2719,  2678,
-    1283,  1283,  1529,  1622,  1806,   320,   517,   517,  2656,  2656,
-    -399,  2563,   175,  -399,  -399,   434,   241,    97,   257,   113,
-     260,   627,  -399,   265,  -399,    10,   258,  2656,  2656,  2656,
-    2656,   282,  1201,  -399,  2656,  2656,   187,  -399,    26,  -399,
-      26,    26,    26,    26,    26,   199,    -8,  -399,  2656,   276,
-      34,  -399,  -399,   439,  -399,   515,  -399,   527,  -399,  -399,
-    -399,   123,  2656,   297,  -399,  -399,  2656,   268,   140,  -399,
-     530,  2656,  -399,   306,  -399,   315,  -399,   317,  -399,  -399,
-    -399,   187,  -399,  -399,   308,   227,    26,   230,   242,    26,
-    -399,   247,   245,  -399,  -399,  -399,   249,   332,   190,  2656,
-     251,   253,   170,  -399,  -399,  -399,  -399,  -399,  -399,  -399,
-    -399,  -399,   144,  -399,  1189,   349,  -399,  -399,   272,  -399,
-    -399,  -399,   358,   170,  -399,  2656,  -399,  -399,   370,   370,
-    2656,   370,  2656,   280,   370,   370,    33,  -399,  -399,  -399,
-     313,    33,  -399,   369,   370,   370,  -399,    71,    71,   291,
-     114,   375,   370,  -399,  -399,  -399,  -399,  -399,  -399,  -399,
-     723,  -399,   114,   114,  -399,   370,   299,  -399,  -399,   370,
-    -399,  -399,   114,    40,  -399,  -399,  -399,   819,  -399,  2656,
-     114,  1295,  -399,   381,   330,  -399,  -399,   304,  -399,   311,
-    -399,  -399,  -399,   370,   370,   915,    71,  -399,  -399,  -399
+     698,  -390,  -390,  -390,  -390,  -390,  -390,    42,  -390,  2657,
+      63,  1108,  1012,  -390,  -390,  -390,  1731,  2657,  2657,   411,
+     411,   411,   411,   411,  -390,   411,   411,  -390,  -390,    71,
+     -13,  -390,  2657,  -390,  -390,  -390,  2657,  -390,     6,    24,
+      45,  1638,  1452,   411,  1545,  1822,    47,  2657,     1,  2657,
+    2657,  2657,  2657,  2657,  2657,  2657,  1913,    23,    12,  -390,
+      43,  -390,  -390,  -390,  -390,  2720,  -390,  -390,    51,    77,
+     107,  -390,  -390,    85,  -390,  -390,  -390,  -390,  -390,  -390,
+      47,    83,  -390,    66,    90,    94,   100,     4,   109,   124,
+      63,  -390,  -390,    65,  -390,   125,  2004,  1012,  -390,  -390,
+    -390,   436,   532,  -390,     0,   614,   614,  -390,  -390,  -390,
+    -390,  -390,  -390,  -390,  -390,  -390,  2657,   126,   129,  2657,
+      87,  1898,    63,   208,  2720,   133,  2006,  1452,  -390,  1898,
+     280,    12,  -390,  1358,  2657,  -390,   138,  -390,  -390,   139,
+    1898,    44,   234,    99,  -390,  2657,  1898,  2099,   172,  -390,
+    -390,  -390,  1898,    12,   614,   614,   614,   251,   251,   252,
+     144,  2657,  2657,  2657,  2657,  2657,  2657,  2192,  2657,  2657,
+    2657,  2657,  2657,  2657,  2657,  2657,  2657,  2657,  2657,  2657,
+    2657,  2657,  2657,  -390,  -390,    32,  2285,  2657,  2657,  2657,
+    2657,  2657,  -390,   243,  -390,   250,  -390,  -390,  -390,  -390,
+    -390,  -390,  -390,   178,  -390,  -390,  -390,    47,    63,  -390,
+    -390,  2657,  2657,  2657,  2657,  2657,  2657,  -390,  -390,  -390,
+    -390,  -390,  2657,  2657,    73,  -390,  -390,  -390,   214,  -390,
+    -390,   230,   187,  2657,    12,  2378,  2471,  -390,   283,  -390,
+    -390,   295,   269,  -390,  2657,   285,   223,   223,  -390,  2720,
+     147,    86,  -390,   432,  1440,  1807,  1623,   104,   421,  2720,
+    2679,  1284,  1284,  1530,   249,  1716,   321,   614,   614,  2657,
+    2657,  -390,  2564,   203,  -390,  -390,   516,   159,    93,   220,
+      96,   242,   628,  -390,   293,  -390,    29,   292,  2657,  2657,
+    2657,  2657,   301,  1202,  -390,  2657,  2657,   208,  -390,    23,
+    -390,    23,    23,    23,    23,    23,   215,   -44,  -390,  2657,
+     300,    63,  -390,  -390,   528,  -390,   531,  -390,   538,  -390,
+    -390,  -390,   113,  2657,   320,  -390,  -390,  2657,   258,   137,
+    -390,   612,  2657,  -390,   323,  -390,   343,  -390,   344,  -390,
+    -390,  -390,   208,  -390,  -390,   333,   273,    23,   277,   278,
+      23,  -390,   281,   257,  -390,  -390,  -390,   287,   370,   226,
+    2657,   294,   298,   214,  -390,  -390,  -390,  -390,  -390,  -390,
+    -390,  -390,  -390,   141,  -390,  1190,   384,  -390,  -390,   299,
+    -390,  -390,  -390,   383,   214,  -390,  2657,  -390,  -390,   395,
+     395,  2657,   395,  2657,   303,   395,   395,    56,  -390,  -390,
+    -390,   332,    56,  -390,   390,   395,   395,  -390,   -14,   -14,
+     319,    65,   403,   395,  -390,  -390,  -390,  -390,  -390,  -390,
+    -390,   724,  -390,    65,    65,  -390,   395,   322,  -390,  -390,
+     395,  -390,  -390,    65,    10,  -390,  -390,  -390,   820,  -390,
+    2657,    65,  1296,  -390,   405,   356,  -390,  -390,   329,  -390,
+     336,  -390,  -390,  -390,   395,   395,   916,   -14,  -390,  -390,
+    -390
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -399,  -399,  -399,  -399,  -399,  -399,  -399,  -399,   -10,  -399,
-     -33,     3,  -399,   -12,  -399,   397,   323,    -2,  -399,  -399,
-    -399,  -399,  -399,  -280,  -398,  -237,  -374,  -399,    22,  -190,
-    -240,   -19,  -399,  -399,   -77,   388,  -399,   223,  -267,  -293,
-    -399,    25,    -5,   -35,  -399,  -399,  -399,  -399,  -399,  -399,
-    -399,  -399,    79,  -399,  -399,  -399,  -110,  -119,  -399,  -399,
-       2,   382,   383,  -399,  -399,    42
+    -390,  -390,  -390,  -390,  -390,  -390,  -390,  -390,   -10,  -390,
+     -61,     3,  -390,   -12,  -390,   429,   345,    -2,  -390,  -390,
+    -390,  -390,  -390,  -283,  -389,    -9,  -359,  -390,    50,   -95,
+    -236,    22,  -390,  -390,   -77,   409,  -390,   -41,  -271,  -315,
+    -390,    46,    -5,   -35,  -390,  -390,  -390,  -390,  -390,  -390,
+    -390,  -390,    79,  -390,  -390,  -390,  -110,  -119,  -390,  -390,
+       2,   434,   435,  -390,  -390,    41
 };
 
 /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
@@ -451,227 +453,255 @@ static const yytype_int16 yypgoto[] =
 #define YYTABLE_NINF -203
 static const yytype_int16 yytable[] =
 {
-      75,    93,    93,   102,    57,   219,   220,   131,   231,    94,
-     428,   104,   354,   405,   206,   150,   162,    14,   163,   342,
-      19,   110,   110,   110,   110,   110,   119,   110,   110,   362,
-     343,   128,   238,   268,   137,   269,    19,    20,    21,    19,
-     141,   189,    74,    74,   133,   110,   139,   184,   270,   185,
-     146,   157,   356,   415,   360,   361,   120,   441,   459,   184,
-     443,   185,   112,   113,   114,   115,   444,   116,   117,   396,
-     158,   159,   160,   161,   383,   200,   125,   307,   191,   237,
-     205,   131,   324,   192,   134,   135,   186,    93,   187,   202,
-     401,    93,    93,   161,   364,   217,   105,   106,   347,   233,
-     350,   142,   305,   158,   159,   160,   194,   131,   201,   334,
-     164,   121,   225,   188,   223,   124,   284,   425,   426,   393,
-     129,   230,    57,   138,   144,   336,   143,   271,   149,   133,
-     151,   152,   153,   154,   155,   371,   158,   159,   160,   240,
-     126,   235,   158,   159,   160,   209,   127,   158,   159,   160,
-     409,   183,   376,   245,   246,   247,   397,   249,   250,   252,
-     196,   354,   207,   287,   288,   289,   290,   291,   292,   232,
-     294,   295,   197,   430,   158,   159,   160,   281,   275,   276,
-     277,   278,   279,   280,   273,   435,   436,   306,   198,   199,
-     158,   159,   160,   203,   204,   442,   221,   297,   365,   447,
-     158,   159,   160,   448,   222,   298,   300,   301,   302,   303,
-     304,   224,   378,   226,   228,   236,    57,   158,   159,   160,
-     234,   158,   159,   160,  -203,  -203,   241,   313,   182,   315,
-     317,   243,   210,   211,   212,   213,   282,   323,   321,   214,
-     248,   215,   285,   309,   253,   254,   255,   256,   257,   258,
-     259,   260,   261,   262,   263,   264,   265,   266,   267,   293,
-     359,   333,   312,   327,   328,   318,   330,   158,   159,   160,
-     168,    93,   320,   131,   322,   403,   160,   335,   331,  -202,
-     337,   344,   346,   300,   349,   300,   339,   358,   375,   349,
-     349,  -202,   -74,   353,   158,   159,   160,    19,   178,  -202,
-     367,   363,   366,   179,   180,   181,   382,   373,   182,   384,
-       1,     2,     3,     4,     5,     6,   379,   372,   158,   159,
-     160,  -202,  -202,  -202,  -202,   380,    57,   381,  -202,   386,
-    -202,   385,   387,  -202,   158,   159,   160,   158,   159,   160,
-    -202,  -202,  -202,  -202,   388,   158,   159,   160,   390,   389,
-     131,   391,   392,   394,   349,   395,  -202,  -202,  -202,   398,
-    -202,  -202,  -202,  -202,  -202,  -202,  -202,  -202,  -202,  -202,
-    -202,   158,   159,   160,   399,  -202,  -202,  -202,   400,   406,
-    -202,  -202,   412,   168,   169,   349,   416,   346,   418,   421,
-     420,   416,   408,   429,   410,   431,   244,   413,   414,   158,
-     159,   160,   439,   450,   451,   374,   453,   422,   423,    98,
-      93,   178,   437,   454,   411,   432,   179,   180,   181,    74,
-     216,   182,   449,   123,   311,    19,   419,    93,   438,   296,
-     147,   148,   440,   107,   349,   -13,    76,     0,   108,   455,
-       0,     0,     0,     0,    74,    93,    16,     0,    17,    18,
-      19,    20,    21,    22,    23,    77,   456,   457,    24,    25,
-      26,    27,    28,     0,    29,    30,    31,    32,    33,    34,
-      78,    97,    79,    80,    35,    81,    82,    83,    84,    85,
-      86,     0,     0,     0,    87,    88,    89,    90,    36,     0,
-      37,    38,    39,    40,    41,    42,   158,   159,   160,     0,
-      43,    44,    45,    46,    47,    48,    91,    49,   158,   159,
-     160,   158,   159,   160,     0,    50,   158,   159,   160,     0,
-       0,   319,     0,     0,     0,     0,     0,    51,    52,    53,
-       0,    -3,    76,   325,    54,    55,   332,     0,    56,    92,
-      74,   368,    16,     0,    17,    18,    19,    20,    21,    22,
-      23,    77,     0,     0,    24,    25,    26,    27,    28,     0,
-      29,    30,    31,    32,    33,    34,    78,    97,    79,    80,
-      35,    81,    82,    83,    84,    85,    86,     0,     0,     0,
-      87,    88,    89,    90,    36,     0,    37,    38,    39,    40,
-      41,    42,   158,   159,   160,     0,    43,    44,    45,    46,
-      47,    48,    91,    49,   158,   159,   160,   158,   159,   160,
-       0,    50,     0,   179,   180,   181,     0,   369,   182,     0,
-       0,     0,     0,    51,    52,    53,     0,     0,    76,   370,
-      54,    55,   377,     0,    56,    92,    74,   338,    16,     0,
-      17,    18,    19,    20,    21,    22,    23,    77,     0,     0,
-      24,    25,    26,    27,    28,     0,    29,    30,    31,    32,
-      33,    34,    78,    97,    79,    80,    35,    81,    82,    83,
-      84,    85,    86,     0,     0,     0,    87,    88,    89,    90,
-      36,     0,    37,    38,    39,    40,    41,    42,     0,     0,
-       0,     0,    43,    44,    45,    46,    47,    48,    91,    49,
-       0,     0,     0,   178,     0,     0,     0,    50,   179,   180,
-     181,     0,     0,   182,     0,     0,     0,     0,     0,    51,
-      52,    53,     0,     0,    76,     0,    54,    55,     0,     0,
-      56,    92,    74,   434,    16,     0,    17,    18,    19,    20,
-      21,    22,    23,    77,     0,     0,    24,    25,    26,    27,
-      28,     0,    29,    30,    31,    32,    33,    34,    78,    97,
-      79,    80,    35,    81,    82,    83,    84,    85,    86,     0,
-       0,     0,    87,    88,    89,    90,    36,     0,    37,    38,
-      39,    40,    41,    42,     0,     0,     0,     0,    43,    44,
-      45,    46,    47,    48,    91,    49,     0,     0,     0,     0,
-       0,     0,     0,    50,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    51,    52,    53,     0,     0,
-      76,     0,    54,    55,     0,     0,    56,    92,    74,   446,
-      16,     0,    17,    18,    19,    20,    21,    22,    23,    77,
-       0,     0,    24,    25,    26,    27,    28,     0,    29,    30,
-      31,    32,    33,    34,    78,    97,    79,    80,    35,    81,
-      82,    83,    84,    85,    86,     0,     0,     0,    87,    88,
-      89,    90,    36,     0,    37,    38,    39,    40,    41,    42,
-       0,     0,     0,     0,    43,    44,    45,    46,    47,    48,
-      91,    49,     0,     0,     0,     0,     0,     0,     0,    50,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    51,    52,    53,     0,     0,    76,     0,    54,    55,
-       0,     0,    56,    92,    74,     0,    16,     0,    17,    18,
-      19,    20,    21,    22,    23,    77,     0,     0,    24,    25,
-      26,    27,    28,     0,    29,    30,    31,    32,    33,    34,
-      78,    97,    79,    80,    35,    81,    82,    83,    84,    85,
-      86,     0,     0,     0,    87,    88,    89,    90,    36,     0,
-      37,    38,    39,    40,    41,    42,     0,     0,     0,     0,
-      43,    44,    45,    46,    47,    48,    91,    49,     0,     0,
-     458,     0,     0,     0,     0,    50,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    51,    52,    53,
-       0,     0,    76,     0,    54,    55,     0,     0,    56,    92,
-      74,     0,    16,     0,    17,    18,    19,    20,    21,    22,
-      23,    77,     0,     0,    24,    25,    26,    27,    28,     0,
-      29,    30,    31,    32,    33,    34,    78,    97,    79,    80,
-      35,    81,    82,    83,    84,    85,    86,     0,     0,     0,
-      87,    88,    89,    90,    36,     0,    37,    38,    39,    40,
-      41,    42,     0,     0,     0,     0,    43,    44,    45,    46,
-      47,    48,    91,    49,     0,     0,     0,     0,     0,     0,
-       0,    50,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    51,    52,    53,     0,     0,    76,     0,
-      54,    55,     0,     0,    56,    92,    74,     0,    16,     0,
-      17,    18,    19,    20,    21,    22,    23,    77,     0,     0,
-      24,    25,    26,    27,    28,     0,    29,    30,    31,    32,
-      33,    34,    78,     0,    79,    80,    35,    81,    82,    83,
-      84,    85,    86,     0,     0,     0,    87,    88,    89,    90,
-      36,     0,    37,    38,    39,    40,    41,    42,     0,     0,
-       0,     0,    43,    44,    45,    46,    47,    48,    91,    49,
-       0,     0,     0,     0,     0,     0,     0,    50,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    51,
-      52,    53,    76,     0,     0,     0,    54,    55,     0,     0,
-      56,    92,    16,     0,    17,    18,    19,    20,    21,    22,
-      23,   -69,     0,     0,    24,    25,    26,    27,    28,     0,
-      29,    30,    31,    32,    33,    34,     0,     0,     0,     0,
-      35,     0,     0,   165,     0,     0,     0,     0,     0,     0,
-     166,   167,   168,   169,    36,     0,    37,    38,    39,    40,
-      41,    42,     0,     0,     0,     0,    43,    44,    45,    46,
-      47,    48,   171,    49,   172,   173,   174,   175,   176,   177,
-     178,    50,     0,     0,     0,   179,   180,   181,     0,     0,
-     182,     0,     0,    51,    52,    53,    76,     0,     0,     0,
-      54,    55,     0,     0,    56,     0,    16,     0,    17,    18,
-      19,    20,    21,    22,    23,     0,     0,     0,    24,    25,
-      26,    27,    28,     0,    29,    30,    31,    32,    33,    34,
-       0,     0,     0,     0,    35,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   166,   167,   168,   169,    36,     0,
-      37,    38,    39,    40,    41,    42,     0,  -170,     0,     0,
-      43,    44,    45,    46,    47,    48,   184,    49,   185,  -170,
-     174,   175,   176,   177,   178,    50,     0,  -170,     0,   179,
-     180,   181,     0,     0,   182,     0,     0,    51,    52,    53,
-       0,     0,     0,     0,    54,    55,     0,   -69,    56,  -170,
-    -170,  -170,  -170,     0,     0,     0,  -170,     0,  -170,     0,
-       0,  -170,     0,     0,     0,     0,     0,     0,  -170,  -170,
-    -170,  -170,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,  -170,  -170,  -170,     0,  -170,  -170,
-    -170,  -170,  -170,  -170,  -170,  -170,  -170,  -170,  -170,     0,
-       0,     0,     0,  -170,  -170,  -170,     0,     0,  -170,  -170,
-      74,     0,    16,     0,    17,    18,    19,    20,    21,    22,
-      23,     0,     0,     0,   130,    25,    26,    27,    28,   108,
-      29,    30,    31,    32,    33,    34,     0,     0,     0,     0,
-      35,     0,     0,  -203,     0,     0,     0,     0,     0,     0,
-     166,   167,   168,   169,    36,     0,    37,    38,    39,    40,
-      41,    42,     0,     0,     0,     0,    43,    44,    45,    46,
-      47,    48,     0,    49,   172,   173,   174,   175,   176,   177,
-     178,    50,     0,     0,     0,   179,   180,   181,     0,     0,
-     182,     0,     0,    51,    52,    53,     0,     0,     0,     0,
-      54,    55,     0,    74,    56,    16,     0,    17,    18,    19,
-      20,    21,    22,    23,     0,     0,     0,    24,    25,    26,
-      27,    28,     0,    29,    30,    31,    32,    33,    34,     0,
-       0,     0,     0,    35,     0,     0,     0,     0,     0,     0,
-     166,   167,   168,   169,     0,     0,     0,    36,     0,    37,
+      75,    93,    93,   102,    57,   145,   221,   131,   232,    94,
+     355,   104,   220,   192,   207,   153,    19,    20,    21,    19,
+     429,   110,   110,   110,   110,   110,   363,   110,   110,   406,
+     444,   128,   426,   427,   138,   239,   445,   164,   343,   194,
+     143,   269,    14,   270,   133,   110,   141,    19,   397,   344,
+     149,   160,   165,   187,   166,   188,   271,   357,   365,   361,
+     362,   112,   113,   114,   115,    74,   116,   117,   460,   402,
+     144,   384,    74,   442,   201,   137,   416,   161,   162,   163,
+     206,   131,   119,   134,   135,   308,   187,    93,   188,   203,
+     120,    93,    93,   164,   191,   218,   105,   106,   325,   234,
+     161,   162,   163,   306,   147,   335,   195,   202,   337,   125,
+     131,   121,   226,   208,   224,   124,   189,   285,   190,   238,
+     129,   231,    57,   140,   394,   372,   146,   126,   152,   133,
+     154,   155,   156,   157,   158,   272,   288,   289,   290,   291,
+     292,   293,   241,   295,   296,   210,   167,   236,   127,   377,
+     161,   162,   163,   398,   186,   410,   246,   247,   248,   355,
+     250,   251,   253,   161,   162,   163,   297,   324,   233,   197,
+     161,   162,   163,   161,   162,   163,   161,   162,   163,   334,
+     282,   276,   277,   278,   279,   280,   281,   274,   307,   225,
+     161,   162,   163,   198,   348,   181,   351,   199,   298,   366,
+     182,   183,   184,   200,   448,   185,   299,   301,   302,   303,
+     304,   305,   204,   379,   161,   162,   163,    57,   161,   162,
+     163,   161,   162,   163,   161,   162,   163,   205,   314,   222,
+     316,   318,   223,   360,   227,   229,   161,   162,   163,   322,
+     336,   -82,   235,   249,   237,   242,   245,   254,   255,   256,
+     257,   258,   259,   260,   261,   262,   263,   264,   265,   266,
+     267,   268,   338,   244,   328,   329,   283,   331,   211,   212,
+     213,   214,    93,   286,   131,   215,   404,   216,   376,   383,
+    -202,   294,   385,   347,   301,   350,   301,   310,   359,   313,
+     350,   350,  -202,   319,   354,   321,   323,   161,   162,   163,
+    -202,   368,   163,   161,   162,   163,   332,   161,   162,   163,
+     169,   170,   171,   172,   340,   345,    19,   364,   373,   161,
+     162,   163,  -202,  -202,  -202,  -202,   367,    57,   -74,  -202,
+     374,  -202,   312,   380,  -202,   161,   162,   163,   179,   180,
+     181,  -202,  -202,  -202,  -202,   182,   183,   184,  -203,  -203,
+     185,   131,   185,   381,   382,   350,   386,  -202,  -202,  -202,
+     391,  -202,  -202,  -202,  -202,  -202,  -202,  -202,  -202,  -202,
+    -202,  -202,   161,   162,   163,   387,  -202,  -202,  -202,   388,
+     389,  -202,  -202,   390,   171,   172,   350,   417,   347,   392,
+     393,   421,   417,   409,   399,   411,   395,   320,   414,   415,
+     396,   400,   431,   401,   407,   413,   375,   419,   423,   424,
+     422,    93,   181,   438,   436,   437,   433,   182,   183,   184,
+      74,   430,   185,   432,   443,   440,    19,   451,    93,   439,
+     452,   454,   449,   441,   107,   350,   -13,    76,   455,   108,
+     456,    98,   217,   412,   123,    74,    93,    16,   420,    17,
+      18,    19,    20,    21,    22,    23,    77,   457,   458,    24,
+      25,    26,    27,    28,   450,    29,    30,    31,    32,    33,
+      34,    78,    97,    79,    80,    35,    81,    82,    83,    84,
+      85,    86,   150,   151,   171,    87,    88,    89,    90,    36,
+       0,    37,    38,    39,    40,    41,    42,     0,     0,     0,
+       0,    43,    44,    45,    46,    47,    48,    91,    49,   161,
+     162,   163,   181,     0,     0,     0,    50,   182,   183,   184,
+       0,     0,   185,     0,     0,     0,     0,     0,    51,    52,
+      53,     0,    -3,    76,   326,    54,    55,     0,     0,    56,
+      92,    74,     0,    16,     0,    17,    18,    19,    20,    21,
+      22,    23,    77,     0,     0,    24,    25,    26,    27,    28,
+       0,    29,    30,    31,    32,    33,    34,    78,    97,    79,
+      80,    35,    81,    82,    83,    84,    85,    86,     0,     0,
+       0,    87,    88,    89,    90,    36,     0,    37,    38,    39,
+      40,    41,    42,   161,   162,   163,     0,    43,    44,    45,
+      46,    47,    48,    91,    49,   161,   162,   163,   161,   162,
+     163,     0,    50,     0,     0,   161,   162,   163,   333,     0,
+       0,     0,     0,     0,    51,    52,    53,     0,     0,    76,
+     369,    54,    55,   370,     0,    56,    92,    74,   339,    16,
+     371,    17,    18,    19,    20,    21,    22,    23,    77,     0,
+       0,    24,    25,    26,    27,    28,     0,    29,    30,    31,
+      32,    33,    34,    78,    97,    79,    80,    35,    81,    82,
+      83,    84,    85,    86,     0,     0,     0,    87,    88,    89,
+      90,    36,     0,    37,    38,    39,    40,    41,    42,   161,
+     162,   163,     0,    43,    44,    45,    46,    47,    48,    91,
+      49,     1,     2,     3,     4,     5,     6,     0,    50,     0,
+     182,   183,   184,     0,   378,   185,     0,     0,     0,     0,
+      51,    52,    53,     0,     0,    76,     0,    54,    55,     0,
+       0,    56,    92,    74,   435,    16,     0,    17,    18,    19,
+      20,    21,    22,    23,    77,     0,     0,    24,    25,    26,
+      27,    28,     0,    29,    30,    31,    32,    33,    34,    78,
+      97,    79,    80,    35,    81,    82,    83,    84,    85,    86,
+       0,     0,     0,    87,    88,    89,    90,    36,     0,    37,
       38,    39,    40,    41,    42,     0,     0,     0,     0,    43,
-      44,    45,    46,    47,    48,     0,    49,   175,   176,   177,
-     178,     0,     0,     0,    50,   179,   180,   181,     0,     0,
-     182,     0,     0,     0,     0,     0,    51,    52,    53,     0,
-       0,     0,     0,    54,    55,     0,    74,    56,    16,     0,
-      17,    18,    19,    20,    21,    22,    23,     0,     0,     0,
-     136,    25,    26,    27,    28,     0,    29,    30,    31,    32,
-      33,    34,     0,     0,     0,     0,    35,     0,     0,     0,
-       0,     0,     0,   166,   167,   168,   169,     0,     0,     0,
-      36,     0,    37,    38,    39,    40,    41,    42,     0,     0,
-       0,     0,    43,    44,    45,    46,    47,    48,     0,    49,
-       0,   176,   177,   178,     0,     0,     0,    50,   179,   180,
-     181,     0,     0,   182,     0,     0,     0,     0,     0,    51,
-      52,    53,     0,     0,     0,     0,    54,    55,     0,     0,
-      56,    16,   103,    17,    18,    19,    20,    21,    22,    23,
-       0,     0,     0,    24,    25,    26,    27,    28,     0,    29,
-      30,    31,    32,    33,    34,     0,     0,     0,     0,    35,
-       0,     0,     0,     0,     0,     0,   166,  -203,   168,   169,
-       0,     0,     0,    36,     0,    37,    38,    39,    40,    41,
+      44,    45,    46,    47,    48,    91,    49,     0,     0,     0,
+       0,     0,     0,     0,    50,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    51,    52,    53,     0,
+       0,    76,     0,    54,    55,     0,     0,    56,    92,    74,
+     447,    16,     0,    17,    18,    19,    20,    21,    22,    23,
+      77,     0,     0,    24,    25,    26,    27,    28,     0,    29,
+      30,    31,    32,    33,    34,    78,    97,    79,    80,    35,
+      81,    82,    83,    84,    85,    86,     0,     0,     0,    87,
+      88,    89,    90,    36,     0,    37,    38,    39,    40,    41,
       42,     0,     0,     0,     0,    43,    44,    45,    46,    47,
-      48,     0,    49,     0,     0,   177,   178,     0,     0,     0,
-      50,   179,   180,   181,     0,     0,   182,     0,     0,     0,
-       0,     0,    51,    52,    53,     0,     0,     0,     0,    54,
-      55,     0,    16,    56,    17,    18,    19,    20,    21,    22,
-      23,   140,     0,     0,    24,    25,    26,    27,    28,     0,
+      48,    91,    49,     0,     0,     0,     0,     0,     0,     0,
+      50,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    51,    52,    53,     0,     0,    76,     0,    54,
+      55,     0,     0,    56,    92,    74,     0,    16,     0,    17,
+      18,    19,    20,    21,    22,    23,    77,     0,     0,    24,
+      25,    26,    27,    28,     0,    29,    30,    31,    32,    33,
+      34,    78,    97,    79,    80,    35,    81,    82,    83,    84,
+      85,    86,     0,     0,     0,    87,    88,    89,    90,    36,
+       0,    37,    38,    39,    40,    41,    42,     0,     0,     0,
+       0,    43,    44,    45,    46,    47,    48,    91,    49,     0,
+       0,   459,     0,     0,     0,     0,    50,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    51,    52,
+      53,     0,     0,    76,     0,    54,    55,     0,     0,    56,
+      92,    74,     0,    16,     0,    17,    18,    19,    20,    21,
+      22,    23,    77,     0,     0,    24,    25,    26,    27,    28,
+       0,    29,    30,    31,    32,    33,    34,    78,    97,    79,
+      80,    35,    81,    82,    83,    84,    85,    86,     0,     0,
+       0,    87,    88,    89,    90,    36,     0,    37,    38,    39,
+      40,    41,    42,     0,     0,     0,     0,    43,    44,    45,
+      46,    47,    48,    91,    49,     0,     0,     0,     0,     0,
+       0,     0,    50,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,    51,    52,    53,     0,     0,    76,
+       0,    54,    55,     0,     0,    56,    92,    74,     0,    16,
+       0,    17,    18,    19,    20,    21,    22,    23,    77,     0,
+       0,    24,    25,    26,    27,    28,     0,    29,    30,    31,
+      32,    33,    34,    78,     0,    79,    80,    35,    81,    82,
+      83,    84,    85,    86,     0,     0,     0,    87,    88,    89,
+      90,    36,     0,    37,    38,    39,    40,    41,    42,     0,
+       0,     0,     0,    43,    44,    45,    46,    47,    48,    91,
+      49,     0,     0,     0,     0,     0,     0,     0,    50,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      51,    52,    53,    76,     0,     0,     0,    54,    55,     0,
+       0,    56,    92,    16,     0,    17,    18,    19,    20,    21,
+      22,    23,   -69,     0,     0,    24,    25,    26,    27,    28,
+       0,    29,    30,    31,    32,    33,    34,     0,     0,     0,
+       0,    35,     0,     0,   168,     0,     0,     0,     0,     0,
+       0,   169,   170,   171,   172,    36,     0,    37,    38,    39,
+      40,    41,    42,     0,     0,     0,     0,    43,    44,    45,
+      46,    47,    48,   174,    49,   175,   176,   177,   178,   179,
+     180,   181,    50,     0,     0,     0,   182,   183,   184,     0,
+       0,   185,     0,     0,    51,    52,    53,    76,     0,     0,
+       0,    54,    55,     0,     0,    56,     0,    16,     0,    17,
+      18,    19,    20,    21,    22,    23,     0,     0,     0,    24,
+      25,    26,    27,    28,     0,    29,    30,    31,    32,    33,
+      34,     0,     0,     0,     0,    35,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   169,   170,   171,   172,    36,
+       0,    37,    38,    39,    40,    41,    42,     0,  -170,     0,
+       0,    43,    44,    45,    46,    47,    48,   187,    49,   188,
+    -170,   177,   178,   179,   180,   181,    50,     0,  -170,     0,
+     182,   183,   184,     0,     0,   185,     0,     0,    51,    52,
+      53,     0,     0,     0,     0,    54,    55,     0,   -69,    56,
+    -170,  -170,  -170,  -170,     0,     0,     0,  -170,     0,  -170,
+       0,     0,  -170,     0,     0,     0,     0,     0,     0,  -170,
+    -170,  -170,  -170,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,  -170,  -170,  -170,     0,  -170,
+    -170,  -170,  -170,  -170,  -170,  -170,  -170,  -170,  -170,  -170,
+       0,     0,     0,     0,  -170,  -170,  -170,     0,     0,  -170,
+    -170,    74,     0,    16,     0,    17,    18,    19,    20,    21,
+      22,    23,     0,     0,     0,   130,    25,    26,    27,    28,
+     108,    29,    30,    31,    32,    33,    34,     0,     0,     0,
+       0,    35,     0,     0,  -203,     0,     0,     0,     0,     0,
+       0,   169,   170,   171,   172,    36,     0,    37,    38,    39,
+      40,    41,    42,     0,     0,     0,     0,    43,    44,    45,
+      46,    47,    48,     0,    49,   175,   176,   177,   178,   179,
+     180,   181,    50,     0,     0,     0,   182,   183,   184,     0,
+       0,   185,     0,     0,    51,    52,    53,     0,     0,     0,
+       0,    54,    55,     0,    74,    56,    16,     0,    17,    18,
+      19,    20,    21,    22,    23,     0,     0,     0,   136,    25,
+      26,    27,    28,   137,    29,    30,    31,    32,    33,    34,
+       0,     0,     0,     0,    35,     0,     0,     0,     0,     0,
+       0,   169,   170,   171,   172,     0,     0,     0,    36,     0,
+      37,    38,    39,    40,    41,    42,     0,     0,     0,     0,
+      43,    44,    45,    46,    47,    48,     0,    49,   178,   179,
+     180,   181,     0,     0,     0,    50,   182,   183,   184,     0,
+       0,   185,     0,     0,     0,     0,     0,    51,    52,    53,
+       0,     0,     0,     0,    54,    55,     0,    74,    56,    16,
+       0,    17,    18,    19,    20,    21,    22,    23,     0,     0,
+       0,    24,    25,    26,    27,    28,     0,    29,    30,    31,
+      32,    33,    34,     0,     0,     0,     0,    35,     0,     0,
+       0,     0,     0,     0,   169,  -203,   171,   172,     0,     0,
+       0,    36,     0,    37,    38,    39,    40,    41,    42,     0,
+       0,     0,     0,    43,    44,    45,    46,    47,    48,     0,
+      49,     0,     0,   180,   181,     0,     0,     0,    50,   182,
+     183,   184,     0,     0,   185,     0,     0,     0,     0,     0,
+      51,    52,    53,     0,     0,     0,     0,    54,    55,     0,
+       0,    56,    16,   103,    17,    18,    19,    20,    21,    22,
+      23,     0,     0,     0,    24,    25,    26,    27,    28,     0,
       29,    30,    31,    32,    33,    34,     0,     0,     0,     0,
-      35,     0,     0,     0,     0,     0,     0,   166,   167,   168,
-     169,     0,     0,     0,    36,     0,    37,    38,    39,    40,
+      35,     0,     0,     0,     0,     0,     0,   169,   170,   171,
+     172,     0,     0,     0,    36,     0,    37,    38,    39,    40,
       41,    42,     0,     0,     0,     0,    43,    44,    45,    46,
-      47,    48,     0,    49,     0,     0,   177,   178,     0,     0,
-       0,    50,   179,   180,   181,     0,     0,   182,     0,     0,
+      47,    48,     0,    49,     0,     0,   180,   181,     0,     0,
+       0,    50,   182,   183,   184,     0,     0,   185,     0,     0,
        0,     0,     0,    51,    52,    53,     0,     0,     0,     0,
       54,    55,     0,    16,    56,    17,    18,    19,    20,    21,
-      22,    23,     0,     0,     0,    24,    25,    26,    27,    28,
+      22,    23,   142,     0,     0,    24,    25,    26,    27,    28,
        0,    29,    30,    31,    32,    33,    34,     0,     0,     0,
        0,    35,     0,     0,     0,     0,     0,     0,  -203,     0,
-     168,   169,     0,     0,     0,    36,     0,    37,    38,    39,
+     171,   172,     0,     0,     0,    36,     0,    37,    38,    39,
       40,    41,    42,     0,     0,     0,     0,    43,    44,    45,
-      46,    47,    48,     0,    49,     0,     0,   177,   178,     0,
-       0,     0,    50,   179,   180,   181,     0,     0,   182,     0,
+      46,    47,    48,     0,    49,     0,     0,   180,   181,     0,
+       0,     0,    50,   182,   183,   184,     0,     0,   185,     0,
        0,     0,     0,     0,    51,    52,    53,     0,     0,     0,
-       0,    54,    55,     0,   156,    56,    16,     0,    17,    18,
+       0,    54,    55,     0,    16,    56,    17,    18,    19,    20,
+      21,    22,    23,     0,     0,     0,    24,    25,    26,    27,
+      28,     0,    29,    30,    31,    32,    33,    34,     0,     0,
+       0,     0,    35,     0,     0,     0,     0,     0,     0,     0,
+       0,   171,   172,     0,     0,     0,    36,     0,    37,    38,
+      39,    40,    41,    42,     0,     0,     0,     0,    43,    44,
+      45,    46,    47,    48,     0,    49,     0,     0,   180,   181,
+       0,     0,     0,    50,   182,   183,   184,     0,     0,   185,
+       0,     0,     0,     0,     0,    51,    52,    53,     0,     0,
+       0,     0,    54,    55,     0,   159,    56,    16,     0,    17,
+      18,    19,    20,    21,    22,    23,     0,     0,     0,    24,
+      25,    26,    27,    28,     0,    29,    30,    31,    32,    33,
+      34,     0,     0,     0,     0,    35,   211,   212,   213,   214,
+       0,     0,     0,   215,     0,   216,     0,     0,     0,    36,
+       0,    37,    38,    39,    40,    41,    42,     0,     0,     0,
+       0,    43,    44,    45,    46,    47,    48,     0,    49,     0,
+       0,   161,   162,   163,     0,     0,    50,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    51,    52,
+      53,     0,     0,     0,     0,    54,    55,     0,   230,    56,
+      16,     0,    17,    18,    19,    20,    21,    22,    23,     0,
+       0,     0,    24,    25,    26,    27,    28,     0,    29,    30,
+      31,    32,    33,    34,     0,     0,     0,     0,    35,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    36,     0,    37,    38,    39,    40,    41,    42,
+       0,     0,     0,     0,    43,    44,    45,    46,    47,    48,
+       0,    49,     0,     0,     0,     0,     0,     0,     0,    50,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,    51,    52,    53,     0,     0,     0,     0,    54,    55,
+       0,   240,    56,    16,     0,    17,    18,    19,    20,    21,
+      22,    23,     0,     0,     0,    24,    25,    26,    27,    28,
+       0,    29,    30,    31,    32,    33,    34,     0,     0,     0,
+       0,    35,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,    36,     0,    37,    38,    39,
+      40,    41,    42,     0,     0,     0,     0,    43,    44,    45,
+      46,    47,    48,     0,    49,     0,     0,     0,     0,     0,
+       0,     0,    50,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,    51,    52,    53,     0,     0,     0,
+       0,    54,    55,     0,   252,    56,    16,     0,    17,    18,
       19,    20,    21,    22,    23,     0,     0,     0,    24,    25,
       26,    27,    28,     0,    29,    30,    31,    32,    33,    34,
        0,     0,     0,     0,    35,     0,     0,     0,     0,     0,
-       0,     0,     0,   168,   169,     0,     0,     0,    36,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    36,     0,
       37,    38,    39,    40,    41,    42,     0,     0,     0,     0,
       43,    44,    45,    46,    47,    48,     0,    49,     0,     0,
-     177,   178,     0,     0,     0,    50,   179,   180,   181,     0,
-       0,   182,     0,     0,     0,     0,     0,    51,    52,    53,
-       0,     0,     0,     0,    54,    55,     0,   229,    56,    16,
+       0,     0,     0,     0,     0,    50,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    51,    52,    53,
+       0,     0,     0,     0,    54,    55,     0,   275,    56,    16,
        0,    17,    18,    19,    20,    21,    22,    23,     0,     0,
        0,    24,    25,    26,    27,    28,     0,    29,    30,    31,
-      32,    33,    34,     0,     0,     0,     0,    35,   210,   211,
-     212,   213,     0,     0,     0,   214,     0,   215,     0,     0,
+      32,    33,    34,     0,     0,     0,     0,    35,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,    36,     0,    37,    38,    39,    40,    41,    42,     0,
        0,     0,     0,    43,    44,    45,    46,    47,    48,     0,
-      49,     0,     0,   158,   159,   160,     0,     0,    50,     0,
+      49,     0,     0,     0,     0,     0,     0,     0,    50,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
       51,    52,    53,     0,     0,     0,     0,    54,    55,     0,
-     239,    56,    16,     0,    17,    18,    19,    20,    21,    22,
+     315,    56,    16,     0,    17,    18,    19,    20,    21,    22,
       23,     0,     0,     0,    24,    25,    26,    27,    28,     0,
       29,    30,    31,    32,    33,    34,     0,     0,     0,     0,
       35,     0,     0,     0,     0,     0,     0,     0,     0,     0,
@@ -680,7 +710,7 @@ static const yytype_int16 yytable[] =
       47,    48,     0,    49,     0,     0,     0,     0,     0,     0,
        0,    50,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,    51,    52,    53,     0,     0,     0,     0,
-      54,    55,     0,   251,    56,    16,     0,    17,    18,    19,
+      54,    55,     0,   317,    56,    16,     0,    17,    18,    19,
       20,    21,    22,    23,     0,     0,     0,    24,    25,    26,
       27,    28,     0,    29,    30,    31,    32,    33,    34,     0,
        0,     0,     0,    35,     0,     0,     0,     0,     0,     0,
@@ -689,240 +719,203 @@ static const yytype_int16 yytable[] =
       44,    45,    46,    47,    48,     0,    49,     0,     0,     0,
        0,     0,     0,     0,    50,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,    51,    52,    53,     0,
-       0,     0,     0,    54,    55,     0,   274,    56,    16,     0,
+       0,     0,     0,    54,    55,     0,   330,    56,    16,     0,
       17,    18,    19,    20,    21,    22,    23,     0,     0,     0,
       24,    25,    26,    27,    28,     0,    29,    30,    31,    32,
       33,    34,     0,     0,     0,     0,    35,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
       36,     0,    37,    38,    39,    40,    41,    42,     0,     0,
        0,     0,    43,    44,    45,    46,    47,    48,     0,    49,
-       0,     0,     0,     0,     0,     0,     0,    50,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    51,
-      52,    53,     0,     0,     0,     0,    54,    55,     0,   314,
-      56,    16,     0,    17,    18,    19,    20,    21,    22,    23,
-       0,     0,     0,    24,    25,    26,    27,    28,     0,    29,
-      30,    31,    32,    33,    34,     0,     0,     0,     0,    35,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    36,     0,    37,    38,    39,    40,    41,
-      42,     0,     0,     0,     0,    43,    44,    45,    46,    47,
-      48,     0,    49,     0,     0,     0,     0,     0,     0,     0,
-      50,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    51,    52,    53,     0,     0,     0,     0,    54,
-      55,     0,   316,    56,    16,     0,    17,    18,    19,    20,
-      21,    22,    23,     0,     0,     0,    24,    25,    26,    27,
-      28,     0,    29,    30,    31,    32,    33,    34,     0,     0,
-       0,     0,    35,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    36,     0,    37,    38,
-      39,    40,    41,    42,     0,     0,     0,     0,    43,    44,
-      45,    46,    47,    48,     0,    49,     0,     0,     0,     0,
-       0,     0,     0,    50,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    51,    52,    53,     0,     0,
-       0,     0,    54,    55,     0,   329,    56,    16,     0,    17,
-      18,    19,    20,    21,    22,    23,     0,     0,     0,    24,
-      25,    26,    27,    28,     0,    29,    30,    31,    32,    33,
-      34,     0,     0,     0,     0,    35,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    36,
-       0,    37,    38,    39,    40,    41,    42,     0,     0,     0,
-       0,    43,    44,    45,    46,    47,    48,     0,    49,     0,
-       0,     0,   165,     0,     0,     0,    50,     0,     0,   166,
-     167,   168,   169,     0,     0,     0,     0,     0,    51,    52,
-      53,     0,     0,     0,     0,    54,    55,     0,     0,    56,
-     170,   171,   326,   172,   173,   174,   175,   176,   177,   178,
-       0,     0,     0,   165,   179,   180,   181,     0,     0,   182,
-     166,   167,   168,   169,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   168,     0,     0,     0,    50,     0,     0,
+     169,   170,   171,   172,     0,     0,     0,     0,     0,    51,
+      52,    53,     0,     0,     0,     0,    54,    55,     0,     0,
+      56,   173,   174,   327,   175,   176,   177,   178,   179,   180,
+     181,     0,     0,     0,   168,   182,   183,   184,     0,     0,
+     185,   169,   170,   171,   172,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   170,   171,     0,   172,   173,   174,   175,   176,   177,
-     178,     0,     0,     0,     0,   179,   180,   181,     0,     0,
-     182
+       0,     0,   173,   174,     0,   175,   176,   177,   178,   179,
+     180,   181,     0,     0,     0,     0,   182,   183,   184,     0,
+       0,   185
 };
 
 static const yytype_int16 yycheck[] =
 {
-      10,    11,    12,    15,     9,    12,   116,    42,   127,    11,
-     408,    16,   292,   387,    91,    50,     9,     0,    11,     9,
-      15,    19,    20,    21,    22,    23,    11,    25,    26,   296,
-      20,    41,   142,     9,    44,    11,    15,    16,    17,    15,
-      45,    74,     9,     9,    42,    43,    44,     9,    24,    11,
-      48,    56,   292,    20,   294,   295,   103,   431,   456,     9,
-      20,    11,    20,    21,    22,    23,    26,    25,    26,   362,
-      77,    78,    79,    81,   341,    70,   103,    12,    23,    20,
-      90,   116,    12,    28,    42,    43,     9,    97,    11,    87,
-     383,   101,   102,    81,   102,    97,    17,    18,   288,   134,
-     290,    23,   221,    77,    78,    79,    23,   142,   103,    12,
-     103,    32,   122,     9,   119,    36,   193,    46,    47,   359,
-      41,   126,   127,    44,   103,    12,    47,   103,    49,   127,
-      51,    52,    53,    54,    55,    12,    77,    78,    79,   144,
-     103,   103,    77,    78,    79,    20,   103,    77,    78,    79,
-     390,   103,    12,   158,   159,   160,    12,   162,   163,   164,
-     103,   441,    48,   196,   197,   198,   199,   200,   201,   127,
-     203,   204,   103,   410,    77,    78,    79,   189,   183,   184,
-     185,   186,   187,   188,   182,   422,   423,   222,   103,   103,
-      77,    78,    79,   103,   103,   432,   103,   207,   308,   439,
-      77,    78,    79,   440,   103,   210,   211,   212,   213,   214,
-     215,   102,   331,    26,   102,    10,   221,    77,    78,    79,
-     103,    77,    78,    79,    97,    98,    73,   232,   101,   234,
-     235,    11,    42,    43,    44,    45,    23,    20,   243,    49,
-     161,    51,    23,    73,   165,   166,   167,   168,   169,   170,
-     171,   172,   173,   174,   175,   176,   177,   178,   179,   103,
-     293,    20,   102,   268,   269,    10,   271,    77,    78,    79,
-      63,   281,    26,   308,    11,   385,    79,    20,   103,     0,
-      20,    23,   287,   288,   289,   290,    21,   292,    20,   294,
-     295,    12,   102,   291,    77,    78,    79,    15,    91,    20,
-     310,   102,    26,    96,    97,    98,   339,    10,   101,   342,
-       3,     4,     5,     6,     7,     8,    10,   322,    77,    78,
-      79,    42,    43,    44,    45,    10,   331,    10,    49,   102,
-      51,    23,   102,    54,    77,    78,    79,    77,    78,    79,
-      61,    62,    63,    64,   102,    77,    78,    79,   103,   102,
-     385,   102,    20,   102,   359,   102,    77,    78,    79,    10,
-      81,    82,    83,    84,    85,    86,    87,    88,    89,    90,
-      91,    77,    78,    79,   102,    96,    97,    98,    20,     9,
-     101,   102,   102,    63,    64,   390,   396,   392,    75,    20,
-     402,   401,   389,   102,   391,    20,   102,   394,   395,    77,
-      78,    79,   103,    22,    74,   326,   102,   404,   405,    12,
-     420,    91,   424,   102,   392,   412,    96,    97,    98,     9,
-      97,   101,   441,    35,   102,    15,   401,   437,   425,   206,
-      48,    48,   429,    23,   439,     0,     1,    -1,    28,   451,
-      -1,    -1,    -1,    -1,     9,   455,    11,    -1,    13,    14,
-      15,    16,    17,    18,    19,    20,   453,   454,    23,    24,
-      25,    26,    27,    -1,    29,    30,    31,    32,    33,    34,
-      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,    -1,    -1,    -1,    49,    50,    51,    52,    53,    -1,
-      55,    56,    57,    58,    59,    60,    77,    78,    79,    -1,
-      65,    66,    67,    68,    69,    70,    71,    72,    77,    78,
-      79,    77,    78,    79,    -1,    80,    77,    78,    79,    -1,
-      -1,   102,    -1,    -1,    -1,    -1,    -1,    92,    93,    94,
-      -1,     0,     1,   102,    99,   100,   102,    -1,   103,   104,
-       9,   102,    11,    -1,    13,    14,    15,    16,    17,    18,
-      19,    20,    -1,    -1,    23,    24,    25,    26,    27,    -1,
-      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
-      39,    40,    41,    42,    43,    44,    45,    -1,    -1,    -1,
-      49,    50,    51,    52,    53,    -1,    55,    56,    57,    58,
-      59,    60,    77,    78,    79,    -1,    65,    66,    67,    68,
-      69,    70,    71,    72,    77,    78,    79,    77,    78,    79,
-      -1,    80,    -1,    96,    97,    98,    -1,   102,   101,    -1,
-      -1,    -1,    -1,    92,    93,    94,    -1,    -1,     1,   102,
-      99,   100,   102,    -1,   103,   104,     9,    10,    11,    -1,
-      13,    14,    15,    16,    17,    18,    19,    20,    -1,    -1,
-      23,    24,    25,    26,    27,    -1,    29,    30,    31,    32,
-      33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
-      43,    44,    45,    -1,    -1,    -1,    49,    50,    51,    52,
-      53,    -1,    55,    56,    57,    58,    59,    60,    -1,    -1,
-      -1,    -1,    65,    66,    67,    68,    69,    70,    71,    72,
-      -1,    -1,    -1,    91,    -1,    -1,    -1,    80,    96,    97,
-      98,    -1,    -1,   101,    -1,    -1,    -1,    -1,    -1,    92,
-      93,    94,    -1,    -1,     1,    -1,    99,   100,    -1,    -1,
-     103,   104,     9,    10,    11,    -1,    13,    14,    15,    16,
-      17,    18,    19,    20,    -1,    -1,    23,    24,    25,    26,
-      27,    -1,    29,    30,    31,    32,    33,    34,    35,    36,
-      37,    38,    39,    40,    41,    42,    43,    44,    45,    -1,
-      -1,    -1,    49,    50,    51,    52,    53,    -1,    55,    56,
-      57,    58,    59,    60,    -1,    -1,    -1,    -1,    65,    66,
-      67,    68,    69,    70,    71,    72,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    80,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    92,    93,    94,    -1,    -1,
-       1,    -1,    99,   100,    -1,    -1,   103,   104,     9,    10,
-      11,    -1,    13,    14,    15,    16,    17,    18,    19,    20,
-      -1,    -1,    23,    24,    25,    26,    27,    -1,    29,    30,
-      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
-      41,    42,    43,    44,    45,    -1,    -1,    -1,    49,    50,
-      51,    52,    53,    -1,    55,    56,    57,    58,    59,    60,
-      -1,    -1,    -1,    -1,    65,    66,    67,    68,    69,    70,
-      71,    72,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    80,
+      10,    11,    12,    15,     9,    46,   116,    42,   127,    11,
+     293,    16,    12,    74,    91,    50,    15,    16,    17,    15,
+     409,    19,    20,    21,    22,    23,   297,    25,    26,   388,
+      20,    41,    46,    47,    44,   145,    26,    81,     9,    80,
+      45,     9,     0,    11,    42,    43,    44,    15,   363,    20,
+      48,    56,     9,     9,    11,    11,    24,   293,   102,   295,
+     296,    20,    21,    22,    23,     9,    25,    26,   457,   384,
+      23,   342,     9,   432,    70,    28,    20,    77,    78,    79,
+      90,   116,    11,    42,    43,    12,     9,    97,    11,    87,
+     103,   101,   102,    81,     9,    97,    17,    18,    12,   134,
+      77,    78,    79,   222,   103,    12,    23,   103,    12,   103,
+     145,    32,   122,    48,   119,    36,     9,   194,    11,    20,
+      41,   126,   127,    44,   360,    12,    47,   103,    49,   127,
+      51,    52,    53,    54,    55,   103,   197,   198,   199,   200,
+     201,   202,   147,   204,   205,    20,   103,   103,   103,    12,
+      77,    78,    79,    12,   103,   391,   161,   162,   163,   442,
+     165,   166,   167,    77,    78,    79,   207,    20,   127,   103,
+      77,    78,    79,    77,    78,    79,    77,    78,    79,    20,
+     192,   186,   187,   188,   189,   190,   191,   185,   223,   102,
+      77,    78,    79,   103,   289,    91,   291,   103,   208,   309,
+      96,    97,    98,   103,   440,   101,   211,   212,   213,   214,
+     215,   216,   103,   332,    77,    78,    79,   222,    77,    78,
+      79,    77,    78,    79,    77,    78,    79,   103,   233,   103,
+     235,   236,   103,   294,    26,   102,    77,    78,    79,   244,
+      20,   103,   103,   164,    10,    73,   102,   168,   169,   170,
+     171,   172,   173,   174,   175,   176,   177,   178,   179,   180,
+     181,   182,    20,    11,   269,   270,    23,   272,    42,    43,
+      44,    45,   282,    23,   309,    49,   386,    51,    20,   340,
+       0,   103,   343,   288,   289,   290,   291,    73,   293,   102,
+     295,   296,    12,    10,   292,    26,    11,    77,    78,    79,
+      20,   311,    79,    77,    78,    79,   103,    77,    78,    79,
+      61,    62,    63,    64,    21,    23,    15,   102,   323,    77,
+      78,    79,    42,    43,    44,    45,    26,   332,   102,    49,
+      10,    51,   102,    10,    54,    77,    78,    79,    89,    90,
+      91,    61,    62,    63,    64,    96,    97,    98,    97,    98,
+     101,   386,   101,    10,    10,   360,    23,    77,    78,    79,
+     103,    81,    82,    83,    84,    85,    86,    87,    88,    89,
+      90,    91,    77,    78,    79,   102,    96,    97,    98,   102,
+     102,   101,   102,   102,    63,    64,   391,   397,   393,   102,
+      20,   403,   402,   390,    10,   392,   102,   102,   395,   396,
+     102,   102,   411,    20,     9,   102,   327,    75,   405,   406,
+      20,   421,    91,   425,   423,   424,   413,    96,    97,    98,
+       9,   102,   101,    20,   433,   103,    15,    22,   438,   426,
+      74,   102,   441,   430,    23,   440,     0,     1,   102,    28,
+     452,    12,    97,   393,    35,     9,   456,    11,   402,    13,
+      14,    15,    16,    17,    18,    19,    20,   454,   455,    23,
+      24,    25,    26,    27,   442,    29,    30,    31,    32,    33,
+      34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
+      44,    45,    48,    48,    63,    49,    50,    51,    52,    53,
+      -1,    55,    56,    57,    58,    59,    60,    -1,    -1,    -1,
+      -1,    65,    66,    67,    68,    69,    70,    71,    72,    77,
+      78,    79,    91,    -1,    -1,    -1,    80,    96,    97,    98,
+      -1,    -1,   101,    -1,    -1,    -1,    -1,    -1,    92,    93,
+      94,    -1,     0,     1,   102,    99,   100,    -1,    -1,   103,
+     104,     9,    -1,    11,    -1,    13,    14,    15,    16,    17,
+      18,    19,    20,    -1,    -1,    23,    24,    25,    26,    27,
+      -1,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+      38,    39,    40,    41,    42,    43,    44,    45,    -1,    -1,
+      -1,    49,    50,    51,    52,    53,    -1,    55,    56,    57,
+      58,    59,    60,    77,    78,    79,    -1,    65,    66,    67,
+      68,    69,    70,    71,    72,    77,    78,    79,    77,    78,
+      79,    -1,    80,    -1,    -1,    77,    78,    79,   102,    -1,
+      -1,    -1,    -1,    -1,    92,    93,    94,    -1,    -1,     1,
+     102,    99,   100,   102,    -1,   103,   104,     9,    10,    11,
+     102,    13,    14,    15,    16,    17,    18,    19,    20,    -1,
+      -1,    23,    24,    25,    26,    27,    -1,    29,    30,    31,
+      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
+      42,    43,    44,    45,    -1,    -1,    -1,    49,    50,    51,
+      52,    53,    -1,    55,    56,    57,    58,    59,    60,    77,
+      78,    79,    -1,    65,    66,    67,    68,    69,    70,    71,
+      72,     3,     4,     5,     6,     7,     8,    -1,    80,    -1,
+      96,    97,    98,    -1,   102,   101,    -1,    -1,    -1,    -1,
+      92,    93,    94,    -1,    -1,     1,    -1,    99,   100,    -1,
+      -1,   103,   104,     9,    10,    11,    -1,    13,    14,    15,
+      16,    17,    18,    19,    20,    -1,    -1,    23,    24,    25,
+      26,    27,    -1,    29,    30,    31,    32,    33,    34,    35,
+      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
+      -1,    -1,    -1,    49,    50,    51,    52,    53,    -1,    55,
+      56,    57,    58,    59,    60,    -1,    -1,    -1,    -1,    65,
+      66,    67,    68,    69,    70,    71,    72,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    80,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    92,    93,    94,    -1,
+      -1,     1,    -1,    99,   100,    -1,    -1,   103,   104,     9,
+      10,    11,    -1,    13,    14,    15,    16,    17,    18,    19,
+      20,    -1,    -1,    23,    24,    25,    26,    27,    -1,    29,
+      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,    -1,    -1,    -1,    49,
+      50,    51,    52,    53,    -1,    55,    56,    57,    58,    59,
+      60,    -1,    -1,    -1,    -1,    65,    66,    67,    68,    69,
+      70,    71,    72,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      80,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    92,    93,    94,    -1,    -1,     1,    -1,    99,
+     100,    -1,    -1,   103,   104,     9,    -1,    11,    -1,    13,
+      14,    15,    16,    17,    18,    19,    20,    -1,    -1,    23,
+      24,    25,    26,    27,    -1,    29,    30,    31,    32,    33,
+      34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
+      44,    45,    -1,    -1,    -1,    49,    50,    51,    52,    53,
+      -1,    55,    56,    57,    58,    59,    60,    -1,    -1,    -1,
+      -1,    65,    66,    67,    68,    69,    70,    71,    72,    -1,
+      -1,    75,    -1,    -1,    -1,    -1,    80,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    92,    93,
+      94,    -1,    -1,     1,    -1,    99,   100,    -1,    -1,   103,
+     104,     9,    -1,    11,    -1,    13,    14,    15,    16,    17,
+      18,    19,    20,    -1,    -1,    23,    24,    25,    26,    27,
+      -1,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+      38,    39,    40,    41,    42,    43,    44,    45,    -1,    -1,
+      -1,    49,    50,    51,    52,    53,    -1,    55,    56,    57,
+      58,    59,    60,    -1,    -1,    -1,    -1,    65,    66,    67,
+      68,    69,    70,    71,    72,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    80,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    92,    93,    94,    -1,    -1,     1,
+      -1,    99,   100,    -1,    -1,   103,   104,     9,    -1,    11,
+      -1,    13,    14,    15,    16,    17,    18,    19,    20,    -1,
+      -1,    23,    24,    25,    26,    27,    -1,    29,    30,    31,
+      32,    33,    34,    35,    -1,    37,    38,    39,    40,    41,
+      42,    43,    44,    45,    -1,    -1,    -1,    49,    50,    51,
+      52,    53,    -1,    55,    56,    57,    58,    59,    60,    -1,
+      -1,    -1,    -1,    65,    66,    67,    68,    69,    70,    71,
+      72,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    80,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    92,    93,    94,    -1,    -1,     1,    -1,    99,   100,
-      -1,    -1,   103,   104,     9,    -1,    11,    -1,    13,    14,
-      15,    16,    17,    18,    19,    20,    -1,    -1,    23,    24,
-      25,    26,    27,    -1,    29,    30,    31,    32,    33,    34,
-      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,    -1,    -1,    -1,    49,    50,    51,    52,    53,    -1,
-      55,    56,    57,    58,    59,    60,    -1,    -1,    -1,    -1,
-      65,    66,    67,    68,    69,    70,    71,    72,    -1,    -1,
-      75,    -1,    -1,    -1,    -1,    80,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    92,    93,    94,
-      -1,    -1,     1,    -1,    99,   100,    -1,    -1,   103,   104,
-       9,    -1,    11,    -1,    13,    14,    15,    16,    17,    18,
-      19,    20,    -1,    -1,    23,    24,    25,    26,    27,    -1,
-      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
-      39,    40,    41,    42,    43,    44,    45,    -1,    -1,    -1,
-      49,    50,    51,    52,    53,    -1,    55,    56,    57,    58,
-      59,    60,    -1,    -1,    -1,    -1,    65,    66,    67,    68,
-      69,    70,    71,    72,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    80,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    92,    93,    94,    -1,    -1,     1,    -1,
-      99,   100,    -1,    -1,   103,   104,     9,    -1,    11,    -1,
-      13,    14,    15,    16,    17,    18,    19,    20,    -1,    -1,
-      23,    24,    25,    26,    27,    -1,    29,    30,    31,    32,
-      33,    34,    35,    -1,    37,    38,    39,    40,    41,    42,
-      43,    44,    45,    -1,    -1,    -1,    49,    50,    51,    52,
-      53,    -1,    55,    56,    57,    58,    59,    60,    -1,    -1,
-      -1,    -1,    65,    66,    67,    68,    69,    70,    71,    72,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    80,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    92,
-      93,    94,     1,    -1,    -1,    -1,    99,   100,    -1,    -1,
-     103,   104,    11,    -1,    13,    14,    15,    16,    17,    18,
-      19,    20,    -1,    -1,    23,    24,    25,    26,    27,    -1,
-      29,    30,    31,    32,    33,    34,    -1,    -1,    -1,    -1,
-      39,    -1,    -1,    54,    -1,    -1,    -1,    -1,    -1,    -1,
-      61,    62,    63,    64,    53,    -1,    55,    56,    57,    58,
-      59,    60,    -1,    -1,    -1,    -1,    65,    66,    67,    68,
-      69,    70,    83,    72,    85,    86,    87,    88,    89,    90,
-      91,    80,    -1,    -1,    -1,    96,    97,    98,    -1,    -1,
-     101,    -1,    -1,    92,    93,    94,     1,    -1,    -1,    -1,
-      99,   100,    -1,    -1,   103,    -1,    11,    -1,    13,    14,
+      92,    93,    94,     1,    -1,    -1,    -1,    99,   100,    -1,
+      -1,   103,   104,    11,    -1,    13,    14,    15,    16,    17,
+      18,    19,    20,    -1,    -1,    23,    24,    25,    26,    27,
+      -1,    29,    30,    31,    32,    33,    34,    -1,    -1,    -1,
+      -1,    39,    -1,    -1,    54,    -1,    -1,    -1,    -1,    -1,
+      -1,    61,    62,    63,    64,    53,    -1,    55,    56,    57,
+      58,    59,    60,    -1,    -1,    -1,    -1,    65,    66,    67,
+      68,    69,    70,    83,    72,    85,    86,    87,    88,    89,
+      90,    91,    80,    -1,    -1,    -1,    96,    97,    98,    -1,
+      -1,   101,    -1,    -1,    92,    93,    94,     1,    -1,    -1,
+      -1,    99,   100,    -1,    -1,   103,    -1,    11,    -1,    13,
+      14,    15,    16,    17,    18,    19,    -1,    -1,    -1,    23,
+      24,    25,    26,    27,    -1,    29,    30,    31,    32,    33,
+      34,    -1,    -1,    -1,    -1,    39,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    61,    62,    63,    64,    53,
+      -1,    55,    56,    57,    58,    59,    60,    -1,     0,    -1,
+      -1,    65,    66,    67,    68,    69,    70,     9,    72,    11,
+      12,    87,    88,    89,    90,    91,    80,    -1,    20,    -1,
+      96,    97,    98,    -1,    -1,   101,    -1,    -1,    92,    93,
+      94,    -1,    -1,    -1,    -1,    99,   100,    -1,   102,   103,
+      42,    43,    44,    45,    -1,    -1,    -1,    49,    -1,    51,
+      -1,    -1,    54,    -1,    -1,    -1,    -1,    -1,    -1,    61,
+      62,    63,    64,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    77,    78,    79,    -1,    81,
+      82,    83,    84,    85,    86,    87,    88,    89,    90,    91,
+      -1,    -1,    -1,    -1,    96,    97,    98,    -1,    -1,   101,
+     102,     9,    -1,    11,    -1,    13,    14,    15,    16,    17,
+      18,    19,    -1,    -1,    -1,    23,    24,    25,    26,    27,
+      28,    29,    30,    31,    32,    33,    34,    -1,    -1,    -1,
+      -1,    39,    -1,    -1,    54,    -1,    -1,    -1,    -1,    -1,
+      -1,    61,    62,    63,    64,    53,    -1,    55,    56,    57,
+      58,    59,    60,    -1,    -1,    -1,    -1,    65,    66,    67,
+      68,    69,    70,    -1,    72,    85,    86,    87,    88,    89,
+      90,    91,    80,    -1,    -1,    -1,    96,    97,    98,    -1,
+      -1,   101,    -1,    -1,    92,    93,    94,    -1,    -1,    -1,
+      -1,    99,   100,    -1,     9,   103,    11,    -1,    13,    14,
       15,    16,    17,    18,    19,    -1,    -1,    -1,    23,    24,
-      25,    26,    27,    -1,    29,    30,    31,    32,    33,    34,
+      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
       -1,    -1,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    61,    62,    63,    64,    53,    -1,
-      55,    56,    57,    58,    59,    60,    -1,     0,    -1,    -1,
-      65,    66,    67,    68,    69,    70,     9,    72,    11,    12,
-      87,    88,    89,    90,    91,    80,    -1,    20,    -1,    96,
-      97,    98,    -1,    -1,   101,    -1,    -1,    92,    93,    94,
-      -1,    -1,    -1,    -1,    99,   100,    -1,   102,   103,    42,
-      43,    44,    45,    -1,    -1,    -1,    49,    -1,    51,    -1,
-      -1,    54,    -1,    -1,    -1,    -1,    -1,    -1,    61,    62,
-      63,    64,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    77,    78,    79,    -1,    81,    82,
-      83,    84,    85,    86,    87,    88,    89,    90,    91,    -1,
-      -1,    -1,    -1,    96,    97,    98,    -1,    -1,   101,   102,
-       9,    -1,    11,    -1,    13,    14,    15,    16,    17,    18,
-      19,    -1,    -1,    -1,    23,    24,    25,    26,    27,    28,
-      29,    30,    31,    32,    33,    34,    -1,    -1,    -1,    -1,
-      39,    -1,    -1,    54,    -1,    -1,    -1,    -1,    -1,    -1,
-      61,    62,    63,    64,    53,    -1,    55,    56,    57,    58,
-      59,    60,    -1,    -1,    -1,    -1,    65,    66,    67,    68,
-      69,    70,    -1,    72,    85,    86,    87,    88,    89,    90,
-      91,    80,    -1,    -1,    -1,    96,    97,    98,    -1,    -1,
-     101,    -1,    -1,    92,    93,    94,    -1,    -1,    -1,    -1,
-      99,   100,    -1,     9,   103,    11,    -1,    13,    14,    15,
-      16,    17,    18,    19,    -1,    -1,    -1,    23,    24,    25,
-      26,    27,    -1,    29,    30,    31,    32,    33,    34,    -1,
-      -1,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,
-      61,    62,    63,    64,    -1,    -1,    -1,    53,    -1,    55,
-      56,    57,    58,    59,    60,    -1,    -1,    -1,    -1,    65,
-      66,    67,    68,    69,    70,    -1,    72,    88,    89,    90,
-      91,    -1,    -1,    -1,    80,    96,    97,    98,    -1,    -1,
-     101,    -1,    -1,    -1,    -1,    -1,    92,    93,    94,    -1,
-      -1,    -1,    -1,    99,   100,    -1,     9,   103,    11,    -1,
-      13,    14,    15,    16,    17,    18,    19,    -1,    -1,    -1,
-      23,    24,    25,    26,    27,    -1,    29,    30,    31,    32,
-      33,    34,    -1,    -1,    -1,    -1,    39,    -1,    -1,    -1,
-      -1,    -1,    -1,    61,    62,    63,    64,    -1,    -1,    -1,
-      53,    -1,    55,    56,    57,    58,    59,    60,    -1,    -1,
-      -1,    -1,    65,    66,    67,    68,    69,    70,    -1,    72,
-      -1,    89,    90,    91,    -1,    -1,    -1,    80,    96,    97,
-      98,    -1,    -1,   101,    -1,    -1,    -1,    -1,    -1,    92,
-      93,    94,    -1,    -1,    -1,    -1,    99,   100,    -1,    -1,
-     103,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      -1,    -1,    -1,    23,    24,    25,    26,    27,    -1,    29,
-      30,    31,    32,    33,    34,    -1,    -1,    -1,    -1,    39,
-      -1,    -1,    -1,    -1,    -1,    -1,    61,    62,    63,    64,
-      -1,    -1,    -1,    53,    -1,    55,    56,    57,    58,    59,
-      60,    -1,    -1,    -1,    -1,    65,    66,    67,    68,    69,
-      70,    -1,    72,    -1,    -1,    90,    91,    -1,    -1,    -1,
-      80,    96,    97,    98,    -1,    -1,   101,    -1,    -1,    -1,
-      -1,    -1,    92,    93,    94,    -1,    -1,    -1,    -1,    99,
-     100,    -1,    11,   103,    13,    14,    15,    16,    17,    18,
-      19,    20,    -1,    -1,    23,    24,    25,    26,    27,    -1,
+      -1,    61,    62,    63,    64,    -1,    -1,    -1,    53,    -1,
+      55,    56,    57,    58,    59,    60,    -1,    -1,    -1,    -1,
+      65,    66,    67,    68,    69,    70,    -1,    72,    88,    89,
+      90,    91,    -1,    -1,    -1,    80,    96,    97,    98,    -1,
+      -1,   101,    -1,    -1,    -1,    -1,    -1,    92,    93,    94,
+      -1,    -1,    -1,    -1,    99,   100,    -1,     9,   103,    11,
+      -1,    13,    14,    15,    16,    17,    18,    19,    -1,    -1,
+      -1,    23,    24,    25,    26,    27,    -1,    29,    30,    31,
+      32,    33,    34,    -1,    -1,    -1,    -1,    39,    -1,    -1,
+      -1,    -1,    -1,    -1,    61,    62,    63,    64,    -1,    -1,
+      -1,    53,    -1,    55,    56,    57,    58,    59,    60,    -1,
+      -1,    -1,    -1,    65,    66,    67,    68,    69,    70,    -1,
+      72,    -1,    -1,    90,    91,    -1,    -1,    -1,    80,    96,
+      97,    98,    -1,    -1,   101,    -1,    -1,    -1,    -1,    -1,
+      92,    93,    94,    -1,    -1,    -1,    -1,    99,   100,    -1,
+      -1,   103,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    -1,    -1,    -1,    23,    24,    25,    26,    27,    -1,
       29,    30,    31,    32,    33,    34,    -1,    -1,    -1,    -1,
       39,    -1,    -1,    -1,    -1,    -1,    -1,    61,    62,    63,
       64,    -1,    -1,    -1,    53,    -1,    55,    56,    57,    58,
@@ -931,7 +924,7 @@ static const yytype_int16 yycheck[] =
       -1,    80,    96,    97,    98,    -1,    -1,   101,    -1,    -1,
       -1,    -1,    -1,    92,    93,    94,    -1,    -1,    -1,    -1,
       99,   100,    -1,    11,   103,    13,    14,    15,    16,    17,
-      18,    19,    -1,    -1,    -1,    23,    24,    25,    26,    27,
+      18,    19,    20,    -1,    -1,    23,    24,    25,    26,    27,
       -1,    29,    30,    31,    32,    33,    34,    -1,    -1,    -1,
       -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,    61,    -1,
       63,    64,    -1,    -1,    -1,    53,    -1,    55,    56,    57,
@@ -939,23 +932,60 @@ static const yytype_int16 yycheck[] =
       68,    69,    70,    -1,    72,    -1,    -1,    90,    91,    -1,
       -1,    -1,    80,    96,    97,    98,    -1,    -1,   101,    -1,
       -1,    -1,    -1,    -1,    92,    93,    94,    -1,    -1,    -1,
+      -1,    99,   100,    -1,    11,   103,    13,    14,    15,    16,
+      17,    18,    19,    -1,    -1,    -1,    23,    24,    25,    26,
+      27,    -1,    29,    30,    31,    32,    33,    34,    -1,    -1,
+      -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    63,    64,    -1,    -1,    -1,    53,    -1,    55,    56,
+      57,    58,    59,    60,    -1,    -1,    -1,    -1,    65,    66,
+      67,    68,    69,    70,    -1,    72,    -1,    -1,    90,    91,
+      -1,    -1,    -1,    80,    96,    97,    98,    -1,    -1,   101,
+      -1,    -1,    -1,    -1,    -1,    92,    93,    94,    -1,    -1,
+      -1,    -1,    99,   100,    -1,   102,   103,    11,    -1,    13,
+      14,    15,    16,    17,    18,    19,    -1,    -1,    -1,    23,
+      24,    25,    26,    27,    -1,    29,    30,    31,    32,    33,
+      34,    -1,    -1,    -1,    -1,    39,    42,    43,    44,    45,
+      -1,    -1,    -1,    49,    -1,    51,    -1,    -1,    -1,    53,
+      -1,    55,    56,    57,    58,    59,    60,    -1,    -1,    -1,
+      -1,    65,    66,    67,    68,    69,    70,    -1,    72,    -1,
+      -1,    77,    78,    79,    -1,    -1,    80,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    92,    93,
+      94,    -1,    -1,    -1,    -1,    99,   100,    -1,   102,   103,
+      11,    -1,    13,    14,    15,    16,    17,    18,    19,    -1,
+      -1,    -1,    23,    24,    25,    26,    27,    -1,    29,    30,
+      31,    32,    33,    34,    -1,    -1,    -1,    -1,    39,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    53,    -1,    55,    56,    57,    58,    59,    60,
+      -1,    -1,    -1,    -1,    65,    66,    67,    68,    69,    70,
+      -1,    72,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    80,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    92,    93,    94,    -1,    -1,    -1,    -1,    99,   100,
+      -1,   102,   103,    11,    -1,    13,    14,    15,    16,    17,
+      18,    19,    -1,    -1,    -1,    23,    24,    25,    26,    27,
+      -1,    29,    30,    31,    32,    33,    34,    -1,    -1,    -1,
+      -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    53,    -1,    55,    56,    57,
+      58,    59,    60,    -1,    -1,    -1,    -1,    65,    66,    67,
+      68,    69,    70,    -1,    72,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    80,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    92,    93,    94,    -1,    -1,    -1,
       -1,    99,   100,    -1,   102,   103,    11,    -1,    13,    14,
       15,    16,    17,    18,    19,    -1,    -1,    -1,    23,    24,
       25,    26,    27,    -1,    29,    30,    31,    32,    33,    34,
       -1,    -1,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    63,    64,    -1,    -1,    -1,    53,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    53,    -1,
       55,    56,    57,    58,    59,    60,    -1,    -1,    -1,    -1,
       65,    66,    67,    68,    69,    70,    -1,    72,    -1,    -1,
-      90,    91,    -1,    -1,    -1,    80,    96,    97,    98,    -1,
-      -1,   101,    -1,    -1,    -1,    -1,    -1,    92,    93,    94,
+      -1,    -1,    -1,    -1,    -1,    80,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    92,    93,    94,
       -1,    -1,    -1,    -1,    99,   100,    -1,   102,   103,    11,
       -1,    13,    14,    15,    16,    17,    18,    19,    -1,    -1,
       -1,    23,    24,    25,    26,    27,    -1,    29,    30,    31,
-      32,    33,    34,    -1,    -1,    -1,    -1,    39,    42,    43,
-      44,    45,    -1,    -1,    -1,    49,    -1,    51,    -1,    -1,
+      32,    33,    34,    -1,    -1,    -1,    -1,    39,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    53,    -1,    55,    56,    57,    58,    59,    60,    -1,
       -1,    -1,    -1,    65,    66,    67,    68,    69,    70,    -1,
-      72,    -1,    -1,    77,    78,    79,    -1,    -1,    80,    -1,
+      72,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    80,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       92,    93,    94,    -1,    -1,    -1,    -1,    99,   100,    -1,
      102,   103,    11,    -1,    13,    14,    15,    16,    17,    18,
@@ -983,44 +1013,16 @@ static const yytype_int16 yycheck[] =
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       53,    -1,    55,    56,    57,    58,    59,    60,    -1,    -1,
       -1,    -1,    65,    66,    67,    68,    69,    70,    -1,    72,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    80,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    92,
-      93,    94,    -1,    -1,    -1,    -1,    99,   100,    -1,   102,
-     103,    11,    -1,    13,    14,    15,    16,    17,    18,    19,
-      -1,    -1,    -1,    23,    24,    25,    26,    27,    -1,    29,
-      30,    31,    32,    33,    34,    -1,    -1,    -1,    -1,    39,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    53,    -1,    55,    56,    57,    58,    59,
-      60,    -1,    -1,    -1,    -1,    65,    66,    67,    68,    69,
-      70,    -1,    72,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      80,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    92,    93,    94,    -1,    -1,    -1,    -1,    99,
-     100,    -1,   102,   103,    11,    -1,    13,    14,    15,    16,
-      17,    18,    19,    -1,    -1,    -1,    23,    24,    25,    26,
-      27,    -1,    29,    30,    31,    32,    33,    34,    -1,    -1,
-      -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    53,    -1,    55,    56,
-      57,    58,    59,    60,    -1,    -1,    -1,    -1,    65,    66,
-      67,    68,    69,    70,    -1,    72,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    80,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    92,    93,    94,    -1,    -1,
-      -1,    -1,    99,   100,    -1,   102,   103,    11,    -1,    13,
-      14,    15,    16,    17,    18,    19,    -1,    -1,    -1,    23,
-      24,    25,    26,    27,    -1,    29,    30,    31,    32,    33,
-      34,    -1,    -1,    -1,    -1,    39,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    53,
-      -1,    55,    56,    57,    58,    59,    60,    -1,    -1,    -1,
-      -1,    65,    66,    67,    68,    69,    70,    -1,    72,    -1,
-      -1,    -1,    54,    -1,    -1,    -1,    80,    -1,    -1,    61,
-      62,    63,    64,    -1,    -1,    -1,    -1,    -1,    92,    93,
-      94,    -1,    -1,    -1,    -1,    99,   100,    -1,    -1,   103,
-      82,    83,    84,    85,    86,    87,    88,    89,    90,    91,
-      -1,    -1,    -1,    54,    96,    97,    98,    -1,    -1,   101,
-      61,    62,    63,    64,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    54,    -1,    -1,    -1,    80,    -1,    -1,
+      61,    62,    63,    64,    -1,    -1,    -1,    -1,    -1,    92,
+      93,    94,    -1,    -1,    -1,    -1,    99,   100,    -1,    -1,
+     103,    82,    83,    84,    85,    86,    87,    88,    89,    90,
+      91,    -1,    -1,    -1,    54,    96,    97,    98,    -1,    -1,
+     101,    61,    62,    63,    64,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    82,    83,    -1,    85,    86,    87,    88,    89,    90,
-      91,    -1,    -1,    -1,    -1,    96,    97,    98,    -1,    -1,
-     101
+      -1,    -1,    82,    83,    -1,    85,    86,    87,    88,    89,
+      90,    91,    -1,    -1,    -1,    -1,    96,    97,    98,    -1,
+      -1,   101
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -1040,39 +1042,40 @@ static const yytype_uint8 yystos[] =
      122,   118,   118,    12,   147,   157,   157,    23,    28,   113,
      165,   170,   170,   170,   170,   170,   170,   170,   158,    11,
      103,   157,   140,   140,   157,   103,   103,   103,   113,   157,
-      23,   148,   161,   165,   170,   170,    23,   113,   157,   165,
-      20,   147,    23,   157,   103,   160,   165,   166,   167,   157,
-     148,   157,   157,   157,   157,   157,   102,   147,    77,    78,
-      79,    81,     9,    11,   103,    54,    61,    62,    63,    64,
-      82,    83,    85,    86,    87,    88,    89,    90,    91,    96,
-      97,    98,   101,   103,     9,    11,     9,    11,     9,   115,
-     141,    23,    28,   142,    23,   139,   103,   103,   103,   103,
-      70,   103,   165,   103,   103,   113,   139,    48,   130,    20,
-      42,    43,    44,    45,    49,    51,   121,   122,   120,    12,
-     161,   103,   103,   147,   102,   113,    26,   143,   102,   102,
-     147,   162,   170,   148,   103,   103,    10,    20,   161,   102,
-     147,    73,   145,    11,   102,   147,   147,   147,   157,   147,
-     147,   102,   147,   157,   157,   157,   157,   157,   157,   157,
-     157,   157,   157,   157,   157,   157,   157,   157,     9,    11,
-      24,   103,   151,   165,   102,   147,   147,   147,   147,   147,
-     147,   118,    23,   138,   139,    23,   124,   115,   115,   115,
-     115,   115,   115,   103,   115,   115,   142,   113,   147,   134,
-     147,   147,   147,   147,   147,   162,   148,    12,   150,    73,
-     144,   102,   102,   147,   102,   147,   102,   147,    10,   102,
-      26,   147,    11,    20,    12,   102,    84,   147,   147,   102,
-     147,   103,   102,    20,    12,    20,    12,    20,    10,    21,
-     114,   123,     9,    20,    23,   133,   147,   134,   135,   147,
-     134,   137,   163,   165,   128,   132,   135,   136,   147,   115,
-     135,   135,   143,   102,   102,   161,    26,   113,   102,   102,
-     102,    12,   147,    10,   157,    20,    12,   102,   162,    10,
-      10,    10,   115,   143,   115,    23,   102,   102,   102,   102,
-     103,   102,    20,   135,   102,   102,   144,    12,    10,   102,
-      20,   144,   125,   161,   131,   131,     9,   116,   116,   135,
-     116,   133,   102,   116,   116,    20,   113,   146,    75,   146,
-     118,    20,   116,   116,   117,    46,    47,   129,   129,   102,
-     130,    20,   116,   119,    10,   130,   130,   118,   116,   103,
-     116,   131,   130,    20,    26,   126,    10,   135,   130,   136,
-      22,    74,   127,   102,   102,   118,   116,   116,    75,   129
+      23,   148,   161,   165,   170,   170,    23,    28,   113,   142,
+     157,   165,    20,   147,    23,   142,   157,   103,   160,   165,
+     166,   167,   157,   148,   157,   157,   157,   157,   157,   102,
+     147,    77,    78,    79,    81,     9,    11,   103,    54,    61,
+      62,    63,    64,    82,    83,    85,    86,    87,    88,    89,
+      90,    91,    96,    97,    98,   101,   103,     9,    11,     9,
+      11,     9,   115,   141,   142,    23,   139,   103,   103,   103,
+     103,    70,   103,   165,   103,   103,   113,   139,    48,   130,
+      20,    42,    43,    44,    45,    49,    51,   121,   122,   120,
+      12,   161,   103,   103,   147,   102,   113,    26,   143,   102,
+     102,   147,   162,   170,   148,   103,   103,    10,    20,   161,
+     102,   147,    73,   145,    11,   102,   147,   147,   147,   157,
+     147,   147,   102,   147,   157,   157,   157,   157,   157,   157,
+     157,   157,   157,   157,   157,   157,   157,   157,   157,     9,
+      11,    24,   103,   151,   165,   102,   147,   147,   147,   147,
+     147,   147,   118,    23,   138,   139,    23,   124,   115,   115,
+     115,   115,   115,   115,   103,   115,   115,   142,   113,   147,
+     134,   147,   147,   147,   147,   147,   162,   148,    12,   150,
+      73,   144,   102,   102,   147,   102,   147,   102,   147,    10,
+     102,    26,   147,    11,    20,    12,   102,    84,   147,   147,
+     102,   147,   103,   102,    20,    12,    20,    12,    20,    10,
+      21,   114,   123,     9,    20,    23,   133,   147,   134,   135,
+     147,   134,   137,   163,   165,   128,   132,   135,   136,   147,
+     115,   135,   135,   143,   102,   102,   161,    26,   113,   102,
+     102,   102,    12,   147,    10,   157,    20,    12,   102,   162,
+      10,    10,    10,   115,   143,   115,    23,   102,   102,   102,
+     102,   103,   102,    20,   135,   102,   102,   144,    12,    10,
+     102,    20,   144,   125,   161,   131,   131,     9,   116,   116,
+     135,   116,   133,   102,   116,   116,    20,   113,   146,    75,
+     146,   118,    20,   116,   116,   117,    46,    47,   129,   129,
+     102,   130,    20,   116,   119,    10,   130,   130,   118,   116,
+     103,   116,   131,   130,    20,    26,   126,    10,   135,   130,
+     136,    22,    74,   127,   102,   102,   118,   116,   116,    75,
+     129
 };
 
 typedef enum {
@@ -1110,6 +1113,6 @@ static const toketypes yy_type_tab[] =
 };
 
 /* Generated from:
- * a216aadb9729f2e06283be0b4e7f08adc1209abb0bb9b50c453be450c6104a81 perly.y
+ * 46a0f37bedef614c67088ca538be1a60acad74ce92b27d0244bd16b23eb7fd8d perly.y
  * 4a3ced51fe6585f6ec59e65e1ffd74bc976c498b0e6992eaab337219fee72e51 regen_perly.pl
  * ex: set ro: */
diff --git a/perly.y b/perly.y
index 72065cf..0b94075 100644 (file)
--- a/perly.y
+++ b/perly.y
@@ -1108,7 +1108,7 @@ termdo    :       DO term %prec UNIOP                     /* do $filename */
                        { $$ = newUNOP(OP_NULL, OPf_SPECIAL, op_scope($2));
                          TOKEN_GETMAD($1,$$,'D');
                        }
-       |       DO WORD '(' ')'                  /* do somesub() */
+       |       DO subname '(' ')'                  /* do somesub() */
                        { $$ = newUNOP(OP_ENTERSUB,
                            OPf_SPECIAL|OPf_STACKED,
                            op_prepend_elem(OP_LIST,
@@ -1120,7 +1120,7 @@ termdo    :       DO term %prec UNIOP                     /* do $filename */
                          TOKEN_GETMAD($3,$$,'(');
                          TOKEN_GETMAD($4,$$,')');
                        }
-       |       DO WORD '(' expr ')'             /* do somesub(@args) */
+       |       DO subname '(' expr ')'             /* do somesub(@args) */
                        { $$ = newUNOP(OP_ENTERSUB,
                            OPf_SPECIAL|OPf_STACKED,
                            op_append_elem(OP_LIST,
@@ -1238,7 +1238,7 @@ term      :       termbinop
                              token_getmad($4,op,')');
                          })
                        }
-       |       NOAMP WORD optlistexpr               /* foo(@args) */
+       |       NOAMP subname optlistexpr               /* foo(@args) */
                        { $$ = newUNOP(OP_ENTERSUB, OPf_STACKED,
                            op_append_elem(OP_LIST, $3, scalar($2)));
                          TOKEN_GETMAD($1,$$,'o');
diff --git a/toke.c b/toke.c
index f93d96e..cca84cc 100644 (file)
--- a/toke.c
+++ b/toke.c
@@ -6602,12 +6602,18 @@ Perl_yylex(pTHX)
        bool lex;
        I32 tmp;
        SV *sv;
+       CV *cv;
+       PADOFFSET off;
+       OP *rv2cv_op;
 
        lex = FALSE;
        orig_keyword = 0;
+       off = 0;
        sv = NULL;
+       cv = NULL;
        gv = NULL;
        gvp = NULL;
+       rv2cv_op = NULL;
 
        PL_bufptr = s;
        s = scan_word(s, PL_tokenbuf, sizeof PL_tokenbuf, FALSE, &len);
@@ -6677,11 +6683,11 @@ Perl_yylex(pTHX)
        /* Check for lexical sub */
        if (PL_expect != XOPERATOR) {
            char tmpbuf[sizeof PL_tokenbuf + 1];
-           PADOFFSET off;
            *tmpbuf = '&';
            Copy(PL_tokenbuf, tmpbuf+1, len, char);
            off = pad_findmy_pvn(tmpbuf, len+1, UTF ? SVf_UTF8 : 0);
            if (off != NOT_IN_PAD) {
+               assert(off); /* we assume this is boolean-true below */
                if (PAD_COMPNAME_FLAGS_isOUR(off)) {
                    HV *  const stash = PAD_COMPNAME_OURSTASH(off);
                    HEK * const stashname = HvNAME_HEK(stash);
@@ -6691,12 +6697,18 @@ Perl_yylex(pTHX)
                                    (UTF ? SV_CATUTF8 : SV_CATBYTES));
                    gv = gv_fetchsv(sv, GV_NOADD_NOINIT | SvUTF8(sv),
                                    SVt_PVCV);
-                   lex = TRUE;
-                   goto just_a_word;
+                   off = 0;
+               }
+               else {
+                   rv2cv_op = newOP(OP_PADANY, 0);
+                   rv2cv_op->op_targ = off;
+                   rv2cv_op = (OP*)newCVREF(0, rv2cv_op);
+                   cv = (CV *)PAD_SV(off);
                }
-               /* unreachable */
-               else Perl_croak(aTHX_ "\"my sub\" not yet implemented");
+               lex = TRUE;
+               goto just_a_word;
            }
+           off = 0;
        }
 
        if (tmp < 0) {                  /* second-class keyword? */
@@ -6758,8 +6770,11 @@ Perl_yylex(pTHX)
               earlier ':' case doesn't bypass the initialisation.  */
            if (0) {
            just_a_word_zero_gv:
+               sv = NULL;
+               cv = NULL;
                gv = NULL;
                gvp = NULL;
+               rv2cv_op = NULL;
                orig_keyword = 0;
                lex = 0;
                off = 0;
@@ -6767,8 +6782,6 @@ Perl_yylex(pTHX)
          just_a_word: {
                int pkgname = 0;
                const char lastchar = (PL_bufptr == PL_oldoldbufptr ? 0 : PL_bufptr[-1]);
-               OP *rv2cv_op;
-               CV *cv;
 #ifdef PERL_MAD
                SV *nextPL_nextwhite = 0;
 #endif
@@ -6800,7 +6813,8 @@ Perl_yylex(pTHX)
                }
 
                /* Look for a subroutine with this name in current package,
-                  unless name is "Foo::", in which case Foo is a bareword
+                  unless this is a lexical sub, or name is "Foo::",
+                  in which case Foo is a bareword
                   (and a package name). */
 
                if (len > 2 && !PL_madskills &&
@@ -6818,7 +6832,7 @@ Perl_yylex(pTHX)
                    gvp = 0;
                }
                else {
-                   if (!gv) {
+                   if (!lex && !gv) {
                        /* Mustn't actually add anything to a symbol table.
                           But also don't want to "initialise" any placeholder
                           constants that might already be there into full
@@ -6832,7 +6846,7 @@ Perl_yylex(pTHX)
 
                /* if we saw a global override before, get the right name */
 
-               if (!lex)
+               if (!sv)
                  sv = S_newSV_maybe_utf8(aTHX_ PL_tokenbuf,
                    len ? len : strlen(PL_tokenbuf));
                if (gvp) {
@@ -6859,12 +6873,13 @@ Perl_yylex(pTHX)
                if (len)
                    goto safe_bareword;
 
+               if (!off)
                {
                    OP *const_op = newSVOP(OP_CONST, 0, SvREFCNT_inc_NN(sv));
                    const_op->op_private = OPpCONST_BARE;
                    rv2cv_op = newCVREF(0, const_op);
+                   cv = lex ? GvCV(gv) : rv2cv_op_cv(rv2cv_op, 0);
                }
-               cv = lex ? GvCV(gv) : rv2cv_op_cv(rv2cv_op, 0);
 
                /* See if it's the indirect object for a list operator. */
 
@@ -6951,7 +6966,8 @@ Perl_yylex(pTHX)
                    }
                    start_force(PL_curforce);
 #endif
-                   NEXTVAL_NEXTTOKE.opval = pl_yylval.opval;
+                   NEXTVAL_NEXTTOKE.opval =
+                       off ? rv2cv_op : pl_yylval.opval;
                    PL_expect = XOPERATOR;
 #ifdef PERL_MAD
                    if (PL_madskills) {
@@ -6960,8 +6976,9 @@ Perl_yylex(pTHX)
                        PL_thistoken = newSVpvs("");
                    }
 #endif
-                   op_free(rv2cv_op);
-                   force_next(WORD);
+                   if (off)
+                        op_free(pl_yylval.opval), force_next(PRIVATEREF);
+                   else op_free(rv2cv_op),        force_next(WORD);
                    pl_yylval.ival = 0;
                    TOKEN('&');
                }
@@ -7076,7 +7093,7 @@ Perl_yylex(pTHX)
                            curmad('X', PL_thistoken);
                            PL_thistoken = newSVpvs("");
                        }
-                       force_next(WORD);
+                       force_next(off ? PRIVATEREF : WORD);
                        if (!PL_lex_allbrackets &&
                                PL_lex_fakeeof > LEX_FAKEEOF_LOWLOGIC)
                            PL_lex_fakeeof = LEX_FAKEEOF_LOWLOGIC;
@@ -7119,7 +7136,7 @@ Perl_yylex(pTHX)
                        PL_nextwhite = nextPL_nextwhite;
                        curmad('X', PL_thistoken);
                        PL_thistoken = newSVpvs("");
-                       force_next(WORD);
+                       force_next(off ? PRIVATEREF : WORD);
                        if (!PL_lex_allbrackets &&
                                PL_lex_fakeeof > LEX_FAKEEOF_LOWLOGIC)
                            PL_lex_fakeeof = LEX_FAKEEOF_LOWLOGIC;
@@ -7128,7 +7145,7 @@ Perl_yylex(pTHX)
 #else
                    NEXTVAL_NEXTTOKE.opval = pl_yylval.opval;
                    PL_expect = XTERM;
-                   force_next(WORD);
+                   force_next(off ? PRIVATEREF : WORD);
                    if (!PL_lex_allbrackets &&
                            PL_lex_fakeeof > LEX_FAKEEOF_LOWLOGIC)
                        PL_lex_fakeeof = LEX_FAKEEOF_LOWLOGIC;