OSDN Git Service

Implement support for layout qualifier locations.
authorNicolas Capens <capn@google.com>
Tue, 17 Feb 2015 22:58:31 +0000 (17:58 -0500)
committerNicolas Capens <capn@google.com>
Mon, 23 Feb 2015 22:51:50 +0000 (22:51 +0000)
Bug 19331817

Change-Id: I98c650311c6226bf769bc9f3c2eed8dac788a396
Reviewed-on: https://swiftshader-review.googlesource.com/2320
Reviewed-by: Nicolas Capens <capn@google.com>
Tested-by: Nicolas Capens <capn@google.com>
src/OpenGL/compiler/BaseTypes.h
src/OpenGL/compiler/ParseHelper.cpp
src/OpenGL/compiler/ParseHelper.h
src/OpenGL/compiler/Types.h
src/OpenGL/compiler/glslang.l
src/OpenGL/compiler/glslang.y
src/OpenGL/compiler/glslang_lex.cpp
src/OpenGL/compiler/glslang_tab.cpp
src/OpenGL/compiler/glslang_tab.h

index 254e36a..4ab7007 100644 (file)
@@ -119,6 +119,25 @@ enum TQualifier
     EvqLast
 };
 
+struct TLayoutQualifier
+{
+    static TLayoutQualifier create()
+    {
+        TLayoutQualifier layoutQualifier;
+
+        layoutQualifier.location = -1;
+
+        return layoutQualifier;
+    }
+
+    bool isEmpty() const
+    {
+        return location == -1;
+    }
+
+    int location;
+};
+
 //
 // This is just for debug print out, carried along with the definitions above.
 //
index 8e6e3a0..d9e9dfd 100644 (file)
@@ -1321,6 +1321,66 @@ TIntermTyped* TParseContext::addConstStruct(TString& identifier, TIntermTyped* n
     return typedNode;
 }
 
+TLayoutQualifier TParseContext::parseLayoutQualifier(const TString &qualifierType, const TSourceLoc& qualifierTypeLine)
+{
+    TLayoutQualifier qualifier;
+
+    qualifier.location = -1;
+
+    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 qualifier;
+}
+
+TLayoutQualifier TParseContext::parseLayoutQualifier(const TString &qualifierType, const TSourceLoc& qualifierTypeLine, const TString &intValueString, int intValue, const TSourceLoc& intValueLine)
+{
+    TLayoutQualifier qualifier;
+
+    qualifier.location = -1;
+
+    if (qualifierType != "location")
+    {
+        error(qualifierTypeLine, "invalid layout qualifier", qualifierType.c_str(), "only location may have arguments");
+        recover();
+    }
+    else
+    {
+        // must check that location is non-negative
+        if (intValue < 0)
+        {
+            error(intValueLine, "out of range:", intValueString.c_str(), "location must be non-negative");
+            recover();
+        }
+        else
+        {
+            qualifier.location = intValue;
+        }
+    }
+
+    return qualifier;
+}
+
+TLayoutQualifier TParseContext::joinLayoutQualifiers(TLayoutQualifier leftQualifier, TLayoutQualifier rightQualifier)
+{
+    TLayoutQualifier joinedQualifier = leftQualifier;
+
+    if (rightQualifier.location != -1)
+    {
+        joinedQualifier.location = rightQualifier.location;
+    }
+
+    return joinedQualifier;
+}
+
 bool TParseContext::enterStructDeclaration(int line, const TString& identifier)
 {
     ++structNestingLevel;
index 0b6a5e2..d0e4396 100644 (file)
@@ -40,7 +40,7 @@ struct TParseContext {
             functionReturnsValue(false),
             checksPrecisionErrors(checksPrecErrors),
             diagnostics(is),
-            shaderVersion(100),\r
+            shaderVersion(100),
             directiveHandler(ext, diagnostics, shaderVersion),
             preprocessor(&diagnostics, &directiveHandler),
             scanner(NULL) {  }
@@ -124,6 +124,10 @@ struct TParseContext {
     TIntermTyped* addConstArrayNode(int index, TIntermTyped* node, TSourceLoc line);
     TIntermTyped* addConstStruct(TString& , TIntermTyped*, TSourceLoc);
 
+    TLayoutQualifier parseLayoutQualifier(const TString &qualifierType, const TSourceLoc& qualifierTypeLine);
+    TLayoutQualifier parseLayoutQualifier(const TString &qualifierType, const TSourceLoc& qualifierTypeLine, const TString &intValueString, int intValue, const TSourceLoc& intValueLine);
+    TLayoutQualifier joinLayoutQualifiers(TLayoutQualifier leftQualifier, TLayoutQualifier rightQualifier);
+
     // Performs an error check for embedded struct declarations.
     // Returns true if an error was raised due to the declaration of
     // this struct.
index f1686ee..e53bbc5 100644 (file)
@@ -267,6 +267,7 @@ protected:
 struct TPublicType
 {
     TBasicType type;
+    TLayoutQualifier layoutQualifier;
     TQualifier qualifier;
     TPrecision precision;
     int size;          // size of vector or matrix, not size of array
@@ -279,6 +280,7 @@ struct TPublicType
     void setBasic(TBasicType bt, TQualifier q, int ln = 0)
     {
         type = bt;
+        layoutQualifier = TLayoutQualifier::create();
         qualifier = q;
         precision = EbpUndefined;
         size = 1;
index 6242066..f4a74c1 100644 (file)
@@ -155,6 +155,8 @@ O           [0-7]
 
 "struct"       { context->lexAfterType = true; return(STRUCT); }
 
+"layout"  { return ES2_identifier_ES3_keyword(context, LAYOUT); }
+
     /* Reserved keywords for GLSL ES 3.00 that are not reserved for GLSL ES 1.00 */
 "coherent"          |
 "restrict"          |
@@ -221,6 +223,17 @@ O           [0-7]
        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"          |
 
@@ -230,7 +243,6 @@ O           [0-7]
 "typedef"      |
 "template"     |
 "this"         |
-"packed"       |
 
 "goto"         |
 
index 19a9c8e..63be10e 100644 (file)
@@ -71,6 +71,7 @@ WHICH GENERATES THE GLSL ES PARSER (glslang_tab.cpp AND glslang_tab.h).
         union {
             TPublicType type;
             TPrecision precision;
+            TLayoutQualifier layoutQualifier;
             TQualifier qualifier;
             TFunction* function;
             TParameter param;
@@ -130,6 +131,7 @@ extern void yyerror(TParseContext* context, const char* reason);
 %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
@@ -165,6 +167,7 @@ extern void yyerror(TParseContext* context, const char* reason);
 
 %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 layout_qualifier_id
 
 %type <interm.precision> precision_qualifier
 %type <interm.type> type_qualifier fully_specified_type type_specifier storage_qualifier
@@ -1529,6 +1532,14 @@ type_qualifier
        | storage_qualifier {
         $$.setBasic(EbtVoid, $1.qualifier, $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
@@ -1595,6 +1606,34 @@ precision_qualifier
     }
     ;
 
+layout_qualifier
+    : LAYOUT LEFT_PAREN layout_qualifier_id_list RIGHT_PAREN {
+        ES3_ONLY("layout", $1.line);
+        $$ = $3;
+    }
+    ;
+
+layout_qualifier_id_list
+    : layout_qualifier_id {
+        $$ = $1;
+    }
+    | layout_qualifier_id_list COMMA layout_qualifier_id {
+        $$ = context->joinLayoutQualifiers($1, $3);
+    }
+    ;
+
+layout_qualifier_id
+    : IDENTIFIER {
+        $$ = context->parseLayoutQualifier(*$1.string, $1.line);
+    }
+    | IDENTIFIER EQUAL INTCONSTANT {
+        $$ = context->parseLayoutQualifier(*$1.string, $1.line, *$3.string, $3.i, $3.line);
+    }
+    | IDENTIFIER EQUAL UINTCONSTANT {
+        $$ = context->parseLayoutQualifier(*$1.string, $1.line, *$3.string, $3.i, $3.line);
+    }
+    ;
+
 type_specifier_no_prec
     : type_specifier_nonarray {
         $$ = $1;
index 24fe2c3..43c38cb 100644 (file)
@@ -392,8 +392,8 @@ static void yy_fatal_error (yyconst char msg[] ,yyscan_t yyscanner );
        *yy_cp = '\0'; \
        yyg->yy_c_buf_p = yy_cp;
 
-#define YY_NUM_RULES 221
-#define YY_END_OF_BUFFER 222
+#define YY_NUM_RULES 222
+#define YY_END_OF_BUFFER 223
 /* This struct is not used in this scanner,
    but its presence is necessary. */
 struct yy_trans_info
@@ -401,92 +401,93 @@ struct yy_trans_info
        flex_int32_t yy_verify;
        flex_int32_t yy_nxt;
        };
-static yyconst flex_int16_t yy_accept[770] =
+static yyconst flex_int16_t yy_accept[775] =
     {   0,
-        0,    0,    0,    0,    0,    0,  222,  220,  219,  219,
-      204,  210,  215,  199,  200,  208,  207,  196,  205,  203,
-      209,  165,  165,  197,  193,  211,  198,  212,  216,  161,
-      201,  202,  214,  161,  161,  161,  161,  161,  161,  161,
-      161,  161,  161,  161,  161,  161,  161,  161,  161,  161,
-      161,  161,  161,  194,  213,  195,  206,    3,    4,    3,
-      218,  221,  217,  190,  176,  195,  184,  179,  174,  182,
-      172,  183,  173,  171,    2,    1,  175,  170,  163,  164,
-        0,  168,    0,  165,  202,  194,  201,  191,  187,  189,
-      188,  192,  161,  180,  186,  161,  161,  161,  161,  161,
-
-      161,  161,  161,  161,  161,  161,  161,   17,  161,  161,
-      161,  161,  161,  161,  161,  161,  161,  161,  161,  161,
-      161,   20,  161,  161,   28,  161,  161,  161,  161,  161,
-      161,  161,  161,  161,  161,  161,  161,  161,  161,  161,
-      161,  161,  161,  161,  161,  161,  161,  161,  161,  161,
-      161,  161,  161,  161,  161,  161,  161,  181,  185,    5,
-      217,    0,    1,  170,    0,  167,    0,  169,  162,  177,
-      178,  161,  118,  161,  161,  161,  161,  161,  161,  161,
-      161,  161,  161,  161,  161,  161,  161,  161,  161,  161,
-      161,  161,  161,  161,  161,  161,   18,  161,  161,  161,
-
-      161,  161,  161,  161,  161,  161,  161,   32,  161,  161,
-      161,  161,  161,  161,  161,  161,  161,  161,   29,  161,
-      161,  161,  161,  161,  161,  161,  161,  161,  161,  161,
-      161,  161,  161,  161,  161,  161,  161,  161,  161,  161,
-      161,  161,  161,  161,  161,  161,  161,  161,  161,  161,
-      161,  161,  161,    0,  171,    0,  170,  166,  161,  161,
-      161,   35,  161,  161,   23,  158,  161,  161,  161,  161,
-      161,  161,  161,  161,  161,  161,   21,  121,  161,  161,
-      161,  161,   26,  161,  161,  126,  138,  161,  161,  161,
-      161,  161,  161,  161,  161,  161,  161,  161,  135,    9,
-
-       40,   41,   42,  161,  161,  161,  161,  161,  161,  161,
-      161,  161,  161,  161,  161,  161,  161,  161,  161,  161,
-      161,  161,  161,  161,  161,  161,  161,  124,   36,  161,
-      161,   33,  161,  161,  161,  161,  161,  161,  161,   43,
-       44,   45,   34,  161,  161,  161,  161,  161,  161,   15,
-       52,   53,   54,  161,  119,  161,  161,   12,  161,  161,
-      161,  161,  147,  148,  149,  161,   37,  161,  139,   31,
-      150,  151,  152,    7,  144,  145,  146,  161,  161,  161,
-       30,  142,  161,  161,  161,   46,   47,   48,  161,  161,
-      161,  161,  161,  161,  161,   69,  161,  161,  161,  161,
-
-      161,  161,  161,  136,  161,  161,  161,  161,  161,  161,
-      161,  161,  161,  161,  161,  120,  161,  161,  160,   49,
-       50,   51,  161,  161,   19,  161,   74,  161,  161,  161,
-      161,   72,  161,  161,  161,  137,  132,   75,  161,  161,
-      161,  161,  161,  161,  127,  161,  161,  161,  161,  161,
-      161,  161,  143,  125,  161,  161,  130,  161,  161,  161,
-       39,   70,  157,   27,  131,   61,  161,  141,   22,  161,
-      161,  161,  161,  161,  161,  161,  161,  161,  161,  161,
-      161,  161,  161,   24,   38,  161,  161,  161,  161,  161,
-      161,   76,   77,   78,  161,  161,  161,  161,  161,    8,
-
-      161,  161,  161,  161,  161,  161,  161,  161,  161,  161,
-      161,  122,  161,  161,  161,  161,  161,   13,  161,  161,
-       14,  161,  161,  161,  161,   25,   62,   16,  133,   80,
-       81,   82,  161,  161,  161,  161,  161,  161,  161,  161,
-      161,  161,  161,  161,  128,  161,  161,  161,   64,   66,
-       63,  161,  161,  161,  161,  161,  161,  161,  123,   84,
-       85,   86,  161,  161,  140,  161,  129,  161,  161,   11,
-      161,  161,  161,  161,  161,  161,  161,  161,  161,   79,
-      134,    6,  161,  161,  161,  159,  161,   73,   10,  153,
-       55,   58,  161,  161,  161,  161,  161,  161,  161,  161,
-
-      161,  161,  161,   65,  161,  161,  161,  161,   83,  161,
-      161,  161,  161,  161,  103,  161,  161,  161,  161,  161,
-      161,  161,  161,  161,  161,  161,  161,   71,  161,  161,
-      161,   87,  105,  161,  161,   67,  161,  161,  161,  161,
-      161,  161,  161,   98,  161,  161,  161,  161,  161,  161,
-      161,  112,  161,  161,  161,  161,   56,  161,  161,  161,
-      161,  161,  161,  161,  161,  161,  161,   99,   88,  161,
-       89,  161,  161,  113,  161,  161,  161,  161,  161,  161,
-      161,  161,  161,  161,  161,  161,  161,  100,  161,  114,
-      161,  161,   90,   91,  161,   94,  161,   95,  161,  161,
-
-      161,  161,   68,  161,  161,  161,  155,  161,   59,  109,
-      161,   92,   93,  161,  161,  161,  161,  161,  161,  161,
-      161,  107,  110,  101,  161,  161,  161,  161,  161,  161,
-      161,  108,  111,  161,  161,  104,  161,  161,  154,  161,
-      161,   60,  161,  106,  161,  161,  161,  161,  161,  115,
-      161,  161,  161,  161,  161,  116,  161,  161,  161,  117,
-       96,   97,  161,  161,   57,  161,  156,  102,    0
+        0,    0,    0,    0,    0,    0,  223,  221,  220,  220,
+      205,  211,  216,  200,  201,  209,  208,  197,  206,  204,
+      210,  166,  166,  198,  194,  212,  199,  213,  217,  162,
+      202,  203,  215,  162,  162,  162,  162,  162,  162,  162,
+      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
+      162,  162,  162,  195,  214,  196,  207,    3,    4,    3,
+      219,  222,  218,  191,  177,  196,  185,  180,  175,  183,
+      173,  184,  174,  172,    2,    1,  176,  171,  164,  165,
+        0,  169,    0,  166,  203,  195,  202,  192,  188,  190,
+      189,  193,  162,  181,  187,  162,  162,  162,  162,  162,
+
+      162,  162,  162,  162,  162,  162,  162,   17,  162,  162,
+      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
+      162,   20,  162,  162,   28,  162,  162,  162,  162,  162,
+      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
+      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
+      162,  162,  162,  162,  162,  162,  162,  162,  182,  186,
+        5,  218,    0,    1,  171,    0,  168,    0,  170,  163,
+      178,  179,  162,  120,  162,  162,  162,  162,  162,  162,
+      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
+      162,  162,  162,  162,  162,  162,  162,   18,  162,  162,
+
+      162,  162,  162,  162,  162,  162,  162,  162,   32,  162,
+      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
+       29,  162,  162,  162,  162,  162,  162,  162,  162,  162,
+      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
+      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
+      162,  162,  162,  162,  162,    0,  172,    0,  171,  167,
+      162,  162,  162,   35,  162,  162,   23,  159,  162,  162,
+      162,  162,  162,  162,  162,  162,  162,  162,   21,  123,
+      162,  162,  162,  162,   26,  162,  162,  127,  139,  162,
+      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
+
+      162,  136,    9,   40,   41,   42,  162,  162,  162,  162,
+      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
+      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
+      126,   36,  162,  162,   33,  162,  162,  162,  162,  162,
+      162,  162,   43,   44,   45,   34,  162,  162,  162,  162,
+      162,  162,   15,   52,   53,   54,  162,  121,  162,  162,
+       12,  162,  162,  162,  162,  148,  149,  150,  162,   37,
+      162,  140,   31,  151,  152,  153,    7,  145,  146,  147,
+      162,  162,  162,   30,  143,  162,  162,  162,   46,   47,
+       48,  162,  162,  162,  162,  162,  162,  162,  162,   70,
+
+      162,  162,  162,  162,  162,  162,  162,  137,  162,  162,
+      162,  162,  162,  162,  162,  162,  162,  162,  162,  122,
+      162,  162,  161,   49,   50,   51,  162,  162,   19,  162,
+       75,  162,  162,  162,  162,   73,  162,  162,  162,  138,
+      133,   76,  162,  162,  162,  162,  162,  162,  128,  162,
+      162,  162,   62,  162,  162,  162,  162,  144,  119,  162,
+      162,  131,  162,  162,  162,   39,   71,  158,   27,  132,
+       61,  162,  142,   22,  162,  162,  162,  162,  162,  162,
+      162,  162,  162,  162,  162,  162,  162,  162,   24,   38,
+      162,  162,  162,  162,  162,  162,   77,   78,   79,  162,
+
+      162,  162,  162,  162,    8,  162,  162,  162,  162,  162,
+      162,  162,  162,  162,  162,  162,  124,  162,  162,  162,
+      162,  162,   13,  162,  162,   14,  162,  162,  162,  162,
+       25,   63,   16,  134,   81,   82,   83,  162,  162,  162,
+      162,  162,  162,  162,  162,  162,  162,  162,  162,  129,
+      162,  162,  162,   65,   67,   64,  162,  162,  162,  162,
+      162,  162,  162,  125,   85,   86,   87,  162,  162,  141,
+      162,  130,  162,  162,   11,  162,  162,  162,  162,  162,
+      162,  162,  162,  162,   80,  135,    6,  162,  162,  162,
+      160,  162,   74,   10,  154,   55,   58,  162,  162,  162,
+
+      162,  162,  162,  162,  162,  162,  162,  162,   66,  162,
+      162,  162,  162,   84,  162,  162,  162,  162,  162,  104,
+      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
+      162,  162,   72,  162,  162,  162,   88,  106,  162,  162,
+       68,  162,  162,  162,  162,  162,  162,  162,   99,  162,
+      162,  162,  162,  162,  162,  162,  113,  162,  162,  162,
+      162,   56,  162,  162,  162,  162,  162,  162,  162,  162,
+      162,  162,  100,   89,  162,   90,  162,  162,  114,  162,
+      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
+      162,  162,  101,  162,  115,  162,  162,   91,   92,  162,
+
+       95,  162,   96,  162,  162,  162,  162,   69,  162,  162,
+      162,  156,  162,   59,  110,  162,   93,   94,  162,  162,
+      162,  162,  162,  162,  162,  162,  108,  111,  102,  162,
+      162,  162,  162,  162,  162,  162,  109,  112,  162,  162,
+      105,  162,  162,  155,  162,  162,   60,  162,  107,  162,
+      162,  162,  162,  162,  116,  162,  162,  162,  162,  162,
+      117,  162,  162,  162,  118,   97,   98,  162,  162,   57,
+      162,  157,  103,    0
     } ;
 
 static yyconst flex_int32_t yy_ec[256] =
@@ -533,185 +534,185 @@ static yyconst flex_int32_t yy_meta[73] =
         1,    1
     } ;
 
-static yyconst flex_int16_t yy_base[775] =
+static yyconst flex_int16_t yy_base[780] =
     {   0,
-        0,    0,   70,   71,   80,    0,  990,  991,  991,  991,
-      964,   50,  147,  991,  991,  963,  144,  991,  143,  141,
-      156,  169,  223,  961,  991,  169,  961,   52,  991,    0,
-      991,  991,  152,  117,  138,  118,  157,  148,  167,  927,
-      147,  173,  926,  126,  159,  920,  188,  933,  201,  198,
-      214,  211,  147,  991,  158,  991,  991,  991,  991,  967,
-      991,  991,    0,  991,  991,  991,  991,  991,  991,  991,
-      991,  991,  991,  264,  991,    0,  991,  272,  234,  309,
-      291,  991,    0,    0,  991,  991,  991,  955,  991,  991,
-      991,  954,    0,  991,  991,  916,  921,  187,  918,  926,
-
-      925,  912,  915,  926,  242,  920,  908,  905,  918,  905,
-      902,  902,  908,  158,  257,  902,  912,  898,  904,  907,
-      908,    0,  900,  910,  276,  909,  904,  162,  890,  903,
-      894,  217,  887,  258,  899,  901,  271,  890,  887,  876,
-      885,  291,  291,  889,  885,  887,  876,  879,  286,  286,
-      299,  888,  876,  888,  206,  881,  880,  991,  991,  991,
-        0,  344,    0,  358,  376,  991,  383,  393,  256,  991,
-      991,  879,    0,  875,  870,  874,  883,  880,  304,  864,
-      864,  875,  867,  284,  877,  874,  874,  872,  869,  861,
-      867,  854,  852,  864,  850,  866,    0,  863,  851,  858,
-
-      855,  859,  860,  853,  850,  839,  838,  851,  854,  842,
-      850,  845,  836,  350,  841,  844,  835,  842,  831,  835,
-      826,  840,  839,  830,  836,  322,  820,  823,  821,  831,
-      821,  816,  814,  816,  826,  812,  814,  811,  822,  821,
-      824,  806,  299,  814,  810,  808,  817,  796,  364,  814,
-      816,  805,  797,  400,  407,  414,  421,  991,  794,  804,
-      803,    0,  801,  426,    0,    0,  794,  792,  792,  793,
-      788,  796,  785,  802,  791,  429,    0,    0,  785,  795,
-      794,  794,    0,  779,  432,    0,    0,  781,  435,  788,
-      789,  780,  774,  773,  774,  773,  773,  438,    0,    0,
-
-        0,    0,    0,  768,  769,  774,  768,  764,  777,  772,
-      772,  770,  769,  763,  757,  759,  758,  762,  754,  757,
-      752,  760,  765,  753,  750,  762,  753,    0,    0,  759,
-      755,    0,  747,  747,  752,  743,  750,  441,  747,    0,
-        0,    0,    0,  737,  749,  748,  747,  748,  748,    0,
-        0,    0,    0,  735,    0,  743,  734,    0,  733,  734,
-      728,  738,    0,    0,    0,  729,    0,  725,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,  735,  445,  734,
-        0,    0,  732,  728,  725,    0,    0,    0,  723,  719,
-      724,  715,  713,  726,  711,    0,  711,  724,  713,  709,
-
-      715,  710,  717,    0,  715,  712,  716,  700,  698,  701,
-      707,  713,  708,  707,  695,    0,  697,  698,    0,    0,
-        0,    0,  695,  698,    0,  692,    0,  705,  685,  694,
-      689,    0,  682,  682,  695,    0,  697,    0,  448,  710,
-      709,  708,  675,  674,    0,  691,  690,  685,  674,  687,
-      674,  671,    0,    0,  676,  675,    0,  672,  679,  678,
-        0,  664,    0,    0,    0,    0,  661,    0,    0,  660,
-      671,  451,  664,  670,  669,  666,  661,  658,  651,  651,
-      664,  649,  661,    0,    0,  654,  677,  676,  675,  642,
-      641,  444,  445,    0,  653,  656,  654,  643,  639,    0,
-
-      651,  648,  647,  637,  636,  626,  643,  629,  468,  637,
-      640,    0,  657,  656,  655,  622,  621,    0,  635,  622,
-        0,  632,  625,  626,  629,    0,    0,    0,    0,  649,
-      648,    0,  625,  628,  613,  620,  611,  618,  619,  619,
-      618,  604,  472,  616,    0,  617,  606,  605,    0,    0,
-        0,  630,  629,  628,  595,  594,  590,  598,    0,  626,
-      625,    0,  602,  605,    0,  474,    0,  583,  592,    0,
-      588,  587,  596,  596,  584,  598,  582,  596,  591,    0,
-        0,    0,  608,  607,  574,    0,  574,    0,    0,  464,
-      458,  598,  584,  587,  570,  582,  570,  569,  578,  578,
-
-      595,  594,  561,    0,  561,  562,  561,  571,    0,  574,
-      570,  572,  568,  555,  586,  350,  563,  559,  551,  558,
-      571,  559,  555,  557,  555,  555,  554,    0,  542,  541,
-      551,    0,  571,  469,  548,    0,  552,  551,  535,  527,
-      535,  525,  533,    0,  530,  551,  539,  537,  522,  525,
-      539,  555,  535,  536,  533,  530,    0,  518,  532,  531,
-      515,  514,  535,  523,  521,  503,  502,    0,  530,  502,
-      528,  500,  504,  535,  515,  512,  511,  514,  510,  497,
-      494,  507,  492,  493,  495,  484,  483,    0,  489,  520,
-      500,  497,    0,    0,  493,    0,  492,    0,  498,  482,
-
-      479,  480,    0,  472,  480,  477,  498,  477,    0,    0,
-      489,    0,    0,  488,  472,  469,  470,  484,  483,  460,
-      466,    0,    0,  487,  459,  478,  470,  456,  465,  452,
-      456,    0,    0,  457,  451,    0,  449,  435,    0,  412,
-      431,    0,  435,    0,  425,  348,  347,  322,  326,    0,
-      322,  323,  256,  252,  249,    0,  229,  210,  214,    0,
-        0,    0,  158,  132,    0,  115,    0,    0,  991,  506,
-      508,  510,  514,  163
+        0,    0,   70,   71,   80,    0,  995,  996,  996,  996,
+      969,   50,  147,  996,  996,  968,  144,  996,  143,  141,
+      156,  169,  223,  966,  996,  169,  966,   52,  996,    0,
+      996,  996,  152,  117,  138,  118,  157,  148,  167,  932,
+      147,  173,  159,  126,  188,  926,  200,  939,  205,  199,
+      212,  226,  147,  996,  158,  996,  996,  996,  996,  973,
+      996,  996,    0,  996,  996,  996,  996,  996,  996,  996,
+      996,  996,  996,  262,  996,    0,  996,  272,  256,  310,
+      297,  996,    0,    0,  996,  996,  996,  961,  996,  996,
+      996,  960,    0,  996,  996,  922,  927,  191,  924,  932,
+
+      931,  918,  921,  932,  245,  926,  914,  911,  924,  911,
+      908,  908,  914,  158,  240,  908,  918,  904,  910,  913,
+      914,    0,  906,  916,  277,  915,  910,  891,  162,  895,
+      908,  899,  246,  892,  286,  904,  906,  289,  895,  892,
+      881,  890,  292,  294,  894,  890,  892,  881,  884,  287,
+      203,  255,  893,  881,  893,  199,  886,  885,  996,  996,
+      996,    0,  345,    0,  359,  377,  996,  384,  394,  306,
+      996,  996,  884,    0,  880,  875,  879,  888,  885,  305,
+      869,  869,  880,  872,  309,  882,  879,  879,  877,  874,
+      866,  872,  859,  857,  869,  855,  871,    0,  868,  856,
+
+      863,  860,  864,  865,  858,  855,  844,  843,  856,  859,
+      847,  855,  843,  849,  840,  364,  845,  848,  839,  846,
+      835,  839,  830,  844,  843,  834,  840,  248,  824,  827,
+      825,  835,  825,  820,  818,  820,  830,  816,  818,  815,
+      826,  825,  828,  810,  366,  818,  814,  812,  821,  800,
+      367,  818,  820,  809,  801,  402,  410,  417,  424,  996,
+      798,  808,  807,    0,  805,  429,    0,    0,  798,  796,
+      796,  797,  792,  800,  789,  806,  795,  432,    0,    0,
+      789,  799,  798,  798,    0,  783,  435,    0,    0,  785,
+      438,  792,  793,  784,  778,  777,  778,  777,  777,  441,
+
+      772,    0,    0,    0,    0,    0,  771,  772,  777,  771,
+      767,  780,  775,  775,  773,  772,  766,  760,  762,  761,
+      765,  757,  760,  755,  763,  768,  756,  753,  765,  756,
+        0,    0,  762,  758,    0,  750,  750,  755,  746,  753,
+      444,  750,    0,    0,    0,    0,  740,  752,  751,  750,
+      751,  751,    0,    0,    0,    0,  738,    0,  746,  737,
+        0,  736,  737,  731,  741,    0,    0,    0,  732,    0,
+      728,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+      738,  448,  737,    0,    0,  735,  731,  728,    0,    0,
+        0,  720,  725,  721,  726,  717,  715,  728,  713,    0,
+
+      713,  726,  715,  711,  717,  712,  719,    0,  717,  714,
+      718,  702,  700,  703,  709,  715,  710,  709,  697,    0,
+      699,  700,    0,    0,    0,    0,  697,  700,    0,  694,
+        0,  707,  687,  696,  691,    0,  684,  684,  697,    0,
+      699,    0,  451,  712,  711,  710,  677,  676,    0,  693,
+      692,  687,    0,  676,  689,  676,  673,    0,    0,  678,
+      677,    0,  674,  681,  680,    0,  666,    0,    0,    0,
+        0,  663,    0,    0,  662,  673,  454,  666,  672,  671,
+      668,  663,  660,  653,  653,  666,  651,  663,    0,    0,
+      656,  679,  678,  677,  644,  643,  330,  447,    0,  655,
+
+      658,  656,  645,  641,    0,  653,  650,  649,  639,  638,
+      628,  645,  631,  470,  639,  642,    0,  659,  658,  657,
+      624,  623,    0,  637,  624,    0,  634,  627,  628,  631,
+        0,    0,    0,    0,  651,  650,    0,  627,  630,  615,
+      622,  613,  620,  621,  621,  620,  606,  474,  618,    0,
+      619,  608,  607,    0,    0,    0,  632,  631,  630,  597,
+      596,  592,  600,    0,  628,  627,    0,  604,  607,    0,
+      476,    0,  585,  594,    0,  590,  589,  598,  598,  586,
+      600,  584,  598,  593,    0,    0,    0,  610,  609,  576,
+        0,  576,    0,    0,  451,  459,  600,  586,  589,  572,
+
+      584,  572,  571,  580,  580,  597,  596,  563,    0,  563,
+      564,  563,  573,    0,  576,  572,  574,  570,  557,  588,
+      353,  565,  561,  553,  560,  573,  561,  557,  559,  557,
+      557,  556,    0,  544,  543,  553,    0,  573,  439,  550,
+        0,  554,  553,  537,  529,  537,  527,  535,    0,  532,
+      553,  541,  539,  524,  527,  541,  557,  537,  538,  535,
+      532,    0,  520,  534,  533,  517,  516,  537,  525,  523,
+      505,  504,    0,  532,  504,  530,  502,  506,  537,  517,
+      514,  513,  516,  512,  499,  496,  509,  494,  495,  497,
+      486,  485,    0,  491,  522,  502,  499,    0,    0,  495,
+
+        0,  494,    0,  500,  484,  481,  482,    0,  474,  482,
+      479,  500,  479,    0,    0,  491,    0,    0,  490,  474,
+      471,  472,  486,  485,  462,  468,    0,    0,  489,  461,
+      480,  472,  458,  467,  454,  460,    0,    0,  471,  470,
+        0,  470,  452,    0,  434,  453,    0,  459,    0,  437,
+      415,  349,  339,  327,    0,  308,  315,  271,  259,  255,
+        0,  255,  216,  209,    0,    0,    0,  158,  132,    0,
+      115,    0,    0,  996,  505,  507,  509,  513,  163
     } ;
 
-static yyconst flex_int16_t yy_def[775] =
+static yyconst flex_int16_t yy_def[780] =
     {   0,
-      769,    1,  770,  770,  769,    5,  769,  769,  769,  769,
-      769,  769,  769,  769,  769,  769,  769,  769,  769,  769,
-      769,  769,  769,  769,  769,  769,  769,  769,  769,  771,
-      769,  769,  769,  771,  771,  771,  771,  771,  771,  771,
-      771,  771,  771,  771,  771,  771,  771,  771,  771,  771,
-      771,  771,  771,  769,  769,  769,  769,  769,  769,  769,
-      769,  769,  772,  769,  769,  769,  769,  769,  769,  769,
-      769,  769,  769,  769,  769,  773,  769,  769,   22,  769,
-      769,  769,  774,   23,  769,  769,  769,  769,  769,  769,
-      769,  769,  771,  769,  769,  771,  771,  771,  771,  771,
-
-      771,  771,  771,  771,  771,  771,  771,  771,  771,  771,
-      771,  771,  771,  771,  771,  771,  771,  771,  771,  771,
-      771,  771,  771,  771,  771,  771,  771,  771,  771,  771,
-      771,  771,  771,  771,  771,  771,  771,  771,  771,  771,
-      771,  771,  771,  771,  771,  771,  771,  771,  771,  771,
-      771,  771,  771,  771,  771,  771,  771,  769,  769,  769,
-      772,  769,  773,  769,  769,  769,  769,  769,  774,  769,
-      769,  771,  771,  771,  771,  771,  771,  771,  771,  771,
-      771,  771,  771,  771,  771,  771,  771,  771,  771,  771,
-      771,  771,  771,  771,  771,  771,  771,  771,  771,  771,
-
-      771,  771,  771,  771,  771,  771,  771,  771,  771,  771,
-      771,  771,  771,  771,  771,  771,  771,  771,  771,  771,
-      771,  771,  771,  771,  771,  771,  771,  771,  771,  771,
-      771,  771,  771,  771,  771,  771,  771,  771,  771,  771,
-      771,  771,  771,  771,  771,  771,  771,  771,  771,  771,
-      771,  771,  771,  769,  769,  769,  769,  769,  771,  771,
-      771,  771,  771,  771,  771,  771,  771,  771,  771,  771,
-      771,  771,  771,  771,  771,  771,  771,  771,  771,  771,
-      771,  771,  771,  771,  771,  771,  771,  771,  771,  771,
-      771,  771,  771,  771,  771,  771,  771,  771,  771,  771,
-
-      771,  771,  771,  771,  771,  771,  771,  771,  771,  771,
-      771,  771,  771,  771,  771,  771,  771,  771,  771,  771,
-      771,  771,  771,  771,  771,  771,  771,  771,  771,  771,
-      771,  771,  771,  771,  771,  771,  771,  771,  771,  771,
-      771,  771,  771,  771,  771,  771,  771,  771,  771,  771,
-      771,  771,  771,  771,  771,  771,  771,  771,  771,  771,
-      771,  771,  771,  771,  771,  771,  771,  771,  771,  771,
-      771,  771,  771,  771,  771,  771,  771,  771,  771,  771,
-      771,  771,  771,  771,  771,  771,  771,  771,  771,  771,
-      771,  771,  771,  771,  771,  771,  771,  771,  771,  771,
-
-      771,  771,  771,  771,  771,  771,  771,  771,  771,  771,
-      771,  771,  771,  771,  771,  771,  771,  771,  771,  771,
-      771,  771,  771,  771,  771,  771,  771,  771,  771,  771,
-      771,  771,  771,  771,  771,  771,  771,  771,  771,  771,
-      771,  771,  771,  771,  771,  771,  771,  771,  771,  771,
-      771,  771,  771,  771,  771,  771,  771,  771,  771,  771,
-      771,  771,  771,  771,  771,  771,  771,  771,  771,  771,
-      771,  771,  771,  771,  771,  771,  771,  771,  771,  771,
-      771,  771,  771,  771,  771,  771,  771,  771,  771,  771,
-      771,  771,  771,  771,  771,  771,  771,  771,  771,  771,
-
-      771,  771,  771,  771,  771,  771,  771,  771,  771,  771,
-      771,  771,  771,  771,  771,  771,  771,  771,  771,  771,
-      771,  771,  771,  771,  771,  771,  771,  771,  771,  771,
-      771,  771,  771,  771,  771,  771,  771,  771,  771,  771,
-      771,  771,  771,  771,  771,  771,  771,  771,  771,  771,
-      771,  771,  771,  771,  771,  771,  771,  771,  771,  771,
-      771,  771,  771,  771,  771,  771,  771,  771,  771,  771,
-      771,  771,  771,  771,  771,  771,  771,  771,  771,  771,
-      771,  771,  771,  771,  771,  771,  771,  771,  771,  771,
-      771,  771,  771,  771,  771,  771,  771,  771,  771,  771,
-
-      771,  771,  771,  771,  771,  771,  771,  771,  771,  771,
-      771,  771,  771,  771,  771,  771,  771,  771,  771,  771,
-      771,  771,  771,  771,  771,  771,  771,  771,  771,  771,
-      771,  771,  771,  771,  771,  771,  771,  771,  771,  771,
-      771,  771,  771,  771,  771,  771,  771,  771,  771,  771,
-      771,  771,  771,  771,  771,  771,  771,  771,  771,  771,
-      771,  771,  771,  771,  771,  771,  771,  771,  771,  771,
-      771,  771,  771,  771,  771,  771,  771,  771,  771,  771,
-      771,  771,  771,  771,  771,  771,  771,  771,  771,  771,
-      771,  771,  771,  771,  771,  771,  771,  771,  771,  771,
-
-      771,  771,  771,  771,  771,  771,  771,  771,  771,  771,
-      771,  771,  771,  771,  771,  771,  771,  771,  771,  771,
-      771,  771,  771,  771,  771,  771,  771,  771,  771,  771,
-      771,  771,  771,  771,  771,  771,  771,  771,  771,  771,
-      771,  771,  771,  771,  771,  771,  771,  771,  771,  771,
-      771,  771,  771,  771,  771,  771,  771,  771,  771,  771,
-      771,  771,  771,  771,  771,  771,  771,  771,    0,  769,
-      769,  769,  769,  769
+      774,    1,  775,  775,  774,    5,  774,  774,  774,  774,
+      774,  774,  774,  774,  774,  774,  774,  774,  774,  774,
+      774,  774,  774,  774,  774,  774,  774,  774,  774,  776,
+      774,  774,  774,  776,  776,  776,  776,  776,  776,  776,
+      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
+      776,  776,  776,  774,  774,  774,  774,  774,  774,  774,
+      774,  774,  777,  774,  774,  774,  774,  774,  774,  774,
+      774,  774,  774,  774,  774,  778,  774,  774,   22,  774,
+      774,  774,  779,   23,  774,  774,  774,  774,  774,  774,
+      774,  774,  776,  774,  774,  776,  776,  776,  776,  776,
+
+      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
+      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
+      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
+      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
+      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
+      776,  776,  776,  776,  776,  776,  776,  776,  774,  774,
+      774,  777,  774,  778,  774,  774,  774,  774,  774,  779,
+      774,  774,  776,  776,  776,  776,  776,  776,  776,  776,
+      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
+      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
+
+      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
+      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
+      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
+      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
+      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
+      776,  776,  776,  776,  776,  774,  774,  774,  774,  774,
+      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
+      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
+      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
+      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
+
+      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
+      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
+      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
+      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
+      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
+      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
+      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
+      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
+      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
+      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
+
+      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
+      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
+      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
+      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
+      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
+      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
+      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
+      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
+      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
+      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
+
+      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
+      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
+      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
+      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
+      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
+      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
+      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
+      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
+      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
+      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
+
+      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
+      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
+      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
+      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
+      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
+      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
+      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
+      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
+      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
+      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
+
+      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
+      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
+      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
+      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
+      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
+      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
+      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
+      776,  776,  776,    0,  774,  774,  774,  774,  774
     } ;
 
-static yyconst flex_int16_t yy_nxt[1064] =
+static yyconst flex_int16_t yy_nxt[1069] =
     {   0,
         8,    9,   10,   11,   12,   13,   14,   15,   16,   17,
        18,   19,   20,   21,   22,   23,   23,   23,   23,   23,
@@ -730,109 +731,109 @@ static yyconst flex_int16_t yy_nxt[1064] =
        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,  768,
-       77,   78,  158,   79,   79,   79,   79,   79,   79,   80,
-       87,  119,   88,   89,   95,   99,  767,  100,  156,  120,
-
-       81,  101,  110,  131,  111,  106,  157,   82,   83,  107,
-      121,  113,  193,  112,  108,  766,  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,  765,  139,  140,   81,  153,  141,  147,  250,  154,
-      251,   82,  142,  143,  148,  144,  149,  764,  155,  217,
-      150,   81,  166,  769,  151,  218,  763,  152,   74,   74,
-       74,   74,   74,   74,   74,   82,  164,  164,  164,  164,
-      164,  164,  164,  182,  258,  162,  166,  183,  184,  769,
-
-      167,  195,  167,  165,  220,  168,  168,  168,  168,  168,
-      168,  168,  162,  762,  196,  225,  761,  221,  258,  222,
-      165,   78,  760,   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,  759,  254,  334,   81,  255,  255,
-      255,  255,  255,  255,  255,  266,  301,  302,  303,  758,
-      757,   82,  164,  164,  164,  164,  164,  164,  164,  315,
-      340,  341,  342,  316,  646,  256,  647,  256,  756,  165,
-      257,  257,  257,  257,  257,  257,  257,  168,  168,  168,
-
-      168,  168,  168,  168,  755,  754,  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,  420,  421,  422,
-      440,  441,  442,  487,  488,  489,  513,  514,  515,  753,
-      752,  535,  537,  443,  444,  751,  490,  491,  750,  516,
-      517,  536,  538,  552,  553,  554,  749,  583,  584,  601,
-      602,  619,  621,  748,  622,  623,  555,  556,  747,  557,
-
-      585,  620,  603,  663,  746,  664,   58,   58,   58,   58,
-       93,   93,  161,  161,  163,  745,  163,  163,  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,  683,
-      682,  681,  680,  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,  645,  644,  643,  642,  641,  640,  639,
-      638,  637,  636,  635,  634,  633,  632,  631,  630,  629,
-      628,  627,  626,  625,  624,  618,  617,  616,  615,  614,
-      613,  612,  611,  610,  609,  608,  607,  606,  605,  604,
-      600,  599,  598,  597,  596,  595,  594,  593,  592,  591,
-      590,  589,  588,  587,  586,  582,  581,  580,  579,  578,
-      577,  576,  575,  574,  573,  572,  571,  570,  569,  568,
-      567,  566,  565,  564,  563,  562,  561,  560,  559,  558,
-      551,  550,  549,  548,  547,  546,  545,  544,  543,  542,
-
-      541,  540,  539,  534,  533,  532,  531,  530,  529,  528,
-      527,  526,  525,  524,  523,  522,  521,  520,  519,  518,
-      512,  511,  510,  509,  508,  507,  506,  505,  504,  503,
-      502,  501,  500,  499,  498,  497,  496,  495,  494,  493,
-      492,  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,  460,  459,  458,
-      457,  456,  455,  454,  453,  452,  451,  450,  449,  448,
-      447,  446,  445,  439,  438,  437,  436,  435,  434,  433,
-      432,  431,  430,  429,  428,  427,  426,  425,  424,  423,
-
-      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,  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,   64,  769,
-        7,  769,  769,  769,  769,  769,  769,  769,  769,  769,
-
-      769,  769,  769,  769,  769,  769,  769,  769,  769,  769,
-      769,  769,  769,  769,  769,  769,  769,  769,  769,  769,
-      769,  769,  769,  769,  769,  769,  769,  769,  769,  769,
-      769,  769,  769,  769,  769,  769,  769,  769,  769,  769,
-      769,  769,  769,  769,  769,  769,  769,  769,  769,  769,
-      769,  769,  769,  769,  769,  769,  769,  769,  769,  769,
-      769,  769,  769
+       74,   74,  102,   96,   75,  170,  103,   73,   71,   76,
+      130,   68,  104,   86,  131,  105,   94,   97,   98,  773,
+       77,   78,  159,   79,   79,   79,   79,   79,   79,   80,
+       87,  119,   88,   89,   95,   99,  772,  100,  157,  120,
+
+       81,  101,  110,  128,  111,  106,  158,   82,   83,  107,
+      121,  113,  194,  112,  108,  771,  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,  770,  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,  769,  155,  153,   74,   74,   74,   74,
+       74,   74,   74,  156,  196,   82,  165,  165,  165,  165,
+      165,  165,  165,  163,  167,  774,  183,  197,  219,  247,
+
+      184,  185,  768,  166,  220,  318,  168,  248,  168,  319,
+      163,  169,  169,  169,  169,  169,  169,  169,  167,  767,
+      166,  774,   78,  766,   80,   80,   80,   80,   80,   80,
+       80,  206,  222,  227,  207,  208,  234,  765,  209,  236,
+      210,   81,  243,  244,  260,  223,  764,  224,   82,  228,
+      229,  235,  237,  267,  256,  763,  256,  540,   81,  257,
+      257,  257,  257,  257,  257,  257,  268,  541,  260,  273,
+      274,  762,   82,  165,  165,  165,  165,  165,  165,  165,
+      304,  305,  306,  343,  344,  345,  258,  651,  258,  652,
+      166,  259,  259,  259,  259,  259,  259,  259,  169,  169,
+
+      169,  169,  169,  169,  169,  761,  760,  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,
+      424,  425,  426,  444,  445,  446,  492,  493,  494,  518,
+      519,  520,  759,  668,  542,  669,  447,  448,  624,  495,
+      496,  758,  521,  522,  543,  557,  558,  559,  625,  588,
+      589,  606,  607,  626,  757,  627,  628,  756,  560,  561,
+
+      755,  562,  590,  754,  608,   58,   58,   58,   58,   93,
+       93,  162,  162,  164,  753,  164,  164,  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,  683,  682,  681,  680,
+      679,  678,  677,  676,  675,  674,  673,  672,  671,  670,
+
+      667,  666,  665,  664,  663,  662,  661,  660,  659,  658,
+      657,  656,  655,  654,  653,  650,  649,  648,  647,  646,
+      645,  644,  643,  642,  641,  640,  639,  638,  637,  636,
+      635,  634,  633,  632,  631,  630,  629,  623,  622,  621,
+      620,  619,  618,  617,  616,  615,  614,  613,  612,  611,
+      610,  609,  605,  604,  603,  602,  601,  600,  599,  598,
+      597,  596,  595,  594,  593,  592,  591,  587,  586,  585,
+      584,  583,  582,  581,  580,  579,  578,  577,  576,  575,
+      574,  573,  572,  571,  570,  569,  568,  567,  566,  565,
+      564,  563,  556,  555,  554,  553,  552,  551,  550,  549,
+
+      548,  547,  546,  545,  544,  539,  538,  537,  536,  535,
+      534,  533,  532,  531,  530,  529,  528,  527,  526,  525,
+      524,  523,  517,  516,  515,  514,  513,  512,  511,  510,
+      509,  508,  507,  506,  505,  504,  503,  502,  501,  500,
+      499,  498,  497,  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,  460,  459,  458,  457,  456,  455,
+      454,  453,  452,  451,  450,  449,  443,  442,  441,  440,
+      439,  438,  437,  436,  435,  434,  433,  432,  431,  430,
+
+      429,  428,  427,  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,  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,  134,  118,
+       90,   85,   69,   64,  774,    7,  774,  774,  774,  774,
+
+      774,  774,  774,  774,  774,  774,  774,  774,  774,  774,
+      774,  774,  774,  774,  774,  774,  774,  774,  774,  774,
+      774,  774,  774,  774,  774,  774,  774,  774,  774,  774,
+      774,  774,  774,  774,  774,  774,  774,  774,  774,  774,
+      774,  774,  774,  774,  774,  774,  774,  774,  774,  774,
+      774,  774,  774,  774,  774,  774,  774,  774,  774,  774,
+      774,  774,  774,  774,  774,  774,  774,  774
     } ;
 
-static yyconst flex_int16_t yy_chk[1064] =
+static yyconst flex_int16_t yy_chk[1069] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -851,110 +852,110 @@ static yyconst flex_int16_t yy_chk[1064] =
         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,  774,   36,   19,   17,   21,
-       44,   13,   36,   26,   44,   36,   33,   34,   34,  766,
+       20,   20,   36,   34,   21,  779,   36,   19,   17,   21,
+       44,   13,   36,   26,   44,   36,   33,   34,   34,  771,
        21,   22,   55,   22,   22,   22,   22,   22,   22,   22,
-       26,   41,   26,   26,   33,   35,  764,   35,   53,   41,
-
-       22,   35,   38,   45,   38,   37,   53,   22,   22,   37,
-       41,   39,  114,   38,   37,  763,   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,  759,   49,   49,   23,   52,   49,   50,  155,   52,
-      155,   23,   49,   49,   50,   49,   51,  758,   52,  132,
-       51,   23,   79,   79,   51,  132,  757,   51,   74,   74,
-       74,   74,   74,   74,   74,   23,   78,   78,   78,   78,
-       78,   78,   78,  105,  169,   74,   79,  105,  105,   79,
-
-       81,  115,   81,   78,  134,   81,   81,   81,   81,   81,
-       81,   81,   74,  755,  115,  137,  754,  134,  169,  134,
-       78,   80,  753,   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,  752,  162,  243,   80,  162,  162,
-      162,  162,  162,  162,  162,  179,  214,  214,  214,  751,
-      749,   80,  164,  164,  164,  164,  164,  164,  164,  226,
-      249,  249,  249,  226,  616,  165,  616,  165,  748,  164,
-      165,  165,  165,  165,  165,  165,  165,  167,  167,  167,
-
-      167,  167,  167,  167,  747,  746,  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,  439,  439,  439,  472,  472,  472,  745,
-      743,  492,  493,  379,  379,  741,  439,  439,  740,  472,
-      472,  492,  493,  509,  509,  509,  738,  543,  543,  566,
-      566,  590,  591,  737,  591,  591,  509,  509,  735,  509,
-
-      543,  590,  566,  634,  734,  634,  770,  770,  770,  770,
-      771,  771,  772,  772,  773,  731,  773,  773,  730,  729,
-      728,  727,  726,  725,  724,  721,  720,  719,  718,  717,
-      716,  715,  714,  711,  708,  707,  706,  705,  704,  702,
-      701,  700,  699,  697,  695,  692,  691,  690,  689,  687,
-      686,  685,  684,  683,  682,  681,  680,  679,  678,  677,
-      676,  675,  674,  673,  672,  671,  670,  669,  667,  666,
-      665,  664,  663,  662,  661,  660,  659,  658,  656,  655,
-      654,  653,  652,  651,  650,  649,  648,  647,  646,  645,
-      643,  642,  641,  640,  639,  638,  637,  635,  633,  631,
-
-      630,  629,  627,  626,  625,  624,  623,  622,  621,  620,
-      619,  618,  617,  615,  614,  613,  612,  611,  610,  608,
-      607,  606,  605,  603,  602,  601,  600,  599,  598,  597,
-      596,  595,  594,  593,  592,  587,  585,  584,  583,  579,
-      578,  577,  576,  575,  574,  573,  572,  571,  569,  568,
-      564,  563,  561,  560,  558,  557,  556,  555,  554,  553,
-      552,  548,  547,  546,  544,  542,  541,  540,  539,  538,
-      537,  536,  535,  534,  533,  531,  530,  525,  524,  523,
-      522,  520,  519,  517,  516,  515,  514,  513,  511,  510,
-      508,  507,  506,  505,  504,  503,  502,  501,  499,  498,
-
-      497,  496,  495,  491,  490,  489,  488,  487,  486,  483,
-      482,  481,  480,  479,  478,  477,  476,  475,  474,  473,
-      471,  470,  467,  462,  460,  459,  458,  456,  455,  452,
-      451,  450,  449,  448,  447,  446,  444,  443,  442,  441,
-      440,  437,  435,  434,  433,  431,  430,  429,  428,  426,
-      424,  423,  418,  417,  415,  414,  413,  412,  411,  410,
-      409,  408,  407,  406,  405,  403,  402,  401,  400,  399,
-      398,  397,  395,  394,  393,  392,  391,  390,  389,  385,
-      384,  383,  380,  378,  368,  366,  362,  361,  360,  359,
-      357,  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,  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,  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,   11,    7,
-      769,  769,  769,  769,  769,  769,  769,  769,  769,  769,
-
-      769,  769,  769,  769,  769,  769,  769,  769,  769,  769,
-      769,  769,  769,  769,  769,  769,  769,  769,  769,  769,
-      769,  769,  769,  769,  769,  769,  769,  769,  769,  769,
-      769,  769,  769,  769,  769,  769,  769,  769,  769,  769,
-      769,  769,  769,  769,  769,  769,  769,  769,  769,  769,
-      769,  769,  769,  769,  769,  769,  769,  769,  769,  769,
-      769,  769,  769
+       26,   41,   26,   26,   33,   35,  769,   35,   53,   41,
+
+       22,   35,   38,   43,   38,   37,   53,   22,   22,   37,
+       41,   39,  114,   38,   37,  768,   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,  764,   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,  763,   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,
+
+      105,  105,  762,   78,  133,  228,   81,  152,   81,  228,
+       74,   81,   81,   81,   81,   81,   81,   81,   79,  760,
+       78,   79,   80,  759,   80,   80,   80,   80,   80,   80,
+       80,  125,  135,  138,  125,  125,  143,  758,  125,  144,
+      125,   80,  150,  150,  170,  135,  757,  135,   80,  138,
+      138,  143,  144,  180,  163,  756,  163,  497,   80,  163,
+      163,  163,  163,  163,  163,  163,  180,  497,  170,  185,
+      185,  754,   80,  165,  165,  165,  165,  165,  165,  165,
+      216,  216,  216,  251,  251,  251,  166,  621,  166,  621,
+      165,  166,  166,  166,  166,  166,  166,  166,  168,  168,
+
+      168,  168,  168,  168,  168,  753,  752,  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,  443,  443,  443,  477,
+      477,  477,  751,  639,  498,  639,  382,  382,  595,  443,
+      443,  750,  477,  477,  498,  514,  514,  514,  595,  548,
+      548,  571,  571,  596,  748,  596,  596,  746,  514,  514,
+
+      745,  514,  548,  743,  571,  775,  775,  775,  775,  776,
+      776,  777,  777,  778,  742,  778,  778,  740,  739,  736,
+      735,  734,  733,  732,  731,  730,  729,  726,  725,  724,
+      723,  722,  721,  720,  719,  716,  713,  712,  711,  710,
+      709,  707,  706,  705,  704,  702,  700,  697,  696,  695,
+      694,  692,  691,  690,  689,  688,  687,  686,  685,  684,
+      683,  682,  681,  680,  679,  678,  677,  676,  675,  674,
+      672,  671,  670,  669,  668,  667,  666,  665,  664,  663,
+      661,  660,  659,  658,  657,  656,  655,  654,  653,  652,
+      651,  650,  648,  647,  646,  645,  644,  643,  642,  640,
+
+      638,  636,  635,  634,  632,  631,  630,  629,  628,  627,
+      626,  625,  624,  623,  622,  620,  619,  618,  617,  616,
+      615,  613,  612,  611,  610,  608,  607,  606,  605,  604,
+      603,  602,  601,  600,  599,  598,  597,  592,  590,  589,
+      588,  584,  583,  582,  581,  580,  579,  578,  577,  576,
+      574,  573,  569,  568,  566,  565,  563,  562,  561,  560,
+      559,  558,  557,  553,  552,  551,  549,  547,  546,  545,
+      544,  543,  542,  541,  540,  539,  538,  536,  535,  530,
+      529,  528,  527,  525,  524,  522,  521,  520,  519,  518,
+      516,  515,  513,  512,  511,  510,  509,  508,  507,  506,
+
+      504,  503,  502,  501,  500,  496,  495,  494,  493,  492,
+      491,  488,  487,  486,  485,  484,  483,  482,  481,  480,
+      479,  478,  476,  475,  472,  467,  465,  464,  463,  461,
+      460,  457,  456,  455,  454,  452,  451,  450,  448,  447,
+      446,  445,  444,  441,  439,  438,  437,  435,  434,  433,
+      432,  430,  428,  427,  422,  421,  419,  418,  417,  416,
+      415,  414,  413,  412,  411,  410,  409,  407,  406,  405,
+      404,  403,  402,  401,  399,  398,  397,  396,  395,  394,
+      393,  392,  388,  387,  386,  383,  381,  371,  369,  365,
+      364,  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,  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,  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,   46,   40,
+       27,   24,   16,   11,    7,  774,  774,  774,  774,  774,
+
+      774,  774,  774,  774,  774,  774,  774,  774,  774,  774,
+      774,  774,  774,  774,  774,  774,  774,  774,  774,  774,
+      774,  774,  774,  774,  774,  774,  774,  774,  774,  774,
+      774,  774,  774,  774,  774,  774,  774,  774,  774,  774,
+      774,  774,  774,  774,  774,  774,  774,  774,  774,  774,
+      774,  774,  774,  774,  774,  774,  774,  774,  774,  774,
+      774,  774,  774,  774,  774,  774,  774,  774
     } ;
 
 /* Table of booleans, true if rule could match eol. */
-static yyconst flex_int32_t yy_rule_can_match_eol[222] =
+static yyconst flex_int32_t yy_rule_can_match_eol[223] =
     {   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, 
@@ -966,8 +967,8 @@ static yyconst flex_int32_t yy_rule_can_match_eol[222] =
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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.
@@ -1303,13 +1304,13 @@ yy_match:
                        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 >= 770 )
+                               if ( yy_current_state >= 775 )
                                        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 != 769 );
+               while ( yy_current_state != 774 );
                yy_cp = yyg->yy_last_accepting_cpos;
                yy_current_state = yyg->yy_last_accepting_state;
 
@@ -1584,8 +1585,11 @@ case 61:
 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 62:
+YY_RULE_SETUP
+{ return ES2_identifier_ES3_keyword(context, LAYOUT); }
+       YY_BREAK
+/* Reserved keywords for GLSL ES 3.00 that are not reserved for GLSL ES 1.00 */
 case 63:
 case 64:
 case 65:
@@ -1641,6 +1645,7 @@ case 114:
 case 115:
 case 116:
 case 117:
+case 118:
 YY_RULE_SETUP
 { 
     if (context->shaderVersion < 300) {
@@ -1650,9 +1655,20 @@ YY_RULE_SETUP
        return reserved_word(yyscanner);
 }
        YY_BREAK
-/* Reserved keywords */
-case 118:
+/* Reserved keywords in GLSL ES 1.00 that are not reserved in GLSL ES 3.00 */
 case 119:
+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 120:
 case 121:
 case 122:
@@ -1694,35 +1710,32 @@ case 157:
 case 158:
 case 159:
 case 160:
+case 161:
 YY_RULE_SETUP
 { return reserved_word(yyscanner); }
        YY_BREAK
-case 161:
+case 162:
 YY_RULE_SETUP
 {
    yylval->lex.string = NewPoolTString(yytext); 
    return check_type(yyscanner);
 }
        YY_BREAK
-case 162:
-YY_RULE_SETUP
-{ yylval->lex.i = strtol(yytext, 0, 0); return(INTCONSTANT); }
-       YY_BREAK
 case 163:
 YY_RULE_SETUP
 { yylval->lex.i = strtol(yytext, 0, 0); return(INTCONSTANT); }
        YY_BREAK
 case 164:
 YY_RULE_SETUP
-{ context->error(yylineno, "Invalid Octal number.", yytext); context->recover(); return 0;}
+{ yylval->lex.i = strtol(yytext, 0, 0); return(INTCONSTANT); }
        YY_BREAK
 case 165:
 YY_RULE_SETUP
-{ yylval->lex.i = strtol(yytext, 0, 0); return(INTCONSTANT); }
+{ context->error(yylineno, "Invalid Octal number.", yytext); context->recover(); return 0;}
        YY_BREAK
 case 166:
 YY_RULE_SETUP
-{ return uint_constant(context); }
+{ yylval->lex.i = strtol(yytext, 0, 0); return(INTCONSTANT); }
        YY_BREAK
 case 167:
 YY_RULE_SETUP
@@ -1734,7 +1747,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 169:
 YY_RULE_SETUP
-{ yylval->lex.f = static_cast<float>(atof_dot(yytext)); return(FLOATCONSTANT); }
+{ return uint_constant(context); }
        YY_BREAK
 case 170:
 YY_RULE_SETUP
@@ -1746,198 +1759,202 @@ YY_RULE_SETUP
        YY_BREAK
 case 172:
 YY_RULE_SETUP
-{  return(ADD_ASSIGN); }
+{ yylval->lex.f = static_cast<float>(atof_dot(yytext)); return(FLOATCONSTANT); }
        YY_BREAK
 case 173:
 YY_RULE_SETUP
-{  return(SUB_ASSIGN); }
+{  return(ADD_ASSIGN); }
        YY_BREAK
 case 174:
 YY_RULE_SETUP
-{  return(MUL_ASSIGN); }
+{  return(SUB_ASSIGN); }
        YY_BREAK
 case 175:
 YY_RULE_SETUP
-{  return(DIV_ASSIGN); }
+{  return(MUL_ASSIGN); }
        YY_BREAK
 case 176:
 YY_RULE_SETUP
-{  return(MOD_ASSIGN); }
+{  return(DIV_ASSIGN); }
        YY_BREAK
 case 177:
 YY_RULE_SETUP
-{  return(LEFT_ASSIGN); }
+{  return(MOD_ASSIGN); }
        YY_BREAK
 case 178:
 YY_RULE_SETUP
-{  return(RIGHT_ASSIGN); }
+{  return(LEFT_ASSIGN); }
        YY_BREAK
 case 179:
 YY_RULE_SETUP
-{  return(AND_ASSIGN); }
+{  return(RIGHT_ASSIGN); }
        YY_BREAK
 case 180:
 YY_RULE_SETUP
-{  return(XOR_ASSIGN); }
+{  return(AND_ASSIGN); }
        YY_BREAK
 case 181:
 YY_RULE_SETUP
-{  return(OR_ASSIGN); }
+{  return(XOR_ASSIGN); }
        YY_BREAK
 case 182:
 YY_RULE_SETUP
-{  return(INC_OP); }
+{  return(OR_ASSIGN); }
        YY_BREAK
 case 183:
 YY_RULE_SETUP
-{  return(DEC_OP); }
+{  return(INC_OP); }
        YY_BREAK
 case 184:
 YY_RULE_SETUP
-{  return(AND_OP); }
+{  return(DEC_OP); }
        YY_BREAK
 case 185:
 YY_RULE_SETUP
-{  return(OR_OP); }
+{  return(AND_OP); }
        YY_BREAK
 case 186:
 YY_RULE_SETUP
-{  return(XOR_OP); }
+{  return(OR_OP); }
        YY_BREAK
 case 187:
 YY_RULE_SETUP
-{  return(LE_OP); }
+{  return(XOR_OP); }
        YY_BREAK
 case 188:
 YY_RULE_SETUP
-{  return(GE_OP); }
+{  return(LE_OP); }
        YY_BREAK
 case 189:
 YY_RULE_SETUP
-{  return(EQ_OP); }
+{  return(GE_OP); }
        YY_BREAK
 case 190:
 YY_RULE_SETUP
-{  return(NE_OP); }
+{  return(EQ_OP); }
        YY_BREAK
 case 191:
 YY_RULE_SETUP
-{  return(LEFT_OP); }
+{  return(NE_OP); }
        YY_BREAK
 case 192:
 YY_RULE_SETUP
-{  return(RIGHT_OP); }
+{  return(LEFT_OP); }
        YY_BREAK
 case 193:
 YY_RULE_SETUP
-{ context->lexAfterType = false; return(SEMICOLON); }
+{  return(RIGHT_OP); }
        YY_BREAK
 case 194:
 YY_RULE_SETUP
-{ context->lexAfterType = false; return(LEFT_BRACE); }
+{ context->lexAfterType = false; return(SEMICOLON); }
        YY_BREAK
 case 195:
 YY_RULE_SETUP
-{ return(RIGHT_BRACE); }
+{ context->lexAfterType = false; return(LEFT_BRACE); }
        YY_BREAK
 case 196:
 YY_RULE_SETUP
-{ if (context->inTypeParen) context->lexAfterType = false; return(COMMA); }
+{ return(RIGHT_BRACE); }
        YY_BREAK
 case 197:
 YY_RULE_SETUP
-{ return(COLON); }
+{ if (context->inTypeParen) context->lexAfterType = false; return(COMMA); }
        YY_BREAK
 case 198:
 YY_RULE_SETUP
-{ context->lexAfterType = false; return(EQUAL); }
+{ return(COLON); }
        YY_BREAK
 case 199:
 YY_RULE_SETUP
-{ context->lexAfterType = false; context->inTypeParen = true; return(LEFT_PAREN); }
+{ context->lexAfterType = false; return(EQUAL); }
        YY_BREAK
 case 200:
 YY_RULE_SETUP
-{ context->inTypeParen = false; return(RIGHT_PAREN); }
+{ context->lexAfterType = false; context->inTypeParen = true; return(LEFT_PAREN); }
        YY_BREAK
 case 201:
 YY_RULE_SETUP
-{ return(LEFT_BRACKET); }
+{ context->inTypeParen = false; return(RIGHT_PAREN); }
        YY_BREAK
 case 202:
 YY_RULE_SETUP
-{ return(RIGHT_BRACKET); }
+{ return(LEFT_BRACKET); }
        YY_BREAK
 case 203:
 YY_RULE_SETUP
-{ BEGIN(FIELDS);  return(DOT); }
+{ return(RIGHT_BRACKET); }
        YY_BREAK
 case 204:
 YY_RULE_SETUP
-{ return(BANG); }
+{ BEGIN(FIELDS);  return(DOT); }
        YY_BREAK
 case 205:
 YY_RULE_SETUP
-{ return(DASH); }
+{ return(BANG); }
        YY_BREAK
 case 206:
 YY_RULE_SETUP
-{ return(TILDE); }
+{ return(DASH); }
        YY_BREAK
 case 207:
 YY_RULE_SETUP
-{ return(PLUS); }
+{ return(TILDE); }
        YY_BREAK
 case 208:
 YY_RULE_SETUP
-{ return(STAR); }
+{ return(PLUS); }
        YY_BREAK
 case 209:
 YY_RULE_SETUP
-{ return(SLASH); }
+{ return(STAR); }
        YY_BREAK
 case 210:
 YY_RULE_SETUP
-{ return(PERCENT); }
+{ return(SLASH); }
        YY_BREAK
 case 211:
 YY_RULE_SETUP
-{ return(LEFT_ANGLE); }
+{ return(PERCENT); }
        YY_BREAK
 case 212:
 YY_RULE_SETUP
-{ return(RIGHT_ANGLE); }
+{ return(LEFT_ANGLE); }
        YY_BREAK
 case 213:
 YY_RULE_SETUP
-{ return(VERTICAL_BAR); }
+{ return(RIGHT_ANGLE); }
        YY_BREAK
 case 214:
 YY_RULE_SETUP
-{ return(CARET); }
+{ return(VERTICAL_BAR); }
        YY_BREAK
 case 215:
 YY_RULE_SETUP
-{ return(AMPERSAND); }
+{ return(CARET); }
        YY_BREAK
 case 216:
 YY_RULE_SETUP
-{ return(QUESTION); }
+{ return(AMPERSAND); }
        YY_BREAK
 case 217:
 YY_RULE_SETUP
+{ return(QUESTION); }
+       YY_BREAK
+case 218:
+YY_RULE_SETUP
 { 
     BEGIN(INITIAL);
     yylval->lex.string = NewPoolTString(yytext); 
     return FIELD_SELECTION;
 }
        YY_BREAK
-case 218:
+case 219:
 YY_RULE_SETUP
 {}
        YY_BREAK
-case 219:
-/* rule 219 can match eol */
+case 220:
+/* rule 220 can match eol */
 YY_RULE_SETUP
 {  }
        YY_BREAK
@@ -1946,11 +1963,11 @@ case YY_STATE_EOF(COMMENT):
 case YY_STATE_EOF(FIELDS):
 { context->AfterEOF = true; yyterminate(); }
        YY_BREAK
-case 220:
+case 221:
 YY_RULE_SETUP
 { context->warning(yylineno, "Unknown char", yytext, ""); return 0; }
        YY_BREAK
-case 221:
+case 222:
 YY_RULE_SETUP
 ECHO;
        YY_BREAK
@@ -2246,7 +2263,7 @@ static int yy_get_next_buffer (yyscan_t yyscanner)
                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 >= 770 )
+                       if ( yy_current_state >= 775 )
                                yy_c = yy_meta[(unsigned int) yy_c];
                        }
                yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
@@ -2275,11 +2292,11 @@ static int yy_get_next_buffer (yyscan_t yyscanner)
        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 >= 770 )
+               if ( yy_current_state >= 775 )
                        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 == 769);
+       yy_is_jam = (yy_current_state == 774);
 
        return yy_is_jam ? 0 : yy_current_state;
 }
index 6d23119..0d4626e 100644 (file)
      SAMPLER3D = 310,
      SAMPLER3DRECT = 311,
      SAMPLER2DSHADOW = 312,
-     IDENTIFIER = 313,
-     TYPE_NAME = 314,
-     FLOATCONSTANT = 315,
-     INTCONSTANT = 316,
-     UINTCONSTANT = 317,
-     BOOLCONSTANT = 318,
-     FIELD_SELECTION = 319,
-     LEFT_OP = 320,
-     RIGHT_OP = 321,
-     INC_OP = 322,
-     DEC_OP = 323,
-     LE_OP = 324,
-     GE_OP = 325,
-     EQ_OP = 326,
-     NE_OP = 327,
-     AND_OP = 328,
-     OR_OP = 329,
-     XOR_OP = 330,
-     MUL_ASSIGN = 331,
-     DIV_ASSIGN = 332,
-     ADD_ASSIGN = 333,
-     MOD_ASSIGN = 334,
-     LEFT_ASSIGN = 335,
-     RIGHT_ASSIGN = 336,
-     AND_ASSIGN = 337,
-     XOR_ASSIGN = 338,
-     OR_ASSIGN = 339,
-     SUB_ASSIGN = 340,
-     LEFT_PAREN = 341,
-     RIGHT_PAREN = 342,
-     LEFT_BRACKET = 343,
-     RIGHT_BRACKET = 344,
-     LEFT_BRACE = 345,
-     RIGHT_BRACE = 346,
-     DOT = 347,
-     COMMA = 348,
-     COLON = 349,
-     EQUAL = 350,
-     SEMICOLON = 351,
-     BANG = 352,
-     DASH = 353,
-     TILDE = 354,
-     PLUS = 355,
-     STAR = 356,
-     SLASH = 357,
-     PERCENT = 358,
-     LEFT_ANGLE = 359,
-     RIGHT_ANGLE = 360,
-     VERTICAL_BAR = 361,
-     CARET = 362,
-     AMPERSAND = 363,
-     QUESTION = 364
+     LAYOUT = 313,
+     IDENTIFIER = 314,
+     TYPE_NAME = 315,
+     FLOATCONSTANT = 316,
+     INTCONSTANT = 317,
+     UINTCONSTANT = 318,
+     BOOLCONSTANT = 319,
+     FIELD_SELECTION = 320,
+     LEFT_OP = 321,
+     RIGHT_OP = 322,
+     INC_OP = 323,
+     DEC_OP = 324,
+     LE_OP = 325,
+     GE_OP = 326,
+     EQ_OP = 327,
+     NE_OP = 328,
+     AND_OP = 329,
+     OR_OP = 330,
+     XOR_OP = 331,
+     MUL_ASSIGN = 332,
+     DIV_ASSIGN = 333,
+     ADD_ASSIGN = 334,
+     MOD_ASSIGN = 335,
+     LEFT_ASSIGN = 336,
+     RIGHT_ASSIGN = 337,
+     AND_ASSIGN = 338,
+     XOR_ASSIGN = 339,
+     OR_ASSIGN = 340,
+     SUB_ASSIGN = 341,
+     LEFT_PAREN = 342,
+     RIGHT_PAREN = 343,
+     LEFT_BRACKET = 344,
+     RIGHT_BRACKET = 345,
+     LEFT_BRACE = 346,
+     RIGHT_BRACE = 347,
+     DOT = 348,
+     COMMA = 349,
+     COLON = 350,
+     EQUAL = 351,
+     SEMICOLON = 352,
+     BANG = 353,
+     DASH = 354,
+     TILDE = 355,
+     PLUS = 356,
+     STAR = 357,
+     SLASH = 358,
+     PERCENT = 359,
+     LEFT_ANGLE = 360,
+     RIGHT_ANGLE = 361,
+     VERTICAL_BAR = 362,
+     CARET = 363,
+     AMPERSAND = 364,
+     QUESTION = 365
    };
 #endif
 
@@ -263,6 +264,7 @@ typedef union YYSTYPE
         union {
             TPublicType type;
             TPrecision precision;
+            TLayoutQualifier layoutQualifier;
             TQualifier qualifier;
             TFunction* function;
             TParameter param;
@@ -535,22 +537,22 @@ union yyalloc
 #endif
 
 /* YYFINAL -- State number of the termination state.  */
-#define YYFINAL  81
+#define YYFINAL  85
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   1674
+#define YYLAST   1675
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  110
+#define YYNTOKENS  111
 /* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  85
+#define YYNNTS  88
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  212
+#define YYNRULES  220
 /* YYNRULES -- Number of states.  */
-#define YYNSTATES  316
+#define YYNSTATES  329
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
-#define YYMAXUTOK   364
+#define YYMAXUTOK   365
 
 #define YYTRANSLATE(YYX)                                               \
   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
@@ -594,7 +596,7 @@ static const yytype_uint8 yytranslate[] =
       75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
       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
+     105,   106,   107,   108,   109,   110
 };
 
 #if YYDEBUG
@@ -613,109 +615,113 @@ static const yytype_uint16 yyprhs[] =
      223,   227,   230,   236,   240,   243,   247,   250,   251,   253,
      255,   257,   259,   261,   265,   271,   278,   284,   286,   289,
      294,   300,   305,   308,   310,   313,   315,   317,   319,   322,
-     324,   326,   328,   330,   333,   336,   338,   340,   343,   345,
-     347,   349,   351,   356,   358,   360,   362,   364,   366,   368,
-     370,   372,   374,   376,   378,   380,   382,   384,   386,   388,
-     390,   392,   394,   396,   398,   400,   402,   404,   406,   408,
-     409,   416,   417,   423,   425,   428,   432,   434,   438,   440,
-     445,   447,   449,   451,   453,   455,   457,   459,   461,   463,
-     466,   467,   468,   474,   476,   478,   479,   482,   483,   486,
-     489,   493,   495,   498,   500,   503,   509,   513,   515,   517,
-     522,   523,   530,   531,   540,   541,   549,   551,   553,   555,
-     556,   559,   563,   566,   569,   572,   576,   579,   581,   584,
-     586,   588,   589
+     324,   326,   329,   331,   333,   335,   338,   341,   343,   345,
+     348,   350,   352,   354,   359,   361,   365,   367,   371,   375,
+     377,   382,   384,   386,   388,   390,   392,   394,   396,   398,
+     400,   402,   404,   406,   408,   410,   412,   414,   416,   418,
+     420,   422,   424,   426,   428,   430,   432,   434,   435,   442,
+     443,   449,   451,   454,   458,   460,   464,   466,   471,   473,
+     475,   477,   479,   481,   483,   485,   487,   489,   492,   493,
+     494,   500,   502,   504,   505,   508,   509,   512,   515,   519,
+     521,   524,   526,   529,   535,   539,   541,   543,   548,   549,
+     556,   557,   566,   567,   575,   577,   579,   581,   582,   585,
+     589,   592,   595,   598,   602,   605,   607,   610,   612,   614,
+     615
 };
 
 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
 static const yytype_int16 yyrhs[] =
 {
-     191,     0,    -1,    58,    -1,   111,    -1,    61,    -1,    62,
-      -1,    60,    -1,    63,    -1,    86,   138,    87,    -1,   112,
-      -1,   113,    88,   114,    89,    -1,   115,    -1,   113,    92,
-      64,    -1,   113,    67,    -1,   113,    68,    -1,   138,    -1,
-     116,    -1,   117,    -1,   113,    92,   117,    -1,   119,    87,
-      -1,   118,    87,    -1,   120,    49,    -1,   120,    -1,   120,
-     136,    -1,   119,    93,   136,    -1,   121,    86,    -1,   158,
-      -1,    58,    -1,    64,    -1,   113,    -1,    67,   122,    -1,
-      68,   122,    -1,   123,   122,    -1,   100,    -1,    98,    -1,
-      97,    -1,   122,    -1,   124,   101,   122,    -1,   124,   102,
-     122,    -1,   124,    -1,   125,   100,   124,    -1,   125,    98,
-     124,    -1,   125,    -1,   126,    -1,   127,   104,   126,    -1,
-     127,   105,   126,    -1,   127,    69,   126,    -1,   127,    70,
-     126,    -1,   127,    -1,   128,    71,   127,    -1,   128,    72,
-     127,    -1,   128,    -1,   129,    -1,   130,    -1,   131,    -1,
-     132,    73,   131,    -1,   132,    -1,   133,    75,   132,    -1,
-     133,    -1,   134,    74,   133,    -1,   134,    -1,   134,   109,
-     138,    94,   136,    -1,   135,    -1,   122,   137,   136,    -1,
-      95,    -1,    76,    -1,    77,    -1,    78,    -1,    85,    -1,
-     136,    -1,   138,    93,   136,    -1,   135,    -1,   141,    96,
-      -1,   149,    96,    -1,     7,   156,   157,    96,    -1,   142,
-      87,    -1,   144,    -1,   143,    -1,   144,   146,    -1,   143,
-      93,   146,    -1,   151,    58,    86,    -1,   155,    58,    -1,
-     155,    58,    88,   139,    89,    -1,   152,   147,   145,    -1,
-     147,   145,    -1,   152,   147,   148,    -1,   147,   148,    -1,
-      -1,    40,    -1,    41,    -1,    42,    -1,   155,    -1,   150,
-      -1,   149,    93,    58,    -1,   149,    93,    58,    88,    89,
-      -1,   149,    93,    58,    88,   139,    89,    -1,   149,    93,
-      58,    95,   166,    -1,   151,    -1,   151,    58,    -1,   151,
-      58,    88,    89,    -1,   151,    58,    88,   139,    89,    -1,
-     151,    58,    95,   166,    -1,     3,    58,    -1,   155,    -1,
-     153,   155,    -1,     9,    -1,     8,    -1,    44,    -1,     3,
-      44,    -1,   154,    -1,     9,    -1,    40,    -1,    41,    -1,
-      45,    40,    -1,    45,    41,    -1,    43,    -1,   157,    -1,
-     156,   157,    -1,     4,    -1,     5,    -1,     6,    -1,   158,
-      -1,   158,    88,   139,    89,    -1,    49,    -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,    51,    -1,    52,    -1,
-      53,    -1,    55,    -1,   159,    -1,    59,    -1,    -1,    48,
-      58,    90,   160,   162,    91,    -1,    -1,    48,    90,   161,
-     162,    91,    -1,   163,    -1,   162,   163,    -1,   155,   164,
-      96,    -1,   165,    -1,   164,    93,   165,    -1,    58,    -1,
-      58,    88,   139,    89,    -1,   136,    -1,   140,    -1,   170,
-      -1,   169,    -1,   167,    -1,   179,    -1,   180,    -1,   183,
-      -1,   190,    -1,    90,    91,    -1,    -1,    -1,    90,   171,
-     178,   172,    91,    -1,   177,    -1,   169,    -1,    -1,   175,
-     177,    -1,    -1,   176,   169,    -1,    90,    91,    -1,    90,
-     178,    91,    -1,   168,    -1,   178,   168,    -1,    96,    -1,
-     138,    96,    -1,    19,    86,   138,    87,   181,    -1,   174,
-      17,   174,    -1,   174,    -1,   138,    -1,   151,    58,    95,
-     166,    -1,    -1,    50,    86,   184,   182,    87,   173,    -1,
-      -1,    16,   185,   174,    50,    86,   138,    87,    96,    -1,
-      -1,    18,    86,   186,   187,   189,    87,   173,    -1,   179,
-      -1,   167,    -1,   182,    -1,    -1,   188,    96,    -1,   188,
-      96,   138,    -1,    15,    96,    -1,    14,    96,    -1,    21,
-      96,    -1,    21,   138,    96,    -1,    20,    96,    -1,   192,
-      -1,   191,   192,    -1,   193,    -1,   140,    -1,    -1,   141,
-     194,   177,    -1
+     195,     0,    -1,    59,    -1,   112,    -1,    62,    -1,    63,
+      -1,    61,    -1,    64,    -1,    87,   139,    88,    -1,   113,
+      -1,   114,    89,   115,    90,    -1,   116,    -1,   114,    93,
+      65,    -1,   114,    68,    -1,   114,    69,    -1,   139,    -1,
+     117,    -1,   118,    -1,   114,    93,   118,    -1,   120,    88,
+      -1,   119,    88,    -1,   121,    49,    -1,   121,    -1,   121,
+     137,    -1,   120,    94,   137,    -1,   122,    87,    -1,   162,
+      -1,    59,    -1,    65,    -1,   114,    -1,    68,   123,    -1,
+      69,   123,    -1,   124,   123,    -1,   101,    -1,    99,    -1,
+      98,    -1,   123,    -1,   125,   102,   123,    -1,   125,   103,
+     123,    -1,   125,    -1,   126,   101,   125,    -1,   126,    99,
+     125,    -1,   126,    -1,   127,    -1,   128,   105,   127,    -1,
+     128,   106,   127,    -1,   128,    70,   127,    -1,   128,    71,
+     127,    -1,   128,    -1,   129,    72,   128,    -1,   129,    73,
+     128,    -1,   129,    -1,   130,    -1,   131,    -1,   132,    -1,
+     133,    74,   132,    -1,   133,    -1,   134,    76,   133,    -1,
+     134,    -1,   135,    75,   134,    -1,   135,    -1,   135,   110,
+     139,    95,   137,    -1,   136,    -1,   123,   138,   137,    -1,
+      96,    -1,    77,    -1,    78,    -1,    79,    -1,    86,    -1,
+     137,    -1,   139,    94,   137,    -1,   136,    -1,   142,    97,
+      -1,   150,    97,    -1,     7,   157,   161,    97,    -1,   143,
+      88,    -1,   145,    -1,   144,    -1,   145,   147,    -1,   144,
+      94,   147,    -1,   152,    59,    87,    -1,   156,    59,    -1,
+     156,    59,    89,   140,    90,    -1,   153,   148,   146,    -1,
+     148,   146,    -1,   153,   148,   149,    -1,   148,   149,    -1,
+      -1,    40,    -1,    41,    -1,    42,    -1,   156,    -1,   151,
+      -1,   150,    94,    59,    -1,   150,    94,    59,    89,    90,
+      -1,   150,    94,    59,    89,   140,    90,    -1,   150,    94,
+      59,    96,   170,    -1,   152,    -1,   152,    59,    -1,   152,
+      59,    89,    90,    -1,   152,    59,    89,   140,    90,    -1,
+     152,    59,    96,   170,    -1,     3,    59,    -1,   156,    -1,
+     154,   156,    -1,     9,    -1,     8,    -1,    44,    -1,     3,
+      44,    -1,   155,    -1,   158,    -1,   158,   155,    -1,     9,
+      -1,    40,    -1,    41,    -1,    45,    40,    -1,    45,    41,
+      -1,    43,    -1,   161,    -1,   157,   161,    -1,     4,    -1,
+       5,    -1,     6,    -1,    58,    87,   159,    88,    -1,   160,
+      -1,   159,    94,   160,    -1,    59,    -1,    59,    96,    62,
+      -1,    59,    96,    63,    -1,   162,    -1,   162,    89,   140,
+      90,    -1,    49,    -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,    51,    -1,    52,    -1,    53,    -1,    55,    -1,
+     163,    -1,    60,    -1,    -1,    48,    59,    91,   164,   166,
+      92,    -1,    -1,    48,    91,   165,   166,    92,    -1,   167,
+      -1,   166,   167,    -1,   156,   168,    97,    -1,   169,    -1,
+     168,    94,   169,    -1,    59,    -1,    59,    89,   140,    90,
+      -1,   137,    -1,   141,    -1,   174,    -1,   173,    -1,   171,
+      -1,   183,    -1,   184,    -1,   187,    -1,   194,    -1,    91,
+      92,    -1,    -1,    -1,    91,   175,   182,   176,    92,    -1,
+     181,    -1,   173,    -1,    -1,   179,   181,    -1,    -1,   180,
+     173,    -1,    91,    92,    -1,    91,   182,    92,    -1,   172,
+      -1,   182,   172,    -1,    97,    -1,   139,    97,    -1,    19,
+      87,   139,    88,   185,    -1,   178,    17,   178,    -1,   178,
+      -1,   139,    -1,   152,    59,    96,   170,    -1,    -1,    50,
+      87,   188,   186,    88,   177,    -1,    -1,    16,   189,   178,
+      50,    87,   139,    88,    97,    -1,    -1,    18,    87,   190,
+     191,   193,    88,   177,    -1,   183,    -1,   171,    -1,   186,
+      -1,    -1,   192,    97,    -1,   192,    97,   139,    -1,    15,
+      97,    -1,    14,    97,    -1,    21,    97,    -1,    21,   139,
+      97,    -1,    20,    97,    -1,   196,    -1,   195,   196,    -1,
+     197,    -1,   141,    -1,    -1,   142,   198,   181,    -1
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
 static const yytype_uint16 yyrline[] =
 {
-       0,   184,   184,   219,   222,   227,   232,   237,   242,   248,
-     251,   330,   333,   434,   444,   457,   465,   565,   568,   576,
-     580,   587,   591,   598,   604,   613,   621,   676,   683,   693,
-     696,   706,   716,   737,   738,   739,   744,   745,   754,   766,
-     767,   775,   786,   790,   791,   801,   811,   821,   834,   835,
-     845,   858,   862,   866,   870,   871,   884,   885,   898,   899,
-     912,   913,   930,   931,   944,   945,   946,   947,   948,   952,
-     955,   966,   974,  1001,  1006,  1016,  1054,  1057,  1064,  1072,
-    1093,  1114,  1125,  1154,  1159,  1169,  1174,  1184,  1187,  1190,
-    1193,  1199,  1206,  1209,  1231,  1249,  1273,  1296,  1300,  1318,
-    1326,  1358,  1378,  1466,  1475,  1498,  1504,  1511,  1520,  1529,
-    1535,  1539,  1544,  1549,  1555,  1561,  1570,  1580,  1587,  1590,
-    1593,  1599,  1602,  1617,  1621,  1625,  1629,  1633,  1637,  1642,
-    1647,  1652,  1657,  1662,  1667,  1672,  1677,  1682,  1687,  1692,
-    1697,  1703,  1709,  1715,  1720,  1725,  1734,  1739,  1744,  1757,
-    1757,  1771,  1771,  1780,  1783,  1798,  1830,  1834,  1840,  1848,
-    1864,  1868,  1872,  1873,  1879,  1880,  1881,  1882,  1883,  1887,
-    1888,  1888,  1888,  1898,  1899,  1903,  1903,  1904,  1904,  1909,
-    1912,  1922,  1925,  1931,  1932,  1936,  1944,  1948,  1958,  1963,
-    1980,  1980,  1985,  1985,  1992,  1992,  2000,  2003,  2009,  2012,
-    2018,  2022,  2029,  2036,  2043,  2050,  2061,  2070,  2074,  2081,
-    2084,  2090,  2090
+       0,   187,   187,   222,   225,   230,   235,   240,   245,   251,
+     254,   333,   336,   437,   447,   460,   468,   568,   571,   579,
+     583,   590,   594,   601,   607,   616,   624,   679,   686,   696,
+     699,   709,   719,   740,   741,   742,   747,   748,   757,   769,
+     770,   778,   789,   793,   794,   804,   814,   824,   837,   838,
+     848,   861,   865,   869,   873,   874,   887,   888,   901,   902,
+     915,   916,   933,   934,   947,   948,   949,   950,   951,   955,
+     958,   969,   977,  1004,  1009,  1019,  1057,  1060,  1067,  1075,
+    1096,  1117,  1128,  1157,  1162,  1172,  1177,  1187,  1190,  1193,
+    1196,  1202,  1209,  1212,  1234,  1252,  1276,  1299,  1303,  1321,
+    1329,  1361,  1381,  1469,  1478,  1501,  1507,  1514,  1523,  1532,
+    1535,  1539,  1546,  1550,  1555,  1560,  1566,  1572,  1581,  1591,
+    1598,  1601,  1604,  1610,  1617,  1620,  1626,  1629,  1632,  1638,
+    1641,  1656,  1660,  1664,  1668,  1672,  1676,  1681,  1686,  1691,
+    1696,  1701,  1706,  1711,  1716,  1721,  1726,  1731,  1736,  1742,
+    1748,  1754,  1759,  1764,  1773,  1778,  1783,  1796,  1796,  1810,
+    1810,  1819,  1822,  1837,  1869,  1873,  1879,  1887,  1903,  1907,
+    1911,  1912,  1918,  1919,  1920,  1921,  1922,  1926,  1927,  1927,
+    1927,  1937,  1938,  1942,  1942,  1943,  1943,  1948,  1951,  1961,
+    1964,  1970,  1971,  1975,  1983,  1987,  1997,  2002,  2019,  2019,
+    2024,  2024,  2031,  2031,  2039,  2042,  2048,  2051,  2057,  2061,
+    2068,  2075,  2082,  2089,  2100,  2109,  2113,  2120,  2123,  2129,
+    2129
 };
 #endif
 
@@ -733,7 +739,7 @@ static const char *const yytname[] =
   "MATRIX3", "MATRIX4", "IN_QUAL", "OUT_QUAL", "INOUT_QUAL", "UNIFORM",
   "VARYING", "CENTROID", "FLAT", "SMOOTH", "STRUCT", "VOID_TYPE", "WHILE",
   "SAMPLER2D", "SAMPLERCUBE", "SAMPLER_EXTERNAL_OES", "SAMPLER2DRECT",
-  "SAMPLER3D", "SAMPLER3DRECT", "SAMPLER2DSHADOW", "IDENTIFIER",
+  "SAMPLER3D", "SAMPLER3DRECT", "SAMPLER2DSHADOW", "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",
@@ -761,9 +767,10 @@ static const char *const yytname[] =
   "parameter_qualifier", "parameter_type_specifier",
   "init_declarator_list", "single_declaration", "fully_specified_type",
   "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",
@@ -791,35 +798,37 @@ static const yytype_uint16 yytoknum[] =
      325,   326,   327,   328,   329,   330,   331,   332,   333,   334,
      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
+     355,   356,   357,   358,   359,   360,   361,   362,   363,   364,
+     365
 };
 # endif
 
 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
 static const yytype_uint8 yyr1[] =
 {
-       0,   110,   111,   112,   112,   112,   112,   112,   112,   113,
-     113,   113,   113,   113,   113,   114,   115,   116,   116,   117,
-     117,   118,   118,   119,   119,   120,   121,   121,   121,   122,
-     122,   122,   122,   123,   123,   123,   124,   124,   124,   125,
-     125,   125,   126,   127,   127,   127,   127,   127,   128,   128,
-     128,   129,   130,   131,   132,   132,   133,   133,   134,   134,
-     135,   135,   136,   136,   137,   137,   137,   137,   137,   138,
-     138,   139,   140,   140,   140,   141,   142,   142,   143,   143,
-     144,   145,   145,   146,   146,   146,   146,   147,   147,   147,
-     147,   148,   149,   149,   149,   149,   149,   150,   150,   150,
-     150,   150,   150,   151,   151,   152,   153,   153,   153,   153,
-     154,   154,   154,   154,   154,   154,   155,   155,   156,   156,
-     156,   157,   157,   158,   158,   158,   158,   158,   158,   158,
-     158,   158,   158,   158,   158,   158,   158,   158,   158,   158,
-     158,   158,   158,   158,   158,   158,   158,   158,   158,   160,
-     159,   161,   159,   162,   162,   163,   164,   164,   165,   165,
-     166,   167,   168,   168,   169,   169,   169,   169,   169,   170,
-     171,   172,   170,   173,   173,   175,   174,   176,   174,   177,
-     177,   178,   178,   179,   179,   180,   181,   181,   182,   182,
-     184,   183,   185,   183,   186,   183,   187,   187,   188,   188,
-     189,   189,   190,   190,   190,   190,   190,   191,   191,   192,
-     192,   194,   193
+       0,   111,   112,   113,   113,   113,   113,   113,   113,   114,
+     114,   114,   114,   114,   114,   115,   116,   117,   117,   118,
+     118,   119,   119,   120,   120,   121,   122,   122,   122,   123,
+     123,   123,   123,   124,   124,   124,   125,   125,   125,   126,
+     126,   126,   127,   128,   128,   128,   128,   128,   129,   129,
+     129,   130,   131,   132,   133,   133,   134,   134,   135,   135,
+     136,   136,   137,   137,   138,   138,   138,   138,   138,   139,
+     139,   140,   141,   141,   141,   142,   143,   143,   144,   144,
+     145,   146,   146,   147,   147,   147,   147,   148,   148,   148,
+     148,   149,   150,   150,   150,   150,   150,   151,   151,   151,
+     151,   151,   151,   152,   152,   153,   154,   154,   154,   154,
+     154,   154,   155,   155,   155,   155,   155,   155,   156,   156,
+     157,   157,   157,   158,   159,   159,   160,   160,   160,   161,
+     161,   162,   162,   162,   162,   162,   162,   162,   162,   162,
+     162,   162,   162,   162,   162,   162,   162,   162,   162,   162,
+     162,   162,   162,   162,   162,   162,   162,   164,   163,   165,
+     163,   166,   166,   167,   168,   168,   169,   169,   170,   171,
+     172,   172,   173,   173,   173,   173,   173,   174,   175,   176,
+     174,   177,   177,   179,   178,   180,   178,   181,   181,   182,
+     182,   183,   183,   184,   185,   185,   186,   186,   188,   187,
+     189,   187,   190,   187,   191,   191,   192,   192,   193,   193,
+     194,   194,   194,   194,   194,   195,   195,   196,   196,   198,
+     197
 };
 
 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
@@ -836,17 +845,18 @@ static const yytype_uint8 yyr2[] =
        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,     2,     1,
-       1,     1,     1,     2,     2,     1,     1,     2,     1,     1,
-       1,     1,     4,     1,     1,     1,     1,     1,     1,     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,     1,     1,     1,     1,     0,
-       6,     0,     5,     1,     2,     3,     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,     0,     6,     0,
+       5,     1,     2,     3,     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 rule to reduce with in state
@@ -854,454 +864,456 @@ static const yytype_uint8 yyr2[] =
    means the default is an error.  */
 static const yytype_uint8 yydefact[] =
 {
-       0,     0,   118,   119,   120,     0,   106,   110,   127,   124,
-     125,   126,   131,   132,   133,   134,   135,   136,   128,   129,
-     130,   137,   138,   139,   140,   141,   142,   111,   112,   115,
-     107,     0,     0,   123,   143,   144,   145,   146,   148,   210,
-     211,     0,    77,    87,     0,    92,    97,     0,   109,   103,
-       0,   116,   121,   147,     0,   207,   209,   108,   102,     0,
-     113,   114,     0,   151,    72,     0,    75,    87,   105,    88,
-      89,    90,    78,     0,    87,     0,    73,    98,   104,   117,
-       0,     1,   208,     0,   149,     0,     0,   212,    79,    84,
-      86,    91,     0,    93,    80,     0,     0,     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,    74,     0,     0,     0,   153,
-       0,     0,   192,     0,     0,     0,     0,     0,   170,   179,
-     183,    36,    62,    69,     0,   161,     0,   121,   164,   181,
-     163,   162,     0,   165,   166,   167,   168,    81,    83,    85,
-       0,     0,    99,     0,   160,   101,    30,    31,     0,    13,
+       0,     0,   120,   121,   122,     0,   106,   112,   135,   132,
+     133,   134,   139,   140,   141,   142,   143,   144,   136,   137,
+     138,   145,   146,   147,   148,   149,   150,   113,   114,   117,
+     107,     0,     0,   131,   151,   152,   153,   154,     0,   156,
+     218,   219,     0,    77,    87,     0,    92,    97,     0,   109,
+     103,     0,   110,   118,   129,   155,     0,   215,   217,   108,
+     102,     0,   115,   116,     0,   159,     0,    72,     0,    75,
+      87,   105,    88,    89,    90,    78,     0,    87,     0,    73,
+      98,   104,   119,   111,     0,     1,   216,     0,   157,     0,
+     126,     0,   124,     0,   220,    79,    84,    86,    91,     0,
+      93,    80,     0,     0,     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,    74,     0,     0,     0,   161,     0,   123,     0,
+       0,     0,   200,     0,     0,     0,     0,     0,   178,   187,
+     191,    36,    62,    69,     0,   169,     0,   129,   172,   189,
+     171,   170,     0,   173,   174,   175,   176,    81,    83,    85,
+       0,     0,    99,     0,   168,   101,    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,   122,     0,   158,     0,   156,   152,
-     154,   203,   202,   177,   194,     0,   206,   204,     0,   190,
-     169,     0,    65,    66,    67,    68,    64,     0,     0,   184,
-     180,   182,     0,    94,     0,    96,   100,     8,     0,    15,
-      27,    12,    18,    24,    37,    38,    41,    40,    46,    47,
-      44,    45,    49,    50,    55,    57,    59,     0,   150,     0,
-       0,   155,     0,     0,     0,     0,     0,   205,     0,   171,
-      63,    70,     0,    95,    10,     0,     0,   157,     0,   176,
-     178,   197,   196,   199,   177,     0,   188,     0,     0,     0,
-      82,    61,   159,     0,   198,     0,     0,   187,   185,     0,
-       0,   172,     0,   200,     0,   177,     0,   174,   191,   173,
-       0,   201,   195,   186,   189,   193
+       0,     0,     0,     0,   130,     0,   166,     0,   164,   160,
+     162,   127,   128,   125,   211,   210,   185,   202,     0,   214,
+     212,     0,   198,   177,     0,    65,    66,    67,    68,    64,
+       0,     0,   192,   188,   190,     0,    94,     0,    96,   100,
+       8,     0,    15,    27,    12,    18,    24,    37,    38,    41,
+      40,    46,    47,    44,    45,    49,    50,    55,    57,    59,
+       0,   158,     0,     0,   163,     0,     0,     0,     0,     0,
+     213,     0,   179,    63,    70,     0,    95,    10,     0,     0,
+     165,     0,   184,   186,   205,   204,   207,   185,     0,   196,
+       0,     0,     0,    82,    61,   167,     0,   206,     0,     0,
+     195,   193,     0,     0,   180,     0,   208,     0,   185,     0,
+     182,   199,   181,     0,   209,   203,   194,   197,   201
 };
 
 /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-      -1,   109,   110,   111,   238,   112,   113,   114,   115,   116,
-     117,   118,   151,   120,   121,   122,   123,   124,   125,   126,
-     127,   128,   129,   130,   131,   152,   153,   227,   154,   133,
-     155,   156,    41,    42,    43,    89,    72,    73,    90,    44,
-      45,    46,    74,    47,    48,    49,    50,    51,   134,    53,
-     136,    85,   138,   139,   207,   208,   175,   158,   159,   160,
-     161,   221,   289,   308,   262,   263,   264,   309,   162,   163,
-     164,   298,   288,   165,   268,   213,   265,   283,   295,   296,
-     166,    54,    55,    56,    65
+      -1,   116,   117,   118,   251,   119,   120,   121,   122,   123,
+     124,   125,   161,   127,   128,   129,   130,   131,   132,   133,
+     134,   135,   136,   137,   138,   162,   163,   240,   164,   140,
+     165,   166,    42,    43,    44,    96,    75,    76,    97,    45,
+      46,    47,    77,    48,    49,    50,    51,    52,    91,    92,
+      53,   141,    55,   143,    89,   145,   146,   217,   218,   185,
+     168,   169,   170,   171,   234,   302,   321,   275,   276,   277,
+     322,   172,   173,   174,   311,   301,   175,   281,   226,   278,
+     296,   308,   309,   176,    56,    57,    58,    68
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -253
+#define YYPACT_NINF -282
 static const yytype_int16 yypact[] =
 {
-    1463,   -20,  -253,  -253,  -253,   125,  -253,  -253,  -253,  -253,
-    -253,  -253,  -253,  -253,  -253,  -253,  -253,  -253,  -253,  -253,
-    -253,  -253,  -253,  -253,  -253,  -253,  -253,  -253,  -253,  -253,
-    -253,    68,   -44,  -253,  -253,  -253,  -253,  -253,  -253,  -253,
-     -71,   -25,   -23,     1,   -66,  -253,    56,  1515,  -253,  -253,
-    1615,  -253,    49,  -253,  1406,  -253,  -253,  -253,  -253,  1615,
-    -253,  -253,    57,  -253,  -253,    64,  -253,    27,  -253,  -253,
-    -253,  -253,  -253,  1515,   104,    95,  -253,    -6,  -253,  -253,
-    1185,  -253,  -253,    59,  -253,  1515,   302,  -253,  -253,  -253,
-    -253,   101,  1515,   -62,  -253,   948,  1185,    74,  -253,  -253,
-    -253,  -253,  -253,  1185,  1185,  1185,  -253,  -253,  -253,  -253,
-    -253,   -28,  -253,  -253,  -253,    76,   -22,  1262,    75,  -253,
-    1185,   -67,   -26,  -253,   -52,    40,  -253,  -253,  -253,    91,
-      90,   -61,  -253,    78,  -253,  -253,  1515,   110,   202,  -253,
-      77,    79,  -253,    85,    86,    80,  1028,    88,    87,  -253,
-    -253,    63,  -253,  -253,   -35,  -253,   -71,    10,  -253,  -253,
-    -253,  -253,   400,  -253,  -253,  -253,  -253,    89,  -253,  -253,
-    1105,  1185,  -253,    93,  -253,  -253,  -253,  -253,   -10,  -253,
-    -253,  1185,  1565,  -253,  -253,  1185,    99,  -253,  -253,  -253,
-    1185,  1185,  1185,  1185,  1185,  1185,  1185,  1185,  1185,  1185,
-    1185,  1185,  1185,  1185,  -253,  1339,    98,    -9,  -253,  -253,
-    -253,  -253,  -253,    97,  -253,  1185,  -253,  -253,    14,  -253,
-    -253,   498,  -253,  -253,  -253,  -253,  -253,  1185,  1185,  -253,
-    -253,  -253,  1185,  -253,   100,  -253,  -253,  -253,   103,   102,
-    -253,   107,  -253,  -253,  -253,  -253,   -67,   -67,  -253,  -253,
-    -253,  -253,   -52,   -52,  -253,    91,    90,    41,  -253,  1185,
-     110,  -253,   129,    64,   694,   792,     4,  -253,   871,   498,
-    -253,  -253,   105,  -253,  -253,  1185,   108,  -253,   112,  -253,
-    -253,  -253,  -253,   871,    97,   144,   102,   132,   109,   111,
-    -253,  -253,  -253,  1185,  -253,   113,   116,   182,  -253,   115,
-     596,  -253,     6,  1185,   596,    97,  1185,  -253,  -253,  -253,
-     120,   102,  -253,  -253,  -253,  -253
+    1461,   -26,  -282,  -282,  -282,    67,  -282,  -282,  -282,  -282,
+    -282,  -282,  -282,  -282,  -282,  -282,  -282,  -282,  -282,  -282,
+    -282,  -282,  -282,  -282,  -282,  -282,  -282,  -282,  -282,  -282,
+    -282,    76,   -44,  -282,  -282,  -282,  -282,  -282,     1,  -282,
+    -282,    -5,     7,   -32,    -2,   -39,  -282,    50,  1518,  -282,
+    -282,  1615,    34,  -282,    14,  -282,  1403,  -282,  -282,  -282,
+    -282,  1615,  -282,  -282,    51,  -282,    85,  -282,    73,  -282,
+      56,  -282,  -282,  -282,  -282,  -282,  1518,   113,    88,  -282,
+      15,  -282,  -282,  -282,  1127,  -282,  -282,    71,  -282,  1518,
+      75,   -62,  -282,   315,  -282,  -282,  -282,  -282,   110,  1518,
+     -68,  -282,   211,  1127,    87,  -282,  -282,  -282,  -282,  -282,
+    1127,  1127,  1127,  -282,  -282,  -282,  -282,  -282,   -23,  -282,
+    -282,  -282,    89,   -25,  1205,    91,  -282,  1127,    21,   -70,
+    -282,   -46,    84,  -282,  -282,  -282,   102,   103,   -61,  -282,
+      92,  -282,  -282,  1518,   122,  1283,  -282,    96,  -282,    85,
+      86,    94,  -282,    97,    98,    99,   968,   101,   106,  -282,
+    -282,     5,  -282,  -282,    -7,  -282,    -5,   -45,  -282,  -282,
+    -282,  -282,   414,  -282,  -282,  -282,  -282,   100,  -282,  -282,
+    1046,  1127,  -282,   104,  -282,  -282,  -282,  -282,    18,  -282,
+    -282,  1127,  1564,  -282,  -282,  1127,   108,  -282,  -282,  -282,
+    1127,  1127,  1127,  1127,  1127,  1127,  1127,  1127,  1127,  1127,
+    1127,  1127,  1127,  1127,  -282,  1335,   112,    24,  -282,  -282,
+    -282,  -282,  -282,  -282,  -282,  -282,    95,  -282,  1127,  -282,
+    -282,    44,  -282,  -282,   513,  -282,  -282,  -282,  -282,  -282,
+    1127,  1127,  -282,  -282,  -282,  1127,  -282,   109,  -282,  -282,
+    -282,   114,   111,  -282,   115,  -282,  -282,  -282,  -282,    21,
+      21,  -282,  -282,  -282,  -282,   -46,   -46,  -282,   102,   103,
+      66,  -282,  1127,   122,  -282,   143,    73,   711,   810,    25,
+    -282,   890,   513,  -282,  -282,   116,  -282,  -282,  1127,   117,
+    -282,   121,  -282,  -282,  -282,  -282,   890,    95,   159,   111,
+     152,   124,   125,  -282,  -282,  -282,  1127,  -282,   119,   126,
+     196,  -282,   123,   612,  -282,    26,  1127,   612,    95,  1127,
+    -282,  -282,  -282,   128,   111,  -282,  -282,  -282,  -282
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -253,  -253,  -253,  -253,  -253,  -253,  -253,    22,  -253,  -253,
-    -253,  -253,   -75,  -253,   -43,  -253,   -91,   -47,  -253,  -253,
-    -253,    17,    18,    16,  -253,   -76,   -95,  -253,  -102,   -89,
-       9,    12,  -253,  -253,  -253,   128,   155,   149,   133,  -253,
-    -253,  -252,  -253,  -253,  -253,   -36,   219,   -27,     0,  -253,
-    -253,  -253,   106,  -130,  -253,   -34,  -164,   -21,  -141,  -249,
-    -253,  -253,  -253,   -59,  -227,  -253,  -253,   -63,    25,   -18,
-    -253,  -253,   -40,  -253,  -253,  -253,  -253,  -253,  -253,  -253,
-    -253,  -253,   194,  -253,  -253
+    -282,  -282,  -282,  -282,  -282,  -282,  -282,    28,  -282,  -282,
+    -282,  -282,   -75,  -282,   -40,  -282,   -55,   -42,  -282,  -282,
+    -282,    16,    17,    19,  -282,   -80,  -101,  -282,  -106,   -99,
+      11,    12,  -282,  -282,  -282,   130,   157,   153,   133,  -282,
+    -282,  -262,  -282,  -282,   181,   -35,   230,  -282,  -282,   105,
+     -31,     0,  -282,  -282,  -282,   118,  -137,  -282,   -22,  -171,
+     -21,  -167,  -260,  -282,  -282,  -282,   -65,  -281,  -282,  -282,
+     -67,    22,   -20,  -282,  -282,   -43,  -282,  -282,  -282,  -282,
+    -282,  -282,  -282,  -282,  -282,   199,  -282,  -282
 };
 
 /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
    positive, shift that token.  If negative, reduce the rule which
    number is the opposite.  If zero, do what YYDEFACT says.
    If YYTABLE_NINF, syntax error.  */
-#define YYTABLE_NINF -176
+#define YYTABLE_NINF -184
 static const yytype_int16 yytable[] =
 {
-      52,   174,    87,   178,   132,   119,   173,   235,   210,    39,
-      68,    78,    40,   202,    62,   280,   287,   194,   195,   132,
-     119,   231,   187,    79,    57,    64,   170,    75,   176,   177,
-      76,   287,    83,   171,   190,   191,    68,    91,    58,   179,
-     180,    69,    70,    71,   218,   189,    63,    52,   203,   137,
-      52,   307,   196,   197,    52,   307,    91,   297,   228,    52,
-     181,   229,    66,    39,   182,   184,    40,    69,    70,    71,
-      67,   185,   192,    52,   193,   210,   174,   237,   313,   239,
-      94,   234,    95,   228,   260,    52,   157,   261,   -76,    96,
-     243,   284,    52,   310,   132,   119,   -26,   228,    80,   228,
-     137,   257,   137,   248,   249,   250,   251,   228,    60,    61,
-     267,   198,   199,   266,    77,   244,   245,   119,   119,   119,
-     119,   119,   119,   119,   119,   119,   119,   119,   231,     2,
-       3,     4,   270,   271,   228,   275,    52,    80,    52,   222,
-     223,   224,   314,   272,    69,    70,    71,    84,   225,   246,
-     247,   252,   253,    93,    86,   135,   132,   119,   226,   167,
-     -27,   188,   157,   183,   200,   201,   286,   204,   206,   137,
-     276,   214,   215,   211,   219,   212,   216,   232,   220,   278,
-     291,   286,   236,   132,   119,  -123,   259,  -175,    57,   273,
-     299,   302,   274,   -28,   290,   228,   300,   292,   293,   305,
-     279,   311,   301,   304,   242,    52,     2,     3,     4,   303,
-     306,   174,     8,     9,    10,    11,   315,   254,   256,   255,
-     168,   157,    88,    92,    59,   169,   277,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,   205,   294,   281,   312,   269,   282,    82,     0,
-      32,    33,     0,    34,    35,    36,     0,    37,     0,     0,
-       0,    38,     0,     0,   157,   157,     0,     0,   157,   157,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   157,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   209,     0,     0,     0,     0,     0,     0,
-     157,     0,     0,     0,   157,     1,     2,     3,     4,     5,
-       6,     7,     8,     9,    10,    11,   140,   141,   142,     0,
-     143,   144,   145,   146,     0,     0,     0,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    28,     0,    29,    30,    31,     0,     0,
-      32,    33,   147,    34,    35,    36,     0,    37,     0,     0,
-      97,    38,    98,    99,   100,   101,   102,     0,     0,   103,
-     104,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   105,     0,
-       0,     0,   148,   149,     0,     0,     0,     0,   150,   106,
-     107,     0,   108,     1,     2,     3,     4,     5,     6,     7,
-       8,     9,    10,    11,   140,   141,   142,     0,   143,   144,
-     145,   146,     0,     0,     0,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    28,     0,    29,    30,    31,     0,     0,    32,    33,
-     147,    34,    35,    36,     0,    37,     0,     0,    97,    38,
-      98,    99,   100,   101,   102,     0,     0,   103,   104,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   105,     0,     0,     0,
-     148,   230,     0,     0,     0,     0,   150,   106,   107,     0,
-     108,     1,     2,     3,     4,     5,     6,     7,     8,     9,
-      10,    11,   140,   141,   142,     0,   143,   144,   145,   146,
-       0,     0,     0,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
-       0,    29,    30,    31,     0,     0,    32,    33,   147,    34,
-      35,    36,     0,    37,     0,     0,    97,    38,    98,    99,
-     100,   101,   102,     0,     0,   103,   104,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   105,     0,     0,     0,   148,     0,
-       0,     0,     0,     0,   150,   106,   107,     0,   108,     1,
-       2,     3,     4,     5,     6,     7,     8,     9,    10,    11,
-     140,   141,   142,     0,   143,   144,   145,   146,     0,     0,
-       0,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    27,    28,     0,    29,
-      30,    31,     0,     0,    32,    33,   147,    34,    35,    36,
-       0,    37,     0,     0,    97,    38,    98,    99,   100,   101,
-     102,     0,     0,   103,   104,     0,     0,     0,     0,     0,
+      54,    94,   184,   183,   139,   244,   188,    71,   220,   126,
+     248,    40,    41,    81,   212,    64,   310,   293,    59,   300,
+      82,   180,   139,   197,   204,   205,   148,   126,   181,   202,
+      87,   203,   149,    60,   300,   186,   187,   326,    72,    73,
+      74,    98,   -26,     7,    84,   189,   190,    65,    54,   213,
+     231,    54,   199,   320,   144,    78,    54,   320,    79,   206,
+     207,    54,    70,   194,    98,    71,   191,    40,    41,   195,
+     192,     2,     3,     4,    27,    28,    54,    29,   220,    31,
+     184,   247,   235,   236,   237,   252,   -76,   241,    66,    54,
+     242,   238,    67,   167,   256,    69,    72,    73,    74,    54,
+     139,   239,   101,    84,   102,   126,   250,   270,   144,    80,
+     144,   103,   241,   297,   323,   244,    62,    63,   273,   241,
+     241,   274,   279,   200,   201,   257,   258,   126,   126,   126,
+     126,   126,   126,   126,   126,   126,   126,   126,   241,   283,
+     284,   280,    88,    54,    90,    54,   285,   100,   327,   261,
+     262,   263,   264,    72,    73,    74,   208,   209,   221,   222,
+     241,   288,   259,   260,    93,   139,   265,   266,   142,   177,
+     126,   147,   167,   289,   -27,   299,   210,   193,   198,   211,
+     144,   216,   214,   224,   227,   228,  -183,   304,   232,   245,
+     299,   225,   139,   291,   249,  -131,   229,   126,   233,   286,
+     315,   272,   -28,    59,   287,   241,   303,   305,   306,   292,
+     324,   312,   313,   318,   317,    54,   316,   314,   184,   319,
+     255,     8,     9,    10,    11,   328,   267,    95,   268,   178,
+      99,   269,   179,    83,   167,    61,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,   290,   325,   307,   223,    86,   282,   294,   295,    32,
+      33,   215,    34,    35,    36,     0,    37,     0,     0,     0,
+     104,    39,   105,   106,   107,   108,   109,   167,   167,   110,
+     111,   167,   167,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   167,     0,   112,     0,
+       0,   182,     0,     0,     0,     0,     0,     0,     0,   113,
+     114,     0,   115,   167,     0,     0,     0,   167,     1,     2,
+       3,     4,     5,     6,     7,     8,     9,    10,    11,   150,
+     151,   152,     0,   153,   154,   155,   156,     0,     0,     0,
+      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,    25,    26,    27,    28,     0,    29,    30,
+      31,     0,     0,    32,    33,   157,    34,    35,    36,     0,
+      37,     0,     0,    38,   104,    39,   105,   106,   107,   108,
+     109,     0,     0,   110,   111,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   105,     0,     0,     0,    86,     0,     0,     0,
-       0,     0,   150,   106,   107,     0,   108,     1,     2,     3,
-       4,     5,     6,     7,     8,     9,    10,    11,   140,   141,
-     142,     0,   143,   144,   145,   146,     0,     0,     0,    12,
+       0,     0,   112,     0,     0,     0,   158,   159,     0,     0,
+       0,     0,   160,   113,   114,     0,   115,     1,     2,     3,
+       4,     5,     6,     7,     8,     9,    10,    11,   150,   151,
+     152,     0,   153,   154,   155,   156,     0,     0,     0,    12,
       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
       23,    24,    25,    26,    27,    28,     0,    29,    30,    31,
-       0,     0,    32,    33,   147,    34,    35,    36,     0,    37,
-       0,     0,    97,    38,    98,    99,   100,   101,   102,     0,
-       0,   103,   104,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    32,    33,   157,    34,    35,    36,     0,    37,
+       0,     0,    38,   104,    39,   105,   106,   107,   108,   109,
+       0,     0,   110,   111,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   112,     0,     0,     0,   158,   243,     0,     0,     0,
+       0,   160,   113,   114,     0,   115,     1,     2,     3,     4,
+       5,     6,     7,     8,     9,    10,    11,   150,   151,   152,
+       0,   153,   154,   155,   156,     0,     0,     0,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,    26,    27,    28,     0,    29,    30,    31,     0,
+       0,    32,    33,   157,    34,    35,    36,     0,    37,     0,
+       0,    38,   104,    39,   105,   106,   107,   108,   109,     0,
+       0,   110,   111,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     105,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     150,   106,   107,     0,   108,     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,
+     112,     0,     0,     0,   158,     0,     0,     0,     0,     0,
+     160,   113,   114,     0,   115,     1,     2,     3,     4,     5,
+       6,     7,     8,     9,    10,    11,   150,   151,   152,     0,
+     153,   154,   155,   156,     0,     0,     0,    12,    13,    14,
       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
       25,    26,    27,    28,     0,    29,    30,    31,     0,     0,
-      32,    33,     0,    34,    35,    36,     0,    37,     0,     0,
-      97,    38,    98,    99,   100,   101,   102,     0,     0,   103,
-     104,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   285,     2,     3,     4,   105,     6,
-       7,     8,     9,    10,    11,     0,     0,     0,   150,   106,
-     107,     0,   108,     0,     0,     0,    12,    13,    14,    15,
+      32,    33,   157,    34,    35,    36,     0,    37,     0,     0,
+      38,   104,    39,   105,   106,   107,   108,   109,     0,     0,
+     110,   111,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   112,
+       0,     0,     0,    93,     0,     0,     0,     0,     0,   160,
+     113,   114,     0,   115,     1,     2,     3,     4,     5,     6,
+       7,     8,     9,    10,    11,   150,   151,   152,     0,   153,
+     154,   155,   156,     0,     0,     0,    12,    13,    14,    15,
       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
       26,    27,    28,     0,    29,    30,    31,     0,     0,    32,
-      33,     0,    34,    35,    36,     0,    37,     0,     0,    97,
-      38,    98,    99,   100,   101,   102,     0,     0,   103,   104,
+      33,   157,    34,    35,    36,     0,    37,     0,     0,    38,
+     104,    39,   105,   106,   107,   108,   109,     0,     0,   110,
+     111,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   112,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   160,   113,
+     114,     0,   115,     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,     0,     0,    32,    33,
+       0,    34,    35,    36,     0,    37,     0,     0,    38,   104,
+      39,   105,   106,   107,   108,   109,     0,     0,   110,   111,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   105,     8,     9,
-      10,    11,     0,     0,     0,     0,     0,     0,   106,   107,
-       0,   108,     0,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,     0,     0,
-       0,     0,     0,     0,     0,     0,    32,    33,     0,    34,
-      35,    36,     0,    37,     0,     0,    97,    38,    98,    99,
-     100,   101,   102,     0,     0,   103,   104,     0,     0,     0,
+       0,     0,     0,   298,     2,     3,     4,   112,     6,     7,
+       8,     9,    10,    11,     0,     0,     0,   160,   113,   114,
+       0,   115,     0,     0,     0,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,    28,     0,    29,    30,    31,     0,     0,    32,    33,
+       0,    34,    35,    36,     0,    37,     0,     0,    38,   104,
+      39,   105,   106,   107,   108,   109,     0,     0,   110,   111,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   105,     0,     0,   172,     8,     9,
-      10,    11,     0,     0,     0,   106,   107,     0,   108,     0,
-       0,     0,     0,    12,    13,    14,    15,    16,    17,    18,
+       0,     0,     0,     0,     0,     0,     0,   112,     8,     9,
+      10,    11,     0,     0,     0,     0,     0,     0,   113,   114,
+       0,   115,     0,    12,    13,    14,    15,    16,    17,    18,
       19,    20,    21,    22,    23,    24,    25,    26,     0,     0,
        0,     0,     0,     0,     0,     0,    32,    33,     0,    34,
-      35,    36,     0,    37,     0,     0,    97,    38,    98,    99,
-     100,   101,   102,     0,     0,   103,   104,     0,     0,     0,
+      35,    36,     0,    37,     0,     0,     0,   104,    39,   105,
+     106,   107,   108,   109,     0,     0,   110,   111,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   105,     8,     9,    10,    11,     0,
-       0,     0,     0,     0,   217,   106,   107,     0,   108,     0,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,    26,     0,     0,     0,     0,     0,
-       0,     0,     0,    32,    33,     0,    34,    35,    36,     0,
-      37,     0,     0,    97,    38,    98,    99,   100,   101,   102,
-       0,     0,   103,   104,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   112,     8,     9,    10,    11,
+       0,     0,     0,     0,     0,   230,   113,   114,     0,   115,
+       0,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,     0,     0,     0,     0,
+       0,     0,     0,     0,    32,    33,     0,    34,    35,    36,
+       0,    37,     0,     0,     0,   104,    39,   105,   106,   107,
+     108,   109,     0,     0,   110,   111,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   112,     0,     0,   246,     8,     9,    10,
+      11,     0,     0,     0,   113,   114,     0,   115,     0,     0,
+       0,     0,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,     0,     0,     0,
+       0,     0,     0,     0,     0,    32,    33,     0,    34,    35,
+      36,     0,    37,     0,     0,     0,   104,    39,   105,   106,
+     107,   108,   109,     0,     0,   110,   111,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   105,     0,     0,   233,     8,     9,    10,    11,     0,
-       0,     0,   106,   107,     0,   108,     0,     0,     0,     0,
+       0,     0,     0,     0,   112,     8,     9,    10,    11,     0,
+       0,     0,     0,     0,     0,   113,   114,     0,   115,     0,
       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
       22,    23,    24,    25,    26,     0,     0,     0,     0,     0,
-       0,     0,     0,    32,    33,     0,    34,    35,    36,     0,
-      37,     0,     0,    97,    38,    98,    99,   100,   101,   102,
-       0,     0,   103,   104,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   105,     8,     9,    10,    11,     0,     0,     0,     0,
-       0,     0,   106,   107,     0,   108,     0,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,     0,     0,     0,     0,     0,     0,     0,     0,
-      32,   186,     0,    34,    35,    36,     0,    37,     0,     0,
-      97,    38,    98,    99,   100,   101,   102,     0,     0,   103,
-     104,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     2,     3,     4,     0,     0,   105,     8,
-       9,    10,    11,     0,     0,     0,     0,     0,     0,   106,
-     107,     0,   108,     0,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,    26,     0,
-       0,     0,     0,     0,     0,     0,     0,    32,    33,     0,
-      34,    35,    36,     0,    37,     0,     0,     0,    38,     0,
-       0,     0,     0,     0,     0,     0,    81,     0,     0,     1,
-       2,     3,     4,     5,     6,     7,     8,     9,    10,    11,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     258,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    27,    28,     0,    29,
-      30,    31,     0,     0,    32,    33,     0,    34,    35,    36,
-       0,    37,     0,     0,     0,    38,     1,     2,     3,     4,
-       5,     6,     7,     8,     9,    10,    11,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    12,    13,
+       0,     0,     0,    32,   196,     0,    34,    35,    36,     0,
+      37,     0,     0,     0,   104,    39,   105,   106,   107,   108,
+     109,     0,     0,   110,   111,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     2,     3,     4,
+       0,     0,   112,     8,     9,    10,    11,     0,     0,     0,
+       0,     0,     0,   113,   114,     0,   115,     0,    12,    13,
       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,    27,    28,     0,    29,    30,    31,     0,
+      24,    25,    26,     0,     0,     0,     0,     0,     0,     0,
        0,    32,    33,     0,    34,    35,    36,     0,    37,     2,
-       3,     4,    38,     0,     0,     8,     9,    10,    11,     0,
+       3,     4,     0,    39,     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,
-       0,     0,     0,    32,    33,     0,    34,    35,    36,     0,
-      37,     0,     0,     0,    38,     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,
+      22,    23,    24,    25,    26,   219,     0,     0,     0,     0,
        0,     0,     0,    32,    33,     0,    34,    35,    36,     0,
-      37,     0,     0,   240,    38,     8,     9,    10,    11,   241,
+      37,     0,     0,     0,     0,    39,     0,     0,     0,     0,
+       0,     0,     0,    85,     0,     0,     1,     2,     3,     4,
+       5,     6,     7,     8,     9,    10,    11,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   271,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,    26,    27,    28,     0,    29,    30,    31,     0,
+       0,    32,    33,     0,    34,    35,    36,     0,    37,     0,
+       0,    38,     0,    39,     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,     0,     0,    32,
+      33,     0,    34,    35,    36,     0,    37,     0,     0,    38,
+       0,    39,     2,     3,     4,     0,     0,     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,     0,     0,     0,    32,    33,     0,    34,
+      35,    36,     0,    37,     8,     9,    10,    11,    39,     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,     0,
+       0,     0,    32,    33,     0,    34,    35,    36,     0,    37,
+       0,     0,     0,   253,    39,     8,     9,    10,    11,   254,
        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,
        0,     0,     0,    32,    33,     0,    34,    35,    36,     0,
-      37,     0,     0,     0,    38
+      37,     0,     0,     0,     0,    39
 };
 
 static const yytype_int16 yycheck[] =
 {
-       0,    96,    65,   105,    80,    80,    95,   171,   138,     0,
-       9,    47,     0,    74,    58,   264,   268,    69,    70,    95,
-      95,   162,   117,    50,    44,    96,    88,    93,   103,   104,
-      96,   283,    59,    95,   101,   102,     9,    73,    58,    67,
-      68,    40,    41,    42,   146,   120,    90,    47,   109,    85,
-      50,   300,   104,   105,    54,   304,    92,   284,    93,    59,
-      88,    96,    87,    54,    92,    87,    54,    40,    41,    42,
-      93,    93,    98,    73,   100,   205,   171,    87,   305,   181,
-      86,   170,    88,    93,    93,    85,    86,    96,    87,    95,
-     185,    87,    92,    87,   170,   170,    86,    93,    88,    93,
-     136,   203,   138,   194,   195,   196,   197,    93,    40,    41,
-      96,    71,    72,   215,    58,   190,   191,   192,   193,   194,
-     195,   196,   197,   198,   199,   200,   201,   202,   269,     4,
-       5,     6,   227,   228,    93,    94,   136,    88,   138,    76,
-      77,    78,   306,   232,    40,    41,    42,    90,    85,   192,
-     193,   198,   199,    58,    90,    96,   232,   232,    95,    58,
-      86,    86,   162,    87,    73,    75,   268,    89,    58,   205,
-     259,    86,    86,    96,    86,    96,    96,    88,    91,    50,
-     275,   283,    89,   259,   259,    86,    88,    90,    44,    89,
-      58,   293,    89,    86,    89,    93,    87,    89,    86,    17,
-     263,   303,    91,    87,   182,   205,     4,     5,     6,    96,
-      95,   306,    10,    11,    12,    13,    96,   200,   202,   201,
-      92,   221,    67,    74,     5,    92,   260,    25,    26,    27,
-      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
-      38,    39,   136,   283,   265,   304,   221,   265,    54,    -1,
-      48,    49,    -1,    51,    52,    53,    -1,    55,    -1,    -1,
-      -1,    59,    -1,    -1,   264,   265,    -1,    -1,   268,   269,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   283,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    91,    -1,    -1,    -1,    -1,    -1,    -1,
-     300,    -1,    -1,    -1,   304,     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,    -1,    -1,
-      48,    49,    50,    51,    52,    53,    -1,    55,    -1,    -1,
-      58,    59,    60,    61,    62,    63,    64,    -1,    -1,    67,
-      68,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,    -1,
-      -1,    -1,    90,    91,    -1,    -1,    -1,    -1,    96,    97,
-      98,    -1,   100,     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,    -1,    -1,    48,    49,
-      50,    51,    52,    53,    -1,    55,    -1,    -1,    58,    59,
-      60,    61,    62,    63,    64,    -1,    -1,    67,    68,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    86,    -1,    -1,    -1,
-      90,    91,    -1,    -1,    -1,    -1,    96,    97,    98,    -1,
-     100,     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,    -1,    -1,    48,    49,    50,    51,
-      52,    53,    -1,    55,    -1,    -1,    58,    59,    60,    61,
-      62,    63,    64,    -1,    -1,    67,    68,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    86,    -1,    -1,    -1,    90,    -1,
-      -1,    -1,    -1,    -1,    96,    97,    98,    -1,   100,     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,    -1,    -1,    48,    49,    50,    51,    52,    53,
-      -1,    55,    -1,    -1,    58,    59,    60,    61,    62,    63,
-      64,    -1,    -1,    67,    68,    -1,    -1,    -1,    -1,    -1,
+       0,    68,   103,   102,    84,   172,   112,     9,   145,    84,
+     181,     0,     0,    48,    75,    59,   297,   277,    44,   281,
+      51,    89,   102,   124,    70,    71,    88,   102,    96,    99,
+      61,   101,    94,    59,   296,   110,   111,   318,    40,    41,
+      42,    76,    87,     9,    89,    68,    69,    91,    48,   110,
+     156,    51,   127,   313,    89,    94,    56,   317,    97,   105,
+     106,    61,    94,    88,    99,     9,    89,    56,    56,    94,
+      93,     4,     5,     6,    40,    41,    76,    43,   215,    45,
+     181,   180,    77,    78,    79,   191,    88,    94,    87,    89,
+      97,    86,    97,    93,   195,    88,    40,    41,    42,    99,
+     180,    96,    87,    89,    89,   180,    88,   213,   143,    59,
+     145,    96,    94,    88,    88,   282,    40,    41,    94,    94,
+      94,    97,   228,   102,   103,   200,   201,   202,   203,   204,
+     205,   206,   207,   208,   209,   210,   211,   212,    94,   240,
+     241,    97,    91,   143,    59,   145,   245,    59,   319,   204,
+     205,   206,   207,    40,    41,    42,    72,    73,    62,    63,
+      94,    95,   202,   203,    91,   245,   208,   209,    97,    59,
+     245,    96,   172,   272,    87,   281,    74,    88,    87,    76,
+     215,    59,    90,    97,    87,    87,    91,   288,    87,    89,
+     296,    97,   272,    50,    90,    87,    97,   272,    92,    90,
+     306,    89,    87,    44,    90,    94,    90,    90,    87,   276,
+     316,    59,    88,    17,    88,   215,    97,    92,   319,    96,
+     192,    10,    11,    12,    13,    97,   210,    70,   211,    99,
+      77,   212,    99,    52,   234,     5,    25,    26,    27,    28,
+      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
+      39,   273,   317,   296,   149,    56,   234,   278,   278,    48,
+      49,   143,    51,    52,    53,    -1,    55,    -1,    -1,    -1,
+      59,    60,    61,    62,    63,    64,    65,   277,   278,    68,
+      69,   281,   282,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   296,    -1,    87,    -1,
+      -1,    90,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    98,
+      99,    -1,   101,   313,    -1,    -1,    -1,   317,     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,    -1,    -1,    48,    49,    50,    51,    52,    53,    -1,
+      55,    -1,    -1,    58,    59,    60,    61,    62,    63,    64,
+      65,    -1,    -1,    68,    69,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    86,    -1,    -1,    -1,    90,    -1,    -1,    -1,
-      -1,    -1,    96,    97,    98,    -1,   100,     3,     4,     5,
+      -1,    -1,    87,    -1,    -1,    -1,    91,    92,    -1,    -1,
+      -1,    -1,    97,    98,    99,    -1,   101,     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,
       -1,    -1,    48,    49,    50,    51,    52,    53,    -1,    55,
-      -1,    -1,    58,    59,    60,    61,    62,    63,    64,    -1,
-      -1,    67,    68,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    58,    59,    60,    61,    62,    63,    64,    65,
+      -1,    -1,    68,    69,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    87,    -1,    -1,    -1,    91,    92,    -1,    -1,    -1,
+      -1,    97,    98,    99,    -1,   101,     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,    -1,
+      -1,    48,    49,    50,    51,    52,    53,    -1,    55,    -1,
+      -1,    58,    59,    60,    61,    62,    63,    64,    65,    -1,
+      -1,    68,    69,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      86,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      96,    97,    98,    -1,   100,     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,
+      87,    -1,    -1,    -1,    91,    -1,    -1,    -1,    -1,    -1,
+      97,    98,    99,    -1,   101,     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,    -1,    -1,
-      48,    49,    -1,    51,    52,    53,    -1,    55,    -1,    -1,
-      58,    59,    60,    61,    62,    63,    64,    -1,    -1,    67,
-      68,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,     3,     4,     5,     6,    86,     8,
-       9,    10,    11,    12,    13,    -1,    -1,    -1,    96,    97,
-      98,    -1,   100,    -1,    -1,    -1,    25,    26,    27,    28,
+      48,    49,    50,    51,    52,    53,    -1,    55,    -1,    -1,
+      58,    59,    60,    61,    62,    63,    64,    65,    -1,    -1,
+      68,    69,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    87,
+      -1,    -1,    -1,    91,    -1,    -1,    -1,    -1,    -1,    97,
+      98,    99,    -1,   101,     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,    -1,    -1,    48,
-      49,    -1,    51,    52,    53,    -1,    55,    -1,    -1,    58,
-      59,    60,    61,    62,    63,    64,    -1,    -1,    67,    68,
+      49,    50,    51,    52,    53,    -1,    55,    -1,    -1,    58,
+      59,    60,    61,    62,    63,    64,    65,    -1,    -1,    68,
+      69,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    87,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    97,    98,
+      99,    -1,   101,     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,    -1,    -1,    48,    49,
+      -1,    51,    52,    53,    -1,    55,    -1,    -1,    58,    59,
+      60,    61,    62,    63,    64,    65,    -1,    -1,    68,    69,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,    10,    11,
-      12,    13,    -1,    -1,    -1,    -1,    -1,    -1,    97,    98,
-      -1,   100,    -1,    25,    26,    27,    28,    29,    30,    31,
-      32,    33,    34,    35,    36,    37,    38,    39,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    48,    49,    -1,    51,
-      52,    53,    -1,    55,    -1,    -1,    58,    59,    60,    61,
-      62,    63,    64,    -1,    -1,    67,    68,    -1,    -1,    -1,
+      -1,    -1,    -1,     3,     4,     5,     6,    87,     8,     9,
+      10,    11,    12,    13,    -1,    -1,    -1,    97,    98,    99,
+      -1,   101,    -1,    -1,    -1,    25,    26,    27,    28,    29,
+      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+      40,    41,    -1,    43,    44,    45,    -1,    -1,    48,    49,
+      -1,    51,    52,    53,    -1,    55,    -1,    -1,    58,    59,
+      60,    61,    62,    63,    64,    65,    -1,    -1,    68,    69,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    86,    -1,    -1,    89,    10,    11,
-      12,    13,    -1,    -1,    -1,    97,    98,    -1,   100,    -1,
-      -1,    -1,    -1,    25,    26,    27,    28,    29,    30,    31,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    87,    10,    11,
+      12,    13,    -1,    -1,    -1,    -1,    -1,    -1,    98,    99,
+      -1,   101,    -1,    25,    26,    27,    28,    29,    30,    31,
       32,    33,    34,    35,    36,    37,    38,    39,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    48,    49,    -1,    51,
-      52,    53,    -1,    55,    -1,    -1,    58,    59,    60,    61,
-      62,    63,    64,    -1,    -1,    67,    68,    -1,    -1,    -1,
+      52,    53,    -1,    55,    -1,    -1,    -1,    59,    60,    61,
+      62,    63,    64,    65,    -1,    -1,    68,    69,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    86,    10,    11,    12,    13,    -1,
-      -1,    -1,    -1,    -1,    96,    97,    98,    -1,   100,    -1,
-      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-      35,    36,    37,    38,    39,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    48,    49,    -1,    51,    52,    53,    -1,
-      55,    -1,    -1,    58,    59,    60,    61,    62,    63,    64,
-      -1,    -1,    67,    68,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    87,    10,    11,    12,    13,
+      -1,    -1,    -1,    -1,    -1,    97,    98,    99,    -1,   101,
+      -1,    25,    26,    27,    28,    29,    30,    31,    32,    33,
+      34,    35,    36,    37,    38,    39,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    48,    49,    -1,    51,    52,    53,
+      -1,    55,    -1,    -1,    -1,    59,    60,    61,    62,    63,
+      64,    65,    -1,    -1,    68,    69,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    86,    -1,    -1,    89,    10,    11,    12,    13,    -1,
-      -1,    -1,    97,    98,    -1,   100,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    87,    -1,    -1,    90,    10,    11,    12,
+      13,    -1,    -1,    -1,    98,    99,    -1,   101,    -1,    -1,
+      -1,    -1,    25,    26,    27,    28,    29,    30,    31,    32,
+      33,    34,    35,    36,    37,    38,    39,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    48,    49,    -1,    51,    52,
+      53,    -1,    55,    -1,    -1,    -1,    59,    60,    61,    62,
+      63,    64,    65,    -1,    -1,    68,    69,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    87,    10,    11,    12,    13,    -1,
+      -1,    -1,    -1,    -1,    -1,    98,    99,    -1,   101,    -1,
       25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
       35,    36,    37,    38,    39,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    48,    49,    -1,    51,    52,    53,    -1,
-      55,    -1,    -1,    58,    59,    60,    61,    62,    63,    64,
-      -1,    -1,    67,    68,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    86,    10,    11,    12,    13,    -1,    -1,    -1,    -1,
-      -1,    -1,    97,    98,    -1,   100,    -1,    25,    26,    27,
-      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
-      38,    39,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      48,    49,    -1,    51,    52,    53,    -1,    55,    -1,    -1,
-      58,    59,    60,    61,    62,    63,    64,    -1,    -1,    67,
-      68,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,     4,     5,     6,    -1,    -1,    86,    10,
-      11,    12,    13,    -1,    -1,    -1,    -1,    -1,    -1,    97,
-      98,    -1,   100,    -1,    25,    26,    27,    28,    29,    30,
-      31,    32,    33,    34,    35,    36,    37,    38,    39,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    48,    49,    -1,
-      51,    52,    53,    -1,    55,    -1,    -1,    -1,    59,    -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,
-      91,    25,    26,    27,    28,    29,    30,    31,    32,    33,
-      34,    35,    36,    37,    38,    39,    40,    41,    -1,    43,
-      44,    45,    -1,    -1,    48,    49,    -1,    51,    52,    53,
-      -1,    55,    -1,    -1,    -1,    59,     3,     4,     5,     6,
-       7,     8,     9,    10,    11,    12,    13,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    25,    26,
+      55,    -1,    -1,    -1,    59,    60,    61,    62,    63,    64,
+      65,    -1,    -1,    68,    69,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,     4,     5,     6,
+      -1,    -1,    87,    10,    11,    12,    13,    -1,    -1,    -1,
+      -1,    -1,    -1,    98,    99,    -1,   101,    -1,    25,    26,
       27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
-      37,    38,    39,    40,    41,    -1,    43,    44,    45,    -1,
+      37,    38,    39,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    48,    49,    -1,    51,    52,    53,    -1,    55,     4,
-       5,     6,    59,    -1,    -1,    10,    11,    12,    13,    -1,
+       5,     6,    -1,    60,    -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,
+      35,    36,    37,    38,    39,    92,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    48,    49,    -1,    51,    52,    53,    -1,
-      55,    -1,    -1,    -1,    59,    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,
-      -1,    -1,    -1,    48,    49,    -1,    51,    52,    53,    -1,
-      55,    -1,    -1,    58,    59,    10,    11,    12,    13,    64,
+      55,    -1,    -1,    -1,    -1,    60,    -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,    92,    25,    26,
+      27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
+      37,    38,    39,    40,    41,    -1,    43,    44,    45,    -1,
+      -1,    48,    49,    -1,    51,    52,    53,    -1,    55,    -1,
+      -1,    58,    -1,    60,     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,    -1,    -1,    48,
+      49,    -1,    51,    52,    53,    -1,    55,    -1,    -1,    58,
+      -1,    60,     4,     5,     6,    -1,    -1,    -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,    -1,    -1,    -1,    48,    49,    -1,    51,
+      52,    53,    -1,    55,    10,    11,    12,    13,    60,    -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,    -1,
+      -1,    -1,    48,    49,    -1,    51,    52,    53,    -1,    55,
+      -1,    -1,    -1,    59,    60,    10,    11,    12,    13,    65,
       -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,
       -1,    -1,    -1,    48,    49,    -1,    51,    52,    53,    -1,
-      55,    -1,    -1,    -1,    59
+      55,    -1,    -1,    -1,    -1,    60
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -1311,35 +1323,36 @@ static const yytype_uint8 yystos[] =
        0,     3,     4,     5,     6,     7,     8,     9,    10,    11,
       12,    13,    25,    26,    27,    28,    29,    30,    31,    32,
       33,    34,    35,    36,    37,    38,    39,    40,    41,    43,
-      44,    45,    48,    49,    51,    52,    53,    55,    59,   140,
-     141,   142,   143,   144,   149,   150,   151,   153,   154,   155,
-     156,   157,   158,   159,   191,   192,   193,    44,    58,   156,
-      40,    41,    58,    90,    96,   194,    87,    93,     9,    40,
-      41,    42,   146,   147,   152,    93,    96,    58,   155,   157,
-      88,     0,   192,   157,    90,   161,    90,   177,   146,   145,
-     148,   155,   147,    58,    86,    88,    95,    58,    60,    61,
-      62,    63,    64,    67,    68,    86,    97,    98,   100,   111,
-     112,   113,   115,   116,   117,   118,   119,   120,   121,   122,
-     123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
-     133,   134,   135,   139,   158,    96,   160,   155,   162,   163,
-      14,    15,    16,    18,    19,    20,    21,    50,    90,    91,
-      96,   122,   135,   136,   138,   140,   141,   158,   167,   168,
-     169,   170,   178,   179,   180,   183,   190,    58,   145,   148,
-      88,    95,    89,   139,   136,   166,   122,   122,   138,    67,
-      68,    88,    92,    87,    87,    93,    49,   136,    86,   122,
-     101,   102,    98,   100,    69,    70,   104,   105,    71,    72,
-      73,    75,    74,   109,    89,   162,    58,   164,   165,    91,
-     163,    96,    96,   185,    86,    86,    96,    96,   138,    86,
-      91,   171,    76,    77,    78,    85,    95,   137,    93,    96,
-      91,   168,    88,    89,   139,   166,    89,    87,   114,   138,
-      58,    64,   117,   136,   122,   122,   124,   124,   126,   126,
-     126,   126,   127,   127,   131,   132,   133,   138,    91,    88,
-      93,    96,   174,   175,   176,   186,   138,    96,   184,   178,
-     136,   136,   139,    89,    89,    94,   139,   165,    50,   177,
-     169,   167,   179,   187,    87,     3,   138,   151,   182,   172,
-      89,   136,    89,    86,   182,   188,   189,   174,   181,    58,
-      87,    91,   138,    96,    87,    17,    95,   169,   173,   177,
-      87,   138,   173,   174,   166,    96
+      44,    45,    48,    49,    51,    52,    53,    55,    58,    60,
+     141,   142,   143,   144,   145,   150,   151,   152,   154,   155,
+     156,   157,   158,   161,   162,   163,   195,   196,   197,    44,
+      59,   157,    40,    41,    59,    91,    87,    97,   198,    88,
+      94,     9,    40,    41,    42,   147,   148,   153,    94,    97,
+      59,   156,   161,   155,    89,     0,   196,   161,    91,   165,
+      59,   159,   160,    91,   181,   147,   146,   149,   156,   148,
+      59,    87,    89,    96,    59,    61,    62,    63,    64,    65,
+      68,    69,    87,    98,    99,   101,   112,   113,   114,   116,
+     117,   118,   119,   120,   121,   122,   123,   124,   125,   126,
+     127,   128,   129,   130,   131,   132,   133,   134,   135,   136,
+     140,   162,    97,   164,   156,   166,   167,    96,    88,    94,
+      14,    15,    16,    18,    19,    20,    21,    50,    91,    92,
+      97,   123,   136,   137,   139,   141,   142,   162,   171,   172,
+     173,   174,   182,   183,   184,   187,   194,    59,   146,   149,
+      89,    96,    90,   140,   137,   170,   123,   123,   139,    68,
+      69,    89,    93,    88,    88,    94,    49,   137,    87,   123,
+     102,   103,    99,   101,    70,    71,   105,   106,    72,    73,
+      74,    76,    75,   110,    90,   166,    59,   168,   169,    92,
+     167,    62,    63,   160,    97,    97,   189,    87,    87,    97,
+      97,   139,    87,    92,   175,    77,    78,    79,    86,    96,
+     138,    94,    97,    92,   172,    89,    90,   140,   170,    90,
+      88,   115,   139,    59,    65,   118,   137,   123,   123,   125,
+     125,   127,   127,   127,   127,   128,   128,   132,   133,   134,
+     139,    92,    89,    94,    97,   178,   179,   180,   190,   139,
+      97,   188,   182,   137,   137,   140,    90,    90,    95,   140,
+     169,    50,   181,   173,   171,   183,   191,    88,     3,   139,
+     152,   186,   176,    90,   137,    90,    87,   186,   192,   193,
+     178,   185,    59,    88,    92,   139,    97,    88,    17,    96,
+     173,   177,   181,    88,   139,   177,   178,   170,    97
 };
 
 #define yyerrok                (yyerrstatus = 0)
@@ -3727,12 +3740,28 @@ yyreduce:
   case 110:
 
     {
+        (yyval.interm.type).qualifier = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+        (yyval.interm.type).layoutQualifier = (yyvsp[(1) - (1)].interm.layoutQualifier);
+    }
+    break;
+
+  case 111:
+
+    {
+        (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 112:
+
+    {
         (yyval.interm.type).qualifier = EvqConst;
                (yyval.interm.type).line = (yyvsp[(1) - (1)].lex).line;
     }
     break;
 
-  case 111:
+  case 113:
 
     {
                ES3_ONLY("in", (yyvsp[(1) - (1)].lex).line);
@@ -3741,7 +3770,7 @@ yyreduce:
     }
     break;
 
-  case 112:
+  case 114:
 
     {
                ES3_ONLY("out", (yyvsp[(1) - (1)].lex).line);
@@ -3750,7 +3779,7 @@ yyreduce:
     }
     break;
 
-  case 113:
+  case 115:
 
     {
                ES3_ONLY("in", (yyvsp[(1) - (2)].lex).line);
@@ -3760,7 +3789,7 @@ yyreduce:
     }
     break;
 
-  case 114:
+  case 116:
 
     {
                ES3_ONLY("out", (yyvsp[(1) - (2)].lex).line);
@@ -3770,7 +3799,7 @@ yyreduce:
     }
     break;
 
-  case 115:
+  case 117:
 
     {
         if (context->globalErrorCheck((yyvsp[(1) - (1)].lex).line, context->symbolTable.atGlobalLevel(), "uniform"))
@@ -3780,7 +3809,7 @@ yyreduce:
     }
     break;
 
-  case 116:
+  case 118:
 
     {
         (yyval.interm.type) = (yyvsp[(1) - (1)].interm.type);
@@ -3794,7 +3823,7 @@ yyreduce:
     }
     break;
 
-  case 117:
+  case 119:
 
     {
         (yyval.interm.type) = (yyvsp[(2) - (2)].interm.type);
@@ -3802,35 +3831,78 @@ yyreduce:
     }
     break;
 
-  case 118:
+  case 120:
 
     {
         (yyval.interm.precision) = EbpHigh;
     }
     break;
 
-  case 119:
+  case 121:
 
     {
         (yyval.interm.precision) = EbpMedium;
     }
     break;
 
-  case 120:
+  case 122:
 
     {
         (yyval.interm.precision) = EbpLow;
     }
     break;
 
-  case 121:
+  case 123:
+
+    {
+        ES3_ONLY("layout", (yyvsp[(1) - (4)].lex).line);
+        (yyval.interm.layoutQualifier) = (yyvsp[(3) - (4)].interm.layoutQualifier);
+    }
+    break;
+
+  case 124:
+
+    {
+        (yyval.interm.layoutQualifier) = (yyvsp[(1) - (1)].interm.layoutQualifier);
+    }
+    break;
+
+  case 125:
+
+    {
+        (yyval.interm.layoutQualifier) = context->joinLayoutQualifiers((yyvsp[(1) - (3)].interm.layoutQualifier), (yyvsp[(3) - (3)].interm.layoutQualifier));
+    }
+    break;
+
+  case 126:
+
+    {
+        (yyval.interm.layoutQualifier) = context->parseLayoutQualifier(*(yyvsp[(1) - (1)].lex).string, (yyvsp[(1) - (1)].lex).line);
+    }
+    break;
+
+  case 127:
+
+    {
+        (yyval.interm.layoutQualifier) = context->parseLayoutQualifier(*(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 128:
+
+    {
+        (yyval.interm.layoutQualifier) = context->parseLayoutQualifier(*(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 129:
 
     {
         (yyval.interm.type) = (yyvsp[(1) - (1)].interm.type);
     }
     break;
 
-  case 122:
+  case 130:
 
     {
         (yyval.interm.type) = (yyvsp[(1) - (4)].interm.type);
@@ -3846,7 +3918,7 @@ yyreduce:
     }
     break;
 
-  case 123:
+  case 131:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -3854,7 +3926,7 @@ yyreduce:
     }
     break;
 
-  case 124:
+  case 132:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -3862,7 +3934,7 @@ yyreduce:
     }
     break;
 
-  case 125:
+  case 133:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -3870,7 +3942,7 @@ yyreduce:
     }
     break;
 
-  case 126:
+  case 134:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -3878,7 +3950,7 @@ yyreduce:
     }
     break;
 
-  case 127:
+  case 135:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -3886,7 +3958,7 @@ yyreduce:
     }
     break;
 
-  case 128:
+  case 136:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -3895,7 +3967,7 @@ yyreduce:
     }
     break;
 
-  case 129:
+  case 137:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -3904,7 +3976,7 @@ yyreduce:
     }
     break;
 
-  case 130:
+  case 138:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -3913,7 +3985,7 @@ yyreduce:
     }
     break;
 
-  case 131:
+  case 139:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -3922,7 +3994,7 @@ yyreduce:
     }
     break;
 
-  case 132:
+  case 140:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -3931,7 +4003,7 @@ yyreduce:
     }
     break;
 
-  case 133:
+  case 141:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -3940,7 +4012,7 @@ yyreduce:
     }
     break;
 
-  case 134:
+  case 142:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -3949,7 +4021,7 @@ yyreduce:
     }
     break;
 
-  case 135:
+  case 143:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -3958,7 +4030,7 @@ yyreduce:
     }
     break;
 
-  case 136:
+  case 144:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -3967,7 +4039,7 @@ yyreduce:
     }
     break;
 
-  case 137:
+  case 145:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -3976,7 +4048,7 @@ yyreduce:
     }
     break;
 
-  case 138:
+  case 146:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -3985,7 +4057,7 @@ yyreduce:
     }
     break;
 
-  case 139:
+  case 147:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -3994,7 +4066,7 @@ yyreduce:
     }
     break;
 
-  case 140:
+  case 148:
 
     {
         FRAG_VERT_ONLY("mat2", (yyvsp[(1) - (1)].lex).line);
@@ -4004,7 +4076,7 @@ yyreduce:
     }
     break;
 
-  case 141:
+  case 149:
 
     {
         FRAG_VERT_ONLY("mat3", (yyvsp[(1) - (1)].lex).line);
@@ -4014,7 +4086,7 @@ yyreduce:
     }
     break;
 
-  case 142:
+  case 150:
 
     {
         FRAG_VERT_ONLY("mat4", (yyvsp[(1) - (1)].lex).line);
@@ -4024,7 +4096,7 @@ yyreduce:
     }
     break;
 
-  case 143:
+  case 151:
 
     {
         FRAG_VERT_ONLY("sampler2D", (yyvsp[(1) - (1)].lex).line);
@@ -4033,7 +4105,7 @@ yyreduce:
     }
     break;
 
-  case 144:
+  case 152:
 
     {
         FRAG_VERT_ONLY("samplerCube", (yyvsp[(1) - (1)].lex).line);
@@ -4042,7 +4114,7 @@ yyreduce:
     }
     break;
 
-  case 145:
+  case 153:
 
     {
         if (!context->supportsExtension("GL_OES_EGL_image_external")) {
@@ -4055,7 +4127,7 @@ yyreduce:
     }
     break;
 
-  case 146:
+  case 154:
 
     {
         FRAG_VERT_ONLY("sampler3D", (yyvsp[(1) - (1)].lex).line);
@@ -4064,7 +4136,7 @@ yyreduce:
     }
     break;
 
-  case 147:
+  case 155:
 
     {
         FRAG_VERT_ONLY("struct", (yyvsp[(1) - (1)].interm.type).line);
@@ -4073,7 +4145,7 @@ yyreduce:
     }
     break;
 
-  case 148:
+  case 156:
 
     {
         //
@@ -4087,12 +4159,12 @@ yyreduce:
     }
     break;
 
-  case 149:
+  case 157:
 
     { if (context->enterStructDeclaration((yyvsp[(2) - (3)].lex).line, *(yyvsp[(2) - (3)].lex).string)) context->recover(); }
     break;
 
-  case 150:
+  case 158:
 
     {
         if (context->reservedErrorCheck((yyvsp[(2) - (6)].lex).line, *(yyvsp[(2) - (6)].lex).string))
@@ -4110,12 +4182,12 @@ yyreduce:
     }
     break;
 
-  case 151:
+  case 159:
 
     { if (context->enterStructDeclaration((yyvsp[(2) - (2)].lex).line, *(yyvsp[(2) - (2)].lex).string)) context->recover(); }
     break;
 
-  case 152:
+  case 160:
 
     {
         TType* structure = new TType((yyvsp[(4) - (5)].interm.typeList), TString(""));
@@ -4125,14 +4197,14 @@ yyreduce:
     }
     break;
 
-  case 153:
+  case 161:
 
     {
         (yyval.interm.typeList) = (yyvsp[(1) - (1)].interm.typeList);
     }
     break;
 
-  case 154:
+  case 162:
 
     {
         (yyval.interm.typeList) = (yyvsp[(1) - (2)].interm.typeList);
@@ -4148,7 +4220,7 @@ yyreduce:
     }
     break;
 
-  case 155:
+  case 163:
 
     {
         (yyval.interm.typeList) = (yyvsp[(2) - (3)].interm.typeList);
@@ -4181,7 +4253,7 @@ yyreduce:
     }
     break;
 
-  case 156:
+  case 164:
 
     {
         (yyval.interm.typeList) = NewPoolTTypeList();
@@ -4189,14 +4261,14 @@ yyreduce:
     }
     break;
 
-  case 157:
+  case 165:
 
     {
         (yyval.interm.typeList)->push_back((yyvsp[(3) - (3)].interm.typeLine));
     }
     break;
 
-  case 158:
+  case 166:
 
     {
         if (context->reservedErrorCheck((yyvsp[(1) - (1)].lex).line, *(yyvsp[(1) - (1)].lex).string))
@@ -4208,7 +4280,7 @@ yyreduce:
     }
     break;
 
-  case 159:
+  case 167:
 
     {
         if (context->reservedErrorCheck((yyvsp[(1) - (4)].lex).line, *(yyvsp[(1) - (4)].lex).string))
@@ -4225,67 +4297,67 @@ yyreduce:
     }
     break;
 
-  case 160:
+  case 168:
 
     { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); }
     break;
 
-  case 161:
+  case 169:
 
     { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
     break;
 
-  case 162:
+  case 170:
 
     { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermAggregate); }
     break;
 
-  case 163:
+  case 171:
 
     { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
     break;
 
-  case 164:
+  case 172:
 
     { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
     break;
 
-  case 165:
+  case 173:
 
     { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
     break;
 
-  case 166:
+  case 174:
 
     { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
     break;
 
-  case 167:
+  case 175:
 
     { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
     break;
 
-  case 168:
+  case 176:
 
     { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
     break;
 
-  case 169:
+  case 177:
 
     { (yyval.interm.intermAggregate) = 0; }
     break;
 
-  case 170:
+  case 178:
 
     { context->symbolTable.push(); }
     break;
 
-  case 171:
+  case 179:
 
     { context->symbolTable.pop(); }
     break;
 
-  case 172:
+  case 180:
 
     {
         if ((yyvsp[(3) - (5)].interm.intermAggregate) != 0) {
@@ -4296,44 +4368,44 @@ yyreduce:
     }
     break;
 
-  case 173:
+  case 181:
 
     { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
     break;
 
-  case 174:
+  case 182:
 
     { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
     break;
 
-  case 175:
+  case 183:
 
     { context->symbolTable.push(); }
     break;
 
-  case 176:
+  case 184:
 
     { context->symbolTable.pop(); (yyval.interm.intermNode) = (yyvsp[(2) - (2)].interm.intermNode); }
     break;
 
-  case 177:
+  case 185:
 
     { context->symbolTable.push(); }
     break;
 
-  case 178:
+  case 186:
 
     { context->symbolTable.pop(); (yyval.interm.intermNode) = (yyvsp[(2) - (2)].interm.intermNode); }
     break;
 
-  case 179:
+  case 187:
 
     {
         (yyval.interm.intermNode) = 0;
     }
     break;
 
-  case 180:
+  case 188:
 
     {
         if ((yyvsp[(2) - (3)].interm.intermAggregate)) {
@@ -4344,31 +4416,31 @@ yyreduce:
     }
     break;
 
-  case 181:
+  case 189:
 
     {
         (yyval.interm.intermAggregate) = context->intermediate.makeAggregate((yyvsp[(1) - (1)].interm.intermNode), 0);
     }
     break;
 
-  case 182:
+  case 190:
 
     {
         (yyval.interm.intermAggregate) = context->intermediate.growAggregate((yyvsp[(1) - (2)].interm.intermAggregate), (yyvsp[(2) - (2)].interm.intermNode), 0);
     }
     break;
 
-  case 183:
+  case 191:
 
     { (yyval.interm.intermNode) = 0; }
     break;
 
-  case 184:
+  case 192:
 
     { (yyval.interm.intermNode) = static_cast<TIntermNode*>((yyvsp[(1) - (2)].interm.intermTypedNode)); }
     break;
 
-  case 185:
+  case 193:
 
     {
         if (context->boolErrorCheck((yyvsp[(1) - (5)].lex).line, (yyvsp[(3) - (5)].interm.intermTypedNode)))
@@ -4377,7 +4449,7 @@ yyreduce:
     }
     break;
 
-  case 186:
+  case 194:
 
     {
         (yyval.interm.nodePair).node1 = (yyvsp[(1) - (3)].interm.intermNode);
@@ -4385,7 +4457,7 @@ yyreduce:
     }
     break;
 
-  case 187:
+  case 195:
 
     {
         (yyval.interm.nodePair).node1 = (yyvsp[(1) - (1)].interm.intermNode);
@@ -4393,7 +4465,7 @@ yyreduce:
     }
     break;
 
-  case 188:
+  case 196:
 
     {
         (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode);
@@ -4402,7 +4474,7 @@ yyreduce:
     }
     break;
 
-  case 189:
+  case 197:
 
     {
         TIntermNode* intermNode;
@@ -4420,12 +4492,12 @@ yyreduce:
     }
     break;
 
-  case 190:
+  case 198:
 
     { context->symbolTable.push(); ++context->loopNestingLevel; }
     break;
 
-  case 191:
+  case 199:
 
     {
         context->symbolTable.pop();
@@ -4434,12 +4506,12 @@ yyreduce:
     }
     break;
 
-  case 192:
+  case 200:
 
     { ++context->loopNestingLevel; }
     break;
 
-  case 193:
+  case 201:
 
     {
         if (context->boolErrorCheck((yyvsp[(8) - (8)].lex).line, (yyvsp[(6) - (8)].interm.intermTypedNode)))
@@ -4450,12 +4522,12 @@ yyreduce:
     }
     break;
 
-  case 194:
+  case 202:
 
     { context->symbolTable.push(); ++context->loopNestingLevel; }
     break;
 
-  case 195:
+  case 203:
 
     {
         context->symbolTable.pop();
@@ -4464,35 +4536,35 @@ yyreduce:
     }
     break;
 
-  case 196:
+  case 204:
 
     {
         (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode);
     }
     break;
 
-  case 197:
+  case 205:
 
     {
         (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode);
     }
     break;
 
-  case 198:
+  case 206:
 
     {
         (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode);
     }
     break;
 
-  case 199:
+  case 207:
 
     {
         (yyval.interm.intermTypedNode) = 0;
     }
     break;
 
-  case 200:
+  case 208:
 
     {
         (yyval.interm.nodePair).node1 = (yyvsp[(1) - (2)].interm.intermTypedNode);
@@ -4500,7 +4572,7 @@ yyreduce:
     }
     break;
 
-  case 201:
+  case 209:
 
     {
         (yyval.interm.nodePair).node1 = (yyvsp[(1) - (3)].interm.intermTypedNode);
@@ -4508,7 +4580,7 @@ yyreduce:
     }
     break;
 
-  case 202:
+  case 210:
 
     {
         if (context->loopNestingLevel <= 0) {
@@ -4519,7 +4591,7 @@ yyreduce:
     }
     break;
 
-  case 203:
+  case 211:
 
     {
         if (context->loopNestingLevel <= 0) {
@@ -4530,7 +4602,7 @@ yyreduce:
     }
     break;
 
-  case 204:
+  case 212:
 
     {
         (yyval.interm.intermNode) = context->intermediate.addBranch(EOpReturn, (yyvsp[(1) - (2)].lex).line);
@@ -4541,7 +4613,7 @@ yyreduce:
     }
     break;
 
-  case 205:
+  case 213:
 
     {
         (yyval.interm.intermNode) = context->intermediate.addBranch(EOpReturn, (yyvsp[(2) - (3)].interm.intermTypedNode), (yyvsp[(1) - (3)].lex).line);
@@ -4556,7 +4628,7 @@ yyreduce:
     }
     break;
 
-  case 206:
+  case 214:
 
     {
         FRAG_ONLY("discard", (yyvsp[(1) - (2)].lex).line);
@@ -4564,7 +4636,7 @@ yyreduce:
     }
     break;
 
-  case 207:
+  case 215:
 
     {
         (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode);
@@ -4572,7 +4644,7 @@ yyreduce:
     }
     break;
 
-  case 208:
+  case 216:
 
     {
         (yyval.interm.intermNode) = context->intermediate.growAggregate((yyvsp[(1) - (2)].interm.intermNode), (yyvsp[(2) - (2)].interm.intermNode), 0);
@@ -4580,21 +4652,21 @@ yyreduce:
     }
     break;
 
-  case 209:
+  case 217:
 
     {
         (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode);
     }
     break;
 
-  case 210:
+  case 218:
 
     {
         (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode);
     }
     break;
 
-  case 211:
+  case 219:
 
     {
         TFunction* function = (yyvsp[(1) - (1)].interm).function;
@@ -4683,7 +4755,7 @@ yyreduce:
     }
     break;
 
-  case 212:
+  case 220:
 
     {
         //?? Check that all paths return a value if return type != void ?
index 6226f29..77bb70c 100644 (file)
      SAMPLER3D = 310,
      SAMPLER3DRECT = 311,
      SAMPLER2DSHADOW = 312,
-     IDENTIFIER = 313,
-     TYPE_NAME = 314,
-     FLOATCONSTANT = 315,
-     INTCONSTANT = 316,
-     UINTCONSTANT = 317,
-     BOOLCONSTANT = 318,
-     FIELD_SELECTION = 319,
-     LEFT_OP = 320,
-     RIGHT_OP = 321,
-     INC_OP = 322,
-     DEC_OP = 323,
-     LE_OP = 324,
-     GE_OP = 325,
-     EQ_OP = 326,
-     NE_OP = 327,
-     AND_OP = 328,
-     OR_OP = 329,
-     XOR_OP = 330,
-     MUL_ASSIGN = 331,
-     DIV_ASSIGN = 332,
-     ADD_ASSIGN = 333,
-     MOD_ASSIGN = 334,
-     LEFT_ASSIGN = 335,
-     RIGHT_ASSIGN = 336,
-     AND_ASSIGN = 337,
-     XOR_ASSIGN = 338,
-     OR_ASSIGN = 339,
-     SUB_ASSIGN = 340,
-     LEFT_PAREN = 341,
-     RIGHT_PAREN = 342,
-     LEFT_BRACKET = 343,
-     RIGHT_BRACKET = 344,
-     LEFT_BRACE = 345,
-     RIGHT_BRACE = 346,
-     DOT = 347,
-     COMMA = 348,
-     COLON = 349,
-     EQUAL = 350,
-     SEMICOLON = 351,
-     BANG = 352,
-     DASH = 353,
-     TILDE = 354,
-     PLUS = 355,
-     STAR = 356,
-     SLASH = 357,
-     PERCENT = 358,
-     LEFT_ANGLE = 359,
-     RIGHT_ANGLE = 360,
-     VERTICAL_BAR = 361,
-     CARET = 362,
-     AMPERSAND = 363,
-     QUESTION = 364
+     LAYOUT = 313,
+     IDENTIFIER = 314,
+     TYPE_NAME = 315,
+     FLOATCONSTANT = 316,
+     INTCONSTANT = 317,
+     UINTCONSTANT = 318,
+     BOOLCONSTANT = 319,
+     FIELD_SELECTION = 320,
+     LEFT_OP = 321,
+     RIGHT_OP = 322,
+     INC_OP = 323,
+     DEC_OP = 324,
+     LE_OP = 325,
+     GE_OP = 326,
+     EQ_OP = 327,
+     NE_OP = 328,
+     AND_OP = 329,
+     OR_OP = 330,
+     XOR_OP = 331,
+     MUL_ASSIGN = 332,
+     DIV_ASSIGN = 333,
+     ADD_ASSIGN = 334,
+     MOD_ASSIGN = 335,
+     LEFT_ASSIGN = 336,
+     RIGHT_ASSIGN = 337,
+     AND_ASSIGN = 338,
+     XOR_ASSIGN = 339,
+     OR_ASSIGN = 340,
+     SUB_ASSIGN = 341,
+     LEFT_PAREN = 342,
+     RIGHT_PAREN = 343,
+     LEFT_BRACKET = 344,
+     RIGHT_BRACKET = 345,
+     LEFT_BRACE = 346,
+     RIGHT_BRACE = 347,
+     DOT = 348,
+     COMMA = 349,
+     COLON = 350,
+     EQUAL = 351,
+     SEMICOLON = 352,
+     BANG = 353,
+     DASH = 354,
+     TILDE = 355,
+     PLUS = 356,
+     STAR = 357,
+     SLASH = 358,
+     PERCENT = 359,
+     LEFT_ANGLE = 360,
+     RIGHT_ANGLE = 361,
+     VERTICAL_BAR = 362,
+     CARET = 363,
+     AMPERSAND = 364,
+     QUESTION = 365
    };
 #endif
 
@@ -179,6 +180,7 @@ typedef union YYSTYPE
         union {
             TPublicType type;
             TPrecision precision;
+            TLayoutQualifier layoutQualifier;
             TQualifier qualifier;
             TFunction* function;
             TParameter param;