Add partial support for parsing layout qualifiers, added in the GLES SL 3.00 spec.

This allows us to run a lot of ES3 unit tests and sample apps.

TRAC #23089

Signed-off-by: Nicolas Capens
Signed-off-by: Shannon Woods
Author: Jamie Madill

git-svn-id: https://angleproject.googlecode.com/svn/branches/es3proto@2409 736b8ea6-26fd-11df-bfd4-992fa37f6226
diff --git a/src/compiler/BaseTypes.h b/src/compiler/BaseTypes.h
index 713d7be..71c0978 100644
--- a/src/compiler/BaseTypes.h
+++ b/src/compiler/BaseTypes.h
@@ -131,6 +131,26 @@
     EvqLast
 };
 
+// Layout qualifiers
+enum TLayoutQualifierType
+{
+    ElqLocation,
+    ElqShared,
+    ElqPacked,
+    ElqStd140,
+    ElqRowMajor,
+    ElqColumnMajor,
+    ElqError
+};
+
+struct TLayoutQualifierId
+{
+    TLayoutQualifierType type;
+    int location;
+};
+
+typedef std::vector<TLayoutQualifierId> TLayoutQualifier;
+
 //
 // This is just for debug print out, carried along with the definitions above.
 //
diff --git a/src/compiler/ParseHelper.cpp b/src/compiler/ParseHelper.cpp
index cffc674..4ff3792 100644
--- a/src/compiler/ParseHelper.cpp
+++ b/src/compiler/ParseHelper.cpp
@@ -2081,6 +2081,87 @@
     return indexedExpression;
 }
 
+TLayoutQualifierId TParseContext::addLayoutQualifierId(const TString &qualifierType, TSourceLoc qualifierTypeLine)
+{
+    TLayoutQualifierId qualifierId;
+
+    qualifierId.type = ElqError;
+    qualifierId.location = -1;
+
+    if (qualifierType == "shared")
+    {
+        qualifierId.type = ElqShared;
+    }
+    else if (qualifierType == "packed")
+    {
+        qualifierId.type = ElqPacked;
+    }
+    else if (qualifierType == "std140")
+    {
+        qualifierId.type = ElqStd140;
+    }
+    else if (qualifierType == "row_major")
+    {
+        qualifierId.type = ElqRowMajor;
+    }
+    else if (qualifierType == "column_major")
+    {
+        qualifierId.type = ElqColumnMajor;
+    }
+    else if (qualifierType == "location")
+    {
+        error(qualifierTypeLine, "invalid layout qualifier", qualifierType.c_str(), "location requires an argument");
+        recover();
+    }
+    else
+    {
+        error(qualifierTypeLine, "invalid layout qualifier", qualifierType.c_str());
+        recover();
+    }
+
+    return qualifierId;
+}
+
+TLayoutQualifierId TParseContext::addLayoutQualifierId(const TString &qualifierType, TSourceLoc qualifierTypeLine, const TString &intValueString, int intValue, TSourceLoc intValueLine)
+{
+    TLayoutQualifierId qualifierId;
+
+    qualifierId.type = ElqError;
+    qualifierId.location = -1;
+
+    if (qualifierType != "location")
+    {
+        error(qualifierTypeLine, "invalid layout qualifier", qualifierType.c_str(), "only location may have arguments");
+        recover();
+    }
+    else
+    {
+        if (intValue < 0)
+        {
+            error(intValueLine, "out of range", intValueString.c_str(), "value must be non-negative and < MAX_DRAW_BUFFERS");
+            recover();
+        }
+        else
+        {
+            qualifierId.location = intValue;
+        }
+
+        // TODO: must check that location is < MAX_DRAW_BUFFERS
+    }
+
+    return qualifierId;
+}
+
+TLayoutQualifier* TParseContext::makeLayoutQualifierFromId(TLayoutQualifierId layoutQualifierId)
+{
+    return NULL;
+}
+
+TLayoutQualifier* TParseContext::extendLayoutQualifier(TLayoutQualifier *layoutQualifier, TLayoutQualifierId layoutQualifierId)
+{
+    return NULL;
+}
+
 TTypeList *TParseContext::addStructDeclaratorList(const TPublicType& typeSpecifier, TTypeList *typeList)
 {
     if (voidErrorCheck(typeSpecifier.line, (*typeList)[0].type->getFieldName(), typeSpecifier)) {
diff --git a/src/compiler/ParseHelper.h b/src/compiler/ParseHelper.h
index 874a8a8..426b17a 100644
--- a/src/compiler/ParseHelper.h
+++ b/src/compiler/ParseHelper.h
@@ -139,6 +139,11 @@
     TIntermAggregate* addInterfaceBlock(const TPublicType& typeQualifier, TSourceLoc nameLine, const TString& blockName, TTypeList* typeList, 
                                         const TString& instanceName, TSourceLoc instanceLine, TIntermTyped* arrayIndex, TSourceLoc arrayIndexLine);
 
+    TLayoutQualifierId addLayoutQualifierId(const TString &qualifierType, TSourceLoc qualifierTypeLine);
+    TLayoutQualifierId addLayoutQualifierId(const TString &qualifierType, TSourceLoc qualifierTypeLine, const TString &intValueString, int intValue, TSourceLoc intValueLine);
+    TLayoutQualifier* makeLayoutQualifierFromId(TLayoutQualifierId layoutQualifierId);
+    TLayoutQualifier* extendLayoutQualifier(TLayoutQualifier *layoutQualifier, TLayoutQualifierId layoutQualifierId);
+
     // Performs an error check for embedded struct declarations.
     // Returns true if an error was raised due to the declaration of
     // this struct.
diff --git a/src/compiler/Types.h b/src/compiler/Types.h
index 1bb261c..9caa58f 100644
--- a/src/compiler/Types.h
+++ b/src/compiler/Types.h
@@ -337,6 +337,7 @@
 struct TPublicType
 {
     TBasicType type;
+    TLayoutQualifier* layoutQualifier;
     TQualifier qualifier;
     TPrecision precision;
     int primarySize;          // size of vector or cols of matrix
@@ -349,6 +350,7 @@
     void setBasic(TBasicType bt, TQualifier q, int ln = 0)
     {
         type = bt;
+        layoutQualifier = NULL;
         qualifier = q;
         precision = EbpUndefined;
         primarySize = 1;
diff --git a/src/compiler/glslang.l b/src/compiler/glslang.l
index dace14f..ace2f2f 100644
--- a/src/compiler/glslang.l
+++ b/src/compiler/glslang.l
@@ -167,6 +167,8 @@
 
 "struct"       { context->lexAfterType = true; return(STRUCT); }
 
+"layout"  { return ES2_ident_ES3_keyword(context, LAYOUT); }
+
     /* Reserved keywords for GLSL ES 3.00 that are not reserved for GLSL ES 1.00 */
 "coherent"          |
 "restrict"          |
@@ -233,6 +235,17 @@
 	return reserved_word(yyscanner);
 }
 
+    /* Reserved keywords in GLSL ES 1.00 that are not reserved in GLSL ES 3.00 */
+"packed"  {
+    if (context->shaderVersion >= 300)
+    {
+        yylval->lex.string = NewPoolTString(yytext);
+        return check_type(yyscanner);
+    }
+
+    return reserved_word(yyscanner);
+}
+
     /* Reserved keywords */
 "asm"          |
 
@@ -242,7 +255,6 @@
 "typedef"      |
 "template"     |
 "this"         |
-"packed"       |
 
 "goto"         |
 
diff --git a/src/compiler/glslang.y b/src/compiler/glslang.y
index d9c807b..b66e214 100644
--- a/src/compiler/glslang.y
+++ b/src/compiler/glslang.y
@@ -72,6 +72,8 @@
         union {
             TPublicType type;
             TPrecision precision;
+            TLayoutQualifierId layoutQualifierId;
+            TLayoutQualifier* layoutQualifier;
             TQualifier qualifier;
             TFunction* function;
             TParameter param;
@@ -132,6 +134,7 @@
 %token <lex> STRUCT VOID_TYPE WHILE
 %token <lex> SAMPLER2D SAMPLERCUBE SAMPLER_EXTERNAL_OES SAMPLER2DRECT
 %token <lex> SAMPLER3D SAMPLER3DRECT SAMPLER2DSHADOW
+%token <lex> LAYOUT
 
 %token <lex> IDENTIFIER TYPE_NAME FLOATCONSTANT INTCONSTANT UINTCONSTANT BOOLCONSTANT
 %token <lex> FIELD_SELECTION
@@ -167,6 +170,8 @@
 
 %type <interm> parameter_declaration parameter_declarator parameter_type_specifier
 %type <interm.qualifier> parameter_qualifier parameter_type_qualifier 
+%type <interm.layoutQualifier> layout_qualifier layout_qualifier_id_list
+%type <interm.layoutQualifierId> layout_qualifier_id
 
 %type <interm.precision> precision_qualifier
 %type <interm.type> type_qualifier fully_specified_type type_specifier storage_qualifier interpolation_qualifier
@@ -1369,6 +1374,14 @@
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
         $$.setBasic(EbtVoid, qual, $1.line);
     }
+    | layout_qualifier {
+        $$.qualifier = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+        $$.layoutQualifier = $1;
+    }
+    | layout_qualifier storage_qualifier {
+        $$.setBasic(EbtVoid, $2.qualifier, $2.line);
+        $$.layoutQualifier = $1;
+    }
     ;
 
 storage_qualifier
@@ -1433,6 +1446,34 @@
     }
     ;
 
+layout_qualifier
+    : LAYOUT LEFT_PAREN layout_qualifier_id_list RIGHT_PAREN {
+        ES3_ONLY("layout", $1.line, "qualifier");
+        $$ = $3;
+    }
+    ;
+
+layout_qualifier_id_list
+    : layout_qualifier_id {
+        $$ = context->makeLayoutQualifierFromId($1);
+    }
+    | layout_qualifier_id_list COMMA layout_qualifier_id {
+        $$ = context->extendLayoutQualifier($1, $3);
+    }
+    ;
+
+layout_qualifier_id
+    : IDENTIFIER {
+        $$ = context->addLayoutQualifierId(*$1.string, $1.line);
+    }
+    | IDENTIFIER EQUAL INTCONSTANT {
+        $$ = context->addLayoutQualifierId(*$1.string, $1.line, *$3.string, $3.i, $3.line);
+    }
+    | IDENTIFIER EQUAL UINTCONSTANT {
+        $$ = context->addLayoutQualifierId(*$1.string, $1.line, *$3.string, $3.i, $3.line);
+    }
+    ;
+
 type_specifier_no_prec
     : type_specifier_nonarray {
         $$ = $1;
diff --git a/src/compiler/glslang_lex.cpp b/src/compiler/glslang_lex.cpp
index 762faa6..e71c309 100644
--- a/src/compiler/glslang_lex.cpp
+++ b/src/compiler/glslang_lex.cpp
@@ -383,8 +383,8 @@
 	*yy_cp = '\0'; \
 	yyg->yy_c_buf_p = yy_cp;
 
-#define YY_NUM_RULES 230
-#define YY_END_OF_BUFFER 231
+#define YY_NUM_RULES 231
+#define YY_END_OF_BUFFER 232
 /* This struct is not used in this scanner,
    but its presence is necessary. */
 struct yy_trans_info
@@ -392,94 +392,94 @@
 	flex_int32_t yy_verify;
 	flex_int32_t yy_nxt;
 	};
-static yyconst flex_int16_t yy_accept[782] =
+static yyconst flex_int16_t yy_accept[787] =
     {   0,
-        0,    0,    0,    0,    0,    0,  231,  229,  228,  228,
-      213,  219,  224,  208,  209,  217,  216,  205,  214,  212,
-      218,  174,  174,  206,  202,  220,  207,  221,  225,  170,
-      210,  211,  223,  170,  170,  170,  170,  170,  170,  170,
-      170,  170,  170,  170,  170,  170,  170,  170,  170,  170,
-      170,  170,  170,  203,  222,  204,  215,    3,    4,    3,
-      227,  230,  226,  199,  185,  204,  193,  188,  183,  191,
-      181,  192,  182,  180,    2,    1,  184,  179,  172,  173,
-        0,  177,    0,  174,  211,  203,  210,  200,  196,  198,
-      197,  201,  170,  189,  195,  170,  170,  170,  170,  170,
+        0,    0,    0,    0,    0,    0,  232,  230,  229,  229,
+      214,  220,  225,  209,  210,  218,  217,  206,  215,  213,
+      219,  175,  175,  207,  203,  221,  208,  222,  226,  171,
+      211,  212,  224,  171,  171,  171,  171,  171,  171,  171,
+      171,  171,  171,  171,  171,  171,  171,  171,  171,  171,
+      171,  171,  171,  204,  223,  205,  216,    3,    4,    3,
+      228,  231,  227,  200,  186,  205,  194,  189,  184,  192,
+      182,  193,  183,  181,    2,    1,  185,  180,  173,  174,
+        0,  178,    0,  175,  212,  204,  211,  201,  197,  199,
+      198,  202,  171,  190,  196,  171,  171,  171,  171,  171,
 
-      170,  170,  170,  170,  170,  170,  170,   17,  170,  170,
-      170,  170,  170,  170,  170,  170,  170,  170,  170,  170,
-      170,   20,  170,  170,   28,  170,  170,  170,  170,  170,
-      170,  170,  170,  170,  170,  170,  170,  170,  170,  170,
-      170,  170,  170,  170,  170,  170,  170,  170,  170,  170,
-      170,  170,  170,  170,  170,  170,  170,  190,  194,    5,
-      226,    0,    1,  179,    0,  176,    0,  178,  171,  186,
-      187,  170,  128,  170,  170,  170,  170,  170,  170,  170,
-      170,  170,  170,  170,  170,  170,  170,  170,  170,  170,
-      170,  170,  170,  170,  170,  170,   18,  170,  170,  170,
+      171,  171,  171,  171,  171,  171,  171,   17,  171,  171,
+      171,  171,  171,  171,  171,  171,  171,  171,  171,  171,
+      171,   20,  171,  171,   28,  171,  171,  171,  171,  171,
+      171,  171,  171,  171,  171,  171,  171,  171,  171,  171,
+      171,  171,  171,  171,  171,  171,  171,  171,  171,  171,
+      171,  171,  171,  171,  171,  171,  171,  171,  191,  195,
+        5,  227,    0,    1,  180,    0,  177,    0,  179,  172,
+      187,  188,  171,  130,  171,  171,  171,  171,  171,  171,
+      171,  171,  171,  171,  171,  171,  171,  171,  171,  171,
+      171,  171,  171,  171,  171,  171,  171,   18,  171,  171,
 
-      170,  170,  170,  170,  170,  170,  170,   32,  170,  170,
-      170,  170,  170,  170,  170,  170,  170,  170,   29,  170,
-      170,  170,  170,  170,  170,  170,  170,  170,  170,  170,
-      170,  170,  170,  170,  170,  170,  170,  170,  170,  170,
-      170,  170,  170,  170,  170,  170,  170,  170,  170,  170,
-      170,  170,  170,    0,  180,    0,  179,  175,  170,  170,
-      170,   35,  170,  170,   23,  167,  170,  170,  170,  170,
-      170,  170,  170,  170,  170,  170,   21,  131,  170,  170,
-      170,  170,   26,  170,  170,  136,  148,  170,  170,  170,
-      170,  170,  170,  170,  170,  170,  170,  170,  145,    9,
+      171,  171,  171,  171,  171,  171,  171,  171,   32,  171,
+      171,  171,  171,  171,  171,  171,  171,  171,  171,  171,
+       29,  171,  171,  171,  171,  171,  171,  171,  171,  171,
+      171,  171,  171,  171,  171,  171,  171,  171,  171,  171,
+      171,  171,  171,  171,  171,  171,  171,  171,  171,  171,
+      171,  171,  171,  171,  171,    0,  181,    0,  180,  176,
+      171,  171,  171,   35,  171,  171,   23,  168,  171,  171,
+      171,  171,  171,  171,  171,  171,  171,  171,   21,  133,
+      171,  171,  171,  171,   26,  171,  171,  137,  149,  171,
+      171,  171,  171,  171,  171,  171,  171,  171,  171,  171,
 
-       40,   41,   42,  170,  170,  170,  170,  170,  170,  170,
-      170,  170,  170,  170,  170,  170,  170,  170,  170,  170,
-      170,  170,  170,  170,  170,  170,  170,  134,   36,  170,
-      170,   33,  170,  170,  170,  170,  170,  170,  170,   52,
-       53,   54,   34,  170,  170,  170,  170,  170,  170,   15,
-       61,   62,   63,  170,  129,  170,  170,   12,  170,  170,
-      170,  170,  157,  158,  159,  170,   37,  170,  149,   31,
-      160,  161,  162,    7,  154,  155,  156,  170,  170,  170,
-       30,  152,  170,  170,  170,   55,   56,   57,  170,  170,
-      170,  170,  170,  170,  170,  170,  170,  170,   79,  170,
+      171,  146,    9,   40,   41,   42,  171,  171,  171,  171,
+      171,  171,  171,  171,  171,  171,  171,  171,  171,  171,
+      171,  171,  171,  171,  171,  171,  171,  171,  171,  171,
+      136,   36,  171,  171,   33,  171,  171,  171,  171,  171,
+      171,  171,   52,   53,   54,   34,  171,  171,  171,  171,
+      171,  171,   15,   61,   62,   63,  171,  131,  171,  171,
+       12,  171,  171,  171,  171,  158,  159,  160,  171,   37,
+      171,  150,   31,  161,  162,  163,    7,  155,  156,  157,
+      171,  171,  171,   30,  153,  171,  171,  171,   55,   56,
+       57,  171,  171,  171,  171,  171,  171,  171,  171,  171,
 
-      170,  170,  170,  170,  170,  170,  146,  170,  170,  170,
-      170,  170,  170,  170,  170,  170,  170,  170,  130,  170,
-      170,  169,   58,   59,   60,  170,  170,   19,  170,   84,
-      170,  170,  170,  170,   82,  170,  170,  170,  147,  142,
-       85,  170,  170,  170,  170,  170,  170,  137,  170,  170,
-      170,   43,   46,   48,   47,   44,   50,   49,   51,   45,
-      170,  170,  170,  170,  153,  135,  170,  170,  140,  170,
-      170,  170,   39,   80,  166,   27,  141,   71,  170,  151,
-       22,  170,  170,  170,  170,  170,  170,  170,  170,  170,
-      170,  170,  170,  170,  170,   24,   38,  170,  170,  170,
+      171,  171,   80,  171,  171,  171,  171,  171,  171,  171,
+      147,  171,  171,  171,  171,  171,  171,  171,  171,  171,
+      171,  171,  132,  171,  171,  170,   58,   59,   60,  171,
+      171,   19,  171,   85,  171,  171,  171,  171,   83,  171,
+      171,  171,  148,  143,   86,  171,  171,  171,  171,  171,
+      171,  138,  171,  171,  171,   72,   43,   46,   48,   47,
+       44,   50,   49,   51,   45,  171,  171,  171,  171,  154,
+      129,  171,  171,  141,  171,  171,  171,   39,   81,  167,
+       27,  142,   71,  171,  152,   22,  171,  171,  171,  171,
+      171,  171,  171,  171,  171,  171,  171,  171,  171,  171,
 
-      170,  170,  170,   86,   87,   88,  170,  170,  170,  170,
-      170,    8,  170,  170,  170,  170,  170,  170,  170,  170,
-      170,  170,  170,  132,  170,  170,  170,  170,  170,   13,
-      170,  170,   14,  170,  170,  170,  170,   25,   72,   16,
-      143,   90,   91,   92,  170,  170,  170,  170,  170,  170,
-      170,  170,  170,  170,  170,  170,  138,  170,  170,  170,
-       74,   76,   73,  170,  170,  170,  170,  170,  170,  170,
-      133,   94,   95,   96,  170,  170,  150,  170,  139,  170,
-      170,   11,  170,  170,  170,  170,  170,  170,  170,  170,
-      170,   89,  144,    6,  170,  170,  170,  168,  170,   83,
+       24,   38,  171,  171,  171,  171,  171,  171,   87,   88,
+       89,  171,  171,  171,  171,  171,    8,  171,  171,  171,
+      171,  171,  171,  171,  171,  171,  171,  171,  134,  171,
+      171,  171,  171,  171,   13,  171,  171,   14,  171,  171,
+      171,  171,   25,   73,   16,  144,   91,   92,   93,  171,
+      171,  171,  171,  171,  171,  171,  171,  171,  171,  171,
+      171,  139,  171,  171,  171,   75,   77,   74,  171,  171,
+      171,  171,  171,  171,  171,  135,   95,   96,   97,  171,
+      171,  151,  171,  140,  171,  171,   11,  171,  171,  171,
+      171,  171,  171,  171,  171,  171,   90,  145,    6,  171,
 
-       10,  163,   64,   67,  170,  170,  170,  170,  170,  170,
-      170,  170,  170,  170,  170,   75,  170,  170,  170,  170,
-       93,  170,  170,  170,  170,  170,  113,  170,  170,  170,
-      170,  170,  170,  170,  170,  170,  170,  170,  170,   81,
-      170,  170,  170,   97,  115,  170,  170,   77,  170,  170,
-      170,  170,  170,  170,  170,  108,  170,  170,  170,  170,
-      170,  170,  170,  122,  170,  170,  170,  170,   65,  170,
-      170,  170,  170,  170,  170,  170,  170,  170,  170,  109,
-       98,  170,   99,  170,  170,  123,  170,  170,  170,  170,
-      170,  170,  170,  170,  170,  170,  170,  170,  170,  110,
+      171,  171,  169,  171,   84,   10,  164,   64,   67,  171,
+      171,  171,  171,  171,  171,  171,  171,  171,  171,  171,
+       76,  171,  171,  171,  171,   94,  171,  171,  171,  171,
+      171,  114,  171,  171,  171,  171,  171,  171,  171,  171,
+      171,  171,  171,  171,   82,  171,  171,  171,   98,  116,
+      171,  171,   78,  171,  171,  171,  171,  171,  171,  171,
+      109,  171,  171,  171,  171,  171,  171,  171,  123,  171,
+      171,  171,  171,   65,  171,  171,  171,  171,  171,  171,
+      171,  171,  171,  171,  110,   99,  171,  100,  171,  171,
+      124,  171,  171,  171,  171,  171,  171,  171,  171,  171,
 
-      170,  124,  170,  170,  100,  101,  170,  104,  170,  105,
-      170,  170,  170,  170,   78,  170,  170,  170,   70,  170,
-       68,  119,  170,  102,  103,  170,  170,  170,  170,  170,
-      170,  170,  170,  117,  120,  111,  170,  170,  170,  170,
-      170,  170,  170,  118,  121,  170,  170,  114,  170,  170,
-      164,  170,  170,   69,  170,  116,  170,  170,  170,  170,
-      170,  125,  170,  170,  170,  170,  170,  126,  170,  170,
-      170,  127,  106,  107,  170,  170,   66,  170,  165,  112,
-        0
+      171,  171,  171,  171,  111,  171,  125,  171,  171,  101,
+      102,  171,  105,  171,  106,  171,  171,  171,  171,   79,
+      171,  171,  171,   70,  171,   68,  120,  171,  103,  104,
+      171,  171,  171,  171,  171,  171,  171,  171,  118,  121,
+      112,  171,  171,  171,  171,  171,  171,  171,  119,  122,
+      171,  171,  115,  171,  171,  165,  171,  171,   69,  171,
+      117,  171,  171,  171,  171,  171,  126,  171,  171,  171,
+      171,  171,  127,  171,  171,  171,  128,  107,  108,  171,
+      171,   66,  171,  166,  113,    0
     } ;
 
 static yyconst flex_int32_t yy_ec[256] =
@@ -526,187 +526,191 @@
         1,    1
     } ;
 
-static yyconst flex_int16_t yy_base[787] =
+static yyconst flex_int16_t yy_base[792] =
     {   0,
-        0,    0,   70,   71,   80,    0, 1002, 1003, 1003, 1003,
-      976,   50,  147, 1003, 1003,  975,  144, 1003,  143,  141,
-      156,  169,  223,  973, 1003,  169,  973,   52, 1003,    0,
-     1003, 1003,  152,  117,  138,  118,  157,  148,  167,  939,
-      147,  173,  938,  126,  159,  932,  188,  945,  201,  198,
-      214,  211,  147, 1003,  158, 1003, 1003, 1003, 1003,  979,
-     1003, 1003,    0, 1003, 1003, 1003, 1003, 1003, 1003, 1003,
-     1003, 1003, 1003,  264, 1003,    0, 1003,  272,  234,  309,
-      291, 1003,    0,    0, 1003, 1003, 1003,  967, 1003, 1003,
-     1003,  966,    0, 1003, 1003,  928,  933,  187,  930,  938,
+        0,    0,   70,   71,   80,    0, 1007, 1008, 1008, 1008,
+      981,   50,  147, 1008, 1008,  980,  144, 1008,  143,  141,
+      156,  169,  223,  978, 1008,  169,  978,   52, 1008,    0,
+     1008, 1008,  152,  117,  138,  118,  157,  148,  167,  944,
+      147,  173,  159,  126,  188,  938,  200,  951,  205,  199,
+      212,  226,  147, 1008,  158, 1008, 1008, 1008, 1008,  985,
+     1008, 1008,    0, 1008, 1008, 1008, 1008, 1008, 1008, 1008,
+     1008, 1008, 1008,  262, 1008,    0, 1008,  272,  256,  310,
+      297, 1008,    0,    0, 1008, 1008, 1008,  973, 1008, 1008,
+     1008,  972,    0, 1008, 1008,  934,  939,  191,  936,  944,
 
-      937,  924,  927,  938,  242,  932,  920,  917,  930,  917,
-      914,  914,  920,  158,  257,  914,  924,  910,  916,  919,
-      920,    0,  912,  922,  276,  921,  916,  162,  902,  915,
-      906,  217,  899,  258,  911,  913,  271,  902,  899,  888,
-      897,  291,  291,  901,  897,  899,  888,  891,  286,  286,
-      299,  900,  888,  900,  206,  893,  892, 1003, 1003, 1003,
-        0,  344,    0,  358,  376, 1003,  383,  393,  256, 1003,
-     1003,  891,    0,  887,  882,  886,  895,  892,  304,  876,
-      876,  887,  879,  284,  889,  886,  886,  884,  881,  873,
-      879,  866,  864,  876,  862,  878,    0,  875,  863,  870,
+      943,  930,  933,  944,  245,  938,  926,  923,  936,  923,
+      920,  920,  926,  158,  240,  920,  930,  916,  922,  925,
+      926,    0,  918,  928,  277,  927,  922,  903,  162,  907,
+      920,  911,  246,  904,  286,  916,  918,  289,  907,  904,
+      893,  902,  292,  294,  906,  902,  904,  893,  896,  287,
+      203,  255,  905,  893,  905,  199,  898,  897, 1008, 1008,
+     1008,    0,  345,    0,  359,  377, 1008,  384,  394,  306,
+     1008, 1008,  896,    0,  892,  887,  891,  900,  897,  305,
+      881,  881,  892,  884,  309,  894,  891,  891,  889,  886,
+      878,  884,  871,  869,  881,  867,  883,    0,  880,  868,
 
-      867,  871,  872,  865,  862,  851,  850,  863,  866,  854,
-      862,  857,  848,  350,  853,  856,  847,  854,  843,  847,
-      838,  852,  851,  842,  848,  322,  832,  835,  833,  843,
-      833,  828,  826,  828,  838,  824,  826,  823,  834,  833,
-      836,  818,  299,  826,  822,  820,  829,  808,  364,  826,
-      828,  817,  809,  400,  407,  414,  421, 1003,  806,  816,
-      815,    0,  813,  426,    0,    0,  806,  804,  804,  805,
-      800,  808,  797,  814,  803,  429,    0,    0,  797,  807,
-      806,  806,    0,  791,  432,    0,    0,  793,  435,  800,
-      801,  792,  786,  785,  786,  785,  785,  438,    0,    0,
+      875,  872,  876,  877,  870,  867,  856,  855,  868,  871,
+      859,  867,  855,  861,  852,  364,  857,  860,  851,  858,
+      847,  851,  842,  856,  855,  846,  852,  248,  836,  839,
+      837,  847,  837,  832,  830,  832,  842,  828,  830,  827,
+      838,  837,  840,  822,  366,  830,  826,  824,  833,  812,
+      367,  830,  832,  821,  813,  402,  410,  417,  424, 1008,
+      810,  820,  819,    0,  817,  429,    0,    0,  810,  808,
+      808,  809,  804,  812,  801,  818,  807,  432,    0,    0,
+      801,  811,  810,  810,    0,  795,  435,    0,    0,  797,
+      438,  804,  805,  796,  790,  789,  790,  789,  789,  441,
 
-      777,  776,  775,  777,  778,  783,  777,  773,  786,  781,
-      781,  779,  778,  772,  766,  768,  767,  771,  763,  766,
-      761,  769,  774,  762,  759,  771,  762,    0,    0,  768,
-      764,    0,  756,  756,  761,  752,  759,  441,  756,    0,
-        0,    0,    0,  746,  758,  757,  756,  757,  757,    0,
-        0,    0,    0,  744,    0,  752,  743,    0,  742,  743,
-      737,  747,    0,    0,    0,  738,    0,  734,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,  744,  445,  743,
-        0,    0,  741,  737,  734,    0,    0,    0,  447,  450,
-      453,  732,  728,  733,  724,  722,  735,  720,    0,  720,
+      784,    0,    0,  780,  779,  778,  780,  781,  786,  780,
+      776,  789,  784,  784,  782,  781,  775,  769,  771,  770,
+      774,  766,  769,  764,  772,  777,  765,  762,  774,  765,
+        0,    0,  771,  767,    0,  759,  759,  764,  755,  762,
+      444,  759,    0,    0,    0,    0,  749,  761,  760,  759,
+      760,  760,    0,    0,    0,    0,  747,    0,  755,  746,
+        0,  745,  746,  740,  750,    0,    0,    0,  741,    0,
+      737,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+      747,  448,  746,    0,    0,  744,  740,  737,    0,    0,
+        0,  729,  450,  453,  456,  734,  730,  735,  726,  724,
 
-      733,  722,  718,  724,  719,  726,    0,  724,  721,  725,
-      709,  707,  710,  716,  722,  717,  716,  704,    0,  706,
-      707,    0,    0,    0,    0,  704,  707,    0,  701,    0,
-      714,  694,  703,  698,    0,  691,  691,  704,    0,  706,
-        0,  460,  719,  718,  717,  684,  683,    0,  700,  699,
-      694,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-      683,  696,  683,  680,    0,    0,  685,  684,    0,  681,
-      688,  687,    0,  673,    0,    0,    0,    0,  670,    0,
-        0,  669,  680,  463,  673,  679,  678,  675,  670,  667,
-      660,  660,  673,  658,  670,    0,    0,  663,  686,  685,
+      737,  722,    0,  722,  735,  724,  720,  726,  721,  728,
+        0,  726,  723,  727,  711,  709,  712,  718,  724,  719,
+      718,  706,    0,  708,  709,    0,    0,    0,    0,  706,
+      709,    0,  703,    0,  716,  696,  705,  700,    0,  693,
+      693,  706,    0,  708,    0,  463,  721,  720,  719,  686,
+      685,    0,  702,  701,  696,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,  685,  698,  685,  682,    0,
+        0,  687,  686,    0,  683,  690,  689,    0,  675,    0,
+        0,    0,    0,  672,    0,    0,  671,  682,  466,  675,
+      681,  680,  677,  672,  669,  662,  662,  675,  660,  672,
 
-      684,  651,  650,  445,  456,    0,  662,  665,  663,  652,
-      648,    0,  660,  657,  656,  646,  645,  635,  652,  638,
-      469,  646,  649,    0,  666,  665,  664,  631,  630,    0,
-      644,  631,    0,  641,  634,  635,  638,    0,    0,    0,
-        0,  658,  657,    0,  634,  637,  622,  629,  620,  627,
-      628,  628,  627,  613,  479,  625,    0,  626,  615,  614,
-        0,    0,    0,  639,  638,  637,  604,  603,  599,  607,
-        0,  635,  634,    0,  611,  614,    0,  486,    0,  592,
-      601,    0,  597,  596,  605,  605,  593,  607,  591,  605,
-      600,    0,    0,    0,  617,  616,  583,    0,  583,    0,
+        0,    0,  665,  688,  687,  686,  653,  652,  330,  448,
+        0,  664,  667,  665,  654,  650,    0,  662,  659,  658,
+      648,  647,  637,  654,  640,  471,  648,  651,    0,  668,
+      667,  666,  633,  632,    0,  646,  633,    0,  643,  636,
+      637,  640,    0,    0,    0,    0,  660,  659,    0,  636,
+      639,  624,  631,  622,  629,  630,  630,  629,  615,  481,
+      627,    0,  628,  617,  616,    0,    0,    0,  641,  640,
+      639,  606,  605,  601,  609,    0,  637,  636,    0,  613,
+      616,    0,  488,    0,  594,  603,    0,  599,  598,  607,
+      607,  595,  609,  593,  607,  602,    0,    0,    0,  619,
 
-        0,  469,  474,  607,  593,  596,  579,  591,  579,  578,
-      587,  587,  604,  603,  570,    0,  570,  571,  570,  580,
-        0,  583,  579,  581,  577,  564,  595,  350,  572,  568,
-      560,  567,  580,  568,  564,  566,  564,  564,  563,    0,
-      551,  550,  560,    0,  580,  469,  557,    0,  561,  560,
-      544,  536,  544,  534,  542,    0,  539,  560,  548,  546,
-      531,  534,  548,  564,  544,  545,  542,  539,    0,  527,
-      541,  540,  524,  523,  544,  532,  530,  512,  511,    0,
-      539,  511,  537,  509,  513,  544,  524,  521,  520,  523,
-      519,  506,  503,  516,  501,  502,  504,  493,  492,    0,
+      618,  585,    0,  585,    0,    0,  471,  476,  609,  595,
+      598,  581,  593,  581,  580,  589,  589,  606,  605,  572,
+        0,  572,  573,  572,  582,    0,  585,  581,  583,  579,
+      566,  597,  353,  574,  570,  562,  569,  582,  570,  566,
+      568,  566,  566,  565,    0,  553,  552,  562,    0,  582,
+      471,  559,    0,  563,  562,  546,  538,  546,  536,  544,
+        0,  541,  562,  550,  548,  533,  536,  550,  566,  546,
+      547,  544,  541,    0,  529,  543,  542,  526,  525,  546,
+      534,  532,  514,  513,    0,  541,  513,  539,  511,  515,
+      546,  526,  523,  522,  525,  521,  508,  505,  518,  503,
 
-      498,  529,  509,  506,    0,    0,  502,    0,  501,    0,
-      507,  491,  488,  489,    0,  481,  489,  486,  507,  486,
-        0,    0,  498,    0,    0,  497,  481,  478,  479,  493,
-      492,  469,  475,    0,    0,  496,  468,  487,  479,  465,
-      474,  461,  465,    0,    0,  466,  465,    0,  465,  453,
-        0,  433,  446,    0,  452,    0,  437,  348,  347,  322,
-      326,    0,  322,  323,  256,  252,  249,    0,  229,  210,
-      214,    0,    0,    0,  158,  132,    0,  115,    0,    0,
-     1003,  515,  517,  519,  523,  163
+      504,  506,  495,  494,    0,  500,  531,  511,  508,    0,
+        0,  504,    0,  503,    0,  509,  493,  490,  491,    0,
+      483,  491,  488,  509,  488,    0,    0,  500,    0,    0,
+      499,  483,  480,  481,  495,  494,  471,  477,    0,    0,
+      498,  470,  489,  481,  467,  476,  463,  467,    0,    0,
+      468,  467,    0,  467,  455,    0,  435,  449,    0,  455,
+        0,  445,  427,  349,  339,  327,    0,  308,  315,  271,
+      259,  255,    0,  255,  216,  209,    0,    0,    0,  108,
+      115,    0,  132,    0,    0, 1008,  517,  519,  521,  525,
+      213
+
     } ;
 
-static yyconst flex_int16_t yy_def[787] =
+static yyconst flex_int16_t yy_def[792] =
     {   0,
-      781,    1,  782,  782,  781,    5,  781,  781,  781,  781,
-      781,  781,  781,  781,  781,  781,  781,  781,  781,  781,
-      781,  781,  781,  781,  781,  781,  781,  781,  781,  783,
-      781,  781,  781,  783,  783,  783,  783,  783,  783,  783,
-      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
-      783,  783,  783,  781,  781,  781,  781,  781,  781,  781,
-      781,  781,  784,  781,  781,  781,  781,  781,  781,  781,
-      781,  781,  781,  781,  781,  785,  781,  781,   22,  781,
-      781,  781,  786,   23,  781,  781,  781,  781,  781,  781,
-      781,  781,  783,  781,  781,  783,  783,  783,  783,  783,
+      786,    1,  787,  787,  786,    5,  786,  786,  786,  786,
+      786,  786,  786,  786,  786,  786,  786,  786,  786,  786,
+      786,  786,  786,  786,  786,  786,  786,  786,  786,  788,
+      786,  786,  786,  788,  788,  788,  788,  788,  788,  788,
+      788,  788,  788,  788,  788,  788,  788,  788,  788,  788,
+      788,  788,  788,  786,  786,  786,  786,  786,  786,  786,
+      786,  786,  789,  786,  786,  786,  786,  786,  786,  786,
+      786,  786,  786,  786,  786,  790,  786,  786,   22,  786,
+      786,  786,  791,   23,  786,  786,  786,  786,  786,  786,
+      786,  786,  788,  786,  786,  788,  788,  788,  788,  788,
 
-      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
-      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
-      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
-      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
-      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
-      783,  783,  783,  783,  783,  783,  783,  781,  781,  781,
-      784,  781,  785,  781,  781,  781,  781,  781,  786,  781,
-      781,  783,  783,  783,  783,  783,  783,  783,  783,  783,
-      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
-      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
+      788,  788,  788,  788,  788,  788,  788,  788,  788,  788,
+      788,  788,  788,  788,  788,  788,  788,  788,  788,  788,
+      788,  788,  788,  788,  788,  788,  788,  788,  788,  788,
+      788,  788,  788,  788,  788,  788,  788,  788,  788,  788,
+      788,  788,  788,  788,  788,  788,  788,  788,  788,  788,
+      788,  788,  788,  788,  788,  788,  788,  788,  786,  786,
+      786,  789,  786,  790,  786,  786,  786,  786,  786,  791,
+      786,  786,  788,  788,  788,  788,  788,  788,  788,  788,
+      788,  788,  788,  788,  788,  788,  788,  788,  788,  788,
+      788,  788,  788,  788,  788,  788,  788,  788,  788,  788,
 
-      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
-      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
-      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
-      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
-      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
-      783,  783,  783,  781,  781,  781,  781,  781,  783,  783,
-      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
-      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
-      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
-      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
+      788,  788,  788,  788,  788,  788,  788,  788,  788,  788,
+      788,  788,  788,  788,  788,  788,  788,  788,  788,  788,
+      788,  788,  788,  788,  788,  788,  788,  788,  788,  788,
+      788,  788,  788,  788,  788,  788,  788,  788,  788,  788,
+      788,  788,  788,  788,  788,  788,  788,  788,  788,  788,
+      788,  788,  788,  788,  788,  786,  786,  786,  786,  786,
+      788,  788,  788,  788,  788,  788,  788,  788,  788,  788,
+      788,  788,  788,  788,  788,  788,  788,  788,  788,  788,
+      788,  788,  788,  788,  788,  788,  788,  788,  788,  788,
+      788,  788,  788,  788,  788,  788,  788,  788,  788,  788,
 
-      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
-      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
-      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
-      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
-      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
-      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
-      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
-      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
-      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
-      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
+      788,  788,  788,  788,  788,  788,  788,  788,  788,  788,
+      788,  788,  788,  788,  788,  788,  788,  788,  788,  788,
+      788,  788,  788,  788,  788,  788,  788,  788,  788,  788,
+      788,  788,  788,  788,  788,  788,  788,  788,  788,  788,
+      788,  788,  788,  788,  788,  788,  788,  788,  788,  788,
+      788,  788,  788,  788,  788,  788,  788,  788,  788,  788,
+      788,  788,  788,  788,  788,  788,  788,  788,  788,  788,
+      788,  788,  788,  788,  788,  788,  788,  788,  788,  788,
+      788,  788,  788,  788,  788,  788,  788,  788,  788,  788,
+      788,  788,  788,  788,  788,  788,  788,  788,  788,  788,
 
-      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
-      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
-      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
-      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
-      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
-      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
-      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
-      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
-      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
-      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
+      788,  788,  788,  788,  788,  788,  788,  788,  788,  788,
+      788,  788,  788,  788,  788,  788,  788,  788,  788,  788,
+      788,  788,  788,  788,  788,  788,  788,  788,  788,  788,
+      788,  788,  788,  788,  788,  788,  788,  788,  788,  788,
+      788,  788,  788,  788,  788,  788,  788,  788,  788,  788,
+      788,  788,  788,  788,  788,  788,  788,  788,  788,  788,
+      788,  788,  788,  788,  788,  788,  788,  788,  788,  788,
+      788,  788,  788,  788,  788,  788,  788,  788,  788,  788,
+      788,  788,  788,  788,  788,  788,  788,  788,  788,  788,
+      788,  788,  788,  788,  788,  788,  788,  788,  788,  788,
 
-      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
-      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
-      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
-      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
-      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
-      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
-      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
-      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
-      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
-      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
+      788,  788,  788,  788,  788,  788,  788,  788,  788,  788,
+      788,  788,  788,  788,  788,  788,  788,  788,  788,  788,
+      788,  788,  788,  788,  788,  788,  788,  788,  788,  788,
+      788,  788,  788,  788,  788,  788,  788,  788,  788,  788,
+      788,  788,  788,  788,  788,  788,  788,  788,  788,  788,
+      788,  788,  788,  788,  788,  788,  788,  788,  788,  788,
+      788,  788,  788,  788,  788,  788,  788,  788,  788,  788,
+      788,  788,  788,  788,  788,  788,  788,  788,  788,  788,
+      788,  788,  788,  788,  788,  788,  788,  788,  788,  788,
+      788,  788,  788,  788,  788,  788,  788,  788,  788,  788,
 
-      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
-      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
-      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
-      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
-      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
-      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
-      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
-      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
-      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
-      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
+      788,  788,  788,  788,  788,  788,  788,  788,  788,  788,
+      788,  788,  788,  788,  788,  788,  788,  788,  788,  788,
+      788,  788,  788,  788,  788,  788,  788,  788,  788,  788,
+      788,  788,  788,  788,  788,  788,  788,  788,  788,  788,
+      788,  788,  788,  788,  788,  788,  788,  788,  788,  788,
+      788,  788,  788,  788,  788,  788,  788,  788,  788,  788,
+      788,  788,  788,  788,  788,  788,  788,  788,  788,  788,
+      788,  788,  788,  788,  788,  788,  788,  788,  788,  788,
+      788,  788,  788,  788,  788,  788,  788,  788,  788,  788,
+      788,  788,  788,  788,  788,  788,  788,  788,  788,  788,
 
-      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
-      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
-      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
-      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
-      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
-      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
-      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
-      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
-        0,  781,  781,  781,  781,  781
+      788,  788,  788,  788,  788,  788,  788,  788,  788,  788,
+      788,  788,  788,  788,  788,  788,  788,  788,  788,  788,
+      788,  788,  788,  788,  788,  788,  788,  788,  788,  788,
+      788,  788,  788,  788,  788,  788,  788,  788,  788,  788,
+      788,  788,  788,  788,  788,  788,  788,  788,  788,  788,
+      788,  788,  788,  788,  788,  788,  788,  788,  788,  788,
+      788,  788,  788,  788,  788,  788,  788,  788,  788,  788,
+      788,  788,  788,  788,  788,  788,  788,  788,  788,  788,
+      788,  788,  788,  788,  788,    0,  786,  786,  786,  786,
+      786
+
     } ;
 
-static yyconst flex_int16_t yy_nxt[1076] =
+static yyconst flex_int16_t yy_nxt[1081] =
     {   0,
         8,    9,   10,   11,   12,   13,   14,   15,   16,   17,
        18,   19,   20,   21,   22,   23,   23,   23,   23,   23,
@@ -725,110 +729,110 @@
        63,   63,   63,   63,   63,   63,   63,   63,   63,   63,
        63,   63,   63,   63,   63,   63,   63,   63,    8,    8,
         8,    8,   67,   70,   72,   74,   74,   74,   74,   74,
-       74,   74,  102,   96,   75,  169,  103,   73,   71,   76,
-      129,   68,  104,   86,  130,  105,   94,   97,   98,  780,
-       77,   78,  158,   79,   79,   79,   79,   79,   79,   80,
-       87,  119,   88,   89,   95,   99,  779,  100,  156,  120,
+       74,   74,  102,   96,   75,  783,  103,   73,   71,   76,
+      130,   68,  104,   86,  131,  105,   94,   97,   98,  784,
+       77,   78,  159,   79,   79,   79,   79,   79,   79,   80,
+       87,  119,   88,   89,   95,   99,  785,  100,  157,  120,
 
-       81,  101,  110,  131,  111,  106,  157,   82,   83,  107,
-      121,  113,  193,  112,  108,  778,  132,   81,  212,  114,
-      109,  115,  122,  194,  116,  123,  213,  159,  124,  125,
-      117,   82,  134,  126,   83,   78,  127,   84,   84,   84,
-       84,   84,   84,   84,  174,  138,  145,  135,  175,  146,
-      136,  777,  139,  140,   81,  153,  141,  147,  250,  154,
-      251,   82,  142,  143,  148,  144,  149,  776,  155,  217,
-      150,   81,  166,  781,  151,  218,  775,  152,   74,   74,
-       74,   74,   74,   74,   74,   82,  164,  164,  164,  164,
-      164,  164,  164,  182,  258,  162,  166,  183,  184,  781,
+       81,  101,  110,  128,  111,  106,  158,   82,   83,  107,
+      121,  113,  194,  112,  108,  170,  129,   81,  214,  114,
+      109,  115,  122,  195,  116,  123,  215,  160,  124,  125,
+      117,   82,  132,  126,   83,   78,  127,   84,   84,   84,
+       84,   84,   84,   84,  135,  133,  782,  146,  175,  139,
+      147,  252,  176,  253,   81,  245,  140,  141,  148,  136,
+      142,   82,  137,  246,  150,  149,  143,  144,  151,  145,
+      154,   81,  152,  781,  155,  153,   74,   74,   74,   74,
+       74,   74,   74,  156,  196,   82,  165,  165,  165,  165,
+      165,  165,  165,  163,  167,  786,  183,  197,  219,  247,
 
-      167,  195,  167,  165,  220,  168,  168,  168,  168,  168,
-      168,  168,  162,  774,  196,  225,  773,  221,  258,  222,
-      165,   78,  772,   80,   80,   80,   80,   80,   80,   80,
-      205,  226,  227,  206,  207,  232,  234,  208,  243,  209,
-       81,  241,  242,  245,  271,  272,  244,   82,  333,  235,
-      233,  246,  265,  254,  771,  254,  334,   81,  255,  255,
-      255,  255,  255,  255,  255,  266,  301,  302,  303,  770,
-      769,   82,  164,  164,  164,  164,  164,  164,  164,  315,
-      340,  341,  342,  316,  658,  256,  659,  256,  768,  165,
-      257,  257,  257,  257,  257,  257,  257,  168,  168,  168,
+      184,  185,  780,  166,  220,  318,  168,  248,  168,  319,
+      163,  169,  169,  169,  169,  169,  169,  169,  167,  779,
+      166,  786,   78,  778,   80,   80,   80,   80,   80,   80,
+       80,  206,  222,  227,  207,  208,  234,  777,  209,  236,
+      210,   81,  243,  244,  260,  223,  776,  224,   82,  228,
+      229,  235,  237,  267,  256,  775,  256,  552,   81,  257,
+      257,  257,  257,  257,  257,  257,  268,  553,  260,  273,
+      274,  774,   82,  165,  165,  165,  165,  165,  165,  165,
+      304,  305,  306,  343,  344,  345,  258,  663,  258,  664,
+      166,  259,  259,  259,  259,  259,  259,  259,  169,  169,
 
-      168,  168,  168,  168,  767,  766,  165,  168,  168,  168,
-      168,  168,  168,  168,  255,  255,  255,  255,  255,  255,
-      255,  255,  255,  255,  255,  255,  255,  255,  257,  257,
-      257,  257,  257,  257,  257,  257,  257,  257,  257,  257,
-      257,  257,  351,  352,  353,  363,  364,  365,  371,  372,
-      373,  375,  376,  377,  386,  387,  388,  423,  424,  425,
-      443,  444,  445,  452,  453,  454,  455,  456,  457,  458,
-      459,  460,  547,  446,  447,  499,  500,  501,  525,  526,
-      527,  765,  548,  549,  564,  565,  566,  764,  502,  503,
-      763,  528,  529,  550,  595,  596,  631,  567,  568,  762,
+      169,  169,  169,  169,  169,  773,  772,  166,  169,  169,
+      169,  169,  169,  169,  169,  336,  257,  257,  257,  257,
+      257,  257,  257,  337,  257,  257,  257,  257,  257,  257,
+      257,  259,  259,  259,  259,  259,  259,  259,  259,  259,
+      259,  259,  259,  259,  259,  354,  355,  356,  366,  367,
+      368,  374,  375,  376,  378,  379,  380,  389,  390,  391,
+      427,  428,  429,  447,  448,  449,  457,  458,  459,  460,
+      461,  462,  463,  464,  465,  554,  450,  451,  504,  505,
+      506,  530,  531,  532,  771,  555,  569,  570,  571,  770,
+      769,  507,  508,  768,  533,  534,  600,  601,  636,  572,
 
-      569,  613,  614,  675,  761,  676,  632,  597,  633,  760,
-      634,  635,  759,  758,  615,   58,   58,   58,   58,   93,
-       93,  161,  161,  163,  757,  163,  163,  756,  755,  754,
-      753,  752,  751,  750,  749,  748,  747,  746,  745,  744,
-      743,  742,  741,  740,  739,  738,  737,  736,  735,  734,
-      733,  732,  731,  730,  729,  728,  727,  726,  725,  724,
-      723,  722,  721,  720,  719,  718,  717,  716,  715,  714,
-      713,  712,  711,  710,  709,  708,  707,  706,  705,  704,
-      703,  702,  701,  700,  699,  698,  697,  696,  695,  694,
-      693,  692,  691,  690,  689,  688,  687,  686,  685,  684,
+      573,  767,  574,  618,  619,  680,  766,  681,  637,  602,
+      638,  765,  639,  640,  764,  763,  620,   58,   58,   58,
+       58,   93,   93,  162,  162,  164,  762,  164,  164,  761,
+      760,  759,  758,  757,  756,  755,  754,  753,  752,  751,
+      750,  749,  748,  747,  746,  745,  744,  743,  742,  741,
+      740,  739,  738,  737,  736,  735,  734,  733,  732,  731,
+      730,  729,  728,  727,  726,  725,  724,  723,  722,  721,
+      720,  719,  718,  717,  716,  715,  714,  713,  712,  711,
+      710,  709,  708,  707,  706,  705,  704,  703,  702,  701,
+      700,  699,  698,  697,  696,  695,  694,  693,  692,  691,
 
-      683,  682,  681,  680,  679,  678,  677,  674,  673,  672,
-      671,  670,  669,  668,  667,  666,  665,  664,  663,  662,
-      661,  660,  657,  656,  655,  654,  653,  652,  651,  650,
-      649,  648,  647,  646,  645,  644,  643,  642,  641,  640,
-      639,  638,  637,  636,  630,  629,  628,  627,  626,  625,
-      624,  623,  622,  621,  620,  619,  618,  617,  616,  612,
-      611,  610,  609,  608,  607,  606,  605,  604,  603,  602,
-      601,  600,  599,  598,  594,  593,  592,  591,  590,  589,
-      588,  587,  586,  585,  584,  583,  582,  581,  580,  579,
-      578,  577,  576,  575,  574,  573,  572,  571,  570,  563,
+      690,  689,  688,  687,  686,  685,  684,  683,  682,  679,
+      678,  677,  676,  675,  674,  673,  672,  671,  670,  669,
+      668,  667,  666,  665,  662,  661,  660,  659,  658,  657,
+      656,  655,  654,  653,  652,  651,  650,  649,  648,  647,
+      646,  645,  644,  643,  642,  641,  635,  634,  633,  632,
+      631,  630,  629,  628,  627,  626,  625,  624,  623,  622,
+      621,  617,  616,  615,  614,  613,  612,  611,  610,  609,
+      608,  607,  606,  605,  604,  603,  599,  598,  597,  596,
+      595,  594,  593,  592,  591,  590,  589,  588,  587,  586,
+      585,  584,  583,  582,  581,  580,  579,  578,  577,  576,
 
-      562,  561,  560,  559,  558,  557,  556,  555,  554,  553,
-      552,  551,  546,  545,  544,  543,  542,  541,  540,  539,
-      538,  537,  536,  535,  534,  533,  532,  531,  530,  524,
-      523,  522,  521,  520,  519,  518,  517,  516,  515,  514,
-      513,  512,  511,  510,  509,  508,  507,  506,  505,  504,
-      498,  497,  496,  495,  494,  493,  492,  491,  490,  489,
-      488,  487,  486,  485,  484,  483,  482,  481,  480,  479,
-      478,  477,  476,  475,  474,  473,  472,  471,  470,  469,
-      468,  467,  466,  465,  464,  463,  462,  461,  451,  450,
-      449,  448,  442,  441,  440,  439,  438,  437,  436,  435,
+      575,  568,  567,  566,  565,  564,  563,  562,  561,  560,
+      559,  558,  557,  556,  551,  550,  549,  548,  547,  546,
+      545,  544,  543,  542,  541,  540,  539,  538,  537,  536,
+      535,  529,  528,  527,  526,  525,  524,  523,  522,  521,
+      520,  519,  518,  517,  516,  515,  514,  513,  512,  511,
+      510,  509,  503,  502,  501,  500,  499,  498,  497,  496,
+      495,  494,  493,  492,  491,  490,  489,  488,  487,  486,
+      485,  484,  483,  482,  481,  480,  479,  478,  477,  476,
+      475,  474,  473,  472,  471,  470,  469,  468,  467,  466,
+      456,  455,  454,  453,  452,  446,  445,  444,  443,  442,
 
-      434,  433,  432,  431,  430,  429,  428,  427,  426,  422,
-      421,  420,  419,  418,  417,  416,  415,  414,  413,  412,
-      411,  410,  409,  408,  407,  406,  405,  404,  403,  402,
-      401,  400,  399,  398,  397,  396,  395,  394,  393,  392,
-      391,  390,  389,  385,  384,  383,  382,  381,  380,  379,
-      378,  374,  370,  369,  368,  367,  366,  362,  361,  360,
-      359,  358,  357,  356,  355,  354,  350,  349,  348,  347,
-      346,  345,  344,  343,  339,  338,  337,  336,  335,  332,
-      331,  330,  329,  328,  327,  326,  325,  324,  323,  322,
-      321,  320,  319,  318,  317,  314,  313,  312,  311,  310,
+      441,  440,  439,  438,  437,  436,  435,  434,  433,  432,
+      431,  430,  426,  425,  424,  423,  422,  421,  420,  419,
+      418,  417,  416,  415,  414,  413,  412,  411,  410,  409,
+      408,  407,  406,  405,  404,  403,  402,  401,  400,  399,
+      398,  397,  396,  395,  394,  393,  392,  388,  387,  386,
+      385,  384,  383,  382,  381,  377,  373,  372,  371,  370,
+      369,  365,  364,  363,  362,  361,  360,  359,  358,  357,
+      353,  352,  351,  350,  349,  348,  347,  346,  342,  341,
+      340,  339,  338,  335,  334,  333,  332,  331,  330,  329,
+      328,  327,  326,  325,  324,  323,  322,  321,  320,  317,
 
-      309,  308,  307,  306,  305,  304,  300,  299,  298,  297,
-      296,  295,  294,  293,  292,  291,  290,  289,  288,  287,
-      286,  285,  284,  283,  282,  281,  280,  279,  278,  277,
-      276,  275,  274,  273,  270,  269,  268,  267,  264,  263,
-      262,  261,  260,  259,  253,  252,  249,  248,  247,  240,
-      239,  238,  237,  236,  231,  230,  229,  228,  224,  223,
-      219,  216,  215,  214,  211,  210,  204,  203,  202,  201,
-      200,  199,  198,  197,  192,  191,  190,  189,  188,  187,
-      186,  185,  181,  180,  179,  178,  177,  176,  173,  172,
-      171,  170,  160,  137,  133,  128,  118,   90,   85,   69,
+      316,  315,  314,  313,  312,  311,  310,  309,  308,  307,
+      303,  302,  301,  300,  299,  298,  297,  296,  295,  294,
+      293,  292,  291,  290,  289,  288,  287,  286,  285,  284,
+      283,  282,  281,  280,  279,  278,  277,  276,  275,  272,
+      271,  270,  269,  266,  265,  264,  263,  262,  261,  255,
+      254,  251,  250,  249,  242,  241,  240,  239,  238,  233,
+      232,  231,  230,  226,  225,  221,  218,  217,  216,  213,
+      212,  211,  205,  204,  203,  202,  201,  200,  199,  198,
+      193,  192,  191,  190,  189,  188,  187,  186,  182,  181,
+      180,  179,  178,  177,  174,  173,  172,  171,  161,  138,
 
-       64,  781,    7,  781,  781,  781,  781,  781,  781,  781,
-      781,  781,  781,  781,  781,  781,  781,  781,  781,  781,
-      781,  781,  781,  781,  781,  781,  781,  781,  781,  781,
-      781,  781,  781,  781,  781,  781,  781,  781,  781,  781,
-      781,  781,  781,  781,  781,  781,  781,  781,  781,  781,
-      781,  781,  781,  781,  781,  781,  781,  781,  781,  781,
-      781,  781,  781,  781,  781,  781,  781,  781,  781,  781,
-      781,  781,  781,  781,  781
+      134,  118,   90,   85,   69,   64,  786,    7,  786,  786,
+      786,  786,  786,  786,  786,  786,  786,  786,  786,  786,
+      786,  786,  786,  786,  786,  786,  786,  786,  786,  786,
+      786,  786,  786,  786,  786,  786,  786,  786,  786,  786,
+      786,  786,  786,  786,  786,  786,  786,  786,  786,  786,
+      786,  786,  786,  786,  786,  786,  786,  786,  786,  786,
+      786,  786,  786,  786,  786,  786,  786,  786,  786,  786,
+      786,  786,  786,  786,  786,  786,  786,  786,  786,  786
     } ;
 
-static yyconst flex_int16_t yy_chk[1076] =
+static yyconst flex_int16_t yy_chk[1081] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -847,111 +851,111 @@
         5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
         5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
         5,    5,   13,   17,   19,   20,   20,   20,   20,   20,
-       20,   20,   36,   34,   21,  786,   36,   19,   17,   21,
-       44,   13,   36,   26,   44,   36,   33,   34,   34,  778,
+       20,   20,   36,   34,   21,  780,   36,   19,   17,   21,
+       44,   13,   36,   26,   44,   36,   33,   34,   34,  781,
        21,   22,   55,   22,   22,   22,   22,   22,   22,   22,
-       26,   41,   26,   26,   33,   35,  776,   35,   53,   41,
+       26,   41,   26,   26,   33,   35,  783,   35,   53,   41,
 
-       22,   35,   38,   45,   38,   37,   53,   22,   22,   37,
-       41,   39,  114,   38,   37,  775,   45,   22,  128,   39,
-       37,   39,   42,  114,   39,   42,  128,   55,   42,   42,
-       39,   22,   47,   42,   22,   23,   42,   23,   23,   23,
-       23,   23,   23,   23,   98,   49,   50,   47,   98,   50,
-       47,  771,   49,   49,   23,   52,   49,   50,  155,   52,
-      155,   23,   49,   49,   50,   49,   51,  770,   52,  132,
-       51,   23,   79,   79,   51,  132,  769,   51,   74,   74,
-       74,   74,   74,   74,   74,   23,   78,   78,   78,   78,
-       78,   78,   78,  105,  169,   74,   79,  105,  105,   79,
+       22,   35,   38,   43,   38,   37,   53,   22,   22,   37,
+       41,   39,  114,   38,   37,  791,   43,   22,  129,   39,
+       37,   39,   42,  114,   39,   42,  129,   55,   42,   42,
+       39,   22,   45,   42,   22,   23,   42,   23,   23,   23,
+       23,   23,   23,   23,   47,   45,  776,   50,   98,   49,
+       50,  156,   98,  156,   23,  151,   49,   49,   50,   47,
+       49,   23,   47,  151,   51,   50,   49,   49,   51,   49,
+       52,   23,   51,  775,   52,   51,   74,   74,   74,   74,
+       74,   74,   74,   52,  115,   23,   78,   78,   78,   78,
+       78,   78,   78,   74,   79,   79,  105,  115,  133,  152,
 
-       81,  115,   81,   78,  134,   81,   81,   81,   81,   81,
-       81,   81,   74,  767,  115,  137,  766,  134,  169,  134,
-       78,   80,  765,   80,   80,   80,   80,   80,   80,   80,
-      125,  137,  137,  125,  125,  142,  143,  125,  150,  125,
-       80,  149,  149,  151,  184,  184,  150,   80,  243,  143,
-      142,  151,  179,  162,  764,  162,  243,   80,  162,  162,
-      162,  162,  162,  162,  162,  179,  214,  214,  214,  763,
-      761,   80,  164,  164,  164,  164,  164,  164,  164,  226,
-      249,  249,  249,  226,  628,  165,  628,  165,  760,  164,
-      165,  165,  165,  165,  165,  165,  165,  167,  167,  167,
+      105,  105,  774,   78,  133,  228,   81,  152,   81,  228,
+       74,   81,   81,   81,   81,   81,   81,   81,   79,  772,
+       78,   79,   80,  771,   80,   80,   80,   80,   80,   80,
+       80,  125,  135,  138,  125,  125,  143,  770,  125,  144,
+      125,   80,  150,  150,  170,  135,  769,  135,   80,  138,
+      138,  143,  144,  180,  163,  768,  163,  509,   80,  163,
+      163,  163,  163,  163,  163,  163,  180,  509,  170,  185,
+      185,  766,   80,  165,  165,  165,  165,  165,  165,  165,
+      216,  216,  216,  251,  251,  251,  166,  633,  166,  633,
+      165,  166,  166,  166,  166,  166,  166,  166,  168,  168,
 
-      167,  167,  167,  167,  759,  758,  164,  168,  168,  168,
-      168,  168,  168,  168,  254,  254,  254,  254,  254,  254,
-      254,  255,  255,  255,  255,  255,  255,  255,  256,  256,
-      256,  256,  256,  256,  256,  257,  257,  257,  257,  257,
-      257,  257,  264,  264,  264,  276,  276,  276,  285,  285,
-      285,  289,  289,  289,  298,  298,  298,  338,  338,  338,
-      379,  379,  379,  389,  389,  389,  390,  390,  390,  391,
-      391,  391,  504,  379,  379,  442,  442,  442,  484,  484,
-      484,  757,  504,  505,  521,  521,  521,  755,  442,  442,
-      753,  484,  484,  505,  555,  555,  602,  521,  521,  752,
+      168,  168,  168,  168,  168,  765,  764,  165,  169,  169,
+      169,  169,  169,  169,  169,  245,  256,  256,  256,  256,
+      256,  256,  256,  245,  257,  257,  257,  257,  257,  257,
+      257,  258,  258,  258,  258,  258,  258,  258,  259,  259,
+      259,  259,  259,  259,  259,  266,  266,  266,  278,  278,
+      278,  287,  287,  287,  291,  291,  291,  300,  300,  300,
+      341,  341,  341,  382,  382,  382,  393,  393,  393,  394,
+      394,  394,  395,  395,  395,  510,  382,  382,  446,  446,
+      446,  489,  489,  489,  763,  510,  526,  526,  526,  762,
+      760,  446,  446,  758,  489,  489,  560,  560,  607,  526,
 
-      521,  578,  578,  646,  750,  646,  602,  555,  603,  749,
-      603,  603,  747,  746,  578,  782,  782,  782,  782,  783,
-      783,  784,  784,  785,  743,  785,  785,  742,  741,  740,
-      739,  738,  737,  736,  733,  732,  731,  730,  729,  728,
-      727,  726,  723,  720,  719,  718,  717,  716,  714,  713,
-      712,  711,  709,  707,  704,  703,  702,  701,  699,  698,
-      697,  696,  695,  694,  693,  692,  691,  690,  689,  688,
-      687,  686,  685,  684,  683,  682,  681,  679,  678,  677,
-      676,  675,  674,  673,  672,  671,  670,  668,  667,  666,
-      665,  664,  663,  662,  661,  660,  659,  658,  657,  655,
+      526,  757,  526,  583,  583,  651,  755,  651,  607,  560,
+      608,  754,  608,  608,  752,  751,  583,  787,  787,  787,
+      787,  788,  788,  789,  789,  790,  748,  790,  790,  747,
+      746,  745,  744,  743,  742,  741,  738,  737,  736,  735,
+      734,  733,  732,  731,  728,  725,  724,  723,  722,  721,
+      719,  718,  717,  716,  714,  712,  709,  708,  707,  706,
+      704,  703,  702,  701,  700,  699,  698,  697,  696,  695,
+      694,  693,  692,  691,  690,  689,  688,  687,  686,  684,
+      683,  682,  681,  680,  679,  678,  677,  676,  675,  673,
+      672,  671,  670,  669,  668,  667,  666,  665,  664,  663,
 
-      654,  653,  652,  651,  650,  649,  647,  645,  643,  642,
-      641,  639,  638,  637,  636,  635,  634,  633,  632,  631,
-      630,  629,  627,  626,  625,  624,  623,  622,  620,  619,
-      618,  617,  615,  614,  613,  612,  611,  610,  609,  608,
-      607,  606,  605,  604,  599,  597,  596,  595,  591,  590,
-      589,  588,  587,  586,  585,  584,  583,  581,  580,  576,
-      575,  573,  572,  570,  569,  568,  567,  566,  565,  564,
-      560,  559,  558,  556,  554,  553,  552,  551,  550,  549,
-      548,  547,  546,  545,  543,  542,  537,  536,  535,  534,
-      532,  531,  529,  528,  527,  526,  525,  523,  522,  520,
+      662,  660,  659,  658,  657,  656,  655,  654,  652,  650,
+      648,  647,  646,  644,  643,  642,  641,  640,  639,  638,
+      637,  636,  635,  634,  632,  631,  630,  629,  628,  627,
+      625,  624,  623,  622,  620,  619,  618,  617,  616,  615,
+      614,  613,  612,  611,  610,  609,  604,  602,  601,  600,
+      596,  595,  594,  593,  592,  591,  590,  589,  588,  586,
+      585,  581,  580,  578,  577,  575,  574,  573,  572,  571,
+      570,  569,  565,  564,  563,  561,  559,  558,  557,  556,
+      555,  554,  553,  552,  551,  550,  548,  547,  542,  541,
+      540,  539,  537,  536,  534,  533,  532,  531,  530,  528,
 
-      519,  518,  517,  516,  515,  514,  513,  511,  510,  509,
-      508,  507,  503,  502,  501,  500,  499,  498,  495,  494,
-      493,  492,  491,  490,  489,  488,  487,  486,  485,  483,
-      482,  479,  474,  472,  471,  470,  468,  467,  464,  463,
-      462,  461,  451,  450,  449,  447,  446,  445,  444,  443,
-      440,  438,  437,  436,  434,  433,  432,  431,  429,  427,
-      426,  421,  420,  418,  417,  416,  415,  414,  413,  412,
-      411,  410,  409,  408,  406,  405,  404,  403,  402,  401,
-      400,  398,  397,  396,  395,  394,  393,  392,  385,  384,
-      383,  380,  378,  368,  366,  362,  361,  360,  359,  357,
+      527,  525,  524,  523,  522,  521,  520,  519,  518,  516,
+      515,  514,  513,  512,  508,  507,  506,  505,  504,  503,
+      500,  499,  498,  497,  496,  495,  494,  493,  492,  491,
+      490,  488,  487,  484,  479,  477,  476,  475,  473,  472,
+      469,  468,  467,  466,  455,  454,  453,  451,  450,  449,
+      448,  447,  444,  442,  441,  440,  438,  437,  436,  435,
+      433,  431,  430,  425,  424,  422,  421,  420,  419,  418,
+      417,  416,  415,  414,  413,  412,  410,  409,  408,  407,
+      406,  405,  404,  402,  401,  400,  399,  398,  397,  396,
+      392,  388,  387,  386,  383,  381,  371,  369,  365,  364,
 
-      356,  354,  349,  348,  347,  346,  345,  344,  339,  337,
-      336,  335,  334,  333,  331,  330,  327,  326,  325,  324,
-      323,  322,  321,  320,  319,  318,  317,  316,  315,  314,
-      313,  312,  311,  310,  309,  308,  307,  306,  305,  304,
-      303,  302,  301,  297,  296,  295,  294,  293,  292,  291,
-      290,  288,  284,  282,  281,  280,  279,  275,  274,  273,
-      272,  271,  270,  269,  268,  267,  263,  261,  260,  259,
-      253,  252,  251,  250,  248,  247,  246,  245,  244,  242,
-      241,  240,  239,  238,  237,  236,  235,  234,  233,  232,
-      231,  230,  229,  228,  227,  225,  224,  223,  222,  221,
+      363,  362,  360,  359,  357,  352,  351,  350,  349,  348,
+      347,  342,  340,  339,  338,  337,  336,  334,  333,  330,
+      329,  328,  327,  326,  325,  324,  323,  322,  321,  320,
+      319,  318,  317,  316,  315,  314,  313,  312,  311,  310,
+      309,  308,  307,  306,  305,  304,  301,  299,  298,  297,
+      296,  295,  294,  293,  292,  290,  286,  284,  283,  282,
+      281,  277,  276,  275,  274,  273,  272,  271,  270,  269,
+      265,  263,  262,  261,  255,  254,  253,  252,  250,  249,
+      248,  247,  246,  244,  243,  242,  241,  240,  239,  238,
+      237,  236,  235,  234,  233,  232,  231,  230,  229,  227,
 
-      220,  219,  218,  217,  216,  215,  213,  212,  211,  210,
-      209,  208,  207,  206,  205,  204,  203,  202,  201,  200,
-      199,  198,  196,  195,  194,  193,  192,  191,  190,  189,
-      188,  187,  186,  185,  183,  182,  181,  180,  178,  177,
-      176,  175,  174,  172,  157,  156,  154,  153,  152,  148,
-      147,  146,  145,  144,  141,  140,  139,  138,  136,  135,
-      133,  131,  130,  129,  127,  126,  124,  123,  121,  120,
-      119,  118,  117,  116,  113,  112,  111,  110,  109,  108,
-      107,  106,  104,  103,  102,  101,  100,   99,   97,   96,
-       92,   88,   60,   48,   46,   43,   40,   27,   24,   16,
+      226,  225,  224,  223,  222,  221,  220,  219,  218,  217,
+      215,  214,  213,  212,  211,  210,  209,  208,  207,  206,
+      205,  204,  203,  202,  201,  200,  199,  197,  196,  195,
+      194,  193,  192,  191,  190,  189,  188,  187,  186,  184,
+      183,  182,  181,  179,  178,  177,  176,  175,  173,  158,
+      157,  155,  154,  153,  149,  148,  147,  146,  145,  142,
+      141,  140,  139,  137,  136,  134,  132,  131,  130,  128,
+      127,  126,  124,  123,  121,  120,  119,  118,  117,  116,
+      113,  112,  111,  110,  109,  108,  107,  106,  104,  103,
+      102,  101,  100,   99,   97,   96,   92,   88,   60,   48,
 
-       11,    7,  781,  781,  781,  781,  781,  781,  781,  781,
-      781,  781,  781,  781,  781,  781,  781,  781,  781,  781,
-      781,  781,  781,  781,  781,  781,  781,  781,  781,  781,
-      781,  781,  781,  781,  781,  781,  781,  781,  781,  781,
-      781,  781,  781,  781,  781,  781,  781,  781,  781,  781,
-      781,  781,  781,  781,  781,  781,  781,  781,  781,  781,
-      781,  781,  781,  781,  781,  781,  781,  781,  781,  781,
-      781,  781,  781,  781,  781
+       46,   40,   27,   24,   16,   11,    7,  786,  786,  786,
+      786,  786,  786,  786,  786,  786,  786,  786,  786,  786,
+      786,  786,  786,  786,  786,  786,  786,  786,  786,  786,
+      786,  786,  786,  786,  786,  786,  786,  786,  786,  786,
+      786,  786,  786,  786,  786,  786,  786,  786,  786,  786,
+      786,  786,  786,  786,  786,  786,  786,  786,  786,  786,
+      786,  786,  786,  786,  786,  786,  786,  786,  786,  786,
+      786,  786,  786,  786,  786,  786,  786,  786,  786,  786
     } ;
 
 /* Table of booleans, true if rule could match eol. */
-static yyconst flex_int32_t yy_rule_can_match_eol[231] =
+static yyconst flex_int32_t yy_rule_can_match_eol[232] =
     {   0,
 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
@@ -964,7 +968,7 @@
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,     };
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,     };
 
 /* The intent behind this definition is that it'll catch
  * any uses of REJECT which flex missed.
@@ -1295,13 +1299,13 @@
 			while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 				{
 				yy_current_state = (int) yy_def[yy_current_state];
-				if ( yy_current_state >= 782 )
+				if ( yy_current_state >= 787 )
 					yy_c = yy_meta[(unsigned int) yy_c];
 				}
 			yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
 			++yy_cp;
 			}
-		while ( yy_current_state != 781 );
+		while ( yy_current_state != 786 );
 		yy_cp = yyg->yy_last_accepting_cpos;
 		yy_current_state = yyg->yy_last_accepting_state;
 
@@ -1616,8 +1620,11 @@
 YY_RULE_SETUP
 { context->lexAfterType = true; return(STRUCT); }
 	YY_BREAK
-/* Reserved keywords for GLSL ES 3.00 that are not reserved for GLSL ES 1.00 */
 case 72:
+YY_RULE_SETUP
+{ return ES2_ident_ES3_keyword(context, LAYOUT); }
+	YY_BREAK
+/* Reserved keywords for GLSL ES 3.00 that are not reserved for GLSL ES 1.00 */
 case 73:
 case 74:
 case 75:
@@ -1673,6 +1680,7 @@
 case 125:
 case 126:
 case 127:
+case 128:
 YY_RULE_SETUP
 { 
     if (context->shaderVersion < 300) {
@@ -1682,9 +1690,20 @@
 	return reserved_word(yyscanner);
 }
 	YY_BREAK
-/* Reserved keywords */
-case 128:
+/* Reserved keywords in GLSL ES 1.00 that are not reserved in GLSL ES 3.00 */
 case 129:
+YY_RULE_SETUP
+{
+    if (context->shaderVersion >= 300)
+    {
+        yylval->lex.string = NewPoolTString(yytext);
+        return check_type(yyscanner);
+    }
+
+    return reserved_word(yyscanner);
+}
+	YY_BREAK
+/* Reserved keywords */
 case 130:
 case 131:
 case 132:
@@ -1725,35 +1744,32 @@
 case 167:
 case 168:
 case 169:
+case 170:
 YY_RULE_SETUP
 { return reserved_word(yyscanner); }
 	YY_BREAK
-case 170:
+case 171:
 YY_RULE_SETUP
 {
    yylval->lex.string = NewPoolTString(yytext); 
    return check_type(yyscanner);
 }
 	YY_BREAK
-case 171:
-YY_RULE_SETUP
-{ yylval->lex.i = static_cast<int>(strtol(yytext, 0, 0)); return(INTCONSTANT); }
-	YY_BREAK
 case 172:
 YY_RULE_SETUP
 { yylval->lex.i = static_cast<int>(strtol(yytext, 0, 0)); return(INTCONSTANT); }
 	YY_BREAK
 case 173:
 YY_RULE_SETUP
-{ context->error(yylineno, "Invalid Octal number.", yytext); context->recover(); return 0;}
+{ yylval->lex.i = static_cast<int>(strtol(yytext, 0, 0)); return(INTCONSTANT); }
 	YY_BREAK
 case 174:
 YY_RULE_SETUP
-{ yylval->lex.i = static_cast<int>(strtol(yytext, 0, 0)); return(INTCONSTANT); }
+{ context->error(yylineno, "Invalid Octal number.", yytext); context->recover(); return 0;}
 	YY_BREAK
 case 175:
 YY_RULE_SETUP
-{ return uint_constant(context); }
+{ yylval->lex.i = static_cast<int>(strtol(yytext, 0, 0)); return(INTCONSTANT); }
 	YY_BREAK
 case 176:
 YY_RULE_SETUP
@@ -1765,7 +1781,7 @@
 	YY_BREAK
 case 178:
 YY_RULE_SETUP
-{ yylval->lex.f = static_cast<float>(atof_dot(yytext)); return(FLOATCONSTANT); }
+{ return uint_constant(context); }
 	YY_BREAK
 case 179:
 YY_RULE_SETUP
@@ -1777,198 +1793,202 @@
 	YY_BREAK
 case 181:
 YY_RULE_SETUP
-{  return(ADD_ASSIGN); }
+{ yylval->lex.f = static_cast<float>(atof_dot(yytext)); return(FLOATCONSTANT); }
 	YY_BREAK
 case 182:
 YY_RULE_SETUP
-{  return(SUB_ASSIGN); }
+{  return(ADD_ASSIGN); }
 	YY_BREAK
 case 183:
 YY_RULE_SETUP
-{  return(MUL_ASSIGN); }
+{  return(SUB_ASSIGN); }
 	YY_BREAK
 case 184:
 YY_RULE_SETUP
-{  return(DIV_ASSIGN); }
+{  return(MUL_ASSIGN); }
 	YY_BREAK
 case 185:
 YY_RULE_SETUP
-{  return(MOD_ASSIGN); }
+{  return(DIV_ASSIGN); }
 	YY_BREAK
 case 186:
 YY_RULE_SETUP
-{  return(LEFT_ASSIGN); }
+{  return(MOD_ASSIGN); }
 	YY_BREAK
 case 187:
 YY_RULE_SETUP
-{  return(RIGHT_ASSIGN); }
+{  return(LEFT_ASSIGN); }
 	YY_BREAK
 case 188:
 YY_RULE_SETUP
-{  return(AND_ASSIGN); }
+{  return(RIGHT_ASSIGN); }
 	YY_BREAK
 case 189:
 YY_RULE_SETUP
-{  return(XOR_ASSIGN); }
+{  return(AND_ASSIGN); }
 	YY_BREAK
 case 190:
 YY_RULE_SETUP
-{  return(OR_ASSIGN); }
+{  return(XOR_ASSIGN); }
 	YY_BREAK
 case 191:
 YY_RULE_SETUP
-{  return(INC_OP); }
+{  return(OR_ASSIGN); }
 	YY_BREAK
 case 192:
 YY_RULE_SETUP
-{  return(DEC_OP); }
+{  return(INC_OP); }
 	YY_BREAK
 case 193:
 YY_RULE_SETUP
-{  return(AND_OP); }
+{  return(DEC_OP); }
 	YY_BREAK
 case 194:
 YY_RULE_SETUP
-{  return(OR_OP); }
+{  return(AND_OP); }
 	YY_BREAK
 case 195:
 YY_RULE_SETUP
-{  return(XOR_OP); }
+{  return(OR_OP); }
 	YY_BREAK
 case 196:
 YY_RULE_SETUP
-{  return(LE_OP); }
+{  return(XOR_OP); }
 	YY_BREAK
 case 197:
 YY_RULE_SETUP
-{  return(GE_OP); }
+{  return(LE_OP); }
 	YY_BREAK
 case 198:
 YY_RULE_SETUP
-{  return(EQ_OP); }
+{  return(GE_OP); }
 	YY_BREAK
 case 199:
 YY_RULE_SETUP
-{  return(NE_OP); }
+{  return(EQ_OP); }
 	YY_BREAK
 case 200:
 YY_RULE_SETUP
-{  return(LEFT_OP); }
+{  return(NE_OP); }
 	YY_BREAK
 case 201:
 YY_RULE_SETUP
-{  return(RIGHT_OP); }
+{  return(LEFT_OP); }
 	YY_BREAK
 case 202:
 YY_RULE_SETUP
-{ context->lexAfterType = false; return(SEMICOLON); }
+{  return(RIGHT_OP); }
 	YY_BREAK
 case 203:
 YY_RULE_SETUP
-{ context->lexAfterType = false; return(LEFT_BRACE); }
+{ context->lexAfterType = false; return(SEMICOLON); }
 	YY_BREAK
 case 204:
 YY_RULE_SETUP
-{ return(RIGHT_BRACE); }
+{ context->lexAfterType = false; return(LEFT_BRACE); }
 	YY_BREAK
 case 205:
 YY_RULE_SETUP
-{ if (context->inTypeParen) context->lexAfterType = false; return(COMMA); }
+{ return(RIGHT_BRACE); }
 	YY_BREAK
 case 206:
 YY_RULE_SETUP
-{ return(COLON); }
+{ if (context->inTypeParen) context->lexAfterType = false; return(COMMA); }
 	YY_BREAK
 case 207:
 YY_RULE_SETUP
-{ context->lexAfterType = false; return(EQUAL); }
+{ return(COLON); }
 	YY_BREAK
 case 208:
 YY_RULE_SETUP
-{ context->lexAfterType = false; context->inTypeParen = true; return(LEFT_PAREN); }
+{ context->lexAfterType = false; return(EQUAL); }
 	YY_BREAK
 case 209:
 YY_RULE_SETUP
-{ context->inTypeParen = false; return(RIGHT_PAREN); }
+{ context->lexAfterType = false; context->inTypeParen = true; return(LEFT_PAREN); }
 	YY_BREAK
 case 210:
 YY_RULE_SETUP
-{ return(LEFT_BRACKET); }
+{ context->inTypeParen = false; return(RIGHT_PAREN); }
 	YY_BREAK
 case 211:
 YY_RULE_SETUP
-{ return(RIGHT_BRACKET); }
+{ return(LEFT_BRACKET); }
 	YY_BREAK
 case 212:
 YY_RULE_SETUP
-{ BEGIN(FIELDS);  return(DOT); }
+{ return(RIGHT_BRACKET); }
 	YY_BREAK
 case 213:
 YY_RULE_SETUP
-{ return(BANG); }
+{ BEGIN(FIELDS);  return(DOT); }
 	YY_BREAK
 case 214:
 YY_RULE_SETUP
-{ return(DASH); }
+{ return(BANG); }
 	YY_BREAK
 case 215:
 YY_RULE_SETUP
-{ return(TILDE); }
+{ return(DASH); }
 	YY_BREAK
 case 216:
 YY_RULE_SETUP
-{ return(PLUS); }
+{ return(TILDE); }
 	YY_BREAK
 case 217:
 YY_RULE_SETUP
-{ return(STAR); }
+{ return(PLUS); }
 	YY_BREAK
 case 218:
 YY_RULE_SETUP
-{ return(SLASH); }
+{ return(STAR); }
 	YY_BREAK
 case 219:
 YY_RULE_SETUP
-{ return(PERCENT); }
+{ return(SLASH); }
 	YY_BREAK
 case 220:
 YY_RULE_SETUP
-{ return(LEFT_ANGLE); }
+{ return(PERCENT); }
 	YY_BREAK
 case 221:
 YY_RULE_SETUP
-{ return(RIGHT_ANGLE); }
+{ return(LEFT_ANGLE); }
 	YY_BREAK
 case 222:
 YY_RULE_SETUP
-{ return(VERTICAL_BAR); }
+{ return(RIGHT_ANGLE); }
 	YY_BREAK
 case 223:
 YY_RULE_SETUP
-{ return(CARET); }
+{ return(VERTICAL_BAR); }
 	YY_BREAK
 case 224:
 YY_RULE_SETUP
-{ return(AMPERSAND); }
+{ return(CARET); }
 	YY_BREAK
 case 225:
 YY_RULE_SETUP
-{ return(QUESTION); }
+{ return(AMPERSAND); }
 	YY_BREAK
 case 226:
 YY_RULE_SETUP
+{ return(QUESTION); }
+	YY_BREAK
+case 227:
+YY_RULE_SETUP
 { 
     BEGIN(INITIAL);
     yylval->lex.string = NewPoolTString(yytext); 
     return FIELD_SELECTION;
 }
 	YY_BREAK
-case 227:
+case 228:
 YY_RULE_SETUP
 {}
 	YY_BREAK
-case 228:
-/* rule 228 can match eol */
+case 229:
+/* rule 229 can match eol */
 YY_RULE_SETUP
 {  }
 	YY_BREAK
@@ -1977,11 +1997,11 @@
 case YY_STATE_EOF(FIELDS):
 { context->AfterEOF = true; yyterminate(); }
 	YY_BREAK
-case 229:
+case 230:
 YY_RULE_SETUP
 { context->warning(yylineno, "Unknown char", yytext, ""); return 0; }
 	YY_BREAK
-case 230:
+case 231:
 YY_RULE_SETUP
 ECHO;
 	YY_BREAK
@@ -2277,7 +2297,7 @@
 		while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 			{
 			yy_current_state = (int) yy_def[yy_current_state];
-			if ( yy_current_state >= 782 )
+			if ( yy_current_state >= 787 )
 				yy_c = yy_meta[(unsigned int) yy_c];
 			}
 		yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
@@ -2306,11 +2326,11 @@
 	while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 		{
 		yy_current_state = (int) yy_def[yy_current_state];
-		if ( yy_current_state >= 782 )
+		if ( yy_current_state >= 787 )
 			yy_c = yy_meta[(unsigned int) yy_c];
 		}
 	yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
-	yy_is_jam = (yy_current_state == 781);
+	yy_is_jam = (yy_current_state == 786);
 
 	return yy_is_jam ? 0 : yy_current_state;
 }
diff --git a/src/compiler/glslang_tab.cpp b/src/compiler/glslang_tab.cpp
index 7c8d706..5cf6e21 100644
--- a/src/compiler/glslang_tab.cpp
+++ b/src/compiler/glslang_tab.cpp
@@ -191,58 +191,59 @@
      SAMPLER3D = 316,
      SAMPLER3DRECT = 317,
      SAMPLER2DSHADOW = 318,
-     IDENTIFIER = 319,
-     TYPE_NAME = 320,
-     FLOATCONSTANT = 321,
-     INTCONSTANT = 322,
-     UINTCONSTANT = 323,
-     BOOLCONSTANT = 324,
-     FIELD_SELECTION = 325,
-     LEFT_OP = 326,
-     RIGHT_OP = 327,
-     INC_OP = 328,
-     DEC_OP = 329,
-     LE_OP = 330,
-     GE_OP = 331,
-     EQ_OP = 332,
-     NE_OP = 333,
-     AND_OP = 334,
-     OR_OP = 335,
-     XOR_OP = 336,
-     MUL_ASSIGN = 337,
-     DIV_ASSIGN = 338,
-     ADD_ASSIGN = 339,
-     MOD_ASSIGN = 340,
-     LEFT_ASSIGN = 341,
-     RIGHT_ASSIGN = 342,
-     AND_ASSIGN = 343,
-     XOR_ASSIGN = 344,
-     OR_ASSIGN = 345,
-     SUB_ASSIGN = 346,
-     LEFT_PAREN = 347,
-     RIGHT_PAREN = 348,
-     LEFT_BRACKET = 349,
-     RIGHT_BRACKET = 350,
-     LEFT_BRACE = 351,
-     RIGHT_BRACE = 352,
-     DOT = 353,
-     COMMA = 354,
-     COLON = 355,
-     EQUAL = 356,
-     SEMICOLON = 357,
-     BANG = 358,
-     DASH = 359,
-     TILDE = 360,
-     PLUS = 361,
-     STAR = 362,
-     SLASH = 363,
-     PERCENT = 364,
-     LEFT_ANGLE = 365,
-     RIGHT_ANGLE = 366,
-     VERTICAL_BAR = 367,
-     CARET = 368,
-     AMPERSAND = 369,
-     QUESTION = 370
+     LAYOUT = 319,
+     IDENTIFIER = 320,
+     TYPE_NAME = 321,
+     FLOATCONSTANT = 322,
+     INTCONSTANT = 323,
+     UINTCONSTANT = 324,
+     BOOLCONSTANT = 325,
+     FIELD_SELECTION = 326,
+     LEFT_OP = 327,
+     RIGHT_OP = 328,
+     INC_OP = 329,
+     DEC_OP = 330,
+     LE_OP = 331,
+     GE_OP = 332,
+     EQ_OP = 333,
+     NE_OP = 334,
+     AND_OP = 335,
+     OR_OP = 336,
+     XOR_OP = 337,
+     MUL_ASSIGN = 338,
+     DIV_ASSIGN = 339,
+     ADD_ASSIGN = 340,
+     MOD_ASSIGN = 341,
+     LEFT_ASSIGN = 342,
+     RIGHT_ASSIGN = 343,
+     AND_ASSIGN = 344,
+     XOR_ASSIGN = 345,
+     OR_ASSIGN = 346,
+     SUB_ASSIGN = 347,
+     LEFT_PAREN = 348,
+     RIGHT_PAREN = 349,
+     LEFT_BRACKET = 350,
+     RIGHT_BRACKET = 351,
+     LEFT_BRACE = 352,
+     RIGHT_BRACE = 353,
+     DOT = 354,
+     COMMA = 355,
+     COLON = 356,
+     EQUAL = 357,
+     SEMICOLON = 358,
+     BANG = 359,
+     DASH = 360,
+     TILDE = 361,
+     PLUS = 362,
+     STAR = 363,
+     SLASH = 364,
+     PERCENT = 365,
+     LEFT_ANGLE = 366,
+     RIGHT_ANGLE = 367,
+     VERTICAL_BAR = 368,
+     CARET = 369,
+     AMPERSAND = 370,
+     QUESTION = 371
    };
 #endif
 
@@ -275,6 +276,8 @@
         union {
             TPublicType type;
             TPrecision precision;
+            TLayoutQualifierId layoutQualifierId;
+            TLayoutQualifier* layoutQualifier;
             TQualifier qualifier;
             TFunction* function;
             TParameter param;
@@ -568,22 +571,22 @@
 #endif /* !YYCOPY_NEEDED */
 
 /* YYFINAL -- State number of the termination state.  */
-#define YYFINAL  93
+#define YYFINAL  97
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   2065
+#define YYLAST   2022
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  116
+#define YYNTOKENS  117
 /* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  87
+#define YYNNTS  90
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  227
+#define YYNRULES  235
 /* YYNRULES -- Number of states.  */
-#define YYNSTATES  343
+#define YYNSTATES  356
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
-#define YYMAXUTOK   370
+#define YYMAXUTOK   371
 
 #define YYTRANSLATE(YYX)						\
   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
@@ -628,7 +631,7 @@
       85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
       95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
      105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
-     115
+     115,   116
 };
 
 #if YYDEBUG
@@ -648,115 +651,120 @@
      273,   276,   277,   279,   281,   283,   285,   287,   291,   297,
      304,   310,   312,   315,   320,   326,   331,   334,   336,   339,
      341,   343,   345,   347,   349,   352,   354,   357,   359,   361,
-     363,   365,   368,   371,   373,   375,   378,   380,   382,   384,
-     386,   391,   393,   395,   397,   399,   401,   403,   405,   407,
-     409,   411,   413,   415,   417,   419,   421,   423,   425,   427,
-     429,   431,   433,   435,   437,   439,   441,   443,   445,   447,
-     449,   451,   453,   455,   456,   463,   464,   470,   472,   475,
-     479,   484,   486,   490,   492,   497,   499,   501,   503,   505,
-     507,   509,   511,   513,   515,   518,   519,   520,   526,   528,
-     530,   531,   534,   535,   538,   541,   545,   547,   550,   552,
-     555,   561,   565,   567,   569,   574,   575,   582,   583,   592,
-     593,   601,   603,   605,   607,   608,   611,   615,   618,   621,
-     624,   628,   631,   633,   636,   638,   640,   641
+     364,   366,   368,   370,   373,   376,   378,   380,   383,   385,
+     387,   389,   394,   396,   400,   402,   406,   410,   412,   417,
+     419,   421,   423,   425,   427,   429,   431,   433,   435,   437,
+     439,   441,   443,   445,   447,   449,   451,   453,   455,   457,
+     459,   461,   463,   465,   467,   469,   471,   473,   475,   477,
+     479,   481,   482,   489,   490,   496,   498,   501,   505,   510,
+     512,   516,   518,   523,   525,   527,   529,   531,   533,   535,
+     537,   539,   541,   544,   545,   546,   552,   554,   556,   557,
+     560,   561,   564,   567,   571,   573,   576,   578,   581,   587,
+     591,   593,   595,   600,   601,   608,   609,   618,   619,   627,
+     629,   631,   633,   634,   637,   641,   644,   647,   650,   654,
+     657,   659,   662,   664,   666,   667
 };
 
 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
 static const yytype_int16 yyrhs[] =
 {
-     199,     0,    -1,    64,    -1,   117,    -1,    67,    -1,    68,
-      -1,    66,    -1,    69,    -1,    92,   144,    93,    -1,   118,
-      -1,   119,    94,   120,    95,    -1,   121,    -1,   119,    98,
-      70,    -1,   119,    73,    -1,   119,    74,    -1,   144,    -1,
-     122,    -1,   123,    -1,   119,    98,   123,    -1,   125,    93,
-      -1,   124,    93,    -1,   126,    55,    -1,   126,    -1,   126,
-     142,    -1,   125,    99,   142,    -1,   127,    92,    -1,   166,
-      -1,    64,    -1,    70,    -1,   119,    -1,    73,   128,    -1,
-      74,   128,    -1,   129,   128,    -1,   106,    -1,   104,    -1,
-     103,    -1,   128,    -1,   130,   107,   128,    -1,   130,   108,
-     128,    -1,   130,    -1,   131,   106,   130,    -1,   131,   104,
-     130,    -1,   131,    -1,   132,    -1,   133,   110,   132,    -1,
-     133,   111,   132,    -1,   133,    75,   132,    -1,   133,    76,
-     132,    -1,   133,    -1,   134,    77,   133,    -1,   134,    78,
-     133,    -1,   134,    -1,   135,    -1,   136,    -1,   137,    -1,
-     138,    79,   137,    -1,   138,    -1,   139,    81,   138,    -1,
-     139,    -1,   140,    80,   139,    -1,   140,    -1,   140,   115,
-     144,   100,   142,    -1,   141,    -1,   128,   143,   142,    -1,
-     101,    -1,    82,    -1,    83,    -1,    84,    -1,    91,    -1,
-     142,    -1,   144,    99,   142,    -1,   141,    -1,    64,    96,
-      -1,   148,   102,    -1,   156,   102,    -1,     7,   164,   165,
-     102,    -1,   161,   146,   170,    97,   102,    -1,   161,   146,
-     170,    97,    64,   102,    -1,   161,   146,   170,    97,    64,
-      94,   145,    95,   102,    -1,   149,    93,    -1,   151,    -1,
-     150,    -1,   151,   153,    -1,   150,    99,   153,    -1,   158,
-      64,    92,    -1,   163,    64,    -1,   163,    64,    94,   145,
-      95,    -1,   160,   154,   152,    -1,   154,   152,    -1,   160,
-     154,   155,    -1,   154,   155,    -1,    -1,    40,    -1,    41,
-      -1,    42,    -1,   163,    -1,   157,    -1,   156,    99,    64,
-      -1,   156,    99,    64,    94,    95,    -1,   156,    99,    64,
-      94,   145,    95,    -1,   156,    99,    64,   101,   174,    -1,
-     158,    -1,   158,    64,    -1,   158,    64,    94,    95,    -1,
-     158,    64,    94,   145,    95,    -1,   158,    64,   101,   174,
-      -1,     3,    64,    -1,   163,    -1,   161,   163,    -1,    53,
+     203,     0,    -1,    65,    -1,   118,    -1,    68,    -1,    69,
+      -1,    67,    -1,    70,    -1,    93,   145,    94,    -1,   119,
+      -1,   120,    95,   121,    96,    -1,   122,    -1,   120,    99,
+      71,    -1,   120,    74,    -1,   120,    75,    -1,   145,    -1,
+     123,    -1,   124,    -1,   120,    99,   124,    -1,   126,    94,
+      -1,   125,    94,    -1,   127,    55,    -1,   127,    -1,   127,
+     143,    -1,   126,   100,   143,    -1,   128,    93,    -1,   170,
+      -1,    65,    -1,    71,    -1,   120,    -1,    74,   129,    -1,
+      75,   129,    -1,   130,   129,    -1,   107,    -1,   105,    -1,
+     104,    -1,   129,    -1,   131,   108,   129,    -1,   131,   109,
+     129,    -1,   131,    -1,   132,   107,   131,    -1,   132,   105,
+     131,    -1,   132,    -1,   133,    -1,   134,   111,   133,    -1,
+     134,   112,   133,    -1,   134,    76,   133,    -1,   134,    77,
+     133,    -1,   134,    -1,   135,    78,   134,    -1,   135,    79,
+     134,    -1,   135,    -1,   136,    -1,   137,    -1,   138,    -1,
+     139,    80,   138,    -1,   139,    -1,   140,    82,   139,    -1,
+     140,    -1,   141,    81,   140,    -1,   141,    -1,   141,   116,
+     145,   101,   143,    -1,   142,    -1,   129,   144,   143,    -1,
+     102,    -1,    83,    -1,    84,    -1,    85,    -1,    92,    -1,
+     143,    -1,   145,   100,   143,    -1,   142,    -1,    65,    97,
+      -1,   149,   103,    -1,   157,   103,    -1,     7,   165,   169,
+     103,    -1,   162,   147,   174,    98,   103,    -1,   162,   147,
+     174,    98,    65,   103,    -1,   162,   147,   174,    98,    65,
+      95,   146,    96,   103,    -1,   150,    94,    -1,   152,    -1,
+     151,    -1,   152,   154,    -1,   151,   100,   154,    -1,   159,
+      65,    93,    -1,   164,    65,    -1,   164,    65,    95,   146,
+      96,    -1,   161,   155,   153,    -1,   155,   153,    -1,   161,
+     155,   156,    -1,   155,   156,    -1,    -1,    40,    -1,    41,
+      -1,    42,    -1,   164,    -1,   158,    -1,   157,   100,    65,
+      -1,   157,   100,    65,    95,    96,    -1,   157,   100,    65,
+      95,   146,    96,    -1,   157,   100,    65,   102,   178,    -1,
+     159,    -1,   159,    65,    -1,   159,    65,    95,    96,    -1,
+     159,    65,    95,   146,    96,    -1,   159,    65,   102,   178,
+      -1,     3,    65,    -1,   164,    -1,   162,   164,    -1,    53,
       -1,    52,    -1,     9,    -1,     8,    -1,    44,    -1,     3,
-      44,    -1,   162,    -1,   159,   162,    -1,   159,    -1,     9,
-      -1,    40,    -1,    41,    -1,    51,    40,    -1,    51,    41,
-      -1,    43,    -1,   165,    -1,   164,   165,    -1,     4,    -1,
-       5,    -1,     6,    -1,   166,    -1,   166,    94,   145,    95,
-      -1,    55,    -1,    11,    -1,    12,    -1,    13,    -1,    10,
-      -1,    31,    -1,    32,    -1,    33,    -1,    25,    -1,    26,
-      -1,    27,    -1,    28,    -1,    29,    -1,    30,    -1,    34,
-      -1,    35,    -1,    36,    -1,    37,    -1,    38,    -1,    39,
-      -1,    45,    -1,    46,    -1,    47,    -1,    48,    -1,    49,
-      -1,    50,    -1,    57,    -1,    58,    -1,    59,    -1,    60,
-      -1,   167,    -1,    65,    -1,    -1,    54,    64,    96,   168,
-     170,    97,    -1,    -1,    54,    96,   169,   170,    97,    -1,
-     171,    -1,   170,   171,    -1,   163,   172,   102,    -1,   161,
-     163,   172,   102,    -1,   173,    -1,   172,    99,   173,    -1,
-      64,    -1,    64,    94,   145,    95,    -1,   142,    -1,   147,
-      -1,   178,    -1,   177,    -1,   175,    -1,   187,    -1,   188,
-      -1,   191,    -1,   198,    -1,    96,    97,    -1,    -1,    -1,
-      96,   179,   186,   180,    97,    -1,   185,    -1,   177,    -1,
-      -1,   183,   185,    -1,    -1,   184,   177,    -1,    96,    97,
-      -1,    96,   186,    97,    -1,   176,    -1,   186,   176,    -1,
-     102,    -1,   144,   102,    -1,    19,    92,   144,    93,   189,
-      -1,   182,    17,   182,    -1,   182,    -1,   144,    -1,   158,
-      64,   101,   174,    -1,    -1,    56,    92,   192,   190,    93,
-     181,    -1,    -1,    16,   193,   182,    56,    92,   144,    93,
-     102,    -1,    -1,    18,    92,   194,   195,   197,    93,   181,
-      -1,   187,    -1,   175,    -1,   190,    -1,    -1,   196,   102,
-      -1,   196,   102,   144,    -1,    15,   102,    -1,    14,   102,
-      -1,    21,   102,    -1,    21,   144,   102,    -1,    20,   102,
-      -1,   200,    -1,   199,   200,    -1,   201,    -1,   147,    -1,
-      -1,   148,   202,   185,    -1
+      44,    -1,   163,    -1,   160,   163,    -1,   160,    -1,   166,
+      -1,   166,   163,    -1,     9,    -1,    40,    -1,    41,    -1,
+      51,    40,    -1,    51,    41,    -1,    43,    -1,   169,    -1,
+     165,   169,    -1,     4,    -1,     5,    -1,     6,    -1,    64,
+      93,   167,    94,    -1,   168,    -1,   167,   100,   168,    -1,
+      65,    -1,    65,   102,    68,    -1,    65,   102,    69,    -1,
+     170,    -1,   170,    95,   146,    96,    -1,    55,    -1,    11,
+      -1,    12,    -1,    13,    -1,    10,    -1,    31,    -1,    32,
+      -1,    33,    -1,    25,    -1,    26,    -1,    27,    -1,    28,
+      -1,    29,    -1,    30,    -1,    34,    -1,    35,    -1,    36,
+      -1,    37,    -1,    38,    -1,    39,    -1,    45,    -1,    46,
+      -1,    47,    -1,    48,    -1,    49,    -1,    50,    -1,    57,
+      -1,    58,    -1,    59,    -1,    60,    -1,   171,    -1,    66,
+      -1,    -1,    54,    65,    97,   172,   174,    98,    -1,    -1,
+      54,    97,   173,   174,    98,    -1,   175,    -1,   174,   175,
+      -1,   164,   176,   103,    -1,   162,   164,   176,   103,    -1,
+     177,    -1,   176,   100,   177,    -1,    65,    -1,    65,    95,
+     146,    96,    -1,   143,    -1,   148,    -1,   182,    -1,   181,
+      -1,   179,    -1,   191,    -1,   192,    -1,   195,    -1,   202,
+      -1,    97,    98,    -1,    -1,    -1,    97,   183,   190,   184,
+      98,    -1,   189,    -1,   181,    -1,    -1,   187,   189,    -1,
+      -1,   188,   181,    -1,    97,    98,    -1,    97,   190,    98,
+      -1,   180,    -1,   190,   180,    -1,   103,    -1,   145,   103,
+      -1,    19,    93,   145,    94,   193,    -1,   186,    17,   186,
+      -1,   186,    -1,   145,    -1,   159,    65,   102,   178,    -1,
+      -1,    56,    93,   196,   194,    94,   185,    -1,    -1,    16,
+     197,   186,    56,    93,   145,    94,   103,    -1,    -1,    18,
+      93,   198,   199,   201,    94,   185,    -1,   191,    -1,   179,
+      -1,   194,    -1,    -1,   200,   103,    -1,   200,   103,   145,
+      -1,    15,   103,    -1,    14,   103,    -1,    21,   103,    -1,
+      21,   145,   103,    -1,    20,   103,    -1,   204,    -1,   203,
+     204,    -1,   205,    -1,   148,    -1,    -1,   149,   206,   189,
+      -1
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
 static const yytype_uint16 yyrline[] =
 {
-       0,   188,   188,   223,   226,   231,   236,   241,   246,   252,
-     255,   258,   261,   264,   274,   287,   295,   395,   398,   406,
-     410,   417,   421,   428,   434,   443,   451,   454,   461,   471,
-     474,   484,   494,   515,   516,   517,   522,   523,   532,   544,
-     545,   553,   564,   568,   569,   579,   589,   599,   612,   613,
-     623,   636,   640,   644,   648,   649,   662,   663,   676,   677,
-     690,   691,   708,   709,   722,   723,   724,   725,   726,   730,
-     733,   744,   752,   760,   787,   792,   803,   807,   811,   818,
-     856,   859,   866,   874,   895,   916,   927,   956,   961,   971,
-     976,   986,   989,   992,   995,  1001,  1008,  1011,  1033,  1051,
-    1075,  1098,  1102,  1120,  1128,  1160,  1180,  1269,  1278,  1284,
-    1288,  1295,  1301,  1308,  1317,  1326,  1329,  1365,  1375,  1379,
-    1384,  1389,  1394,  1399,  1408,  1418,  1425,  1428,  1431,  1437,
-    1440,  1455,  1459,  1463,  1467,  1471,  1475,  1480,  1485,  1490,
-    1495,  1500,  1505,  1510,  1515,  1520,  1525,  1530,  1535,  1541,
-    1547,  1553,  1558,  1563,  1568,  1573,  1578,  1583,  1588,  1593,
-    1602,  1611,  1616,  1629,  1629,  1632,  1632,  1638,  1641,  1656,
-    1659,  1667,  1671,  1677,  1685,  1701,  1705,  1709,  1710,  1716,
-    1717,  1718,  1719,  1720,  1724,  1725,  1725,  1725,  1735,  1736,
-    1740,  1740,  1741,  1741,  1746,  1749,  1759,  1762,  1768,  1769,
-    1773,  1781,  1785,  1795,  1800,  1817,  1817,  1822,  1822,  1829,
-    1829,  1837,  1840,  1846,  1849,  1855,  1859,  1866,  1873,  1880,
-    1887,  1898,  1907,  1911,  1918,  1921,  1927,  1927
+       0,   193,   193,   228,   231,   236,   241,   246,   251,   257,
+     260,   263,   266,   269,   279,   292,   300,   400,   403,   411,
+     415,   422,   426,   433,   439,   448,   456,   459,   466,   476,
+     479,   489,   499,   520,   521,   522,   527,   528,   537,   549,
+     550,   558,   569,   573,   574,   584,   594,   604,   617,   618,
+     628,   641,   645,   649,   653,   654,   667,   668,   681,   682,
+     695,   696,   713,   714,   727,   728,   729,   730,   731,   735,
+     738,   749,   757,   765,   792,   797,   808,   812,   816,   823,
+     861,   864,   871,   879,   900,   921,   932,   961,   966,   976,
+     981,   991,   994,   997,  1000,  1006,  1013,  1016,  1038,  1056,
+    1080,  1103,  1107,  1125,  1133,  1165,  1185,  1274,  1283,  1289,
+    1293,  1300,  1306,  1313,  1322,  1331,  1334,  1370,  1377,  1381,
+    1388,  1392,  1397,  1402,  1407,  1412,  1421,  1431,  1438,  1441,
+    1444,  1450,  1457,  1460,  1466,  1469,  1472,  1478,  1481,  1496,
+    1500,  1504,  1508,  1512,  1516,  1521,  1526,  1531,  1536,  1541,
+    1546,  1551,  1556,  1561,  1566,  1571,  1576,  1582,  1588,  1594,
+    1599,  1604,  1609,  1614,  1619,  1624,  1629,  1634,  1643,  1652,
+    1657,  1670,  1670,  1673,  1673,  1679,  1682,  1697,  1700,  1708,
+    1712,  1718,  1726,  1742,  1746,  1750,  1751,  1757,  1758,  1759,
+    1760,  1761,  1765,  1766,  1766,  1766,  1776,  1777,  1781,  1781,
+    1782,  1782,  1787,  1790,  1800,  1803,  1809,  1810,  1814,  1822,
+    1826,  1836,  1841,  1858,  1858,  1863,  1863,  1870,  1870,  1878,
+    1881,  1887,  1890,  1896,  1900,  1907,  1914,  1921,  1928,  1939,
+    1948,  1952,  1959,  1962,  1968,  1968
 };
 #endif
 
@@ -776,7 +784,7 @@
   "MATRIX3x4", "MATRIX4x3", "CENTROID", "FLAT", "SMOOTH", "STRUCT",
   "VOID_TYPE", "WHILE", "SAMPLER2D", "SAMPLERCUBE", "SAMPLER_EXTERNAL_OES",
   "SAMPLER2DRECT", "SAMPLER3D", "SAMPLER3DRECT", "SAMPLER2DSHADOW",
-  "IDENTIFIER", "TYPE_NAME", "FLOATCONSTANT", "INTCONSTANT",
+  "LAYOUT", "IDENTIFIER", "TYPE_NAME", "FLOATCONSTANT", "INTCONSTANT",
   "UINTCONSTANT", "BOOLCONSTANT", "FIELD_SELECTION", "LEFT_OP", "RIGHT_OP",
   "INC_OP", "DEC_OP", "LE_OP", "GE_OP", "EQ_OP", "NE_OP", "AND_OP",
   "OR_OP", "XOR_OP", "MUL_ASSIGN", "DIV_ASSIGN", "ADD_ASSIGN",
@@ -804,9 +812,10 @@
   "parameter_type_specifier", "init_declarator_list", "single_declaration",
   "fully_specified_type", "interpolation_qualifier",
   "parameter_type_qualifier", "type_qualifier", "storage_qualifier",
-  "type_specifier", "precision_qualifier", "type_specifier_no_prec",
-  "type_specifier_nonarray", "struct_specifier", "$@1", "$@2",
-  "struct_declaration_list", "struct_declaration",
+  "type_specifier", "precision_qualifier", "layout_qualifier",
+  "layout_qualifier_id_list", "layout_qualifier_id",
+  "type_specifier_no_prec", "type_specifier_nonarray", "struct_specifier",
+  "$@1", "$@2", "struct_declaration_list", "struct_declaration",
   "struct_declarator_list", "struct_declarator", "initializer",
   "declaration_statement", "statement", "simple_statement",
   "compound_statement", "$@3", "$@4", "statement_no_new_scope",
@@ -835,36 +844,37 @@
      335,   336,   337,   338,   339,   340,   341,   342,   343,   344,
      345,   346,   347,   348,   349,   350,   351,   352,   353,   354,
      355,   356,   357,   358,   359,   360,   361,   362,   363,   364,
-     365,   366,   367,   368,   369,   370
+     365,   366,   367,   368,   369,   370,   371
 };
 # endif
 
 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
 static const yytype_uint8 yyr1[] =
 {
-       0,   116,   117,   118,   118,   118,   118,   118,   118,   119,
-     119,   119,   119,   119,   119,   120,   121,   122,   122,   123,
-     123,   124,   124,   125,   125,   126,   127,   127,   127,   128,
-     128,   128,   128,   129,   129,   129,   130,   130,   130,   131,
-     131,   131,   132,   133,   133,   133,   133,   133,   134,   134,
-     134,   135,   136,   137,   138,   138,   139,   139,   140,   140,
-     141,   141,   142,   142,   143,   143,   143,   143,   143,   144,
-     144,   145,   146,   147,   147,   147,   147,   147,   147,   148,
-     149,   149,   150,   150,   151,   152,   152,   153,   153,   153,
-     153,   154,   154,   154,   154,   155,   156,   156,   156,   156,
-     156,   157,   157,   157,   157,   157,   157,   158,   158,   159,
-     159,   160,   161,   161,   161,   161,   161,   161,   162,   162,
-     162,   162,   162,   162,   163,   163,   164,   164,   164,   165,
-     165,   166,   166,   166,   166,   166,   166,   166,   166,   166,
-     166,   166,   166,   166,   166,   166,   166,   166,   166,   166,
-     166,   166,   166,   166,   166,   166,   166,   166,   166,   166,
-     166,   166,   166,   168,   167,   169,   167,   170,   170,   171,
-     171,   172,   172,   173,   173,   174,   175,   176,   176,   177,
-     177,   177,   177,   177,   178,   179,   180,   178,   181,   181,
-     183,   182,   184,   182,   185,   185,   186,   186,   187,   187,
-     188,   189,   189,   190,   190,   192,   191,   193,   191,   194,
-     191,   195,   195,   196,   196,   197,   197,   198,   198,   198,
-     198,   198,   199,   199,   200,   200,   202,   201
+       0,   117,   118,   119,   119,   119,   119,   119,   119,   120,
+     120,   120,   120,   120,   120,   121,   122,   123,   123,   124,
+     124,   125,   125,   126,   126,   127,   128,   128,   128,   129,
+     129,   129,   129,   130,   130,   130,   131,   131,   131,   132,
+     132,   132,   133,   134,   134,   134,   134,   134,   135,   135,
+     135,   136,   137,   138,   139,   139,   140,   140,   141,   141,
+     142,   142,   143,   143,   144,   144,   144,   144,   144,   145,
+     145,   146,   147,   148,   148,   148,   148,   148,   148,   149,
+     150,   150,   151,   151,   152,   153,   153,   154,   154,   154,
+     154,   155,   155,   155,   155,   156,   157,   157,   157,   157,
+     157,   158,   158,   158,   158,   158,   158,   159,   159,   160,
+     160,   161,   162,   162,   162,   162,   162,   162,   162,   162,
+     163,   163,   163,   163,   163,   163,   164,   164,   165,   165,
+     165,   166,   167,   167,   168,   168,   168,   169,   169,   170,
+     170,   170,   170,   170,   170,   170,   170,   170,   170,   170,
+     170,   170,   170,   170,   170,   170,   170,   170,   170,   170,
+     170,   170,   170,   170,   170,   170,   170,   170,   170,   170,
+     170,   172,   171,   173,   171,   174,   174,   175,   175,   176,
+     176,   177,   177,   178,   179,   180,   180,   181,   181,   181,
+     181,   181,   182,   183,   184,   182,   185,   185,   187,   186,
+     188,   186,   189,   189,   190,   190,   191,   191,   192,   193,
+     193,   194,   194,   196,   195,   197,   195,   198,   195,   199,
+     199,   200,   200,   201,   201,   202,   202,   202,   202,   202,
+     203,   203,   204,   204,   206,   205
 };
 
 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
@@ -881,18 +891,19 @@
        1,     1,     2,     3,     3,     2,     5,     3,     2,     3,
        2,     0,     1,     1,     1,     1,     1,     3,     5,     6,
        5,     1,     2,     4,     5,     4,     2,     1,     2,     1,
-       1,     1,     1,     1,     2,     1,     2,     1,     1,     1,
-       1,     2,     2,     1,     1,     2,     1,     1,     1,     1,
-       4,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     2,     1,     2,     1,     1,     2,
+       1,     1,     1,     2,     2,     1,     1,     2,     1,     1,
+       1,     4,     1,     3,     1,     3,     3,     1,     4,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     0,     6,     0,     5,     1,     2,     3,
-       4,     1,     3,     1,     4,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     2,     0,     0,     5,     1,     1,
-       0,     2,     0,     2,     2,     3,     1,     2,     1,     2,
-       5,     3,     1,     1,     4,     0,     6,     0,     8,     0,
-       7,     1,     1,     1,     0,     2,     3,     2,     2,     2,
-       3,     2,     1,     2,     1,     1,     0,     3
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     0,     6,     0,     5,     1,     2,     3,     4,     1,
+       3,     1,     4,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     2,     0,     0,     5,     1,     1,     0,     2,
+       0,     2,     2,     3,     1,     2,     1,     2,     5,     3,
+       1,     1,     4,     0,     6,     0,     8,     0,     7,     1,
+       1,     1,     0,     2,     3,     2,     2,     2,     3,     2,
+       1,     2,     1,     1,     0,     3
 };
 
 /* YYDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM.
@@ -900,543 +911,537 @@
    means the default is an error.  */
 static const yytype_uint8 yydefact[] =
 {
-       0,     0,   126,   127,   128,     0,   112,   118,   135,   132,
-     133,   134,   139,   140,   141,   142,   143,   144,   136,   137,
-     138,   145,   146,   147,   148,   149,   150,   119,   120,   123,
-     113,   151,   152,   153,   154,   155,   156,     0,   110,   109,
-       0,   131,   157,   158,   159,   160,   162,   225,   226,     0,
-      81,    91,     0,    96,   101,   117,     0,   115,   107,     0,
-     124,   129,   161,     0,   222,   224,   114,   106,     0,   121,
-     122,     0,   165,    73,     0,    79,    91,   111,    92,    93,
-      94,    82,     0,    91,     0,    74,   102,   116,     0,     0,
-     108,   125,     0,     1,   223,     0,   163,     0,     0,   227,
-      83,    88,    90,    95,     0,    97,    84,     0,     0,    72,
-       0,     0,     0,     0,   167,     2,     6,     4,     5,     7,
-      28,     0,     0,     0,    35,    34,    33,     3,     9,    29,
-      11,    16,    17,     0,     0,    22,     0,    36,     0,    39,
-      42,    43,    48,    51,    52,    53,    54,    56,    58,    60,
-      71,     0,    26,    75,     0,     0,     0,     0,   207,     0,
-       0,     0,     0,     0,   185,   194,   198,    36,    62,    69,
-       0,   176,     0,   129,   179,   196,   178,   177,     0,   180,
-     181,   182,   183,    85,    87,    89,     0,     0,   103,     0,
-     175,   105,     0,   173,     0,   171,     0,   168,    30,    31,
+       0,     0,   128,   129,   130,     0,   112,   120,   143,   140,
+     141,   142,   147,   148,   149,   150,   151,   152,   144,   145,
+     146,   153,   154,   155,   156,   157,   158,   121,   122,   125,
+     113,   159,   160,   161,   162,   163,   164,     0,   110,   109,
+       0,   139,   165,   166,   167,   168,     0,   170,   233,   234,
+       0,    81,    91,     0,    96,   101,   117,     0,   115,   107,
+       0,   118,   126,   137,   169,     0,   230,   232,   114,   106,
+       0,   123,   124,     0,   173,     0,    73,     0,    79,    91,
+     111,    92,    93,    94,    82,     0,    91,     0,    74,   102,
+     116,     0,     0,   108,   127,   119,     0,     1,   231,     0,
+     171,     0,   134,     0,   132,     0,   235,    83,    88,    90,
+      95,     0,    97,    84,     0,     0,    72,     0,     0,     0,
+       0,   175,     2,     6,     4,     5,     7,    28,     0,     0,
+       0,    35,    34,    33,     3,     9,    29,    11,    16,    17,
+       0,     0,    22,     0,    36,     0,    39,    42,    43,    48,
+      51,    52,    53,    54,    56,    58,    60,    71,     0,    26,
+      75,     0,     0,     0,   131,     0,     0,     0,   215,     0,
+       0,     0,     0,     0,   193,   202,   206,    36,    62,    69,
+       0,   184,     0,   137,   187,   204,   186,   185,     0,   188,
+     189,   190,   191,    85,    87,    89,     0,     0,   103,     0,
+     183,   105,     0,   181,     0,   179,     0,   176,    30,    31,
        0,    13,    14,     0,     0,    20,    19,     0,    21,    23,
       25,    32,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   130,     0,   166,   218,
-     217,   192,   209,     0,   221,   219,     0,   205,   184,     0,
-      65,    66,    67,    68,    64,     0,     0,   199,   195,   197,
-       0,    98,     0,   100,   104,     0,     0,     0,   169,     0,
-      76,     8,     0,    15,    27,    12,    18,    24,    37,    38,
-      41,    40,    46,    47,    44,    45,    49,    50,    55,    57,
-      59,     0,   164,     0,     0,     0,     0,     0,   220,     0,
-     186,    63,    70,     0,    99,   170,     0,   172,     0,    77,
-      10,     0,     0,   191,   193,   212,   211,   214,   192,   203,
-       0,     0,     0,     0,    86,   174,     0,    61,     0,   213,
-       0,     0,   202,   200,     0,     0,   187,     0,     0,   215,
-       0,   192,     0,   189,   206,   188,    78,     0,   216,   210,
-     201,   204,   208
+       0,     0,     0,     0,     0,     0,   138,     0,   174,   135,
+     136,   133,   226,   225,   200,   217,     0,   229,   227,     0,
+     213,   192,     0,    65,    66,    67,    68,    64,     0,     0,
+     207,   203,   205,     0,    98,     0,   100,   104,     0,     0,
+       0,   177,     0,    76,     8,     0,    15,    27,    12,    18,
+      24,    37,    38,    41,    40,    46,    47,    44,    45,    49,
+      50,    55,    57,    59,     0,   172,     0,     0,     0,     0,
+       0,   228,     0,   194,    63,    70,     0,    99,   178,     0,
+     180,     0,    77,    10,     0,     0,   199,   201,   220,   219,
+     222,   200,   211,     0,     0,     0,     0,    86,   182,     0,
+      61,     0,   221,     0,     0,   210,   208,     0,     0,   195,
+       0,     0,   223,     0,   200,     0,   197,   214,   196,    78,
+       0,   224,   218,   209,   212,   216
 };
 
 /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-      -1,   127,   128,   129,   262,   130,   131,   132,   133,   134,
-     135,   136,   167,   138,   139,   140,   141,   142,   143,   144,
-     145,   146,   147,   148,   149,   168,   169,   245,   170,   151,
-      89,   171,   172,    49,    50,    51,   101,    81,    82,   102,
-      52,    53,    54,    55,    83,    56,    57,    58,    59,    60,
-     152,    62,   154,    97,   113,   114,   194,   195,   191,   174,
-     175,   176,   177,   239,   313,   334,   283,   284,   285,   335,
-     178,   179,   180,   323,   312,   181,   289,   231,   286,   307,
-     320,   321,   182,    63,    64,    65,    74
+      -1,   134,   135,   136,   275,   137,   138,   139,   140,   141,
+     142,   143,   177,   145,   146,   147,   148,   149,   150,   151,
+     152,   153,   154,   155,   156,   178,   179,   258,   180,   158,
+      92,   181,   182,    50,    51,    52,   108,    84,    85,   109,
+      53,    54,    55,    56,    86,    57,    58,    59,    60,    61,
+     103,   104,    62,   159,    64,   161,   101,   120,   121,   204,
+     205,   201,   184,   185,   186,   187,   252,   326,   347,   296,
+     297,   298,   348,   188,   189,   190,   336,   325,   191,   302,
+     244,   299,   320,   333,   334,   192,    65,    66,    67,    77
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -298
+#define YYPACT_NINF -303
 static const yytype_int16 yypact[] =
 {
-    1721,   -25,  -298,  -298,  -298,   167,  -298,  -298,  -298,  -298,
-    -298,  -298,  -298,  -298,  -298,  -298,  -298,  -298,  -298,  -298,
-    -298,  -298,  -298,  -298,  -298,  -298,  -298,  -298,  -298,  -298,
-    -298,  -298,  -298,  -298,  -298,  -298,  -298,   -20,  -298,  -298,
-     -47,  -298,  -298,  -298,  -298,  -298,  -298,  -298,   -77,   -31,
-     -34,    33,   -54,  -298,   -33,    52,  1836,  -298,  -298,  2000,
-    -298,   -13,  -298,  1658,  -298,  -298,  -298,  -298,  2000,  -298,
-    -298,   -50,  -298,  -298,   -26,  -298,    68,  -298,  -298,  -298,
-    -298,  -298,  1893,   135,    56,  -298,   -68,  -298,    11,  1779,
-    -298,  -298,  1271,  -298,  -298,    23,  -298,  1779,   328,  -298,
-    -298,  -298,  -298,    77,  1893,   -37,  -298,  1016,  1271,  -298,
-     104,  1893,   115,  1439,  -298,    60,  -298,  -298,  -298,  -298,
-    -298,  1271,  1271,  1271,  -298,  -298,  -298,  -298,  -298,    42,
-    -298,  -298,  -298,   100,   -14,  1354,   110,  -298,  1271,    76,
-      45,  -298,    12,   108,  -298,  -298,  -298,   121,   122,   -62,
-    -298,   109,  -298,  -298,  1779,  1512,   103,   105,  -298,   116,
-     117,   111,  1102,   119,   118,  -298,  -298,    46,  -298,  -298,
-      -8,  -298,   -77,    88,  -298,  -298,  -298,  -298,   432,  -298,
-    -298,  -298,  -298,   120,  -298,  -298,  1185,  1271,  -298,   123,
-    -298,  -298,   115,   125,    25,  -298,   -48,  -298,  -298,  -298,
-      -3,  -298,  -298,  1271,  1944,  -298,  -298,  1271,   124,  -298,
-    -298,  -298,  1271,  1271,  1271,  1271,  1271,  1271,  1271,  1271,
-    1271,  1271,  1271,  1271,  1271,  1271,  -298,  1585,  -298,  -298,
-    -298,   126,  -298,  1271,  -298,  -298,    43,  -298,  -298,   536,
-    -298,  -298,  -298,  -298,  -298,  1271,  1271,  -298,  -298,  -298,
-    1271,  -298,   128,  -298,  -298,    44,  1271,   115,  -298,   -67,
-    -298,  -298,   131,   129,  -298,   138,  -298,  -298,  -298,  -298,
-      76,    76,  -298,  -298,  -298,  -298,    12,    12,  -298,   121,
-     122,    90,  -298,   161,   -26,   744,   848,     6,  -298,   933,
-     536,  -298,  -298,   136,  -298,  -298,   137,  -298,  1271,  -298,
-    -298,  1271,   141,  -298,  -298,  -298,  -298,   933,   126,   129,
-     156,  1893,   142,   139,  -298,  -298,   143,  -298,  1271,  -298,
-     132,   144,   204,  -298,   140,   640,  -298,   145,    19,  1271,
-     640,   126,  1271,  -298,  -298,  -298,  -298,   146,   129,  -298,
-    -298,  -298,  -298
+    1676,   -24,  -303,  -303,  -303,   177,  -303,  -303,  -303,  -303,
+    -303,  -303,  -303,  -303,  -303,  -303,  -303,  -303,  -303,  -303,
+    -303,  -303,  -303,  -303,  -303,  -303,  -303,  -303,  -303,  -303,
+    -303,  -303,  -303,  -303,  -303,  -303,  -303,    82,  -303,  -303,
+     -41,  -303,  -303,  -303,  -303,  -303,   -58,  -303,  -303,   -60,
+     -16,     8,     4,   -36,  -303,    64,    46,  1797,  -303,  -303,
+    1956,    46,  -303,    55,  -303,  1612,  -303,  -303,  -303,  -303,
+    1956,  -303,  -303,    58,  -303,    94,  -303,    71,  -303,    72,
+    -303,  -303,  -303,  -303,  -303,  1854,   149,   107,  -303,   -18,
+    -303,   101,  1740,  -303,  -303,  -303,  1294,  -303,  -303,    96,
+    -303,  1740,    99,   -12,  -303,   341,  -303,  -303,  -303,  -303,
+     138,  1854,   -33,  -303,  1036,  1294,  -303,   160,  1854,   141,
+     230,  -303,   114,  -303,  -303,  -303,  -303,  -303,  1294,  1294,
+    1294,  -303,  -303,  -303,  -303,  -303,    74,  -303,  -303,  -303,
+     115,    -1,  1378,   117,  -303,  1294,    67,   -57,  -303,   -38,
+     100,  -303,  -303,  -303,   128,   129,   -64,  -303,   119,  -303,
+    -303,  1740,  1464,   118,  -303,    94,   111,   113,  -303,   124,
+     125,   122,  1123,   127,   123,  -303,  -303,    68,  -303,  -303,
+      -9,  -303,   -60,    63,  -303,  -303,  -303,  -303,   446,  -303,
+    -303,  -303,  -303,   131,  -303,  -303,  1207,  1294,  -303,   132,
+    -303,  -303,   141,   134,    16,  -303,   -42,  -303,  -303,  -303,
+       2,  -303,  -303,  1294,  1905,  -303,  -303,  1294,   139,  -303,
+    -303,  -303,  1294,  1294,  1294,  1294,  1294,  1294,  1294,  1294,
+    1294,  1294,  1294,  1294,  1294,  1294,  -303,  1538,  -303,  -303,
+    -303,  -303,  -303,  -303,   130,  -303,  1294,  -303,  -303,    24,
+    -303,  -303,   551,  -303,  -303,  -303,  -303,  -303,  1294,  1294,
+    -303,  -303,  -303,  1294,  -303,   148,  -303,  -303,    43,  1294,
+     141,  -303,   -69,  -303,  -303,   150,   145,  -303,   154,  -303,
+    -303,  -303,  -303,    67,    67,  -303,  -303,  -303,  -303,   -38,
+     -38,  -303,   128,   129,    92,  -303,   192,    71,   761,   866,
+       6,  -303,   952,   551,  -303,  -303,   153,  -303,  -303,   155,
+    -303,  1294,  -303,  -303,  1294,   157,  -303,  -303,  -303,  -303,
+     952,   130,   145,   188,  1854,   197,   156,  -303,  -303,   190,
+    -303,  1294,  -303,   189,   199,   278,  -303,   195,   656,  -303,
+     198,    21,  1294,   656,   130,  1294,  -303,  -303,  -303,  -303,
+     201,   145,  -303,  -303,  -303,  -303
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -298,  -298,  -298,  -298,  -298,  -298,  -298,    36,  -298,  -298,
-    -298,  -298,   -55,  -298,   -23,  -298,   -84,   -24,  -298,  -298,
-    -298,    20,    21,    22,  -298,   -69,  -107,  -298,  -119,  -100,
-    -298,    13,    15,  -298,  -298,  -298,   147,   169,   166,   148,
-    -298,  -298,  -267,  -298,  -298,   -83,   195,   -53,   248,   -27,
-       0,  -298,  -298,  -298,   -85,  -108,    62,    -2,  -179,   -30,
-    -169,  -275,  -298,  -298,  -298,   -73,  -297,  -298,  -298,   -72,
-      24,   -22,  -298,  -298,   -46,  -298,  -298,  -298,  -298,  -298,
-    -298,  -298,  -298,  -298,   196,  -298,  -298
+    -303,  -303,  -303,  -303,  -303,  -303,  -303,    86,  -303,  -303,
+    -303,  -303,   -92,  -303,   -30,  -303,   -62,   -34,  -303,  -303,
+    -303,    73,    75,    76,  -303,   -89,  -114,  -303,  -118,  -106,
+    -303,    14,    15,  -303,  -303,  -303,   196,   227,   223,   200,
+    -303,  -303,  -273,  -303,  -303,   -90,   -29,   -52,   307,  -303,
+    -303,   151,   -39,     0,  -303,  -303,  -303,   -85,  -111,   112,
+      45,  -191,    18,  -178,  -280,  -303,  -303,  -303,   -25,  -302,
+    -303,  -303,   -74,    61,    20,  -303,  -303,     1,  -303,  -303,
+    -303,  -303,  -303,  -303,  -303,  -303,  -303,   257,  -303,  -303
 };
 
 /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
    positive, shift that token.  If negative, reduce the rule which
    number is the opposite.  If YYTABLE_NINF, syntax error.  */
-#define YYTABLE_NINF -191
+#define YYTABLE_NINF -199
 static const yytype_int16 yytable[] =
 {
-      61,   190,    99,    90,   200,   197,   111,   189,   253,   249,
-     304,   322,   155,    47,   111,    48,   259,    71,   224,    66,
-      69,    70,   310,   150,   106,    73,   107,   298,   209,   103,
-     111,    86,    91,   108,   340,   299,   112,   137,   150,    67,
-     310,    95,    77,   236,   112,    84,    96,   197,    85,    72,
-     333,   103,   137,   225,   260,   333,    61,   186,   192,    61,
-     112,     7,    75,    61,   187,    76,   198,   199,    61,   227,
-      98,   111,   111,    78,    79,    80,    47,    77,    48,   206,
-     190,    92,    61,   211,   263,   207,   252,   216,   217,    61,
-     261,   246,    27,    28,   247,    29,   246,    61,   173,   308,
-     267,   112,   112,    37,    61,   246,   281,   109,    78,    79,
-      80,    61,   337,    61,   287,   201,   202,   150,   246,   197,
-     105,   249,   218,   219,   257,   153,   -80,   258,   240,   241,
-     242,   137,   272,   273,   274,   275,   203,   243,   291,   292,
-     204,   183,   246,   257,   111,   288,   295,   244,    66,   214,
-     293,   215,   -27,   341,    61,    61,   296,   268,   269,   137,
-     137,   137,   137,   137,   137,   137,   137,   137,   137,   137,
-     309,     2,     3,     4,   112,    78,    79,    80,   173,   193,
-     -26,   150,    92,   212,   213,   220,   221,   150,   309,   246,
-     301,   270,   271,   205,   317,   137,   276,   277,   316,   328,
-     222,   137,   210,   223,   226,   229,   311,   230,   232,   233,
-     338,   237,   303,   234,   250,   238,  -131,   302,   254,   256,
-     324,   331,  -190,   294,   311,   190,   300,    61,   246,   150,
-     -28,   314,   315,   318,   329,   325,   326,   330,   327,   173,
-     266,   332,   278,   137,   279,   100,   280,   336,   342,   104,
-      87,   184,   185,    68,   255,   297,   305,   339,    90,    94,
-       0,   319,     0,   290,   306,     0,     0,     0,     0,     0,
+      63,   200,   118,   106,   144,    93,   266,   157,   199,   207,
+     262,   118,   210,    80,    48,    49,   162,   234,   317,   335,
+      68,    94,   144,   272,    73,   157,   311,    90,   219,   323,
+     118,    99,    95,   110,   312,    75,   208,   209,   226,   227,
+     119,    69,   353,    76,    81,    82,    83,   323,   224,   119,
+     225,   207,   235,   221,   249,     7,    74,    63,   346,   110,
+      63,   273,   196,   346,    87,    63,   202,    88,   119,   197,
+      63,   118,   118,   228,   229,   113,   237,   114,    78,    48,
+      49,    80,   164,   200,   115,    63,    27,    28,   165,    29,
+     265,   259,    63,   216,   260,   276,   274,    37,   -80,   217,
+     321,    63,   259,   280,   144,   183,   259,   157,    79,   119,
+     119,    63,    81,    82,    83,   350,   270,   294,    63,   271,
+      63,   259,    71,    72,   259,   262,   207,   301,   300,    89,
+     281,   282,   144,   144,   144,   144,   144,   144,   144,   144,
+     144,   144,   144,   270,   304,   305,   308,   118,   211,   212,
+      96,   253,   254,   255,   354,   100,   -26,   306,    96,   102,
+     256,    63,    63,   309,   285,   286,   287,   288,   105,   213,
+     257,   144,   112,   214,   157,   222,   223,   144,   230,   231,
+     157,     2,     3,     4,   322,   119,   239,   240,   183,    81,
+      82,    83,   259,   314,   283,   284,   289,   290,   116,   160,
+     330,   163,   322,   193,    68,   329,   203,   -27,   232,   215,
+     220,   233,   324,   341,   242,   236,   243,   245,   246,   144,
+     250,   251,   157,   316,   351,   247,   263,  -198,   267,   269,
+     324,   200,  -139,   117,     2,     3,     4,    63,     6,     7,
+       8,     9,    10,    11,   307,   259,   313,   -28,   315,   327,
+     331,   328,   183,   337,   339,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,    28,    93,    29,    30,    31,    32,    33,    34,    35,
+      36,    37,    38,    39,    40,    41,   340,    42,    43,    44,
+      45,   338,   342,   343,    46,   344,    47,   345,   183,   183,
+     279,   349,   183,   183,   355,   291,   107,   194,   292,   111,
+     293,   195,    70,   303,   268,   310,   241,   318,   352,   319,
+     183,   332,    98,     0,    63,     0,     0,     0,   206,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   183,     0,
+       0,     0,     0,   183,     1,     2,     3,     4,     5,     6,
+       7,     8,     9,    10,    11,   166,   167,   168,     0,   169,
+     170,   171,   172,     0,     0,     0,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    27,    28,     0,    29,    30,    31,    32,    33,    34,
+      35,    36,    37,    38,    39,    40,    41,   173,    42,    43,
+      44,    45,     0,     0,     0,    46,   122,    47,   123,   124,
+     125,   126,   127,     0,     0,   128,   129,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   173,   173,     0,     0,   173,
-     173,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   173,     0,     0,
-       0,    61,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   173,     0,     0,     0,     0,
-     173,     1,     2,     3,     4,     5,     6,     7,     8,     9,
-      10,    11,   156,   157,   158,     0,   159,   160,   161,   162,
-       0,     0,     0,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
-       0,    29,    30,    31,    32,    33,    34,    35,    36,    37,
-      38,    39,    40,    41,   163,    42,    43,    44,    45,     0,
-       0,     0,   115,    46,   116,   117,   118,   119,   120,     0,
-       0,   121,   122,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     123,     0,     0,     0,   164,   165,     0,     0,     0,     0,
-     166,   124,   125,     0,   126,     1,     2,     3,     4,     5,
-       6,     7,     8,     9,    10,    11,   156,   157,   158,     0,
-     159,   160,   161,   162,     0,     0,     0,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    28,     0,    29,    30,    31,    32,    33,
-      34,    35,    36,    37,    38,    39,    40,    41,   163,    42,
-      43,    44,    45,     0,     0,     0,   115,    46,   116,   117,
-     118,   119,   120,     0,     0,   121,   122,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   123,     0,     0,     0,   164,   248,
-       0,     0,     0,     0,   166,   124,   125,     0,   126,     1,
+       0,     0,     0,     0,   130,     0,     0,     0,   174,   175,
+       0,     0,     0,     0,   176,   131,   132,     0,   133,     1,
        2,     3,     4,     5,     6,     7,     8,     9,    10,    11,
-     156,   157,   158,     0,   159,   160,   161,   162,     0,     0,
+     166,   167,   168,     0,   169,   170,   171,   172,     0,     0,
        0,    12,    13,    14,    15,    16,    17,    18,    19,    20,
       21,    22,    23,    24,    25,    26,    27,    28,     0,    29,
       30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
-      40,    41,   163,    42,    43,    44,    45,     0,     0,     0,
-     115,    46,   116,   117,   118,   119,   120,     0,     0,   121,
-     122,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   123,     0,
-       0,     0,   164,     0,     0,     0,     0,     0,   166,   124,
-     125,     0,   126,     1,     2,     3,     4,     5,     6,     7,
-       8,     9,    10,    11,   156,   157,   158,     0,   159,   160,
-     161,   162,     0,     0,     0,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    28,     0,    29,    30,    31,    32,    33,    34,    35,
-      36,    37,    38,    39,    40,    41,   163,    42,    43,    44,
-      45,     0,     0,     0,   115,    46,   116,   117,   118,   119,
-     120,     0,     0,   121,   122,     0,     0,     0,     0,     0,
+      40,    41,   173,    42,    43,    44,    45,     0,     0,     0,
+      46,   122,    47,   123,   124,   125,   126,   127,     0,     0,
+     128,   129,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   130,
+       0,     0,     0,   174,   261,     0,     0,     0,     0,   176,
+     131,   132,     0,   133,     1,     2,     3,     4,     5,     6,
+       7,     8,     9,    10,    11,   166,   167,   168,     0,   169,
+     170,   171,   172,     0,     0,     0,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    27,    28,     0,    29,    30,    31,    32,    33,    34,
+      35,    36,    37,    38,    39,    40,    41,   173,    42,    43,
+      44,    45,     0,     0,     0,    46,   122,    47,   123,   124,
+     125,   126,   127,     0,     0,   128,   129,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   123,     0,     0,     0,    98,     0,     0,     0,
-       0,     0,   166,   124,   125,     0,   126,     1,     2,     3,
-       4,     5,     6,     7,     8,     9,    10,    11,   156,   157,
-     158,     0,   159,   160,   161,   162,     0,     0,     0,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,    27,    28,     0,    29,    30,    31,
-      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
-     163,    42,    43,    44,    45,     0,     0,     0,   115,    46,
-     116,   117,   118,   119,   120,     0,     0,   121,   122,     0,
+       0,     0,     0,     0,   130,     0,     0,     0,   174,     0,
+       0,     0,     0,     0,   176,   131,   132,     0,   133,     1,
+       2,     3,     4,     5,     6,     7,     8,     9,    10,    11,
+     166,   167,   168,     0,   169,   170,   171,   172,     0,     0,
+       0,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,    27,    28,     0,    29,
+      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+      40,    41,   173,    42,    43,    44,    45,     0,     0,     0,
+      46,   122,    47,   123,   124,   125,   126,   127,     0,     0,
+     128,   129,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   130,
+       0,     0,     0,   105,     0,     0,     0,     0,     0,   176,
+     131,   132,     0,   133,     1,     2,     3,     4,     5,     6,
+       7,     8,     9,    10,    11,   166,   167,   168,     0,   169,
+     170,   171,   172,     0,     0,     0,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    27,    28,     0,    29,    30,    31,    32,    33,    34,
+      35,    36,    37,    38,    39,    40,    41,   173,    42,    43,
+      44,    45,     0,     0,     0,    46,   122,    47,   123,   124,
+     125,   126,   127,     0,     0,   128,   129,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   123,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   166,   124,   125,     0,
-     126,     1,     2,     3,     4,     5,     6,     7,     8,     9,
-      10,    11,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
-       0,    29,    30,    31,    32,    33,    34,    35,    36,    37,
-      38,    39,    40,    41,     0,    42,    43,    44,    45,     0,
-       0,     0,   115,    46,   116,   117,   118,   119,   120,     0,
-       0,   121,   122,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   110,     2,     3,     4,
-     123,     6,     7,     8,     9,    10,    11,     0,     0,     0,
-     166,   124,   125,     0,   126,     0,     0,     0,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,    27,    28,     0,    29,    30,    31,    32,
-      33,    34,    35,    36,    37,    38,    39,    40,    41,     0,
-      42,    43,    44,    45,     0,     0,     0,   115,    46,   116,
-     117,   118,   119,   120,     0,     0,   121,   122,     0,     0,
+       0,     0,     0,     0,   130,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   176,   131,   132,     0,   133,     1,
+       2,     3,     4,     5,     6,     7,     8,     9,    10,    11,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   123,     8,     9,    10,    11,
-       0,     0,     0,     0,     0,     0,   124,   125,     0,   126,
+       0,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,    27,    28,     0,    29,
+      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+      40,    41,     0,    42,    43,    44,    45,     0,     0,     0,
+      46,   122,    47,   123,   124,   125,   126,   127,     0,     0,
+     128,   129,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   117,     2,     3,     4,   130,
+       6,     7,     8,     9,    10,    11,     0,     0,     0,   176,
+     131,   132,     0,   133,     0,     0,     0,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    28,     0,    29,    30,    31,    32,    33,
+      34,    35,    36,    37,    38,    39,    40,    41,     0,    42,
+      43,    44,    45,     0,     0,     0,    46,   122,    47,   123,
+     124,   125,   126,   127,     0,     0,   128,   129,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   130,     8,     9,    10,    11,
+       0,     0,     0,     0,     0,     0,   131,   132,     0,   133,
        0,    12,    13,    14,    15,    16,    17,    18,    19,    20,
       21,    22,    23,    24,    25,    26,     0,     0,     0,     0,
        0,    31,    32,    33,    34,    35,    36,     0,     0,     0,
       40,    41,     0,    42,    43,    44,    45,     0,     0,     0,
-     115,    46,   116,   117,   118,   119,   120,     0,     0,   121,
-     122,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   123,     0,
-       0,   188,     8,     9,    10,    11,     0,     0,     0,   124,
-     125,     0,   126,     0,     0,     0,     0,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,     0,     0,     0,     0,     0,    31,    32,    33,
-      34,    35,    36,     0,     0,     0,    40,    41,     0,    42,
-      43,    44,    45,     0,     0,     0,   115,    46,   116,   117,
-     118,   119,   120,     0,     0,   121,   122,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   123,     8,     9,    10,    11,     0,
-       0,     0,     0,     0,   235,   124,   125,     0,   126,     0,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,    26,     0,     0,     0,     0,     0,
-      31,    32,    33,    34,    35,    36,     0,     0,     0,    40,
-      41,     0,    42,    43,    44,    45,     0,     0,     0,   115,
-      46,   116,   117,   118,   119,   120,     0,     0,   121,   122,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   123,     0,     0,
-     251,     8,     9,    10,    11,     0,     0,     0,   124,   125,
-       0,   126,     0,     0,     0,     0,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,     0,     0,     0,     0,     0,    31,    32,    33,    34,
-      35,    36,     0,     0,     0,    40,    41,     0,    42,    43,
-      44,    45,     0,     0,     0,   115,    46,   116,   117,   118,
-     119,   120,     0,     0,   121,   122,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   123,     8,     9,    10,    11,     0,     0,
-       0,     0,     0,     0,   124,   125,     0,   126,     0,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,     0,     0,     0,     0,     0,    31,
-      32,    33,    34,    35,    36,     0,     0,     0,    40,   208,
-       0,    42,    43,    44,    45,     0,     0,     0,   115,    46,
-     116,   117,   118,   119,   120,     0,     0,   121,   122,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   110,     2,     3,     4,   123,     6,     7,     8,
-       9,    10,    11,     0,     0,     0,     0,   124,   125,     0,
-     126,     0,     0,     0,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
-      28,     0,    29,    30,    31,    32,    33,    34,    35,    36,
-      37,    38,    39,    40,    41,     0,    42,    43,    44,    45,
-       0,     0,     0,     0,    46,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   110,     2,     3,     4,     0,
-       6,     7,     8,     9,    10,    11,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   196,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    28,     0,    29,    30,    31,    32,    33,
-      34,    35,    36,    37,    38,    39,    40,    41,     0,    42,
-      43,    44,    45,     0,     0,     0,     0,    46,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   110,     2,
-       3,     4,     0,     6,     7,     8,     9,    10,    11,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   228,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,    26,    27,    28,     0,    29,    30,
-      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
-      41,     0,    42,    43,    44,    45,     0,     0,     0,     0,
-      46,     0,     0,     0,     0,     0,     0,     0,    93,     0,
-       0,     1,     2,     3,     4,     5,     6,     7,     8,     9,
-      10,    11,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   282,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
-       0,    29,    30,    31,    32,    33,    34,    35,    36,    37,
-      38,    39,    40,    41,     0,    42,    43,    44,    45,     0,
-       0,     0,     0,    46,     1,     2,     3,     4,     5,     6,
-       7,     8,     9,    10,    11,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    28,     0,    29,    30,    31,    32,    33,    34,
-      35,    36,    37,    38,    39,    40,    41,     0,    42,    43,
-      44,    45,   110,     2,     3,     4,    46,     6,     7,     8,
-       9,    10,    11,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
-      28,     0,    29,    30,    31,    32,    33,    34,    35,    36,
-      37,    38,    39,    40,    41,     0,    42,    43,    44,    45,
-       2,     3,     4,     0,    46,     0,     8,     9,    10,    11,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,     0,     0,     0,     0,
-       0,    31,    32,    33,    34,    35,    36,     0,     0,     0,
-      40,    41,     0,    42,    43,    44,    45,     2,     3,     4,
-      88,    46,     0,     8,     9,    10,    11,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    12,    13,
+       0,   122,    47,   123,   124,   125,   126,   127,     0,     0,
+     128,   129,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   130,
+       0,     0,   198,     8,     9,    10,    11,     0,     0,     0,
+     131,   132,     0,   133,     0,     0,     0,     0,    12,    13,
       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
       24,    25,    26,     0,     0,     0,     0,     0,    31,    32,
       33,    34,    35,    36,     0,     0,     0,    40,    41,     0,
-      42,    43,    44,    45,     8,     9,    10,    11,    46,     0,
+      42,    43,    44,    45,     0,     0,     0,     0,   122,    47,
+     123,   124,   125,   126,   127,     0,     0,   128,   129,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   130,     8,     9,    10,
+      11,     0,     0,     0,     0,     0,   248,   131,   132,     0,
+     133,     0,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,     0,     0,     0,
+       0,     0,    31,    32,    33,    34,    35,    36,     0,     0,
+       0,    40,    41,     0,    42,    43,    44,    45,     0,     0,
+       0,     0,   122,    47,   123,   124,   125,   126,   127,     0,
+       0,   128,   129,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     130,     0,     0,   264,     8,     9,    10,    11,     0,     0,
+       0,   131,   132,     0,   133,     0,     0,     0,     0,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,     0,     0,     0,     0,     0,    31,
+      32,    33,    34,    35,    36,     0,     0,     0,    40,    41,
+       0,    42,    43,    44,    45,     0,     0,     0,     0,   122,
+      47,   123,   124,   125,   126,   127,     0,     0,   128,   129,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   130,     8,     9,
+      10,    11,     0,     0,     0,     0,     0,     0,   131,   132,
+       0,   133,     0,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,    26,     0,     0,
+       0,     0,     0,    31,    32,    33,    34,    35,    36,     0,
+       0,     0,    40,   218,     0,    42,    43,    44,    45,     0,
+       0,     0,     0,   122,    47,   123,   124,   125,   126,   127,
+       0,     0,   128,   129,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   117,     2,     3,
+       4,   130,     6,     7,     8,     9,    10,    11,     0,     0,
+       0,     0,   131,   132,     0,   133,     0,     0,     0,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    27,    28,     0,    29,    30,    31,
+      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
+       0,    42,    43,    44,    45,     0,     0,     0,    46,     0,
+      47,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   117,     2,     3,     4,     0,     6,     7,     8,     9,
+      10,    11,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   238,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
+       0,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+      38,    39,    40,    41,     0,    42,    43,    44,    45,     0,
+       0,     0,    46,     0,    47,     0,     0,     0,     0,     0,
+       0,     0,    97,     0,     0,     1,     2,     3,     4,     5,
+       6,     7,     8,     9,    10,    11,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   295,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    28,     0,    29,    30,    31,    32,    33,
+      34,    35,    36,    37,    38,    39,    40,    41,     0,    42,
+      43,    44,    45,     0,     0,     0,    46,     0,    47,     1,
+       2,     3,     4,     5,     6,     7,     8,     9,    10,    11,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,    27,    28,     0,    29,
+      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+      40,    41,     0,    42,    43,    44,    45,     0,     0,     0,
+      46,     0,    47,   117,     2,     3,     4,     0,     6,     7,
+       8,     9,    10,    11,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,    28,     0,    29,    30,    31,    32,    33,    34,    35,
+      36,    37,    38,    39,    40,    41,     0,    42,    43,    44,
+      45,     2,     3,     4,    46,     0,    47,     8,     9,    10,
+      11,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,     0,     0,     0,
+       0,     0,    31,    32,    33,    34,    35,    36,     0,     0,
+       0,    40,    41,     0,    42,    43,    44,    45,     2,     3,
+       4,     0,    91,    47,     8,     9,    10,    11,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,    12,
       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
       23,    24,    25,    26,     0,     0,     0,     0,     0,    31,
       32,    33,    34,    35,    36,     0,     0,     0,    40,    41,
-       0,    42,    43,    44,    45,     0,     0,     0,   264,    46,
-       8,     9,    10,    11,   265,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-       0,     0,     0,     0,     0,    31,    32,    33,    34,    35,
-      36,     0,     0,     0,    40,    41,     0,    42,    43,    44,
-      45,     0,     0,     0,     0,    46
+       0,    42,    43,    44,    45,     8,     9,    10,    11,     0,
+      47,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,    25,    26,     0,     0,     0,     0,     0,
+      31,    32,    33,    34,    35,    36,     0,     0,     0,    40,
+      41,     0,    42,    43,    44,    45,     8,     9,    10,    11,
+     277,    47,     0,     0,     0,     0,   278,     0,     0,     0,
+       0,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,     0,     0,     0,     0,
+       0,    31,    32,    33,    34,    35,    36,     0,     0,     0,
+      40,    41,     0,    42,    43,    44,    45,     0,     0,     0,
+       0,     0,    47
 };
 
 #define yypact_value_is_default(Yystate) \
-  (!!((Yystate) == (-298)))
+  (!!((Yystate) == (-303)))
 
 #define yytable_value_is_error(Yytable_value) \
   YYID (0)
 
 static const yytype_int16 yycheck[] =
 {
-       0,   108,    74,    56,   123,   113,    89,   107,   187,   178,
-     285,   308,    97,     0,    97,     0,    64,    64,    80,    44,
-      40,    41,   289,    92,    92,   102,    94,    94,   135,    82,
-     113,    64,    59,   101,   331,   102,    89,    92,   107,    64,
-     307,    68,     9,   162,    97,    99,    96,   155,   102,    96,
-     325,   104,   107,   115,   102,   330,    56,    94,   111,    59,
-     113,     9,    93,    63,   101,    99,   121,   122,    68,   154,
-      96,   154,   155,    40,    41,    42,    63,     9,    63,    93,
-     187,    94,    82,   138,   203,    99,   186,    75,    76,    89,
-      93,    99,    40,    41,   102,    43,    99,    97,    98,    93,
-     207,   154,   155,    51,   104,    99,   225,    96,    40,    41,
-      42,   111,    93,   113,   233,    73,    74,   186,    99,   227,
-      64,   290,   110,   111,    99,   102,    93,   102,    82,    83,
-      84,   186,   216,   217,   218,   219,    94,    91,   245,   246,
-      98,    64,    99,    99,   227,   102,   102,   101,    44,   104,
-     250,   106,    92,   332,   154,   155,   256,   212,   213,   214,
-     215,   216,   217,   218,   219,   220,   221,   222,   223,   224,
-     289,     4,     5,     6,   227,    40,    41,    42,   178,    64,
-      92,   250,    94,   107,   108,    77,    78,   256,   307,    99,
-     100,   214,   215,    93,   301,   250,   220,   221,   298,   318,
-      79,   256,    92,    81,    95,   102,   289,   102,    92,    92,
-     329,    92,   284,   102,    94,    97,    92,    56,    95,    94,
-      64,    17,    96,    95,   307,   332,    95,   227,    99,   298,
-      92,    95,    95,    92,   102,    93,    97,    93,    95,   239,
-     204,   101,   222,   298,   223,    76,   224,   102,   102,    83,
-      55,   104,   104,     5,   192,   257,   286,   330,   311,    63,
-      -1,   307,    -1,   239,   286,    -1,    -1,    -1,    -1,    -1,
+       0,   115,    92,    77,    96,    57,   197,    96,   114,   120,
+     188,   101,   130,     9,     0,     0,   101,    81,   298,   321,
+      44,    60,   114,    65,    65,   114,    95,    56,   142,   302,
+     120,    70,    61,    85,   103,    93,   128,   129,    76,    77,
+      92,    65,   344,   103,    40,    41,    42,   320,   105,   101,
+     107,   162,   116,   145,   172,     9,    97,    57,   338,   111,
+      60,   103,    95,   343,   100,    65,   118,   103,   120,   102,
+      70,   161,   162,   111,   112,    93,   161,    95,    94,    65,
+      65,     9,    94,   197,   102,    85,    40,    41,   100,    43,
+     196,   100,    92,    94,   103,   213,    94,    51,    94,   100,
+      94,   101,   100,   217,   196,   105,   100,   196,   100,   161,
+     162,   111,    40,    41,    42,    94,   100,   235,   118,   103,
+     120,   100,    40,    41,   100,   303,   237,   103,   246,    65,
+     222,   223,   224,   225,   226,   227,   228,   229,   230,   231,
+     232,   233,   234,   100,   258,   259,   103,   237,    74,    75,
+      95,    83,    84,    85,   345,    97,    93,   263,    95,    65,
+      92,   161,   162,   269,   226,   227,   228,   229,    97,    95,
+     102,   263,    65,    99,   263,   108,   109,   269,    78,    79,
+     269,     4,     5,     6,   302,   237,    68,    69,   188,    40,
+      41,    42,   100,   101,   224,   225,   230,   231,    97,   103,
+     314,   102,   320,    65,    44,   311,    65,    93,    80,    94,
+      93,    82,   302,   331,   103,    96,   103,    93,    93,   311,
+      93,    98,   311,   297,   342,   103,    95,    97,    96,    95,
+     320,   345,    93,     3,     4,     5,     6,   237,     8,     9,
+      10,    11,    12,    13,    96,   100,    96,    93,    56,    96,
+      93,    96,   252,    65,    98,    25,    26,    27,    28,    29,
+      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+      40,    41,   324,    43,    44,    45,    46,    47,    48,    49,
+      50,    51,    52,    53,    54,    55,    96,    57,    58,    59,
+      60,    94,   103,    94,    64,    17,    66,   102,   298,   299,
+     214,   103,   302,   303,   103,   232,    79,   111,   233,    86,
+     234,   111,     5,   252,   202,   270,   165,   299,   343,   299,
+     320,   320,    65,    -1,   324,    -1,    -1,    -1,    98,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   338,    -1,
+      -1,    -1,    -1,   343,     3,     4,     5,     6,     7,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    -1,    18,
+      19,    20,    21,    -1,    -1,    -1,    25,    26,    27,    28,
+      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
+      39,    40,    41,    -1,    43,    44,    45,    46,    47,    48,
+      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
+      59,    60,    -1,    -1,    -1,    64,    65,    66,    67,    68,
+      69,    70,    71,    -1,    -1,    74,    75,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   285,   286,    -1,    -1,   289,
-     290,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   307,    -1,    -1,
-      -1,   311,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   325,    -1,    -1,    -1,    -1,
-     330,     3,     4,     5,     6,     7,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,    -1,    18,    19,    20,    21,
-      -1,    -1,    -1,    25,    26,    27,    28,    29,    30,    31,
-      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
-      -1,    43,    44,    45,    46,    47,    48,    49,    50,    51,
-      52,    53,    54,    55,    56,    57,    58,    59,    60,    -1,
-      -1,    -1,    64,    65,    66,    67,    68,    69,    70,    -1,
-      -1,    73,    74,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      92,    -1,    -1,    -1,    96,    97,    -1,    -1,    -1,    -1,
-     102,   103,   104,    -1,   106,     3,     4,     5,     6,     7,
-       8,     9,    10,    11,    12,    13,    14,    15,    16,    -1,
-      18,    19,    20,    21,    -1,    -1,    -1,    25,    26,    27,
-      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
-      38,    39,    40,    41,    -1,    43,    44,    45,    46,    47,
-      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
-      58,    59,    60,    -1,    -1,    -1,    64,    65,    66,    67,
-      68,    69,    70,    -1,    -1,    73,    74,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    92,    -1,    -1,    -1,    96,    97,
-      -1,    -1,    -1,    -1,   102,   103,   104,    -1,   106,     3,
+      -1,    -1,    -1,    -1,    93,    -1,    -1,    -1,    97,    98,
+      -1,    -1,    -1,    -1,   103,   104,   105,    -1,   107,     3,
        4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
       14,    15,    16,    -1,    18,    19,    20,    21,    -1,    -1,
       -1,    25,    26,    27,    28,    29,    30,    31,    32,    33,
       34,    35,    36,    37,    38,    39,    40,    41,    -1,    43,
       44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
       54,    55,    56,    57,    58,    59,    60,    -1,    -1,    -1,
-      64,    65,    66,    67,    68,    69,    70,    -1,    -1,    73,
-      74,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    92,    -1,
-      -1,    -1,    96,    -1,    -1,    -1,    -1,    -1,   102,   103,
-     104,    -1,   106,     3,     4,     5,     6,     7,     8,     9,
-      10,    11,    12,    13,    14,    15,    16,    -1,    18,    19,
-      20,    21,    -1,    -1,    -1,    25,    26,    27,    28,    29,
-      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
-      40,    41,    -1,    43,    44,    45,    46,    47,    48,    49,
-      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
-      60,    -1,    -1,    -1,    64,    65,    66,    67,    68,    69,
-      70,    -1,    -1,    73,    74,    -1,    -1,    -1,    -1,    -1,
+      64,    65,    66,    67,    68,    69,    70,    71,    -1,    -1,
+      74,    75,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    93,
+      -1,    -1,    -1,    97,    98,    -1,    -1,    -1,    -1,   103,
+     104,   105,    -1,   107,     3,     4,     5,     6,     7,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    -1,    18,
+      19,    20,    21,    -1,    -1,    -1,    25,    26,    27,    28,
+      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
+      39,    40,    41,    -1,    43,    44,    45,    46,    47,    48,
+      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
+      59,    60,    -1,    -1,    -1,    64,    65,    66,    67,    68,
+      69,    70,    71,    -1,    -1,    74,    75,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    92,    -1,    -1,    -1,    96,    -1,    -1,    -1,
-      -1,    -1,   102,   103,   104,    -1,   106,     3,     4,     5,
-       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
-      16,    -1,    18,    19,    20,    21,    -1,    -1,    -1,    25,
-      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
-      36,    37,    38,    39,    40,    41,    -1,    43,    44,    45,
-      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
-      56,    57,    58,    59,    60,    -1,    -1,    -1,    64,    65,
-      66,    67,    68,    69,    70,    -1,    -1,    73,    74,    -1,
+      -1,    -1,    -1,    -1,    93,    -1,    -1,    -1,    97,    -1,
+      -1,    -1,    -1,    -1,   103,   104,   105,    -1,   107,     3,
+       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
+      14,    15,    16,    -1,    18,    19,    20,    21,    -1,    -1,
+      -1,    25,    26,    27,    28,    29,    30,    31,    32,    33,
+      34,    35,    36,    37,    38,    39,    40,    41,    -1,    43,
+      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
+      54,    55,    56,    57,    58,    59,    60,    -1,    -1,    -1,
+      64,    65,    66,    67,    68,    69,    70,    71,    -1,    -1,
+      74,    75,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    93,
+      -1,    -1,    -1,    97,    -1,    -1,    -1,    -1,    -1,   103,
+     104,   105,    -1,   107,     3,     4,     5,     6,     7,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    -1,    18,
+      19,    20,    21,    -1,    -1,    -1,    25,    26,    27,    28,
+      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
+      39,    40,    41,    -1,    43,    44,    45,    46,    47,    48,
+      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
+      59,    60,    -1,    -1,    -1,    64,    65,    66,    67,    68,
+      69,    70,    71,    -1,    -1,    74,    75,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    92,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   102,   103,   104,    -1,
-     106,     3,     4,     5,     6,     7,     8,     9,    10,    11,
-      12,    13,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    25,    26,    27,    28,    29,    30,    31,
-      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
-      -1,    43,    44,    45,    46,    47,    48,    49,    50,    51,
-      52,    53,    54,    55,    -1,    57,    58,    59,    60,    -1,
-      -1,    -1,    64,    65,    66,    67,    68,    69,    70,    -1,
-      -1,    73,    74,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,     3,     4,     5,     6,
-      92,     8,     9,    10,    11,    12,    13,    -1,    -1,    -1,
-     102,   103,   104,    -1,   106,    -1,    -1,    -1,    25,    26,
-      27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
-      37,    38,    39,    40,    41,    -1,    43,    44,    45,    46,
-      47,    48,    49,    50,    51,    52,    53,    54,    55,    -1,
-      57,    58,    59,    60,    -1,    -1,    -1,    64,    65,    66,
-      67,    68,    69,    70,    -1,    -1,    73,    74,    -1,    -1,
+      -1,    -1,    -1,    -1,    93,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   103,   104,   105,    -1,   107,     3,
+       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    92,    10,    11,    12,    13,
-      -1,    -1,    -1,    -1,    -1,    -1,   103,   104,    -1,   106,
+      -1,    25,    26,    27,    28,    29,    30,    31,    32,    33,
+      34,    35,    36,    37,    38,    39,    40,    41,    -1,    43,
+      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
+      54,    55,    -1,    57,    58,    59,    60,    -1,    -1,    -1,
+      64,    65,    66,    67,    68,    69,    70,    71,    -1,    -1,
+      74,    75,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,     3,     4,     5,     6,    93,
+       8,     9,    10,    11,    12,    13,    -1,    -1,    -1,   103,
+     104,   105,    -1,   107,    -1,    -1,    -1,    25,    26,    27,
+      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+      38,    39,    40,    41,    -1,    43,    44,    45,    46,    47,
+      48,    49,    50,    51,    52,    53,    54,    55,    -1,    57,
+      58,    59,    60,    -1,    -1,    -1,    64,    65,    66,    67,
+      68,    69,    70,    71,    -1,    -1,    74,    75,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    93,    10,    11,    12,    13,
+      -1,    -1,    -1,    -1,    -1,    -1,   104,   105,    -1,   107,
       -1,    25,    26,    27,    28,    29,    30,    31,    32,    33,
       34,    35,    36,    37,    38,    39,    -1,    -1,    -1,    -1,
       -1,    45,    46,    47,    48,    49,    50,    -1,    -1,    -1,
       54,    55,    -1,    57,    58,    59,    60,    -1,    -1,    -1,
-      64,    65,    66,    67,    68,    69,    70,    -1,    -1,    73,
-      74,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    92,    -1,
-      -1,    95,    10,    11,    12,    13,    -1,    -1,    -1,   103,
-     104,    -1,   106,    -1,    -1,    -1,    -1,    25,    26,    27,
-      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
-      38,    39,    -1,    -1,    -1,    -1,    -1,    45,    46,    47,
-      48,    49,    50,    -1,    -1,    -1,    54,    55,    -1,    57,
-      58,    59,    60,    -1,    -1,    -1,    64,    65,    66,    67,
-      68,    69,    70,    -1,    -1,    73,    74,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    92,    10,    11,    12,    13,    -1,
-      -1,    -1,    -1,    -1,   102,   103,   104,    -1,   106,    -1,
-      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-      35,    36,    37,    38,    39,    -1,    -1,    -1,    -1,    -1,
-      45,    46,    47,    48,    49,    50,    -1,    -1,    -1,    54,
-      55,    -1,    57,    58,    59,    60,    -1,    -1,    -1,    64,
-      65,    66,    67,    68,    69,    70,    -1,    -1,    73,    74,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    92,    -1,    -1,
-      95,    10,    11,    12,    13,    -1,    -1,    -1,   103,   104,
-      -1,   106,    -1,    -1,    -1,    -1,    25,    26,    27,    28,
-      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
-      39,    -1,    -1,    -1,    -1,    -1,    45,    46,    47,    48,
-      49,    50,    -1,    -1,    -1,    54,    55,    -1,    57,    58,
-      59,    60,    -1,    -1,    -1,    64,    65,    66,    67,    68,
-      69,    70,    -1,    -1,    73,    74,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    92,    10,    11,    12,    13,    -1,    -1,
-      -1,    -1,    -1,    -1,   103,   104,    -1,   106,    -1,    25,
-      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
-      36,    37,    38,    39,    -1,    -1,    -1,    -1,    -1,    45,
-      46,    47,    48,    49,    50,    -1,    -1,    -1,    54,    55,
-      -1,    57,    58,    59,    60,    -1,    -1,    -1,    64,    65,
-      66,    67,    68,    69,    70,    -1,    -1,    73,    74,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,     3,     4,     5,     6,    92,     8,     9,    10,
-      11,    12,    13,    -1,    -1,    -1,    -1,   103,   104,    -1,
-     106,    -1,    -1,    -1,    25,    26,    27,    28,    29,    30,
-      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
-      41,    -1,    43,    44,    45,    46,    47,    48,    49,    50,
-      51,    52,    53,    54,    55,    -1,    57,    58,    59,    60,
-      -1,    -1,    -1,    -1,    65,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,     3,     4,     5,     6,    -1,
-       8,     9,    10,    11,    12,    13,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    97,    25,    26,    27,
-      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
-      38,    39,    40,    41,    -1,    43,    44,    45,    46,    47,
-      48,    49,    50,    51,    52,    53,    54,    55,    -1,    57,
-      58,    59,    60,    -1,    -1,    -1,    -1,    65,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,     4,
-       5,     6,    -1,     8,     9,    10,    11,    12,    13,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    97,
-      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-      35,    36,    37,    38,    39,    40,    41,    -1,    43,    44,
-      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
-      55,    -1,    57,    58,    59,    60,    -1,    -1,    -1,    -1,
-      65,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     0,    -1,
-      -1,     3,     4,     5,     6,     7,     8,     9,    10,    11,
-      12,    13,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    97,    25,    26,    27,    28,    29,    30,    31,
-      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
-      -1,    43,    44,    45,    46,    47,    48,    49,    50,    51,
-      52,    53,    54,    55,    -1,    57,    58,    59,    60,    -1,
-      -1,    -1,    -1,    65,     3,     4,     5,     6,     7,     8,
-       9,    10,    11,    12,    13,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    25,    26,    27,    28,
-      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
-      39,    40,    41,    -1,    43,    44,    45,    46,    47,    48,
-      49,    50,    51,    52,    53,    54,    55,    -1,    57,    58,
-      59,    60,     3,     4,     5,     6,    65,     8,     9,    10,
-      11,    12,    13,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    25,    26,    27,    28,    29,    30,
-      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
-      41,    -1,    43,    44,    45,    46,    47,    48,    49,    50,
-      51,    52,    53,    54,    55,    -1,    57,    58,    59,    60,
-       4,     5,     6,    -1,    65,    -1,    10,    11,    12,    13,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    25,    26,    27,    28,    29,    30,    31,    32,    33,
-      34,    35,    36,    37,    38,    39,    -1,    -1,    -1,    -1,
-      -1,    45,    46,    47,    48,    49,    50,    -1,    -1,    -1,
-      54,    55,    -1,    57,    58,    59,    60,     4,     5,     6,
-      64,    65,    -1,    10,    11,    12,    13,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    25,    26,
+      -1,    65,    66,    67,    68,    69,    70,    71,    -1,    -1,
+      74,    75,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    93,
+      -1,    -1,    96,    10,    11,    12,    13,    -1,    -1,    -1,
+     104,   105,    -1,   107,    -1,    -1,    -1,    -1,    25,    26,
       27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
       37,    38,    39,    -1,    -1,    -1,    -1,    -1,    45,    46,
       47,    48,    49,    50,    -1,    -1,    -1,    54,    55,    -1,
-      57,    58,    59,    60,    10,    11,    12,    13,    65,    -1,
+      57,    58,    59,    60,    -1,    -1,    -1,    -1,    65,    66,
+      67,    68,    69,    70,    71,    -1,    -1,    74,    75,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    93,    10,    11,    12,
+      13,    -1,    -1,    -1,    -1,    -1,   103,   104,   105,    -1,
+     107,    -1,    25,    26,    27,    28,    29,    30,    31,    32,
+      33,    34,    35,    36,    37,    38,    39,    -1,    -1,    -1,
+      -1,    -1,    45,    46,    47,    48,    49,    50,    -1,    -1,
+      -1,    54,    55,    -1,    57,    58,    59,    60,    -1,    -1,
+      -1,    -1,    65,    66,    67,    68,    69,    70,    71,    -1,
+      -1,    74,    75,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      93,    -1,    -1,    96,    10,    11,    12,    13,    -1,    -1,
+      -1,   104,   105,    -1,   107,    -1,    -1,    -1,    -1,    25,
+      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
+      36,    37,    38,    39,    -1,    -1,    -1,    -1,    -1,    45,
+      46,    47,    48,    49,    50,    -1,    -1,    -1,    54,    55,
+      -1,    57,    58,    59,    60,    -1,    -1,    -1,    -1,    65,
+      66,    67,    68,    69,    70,    71,    -1,    -1,    74,    75,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    93,    10,    11,
+      12,    13,    -1,    -1,    -1,    -1,    -1,    -1,   104,   105,
+      -1,   107,    -1,    25,    26,    27,    28,    29,    30,    31,
+      32,    33,    34,    35,    36,    37,    38,    39,    -1,    -1,
+      -1,    -1,    -1,    45,    46,    47,    48,    49,    50,    -1,
+      -1,    -1,    54,    55,    -1,    57,    58,    59,    60,    -1,
+      -1,    -1,    -1,    65,    66,    67,    68,    69,    70,    71,
+      -1,    -1,    74,    75,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,     4,     5,
+       6,    93,     8,     9,    10,    11,    12,    13,    -1,    -1,
+      -1,    -1,   104,   105,    -1,   107,    -1,    -1,    -1,    25,
+      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
+      36,    37,    38,    39,    40,    41,    -1,    43,    44,    45,
+      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
+      -1,    57,    58,    59,    60,    -1,    -1,    -1,    64,    -1,
+      66,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,     3,     4,     5,     6,    -1,     8,     9,    10,    11,
+      12,    13,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    98,    25,    26,    27,    28,    29,    30,    31,
+      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
+      -1,    43,    44,    45,    46,    47,    48,    49,    50,    51,
+      52,    53,    54,    55,    -1,    57,    58,    59,    60,    -1,
+      -1,    -1,    64,    -1,    66,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,     0,    -1,    -1,     3,     4,     5,     6,     7,
+       8,     9,    10,    11,    12,    13,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    98,    25,    26,    27,
+      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+      38,    39,    40,    41,    -1,    43,    44,    45,    46,    47,
+      48,    49,    50,    51,    52,    53,    54,    55,    -1,    57,
+      58,    59,    60,    -1,    -1,    -1,    64,    -1,    66,     3,
+       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    25,    26,    27,    28,    29,    30,    31,    32,    33,
+      34,    35,    36,    37,    38,    39,    40,    41,    -1,    43,
+      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
+      54,    55,    -1,    57,    58,    59,    60,    -1,    -1,    -1,
+      64,    -1,    66,     3,     4,     5,     6,    -1,     8,     9,
+      10,    11,    12,    13,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    25,    26,    27,    28,    29,
+      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+      40,    41,    -1,    43,    44,    45,    46,    47,    48,    49,
+      50,    51,    52,    53,    54,    55,    -1,    57,    58,    59,
+      60,     4,     5,     6,    64,    -1,    66,    10,    11,    12,
+      13,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    25,    26,    27,    28,    29,    30,    31,    32,
+      33,    34,    35,    36,    37,    38,    39,    -1,    -1,    -1,
+      -1,    -1,    45,    46,    47,    48,    49,    50,    -1,    -1,
+      -1,    54,    55,    -1,    57,    58,    59,    60,     4,     5,
+       6,    -1,    65,    66,    10,    11,    12,    13,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    25,
       26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
       36,    37,    38,    39,    -1,    -1,    -1,    -1,    -1,    45,
       46,    47,    48,    49,    50,    -1,    -1,    -1,    54,    55,
-      -1,    57,    58,    59,    60,    -1,    -1,    -1,    64,    65,
-      10,    11,    12,    13,    70,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    25,    26,    27,    28,    29,
-      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
-      -1,    -1,    -1,    -1,    -1,    45,    46,    47,    48,    49,
-      50,    -1,    -1,    -1,    54,    55,    -1,    57,    58,    59,
-      60,    -1,    -1,    -1,    -1,    65
+      -1,    57,    58,    59,    60,    10,    11,    12,    13,    -1,
+      66,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
+      35,    36,    37,    38,    39,    -1,    -1,    -1,    -1,    -1,
+      45,    46,    47,    48,    49,    50,    -1,    -1,    -1,    54,
+      55,    -1,    57,    58,    59,    60,    10,    11,    12,    13,
+      65,    66,    -1,    -1,    -1,    -1,    71,    -1,    -1,    -1,
+      -1,    25,    26,    27,    28,    29,    30,    31,    32,    33,
+      34,    35,    36,    37,    38,    39,    -1,    -1,    -1,    -1,
+      -1,    45,    46,    47,    48,    49,    50,    -1,    -1,    -1,
+      54,    55,    -1,    57,    58,    59,    60,    -1,    -1,    -1,
+      -1,    -1,    66
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -1447,37 +1452,38 @@
       12,    13,    25,    26,    27,    28,    29,    30,    31,    32,
       33,    34,    35,    36,    37,    38,    39,    40,    41,    43,
       44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
-      54,    55,    57,    58,    59,    60,    65,   147,   148,   149,
-     150,   151,   156,   157,   158,   159,   161,   162,   163,   164,
-     165,   166,   167,   199,   200,   201,    44,    64,   164,    40,
-      41,    64,    96,   102,   202,    93,    99,     9,    40,    41,
-      42,   153,   154,   160,    99,   102,    64,   162,    64,   146,
-     163,   165,    94,     0,   200,   165,    96,   169,    96,   185,
-     153,   152,   155,   163,   154,    64,    92,    94,   101,    96,
-       3,   161,   163,   170,   171,    64,    66,    67,    68,    69,
-      70,    73,    74,    92,   103,   104,   106,   117,   118,   119,
-     121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
-     131,   132,   133,   134,   135,   136,   137,   138,   139,   140,
-     141,   145,   166,   102,   168,   170,    14,    15,    16,    18,
-      19,    20,    21,    56,    96,    97,   102,   128,   141,   142,
-     144,   147,   148,   166,   175,   176,   177,   178,   186,   187,
-     188,   191,   198,    64,   152,   155,    94,   101,    95,   145,
-     142,   174,   163,    64,   172,   173,    97,   171,   128,   128,
-     144,    73,    74,    94,    98,    93,    93,    99,    55,   142,
-      92,   128,   107,   108,   104,   106,    75,    76,   110,   111,
-      77,    78,    79,    81,    80,   115,    95,   170,    97,   102,
-     102,   193,    92,    92,   102,   102,   144,    92,    97,   179,
-      82,    83,    84,    91,   101,   143,    99,   102,    97,   176,
-      94,    95,   145,   174,    95,   172,    94,    99,   102,    64,
-     102,    93,   120,   144,    64,    70,   123,   142,   128,   128,
-     130,   130,   132,   132,   132,   132,   133,   133,   137,   138,
-     139,   144,    97,   182,   183,   184,   194,   144,   102,   192,
-     186,   142,   142,   145,    95,   102,   145,   173,    94,   102,
-      95,   100,    56,   185,   177,   175,   187,   195,    93,   144,
-     158,   161,   190,   180,    95,    95,   145,   142,    92,   190,
-     196,   197,   182,   189,    64,    93,    97,    95,   144,   102,
-      93,    17,   101,   177,   181,   185,   102,    93,   144,   181,
-     182,   174,   102
+      54,    55,    57,    58,    59,    60,    64,    66,   148,   149,
+     150,   151,   152,   157,   158,   159,   160,   162,   163,   164,
+     165,   166,   169,   170,   171,   203,   204,   205,    44,    65,
+     165,    40,    41,    65,    97,    93,   103,   206,    94,   100,
+       9,    40,    41,    42,   154,   155,   161,   100,   103,    65,
+     163,    65,   147,   164,   169,   163,    95,     0,   204,   169,
+      97,   173,    65,   167,   168,    97,   189,   154,   153,   156,
+     164,   155,    65,    93,    95,   102,    97,     3,   162,   164,
+     174,   175,    65,    67,    68,    69,    70,    71,    74,    75,
+      93,   104,   105,   107,   118,   119,   120,   122,   123,   124,
+     125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
+     135,   136,   137,   138,   139,   140,   141,   142,   146,   170,
+     103,   172,   174,   102,    94,   100,    14,    15,    16,    18,
+      19,    20,    21,    56,    97,    98,   103,   129,   142,   143,
+     145,   148,   149,   170,   179,   180,   181,   182,   190,   191,
+     192,   195,   202,    65,   153,   156,    95,   102,    96,   146,
+     143,   178,   164,    65,   176,   177,    98,   175,   129,   129,
+     145,    74,    75,    95,    99,    94,    94,   100,    55,   143,
+      93,   129,   108,   109,   105,   107,    76,    77,   111,   112,
+      78,    79,    80,    82,    81,   116,    96,   174,    98,    68,
+      69,   168,   103,   103,   197,    93,    93,   103,   103,   145,
+      93,    98,   183,    83,    84,    85,    92,   102,   144,   100,
+     103,    98,   180,    95,    96,   146,   178,    96,   176,    95,
+     100,   103,    65,   103,    94,   121,   145,    65,    71,   124,
+     143,   129,   129,   131,   131,   133,   133,   133,   133,   134,
+     134,   138,   139,   140,   145,    98,   186,   187,   188,   198,
+     145,   103,   196,   190,   143,   143,   146,    96,   103,   146,
+     177,    95,   103,    96,   101,    56,   189,   181,   179,   191,
+     199,    94,   145,   159,   162,   194,   184,    96,    96,   146,
+     143,    93,   194,   200,   201,   186,   193,    65,    94,    98,
+      96,   145,   103,    94,    17,   102,   181,   185,   189,   103,
+      94,   145,   185,   186,   178,   103
 };
 
 #define yyerrok		(yyerrstatus = 0)
@@ -3730,12 +3736,28 @@
   case 118:
 
     {
+        (yyval.interm.type).qualifier = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+        (yyval.interm.type).layoutQualifier = (yyvsp[(1) - (1)].interm.layoutQualifier);
+    }
+    break;
+
+  case 119:
+
+    {
+        (yyval.interm.type).setBasic(EbtVoid, (yyvsp[(2) - (2)].interm.type).qualifier, (yyvsp[(2) - (2)].interm.type).line);
+        (yyval.interm.type).layoutQualifier = (yyvsp[(1) - (2)].interm.layoutQualifier);
+    }
+    break;
+
+  case 120:
+
+    {
         (yyval.interm.type).qualifier = EvqConst;
         (yyval.interm.type).line = (yyvsp[(1) - (1)].lex).line;
     }
     break;
 
-  case 119:
+  case 121:
 
     {
         ES3_ONLY("in", (yyvsp[(1) - (1)].lex).line, "storage qualifier");
@@ -3744,7 +3766,7 @@
     }
     break;
 
-  case 120:
+  case 122:
 
     {
         ES3_ONLY("out", (yyvsp[(1) - (1)].lex).line, "storage qualifier");
@@ -3753,7 +3775,7 @@
     }
     break;
 
-  case 121:
+  case 123:
 
     {
         ES3_ONLY("centroid in", (yyvsp[(1) - (2)].lex).line, "storage qualifier");
@@ -3762,7 +3784,7 @@
     }
     break;
 
-  case 122:
+  case 124:
 
     {
         ES3_ONLY("centroid out", (yyvsp[(1) - (2)].lex).line, "storage qualifier");
@@ -3771,7 +3793,7 @@
     }
     break;
 
-  case 123:
+  case 125:
 
     {
         if (context->globalErrorCheck((yyvsp[(1) - (1)].lex).line, context->symbolTable.atGlobalLevel(), "uniform"))
@@ -3781,7 +3803,7 @@
     }
     break;
 
-  case 124:
+  case 126:
 
     {
         (yyval.interm.type) = (yyvsp[(1) - (1)].interm.type);
@@ -3795,7 +3817,7 @@
     }
     break;
 
-  case 125:
+  case 127:
 
     {
         (yyval.interm.type) = (yyvsp[(2) - (2)].interm.type);
@@ -3803,35 +3825,78 @@
     }
     break;
 
-  case 126:
+  case 128:
 
     {
         (yyval.interm.precision) = EbpHigh;
     }
     break;
 
-  case 127:
+  case 129:
 
     {
         (yyval.interm.precision) = EbpMedium;
     }
     break;
 
-  case 128:
+  case 130:
 
     {
         (yyval.interm.precision) = EbpLow;
     }
     break;
 
-  case 129:
+  case 131:
+
+    {
+        ES3_ONLY("layout", (yyvsp[(1) - (4)].lex).line, "qualifier");
+        (yyval.interm.layoutQualifier) = (yyvsp[(3) - (4)].interm.layoutQualifier);
+    }
+    break;
+
+  case 132:
+
+    {
+        (yyval.interm.layoutQualifier) = context->makeLayoutQualifierFromId((yyvsp[(1) - (1)].interm.layoutQualifierId));
+    }
+    break;
+
+  case 133:
+
+    {
+        (yyval.interm.layoutQualifier) = context->extendLayoutQualifier((yyvsp[(1) - (3)].interm.layoutQualifier), (yyvsp[(3) - (3)].interm.layoutQualifierId));
+    }
+    break;
+
+  case 134:
+
+    {
+        (yyval.interm.layoutQualifierId) = context->addLayoutQualifierId(*(yyvsp[(1) - (1)].lex).string, (yyvsp[(1) - (1)].lex).line);
+    }
+    break;
+
+  case 135:
+
+    {
+        (yyval.interm.layoutQualifierId) = context->addLayoutQualifierId(*(yyvsp[(1) - (3)].lex).string, (yyvsp[(1) - (3)].lex).line, *(yyvsp[(3) - (3)].lex).string, (yyvsp[(3) - (3)].lex).i, (yyvsp[(3) - (3)].lex).line);
+    }
+    break;
+
+  case 136:
+
+    {
+        (yyval.interm.layoutQualifierId) = context->addLayoutQualifierId(*(yyvsp[(1) - (3)].lex).string, (yyvsp[(1) - (3)].lex).line, *(yyvsp[(3) - (3)].lex).string, (yyvsp[(3) - (3)].lex).i, (yyvsp[(3) - (3)].lex).line);
+    }
+    break;
+
+  case 137:
 
     {
         (yyval.interm.type) = (yyvsp[(1) - (1)].interm.type);
     }
     break;
 
-  case 130:
+  case 138:
 
     {
         (yyval.interm.type) = (yyvsp[(1) - (4)].interm.type);
@@ -3847,7 +3912,7 @@
     }
     break;
 
-  case 131:
+  case 139:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -3855,80 +3920,11 @@
     }
     break;
 
-  case 132:
-
-    {
-        TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
-        (yyval.interm.type).setBasic(EbtFloat, qual, (yyvsp[(1) - (1)].lex).line);
-    }
-    break;
-
-  case 133:
-
-    {
-        TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
-        (yyval.interm.type).setBasic(EbtInt, qual, (yyvsp[(1) - (1)].lex).line);
-    }
-    break;
-
-  case 134:
-
-    {
-        TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
-        (yyval.interm.type).setBasic(EbtUInt, qual, (yyvsp[(1) - (1)].lex).line);
-    }
-    break;
-
-  case 135:
-
-    {
-        TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
-        (yyval.interm.type).setBasic(EbtBool, qual, (yyvsp[(1) - (1)].lex).line);
-    }
-    break;
-
-  case 136:
-
-    {
-        TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
-        (yyval.interm.type).setBasic(EbtFloat, qual, (yyvsp[(1) - (1)].lex).line);
-        (yyval.interm.type).setAggregate(2);
-    }
-    break;
-
-  case 137:
-
-    {
-        TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
-        (yyval.interm.type).setBasic(EbtFloat, qual, (yyvsp[(1) - (1)].lex).line);
-        (yyval.interm.type).setAggregate(3);
-    }
-    break;
-
-  case 138:
-
-    {
-        TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
-        (yyval.interm.type).setBasic(EbtFloat, qual, (yyvsp[(1) - (1)].lex).line);
-        (yyval.interm.type).setAggregate(4);
-    }
-    break;
-
-  case 139:
-
-    {
-        TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
-        (yyval.interm.type).setBasic(EbtBool, qual, (yyvsp[(1) - (1)].lex).line);
-        (yyval.interm.type).setAggregate(2);
-    }
-    break;
-
   case 140:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
-        (yyval.interm.type).setBasic(EbtBool, qual, (yyvsp[(1) - (1)].lex).line);
-        (yyval.interm.type).setAggregate(3);
+        (yyval.interm.type).setBasic(EbtFloat, qual, (yyvsp[(1) - (1)].lex).line);
     }
     break;
 
@@ -3936,8 +3932,7 @@
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
-        (yyval.interm.type).setBasic(EbtBool, qual, (yyvsp[(1) - (1)].lex).line);
-        (yyval.interm.type).setAggregate(4);
+        (yyval.interm.type).setBasic(EbtInt, qual, (yyvsp[(1) - (1)].lex).line);
     }
     break;
 
@@ -3945,8 +3940,7 @@
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
-        (yyval.interm.type).setBasic(EbtInt, qual, (yyvsp[(1) - (1)].lex).line);
-        (yyval.interm.type).setAggregate(2);
+        (yyval.interm.type).setBasic(EbtUInt, qual, (yyvsp[(1) - (1)].lex).line);
     }
     break;
 
@@ -3954,12 +3948,83 @@
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+        (yyval.interm.type).setBasic(EbtBool, qual, (yyvsp[(1) - (1)].lex).line);
+    }
+    break;
+
+  case 144:
+
+    {
+        TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+        (yyval.interm.type).setBasic(EbtFloat, qual, (yyvsp[(1) - (1)].lex).line);
+        (yyval.interm.type).setAggregate(2);
+    }
+    break;
+
+  case 145:
+
+    {
+        TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+        (yyval.interm.type).setBasic(EbtFloat, qual, (yyvsp[(1) - (1)].lex).line);
+        (yyval.interm.type).setAggregate(3);
+    }
+    break;
+
+  case 146:
+
+    {
+        TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+        (yyval.interm.type).setBasic(EbtFloat, qual, (yyvsp[(1) - (1)].lex).line);
+        (yyval.interm.type).setAggregate(4);
+    }
+    break;
+
+  case 147:
+
+    {
+        TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+        (yyval.interm.type).setBasic(EbtBool, qual, (yyvsp[(1) - (1)].lex).line);
+        (yyval.interm.type).setAggregate(2);
+    }
+    break;
+
+  case 148:
+
+    {
+        TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+        (yyval.interm.type).setBasic(EbtBool, qual, (yyvsp[(1) - (1)].lex).line);
+        (yyval.interm.type).setAggregate(3);
+    }
+    break;
+
+  case 149:
+
+    {
+        TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+        (yyval.interm.type).setBasic(EbtBool, qual, (yyvsp[(1) - (1)].lex).line);
+        (yyval.interm.type).setAggregate(4);
+    }
+    break;
+
+  case 150:
+
+    {
+        TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+        (yyval.interm.type).setBasic(EbtInt, qual, (yyvsp[(1) - (1)].lex).line);
+        (yyval.interm.type).setAggregate(2);
+    }
+    break;
+
+  case 151:
+
+    {
+        TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
         (yyval.interm.type).setBasic(EbtInt, qual, (yyvsp[(1) - (1)].lex).line);
         (yyval.interm.type).setAggregate(3);
     }
     break;
 
-  case 144:
+  case 152:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -3968,7 +4033,7 @@
     }
     break;
 
-  case 145:
+  case 153:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -3977,7 +4042,7 @@
     }
     break;
 
-  case 146:
+  case 154:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -3986,7 +4051,7 @@
     }
     break;
 
-  case 147:
+  case 155:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -3995,7 +4060,7 @@
     }
     break;
 
-  case 148:
+  case 156:
 
     {
         FRAG_VERT_ONLY("mat2", (yyvsp[(1) - (1)].lex).line);
@@ -4005,7 +4070,7 @@
     }
     break;
 
-  case 149:
+  case 157:
 
     {
         FRAG_VERT_ONLY("mat3", (yyvsp[(1) - (1)].lex).line);
@@ -4015,7 +4080,7 @@
     }
     break;
 
-  case 150:
+  case 158:
 
     {
         FRAG_VERT_ONLY("mat4", (yyvsp[(1) - (1)].lex).line);
@@ -4025,7 +4090,7 @@
     }
     break;
 
-  case 151:
+  case 159:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -4034,7 +4099,7 @@
     }
     break;
 
-  case 152:
+  case 160:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -4043,7 +4108,7 @@
     }
     break;
 
-  case 153:
+  case 161:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -4052,7 +4117,7 @@
     }
     break;
 
-  case 154:
+  case 162:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -4061,7 +4126,7 @@
     }
     break;
 
-  case 155:
+  case 163:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -4070,7 +4135,7 @@
     }
     break;
 
-  case 156:
+  case 164:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -4079,7 +4144,7 @@
     }
     break;
 
-  case 157:
+  case 165:
 
     {
         FRAG_VERT_ONLY("sampler2D", (yyvsp[(1) - (1)].lex).line);
@@ -4088,7 +4153,7 @@
     }
     break;
 
-  case 158:
+  case 166:
 
     {
         FRAG_VERT_ONLY("samplerCube", (yyvsp[(1) - (1)].lex).line);
@@ -4097,7 +4162,7 @@
     }
     break;
 
-  case 159:
+  case 167:
 
     {
         if (!context->supportsExtension("GL_OES_EGL_image_external")) {
@@ -4110,7 +4175,7 @@
     }
     break;
 
-  case 160:
+  case 168:
 
     {
         if (!context->supportsExtension("GL_ARB_texture_rectangle")) {
@@ -4123,7 +4188,7 @@
     }
     break;
 
-  case 161:
+  case 169:
 
     {
         FRAG_VERT_ONLY("struct", (yyvsp[(1) - (1)].interm.type).line);
@@ -4132,7 +4197,7 @@
     }
     break;
 
-  case 162:
+  case 170:
 
     {
         //
@@ -4146,38 +4211,38 @@
     }
     break;
 
-  case 163:
+  case 171:
 
     { if (context->enterStructDeclaration((yyvsp[(2) - (3)].lex).line, *(yyvsp[(2) - (3)].lex).string)) context->recover(); }
     break;
 
-  case 164:
+  case 172:
 
     {
         (yyval.interm.type) = context->addStructure((yyvsp[(1) - (6)].lex).line, (yyvsp[(2) - (6)].lex).line, *(yyvsp[(2) - (6)].lex).string, (yyvsp[(5) - (6)].interm.typeList));
     }
     break;
 
-  case 165:
+  case 173:
 
     { if (context->enterStructDeclaration((yyvsp[(2) - (2)].lex).line, *(yyvsp[(2) - (2)].lex).string)) context->recover(); }
     break;
 
-  case 166:
+  case 174:
 
     {
         (yyval.interm.type) = context->addStructure((yyvsp[(1) - (5)].lex).line, 0, "", (yyvsp[(4) - (5)].interm.typeList));
     }
     break;
 
-  case 167:
+  case 175:
 
     {
         (yyval.interm.typeList) = (yyvsp[(1) - (1)].interm.typeList);
     }
     break;
 
-  case 168:
+  case 176:
 
     {
         (yyval.interm.typeList) = (yyvsp[(1) - (2)].interm.typeList);
@@ -4193,14 +4258,14 @@
     }
     break;
 
-  case 169:
+  case 177:
 
     {
         (yyval.interm.typeList) = context->addStructDeclaratorList((yyvsp[(1) - (3)].interm.type), (yyvsp[(2) - (3)].interm.typeList));
     }
     break;
 
-  case 170:
+  case 178:
 
     {
         // ES3 Only, but errors should be handled elsewhere
@@ -4209,7 +4274,7 @@
     }
     break;
 
-  case 171:
+  case 179:
 
     {
         (yyval.interm.typeList) = NewPoolTTypeList();
@@ -4217,14 +4282,14 @@
     }
     break;
 
-  case 172:
+  case 180:
 
     {
         (yyval.interm.typeList)->push_back((yyvsp[(3) - (3)].interm.typeLine));
     }
     break;
 
-  case 173:
+  case 181:
 
     {
         if (context->reservedErrorCheck((yyvsp[(1) - (1)].lex).line, *(yyvsp[(1) - (1)].lex).string))
@@ -4236,7 +4301,7 @@
     }
     break;
 
-  case 174:
+  case 182:
 
     {
         if (context->reservedErrorCheck((yyvsp[(1) - (4)].lex).line, *(yyvsp[(1) - (4)].lex).string))
@@ -4253,75 +4318,29 @@
     }
     break;
 
-  case 175:
+  case 183:
 
     { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); }
     break;
 
-  case 176:
-
-    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
-    break;
-
-  case 177:
-
-    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermAggregate); }
-    break;
-
-  case 178:
-
-    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
-    break;
-
-  case 179:
-
-    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
-    break;
-
-  case 180:
-
-    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
-    break;
-
-  case 181:
-
-    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
-    break;
-
-  case 182:
-
-    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
-    break;
-
-  case 183:
-
-    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
-    break;
-
   case 184:
 
-    { (yyval.interm.intermAggregate) = 0; }
+    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
     break;
 
   case 185:
 
-    { context->symbolTable.push(); }
+    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermAggregate); }
     break;
 
   case 186:
 
-    { context->symbolTable.pop(); }
+    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
     break;
 
   case 187:
 
-    {
-        if ((yyvsp[(3) - (5)].interm.intermAggregate) != 0) {
-            (yyvsp[(3) - (5)].interm.intermAggregate)->setOp(EOpSequence);
-            (yyvsp[(3) - (5)].interm.intermAggregate)->setEndLine((yyvsp[(5) - (5)].lex).line);
-        }
-        (yyval.interm.intermAggregate) = (yyvsp[(3) - (5)].interm.intermAggregate);
-    }
+    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
     break;
 
   case 188:
@@ -4336,32 +4355,78 @@
 
   case 190:
 
-    { context->symbolTable.push(); }
+    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
     break;
 
   case 191:
 
-    { context->symbolTable.pop(); (yyval.interm.intermNode) = (yyvsp[(2) - (2)].interm.intermNode); }
+    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
     break;
 
   case 192:
 
-    { context->symbolTable.push(); }
+    { (yyval.interm.intermAggregate) = 0; }
     break;
 
   case 193:
 
-    { context->symbolTable.pop(); (yyval.interm.intermNode) = (yyvsp[(2) - (2)].interm.intermNode); }
+    { context->symbolTable.push(); }
     break;
 
   case 194:
 
+    { context->symbolTable.pop(); }
+    break;
+
+  case 195:
+
+    {
+        if ((yyvsp[(3) - (5)].interm.intermAggregate) != 0) {
+            (yyvsp[(3) - (5)].interm.intermAggregate)->setOp(EOpSequence);
+            (yyvsp[(3) - (5)].interm.intermAggregate)->setEndLine((yyvsp[(5) - (5)].lex).line);
+        }
+        (yyval.interm.intermAggregate) = (yyvsp[(3) - (5)].interm.intermAggregate);
+    }
+    break;
+
+  case 196:
+
+    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
+    break;
+
+  case 197:
+
+    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
+    break;
+
+  case 198:
+
+    { context->symbolTable.push(); }
+    break;
+
+  case 199:
+
+    { context->symbolTable.pop(); (yyval.interm.intermNode) = (yyvsp[(2) - (2)].interm.intermNode); }
+    break;
+
+  case 200:
+
+    { context->symbolTable.push(); }
+    break;
+
+  case 201:
+
+    { context->symbolTable.pop(); (yyval.interm.intermNode) = (yyvsp[(2) - (2)].interm.intermNode); }
+    break;
+
+  case 202:
+
     {
         (yyval.interm.intermNode) = 0;
     }
     break;
 
-  case 195:
+  case 203:
 
     {
         if ((yyvsp[(2) - (3)].interm.intermAggregate)) {
@@ -4372,31 +4437,31 @@
     }
     break;
 
-  case 196:
+  case 204:
 
     {
         (yyval.interm.intermAggregate) = context->intermediate.makeAggregate((yyvsp[(1) - (1)].interm.intermNode), 0);
     }
     break;
 
-  case 197:
+  case 205:
 
     {
         (yyval.interm.intermAggregate) = context->intermediate.growAggregate((yyvsp[(1) - (2)].interm.intermAggregate), (yyvsp[(2) - (2)].interm.intermNode), 0);
     }
     break;
 
-  case 198:
+  case 206:
 
     { (yyval.interm.intermNode) = 0; }
     break;
 
-  case 199:
+  case 207:
 
     { (yyval.interm.intermNode) = static_cast<TIntermNode*>((yyvsp[(1) - (2)].interm.intermTypedNode)); }
     break;
 
-  case 200:
+  case 208:
 
     {
         if (context->boolErrorCheck((yyvsp[(1) - (5)].lex).line, (yyvsp[(3) - (5)].interm.intermTypedNode)))
@@ -4405,7 +4470,7 @@
     }
     break;
 
-  case 201:
+  case 209:
 
     {
         (yyval.interm.nodePair).node1 = (yyvsp[(1) - (3)].interm.intermNode);
@@ -4413,7 +4478,7 @@
     }
     break;
 
-  case 202:
+  case 210:
 
     {
         (yyval.interm.nodePair).node1 = (yyvsp[(1) - (1)].interm.intermNode);
@@ -4421,7 +4486,7 @@
     }
     break;
 
-  case 203:
+  case 211:
 
     {
         (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode);
@@ -4430,7 +4495,7 @@
     }
     break;
 
-  case 204:
+  case 212:
 
     {
         TIntermNode* intermNode;
@@ -4448,12 +4513,12 @@
     }
     break;
 
-  case 205:
+  case 213:
 
     { context->symbolTable.push(); ++context->loopNestingLevel; }
     break;
 
-  case 206:
+  case 214:
 
     {
         context->symbolTable.pop();
@@ -4462,12 +4527,12 @@
     }
     break;
 
-  case 207:
+  case 215:
 
     { ++context->loopNestingLevel; }
     break;
 
-  case 208:
+  case 216:
 
     {
         if (context->boolErrorCheck((yyvsp[(8) - (8)].lex).line, (yyvsp[(6) - (8)].interm.intermTypedNode)))
@@ -4478,12 +4543,12 @@
     }
     break;
 
-  case 209:
+  case 217:
 
     { context->symbolTable.push(); ++context->loopNestingLevel; }
     break;
 
-  case 210:
+  case 218:
 
     {
         context->symbolTable.pop();
@@ -4492,35 +4557,35 @@
     }
     break;
 
-  case 211:
+  case 219:
 
     {
         (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode);
     }
     break;
 
-  case 212:
+  case 220:
 
     {
         (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode);
     }
     break;
 
-  case 213:
+  case 221:
 
     {
         (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode);
     }
     break;
 
-  case 214:
+  case 222:
 
     {
         (yyval.interm.intermTypedNode) = 0;
     }
     break;
 
-  case 215:
+  case 223:
 
     {
         (yyval.interm.nodePair).node1 = (yyvsp[(1) - (2)].interm.intermTypedNode);
@@ -4528,7 +4593,7 @@
     }
     break;
 
-  case 216:
+  case 224:
 
     {
         (yyval.interm.nodePair).node1 = (yyvsp[(1) - (3)].interm.intermTypedNode);
@@ -4536,7 +4601,7 @@
     }
     break;
 
-  case 217:
+  case 225:
 
     {
         if (context->loopNestingLevel <= 0) {
@@ -4547,7 +4612,7 @@
     }
     break;
 
-  case 218:
+  case 226:
 
     {
         if (context->loopNestingLevel <= 0) {
@@ -4558,7 +4623,7 @@
     }
     break;
 
-  case 219:
+  case 227:
 
     {
         (yyval.interm.intermNode) = context->intermediate.addBranch(EOpReturn, (yyvsp[(1) - (2)].lex).line);
@@ -4569,7 +4634,7 @@
     }
     break;
 
-  case 220:
+  case 228:
 
     {
         (yyval.interm.intermNode) = context->intermediate.addBranch(EOpReturn, (yyvsp[(2) - (3)].interm.intermTypedNode), (yyvsp[(1) - (3)].lex).line);
@@ -4584,7 +4649,7 @@
     }
     break;
 
-  case 221:
+  case 229:
 
     {
         FRAG_ONLY("discard", (yyvsp[(1) - (2)].lex).line);
@@ -4592,7 +4657,7 @@
     }
     break;
 
-  case 222:
+  case 230:
 
     {
         (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode);
@@ -4600,7 +4665,7 @@
     }
     break;
 
-  case 223:
+  case 231:
 
     {
         (yyval.interm.intermNode) = context->intermediate.growAggregate((yyvsp[(1) - (2)].interm.intermNode), (yyvsp[(2) - (2)].interm.intermNode), 0);
@@ -4608,21 +4673,21 @@
     }
     break;
 
-  case 224:
+  case 232:
 
     {
         (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode);
     }
     break;
 
-  case 225:
+  case 233:
 
     {
         (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode);
     }
     break;
 
-  case 226:
+  case 234:
 
     {
         TFunction* function = (yyvsp[(1) - (1)].interm).function;
@@ -4711,7 +4776,7 @@
     }
     break;
 
-  case 227:
+  case 235:
 
     {
         //?? Check that all paths return a value if return type != void ?
diff --git a/src/compiler/glslang_tab.h b/src/compiler/glslang_tab.h
index be471f1..ef0c0fa 100644
--- a/src/compiler/glslang_tab.h
+++ b/src/compiler/glslang_tab.h
@@ -107,58 +107,59 @@
      SAMPLER3D = 316,
      SAMPLER3DRECT = 317,
      SAMPLER2DSHADOW = 318,
-     IDENTIFIER = 319,
-     TYPE_NAME = 320,
-     FLOATCONSTANT = 321,
-     INTCONSTANT = 322,
-     UINTCONSTANT = 323,
-     BOOLCONSTANT = 324,
-     FIELD_SELECTION = 325,
-     LEFT_OP = 326,
-     RIGHT_OP = 327,
-     INC_OP = 328,
-     DEC_OP = 329,
-     LE_OP = 330,
-     GE_OP = 331,
-     EQ_OP = 332,
-     NE_OP = 333,
-     AND_OP = 334,
-     OR_OP = 335,
-     XOR_OP = 336,
-     MUL_ASSIGN = 337,
-     DIV_ASSIGN = 338,
-     ADD_ASSIGN = 339,
-     MOD_ASSIGN = 340,
-     LEFT_ASSIGN = 341,
-     RIGHT_ASSIGN = 342,
-     AND_ASSIGN = 343,
-     XOR_ASSIGN = 344,
-     OR_ASSIGN = 345,
-     SUB_ASSIGN = 346,
-     LEFT_PAREN = 347,
-     RIGHT_PAREN = 348,
-     LEFT_BRACKET = 349,
-     RIGHT_BRACKET = 350,
-     LEFT_BRACE = 351,
-     RIGHT_BRACE = 352,
-     DOT = 353,
-     COMMA = 354,
-     COLON = 355,
-     EQUAL = 356,
-     SEMICOLON = 357,
-     BANG = 358,
-     DASH = 359,
-     TILDE = 360,
-     PLUS = 361,
-     STAR = 362,
-     SLASH = 363,
-     PERCENT = 364,
-     LEFT_ANGLE = 365,
-     RIGHT_ANGLE = 366,
-     VERTICAL_BAR = 367,
-     CARET = 368,
-     AMPERSAND = 369,
-     QUESTION = 370
+     LAYOUT = 319,
+     IDENTIFIER = 320,
+     TYPE_NAME = 321,
+     FLOATCONSTANT = 322,
+     INTCONSTANT = 323,
+     UINTCONSTANT = 324,
+     BOOLCONSTANT = 325,
+     FIELD_SELECTION = 326,
+     LEFT_OP = 327,
+     RIGHT_OP = 328,
+     INC_OP = 329,
+     DEC_OP = 330,
+     LE_OP = 331,
+     GE_OP = 332,
+     EQ_OP = 333,
+     NE_OP = 334,
+     AND_OP = 335,
+     OR_OP = 336,
+     XOR_OP = 337,
+     MUL_ASSIGN = 338,
+     DIV_ASSIGN = 339,
+     ADD_ASSIGN = 340,
+     MOD_ASSIGN = 341,
+     LEFT_ASSIGN = 342,
+     RIGHT_ASSIGN = 343,
+     AND_ASSIGN = 344,
+     XOR_ASSIGN = 345,
+     OR_ASSIGN = 346,
+     SUB_ASSIGN = 347,
+     LEFT_PAREN = 348,
+     RIGHT_PAREN = 349,
+     LEFT_BRACKET = 350,
+     RIGHT_BRACKET = 351,
+     LEFT_BRACE = 352,
+     RIGHT_BRACE = 353,
+     DOT = 354,
+     COMMA = 355,
+     COLON = 356,
+     EQUAL = 357,
+     SEMICOLON = 358,
+     BANG = 359,
+     DASH = 360,
+     TILDE = 361,
+     PLUS = 362,
+     STAR = 363,
+     SLASH = 364,
+     PERCENT = 365,
+     LEFT_ANGLE = 366,
+     RIGHT_ANGLE = 367,
+     VERTICAL_BAR = 368,
+     CARET = 369,
+     AMPERSAND = 370,
+     QUESTION = 371
    };
 #endif
 
@@ -191,6 +192,8 @@
         union {
             TPublicType type;
             TPrecision precision;
+            TLayoutQualifierId layoutQualifierId;
+            TLayoutQualifier* layoutQualifier;
             TQualifier qualifier;
             TFunction* function;
             TParameter param;