Merge pull request #2781 from kevin-mccullough/FixLinkTimeValidationForGl_PerVertex

Fix incorrect link time validation for unused gl_PerVertex members
diff --git a/BUILD.bazel b/BUILD.bazel
index e8cf6a8..1115b7d 100644
--- a/BUILD.bazel
+++ b/BUILD.bazel
@@ -49,6 +49,11 @@
     srcs = ["build_info.py"],
 )
 
+py_binary(
+    name = "gen_extension_headers",
+    srcs = ["gen_extension_headers.py"],
+)
+
 genrule(
     name = "gen_build_info_h",
     srcs = ["CHANGES.md", "build_info.h.tmpl"],
@@ -58,6 +63,14 @@
     tools = [":build_info"],
 )
 
+genrule(
+    name = "gen_extension_headers_h",
+    srcs = ["glslang/ExtensionHeaders", "gen_extension_headers.py"],
+    outs = ["glslang/glsl_intrinsic_header.h"],
+    cmd_bash = "$(location gen_extension_headers) -i  $(location glslang/ExtensionHeaders) -o $(location glslang/glsl_intrinsic_header.h)",
+    tools = [":gen_extension_headers"],
+)
+
 COMMON_COPTS = select({
     "@bazel_tools//src/conditions:windows": [""],
     "//conditions:default": [
@@ -206,6 +219,7 @@
     srcs = [
         "StandAlone/StandAlone.cpp",
         "StandAlone/Worklist.h",
+        ":glslang/glsl_intrinsic_header.h"
     ],
     copts = COMMON_COPTS,
     deps = [
diff --git a/BUILD.gn b/BUILD.gn
index a37e1d2..06d3c4b 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -69,6 +69,23 @@
   ]
 }
 
+action("glslang_extension_headers") {
+  script = "gen_extension_headers.py"
+
+  out_file = "${target_gen_dir}/include/glslang/glsl_intrinsic_header.h"
+
+  inputs = [
+    script
+  ]
+  outputs = [ out_file ]
+  args = [
+    "-i",
+    rebase_path("glslang/ExtensionHeaders", root_build_dir),
+    "-o",
+    rebase_path(out_file, root_build_dir),
+  ]
+}
+
 spirv_tools_dir = glslang_spirv_tools_dir
 if (!defined(glslang_angle)) {
   glslang_angle = false
@@ -302,6 +319,7 @@
     ":glslang_build_info",
     ":glslang_default_resource_limits_sources",
     ":glslang_sources",
+    ":glslang_extension_headers",
   ]
   public_configs = [ ":glslang_hlsl" ]
 
diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp
index 63932c2..43aba9c 100644
--- a/SPIRV/GlslangToSpv.cpp
+++ b/SPIRV/GlslangToSpv.cpp
@@ -1830,10 +1830,10 @@
             std::vector<spv::Id> operandIds;
             assert(!modeId.second.empty());
             for (auto extraOperand : modeId.second) {
-                int nextConst = 0;
-                spv::Id operandId = createSpvConstantFromConstUnionArray(
-                    extraOperand->getType(), extraOperand->getConstArray(), nextConst, false);
-                operandIds.push_back(operandId);
+                if (extraOperand->getType().getQualifier().isSpecConstant())
+                    operandIds.push_back(getSymbolId(extraOperand->getAsSymbolNode()));
+                else
+                    operandIds.push_back(createSpvConstant(*extraOperand));
             }
             builder.addExecutionModeId(shaderEntry, static_cast<spv::ExecutionMode>(modeId.first), operandIds);
         }
@@ -4150,58 +4150,48 @@
 
         std::vector<spv::Id> operands;
         for (const auto& typeParam : spirvType.typeParams) {
-            if (typeParam.isConstant) {
-                // Constant expression
-                if (typeParam.constant->isLiteral()) {
-                    if (typeParam.constant->getBasicType() == glslang::EbtFloat) {
-                        float floatValue = static_cast<float>(typeParam.constant->getConstArray()[0].getDConst());
-                        unsigned literal = *reinterpret_cast<unsigned*>(&floatValue);
-                        operands.push_back(literal);
-                    } else if (typeParam.constant->getBasicType() == glslang::EbtInt) {
-                        unsigned literal = typeParam.constant->getConstArray()[0].getIConst();
-                        operands.push_back(literal);
-                    } else if (typeParam.constant->getBasicType() == glslang::EbtUint) {
-                        unsigned literal = typeParam.constant->getConstArray()[0].getUConst();
-                        operands.push_back(literal);
-                    } else if (typeParam.constant->getBasicType() == glslang::EbtBool) {
-                        unsigned literal = typeParam.constant->getConstArray()[0].getBConst();
-                        operands.push_back(literal);
-                    } else if (typeParam.constant->getBasicType() == glslang::EbtString) {
-                        auto str = typeParam.constant->getConstArray()[0].getSConst()->c_str();
-                        unsigned literal = 0;
-                        char* literalPtr = reinterpret_cast<char*>(&literal);
-                        unsigned charCount = 0;
-                        char ch = 0;
-                        do {
-                            ch = *(str++);
-                            *(literalPtr++) = ch;
-                            ++charCount;
-                            if (charCount == 4) {
-                                operands.push_back(literal);
-                                literalPtr = reinterpret_cast<char*>(&literal);
-                                charCount = 0;
-                            }
-                        } while (ch != 0);
-
-                        // Partial literal is padded with 0
-                        if (charCount > 0) {
-                            for (; charCount < 4; ++charCount)
-                                *(literalPtr++) = 0;
+            // Constant expression
+            if (typeParam.constant->isLiteral()) {
+                if (typeParam.constant->getBasicType() == glslang::EbtFloat) {
+                    float floatValue = static_cast<float>(typeParam.constant->getConstArray()[0].getDConst());
+                    unsigned literal = *reinterpret_cast<unsigned*>(&floatValue);
+                    operands.push_back(literal);
+                } else if (typeParam.constant->getBasicType() == glslang::EbtInt) {
+                    unsigned literal = typeParam.constant->getConstArray()[0].getIConst();
+                    operands.push_back(literal);
+                } else if (typeParam.constant->getBasicType() == glslang::EbtUint) {
+                    unsigned literal = typeParam.constant->getConstArray()[0].getUConst();
+                    operands.push_back(literal);
+                } else if (typeParam.constant->getBasicType() == glslang::EbtBool) {
+                    unsigned literal = typeParam.constant->getConstArray()[0].getBConst();
+                    operands.push_back(literal);
+                } else if (typeParam.constant->getBasicType() == glslang::EbtString) {
+                    auto str = typeParam.constant->getConstArray()[0].getSConst()->c_str();
+                    unsigned literal = 0;
+                    char* literalPtr = reinterpret_cast<char*>(&literal);
+                    unsigned charCount = 0;
+                    char ch = 0;
+                    do {
+                        ch = *(str++);
+                        *(literalPtr++) = ch;
+                        ++charCount;
+                        if (charCount == 4) {
                             operands.push_back(literal);
+                            literalPtr = reinterpret_cast<char*>(&literal);
+                            charCount = 0;
                         }
-                    } else
-                        assert(0); // Unexpected type
-                } else {
-                    int nextConst = 0;
-                    spv::Id constant = createSpvConstantFromConstUnionArray(
-                        typeParam.constant->getType(), typeParam.constant->getConstArray(), nextConst, false);
-                    operands.push_back(constant);
-                }
-            } else {
-                // Type specifier
-                spv::Id typeId = convertGlslangToSpvType(*typeParam.type);
-                operands.push_back(typeId);
-            }
+                    } while (ch != 0);
+
+                    // Partial literal is padded with 0
+                    if (charCount > 0) {
+                        for (; charCount < 4; ++charCount)
+                            *(literalPtr++) = 0;
+                        operands.push_back(literal);
+                    }
+                } else
+                    assert(0); // Unexpected type
+            } else
+                operands.push_back(createSpvConstant(*typeParam.constant));
         }
 
         if (spirvInst.set == "")
@@ -8847,12 +8837,12 @@
             std::vector<spv::Id> operandIds;
             assert(!decorateId.second.empty());
             for (auto extraOperand : decorateId.second) {
-                int nextConst = 0;
-                spv::Id operandId = createSpvConstantFromConstUnionArray(
-                    extraOperand->getType(), extraOperand->getConstArray(), nextConst, false);
-                operandIds.push_back(operandId);
+                if (extraOperand->getQualifier().isSpecConstant())
+                    operandIds.push_back(getSymbolId(extraOperand->getAsSymbolNode()));
+                else
+                    operandIds.push_back(createSpvConstant(*extraOperand));
             }
-            builder.addDecoration(id, static_cast<spv::Decoration>(decorateId.first), operandIds);
+            builder.addDecorationId(id, static_cast<spv::Decoration>(decorateId.first), operandIds);
         }
 
         // Add spirv_decorate_string
diff --git a/SPIRV/SpvPostProcess.cpp b/SPIRV/SpvPostProcess.cpp
index 23d7b5a..dd6dabc 100644
--- a/SPIRV/SpvPostProcess.cpp
+++ b/SPIRV/SpvPostProcess.cpp
@@ -44,10 +44,8 @@
 #include <algorithm>
 
 #include "SpvBuilder.h"
-
 #include "spirv.hpp"
-#include "GlslangToSpv.h"
-#include "SpvBuilder.h"
+
 namespace spv {
     #include "GLSL.std.450.h"
     #include "GLSL.ext.KHR.h"
@@ -113,8 +111,6 @@
             }
         }
         break;
-    case OpAccessChain:
-    case OpPtrAccessChain:
     case OpCopyObject:
         break;
     case OpFConvert:
@@ -161,26 +157,43 @@
         switch (inst.getImmediateOperand(1)) {
         case GLSLstd450Frexp:
         case GLSLstd450FrexpStruct:
-            if (getSpvVersion() < glslang::EShTargetSpv_1_3 && containsType(typeId, OpTypeInt, 16))
+            if (getSpvVersion() < spv::Spv_1_3 && containsType(typeId, OpTypeInt, 16))
                 addExtension(spv::E_SPV_AMD_gpu_shader_int16);
             break;
         case GLSLstd450InterpolateAtCentroid:
         case GLSLstd450InterpolateAtSample:
         case GLSLstd450InterpolateAtOffset:
-            if (getSpvVersion() < glslang::EShTargetSpv_1_3 && containsType(typeId, OpTypeFloat, 16))
+            if (getSpvVersion() < spv::Spv_1_3 && containsType(typeId, OpTypeFloat, 16))
                 addExtension(spv::E_SPV_AMD_gpu_shader_half_float);
             break;
         default:
             break;
         }
         break;
+    case OpAccessChain:
+    case OpPtrAccessChain:
+        if (isPointerType(typeId))
+            break;
+        if (basicTypeOp == OpTypeInt) {
+            if (width == 16)
+                addCapability(CapabilityInt16);
+            else if (width == 8)
+                addCapability(CapabilityInt8);
+        }
     default:
-        if (basicTypeOp == OpTypeFloat && width == 16)
-            addCapability(CapabilityFloat16);
-        if (basicTypeOp == OpTypeInt && width == 16)
-            addCapability(CapabilityInt16);
-        if (basicTypeOp == OpTypeInt && width == 8)
-            addCapability(CapabilityInt8);
+        if (basicTypeOp == OpTypeInt) {
+            if (width == 16)
+                addCapability(CapabilityInt16);
+            else if (width == 8)
+                addCapability(CapabilityInt8);
+            else if (width == 64)
+                addCapability(CapabilityInt64);
+        } else if (basicTypeOp == OpTypeFloat) {
+            if (width == 16)
+                addCapability(CapabilityFloat16);
+            else if (width == 64)
+                addCapability(CapabilityFloat64);
+        }
         break;
     }
 }
diff --git a/StandAlone/CMakeLists.txt b/StandAlone/CMakeLists.txt
index 91bec6c..2b163e7 100644
--- a/StandAlone/CMakeLists.txt
+++ b/StandAlone/CMakeLists.txt
@@ -31,6 +31,22 @@
 # ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 # POSSIBILITY OF SUCH DAMAGE.
 
+find_host_package(PythonInterp 3 REQUIRED)
+
+set(GLSLANG_INTRINSIC_H          "${GLSLANG_GENERATED_INCLUDEDIR}/glslang/glsl_intrinsic_header.h")
+set(GLSLANG_INTRINSIC_PY         "${CMAKE_CURRENT_SOURCE_DIR}/../gen_extension_headers.py")
+set(GLSLANG_INTRINSIC_HEADER_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../glslang/ExtensionHeaders")
+
+add_custom_command(
+    OUTPUT  ${GLSLANG_INTRINSIC_H}
+    COMMAND ${PYTHON_EXECUTABLE} "${GLSLANG_INTRINSIC_PY}"
+            "-i" ${GLSLANG_INTRINSIC_HEADER_DIR}
+            "-o" ${GLSLANG_INTRINSIC_H}
+    DEPENDS ${GLSLANG_INTRINSIC_PY}
+    COMMENT "Generating ${GLSLANG_INTRINSIC_H}")
+
+#add_custom_target(glslangValidator DEPENDS ${GLSLANG_INTRINSIC_H})
+
 add_library(glslang-default-resource-limits
             ${CMAKE_CURRENT_SOURCE_DIR}/ResourceLimits.cpp
             ${CMAKE_CURRENT_SOURCE_DIR}/resource_limits_c.cpp)
@@ -41,7 +57,7 @@
                            PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
                            PUBLIC $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}>)
 
-set(SOURCES StandAlone.cpp DirStackFileIncluder.h)
+set(SOURCES StandAlone.cpp DirStackFileIncluder.h  ${GLSLANG_INTRINSIC_H})
 
 add_executable(glslangValidator ${SOURCES})
 set_property(TARGET glslangValidator PROPERTY FOLDER tools)
diff --git a/StandAlone/StandAlone.cpp b/StandAlone/StandAlone.cpp
index e62f92f..23e510c 100644
--- a/StandAlone/StandAlone.cpp
+++ b/StandAlone/StandAlone.cpp
@@ -2,6 +2,7 @@
 // Copyright (C) 2002-2005  3Dlabs Inc. Ltd.
 // Copyright (C) 2013-2016 LunarG, Inc.
 // Copyright (C) 2016-2020 Google, Inc.
+// Modifications Copyright(C) 2021 Advanced Micro Devices, Inc.All rights reserved.
 //
 // All rights reserved.
 //
@@ -65,6 +66,8 @@
 // Build-time generated includes
 #include "glslang/build_info.h"
 
+#include "glslang/glsl_intrinsic_header.h"
+
 extern "C" {
     GLSLANG_EXPORT void ShOutputHtml();
 }
@@ -263,6 +266,7 @@
 
 // Track the user's #define and #undef from the command line.
 TPreamble UserPreamble;
+std::string PreambleString;
 
 //
 // Create the default name for saving a binary if -o is not provided.
@@ -1204,8 +1208,17 @@
                        "Use '-e <name>'.\n");
             shader->setSourceEntryPoint(sourceEntryPointName);
         }
+
+        std::string intrinsicString = getIntrinsic(compUnit.text, compUnit.count);
+
+        PreambleString = "";
         if (UserPreamble.isSet())
-            shader->setPreamble(UserPreamble.get());
+            PreambleString.append(UserPreamble.get());
+
+        if (!intrinsicString.empty())
+            PreambleString.append(intrinsicString);
+
+        shader->setPreamble(PreambleString.c_str());
         shader->addProcesses(Processes);
 
 #ifndef GLSLANG_WEB
diff --git a/Test/GL_ARB_draw_instanced.vert b/Test/GL_ARB_draw_instanced.vert
new file mode 100644
index 0000000..6e39086
--- /dev/null
+++ b/Test/GL_ARB_draw_instanced.vert
@@ -0,0 +1,18 @@
+#version 150
+#extension GL_ARB_draw_instanced : require
+#define ID gl_InstanceID
+
+uniform mat4 gtf_ModelViewProjectionMatrix;
+uniform vec3 instanceOffsets[3];
+in vec4 va[gl_MaxVertexAttribs];
+out vec4 color;
+
+void main (void)
+{
+        vec4 vertex = vec4(va[0].xy / 3.0, va[0].zw) + vec4(instanceOffsets[ID], 1.0);
+        color = vec4(0, 0, 0, 0);
+        for (int i = 1; i < gl_MaxVertexAttribs; i++)
+                color += va[i];
+        gl_Position = gtf_ModelViewProjectionMatrix * vertex;
+        gl_PointSize = 1.0;
+}
diff --git a/Test/GL_EXT_shader_integer_mix.vert b/Test/GL_EXT_shader_integer_mix.vert
new file mode 100644
index 0000000..3616e58
--- /dev/null
+++ b/Test/GL_EXT_shader_integer_mix.vert
@@ -0,0 +1,13 @@
+#version 330
+#extension GL_EXT_shader_integer_mix: require
+
+
+#if !defined GL_EXT_shader_integer_mix
+#  error GL_EXT_shader_integer_mix is not defined
+#elif GL_EXT_shader_integer_mix != 1
+#  error GL_EXT_shader_integer_mix is not equal to 1
+#endif
+
+void main(void) { 
+    gl_Position = vec4(0); 
+}
diff --git a/Test/baseResults/GL_ARB_draw_instanced.vert.out b/Test/baseResults/GL_ARB_draw_instanced.vert.out
new file mode 100644
index 0000000..e601bc8
--- /dev/null
+++ b/Test/baseResults/GL_ARB_draw_instanced.vert.out
@@ -0,0 +1,189 @@
+GL_ARB_draw_instanced.vert
+Shader version: 150
+Requested GL_ARB_draw_instanced
+0:? Sequence
+0:10  Function Definition: main( ( global void)
+0:10    Function Parameters: 
+0:12    Sequence
+0:12      Sequence
+0:12        move second child to first child ( temp 4-component vector of float)
+0:12          'vertex' ( temp 4-component vector of float)
+0:12          add ( temp 4-component vector of float)
+0:12            Construct vec4 ( temp 4-component vector of float)
+0:12              divide ( temp 2-component vector of float)
+0:12                vector swizzle ( temp 2-component vector of float)
+0:12                  direct index ( temp 4-component vector of float)
+0:12                    'va' ( in 64-element array of 4-component vector of float)
+0:12                    Constant:
+0:12                      0 (const int)
+0:12                  Sequence
+0:12                    Constant:
+0:12                      0 (const int)
+0:12                    Constant:
+0:12                      1 (const int)
+0:12                Constant:
+0:12                  3.000000
+0:12              vector swizzle ( temp 2-component vector of float)
+0:12                direct index ( temp 4-component vector of float)
+0:12                  'va' ( in 64-element array of 4-component vector of float)
+0:12                  Constant:
+0:12                    0 (const int)
+0:12                Sequence
+0:12                  Constant:
+0:12                    2 (const int)
+0:12                  Constant:
+0:12                    3 (const int)
+0:12            Construct vec4 ( temp 4-component vector of float)
+0:12              indirect index ( temp 3-component vector of float)
+0:12                'instanceOffsets' ( uniform 3-element array of 3-component vector of float)
+0:12                'gl_InstanceID' ( gl_InstanceId int InstanceId)
+0:12              Constant:
+0:12                1.000000
+0:13      move second child to first child ( temp 4-component vector of float)
+0:13        'color' ( smooth out 4-component vector of float)
+0:13        Constant:
+0:13          0.000000
+0:13          0.000000
+0:13          0.000000
+0:13          0.000000
+0:14      Sequence
+0:14        Sequence
+0:14          move second child to first child ( temp int)
+0:14            'i' ( temp int)
+0:14            Constant:
+0:14              1 (const int)
+0:14        Loop with condition tested first
+0:14          Loop Condition
+0:14          Compare Less Than ( temp bool)
+0:14            'i' ( temp int)
+0:14            Constant:
+0:14              64 (const int)
+0:14          Loop Body
+0:15          add second child into first child ( temp 4-component vector of float)
+0:15            'color' ( smooth out 4-component vector of float)
+0:15            indirect index ( temp 4-component vector of float)
+0:15              'va' ( in 64-element array of 4-component vector of float)
+0:15              'i' ( temp int)
+0:14          Loop Terminal Expression
+0:14          Post-Increment ( temp int)
+0:14            'i' ( temp int)
+0:16      move second child to first child ( temp 4-component vector of float)
+0:16        gl_Position: direct index for structure ( gl_Position 4-component vector of float Position)
+0:16          'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out unsized 1-element array of float ClipDistance gl_ClipDistance})
+0:16          Constant:
+0:16            0 (const uint)
+0:16        matrix-times-vector ( temp 4-component vector of float)
+0:16          'gtf_ModelViewProjectionMatrix' ( uniform 4X4 matrix of float)
+0:16          'vertex' ( temp 4-component vector of float)
+0:17      move second child to first child ( temp float)
+0:17        gl_PointSize: direct index for structure ( gl_PointSize float PointSize)
+0:17          'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out unsized 1-element array of float ClipDistance gl_ClipDistance})
+0:17          Constant:
+0:17            1 (const uint)
+0:17        Constant:
+0:17          1.000000
+0:?   Linker Objects
+0:?     'gtf_ModelViewProjectionMatrix' ( uniform 4X4 matrix of float)
+0:?     'instanceOffsets' ( uniform 3-element array of 3-component vector of float)
+0:?     'va' ( in 64-element array of 4-component vector of float)
+0:?     'color' ( smooth out 4-component vector of float)
+0:?     'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out unsized 1-element array of float ClipDistance gl_ClipDistance})
+0:?     'gl_VertexID' ( gl_VertexId int VertexId)
+0:?     'gl_InstanceID' ( gl_InstanceId int InstanceId)
+
+
+Linked vertex stage:
+
+
+Shader version: 150
+Requested GL_ARB_draw_instanced
+0:? Sequence
+0:10  Function Definition: main( ( global void)
+0:10    Function Parameters: 
+0:12    Sequence
+0:12      Sequence
+0:12        move second child to first child ( temp 4-component vector of float)
+0:12          'vertex' ( temp 4-component vector of float)
+0:12          add ( temp 4-component vector of float)
+0:12            Construct vec4 ( temp 4-component vector of float)
+0:12              divide ( temp 2-component vector of float)
+0:12                vector swizzle ( temp 2-component vector of float)
+0:12                  direct index ( temp 4-component vector of float)
+0:12                    'va' ( in 64-element array of 4-component vector of float)
+0:12                    Constant:
+0:12                      0 (const int)
+0:12                  Sequence
+0:12                    Constant:
+0:12                      0 (const int)
+0:12                    Constant:
+0:12                      1 (const int)
+0:12                Constant:
+0:12                  3.000000
+0:12              vector swizzle ( temp 2-component vector of float)
+0:12                direct index ( temp 4-component vector of float)
+0:12                  'va' ( in 64-element array of 4-component vector of float)
+0:12                  Constant:
+0:12                    0 (const int)
+0:12                Sequence
+0:12                  Constant:
+0:12                    2 (const int)
+0:12                  Constant:
+0:12                    3 (const int)
+0:12            Construct vec4 ( temp 4-component vector of float)
+0:12              indirect index ( temp 3-component vector of float)
+0:12                'instanceOffsets' ( uniform 3-element array of 3-component vector of float)
+0:12                'gl_InstanceID' ( gl_InstanceId int InstanceId)
+0:12              Constant:
+0:12                1.000000
+0:13      move second child to first child ( temp 4-component vector of float)
+0:13        'color' ( smooth out 4-component vector of float)
+0:13        Constant:
+0:13          0.000000
+0:13          0.000000
+0:13          0.000000
+0:13          0.000000
+0:14      Sequence
+0:14        Sequence
+0:14          move second child to first child ( temp int)
+0:14            'i' ( temp int)
+0:14            Constant:
+0:14              1 (const int)
+0:14        Loop with condition tested first
+0:14          Loop Condition
+0:14          Compare Less Than ( temp bool)
+0:14            'i' ( temp int)
+0:14            Constant:
+0:14              64 (const int)
+0:14          Loop Body
+0:15          add second child into first child ( temp 4-component vector of float)
+0:15            'color' ( smooth out 4-component vector of float)
+0:15            indirect index ( temp 4-component vector of float)
+0:15              'va' ( in 64-element array of 4-component vector of float)
+0:15              'i' ( temp int)
+0:14          Loop Terminal Expression
+0:14          Post-Increment ( temp int)
+0:14            'i' ( temp int)
+0:16      move second child to first child ( temp 4-component vector of float)
+0:16        gl_Position: direct index for structure ( gl_Position 4-component vector of float Position)
+0:16          'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out 1-element array of float ClipDistance gl_ClipDistance})
+0:16          Constant:
+0:16            0 (const uint)
+0:16        matrix-times-vector ( temp 4-component vector of float)
+0:16          'gtf_ModelViewProjectionMatrix' ( uniform 4X4 matrix of float)
+0:16          'vertex' ( temp 4-component vector of float)
+0:17      move second child to first child ( temp float)
+0:17        gl_PointSize: direct index for structure ( gl_PointSize float PointSize)
+0:17          'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out 1-element array of float ClipDistance gl_ClipDistance})
+0:17          Constant:
+0:17            1 (const uint)
+0:17        Constant:
+0:17          1.000000
+0:?   Linker Objects
+0:?     'gtf_ModelViewProjectionMatrix' ( uniform 4X4 matrix of float)
+0:?     'instanceOffsets' ( uniform 3-element array of 3-component vector of float)
+0:?     'va' ( in 64-element array of 4-component vector of float)
+0:?     'color' ( smooth out 4-component vector of float)
+0:?     'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out 1-element array of float ClipDistance gl_ClipDistance})
+0:?     'gl_VertexID' ( gl_VertexId int VertexId)
+0:?     'gl_InstanceID' ( gl_InstanceId int InstanceId)
+
diff --git a/Test/baseResults/GL_EXT_shader_integer_mix.vert.out b/Test/baseResults/GL_EXT_shader_integer_mix.vert.out
new file mode 100644
index 0000000..4a62b57
--- /dev/null
+++ b/Test/baseResults/GL_EXT_shader_integer_mix.vert.out
@@ -0,0 +1,47 @@
+GL_EXT_shader_integer_mix.vert
+Shader version: 330
+Requested GL_EXT_shader_integer_mix
+0:? Sequence
+0:11  Function Definition: main( ( global void)
+0:11    Function Parameters: 
+0:12    Sequence
+0:12      move second child to first child ( temp 4-component vector of float)
+0:12        gl_Position: direct index for structure ( gl_Position 4-component vector of float Position)
+0:12          'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out unsized 1-element array of float ClipDistance gl_ClipDistance})
+0:12          Constant:
+0:12            0 (const uint)
+0:12        Constant:
+0:12          0.000000
+0:12          0.000000
+0:12          0.000000
+0:12          0.000000
+0:?   Linker Objects
+0:?     'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out unsized 1-element array of float ClipDistance gl_ClipDistance})
+0:?     'gl_VertexID' ( gl_VertexId int VertexId)
+0:?     'gl_InstanceID' ( gl_InstanceId int InstanceId)
+
+
+Linked vertex stage:
+
+
+Shader version: 330
+Requested GL_EXT_shader_integer_mix
+0:? Sequence
+0:11  Function Definition: main( ( global void)
+0:11    Function Parameters: 
+0:12    Sequence
+0:12      move second child to first child ( temp 4-component vector of float)
+0:12        gl_Position: direct index for structure ( gl_Position 4-component vector of float Position)
+0:12          'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out 1-element array of float ClipDistance gl_ClipDistance})
+0:12          Constant:
+0:12            0 (const uint)
+0:12        Constant:
+0:12          0.000000
+0:12          0.000000
+0:12          0.000000
+0:12          0.000000
+0:?   Linker Objects
+0:?     'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out 1-element array of float ClipDistance gl_ClipDistance})
+0:?     'gl_VertexID' ( gl_VertexId int VertexId)
+0:?     'gl_InstanceID' ( gl_InstanceId int InstanceId)
+
diff --git a/Test/baseResults/rayQuery.rgen.out b/Test/baseResults/rayQuery.rgen.out
index 80e9916..06a1a5a 100644
--- a/Test/baseResults/rayQuery.rgen.out
+++ b/Test/baseResults/rayQuery.rgen.out
@@ -28,8 +28,6 @@
                               MemberDecorate 26(block) 0 Offset 0
                               MemberDecorate 26(block) 1 Offset 16
                               Decorate 26(block) BufferBlock
-                              Decorate 28 DescriptorSet 0
-                              Decorate 28 Binding 1
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 0
diff --git a/Test/baseResults/spv.1.4.OpEntryPoint.frag.out b/Test/baseResults/spv.1.4.OpEntryPoint.frag.out
index cf5d98a..2c6e6dc 100644
--- a/Test/baseResults/spv.1.4.OpEntryPoint.frag.out
+++ b/Test/baseResults/spv.1.4.OpEntryPoint.frag.out
@@ -1,4 +1,5 @@
 spv.1.4.OpEntryPoint.frag
+Validation failed
 // Module Version 10400
 // Generated by (magic number): 8000a
 // Id's are bound by 64
diff --git a/Test/baseResults/spv.RayGenShader.rgen.out b/Test/baseResults/spv.RayGenShader.rgen.out
index f8f3fd6..b708537 100644
--- a/Test/baseResults/spv.RayGenShader.rgen.out
+++ b/Test/baseResults/spv.RayGenShader.rgen.out
@@ -31,8 +31,6 @@
                               MemberDecorate 37(block) 0 Offset 0
                               MemberDecorate 37(block) 1 Offset 16
                               Decorate 37(block) BufferBlock
-                              Decorate 39 DescriptorSet 0
-                              Decorate 39 Binding 2
                               Decorate 50(accNV1) DescriptorSet 0
                               Decorate 50(accNV1) Binding 1
                               Decorate 53(payload) Location 0
diff --git a/Test/baseResults/spv.RayGenShader11.rgen.out b/Test/baseResults/spv.RayGenShader11.rgen.out
index f6b79c5..48509b0 100644
--- a/Test/baseResults/spv.RayGenShader11.rgen.out
+++ b/Test/baseResults/spv.RayGenShader11.rgen.out
@@ -30,8 +30,6 @@
                               MemberDecorate 37(block) 0 Offset 0
                               MemberDecorate 37(block) 1 Offset 16
                               Decorate 37(block) Block
-                              Decorate 39 DescriptorSet 0
-                              Decorate 39 Binding 1
                               Decorate 52(payload) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.RayGenShaderArray.rgen.out b/Test/baseResults/spv.RayGenShaderArray.rgen.out
index 63a04b3..8ddfca9 100644
--- a/Test/baseResults/spv.RayGenShaderArray.rgen.out
+++ b/Test/baseResults/spv.RayGenShaderArray.rgen.out
@@ -37,8 +37,6 @@
                               MemberDecorate 34(block) 1 Offset 16
                               MemberDecorate 34(block) 2 Offset 28
                               Decorate 34(block) BufferBlock
-                              Decorate 36 DescriptorSet 0
-                              Decorate 36 Binding 2
                               Decorate 60(accNV1) DescriptorSet 0
                               Decorate 60(accNV1) Binding 1
                               Decorate 75 DecorationNonUniformEXT
diff --git a/Test/baseResults/spv.ext.RayGenSBTlayout.rgen.out b/Test/baseResults/spv.ext.RayGenSBTlayout.rgen.out
index 60b5e93..95d9213 100644
--- a/Test/baseResults/spv.ext.RayGenSBTlayout.rgen.out
+++ b/Test/baseResults/spv.ext.RayGenSBTlayout.rgen.out
@@ -49,8 +49,6 @@
                               MemberDecorate 36(block) 9 Offset 120
                               MemberDecorate 36(block) 10 Offset 128
                               Decorate 36(block) Block
-                              Decorate 38 DescriptorSet 0
-                              Decorate 38 Binding 0
                               Decorate 60(payload) Location 1
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.ext.RayGenSBTlayout140.rgen.out b/Test/baseResults/spv.ext.RayGenSBTlayout140.rgen.out
index cc175f7..f5e32c1 100644
--- a/Test/baseResults/spv.ext.RayGenSBTlayout140.rgen.out
+++ b/Test/baseResults/spv.ext.RayGenSBTlayout140.rgen.out
@@ -49,8 +49,6 @@
                               MemberDecorate 36(block) 9 Offset 136
                               MemberDecorate 36(block) 10 Offset 144
                               Decorate 36(block) Block
-                              Decorate 38 DescriptorSet 0
-                              Decorate 38 Binding 0
                               Decorate 60(payload) Location 1
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.ext.RayGenSBTlayout430.rgen.out b/Test/baseResults/spv.ext.RayGenSBTlayout430.rgen.out
index afcfa9c..d952adf 100644
--- a/Test/baseResults/spv.ext.RayGenSBTlayout430.rgen.out
+++ b/Test/baseResults/spv.ext.RayGenSBTlayout430.rgen.out
@@ -49,8 +49,6 @@
                               MemberDecorate 36(block) 9 Offset 120
                               MemberDecorate 36(block) 10 Offset 128
                               Decorate 36(block) Block
-                              Decorate 38 DescriptorSet 0
-                              Decorate 38 Binding 0
                               Decorate 60(payload) Location 1
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.ext.RayGenSBTlayoutscalar.rgen.out b/Test/baseResults/spv.ext.RayGenSBTlayoutscalar.rgen.out
index eac481a..c6d6530 100644
--- a/Test/baseResults/spv.ext.RayGenSBTlayoutscalar.rgen.out
+++ b/Test/baseResults/spv.ext.RayGenSBTlayoutscalar.rgen.out
@@ -50,8 +50,6 @@
                               MemberDecorate 36(block) 9 Offset 96
                               MemberDecorate 36(block) 10 Offset 104
                               Decorate 36(block) Block
-                              Decorate 38 DescriptorSet 0
-                              Decorate 38 Binding 0
                               Decorate 60(payload) Location 1
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.ext.RayGenShader.rgen.out b/Test/baseResults/spv.ext.RayGenShader.rgen.out
index da516f3..bfaf64b 100644
--- a/Test/baseResults/spv.ext.RayGenShader.rgen.out
+++ b/Test/baseResults/spv.ext.RayGenShader.rgen.out
@@ -34,8 +34,6 @@
                               MemberDecorate 38(block) 0 Offset 0
                               MemberDecorate 38(block) 1 Offset 16
                               Decorate 38(block) Block
-                              Decorate 40 DescriptorSet 0
-                              Decorate 40 Binding 3
                               Decorate 53(payload) Location 1
                               Decorate 54(accEXT1) DescriptorSet 0
                               Decorate 54(accEXT1) Binding 1
diff --git a/Test/baseResults/spv.ext.RayGenShader11.rgen.out b/Test/baseResults/spv.ext.RayGenShader11.rgen.out
index 00262ac..048b02b 100644
--- a/Test/baseResults/spv.ext.RayGenShader11.rgen.out
+++ b/Test/baseResults/spv.ext.RayGenShader11.rgen.out
@@ -30,8 +30,6 @@
                               MemberDecorate 37(block) 0 Offset 0
                               MemberDecorate 37(block) 1 Offset 16
                               Decorate 37(block) Block
-                              Decorate 39 DescriptorSet 0
-                              Decorate 39 Binding 1
                               Decorate 52(payload) Location 1
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.ext.RayGenShaderArray.rgen.out b/Test/baseResults/spv.ext.RayGenShaderArray.rgen.out
index 473937d..ee39e35 100644
--- a/Test/baseResults/spv.ext.RayGenShaderArray.rgen.out
+++ b/Test/baseResults/spv.ext.RayGenShaderArray.rgen.out
@@ -43,8 +43,6 @@
                               MemberDecorate 36(block) 3 Offset 32
                               MemberDecorate 36(block) 4 Offset 40
                               Decorate 36(block) Block
-                              Decorate 38 DescriptorSet 0
-                              Decorate 38 Binding 2
                               Decorate 61(payload) Location 1
                               Decorate 65(accEXT1) DescriptorSet 0
                               Decorate 65(accEXT1) Binding 1
diff --git a/Test/baseResults/spv.float64.frag.out b/Test/baseResults/spv.float64.frag.out
index dfcfc2d..cd5f80d 100644
--- a/Test/baseResults/spv.float64.frag.out
+++ b/Test/baseResults/spv.float64.frag.out
@@ -2,7 +2,7 @@
 Validation failed
 // Module Version 10300
 // Generated by (magic number): 8000a
-// Id's are bound by 532
+// Id's are bound by 485
 
                               Capability Shader
                               Capability Float16
@@ -14,7 +14,7 @@
                               Capability InterpolationFunction
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 461
+                              EntryPoint Fragment 4  "main" 414
                               ExecutionMode 4 OriginUpperLeft
                               Source GLSL 450
                               SourceExtension  "GL_EXT_shader_explicit_arithmetic_types"
@@ -29,782 +29,710 @@
                               Name 6  "literal("
                               Name 8  "operators("
                               Name 10  "typeCast("
-                              Name 12  "builtinAngleTrigFuncs("
-                              Name 14  "builtinExpFuncs("
-                              Name 16  "builtinCommonFuncs("
-                              Name 18  "builtinGeometryFuncs("
-                              Name 20  "builtinMatrixFuncs("
-                              Name 22  "builtinVecRelFuncs("
-                              Name 24  "builtinFragProcFuncs("
-                              Name 29  "f64v"
-                              Name 40  "f64v"
-                              Name 62  "f64m"
-                              Name 85  "f64"
-                              Name 109  "b"
-                              Name 151  "f64v"
-                              Name 154  "bv"
-                              Name 165  "f16v"
-                              Name 173  "i8v"
-                              Name 179  "i16v"
-                              Name 185  "i32v"
-                              Name 191  "i64v"
-                              Name 197  "u8v"
-                              Name 203  "u16v"
-                              Name 208  "u32v"
-                              Name 214  "u64v"
-                              Name 219  "f64v2"
-                              Name 220  "f64v1"
-                              Name 252  "f64v2"
-                              Name 253  "f64v1"
-                              Name 269  "f64v2"
-                              Name 270  "f64v1"
-                              Name 291  "f64"
-                              Name 295  "f64v3"
-                              Name 335  "bv"
-                              Name 356  "b"
-                              Name 366  "iv"
-                              Name 367  "ResType"
-                              Name 374  "f64"
-                              Name 375  "f64v1"
-                              Name 379  "f64v2"
-                              Name 385  "f64v3"
-                              Name 404  "f64m3"
-                              Name 405  "f64m1"
-                              Name 407  "f64m2"
-                              Name 416  "f64v1"
-                              Name 418  "f64v2"
-                              Name 423  "f64m4"
-                              Name 426  "f64"
-                              Name 429  "f64m5"
-                              Name 434  "f64m6"
-                              Name 435  "f64m7"
-                              Name 438  "bv"
-                              Name 439  "f64v1"
-                              Name 441  "f64v2"
-                              Name 459  "f64v"
-                              Name 461  "if64v"
-                              Name 518  "S"
-                              MemberName 518(S) 0  "x"
-                              MemberName 518(S) 1  "y"
-                              MemberName 518(S) 2  "z"
-                              Name 520  "B1"
-                              MemberName 520(B1) 0  "a"
-                              MemberName 520(B1) 1  "b"
-                              MemberName 520(B1) 2  "c"
-                              MemberName 520(B1) 3  "d"
-                              MemberName 520(B1) 4  "e"
-                              MemberName 520(B1) 5  "f"
-                              MemberName 520(B1) 6  "g"
-                              MemberName 520(B1) 7  "h"
-                              Name 522  ""
-                              Name 523  "sf16"
-                              Name 525  "sf"
-                              Name 526  "sd"
-                              Name 527  "f16_to_f"
-                              Name 529  "f16_to_d"
-                              Name 530  "f_to_f16"
-                              Name 531  "d_to_f16"
-                              Decorate 461(if64v) Flat
-                              Decorate 461(if64v) Location 0
-                              Decorate 516 ArrayStride 16
-                              Decorate 517 ArrayStride 64
-                              MemberDecorate 518(S) 0 Offset 0
-                              MemberDecorate 518(S) 1 Offset 16
-                              MemberDecorate 518(S) 2 Offset 32
-                              Decorate 519 ArrayStride 64
-                              MemberDecorate 520(B1) 0 Offset 0
-                              MemberDecorate 520(B1) 1 Offset 16
-                              MemberDecorate 520(B1) 2 Offset 32
-                              MemberDecorate 520(B1) 3 Offset 64
-                              MemberDecorate 520(B1) 4 ColMajor
-                              MemberDecorate 520(B1) 4 Offset 96
-                              MemberDecorate 520(B1) 4 MatrixStride 32
-                              MemberDecorate 520(B1) 5 ColMajor
-                              MemberDecorate 520(B1) 5 Offset 160
-                              MemberDecorate 520(B1) 5 MatrixStride 32
-                              MemberDecorate 520(B1) 6 Offset 288
-                              MemberDecorate 520(B1) 7 Offset 352
-                              Decorate 520(B1) Block
-                              Decorate 522 DescriptorSet 0
-                              Decorate 522 Binding 0
-                              Decorate 523(sf16) SpecId 100
-                              Decorate 525(sf) SpecId 101
-                              Decorate 526(sd) SpecId 102
+                              Name 12  "builtinTranscendentalFuncs("
+                              Name 14  "builtinCommonFuncs("
+                              Name 16  "builtinGeometryFuncs("
+                              Name 18  "builtinMatrixFuncs("
+                              Name 20  "builtinVecRelFuncs("
+                              Name 22  "builtinFragProcFuncs("
+                              Name 27  "f64v"
+                              Name 38  "f64v"
+                              Name 60  "f64m"
+                              Name 83  "f64"
+                              Name 107  "b"
+                              Name 149  "f64v"
+                              Name 152  "bv"
+                              Name 163  "f16v"
+                              Name 171  "i8v"
+                              Name 177  "i16v"
+                              Name 183  "i32v"
+                              Name 189  "i64v"
+                              Name 195  "u8v"
+                              Name 201  "u16v"
+                              Name 206  "u32v"
+                              Name 212  "u64v"
+                              Name 215  "f64v2"
+                              Name 216  "f64v1"
+                              Name 221  "f64v2"
+                              Name 222  "f64v1"
+                              Name 243  "f64"
+                              Name 247  "f64v3"
+                              Name 287  "bv"
+                              Name 308  "b"
+                              Name 318  "iv"
+                              Name 319  "ResType"
+                              Name 326  "f64"
+                              Name 327  "f64v1"
+                              Name 331  "f64v2"
+                              Name 337  "f64v3"
+                              Name 356  "f64m3"
+                              Name 357  "f64m1"
+                              Name 359  "f64m2"
+                              Name 368  "f64v1"
+                              Name 370  "f64v2"
+                              Name 375  "f64m4"
+                              Name 378  "f64"
+                              Name 381  "f64m5"
+                              Name 387  "f64m6"
+                              Name 388  "f64m7"
+                              Name 391  "bv"
+                              Name 392  "f64v1"
+                              Name 394  "f64v2"
+                              Name 412  "f64v"
+                              Name 414  "if64v"
+                              Name 471  "S"
+                              MemberName 471(S) 0  "x"
+                              MemberName 471(S) 1  "y"
+                              MemberName 471(S) 2  "z"
+                              Name 473  "B1"
+                              MemberName 473(B1) 0  "a"
+                              MemberName 473(B1) 1  "b"
+                              MemberName 473(B1) 2  "c"
+                              MemberName 473(B1) 3  "d"
+                              MemberName 473(B1) 4  "e"
+                              MemberName 473(B1) 5  "f"
+                              MemberName 473(B1) 6  "g"
+                              MemberName 473(B1) 7  "h"
+                              Name 475  ""
+                              Name 476  "sf16"
+                              Name 478  "sf"
+                              Name 479  "sd"
+                              Name 480  "f16_to_f"
+                              Name 482  "f16_to_d"
+                              Name 483  "f_to_f16"
+                              Name 484  "d_to_f16"
+                              Decorate 414(if64v) Flat
+                              Decorate 414(if64v) Location 0
+                              Decorate 469 ArrayStride 16
+                              Decorate 470 ArrayStride 64
+                              MemberDecorate 471(S) 0 Offset 0
+                              MemberDecorate 471(S) 1 Offset 16
+                              MemberDecorate 471(S) 2 Offset 32
+                              Decorate 472 ArrayStride 64
+                              MemberDecorate 473(B1) 0 Offset 0
+                              MemberDecorate 473(B1) 1 Offset 16
+                              MemberDecorate 473(B1) 2 Offset 32
+                              MemberDecorate 473(B1) 3 Offset 64
+                              MemberDecorate 473(B1) 4 ColMajor
+                              MemberDecorate 473(B1) 4 Offset 96
+                              MemberDecorate 473(B1) 4 MatrixStride 32
+                              MemberDecorate 473(B1) 5 ColMajor
+                              MemberDecorate 473(B1) 5 Offset 160
+                              MemberDecorate 473(B1) 5 MatrixStride 32
+                              MemberDecorate 473(B1) 6 Offset 288
+                              MemberDecorate 473(B1) 7 Offset 352
+                              Decorate 473(B1) Block
+                              Decorate 475 DescriptorSet 0
+                              Decorate 475 Binding 0
+                              Decorate 476(sf16) SpecId 100
+                              Decorate 478(sf) SpecId 101
+                              Decorate 479(sd) SpecId 102
                2:             TypeVoid
                3:             TypeFunction 2
-              26:             TypeFloat 64
-              27:             TypeVector 26(float64_t) 2
-              28:             TypePointer Function 27(f64vec2)
-              30:26(float64_t) Constant 2696277389 1051772663
-              31:             TypeInt 32 0
-              32:     31(int) Constant 0
-              33:             TypePointer Function 26(float64_t)
-              35:26(float64_t) Constant 0 3218079744
-              36:26(float64_t) Constant 3951369912 1067366481
-              37: 27(f64vec2) ConstantComposite 35 36
-              54:26(float64_t) Constant 0 1072693248
-              60:             TypeMatrix 27(f64vec2) 2
-              61:             TypePointer Function 60
-              88:     31(int) Constant 1
-             107:             TypeBool
-             108:             TypePointer Function 107(bool)
-             149:             TypeVector 26(float64_t) 3
-             150:             TypePointer Function 149(f64vec3)
-             152:             TypeVector 107(bool) 3
-             153:             TypePointer Function 152(bvec3)
-             156:26(float64_t) Constant 0 0
-             157:149(f64vec3) ConstantComposite 156 156 156
-             158:149(f64vec3) ConstantComposite 54 54 54
-             162:             TypeFloat 16
-             163:             TypeVector 162(float16_t) 3
-             164:             TypePointer Function 163(f16vec3)
-             170:             TypeInt 8 1
-             171:             TypeVector 170(int8_t) 3
-             172:             TypePointer Function 171(i8vec3)
-             176:             TypeInt 16 1
-             177:             TypeVector 176(int16_t) 3
-             178:             TypePointer Function 177(i16vec3)
-             182:             TypeInt 32 1
-             183:             TypeVector 182(int) 3
-             184:             TypePointer Function 183(ivec3)
-             188:             TypeInt 64 1
-             189:             TypeVector 188(int64_t) 3
-             190:             TypePointer Function 189(i64vec3)
-             194:             TypeInt 8 0
-             195:             TypeVector 194(int8_t) 3
-             196:             TypePointer Function 195(i8vec3)
-             200:             TypeInt 16 0
-             201:             TypeVector 200(int16_t) 3
-             202:             TypePointer Function 201(i16vec3)
-             206:             TypeVector 31(int) 3
-             207:             TypePointer Function 206(ivec3)
-             211:             TypeInt 64 0
-             212:             TypeVector 211(int64_t) 3
-             213:             TypePointer Function 212(i64vec3)
-             217:             TypeVector 26(float64_t) 4
-             218:             TypePointer Function 217(f64vec4)
-    367(ResType):             TypeStruct 149(f64vec3) 183(ivec3)
-             402:             TypeMatrix 149(f64vec3) 2
-             403:             TypePointer Function 402
-             421:             TypeMatrix 27(f64vec2) 3
-             422:             TypePointer Function 421
-             427:             TypeMatrix 149(f64vec3) 3
-             428:             TypePointer Function 427
-             432:             TypeMatrix 217(f64vec4) 4
-             433:             TypePointer Function 432
-             460:             TypePointer Input 149(f64vec3)
-      461(if64v):    460(ptr) Variable Input
-             462:             TypePointer Input 26(float64_t)
-             505:    182(int) Constant 1
-             512:26(float64_t) Constant 0 1071644672
-             513: 27(f64vec2) ConstantComposite 512 512
-             515:     31(int) Constant 2
-             516:             TypeArray 26(float64_t) 515
-             517:             TypeArray 402 515
-          518(S):             TypeStruct 26(float64_t) 27(f64vec2) 149(f64vec3)
-             519:             TypeArray 518(S) 515
-         520(B1):             TypeStruct 26(float64_t) 27(f64vec2) 149(f64vec3) 516 402 517 518(S) 519
-             521:             TypePointer Uniform 520(B1)
-             522:    521(ptr) Variable Uniform
-       523(sf16):162(float16_t) SpecConstant 12288
-             524:             TypeFloat 32
-         525(sf):  524(float) SpecConstant 1048576000
-         526(sd):26(float64_t) SpecConstant 0 1071644672
-   527(f16_to_f):  524(float) SpecConstantOp 115 523(sf16)
-             528:  524(float) SpecConstantOp 115 523(sf16)
-   529(f16_to_d):26(float64_t) SpecConstantOp 115 528
-   530(f_to_f16):162(float16_t) SpecConstantOp 115 525(sf)
-   531(d_to_f16):162(float16_t) SpecConstantOp 115 526(sd)
+              24:             TypeFloat 64
+              25:             TypeVector 24(float64_t) 2
+              26:             TypePointer Function 25(f64vec2)
+              28:24(float64_t) Constant 2696277389 1051772663
+              29:             TypeInt 32 0
+              30:     29(int) Constant 0
+              31:             TypePointer Function 24(float64_t)
+              33:24(float64_t) Constant 0 3218079744
+              34:24(float64_t) Constant 3951369912 1067366481
+              35: 25(f64vec2) ConstantComposite 33 34
+              52:24(float64_t) Constant 0 1072693248
+              58:             TypeMatrix 25(f64vec2) 2
+              59:             TypePointer Function 58
+              86:     29(int) Constant 1
+             105:             TypeBool
+             106:             TypePointer Function 105(bool)
+             147:             TypeVector 24(float64_t) 3
+             148:             TypePointer Function 147(f64vec3)
+             150:             TypeVector 105(bool) 3
+             151:             TypePointer Function 150(bvec3)
+             154:24(float64_t) Constant 0 0
+             155:147(f64vec3) ConstantComposite 154 154 154
+             156:147(f64vec3) ConstantComposite 52 52 52
+             160:             TypeFloat 16
+             161:             TypeVector 160(float16_t) 3
+             162:             TypePointer Function 161(f16vec3)
+             168:             TypeInt 8 1
+             169:             TypeVector 168(int8_t) 3
+             170:             TypePointer Function 169(i8vec3)
+             174:             TypeInt 16 1
+             175:             TypeVector 174(int16_t) 3
+             176:             TypePointer Function 175(i16vec3)
+             180:             TypeInt 32 1
+             181:             TypeVector 180(int) 3
+             182:             TypePointer Function 181(ivec3)
+             186:             TypeInt 64 1
+             187:             TypeVector 186(int64_t) 3
+             188:             TypePointer Function 187(i64vec3)
+             192:             TypeInt 8 0
+             193:             TypeVector 192(int8_t) 3
+             194:             TypePointer Function 193(i8vec3)
+             198:             TypeInt 16 0
+             199:             TypeVector 198(int16_t) 3
+             200:             TypePointer Function 199(i16vec3)
+             204:             TypeVector 29(int) 3
+             205:             TypePointer Function 204(ivec3)
+             209:             TypeInt 64 0
+             210:             TypeVector 209(int64_t) 3
+             211:             TypePointer Function 210(i64vec3)
+    319(ResType):             TypeStruct 147(f64vec3) 181(ivec3)
+             354:             TypeMatrix 147(f64vec3) 2
+             355:             TypePointer Function 354
+             373:             TypeMatrix 25(f64vec2) 3
+             374:             TypePointer Function 373
+             379:             TypeMatrix 147(f64vec3) 3
+             380:             TypePointer Function 379
+             384:             TypeVector 24(float64_t) 4
+             385:             TypeMatrix 384(f64vec4) 4
+             386:             TypePointer Function 385
+             413:             TypePointer Input 147(f64vec3)
+      414(if64v):    413(ptr) Variable Input
+             415:             TypePointer Input 24(float64_t)
+             458:    180(int) Constant 1
+             465:24(float64_t) Constant 0 1071644672
+             466: 25(f64vec2) ConstantComposite 465 465
+             468:     29(int) Constant 2
+             469:             TypeArray 24(float64_t) 468
+             470:             TypeArray 354 468
+          471(S):             TypeStruct 24(float64_t) 25(f64vec2) 147(f64vec3)
+             472:             TypeArray 471(S) 468
+         473(B1):             TypeStruct 24(float64_t) 25(f64vec2) 147(f64vec3) 469 354 470 471(S) 472
+             474:             TypePointer Uniform 473(B1)
+             475:    474(ptr) Variable Uniform
+       476(sf16):160(float16_t) SpecConstant 12288
+             477:             TypeFloat 32
+         478(sf):  477(float) SpecConstant 1048576000
+         479(sd):24(float64_t) SpecConstant 0 1071644672
+   480(f16_to_f):  477(float) SpecConstantOp 115 476(sf16)
+             481:  477(float) SpecConstantOp 115 476(sf16)
+   482(f16_to_d):24(float64_t) SpecConstantOp 115 481
+   483(f_to_f16):160(float16_t) SpecConstantOp 115 478(sf)
+   484(d_to_f16):160(float16_t) SpecConstantOp 115 479(sd)
          4(main):           2 Function None 3
                5:             Label
                               Return
                               FunctionEnd
      6(literal():           2 Function None 3
                7:             Label
-        29(f64v):     28(ptr) Variable Function
-              34:     33(ptr) AccessChain 29(f64v) 32
-                              Store 34 30
-              38: 27(f64vec2) Load 29(f64v)
-              39: 27(f64vec2) FAdd 38 37
-                              Store 29(f64v) 39
+        27(f64v):     26(ptr) Variable Function
+              32:     31(ptr) AccessChain 27(f64v) 30
+                              Store 32 28
+              36: 25(f64vec2) Load 27(f64v)
+              37: 25(f64vec2) FAdd 36 35
+                              Store 27(f64v) 37
                               Return
                               FunctionEnd
    8(operators():           2 Function None 3
                9:             Label
-        40(f64v):     28(ptr) Variable Function
-        62(f64m):     61(ptr) Variable Function
-         85(f64):     33(ptr) Variable Function
-          109(b):    108(ptr) Variable Function
-              41: 27(f64vec2) Load 40(f64v)
-              42: 27(f64vec2) Load 40(f64v)
-              43: 27(f64vec2) FAdd 42 41
-                              Store 40(f64v) 43
-              44: 27(f64vec2) Load 40(f64v)
-              45: 27(f64vec2) Load 40(f64v)
-              46: 27(f64vec2) FSub 45 44
-                              Store 40(f64v) 46
-              47: 27(f64vec2) Load 40(f64v)
-              48: 27(f64vec2) Load 40(f64v)
-              49: 27(f64vec2) FMul 48 47
-                              Store 40(f64v) 49
-              50: 27(f64vec2) Load 40(f64v)
-              51: 27(f64vec2) Load 40(f64v)
-              52: 27(f64vec2) FDiv 51 50
-                              Store 40(f64v) 52
-              53: 27(f64vec2) Load 40(f64v)
-              55: 27(f64vec2) CompositeConstruct 54 54
-              56: 27(f64vec2) FAdd 53 55
-                              Store 40(f64v) 56
-              57: 27(f64vec2) Load 40(f64v)
-              58: 27(f64vec2) CompositeConstruct 54 54
-              59: 27(f64vec2) FSub 57 58
-                              Store 40(f64v) 59
-              63:          60 Load 62(f64m)
-              64: 27(f64vec2) CompositeConstruct 54 54
-              65: 27(f64vec2) CompositeExtract 63 0
-              66: 27(f64vec2) FAdd 65 64
-              67: 27(f64vec2) CompositeExtract 63 1
-              68: 27(f64vec2) FAdd 67 64
-              69:          60 CompositeConstruct 66 68
-                              Store 62(f64m) 69
-              70:          60 Load 62(f64m)
-              71: 27(f64vec2) CompositeConstruct 54 54
-              72: 27(f64vec2) CompositeExtract 70 0
-              73: 27(f64vec2) FSub 72 71
-              74: 27(f64vec2) CompositeExtract 70 1
-              75: 27(f64vec2) FSub 74 71
-              76:          60 CompositeConstruct 73 75
-                              Store 62(f64m) 76
-              77: 27(f64vec2) Load 40(f64v)
-              78: 27(f64vec2) FNegate 77
-                              Store 40(f64v) 78
-              79:          60 Load 62(f64m)
-              80: 27(f64vec2) CompositeExtract 79 0
-              81: 27(f64vec2) FNegate 80
-              82: 27(f64vec2) CompositeExtract 79 1
-              83: 27(f64vec2) FNegate 82
-              84:          60 CompositeConstruct 81 83
-                              Store 62(f64m) 84
-              86:     33(ptr) AccessChain 40(f64v) 32
-              87:26(float64_t) Load 86
-              89:     33(ptr) AccessChain 40(f64v) 88
-              90:26(float64_t) Load 89
-              91:26(float64_t) FAdd 87 90
-                              Store 85(f64) 91
-              92:     33(ptr) AccessChain 40(f64v) 32
-              93:26(float64_t) Load 92
-              94:     33(ptr) AccessChain 40(f64v) 88
-              95:26(float64_t) Load 94
-              96:26(float64_t) FSub 93 95
-                              Store 85(f64) 96
-              97:     33(ptr) AccessChain 40(f64v) 32
-              98:26(float64_t) Load 97
-              99:     33(ptr) AccessChain 40(f64v) 88
-             100:26(float64_t) Load 99
-             101:26(float64_t) FMul 98 100
-                              Store 85(f64) 101
-             102:     33(ptr) AccessChain 40(f64v) 32
-             103:26(float64_t) Load 102
-             104:     33(ptr) AccessChain 40(f64v) 88
-             105:26(float64_t) Load 104
-             106:26(float64_t) FDiv 103 105
-                              Store 85(f64) 106
-             110:     33(ptr) AccessChain 40(f64v) 32
-             111:26(float64_t) Load 110
-             112:26(float64_t) Load 85(f64)
-             113:   107(bool) FUnordNotEqual 111 112
-                              Store 109(b) 113
-             114:     33(ptr) AccessChain 40(f64v) 88
-             115:26(float64_t) Load 114
-             116:26(float64_t) Load 85(f64)
-             117:   107(bool) FOrdEqual 115 116
-                              Store 109(b) 117
-             118:     33(ptr) AccessChain 40(f64v) 32
-             119:26(float64_t) Load 118
-             120:26(float64_t) Load 85(f64)
-             121:   107(bool) FOrdGreaterThan 119 120
-                              Store 109(b) 121
-             122:     33(ptr) AccessChain 40(f64v) 88
-             123:26(float64_t) Load 122
-             124:26(float64_t) Load 85(f64)
-             125:   107(bool) FOrdLessThan 123 124
-                              Store 109(b) 125
-             126:     33(ptr) AccessChain 40(f64v) 32
-             127:26(float64_t) Load 126
-             128:26(float64_t) Load 85(f64)
-             129:   107(bool) FOrdGreaterThanEqual 127 128
-                              Store 109(b) 129
-             130:     33(ptr) AccessChain 40(f64v) 88
-             131:26(float64_t) Load 130
-             132:26(float64_t) Load 85(f64)
-             133:   107(bool) FOrdLessThanEqual 131 132
-                              Store 109(b) 133
-             134: 27(f64vec2) Load 40(f64v)
-             135:26(float64_t) Load 85(f64)
-             136: 27(f64vec2) VectorTimesScalar 134 135
-                              Store 40(f64v) 136
-             137:          60 Load 62(f64m)
-             138:26(float64_t) Load 85(f64)
-             139:          60 MatrixTimesScalar 137 138
-                              Store 62(f64m) 139
-             140:          60 Load 62(f64m)
-             141: 27(f64vec2) Load 40(f64v)
-             142: 27(f64vec2) MatrixTimesVector 140 141
-                              Store 40(f64v) 142
-             143: 27(f64vec2) Load 40(f64v)
-             144:          60 Load 62(f64m)
-             145: 27(f64vec2) VectorTimesMatrix 143 144
-                              Store 40(f64v) 145
-             146:          60 Load 62(f64m)
-             147:          60 Load 62(f64m)
-             148:          60 MatrixTimesMatrix 146 147
-                              Store 62(f64m) 148
+        38(f64v):     26(ptr) Variable Function
+        60(f64m):     59(ptr) Variable Function
+         83(f64):     31(ptr) Variable Function
+          107(b):    106(ptr) Variable Function
+              39: 25(f64vec2) Load 38(f64v)
+              40: 25(f64vec2) Load 38(f64v)
+              41: 25(f64vec2) FAdd 40 39
+                              Store 38(f64v) 41
+              42: 25(f64vec2) Load 38(f64v)
+              43: 25(f64vec2) Load 38(f64v)
+              44: 25(f64vec2) FSub 43 42
+                              Store 38(f64v) 44
+              45: 25(f64vec2) Load 38(f64v)
+              46: 25(f64vec2) Load 38(f64v)
+              47: 25(f64vec2) FMul 46 45
+                              Store 38(f64v) 47
+              48: 25(f64vec2) Load 38(f64v)
+              49: 25(f64vec2) Load 38(f64v)
+              50: 25(f64vec2) FDiv 49 48
+                              Store 38(f64v) 50
+              51: 25(f64vec2) Load 38(f64v)
+              53: 25(f64vec2) CompositeConstruct 52 52
+              54: 25(f64vec2) FAdd 51 53
+                              Store 38(f64v) 54
+              55: 25(f64vec2) Load 38(f64v)
+              56: 25(f64vec2) CompositeConstruct 52 52
+              57: 25(f64vec2) FSub 55 56
+                              Store 38(f64v) 57
+              61:          58 Load 60(f64m)
+              62: 25(f64vec2) CompositeConstruct 52 52
+              63: 25(f64vec2) CompositeExtract 61 0
+              64: 25(f64vec2) FAdd 63 62
+              65: 25(f64vec2) CompositeExtract 61 1
+              66: 25(f64vec2) FAdd 65 62
+              67:          58 CompositeConstruct 64 66
+                              Store 60(f64m) 67
+              68:          58 Load 60(f64m)
+              69: 25(f64vec2) CompositeConstruct 52 52
+              70: 25(f64vec2) CompositeExtract 68 0
+              71: 25(f64vec2) FSub 70 69
+              72: 25(f64vec2) CompositeExtract 68 1
+              73: 25(f64vec2) FSub 72 69
+              74:          58 CompositeConstruct 71 73
+                              Store 60(f64m) 74
+              75: 25(f64vec2) Load 38(f64v)
+              76: 25(f64vec2) FNegate 75
+                              Store 38(f64v) 76
+              77:          58 Load 60(f64m)
+              78: 25(f64vec2) CompositeExtract 77 0
+              79: 25(f64vec2) FNegate 78
+              80: 25(f64vec2) CompositeExtract 77 1
+              81: 25(f64vec2) FNegate 80
+              82:          58 CompositeConstruct 79 81
+                              Store 60(f64m) 82
+              84:     31(ptr) AccessChain 38(f64v) 30
+              85:24(float64_t) Load 84
+              87:     31(ptr) AccessChain 38(f64v) 86
+              88:24(float64_t) Load 87
+              89:24(float64_t) FAdd 85 88
+                              Store 83(f64) 89
+              90:     31(ptr) AccessChain 38(f64v) 30
+              91:24(float64_t) Load 90
+              92:     31(ptr) AccessChain 38(f64v) 86
+              93:24(float64_t) Load 92
+              94:24(float64_t) FSub 91 93
+                              Store 83(f64) 94
+              95:     31(ptr) AccessChain 38(f64v) 30
+              96:24(float64_t) Load 95
+              97:     31(ptr) AccessChain 38(f64v) 86
+              98:24(float64_t) Load 97
+              99:24(float64_t) FMul 96 98
+                              Store 83(f64) 99
+             100:     31(ptr) AccessChain 38(f64v) 30
+             101:24(float64_t) Load 100
+             102:     31(ptr) AccessChain 38(f64v) 86
+             103:24(float64_t) Load 102
+             104:24(float64_t) FDiv 101 103
+                              Store 83(f64) 104
+             108:     31(ptr) AccessChain 38(f64v) 30
+             109:24(float64_t) Load 108
+             110:24(float64_t) Load 83(f64)
+             111:   105(bool) FUnordNotEqual 109 110
+                              Store 107(b) 111
+             112:     31(ptr) AccessChain 38(f64v) 86
+             113:24(float64_t) Load 112
+             114:24(float64_t) Load 83(f64)
+             115:   105(bool) FOrdEqual 113 114
+                              Store 107(b) 115
+             116:     31(ptr) AccessChain 38(f64v) 30
+             117:24(float64_t) Load 116
+             118:24(float64_t) Load 83(f64)
+             119:   105(bool) FOrdGreaterThan 117 118
+                              Store 107(b) 119
+             120:     31(ptr) AccessChain 38(f64v) 86
+             121:24(float64_t) Load 120
+             122:24(float64_t) Load 83(f64)
+             123:   105(bool) FOrdLessThan 121 122
+                              Store 107(b) 123
+             124:     31(ptr) AccessChain 38(f64v) 30
+             125:24(float64_t) Load 124
+             126:24(float64_t) Load 83(f64)
+             127:   105(bool) FOrdGreaterThanEqual 125 126
+                              Store 107(b) 127
+             128:     31(ptr) AccessChain 38(f64v) 86
+             129:24(float64_t) Load 128
+             130:24(float64_t) Load 83(f64)
+             131:   105(bool) FOrdLessThanEqual 129 130
+                              Store 107(b) 131
+             132: 25(f64vec2) Load 38(f64v)
+             133:24(float64_t) Load 83(f64)
+             134: 25(f64vec2) VectorTimesScalar 132 133
+                              Store 38(f64v) 134
+             135:          58 Load 60(f64m)
+             136:24(float64_t) Load 83(f64)
+             137:          58 MatrixTimesScalar 135 136
+                              Store 60(f64m) 137
+             138:          58 Load 60(f64m)
+             139: 25(f64vec2) Load 38(f64v)
+             140: 25(f64vec2) MatrixTimesVector 138 139
+                              Store 38(f64v) 140
+             141: 25(f64vec2) Load 38(f64v)
+             142:          58 Load 60(f64m)
+             143: 25(f64vec2) VectorTimesMatrix 141 142
+                              Store 38(f64v) 143
+             144:          58 Load 60(f64m)
+             145:          58 Load 60(f64m)
+             146:          58 MatrixTimesMatrix 144 145
+                              Store 60(f64m) 146
                               Return
                               FunctionEnd
    10(typeCast():           2 Function None 3
               11:             Label
-       151(f64v):    150(ptr) Variable Function
-         154(bv):    153(ptr) Variable Function
-       165(f16v):    164(ptr) Variable Function
-        173(i8v):    172(ptr) Variable Function
-       179(i16v):    178(ptr) Variable Function
-       185(i32v):    184(ptr) Variable Function
-       191(i64v):    190(ptr) Variable Function
-        197(u8v):    196(ptr) Variable Function
-       203(u16v):    202(ptr) Variable Function
-       208(u32v):    207(ptr) Variable Function
-       214(u64v):    213(ptr) Variable Function
-             155:  152(bvec3) Load 154(bv)
-             159:149(f64vec3) Select 155 158 157
-                              Store 151(f64v) 159
-             160:149(f64vec3) Load 151(f64v)
-             161:  152(bvec3) FUnordNotEqual 160 157
-                              Store 154(bv) 161
-             166:163(f16vec3) Load 165(f16v)
-             167:149(f64vec3) FConvert 166
-                              Store 151(f64v) 167
-             168:149(f64vec3) Load 151(f64v)
-             169:163(f16vec3) FConvert 168
-                              Store 165(f16v) 169
-             174:149(f64vec3) Load 151(f64v)
-             175: 171(i8vec3) ConvertFToS 174
-                              Store 173(i8v) 175
-             180:149(f64vec3) Load 151(f64v)
-             181:177(i16vec3) ConvertFToS 180
-                              Store 179(i16v) 181
-             186:149(f64vec3) Load 151(f64v)
-             187:  183(ivec3) ConvertFToS 186
-                              Store 185(i32v) 187
-             192:149(f64vec3) Load 151(f64v)
-             193:189(i64vec3) ConvertFToS 192
-                              Store 191(i64v) 193
-             198:149(f64vec3) Load 151(f64v)
-             199: 195(i8vec3) ConvertFToU 198
-                              Store 197(u8v) 199
-             204:149(f64vec3) Load 151(f64v)
-             205:201(i16vec3) ConvertFToU 204
-                              Store 203(u16v) 205
-             209:149(f64vec3) Load 151(f64v)
-             210:  206(ivec3) ConvertFToU 209
-                              Store 208(u32v) 210
-             215:149(f64vec3) Load 151(f64v)
-             216:212(i64vec3) ConvertFToU 215
-                              Store 214(u64v) 216
+       149(f64v):    148(ptr) Variable Function
+         152(bv):    151(ptr) Variable Function
+       163(f16v):    162(ptr) Variable Function
+        171(i8v):    170(ptr) Variable Function
+       177(i16v):    176(ptr) Variable Function
+       183(i32v):    182(ptr) Variable Function
+       189(i64v):    188(ptr) Variable Function
+        195(u8v):    194(ptr) Variable Function
+       201(u16v):    200(ptr) Variable Function
+       206(u32v):    205(ptr) Variable Function
+       212(u64v):    211(ptr) Variable Function
+             153:  150(bvec3) Load 152(bv)
+             157:147(f64vec3) Select 153 156 155
+                              Store 149(f64v) 157
+             158:147(f64vec3) Load 149(f64v)
+             159:  150(bvec3) FUnordNotEqual 158 155
+                              Store 152(bv) 159
+             164:161(f16vec3) Load 163(f16v)
+             165:147(f64vec3) FConvert 164
+                              Store 149(f64v) 165
+             166:147(f64vec3) Load 149(f64v)
+             167:161(f16vec3) FConvert 166
+                              Store 163(f16v) 167
+             172:147(f64vec3) Load 149(f64v)
+             173: 169(i8vec3) ConvertFToS 172
+                              Store 171(i8v) 173
+             178:147(f64vec3) Load 149(f64v)
+             179:175(i16vec3) ConvertFToS 178
+                              Store 177(i16v) 179
+             184:147(f64vec3) Load 149(f64v)
+             185:  181(ivec3) ConvertFToS 184
+                              Store 183(i32v) 185
+             190:147(f64vec3) Load 149(f64v)
+             191:187(i64vec3) ConvertFToS 190
+                              Store 189(i64v) 191
+             196:147(f64vec3) Load 149(f64v)
+             197: 193(i8vec3) ConvertFToU 196
+                              Store 195(u8v) 197
+             202:147(f64vec3) Load 149(f64v)
+             203:199(i16vec3) ConvertFToU 202
+                              Store 201(u16v) 203
+             207:147(f64vec3) Load 149(f64v)
+             208:  204(ivec3) ConvertFToU 207
+                              Store 206(u32v) 208
+             213:147(f64vec3) Load 149(f64v)
+             214:210(i64vec3) ConvertFToU 213
+                              Store 212(u64v) 214
                               Return
                               FunctionEnd
-12(builtinAngleTrigFuncs():           2 Function None 3
+12(builtinTranscendentalFuncs():           2 Function None 3
               13:             Label
-      219(f64v2):    218(ptr) Variable Function
-      220(f64v1):    218(ptr) Variable Function
-             221:217(f64vec4) Load 220(f64v1)
-             222:217(f64vec4) ExtInst 1(GLSL.std.450) 11(Radians) 221
-                              Store 219(f64v2) 222
-             223:217(f64vec4) Load 220(f64v1)
-             224:217(f64vec4) ExtInst 1(GLSL.std.450) 12(Degrees) 223
-                              Store 219(f64v2) 224
-             225:217(f64vec4) Load 220(f64v1)
-             226:217(f64vec4) ExtInst 1(GLSL.std.450) 13(Sin) 225
-                              Store 219(f64v2) 226
-             227:217(f64vec4) Load 220(f64v1)
-             228:217(f64vec4) ExtInst 1(GLSL.std.450) 14(Cos) 227
-                              Store 219(f64v2) 228
-             229:217(f64vec4) Load 220(f64v1)
-             230:217(f64vec4) ExtInst 1(GLSL.std.450) 15(Tan) 229
-                              Store 219(f64v2) 230
-             231:217(f64vec4) Load 220(f64v1)
-             232:217(f64vec4) ExtInst 1(GLSL.std.450) 16(Asin) 231
-                              Store 219(f64v2) 232
-             233:217(f64vec4) Load 220(f64v1)
-             234:217(f64vec4) ExtInst 1(GLSL.std.450) 17(Acos) 233
-                              Store 219(f64v2) 234
-             235:217(f64vec4) Load 220(f64v1)
-             236:217(f64vec4) Load 219(f64v2)
-             237:217(f64vec4) ExtInst 1(GLSL.std.450) 25(Atan2) 235 236
-                              Store 219(f64v2) 237
-             238:217(f64vec4) Load 220(f64v1)
-             239:217(f64vec4) ExtInst 1(GLSL.std.450) 18(Atan) 238
-                              Store 219(f64v2) 239
-             240:217(f64vec4) Load 220(f64v1)
-             241:217(f64vec4) ExtInst 1(GLSL.std.450) 19(Sinh) 240
-                              Store 219(f64v2) 241
-             242:217(f64vec4) Load 220(f64v1)
-             243:217(f64vec4) ExtInst 1(GLSL.std.450) 20(Cosh) 242
-                              Store 219(f64v2) 243
-             244:217(f64vec4) Load 220(f64v1)
-             245:217(f64vec4) ExtInst 1(GLSL.std.450) 21(Tanh) 244
-                              Store 219(f64v2) 245
-             246:217(f64vec4) Load 220(f64v1)
-             247:217(f64vec4) ExtInst 1(GLSL.std.450) 22(Asinh) 246
-                              Store 219(f64v2) 247
-             248:217(f64vec4) Load 220(f64v1)
-             249:217(f64vec4) ExtInst 1(GLSL.std.450) 23(Acosh) 248
-                              Store 219(f64v2) 249
-             250:217(f64vec4) Load 220(f64v1)
-             251:217(f64vec4) ExtInst 1(GLSL.std.450) 24(Atanh) 250
-                              Store 219(f64v2) 251
+      215(f64v2):     26(ptr) Variable Function
+      216(f64v1):     26(ptr) Variable Function
+             217: 25(f64vec2) Load 216(f64v1)
+             218: 25(f64vec2) ExtInst 1(GLSL.std.450) 31(Sqrt) 217
+                              Store 215(f64v2) 218
+             219: 25(f64vec2) Load 216(f64v1)
+             220: 25(f64vec2) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 219
+                              Store 215(f64v2) 220
                               Return
                               FunctionEnd
-14(builtinExpFuncs():           2 Function None 3
+14(builtinCommonFuncs():           2 Function None 3
               15:             Label
-      252(f64v2):     28(ptr) Variable Function
-      253(f64v1):     28(ptr) Variable Function
-             254: 27(f64vec2) Load 253(f64v1)
-             255: 27(f64vec2) Load 252(f64v2)
-             256: 27(f64vec2) ExtInst 1(GLSL.std.450) 26(Pow) 254 255
-                              Store 252(f64v2) 256
-             257: 27(f64vec2) Load 253(f64v1)
-             258: 27(f64vec2) ExtInst 1(GLSL.std.450) 27(Exp) 257
-                              Store 252(f64v2) 258
-             259: 27(f64vec2) Load 253(f64v1)
-             260: 27(f64vec2) ExtInst 1(GLSL.std.450) 28(Log) 259
-                              Store 252(f64v2) 260
-             261: 27(f64vec2) Load 253(f64v1)
-             262: 27(f64vec2) ExtInst 1(GLSL.std.450) 29(Exp2) 261
-                              Store 252(f64v2) 262
-             263: 27(f64vec2) Load 253(f64v1)
-             264: 27(f64vec2) ExtInst 1(GLSL.std.450) 30(Log2) 263
-                              Store 252(f64v2) 264
-             265: 27(f64vec2) Load 253(f64v1)
-             266: 27(f64vec2) ExtInst 1(GLSL.std.450) 31(Sqrt) 265
-                              Store 252(f64v2) 266
-             267: 27(f64vec2) Load 253(f64v1)
-             268: 27(f64vec2) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 267
-                              Store 252(f64v2) 268
+      221(f64v2):    148(ptr) Variable Function
+      222(f64v1):    148(ptr) Variable Function
+        243(f64):     31(ptr) Variable Function
+      247(f64v3):    148(ptr) Variable Function
+         287(bv):    151(ptr) Variable Function
+          308(b):    106(ptr) Variable Function
+         318(iv):    182(ptr) Variable Function
+             223:147(f64vec3) Load 222(f64v1)
+             224:147(f64vec3) ExtInst 1(GLSL.std.450) 4(FAbs) 223
+                              Store 221(f64v2) 224
+             225:147(f64vec3) Load 222(f64v1)
+             226:147(f64vec3) ExtInst 1(GLSL.std.450) 6(FSign) 225
+                              Store 221(f64v2) 226
+             227:147(f64vec3) Load 222(f64v1)
+             228:147(f64vec3) ExtInst 1(GLSL.std.450) 8(Floor) 227
+                              Store 221(f64v2) 228
+             229:147(f64vec3) Load 222(f64v1)
+             230:147(f64vec3) ExtInst 1(GLSL.std.450) 3(Trunc) 229
+                              Store 221(f64v2) 230
+             231:147(f64vec3) Load 222(f64v1)
+             232:147(f64vec3) ExtInst 1(GLSL.std.450) 1(Round) 231
+                              Store 221(f64v2) 232
+             233:147(f64vec3) Load 222(f64v1)
+             234:147(f64vec3) ExtInst 1(GLSL.std.450) 2(RoundEven) 233
+                              Store 221(f64v2) 234
+             235:147(f64vec3) Load 222(f64v1)
+             236:147(f64vec3) ExtInst 1(GLSL.std.450) 9(Ceil) 235
+                              Store 221(f64v2) 236
+             237:147(f64vec3) Load 222(f64v1)
+             238:147(f64vec3) ExtInst 1(GLSL.std.450) 10(Fract) 237
+                              Store 221(f64v2) 238
+             239:147(f64vec3) Load 222(f64v1)
+             240:147(f64vec3) Load 221(f64v2)
+             241:147(f64vec3) FMod 239 240
+                              Store 221(f64v2) 241
+             242:147(f64vec3) Load 222(f64v1)
+             244:24(float64_t) Load 243(f64)
+             245:147(f64vec3) CompositeConstruct 244 244 244
+             246:147(f64vec3) FMod 242 245
+                              Store 221(f64v2) 246
+             248:147(f64vec3) Load 222(f64v1)
+             249:147(f64vec3) ExtInst 1(GLSL.std.450) 35(Modf) 248 221(f64v2)
+                              Store 247(f64v3) 249
+             250:147(f64vec3) Load 222(f64v1)
+             251:147(f64vec3) Load 221(f64v2)
+             252:147(f64vec3) ExtInst 1(GLSL.std.450) 37(FMin) 250 251
+                              Store 247(f64v3) 252
+             253:147(f64vec3) Load 222(f64v1)
+             254:24(float64_t) Load 243(f64)
+             255:147(f64vec3) CompositeConstruct 254 254 254
+             256:147(f64vec3) ExtInst 1(GLSL.std.450) 37(FMin) 253 255
+                              Store 247(f64v3) 256
+             257:147(f64vec3) Load 222(f64v1)
+             258:147(f64vec3) Load 221(f64v2)
+             259:147(f64vec3) ExtInst 1(GLSL.std.450) 40(FMax) 257 258
+                              Store 247(f64v3) 259
+             260:147(f64vec3) Load 222(f64v1)
+             261:24(float64_t) Load 243(f64)
+             262:147(f64vec3) CompositeConstruct 261 261 261
+             263:147(f64vec3) ExtInst 1(GLSL.std.450) 40(FMax) 260 262
+                              Store 247(f64v3) 263
+             264:147(f64vec3) Load 222(f64v1)
+             265:24(float64_t) Load 243(f64)
+             266:     31(ptr) AccessChain 221(f64v2) 30
+             267:24(float64_t) Load 266
+             268:147(f64vec3) CompositeConstruct 265 265 265
+             269:147(f64vec3) CompositeConstruct 267 267 267
+             270:147(f64vec3) ExtInst 1(GLSL.std.450) 43(FClamp) 264 268 269
+                              Store 247(f64v3) 270
+             271:147(f64vec3) Load 222(f64v1)
+             272:147(f64vec3) Load 221(f64v2)
+             273:24(float64_t) Load 243(f64)
+             274:147(f64vec3) CompositeConstruct 273 273 273
+             275:147(f64vec3) ExtInst 1(GLSL.std.450) 43(FClamp) 271 272 274
+                              Store 247(f64v3) 275
+             276:147(f64vec3) Load 222(f64v1)
+             277:147(f64vec3) Load 221(f64v2)
+             278:24(float64_t) Load 243(f64)
+             279:147(f64vec3) CompositeConstruct 278 278 278
+             280:147(f64vec3) ExtInst 1(GLSL.std.450) 46(FMix) 276 277 279
+                              Store 247(f64v3) 280
+             281:147(f64vec3) Load 222(f64v1)
+             282:147(f64vec3) Load 221(f64v2)
+             283:147(f64vec3) Load 247(f64v3)
+             284:147(f64vec3) ExtInst 1(GLSL.std.450) 46(FMix) 281 282 283
+                              Store 247(f64v3) 284
+             285:147(f64vec3) Load 222(f64v1)
+             286:147(f64vec3) Load 221(f64v2)
+             288:  150(bvec3) Load 287(bv)
+             289:147(f64vec3) Select 288 286 285
+                              Store 247(f64v3) 289
+             290:147(f64vec3) Load 222(f64v1)
+             291:147(f64vec3) Load 221(f64v2)
+             292:147(f64vec3) ExtInst 1(GLSL.std.450) 48(Step) 290 291
+                              Store 247(f64v3) 292
+             293:24(float64_t) Load 243(f64)
+             294:147(f64vec3) Load 247(f64v3)
+             295:147(f64vec3) CompositeConstruct 293 293 293
+             296:147(f64vec3) ExtInst 1(GLSL.std.450) 48(Step) 295 294
+                              Store 247(f64v3) 296
+             297:147(f64vec3) Load 222(f64v1)
+             298:147(f64vec3) Load 221(f64v2)
+             299:147(f64vec3) Load 247(f64v3)
+             300:147(f64vec3) ExtInst 1(GLSL.std.450) 49(SmoothStep) 297 298 299
+                              Store 247(f64v3) 300
+             301:24(float64_t) Load 243(f64)
+             302:     31(ptr) AccessChain 222(f64v1) 30
+             303:24(float64_t) Load 302
+             304:147(f64vec3) Load 221(f64v2)
+             305:147(f64vec3) CompositeConstruct 301 301 301
+             306:147(f64vec3) CompositeConstruct 303 303 303
+             307:147(f64vec3) ExtInst 1(GLSL.std.450) 49(SmoothStep) 305 306 304
+                              Store 247(f64v3) 307
+             309:24(float64_t) Load 243(f64)
+             310:   105(bool) IsNan 309
+                              Store 308(b) 310
+             311:147(f64vec3) Load 222(f64v1)
+             312:  150(bvec3) IsInf 311
+                              Store 287(bv) 312
+             313:147(f64vec3) Load 222(f64v1)
+             314:147(f64vec3) Load 221(f64v2)
+             315:147(f64vec3) Load 247(f64v3)
+             316:147(f64vec3) ExtInst 1(GLSL.std.450) 50(Fma) 313 314 315
+                              Store 247(f64v3) 316
+             317:147(f64vec3) Load 222(f64v1)
+             320:319(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 317
+             321:  181(ivec3) CompositeExtract 320 1
+                              Store 318(iv) 321
+             322:147(f64vec3) CompositeExtract 320 0
+                              Store 221(f64v2) 322
+             323:147(f64vec3) Load 222(f64v1)
+             324:  181(ivec3) Load 318(iv)
+             325:147(f64vec3) ExtInst 1(GLSL.std.450) 53(Ldexp) 323 324
+                              Store 221(f64v2) 325
                               Return
                               FunctionEnd
-16(builtinCommonFuncs():           2 Function None 3
+16(builtinGeometryFuncs():           2 Function None 3
               17:             Label
-      269(f64v2):    150(ptr) Variable Function
-      270(f64v1):    150(ptr) Variable Function
-        291(f64):     33(ptr) Variable Function
-      295(f64v3):    150(ptr) Variable Function
-         335(bv):    153(ptr) Variable Function
-          356(b):    108(ptr) Variable Function
-         366(iv):    184(ptr) Variable Function
-             271:149(f64vec3) Load 270(f64v1)
-             272:149(f64vec3) ExtInst 1(GLSL.std.450) 4(FAbs) 271
-                              Store 269(f64v2) 272
-             273:149(f64vec3) Load 270(f64v1)
-             274:149(f64vec3) ExtInst 1(GLSL.std.450) 6(FSign) 273
-                              Store 269(f64v2) 274
-             275:149(f64vec3) Load 270(f64v1)
-             276:149(f64vec3) ExtInst 1(GLSL.std.450) 8(Floor) 275
-                              Store 269(f64v2) 276
-             277:149(f64vec3) Load 270(f64v1)
-             278:149(f64vec3) ExtInst 1(GLSL.std.450) 3(Trunc) 277
-                              Store 269(f64v2) 278
-             279:149(f64vec3) Load 270(f64v1)
-             280:149(f64vec3) ExtInst 1(GLSL.std.450) 1(Round) 279
-                              Store 269(f64v2) 280
-             281:149(f64vec3) Load 270(f64v1)
-             282:149(f64vec3) ExtInst 1(GLSL.std.450) 2(RoundEven) 281
-                              Store 269(f64v2) 282
-             283:149(f64vec3) Load 270(f64v1)
-             284:149(f64vec3) ExtInst 1(GLSL.std.450) 9(Ceil) 283
-                              Store 269(f64v2) 284
-             285:149(f64vec3) Load 270(f64v1)
-             286:149(f64vec3) ExtInst 1(GLSL.std.450) 10(Fract) 285
-                              Store 269(f64v2) 286
-             287:149(f64vec3) Load 270(f64v1)
-             288:149(f64vec3) Load 269(f64v2)
-             289:149(f64vec3) FMod 287 288
-                              Store 269(f64v2) 289
-             290:149(f64vec3) Load 270(f64v1)
-             292:26(float64_t) Load 291(f64)
-             293:149(f64vec3) CompositeConstruct 292 292 292
-             294:149(f64vec3) FMod 290 293
-                              Store 269(f64v2) 294
-             296:149(f64vec3) Load 270(f64v1)
-             297:149(f64vec3) ExtInst 1(GLSL.std.450) 35(Modf) 296 269(f64v2)
-                              Store 295(f64v3) 297
-             298:149(f64vec3) Load 270(f64v1)
-             299:149(f64vec3) Load 269(f64v2)
-             300:149(f64vec3) ExtInst 1(GLSL.std.450) 37(FMin) 298 299
-                              Store 295(f64v3) 300
-             301:149(f64vec3) Load 270(f64v1)
-             302:26(float64_t) Load 291(f64)
-             303:149(f64vec3) CompositeConstruct 302 302 302
-             304:149(f64vec3) ExtInst 1(GLSL.std.450) 37(FMin) 301 303
-                              Store 295(f64v3) 304
-             305:149(f64vec3) Load 270(f64v1)
-             306:149(f64vec3) Load 269(f64v2)
-             307:149(f64vec3) ExtInst 1(GLSL.std.450) 40(FMax) 305 306
-                              Store 295(f64v3) 307
-             308:149(f64vec3) Load 270(f64v1)
-             309:26(float64_t) Load 291(f64)
-             310:149(f64vec3) CompositeConstruct 309 309 309
-             311:149(f64vec3) ExtInst 1(GLSL.std.450) 40(FMax) 308 310
-                              Store 295(f64v3) 311
-             312:149(f64vec3) Load 270(f64v1)
-             313:26(float64_t) Load 291(f64)
-             314:     33(ptr) AccessChain 269(f64v2) 32
-             315:26(float64_t) Load 314
-             316:149(f64vec3) CompositeConstruct 313 313 313
-             317:149(f64vec3) CompositeConstruct 315 315 315
-             318:149(f64vec3) ExtInst 1(GLSL.std.450) 43(FClamp) 312 316 317
-                              Store 295(f64v3) 318
-             319:149(f64vec3) Load 270(f64v1)
-             320:149(f64vec3) Load 269(f64v2)
-             321:26(float64_t) Load 291(f64)
-             322:149(f64vec3) CompositeConstruct 321 321 321
-             323:149(f64vec3) ExtInst 1(GLSL.std.450) 43(FClamp) 319 320 322
-                              Store 295(f64v3) 323
-             324:149(f64vec3) Load 270(f64v1)
-             325:149(f64vec3) Load 269(f64v2)
-             326:26(float64_t) Load 291(f64)
-             327:149(f64vec3) CompositeConstruct 326 326 326
-             328:149(f64vec3) ExtInst 1(GLSL.std.450) 46(FMix) 324 325 327
-                              Store 295(f64v3) 328
-             329:149(f64vec3) Load 270(f64v1)
-             330:149(f64vec3) Load 269(f64v2)
-             331:149(f64vec3) Load 295(f64v3)
-             332:149(f64vec3) ExtInst 1(GLSL.std.450) 46(FMix) 329 330 331
-                              Store 295(f64v3) 332
-             333:149(f64vec3) Load 270(f64v1)
-             334:149(f64vec3) Load 269(f64v2)
-             336:  152(bvec3) Load 335(bv)
-             337:149(f64vec3) Select 336 334 333
-                              Store 295(f64v3) 337
-             338:149(f64vec3) Load 270(f64v1)
-             339:149(f64vec3) Load 269(f64v2)
-             340:149(f64vec3) ExtInst 1(GLSL.std.450) 48(Step) 338 339
-                              Store 295(f64v3) 340
-             341:26(float64_t) Load 291(f64)
-             342:149(f64vec3) Load 295(f64v3)
-             343:149(f64vec3) CompositeConstruct 341 341 341
-             344:149(f64vec3) ExtInst 1(GLSL.std.450) 48(Step) 343 342
-                              Store 295(f64v3) 344
-             345:149(f64vec3) Load 270(f64v1)
-             346:149(f64vec3) Load 269(f64v2)
-             347:149(f64vec3) Load 295(f64v3)
-             348:149(f64vec3) ExtInst 1(GLSL.std.450) 49(SmoothStep) 345 346 347
-                              Store 295(f64v3) 348
-             349:26(float64_t) Load 291(f64)
-             350:     33(ptr) AccessChain 270(f64v1) 32
-             351:26(float64_t) Load 350
-             352:149(f64vec3) Load 269(f64v2)
-             353:149(f64vec3) CompositeConstruct 349 349 349
-             354:149(f64vec3) CompositeConstruct 351 351 351
-             355:149(f64vec3) ExtInst 1(GLSL.std.450) 49(SmoothStep) 353 354 352
-                              Store 295(f64v3) 355
-             357:26(float64_t) Load 291(f64)
-             358:   107(bool) IsNan 357
-                              Store 356(b) 358
-             359:149(f64vec3) Load 270(f64v1)
-             360:  152(bvec3) IsInf 359
-                              Store 335(bv) 360
-             361:149(f64vec3) Load 270(f64v1)
-             362:149(f64vec3) Load 269(f64v2)
-             363:149(f64vec3) Load 295(f64v3)
-             364:149(f64vec3) ExtInst 1(GLSL.std.450) 50(Fma) 361 362 363
-                              Store 295(f64v3) 364
-             365:149(f64vec3) Load 270(f64v1)
-             368:367(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 365
-             369:  183(ivec3) CompositeExtract 368 1
-                              Store 366(iv) 369
-             370:149(f64vec3) CompositeExtract 368 0
-                              Store 269(f64v2) 370
-             371:149(f64vec3) Load 270(f64v1)
-             372:  183(ivec3) Load 366(iv)
-             373:149(f64vec3) ExtInst 1(GLSL.std.450) 53(Ldexp) 371 372
-                              Store 269(f64v2) 373
+        326(f64):     31(ptr) Variable Function
+      327(f64v1):    148(ptr) Variable Function
+      331(f64v2):    148(ptr) Variable Function
+      337(f64v3):    148(ptr) Variable Function
+             328:147(f64vec3) Load 327(f64v1)
+             329:24(float64_t) ExtInst 1(GLSL.std.450) 66(Length) 328
+                              Store 326(f64) 329
+             330:147(f64vec3) Load 327(f64v1)
+             332:147(f64vec3) Load 331(f64v2)
+             333:24(float64_t) ExtInst 1(GLSL.std.450) 67(Distance) 330 332
+                              Store 326(f64) 333
+             334:147(f64vec3) Load 327(f64v1)
+             335:147(f64vec3) Load 331(f64v2)
+             336:24(float64_t) Dot 334 335
+                              Store 326(f64) 336
+             338:147(f64vec3) Load 327(f64v1)
+             339:147(f64vec3) Load 331(f64v2)
+             340:147(f64vec3) ExtInst 1(GLSL.std.450) 68(Cross) 338 339
+                              Store 337(f64v3) 340
+             341:147(f64vec3) Load 327(f64v1)
+             342:147(f64vec3) ExtInst 1(GLSL.std.450) 69(Normalize) 341
+                              Store 331(f64v2) 342
+             343:147(f64vec3) Load 327(f64v1)
+             344:147(f64vec3) Load 331(f64v2)
+             345:147(f64vec3) Load 337(f64v3)
+             346:147(f64vec3) ExtInst 1(GLSL.std.450) 70(FaceForward) 343 344 345
+                              Store 337(f64v3) 346
+             347:147(f64vec3) Load 327(f64v1)
+             348:147(f64vec3) Load 331(f64v2)
+             349:147(f64vec3) ExtInst 1(GLSL.std.450) 71(Reflect) 347 348
+                              Store 337(f64v3) 349
+             350:147(f64vec3) Load 327(f64v1)
+             351:147(f64vec3) Load 331(f64v2)
+             352:24(float64_t) Load 326(f64)
+             353:147(f64vec3) ExtInst 1(GLSL.std.450) 72(Refract) 350 351 352
+                              Store 337(f64v3) 353
                               Return
                               FunctionEnd
-18(builtinGeometryFuncs():           2 Function None 3
+18(builtinMatrixFuncs():           2 Function None 3
               19:             Label
-        374(f64):     33(ptr) Variable Function
-      375(f64v1):    150(ptr) Variable Function
-      379(f64v2):    150(ptr) Variable Function
-      385(f64v3):    150(ptr) Variable Function
-             376:149(f64vec3) Load 375(f64v1)
-             377:26(float64_t) ExtInst 1(GLSL.std.450) 66(Length) 376
-                              Store 374(f64) 377
-             378:149(f64vec3) Load 375(f64v1)
-             380:149(f64vec3) Load 379(f64v2)
-             381:26(float64_t) ExtInst 1(GLSL.std.450) 67(Distance) 378 380
-                              Store 374(f64) 381
-             382:149(f64vec3) Load 375(f64v1)
-             383:149(f64vec3) Load 379(f64v2)
-             384:26(float64_t) Dot 382 383
-                              Store 374(f64) 384
-             386:149(f64vec3) Load 375(f64v1)
-             387:149(f64vec3) Load 379(f64v2)
-             388:149(f64vec3) ExtInst 1(GLSL.std.450) 68(Cross) 386 387
-                              Store 385(f64v3) 388
-             389:149(f64vec3) Load 375(f64v1)
-             390:149(f64vec3) ExtInst 1(GLSL.std.450) 69(Normalize) 389
-                              Store 379(f64v2) 390
-             391:149(f64vec3) Load 375(f64v1)
-             392:149(f64vec3) Load 379(f64v2)
-             393:149(f64vec3) Load 385(f64v3)
-             394:149(f64vec3) ExtInst 1(GLSL.std.450) 70(FaceForward) 391 392 393
-                              Store 385(f64v3) 394
-             395:149(f64vec3) Load 375(f64v1)
-             396:149(f64vec3) Load 379(f64v2)
-             397:149(f64vec3) ExtInst 1(GLSL.std.450) 71(Reflect) 395 396
-                              Store 385(f64v3) 397
-             398:149(f64vec3) Load 375(f64v1)
-             399:149(f64vec3) Load 379(f64v2)
-             400:26(float64_t) Load 374(f64)
-             401:149(f64vec3) ExtInst 1(GLSL.std.450) 72(Refract) 398 399 400
-                              Store 385(f64v3) 401
+      356(f64m3):    355(ptr) Variable Function
+      357(f64m1):    355(ptr) Variable Function
+      359(f64m2):    355(ptr) Variable Function
+      368(f64v1):    148(ptr) Variable Function
+      370(f64v2):     26(ptr) Variable Function
+      375(f64m4):    374(ptr) Variable Function
+        378(f64):     31(ptr) Variable Function
+      381(f64m5):    380(ptr) Variable Function
+      387(f64m6):    386(ptr) Variable Function
+      388(f64m7):    386(ptr) Variable Function
+             358:         354 Load 357(f64m1)
+             360:         354 Load 359(f64m2)
+             361:147(f64vec3) CompositeExtract 358 0
+             362:147(f64vec3) CompositeExtract 360 0
+             363:147(f64vec3) FMul 361 362
+             364:147(f64vec3) CompositeExtract 358 1
+             365:147(f64vec3) CompositeExtract 360 1
+             366:147(f64vec3) FMul 364 365
+             367:         354 CompositeConstruct 363 366
+                              Store 356(f64m3) 367
+             369:147(f64vec3) Load 368(f64v1)
+             371: 25(f64vec2) Load 370(f64v2)
+             372:         354 OuterProduct 369 371
+                              Store 357(f64m1) 372
+             376:         354 Load 357(f64m1)
+             377:         373 Transpose 376
+                              Store 375(f64m4) 377
+             382:         379 Load 381(f64m5)
+             383:24(float64_t) ExtInst 1(GLSL.std.450) 33(Determinant) 382
+                              Store 378(f64) 383
+             389:         385 Load 388(f64m7)
+             390:         385 ExtInst 1(GLSL.std.450) 34(MatrixInverse) 389
+                              Store 387(f64m6) 390
                               Return
                               FunctionEnd
-20(builtinMatrixFuncs():           2 Function None 3
+20(builtinVecRelFuncs():           2 Function None 3
               21:             Label
-      404(f64m3):    403(ptr) Variable Function
-      405(f64m1):    403(ptr) Variable Function
-      407(f64m2):    403(ptr) Variable Function
-      416(f64v1):    150(ptr) Variable Function
-      418(f64v2):     28(ptr) Variable Function
-      423(f64m4):    422(ptr) Variable Function
-        426(f64):     33(ptr) Variable Function
-      429(f64m5):    428(ptr) Variable Function
-      434(f64m6):    433(ptr) Variable Function
-      435(f64m7):    433(ptr) Variable Function
-             406:         402 Load 405(f64m1)
-             408:         402 Load 407(f64m2)
-             409:149(f64vec3) CompositeExtract 406 0
-             410:149(f64vec3) CompositeExtract 408 0
-             411:149(f64vec3) FMul 409 410
-             412:149(f64vec3) CompositeExtract 406 1
-             413:149(f64vec3) CompositeExtract 408 1
-             414:149(f64vec3) FMul 412 413
-             415:         402 CompositeConstruct 411 414
-                              Store 404(f64m3) 415
-             417:149(f64vec3) Load 416(f64v1)
-             419: 27(f64vec2) Load 418(f64v2)
-             420:         402 OuterProduct 417 419
-                              Store 405(f64m1) 420
-             424:         402 Load 405(f64m1)
-             425:         421 Transpose 424
-                              Store 423(f64m4) 425
-             430:         427 Load 429(f64m5)
-             431:26(float64_t) ExtInst 1(GLSL.std.450) 33(Determinant) 430
-                              Store 426(f64) 431
-             436:         432 Load 435(f64m7)
-             437:         432 ExtInst 1(GLSL.std.450) 34(MatrixInverse) 436
-                              Store 434(f64m6) 437
+         391(bv):    151(ptr) Variable Function
+      392(f64v1):    148(ptr) Variable Function
+      394(f64v2):    148(ptr) Variable Function
+             393:147(f64vec3) Load 392(f64v1)
+             395:147(f64vec3) Load 394(f64v2)
+             396:  150(bvec3) FOrdLessThan 393 395
+                              Store 391(bv) 396
+             397:147(f64vec3) Load 392(f64v1)
+             398:147(f64vec3) Load 394(f64v2)
+             399:  150(bvec3) FOrdLessThanEqual 397 398
+                              Store 391(bv) 399
+             400:147(f64vec3) Load 392(f64v1)
+             401:147(f64vec3) Load 394(f64v2)
+             402:  150(bvec3) FOrdGreaterThan 400 401
+                              Store 391(bv) 402
+             403:147(f64vec3) Load 392(f64v1)
+             404:147(f64vec3) Load 394(f64v2)
+             405:  150(bvec3) FOrdGreaterThanEqual 403 404
+                              Store 391(bv) 405
+             406:147(f64vec3) Load 392(f64v1)
+             407:147(f64vec3) Load 394(f64v2)
+             408:  150(bvec3) FOrdEqual 406 407
+                              Store 391(bv) 408
+             409:147(f64vec3) Load 392(f64v1)
+             410:147(f64vec3) Load 394(f64v2)
+             411:  150(bvec3) FUnordNotEqual 409 410
+                              Store 391(bv) 411
                               Return
                               FunctionEnd
-22(builtinVecRelFuncs():           2 Function None 3
+22(builtinFragProcFuncs():           2 Function None 3
               23:             Label
-         438(bv):    153(ptr) Variable Function
-      439(f64v1):    150(ptr) Variable Function
-      441(f64v2):    150(ptr) Variable Function
-             440:149(f64vec3) Load 439(f64v1)
-             442:149(f64vec3) Load 441(f64v2)
-             443:  152(bvec3) FOrdLessThan 440 442
-                              Store 438(bv) 443
-             444:149(f64vec3) Load 439(f64v1)
-             445:149(f64vec3) Load 441(f64v2)
-             446:  152(bvec3) FOrdLessThanEqual 444 445
-                              Store 438(bv) 446
-             447:149(f64vec3) Load 439(f64v1)
-             448:149(f64vec3) Load 441(f64v2)
-             449:  152(bvec3) FOrdGreaterThan 447 448
-                              Store 438(bv) 449
-             450:149(f64vec3) Load 439(f64v1)
-             451:149(f64vec3) Load 441(f64v2)
-             452:  152(bvec3) FOrdGreaterThanEqual 450 451
-                              Store 438(bv) 452
-             453:149(f64vec3) Load 439(f64v1)
-             454:149(f64vec3) Load 441(f64v2)
-             455:  152(bvec3) FOrdEqual 453 454
-                              Store 438(bv) 455
-             456:149(f64vec3) Load 439(f64v1)
-             457:149(f64vec3) Load 441(f64v2)
-             458:  152(bvec3) FUnordNotEqual 456 457
-                              Store 438(bv) 458
-                              Return
-                              FunctionEnd
-24(builtinFragProcFuncs():           2 Function None 3
-              25:             Label
-       459(f64v):    150(ptr) Variable Function
-             463:    462(ptr) AccessChain 461(if64v) 32
-             464:26(float64_t) Load 463
-             465:26(float64_t) DPdx 464
-             466:     33(ptr) AccessChain 459(f64v) 32
-                              Store 466 465
-             467:    462(ptr) AccessChain 461(if64v) 88
-             468:26(float64_t) Load 467
-             469:26(float64_t) DPdy 468
-             470:     33(ptr) AccessChain 459(f64v) 88
-                              Store 470 469
-             471:149(f64vec3) Load 461(if64v)
-             472: 27(f64vec2) VectorShuffle 471 471 0 1
-             473: 27(f64vec2) DPdxFine 472
-             474:     33(ptr) AccessChain 459(f64v) 32
-             475:26(float64_t) CompositeExtract 473 0
-                              Store 474 475
-             476:     33(ptr) AccessChain 459(f64v) 88
-             477:26(float64_t) CompositeExtract 473 1
-                              Store 476 477
-             478:149(f64vec3) Load 461(if64v)
-             479: 27(f64vec2) VectorShuffle 478 478 0 1
-             480: 27(f64vec2) DPdyFine 479
-             481:     33(ptr) AccessChain 459(f64v) 32
-             482:26(float64_t) CompositeExtract 480 0
-                              Store 481 482
-             483:     33(ptr) AccessChain 459(f64v) 88
-             484:26(float64_t) CompositeExtract 480 1
-                              Store 483 484
-             485:149(f64vec3) Load 461(if64v)
-             486:149(f64vec3) DPdxCoarse 485
-                              Store 459(f64v) 486
-             487:149(f64vec3) Load 461(if64v)
-             488:149(f64vec3) DPdxCoarse 487
-                              Store 459(f64v) 488
-             489:    462(ptr) AccessChain 461(if64v) 32
-             490:26(float64_t) Load 489
-             491:26(float64_t) Fwidth 490
-             492:     33(ptr) AccessChain 459(f64v) 32
-                              Store 492 491
-             493:149(f64vec3) Load 461(if64v)
-             494: 27(f64vec2) VectorShuffle 493 493 0 1
-             495: 27(f64vec2) FwidthFine 494
-             496:     33(ptr) AccessChain 459(f64v) 32
-             497:26(float64_t) CompositeExtract 495 0
-                              Store 496 497
-             498:     33(ptr) AccessChain 459(f64v) 88
-             499:26(float64_t) CompositeExtract 495 1
-                              Store 498 499
-             500:149(f64vec3) Load 461(if64v)
-             501:149(f64vec3) FwidthCoarse 500
-                              Store 459(f64v) 501
-             502:    462(ptr) AccessChain 461(if64v) 32
-             503:26(float64_t) ExtInst 1(GLSL.std.450) 76(InterpolateAtCentroid) 502
-             504:     33(ptr) AccessChain 459(f64v) 32
-                              Store 504 503
-             506:149(f64vec3) ExtInst 1(GLSL.std.450) 77(InterpolateAtSample) 461(if64v) 505
-             507: 27(f64vec2) VectorShuffle 506 506 0 1
-             508:     33(ptr) AccessChain 459(f64v) 32
-             509:26(float64_t) CompositeExtract 507 0
-                              Store 508 509
-             510:     33(ptr) AccessChain 459(f64v) 88
-             511:26(float64_t) CompositeExtract 507 1
-                              Store 510 511
-             514:149(f64vec3) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 461(if64v) 513
-                              Store 459(f64v) 514
+       412(f64v):    148(ptr) Variable Function
+             416:    415(ptr) AccessChain 414(if64v) 30
+             417:24(float64_t) Load 416
+             418:24(float64_t) DPdx 417
+             419:     31(ptr) AccessChain 412(f64v) 30
+                              Store 419 418
+             420:    415(ptr) AccessChain 414(if64v) 86
+             421:24(float64_t) Load 420
+             422:24(float64_t) DPdy 421
+             423:     31(ptr) AccessChain 412(f64v) 86
+                              Store 423 422
+             424:147(f64vec3) Load 414(if64v)
+             425: 25(f64vec2) VectorShuffle 424 424 0 1
+             426: 25(f64vec2) DPdxFine 425
+             427:     31(ptr) AccessChain 412(f64v) 30
+             428:24(float64_t) CompositeExtract 426 0
+                              Store 427 428
+             429:     31(ptr) AccessChain 412(f64v) 86
+             430:24(float64_t) CompositeExtract 426 1
+                              Store 429 430
+             431:147(f64vec3) Load 414(if64v)
+             432: 25(f64vec2) VectorShuffle 431 431 0 1
+             433: 25(f64vec2) DPdyFine 432
+             434:     31(ptr) AccessChain 412(f64v) 30
+             435:24(float64_t) CompositeExtract 433 0
+                              Store 434 435
+             436:     31(ptr) AccessChain 412(f64v) 86
+             437:24(float64_t) CompositeExtract 433 1
+                              Store 436 437
+             438:147(f64vec3) Load 414(if64v)
+             439:147(f64vec3) DPdxCoarse 438
+                              Store 412(f64v) 439
+             440:147(f64vec3) Load 414(if64v)
+             441:147(f64vec3) DPdxCoarse 440
+                              Store 412(f64v) 441
+             442:    415(ptr) AccessChain 414(if64v) 30
+             443:24(float64_t) Load 442
+             444:24(float64_t) Fwidth 443
+             445:     31(ptr) AccessChain 412(f64v) 30
+                              Store 445 444
+             446:147(f64vec3) Load 414(if64v)
+             447: 25(f64vec2) VectorShuffle 446 446 0 1
+             448: 25(f64vec2) FwidthFine 447
+             449:     31(ptr) AccessChain 412(f64v) 30
+             450:24(float64_t) CompositeExtract 448 0
+                              Store 449 450
+             451:     31(ptr) AccessChain 412(f64v) 86
+             452:24(float64_t) CompositeExtract 448 1
+                              Store 451 452
+             453:147(f64vec3) Load 414(if64v)
+             454:147(f64vec3) FwidthCoarse 453
+                              Store 412(f64v) 454
+             455:    415(ptr) AccessChain 414(if64v) 30
+             456:24(float64_t) ExtInst 1(GLSL.std.450) 76(InterpolateAtCentroid) 455
+             457:     31(ptr) AccessChain 412(f64v) 30
+                              Store 457 456
+             459:147(f64vec3) ExtInst 1(GLSL.std.450) 77(InterpolateAtSample) 414(if64v) 458
+             460: 25(f64vec2) VectorShuffle 459 459 0 1
+             461:     31(ptr) AccessChain 412(f64v) 30
+             462:24(float64_t) CompositeExtract 460 0
+                              Store 461 462
+             463:     31(ptr) AccessChain 412(f64v) 86
+             464:24(float64_t) CompositeExtract 460 1
+                              Store 463 464
+             467:147(f64vec3) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 414(if64v) 466
+                              Store 412(f64v) 467
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.int16.frag.out b/Test/baseResults/spv.int16.frag.out
index 43cb09f..3e10a7d 100644
--- a/Test/baseResults/spv.int16.frag.out
+++ b/Test/baseResults/spv.int16.frag.out
@@ -1,7 +1,7 @@
 spv.int16.frag
 // Module Version 10000
 // Generated by (magic number): 8000a
-// Id's are bound by 535
+// Id's are bound by 549
 
                               Capability Shader
                               Capability Float16
@@ -48,53 +48,55 @@
                               Name 154  "i8v"
                               Name 163  "u8v"
                               Name 176  "bv"
-                              Name 195  "u16v"
-                              Name 200  "i16"
-                              Name 220  "i"
-                              Name 227  "uv"
-                              Name 243  "i64"
-                              Name 281  "b"
-                              Name 343  "i16v"
-                              Name 346  "i16"
-                              Name 356  "u16v"
-                              Name 358  "u16"
-                              Name 428  "i32"
-                              Name 431  "i64"
-                              Name 434  "i16v4"
-                              Name 437  "u32"
-                              Name 438  "u16v2"
-                              Name 442  "u64"
-                              Name 445  "u16v4"
-                              Name 457  "bv"
-                              Name 530  "Block"
-                              MemberName 530(Block) 0  "i16"
-                              MemberName 530(Block) 1  "i16v2"
-                              MemberName 530(Block) 2  "i16v3"
-                              MemberName 530(Block) 3  "i16v4"
-                              MemberName 530(Block) 4  "u16"
-                              MemberName 530(Block) 5  "u16v2"
-                              MemberName 530(Block) 6  "u16v3"
-                              MemberName 530(Block) 7  "u16v4"
-                              Name 532  "block"
-                              Name 533  "si16"
-                              Name 534  "su16"
+                              Name 196  "arr"
+                              Name 204  "u16v"
+                              Name 209  "i16"
+                              Name 229  "i"
+                              Name 236  "uv"
+                              Name 252  "i64"
+                              Name 290  "b"
+                              Name 353  "f"
+                              Name 357  "i16v"
+                              Name 360  "i16"
+                              Name 370  "u16v"
+                              Name 372  "u16"
+                              Name 442  "i32"
+                              Name 445  "i64"
+                              Name 448  "i16v4"
+                              Name 451  "u32"
+                              Name 452  "u16v2"
+                              Name 456  "u64"
+                              Name 459  "u16v4"
+                              Name 471  "bv"
+                              Name 544  "Block"
+                              MemberName 544(Block) 0  "i16"
+                              MemberName 544(Block) 1  "i16v2"
+                              MemberName 544(Block) 2  "i16v3"
+                              MemberName 544(Block) 3  "i16v4"
+                              MemberName 544(Block) 4  "u16"
+                              MemberName 544(Block) 5  "u16v2"
+                              MemberName 544(Block) 6  "u16v3"
+                              MemberName 544(Block) 7  "u16v4"
+                              Name 546  "block"
+                              Name 547  "si16"
+                              Name 548  "su16"
                               MemberDecorate 24(Uniforms) 0 Offset 0
                               Decorate 24(Uniforms) Block
                               Decorate 26 DescriptorSet 0
                               Decorate 26 Binding 0
-                              MemberDecorate 530(Block) 0 Offset 0
-                              MemberDecorate 530(Block) 1 Offset 4
-                              MemberDecorate 530(Block) 2 Offset 8
-                              MemberDecorate 530(Block) 3 Offset 16
-                              MemberDecorate 530(Block) 4 Offset 24
-                              MemberDecorate 530(Block) 5 Offset 28
-                              MemberDecorate 530(Block) 6 Offset 32
-                              MemberDecorate 530(Block) 7 Offset 40
-                              Decorate 530(Block) Block
-                              Decorate 532(block) DescriptorSet 0
-                              Decorate 532(block) Binding 1
-                              Decorate 533(si16) SpecId 100
-                              Decorate 534(su16) SpecId 101
+                              MemberDecorate 544(Block) 0 Offset 0
+                              MemberDecorate 544(Block) 1 Offset 4
+                              MemberDecorate 544(Block) 2 Offset 8
+                              MemberDecorate 544(Block) 3 Offset 16
+                              MemberDecorate 544(Block) 4 Offset 24
+                              MemberDecorate 544(Block) 5 Offset 28
+                              MemberDecorate 544(Block) 6 Offset 32
+                              MemberDecorate 544(Block) 7 Offset 40
+                              Decorate 544(Block) Block
+                              Decorate 546(block) DescriptorSet 0
+                              Decorate 546(block) Binding 1
+                              Decorate 547(si16) SpecId 100
+                              Decorate 548(su16) SpecId 101
                2:             TypeVoid
                3:             TypeFunction 2
               14:             TypeInt 16 1
@@ -160,37 +162,46 @@
              185: 36(int16_t) Constant 1
              186: 57(i16vec2) ConstantComposite 184 184
              187: 57(i16vec2) ConstantComposite 185 185
-             193:             TypeVector 36(int16_t) 3
-             194:             TypePointer Function 193(i16vec3)
-             197:             TypeVector 14(int16_t) 3
-             219:             TypePointer Function 27(int)
-             225:             TypeVector 17(int) 3
-             226:             TypePointer Function 225(ivec3)
-             242:             TypePointer Function 71(int64_t)
-             264:     17(int) Constant 1
-             270:     17(int) Constant 2
-             276:             TypeVector 27(int) 3
-             280:             TypePointer Function 173(bool)
-             282:     17(int) Constant 0
-             296:             TypePointer Function 17(int)
-             354: 52(i16vec2) ConstantComposite 21 21
-             363:193(i16vec3) ConstantComposite 184 184 184
-             405:   173(bool) ConstantTrue
-             412:   173(bool) ConstantFalse
-             413:  174(bvec2) ConstantComposite 412 412
-             425:             TypeVector 173(bool) 3
-             426:  425(bvec3) ConstantComposite 412 412 412
-             432:             TypeVector 14(int16_t) 4
-             433:             TypePointer Function 432(i16vec4)
-             441:             TypePointer Function 77(int64_t)
-             443:             TypeVector 36(int16_t) 4
-             444:             TypePointer Function 443(i16vec4)
-             456:             TypePointer Function 425(bvec3)
-      530(Block):             TypeStruct 14(int16_t) 52(i16vec2) 197(i16vec3) 432(i16vec4) 36(int16_t) 57(i16vec2) 193(i16vec3) 443(i16vec4)
-             531:             TypePointer Uniform 530(Block)
-      532(block):    531(ptr) Variable Uniform
-       533(si16): 14(int16_t) SpecConstant 4294967286
-       534(su16): 36(int16_t) SpecConstant 20
+             193:     17(int) Constant 4
+             194:             TypeArray 97(float) 193
+             195:             TypePointer Function 194
+             197:   97(float) Constant 1065353216
+             198:   97(float) Constant 1073741824
+             199:   97(float) Constant 1077936128
+             200:   97(float) Constant 1082130432
+             201:         194 ConstantComposite 197 198 199 200
+             202:             TypeVector 36(int16_t) 3
+             203:             TypePointer Function 202(i16vec3)
+             206:             TypeVector 14(int16_t) 3
+             228:             TypePointer Function 27(int)
+             234:             TypeVector 17(int) 3
+             235:             TypePointer Function 234(ivec3)
+             251:             TypePointer Function 71(int64_t)
+             273:     17(int) Constant 1
+             279:     17(int) Constant 2
+             285:             TypeVector 27(int) 3
+             289:             TypePointer Function 173(bool)
+             291:     17(int) Constant 0
+             305:             TypePointer Function 17(int)
+             352:             TypePointer Function 97(float)
+             368: 52(i16vec2) ConstantComposite 21 21
+             377:202(i16vec3) ConstantComposite 184 184 184
+             419:   173(bool) ConstantTrue
+             426:   173(bool) ConstantFalse
+             427:  174(bvec2) ConstantComposite 426 426
+             439:             TypeVector 173(bool) 3
+             440:  439(bvec3) ConstantComposite 426 426 426
+             446:             TypeVector 14(int16_t) 4
+             447:             TypePointer Function 446(i16vec4)
+             455:             TypePointer Function 77(int64_t)
+             457:             TypeVector 36(int16_t) 4
+             458:             TypePointer Function 457(i16vec4)
+             470:             TypePointer Function 439(bvec3)
+      544(Block):             TypeStruct 14(int16_t) 52(i16vec2) 206(i16vec3) 446(i16vec4) 36(int16_t) 57(i16vec2) 202(i16vec3) 457(i16vec4)
+             545:             TypePointer Uniform 544(Block)
+      546(block):    545(ptr) Variable Uniform
+       547(si16): 14(int16_t) SpecConstant 4294967286
+       548(su16): 36(int16_t) SpecConstant 20
          4(main):           2 Function None 3
                5:             Label
                               Return
@@ -364,397 +375,404 @@
                               FunctionEnd
   10(operators():           2 Function None 3
               11:             Label
-       195(u16v):    194(ptr) Variable Function
-        200(i16):     15(ptr) Variable Function
-          220(i):    219(ptr) Variable Function
-         227(uv):    226(ptr) Variable Function
-        243(i64):    242(ptr) Variable Function
-          281(b):    280(ptr) Variable Function
-             196:193(i16vec3) Load 195(u16v)
-             198:197(i16vec3) CompositeConstruct 179 179 179
-             199:193(i16vec3) IAdd 196 198
-                              Store 195(u16v) 199
-             201: 14(int16_t) Load 200(i16)
-             202: 14(int16_t) ISub 201 179
-                              Store 200(i16) 202
-             203: 14(int16_t) Load 200(i16)
-             204: 14(int16_t) IAdd 203 179
-                              Store 200(i16) 204
-             205:193(i16vec3) Load 195(u16v)
-             206:197(i16vec3) CompositeConstruct 179 179 179
-             207:193(i16vec3) ISub 205 206
-                              Store 195(u16v) 207
-             208:193(i16vec3) Load 195(u16v)
-             209:193(i16vec3) Not 208
-                              Store 195(u16v) 209
-             210: 14(int16_t) Load 200(i16)
-                              Store 200(i16) 210
-             211:193(i16vec3) Load 195(u16v)
-             212:193(i16vec3) SNegate 211
-                              Store 195(u16v) 212
-             213: 14(int16_t) Load 200(i16)
-             214: 14(int16_t) Load 200(i16)
-             215: 14(int16_t) IAdd 214 213
-                              Store 200(i16) 215
-             216:193(i16vec3) Load 195(u16v)
-             217:193(i16vec3) Load 195(u16v)
-             218:193(i16vec3) ISub 217 216
-                              Store 195(u16v) 218
-             221: 14(int16_t) Load 200(i16)
-             222:     27(int) SConvert 221
-             223:     27(int) Load 220(i)
-             224:     27(int) IMul 223 222
-                              Store 220(i) 224
-             228:193(i16vec3) Load 195(u16v)
-             229:  225(ivec3) UConvert 228
-             230:  225(ivec3) Load 227(uv)
-             231:  225(ivec3) UDiv 230 229
-                              Store 227(uv) 231
-             232: 14(int16_t) Load 200(i16)
-             233:     27(int) SConvert 232
-             234:     17(int) Bitcast 233
-             235:  225(ivec3) Load 227(uv)
-             236:  225(ivec3) CompositeConstruct 234 234 234
-             237:  225(ivec3) UMod 235 236
-                              Store 227(uv) 237
-             238:193(i16vec3) Load 195(u16v)
-             239:  225(ivec3) UConvert 238
-             240:  225(ivec3) Load 227(uv)
-             241:  225(ivec3) IAdd 239 240
-                              Store 227(uv) 241
-             244: 14(int16_t) Load 200(i16)
-             245: 71(int64_t) SConvert 244
-             246: 71(int64_t) Load 243(i64)
-             247: 71(int64_t) ISub 245 246
-                              Store 243(i64) 247
-             248:193(i16vec3) Load 195(u16v)
-             249:  225(ivec3) UConvert 248
-             250:  225(ivec3) Load 227(uv)
-             251:  225(ivec3) IMul 249 250
-                              Store 227(uv) 251
-             252: 14(int16_t) Load 200(i16)
-             253: 71(int64_t) SConvert 252
-             254: 71(int64_t) Load 243(i64)
-             255: 71(int64_t) IMul 253 254
-                              Store 243(i64) 255
-             256: 14(int16_t) Load 200(i16)
-             257:     27(int) SConvert 256
-             258:     27(int) Load 220(i)
-             259:     27(int) SMod 257 258
-                              Store 220(i) 259
-             260: 14(int16_t) Load 200(i16)
-             261:193(i16vec3) Load 195(u16v)
-             262:197(i16vec3) CompositeConstruct 260 260 260
-             263:193(i16vec3) ShiftLeftLogical 261 262
-                              Store 195(u16v) 263
-             265:     37(ptr) AccessChain 195(u16v) 264
-             266: 36(int16_t) Load 265
-             267: 14(int16_t) Load 200(i16)
-             268: 14(int16_t) ShiftRightArithmetic 267 266
-                              Store 200(i16) 268
-             269: 14(int16_t) Load 200(i16)
-             271:     37(ptr) AccessChain 195(u16v) 270
-             272: 36(int16_t) Load 271
-             273: 14(int16_t) ShiftLeftLogical 269 272
-                              Store 200(i16) 273
-             274:193(i16vec3) Load 195(u16v)
-             275:     27(int) Load 220(i)
-             277:  276(ivec3) CompositeConstruct 275 275 275
-             278:193(i16vec3) ShiftLeftLogical 274 277
-             279:  225(ivec3) UConvert 278
-                              Store 227(uv) 279
-             283:     37(ptr) AccessChain 195(u16v) 282
-             284: 36(int16_t) Load 283
-             285: 14(int16_t) Load 200(i16)
-             286: 36(int16_t) Bitcast 285
-             287:   173(bool) INotEqual 284 286
-                              Store 281(b) 287
-             288: 14(int16_t) Load 200(i16)
-             289: 36(int16_t) Bitcast 288
-             290:     37(ptr) AccessChain 195(u16v) 282
-             291: 36(int16_t) Load 290
-             292:   173(bool) IEqual 289 291
-                              Store 281(b) 292
-             293:     37(ptr) AccessChain 195(u16v) 282
-             294: 36(int16_t) Load 293
-             295:     17(int) UConvert 294
-             297:    296(ptr) AccessChain 227(uv) 264
-             298:     17(int) Load 297
-             299:   173(bool) UGreaterThan 295 298
-                              Store 281(b) 299
-             300: 14(int16_t) Load 200(i16)
-             301:     27(int) SConvert 300
-             302:     27(int) Load 220(i)
-             303:   173(bool) SLessThan 301 302
-                              Store 281(b) 303
-             304:     37(ptr) AccessChain 195(u16v) 264
-             305: 36(int16_t) Load 304
-             306:     17(int) UConvert 305
-             307:    296(ptr) AccessChain 227(uv) 282
-             308:     17(int) Load 307
-             309:   173(bool) UGreaterThanEqual 306 308
-                              Store 281(b) 309
-             310: 14(int16_t) Load 200(i16)
-             311:     27(int) SConvert 310
-             312:     27(int) Load 220(i)
-             313:   173(bool) SLessThanEqual 311 312
-                              Store 281(b) 313
-             314: 14(int16_t) Load 200(i16)
-             315:     27(int) SConvert 314
-             316:     17(int) Bitcast 315
-             317:  225(ivec3) Load 227(uv)
-             318:  225(ivec3) CompositeConstruct 316 316 316
-             319:  225(ivec3) BitwiseOr 317 318
-                              Store 227(uv) 319
-             320: 14(int16_t) Load 200(i16)
-             321:     27(int) SConvert 320
-             322:     27(int) Load 220(i)
-             323:     27(int) BitwiseOr 321 322
-                              Store 220(i) 323
-             324: 14(int16_t) Load 200(i16)
-             325: 71(int64_t) SConvert 324
-             326: 71(int64_t) Load 243(i64)
-             327: 71(int64_t) BitwiseAnd 326 325
-                              Store 243(i64) 327
-             328:193(i16vec3) Load 195(u16v)
-             329:  225(ivec3) UConvert 328
-             330:  225(ivec3) Load 227(uv)
-             331:  225(ivec3) BitwiseAnd 329 330
-                              Store 227(uv) 331
-             332: 14(int16_t) Load 200(i16)
-             333:     27(int) SConvert 332
-             334:     17(int) Bitcast 333
-             335:  225(ivec3) Load 227(uv)
-             336:  225(ivec3) CompositeConstruct 334 334 334
-             337:  225(ivec3) BitwiseXor 335 336
-                              Store 227(uv) 337
-             338:193(i16vec3) Load 195(u16v)
-             339: 14(int16_t) Load 200(i16)
-             340: 36(int16_t) Bitcast 339
-             341:193(i16vec3) CompositeConstruct 340 340 340
-             342:193(i16vec3) BitwiseXor 338 341
-                              Store 195(u16v) 342
+        196(arr):    195(ptr) Variable Function
+       204(u16v):    203(ptr) Variable Function
+        209(i16):     15(ptr) Variable Function
+          229(i):    228(ptr) Variable Function
+         236(uv):    235(ptr) Variable Function
+        252(i64):    251(ptr) Variable Function
+          290(b):    289(ptr) Variable Function
+          353(f):    352(ptr) Variable Function
+                              Store 196(arr) 201
+             205:202(i16vec3) Load 204(u16v)
+             207:206(i16vec3) CompositeConstruct 179 179 179
+             208:202(i16vec3) IAdd 205 207
+                              Store 204(u16v) 208
+             210: 14(int16_t) Load 209(i16)
+             211: 14(int16_t) ISub 210 179
+                              Store 209(i16) 211
+             212: 14(int16_t) Load 209(i16)
+             213: 14(int16_t) IAdd 212 179
+                              Store 209(i16) 213
+             214:202(i16vec3) Load 204(u16v)
+             215:206(i16vec3) CompositeConstruct 179 179 179
+             216:202(i16vec3) ISub 214 215
+                              Store 204(u16v) 216
+             217:202(i16vec3) Load 204(u16v)
+             218:202(i16vec3) Not 217
+                              Store 204(u16v) 218
+             219: 14(int16_t) Load 209(i16)
+                              Store 209(i16) 219
+             220:202(i16vec3) Load 204(u16v)
+             221:202(i16vec3) SNegate 220
+                              Store 204(u16v) 221
+             222: 14(int16_t) Load 209(i16)
+             223: 14(int16_t) Load 209(i16)
+             224: 14(int16_t) IAdd 223 222
+                              Store 209(i16) 224
+             225:202(i16vec3) Load 204(u16v)
+             226:202(i16vec3) Load 204(u16v)
+             227:202(i16vec3) ISub 226 225
+                              Store 204(u16v) 227
+             230: 14(int16_t) Load 209(i16)
+             231:     27(int) SConvert 230
+             232:     27(int) Load 229(i)
+             233:     27(int) IMul 232 231
+                              Store 229(i) 233
+             237:202(i16vec3) Load 204(u16v)
+             238:  234(ivec3) UConvert 237
+             239:  234(ivec3) Load 236(uv)
+             240:  234(ivec3) UDiv 239 238
+                              Store 236(uv) 240
+             241: 14(int16_t) Load 209(i16)
+             242:     27(int) SConvert 241
+             243:     17(int) Bitcast 242
+             244:  234(ivec3) Load 236(uv)
+             245:  234(ivec3) CompositeConstruct 243 243 243
+             246:  234(ivec3) UMod 244 245
+                              Store 236(uv) 246
+             247:202(i16vec3) Load 204(u16v)
+             248:  234(ivec3) UConvert 247
+             249:  234(ivec3) Load 236(uv)
+             250:  234(ivec3) IAdd 248 249
+                              Store 236(uv) 250
+             253: 14(int16_t) Load 209(i16)
+             254: 71(int64_t) SConvert 253
+             255: 71(int64_t) Load 252(i64)
+             256: 71(int64_t) ISub 254 255
+                              Store 252(i64) 256
+             257:202(i16vec3) Load 204(u16v)
+             258:  234(ivec3) UConvert 257
+             259:  234(ivec3) Load 236(uv)
+             260:  234(ivec3) IMul 258 259
+                              Store 236(uv) 260
+             261: 14(int16_t) Load 209(i16)
+             262: 71(int64_t) SConvert 261
+             263: 71(int64_t) Load 252(i64)
+             264: 71(int64_t) IMul 262 263
+                              Store 252(i64) 264
+             265: 14(int16_t) Load 209(i16)
+             266:     27(int) SConvert 265
+             267:     27(int) Load 229(i)
+             268:     27(int) SMod 266 267
+                              Store 229(i) 268
+             269: 14(int16_t) Load 209(i16)
+             270:202(i16vec3) Load 204(u16v)
+             271:206(i16vec3) CompositeConstruct 269 269 269
+             272:202(i16vec3) ShiftLeftLogical 270 271
+                              Store 204(u16v) 272
+             274:     37(ptr) AccessChain 204(u16v) 273
+             275: 36(int16_t) Load 274
+             276: 14(int16_t) Load 209(i16)
+             277: 14(int16_t) ShiftRightArithmetic 276 275
+                              Store 209(i16) 277
+             278: 14(int16_t) Load 209(i16)
+             280:     37(ptr) AccessChain 204(u16v) 279
+             281: 36(int16_t) Load 280
+             282: 14(int16_t) ShiftLeftLogical 278 281
+                              Store 209(i16) 282
+             283:202(i16vec3) Load 204(u16v)
+             284:     27(int) Load 229(i)
+             286:  285(ivec3) CompositeConstruct 284 284 284
+             287:202(i16vec3) ShiftLeftLogical 283 286
+             288:  234(ivec3) UConvert 287
+                              Store 236(uv) 288
+             292:     37(ptr) AccessChain 204(u16v) 291
+             293: 36(int16_t) Load 292
+             294: 14(int16_t) Load 209(i16)
+             295: 36(int16_t) Bitcast 294
+             296:   173(bool) INotEqual 293 295
+                              Store 290(b) 296
+             297: 14(int16_t) Load 209(i16)
+             298: 36(int16_t) Bitcast 297
+             299:     37(ptr) AccessChain 204(u16v) 291
+             300: 36(int16_t) Load 299
+             301:   173(bool) IEqual 298 300
+                              Store 290(b) 301
+             302:     37(ptr) AccessChain 204(u16v) 291
+             303: 36(int16_t) Load 302
+             304:     17(int) UConvert 303
+             306:    305(ptr) AccessChain 236(uv) 273
+             307:     17(int) Load 306
+             308:   173(bool) UGreaterThan 304 307
+                              Store 290(b) 308
+             309: 14(int16_t) Load 209(i16)
+             310:     27(int) SConvert 309
+             311:     27(int) Load 229(i)
+             312:   173(bool) SLessThan 310 311
+                              Store 290(b) 312
+             313:     37(ptr) AccessChain 204(u16v) 273
+             314: 36(int16_t) Load 313
+             315:     17(int) UConvert 314
+             316:    305(ptr) AccessChain 236(uv) 291
+             317:     17(int) Load 316
+             318:   173(bool) UGreaterThanEqual 315 317
+                              Store 290(b) 318
+             319: 14(int16_t) Load 209(i16)
+             320:     27(int) SConvert 319
+             321:     27(int) Load 229(i)
+             322:   173(bool) SLessThanEqual 320 321
+                              Store 290(b) 322
+             323: 14(int16_t) Load 209(i16)
+             324:     27(int) SConvert 323
+             325:     17(int) Bitcast 324
+             326:  234(ivec3) Load 236(uv)
+             327:  234(ivec3) CompositeConstruct 325 325 325
+             328:  234(ivec3) BitwiseOr 326 327
+                              Store 236(uv) 328
+             329: 14(int16_t) Load 209(i16)
+             330:     27(int) SConvert 329
+             331:     27(int) Load 229(i)
+             332:     27(int) BitwiseOr 330 331
+                              Store 229(i) 332
+             333: 14(int16_t) Load 209(i16)
+             334: 71(int64_t) SConvert 333
+             335: 71(int64_t) Load 252(i64)
+             336: 71(int64_t) BitwiseAnd 335 334
+                              Store 252(i64) 336
+             337:202(i16vec3) Load 204(u16v)
+             338:  234(ivec3) UConvert 337
+             339:  234(ivec3) Load 236(uv)
+             340:  234(ivec3) BitwiseAnd 338 339
+                              Store 236(uv) 340
+             341: 14(int16_t) Load 209(i16)
+             342:     27(int) SConvert 341
+             343:     17(int) Bitcast 342
+             344:  234(ivec3) Load 236(uv)
+             345:  234(ivec3) CompositeConstruct 343 343 343
+             346:  234(ivec3) BitwiseXor 344 345
+                              Store 236(uv) 346
+             347:202(i16vec3) Load 204(u16v)
+             348: 14(int16_t) Load 209(i16)
+             349: 36(int16_t) Bitcast 348
+             350:202(i16vec3) CompositeConstruct 349 349 349
+             351:202(i16vec3) BitwiseXor 347 350
+                              Store 204(u16v) 351
+             354: 14(int16_t) Load 209(i16)
+             355:    352(ptr) AccessChain 196(arr) 354
+             356:   97(float) Load 355
+                              Store 353(f) 356
                               Return
                               FunctionEnd
 12(builtinFuncs():           2 Function None 3
               13:             Label
-       343(i16v):     53(ptr) Variable Function
-        346(i16):     15(ptr) Variable Function
-       356(u16v):    194(ptr) Variable Function
-        358(u16):     37(ptr) Variable Function
-        428(i32):    219(ptr) Variable Function
-        431(i64):    242(ptr) Variable Function
-      434(i16v4):    433(ptr) Variable Function
-        437(u32):    296(ptr) Variable Function
-      438(u16v2):     58(ptr) Variable Function
-        442(u64):    441(ptr) Variable Function
-      445(u16v4):    444(ptr) Variable Function
-         457(bv):    456(ptr) Variable Function
-             344: 52(i16vec2) Load 343(i16v)
-             345: 52(i16vec2) ExtInst 1(GLSL.std.450) 5(SAbs) 344
-                              Store 343(i16v) 345
-             347: 14(int16_t) Load 346(i16)
-             348: 14(int16_t) ExtInst 1(GLSL.std.450) 7(SSign) 347
-                              Store 346(i16) 348
-             349: 52(i16vec2) Load 343(i16v)
-             350: 14(int16_t) Load 346(i16)
-             351: 52(i16vec2) CompositeConstruct 350 350
-             352: 52(i16vec2) ExtInst 1(GLSL.std.450) 39(SMin) 349 351
-                              Store 343(i16v) 352
-             353: 52(i16vec2) Load 343(i16v)
-             355: 52(i16vec2) ExtInst 1(GLSL.std.450) 39(SMin) 353 354
-                              Store 343(i16v) 355
-             357:193(i16vec3) Load 356(u16v)
-             359: 36(int16_t) Load 358(u16)
-             360:193(i16vec3) CompositeConstruct 359 359 359
-             361:193(i16vec3) ExtInst 1(GLSL.std.450) 38(UMin) 357 360
-                              Store 356(u16v) 361
-             362:193(i16vec3) Load 356(u16v)
-             364:193(i16vec3) ExtInst 1(GLSL.std.450) 38(UMin) 362 363
-                              Store 356(u16v) 364
-             365: 52(i16vec2) Load 343(i16v)
-             366: 14(int16_t) Load 346(i16)
-             367: 52(i16vec2) CompositeConstruct 366 366
-             368: 52(i16vec2) ExtInst 1(GLSL.std.450) 42(SMax) 365 367
-                              Store 343(i16v) 368
-             369: 52(i16vec2) Load 343(i16v)
-             370: 52(i16vec2) ExtInst 1(GLSL.std.450) 42(SMax) 369 354
-                              Store 343(i16v) 370
-             371:193(i16vec3) Load 356(u16v)
-             372: 36(int16_t) Load 358(u16)
-             373:193(i16vec3) CompositeConstruct 372 372 372
-             374:193(i16vec3) ExtInst 1(GLSL.std.450) 41(UMax) 371 373
-                              Store 356(u16v) 374
-             375:193(i16vec3) Load 356(u16v)
-             376:193(i16vec3) ExtInst 1(GLSL.std.450) 41(UMax) 375 363
-                              Store 356(u16v) 376
-             377: 52(i16vec2) Load 343(i16v)
-             378: 14(int16_t) Load 346(i16)
-             379: 14(int16_t) SNegate 378
-             380: 14(int16_t) Load 346(i16)
-             381: 52(i16vec2) CompositeConstruct 379 379
-             382: 52(i16vec2) CompositeConstruct 380 380
-             383: 52(i16vec2) ExtInst 1(GLSL.std.450) 45(SClamp) 377 381 382
-                              Store 343(i16v) 383
-             384: 52(i16vec2) Load 343(i16v)
-             385: 52(i16vec2) Load 343(i16v)
-             386: 52(i16vec2) SNegate 385
-             387: 52(i16vec2) Load 343(i16v)
-             388: 52(i16vec2) ExtInst 1(GLSL.std.450) 45(SClamp) 384 386 387
-                              Store 343(i16v) 388
-             389:193(i16vec3) Load 356(u16v)
-             390: 36(int16_t) Load 358(u16)
-             391: 36(int16_t) SNegate 390
-             392: 36(int16_t) Load 358(u16)
-             393:193(i16vec3) CompositeConstruct 391 391 391
-             394:193(i16vec3) CompositeConstruct 392 392 392
-             395:193(i16vec3) ExtInst 1(GLSL.std.450) 44(UClamp) 389 393 394
-                              Store 356(u16v) 395
-             396:193(i16vec3) Load 356(u16v)
-             397:193(i16vec3) Load 356(u16v)
-             398:193(i16vec3) SNegate 397
-             399:193(i16vec3) Load 356(u16v)
-             400:193(i16vec3) ExtInst 1(GLSL.std.450) 44(UClamp) 396 398 399
-                              Store 356(u16v) 400
-             401:     15(ptr) AccessChain 343(i16v) 282
-             402: 14(int16_t) Load 401
-             403:     15(ptr) AccessChain 343(i16v) 264
-             404: 14(int16_t) Load 403
-             406: 14(int16_t) Select 405 404 402
-                              Store 346(i16) 406
-             407: 14(int16_t) Load 346(i16)
-             408: 52(i16vec2) CompositeConstruct 407 407
-             409: 14(int16_t) Load 346(i16)
-             410: 14(int16_t) SNegate 409
-             411: 52(i16vec2) CompositeConstruct 410 410
-             414: 52(i16vec2) Select 413 411 408
-                              Store 343(i16v) 414
-             415:     37(ptr) AccessChain 356(u16v) 282
-             416: 36(int16_t) Load 415
-             417:     37(ptr) AccessChain 356(u16v) 264
-             418: 36(int16_t) Load 417
-             419: 36(int16_t) Select 405 418 416
-                              Store 358(u16) 419
-             420: 36(int16_t) Load 358(u16)
-             421:193(i16vec3) CompositeConstruct 420 420 420
-             422: 36(int16_t) Load 358(u16)
-             423: 36(int16_t) SNegate 422
-             424:193(i16vec3) CompositeConstruct 423 423 423
-             427:193(i16vec3) Select 426 424 421
-                              Store 356(u16v) 427
-             429: 52(i16vec2) Load 343(i16v)
-             430:     27(int) Bitcast 429
-                              Store 428(i32) 430
-             435:432(i16vec4) Load 434(i16v4)
-             436: 71(int64_t) Bitcast 435
-                              Store 431(i64) 436
-             439: 57(i16vec2) Load 438(u16v2)
-             440:     17(int) Bitcast 439
-                              Store 437(u32) 440
-             446:443(i16vec4) Load 445(u16v4)
-             447: 77(int64_t) Bitcast 446
-                              Store 442(u64) 447
-             448:     27(int) Load 428(i32)
-             449: 52(i16vec2) Bitcast 448
-                              Store 343(i16v) 449
-             450: 71(int64_t) Load 431(i64)
-             451:432(i16vec4) Bitcast 450
-                              Store 434(i16v4) 451
-             452:     17(int) Load 437(u32)
-             453: 57(i16vec2) Bitcast 452
-                              Store 438(u16v2) 453
-             454: 77(int64_t) Load 442(u64)
-             455:443(i16vec4) Bitcast 454
-                              Store 445(u16v4) 455
-             458:193(i16vec3) Load 356(u16v)
-             459: 36(int16_t) Load 358(u16)
-             460:193(i16vec3) CompositeConstruct 459 459 459
-             461:  425(bvec3) ULessThan 458 460
-                              Store 457(bv) 461
-             462: 52(i16vec2) Load 343(i16v)
-             463: 14(int16_t) Load 346(i16)
-             464: 52(i16vec2) CompositeConstruct 463 463
-             465:  174(bvec2) SLessThan 462 464
-             466:    280(ptr) AccessChain 457(bv) 282
-             467:   173(bool) CompositeExtract 465 0
-                              Store 466 467
-             468:    280(ptr) AccessChain 457(bv) 264
-             469:   173(bool) CompositeExtract 465 1
-                              Store 468 469
-             470:193(i16vec3) Load 356(u16v)
-             471: 36(int16_t) Load 358(u16)
-             472:193(i16vec3) CompositeConstruct 471 471 471
-             473:  425(bvec3) ULessThanEqual 470 472
-                              Store 457(bv) 473
-             474: 52(i16vec2) Load 343(i16v)
-             475: 14(int16_t) Load 346(i16)
-             476: 52(i16vec2) CompositeConstruct 475 475
-             477:  174(bvec2) SLessThanEqual 474 476
-             478:    280(ptr) AccessChain 457(bv) 282
-             479:   173(bool) CompositeExtract 477 0
-                              Store 478 479
-             480:    280(ptr) AccessChain 457(bv) 264
-             481:   173(bool) CompositeExtract 477 1
+       357(i16v):     53(ptr) Variable Function
+        360(i16):     15(ptr) Variable Function
+       370(u16v):    203(ptr) Variable Function
+        372(u16):     37(ptr) Variable Function
+        442(i32):    228(ptr) Variable Function
+        445(i64):    251(ptr) Variable Function
+      448(i16v4):    447(ptr) Variable Function
+        451(u32):    305(ptr) Variable Function
+      452(u16v2):     58(ptr) Variable Function
+        456(u64):    455(ptr) Variable Function
+      459(u16v4):    458(ptr) Variable Function
+         471(bv):    470(ptr) Variable Function
+             358: 52(i16vec2) Load 357(i16v)
+             359: 52(i16vec2) ExtInst 1(GLSL.std.450) 5(SAbs) 358
+                              Store 357(i16v) 359
+             361: 14(int16_t) Load 360(i16)
+             362: 14(int16_t) ExtInst 1(GLSL.std.450) 7(SSign) 361
+                              Store 360(i16) 362
+             363: 52(i16vec2) Load 357(i16v)
+             364: 14(int16_t) Load 360(i16)
+             365: 52(i16vec2) CompositeConstruct 364 364
+             366: 52(i16vec2) ExtInst 1(GLSL.std.450) 39(SMin) 363 365
+                              Store 357(i16v) 366
+             367: 52(i16vec2) Load 357(i16v)
+             369: 52(i16vec2) ExtInst 1(GLSL.std.450) 39(SMin) 367 368
+                              Store 357(i16v) 369
+             371:202(i16vec3) Load 370(u16v)
+             373: 36(int16_t) Load 372(u16)
+             374:202(i16vec3) CompositeConstruct 373 373 373
+             375:202(i16vec3) ExtInst 1(GLSL.std.450) 38(UMin) 371 374
+                              Store 370(u16v) 375
+             376:202(i16vec3) Load 370(u16v)
+             378:202(i16vec3) ExtInst 1(GLSL.std.450) 38(UMin) 376 377
+                              Store 370(u16v) 378
+             379: 52(i16vec2) Load 357(i16v)
+             380: 14(int16_t) Load 360(i16)
+             381: 52(i16vec2) CompositeConstruct 380 380
+             382: 52(i16vec2) ExtInst 1(GLSL.std.450) 42(SMax) 379 381
+                              Store 357(i16v) 382
+             383: 52(i16vec2) Load 357(i16v)
+             384: 52(i16vec2) ExtInst 1(GLSL.std.450) 42(SMax) 383 368
+                              Store 357(i16v) 384
+             385:202(i16vec3) Load 370(u16v)
+             386: 36(int16_t) Load 372(u16)
+             387:202(i16vec3) CompositeConstruct 386 386 386
+             388:202(i16vec3) ExtInst 1(GLSL.std.450) 41(UMax) 385 387
+                              Store 370(u16v) 388
+             389:202(i16vec3) Load 370(u16v)
+             390:202(i16vec3) ExtInst 1(GLSL.std.450) 41(UMax) 389 377
+                              Store 370(u16v) 390
+             391: 52(i16vec2) Load 357(i16v)
+             392: 14(int16_t) Load 360(i16)
+             393: 14(int16_t) SNegate 392
+             394: 14(int16_t) Load 360(i16)
+             395: 52(i16vec2) CompositeConstruct 393 393
+             396: 52(i16vec2) CompositeConstruct 394 394
+             397: 52(i16vec2) ExtInst 1(GLSL.std.450) 45(SClamp) 391 395 396
+                              Store 357(i16v) 397
+             398: 52(i16vec2) Load 357(i16v)
+             399: 52(i16vec2) Load 357(i16v)
+             400: 52(i16vec2) SNegate 399
+             401: 52(i16vec2) Load 357(i16v)
+             402: 52(i16vec2) ExtInst 1(GLSL.std.450) 45(SClamp) 398 400 401
+                              Store 357(i16v) 402
+             403:202(i16vec3) Load 370(u16v)
+             404: 36(int16_t) Load 372(u16)
+             405: 36(int16_t) SNegate 404
+             406: 36(int16_t) Load 372(u16)
+             407:202(i16vec3) CompositeConstruct 405 405 405
+             408:202(i16vec3) CompositeConstruct 406 406 406
+             409:202(i16vec3) ExtInst 1(GLSL.std.450) 44(UClamp) 403 407 408
+                              Store 370(u16v) 409
+             410:202(i16vec3) Load 370(u16v)
+             411:202(i16vec3) Load 370(u16v)
+             412:202(i16vec3) SNegate 411
+             413:202(i16vec3) Load 370(u16v)
+             414:202(i16vec3) ExtInst 1(GLSL.std.450) 44(UClamp) 410 412 413
+                              Store 370(u16v) 414
+             415:     15(ptr) AccessChain 357(i16v) 291
+             416: 14(int16_t) Load 415
+             417:     15(ptr) AccessChain 357(i16v) 273
+             418: 14(int16_t) Load 417
+             420: 14(int16_t) Select 419 418 416
+                              Store 360(i16) 420
+             421: 14(int16_t) Load 360(i16)
+             422: 52(i16vec2) CompositeConstruct 421 421
+             423: 14(int16_t) Load 360(i16)
+             424: 14(int16_t) SNegate 423
+             425: 52(i16vec2) CompositeConstruct 424 424
+             428: 52(i16vec2) Select 427 425 422
+                              Store 357(i16v) 428
+             429:     37(ptr) AccessChain 370(u16v) 291
+             430: 36(int16_t) Load 429
+             431:     37(ptr) AccessChain 370(u16v) 273
+             432: 36(int16_t) Load 431
+             433: 36(int16_t) Select 419 432 430
+                              Store 372(u16) 433
+             434: 36(int16_t) Load 372(u16)
+             435:202(i16vec3) CompositeConstruct 434 434 434
+             436: 36(int16_t) Load 372(u16)
+             437: 36(int16_t) SNegate 436
+             438:202(i16vec3) CompositeConstruct 437 437 437
+             441:202(i16vec3) Select 440 438 435
+                              Store 370(u16v) 441
+             443: 52(i16vec2) Load 357(i16v)
+             444:     27(int) Bitcast 443
+                              Store 442(i32) 444
+             449:446(i16vec4) Load 448(i16v4)
+             450: 71(int64_t) Bitcast 449
+                              Store 445(i64) 450
+             453: 57(i16vec2) Load 452(u16v2)
+             454:     17(int) Bitcast 453
+                              Store 451(u32) 454
+             460:457(i16vec4) Load 459(u16v4)
+             461: 77(int64_t) Bitcast 460
+                              Store 456(u64) 461
+             462:     27(int) Load 442(i32)
+             463: 52(i16vec2) Bitcast 462
+                              Store 357(i16v) 463
+             464: 71(int64_t) Load 445(i64)
+             465:446(i16vec4) Bitcast 464
+                              Store 448(i16v4) 465
+             466:     17(int) Load 451(u32)
+             467: 57(i16vec2) Bitcast 466
+                              Store 452(u16v2) 467
+             468: 77(int64_t) Load 456(u64)
+             469:457(i16vec4) Bitcast 468
+                              Store 459(u16v4) 469
+             472:202(i16vec3) Load 370(u16v)
+             473: 36(int16_t) Load 372(u16)
+             474:202(i16vec3) CompositeConstruct 473 473 473
+             475:  439(bvec3) ULessThan 472 474
+                              Store 471(bv) 475
+             476: 52(i16vec2) Load 357(i16v)
+             477: 14(int16_t) Load 360(i16)
+             478: 52(i16vec2) CompositeConstruct 477 477
+             479:  174(bvec2) SLessThan 476 478
+             480:    289(ptr) AccessChain 471(bv) 291
+             481:   173(bool) CompositeExtract 479 0
                               Store 480 481
-             482:193(i16vec3) Load 356(u16v)
-             483: 36(int16_t) Load 358(u16)
-             484:193(i16vec3) CompositeConstruct 483 483 483
-             485:  425(bvec3) UGreaterThan 482 484
-                              Store 457(bv) 485
-             486: 52(i16vec2) Load 343(i16v)
-             487: 14(int16_t) Load 346(i16)
-             488: 52(i16vec2) CompositeConstruct 487 487
-             489:  174(bvec2) SGreaterThan 486 488
-             490:    280(ptr) AccessChain 457(bv) 282
-             491:   173(bool) CompositeExtract 489 0
-                              Store 490 491
-             492:    280(ptr) AccessChain 457(bv) 264
-             493:   173(bool) CompositeExtract 489 1
+             482:    289(ptr) AccessChain 471(bv) 273
+             483:   173(bool) CompositeExtract 479 1
+                              Store 482 483
+             484:202(i16vec3) Load 370(u16v)
+             485: 36(int16_t) Load 372(u16)
+             486:202(i16vec3) CompositeConstruct 485 485 485
+             487:  439(bvec3) ULessThanEqual 484 486
+                              Store 471(bv) 487
+             488: 52(i16vec2) Load 357(i16v)
+             489: 14(int16_t) Load 360(i16)
+             490: 52(i16vec2) CompositeConstruct 489 489
+             491:  174(bvec2) SLessThanEqual 488 490
+             492:    289(ptr) AccessChain 471(bv) 291
+             493:   173(bool) CompositeExtract 491 0
                               Store 492 493
-             494:193(i16vec3) Load 356(u16v)
-             495: 36(int16_t) Load 358(u16)
-             496:193(i16vec3) CompositeConstruct 495 495 495
-             497:  425(bvec3) UGreaterThanEqual 494 496
-                              Store 457(bv) 497
-             498: 52(i16vec2) Load 343(i16v)
-             499: 14(int16_t) Load 346(i16)
-             500: 52(i16vec2) CompositeConstruct 499 499
-             501:  174(bvec2) SGreaterThanEqual 498 500
-             502:    280(ptr) AccessChain 457(bv) 282
-             503:   173(bool) CompositeExtract 501 0
-                              Store 502 503
-             504:    280(ptr) AccessChain 457(bv) 264
-             505:   173(bool) CompositeExtract 501 1
+             494:    289(ptr) AccessChain 471(bv) 273
+             495:   173(bool) CompositeExtract 491 1
+                              Store 494 495
+             496:202(i16vec3) Load 370(u16v)
+             497: 36(int16_t) Load 372(u16)
+             498:202(i16vec3) CompositeConstruct 497 497 497
+             499:  439(bvec3) UGreaterThan 496 498
+                              Store 471(bv) 499
+             500: 52(i16vec2) Load 357(i16v)
+             501: 14(int16_t) Load 360(i16)
+             502: 52(i16vec2) CompositeConstruct 501 501
+             503:  174(bvec2) SGreaterThan 500 502
+             504:    289(ptr) AccessChain 471(bv) 291
+             505:   173(bool) CompositeExtract 503 0
                               Store 504 505
-             506:193(i16vec3) Load 356(u16v)
-             507: 36(int16_t) Load 358(u16)
-             508:193(i16vec3) CompositeConstruct 507 507 507
-             509:  425(bvec3) IEqual 506 508
-                              Store 457(bv) 509
-             510: 52(i16vec2) Load 343(i16v)
-             511: 14(int16_t) Load 346(i16)
-             512: 52(i16vec2) CompositeConstruct 511 511
-             513:  174(bvec2) IEqual 510 512
-             514:    280(ptr) AccessChain 457(bv) 282
-             515:   173(bool) CompositeExtract 513 0
-                              Store 514 515
-             516:    280(ptr) AccessChain 457(bv) 264
-             517:   173(bool) CompositeExtract 513 1
+             506:    289(ptr) AccessChain 471(bv) 273
+             507:   173(bool) CompositeExtract 503 1
+                              Store 506 507
+             508:202(i16vec3) Load 370(u16v)
+             509: 36(int16_t) Load 372(u16)
+             510:202(i16vec3) CompositeConstruct 509 509 509
+             511:  439(bvec3) UGreaterThanEqual 508 510
+                              Store 471(bv) 511
+             512: 52(i16vec2) Load 357(i16v)
+             513: 14(int16_t) Load 360(i16)
+             514: 52(i16vec2) CompositeConstruct 513 513
+             515:  174(bvec2) SGreaterThanEqual 512 514
+             516:    289(ptr) AccessChain 471(bv) 291
+             517:   173(bool) CompositeExtract 515 0
                               Store 516 517
-             518:193(i16vec3) Load 356(u16v)
-             519: 36(int16_t) Load 358(u16)
-             520:193(i16vec3) CompositeConstruct 519 519 519
-             521:  425(bvec3) INotEqual 518 520
-                              Store 457(bv) 521
-             522: 52(i16vec2) Load 343(i16v)
-             523: 14(int16_t) Load 346(i16)
-             524: 52(i16vec2) CompositeConstruct 523 523
-             525:  174(bvec2) INotEqual 522 524
-             526:    280(ptr) AccessChain 457(bv) 282
-             527:   173(bool) CompositeExtract 525 0
-                              Store 526 527
-             528:    280(ptr) AccessChain 457(bv) 264
-             529:   173(bool) CompositeExtract 525 1
+             518:    289(ptr) AccessChain 471(bv) 273
+             519:   173(bool) CompositeExtract 515 1
+                              Store 518 519
+             520:202(i16vec3) Load 370(u16v)
+             521: 36(int16_t) Load 372(u16)
+             522:202(i16vec3) CompositeConstruct 521 521 521
+             523:  439(bvec3) IEqual 520 522
+                              Store 471(bv) 523
+             524: 52(i16vec2) Load 357(i16v)
+             525: 14(int16_t) Load 360(i16)
+             526: 52(i16vec2) CompositeConstruct 525 525
+             527:  174(bvec2) IEqual 524 526
+             528:    289(ptr) AccessChain 471(bv) 291
+             529:   173(bool) CompositeExtract 527 0
                               Store 528 529
+             530:    289(ptr) AccessChain 471(bv) 273
+             531:   173(bool) CompositeExtract 527 1
+                              Store 530 531
+             532:202(i16vec3) Load 370(u16v)
+             533: 36(int16_t) Load 372(u16)
+             534:202(i16vec3) CompositeConstruct 533 533 533
+             535:  439(bvec3) INotEqual 532 534
+                              Store 471(bv) 535
+             536: 52(i16vec2) Load 357(i16v)
+             537: 14(int16_t) Load 360(i16)
+             538: 52(i16vec2) CompositeConstruct 537 537
+             539:  174(bvec2) INotEqual 536 538
+             540:    289(ptr) AccessChain 471(bv) 291
+             541:   173(bool) CompositeExtract 539 0
+                              Store 540 541
+             542:    289(ptr) AccessChain 471(bv) 273
+             543:   173(bool) CompositeExtract 539 1
+                              Store 542 543
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.int8.frag.out b/Test/baseResults/spv.int8.frag.out
index a0da3e9..e9cd5f8 100644
--- a/Test/baseResults/spv.int8.frag.out
+++ b/Test/baseResults/spv.int8.frag.out
@@ -1,7 +1,7 @@
 spv.int8.frag
 // Module Version 10300
 // Generated by (magic number): 8000a
-// Id's are bound by 530
+// Id's are bound by 544
 
                               Capability Shader
                               Capability Float16
@@ -48,53 +48,55 @@
                               Name 117  "f64v"
                               Name 144  "u16v"
                               Name 174  "bv"
-                              Name 192  "u8v"
-                              Name 197  "i8"
-                              Name 217  "i"
-                              Name 224  "uv"
-                              Name 240  "i16"
-                              Name 276  "b"
-                              Name 338  "i8v"
-                              Name 341  "i8"
-                              Name 351  "u8v"
-                              Name 353  "u8"
-                              Name 423  "i16"
-                              Name 426  "i32"
-                              Name 429  "i8v4"
-                              Name 433  "u16"
-                              Name 434  "u8v2"
-                              Name 437  "u32"
-                              Name 440  "u8v4"
-                              Name 452  "bv"
-                              Name 525  "Block"
-                              MemberName 525(Block) 0  "i8"
-                              MemberName 525(Block) 1  "i8v2"
-                              MemberName 525(Block) 2  "i8v3"
-                              MemberName 525(Block) 3  "i8v4"
-                              MemberName 525(Block) 4  "u8"
-                              MemberName 525(Block) 5  "u8v2"
-                              MemberName 525(Block) 6  "u8v3"
-                              MemberName 525(Block) 7  "u8v4"
-                              Name 527  "block"
-                              Name 528  "si8"
-                              Name 529  "su8"
+                              Name 193  "arr"
+                              Name 201  "u8v"
+                              Name 206  "i8"
+                              Name 226  "i"
+                              Name 233  "uv"
+                              Name 249  "i16"
+                              Name 285  "b"
+                              Name 348  "f"
+                              Name 352  "i8v"
+                              Name 355  "i8"
+                              Name 365  "u8v"
+                              Name 367  "u8"
+                              Name 437  "i16"
+                              Name 440  "i32"
+                              Name 443  "i8v4"
+                              Name 447  "u16"
+                              Name 448  "u8v2"
+                              Name 451  "u32"
+                              Name 454  "u8v4"
+                              Name 466  "bv"
+                              Name 539  "Block"
+                              MemberName 539(Block) 0  "i8"
+                              MemberName 539(Block) 1  "i8v2"
+                              MemberName 539(Block) 2  "i8v3"
+                              MemberName 539(Block) 3  "i8v4"
+                              MemberName 539(Block) 4  "u8"
+                              MemberName 539(Block) 5  "u8v2"
+                              MemberName 539(Block) 6  "u8v3"
+                              MemberName 539(Block) 7  "u8v4"
+                              Name 541  "block"
+                              Name 542  "si8"
+                              Name 543  "su8"
                               MemberDecorate 24(Uniforms) 0 Offset 0
                               Decorate 24(Uniforms) Block
                               Decorate 26 DescriptorSet 0
                               Decorate 26 Binding 0
-                              MemberDecorate 525(Block) 0 Offset 0
-                              MemberDecorate 525(Block) 1 Offset 2
-                              MemberDecorate 525(Block) 2 Offset 4
-                              MemberDecorate 525(Block) 3 Offset 8
-                              MemberDecorate 525(Block) 4 Offset 12
-                              MemberDecorate 525(Block) 5 Offset 14
-                              MemberDecorate 525(Block) 6 Offset 16
-                              MemberDecorate 525(Block) 7 Offset 20
-                              Decorate 525(Block) Block
-                              Decorate 527(block) DescriptorSet 0
-                              Decorate 527(block) Binding 1
-                              Decorate 528(si8) SpecId 100
-                              Decorate 529(su8) SpecId 101
+                              MemberDecorate 539(Block) 0 Offset 0
+                              MemberDecorate 539(Block) 1 Offset 2
+                              MemberDecorate 539(Block) 2 Offset 4
+                              MemberDecorate 539(Block) 3 Offset 8
+                              MemberDecorate 539(Block) 4 Offset 12
+                              MemberDecorate 539(Block) 5 Offset 14
+                              MemberDecorate 539(Block) 6 Offset 16
+                              MemberDecorate 539(Block) 7 Offset 20
+                              Decorate 539(Block) Block
+                              Decorate 541(block) DescriptorSet 0
+                              Decorate 541(block) Binding 1
+                              Decorate 542(si8) SpecId 100
+                              Decorate 543(su8) SpecId 101
                2:             TypeVoid
                3:             TypeFunction 2
               14:             TypeInt 8 1
@@ -159,36 +161,45 @@
              182:  36(int8_t) Constant 1
              183:  49(i8vec2) ConstantComposite 181 181
              184:  49(i8vec2) ConstantComposite 182 182
-             190:             TypeVector 36(int8_t) 3
-             191:             TypePointer Function 190(i8vec3)
-             194:             TypeVector 14(int8_t) 3
-             216:             TypePointer Function 27(int)
-             222:             TypeVector 17(int) 3
-             223:             TypePointer Function 222(ivec3)
-             239:             TypePointer Function 57(int16_t)
-             261:     17(int) Constant 1
-             267:     17(int) Constant 2
-             275:             TypePointer Function 171(bool)
-             277:     17(int) Constant 0
-             291:             TypePointer Function 17(int)
-             349:  52(i8vec2) ConstantComposite 21 21
-             358: 190(i8vec3) ConstantComposite 181 181 181
-             400:   171(bool) ConstantTrue
-             407:   171(bool) ConstantFalse
-             408:  172(bvec2) ConstantComposite 407 407
-             420:             TypeVector 171(bool) 3
-             421:  420(bvec3) ConstantComposite 407 407 407
-             427:             TypeVector 14(int8_t) 4
-             428:             TypePointer Function 427(i8vec4)
-             432:             TypePointer Function 64(int16_t)
-             438:             TypeVector 36(int8_t) 4
-             439:             TypePointer Function 438(i8vec4)
-             451:             TypePointer Function 420(bvec3)
-      525(Block):             TypeStruct 14(int8_t) 52(i8vec2) 194(i8vec3) 427(i8vec4) 36(int8_t) 49(i8vec2) 190(i8vec3) 438(i8vec4)
-             526:             TypePointer Uniform 525(Block)
-      527(block):    526(ptr) Variable Uniform
-        528(si8):  14(int8_t) SpecConstant 4294967286
-        529(su8):  36(int8_t) SpecConstant 20
+             190:     17(int) Constant 4
+             191:             TypeArray 108(float) 190
+             192:             TypePointer Function 191
+             194:  108(float) Constant 1065353216
+             195:  108(float) Constant 1073741824
+             196:  108(float) Constant 1077936128
+             197:  108(float) Constant 1082130432
+             198:         191 ConstantComposite 194 195 196 197
+             199:             TypeVector 36(int8_t) 3
+             200:             TypePointer Function 199(i8vec3)
+             203:             TypeVector 14(int8_t) 3
+             225:             TypePointer Function 27(int)
+             231:             TypeVector 17(int) 3
+             232:             TypePointer Function 231(ivec3)
+             248:             TypePointer Function 57(int16_t)
+             270:     17(int) Constant 1
+             276:     17(int) Constant 2
+             284:             TypePointer Function 171(bool)
+             286:     17(int) Constant 0
+             300:             TypePointer Function 17(int)
+             347:             TypePointer Function 108(float)
+             363:  52(i8vec2) ConstantComposite 21 21
+             372: 199(i8vec3) ConstantComposite 181 181 181
+             414:   171(bool) ConstantTrue
+             421:   171(bool) ConstantFalse
+             422:  172(bvec2) ConstantComposite 421 421
+             434:             TypeVector 171(bool) 3
+             435:  434(bvec3) ConstantComposite 421 421 421
+             441:             TypeVector 14(int8_t) 4
+             442:             TypePointer Function 441(i8vec4)
+             446:             TypePointer Function 64(int16_t)
+             452:             TypeVector 36(int8_t) 4
+             453:             TypePointer Function 452(i8vec4)
+             465:             TypePointer Function 434(bvec3)
+      539(Block):             TypeStruct 14(int8_t) 52(i8vec2) 203(i8vec3) 441(i8vec4) 36(int8_t) 49(i8vec2) 199(i8vec3) 452(i8vec4)
+             540:             TypePointer Uniform 539(Block)
+      541(block):    540(ptr) Variable Uniform
+        542(si8):  14(int8_t) SpecConstant 4294967286
+        543(su8):  36(int8_t) SpecConstant 20
          4(main):           2 Function None 3
                5:             Label
                               Return
@@ -360,396 +371,403 @@
                               FunctionEnd
   10(operators():           2 Function None 3
               11:             Label
-        192(u8v):    191(ptr) Variable Function
-         197(i8):     15(ptr) Variable Function
-          217(i):    216(ptr) Variable Function
-         224(uv):    223(ptr) Variable Function
-        240(i16):    239(ptr) Variable Function
-          276(b):    275(ptr) Variable Function
-             193: 190(i8vec3) Load 192(u8v)
-             195: 194(i8vec3) CompositeConstruct 176 176 176
-             196: 190(i8vec3) IAdd 193 195
-                              Store 192(u8v) 196
-             198:  14(int8_t) Load 197(i8)
-             199:  14(int8_t) ISub 198 176
-                              Store 197(i8) 199
-             200:  14(int8_t) Load 197(i8)
-             201:  14(int8_t) IAdd 200 176
-                              Store 197(i8) 201
-             202: 190(i8vec3) Load 192(u8v)
-             203: 194(i8vec3) CompositeConstruct 176 176 176
-             204: 190(i8vec3) ISub 202 203
-                              Store 192(u8v) 204
-             205: 190(i8vec3) Load 192(u8v)
-             206: 190(i8vec3) Not 205
-                              Store 192(u8v) 206
-             207:  14(int8_t) Load 197(i8)
-                              Store 197(i8) 207
-             208: 190(i8vec3) Load 192(u8v)
-             209: 190(i8vec3) SNegate 208
-                              Store 192(u8v) 209
-             210:  14(int8_t) Load 197(i8)
-             211:  14(int8_t) Load 197(i8)
-             212:  14(int8_t) IAdd 211 210
-                              Store 197(i8) 212
-             213: 190(i8vec3) Load 192(u8v)
-             214: 190(i8vec3) Load 192(u8v)
-             215: 190(i8vec3) ISub 214 213
-                              Store 192(u8v) 215
-             218:  14(int8_t) Load 197(i8)
-             219:     27(int) SConvert 218
-             220:     27(int) Load 217(i)
-             221:     27(int) IMul 220 219
-                              Store 217(i) 221
-             225: 190(i8vec3) Load 192(u8v)
-             226:  222(ivec3) UConvert 225
-             227:  222(ivec3) Load 224(uv)
-             228:  222(ivec3) UDiv 227 226
-                              Store 224(uv) 228
-             229:  14(int8_t) Load 197(i8)
-             230:     27(int) SConvert 229
-             231:     17(int) Bitcast 230
-             232:  222(ivec3) Load 224(uv)
-             233:  222(ivec3) CompositeConstruct 231 231 231
-             234:  222(ivec3) UMod 232 233
-                              Store 224(uv) 234
-             235: 190(i8vec3) Load 192(u8v)
-             236:  222(ivec3) UConvert 235
-             237:  222(ivec3) Load 224(uv)
-             238:  222(ivec3) IAdd 236 237
-                              Store 224(uv) 238
-             241:  14(int8_t) Load 197(i8)
-             242: 57(int16_t) SConvert 241
-             243: 57(int16_t) Load 240(i16)
-             244: 57(int16_t) ISub 242 243
-                              Store 240(i16) 244
-             245: 190(i8vec3) Load 192(u8v)
-             246:  222(ivec3) UConvert 245
-             247:  222(ivec3) Load 224(uv)
-             248:  222(ivec3) IMul 246 247
-                              Store 224(uv) 248
-             249:  14(int8_t) Load 197(i8)
-             250: 57(int16_t) SConvert 249
-             251: 57(int16_t) Load 240(i16)
-             252: 57(int16_t) IMul 250 251
-                              Store 240(i16) 252
-             253:  14(int8_t) Load 197(i8)
-             254:     27(int) SConvert 253
-             255:     27(int) Load 217(i)
-             256:     27(int) SMod 254 255
-                              Store 217(i) 256
-             257:  14(int8_t) Load 197(i8)
-             258: 190(i8vec3) Load 192(u8v)
-             259: 194(i8vec3) CompositeConstruct 257 257 257
-             260: 190(i8vec3) ShiftLeftLogical 258 259
-                              Store 192(u8v) 260
-             262:     37(ptr) AccessChain 192(u8v) 261
-             263:  36(int8_t) Load 262
-             264:  14(int8_t) Load 197(i8)
-             265:  14(int8_t) ShiftRightArithmetic 264 263
-                              Store 197(i8) 265
-             266:  14(int8_t) Load 197(i8)
-             268:     37(ptr) AccessChain 192(u8v) 267
-             269:  36(int8_t) Load 268
-             270:  14(int8_t) ShiftLeftLogical 266 269
-                              Store 197(i8) 270
-             271: 190(i8vec3) Load 192(u8v)
-             272:  14(int8_t) Load 197(i8)
-             273: 194(i8vec3) CompositeConstruct 272 272 272
-             274: 190(i8vec3) ShiftLeftLogical 271 273
-                              Store 192(u8v) 274
-             278:     37(ptr) AccessChain 192(u8v) 277
-             279:  36(int8_t) Load 278
-             280:  14(int8_t) Load 197(i8)
-             281:  36(int8_t) Bitcast 280
-             282:   171(bool) INotEqual 279 281
-                              Store 276(b) 282
-             283:  14(int8_t) Load 197(i8)
-             284:  36(int8_t) Bitcast 283
-             285:     37(ptr) AccessChain 192(u8v) 277
-             286:  36(int8_t) Load 285
-             287:   171(bool) IEqual 284 286
-                              Store 276(b) 287
-             288:     37(ptr) AccessChain 192(u8v) 277
-             289:  36(int8_t) Load 288
-             290:     17(int) UConvert 289
-             292:    291(ptr) AccessChain 224(uv) 261
-             293:     17(int) Load 292
-             294:   171(bool) UGreaterThan 290 293
-                              Store 276(b) 294
-             295:  14(int8_t) Load 197(i8)
-             296:     27(int) SConvert 295
-             297:     27(int) Load 217(i)
-             298:   171(bool) SLessThan 296 297
-                              Store 276(b) 298
-             299:     37(ptr) AccessChain 192(u8v) 261
-             300:  36(int8_t) Load 299
-             301:     17(int) UConvert 300
-             302:    291(ptr) AccessChain 224(uv) 277
-             303:     17(int) Load 302
-             304:   171(bool) UGreaterThanEqual 301 303
-                              Store 276(b) 304
-             305:  14(int8_t) Load 197(i8)
-             306:     27(int) SConvert 305
-             307:     27(int) Load 217(i)
-             308:   171(bool) SLessThanEqual 306 307
-                              Store 276(b) 308
-             309:  14(int8_t) Load 197(i8)
-             310:     27(int) SConvert 309
-             311:     17(int) Bitcast 310
-             312:  222(ivec3) Load 224(uv)
-             313:  222(ivec3) CompositeConstruct 311 311 311
-             314:  222(ivec3) BitwiseOr 312 313
-                              Store 224(uv) 314
-             315:  14(int8_t) Load 197(i8)
-             316:     27(int) SConvert 315
-             317:     27(int) Load 217(i)
-             318:     27(int) BitwiseOr 316 317
-                              Store 217(i) 318
-             319:  14(int8_t) Load 197(i8)
-             320: 57(int16_t) SConvert 319
-             321: 57(int16_t) Load 240(i16)
-             322: 57(int16_t) BitwiseAnd 321 320
-                              Store 240(i16) 322
-             323: 190(i8vec3) Load 192(u8v)
-             324:  222(ivec3) UConvert 323
-             325:  222(ivec3) Load 224(uv)
-             326:  222(ivec3) BitwiseAnd 324 325
-                              Store 224(uv) 326
-             327:  14(int8_t) Load 197(i8)
-             328:     27(int) SConvert 327
-             329:     17(int) Bitcast 328
-             330:  222(ivec3) Load 224(uv)
-             331:  222(ivec3) CompositeConstruct 329 329 329
-             332:  222(ivec3) BitwiseXor 330 331
-                              Store 224(uv) 332
-             333: 190(i8vec3) Load 192(u8v)
-             334:  14(int8_t) Load 197(i8)
-             335:  36(int8_t) Bitcast 334
-             336: 190(i8vec3) CompositeConstruct 335 335 335
-             337: 190(i8vec3) BitwiseXor 333 336
-                              Store 192(u8v) 337
+        193(arr):    192(ptr) Variable Function
+        201(u8v):    200(ptr) Variable Function
+         206(i8):     15(ptr) Variable Function
+          226(i):    225(ptr) Variable Function
+         233(uv):    232(ptr) Variable Function
+        249(i16):    248(ptr) Variable Function
+          285(b):    284(ptr) Variable Function
+          348(f):    347(ptr) Variable Function
+                              Store 193(arr) 198
+             202: 199(i8vec3) Load 201(u8v)
+             204: 203(i8vec3) CompositeConstruct 176 176 176
+             205: 199(i8vec3) IAdd 202 204
+                              Store 201(u8v) 205
+             207:  14(int8_t) Load 206(i8)
+             208:  14(int8_t) ISub 207 176
+                              Store 206(i8) 208
+             209:  14(int8_t) Load 206(i8)
+             210:  14(int8_t) IAdd 209 176
+                              Store 206(i8) 210
+             211: 199(i8vec3) Load 201(u8v)
+             212: 203(i8vec3) CompositeConstruct 176 176 176
+             213: 199(i8vec3) ISub 211 212
+                              Store 201(u8v) 213
+             214: 199(i8vec3) Load 201(u8v)
+             215: 199(i8vec3) Not 214
+                              Store 201(u8v) 215
+             216:  14(int8_t) Load 206(i8)
+                              Store 206(i8) 216
+             217: 199(i8vec3) Load 201(u8v)
+             218: 199(i8vec3) SNegate 217
+                              Store 201(u8v) 218
+             219:  14(int8_t) Load 206(i8)
+             220:  14(int8_t) Load 206(i8)
+             221:  14(int8_t) IAdd 220 219
+                              Store 206(i8) 221
+             222: 199(i8vec3) Load 201(u8v)
+             223: 199(i8vec3) Load 201(u8v)
+             224: 199(i8vec3) ISub 223 222
+                              Store 201(u8v) 224
+             227:  14(int8_t) Load 206(i8)
+             228:     27(int) SConvert 227
+             229:     27(int) Load 226(i)
+             230:     27(int) IMul 229 228
+                              Store 226(i) 230
+             234: 199(i8vec3) Load 201(u8v)
+             235:  231(ivec3) UConvert 234
+             236:  231(ivec3) Load 233(uv)
+             237:  231(ivec3) UDiv 236 235
+                              Store 233(uv) 237
+             238:  14(int8_t) Load 206(i8)
+             239:     27(int) SConvert 238
+             240:     17(int) Bitcast 239
+             241:  231(ivec3) Load 233(uv)
+             242:  231(ivec3) CompositeConstruct 240 240 240
+             243:  231(ivec3) UMod 241 242
+                              Store 233(uv) 243
+             244: 199(i8vec3) Load 201(u8v)
+             245:  231(ivec3) UConvert 244
+             246:  231(ivec3) Load 233(uv)
+             247:  231(ivec3) IAdd 245 246
+                              Store 233(uv) 247
+             250:  14(int8_t) Load 206(i8)
+             251: 57(int16_t) SConvert 250
+             252: 57(int16_t) Load 249(i16)
+             253: 57(int16_t) ISub 251 252
+                              Store 249(i16) 253
+             254: 199(i8vec3) Load 201(u8v)
+             255:  231(ivec3) UConvert 254
+             256:  231(ivec3) Load 233(uv)
+             257:  231(ivec3) IMul 255 256
+                              Store 233(uv) 257
+             258:  14(int8_t) Load 206(i8)
+             259: 57(int16_t) SConvert 258
+             260: 57(int16_t) Load 249(i16)
+             261: 57(int16_t) IMul 259 260
+                              Store 249(i16) 261
+             262:  14(int8_t) Load 206(i8)
+             263:     27(int) SConvert 262
+             264:     27(int) Load 226(i)
+             265:     27(int) SMod 263 264
+                              Store 226(i) 265
+             266:  14(int8_t) Load 206(i8)
+             267: 199(i8vec3) Load 201(u8v)
+             268: 203(i8vec3) CompositeConstruct 266 266 266
+             269: 199(i8vec3) ShiftLeftLogical 267 268
+                              Store 201(u8v) 269
+             271:     37(ptr) AccessChain 201(u8v) 270
+             272:  36(int8_t) Load 271
+             273:  14(int8_t) Load 206(i8)
+             274:  14(int8_t) ShiftRightArithmetic 273 272
+                              Store 206(i8) 274
+             275:  14(int8_t) Load 206(i8)
+             277:     37(ptr) AccessChain 201(u8v) 276
+             278:  36(int8_t) Load 277
+             279:  14(int8_t) ShiftLeftLogical 275 278
+                              Store 206(i8) 279
+             280: 199(i8vec3) Load 201(u8v)
+             281:  14(int8_t) Load 206(i8)
+             282: 203(i8vec3) CompositeConstruct 281 281 281
+             283: 199(i8vec3) ShiftLeftLogical 280 282
+                              Store 201(u8v) 283
+             287:     37(ptr) AccessChain 201(u8v) 286
+             288:  36(int8_t) Load 287
+             289:  14(int8_t) Load 206(i8)
+             290:  36(int8_t) Bitcast 289
+             291:   171(bool) INotEqual 288 290
+                              Store 285(b) 291
+             292:  14(int8_t) Load 206(i8)
+             293:  36(int8_t) Bitcast 292
+             294:     37(ptr) AccessChain 201(u8v) 286
+             295:  36(int8_t) Load 294
+             296:   171(bool) IEqual 293 295
+                              Store 285(b) 296
+             297:     37(ptr) AccessChain 201(u8v) 286
+             298:  36(int8_t) Load 297
+             299:     17(int) UConvert 298
+             301:    300(ptr) AccessChain 233(uv) 270
+             302:     17(int) Load 301
+             303:   171(bool) UGreaterThan 299 302
+                              Store 285(b) 303
+             304:  14(int8_t) Load 206(i8)
+             305:     27(int) SConvert 304
+             306:     27(int) Load 226(i)
+             307:   171(bool) SLessThan 305 306
+                              Store 285(b) 307
+             308:     37(ptr) AccessChain 201(u8v) 270
+             309:  36(int8_t) Load 308
+             310:     17(int) UConvert 309
+             311:    300(ptr) AccessChain 233(uv) 286
+             312:     17(int) Load 311
+             313:   171(bool) UGreaterThanEqual 310 312
+                              Store 285(b) 313
+             314:  14(int8_t) Load 206(i8)
+             315:     27(int) SConvert 314
+             316:     27(int) Load 226(i)
+             317:   171(bool) SLessThanEqual 315 316
+                              Store 285(b) 317
+             318:  14(int8_t) Load 206(i8)
+             319:     27(int) SConvert 318
+             320:     17(int) Bitcast 319
+             321:  231(ivec3) Load 233(uv)
+             322:  231(ivec3) CompositeConstruct 320 320 320
+             323:  231(ivec3) BitwiseOr 321 322
+                              Store 233(uv) 323
+             324:  14(int8_t) Load 206(i8)
+             325:     27(int) SConvert 324
+             326:     27(int) Load 226(i)
+             327:     27(int) BitwiseOr 325 326
+                              Store 226(i) 327
+             328:  14(int8_t) Load 206(i8)
+             329: 57(int16_t) SConvert 328
+             330: 57(int16_t) Load 249(i16)
+             331: 57(int16_t) BitwiseAnd 330 329
+                              Store 249(i16) 331
+             332: 199(i8vec3) Load 201(u8v)
+             333:  231(ivec3) UConvert 332
+             334:  231(ivec3) Load 233(uv)
+             335:  231(ivec3) BitwiseAnd 333 334
+                              Store 233(uv) 335
+             336:  14(int8_t) Load 206(i8)
+             337:     27(int) SConvert 336
+             338:     17(int) Bitcast 337
+             339:  231(ivec3) Load 233(uv)
+             340:  231(ivec3) CompositeConstruct 338 338 338
+             341:  231(ivec3) BitwiseXor 339 340
+                              Store 233(uv) 341
+             342: 199(i8vec3) Load 201(u8v)
+             343:  14(int8_t) Load 206(i8)
+             344:  36(int8_t) Bitcast 343
+             345: 199(i8vec3) CompositeConstruct 344 344 344
+             346: 199(i8vec3) BitwiseXor 342 345
+                              Store 201(u8v) 346
+             349:  14(int8_t) Load 206(i8)
+             350:    347(ptr) AccessChain 193(arr) 349
+             351:  108(float) Load 350
+                              Store 348(f) 351
                               Return
                               FunctionEnd
 12(builtinFuncs():           2 Function None 3
               13:             Label
-        338(i8v):     53(ptr) Variable Function
-         341(i8):     15(ptr) Variable Function
-        351(u8v):    191(ptr) Variable Function
-         353(u8):     37(ptr) Variable Function
-        423(i16):    239(ptr) Variable Function
-        426(i32):    216(ptr) Variable Function
-       429(i8v4):    428(ptr) Variable Function
-        433(u16):    432(ptr) Variable Function
-       434(u8v2):     50(ptr) Variable Function
-        437(u32):    291(ptr) Variable Function
-       440(u8v4):    439(ptr) Variable Function
-         452(bv):    451(ptr) Variable Function
-             339:  52(i8vec2) Load 338(i8v)
-             340:  52(i8vec2) ExtInst 1(GLSL.std.450) 5(SAbs) 339
-                              Store 338(i8v) 340
-             342:  14(int8_t) Load 341(i8)
-             343:  14(int8_t) ExtInst 1(GLSL.std.450) 7(SSign) 342
-                              Store 341(i8) 343
-             344:  52(i8vec2) Load 338(i8v)
-             345:  14(int8_t) Load 341(i8)
-             346:  52(i8vec2) CompositeConstruct 345 345
-             347:  52(i8vec2) ExtInst 1(GLSL.std.450) 39(SMin) 344 346
-                              Store 338(i8v) 347
-             348:  52(i8vec2) Load 338(i8v)
-             350:  52(i8vec2) ExtInst 1(GLSL.std.450) 39(SMin) 348 349
-                              Store 338(i8v) 350
-             352: 190(i8vec3) Load 351(u8v)
-             354:  36(int8_t) Load 353(u8)
-             355: 190(i8vec3) CompositeConstruct 354 354 354
-             356: 190(i8vec3) ExtInst 1(GLSL.std.450) 38(UMin) 352 355
-                              Store 351(u8v) 356
-             357: 190(i8vec3) Load 351(u8v)
-             359: 190(i8vec3) ExtInst 1(GLSL.std.450) 38(UMin) 357 358
-                              Store 351(u8v) 359
-             360:  52(i8vec2) Load 338(i8v)
-             361:  14(int8_t) Load 341(i8)
-             362:  52(i8vec2) CompositeConstruct 361 361
-             363:  52(i8vec2) ExtInst 1(GLSL.std.450) 42(SMax) 360 362
-                              Store 338(i8v) 363
-             364:  52(i8vec2) Load 338(i8v)
-             365:  52(i8vec2) ExtInst 1(GLSL.std.450) 42(SMax) 364 349
-                              Store 338(i8v) 365
-             366: 190(i8vec3) Load 351(u8v)
-             367:  36(int8_t) Load 353(u8)
-             368: 190(i8vec3) CompositeConstruct 367 367 367
-             369: 190(i8vec3) ExtInst 1(GLSL.std.450) 41(UMax) 366 368
-                              Store 351(u8v) 369
-             370: 190(i8vec3) Load 351(u8v)
-             371: 190(i8vec3) ExtInst 1(GLSL.std.450) 41(UMax) 370 358
-                              Store 351(u8v) 371
-             372:  52(i8vec2) Load 338(i8v)
-             373:  14(int8_t) Load 341(i8)
-             374:  14(int8_t) SNegate 373
-             375:  14(int8_t) Load 341(i8)
-             376:  52(i8vec2) CompositeConstruct 374 374
-             377:  52(i8vec2) CompositeConstruct 375 375
-             378:  52(i8vec2) ExtInst 1(GLSL.std.450) 45(SClamp) 372 376 377
-                              Store 338(i8v) 378
-             379:  52(i8vec2) Load 338(i8v)
-             380:  52(i8vec2) Load 338(i8v)
-             381:  52(i8vec2) SNegate 380
-             382:  52(i8vec2) Load 338(i8v)
-             383:  52(i8vec2) ExtInst 1(GLSL.std.450) 45(SClamp) 379 381 382
-                              Store 338(i8v) 383
-             384: 190(i8vec3) Load 351(u8v)
-             385:  36(int8_t) Load 353(u8)
-             386:  36(int8_t) SNegate 385
-             387:  36(int8_t) Load 353(u8)
-             388: 190(i8vec3) CompositeConstruct 386 386 386
-             389: 190(i8vec3) CompositeConstruct 387 387 387
-             390: 190(i8vec3) ExtInst 1(GLSL.std.450) 44(UClamp) 384 388 389
-                              Store 351(u8v) 390
-             391: 190(i8vec3) Load 351(u8v)
-             392: 190(i8vec3) Load 351(u8v)
-             393: 190(i8vec3) SNegate 392
-             394: 190(i8vec3) Load 351(u8v)
-             395: 190(i8vec3) ExtInst 1(GLSL.std.450) 44(UClamp) 391 393 394
-                              Store 351(u8v) 395
-             396:     15(ptr) AccessChain 338(i8v) 277
-             397:  14(int8_t) Load 396
-             398:     15(ptr) AccessChain 338(i8v) 261
-             399:  14(int8_t) Load 398
-             401:  14(int8_t) Select 400 399 397
-                              Store 341(i8) 401
-             402:  14(int8_t) Load 341(i8)
-             403:  52(i8vec2) CompositeConstruct 402 402
-             404:  14(int8_t) Load 341(i8)
-             405:  14(int8_t) SNegate 404
-             406:  52(i8vec2) CompositeConstruct 405 405
-             409:  52(i8vec2) Select 408 406 403
-                              Store 338(i8v) 409
-             410:     37(ptr) AccessChain 351(u8v) 277
-             411:  36(int8_t) Load 410
-             412:     37(ptr) AccessChain 351(u8v) 261
-             413:  36(int8_t) Load 412
-             414:  36(int8_t) Select 400 413 411
-                              Store 353(u8) 414
-             415:  36(int8_t) Load 353(u8)
-             416: 190(i8vec3) CompositeConstruct 415 415 415
-             417:  36(int8_t) Load 353(u8)
-             418:  36(int8_t) SNegate 417
-             419: 190(i8vec3) CompositeConstruct 418 418 418
-             422: 190(i8vec3) Select 421 419 416
-                              Store 351(u8v) 422
-             424:  52(i8vec2) Load 338(i8v)
-             425: 57(int16_t) Bitcast 424
-                              Store 423(i16) 425
-             430: 427(i8vec4) Load 429(i8v4)
-             431:     27(int) Bitcast 430
-                              Store 426(i32) 431
-             435:  49(i8vec2) Load 434(u8v2)
-             436: 64(int16_t) Bitcast 435
-                              Store 433(u16) 436
-             441: 438(i8vec4) Load 440(u8v4)
-             442:     17(int) Bitcast 441
-                              Store 437(u32) 442
-             443: 57(int16_t) Load 423(i16)
-             444:  52(i8vec2) Bitcast 443
-                              Store 338(i8v) 444
-             445:     27(int) Load 426(i32)
-             446: 427(i8vec4) Bitcast 445
-                              Store 429(i8v4) 446
-             447: 64(int16_t) Load 433(u16)
-             448:  49(i8vec2) Bitcast 447
-                              Store 434(u8v2) 448
-             449:     17(int) Load 437(u32)
-             450: 438(i8vec4) Bitcast 449
-                              Store 440(u8v4) 450
-             453: 190(i8vec3) Load 351(u8v)
-             454:  36(int8_t) Load 353(u8)
-             455: 190(i8vec3) CompositeConstruct 454 454 454
-             456:  420(bvec3) ULessThan 453 455
-                              Store 452(bv) 456
-             457:  52(i8vec2) Load 338(i8v)
-             458:  14(int8_t) Load 341(i8)
-             459:  52(i8vec2) CompositeConstruct 458 458
-             460:  172(bvec2) SLessThan 457 459
-             461:    275(ptr) AccessChain 452(bv) 277
-             462:   171(bool) CompositeExtract 460 0
-                              Store 461 462
-             463:    275(ptr) AccessChain 452(bv) 261
-             464:   171(bool) CompositeExtract 460 1
-                              Store 463 464
-             465: 190(i8vec3) Load 351(u8v)
-             466:  36(int8_t) Load 353(u8)
-             467: 190(i8vec3) CompositeConstruct 466 466 466
-             468:  420(bvec3) ULessThanEqual 465 467
-                              Store 452(bv) 468
-             469:  52(i8vec2) Load 338(i8v)
-             470:  14(int8_t) Load 341(i8)
-             471:  52(i8vec2) CompositeConstruct 470 470
-             472:  172(bvec2) SLessThanEqual 469 471
-             473:    275(ptr) AccessChain 452(bv) 277
-             474:   171(bool) CompositeExtract 472 0
-                              Store 473 474
-             475:    275(ptr) AccessChain 452(bv) 261
-             476:   171(bool) CompositeExtract 472 1
+        352(i8v):     53(ptr) Variable Function
+         355(i8):     15(ptr) Variable Function
+        365(u8v):    200(ptr) Variable Function
+         367(u8):     37(ptr) Variable Function
+        437(i16):    248(ptr) Variable Function
+        440(i32):    225(ptr) Variable Function
+       443(i8v4):    442(ptr) Variable Function
+        447(u16):    446(ptr) Variable Function
+       448(u8v2):     50(ptr) Variable Function
+        451(u32):    300(ptr) Variable Function
+       454(u8v4):    453(ptr) Variable Function
+         466(bv):    465(ptr) Variable Function
+             353:  52(i8vec2) Load 352(i8v)
+             354:  52(i8vec2) ExtInst 1(GLSL.std.450) 5(SAbs) 353
+                              Store 352(i8v) 354
+             356:  14(int8_t) Load 355(i8)
+             357:  14(int8_t) ExtInst 1(GLSL.std.450) 7(SSign) 356
+                              Store 355(i8) 357
+             358:  52(i8vec2) Load 352(i8v)
+             359:  14(int8_t) Load 355(i8)
+             360:  52(i8vec2) CompositeConstruct 359 359
+             361:  52(i8vec2) ExtInst 1(GLSL.std.450) 39(SMin) 358 360
+                              Store 352(i8v) 361
+             362:  52(i8vec2) Load 352(i8v)
+             364:  52(i8vec2) ExtInst 1(GLSL.std.450) 39(SMin) 362 363
+                              Store 352(i8v) 364
+             366: 199(i8vec3) Load 365(u8v)
+             368:  36(int8_t) Load 367(u8)
+             369: 199(i8vec3) CompositeConstruct 368 368 368
+             370: 199(i8vec3) ExtInst 1(GLSL.std.450) 38(UMin) 366 369
+                              Store 365(u8v) 370
+             371: 199(i8vec3) Load 365(u8v)
+             373: 199(i8vec3) ExtInst 1(GLSL.std.450) 38(UMin) 371 372
+                              Store 365(u8v) 373
+             374:  52(i8vec2) Load 352(i8v)
+             375:  14(int8_t) Load 355(i8)
+             376:  52(i8vec2) CompositeConstruct 375 375
+             377:  52(i8vec2) ExtInst 1(GLSL.std.450) 42(SMax) 374 376
+                              Store 352(i8v) 377
+             378:  52(i8vec2) Load 352(i8v)
+             379:  52(i8vec2) ExtInst 1(GLSL.std.450) 42(SMax) 378 363
+                              Store 352(i8v) 379
+             380: 199(i8vec3) Load 365(u8v)
+             381:  36(int8_t) Load 367(u8)
+             382: 199(i8vec3) CompositeConstruct 381 381 381
+             383: 199(i8vec3) ExtInst 1(GLSL.std.450) 41(UMax) 380 382
+                              Store 365(u8v) 383
+             384: 199(i8vec3) Load 365(u8v)
+             385: 199(i8vec3) ExtInst 1(GLSL.std.450) 41(UMax) 384 372
+                              Store 365(u8v) 385
+             386:  52(i8vec2) Load 352(i8v)
+             387:  14(int8_t) Load 355(i8)
+             388:  14(int8_t) SNegate 387
+             389:  14(int8_t) Load 355(i8)
+             390:  52(i8vec2) CompositeConstruct 388 388
+             391:  52(i8vec2) CompositeConstruct 389 389
+             392:  52(i8vec2) ExtInst 1(GLSL.std.450) 45(SClamp) 386 390 391
+                              Store 352(i8v) 392
+             393:  52(i8vec2) Load 352(i8v)
+             394:  52(i8vec2) Load 352(i8v)
+             395:  52(i8vec2) SNegate 394
+             396:  52(i8vec2) Load 352(i8v)
+             397:  52(i8vec2) ExtInst 1(GLSL.std.450) 45(SClamp) 393 395 396
+                              Store 352(i8v) 397
+             398: 199(i8vec3) Load 365(u8v)
+             399:  36(int8_t) Load 367(u8)
+             400:  36(int8_t) SNegate 399
+             401:  36(int8_t) Load 367(u8)
+             402: 199(i8vec3) CompositeConstruct 400 400 400
+             403: 199(i8vec3) CompositeConstruct 401 401 401
+             404: 199(i8vec3) ExtInst 1(GLSL.std.450) 44(UClamp) 398 402 403
+                              Store 365(u8v) 404
+             405: 199(i8vec3) Load 365(u8v)
+             406: 199(i8vec3) Load 365(u8v)
+             407: 199(i8vec3) SNegate 406
+             408: 199(i8vec3) Load 365(u8v)
+             409: 199(i8vec3) ExtInst 1(GLSL.std.450) 44(UClamp) 405 407 408
+                              Store 365(u8v) 409
+             410:     15(ptr) AccessChain 352(i8v) 286
+             411:  14(int8_t) Load 410
+             412:     15(ptr) AccessChain 352(i8v) 270
+             413:  14(int8_t) Load 412
+             415:  14(int8_t) Select 414 413 411
+                              Store 355(i8) 415
+             416:  14(int8_t) Load 355(i8)
+             417:  52(i8vec2) CompositeConstruct 416 416
+             418:  14(int8_t) Load 355(i8)
+             419:  14(int8_t) SNegate 418
+             420:  52(i8vec2) CompositeConstruct 419 419
+             423:  52(i8vec2) Select 422 420 417
+                              Store 352(i8v) 423
+             424:     37(ptr) AccessChain 365(u8v) 286
+             425:  36(int8_t) Load 424
+             426:     37(ptr) AccessChain 365(u8v) 270
+             427:  36(int8_t) Load 426
+             428:  36(int8_t) Select 414 427 425
+                              Store 367(u8) 428
+             429:  36(int8_t) Load 367(u8)
+             430: 199(i8vec3) CompositeConstruct 429 429 429
+             431:  36(int8_t) Load 367(u8)
+             432:  36(int8_t) SNegate 431
+             433: 199(i8vec3) CompositeConstruct 432 432 432
+             436: 199(i8vec3) Select 435 433 430
+                              Store 365(u8v) 436
+             438:  52(i8vec2) Load 352(i8v)
+             439: 57(int16_t) Bitcast 438
+                              Store 437(i16) 439
+             444: 441(i8vec4) Load 443(i8v4)
+             445:     27(int) Bitcast 444
+                              Store 440(i32) 445
+             449:  49(i8vec2) Load 448(u8v2)
+             450: 64(int16_t) Bitcast 449
+                              Store 447(u16) 450
+             455: 452(i8vec4) Load 454(u8v4)
+             456:     17(int) Bitcast 455
+                              Store 451(u32) 456
+             457: 57(int16_t) Load 437(i16)
+             458:  52(i8vec2) Bitcast 457
+                              Store 352(i8v) 458
+             459:     27(int) Load 440(i32)
+             460: 441(i8vec4) Bitcast 459
+                              Store 443(i8v4) 460
+             461: 64(int16_t) Load 447(u16)
+             462:  49(i8vec2) Bitcast 461
+                              Store 448(u8v2) 462
+             463:     17(int) Load 451(u32)
+             464: 452(i8vec4) Bitcast 463
+                              Store 454(u8v4) 464
+             467: 199(i8vec3) Load 365(u8v)
+             468:  36(int8_t) Load 367(u8)
+             469: 199(i8vec3) CompositeConstruct 468 468 468
+             470:  434(bvec3) ULessThan 467 469
+                              Store 466(bv) 470
+             471:  52(i8vec2) Load 352(i8v)
+             472:  14(int8_t) Load 355(i8)
+             473:  52(i8vec2) CompositeConstruct 472 472
+             474:  172(bvec2) SLessThan 471 473
+             475:    284(ptr) AccessChain 466(bv) 286
+             476:   171(bool) CompositeExtract 474 0
                               Store 475 476
-             477: 190(i8vec3) Load 351(u8v)
-             478:  36(int8_t) Load 353(u8)
-             479: 190(i8vec3) CompositeConstruct 478 478 478
-             480:  420(bvec3) UGreaterThan 477 479
-                              Store 452(bv) 480
-             481:  52(i8vec2) Load 338(i8v)
-             482:  14(int8_t) Load 341(i8)
-             483:  52(i8vec2) CompositeConstruct 482 482
-             484:  172(bvec2) SGreaterThan 481 483
-             485:    275(ptr) AccessChain 452(bv) 277
-             486:   171(bool) CompositeExtract 484 0
-                              Store 485 486
-             487:    275(ptr) AccessChain 452(bv) 261
-             488:   171(bool) CompositeExtract 484 1
+             477:    284(ptr) AccessChain 466(bv) 270
+             478:   171(bool) CompositeExtract 474 1
+                              Store 477 478
+             479: 199(i8vec3) Load 365(u8v)
+             480:  36(int8_t) Load 367(u8)
+             481: 199(i8vec3) CompositeConstruct 480 480 480
+             482:  434(bvec3) ULessThanEqual 479 481
+                              Store 466(bv) 482
+             483:  52(i8vec2) Load 352(i8v)
+             484:  14(int8_t) Load 355(i8)
+             485:  52(i8vec2) CompositeConstruct 484 484
+             486:  172(bvec2) SLessThanEqual 483 485
+             487:    284(ptr) AccessChain 466(bv) 286
+             488:   171(bool) CompositeExtract 486 0
                               Store 487 488
-             489: 190(i8vec3) Load 351(u8v)
-             490:  36(int8_t) Load 353(u8)
-             491: 190(i8vec3) CompositeConstruct 490 490 490
-             492:  420(bvec3) UGreaterThanEqual 489 491
-                              Store 452(bv) 492
-             493:  52(i8vec2) Load 338(i8v)
-             494:  14(int8_t) Load 341(i8)
-             495:  52(i8vec2) CompositeConstruct 494 494
-             496:  172(bvec2) SGreaterThanEqual 493 495
-             497:    275(ptr) AccessChain 452(bv) 277
-             498:   171(bool) CompositeExtract 496 0
-                              Store 497 498
-             499:    275(ptr) AccessChain 452(bv) 261
-             500:   171(bool) CompositeExtract 496 1
+             489:    284(ptr) AccessChain 466(bv) 270
+             490:   171(bool) CompositeExtract 486 1
+                              Store 489 490
+             491: 199(i8vec3) Load 365(u8v)
+             492:  36(int8_t) Load 367(u8)
+             493: 199(i8vec3) CompositeConstruct 492 492 492
+             494:  434(bvec3) UGreaterThan 491 493
+                              Store 466(bv) 494
+             495:  52(i8vec2) Load 352(i8v)
+             496:  14(int8_t) Load 355(i8)
+             497:  52(i8vec2) CompositeConstruct 496 496
+             498:  172(bvec2) SGreaterThan 495 497
+             499:    284(ptr) AccessChain 466(bv) 286
+             500:   171(bool) CompositeExtract 498 0
                               Store 499 500
-             501: 190(i8vec3) Load 351(u8v)
-             502:  36(int8_t) Load 353(u8)
-             503: 190(i8vec3) CompositeConstruct 502 502 502
-             504:  420(bvec3) IEqual 501 503
-                              Store 452(bv) 504
-             505:  52(i8vec2) Load 338(i8v)
-             506:  14(int8_t) Load 341(i8)
-             507:  52(i8vec2) CompositeConstruct 506 506
-             508:  172(bvec2) IEqual 505 507
-             509:    275(ptr) AccessChain 452(bv) 277
-             510:   171(bool) CompositeExtract 508 0
-                              Store 509 510
-             511:    275(ptr) AccessChain 452(bv) 261
-             512:   171(bool) CompositeExtract 508 1
+             501:    284(ptr) AccessChain 466(bv) 270
+             502:   171(bool) CompositeExtract 498 1
+                              Store 501 502
+             503: 199(i8vec3) Load 365(u8v)
+             504:  36(int8_t) Load 367(u8)
+             505: 199(i8vec3) CompositeConstruct 504 504 504
+             506:  434(bvec3) UGreaterThanEqual 503 505
+                              Store 466(bv) 506
+             507:  52(i8vec2) Load 352(i8v)
+             508:  14(int8_t) Load 355(i8)
+             509:  52(i8vec2) CompositeConstruct 508 508
+             510:  172(bvec2) SGreaterThanEqual 507 509
+             511:    284(ptr) AccessChain 466(bv) 286
+             512:   171(bool) CompositeExtract 510 0
                               Store 511 512
-             513: 190(i8vec3) Load 351(u8v)
-             514:  36(int8_t) Load 353(u8)
-             515: 190(i8vec3) CompositeConstruct 514 514 514
-             516:  420(bvec3) INotEqual 513 515
-                              Store 452(bv) 516
-             517:  52(i8vec2) Load 338(i8v)
-             518:  14(int8_t) Load 341(i8)
-             519:  52(i8vec2) CompositeConstruct 518 518
-             520:  172(bvec2) INotEqual 517 519
-             521:    275(ptr) AccessChain 452(bv) 277
-             522:   171(bool) CompositeExtract 520 0
-                              Store 521 522
-             523:    275(ptr) AccessChain 452(bv) 261
-             524:   171(bool) CompositeExtract 520 1
+             513:    284(ptr) AccessChain 466(bv) 270
+             514:   171(bool) CompositeExtract 510 1
+                              Store 513 514
+             515: 199(i8vec3) Load 365(u8v)
+             516:  36(int8_t) Load 367(u8)
+             517: 199(i8vec3) CompositeConstruct 516 516 516
+             518:  434(bvec3) IEqual 515 517
+                              Store 466(bv) 518
+             519:  52(i8vec2) Load 352(i8v)
+             520:  14(int8_t) Load 355(i8)
+             521:  52(i8vec2) CompositeConstruct 520 520
+             522:  172(bvec2) IEqual 519 521
+             523:    284(ptr) AccessChain 466(bv) 286
+             524:   171(bool) CompositeExtract 522 0
                               Store 523 524
+             525:    284(ptr) AccessChain 466(bv) 270
+             526:   171(bool) CompositeExtract 522 1
+                              Store 525 526
+             527: 199(i8vec3) Load 365(u8v)
+             528:  36(int8_t) Load 367(u8)
+             529: 199(i8vec3) CompositeConstruct 528 528 528
+             530:  434(bvec3) INotEqual 527 529
+                              Store 466(bv) 530
+             531:  52(i8vec2) Load 352(i8v)
+             532:  14(int8_t) Load 355(i8)
+             533:  52(i8vec2) CompositeConstruct 532 532
+             534:  172(bvec2) INotEqual 531 533
+             535:    284(ptr) AccessChain 466(bv) 286
+             536:   171(bool) CompositeExtract 534 0
+                              Store 535 536
+             537:    284(ptr) AccessChain 466(bv) 270
+             538:   171(bool) CompositeExtract 534 1
+                              Store 537 538
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.intrinsicsSpecConst.vert.out b/Test/baseResults/spv.intrinsicsSpecConst.vert.out
new file mode 100644
index 0000000..11751d6
--- /dev/null
+++ b/Test/baseResults/spv.intrinsicsSpecConst.vert.out
@@ -0,0 +1,35 @@
+spv.intrinsicsSpecConst.vert
+Validation failed
+// Module Version 10000
+// Generated by (magic number): 8000a
+// Id's are bound by 13
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Vertex 4  "main" 10
+                              ExecutionModeId 4 DenormFlushToZero 7
+                              Source GLSL 450
+                              SourceExtension  "GL_EXT_spirv_intrinsics"
+                              Name 4  "main"
+                              Name 7  "targetWidth"
+                              Name 10  "pointSize"
+                              Name 11  "builtIn"
+                              Decorate 7(targetWidth) SpecId 5
+                              Decorate 10(pointSize) Location 0
+                              Decorate 11(builtIn) SpecId 6
+                              DecorateId 10(pointSize) BuiltIn 11(builtIn)
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+  7(targetWidth):      6(int) SpecConstant 32
+               8:             TypeFloat 32
+               9:             TypePointer Output 8(float)
+   10(pointSize):      9(ptr) Variable Output
+     11(builtIn):      6(int) SpecConstant 1
+              12:    8(float) Constant 1082130432
+         4(main):           2 Function None 3
+               5:             Label
+                              Store 10(pointSize) 12
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.intrinsicsSpirvLiteral.vert.out b/Test/baseResults/spv.intrinsicsSpirvLiteral.vert.out
index af4ac16..68ad949 100644
--- a/Test/baseResults/spv.intrinsicsSpirvLiteral.vert.out
+++ b/Test/baseResults/spv.intrinsicsSpirvLiteral.vert.out
@@ -1,4 +1,5 @@
 spv.intrinsicsSpirvLiteral.vert
+Validation failed
 // Module Version 10000
 // Generated by (magic number): 8000a
 // Id's are bound by 12
diff --git a/Test/baseResults/spv.viewportArray2.tesc.out b/Test/baseResults/spv.viewportArray2.tesc.out
index 74235a5..e95ada4 100644
--- a/Test/baseResults/spv.viewportArray2.tesc.out
+++ b/Test/baseResults/spv.viewportArray2.tesc.out
@@ -1,8 +1,7 @@
 spv.viewportArray2.tesc
-Validation failed
 // Module Version 10000
 // Generated by (magic number): 8000a
-// Id's are bound by 25
+// Id's are bound by 23
 
                               Capability Tessellation
                               Capability ShaderViewportIndexLayerNV
@@ -11,23 +10,21 @@
                               Extension  "SPV_NV_viewport_array2"
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint TessellationControl 4  "main" 14 16 22 24
+                              EntryPoint TessellationControl 4  "main" 14 16 22
                               ExecutionMode 4 OutputVertices 4
-                              Source GLSL 450
+                              Source GLSL 430
                               SourceExtension  "GL_NV_viewport_array2"
                               Name 4  "main"
                               Name 10  "gl_PerVertex"
                               MemberName 10(gl_PerVertex) 0  "gl_ViewportMask"
                               Name 14  "gl_out"
                               Name 16  "gl_InvocationID"
-                              Name 22  "gl_ViewportIndex"
-                              Name 24  "gl_Layer"
+                              Name 22  "gl_Layer"
                               MemberDecorate 10(gl_PerVertex) 0 BuiltIn ViewportMaskNV
                               Decorate 10(gl_PerVertex) Block
                               Decorate 16(gl_InvocationID) BuiltIn InvocationId
-                              Decorate 22(gl_ViewportIndex) BuiltIn ViewportIndex
-                              Decorate 24(gl_Layer) BuiltIn Layer
-                              Decorate 24(gl_Layer) ViewportRelativeNV
+                              Decorate 22(gl_Layer) BuiltIn Layer
+                              Decorate 22(gl_Layer) ViewportRelativeNV
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 1
@@ -44,14 +41,11 @@
               18:      6(int) Constant 0
               19:      6(int) Constant 1
               20:             TypePointer Output 6(int)
-22(gl_ViewportIndex):     20(ptr) Variable Output
-              23:      6(int) Constant 2
-    24(gl_Layer):     20(ptr) Variable Output
+    22(gl_Layer):     20(ptr) Variable Output
          4(main):           2 Function None 3
                5:             Label
               17:      6(int) Load 16(gl_InvocationID)
               21:     20(ptr) AccessChain 14(gl_out) 17 18 18
                               Store 21 19
-                              Store 22(gl_ViewportIndex) 23
                               Return
                               FunctionEnd
diff --git a/Test/spv.float64.frag b/Test/spv.float64.frag
index faaac23..6e9f22d 100644
--- a/Test/spv.float64.frag
+++ b/Test/spv.float64.frag
@@ -127,36 +127,12 @@
     u64v = u64vec3(f64v);    // float64 -> uint64
 }
 
-void builtinAngleTrigFuncs()
-{
-    f64vec4 f64v1, f64v2;
+// Trig, pow, exp and log are not supported for f64
 
-    f64v2 = radians(f64v1);
-    f64v2 = degrees(f64v1);
-    f64v2 = sin(f64v1);
-    f64v2 = cos(f64v1);
-    f64v2 = tan(f64v1);
-    f64v2 = asin(f64v1);
-    f64v2 = acos(f64v1);
-    f64v2 = atan(f64v1, f64v2);
-    f64v2 = atan(f64v1);
-    f64v2 = sinh(f64v1);
-    f64v2 = cosh(f64v1);
-    f64v2 = tanh(f64v1);
-    f64v2 = asinh(f64v1);
-    f64v2 = acosh(f64v1);
-    f64v2 = atanh(f64v1);
-}
-
-void builtinExpFuncs()
+void builtinTranscendentalFuncs()
 {
     f64vec2 f64v1, f64v2;
 
-    f64v2 = pow(f64v1, f64v2);
-    f64v2 = exp(f64v1);
-    f64v2 = log(f64v1);
-    f64v2 = exp2(f64v1);
-    f64v2 = log2(f64v1);
     f64v2 = sqrt(f64v1);
     f64v2 = inversesqrt(f64v1);
 }
diff --git a/Test/spv.int16.frag b/Test/spv.int16.frag
index 2feff4f..26a8c9b 100644
--- a/Test/spv.int16.frag
+++ b/Test/spv.int16.frag
@@ -116,6 +116,8 @@
     int32_t i;
     int64_t i64;
     bool    b;
+    float   f;
+    float   arr[4] = {1.0, 2.0, 3.0, 4.0};
 
     // Unary
     u16v++;
@@ -163,6 +165,9 @@
     uv = u16v & uv;
     uv ^= i16;
     u16v = u16v ^ i16;
+
+    // Index
+    f = arr[i16];
 }
 
 void builtinFuncs()
diff --git a/Test/spv.int8.frag b/Test/spv.int8.frag
index 80702b7..bd3de17 100644
--- a/Test/spv.int8.frag
+++ b/Test/spv.int8.frag
@@ -117,6 +117,8 @@
     int32_t i;
     int16_t i16;
     bool    b;
+    float   arr[4] = {1.0, 2.0, 3.0, 4.0};
+    float   f;
 
     // Unary
     u8v++;
@@ -164,6 +166,9 @@
     uv = u8v & uv;
     uv ^= i8;
     u8v = u8v ^ i8;
+
+    // Index
+    f = arr[i8];
 }
 
 void builtinFuncs()
diff --git a/Test/spv.intrinsicsSpecConst.vert b/Test/spv.intrinsicsSpecConst.vert
new file mode 100644
index 0000000..19cc5ef
--- /dev/null
+++ b/Test/spv.intrinsicsSpecConst.vert
@@ -0,0 +1,14 @@
+#version 450 core

+

+#extension GL_EXT_spirv_intrinsics: enable

+

+layout(constant_id = 5) const uint targetWidth = 32;

+spirv_execution_mode_id(4460/*=DenormFlushToZero*/, targetWidth);

+

+layout(constant_id = 6) const uint builtIn = 1;

+spirv_decorate_id(11/*=BuiltIn*/, builtIn) out float pointSize;

+

+void main()

+{

+    pointSize = 4.0;

+}

diff --git a/Test/spv.viewportArray2.tesc b/Test/spv.viewportArray2.tesc
index 7fc208a..24a1d8c 100644
--- a/Test/spv.viewportArray2.tesc
+++ b/Test/spv.viewportArray2.tesc
@@ -1,4 +1,4 @@
-#version 450

+#version 430

 #extension GL_NV_viewport_array2 :require

 

 layout(vertices = 4) out;

@@ -12,5 +12,4 @@
 void main()

 {

     gl_out[gl_InvocationID].gl_ViewportMask[0] = 1;

-    gl_ViewportIndex = 2;

 }

diff --git a/gen_extension_headers.py b/gen_extension_headers.py
new file mode 100644
index 0000000..a787f9a
--- /dev/null
+++ b/gen_extension_headers.py
@@ -0,0 +1,98 @@
+#!/usr/bin/env python
+
+# Copyright (c) 2020 Google Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.

+

+import glob

+import sys

+import os

+

+def generate_main(glsl_files, output_header_file):

+    # Write commit ID to output header file

+    with open(output_header_file, "w") as header_file:

+        # Copyright Notice

+        header_string =  '/***************************************************************************\n'

+        header_string += ' *\n'

+        header_string += ' * Copyright (c) 2015-2021 The Khronos Group Inc.\n'

+        header_string += ' * Copyright (c) 2015-2021 Valve Corporation\n'

+        header_string += ' * Copyright (c) 2015-2021 LunarG, Inc.\n'

+        header_string += ' * Copyright (c) 2015-2021 Google Inc.\n'

+        header_string += ' * Copyright (c) 2021 Advanced Micro Devices, Inc.All rights reserved.\n'

+        header_string += ' *\n'

+        header_string += ' ****************************************************************************/\n'

+        header_string += '#pragma once\n\n'

+        header_string += '#ifndef _INTRINSIC_EXTENSION_HEADER_H_\n'

+        header_string += '#define _INTRINSIC_EXTENSION_HEADER_H_\n\n'

+        header_file.write(header_string)

+

+        symbol_name_list = []

+

+        for i in glsl_files:

+            glsl_contents = open(i,"r").read()

+

+            filename = os.path.basename(i)

+            symbol_name = filename.split(".")[0]

+            symbol_name_list.append(symbol_name)

+            header_name = symbol_name + ".h"

+            header_str = 'std::string %s_GLSL = R"(\n%s\n)";\n' % (symbol_name, glsl_contents)

+            header_str += '\n'

+            header_file.write(header_str)

+

+        contents = ''

+        contents += '\n'
+        contents += 'std::string getIntrinsic(const char* const* shaders, int n) {\n'
+        contents += '\tstd::string shaderString = "";\n';
+
+        contents += '\tfor (int i = 0; i < n; i++) {\n'
+
+        for symbol_name in symbol_name_list:

+            contents += '\t\tif (strstr(shaders[i], "%s") != NULL) {\n'   % (symbol_name)
+            contents += '\t\t    shaderString.append(%s_GLSL);\n' % (symbol_name)
+            contents += '\t\t}\n'

+
+        contents += '\t}\n'
+        contents += '\treturn shaderString;\n';
+        contents += '}\n'

+

+        contents += '\n#endif\n'

+        header_file.write(contents)

+

+def main():

+    if len(sys.argv) < 2:
+        raise Exception("Invalid number of arguments")

+

+    i = 0

+    while i < len(sys.argv):
+        opt = sys.argv[i]
+        i = i + 1
+
+        if opt == "-i" or opt == "-o":
+            if i == len(sys.argv):
+                raise Exception("Expected path after {}".format(opt))
+            val = sys.argv[i]
+            i = i + 1
+            if (opt == "-i"):
+                input_dir = val
+            elif (opt == "-o"):
+                output_file = val
+            else:
+                raise Exception("Unknown flag {}".format(opt))

+

+    glsl_files = glob.glob(input_dir + '/*.glsl')

+

+    # Generate main header

+    generate_main(glsl_files, output_file)

+

+if __name__ == '__main__':

+    main()
\ No newline at end of file
diff --git a/glslang/CInterface/glslang_c_interface.cpp b/glslang/CInterface/glslang_c_interface.cpp
index 2e04f53..4fdeff7 100644
--- a/glslang/CInterface/glslang_c_interface.cpp
+++ b/glslang/CInterface/glslang_c_interface.cpp
@@ -269,6 +269,8 @@
     switch (client_version) {
     case GLSLANG_TARGET_VULKAN_1_1:
         return glslang::EShTargetVulkan_1_1;
+    case GLSLANG_TARGET_VULKAN_1_2:
+        return glslang::EShTargetVulkan_1_2;
     case GLSLANG_TARGET_OPENGL_450:
         return glslang::EShTargetOpenGL_450;
     default:
diff --git a/glslang/ExtensionHeaders/GL_EXT_shader_realtime_clock.glsl b/glslang/ExtensionHeaders/GL_EXT_shader_realtime_clock.glsl
new file mode 100644
index 0000000..f74df6f
--- /dev/null
+++ b/glslang/ExtensionHeaders/GL_EXT_shader_realtime_clock.glsl
@@ -0,0 +1,54 @@
+//
+// Copyright (C) 2002-2005  3Dlabs Inc. Ltd.
+// Copyright (C) 2013-2016 LunarG, Inc.
+// Copyright (C) 2016-2020 Google, Inc.
+// Modifications Copyright(C) 2021 Advanced Micro Devices, Inc.All rights reserved.
+//
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+//
+//    Redistributions of source code must retain the above copyright
+//    notice, this list of conditions and the following disclaimer.
+//
+//    Redistributions in binary form must reproduce the above
+//    copyright notice, this list of conditions and the following
+//    disclaimer in the documentation and/or other materials provided
+//    with the distribution.
+//
+//    Neither the name of 3Dlabs Inc. Ltd. nor the names of its
+//    contributors may be used to endorse or promote products derived
+//    from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+// COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+// POSSIBILITY OF SUCH DAMAGE.
+//
+
+#extension GL_EXT_spirv_intrinsics : enable
+#extension GL_ARB_gpu_shader_int64 : enable
+
+uvec2 clockRealtime2x32EXT(void) {
+    spirv_instruction (extensions = ["SPV_KHR_shader_clock"], capabilities = [5055], id = 5056)
+    uvec2 clockRealtime2x32EXT_internal(uint scope);
+    
+    return clockRealtime2x32EXT_internal(1 /*Device scope*/);
+}
+
+uint64_t clockRealtimeEXT(void) {
+    spirv_instruction (extensions = ["SPV_KHR_shader_clock"], capabilities = [5055], id = 5056)
+    uint64_t clockRealtimeEXT_internal(uint scope);
+    
+    return clockRealtimeEXT_internal(1 /*Device scope*/);
+}
\ No newline at end of file
diff --git a/glslang/Include/Common.h b/glslang/Include/Common.h
index e7b5e07..a24977f 100644
--- a/glslang/Include/Common.h
+++ b/glslang/Include/Common.h
@@ -39,6 +39,7 @@
 
 #include <algorithm>
 #include <cassert>
+#include <cmath>
 #include <cstdio>
 #include <cstdlib>
 #include <list>
@@ -302,6 +303,34 @@
     return result;
 }
 
+inline bool IsInfinity(double x) {
+#ifdef _MSC_VER
+    switch (_fpclass(x)) {
+    case _FPCLASS_NINF:
+    case _FPCLASS_PINF:
+        return true;
+    default:
+        return false;
+    }
+#else
+    return std::isinf(x);
+#endif
+}
+
+inline bool IsNan(double x) {
+#ifdef _MSC_VER
+    switch (_fpclass(x)) {
+    case _FPCLASS_SNAN:
+    case _FPCLASS_QNAN:
+        return true;
+    default:
+        return false;
+    }
+#else
+  return std::isnan(x);
+#endif
+}
+
 } // end namespace glslang
 
 #endif // _COMMON_INCLUDED_
diff --git a/glslang/Include/PoolAlloc.h b/glslang/Include/PoolAlloc.h
index b8eccb8..1f5cac7 100644
--- a/glslang/Include/PoolAlloc.h
+++ b/glslang/Include/PoolAlloc.h
@@ -306,6 +306,8 @@
 
     TPoolAllocator& getAllocator() const { return allocator; }
 
+    pool_allocator select_on_container_copy_construction() const { return pool_allocator{}; }
+
 protected:
     pool_allocator& operator=(const pool_allocator&) { return *this; }
     TPoolAllocator& allocator;
diff --git a/glslang/Include/SpirvIntrinsics.h b/glslang/Include/SpirvIntrinsics.h
index e7a999d..3c7d72c 100644
--- a/glslang/Include/SpirvIntrinsics.h
+++ b/glslang/Include/SpirvIntrinsics.h
@@ -65,7 +65,7 @@
     // spirv_execution_mode
     TMap<int, TVector<const TIntermConstantUnion*>> modes;
     // spirv_execution_mode_id
-    TMap<int, TVector<const TIntermConstantUnion*> > modeIds;
+    TMap<int, TVector<const TIntermTyped*> > modeIds;
 };
 
 // SPIR-V decorations
@@ -75,7 +75,7 @@
     // spirv_decorate
     TMap<int, TVector<const TIntermConstantUnion*> > decorates;
     // spirv_decorate_id
-    TMap<int, TVector<const TIntermConstantUnion*> > decorateIds;
+    TMap<int, TVector<const TIntermTyped*>> decorateIds;
     // spirv_decorate_string
     TMap<int, TVector<const TIntermConstantUnion*> > decorateStrings;
 };
@@ -98,20 +98,12 @@
 struct TSpirvTypeParameter {
     POOL_ALLOCATOR_NEW_DELETE(GetThreadPoolAllocator())
 
-    TSpirvTypeParameter(const TIntermConstantUnion* arg) { isConstant = true; constant = arg; }
-    TSpirvTypeParameter(const TType* arg) { isConstant = false; type = arg; }
+    TSpirvTypeParameter(const TIntermConstantUnion* arg) { constant = arg; }
 
-    bool operator==(const TSpirvTypeParameter& rhs) const
-    {
-        return isConstant == rhs.isConstant && ((isConstant && constant == rhs.constant) || (!isConstant && type == rhs.type));
-    }
+    bool operator==(const TSpirvTypeParameter& rhs) const { return constant == rhs.constant; }
     bool operator!=(const TSpirvTypeParameter& rhs) const { return !operator==(rhs); }
 
-    bool isConstant;
-    union {
-        const TIntermConstantUnion* constant;
-        const TType* type;
-    };
+    const TIntermConstantUnion* constant;
 };
 
 typedef TVector<TSpirvTypeParameter> TSpirvTypeParameters;
diff --git a/glslang/MachineIndependent/Constant.cpp b/glslang/MachineIndependent/Constant.cpp
index 7f5d4c4..5fc61db 100644
--- a/glslang/MachineIndependent/Constant.cpp
+++ b/glslang/MachineIndependent/Constant.cpp
@@ -46,35 +46,6 @@
 
 using namespace glslang;
 
-typedef union {
-    double d;
-    int i[2];
-} DoubleIntUnion;
-
-// Some helper functions
-
-bool isNan(double x)
-{
-    DoubleIntUnion u;
-    // tough to find a platform independent library function, do it directly
-    u.d = x;
-    int bitPatternL = u.i[0];
-    int bitPatternH = u.i[1];
-    return (bitPatternH & 0x7ff80000) == 0x7ff80000 &&
-           ((bitPatternH & 0xFFFFF) != 0 || bitPatternL != 0);
-}
-
-bool isInf(double x)
-{
-    DoubleIntUnion u;
-    // tough to find a platform independent library function, do it directly
-    u.d = x;
-    int bitPatternL = u.i[0];
-    int bitPatternH = u.i[1];
-    return (bitPatternH & 0x7ff00000) == 0x7ff00000 &&
-           (bitPatternH & 0xFFFFF) == 0 && bitPatternL == 0;
-}
-
 const double pi = 3.1415926535897932384626433832795;
 
 } // end anonymous namespace
@@ -663,12 +634,12 @@
 
         case EOpIsNan:
         {
-            newConstArray[i].setBConst(isNan(unionArray[i].getDConst()));
+            newConstArray[i].setBConst(IsNan(unionArray[i].getDConst()));
             break;
         }
         case EOpIsInf:
         {
-            newConstArray[i].setBConst(isInf(unionArray[i].getDConst()));
+            newConstArray[i].setBConst(IsInfinity(unionArray[i].getDConst()));
             break;
         }
 
diff --git a/glslang/MachineIndependent/Initialize.cpp b/glslang/MachineIndependent/Initialize.cpp
index ee4e2ca..728cd4a 100644
--- a/glslang/MachineIndependent/Initialize.cpp
+++ b/glslang/MachineIndependent/Initialize.cpp
@@ -3,7 +3,7 @@
 // Copyright (C) 2012-2016 LunarG, Inc.
 // Copyright (C) 2015-2020 Google, Inc.
 // Copyright (C) 2017 ARM Limited.
-// Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved.
+// Modifications Copyright (C) 2020-2021 Advanced Micro Devices, Inc. All rights reserved.
 //
 // All rights reserved.
 //
@@ -4159,106 +4159,6 @@
             "u16vec4  unpack16(uint64_t);"
             "i32vec2  unpack32(int64_t);"
             "u32vec2  unpack32(uint64_t);"
-
-            "float64_t radians(float64_t);"
-            "f64vec2   radians(f64vec2);"
-            "f64vec3   radians(f64vec3);"
-            "f64vec4   radians(f64vec4);"
-
-            "float64_t degrees(float64_t);"
-            "f64vec2   degrees(f64vec2);"
-            "f64vec3   degrees(f64vec3);"
-            "f64vec4   degrees(f64vec4);"
-
-            "float64_t sin(float64_t);"
-            "f64vec2   sin(f64vec2);"
-            "f64vec3   sin(f64vec3);"
-            "f64vec4   sin(f64vec4);"
-
-            "float64_t cos(float64_t);"
-            "f64vec2   cos(f64vec2);"
-            "f64vec3   cos(f64vec3);"
-            "f64vec4   cos(f64vec4);"
-
-            "float64_t tan(float64_t);"
-            "f64vec2   tan(f64vec2);"
-            "f64vec3   tan(f64vec3);"
-            "f64vec4   tan(f64vec4);"
-
-            "float64_t asin(float64_t);"
-            "f64vec2   asin(f64vec2);"
-            "f64vec3   asin(f64vec3);"
-            "f64vec4   asin(f64vec4);"
-
-            "float64_t acos(float64_t);"
-            "f64vec2   acos(f64vec2);"
-            "f64vec3   acos(f64vec3);"
-            "f64vec4   acos(f64vec4);"
-
-            "float64_t atan(float64_t, float64_t);"
-            "f64vec2   atan(f64vec2,   f64vec2);"
-            "f64vec3   atan(f64vec3,   f64vec3);"
-            "f64vec4   atan(f64vec4,   f64vec4);"
-
-            "float64_t atan(float64_t);"
-            "f64vec2   atan(f64vec2);"
-            "f64vec3   atan(f64vec3);"
-            "f64vec4   atan(f64vec4);"
-
-            "float64_t sinh(float64_t);"
-            "f64vec2   sinh(f64vec2);"
-            "f64vec3   sinh(f64vec3);"
-            "f64vec4   sinh(f64vec4);"
-
-            "float64_t cosh(float64_t);"
-            "f64vec2   cosh(f64vec2);"
-            "f64vec3   cosh(f64vec3);"
-            "f64vec4   cosh(f64vec4);"
-
-            "float64_t tanh(float64_t);"
-            "f64vec2   tanh(f64vec2);"
-            "f64vec3   tanh(f64vec3);"
-            "f64vec4   tanh(f64vec4);"
-
-            "float64_t asinh(float64_t);"
-            "f64vec2   asinh(f64vec2);"
-            "f64vec3   asinh(f64vec3);"
-            "f64vec4   asinh(f64vec4);"
-
-            "float64_t acosh(float64_t);"
-            "f64vec2   acosh(f64vec2);"
-            "f64vec3   acosh(f64vec3);"
-            "f64vec4   acosh(f64vec4);"
-
-            "float64_t atanh(float64_t);"
-            "f64vec2   atanh(f64vec2);"
-            "f64vec3   atanh(f64vec3);"
-            "f64vec4   atanh(f64vec4);"
-
-            "float64_t pow(float64_t, float64_t);"
-            "f64vec2   pow(f64vec2,   f64vec2);"
-            "f64vec3   pow(f64vec3,   f64vec3);"
-            "f64vec4   pow(f64vec4,   f64vec4);"
-
-            "float64_t exp(float64_t);"
-            "f64vec2   exp(f64vec2);"
-            "f64vec3   exp(f64vec3);"
-            "f64vec4   exp(f64vec4);"
-
-            "float64_t log(float64_t);"
-            "f64vec2   log(f64vec2);"
-            "f64vec3   log(f64vec3);"
-            "f64vec4   log(f64vec4);"
-
-            "float64_t exp2(float64_t);"
-            "f64vec2   exp2(f64vec2);"
-            "f64vec3   exp2(f64vec3);"
-            "f64vec4   exp2(f64vec4);"
-
-            "float64_t log2(float64_t);"
-            "f64vec2   log2(f64vec2);"
-            "f64vec3   log2(f64vec3);"
-            "f64vec4   log2(f64vec4);"
             "\n");
     }
 
@@ -4653,13 +4553,11 @@
             "\n");
     }
 
-    // GL_ARB_shader_clock & GL_EXT_shader_realtime_clock
+    // GL_ARB_shader_clock
     if (profile != EEsProfile && version >= 450) {
         commonBuiltins.append(
             "uvec2 clock2x32ARB();"
             "uint64_t clockARB();"
-            "uvec2 clockRealtime2x32EXT();"
-            "uint64_t clockRealtimeEXT();"
             "\n");
     }
 
@@ -5174,9 +5072,13 @@
                 );
         }
 
-        if (version >= 450)
+        if (version >= 430)
             stageBuiltins[EShLangVertex].append(
                 "out int gl_ViewportMask[];"             // GL_NV_viewport_array2
+                );
+
+        if (version >= 450)
+            stageBuiltins[EShLangVertex].append(
                 "out int gl_SecondaryViewportMaskNV[];"  // GL_NV_stereo_view_rendering
                 "out vec4 gl_SecondaryPositionNV;"       // GL_NV_stereo_view_rendering
                 "out vec4 gl_PositionPerViewNV[];"       // GL_NVX_multiview_per_view_attributes
@@ -5312,9 +5214,13 @@
             "in int gl_InvocationID;"
             );
 
-        if (version >= 450)
+        if (version >= 430)
             stageBuiltins[EShLangGeometry].append(
                 "out int gl_ViewportMask[];"               // GL_NV_viewport_array2
+            );
+
+        if (version >= 450)
+            stageBuiltins[EShLangGeometry].append(
                 "out int gl_SecondaryViewportMaskNV[];"    // GL_NV_stereo_view_rendering
                 "out vec4 gl_SecondaryPositionNV;"         // GL_NV_stereo_view_rendering
                 "out vec4 gl_PositionPerViewNV[];"         // GL_NVX_multiview_per_view_attributes
@@ -5390,7 +5296,13 @@
         if (version >= 450)
             stageBuiltins[EShLangTessControl].append(
                 "float gl_CullDistance[];"
+            );
+        if (version >= 430)
+            stageBuiltins[EShLangTessControl].append(
                 "int  gl_ViewportMask[];"             // GL_NV_viewport_array2
+            );
+        if (version >= 450)
+            stageBuiltins[EShLangTessControl].append(
                 "vec4 gl_SecondaryPositionNV;"        // GL_NV_stereo_view_rendering
                 "int  gl_SecondaryViewportMaskNV[];"  // GL_NV_stereo_view_rendering
                 "vec4 gl_PositionPerViewNV[];"        // GL_NVX_multiview_per_view_attributes
@@ -5493,9 +5405,13 @@
                 "out int gl_Layer;"
                 "\n");
 
-        if (version >= 450)
+        if (version >= 430)
             stageBuiltins[EShLangTessEvaluation].append(
                 "out int  gl_ViewportMask[];"             // GL_NV_viewport_array2
+            );
+
+        if (version >= 450)
+            stageBuiltins[EShLangTessEvaluation].append(
                 "out vec4 gl_SecondaryPositionNV;"        // GL_NV_stereo_view_rendering
                 "out int  gl_SecondaryViewportMaskNV[];"  // GL_NV_stereo_view_rendering
                 "out vec4 gl_PositionPerViewNV[];"        // GL_NVX_multiview_per_view_attributes
@@ -8408,9 +8324,6 @@
         symbolTable.setFunctionExtensions("clockARB",     1, &E_GL_ARB_shader_clock);
         symbolTable.setFunctionExtensions("clock2x32ARB", 1, &E_GL_ARB_shader_clock);
 
-        symbolTable.setFunctionExtensions("clockRealtimeEXT",     1, &E_GL_EXT_shader_realtime_clock);
-        symbolTable.setFunctionExtensions("clockRealtime2x32EXT", 1, &E_GL_EXT_shader_realtime_clock);
-
         if (profile == EEsProfile && version < 320) {
             symbolTable.setVariableExtensions("gl_PrimitiveID",  Num_AEP_geometry_shader, AEP_geometry_shader);
             symbolTable.setVariableExtensions("gl_Layer",        Num_AEP_geometry_shader, AEP_geometry_shader);
diff --git a/glslang/MachineIndependent/ParseHelper.cpp b/glslang/MachineIndependent/ParseHelper.cpp
index b2b187b..9ab1207 100644
--- a/glslang/MachineIndependent/ParseHelper.cpp
+++ b/glslang/MachineIndependent/ParseHelper.cpp
@@ -3029,11 +3029,14 @@
 
 //
 // Both test, and if necessary spit out an error, to see if the node is really
-// an integer.
+// a 32-bit integer or can implicitly convert to one.
 //
 void TParseContext::integerCheck(const TIntermTyped* node, const char* token)
 {
-    if ((node->getBasicType() == EbtInt || node->getBasicType() == EbtUint) && node->isScalar())
+    auto from_type = node->getBasicType();
+    if ((from_type == EbtInt || from_type == EbtUint ||
+         intermediate.canImplicitlyPromote(from_type, EbtInt, EOpNull) ||
+         intermediate.canImplicitlyPromote(from_type, EbtUint, EOpNull)) && node->isScalar())
         return;
 
     error(node->getLoc(), "scalar integer expression required", token, "");
@@ -9243,11 +9246,14 @@
         // "it is an error to have no statement between a label and the end of the switch statement."
         // The specifications were updated to remove this (being ill-defined what a "statement" was),
         // so, this became a warning.  However, 3.0 tests still check for the error.
-        if (isEsProfile() && version <= 300 && ! relaxedErrors())
+        if (isEsProfile() && (version <= 300 || version >= 320) && ! relaxedErrors())
+            error(loc, "last case/default label not followed by statements", "switch", "");
+        else if (!isEsProfile() && (version <= 430 || version >= 460))
             error(loc, "last case/default label not followed by statements", "switch", "");
         else
             warn(loc, "last case/default label not followed by statements", "switch", "");
 
+
         // emulate a break for error recovery
         lastStatements = intermediate.makeAggregate(intermediate.addBranch(EOpBreak, loc));
         lastStatements->setOperator(EOpSequence);
diff --git a/glslang/MachineIndependent/ParseHelper.h b/glslang/MachineIndependent/ParseHelper.h
index 442741d..885fd90 100644
--- a/glslang/MachineIndependent/ParseHelper.h
+++ b/glslang/MachineIndependent/ParseHelper.h
@@ -480,7 +480,6 @@
     TSpirvRequirement* mergeSpirvRequirements(const TSourceLoc& loc, TSpirvRequirement* spirvReq1,
                                                 TSpirvRequirement* spirvReq2);
     TSpirvTypeParameters* makeSpirvTypeParameters(const TSourceLoc& loc, const TIntermConstantUnion* constant);
-    TSpirvTypeParameters* makeSpirvTypeParameters(const TPublicType& type);
     TSpirvTypeParameters* mergeSpirvTypeParameters(TSpirvTypeParameters* spirvTypeParams1,
                                                    TSpirvTypeParameters* spirvTypeParams2);
     TSpirvInstruction* makeSpirvInstruction(const TSourceLoc& loc, const TString& name, const TString& value);
diff --git a/glslang/MachineIndependent/ShaderLang.cpp b/glslang/MachineIndependent/ShaderLang.cpp
index d02eae6..a2dd71c 100644
--- a/glslang/MachineIndependent/ShaderLang.cpp
+++ b/glslang/MachineIndependent/ShaderLang.cpp
@@ -1343,7 +1343,6 @@
 
     glslang::GetGlobalLock();
     ++NumberOfClients;
-    glslang::ReleaseGlobalLock();
 
     if (PerProcessGPA == nullptr)
         PerProcessGPA = new TPoolAllocator();
@@ -1353,6 +1352,7 @@
     glslang::HlslScanContext::fillInKeywordMap();
 #endif
 
+    glslang::ReleaseGlobalLock();
     return 1;
 }
 
@@ -1415,9 +1415,10 @@
     --NumberOfClients;
     assert(NumberOfClients >= 0);
     bool finalize = NumberOfClients == 0;
-    glslang::ReleaseGlobalLock();
-    if (! finalize)
+    if (! finalize) {
+        glslang::ReleaseGlobalLock();
         return 1;
+    }
 
     for (int version = 0; version < VersionCount; ++version) {
         for (int spvVersion = 0; spvVersion < SpvVersionCount; ++spvVersion) {
@@ -1455,6 +1456,7 @@
     glslang::HlslScanContext::deleteKeywordMap();
 #endif
 
+    glslang::ReleaseGlobalLock();
     return 1;
 }
 
diff --git a/glslang/MachineIndependent/SpirvIntrinsics.cpp b/glslang/MachineIndependent/SpirvIntrinsics.cpp
index 38094ea..6650f7d 100644
--- a/glslang/MachineIndependent/SpirvIntrinsics.cpp
+++ b/glslang/MachineIndependent/SpirvIntrinsics.cpp
@@ -130,11 +130,11 @@
         spirvExecutionMode = new TSpirvExecutionMode;
 
     assert(args);
-    TVector<const TIntermConstantUnion*> extraOperands;
+    TVector<const TIntermTyped*> extraOperands;
 
     for (auto arg : args->getSequence()) {
-        auto extraOperand = arg->getAsConstantUnion();
-        assert(extraOperand != nullptr);
+        auto extraOperand = arg->getAsTyped();
+        assert(extraOperand != nullptr && extraOperand->getQualifier().isConstant());
         extraOperands.push_back(extraOperand);
     }
     spirvExecutionMode->modeIds[executionMode] = extraOperands;
@@ -165,10 +165,10 @@
         spirvDecorate = new TSpirvDecorate;
 
     assert(args);
-    TVector<const TIntermConstantUnion*> extraOperands;
+    TVector<const TIntermTyped*> extraOperands;
     for (auto arg : args->getSequence()) {
-        auto extraOperand = arg->getAsConstantUnion();
-        assert(extraOperand != nullptr);
+        auto extraOperand = arg->getAsTyped();
+        assert(extraOperand != nullptr && extraOperand->getQualifier().isConstant());
         extraOperands.push_back(extraOperand);
     }
     spirvDecorate->decorateIds[decoration] = extraOperands;
@@ -201,25 +201,27 @@
     const auto appendBool = [&](bool b) { qualifierString.append(std::to_string(b).c_str()); };
     const auto appendStr = [&](const char* s) { qualifierString.append(s); };
 
-    const auto appendDecorate = [&](const TIntermConstantUnion* constant) {
+    const auto appendDecorate = [&](const TIntermTyped* constant) {
+        auto& constArray = constant->getAsConstantUnion() != nullptr ? constant->getAsConstantUnion()->getConstArray()
+                                                                     : constant->getAsSymbolNode()->getConstArray();
         if (constant->getBasicType() == EbtFloat) {
-            float value = static_cast<float>(constant->getConstArray()[0].getDConst());
+            float value = static_cast<float>(constArray[0].getDConst());
             appendFloat(value);
         }
         else if (constant->getBasicType() == EbtInt) {
-            int value = constant->getConstArray()[0].getIConst();
+            int value = constArray[0].getIConst();
             appendInt(value);
         }
         else if (constant->getBasicType() == EbtUint) {
-            unsigned value = constant->getConstArray()[0].getUConst();
+            unsigned value = constArray[0].getUConst();
             appendUint(value);
         }
         else if (constant->getBasicType() == EbtBool) {
-            bool value = constant->getConstArray()[0].getBConst();
+            bool value = constArray[0].getBConst();
             appendBool(value);
         }
         else if (constant->getBasicType() == EbtString) {
-            const TString* value = constant->getConstArray()[0].getSConst();
+            const TString* value = constArray[0].getSConst();
             appendStr(value->c_str());
         }
         else
@@ -290,13 +292,6 @@
     return spirvTypeParams;
 }
 
-TSpirvTypeParameters* TParseContext::makeSpirvTypeParameters(const TPublicType& type)
-{
-    TSpirvTypeParameters* spirvTypeParams = new TSpirvTypeParameters;
-    spirvTypeParams->push_back(TSpirvTypeParameter(new TType(type)));
-    return spirvTypeParams;
-}
-
 TSpirvTypeParameters* TParseContext::mergeSpirvTypeParameters(TSpirvTypeParameters* spirvTypeParams1, TSpirvTypeParameters* spirvTypeParams2)
 {
     // Merge SPIR-V type parameters of the second one to the first one
diff --git a/glslang/MachineIndependent/Versions.cpp b/glslang/MachineIndependent/Versions.cpp
index 097ee84..2fc0d9e 100644
--- a/glslang/MachineIndependent/Versions.cpp
+++ b/glslang/MachineIndependent/Versions.cpp
@@ -225,6 +225,7 @@
     extensionBehavior[E_GL_ARB_shading_language_packing]     = EBhDisable;
     extensionBehavior[E_GL_ARB_texture_query_lod]            = EBhDisable;
     extensionBehavior[E_GL_ARB_vertex_attrib_64bit]          = EBhDisable;
+    extensionBehavior[E_GL_ARB_draw_instanced]               = EBhDisable;
 
     extensionBehavior[E_GL_KHR_shader_subgroup_basic]            = EBhDisable;
     extensionBehavior[E_GL_KHR_shader_subgroup_vote]             = EBhDisable;
@@ -465,6 +466,7 @@
             "#define GL_ARB_shader_storage_buffer_object 1\n"
             "#define GL_ARB_texture_query_lod 1\n"
             "#define GL_ARB_vertex_attrib_64bit 1\n"
+            "#define GL_ARB_draw_instanced 1\n"
             "#define GL_EXT_shader_non_constant_global_initializers 1\n"
             "#define GL_EXT_shader_image_load_formatted 1\n"
             "#define GL_EXT_post_depth_coverage 1\n"
@@ -482,6 +484,7 @@
             "#define GL_EXT_debug_printf 1\n"
             "#define GL_EXT_fragment_shading_rate 1\n"
             "#define GL_EXT_shared_memory_block 1\n"
+            "#define GL_EXT_shader_integer_mix 1\n"
 
             // GL_KHR_shader_subgroup
             "#define GL_KHR_shader_subgroup_basic 1\n"
diff --git a/glslang/MachineIndependent/Versions.h b/glslang/MachineIndependent/Versions.h
index 949a7a1..2dbac0b 100644
--- a/glslang/MachineIndependent/Versions.h
+++ b/glslang/MachineIndependent/Versions.h
@@ -161,6 +161,7 @@
 const char* const E_GL_ARB_shading_language_packing     = "GL_ARB_shading_language_packing";
 const char* const E_GL_ARB_texture_query_lod            = "GL_ARB_texture_query_lod";
 const char* const E_GL_ARB_vertex_attrib_64bit          = "GL_ARB_vertex_attrib_64bit";
+const char* const E_GL_ARB_draw_instanced               = "GL_ARB_draw_instanced";
 
 const char* const E_GL_KHR_shader_subgroup_basic            = "GL_KHR_shader_subgroup_basic";
 const char* const E_GL_KHR_shader_subgroup_vote             = "GL_KHR_shader_subgroup_vote";
diff --git a/glslang/MachineIndependent/glslang.m4 b/glslang/MachineIndependent/glslang.m4
index 3626502..d4cc5bc 100644
--- a/glslang/MachineIndependent/glslang.m4
+++ b/glslang/MachineIndependent/glslang.m4
@@ -4367,9 +4367,6 @@
     : constant_expression {
         $$ = parseContext.makeSpirvTypeParameters($1->getLoc(), $1->getAsConstantUnion());
     }
-    | type_specifier {
-        $$ = parseContext.makeSpirvTypeParameters($1);
-    }
 
 spirv_instruction_qualifier
     : SPIRV_INSTRUCTION LEFT_PAREN spirv_instruction_qualifier_list RIGHT_PAREN {
diff --git a/glslang/MachineIndependent/glslang.y b/glslang/MachineIndependent/glslang.y
index ad48386..df53eb5 100644
--- a/glslang/MachineIndependent/glslang.y
+++ b/glslang/MachineIndependent/glslang.y
@@ -4367,9 +4367,6 @@
     : constant_expression {
         $$ = parseContext.makeSpirvTypeParameters($1->getLoc(), $1->getAsConstantUnion());
     }
-    | type_specifier {
-        $$ = parseContext.makeSpirvTypeParameters($1);
-    }
 
 spirv_instruction_qualifier
     : SPIRV_INSTRUCTION LEFT_PAREN spirv_instruction_qualifier_list RIGHT_PAREN {
diff --git a/glslang/MachineIndependent/glslang_tab.cpp b/glslang/MachineIndependent/glslang_tab.cpp
index 33b8a92..5ba6a6d 100644
--- a/glslang/MachineIndependent/glslang_tab.cpp
+++ b/glslang/MachineIndependent/glslang_tab.cpp
@@ -1034,16 +1034,16 @@
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  442
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   12453
+#define YYLAST   12452
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  455
 /* YYNNTS -- Number of nonterminals.  */
 #define YYNNTS  131
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  684
+#define YYNRULES  683
 /* YYNSTATES -- Number of states.  */
-#define YYNSTATES  930
+#define YYNSTATES  929
 
 /* YYMAXUTOK -- Last valid token kind.  */
 #define YYMAXUTOK   709
@@ -1204,8 +1204,8 @@
     4183,  4187,  4194,  4197,  4202,  4205,  4208,  4211,  4214,  4219,
     4228,  4239,  4244,  4252,  4256,  4261,  4265,  4270,  4274,  4279,
     4283,  4290,  4293,  4298,  4301,  4304,  4307,  4312,  4320,  4330,
-    4334,  4339,  4343,  4348,  4352,  4359,  4362,  4367,  4370,  4375,
-    4378,  4384,  4387,  4392,  4395
+    4334,  4339,  4343,  4348,  4352,  4359,  4362,  4367,  4372,  4375,
+    4381,  4384,  4389,  4392
 };
 #endif
 
@@ -1433,7 +1433,7 @@
 };
 #endif
 
-#define YYPACT_NINF (-863)
+#define YYPACT_NINF (-859)
 
 #define yypact_value_is_default(Yyn) \
   ((Yyn) == YYPACT_NINF)
@@ -1447,99 +1447,99 @@
      STATE-NUM.  */
 static const yytype_int16 yypact[] =
 {
-    4549,  -863,  -863,  -863,  -863,  -863,  -863,  -863,  -863,  -863,
-    -863,  -863,  -863,  -863,  -863,  -863,  -863,  -863,  -863,  -863,
-    -863,  -863,  -863,  -863,  -863,  -863,  -863,  -863,  -863,  -863,
-    -863,  -863,  -863,  -863,  -863,  -863,  -863,  -863,  -863,  -863,
-    -863,  -863,  -863,  -863,  -863,  -863,  -863,  -863,  -863,  -863,
-    -863,  -863,  -863,  -863,  -863,  -863,  -863,  -863,  -863,  -863,
-    -863,  -863,  -863,  -863,  -863,  -863,  -863,  -863,  -863,  -863,
-    -863,  -863,  -863,  -863,  -863,  -863,  -863,  -863,  -863,  -863,
-    -863,  -863,  -863,  -863,  -863,  -863,  -863,  -863,  -863,  -863,
-    -863,  -863,  -863,  -863,  -863,  -863,  -863,  -863,  -863,  -863,
-    -863,  -863,  -863,  -863,  -863,  -863,  -863,  -863,  -863,  -863,
-    -863,  -863,  -863,  -863,  -863,  -863,  -863,  -863,  -863,  -863,
-    -863,  -863,  -863,  -863,  -863,  -863,  -863,  -863,  -863,  -863,
-    -863,  -863,  -863,  -863,  -863,  -863,  -863,  -863,  -863,  -863,
-    -863,  -863,  -863,  -863,  -863,  -863,  -863,  -863,  -863,  -863,
-    -863,  -863,  -863,  -863,  -863,  -863,  -863,  -863,  -863,  -863,
-    -863,  -863,  -863,  -863,  -863,  -863,  -863,  -863,  -863,  -863,
-    -863,  -863,  -863,  -863,  -863,  -863,  -863,  -863,  -863,  -863,
-    -863,  -863,  -863,  -863,  -863,  -863,  -863,  -863,  -863,  -863,
-    -863,  -863,  -863,  -863,  -863,  -863,  -863,  -863,  -863,  -863,
-    -863,  -863,  -863,  -863,  -863,  -863,  -863,  -863,  -863,  -863,
-    -863,  -863,  -863,  -863,  -863,  -863,  -863,  -863,  -863,  -863,
-    -863,  -863,  -863,  -863,  -863,  -863,  -863,  -863,  -863,  -863,
-    -863,  -863,  -863,  -863,  -863,  -863,  -863,  -863,  -863,  -863,
-    -863,  -863,  -863,  -863,  -863,  -863,  -863,  -863,  -863,  -863,
-    -863,  -863,  -863,  -863,  -863,  -863,  -863,  -863,  -863,  -863,
-    -863,  -863,  -863,  -863,  -863,  -863,  -863,  -863,  -863,  -863,
-    -863,  -863,  -863,  -863,  -863,  -863,  -863,  -863,  -863,  -863,
-    -863,  -863,  -863,  -863,  -863,  -863,  -863,  -863,  -863,  -863,
-    -863,  -863,  -863,  -863,  -863,  -863,  -863,  -863,  -863,  -863,
-    -863,  -863,  -863,  -863,  -863,  -863,  -863,  -863,  -863,  -863,
-    -863,  -863,  -863,  -863,  -863,  -260,  -182,  -177,  -163,  -130,
-    -115,  -100,   -89,  -863,  -863,  -196,  -863,  -863,  -863,  -863,
-    -863,  -324,  -863,  -863,  -863,  -863,  -863,  -306,  -863,  -863,
-    -863,  -863,  -863,  -863,   -77,   -66,  -863,  -863,  -863,  -863,
-    -863,  -863,  -863,  -863,  -863,  -863,  -863,  -863,  -863,  -863,
-    -863,  -863,  -863,  -863,  -863,  -863,  -863,  -863,  -863,  -863,
-    -863,  -863,  -863,  -863,  -863,  -863,  -863,  -863,  -332,  -175,
-    -153,  -161,  7713,  -266,  -863,   -71,  -863,  -863,  -863,  -863,
-    5453,  -863,  -863,  -863,  -863,  -116,  -863,  -863,   933,  -863,
-    -863,  7713,   -35,  -863,  -863,  -863,  5905,   -54,  -139,  -138,
-    -137,  -128,  -124,   -54,  -123,   -51, 12061,  -863,   -15,  -347,
-     -44,  -863,  -295,  -863,    -9,    -6,  7713,  -863,  -863,  -863,
-    7713,   -39,   -38,  -863,  -303,  -863,  -226,  -863,  -863, 10762,
-      -3,  -863,  -863,  -863,     1,   -32,  7713,  -863,    -5,    -8,
-      -1,  -863,  -230,  -863,  -219,    -2,     3,     4,     5,  -215,
-       6,     8,    10,    11,    12,    15,  -214,    13,    16,    21,
-    -134,  -863,    17,  7713,  -863,    19,  -863,  -212,  -863,  -863,
-    -211,  9030,  -863,  -273,  1385,  -863,  -863,  -863,  -863,  -863,
-      -3,  -263,  -863,  9463,  -236,  -863,   -28,  -863,  -106, 10762,
-   10762,  -863, 10762,  -863,  -863,  -863,  -863,  -863,  -863,  -863,
-    -863,  -863,  -863,  -863,  -863,  -863,  -863,  -863,  -863,  -863,
-    -863,  -863,  -264,  -863,  -863,  -863,    23,  -203, 11195,    25,
-    -863, 10762,  -863,  -863,  -311,    24,    -6,    29,  -863,  -309,
-     -54,  -863,   -20,  -863,  -323,    28,  -118, 10762,  -112,  -863,
-    -155,  -111, 10762,  -103,    35,   -98,   -54,  -863, 11628,  -863,
-     -94, 10762,    32,   -51,  -863,  7713,    18,  6357,  -863,  7713,
-   10762,  -863,  -347,  -863,    33,  -863,  -863,   -72,  -254,   -86,
-    -297,   -68,   -13,    26,    20,    50,    49,  -300,    42,  9896,
-    -863,    43,  -863,  -863,    55,    58,    60,  -863,    65,    71,
-      62, 10329,    73, 10762,    66,    69,    70,    72,    74,  -241,
-    -863,  -863,   -41,  -863,  -175,    83,    85,  -863,  -863,  -863,
-    -863,  -863,  1837,  -863,  -863,  -863,  -863,  -863,  -863,  -863,
-    -863,  -863,  5001,    24,  9463,  -233,  8164,  -863,  -863,  9463,
-    7713,  -863,    51,  -863,  -863,  -863,  -194,  -863,  -863, 10762,
-      52,  -863,  -863, 10762,    88,  -863,  -863,  -863, 10762,  -863,
-    -863,  -863,  -315,  -863,  -863,  -191,    82,  -863,  -863,  -863,
-    -863,  -863,  -863,  -190,  -863,  -187,  -863,  -863,  -186,    86,
-    -863,  -863,  -863,  -863,  -169,  -863,  -168,  -863,  -167,    89,
-    -863,  -165,    91,  -157,    82,  -863,    85,  -156,  -863,    94,
-      98,  -863,  -863,    18,    -3,   -40,  -863,  -863,  -863,  6809,
-    -863,  -863,  -863, 10762, 10762, 10762, 10762, 10762, 10762, 10762,
-   10762, 10762, 10762, 10762, 10762, 10762, 10762, 10762, 10762, 10762,
-   10762, 10762,  -863,  -863,  -863,    97,  -863,  2289,  -863,  -863,
-    -863,  2289,  -863, 10762,  -863,  -863,   -34, 10762,   -79,  -863,
-    -863,  -863,  -863,  -863,  -863,  -863,  -863,  -863,  -863,  -863,
-    -863,  -863,  -863,  -863,  -863, 10762, 10762,  -863,  -863,  -863,
-    -863,  -863,  -863,  -863,  9463,  -863,  -863,  -208,  -863,  7261,
-    -863,  -863,    99,    96,  -863,  -863,  -863,  -863,  -863,  -132,
-    -131,  -863,  -307,  -863,  -323,  -863,  -323,  -863, 10762, 10762,
-    -863,  -155,  -863,  -155,  -863, 10762, 10762,  -863,    93,    35,
-    -863, 11628,  -863, 10762,  -863,  -863,   -33,    24,    18,  -863,
-    -863,  -863,  -863,  -863,   -72,   -72,  -254,  -254,   -86,   -86,
-     -86,   -86,  -297,  -297,   -68,   -13,    26,    20,    50,    49,
-   10762,  -863,  2289,  4097,    57,  3645,  -154,  -863,  -152,  -863,
-    -863,  -863,  -863,  -863,  8597,  -863,  -863,  -863,   105,  -863,
-      75,  -863,  -145,  -863,  -144,  -863,  -143,  -863,  -142,  -863,
-    -141,  -140,  -863,  -863,  -863,   -27,   100,    96,    76,   106,
-     109,  -863,  -863,  4097,   107,  -863,  -863,  -863,  -863,  -863,
-    -863,  -863,  -863,  -863,  -863,  -863, 10762,  -863,   101,  2741,
-   10762,  -863,   103,   113,    67,   112,  3193,  -863,   114,  -863,
-    9463,  -863,  -863,  -863,  -133, 10762,  2741,   107,  -863,  -863,
-    2289,  -863,   110,    96,  -863,  -863,  2289,   116,  -863,  -863
+    4548,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,
+    -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,
+    -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,
+    -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,
+    -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,
+    -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,
+    -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,
+    -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,
+    -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,
+    -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,
+    -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,
+    -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,
+    -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,
+    -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,
+    -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,
+    -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,
+    -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,
+    -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,
+    -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,
+    -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,
+    -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,
+    -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,
+    -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,
+    -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,
+    -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,
+    -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,
+    -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,
+    -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,
+    -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,
+    -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,
+    -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,
+    -859,  -859,  -859,  -859,  -859,  -312,  -274,  -244,  -212,  -208,
+    -201,  -181,  -169,  -859,  -859,  -194,  -859,  -859,  -859,  -859,
+    -859,  -285,  -859,  -859,  -859,  -859,  -859,  -317,  -859,  -859,
+    -859,  -859,  -859,  -859,  -132,   -73,  -859,  -859,  -859,  -859,
+    -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,
+    -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,
+    -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -329,   -70,
+    -158,  -145,  7712,  -221,  -859,  -164,  -859,  -859,  -859,  -859,
+    5452,  -859,  -859,  -859,  -859,   -68,  -859,  -859,   932,  -859,
+    -859,  7712,   -55,  -859,  -859,  -859,  5904,   -80,  -154,  -150,
+    -142,  -135,  -130,   -80,  -129,   -79, 12060,  -859,   -45,  -354,
+     -76,  -859,  -308,  -859,   -43,   -40,  7712,  -859,  -859,  -859,
+    7712,   -72,   -71,  -859,  -265,  -859,  -257,  -859,  -859, 10761,
+     -39,  -859,  -859,  -859,   -35,   -69,  7712,  -859,   -42,   -38,
+     -37,  -859,  -302,  -859,  -235,   -32,   -33,   -28,   -27,  -217,
+     -26,   -23,   -22,   -21,   -20,   -16,  -216,   -29,   -15,   -31,
+    -303,  -859,   -13,  7712,  -859,   -14,  -859,  -214,  -859,  -859,
+    -205,  9029,  -859,  -279,  1384,  -859,  -859,  -859,  -859,  -859,
+     -39,  -299,  -859,  9462,  -275,  -859,   -34,  -859,  -137, 10761,
+   10761,  -859, 10761,  -859,  -859,  -859,  -859,  -859,  -859,  -859,
+    -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,
+    -859,  -859,  -248,  -859,  -859,  -859,    -3,  -203, 11194,    -1,
+    -859, 10761,  -859,  -859,  -310,     3,   -40,     1,  -859,  -309,
+     -80,  -859,   -30,  -859,  -319,     5,  -128, 10761,  -124,  -859,
+    -157,  -122, 10761,  -120,    10,  -118,   -80,  -859, 11627,  -859,
+    -116, 10761,     7,   -79,  -859,  7712,   -25,  6356,  -859,  7712,
+   10761,  -859,  -354,  -859,   -19,  -859,  -859,   -78,  -263,   -94,
+    -298,   -52,   -18,    -8,   -12,    29,    28,  -301,    15,  9895,
+    -859,    16,  -859,  -859,    19,    12,    17,  -859,    20,    23,
+      18, 10328,    24, 10761,    21,    22,    25,    27,    30,  -215,
+    -859,  -859,  -117,  -859,   -70,    26,    34,  -859,  -859,  -859,
+    -859,  -859,  1836,  -859,  -859,  -859,  -859,  -859,  -859,  -859,
+    -859,  -859,  5000,     3,  9462,  -264,  8163,  -859,  -859,  9462,
+    7712,  -859,   -11,  -859,  -859,  -859,  -195,  -859,  -859, 10761,
+      -6,  -859,  -859, 10761,    37,  -859,  -859,  -859, 10761,  -859,
+    -859,  -859,  -322,  -859,  -859,  -192,    35,  -859,  -859,  -859,
+    -859,  -859,  -859,  -179,  -859,  -178,  -859,  -859,  -177,    32,
+    -859,  -859,  -859,  -859,  -175,  -859,  -174,  -859,  -167,    36,
+    -859,  -166,    38,  -165,    35,  -859,  -163,  -859,    45,    46,
+    -859,  -859,   -25,   -39,  -115,  -859,  -859,  -859,  6808,  -859,
+    -859,  -859, 10761, 10761, 10761, 10761, 10761, 10761, 10761, 10761,
+   10761, 10761, 10761, 10761, 10761, 10761, 10761, 10761, 10761, 10761,
+   10761,  -859,  -859,  -859,    51,  -859,  2288,  -859,  -859,  -859,
+    2288,  -859, 10761,  -859,  -859,   -88, 10761,   -63,  -859,  -859,
+    -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,
+    -859,  -859,  -859,  -859, 10761, 10761,  -859,  -859,  -859,  -859,
+    -859,  -859,  -859,  9462,  -859,  -859,  -108,  -859,  7260,  -859,
+    -859,    52,    53,  -859,  -859,  -859,  -859,  -859,  -138,  -136,
+    -859,  -304,  -859,  -319,  -859,  -319,  -859, 10761, 10761,  -859,
+    -157,  -859,  -157,  -859, 10761, 10761,  -859,    65,    10,  -859,
+   11627,  -859, 10761,  -859,  -859,   -86,     3,   -25,  -859,  -859,
+    -859,  -859,  -859,   -78,   -78,  -263,  -263,   -94,   -94,   -94,
+     -94,  -298,  -298,   -52,   -18,    -8,   -12,    29,    28, 10761,
+    -859,  2288,  4096,    31,  3644,  -156,  -859,  -155,  -859,  -859,
+    -859,  -859,  -859,  8596,  -859,  -859,  -859,    66,  -859,    39,
+    -859,  -153,  -859,  -151,  -859,  -148,  -859,  -146,  -859,  -144,
+    -143,  -859,  -859,  -859,   -61,    64,    53,    40,    72,    74,
+    -859,  -859,  4096,    75,  -859,  -859,  -859,  -859,  -859,  -859,
+    -859,  -859,  -859,  -859,  -859, 10761,  -859,    71,  2740, 10761,
+    -859,    73,    81,    41,    80,  3192,  -859,    83,  -859,  9462,
+    -859,  -859,  -859,  -141, 10761,  2740,    75,  -859,  -859,  2288,
+    -859,    78,    53,  -859,  -859,  2288,    86,  -859,  -859
 };
 
   /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -1592,7 +1592,7 @@
        0,    99,     0,    94,     0,   109,     0,   121,   115,   123,
        0,   124,     0,    97,   131,   102,     0,   154,   136,     0,
      204,   210,     1,   617,     0,     0,     0,    96,     0,     0,
-       0,   628,     0,   681,     0,     0,     0,     0,     0,     0,
+       0,   628,     0,   680,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,   626,
        0,   624,     0,     0,   533,   149,   151,     0,   147,   202,
        0,     0,   100,     0,     0,   622,   110,   116,   120,   122,
@@ -1601,7 +1601,7 @@
        8,     2,    16,    14,    15,    17,    10,    11,    12,    13,
        3,    18,    37,    20,    25,    26,     0,     0,    30,     0,
      213,     0,    36,    34,     0,   205,   111,     0,    95,     0,
-       0,   679,     0,   636,     0,     0,     0,     0,     0,   653,
+       0,   678,     0,   636,     0,     0,     0,     0,     0,   653,
        0,     0,     0,     0,     0,     0,     0,   673,     0,   651,
        0,     0,     0,     0,    98,     0,     0,     0,   537,     0,
        0,   146,     0,   200,     0,   206,    45,    49,    52,    55,
@@ -1613,70 +1613,70 @@
      594,   560,     0,   119,     0,   127,     0,   545,   134,     0,
        0,   107,     0,   104,    38,    39,     0,    22,    23,     0,
        0,    28,    27,     0,   215,    31,    33,    40,     0,   212,
-     112,   683,     0,   684,   629,     0,     0,   682,   648,   644,
+     112,   682,     0,   683,   629,     0,     0,   681,   648,   644,
      645,   646,   647,     0,   642,     0,    93,   649,     0,     0,
      663,   664,   665,   666,     0,   661,     0,   667,     0,     0,
-     669,     0,     0,     0,     2,   677,   678,     0,   675,     0,
-       0,   623,   625,     0,   543,     0,   541,   536,   538,     0,
-     150,   148,   203,     0,     0,     0,     0,     0,     0,     0,
+     669,     0,     0,     0,     2,   677,     0,   675,     0,     0,
+     623,   625,     0,   543,     0,   541,   536,   538,     0,   150,
+     148,   203,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    76,   207,   208,     0,   563,     0,   596,   609,
-     608,     0,   600,     0,   612,   610,     0,     0,     0,   593,
-     613,   614,   615,   562,    81,    82,    84,    83,    86,    87,
-      88,    89,    90,    85,    80,     0,     0,   578,   574,   576,
-     580,   587,   595,   129,     0,   548,   549,     0,   133,     0,
-     108,     4,     0,    24,    21,    32,   214,   632,   634,     0,
-       0,   680,     0,   638,     0,   637,     0,   640,     0,     0,
-     655,     0,   654,     0,   657,     0,     0,   659,     0,     0,
-     674,     0,   671,     0,   652,   627,     0,   544,     0,   539,
-     534,    46,    47,    48,    51,    50,    53,    54,    58,    59,
-      56,    57,    61,    62,    64,    66,    68,    70,    72,    74,
-       0,   209,   565,     0,     0,     0,     0,   611,     0,   592,
-      79,    92,   128,   546,     0,   106,    19,   630,     0,   631,
-       0,   643,     0,   650,     0,   662,     0,   668,     0,   670,
-       0,     0,   676,   540,   542,     0,     0,   584,     0,     0,
-       0,   603,   602,   605,   571,   588,   547,   550,   633,   635,
-     639,   641,   656,   658,   660,   672,     0,   566,     0,     0,
-       0,   604,     0,     0,   583,     0,     0,   581,     0,    77,
-       0,   568,   597,   567,     0,   606,     0,   571,   570,   572,
-     590,   585,     0,   607,   601,   582,   591,     0,   599,   589
+       0,    76,   207,   208,     0,   563,     0,   596,   609,   608,
+       0,   600,     0,   612,   610,     0,     0,     0,   593,   613,
+     614,   615,   562,    81,    82,    84,    83,    86,    87,    88,
+      89,    90,    85,    80,     0,     0,   578,   574,   576,   580,
+     587,   595,   129,     0,   548,   549,     0,   133,     0,   108,
+       4,     0,    24,    21,    32,   214,   632,   634,     0,     0,
+     679,     0,   638,     0,   637,     0,   640,     0,     0,   655,
+       0,   654,     0,   657,     0,     0,   659,     0,     0,   674,
+       0,   671,     0,   652,   627,     0,   544,     0,   539,   534,
+      46,    47,    48,    51,    50,    53,    54,    58,    59,    56,
+      57,    61,    62,    64,    66,    68,    70,    72,    74,     0,
+     209,   565,     0,     0,     0,     0,   611,     0,   592,    79,
+      92,   128,   546,     0,   106,    19,   630,     0,   631,     0,
+     643,     0,   650,     0,   662,     0,   668,     0,   670,     0,
+       0,   676,   540,   542,     0,     0,   584,     0,     0,     0,
+     603,   602,   605,   571,   588,   547,   550,   633,   635,   639,
+     641,   656,   658,   660,   672,     0,   566,     0,     0,     0,
+     604,     0,     0,   583,     0,     0,   581,     0,    77,     0,
+     568,   597,   567,     0,   606,     0,   571,   570,   572,   590,
+     585,     0,   607,   601,   582,   591,     0,   599,   589
 };
 
   /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -863,  -863,  -863,  -863,  -863,  -863,  -863,  -863,  -863,  -863,
-    -863,  -863,  -418,  -863,  -380,  -379,  -484,  -382,  -258,  -256,
-    -253,  -257,  -252,  -255,  -863,  -478,  -863,  -485,  -863,  -491,
-    -530,    14,  -863,  -863,  -863,     7,  -397,  -863,  -863,    44,
-      53,    47,  -863,  -863,  -400,  -863,  -863,  -863,  -863,   -92,
-    -863,  -377,  -362,  -863,     9,  -863,     0,  -414,  -863,  -863,
-    -863,  -863,   150,  -863,  -863,  -863,  -546,  -548,  -218,  -331,
-    -624,  -863,  -359,  -609,  -862,  -863,  -417,  -863,  -863,  -427,
-    -426,  -863,  -863,    68,  -719,  -355,  -863,  -136,  -863,  -389,
-    -863,  -135,  -863,  -863,  -863,  -863,  -129,  -863,  -863,  -863,
-    -863,  -863,  -863,  -863,  -863,   102,  -863,  -863,     2,  -863,
-     -65,  -234,  -432,  -863,  -863,  -863,  -301,  -293,  -294,  -863,
-    -863,  -304,  -299,  -302,  -298,  -863,  -296,  -305,  -863,  -383,
-    -526
+    -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,
+    -859,  -859,  -209,  -859,  -418,  -417,  -602,  -421,  -291,  -284,
+    -286,  -283,  -281,  -287,  -859,  -473,  -859,  -490,  -859,  -497,
+    -520,    13,  -859,  -859,  -859,    14,  -394,  -859,  -859,    33,
+      42,    44,  -859,  -859,  -395,  -859,  -859,  -859,  -859,  -121,
+    -859,  -381,  -369,  -859,     9,  -859,     0,  -424,  -859,  -859,
+    -859,  -859,   113,  -859,  -859,  -859,  -545,  -549,  -252,  -365,
+    -617,  -859,  -391,  -618,  -858,  -859,  -450,  -859,  -859,  -459,
+    -458,  -859,  -859,    43,  -721,  -387,  -859,  -173,  -859,  -422,
+    -859,  -170,  -859,  -859,  -859,  -859,  -168,  -859,  -859,  -859,
+    -859,  -859,  -859,  -859,  -859,    67,  -859,  -859,     2,  -859,
+     -97,  -300,  -386,  -859,  -859,  -859,  -326,  -323,  -327,  -859,
+    -859,  -330,  -325,  -328,  -332,  -859,  -331,  -334,  -859,  -390,
+    -530
 };
 
   /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-      -1,   520,   521,   522,   782,   523,   524,   525,   526,   527,
+      -1,   520,   521,   522,   781,   523,   524,   525,   526,   527,
      528,   529,   609,   531,   577,   578,   579,   580,   581,   582,
-     583,   584,   585,   586,   587,   610,   840,   611,   765,   612,
+     583,   584,   585,   586,   587,   610,   839,   611,   764,   612,
      695,   613,   378,   640,   498,   614,   380,   381,   382,   427,
      428,   429,   383,   384,   385,   386,   387,   388,   477,   478,
      389,   390,   391,   392,   532,   480,   533,   483,   440,   441,
-     534,   395,   396,   397,   569,   473,   567,   568,   705,   706,
-     638,   777,   617,   618,   619,   620,   621,   737,   876,   912,
-     904,   905,   906,   913,   622,   623,   624,   625,   907,   879,
-     626,   627,   908,   927,   628,   629,   630,   843,   741,   845,
-     883,   902,   903,   631,   398,   399,   400,   424,   632,   470,
-     471,   450,   451,   789,   790,   402,   673,   674,   678,   403,
-     404,   684,   685,   688,   691,   405,   697,   698,   406,   452,
+     534,   395,   396,   397,   569,   473,   567,   568,   704,   705,
+     638,   776,   617,   618,   619,   620,   621,   736,   875,   911,
+     903,   904,   905,   912,   622,   623,   624,   625,   906,   878,
+     626,   627,   907,   926,   628,   629,   630,   842,   740,   844,
+     882,   901,   902,   631,   398,   399,   400,   424,   632,   470,
+     471,   450,   451,   788,   789,   402,   673,   674,   678,   403,
+     404,   684,   685,   688,   691,   405,   696,   697,   406,   452,
      453
 };
 
@@ -1685,67 +1685,67 @@
      number is the opposite.  If YYTABLE_NINF, syntax error.  */
 static const yytype_int16 yytable[] =
 {
-     394,   445,   401,   588,   444,   430,   445,   379,   637,   393,
-     773,   646,   776,   769,   377,   778,   667,   677,   842,   708,
-     494,   530,   687,   709,   446,   668,   535,   421,   437,   446,
-     466,   700,   667,   787,   720,   721,   731,   911,   475,   661,
-     710,   661,   662,   655,   919,   658,   492,   417,   481,   430,
-     328,   329,   330,   422,   911,   493,   481,   659,   669,   670,
-     671,   672,   476,   576,   482,   647,   648,   788,   437,   676,
-     722,   723,   732,   663,   676,   663,   633,   635,   589,   418,
-     676,   644,   645,   676,   437,   -35,   590,   649,   481,   407,
-     432,   650,   676,   433,   779,   634,   565,   754,   755,   756,
-     757,   758,   759,   760,   761,   762,   763,   716,   664,   717,
-     746,   735,   748,   657,   664,   589,   664,   764,   589,   664,
-     541,   664,   639,   664,   664,   774,   542,   495,   664,   576,
-     496,   543,   844,   497,   576,   549,   557,   544,   571,   573,
-     576,   550,   558,   576,   572,   574,   853,   652,   854,   637,
-     852,   637,   576,   653,   637,   415,   781,   665,   783,   791,
-     793,   708,   766,   795,   797,   542,   794,   408,   785,   796,
-     798,   576,   409,   693,   456,   458,   460,   462,   464,   465,
-     468,   800,   802,   804,   423,   807,   410,   801,   803,   805,
-     565,   808,   565,   810,   812,   426,   884,   425,   885,   811,
-     813,   926,   766,   437,   766,   890,   891,   892,   893,   894,
-     895,   794,   798,   801,   805,   808,   813,   922,   562,   411,
-     857,   859,   563,   766,   858,   860,   680,   681,   682,   683,
-     887,   708,   445,   769,   412,   444,   828,   829,   830,   831,
-     786,   718,   719,   454,   457,   459,   455,   455,   455,   413,
-     642,   439,   846,   643,   461,   446,   848,   455,   463,   467,
-     414,   455,   455,   565,   675,   724,   725,   455,   863,   677,
-     679,   686,   419,   455,   455,   867,   687,   766,   849,   689,
-     850,   851,   455,   420,   692,   667,   921,   455,   699,   637,
-     817,   455,   713,   714,   715,   821,   822,   823,   576,   576,
+     394,   430,   401,   637,   768,   646,   445,   444,   588,   393,
+     494,   445,   667,   377,   379,   841,   535,   772,   707,   775,
+     446,   437,   777,   466,   708,   446,   786,   677,   667,   668,
+     421,   475,   687,   719,   720,   730,   417,   407,   655,   661,
+     910,   699,   662,   481,   661,   430,   658,   918,   541,   562,
+     709,   482,   481,   563,   542,   476,   422,   910,   659,   634,
+     787,   437,   669,   670,   671,   672,   633,   635,   418,   721,
+     722,   731,   589,   663,   676,   408,   589,   437,   663,   676,
+     590,   647,   648,   639,   492,   676,   481,   589,   676,   328,
+     329,   330,   565,   493,   773,   778,   495,   676,   715,   496,
+     716,   -35,   497,   649,   745,   409,   747,   650,   456,   458,
+     460,   462,   464,   465,   468,   543,   734,   827,   828,   829,
+     830,   544,   843,   753,   754,   755,   756,   757,   758,   759,
+     760,   761,   762,   549,   557,   432,   571,   410,   433,   550,
+     558,   411,   572,   763,   637,   573,   637,   652,   412,   637,
+     665,   574,   782,   653,   664,   780,   851,   415,   790,   707,
+     664,   765,   664,   784,   542,   664,   693,   664,   413,   664,
+     664,   792,   794,   796,   664,   799,   801,   793,   795,   797,
+     414,   800,   802,   803,   806,   809,   565,   811,   565,   804,
+     807,   810,   425,   812,   883,   884,   437,   889,   925,   890,
+     765,   765,   891,   793,   892,   797,   893,   894,   800,   921,
+     804,   426,   807,   812,   856,   765,   858,   419,   857,   642,
+     859,   434,   643,   768,   680,   681,   682,   683,   454,   707,
+     530,   455,   457,   717,   718,   455,   886,   445,   444,   765,
+     459,   817,   766,   455,   818,   845,   852,   461,   853,   847,
+     455,   446,   463,   467,   675,   455,   455,   455,   679,   565,
+     686,   455,   689,   455,   692,   455,   698,   455,   765,   455,
+     817,   846,   576,   872,   849,   850,   420,   862,   677,   816,
+     667,   723,   724,   637,   866,   687,   712,   713,   714,   423,
+     644,   645,   920,   765,   848,   765,   895,   823,   824,   439,
+     825,   826,   831,   832,   447,   449,   469,   768,   474,   479,
+     484,   325,   481,   490,   491,   536,   537,   538,   561,   540,
+     539,   559,   657,   546,   676,   676,   545,   565,   547,   548,
+     551,   676,   676,   552,   553,   554,   555,   676,   576,   676,
+     556,   560,   874,   576,   570,   876,   564,   651,   656,   576,
+     492,   641,   576,   725,   589,   666,   662,   727,   690,   700,
+     703,   576,   726,   637,   728,   729,   711,   732,   737,   741,
+     735,   738,   742,   746,   779,   -36,   739,   743,   748,   783,
+     576,   749,   431,   -34,   750,   876,   751,   -29,   798,   752,
+     438,   393,   805,   791,   808,   813,   814,   565,   394,   393,
+     401,   394,   913,   840,   855,   908,   394,   393,   401,   765,
+     393,   377,   379,   868,   887,   393,   472,   922,   896,   637,
+     448,   888,   898,   899,   879,   897,   431,   486,  -569,   909,
+     431,   915,   914,   591,   833,   393,   919,   927,   916,   393,
+     928,   835,   834,   838,   416,   836,   438,   877,   837,   785,
+     815,   710,   873,   880,   917,   393,   923,   881,   924,   769,
+     900,   446,   770,   488,   771,   443,   701,   485,   487,   861,
+     860,   863,   865,   566,   489,   864,   869,   867,   871,   870,
+       0,     0,   393,     0,   616,     0,     0,   877,     0,     0,
+       0,     0,     0,   615,     0,     0,     0,     0,     0,     0,
+       0,   446,     0,   820,   821,   822,   576,   576,   576,   576,
      576,   576,   576,   576,   576,   576,   576,   576,   576,   576,
-     576,   576,   576,   576,   434,   766,   818,   769,   767,   819,
-     676,   676,   766,   818,   447,   847,   873,   676,   676,   766,
-     896,   449,   565,   676,   469,   676,   824,   825,   474,   826,
-     827,   479,   832,   833,   484,   325,   490,   491,   481,   875,
-     539,   536,   877,   537,   538,   540,   545,   641,   726,   546,
-     547,   548,   551,   559,   552,   666,   553,   554,   555,   637,
-     561,   556,   560,   651,   656,   589,   564,   570,   492,   662,
-     576,   576,   431,   690,   701,   729,   730,   576,   576,   728,
-     438,   393,   877,   576,   733,   576,   727,   736,   394,   393,
-     401,   394,   565,   704,   738,   379,   394,   393,   401,   914,
-     393,   909,   377,   448,   742,   393,   472,   739,   712,   740,
-     743,   744,   747,   749,   923,   637,   431,   486,   750,   751,
-     431,   752,   -36,   753,   -34,   393,   780,   784,   -29,   393,
-     792,   869,   799,   878,   814,   806,   438,   809,   815,   841,
-     880,   856,   766,   888,   897,   393,   899,   889,   900,   910,
-    -569,   898,   915,   916,   917,   591,   446,   920,   834,   928,
-     929,   835,   837,   566,   488,   836,   839,   489,   838,   487,
-     711,   416,   393,   878,   616,   816,   881,   874,   918,   924,
-     882,   925,   485,   615,   901,   862,   770,   771,   702,   866,
-     443,   861,   865,   772,   868,   864,   446,     0,   872,     0,
-       0,   870,     0,     0,     0,   871,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     576,   576,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,   660,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   696,     0,
-       0,     0,     0,     0,     0,   703,     0,   566,     0,   566,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   702,     0,   566,     0,   566,
        0,     0,     0,     0,   393,     0,   393,     0,   393,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   576,   576,
+       0,     0,     0,     0,     0,   576,   576,     0,     0,     0,
+       0,   576,     0,   576,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,   616,     0,     0,     0,     0,     0,     0,     0,
        0,   615,   394,     0,     0,     0,     0,     0,     0,     0,
@@ -1755,759 +1755,81 @@
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   566,
-       0,     0,     0,     0,     0,     0,     0,     0,   393,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   566,     0,
+       0,     0,     0,     0,     0,     0,     0,   393,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   616,     0,     0,
-       0,   616,     0,     0,     0,     0,   615,     0,     0,     0,
-     615,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   566,
-       0,     0,     0,     0,     0,     0,     0,     0,   393,     0,
+       0,     0,     0,     0,     0,     0,   616,     0,     0,     0,
+     616,     0,     0,     0,     0,   615,     0,     0,     0,   615,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   696,     0,   696,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   616,   616,     0,   616,     0,   401,     0,     0,
-       0,   615,   615,     0,   615,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   616,     0,     0,     0,     0,     0,     0,
-       0,     0,   615,     0,     0,     0,     0,     0,     0,   616,
-       0,     0,     0,     0,     0,     0,   616,     0,   615,     0,
-       0,     0,     0,     0,     0,   615,   616,     0,     0,     0,
-     616,     0,     0,     0,     0,   615,   616,     0,     0,   615,
-       0,     0,     0,   442,     0,   615,     1,     2,     3,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
-      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
-      65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
-      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
-      85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
-      95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
-     105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
-     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
-     125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
-     135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
-     145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
-     155,   156,   157,   158,   159,   160,   161,   162,   163,   164,
-     165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
-     175,   176,   177,   178,   179,   180,   181,   182,   183,   184,
-     185,   186,   187,   188,   189,   190,   191,   192,   193,   194,
-     195,   196,   197,   198,   199,   200,   201,   202,   203,   204,
-     205,   206,   207,   208,   209,   210,   211,   212,   213,   214,
-     215,   216,   217,   218,   219,   220,   221,   222,   223,   224,
-     225,   226,   227,   228,   229,   230,   231,   232,   233,   234,
-     235,   236,   237,   238,   239,   240,   241,   242,   243,   244,
-     245,   246,   247,   248,   249,   250,   251,   252,   253,   254,
-     255,   256,   257,   258,   259,   260,   261,   262,   263,   264,
-     265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
-     275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
-     285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
-     295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
-     305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
-     315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   325,     0,     0,     0,     0,     0,
-       0,     0,   326,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   327,   328,   329,   330,
-     331,     0,     0,     0,     0,     0,     0,     0,     0,   332,
-     333,   334,   335,   336,   337,   338,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   339,   340,   341,   342,   343,   344,     0,     0,     0,
-       0,     0,     0,     0,     0,   345,     0,   346,   347,   348,
-     349,   350,   351,   352,   353,   354,   355,   356,   357,   358,
-     359,   360,   361,   362,   363,   364,   365,   366,   367,   368,
-     369,   370,   371,   372,   373,   374,   375,   376,     1,     2,
-       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
-      33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
-      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
-      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
-      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
-      73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
-      83,    84,    85,    86,    87,    88,    89,    90,    91,    92,
-      93,    94,    95,    96,    97,    98,    99,   100,   101,   102,
-     103,   104,   105,   106,   107,   108,   109,   110,   111,   112,
-     113,   114,   115,   116,   117,   118,   119,   120,   121,   122,
-     123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
-     133,   134,   135,   136,   137,   138,   139,   140,   141,   142,
-     143,   144,   145,   146,   147,   148,   149,   150,   151,   152,
-     153,   154,   155,   156,   157,   158,   159,   160,   161,   162,
-     163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
-     173,   174,   175,   176,   177,   178,   179,   180,   181,   182,
-     183,   184,   185,   186,   187,   188,   189,   190,   191,   192,
-     193,   194,   195,   196,   197,   198,   199,   200,   201,   202,
-     203,   204,   205,   206,   207,   208,   209,   210,   211,   212,
-     213,   214,   215,   216,   217,   218,   219,   220,   221,   222,
-     223,   224,   225,   226,   227,   228,   229,   230,   231,   232,
-     233,   234,   235,   236,   237,   238,   239,   240,   241,   242,
-     243,   244,   245,   246,   247,   248,   249,   250,   251,   252,
-     253,   254,   255,   256,   257,   258,   259,   260,   261,   262,
-     263,   264,   265,   266,   267,   268,   269,   270,   271,   272,
-     273,   274,   275,   276,   277,   278,   279,   280,   281,   282,
-     283,   284,   285,   286,   287,   288,   289,   290,   291,   292,
-     293,   294,   295,   296,   297,   298,   299,   300,   301,   302,
-     303,   304,   305,   306,   307,   308,   309,   310,   311,   312,
-     313,   314,   315,   316,   317,   318,   319,   320,   321,   322,
-     323,   324,     0,     0,   499,   500,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   501,   502,     0,   325,     0,   591,   592,
-       0,     0,     0,     0,   593,   503,   504,   505,   506,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   327,   328,
-     329,   330,   331,     0,     0,     0,   507,   508,   509,   510,
-     511,   332,   333,   334,   335,   336,   337,   338,   594,   595,
-     596,   597,     0,   598,   599,   600,   601,   602,   603,   604,
-     605,   606,   607,   339,   340,   341,   342,   343,   344,   512,
-     513,   514,   515,   516,   517,   518,   519,   345,   608,   346,
-     347,   348,   349,   350,   351,   352,   353,   354,   355,   356,
-     357,   358,   359,   360,   361,   362,   363,   364,   365,   366,
-     367,   368,   369,   370,   371,   372,   373,   374,   375,   376,
-       1,     2,     3,     4,     5,     6,     7,     8,     9,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
-      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
-      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
-      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
-      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
-      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
-      81,    82,    83,    84,    85,    86,    87,    88,    89,    90,
-      91,    92,    93,    94,    95,    96,    97,    98,    99,   100,
-     101,   102,   103,   104,   105,   106,   107,   108,   109,   110,
-     111,   112,   113,   114,   115,   116,   117,   118,   119,   120,
-     121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
-     131,   132,   133,   134,   135,   136,   137,   138,   139,   140,
-     141,   142,   143,   144,   145,   146,   147,   148,   149,   150,
-     151,   152,   153,   154,   155,   156,   157,   158,   159,   160,
-     161,   162,   163,   164,   165,   166,   167,   168,   169,   170,
-     171,   172,   173,   174,   175,   176,   177,   178,   179,   180,
-     181,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-     191,   192,   193,   194,   195,   196,   197,   198,   199,   200,
-     201,   202,   203,   204,   205,   206,   207,   208,   209,   210,
-     211,   212,   213,   214,   215,   216,   217,   218,   219,   220,
-     221,   222,   223,   224,   225,   226,   227,   228,   229,   230,
-     231,   232,   233,   234,   235,   236,   237,   238,   239,   240,
-     241,   242,   243,   244,   245,   246,   247,   248,   249,   250,
-     251,   252,   253,   254,   255,   256,   257,   258,   259,   260,
-     261,   262,   263,   264,   265,   266,   267,   268,   269,   270,
-     271,   272,   273,   274,   275,   276,   277,   278,   279,   280,
-     281,   282,   283,   284,   285,   286,   287,   288,   289,   290,
-     291,   292,   293,   294,   295,   296,   297,   298,   299,   300,
-     301,   302,   303,   304,   305,   306,   307,   308,   309,   310,
-     311,   312,   313,   314,   315,   316,   317,   318,   319,   320,
-     321,   322,   323,   324,     0,     0,   499,   500,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   501,   502,     0,   325,     0,
-     591,   768,     0,     0,     0,     0,   593,   503,   504,   505,
-     506,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     327,   328,   329,   330,   331,     0,     0,     0,   507,   508,
-     509,   510,   511,   332,   333,   334,   335,   336,   337,   338,
-     594,   595,   596,   597,     0,   598,   599,   600,   601,   602,
-     603,   604,   605,   606,   607,   339,   340,   341,   342,   343,
-     344,   512,   513,   514,   515,   516,   517,   518,   519,   345,
-     608,   346,   347,   348,   349,   350,   351,   352,   353,   354,
-     355,   356,   357,   358,   359,   360,   361,   362,   363,   364,
-     365,   366,   367,   368,   369,   370,   371,   372,   373,   374,
-     375,   376,     1,     2,     3,     4,     5,     6,     7,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
-      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
-      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
-      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
-      59,    60,    61,    62,    63,    64,    65,    66,    67,    68,
-      69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
-      79,    80,    81,    82,    83,    84,    85,    86,    87,    88,
-      89,    90,    91,    92,    93,    94,    95,    96,    97,    98,
-      99,   100,   101,   102,   103,   104,   105,   106,   107,   108,
-     109,   110,   111,   112,   113,   114,   115,   116,   117,   118,
-     119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
-     129,   130,   131,   132,   133,   134,   135,   136,   137,   138,
-     139,   140,   141,   142,   143,   144,   145,   146,   147,   148,
-     149,   150,   151,   152,   153,   154,   155,   156,   157,   158,
-     159,   160,   161,   162,   163,   164,   165,   166,   167,   168,
-     169,   170,   171,   172,   173,   174,   175,   176,   177,   178,
-     179,   180,   181,   182,   183,   184,   185,   186,   187,   188,
-     189,   190,   191,   192,   193,   194,   195,   196,   197,   198,
-     199,   200,   201,   202,   203,   204,   205,   206,   207,   208,
-     209,   210,   211,   212,   213,   214,   215,   216,   217,   218,
-     219,   220,   221,   222,   223,   224,   225,   226,   227,   228,
-     229,   230,   231,   232,   233,   234,   235,   236,   237,   238,
-     239,   240,   241,   242,   243,   244,   245,   246,   247,   248,
-     249,   250,   251,   252,   253,   254,   255,   256,   257,   258,
-     259,   260,   261,   262,   263,   264,   265,   266,   267,   268,
-     269,   270,   271,   272,   273,   274,   275,   276,   277,   278,
-     279,   280,   281,   282,   283,   284,   285,   286,   287,   288,
-     289,   290,   291,   292,   293,   294,   295,   296,   297,   298,
-     299,   300,   301,   302,   303,   304,   305,   306,   307,   308,
-     309,   310,   311,   312,   313,   314,   315,   316,   317,   318,
-     319,   320,   321,   322,   323,   324,     0,     0,   499,   500,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   501,   502,     0,
-     325,     0,   591,     0,     0,     0,     0,     0,   593,   503,
-     504,   505,   506,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   327,   328,   329,   330,   331,     0,     0,     0,
-     507,   508,   509,   510,   511,   332,   333,   334,   335,   336,
-     337,   338,   594,   595,   596,   597,     0,   598,   599,   600,
-     601,   602,   603,   604,   605,   606,   607,   339,   340,   341,
-     342,   343,   344,   512,   513,   514,   515,   516,   517,   518,
-     519,   345,   608,   346,   347,   348,   349,   350,   351,   352,
-     353,   354,   355,   356,   357,   358,   359,   360,   361,   362,
-     363,   364,   365,   366,   367,   368,   369,   370,   371,   372,
-     373,   374,   375,   376,     1,     2,     3,     4,     5,     6,
-       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
-      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
-      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
-      67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
-      77,    78,    79,    80,    81,    82,    83,    84,    85,    86,
-      87,    88,    89,    90,    91,    92,    93,    94,    95,    96,
-      97,    98,    99,   100,   101,   102,   103,   104,   105,   106,
-     107,   108,   109,   110,   111,   112,   113,   114,   115,   116,
-     117,   118,   119,   120,   121,   122,   123,   124,   125,   126,
-     127,   128,   129,   130,   131,   132,   133,   134,   135,   136,
-     137,   138,   139,   140,   141,   142,   143,   144,   145,   146,
-     147,   148,   149,   150,   151,   152,   153,   154,   155,   156,
-     157,   158,   159,   160,   161,   162,   163,   164,   165,   166,
-     167,   168,   169,   170,   171,   172,   173,   174,   175,   176,
-     177,   178,   179,   180,   181,   182,   183,   184,   185,   186,
-     187,   188,   189,   190,   191,   192,   193,   194,   195,   196,
-     197,   198,   199,   200,   201,   202,   203,   204,   205,   206,
-     207,   208,   209,   210,   211,   212,   213,   214,   215,   216,
-     217,   218,   219,   220,   221,   222,   223,   224,   225,   226,
-     227,   228,   229,   230,   231,   232,   233,   234,   235,   236,
-     237,   238,   239,   240,   241,   242,   243,   244,   245,   246,
-     247,   248,   249,   250,   251,   252,   253,   254,   255,   256,
-     257,   258,   259,   260,   261,   262,   263,   264,   265,   266,
-     267,   268,   269,   270,   271,   272,   273,   274,   275,   276,
-     277,   278,   279,   280,   281,   282,   283,   284,   285,   286,
-     287,   288,   289,   290,   291,   292,   293,   294,   295,   296,
-     297,   298,   299,   300,   301,   302,   303,   304,   305,   306,
-     307,   308,   309,   310,   311,   312,   313,   314,   315,   316,
-     317,   318,   319,   320,   321,   322,   323,   324,     0,     0,
-     499,   500,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   501,
-     502,     0,   325,     0,   484,     0,     0,     0,     0,     0,
-     593,   503,   504,   505,   506,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   327,   328,   329,   330,   331,     0,
-       0,     0,   507,   508,   509,   510,   511,   332,   333,   334,
-     335,   336,   337,   338,   594,   595,   596,   597,     0,   598,
-     599,   600,   601,   602,   603,   604,   605,   606,   607,   339,
-     340,   341,   342,   343,   344,   512,   513,   514,   515,   516,
-     517,   518,   519,   345,   608,   346,   347,   348,   349,   350,
-     351,   352,   353,   354,   355,   356,   357,   358,   359,   360,
-     361,   362,   363,   364,   365,   366,   367,   368,   369,   370,
-     371,   372,   373,   374,   375,   376,     1,     2,     3,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
-      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
-      65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
-      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
-      85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
-      95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
-     105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
-     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
-     125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
-     135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
-     145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
-     155,   156,   157,   158,   159,   160,   161,   162,   163,   164,
-     165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
-     175,   176,   177,   178,   179,   180,   181,   182,   183,   184,
-     185,   186,   187,   188,   189,   190,   191,   192,   193,   194,
-     195,   196,   197,   198,   199,   200,   201,   202,   203,   204,
-     205,   206,   207,   208,   209,   210,   211,   212,   213,   214,
-     215,   216,   217,   218,   219,   220,   221,   222,   223,   224,
-     225,   226,   227,   228,   229,   230,   231,   232,   233,   234,
-     235,   236,   237,   238,   239,   240,   241,   242,   243,   244,
-     245,   246,   247,   248,   249,   250,   251,   252,   253,   254,
-     255,   256,   257,   258,   259,   260,   261,   262,   263,   264,
-     265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
-     275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
-     285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
-     295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
-     305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
-     315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
-       0,     0,   499,   500,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   501,   502,     0,   325,     0,     0,     0,     0,     0,
-       0,     0,   593,   503,   504,   505,   506,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   327,   328,   329,   330,
-     331,     0,     0,     0,   507,   508,   509,   510,   511,   332,
-     333,   334,   335,   336,   337,   338,   594,   595,   596,   597,
-       0,   598,   599,   600,   601,   602,   603,   604,   605,   606,
-     607,   339,   340,   341,   342,   343,   344,   512,   513,   514,
-     515,   516,   517,   518,   519,   345,   608,   346,   347,   348,
-     349,   350,   351,   352,   353,   354,   355,   356,   357,   358,
-     359,   360,   361,   362,   363,   364,   365,   366,   367,   368,
-     369,   370,   371,   372,   373,   374,   375,   376,     1,     2,
-       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
-      33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
-      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
-      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
-      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
-      73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
-      83,    84,    85,    86,    87,    88,    89,    90,    91,    92,
-      93,    94,    95,    96,    97,    98,    99,   100,   101,   102,
-     103,   104,   105,   106,   107,   108,   109,   110,   111,   112,
-     113,   114,   115,   116,   117,   118,   119,   120,   121,   122,
-     123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
-     133,   134,   135,   136,   137,   138,   139,   140,   141,   142,
-     143,   144,   145,   146,   147,   148,   149,   150,   151,   152,
-     153,   154,   155,   156,   157,   158,   159,   160,   161,   162,
-     163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
-     173,   174,   175,   176,   177,   178,   179,   180,   181,   182,
-     183,   184,   185,   186,   187,   188,   189,   190,   191,   192,
-     193,   194,   195,   196,   197,   198,   199,   200,   201,   202,
-     203,   204,   205,   206,   207,   208,   209,   210,   211,   212,
-     213,   214,   215,   216,   217,   218,   219,   220,   221,   222,
-     223,   224,   225,   226,   227,   228,   229,   230,   231,   232,
-     233,   234,   235,   236,   237,   238,   239,   240,   241,   242,
-     243,   244,   245,   246,   247,   248,   249,   250,   251,   252,
-     253,   254,   255,   256,   257,   258,   259,   260,   261,   262,
-     263,   264,   265,   266,   267,   268,   269,   270,   271,   272,
-     273,   274,   275,   276,   277,   278,   279,   280,   281,   282,
-     283,   284,   285,   286,   287,   288,   289,   290,   291,   292,
-     293,   294,   295,   296,   297,   298,   299,   300,   301,   302,
-     303,   304,   305,   306,   307,   308,   309,   310,   311,   312,
-     313,   314,   315,   316,   317,   318,   319,   320,   321,   322,
-     323,   324,     0,     0,   499,   500,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   501,   502,     0,   325,     0,     0,     0,
-       0,     0,     0,     0,   593,   503,   504,   505,   506,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   327,   328,
-     329,   330,   331,     0,     0,     0,   507,   508,   509,   510,
-     511,   332,   333,   334,   335,   336,   337,   338,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   339,   340,   341,   342,   343,   344,   512,
-     513,   514,   515,   516,   517,   518,   519,   345,     0,   346,
-     347,   348,   349,   350,   351,   352,   353,   354,   355,   356,
-     357,   358,   359,   360,   361,   362,   363,   364,   365,   366,
-     367,   368,   369,   370,   371,   372,   373,   374,   375,   376,
-       1,     2,     3,     4,     5,     6,     7,     8,     9,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
-      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
-      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
-      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
-      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
-      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
-      81,    82,    83,    84,    85,    86,    87,    88,    89,    90,
-      91,    92,    93,    94,    95,    96,    97,    98,    99,   100,
-     101,   102,   103,   104,   105,   106,   107,   108,   109,   110,
-     111,   112,   113,   114,   115,   116,   117,   118,   119,   120,
-     121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
-     131,   132,   133,   134,   135,   136,   137,   138,   139,   140,
-     141,   142,   143,   144,   145,   146,   147,   148,   149,   150,
-     151,   152,   153,   154,   155,   156,   157,   158,   159,   160,
-     161,   162,   163,   164,   165,   166,   167,   168,   169,   170,
-     171,   172,   173,   174,   175,   176,   177,   178,   179,   180,
-     181,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-     191,   192,   193,   194,   195,   196,   197,   198,   199,   200,
-     201,   202,   203,   204,   205,   206,   207,   208,   209,   210,
-     211,   212,   213,   214,   215,   216,   217,   218,   219,   220,
-     221,   222,   223,   224,   225,   226,   227,   228,   229,   230,
-     231,   232,   233,   234,   235,   236,   237,   238,   239,   240,
-     241,   242,   243,   244,   245,   246,   247,   248,   249,   250,
-     251,   252,   253,   254,   255,   256,   257,   258,   259,   260,
-     261,   262,   263,   264,   265,   266,   267,   268,   269,   270,
-     271,   272,   273,   274,   275,   276,   277,   278,   279,   280,
-     281,   282,   283,   284,   285,   286,   287,   288,   289,   290,
-     291,   292,   293,   294,   295,   296,   297,   298,   299,   300,
-     301,   302,   303,   304,   305,   306,   307,   308,   309,   310,
-     311,   312,   313,   314,     0,     0,     0,   318,   319,   320,
-     321,   322,   323,   324,     0,     0,   499,   500,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   501,   502,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   503,   504,   505,
-     506,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     327,   328,   329,   330,     0,     0,     0,     0,   507,   508,
-     509,   510,   511,   332,   333,   334,   335,   336,   337,   338,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   339,   340,   341,   342,   343,
-     344,   512,   513,   514,   515,   516,   517,   518,   519,   345,
-       0,   346,   347,   348,   349,   350,   351,   352,   353,   354,
-     355,   356,   357,   358,   359,   360,   361,   362,   363,   364,
-     365,   366,   367,   368,   369,   370,   371,   372,   373,   374,
-     375,   376,     1,     2,     3,     4,     5,     6,     7,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
-      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
-      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
-      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
-      59,    60,    61,    62,    63,    64,    65,    66,    67,    68,
-      69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
-      79,    80,    81,    82,    83,    84,    85,    86,    87,    88,
-      89,    90,    91,    92,    93,    94,    95,    96,    97,    98,
-      99,   100,   101,   102,   103,   104,   105,   106,   107,   108,
-     109,   110,   111,   112,   113,   114,   115,   116,   117,   118,
-     119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
-     129,   130,   131,   132,   133,   134,   135,   136,   137,   138,
-     139,   140,   141,   142,   143,   144,   145,   146,   147,   148,
-     149,   150,   151,   152,   153,   154,   155,   156,   157,   158,
-     159,   160,   161,   162,   163,   164,   165,   166,   167,   168,
-     169,   170,   171,   172,   173,   174,   175,   176,   177,   178,
-     179,   180,   181,   182,   183,   184,   185,   186,   187,   188,
-     189,   190,   191,   192,   193,   194,   195,   196,   197,   198,
-     199,   200,   201,   202,   203,   204,   205,   206,   207,   208,
-     209,   210,   211,   212,   213,   214,   215,   216,   217,   218,
-     219,   220,   221,   222,   223,   224,   225,   226,   227,   228,
-     229,   230,   231,   232,   233,   234,   235,   236,   237,   238,
-     239,   240,   241,   242,   243,   244,   245,   246,   247,   248,
-     249,   250,   251,   252,   253,   254,   255,   256,   257,   258,
-     259,   260,   261,   262,   263,   264,   265,   266,   267,   268,
-     269,   270,   271,   272,   273,   274,   275,   276,   277,   278,
-     279,   280,   281,   282,   283,   284,   285,   286,   287,   288,
-     289,   290,   291,   292,   293,   294,   295,   296,   297,   298,
-     299,   300,   301,   302,   303,   304,   305,   306,   307,   308,
-     309,   310,   311,   312,   313,   314,   315,   316,   317,   318,
-     319,   320,   321,   322,   323,   324,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     325,     0,     0,     0,     0,     0,     0,     0,   326,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   327,   328,   329,   330,   331,     0,     0,     0,
-       0,     0,     0,     0,     0,   332,   333,   334,   335,   336,
-     337,   338,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   339,   340,   341,
-     342,   343,   344,     0,     0,     0,     0,     0,     0,     0,
-       0,   345,     0,   346,   347,   348,   349,   350,   351,   352,
-     353,   354,   355,   356,   357,   358,   359,   360,   361,   362,
-     363,   364,   365,   366,   367,   368,   369,   370,   371,   372,
-     373,   374,   375,   376,     1,     2,     3,     4,     5,     6,
-       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
-      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
-      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
-      67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
-      77,    78,    79,    80,    81,    82,    83,    84,    85,    86,
-      87,    88,    89,    90,    91,    92,    93,    94,    95,    96,
-      97,    98,    99,   100,   101,   102,   103,   104,   105,   106,
-     107,   108,   109,   110,   111,   112,   113,   114,   115,   116,
-     117,   118,   119,   120,   121,   122,   123,   124,   125,   126,
-     127,   128,   129,   130,   131,   132,   133,   134,   135,   136,
-     137,   138,   139,   140,   141,   142,   143,   144,   145,   146,
-     147,   148,   149,   150,   151,   152,   153,   154,   155,   156,
-     157,   158,   159,   160,   161,   162,   163,   164,   165,   166,
-     167,   168,   169,   170,   171,   172,   173,   174,   175,   176,
-     177,   178,   179,   180,   181,   182,   183,   184,   185,   186,
-     187,   188,   189,   190,   191,   192,   193,   194,   195,   196,
-     197,   198,   199,   200,   201,   202,   203,   204,   205,   206,
-     207,   208,   209,   210,   211,   212,   213,   214,   215,   216,
-     217,   218,   219,   220,   221,   222,   223,   224,   225,   226,
-     227,   228,   229,   230,   231,   232,   233,   234,   235,   236,
-     237,   238,   239,   240,   241,   242,   243,   244,   245,   246,
-     247,   248,   249,   250,   251,   252,   253,   254,   255,   256,
-     257,   258,   259,   260,   261,   262,   263,   264,   265,   266,
-     267,   268,   269,   270,   271,   272,   273,   274,   275,   276,
-     277,   278,   279,   280,   281,   282,   283,   284,   285,   286,
-     287,   288,   289,   290,   291,   292,   293,   294,   295,   296,
-     297,   298,   299,   300,   301,   302,   303,   304,   305,   306,
-     307,   308,   309,   310,   311,   312,   313,   314,     0,     0,
-       0,   318,   319,   320,   321,   322,   323,   324,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   566,     0,
+       0,     0,     0,     0,     0,     0,     0,   393,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   327,   328,   329,   330,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   332,   333,   334,
-     335,   336,   337,   338,   594,     0,     0,   597,     0,   598,
-     599,     0,     0,   602,     0,     0,     0,     0,     0,   339,
-     340,   341,   342,   343,   344,     0,     0,     0,     0,     0,
-       0,     0,     0,   345,     0,   346,   347,   348,   349,   350,
-     351,   352,   353,   354,   355,   356,   357,   358,   359,   360,
-     361,   362,   363,   364,   365,   366,   367,   368,   369,   370,
-     371,   372,   373,   374,   375,   376,     1,     2,     3,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
-      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
-      65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
-      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
-      85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
-      95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
-     105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
-     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
-     125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
-     135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
-     145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
-     155,   156,   157,   158,   159,   160,   161,   162,   163,   164,
-     165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
-     175,   176,   177,   178,   179,   180,   181,   182,   183,   184,
-     185,   186,   187,   188,   189,   190,   191,   192,   193,   194,
-     195,   196,   197,   198,   199,   200,   201,   202,   203,   204,
-     205,   206,   207,   208,   209,   210,   211,   212,   213,   214,
-     215,   216,   217,   218,   219,   220,   221,   222,   223,   224,
-     225,   226,   227,   228,   229,   230,   231,   232,   233,   234,
-     235,   236,   237,   238,   239,   240,   241,   242,   243,   244,
-     245,   246,   247,   248,   249,   250,   251,   252,   253,   254,
-     255,   256,   257,   258,   259,   260,   261,   262,   263,   264,
-     265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
-     275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
-     285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
-     295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
-     305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
-       0,     0,     0,   318,   319,   320,   321,   322,   323,   324,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   616,   616,     0,   616,     0,   401,     0,     0,     0,
+     615,   615,     0,   615,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   435,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   327,   328,   329,   330,
-       0,     0,     0,     0,     0,     0,     0,     0,   436,   332,
-     333,   334,   335,   336,   337,   338,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   339,   340,   341,   342,   343,   344,     0,     0,     0,
-       0,     0,     0,     0,     0,   345,     0,   346,   347,   348,
-     349,   350,   351,   352,   353,   354,   355,   356,   357,   358,
-     359,   360,   361,   362,   363,   364,   365,   366,   367,   368,
-     369,   370,   371,   372,   373,   374,   375,   376,     1,     2,
-       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
-      33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
-      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
-      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
-      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
-      73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
-      83,    84,    85,    86,    87,    88,    89,    90,    91,    92,
-      93,    94,    95,    96,    97,    98,    99,   100,   101,   102,
-     103,   104,   105,   106,   107,   108,   109,   110,   111,   112,
-     113,   114,   115,   116,   117,   118,   119,   120,   121,   122,
-     123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
-     133,   134,   135,   136,   137,   138,   139,   140,   141,   142,
-     143,   144,   145,   146,   147,   148,   149,   150,   151,   152,
-     153,   154,   155,   156,   157,   158,   159,   160,   161,   162,
-     163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
-     173,   174,   175,   176,   177,   178,   179,   180,   181,   182,
-     183,   184,   185,   186,   187,   188,   189,   190,   191,   192,
-     193,   194,   195,   196,   197,   198,   199,   200,   201,   202,
-     203,   204,   205,   206,   207,   208,   209,   210,   211,   212,
-     213,   214,   215,   216,   217,   218,   219,   220,   221,   222,
-     223,   224,   225,   226,   227,   228,   229,   230,   231,   232,
-     233,   234,   235,   236,   237,   238,   239,   240,   241,   242,
-     243,   244,   245,   246,   247,   248,   249,   250,   251,   252,
-     253,   254,   255,   256,   257,   258,   259,   260,   261,   262,
-     263,   264,   265,   266,   267,   268,   269,   270,   271,   272,
-     273,   274,   275,   276,   277,   278,   279,   280,   281,   282,
-     283,   284,   285,   286,   287,   288,   289,   290,   291,   292,
-     293,   294,   295,   296,   297,   298,   299,   300,   301,   302,
-     303,   304,   305,   306,   307,   308,   309,   310,   311,   312,
-     313,   314,     0,     0,     0,   318,   319,   320,   321,   322,
-     323,   324,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   325,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   327,   328,
-     329,   330,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   332,   333,   334,   335,   336,   337,   338,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   339,   340,   341,   342,   343,   344,     0,
-       0,     0,     0,     0,     0,     0,     0,   345,     0,   346,
-     347,   348,   349,   350,   351,   352,   353,   354,   355,   356,
-     357,   358,   359,   360,   361,   362,   363,   364,   365,   366,
-     367,   368,   369,   370,   371,   372,   373,   374,   375,   376,
-       1,     2,     3,     4,     5,     6,     7,     8,     9,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
-      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
-      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
-      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
-      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
-      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
-      81,    82,    83,    84,    85,    86,    87,    88,    89,    90,
-      91,    92,    93,    94,    95,    96,    97,    98,    99,   100,
-     101,   102,   103,   104,   105,   106,   107,   108,   109,   110,
-     111,   112,   113,   114,   115,   116,   117,   118,   119,   120,
-     121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
-     131,   132,   133,   134,   135,   136,   137,   138,   139,   140,
-     141,   142,   143,   144,   145,   146,   147,   148,   149,   150,
-     151,   152,   153,   154,   155,   156,   157,   158,   159,   160,
-     161,   162,   163,   164,   165,   166,   167,   168,   169,   170,
-     171,   172,   173,   174,   175,   176,   177,   178,   179,   180,
-     181,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-     191,   192,   193,   194,   195,   196,   197,   198,   199,   200,
-     201,   202,   203,   204,   205,   206,   207,   208,   209,   210,
-     211,   212,   213,   214,   215,   216,   217,   218,   219,   220,
-     221,   222,   223,   224,   225,   226,   227,   228,   229,   230,
-     231,   232,   233,   234,   235,   236,   237,   238,   239,   240,
-     241,   242,   243,   244,   245,   246,   247,   248,   249,   250,
-     251,   252,   253,   254,   255,   256,   257,   258,   259,   260,
-     261,   262,   263,   264,   265,   266,   267,   268,   269,   270,
-     271,   272,   273,   274,   275,   276,   277,   278,   279,   280,
-     281,   282,   283,   284,   285,   286,   287,   288,   289,   290,
-     291,   292,   293,   294,   295,   296,   297,   298,   299,   300,
-     301,   302,   303,   304,   305,   306,   307,   308,   309,   310,
-     311,   312,   313,   314,     0,     0,     0,   318,   319,   320,
-     321,   322,   323,   324,     0,     0,     0,     0,     0,     0,
+       0,     0,   616,     0,     0,     0,     0,     0,     0,     0,
+       0,   615,     0,     0,     0,     0,     0,     0,   616,     0,
+       0,     0,     0,     0,     0,   616,     0,   615,     0,     0,
+       0,     0,     0,     0,   615,   616,     0,     0,     0,   616,
+       0,     0,     0,     0,   615,   616,     0,     0,   615,     0,
+       0,     0,   442,     0,   615,     1,     2,     3,     4,     5,
+       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
+      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
+      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
+      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
+      66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
+      76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
+      86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
+      96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
+     106,   107,   108,   109,   110,   111,   112,   113,   114,   115,
+     116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
+     126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
+     136,   137,   138,   139,   140,   141,   142,   143,   144,   145,
+     146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
+     156,   157,   158,   159,   160,   161,   162,   163,   164,   165,
+     166,   167,   168,   169,   170,   171,   172,   173,   174,   175,
+     176,   177,   178,   179,   180,   181,   182,   183,   184,   185,
+     186,   187,   188,   189,   190,   191,   192,   193,   194,   195,
+     196,   197,   198,   199,   200,   201,   202,   203,   204,   205,
+     206,   207,   208,   209,   210,   211,   212,   213,   214,   215,
+     216,   217,   218,   219,   220,   221,   222,   223,   224,   225,
+     226,   227,   228,   229,   230,   231,   232,   233,   234,   235,
+     236,   237,   238,   239,   240,   241,   242,   243,   244,   245,
+     246,   247,   248,   249,   250,   251,   252,   253,   254,   255,
+     256,   257,   258,   259,   260,   261,   262,   263,   264,   265,
+     266,   267,   268,   269,   270,   271,   272,   273,   274,   275,
+     276,   277,   278,   279,   280,   281,   282,   283,   284,   285,
+     286,   287,   288,   289,   290,   291,   292,   293,   294,   295,
+     296,   297,   298,   299,   300,   301,   302,   303,   304,   305,
+     306,   307,   308,   309,   310,   311,   312,   313,   314,   315,
+     316,   317,   318,   319,   320,   321,   322,   323,   324,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   707,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   325,     0,     0,     0,     0,     0,     0,
+       0,   326,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   327,   328,   329,   330,   331,
+       0,     0,     0,     0,     0,     0,     0,     0,   332,   333,
+     334,   335,   336,   337,   338,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     327,   328,   329,   330,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   332,   333,   334,   335,   336,   337,   338,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   339,   340,   341,   342,   343,
-     344,     0,     0,     0,     0,     0,     0,     0,     0,   345,
-       0,   346,   347,   348,   349,   350,   351,   352,   353,   354,
-     355,   356,   357,   358,   359,   360,   361,   362,   363,   364,
-     365,   366,   367,   368,   369,   370,   371,   372,   373,   374,
-     375,   376,     1,     2,     3,     4,     5,     6,     7,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
-      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
-      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
-      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
-      59,    60,    61,    62,    63,    64,    65,    66,    67,    68,
-      69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
-      79,    80,    81,    82,    83,    84,    85,    86,    87,    88,
-      89,    90,    91,    92,    93,    94,    95,    96,    97,    98,
-      99,   100,   101,   102,   103,   104,   105,   106,   107,   108,
-     109,   110,   111,   112,   113,   114,   115,   116,   117,   118,
-     119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
-     129,   130,   131,   132,   133,   134,   135,   136,   137,   138,
-     139,   140,   141,   142,   143,   144,   145,   146,   147,   148,
-     149,   150,   151,   152,   153,   154,   155,   156,   157,   158,
-     159,   160,   161,   162,   163,   164,   165,   166,   167,   168,
-     169,   170,   171,   172,   173,   174,   175,   176,   177,   178,
-     179,   180,   181,   182,   183,   184,   185,   186,   187,   188,
-     189,   190,   191,   192,   193,   194,   195,   196,   197,   198,
-     199,   200,   201,   202,   203,   204,   205,   206,   207,   208,
-     209,   210,   211,   212,   213,   214,   215,   216,   217,   218,
-     219,   220,   221,   222,   223,   224,   225,   226,   227,   228,
-     229,   230,   231,   232,   233,   234,   235,   236,   237,   238,
-     239,   240,   241,   242,   243,   244,   245,   246,   247,   248,
-     249,   250,   251,   252,   253,   254,   255,   256,   257,   258,
-     259,   260,   261,   262,   263,   264,   265,   266,   267,   268,
-     269,   270,   271,   272,   273,   274,   275,   276,   277,   278,
-     279,   280,   281,   282,   283,   284,   285,   286,   287,   288,
-     289,   290,   291,   292,   293,   294,   295,   296,   297,   298,
-     299,   300,   301,   302,   303,   304,   305,   306,   307,   308,
-     309,   310,   311,   312,   313,   314,     0,     0,     0,   318,
-     319,   320,   321,   322,   323,   324,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   820,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   327,   328,   329,   330,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   332,   333,   334,   335,   336,
-     337,   338,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   339,   340,   341,
-     342,   343,   344,     0,     0,     0,     0,     0,     0,     0,
-       0,   345,     0,   346,   347,   348,   349,   350,   351,   352,
-     353,   354,   355,   356,   357,   358,   359,   360,   361,   362,
-     363,   364,   365,   366,   367,   368,   369,   370,   371,   372,
-     373,   374,   375,   376,     1,     2,     3,     4,     5,     6,
-       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
-      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
-      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
-      67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
-      77,    78,    79,    80,    81,    82,    83,    84,    85,    86,
-      87,    88,    89,    90,    91,    92,    93,    94,    95,    96,
-      97,    98,    99,   100,   101,   102,   103,   104,   105,   106,
-     107,   108,   109,   110,   111,   112,   113,   114,   115,   116,
-     117,   118,   119,   120,   121,   122,   123,   124,   125,   126,
-     127,   128,   129,   130,   131,   132,   133,   134,   135,   136,
-     137,   138,   139,   140,   141,   142,   143,   144,   145,   146,
-     147,   148,   149,   150,   151,   152,   153,   154,   155,   156,
-     157,   158,   159,   160,   161,   162,   163,   164,   165,   166,
-     167,   168,   169,   170,   171,   172,   173,   174,   175,   176,
-     177,   178,   179,   180,   181,   182,   183,   184,   185,   186,
-     187,   188,   189,   190,   191,   192,   193,   194,   195,   196,
-     197,   198,   199,   200,   201,   202,   203,   204,   205,   206,
-     207,   208,   209,   210,   211,   212,   213,   214,   215,   216,
-     217,   218,   219,   220,   221,   222,   223,   224,   225,   226,
-     227,   228,   229,   230,   231,   232,   233,   234,   235,   236,
-     237,   238,   239,   240,   241,   242,   243,   244,   245,   246,
-     247,   248,   249,   250,   251,   252,   253,   254,   255,   256,
-     257,   258,   259,   260,   261,   262,   263,   264,   265,   266,
-     267,   268,   269,   270,   271,   272,   273,   274,   275,   276,
-     277,   278,   279,   280,   281,   282,   283,   284,   285,   286,
-     287,   288,   289,   290,   291,   292,   293,   294,   295,   296,
-     297,   298,   299,   300,   301,   302,   303,   304,   305,   306,
-     307,   308,   309,   310,   311,   312,   313,   314,     0,     0,
-       0,   318,   319,   320,   321,   322,   323,   324,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   855,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   327,   328,   329,   330,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   332,   333,   334,
-     335,   336,   337,   338,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   339,
-     340,   341,   342,   343,   344,     0,     0,     0,     0,     0,
-       0,     0,     0,   345,     0,   346,   347,   348,   349,   350,
-     351,   352,   353,   354,   355,   356,   357,   358,   359,   360,
-     361,   362,   363,   364,   365,   366,   367,   368,   369,   370,
-     371,   372,   373,   374,   375,   376,     1,     2,     3,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
-      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
-      65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
-      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
-      85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
-      95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
-     105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
-     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
-     125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
-     135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
-     145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
-     155,   156,   157,   158,   159,   160,   161,   162,   163,   164,
-     165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
-     175,   176,   177,   178,   179,   180,   181,   182,   183,   184,
-     185,   186,   187,   188,   189,   190,   191,   192,   193,   194,
-     195,   196,   197,   198,   199,   200,   201,   202,   203,   204,
-     205,   206,   207,   208,   209,   210,   211,   212,   213,   214,
-     215,   216,   217,   218,   219,   220,   221,   222,   223,   224,
-     225,   226,   227,   228,   229,   230,   231,   232,   233,   234,
-     235,   236,   237,   238,   239,   240,   241,   242,   243,   244,
-     245,   246,   247,   248,   249,   250,   251,   252,   253,   254,
-     255,   256,   257,   258,   259,   260,   261,   262,   263,   264,
-     265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
-     275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
-     285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
-     295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
-     305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
-       0,     0,     0,   318,   319,   320,   321,   322,   323,   324,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   327,   328,   329,   330,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   332,
-     333,   334,   335,   336,   337,   338,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   339,   340,   341,   342,   343,   344,     0,     0,     0,
-       0,     0,     0,     0,     0,   345,     0,   346,   347,   348,
-     349,   350,   351,   352,   353,   354,   355,   356,   357,   358,
-     359,   360,   361,   362,   363,   364,   365,   366,   367,   368,
-     369,   370,   371,   372,   373,   374,   375,   376,     2,     3,
+     339,   340,   341,   342,   343,   344,     0,     0,     0,     0,
+       0,     0,     0,     0,   345,     0,   346,   347,   348,   349,
+     350,   351,   352,   353,   354,   355,   356,   357,   358,   359,
+     360,   361,   362,   363,   364,   365,   366,   367,   368,   369,
+     370,   371,   372,   373,   374,   375,   376,     1,     2,     3,
        4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
       24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
       34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
       44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
-      54,    55,    56,    57,    58,     0,     0,    61,    62,    63,
+      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
       64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
       74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
       84,    85,    86,    87,    88,    89,    90,    91,    92,    93,
@@ -2533,68 +1855,343 @@
      284,   285,   286,   287,   288,   289,   290,   291,   292,   293,
      294,   295,   296,   297,   298,   299,   300,   301,   302,   303,
      304,   305,   306,   307,   308,   309,   310,   311,   312,   313,
-     314,     0,     0,     0,     0,     0,     0,   321,     0,     0,
-       0,     0,     0,   499,   500,     0,     0,     0,     0,     0,
+     314,   315,   316,   317,   318,   319,   320,   321,   322,   323,
+     324,     0,     0,   499,   500,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   501,   502,     0,     0,     0,   636,   775,     0,
-       0,     0,     0,     0,   503,   504,   505,   506,     0,     0,
+       0,     0,   501,   502,     0,   325,     0,   591,   592,     0,
+       0,     0,     0,   593,   503,   504,   505,   506,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   327,   328,   329,
+     330,   331,     0,     0,     0,   507,   508,   509,   510,   511,
+     332,   333,   334,   335,   336,   337,   338,   594,   595,   596,
+     597,     0,   598,   599,   600,   601,   602,   603,   604,   605,
+     606,   607,   339,   340,   341,   342,   343,   344,   512,   513,
+     514,   515,   516,   517,   518,   519,   345,   608,   346,   347,
+     348,   349,   350,   351,   352,   353,   354,   355,   356,   357,
+     358,   359,   360,   361,   362,   363,   364,   365,   366,   367,
+     368,   369,   370,   371,   372,   373,   374,   375,   376,     1,
+       2,     3,     4,     5,     6,     7,     8,     9,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
+      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
+      42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
+      52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
+      62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
+      72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
+      82,    83,    84,    85,    86,    87,    88,    89,    90,    91,
+      92,    93,    94,    95,    96,    97,    98,    99,   100,   101,
+     102,   103,   104,   105,   106,   107,   108,   109,   110,   111,
+     112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
+     122,   123,   124,   125,   126,   127,   128,   129,   130,   131,
+     132,   133,   134,   135,   136,   137,   138,   139,   140,   141,
+     142,   143,   144,   145,   146,   147,   148,   149,   150,   151,
+     152,   153,   154,   155,   156,   157,   158,   159,   160,   161,
+     162,   163,   164,   165,   166,   167,   168,   169,   170,   171,
+     172,   173,   174,   175,   176,   177,   178,   179,   180,   181,
+     182,   183,   184,   185,   186,   187,   188,   189,   190,   191,
+     192,   193,   194,   195,   196,   197,   198,   199,   200,   201,
+     202,   203,   204,   205,   206,   207,   208,   209,   210,   211,
+     212,   213,   214,   215,   216,   217,   218,   219,   220,   221,
+     222,   223,   224,   225,   226,   227,   228,   229,   230,   231,
+     232,   233,   234,   235,   236,   237,   238,   239,   240,   241,
+     242,   243,   244,   245,   246,   247,   248,   249,   250,   251,
+     252,   253,   254,   255,   256,   257,   258,   259,   260,   261,
+     262,   263,   264,   265,   266,   267,   268,   269,   270,   271,
+     272,   273,   274,   275,   276,   277,   278,   279,   280,   281,
+     282,   283,   284,   285,   286,   287,   288,   289,   290,   291,
+     292,   293,   294,   295,   296,   297,   298,   299,   300,   301,
+     302,   303,   304,   305,   306,   307,   308,   309,   310,   311,
+     312,   313,   314,   315,   316,   317,   318,   319,   320,   321,
+     322,   323,   324,     0,     0,   499,   500,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   507,   508,   509,   510,   511,
-     332,     0,     0,     0,     0,   337,   338,     0,     0,     0,
+       0,     0,     0,     0,   501,   502,     0,   325,     0,   591,
+     767,     0,     0,     0,     0,   593,   503,   504,   505,   506,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   327,
+     328,   329,   330,   331,     0,     0,     0,   507,   508,   509,
+     510,   511,   332,   333,   334,   335,   336,   337,   338,   594,
+     595,   596,   597,     0,   598,   599,   600,   601,   602,   603,
+     604,   605,   606,   607,   339,   340,   341,   342,   343,   344,
+     512,   513,   514,   515,   516,   517,   518,   519,   345,   608,
+     346,   347,   348,   349,   350,   351,   352,   353,   354,   355,
+     356,   357,   358,   359,   360,   361,   362,   363,   364,   365,
+     366,   367,   368,   369,   370,   371,   372,   373,   374,   375,
+     376,     1,     2,     3,     4,     5,     6,     7,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
+      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
+      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
+      60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
+      70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
+      80,    81,    82,    83,    84,    85,    86,    87,    88,    89,
+      90,    91,    92,    93,    94,    95,    96,    97,    98,    99,
+     100,   101,   102,   103,   104,   105,   106,   107,   108,   109,
+     110,   111,   112,   113,   114,   115,   116,   117,   118,   119,
+     120,   121,   122,   123,   124,   125,   126,   127,   128,   129,
+     130,   131,   132,   133,   134,   135,   136,   137,   138,   139,
+     140,   141,   142,   143,   144,   145,   146,   147,   148,   149,
+     150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
+     160,   161,   162,   163,   164,   165,   166,   167,   168,   169,
+     170,   171,   172,   173,   174,   175,   176,   177,   178,   179,
+     180,   181,   182,   183,   184,   185,   186,   187,   188,   189,
+     190,   191,   192,   193,   194,   195,   196,   197,   198,   199,
+     200,   201,   202,   203,   204,   205,   206,   207,   208,   209,
+     210,   211,   212,   213,   214,   215,   216,   217,   218,   219,
+     220,   221,   222,   223,   224,   225,   226,   227,   228,   229,
+     230,   231,   232,   233,   234,   235,   236,   237,   238,   239,
+     240,   241,   242,   243,   244,   245,   246,   247,   248,   249,
+     250,   251,   252,   253,   254,   255,   256,   257,   258,   259,
+     260,   261,   262,   263,   264,   265,   266,   267,   268,   269,
+     270,   271,   272,   273,   274,   275,   276,   277,   278,   279,
+     280,   281,   282,   283,   284,   285,   286,   287,   288,   289,
+     290,   291,   292,   293,   294,   295,   296,   297,   298,   299,
+     300,   301,   302,   303,   304,   305,   306,   307,   308,   309,
+     310,   311,   312,   313,   314,   315,   316,   317,   318,   319,
+     320,   321,   322,   323,   324,     0,     0,   499,   500,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   512,   513,
-     514,   515,   516,   517,   518,   519,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     358,     2,     3,     4,     5,     6,     7,     8,     9,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
-      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
-      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
-      51,    52,    53,    54,    55,    56,    57,    58,     0,     0,
-      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
-      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
-      81,    82,    83,    84,    85,    86,    87,    88,    89,    90,
-      91,    92,    93,    94,    95,    96,    97,    98,    99,   100,
-     101,   102,   103,   104,   105,   106,   107,   108,   109,   110,
-     111,   112,   113,   114,   115,   116,   117,   118,   119,   120,
-     121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
-     131,   132,   133,   134,   135,   136,   137,   138,   139,   140,
-     141,   142,   143,   144,   145,   146,   147,   148,   149,   150,
-     151,   152,   153,   154,   155,   156,   157,   158,   159,   160,
-     161,   162,   163,   164,   165,   166,   167,   168,   169,   170,
-     171,   172,   173,   174,   175,   176,   177,   178,   179,   180,
-     181,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-     191,   192,   193,   194,   195,   196,   197,   198,   199,   200,
-     201,   202,   203,   204,   205,   206,   207,   208,   209,   210,
-     211,   212,   213,   214,   215,   216,   217,   218,   219,   220,
-     221,   222,   223,   224,   225,   226,   227,   228,   229,   230,
-     231,   232,   233,   234,   235,   236,   237,   238,   239,   240,
-     241,   242,   243,   244,   245,   246,   247,   248,   249,   250,
-     251,   252,   253,   254,   255,   256,   257,   258,   259,   260,
-     261,   262,   263,   264,   265,   266,   267,   268,   269,   270,
-     271,   272,   273,   274,   275,   276,   277,   278,   279,   280,
-     281,   282,   283,   284,   285,   286,   287,   288,   289,   290,
-     291,   292,   293,   294,   295,   296,   297,   298,   299,   300,
-     301,   302,   303,   304,   305,   306,   307,   308,   309,   310,
-     311,   312,   313,   314,     0,     0,     0,     0,     0,     0,
-     321,     0,     0,     0,     0,     0,   499,   500,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   501,   502,     0,     0,     0,
-     636,   886,     0,     0,     0,     0,     0,   503,   504,   505,
-     506,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   507,   508,
-     509,   510,   511,   332,     0,     0,     0,     0,   337,   338,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   512,   513,   514,   515,   516,   517,   518,   519,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   358,     2,     3,     4,     5,     6,     7,
+       0,     0,     0,     0,     0,     0,   501,   502,     0,   325,
+       0,   591,     0,     0,     0,     0,     0,   593,   503,   504,
+     505,   506,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   327,   328,   329,   330,   331,     0,     0,     0,   507,
+     508,   509,   510,   511,   332,   333,   334,   335,   336,   337,
+     338,   594,   595,   596,   597,     0,   598,   599,   600,   601,
+     602,   603,   604,   605,   606,   607,   339,   340,   341,   342,
+     343,   344,   512,   513,   514,   515,   516,   517,   518,   519,
+     345,   608,   346,   347,   348,   349,   350,   351,   352,   353,
+     354,   355,   356,   357,   358,   359,   360,   361,   362,   363,
+     364,   365,   366,   367,   368,   369,   370,   371,   372,   373,
+     374,   375,   376,     1,     2,     3,     4,     5,     6,     7,
        8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
       18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
       28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
       38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
       48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
-      58,     0,     0,    61,    62,    63,    64,    65,    66,    67,
+      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
+      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
+      78,    79,    80,    81,    82,    83,    84,    85,    86,    87,
+      88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
+      98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
+     108,   109,   110,   111,   112,   113,   114,   115,   116,   117,
+     118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
+     128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
+     138,   139,   140,   141,   142,   143,   144,   145,   146,   147,
+     148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
+     158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
+     168,   169,   170,   171,   172,   173,   174,   175,   176,   177,
+     178,   179,   180,   181,   182,   183,   184,   185,   186,   187,
+     188,   189,   190,   191,   192,   193,   194,   195,   196,   197,
+     198,   199,   200,   201,   202,   203,   204,   205,   206,   207,
+     208,   209,   210,   211,   212,   213,   214,   215,   216,   217,
+     218,   219,   220,   221,   222,   223,   224,   225,   226,   227,
+     228,   229,   230,   231,   232,   233,   234,   235,   236,   237,
+     238,   239,   240,   241,   242,   243,   244,   245,   246,   247,
+     248,   249,   250,   251,   252,   253,   254,   255,   256,   257,
+     258,   259,   260,   261,   262,   263,   264,   265,   266,   267,
+     268,   269,   270,   271,   272,   273,   274,   275,   276,   277,
+     278,   279,   280,   281,   282,   283,   284,   285,   286,   287,
+     288,   289,   290,   291,   292,   293,   294,   295,   296,   297,
+     298,   299,   300,   301,   302,   303,   304,   305,   306,   307,
+     308,   309,   310,   311,   312,   313,   314,   315,   316,   317,
+     318,   319,   320,   321,   322,   323,   324,     0,     0,   499,
+     500,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   501,   502,
+       0,   325,     0,   484,     0,     0,     0,     0,     0,   593,
+     503,   504,   505,   506,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   327,   328,   329,   330,   331,     0,     0,
+       0,   507,   508,   509,   510,   511,   332,   333,   334,   335,
+     336,   337,   338,   594,   595,   596,   597,     0,   598,   599,
+     600,   601,   602,   603,   604,   605,   606,   607,   339,   340,
+     341,   342,   343,   344,   512,   513,   514,   515,   516,   517,
+     518,   519,   345,   608,   346,   347,   348,   349,   350,   351,
+     352,   353,   354,   355,   356,   357,   358,   359,   360,   361,
+     362,   363,   364,   365,   366,   367,   368,   369,   370,   371,
+     372,   373,   374,   375,   376,     1,     2,     3,     4,     5,
+       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
+      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
+      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
+      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
+      66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
+      76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
+      86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
+      96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
+     106,   107,   108,   109,   110,   111,   112,   113,   114,   115,
+     116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
+     126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
+     136,   137,   138,   139,   140,   141,   142,   143,   144,   145,
+     146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
+     156,   157,   158,   159,   160,   161,   162,   163,   164,   165,
+     166,   167,   168,   169,   170,   171,   172,   173,   174,   175,
+     176,   177,   178,   179,   180,   181,   182,   183,   184,   185,
+     186,   187,   188,   189,   190,   191,   192,   193,   194,   195,
+     196,   197,   198,   199,   200,   201,   202,   203,   204,   205,
+     206,   207,   208,   209,   210,   211,   212,   213,   214,   215,
+     216,   217,   218,   219,   220,   221,   222,   223,   224,   225,
+     226,   227,   228,   229,   230,   231,   232,   233,   234,   235,
+     236,   237,   238,   239,   240,   241,   242,   243,   244,   245,
+     246,   247,   248,   249,   250,   251,   252,   253,   254,   255,
+     256,   257,   258,   259,   260,   261,   262,   263,   264,   265,
+     266,   267,   268,   269,   270,   271,   272,   273,   274,   275,
+     276,   277,   278,   279,   280,   281,   282,   283,   284,   285,
+     286,   287,   288,   289,   290,   291,   292,   293,   294,   295,
+     296,   297,   298,   299,   300,   301,   302,   303,   304,   305,
+     306,   307,   308,   309,   310,   311,   312,   313,   314,   315,
+     316,   317,   318,   319,   320,   321,   322,   323,   324,     0,
+       0,   499,   500,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     501,   502,     0,   325,     0,     0,     0,     0,     0,     0,
+       0,   593,   503,   504,   505,   506,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   327,   328,   329,   330,   331,
+       0,     0,     0,   507,   508,   509,   510,   511,   332,   333,
+     334,   335,   336,   337,   338,   594,   595,   596,   597,     0,
+     598,   599,   600,   601,   602,   603,   604,   605,   606,   607,
+     339,   340,   341,   342,   343,   344,   512,   513,   514,   515,
+     516,   517,   518,   519,   345,   608,   346,   347,   348,   349,
+     350,   351,   352,   353,   354,   355,   356,   357,   358,   359,
+     360,   361,   362,   363,   364,   365,   366,   367,   368,   369,
+     370,   371,   372,   373,   374,   375,   376,     1,     2,     3,
+       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
+      34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
+      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
+      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
+      64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
+      74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
+      84,    85,    86,    87,    88,    89,    90,    91,    92,    93,
+      94,    95,    96,    97,    98,    99,   100,   101,   102,   103,
+     104,   105,   106,   107,   108,   109,   110,   111,   112,   113,
+     114,   115,   116,   117,   118,   119,   120,   121,   122,   123,
+     124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
+     134,   135,   136,   137,   138,   139,   140,   141,   142,   143,
+     144,   145,   146,   147,   148,   149,   150,   151,   152,   153,
+     154,   155,   156,   157,   158,   159,   160,   161,   162,   163,
+     164,   165,   166,   167,   168,   169,   170,   171,   172,   173,
+     174,   175,   176,   177,   178,   179,   180,   181,   182,   183,
+     184,   185,   186,   187,   188,   189,   190,   191,   192,   193,
+     194,   195,   196,   197,   198,   199,   200,   201,   202,   203,
+     204,   205,   206,   207,   208,   209,   210,   211,   212,   213,
+     214,   215,   216,   217,   218,   219,   220,   221,   222,   223,
+     224,   225,   226,   227,   228,   229,   230,   231,   232,   233,
+     234,   235,   236,   237,   238,   239,   240,   241,   242,   243,
+     244,   245,   246,   247,   248,   249,   250,   251,   252,   253,
+     254,   255,   256,   257,   258,   259,   260,   261,   262,   263,
+     264,   265,   266,   267,   268,   269,   270,   271,   272,   273,
+     274,   275,   276,   277,   278,   279,   280,   281,   282,   283,
+     284,   285,   286,   287,   288,   289,   290,   291,   292,   293,
+     294,   295,   296,   297,   298,   299,   300,   301,   302,   303,
+     304,   305,   306,   307,   308,   309,   310,   311,   312,   313,
+     314,   315,   316,   317,   318,   319,   320,   321,   322,   323,
+     324,     0,     0,   499,   500,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   501,   502,     0,   325,     0,     0,     0,     0,
+       0,     0,     0,   593,   503,   504,   505,   506,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   327,   328,   329,
+     330,   331,     0,     0,     0,   507,   508,   509,   510,   511,
+     332,   333,   334,   335,   336,   337,   338,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   339,   340,   341,   342,   343,   344,   512,   513,
+     514,   515,   516,   517,   518,   519,   345,     0,   346,   347,
+     348,   349,   350,   351,   352,   353,   354,   355,   356,   357,
+     358,   359,   360,   361,   362,   363,   364,   365,   366,   367,
+     368,   369,   370,   371,   372,   373,   374,   375,   376,     1,
+       2,     3,     4,     5,     6,     7,     8,     9,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
+      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
+      42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
+      52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
+      62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
+      72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
+      82,    83,    84,    85,    86,    87,    88,    89,    90,    91,
+      92,    93,    94,    95,    96,    97,    98,    99,   100,   101,
+     102,   103,   104,   105,   106,   107,   108,   109,   110,   111,
+     112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
+     122,   123,   124,   125,   126,   127,   128,   129,   130,   131,
+     132,   133,   134,   135,   136,   137,   138,   139,   140,   141,
+     142,   143,   144,   145,   146,   147,   148,   149,   150,   151,
+     152,   153,   154,   155,   156,   157,   158,   159,   160,   161,
+     162,   163,   164,   165,   166,   167,   168,   169,   170,   171,
+     172,   173,   174,   175,   176,   177,   178,   179,   180,   181,
+     182,   183,   184,   185,   186,   187,   188,   189,   190,   191,
+     192,   193,   194,   195,   196,   197,   198,   199,   200,   201,
+     202,   203,   204,   205,   206,   207,   208,   209,   210,   211,
+     212,   213,   214,   215,   216,   217,   218,   219,   220,   221,
+     222,   223,   224,   225,   226,   227,   228,   229,   230,   231,
+     232,   233,   234,   235,   236,   237,   238,   239,   240,   241,
+     242,   243,   244,   245,   246,   247,   248,   249,   250,   251,
+     252,   253,   254,   255,   256,   257,   258,   259,   260,   261,
+     262,   263,   264,   265,   266,   267,   268,   269,   270,   271,
+     272,   273,   274,   275,   276,   277,   278,   279,   280,   281,
+     282,   283,   284,   285,   286,   287,   288,   289,   290,   291,
+     292,   293,   294,   295,   296,   297,   298,   299,   300,   301,
+     302,   303,   304,   305,   306,   307,   308,   309,   310,   311,
+     312,   313,   314,     0,     0,     0,   318,   319,   320,   321,
+     322,   323,   324,     0,     0,   499,   500,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   501,   502,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   503,   504,   505,   506,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   327,
+     328,   329,   330,     0,     0,     0,     0,   507,   508,   509,
+     510,   511,   332,   333,   334,   335,   336,   337,   338,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   339,   340,   341,   342,   343,   344,
+     512,   513,   514,   515,   516,   517,   518,   519,   345,     0,
+     346,   347,   348,   349,   350,   351,   352,   353,   354,   355,
+     356,   357,   358,   359,   360,   361,   362,   363,   364,   365,
+     366,   367,   368,   369,   370,   371,   372,   373,   374,   375,
+     376,     1,     2,     3,     4,     5,     6,     7,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
+      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
+      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
+      60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
+      70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
+      80,    81,    82,    83,    84,    85,    86,    87,    88,    89,
+      90,    91,    92,    93,    94,    95,    96,    97,    98,    99,
+     100,   101,   102,   103,   104,   105,   106,   107,   108,   109,
+     110,   111,   112,   113,   114,   115,   116,   117,   118,   119,
+     120,   121,   122,   123,   124,   125,   126,   127,   128,   129,
+     130,   131,   132,   133,   134,   135,   136,   137,   138,   139,
+     140,   141,   142,   143,   144,   145,   146,   147,   148,   149,
+     150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
+     160,   161,   162,   163,   164,   165,   166,   167,   168,   169,
+     170,   171,   172,   173,   174,   175,   176,   177,   178,   179,
+     180,   181,   182,   183,   184,   185,   186,   187,   188,   189,
+     190,   191,   192,   193,   194,   195,   196,   197,   198,   199,
+     200,   201,   202,   203,   204,   205,   206,   207,   208,   209,
+     210,   211,   212,   213,   214,   215,   216,   217,   218,   219,
+     220,   221,   222,   223,   224,   225,   226,   227,   228,   229,
+     230,   231,   232,   233,   234,   235,   236,   237,   238,   239,
+     240,   241,   242,   243,   244,   245,   246,   247,   248,   249,
+     250,   251,   252,   253,   254,   255,   256,   257,   258,   259,
+     260,   261,   262,   263,   264,   265,   266,   267,   268,   269,
+     270,   271,   272,   273,   274,   275,   276,   277,   278,   279,
+     280,   281,   282,   283,   284,   285,   286,   287,   288,   289,
+     290,   291,   292,   293,   294,   295,   296,   297,   298,   299,
+     300,   301,   302,   303,   304,   305,   306,   307,   308,   309,
+     310,   311,   312,   313,   314,   315,   316,   317,   318,   319,
+     320,   321,   322,   323,   324,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   325,
+       0,     0,     0,     0,     0,     0,     0,   326,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   327,   328,   329,   330,   331,     0,     0,     0,     0,
+       0,     0,     0,     0,   332,   333,   334,   335,   336,   337,
+     338,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   339,   340,   341,   342,
+     343,   344,     0,     0,     0,     0,     0,     0,     0,     0,
+     345,     0,   346,   347,   348,   349,   350,   351,   352,   353,
+     354,   355,   356,   357,   358,   359,   360,   361,   362,   363,
+     364,   365,   366,   367,   368,   369,   370,   371,   372,   373,
+     374,   375,   376,     1,     2,     3,     4,     5,     6,     7,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
+      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
+      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
       68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
       78,    79,    80,    81,    82,    83,    84,    85,    86,    87,
       88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
@@ -2620,18 +2217,291 @@
      288,   289,   290,   291,   292,   293,   294,   295,   296,   297,
      298,   299,   300,   301,   302,   303,   304,   305,   306,   307,
      308,   309,   310,   311,   312,   313,   314,     0,     0,     0,
-       0,     0,     0,   321,     0,     0,     0,     0,     0,   499,
-     500,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   501,   502,
-       0,     0,   575,     0,     0,     0,     0,     0,     0,     0,
-     503,   504,   505,   506,     0,     0,     0,     0,     0,     0,
+     318,   319,   320,   321,   322,   323,   324,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   507,   508,   509,   510,   511,   332,     0,     0,     0,
-       0,   337,   338,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   512,   513,   514,   515,   516,   517,
-     518,   519,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   358,     2,     3,     4,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   327,   328,   329,   330,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   332,   333,   334,   335,
+     336,   337,   338,   594,     0,     0,   597,     0,   598,   599,
+       0,     0,   602,     0,     0,     0,     0,     0,   339,   340,
+     341,   342,   343,   344,     0,     0,     0,     0,     0,     0,
+       0,     0,   345,     0,   346,   347,   348,   349,   350,   351,
+     352,   353,   354,   355,   356,   357,   358,   359,   360,   361,
+     362,   363,   364,   365,   366,   367,   368,   369,   370,   371,
+     372,   373,   374,   375,   376,     1,     2,     3,     4,     5,
+       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
+      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
+      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
+      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
+      66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
+      76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
+      86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
+      96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
+     106,   107,   108,   109,   110,   111,   112,   113,   114,   115,
+     116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
+     126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
+     136,   137,   138,   139,   140,   141,   142,   143,   144,   145,
+     146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
+     156,   157,   158,   159,   160,   161,   162,   163,   164,   165,
+     166,   167,   168,   169,   170,   171,   172,   173,   174,   175,
+     176,   177,   178,   179,   180,   181,   182,   183,   184,   185,
+     186,   187,   188,   189,   190,   191,   192,   193,   194,   195,
+     196,   197,   198,   199,   200,   201,   202,   203,   204,   205,
+     206,   207,   208,   209,   210,   211,   212,   213,   214,   215,
+     216,   217,   218,   219,   220,   221,   222,   223,   224,   225,
+     226,   227,   228,   229,   230,   231,   232,   233,   234,   235,
+     236,   237,   238,   239,   240,   241,   242,   243,   244,   245,
+     246,   247,   248,   249,   250,   251,   252,   253,   254,   255,
+     256,   257,   258,   259,   260,   261,   262,   263,   264,   265,
+     266,   267,   268,   269,   270,   271,   272,   273,   274,   275,
+     276,   277,   278,   279,   280,   281,   282,   283,   284,   285,
+     286,   287,   288,   289,   290,   291,   292,   293,   294,   295,
+     296,   297,   298,   299,   300,   301,   302,   303,   304,   305,
+     306,   307,   308,   309,   310,   311,   312,   313,   314,     0,
+       0,     0,   318,   319,   320,   321,   322,   323,   324,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   435,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   327,   328,   329,   330,     0,
+       0,     0,     0,     0,     0,     0,     0,   436,   332,   333,
+     334,   335,   336,   337,   338,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     339,   340,   341,   342,   343,   344,     0,     0,     0,     0,
+       0,     0,     0,     0,   345,     0,   346,   347,   348,   349,
+     350,   351,   352,   353,   354,   355,   356,   357,   358,   359,
+     360,   361,   362,   363,   364,   365,   366,   367,   368,   369,
+     370,   371,   372,   373,   374,   375,   376,     1,     2,     3,
+       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
+      34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
+      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
+      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
+      64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
+      74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
+      84,    85,    86,    87,    88,    89,    90,    91,    92,    93,
+      94,    95,    96,    97,    98,    99,   100,   101,   102,   103,
+     104,   105,   106,   107,   108,   109,   110,   111,   112,   113,
+     114,   115,   116,   117,   118,   119,   120,   121,   122,   123,
+     124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
+     134,   135,   136,   137,   138,   139,   140,   141,   142,   143,
+     144,   145,   146,   147,   148,   149,   150,   151,   152,   153,
+     154,   155,   156,   157,   158,   159,   160,   161,   162,   163,
+     164,   165,   166,   167,   168,   169,   170,   171,   172,   173,
+     174,   175,   176,   177,   178,   179,   180,   181,   182,   183,
+     184,   185,   186,   187,   188,   189,   190,   191,   192,   193,
+     194,   195,   196,   197,   198,   199,   200,   201,   202,   203,
+     204,   205,   206,   207,   208,   209,   210,   211,   212,   213,
+     214,   215,   216,   217,   218,   219,   220,   221,   222,   223,
+     224,   225,   226,   227,   228,   229,   230,   231,   232,   233,
+     234,   235,   236,   237,   238,   239,   240,   241,   242,   243,
+     244,   245,   246,   247,   248,   249,   250,   251,   252,   253,
+     254,   255,   256,   257,   258,   259,   260,   261,   262,   263,
+     264,   265,   266,   267,   268,   269,   270,   271,   272,   273,
+     274,   275,   276,   277,   278,   279,   280,   281,   282,   283,
+     284,   285,   286,   287,   288,   289,   290,   291,   292,   293,
+     294,   295,   296,   297,   298,   299,   300,   301,   302,   303,
+     304,   305,   306,   307,   308,   309,   310,   311,   312,   313,
+     314,     0,     0,     0,   318,   319,   320,   321,   322,   323,
+     324,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   325,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   327,   328,   329,
+     330,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     332,   333,   334,   335,   336,   337,   338,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   339,   340,   341,   342,   343,   344,     0,     0,
+       0,     0,     0,     0,     0,     0,   345,     0,   346,   347,
+     348,   349,   350,   351,   352,   353,   354,   355,   356,   357,
+     358,   359,   360,   361,   362,   363,   364,   365,   366,   367,
+     368,   369,   370,   371,   372,   373,   374,   375,   376,     1,
+       2,     3,     4,     5,     6,     7,     8,     9,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
+      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
+      42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
+      52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
+      62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
+      72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
+      82,    83,    84,    85,    86,    87,    88,    89,    90,    91,
+      92,    93,    94,    95,    96,    97,    98,    99,   100,   101,
+     102,   103,   104,   105,   106,   107,   108,   109,   110,   111,
+     112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
+     122,   123,   124,   125,   126,   127,   128,   129,   130,   131,
+     132,   133,   134,   135,   136,   137,   138,   139,   140,   141,
+     142,   143,   144,   145,   146,   147,   148,   149,   150,   151,
+     152,   153,   154,   155,   156,   157,   158,   159,   160,   161,
+     162,   163,   164,   165,   166,   167,   168,   169,   170,   171,
+     172,   173,   174,   175,   176,   177,   178,   179,   180,   181,
+     182,   183,   184,   185,   186,   187,   188,   189,   190,   191,
+     192,   193,   194,   195,   196,   197,   198,   199,   200,   201,
+     202,   203,   204,   205,   206,   207,   208,   209,   210,   211,
+     212,   213,   214,   215,   216,   217,   218,   219,   220,   221,
+     222,   223,   224,   225,   226,   227,   228,   229,   230,   231,
+     232,   233,   234,   235,   236,   237,   238,   239,   240,   241,
+     242,   243,   244,   245,   246,   247,   248,   249,   250,   251,
+     252,   253,   254,   255,   256,   257,   258,   259,   260,   261,
+     262,   263,   264,   265,   266,   267,   268,   269,   270,   271,
+     272,   273,   274,   275,   276,   277,   278,   279,   280,   281,
+     282,   283,   284,   285,   286,   287,   288,   289,   290,   291,
+     292,   293,   294,   295,   296,   297,   298,   299,   300,   301,
+     302,   303,   304,   305,   306,   307,   308,   309,   310,   311,
+     312,   313,   314,     0,     0,     0,   318,   319,   320,   321,
+     322,   323,   324,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     706,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   327,
+     328,   329,   330,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   332,   333,   334,   335,   336,   337,   338,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   339,   340,   341,   342,   343,   344,
+       0,     0,     0,     0,     0,     0,     0,     0,   345,     0,
+     346,   347,   348,   349,   350,   351,   352,   353,   354,   355,
+     356,   357,   358,   359,   360,   361,   362,   363,   364,   365,
+     366,   367,   368,   369,   370,   371,   372,   373,   374,   375,
+     376,     1,     2,     3,     4,     5,     6,     7,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
+      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
+      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
+      60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
+      70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
+      80,    81,    82,    83,    84,    85,    86,    87,    88,    89,
+      90,    91,    92,    93,    94,    95,    96,    97,    98,    99,
+     100,   101,   102,   103,   104,   105,   106,   107,   108,   109,
+     110,   111,   112,   113,   114,   115,   116,   117,   118,   119,
+     120,   121,   122,   123,   124,   125,   126,   127,   128,   129,
+     130,   131,   132,   133,   134,   135,   136,   137,   138,   139,
+     140,   141,   142,   143,   144,   145,   146,   147,   148,   149,
+     150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
+     160,   161,   162,   163,   164,   165,   166,   167,   168,   169,
+     170,   171,   172,   173,   174,   175,   176,   177,   178,   179,
+     180,   181,   182,   183,   184,   185,   186,   187,   188,   189,
+     190,   191,   192,   193,   194,   195,   196,   197,   198,   199,
+     200,   201,   202,   203,   204,   205,   206,   207,   208,   209,
+     210,   211,   212,   213,   214,   215,   216,   217,   218,   219,
+     220,   221,   222,   223,   224,   225,   226,   227,   228,   229,
+     230,   231,   232,   233,   234,   235,   236,   237,   238,   239,
+     240,   241,   242,   243,   244,   245,   246,   247,   248,   249,
+     250,   251,   252,   253,   254,   255,   256,   257,   258,   259,
+     260,   261,   262,   263,   264,   265,   266,   267,   268,   269,
+     270,   271,   272,   273,   274,   275,   276,   277,   278,   279,
+     280,   281,   282,   283,   284,   285,   286,   287,   288,   289,
+     290,   291,   292,   293,   294,   295,   296,   297,   298,   299,
+     300,   301,   302,   303,   304,   305,   306,   307,   308,   309,
+     310,   311,   312,   313,   314,     0,     0,     0,   318,   319,
+     320,   321,   322,   323,   324,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   819,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   327,   328,   329,   330,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   332,   333,   334,   335,   336,   337,
+     338,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   339,   340,   341,   342,
+     343,   344,     0,     0,     0,     0,     0,     0,     0,     0,
+     345,     0,   346,   347,   348,   349,   350,   351,   352,   353,
+     354,   355,   356,   357,   358,   359,   360,   361,   362,   363,
+     364,   365,   366,   367,   368,   369,   370,   371,   372,   373,
+     374,   375,   376,     1,     2,     3,     4,     5,     6,     7,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
+      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
+      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
+      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
+      78,    79,    80,    81,    82,    83,    84,    85,    86,    87,
+      88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
+      98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
+     108,   109,   110,   111,   112,   113,   114,   115,   116,   117,
+     118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
+     128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
+     138,   139,   140,   141,   142,   143,   144,   145,   146,   147,
+     148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
+     158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
+     168,   169,   170,   171,   172,   173,   174,   175,   176,   177,
+     178,   179,   180,   181,   182,   183,   184,   185,   186,   187,
+     188,   189,   190,   191,   192,   193,   194,   195,   196,   197,
+     198,   199,   200,   201,   202,   203,   204,   205,   206,   207,
+     208,   209,   210,   211,   212,   213,   214,   215,   216,   217,
+     218,   219,   220,   221,   222,   223,   224,   225,   226,   227,
+     228,   229,   230,   231,   232,   233,   234,   235,   236,   237,
+     238,   239,   240,   241,   242,   243,   244,   245,   246,   247,
+     248,   249,   250,   251,   252,   253,   254,   255,   256,   257,
+     258,   259,   260,   261,   262,   263,   264,   265,   266,   267,
+     268,   269,   270,   271,   272,   273,   274,   275,   276,   277,
+     278,   279,   280,   281,   282,   283,   284,   285,   286,   287,
+     288,   289,   290,   291,   292,   293,   294,   295,   296,   297,
+     298,   299,   300,   301,   302,   303,   304,   305,   306,   307,
+     308,   309,   310,   311,   312,   313,   314,     0,     0,     0,
+     318,   319,   320,   321,   322,   323,   324,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   854,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   327,   328,   329,   330,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   332,   333,   334,   335,
+     336,   337,   338,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   339,   340,
+     341,   342,   343,   344,     0,     0,     0,     0,     0,     0,
+       0,     0,   345,     0,   346,   347,   348,   349,   350,   351,
+     352,   353,   354,   355,   356,   357,   358,   359,   360,   361,
+     362,   363,   364,   365,   366,   367,   368,   369,   370,   371,
+     372,   373,   374,   375,   376,     1,     2,     3,     4,     5,
+       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
+      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
+      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
+      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
+      66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
+      76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
+      86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
+      96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
+     106,   107,   108,   109,   110,   111,   112,   113,   114,   115,
+     116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
+     126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
+     136,   137,   138,   139,   140,   141,   142,   143,   144,   145,
+     146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
+     156,   157,   158,   159,   160,   161,   162,   163,   164,   165,
+     166,   167,   168,   169,   170,   171,   172,   173,   174,   175,
+     176,   177,   178,   179,   180,   181,   182,   183,   184,   185,
+     186,   187,   188,   189,   190,   191,   192,   193,   194,   195,
+     196,   197,   198,   199,   200,   201,   202,   203,   204,   205,
+     206,   207,   208,   209,   210,   211,   212,   213,   214,   215,
+     216,   217,   218,   219,   220,   221,   222,   223,   224,   225,
+     226,   227,   228,   229,   230,   231,   232,   233,   234,   235,
+     236,   237,   238,   239,   240,   241,   242,   243,   244,   245,
+     246,   247,   248,   249,   250,   251,   252,   253,   254,   255,
+     256,   257,   258,   259,   260,   261,   262,   263,   264,   265,
+     266,   267,   268,   269,   270,   271,   272,   273,   274,   275,
+     276,   277,   278,   279,   280,   281,   282,   283,   284,   285,
+     286,   287,   288,   289,   290,   291,   292,   293,   294,   295,
+     296,   297,   298,   299,   300,   301,   302,   303,   304,   305,
+     306,   307,   308,   309,   310,   311,   312,   313,   314,     0,
+       0,     0,   318,   319,   320,   321,   322,   323,   324,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   327,   328,   329,   330,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   332,   333,
+     334,   335,   336,   337,   338,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     339,   340,   341,   342,   343,   344,     0,     0,     0,     0,
+       0,     0,     0,     0,   345,     0,   346,   347,   348,   349,
+     350,   351,   352,   353,   354,   355,   356,   357,   358,   359,
+     360,   361,   362,   363,   364,   365,   366,   367,   368,   369,
+     370,   371,   372,   373,   374,   375,   376,     2,     3,     4,
        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
       25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
@@ -2666,7 +2536,7 @@
        0,     0,     0,     0,     0,     0,   321,     0,     0,     0,
        0,     0,   499,   500,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   501,   502,     0,     0,     0,   636,     0,     0,     0,
+       0,   501,   502,     0,     0,     0,   636,   774,     0,     0,
        0,     0,     0,   503,   504,   505,   506,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,   507,   508,   509,   510,   511,   332,
@@ -2709,8 +2579,8 @@
      312,   313,   314,     0,     0,     0,     0,     0,     0,   321,
        0,     0,     0,     0,     0,   499,   500,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   501,   502,     0,     0,   734,     0,
-       0,     0,     0,     0,     0,     0,   503,   504,   505,   506,
+       0,     0,     0,     0,   501,   502,     0,     0,     0,   636,
+     885,     0,     0,     0,     0,     0,   503,   504,   505,   506,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,   507,   508,   509,
      510,   511,   332,     0,     0,     0,     0,   337,   338,     0,
@@ -2753,7 +2623,7 @@
        0,     0,   321,     0,     0,     0,     0,     0,   499,   500,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,   501,   502,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   745,   503,
+       0,   575,     0,     0,     0,     0,     0,     0,     0,   503,
      504,   505,   506,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      507,   508,   509,   510,   511,   332,     0,     0,     0,     0,
@@ -2796,7 +2666,7 @@
        0,     0,     0,     0,     0,   321,     0,     0,     0,     0,
        0,   499,   500,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     501,   502,     0,     0,     0,     0,     0,     0,     0,     0,
+     501,   502,     0,     0,     0,   636,     0,     0,     0,     0,
        0,     0,   503,   504,   505,   506,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,   507,   508,   509,   510,   511,   332,     0,
@@ -2839,11 +2709,11 @@
      313,   314,     0,     0,     0,     0,     0,     0,   321,     0,
        0,     0,     0,     0,   499,   500,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   501,   502,     0,     0,     0,     0,     0,
+       0,     0,     0,   501,   502,     0,     0,   733,     0,     0,
        0,     0,     0,     0,     0,   503,   504,   505,   506,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,   507,   508,   509,   510,
-     511,   332,     0,     0,     0,     0,   337,   654,     0,     0,
+     511,   332,     0,     0,     0,     0,   337,   338,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,   512,
      513,   514,   515,   516,   517,   518,   519,     0,     0,     0,
@@ -2883,10 +2753,10 @@
        0,   321,     0,     0,     0,     0,     0,   499,   500,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,   501,   502,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   503,   504,
+       0,     0,     0,     0,     0,     0,     0,   744,   503,   504,
      505,   506,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,   507,
-     508,   509,   510,   694,   332,     0,     0,     0,     0,   337,
+     508,   509,   510,   511,   332,     0,     0,     0,     0,   337,
      338,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,   512,   513,   514,   515,   516,   517,   518,   519,
@@ -2924,78 +2794,208 @@
      297,   298,   299,   300,   301,   302,   303,   304,   305,   306,
      307,   308,   309,   310,   311,   312,   313,   314,     0,     0,
        0,     0,     0,     0,   321,     0,     0,     0,     0,     0,
+     499,   500,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   501,
+     502,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   503,   504,   505,   506,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   507,   508,   509,   510,   511,   332,     0,     0,
+       0,     0,   337,   338,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   512,   513,   514,   515,   516,
+     517,   518,   519,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   358,     2,     3,
+       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
+      34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
+      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
+      54,    55,    56,    57,    58,     0,     0,    61,    62,    63,
+      64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
+      74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
+      84,    85,    86,    87,    88,    89,    90,    91,    92,    93,
+      94,    95,    96,    97,    98,    99,   100,   101,   102,   103,
+     104,   105,   106,   107,   108,   109,   110,   111,   112,   113,
+     114,   115,   116,   117,   118,   119,   120,   121,   122,   123,
+     124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
+     134,   135,   136,   137,   138,   139,   140,   141,   142,   143,
+     144,   145,   146,   147,   148,   149,   150,   151,   152,   153,
+     154,   155,   156,   157,   158,   159,   160,   161,   162,   163,
+     164,   165,   166,   167,   168,   169,   170,   171,   172,   173,
+     174,   175,   176,   177,   178,   179,   180,   181,   182,   183,
+     184,   185,   186,   187,   188,   189,   190,   191,   192,   193,
+     194,   195,   196,   197,   198,   199,   200,   201,   202,   203,
+     204,   205,   206,   207,   208,   209,   210,   211,   212,   213,
+     214,   215,   216,   217,   218,   219,   220,   221,   222,   223,
+     224,   225,   226,   227,   228,   229,   230,   231,   232,   233,
+     234,   235,   236,   237,   238,   239,   240,   241,   242,   243,
+     244,   245,   246,   247,   248,   249,   250,   251,   252,   253,
+     254,   255,   256,   257,   258,   259,   260,   261,   262,   263,
+     264,   265,   266,   267,   268,   269,   270,   271,   272,   273,
+     274,   275,   276,   277,   278,   279,   280,   281,   282,   283,
+     284,   285,   286,   287,   288,   289,   290,   291,   292,   293,
+     294,   295,   296,   297,   298,   299,   300,   301,   302,   303,
+     304,   305,   306,   307,   308,   309,   310,   311,   312,   313,
+     314,     0,     0,     0,     0,     0,     0,   321,     0,     0,
+       0,     0,     0,   499,   500,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   501,   502,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   503,   504,   505,   506,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   507,   508,   509,   510,   511,
+     332,     0,     0,     0,     0,   337,   654,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   512,   513,
+     514,   515,   516,   517,   518,   519,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     358,     2,     3,     4,     5,     6,     7,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
+      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
+      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
+      51,    52,    53,    54,    55,    56,    57,    58,     0,     0,
+      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
+      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
+      81,    82,    83,    84,    85,    86,    87,    88,    89,    90,
+      91,    92,    93,    94,    95,    96,    97,    98,    99,   100,
+     101,   102,   103,   104,   105,   106,   107,   108,   109,   110,
+     111,   112,   113,   114,   115,   116,   117,   118,   119,   120,
+     121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
+     131,   132,   133,   134,   135,   136,   137,   138,   139,   140,
+     141,   142,   143,   144,   145,   146,   147,   148,   149,   150,
+     151,   152,   153,   154,   155,   156,   157,   158,   159,   160,
+     161,   162,   163,   164,   165,   166,   167,   168,   169,   170,
+     171,   172,   173,   174,   175,   176,   177,   178,   179,   180,
+     181,   182,   183,   184,   185,   186,   187,   188,   189,   190,
+     191,   192,   193,   194,   195,   196,   197,   198,   199,   200,
+     201,   202,   203,   204,   205,   206,   207,   208,   209,   210,
+     211,   212,   213,   214,   215,   216,   217,   218,   219,   220,
+     221,   222,   223,   224,   225,   226,   227,   228,   229,   230,
+     231,   232,   233,   234,   235,   236,   237,   238,   239,   240,
+     241,   242,   243,   244,   245,   246,   247,   248,   249,   250,
+     251,   252,   253,   254,   255,   256,   257,   258,   259,   260,
+     261,   262,   263,   264,   265,   266,   267,   268,   269,   270,
+     271,   272,   273,   274,   275,   276,   277,   278,   279,   280,
+     281,   282,   283,   284,   285,   286,   287,   288,   289,   290,
+     291,   292,   293,   294,   295,   296,   297,   298,   299,   300,
+     301,   302,   303,   304,   305,   306,   307,   308,   309,   310,
+     311,   312,   313,   314,     0,     0,     0,     0,     0,     0,
+     321,     0,     0,     0,     0,     0,   499,   500,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   501,   502,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   503,   504,   505,
+     506,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   507,   508,
+     509,   510,   694,   332,     0,     0,     0,     0,   337,   338,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   512,   513,   514,   515,   516,   517,   518,   519,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   358,     2,     3,     4,     5,     6,     7,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
+      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
+      58,     0,     0,    61,    62,    63,    64,    65,    66,    67,
+      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
+      78,    79,    80,    81,    82,    83,    84,    85,    86,    87,
+      88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
+      98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
+     108,   109,   110,   111,   112,   113,   114,   115,   116,   117,
+     118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
+     128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
+     138,   139,   140,   141,   142,   143,   144,   145,   146,   147,
+     148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
+     158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
+     168,   169,   170,   171,   172,   173,   174,   175,   176,   177,
+     178,   179,   180,   181,   182,   183,   184,   185,   186,   187,
+     188,   189,   190,   191,   192,   193,   194,   195,   196,   197,
+     198,   199,   200,   201,   202,   203,   204,   205,   206,   207,
+     208,   209,   210,   211,   212,   213,   214,   215,   216,   217,
+     218,   219,   220,   221,   222,   223,   224,   225,   226,   227,
+     228,   229,   230,   231,   232,   233,   234,   235,   236,   237,
+     238,   239,   240,   241,   242,   243,   244,   245,   246,   247,
+     248,   249,   250,   251,   252,   253,   254,   255,   256,   257,
+     258,   259,   260,   261,   262,   263,   264,   265,   266,   267,
+     268,   269,   270,   271,   272,   273,   274,   275,   276,   277,
+     278,   279,   280,   281,   282,   283,   284,   285,   286,   287,
+     288,   289,   290,   291,   292,   293,   294,   295,   296,   297,
+     298,   299,   300,   301,   302,   303,   304,   305,   306,   307,
+     308,   309,   310,   311,   312,   313,   314,     0,     0,     0,
+       0,     0,     0,   321,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   332,     0,     0,
-       0,     0,   337,   338
+       0,     0,     0,     0,     0,     0,   332,     0,     0,     0,
+       0,   337,   338
 };
 
 static const yytype_int16 yycheck[] =
 {
-       0,   401,     0,   481,   401,   382,   406,     0,   493,     0,
-     634,   502,   636,   622,     0,   639,   542,   547,   737,   567,
-     434,   439,   552,   569,   401,   348,   440,   359,   390,   406,
-     413,   561,   558,   348,   331,   332,   336,   899,   385,   348,
-     570,   348,   351,   528,   906,   356,   349,   353,   351,   426,
-     374,   375,   376,   385,   916,   358,   351,   368,   381,   382,
-     383,   384,   409,   481,   359,   329,   330,   382,   430,   547,
-     367,   368,   372,   382,   552,   382,   490,   491,   351,   385,
-     558,   499,   500,   561,   446,   349,   359,   351,   351,   349,
-     356,   355,   570,   359,   640,   358,   473,   338,   339,   340,
-     341,   342,   343,   344,   345,   346,   347,   361,   540,   363,
-     601,   589,   603,   531,   546,   351,   548,   358,   351,   551,
-     350,   553,   358,   555,   556,   358,   356,   353,   560,   547,
-     356,   350,   741,   359,   552,   350,   350,   356,   350,   350,
-     558,   356,   356,   561,   356,   356,   354,   350,   356,   634,
-     774,   636,   570,   356,   639,   351,   350,   540,   649,   350,
-     350,   709,   356,   350,   350,   356,   356,   349,   653,   356,
-     356,   589,   349,   556,   408,   409,   410,   411,   412,   413,
-     414,   350,   350,   350,   359,   350,   349,   356,   356,   356,
-     567,   356,   569,   350,   350,   356,   350,   350,   350,   356,
-     356,   920,   356,   565,   356,   350,   350,   350,   350,   350,
-     350,   356,   356,   356,   356,   356,   356,   350,   352,   349,
-     352,   352,   356,   356,   356,   356,   381,   382,   383,   384,
-     854,   779,   632,   842,   349,   632,   720,   721,   722,   723,
-     658,   327,   328,   382,   382,   382,   385,   385,   385,   349,
-     356,   367,   743,   359,   382,   632,   747,   385,   382,   382,
-     349,   385,   385,   640,   382,   333,   334,   385,   798,   799,
-     382,   382,   349,   385,   385,   805,   806,   356,   357,   382,
-     765,   766,   385,   349,   382,   811,   910,   385,   382,   774,
-     704,   385,   364,   365,   366,   713,   714,   715,   716,   717,
-     718,   719,   720,   721,   722,   723,   724,   725,   726,   727,
-     728,   729,   730,   731,   385,   356,   356,   926,   359,   359,
-     798,   799,   356,   356,   359,   359,   359,   805,   806,   356,
-     357,   385,   709,   811,   385,   813,   716,   717,   353,   718,
-     719,   385,   724,   725,   353,   351,   385,   385,   351,   840,
-     358,   350,   843,   385,   359,   356,   358,   385,   371,   356,
-     356,   356,   356,   350,   356,   385,   356,   356,   356,   854,
-     349,   356,   356,   350,   349,   351,   359,   358,   349,   351,
-     798,   799,   382,   348,   352,   335,   337,   805,   806,   369,
-     390,   382,   883,   811,   352,   813,   370,   354,   398,   390,
-     398,   401,   779,   385,   349,   398,   406,   398,   406,   900,
-     401,   896,   398,   406,   349,   406,   416,   359,   385,   359,
-     349,   359,   349,   357,   915,   910,   426,   425,   359,   359,
-     430,   359,   349,   359,   349,   426,   385,   385,   350,   430,
-     358,   348,   356,   843,   350,   356,   446,   356,   350,   352,
-     393,   352,   356,   348,   354,   446,   350,   382,   349,   358,
-     353,   385,   359,   350,   397,   353,   843,   353,   726,   359,
-     354,   727,   729,   473,   430,   728,   731,   430,   730,   426,
-     572,   331,   473,   883,   484,   703,   845,   818,   905,   916,
-     845,   917,   424,   484,   883,   796,   632,   632,   563,   803,
-     398,   794,   801,   632,   806,   799,   883,    -1,   813,    -1,
-      -1,   809,    -1,    -1,    -1,   811,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       0,   382,     0,   493,   622,   502,   401,   401,   481,     0,
+     434,   406,   542,     0,     0,   736,   440,   634,   567,   636,
+     401,   390,   639,   413,   569,   406,   348,   547,   558,   348,
+     359,   385,   552,   331,   332,   336,   353,   349,   528,   348,
+     898,   561,   351,   351,   348,   426,   356,   905,   350,   352,
+     570,   359,   351,   356,   356,   409,   385,   915,   368,   358,
+     382,   430,   381,   382,   383,   384,   490,   491,   385,   367,
+     368,   372,   351,   382,   547,   349,   351,   446,   382,   552,
+     359,   329,   330,   358,   349,   558,   351,   351,   561,   374,
+     375,   376,   473,   358,   358,   640,   353,   570,   361,   356,
+     363,   349,   359,   351,   601,   349,   603,   355,   408,   409,
+     410,   411,   412,   413,   414,   350,   589,   719,   720,   721,
+     722,   356,   740,   338,   339,   340,   341,   342,   343,   344,
+     345,   346,   347,   350,   350,   356,   350,   349,   359,   356,
+     356,   349,   356,   358,   634,   350,   636,   350,   349,   639,
+     540,   356,   649,   356,   540,   350,   773,   351,   350,   708,
+     546,   356,   548,   653,   356,   551,   556,   553,   349,   555,
+     556,   350,   350,   350,   560,   350,   350,   356,   356,   356,
+     349,   356,   356,   350,   350,   350,   567,   350,   569,   356,
+     356,   356,   350,   356,   350,   350,   565,   350,   919,   350,
+     356,   356,   350,   356,   350,   356,   350,   350,   356,   350,
+     356,   356,   356,   356,   352,   356,   352,   349,   356,   356,
+     356,   385,   359,   841,   381,   382,   383,   384,   382,   778,
+     439,   385,   382,   327,   328,   385,   853,   632,   632,   356,
+     382,   356,   359,   385,   359,   742,   354,   382,   356,   746,
+     385,   632,   382,   382,   382,   385,   385,   385,   382,   640,
+     382,   385,   382,   385,   382,   385,   382,   385,   356,   385,
+     356,   359,   481,   359,   764,   765,   349,   797,   798,   703,
+     810,   333,   334,   773,   804,   805,   364,   365,   366,   359,
+     499,   500,   909,   356,   357,   356,   357,   715,   716,   367,
+     717,   718,   723,   724,   359,   385,   385,   925,   353,   385,
+     353,   351,   351,   385,   385,   350,   385,   359,   349,   356,
+     358,   350,   531,   356,   797,   798,   358,   708,   356,   356,
+     356,   804,   805,   356,   356,   356,   356,   810,   547,   812,
+     356,   356,   839,   552,   358,   842,   359,   350,   349,   558,
+     349,   385,   561,   371,   351,   385,   351,   369,   348,   352,
+     385,   570,   370,   853,   335,   337,   385,   352,   349,   349,
+     354,   359,   349,   349,   385,   349,   359,   359,   357,   385,
+     589,   359,   382,   349,   359,   882,   359,   350,   356,   359,
+     390,   382,   356,   358,   356,   350,   350,   778,   398,   390,
+     398,   401,   899,   352,   352,   895,   406,   398,   406,   356,
+     401,   398,   398,   348,   348,   406,   416,   914,   354,   909,
+     406,   382,   350,   349,   393,   385,   426,   425,   353,   358,
+     430,   350,   359,   353,   725,   426,   353,   359,   397,   430,
+     354,   727,   726,   730,   331,   728,   446,   842,   729,   658,
+     702,   572,   817,   844,   904,   446,   915,   844,   916,   632,
+     882,   842,   632,   430,   632,   398,   563,   424,   426,   795,
+     793,   798,   802,   473,   430,   800,   808,   805,   812,   810,
+      -1,    -1,   473,    -1,   484,    -1,    -1,   882,    -1,    -1,
+      -1,    -1,    -1,   484,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   882,    -1,   712,   713,   714,   715,   716,   717,   718,
+     719,   720,   721,   722,   723,   724,   725,   726,   727,   728,
+     729,   730,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   536,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   558,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,   565,    -1,   567,    -1,   569,
       -1,    -1,    -1,    -1,   565,    -1,   567,    -1,   569,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   797,   798,
+      -1,    -1,    -1,    -1,    -1,   804,   805,    -1,    -1,    -1,
+      -1,   810,    -1,   812,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,   622,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,   622,   632,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
@@ -3005,759 +3005,81 @@
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   709,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   709,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   708,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   708,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   737,    -1,    -1,
-      -1,   741,    -1,    -1,    -1,    -1,   737,    -1,    -1,    -1,
-     741,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   779,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   779,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   736,    -1,    -1,    -1,
+     740,    -1,    -1,    -1,    -1,   736,    -1,    -1,    -1,   740,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   811,    -1,   813,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   842,   843,    -1,   845,    -1,   845,    -1,    -1,
-      -1,   842,   843,    -1,   845,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   883,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   883,    -1,    -1,    -1,    -1,    -1,    -1,   899,
-      -1,    -1,    -1,    -1,    -1,    -1,   906,    -1,   899,    -1,
-      -1,    -1,    -1,    -1,    -1,   906,   916,    -1,    -1,    -1,
-     920,    -1,    -1,    -1,    -1,   916,   926,    -1,    -1,   920,
-      -1,    -1,    -1,     0,    -1,   926,     3,     4,     5,     6,
-       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
-      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
-      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
-      67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
-      77,    78,    79,    80,    81,    82,    83,    84,    85,    86,
-      87,    88,    89,    90,    91,    92,    93,    94,    95,    96,
-      97,    98,    99,   100,   101,   102,   103,   104,   105,   106,
-     107,   108,   109,   110,   111,   112,   113,   114,   115,   116,
-     117,   118,   119,   120,   121,   122,   123,   124,   125,   126,
-     127,   128,   129,   130,   131,   132,   133,   134,   135,   136,
-     137,   138,   139,   140,   141,   142,   143,   144,   145,   146,
-     147,   148,   149,   150,   151,   152,   153,   154,   155,   156,
-     157,   158,   159,   160,   161,   162,   163,   164,   165,   166,
-     167,   168,   169,   170,   171,   172,   173,   174,   175,   176,
-     177,   178,   179,   180,   181,   182,   183,   184,   185,   186,
-     187,   188,   189,   190,   191,   192,   193,   194,   195,   196,
-     197,   198,   199,   200,   201,   202,   203,   204,   205,   206,
-     207,   208,   209,   210,   211,   212,   213,   214,   215,   216,
-     217,   218,   219,   220,   221,   222,   223,   224,   225,   226,
-     227,   228,   229,   230,   231,   232,   233,   234,   235,   236,
-     237,   238,   239,   240,   241,   242,   243,   244,   245,   246,
-     247,   248,   249,   250,   251,   252,   253,   254,   255,   256,
-     257,   258,   259,   260,   261,   262,   263,   264,   265,   266,
-     267,   268,   269,   270,   271,   272,   273,   274,   275,   276,
-     277,   278,   279,   280,   281,   282,   283,   284,   285,   286,
-     287,   288,   289,   290,   291,   292,   293,   294,   295,   296,
-     297,   298,   299,   300,   301,   302,   303,   304,   305,   306,
-     307,   308,   309,   310,   311,   312,   313,   314,   315,   316,
-     317,   318,   319,   320,   321,   322,   323,   324,   325,   326,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   351,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   359,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   373,   374,   375,   376,
-     377,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   386,
-     387,   388,   389,   390,   391,   392,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   408,   409,   410,   411,   412,   413,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   422,    -1,   424,   425,   426,
-     427,   428,   429,   430,   431,   432,   433,   434,   435,   436,
-     437,   438,   439,   440,   441,   442,   443,   444,   445,   446,
-     447,   448,   449,   450,   451,   452,   453,   454,     3,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
-      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
-      65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
-      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
-      85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
-      95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
-     105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
-     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
-     125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
-     135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
-     145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
-     155,   156,   157,   158,   159,   160,   161,   162,   163,   164,
-     165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
-     175,   176,   177,   178,   179,   180,   181,   182,   183,   184,
-     185,   186,   187,   188,   189,   190,   191,   192,   193,   194,
-     195,   196,   197,   198,   199,   200,   201,   202,   203,   204,
-     205,   206,   207,   208,   209,   210,   211,   212,   213,   214,
-     215,   216,   217,   218,   219,   220,   221,   222,   223,   224,
-     225,   226,   227,   228,   229,   230,   231,   232,   233,   234,
-     235,   236,   237,   238,   239,   240,   241,   242,   243,   244,
-     245,   246,   247,   248,   249,   250,   251,   252,   253,   254,
-     255,   256,   257,   258,   259,   260,   261,   262,   263,   264,
-     265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
-     275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
-     285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
-     295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
-     305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
-     315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
-     325,   326,    -1,    -1,   329,   330,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   348,   349,    -1,   351,    -1,   353,   354,
-      -1,    -1,    -1,    -1,   359,   360,   361,   362,   363,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   373,   374,
-     375,   376,   377,    -1,    -1,    -1,   381,   382,   383,   384,
-     385,   386,   387,   388,   389,   390,   391,   392,   393,   394,
-     395,   396,    -1,   398,   399,   400,   401,   402,   403,   404,
-     405,   406,   407,   408,   409,   410,   411,   412,   413,   414,
-     415,   416,   417,   418,   419,   420,   421,   422,   423,   424,
-     425,   426,   427,   428,   429,   430,   431,   432,   433,   434,
-     435,   436,   437,   438,   439,   440,   441,   442,   443,   444,
-     445,   446,   447,   448,   449,   450,   451,   452,   453,   454,
-       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
-      33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
-      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
-      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
-      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
-      73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
-      83,    84,    85,    86,    87,    88,    89,    90,    91,    92,
-      93,    94,    95,    96,    97,    98,    99,   100,   101,   102,
-     103,   104,   105,   106,   107,   108,   109,   110,   111,   112,
-     113,   114,   115,   116,   117,   118,   119,   120,   121,   122,
-     123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
-     133,   134,   135,   136,   137,   138,   139,   140,   141,   142,
-     143,   144,   145,   146,   147,   148,   149,   150,   151,   152,
-     153,   154,   155,   156,   157,   158,   159,   160,   161,   162,
-     163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
-     173,   174,   175,   176,   177,   178,   179,   180,   181,   182,
-     183,   184,   185,   186,   187,   188,   189,   190,   191,   192,
-     193,   194,   195,   196,   197,   198,   199,   200,   201,   202,
-     203,   204,   205,   206,   207,   208,   209,   210,   211,   212,
-     213,   214,   215,   216,   217,   218,   219,   220,   221,   222,
-     223,   224,   225,   226,   227,   228,   229,   230,   231,   232,
-     233,   234,   235,   236,   237,   238,   239,   240,   241,   242,
-     243,   244,   245,   246,   247,   248,   249,   250,   251,   252,
-     253,   254,   255,   256,   257,   258,   259,   260,   261,   262,
-     263,   264,   265,   266,   267,   268,   269,   270,   271,   272,
-     273,   274,   275,   276,   277,   278,   279,   280,   281,   282,
-     283,   284,   285,   286,   287,   288,   289,   290,   291,   292,
-     293,   294,   295,   296,   297,   298,   299,   300,   301,   302,
-     303,   304,   305,   306,   307,   308,   309,   310,   311,   312,
-     313,   314,   315,   316,   317,   318,   319,   320,   321,   322,
-     323,   324,   325,   326,    -1,    -1,   329,   330,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   348,   349,    -1,   351,    -1,
-     353,   354,    -1,    -1,    -1,    -1,   359,   360,   361,   362,
-     363,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     373,   374,   375,   376,   377,    -1,    -1,    -1,   381,   382,
-     383,   384,   385,   386,   387,   388,   389,   390,   391,   392,
-     393,   394,   395,   396,    -1,   398,   399,   400,   401,   402,
-     403,   404,   405,   406,   407,   408,   409,   410,   411,   412,
-     413,   414,   415,   416,   417,   418,   419,   420,   421,   422,
-     423,   424,   425,   426,   427,   428,   429,   430,   431,   432,
-     433,   434,   435,   436,   437,   438,   439,   440,   441,   442,
-     443,   444,   445,   446,   447,   448,   449,   450,   451,   452,
-     453,   454,     3,     4,     5,     6,     7,     8,     9,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
-      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
-      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
-      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
-      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
-      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
-      81,    82,    83,    84,    85,    86,    87,    88,    89,    90,
-      91,    92,    93,    94,    95,    96,    97,    98,    99,   100,
-     101,   102,   103,   104,   105,   106,   107,   108,   109,   110,
-     111,   112,   113,   114,   115,   116,   117,   118,   119,   120,
-     121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
-     131,   132,   133,   134,   135,   136,   137,   138,   139,   140,
-     141,   142,   143,   144,   145,   146,   147,   148,   149,   150,
-     151,   152,   153,   154,   155,   156,   157,   158,   159,   160,
-     161,   162,   163,   164,   165,   166,   167,   168,   169,   170,
-     171,   172,   173,   174,   175,   176,   177,   178,   179,   180,
-     181,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-     191,   192,   193,   194,   195,   196,   197,   198,   199,   200,
-     201,   202,   203,   204,   205,   206,   207,   208,   209,   210,
-     211,   212,   213,   214,   215,   216,   217,   218,   219,   220,
-     221,   222,   223,   224,   225,   226,   227,   228,   229,   230,
-     231,   232,   233,   234,   235,   236,   237,   238,   239,   240,
-     241,   242,   243,   244,   245,   246,   247,   248,   249,   250,
-     251,   252,   253,   254,   255,   256,   257,   258,   259,   260,
-     261,   262,   263,   264,   265,   266,   267,   268,   269,   270,
-     271,   272,   273,   274,   275,   276,   277,   278,   279,   280,
-     281,   282,   283,   284,   285,   286,   287,   288,   289,   290,
-     291,   292,   293,   294,   295,   296,   297,   298,   299,   300,
-     301,   302,   303,   304,   305,   306,   307,   308,   309,   310,
-     311,   312,   313,   314,   315,   316,   317,   318,   319,   320,
-     321,   322,   323,   324,   325,   326,    -1,    -1,   329,   330,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   348,   349,    -1,
-     351,    -1,   353,    -1,    -1,    -1,    -1,    -1,   359,   360,
-     361,   362,   363,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   373,   374,   375,   376,   377,    -1,    -1,    -1,
-     381,   382,   383,   384,   385,   386,   387,   388,   389,   390,
-     391,   392,   393,   394,   395,   396,    -1,   398,   399,   400,
-     401,   402,   403,   404,   405,   406,   407,   408,   409,   410,
-     411,   412,   413,   414,   415,   416,   417,   418,   419,   420,
-     421,   422,   423,   424,   425,   426,   427,   428,   429,   430,
-     431,   432,   433,   434,   435,   436,   437,   438,   439,   440,
-     441,   442,   443,   444,   445,   446,   447,   448,   449,   450,
-     451,   452,   453,   454,     3,     4,     5,     6,     7,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
-      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
-      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
-      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
-      59,    60,    61,    62,    63,    64,    65,    66,    67,    68,
-      69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
-      79,    80,    81,    82,    83,    84,    85,    86,    87,    88,
-      89,    90,    91,    92,    93,    94,    95,    96,    97,    98,
-      99,   100,   101,   102,   103,   104,   105,   106,   107,   108,
-     109,   110,   111,   112,   113,   114,   115,   116,   117,   118,
-     119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
-     129,   130,   131,   132,   133,   134,   135,   136,   137,   138,
-     139,   140,   141,   142,   143,   144,   145,   146,   147,   148,
-     149,   150,   151,   152,   153,   154,   155,   156,   157,   158,
-     159,   160,   161,   162,   163,   164,   165,   166,   167,   168,
-     169,   170,   171,   172,   173,   174,   175,   176,   177,   178,
-     179,   180,   181,   182,   183,   184,   185,   186,   187,   188,
-     189,   190,   191,   192,   193,   194,   195,   196,   197,   198,
-     199,   200,   201,   202,   203,   204,   205,   206,   207,   208,
-     209,   210,   211,   212,   213,   214,   215,   216,   217,   218,
-     219,   220,   221,   222,   223,   224,   225,   226,   227,   228,
-     229,   230,   231,   232,   233,   234,   235,   236,   237,   238,
-     239,   240,   241,   242,   243,   244,   245,   246,   247,   248,
-     249,   250,   251,   252,   253,   254,   255,   256,   257,   258,
-     259,   260,   261,   262,   263,   264,   265,   266,   267,   268,
-     269,   270,   271,   272,   273,   274,   275,   276,   277,   278,
-     279,   280,   281,   282,   283,   284,   285,   286,   287,   288,
-     289,   290,   291,   292,   293,   294,   295,   296,   297,   298,
-     299,   300,   301,   302,   303,   304,   305,   306,   307,   308,
-     309,   310,   311,   312,   313,   314,   315,   316,   317,   318,
-     319,   320,   321,   322,   323,   324,   325,   326,    -1,    -1,
-     329,   330,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   348,
-     349,    -1,   351,    -1,   353,    -1,    -1,    -1,    -1,    -1,
-     359,   360,   361,   362,   363,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   373,   374,   375,   376,   377,    -1,
-      -1,    -1,   381,   382,   383,   384,   385,   386,   387,   388,
-     389,   390,   391,   392,   393,   394,   395,   396,    -1,   398,
-     399,   400,   401,   402,   403,   404,   405,   406,   407,   408,
-     409,   410,   411,   412,   413,   414,   415,   416,   417,   418,
-     419,   420,   421,   422,   423,   424,   425,   426,   427,   428,
-     429,   430,   431,   432,   433,   434,   435,   436,   437,   438,
-     439,   440,   441,   442,   443,   444,   445,   446,   447,   448,
-     449,   450,   451,   452,   453,   454,     3,     4,     5,     6,
-       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
-      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
-      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
-      67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
-      77,    78,    79,    80,    81,    82,    83,    84,    85,    86,
-      87,    88,    89,    90,    91,    92,    93,    94,    95,    96,
-      97,    98,    99,   100,   101,   102,   103,   104,   105,   106,
-     107,   108,   109,   110,   111,   112,   113,   114,   115,   116,
-     117,   118,   119,   120,   121,   122,   123,   124,   125,   126,
-     127,   128,   129,   130,   131,   132,   133,   134,   135,   136,
-     137,   138,   139,   140,   141,   142,   143,   144,   145,   146,
-     147,   148,   149,   150,   151,   152,   153,   154,   155,   156,
-     157,   158,   159,   160,   161,   162,   163,   164,   165,   166,
-     167,   168,   169,   170,   171,   172,   173,   174,   175,   176,
-     177,   178,   179,   180,   181,   182,   183,   184,   185,   186,
-     187,   188,   189,   190,   191,   192,   193,   194,   195,   196,
-     197,   198,   199,   200,   201,   202,   203,   204,   205,   206,
-     207,   208,   209,   210,   211,   212,   213,   214,   215,   216,
-     217,   218,   219,   220,   221,   222,   223,   224,   225,   226,
-     227,   228,   229,   230,   231,   232,   233,   234,   235,   236,
-     237,   238,   239,   240,   241,   242,   243,   244,   245,   246,
-     247,   248,   249,   250,   251,   252,   253,   254,   255,   256,
-     257,   258,   259,   260,   261,   262,   263,   264,   265,   266,
-     267,   268,   269,   270,   271,   272,   273,   274,   275,   276,
-     277,   278,   279,   280,   281,   282,   283,   284,   285,   286,
-     287,   288,   289,   290,   291,   292,   293,   294,   295,   296,
-     297,   298,   299,   300,   301,   302,   303,   304,   305,   306,
-     307,   308,   309,   310,   311,   312,   313,   314,   315,   316,
-     317,   318,   319,   320,   321,   322,   323,   324,   325,   326,
-      -1,    -1,   329,   330,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   348,   349,    -1,   351,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   359,   360,   361,   362,   363,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   373,   374,   375,   376,
-     377,    -1,    -1,    -1,   381,   382,   383,   384,   385,   386,
-     387,   388,   389,   390,   391,   392,   393,   394,   395,   396,
-      -1,   398,   399,   400,   401,   402,   403,   404,   405,   406,
-     407,   408,   409,   410,   411,   412,   413,   414,   415,   416,
-     417,   418,   419,   420,   421,   422,   423,   424,   425,   426,
-     427,   428,   429,   430,   431,   432,   433,   434,   435,   436,
-     437,   438,   439,   440,   441,   442,   443,   444,   445,   446,
-     447,   448,   449,   450,   451,   452,   453,   454,     3,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
-      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
-      65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
-      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
-      85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
-      95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
-     105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
-     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
-     125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
-     135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
-     145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
-     155,   156,   157,   158,   159,   160,   161,   162,   163,   164,
-     165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
-     175,   176,   177,   178,   179,   180,   181,   182,   183,   184,
-     185,   186,   187,   188,   189,   190,   191,   192,   193,   194,
-     195,   196,   197,   198,   199,   200,   201,   202,   203,   204,
-     205,   206,   207,   208,   209,   210,   211,   212,   213,   214,
-     215,   216,   217,   218,   219,   220,   221,   222,   223,   224,
-     225,   226,   227,   228,   229,   230,   231,   232,   233,   234,
-     235,   236,   237,   238,   239,   240,   241,   242,   243,   244,
-     245,   246,   247,   248,   249,   250,   251,   252,   253,   254,
-     255,   256,   257,   258,   259,   260,   261,   262,   263,   264,
-     265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
-     275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
-     285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
-     295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
-     305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
-     315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
-     325,   326,    -1,    -1,   329,   330,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   348,   349,    -1,   351,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   359,   360,   361,   362,   363,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   373,   374,
-     375,   376,   377,    -1,    -1,    -1,   381,   382,   383,   384,
-     385,   386,   387,   388,   389,   390,   391,   392,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   408,   409,   410,   411,   412,   413,   414,
-     415,   416,   417,   418,   419,   420,   421,   422,    -1,   424,
-     425,   426,   427,   428,   429,   430,   431,   432,   433,   434,
-     435,   436,   437,   438,   439,   440,   441,   442,   443,   444,
-     445,   446,   447,   448,   449,   450,   451,   452,   453,   454,
-       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
-      33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
-      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
-      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
-      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
-      73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
-      83,    84,    85,    86,    87,    88,    89,    90,    91,    92,
-      93,    94,    95,    96,    97,    98,    99,   100,   101,   102,
-     103,   104,   105,   106,   107,   108,   109,   110,   111,   112,
-     113,   114,   115,   116,   117,   118,   119,   120,   121,   122,
-     123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
-     133,   134,   135,   136,   137,   138,   139,   140,   141,   142,
-     143,   144,   145,   146,   147,   148,   149,   150,   151,   152,
-     153,   154,   155,   156,   157,   158,   159,   160,   161,   162,
-     163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
-     173,   174,   175,   176,   177,   178,   179,   180,   181,   182,
-     183,   184,   185,   186,   187,   188,   189,   190,   191,   192,
-     193,   194,   195,   196,   197,   198,   199,   200,   201,   202,
-     203,   204,   205,   206,   207,   208,   209,   210,   211,   212,
-     213,   214,   215,   216,   217,   218,   219,   220,   221,   222,
-     223,   224,   225,   226,   227,   228,   229,   230,   231,   232,
-     233,   234,   235,   236,   237,   238,   239,   240,   241,   242,
-     243,   244,   245,   246,   247,   248,   249,   250,   251,   252,
-     253,   254,   255,   256,   257,   258,   259,   260,   261,   262,
-     263,   264,   265,   266,   267,   268,   269,   270,   271,   272,
-     273,   274,   275,   276,   277,   278,   279,   280,   281,   282,
-     283,   284,   285,   286,   287,   288,   289,   290,   291,   292,
-     293,   294,   295,   296,   297,   298,   299,   300,   301,   302,
-     303,   304,   305,   306,   307,   308,   309,   310,   311,   312,
-     313,   314,   315,   316,    -1,    -1,    -1,   320,   321,   322,
-     323,   324,   325,   326,    -1,    -1,   329,   330,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   348,   349,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   360,   361,   362,
-     363,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     373,   374,   375,   376,    -1,    -1,    -1,    -1,   381,   382,
-     383,   384,   385,   386,   387,   388,   389,   390,   391,   392,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   408,   409,   410,   411,   412,
-     413,   414,   415,   416,   417,   418,   419,   420,   421,   422,
-      -1,   424,   425,   426,   427,   428,   429,   430,   431,   432,
-     433,   434,   435,   436,   437,   438,   439,   440,   441,   442,
-     443,   444,   445,   446,   447,   448,   449,   450,   451,   452,
-     453,   454,     3,     4,     5,     6,     7,     8,     9,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
-      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
-      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
-      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
-      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
-      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
-      81,    82,    83,    84,    85,    86,    87,    88,    89,    90,
-      91,    92,    93,    94,    95,    96,    97,    98,    99,   100,
-     101,   102,   103,   104,   105,   106,   107,   108,   109,   110,
-     111,   112,   113,   114,   115,   116,   117,   118,   119,   120,
-     121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
-     131,   132,   133,   134,   135,   136,   137,   138,   139,   140,
-     141,   142,   143,   144,   145,   146,   147,   148,   149,   150,
-     151,   152,   153,   154,   155,   156,   157,   158,   159,   160,
-     161,   162,   163,   164,   165,   166,   167,   168,   169,   170,
-     171,   172,   173,   174,   175,   176,   177,   178,   179,   180,
-     181,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-     191,   192,   193,   194,   195,   196,   197,   198,   199,   200,
-     201,   202,   203,   204,   205,   206,   207,   208,   209,   210,
-     211,   212,   213,   214,   215,   216,   217,   218,   219,   220,
-     221,   222,   223,   224,   225,   226,   227,   228,   229,   230,
-     231,   232,   233,   234,   235,   236,   237,   238,   239,   240,
-     241,   242,   243,   244,   245,   246,   247,   248,   249,   250,
-     251,   252,   253,   254,   255,   256,   257,   258,   259,   260,
-     261,   262,   263,   264,   265,   266,   267,   268,   269,   270,
-     271,   272,   273,   274,   275,   276,   277,   278,   279,   280,
-     281,   282,   283,   284,   285,   286,   287,   288,   289,   290,
-     291,   292,   293,   294,   295,   296,   297,   298,   299,   300,
-     301,   302,   303,   304,   305,   306,   307,   308,   309,   310,
-     311,   312,   313,   314,   315,   316,   317,   318,   319,   320,
-     321,   322,   323,   324,   325,   326,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     351,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   359,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   373,   374,   375,   376,   377,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   386,   387,   388,   389,   390,
-     391,   392,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   408,   409,   410,
-     411,   412,   413,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   422,    -1,   424,   425,   426,   427,   428,   429,   430,
-     431,   432,   433,   434,   435,   436,   437,   438,   439,   440,
-     441,   442,   443,   444,   445,   446,   447,   448,   449,   450,
-     451,   452,   453,   454,     3,     4,     5,     6,     7,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
-      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
-      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
-      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
-      59,    60,    61,    62,    63,    64,    65,    66,    67,    68,
-      69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
-      79,    80,    81,    82,    83,    84,    85,    86,    87,    88,
-      89,    90,    91,    92,    93,    94,    95,    96,    97,    98,
-      99,   100,   101,   102,   103,   104,   105,   106,   107,   108,
-     109,   110,   111,   112,   113,   114,   115,   116,   117,   118,
-     119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
-     129,   130,   131,   132,   133,   134,   135,   136,   137,   138,
-     139,   140,   141,   142,   143,   144,   145,   146,   147,   148,
-     149,   150,   151,   152,   153,   154,   155,   156,   157,   158,
-     159,   160,   161,   162,   163,   164,   165,   166,   167,   168,
-     169,   170,   171,   172,   173,   174,   175,   176,   177,   178,
-     179,   180,   181,   182,   183,   184,   185,   186,   187,   188,
-     189,   190,   191,   192,   193,   194,   195,   196,   197,   198,
-     199,   200,   201,   202,   203,   204,   205,   206,   207,   208,
-     209,   210,   211,   212,   213,   214,   215,   216,   217,   218,
-     219,   220,   221,   222,   223,   224,   225,   226,   227,   228,
-     229,   230,   231,   232,   233,   234,   235,   236,   237,   238,
-     239,   240,   241,   242,   243,   244,   245,   246,   247,   248,
-     249,   250,   251,   252,   253,   254,   255,   256,   257,   258,
-     259,   260,   261,   262,   263,   264,   265,   266,   267,   268,
-     269,   270,   271,   272,   273,   274,   275,   276,   277,   278,
-     279,   280,   281,   282,   283,   284,   285,   286,   287,   288,
-     289,   290,   291,   292,   293,   294,   295,   296,   297,   298,
-     299,   300,   301,   302,   303,   304,   305,   306,   307,   308,
-     309,   310,   311,   312,   313,   314,   315,   316,    -1,    -1,
-      -1,   320,   321,   322,   323,   324,   325,   326,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   778,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   778,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   373,   374,   375,   376,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   386,   387,   388,
-     389,   390,   391,   392,   393,    -1,    -1,   396,    -1,   398,
-     399,    -1,    -1,   402,    -1,    -1,    -1,    -1,    -1,   408,
-     409,   410,   411,   412,   413,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   422,    -1,   424,   425,   426,   427,   428,
-     429,   430,   431,   432,   433,   434,   435,   436,   437,   438,
-     439,   440,   441,   442,   443,   444,   445,   446,   447,   448,
-     449,   450,   451,   452,   453,   454,     3,     4,     5,     6,
-       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
-      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
-      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
-      67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
-      77,    78,    79,    80,    81,    82,    83,    84,    85,    86,
-      87,    88,    89,    90,    91,    92,    93,    94,    95,    96,
-      97,    98,    99,   100,   101,   102,   103,   104,   105,   106,
-     107,   108,   109,   110,   111,   112,   113,   114,   115,   116,
-     117,   118,   119,   120,   121,   122,   123,   124,   125,   126,
-     127,   128,   129,   130,   131,   132,   133,   134,   135,   136,
-     137,   138,   139,   140,   141,   142,   143,   144,   145,   146,
-     147,   148,   149,   150,   151,   152,   153,   154,   155,   156,
-     157,   158,   159,   160,   161,   162,   163,   164,   165,   166,
-     167,   168,   169,   170,   171,   172,   173,   174,   175,   176,
-     177,   178,   179,   180,   181,   182,   183,   184,   185,   186,
-     187,   188,   189,   190,   191,   192,   193,   194,   195,   196,
-     197,   198,   199,   200,   201,   202,   203,   204,   205,   206,
-     207,   208,   209,   210,   211,   212,   213,   214,   215,   216,
-     217,   218,   219,   220,   221,   222,   223,   224,   225,   226,
-     227,   228,   229,   230,   231,   232,   233,   234,   235,   236,
-     237,   238,   239,   240,   241,   242,   243,   244,   245,   246,
-     247,   248,   249,   250,   251,   252,   253,   254,   255,   256,
-     257,   258,   259,   260,   261,   262,   263,   264,   265,   266,
-     267,   268,   269,   270,   271,   272,   273,   274,   275,   276,
-     277,   278,   279,   280,   281,   282,   283,   284,   285,   286,
-     287,   288,   289,   290,   291,   292,   293,   294,   295,   296,
-     297,   298,   299,   300,   301,   302,   303,   304,   305,   306,
-     307,   308,   309,   310,   311,   312,   313,   314,   315,   316,
-      -1,    -1,    -1,   320,   321,   322,   323,   324,   325,   326,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   841,   842,    -1,   844,    -1,   844,    -1,    -1,    -1,
+     841,   842,    -1,   844,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   359,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   373,   374,   375,   376,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   385,   386,
-     387,   388,   389,   390,   391,   392,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   408,   409,   410,   411,   412,   413,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   422,    -1,   424,   425,   426,
-     427,   428,   429,   430,   431,   432,   433,   434,   435,   436,
-     437,   438,   439,   440,   441,   442,   443,   444,   445,   446,
-     447,   448,   449,   450,   451,   452,   453,   454,     3,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
-      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
-      65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
-      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
-      85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
-      95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
-     105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
-     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
-     125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
-     135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
-     145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
-     155,   156,   157,   158,   159,   160,   161,   162,   163,   164,
-     165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
-     175,   176,   177,   178,   179,   180,   181,   182,   183,   184,
-     185,   186,   187,   188,   189,   190,   191,   192,   193,   194,
-     195,   196,   197,   198,   199,   200,   201,   202,   203,   204,
-     205,   206,   207,   208,   209,   210,   211,   212,   213,   214,
-     215,   216,   217,   218,   219,   220,   221,   222,   223,   224,
-     225,   226,   227,   228,   229,   230,   231,   232,   233,   234,
-     235,   236,   237,   238,   239,   240,   241,   242,   243,   244,
-     245,   246,   247,   248,   249,   250,   251,   252,   253,   254,
-     255,   256,   257,   258,   259,   260,   261,   262,   263,   264,
-     265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
-     275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
-     285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
-     295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
-     305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
-     315,   316,    -1,    -1,    -1,   320,   321,   322,   323,   324,
-     325,   326,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   351,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   373,   374,
-     375,   376,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   386,   387,   388,   389,   390,   391,   392,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   408,   409,   410,   411,   412,   413,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   422,    -1,   424,
-     425,   426,   427,   428,   429,   430,   431,   432,   433,   434,
-     435,   436,   437,   438,   439,   440,   441,   442,   443,   444,
-     445,   446,   447,   448,   449,   450,   451,   452,   453,   454,
-       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
-      33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
-      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
-      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
-      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
-      73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
-      83,    84,    85,    86,    87,    88,    89,    90,    91,    92,
-      93,    94,    95,    96,    97,    98,    99,   100,   101,   102,
-     103,   104,   105,   106,   107,   108,   109,   110,   111,   112,
-     113,   114,   115,   116,   117,   118,   119,   120,   121,   122,
-     123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
-     133,   134,   135,   136,   137,   138,   139,   140,   141,   142,
-     143,   144,   145,   146,   147,   148,   149,   150,   151,   152,
-     153,   154,   155,   156,   157,   158,   159,   160,   161,   162,
-     163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
-     173,   174,   175,   176,   177,   178,   179,   180,   181,   182,
-     183,   184,   185,   186,   187,   188,   189,   190,   191,   192,
-     193,   194,   195,   196,   197,   198,   199,   200,   201,   202,
-     203,   204,   205,   206,   207,   208,   209,   210,   211,   212,
-     213,   214,   215,   216,   217,   218,   219,   220,   221,   222,
-     223,   224,   225,   226,   227,   228,   229,   230,   231,   232,
-     233,   234,   235,   236,   237,   238,   239,   240,   241,   242,
-     243,   244,   245,   246,   247,   248,   249,   250,   251,   252,
-     253,   254,   255,   256,   257,   258,   259,   260,   261,   262,
-     263,   264,   265,   266,   267,   268,   269,   270,   271,   272,
-     273,   274,   275,   276,   277,   278,   279,   280,   281,   282,
-     283,   284,   285,   286,   287,   288,   289,   290,   291,   292,
-     293,   294,   295,   296,   297,   298,   299,   300,   301,   302,
-     303,   304,   305,   306,   307,   308,   309,   310,   311,   312,
-     313,   314,   315,   316,    -1,    -1,    -1,   320,   321,   322,
-     323,   324,   325,   326,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   882,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   882,    -1,    -1,    -1,    -1,    -1,    -1,   898,    -1,
+      -1,    -1,    -1,    -1,    -1,   905,    -1,   898,    -1,    -1,
+      -1,    -1,    -1,    -1,   905,   915,    -1,    -1,    -1,   919,
+      -1,    -1,    -1,    -1,   915,   925,    -1,    -1,   919,    -1,
+      -1,    -1,     0,    -1,   925,     3,     4,     5,     6,     7,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
+      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
+      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
+      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
+      78,    79,    80,    81,    82,    83,    84,    85,    86,    87,
+      88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
+      98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
+     108,   109,   110,   111,   112,   113,   114,   115,   116,   117,
+     118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
+     128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
+     138,   139,   140,   141,   142,   143,   144,   145,   146,   147,
+     148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
+     158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
+     168,   169,   170,   171,   172,   173,   174,   175,   176,   177,
+     178,   179,   180,   181,   182,   183,   184,   185,   186,   187,
+     188,   189,   190,   191,   192,   193,   194,   195,   196,   197,
+     198,   199,   200,   201,   202,   203,   204,   205,   206,   207,
+     208,   209,   210,   211,   212,   213,   214,   215,   216,   217,
+     218,   219,   220,   221,   222,   223,   224,   225,   226,   227,
+     228,   229,   230,   231,   232,   233,   234,   235,   236,   237,
+     238,   239,   240,   241,   242,   243,   244,   245,   246,   247,
+     248,   249,   250,   251,   252,   253,   254,   255,   256,   257,
+     258,   259,   260,   261,   262,   263,   264,   265,   266,   267,
+     268,   269,   270,   271,   272,   273,   274,   275,   276,   277,
+     278,   279,   280,   281,   282,   283,   284,   285,   286,   287,
+     288,   289,   290,   291,   292,   293,   294,   295,   296,   297,
+     298,   299,   300,   301,   302,   303,   304,   305,   306,   307,
+     308,   309,   310,   311,   312,   313,   314,   315,   316,   317,
+     318,   319,   320,   321,   322,   323,   324,   325,   326,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   354,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   351,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   359,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   373,   374,   375,   376,   377,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   386,   387,
+     388,   389,   390,   391,   392,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     373,   374,   375,   376,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   386,   387,   388,   389,   390,   391,   392,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   408,   409,   410,   411,   412,
-     413,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   422,
-      -1,   424,   425,   426,   427,   428,   429,   430,   431,   432,
-     433,   434,   435,   436,   437,   438,   439,   440,   441,   442,
-     443,   444,   445,   446,   447,   448,   449,   450,   451,   452,
-     453,   454,     3,     4,     5,     6,     7,     8,     9,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
-      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
-      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
-      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
-      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
-      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
-      81,    82,    83,    84,    85,    86,    87,    88,    89,    90,
-      91,    92,    93,    94,    95,    96,    97,    98,    99,   100,
-     101,   102,   103,   104,   105,   106,   107,   108,   109,   110,
-     111,   112,   113,   114,   115,   116,   117,   118,   119,   120,
-     121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
-     131,   132,   133,   134,   135,   136,   137,   138,   139,   140,
-     141,   142,   143,   144,   145,   146,   147,   148,   149,   150,
-     151,   152,   153,   154,   155,   156,   157,   158,   159,   160,
-     161,   162,   163,   164,   165,   166,   167,   168,   169,   170,
-     171,   172,   173,   174,   175,   176,   177,   178,   179,   180,
-     181,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-     191,   192,   193,   194,   195,   196,   197,   198,   199,   200,
-     201,   202,   203,   204,   205,   206,   207,   208,   209,   210,
-     211,   212,   213,   214,   215,   216,   217,   218,   219,   220,
-     221,   222,   223,   224,   225,   226,   227,   228,   229,   230,
-     231,   232,   233,   234,   235,   236,   237,   238,   239,   240,
-     241,   242,   243,   244,   245,   246,   247,   248,   249,   250,
-     251,   252,   253,   254,   255,   256,   257,   258,   259,   260,
-     261,   262,   263,   264,   265,   266,   267,   268,   269,   270,
-     271,   272,   273,   274,   275,   276,   277,   278,   279,   280,
-     281,   282,   283,   284,   285,   286,   287,   288,   289,   290,
-     291,   292,   293,   294,   295,   296,   297,   298,   299,   300,
-     301,   302,   303,   304,   305,   306,   307,   308,   309,   310,
-     311,   312,   313,   314,   315,   316,    -1,    -1,    -1,   320,
-     321,   322,   323,   324,   325,   326,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   354,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   373,   374,   375,   376,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   386,   387,   388,   389,   390,
-     391,   392,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   408,   409,   410,
-     411,   412,   413,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   422,    -1,   424,   425,   426,   427,   428,   429,   430,
-     431,   432,   433,   434,   435,   436,   437,   438,   439,   440,
-     441,   442,   443,   444,   445,   446,   447,   448,   449,   450,
-     451,   452,   453,   454,     3,     4,     5,     6,     7,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
-      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
-      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
-      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
-      59,    60,    61,    62,    63,    64,    65,    66,    67,    68,
-      69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
-      79,    80,    81,    82,    83,    84,    85,    86,    87,    88,
-      89,    90,    91,    92,    93,    94,    95,    96,    97,    98,
-      99,   100,   101,   102,   103,   104,   105,   106,   107,   108,
-     109,   110,   111,   112,   113,   114,   115,   116,   117,   118,
-     119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
-     129,   130,   131,   132,   133,   134,   135,   136,   137,   138,
-     139,   140,   141,   142,   143,   144,   145,   146,   147,   148,
-     149,   150,   151,   152,   153,   154,   155,   156,   157,   158,
-     159,   160,   161,   162,   163,   164,   165,   166,   167,   168,
-     169,   170,   171,   172,   173,   174,   175,   176,   177,   178,
-     179,   180,   181,   182,   183,   184,   185,   186,   187,   188,
-     189,   190,   191,   192,   193,   194,   195,   196,   197,   198,
-     199,   200,   201,   202,   203,   204,   205,   206,   207,   208,
-     209,   210,   211,   212,   213,   214,   215,   216,   217,   218,
-     219,   220,   221,   222,   223,   224,   225,   226,   227,   228,
-     229,   230,   231,   232,   233,   234,   235,   236,   237,   238,
-     239,   240,   241,   242,   243,   244,   245,   246,   247,   248,
-     249,   250,   251,   252,   253,   254,   255,   256,   257,   258,
-     259,   260,   261,   262,   263,   264,   265,   266,   267,   268,
-     269,   270,   271,   272,   273,   274,   275,   276,   277,   278,
-     279,   280,   281,   282,   283,   284,   285,   286,   287,   288,
-     289,   290,   291,   292,   293,   294,   295,   296,   297,   298,
-     299,   300,   301,   302,   303,   304,   305,   306,   307,   308,
-     309,   310,   311,   312,   313,   314,   315,   316,    -1,    -1,
-      -1,   320,   321,   322,   323,   324,   325,   326,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   354,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   373,   374,   375,   376,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   386,   387,   388,
-     389,   390,   391,   392,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   408,
-     409,   410,   411,   412,   413,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   422,    -1,   424,   425,   426,   427,   428,
-     429,   430,   431,   432,   433,   434,   435,   436,   437,   438,
-     439,   440,   441,   442,   443,   444,   445,   446,   447,   448,
-     449,   450,   451,   452,   453,   454,     3,     4,     5,     6,
-       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
-      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
-      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
-      67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
-      77,    78,    79,    80,    81,    82,    83,    84,    85,    86,
-      87,    88,    89,    90,    91,    92,    93,    94,    95,    96,
-      97,    98,    99,   100,   101,   102,   103,   104,   105,   106,
-     107,   108,   109,   110,   111,   112,   113,   114,   115,   116,
-     117,   118,   119,   120,   121,   122,   123,   124,   125,   126,
-     127,   128,   129,   130,   131,   132,   133,   134,   135,   136,
-     137,   138,   139,   140,   141,   142,   143,   144,   145,   146,
-     147,   148,   149,   150,   151,   152,   153,   154,   155,   156,
-     157,   158,   159,   160,   161,   162,   163,   164,   165,   166,
-     167,   168,   169,   170,   171,   172,   173,   174,   175,   176,
-     177,   178,   179,   180,   181,   182,   183,   184,   185,   186,
-     187,   188,   189,   190,   191,   192,   193,   194,   195,   196,
-     197,   198,   199,   200,   201,   202,   203,   204,   205,   206,
-     207,   208,   209,   210,   211,   212,   213,   214,   215,   216,
-     217,   218,   219,   220,   221,   222,   223,   224,   225,   226,
-     227,   228,   229,   230,   231,   232,   233,   234,   235,   236,
-     237,   238,   239,   240,   241,   242,   243,   244,   245,   246,
-     247,   248,   249,   250,   251,   252,   253,   254,   255,   256,
-     257,   258,   259,   260,   261,   262,   263,   264,   265,   266,
-     267,   268,   269,   270,   271,   272,   273,   274,   275,   276,
-     277,   278,   279,   280,   281,   282,   283,   284,   285,   286,
-     287,   288,   289,   290,   291,   292,   293,   294,   295,   296,
-     297,   298,   299,   300,   301,   302,   303,   304,   305,   306,
-     307,   308,   309,   310,   311,   312,   313,   314,   315,   316,
-      -1,    -1,    -1,   320,   321,   322,   323,   324,   325,   326,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   373,   374,   375,   376,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   386,
-     387,   388,   389,   390,   391,   392,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   408,   409,   410,   411,   412,   413,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   422,    -1,   424,   425,   426,
-     427,   428,   429,   430,   431,   432,   433,   434,   435,   436,
-     437,   438,   439,   440,   441,   442,   443,   444,   445,   446,
-     447,   448,   449,   450,   451,   452,   453,   454,     4,     5,
+     408,   409,   410,   411,   412,   413,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   422,    -1,   424,   425,   426,   427,
+     428,   429,   430,   431,   432,   433,   434,   435,   436,   437,
+     438,   439,   440,   441,   442,   443,   444,   445,   446,   447,
+     448,   449,   450,   451,   452,   453,   454,     3,     4,     5,
        6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
       26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
       36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
       46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
-      56,    57,    58,    59,    60,    -1,    -1,    63,    64,    65,
+      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
       66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
       76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
       86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
@@ -3783,68 +3105,343 @@
      286,   287,   288,   289,   290,   291,   292,   293,   294,   295,
      296,   297,   298,   299,   300,   301,   302,   303,   304,   305,
      306,   307,   308,   309,   310,   311,   312,   313,   314,   315,
-     316,    -1,    -1,    -1,    -1,    -1,    -1,   323,    -1,    -1,
-      -1,    -1,    -1,   329,   330,    -1,    -1,    -1,    -1,    -1,
+     316,   317,   318,   319,   320,   321,   322,   323,   324,   325,
+     326,    -1,    -1,   329,   330,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   348,   349,    -1,    -1,    -1,   353,   354,    -1,
-      -1,    -1,    -1,    -1,   360,   361,   362,   363,    -1,    -1,
+      -1,    -1,   348,   349,    -1,   351,    -1,   353,   354,    -1,
+      -1,    -1,    -1,   359,   360,   361,   362,   363,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   373,   374,   375,
+     376,   377,    -1,    -1,    -1,   381,   382,   383,   384,   385,
+     386,   387,   388,   389,   390,   391,   392,   393,   394,   395,
+     396,    -1,   398,   399,   400,   401,   402,   403,   404,   405,
+     406,   407,   408,   409,   410,   411,   412,   413,   414,   415,
+     416,   417,   418,   419,   420,   421,   422,   423,   424,   425,
+     426,   427,   428,   429,   430,   431,   432,   433,   434,   435,
+     436,   437,   438,   439,   440,   441,   442,   443,   444,   445,
+     446,   447,   448,   449,   450,   451,   452,   453,   454,     3,
+       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
+      34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
+      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
+      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
+      64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
+      74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
+      84,    85,    86,    87,    88,    89,    90,    91,    92,    93,
+      94,    95,    96,    97,    98,    99,   100,   101,   102,   103,
+     104,   105,   106,   107,   108,   109,   110,   111,   112,   113,
+     114,   115,   116,   117,   118,   119,   120,   121,   122,   123,
+     124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
+     134,   135,   136,   137,   138,   139,   140,   141,   142,   143,
+     144,   145,   146,   147,   148,   149,   150,   151,   152,   153,
+     154,   155,   156,   157,   158,   159,   160,   161,   162,   163,
+     164,   165,   166,   167,   168,   169,   170,   171,   172,   173,
+     174,   175,   176,   177,   178,   179,   180,   181,   182,   183,
+     184,   185,   186,   187,   188,   189,   190,   191,   192,   193,
+     194,   195,   196,   197,   198,   199,   200,   201,   202,   203,
+     204,   205,   206,   207,   208,   209,   210,   211,   212,   213,
+     214,   215,   216,   217,   218,   219,   220,   221,   222,   223,
+     224,   225,   226,   227,   228,   229,   230,   231,   232,   233,
+     234,   235,   236,   237,   238,   239,   240,   241,   242,   243,
+     244,   245,   246,   247,   248,   249,   250,   251,   252,   253,
+     254,   255,   256,   257,   258,   259,   260,   261,   262,   263,
+     264,   265,   266,   267,   268,   269,   270,   271,   272,   273,
+     274,   275,   276,   277,   278,   279,   280,   281,   282,   283,
+     284,   285,   286,   287,   288,   289,   290,   291,   292,   293,
+     294,   295,   296,   297,   298,   299,   300,   301,   302,   303,
+     304,   305,   306,   307,   308,   309,   310,   311,   312,   313,
+     314,   315,   316,   317,   318,   319,   320,   321,   322,   323,
+     324,   325,   326,    -1,    -1,   329,   330,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   381,   382,   383,   384,   385,
-     386,    -1,    -1,    -1,    -1,   391,   392,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   348,   349,    -1,   351,    -1,   353,
+     354,    -1,    -1,    -1,    -1,   359,   360,   361,   362,   363,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   373,
+     374,   375,   376,   377,    -1,    -1,    -1,   381,   382,   383,
+     384,   385,   386,   387,   388,   389,   390,   391,   392,   393,
+     394,   395,   396,    -1,   398,   399,   400,   401,   402,   403,
+     404,   405,   406,   407,   408,   409,   410,   411,   412,   413,
+     414,   415,   416,   417,   418,   419,   420,   421,   422,   423,
+     424,   425,   426,   427,   428,   429,   430,   431,   432,   433,
+     434,   435,   436,   437,   438,   439,   440,   441,   442,   443,
+     444,   445,   446,   447,   448,   449,   450,   451,   452,   453,
+     454,     3,     4,     5,     6,     7,     8,     9,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
+      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
+      42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
+      52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
+      62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
+      72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
+      82,    83,    84,    85,    86,    87,    88,    89,    90,    91,
+      92,    93,    94,    95,    96,    97,    98,    99,   100,   101,
+     102,   103,   104,   105,   106,   107,   108,   109,   110,   111,
+     112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
+     122,   123,   124,   125,   126,   127,   128,   129,   130,   131,
+     132,   133,   134,   135,   136,   137,   138,   139,   140,   141,
+     142,   143,   144,   145,   146,   147,   148,   149,   150,   151,
+     152,   153,   154,   155,   156,   157,   158,   159,   160,   161,
+     162,   163,   164,   165,   166,   167,   168,   169,   170,   171,
+     172,   173,   174,   175,   176,   177,   178,   179,   180,   181,
+     182,   183,   184,   185,   186,   187,   188,   189,   190,   191,
+     192,   193,   194,   195,   196,   197,   198,   199,   200,   201,
+     202,   203,   204,   205,   206,   207,   208,   209,   210,   211,
+     212,   213,   214,   215,   216,   217,   218,   219,   220,   221,
+     222,   223,   224,   225,   226,   227,   228,   229,   230,   231,
+     232,   233,   234,   235,   236,   237,   238,   239,   240,   241,
+     242,   243,   244,   245,   246,   247,   248,   249,   250,   251,
+     252,   253,   254,   255,   256,   257,   258,   259,   260,   261,
+     262,   263,   264,   265,   266,   267,   268,   269,   270,   271,
+     272,   273,   274,   275,   276,   277,   278,   279,   280,   281,
+     282,   283,   284,   285,   286,   287,   288,   289,   290,   291,
+     292,   293,   294,   295,   296,   297,   298,   299,   300,   301,
+     302,   303,   304,   305,   306,   307,   308,   309,   310,   311,
+     312,   313,   314,   315,   316,   317,   318,   319,   320,   321,
+     322,   323,   324,   325,   326,    -1,    -1,   329,   330,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   414,   415,
-     416,   417,   418,   419,   420,   421,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     436,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
-      33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
-      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
-      53,    54,    55,    56,    57,    58,    59,    60,    -1,    -1,
-      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
-      73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
-      83,    84,    85,    86,    87,    88,    89,    90,    91,    92,
-      93,    94,    95,    96,    97,    98,    99,   100,   101,   102,
-     103,   104,   105,   106,   107,   108,   109,   110,   111,   112,
-     113,   114,   115,   116,   117,   118,   119,   120,   121,   122,
-     123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
-     133,   134,   135,   136,   137,   138,   139,   140,   141,   142,
-     143,   144,   145,   146,   147,   148,   149,   150,   151,   152,
-     153,   154,   155,   156,   157,   158,   159,   160,   161,   162,
-     163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
-     173,   174,   175,   176,   177,   178,   179,   180,   181,   182,
-     183,   184,   185,   186,   187,   188,   189,   190,   191,   192,
-     193,   194,   195,   196,   197,   198,   199,   200,   201,   202,
-     203,   204,   205,   206,   207,   208,   209,   210,   211,   212,
-     213,   214,   215,   216,   217,   218,   219,   220,   221,   222,
-     223,   224,   225,   226,   227,   228,   229,   230,   231,   232,
-     233,   234,   235,   236,   237,   238,   239,   240,   241,   242,
-     243,   244,   245,   246,   247,   248,   249,   250,   251,   252,
-     253,   254,   255,   256,   257,   258,   259,   260,   261,   262,
-     263,   264,   265,   266,   267,   268,   269,   270,   271,   272,
-     273,   274,   275,   276,   277,   278,   279,   280,   281,   282,
-     283,   284,   285,   286,   287,   288,   289,   290,   291,   292,
-     293,   294,   295,   296,   297,   298,   299,   300,   301,   302,
-     303,   304,   305,   306,   307,   308,   309,   310,   311,   312,
-     313,   314,   315,   316,    -1,    -1,    -1,    -1,    -1,    -1,
-     323,    -1,    -1,    -1,    -1,    -1,   329,   330,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   348,   349,    -1,    -1,    -1,
-     353,   354,    -1,    -1,    -1,    -1,    -1,   360,   361,   362,
-     363,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   381,   382,
-     383,   384,   385,   386,    -1,    -1,    -1,    -1,   391,   392,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   414,   415,   416,   417,   418,   419,   420,   421,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   436,     4,     5,     6,     7,     8,     9,
+      -1,    -1,    -1,    -1,    -1,    -1,   348,   349,    -1,   351,
+      -1,   353,    -1,    -1,    -1,    -1,    -1,   359,   360,   361,
+     362,   363,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   373,   374,   375,   376,   377,    -1,    -1,    -1,   381,
+     382,   383,   384,   385,   386,   387,   388,   389,   390,   391,
+     392,   393,   394,   395,   396,    -1,   398,   399,   400,   401,
+     402,   403,   404,   405,   406,   407,   408,   409,   410,   411,
+     412,   413,   414,   415,   416,   417,   418,   419,   420,   421,
+     422,   423,   424,   425,   426,   427,   428,   429,   430,   431,
+     432,   433,   434,   435,   436,   437,   438,   439,   440,   441,
+     442,   443,   444,   445,   446,   447,   448,   449,   450,   451,
+     452,   453,   454,     3,     4,     5,     6,     7,     8,     9,
       10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
       20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
       30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
       40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
       50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
-      60,    -1,    -1,    63,    64,    65,    66,    67,    68,    69,
+      60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
+      70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
+      80,    81,    82,    83,    84,    85,    86,    87,    88,    89,
+      90,    91,    92,    93,    94,    95,    96,    97,    98,    99,
+     100,   101,   102,   103,   104,   105,   106,   107,   108,   109,
+     110,   111,   112,   113,   114,   115,   116,   117,   118,   119,
+     120,   121,   122,   123,   124,   125,   126,   127,   128,   129,
+     130,   131,   132,   133,   134,   135,   136,   137,   138,   139,
+     140,   141,   142,   143,   144,   145,   146,   147,   148,   149,
+     150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
+     160,   161,   162,   163,   164,   165,   166,   167,   168,   169,
+     170,   171,   172,   173,   174,   175,   176,   177,   178,   179,
+     180,   181,   182,   183,   184,   185,   186,   187,   188,   189,
+     190,   191,   192,   193,   194,   195,   196,   197,   198,   199,
+     200,   201,   202,   203,   204,   205,   206,   207,   208,   209,
+     210,   211,   212,   213,   214,   215,   216,   217,   218,   219,
+     220,   221,   222,   223,   224,   225,   226,   227,   228,   229,
+     230,   231,   232,   233,   234,   235,   236,   237,   238,   239,
+     240,   241,   242,   243,   244,   245,   246,   247,   248,   249,
+     250,   251,   252,   253,   254,   255,   256,   257,   258,   259,
+     260,   261,   262,   263,   264,   265,   266,   267,   268,   269,
+     270,   271,   272,   273,   274,   275,   276,   277,   278,   279,
+     280,   281,   282,   283,   284,   285,   286,   287,   288,   289,
+     290,   291,   292,   293,   294,   295,   296,   297,   298,   299,
+     300,   301,   302,   303,   304,   305,   306,   307,   308,   309,
+     310,   311,   312,   313,   314,   315,   316,   317,   318,   319,
+     320,   321,   322,   323,   324,   325,   326,    -1,    -1,   329,
+     330,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   348,   349,
+      -1,   351,    -1,   353,    -1,    -1,    -1,    -1,    -1,   359,
+     360,   361,   362,   363,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   373,   374,   375,   376,   377,    -1,    -1,
+      -1,   381,   382,   383,   384,   385,   386,   387,   388,   389,
+     390,   391,   392,   393,   394,   395,   396,    -1,   398,   399,
+     400,   401,   402,   403,   404,   405,   406,   407,   408,   409,
+     410,   411,   412,   413,   414,   415,   416,   417,   418,   419,
+     420,   421,   422,   423,   424,   425,   426,   427,   428,   429,
+     430,   431,   432,   433,   434,   435,   436,   437,   438,   439,
+     440,   441,   442,   443,   444,   445,   446,   447,   448,   449,
+     450,   451,   452,   453,   454,     3,     4,     5,     6,     7,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
+      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
+      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
+      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
+      78,    79,    80,    81,    82,    83,    84,    85,    86,    87,
+      88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
+      98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
+     108,   109,   110,   111,   112,   113,   114,   115,   116,   117,
+     118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
+     128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
+     138,   139,   140,   141,   142,   143,   144,   145,   146,   147,
+     148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
+     158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
+     168,   169,   170,   171,   172,   173,   174,   175,   176,   177,
+     178,   179,   180,   181,   182,   183,   184,   185,   186,   187,
+     188,   189,   190,   191,   192,   193,   194,   195,   196,   197,
+     198,   199,   200,   201,   202,   203,   204,   205,   206,   207,
+     208,   209,   210,   211,   212,   213,   214,   215,   216,   217,
+     218,   219,   220,   221,   222,   223,   224,   225,   226,   227,
+     228,   229,   230,   231,   232,   233,   234,   235,   236,   237,
+     238,   239,   240,   241,   242,   243,   244,   245,   246,   247,
+     248,   249,   250,   251,   252,   253,   254,   255,   256,   257,
+     258,   259,   260,   261,   262,   263,   264,   265,   266,   267,
+     268,   269,   270,   271,   272,   273,   274,   275,   276,   277,
+     278,   279,   280,   281,   282,   283,   284,   285,   286,   287,
+     288,   289,   290,   291,   292,   293,   294,   295,   296,   297,
+     298,   299,   300,   301,   302,   303,   304,   305,   306,   307,
+     308,   309,   310,   311,   312,   313,   314,   315,   316,   317,
+     318,   319,   320,   321,   322,   323,   324,   325,   326,    -1,
+      -1,   329,   330,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     348,   349,    -1,   351,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   359,   360,   361,   362,   363,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   373,   374,   375,   376,   377,
+      -1,    -1,    -1,   381,   382,   383,   384,   385,   386,   387,
+     388,   389,   390,   391,   392,   393,   394,   395,   396,    -1,
+     398,   399,   400,   401,   402,   403,   404,   405,   406,   407,
+     408,   409,   410,   411,   412,   413,   414,   415,   416,   417,
+     418,   419,   420,   421,   422,   423,   424,   425,   426,   427,
+     428,   429,   430,   431,   432,   433,   434,   435,   436,   437,
+     438,   439,   440,   441,   442,   443,   444,   445,   446,   447,
+     448,   449,   450,   451,   452,   453,   454,     3,     4,     5,
+       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
+      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
+      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
+      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
+      66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
+      76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
+      86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
+      96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
+     106,   107,   108,   109,   110,   111,   112,   113,   114,   115,
+     116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
+     126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
+     136,   137,   138,   139,   140,   141,   142,   143,   144,   145,
+     146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
+     156,   157,   158,   159,   160,   161,   162,   163,   164,   165,
+     166,   167,   168,   169,   170,   171,   172,   173,   174,   175,
+     176,   177,   178,   179,   180,   181,   182,   183,   184,   185,
+     186,   187,   188,   189,   190,   191,   192,   193,   194,   195,
+     196,   197,   198,   199,   200,   201,   202,   203,   204,   205,
+     206,   207,   208,   209,   210,   211,   212,   213,   214,   215,
+     216,   217,   218,   219,   220,   221,   222,   223,   224,   225,
+     226,   227,   228,   229,   230,   231,   232,   233,   234,   235,
+     236,   237,   238,   239,   240,   241,   242,   243,   244,   245,
+     246,   247,   248,   249,   250,   251,   252,   253,   254,   255,
+     256,   257,   258,   259,   260,   261,   262,   263,   264,   265,
+     266,   267,   268,   269,   270,   271,   272,   273,   274,   275,
+     276,   277,   278,   279,   280,   281,   282,   283,   284,   285,
+     286,   287,   288,   289,   290,   291,   292,   293,   294,   295,
+     296,   297,   298,   299,   300,   301,   302,   303,   304,   305,
+     306,   307,   308,   309,   310,   311,   312,   313,   314,   315,
+     316,   317,   318,   319,   320,   321,   322,   323,   324,   325,
+     326,    -1,    -1,   329,   330,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   348,   349,    -1,   351,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   359,   360,   361,   362,   363,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   373,   374,   375,
+     376,   377,    -1,    -1,    -1,   381,   382,   383,   384,   385,
+     386,   387,   388,   389,   390,   391,   392,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   408,   409,   410,   411,   412,   413,   414,   415,
+     416,   417,   418,   419,   420,   421,   422,    -1,   424,   425,
+     426,   427,   428,   429,   430,   431,   432,   433,   434,   435,
+     436,   437,   438,   439,   440,   441,   442,   443,   444,   445,
+     446,   447,   448,   449,   450,   451,   452,   453,   454,     3,
+       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
+      34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
+      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
+      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
+      64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
+      74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
+      84,    85,    86,    87,    88,    89,    90,    91,    92,    93,
+      94,    95,    96,    97,    98,    99,   100,   101,   102,   103,
+     104,   105,   106,   107,   108,   109,   110,   111,   112,   113,
+     114,   115,   116,   117,   118,   119,   120,   121,   122,   123,
+     124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
+     134,   135,   136,   137,   138,   139,   140,   141,   142,   143,
+     144,   145,   146,   147,   148,   149,   150,   151,   152,   153,
+     154,   155,   156,   157,   158,   159,   160,   161,   162,   163,
+     164,   165,   166,   167,   168,   169,   170,   171,   172,   173,
+     174,   175,   176,   177,   178,   179,   180,   181,   182,   183,
+     184,   185,   186,   187,   188,   189,   190,   191,   192,   193,
+     194,   195,   196,   197,   198,   199,   200,   201,   202,   203,
+     204,   205,   206,   207,   208,   209,   210,   211,   212,   213,
+     214,   215,   216,   217,   218,   219,   220,   221,   222,   223,
+     224,   225,   226,   227,   228,   229,   230,   231,   232,   233,
+     234,   235,   236,   237,   238,   239,   240,   241,   242,   243,
+     244,   245,   246,   247,   248,   249,   250,   251,   252,   253,
+     254,   255,   256,   257,   258,   259,   260,   261,   262,   263,
+     264,   265,   266,   267,   268,   269,   270,   271,   272,   273,
+     274,   275,   276,   277,   278,   279,   280,   281,   282,   283,
+     284,   285,   286,   287,   288,   289,   290,   291,   292,   293,
+     294,   295,   296,   297,   298,   299,   300,   301,   302,   303,
+     304,   305,   306,   307,   308,   309,   310,   311,   312,   313,
+     314,   315,   316,    -1,    -1,    -1,   320,   321,   322,   323,
+     324,   325,   326,    -1,    -1,   329,   330,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   348,   349,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   360,   361,   362,   363,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   373,
+     374,   375,   376,    -1,    -1,    -1,    -1,   381,   382,   383,
+     384,   385,   386,   387,   388,   389,   390,   391,   392,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   408,   409,   410,   411,   412,   413,
+     414,   415,   416,   417,   418,   419,   420,   421,   422,    -1,
+     424,   425,   426,   427,   428,   429,   430,   431,   432,   433,
+     434,   435,   436,   437,   438,   439,   440,   441,   442,   443,
+     444,   445,   446,   447,   448,   449,   450,   451,   452,   453,
+     454,     3,     4,     5,     6,     7,     8,     9,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
+      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
+      42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
+      52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
+      62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
+      72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
+      82,    83,    84,    85,    86,    87,    88,    89,    90,    91,
+      92,    93,    94,    95,    96,    97,    98,    99,   100,   101,
+     102,   103,   104,   105,   106,   107,   108,   109,   110,   111,
+     112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
+     122,   123,   124,   125,   126,   127,   128,   129,   130,   131,
+     132,   133,   134,   135,   136,   137,   138,   139,   140,   141,
+     142,   143,   144,   145,   146,   147,   148,   149,   150,   151,
+     152,   153,   154,   155,   156,   157,   158,   159,   160,   161,
+     162,   163,   164,   165,   166,   167,   168,   169,   170,   171,
+     172,   173,   174,   175,   176,   177,   178,   179,   180,   181,
+     182,   183,   184,   185,   186,   187,   188,   189,   190,   191,
+     192,   193,   194,   195,   196,   197,   198,   199,   200,   201,
+     202,   203,   204,   205,   206,   207,   208,   209,   210,   211,
+     212,   213,   214,   215,   216,   217,   218,   219,   220,   221,
+     222,   223,   224,   225,   226,   227,   228,   229,   230,   231,
+     232,   233,   234,   235,   236,   237,   238,   239,   240,   241,
+     242,   243,   244,   245,   246,   247,   248,   249,   250,   251,
+     252,   253,   254,   255,   256,   257,   258,   259,   260,   261,
+     262,   263,   264,   265,   266,   267,   268,   269,   270,   271,
+     272,   273,   274,   275,   276,   277,   278,   279,   280,   281,
+     282,   283,   284,   285,   286,   287,   288,   289,   290,   291,
+     292,   293,   294,   295,   296,   297,   298,   299,   300,   301,
+     302,   303,   304,   305,   306,   307,   308,   309,   310,   311,
+     312,   313,   314,   315,   316,   317,   318,   319,   320,   321,
+     322,   323,   324,   325,   326,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   351,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   359,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   373,   374,   375,   376,   377,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   386,   387,   388,   389,   390,   391,
+     392,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   408,   409,   410,   411,
+     412,   413,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     422,    -1,   424,   425,   426,   427,   428,   429,   430,   431,
+     432,   433,   434,   435,   436,   437,   438,   439,   440,   441,
+     442,   443,   444,   445,   446,   447,   448,   449,   450,   451,
+     452,   453,   454,     3,     4,     5,     6,     7,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
+      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
+      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
+      60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
       70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
       80,    81,    82,    83,    84,    85,    86,    87,    88,    89,
       90,    91,    92,    93,    94,    95,    96,    97,    98,    99,
@@ -3870,18 +3467,291 @@
      290,   291,   292,   293,   294,   295,   296,   297,   298,   299,
      300,   301,   302,   303,   304,   305,   306,   307,   308,   309,
      310,   311,   312,   313,   314,   315,   316,    -1,    -1,    -1,
-      -1,    -1,    -1,   323,    -1,    -1,    -1,    -1,    -1,   329,
-     330,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   348,   349,
-      -1,    -1,   352,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     360,   361,   362,   363,    -1,    -1,    -1,    -1,    -1,    -1,
+     320,   321,   322,   323,   324,   325,   326,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   381,   382,   383,   384,   385,   386,    -1,    -1,    -1,
-      -1,   391,   392,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   414,   415,   416,   417,   418,   419,
-     420,   421,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   436,     4,     5,     6,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   373,   374,   375,   376,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   386,   387,   388,   389,
+     390,   391,   392,   393,    -1,    -1,   396,    -1,   398,   399,
+      -1,    -1,   402,    -1,    -1,    -1,    -1,    -1,   408,   409,
+     410,   411,   412,   413,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   422,    -1,   424,   425,   426,   427,   428,   429,
+     430,   431,   432,   433,   434,   435,   436,   437,   438,   439,
+     440,   441,   442,   443,   444,   445,   446,   447,   448,   449,
+     450,   451,   452,   453,   454,     3,     4,     5,     6,     7,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
+      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
+      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
+      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
+      78,    79,    80,    81,    82,    83,    84,    85,    86,    87,
+      88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
+      98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
+     108,   109,   110,   111,   112,   113,   114,   115,   116,   117,
+     118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
+     128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
+     138,   139,   140,   141,   142,   143,   144,   145,   146,   147,
+     148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
+     158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
+     168,   169,   170,   171,   172,   173,   174,   175,   176,   177,
+     178,   179,   180,   181,   182,   183,   184,   185,   186,   187,
+     188,   189,   190,   191,   192,   193,   194,   195,   196,   197,
+     198,   199,   200,   201,   202,   203,   204,   205,   206,   207,
+     208,   209,   210,   211,   212,   213,   214,   215,   216,   217,
+     218,   219,   220,   221,   222,   223,   224,   225,   226,   227,
+     228,   229,   230,   231,   232,   233,   234,   235,   236,   237,
+     238,   239,   240,   241,   242,   243,   244,   245,   246,   247,
+     248,   249,   250,   251,   252,   253,   254,   255,   256,   257,
+     258,   259,   260,   261,   262,   263,   264,   265,   266,   267,
+     268,   269,   270,   271,   272,   273,   274,   275,   276,   277,
+     278,   279,   280,   281,   282,   283,   284,   285,   286,   287,
+     288,   289,   290,   291,   292,   293,   294,   295,   296,   297,
+     298,   299,   300,   301,   302,   303,   304,   305,   306,   307,
+     308,   309,   310,   311,   312,   313,   314,   315,   316,    -1,
+      -1,    -1,   320,   321,   322,   323,   324,   325,   326,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   359,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   373,   374,   375,   376,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   385,   386,   387,
+     388,   389,   390,   391,   392,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     408,   409,   410,   411,   412,   413,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   422,    -1,   424,   425,   426,   427,
+     428,   429,   430,   431,   432,   433,   434,   435,   436,   437,
+     438,   439,   440,   441,   442,   443,   444,   445,   446,   447,
+     448,   449,   450,   451,   452,   453,   454,     3,     4,     5,
+       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
+      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
+      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
+      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
+      66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
+      76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
+      86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
+      96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
+     106,   107,   108,   109,   110,   111,   112,   113,   114,   115,
+     116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
+     126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
+     136,   137,   138,   139,   140,   141,   142,   143,   144,   145,
+     146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
+     156,   157,   158,   159,   160,   161,   162,   163,   164,   165,
+     166,   167,   168,   169,   170,   171,   172,   173,   174,   175,
+     176,   177,   178,   179,   180,   181,   182,   183,   184,   185,
+     186,   187,   188,   189,   190,   191,   192,   193,   194,   195,
+     196,   197,   198,   199,   200,   201,   202,   203,   204,   205,
+     206,   207,   208,   209,   210,   211,   212,   213,   214,   215,
+     216,   217,   218,   219,   220,   221,   222,   223,   224,   225,
+     226,   227,   228,   229,   230,   231,   232,   233,   234,   235,
+     236,   237,   238,   239,   240,   241,   242,   243,   244,   245,
+     246,   247,   248,   249,   250,   251,   252,   253,   254,   255,
+     256,   257,   258,   259,   260,   261,   262,   263,   264,   265,
+     266,   267,   268,   269,   270,   271,   272,   273,   274,   275,
+     276,   277,   278,   279,   280,   281,   282,   283,   284,   285,
+     286,   287,   288,   289,   290,   291,   292,   293,   294,   295,
+     296,   297,   298,   299,   300,   301,   302,   303,   304,   305,
+     306,   307,   308,   309,   310,   311,   312,   313,   314,   315,
+     316,    -1,    -1,    -1,   320,   321,   322,   323,   324,   325,
+     326,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   351,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   373,   374,   375,
+     376,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     386,   387,   388,   389,   390,   391,   392,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   408,   409,   410,   411,   412,   413,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   422,    -1,   424,   425,
+     426,   427,   428,   429,   430,   431,   432,   433,   434,   435,
+     436,   437,   438,   439,   440,   441,   442,   443,   444,   445,
+     446,   447,   448,   449,   450,   451,   452,   453,   454,     3,
+       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
+      34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
+      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
+      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
+      64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
+      74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
+      84,    85,    86,    87,    88,    89,    90,    91,    92,    93,
+      94,    95,    96,    97,    98,    99,   100,   101,   102,   103,
+     104,   105,   106,   107,   108,   109,   110,   111,   112,   113,
+     114,   115,   116,   117,   118,   119,   120,   121,   122,   123,
+     124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
+     134,   135,   136,   137,   138,   139,   140,   141,   142,   143,
+     144,   145,   146,   147,   148,   149,   150,   151,   152,   153,
+     154,   155,   156,   157,   158,   159,   160,   161,   162,   163,
+     164,   165,   166,   167,   168,   169,   170,   171,   172,   173,
+     174,   175,   176,   177,   178,   179,   180,   181,   182,   183,
+     184,   185,   186,   187,   188,   189,   190,   191,   192,   193,
+     194,   195,   196,   197,   198,   199,   200,   201,   202,   203,
+     204,   205,   206,   207,   208,   209,   210,   211,   212,   213,
+     214,   215,   216,   217,   218,   219,   220,   221,   222,   223,
+     224,   225,   226,   227,   228,   229,   230,   231,   232,   233,
+     234,   235,   236,   237,   238,   239,   240,   241,   242,   243,
+     244,   245,   246,   247,   248,   249,   250,   251,   252,   253,
+     254,   255,   256,   257,   258,   259,   260,   261,   262,   263,
+     264,   265,   266,   267,   268,   269,   270,   271,   272,   273,
+     274,   275,   276,   277,   278,   279,   280,   281,   282,   283,
+     284,   285,   286,   287,   288,   289,   290,   291,   292,   293,
+     294,   295,   296,   297,   298,   299,   300,   301,   302,   303,
+     304,   305,   306,   307,   308,   309,   310,   311,   312,   313,
+     314,   315,   316,    -1,    -1,    -1,   320,   321,   322,   323,
+     324,   325,   326,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     354,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   373,
+     374,   375,   376,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   386,   387,   388,   389,   390,   391,   392,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   408,   409,   410,   411,   412,   413,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   422,    -1,
+     424,   425,   426,   427,   428,   429,   430,   431,   432,   433,
+     434,   435,   436,   437,   438,   439,   440,   441,   442,   443,
+     444,   445,   446,   447,   448,   449,   450,   451,   452,   453,
+     454,     3,     4,     5,     6,     7,     8,     9,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
+      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
+      42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
+      52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
+      62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
+      72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
+      82,    83,    84,    85,    86,    87,    88,    89,    90,    91,
+      92,    93,    94,    95,    96,    97,    98,    99,   100,   101,
+     102,   103,   104,   105,   106,   107,   108,   109,   110,   111,
+     112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
+     122,   123,   124,   125,   126,   127,   128,   129,   130,   131,
+     132,   133,   134,   135,   136,   137,   138,   139,   140,   141,
+     142,   143,   144,   145,   146,   147,   148,   149,   150,   151,
+     152,   153,   154,   155,   156,   157,   158,   159,   160,   161,
+     162,   163,   164,   165,   166,   167,   168,   169,   170,   171,
+     172,   173,   174,   175,   176,   177,   178,   179,   180,   181,
+     182,   183,   184,   185,   186,   187,   188,   189,   190,   191,
+     192,   193,   194,   195,   196,   197,   198,   199,   200,   201,
+     202,   203,   204,   205,   206,   207,   208,   209,   210,   211,
+     212,   213,   214,   215,   216,   217,   218,   219,   220,   221,
+     222,   223,   224,   225,   226,   227,   228,   229,   230,   231,
+     232,   233,   234,   235,   236,   237,   238,   239,   240,   241,
+     242,   243,   244,   245,   246,   247,   248,   249,   250,   251,
+     252,   253,   254,   255,   256,   257,   258,   259,   260,   261,
+     262,   263,   264,   265,   266,   267,   268,   269,   270,   271,
+     272,   273,   274,   275,   276,   277,   278,   279,   280,   281,
+     282,   283,   284,   285,   286,   287,   288,   289,   290,   291,
+     292,   293,   294,   295,   296,   297,   298,   299,   300,   301,
+     302,   303,   304,   305,   306,   307,   308,   309,   310,   311,
+     312,   313,   314,   315,   316,    -1,    -1,    -1,   320,   321,
+     322,   323,   324,   325,   326,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   354,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   373,   374,   375,   376,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   386,   387,   388,   389,   390,   391,
+     392,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   408,   409,   410,   411,
+     412,   413,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     422,    -1,   424,   425,   426,   427,   428,   429,   430,   431,
+     432,   433,   434,   435,   436,   437,   438,   439,   440,   441,
+     442,   443,   444,   445,   446,   447,   448,   449,   450,   451,
+     452,   453,   454,     3,     4,     5,     6,     7,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
+      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
+      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
+      60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
+      70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
+      80,    81,    82,    83,    84,    85,    86,    87,    88,    89,
+      90,    91,    92,    93,    94,    95,    96,    97,    98,    99,
+     100,   101,   102,   103,   104,   105,   106,   107,   108,   109,
+     110,   111,   112,   113,   114,   115,   116,   117,   118,   119,
+     120,   121,   122,   123,   124,   125,   126,   127,   128,   129,
+     130,   131,   132,   133,   134,   135,   136,   137,   138,   139,
+     140,   141,   142,   143,   144,   145,   146,   147,   148,   149,
+     150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
+     160,   161,   162,   163,   164,   165,   166,   167,   168,   169,
+     170,   171,   172,   173,   174,   175,   176,   177,   178,   179,
+     180,   181,   182,   183,   184,   185,   186,   187,   188,   189,
+     190,   191,   192,   193,   194,   195,   196,   197,   198,   199,
+     200,   201,   202,   203,   204,   205,   206,   207,   208,   209,
+     210,   211,   212,   213,   214,   215,   216,   217,   218,   219,
+     220,   221,   222,   223,   224,   225,   226,   227,   228,   229,
+     230,   231,   232,   233,   234,   235,   236,   237,   238,   239,
+     240,   241,   242,   243,   244,   245,   246,   247,   248,   249,
+     250,   251,   252,   253,   254,   255,   256,   257,   258,   259,
+     260,   261,   262,   263,   264,   265,   266,   267,   268,   269,
+     270,   271,   272,   273,   274,   275,   276,   277,   278,   279,
+     280,   281,   282,   283,   284,   285,   286,   287,   288,   289,
+     290,   291,   292,   293,   294,   295,   296,   297,   298,   299,
+     300,   301,   302,   303,   304,   305,   306,   307,   308,   309,
+     310,   311,   312,   313,   314,   315,   316,    -1,    -1,    -1,
+     320,   321,   322,   323,   324,   325,   326,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   354,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   373,   374,   375,   376,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   386,   387,   388,   389,
+     390,   391,   392,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   408,   409,
+     410,   411,   412,   413,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   422,    -1,   424,   425,   426,   427,   428,   429,
+     430,   431,   432,   433,   434,   435,   436,   437,   438,   439,
+     440,   441,   442,   443,   444,   445,   446,   447,   448,   449,
+     450,   451,   452,   453,   454,     3,     4,     5,     6,     7,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
+      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
+      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
+      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
+      78,    79,    80,    81,    82,    83,    84,    85,    86,    87,
+      88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
+      98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
+     108,   109,   110,   111,   112,   113,   114,   115,   116,   117,
+     118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
+     128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
+     138,   139,   140,   141,   142,   143,   144,   145,   146,   147,
+     148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
+     158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
+     168,   169,   170,   171,   172,   173,   174,   175,   176,   177,
+     178,   179,   180,   181,   182,   183,   184,   185,   186,   187,
+     188,   189,   190,   191,   192,   193,   194,   195,   196,   197,
+     198,   199,   200,   201,   202,   203,   204,   205,   206,   207,
+     208,   209,   210,   211,   212,   213,   214,   215,   216,   217,
+     218,   219,   220,   221,   222,   223,   224,   225,   226,   227,
+     228,   229,   230,   231,   232,   233,   234,   235,   236,   237,
+     238,   239,   240,   241,   242,   243,   244,   245,   246,   247,
+     248,   249,   250,   251,   252,   253,   254,   255,   256,   257,
+     258,   259,   260,   261,   262,   263,   264,   265,   266,   267,
+     268,   269,   270,   271,   272,   273,   274,   275,   276,   277,
+     278,   279,   280,   281,   282,   283,   284,   285,   286,   287,
+     288,   289,   290,   291,   292,   293,   294,   295,   296,   297,
+     298,   299,   300,   301,   302,   303,   304,   305,   306,   307,
+     308,   309,   310,   311,   312,   313,   314,   315,   316,    -1,
+      -1,    -1,   320,   321,   322,   323,   324,   325,   326,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   373,   374,   375,   376,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   386,   387,
+     388,   389,   390,   391,   392,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     408,   409,   410,   411,   412,   413,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   422,    -1,   424,   425,   426,   427,
+     428,   429,   430,   431,   432,   433,   434,   435,   436,   437,
+     438,   439,   440,   441,   442,   443,   444,   445,   446,   447,
+     448,   449,   450,   451,   452,   453,   454,     4,     5,     6,
        7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
       17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
       27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
@@ -3916,7 +3786,7 @@
       -1,    -1,    -1,    -1,    -1,    -1,   323,    -1,    -1,    -1,
       -1,    -1,   329,   330,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   348,   349,    -1,    -1,    -1,   353,    -1,    -1,    -1,
+      -1,   348,   349,    -1,    -1,    -1,   353,   354,    -1,    -1,
       -1,    -1,    -1,   360,   361,   362,   363,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,   381,   382,   383,   384,   385,   386,
@@ -3959,8 +3829,8 @@
      314,   315,   316,    -1,    -1,    -1,    -1,    -1,    -1,   323,
       -1,    -1,    -1,    -1,    -1,   329,   330,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   348,   349,    -1,    -1,   352,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   360,   361,   362,   363,
+      -1,    -1,    -1,    -1,   348,   349,    -1,    -1,    -1,   353,
+     354,    -1,    -1,    -1,    -1,    -1,   360,   361,   362,   363,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,   381,   382,   383,
      384,   385,   386,    -1,    -1,    -1,    -1,   391,   392,    -1,
@@ -4003,7 +3873,7 @@
       -1,    -1,   323,    -1,    -1,    -1,    -1,    -1,   329,   330,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,   348,   349,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   359,   360,
+      -1,   352,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   360,
      361,   362,   363,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
      381,   382,   383,   384,   385,   386,    -1,    -1,    -1,    -1,
@@ -4046,7 +3916,7 @@
       -1,    -1,    -1,    -1,    -1,   323,    -1,    -1,    -1,    -1,
       -1,   329,   330,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     348,   349,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     348,   349,    -1,    -1,    -1,   353,    -1,    -1,    -1,    -1,
       -1,    -1,   360,   361,   362,   363,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,   381,   382,   383,   384,   385,   386,    -1,
@@ -4089,7 +3959,7 @@
      315,   316,    -1,    -1,    -1,    -1,    -1,    -1,   323,    -1,
       -1,    -1,    -1,    -1,   329,   330,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   348,   349,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   348,   349,    -1,    -1,   352,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,   360,   361,   362,   363,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,   381,   382,   383,   384,
@@ -4133,7 +4003,7 @@
       -1,   323,    -1,    -1,    -1,    -1,    -1,   329,   330,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,   348,   349,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   360,   361,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   359,   360,   361,
      362,   363,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   381,
      382,   383,   384,   385,   386,    -1,    -1,    -1,    -1,   391,
@@ -4174,13 +4044,143 @@
      299,   300,   301,   302,   303,   304,   305,   306,   307,   308,
      309,   310,   311,   312,   313,   314,   315,   316,    -1,    -1,
       -1,    -1,    -1,    -1,   323,    -1,    -1,    -1,    -1,    -1,
+     329,   330,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   348,
+     349,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   360,   361,   362,   363,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   381,   382,   383,   384,   385,   386,    -1,    -1,
+      -1,    -1,   391,   392,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   414,   415,   416,   417,   418,
+     419,   420,   421,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   436,     4,     5,
+       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
+      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
+      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
+      56,    57,    58,    59,    60,    -1,    -1,    63,    64,    65,
+      66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
+      76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
+      86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
+      96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
+     106,   107,   108,   109,   110,   111,   112,   113,   114,   115,
+     116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
+     126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
+     136,   137,   138,   139,   140,   141,   142,   143,   144,   145,
+     146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
+     156,   157,   158,   159,   160,   161,   162,   163,   164,   165,
+     166,   167,   168,   169,   170,   171,   172,   173,   174,   175,
+     176,   177,   178,   179,   180,   181,   182,   183,   184,   185,
+     186,   187,   188,   189,   190,   191,   192,   193,   194,   195,
+     196,   197,   198,   199,   200,   201,   202,   203,   204,   205,
+     206,   207,   208,   209,   210,   211,   212,   213,   214,   215,
+     216,   217,   218,   219,   220,   221,   222,   223,   224,   225,
+     226,   227,   228,   229,   230,   231,   232,   233,   234,   235,
+     236,   237,   238,   239,   240,   241,   242,   243,   244,   245,
+     246,   247,   248,   249,   250,   251,   252,   253,   254,   255,
+     256,   257,   258,   259,   260,   261,   262,   263,   264,   265,
+     266,   267,   268,   269,   270,   271,   272,   273,   274,   275,
+     276,   277,   278,   279,   280,   281,   282,   283,   284,   285,
+     286,   287,   288,   289,   290,   291,   292,   293,   294,   295,
+     296,   297,   298,   299,   300,   301,   302,   303,   304,   305,
+     306,   307,   308,   309,   310,   311,   312,   313,   314,   315,
+     316,    -1,    -1,    -1,    -1,    -1,    -1,   323,    -1,    -1,
+      -1,    -1,    -1,   329,   330,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   348,   349,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   360,   361,   362,   363,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   381,   382,   383,   384,   385,
+     386,    -1,    -1,    -1,    -1,   391,   392,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   414,   415,
+     416,   417,   418,   419,   420,   421,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     436,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
+      33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
+      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
+      53,    54,    55,    56,    57,    58,    59,    60,    -1,    -1,
+      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
+      73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
+      83,    84,    85,    86,    87,    88,    89,    90,    91,    92,
+      93,    94,    95,    96,    97,    98,    99,   100,   101,   102,
+     103,   104,   105,   106,   107,   108,   109,   110,   111,   112,
+     113,   114,   115,   116,   117,   118,   119,   120,   121,   122,
+     123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
+     133,   134,   135,   136,   137,   138,   139,   140,   141,   142,
+     143,   144,   145,   146,   147,   148,   149,   150,   151,   152,
+     153,   154,   155,   156,   157,   158,   159,   160,   161,   162,
+     163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
+     173,   174,   175,   176,   177,   178,   179,   180,   181,   182,
+     183,   184,   185,   186,   187,   188,   189,   190,   191,   192,
+     193,   194,   195,   196,   197,   198,   199,   200,   201,   202,
+     203,   204,   205,   206,   207,   208,   209,   210,   211,   212,
+     213,   214,   215,   216,   217,   218,   219,   220,   221,   222,
+     223,   224,   225,   226,   227,   228,   229,   230,   231,   232,
+     233,   234,   235,   236,   237,   238,   239,   240,   241,   242,
+     243,   244,   245,   246,   247,   248,   249,   250,   251,   252,
+     253,   254,   255,   256,   257,   258,   259,   260,   261,   262,
+     263,   264,   265,   266,   267,   268,   269,   270,   271,   272,
+     273,   274,   275,   276,   277,   278,   279,   280,   281,   282,
+     283,   284,   285,   286,   287,   288,   289,   290,   291,   292,
+     293,   294,   295,   296,   297,   298,   299,   300,   301,   302,
+     303,   304,   305,   306,   307,   308,   309,   310,   311,   312,
+     313,   314,   315,   316,    -1,    -1,    -1,    -1,    -1,    -1,
+     323,    -1,    -1,    -1,    -1,    -1,   329,   330,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   348,   349,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   360,   361,   362,
+     363,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   381,   382,
+     383,   384,   385,   386,    -1,    -1,    -1,    -1,   391,   392,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   414,   415,   416,   417,   418,   419,   420,   421,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   436,     4,     5,     6,     7,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
+      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
+      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
+      60,    -1,    -1,    63,    64,    65,    66,    67,    68,    69,
+      70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
+      80,    81,    82,    83,    84,    85,    86,    87,    88,    89,
+      90,    91,    92,    93,    94,    95,    96,    97,    98,    99,
+     100,   101,   102,   103,   104,   105,   106,   107,   108,   109,
+     110,   111,   112,   113,   114,   115,   116,   117,   118,   119,
+     120,   121,   122,   123,   124,   125,   126,   127,   128,   129,
+     130,   131,   132,   133,   134,   135,   136,   137,   138,   139,
+     140,   141,   142,   143,   144,   145,   146,   147,   148,   149,
+     150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
+     160,   161,   162,   163,   164,   165,   166,   167,   168,   169,
+     170,   171,   172,   173,   174,   175,   176,   177,   178,   179,
+     180,   181,   182,   183,   184,   185,   186,   187,   188,   189,
+     190,   191,   192,   193,   194,   195,   196,   197,   198,   199,
+     200,   201,   202,   203,   204,   205,   206,   207,   208,   209,
+     210,   211,   212,   213,   214,   215,   216,   217,   218,   219,
+     220,   221,   222,   223,   224,   225,   226,   227,   228,   229,
+     230,   231,   232,   233,   234,   235,   236,   237,   238,   239,
+     240,   241,   242,   243,   244,   245,   246,   247,   248,   249,
+     250,   251,   252,   253,   254,   255,   256,   257,   258,   259,
+     260,   261,   262,   263,   264,   265,   266,   267,   268,   269,
+     270,   271,   272,   273,   274,   275,   276,   277,   278,   279,
+     280,   281,   282,   283,   284,   285,   286,   287,   288,   289,
+     290,   291,   292,   293,   294,   295,   296,   297,   298,   299,
+     300,   301,   302,   303,   304,   305,   306,   307,   308,   309,
+     310,   311,   312,   313,   314,   315,   316,    -1,    -1,    -1,
+      -1,    -1,    -1,   323,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   386,    -1,    -1,
-      -1,    -1,   391,   392
+      -1,    -1,    -1,    -1,    -1,    -1,   386,    -1,    -1,    -1,
+      -1,   391,   392
 };
 
   /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -4256,30 +4256,30 @@
      563,   348,   351,   382,   567,   584,   385,   585,   348,   381,
      382,   383,   384,   571,   572,   382,   480,   485,   573,   382,
      381,   382,   383,   384,   576,   577,   382,   485,   578,   382,
-     348,   579,   382,   584,   385,   485,   511,   581,   582,   382,
-     485,   352,   565,   511,   385,   523,   524,   354,   522,   521,
-     485,   504,   385,   364,   365,   366,   361,   363,   327,   328,
-     331,   332,   367,   368,   333,   334,   371,   370,   369,   335,
-     337,   336,   372,   352,   352,   480,   354,   532,   349,   359,
-     359,   553,   349,   349,   359,   359,   484,   349,   484,   357,
-     359,   359,   359,   359,   338,   339,   340,   341,   342,   343,
-     344,   345,   346,   347,   358,   483,   356,   359,   354,   528,
-     542,   546,   551,   525,   358,   354,   525,   526,   525,   521,
-     385,   350,   459,   484,   385,   482,   467,   348,   382,   568,
-     569,   350,   358,   350,   356,   350,   356,   350,   356,   356,
-     350,   356,   350,   356,   350,   356,   356,   350,   356,   356,
-     350,   356,   350,   356,   350,   350,   523,   512,   356,   359,
-     354,   467,   467,   467,   469,   469,   470,   470,   471,   471,
-     471,   471,   472,   472,   473,   474,   475,   476,   477,   478,
-     481,   352,   539,   552,   528,   554,   484,   359,   484,   357,
-     482,   482,   525,   354,   356,   354,   352,   352,   356,   352,
-     356,   572,   571,   485,   573,   577,   576,   485,   578,   348,
-     579,   581,   582,   359,   524,   484,   533,   484,   499,   544,
-     393,   527,   540,   555,   350,   350,   354,   525,   348,   382,
-     350,   350,   350,   350,   350,   350,   357,   354,   385,   350,
-     349,   544,   556,   557,   535,   536,   537,   543,   547,   482,
-     358,   529,   534,   538,   484,   359,   350,   397,   531,   529,
-     353,   525,   350,   484,   534,   535,   539,   548,   359,   354
+     348,   579,   382,   584,   385,   485,   581,   582,   382,   485,
+     352,   565,   511,   385,   523,   524,   354,   522,   521,   485,
+     504,   385,   364,   365,   366,   361,   363,   327,   328,   331,
+     332,   367,   368,   333,   334,   371,   370,   369,   335,   337,
+     336,   372,   352,   352,   480,   354,   532,   349,   359,   359,
+     553,   349,   349,   359,   359,   484,   349,   484,   357,   359,
+     359,   359,   359,   338,   339,   340,   341,   342,   343,   344,
+     345,   346,   347,   358,   483,   356,   359,   354,   528,   542,
+     546,   551,   525,   358,   354,   525,   526,   525,   521,   385,
+     350,   459,   484,   385,   482,   467,   348,   382,   568,   569,
+     350,   358,   350,   356,   350,   356,   350,   356,   356,   350,
+     356,   350,   356,   350,   356,   356,   350,   356,   356,   350,
+     356,   350,   356,   350,   350,   523,   512,   356,   359,   354,
+     467,   467,   467,   469,   469,   470,   470,   471,   471,   471,
+     471,   472,   472,   473,   474,   475,   476,   477,   478,   481,
+     352,   539,   552,   528,   554,   484,   359,   484,   357,   482,
+     482,   525,   354,   356,   354,   352,   352,   356,   352,   356,
+     572,   571,   485,   573,   577,   576,   485,   578,   348,   579,
+     581,   582,   359,   524,   484,   533,   484,   499,   544,   393,
+     527,   540,   555,   350,   350,   354,   525,   348,   382,   350,
+     350,   350,   350,   350,   350,   357,   354,   385,   350,   349,
+     544,   556,   557,   535,   536,   537,   543,   547,   482,   358,
+     529,   534,   538,   484,   359,   350,   397,   531,   529,   353,
+     525,   350,   484,   534,   535,   539,   548,   359,   354
 };
 
   /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
@@ -4352,8 +4352,8 @@
      570,   570,   571,   571,   572,   572,   572,   572,   572,   573,
      573,   574,   574,   575,   575,   575,   575,   575,   575,   575,
      575,   576,   576,   577,   577,   577,   577,   578,   578,   579,
-     579,   580,   580,   580,   580,   581,   581,   582,   582,   583,
-     583,   584,   584,   585,   585
+     579,   580,   580,   580,   580,   581,   581,   582,   583,   583,
+     584,   584,   585,   585
 };
 
   /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
@@ -4426,8 +4426,8 @@
        6,     8,     1,     3,     1,     1,     1,     1,     1,     1,
        3,     4,     6,     4,     6,     6,     8,     6,     8,     6,
        8,     1,     3,     1,     1,     1,     1,     1,     3,     1,
-       3,     6,     8,     4,     6,     1,     3,     1,     1,     4,
-       6,     1,     3,     3,     3
+       3,     6,     8,     4,     6,     1,     3,     1,     4,     6,
+       1,     3,     3,     3
 };
 
 
@@ -12155,65 +12155,57 @@
 #line 12156 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 678: /* spirv_type_parameter: type_specifier  */
-#line 4370 "MachineIndependent/glslang.y"
-                     {
-        (yyval.interm.spirvTypeParams) = parseContext.makeSpirvTypeParameters((yyvsp[0].interm.type));
+  case 678: /* spirv_instruction_qualifier: SPIRV_INSTRUCTION LEFT_PAREN spirv_instruction_qualifier_list RIGHT_PAREN  */
+#line 4372 "MachineIndependent/glslang.y"
+                                                                                {
+        (yyval.interm.spirvInst) = (yyvsp[-1].interm.spirvInst);
     }
 #line 12164 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 679: /* spirv_instruction_qualifier: SPIRV_INSTRUCTION LEFT_PAREN spirv_instruction_qualifier_list RIGHT_PAREN  */
+  case 679: /* spirv_instruction_qualifier: SPIRV_INSTRUCTION LEFT_PAREN spirv_requirements_list COMMA spirv_instruction_qualifier_list RIGHT_PAREN  */
 #line 4375 "MachineIndependent/glslang.y"
-                                                                                {
-        (yyval.interm.spirvInst) = (yyvsp[-1].interm.spirvInst);
-    }
-#line 12172 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  case 680: /* spirv_instruction_qualifier: SPIRV_INSTRUCTION LEFT_PAREN spirv_requirements_list COMMA spirv_instruction_qualifier_list RIGHT_PAREN  */
-#line 4378 "MachineIndependent/glslang.y"
                                                                                                               {
         parseContext.intermediate.insertSpirvRequirement((yyvsp[-3].interm.spirvReq));
         (yyval.interm.spirvInst) = (yyvsp[-1].interm.spirvInst);
     }
+#line 12173 "MachineIndependent/glslang_tab.cpp"
+    break;
+
+  case 680: /* spirv_instruction_qualifier_list: spirv_instruction_qualifier_id  */
+#line 4381 "MachineIndependent/glslang.y"
+                                     {
+        (yyval.interm.spirvInst) = (yyvsp[0].interm.spirvInst);
+    }
 #line 12181 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 681: /* spirv_instruction_qualifier_list: spirv_instruction_qualifier_id  */
+  case 681: /* spirv_instruction_qualifier_list: spirv_instruction_qualifier_list COMMA spirv_instruction_qualifier_id  */
 #line 4384 "MachineIndependent/glslang.y"
-                                     {
-        (yyval.interm.spirvInst) = (yyvsp[0].interm.spirvInst);
+                                                                            {
+        (yyval.interm.spirvInst) = parseContext.mergeSpirvInstruction((yyvsp[-1].lex).loc, (yyvsp[-2].interm.spirvInst), (yyvsp[0].interm.spirvInst));
     }
 #line 12189 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 682: /* spirv_instruction_qualifier_list: spirv_instruction_qualifier_list COMMA spirv_instruction_qualifier_id  */
-#line 4387 "MachineIndependent/glslang.y"
-                                                                            {
-        (yyval.interm.spirvInst) = parseContext.mergeSpirvInstruction((yyvsp[-1].lex).loc, (yyvsp[-2].interm.spirvInst), (yyvsp[0].interm.spirvInst));
+  case 682: /* spirv_instruction_qualifier_id: IDENTIFIER EQUAL STRING_LITERAL  */
+#line 4389 "MachineIndependent/glslang.y"
+                                      {
+        (yyval.interm.spirvInst) = parseContext.makeSpirvInstruction((yyvsp[-1].lex).loc, *(yyvsp[-2].lex).string, *(yyvsp[0].lex).string);
     }
 #line 12197 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 683: /* spirv_instruction_qualifier_id: IDENTIFIER EQUAL STRING_LITERAL  */
+  case 683: /* spirv_instruction_qualifier_id: IDENTIFIER EQUAL INTCONSTANT  */
 #line 4392 "MachineIndependent/glslang.y"
-                                      {
-        (yyval.interm.spirvInst) = parseContext.makeSpirvInstruction((yyvsp[-1].lex).loc, *(yyvsp[-2].lex).string, *(yyvsp[0].lex).string);
+                                   {
+        (yyval.interm.spirvInst) = parseContext.makeSpirvInstruction((yyvsp[-1].lex).loc, *(yyvsp[-2].lex).string, (yyvsp[0].lex).i);
     }
 #line 12205 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 684: /* spirv_instruction_qualifier_id: IDENTIFIER EQUAL INTCONSTANT  */
-#line 4395 "MachineIndependent/glslang.y"
-                                   {
-        (yyval.interm.spirvInst) = parseContext.makeSpirvInstruction((yyvsp[-1].lex).loc, *(yyvsp[-2].lex).string, (yyvsp[0].lex).i);
-    }
-#line 12213 "MachineIndependent/glslang_tab.cpp"
-    break;
 
-
-#line 12217 "MachineIndependent/glslang_tab.cpp"
+#line 12209 "MachineIndependent/glslang_tab.cpp"
 
       default: break;
     }
@@ -12438,5 +12430,5 @@
   return yyresult;
 }
 
-#line 4400 "MachineIndependent/glslang.y"
+#line 4397 "MachineIndependent/glslang.y"
 
diff --git a/glslang/MachineIndependent/intermOut.cpp b/glslang/MachineIndependent/intermOut.cpp
index a0fade1..d8a3aab 100644
--- a/glslang/MachineIndependent/intermOut.cpp
+++ b/glslang/MachineIndependent/intermOut.cpp
@@ -48,37 +48,6 @@
 #endif
 #include <cstdint>
 
-namespace {
-
-bool IsInfinity(double x) {
-#ifdef _MSC_VER
-    switch (_fpclass(x)) {
-    case _FPCLASS_NINF:
-    case _FPCLASS_PINF:
-        return true;
-    default:
-        return false;
-    }
-#else
-    return std::isinf(x);
-#endif
-}
-
-bool IsNan(double x) {
-#ifdef _MSC_VER
-    switch (_fpclass(x)) {
-    case _FPCLASS_SNAN:
-    case _FPCLASS_QNAN:
-        return true;
-    default:
-        return false;
-    }
-#else
-  return std::isnan(x);
-#endif
-}
-
-}
 
 namespace glslang {
 
diff --git a/glslang/MachineIndependent/iomapper.cpp b/glslang/MachineIndependent/iomapper.cpp
index a1db5c1..19eabdf 100644
--- a/glslang/MachineIndependent/iomapper.cpp
+++ b/glslang/MachineIndependent/iomapper.cpp
@@ -79,7 +79,7 @@
             target = &inputList;
         else if (base->getQualifier().storage == EvqVaryingOut)
             target = &outputList;
-        else if (base->getQualifier().isUniformOrBuffer() && !base->getQualifier().isPushConstant())
+        else if (base->getQualifier().isUniformOrBuffer() && !base->getQualifier().isPushConstant() && !base->getQualifier().isShaderRecord())
             target = &uniformList;
         // If a global is being visited, then we should also traverse it incase it's evaluation
         // ends up visiting inputs we want to tag as live
diff --git a/glslang/MachineIndependent/linkValidate.cpp b/glslang/MachineIndependent/linkValidate.cpp
index c433521..b1adfc9 100644
--- a/glslang/MachineIndependent/linkValidate.cpp
+++ b/glslang/MachineIndependent/linkValidate.cpp
@@ -966,10 +966,10 @@
     //       current implementation only has one offset.
     if (symbol.getQualifier().layoutMatrix    != unitSymbol.getQualifier().layoutMatrix ||
         symbol.getQualifier().layoutPacking   != unitSymbol.getQualifier().layoutPacking ||
-        symbol.getQualifier().layoutLocation  != unitSymbol.getQualifier().layoutLocation ||
+        (symbol.getQualifier().hasLocation() && unitSymbol.getQualifier().hasLocation() && symbol.getQualifier().layoutLocation != unitSymbol.getQualifier().layoutLocation) ||
         symbol.getQualifier().layoutComponent != unitSymbol.getQualifier().layoutComponent ||
         symbol.getQualifier().layoutIndex     != unitSymbol.getQualifier().layoutIndex ||
-        symbol.getQualifier().layoutBinding   != unitSymbol.getQualifier().layoutBinding ||
+        (symbol.getQualifier().hasBinding() && unitSymbol.getQualifier().hasBinding() && symbol.getQualifier().layoutBinding != unitSymbol.getQualifier().layoutBinding) ||
         (symbol.getQualifier().hasBinding() && (symbol.getQualifier().layoutOffset != unitSymbol.getQualifier().layoutOffset))) {
         error(infoSink, "Layout qualification must match:");
         writeTypeComparison = true;
diff --git a/glslang/OSDependent/Unix/ossource.cpp b/glslang/OSDependent/Unix/ossource.cpp
index 3f029f0..81da99c 100644
--- a/glslang/OSDependent/Unix/ossource.cpp
+++ b/glslang/OSDependent/Unix/ossource.cpp
@@ -172,7 +172,7 @@
     pthread_mutex_t gMutex;
 }
 
-void InitGlobalLock()
+static void InitMutex(void)
 {
   pthread_mutexattr_t mutexattr;
   pthread_mutexattr_init(&mutexattr);
@@ -180,6 +180,12 @@
   pthread_mutex_init(&gMutex, &mutexattr);
 }
 
+void InitGlobalLock()
+{
+  static pthread_once_t once = PTHREAD_ONCE_INIT;
+  pthread_once(&once, InitMutex);
+}
+
 void GetGlobalLock()
 {
   pthread_mutex_lock(&gMutex);
diff --git a/gtests/AST.FromFile.cpp b/gtests/AST.FromFile.cpp
index 6e7a659..f9680dd 100644
--- a/gtests/AST.FromFile.cpp
+++ b/gtests/AST.FromFile.cpp
@@ -284,7 +284,9 @@
         "textureoffset_sampler2darrayshadow.vert",
         "atomicAdd.comp",
         "GL_ARB_gpu_shader5.u2i.vert",
-        "atomicCounterARBOps.vert"
+        "atomicCounterARBOps.vert",
+        "GL_EXT_shader_integer_mix.vert",
+        "GL_ARB_draw_instanced.vert",
     })),
     FileNameAsCustomTestSuffix
 );
diff --git a/gtests/Spv.FromFile.cpp b/gtests/Spv.FromFile.cpp
index 29740f3..ef11764 100644
--- a/gtests/Spv.FromFile.cpp
+++ b/gtests/Spv.FromFile.cpp
@@ -365,6 +365,7 @@
         "spv.int64.frag",
         "spv.intcoopmat.comp",
         "spv.intOps.vert",
+        "spv.intrinsicsSpecConst.vert",
         "spv.intrinsicsSpirvByReference.vert",
         "spv.intrinsicsSpirvDecorate.frag",
         "spv.intrinsicsSpirvExecutionMode.frag",
diff --git a/known_good.json b/known_good.json
index e1c2ce8..bed5dd8 100644
--- a/known_good.json
+++ b/known_good.json
@@ -5,14 +5,14 @@
       "site" : "github",
       "subrepo" : "KhronosGroup/SPIRV-Tools",
       "subdir" : "External/spirv-tools",
-      "commit" : "1fbed83c8aab8517d821fcb4164c08567951938f"
+      "commit" : "339d4475c1a806c187c57678af26733575d1cecd"
     },
     {
       "name" : "spirv-tools/external/spirv-headers",
       "site" : "github",
       "subrepo" : "KhronosGroup/SPIRV-Headers",
       "subdir" : "External/spirv-tools/external/spirv-headers",
-      "commit" : "449bc986ba6f4c5e10e32828783f9daef2a77644"
+      "commit" : "29817199b7069bac971e5365d180295d4b077ebe"
     }
   ]
 }