Merge remote-tracking branch 'aosp/upstream-master' into update-shaderc

Supports (non-provisional) Vulkan raytracing extensions.

Including:
e11a2c8b update spirv-headers and fix handling of gl_HitTEXT (#2471)
4d41da3b Add ray query capability if acceleration structure or ray query types declared (#2469)
ffccefdd Updates for final Vulkan ray tracing extensions (#2466)
7f6559d2 Compile out code for GL_EXT_shader_image_int64 for ANGLE (#2463)
beec2e4a tweak local_size comparison a bit (#2456)
fb53f835 Avoid spuriously adding Geometry capability for vert, tesc, tese (#2462)
639f5461 New nonuniform analysis (#2457)
74e8f05b Implement GL_EXT_terminate_invocation (#2454)
383eaf32 Fix token-pasting macros not working in preprocessor directives. (#2453)
3d7984dd Fix warning in iomapper. (#2449)
8c1a3a06 Add GL_EXT_shader_image_int64 support (#2409)
478b2329 8. io mapping refine & qualifier member check & resolver expand (#2396)
d550bebe Fix build error with Chromium & ANGLE (#2446)
c897c3bc Add new SpirvToolsDisassemble API interface + Improve Doc on existing API interface (#2442)
56350cad Support for CapabilityShaderViewportIndex and CapabilityShaderLayer (#2432)
ed8bd045 Do not use PropagateLineInfoPass and RedundantLineInfoElimPass (#2440)
142cb87f Merge pull request #2387 from BNieuwenhuizen/nonuniform
740ae9f6 Merge pull request #2435 from amdrexu/feature
f6e0fe86 HLSL: Add support for printf().
3b334b2b Merge pull request #2429 from ben-clayton/test-gn-presubmit
0f52e7ef Fix GN build and presubmits
ea52b3c2 Merge pull request #2427 from ben-clayton/gn
00d05d23 Merge pull request #2428 from Tobski/GL_EXT_fragment_shading_rate
490eba59 SPV: Update to the latest SPIR-V header, includes variable-rate shading
a315b563 Add GL_EXT_fragment_shading_rate
b2b1e2da Kokoro: Add configurations for GN presubmit
3ead0119 Merge pull request #2422 from ben-clayton/gn
5b99b448 Fix uninitialized use of TIntermediate::resource (#2424)
f915cc2b Add GN build instructions to README.md
dac38b8f Add basic GN configurations
f4f1d8a3 SPIR-V: Remove SpvTools.h include from disassemble.cpp (#2417)
69d0c1ac Remove executable bits from code/data files (#2420)
2067d1a9 Add test case for read-only storage texture passed to helper function (#2414)
3ce14863 Disable -Wno-conversion on MSVC compiler (#2410)
2b770595 Revert "Add new SpirvToolsDisassemble API interface + Improve Doc on existing API interface (#2408)"
d1929f35 Add new SpirvToolsDisassemble API interface + Improve Doc on existing API interface (#2408)
8eb0bdce Add texture sample to nonuniform test
889ac204 Add buffer store to nonuniform tests
c9ffeec6 SPV: Add NonUniform decoration for constructors.
58064311 SPV: Add NonUniform decoration for OpImages created during lowering.
de949a2a SPV: Add NonUniform decorations for stores.

Testing: checkbuild.py on Linux; unit tests on Windows
Change-Id: Ia4dbf2edffdeb25264328a93da8db0bbc4a6d0f2
diff --git a/.gitattributes b/.gitattributes
old mode 100755
new mode 100644
diff --git a/.gitignore b/.gitignore
index 790b880..ab25cec 100644
--- a/.gitignore
+++ b/.gitignore
@@ -11,3 +11,10 @@
 External/googletest
 External/spirv-tools
 out/
+
+# GN generated files
+.cipd/
+*.gclient_entries
+third_party/
+buildtools/
+tools/
diff --git a/.gn b/.gn
new file mode 100644
index 0000000..5befb80
--- /dev/null
+++ b/.gn
@@ -0,0 +1,39 @@
+# Copyright (C) 2020 The Khronos Group Inc.
+#
+# 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 The Khronos Group Inc. 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.
+
+buildconfig = "//build/config/BUILDCONFIG.gn"
+
+default_args = {
+    clang_use_chrome_plugins = false
+    use_custom_libcxx = false
+}
diff --git a/BUILD.gn b/BUILD.gn
index f877078..973ca98 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -76,7 +76,9 @@
 
 config("glslang_public") {
   include_dirs = [ "." ]
-  cflags = [ "-Wno-conversion" ]
+  if (!is_win || is_clang) {
+    cflags = [ "-Wno-conversion" ]
+  }
 }
 
 config("glslang_hlsl") {
@@ -244,6 +246,8 @@
       ]
     }
 
+    include_dirs = [ "${target_gen_dir}/include" ]
+
     deps = [ ":glslang_build_info" ]
 
     if (invoker.enable_opt) {
@@ -251,10 +255,9 @@
         "${spirv_tools_dir}:spvtools_opt",
         "${spirv_tools_dir}:spvtools_val",
       ]
+      include_dirs += [ "${spirv_tools_dir}/include" ]
     }
 
-    include_dirs = [ "${target_gen_dir}/include" ]
-
     configs -= _configs_to_remove
     configs += _configs_to_add
   }
@@ -300,7 +303,10 @@
   ]
   public_configs = [ ":glslang_hlsl" ]
 
-  include_dirs = [ "${target_gen_dir}/include" ]
+  include_dirs = [
+    "${target_gen_dir}/include",
+    "${spirv_tools_dir}/include",
+  ]
 
   configs -= _configs_to_remove
   configs += _configs_to_add
@@ -311,6 +317,8 @@
   defines = [ "ENABLE_OPT=1" ]
   deps = [ ":glslang_sources" ]
 
+  include_dirs = [ "${spirv_tools_dir}/include" ]
+
   configs -= _configs_to_remove
   configs += _configs_to_add
 }
diff --git a/DEPS b/DEPS
new file mode 100644
index 0000000..2f5fa8e
--- /dev/null
+++ b/DEPS
@@ -0,0 +1,82 @@
+# Copyright (C) 2020 The Khronos Group Inc.
+#
+# 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 The Khronos Group Inc. 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.
+
+use_relative_paths = True
+
+gclient_gn_args_file = 'build/config/gclient_args.gni'
+
+vars = {
+  'chromium_git': 'https://chromium.googlesource.com',
+  'build_with_chromium': False,
+}
+
+deps = {
+
+  './build': {
+    'url': '{chromium_git}/chromium/src/build.git@85ee3b7692e5284f08bd3c9459fb5685eed7b838',
+    'condition': 'not build_with_chromium',
+  },
+
+  './buildtools': {
+    'url': '{chromium_git}/chromium/src/buildtools.git@4be464e050b3d05060471788f926b34c641db9fd',
+    'condition': 'not build_with_chromium',
+  },
+
+  './tools/clang': {
+    'url': '{chromium_git}/chromium/src/tools/clang.git@3a982adabb720aa8f3e3885d40bf3fe506990157',
+    'condition': 'not build_with_chromium',
+  },
+
+}
+
+hooks = [
+  {
+    'name': 'sysroot_x64',
+    'pattern': '.',
+    'condition': 'checkout_linux and (checkout_x64 and not build_with_chromium)',
+    'action': ['python', './build/linux/sysroot_scripts/install-sysroot.py',
+               '--arch=x64'],
+  },
+  {
+    # Note: On Win, this should run after win_toolchain, as it may use it.
+    'name': 'clang',
+    'pattern': '.',
+    'action': ['python', './tools/clang/scripts/update.py'],
+    'condition': 'not build_with_chromium',
+  },
+]
+
+recursedeps = [
+  # buildtools provides clang_format, libc++, and libc++abi
+  'buildtools',
+]
diff --git a/README.md b/README.md
old mode 100755
new mode 100644
index 30e85f8..7ad4ace
--- a/README.md
+++ b/README.md
@@ -88,7 +88,7 @@
 There is also a non-shader extension
 * `.conf` for a configuration file of limits, see usage statement for example
 
-## Building
+## Building (CMake)
 
 Instead of building manually, you can also download the binaries for your
 platform directly from the [master-tot release][master-tot-release] on GitHub.
@@ -184,6 +184,36 @@
 If using MSVC, after running CMake to configure, use the
 Configuration Manager to check the `INSTALL` project.
 
+### Building (GN)
+
+glslang can also be built with the [GN build system](https://gn.googlesource.com/gn/).
+
+#### 1) Install `depot_tools`
+
+Download [depot_tools.zip](https://storage.googleapis.com/chrome-infra/depot_tools.zip),
+extract to a directory, and add this directory to your `PATH`.
+
+#### 2) Synchronize dependencies and generate build files
+
+This only needs to be done once after updating `glslang`.
+
+With the current directory set to your `glslang` checkout, type:
+
+```bash
+./update_glslang_sources.py
+gclient sync --gclientfile=standalone.gclient
+gn gen out/Default
+```
+
+#### 3) Build
+
+With the current directory set to your `glslang` checkout, type:
+
+```bash
+cd out/Default
+ninja
+```
+
 ### If you need to change the GLSL grammar
 
 The grammar in `glslang/MachineIndependent/glslang.y` has to be recompiled with
diff --git a/SPIRV/GLSL.ext.EXT.h b/SPIRV/GLSL.ext.EXT.h
index 6eb0eee..20b9e54 100644
--- a/SPIRV/GLSL.ext.EXT.h
+++ b/SPIRV/GLSL.ext.EXT.h
@@ -36,5 +36,6 @@
 static const char* const E_SPV_EXT_fragment_invocation_density = "SPV_EXT_fragment_invocation_density";
 static const char* const E_SPV_EXT_demote_to_helper_invocation = "SPV_EXT_demote_to_helper_invocation";
 static const char* const E_SPV_EXT_shader_atomic_float_add = "SPV_EXT_shader_atomic_float_add";
+static const char* const E_SPV_EXT_shader_image_int64 = "SPV_EXT_shader_image_int64";
 
 #endif  // #ifndef GLSLextEXT_H
diff --git a/SPIRV/GLSL.ext.KHR.h b/SPIRV/GLSL.ext.KHR.h
index d783a8f..9610c6e 100644
--- a/SPIRV/GLSL.ext.KHR.h
+++ b/SPIRV/GLSL.ext.KHR.h
@@ -48,4 +48,7 @@
 static const char* const E_SPV_KHR_non_semantic_info            = "SPV_KHR_non_semantic_info";
 static const char* const E_SPV_KHR_ray_tracing                  = "SPV_KHR_ray_tracing";
 static const char* const E_SPV_KHR_ray_query                    = "SPV_KHR_ray_query";
+static const char* const E_SPV_KHR_fragment_shading_rate        = "SPV_KHR_fragment_shading_rate";
+static const char* const E_SPV_KHR_terminate_invocation         = "SPV_KHR_terminate_invocation";
+
 #endif  // #ifndef GLSLextKHR_H
diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp
index c855416..1adebef 100644
--- a/SPIRV/GlslangToSpv.cpp
+++ b/SPIRV/GlslangToSpv.cpp
@@ -149,6 +149,7 @@
     spv::Decoration TranslateInterpolationDecoration(const glslang::TQualifier& qualifier);
     spv::Decoration TranslateAuxiliaryStorageDecoration(const glslang::TQualifier& qualifier);
     spv::Decoration TranslateNonUniformDecoration(const glslang::TQualifier& qualifier);
+    spv::Decoration TranslateNonUniformDecoration(const spv::Builder::AccessChain::CoherentFlags& coherentFlags);
     spv::Builder::AccessChain::CoherentFlags TranslateCoherent(const glslang::TType& type);
     spv::MemoryAccessMask TranslateMemoryAccess(const spv::Builder::AccessChain::CoherentFlags &coherentFlags);
     spv::ImageOperandsMask TranslateImageOperands(const spv::Builder::AccessChain::CoherentFlags &coherentFlags);
@@ -189,6 +190,7 @@
     bool originalParam(glslang::TStorageQualifier, const glslang::TType&, bool implicitThisParam);
     void makeFunctions(const glslang::TIntermSequence&);
     void makeGlobalInitializers(const glslang::TIntermSequence&);
+    void collectRayTracingLinkerObjects();
     void visitFunctions(const glslang::TIntermSequence&);
     void handleFunctionEntry(const glslang::TIntermAggregate* node);
     void translateArguments(const glslang::TIntermAggregate& node, std::vector<spv::Id>& arguments,
@@ -272,6 +274,9 @@
     // requiring local translation to and from SPIR-V type on every access.
     // Maps <builtin-variable-id -> AST-required-type-id>
     std::unordered_map<spv::Id, spv::Id> forceType;
+
+    // Used later for generating OpTraceKHR/OpExecuteCallableKHR
+    std::unordered_map<unsigned int, glslang::TIntermSymbol *> locationToSymbol[2];
 };
 
 //
@@ -539,6 +544,20 @@
         return spv::DecorationMax;
 }
 
+// If lvalue flags contains nonUniform, return SPIR-V NonUniform decoration.
+spv::Decoration TGlslangToSpvTraverser::TranslateNonUniformDecoration(
+    const spv::Builder::AccessChain::CoherentFlags& coherentFlags)
+{
+#ifndef GLSLANG_WEB
+    if (coherentFlags.isNonUniform()) {
+        builder.addIncorporatedExtension("SPV_EXT_descriptor_indexing", spv::Spv_1_5);
+        builder.addCapability(spv::CapabilityShaderNonUniformEXT);
+        return spv::DecorationNonUniformEXT;
+    } else
+#endif
+        return spv::DecorationMax;
+}
+
 spv::MemoryAccessMask TGlslangToSpvTraverser::TranslateMemoryAccess(
     const spv::Builder::AccessChain::CoherentFlags &coherentFlags)
 {
@@ -614,6 +633,7 @@
                        flags.volatil;
     flags.isImage = type.getBasicType() == glslang::EbtSampler;
 #endif
+    flags.nonUniform = type.getQualifier().nonUniform;
     return flags;
 }
 
@@ -709,13 +729,20 @@
         return spv::BuiltInCullDistance;
 
     case glslang::EbvViewportIndex:
-        builder.addCapability(spv::CapabilityMultiViewport);
+        if (glslangIntermediate->getStage() == EShLangGeometry ||
+            glslangIntermediate->getStage() == EShLangFragment) {
+            builder.addCapability(spv::CapabilityMultiViewport);
+        }
         if (glslangIntermediate->getStage() == EShLangVertex ||
             glslangIntermediate->getStage() == EShLangTessControl ||
             glslangIntermediate->getStage() == EShLangTessEvaluation) {
 
-            builder.addIncorporatedExtension(spv::E_SPV_EXT_shader_viewport_index_layer, spv::Spv_1_5);
-            builder.addCapability(spv::CapabilityShaderViewportIndexLayerEXT);
+            if (builder.getSpvVersion() < spv::Spv_1_5) {
+                builder.addIncorporatedExtension(spv::E_SPV_EXT_shader_viewport_index_layer, spv::Spv_1_5);
+                builder.addCapability(spv::CapabilityShaderViewportIndexLayerEXT);
+            }
+            else
+                builder.addCapability(spv::CapabilityShaderViewportIndex);
         }
         return spv::BuiltInViewportIndex;
 
@@ -734,13 +761,19 @@
         if (glslangIntermediate->getStage() == EShLangMeshNV) {
             return spv::BuiltInLayer;
         }
-        builder.addCapability(spv::CapabilityGeometry);
+        if (glslangIntermediate->getStage() == EShLangGeometry ||
+            glslangIntermediate->getStage() == EShLangFragment) {
+            builder.addCapability(spv::CapabilityGeometry);
+        }
         if (glslangIntermediate->getStage() == EShLangVertex ||
             glslangIntermediate->getStage() == EShLangTessControl ||
             glslangIntermediate->getStage() == EShLangTessEvaluation) {
 
-            builder.addIncorporatedExtension(spv::E_SPV_EXT_shader_viewport_index_layer, spv::Spv_1_5);
-            builder.addCapability(spv::CapabilityShaderViewportIndexLayerEXT);
+            if (builder.getSpvVersion() < spv::Spv_1_5) {
+                builder.addIncorporatedExtension(spv::E_SPV_EXT_shader_viewport_index_layer, spv::Spv_1_5);
+                builder.addCapability(spv::CapabilityShaderViewportIndexLayerEXT);
+            } else
+                builder.addCapability(spv::CapabilityShaderLayer);
         }
         return spv::BuiltInLayer;
 
@@ -769,6 +802,16 @@
         builder.addCapability(spv::CapabilityStencilExportEXT);
         return spv::BuiltInFragStencilRefEXT;
 
+    case glslang::EbvShadingRateKHR:
+        builder.addExtension(spv::E_SPV_KHR_fragment_shading_rate);
+        builder.addCapability(spv::CapabilityFragmentShadingRateKHR);
+        return spv::BuiltInShadingRateKHR;
+
+    case glslang::EbvPrimitiveShadingRateKHR:
+        builder.addExtension(spv::E_SPV_KHR_fragment_shading_rate);
+        builder.addCapability(spv::CapabilityFragmentShadingRateKHR);
+        return spv::BuiltInPrimitiveShadingRateKHR;
+
     case glslang::EbvInvocationId:         return spv::BuiltInInvocationId;
     case glslang::EbvTessLevelInner:       return spv::BuiltInTessLevelInner;
     case glslang::EbvTessLevelOuter:       return spv::BuiltInTessLevelOuter;
@@ -963,7 +1006,17 @@
     case glslang::EbvInstanceCustomIndex:
         return spv::BuiltInInstanceCustomIndexKHR;
     case glslang::EbvHitT:
-        return spv::BuiltInHitTKHR;
+        {
+            // this is a GLSL alias of RayTmax
+            // in SPV_NV_ray_tracing it has a dedicated builtin
+            // but in SPV_KHR_ray_tracing it gets mapped to RayTmax
+            auto& extensions = glslangIntermediate->getRequestedExtensions();
+            if (extensions.find("GL_NV_ray_tracing") != extensions.end()) {
+                return spv::BuiltInHitTNV;
+            } else {
+                return spv::BuiltInRayTmaxKHR;
+            }
+        }
     case glslang::EbvHitKind:
         return spv::BuiltInHitKindKHR;
     case glslang::EbvObjectToWorld:
@@ -1071,6 +1124,10 @@
         builder.addCapability(spv::CapabilityStorageImageExtendedFormats);
         break;
 
+    case glslang::ElfR64ui:
+    case glslang::ElfR64i:
+        builder.addExtension(spv::E_SPV_EXT_shader_image_int64);
+        builder.addCapability(spv::CapabilityInt64ImageEXT);
     default:
         break;
     }
@@ -1117,6 +1174,8 @@
     case glslang::ElfRg8ui:         return spv::ImageFormatRg8ui;
     case glslang::ElfR16ui:         return spv::ImageFormatR16ui;
     case glslang::ElfR8ui:          return spv::ImageFormatR8ui;
+    case glslang::ElfR64ui:         return spv::ImageFormatR64ui;
+    case glslang::ElfR64i:          return spv::ImageFormatR64i;
     default:                        return spv::ImageFormatMax;
     }
 }
@@ -1187,7 +1246,7 @@
 spv::StorageClass TGlslangToSpvTraverser::TranslateStorageClass(const glslang::TType& type)
 {
     if (type.getBasicType() == glslang::EbtRayQuery)
-        return spv::StorageClassFunction;
+        return spv::StorageClassPrivate;
     if (type.getQualifier().isPipeInput())
         return spv::StorageClassInput;
     if (type.getQualifier().isPipeOutput())
@@ -1353,6 +1412,8 @@
     if (parent.writeonly)
         child.writeonly = true;
 #endif
+    if (parent.nonUniform)
+        child.nonUniform = true;
 }
 
 bool HasNonLayoutQualifiers(const glslang::TType& type, const glslang::TQualifier& qualifier)
@@ -1454,7 +1515,7 @@
     }
 
     if (glslangIntermediate->getLayoutPrimitiveCulling()) {
-        builder.addCapability(spv::CapabilityRayTraversalPrimitiveCullingProvisionalKHR);
+        builder.addCapability(spv::CapabilityRayTraversalPrimitiveCullingKHR);
     }
 
     unsigned int mode;
@@ -1621,7 +1682,7 @@
     {
         auto& extensions = glslangIntermediate->getRequestedExtensions();
         if (extensions.find("GL_NV_ray_tracing") == extensions.end()) {
-            builder.addCapability(spv::CapabilityRayTracingProvisionalKHR);
+            builder.addCapability(spv::CapabilityRayTracingKHR);
             builder.addExtension("SPV_KHR_ray_tracing");
         }
         else {
@@ -1710,6 +1771,12 @@
     if (symbol->getType().getQualifier().isSpecConstant())
         spec_constant_op_mode_setter.turnOnSpecConstantOpMode();
 
+#ifdef ENABLE_HLSL
+    // Skip symbol handling if it is string-typed
+    if (symbol->getBasicType() == glslang::EbtString)
+        return;
+#endif
+
     // getSymbolId() will set up all the IO decorations on the first call.
     // Formal function parameters were mapped during makeFunctions().
     spv::Id id = getSymbolId(symbol);
@@ -1852,9 +1919,11 @@
                 spv::Id leftRValue = accessChainLoad(node->getLeft()->getType());
 
                 // do the operation
+                spv::Builder::AccessChain::CoherentFlags coherentFlags = TranslateCoherent(node->getLeft()->getType());
+                coherentFlags |= TranslateCoherent(node->getRight()->getType());
                 OpDecorations decorations = { TranslatePrecisionDecoration(node->getOperationPrecision()),
                                               TranslateNoContractionDecoration(node->getType().getQualifier()),
-                                              TranslateNonUniformDecoration(node->getType().getQualifier()) };
+                                              TranslateNonUniformDecoration(coherentFlags) };
                 rValue = createBinaryOperation(node->getOp(), decorations,
                                                convertGlslangToSpvType(node->getType()), leftRValue, rValue,
                                                node->getType().getBasicType());
@@ -1885,13 +1954,16 @@
             if (! node->getLeft()->getType().isArray() &&
                 node->getLeft()->getType().isVector() &&
                 node->getOp() == glslang::EOpIndexDirect) {
+                // Swizzle is uniform so propagate uniform into access chain
+                spv::Builder::AccessChain::CoherentFlags coherentFlags = TranslateCoherent(node->getLeft()->getType());
+                coherentFlags.nonUniform = 0;
                 // This is essentially a hard-coded vector swizzle of size 1,
                 // so short circuit the access-chain stuff with a swizzle.
                 std::vector<unsigned> swizzle;
                 swizzle.push_back(glslangIndex);
                 int dummySize;
                 builder.accessChainPushSwizzle(swizzle, convertGlslangToSpvType(node->getLeft()->getType()),
-                                               TranslateCoherent(node->getLeft()->getType()),
+                                               coherentFlags,
                                                glslangIntermediate->getBaseAlignmentScalar(
                                                    node->getLeft()->getType(), dummySize));
             } else {
@@ -1922,9 +1994,14 @@
                     }
                 }
 
+                // Struct reference propagates uniform lvalue
+                spv::Builder::AccessChain::CoherentFlags coherentFlags =
+                        TranslateCoherent(node->getLeft()->getType());
+                coherentFlags.nonUniform = 0;
+
                 // normal case for indexing array or structure or block
                 builder.accessChainPush(builder.makeIntConstant(spvIndex),
-                    TranslateCoherent(node->getLeft()->getType()),
+                        coherentFlags,
                         node->getLeft()->getType().getBufferReferenceAlignment());
 
                 // Add capabilities here for accessing PointSize and clip/cull distance.
@@ -1958,15 +2035,20 @@
             // restore the saved access chain
             builder.setAccessChain(partial);
 
+            // Only if index is nonUniform should we propagate nonUniform into access chain
+            spv::Builder::AccessChain::CoherentFlags index_flags = TranslateCoherent(node->getRight()->getType());
+            spv::Builder::AccessChain::CoherentFlags coherent_flags = TranslateCoherent(node->getLeft()->getType());
+            coherent_flags.nonUniform = index_flags.nonUniform;
+
             if (! node->getLeft()->getType().isArray() && node->getLeft()->getType().isVector()) {
                 int dummySize;
-                builder.accessChainPushComponent(index, convertGlslangToSpvType(node->getLeft()->getType()),
-                                                TranslateCoherent(node->getLeft()->getType()),
+                builder.accessChainPushComponent(
+                    index, convertGlslangToSpvType(node->getLeft()->getType()), coherent_flags,
                                                 glslangIntermediate->getBaseAlignmentScalar(node->getLeft()->getType(),
                                                 dummySize));
             } else
-                builder.accessChainPush(index, TranslateCoherent(node->getLeft()->getType()),
-                    node->getLeft()->getType().getBufferReferenceAlignment());
+                builder.accessChainPush(index, coherent_flags,
+                                        node->getLeft()->getType().getBufferReferenceAlignment());
         }
         return false;
     case glslang::EOpVectorSwizzle:
@@ -2050,8 +2132,9 @@
             // these require changing a 64-bit scaler -> a vector of 32-bit components
             if (glslangType.isVector())
                 break;
-            std::pair<spv::Id, spv::Id> ret(builder.makeVectorType(builder.makeUintType(32), 4),
-                                            builder.makeUintType(64));
+            spv::Id ivec4_type = builder.makeVectorType(builder.makeUintType(32), 4);
+            spv::Id uint64_type = builder.makeUintType(64);
+            std::pair<spv::Id, spv::Id> ret(ivec4_type, uint64_type);
             return ret;
         }
         // There are no SPIR-V builtins defined for these and map onto original non-transposed
@@ -2090,7 +2173,7 @@
             // handle 32-bit v.xy* -> 64-bit
             builder.clearAccessChain();
             builder.setAccessChainLValue(object);
-            object = builder.accessChainLoad(spv::NoPrecision, spv::DecorationMax, objectTypeId);
+            object = builder.accessChainLoad(spv::NoPrecision, spv::DecorationMax, spv::DecorationMax, objectTypeId);
             std::vector<spv::Id> components;
             components.push_back(builder.createCompositeExtract(object, builder.getContainedTypeId(objectTypeId), 0));
             components.push_back(builder.createCompositeExtract(object, builder.getContainedTypeId(objectTypeId), 1));
@@ -2106,7 +2189,7 @@
             // and we insert a transpose after loading the original non-transposed builtins
             builder.clearAccessChain();
             builder.setAccessChainLValue(object);
-            object = builder.accessChainLoad(spv::NoPrecision, spv::DecorationMax, objectTypeId);
+            object = builder.accessChainLoad(spv::NoPrecision, spv::DecorationMax, spv::DecorationMax, objectTypeId);
             return builder.createUnaryOp(spv::OpTranspose, desiredTypeId, object);
 
     } else  {
@@ -2292,7 +2375,8 @@
 
             // The result of operation is always stored, but conditionally the
             // consumed result.  The consumed result is always an r-value.
-            builder.accessChainStore(result);
+            builder.accessChainStore(result,
+                                     TranslateNonUniformDecoration(builder.getAccessChain().coherentFlags));
             builder.clearAccessChain();
             if (node->getOp() == glslang::EOpPreIncrement ||
                 node->getOp() == glslang::EOpPreDecrement)
@@ -2421,6 +2505,10 @@
             // anything else gets there, so visit out of order, doing them all now.
             makeGlobalInitializers(node->getAsAggregate()->getSequence());
 
+            //Pre process linker objects for ray tracing stages
+            if (glslangIntermediate->isRayTracingStage())
+                collectRayTracingLinkerObjects();
+
             // Initializers are done, don't want to visit again, but functions and link objects need to be processed,
             // so do them manually.
             visitFunctions(node->getAsAggregate()->getSequence());
@@ -2611,6 +2699,10 @@
         else
             constructed = builder.createConstructor(precision, arguments, resultType());
 
+        if (node->getType().getQualifier().isNonUniform()) {
+            builder.addDecoration(constructed, spv::DecorationNonUniformEXT);
+        }
+
         builder.clearAccessChain();
         builder.setAccessChainRValue(constructed);
 
@@ -2726,10 +2818,12 @@
         binOp = node->getOp();
         break;
 
-    case glslang::EOpIgnoreIntersection:
-    case glslang::EOpTerminateRay:
-    case glslang::EOpTrace:
-    case glslang::EOpExecuteCallable:
+    case glslang::EOpIgnoreIntersectionNV:
+    case glslang::EOpTerminateRayNV:
+    case glslang::EOpTraceNV:
+    case glslang::EOpTraceKHR:
+    case glslang::EOpExecuteCallableNV:
+    case glslang::EOpExecuteCallableKHR:
     case glslang::EOpWritePackedPrimitiveIndices4x8NV:
         noReturnValue = true;
         break;
@@ -2738,7 +2832,7 @@
     case glslang::EOpRayQueryGenerateIntersection:
     case glslang::EOpRayQueryConfirmIntersection:
         builder.addExtension("SPV_KHR_ray_query");
-        builder.addCapability(spv::CapabilityRayQueryProvisionalKHR);
+        builder.addCapability(spv::CapabilityRayQueryKHR);
         noReturnValue = true;
         break;
     case glslang::EOpRayQueryProceed:
@@ -2761,7 +2855,7 @@
     case glslang::EOpRayQueryGetIntersectionObjectToWorld:
     case glslang::EOpRayQueryGetIntersectionWorldToObject:
         builder.addExtension("SPV_KHR_ray_query");
-        builder.addCapability(spv::CapabilityRayQueryProvisionalKHR);
+        builder.addCapability(spv::CapabilityRayQueryKHR);
         break;
     case glslang::EOpCooperativeMatrixLoad:
     case glslang::EOpCooperativeMatrixStore:
@@ -3014,11 +3108,18 @@
                     )) {
                 bool cond = glslangOperands[arg]->getAsConstantUnion()->getConstArray()[0].getBConst();
                 operands.push_back(builder.makeIntConstant(cond ? 1 : 0));
-            }
-            else {
+             } else if ((arg == 10 && glslangOp == glslang::EOpTraceKHR) ||
+                        (arg == 1  && glslangOp == glslang::EOpExecuteCallableKHR)) {
+                 const int opdNum = glslangOp == glslang::EOpTraceKHR ? 10 : 1;
+                 const int set = glslangOp == glslang::EOpTraceKHR ? 0 : 1;
+                 const int location = glslangOperands[opdNum]->getAsConstantUnion()->getConstArray()[0].getUConst();
+                 auto itNode = locationToSymbol[set].find(location);
+                 visitSymbol(itNode->second);
+                 spv::Id symId = getSymbolId(itNode->second);
+                 operands.push_back(symId);
+             } else {
                 operands.push_back(accessChainLoad(glslangOperands[arg]->getAsTyped()->getType()));
-            }
-
+             }
         }
     }
 
@@ -3089,7 +3190,8 @@
 
         for (unsigned int i = 0; i < temporaryLvalues.size(); ++i) {
             builder.setAccessChain(complexLvalues[i]);
-            builder.accessChainStore(builder.createLoad(temporaryLvalues[i], spv::NoPrecision));
+            builder.accessChainStore(builder.createLoad(temporaryLvalues[i], spv::NoPrecision),
+                TranslateNonUniformDecoration(complexLvalues[i].coherentFlags));
         }
     }
 
@@ -3420,7 +3522,11 @@
 
     switch (node->getFlowOp()) {
     case glslang::EOpKill:
-        builder.makeDiscard();
+        builder.makeStatementTerminator(spv::OpKill, "post-discard");
+        break;
+    case glslang::EOpTerminateInvocation:
+        builder.addExtension(spv::E_SPV_KHR_terminate_invocation);
+        builder.makeStatementTerminator(spv::OpTerminateInvocation, "post-terminate-invocation");
         break;
     case glslang::EOpBreak:
         if (breakForLoop.top())
@@ -3457,6 +3563,12 @@
         builder.addExtension(spv::E_SPV_EXT_demote_to_helper_invocation);
         builder.addCapability(spv::CapabilityDemoteToHelperInvocationEXT);
         break;
+    case glslang::EOpTerminateRayKHR:
+        builder.makeStatementTerminator(spv::OpTerminateRayKHR, "post-terminateRayKHR");
+        break;
+    case glslang::EOpIgnoreIntersectionKHR:
+        builder.makeStatementTerminator(spv::OpIgnoreIntersectionKHR, "post-ignoreIntersectionKHR");
+        break;
 #endif
 
     default:
@@ -3564,6 +3676,12 @@
             builder.addExtension(spv::E_SPV_AMD_gpu_shader_half_float_fetch);
             builder.addCapability(spv::CapabilityFloat16ImageAMD);
             return builder.makeFloatType(16);
+        case glslang::EbtInt64:      return builder.makeIntType(64);
+            builder.addExtension(spv::E_SPV_EXT_shader_image_int64);
+            builder.addCapability(spv::CapabilityFloat16ImageAMD);
+        case glslang::EbtUint64:     return builder.makeUintType(64);
+            builder.addExtension(spv::E_SPV_EXT_shader_image_int64);
+            builder.addCapability(spv::CapabilityFloat16ImageAMD);
 #endif
         default:
             assert(0);
@@ -3670,10 +3788,36 @@
         spvType = builder.makeUintType(32);
         break;
     case glslang::EbtAccStruct:
+        switch (glslangIntermediate->getStage()) {
+        case EShLangRayGen:
+        case EShLangIntersect:
+        case EShLangAnyHit:
+        case EShLangClosestHit:
+        case EShLangMiss:
+        case EShLangCallable:
+            // these all should have the RayTracingNV/KHR capability already
+            break;
+        default:
+            {
+                auto& extensions = glslangIntermediate->getRequestedExtensions();
+                if (extensions.find("GL_EXT_ray_query") != extensions.end()) {
+                    builder.addExtension(spv::E_SPV_KHR_ray_query);
+                    builder.addCapability(spv::CapabilityRayQueryKHR);
+                }
+            }
+            break;
+        }
         spvType = builder.makeAccelerationStructureType();
         break;
     case glslang::EbtRayQuery:
-        spvType = builder.makeRayQueryType();
+        {
+            auto& extensions = glslangIntermediate->getRequestedExtensions();
+            if (extensions.find("GL_EXT_ray_query") != extensions.end()) {
+                builder.addExtension(spv::E_SPV_KHR_ray_query);
+                builder.addCapability(spv::CapabilityRayQueryKHR);
+            }
+            spvType = builder.makeRayQueryType();
+        }
         break;
     case glslang::EbtReference:
         {
@@ -3929,6 +4073,8 @@
     // Name and decorate the non-hidden members
     int offset = -1;
     int locationOffset = 0;  // for use within the members of this struct
+    bool memberLocationInvalid = type.isArrayOfArrays() ||
+        (type.isArray() && (type.getQualifier().isArrayedIo(glslangIntermediate->getStage()) == false));
     for (int i = 0; i < (int)glslangMembers->size(); i++) {
         glslang::TType& glslangMember = *(*glslangMembers)[i].type;
         int member = i;
@@ -3981,7 +4127,7 @@
         // just track whether a member needs to be decorated.
         // Ignore member locations if the container is an array, as that's
         // ill-specified and decisions have been made to not allow this.
-        if (! type.isArray() && memberQualifier.hasLocation())
+        if (!memberLocationInvalid && memberQualifier.hasLocation())
             builder.addMemberDecoration(spvType, member, spv::DecorationLocation, memberQualifier.layoutLocation);
 
         if (qualifier.hasLocation())      // track for upcoming inheritance
@@ -4087,6 +4233,7 @@
     alignment |= type.getBufferReferenceAlignment();
 
     spv::Id loadedId = builder.accessChainLoad(TranslatePrecisionDecoration(type),
+        TranslateNonUniformDecoration(builder.getAccessChain().coherentFlags),
         TranslateNonUniformDecoration(type.getQualifier()),
         nominalTypeId,
         spv::MemoryAccessMask(TranslateMemoryAccess(coherentFlags) & ~spv::MemoryAccessMakePointerAvailableKHRMask),
@@ -4154,7 +4301,7 @@
     unsigned int alignment = builder.getAccessChain().alignment;
     alignment |= type.getBufferReferenceAlignment();
 
-    builder.accessChainStore(rvalue,
+    builder.accessChainStore(rvalue, TranslateNonUniformDecoration(builder.getAccessChain().coherentFlags),
                              spv::MemoryAccessMask(TranslateMemoryAccess(coherentFlags) &
                                 ~spv::MemoryAccessMakePointerVisibleKHRMask),
                              TranslateMemoryScope(coherentFlags), alignment);
@@ -4542,7 +4689,39 @@
         }
     }
 }
+// Walk over all linker objects to create a map for payload and callable data linker objects
+// and their location to be used during codegen for OpTraceKHR and OpExecuteCallableKHR
+// This is done here since it is possible that these linker objects are not be referenced in the AST
+void TGlslangToSpvTraverser::collectRayTracingLinkerObjects()
+{
+    glslang::TIntermAggregate* linkerObjects = glslangIntermediate->findLinkerObjects();
+    for (auto& objSeq : linkerObjects->getSequence()) {
+        auto objNode = objSeq->getAsSymbolNode();
+        if (objNode != nullptr) {
+            if (objNode->getQualifier().hasLocation()) {
+                unsigned int location = objNode->getQualifier().layoutLocation;
+                auto st = objNode->getQualifier().storage;
+                int set;
+                switch (st)
+                {
+                case glslang::EvqPayload:
+                case glslang::EvqPayloadIn:
+                    set = 0;
+                    break;
+                case glslang::EvqCallableData:
+                case glslang::EvqCallableDataIn:
+                    set = 1;
+                    break;
 
+                default:
+                    set = -1;
+                }
+                if (set != -1)
+                    locationToSymbol[set].insert(std::make_pair(location, objNode));
+            }
+        }
+    }
+}
 // Process all the functions, while skipping initializers.
 void TGlslangToSpvTraverser::visitFunctions(const glslang::TIntermSequence& glslFunctions)
 {
@@ -4686,8 +4865,10 @@
         }
 
         if (lvalue) {
-            arguments.push_back(builder.accessChainGetLValue());
+            spv::Id lvalue_id = builder.accessChainGetLValue();
+            arguments.push_back(lvalue_id);
             lvalueCoherentFlags = builder.getAccessChain().coherentFlags;
+            builder.addDecoration(lvalue_id, TranslateNonUniformDecoration(lvalueCoherentFlags));
             lvalueCoherentFlags |= TranslateCoherent(glslangArguments[i]->getAsTyped()->getType());
         } else
 #endif
@@ -4750,12 +4931,15 @@
 
     const bool isUnsignedResult = node->getType().getBasicType() == glslang::EbtUint;
 
+    if (builder.isSampledImage(params.sampler) &&
+        ((cracked.query && node->getOp() != glslang::EOpTextureQueryLod) || cracked.fragMask || cracked.fetch)) {
+        params.sampler = builder.createUnaryOp(spv::OpImage, builder.getImageType(params.sampler), params.sampler);
+        if (imageType.getQualifier().isNonUniform()) {
+            builder.addDecoration(params.sampler, spv::DecorationNonUniformEXT);
+        }
+    }
     // Check for queries
     if (cracked.query) {
-        // OpImageQueryLod works on a sampled image, for other queries the image has to be extracted first
-        if (node->getOp() != glslang::EOpTextureQueryLod && builder.isSampledImage(params.sampler))
-            params.sampler = builder.createUnaryOp(spv::OpImage, builder.getImageType(params.sampler), params.sampler);
-
         switch (node->getOp()) {
         case glslang::EOpImageQuerySize:
         case glslang::EOpTextureQuerySize:
@@ -5009,10 +5193,6 @@
         auto opIt = arguments.begin();
         std::vector<spv::Id> operands;
 
-        // Extract the image if necessary
-        if (builder.isSampledImage(params.sampler))
-            params.sampler = builder.createUnaryOp(spv::OpImage, builder.getImageType(params.sampler), params.sampler);
-
         operands.push_back(params.sampler);
         ++opIt;
 
@@ -5073,13 +5253,6 @@
             bias = true;
     }
 
-    // See if the sampler param should really be just the SPV image part
-    if (cracked.fetch) {
-        // a fetch needs to have the image extracted first
-        if (builder.isSampledImage(params.sampler))
-            params.sampler = builder.createUnaryOp(spv::OpImage, builder.getImageType(params.sampler), params.sampler);
-    }
-
 #ifndef GLSLANG_WEB
     if (cracked.gather) {
         const auto& sourceExtensions = glslangIntermediate->getRequestedExtensions();
@@ -5239,7 +5412,7 @@
 
             builder.accessChainPush(builder.makeIntConstant(i), flags, 0);
             builder.accessChainStore(builder.createCompositeExtract(res, builder.getContainedTypeId(resType, i+1),
-                i+1));
+                i+1), TranslateNonUniformDecoration(imageType.getQualifier()));
         }
         return builder.createCompositeExtract(res, resultType(), 0);
     }
@@ -5375,6 +5548,7 @@
     // 3. Make the call.
     spv::Id result = builder.createFunctionCall(function, spvArgs);
     builder.setPrecision(result, TranslatePrecisionDecoration(node->getType()));
+    builder.addDecoration(result, TranslateNonUniformDecoration(node->getType().getQualifier()));
 
     // 4. Copy back out an "out" arguments.
     lValueCount = 0;
@@ -5384,6 +5558,7 @@
         else if (writableParam(qualifiers[a])) {
             if (qualifiers[a] == glslang::EvqOut || qualifiers[a] == glslang::EvqInOut) {
                 spv::Id copy = builder.createLoad(spvArgs[a], spv::NoPrecision);
+                builder.addDecoration(copy, TranslateNonUniformDecoration(argTypes[a]->getQualifier()));
                 builder.setAccessChain(lValues[lValueCount]);
                 multiTypeStore(*argTypes[a], copy);
             }
@@ -6171,6 +6346,11 @@
     case glslang::EOpConstructReference:
         unaryOp = spv::OpBitcast;
         break;
+
+    case glslang::EOpConvUint64ToAccStruct:
+    case glslang::EOpConvUvec2ToAccStruct:
+        unaryOp = spv::OpConvertUToAccelerationStructureKHR;
+        break;
 #endif
 
     case glslang::EOpCopyObject:
@@ -7757,10 +7937,16 @@
         typeId = builder.makeBoolType();
         opCode = spv::OpReportIntersectionKHR;
         break;
-    case glslang::EOpTrace:
+    case glslang::EOpTraceNV:
+        builder.createNoResultOp(spv::OpTraceNV, operands);
+        return 0;
+    case glslang::EOpTraceKHR:
         builder.createNoResultOp(spv::OpTraceRayKHR, operands);
         return 0;
-    case glslang::EOpExecuteCallable:
+    case glslang::EOpExecuteCallableNV:
+        builder.createNoResultOp(spv::OpExecuteCallableNV, operands);
+        return 0;
+    case glslang::EOpExecuteCallableKHR:
         builder.createNoResultOp(spv::OpExecuteCallableKHR, operands);
         return 0;
 
@@ -8048,11 +8234,11 @@
         spv::Id id = builder.createBuiltinCall(typeId, getExtBuiltins(spv::E_SPV_AMD_gcn_shader), spv::TimeAMD, args);
         return builder.setPrecision(id, precision);
     }
-    case glslang::EOpIgnoreIntersection:
-        builder.createNoResultOp(spv::OpIgnoreIntersectionKHR);
+    case glslang::EOpIgnoreIntersectionNV:
+        builder.createNoResultOp(spv::OpIgnoreIntersectionNV);
         return 0;
-    case glslang::EOpTerminateRay:
-        builder.createNoResultOp(spv::OpTerminateRayKHR);
+    case glslang::EOpTerminateRayNV:
+        builder.createNoResultOp(spv::OpTerminateRayNV);
         return 0;
     case glslang::EOpRayQueryInitialize:
         builder.createNoResultOp(spv::OpRayQueryInitializeKHR);
@@ -8180,7 +8366,8 @@
     }
 
 #ifndef GLSLANG_WEB
-    if (symbol->getType().isImage()) {
+    // Subgroup builtins which have input storage class are volatile for ray tracing stages.
+    if (symbol->getType().isImage() || symbol->getQualifier().isPipeInput()) {
         std::vector<spv::Decoration> memory;
         TranslateMemoryDecoration(symbol->getType().getQualifier(), memory,
             glslangIntermediate->usingVulkanMemoryModel());
@@ -8188,9 +8375,6 @@
             builder.addDecoration(id, memory[i]);
     }
 
-    // nonuniform
-    builder.addDecoration(id, TranslateNonUniformDecoration(symbol->getType().getQualifier()));
-
     if (builtIn == spv::BuiltInSampleMask) {
           spv::Decoration decoration;
           // GL_NV_sample_mask_override_coverage extension
diff --git a/SPIRV/GlslangToSpv.h b/SPIRV/GlslangToSpv.h
old mode 100755
new mode 100644
diff --git a/SPIRV/SpvBuilder.cpp b/SPIRV/SpvBuilder.cpp
index 9680331..c8fbcc4 100644
--- a/SPIRV/SpvBuilder.cpp
+++ b/SPIRV/SpvBuilder.cpp
@@ -621,13 +621,13 @@
 Id Builder::makeRayQueryType()
 {
     Instruction *type;
-    if (groupedTypes[OpTypeRayQueryProvisionalKHR].size() == 0) {
-        type = new Instruction(getUniqueId(), NoType, OpTypeRayQueryProvisionalKHR);
-        groupedTypes[OpTypeRayQueryProvisionalKHR].push_back(type);
+    if (groupedTypes[OpTypeRayQueryKHR].size() == 0) {
+        type = new Instruction(getUniqueId(), NoType, OpTypeRayQueryKHR);
+        groupedTypes[OpTypeRayQueryKHR].push_back(type);
         constantsTypesGlobals.push_back(std::unique_ptr<Instruction>(type));
         module.mapInstruction(type);
     } else {
-        type = groupedTypes[OpTypeRayQueryProvisionalKHR].back();
+        type = groupedTypes[OpTypeRayQueryKHR].back();
     }
 
     return type->getResultId();
@@ -1447,10 +1447,10 @@
 }
 
 // Comments in header
-void Builder::makeDiscard()
+void Builder::makeStatementTerminator(spv::Op opcode, const char *name)
 {
-    buildPoint->addInstruction(std::unique_ptr<Instruction>(new Instruction(OpKill)));
-    createAndSetNoPredecessorBlock("post-discard");
+    buildPoint->addInstruction(std::unique_ptr<Instruction>(new Instruction(opcode)));
+    createAndSetNoPredecessorBlock(name);
 }
 
 // Comments in header
@@ -2761,12 +2761,14 @@
 }
 
 // Comments in header
-void Builder::accessChainStore(Id rvalue, spv::MemoryAccessMask memoryAccess, spv::Scope scope, unsigned int alignment)
+void Builder::accessChainStore(Id rvalue, Decoration nonUniform, spv::MemoryAccessMask memoryAccess, spv::Scope scope, unsigned int alignment)
 {
     assert(accessChain.isRValue == false);
 
     transferAccessChainSwizzle(true);
     Id base = collapseAccessChain();
+    addDecoration(base, nonUniform);
+
     Id source = rvalue;
 
     // dynamic component should be gone
@@ -2789,8 +2791,9 @@
 }
 
 // Comments in header
-Id Builder::accessChainLoad(Decoration precision, Decoration nonUniform, Id resultType,
-    spv::MemoryAccessMask memoryAccess, spv::Scope scope, unsigned int alignment)
+Id Builder::accessChainLoad(Decoration precision, Decoration l_nonUniform,
+    Decoration r_nonUniform, Id resultType, spv::MemoryAccessMask memoryAccess,
+    spv::Scope scope, unsigned int alignment)
 {
     Id id;
 
@@ -2854,9 +2857,9 @@
         // Buffer accesses need the access chain decorated, and this is where
         // loaded image types get decorated. TODO: This should maybe move to
         // createImageTextureFunctionCall.
-        addDecoration(id, nonUniform);
+        addDecoration(id, l_nonUniform);
         id = createLoad(id, precision, memoryAccess, scope, alignment);
-        addDecoration(id, nonUniform);
+        addDecoration(id, r_nonUniform);
     }
 
     // Done, unless there are swizzles to do
@@ -2877,7 +2880,7 @@
     if (accessChain.component != NoResult)
         id = setPrecision(createVectorExtractDynamic(id, resultType, accessChain.component), precision);
 
-    addDecoration(id, nonUniform);
+    addDecoration(id, r_nonUniform);
     return id;
 }
 
diff --git a/SPIRV/SpvBuilder.h b/SPIRV/SpvBuilder.h
index 077945e..911ea58 100644
--- a/SPIRV/SpvBuilder.h
+++ b/SPIRV/SpvBuilder.h
@@ -357,8 +357,9 @@
     // Generate all the code needed to finish up a function.
     void leaveFunction();
 
-    // Create a discard.
-    void makeDiscard();
+    // Create block terminator instruction for certain statements like
+    // discard, terminate-invocation, terminateRayEXT, or ignoreIntersectionEXT
+    void makeStatementTerminator(spv::Op opcode, const char *name);
 
     // Create a global or function local or IO variable.
     Id createVariable(Decoration precision, StorageClass, Id type, const char* name = nullptr,
@@ -624,6 +625,7 @@
             CoherentFlags operator |=(const CoherentFlags &other) { return *this; }
 #else
             bool isVolatile() const { return volatil; }
+            bool isNonUniform() const { return nonUniform; }
             bool anyCoherent() const {
                 return coherent || devicecoherent || queuefamilycoherent || workgroupcoherent ||
                     subgroupcoherent || shadercallcoherent;
@@ -638,6 +640,7 @@
             unsigned nonprivate : 1;
             unsigned volatil : 1;
             unsigned isImage : 1;
+            unsigned nonUniform : 1;
 
             void clear() {
                 coherent = 0;
@@ -649,6 +652,7 @@
                 nonprivate = 0;
                 volatil = 0;
                 isImage = 0;
+                nonUniform = 0;
             }
 
             CoherentFlags operator |=(const CoherentFlags &other) {
@@ -661,6 +665,7 @@
                 nonprivate |= other.nonprivate;
                 volatil |= other.volatil;
                 isImage |= other.isImage;
+                nonUniform |= other.nonUniform;
                 return *this;
             }
 #endif
@@ -721,11 +726,12 @@
     }
 
     // use accessChain and swizzle to store value
-    void accessChainStore(Id rvalue, spv::MemoryAccessMask memoryAccess = spv::MemoryAccessMaskNone,
+    void accessChainStore(Id rvalue, Decoration nonUniform,
+        spv::MemoryAccessMask memoryAccess = spv::MemoryAccessMaskNone,
         spv::Scope scope = spv::ScopeMax, unsigned int alignment = 0);
 
     // use accessChain and swizzle to load an r-value
-    Id accessChainLoad(Decoration precision, Decoration nonUniform, Id ResultType,
+    Id accessChainLoad(Decoration precision, Decoration l_nonUniform, Decoration r_nonUniform, Id ResultType,
         spv::MemoryAccessMask memoryAccess = spv::MemoryAccessMaskNone, spv::Scope scope = spv::ScopeMax,
             unsigned int alignment = 0);
 
diff --git a/SPIRV/SpvTools.cpp b/SPIRV/SpvTools.cpp
index 112ac33..16d051a 100644
--- a/SPIRV/SpvTools.cpp
+++ b/SPIRV/SpvTools.cpp
@@ -44,7 +44,6 @@
 
 #include "SpvTools.h"
 #include "spirv-tools/optimizer.hpp"
-#include "spirv-tools/libspirv.h"
 
 namespace glslang {
 
@@ -114,11 +113,18 @@
     out << std::endl;
 }
 
-// Use the SPIRV-Tools disassembler to print SPIR-V.
+// Use the SPIRV-Tools disassembler to print SPIR-V using a SPV_ENV_UNIVERSAL_1_3 environment.
 void SpirvToolsDisassemble(std::ostream& out, const std::vector<unsigned int>& spirv)
 {
+    SpirvToolsDisassemble(out, spirv, spv_target_env::SPV_ENV_UNIVERSAL_1_3);
+}
+
+// Use the SPIRV-Tools disassembler to print SPIR-V with a provided SPIR-V environment.
+void SpirvToolsDisassemble(std::ostream& out, const std::vector<unsigned int>& spirv,
+                           spv_target_env requested_context)
+{
     // disassemble
-    spv_context context = spvContextCreate(SPV_ENV_UNIVERSAL_1_3);
+    spv_context context = spvContextCreate(requested_context);
     spv_text text;
     spv_diagnostic diagnostic = nullptr;
     spvBinaryToText(context, spirv.data(), spirv.size(),
@@ -174,10 +180,7 @@
     // line information into all SPIR-V instructions. This avoids loss of
     // information when instructions are deleted or moved. Later, remove
     // redundant information to minimize final SPRIR-V size.
-    if (options->generateDebugInfo) {
-        optimizer.RegisterPass(spvtools::CreatePropagateLineInfoPass());
-    }
-    else if (options->stripDebugInfo) {
+    if (options->stripDebugInfo) {
         optimizer.RegisterPass(spvtools::CreateStripDebugInfoPass());
     }
     optimizer.RegisterPass(spvtools::CreateWrapOpKillPass());
@@ -207,9 +210,6 @@
     }
     optimizer.RegisterPass(spvtools::CreateAggressiveDCEPass());
     optimizer.RegisterPass(spvtools::CreateCFGCleanupPass());
-    if (options->generateDebugInfo) {
-        optimizer.RegisterPass(spvtools::CreateRedundantLineInfoElimPass());
-    }
 
     spvtools::OptimizerOptions spvOptOptions;
     optimizer.SetTargetEnv(MapToSpirvToolsEnv(intermediate.getSpv(), logger));
diff --git a/SPIRV/SpvTools.h b/SPIRV/SpvTools.h
index 7779dfa..3fb3cba 100644
--- a/SPIRV/SpvTools.h
+++ b/SPIRV/SpvTools.h
@@ -41,9 +41,10 @@
 #ifndef GLSLANG_SPV_TOOLS_H
 #define GLSLANG_SPV_TOOLS_H
 
-#ifdef ENABLE_OPT
+#if ENABLE_OPT
 #include <vector>
 #include <ostream>
+#include "spirv-tools/libspirv.h"
 #endif
 
 #include "glslang/MachineIndependent/localintermediate.h"
@@ -62,11 +63,15 @@
     bool validate;
 };
 
-#ifdef ENABLE_OPT
+#if ENABLE_OPT
 
-// Use the SPIRV-Tools disassembler to print SPIR-V.
+// Use the SPIRV-Tools disassembler to print SPIR-V using a SPV_ENV_UNIVERSAL_1_3 environment.
 void SpirvToolsDisassemble(std::ostream& out, const std::vector<unsigned int>& spirv);
 
+// Use the SPIRV-Tools disassembler to print SPIR-V with a provided SPIR-V environment.
+void SpirvToolsDisassemble(std::ostream& out, const std::vector<unsigned int>& spirv,
+                           spv_target_env requested_context);
+
 // Apply the SPIRV-Tools validator to generated SPIR-V.
 void SpirvToolsValidate(const glslang::TIntermediate& intermediate, std::vector<unsigned int>& spirv,
                         spv::SpvBuildLogger*, bool prelegalization);
diff --git a/SPIRV/disassemble.cpp b/SPIRV/disassemble.cpp
index a95ded4..73c988c 100644
--- a/SPIRV/disassemble.cpp
+++ b/SPIRV/disassemble.cpp
@@ -46,7 +46,6 @@
 
 #include "disassemble.h"
 #include "doc.h"
-#include "SpvTools.h"
 
 namespace spv {
     extern "C" {
diff --git a/SPIRV/doc.cpp b/SPIRV/doc.cpp
index 1d052f8..5327f22 100644
--- a/SPIRV/doc.cpp
+++ b/SPIRV/doc.cpp
@@ -372,6 +372,8 @@
     case 4424: return "BaseVertex";
     case 4425: return "BaseInstance";
     case 4426: return "DrawIndex";
+    case 4432: return "PrimitiveShadingRateKHR";
+    case 4444: return "ShadingRateKHR";
     case 5014: return "FragStencilRefEXT";
 
     case 4992: return "BaryCoordNoPerspAMD";
@@ -393,7 +395,7 @@
     case BuiltInRayGeometryIndexKHR:         return "RayGeometryIndexKHR";
     case BuiltInObjectToWorldKHR:            return "ObjectToWorldKHR";
     case BuiltInWorldToObjectKHR:            return "WorldToObjectKHR";
-    case BuiltInHitTKHR:                     return "HitTKHR";
+    case BuiltInHitTNV:                      return "HitTNV";
     case BuiltInHitKindKHR:                  return "HitKindKHR";
     case BuiltInIncomingRayFlagsKHR:         return "IncomingRayFlagsKHR";
     case BuiltInViewportMaskNV:              return "ViewportMaskNV";
@@ -521,6 +523,8 @@
     case 37: return "Rg8ui";
     case 38: return "R16ui";
     case 39: return "R8ui";
+    case 40: return "R64ui";
+    case 41: return "R64i";
 
     default:
         return "Bad";
@@ -911,9 +915,9 @@
     case CapabilityPerViewAttributesNV:             return "PerViewAttributesNV";
     case CapabilityGroupNonUniformPartitionedNV:    return "GroupNonUniformPartitionedNV";
     case CapabilityRayTracingNV:                    return "RayTracingNV";
-    case CapabilityRayTracingProvisionalKHR:        return "RayTracingProvisionalKHR";
-    case CapabilityRayQueryProvisionalKHR:          return "RayQueryProvisionalKHR";
-    case CapabilityRayTraversalPrimitiveCullingProvisionalKHR: return "RayTraversalPrimitiveCullingProvisionalKHR";
+    case CapabilityRayTracingKHR:                   return "RayTracingKHR";
+    case CapabilityRayQueryKHR:                     return "RayQueryKHR";
+    case CapabilityRayTraversalPrimitiveCullingKHR: return "RayTraversalPrimitiveCullingKHR";
     case CapabilityComputeDerivativeGroupQuadsNV:   return "ComputeDerivativeGroupQuadsNV";
     case CapabilityComputeDerivativeGroupLinearNV:  return "ComputeDerivativeGroupLinearNV";
     case CapabilityFragmentBarycentricNV:           return "FragmentBarycentricNV";
@@ -952,8 +956,11 @@
     case CapabilityFragmentShaderPixelInterlockEXT:         return "CapabilityFragmentShaderPixelInterlockEXT";
     case CapabilityFragmentShaderShadingRateInterlockEXT:   return "CapabilityFragmentShaderShadingRateInterlockEXT";
 
+    case CapabilityFragmentShadingRateKHR:                  return "FragmentShadingRateKHR";
+
     case CapabilityDemoteToHelperInvocationEXT:             return "DemoteToHelperInvocationEXT";
     case CapabilityShaderClockKHR:                          return "ShaderClockKHR";
+    case CapabilityInt64ImageEXT:                           return "Int64ImageEXT";
 
     case CapabilityIntegerFunctions2INTEL:              return "CapabilityIntegerFunctions2INTEL";
 
@@ -1329,6 +1336,8 @@
     case 365: return "OpGroupNonUniformQuadBroadcast";
     case 366: return "OpGroupNonUniformQuadSwap";
 
+    case OpTerminateInvocation: return "OpTerminateInvocation";
+
     case 4421: return "OpSubgroupBallotKHR";
     case 4422: return "OpSubgroupFirstInvocationKHR";
     case 4428: return "OpSubgroupAllKHR";
@@ -1355,17 +1364,23 @@
     case OpDecorateStringGOOGLE:       return "OpDecorateStringGOOGLE";
     case OpMemberDecorateStringGOOGLE: return "OpMemberDecorateStringGOOGLE";
 
+    case OpReportIntersectionKHR:             return "OpReportIntersectionKHR";
+    case OpIgnoreIntersectionNV:              return "OpIgnoreIntersectionNV";
+    case OpIgnoreIntersectionKHR:             return "OpIgnoreIntersectionKHR";
+    case OpTerminateRayNV:                    return "OpTerminateRayNV";
+    case OpTerminateRayKHR:                   return "OpTerminateRayKHR";
+    case OpTraceNV:                           return "OpTraceNV";
+    case OpTraceRayKHR:                       return "OpTraceRayKHR";
+    case OpTypeAccelerationStructureKHR:      return "OpTypeAccelerationStructureKHR";
+    case OpExecuteCallableNV:                 return "OpExecuteCallableNV";
+    case OpExecuteCallableKHR:                return "OpExecuteCallableKHR";
+    case OpConvertUToAccelerationStructureKHR: return "OpConvertUToAccelerationStructureKHR";
+
     case OpGroupNonUniformPartitionNV:       return "OpGroupNonUniformPartitionNV";
-    case OpReportIntersectionKHR:            return "OpReportIntersectionKHR";
-    case OpIgnoreIntersectionKHR:            return "OpIgnoreIntersectionKHR";
-    case OpTerminateRayKHR:                  return "OpTerminateRayKHR";
-    case OpTraceRayKHR:                      return "OpTraceRayKHR";
-    case OpTypeAccelerationStructureKHR:     return "OpTypeAccelerationStructureKHR";
-    case OpExecuteCallableKHR:               return "OpExecuteCallableKHR";
     case OpImageSampleFootprintNV:           return "OpImageSampleFootprintNV";
     case OpWritePackedPrimitiveIndices4x8NV: return "OpWritePackedPrimitiveIndices4x8NV";
 
-    case OpTypeRayQueryProvisionalKHR:                                        return "OpTypeRayQueryProvisionalKHR";
+    case OpTypeRayQueryKHR:                                                   return "OpTypeRayQueryKHR";
     case OpRayQueryInitializeKHR:                                             return "OpRayQueryInitializeKHR";
     case OpRayQueryTerminateKHR:                                              return "OpRayQueryTerminateKHR";
     case OpRayQueryGenerateIntersectionKHR:                                   return "OpRayQueryGenerateIntersectionKHR";
@@ -1497,6 +1512,7 @@
     InstructionDesc[OpBranchConditional].setResultAndType(false, false);
     InstructionDesc[OpSwitch].setResultAndType(false, false);
     InstructionDesc[OpKill].setResultAndType(false, false);
+    InstructionDesc[OpTerminateInvocation].setResultAndType(false, false);
     InstructionDesc[OpReturn].setResultAndType(false, false);
     InstructionDesc[OpReturnValue].setResultAndType(false, false);
     InstructionDesc[OpUnreachable].setResultAndType(false, false);
@@ -2761,7 +2777,20 @@
 
     InstructionDesc[OpTypeAccelerationStructureKHR].setResultAndType(true, false);
 
-    InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'NV Acceleration Structure'");
+    InstructionDesc[OpTraceNV].operands.push(OperandId, "'Acceleration Structure'");
+    InstructionDesc[OpTraceNV].operands.push(OperandId, "'Ray Flags'");
+    InstructionDesc[OpTraceNV].operands.push(OperandId, "'Cull Mask'");
+    InstructionDesc[OpTraceNV].operands.push(OperandId, "'SBT Record Offset'");
+    InstructionDesc[OpTraceNV].operands.push(OperandId, "'SBT Record Stride'");
+    InstructionDesc[OpTraceNV].operands.push(OperandId, "'Miss Index'");
+    InstructionDesc[OpTraceNV].operands.push(OperandId, "'Ray Origin'");
+    InstructionDesc[OpTraceNV].operands.push(OperandId, "'TMin'");
+    InstructionDesc[OpTraceNV].operands.push(OperandId, "'Ray Direction'");
+    InstructionDesc[OpTraceNV].operands.push(OperandId, "'TMax'");
+    InstructionDesc[OpTraceNV].operands.push(OperandId, "'Payload'");
+    InstructionDesc[OpTraceNV].setResultAndType(false, false);
+
+    InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'Acceleration Structure'");
     InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'Ray Flags'");
     InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'Cull Mask'");
     InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'SBT Record Offset'");
@@ -2777,17 +2806,28 @@
     InstructionDesc[OpReportIntersectionKHR].operands.push(OperandId, "'Hit Parameter'");
     InstructionDesc[OpReportIntersectionKHR].operands.push(OperandId, "'Hit Kind'");
 
+    InstructionDesc[OpIgnoreIntersectionNV].setResultAndType(false, false);
+
     InstructionDesc[OpIgnoreIntersectionKHR].setResultAndType(false, false);
 
+    InstructionDesc[OpTerminateRayNV].setResultAndType(false, false);
+
     InstructionDesc[OpTerminateRayKHR].setResultAndType(false, false);
     
+    InstructionDesc[OpExecuteCallableNV].operands.push(OperandId, "SBT Record Index");
+    InstructionDesc[OpExecuteCallableNV].operands.push(OperandId, "CallableData ID");
+    InstructionDesc[OpExecuteCallableNV].setResultAndType(false, false);
+
     InstructionDesc[OpExecuteCallableKHR].operands.push(OperandId, "SBT Record Index");
-    InstructionDesc[OpExecuteCallableKHR].operands.push(OperandId, "CallableData ID");
+    InstructionDesc[OpExecuteCallableKHR].operands.push(OperandId, "CallableData");
     InstructionDesc[OpExecuteCallableKHR].setResultAndType(false, false);
 
+    InstructionDesc[OpConvertUToAccelerationStructureKHR].operands.push(OperandId, "Value");
+    InstructionDesc[OpConvertUToAccelerationStructureKHR].setResultAndType(true, true);
+
     // Ray Query
     InstructionDesc[OpTypeAccelerationStructureKHR].setResultAndType(true, false);
-    InstructionDesc[OpTypeRayQueryProvisionalKHR].setResultAndType(true, false);
+    InstructionDesc[OpTypeRayQueryKHR].setResultAndType(true, false);
 
     InstructionDesc[OpRayQueryInitializeKHR].operands.push(OperandId, "'RayQuery'");
     InstructionDesc[OpRayQueryInitializeKHR].operands.push(OperandId, "'AccelerationS'");
diff --git a/SPIRV/spirv.hpp b/SPIRV/spirv.hpp
index 35482ea..43dd2aa 100644
--- a/SPIRV/spirv.hpp
+++ b/SPIRV/spirv.hpp
@@ -50,11 +50,11 @@
 typedef unsigned int Id;
 
 #define SPV_VERSION 0x10500
-#define SPV_REVISION 3
+#define SPV_REVISION 4
 
 static const unsigned int MagicNumber = 0x07230203;
 static const unsigned int Version = 0x00010500;
-static const unsigned int Revision = 3;
+static const unsigned int Revision = 4;
 static const unsigned int OpCodeMask = 0xffff;
 static const unsigned int WordCountShift = 16;
 
@@ -274,6 +274,8 @@
     ImageFormatRg8ui = 37,
     ImageFormatR16ui = 38,
     ImageFormatR8ui = 39,
+    ImageFormatR64ui = 40,
+    ImageFormatR64i = 41,
     ImageFormatMax = 0x7fffffff,
 };
 
@@ -558,8 +560,10 @@
     BuiltInBaseVertex = 4424,
     BuiltInBaseInstance = 4425,
     BuiltInDrawIndex = 4426,
+    BuiltInPrimitiveShadingRateKHR = 4432,
     BuiltInDeviceIndex = 4438,
     BuiltInViewIndex = 4440,
+    BuiltInShadingRateKHR = 4444,
     BuiltInBaryCoordNoPerspAMD = 4992,
     BuiltInBaryCoordNoPerspCentroidAMD = 4993,
     BuiltInBaryCoordNoPerspSampleAMD = 4994,
@@ -610,7 +614,6 @@
     BuiltInObjectToWorldNV = 5330,
     BuiltInWorldToObjectKHR = 5331,
     BuiltInWorldToObjectNV = 5331,
-    BuiltInHitTKHR = 5332,
     BuiltInHitTNV = 5332,
     BuiltInHitKindKHR = 5333,
     BuiltInHitKindNV = 5333,
@@ -870,6 +873,7 @@
     CapabilityGroupNonUniformQuad = 68,
     CapabilityShaderLayer = 69,
     CapabilityShaderViewportIndex = 70,
+    CapabilityFragmentShadingRateKHR = 4422,
     CapabilitySubgroupBallotKHR = 4423,
     CapabilityDrawParameters = 4427,
     CapabilitySubgroupVoteKHR = 4431,
@@ -894,12 +898,15 @@
     CapabilityRoundingModeRTE = 4467,
     CapabilityRoundingModeRTZ = 4468,
     CapabilityRayQueryProvisionalKHR = 4471,
-    CapabilityRayTraversalPrimitiveCullingProvisionalKHR = 4478,
+    CapabilityRayQueryKHR = 4472,
+    CapabilityRayTraversalPrimitiveCullingKHR = 4478,
+    CapabilityRayTracingKHR = 4479,
     CapabilityFloat16ImageAMD = 5008,
     CapabilityImageGatherBiasLodAMD = 5009,
     CapabilityFragmentMaskAMD = 5010,
     CapabilityStencilExportEXT = 5013,
     CapabilityImageReadWriteLodAMD = 5015,
+    CapabilityInt64ImageEXT = 5016,
     CapabilityShaderClockKHR = 5055,
     CapabilitySampleMaskOverrideCoverageNV = 5249,
     CapabilityGeometryShaderPassthroughNV = 5251,
@@ -1024,6 +1031,22 @@
     RayQueryCandidateIntersectionTypeMax = 0x7fffffff,
 };
 
+enum FragmentShadingRateShift {
+    FragmentShadingRateVertical2PixelsShift = 0,
+    FragmentShadingRateVertical4PixelsShift = 1,
+    FragmentShadingRateHorizontal2PixelsShift = 2,
+    FragmentShadingRateHorizontal4PixelsShift = 3,
+    FragmentShadingRateMax = 0x7fffffff,
+};
+
+enum FragmentShadingRateMask {
+    FragmentShadingRateMaskNone = 0,
+    FragmentShadingRateVertical2PixelsMask = 0x00000001,
+    FragmentShadingRateVertical4PixelsMask = 0x00000002,
+    FragmentShadingRateHorizontal2PixelsMask = 0x00000004,
+    FragmentShadingRateHorizontal4PixelsMask = 0x00000008,
+};
+
 enum Op {
     OpNop = 0,
     OpUndef = 1,
@@ -1369,13 +1392,19 @@
     OpPtrEqual = 401,
     OpPtrNotEqual = 402,
     OpPtrDiff = 403,
+    OpTerminateInvocation = 4416,
     OpSubgroupBallotKHR = 4421,
     OpSubgroupFirstInvocationKHR = 4422,
     OpSubgroupAllKHR = 4428,
     OpSubgroupAnyKHR = 4429,
     OpSubgroupAllEqualKHR = 4430,
     OpSubgroupReadInvocationKHR = 4432,
-    OpTypeRayQueryProvisionalKHR = 4472,
+    OpTraceRayKHR = 4445,
+    OpExecuteCallableKHR = 4446,
+    OpConvertUToAccelerationStructureKHR = 4447,
+    OpIgnoreIntersectionKHR = 4448,
+    OpTerminateRayKHR = 4449,
+    OpTypeRayQueryKHR = 4472,
     OpRayQueryInitializeKHR = 4473,
     OpRayQueryTerminateKHR = 4474,
     OpRayQueryGenerateIntersectionKHR = 4475,
@@ -1398,15 +1427,11 @@
     OpWritePackedPrimitiveIndices4x8NV = 5299,
     OpReportIntersectionKHR = 5334,
     OpReportIntersectionNV = 5334,
-    OpIgnoreIntersectionKHR = 5335,
     OpIgnoreIntersectionNV = 5335,
-    OpTerminateRayKHR = 5336,
     OpTerminateRayNV = 5336,
     OpTraceNV = 5337,
-    OpTraceRayKHR = 5337,
     OpTypeAccelerationStructureKHR = 5341,
     OpTypeAccelerationStructureNV = 5341,
-    OpExecuteCallableKHR = 5344,
     OpExecuteCallableNV = 5344,
     OpTypeCooperativeMatrixNV = 5358,
     OpCooperativeMatrixLoadNV = 5359,
@@ -1939,13 +1964,19 @@
     case OpPtrEqual: *hasResult = true; *hasResultType = true; break;
     case OpPtrNotEqual: *hasResult = true; *hasResultType = true; break;
     case OpPtrDiff: *hasResult = true; *hasResultType = true; break;
+    case OpTerminateInvocation: *hasResult = false; *hasResultType = false; break;
     case OpSubgroupBallotKHR: *hasResult = true; *hasResultType = true; break;
     case OpSubgroupFirstInvocationKHR: *hasResult = true; *hasResultType = true; break;
     case OpSubgroupAllKHR: *hasResult = true; *hasResultType = true; break;
     case OpSubgroupAnyKHR: *hasResult = true; *hasResultType = true; break;
     case OpSubgroupAllEqualKHR: *hasResult = true; *hasResultType = true; break;
     case OpSubgroupReadInvocationKHR: *hasResult = true; *hasResultType = true; break;
-    case OpTypeRayQueryProvisionalKHR: *hasResult = true; *hasResultType = false; break;
+    case OpTraceRayKHR: *hasResult = false; *hasResultType = false; break;
+    case OpExecuteCallableKHR: *hasResult = false; *hasResultType = false; break;
+    case OpConvertUToAccelerationStructureKHR: *hasResult = true; *hasResultType = true; break;
+    case OpIgnoreIntersectionKHR: *hasResult = false; *hasResultType = false; break;
+    case OpTerminateRayKHR: *hasResult = false; *hasResultType = false; break;
+    case OpTypeRayQueryKHR: *hasResult = true; *hasResultType = false; break;
     case OpRayQueryInitializeKHR: *hasResult = false; *hasResultType = false; break;
     case OpRayQueryTerminateKHR: *hasResult = false; *hasResultType = false; break;
     case OpRayQueryGenerateIntersectionKHR: *hasResult = false; *hasResultType = false; break;
@@ -2164,6 +2195,7 @@
 inline MemoryAccessMask operator|(MemoryAccessMask a, MemoryAccessMask b) { return MemoryAccessMask(unsigned(a) | unsigned(b)); }
 inline KernelProfilingInfoMask operator|(KernelProfilingInfoMask a, KernelProfilingInfoMask b) { return KernelProfilingInfoMask(unsigned(a) | unsigned(b)); }
 inline RayFlagsMask operator|(RayFlagsMask a, RayFlagsMask b) { return RayFlagsMask(unsigned(a) | unsigned(b)); }
+inline FragmentShadingRateMask operator|(FragmentShadingRateMask a, FragmentShadingRateMask b) { return FragmentShadingRateMask(unsigned(a) | unsigned(b)); }
 
 }  // end namespace spv
 
diff --git a/SPIRV/spvIR.h b/SPIRV/spvIR.h
old mode 100755
new mode 100644
index 868b9bf..486e80d
--- a/SPIRV/spvIR.h
+++ b/SPIRV/spvIR.h
@@ -263,6 +263,7 @@
         case OpBranchConditional:
         case OpSwitch:
         case OpKill:
+        case OpTerminateInvocation:
         case OpReturn:
         case OpReturnValue:
         case OpUnreachable:
diff --git a/StandAlone/CMakeLists.txt b/StandAlone/CMakeLists.txt
index 8038c04..bff9ab6 100644
--- a/StandAlone/CMakeLists.txt
+++ b/StandAlone/CMakeLists.txt
@@ -41,7 +41,6 @@
                            PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
                            PUBLIC $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}>)
 
-
 set(SOURCES StandAlone.cpp DirStackFileIncluder.h)
 
 add_executable(glslangValidator ${SOURCES})
@@ -70,6 +69,12 @@
     $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../External>
     $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/External>)
 
+if(ENABLE_OPT)
+    target_include_directories(glslangValidator
+        PRIVATE ${spirv-tools_SOURCE_DIR}/include
+    )
+endif(ENABLE_OPT)
+
 if(ENABLE_SPVREMAPPER)
     set(REMAPPER_SOURCES spirv-remap.cpp)
     add_executable(spirv-remap ${REMAPPER_SOURCES})
diff --git a/Test/310.frag b/Test/310.frag
old mode 100755
new mode 100644
diff --git a/Test/baseResults/300layout.vert.out b/Test/baseResults/300layout.vert.out
index e245cbc..527425b 100644
--- a/Test/baseResults/300layout.vert.out
+++ b/Test/baseResults/300layout.vert.out
@@ -1,6 +1,7 @@
 300layout.vert
 ERROR: 0:7: 'vertex input arrays' : not supported with this profile: es
 ERROR: 0:8: 'in' : cannot be a structure or array 
+ERROR: 0:8: 's' : A structure containing an array is not allowed as input in ES 
 ERROR: 0:8: 'vertex input arrays' : not supported with this profile: es
 ERROR: 0:8: 'location' : overlapping use of location 10
 ERROR: 0:12: 'layout' : cannot specify matrix layout on a variable declaration 
@@ -18,7 +19,7 @@
 ERROR: 0:50: 'shared' : not supported in this stage: vertex
 ERROR: 0:54: 'layout' : cannot specify packing on a variable declaration 
 ERROR: 0:57: 'location' : overlapping use of location 40
-ERROR: 19 compilation errors.  No code generated.
+ERROR: 20 compilation errors.  No code generated.
 
 
 Shader version: 300
diff --git a/Test/baseResults/310.frag.out b/Test/baseResults/310.frag.out
index 9fe93e9..9f73c67 100644
--- a/Test/baseResults/310.frag.out
+++ b/Test/baseResults/310.frag.out
@@ -40,10 +40,14 @@
 ERROR: 0:114: 'in' : cannot be bool 
 ERROR: 0:115: 'sampler2D' : sampler/image types can only be used in uniform variables or function parameters: ino
 ERROR: 0:117: 'fragment-shader array-of-array input' : not supported with this profile: es
+ERROR: 0:120: 'S' : A structure containing an array is not allowed as input in ES 
 ERROR: 0:120: 'fragment-shader array-of-struct input' : not supported with this profile: es
+ERROR: 0:121: 'S' : A structure containing an array is not allowed as input in ES 
 ERROR: 0:121: 'fragment-shader array-of-struct input' : not supported with this profile: es
 ERROR: 0:123: 'fragment-shader struct input containing an array' : not supported with this profile: es
+ERROR: 0:123: 'SA' : A structure containing an array is not allowed as input in ES 
 ERROR: 0:125: 'fragment-shader struct input containing structure' : not supported with this profile: es
+ERROR: 0:125: 'SS' : A structure containing an struct is not allowed as input in ES 
 ERROR: 0:133: 'output block' : not supported in this stage: fragment
 ERROR: 0:138: '' : cannot nest a structure definition inside a structure or block 
 ERROR: 0:146: 'location' : overlapping use of location 13
@@ -139,7 +143,7 @@
 ERROR: 0:463: 'return' : void function cannot return a value 
 ERROR: 0:472: '=' :  cannot convert from ' temp mediump uint' to ' temp mediump int'
 ERROR: 0:485: '=' :  cannot convert from ' global mediump int' to ' temp mediump uint'
-ERROR: 132 compilation errors.  No code generated.
+ERROR: 136 compilation errors.  No code generated.
 
 
 Shader version: 310
diff --git a/Test/baseResults/310.vert.out b/Test/baseResults/310.vert.out
index a910e34..1d2152d 100644
--- a/Test/baseResults/310.vert.out
+++ b/Test/baseResults/310.vert.out
@@ -21,6 +21,7 @@
 ERROR: 0:107: 'input block' : not supported in this stage: vertex
 ERROR: 0:109: 'gl_PerVertex' : block redeclaration has extra members 
 ERROR: 0:119: 'gl_PointSize' : member of nameless block was not redeclared 
+ERROR: 0:119: 'assign' :  l-value required "gl_PerVertex" (can't modify void)
 ERROR: 0:119: 'assign' :  cannot convert from ' const float' to ' gl_PointSize highp void PointSize'
 ERROR: 0:122: 'gl_PerVertex' : can only redeclare a built-in block once, and before any use 
 ERROR: 0:127: 'flat/smooth/noperspective' : cannot use interpolation qualifiers on an interface block 
@@ -96,7 +97,7 @@
 ERROR: 0:400: 'interpolateAtCentroid' : no matching overloaded function found 
 ERROR: 0:401: 'interpolateAtSample' : no matching overloaded function found 
 ERROR: 0:402: 'interpolateAtOffset' : no matching overloaded function found 
-ERROR: 93 compilation errors.  No code generated.
+ERROR: 94 compilation errors.  No code generated.
 
 
 Shader version: 310
diff --git a/Test/baseResults/320.vert.out b/Test/baseResults/320.vert.out
index bf127d4..0313b61 100644
--- a/Test/baseResults/320.vert.out
+++ b/Test/baseResults/320.vert.out
@@ -4,6 +4,7 @@
 ERROR: 0:16: 'input block' : not supported in this stage: vertex
 ERROR: 0:18: 'gl_PerVertex' : block redeclaration has extra members 
 ERROR: 0:28: 'gl_PointSize' : member of nameless block was not redeclared 
+ERROR: 0:28: 'assign' :  l-value required "gl_PerVertex" (can't modify void)
 ERROR: 0:28: 'assign' :  cannot convert from ' const float' to ' gl_PointSize highp void PointSize'
 ERROR: 0:31: 'gl_PerVertex' : can only redeclare a built-in block once, and before any use 
 ERROR: 0:36: 'flat/smooth/noperspective' : cannot use interpolation qualifiers on an interface block 
@@ -33,7 +34,7 @@
 ERROR: 0:252: 'interpolateAtCentroid' : no matching overloaded function found 
 ERROR: 0:253: 'interpolateAtSample' : no matching overloaded function found 
 ERROR: 0:254: 'interpolateAtOffset' : no matching overloaded function found 
-ERROR: 34 compilation errors.  No code generated.
+ERROR: 35 compilation errors.  No code generated.
 
 
 Shader version: 320
diff --git a/Test/baseResults/410.geom.out b/Test/baseResults/410.geom.out
index c38ba48..498da5a 100644
--- a/Test/baseResults/410.geom.out
+++ b/Test/baseResults/410.geom.out
@@ -5,9 +5,10 @@
 ERROR: 0:32: 'gl_Position' : no such field in structure 
 ERROR: 0:32: '=' :  cannot convert from ' temp block{ in float PointSize gl_PointSize}' to ' temp 4-component vector of float'
 ERROR: 0:33: 'gl_Position' : member of nameless block was not redeclared 
+ERROR: 0:33: 'assign' :  l-value required "gl_PerVertex" (can't modify void)
 ERROR: 0:33: 'assign' :  cannot convert from ' const 4-component vector of float' to 'layout( stream=0) gl_Position void Position'
 WARNING: 0:38: 'return' : type conversion on return values was not explicitly allowed until version 420 
-ERROR: 7 compilation errors.  No code generated.
+ERROR: 8 compilation errors.  No code generated.
 
 
 Shader version: 410
diff --git a/Test/baseResults/contradict_0.geom.out b/Test/baseResults/contradict_0.geom.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/cppBad3.vert.out b/Test/baseResults/cppBad3.vert.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/cppBad4.vert.out b/Test/baseResults/cppBad4.vert.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/cppBad5.vert.out b/Test/baseResults/cppBad5.vert.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/cppDeepNest.frag.out b/Test/baseResults/cppDeepNest.frag.out
index 969a256..49b9aa3 100644
--- a/Test/baseResults/cppDeepNest.frag.out
+++ b/Test/baseResults/cppDeepNest.frag.out
@@ -1,7 +1,7 @@
 cppDeepNest.frag
 ERROR: 0:66: '#if/#ifdef/#ifndef' : maximum nesting depth exceeded 
 ERROR: 0:66: '' : missing #endif 
-ERROR: 0:66: '' :  syntax error, unexpected $end
+ERROR: 0:66: '' :  syntax error, unexpected end of file
 ERROR: 3 compilation errors.  No code generated.
 
 
diff --git a/Test/baseResults/cppMerge.frag.out b/Test/baseResults/cppMerge.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/glsl.460.subgroup.rcall.out b/Test/baseResults/glsl.460.subgroup.rcall.out
index 6bffdc9..2b2d89b 100644
--- a/Test/baseResults/glsl.460.subgroup.rcall.out
+++ b/Test/baseResults/glsl.460.subgroup.rcall.out
@@ -109,8 +109,8 @@
 0:4    Function Parameters: 
 0:4      'f4' ( in 4-component vector of float)
 0:?     Sequence
-0:7      'gl_SubgroupSize' ( in uint SubgroupSize)
-0:8      'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:7      'gl_SubgroupSize' ( volatile in uint SubgroupSize)
+0:8      'gl_SubgroupInvocationID' ( volatile in uint SubgroupInvocationID)
 0:9      subgroupBarrier ( global void)
 0:10      subgroupMemoryBarrier ( global void)
 0:11      subgroupMemoryBarrierBuffer ( global void)
@@ -128,11 +128,11 @@
 0:19          false (const bool)
 0:20      subgroupAllEqual ( global bool)
 0:20        'f4' ( in 4-component vector of float)
-0:22      'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask)
-0:23      'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask)
-0:24      'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask)
-0:25      'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask)
-0:26      'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask)
+0:22      'gl_SubgroupEqMask' ( volatile in 4-component vector of uint SubgroupEqMask)
+0:23      'gl_SubgroupGeMask' ( volatile in 4-component vector of uint SubgroupGeMask)
+0:24      'gl_SubgroupGtMask' ( volatile in 4-component vector of uint SubgroupGtMask)
+0:25      'gl_SubgroupLeMask' ( volatile in 4-component vector of uint SubgroupLeMask)
+0:26      'gl_SubgroupLtMask' ( volatile in 4-component vector of uint SubgroupLtMask)
 0:27      subgroupBroadcast ( global 4-component vector of float)
 0:27        'f4' ( in 4-component vector of float)
 0:27        Constant:
@@ -359,8 +359,8 @@
 0:119  Function Definition: basic_works( ( global void)
 0:119    Function Parameters: 
 0:121    Sequence
-0:121      'gl_SubgroupSize' ( in uint SubgroupSize)
-0:122      'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:121      'gl_SubgroupSize' ( volatile in uint SubgroupSize)
+0:122      'gl_SubgroupInvocationID' ( volatile in uint SubgroupInvocationID)
 0:123      subgroupBarrier ( global void)
 0:124      subgroupMemoryBarrier ( global void)
 0:125      subgroupMemoryBarrierBuffer ( global void)
@@ -370,11 +370,11 @@
 0:131    Function Parameters: 
 0:131      'f4' ( in 4-component vector of float)
 0:132    Sequence
-0:132      'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask)
-0:133      'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask)
-0:134      'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask)
-0:135      'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask)
-0:136      'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask)
+0:132      'gl_SubgroupEqMask' ( volatile in 4-component vector of uint SubgroupEqMask)
+0:133      'gl_SubgroupGeMask' ( volatile in 4-component vector of uint SubgroupGeMask)
+0:134      'gl_SubgroupGtMask' ( volatile in 4-component vector of uint SubgroupGtMask)
+0:135      'gl_SubgroupLeMask' ( volatile in 4-component vector of uint SubgroupLeMask)
+0:136      'gl_SubgroupLtMask' ( volatile in 4-component vector of uint SubgroupLtMask)
 0:137      subgroupBroadcast ( global 4-component vector of float)
 0:137        'f4' ( in 4-component vector of float)
 0:137        Constant:
@@ -624,15 +624,15 @@
 0:247    Sequence
 0:247      'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV)
 0:248      'gl_SMCountNV' ( in uint SMCountNV)
-0:249      'gl_WarpIDNV' ( in uint WarpIDNV)
-0:250      'gl_SMIDNV' ( in uint SMIDNV)
+0:249      'gl_WarpIDNV' ( volatile in uint WarpIDNV)
+0:250      'gl_SMIDNV' ( volatile in uint SMIDNV)
 0:257  Function Definition: sm_builtins( ( global void)
 0:257    Function Parameters: 
 0:259    Sequence
 0:259      'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV)
 0:260      'gl_SMCountNV' ( in uint SMCountNV)
-0:261      'gl_WarpIDNV' ( in uint WarpIDNV)
-0:262      'gl_SMIDNV' ( in uint SMIDNV)
+0:261      'gl_WarpIDNV' ( volatile in uint WarpIDNV)
+0:262      'gl_SMIDNV' ( volatile in uint SMIDNV)
 0:?   Linker Objects
 0:?     'data0' (layout( location=0) callableDataNV 4-component vector of float)
 0:?     'anon@0' (layout( location=1) callableDataInNV block{ callableDataInNV uint data1})
diff --git a/Test/baseResults/glsl.460.subgroup.rchit.out b/Test/baseResults/glsl.460.subgroup.rchit.out
index 1ea9e69..f5083e0 100644
--- a/Test/baseResults/glsl.460.subgroup.rchit.out
+++ b/Test/baseResults/glsl.460.subgroup.rchit.out
@@ -109,8 +109,8 @@
 0:4    Function Parameters: 
 0:4      'f4' ( in 4-component vector of float)
 0:?     Sequence
-0:7      'gl_SubgroupSize' ( in uint SubgroupSize)
-0:8      'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:7      'gl_SubgroupSize' ( volatile in uint SubgroupSize)
+0:8      'gl_SubgroupInvocationID' ( volatile in uint SubgroupInvocationID)
 0:9      subgroupBarrier ( global void)
 0:10      subgroupMemoryBarrier ( global void)
 0:11      subgroupMemoryBarrierBuffer ( global void)
@@ -128,11 +128,11 @@
 0:19          false (const bool)
 0:20      subgroupAllEqual ( global bool)
 0:20        'f4' ( in 4-component vector of float)
-0:22      'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask)
-0:23      'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask)
-0:24      'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask)
-0:25      'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask)
-0:26      'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask)
+0:22      'gl_SubgroupEqMask' ( volatile in 4-component vector of uint SubgroupEqMask)
+0:23      'gl_SubgroupGeMask' ( volatile in 4-component vector of uint SubgroupGeMask)
+0:24      'gl_SubgroupGtMask' ( volatile in 4-component vector of uint SubgroupGtMask)
+0:25      'gl_SubgroupLeMask' ( volatile in 4-component vector of uint SubgroupLeMask)
+0:26      'gl_SubgroupLtMask' ( volatile in 4-component vector of uint SubgroupLtMask)
 0:27      subgroupBroadcast ( global 4-component vector of float)
 0:27        'f4' ( in 4-component vector of float)
 0:27        Constant:
@@ -425,8 +425,8 @@
 0:129  Function Definition: basic_works( ( global void)
 0:129    Function Parameters: 
 0:131    Sequence
-0:131      'gl_SubgroupSize' ( in uint SubgroupSize)
-0:132      'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:131      'gl_SubgroupSize' ( volatile in uint SubgroupSize)
+0:132      'gl_SubgroupInvocationID' ( volatile in uint SubgroupInvocationID)
 0:133      subgroupBarrier ( global void)
 0:134      subgroupMemoryBarrier ( global void)
 0:135      subgroupMemoryBarrierBuffer ( global void)
@@ -436,11 +436,11 @@
 0:141    Function Parameters: 
 0:141      'f4' ( in 4-component vector of float)
 0:142    Sequence
-0:142      'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask)
-0:143      'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask)
-0:144      'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask)
-0:145      'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask)
-0:146      'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask)
+0:142      'gl_SubgroupEqMask' ( volatile in 4-component vector of uint SubgroupEqMask)
+0:143      'gl_SubgroupGeMask' ( volatile in 4-component vector of uint SubgroupGeMask)
+0:144      'gl_SubgroupGtMask' ( volatile in 4-component vector of uint SubgroupGtMask)
+0:145      'gl_SubgroupLeMask' ( volatile in 4-component vector of uint SubgroupLeMask)
+0:146      'gl_SubgroupLtMask' ( volatile in 4-component vector of uint SubgroupLtMask)
 0:147      subgroupBroadcast ( global 4-component vector of float)
 0:147        'f4' ( in 4-component vector of float)
 0:147        Constant:
@@ -690,15 +690,15 @@
 0:257    Sequence
 0:257      'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV)
 0:258      'gl_SMCountNV' ( in uint SMCountNV)
-0:259      'gl_WarpIDNV' ( in uint WarpIDNV)
-0:260      'gl_SMIDNV' ( in uint SMIDNV)
+0:259      'gl_WarpIDNV' ( volatile in uint WarpIDNV)
+0:260      'gl_SMIDNV' ( volatile in uint SMIDNV)
 0:267  Function Definition: sm_builtins( ( global void)
 0:267    Function Parameters: 
 0:269    Sequence
 0:269      'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV)
 0:270      'gl_SMCountNV' ( in uint SMCountNV)
-0:271      'gl_WarpIDNV' ( in uint WarpIDNV)
-0:272      'gl_SMIDNV' ( in uint SMIDNV)
+0:271      'gl_WarpIDNV' ( volatile in uint WarpIDNV)
+0:272      'gl_SMIDNV' ( volatile in uint SMIDNV)
 0:?   Linker Objects
 0:?     'accNV' (layout( set=0 binding=0) uniform accelerationStructureNV)
 0:?     'localPayload' (layout( location=0) rayPayloadNV 4-component vector of float)
diff --git a/Test/baseResults/glsl.460.subgroup.rgen.out b/Test/baseResults/glsl.460.subgroup.rgen.out
index dfe1e2b..56283bb 100644
--- a/Test/baseResults/glsl.460.subgroup.rgen.out
+++ b/Test/baseResults/glsl.460.subgroup.rgen.out
@@ -109,8 +109,8 @@
 0:4    Function Parameters: 
 0:4      'f4' ( in 4-component vector of float)
 0:?     Sequence
-0:7      'gl_SubgroupSize' ( in uint SubgroupSize)
-0:8      'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:7      'gl_SubgroupSize' ( volatile in uint SubgroupSize)
+0:8      'gl_SubgroupInvocationID' ( volatile in uint SubgroupInvocationID)
 0:9      subgroupBarrier ( global void)
 0:10      subgroupMemoryBarrier ( global void)
 0:11      subgroupMemoryBarrierBuffer ( global void)
@@ -128,11 +128,11 @@
 0:19          false (const bool)
 0:20      subgroupAllEqual ( global bool)
 0:20        'f4' ( in 4-component vector of float)
-0:22      'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask)
-0:23      'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask)
-0:24      'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask)
-0:25      'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask)
-0:26      'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask)
+0:22      'gl_SubgroupEqMask' ( volatile in 4-component vector of uint SubgroupEqMask)
+0:23      'gl_SubgroupGeMask' ( volatile in 4-component vector of uint SubgroupGeMask)
+0:24      'gl_SubgroupGtMask' ( volatile in 4-component vector of uint SubgroupGtMask)
+0:25      'gl_SubgroupLeMask' ( volatile in 4-component vector of uint SubgroupLeMask)
+0:26      'gl_SubgroupLtMask' ( volatile in 4-component vector of uint SubgroupLtMask)
 0:27      subgroupBroadcast ( global 4-component vector of float)
 0:27        'f4' ( in 4-component vector of float)
 0:27        Constant:
@@ -389,8 +389,8 @@
 0:123  Function Definition: basic_works( ( global void)
 0:123    Function Parameters: 
 0:125    Sequence
-0:125      'gl_SubgroupSize' ( in uint SubgroupSize)
-0:126      'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:125      'gl_SubgroupSize' ( volatile in uint SubgroupSize)
+0:126      'gl_SubgroupInvocationID' ( volatile in uint SubgroupInvocationID)
 0:127      subgroupBarrier ( global void)
 0:128      subgroupMemoryBarrier ( global void)
 0:129      subgroupMemoryBarrierBuffer ( global void)
@@ -400,11 +400,11 @@
 0:135    Function Parameters: 
 0:135      'f4' ( in 4-component vector of float)
 0:136    Sequence
-0:136      'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask)
-0:137      'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask)
-0:138      'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask)
-0:139      'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask)
-0:140      'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask)
+0:136      'gl_SubgroupEqMask' ( volatile in 4-component vector of uint SubgroupEqMask)
+0:137      'gl_SubgroupGeMask' ( volatile in 4-component vector of uint SubgroupGeMask)
+0:138      'gl_SubgroupGtMask' ( volatile in 4-component vector of uint SubgroupGtMask)
+0:139      'gl_SubgroupLeMask' ( volatile in 4-component vector of uint SubgroupLeMask)
+0:140      'gl_SubgroupLtMask' ( volatile in 4-component vector of uint SubgroupLtMask)
 0:141      subgroupBroadcast ( global 4-component vector of float)
 0:141        'f4' ( in 4-component vector of float)
 0:141        Constant:
@@ -654,15 +654,15 @@
 0:251    Sequence
 0:251      'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV)
 0:252      'gl_SMCountNV' ( in uint SMCountNV)
-0:253      'gl_WarpIDNV' ( in uint WarpIDNV)
-0:254      'gl_SMIDNV' ( in uint SMIDNV)
+0:253      'gl_WarpIDNV' ( volatile in uint WarpIDNV)
+0:254      'gl_SMIDNV' ( volatile in uint SMIDNV)
 0:261  Function Definition: sm_builtins( ( global void)
 0:261    Function Parameters: 
 0:263    Sequence
 0:263      'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV)
 0:264      'gl_SMCountNV' ( in uint SMCountNV)
-0:265      'gl_WarpIDNV' ( in uint WarpIDNV)
-0:266      'gl_SMIDNV' ( in uint SMIDNV)
+0:265      'gl_WarpIDNV' ( volatile in uint WarpIDNV)
+0:266      'gl_SMIDNV' ( volatile in uint SMIDNV)
 0:?   Linker Objects
 0:?     'accNV0' (layout( set=0 binding=0) uniform accelerationStructureNV)
 0:?     'accNV1' (layout( set=0 binding=1) uniform accelerationStructureNV)
diff --git a/Test/baseResults/glsl.460.subgroup.rint.out b/Test/baseResults/glsl.460.subgroup.rint.out
index 9915ecf..a7de7d3 100644
--- a/Test/baseResults/glsl.460.subgroup.rint.out
+++ b/Test/baseResults/glsl.460.subgroup.rint.out
@@ -109,8 +109,8 @@
 0:5    Function Parameters: 
 0:5      'f4' ( in 4-component vector of float)
 0:?     Sequence
-0:8      'gl_SubgroupSize' ( in uint SubgroupSize)
-0:9      'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:8      'gl_SubgroupSize' ( volatile in uint SubgroupSize)
+0:9      'gl_SubgroupInvocationID' ( volatile in uint SubgroupInvocationID)
 0:10      subgroupBarrier ( global void)
 0:11      subgroupMemoryBarrier ( global void)
 0:12      subgroupMemoryBarrierBuffer ( global void)
@@ -128,11 +128,11 @@
 0:20          false (const bool)
 0:21      subgroupAllEqual ( global bool)
 0:21        'f4' ( in 4-component vector of float)
-0:23      'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask)
-0:24      'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask)
-0:25      'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask)
-0:26      'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask)
-0:27      'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask)
+0:23      'gl_SubgroupEqMask' ( volatile in 4-component vector of uint SubgroupEqMask)
+0:24      'gl_SubgroupGeMask' ( volatile in 4-component vector of uint SubgroupGeMask)
+0:25      'gl_SubgroupGtMask' ( volatile in 4-component vector of uint SubgroupGtMask)
+0:26      'gl_SubgroupLeMask' ( volatile in 4-component vector of uint SubgroupLeMask)
+0:27      'gl_SubgroupLtMask' ( volatile in 4-component vector of uint SubgroupLtMask)
 0:28      subgroupBroadcast ( global 4-component vector of float)
 0:28        'f4' ( in 4-component vector of float)
 0:28        Constant:
@@ -403,8 +403,8 @@
 0:129  Function Definition: basic_works( ( global void)
 0:129    Function Parameters: 
 0:131    Sequence
-0:131      'gl_SubgroupSize' ( in uint SubgroupSize)
-0:132      'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:131      'gl_SubgroupSize' ( volatile in uint SubgroupSize)
+0:132      'gl_SubgroupInvocationID' ( volatile in uint SubgroupInvocationID)
 0:133      subgroupBarrier ( global void)
 0:134      subgroupMemoryBarrier ( global void)
 0:135      subgroupMemoryBarrierBuffer ( global void)
@@ -414,11 +414,11 @@
 0:141    Function Parameters: 
 0:141      'f4' ( in 4-component vector of float)
 0:142    Sequence
-0:142      'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask)
-0:143      'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask)
-0:144      'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask)
-0:145      'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask)
-0:146      'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask)
+0:142      'gl_SubgroupEqMask' ( volatile in 4-component vector of uint SubgroupEqMask)
+0:143      'gl_SubgroupGeMask' ( volatile in 4-component vector of uint SubgroupGeMask)
+0:144      'gl_SubgroupGtMask' ( volatile in 4-component vector of uint SubgroupGtMask)
+0:145      'gl_SubgroupLeMask' ( volatile in 4-component vector of uint SubgroupLeMask)
+0:146      'gl_SubgroupLtMask' ( volatile in 4-component vector of uint SubgroupLtMask)
 0:147      subgroupBroadcast ( global 4-component vector of float)
 0:147        'f4' ( in 4-component vector of float)
 0:147        Constant:
@@ -668,15 +668,15 @@
 0:257    Sequence
 0:257      'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV)
 0:258      'gl_SMCountNV' ( in uint SMCountNV)
-0:259      'gl_WarpIDNV' ( in uint WarpIDNV)
-0:260      'gl_SMIDNV' ( in uint SMIDNV)
+0:259      'gl_WarpIDNV' ( volatile in uint WarpIDNV)
+0:260      'gl_SMIDNV' ( volatile in uint SMIDNV)
 0:267  Function Definition: sm_builtins( ( global void)
 0:267    Function Parameters: 
 0:269    Sequence
 0:269      'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV)
 0:270      'gl_SMCountNV' ( in uint SMCountNV)
-0:271      'gl_WarpIDNV' ( in uint WarpIDNV)
-0:272      'gl_SMIDNV' ( in uint SMIDNV)
+0:271      'gl_WarpIDNV' ( volatile in uint WarpIDNV)
+0:272      'gl_SMIDNV' ( volatile in uint SMIDNV)
 0:?   Linker Objects
 0:?     'iAttr' ( hitAttributeNV 4-component vector of float)
 
diff --git a/Test/baseResults/glsl.460.subgroup.rmiss.out b/Test/baseResults/glsl.460.subgroup.rmiss.out
index ddf7d1b..865d88c 100644
--- a/Test/baseResults/glsl.460.subgroup.rmiss.out
+++ b/Test/baseResults/glsl.460.subgroup.rmiss.out
@@ -109,8 +109,8 @@
 0:5    Function Parameters: 
 0:5      'f4' ( in 4-component vector of float)
 0:?     Sequence
-0:8      'gl_SubgroupSize' ( in uint SubgroupSize)
-0:9      'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:8      'gl_SubgroupSize' ( volatile in uint SubgroupSize)
+0:9      'gl_SubgroupInvocationID' ( volatile in uint SubgroupInvocationID)
 0:10      subgroupBarrier ( global void)
 0:11      subgroupMemoryBarrier ( global void)
 0:12      subgroupMemoryBarrierBuffer ( global void)
@@ -128,11 +128,11 @@
 0:20          false (const bool)
 0:21      subgroupAllEqual ( global bool)
 0:21        'f4' ( in 4-component vector of float)
-0:23      'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask)
-0:24      'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask)
-0:25      'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask)
-0:26      'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask)
-0:27      'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask)
+0:23      'gl_SubgroupEqMask' ( volatile in 4-component vector of uint SubgroupEqMask)
+0:24      'gl_SubgroupGeMask' ( volatile in 4-component vector of uint SubgroupGeMask)
+0:25      'gl_SubgroupGtMask' ( volatile in 4-component vector of uint SubgroupGtMask)
+0:26      'gl_SubgroupLeMask' ( volatile in 4-component vector of uint SubgroupLeMask)
+0:27      'gl_SubgroupLtMask' ( volatile in 4-component vector of uint SubgroupLtMask)
 0:28      subgroupBroadcast ( global 4-component vector of float)
 0:28        'f4' ( in 4-component vector of float)
 0:28        Constant:
@@ -397,8 +397,8 @@
 0:123  Function Definition: basic_works( ( global void)
 0:123    Function Parameters: 
 0:125    Sequence
-0:125      'gl_SubgroupSize' ( in uint SubgroupSize)
-0:126      'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:125      'gl_SubgroupSize' ( volatile in uint SubgroupSize)
+0:126      'gl_SubgroupInvocationID' ( volatile in uint SubgroupInvocationID)
 0:127      subgroupBarrier ( global void)
 0:128      subgroupMemoryBarrier ( global void)
 0:129      subgroupMemoryBarrierBuffer ( global void)
@@ -408,11 +408,11 @@
 0:135    Function Parameters: 
 0:135      'f4' ( in 4-component vector of float)
 0:136    Sequence
-0:136      'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask)
-0:137      'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask)
-0:138      'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask)
-0:139      'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask)
-0:140      'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask)
+0:136      'gl_SubgroupEqMask' ( volatile in 4-component vector of uint SubgroupEqMask)
+0:137      'gl_SubgroupGeMask' ( volatile in 4-component vector of uint SubgroupGeMask)
+0:138      'gl_SubgroupGtMask' ( volatile in 4-component vector of uint SubgroupGtMask)
+0:139      'gl_SubgroupLeMask' ( volatile in 4-component vector of uint SubgroupLeMask)
+0:140      'gl_SubgroupLtMask' ( volatile in 4-component vector of uint SubgroupLtMask)
 0:141      subgroupBroadcast ( global 4-component vector of float)
 0:141        'f4' ( in 4-component vector of float)
 0:141        Constant:
@@ -662,15 +662,15 @@
 0:251    Sequence
 0:251      'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV)
 0:252      'gl_SMCountNV' ( in uint SMCountNV)
-0:253      'gl_WarpIDNV' ( in uint WarpIDNV)
-0:254      'gl_SMIDNV' ( in uint SMIDNV)
+0:253      'gl_WarpIDNV' ( volatile in uint WarpIDNV)
+0:254      'gl_SMIDNV' ( volatile in uint SMIDNV)
 0:261  Function Definition: sm_builtins( ( global void)
 0:261    Function Parameters: 
 0:263    Sequence
 0:263      'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV)
 0:264      'gl_SMCountNV' ( in uint SMCountNV)
-0:265      'gl_WarpIDNV' ( in uint WarpIDNV)
-0:266      'gl_SMIDNV' ( in uint SMIDNV)
+0:265      'gl_WarpIDNV' ( volatile in uint WarpIDNV)
+0:266      'gl_SMIDNV' ( volatile in uint SMIDNV)
 0:?   Linker Objects
 0:?     'accNV' (layout( set=0 binding=0) uniform accelerationStructureNV)
 0:?     'localPayload' (layout( location=0) rayPayloadNV 4-component vector of float)
diff --git a/Test/baseResults/hlsl.earlydepthstencil.frag.out b/Test/baseResults/hlsl.earlydepthstencil.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/hlsl.printf.comp.out b/Test/baseResults/hlsl.printf.comp.out
new file mode 100644
index 0000000..ea31c35
--- /dev/null
+++ b/Test/baseResults/hlsl.printf.comp.out
@@ -0,0 +1,178 @@
+hlsl.printf.comp
+Shader version: 500
+local_size = (1, 1, 1)
+0:? Sequence
+0:4  Function Definition: @main( ( temp void)
+0:4    Function Parameters: 
+0:?     Sequence
+0:5      Debug printf ( temp void)
+0:5        Constant:
+0:5          "first string"
+0:6      Debug printf ( temp void)
+0:6        Constant:
+0:6          "please print this message."
+0:7      Debug printf ( temp void)
+0:7        Constant:
+0:7          "Variables are: %d %d %.2f"
+0:7        Constant:
+0:7          1 (const uint)
+0:7        Constant:
+0:7          2 (const uint)
+0:7        Constant:
+0:7          1.500000
+0:8      Debug printf ( temp void)
+0:8        Constant:
+0:8          "Integers are: %d %d %d"
+0:8        Constant:
+0:8          1 (const int)
+0:8        Constant:
+0:8          2 (const int)
+0:8        Constant:
+0:8          3 (const int)
+0:9      Debug printf ( temp void)
+0:9        Constant:
+0:9          "More: %d %d %d %d %d %d %d %d %d %d"
+0:9        Constant:
+0:9          1 (const int)
+0:9        Constant:
+0:9          2 (const int)
+0:9        Constant:
+0:9          3 (const int)
+0:9        Constant:
+0:9          4 (const int)
+0:9        Constant:
+0:9          5 (const int)
+0:9        Constant:
+0:9          6 (const int)
+0:9        Constant:
+0:9          7 (const int)
+0:9        Constant:
+0:9          8 (const int)
+0:9        Constant:
+0:9          9 (const int)
+0:9        Constant:
+0:9          10 (const int)
+0:4  Function Definition: main( ( temp void)
+0:4    Function Parameters: 
+0:?     Sequence
+0:4      Function Call: @main( ( temp void)
+0:?   Linker Objects
+0:?     'first' ( const string)
+0:?       "first string"
+
+
+Linked compute stage:
+
+
+Shader version: 500
+local_size = (1, 1, 1)
+0:? Sequence
+0:4  Function Definition: @main( ( temp void)
+0:4    Function Parameters: 
+0:?     Sequence
+0:5      Debug printf ( temp void)
+0:5        Constant:
+0:5          "first string"
+0:6      Debug printf ( temp void)
+0:6        Constant:
+0:6          "please print this message."
+0:7      Debug printf ( temp void)
+0:7        Constant:
+0:7          "Variables are: %d %d %.2f"
+0:7        Constant:
+0:7          1 (const uint)
+0:7        Constant:
+0:7          2 (const uint)
+0:7        Constant:
+0:7          1.500000
+0:8      Debug printf ( temp void)
+0:8        Constant:
+0:8          "Integers are: %d %d %d"
+0:8        Constant:
+0:8          1 (const int)
+0:8        Constant:
+0:8          2 (const int)
+0:8        Constant:
+0:8          3 (const int)
+0:9      Debug printf ( temp void)
+0:9        Constant:
+0:9          "More: %d %d %d %d %d %d %d %d %d %d"
+0:9        Constant:
+0:9          1 (const int)
+0:9        Constant:
+0:9          2 (const int)
+0:9        Constant:
+0:9          3 (const int)
+0:9        Constant:
+0:9          4 (const int)
+0:9        Constant:
+0:9          5 (const int)
+0:9        Constant:
+0:9          6 (const int)
+0:9        Constant:
+0:9          7 (const int)
+0:9        Constant:
+0:9          8 (const int)
+0:9        Constant:
+0:9          9 (const int)
+0:9        Constant:
+0:9          10 (const int)
+0:4  Function Definition: main( ( temp void)
+0:4    Function Parameters: 
+0:?     Sequence
+0:4      Function Call: @main( ( temp void)
+0:?   Linker Objects
+0:?     'first' ( const string)
+0:?       "first string"
+
+// Module Version 10000
+// Generated by (magic number): 8000a
+// Id's are bound by 36
+
+                              Capability Shader
+                              Extension  "SPV_KHR_non_semantic_info"
+               1:             ExtInstImport  "GLSL.std.450"
+               9:             ExtInstImport  "NonSemantic.DebugPrintf"
+                              MemoryModel Logical GLSL450
+                              EntryPoint GLCompute 4  "main"
+                              ExecutionMode 4 LocalSize 1 1 1
+               8:             String  "first string"
+              11:             String  "please print this message."
+              13:             String  "Variables are: %d %d %.2f"
+              20:             String  "Integers are: %d %d %d"
+              26:             String  "More: %d %d %d %d %d %d %d %d %d %d"
+                              Source HLSL 500
+                              Name 4  "main"
+                              Name 6  "@main("
+               2:             TypeVoid
+               3:             TypeFunction 2
+              14:             TypeInt 32 0
+              15:     14(int) Constant 1
+              16:     14(int) Constant 2
+              17:             TypeFloat 32
+              18:   17(float) Constant 1069547520
+              21:             TypeInt 32 1
+              22:     21(int) Constant 1
+              23:     21(int) Constant 2
+              24:     21(int) Constant 3
+              27:     21(int) Constant 4
+              28:     21(int) Constant 5
+              29:     21(int) Constant 6
+              30:     21(int) Constant 7
+              31:     21(int) Constant 8
+              32:     21(int) Constant 9
+              33:     21(int) Constant 10
+         4(main):           2 Function None 3
+               5:             Label
+              35:           2 FunctionCall 6(@main()
+                              Return
+                              FunctionEnd
+       6(@main():           2 Function None 3
+               7:             Label
+              10:           2 ExtInst 9(NonSemantic.DebugPrintf) 1(DebugPrintf) 8
+              12:           2 ExtInst 9(NonSemantic.DebugPrintf) 1(DebugPrintf) 11
+              19:           2 ExtInst 9(NonSemantic.DebugPrintf) 1(DebugPrintf) 13 15 16 18
+              25:           2 ExtInst 9(NonSemantic.DebugPrintf) 1(DebugPrintf) 20 22 23 24
+              34:           2 ExtInst 9(NonSemantic.DebugPrintf) 1(DebugPrintf) 26 22 23 24 27 28 29 30 31 32 33
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.singleArgIntPromo.vert.out b/Test/baseResults/hlsl.singleArgIntPromo.vert.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/hlsl.specConstant.frag.out b/Test/baseResults/hlsl.specConstant.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/hlsl.structbuffer.append.fn.frag.out b/Test/baseResults/hlsl.structbuffer.append.fn.frag.out
index 6a239da..2ac904e 100644
--- a/Test/baseResults/hlsl.structbuffer.append.fn.frag.out
+++ b/Test/baseResults/hlsl.structbuffer.append.fn.frag.out
@@ -190,13 +190,13 @@
                               Decorate 9 BufferBlock
                               Decorate 12 BufferBlock
                               Decorate 49(sbuf_a) DescriptorSet 0
-                              Decorate 49(sbuf_a) Binding 4
+                              Decorate 49(sbuf_a) Binding 0
                               Decorate 50(sbuf_a@count) DescriptorSet 0
-                              Decorate 50(sbuf_a@count) Binding 6
+                              Decorate 50(sbuf_a@count) Binding 0
                               Decorate 51(sbuf_c) DescriptorSet 0
-                              Decorate 51(sbuf_c) Binding 5
+                              Decorate 51(sbuf_c) Binding 1
                               Decorate 52(sbuf_c@count) DescriptorSet 0
-                              Decorate 52(sbuf_c@count) Binding 7
+                              Decorate 52(sbuf_c@count) Binding 0
                               Decorate 58(pos) Flat
                               Decorate 58(pos) Location 0
                               Decorate 61(@entryPointOutput) Location 0
diff --git a/Test/baseResults/hlsl.structbuffer.fn.frag.out b/Test/baseResults/hlsl.structbuffer.fn.frag.out
index c5afd35..bd2a4e6 100644
--- a/Test/baseResults/hlsl.structbuffer.fn.frag.out
+++ b/Test/baseResults/hlsl.structbuffer.fn.frag.out
@@ -191,9 +191,9 @@
                               Decorate 18 BufferBlock
                               Decorate 20 BufferBlock
                               Decorate 47(sbuf2) DescriptorSet 0
-                              Decorate 47(sbuf2) Binding 2
+                              Decorate 47(sbuf2) Binding 0
                               Decorate 48(sbuf2@count) DescriptorSet 0
-                              Decorate 48(sbuf2@count) Binding 3
+                              Decorate 48(sbuf2@count) Binding 0
                               Decorate 50(sbuf) DescriptorSet 0
                               Decorate 50(sbuf) Binding 10
                               Decorate 63(pos) Flat
diff --git a/Test/baseResults/link.multiAnonBlocksInvalid.0.0.vert.out b/Test/baseResults/link.multiAnonBlocksInvalid.0.0.vert.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/link.multiAnonBlocksValid.0.0.vert.out b/Test/baseResults/link.multiAnonBlocksValid.0.0.vert.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/link.multiBlocksInvalid.0.0.vert.out b/Test/baseResults/link.multiBlocksInvalid.0.0.vert.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/link.multiBlocksValid.1.0.vert.out b/Test/baseResults/link.multiBlocksValid.1.0.vert.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/link.vk.differentPC.0.0.frag.out b/Test/baseResults/link.vk.differentPC.0.0.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/link.vk.differentPC.1.0.frag.out b/Test/baseResults/link.vk.differentPC.1.0.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/link.vk.matchingPC.0.0.frag.out b/Test/baseResults/link.vk.matchingPC.0.0.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/link.vk.multiBlocksValid.0.0.vert.out b/Test/baseResults/link.vk.multiBlocksValid.0.0.vert.out
old mode 100755
new mode 100644
index ddb856d..bdabab1
--- a/Test/baseResults/link.vk.multiBlocksValid.0.0.vert.out
+++ b/Test/baseResults/link.vk.multiBlocksValid.0.0.vert.out
@@ -211,7 +211,7 @@
                               Name 70  "BufferBlock"
                               MemberName 70(BufferBlock) 0  "p"
                               Name 72  "uBuf"
-                              Decorate 14(oColor) Location 4
+                              Decorate 14(oColor) Location 2
                               MemberDecorate 16(ColorBlock) 0 Offset 0
                               MemberDecorate 16(ColorBlock) 1 Offset 16
                               MemberDecorate 16(ColorBlock) 2 Offset 32
@@ -224,7 +224,7 @@
                               Decorate 28(uColorBuf) DescriptorSet 0
                               Decorate 28(uColorBuf) Binding 0
                               Decorate 32(Vertex) Block
-                              Decorate 34(oV) Location 2
+                              Decorate 34(oV) Location 0
                               MemberDecorate 40(gl_PerVertex) 0 BuiltIn Position
                               MemberDecorate 40(gl_PerVertex) 1 BuiltIn PointSize
                               MemberDecorate 40(gl_PerVertex) 2 BuiltIn ClipDistance
diff --git a/Test/baseResults/link.vk.multiBlocksValid.1.0.geom.out b/Test/baseResults/link.vk.multiBlocksValid.1.0.geom.out
old mode 100755
new mode 100644
index 63be728..c0b33b7
--- a/Test/baseResults/link.vk.multiBlocksValid.1.0.geom.out
+++ b/Test/baseResults/link.vk.multiBlocksValid.1.0.geom.out
@@ -304,7 +304,7 @@
                               MemberName 95(BufferBlock) 0  "p"
                               Name 97  "uBuf"
                               Name 100  "P"
-                              Decorate 18(oColor) Location 2
+                              Decorate 18(oColor) Location 1
                               MemberDecorate 20(ColorBlock) 0 Offset 0
                               MemberDecorate 20(ColorBlock) 1 Offset 16
                               MemberDecorate 20(ColorBlock) 2 Offset 32
@@ -326,16 +326,16 @@
                               Decorate 50(uM) DescriptorSet 0
                               Decorate 50(uM) Binding 0
                               Decorate 59(Vertex) Block
-                              Decorate 61(oV) Location 1
+                              Decorate 61(oV) Location 0
                               Decorate 64(Vertex) Block
-                              Decorate 68(iV) Location 0
+                              Decorate 68(iV) Location 1
                               MemberDecorate 95(BufferBlock) 0 ColMajor
                               MemberDecorate 95(BufferBlock) 0 Offset 0
                               MemberDecorate 95(BufferBlock) 0 MatrixStride 16
                               Decorate 95(BufferBlock) BufferBlock
                               Decorate 97(uBuf) DescriptorSet 0
                               Decorate 97(uBuf) Binding 1
-                              Decorate 100(P) Location 4
+                              Decorate 100(P) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/link.vk.pcNamingInvalid.0.0.vert.out b/Test/baseResults/link.vk.pcNamingInvalid.0.0.vert.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/link.vk.pcNamingValid.0.0.vert.out b/Test/baseResults/link.vk.pcNamingValid.0.0.vert.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/numeral.frag.out b/Test/baseResults/numeral.frag.out
index b7c0a78..e2a7c64 100644
--- a/Test/baseResults/numeral.frag.out
+++ b/Test/baseResults/numeral.frag.out
@@ -12,7 +12,7 @@
 ERROR: 0:98: '' : numeric literal too big 
 ERROR: 0:101: '' : numeric literal too big 
 ERROR: 0:104: '#' : preprocessor directive cannot be preceded by another token 
-ERROR: 0:104: '' :  syntax error, unexpected $end, expecting COMMA or SEMICOLON
+ERROR: 0:104: '' :  syntax error, unexpected end of file, expecting COMMA or SEMICOLON
 ERROR: 14 compilation errors.  No code generated.
 
 
diff --git a/Test/baseResults/rayQuery-allOps.comp.out b/Test/baseResults/rayQuery-allOps.comp.out
index c0cc8aa..fd4a2ff 100644
--- a/Test/baseResults/rayQuery-allOps.comp.out
+++ b/Test/baseResults/rayQuery-allOps.comp.out
@@ -4,8 +4,8 @@
 // Id's are bound by 258
 
                               Capability Shader
-                              Capability RayQueryProvisionalKHR
-                              Capability RayTraversalPrimitiveCullingProvisionalKHR
+                              Capability RayQueryKHR
+                              Capability RayTraversalPrimitiveCullingKHR
                               Extension  "SPV_KHR_ray_query"
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
@@ -86,8 +86,9 @@
               35:             TypePointer Function 8(float)
               37:     18(int) Constant 3
               38:    8(float) Constant 1176255488
-              45:             TypeRayQueryProvisionalKHR
-              46:             TypePointer Function 45
+              45:             TypeRayQueryKHR
+              46:             TypePointer Private 45
+    47(rayQuery):     46(ptr) Variable Private
               48:             TypeAccelerationStructureKHR
               49:             TypePointer UniformConstant 48
         50(rtas):     49(ptr) Variable UniformConstant
@@ -114,7 +115,6 @@
          4(main):           2 Function None 3
                5:             Label
          43(ray):     25(ptr) Variable Function
-    47(rayQuery):     46(ptr) Variable Function
 69(candidateType):     68(ptr) Variable Function
      78(_mat4x3):     77(ptr) Variable Function
      83(_mat3x4):     82(ptr) Variable Function
diff --git a/Test/baseResults/rayQuery-allOps.frag.out b/Test/baseResults/rayQuery-allOps.frag.out
index 8182da3..573a640 100644
--- a/Test/baseResults/rayQuery-allOps.frag.out
+++ b/Test/baseResults/rayQuery-allOps.frag.out
@@ -4,7 +4,7 @@
 // Id's are bound by 257
 
                               Capability Shader
-                              Capability RayQueryProvisionalKHR
+                              Capability RayQueryKHR
                               Extension  "SPV_KHR_ray_query"
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
@@ -85,8 +85,9 @@
               35:             TypePointer Function 8(float)
               37:     18(int) Constant 3
               38:    8(float) Constant 1176255488
-              45:             TypeRayQueryProvisionalKHR
-              46:             TypePointer Function 45
+              45:             TypeRayQueryKHR
+              46:             TypePointer Private 45
+    47(rayQuery):     46(ptr) Variable Private
               48:             TypeAccelerationStructureKHR
               49:             TypePointer UniformConstant 48
         50(rtas):     49(ptr) Variable UniformConstant
@@ -112,7 +113,6 @@
          4(main):           2 Function None 3
                5:             Label
          43(ray):     25(ptr) Variable Function
-    47(rayQuery):     46(ptr) Variable Function
 69(candidateType):     68(ptr) Variable Function
      78(_mat4x3):     77(ptr) Variable Function
      83(_mat3x4):     82(ptr) Variable Function
diff --git a/Test/baseResults/rayQuery-allOps.rgen.out b/Test/baseResults/rayQuery-allOps.rgen.out
index 01b8f1d..deb0f7d 100644
--- a/Test/baseResults/rayQuery-allOps.rgen.out
+++ b/Test/baseResults/rayQuery-allOps.rgen.out
@@ -3,7 +3,7 @@
 // Generated by (magic number): 8000a
 // Id's are bound by 257
 
-                              Capability RayQueryProvisionalKHR
+                              Capability RayQueryKHR
                               Capability RayTracingNV
                               Extension  "SPV_KHR_ray_query"
                               Extension  "SPV_NV_ray_tracing"
@@ -85,8 +85,9 @@
               35:             TypePointer Function 8(float)
               37:     18(int) Constant 3
               38:    8(float) Constant 1176255488
-              45:             TypeRayQueryProvisionalKHR
-              46:             TypePointer Function 45
+              45:             TypeRayQueryKHR
+              46:             TypePointer Private 45
+    47(rayQuery):     46(ptr) Variable Private
               48:             TypeAccelerationStructureKHR
               49:             TypePointer UniformConstant 48
         50(rtas):     49(ptr) Variable UniformConstant
@@ -112,7 +113,6 @@
          4(main):           2 Function None 3
                5:             Label
          43(ray):     25(ptr) Variable Function
-    47(rayQuery):     46(ptr) Variable Function
 69(candidateType):     68(ptr) Variable Function
      78(_mat4x3):     77(ptr) Variable Function
      83(_mat3x4):     82(ptr) Variable Function
diff --git a/Test/baseResults/rayQuery-global.rgen.out b/Test/baseResults/rayQuery-global.rgen.out
new file mode 100644
index 0000000..7b05173
--- /dev/null
+++ b/Test/baseResults/rayQuery-global.rgen.out
@@ -0,0 +1,76 @@
+rayQuery-global.rgen
+// Module Version 10000
+// Generated by (magic number): 8000a
+// Id's are bound by 44
+
+                              Capability RayQueryKHR
+                              Capability RayTracingKHR
+                              Extension  "SPV_KHR_ray_query"
+                              Extension  "SPV_KHR_ray_tracing"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint RayGenerationKHR 4  "main"
+                              Source GLSL 460
+                              SourceExtension  "GL_EXT_ray_flags_primitive_culling"
+                              SourceExtension  "GL_EXT_ray_query"
+                              Name 4  "main"
+                              Name 10  "otherWrapper(rq1;"
+                              Name 9  "rq"
+                              Name 13  "wrapper(rq1;"
+                              Name 12  "rq"
+                              Name 17  "rqGlobal"
+                              Name 22  "rq2"
+                              Name 27  "rtas"
+                              Name 40  "rq2"
+                              Decorate 27(rtas) DescriptorSet 0
+                              Decorate 27(rtas) Binding 1
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeRayQueryKHR
+               7:             TypePointer Private 6
+               8:             TypeFunction 2 7(ptr)
+              15:             TypeBool
+    17(rqGlobal):      7(ptr) Variable Private
+         22(rq2):      7(ptr) Variable Private
+              25:             TypeAccelerationStructureKHR
+              26:             TypePointer UniformConstant 25
+        27(rtas):     26(ptr) Variable UniformConstant
+              29:             TypeInt 32 0
+              30:     29(int) Constant 0
+              31:     29(int) Constant 255
+              32:             TypeFloat 32
+              33:             TypeVector 32(float) 3
+              34:   32(float) Constant 0
+              35:   33(fvec3) ConstantComposite 34 34 34
+              36:   32(float) Constant 1065353216
+              37:   33(fvec3) ConstantComposite 36 34 34
+         40(rq2):      7(ptr) Variable Private
+         4(main):           2 Function None 3
+               5:             Label
+              28:          25 Load 27(rtas)
+                              RayQueryInitializeKHR 17(rqGlobal) 28 30 31 35 34 37 36
+              38:           2 FunctionCall 13(wrapper(rq1;) 17(rqGlobal)
+              39:           2 FunctionCall 10(otherWrapper(rq1;) 17(rqGlobal)
+              41:          25 Load 27(rtas)
+                              RayQueryInitializeKHR 40(rq2) 41 30 31 35 34 37 36
+              42:           2 FunctionCall 13(wrapper(rq1;) 40(rq2)
+              43:           2 FunctionCall 10(otherWrapper(rq1;) 40(rq2)
+                              Return
+                              FunctionEnd
+10(otherWrapper(rq1;):           2 Function None 8
+           9(rq):      7(ptr) FunctionParameter
+              11:             Label
+              16:    15(bool) RayQueryProceedKHR 9(rq)
+              18:    15(bool) RayQueryProceedKHR 17(rqGlobal)
+                              Return
+                              FunctionEnd
+13(wrapper(rq1;):           2 Function None 8
+          12(rq):      7(ptr) FunctionParameter
+              14:             Label
+              19:    15(bool) RayQueryProceedKHR 12(rq)
+              20:    15(bool) RayQueryProceedKHR 17(rqGlobal)
+              21:           2 FunctionCall 10(otherWrapper(rq1;) 12(rq)
+              23:           2 FunctionCall 10(otherWrapper(rq1;) 22(rq2)
+              24:           2 FunctionCall 10(otherWrapper(rq1;) 17(rqGlobal)
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/rayQuery-initialize.rgen.out b/Test/baseResults/rayQuery-initialize.rgen.out
index f97287f..f16facd 100644
--- a/Test/baseResults/rayQuery-initialize.rgen.out
+++ b/Test/baseResults/rayQuery-initialize.rgen.out
@@ -3,7 +3,7 @@
 // Generated by (magic number): 8000a
 // Id's are bound by 103
 
-                              Capability RayQueryProvisionalKHR
+                              Capability RayQueryKHR
                               Capability RayTracingNV
                               Extension  "SPV_KHR_ray_query"
                               Extension  "SPV_NV_ray_tracing"
@@ -55,8 +55,8 @@
                3:             TypeFunction 2
                6:             TypeInt 32 0
                7:             TypeFunction 6(int)
-              10:             TypeRayQueryProvisionalKHR
-              11:             TypePointer Function 10
+              10:             TypeRayQueryKHR
+              11:             TypePointer Private 10
               12:             TypeFloat 32
               13:             TypeVector 12(float) 3
          14(Ray):             TypeStruct 13(fvec3) 12(float) 13(fvec3) 12(float)
@@ -88,12 +88,12 @@
               75:             TypePointer Uniform 74(Rays)
               76:     75(ptr) Variable Uniform
               78:             TypePointer Uniform 72(Ray)
+    89(rayQuery):     11(ptr) Variable Private
               94:      6(int) Constant 32
          4(main):           2 Function None 3
                5:             Label
        69(index):     68(ptr) Variable Function
          71(ray):     15(ptr) Variable Function
-    89(rayQuery):     11(ptr) Variable Function
        90(param):     15(ptr) Variable Function
               70:      6(int) FunctionCall 8(launchIndex()
                               Store 69(index) 70
diff --git a/Test/baseResults/rayQuery-no-cse.rgen.out b/Test/baseResults/rayQuery-no-cse.rgen.out
index 23c8b51..a44c41f 100644
--- a/Test/baseResults/rayQuery-no-cse.rgen.out
+++ b/Test/baseResults/rayQuery-no-cse.rgen.out
@@ -3,7 +3,7 @@
 // Generated by (magic number): 8000a
 // Id's are bound by 107
 
-                              Capability RayQueryProvisionalKHR
+                              Capability RayQueryKHR
                               Capability RayTracingNV
                               Extension  "SPV_KHR_ray_query"
                               Extension  "SPV_NV_ray_tracing"
@@ -57,8 +57,8 @@
                3:             TypeFunction 2
                6:             TypeInt 32 0
                7:             TypeFunction 6(int)
-              10:             TypeRayQueryProvisionalKHR
-              11:             TypePointer Function 10
+              10:             TypeRayQueryKHR
+              11:             TypePointer Private 10
               12:             TypeFloat 32
               13:             TypeVector 12(float) 3
          14(Ray):             TypeStruct 13(fvec3) 12(float) 13(fvec3) 12(float)
@@ -90,14 +90,14 @@
               75:             TypePointer Uniform 74(Rays)
               76:     75(ptr) Variable Uniform
               78:             TypePointer Uniform 72(Ray)
+   89(rayQuery1):     11(ptr) Variable Private
               94:      6(int) Constant 32
+  103(rayQuery2):     11(ptr) Variable Private
          4(main):           2 Function None 3
                5:             Label
        69(index):     68(ptr) Variable Function
          71(ray):     15(ptr) Variable Function
-   89(rayQuery1):     11(ptr) Variable Function
        90(param):     15(ptr) Variable Function
-  103(rayQuery2):     11(ptr) Variable Function
       104(param):     15(ptr) Variable Function
               70:      6(int) FunctionCall 8(launchIndex()
                               Store 69(index) 70
diff --git a/Test/baseResults/rayQuery.rgen.out b/Test/baseResults/rayQuery.rgen.out
index bf142a3..80e9916 100644
--- a/Test/baseResults/rayQuery.rgen.out
+++ b/Test/baseResults/rayQuery.rgen.out
@@ -3,7 +3,7 @@
 // Generated by (magic number): 8000a
 // Id's are bound by 44
 
-                              Capability RayQueryProvisionalKHR
+                              Capability RayQueryKHR
                               Capability RayTracingNV
                               Extension  "SPV_KHR_ray_query"
                               Extension  "SPV_NV_ray_tracing"
@@ -39,8 +39,9 @@
               11:             TypePointer Function 10(float)
               13:   10(float) Constant 0
               15:   10(float) Constant 1148846080
-              16:             TypeRayQueryProvisionalKHR
-              17:             TypePointer Function 16
+              16:             TypeRayQueryKHR
+              17:             TypePointer Private 16
+18(localRayQuery):     17(ptr) Variable Private
               19:             TypeAccelerationStructureKHR
               20:             TypePointer UniformConstant 19
         21(acc0):     20(ptr) Variable UniformConstant
@@ -59,7 +60,6 @@
      8(rayFlags):      7(ptr) Variable Function
         12(tMin):     11(ptr) Variable Function
         14(tMax):     11(ptr) Variable Function
-18(localRayQuery):     17(ptr) Variable Function
                               Store 8(rayFlags) 9
                               Store 12(tMin) 13
                               Store 14(tMax) 15
diff --git a/Test/baseResults/spv.1.4.NonWritable.frag.out b/Test/baseResults/spv.1.4.NonWritable.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/spv.1.4.OpEntryPoint.opaqueParams.vert.out b/Test/baseResults/spv.1.4.OpEntryPoint.opaqueParams.vert.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/spv.1.4.OpSelect.frag.out b/Test/baseResults/spv.1.4.OpSelect.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/spv.1.4.image.frag.out b/Test/baseResults/spv.1.4.image.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/spv.1.4.sparseTexture.frag.out b/Test/baseResults/spv.1.4.sparseTexture.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/spv.1.4.texture.frag.out b/Test/baseResults/spv.1.4.texture.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/spv.AnyHitShader.rahit.out b/Test/baseResults/spv.AnyHitShader.rahit.out
index 755d60e..c893f88 100644
--- a/Test/baseResults/spv.AnyHitShader.rahit.out
+++ b/Test/baseResults/spv.AnyHitShader.rahit.out
@@ -53,7 +53,7 @@
                               Decorate 42(gl_ObjectRayDirectionNV) BuiltIn ObjectRayDirectionKHR
                               Decorate 47(gl_RayTminNV) BuiltIn RayTminKHR
                               Decorate 50(gl_RayTmaxNV) BuiltIn RayTmaxKHR
-                              Decorate 53(gl_HitTNV) BuiltIn HitTKHR
+                              Decorate 53(gl_HitTNV) BuiltIn HitTNV
                               Decorate 58(gl_HitKindNV) BuiltIn HitKindKHR
                               Decorate 64(gl_ObjectToWorldNV) BuiltIn ObjectToWorldKHR
                               Decorate 67(gl_WorldToObjectNV) BuiltIn WorldToObjectKHR
@@ -153,10 +153,10 @@
                               SelectionMerge 79 None
                               BranchConditional 77 78 80
               78:               Label
-                                IgnoreIntersectionKHR
+                                IgnoreIntersectionNV
                                 Branch 79
               80:               Label
-                                TerminateRayKHR
+                                TerminateRayNV
                                 Branch 79
               79:             Label
                               Return
diff --git a/Test/baseResults/spv.ClosestHitShader.rchit.out b/Test/baseResults/spv.ClosestHitShader.rchit.out
index 63039dd..b76629c 100644
--- a/Test/baseResults/spv.ClosestHitShader.rchit.out
+++ b/Test/baseResults/spv.ClosestHitShader.rchit.out
@@ -55,7 +55,7 @@
                               Decorate 42(gl_ObjectRayDirectionNV) BuiltIn ObjectRayDirectionKHR
                               Decorate 47(gl_RayTminNV) BuiltIn RayTminKHR
                               Decorate 50(gl_RayTmaxNV) BuiltIn RayTmaxKHR
-                              Decorate 53(gl_HitTNV) BuiltIn HitTKHR
+                              Decorate 53(gl_HitTNV) BuiltIn HitTNV
                               Decorate 58(gl_HitKindNV) BuiltIn HitKindKHR
                               Decorate 64(gl_ObjectToWorldNV) BuiltIn ObjectToWorldKHR
                               Decorate 67(gl_WorldToObjectNV) BuiltIn WorldToObjectKHR
@@ -164,6 +164,6 @@
               68:          60 Load 67(gl_WorldToObjectNV)
                               Store 66(v14) 68
               72:          69 Load 71(accNV)
-                              TraceRayKHR 72 73 74 75 76 73 78 77 80 81 82
+                              TraceNV 72 73 74 75 76 73 78 77 80 81 82
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.MissShader.rmiss.out b/Test/baseResults/spv.MissShader.rmiss.out
index d0eeb01..e573bba 100644
--- a/Test/baseResults/spv.MissShader.rmiss.out
+++ b/Test/baseResults/spv.MissShader.rmiss.out
@@ -1,13 +1,13 @@
 spv.MissShader.rmiss
 // Module Version 10000
 // Generated by (magic number): 8000a
-// Id's are bound by 60
+// Id's are bound by 59
 
                               Capability RayTracingNV
                               Extension  "SPV_NV_ray_tracing"
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint MissKHR 4  "main" 11 14 21 24 27 30 35 38
+                              EntryPoint MissKHR 4  "main" 11 14 21 24 29 34 37
                               Source GLSL 460
                               SourceExtension  "GL_NV_ray_tracing"
                               Name 4  "main"
@@ -19,29 +19,26 @@
                               Name 21  "gl_WorldRayOriginNV"
                               Name 23  "v3"
                               Name 24  "gl_WorldRayDirectionNV"
-                              Name 26  "v4"
-                              Name 27  "gl_ObjectRayOriginNV"
-                              Name 29  "v5"
-                              Name 30  "gl_ObjectRayDirectionNV"
-                              Name 33  "v6"
-                              Name 35  "gl_RayTminNV"
-                              Name 37  "v7"
-                              Name 38  "gl_RayTmaxNV"
-                              Name 42  "accNV"
-                              Name 57  "localPayload"
-                              Name 59  "incomingPayload"
+                              Name 27  "v4"
+                              Name 29  "gl_IncomingRayFlagsNV"
+                              Name 32  "v6"
+                              Name 34  "gl_RayTminNV"
+                              Name 36  "v7"
+                              Name 37  "gl_RayTmaxNV"
+                              Name 41  "accNV"
+                              Name 56  "localPayload"
+                              Name 58  "incomingPayload"
                               Decorate 11(gl_LaunchIDNV) BuiltIn LaunchIdKHR
                               Decorate 14(gl_LaunchSizeNV) BuiltIn LaunchSizeKHR
                               Decorate 21(gl_WorldRayOriginNV) BuiltIn WorldRayOriginKHR
                               Decorate 24(gl_WorldRayDirectionNV) BuiltIn WorldRayDirectionKHR
-                              Decorate 27(gl_ObjectRayOriginNV) BuiltIn ObjectRayOriginKHR
-                              Decorate 30(gl_ObjectRayDirectionNV) BuiltIn ObjectRayDirectionKHR
-                              Decorate 35(gl_RayTminNV) BuiltIn RayTminKHR
-                              Decorate 38(gl_RayTmaxNV) BuiltIn RayTmaxKHR
-                              Decorate 42(accNV) DescriptorSet 0
-                              Decorate 42(accNV) Binding 0
-                              Decorate 57(localPayload) Location 0
-                              Decorate 59(incomingPayload) Location 1
+                              Decorate 29(gl_IncomingRayFlagsNV) BuiltIn IncomingRayFlagsKHR
+                              Decorate 34(gl_RayTminNV) BuiltIn RayTminKHR
+                              Decorate 37(gl_RayTmaxNV) BuiltIn RayTmaxKHR
+                              Decorate 41(accNV) DescriptorSet 0
+                              Decorate 41(accNV) Binding 0
+                              Decorate 56(localPayload) Location 0
+                              Decorate 58(incomingPayload) Location 1
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 0
@@ -56,41 +53,41 @@
               20:             TypePointer Input 17(fvec3)
 21(gl_WorldRayOriginNV):     20(ptr) Variable Input
 24(gl_WorldRayDirectionNV):     20(ptr) Variable Input
-27(gl_ObjectRayOriginNV):     20(ptr) Variable Input
-30(gl_ObjectRayDirectionNV):     20(ptr) Variable Input
-              32:             TypePointer Function 16(float)
-              34:             TypePointer Input 16(float)
-35(gl_RayTminNV):     34(ptr) Variable Input
-38(gl_RayTmaxNV):     34(ptr) Variable Input
-              40:             TypeAccelerationStructureKHR
-              41:             TypePointer UniformConstant 40
-       42(accNV):     41(ptr) Variable UniformConstant
-              44:      6(int) Constant 0
-              45:      6(int) Constant 1
-              46:      6(int) Constant 2
-              47:      6(int) Constant 3
-              48:   16(float) Constant 1056964608
-              49:   17(fvec3) ConstantComposite 48 48 48
-              50:   16(float) Constant 1065353216
-              51:   17(fvec3) ConstantComposite 50 50 50
-              52:   16(float) Constant 1061158912
-              53:             TypeInt 32 1
-              54:     53(int) Constant 1
-              55:             TypeVector 16(float) 4
-              56:             TypePointer RayPayloadKHR 55(fvec4)
-57(localPayload):     56(ptr) Variable RayPayloadKHR
-              58:             TypePointer IncomingRayPayloadKHR 55(fvec4)
-59(incomingPayload):     58(ptr) Variable IncomingRayPayloadKHR
+              26:             TypePointer Function 6(int)
+              28:             TypePointer Input 6(int)
+29(gl_IncomingRayFlagsNV):     28(ptr) Variable Input
+              31:             TypePointer Function 16(float)
+              33:             TypePointer Input 16(float)
+34(gl_RayTminNV):     33(ptr) Variable Input
+37(gl_RayTmaxNV):     33(ptr) Variable Input
+              39:             TypeAccelerationStructureKHR
+              40:             TypePointer UniformConstant 39
+       41(accNV):     40(ptr) Variable UniformConstant
+              43:      6(int) Constant 0
+              44:      6(int) Constant 1
+              45:      6(int) Constant 2
+              46:      6(int) Constant 3
+              47:   16(float) Constant 1056964608
+              48:   17(fvec3) ConstantComposite 47 47 47
+              49:   16(float) Constant 1065353216
+              50:   17(fvec3) ConstantComposite 49 49 49
+              51:   16(float) Constant 1061158912
+              52:             TypeInt 32 1
+              53:     52(int) Constant 1
+              54:             TypeVector 16(float) 4
+              55:             TypePointer RayPayloadKHR 54(fvec4)
+56(localPayload):     55(ptr) Variable RayPayloadKHR
+              57:             TypePointer IncomingRayPayloadKHR 54(fvec4)
+58(incomingPayload):     57(ptr) Variable IncomingRayPayloadKHR
          4(main):           2 Function None 3
                5:             Label
            9(v0):      8(ptr) Variable Function
           13(v1):      8(ptr) Variable Function
           19(v2):     18(ptr) Variable Function
           23(v3):     18(ptr) Variable Function
-          26(v4):     18(ptr) Variable Function
-          29(v5):     18(ptr) Variable Function
-          33(v6):     32(ptr) Variable Function
-          37(v7):     32(ptr) Variable Function
+          27(v4):     26(ptr) Variable Function
+          32(v6):     31(ptr) Variable Function
+          36(v7):     31(ptr) Variable Function
               12:    7(ivec3) Load 11(gl_LaunchIDNV)
                               Store 9(v0) 12
               15:    7(ivec3) Load 14(gl_LaunchSizeNV)
@@ -99,15 +96,13 @@
                               Store 19(v2) 22
               25:   17(fvec3) Load 24(gl_WorldRayDirectionNV)
                               Store 23(v3) 25
-              28:   17(fvec3) Load 27(gl_ObjectRayOriginNV)
-                              Store 26(v4) 28
-              31:   17(fvec3) Load 30(gl_ObjectRayDirectionNV)
-                              Store 29(v5) 31
-              36:   16(float) Load 35(gl_RayTminNV)
-                              Store 33(v6) 36
-              39:   16(float) Load 38(gl_RayTmaxNV)
-                              Store 37(v7) 39
-              43:          40 Load 42(accNV)
-                              TraceRayKHR 43 44 45 46 47 44 49 48 51 52 54
+              30:      6(int) Load 29(gl_IncomingRayFlagsNV)
+                              Store 27(v4) 30
+              35:   16(float) Load 34(gl_RayTminNV)
+                              Store 32(v6) 35
+              38:   16(float) Load 37(gl_RayTmaxNV)
+                              Store 36(v7) 38
+              42:          39 Load 41(accNV)
+                              TraceNV 42 43 44 45 46 43 48 47 50 51 53
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.RayCallable.rcall.out b/Test/baseResults/spv.RayCallable.rcall.out
index f59d36f..75698fc 100644
--- a/Test/baseResults/spv.RayCallable.rcall.out
+++ b/Test/baseResults/spv.RayCallable.rcall.out
@@ -55,6 +55,6 @@
                               Store 13(size) 15
               23:     22(ptr) AccessChain 18 20
                               Store 23 21
-                              ExecuteCallableKHR 24 25
+                              ExecuteCallableNV 24 25
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.RayConstants.rgen.out b/Test/baseResults/spv.RayConstants.rgen.out
index c4085fe..962aeb7 100644
--- a/Test/baseResults/spv.RayConstants.rgen.out
+++ b/Test/baseResults/spv.RayConstants.rgen.out
@@ -41,6 +41,6 @@
          4(main):           2 Function None 3
                5:             Label
                9:           6 Load 8(accNV)
-                              TraceRayKHR 9 11 12 13 13 12 17 18 20 21 23
+                              TraceNV 9 11 12 13 13 12 17 18 20 21 23
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.RayGenShader.rgen.out b/Test/baseResults/spv.RayGenShader.rgen.out
index 363b3dd..f8f3fd6 100644
--- a/Test/baseResults/spv.RayGenShader.rgen.out
+++ b/Test/baseResults/spv.RayGenShader.rgen.out
@@ -92,6 +92,6 @@
               44:   36(fvec3) Load 43
               47:     42(ptr) AccessChain 39 46
               48:   36(fvec3) Load 47
-                              TraceRayKHR 30 31 32 33 34 12 44 45 48 49 41
+                              TraceNV 30 31 32 33 34 12 44 45 48 49 41
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.RayGenShader11.rgen.out b/Test/baseResults/spv.RayGenShader11.rgen.out
old mode 100755
new mode 100644
index 195071f..f6b79c5
--- a/Test/baseResults/spv.RayGenShader11.rgen.out
+++ b/Test/baseResults/spv.RayGenShader11.rgen.out
@@ -88,6 +88,6 @@
               44:   36(fvec3) Load 43
               47:     42(ptr) AccessChain 39 46
               48:   36(fvec3) Load 47
-                              TraceRayKHR 30 31 32 33 34 12 44 45 48 49 41
+                              TraceNV 30 31 32 33 34 12 44 45 48 49 41
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.RayGenShaderArray.rgen.out b/Test/baseResults/spv.RayGenShaderArray.rgen.out
index fef54aa..63a04b3 100644
--- a/Test/baseResults/spv.RayGenShaderArray.rgen.out
+++ b/Test/baseResults/spv.RayGenShaderArray.rgen.out
@@ -111,7 +111,7 @@
               51:   32(fvec3) Load 50
               54:     49(ptr) AccessChain 36 53
               55:   32(fvec3) Load 54
-                              TraceRayKHR 43 44 45 46 47 12 51 52 55 56 48
+                              TraceNV 43 44 45 46 47 12 51 52 55 56 48
               61:     38(ptr) AccessChain 36 37
               62:     33(int) Load 61
               63:     41(ptr) AccessChain 60(accNV1) 62
@@ -124,7 +124,7 @@
               70:   32(fvec3) Load 69
               71:     49(ptr) AccessChain 36 53
               72:   32(fvec3) Load 71
-                              TraceRayKHR 64 65 66 67 68 12 70 52 72 56 48
+                              TraceNV 64 65 66 67 68 12 70 52 72 56 48
               73:     38(ptr) AccessChain 36 37
               74:     33(int) Load 73
               75:     33(int) CopyObject 74
@@ -138,6 +138,6 @@
               83:   32(fvec3) Load 82
               84:     49(ptr) AccessChain 36 53
               85:   32(fvec3) Load 84
-                              TraceRayKHR 77 78 79 80 81 12 83 52 85 56 48
+                              TraceNV 77 78 79 80 81 12 83 52 85 56 48
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.atomicFloat.comp.out b/Test/baseResults/spv.atomicFloat.comp.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/spv.atomicFloat_Error.comp.out b/Test/baseResults/spv.atomicFloat_Error.comp.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/spv.bufferhandleUvec2.frag.out b/Test/baseResults/spv.bufferhandleUvec2.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/spv.builtin.PrimitiveShadingRateEXT.vert.out b/Test/baseResults/spv.builtin.PrimitiveShadingRateEXT.vert.out
new file mode 100644
index 0000000..8daa79e
--- /dev/null
+++ b/Test/baseResults/spv.builtin.PrimitiveShadingRateEXT.vert.out
@@ -0,0 +1,53 @@
+spv.builtin.PrimitiveShadingRateEXT.vert
+// Module Version 10000
+// Generated by (magic number): 8000a
+// Id's are bound by 26
+
+                              Capability Shader
+                              Capability FragmentShadingRateKHR
+                              Extension  "SPV_KHR_fragment_shading_rate"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Vertex 4  "main" 8 16
+                              Source GLSL 450
+                              SourceExtension  "GL_EXT_fragment_shading_rate"
+                              Name 4  "main"
+                              Name 8  "id"
+                              Name 16  "gl_PrimitiveShadingRateEXT"
+                              Decorate 8(id) Location 0
+                              Decorate 16(gl_PrimitiveShadingRateEXT) BuiltIn PrimitiveShadingRateKHR
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 1
+               7:             TypePointer Input 6(int)
+           8(id):      7(ptr) Variable Input
+              15:             TypePointer Output 6(int)
+16(gl_PrimitiveShadingRateEXT):     15(ptr) Variable Output
+              17:      6(int) Constant 5
+              19:      6(int) Constant 9
+              21:      6(int) Constant 6
+              23:      6(int) Constant 10
+         4(main):           2 Function None 3
+               5:             Label
+               9:      6(int) Load 8(id)
+                              SelectionMerge 14 None
+                              Switch 9 14 
+                                     case 0: 10
+                                     case 1: 11
+                                     case 2: 12
+                                     case 3: 13
+              10:               Label
+                                Store 16(gl_PrimitiveShadingRateEXT) 17
+                                Branch 14
+              11:               Label
+                                Store 16(gl_PrimitiveShadingRateEXT) 19
+                                Branch 14
+              12:               Label
+                                Store 16(gl_PrimitiveShadingRateEXT) 21
+                                Branch 14
+              13:               Label
+                                Store 16(gl_PrimitiveShadingRateEXT) 23
+                                Branch 14
+              14:             Label
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.builtin.ShadingRateEXT.frag.out b/Test/baseResults/spv.builtin.ShadingRateEXT.frag.out
new file mode 100644
index 0000000..95b94d2
--- /dev/null
+++ b/Test/baseResults/spv.builtin.ShadingRateEXT.frag.out
@@ -0,0 +1,36 @@
+spv.builtin.ShadingRateEXT.frag
+WARNING: 0:5: '' : all default precisions are highp; use precision statements to quiet warning, e.g.:
+         "precision mediump int; precision highp float;" 
+
+// Module Version 10000
+// Generated by (magic number): 8000a
+// Id's are bound by 12
+
+                              Capability Shader
+                              Capability FragmentShadingRateKHR
+                              Extension  "SPV_KHR_fragment_shading_rate"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 8 10
+                              ExecutionMode 4 OriginUpperLeft
+                              Source GLSL 450
+                              SourceExtension  "GL_EXT_fragment_shading_rate"
+                              Name 4  "main"
+                              Name 8  "val"
+                              Name 10  "gl_ShadingRateEXT"
+                              Decorate 8(val) Location 0
+                              Decorate 10(gl_ShadingRateEXT) Flat
+                              Decorate 10(gl_ShadingRateEXT) BuiltIn ShadingRateKHR
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 1
+               7:             TypePointer Output 6(int)
+          8(val):      7(ptr) Variable Output
+               9:             TypePointer Input 6(int)
+10(gl_ShadingRateEXT):      9(ptr) Variable Input
+         4(main):           2 Function None 3
+               5:             Label
+              11:      6(int) Load 10(gl_ShadingRateEXT)
+                              Store 8(val) 11
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.ext.AccelDecl.frag.out b/Test/baseResults/spv.ext.AccelDecl.frag.out
new file mode 100644
index 0000000..11d4560
--- /dev/null
+++ b/Test/baseResults/spv.ext.AccelDecl.frag.out
@@ -0,0 +1,41 @@
+spv.ext.AccelDecl.frag
+// Module Version 10400
+// Generated by (magic number): 8000a
+// Id's are bound by 15
+
+                              Capability Shader
+                              Capability RayQueryKHR
+                              Extension  "SPV_KHR_ray_query"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 9 14
+                              ExecutionMode 4 OriginUpperLeft
+                              Source GLSL 460
+                              SourceExtension  "GL_ARB_separate_shader_objects"
+                              SourceExtension  "GL_EXT_nonuniform_qualifier"
+                              SourceExtension  "GL_EXT_ray_query"
+                              SourceExtension  "GL_EXT_scalar_block_layout"
+                              SourceExtension  "GL_GOOGLE_cpp_style_line_directive"
+                              SourceExtension  "GL_GOOGLE_include_directive"
+                              Name 4  "main"
+                              Name 9  "outColor"
+                              Name 14  "topLevelAS"
+                              Decorate 9(outColor) Location 0
+                              Decorate 14(topLevelAS) DescriptorSet 0
+                              Decorate 14(topLevelAS) Binding 1
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypePointer Output 7(fvec4)
+     9(outColor):      8(ptr) Variable Output
+              10:    6(float) Constant 0
+              11:    7(fvec4) ConstantComposite 10 10 10 10
+              12:             TypeAccelerationStructureKHR
+              13:             TypePointer UniformConstant 12
+  14(topLevelAS):     13(ptr) Variable UniformConstant
+         4(main):           2 Function None 3
+               5:             Label
+                              Store 9(outColor) 11
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.ext.AnyHitShader.rahit.out b/Test/baseResults/spv.ext.AnyHitShader.rahit.out
index 39e43a7..7bcf812 100644
--- a/Test/baseResults/spv.ext.AnyHitShader.rahit.out
+++ b/Test/baseResults/spv.ext.AnyHitShader.rahit.out
@@ -1,15 +1,17 @@
 spv.ext.AnyHitShader.rahit
 // Module Version 10400
 // Generated by (magic number): 8000a
-// Id's are bound by 94
+// Id's are bound by 107
 
-                              Capability RayTracingProvisionalKHR
+                              Capability GroupNonUniform
+                              Capability RayTracingKHR
                               Extension  "SPV_KHR_ray_tracing"
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint AnyHitKHR 4  "main" 11 14 20 23 26 33 36 39 42 47 50 53 58 64 67 70 76 80 84
+                              EntryPoint AnyHitKHR 4  "main" 11 14 20 23 26 33 36 39 42 47 50 53 58 64 67 70 76 80 84 98
                               Source GLSL 460
                               SourceExtension  "GL_EXT_ray_tracing"
+                              SourceExtension  "GL_KHR_shader_subgroup_basic"
                               Name 4  "main"
                               Name 9  "v0"
                               Name 11  "gl_LaunchIDEXT"
@@ -48,6 +50,7 @@
                               Name 79  "v17"
                               Name 80  "gl_WorldToObject3x4EXT"
                               Name 84  "incomingPayload"
+                              Name 98  "gl_SubgroupSize"
                               Decorate 11(gl_LaunchIDEXT) BuiltIn LaunchIdKHR
                               Decorate 14(gl_LaunchSizeEXT) BuiltIn LaunchSizeKHR
                               Decorate 20(gl_PrimitiveID) BuiltIn PrimitiveId
@@ -59,7 +62,7 @@
                               Decorate 42(gl_ObjectRayDirectionEXT) BuiltIn ObjectRayDirectionKHR
                               Decorate 47(gl_RayTminEXT) BuiltIn RayTminKHR
                               Decorate 50(gl_RayTmaxEXT) BuiltIn RayTmaxKHR
-                              Decorate 53(gl_HitTEXT) BuiltIn HitTKHR
+                              Decorate 53(gl_HitTEXT) BuiltIn RayTmaxKHR
                               Decorate 58(gl_HitKindEXT) BuiltIn HitKindKHR
                               Decorate 64(gl_ObjectToWorldEXT) BuiltIn ObjectToWorldKHR
                               Decorate 67(gl_WorldToObjectEXT) BuiltIn WorldToObjectKHR
@@ -67,6 +70,9 @@
                               Decorate 76(gl_ObjectToWorld3x4EXT) BuiltIn ObjectToWorldKHR
                               Decorate 80(gl_WorldToObject3x4EXT) BuiltIn WorldToObjectKHR
                               Decorate 84(incomingPayload) Location 1
+                              Decorate 98(gl_SubgroupSize) RelaxedPrecision
+                              Decorate 98(gl_SubgroupSize) BuiltIn SubgroupSize
+                              Decorate 99 RelaxedPrecision
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 0
@@ -114,6 +120,9 @@
               86:   72(fvec4) ConstantComposite 85 85 85 85
               88:     16(int) Constant 1
               89:             TypeBool
+              94:      6(int) Constant 0
+98(gl_SubgroupSize):     57(ptr) Variable Input
+             101:             TypePointer IncomingRayPayloadKHR 28(float)
          4(main):           2 Function None 3
                5:             Label
            9(v0):      8(ptr) Variable Function
@@ -176,13 +185,16 @@
               87:     16(int) Load 18(v2)
               90:    89(bool) IEqual 87 88
                               SelectionMerge 92 None
-                              BranchConditional 90 91 93
+                              BranchConditional 90 91 92
               91:               Label
                                 IgnoreIntersectionKHR
-                                Branch 92
-              93:               Label
-                                TerminateRayKHR
-                                Branch 92
               92:             Label
-                              Return
+              99:      6(int) Load 98(gl_SubgroupSize)
+             100:   28(float) ConvertUToF 99
+             102:    101(ptr) AccessChain 84(incomingPayload) 94
+             103:   28(float) Load 102
+             104:   28(float) FAdd 103 100
+             105:    101(ptr) AccessChain 84(incomingPayload) 94
+                              Store 105 104
+                              TerminateRayKHR
                               FunctionEnd
diff --git a/Test/baseResults/spv.ext.ClosestHitShader.rchit.out b/Test/baseResults/spv.ext.ClosestHitShader.rchit.out
index 7077ea4..40903e6 100644
--- a/Test/baseResults/spv.ext.ClosestHitShader.rchit.out
+++ b/Test/baseResults/spv.ext.ClosestHitShader.rchit.out
@@ -3,7 +3,7 @@
 // Generated by (magic number): 8000a
 // Id's are bound by 101
 
-                              Capability RayTracingProvisionalKHR
+                              Capability RayTracingKHR
                               Extension  "SPV_KHR_ray_tracing"
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
@@ -48,8 +48,8 @@
                               Name 79  "v17"
                               Name 80  "gl_WorldToObject3x4EXT"
                               Name 85  "accEXT"
-                              Name 98  "localPayload"
-                              Name 100  "incomingPayload"
+                              Name 98  "incomingPayload"
+                              Name 100  "localPayload"
                               Decorate 11(gl_LaunchIDEXT) BuiltIn LaunchIdKHR
                               Decorate 14(gl_LaunchSizeEXT) BuiltIn LaunchSizeKHR
                               Decorate 20(gl_PrimitiveID) BuiltIn PrimitiveId
@@ -61,7 +61,7 @@
                               Decorate 42(gl_ObjectRayDirectionEXT) BuiltIn ObjectRayDirectionKHR
                               Decorate 47(gl_RayTminEXT) BuiltIn RayTminKHR
                               Decorate 50(gl_RayTmaxEXT) BuiltIn RayTmaxKHR
-                              Decorate 53(gl_HitTEXT) BuiltIn HitTKHR
+                              Decorate 53(gl_HitTEXT) BuiltIn RayTmaxKHR
                               Decorate 58(gl_HitKindEXT) BuiltIn HitKindKHR
                               Decorate 64(gl_ObjectToWorldEXT) BuiltIn ObjectToWorldKHR
                               Decorate 67(gl_WorldToObjectEXT) BuiltIn WorldToObjectKHR
@@ -70,8 +70,8 @@
                               Decorate 80(gl_WorldToObject3x4EXT) BuiltIn WorldToObjectKHR
                               Decorate 85(accEXT) DescriptorSet 0
                               Decorate 85(accEXT) Binding 0
-                              Decorate 98(localPayload) Location 0
-                              Decorate 100(incomingPayload) Location 1
+                              Decorate 98(incomingPayload) Location 1
+                              Decorate 100(localPayload) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 0
@@ -126,10 +126,10 @@
               94:   29(fvec3) ConstantComposite 93 93 93
               95:   28(float) Constant 1061158912
               96:     16(int) Constant 1
-              97:             TypePointer RayPayloadKHR 72(fvec4)
-98(localPayload):     97(ptr) Variable RayPayloadKHR
-              99:             TypePointer IncomingRayPayloadKHR 72(fvec4)
-100(incomingPayload):     99(ptr) Variable IncomingRayPayloadKHR
+              97:             TypePointer IncomingRayPayloadKHR 72(fvec4)
+98(incomingPayload):     97(ptr) Variable IncomingRayPayloadKHR
+              99:             TypePointer RayPayloadKHR 72(fvec4)
+100(localPayload):     99(ptr) Variable RayPayloadKHR
          4(main):           2 Function None 3
                5:             Label
            9(v0):      8(ptr) Variable Function
@@ -189,6 +189,6 @@
               82:          73 Transpose 81
                               Store 79(v17) 82
               86:          83 Load 85(accEXT)
-                              TraceRayKHR 86 87 88 89 90 87 92 91 94 95 96
+                              TraceRayKHR 86 87 88 89 90 87 92 91 94 95 98(incomingPayload)
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.ext.ClosestHitShader_Errors.rchit.out b/Test/baseResults/spv.ext.ClosestHitShader_Errors.rchit.out
index 6c87d1c..9f945a2 100644
--- a/Test/baseResults/spv.ext.ClosestHitShader_Errors.rchit.out
+++ b/Test/baseResults/spv.ext.ClosestHitShader_Errors.rchit.out
@@ -1,10 +1,12 @@
 spv.ext.ClosestHitShader_Errors.rchit
-ERROR: 0:8: 'assign' :  l-value required "payload" (cannot modify hitAttributeNV in this stage)
-ERROR: 0:9: 'reportIntersectionEXT' : no matching overloaded function found 
-ERROR: 0:10: 'terminateRayEXT' : no matching overloaded function found 
-ERROR: 0:11: 'ignoreIntersectionEXT' : no matching overloaded function found 
-ERROR: 0:12: 'gl_RayFlagsSkipAABBEXT' : required extension not requested: GL_EXT_ray_flags_primitive_culling
-ERROR: 5 compilation errors.  No code generated.
+ERROR: 0:6: 'location' : overlapping use of location 2
+ERROR: 0:9: 'assign' :  l-value required "payload" (cannot modify hitAttributeNV in this stage)
+ERROR: 0:10: 'reportIntersectionEXT' : no matching overloaded function found 
+ERROR: 0:11: 'terminateRayEXT' : not supported in this stage: closest-hit
+ERROR: 0:12: 'ignoreIntersectionEXT' : not supported in this stage: closest-hit
+ERROR: 0:13: 'gl_RayFlagsSkipAABBEXT' : required extension not requested: GL_EXT_ray_flags_primitive_culling
+ERROR: 0:14: 'no rayPayloadEXT/rayPayloadInEXT declared' : with layout(location = 0)
+ERROR: 7 compilation errors.  No code generated.
 
 
 SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/spv.ext.ClosestHitShader_Subgroup.rchit.out b/Test/baseResults/spv.ext.ClosestHitShader_Subgroup.rchit.out
new file mode 100644
index 0000000..14ec09b
--- /dev/null
+++ b/Test/baseResults/spv.ext.ClosestHitShader_Subgroup.rchit.out
@@ -0,0 +1,114 @@
+spv.ext.ClosestHitShader_Subgroup.rchit
+// Module Version 10400
+// Generated by (magic number): 8000a
+// Id's are bound by 67
+
+                              Capability Int64
+                              Capability GroupNonUniform
+                              Capability GroupNonUniformBallot
+                              Capability SubgroupBallotKHR
+                              Capability RayTracingKHR
+                              Capability VulkanMemoryModelKHR
+                              Capability ShaderSMBuiltinsNV
+                              Extension  "SPV_KHR_ray_tracing"
+                              Extension  "SPV_KHR_shader_ballot"
+                              Extension  "SPV_KHR_vulkan_memory_model"
+                              Extension  "SPV_NV_shader_sm_builtins"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical VulkanKHR
+                              EntryPoint ClosestHitKHR 4  "main" 8 26 28 34 43 48 53 61
+                              Source GLSL 460
+                              SourceExtension  "GL_ARB_shader_ballot"
+                              SourceExtension  "GL_EXT_ray_tracing"
+                              SourceExtension  "GL_KHR_shader_subgroup_ballot"
+                              SourceExtension  "GL_KHR_shader_subgroup_basic"
+                              SourceExtension  "GL_NV_shader_sm_builtins"
+                              Name 4  "main"
+                              Name 8  "accEXT"
+                              Name 26  "incomingPayload"
+                              Name 28  "gl_SubgroupInvocationID"
+                              Name 34  "gl_SubGroupGeMaskARB"
+                              Name 43  "gl_SubgroupGtMask"
+                              Name 48  "gl_SubgroupLeMask"
+                              Name 53  "gl_SubGroupLtMaskARB"
+                              Name 61  "gl_SMIDNV"
+                              Decorate 8(accEXT) DescriptorSet 0
+                              Decorate 8(accEXT) Binding 0
+                              Decorate 26(incomingPayload) Location 1
+                              Decorate 28(gl_SubgroupInvocationID) RelaxedPrecision
+                              Decorate 28(gl_SubgroupInvocationID) BuiltIn SubgroupLocalInvocationId
+                              Decorate 29 RelaxedPrecision
+                              Decorate 34(gl_SubGroupGeMaskARB) BuiltIn SubgroupGeMaskKHR
+                              Decorate 43(gl_SubgroupGtMask) BuiltIn SubgroupGtMaskKHR
+                              Decorate 48(gl_SubgroupLeMask) BuiltIn SubgroupLeMaskKHR
+                              Decorate 53(gl_SubGroupLtMaskARB) BuiltIn SubgroupLtMaskKHR
+                              Decorate 61(gl_SMIDNV) BuiltIn SMIDNV
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeAccelerationStructureKHR
+               7:             TypePointer UniformConstant 6
+       8(accEXT):      7(ptr) Variable UniformConstant
+              10:             TypeInt 32 0
+              11:     10(int) Constant 0
+              12:     10(int) Constant 1
+              13:     10(int) Constant 2
+              14:     10(int) Constant 3
+              15:             TypeFloat 32
+              16:             TypeVector 15(float) 3
+              17:   15(float) Constant 1056964608
+              18:   16(fvec3) ConstantComposite 17 17 17
+              19:   15(float) Constant 1065353216
+              20:   16(fvec3) ConstantComposite 19 19 19
+              21:   15(float) Constant 1061158912
+              22:             TypeInt 32 1
+              23:     22(int) Constant 1
+              24:             TypeVector 15(float) 4
+              25:             TypePointer IncomingRayPayloadKHR 24(fvec4)
+26(incomingPayload):     25(ptr) Variable IncomingRayPayloadKHR
+              27:             TypePointer Input 10(int)
+28(gl_SubgroupInvocationID):     27(ptr) Variable Input
+              31:             TypeVector 10(int) 4
+              32:             TypeInt 64 0
+              33:             TypePointer Input 31(ivec4)
+34(gl_SubGroupGeMaskARB):     33(ptr) Variable Input
+              38:             TypeVector 10(int) 2
+43(gl_SubgroupGtMask):     33(ptr) Variable Input
+48(gl_SubgroupLeMask):     33(ptr) Variable Input
+53(gl_SubGroupLtMaskARB):     33(ptr) Variable Input
+   61(gl_SMIDNV):     27(ptr) Variable Input
+              65:             TypePointer IncomingRayPayloadKHR 15(float)
+         4(main):           2 Function None 3
+               5:             Label
+               9:           6 Load 8(accEXT)
+                              TraceRayKHR 9 11 12 13 14 11 18 17 20 21 26(incomingPayload)
+              29:     10(int) Load 28(gl_SubgroupInvocationID) Volatile 
+              30:   15(float) ConvertUToF 29
+              35:   31(ivec4) Load 34(gl_SubGroupGeMaskARB)
+              36:     10(int) CompositeExtract 35 0
+              37:     10(int) CompositeExtract 35 1
+              39:   38(ivec2) CompositeConstruct 36 37
+              40: 32(int64_t) Bitcast 39
+              41:   15(float) ConvertUToF 40
+              42:   15(float) FAdd 30 41
+              44:   31(ivec4) Load 43(gl_SubgroupGtMask) Volatile 
+              45:   24(fvec4) ConvertUToF 44
+              46:   15(float) CompositeExtract 45 0
+              47:   15(float) FAdd 42 46
+              49:   31(ivec4) Load 48(gl_SubgroupLeMask) Volatile 
+              50:   24(fvec4) ConvertUToF 49
+              51:   15(float) CompositeExtract 50 0
+              52:   15(float) FAdd 47 51
+              54:   31(ivec4) Load 53(gl_SubGroupLtMaskARB)
+              55:     10(int) CompositeExtract 54 0
+              56:     10(int) CompositeExtract 54 1
+              57:   38(ivec2) CompositeConstruct 55 56
+              58: 32(int64_t) Bitcast 57
+              59:   15(float) ConvertUToF 58
+              60:   15(float) FAdd 52 59
+              62:     10(int) Load 61(gl_SMIDNV) Volatile 
+              63:   15(float) ConvertUToF 62
+              64:   15(float) FAdd 60 63
+              66:     65(ptr) AccessChain 26(incomingPayload) 11
+                              Store 66 64
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.ext.IntersectShader.rint.out b/Test/baseResults/spv.ext.IntersectShader.rint.out
index 4a4a34a..2d389a0 100644
--- a/Test/baseResults/spv.ext.IntersectShader.rint.out
+++ b/Test/baseResults/spv.ext.IntersectShader.rint.out
@@ -3,7 +3,7 @@
 // Generated by (magic number): 8000a
 // Id's are bound by 81
 
-                              Capability RayTracingProvisionalKHR
+                              Capability RayTracingKHR
                               Extension  "SPV_KHR_ray_tracing"
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
@@ -53,6 +53,8 @@
                               Decorate 42(gl_ObjectRayDirectionEXT) BuiltIn ObjectRayDirectionKHR
                               Decorate 47(gl_RayTminEXT) BuiltIn RayTminKHR
                               Decorate 50(gl_RayTmaxEXT) BuiltIn RayTmaxKHR
+                              Decorate 50(gl_RayTmaxEXT) Volatile
+                              Decorate 50(gl_RayTmaxEXT) Coherent
                               Decorate 56(gl_ObjectToWorldEXT) BuiltIn ObjectToWorldKHR
                               Decorate 59(gl_WorldToObjectEXT) BuiltIn WorldToObjectKHR
                               Decorate 65(gl_ObjectToWorld3x4EXT) BuiltIn ObjectToWorldKHR
diff --git a/Test/baseResults/spv.ext.MissShader.rmiss.out b/Test/baseResults/spv.ext.MissShader.rmiss.out
index 544901b..bc29ccc 100644
--- a/Test/baseResults/spv.ext.MissShader.rmiss.out
+++ b/Test/baseResults/spv.ext.MissShader.rmiss.out
@@ -1,15 +1,25 @@
 spv.ext.MissShader.rmiss
 // Module Version 10400
 // Generated by (magic number): 8000a
-// Id's are bound by 54
+// Id's are bound by 71
 
-                              Capability RayTracingProvisionalKHR
+                              Capability GroupNonUniform
+                              Capability GroupNonUniformBallot
+                              Capability SubgroupBallotKHR
+                              Capability RayTracingKHR
+                              Capability ShaderSMBuiltinsNV
                               Extension  "SPV_KHR_ray_tracing"
+                              Extension  "SPV_KHR_shader_ballot"
+                              Extension  "SPV_NV_shader_sm_builtins"
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint MissKHR 4  "main" 11 14 21 24 29 32 36 51 53
+                              EntryPoint MissKHR 4  "main" 11 14 21 24 29 32 36 51 53 58 63 70
                               Source GLSL 460
+                              SourceExtension  "GL_ARB_shader_ballot"
                               SourceExtension  "GL_EXT_ray_tracing"
+                              SourceExtension  "GL_KHR_shader_subgroup_ballot"
+                              SourceExtension  "GL_KHR_shader_subgroup_basic"
+                              SourceExtension  "GL_NV_shader_sm_builtins"
                               Name 4  "main"
                               Name 9  "v0"
                               Name 11  "gl_LaunchIDEXT"
@@ -24,8 +34,11 @@
                               Name 31  "v5"
                               Name 32  "gl_RayTmaxEXT"
                               Name 36  "accEXT"
-                              Name 51  "localPayload"
-                              Name 53  "incomingPayload"
+                              Name 51  "incomingPayload"
+                              Name 53  "gl_SubGroupSizeARB"
+                              Name 58  "gl_SubgroupEqMask"
+                              Name 63  "gl_WarpIDNV"
+                              Name 70  "localPayload"
                               Decorate 11(gl_LaunchIDEXT) BuiltIn LaunchIdKHR
                               Decorate 14(gl_LaunchSizeEXT) BuiltIn LaunchSizeKHR
                               Decorate 21(gl_WorldRayOriginEXT) BuiltIn WorldRayOriginKHR
@@ -34,8 +47,17 @@
                               Decorate 32(gl_RayTmaxEXT) BuiltIn RayTmaxKHR
                               Decorate 36(accEXT) DescriptorSet 0
                               Decorate 36(accEXT) Binding 0
-                              Decorate 51(localPayload) Location 0
-                              Decorate 53(incomingPayload) Location 1
+                              Decorate 51(incomingPayload) Location 1
+                              Decorate 53(gl_SubGroupSizeARB) BuiltIn SubgroupSize
+                              Decorate 53(gl_SubGroupSizeARB) Volatile
+                              Decorate 53(gl_SubGroupSizeARB) Coherent
+                              Decorate 58(gl_SubgroupEqMask) BuiltIn SubgroupEqMaskKHR
+                              Decorate 58(gl_SubgroupEqMask) Volatile
+                              Decorate 58(gl_SubgroupEqMask) Coherent
+                              Decorate 63(gl_WarpIDNV) BuiltIn WarpIDNV
+                              Decorate 63(gl_WarpIDNV) Volatile
+                              Decorate 63(gl_WarpIDNV) Coherent
+                              Decorate 70(localPayload) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 0
@@ -69,10 +91,17 @@
               47:             TypeInt 32 1
               48:     47(int) Constant 1
               49:             TypeVector 16(float) 4
-              50:             TypePointer RayPayloadKHR 49(fvec4)
-51(localPayload):     50(ptr) Variable RayPayloadKHR
-              52:             TypePointer IncomingRayPayloadKHR 49(fvec4)
-53(incomingPayload):     52(ptr) Variable IncomingRayPayloadKHR
+              50:             TypePointer IncomingRayPayloadKHR 49(fvec4)
+51(incomingPayload):     50(ptr) Variable IncomingRayPayloadKHR
+              52:             TypePointer Input 6(int)
+53(gl_SubGroupSizeARB):     52(ptr) Variable Input
+              56:             TypeVector 6(int) 4
+              57:             TypePointer Input 56(ivec4)
+58(gl_SubgroupEqMask):     57(ptr) Variable Input
+ 63(gl_WarpIDNV):     52(ptr) Variable Input
+              67:             TypePointer IncomingRayPayloadKHR 16(float)
+              69:             TypePointer RayPayloadKHR 49(fvec4)
+70(localPayload):     69(ptr) Variable RayPayloadKHR
          4(main):           2 Function None 3
                5:             Label
            9(v0):      8(ptr) Variable Function
@@ -94,6 +123,17 @@
               33:   16(float) Load 32(gl_RayTmaxEXT)
                               Store 31(v5) 33
               37:          34 Load 36(accEXT)
-                              TraceRayKHR 37 38 39 40 41 38 43 42 45 46 48
+                              TraceRayKHR 37 38 39 40 41 38 43 42 45 46 51(incomingPayload)
+              54:      6(int) Load 53(gl_SubGroupSizeARB)
+              55:   16(float) ConvertUToF 54
+              59:   56(ivec4) Load 58(gl_SubgroupEqMask)
+              60:   49(fvec4) ConvertUToF 59
+              61:   16(float) CompositeExtract 60 0
+              62:   16(float) FAdd 55 61
+              64:      6(int) Load 63(gl_WarpIDNV)
+              65:   16(float) ConvertUToF 64
+              66:   16(float) FAdd 62 65
+              68:     67(ptr) AccessChain 51(incomingPayload) 38
+                              Store 68 66
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.ext.MissShader_Errors.rmiss.out b/Test/baseResults/spv.ext.MissShader_Errors.rmiss.out
index 929a2a7..50d3c83 100644
--- a/Test/baseResults/spv.ext.MissShader_Errors.rmiss.out
+++ b/Test/baseResults/spv.ext.MissShader_Errors.rmiss.out
@@ -13,8 +13,8 @@
 ERROR: 0:11: 'gl_HitTEXT' : undeclared identifier 
 ERROR: 0:12: 'gl_HitKindEXT' : undeclared identifier 
 ERROR: 0:13: 'reportIntersectionEXT' : no matching overloaded function found 
-ERROR: 0:14: 'ignoreIntersectionEXT' : no matching overloaded function found 
-ERROR: 0:15: 'terminateRayEXT' : no matching overloaded function found 
+ERROR: 0:14: 'ignoreIntersectionEXT' : not supported in this stage: miss
+ERROR: 0:15: 'terminateRayEXT' : not supported in this stage: miss
 ERROR: 16 compilation errors.  No code generated.
 
 
diff --git a/Test/baseResults/spv.ext.RayCallable.rcall.out b/Test/baseResults/spv.ext.RayCallable.rcall.out
index e87b5fa..d429116 100644
--- a/Test/baseResults/spv.ext.RayCallable.rcall.out
+++ b/Test/baseResults/spv.ext.RayCallable.rcall.out
@@ -3,7 +3,7 @@
 // Generated by (magic number): 8000a
 // Id's are bound by 30
 
-                              Capability RayTracingProvisionalKHR
+                              Capability RayTracingKHR
                               Extension  "SPV_KHR_ray_tracing"
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
@@ -55,6 +55,6 @@
                               Store 13(size) 15
               23:     22(ptr) AccessChain 18 20
                               Store 23 21
-                              ExecuteCallableKHR 24 25
+                              ExecuteCallableKHR 24 18
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.ext.RayCallable_Errors.rcall.out b/Test/baseResults/spv.ext.RayCallable_Errors.rcall.out
index 4699342..e623874 100644
--- a/Test/baseResults/spv.ext.RayCallable_Errors.rcall.out
+++ b/Test/baseResults/spv.ext.RayCallable_Errors.rcall.out
@@ -2,34 +2,36 @@
 ERROR: 0:3: 'hitAttributeEXT' : not supported in this stage: callable
 ERROR: 0:4: 'rayPayloadEXT' : not supported in this stage: callable
 ERROR: 0:5: 'rayPayloadInEXT' : not supported in this stage: callable
-ERROR: 0:9: 'gl_PrimitiveID' : undeclared identifier 
-ERROR: 0:9: '=' :  cannot convert from ' temp float' to ' temp highp int'
-ERROR: 0:10: 'gl_InstanceID' : undeclared identifier (Did you mean gl_InstanceIndex?)
+ERROR: 0:7: 'location' : overlapping use of location 0
+ERROR: 0:10: 'gl_PrimitiveID' : undeclared identifier 
 ERROR: 0:10: '=' :  cannot convert from ' temp float' to ' temp highp int'
-ERROR: 0:11: 'gl_InstanceCustomIndexEXT' : undeclared identifier 
+ERROR: 0:11: 'gl_InstanceID' : undeclared identifier (Did you mean gl_InstanceIndex?)
 ERROR: 0:11: '=' :  cannot convert from ' temp float' to ' temp highp int'
-ERROR: 0:12: 'gl_WorldRayOriginEXT' : undeclared identifier 
-ERROR: 0:12: '=' :  cannot convert from ' temp float' to ' temp highp 3-component vector of float'
-ERROR: 0:13: 'gl_WorldRayDirectionEXT' : undeclared identifier 
+ERROR: 0:12: 'gl_InstanceCustomIndexEXT' : undeclared identifier 
+ERROR: 0:12: '=' :  cannot convert from ' temp float' to ' temp highp int'
+ERROR: 0:13: 'gl_WorldRayOriginEXT' : undeclared identifier 
 ERROR: 0:13: '=' :  cannot convert from ' temp float' to ' temp highp 3-component vector of float'
-ERROR: 0:14: 'gl_ObjectRayOriginEXT' : undeclared identifier 
+ERROR: 0:14: 'gl_WorldRayDirectionEXT' : undeclared identifier 
 ERROR: 0:14: '=' :  cannot convert from ' temp float' to ' temp highp 3-component vector of float'
-ERROR: 0:15: 'gl_ObjectRayDirectionEXT' : undeclared identifier 
+ERROR: 0:15: 'gl_ObjectRayOriginEXT' : undeclared identifier 
 ERROR: 0:15: '=' :  cannot convert from ' temp float' to ' temp highp 3-component vector of float'
-ERROR: 0:16: 'gl_RayTminEXT' : undeclared identifier 
-ERROR: 0:17: 'gl_RayTmaxEXT' : undeclared identifier 
-ERROR: 0:18: 'gl_ObjectToWorldEXT' : undeclared identifier 
-ERROR: 0:18: '=' :  cannot convert from ' temp float' to ' temp highp 4X3 matrix of float'
-ERROR: 0:19: 'gl_WorldToObjectEXT' : undeclared identifier 
+ERROR: 0:16: 'gl_ObjectRayDirectionEXT' : undeclared identifier 
+ERROR: 0:16: '=' :  cannot convert from ' temp float' to ' temp highp 3-component vector of float'
+ERROR: 0:17: 'gl_RayTminEXT' : undeclared identifier 
+ERROR: 0:18: 'gl_RayTmaxEXT' : undeclared identifier 
+ERROR: 0:19: 'gl_ObjectToWorldEXT' : undeclared identifier 
 ERROR: 0:19: '=' :  cannot convert from ' temp float' to ' temp highp 4X3 matrix of float'
-ERROR: 0:20: 'gl_HitTEXT' : undeclared identifier 
-ERROR: 0:21: 'gl_HitKindEXT' : undeclared identifier 
-ERROR: 0:22: 'gl_IncomingRayFlagsEXT' : undeclared identifier 
-ERROR: 0:22: '=' :  cannot convert from ' temp float' to ' temp highp uint'
-ERROR: 0:23: 'reportIntersectionEXT' : no matching overloaded function found 
-ERROR: 0:24: 'ignoreIntersectionEXT' : no matching overloaded function found 
-ERROR: 0:25: 'terminateRayEXT' : no matching overloaded function found 
-ERROR: 30 compilation errors.  No code generated.
+ERROR: 0:20: 'gl_WorldToObjectEXT' : undeclared identifier 
+ERROR: 0:20: '=' :  cannot convert from ' temp float' to ' temp highp 4X3 matrix of float'
+ERROR: 0:21: 'gl_HitTEXT' : undeclared identifier 
+ERROR: 0:22: 'gl_HitKindEXT' : undeclared identifier 
+ERROR: 0:23: 'gl_IncomingRayFlagsEXT' : undeclared identifier 
+ERROR: 0:23: '=' :  cannot convert from ' temp float' to ' temp highp uint'
+ERROR: 0:24: 'reportIntersectionEXT' : no matching overloaded function found 
+ERROR: 0:25: 'ignoreIntersectionEXT' : not supported in this stage: callable
+ERROR: 0:26: 'terminateRayEXT' : not supported in this stage: callable
+ERROR: 0:27: 'no callableDataEXT/callableDataInEXT declared' : with layout(location = 1)
+ERROR: 32 compilation errors.  No code generated.
 
 
 SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/spv.ext.RayConstants.rgen.out b/Test/baseResults/spv.ext.RayConstants.rgen.out
index 5d7079a..afd5083 100644
--- a/Test/baseResults/spv.ext.RayConstants.rgen.out
+++ b/Test/baseResults/spv.ext.RayConstants.rgen.out
@@ -3,7 +3,7 @@
 // Generated by (magic number): 8000a
 // Id's are bound by 27
 
-                              Capability RayTracingProvisionalKHR
+                              Capability RayTracingKHR
                               Extension  "SPV_KHR_ray_tracing"
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
@@ -15,7 +15,7 @@
                               Name 26  "payload"
                               Decorate 8(accEXT) DescriptorSet 0
                               Decorate 8(accEXT) Binding 0
-                              Decorate 26(payload) Location 0
+                              Decorate 26(payload) Location 1
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeAccelerationStructureKHR
@@ -41,6 +41,6 @@
          4(main):           2 Function None 3
                5:             Label
                9:           6 Load 8(accEXT)
-                              TraceRayKHR 9 11 12 13 13 12 17 18 20 21 23
+                              TraceRayKHR 9 11 12 13 13 12 17 18 20 21 26(payload)
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.ext.RayGenSBTlayout.rgen.out b/Test/baseResults/spv.ext.RayGenSBTlayout.rgen.out
new file mode 100644
index 0000000..60b5e93
--- /dev/null
+++ b/Test/baseResults/spv.ext.RayGenSBTlayout.rgen.out
@@ -0,0 +1,134 @@
+spv.ext.RayGenSBTlayout.rgen
+// Module Version 10400
+// Generated by (magic number): 8000a
+// Id's are bound by 74
+
+                              Capability Int64
+                              Capability RayTracingKHR
+                              Extension  "SPV_KHR_ray_tracing"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint RayGenerationKHR 4  "main" 11 21 38 60
+                              Source GLSL 460
+                              SourceExtension  "GL_ARB_gpu_shader_int64"
+                              SourceExtension  "GL_EXT_ray_tracing"
+                              Name 4  "main"
+                              Name 8  "lx"
+                              Name 11  "gl_LaunchIDEXT"
+                              Name 16  "ly"
+                              Name 20  "sx"
+                              Name 21  "gl_LaunchSizeEXT"
+                              Name 24  "sy"
+                              Name 36  "block"
+                              MemberName 36(block) 0  "dir"
+                              MemberName 36(block) 1  "origin"
+                              MemberName 36(block) 2  "i"
+                              MemberName 36(block) 3  "aHandle32"
+                              MemberName 36(block) 4  "aHandle64"
+                              MemberName 36(block) 5  "arr2"
+                              MemberName 36(block) 6  "a"
+                              MemberName 36(block) 7  "arr3"
+                              MemberName 36(block) 8  "packme"
+                              MemberName 36(block) 9  "b"
+                              MemberName 36(block) 10  "c"
+                              Name 38  ""
+                              Name 60  "payload"
+                              Decorate 11(gl_LaunchIDEXT) BuiltIn LaunchIdKHR
+                              Decorate 21(gl_LaunchSizeEXT) BuiltIn LaunchSizeKHR
+                              Decorate 34 ArrayStride 8
+                              Decorate 35 ArrayStride 16
+                              MemberDecorate 36(block) 0 Offset 0
+                              MemberDecorate 36(block) 1 Offset 16
+                              MemberDecorate 36(block) 2 Offset 28
+                              MemberDecorate 36(block) 3 Offset 32
+                              MemberDecorate 36(block) 4 Offset 40
+                              MemberDecorate 36(block) 5 Offset 48
+                              MemberDecorate 36(block) 6 Offset 64
+                              MemberDecorate 36(block) 7 Offset 80
+                              MemberDecorate 36(block) 8 Offset 112
+                              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
+               6:             TypeInt 32 0
+               7:             TypePointer Function 6(int)
+               9:             TypeVector 6(int) 3
+              10:             TypePointer Input 9(ivec3)
+11(gl_LaunchIDEXT):     10(ptr) Variable Input
+              12:      6(int) Constant 0
+              13:             TypePointer Input 6(int)
+              17:      6(int) Constant 1
+21(gl_LaunchSizeEXT):     10(ptr) Variable Input
+              27:             TypeFloat 32
+              28:             TypeVector 27(float) 3
+              29:             TypeInt 32 1
+              30:             TypeVector 6(int) 2
+              31:             TypeInt 64 0
+              32:             TypeVector 27(float) 2
+              33:      6(int) Constant 2
+              34:             TypeArray 32(fvec2) 33
+              35:             TypeArray 28(fvec3) 33
+       36(block):             TypeStruct 28(fvec3) 28(fvec3) 29(int) 30(ivec2) 31(int64_t) 34 27(float) 35 27(float) 32(fvec2) 27(float)
+              37:             TypePointer ShaderRecordBufferKHR 36(block)
+              38:     37(ptr) Variable ShaderRecordBufferKHR
+              39:     29(int) Constant 3
+              40:             TypePointer ShaderRecordBufferKHR 30(ivec2)
+              43:             TypeAccelerationStructureKHR
+              49:     29(int) Constant 1
+              50:             TypePointer ShaderRecordBufferKHR 28(fvec3)
+              53:   27(float) Constant 1056964608
+              54:     29(int) Constant 0
+              57:   27(float) Constant 1061158912
+              58:             TypeVector 27(float) 4
+              59:             TypePointer RayPayloadKHR 58(fvec4)
+     60(payload):     59(ptr) Variable RayPayloadKHR
+              61:     29(int) Constant 4
+              62:             TypePointer ShaderRecordBufferKHR 31(int64_t)
+         4(main):           2 Function None 3
+               5:             Label
+           8(lx):      7(ptr) Variable Function
+          16(ly):      7(ptr) Variable Function
+          20(sx):      7(ptr) Variable Function
+          24(sy):      7(ptr) Variable Function
+              14:     13(ptr) AccessChain 11(gl_LaunchIDEXT) 12
+              15:      6(int) Load 14
+                              Store 8(lx) 15
+              18:     13(ptr) AccessChain 11(gl_LaunchIDEXT) 17
+              19:      6(int) Load 18
+                              Store 16(ly) 19
+              22:     13(ptr) AccessChain 21(gl_LaunchSizeEXT) 12
+              23:      6(int) Load 22
+                              Store 20(sx) 23
+              25:     13(ptr) AccessChain 21(gl_LaunchSizeEXT) 17
+              26:      6(int) Load 25
+                              Store 24(sy) 26
+              41:     40(ptr) AccessChain 38 39
+              42:   30(ivec2) Load 41
+              44:          43 ConvertUToAccelerationStructureKHR 42
+              45:      6(int) Load 8(lx)
+              46:      6(int) Load 16(ly)
+              47:      6(int) Load 20(sx)
+              48:      6(int) Load 24(sy)
+              51:     50(ptr) AccessChain 38 49
+              52:   28(fvec3) Load 51
+              55:     50(ptr) AccessChain 38 54
+              56:   28(fvec3) Load 55
+                              TraceRayKHR 44 45 46 47 48 12 52 53 56 57 60(payload)
+              63:     62(ptr) AccessChain 38 61
+              64: 31(int64_t) Load 63
+              65:          43 ConvertUToAccelerationStructureKHR 64
+              66:      6(int) Load 8(lx)
+              67:      6(int) Load 16(ly)
+              68:      6(int) Load 20(sx)
+              69:      6(int) Load 24(sy)
+              70:     50(ptr) AccessChain 38 49
+              71:   28(fvec3) Load 70
+              72:     50(ptr) AccessChain 38 54
+              73:   28(fvec3) Load 72
+                              TraceRayKHR 65 66 67 68 69 12 71 53 73 57 60(payload)
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.ext.RayGenSBTlayout140.rgen.out b/Test/baseResults/spv.ext.RayGenSBTlayout140.rgen.out
new file mode 100644
index 0000000..cc175f7
--- /dev/null
+++ b/Test/baseResults/spv.ext.RayGenSBTlayout140.rgen.out
@@ -0,0 +1,134 @@
+spv.ext.RayGenSBTlayout140.rgen
+// Module Version 10400
+// Generated by (magic number): 8000a
+// Id's are bound by 74
+
+                              Capability Int64
+                              Capability RayTracingKHR
+                              Extension  "SPV_KHR_ray_tracing"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint RayGenerationKHR 4  "main" 11 21 38 60
+                              Source GLSL 460
+                              SourceExtension  "GL_ARB_gpu_shader_int64"
+                              SourceExtension  "GL_EXT_ray_tracing"
+                              Name 4  "main"
+                              Name 8  "lx"
+                              Name 11  "gl_LaunchIDEXT"
+                              Name 16  "ly"
+                              Name 20  "sx"
+                              Name 21  "gl_LaunchSizeEXT"
+                              Name 24  "sy"
+                              Name 36  "block"
+                              MemberName 36(block) 0  "dir"
+                              MemberName 36(block) 1  "origin"
+                              MemberName 36(block) 2  "i"
+                              MemberName 36(block) 3  "aHandle32"
+                              MemberName 36(block) 4  "aHandle64"
+                              MemberName 36(block) 5  "arr"
+                              MemberName 36(block) 6  "a"
+                              MemberName 36(block) 7  "arr3"
+                              MemberName 36(block) 8  "packme"
+                              MemberName 36(block) 9  "b"
+                              MemberName 36(block) 10  "c"
+                              Name 38  ""
+                              Name 60  "payload"
+                              Decorate 11(gl_LaunchIDEXT) BuiltIn LaunchIdKHR
+                              Decorate 21(gl_LaunchSizeEXT) BuiltIn LaunchSizeKHR
+                              Decorate 34 ArrayStride 16
+                              Decorate 35 ArrayStride 16
+                              MemberDecorate 36(block) 0 Offset 0
+                              MemberDecorate 36(block) 1 Offset 16
+                              MemberDecorate 36(block) 2 Offset 28
+                              MemberDecorate 36(block) 3 Offset 32
+                              MemberDecorate 36(block) 4 Offset 40
+                              MemberDecorate 36(block) 5 Offset 48
+                              MemberDecorate 36(block) 6 Offset 80
+                              MemberDecorate 36(block) 7 Offset 96
+                              MemberDecorate 36(block) 8 Offset 128
+                              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
+               6:             TypeInt 32 0
+               7:             TypePointer Function 6(int)
+               9:             TypeVector 6(int) 3
+              10:             TypePointer Input 9(ivec3)
+11(gl_LaunchIDEXT):     10(ptr) Variable Input
+              12:      6(int) Constant 0
+              13:             TypePointer Input 6(int)
+              17:      6(int) Constant 1
+21(gl_LaunchSizeEXT):     10(ptr) Variable Input
+              27:             TypeFloat 32
+              28:             TypeVector 27(float) 3
+              29:             TypeInt 32 1
+              30:             TypeVector 6(int) 2
+              31:             TypeInt 64 0
+              32:             TypeVector 27(float) 2
+              33:      6(int) Constant 2
+              34:             TypeArray 32(fvec2) 33
+              35:             TypeArray 28(fvec3) 33
+       36(block):             TypeStruct 28(fvec3) 28(fvec3) 29(int) 30(ivec2) 31(int64_t) 34 27(float) 35 27(float) 32(fvec2) 27(float)
+              37:             TypePointer ShaderRecordBufferKHR 36(block)
+              38:     37(ptr) Variable ShaderRecordBufferKHR
+              39:     29(int) Constant 3
+              40:             TypePointer ShaderRecordBufferKHR 30(ivec2)
+              43:             TypeAccelerationStructureKHR
+              49:     29(int) Constant 1
+              50:             TypePointer ShaderRecordBufferKHR 28(fvec3)
+              53:   27(float) Constant 1056964608
+              54:     29(int) Constant 0
+              57:   27(float) Constant 1061158912
+              58:             TypeVector 27(float) 4
+              59:             TypePointer RayPayloadKHR 58(fvec4)
+     60(payload):     59(ptr) Variable RayPayloadKHR
+              61:     29(int) Constant 4
+              62:             TypePointer ShaderRecordBufferKHR 31(int64_t)
+         4(main):           2 Function None 3
+               5:             Label
+           8(lx):      7(ptr) Variable Function
+          16(ly):      7(ptr) Variable Function
+          20(sx):      7(ptr) Variable Function
+          24(sy):      7(ptr) Variable Function
+              14:     13(ptr) AccessChain 11(gl_LaunchIDEXT) 12
+              15:      6(int) Load 14
+                              Store 8(lx) 15
+              18:     13(ptr) AccessChain 11(gl_LaunchIDEXT) 17
+              19:      6(int) Load 18
+                              Store 16(ly) 19
+              22:     13(ptr) AccessChain 21(gl_LaunchSizeEXT) 12
+              23:      6(int) Load 22
+                              Store 20(sx) 23
+              25:     13(ptr) AccessChain 21(gl_LaunchSizeEXT) 17
+              26:      6(int) Load 25
+                              Store 24(sy) 26
+              41:     40(ptr) AccessChain 38 39
+              42:   30(ivec2) Load 41
+              44:          43 ConvertUToAccelerationStructureKHR 42
+              45:      6(int) Load 8(lx)
+              46:      6(int) Load 16(ly)
+              47:      6(int) Load 20(sx)
+              48:      6(int) Load 24(sy)
+              51:     50(ptr) AccessChain 38 49
+              52:   28(fvec3) Load 51
+              55:     50(ptr) AccessChain 38 54
+              56:   28(fvec3) Load 55
+                              TraceRayKHR 44 45 46 47 48 12 52 53 56 57 60(payload)
+              63:     62(ptr) AccessChain 38 61
+              64: 31(int64_t) Load 63
+              65:          43 ConvertUToAccelerationStructureKHR 64
+              66:      6(int) Load 8(lx)
+              67:      6(int) Load 16(ly)
+              68:      6(int) Load 20(sx)
+              69:      6(int) Load 24(sy)
+              70:     50(ptr) AccessChain 38 49
+              71:   28(fvec3) Load 70
+              72:     50(ptr) AccessChain 38 54
+              73:   28(fvec3) Load 72
+                              TraceRayKHR 65 66 67 68 69 12 71 53 73 57 60(payload)
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.ext.RayGenSBTlayout430.rgen.out b/Test/baseResults/spv.ext.RayGenSBTlayout430.rgen.out
new file mode 100644
index 0000000..afcfa9c
--- /dev/null
+++ b/Test/baseResults/spv.ext.RayGenSBTlayout430.rgen.out
@@ -0,0 +1,134 @@
+spv.ext.RayGenSBTlayout430.rgen
+// Module Version 10400
+// Generated by (magic number): 8000a
+// Id's are bound by 74
+
+                              Capability Int64
+                              Capability RayTracingKHR
+                              Extension  "SPV_KHR_ray_tracing"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint RayGenerationKHR 4  "main" 11 21 38 60
+                              Source GLSL 460
+                              SourceExtension  "GL_ARB_gpu_shader_int64"
+                              SourceExtension  "GL_EXT_ray_tracing"
+                              Name 4  "main"
+                              Name 8  "lx"
+                              Name 11  "gl_LaunchIDEXT"
+                              Name 16  "ly"
+                              Name 20  "sx"
+                              Name 21  "gl_LaunchSizeEXT"
+                              Name 24  "sy"
+                              Name 36  "block"
+                              MemberName 36(block) 0  "dir"
+                              MemberName 36(block) 1  "origin"
+                              MemberName 36(block) 2  "i"
+                              MemberName 36(block) 3  "aHandle32"
+                              MemberName 36(block) 4  "aHandle64"
+                              MemberName 36(block) 5  "arr"
+                              MemberName 36(block) 6  "a"
+                              MemberName 36(block) 7  "arr3"
+                              MemberName 36(block) 8  "packme"
+                              MemberName 36(block) 9  "b"
+                              MemberName 36(block) 10  "c"
+                              Name 38  ""
+                              Name 60  "payload"
+                              Decorate 11(gl_LaunchIDEXT) BuiltIn LaunchIdKHR
+                              Decorate 21(gl_LaunchSizeEXT) BuiltIn LaunchSizeKHR
+                              Decorate 34 ArrayStride 8
+                              Decorate 35 ArrayStride 16
+                              MemberDecorate 36(block) 0 Offset 0
+                              MemberDecorate 36(block) 1 Offset 16
+                              MemberDecorate 36(block) 2 Offset 28
+                              MemberDecorate 36(block) 3 Offset 32
+                              MemberDecorate 36(block) 4 Offset 40
+                              MemberDecorate 36(block) 5 Offset 48
+                              MemberDecorate 36(block) 6 Offset 64
+                              MemberDecorate 36(block) 7 Offset 80
+                              MemberDecorate 36(block) 8 Offset 112
+                              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
+               6:             TypeInt 32 0
+               7:             TypePointer Function 6(int)
+               9:             TypeVector 6(int) 3
+              10:             TypePointer Input 9(ivec3)
+11(gl_LaunchIDEXT):     10(ptr) Variable Input
+              12:      6(int) Constant 0
+              13:             TypePointer Input 6(int)
+              17:      6(int) Constant 1
+21(gl_LaunchSizeEXT):     10(ptr) Variable Input
+              27:             TypeFloat 32
+              28:             TypeVector 27(float) 3
+              29:             TypeInt 32 1
+              30:             TypeVector 6(int) 2
+              31:             TypeInt 64 0
+              32:             TypeVector 27(float) 2
+              33:      6(int) Constant 2
+              34:             TypeArray 32(fvec2) 33
+              35:             TypeArray 28(fvec3) 33
+       36(block):             TypeStruct 28(fvec3) 28(fvec3) 29(int) 30(ivec2) 31(int64_t) 34 27(float) 35 27(float) 32(fvec2) 27(float)
+              37:             TypePointer ShaderRecordBufferKHR 36(block)
+              38:     37(ptr) Variable ShaderRecordBufferKHR
+              39:     29(int) Constant 3
+              40:             TypePointer ShaderRecordBufferKHR 30(ivec2)
+              43:             TypeAccelerationStructureKHR
+              49:     29(int) Constant 1
+              50:             TypePointer ShaderRecordBufferKHR 28(fvec3)
+              53:   27(float) Constant 1056964608
+              54:     29(int) Constant 0
+              57:   27(float) Constant 1061158912
+              58:             TypeVector 27(float) 4
+              59:             TypePointer RayPayloadKHR 58(fvec4)
+     60(payload):     59(ptr) Variable RayPayloadKHR
+              61:     29(int) Constant 4
+              62:             TypePointer ShaderRecordBufferKHR 31(int64_t)
+         4(main):           2 Function None 3
+               5:             Label
+           8(lx):      7(ptr) Variable Function
+          16(ly):      7(ptr) Variable Function
+          20(sx):      7(ptr) Variable Function
+          24(sy):      7(ptr) Variable Function
+              14:     13(ptr) AccessChain 11(gl_LaunchIDEXT) 12
+              15:      6(int) Load 14
+                              Store 8(lx) 15
+              18:     13(ptr) AccessChain 11(gl_LaunchIDEXT) 17
+              19:      6(int) Load 18
+                              Store 16(ly) 19
+              22:     13(ptr) AccessChain 21(gl_LaunchSizeEXT) 12
+              23:      6(int) Load 22
+                              Store 20(sx) 23
+              25:     13(ptr) AccessChain 21(gl_LaunchSizeEXT) 17
+              26:      6(int) Load 25
+                              Store 24(sy) 26
+              41:     40(ptr) AccessChain 38 39
+              42:   30(ivec2) Load 41
+              44:          43 ConvertUToAccelerationStructureKHR 42
+              45:      6(int) Load 8(lx)
+              46:      6(int) Load 16(ly)
+              47:      6(int) Load 20(sx)
+              48:      6(int) Load 24(sy)
+              51:     50(ptr) AccessChain 38 49
+              52:   28(fvec3) Load 51
+              55:     50(ptr) AccessChain 38 54
+              56:   28(fvec3) Load 55
+                              TraceRayKHR 44 45 46 47 48 12 52 53 56 57 60(payload)
+              63:     62(ptr) AccessChain 38 61
+              64: 31(int64_t) Load 63
+              65:          43 ConvertUToAccelerationStructureKHR 64
+              66:      6(int) Load 8(lx)
+              67:      6(int) Load 16(ly)
+              68:      6(int) Load 20(sx)
+              69:      6(int) Load 24(sy)
+              70:     50(ptr) AccessChain 38 49
+              71:   28(fvec3) Load 70
+              72:     50(ptr) AccessChain 38 54
+              73:   28(fvec3) Load 72
+                              TraceRayKHR 65 66 67 68 69 12 71 53 73 57 60(payload)
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.ext.RayGenSBTlayoutscalar.rgen.out b/Test/baseResults/spv.ext.RayGenSBTlayoutscalar.rgen.out
new file mode 100644
index 0000000..eac481a
--- /dev/null
+++ b/Test/baseResults/spv.ext.RayGenSBTlayoutscalar.rgen.out
@@ -0,0 +1,135 @@
+spv.ext.RayGenSBTlayoutscalar.rgen
+// Module Version 10400
+// Generated by (magic number): 8000a
+// Id's are bound by 74
+
+                              Capability Int64
+                              Capability RayTracingKHR
+                              Extension  "SPV_KHR_ray_tracing"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint RayGenerationKHR 4  "main" 11 21 38 60
+                              Source GLSL 460
+                              SourceExtension  "GL_ARB_gpu_shader_int64"
+                              SourceExtension  "GL_EXT_ray_tracing"
+                              SourceExtension  "GL_EXT_scalar_block_layout"
+                              Name 4  "main"
+                              Name 8  "lx"
+                              Name 11  "gl_LaunchIDEXT"
+                              Name 16  "ly"
+                              Name 20  "sx"
+                              Name 21  "gl_LaunchSizeEXT"
+                              Name 24  "sy"
+                              Name 36  "block"
+                              MemberName 36(block) 0  "dir"
+                              MemberName 36(block) 1  "origin"
+                              MemberName 36(block) 2  "i"
+                              MemberName 36(block) 3  "aHandle32"
+                              MemberName 36(block) 4  "aHandle64"
+                              MemberName 36(block) 5  "arr"
+                              MemberName 36(block) 6  "a"
+                              MemberName 36(block) 7  "arr3"
+                              MemberName 36(block) 8  "packme"
+                              MemberName 36(block) 9  "b"
+                              MemberName 36(block) 10  "c"
+                              Name 38  ""
+                              Name 60  "payload"
+                              Decorate 11(gl_LaunchIDEXT) BuiltIn LaunchIdKHR
+                              Decorate 21(gl_LaunchSizeEXT) BuiltIn LaunchSizeKHR
+                              Decorate 34 ArrayStride 8
+                              Decorate 35 ArrayStride 12
+                              MemberDecorate 36(block) 0 Offset 0
+                              MemberDecorate 36(block) 1 Offset 12
+                              MemberDecorate 36(block) 2 Offset 24
+                              MemberDecorate 36(block) 3 Offset 28
+                              MemberDecorate 36(block) 4 Offset 40
+                              MemberDecorate 36(block) 5 Offset 48
+                              MemberDecorate 36(block) 6 Offset 64
+                              MemberDecorate 36(block) 7 Offset 68
+                              MemberDecorate 36(block) 8 Offset 92
+                              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
+               6:             TypeInt 32 0
+               7:             TypePointer Function 6(int)
+               9:             TypeVector 6(int) 3
+              10:             TypePointer Input 9(ivec3)
+11(gl_LaunchIDEXT):     10(ptr) Variable Input
+              12:      6(int) Constant 0
+              13:             TypePointer Input 6(int)
+              17:      6(int) Constant 1
+21(gl_LaunchSizeEXT):     10(ptr) Variable Input
+              27:             TypeFloat 32
+              28:             TypeVector 27(float) 3
+              29:             TypeInt 32 1
+              30:             TypeVector 6(int) 2
+              31:             TypeInt 64 0
+              32:             TypeVector 27(float) 2
+              33:      6(int) Constant 2
+              34:             TypeArray 32(fvec2) 33
+              35:             TypeArray 28(fvec3) 33
+       36(block):             TypeStruct 28(fvec3) 28(fvec3) 29(int) 30(ivec2) 31(int64_t) 34 27(float) 35 27(float) 32(fvec2) 27(float)
+              37:             TypePointer ShaderRecordBufferKHR 36(block)
+              38:     37(ptr) Variable ShaderRecordBufferKHR
+              39:     29(int) Constant 3
+              40:             TypePointer ShaderRecordBufferKHR 30(ivec2)
+              43:             TypeAccelerationStructureKHR
+              49:     29(int) Constant 1
+              50:             TypePointer ShaderRecordBufferKHR 28(fvec3)
+              53:   27(float) Constant 1056964608
+              54:     29(int) Constant 0
+              57:   27(float) Constant 1061158912
+              58:             TypeVector 27(float) 4
+              59:             TypePointer RayPayloadKHR 58(fvec4)
+     60(payload):     59(ptr) Variable RayPayloadKHR
+              61:     29(int) Constant 4
+              62:             TypePointer ShaderRecordBufferKHR 31(int64_t)
+         4(main):           2 Function None 3
+               5:             Label
+           8(lx):      7(ptr) Variable Function
+          16(ly):      7(ptr) Variable Function
+          20(sx):      7(ptr) Variable Function
+          24(sy):      7(ptr) Variable Function
+              14:     13(ptr) AccessChain 11(gl_LaunchIDEXT) 12
+              15:      6(int) Load 14
+                              Store 8(lx) 15
+              18:     13(ptr) AccessChain 11(gl_LaunchIDEXT) 17
+              19:      6(int) Load 18
+                              Store 16(ly) 19
+              22:     13(ptr) AccessChain 21(gl_LaunchSizeEXT) 12
+              23:      6(int) Load 22
+                              Store 20(sx) 23
+              25:     13(ptr) AccessChain 21(gl_LaunchSizeEXT) 17
+              26:      6(int) Load 25
+                              Store 24(sy) 26
+              41:     40(ptr) AccessChain 38 39
+              42:   30(ivec2) Load 41
+              44:          43 ConvertUToAccelerationStructureKHR 42
+              45:      6(int) Load 8(lx)
+              46:      6(int) Load 16(ly)
+              47:      6(int) Load 20(sx)
+              48:      6(int) Load 24(sy)
+              51:     50(ptr) AccessChain 38 49
+              52:   28(fvec3) Load 51
+              55:     50(ptr) AccessChain 38 54
+              56:   28(fvec3) Load 55
+                              TraceRayKHR 44 45 46 47 48 12 52 53 56 57 60(payload)
+              63:     62(ptr) AccessChain 38 61
+              64: 31(int64_t) Load 63
+              65:          43 ConvertUToAccelerationStructureKHR 64
+              66:      6(int) Load 8(lx)
+              67:      6(int) Load 16(ly)
+              68:      6(int) Load 20(sx)
+              69:      6(int) Load 24(sy)
+              70:     50(ptr) AccessChain 38 49
+              71:   28(fvec3) Load 70
+              72:     50(ptr) AccessChain 38 54
+              73:   28(fvec3) Load 72
+                              TraceRayKHR 65 66 67 68 69 12 71 53 73 57 60(payload)
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.ext.RayGenShader.rgen.out b/Test/baseResults/spv.ext.RayGenShader.rgen.out
index b1904ac..da516f3 100644
--- a/Test/baseResults/spv.ext.RayGenShader.rgen.out
+++ b/Test/baseResults/spv.ext.RayGenShader.rgen.out
@@ -3,12 +3,12 @@
 // Generated by (magic number): 8000a
 // Id's are bound by 58
 
-                              Capability RayTraversalPrimitiveCullingProvisionalKHR
-                              Capability RayTracingProvisionalKHR
+                              Capability RayTraversalPrimitiveCullingKHR
+                              Capability RayTracingKHR
                               Extension  "SPV_KHR_ray_tracing"
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint RayGenerationKHR 4  "main" 11 21 29 40 51 54 57
+                              EntryPoint RayGenerationKHR 4  "main" 11 21 29 40 53 54 57
                               Source GLSL 460
                               SourceExtension  "GL_EXT_ray_flags_primitive_culling"
                               SourceExtension  "GL_EXT_ray_tracing"
@@ -24,9 +24,9 @@
                               MemberName 38(block) 0  "dir"
                               MemberName 38(block) 1  "origin"
                               Name 40  ""
-                              Name 51  "accEXT1"
-                              Name 54  "imageu"
-                              Name 57  "payload"
+                              Name 53  "payload"
+                              Name 54  "accEXT1"
+                              Name 57  "imageu"
                               Decorate 11(gl_LaunchIDEXT) BuiltIn LaunchIdKHR
                               Decorate 21(gl_LaunchSizeEXT) BuiltIn LaunchSizeKHR
                               Decorate 29(accEXT0) DescriptorSet 0
@@ -36,11 +36,11 @@
                               Decorate 38(block) Block
                               Decorate 40 DescriptorSet 0
                               Decorate 40 Binding 3
-                              Decorate 51(accEXT1) DescriptorSet 0
-                              Decorate 51(accEXT1) Binding 1
-                              Decorate 54(imageu) DescriptorSet 0
-                              Decorate 54(imageu) Binding 2
-                              Decorate 57(payload) Location 0
+                              Decorate 53(payload) Location 1
+                              Decorate 54(accEXT1) DescriptorSet 0
+                              Decorate 54(accEXT1) Binding 1
+                              Decorate 57(imageu) DescriptorSet 0
+                              Decorate 57(imageu) Binding 2
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 0
@@ -67,13 +67,13 @@
               46:   36(float) Constant 1056964608
               47:     41(int) Constant 0
               50:   36(float) Constant 1061158912
-     51(accEXT1):     28(ptr) Variable UniformConstant
-              52:             TypeImage 6(int) 2D nonsampled format:R32ui
-              53:             TypePointer UniformConstant 52
-      54(imageu):     53(ptr) Variable UniformConstant
-              55:             TypeVector 36(float) 4
-              56:             TypePointer RayPayloadKHR 55(fvec4)
-     57(payload):     56(ptr) Variable RayPayloadKHR
+              51:             TypeVector 36(float) 4
+              52:             TypePointer RayPayloadKHR 51(fvec4)
+     53(payload):     52(ptr) Variable RayPayloadKHR
+     54(accEXT1):     28(ptr) Variable UniformConstant
+              55:             TypeImage 6(int) 2D nonsampled format:R32ui
+              56:             TypePointer UniformConstant 55
+      57(imageu):     56(ptr) Variable UniformConstant
          4(main):           2 Function None 3
                5:             Label
            8(lx):      7(ptr) Variable Function
@@ -101,6 +101,6 @@
               45:   37(fvec3) Load 44
               48:     43(ptr) AccessChain 40 47
               49:   37(fvec3) Load 48
-                              TraceRayKHR 30 31 32 33 34 35 45 46 49 50 42
+                              TraceRayKHR 30 31 32 33 34 35 45 46 49 50 53(payload)
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.ext.RayGenShader11.rgen.out b/Test/baseResults/spv.ext.RayGenShader11.rgen.out
index cfaf529..00262ac 100644
--- a/Test/baseResults/spv.ext.RayGenShader11.rgen.out
+++ b/Test/baseResults/spv.ext.RayGenShader11.rgen.out
@@ -3,7 +3,7 @@
 // Generated by (magic number): 8000a
 // Id's are bound by 53
 
-                              Capability RayTracingProvisionalKHR
+                              Capability RayTracingKHR
                               Extension  "SPV_KHR_ray_tracing"
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
@@ -32,7 +32,7 @@
                               Decorate 37(block) Block
                               Decorate 39 DescriptorSet 0
                               Decorate 39 Binding 1
-                              Decorate 52(payload) Location 0
+                              Decorate 52(payload) Location 1
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 0
@@ -88,6 +88,6 @@
               44:   36(fvec3) Load 43
               47:     42(ptr) AccessChain 39 46
               48:   36(fvec3) Load 47
-                              TraceRayKHR 30 31 32 33 34 12 44 45 48 49 41
+                              TraceRayKHR 30 31 32 33 34 12 44 45 48 49 52(payload)
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.ext.RayGenShaderArray.rgen.out b/Test/baseResults/spv.ext.RayGenShaderArray.rgen.out
index 25d46a6..473937d 100644
--- a/Test/baseResults/spv.ext.RayGenShaderArray.rgen.out
+++ b/Test/baseResults/spv.ext.RayGenShaderArray.rgen.out
@@ -1,17 +1,19 @@
 spv.ext.RayGenShaderArray.rgen
 // Module Version 10400
 // Generated by (magic number): 8000a
-// Id's are bound by 89
+// Id's are bound by 117
 
+                              Capability Int64
+                              Capability RayTracingKHR
                               Capability ShaderNonUniformEXT
                               Capability RuntimeDescriptorArrayEXT
-                              Capability RayTracingProvisionalKHR
                               Extension  "SPV_EXT_descriptor_indexing"
                               Extension  "SPV_KHR_ray_tracing"
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint RayGenerationKHR 4  "main" 11 21 30 36 60 88
+                              EntryPoint RayGenerationKHR 4  "main" 11 21 30 38 61 65
                               Source GLSL 460
+                              SourceExtension  "GL_ARB_gpu_shader_int64"
                               SourceExtension  "GL_EXT_nonuniform_qualifier"
                               SourceExtension  "GL_EXT_ray_tracing"
                               Name 4  "main"
@@ -22,29 +24,33 @@
                               Name 21  "gl_LaunchSizeEXT"
                               Name 24  "sy"
                               Name 30  "accEXT0"
-                              Name 34  "block"
-                              MemberName 34(block) 0  "dir"
-                              MemberName 34(block) 1  "origin"
-                              MemberName 34(block) 2  "i"
-                              Name 36  ""
-                              Name 60  "accEXT1"
-                              Name 88  "payload"
+                              Name 36  "block"
+                              MemberName 36(block) 0  "dir"
+                              MemberName 36(block) 1  "origin"
+                              MemberName 36(block) 2  "i"
+                              MemberName 36(block) 3  "aHandle32"
+                              MemberName 36(block) 4  "aHandle64"
+                              Name 38  ""
+                              Name 61  "payload"
+                              Name 65  "accEXT1"
                               Decorate 11(gl_LaunchIDEXT) BuiltIn LaunchIdKHR
                               Decorate 21(gl_LaunchSizeEXT) BuiltIn LaunchSizeKHR
                               Decorate 30(accEXT0) DescriptorSet 0
                               Decorate 30(accEXT0) Binding 0
-                              MemberDecorate 34(block) 0 Offset 0
-                              MemberDecorate 34(block) 1 Offset 16
-                              MemberDecorate 34(block) 2 Offset 28
-                              Decorate 34(block) Block
-                              Decorate 36 DescriptorSet 0
-                              Decorate 36 Binding 2
-                              Decorate 60(accEXT1) DescriptorSet 0
-                              Decorate 60(accEXT1) Binding 1
-                              Decorate 75 DecorationNonUniformEXT
-                              Decorate 76 DecorationNonUniformEXT
-                              Decorate 77 DecorationNonUniformEXT
-                              Decorate 88(payload) Location 0
+                              MemberDecorate 36(block) 0 Offset 0
+                              MemberDecorate 36(block) 1 Offset 16
+                              MemberDecorate 36(block) 2 Offset 28
+                              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
+                              Decorate 80 DecorationNonUniformEXT
+                              Decorate 81 DecorationNonUniformEXT
+                              Decorate 82 DecorationNonUniformEXT
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 0
@@ -63,24 +69,30 @@
               31:             TypeFloat 32
               32:             TypeVector 31(float) 3
               33:             TypeInt 32 1
-       34(block):             TypeStruct 32(fvec3) 32(fvec3) 33(int)
-              35:             TypePointer ShaderRecordBufferKHR 34(block)
-              36:     35(ptr) Variable ShaderRecordBufferKHR
-              37:     33(int) Constant 2
-              38:             TypePointer ShaderRecordBufferKHR 33(int)
-              41:             TypePointer UniformConstant 27
-              48:     33(int) Constant 1
-              49:             TypePointer ShaderRecordBufferKHR 32(fvec3)
-              52:   31(float) Constant 1056964608
-              53:     33(int) Constant 0
-              56:   31(float) Constant 1061158912
-              57:      6(int) Constant 2
-              58:             TypeArray 27 57
-              59:             TypePointer UniformConstant 58
-     60(accEXT1):     59(ptr) Variable UniformConstant
-              86:             TypeVector 31(float) 4
-              87:             TypePointer RayPayloadKHR 86(fvec4)
-     88(payload):     87(ptr) Variable RayPayloadKHR
+              34:             TypeVector 6(int) 2
+              35:             TypeInt 64 0
+       36(block):             TypeStruct 32(fvec3) 32(fvec3) 33(int) 34(ivec2) 35(int64_t)
+              37:             TypePointer ShaderRecordBufferKHR 36(block)
+              38:     37(ptr) Variable ShaderRecordBufferKHR
+              39:     33(int) Constant 2
+              40:             TypePointer ShaderRecordBufferKHR 33(int)
+              43:             TypePointer UniformConstant 27
+              50:     33(int) Constant 1
+              51:             TypePointer ShaderRecordBufferKHR 32(fvec3)
+              54:   31(float) Constant 1056964608
+              55:     33(int) Constant 0
+              58:   31(float) Constant 1061158912
+              59:             TypeVector 31(float) 4
+              60:             TypePointer RayPayloadKHR 59(fvec4)
+     61(payload):     60(ptr) Variable RayPayloadKHR
+              62:      6(int) Constant 2
+              63:             TypeArray 27 62
+              64:             TypePointer UniformConstant 63
+     65(accEXT1):     64(ptr) Variable UniformConstant
+              91:     33(int) Constant 3
+              92:             TypePointer ShaderRecordBufferKHR 34(ivec2)
+             104:     33(int) Constant 4
+             105:             TypePointer ShaderRecordBufferKHR 35(int64_t)
          4(main):           2 Function None 3
                5:             Label
            8(lx):      7(ptr) Variable Function
@@ -99,45 +111,69 @@
               25:     13(ptr) AccessChain 21(gl_LaunchSizeEXT) 17
               26:      6(int) Load 25
                               Store 24(sy) 26
-              39:     38(ptr) AccessChain 36 37
-              40:     33(int) Load 39
-              42:     41(ptr) AccessChain 30(accEXT0) 40
-              43:          27 Load 42
-              44:      6(int) Load 8(lx)
-              45:      6(int) Load 16(ly)
-              46:      6(int) Load 20(sx)
-              47:      6(int) Load 24(sy)
-              50:     49(ptr) AccessChain 36 48
-              51:   32(fvec3) Load 50
-              54:     49(ptr) AccessChain 36 53
-              55:   32(fvec3) Load 54
-                              TraceRayKHR 43 44 45 46 47 12 51 52 55 56 48
-              61:     38(ptr) AccessChain 36 37
-              62:     33(int) Load 61
-              63:     41(ptr) AccessChain 60(accEXT1) 62
-              64:          27 Load 63
-              65:      6(int) Load 8(lx)
-              66:      6(int) Load 16(ly)
-              67:      6(int) Load 20(sx)
-              68:      6(int) Load 24(sy)
-              69:     49(ptr) AccessChain 36 48
-              70:   32(fvec3) Load 69
-              71:     49(ptr) AccessChain 36 53
-              72:   32(fvec3) Load 71
-                              TraceRayKHR 64 65 66 67 68 12 70 52 72 56 48
-              73:     38(ptr) AccessChain 36 37
-              74:     33(int) Load 73
-              75:     33(int) CopyObject 74
-              76:     41(ptr) AccessChain 30(accEXT0) 75
-              77:          27 Load 76
-              78:      6(int) Load 8(lx)
-              79:      6(int) Load 16(ly)
-              80:      6(int) Load 20(sx)
-              81:      6(int) Load 24(sy)
-              82:     49(ptr) AccessChain 36 48
-              83:   32(fvec3) Load 82
-              84:     49(ptr) AccessChain 36 53
-              85:   32(fvec3) Load 84
-                              TraceRayKHR 77 78 79 80 81 12 83 52 85 56 48
+              41:     40(ptr) AccessChain 38 39
+              42:     33(int) Load 41
+              44:     43(ptr) AccessChain 30(accEXT0) 42
+              45:          27 Load 44
+              46:      6(int) Load 8(lx)
+              47:      6(int) Load 16(ly)
+              48:      6(int) Load 20(sx)
+              49:      6(int) Load 24(sy)
+              52:     51(ptr) AccessChain 38 50
+              53:   32(fvec3) Load 52
+              56:     51(ptr) AccessChain 38 55
+              57:   32(fvec3) Load 56
+                              TraceRayKHR 45 46 47 48 49 12 53 54 57 58 61(payload)
+              66:     40(ptr) AccessChain 38 39
+              67:     33(int) Load 66
+              68:     43(ptr) AccessChain 65(accEXT1) 67
+              69:          27 Load 68
+              70:      6(int) Load 8(lx)
+              71:      6(int) Load 16(ly)
+              72:      6(int) Load 20(sx)
+              73:      6(int) Load 24(sy)
+              74:     51(ptr) AccessChain 38 50
+              75:   32(fvec3) Load 74
+              76:     51(ptr) AccessChain 38 55
+              77:   32(fvec3) Load 76
+                              TraceRayKHR 69 70 71 72 73 12 75 54 77 58 61(payload)
+              78:     40(ptr) AccessChain 38 39
+              79:     33(int) Load 78
+              80:     33(int) CopyObject 79
+              81:     43(ptr) AccessChain 30(accEXT0) 80
+              82:          27 Load 81
+              83:      6(int) Load 8(lx)
+              84:      6(int) Load 16(ly)
+              85:      6(int) Load 20(sx)
+              86:      6(int) Load 24(sy)
+              87:     51(ptr) AccessChain 38 50
+              88:   32(fvec3) Load 87
+              89:     51(ptr) AccessChain 38 55
+              90:   32(fvec3) Load 89
+                              TraceRayKHR 82 83 84 85 86 12 88 54 90 58 61(payload)
+              93:     92(ptr) AccessChain 38 91
+              94:   34(ivec2) Load 93
+              95:          27 ConvertUToAccelerationStructureKHR 94
+              96:      6(int) Load 8(lx)
+              97:      6(int) Load 16(ly)
+              98:      6(int) Load 20(sx)
+              99:      6(int) Load 24(sy)
+             100:     51(ptr) AccessChain 38 50
+             101:   32(fvec3) Load 100
+             102:     51(ptr) AccessChain 38 55
+             103:   32(fvec3) Load 102
+                              TraceRayKHR 95 96 97 98 99 12 101 54 103 58 61(payload)
+             106:    105(ptr) AccessChain 38 104
+             107: 35(int64_t) Load 106
+             108:          27 ConvertUToAccelerationStructureKHR 107
+             109:      6(int) Load 8(lx)
+             110:      6(int) Load 16(ly)
+             111:      6(int) Load 20(sx)
+             112:      6(int) Load 24(sy)
+             113:     51(ptr) AccessChain 38 50
+             114:   32(fvec3) Load 113
+             115:     51(ptr) AccessChain 38 55
+             116:   32(fvec3) Load 115
+                              TraceRayKHR 108 109 110 111 112 12 114 54 116 58 61(payload)
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.ext.RayGenShader_Errors.rgen.out b/Test/baseResults/spv.ext.RayGenShader_Errors.rgen.out
index 6dc7480..3f336bb 100644
--- a/Test/baseResults/spv.ext.RayGenShader_Errors.rgen.out
+++ b/Test/baseResults/spv.ext.RayGenShader_Errors.rgen.out
@@ -4,8 +4,9 @@
 ERROR: 0:5: 'shaderRecordNV' : can only be used with a buffer 
 ERROR: 0:9: 'binding' : cannot be used with shaderRecordNV 
 ERROR: 0:12: 'set' : cannot be used with shaderRecordNV 
+ERROR: 0:23: ' temp accelerationStructureNV' : cannot construct with these arguments 
 ERROR: 0:23: 'accelerationStructureNV' : accelerationStructureNV can only be used in uniform variables or function parameters: a
-ERROR: 0:23: '=' :  cannot convert from ' const int' to ' temp accelerationStructureNV'
+ERROR: 0:23: '=' :  cannot convert from ' const float' to ' temp accelerationStructureNV'
 ERROR: 0:24: 'gl_PrimitiveID' : undeclared identifier 
 ERROR: 0:24: '=' :  cannot convert from ' temp float' to ' temp highp int'
 ERROR: 0:25: 'gl_InstanceID' : undeclared identifier (Did you mean gl_InstanceIndex?)
@@ -28,11 +29,13 @@
 ERROR: 0:34: '=' :  cannot convert from ' temp float' to ' temp highp 4X3 matrix of float'
 ERROR: 0:35: 'gl_HitTEXT' : undeclared identifier 
 ERROR: 0:36: 'gl_HitKindEXT' : undeclared identifier 
-ERROR: 0:37: 'reportIntersectionEXT' : no matching overloaded function found 
-ERROR: 0:38: 'ignoreIntersectionEXT' : no matching overloaded function found 
-ERROR: 0:39: 'terminateRayEXT' : no matching overloaded function found 
-ERROR: 0:40: 'assign' :  l-value required "anon@3" (can't modify a shaderrecordnv qualified buffer)
-ERROR: 33 compilation errors.  No code generated.
+ERROR: 0:37: 'gl_RayFlagsSkipAABBEXT' : required extension not requested: GL_EXT_ray_flags_primitive_culling
+ERROR: 0:37: '=' :  cannot convert from ' const uint' to ' temp highp int'
+ERROR: 0:38: 'reportIntersectionEXT' : no matching overloaded function found 
+ERROR: 0:39: 'ignoreIntersectionEXT' : not supported in this stage: ray-generation
+ERROR: 0:40: 'terminateRayEXT' : not supported in this stage: ray-generation
+ERROR: 0:41: 'assign' :  l-value required "anon@3" (can't modify a shaderrecordnv qualified buffer)
+ERROR: 36 compilation errors.  No code generated.
 
 
 ERROR: Linking ray-generation stage: Only one shaderRecordNV buffer block is allowed per stage
diff --git a/Test/baseResults/spv.ext.RayQueryDecl.frag.out b/Test/baseResults/spv.ext.RayQueryDecl.frag.out
new file mode 100644
index 0000000..97681e9
--- /dev/null
+++ b/Test/baseResults/spv.ext.RayQueryDecl.frag.out
@@ -0,0 +1,39 @@
+spv.ext.RayQueryDecl.frag
+// Module Version 10400
+// Generated by (magic number): 8000a
+// Id's are bound by 15
+
+                              Capability Shader
+                              Capability RayQueryKHR
+                              Extension  "SPV_KHR_ray_query"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 9 14
+                              ExecutionMode 4 OriginUpperLeft
+                              Source GLSL 460
+                              SourceExtension  "GL_ARB_separate_shader_objects"
+                              SourceExtension  "GL_EXT_nonuniform_qualifier"
+                              SourceExtension  "GL_EXT_ray_query"
+                              SourceExtension  "GL_EXT_scalar_block_layout"
+                              SourceExtension  "GL_GOOGLE_cpp_style_line_directive"
+                              SourceExtension  "GL_GOOGLE_include_directive"
+                              Name 4  "main"
+                              Name 9  "outColor"
+                              Name 14  "rq"
+                              Decorate 9(outColor) Location 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypePointer Output 7(fvec4)
+     9(outColor):      8(ptr) Variable Output
+              10:    6(float) Constant 0
+              11:    7(fvec4) ConstantComposite 10 10 10 10
+              12:             TypeRayQueryKHR
+              13:             TypePointer Private 12
+          14(rq):     13(ptr) Variable Private
+         4(main):           2 Function None 3
+               5:             Label
+                              Store 9(outColor) 11
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.ext.World3x4.rahit.out b/Test/baseResults/spv.ext.World3x4.rahit.out
old mode 100755
new mode 100644
index ad877bd..40d73d1
--- a/Test/baseResults/spv.ext.World3x4.rahit.out
+++ b/Test/baseResults/spv.ext.World3x4.rahit.out
@@ -3,7 +3,7 @@
 // Generated by (magic number): 8000a
 // Id's are bound by 90
 
-                              Capability RayTracingProvisionalKHR
+                              Capability RayTracingKHR
                               Extension  "SPV_KHR_ray_tracing"
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
diff --git a/Test/baseResults/spv.imageAtomic64.frag.out b/Test/baseResults/spv.imageAtomic64.frag.out
new file mode 100644
index 0000000..3083697
--- /dev/null
+++ b/Test/baseResults/spv.imageAtomic64.frag.out
@@ -0,0 +1,634 @@
+spv.imageAtomic64.frag
+Validation failed
+// Module Version 10000
+// Generated by (magic number): 8000a
+// Id's are bound by 503
+
+                              Capability Shader
+                              Capability Int64
+                              Capability Int64Atomics
+                              Capability StorageImageMultisample
+                              Capability ImageCubeArray
+                              Capability ImageRect
+                              Capability SparseResidency
+                              Capability Image1D
+                              Capability ImageBuffer
+                              Capability ImageMSArray
+                              Capability Int64ImageEXT
+                              Extension  "SPV_EXT_shader_image_int64"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main"
+                              ExecutionMode 4 OriginUpperLeft
+                              Source GLSL 450
+                              SourceExtension  "GL_ARB_gpu_shader_int64"
+                              SourceExtension  "GL_ARB_sparse_texture2"
+                              SourceExtension  "GL_EXT_shader_image_int64"
+                              SourceExtension  "GL_KHR_memory_scope_semantics"
+                              Name 4  "main"
+                              Name 12  "Buf"
+                              MemberName 12(Buf) 0  "i64"
+                              MemberName 12(Buf) 1  "u64"
+                              MemberName 12(Buf) 2  "i64v4"
+                              MemberName 12(Buf) 3  "u64v4"
+                              MemberName 12(Buf) 4  "i32v4"
+                              Name 14  ""
+                              Name 18  "i1D"
+                              Name 35  "i3D"
+                              Name 48  "iBuf"
+                              Name 58  "i2DArray"
+                              Name 69  "i2DRect"
+                              Name 81  "i2DMSArray"
+                              Name 194  "u2D"
+                              Name 207  "uCube"
+                              Name 218  "u1DArray"
+                              Name 229  "uCubeArray"
+                              Name 240  "u2DMS"
+                              Name 458  "ResType"
+                              Name 483  "ResType"
+                              MemberDecorate 12(Buf) 0 Offset 0
+                              MemberDecorate 12(Buf) 1 Offset 8
+                              MemberDecorate 12(Buf) 2 Offset 32
+                              MemberDecorate 12(Buf) 3 Offset 64
+                              MemberDecorate 12(Buf) 4 Offset 96
+                              Decorate 12(Buf) BufferBlock
+                              Decorate 14 DescriptorSet 0
+                              Decorate 14 Binding 11
+                              Decorate 18(i1D) DescriptorSet 0
+                              Decorate 18(i1D) Binding 0
+                              Decorate 35(i3D) DescriptorSet 0
+                              Decorate 35(i3D) Binding 2
+                              Decorate 48(iBuf) DescriptorSet 0
+                              Decorate 48(iBuf) Binding 4
+                              Decorate 58(i2DArray) DescriptorSet 0
+                              Decorate 58(i2DArray) Binding 6
+                              Decorate 69(i2DRect) DescriptorSet 0
+                              Decorate 69(i2DRect) Binding 8
+                              Decorate 81(i2DMSArray) DescriptorSet 0
+                              Decorate 81(i2DMSArray) Binding 10
+                              Decorate 194(u2D) DescriptorSet 0
+                              Decorate 194(u2D) Binding 1
+                              Decorate 207(uCube) DescriptorSet 0
+                              Decorate 207(uCube) Binding 3
+                              Decorate 218(u1DArray) DescriptorSet 0
+                              Decorate 218(u1DArray) Binding 5
+                              Decorate 229(uCubeArray) DescriptorSet 0
+                              Decorate 229(uCubeArray) Binding 7
+                              Decorate 240(u2DMS) DescriptorSet 0
+                              Decorate 240(u2DMS) Binding 9
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 64 1
+               7:             TypeInt 64 0
+               8:             TypeVector 6(int64_t) 4
+               9:             TypeVector 7(int64_t) 4
+              10:             TypeInt 32 1
+              11:             TypeVector 10(int) 4
+         12(Buf):             TypeStruct 6(int64_t) 7(int64_t) 8(i64vec4) 9(i64vec4) 11(ivec4)
+              13:             TypePointer Uniform 12(Buf)
+              14:     13(ptr) Variable Uniform
+              15:     10(int) Constant 0
+              16:             TypeImage 6(int64_t) 1D nonsampled format:R64i
+              17:             TypePointer UniformConstant 16
+         18(i1D):     17(ptr) Variable UniformConstant
+              19:     10(int) Constant 4
+              20:             TypeInt 32 0
+              21:     20(int) Constant 0
+              22:             TypePointer Uniform 10(int)
+              25:             TypePointer Uniform 6(int64_t)
+              28:             TypePointer Image 6(int64_t)
+              30:     20(int) Constant 1
+              33:             TypeImage 6(int64_t) 3D nonsampled format:R64i
+              34:             TypePointer UniformConstant 33
+         35(i3D):     34(ptr) Variable UniformConstant
+              36:             TypeVector 10(int) 3
+              37:             TypePointer Uniform 11(ivec4)
+              46:             TypeImage 6(int64_t) Buffer nonsampled format:R64i
+              47:             TypePointer UniformConstant 46
+        48(iBuf):     47(ptr) Variable UniformConstant
+              56:             TypeImage 6(int64_t) 2D array nonsampled format:R64i
+              57:             TypePointer UniformConstant 56
+    58(i2DArray):     57(ptr) Variable UniformConstant
+              67:             TypeImage 6(int64_t) Rect nonsampled format:R64i
+              68:             TypePointer UniformConstant 67
+     69(i2DRect):     68(ptr) Variable UniformConstant
+              70:             TypeVector 10(int) 2
+              79:             TypeImage 6(int64_t) 2D array multi-sampled nonsampled format:R64i
+              80:             TypePointer UniformConstant 79
+  81(i2DMSArray):     80(ptr) Variable UniformConstant
+              85:     20(int) Constant 3
+             107:  6(int64_t) Constant 1 0
+             116:     10(int) Constant 1
+             117:     10(int) Constant 2048
+             119:     20(int) Constant 2048
+             192:             TypeImage 7(int64_t) 2D nonsampled format:R64ui
+             193:             TypePointer UniformConstant 192
+        194(u2D):    193(ptr) Variable UniformConstant
+             198:             TypePointer Uniform 7(int64_t)
+             201:             TypePointer Image 7(int64_t)
+             205:             TypeImage 7(int64_t) Cube nonsampled format:R64ui
+             206:             TypePointer UniformConstant 205
+      207(uCube):    206(ptr) Variable UniformConstant
+             216:             TypeImage 7(int64_t) 1D array nonsampled format:R64ui
+             217:             TypePointer UniformConstant 216
+   218(u1DArray):    217(ptr) Variable UniformConstant
+             227:             TypeImage 7(int64_t) Cube array nonsampled format:R64ui
+             228:             TypePointer UniformConstant 227
+ 229(uCubeArray):    228(ptr) Variable UniformConstant
+             238:             TypeImage 7(int64_t) 2D multi-sampled nonsampled format:R64ui
+             239:             TypePointer UniformConstant 238
+      240(u2DMS):    239(ptr) Variable UniformConstant
+             244:     20(int) Constant 2
+             275:  7(int64_t) Constant 1 0
+             363:     10(int) Constant 2
+             368:             TypePointer Uniform 8(i64vec4)
+             423:     10(int) Constant 3
+             424:             TypePointer Uniform 9(i64vec4)
+    458(ResType):             TypeStruct 10(int) 8(i64vec4)
+    483(ResType):             TypeStruct 10(int) 9(i64vec4)
+         4(main):           2 Function None 3
+               5:             Label
+              23:     22(ptr) AccessChain 14 19 21
+              24:     10(int) Load 23
+              26:     25(ptr) AccessChain 14 15
+              27:  6(int64_t) Load 26
+              29:     28(ptr) ImageTexelPointer 18(i1D) 24 21
+              31:  6(int64_t) AtomicIAdd 29 30 21 27
+              32:     25(ptr) AccessChain 14 15
+                              Store 32 31
+              38:     37(ptr) AccessChain 14 19
+              39:   11(ivec4) Load 38
+              40:   36(ivec3) VectorShuffle 39 39 0 1 2
+              41:     25(ptr) AccessChain 14 15
+              42:  6(int64_t) Load 41
+              43:     28(ptr) ImageTexelPointer 35(i3D) 40 21
+              44:  6(int64_t) AtomicSMin 43 30 21 42
+              45:     25(ptr) AccessChain 14 15
+                              Store 45 44
+              49:     22(ptr) AccessChain 14 19 21
+              50:     10(int) Load 49
+              51:     25(ptr) AccessChain 14 15
+              52:  6(int64_t) Load 51
+              53:     28(ptr) ImageTexelPointer 48(iBuf) 50 21
+              54:  6(int64_t) AtomicSMax 53 30 21 52
+              55:     25(ptr) AccessChain 14 15
+                              Store 55 54
+              59:     37(ptr) AccessChain 14 19
+              60:   11(ivec4) Load 59
+              61:   36(ivec3) VectorShuffle 60 60 0 1 2
+              62:     25(ptr) AccessChain 14 15
+              63:  6(int64_t) Load 62
+              64:     28(ptr) ImageTexelPointer 58(i2DArray) 61 21
+              65:  6(int64_t) AtomicAnd 64 30 21 63
+              66:     25(ptr) AccessChain 14 15
+                              Store 66 65
+              71:     37(ptr) AccessChain 14 19
+              72:   11(ivec4) Load 71
+              73:   70(ivec2) VectorShuffle 72 72 0 1
+              74:     25(ptr) AccessChain 14 15
+              75:  6(int64_t) Load 74
+              76:     28(ptr) ImageTexelPointer 69(i2DRect) 73 21
+              77:  6(int64_t) AtomicOr 76 30 21 75
+              78:     25(ptr) AccessChain 14 15
+                              Store 78 77
+              82:     37(ptr) AccessChain 14 19
+              83:   11(ivec4) Load 82
+              84:   36(ivec3) VectorShuffle 83 83 0 1 2
+              86:     22(ptr) AccessChain 14 19 85
+              87:     10(int) Load 86
+              88:     25(ptr) AccessChain 14 15
+              89:  6(int64_t) Load 88
+              90:     28(ptr) ImageTexelPointer 81(i2DMSArray) 84 87
+              91:  6(int64_t) AtomicXor 90 30 21 89
+              92:     25(ptr) AccessChain 14 15
+                              Store 92 91
+              93:     22(ptr) AccessChain 14 19 21
+              94:     10(int) Load 93
+              95:     25(ptr) AccessChain 14 15
+              96:  6(int64_t) Load 95
+              97:     28(ptr) ImageTexelPointer 18(i1D) 94 21
+              98:  6(int64_t) AtomicExchange 97 30 21 96
+              99:     25(ptr) AccessChain 14 15
+                              Store 99 98
+             100:     37(ptr) AccessChain 14 19
+             101:   11(ivec4) Load 100
+             102:   36(ivec3) VectorShuffle 101 101 0 1 2
+             103:     25(ptr) AccessChain 14 15
+             104:  6(int64_t) Load 103
+             105:     25(ptr) AccessChain 14 15
+             106:  6(int64_t) Load 105
+             108:  6(int64_t) IAdd 106 107
+             109:     28(ptr) ImageTexelPointer 35(i3D) 102 21
+             110:  6(int64_t) AtomicCompareExchange 109 30 21 21 108 104
+             111:     25(ptr) AccessChain 14 15
+                              Store 111 110
+             112:     22(ptr) AccessChain 14 19 21
+             113:     10(int) Load 112
+             114:     25(ptr) AccessChain 14 15
+             115:  6(int64_t) Load 114
+             118:     28(ptr) ImageTexelPointer 18(i1D) 113 21
+             120:  6(int64_t) AtomicIAdd 118 116 119 115
+             121:     25(ptr) AccessChain 14 15
+                              Store 121 120
+             122:     37(ptr) AccessChain 14 19
+             123:   11(ivec4) Load 122
+             124:   36(ivec3) VectorShuffle 123 123 0 1 2
+             125:     25(ptr) AccessChain 14 15
+             126:  6(int64_t) Load 125
+             127:     28(ptr) ImageTexelPointer 35(i3D) 124 21
+             128:  6(int64_t) AtomicSMin 127 116 119 126
+             129:     25(ptr) AccessChain 14 15
+                              Store 129 128
+             130:     22(ptr) AccessChain 14 19 21
+             131:     10(int) Load 130
+             132:     25(ptr) AccessChain 14 15
+             133:  6(int64_t) Load 132
+             134:     28(ptr) ImageTexelPointer 48(iBuf) 131 21
+             135:  6(int64_t) AtomicSMax 134 116 119 133
+             136:     25(ptr) AccessChain 14 15
+                              Store 136 135
+             137:     37(ptr) AccessChain 14 19
+             138:   11(ivec4) Load 137
+             139:   36(ivec3) VectorShuffle 138 138 0 1 2
+             140:     25(ptr) AccessChain 14 15
+             141:  6(int64_t) Load 140
+             142:     28(ptr) ImageTexelPointer 58(i2DArray) 139 21
+             143:  6(int64_t) AtomicAnd 142 116 119 141
+             144:     25(ptr) AccessChain 14 15
+                              Store 144 143
+             145:     37(ptr) AccessChain 14 19
+             146:   11(ivec4) Load 145
+             147:   70(ivec2) VectorShuffle 146 146 0 1
+             148:     25(ptr) AccessChain 14 15
+             149:  6(int64_t) Load 148
+             150:     28(ptr) ImageTexelPointer 69(i2DRect) 147 21
+             151:  6(int64_t) AtomicOr 150 116 119 149
+             152:     25(ptr) AccessChain 14 15
+                              Store 152 151
+             153:     37(ptr) AccessChain 14 19
+             154:   11(ivec4) Load 153
+             155:   36(ivec3) VectorShuffle 154 154 0 1 2
+             156:     22(ptr) AccessChain 14 19 85
+             157:     10(int) Load 156
+             158:     25(ptr) AccessChain 14 15
+             159:  6(int64_t) Load 158
+             160:     28(ptr) ImageTexelPointer 81(i2DMSArray) 155 157
+             161:  6(int64_t) AtomicXor 160 116 119 159
+             162:     25(ptr) AccessChain 14 15
+                              Store 162 161
+             163:     22(ptr) AccessChain 14 19 21
+             164:     10(int) Load 163
+             165:     25(ptr) AccessChain 14 15
+             166:  6(int64_t) Load 165
+             167:     28(ptr) ImageTexelPointer 18(i1D) 164 21
+             168:  6(int64_t) AtomicExchange 167 116 119 166
+             169:     25(ptr) AccessChain 14 15
+                              Store 169 168
+             170:     37(ptr) AccessChain 14 19
+             171:   11(ivec4) Load 170
+             172:   36(ivec3) VectorShuffle 171 171 0 1 2
+             173:     25(ptr) AccessChain 14 15
+             174:  6(int64_t) Load 173
+             175:     25(ptr) AccessChain 14 15
+             176:  6(int64_t) Load 175
+             177:  6(int64_t) IAdd 176 107
+             178:     28(ptr) ImageTexelPointer 35(i3D) 172 21
+             179:  6(int64_t) AtomicCompareExchange 178 116 119 119 177 174
+             180:     25(ptr) AccessChain 14 15
+                              Store 180 179
+             181:     22(ptr) AccessChain 14 19 21
+             182:     10(int) Load 181
+             183:     28(ptr) ImageTexelPointer 48(iBuf) 182 21
+             184:  6(int64_t) AtomicLoad 183 116 119
+             185:     25(ptr) AccessChain 14 15
+                              Store 185 184
+             186:     37(ptr) AccessChain 14 19
+             187:   11(ivec4) Load 186
+             188:   36(ivec3) VectorShuffle 187 187 0 1 2
+             189:     25(ptr) AccessChain 14 15
+             190:  6(int64_t) Load 189
+             191:     28(ptr) ImageTexelPointer 58(i2DArray) 188 21
+                              AtomicStore 191 116 119 190
+             195:     37(ptr) AccessChain 14 19
+             196:   11(ivec4) Load 195
+             197:   70(ivec2) VectorShuffle 196 196 0 1
+             199:    198(ptr) AccessChain 14 116
+             200:  7(int64_t) Load 199
+             202:    201(ptr) ImageTexelPointer 194(u2D) 197 21
+             203:  7(int64_t) AtomicIAdd 202 30 21 200
+             204:    198(ptr) AccessChain 14 116
+                              Store 204 203
+             208:     37(ptr) AccessChain 14 19
+             209:   11(ivec4) Load 208
+             210:   36(ivec3) VectorShuffle 209 209 0 1 2
+             211:    198(ptr) AccessChain 14 116
+             212:  7(int64_t) Load 211
+             213:    201(ptr) ImageTexelPointer 207(uCube) 210 21
+             214:  7(int64_t) AtomicUMin 213 30 21 212
+             215:    198(ptr) AccessChain 14 116
+                              Store 215 214
+             219:     37(ptr) AccessChain 14 19
+             220:   11(ivec4) Load 219
+             221:   70(ivec2) VectorShuffle 220 220 0 1
+             222:    198(ptr) AccessChain 14 116
+             223:  7(int64_t) Load 222
+             224:    201(ptr) ImageTexelPointer 218(u1DArray) 221 21
+             225:  7(int64_t) AtomicUMax 224 30 21 223
+             226:    198(ptr) AccessChain 14 116
+                              Store 226 225
+             230:     37(ptr) AccessChain 14 19
+             231:   11(ivec4) Load 230
+             232:   36(ivec3) VectorShuffle 231 231 0 1 2
+             233:    198(ptr) AccessChain 14 116
+             234:  7(int64_t) Load 233
+             235:    201(ptr) ImageTexelPointer 229(uCubeArray) 232 21
+             236:  7(int64_t) AtomicAnd 235 30 21 234
+             237:    198(ptr) AccessChain 14 116
+                              Store 237 236
+             241:     37(ptr) AccessChain 14 19
+             242:   11(ivec4) Load 241
+             243:   70(ivec2) VectorShuffle 242 242 0 1
+             245:     22(ptr) AccessChain 14 19 244
+             246:     10(int) Load 245
+             247:    198(ptr) AccessChain 14 116
+             248:  7(int64_t) Load 247
+             249:    201(ptr) ImageTexelPointer 240(u2DMS) 243 246
+             250:  7(int64_t) AtomicOr 249 30 21 248
+             251:    198(ptr) AccessChain 14 116
+                              Store 251 250
+             252:     37(ptr) AccessChain 14 19
+             253:   11(ivec4) Load 252
+             254:   70(ivec2) VectorShuffle 253 253 0 1
+             255:    198(ptr) AccessChain 14 116
+             256:  7(int64_t) Load 255
+             257:    201(ptr) ImageTexelPointer 194(u2D) 254 21
+             258:  7(int64_t) AtomicXor 257 30 21 256
+             259:    198(ptr) AccessChain 14 116
+                              Store 259 258
+             260:     37(ptr) AccessChain 14 19
+             261:   11(ivec4) Load 260
+             262:   36(ivec3) VectorShuffle 261 261 0 1 2
+             263:    198(ptr) AccessChain 14 116
+             264:  7(int64_t) Load 263
+             265:    201(ptr) ImageTexelPointer 207(uCube) 262 21
+             266:  7(int64_t) AtomicExchange 265 30 21 264
+             267:    198(ptr) AccessChain 14 116
+                              Store 267 266
+             268:     37(ptr) AccessChain 14 19
+             269:   11(ivec4) Load 268
+             270:   70(ivec2) VectorShuffle 269 269 0 1
+             271:    198(ptr) AccessChain 14 116
+             272:  7(int64_t) Load 271
+             273:    198(ptr) AccessChain 14 116
+             274:  7(int64_t) Load 273
+             276:  7(int64_t) IAdd 274 275
+             277:    201(ptr) ImageTexelPointer 218(u1DArray) 270 21
+             278:  7(int64_t) AtomicCompareExchange 277 30 21 21 276 272
+             279:    198(ptr) AccessChain 14 116
+                              Store 279 278
+             280:     37(ptr) AccessChain 14 19
+             281:   11(ivec4) Load 280
+             282:   70(ivec2) VectorShuffle 281 281 0 1
+             283:    198(ptr) AccessChain 14 116
+             284:  7(int64_t) Load 283
+             285:    201(ptr) ImageTexelPointer 194(u2D) 282 21
+             286:  7(int64_t) AtomicIAdd 285 116 119 284
+             287:    198(ptr) AccessChain 14 116
+                              Store 287 286
+             288:     37(ptr) AccessChain 14 19
+             289:   11(ivec4) Load 288
+             290:   36(ivec3) VectorShuffle 289 289 0 1 2
+             291:    198(ptr) AccessChain 14 116
+             292:  7(int64_t) Load 291
+             293:    201(ptr) ImageTexelPointer 207(uCube) 290 21
+             294:  7(int64_t) AtomicUMin 293 116 119 292
+             295:    198(ptr) AccessChain 14 116
+                              Store 295 294
+             296:     37(ptr) AccessChain 14 19
+             297:   11(ivec4) Load 296
+             298:   70(ivec2) VectorShuffle 297 297 0 1
+             299:    198(ptr) AccessChain 14 116
+             300:  7(int64_t) Load 299
+             301:    201(ptr) ImageTexelPointer 218(u1DArray) 298 21
+             302:  7(int64_t) AtomicUMax 301 116 119 300
+             303:    198(ptr) AccessChain 14 116
+                              Store 303 302
+             304:     37(ptr) AccessChain 14 19
+             305:   11(ivec4) Load 304
+             306:   36(ivec3) VectorShuffle 305 305 0 1 2
+             307:    198(ptr) AccessChain 14 116
+             308:  7(int64_t) Load 307
+             309:    201(ptr) ImageTexelPointer 229(uCubeArray) 306 21
+             310:  7(int64_t) AtomicAnd 309 116 119 308
+             311:    198(ptr) AccessChain 14 116
+                              Store 311 310
+             312:     37(ptr) AccessChain 14 19
+             313:   11(ivec4) Load 312
+             314:   70(ivec2) VectorShuffle 313 313 0 1
+             315:     22(ptr) AccessChain 14 19 244
+             316:     10(int) Load 315
+             317:    198(ptr) AccessChain 14 116
+             318:  7(int64_t) Load 317
+             319:    201(ptr) ImageTexelPointer 240(u2DMS) 314 316
+             320:  7(int64_t) AtomicOr 319 116 119 318
+             321:    198(ptr) AccessChain 14 116
+                              Store 321 320
+             322:     37(ptr) AccessChain 14 19
+             323:   11(ivec4) Load 322
+             324:   70(ivec2) VectorShuffle 323 323 0 1
+             325:    198(ptr) AccessChain 14 116
+             326:  7(int64_t) Load 325
+             327:    201(ptr) ImageTexelPointer 194(u2D) 324 21
+             328:  7(int64_t) AtomicXor 327 116 119 326
+             329:    198(ptr) AccessChain 14 116
+                              Store 329 328
+             330:     37(ptr) AccessChain 14 19
+             331:   11(ivec4) Load 330
+             332:   36(ivec3) VectorShuffle 331 331 0 1 2
+             333:    198(ptr) AccessChain 14 116
+             334:  7(int64_t) Load 333
+             335:    201(ptr) ImageTexelPointer 207(uCube) 332 21
+             336:  7(int64_t) AtomicExchange 335 116 119 334
+             337:    198(ptr) AccessChain 14 116
+                              Store 337 336
+             338:     37(ptr) AccessChain 14 19
+             339:   11(ivec4) Load 338
+             340:   70(ivec2) VectorShuffle 339 339 0 1
+             341:    198(ptr) AccessChain 14 116
+             342:  7(int64_t) Load 341
+             343:    198(ptr) AccessChain 14 116
+             344:  7(int64_t) Load 343
+             345:  7(int64_t) IAdd 344 275
+             346:    201(ptr) ImageTexelPointer 218(u1DArray) 340 21
+             347:  7(int64_t) AtomicCompareExchange 346 116 119 119 345 342
+             348:    198(ptr) AccessChain 14 116
+                              Store 348 347
+             349:     37(ptr) AccessChain 14 19
+             350:   11(ivec4) Load 349
+             351:   36(ivec3) VectorShuffle 350 350 0 1 2
+             352:    201(ptr) ImageTexelPointer 229(uCubeArray) 351 21
+             353:  7(int64_t) AtomicLoad 352 116 119
+             354:    198(ptr) AccessChain 14 116
+                              Store 354 353
+             355:     37(ptr) AccessChain 14 19
+             356:   11(ivec4) Load 355
+             357:   70(ivec2) VectorShuffle 356 356 0 1
+             358:     22(ptr) AccessChain 14 19 244
+             359:     10(int) Load 358
+             360:    198(ptr) AccessChain 14 116
+             361:  7(int64_t) Load 360
+             362:    201(ptr) ImageTexelPointer 240(u2DMS) 357 359
+                              AtomicStore 362 116 119 361
+             364:          16 Load 18(i1D)
+             365:     22(ptr) AccessChain 14 19 21
+             366:     10(int) Load 365
+             367:  8(i64vec4) ImageRead 364 366
+             369:    368(ptr) AccessChain 14 363
+             370:  8(i64vec4) Load 369
+             371:  8(i64vec4) IAdd 370 367
+             372:    368(ptr) AccessChain 14 363
+                              Store 372 371
+             373:          33 Load 35(i3D)
+             374:     37(ptr) AccessChain 14 19
+             375:   11(ivec4) Load 374
+             376:   36(ivec3) VectorShuffle 375 375 0 1 2
+             377:  8(i64vec4) ImageRead 373 376
+             378:    368(ptr) AccessChain 14 363
+             379:  8(i64vec4) Load 378
+             380:  8(i64vec4) IAdd 379 377
+             381:    368(ptr) AccessChain 14 363
+                              Store 381 380
+             382:          46 Load 48(iBuf)
+             383:     22(ptr) AccessChain 14 19 21
+             384:     10(int) Load 383
+             385:  8(i64vec4) ImageRead 382 384
+             386:    368(ptr) AccessChain 14 363
+             387:  8(i64vec4) Load 386
+             388:  8(i64vec4) IAdd 387 385
+             389:    368(ptr) AccessChain 14 363
+                              Store 389 388
+             390:          56 Load 58(i2DArray)
+             391:     37(ptr) AccessChain 14 19
+             392:   11(ivec4) Load 391
+             393:   36(ivec3) VectorShuffle 392 392 0 1 2
+             394:  8(i64vec4) ImageRead 390 393
+             395:    368(ptr) AccessChain 14 363
+             396:  8(i64vec4) Load 395
+             397:  8(i64vec4) IAdd 396 394
+             398:    368(ptr) AccessChain 14 363
+                              Store 398 397
+             399:          67 Load 69(i2DRect)
+             400:     37(ptr) AccessChain 14 19
+             401:   11(ivec4) Load 400
+             402:   70(ivec2) VectorShuffle 401 401 0 1
+             403:  8(i64vec4) ImageRead 399 402
+             404:    368(ptr) AccessChain 14 363
+             405:  8(i64vec4) Load 404
+             406:  8(i64vec4) IAdd 405 403
+             407:    368(ptr) AccessChain 14 363
+                              Store 407 406
+             408:          79 Load 81(i2DMSArray)
+             409:     37(ptr) AccessChain 14 19
+             410:   11(ivec4) Load 409
+             411:   36(ivec3) VectorShuffle 410 410 0 1 2
+             412:     22(ptr) AccessChain 14 19 85
+             413:     10(int) Load 412
+             414:  8(i64vec4) ImageRead 408 411 Sample 413
+             415:    368(ptr) AccessChain 14 363
+             416:  8(i64vec4) Load 415
+             417:  8(i64vec4) IAdd 416 414
+             418:    368(ptr) AccessChain 14 363
+                              Store 418 417
+             419:         192 Load 194(u2D)
+             420:     37(ptr) AccessChain 14 19
+             421:   11(ivec4) Load 420
+             422:   70(ivec2) VectorShuffle 421 421 0 1
+             425:    424(ptr) AccessChain 14 423
+             426:  9(i64vec4) Load 425
+                              ImageWrite 419 422 426
+             427:         205 Load 207(uCube)
+             428:     37(ptr) AccessChain 14 19
+             429:   11(ivec4) Load 428
+             430:   36(ivec3) VectorShuffle 429 429 0 1 2
+             431:    424(ptr) AccessChain 14 423
+             432:  9(i64vec4) Load 431
+                              ImageWrite 427 430 432
+             433:         216 Load 218(u1DArray)
+             434:     37(ptr) AccessChain 14 19
+             435:   11(ivec4) Load 434
+             436:   70(ivec2) VectorShuffle 435 435 0 1
+             437:    424(ptr) AccessChain 14 423
+             438:  9(i64vec4) Load 437
+                              ImageWrite 433 436 438
+             439:         227 Load 229(uCubeArray)
+             440:     37(ptr) AccessChain 14 19
+             441:   11(ivec4) Load 440
+             442:   36(ivec3) VectorShuffle 441 441 0 1 2
+             443:    424(ptr) AccessChain 14 423
+             444:  9(i64vec4) Load 443
+                              ImageWrite 439 442 444
+             445:         238 Load 240(u2DMS)
+             446:     37(ptr) AccessChain 14 19
+             447:   11(ivec4) Load 446
+             448:   70(ivec2) VectorShuffle 447 447 0 1
+             449:     22(ptr) AccessChain 14 19 244
+             450:     10(int) Load 449
+             451:    424(ptr) AccessChain 14 423
+             452:  9(i64vec4) Load 451
+                              ImageWrite 445 448 452 Sample 450
+             453:          33 Load 35(i3D)
+             454:     37(ptr) AccessChain 14 19
+             455:   11(ivec4) Load 454
+             456:   36(ivec3) VectorShuffle 455 455 0 1 2
+             457:    368(ptr) AccessChain 14 363
+             459:458(ResType) ImageSparseRead 453 456
+             460:  8(i64vec4) CompositeExtract 459 1
+                              Store 457 460
+             461:     10(int) CompositeExtract 459 0
+             462:          56 Load 58(i2DArray)
+             463:     37(ptr) AccessChain 14 19
+             464:   11(ivec4) Load 463
+             465:   36(ivec3) VectorShuffle 464 464 0 1 2
+             466:    368(ptr) AccessChain 14 363
+             467:458(ResType) ImageSparseRead 462 465
+             468:  8(i64vec4) CompositeExtract 467 1
+                              Store 466 468
+             469:     10(int) CompositeExtract 467 0
+             470:          67 Load 69(i2DRect)
+             471:     37(ptr) AccessChain 14 19
+             472:   11(ivec4) Load 471
+             473:   70(ivec2) VectorShuffle 472 472 0 1
+             474:    368(ptr) AccessChain 14 363
+             475:458(ResType) ImageSparseRead 470 473
+             476:  8(i64vec4) CompositeExtract 475 1
+                              Store 474 476
+             477:     10(int) CompositeExtract 475 0
+             478:         192 Load 194(u2D)
+             479:     37(ptr) AccessChain 14 19
+             480:   11(ivec4) Load 479
+             481:   70(ivec2) VectorShuffle 480 480 0 1
+             482:    424(ptr) AccessChain 14 423
+             484:483(ResType) ImageSparseRead 478 481
+             485:  9(i64vec4) CompositeExtract 484 1
+                              Store 482 485
+             486:     10(int) CompositeExtract 484 0
+             487:         205 Load 207(uCube)
+             488:     37(ptr) AccessChain 14 19
+             489:   11(ivec4) Load 488
+             490:   36(ivec3) VectorShuffle 489 489 0 1 2
+             491:    424(ptr) AccessChain 14 423
+             492:483(ResType) ImageSparseRead 487 490
+             493:  9(i64vec4) CompositeExtract 492 1
+                              Store 491 493
+             494:     10(int) CompositeExtract 492 0
+             495:         227 Load 229(uCubeArray)
+             496:     37(ptr) AccessChain 14 19
+             497:   11(ivec4) Load 496
+             498:   36(ivec3) VectorShuffle 497 497 0 1 2
+             499:    424(ptr) AccessChain 14 423
+             500:483(ResType) ImageSparseRead 495 498
+             501:  9(i64vec4) CompositeExtract 500 1
+                              Store 499 501
+             502:     10(int) CompositeExtract 500 0
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.imageLoadStoreLod.frag.out b/Test/baseResults/spv.imageLoadStoreLod.frag.out
index 2f83604..b809474 100644
--- a/Test/baseResults/spv.imageLoadStoreLod.frag.out
+++ b/Test/baseResults/spv.imageLoadStoreLod.frag.out
@@ -1,20 +1,25 @@
 spv.imageLoadStoreLod.frag
 // Module Version 10000
 // Generated by (magic number): 8000a
-// Id's are bound by 82
+// Id's are bound by 148
 
                               Capability Shader
+                              Capability Int64
                               Capability ImageCubeArray
                               Capability SparseResidency
                               Capability Image1D
                               Capability ImageReadWriteLodAMD
+                              Capability Int64ImageEXT
                               Extension  "SPV_AMD_shader_image_load_store_lod"
+                              Extension  "SPV_EXT_shader_image_int64"
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
                               EntryPoint Fragment 4  "main" 77
                               ExecutionMode 4 OriginUpperLeft
                               Source GLSL 450
                               SourceExtension  "GL_AMD_shader_image_load_store_lod"
+                              SourceExtension  "GL_ARB_gpu_shader_int64"
+                              SourceExtension  "GL_EXT_shader_image_int64"
                               Name 4  "main"
                               Name 9  "f4"
                               Name 14  "i1D"
@@ -27,6 +32,18 @@
                               Name 65  "ResType"
                               Name 71  "uiCubeArray"
                               Name 77  "fragColor"
+                              Name 86  "Buf"
+                              MemberName 86(Buf) 0  "i64v4"
+                              MemberName 86(Buf) 1  "u64v4"
+                              Name 88  ""
+                              Name 92  "i64i1D"
+                              Name 102  "i64i2D"
+                              Name 111  "i64i3D"
+                              Name 120  "u64iCube"
+                              Name 127  "u64i1DArray"
+                              Name 133  "u64i2DArray"
+                              Name 136  "ResType"
+                              Name 142  "u64iCubeArray"
                               Decorate 14(i1D) DescriptorSet 0
                               Decorate 14(i1D) Binding 0
                               Decorate 24(i2D) DescriptorSet 0
@@ -42,6 +59,25 @@
                               Decorate 71(uiCubeArray) DescriptorSet 0
                               Decorate 71(uiCubeArray) Binding 6
                               Decorate 77(fragColor) Location 0
+                              MemberDecorate 86(Buf) 0 Offset 0
+                              MemberDecorate 86(Buf) 1 Offset 32
+                              Decorate 86(Buf) BufferBlock
+                              Decorate 88 DescriptorSet 0
+                              Decorate 88 Binding 14
+                              Decorate 92(i64i1D) DescriptorSet 0
+                              Decorate 92(i64i1D) Binding 7
+                              Decorate 102(i64i2D) DescriptorSet 0
+                              Decorate 102(i64i2D) Binding 8
+                              Decorate 111(i64i3D) DescriptorSet 0
+                              Decorate 111(i64i3D) Binding 9
+                              Decorate 120(u64iCube) DescriptorSet 0
+                              Decorate 120(u64iCube) Binding 10
+                              Decorate 127(u64i1DArray) DescriptorSet 0
+                              Decorate 127(u64i1DArray) Binding 11
+                              Decorate 133(u64i2DArray) DescriptorSet 0
+                              Decorate 133(u64i2DArray) Binding 12
+                              Decorate 142(u64iCubeArray) DescriptorSet 0
+                              Decorate 142(u64iCubeArray) Binding 13
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -88,6 +124,38 @@
  71(uiCubeArray):     70(ptr) Variable UniformConstant
               76:             TypePointer Output 7(fvec4)
    77(fragColor):     76(ptr) Variable Output
+              82:             TypeInt 64 1
+              83:             TypeVector 82(int64_t) 4
+              84:             TypeInt 64 0
+              85:             TypeVector 84(int64_t) 4
+         86(Buf):             TypeStruct 83(i64vec4) 85(i64vec4)
+              87:             TypePointer Uniform 86(Buf)
+              88:     87(ptr) Variable Uniform
+              89:     16(int) Constant 0
+              90:             TypeImage 82(int64_t) 1D nonsampled format:R64i
+              91:             TypePointer UniformConstant 90
+      92(i64i1D):     91(ptr) Variable UniformConstant
+              95:             TypePointer Uniform 83(i64vec4)
+             100:             TypeImage 82(int64_t) 2D nonsampled format:R64i
+             101:             TypePointer UniformConstant 100
+     102(i64i2D):    101(ptr) Variable UniformConstant
+             109:             TypeImage 82(int64_t) 3D nonsampled format:R64i
+             110:             TypePointer UniformConstant 109
+     111(i64i3D):    110(ptr) Variable UniformConstant
+             118:             TypeImage 84(int64_t) Cube nonsampled format:R64ui
+             119:             TypePointer UniformConstant 118
+   120(u64iCube):    119(ptr) Variable UniformConstant
+             122:             TypePointer Uniform 85(i64vec4)
+             125:             TypeImage 84(int64_t) 1D array nonsampled format:R64ui
+             126:             TypePointer UniformConstant 125
+127(u64i1DArray):    126(ptr) Variable UniformConstant
+             131:             TypeImage 84(int64_t) 2D array nonsampled format:R64ui
+             132:             TypePointer UniformConstant 131
+133(u64i2DArray):    132(ptr) Variable UniformConstant
+    136(ResType):             TypeStruct 16(int) 85(i64vec4)
+             140:             TypeImage 84(int64_t) Cube array nonsampled format:R64ui
+             141:             TypePointer UniformConstant 140
+142(u64iCubeArray):    141(ptr) Variable UniformConstant
          4(main):           2 Function None 3
                5:             Label
            9(f4):      8(ptr) Variable Function
@@ -131,5 +199,46 @@
               80:    7(fvec4) ConvertUToF 79
               81:    7(fvec4) FAdd 78 80
                               Store 77(fragColor) 81
+              93:          90 Load 92(i64i1D)
+              94: 83(i64vec4) ImageRead 93 17 Lod 18
+              96:     95(ptr) AccessChain 88 89
+              97: 83(i64vec4) Load 96
+              98: 83(i64vec4) IAdd 97 94
+              99:     95(ptr) AccessChain 88 89
+                              Store 99 98
+             103:         100 Load 102(i64i2D)
+             104: 83(i64vec4) ImageRead 103 28 Lod 18
+             105:     95(ptr) AccessChain 88 89
+             106: 83(i64vec4) Load 105
+             107: 83(i64vec4) IAdd 106 104
+             108:     95(ptr) AccessChain 88 89
+                              Store 108 107
+             112:         109 Load 111(i64i3D)
+             113: 83(i64vec4) ImageRead 112 40 Lod 18
+             114:     95(ptr) AccessChain 88 89
+             115: 83(i64vec4) Load 114
+             116: 83(i64vec4) IAdd 115 113
+             117:     95(ptr) AccessChain 88 89
+                              Store 117 116
+             121:         118 Load 120(u64iCube)
+             123:    122(ptr) AccessChain 88 17
+             124: 85(i64vec4) Load 123
+                              ImageWrite 121 40 124 Lod 18
+             128:         125 Load 127(u64i1DArray)
+             129:    122(ptr) AccessChain 88 17
+             130: 85(i64vec4) Load 129
+                              ImageWrite 128 28 130 Lod 18
+             134:         131 Load 133(u64i2DArray)
+             135:    122(ptr) AccessChain 88 17
+             137:136(ResType) ImageSparseRead 134 40 Lod 18
+             138: 85(i64vec4) CompositeExtract 137 1
+                              Store 135 138
+             139:     16(int) CompositeExtract 137 0
+             143:         140 Load 142(u64iCubeArray)
+             144:    122(ptr) AccessChain 88 17
+             145:136(ResType) ImageSparseRead 143 40 Lod 18
+             146: 85(i64vec4) CompositeExtract 145 1
+                              Store 144 146
+             147:     16(int) CompositeExtract 145 0
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.layer.tese.out b/Test/baseResults/spv.layer.tese.out
new file mode 100644
index 0000000..906340f
--- /dev/null
+++ b/Test/baseResults/spv.layer.tese.out
@@ -0,0 +1,30 @@
+spv.layer.tese
+// Module Version 10000
+// Generated by (magic number): 8000a
+// Id's are bound by 10
+
+                              Capability Tessellation
+                              Capability ShaderViewportIndexLayerNV
+                              Extension  "SPV_EXT_shader_viewport_index_layer"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint TessellationEvaluation 4  "main" 8
+                              ExecutionMode 4 Triangles
+                              ExecutionMode 4 SpacingEqual
+                              ExecutionMode 4 VertexOrderCcw
+                              Source GLSL 450
+                              SourceExtension  "GL_ARB_shader_viewport_layer_array"
+                              Name 4  "main"
+                              Name 8  "gl_Layer"
+                              Decorate 8(gl_Layer) BuiltIn Layer
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 1
+               7:             TypePointer Output 6(int)
+     8(gl_Layer):      7(ptr) Variable Output
+               9:      6(int) Constant 1
+         4(main):           2 Function None 3
+               5:             Label
+                              Store 8(gl_Layer) 9
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.meshShaderBuiltins.mesh.out b/Test/baseResults/spv.meshShaderBuiltins.mesh.out
index f0c252a..b26122e 100644
--- a/Test/baseResults/spv.meshShaderBuiltins.mesh.out
+++ b/Test/baseResults/spv.meshShaderBuiltins.mesh.out
@@ -5,7 +5,6 @@
 
                               Capability ClipDistance
                               Capability CullDistance
-                              Capability MultiViewport
                               Capability DrawParameters
                               Capability ShaderViewportMaskNV
                               Capability MeshShadingNV
diff --git a/Test/baseResults/spv.meshShaderPerViewBuiltins.mesh.out b/Test/baseResults/spv.meshShaderPerViewBuiltins.mesh.out
index 907ae28..86a4fd2 100644
--- a/Test/baseResults/spv.meshShaderPerViewBuiltins.mesh.out
+++ b/Test/baseResults/spv.meshShaderPerViewBuiltins.mesh.out
@@ -3,7 +3,6 @@
 // Generated by (magic number): 8000a
 // Id's are bound by 126
 
-                              Capability MultiViewport
                               Capability PerViewAttributesNV
                               Capability MeshShadingNV
                               Extension  "SPV_NVX_multiview_per_view_attributes"
diff --git a/Test/baseResults/spv.meshShaderRedeclBuiltins.mesh.out b/Test/baseResults/spv.meshShaderRedeclBuiltins.mesh.out
index 66c3a0d..bfd2d85 100644
--- a/Test/baseResults/spv.meshShaderRedeclBuiltins.mesh.out
+++ b/Test/baseResults/spv.meshShaderRedeclBuiltins.mesh.out
@@ -5,7 +5,6 @@
 
                               Capability ClipDistance
                               Capability CullDistance
-                              Capability MultiViewport
                               Capability ShaderViewportMaskNV
                               Capability MeshShadingNV
                               Extension  "SPV_NV_mesh_shader"
diff --git a/Test/baseResults/spv.nonuniform.frag.out b/Test/baseResults/spv.nonuniform.frag.out
index 8d61619..f6febc9 100644
--- a/Test/baseResults/spv.nonuniform.frag.out
+++ b/Test/baseResults/spv.nonuniform.frag.out
@@ -1,7 +1,7 @@
 spv.nonuniform.frag
 // Module Version 10000
 // Generated by (magic number): 8000a
-// Id's are bound by 212
+// Id's are bound by 289
 
                               Capability Shader
                               Capability InputAttachment
@@ -22,7 +22,7 @@
                               Extension  "SPV_EXT_descriptor_indexing"
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 35 92
+                              EntryPoint Fragment 4  "main" 41 98 188
                               ExecutionMode 4 OriginUpperLeft
                               Source GLSL 450
                               SourceExtension  "GL_EXT_nonuniform_qualifier"
@@ -34,217 +34,268 @@
                               Name 17  "nu_li"
                               Name 18  "param"
                               Name 20  "param"
-                              Name 32  "b"
-                              Name 35  "nu_inv4"
-                              Name 41  "nu_gf"
-                              Name 47  "inputAttachmentDyn"
-                              Name 48  "dyn_i"
-                              Name 64  "uniformTexelBufferDyn"
-                              Name 78  "storageTexelBufferDyn"
-                              Name 87  "uname"
-                              MemberName 87(uname) 0  "a"
-                              Name 90  "uniformBuffer"
-                              Name 92  "nu_ii"
-                              Name 99  "bname"
-                              MemberName 99(bname) 0  "b"
-                              Name 102  "storageBuffer"
-                              Name 112  "sampledImage"
-                              Name 127  "storageImage"
-                              Name 139  "inputAttachment"
-                              Name 149  "uniformTexelBuffer"
-                              Name 160  "storageTexelBuffer"
-                              Name 170  "v"
-                              Name 185  "uv"
-                              Name 195  "m"
-                              Name 203  "S"
-                              MemberName 203(S) 0  "a"
-                              Name 205  "s"
-                              Decorate 9(nupi) DecorationNonUniformEXT
+                              Name 30  "nu_li2"
+                              Name 38  "b"
+                              Name 41  "nu_inv4"
+                              Name 47  "nu_gf"
+                              Name 53  "inputAttachmentDyn"
+                              Name 54  "dyn_i"
+                              Name 70  "uniformTexelBufferDyn"
+                              Name 84  "storageTexelBufferDyn"
+                              Name 93  "uname"
+                              MemberName 93(uname) 0  "a"
+                              Name 96  "uniformBuffer"
+                              Name 98  "nu_ii"
+                              Name 105  "bname"
+                              MemberName 105(bname) 0  "b"
+                              Name 108  "storageBuffer"
+                              Name 118  "sampledImage"
+                              Name 133  "storageImage"
+                              Name 145  "inputAttachment"
+                              Name 155  "uniformTexelBuffer"
+                              Name 166  "storageTexelBuffer"
+                              Name 177  "uniformTexArr"
+                              Name 184  "uniformSampler"
+                              Name 188  "inTexcoord"
+                              Name 207  "v"
+                              Name 222  "uv"
+                              Name 232  "m"
+                              Name 240  "S"
+                              MemberName 240(S) 0  "a"
+                              Name 242  "s"
+                              Name 252  "arr"
+                              Name 259  "um"
+                              Name 268  "US"
+                              MemberName 268(US) 0  "a"
+                              Name 270  "us"
+                              Name 278  "uarr"
                               Decorate 13 DecorationNonUniformEXT
-                              Decorate 17(nu_li) DecorationNonUniformEXT
-                              Decorate 17(nu_li) DecorationNonUniformEXT
                               Decorate 19 DecorationNonUniformEXT
+                              Decorate 21 DecorationNonUniformEXT
+                              Decorate 22 DecorationNonUniformEXT
                               Decorate 24 DecorationNonUniformEXT
                               Decorate 28 DecorationNonUniformEXT
                               Decorate 29 DecorationNonUniformEXT
-                              Decorate 35(nu_inv4) Location 0
-                              Decorate 35(nu_inv4) DecorationNonUniformEXT
-                              Decorate 39 DecorationNonUniformEXT
-                              Decorate 40 DecorationNonUniformEXT
-                              Decorate 41(nu_gf) DecorationNonUniformEXT
-                              Decorate 41(nu_gf) DecorationNonUniformEXT
-                              Decorate 42 DecorationNonUniformEXT
-                              Decorate 43 DecorationNonUniformEXT
-                              Decorate 47(inputAttachmentDyn) DescriptorSet 0
-                              Decorate 47(inputAttachmentDyn) Binding 0
-                              Decorate 47(inputAttachmentDyn) InputAttachmentIndex 0
-                              Decorate 64(uniformTexelBufferDyn) DescriptorSet 0
-                              Decorate 64(uniformTexelBufferDyn) Binding 1
-                              Decorate 78(storageTexelBufferDyn) DescriptorSet 0
-                              Decorate 78(storageTexelBufferDyn) Binding 2
-                              MemberDecorate 87(uname) 0 Offset 0
-                              Decorate 87(uname) Block
-                              Decorate 90(uniformBuffer) DescriptorSet 0
-                              Decorate 90(uniformBuffer) Binding 3
-                              Decorate 92(nu_ii) Flat
-                              Decorate 92(nu_ii) Location 1
-                              Decorate 92(nu_ii) DecorationNonUniformEXT
-                              Decorate 92(nu_ii) DecorationNonUniformEXT
-                              Decorate 93 DecorationNonUniformEXT
-                              Decorate 95 DecorationNonUniformEXT
-                              Decorate 96 DecorationNonUniformEXT
-                              MemberDecorate 99(bname) 0 Offset 0
-                              Decorate 99(bname) BufferBlock
-                              Decorate 102(storageBuffer) DescriptorSet 0
-                              Decorate 102(storageBuffer) Binding 4
-                              Decorate 92(nu_ii) DecorationNonUniformEXT
-                              Decorate 103 DecorationNonUniformEXT
+                              Decorate 34 DecorationNonUniformEXT
+                              Decorate 35 DecorationNonUniformEXT
+                              Decorate 41(nu_inv4) Location 0
+                              Decorate 46 DecorationNonUniformEXT
+                              Decorate 48 DecorationNonUniformEXT
+                              Decorate 49 DecorationNonUniformEXT
+                              Decorate 53(inputAttachmentDyn) DescriptorSet 0
+                              Decorate 53(inputAttachmentDyn) Binding 0
+                              Decorate 53(inputAttachmentDyn) InputAttachmentIndex 0
+                              Decorate 70(uniformTexelBufferDyn) DescriptorSet 0
+                              Decorate 70(uniformTexelBufferDyn) Binding 1
+                              Decorate 84(storageTexelBufferDyn) DescriptorSet 0
+                              Decorate 84(storageTexelBufferDyn) Binding 2
+                              MemberDecorate 93(uname) 0 Offset 0
+                              Decorate 93(uname) Block
+                              Decorate 96(uniformBuffer) DescriptorSet 0
+                              Decorate 96(uniformBuffer) Binding 3
+                              Decorate 98(nu_ii) Flat
+                              Decorate 98(nu_ii) Location 1
+                              Decorate 99 DecorationNonUniformEXT
+                              Decorate 101 DecorationNonUniformEXT
+                              Decorate 102 DecorationNonUniformEXT
                               Decorate 104 DecorationNonUniformEXT
-                              Decorate 105 DecorationNonUniformEXT
-                              Decorate 112(sampledImage) DescriptorSet 0
-                              Decorate 112(sampledImage) Binding 5
-                              Decorate 92(nu_ii) DecorationNonUniformEXT
+                              MemberDecorate 105(bname) 0 Offset 0
+                              Decorate 105(bname) BufferBlock
+                              Decorate 108(storageBuffer) DescriptorSet 0
+                              Decorate 108(storageBuffer) Binding 4
+                              Decorate 109 DecorationNonUniformEXT
+                              Decorate 110 DecorationNonUniformEXT
+                              Decorate 111 DecorationNonUniformEXT
                               Decorate 113 DecorationNonUniformEXT
-                              Decorate 115 DecorationNonUniformEXT
-                              Decorate 116 DecorationNonUniformEXT
-                              Decorate 127(storageImage) DescriptorSet 0
-                              Decorate 127(storageImage) Binding 6
-                              Decorate 92(nu_ii) DecorationNonUniformEXT
-                              Decorate 128 DecorationNonUniformEXT
-                              Decorate 130 DecorationNonUniformEXT
-                              Decorate 131 DecorationNonUniformEXT
-                              Decorate 139(inputAttachment) DescriptorSet 0
-                              Decorate 139(inputAttachment) Binding 7
-                              Decorate 139(inputAttachment) InputAttachmentIndex 1
-                              Decorate 92(nu_ii) DecorationNonUniformEXT
-                              Decorate 140 DecorationNonUniformEXT
-                              Decorate 141 DecorationNonUniformEXT
-                              Decorate 142 DecorationNonUniformEXT
-                              Decorate 149(uniformTexelBuffer) DescriptorSet 0
-                              Decorate 149(uniformTexelBuffer) Binding 8
-                              Decorate 92(nu_ii) DecorationNonUniformEXT
-                              Decorate 150 DecorationNonUniformEXT
-                              Decorate 151 DecorationNonUniformEXT
-                              Decorate 152 DecorationNonUniformEXT
-                              Decorate 160(storageTexelBuffer) DescriptorSet 0
-                              Decorate 160(storageTexelBuffer) Binding 9
-                              Decorate 92(nu_ii) DecorationNonUniformEXT
-                              Decorate 161 DecorationNonUniformEXT
-                              Decorate 162 DecorationNonUniformEXT
-                              Decorate 163 DecorationNonUniformEXT
-                              Decorate 170(v) DecorationNonUniformEXT
-                              Decorate 172 DecorationNonUniformEXT
-                              Decorate 173 DecorationNonUniformEXT
-                              Decorate 174 DecorationNonUniformEXT
-                              Decorate 175 DecorationNonUniformEXT
-                              Decorate 179 DecorationNonUniformEXT
+                              Decorate 118(sampledImage) DescriptorSet 0
+                              Decorate 118(sampledImage) Binding 5
+                              Decorate 119 DecorationNonUniformEXT
+                              Decorate 121 DecorationNonUniformEXT
+                              Decorate 122 DecorationNonUniformEXT
+                              Decorate 133(storageImage) DescriptorSet 0
+                              Decorate 133(storageImage) Binding 6
+                              Decorate 134 DecorationNonUniformEXT
+                              Decorate 136 DecorationNonUniformEXT
+                              Decorate 137 DecorationNonUniformEXT
+                              Decorate 145(inputAttachment) DescriptorSet 0
+                              Decorate 145(inputAttachment) Binding 7
+                              Decorate 145(inputAttachment) InputAttachmentIndex 1
+                              Decorate 146 DecorationNonUniformEXT
+                              Decorate 147 DecorationNonUniformEXT
+                              Decorate 148 DecorationNonUniformEXT
+                              Decorate 155(uniformTexelBuffer) DescriptorSet 0
+                              Decorate 155(uniformTexelBuffer) Binding 8
+                              Decorate 156 DecorationNonUniformEXT
+                              Decorate 157 DecorationNonUniformEXT
+                              Decorate 158 DecorationNonUniformEXT
+                              Decorate 159 DecorationNonUniformEXT
+                              Decorate 166(storageTexelBuffer) DescriptorSet 0
+                              Decorate 166(storageTexelBuffer) Binding 9
+                              Decorate 167 DecorationNonUniformEXT
+                              Decorate 168 DecorationNonUniformEXT
+                              Decorate 169 DecorationNonUniformEXT
+                              Decorate 177(uniformTexArr) DescriptorSet 0
+                              Decorate 177(uniformTexArr) Binding 10
+                              Decorate 178 DecorationNonUniformEXT
                               Decorate 180 DecorationNonUniformEXT
                               Decorate 181 DecorationNonUniformEXT
-                              Decorate 182 DecorationNonUniformEXT
-                              Decorate 92(nu_ii) DecorationNonUniformEXT
-                              Decorate 186 DecorationNonUniformEXT
-                              Decorate 187 DecorationNonUniformEXT
-                              Decorate 188 DecorationNonUniformEXT
-                              Decorate 189 DecorationNonUniformEXT
-                              Decorate 190 DecorationNonUniformEXT
-                              Decorate 195(m) DecorationNonUniformEXT
+                              Decorate 184(uniformSampler) DescriptorSet 0
+                              Decorate 184(uniformSampler) Binding 11
+                              Decorate 188(inTexcoord) Location 2
+                              Decorate 194 DecorationNonUniformEXT
+                              Decorate 195 DecorationNonUniformEXT
                               Decorate 196 DecorationNonUniformEXT
-                              Decorate 197 DecorationNonUniformEXT
-                              Decorate 205(s) DecorationNonUniformEXT
-                              Decorate 206 DecorationNonUniformEXT
-                              Decorate 207 DecorationNonUniformEXT
-                              Decorate 208 DecorationNonUniformEXT
-                              Decorate 209 DecorationNonUniformEXT
+                              Decorate 199 DecorationNonUniformEXT
+                              Decorate 210 DecorationNonUniformEXT
+                              Decorate 211 DecorationNonUniformEXT
+                              Decorate 212 DecorationNonUniformEXT
+                              Decorate 214 DecorationNonUniformEXT
+                              Decorate 217 DecorationNonUniformEXT
+                              Decorate 218 DecorationNonUniformEXT
+                              Decorate 219 DecorationNonUniformEXT
+                              Decorate 221 DecorationNonUniformEXT
+                              Decorate 223 DecorationNonUniformEXT
+                              Decorate 224 DecorationNonUniformEXT
+                              Decorate 225 DecorationNonUniformEXT
+                              Decorate 226 DecorationNonUniformEXT
+                              Decorate 227 DecorationNonUniformEXT
+                              Decorate 229 DecorationNonUniformEXT
+                              Decorate 234 DecorationNonUniformEXT
+                              Decorate 244 DecorationNonUniformEXT
+                              Decorate 245 DecorationNonUniformEXT
+                              Decorate 246 DecorationNonUniformEXT
+                              Decorate 248 DecorationNonUniformEXT
+                              Decorate 254 DecorationNonUniformEXT
+                              Decorate 255 DecorationNonUniformEXT
+                              Decorate 256 DecorationNonUniformEXT
+                              Decorate 258 DecorationNonUniformEXT
+                              Decorate 260 DecorationNonUniformEXT
+                              Decorate 261 DecorationNonUniformEXT
+                              Decorate 262 DecorationNonUniformEXT
+                              Decorate 271 DecorationNonUniformEXT
+                              Decorate 272 DecorationNonUniformEXT
+                              Decorate 273 DecorationNonUniformEXT
+                              Decorate 274 DecorationNonUniformEXT
+                              Decorate 275 DecorationNonUniformEXT
+                              Decorate 277 DecorationNonUniformEXT
+                              Decorate 279 DecorationNonUniformEXT
+                              Decorate 280 DecorationNonUniformEXT
+                              Decorate 281 DecorationNonUniformEXT
+                              Decorate 282 DecorationNonUniformEXT
+                              Decorate 283 DecorationNonUniformEXT
+                              Decorate 285 DecorationNonUniformEXT
+                              Decorate 286 DecorationNonUniformEXT
+                              Decorate 288 DecorationNonUniformEXT
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 1
                7:             TypePointer Function 6(int)
                8:             TypeFunction 6(int) 7(ptr) 7(ptr)
               26:      6(int) Constant 2
-              30:             TypeFloat 32
-              31:             TypePointer Function 30(float)
-              33:             TypeVector 30(float) 4
-              34:             TypePointer Input 33(fvec4)
-     35(nu_inv4):     34(ptr) Variable Input
-              36:             TypeInt 32 0
-              37:     36(int) Constant 0
-              38:             TypePointer Input 30(float)
-              44:             TypeImage 30(float) SubpassData nonsampled format:Unknown
-              45:             TypeRuntimeArray 44
-              46:             TypePointer UniformConstant 45
-47(inputAttachmentDyn):     46(ptr) Variable UniformConstant
-              50:             TypePointer UniformConstant 44
-              53:      6(int) Constant 0
-              54:             TypeVector 6(int) 2
-              55:   54(ivec2) ConstantComposite 53 53
-              60:             TypeImage 30(float) Buffer sampled format:Unknown
-              61:             TypeSampledImage 60
-              62:             TypeRuntimeArray 61
-              63:             TypePointer UniformConstant 62
-64(uniformTexelBufferDyn):     63(ptr) Variable UniformConstant
-              66:             TypePointer UniformConstant 61
-              69:      6(int) Constant 1
-              75:             TypeImage 30(float) Buffer nonsampled format:R32f
-              76:             TypeRuntimeArray 75
-              77:             TypePointer UniformConstant 76
-78(storageTexelBufferDyn):     77(ptr) Variable UniformConstant
-              80:             TypePointer UniformConstant 75
-       87(uname):             TypeStruct 30(float)
-              88:             TypeRuntimeArray 87(uname)
-              89:             TypePointer Uniform 88
-90(uniformBuffer):     89(ptr) Variable Uniform
-              91:             TypePointer Input 6(int)
-       92(nu_ii):     91(ptr) Variable Input
-              94:             TypePointer Uniform 30(float)
-       99(bname):             TypeStruct 30(float)
-             100:             TypeRuntimeArray 99(bname)
-             101:             TypePointer Uniform 100
-102(storageBuffer):    101(ptr) Variable Uniform
-             108:             TypeImage 30(float) 2D sampled format:Unknown
-             109:             TypeSampledImage 108
-             110:             TypeRuntimeArray 109
-             111:             TypePointer UniformConstant 110
-112(sampledImage):    111(ptr) Variable UniformConstant
-             114:             TypePointer UniformConstant 109
-             117:             TypeVector 30(float) 2
-             118:   30(float) Constant 1056964608
-             119:  117(fvec2) ConstantComposite 118 118
-             124:             TypeImage 30(float) 2D nonsampled format:R32f
-             125:             TypeRuntimeArray 124
-             126:             TypePointer UniformConstant 125
-127(storageImage):    126(ptr) Variable UniformConstant
-             129:             TypePointer UniformConstant 124
-             132:   54(ivec2) ConstantComposite 69 69
-             137:             TypeRuntimeArray 44
-             138:             TypePointer UniformConstant 137
-139(inputAttachment):    138(ptr) Variable UniformConstant
-             147:             TypeRuntimeArray 61
-             148:             TypePointer UniformConstant 147
-149(uniformTexelBuffer):    148(ptr) Variable UniformConstant
-             158:             TypeRuntimeArray 75
-             159:             TypePointer UniformConstant 158
-160(storageTexelBuffer):    159(ptr) Variable UniformConstant
-             168:             TypeVector 6(int) 4
-             169:             TypePointer Function 168(ivec4)
-             171:     36(int) Constant 1
-             178:     36(int) Constant 2
-             193:             TypeMatrix 33(fvec4) 4
-             194:             TypePointer Function 193
-          203(S):             TypeStruct 6(int)
-             204:             TypePointer Function 203(S)
+              36:             TypeFloat 32
+              37:             TypePointer Function 36(float)
+              39:             TypeVector 36(float) 4
+              40:             TypePointer Input 39(fvec4)
+     41(nu_inv4):     40(ptr) Variable Input
+              42:             TypeInt 32 0
+              43:     42(int) Constant 0
+              44:             TypePointer Input 36(float)
+              50:             TypeImage 36(float) SubpassData nonsampled format:Unknown
+              51:             TypeRuntimeArray 50
+              52:             TypePointer UniformConstant 51
+53(inputAttachmentDyn):     52(ptr) Variable UniformConstant
+              56:             TypePointer UniformConstant 50
+              59:      6(int) Constant 0
+              60:             TypeVector 6(int) 2
+              61:   60(ivec2) ConstantComposite 59 59
+              66:             TypeImage 36(float) Buffer sampled format:Unknown
+              67:             TypeSampledImage 66
+              68:             TypeRuntimeArray 67
+              69:             TypePointer UniformConstant 68
+70(uniformTexelBufferDyn):     69(ptr) Variable UniformConstant
+              72:             TypePointer UniformConstant 67
+              75:      6(int) Constant 1
+              81:             TypeImage 36(float) Buffer nonsampled format:R32f
+              82:             TypeRuntimeArray 81
+              83:             TypePointer UniformConstant 82
+84(storageTexelBufferDyn):     83(ptr) Variable UniformConstant
+              86:             TypePointer UniformConstant 81
+       93(uname):             TypeStruct 36(float)
+              94:             TypeRuntimeArray 93(uname)
+              95:             TypePointer Uniform 94
+96(uniformBuffer):     95(ptr) Variable Uniform
+              97:             TypePointer Input 6(int)
+       98(nu_ii):     97(ptr) Variable Input
+             100:             TypePointer Uniform 36(float)
+      105(bname):             TypeStruct 36(float)
+             106:             TypeRuntimeArray 105(bname)
+             107:             TypePointer Uniform 106
+108(storageBuffer):    107(ptr) Variable Uniform
+             114:             TypeImage 36(float) 2D sampled format:Unknown
+             115:             TypeSampledImage 114
+             116:             TypeRuntimeArray 115
+             117:             TypePointer UniformConstant 116
+118(sampledImage):    117(ptr) Variable UniformConstant
+             120:             TypePointer UniformConstant 115
+             123:             TypeVector 36(float) 2
+             124:   36(float) Constant 1056964608
+             125:  123(fvec2) ConstantComposite 124 124
+             130:             TypeImage 36(float) 2D nonsampled format:R32f
+             131:             TypeRuntimeArray 130
+             132:             TypePointer UniformConstant 131
+133(storageImage):    132(ptr) Variable UniformConstant
+             135:             TypePointer UniformConstant 130
+             138:   60(ivec2) ConstantComposite 75 75
+             143:             TypeRuntimeArray 50
+             144:             TypePointer UniformConstant 143
+145(inputAttachment):    144(ptr) Variable UniformConstant
+             153:             TypeRuntimeArray 67
+             154:             TypePointer UniformConstant 153
+155(uniformTexelBuffer):    154(ptr) Variable UniformConstant
+             164:             TypeRuntimeArray 81
+             165:             TypePointer UniformConstant 164
+166(storageTexelBuffer):    165(ptr) Variable UniformConstant
+             174:     42(int) Constant 8
+             175:             TypeArray 114 174
+             176:             TypePointer UniformConstant 175
+177(uniformTexArr):    176(ptr) Variable UniformConstant
+             179:             TypePointer UniformConstant 114
+             182:             TypeSampler
+             183:             TypePointer UniformConstant 182
+184(uniformSampler):    183(ptr) Variable UniformConstant
+             187:             TypePointer Input 123(fvec2)
+ 188(inTexcoord):    187(ptr) Variable Input
+             205:             TypeVector 6(int) 4
+             206:             TypePointer Function 205(ivec4)
+             208:     42(int) Constant 1
+             215:     42(int) Constant 2
+             230:             TypeMatrix 39(fvec4) 4
+             231:             TypePointer Function 230
+          240(S):             TypeStruct 6(int)
+             241:             TypePointer Function 240(S)
+             249:     42(int) Constant 10
+             250:             TypeArray 6(int) 249
+             251:             TypePointer Function 250
+         268(US):             TypeStruct 250
+             269:             TypePointer Function 268(US)
          4(main):           2 Function None 3
                5:             Label
            16(a):      7(ptr) Variable Function
        17(nu_li):      7(ptr) Variable Function
        18(param):      7(ptr) Variable Function
        20(param):      7(ptr) Variable Function
-           32(b):     31(ptr) Variable Function
-       41(nu_gf):     31(ptr) Variable Function
-       48(dyn_i):      7(ptr) Variable Function
-          170(v):    169(ptr) Variable Function
-         185(uv):    169(ptr) Variable Function
-          195(m):    194(ptr) Variable Function
-          205(s):    204(ptr) Variable Function
+      30(nu_li2):      7(ptr) Variable Function
+           38(b):     37(ptr) Variable Function
+       47(nu_gf):     37(ptr) Variable Function
+       54(dyn_i):      7(ptr) Variable Function
+          207(v):    206(ptr) Variable Function
+         222(uv):    206(ptr) Variable Function
+          232(m):    231(ptr) Variable Function
+          242(s):    241(ptr) Variable Function
+        252(arr):    251(ptr) Variable Function
+         259(um):    231(ptr) Variable Function
+         270(us):    269(ptr) Variable Function
+       278(uarr):    251(ptr) Variable Function
               19:      6(int) Load 17(nu_li)
                               Store 18(param) 19
               21:      6(int) FunctionCall 11(foo(i1;i1;) 18(param) 20(param)
@@ -258,126 +309,191 @@
               28:      6(int) CopyObject 27
               29:      6(int) IAdd 24 28
                               Store 17(nu_li) 29
-              39:     38(ptr) AccessChain 35(nu_inv4) 37
-              40:   30(float) Load 39
-              42:   30(float) Load 41(nu_gf)
-              43:   30(float) FMul 40 42
-                              Store 32(b) 43
-              49:      6(int) Load 48(dyn_i)
-              51:     50(ptr) AccessChain 47(inputAttachmentDyn) 49
-              52:          44 Load 51
-              56:   33(fvec4) ImageRead 52 55
-              57:   30(float) CompositeExtract 56 0
-              58:   30(float) Load 32(b)
-              59:   30(float) FAdd 58 57
-                              Store 32(b) 59
-              65:      6(int) Load 48(dyn_i)
-              67:     66(ptr) AccessChain 64(uniformTexelBufferDyn) 65
-              68:          61 Load 67
-              70:          60 Image 68
-              71:   33(fvec4) ImageFetch 70 69
-              72:   30(float) CompositeExtract 71 0
-              73:   30(float) Load 32(b)
-              74:   30(float) FAdd 73 72
-                              Store 32(b) 74
-              79:      6(int) Load 48(dyn_i)
-              81:     80(ptr) AccessChain 78(storageTexelBufferDyn) 79
-              82:          75 Load 81
-              83:   33(fvec4) ImageRead 82 69
-              84:   30(float) CompositeExtract 83 0
-              85:   30(float) Load 32(b)
-              86:   30(float) FAdd 85 84
-                              Store 32(b) 86
-              93:      6(int) Load 92(nu_ii)
-              95:     94(ptr) AccessChain 90(uniformBuffer) 93 53
-              96:   30(float) Load 95
-              97:   30(float) Load 32(b)
-              98:   30(float) FAdd 97 96
-                              Store 32(b) 98
-             103:      6(int) Load 92(nu_ii)
-             104:     94(ptr) AccessChain 102(storageBuffer) 103 53
-             105:   30(float) Load 104
-             106:   30(float) Load 32(b)
-             107:   30(float) FAdd 106 105
-                              Store 32(b) 107
-             113:      6(int) Load 92(nu_ii)
-             115:    114(ptr) AccessChain 112(sampledImage) 113
-             116:         109 Load 115
-             120:   33(fvec4) ImageSampleImplicitLod 116 119
-             121:   30(float) CompositeExtract 120 0
-             122:   30(float) Load 32(b)
-             123:   30(float) FAdd 122 121
-                              Store 32(b) 123
-             128:      6(int) Load 92(nu_ii)
-             130:    129(ptr) AccessChain 127(storageImage) 128
-             131:         124 Load 130
-             133:   33(fvec4) ImageRead 131 132
-             134:   30(float) CompositeExtract 133 0
-             135:   30(float) Load 32(b)
-             136:   30(float) FAdd 135 134
-                              Store 32(b) 136
-             140:      6(int) Load 92(nu_ii)
-             141:     50(ptr) AccessChain 139(inputAttachment) 140
-             142:          44 Load 141
-             143:   33(fvec4) ImageRead 142 55
-             144:   30(float) CompositeExtract 143 0
-             145:   30(float) Load 32(b)
-             146:   30(float) FAdd 145 144
-                              Store 32(b) 146
-             150:      6(int) Load 92(nu_ii)
-             151:     66(ptr) AccessChain 149(uniformTexelBuffer) 150
-             152:          61 Load 151
-             153:          60 Image 152
-             154:   33(fvec4) ImageFetch 153 69
-             155:   30(float) CompositeExtract 154 0
-             156:   30(float) Load 32(b)
-             157:   30(float) FAdd 156 155
-                              Store 32(b) 157
-             161:      6(int) Load 92(nu_ii)
-             162:     80(ptr) AccessChain 160(storageTexelBuffer) 161
-             163:          75 Load 162
-             164:   33(fvec4) ImageRead 163 69
-             165:   30(float) CompositeExtract 164 0
-             166:   30(float) Load 32(b)
-             167:   30(float) FAdd 166 165
-                              Store 32(b) 167
-             172:      7(ptr) AccessChain 170(v) 171
-             173:      6(int) Load 172
-             174:     94(ptr) AccessChain 90(uniformBuffer) 173 53
-             175:   30(float) Load 174
-             176:   30(float) Load 32(b)
-             177:   30(float) FAdd 176 175
-                              Store 32(b) 177
-             179:      7(ptr) AccessChain 170(v) 178
-             180:      6(int) Load 179
-             181:     94(ptr) AccessChain 90(uniformBuffer) 180 53
-             182:   30(float) Load 181
-             183:   30(float) Load 32(b)
-             184:   30(float) FAdd 183 182
-                              Store 32(b) 184
-             186:      6(int) Load 92(nu_ii)
-             187:      7(ptr) AccessChain 185(uv) 186
-             188:      6(int) Load 187
-             189:     94(ptr) AccessChain 90(uniformBuffer) 188 53
-             190:   30(float) Load 189
-             191:   30(float) Load 32(b)
-             192:   30(float) FAdd 191 190
-                              Store 32(b) 192
-             196:     31(ptr) AccessChain 195(m) 26 178
-             197:   30(float) Load 196
-             198:      6(int) ConvertFToS 197
-             199:     94(ptr) AccessChain 90(uniformBuffer) 198 53
-             200:   30(float) Load 199
-             201:   30(float) Load 32(b)
-             202:   30(float) FAdd 201 200
-                              Store 32(b) 202
-             206:      7(ptr) AccessChain 205(s) 53
-             207:      6(int) Load 206
-             208:     94(ptr) AccessChain 90(uniformBuffer) 207 53
-             209:   30(float) Load 208
-             210:   30(float) Load 32(b)
-             211:   30(float) FAdd 210 209
-                              Store 32(b) 211
+              31:      6(int) Load 16(a)
+              32:      6(int) Load 16(a)
+              33:      6(int) IMul 32 26
+              34:      6(int) CopyObject 33
+              35:      6(int) IAdd 31 34
+                              Store 30(nu_li2) 35
+              45:     44(ptr) AccessChain 41(nu_inv4) 43
+              46:   36(float) Load 45
+              48:   36(float) Load 47(nu_gf)
+              49:   36(float) FMul 46 48
+                              Store 38(b) 49
+              55:      6(int) Load 54(dyn_i)
+              57:     56(ptr) AccessChain 53(inputAttachmentDyn) 55
+              58:          50 Load 57
+              62:   39(fvec4) ImageRead 58 61
+              63:   36(float) CompositeExtract 62 0
+              64:   36(float) Load 38(b)
+              65:   36(float) FAdd 64 63
+                              Store 38(b) 65
+              71:      6(int) Load 54(dyn_i)
+              73:     72(ptr) AccessChain 70(uniformTexelBufferDyn) 71
+              74:          67 Load 73
+              76:          66 Image 74
+              77:   39(fvec4) ImageFetch 76 75
+              78:   36(float) CompositeExtract 77 0
+              79:   36(float) Load 38(b)
+              80:   36(float) FAdd 79 78
+                              Store 38(b) 80
+              85:      6(int) Load 54(dyn_i)
+              87:     86(ptr) AccessChain 84(storageTexelBufferDyn) 85
+              88:          81 Load 87
+              89:   39(fvec4) ImageRead 88 75
+              90:   36(float) CompositeExtract 89 0
+              91:   36(float) Load 38(b)
+              92:   36(float) FAdd 91 90
+                              Store 38(b) 92
+              99:      6(int) Load 98(nu_ii)
+             101:    100(ptr) AccessChain 96(uniformBuffer) 99 59
+             102:   36(float) Load 101
+             103:   36(float) Load 38(b)
+             104:   36(float) FAdd 103 102
+                              Store 38(b) 104
+             109:      6(int) Load 98(nu_ii)
+             110:    100(ptr) AccessChain 108(storageBuffer) 109 59
+             111:   36(float) Load 110
+             112:   36(float) Load 38(b)
+             113:   36(float) FAdd 112 111
+                              Store 38(b) 113
+             119:      6(int) Load 98(nu_ii)
+             121:    120(ptr) AccessChain 118(sampledImage) 119
+             122:         115 Load 121
+             126:   39(fvec4) ImageSampleImplicitLod 122 125
+             127:   36(float) CompositeExtract 126 0
+             128:   36(float) Load 38(b)
+             129:   36(float) FAdd 128 127
+                              Store 38(b) 129
+             134:      6(int) Load 98(nu_ii)
+             136:    135(ptr) AccessChain 133(storageImage) 134
+             137:         130 Load 136
+             139:   39(fvec4) ImageRead 137 138
+             140:   36(float) CompositeExtract 139 0
+             141:   36(float) Load 38(b)
+             142:   36(float) FAdd 141 140
+                              Store 38(b) 142
+             146:      6(int) Load 98(nu_ii)
+             147:     56(ptr) AccessChain 145(inputAttachment) 146
+             148:          50 Load 147
+             149:   39(fvec4) ImageRead 148 61
+             150:   36(float) CompositeExtract 149 0
+             151:   36(float) Load 38(b)
+             152:   36(float) FAdd 151 150
+                              Store 38(b) 152
+             156:      6(int) Load 98(nu_ii)
+             157:     72(ptr) AccessChain 155(uniformTexelBuffer) 156
+             158:          67 Load 157
+             159:          66 Image 158
+             160:   39(fvec4) ImageFetch 159 75
+             161:   36(float) CompositeExtract 160 0
+             162:   36(float) Load 38(b)
+             163:   36(float) FAdd 162 161
+                              Store 38(b) 163
+             167:      6(int) Load 98(nu_ii)
+             168:     86(ptr) AccessChain 166(storageTexelBuffer) 167
+             169:          81 Load 168
+             170:   39(fvec4) ImageRead 169 75
+             171:   36(float) CompositeExtract 170 0
+             172:   36(float) Load 38(b)
+             173:   36(float) FAdd 172 171
+                              Store 38(b) 173
+             178:      6(int) Load 98(nu_ii)
+             180:    179(ptr) AccessChain 177(uniformTexArr) 178
+             181:         114 Load 180
+             185:         182 Load 184(uniformSampler)
+             186:         115 SampledImage 181 185
+             189:  123(fvec2) Load 188(inTexcoord)
+             190:   39(fvec4) ImageSampleImplicitLod 186 189
+             191:   36(float) CompositeExtract 190 0
+             192:   36(float) Load 38(b)
+             193:   36(float) FAdd 192 191
+                              Store 38(b) 193
+             194:      6(int) Load 98(nu_ii)
+             195:    179(ptr) AccessChain 177(uniformTexArr) 194
+             196:         114 Load 195
+             197:         182 Load 184(uniformSampler)
+             198:         115 SampledImage 196 197
+             199:         115 CopyObject 198
+             200:  123(fvec2) Load 188(inTexcoord)
+             201:   39(fvec4) ImageSampleImplicitLod 199 200
+             202:   36(float) CompositeExtract 201 0
+             203:   36(float) Load 38(b)
+             204:   36(float) FAdd 203 202
+                              Store 38(b) 204
+             209:      7(ptr) AccessChain 207(v) 208
+             210:      6(int) Load 209
+             211:    100(ptr) AccessChain 96(uniformBuffer) 210 59
+             212:   36(float) Load 211
+             213:   36(float) Load 38(b)
+             214:   36(float) FAdd 213 212
+                              Store 38(b) 214
+             216:      7(ptr) AccessChain 207(v) 215
+             217:      6(int) Load 216
+             218:    100(ptr) AccessChain 96(uniformBuffer) 217 59
+             219:   36(float) Load 218
+             220:   36(float) Load 38(b)
+             221:   36(float) FAdd 220 219
+                              Store 38(b) 221
+             223:      6(int) Load 98(nu_ii)
+             224:      7(ptr) AccessChain 222(uv) 223
+             225:      6(int) Load 224
+             226:    100(ptr) AccessChain 96(uniformBuffer) 225 59
+             227:   36(float) Load 226
+             228:   36(float) Load 38(b)
+             229:   36(float) FAdd 228 227
+                              Store 38(b) 229
+             233:     37(ptr) AccessChain 232(m) 26 215
+             234:   36(float) Load 233
+             235:      6(int) ConvertFToS 234
+             236:    100(ptr) AccessChain 96(uniformBuffer) 235 59
+             237:   36(float) Load 236
+             238:   36(float) Load 38(b)
+             239:   36(float) FAdd 238 237
+                              Store 38(b) 239
+             243:      7(ptr) AccessChain 242(s) 59
+             244:      6(int) Load 243
+             245:    100(ptr) AccessChain 96(uniformBuffer) 244 59
+             246:   36(float) Load 245
+             247:   36(float) Load 38(b)
+             248:   36(float) FAdd 247 246
+                              Store 38(b) 248
+             253:      7(ptr) AccessChain 252(arr) 26
+             254:      6(int) Load 253
+             255:    100(ptr) AccessChain 96(uniformBuffer) 254 59
+             256:   36(float) Load 255
+             257:   36(float) Load 38(b)
+             258:   36(float) FAdd 257 256
+                              Store 38(b) 258
+             260:      6(int) Load 98(nu_ii)
+             261:     37(ptr) AccessChain 259(um) 260 215
+             262:   36(float) Load 261
+             263:      6(int) ConvertFToS 262
+             264:    100(ptr) AccessChain 96(uniformBuffer) 263 59
+             265:   36(float) Load 264
+             266:   36(float) Load 38(b)
+             267:   36(float) FAdd 266 265
+                              Store 38(b) 267
+             271:      6(int) Load 98(nu_ii)
+             272:      7(ptr) AccessChain 270(us) 59 271
+             273:      6(int) Load 272
+             274:    100(ptr) AccessChain 96(uniformBuffer) 273 59
+             275:   36(float) Load 274
+             276:   36(float) Load 38(b)
+             277:   36(float) FAdd 276 275
+                              Store 38(b) 277
+             279:      6(int) Load 98(nu_ii)
+             280:      7(ptr) AccessChain 278(uarr) 279
+             281:      6(int) Load 280
+             282:    100(ptr) AccessChain 96(uniformBuffer) 281 59
+             283:   36(float) Load 282
+             284:   36(float) Load 38(b)
+             285:   36(float) FAdd 284 283
+                              Store 38(b) 285
+             286:      6(int) Load 98(nu_ii)
+             287:   36(float) Load 38(b)
+             288:    100(ptr) AccessChain 108(storageBuffer) 286 59
+                              Store 288 287
                               Return
                               FunctionEnd
   11(foo(i1;i1;):      6(int) Function None 8
diff --git a/Test/baseResults/spv.nonuniform4.frag.out b/Test/baseResults/spv.nonuniform4.frag.out
index 92cbd36..6bfc957 100644
--- a/Test/baseResults/spv.nonuniform4.frag.out
+++ b/Test/baseResults/spv.nonuniform4.frag.out
@@ -23,6 +23,7 @@
                               Decorate 13(rIndex) Flat
                               Decorate 13(rIndex) Location 3
                               Decorate 15 DecorationNonUniformEXT
+                              Decorate 17 DecorationNonUniformEXT
                               Decorate 21 DecorationNonUniformEXT
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.paramMemory.420.frag.out b/Test/baseResults/spv.paramMemory.420.frag.out
new file mode 100644
index 0000000..4cdc35f
--- /dev/null
+++ b/Test/baseResults/spv.paramMemory.420.frag.out
@@ -0,0 +1,139 @@
+spv.paramMemory.420.frag
+Validation failed
+// Module Version 10000
+// Generated by (magic number): 8000a
+// Id's are bound by 69
+
+                              Capability Shader
+                              Capability StorageImageReadWithoutFormat
+                              Capability StorageImageWriteWithoutFormat
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 27 66
+                              ExecutionMode 4 OriginUpperLeft
+                              Source GLSL 420
+                              SourceExtension  "GL_EXT_shader_image_load_formatted"
+                              Name 4  "main"
+                              Name 16  "image_load(I21;vi2;"
+                              Name 14  "image"
+                              Name 15  "coords"
+                              Name 23  "image_store(I21;vi2;vf4;"
+                              Name 20  "image"
+                              Name 21  "coords"
+                              Name 22  "data"
+                              Name 27  "in_coords"
+                              Name 35  "read1"
+                              Name 36  "image1"
+                              Name 37  "param"
+                              Name 40  "read2"
+                              Name 41  "image2"
+                              Name 42  "param"
+                              Name 47  "image3"
+                              Name 51  "param"
+                              Name 53  "param"
+                              Name 57  "image4"
+                              Name 61  "param"
+                              Name 63  "param"
+                              Name 66  "out_color"
+                              Decorate 14(image) Coherent
+                              Decorate 14(image) NonWritable
+                              Decorate 20(image) Coherent
+                              Decorate 20(image) NonReadable
+                              Decorate 27(in_coords) Flat
+                              Decorate 27(in_coords) Location 0
+                              Decorate 36(image1) DescriptorSet 0
+                              Decorate 36(image1) Binding 0
+                              Decorate 36(image1) Coherent
+                              Decorate 36(image1) NonWritable
+                              Decorate 41(image2) DescriptorSet 0
+                              Decorate 41(image2) Binding 2
+                              Decorate 41(image2) NonWritable
+                              Decorate 47(image3) DescriptorSet 0
+                              Decorate 47(image3) Binding 1
+                              Decorate 47(image3) Coherent
+                              Decorate 47(image3) NonReadable
+                              Decorate 57(image4) DescriptorSet 0
+                              Decorate 57(image4) Binding 3
+                              Decorate 57(image4) NonReadable
+                              Decorate 66(out_color) Location 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeImage 6(float) 2D nonsampled format:Unknown
+               8:             TypePointer UniformConstant 7
+               9:             TypeInt 32 1
+              10:             TypeVector 9(int) 2
+              11:             TypePointer Function 10(ivec2)
+              12:             TypeVector 6(float) 4
+              13:             TypeFunction 12(fvec4) 8(ptr) 11(ptr)
+              18:             TypePointer Function 12(fvec4)
+              19:             TypeFunction 2 8(ptr) 11(ptr) 18(ptr)
+              26:             TypePointer Input 10(ivec2)
+   27(in_coords):     26(ptr) Variable Input
+      36(image1):      8(ptr) Variable UniformConstant
+      41(image2):      8(ptr) Variable UniformConstant
+              45:             TypeImage 6(float) 2D nonsampled format:Rgba32f
+              46:             TypePointer UniformConstant 45
+      47(image3):     46(ptr) Variable UniformConstant
+              49:    6(float) Constant 1056964608
+              55:             TypeImage 6(float) 2D nonsampled format:Rgba16f
+              56:             TypePointer UniformConstant 55
+      57(image4):     56(ptr) Variable UniformConstant
+              59:    6(float) Constant 1073741824
+              65:             TypePointer Output 12(fvec4)
+   66(out_color):     65(ptr) Variable Output
+              67:    6(float) Constant 0
+              68:   12(fvec4) ConstantComposite 67 67 67 67
+         4(main):           2 Function None 3
+               5:             Label
+       35(read1):     18(ptr) Variable Function
+       37(param):     11(ptr) Variable Function
+       40(read2):     18(ptr) Variable Function
+       42(param):     11(ptr) Variable Function
+       51(param):     11(ptr) Variable Function
+       53(param):     18(ptr) Variable Function
+       61(param):     11(ptr) Variable Function
+       63(param):     18(ptr) Variable Function
+              38:   10(ivec2) Load 27(in_coords)
+                              Store 37(param) 38
+              39:   12(fvec4) FunctionCall 16(image_load(I21;vi2;) 36(image1) 37(param)
+                              Store 35(read1) 39
+              43:   10(ivec2) Load 27(in_coords)
+                              Store 42(param) 43
+              44:   12(fvec4) FunctionCall 16(image_load(I21;vi2;) 41(image2) 42(param)
+                              Store 40(read2) 44
+              48:   12(fvec4) Load 35(read1)
+              50:   12(fvec4) VectorTimesScalar 48 49
+              52:   10(ivec2) Load 27(in_coords)
+                              Store 51(param) 52
+                              Store 53(param) 50
+              54:           2 FunctionCall 23(image_store(I21;vi2;vf4;) 47(image3) 51(param) 53(param)
+              58:   12(fvec4) Load 40(read2)
+              60:   12(fvec4) VectorTimesScalar 58 59
+              62:   10(ivec2) Load 27(in_coords)
+                              Store 61(param) 62
+                              Store 63(param) 60
+              64:           2 FunctionCall 23(image_store(I21;vi2;vf4;) 57(image4) 61(param) 63(param)
+                              Store 66(out_color) 68
+                              Return
+                              FunctionEnd
+16(image_load(I21;vi2;):   12(fvec4) Function None 13
+       14(image):      8(ptr) FunctionParameter
+      15(coords):     11(ptr) FunctionParameter
+              17:             Label
+              25:           7 Load 14(image)
+              28:   10(ivec2) Load 27(in_coords)
+              29:   12(fvec4) ImageRead 25 28
+                              ReturnValue 29
+                              FunctionEnd
+23(image_store(I21;vi2;vf4;):           2 Function None 19
+       20(image):      8(ptr) FunctionParameter
+      21(coords):     11(ptr) FunctionParameter
+        22(data):     18(ptr) FunctionParameter
+              24:             Label
+              32:           7 Load 20(image)
+              33:   10(ivec2) Load 27(in_coords)
+              34:   12(fvec4) Load 22(data)
+                              ImageWrite 32 33 34
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.precisionArgs.frag.out b/Test/baseResults/spv.precisionArgs.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/spv.precisionTexture.frag.out b/Test/baseResults/spv.precisionTexture.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/spv.specConstArrayCheck.vert.out b/Test/baseResults/spv.specConstArrayCheck.vert.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/spv.specConstant.vert.out b/Test/baseResults/spv.specConstant.vert.out
index 921cc68..76f3de6 100644
--- a/Test/baseResults/spv.specConstant.vert.out
+++ b/Test/baseResults/spv.specConstant.vert.out
@@ -11,7 +11,7 @@
                               Source GLSL 400
                               Name 4  "main"
                               Name 9  "arraySize"
-                              Name 14  "foo(vf4[s4546];"
+                              Name 14  "foo(vf4[s805310914];"
                               Name 13  "p"
                               Name 17  "builtin_spec_constant("
                               Name 20  "color"
@@ -106,10 +106,10 @@
                               Store 20(color) 46
               48:          10 Load 22(ucol)
                               Store 47(param) 48
-              49:           2 FunctionCall 14(foo(vf4[s4546];) 47(param)
+              49:           2 FunctionCall 14(foo(vf4[s805310914];) 47(param)
                               Return
                               FunctionEnd
-14(foo(vf4[s4546];):           2 Function None 12
+14(foo(vf4[s805310914];):           2 Function None 12
            13(p):     11(ptr) FunctionParameter
               15:             Label
               54:     24(ptr) AccessChain 53(dupUcol) 23
diff --git a/Test/baseResults/spv.specTexture.frag.out b/Test/baseResults/spv.specTexture.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/spv.stereoViewRendering.tesc.out b/Test/baseResults/spv.stereoViewRendering.tesc.out
index a357346..f01e53b 100644
--- a/Test/baseResults/spv.stereoViewRendering.tesc.out
+++ b/Test/baseResults/spv.stereoViewRendering.tesc.out
@@ -3,7 +3,6 @@
 // Generated by (magic number): 8000a
 // Id's are bound by 42
 
-                              Capability Geometry
                               Capability Tessellation
                               Capability ShaderViewportIndexLayerNV
                               Capability ShaderViewportMaskNV
diff --git a/Test/baseResults/spv.stereoViewRendering.vert.out b/Test/baseResults/spv.stereoViewRendering.vert.out
index 0667cb8..e74921a 100644
--- a/Test/baseResults/spv.stereoViewRendering.vert.out
+++ b/Test/baseResults/spv.stereoViewRendering.vert.out
@@ -4,7 +4,6 @@
 // Id's are bound by 27
 
                               Capability Shader
-                              Capability Geometry
                               Capability ShaderViewportIndexLayerNV
                               Capability ShaderViewportMaskNV
                               Capability ShaderStereoViewNV
diff --git a/Test/baseResults/spv.terminate.frag.out b/Test/baseResults/spv.terminate.frag.out
new file mode 100755
index 0000000..39cb151
--- /dev/null
+++ b/Test/baseResults/spv.terminate.frag.out
@@ -0,0 +1,20 @@
+spv.terminate.frag
+// Module Version 10000
+// Generated by (magic number): 8000a
+// Id's are bound by 7
+
+                              Capability Shader
+                              Extension  "SPV_KHR_terminate_invocation"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main"
+                              ExecutionMode 4 OriginUpperLeft
+                              Source GLSL 400
+                              SourceExtension  "GL_EXT_terminate_invocation"
+                              Name 4  "main"
+               2:             TypeVoid
+               3:             TypeFunction 2
+         4(main):           2 Function None 3
+               5:             Label
+                              TerminateInvocation
+                              FunctionEnd
diff --git a/Test/baseResults/spv.viewportArray2.tesc.out b/Test/baseResults/spv.viewportArray2.tesc.out
index 6a9dccc..74235a5 100644
--- a/Test/baseResults/spv.viewportArray2.tesc.out
+++ b/Test/baseResults/spv.viewportArray2.tesc.out
@@ -4,9 +4,7 @@
 // Generated by (magic number): 8000a
 // Id's are bound by 25
 
-                              Capability Geometry
                               Capability Tessellation
-                              Capability MultiViewport
                               Capability ShaderViewportIndexLayerNV
                               Capability ShaderViewportMaskNV
                               Extension  "SPV_EXT_shader_viewport_index_layer"
diff --git a/Test/baseResults/spv.viewportArray2.vert.out b/Test/baseResults/spv.viewportArray2.vert.out
index 96e5b07..cf29cd7 100644
--- a/Test/baseResults/spv.viewportArray2.vert.out
+++ b/Test/baseResults/spv.viewportArray2.vert.out
@@ -4,8 +4,6 @@
 // Id's are bound by 19
 
                               Capability Shader
-                              Capability Geometry
-                              Capability MultiViewport
                               Capability ShaderViewportIndexLayerNV
                               Capability ShaderViewportMaskNV
                               Extension  "SPV_EXT_shader_viewport_index_layer"
diff --git a/Test/baseResults/spv.viewportindex.tese.out b/Test/baseResults/spv.viewportindex.tese.out
new file mode 100644
index 0000000..12a30cf
--- /dev/null
+++ b/Test/baseResults/spv.viewportindex.tese.out
@@ -0,0 +1,30 @@
+spv.viewportindex.tese
+// Module Version 10000
+// Generated by (magic number): 8000a
+// Id's are bound by 10
+
+                              Capability Tessellation
+                              Capability ShaderViewportIndexLayerNV
+                              Extension  "SPV_EXT_shader_viewport_index_layer"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint TessellationEvaluation 4  "main" 8
+                              ExecutionMode 4 Triangles
+                              ExecutionMode 4 SpacingEqual
+                              ExecutionMode 4 VertexOrderCcw
+                              Source GLSL 450
+                              SourceExtension  "GL_ARB_shader_viewport_layer_array"
+                              Name 4  "main"
+                              Name 8  "gl_ViewportIndex"
+                              Decorate 8(gl_ViewportIndex) BuiltIn ViewportIndex
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 1
+               7:             TypePointer Output 6(int)
+8(gl_ViewportIndex):      7(ptr) Variable Output
+               9:      6(int) Constant 1
+         4(main):           2 Function None 3
+               5:             Label
+                              Store 8(gl_ViewportIndex) 9
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/terminate.frag.out b/Test/baseResults/terminate.frag.out
new file mode 100755
index 0000000..4f72c9b
--- /dev/null
+++ b/Test/baseResults/terminate.frag.out
@@ -0,0 +1,24 @@
+terminate.frag
+ERROR: 0:3: 'terminateInvocation' : undeclared identifier 
+ERROR: 0:9: '' :  syntax error, unexpected TERMINATE_INVOCATION, expecting COMMA or SEMICOLON
+ERROR: 2 compilation errors.  No code generated.
+
+
+Shader version: 400
+Requested GL_EXT_terminate_invocation
+ERROR: node is still EOpNull!
+0:3  Function Definition: foo( ( global void)
+0:3    Function Parameters: 
+0:3    Sequence
+0:3      'terminateInvocation' ( temp float)
+0:?   Linker Objects
+
+
+Linked fragment stage:
+
+
+Shader version: 400
+Requested GL_EXT_terminate_invocation
+ERROR: node is still EOpNull!
+0:?   Linker Objects
+
diff --git a/Test/baseResults/terminate.vert.out b/Test/baseResults/terminate.vert.out
new file mode 100755
index 0000000..cd984af
--- /dev/null
+++ b/Test/baseResults/terminate.vert.out
@@ -0,0 +1,36 @@
+terminate.vert
+ERROR: 0:3: 'terminateInvocation' : undeclared identifier 
+ERROR: 0:9: 'terminateInvocation' : not supported in this stage: vertex
+ERROR: 2 compilation errors.  No code generated.
+
+
+Shader version: 400
+Requested GL_EXT_terminate_invocation
+ERROR: node is still EOpNull!
+0:3  Function Definition: foo( ( global void)
+0:3    Function Parameters: 
+0:3    Sequence
+0:3      'terminateInvocation' ( temp float)
+0:7  Function Definition: main( ( global void)
+0:7    Function Parameters: 
+0:9    Sequence
+0:9      Branch: TerminateInvocation
+0:?   Linker Objects
+0:?     'gl_VertexID' ( gl_VertexId int VertexId)
+0:?     'gl_InstanceID' ( gl_InstanceId int InstanceId)
+
+
+Linked vertex stage:
+
+
+Shader version: 400
+Requested GL_EXT_terminate_invocation
+ERROR: node is still EOpNull!
+0:7  Function Definition: main( ( global void)
+0:7    Function Parameters: 
+0:9    Sequence
+0:9      Branch: TerminateInvocation
+0:?   Linker Objects
+0:?     'gl_VertexID' ( gl_VertexId int VertexId)
+0:?     'gl_InstanceID' ( gl_InstanceId int InstanceId)
+
diff --git a/Test/baseResults/tokenPaste.vert.out b/Test/baseResults/tokenPaste.vert.out
index b5ba9a5..5ae1f75 100644
--- a/Test/baseResults/tokenPaste.vert.out
+++ b/Test/baseResults/tokenPaste.vert.out
@@ -3,11 +3,11 @@
 ERROR: 0:40: '##' : unexpected location; end of replacement list 
 ERROR: 0:49: '##' : combined tokens are too long 
 ERROR: 0:52: '##' : not supported for these tokens 
-ERROR: 0:69: '##' : combined token is invalid 
-ERROR: 0:82: 'macro expansion' : Too few args in Macro rec
-ERROR: 0:82: '##' : unexpected location 
-ERROR: 0:82: '##' : unexpected location 
-ERROR: 0:86: '##' : unexpected location; end of argument 
+ERROR: 0:81: '##' : combined token is invalid 
+ERROR: 0:94: 'macro expansion' : Too few args in Macro rec
+ERROR: 0:94: '##' : unexpected location 
+ERROR: 0:94: '##' : unexpected location 
+ERROR: 0:98: '##' : unexpected location; end of argument 
 ERROR: 9 compilation errors.  No code generated.
 
 
@@ -18,35 +18,35 @@
 0:52      'a' ( global int)
 0:52      Constant:
 0:52        11 (const int)
-0:58  Sequence
-0:58    move second child to first child ( temp int)
-0:58      'cop' ( global int)
-0:58      Constant:
-0:58        160 (const int)
-0:59  Sequence
-0:59    move second child to first child ( temp bool)
-0:59      'dop' ( global bool)
-0:59      Constant:
-0:59        true (const bool)
-0:63  Function Definition: ShouldntExpandToThis( ( global void)
-0:63    Function Parameters: 
-0:65    Sequence
-0:65      Sequence
-0:65        move second child to first child ( temp int)
-0:65          'e' ( temp int)
-0:65          Constant:
-0:65            16 (const int)
-0:66      right shift second child into first child ( temp int)
-0:66        'e' ( temp int)
-0:66        Constant:
-0:66          2 (const int)
-0:69      Sequence
-0:69        move second child to first child ( temp bool)
-0:69          'f' ( temp bool)
-0:69          Compare Greater Than ( temp bool)
-0:69            'e' ( temp int)
-0:69            Constant:
-0:69              5 (const int)
+0:70  Sequence
+0:70    move second child to first child ( temp int)
+0:70      'cop' ( global int)
+0:70      Constant:
+0:70        160 (const int)
+0:71  Sequence
+0:71    move second child to first child ( temp bool)
+0:71      'dop' ( global bool)
+0:71      Constant:
+0:71        true (const bool)
+0:75  Function Definition: ShouldntExpandToThis( ( global void)
+0:75    Function Parameters: 
+0:77    Sequence
+0:77      Sequence
+0:77        move second child to first child ( temp int)
+0:77          'e' ( temp int)
+0:77          Constant:
+0:77            16 (const int)
+0:78      right shift second child into first child ( temp int)
+0:78        'e' ( temp int)
+0:78        Constant:
+0:78          2 (const int)
+0:81      Sequence
+0:81        move second child to first child ( temp bool)
+0:81          'f' ( temp bool)
+0:81          Compare Greater Than ( temp bool)
+0:81            'e' ( temp int)
+0:81            Constant:
+0:81              5 (const int)
 0:?   Linker Objects
 0:?     'SecondExpansion' ( global int)
 0:?     'PostPasteExpansion' ( global int)
@@ -60,6 +60,8 @@
 0:?     'foo875' ( uniform float)
 0:?     'ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF012345' ( global float)
 0:?     'a' ( global int)
+0:?     'seahorse_var' ( uniform float)
+0:?     'sealion_var' ( uniform float)
 0:?     'aop' ( const int)
 0:?       10 (const int)
 0:?     'bop' ( const int)
@@ -83,16 +85,16 @@
 0:52      'a' ( global int)
 0:52      Constant:
 0:52        11 (const int)
-0:58  Sequence
-0:58    move second child to first child ( temp int)
-0:58      'cop' ( global int)
-0:58      Constant:
-0:58        160 (const int)
-0:59  Sequence
-0:59    move second child to first child ( temp bool)
-0:59      'dop' ( global bool)
-0:59      Constant:
-0:59        true (const bool)
+0:70  Sequence
+0:70    move second child to first child ( temp int)
+0:70      'cop' ( global int)
+0:70      Constant:
+0:70        160 (const int)
+0:71  Sequence
+0:71    move second child to first child ( temp bool)
+0:71      'dop' ( global bool)
+0:71      Constant:
+0:71        true (const bool)
 0:?   Linker Objects
 0:?     'SecondExpansion' ( global int)
 0:?     'PostPasteExpansion' ( global int)
@@ -106,6 +108,8 @@
 0:?     'foo875' ( uniform float)
 0:?     'ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF012345' ( global float)
 0:?     'a' ( global int)
+0:?     'seahorse_var' ( uniform float)
+0:?     'sealion_var' ( uniform float)
 0:?     'aop' ( const int)
 0:?       10 (const int)
 0:?     'bop' ( const int)
diff --git a/Test/contradict_0.geom b/Test/contradict_0.geom
old mode 100755
new mode 100644
diff --git a/Test/contradict_1.geom b/Test/contradict_1.geom
old mode 100755
new mode 100644
diff --git a/Test/cppBad4.vert b/Test/cppBad4.vert
old mode 100755
new mode 100644
diff --git a/Test/cppBad5.vert b/Test/cppBad5.vert
old mode 100755
new mode 100644
diff --git a/Test/cppMerge.frag b/Test/cppMerge.frag
old mode 100755
new mode 100644
diff --git a/Test/hlsl.intrinsics.frag b/Test/hlsl.intrinsics.frag
old mode 100755
new mode 100644
diff --git a/Test/hlsl.printf.comp b/Test/hlsl.printf.comp
new file mode 100644
index 0000000..d117299
--- /dev/null
+++ b/Test/hlsl.printf.comp
@@ -0,0 +1,11 @@
+const string first = "first string";

+

+[numthreads(1,1,1)]

+void main() {

+    printf(first);

+    printf("please print this message.");

+    printf("Variables are: %d %d %.2f", 1u, 2u, 1.5f);

+    printf("Integers are: %d %d %d", 1, 2, 3);

+    printf("More: %d %d %d %d %d %d %d %d %d %d", 1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

+}

+

diff --git a/Test/hlsl.singleArgIntPromo.vert b/Test/hlsl.singleArgIntPromo.vert
old mode 100755
new mode 100644
diff --git a/Test/hlsl.specConstant.frag b/Test/hlsl.specConstant.frag
old mode 100755
new mode 100644
diff --git a/Test/link.multiAnonBlocksInvalid.0.0.vert b/Test/link.multiAnonBlocksInvalid.0.0.vert
old mode 100755
new mode 100644
diff --git a/Test/link.multiAnonBlocksInvalid.0.1.vert b/Test/link.multiAnonBlocksInvalid.0.1.vert
old mode 100755
new mode 100644
diff --git a/Test/link.multiAnonBlocksValid.0.0.vert b/Test/link.multiAnonBlocksValid.0.0.vert
old mode 100755
new mode 100644
diff --git a/Test/link.multiAnonBlocksValid.0.1.vert b/Test/link.multiAnonBlocksValid.0.1.vert
old mode 100755
new mode 100644
diff --git a/Test/link.multiBlocksInvalid.0.0.vert b/Test/link.multiBlocksInvalid.0.0.vert
old mode 100755
new mode 100644
diff --git a/Test/link.multiBlocksInvalid.0.1.vert b/Test/link.multiBlocksInvalid.0.1.vert
old mode 100755
new mode 100644
diff --git a/Test/link.multiBlocksValid.1.0.vert b/Test/link.multiBlocksValid.1.0.vert
old mode 100755
new mode 100644
diff --git a/Test/link.multiBlocksValid.1.1.vert b/Test/link.multiBlocksValid.1.1.vert
old mode 100755
new mode 100644
diff --git a/Test/link.vk.differentPC.0.0.frag b/Test/link.vk.differentPC.0.0.frag
old mode 100755
new mode 100644
diff --git a/Test/link.vk.differentPC.0.1.frag b/Test/link.vk.differentPC.0.1.frag
old mode 100755
new mode 100644
diff --git a/Test/link.vk.differentPC.0.2.frag b/Test/link.vk.differentPC.0.2.frag
old mode 100755
new mode 100644
diff --git a/Test/link.vk.differentPC.1.0.frag b/Test/link.vk.differentPC.1.0.frag
old mode 100755
new mode 100644
diff --git a/Test/link.vk.differentPC.1.1.frag b/Test/link.vk.differentPC.1.1.frag
old mode 100755
new mode 100644
diff --git a/Test/link.vk.differentPC.1.2.frag b/Test/link.vk.differentPC.1.2.frag
old mode 100755
new mode 100644
diff --git a/Test/link.vk.matchingPC.0.0.frag b/Test/link.vk.matchingPC.0.0.frag
old mode 100755
new mode 100644
diff --git a/Test/link.vk.matchingPC.0.1.frag b/Test/link.vk.matchingPC.0.1.frag
old mode 100755
new mode 100644
diff --git a/Test/link.vk.matchingPC.0.2.frag b/Test/link.vk.matchingPC.0.2.frag
old mode 100755
new mode 100644
diff --git a/Test/link.vk.multiBlocksValid.0.0.vert b/Test/link.vk.multiBlocksValid.0.0.vert
old mode 100755
new mode 100644
diff --git a/Test/link.vk.multiBlocksValid.0.1.vert b/Test/link.vk.multiBlocksValid.0.1.vert
old mode 100755
new mode 100644
diff --git a/Test/link.vk.multiBlocksValid.1.0.geom b/Test/link.vk.multiBlocksValid.1.0.geom
old mode 100755
new mode 100644
diff --git a/Test/link.vk.multiBlocksValid.1.1.geom b/Test/link.vk.multiBlocksValid.1.1.geom
old mode 100755
new mode 100644
diff --git a/Test/link.vk.pcNamingInvalid.0.0.vert b/Test/link.vk.pcNamingInvalid.0.0.vert
old mode 100755
new mode 100644
diff --git a/Test/link.vk.pcNamingInvalid.0.1.vert b/Test/link.vk.pcNamingInvalid.0.1.vert
old mode 100755
new mode 100644
diff --git a/Test/link.vk.pcNamingValid.0.0.vert b/Test/link.vk.pcNamingValid.0.0.vert
old mode 100755
new mode 100644
diff --git a/Test/link.vk.pcNamingValid.0.1.vert b/Test/link.vk.pcNamingValid.0.1.vert
old mode 100755
new mode 100644
diff --git a/Test/rayQuery-global.rgen b/Test/rayQuery-global.rgen
new file mode 100644
index 0000000..3a57e74
--- /dev/null
+++ b/Test/rayQuery-global.rgen
@@ -0,0 +1,31 @@
+#version 460
+#extension GL_EXT_ray_query : enable
+#extension GL_EXT_ray_flags_primitive_culling : enable
+
+layout(binding = 1, set = 0) uniform accelerationStructureEXT rtas;
+
+rayQueryEXT rqGlobal;
+
+void otherWrapper(rayQueryEXT rq) {
+    rayQueryProceedEXT(rq);
+    rayQueryProceedEXT(rqGlobal);
+}
+
+void wrapper(rayQueryEXT rq) {
+    rayQueryEXT rq2;
+    rayQueryProceedEXT(rq);
+    rayQueryProceedEXT(rqGlobal);
+    otherWrapper(rq);
+    otherWrapper(rq2);
+    otherWrapper(rqGlobal);
+}
+
+void main() {
+    rayQueryInitializeEXT(rqGlobal, rtas, gl_RayFlagsNoneEXT, 0xFF, vec3(0,0,0), 0.0, vec3(1,0,0), 1.0);
+    wrapper(rqGlobal);
+    otherWrapper(rqGlobal);
+    rayQueryEXT rq2;
+    rayQueryInitializeEXT(rq2, rtas, gl_RayFlagsNoneEXT, 0xFF, vec3(0,0,0), 0.0, vec3(1,0,0), 1.0);
+    wrapper(rq2);
+    otherWrapper(rq2);
+}
diff --git a/Test/spv.1.4.NonWritable.frag b/Test/spv.1.4.NonWritable.frag
old mode 100755
new mode 100644
diff --git a/Test/spv.1.4.OpSelect.frag b/Test/spv.1.4.OpSelect.frag
old mode 100755
new mode 100644
diff --git a/Test/spv.MissShader.rmiss b/Test/spv.MissShader.rmiss
index 06113de..3c6b31c 100644
--- a/Test/spv.MissShader.rmiss
+++ b/Test/spv.MissShader.rmiss
@@ -9,8 +9,7 @@
 	uvec3 v1 = gl_LaunchSizeNV;
 	vec3 v2 = gl_WorldRayOriginNV;
 	vec3 v3 = gl_WorldRayDirectionNV;
-	vec3 v4 = gl_ObjectRayOriginNV;
-	vec3 v5 = gl_ObjectRayDirectionNV;
+	uint v4 = gl_IncomingRayFlagsNV;
 	float v6 = gl_RayTminNV;
 	float v7 = gl_RayTmaxNV;
 	traceNV(accNV, 0u, 1u, 2u, 3u, 0u, vec3(0.5f), 0.5f, vec3(1.0f), 0.75f, 1);
diff --git a/Test/spv.atomicFloat.comp b/Test/spv.atomicFloat.comp
old mode 100755
new mode 100644
diff --git a/Test/spv.atomicFloat_Error.comp b/Test/spv.atomicFloat_Error.comp
old mode 100755
new mode 100644
diff --git a/Test/spv.builtin.PrimitiveShadingRateEXT.vert b/Test/spv.builtin.PrimitiveShadingRateEXT.vert
new file mode 100644
index 0000000..6fd98c3
--- /dev/null
+++ b/Test/spv.builtin.PrimitiveShadingRateEXT.vert
@@ -0,0 +1,28 @@
+#version 450
+
+#extension GL_EXT_fragment_shading_rate : enable
+
+layout(location = 0) in int id;
+
+void main()
+{
+    switch (id)
+    {
+    case 0:
+        // V2 | H2 => 5
+        gl_PrimitiveShadingRateEXT = gl_ShadingRateFlag2VerticalPixelsEXT | gl_ShadingRateFlag2HorizontalPixelsEXT;
+        break;
+    case 1:
+        // V2 | H4 => 9
+        gl_PrimitiveShadingRateEXT = gl_ShadingRateFlag2VerticalPixelsEXT | gl_ShadingRateFlag4HorizontalPixelsEXT;
+        break;
+    case 2:
+        // V4 | H2 => 6
+        gl_PrimitiveShadingRateEXT = gl_ShadingRateFlag4VerticalPixelsEXT | gl_ShadingRateFlag2HorizontalPixelsEXT;
+        break;
+    case 3:
+        // V4 | H4 => 10
+        gl_PrimitiveShadingRateEXT = gl_ShadingRateFlag4VerticalPixelsEXT | gl_ShadingRateFlag4HorizontalPixelsEXT;
+        break;
+    }
+}
\ No newline at end of file
diff --git a/Test/spv.builtin.ShadingRateEXT.frag b/Test/spv.builtin.ShadingRateEXT.frag
new file mode 100644
index 0000000..616baec
--- /dev/null
+++ b/Test/spv.builtin.ShadingRateEXT.frag
@@ -0,0 +1,8 @@
+#version 450
+
+#extension GL_EXT_fragment_shading_rate : enable
+
+out highp int val;
+void main () {
+    val = gl_ShadingRateEXT;
+}
diff --git a/Test/spv.ext.AccelDecl.frag b/Test/spv.ext.AccelDecl.frag
new file mode 100644
index 0000000..4374bf3
--- /dev/null
+++ b/Test/spv.ext.AccelDecl.frag
@@ -0,0 +1,14 @@
+#version 460
+#extension GL_ARB_separate_shader_objects : enable
+#extension GL_EXT_nonuniform_qualifier : enable
+#extension GL_GOOGLE_include_directive : enable
+#extension GL_EXT_scalar_block_layout : enable
+#extension GL_EXT_ray_query : enable
+
+layout(location = 0) out vec4 outColor;
+
+layout(binding = 1, set = 0) uniform accelerationStructureEXT topLevelAS;
+
+void main() {
+  outColor = vec4(0.0);
+}
diff --git a/Test/spv.ext.AnyHitShader.rahit b/Test/spv.ext.AnyHitShader.rahit
index ee7d9c7..871f8fe 100644
--- a/Test/spv.ext.AnyHitShader.rahit
+++ b/Test/spv.ext.AnyHitShader.rahit
@@ -1,5 +1,6 @@
 #version 460
 #extension GL_EXT_ray_tracing : enable
+#extension GL_KHR_shader_subgroup_basic : enable
 layout(location = 1) rayPayloadInEXT vec4 incomingPayload;
 void main()
 {
@@ -22,8 +23,10 @@
     mat3x4 v16 = gl_ObjectToWorld3x4EXT;
     mat3x4 v17 = gl_WorldToObject3x4EXT;
 	incomingPayload = vec4(0.5f);
-	if (v2 == 1)
-	    ignoreIntersectionEXT();
-	else
-	    terminateRayEXT();
+	if (v2 == 1) {
+	    ignoreIntersectionEXT;
+	    v0.x++;
+	}
+	incomingPayload.x += float(gl_SubgroupSize);
+	terminateRayEXT;
 }
diff --git a/Test/spv.ext.ClosestHitShader_Errors.rchit b/Test/spv.ext.ClosestHitShader_Errors.rchit
index 05e05fe..6416f1f 100644
--- a/Test/spv.ext.ClosestHitShader_Errors.rchit
+++ b/Test/spv.ext.ClosestHitShader_Errors.rchit
@@ -2,12 +2,14 @@
 #extension GL_EXT_ray_tracing : enable
 hitAttributeEXT vec4 payload;
 layout(binding = 0, set = 0) uniform accelerationStructureEXT accEXT;
-
+layout(location = 2) rayPayloadEXT vec4 payload0;
+layout(location = 2) rayPayloadInEXT block { vec4 data; }; // ERROR : location already used
 void main()
 {
     payload.x = 1.0f;                                       // ERROR, cannot write to hitattributeEXT in stage
     reportIntersectionEXT(1.0, 1U);                          // ERROR, unsupported builtin in stage 
-    terminateRayEXT();
-    ignoreIntersectionEXT();
+    terminateRayEXT;
+    ignoreIntersectionEXT;
     bool e1 = gl_IncomingRayFlagsEXT == gl_RayFlagsSkipAABBEXT;
+    traceRayEXT(accEXT, 0, 0, 0, 0, 0, vec3(0.0), 0.0, vec3(1.0), 1.0, 0); //ERROR no payload variable with location = 0
 }
diff --git a/Test/spv.ext.ClosestHitShader_Subgroup.rchit b/Test/spv.ext.ClosestHitShader_Subgroup.rchit
new file mode 100644
index 0000000..ce2091a
--- /dev/null
+++ b/Test/spv.ext.ClosestHitShader_Subgroup.rchit
@@ -0,0 +1,16 @@
+#version 460
+#pragma use_vulkan_memory_model
+#extension GL_EXT_ray_tracing : enable
+#extension GL_NV_shader_sm_builtins : enable
+#extension GL_KHR_shader_subgroup_ballot : enable
+#extension GL_ARB_shader_ballot : enable
+#extension GL_NV_shader_sm_builtins : enable
+layout(binding = 0, set = 0) uniform accelerationStructureEXT accEXT;
+layout(location = 1) rayPayloadInEXT vec4 incomingPayload;
+void main()
+{
+	traceRayEXT(accEXT, 0u, 1u, 2u, 3u, 0u, vec3(0.5f), 0.5f, vec3(1.0f), 0.75f, 1);
+        incomingPayload.x = float(gl_SubgroupInvocationID) + float(gl_SubGroupGeMaskARB) +
+			    float(gl_SubgroupGtMask) + float(gl_SubgroupLeMask) + 
+                            float(gl_SubGroupLtMaskARB) + float(gl_SMIDNV);
+}
diff --git a/Test/spv.ext.MissShader.rmiss b/Test/spv.ext.MissShader.rmiss
index e774334..982bd84 100644
--- a/Test/spv.ext.MissShader.rmiss
+++ b/Test/spv.ext.MissShader.rmiss
@@ -1,5 +1,9 @@
 #version 460
 #extension GL_EXT_ray_tracing : enable
+#extension GL_NV_shader_sm_builtins : enable
+#extension GL_KHR_shader_subgroup_ballot : enable
+#extension GL_ARB_shader_ballot : enable
+#extension GL_NV_shader_sm_builtins : enable
 layout(binding = 0, set = 0) uniform accelerationStructureEXT accEXT;
 layout(location = 0) rayPayloadEXT vec4 localPayload;
 layout(location = 1) rayPayloadInEXT vec4 incomingPayload;
@@ -12,4 +16,5 @@
 	float v4 = gl_RayTminEXT;
 	float v5 = gl_RayTmaxEXT;
 	traceRayEXT(accEXT, 0u, 1u, 2u, 3u, 0u, vec3(0.5f), 0.5f, vec3(1.0f), 0.75f, 1);
+    incomingPayload.x = float(gl_SubGroupSizeARB) + float(gl_SubgroupEqMask) + float(gl_WarpIDNV);
 }
diff --git a/Test/spv.ext.MissShader_Errors.rmiss b/Test/spv.ext.MissShader_Errors.rmiss
index 2391211..c921f23 100644
--- a/Test/spv.ext.MissShader_Errors.rmiss
+++ b/Test/spv.ext.MissShader_Errors.rmiss
@@ -11,6 +11,6 @@
     float e12 = gl_HitTEXT;                                 // ERROR, unsupported builtin in stage
     float e13 = gl_HitKindEXT;                              // ERROR, unsupported builtin in stage
     reportIntersectionEXT(1.0, 1U);                         // ERROR, unsupported builtin in stage
-    ignoreIntersectionEXT();                                // ERROR, unsupported builtin in stage
-    terminateRayEXT();                                      // ERROR, unsupported builtin in stage
+    ignoreIntersectionEXT;                                  // ERROR, unsupported in stage
+    terminateRayEXT;                                        // ERROR, unsupported in stage
 }
diff --git a/Test/spv.ext.RayCallable_Errors.rcall b/Test/spv.ext.RayCallable_Errors.rcall
index d35672e..660ea75 100644
--- a/Test/spv.ext.RayCallable_Errors.rcall
+++ b/Test/spv.ext.RayCallable_Errors.rcall
@@ -3,7 +3,8 @@
 hitAttributeEXT vec4 hitattr;                                // ERROR, hitattributeEXT unsupported in this stage 
 rayPayloadEXT vec4 payload;                                  // ERROR, rayPayloadEXT unsupported in this stage
 rayPayloadInEXT vec4 payloadIn;                              // ERROR, rayPayloadInEXT unsupported in this stage
-
+layout(location = 0) callableDataEXT vec4 cd0;
+layout(location = 0) callableDataEXT float cd1;              // ERROR, location already used
 void main()
 {
     int e0 = gl_PrimitiveID;                                // ERROR, unsupported builtin in stage
@@ -21,6 +22,7 @@
     float e13 = gl_HitKindEXT;                               // ERROR, unsupported builtin in stage
     uint curFlags = gl_IncomingRayFlagsEXT;                  // ERROR, unsupported builtin in stage
     reportIntersectionEXT(1.0, 1U);                          // ERROR, unsupported builtin in stage
-    ignoreIntersectionEXT();                                 // ERROR, unsupported builtin in stage
-    terminateRayEXT();                                       // ERROR, unsupported builtin in stage
+    ignoreIntersectionEXT;                                   // ERROR, unsupported in stage
+    terminateRayEXT;                                         // ERROR, unsupported in stage
+    executeCallableEXT(1,1);                                 // ERROR, no callable data with location 1
 }
diff --git a/Test/spv.ext.RayConstants.rgen b/Test/spv.ext.RayConstants.rgen
index 73cb0c1..8e681ba 100644
--- a/Test/spv.ext.RayConstants.rgen
+++ b/Test/spv.ext.RayConstants.rgen
@@ -1,7 +1,7 @@
 #version 460
 #extension GL_EXT_ray_tracing : enable
 layout(binding = 0, set = 0) uniform accelerationStructureEXT accEXT;
-layout(location = 0) rayPayloadEXT vec4 payload;
+layout(location = 1) rayPayloadEXT vec4 payload;
 void main()
 {
     const uint rayFlags = gl_RayFlagsNoneEXT | gl_RayFlagsOpaqueEXT |
diff --git a/Test/spv.ext.RayGenSBTlayout.rgen b/Test/spv.ext.RayGenSBTlayout.rgen
new file mode 100644
index 0000000..a5fa2b6
--- /dev/null
+++ b/Test/spv.ext.RayGenSBTlayout.rgen
@@ -0,0 +1,28 @@
+#version 460
+#extension GL_EXT_ray_tracing : enable
+#extension GL_ARB_gpu_shader_int64 : enable
+layout(location = 1) rayPayloadEXT vec4 payload;
+// should get std430 layout
+layout(shaderRecordEXT) buffer block
+{
+    vec3 dir;
+    vec3 origin;
+    int i;
+    uvec2 aHandle32;
+    uint64_t aHandle64;
+    vec2 arr2[2];
+    float a;
+    vec3 arr3[2];
+    float packme;
+    vec2 b;
+    float c;
+};
+void main()
+{
+    uint lx = gl_LaunchIDEXT.x;
+    uint ly = gl_LaunchIDEXT.y;
+    uint sx = gl_LaunchSizeEXT.x;
+    uint sy = gl_LaunchSizeEXT.y;
+    traceRayEXT(accelerationStructureEXT(aHandle32), lx, ly, sx, sy, 0u, origin, 0.5f, dir, 0.75f, 1);
+    traceRayEXT(accelerationStructureEXT(aHandle64), lx, ly, sx, sy, 0u, origin, 0.5f, dir, 0.75f, 1);
+}
diff --git a/Test/spv.ext.RayGenSBTlayout140.rgen b/Test/spv.ext.RayGenSBTlayout140.rgen
new file mode 100644
index 0000000..7d673a8
--- /dev/null
+++ b/Test/spv.ext.RayGenSBTlayout140.rgen
@@ -0,0 +1,27 @@
+#version 460
+#extension GL_EXT_ray_tracing : enable
+#extension GL_ARB_gpu_shader_int64 : enable
+layout(location = 1) rayPayloadEXT vec4 payload;
+layout(shaderRecordEXT, std140) buffer block
+{
+    vec3 dir;
+    vec3 origin;
+    int i;
+    uvec2 aHandle32;
+    uint64_t aHandle64;
+    vec2 arr[2];
+    float a;
+    vec3 arr3[2];
+    float packme;
+    vec2 b;
+    float c;
+};
+void main()
+{
+    uint lx = gl_LaunchIDEXT.x;
+    uint ly = gl_LaunchIDEXT.y;
+    uint sx = gl_LaunchSizeEXT.x;
+    uint sy = gl_LaunchSizeEXT.y;
+    traceRayEXT(accelerationStructureEXT(aHandle32), lx, ly, sx, sy, 0u, origin, 0.5f, dir, 0.75f, 1);
+    traceRayEXT(accelerationStructureEXT(aHandle64), lx, ly, sx, sy, 0u, origin, 0.5f, dir, 0.75f, 1);
+}
diff --git a/Test/spv.ext.RayGenSBTlayout430.rgen b/Test/spv.ext.RayGenSBTlayout430.rgen
new file mode 100644
index 0000000..bd308b4
--- /dev/null
+++ b/Test/spv.ext.RayGenSBTlayout430.rgen
@@ -0,0 +1,27 @@
+#version 460
+#extension GL_EXT_ray_tracing : enable
+#extension GL_ARB_gpu_shader_int64 : enable
+layout(location = 1) rayPayloadEXT vec4 payload;
+layout(shaderRecordEXT, std430) buffer block
+{
+    vec3 dir;
+    vec3 origin;
+    int i;
+    uvec2 aHandle32;
+    uint64_t aHandle64;
+    vec2 arr[2];
+    float a;
+    vec3 arr3[2];
+    float packme;
+    vec2 b;
+    float c;
+};
+void main()
+{
+    uint lx = gl_LaunchIDEXT.x;
+    uint ly = gl_LaunchIDEXT.y;
+    uint sx = gl_LaunchSizeEXT.x;
+    uint sy = gl_LaunchSizeEXT.y;
+    traceRayEXT(accelerationStructureEXT(aHandle32), lx, ly, sx, sy, 0u, origin, 0.5f, dir, 0.75f, 1);
+    traceRayEXT(accelerationStructureEXT(aHandle64), lx, ly, sx, sy, 0u, origin, 0.5f, dir, 0.75f, 1);
+}
diff --git a/Test/spv.ext.RayGenSBTlayoutscalar.rgen b/Test/spv.ext.RayGenSBTlayoutscalar.rgen
new file mode 100644
index 0000000..16bcb13
--- /dev/null
+++ b/Test/spv.ext.RayGenSBTlayoutscalar.rgen
@@ -0,0 +1,28 @@
+#version 460
+#extension GL_EXT_ray_tracing : enable
+#extension GL_ARB_gpu_shader_int64 : enable
+#extension GL_EXT_scalar_block_layout : enable
+layout(location = 1) rayPayloadEXT vec4 payload;
+layout(shaderRecordEXT, scalar) buffer block
+{
+    vec3 dir;
+    vec3 origin;
+    int i;
+    uvec2 aHandle32;
+    uint64_t aHandle64;
+    vec2 arr[2];
+    float a;
+    vec3 arr3[2];
+    float packme;
+    vec2 b;
+    float c;
+};
+void main()
+{
+    uint lx = gl_LaunchIDEXT.x;
+    uint ly = gl_LaunchIDEXT.y;
+    uint sx = gl_LaunchSizeEXT.x;
+    uint sy = gl_LaunchSizeEXT.y;
+    traceRayEXT(accelerationStructureEXT(aHandle32), lx, ly, sx, sy, 0u, origin, 0.5f, dir, 0.75f, 1);
+    traceRayEXT(accelerationStructureEXT(aHandle64), lx, ly, sx, sy, 0u, origin, 0.5f, dir, 0.75f, 1);
+}
diff --git a/Test/spv.ext.RayGenShader.rgen b/Test/spv.ext.RayGenShader.rgen
index 9fedf3a..e9eb2cb 100644
--- a/Test/spv.ext.RayGenShader.rgen
+++ b/Test/spv.ext.RayGenShader.rgen
@@ -4,7 +4,7 @@
 layout(binding = 0) uniform accelerationStructureEXT accEXT0;
 layout(binding = 1, set = 0) uniform accelerationStructureEXT accEXT1; // Unused
 layout(binding = 2, r32ui) shadercallcoherent uniform uimage2D imageu;
-layout(location = 0) rayPayloadEXT vec4 payload;
+layout(location = 1) rayPayloadEXT vec4 payload;
 layout(shaderRecordEXT) buffer block
 {
 	vec3 dir;
diff --git a/Test/spv.ext.RayGenShader11.rgen b/Test/spv.ext.RayGenShader11.rgen
index 4817026..50853d4 100644
--- a/Test/spv.ext.RayGenShader11.rgen
+++ b/Test/spv.ext.RayGenShader11.rgen
@@ -1,7 +1,7 @@
 #version 460
 #extension GL_EXT_ray_tracing : enable
 layout(binding = 0, set = 0) uniform accelerationStructureEXT accEXT;
-layout(location = 0) rayPayloadEXT vec4 payload;
+layout(location = 1) rayPayloadEXT vec4 payload;
 layout(shaderRecordEXT) buffer block
 {
 	vec3 dir;
diff --git a/Test/spv.ext.RayGenShaderArray.rgen b/Test/spv.ext.RayGenShaderArray.rgen
index d3f99de..66286d9 100644
--- a/Test/spv.ext.RayGenShaderArray.rgen
+++ b/Test/spv.ext.RayGenShaderArray.rgen
@@ -1,14 +1,17 @@
 #version 460
 #extension GL_EXT_ray_tracing : enable
 #extension GL_EXT_nonuniform_qualifier : enable
+#extension GL_ARB_gpu_shader_int64 : enable
 layout(binding = 0, set = 0) uniform accelerationStructureEXT accEXT0[];
 layout(binding = 1, set = 0) uniform accelerationStructureEXT accEXT1[2];
-layout(location = 0) rayPayloadEXT vec4 payload;
+layout(location = 1) rayPayloadEXT vec4 payload;
 layout(shaderRecordEXT) buffer block
 {
 	vec3 dir;
 	vec3 origin;
     int i;
+    uvec2 aHandle32;
+    uint64_t aHandle64;
 };
 void main()
 {
@@ -19,4 +22,6 @@
     traceRayEXT(accEXT0[i], lx, ly, sx, sy, 0u, origin, 0.5f, dir, 0.75f, 1);
     traceRayEXT(accEXT1[i], lx, ly, sx, sy, 0u, origin, 0.5f, dir, 0.75f, 1);
     traceRayEXT(accEXT0[nonuniformEXT(i)], lx, ly, sx, sy, 0u, origin, 0.5f, dir, 0.75f, 1);
+    traceRayEXT(accelerationStructureEXT(aHandle32), lx, ly, sx, sy, 0u, origin, 0.5f, dir, 0.75f, 1);
+    traceRayEXT(accelerationStructureEXT(aHandle64), lx, ly, sx, sy, 0u, origin, 0.5f, dir, 0.75f, 1);
 }
diff --git a/Test/spv.ext.RayGenShader_Errors.rgen b/Test/spv.ext.RayGenShader_Errors.rgen
index 3498342..107df0f 100644
--- a/Test/spv.ext.RayGenShader_Errors.rgen
+++ b/Test/spv.ext.RayGenShader_Errors.rgen
@@ -20,7 +20,7 @@
 };
 void main()
 {
-    accelerationStructureEXT a = 0;
+    accelerationStructureEXT a = accelerationStructureEXT(c);
     int e0 = gl_PrimitiveID;                                // ERROR, unsupported builtin in stage
     int e1 = gl_InstanceID;                                 // ERROR, unsupported builtin in stage
     int e3 = gl_InstanceCustomIndexEXT;                      // ERROR, unsupported builtin in stage
@@ -36,7 +36,7 @@
     float e13 = gl_HitKindEXT;                               // ERROR, unsupported builtin in stage
     int e14 = gl_RayFlagsSkipAABBEXT;                        // ERROR, unsupported builtin in stage
     reportIntersectionEXT(1.0, 1U);                          // ERROR, unsupported builtin in stage
-    ignoreIntersectionEXT();                                 // ERROR, unsupported builtin in stage
-    terminateRayEXT();                                       // ERROR, unsupported builtin in stage
-    d = 1.0f;                                               // ERROR, can't modify shaderRecordEXT block
+    ignoreIntersectionEXT;                                   // ERROR, unsupported builtin in stage
+    terminateRayEXT;                                         // ERROR, unsupported builtin in stage
+    d = 1.0f;                                                // ERROR, can't modify shaderRecordEXT block
 }
diff --git a/Test/spv.ext.RayQueryDecl.frag b/Test/spv.ext.RayQueryDecl.frag
new file mode 100644
index 0000000..8a144d6
--- /dev/null
+++ b/Test/spv.ext.RayQueryDecl.frag
@@ -0,0 +1,14 @@
+#version 460
+#extension GL_ARB_separate_shader_objects : enable
+#extension GL_EXT_nonuniform_qualifier : enable
+#extension GL_GOOGLE_include_directive : enable
+#extension GL_EXT_scalar_block_layout : enable
+#extension GL_EXT_ray_query : enable
+
+layout(location = 0) out vec4 outColor;
+
+rayQueryEXT rq;
+
+void main() {
+  outColor = vec4(0.0);
+}
diff --git a/Test/spv.imageAtomic64.frag b/Test/spv.imageAtomic64.frag
new file mode 100644
index 0000000..bd671d9
--- /dev/null
+++ b/Test/spv.imageAtomic64.frag
@@ -0,0 +1,92 @@
+#version 450 core

+

+#extension GL_ARB_gpu_shader_int64: enable

+#extension GL_EXT_shader_image_int64: enable

+#extension GL_KHR_memory_scope_semantics: enable

+#extension GL_ARB_sparse_texture2: enable

+ 

+layout(binding = 0, r64i)  uniform i64image1D i1D;

+layout(binding = 1, r64ui) uniform u64image2D u2D;

+layout(binding = 2, r64i)  uniform i64image3D i3D;

+layout(binding = 3, r64ui) uniform u64imageCube uCube;

+layout(binding = 4, r64i)  uniform i64imageBuffer iBuf;

+layout(binding = 5, r64ui) uniform u64image1DArray u1DArray;

+layout(binding = 6, r64i)  uniform i64image2DArray i2DArray;

+layout(binding = 7, r64ui) uniform u64imageCubeArray uCubeArray;

+layout(binding = 8, r64i)  uniform i64image2DRect i2DRect;

+layout(binding = 9, r64ui) uniform u64image2DMS u2DMS;

+layout(binding = 10, r64i) uniform i64image2DMSArray i2DMSArray;

+

+layout(binding = 11) buffer Buf

+{

+    int64_t i64;

+    uint64_t u64;

+    i64vec4 i64v4;

+    u64vec4 u64v4;

+    ivec4 i32v4;

+};

+

+void main()

+{

+    i64 = imageAtomicAdd(i1D, i32v4.x, i64);

+    i64 = imageAtomicMin(i3D, i32v4.xyz, i64);

+    i64 = imageAtomicMax(iBuf, i32v4.x, i64);

+    i64 = imageAtomicAnd(i2DArray, i32v4.xyz, i64);

+    i64 = imageAtomicOr(i2DRect, i32v4.xy, i64);

+    i64 = imageAtomicXor(i2DMSArray, i32v4.xyz, i32v4.w, i64);

+    i64 = imageAtomicExchange(i1D, i32v4.x, i64);

+    i64 = imageAtomicCompSwap(i3D, i32v4.xyz, i64, i64 + 1);

+

+    i64 = imageAtomicAdd(i1D, i32v4.x, i64, gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelaxed);

+    i64 = imageAtomicMin(i3D, i32v4.xyz, i64, gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelaxed);

+    i64 = imageAtomicMax(iBuf, i32v4.x, i64, gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelaxed);

+    i64 = imageAtomicAnd(i2DArray, i32v4.xyz, i64, gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelaxed);

+    i64 = imageAtomicOr(i2DRect, i32v4.xy, i64, gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelaxed);

+    i64 = imageAtomicXor(i2DMSArray, i32v4.xyz, i32v4.w, i64, gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelaxed);

+    i64 = imageAtomicExchange(i1D, i32v4.x, i64, gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelaxed);

+    i64 = imageAtomicCompSwap(i3D, i32v4.xyz, i64, i64 + 1, gl_ScopeDevice,

+            gl_StorageSemanticsImage, gl_SemanticsRelaxed, gl_StorageSemanticsImage, gl_SemanticsRelaxed);

+    i64 = imageAtomicLoad(iBuf, i32v4.x, gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelaxed);

+    imageAtomicStore(i2DArray, i32v4.xyz, i64, gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelaxed);

+

+    u64 = imageAtomicAdd(u2D, i32v4.xy, u64);

+    u64 = imageAtomicMin(uCube, i32v4.xyz, u64);

+    u64 = imageAtomicMax(u1DArray, i32v4.xy, u64);

+    u64 = imageAtomicAnd(uCubeArray, i32v4.xyz, u64);

+    u64 = imageAtomicOr(u2DMS, i32v4.xy, i32v4.z, u64);

+    u64 = imageAtomicXor(u2D, i32v4.xy, u64);

+    u64 = imageAtomicExchange(uCube, i32v4.xyz, u64);

+    u64 = imageAtomicCompSwap(u1DArray, i32v4.xy, u64, u64 + 1);

+

+    u64 = imageAtomicAdd(u2D, i32v4.xy, u64, gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelaxed);

+    u64 = imageAtomicMin(uCube, i32v4.xyz, u64, gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelaxed);

+    u64 = imageAtomicMax(u1DArray, i32v4.xy, u64, gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelaxed);

+    u64 = imageAtomicAnd(uCubeArray, i32v4.xyz, u64, gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelaxed);

+    u64 = imageAtomicOr(u2DMS, i32v4.xy, i32v4.z, u64, gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelaxed);

+    u64 = imageAtomicXor(u2D, i32v4.xy, u64, gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelaxed);

+    u64 = imageAtomicExchange(uCube, i32v4.xyz, u64, gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelaxed);

+    u64 = imageAtomicCompSwap(u1DArray, i32v4.xy, u64, u64 + 1, gl_ScopeDevice,

+            gl_StorageSemanticsImage, gl_SemanticsRelaxed, gl_StorageSemanticsImage, gl_SemanticsRelaxed);

+    u64 = imageAtomicLoad(uCubeArray, i32v4.xyz, gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelaxed);

+    imageAtomicStore(u2DMS, i32v4.xy, i32v4.z, u64, gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelaxed);

+

+    i64v4 += imageLoad(i1D, i32v4.x);

+    i64v4 += imageLoad(i3D, i32v4.xyz);

+    i64v4 += imageLoad(iBuf, i32v4.x);

+    i64v4 += imageLoad(i2DArray, i32v4.xyz);

+    i64v4 += imageLoad(i2DRect, i32v4.xy);

+    i64v4 += imageLoad(i2DMSArray, i32v4.xyz, i32v4.w);

+

+    imageStore(u2D, i32v4.xy, u64v4);

+    imageStore(uCube, i32v4.xyz, u64v4);

+    imageStore(u1DArray, i32v4.xy, u64v4);

+    imageStore(uCubeArray, i32v4.xyz, u64v4);

+    imageStore(u2DMS, i32v4.xy, i32v4.z, u64v4);

+

+    sparseImageLoadARB(i3D, i32v4.xyz, i64v4);

+    sparseImageLoadARB(i2DArray, i32v4.xyz, i64v4);

+    sparseImageLoadARB(i2DRect, i32v4.xy, i64v4);

+    sparseImageLoadARB(u2D, i32v4.xy, u64v4);

+    sparseImageLoadARB(uCube, i32v4.xyz, u64v4);

+    sparseImageLoadARB(uCubeArray, i32v4.xyz, u64v4);

+}
\ No newline at end of file
diff --git a/Test/spv.imageLoadStoreLod.frag b/Test/spv.imageLoadStoreLod.frag
index 0da1da1..ed3cad2 100644
--- a/Test/spv.imageLoadStoreLod.frag
+++ b/Test/spv.imageLoadStoreLod.frag
@@ -1,6 +1,8 @@
 #version 450 core

 

 #extension GL_AMD_shader_image_load_store_lod: enable

+#extension GL_ARB_gpu_shader_int64: enable

+#extension GL_EXT_shader_image_int64: enable

 

 layout(rgba32f,  binding = 0) uniform image1D         i1D;

 layout(rgba32f,  binding = 1) uniform image2D         i2D;

@@ -12,6 +14,20 @@
 

 layout(location = 0) out vec4 fragColor;

 

+layout(r64i,  binding = 7)  uniform i64image1D        i64i1D;

+layout(r64i,  binding = 8)  uniform i64image2D        i64i2D;

+layout(r64i,  binding = 9)  uniform i64image3D        i64i3D;

+layout(r64ui, binding = 10) uniform u64imageCube      u64iCube;

+layout(r64ui, binding = 11) uniform u64image1DArray   u64i1DArray;

+layout(r64ui, binding = 12) uniform u64image2DArray   u64i2DArray;

+layout(r64ui, binding = 13) uniform u64imageCubeArray u64iCubeArray;

+

+layout(binding = 14) buffer Buf

+{

+    i64vec4 i64v4;

+    u64vec4 u64v4;

+};

+

 void main()

 {

     const int c1 = 1;

@@ -33,4 +49,14 @@
     sparseImageLoadLodAMD(uiCubeArray, c3, lod, u4);

 

     fragColor = f4 + vec4(u4);

+

+    i64v4 += imageLoadLodAMD(i64i1D, c1, lod);

+    i64v4 += imageLoadLodAMD(i64i2D, c2, lod);

+    i64v4 += imageLoadLodAMD(i64i3D, c3, lod);

+

+    imageStoreLodAMD(u64iCube, c3, lod, u64v4);

+    imageStoreLodAMD(u64i1DArray, c2, lod, u64v4);

+

+    sparseImageLoadLodAMD(u64i2DArray, c3, lod, u64v4);

+    sparseImageLoadLodAMD(u64iCubeArray, c3, lod, u64v4);

 }
\ No newline at end of file
diff --git a/Test/spv.layer.tese b/Test/spv.layer.tese
new file mode 100644
index 0000000..b0ce079
--- /dev/null
+++ b/Test/spv.layer.tese
@@ -0,0 +1,8 @@
+#version 450
+
+#extension GL_ARB_shader_viewport_layer_array : require
+
+layout(triangles) in;
+void main() {
+  gl_Layer = 1;
+}
diff --git a/Test/spv.nonuniform.frag b/Test/spv.nonuniform.frag
index d3b05a5..cf7ebed 100644
--- a/Test/spv.nonuniform.frag
+++ b/Test/spv.nonuniform.frag
@@ -5,6 +5,7 @@
 layout(location=0) nonuniformEXT in vec4 nu_inv4;

 nonuniformEXT float nu_gf;

 layout(location=1) in nonuniformEXT flat int nu_ii;

+layout(location = 2) in vec2 inTexcoord;

 

 layout(binding=0, input_attachment_index = 0) uniform subpassInput        inputAttachmentDyn[];

 layout(binding=1)                             uniform samplerBuffer       uniformTexelBufferDyn[];

@@ -16,6 +17,8 @@
 layout(binding=7, input_attachment_index = 1) uniform subpassInput        inputAttachment[];

 layout(binding=8)                             uniform samplerBuffer       uniformTexelBuffer[];

 layout(binding=9, r32f)                       uniform imageBuffer         storageTexelBuffer[];

+layout(binding = 10)                          uniform texture2D           uniformTexArr[8];

+layout(binding = 11)                          uniform sampler             uniformSampler;

 

 nonuniformEXT int foo(nonuniformEXT int nupi, nonuniformEXT out int f)

 {

@@ -25,10 +28,12 @@
 void main()

 {

     nonuniformEXT int nu_li;

+    nonuniformEXT int nu_li2;

     int dyn_i;

 

     int a = foo(nu_li, nu_li);

     nu_li = nonuniformEXT(a) + nonuniformEXT(a * 2);

+    nu_li2 = a + nonuniformEXT(a * 2);

 

     float b;

     b = nu_inv4.x * nu_gf;

@@ -42,14 +47,26 @@
     b += subpassLoad(inputAttachment[nu_ii]).x;

     b += texelFetch(uniformTexelBuffer[nu_ii], 1).x;

     b += imageLoad(storageTexelBuffer[nu_ii], 1).x;

+    b += texture(sampler2D(uniformTexArr[nu_ii], uniformSampler), inTexcoord.xy).x;

+    b += texture(nonuniformEXT(sampler2D(uniformTexArr[nu_ii], uniformSampler)), inTexcoord.xy).x;

 

     nonuniformEXT ivec4 v;

     nonuniformEXT mat4 m;

     nonuniformEXT struct S { int a; } s;

+    nonuniformEXT int arr[10];

     ivec4 uv;

+    mat4 um;

+    struct US { int a[10]; } us;

+    int uarr[10];

     b += uniformBuffer[v.y].a;

     b += uniformBuffer[v[2]].a;

     b += uniformBuffer[uv[nu_ii]].a;

     b += uniformBuffer[int(m[2].z)].a;

     b += uniformBuffer[s.a].a;

+    b += uniformBuffer[arr[2]].a;

+    b += uniformBuffer[int(um[nu_ii].z)].a;

+    b += uniformBuffer[us.a[nu_ii]].a;

+    b += uniformBuffer[uarr[nu_ii]].a;

+

+    storageBuffer[nu_ii].b = b;

 }

diff --git a/Test/spv.paramMemory.420.frag b/Test/spv.paramMemory.420.frag
new file mode 100644
index 0000000..15f175a
--- /dev/null
+++ b/Test/spv.paramMemory.420.frag
@@ -0,0 +1,33 @@
+#version 420
+
+// Need this extension to permit passing a formatless readonly image to a helper function.
+#extension GL_EXT_shader_image_load_formatted : require
+
+readonly coherent uniform layout(set = 0, binding = 0) image2D image1;
+readonly uniform layout(set = 0, binding = 2) image2D image2;
+writeonly coherent uniform layout(set = 0, binding = 1, rgba32f) image2D image3;
+writeonly uniform layout(set = 0, binding = 3, rgba16f) image2D image4;
+
+flat in layout(location = 0) ivec2 in_coords;
+out layout(location = 0) vec4 out_color;
+
+vec4 image_load(readonly coherent image2D image, ivec2 coords)
+{
+	return imageLoad(image, in_coords);
+}
+
+void image_store(writeonly coherent image2D image, ivec2 coords, vec4 data)
+{
+	imageStore(image, in_coords, data);
+}
+
+void main()
+{
+	vec4 read1 = image_load(image1, in_coords);
+	vec4 read2 = image_load(image2, in_coords);
+
+	image_store(image3, in_coords, read1*0.5);
+	image_store(image4, in_coords, read2*2.0);
+
+	out_color = vec4(0.0);
+}
diff --git a/Test/spv.specConstArrayCheck.vert b/Test/spv.specConstArrayCheck.vert
old mode 100755
new mode 100644
diff --git a/Test/spv.terminate.frag b/Test/spv.terminate.frag
new file mode 100644
index 0000000..2555877
--- /dev/null
+++ b/Test/spv.terminate.frag
@@ -0,0 +1,8 @@
+#version 400

+

+#extension GL_EXT_terminate_invocation : enable

+

+void main()

+{

+    terminateInvocation;

+}

diff --git a/Test/spv.viewportindex.tese b/Test/spv.viewportindex.tese
new file mode 100644
index 0000000..0da4cc8
--- /dev/null
+++ b/Test/spv.viewportindex.tese
@@ -0,0 +1,8 @@
+#version 450
+
+#extension GL_ARB_shader_viewport_layer_array : require
+
+layout(triangles) in;
+void main() {
+  gl_ViewportIndex = 1;
+}
diff --git a/Test/terminate.frag b/Test/terminate.frag
new file mode 100644
index 0000000..32f1495
--- /dev/null
+++ b/Test/terminate.frag
@@ -0,0 +1,10 @@
+#version 400

+

+void foo() { terminateInvocation; } // ERROR: identifier undeclared

+

+#extension GL_EXT_terminate_invocation : enable

+

+void main()

+{

+    int terminateInvocation;  // syntax ERROR

+}

diff --git a/Test/terminate.vert b/Test/terminate.vert
new file mode 100644
index 0000000..1d4eea9
--- /dev/null
+++ b/Test/terminate.vert
@@ -0,0 +1,10 @@
+#version 400

+

+void foo() { terminateInvocation; } // ERROR: identifier undeclared

+

+#extension GL_EXT_terminate_invocation : enable

+

+void main()

+{

+    terminateInvocation;  // ERROR: wrong stage

+}

diff --git a/Test/tokenPaste.vert b/Test/tokenPaste.vert
index 40de6f9..c4515d4 100644
--- a/Test/tokenPaste.vert
+++ b/Test/tokenPaste.vert
@@ -51,6 +51,18 @@
 // non-identifiers
 int a = simplePaste(11,12);
 
+// should work in #if as well
+#define seahorse 1
+#define sealion 0
+#define marine_animal(suffix) (sea ## suffix)
+
+#if marine_animal(horse) // should pass
+uniform float seahorse_var;
+#endif
+#if !marine_animal(lion) // should pass
+uniform float sealion_var;
+#endif
+
 // operators
 #define MAKE_OP(L, R) L ## R

 const int aop = 10;

diff --git a/build_overrides/build.gni b/build_overrides/build.gni
new file mode 100644
index 0000000..3101a86
--- /dev/null
+++ b/build_overrides/build.gni
@@ -0,0 +1,39 @@
+# Copyright (C) 2020 The Khronos Group Inc.
+#
+# 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 The Khronos Group Inc. 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.
+
+declare_args() {
+    build_with_chromium = false
+    linux_use_bundled_binutils_override = true
+    ignore_elf32_limitations = true
+    use_system_xcode = true
+}
diff --git a/build_overrides/glslang.gni b/build_overrides/glslang.gni
index 500578c..003c78f 100644
--- a/build_overrides/glslang.gni
+++ b/build_overrides/glslang.gni
@@ -34,4 +34,4 @@
 # These are variables that are overridable by projects that include glslang.
 
 # The path to glslang dependencies.
-glslang_spirv_tools_dir = "//Externals/spirv-tools"
+glslang_spirv_tools_dir = "//External/spirv-tools"
diff --git a/build_overrides/spirv_tools.gni b/build_overrides/spirv_tools.gni
new file mode 100644
index 0000000..7cf7005
--- /dev/null
+++ b/build_overrides/spirv_tools.gni
@@ -0,0 +1,38 @@
+# Copyright (C) 2020 The Khronos Group Inc.
+#
+# 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 The Khronos Group Inc. 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.
+
+# We are building inside glslang
+spirv_tools_standalone = false
+
+# Paths to SPIRV-Tools dependencies
+spirv_tools_spirv_headers_dir = "//External/spirv-tools/external/spirv-headers"
diff --git a/glslang/HLSL/hlslGrammar.cpp b/glslang/HLSL/hlslGrammar.cpp
index 5bfc53f..f30c640 100644
--- a/glslang/HLSL/hlslGrammar.cpp
+++ b/glslang/HLSL/hlslGrammar.cpp
@@ -480,8 +480,9 @@
             }
 
             // TODO: things scoped within an annotation need their own name space;
-            // TODO: strings are not yet handled.
-            if (variableType.getBasicType() != EbtString && parseContext.getAnnotationNestingLevel() == 0) {
+            // TODO: non-constant strings are not yet handled.
+            if (!(variableType.getBasicType() == EbtString && !variableType.getQualifier().isConstant()) &&
+                parseContext.getAnnotationNestingLevel() == 0) {
                 if (typedefDecl)
                     parseContext.declareTypedef(idToken.loc, *fullName, variableType);
                 else if (variableType.getBasicType() == EbtBlock) {
diff --git a/glslang/HLSL/hlslParseHelper.cpp b/glslang/HLSL/hlslParseHelper.cpp
old mode 100755
new mode 100644
index 3150eac..ea31837
--- a/glslang/HLSL/hlslParseHelper.cpp
+++ b/glslang/HLSL/hlslParseHelper.cpp
@@ -7628,7 +7628,17 @@
     bool tie = false;
 
     // send to the generic selector
-    const TFunction* bestMatch = selectFunction(candidateList, call, convertible, better, tie);
+    const TFunction* bestMatch = nullptr;
+
+    // printf has var args and is in the symbol table as "printf()",
+    // mangled to "printf("
+    if (call.getName() == "printf") {
+        TSymbol* symbol = symbolTable.find("printf(", &builtIn);
+        if (symbol)
+            return symbol->getAsFunction();
+    }
+
+    bestMatch = selectFunction(candidateList, call, convertible, better, tie);
 
     if (bestMatch == nullptr) {
         // If there is nothing selected by allowing only up-conversions (to a larger linearize() value),
diff --git a/glslang/HLSL/hlslParseables.cpp b/glslang/HLSL/hlslParseables.cpp
index 61c820b..025cb5e 100644
--- a/glslang/HLSL/hlslParseables.cpp
+++ b/glslang/HLSL/hlslParseables.cpp
@@ -605,7 +605,7 @@
         { "noise",                            "S",     "F",       "V",              "F",             EShLangPS,     false },
         { "normalize",                        nullptr, nullptr,   "V",              "F",             EShLangAll,    false },
         { "pow",                              nullptr, nullptr,   "SVM,",           "F,",            EShLangAll,    false },
-        // { "printf",                           "-",     "-",       "",            "",              EShLangAll,    false }, TODO: varargs
+        { "printf",                           nullptr, nullptr,   "-",              "-",             EShLangAll,    false },
         { "Process2DQuadTessFactorsAvg",      "-",     "-",       "V4,V2,>V4,>V2,", "F,,,,",         EShLangHS,     false },
         { "Process2DQuadTessFactorsMax",      "-",     "-",       "V4,V2,>V4,>V2,", "F,,,,",         EShLangHS,     false },
         { "Process2DQuadTessFactorsMin",      "-",     "-",       "V4,V2,>V4,>V2,", "F,,,,",         EShLangHS,     false },
@@ -1107,7 +1107,7 @@
     // symbolTable.relateToOperator("noise",                    EOpNoise); // TODO: check return type
     symbolTable.relateToOperator("normalize",                   EOpNormalize);
     symbolTable.relateToOperator("pow",                         EOpPow);
-    // symbolTable.relateToOperator("printf",                     EOpPrintf);
+    symbolTable.relateToOperator("printf",                      EOpDebugPrintf);
     // symbolTable.relateToOperator("Process2DQuadTessFactorsAvg");
     // symbolTable.relateToOperator("Process2DQuadTessFactorsMax");
     // symbolTable.relateToOperator("Process2DQuadTessFactorsMin");
diff --git a/glslang/Include/BaseTypes.h b/glslang/Include/BaseTypes.h
index b69eaeb..55bdd25 100644
--- a/glslang/Include/BaseTypes.h
+++ b/glslang/Include/BaseTypes.h
@@ -228,6 +228,9 @@
     EbvViewIndex,
     EbvDeviceIndex,
 
+    EbvShadingRateKHR,
+    EbvPrimitiveShadingRateKHR,
+
     EbvFragSizeEXT,
     EbvFragInvocationCountEXT,
 
@@ -480,6 +483,9 @@
     case EbvWarpID:                     return "WarpIDNV";
     case EbvSMID:                       return "SMIDNV";
 
+    case EbvShadingRateKHR:             return "ShadingRateKHR";
+    case EbvPrimitiveShadingRateKHR:    return "PrimitiveShadingRateKHR";
+
     default:                      return "unknown built-in variable";
     }
 }
diff --git a/glslang/Include/Types.h b/glslang/Include/Types.h
index 235ea3f..696daf6 100644
--- a/glslang/Include/Types.h
+++ b/glslang/Include/Types.h
@@ -406,6 +406,7 @@
     ElfRg8i,
     ElfR16i,
     ElfR8i,
+    ElfR64i,
 
     ElfIntGuard,       // to help with comparisons
 
@@ -423,6 +424,7 @@
     ElfRg8ui,
     ElfR16ui,
     ElfR8ui,
+    ElfR64ui,
 
     ElfCount
 };
@@ -755,6 +757,12 @@
     bool isPerPrimitive() const { return perPrimitiveNV; }
     bool isPerView() const { return perViewNV; }
     bool isTaskMemory() const { return perTaskNV; }
+    bool isAnyPayload() const {
+        return storage == EvqPayload || storage == EvqPayloadIn;
+    }
+    bool isAnyCallable() const {
+        return storage == EvqCallableData || storage == EvqCallableDataIn;
+    }
 
     // True if this type of IO is supposed to be arrayed with extra level for per-vertex data
     bool isArrayedIo(EShLanguage language) const
@@ -1117,6 +1125,8 @@
         case ElfR32ui:        return "r32ui";
         case ElfR16ui:        return "r16ui";
         case ElfR8ui:         return "r8ui";
+        case ElfR64ui:        return "r64ui";
+        case ElfR64i:         return "r64i";
         default:              return "none";
         }
     }
@@ -1986,6 +1996,7 @@
         case EbtAccStruct:         return "accelerationStructureNV";
         case EbtRayQuery:          return "rayQueryEXT";
         case EbtReference:         return "reference";
+        case EbtString:            return "string";
 #endif
         default:                   return "unknown type";
         }
diff --git a/glslang/Include/intermediate.h b/glslang/Include/intermediate.h
index 30cb6fb..19cd32e 100644
--- a/glslang/Include/intermediate.h
+++ b/glslang/Include/intermediate.h
@@ -280,6 +280,12 @@
     EOpConvUvec2ToPtr,
     EOpConvPtrToUvec2,
 
+    // uint64_t -> accelerationStructureEXT
+    EOpConvUint64ToAccStruct,
+
+    // uvec2 -> accelerationStructureEXT
+    EOpConvUvec2ToAccStruct,
+
     //
     // binary operations
     //
@@ -628,13 +634,16 @@
     // Branch
     //
 
-    EOpKill,            // Fragment only
+    EOpKill,                // Fragment only
+    EOpTerminateInvocation, // Fragment only
+    EOpDemote,              // Fragment only
+    EOpTerminateRayKHR,         // Any-hit only
+    EOpIgnoreIntersectionKHR,   // Any-hit only
     EOpReturn,
     EOpBreak,
     EOpContinue,
     EOpCase,
     EOpDefault,
-    EOpDemote,          // Fragment only
 
     //
     // Constructors
@@ -751,6 +760,7 @@
     EOpConstructNonuniform,     // expected to be transformed away, not present in final AST
     EOpConstructReference,
     EOpConstructCooperativeMatrix,
+    EOpConstructAccStruct,
     EOpConstructGuardEnd,
 
     //
@@ -911,11 +921,13 @@
     EOpAverageRounded,
     EOpMul32x16,
 
-    EOpTrace,
+    EOpTraceNV,
+    EOpTraceKHR,
     EOpReportIntersection,
-    EOpIgnoreIntersection,
-    EOpTerminateRay,
-    EOpExecuteCallable,
+    EOpIgnoreIntersectionNV,
+    EOpTerminateRayNV,
+    EOpExecuteCallableNV,
+    EOpExecuteCallableKHR,
     EOpWritePackedPrimitiveIndices4x8NV,
 
     //
@@ -1282,6 +1294,8 @@
     TIntermTyped* getConstSubtree() const { return constSubtree; }
 #ifndef GLSLANG_WEB
     void setFlattenSubset(int subset) { flattenSubset = subset; }
+    virtual const TString& getAccessName() const;
+
     int getFlattenSubset() const { return flattenSubset; } // -1 means full object
 #endif
 
diff --git a/glslang/MachineIndependent/Initialize.cpp b/glslang/MachineIndependent/Initialize.cpp
index 8d5d04f..a5ef6cc 100644
--- a/glslang/MachineIndependent/Initialize.cpp
+++ b/glslang/MachineIndependent/Initialize.cpp
@@ -509,6 +509,8 @@
     prefixes[EbtUint8] = "u8";
     prefixes[EbtInt16]  = "i16";
     prefixes[EbtUint16] = "u16";
+    prefixes[EbtInt64]  = "i64";
+    prefixes[EbtUint64] = "u64";
 #endif
 
     postfixes[2] = "2";
@@ -4419,9 +4421,7 @@
             "\n");
         stageBuiltins[EShLangAnyHit].append(
             "void ignoreIntersectionNV();"
-            "void ignoreIntersectionEXT();"
             "void terminateRayNV();"
-            "void terminateRayEXT();"
             "\n");
         stageBuiltins[EShLangClosestHit].append(
             "void traceNV(accelerationStructureNV,uint,uint,uint,uint,uint,vec3,float,vec3,float,int);"
@@ -4928,6 +4928,11 @@
             "\n");
     }
 
+    if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 310)) {
+        stageBuiltins[EShLangVertex].append(
+            "out highp int gl_PrimitiveShadingRateEXT;" // GL_EXT_fragment_shading_rate
+            "\n");
+    }
 
     //============================================================================
     //
@@ -5041,6 +5046,12 @@
             "\n");
     }
 
+    if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 310)) {
+        stageBuiltins[EShLangGeometry].append(
+            "out highp int gl_PrimitiveShadingRateEXT;" // GL_EXT_fragment_shading_rate
+            "\n");
+    }
+
     //============================================================================
     //
     // Define the interface to the tessellation control shader.
@@ -5338,6 +5349,11 @@
                 "in vec3 gl_BaryCoordNoPerspNV;"
                 );
 
+        if (version >= 450)
+            stageBuiltins[EShLangFragment].append(
+                "flat in int gl_ShadingRateEXT;" // GL_EXT_fragment_shading_rate
+            );
+
     } else {
         // ES profile
 
@@ -5396,6 +5412,10 @@
                 "in vec3 gl_BaryCoordNV;"
                 "in vec3 gl_BaryCoordNoPerspNV;"
                 );
+        if (version >= 310)
+            stageBuiltins[EShLangFragment].append(
+                "flat in highp int gl_ShadingRateEXT;" // GL_EXT_fragment_shading_rate
+            );
     }
 #endif
 
@@ -5414,6 +5434,12 @@
             "\n");
     }
 
+    if (version >= 300 /* both ES and non-ES */) {
+        stageBuiltins[EShLangFragment].append(
+            "flat in highp uint gl_ViewID_OVR;"     // GL_OVR_multiview, GL_OVR_multiview2
+            "\n");
+    }
+
 #ifndef GLSLANG_ANGLE
     // GL_ARB_shader_ballot
     if (profile != EEsProfile && version >= 450) {
@@ -5426,6 +5452,15 @@
             "in uint64_t gl_SubGroupLeMaskARB;"
             "in uint64_t gl_SubGroupLtMaskARB;"
             "\n";
+        const char* rtBallotDecls =
+            "uniform volatile uint gl_SubGroupSizeARB;"
+            "in volatile uint     gl_SubGroupInvocationARB;"
+            "in volatile uint64_t gl_SubGroupEqMaskARB;"
+            "in volatile uint64_t gl_SubGroupGeMaskARB;"
+            "in volatile uint64_t gl_SubGroupGtMaskARB;"
+            "in volatile uint64_t gl_SubGroupLeMaskARB;"
+            "in volatile uint64_t gl_SubGroupLtMaskARB;"
+            "\n";
         const char* fragmentBallotDecls =
             "uniform uint gl_SubGroupSizeARB;"
             "flat in uint     gl_SubGroupInvocationARB;"
@@ -5443,6 +5478,13 @@
         stageBuiltins[EShLangFragment]      .append(fragmentBallotDecls);
         stageBuiltins[EShLangMeshNV]        .append(ballotDecls);
         stageBuiltins[EShLangTaskNV]        .append(ballotDecls);
+        stageBuiltins[EShLangRayGen]        .append(rtBallotDecls);
+        stageBuiltins[EShLangIntersect]     .append(rtBallotDecls);
+        // No volatile qualifier on these builtins in any-hit
+        stageBuiltins[EShLangAnyHit]        .append(ballotDecls);
+        stageBuiltins[EShLangClosestHit]    .append(rtBallotDecls);
+        stageBuiltins[EShLangMiss]          .append(rtBallotDecls);
+        stageBuiltins[EShLangCallable]      .append(rtBallotDecls);
     }
 
     // GL_KHR_shader_subgroup
@@ -5480,6 +5522,21 @@
             "in highp   uint  gl_NumSubgroups;"
             "in highp   uint  gl_SubgroupID;"
             "\n";
+        // These builtins are volatile for RT stages
+        const char* rtSubgroupDecls =
+            "in mediump volatile uint  gl_SubgroupSize;"
+            "in mediump volatile uint  gl_SubgroupInvocationID;"
+            "in highp   volatile uvec4 gl_SubgroupEqMask;"
+            "in highp   volatile uvec4 gl_SubgroupGeMask;"
+            "in highp   volatile uvec4 gl_SubgroupGtMask;"
+            "in highp   volatile uvec4 gl_SubgroupLeMask;"
+            "in highp   volatile uvec4 gl_SubgroupLtMask;"
+            // GL_NV_shader_sm_builtins
+            "in highp    uint  gl_WarpsPerSMNV;"
+            "in highp    uint  gl_SMCountNV;"
+            "in highp volatile uint  gl_WarpIDNV;"
+            "in highp volatile uint  gl_SMIDNV;"
+            "\n";
 
         stageBuiltins[EShLangVertex]        .append(subgroupDecls);
         stageBuiltins[EShLangTessControl]   .append(subgroupDecls);
@@ -5492,12 +5549,13 @@
         stageBuiltins[EShLangMeshNV]        .append(computeSubgroupDecls);
         stageBuiltins[EShLangTaskNV]        .append(subgroupDecls);
         stageBuiltins[EShLangTaskNV]        .append(computeSubgroupDecls);
-        stageBuiltins[EShLangRayGen]        .append(subgroupDecls);
-        stageBuiltins[EShLangIntersect]     .append(subgroupDecls);
+        stageBuiltins[EShLangRayGen]        .append(rtSubgroupDecls);
+        stageBuiltins[EShLangIntersect]     .append(rtSubgroupDecls);
+        // No volatile qualifier on these builtins in any-hit
         stageBuiltins[EShLangAnyHit]        .append(subgroupDecls);
-        stageBuiltins[EShLangClosestHit]    .append(subgroupDecls);
-        stageBuiltins[EShLangMiss]          .append(subgroupDecls);
-        stageBuiltins[EShLangCallable]      .append(subgroupDecls);
+        stageBuiltins[EShLangClosestHit]    .append(rtSubgroupDecls);
+        stageBuiltins[EShLangMiss]          .append(rtSubgroupDecls);
+        stageBuiltins[EShLangCallable]      .append(rtSubgroupDecls);
     }
 
     // GL_NV_ray_tracing/GL_EXT_ray_tracing
@@ -5565,7 +5623,7 @@
             "in    float  gl_RayTminNV;"
             "in    float  gl_RayTminEXT;"
             "in    float  gl_RayTmaxNV;"
-            "in    float  gl_RayTmaxEXT;"
+            "in volatile float gl_RayTmaxEXT;"
             "in    mat4x3 gl_ObjectToWorldNV;"
             "in    mat4x3 gl_ObjectToWorldEXT;"
             "in    mat3x4 gl_ObjectToWorld3x4EXT;"
@@ -5685,13 +5743,57 @@
         commonBuiltins.append("const int gl_StorageSemanticsOutput   = 0x1000;\n");
     }
 
-#endif // !GLSLANG_ANGLE
-
-    if (version >= 300 /* both ES and non-ES */) {
-        stageBuiltins[EShLangFragment].append(
-            "flat in highp uint gl_ViewID_OVR;"     // GL_OVR_multiview, GL_OVR_multiview2
-            "\n");
+    // Adding these to common built-ins triggers an assert due to a memory corruption in related code when testing
+    // So instead add to each stage individually, avoiding the GLSLang bug
+    if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 310)) {
+        for (int stage=EShLangVertex; stage<EShLangCount; stage++)
+        {
+            stageBuiltins[static_cast<EShLanguage>(stage)].append("const highp int gl_ShadingRateFlag2VerticalPixelsEXT       = 1;\n");
+            stageBuiltins[static_cast<EShLanguage>(stage)].append("const highp int gl_ShadingRateFlag4VerticalPixelsEXT       = 2;\n");
+            stageBuiltins[static_cast<EShLanguage>(stage)].append("const highp int gl_ShadingRateFlag2HorizontalPixelsEXT     = 4;\n");
+            stageBuiltins[static_cast<EShLanguage>(stage)].append("const highp int gl_ShadingRateFlag4HorizontalPixelsEXT     = 8;\n");
+        }
     }
+    
+    // GL_EXT_shader_image_int64
+    if ((profile != EEsProfile && version >= 420) ||
+        (profile == EEsProfile && version >= 310)) {
+            
+        const TBasicType bTypes[] = { EbtInt64, EbtUint64 };
+        for (int ms = 0; ms <= 1; ++ms) { // loop over "bool" multisample or not
+            for (int arrayed = 0; arrayed <= 1; ++arrayed) { // loop over "bool" arrayed or not
+                for (int dim = Esd1D; dim < EsdSubpass; ++dim) { // 1D, ..., buffer
+                    if ((dim == Esd1D || dim == EsdRect) && profile == EEsProfile)
+                        continue;
+                    
+                    if ((dim == Esd3D || dim == EsdRect || dim == EsdBuffer) && arrayed)
+                        continue;
+                    
+                    if (dim != Esd2D && ms)
+                        continue;
+                    
+                    // Loop over the bTypes
+                    for (size_t bType = 0; bType < sizeof(bTypes)/sizeof(TBasicType); ++bType) {
+                        //
+                        // Now, make all the function prototypes for the type we just built...
+                        //
+                        TSampler sampler;
+                    
+                        sampler.setImage(bTypes[bType], (TSamplerDim)dim, arrayed ? true : false,
+                                                                          false,
+                                                                          ms      ? true : false);
+
+                        TString typeName = sampler.getString();
+
+                        addQueryFunctions(sampler, typeName, version, profile);
+                        addImageFunctions(sampler, typeName, version, profile);
+                    }
+                }
+            }
+        }
+    }
+#endif // !GLSLANG_ANGLE
+    
 #endif // !GLSLANG_WEB
 
     // printf("%s\n", commonBuiltins.c_str());
@@ -5788,7 +5890,6 @@
 #endif
                             if (shadow && (bTypes[bType] == EbtInt || bTypes[bType] == EbtUint))
                                 continue;
-
                             //
                             // Now, make all the function prototypes for the type we just built...
                             //
@@ -6013,8 +6114,16 @@
 
     if ( profile != EEsProfile ||
         (profile == EEsProfile && version >= 310)) {
-        if (sampler.type == EbtInt || sampler.type == EbtUint) {
-            const char* dataType = sampler.type == EbtInt ? "highp int" : "highp uint";
+        if (sampler.type == EbtInt || sampler.type == EbtUint || sampler.type == EbtInt64 || sampler.type == EbtUint64 ) {
+            
+            const char* dataType;
+            switch (sampler.type) {
+                case(EbtInt): dataType = "highp int"; break;
+                case(EbtUint): dataType = "highp uint"; break;
+                case(EbtInt64): dataType = "highp int64_t"; break;
+                case(EbtUint64): dataType = "highp uint64_t"; break;
+                default: dataType = "";
+            }
 
             const int numBuiltins = 7;
 
@@ -7650,6 +7759,20 @@
             BuiltInVariable("gl_WarpIDNV",              EbvWarpID,          symbolTable);
             BuiltInVariable("gl_SMIDNV",                EbvSMID,            symbolTable);
         }
+
+		if (language == EShLangGeometry || language == EShLangVertex) {
+			if ((profile == EEsProfile && version >= 310) ||
+				(profile != EEsProfile && version >= 450)) {
+				symbolTable.setVariableExtensions("gl_PrimitiveShadingRateEXT", 1, &E_GL_EXT_fragment_shading_rate);
+				BuiltInVariable("gl_PrimitiveShadingRateEXT", EbvPrimitiveShadingRateKHR, symbolTable);
+
+				symbolTable.setVariableExtensions("gl_ShadingRateFlag2VerticalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate);
+				symbolTable.setVariableExtensions("gl_ShadingRateFlag4VerticalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate);
+				symbolTable.setVariableExtensions("gl_ShadingRateFlag2HorizontalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate);
+				symbolTable.setVariableExtensions("gl_ShadingRateFlag4HorizontalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate);
+			}
+		}
+
 #endif // !GLSLANG_WEB
         break;
 
@@ -8156,6 +8279,17 @@
         }
 
         symbolTable.setFunctionExtensions("helperInvocationEXT",            1, &E_GL_EXT_demote_to_helper_invocation);
+
+        if ((profile == EEsProfile && version >= 310) ||
+            (profile != EEsProfile && version >= 450)) {
+            symbolTable.setVariableExtensions("gl_ShadingRateEXT", 1, &E_GL_EXT_fragment_shading_rate);
+            BuiltInVariable("gl_ShadingRateEXT", EbvShadingRateKHR, symbolTable);
+
+            symbolTable.setVariableExtensions("gl_ShadingRateFlag2VerticalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate);
+            symbolTable.setVariableExtensions("gl_ShadingRateFlag4VerticalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate);
+            symbolTable.setVariableExtensions("gl_ShadingRateFlag2HorizontalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate);
+            symbolTable.setVariableExtensions("gl_ShadingRateFlag4HorizontalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate);
+        }
 #endif // !GLSLANG_WEB
         break;
 
@@ -8288,6 +8422,14 @@
             symbolTable.setFunctionExtensions("dFdyCoarse",             1, &E_GL_NV_compute_shader_derivatives);
             symbolTable.setFunctionExtensions("fwidthCoarse",           1, &E_GL_NV_compute_shader_derivatives);
         }
+
+        if ((profile == EEsProfile && version >= 310) ||
+            (profile != EEsProfile && version >= 450)) {
+            symbolTable.setVariableExtensions("gl_ShadingRateFlag2VerticalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate);
+            symbolTable.setVariableExtensions("gl_ShadingRateFlag4VerticalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate);
+            symbolTable.setVariableExtensions("gl_ShadingRateFlag2HorizontalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate);
+            symbolTable.setVariableExtensions("gl_ShadingRateFlag4HorizontalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate);
+        }
 #endif // !GLSLANG_WEB
         break;
 
@@ -8342,9 +8484,7 @@
             symbolTable.setFunctionExtensions("reportIntersectionNV", 1, &E_GL_NV_ray_tracing);
             symbolTable.setFunctionExtensions("reportIntersectionEXT", 1, &E_GL_EXT_ray_tracing);
             symbolTable.setFunctionExtensions("ignoreIntersectionNV", 1, &E_GL_NV_ray_tracing);
-            symbolTable.setFunctionExtensions("ignoreIntersectionEXT", 1, &E_GL_EXT_ray_tracing);
             symbolTable.setFunctionExtensions("terminateRayNV", 1, &E_GL_NV_ray_tracing);
-            symbolTable.setFunctionExtensions("terminateRayEXT", 1, &E_GL_EXT_ray_tracing);
             symbolTable.setFunctionExtensions("executeCallableNV", 1, &E_GL_NV_ray_tracing);
             symbolTable.setFunctionExtensions("executeCallableEXT", 1, &E_GL_EXT_ray_tracing);
 
@@ -8437,6 +8577,13 @@
             BuiltInVariable("gl_WarpIDNV",              EbvWarpID,          symbolTable);
             BuiltInVariable("gl_SMIDNV",                EbvSMID,            symbolTable);
         }
+        if ((profile == EEsProfile && version >= 310) ||
+            (profile != EEsProfile && version >= 450)) {
+            symbolTable.setVariableExtensions("gl_ShadingRateFlag2VerticalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate);
+            symbolTable.setVariableExtensions("gl_ShadingRateFlag4VerticalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate);
+            symbolTable.setVariableExtensions("gl_ShadingRateFlag2HorizontalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate);
+            symbolTable.setVariableExtensions("gl_ShadingRateFlag4HorizontalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate);
+        }
         break;
 
     case EShLangMeshNV:
@@ -8581,6 +8728,14 @@
             BuiltInVariable("gl_WarpIDNV",              EbvWarpID,          symbolTable);
             BuiltInVariable("gl_SMIDNV",                EbvSMID,            symbolTable);
         }
+
+        if ((profile == EEsProfile && version >= 310) ||
+            (profile != EEsProfile && version >= 450)) {
+            symbolTable.setVariableExtensions("gl_ShadingRateFlag2VerticalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate);
+            symbolTable.setVariableExtensions("gl_ShadingRateFlag4VerticalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate);
+            symbolTable.setVariableExtensions("gl_ShadingRateFlag2HorizontalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate);
+            symbolTable.setVariableExtensions("gl_ShadingRateFlag4HorizontalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate);
+        }
         break;
 
     case EShLangTaskNV:
@@ -8681,6 +8836,13 @@
             BuiltInVariable("gl_WarpIDNV",              EbvWarpID,          symbolTable);
             BuiltInVariable("gl_SMIDNV",                EbvSMID,            symbolTable);
         }
+        if ((profile == EEsProfile && version >= 310) ||
+            (profile != EEsProfile && version >= 450)) {
+            symbolTable.setVariableExtensions("gl_ShadingRateFlag2VerticalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate);
+            symbolTable.setVariableExtensions("gl_ShadingRateFlag4VerticalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate);
+            symbolTable.setVariableExtensions("gl_ShadingRateFlag2HorizontalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate);
+            symbolTable.setVariableExtensions("gl_ShadingRateFlag4HorizontalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate);
+        }
         break;
 #endif
 
@@ -9152,10 +9314,10 @@
     case EShLangClosestHit:
     case EShLangMiss:
         if (profile != EEsProfile && version >= 460) {
-            symbolTable.relateToOperator("traceNV", EOpTrace);
-            symbolTable.relateToOperator("traceRayEXT", EOpTrace);
-            symbolTable.relateToOperator("executeCallableNV", EOpExecuteCallable);
-            symbolTable.relateToOperator("executeCallableEXT", EOpExecuteCallable);
+            symbolTable.relateToOperator("traceNV", EOpTraceNV);
+            symbolTable.relateToOperator("traceRayEXT", EOpTraceKHR);
+            symbolTable.relateToOperator("executeCallableNV", EOpExecuteCallableNV);
+            symbolTable.relateToOperator("executeCallableEXT", EOpExecuteCallableKHR);
         }
         break;
     case EShLangIntersect:
@@ -9166,16 +9328,14 @@
         break;
     case EShLangAnyHit:
         if (profile != EEsProfile && version >= 460) {
-            symbolTable.relateToOperator("ignoreIntersectionNV", EOpIgnoreIntersection);
-            symbolTable.relateToOperator("ignoreIntersectionEXT", EOpIgnoreIntersection);
-            symbolTable.relateToOperator("terminateRayNV", EOpTerminateRay);
-            symbolTable.relateToOperator("terminateRayEXT", EOpTerminateRay);
+            symbolTable.relateToOperator("ignoreIntersectionNV", EOpIgnoreIntersectionNV);
+            symbolTable.relateToOperator("terminateRayNV", EOpTerminateRayNV);
         }
         break;
     case EShLangCallable:
         if (profile != EEsProfile && version >= 460) {
-            symbolTable.relateToOperator("executeCallableNV", EOpExecuteCallable);
-            symbolTable.relateToOperator("executeCallableEXT", EOpExecuteCallable);
+            symbolTable.relateToOperator("executeCallableNV", EOpExecuteCallableNV);
+            symbolTable.relateToOperator("executeCallableEXT", EOpExecuteCallableKHR);
         }
         break;
     case EShLangMeshNV:
diff --git a/glslang/MachineIndependent/IntermTraverse.cpp b/glslang/MachineIndependent/IntermTraverse.cpp
index f46010b..553b1b5 100644
--- a/glslang/MachineIndependent/IntermTraverse.cpp
+++ b/glslang/MachineIndependent/IntermTraverse.cpp
@@ -71,6 +71,13 @@
     it->visitConstantUnion(this);
 }
 
+const TString& TIntermSymbol::getAccessName() const {
+    if (getBasicType() == EbtBlock)
+        return getType().getTypeName();
+    else
+        return getName();
+}
+
 //
 // Traverse a binary node.
 //
diff --git a/glslang/MachineIndependent/Intermediate.cpp b/glslang/MachineIndependent/Intermediate.cpp
old mode 100755
new mode 100644
index b8c220d..f6172a2
--- a/glslang/MachineIndependent/Intermediate.cpp
+++ b/glslang/MachineIndependent/Intermediate.cpp
@@ -2298,6 +2298,10 @@
     case EbtReference:
         op = EOpConstructReference;
         break;
+
+    case EbtAccStruct:
+        op = EOpConstructAccStruct;
+        break;
 #endif
     default:
         break;
diff --git a/glslang/MachineIndependent/ParseContextBase.cpp b/glslang/MachineIndependent/ParseContextBase.cpp
index b464009..3efa27a 100644
--- a/glslang/MachineIndependent/ParseContextBase.cpp
+++ b/glslang/MachineIndependent/ParseContextBase.cpp
@@ -127,22 +127,6 @@
 {
     TIntermBinary* binaryNode = node->getAsBinaryNode();
 
-    if (binaryNode) {
-        switch(binaryNode->getOp()) {
-        case EOpIndexDirect:
-        case EOpIndexIndirect:     // fall through
-        case EOpIndexDirectStruct: // fall through
-        case EOpVectorSwizzle:
-        case EOpMatrixSwizzle:
-            return lValueErrorCheck(loc, op, binaryNode->getLeft());
-        default:
-            break;
-        }
-        error(loc, " l-value required", op, "", "");
-
-        return true;
-    }
-
     const char* symbol = nullptr;
     TIntermSymbol* symNode = node->getAsSymbolNode();
     if (symNode != nullptr)
@@ -203,15 +187,40 @@
     // Everything else is okay, no error.
     //
     if (message == nullptr)
+    {
+        if (binaryNode) {
+            switch (binaryNode->getOp()) {
+            case EOpIndexDirect:
+            case EOpIndexIndirect:     // fall through
+            case EOpIndexDirectStruct: // fall through
+            case EOpVectorSwizzle:
+            case EOpMatrixSwizzle:
+                return lValueErrorCheck(loc, op, binaryNode->getLeft());
+            default:
+                break;
+            }
+            error(loc, " l-value required", op, "", "");
+
+            return true;
+        }
         return false;
+    }
 
     //
     // If we get here, we have an error and a message.
     //
+    const TIntermTyped* leftMostTypeNode = TIntermediate::findLValueBase(node, true);
+
     if (symNode)
         error(loc, " l-value required", op, "\"%s\" (%s)", symbol, message);
     else
-        error(loc, " l-value required", op, "(%s)", message);
+        if (binaryNode && binaryNode->getAsOperator()->getOp() == EOpIndexDirectStruct)
+            if(IsAnonymous(leftMostTypeNode->getAsSymbolNode()->getName()))
+                error(loc, " l-value required", op, "\"%s\" (%s)", leftMostTypeNode->getAsSymbolNode()->getAccessName().c_str(), message);
+            else
+                error(loc, " l-value required", op, "\"%s\" (%s)", leftMostTypeNode->getAsSymbolNode()->getName().c_str(), message);
+        else
+            error(loc, " l-value required", op, "(%s)", message);
 
     return true;
 }
@@ -219,28 +228,41 @@
 // Test for and give an error if the node can't be read from.
 void TParseContextBase::rValueErrorCheck(const TSourceLoc& loc, const char* op, TIntermTyped* node)
 {
+    TIntermBinary* binaryNode = node->getAsBinaryNode();
+    const TIntermSymbol* symNode = node->getAsSymbolNode();
+
     if (! node)
         return;
 
-    TIntermBinary* binaryNode = node->getAsBinaryNode();
-    if (binaryNode) {
-        switch(binaryNode->getOp()) {
-        case EOpIndexDirect:
-        case EOpIndexIndirect:
-        case EOpIndexDirectStruct:
-        case EOpVectorSwizzle:
-        case EOpMatrixSwizzle:
-            rValueErrorCheck(loc, op, binaryNode->getLeft());
-        default:
-            break;
+    if (node->getQualifier().isWriteOnly()) {
+        const TIntermTyped* leftMostTypeNode = TIntermediate::findLValueBase(node, true);
+
+        if (symNode != nullptr)
+            error(loc, "can't read from writeonly object: ", op, symNode->getName().c_str());
+        else if (binaryNode &&
+                (binaryNode->getAsOperator()->getOp() == EOpIndexDirectStruct ||
+                 binaryNode->getAsOperator()->getOp() == EOpIndexDirect))
+            if(IsAnonymous(leftMostTypeNode->getAsSymbolNode()->getName()))
+                error(loc, "can't read from writeonly object: ", op, leftMostTypeNode->getAsSymbolNode()->getAccessName().c_str());
+            else
+                error(loc, "can't read from writeonly object: ", op, leftMostTypeNode->getAsSymbolNode()->getName().c_str());
+        else
+            error(loc, "can't read from writeonly object: ", op, "");
+
+    } else {
+        if (binaryNode) {
+            switch (binaryNode->getOp()) {
+            case EOpIndexDirect:
+            case EOpIndexIndirect:
+            case EOpIndexDirectStruct:
+            case EOpVectorSwizzle:
+            case EOpMatrixSwizzle:
+                rValueErrorCheck(loc, op, binaryNode->getLeft());
+            default:
+                break;
+            }
         }
-
-        return;
     }
-
-    TIntermSymbol* symNode = node->getAsSymbolNode();
-    if (symNode && symNode->getQualifier().isWriteOnly())
-        error(loc, "can't read from writeonly object: ", op, symNode->getName().c_str());
 }
 
 // Add 'symbol' to the list of deferred linkage symbols, which
diff --git a/glslang/MachineIndependent/ParseHelper.cpp b/glslang/MachineIndependent/ParseHelper.cpp
index 86a5a37..9c42a20 100644
--- a/glslang/MachineIndependent/ParseHelper.cpp
+++ b/glslang/MachineIndependent/ParseHelper.cpp
@@ -2076,14 +2076,32 @@
     }
 
 #ifndef GLSLANG_WEB
-    case EOpTrace:
+    case EOpTraceNV:
         if (!(*argp)[10]->getAsConstantUnion())
-            error(loc, "argument must be compile-time constant", "payload number", "");
+            error(loc, "argument must be compile-time constant", "payload number", "a");
         break;
-    case EOpExecuteCallable:
+    case EOpTraceKHR:
+        if (!(*argp)[10]->getAsConstantUnion())
+            error(loc, "argument must be compile-time constant", "payload number", "a");
+        else {
+            unsigned int location = (*argp)[10]->getAsConstantUnion()->getAsConstantUnion()->getConstArray()[0].getUConst();
+            if (intermediate.checkLocationRT(0, location) < 0)
+                error(loc, "with layout(location =", "no rayPayloadEXT/rayPayloadInEXT declared", "%d)", location);
+        }
+        break;
+    case EOpExecuteCallableNV:
         if (!(*argp)[1]->getAsConstantUnion())
             error(loc, "argument must be compile-time constant", "callable data number", "");
         break;
+    case EOpExecuteCallableKHR:
+        if (!(*argp)[1]->getAsConstantUnion())
+            error(loc, "argument must be compile-time constant", "callable data number", "");
+        else {
+            unsigned int location = (*argp)[1]->getAsConstantUnion()->getAsConstantUnion()->getConstArray()[0].getUConst();
+            if (intermediate.checkLocationRT(1, location) < 0)
+                error(loc, "with layout(location =", "no callableDataEXT/callableDataInEXT declared", "%d)", location);
+        }
+        break;
 
     case EOpRayQueryGetIntersectionType:
     case EOpRayQueryGetIntersectionT:
@@ -2121,9 +2139,15 @@
     {
         // Make sure the image types have the correct layout() format and correct argument types
         const TType& imageType = arg0->getType();
-        if (imageType.getSampler().type == EbtInt || imageType.getSampler().type == EbtUint) {
-            if (imageType.getQualifier().getFormat() != ElfR32i && imageType.getQualifier().getFormat() != ElfR32ui)
+        if (imageType.getSampler().type == EbtInt || imageType.getSampler().type == EbtUint ||
+            imageType.getSampler().type == EbtInt64 || imageType.getSampler().type == EbtUint64) {
+            if (imageType.getQualifier().getFormat() != ElfR32i && imageType.getQualifier().getFormat() != ElfR32ui &&
+                imageType.getQualifier().getFormat() != ElfR64i && imageType.getQualifier().getFormat() != ElfR64ui)
                 error(loc, "only supported on image with format r32i or r32ui", fnCandidate.getName().c_str(), "");
+            if (callNode.getType().getBasicType() == EbtInt64 && imageType.getQualifier().getFormat() != ElfR64i)
+                error(loc, "only supported on image with format r64i", fnCandidate.getName().c_str(), "");
+            else if (callNode.getType().getBasicType() == EbtUint64 && imageType.getQualifier().getFormat() != ElfR64ui)
+                error(loc, "only supported on image with format r64ui", fnCandidate.getName().c_str(), "");
         } else {
             bool isImageAtomicOnFloatAllowed = ((fnCandidate.getName().compare(0, 14, "imageAtomicAdd") == 0) ||
                 (fnCandidate.getName().compare(0, 15, "imageAtomicLoad") == 0) ||
@@ -3368,7 +3392,7 @@
 //
 void TParseContext::memberQualifierCheck(glslang::TPublicType& publicType)
 {
-    globalQualifierFixCheck(publicType.loc, publicType.qualifier);
+    globalQualifierFixCheck(publicType.loc, publicType.qualifier, true);
     checkNoShaderLayouts(publicType.loc, publicType.shaderQualifiers);
     if (publicType.qualifier.isNonUniform()) {
         error(publicType.loc, "not allowed on block or structure members", "nonuniformEXT", "");
@@ -3379,7 +3403,7 @@
 //
 // Check/fix just a full qualifier (no variables or types yet, but qualifier is complete) at global level.
 //
-void TParseContext::globalQualifierFixCheck(const TSourceLoc& loc, TQualifier& qualifier)
+void TParseContext::globalQualifierFixCheck(const TSourceLoc& loc, TQualifier& qualifier, bool isMemberCheck)
 {
     bool nonuniformOkay = false;
 
@@ -3404,6 +3428,16 @@
     case EvqTemporary:
         nonuniformOkay = true;
         break;
+    case EvqUniform:
+        // According to GLSL spec: The std430 qualifier is supported only for shader storage blocks; a shader using
+        // the std430 qualifier on a uniform block will fail to compile.
+        // Only check the global declaration: layout(std430) uniform;
+        if (blockName == nullptr &&
+            qualifier.layoutPacking == ElpStd430)
+        {
+            error(loc, "it is invalid to declare std430 qualifier on uniform", "", "");
+        }
+        break;
     default:
         break;
     }
@@ -3411,7 +3445,9 @@
     if (!nonuniformOkay && qualifier.isNonUniform())
         error(loc, "for non-parameter, can only apply to 'in' or no storage qualifier", "nonuniformEXT", "");
 
-    invariantCheck(loc, qualifier);
+    // Storage qualifier isn't ready for memberQualifierCheck, we should skip invariantCheck for it.
+    if (!isMemberCheck || structNestingLevel > 0)
+        invariantCheck(loc, qualifier);
 }
 
 //
@@ -3422,7 +3458,7 @@
     if (! symbolTable.atGlobalLevel())
         return;
 
-    if (!(publicType.userDef && publicType.userDef->isReference())) {
+    if (!(publicType.userDef && publicType.userDef->isReference()) && !parsingBuiltins) {
         if (qualifier.isMemoryQualifierImageAndSSBOOnly() && ! publicType.isImage() && publicType.qualifier.storage != EvqBuffer) {
             error(loc, "memory qualifiers cannot be used on this type", "", "");
         } else if (qualifier.isMemory() && (publicType.basicType != EbtSampler) && !publicType.qualifier.isUniformOrBuffer()) {
@@ -4083,6 +4119,9 @@
     if (isRuntimeLength(base))
         return;
 
+    if (base.getType().getQualifier().builtIn == EbvSampleMask)
+        return;
+
     // Check for last member of a bufferreference type, which is runtime sizeable
     // but doesn't support runtime length
     if (base.getType().getQualifier().storage == EvqBuffer) {
@@ -4226,6 +4265,8 @@
         (identifier == "gl_FragCoord"           && ((nonEsRedecls && version >= 150) || esRedecls)) ||
          identifier == "gl_ClipDistance"                                                            ||
          identifier == "gl_CullDistance"                                                            ||
+         identifier == "gl_ShadingRateEXT"                                                          ||
+         identifier == "gl_PrimitiveShadingRateEXT"                                                 ||
          identifier == "gl_FrontColor"                                                              ||
          identifier == "gl_BackColor"                                                               ||
          identifier == "gl_FrontSecondaryColor"                                                     ||
@@ -4632,14 +4673,14 @@
 
 void TParseContext::nestedBlockCheck(const TSourceLoc& loc)
 {
-    if (structNestingLevel > 0)
+    if (structNestingLevel > 0 || blockNestingLevel > 0)
         error(loc, "cannot nest a block definition inside a structure or block", "", "");
-    ++structNestingLevel;
+    ++blockNestingLevel;
 }
 
 void TParseContext::nestedStructCheck(const TSourceLoc& loc)
 {
-    if (structNestingLevel > 0)
+    if (structNestingLevel > 0 || blockNestingLevel > 0)
         error(loc, "cannot nest a structure definition inside a structure or block", "", "");
     ++structNestingLevel;
 }
@@ -6535,13 +6576,15 @@
             error(loc, "atomic_uint binding is too large", "binding", "");
             return;
         }
-
-        if(publicType.qualifier.hasOffset()) {
+        if (publicType.qualifier.hasOffset())
             atomicUintOffsets[publicType.qualifier.layoutBinding] = publicType.qualifier.layoutOffset;
-        }
         return;
     }
 
+    if (publicType.arraySizes) {
+        error(loc, "expect an array name", "", "");
+    }
+
     if (publicType.qualifier.hasLayout() && !publicType.qualifier.hasBufferReference())
         warn(loc, "useless application of layout qualifier", "layout", "");
 #endif
@@ -6632,6 +6675,22 @@
     if (type.getQualifier().storage == EvqShared && type.containsCoopMat())
         error(loc, "qualifier", "Cooperative matrix types must not be used in shared memory", "");
 
+    if (profile == EEsProfile) {
+        if (type.getQualifier().isPipeInput() && type.getBasicType() == EbtStruct) {
+            if (type.getQualifier().isArrayedIo(language)) {
+                TType perVertexType(type, 0);
+                if (perVertexType.containsArray() && perVertexType.containsBuiltIn() == false) {
+                    error(loc, "A per vertex structure containing an array is not allowed as input in ES", type.getTypeName().c_str(), "");
+                }
+            }
+            else if (type.containsArray() && type.containsBuiltIn() == false) {
+                error(loc, "A structure containing an array is not allowed as input in ES", type.getTypeName().c_str(), "");
+            }
+            if (type.containsStructure())
+                error(loc, "A structure containing an struct is not allowed as input in ES", type.getTypeName().c_str(), "");
+        }
+    }
+
     if (identifier != "gl_FragCoord" && (publicType.shaderQualifiers.originUpperLeft || publicType.shaderQualifiers.pixelCenterInteger))
         error(loc, "can only apply origin_upper_left and pixel_center_origin to gl_FragCoord", "layout qualifier", "");
     if (identifier != "gl_FragDepth" && publicType.shaderQualifiers.getDepth() != EldNone)
@@ -6954,6 +7013,15 @@
             error(loc, "wrong vector size (or rows in a matrix column):", "initializer list", type.getCompleteString().c_str());
             return nullptr;
         }
+        TBasicType destType = type.getBasicType();
+        for (int i = 0; i < type.getVectorSize(); ++i) {
+            TBasicType initType = initList->getSequence()[i]->getAsTyped()->getBasicType();
+            if (destType != initType && !intermediate.canImplicitlyPromote(initType, destType)) {
+                error(loc, "type mismatch in initializer list", "initializer list", type.getCompleteString().c_str());
+                return nullptr;
+            }
+
+        }
     } else {
         error(loc, "unexpected initializer-list type:", "initializer list", type.getCompleteString().c_str());
         return nullptr;
@@ -7410,6 +7478,19 @@
 
         return node;
 
+    case EOpConstructAccStruct:
+        if ((node->getType().isScalar() && node->getType().getBasicType() == EbtUint64)) {
+            // construct acceleration structure from uint64
+            requireExtensions(loc, 1, &E_GL_EXT_ray_tracing, "uint64_t conversion to acclerationStructureEXT");
+            return intermediate.addBuiltInFunctionCall(node->getLoc(), EOpConvUint64ToAccStruct, true, node,
+                type);
+        } else if (node->getType().isVector() && node->getType().getBasicType() == EbtUint && node->getVectorSize() == 2) {
+            // construct acceleration structure from uint64
+            requireExtensions(loc, 1, &E_GL_EXT_ray_tracing, "uvec2 conversion to accelerationStructureEXT");
+            return intermediate.addBuiltInFunctionCall(node->getLoc(), EOpConvUvec2ToAccStruct, true, node,
+                type);
+        } else
+            return nullptr;
 #endif // GLSLANG_WEB
 
     default:
@@ -7490,10 +7571,10 @@
         TType& memberType = *typeList[member].type;
         TQualifier& memberQualifier = memberType.getQualifier();
         const TSourceLoc& memberLoc = typeList[member].loc;
-        globalQualifierFixCheck(memberLoc, memberQualifier);
         if (memberQualifier.storage != EvqTemporary && memberQualifier.storage != EvqGlobal && memberQualifier.storage != currentBlockQualifier.storage)
             error(memberLoc, "member storage qualifier cannot contradict block storage qualifier", memberType.getFieldName().c_str(), "");
         memberQualifier.storage = currentBlockQualifier.storage;
+        globalQualifierFixCheck(memberLoc, memberQualifier);
 #ifndef GLSLANG_WEB
         inheritMemoryQualifiers(currentBlockQualifier, memberQualifier);
         if (currentBlockQualifier.perPrimitiveNV)
@@ -8191,7 +8272,7 @@
 
     bool pipeOut = qualifier.isPipeOutput();
     bool pipeIn = qualifier.isPipeInput();
-    if (version >= 300 || (!isEsProfile() && version >= 420)) {
+    if ((version >= 300 && isEsProfile()) || (!isEsProfile() && version >= 420)) {
         if (! pipeOut)
             error(loc, "can only apply to an output", "invariant", "");
     } else {
diff --git a/glslang/MachineIndependent/ParseHelper.h b/glslang/MachineIndependent/ParseHelper.h
index 0f09ada..fe2b6fb 100644
--- a/glslang/MachineIndependent/ParseHelper.h
+++ b/glslang/MachineIndependent/ParseHelper.h
@@ -83,7 +83,7 @@
           : TParseVersions(interm, version, profile, spvVersion, language, infoSink, forwardCompatible, messages),
             scopeMangler("::"),
             symbolTable(symbolTable),
-            statementNestingLevel(0), loopNestingLevel(0), structNestingLevel(0), controlFlowNestingLevel(0),
+            statementNestingLevel(0), loopNestingLevel(0), structNestingLevel(0), blockNestingLevel(0), controlFlowNestingLevel(0),
             currentFunctionType(nullptr),
             postEntryPointReturn(false),
             contextPragma(true, false),
@@ -178,7 +178,8 @@
     TSymbolTable& symbolTable;        // symbol table that goes with the current language, version, and profile
     int statementNestingLevel;        // 0 if outside all flow control or compound statements
     int loopNestingLevel;             // 0 if outside all loops
-    int structNestingLevel;           // 0 if outside blocks and structures
+    int structNestingLevel;           // 0 if outside structures
+    int blockNestingLevel;            // 0 if outside blocks
     int controlFlowNestingLevel;      // 0 if outside all flow control
     const TType* currentFunctionType; // the return type of the function that's currently being parsed
     bool functionReturnsValue;        // true if a non-void function has a return
@@ -365,7 +366,7 @@
     void accStructCheck(const TSourceLoc & loc, const TType & type, const TString & identifier);
     void transparentOpaqueCheck(const TSourceLoc&, const TType&, const TString& identifier);
     void memberQualifierCheck(glslang::TPublicType&);
-    void globalQualifierFixCheck(const TSourceLoc&, TQualifier&);
+    void globalQualifierFixCheck(const TSourceLoc&, TQualifier&, bool isMemberCheck = false);
     void globalQualifierTypeCheck(const TSourceLoc&, const TQualifier&, const TPublicType&);
     bool structQualifierErrorCheck(const TSourceLoc&, const TPublicType& pType);
     void mergeQualifiers(const TSourceLoc&, TQualifier& dst, const TQualifier& src, bool force);
diff --git a/glslang/MachineIndependent/Scan.cpp b/glslang/MachineIndependent/Scan.cpp
index bd3181a..78c8a36 100644
--- a/glslang/MachineIndependent/Scan.cpp
+++ b/glslang/MachineIndependent/Scan.cpp
@@ -365,6 +365,9 @@
     (*KeywordMap)["if"] =                      IF;
     (*KeywordMap)["else"] =                    ELSE;
     (*KeywordMap)["discard"] =                 DISCARD;
+    (*KeywordMap)["terminateInvocation"] =     TERMINATE_INVOCATION;
+    (*KeywordMap)["terminateRayEXT"] =         TERMINATE_RAY;
+    (*KeywordMap)["ignoreIntersectionEXT"] =   IGNORE_INTERSECTION;
     (*KeywordMap)["return"] =                  RETURN;
     (*KeywordMap)["void"] =                    VOID;
     (*KeywordMap)["bool"] =                    BOOL;
@@ -471,6 +474,28 @@
     (*KeywordMap)["image2DMSArray"] =          IMAGE2DMSARRAY;
     (*KeywordMap)["iimage2DMSArray"] =         IIMAGE2DMSARRAY;
     (*KeywordMap)["uimage2DMSArray"] =         UIMAGE2DMSARRAY;
+    (*KeywordMap)["i64image1D"] =              I64IMAGE1D;
+    (*KeywordMap)["u64image1D"] =              U64IMAGE1D;
+    (*KeywordMap)["i64image2D"] =              I64IMAGE2D;
+    (*KeywordMap)["u64image2D"] =              U64IMAGE2D;
+    (*KeywordMap)["i64image3D"] =              I64IMAGE3D;
+    (*KeywordMap)["u64image3D"] =              U64IMAGE3D;
+    (*KeywordMap)["i64image2DRect"] =          I64IMAGE2DRECT;
+    (*KeywordMap)["u64image2DRect"] =          U64IMAGE2DRECT;
+    (*KeywordMap)["i64imageCube"] =            I64IMAGECUBE;
+    (*KeywordMap)["u64imageCube"] =            U64IMAGECUBE;
+    (*KeywordMap)["i64imageBuffer"] =          I64IMAGEBUFFER;
+    (*KeywordMap)["u64imageBuffer"] =          U64IMAGEBUFFER;
+    (*KeywordMap)["i64image1DArray"] =         I64IMAGE1DARRAY;
+    (*KeywordMap)["u64image1DArray"] =         U64IMAGE1DARRAY;
+    (*KeywordMap)["i64image2DArray"] =         I64IMAGE2DARRAY;
+    (*KeywordMap)["u64image2DArray"] =         U64IMAGE2DARRAY;
+    (*KeywordMap)["i64imageCubeArray"] =       I64IMAGECUBEARRAY;
+    (*KeywordMap)["u64imageCubeArray"] =       U64IMAGECUBEARRAY;
+    (*KeywordMap)["i64image2DMS"] =            I64IMAGE2DMS;
+    (*KeywordMap)["u64image2DMS"] =            U64IMAGE2DMS;
+    (*KeywordMap)["i64image2DMSArray"] =       I64IMAGE2DMSARRAY;
+    (*KeywordMap)["u64image2DMSArray"] =       U64IMAGE2DMSARRAY;
     (*KeywordMap)["double"] =                  DOUBLE;
     (*KeywordMap)["dvec2"] =                   DVEC2;
     (*KeywordMap)["dvec3"] =                   DVEC3;
@@ -914,6 +939,17 @@
     case CASE:
         return keyword;
 
+    case TERMINATE_INVOCATION:
+        if (!parseContext.extensionTurnedOn(E_GL_EXT_terminate_invocation))
+            return identifierOrType();
+        return keyword;
+
+    case TERMINATE_RAY:
+    case IGNORE_INTERSECTION:
+        if (!parseContext.extensionTurnedOn(E_GL_EXT_ray_tracing))
+            return identifierOrType();
+        return keyword;
+
     case BUFFER:
         afterBuffer = true;
         if ((parseContext.isEsProfile() && parseContext.version < 310) ||
@@ -982,7 +1018,7 @@
         return keyword;
     case PACKED:
         if ((parseContext.isEsProfile() && parseContext.version < 300) ||
-            (!parseContext.isEsProfile() && parseContext.version < 330))
+            (!parseContext.isEsProfile() && parseContext.version < 140))
             return reservedWord();
         return identifierOrType();
 
@@ -1147,6 +1183,19 @@
         afterType = true;
         return firstGenerationImage(false);
 
+    case I64IMAGE1D:
+    case U64IMAGE1D:
+    case I64IMAGE1DARRAY:
+    case U64IMAGE1DARRAY:
+    case I64IMAGE2DRECT:
+    case U64IMAGE2DRECT:
+        afterType = true;
+        if (parseContext.symbolTable.atBuiltInLevel() ||
+            parseContext.extensionTurnedOn(E_GL_EXT_shader_image_int64)) {
+            return firstGenerationImage(false);
+        }
+        return identifierOrType();
+
     case IMAGEBUFFER:
     case IIMAGEBUFFER:
     case UIMAGEBUFFER:
@@ -1155,6 +1204,18 @@
             parseContext.extensionsTurnedOn(Num_AEP_texture_buffer, AEP_texture_buffer))
             return keyword;
         return firstGenerationImage(false);
+        
+    case I64IMAGEBUFFER:
+    case U64IMAGEBUFFER:
+        afterType = true;        
+        if (parseContext.symbolTable.atBuiltInLevel() ||
+            parseContext.extensionTurnedOn(E_GL_EXT_shader_image_int64)) {
+            if ((parseContext.isEsProfile() && parseContext.version >= 320) ||
+                parseContext.extensionsTurnedOn(Num_AEP_texture_buffer, AEP_texture_buffer))
+                return keyword;
+            return firstGenerationImage(false);
+        }
+        return identifierOrType();
 
     case IMAGE2D:
     case IIMAGE2D:
@@ -1171,6 +1232,20 @@
         afterType = true;
         return firstGenerationImage(true);
 
+    case I64IMAGE2D:
+    case U64IMAGE2D:
+    case I64IMAGE3D:
+    case U64IMAGE3D:
+    case I64IMAGECUBE:
+    case U64IMAGECUBE:
+    case I64IMAGE2DARRAY:
+    case U64IMAGE2DARRAY:
+        afterType = true;
+        if (parseContext.symbolTable.atBuiltInLevel() ||
+            parseContext.extensionTurnedOn(E_GL_EXT_shader_image_int64))
+            return firstGenerationImage(true);
+        return identifierOrType();
+        
     case IMAGECUBEARRAY:
     case IIMAGECUBEARRAY:
     case UIMAGECUBEARRAY:
@@ -1179,6 +1254,18 @@
             parseContext.extensionsTurnedOn(Num_AEP_texture_cube_map_array, AEP_texture_cube_map_array))
             return keyword;
         return secondGenerationImage();
+        
+    case I64IMAGECUBEARRAY:
+    case U64IMAGECUBEARRAY:
+        afterType = true;
+        if (parseContext.symbolTable.atBuiltInLevel() ||
+            parseContext.extensionTurnedOn(E_GL_EXT_shader_image_int64)) {
+            if ((parseContext.isEsProfile() && parseContext.version >= 320) ||
+                parseContext.extensionsTurnedOn(Num_AEP_texture_cube_map_array, AEP_texture_cube_map_array))
+                return keyword;
+            return secondGenerationImage();
+        }
+        return identifierOrType();
 
     case IMAGE2DMS:
     case IIMAGE2DMS:
@@ -1188,6 +1275,17 @@
     case UIMAGE2DMSARRAY:
         afterType = true;
         return secondGenerationImage();
+        
+    case I64IMAGE2DMS:
+    case U64IMAGE2DMS:
+    case I64IMAGE2DMSARRAY:
+    case U64IMAGE2DMSARRAY:
+        afterType = true;
+        if (parseContext.symbolTable.atBuiltInLevel() ||
+            parseContext.extensionTurnedOn(E_GL_EXT_shader_image_int64)) {
+            return secondGenerationImage();
+        }
+        return identifierOrType();
 
     case DOUBLE:
     case DVEC2:
diff --git a/glslang/MachineIndependent/ShaderLang.cpp b/glslang/MachineIndependent/ShaderLang.cpp
index 9d7f37b..c6030bd 100644
--- a/glslang/MachineIndependent/ShaderLang.cpp
+++ b/glslang/MachineIndependent/ShaderLang.cpp
@@ -2016,7 +2016,7 @@
         intermediate[stage] = new TIntermediate(stage,
                                                 firstIntermediate->getVersion(),
                                                 firstIntermediate->getProfile());
-
+        intermediate[stage]->setLimits(firstIntermediate->getLimits());
 
         // The new TIntermediate must use the same origin as the original TIntermediates.
         // Otherwise linking will fail due to different coordinate systems.
diff --git a/glslang/MachineIndependent/SymbolTable.cpp b/glslang/MachineIndependent/SymbolTable.cpp
index 007f22c..f6291c3 100644
--- a/glslang/MachineIndependent/SymbolTable.cpp
+++ b/glslang/MachineIndependent/SymbolTable.cpp
@@ -85,6 +85,8 @@
 #endif
         case EbtInt:   mangledName += "i"; break;
         case EbtUint:  mangledName += "u"; break;
+        case EbtInt64:   mangledName += "i64"; break;
+        case EbtUint64:  mangledName += "u64"; break;
         default: break; // some compilers want this
         }
         if (sampler.isImageClass())
@@ -146,6 +148,8 @@
         if (typeName)
             mangledName += *typeName;
         for (unsigned int i = 0; i < structure->size(); ++i) {
+            if ((*structure)[i].type->getBasicType() == EbtVoid)
+                continue;
             mangledName += '-';
             (*structure)[i].type->buildMangledName(mangledName);
         }
diff --git a/glslang/MachineIndependent/SymbolTable.h b/glslang/MachineIndependent/SymbolTable.h
index ec4bc3c..db16c19 100644
--- a/glslang/MachineIndependent/SymbolTable.h
+++ b/glslang/MachineIndependent/SymbolTable.h
@@ -613,20 +613,24 @@
     //
 protected:
     static const int globalLevel = 3;
-    bool isSharedLevel(int level)  { return level <= 1; }              // exclude all per-compile levels
-    bool isBuiltInLevel(int level) { return level <= 2; }              // exclude user globals
-    bool isGlobalLevel(int level)  { return level <= globalLevel; }    // include user globals
+    static bool isSharedLevel(int level)  { return level <= 1; }            // exclude all per-compile levels
+    static bool isBuiltInLevel(int level) { return level <= 2; }            // exclude user globals
+    static bool isGlobalLevel(int level)  { return level <= globalLevel; }  // include user globals
 public:
     bool isEmpty() { return table.size() == 0; }
     bool atBuiltInLevel() { return isBuiltInLevel(currentLevel()); }
     bool atGlobalLevel()  { return isGlobalLevel(currentLevel()); }
-
+    static bool isBuiltInSymbol(int uniqueId) {
+        int level = uniqueId >> LevelFlagBitOffset;
+        return isBuiltInLevel(level);
+    }
     void setNoBuiltInRedeclarations() { noBuiltInRedeclarations = true; }
     void setSeparateNameSpaces() { separateNameSpaces = true; }
 
     void push()
     {
         table.push_back(new TSymbolTableLevel);
+        updateUniqueIdLevelFlag();
     }
 
     // Make a new symbol-table level to represent the scope introduced by a structure
@@ -639,6 +643,7 @@
     {
         assert(thisSymbol.getName().size() == 0);
         table.push_back(new TSymbolTableLevel);
+        updateUniqueIdLevelFlag();
         table.back()->setThisLevel();
         insert(thisSymbol);
     }
@@ -648,6 +653,7 @@
         table[currentLevel()]->getPreviousDefaultPrecisions(p);
         delete table.back();
         table.pop_back();
+        updateUniqueIdLevelFlag();
     }
 
     //
@@ -867,12 +873,20 @@
             table[level]->readOnly();
     }
 
+    // Add current level in the high-bits of unique id
+    void updateUniqueIdLevelFlag() {
+        // clamp level to avoid overflow
+        uint32_t level = currentLevel() > 7 ? 7 : currentLevel();
+        uniqueId &= ((1 << LevelFlagBitOffset) - 1);
+        uniqueId |= (level << LevelFlagBitOffset);
+    }
+
 protected:
     TSymbolTable(TSymbolTable&);
     TSymbolTable& operator=(TSymbolTableLevel&);
 
     int currentLevel() const { return static_cast<int>(table.size()) - 1; }
-
+    static const uint32_t LevelFlagBitOffset = 28;
     std::vector<TSymbolTableLevel*> table;
     int uniqueId;     // for unique identification in code generation
     bool noBuiltInRedeclarations;
diff --git a/glslang/MachineIndependent/Versions.cpp b/glslang/MachineIndependent/Versions.cpp
index 896fd5a..69b8863 100644
--- a/glslang/MachineIndependent/Versions.cpp
+++ b/glslang/MachineIndependent/Versions.cpp
@@ -327,6 +327,9 @@
     extensionBehavior[E_GL_EXT_ray_flags_primitive_culling] = EBhDisable;
     extensionBehavior[E_GL_EXT_blend_func_extended]         = EBhDisable;
     extensionBehavior[E_GL_EXT_shader_implicit_conversions] = EBhDisable;
+    extensionBehavior[E_GL_EXT_fragment_shading_rate]       = EBhDisable;
+    extensionBehavior[E_GL_EXT_shader_image_int64]   = EBhDisable;
+    extensionBehavior[E_GL_EXT_terminate_invocation]        = EBhDisable;
 
     // OVR extensions
     extensionBehavior[E_GL_OVR_multiview]                = EBhDisable;
@@ -371,6 +374,7 @@
             "#define GL_EXT_YUV_target 1\n"
             "#define GL_EXT_shader_texture_lod 1\n"
             "#define GL_EXT_shadow_samplers 1\n"
+            "#define GL_EXT_fragment_shading_rate 1\n"
 
             // AEP
             "#define GL_ANDROID_extension_pack_es31a 1\n"
@@ -408,7 +412,7 @@
                 preamble += "#define GL_NV_shader_noperspective_interpolation 1\n";
             }
 
-    } else {
+    } else { // !isEsProfile()
         preamble =
             "#define GL_FRAGMENT_PRECISION_HIGH 1\n"
             "#define GL_ARB_texture_rectangle 1\n"
@@ -463,6 +467,7 @@
             "#define GL_EXT_buffer_reference_uvec2 1\n"
             "#define GL_EXT_demote_to_helper_invocation 1\n"
             "#define GL_EXT_debug_printf 1\n"
+            "#define GL_EXT_fragment_shading_rate 1\n"
 
             // GL_KHR_shader_subgroup
             "#define GL_KHR_shader_subgroup_basic 1\n"
@@ -474,6 +479,7 @@
             "#define GL_KHR_shader_subgroup_clustered 1\n"
             "#define GL_KHR_shader_subgroup_quad 1\n"
 
+            "#define GL_EXT_shader_image_int64 1\n"
             "#define GL_EXT_shader_atomic_int64 1\n"
             "#define GL_EXT_shader_realtime_clock 1\n"
             "#define GL_EXT_ray_tracing 1\n"
@@ -558,6 +564,11 @@
             "#define GL_GOOGLE_include_directive 1\n"
             "#define GL_KHR_blend_equation_advanced 1\n"
             ;
+
+    // other general extensions
+    preamble +=
+            "#define GL_EXT_terminate_invocation 1\n"
+            ;
 #endif
 
     // #define VULKAN XXXX
diff --git a/glslang/MachineIndependent/Versions.h b/glslang/MachineIndependent/Versions.h
index f52f605..eb17c52 100644
--- a/glslang/MachineIndependent/Versions.h
+++ b/glslang/MachineIndependent/Versions.h
@@ -199,6 +199,8 @@
 const char* const E_GL_EXT_ray_flags_primitive_culling      = "GL_EXT_ray_flags_primitive_culling";
 const char* const E_GL_EXT_blend_func_extended              = "GL_EXT_blend_func_extended";
 const char* const E_GL_EXT_shader_implicit_conversions      = "GL_EXT_shader_implicit_conversions";
+const char* const E_GL_EXT_fragment_shading_rate            = "GL_EXT_fragment_shading_rate";
+const char* const E_GL_EXT_shader_image_int64               = "GL_EXT_shader_image_int64";
 
 // Arrays of extensions for the above viewportEXTs duplications
 
@@ -297,6 +299,7 @@
 const char* const E_GL_EXT_shader_subgroup_extended_types_int16   = "GL_EXT_shader_subgroup_extended_types_int16";
 const char* const E_GL_EXT_shader_subgroup_extended_types_int64   = "GL_EXT_shader_subgroup_extended_types_int64";
 const char* const E_GL_EXT_shader_subgroup_extended_types_float16 = "GL_EXT_shader_subgroup_extended_types_float16";
+const char* const E_GL_EXT_terminate_invocation = "GL_EXT_terminate_invocation";
 
 const char* const E_GL_EXT_shader_atomic_float = "GL_EXT_shader_atomic_float";
 
diff --git a/glslang/MachineIndependent/glslang.m4 b/glslang/MachineIndependent/glslang.m4
index 0b4b53f..8884b26 100644
--- a/glslang/MachineIndependent/glslang.m4
+++ b/glslang/MachineIndependent/glslang.m4
@@ -242,6 +242,18 @@
 %token <lex> F16IMAGECUBE F16IMAGE1DARRAY F16IMAGE2DARRAY F16IMAGECUBEARRAY
 %token <lex> F16IMAGEBUFFER F16IMAGE2DMS F16IMAGE2DMSARRAY
 
+%token <lex> I64IMAGE1D U64IMAGE1D
+%token <lex> I64IMAGE2D U64IMAGE2D
+%token <lex> I64IMAGE3D U64IMAGE3D
+%token <lex> I64IMAGE2DRECT U64IMAGE2DRECT
+%token <lex> I64IMAGECUBE U64IMAGECUBE
+%token <lex> I64IMAGEBUFFER U64IMAGEBUFFER
+%token <lex> I64IMAGE1DARRAY U64IMAGE1DARRAY
+%token <lex> I64IMAGE2DARRAY U64IMAGE2DARRAY
+%token <lex> I64IMAGECUBEARRAY U64IMAGECUBEARRAY
+%token <lex> I64IMAGE2DMS U64IMAGE2DMS
+%token <lex> I64IMAGE2DMSARRAY U64IMAGE2DMSARRAY
+
 // texture without sampler
 %token <lex> TEXTURECUBEARRAY ITEXTURECUBEARRAY UTEXTURECUBEARRAY
 %token <lex> TEXTURE1D ITEXTURE1D UTEXTURE1D
@@ -281,6 +293,8 @@
 %token <lex> CENTROID IN OUT INOUT
 %token <lex> STRUCT VOID WHILE
 %token <lex> BREAK CONTINUE DO ELSE FOR IF DISCARD RETURN SWITCH CASE DEFAULT
+%token <lex> TERMINATE_INVOCATION
+%token <lex> TERMINATE_RAY IGNORE_INTERSECTION
 %token <lex> UNIFORM SHARED BUFFER
 %token <lex> FLAT SMOOTH LAYOUT
 
@@ -905,7 +919,7 @@
 
 block_structure
     : type_qualifier IDENTIFIER LEFT_BRACE { parseContext.nestedBlockCheck($1.loc); } struct_declaration_list RIGHT_BRACE {
-        --parseContext.structNestingLevel;
+        --parseContext.blockNestingLevel;
         parseContext.blockName = $2.string;
         parseContext.globalQualifierFixCheck($1.loc, $1.qualifier);
         parseContext.checkNoShaderLayouts($1.loc, $1.shaderQualifiers);
@@ -3203,6 +3217,116 @@
         $$.basicType = EbtSampler;
         $$.sampler.setImage(EbtUint, Esd2D, true, false, true);
     }
+    | I64IMAGE1D {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtInt64, Esd1D);
+    }
+    | U64IMAGE1D {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtUint64, Esd1D);
+    }
+    | I64IMAGE2D {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtInt64, Esd2D);
+    }
+    | U64IMAGE2D {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtUint64, Esd2D);
+    }
+    | I64IMAGE3D {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtInt64, Esd3D);
+    }
+    | U64IMAGE3D {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtUint64, Esd3D);
+    }
+    | I64IMAGE2DRECT {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtInt64, EsdRect);
+    }
+    | U64IMAGE2DRECT {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtUint64, EsdRect);
+    }
+    | I64IMAGECUBE {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtInt64, EsdCube);
+    }
+    | U64IMAGECUBE {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtUint64, EsdCube);
+    }
+    | I64IMAGEBUFFER {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtInt64, EsdBuffer);
+    }
+    | U64IMAGEBUFFER {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtUint64, EsdBuffer);
+    }
+    | I64IMAGE1DARRAY {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtInt64, Esd1D, true);
+    }
+    | U64IMAGE1DARRAY {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtUint64, Esd1D, true);
+    }
+    | I64IMAGE2DARRAY {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtInt64, Esd2D, true);
+    }
+    | U64IMAGE2DARRAY {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtUint64, Esd2D, true);
+    }
+    | I64IMAGECUBEARRAY {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtInt64, EsdCube, true);
+    }
+    | U64IMAGECUBEARRAY {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtUint64, EsdCube, true);
+    }
+    | I64IMAGE2DMS {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtInt64, Esd2D, false, false, true);
+    }
+    | U64IMAGE2DMS {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtUint64, Esd2D, false, false, true);
+    }
+    | I64IMAGE2DMSARRAY {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtInt64, Esd2D, true, false, true);
+    }
+    | U64IMAGE2DMSARRAY {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtUint64, Esd2D, true, false, true);
+    }
     | SAMPLEREXTERNALOES {  // GL_OES_EGL_image_external
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
@@ -3805,6 +3929,20 @@
         parseContext.requireStage($1.loc, EShLangFragment, "discard");
         $$ = parseContext.intermediate.addBranch(EOpKill, $1.loc);
     }
+    | TERMINATE_INVOCATION SEMICOLON {
+        parseContext.requireStage($1.loc, EShLangFragment, "terminateInvocation");
+        $$ = parseContext.intermediate.addBranch(EOpTerminateInvocation, $1.loc);
+    }
+GLSLANG_WEB_EXCLUDE_ON
+    | TERMINATE_RAY SEMICOLON {
+        parseContext.requireStage($1.loc, EShLangAnyHit, "terminateRayEXT");
+        $$ = parseContext.intermediate.addBranch(EOpTerminateRayKHR, $1.loc);
+    }
+    | IGNORE_INTERSECTION SEMICOLON {
+        parseContext.requireStage($1.loc, EShLangAnyHit, "ignoreIntersectionEXT");
+        $$ = parseContext.intermediate.addBranch(EOpIgnoreIntersectionKHR, $1.loc);
+    }
+GLSLANG_WEB_EXCLUDE_OFF
     ;
 
 // Grammar Note:  No 'goto'.  Gotos are not supported.
diff --git a/glslang/MachineIndependent/glslang.y b/glslang/MachineIndependent/glslang.y
index 23adcb0..2681d48 100644
--- a/glslang/MachineIndependent/glslang.y
+++ b/glslang/MachineIndependent/glslang.y
@@ -242,6 +242,18 @@
 %token <lex> F16IMAGECUBE F16IMAGE1DARRAY F16IMAGE2DARRAY F16IMAGECUBEARRAY
 %token <lex> F16IMAGEBUFFER F16IMAGE2DMS F16IMAGE2DMSARRAY
 
+%token <lex> I64IMAGE1D U64IMAGE1D
+%token <lex> I64IMAGE2D U64IMAGE2D
+%token <lex> I64IMAGE3D U64IMAGE3D
+%token <lex> I64IMAGE2DRECT U64IMAGE2DRECT
+%token <lex> I64IMAGECUBE U64IMAGECUBE
+%token <lex> I64IMAGEBUFFER U64IMAGEBUFFER
+%token <lex> I64IMAGE1DARRAY U64IMAGE1DARRAY
+%token <lex> I64IMAGE2DARRAY U64IMAGE2DARRAY
+%token <lex> I64IMAGECUBEARRAY U64IMAGECUBEARRAY
+%token <lex> I64IMAGE2DMS U64IMAGE2DMS
+%token <lex> I64IMAGE2DMSARRAY U64IMAGE2DMSARRAY
+
 // texture without sampler
 %token <lex> TEXTURECUBEARRAY ITEXTURECUBEARRAY UTEXTURECUBEARRAY
 %token <lex> TEXTURE1D ITEXTURE1D UTEXTURE1D
@@ -281,6 +293,8 @@
 %token <lex> CENTROID IN OUT INOUT
 %token <lex> STRUCT VOID WHILE
 %token <lex> BREAK CONTINUE DO ELSE FOR IF DISCARD RETURN SWITCH CASE DEFAULT
+%token <lex> TERMINATE_INVOCATION
+%token <lex> TERMINATE_RAY IGNORE_INTERSECTION
 %token <lex> UNIFORM SHARED BUFFER
 %token <lex> FLAT SMOOTH LAYOUT
 
@@ -905,7 +919,7 @@
 
 block_structure
     : type_qualifier IDENTIFIER LEFT_BRACE { parseContext.nestedBlockCheck($1.loc); } struct_declaration_list RIGHT_BRACE {
-        --parseContext.structNestingLevel;
+        --parseContext.blockNestingLevel;
         parseContext.blockName = $2.string;
         parseContext.globalQualifierFixCheck($1.loc, $1.qualifier);
         parseContext.checkNoShaderLayouts($1.loc, $1.shaderQualifiers);
@@ -3203,6 +3217,116 @@
         $$.basicType = EbtSampler;
         $$.sampler.setImage(EbtUint, Esd2D, true, false, true);
     }
+    | I64IMAGE1D {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtInt64, Esd1D);
+    }
+    | U64IMAGE1D {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtUint64, Esd1D);
+    }
+    | I64IMAGE2D {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtInt64, Esd2D);
+    }
+    | U64IMAGE2D {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtUint64, Esd2D);
+    }
+    | I64IMAGE3D {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtInt64, Esd3D);
+    }
+    | U64IMAGE3D {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtUint64, Esd3D);
+    }
+    | I64IMAGE2DRECT {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtInt64, EsdRect);
+    }
+    | U64IMAGE2DRECT {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtUint64, EsdRect);
+    }
+    | I64IMAGECUBE {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtInt64, EsdCube);
+    }
+    | U64IMAGECUBE {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtUint64, EsdCube);
+    }
+    | I64IMAGEBUFFER {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtInt64, EsdBuffer);
+    }
+    | U64IMAGEBUFFER {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtUint64, EsdBuffer);
+    }
+    | I64IMAGE1DARRAY {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtInt64, Esd1D, true);
+    }
+    | U64IMAGE1DARRAY {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtUint64, Esd1D, true);
+    }
+    | I64IMAGE2DARRAY {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtInt64, Esd2D, true);
+    }
+    | U64IMAGE2DARRAY {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtUint64, Esd2D, true);
+    }
+    | I64IMAGECUBEARRAY {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtInt64, EsdCube, true);
+    }
+    | U64IMAGECUBEARRAY {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtUint64, EsdCube, true);
+    }
+    | I64IMAGE2DMS {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtInt64, Esd2D, false, false, true);
+    }
+    | U64IMAGE2DMS {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtUint64, Esd2D, false, false, true);
+    }
+    | I64IMAGE2DMSARRAY {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtInt64, Esd2D, true, false, true);
+    }
+    | U64IMAGE2DMSARRAY {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtUint64, Esd2D, true, false, true);
+    }
     | SAMPLEREXTERNALOES {  // GL_OES_EGL_image_external
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
@@ -3805,6 +3929,20 @@
         parseContext.requireStage($1.loc, EShLangFragment, "discard");
         $$ = parseContext.intermediate.addBranch(EOpKill, $1.loc);
     }
+    | TERMINATE_INVOCATION SEMICOLON {
+        parseContext.requireStage($1.loc, EShLangFragment, "terminateInvocation");
+        $$ = parseContext.intermediate.addBranch(EOpTerminateInvocation, $1.loc);
+    }
+
+    | TERMINATE_RAY SEMICOLON {
+        parseContext.requireStage($1.loc, EShLangAnyHit, "terminateRayEXT");
+        $$ = parseContext.intermediate.addBranch(EOpTerminateRayKHR, $1.loc);
+    }
+    | IGNORE_INTERSECTION SEMICOLON {
+        parseContext.requireStage($1.loc, EShLangAnyHit, "ignoreIntersectionEXT");
+        $$ = parseContext.intermediate.addBranch(EOpIgnoreIntersectionKHR, $1.loc);
+    }
+
     ;
 
 // Grammar Note:  No 'goto'.  Gotos are not supported.
diff --git a/glslang/MachineIndependent/glslang_tab.cpp b/glslang/MachineIndependent/glslang_tab.cpp
index ac35797..feecc98 100644
--- a/glslang/MachineIndependent/glslang_tab.cpp
+++ b/glslang/MachineIndependent/glslang_tab.cpp
@@ -1,8 +1,9 @@
-/* A Bison parser, made by GNU Bison 3.0.4.  */
+/* A Bison parser, made by GNU Bison 3.7.4.  */
 
 /* Bison implementation for Yacc-like parsers in C
 
-   Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc.
+   Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2020 Free Software Foundation,
+   Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -33,6 +34,10 @@
 /* C LALR(1) parser skeleton written by Richard Stallman, by
    simplifying the original so-called "semantic" parser.  */
 
+/* DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual,
+   especially those whose name start with YY_ or yy_.  They are
+   private implementation details that can be changed or removed.  */
+
 /* All symbols defined below should begin with yy or YY, to avoid
    infringing on user name space.  This should be done even for local
    variables, as they might otherwise be expanded by user macros.
@@ -40,11 +45,11 @@
    define necessary library symbols; they are noted "INFRINGES ON
    USER NAME SPACE" below.  */
 
-/* Identify Bison output.  */
-#define YYBISON 1
+/* Identify Bison output, and Bison version.  */
+#define YYBISON 30704
 
-/* Bison version.  */
-#define YYBISON_VERSION "3.0.4"
+/* Bison version string.  */
+#define YYBISON_VERSION "3.7.4"
 
 /* Skeleton name.  */
 #define YYSKELETON_NAME "yacc.c"
@@ -61,8 +66,8 @@
 
 
 
-/* Copy the first part of user declarations.  */
-#line 69 "MachineIndependent/glslang.y" /* yacc.c:339  */
+/* First part of user prologue.  */
+#line 69 "MachineIndependent/glslang.y"
 
 
 /* Based on:
@@ -88,518 +93,596 @@
 using namespace glslang;
 
 
-#line 92 "MachineIndependent/glslang_tab.cpp" /* yacc.c:339  */
+#line 97 "MachineIndependent/glslang_tab.cpp"
 
-# ifndef YY_NULLPTR
-#  if defined __cplusplus && 201103L <= __cplusplus
-#   define YY_NULLPTR nullptr
+# ifndef YY_CAST
+#  ifdef __cplusplus
+#   define YY_CAST(Type, Val) static_cast<Type> (Val)
+#   define YY_REINTERPRET_CAST(Type, Val) reinterpret_cast<Type> (Val)
 #  else
-#   define YY_NULLPTR 0
+#   define YY_CAST(Type, Val) ((Type) (Val))
+#   define YY_REINTERPRET_CAST(Type, Val) ((Type) (Val))
+#  endif
+# endif
+# ifndef YY_NULLPTR
+#  if defined __cplusplus
+#   if 201103L <= __cplusplus
+#    define YY_NULLPTR nullptr
+#   else
+#    define YY_NULLPTR 0
+#   endif
+#  else
+#   define YY_NULLPTR ((void*)0)
 #  endif
 # endif
 
-/* Enabling verbose error messages.  */
-#ifdef YYERROR_VERBOSE
-# undef YYERROR_VERBOSE
-# define YYERROR_VERBOSE 1
-#else
-# define YYERROR_VERBOSE 1
-#endif
-
-/* In a future release of Bison, this section will be replaced
-   by #include "glslang_tab.cpp.h".  */
-#ifndef YY_YY_MACHINEINDEPENDENT_GLSLANG_TAB_CPP_H_INCLUDED
-# define YY_YY_MACHINEINDEPENDENT_GLSLANG_TAB_CPP_H_INCLUDED
-/* Debug traces.  */
-#ifndef YYDEBUG
-# define YYDEBUG 1
-#endif
-#if YYDEBUG
-extern int yydebug;
-#endif
-
-/* Token type.  */
-#ifndef YYTOKENTYPE
-# define YYTOKENTYPE
-  enum yytokentype
-  {
-    CONST = 258,
-    BOOL = 259,
-    INT = 260,
-    UINT = 261,
-    FLOAT = 262,
-    BVEC2 = 263,
-    BVEC3 = 264,
-    BVEC4 = 265,
-    IVEC2 = 266,
-    IVEC3 = 267,
-    IVEC4 = 268,
-    UVEC2 = 269,
-    UVEC3 = 270,
-    UVEC4 = 271,
-    VEC2 = 272,
-    VEC3 = 273,
-    VEC4 = 274,
-    MAT2 = 275,
-    MAT3 = 276,
-    MAT4 = 277,
-    MAT2X2 = 278,
-    MAT2X3 = 279,
-    MAT2X4 = 280,
-    MAT3X2 = 281,
-    MAT3X3 = 282,
-    MAT3X4 = 283,
-    MAT4X2 = 284,
-    MAT4X3 = 285,
-    MAT4X4 = 286,
-    SAMPLER2D = 287,
-    SAMPLER3D = 288,
-    SAMPLERCUBE = 289,
-    SAMPLER2DSHADOW = 290,
-    SAMPLERCUBESHADOW = 291,
-    SAMPLER2DARRAY = 292,
-    SAMPLER2DARRAYSHADOW = 293,
-    ISAMPLER2D = 294,
-    ISAMPLER3D = 295,
-    ISAMPLERCUBE = 296,
-    ISAMPLER2DARRAY = 297,
-    USAMPLER2D = 298,
-    USAMPLER3D = 299,
-    USAMPLERCUBE = 300,
-    USAMPLER2DARRAY = 301,
-    SAMPLER = 302,
-    SAMPLERSHADOW = 303,
-    TEXTURE2D = 304,
-    TEXTURE3D = 305,
-    TEXTURECUBE = 306,
-    TEXTURE2DARRAY = 307,
-    ITEXTURE2D = 308,
-    ITEXTURE3D = 309,
-    ITEXTURECUBE = 310,
-    ITEXTURE2DARRAY = 311,
-    UTEXTURE2D = 312,
-    UTEXTURE3D = 313,
-    UTEXTURECUBE = 314,
-    UTEXTURE2DARRAY = 315,
-    ATTRIBUTE = 316,
-    VARYING = 317,
-    FLOAT16_T = 318,
-    FLOAT32_T = 319,
-    DOUBLE = 320,
-    FLOAT64_T = 321,
-    INT64_T = 322,
-    UINT64_T = 323,
-    INT32_T = 324,
-    UINT32_T = 325,
-    INT16_T = 326,
-    UINT16_T = 327,
-    INT8_T = 328,
-    UINT8_T = 329,
-    I64VEC2 = 330,
-    I64VEC3 = 331,
-    I64VEC4 = 332,
-    U64VEC2 = 333,
-    U64VEC3 = 334,
-    U64VEC4 = 335,
-    I32VEC2 = 336,
-    I32VEC3 = 337,
-    I32VEC4 = 338,
-    U32VEC2 = 339,
-    U32VEC3 = 340,
-    U32VEC4 = 341,
-    I16VEC2 = 342,
-    I16VEC3 = 343,
-    I16VEC4 = 344,
-    U16VEC2 = 345,
-    U16VEC3 = 346,
-    U16VEC4 = 347,
-    I8VEC2 = 348,
-    I8VEC3 = 349,
-    I8VEC4 = 350,
-    U8VEC2 = 351,
-    U8VEC3 = 352,
-    U8VEC4 = 353,
-    DVEC2 = 354,
-    DVEC3 = 355,
-    DVEC4 = 356,
-    DMAT2 = 357,
-    DMAT3 = 358,
-    DMAT4 = 359,
-    F16VEC2 = 360,
-    F16VEC3 = 361,
-    F16VEC4 = 362,
-    F16MAT2 = 363,
-    F16MAT3 = 364,
-    F16MAT4 = 365,
-    F32VEC2 = 366,
-    F32VEC3 = 367,
-    F32VEC4 = 368,
-    F32MAT2 = 369,
-    F32MAT3 = 370,
-    F32MAT4 = 371,
-    F64VEC2 = 372,
-    F64VEC3 = 373,
-    F64VEC4 = 374,
-    F64MAT2 = 375,
-    F64MAT3 = 376,
-    F64MAT4 = 377,
-    DMAT2X2 = 378,
-    DMAT2X3 = 379,
-    DMAT2X4 = 380,
-    DMAT3X2 = 381,
-    DMAT3X3 = 382,
-    DMAT3X4 = 383,
-    DMAT4X2 = 384,
-    DMAT4X3 = 385,
-    DMAT4X4 = 386,
-    F16MAT2X2 = 387,
-    F16MAT2X3 = 388,
-    F16MAT2X4 = 389,
-    F16MAT3X2 = 390,
-    F16MAT3X3 = 391,
-    F16MAT3X4 = 392,
-    F16MAT4X2 = 393,
-    F16MAT4X3 = 394,
-    F16MAT4X4 = 395,
-    F32MAT2X2 = 396,
-    F32MAT2X3 = 397,
-    F32MAT2X4 = 398,
-    F32MAT3X2 = 399,
-    F32MAT3X3 = 400,
-    F32MAT3X4 = 401,
-    F32MAT4X2 = 402,
-    F32MAT4X3 = 403,
-    F32MAT4X4 = 404,
-    F64MAT2X2 = 405,
-    F64MAT2X3 = 406,
-    F64MAT2X4 = 407,
-    F64MAT3X2 = 408,
-    F64MAT3X3 = 409,
-    F64MAT3X4 = 410,
-    F64MAT4X2 = 411,
-    F64MAT4X3 = 412,
-    F64MAT4X4 = 413,
-    ATOMIC_UINT = 414,
-    ACCSTRUCTNV = 415,
-    ACCSTRUCTEXT = 416,
-    RAYQUERYEXT = 417,
-    FCOOPMATNV = 418,
-    ICOOPMATNV = 419,
-    UCOOPMATNV = 420,
-    SAMPLERCUBEARRAY = 421,
-    SAMPLERCUBEARRAYSHADOW = 422,
-    ISAMPLERCUBEARRAY = 423,
-    USAMPLERCUBEARRAY = 424,
-    SAMPLER1D = 425,
-    SAMPLER1DARRAY = 426,
-    SAMPLER1DARRAYSHADOW = 427,
-    ISAMPLER1D = 428,
-    SAMPLER1DSHADOW = 429,
-    SAMPLER2DRECT = 430,
-    SAMPLER2DRECTSHADOW = 431,
-    ISAMPLER2DRECT = 432,
-    USAMPLER2DRECT = 433,
-    SAMPLERBUFFER = 434,
-    ISAMPLERBUFFER = 435,
-    USAMPLERBUFFER = 436,
-    SAMPLER2DMS = 437,
-    ISAMPLER2DMS = 438,
-    USAMPLER2DMS = 439,
-    SAMPLER2DMSARRAY = 440,
-    ISAMPLER2DMSARRAY = 441,
-    USAMPLER2DMSARRAY = 442,
-    SAMPLEREXTERNALOES = 443,
-    SAMPLEREXTERNAL2DY2YEXT = 444,
-    ISAMPLER1DARRAY = 445,
-    USAMPLER1D = 446,
-    USAMPLER1DARRAY = 447,
-    F16SAMPLER1D = 448,
-    F16SAMPLER2D = 449,
-    F16SAMPLER3D = 450,
-    F16SAMPLER2DRECT = 451,
-    F16SAMPLERCUBE = 452,
-    F16SAMPLER1DARRAY = 453,
-    F16SAMPLER2DARRAY = 454,
-    F16SAMPLERCUBEARRAY = 455,
-    F16SAMPLERBUFFER = 456,
-    F16SAMPLER2DMS = 457,
-    F16SAMPLER2DMSARRAY = 458,
-    F16SAMPLER1DSHADOW = 459,
-    F16SAMPLER2DSHADOW = 460,
-    F16SAMPLER1DARRAYSHADOW = 461,
-    F16SAMPLER2DARRAYSHADOW = 462,
-    F16SAMPLER2DRECTSHADOW = 463,
-    F16SAMPLERCUBESHADOW = 464,
-    F16SAMPLERCUBEARRAYSHADOW = 465,
-    IMAGE1D = 466,
-    IIMAGE1D = 467,
-    UIMAGE1D = 468,
-    IMAGE2D = 469,
-    IIMAGE2D = 470,
-    UIMAGE2D = 471,
-    IMAGE3D = 472,
-    IIMAGE3D = 473,
-    UIMAGE3D = 474,
-    IMAGE2DRECT = 475,
-    IIMAGE2DRECT = 476,
-    UIMAGE2DRECT = 477,
-    IMAGECUBE = 478,
-    IIMAGECUBE = 479,
-    UIMAGECUBE = 480,
-    IMAGEBUFFER = 481,
-    IIMAGEBUFFER = 482,
-    UIMAGEBUFFER = 483,
-    IMAGE1DARRAY = 484,
-    IIMAGE1DARRAY = 485,
-    UIMAGE1DARRAY = 486,
-    IMAGE2DARRAY = 487,
-    IIMAGE2DARRAY = 488,
-    UIMAGE2DARRAY = 489,
-    IMAGECUBEARRAY = 490,
-    IIMAGECUBEARRAY = 491,
-    UIMAGECUBEARRAY = 492,
-    IMAGE2DMS = 493,
-    IIMAGE2DMS = 494,
-    UIMAGE2DMS = 495,
-    IMAGE2DMSARRAY = 496,
-    IIMAGE2DMSARRAY = 497,
-    UIMAGE2DMSARRAY = 498,
-    F16IMAGE1D = 499,
-    F16IMAGE2D = 500,
-    F16IMAGE3D = 501,
-    F16IMAGE2DRECT = 502,
-    F16IMAGECUBE = 503,
-    F16IMAGE1DARRAY = 504,
-    F16IMAGE2DARRAY = 505,
-    F16IMAGECUBEARRAY = 506,
-    F16IMAGEBUFFER = 507,
-    F16IMAGE2DMS = 508,
-    F16IMAGE2DMSARRAY = 509,
-    TEXTURECUBEARRAY = 510,
-    ITEXTURECUBEARRAY = 511,
-    UTEXTURECUBEARRAY = 512,
-    TEXTURE1D = 513,
-    ITEXTURE1D = 514,
-    UTEXTURE1D = 515,
-    TEXTURE1DARRAY = 516,
-    ITEXTURE1DARRAY = 517,
-    UTEXTURE1DARRAY = 518,
-    TEXTURE2DRECT = 519,
-    ITEXTURE2DRECT = 520,
-    UTEXTURE2DRECT = 521,
-    TEXTUREBUFFER = 522,
-    ITEXTUREBUFFER = 523,
-    UTEXTUREBUFFER = 524,
-    TEXTURE2DMS = 525,
-    ITEXTURE2DMS = 526,
-    UTEXTURE2DMS = 527,
-    TEXTURE2DMSARRAY = 528,
-    ITEXTURE2DMSARRAY = 529,
-    UTEXTURE2DMSARRAY = 530,
-    F16TEXTURE1D = 531,
-    F16TEXTURE2D = 532,
-    F16TEXTURE3D = 533,
-    F16TEXTURE2DRECT = 534,
-    F16TEXTURECUBE = 535,
-    F16TEXTURE1DARRAY = 536,
-    F16TEXTURE2DARRAY = 537,
-    F16TEXTURECUBEARRAY = 538,
-    F16TEXTUREBUFFER = 539,
-    F16TEXTURE2DMS = 540,
-    F16TEXTURE2DMSARRAY = 541,
-    SUBPASSINPUT = 542,
-    SUBPASSINPUTMS = 543,
-    ISUBPASSINPUT = 544,
-    ISUBPASSINPUTMS = 545,
-    USUBPASSINPUT = 546,
-    USUBPASSINPUTMS = 547,
-    F16SUBPASSINPUT = 548,
-    F16SUBPASSINPUTMS = 549,
-    LEFT_OP = 550,
-    RIGHT_OP = 551,
-    INC_OP = 552,
-    DEC_OP = 553,
-    LE_OP = 554,
-    GE_OP = 555,
-    EQ_OP = 556,
-    NE_OP = 557,
-    AND_OP = 558,
-    OR_OP = 559,
-    XOR_OP = 560,
-    MUL_ASSIGN = 561,
-    DIV_ASSIGN = 562,
-    ADD_ASSIGN = 563,
-    MOD_ASSIGN = 564,
-    LEFT_ASSIGN = 565,
-    RIGHT_ASSIGN = 566,
-    AND_ASSIGN = 567,
-    XOR_ASSIGN = 568,
-    OR_ASSIGN = 569,
-    SUB_ASSIGN = 570,
-    STRING_LITERAL = 571,
-    LEFT_PAREN = 572,
-    RIGHT_PAREN = 573,
-    LEFT_BRACKET = 574,
-    RIGHT_BRACKET = 575,
-    LEFT_BRACE = 576,
-    RIGHT_BRACE = 577,
-    DOT = 578,
-    COMMA = 579,
-    COLON = 580,
-    EQUAL = 581,
-    SEMICOLON = 582,
-    BANG = 583,
-    DASH = 584,
-    TILDE = 585,
-    PLUS = 586,
-    STAR = 587,
-    SLASH = 588,
-    PERCENT = 589,
-    LEFT_ANGLE = 590,
-    RIGHT_ANGLE = 591,
-    VERTICAL_BAR = 592,
-    CARET = 593,
-    AMPERSAND = 594,
-    QUESTION = 595,
-    INVARIANT = 596,
-    HIGH_PRECISION = 597,
-    MEDIUM_PRECISION = 598,
-    LOW_PRECISION = 599,
-    PRECISION = 600,
-    PACKED = 601,
-    RESOURCE = 602,
-    SUPERP = 603,
-    FLOATCONSTANT = 604,
-    INTCONSTANT = 605,
-    UINTCONSTANT = 606,
-    BOOLCONSTANT = 607,
-    IDENTIFIER = 608,
-    TYPE_NAME = 609,
-    CENTROID = 610,
-    IN = 611,
-    OUT = 612,
-    INOUT = 613,
-    STRUCT = 614,
-    VOID = 615,
-    WHILE = 616,
-    BREAK = 617,
-    CONTINUE = 618,
-    DO = 619,
-    ELSE = 620,
-    FOR = 621,
-    IF = 622,
-    DISCARD = 623,
-    RETURN = 624,
-    SWITCH = 625,
-    CASE = 626,
-    DEFAULT = 627,
-    UNIFORM = 628,
-    SHARED = 629,
-    BUFFER = 630,
-    FLAT = 631,
-    SMOOTH = 632,
-    LAYOUT = 633,
-    DOUBLECONSTANT = 634,
-    INT16CONSTANT = 635,
-    UINT16CONSTANT = 636,
-    FLOAT16CONSTANT = 637,
-    INT32CONSTANT = 638,
-    UINT32CONSTANT = 639,
-    INT64CONSTANT = 640,
-    UINT64CONSTANT = 641,
-    SUBROUTINE = 642,
-    DEMOTE = 643,
-    PAYLOADNV = 644,
-    PAYLOADINNV = 645,
-    HITATTRNV = 646,
-    CALLDATANV = 647,
-    CALLDATAINNV = 648,
-    PAYLOADEXT = 649,
-    PAYLOADINEXT = 650,
-    HITATTREXT = 651,
-    CALLDATAEXT = 652,
-    CALLDATAINEXT = 653,
-    PATCH = 654,
-    SAMPLE = 655,
-    NONUNIFORM = 656,
-    COHERENT = 657,
-    VOLATILE = 658,
-    RESTRICT = 659,
-    READONLY = 660,
-    WRITEONLY = 661,
-    DEVICECOHERENT = 662,
-    QUEUEFAMILYCOHERENT = 663,
-    WORKGROUPCOHERENT = 664,
-    SUBGROUPCOHERENT = 665,
-    NONPRIVATE = 666,
-    SHADERCALLCOHERENT = 667,
-    NOPERSPECTIVE = 668,
-    EXPLICITINTERPAMD = 669,
-    PERVERTEXNV = 670,
-    PERPRIMITIVENV = 671,
-    PERVIEWNV = 672,
-    PERTASKNV = 673,
-    PRECISE = 674
-  };
-#endif
-
-/* Value type.  */
-#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
-
-union YYSTYPE
+#include "glslang_tab.cpp.h"
+/* Symbol kind.  */
+enum yysymbol_kind_t
 {
-#line 97 "MachineIndependent/glslang.y" /* yacc.c:355  */
-
-    struct {
-        glslang::TSourceLoc loc;
-        union {
-            glslang::TString *string;
-            int i;
-            unsigned int u;
-            long long i64;
-            unsigned long long u64;
-            bool b;
-            double d;
-        };
-        glslang::TSymbol* symbol;
-    } lex;
-    struct {
-        glslang::TSourceLoc loc;
-        glslang::TOperator op;
-        union {
-            TIntermNode* intermNode;
-            glslang::TIntermNodePair nodePair;
-            glslang::TIntermTyped* intermTypedNode;
-            glslang::TAttributes* attributes;
-        };
-        union {
-            glslang::TPublicType type;
-            glslang::TFunction* function;
-            glslang::TParameter param;
-            glslang::TTypeLoc typeLine;
-            glslang::TTypeList* typeList;
-            glslang::TArraySizes* arraySizes;
-            glslang::TIdentifierList* identifierList;
-        };
-        glslang::TArraySizes* typeParameters;
-    } interm;
-
-#line 588 "MachineIndependent/glslang_tab.cpp" /* yacc.c:355  */
+  YYSYMBOL_YYEMPTY = -2,
+  YYSYMBOL_YYEOF = 0,                      /* "end of file"  */
+  YYSYMBOL_YYerror = 1,                    /* error  */
+  YYSYMBOL_YYUNDEF = 2,                    /* "invalid token"  */
+  YYSYMBOL_CONST = 3,                      /* CONST  */
+  YYSYMBOL_BOOL = 4,                       /* BOOL  */
+  YYSYMBOL_INT = 5,                        /* INT  */
+  YYSYMBOL_UINT = 6,                       /* UINT  */
+  YYSYMBOL_FLOAT = 7,                      /* FLOAT  */
+  YYSYMBOL_BVEC2 = 8,                      /* BVEC2  */
+  YYSYMBOL_BVEC3 = 9,                      /* BVEC3  */
+  YYSYMBOL_BVEC4 = 10,                     /* BVEC4  */
+  YYSYMBOL_IVEC2 = 11,                     /* IVEC2  */
+  YYSYMBOL_IVEC3 = 12,                     /* IVEC3  */
+  YYSYMBOL_IVEC4 = 13,                     /* IVEC4  */
+  YYSYMBOL_UVEC2 = 14,                     /* UVEC2  */
+  YYSYMBOL_UVEC3 = 15,                     /* UVEC3  */
+  YYSYMBOL_UVEC4 = 16,                     /* UVEC4  */
+  YYSYMBOL_VEC2 = 17,                      /* VEC2  */
+  YYSYMBOL_VEC3 = 18,                      /* VEC3  */
+  YYSYMBOL_VEC4 = 19,                      /* VEC4  */
+  YYSYMBOL_MAT2 = 20,                      /* MAT2  */
+  YYSYMBOL_MAT3 = 21,                      /* MAT3  */
+  YYSYMBOL_MAT4 = 22,                      /* MAT4  */
+  YYSYMBOL_MAT2X2 = 23,                    /* MAT2X2  */
+  YYSYMBOL_MAT2X3 = 24,                    /* MAT2X3  */
+  YYSYMBOL_MAT2X4 = 25,                    /* MAT2X4  */
+  YYSYMBOL_MAT3X2 = 26,                    /* MAT3X2  */
+  YYSYMBOL_MAT3X3 = 27,                    /* MAT3X3  */
+  YYSYMBOL_MAT3X4 = 28,                    /* MAT3X4  */
+  YYSYMBOL_MAT4X2 = 29,                    /* MAT4X2  */
+  YYSYMBOL_MAT4X3 = 30,                    /* MAT4X3  */
+  YYSYMBOL_MAT4X4 = 31,                    /* MAT4X4  */
+  YYSYMBOL_SAMPLER2D = 32,                 /* SAMPLER2D  */
+  YYSYMBOL_SAMPLER3D = 33,                 /* SAMPLER3D  */
+  YYSYMBOL_SAMPLERCUBE = 34,               /* SAMPLERCUBE  */
+  YYSYMBOL_SAMPLER2DSHADOW = 35,           /* SAMPLER2DSHADOW  */
+  YYSYMBOL_SAMPLERCUBESHADOW = 36,         /* SAMPLERCUBESHADOW  */
+  YYSYMBOL_SAMPLER2DARRAY = 37,            /* SAMPLER2DARRAY  */
+  YYSYMBOL_SAMPLER2DARRAYSHADOW = 38,      /* SAMPLER2DARRAYSHADOW  */
+  YYSYMBOL_ISAMPLER2D = 39,                /* ISAMPLER2D  */
+  YYSYMBOL_ISAMPLER3D = 40,                /* ISAMPLER3D  */
+  YYSYMBOL_ISAMPLERCUBE = 41,              /* ISAMPLERCUBE  */
+  YYSYMBOL_ISAMPLER2DARRAY = 42,           /* ISAMPLER2DARRAY  */
+  YYSYMBOL_USAMPLER2D = 43,                /* USAMPLER2D  */
+  YYSYMBOL_USAMPLER3D = 44,                /* USAMPLER3D  */
+  YYSYMBOL_USAMPLERCUBE = 45,              /* USAMPLERCUBE  */
+  YYSYMBOL_USAMPLER2DARRAY = 46,           /* USAMPLER2DARRAY  */
+  YYSYMBOL_SAMPLER = 47,                   /* SAMPLER  */
+  YYSYMBOL_SAMPLERSHADOW = 48,             /* SAMPLERSHADOW  */
+  YYSYMBOL_TEXTURE2D = 49,                 /* TEXTURE2D  */
+  YYSYMBOL_TEXTURE3D = 50,                 /* TEXTURE3D  */
+  YYSYMBOL_TEXTURECUBE = 51,               /* TEXTURECUBE  */
+  YYSYMBOL_TEXTURE2DARRAY = 52,            /* TEXTURE2DARRAY  */
+  YYSYMBOL_ITEXTURE2D = 53,                /* ITEXTURE2D  */
+  YYSYMBOL_ITEXTURE3D = 54,                /* ITEXTURE3D  */
+  YYSYMBOL_ITEXTURECUBE = 55,              /* ITEXTURECUBE  */
+  YYSYMBOL_ITEXTURE2DARRAY = 56,           /* ITEXTURE2DARRAY  */
+  YYSYMBOL_UTEXTURE2D = 57,                /* UTEXTURE2D  */
+  YYSYMBOL_UTEXTURE3D = 58,                /* UTEXTURE3D  */
+  YYSYMBOL_UTEXTURECUBE = 59,              /* UTEXTURECUBE  */
+  YYSYMBOL_UTEXTURE2DARRAY = 60,           /* UTEXTURE2DARRAY  */
+  YYSYMBOL_ATTRIBUTE = 61,                 /* ATTRIBUTE  */
+  YYSYMBOL_VARYING = 62,                   /* VARYING  */
+  YYSYMBOL_FLOAT16_T = 63,                 /* FLOAT16_T  */
+  YYSYMBOL_FLOAT32_T = 64,                 /* FLOAT32_T  */
+  YYSYMBOL_DOUBLE = 65,                    /* DOUBLE  */
+  YYSYMBOL_FLOAT64_T = 66,                 /* FLOAT64_T  */
+  YYSYMBOL_INT64_T = 67,                   /* INT64_T  */
+  YYSYMBOL_UINT64_T = 68,                  /* UINT64_T  */
+  YYSYMBOL_INT32_T = 69,                   /* INT32_T  */
+  YYSYMBOL_UINT32_T = 70,                  /* UINT32_T  */
+  YYSYMBOL_INT16_T = 71,                   /* INT16_T  */
+  YYSYMBOL_UINT16_T = 72,                  /* UINT16_T  */
+  YYSYMBOL_INT8_T = 73,                    /* INT8_T  */
+  YYSYMBOL_UINT8_T = 74,                   /* UINT8_T  */
+  YYSYMBOL_I64VEC2 = 75,                   /* I64VEC2  */
+  YYSYMBOL_I64VEC3 = 76,                   /* I64VEC3  */
+  YYSYMBOL_I64VEC4 = 77,                   /* I64VEC4  */
+  YYSYMBOL_U64VEC2 = 78,                   /* U64VEC2  */
+  YYSYMBOL_U64VEC3 = 79,                   /* U64VEC3  */
+  YYSYMBOL_U64VEC4 = 80,                   /* U64VEC4  */
+  YYSYMBOL_I32VEC2 = 81,                   /* I32VEC2  */
+  YYSYMBOL_I32VEC3 = 82,                   /* I32VEC3  */
+  YYSYMBOL_I32VEC4 = 83,                   /* I32VEC4  */
+  YYSYMBOL_U32VEC2 = 84,                   /* U32VEC2  */
+  YYSYMBOL_U32VEC3 = 85,                   /* U32VEC3  */
+  YYSYMBOL_U32VEC4 = 86,                   /* U32VEC4  */
+  YYSYMBOL_I16VEC2 = 87,                   /* I16VEC2  */
+  YYSYMBOL_I16VEC3 = 88,                   /* I16VEC3  */
+  YYSYMBOL_I16VEC4 = 89,                   /* I16VEC4  */
+  YYSYMBOL_U16VEC2 = 90,                   /* U16VEC2  */
+  YYSYMBOL_U16VEC3 = 91,                   /* U16VEC3  */
+  YYSYMBOL_U16VEC4 = 92,                   /* U16VEC4  */
+  YYSYMBOL_I8VEC2 = 93,                    /* I8VEC2  */
+  YYSYMBOL_I8VEC3 = 94,                    /* I8VEC3  */
+  YYSYMBOL_I8VEC4 = 95,                    /* I8VEC4  */
+  YYSYMBOL_U8VEC2 = 96,                    /* U8VEC2  */
+  YYSYMBOL_U8VEC3 = 97,                    /* U8VEC3  */
+  YYSYMBOL_U8VEC4 = 98,                    /* U8VEC4  */
+  YYSYMBOL_DVEC2 = 99,                     /* DVEC2  */
+  YYSYMBOL_DVEC3 = 100,                    /* DVEC3  */
+  YYSYMBOL_DVEC4 = 101,                    /* DVEC4  */
+  YYSYMBOL_DMAT2 = 102,                    /* DMAT2  */
+  YYSYMBOL_DMAT3 = 103,                    /* DMAT3  */
+  YYSYMBOL_DMAT4 = 104,                    /* DMAT4  */
+  YYSYMBOL_F16VEC2 = 105,                  /* F16VEC2  */
+  YYSYMBOL_F16VEC3 = 106,                  /* F16VEC3  */
+  YYSYMBOL_F16VEC4 = 107,                  /* F16VEC4  */
+  YYSYMBOL_F16MAT2 = 108,                  /* F16MAT2  */
+  YYSYMBOL_F16MAT3 = 109,                  /* F16MAT3  */
+  YYSYMBOL_F16MAT4 = 110,                  /* F16MAT4  */
+  YYSYMBOL_F32VEC2 = 111,                  /* F32VEC2  */
+  YYSYMBOL_F32VEC3 = 112,                  /* F32VEC3  */
+  YYSYMBOL_F32VEC4 = 113,                  /* F32VEC4  */
+  YYSYMBOL_F32MAT2 = 114,                  /* F32MAT2  */
+  YYSYMBOL_F32MAT3 = 115,                  /* F32MAT3  */
+  YYSYMBOL_F32MAT4 = 116,                  /* F32MAT4  */
+  YYSYMBOL_F64VEC2 = 117,                  /* F64VEC2  */
+  YYSYMBOL_F64VEC3 = 118,                  /* F64VEC3  */
+  YYSYMBOL_F64VEC4 = 119,                  /* F64VEC4  */
+  YYSYMBOL_F64MAT2 = 120,                  /* F64MAT2  */
+  YYSYMBOL_F64MAT3 = 121,                  /* F64MAT3  */
+  YYSYMBOL_F64MAT4 = 122,                  /* F64MAT4  */
+  YYSYMBOL_DMAT2X2 = 123,                  /* DMAT2X2  */
+  YYSYMBOL_DMAT2X3 = 124,                  /* DMAT2X3  */
+  YYSYMBOL_DMAT2X4 = 125,                  /* DMAT2X4  */
+  YYSYMBOL_DMAT3X2 = 126,                  /* DMAT3X2  */
+  YYSYMBOL_DMAT3X3 = 127,                  /* DMAT3X3  */
+  YYSYMBOL_DMAT3X4 = 128,                  /* DMAT3X4  */
+  YYSYMBOL_DMAT4X2 = 129,                  /* DMAT4X2  */
+  YYSYMBOL_DMAT4X3 = 130,                  /* DMAT4X3  */
+  YYSYMBOL_DMAT4X4 = 131,                  /* DMAT4X4  */
+  YYSYMBOL_F16MAT2X2 = 132,                /* F16MAT2X2  */
+  YYSYMBOL_F16MAT2X3 = 133,                /* F16MAT2X3  */
+  YYSYMBOL_F16MAT2X4 = 134,                /* F16MAT2X4  */
+  YYSYMBOL_F16MAT3X2 = 135,                /* F16MAT3X2  */
+  YYSYMBOL_F16MAT3X3 = 136,                /* F16MAT3X3  */
+  YYSYMBOL_F16MAT3X4 = 137,                /* F16MAT3X4  */
+  YYSYMBOL_F16MAT4X2 = 138,                /* F16MAT4X2  */
+  YYSYMBOL_F16MAT4X3 = 139,                /* F16MAT4X3  */
+  YYSYMBOL_F16MAT4X4 = 140,                /* F16MAT4X4  */
+  YYSYMBOL_F32MAT2X2 = 141,                /* F32MAT2X2  */
+  YYSYMBOL_F32MAT2X3 = 142,                /* F32MAT2X3  */
+  YYSYMBOL_F32MAT2X4 = 143,                /* F32MAT2X4  */
+  YYSYMBOL_F32MAT3X2 = 144,                /* F32MAT3X2  */
+  YYSYMBOL_F32MAT3X3 = 145,                /* F32MAT3X3  */
+  YYSYMBOL_F32MAT3X4 = 146,                /* F32MAT3X4  */
+  YYSYMBOL_F32MAT4X2 = 147,                /* F32MAT4X2  */
+  YYSYMBOL_F32MAT4X3 = 148,                /* F32MAT4X3  */
+  YYSYMBOL_F32MAT4X4 = 149,                /* F32MAT4X4  */
+  YYSYMBOL_F64MAT2X2 = 150,                /* F64MAT2X2  */
+  YYSYMBOL_F64MAT2X3 = 151,                /* F64MAT2X3  */
+  YYSYMBOL_F64MAT2X4 = 152,                /* F64MAT2X4  */
+  YYSYMBOL_F64MAT3X2 = 153,                /* F64MAT3X2  */
+  YYSYMBOL_F64MAT3X3 = 154,                /* F64MAT3X3  */
+  YYSYMBOL_F64MAT3X4 = 155,                /* F64MAT3X4  */
+  YYSYMBOL_F64MAT4X2 = 156,                /* F64MAT4X2  */
+  YYSYMBOL_F64MAT4X3 = 157,                /* F64MAT4X3  */
+  YYSYMBOL_F64MAT4X4 = 158,                /* F64MAT4X4  */
+  YYSYMBOL_ATOMIC_UINT = 159,              /* ATOMIC_UINT  */
+  YYSYMBOL_ACCSTRUCTNV = 160,              /* ACCSTRUCTNV  */
+  YYSYMBOL_ACCSTRUCTEXT = 161,             /* ACCSTRUCTEXT  */
+  YYSYMBOL_RAYQUERYEXT = 162,              /* RAYQUERYEXT  */
+  YYSYMBOL_FCOOPMATNV = 163,               /* FCOOPMATNV  */
+  YYSYMBOL_ICOOPMATNV = 164,               /* ICOOPMATNV  */
+  YYSYMBOL_UCOOPMATNV = 165,               /* UCOOPMATNV  */
+  YYSYMBOL_SAMPLERCUBEARRAY = 166,         /* SAMPLERCUBEARRAY  */
+  YYSYMBOL_SAMPLERCUBEARRAYSHADOW = 167,   /* SAMPLERCUBEARRAYSHADOW  */
+  YYSYMBOL_ISAMPLERCUBEARRAY = 168,        /* ISAMPLERCUBEARRAY  */
+  YYSYMBOL_USAMPLERCUBEARRAY = 169,        /* USAMPLERCUBEARRAY  */
+  YYSYMBOL_SAMPLER1D = 170,                /* SAMPLER1D  */
+  YYSYMBOL_SAMPLER1DARRAY = 171,           /* SAMPLER1DARRAY  */
+  YYSYMBOL_SAMPLER1DARRAYSHADOW = 172,     /* SAMPLER1DARRAYSHADOW  */
+  YYSYMBOL_ISAMPLER1D = 173,               /* ISAMPLER1D  */
+  YYSYMBOL_SAMPLER1DSHADOW = 174,          /* SAMPLER1DSHADOW  */
+  YYSYMBOL_SAMPLER2DRECT = 175,            /* SAMPLER2DRECT  */
+  YYSYMBOL_SAMPLER2DRECTSHADOW = 176,      /* SAMPLER2DRECTSHADOW  */
+  YYSYMBOL_ISAMPLER2DRECT = 177,           /* ISAMPLER2DRECT  */
+  YYSYMBOL_USAMPLER2DRECT = 178,           /* USAMPLER2DRECT  */
+  YYSYMBOL_SAMPLERBUFFER = 179,            /* SAMPLERBUFFER  */
+  YYSYMBOL_ISAMPLERBUFFER = 180,           /* ISAMPLERBUFFER  */
+  YYSYMBOL_USAMPLERBUFFER = 181,           /* USAMPLERBUFFER  */
+  YYSYMBOL_SAMPLER2DMS = 182,              /* SAMPLER2DMS  */
+  YYSYMBOL_ISAMPLER2DMS = 183,             /* ISAMPLER2DMS  */
+  YYSYMBOL_USAMPLER2DMS = 184,             /* USAMPLER2DMS  */
+  YYSYMBOL_SAMPLER2DMSARRAY = 185,         /* SAMPLER2DMSARRAY  */
+  YYSYMBOL_ISAMPLER2DMSARRAY = 186,        /* ISAMPLER2DMSARRAY  */
+  YYSYMBOL_USAMPLER2DMSARRAY = 187,        /* USAMPLER2DMSARRAY  */
+  YYSYMBOL_SAMPLEREXTERNALOES = 188,       /* SAMPLEREXTERNALOES  */
+  YYSYMBOL_SAMPLEREXTERNAL2DY2YEXT = 189,  /* SAMPLEREXTERNAL2DY2YEXT  */
+  YYSYMBOL_ISAMPLER1DARRAY = 190,          /* ISAMPLER1DARRAY  */
+  YYSYMBOL_USAMPLER1D = 191,               /* USAMPLER1D  */
+  YYSYMBOL_USAMPLER1DARRAY = 192,          /* USAMPLER1DARRAY  */
+  YYSYMBOL_F16SAMPLER1D = 193,             /* F16SAMPLER1D  */
+  YYSYMBOL_F16SAMPLER2D = 194,             /* F16SAMPLER2D  */
+  YYSYMBOL_F16SAMPLER3D = 195,             /* F16SAMPLER3D  */
+  YYSYMBOL_F16SAMPLER2DRECT = 196,         /* F16SAMPLER2DRECT  */
+  YYSYMBOL_F16SAMPLERCUBE = 197,           /* F16SAMPLERCUBE  */
+  YYSYMBOL_F16SAMPLER1DARRAY = 198,        /* F16SAMPLER1DARRAY  */
+  YYSYMBOL_F16SAMPLER2DARRAY = 199,        /* F16SAMPLER2DARRAY  */
+  YYSYMBOL_F16SAMPLERCUBEARRAY = 200,      /* F16SAMPLERCUBEARRAY  */
+  YYSYMBOL_F16SAMPLERBUFFER = 201,         /* F16SAMPLERBUFFER  */
+  YYSYMBOL_F16SAMPLER2DMS = 202,           /* F16SAMPLER2DMS  */
+  YYSYMBOL_F16SAMPLER2DMSARRAY = 203,      /* F16SAMPLER2DMSARRAY  */
+  YYSYMBOL_F16SAMPLER1DSHADOW = 204,       /* F16SAMPLER1DSHADOW  */
+  YYSYMBOL_F16SAMPLER2DSHADOW = 205,       /* F16SAMPLER2DSHADOW  */
+  YYSYMBOL_F16SAMPLER1DARRAYSHADOW = 206,  /* F16SAMPLER1DARRAYSHADOW  */
+  YYSYMBOL_F16SAMPLER2DARRAYSHADOW = 207,  /* F16SAMPLER2DARRAYSHADOW  */
+  YYSYMBOL_F16SAMPLER2DRECTSHADOW = 208,   /* F16SAMPLER2DRECTSHADOW  */
+  YYSYMBOL_F16SAMPLERCUBESHADOW = 209,     /* F16SAMPLERCUBESHADOW  */
+  YYSYMBOL_F16SAMPLERCUBEARRAYSHADOW = 210, /* F16SAMPLERCUBEARRAYSHADOW  */
+  YYSYMBOL_IMAGE1D = 211,                  /* IMAGE1D  */
+  YYSYMBOL_IIMAGE1D = 212,                 /* IIMAGE1D  */
+  YYSYMBOL_UIMAGE1D = 213,                 /* UIMAGE1D  */
+  YYSYMBOL_IMAGE2D = 214,                  /* IMAGE2D  */
+  YYSYMBOL_IIMAGE2D = 215,                 /* IIMAGE2D  */
+  YYSYMBOL_UIMAGE2D = 216,                 /* UIMAGE2D  */
+  YYSYMBOL_IMAGE3D = 217,                  /* IMAGE3D  */
+  YYSYMBOL_IIMAGE3D = 218,                 /* IIMAGE3D  */
+  YYSYMBOL_UIMAGE3D = 219,                 /* UIMAGE3D  */
+  YYSYMBOL_IMAGE2DRECT = 220,              /* IMAGE2DRECT  */
+  YYSYMBOL_IIMAGE2DRECT = 221,             /* IIMAGE2DRECT  */
+  YYSYMBOL_UIMAGE2DRECT = 222,             /* UIMAGE2DRECT  */
+  YYSYMBOL_IMAGECUBE = 223,                /* IMAGECUBE  */
+  YYSYMBOL_IIMAGECUBE = 224,               /* IIMAGECUBE  */
+  YYSYMBOL_UIMAGECUBE = 225,               /* UIMAGECUBE  */
+  YYSYMBOL_IMAGEBUFFER = 226,              /* IMAGEBUFFER  */
+  YYSYMBOL_IIMAGEBUFFER = 227,             /* IIMAGEBUFFER  */
+  YYSYMBOL_UIMAGEBUFFER = 228,             /* UIMAGEBUFFER  */
+  YYSYMBOL_IMAGE1DARRAY = 229,             /* IMAGE1DARRAY  */
+  YYSYMBOL_IIMAGE1DARRAY = 230,            /* IIMAGE1DARRAY  */
+  YYSYMBOL_UIMAGE1DARRAY = 231,            /* UIMAGE1DARRAY  */
+  YYSYMBOL_IMAGE2DARRAY = 232,             /* IMAGE2DARRAY  */
+  YYSYMBOL_IIMAGE2DARRAY = 233,            /* IIMAGE2DARRAY  */
+  YYSYMBOL_UIMAGE2DARRAY = 234,            /* UIMAGE2DARRAY  */
+  YYSYMBOL_IMAGECUBEARRAY = 235,           /* IMAGECUBEARRAY  */
+  YYSYMBOL_IIMAGECUBEARRAY = 236,          /* IIMAGECUBEARRAY  */
+  YYSYMBOL_UIMAGECUBEARRAY = 237,          /* UIMAGECUBEARRAY  */
+  YYSYMBOL_IMAGE2DMS = 238,                /* IMAGE2DMS  */
+  YYSYMBOL_IIMAGE2DMS = 239,               /* IIMAGE2DMS  */
+  YYSYMBOL_UIMAGE2DMS = 240,               /* UIMAGE2DMS  */
+  YYSYMBOL_IMAGE2DMSARRAY = 241,           /* IMAGE2DMSARRAY  */
+  YYSYMBOL_IIMAGE2DMSARRAY = 242,          /* IIMAGE2DMSARRAY  */
+  YYSYMBOL_UIMAGE2DMSARRAY = 243,          /* UIMAGE2DMSARRAY  */
+  YYSYMBOL_F16IMAGE1D = 244,               /* F16IMAGE1D  */
+  YYSYMBOL_F16IMAGE2D = 245,               /* F16IMAGE2D  */
+  YYSYMBOL_F16IMAGE3D = 246,               /* F16IMAGE3D  */
+  YYSYMBOL_F16IMAGE2DRECT = 247,           /* F16IMAGE2DRECT  */
+  YYSYMBOL_F16IMAGECUBE = 248,             /* F16IMAGECUBE  */
+  YYSYMBOL_F16IMAGE1DARRAY = 249,          /* F16IMAGE1DARRAY  */
+  YYSYMBOL_F16IMAGE2DARRAY = 250,          /* F16IMAGE2DARRAY  */
+  YYSYMBOL_F16IMAGECUBEARRAY = 251,        /* F16IMAGECUBEARRAY  */
+  YYSYMBOL_F16IMAGEBUFFER = 252,           /* F16IMAGEBUFFER  */
+  YYSYMBOL_F16IMAGE2DMS = 253,             /* F16IMAGE2DMS  */
+  YYSYMBOL_F16IMAGE2DMSARRAY = 254,        /* F16IMAGE2DMSARRAY  */
+  YYSYMBOL_I64IMAGE1D = 255,               /* I64IMAGE1D  */
+  YYSYMBOL_U64IMAGE1D = 256,               /* U64IMAGE1D  */
+  YYSYMBOL_I64IMAGE2D = 257,               /* I64IMAGE2D  */
+  YYSYMBOL_U64IMAGE2D = 258,               /* U64IMAGE2D  */
+  YYSYMBOL_I64IMAGE3D = 259,               /* I64IMAGE3D  */
+  YYSYMBOL_U64IMAGE3D = 260,               /* U64IMAGE3D  */
+  YYSYMBOL_I64IMAGE2DRECT = 261,           /* I64IMAGE2DRECT  */
+  YYSYMBOL_U64IMAGE2DRECT = 262,           /* U64IMAGE2DRECT  */
+  YYSYMBOL_I64IMAGECUBE = 263,             /* I64IMAGECUBE  */
+  YYSYMBOL_U64IMAGECUBE = 264,             /* U64IMAGECUBE  */
+  YYSYMBOL_I64IMAGEBUFFER = 265,           /* I64IMAGEBUFFER  */
+  YYSYMBOL_U64IMAGEBUFFER = 266,           /* U64IMAGEBUFFER  */
+  YYSYMBOL_I64IMAGE1DARRAY = 267,          /* I64IMAGE1DARRAY  */
+  YYSYMBOL_U64IMAGE1DARRAY = 268,          /* U64IMAGE1DARRAY  */
+  YYSYMBOL_I64IMAGE2DARRAY = 269,          /* I64IMAGE2DARRAY  */
+  YYSYMBOL_U64IMAGE2DARRAY = 270,          /* U64IMAGE2DARRAY  */
+  YYSYMBOL_I64IMAGECUBEARRAY = 271,        /* I64IMAGECUBEARRAY  */
+  YYSYMBOL_U64IMAGECUBEARRAY = 272,        /* U64IMAGECUBEARRAY  */
+  YYSYMBOL_I64IMAGE2DMS = 273,             /* I64IMAGE2DMS  */
+  YYSYMBOL_U64IMAGE2DMS = 274,             /* U64IMAGE2DMS  */
+  YYSYMBOL_I64IMAGE2DMSARRAY = 275,        /* I64IMAGE2DMSARRAY  */
+  YYSYMBOL_U64IMAGE2DMSARRAY = 276,        /* U64IMAGE2DMSARRAY  */
+  YYSYMBOL_TEXTURECUBEARRAY = 277,         /* TEXTURECUBEARRAY  */
+  YYSYMBOL_ITEXTURECUBEARRAY = 278,        /* ITEXTURECUBEARRAY  */
+  YYSYMBOL_UTEXTURECUBEARRAY = 279,        /* UTEXTURECUBEARRAY  */
+  YYSYMBOL_TEXTURE1D = 280,                /* TEXTURE1D  */
+  YYSYMBOL_ITEXTURE1D = 281,               /* ITEXTURE1D  */
+  YYSYMBOL_UTEXTURE1D = 282,               /* UTEXTURE1D  */
+  YYSYMBOL_TEXTURE1DARRAY = 283,           /* TEXTURE1DARRAY  */
+  YYSYMBOL_ITEXTURE1DARRAY = 284,          /* ITEXTURE1DARRAY  */
+  YYSYMBOL_UTEXTURE1DARRAY = 285,          /* UTEXTURE1DARRAY  */
+  YYSYMBOL_TEXTURE2DRECT = 286,            /* TEXTURE2DRECT  */
+  YYSYMBOL_ITEXTURE2DRECT = 287,           /* ITEXTURE2DRECT  */
+  YYSYMBOL_UTEXTURE2DRECT = 288,           /* UTEXTURE2DRECT  */
+  YYSYMBOL_TEXTUREBUFFER = 289,            /* TEXTUREBUFFER  */
+  YYSYMBOL_ITEXTUREBUFFER = 290,           /* ITEXTUREBUFFER  */
+  YYSYMBOL_UTEXTUREBUFFER = 291,           /* UTEXTUREBUFFER  */
+  YYSYMBOL_TEXTURE2DMS = 292,              /* TEXTURE2DMS  */
+  YYSYMBOL_ITEXTURE2DMS = 293,             /* ITEXTURE2DMS  */
+  YYSYMBOL_UTEXTURE2DMS = 294,             /* UTEXTURE2DMS  */
+  YYSYMBOL_TEXTURE2DMSARRAY = 295,         /* TEXTURE2DMSARRAY  */
+  YYSYMBOL_ITEXTURE2DMSARRAY = 296,        /* ITEXTURE2DMSARRAY  */
+  YYSYMBOL_UTEXTURE2DMSARRAY = 297,        /* UTEXTURE2DMSARRAY  */
+  YYSYMBOL_F16TEXTURE1D = 298,             /* F16TEXTURE1D  */
+  YYSYMBOL_F16TEXTURE2D = 299,             /* F16TEXTURE2D  */
+  YYSYMBOL_F16TEXTURE3D = 300,             /* F16TEXTURE3D  */
+  YYSYMBOL_F16TEXTURE2DRECT = 301,         /* F16TEXTURE2DRECT  */
+  YYSYMBOL_F16TEXTURECUBE = 302,           /* F16TEXTURECUBE  */
+  YYSYMBOL_F16TEXTURE1DARRAY = 303,        /* F16TEXTURE1DARRAY  */
+  YYSYMBOL_F16TEXTURE2DARRAY = 304,        /* F16TEXTURE2DARRAY  */
+  YYSYMBOL_F16TEXTURECUBEARRAY = 305,      /* F16TEXTURECUBEARRAY  */
+  YYSYMBOL_F16TEXTUREBUFFER = 306,         /* F16TEXTUREBUFFER  */
+  YYSYMBOL_F16TEXTURE2DMS = 307,           /* F16TEXTURE2DMS  */
+  YYSYMBOL_F16TEXTURE2DMSARRAY = 308,      /* F16TEXTURE2DMSARRAY  */
+  YYSYMBOL_SUBPASSINPUT = 309,             /* SUBPASSINPUT  */
+  YYSYMBOL_SUBPASSINPUTMS = 310,           /* SUBPASSINPUTMS  */
+  YYSYMBOL_ISUBPASSINPUT = 311,            /* ISUBPASSINPUT  */
+  YYSYMBOL_ISUBPASSINPUTMS = 312,          /* ISUBPASSINPUTMS  */
+  YYSYMBOL_USUBPASSINPUT = 313,            /* USUBPASSINPUT  */
+  YYSYMBOL_USUBPASSINPUTMS = 314,          /* USUBPASSINPUTMS  */
+  YYSYMBOL_F16SUBPASSINPUT = 315,          /* F16SUBPASSINPUT  */
+  YYSYMBOL_F16SUBPASSINPUTMS = 316,        /* F16SUBPASSINPUTMS  */
+  YYSYMBOL_LEFT_OP = 317,                  /* LEFT_OP  */
+  YYSYMBOL_RIGHT_OP = 318,                 /* RIGHT_OP  */
+  YYSYMBOL_INC_OP = 319,                   /* INC_OP  */
+  YYSYMBOL_DEC_OP = 320,                   /* DEC_OP  */
+  YYSYMBOL_LE_OP = 321,                    /* LE_OP  */
+  YYSYMBOL_GE_OP = 322,                    /* GE_OP  */
+  YYSYMBOL_EQ_OP = 323,                    /* EQ_OP  */
+  YYSYMBOL_NE_OP = 324,                    /* NE_OP  */
+  YYSYMBOL_AND_OP = 325,                   /* AND_OP  */
+  YYSYMBOL_OR_OP = 326,                    /* OR_OP  */
+  YYSYMBOL_XOR_OP = 327,                   /* XOR_OP  */
+  YYSYMBOL_MUL_ASSIGN = 328,               /* MUL_ASSIGN  */
+  YYSYMBOL_DIV_ASSIGN = 329,               /* DIV_ASSIGN  */
+  YYSYMBOL_ADD_ASSIGN = 330,               /* ADD_ASSIGN  */
+  YYSYMBOL_MOD_ASSIGN = 331,               /* MOD_ASSIGN  */
+  YYSYMBOL_LEFT_ASSIGN = 332,              /* LEFT_ASSIGN  */
+  YYSYMBOL_RIGHT_ASSIGN = 333,             /* RIGHT_ASSIGN  */
+  YYSYMBOL_AND_ASSIGN = 334,               /* AND_ASSIGN  */
+  YYSYMBOL_XOR_ASSIGN = 335,               /* XOR_ASSIGN  */
+  YYSYMBOL_OR_ASSIGN = 336,                /* OR_ASSIGN  */
+  YYSYMBOL_SUB_ASSIGN = 337,               /* SUB_ASSIGN  */
+  YYSYMBOL_STRING_LITERAL = 338,           /* STRING_LITERAL  */
+  YYSYMBOL_LEFT_PAREN = 339,               /* LEFT_PAREN  */
+  YYSYMBOL_RIGHT_PAREN = 340,              /* RIGHT_PAREN  */
+  YYSYMBOL_LEFT_BRACKET = 341,             /* LEFT_BRACKET  */
+  YYSYMBOL_RIGHT_BRACKET = 342,            /* RIGHT_BRACKET  */
+  YYSYMBOL_LEFT_BRACE = 343,               /* LEFT_BRACE  */
+  YYSYMBOL_RIGHT_BRACE = 344,              /* RIGHT_BRACE  */
+  YYSYMBOL_DOT = 345,                      /* DOT  */
+  YYSYMBOL_COMMA = 346,                    /* COMMA  */
+  YYSYMBOL_COLON = 347,                    /* COLON  */
+  YYSYMBOL_EQUAL = 348,                    /* EQUAL  */
+  YYSYMBOL_SEMICOLON = 349,                /* SEMICOLON  */
+  YYSYMBOL_BANG = 350,                     /* BANG  */
+  YYSYMBOL_DASH = 351,                     /* DASH  */
+  YYSYMBOL_TILDE = 352,                    /* TILDE  */
+  YYSYMBOL_PLUS = 353,                     /* PLUS  */
+  YYSYMBOL_STAR = 354,                     /* STAR  */
+  YYSYMBOL_SLASH = 355,                    /* SLASH  */
+  YYSYMBOL_PERCENT = 356,                  /* PERCENT  */
+  YYSYMBOL_LEFT_ANGLE = 357,               /* LEFT_ANGLE  */
+  YYSYMBOL_RIGHT_ANGLE = 358,              /* RIGHT_ANGLE  */
+  YYSYMBOL_VERTICAL_BAR = 359,             /* VERTICAL_BAR  */
+  YYSYMBOL_CARET = 360,                    /* CARET  */
+  YYSYMBOL_AMPERSAND = 361,                /* AMPERSAND  */
+  YYSYMBOL_QUESTION = 362,                 /* QUESTION  */
+  YYSYMBOL_INVARIANT = 363,                /* INVARIANT  */
+  YYSYMBOL_HIGH_PRECISION = 364,           /* HIGH_PRECISION  */
+  YYSYMBOL_MEDIUM_PRECISION = 365,         /* MEDIUM_PRECISION  */
+  YYSYMBOL_LOW_PRECISION = 366,            /* LOW_PRECISION  */
+  YYSYMBOL_PRECISION = 367,                /* PRECISION  */
+  YYSYMBOL_PACKED = 368,                   /* PACKED  */
+  YYSYMBOL_RESOURCE = 369,                 /* RESOURCE  */
+  YYSYMBOL_SUPERP = 370,                   /* SUPERP  */
+  YYSYMBOL_FLOATCONSTANT = 371,            /* FLOATCONSTANT  */
+  YYSYMBOL_INTCONSTANT = 372,              /* INTCONSTANT  */
+  YYSYMBOL_UINTCONSTANT = 373,             /* UINTCONSTANT  */
+  YYSYMBOL_BOOLCONSTANT = 374,             /* BOOLCONSTANT  */
+  YYSYMBOL_IDENTIFIER = 375,               /* IDENTIFIER  */
+  YYSYMBOL_TYPE_NAME = 376,                /* TYPE_NAME  */
+  YYSYMBOL_CENTROID = 377,                 /* CENTROID  */
+  YYSYMBOL_IN = 378,                       /* IN  */
+  YYSYMBOL_OUT = 379,                      /* OUT  */
+  YYSYMBOL_INOUT = 380,                    /* INOUT  */
+  YYSYMBOL_STRUCT = 381,                   /* STRUCT  */
+  YYSYMBOL_VOID = 382,                     /* VOID  */
+  YYSYMBOL_WHILE = 383,                    /* WHILE  */
+  YYSYMBOL_BREAK = 384,                    /* BREAK  */
+  YYSYMBOL_CONTINUE = 385,                 /* CONTINUE  */
+  YYSYMBOL_DO = 386,                       /* DO  */
+  YYSYMBOL_ELSE = 387,                     /* ELSE  */
+  YYSYMBOL_FOR = 388,                      /* FOR  */
+  YYSYMBOL_IF = 389,                       /* IF  */
+  YYSYMBOL_DISCARD = 390,                  /* DISCARD  */
+  YYSYMBOL_RETURN = 391,                   /* RETURN  */
+  YYSYMBOL_SWITCH = 392,                   /* SWITCH  */
+  YYSYMBOL_CASE = 393,                     /* CASE  */
+  YYSYMBOL_DEFAULT = 394,                  /* DEFAULT  */
+  YYSYMBOL_TERMINATE_INVOCATION = 395,     /* TERMINATE_INVOCATION  */
+  YYSYMBOL_TERMINATE_RAY = 396,            /* TERMINATE_RAY  */
+  YYSYMBOL_IGNORE_INTERSECTION = 397,      /* IGNORE_INTERSECTION  */
+  YYSYMBOL_UNIFORM = 398,                  /* UNIFORM  */
+  YYSYMBOL_SHARED = 399,                   /* SHARED  */
+  YYSYMBOL_BUFFER = 400,                   /* BUFFER  */
+  YYSYMBOL_FLAT = 401,                     /* FLAT  */
+  YYSYMBOL_SMOOTH = 402,                   /* SMOOTH  */
+  YYSYMBOL_LAYOUT = 403,                   /* LAYOUT  */
+  YYSYMBOL_DOUBLECONSTANT = 404,           /* DOUBLECONSTANT  */
+  YYSYMBOL_INT16CONSTANT = 405,            /* INT16CONSTANT  */
+  YYSYMBOL_UINT16CONSTANT = 406,           /* UINT16CONSTANT  */
+  YYSYMBOL_FLOAT16CONSTANT = 407,          /* FLOAT16CONSTANT  */
+  YYSYMBOL_INT32CONSTANT = 408,            /* INT32CONSTANT  */
+  YYSYMBOL_UINT32CONSTANT = 409,           /* UINT32CONSTANT  */
+  YYSYMBOL_INT64CONSTANT = 410,            /* INT64CONSTANT  */
+  YYSYMBOL_UINT64CONSTANT = 411,           /* UINT64CONSTANT  */
+  YYSYMBOL_SUBROUTINE = 412,               /* SUBROUTINE  */
+  YYSYMBOL_DEMOTE = 413,                   /* DEMOTE  */
+  YYSYMBOL_PAYLOADNV = 414,                /* PAYLOADNV  */
+  YYSYMBOL_PAYLOADINNV = 415,              /* PAYLOADINNV  */
+  YYSYMBOL_HITATTRNV = 416,                /* HITATTRNV  */
+  YYSYMBOL_CALLDATANV = 417,               /* CALLDATANV  */
+  YYSYMBOL_CALLDATAINNV = 418,             /* CALLDATAINNV  */
+  YYSYMBOL_PAYLOADEXT = 419,               /* PAYLOADEXT  */
+  YYSYMBOL_PAYLOADINEXT = 420,             /* PAYLOADINEXT  */
+  YYSYMBOL_HITATTREXT = 421,               /* HITATTREXT  */
+  YYSYMBOL_CALLDATAEXT = 422,              /* CALLDATAEXT  */
+  YYSYMBOL_CALLDATAINEXT = 423,            /* CALLDATAINEXT  */
+  YYSYMBOL_PATCH = 424,                    /* PATCH  */
+  YYSYMBOL_SAMPLE = 425,                   /* SAMPLE  */
+  YYSYMBOL_NONUNIFORM = 426,               /* NONUNIFORM  */
+  YYSYMBOL_COHERENT = 427,                 /* COHERENT  */
+  YYSYMBOL_VOLATILE = 428,                 /* VOLATILE  */
+  YYSYMBOL_RESTRICT = 429,                 /* RESTRICT  */
+  YYSYMBOL_READONLY = 430,                 /* READONLY  */
+  YYSYMBOL_WRITEONLY = 431,                /* WRITEONLY  */
+  YYSYMBOL_DEVICECOHERENT = 432,           /* DEVICECOHERENT  */
+  YYSYMBOL_QUEUEFAMILYCOHERENT = 433,      /* QUEUEFAMILYCOHERENT  */
+  YYSYMBOL_WORKGROUPCOHERENT = 434,        /* WORKGROUPCOHERENT  */
+  YYSYMBOL_SUBGROUPCOHERENT = 435,         /* SUBGROUPCOHERENT  */
+  YYSYMBOL_NONPRIVATE = 436,               /* NONPRIVATE  */
+  YYSYMBOL_SHADERCALLCOHERENT = 437,       /* SHADERCALLCOHERENT  */
+  YYSYMBOL_NOPERSPECTIVE = 438,            /* NOPERSPECTIVE  */
+  YYSYMBOL_EXPLICITINTERPAMD = 439,        /* EXPLICITINTERPAMD  */
+  YYSYMBOL_PERVERTEXNV = 440,              /* PERVERTEXNV  */
+  YYSYMBOL_PERPRIMITIVENV = 441,           /* PERPRIMITIVENV  */
+  YYSYMBOL_PERVIEWNV = 442,                /* PERVIEWNV  */
+  YYSYMBOL_PERTASKNV = 443,                /* PERTASKNV  */
+  YYSYMBOL_PRECISE = 444,                  /* PRECISE  */
+  YYSYMBOL_YYACCEPT = 445,                 /* $accept  */
+  YYSYMBOL_variable_identifier = 446,      /* variable_identifier  */
+  YYSYMBOL_primary_expression = 447,       /* primary_expression  */
+  YYSYMBOL_postfix_expression = 448,       /* postfix_expression  */
+  YYSYMBOL_integer_expression = 449,       /* integer_expression  */
+  YYSYMBOL_function_call = 450,            /* function_call  */
+  YYSYMBOL_function_call_or_method = 451,  /* function_call_or_method  */
+  YYSYMBOL_function_call_generic = 452,    /* function_call_generic  */
+  YYSYMBOL_function_call_header_no_parameters = 453, /* function_call_header_no_parameters  */
+  YYSYMBOL_function_call_header_with_parameters = 454, /* function_call_header_with_parameters  */
+  YYSYMBOL_function_call_header = 455,     /* function_call_header  */
+  YYSYMBOL_function_identifier = 456,      /* function_identifier  */
+  YYSYMBOL_unary_expression = 457,         /* unary_expression  */
+  YYSYMBOL_unary_operator = 458,           /* unary_operator  */
+  YYSYMBOL_multiplicative_expression = 459, /* multiplicative_expression  */
+  YYSYMBOL_additive_expression = 460,      /* additive_expression  */
+  YYSYMBOL_shift_expression = 461,         /* shift_expression  */
+  YYSYMBOL_relational_expression = 462,    /* relational_expression  */
+  YYSYMBOL_equality_expression = 463,      /* equality_expression  */
+  YYSYMBOL_and_expression = 464,           /* and_expression  */
+  YYSYMBOL_exclusive_or_expression = 465,  /* exclusive_or_expression  */
+  YYSYMBOL_inclusive_or_expression = 466,  /* inclusive_or_expression  */
+  YYSYMBOL_logical_and_expression = 467,   /* logical_and_expression  */
+  YYSYMBOL_logical_xor_expression = 468,   /* logical_xor_expression  */
+  YYSYMBOL_logical_or_expression = 469,    /* logical_or_expression  */
+  YYSYMBOL_conditional_expression = 470,   /* conditional_expression  */
+  YYSYMBOL_471_1 = 471,                    /* $@1  */
+  YYSYMBOL_assignment_expression = 472,    /* assignment_expression  */
+  YYSYMBOL_assignment_operator = 473,      /* assignment_operator  */
+  YYSYMBOL_expression = 474,               /* expression  */
+  YYSYMBOL_constant_expression = 475,      /* constant_expression  */
+  YYSYMBOL_declaration = 476,              /* declaration  */
+  YYSYMBOL_block_structure = 477,          /* block_structure  */
+  YYSYMBOL_478_2 = 478,                    /* $@2  */
+  YYSYMBOL_identifier_list = 479,          /* identifier_list  */
+  YYSYMBOL_function_prototype = 480,       /* function_prototype  */
+  YYSYMBOL_function_declarator = 481,      /* function_declarator  */
+  YYSYMBOL_function_header_with_parameters = 482, /* function_header_with_parameters  */
+  YYSYMBOL_function_header = 483,          /* function_header  */
+  YYSYMBOL_parameter_declarator = 484,     /* parameter_declarator  */
+  YYSYMBOL_parameter_declaration = 485,    /* parameter_declaration  */
+  YYSYMBOL_parameter_type_specifier = 486, /* parameter_type_specifier  */
+  YYSYMBOL_init_declarator_list = 487,     /* init_declarator_list  */
+  YYSYMBOL_single_declaration = 488,       /* single_declaration  */
+  YYSYMBOL_fully_specified_type = 489,     /* fully_specified_type  */
+  YYSYMBOL_invariant_qualifier = 490,      /* invariant_qualifier  */
+  YYSYMBOL_interpolation_qualifier = 491,  /* interpolation_qualifier  */
+  YYSYMBOL_layout_qualifier = 492,         /* layout_qualifier  */
+  YYSYMBOL_layout_qualifier_id_list = 493, /* layout_qualifier_id_list  */
+  YYSYMBOL_layout_qualifier_id = 494,      /* layout_qualifier_id  */
+  YYSYMBOL_precise_qualifier = 495,        /* precise_qualifier  */
+  YYSYMBOL_type_qualifier = 496,           /* type_qualifier  */
+  YYSYMBOL_single_type_qualifier = 497,    /* single_type_qualifier  */
+  YYSYMBOL_storage_qualifier = 498,        /* storage_qualifier  */
+  YYSYMBOL_non_uniform_qualifier = 499,    /* non_uniform_qualifier  */
+  YYSYMBOL_type_name_list = 500,           /* type_name_list  */
+  YYSYMBOL_type_specifier = 501,           /* type_specifier  */
+  YYSYMBOL_array_specifier = 502,          /* array_specifier  */
+  YYSYMBOL_type_parameter_specifier_opt = 503, /* type_parameter_specifier_opt  */
+  YYSYMBOL_type_parameter_specifier = 504, /* type_parameter_specifier  */
+  YYSYMBOL_type_parameter_specifier_list = 505, /* type_parameter_specifier_list  */
+  YYSYMBOL_type_specifier_nonarray = 506,  /* type_specifier_nonarray  */
+  YYSYMBOL_precision_qualifier = 507,      /* precision_qualifier  */
+  YYSYMBOL_struct_specifier = 508,         /* struct_specifier  */
+  YYSYMBOL_509_3 = 509,                    /* $@3  */
+  YYSYMBOL_510_4 = 510,                    /* $@4  */
+  YYSYMBOL_struct_declaration_list = 511,  /* struct_declaration_list  */
+  YYSYMBOL_struct_declaration = 512,       /* struct_declaration  */
+  YYSYMBOL_struct_declarator_list = 513,   /* struct_declarator_list  */
+  YYSYMBOL_struct_declarator = 514,        /* struct_declarator  */
+  YYSYMBOL_initializer = 515,              /* initializer  */
+  YYSYMBOL_initializer_list = 516,         /* initializer_list  */
+  YYSYMBOL_declaration_statement = 517,    /* declaration_statement  */
+  YYSYMBOL_statement = 518,                /* statement  */
+  YYSYMBOL_simple_statement = 519,         /* simple_statement  */
+  YYSYMBOL_demote_statement = 520,         /* demote_statement  */
+  YYSYMBOL_compound_statement = 521,       /* compound_statement  */
+  YYSYMBOL_522_5 = 522,                    /* $@5  */
+  YYSYMBOL_523_6 = 523,                    /* $@6  */
+  YYSYMBOL_statement_no_new_scope = 524,   /* statement_no_new_scope  */
+  YYSYMBOL_statement_scoped = 525,         /* statement_scoped  */
+  YYSYMBOL_526_7 = 526,                    /* $@7  */
+  YYSYMBOL_527_8 = 527,                    /* $@8  */
+  YYSYMBOL_compound_statement_no_new_scope = 528, /* compound_statement_no_new_scope  */
+  YYSYMBOL_statement_list = 529,           /* statement_list  */
+  YYSYMBOL_expression_statement = 530,     /* expression_statement  */
+  YYSYMBOL_selection_statement = 531,      /* selection_statement  */
+  YYSYMBOL_selection_statement_nonattributed = 532, /* selection_statement_nonattributed  */
+  YYSYMBOL_selection_rest_statement = 533, /* selection_rest_statement  */
+  YYSYMBOL_condition = 534,                /* condition  */
+  YYSYMBOL_switch_statement = 535,         /* switch_statement  */
+  YYSYMBOL_switch_statement_nonattributed = 536, /* switch_statement_nonattributed  */
+  YYSYMBOL_537_9 = 537,                    /* $@9  */
+  YYSYMBOL_switch_statement_list = 538,    /* switch_statement_list  */
+  YYSYMBOL_case_label = 539,               /* case_label  */
+  YYSYMBOL_iteration_statement = 540,      /* iteration_statement  */
+  YYSYMBOL_iteration_statement_nonattributed = 541, /* iteration_statement_nonattributed  */
+  YYSYMBOL_542_10 = 542,                   /* $@10  */
+  YYSYMBOL_543_11 = 543,                   /* $@11  */
+  YYSYMBOL_544_12 = 544,                   /* $@12  */
+  YYSYMBOL_for_init_statement = 545,       /* for_init_statement  */
+  YYSYMBOL_conditionopt = 546,             /* conditionopt  */
+  YYSYMBOL_for_rest_statement = 547,       /* for_rest_statement  */
+  YYSYMBOL_jump_statement = 548,           /* jump_statement  */
+  YYSYMBOL_translation_unit = 549,         /* translation_unit  */
+  YYSYMBOL_external_declaration = 550,     /* external_declaration  */
+  YYSYMBOL_function_definition = 551,      /* function_definition  */
+  YYSYMBOL_552_13 = 552,                   /* $@13  */
+  YYSYMBOL_attribute = 553,                /* attribute  */
+  YYSYMBOL_attribute_list = 554,           /* attribute_list  */
+  YYSYMBOL_single_attribute = 555          /* single_attribute  */
 };
-
-typedef union YYSTYPE YYSTYPE;
-# define YYSTYPE_IS_TRIVIAL 1
-# define YYSTYPE_IS_DECLARED 1
-#endif
+typedef enum yysymbol_kind_t yysymbol_kind_t;
 
 
-
-int yyparse (glslang::TParseContext* pParseContext);
-
-#endif /* !YY_YY_MACHINEINDEPENDENT_GLSLANG_TAB_CPP_H_INCLUDED  */
-
-/* Copy the second part of user declarations.  */
-#line 133 "MachineIndependent/glslang.y" /* yacc.c:358  */
+/* Second part of user prologue.  */
+#line 133 "MachineIndependent/glslang.y"
 
 
 /* windows only pragma */
@@ -615,34 +698,82 @@
 extern int yylex(YYSTYPE*, TParseContext&);
 
 
-#line 619 "MachineIndependent/glslang_tab.cpp" /* yacc.c:358  */
+#line 702 "MachineIndependent/glslang_tab.cpp"
+
 
 #ifdef short
 # undef short
 #endif
 
-#ifdef YYTYPE_UINT8
-typedef YYTYPE_UINT8 yytype_uint8;
-#else
-typedef unsigned char yytype_uint8;
+/* On compilers that do not define __PTRDIFF_MAX__ etc., make sure
+   <limits.h> and (if available) <stdint.h> are included
+   so that the code can choose integer types of a good width.  */
+
+#ifndef __PTRDIFF_MAX__
+# include <limits.h> /* INFRINGES ON USER NAME SPACE */
+# if defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__
+#  include <stdint.h> /* INFRINGES ON USER NAME SPACE */
+#  define YY_STDINT_H
+# endif
 #endif
 
-#ifdef YYTYPE_INT8
-typedef YYTYPE_INT8 yytype_int8;
+/* Narrow types that promote to a signed type and that can represent a
+   signed or unsigned integer of at least N bits.  In tables they can
+   save space and decrease cache pressure.  Promoting to a signed type
+   helps avoid bugs in integer arithmetic.  */
+
+#ifdef __INT_LEAST8_MAX__
+typedef __INT_LEAST8_TYPE__ yytype_int8;
+#elif defined YY_STDINT_H
+typedef int_least8_t yytype_int8;
 #else
 typedef signed char yytype_int8;
 #endif
 
-#ifdef YYTYPE_UINT16
-typedef YYTYPE_UINT16 yytype_uint16;
+#ifdef __INT_LEAST16_MAX__
+typedef __INT_LEAST16_TYPE__ yytype_int16;
+#elif defined YY_STDINT_H
+typedef int_least16_t yytype_int16;
 #else
-typedef unsigned short int yytype_uint16;
+typedef short yytype_int16;
 #endif
 
-#ifdef YYTYPE_INT16
-typedef YYTYPE_INT16 yytype_int16;
+#if defined __UINT_LEAST8_MAX__ && __UINT_LEAST8_MAX__ <= __INT_MAX__
+typedef __UINT_LEAST8_TYPE__ yytype_uint8;
+#elif (!defined __UINT_LEAST8_MAX__ && defined YY_STDINT_H \
+       && UINT_LEAST8_MAX <= INT_MAX)
+typedef uint_least8_t yytype_uint8;
+#elif !defined __UINT_LEAST8_MAX__ && UCHAR_MAX <= INT_MAX
+typedef unsigned char yytype_uint8;
 #else
-typedef short int yytype_int16;
+typedef short yytype_uint8;
+#endif
+
+#if defined __UINT_LEAST16_MAX__ && __UINT_LEAST16_MAX__ <= __INT_MAX__
+typedef __UINT_LEAST16_TYPE__ yytype_uint16;
+#elif (!defined __UINT_LEAST16_MAX__ && defined YY_STDINT_H \
+       && UINT_LEAST16_MAX <= INT_MAX)
+typedef uint_least16_t yytype_uint16;
+#elif !defined __UINT_LEAST16_MAX__ && USHRT_MAX <= INT_MAX
+typedef unsigned short yytype_uint16;
+#else
+typedef int yytype_uint16;
+#endif
+
+#ifndef YYPTRDIFF_T
+# if defined __PTRDIFF_TYPE__ && defined __PTRDIFF_MAX__
+#  define YYPTRDIFF_T __PTRDIFF_TYPE__
+#  define YYPTRDIFF_MAXIMUM __PTRDIFF_MAX__
+# elif defined PTRDIFF_MAX
+#  ifndef ptrdiff_t
+#   include <stddef.h> /* INFRINGES ON USER NAME SPACE */
+#  endif
+#  define YYPTRDIFF_T ptrdiff_t
+#  define YYPTRDIFF_MAXIMUM PTRDIFF_MAX
+# else
+#  define YYPTRDIFF_T long
+#  define YYPTRDIFF_MAXIMUM LONG_MAX
+# endif
 #endif
 
 #ifndef YYSIZE_T
@@ -650,15 +781,28 @@
 #  define YYSIZE_T __SIZE_TYPE__
 # elif defined size_t
 #  define YYSIZE_T size_t
-# elif ! defined YYSIZE_T
+# elif defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__
 #  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
 #  define YYSIZE_T size_t
 # else
-#  define YYSIZE_T unsigned int
+#  define YYSIZE_T unsigned
 # endif
 #endif
 
-#define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
+#define YYSIZE_MAXIMUM                                  \
+  YY_CAST (YYPTRDIFF_T,                                 \
+           (YYPTRDIFF_MAXIMUM < YY_CAST (YYSIZE_T, -1)  \
+            ? YYPTRDIFF_MAXIMUM                         \
+            : YY_CAST (YYSIZE_T, -1)))
+
+#define YYSIZEOF(X) YY_CAST (YYPTRDIFF_T, sizeof (X))
+
+
+/* Stored state numbers (used for stacks). */
+typedef yytype_int16 yy_state_t;
+
+/* State numbers in computations.  */
+typedef int yy_state_fast_t;
 
 #ifndef YY_
 # if defined YYENABLE_NLS && YYENABLE_NLS
@@ -672,30 +816,20 @@
 # endif
 #endif
 
-#ifndef YY_ATTRIBUTE
-# if (defined __GNUC__                                               \
-      && (2 < __GNUC__ || (__GNUC__ == 2 && 96 <= __GNUC_MINOR__)))  \
-     || defined __SUNPRO_C && 0x5110 <= __SUNPRO_C
-#  define YY_ATTRIBUTE(Spec) __attribute__(Spec)
+
+#ifndef YY_ATTRIBUTE_PURE
+# if defined __GNUC__ && 2 < __GNUC__ + (96 <= __GNUC_MINOR__)
+#  define YY_ATTRIBUTE_PURE __attribute__ ((__pure__))
 # else
-#  define YY_ATTRIBUTE(Spec) /* empty */
+#  define YY_ATTRIBUTE_PURE
 # endif
 #endif
 
-#ifndef YY_ATTRIBUTE_PURE
-# define YY_ATTRIBUTE_PURE   YY_ATTRIBUTE ((__pure__))
-#endif
-
 #ifndef YY_ATTRIBUTE_UNUSED
-# define YY_ATTRIBUTE_UNUSED YY_ATTRIBUTE ((__unused__))
-#endif
-
-#if !defined _Noreturn \
-     && (!defined __STDC_VERSION__ || __STDC_VERSION__ < 201112)
-# if defined _MSC_VER && 1200 <= _MSC_VER
-#  define _Noreturn __declspec (noreturn)
+# if defined __GNUC__ && 2 < __GNUC__ + (7 <= __GNUC_MINOR__)
+#  define YY_ATTRIBUTE_UNUSED __attribute__ ((__unused__))
 # else
-#  define _Noreturn YY_ATTRIBUTE ((__noreturn__))
+#  define YY_ATTRIBUTE_UNUSED
 # endif
 #endif
 
@@ -706,13 +840,13 @@
 # define YYUSE(E) /* empty */
 #endif
 
-#if defined __GNUC__ && 407 <= __GNUC__ * 100 + __GNUC_MINOR__
+#if defined __GNUC__ && ! defined __ICC && 407 <= __GNUC__ * 100 + __GNUC_MINOR__
 /* Suppress an incorrect diagnostic about yylval being uninitialized.  */
-# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
-    _Pragma ("GCC diagnostic push") \
-    _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\
+# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN                            \
+    _Pragma ("GCC diagnostic push")                                     \
+    _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")              \
     _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"")
-# define YY_IGNORE_MAYBE_UNINITIALIZED_END \
+# define YY_IGNORE_MAYBE_UNINITIALIZED_END      \
     _Pragma ("GCC diagnostic pop")
 #else
 # define YY_INITIAL_VALUE(Value) Value
@@ -725,8 +859,22 @@
 # define YY_INITIAL_VALUE(Value) /* Nothing. */
 #endif
 
+#if defined __cplusplus && defined __GNUC__ && ! defined __ICC && 6 <= __GNUC__
+# define YY_IGNORE_USELESS_CAST_BEGIN                          \
+    _Pragma ("GCC diagnostic push")                            \
+    _Pragma ("GCC diagnostic ignored \"-Wuseless-cast\"")
+# define YY_IGNORE_USELESS_CAST_END            \
+    _Pragma ("GCC diagnostic pop")
+#endif
+#ifndef YY_IGNORE_USELESS_CAST_BEGIN
+# define YY_IGNORE_USELESS_CAST_BEGIN
+# define YY_IGNORE_USELESS_CAST_END
+#endif
 
-#if ! defined yyoverflow || YYERROR_VERBOSE
+
+#define YY_ASSERT(E) ((void) (0 && (E)))
+
+#if 1
 
 /* The parser invokes alloca or malloc; define the necessary symbols.  */
 
@@ -791,8 +939,7 @@
 #   endif
 #  endif
 # endif
-#endif /* ! defined yyoverflow || YYERROR_VERBOSE */
-
+#endif /* 1 */
 
 #if (! defined yyoverflow \
      && (! defined __cplusplus \
@@ -801,17 +948,17 @@
 /* A type that is properly aligned for any stack member.  */
 union yyalloc
 {
-  yytype_int16 yyss_alloc;
+  yy_state_t yyss_alloc;
   YYSTYPE yyvs_alloc;
 };
 
 /* The size of the maximum gap between one aligned stack and the next.  */
-# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
+# define YYSTACK_GAP_MAXIMUM (YYSIZEOF (union yyalloc) - 1)
 
 /* The size of an array large to enough to hold all stacks, each with
    N elements.  */
 # define YYSTACK_BYTES(N) \
-     ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
+     ((N) * (YYSIZEOF (yy_state_t) + YYSIZEOF (YYSTYPE)) \
       + YYSTACK_GAP_MAXIMUM)
 
 # define YYCOPY_NEEDED 1
@@ -824,11 +971,11 @@
 # define YYSTACK_RELOCATE(Stack_alloc, Stack)                           \
     do                                                                  \
       {                                                                 \
-        YYSIZE_T yynewbytes;                                            \
+        YYPTRDIFF_T yynewbytes;                                         \
         YYCOPY (&yyptr->Stack_alloc, Stack, yysize);                    \
         Stack = &yyptr->Stack_alloc;                                    \
-        yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
-        yyptr += yynewbytes / sizeof (*yyptr);                          \
+        yynewbytes = yystacksize * YYSIZEOF (*Stack) + YYSTACK_GAP_MAXIMUM; \
+        yyptr += yynewbytes / YYSIZEOF (*yyptr);                        \
       }                                                                 \
     while (0)
 
@@ -840,12 +987,12 @@
 # ifndef YYCOPY
 #  if defined __GNUC__ && 1 < __GNUC__
 #   define YYCOPY(Dst, Src, Count) \
-      __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src)))
+      __builtin_memcpy (Dst, Src, YY_CAST (YYSIZE_T, (Count)) * sizeof (*(Src)))
 #  else
 #   define YYCOPY(Dst, Src, Count)              \
       do                                        \
         {                                       \
-          YYSIZE_T yyi;                         \
+          YYPTRDIFF_T yyi;                      \
           for (yyi = 0; yyi < (Count); yyi++)   \
             (Dst)[yyi] = (Src)[yyi];            \
         }                                       \
@@ -855,30 +1002,33 @@
 #endif /* !YYCOPY_NEEDED */
 
 /* YYFINAL -- State number of the termination state.  */
-#define YYFINAL  394
+#define YYFINAL  416
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   9550
+#define YYLAST   10112
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  420
+#define YYNTOKENS  445
 /* YYNNTS -- Number of nonterminals.  */
 #define YYNNTS  111
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  591
+#define YYNRULES  616
 /* YYNSTATES -- Number of states.  */
-#define YYNSTATES  736
+#define YYNSTATES  764
 
-/* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
-   by yylex, with out-of-bounds checking.  */
-#define YYUNDEFTOK  2
-#define YYMAXUTOK   674
+/* YYMAXUTOK -- Last valid token kind.  */
+#define YYMAXUTOK   699
 
-#define YYTRANSLATE(YYX)                                                \
-  ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
+
+/* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM
+   as returned by yylex, with out-of-bounds checking.  */
+#define YYTRANSLATE(YYX)                                \
+  (0 <= (YYX) && (YYX) <= YYMAXUTOK                     \
+   ? YY_CAST (yysymbol_kind_t, yytranslate[YYX])        \
+   : YYSYMBOL_YYUNDEF)
 
 /* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM
-   as returned by yylex, without out-of-bounds checking.  */
-static const yytype_uint16 yytranslate[] =
+   as returned by yylex.  */
+static const yytype_int16 yytranslate[] =
 {
        0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
@@ -947,120 +1097,131 @@
      385,   386,   387,   388,   389,   390,   391,   392,   393,   394,
      395,   396,   397,   398,   399,   400,   401,   402,   403,   404,
      405,   406,   407,   408,   409,   410,   411,   412,   413,   414,
-     415,   416,   417,   418,   419
+     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
 };
 
 #if YYDEBUG
   /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
-static const yytype_uint16 yyrline[] =
+static const yytype_int16 yyrline[] =
 {
-       0,   357,   357,   363,   366,   371,   374,   377,   381,   385,
-     388,   392,   396,   400,   404,   408,   412,   418,   426,   429,
-     432,   435,   438,   443,   451,   458,   465,   471,   475,   482,
-     485,   491,   498,   508,   516,   521,   549,   558,   564,   568,
-     572,   592,   593,   594,   595,   601,   602,   607,   612,   621,
-     622,   627,   635,   636,   642,   651,   652,   657,   662,   667,
-     675,   676,   685,   697,   698,   707,   708,   717,   718,   727,
-     728,   736,   737,   745,   746,   754,   755,   755,   773,   774,
-     790,   794,   798,   802,   807,   811,   815,   819,   823,   827,
-     831,   838,   841,   852,   859,   864,   869,   876,   880,   884,
-     888,   893,   898,   907,   907,   918,   922,   929,   936,   939,
-     946,   954,   974,   997,  1012,  1037,  1048,  1058,  1068,  1078,
-    1087,  1090,  1094,  1098,  1103,  1111,  1118,  1123,  1128,  1133,
-    1142,  1152,  1179,  1188,  1195,  1203,  1210,  1217,  1225,  1235,
-    1242,  1253,  1259,  1262,  1269,  1273,  1277,  1286,  1296,  1299,
-    1310,  1313,  1316,  1320,  1324,  1329,  1333,  1340,  1344,  1349,
-    1355,  1361,  1368,  1373,  1381,  1387,  1399,  1413,  1419,  1424,
-    1432,  1440,  1448,  1456,  1464,  1472,  1480,  1488,  1495,  1502,
-    1506,  1511,  1516,  1521,  1526,  1531,  1536,  1540,  1544,  1548,
-    1552,  1558,  1569,  1576,  1579,  1588,  1593,  1603,  1608,  1616,
-    1620,  1630,  1633,  1639,  1645,  1652,  1662,  1666,  1670,  1674,
-    1679,  1683,  1688,  1693,  1698,  1703,  1708,  1713,  1718,  1723,
-    1728,  1734,  1740,  1746,  1751,  1756,  1761,  1766,  1771,  1776,
-    1781,  1786,  1791,  1796,  1801,  1807,  1814,  1819,  1824,  1829,
-    1834,  1839,  1844,  1849,  1854,  1859,  1864,  1869,  1877,  1885,
-    1893,  1899,  1905,  1911,  1917,  1923,  1929,  1935,  1941,  1947,
-    1953,  1959,  1965,  1971,  1977,  1983,  1989,  1995,  2001,  2007,
-    2013,  2019,  2025,  2031,  2037,  2043,  2049,  2055,  2061,  2067,
-    2073,  2079,  2085,  2091,  2099,  2107,  2115,  2123,  2131,  2139,
-    2147,  2155,  2163,  2171,  2179,  2187,  2193,  2199,  2205,  2211,
-    2217,  2223,  2229,  2235,  2241,  2247,  2253,  2259,  2265,  2271,
-    2277,  2283,  2289,  2295,  2301,  2307,  2313,  2319,  2325,  2331,
-    2337,  2343,  2349,  2355,  2361,  2367,  2373,  2379,  2385,  2391,
-    2397,  2403,  2407,  2411,  2415,  2420,  2426,  2431,  2436,  2441,
-    2446,  2451,  2456,  2462,  2467,  2472,  2477,  2482,  2487,  2493,
-    2499,  2505,  2511,  2517,  2523,  2529,  2535,  2541,  2547,  2553,
-    2559,  2565,  2571,  2576,  2581,  2586,  2591,  2596,  2601,  2607,
-    2612,  2617,  2622,  2627,  2632,  2637,  2642,  2648,  2653,  2658,
-    2663,  2668,  2673,  2678,  2683,  2688,  2693,  2698,  2703,  2708,
-    2713,  2718,  2724,  2729,  2734,  2740,  2746,  2751,  2756,  2761,
-    2767,  2772,  2777,  2782,  2788,  2793,  2798,  2803,  2809,  2814,
-    2819,  2824,  2830,  2836,  2842,  2848,  2853,  2859,  2865,  2871,
-    2876,  2881,  2886,  2891,  2896,  2902,  2907,  2912,  2917,  2923,
-    2928,  2933,  2938,  2944,  2949,  2954,  2959,  2965,  2970,  2975,
-    2980,  2986,  2991,  2996,  3001,  3007,  3012,  3017,  3022,  3028,
-    3033,  3038,  3043,  3049,  3054,  3059,  3064,  3070,  3075,  3080,
-    3085,  3091,  3096,  3101,  3106,  3112,  3117,  3122,  3127,  3133,
-    3138,  3143,  3148,  3154,  3159,  3164,  3169,  3175,  3180,  3185,
-    3190,  3196,  3201,  3206,  3212,  3218,  3224,  3230,  3237,  3244,
-    3250,  3256,  3262,  3268,  3274,  3280,  3287,  3292,  3308,  3313,
-    3318,  3326,  3326,  3337,  3337,  3347,  3350,  3363,  3385,  3412,
-    3416,  3422,  3427,  3438,  3442,  3448,  3459,  3462,  3469,  3473,
-    3474,  3480,  3481,  3482,  3483,  3484,  3485,  3486,  3488,  3494,
-    3503,  3504,  3508,  3504,  3520,  3521,  3525,  3525,  3532,  3532,
-    3546,  3549,  3557,  3565,  3576,  3577,  3581,  3585,  3592,  3599,
-    3603,  3611,  3615,  3628,  3632,  3639,  3639,  3659,  3662,  3668,
-    3680,  3692,  3696,  3703,  3703,  3718,  3718,  3734,  3734,  3755,
-    3758,  3764,  3767,  3773,  3777,  3784,  3789,  3794,  3801,  3804,
-    3813,  3817,  3826,  3829,  3833,  3842,  3842,  3884,  3890,  3893,
-    3898,  3901
+       0,   371,   371,   377,   380,   385,   388,   391,   395,   399,
+     402,   406,   410,   414,   418,   422,   426,   432,   440,   443,
+     446,   449,   452,   457,   465,   472,   479,   485,   489,   496,
+     499,   505,   512,   522,   530,   535,   563,   572,   578,   582,
+     586,   606,   607,   608,   609,   615,   616,   621,   626,   635,
+     636,   641,   649,   650,   656,   665,   666,   671,   676,   681,
+     689,   690,   699,   711,   712,   721,   722,   731,   732,   741,
+     742,   750,   751,   759,   760,   768,   769,   769,   787,   788,
+     804,   808,   812,   816,   821,   825,   829,   833,   837,   841,
+     845,   852,   855,   866,   873,   878,   883,   890,   894,   898,
+     902,   907,   912,   921,   921,   932,   936,   943,   950,   953,
+     960,   968,   988,  1011,  1026,  1051,  1062,  1072,  1082,  1092,
+    1101,  1104,  1108,  1112,  1117,  1125,  1132,  1137,  1142,  1147,
+    1156,  1166,  1193,  1202,  1209,  1217,  1224,  1231,  1239,  1249,
+    1256,  1267,  1273,  1276,  1283,  1287,  1291,  1300,  1310,  1313,
+    1324,  1327,  1330,  1334,  1338,  1343,  1347,  1354,  1358,  1363,
+    1369,  1375,  1382,  1387,  1395,  1401,  1413,  1427,  1433,  1438,
+    1446,  1454,  1462,  1470,  1478,  1486,  1494,  1502,  1509,  1516,
+    1520,  1525,  1530,  1535,  1540,  1545,  1550,  1554,  1558,  1562,
+    1566,  1572,  1583,  1590,  1593,  1602,  1607,  1617,  1622,  1630,
+    1634,  1644,  1647,  1653,  1659,  1666,  1676,  1680,  1684,  1688,
+    1693,  1697,  1702,  1707,  1712,  1717,  1722,  1727,  1732,  1737,
+    1742,  1748,  1754,  1760,  1765,  1770,  1775,  1780,  1785,  1790,
+    1795,  1800,  1805,  1810,  1815,  1821,  1828,  1833,  1838,  1843,
+    1848,  1853,  1858,  1863,  1868,  1873,  1878,  1883,  1891,  1899,
+    1907,  1913,  1919,  1925,  1931,  1937,  1943,  1949,  1955,  1961,
+    1967,  1973,  1979,  1985,  1991,  1997,  2003,  2009,  2015,  2021,
+    2027,  2033,  2039,  2045,  2051,  2057,  2063,  2069,  2075,  2081,
+    2087,  2093,  2099,  2105,  2113,  2121,  2129,  2137,  2145,  2153,
+    2161,  2169,  2177,  2185,  2193,  2201,  2207,  2213,  2219,  2225,
+    2231,  2237,  2243,  2249,  2255,  2261,  2267,  2273,  2279,  2285,
+    2291,  2297,  2303,  2309,  2315,  2321,  2327,  2333,  2339,  2345,
+    2351,  2357,  2363,  2369,  2375,  2381,  2387,  2393,  2399,  2405,
+    2411,  2417,  2421,  2425,  2429,  2434,  2440,  2445,  2450,  2455,
+    2460,  2465,  2470,  2476,  2481,  2486,  2491,  2496,  2501,  2507,
+    2513,  2519,  2525,  2531,  2537,  2543,  2549,  2555,  2561,  2567,
+    2573,  2579,  2585,  2590,  2595,  2600,  2605,  2610,  2615,  2621,
+    2626,  2631,  2636,  2641,  2646,  2651,  2656,  2662,  2667,  2672,
+    2677,  2682,  2687,  2692,  2697,  2702,  2707,  2712,  2717,  2722,
+    2727,  2732,  2738,  2743,  2748,  2754,  2760,  2765,  2770,  2775,
+    2781,  2786,  2791,  2796,  2802,  2807,  2812,  2817,  2823,  2828,
+    2833,  2838,  2844,  2850,  2856,  2862,  2867,  2873,  2879,  2885,
+    2890,  2895,  2900,  2905,  2910,  2916,  2921,  2926,  2931,  2937,
+    2942,  2947,  2952,  2958,  2963,  2968,  2973,  2979,  2984,  2989,
+    2994,  3000,  3005,  3010,  3015,  3021,  3026,  3031,  3036,  3042,
+    3047,  3052,  3057,  3063,  3068,  3073,  3078,  3084,  3089,  3094,
+    3099,  3105,  3110,  3115,  3120,  3126,  3131,  3136,  3141,  3147,
+    3152,  3157,  3162,  3168,  3173,  3178,  3183,  3189,  3194,  3199,
+    3204,  3210,  3215,  3220,  3225,  3230,  3235,  3240,  3245,  3250,
+    3255,  3260,  3265,  3270,  3275,  3280,  3285,  3290,  3295,  3300,
+    3305,  3310,  3315,  3320,  3325,  3330,  3336,  3342,  3348,  3354,
+    3361,  3368,  3374,  3380,  3386,  3392,  3398,  3404,  3411,  3416,
+    3432,  3437,  3442,  3450,  3450,  3461,  3461,  3471,  3474,  3487,
+    3509,  3536,  3540,  3546,  3551,  3562,  3566,  3572,  3583,  3586,
+    3593,  3597,  3598,  3604,  3605,  3606,  3607,  3608,  3609,  3610,
+    3612,  3618,  3627,  3628,  3632,  3628,  3644,  3645,  3649,  3649,
+    3656,  3656,  3670,  3673,  3681,  3689,  3700,  3701,  3705,  3709,
+    3716,  3723,  3727,  3735,  3739,  3752,  3756,  3763,  3763,  3783,
+    3786,  3792,  3804,  3816,  3820,  3827,  3827,  3842,  3842,  3858,
+    3858,  3879,  3882,  3888,  3891,  3897,  3901,  3908,  3913,  3918,
+    3925,  3928,  3932,  3937,  3941,  3951,  3955,  3964,  3967,  3971,
+    3980,  3980,  4022,  4028,  4031,  4036,  4039
 };
 #endif
 
-#if YYDEBUG || YYERROR_VERBOSE || 1
+/** Accessing symbol of state STATE.  */
+#define YY_ACCESSING_SYMBOL(State) YY_CAST (yysymbol_kind_t, yystos[State])
+
+#if 1
+/* The user-facing name of the symbol whose (internal) number is
+   YYSYMBOL.  No bounds checking.  */
+static const char *yysymbol_name (yysymbol_kind_t yysymbol) YY_ATTRIBUTE_UNUSED;
+
 /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
    First, the terminals, then, starting at YYNTOKENS, nonterminals.  */
 static const char *const yytname[] =
 {
-  "$end", "error", "$undefined", "CONST", "BOOL", "INT", "UINT", "FLOAT",
-  "BVEC2", "BVEC3", "BVEC4", "IVEC2", "IVEC3", "IVEC4", "UVEC2", "UVEC3",
-  "UVEC4", "VEC2", "VEC3", "VEC4", "MAT2", "MAT3", "MAT4", "MAT2X2",
-  "MAT2X3", "MAT2X4", "MAT3X2", "MAT3X3", "MAT3X4", "MAT4X2", "MAT4X3",
-  "MAT4X4", "SAMPLER2D", "SAMPLER3D", "SAMPLERCUBE", "SAMPLER2DSHADOW",
-  "SAMPLERCUBESHADOW", "SAMPLER2DARRAY", "SAMPLER2DARRAYSHADOW",
-  "ISAMPLER2D", "ISAMPLER3D", "ISAMPLERCUBE", "ISAMPLER2DARRAY",
-  "USAMPLER2D", "USAMPLER3D", "USAMPLERCUBE", "USAMPLER2DARRAY", "SAMPLER",
-  "SAMPLERSHADOW", "TEXTURE2D", "TEXTURE3D", "TEXTURECUBE",
-  "TEXTURE2DARRAY", "ITEXTURE2D", "ITEXTURE3D", "ITEXTURECUBE",
-  "ITEXTURE2DARRAY", "UTEXTURE2D", "UTEXTURE3D", "UTEXTURECUBE",
-  "UTEXTURE2DARRAY", "ATTRIBUTE", "VARYING", "FLOAT16_T", "FLOAT32_T",
-  "DOUBLE", "FLOAT64_T", "INT64_T", "UINT64_T", "INT32_T", "UINT32_T",
-  "INT16_T", "UINT16_T", "INT8_T", "UINT8_T", "I64VEC2", "I64VEC3",
-  "I64VEC4", "U64VEC2", "U64VEC3", "U64VEC4", "I32VEC2", "I32VEC3",
-  "I32VEC4", "U32VEC2", "U32VEC3", "U32VEC4", "I16VEC2", "I16VEC3",
-  "I16VEC4", "U16VEC2", "U16VEC3", "U16VEC4", "I8VEC2", "I8VEC3", "I8VEC4",
-  "U8VEC2", "U8VEC3", "U8VEC4", "DVEC2", "DVEC3", "DVEC4", "DMAT2",
-  "DMAT3", "DMAT4", "F16VEC2", "F16VEC3", "F16VEC4", "F16MAT2", "F16MAT3",
-  "F16MAT4", "F32VEC2", "F32VEC3", "F32VEC4", "F32MAT2", "F32MAT3",
-  "F32MAT4", "F64VEC2", "F64VEC3", "F64VEC4", "F64MAT2", "F64MAT3",
-  "F64MAT4", "DMAT2X2", "DMAT2X3", "DMAT2X4", "DMAT3X2", "DMAT3X3",
-  "DMAT3X4", "DMAT4X2", "DMAT4X3", "DMAT4X4", "F16MAT2X2", "F16MAT2X3",
-  "F16MAT2X4", "F16MAT3X2", "F16MAT3X3", "F16MAT3X4", "F16MAT4X2",
-  "F16MAT4X3", "F16MAT4X4", "F32MAT2X2", "F32MAT2X3", "F32MAT2X4",
-  "F32MAT3X2", "F32MAT3X3", "F32MAT3X4", "F32MAT4X2", "F32MAT4X3",
-  "F32MAT4X4", "F64MAT2X2", "F64MAT2X3", "F64MAT2X4", "F64MAT3X2",
-  "F64MAT3X3", "F64MAT3X4", "F64MAT4X2", "F64MAT4X3", "F64MAT4X4",
-  "ATOMIC_UINT", "ACCSTRUCTNV", "ACCSTRUCTEXT", "RAYQUERYEXT",
-  "FCOOPMATNV", "ICOOPMATNV", "UCOOPMATNV", "SAMPLERCUBEARRAY",
-  "SAMPLERCUBEARRAYSHADOW", "ISAMPLERCUBEARRAY", "USAMPLERCUBEARRAY",
-  "SAMPLER1D", "SAMPLER1DARRAY", "SAMPLER1DARRAYSHADOW", "ISAMPLER1D",
-  "SAMPLER1DSHADOW", "SAMPLER2DRECT", "SAMPLER2DRECTSHADOW",
-  "ISAMPLER2DRECT", "USAMPLER2DRECT", "SAMPLERBUFFER", "ISAMPLERBUFFER",
-  "USAMPLERBUFFER", "SAMPLER2DMS", "ISAMPLER2DMS", "USAMPLER2DMS",
-  "SAMPLER2DMSARRAY", "ISAMPLER2DMSARRAY", "USAMPLER2DMSARRAY",
-  "SAMPLEREXTERNALOES", "SAMPLEREXTERNAL2DY2YEXT", "ISAMPLER1DARRAY",
-  "USAMPLER1D", "USAMPLER1DARRAY", "F16SAMPLER1D", "F16SAMPLER2D",
-  "F16SAMPLER3D", "F16SAMPLER2DRECT", "F16SAMPLERCUBE",
+  "\"end of file\"", "error", "\"invalid token\"", "CONST", "BOOL", "INT",
+  "UINT", "FLOAT", "BVEC2", "BVEC3", "BVEC4", "IVEC2", "IVEC3", "IVEC4",
+  "UVEC2", "UVEC3", "UVEC4", "VEC2", "VEC3", "VEC4", "MAT2", "MAT3",
+  "MAT4", "MAT2X2", "MAT2X3", "MAT2X4", "MAT3X2", "MAT3X3", "MAT3X4",
+  "MAT4X2", "MAT4X3", "MAT4X4", "SAMPLER2D", "SAMPLER3D", "SAMPLERCUBE",
+  "SAMPLER2DSHADOW", "SAMPLERCUBESHADOW", "SAMPLER2DARRAY",
+  "SAMPLER2DARRAYSHADOW", "ISAMPLER2D", "ISAMPLER3D", "ISAMPLERCUBE",
+  "ISAMPLER2DARRAY", "USAMPLER2D", "USAMPLER3D", "USAMPLERCUBE",
+  "USAMPLER2DARRAY", "SAMPLER", "SAMPLERSHADOW", "TEXTURE2D", "TEXTURE3D",
+  "TEXTURECUBE", "TEXTURE2DARRAY", "ITEXTURE2D", "ITEXTURE3D",
+  "ITEXTURECUBE", "ITEXTURE2DARRAY", "UTEXTURE2D", "UTEXTURE3D",
+  "UTEXTURECUBE", "UTEXTURE2DARRAY", "ATTRIBUTE", "VARYING", "FLOAT16_T",
+  "FLOAT32_T", "DOUBLE", "FLOAT64_T", "INT64_T", "UINT64_T", "INT32_T",
+  "UINT32_T", "INT16_T", "UINT16_T", "INT8_T", "UINT8_T", "I64VEC2",
+  "I64VEC3", "I64VEC4", "U64VEC2", "U64VEC3", "U64VEC4", "I32VEC2",
+  "I32VEC3", "I32VEC4", "U32VEC2", "U32VEC3", "U32VEC4", "I16VEC2",
+  "I16VEC3", "I16VEC4", "U16VEC2", "U16VEC3", "U16VEC4", "I8VEC2",
+  "I8VEC3", "I8VEC4", "U8VEC2", "U8VEC3", "U8VEC4", "DVEC2", "DVEC3",
+  "DVEC4", "DMAT2", "DMAT3", "DMAT4", "F16VEC2", "F16VEC3", "F16VEC4",
+  "F16MAT2", "F16MAT3", "F16MAT4", "F32VEC2", "F32VEC3", "F32VEC4",
+  "F32MAT2", "F32MAT3", "F32MAT4", "F64VEC2", "F64VEC3", "F64VEC4",
+  "F64MAT2", "F64MAT3", "F64MAT4", "DMAT2X2", "DMAT2X3", "DMAT2X4",
+  "DMAT3X2", "DMAT3X3", "DMAT3X4", "DMAT4X2", "DMAT4X3", "DMAT4X4",
+  "F16MAT2X2", "F16MAT2X3", "F16MAT2X4", "F16MAT3X2", "F16MAT3X3",
+  "F16MAT3X4", "F16MAT4X2", "F16MAT4X3", "F16MAT4X4", "F32MAT2X2",
+  "F32MAT2X3", "F32MAT2X4", "F32MAT3X2", "F32MAT3X3", "F32MAT3X4",
+  "F32MAT4X2", "F32MAT4X3", "F32MAT4X4", "F64MAT2X2", "F64MAT2X3",
+  "F64MAT2X4", "F64MAT3X2", "F64MAT3X3", "F64MAT3X4", "F64MAT4X2",
+  "F64MAT4X3", "F64MAT4X4", "ATOMIC_UINT", "ACCSTRUCTNV", "ACCSTRUCTEXT",
+  "RAYQUERYEXT", "FCOOPMATNV", "ICOOPMATNV", "UCOOPMATNV",
+  "SAMPLERCUBEARRAY", "SAMPLERCUBEARRAYSHADOW", "ISAMPLERCUBEARRAY",
+  "USAMPLERCUBEARRAY", "SAMPLER1D", "SAMPLER1DARRAY",
+  "SAMPLER1DARRAYSHADOW", "ISAMPLER1D", "SAMPLER1DSHADOW", "SAMPLER2DRECT",
+  "SAMPLER2DRECTSHADOW", "ISAMPLER2DRECT", "USAMPLER2DRECT",
+  "SAMPLERBUFFER", "ISAMPLERBUFFER", "USAMPLERBUFFER", "SAMPLER2DMS",
+  "ISAMPLER2DMS", "USAMPLER2DMS", "SAMPLER2DMSARRAY", "ISAMPLER2DMSARRAY",
+  "USAMPLER2DMSARRAY", "SAMPLEREXTERNALOES", "SAMPLEREXTERNAL2DY2YEXT",
+  "ISAMPLER1DARRAY", "USAMPLER1D", "USAMPLER1DARRAY", "F16SAMPLER1D",
+  "F16SAMPLER2D", "F16SAMPLER3D", "F16SAMPLER2DRECT", "F16SAMPLERCUBE",
   "F16SAMPLER1DARRAY", "F16SAMPLER2DARRAY", "F16SAMPLERCUBEARRAY",
   "F16SAMPLERBUFFER", "F16SAMPLER2DMS", "F16SAMPLER2DMSARRAY",
   "F16SAMPLER1DSHADOW", "F16SAMPLER2DSHADOW", "F16SAMPLER1DARRAYSHADOW",
@@ -1076,7 +1237,13 @@
   "F16IMAGE1D", "F16IMAGE2D", "F16IMAGE3D", "F16IMAGE2DRECT",
   "F16IMAGECUBE", "F16IMAGE1DARRAY", "F16IMAGE2DARRAY",
   "F16IMAGECUBEARRAY", "F16IMAGEBUFFER", "F16IMAGE2DMS",
-  "F16IMAGE2DMSARRAY", "TEXTURECUBEARRAY", "ITEXTURECUBEARRAY",
+  "F16IMAGE2DMSARRAY", "I64IMAGE1D", "U64IMAGE1D", "I64IMAGE2D",
+  "U64IMAGE2D", "I64IMAGE3D", "U64IMAGE3D", "I64IMAGE2DRECT",
+  "U64IMAGE2DRECT", "I64IMAGECUBE", "U64IMAGECUBE", "I64IMAGEBUFFER",
+  "U64IMAGEBUFFER", "I64IMAGE1DARRAY", "U64IMAGE1DARRAY",
+  "I64IMAGE2DARRAY", "U64IMAGE2DARRAY", "I64IMAGECUBEARRAY",
+  "U64IMAGECUBEARRAY", "I64IMAGE2DMS", "U64IMAGE2DMS", "I64IMAGE2DMSARRAY",
+  "U64IMAGE2DMSARRAY", "TEXTURECUBEARRAY", "ITEXTURECUBEARRAY",
   "UTEXTURECUBEARRAY", "TEXTURE1D", "ITEXTURE1D", "UTEXTURE1D",
   "TEXTURE1DARRAY", "ITEXTURE1DARRAY", "UTEXTURE1DARRAY", "TEXTURE2DRECT",
   "ITEXTURE2DRECT", "UTEXTURE2DRECT", "TEXTUREBUFFER", "ITEXTUREBUFFER",
@@ -1100,8 +1267,9 @@
   "FLOATCONSTANT", "INTCONSTANT", "UINTCONSTANT", "BOOLCONSTANT",
   "IDENTIFIER", "TYPE_NAME", "CENTROID", "IN", "OUT", "INOUT", "STRUCT",
   "VOID", "WHILE", "BREAK", "CONTINUE", "DO", "ELSE", "FOR", "IF",
-  "DISCARD", "RETURN", "SWITCH", "CASE", "DEFAULT", "UNIFORM", "SHARED",
-  "BUFFER", "FLAT", "SMOOTH", "LAYOUT", "DOUBLECONSTANT", "INT16CONSTANT",
+  "DISCARD", "RETURN", "SWITCH", "CASE", "DEFAULT", "TERMINATE_INVOCATION",
+  "TERMINATE_RAY", "IGNORE_INTERSECTION", "UNIFORM", "SHARED", "BUFFER",
+  "FLAT", "SMOOTH", "LAYOUT", "DOUBLECONSTANT", "INT16CONSTANT",
   "UINT16CONSTANT", "FLOAT16CONSTANT", "INT32CONSTANT", "UINT32CONSTANT",
   "INT64CONSTANT", "UINT64CONSTANT", "SUBROUTINE", "DEMOTE", "PAYLOADNV",
   "PAYLOADINNV", "HITATTRNV", "CALLDATANV", "CALLDATAINNV", "PAYLOADEXT",
@@ -1151,12 +1319,18 @@
   "function_definition", "$@13", "attribute", "attribute_list",
   "single_attribute", YY_NULLPTR
 };
+
+static const char *
+yysymbol_name (yysymbol_kind_t yysymbol)
+{
+  return yytname[yysymbol];
+}
 #endif
 
-# ifdef YYPRINT
+#ifdef YYPRINT
 /* YYTOKNUM[NUM] -- (External) token number corresponding to the
    (internal) symbol number NUM (which must be that of a token).  */
-static const yytype_uint16 yytoknum[] =
+static const yytype_int16 yytoknum[] =
 {
        0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
      265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
@@ -1199,104 +1373,110 @@
      635,   636,   637,   638,   639,   640,   641,   642,   643,   644,
      645,   646,   647,   648,   649,   650,   651,   652,   653,   654,
      655,   656,   657,   658,   659,   660,   661,   662,   663,   664,
-     665,   666,   667,   668,   669,   670,   671,   672,   673,   674
+     665,   666,   667,   668,   669,   670,   671,   672,   673,   674,
+     675,   676,   677,   678,   679,   680,   681,   682,   683,   684,
+     685,   686,   687,   688,   689,   690,   691,   692,   693,   694,
+     695,   696,   697,   698,   699
 };
-# endif
+#endif
 
-#define YYPACT_NINF -457
+#define YYPACT_NINF (-732)
 
-#define yypact_value_is_default(Yystate) \
-  (!!((Yystate) == (-457)))
+#define yypact_value_is_default(Yyn) \
+  ((Yyn) == YYPACT_NINF)
 
-#define YYTABLE_NINF -537
+#define YYTABLE_NINF (-559)
 
-#define yytable_value_is_error(Yytable_value) \
+#define yytable_value_is_error(Yyn) \
   0
 
   /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
      STATE-NUM.  */
 static const yytype_int16 yypact[] =
 {
-    4075,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
-    -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
-    -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
-    -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
-    -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
-    -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
-    -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
-    -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
-    -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
-    -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
-    -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
-    -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
-    -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
-    -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
-    -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
-    -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
-    -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
-    -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
-    -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
-    -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
-    -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
-    -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
-    -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
-    -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
-    -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
-    -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
-    -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
-    -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
-    -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
-    -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,   132,  -457,
-    -457,  -457,  -457,  -457,    -1,  -457,  -457,  -457,  -457,  -457,
-    -457,  -301,  -298,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
-    -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
-    -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
-    -457,  -457,  -457,  -457,  -457,    11,  -249,    17,    30,  6160,
-      20,  -457,    28,  -457,  -457,  -457,  -457,  4492,  -457,  -457,
-    -457,  -457,    50,  -457,  -457,   739,  -457,  -457,    16,  -457,
-      81,   -29,    69,  -457,  -313,  -457,   111,  -457,  6160,  -457,
-    -457,  -457,  6160,   103,   106,  -457,  -314,  -457,    72,  -457,
-    -457,  8566,   142,  -457,  -457,  -457,   136,  6160,  -457,   144,
-    -457,    53,  -457,  -457,    76,  6974,  -457,  -312,  1156,  -457,
-    -457,  -457,  -457,   142,  -309,  -457,  7372,  -308,  -457,   119,
-    -457,    65,  8566,  8566,  -457,  8566,  -457,  -457,  -457,  -457,
-    -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
-    -457,  -457,  -457,  -457,  -457,    36,  -457,  -457,  -457,   171,
-      85,  8964,   173,  -457,  8566,  -457,  -457,  -323,   174,  -457,
-    6160,   139,  4909,  -457,  6160,  8566,  -457,   -29,  -457,   141,
-    -457,  -457,   145,    99,    35,    26,    71,   156,   159,   161,
-     196,   195,    23,   181,  7770,  -457,   183,   182,  -457,  -457,
-     186,   179,   180,  -457,   191,   192,   187,  8168,   193,  8566,
-     188,   189,   127,  -457,  -457,    96,  -457,  -249,   200,   201,
-    -457,  -457,  -457,  -457,  -457,  1573,  -457,  -457,  -457,  -457,
-    -457,  -457,  -457,  -457,  -457,   -24,   174,  7372,    13,  7372,
-    -457,  -457,  7372,  6160,  -457,   166,  -457,  -457,  -457,    86,
-    -457,  -457,  8566,   168,  -457,  -457,  8566,   205,  -457,  -457,
-    -457,  8566,  -457,   139,   142,   124,  -457,  -457,  -457,  5326,
-    -457,  -457,  -457,  -457,  8566,  8566,  8566,  8566,  8566,  8566,
-    8566,  8566,  8566,  8566,  8566,  8566,  8566,  8566,  8566,  8566,
-    8566,  8566,  8566,  -457,  -457,  -457,   206,   172,  -457,  1990,
-    -457,  -457,  -457,  1990,  -457,  8566,  -457,  -457,   130,  8566,
-     125,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
-    -457,  -457,  -457,  -457,  8566,  8566,  -457,  -457,  -457,  -457,
-    -457,  -457,  -457,  7372,  -457,    94,  -457,  5743,  -457,  -457,
-     207,   204,  -457,  -457,  -457,   131,   174,   139,  -457,  -457,
-    -457,  -457,  -457,   145,   145,    99,    99,    35,    35,    35,
-      35,    26,    26,    71,   156,   159,   161,   196,   195,  8566,
-    -457,   212,    60,  -457,  1990,  3658,   169,  3241,    87,  -457,
-      89,  -457,  -457,  -457,  -457,  -457,  6576,  -457,  -457,  -457,
-    -457,   143,  8566,   211,   172,   210,   204,   184,  6160,   217,
-     219,  -457,  -457,  3658,   218,  -457,  -457,  -457,  8566,   220,
-    -457,  -457,  -457,   214,  2407,  8566,  -457,   216,   223,   185,
-     224,  2824,  -457,   225,  -457,  -457,  7372,  -457,  -457,  -457,
-      97,  8566,  2407,   218,  -457,  -457,  1990,  -457,   222,   204,
-    -457,  -457,  1990,   229,  -457,  -457
+    4303,  -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,
+    -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,
+    -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,
+    -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,
+    -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,
+    -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,
+    -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,
+    -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,
+    -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,
+    -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,
+    -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,
+    -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,
+    -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,
+    -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,
+    -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,
+    -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,
+    -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,
+    -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,
+    -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,
+    -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,
+    -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,
+    -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,
+    -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,
+    -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,
+    -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,
+    -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,
+    -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,
+    -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,
+    -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,
+    -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,
+    -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,
+    -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,
+     109,  -732,  -732,  -732,  -732,  -732,     1,  -732,  -732,  -732,
+    -732,  -732,  -732,  -324,  -261,  -732,  -732,  -732,  -732,  -732,
+    -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,
+    -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,
+    -732,  -732,  -732,  -732,  -732,  -732,  -732,    11,    44,    22,
+       7,  6513,  -332,  -732,   -10,  -732,  -732,  -732,  -732,  4745,
+    -732,  -732,  -732,  -732,    46,  -732,  -732,   767,  -732,  -732,
+      16,  -732,    69,    -5,    47,  -732,  -338,  -732,    91,  -732,
+    6513,  -732,  -732,  -732,  6513,    72,    80,  -732,    13,  -732,
+      74,  -732,  -732,  9069,   126,  -732,  -732,  -732,   127,  6513,
+    -732,   144,  -732,    17,  -732,  -732,    61,  7377,  -732,    10,
+    1209,  -732,  -732,  -732,  -732,   126,    25,  -732,  7800,    26,
+    -732,   119,  -732,    78,  9069,  9069,  -732,  9069,  -732,  -732,
+    -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,
+    -732,  -732,  -732,  -732,  -732,  -732,  -732,    36,  -732,  -732,
+    -732,   164,    65,  9492,   171,  -732,  9069,  -732,  -732,  -340,
+     173,  -732,  6513,   140,  5187,  -732,  6513,  9069,  -732,    -5,
+    -732,   141,  -732,  -732,   124,   130,   179,    27,   117,   156,
+     158,   160,   195,   194,    20,   181,  8223,  -732,   183,   182,
+    -732,  -732,   186,   178,   180,  -732,   189,   192,   184,  8646,
+     193,  9069,   187,   188,   190,   196,   197,   129,  -732,  -732,
+      89,  -732,    44,   199,   204,  -732,  -732,  -732,  -732,  -732,
+    1651,  -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,
+    -376,   173,  7800,    54,  7800,  -732,  -732,  7800,  6513,  -732,
+     161,  -732,  -732,  -732,    70,  -732,  -732,  9069,   169,  -732,
+    -732,  9069,   207,  -732,  -732,  -732,  9069,  -732,   140,   126,
+     103,  -732,  -732,  -732,  5629,  -732,  -732,  -732,  -732,  9069,
+    9069,  9069,  9069,  9069,  9069,  9069,  9069,  9069,  9069,  9069,
+    9069,  9069,  9069,  9069,  9069,  9069,  9069,  9069,  -732,  -732,
+    -732,   209,   177,  -732,  2093,  -732,  -732,  -732,  2093,  -732,
+    9069,  -732,  -732,   122,  9069,   152,  -732,  -732,  -732,  -732,
+    -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,
+    -732,  -732,  9069,  9069,  -732,  -732,  -732,  -732,  -732,  -732,
+    -732,  7800,  -732,   143,  -732,  6071,  -732,  -732,   211,   208,
+    -732,  -732,  -732,   123,   173,   140,  -732,  -732,  -732,  -732,
+    -732,   124,   124,   130,   130,   179,   179,   179,   179,    27,
+      27,   117,   156,   158,   160,   195,   194,  9069,  -732,   216,
+      87,  -732,  2093,  3861,   174,  3419,    75,  -732,    85,  -732,
+    -732,  -732,  -732,  -732,  6954,  -732,  -732,  -732,  -732,   154,
+    9069,   217,   177,   191,   208,   185,  6513,   221,   223,  -732,
+    -732,  3861,   220,  -732,  -732,  -732,  9069,   224,  -732,  -732,
+    -732,   218,  2535,  9069,  -732,   219,   225,   198,   226,  2977,
+    -732,   227,  -732,  -732,  7800,  -732,  -732,  -732,    86,  9069,
+    2535,   220,  -732,  -732,  2093,  -732,   222,   208,  -732,  -732,
+    2093,   228,  -732,  -732
 };
 
   /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
      Performed when YYTABLE does not specify something else to do.  Zero
      means the default is an error.  */
-static const yytype_uint16 yydefact[] =
+static const yytype_int16 yydefact[] =
 {
        0,   157,   210,   208,   209,   207,   214,   215,   216,   217,
      218,   219,   220,   221,   222,   211,   212,   213,   223,   224,
@@ -1314,98 +1494,101 @@
      298,   299,   300,   301,   302,   303,   304,   305,   306,   310,
      311,   312,   313,   314,   315,   316,   317,   318,   322,   323,
      324,   325,   326,   327,   328,   329,   330,   334,   331,   332,
-     333,   493,   494,   495,   346,   347,   370,   373,   335,   344,
+     333,   515,   516,   517,   346,   347,   370,   373,   335,   344,
      345,   361,   343,   392,   393,   396,   397,   398,   400,   401,
-     402,   404,   405,   406,   408,   409,   483,   484,   369,   371,
+     402,   404,   405,   406,   408,   409,   505,   506,   369,   371,
      372,   348,   349,   350,   394,   351,   355,   356,   359,   399,
      403,   407,   352,   353,   357,   358,   395,   354,   360,   439,
      441,   442,   443,   445,   446,   447,   449,   450,   451,   453,
      454,   455,   457,   458,   459,   461,   462,   463,   465,   466,
      467,   469,   470,   471,   473,   474,   475,   477,   478,   479,
      481,   482,   440,   444,   448,   452,   456,   464,   468,   472,
-     460,   476,   480,   374,   375,   376,   410,   419,   421,   415,
-     420,   422,   423,   425,   426,   427,   429,   430,   431,   433,
-     434,   435,   437,   438,   411,   412,   413,   424,   414,   416,
-     417,   418,   428,   432,   436,   485,   486,   489,   490,   491,
-     492,   487,   488,   584,   132,   498,   499,   500,     0,   497,
-     161,   159,   160,   158,     0,   206,   162,   163,   164,   134,
-     133,     0,   190,   171,   173,   169,   175,   177,   172,   174,
-     170,   176,   178,   167,   168,   192,   179,   186,   187,   188,
-     189,   180,   181,   182,   183,   184,   185,   135,   136,   137,
-     138,   139,   140,   147,   583,     0,   585,     0,   109,   108,
-       0,   120,   125,   154,   153,   151,   155,     0,   148,   150,
-     156,   130,   202,   152,   496,     0,   580,   582,     0,   503,
-       0,     0,     0,    97,     0,    94,     0,   107,     0,   116,
-     110,   118,     0,   119,     0,    95,   126,   100,     0,   149,
-     131,     0,   195,   201,     1,   581,     0,     0,   501,   144,
-     146,     0,   142,   193,     0,     0,    98,     0,     0,   586,
-     111,   115,   117,   113,   121,   112,     0,   127,   103,     0,
-     101,     0,     0,     0,     9,     0,    43,    42,    44,    41,
-       5,     6,     7,     8,     2,    16,    14,    15,    17,    10,
-      11,    12,    13,     3,    18,    37,    20,    25,    26,     0,
-       0,    30,     0,   204,     0,    36,    34,     0,   196,    96,
-       0,     0,     0,   505,     0,     0,   141,     0,   191,     0,
-     197,    45,    49,    52,    55,    60,    63,    65,    67,    69,
-      71,    73,    75,     0,     0,    99,     0,   531,   540,   544,
-       0,     0,     0,   565,     0,     0,     0,     0,     0,     0,
-       0,     0,    45,    78,    91,     0,   518,     0,   156,   130,
-     521,   542,   520,   528,   519,     0,   522,   523,   546,   524,
-     553,   525,   526,   561,   527,     0,   114,     0,   122,     0,
-     513,   129,     0,     0,   105,     0,   102,    38,    39,     0,
-      22,    23,     0,     0,    28,    27,     0,   206,    31,    33,
-      40,     0,   203,     0,   511,     0,   509,   504,   506,     0,
-      93,   145,   143,   194,     0,     0,     0,     0,     0,     0,
+     460,   476,   480,   483,   484,   485,   486,   487,   488,   489,
+     490,   491,   492,   493,   494,   495,   496,   497,   498,   499,
+     500,   501,   502,   503,   504,   374,   375,   376,   410,   419,
+     421,   415,   420,   422,   423,   425,   426,   427,   429,   430,
+     431,   433,   434,   435,   437,   438,   411,   412,   413,   424,
+     414,   416,   417,   418,   428,   432,   436,   507,   508,   511,
+     512,   513,   514,   509,   510,   609,   132,   520,   521,   522,
+       0,   519,   161,   159,   160,   158,     0,   206,   162,   163,
+     164,   134,   133,     0,   190,   171,   173,   169,   175,   177,
+     172,   174,   170,   176,   178,   167,   168,   192,   179,   186,
+     187,   188,   189,   180,   181,   182,   183,   184,   185,   135,
+     136,   137,   138,   139,   140,   147,   608,     0,   610,     0,
+     109,   108,     0,   120,   125,   154,   153,   151,   155,     0,
+     148,   150,   156,   130,   202,   152,   518,     0,   605,   607,
+       0,   525,     0,     0,     0,    97,     0,    94,     0,   107,
+       0,   116,   110,   118,     0,   119,     0,    95,   126,   100,
+       0,   149,   131,     0,   195,   201,     1,   606,     0,     0,
+     523,   144,   146,     0,   142,   193,     0,     0,    98,     0,
+       0,   611,   111,   115,   117,   113,   121,   112,     0,   127,
+     103,     0,   101,     0,     0,     0,     9,     0,    43,    42,
+      44,    41,     5,     6,     7,     8,     2,    16,    14,    15,
+      17,    10,    11,    12,    13,     3,    18,    37,    20,    25,
+      26,     0,     0,    30,     0,   204,     0,    36,    34,     0,
+     196,    96,     0,     0,     0,   527,     0,     0,   141,     0,
+     191,     0,   197,    45,    49,    52,    55,    60,    63,    65,
+      67,    69,    71,    73,    75,     0,     0,    99,     0,   553,
+     562,   566,     0,     0,     0,   587,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    45,    78,    91,
+       0,   540,     0,   156,   130,   543,   564,   542,   550,   541,
+       0,   544,   545,   568,   546,   575,   547,   548,   583,   549,
+       0,   114,     0,   122,     0,   535,   129,     0,     0,   105,
+       0,   102,    38,    39,     0,    22,    23,     0,     0,    28,
+      27,     0,   206,    31,    33,    40,     0,   203,     0,   533,
+       0,   531,   526,   528,     0,    93,   145,   143,   194,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    76,   198,   199,     0,     0,   530,     0,
-     563,   576,   575,     0,   567,     0,   579,   577,     0,     0,
-       0,   560,   529,    81,    82,    84,    83,    86,    87,    88,
-      89,    90,    85,    80,     0,     0,   545,   541,   543,   547,
-     554,   562,   124,     0,   516,     0,   128,     0,   106,     4,
-       0,    24,    21,    32,   205,     0,   512,     0,   507,   502,
-      46,    47,    48,    51,    50,    53,    54,    58,    59,    56,
-      57,    61,    62,    64,    66,    68,    70,    72,    74,     0,
-     200,   590,     0,   588,   532,     0,     0,     0,     0,   578,
-       0,   559,    79,    92,   123,   514,     0,   104,    19,   508,
-     510,     0,     0,     0,     0,     0,   551,     0,     0,     0,
-       0,   570,   569,   572,   538,   555,   515,   517,     0,     0,
-     587,   589,   533,     0,     0,     0,   571,     0,     0,   550,
-       0,     0,   548,     0,    77,   591,     0,   535,   564,   534,
-       0,   573,     0,   538,   537,   539,   557,   552,     0,   574,
-     568,   549,   558,     0,   566,   556
+       0,     0,     0,     0,     0,     0,     0,     0,    76,   198,
+     199,     0,     0,   552,     0,   585,   598,   597,     0,   589,
+       0,   601,   599,     0,     0,     0,   582,   602,   603,   604,
+     551,    81,    82,    84,    83,    86,    87,    88,    89,    90,
+      85,    80,     0,     0,   567,   563,   565,   569,   576,   584,
+     124,     0,   538,     0,   128,     0,   106,     4,     0,    24,
+      21,    32,   205,     0,   534,     0,   529,   524,    46,    47,
+      48,    51,    50,    53,    54,    58,    59,    56,    57,    61,
+      62,    64,    66,    68,    70,    72,    74,     0,   200,   615,
+       0,   613,   554,     0,     0,     0,     0,   600,     0,   581,
+      79,    92,   123,   536,     0,   104,    19,   530,   532,     0,
+       0,     0,     0,     0,   573,     0,     0,     0,     0,   592,
+     591,   594,   560,   577,   537,   539,     0,     0,   612,   614,
+     555,     0,     0,     0,   593,     0,     0,   572,     0,     0,
+     570,     0,    77,   616,     0,   557,   586,   556,     0,   595,
+       0,   560,   559,   561,   579,   574,     0,   596,   590,   571,
+     580,     0,   588,   578
 };
 
   /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
-    -457,  -457,  8868,  -457,   -87,   -84,  -127,   -93,   -33,   -31,
-     -27,   -25,   -28,   -26,  -457,   -86,  -457,  -103,  -457,  -111,
-    -125,     2,  -457,  -457,  -457,     4,  -457,  -457,  -457,   176,
-     194,   178,  -457,  -457,  -337,  -457,  -457,  -457,  -457,    95,
-    -457,   -37,   -46,  -457,     9,  -457,     0,   -63,  -457,  -457,
-    -457,  -457,   263,  -457,  -457,  -457,  -456,  -140,    10,   -73,
-    -211,  -457,  -102,  -198,  -321,  -457,  -144,  -457,  -457,  -155,
-    -154,  -457,  -457,   198,  -274,   -97,  -457,    46,  -457,  -118,
-    -457,    51,  -457,  -457,  -457,  -457,    52,  -457,  -457,  -457,
-    -457,  -457,  -457,  -457,  -457,   213,  -457,  -457,  -457,  -457,
-    -105
+    -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,  -732,
+    -732,  -732,  9402,  -732,   -90,   -89,  -153,   -92,   -29,   -28,
+     -27,   -26,   -30,   -25,  -732,   -88,  -732,  -101,  -732,  -113,
+    -132,     2,  -732,  -732,  -732,     4,  -732,  -732,  -732,   200,
+     201,   202,  -732,  -732,  -343,  -732,  -732,  -732,  -732,    92,
+    -732,   -36,   -46,  -732,     9,  -732,     0,   -67,  -732,  -732,
+    -732,  -732,   263,  -732,  -732,  -732,  -481,  -142,     8,   -78,
+    -214,  -732,  -107,  -204,  -731,  -732,  -149,  -732,  -732,  -160,
+    -159,  -732,  -732,   212,  -269,  -104,  -732,    45,  -732,  -127,
+    -732,    48,  -732,  -732,  -732,  -732,    49,  -732,  -732,  -732,
+    -732,  -732,  -732,  -732,  -732,   210,  -732,  -732,  -732,  -732,
+    -116
 };
 
   /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-      -1,   443,   444,   445,   630,   446,   447,   448,   449,   450,
-     451,   452,   502,   454,   472,   473,   474,   475,   476,   477,
-     478,   479,   480,   481,   482,   503,   659,   504,   614,   505,
-     561,   506,   345,   533,   421,   507,   347,   348,   349,   379,
-     380,   381,   350,   351,   352,   353,   354,   355,   401,   402,
-     356,   357,   358,   359,   455,   404,   456,   407,   392,   393,
-     457,   362,   363,   364,   464,   397,   462,   463,   555,   556,
-     531,   625,   510,   511,   512,   513,   514,   589,   685,   718,
-     709,   710,   711,   719,   515,   516,   517,   518,   712,   689,
-     519,   520,   713,   733,   521,   522,   523,   665,   593,   667,
-     693,   707,   708,   524,   365,   366,   367,   376,   525,   662,
-     663
+      -1,   465,   466,   467,   658,   468,   469,   470,   471,   472,
+     473,   474,   527,   476,   494,   495,   496,   497,   498,   499,
+     500,   501,   502,   503,   504,   528,   687,   529,   642,   530,
+     586,   531,   367,   558,   443,   532,   369,   370,   371,   401,
+     402,   403,   372,   373,   374,   375,   376,   377,   423,   424,
+     378,   379,   380,   381,   477,   426,   478,   429,   414,   415,
+     479,   384,   385,   386,   486,   419,   484,   485,   580,   581,
+     556,   653,   535,   536,   537,   538,   539,   614,   713,   746,
+     737,   738,   739,   747,   540,   541,   542,   543,   740,   717,
+     544,   545,   741,   761,   546,   547,   548,   693,   618,   695,
+     721,   735,   736,   549,   387,   388,   389,   398,   550,   690,
+     691
 };
 
   /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
@@ -1413,14 +1596,14 @@
      number is the opposite.  If YYTABLE_NINF, syntax error.  */
 static const yytype_int16 yytable[] =
 {
-     361,   551,   344,   415,   346,   405,   405,   484,   559,   360,
-     405,   484,   416,   552,   406,   485,   371,   527,   532,   372,
+     383,   745,   366,   427,   368,   584,   576,   512,   753,   382,
+     515,   428,   516,   517,   406,   393,   520,   407,   577,   745,
        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,   627,   375,    61,
+      52,    53,    54,    55,    56,    57,    58,   655,   394,    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,
@@ -1444,216 +1627,52 @@
      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,   389,   382,   530,   539,   664,   622,   618,   624,   483,
-     369,   626,   558,   417,   399,   571,   572,   582,   687,   458,
-     569,   570,   484,   540,   541,   377,   389,   490,   373,   623,
-     493,   382,   494,   495,   384,   400,   498,   385,   548,   383,
-     526,   528,   370,   -35,   378,   542,   687,   390,   360,   543,
-     460,   573,   574,   583,   374,   361,   360,   344,   396,   346,
-     299,   466,   575,   576,   360,   304,   305,   467,   383,   560,
-     683,   386,   383,   717,   684,   391,   598,   360,   600,   535,
-     725,   360,   536,   418,   468,   666,   419,   461,   586,   420,
-     469,   717,   398,   545,   629,   694,   360,   695,   509,   546,
-     615,   615,   674,   615,   389,   728,   675,   508,   676,   558,
-     615,   615,   403,   616,   530,   460,   530,   460,   567,   530,
-     568,   631,   408,   603,   604,   605,   606,   607,   608,   609,
-     610,   611,   612,   633,   647,   648,   649,   650,   637,   615,
-     671,   638,   732,   613,   615,   637,   413,   669,   679,   414,
-     553,   405,   461,   459,   461,   697,   618,   615,   698,   360,
-     465,   360,   534,   360,   295,   296,   297,   564,   565,   566,
-     643,   644,   651,   652,   668,   645,   646,   558,   670,   544,
-     549,   636,   554,   484,   563,   577,   460,   578,   579,   580,
-     581,   584,   587,   590,   588,   727,   591,   592,   594,   595,
-     599,   672,   673,   601,   596,   509,   602,   -36,   -34,   628,
-     530,   632,   460,   -29,   508,   661,   660,   678,   615,   682,
-     690,   700,   702,   461,   618,   704,   705,   703,   715,  -536,
-     716,   722,   360,   721,   653,   487,   726,   654,   681,   734,
-     723,   735,   655,   657,   686,   656,   658,   699,   411,   461,
-     412,   368,   562,   635,   680,   691,   724,   730,   360,   731,
-     692,   619,   410,   530,   409,   706,   620,   621,   395,   701,
-       0,     0,   686,     0,     0,     0,     0,     0,     0,   509,
-     460,     0,     0,   509,   720,   714,   560,     0,   508,     0,
-       0,     0,   508,     0,     0,     0,     0,     0,     0,     0,
-     729,     0,     0,   530,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   461,   688,     0,
-       0,     0,     0,     0,     0,     0,   360,     0,     0,     0,
-       0,     0,   389,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   688,     0,     0,     0,
-       0,     0,     0,     0,   509,   509,     0,   509,     0,     0,
-       0,     0,     0,   508,   508,     0,   508,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   390,     0,
-       0,     0,     0,   509,     0,     0,     0,   360,     0,     0,
-       0,     0,   508,     0,   509,     0,     0,     0,     0,     0,
-       0,   509,     0,   508,     0,     0,     0,     0,     0,     0,
-     508,     0,   509,     0,     0,     0,   509,     0,     0,     0,
-       0,   508,   509,     0,     0,   508,     0,     0,     0,   394,
-       0,   508,     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,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   293,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     294,   295,   296,   297,   298,     0,     0,     0,     0,     0,
-       0,     0,     0,   299,   300,   301,   302,   303,   304,   305,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   306,   307,   308,   309,   310,   311,     0,     0,
-       0,     0,     0,     0,     0,     0,   312,     0,   313,   314,
-     315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
-     325,   326,   327,   328,   329,   330,   331,   332,   333,   334,
-     335,   336,   337,   338,   339,   340,   341,   342,   343,     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,     0,     0,   422,   423,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   424,   425,     0,   486,     0,   487,   488,     0,
-       0,     0,     0,   489,   426,   427,   428,   429,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   294,   295,   296,
-     297,   298,     0,     0,     0,   430,   431,   432,   433,   434,
-     299,   300,   301,   302,   303,   304,   305,   490,   491,   492,
-     493,     0,   494,   495,   496,   497,   498,   499,   500,   306,
-     307,   308,   309,   310,   311,   435,   436,   437,   438,   439,
-     440,   441,   442,   312,   501,   313,   314,   315,   316,   317,
-     318,   319,   320,   321,   322,   323,   324,   325,   326,   327,
-     328,   329,   330,   331,   332,   333,   334,   335,   336,   337,
-     338,   339,   340,   341,   342,   343,     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,     0,     0,
-     422,   423,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   424,
-     425,     0,   486,     0,   487,   617,     0,     0,     0,     0,
-     489,   426,   427,   428,   429,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   294,   295,   296,   297,   298,     0,
-       0,     0,   430,   431,   432,   433,   434,   299,   300,   301,
-     302,   303,   304,   305,   490,   491,   492,   493,     0,   494,
-     495,   496,   497,   498,   499,   500,   306,   307,   308,   309,
-     310,   311,   435,   436,   437,   438,   439,   440,   441,   442,
-     312,   501,   313,   314,   315,   316,   317,   318,   319,   320,
-     321,   322,   323,   324,   325,   326,   327,   328,   329,   330,
-     331,   332,   333,   334,   335,   336,   337,   338,   339,   340,
-     341,   342,   343,     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,     0,     0,   422,   423,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   424,   425,     0,   486,
-       0,   487,     0,     0,     0,     0,     0,   489,   426,   427,
-     428,   429,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   294,   295,   296,   297,   298,     0,     0,     0,   430,
-     431,   432,   433,   434,   299,   300,   301,   302,   303,   304,
-     305,   490,   491,   492,   493,     0,   494,   495,   496,   497,
-     498,   499,   500,   306,   307,   308,   309,   310,   311,   435,
-     436,   437,   438,   439,   440,   441,   442,   312,   501,   313,
-     314,   315,   316,   317,   318,   319,   320,   321,   322,   323,
-     324,   325,   326,   327,   328,   329,   330,   331,   332,   333,
-     334,   335,   336,   337,   338,   339,   340,   341,   342,   343,
+     292,   293,   294,   295,   296,   297,   298,   299,   300,   301,
+     302,   303,   304,   305,   306,   307,   308,   309,   310,   311,
+     312,   313,   314,   411,   564,   404,   646,   555,   650,   505,
+     652,   439,   583,   654,   391,   692,   607,   480,   596,   597,
+     715,   506,   437,   400,   427,   565,   566,   488,   411,   507,
+     395,   438,   399,   489,   404,   408,   427,   506,   551,   553,
+     421,   405,   573,   552,   557,   -35,   392,   567,   715,   412,
+     382,   568,   608,   482,   598,   599,   396,   383,   382,   366,
+     418,   368,   321,   397,   422,   506,   382,   326,   327,   585,
+     405,   490,   651,   413,   405,   570,   623,   491,   625,   382,
+     657,   571,   420,   382,   694,   722,   643,   440,   611,   483,
+     441,   643,   425,   442,   560,   723,   756,   561,   382,   711,
+     534,   643,   643,   712,   430,   643,   411,   702,   644,   533,
+     600,   601,   583,   675,   676,   677,   678,   435,   482,   665,
+     482,   555,   666,   555,   659,   436,   555,   631,   632,   633,
+     634,   635,   636,   637,   638,   639,   640,   427,   643,   665,
+     661,   697,   707,   317,   318,   319,   481,   641,   589,   590,
+     591,   592,   578,   593,   483,   760,   483,   703,   646,   704,
+     725,   382,   487,   382,   559,   382,   594,   595,   643,   699,
+     643,   726,   671,   672,   569,   673,   674,   696,   679,   680,
+     574,   698,   664,   583,   506,   579,   588,   602,   603,   604,
+     605,   606,   482,   609,   612,   615,   613,   616,   619,   617,
+     755,   620,   624,   621,   626,   730,   656,   627,   -36,   628,
+     534,   700,   701,   -34,   660,   629,   630,   -29,   482,   533,
+     555,   688,   689,   706,   643,   710,   646,   718,   483,   728,
+     731,   732,   733,  -558,   743,   750,   744,   382,   749,   509,
+     754,   762,   763,   681,   709,   682,   685,   683,   727,   684,
+     714,   587,   686,   390,   483,   751,   663,   708,   719,   752,
+     758,   720,   759,   382,   734,   647,   729,   417,   648,   649,
+       0,   432,     0,   555,   433,     0,   434,     0,   714,     0,
+     431,     0,     0,     0,   534,     0,     0,     0,   534,   482,
+     748,     0,   585,   533,     0,   742,     0,   533,     0,     0,
+       0,     0,     0,     0,     0,     0,   757,     0,     0,     0,
+       0,     0,     0,   555,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   483,     0,   716,     0,     0,
+       0,     0,     0,     0,   382,     0,     0,     0,     0,     0,
+     411,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   716,     0,     0,     0,     0,
+       0,     0,   534,   534,     0,   534,     0,     0,     0,     0,
+       0,   533,   533,     0,   533,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   412,     0,     0,     0,
+       0,   534,     0,     0,     0,   382,     0,     0,     0,     0,
+     533,     0,   534,     0,     0,     0,     0,     0,     0,   534,
+       0,   533,     0,     0,     0,     0,     0,     0,   533,     0,
+     534,     0,     0,     0,   534,     0,     0,     0,     0,   533,
+     534,     0,     0,   533,     0,     0,     0,   416,     0,   533,
        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,
@@ -1683,1021 +1702,22 @@
      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,     0,     0,   422,   423,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   424,   425,     0,   486,     0,   408,     0,
-       0,     0,     0,     0,   489,   426,   427,   428,   429,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   294,   295,
-     296,   297,   298,     0,     0,     0,   430,   431,   432,   433,
-     434,   299,   300,   301,   302,   303,   304,   305,   490,   491,
-     492,   493,     0,   494,   495,   496,   497,   498,   499,   500,
-     306,   307,   308,   309,   310,   311,   435,   436,   437,   438,
-     439,   440,   441,   442,   312,   501,   313,   314,   315,   316,
-     317,   318,   319,   320,   321,   322,   323,   324,   325,   326,
-     327,   328,   329,   330,   331,   332,   333,   334,   335,   336,
-     337,   338,   339,   340,   341,   342,   343,     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,     0,
-       0,   422,   423,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     424,   425,     0,   486,     0,     0,     0,     0,     0,     0,
-       0,   489,   426,   427,   428,   429,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   294,   295,   296,   297,   298,
-       0,     0,     0,   430,   431,   432,   433,   434,   299,   300,
-     301,   302,   303,   304,   305,   490,   491,   492,   493,     0,
-     494,   495,   496,   497,   498,   499,   500,   306,   307,   308,
-     309,   310,   311,   435,   436,   437,   438,   439,   440,   441,
-     442,   312,   501,   313,   314,   315,   316,   317,   318,   319,
-     320,   321,   322,   323,   324,   325,   326,   327,   328,   329,
-     330,   331,   332,   333,   334,   335,   336,   337,   338,   339,
-     340,   341,   342,   343,     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,     0,     0,   422,   423,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   424,   425,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   489,   426,
-     427,   428,   429,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   294,   295,   296,   297,   298,     0,     0,     0,
-     430,   431,   432,   433,   434,   299,   300,   301,   302,   303,
-     304,   305,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   306,   307,   308,   309,   310,   311,
-     435,   436,   437,   438,   439,   440,   441,   442,   312,     0,
-     313,   314,   315,   316,   317,   318,   319,   320,   321,   322,
-     323,   324,   325,   326,   327,   328,   329,   330,   331,   332,
-     333,   334,   335,   336,   337,   338,   339,   340,   341,   342,
-     343,     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,     0,     0,   422,   423,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   424,   425,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   426,   427,   428,   429,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   294,
-     295,   296,   297,     0,     0,     0,     0,   430,   431,   432,
-     433,   434,   299,   300,   301,   302,   303,   304,   305,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   306,   307,   308,   309,   310,   311,   435,   436,   437,
-     438,   439,   440,   441,   442,   312,     0,   313,   314,   315,
-     316,   317,   318,   319,   320,   321,   322,   323,   324,   325,
-     326,   327,   328,   329,   330,   331,   332,   333,   334,   335,
-     336,   337,   338,   339,   340,   341,   342,   343,     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,
+     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,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   315,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   293,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   294,   295,   296,   297,
-     298,     0,     0,     0,     0,     0,     0,     0,     0,   299,
-     300,   301,   302,   303,   304,   305,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   306,   307,
-     308,   309,   310,   311,     0,     0,     0,     0,     0,     0,
-       0,     0,   312,     0,   313,   314,   315,   316,   317,   318,
-     319,   320,   321,   322,   323,   324,   325,   326,   327,   328,
-     329,   330,   331,   332,   333,   334,   335,   336,   337,   338,
-     339,   340,   341,   342,   343,     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,     0,     0,     0,
+     316,   317,   318,   319,   320,     0,     0,     0,     0,     0,
+       0,     0,     0,   321,   322,   323,   324,   325,   326,   327,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   387,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   294,   295,   296,   297,     0,     0,     0,
-       0,     0,     0,     0,     0,   388,   299,   300,   301,   302,
-     303,   304,   305,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   306,   307,   308,   309,   310,
-     311,     0,     0,     0,     0,     0,     0,     0,     0,   312,
-       0,   313,   314,   315,   316,   317,   318,   319,   320,   321,
-     322,   323,   324,   325,   326,   327,   328,   329,   330,   331,
-     332,   333,   334,   335,   336,   337,   338,   339,   340,   341,
-     342,   343,     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,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   557,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     294,   295,   296,   297,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   299,   300,   301,   302,   303,   304,   305,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   306,   307,   308,   309,   310,   311,     0,     0,
-       0,     0,     0,     0,     0,     0,   312,     0,   313,   314,
-     315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
-     325,   326,   327,   328,   329,   330,   331,   332,   333,   334,
-     335,   336,   337,   338,   339,   340,   341,   342,   343,     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,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   639,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   294,   295,   296,
-     297,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     299,   300,   301,   302,   303,   304,   305,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   306,
-     307,   308,   309,   310,   311,     0,     0,     0,     0,     0,
-       0,     0,     0,   312,     0,   313,   314,   315,   316,   317,
-     318,   319,   320,   321,   322,   323,   324,   325,   326,   327,
-     328,   329,   330,   331,   332,   333,   334,   335,   336,   337,
-     338,   339,   340,   341,   342,   343,     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,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   677,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   294,   295,   296,   297,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   299,   300,   301,
-     302,   303,   304,   305,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   306,   307,   308,   309,
-     310,   311,     0,     0,     0,     0,     0,     0,     0,     0,
-     312,     0,   313,   314,   315,   316,   317,   318,   319,   320,
-     321,   322,   323,   324,   325,   326,   327,   328,   329,   330,
-     331,   332,   333,   334,   335,   336,   337,   338,   339,   340,
-     341,   342,   343,     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,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   294,   295,   296,   297,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   299,   300,   301,   302,   303,   304,
-     305,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   306,   307,   308,   309,   310,   311,     0,
-       0,     0,     0,     0,     0,     0,     0,   312,     0,   313,
-     314,   315,   316,   317,   318,   319,   320,   321,   322,   323,
-     324,   325,   326,   327,   328,   329,   330,   331,   332,   333,
-     334,   335,   336,   337,   338,   339,   340,   341,   342,   343,
-       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,     0,     0,   422,   423,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   424,   425,     0,     0,     0,   529,   696,     0,
-       0,     0,     0,     0,   426,   427,   428,   429,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   430,   431,   432,   433,   434,
-     299,     0,     0,     0,     0,   304,   305,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   435,   436,   437,   438,   439,
-     440,   441,   442,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   325,     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,     0,
-       0,   422,   423,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     424,   425,     0,     0,   470,     0,     0,     0,     0,     0,
-       0,     0,   426,   427,   428,   429,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   430,   431,   432,   433,   434,   299,     0,
-       0,     0,     0,   304,   305,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   435,   436,   437,   438,   439,   440,   441,
-     442,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   325,     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,     0,     0,   422,
-     423,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   424,   425,
-       0,     0,     0,   529,     0,     0,     0,     0,     0,     0,
-     426,   427,   428,   429,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   430,   431,   432,   433,   434,   299,     0,     0,     0,
-       0,   304,   305,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   435,   436,   437,   438,   439,   440,   441,   442,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   325,     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,     0,     0,   422,   423,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   424,   425,     0,     0,
-     585,     0,     0,     0,     0,     0,     0,     0,   426,   427,
-     428,   429,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   430,
-     431,   432,   433,   434,   299,     0,     0,     0,     0,   304,
-     305,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   435,
-     436,   437,   438,   439,   440,   441,   442,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   325,     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,     0,     0,   422,   423,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   424,   425,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   597,   426,   427,   428,   429,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   430,   431,   432,
-     433,   434,   299,     0,     0,     0,     0,   304,   305,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   435,   436,   437,
-     438,   439,   440,   441,   442,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   325,
-       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,     0,     0,   422,   423,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   424,   425,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   426,   427,   428,   429,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   430,   431,   432,   433,   434,
-     299,     0,     0,     0,     0,   304,   305,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   435,   436,   437,   438,   439,
-     440,   441,   442,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   325,     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,   453,
-       0,   422,   423,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   471,     0,     0,     0,     0,     0,     0,
-     424,   425,     0,     0,     0,     0,     0,     0,     0,     0,
-     537,   538,   426,   427,   428,   429,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   430,   431,   432,   433,   434,   299,     0,
-       0,     0,   550,   304,   547,     0,     0,     0,     0,     0,
-       0,     0,     0,   471,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   435,   436,   437,   438,   439,   440,   441,
-     442,     0,   471,     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,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   634,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   640,   641,   642,   471,   471,   471,   471,   471,
-     471,   471,   471,   471,   471,   471,   471,   471,   471,   471,
-     471,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     471
-};
-
-static const yytype_int16 yycheck[] =
-{
-       0,   324,     0,   317,     0,   319,   319,   319,   464,     0,
-     319,   319,   326,   336,   327,   327,   317,   326,   326,   317,
-       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,   533,   327,    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,   357,   349,   416,   425,   589,   527,   515,   529,   405,
-     321,   532,   462,   386,   353,   299,   300,   304,   665,   392,
-     295,   296,   319,   297,   298,   318,   382,   361,   327,   326,
-     364,   378,   366,   367,   324,   374,   370,   327,   451,   349,
-     413,   414,   353,   317,   324,   319,   693,   357,   349,   323,
-     397,   335,   336,   340,   353,   365,   357,   365,   368,   365,
-     354,   318,   301,   302,   365,   359,   360,   324,   378,   465,
-     320,   353,   382,   704,   324,   335,   497,   378,   499,   324,
-     711,   382,   327,   321,   318,   593,   324,   397,   484,   327,
-     324,   722,   321,   318,   318,   318,   397,   318,   408,   324,
-     324,   324,   623,   324,   460,   318,   322,   408,   324,   559,
-     324,   324,   353,   327,   527,   462,   529,   464,   329,   532,
-     331,   542,   321,   306,   307,   308,   309,   310,   311,   312,
-     313,   314,   315,   546,   571,   572,   573,   574,   324,   324,
-     325,   327,   726,   326,   324,   324,   353,   327,   327,   353,
-     460,   319,   462,   327,   464,   676,   664,   324,   325,   460,
-     326,   462,   353,   464,   342,   343,   344,   332,   333,   334,
-     567,   568,   575,   576,   595,   569,   570,   627,   599,   318,
-     317,   554,   353,   319,   353,   339,   533,   338,   337,   303,
-     305,   320,   319,   317,   322,   716,   327,   327,   317,   317,
-     317,   614,   615,   325,   327,   515,   327,   317,   317,   353,
-     623,   353,   559,   318,   515,   353,   320,   320,   324,   317,
-     361,   320,   322,   533,   732,   318,   317,   353,   318,   321,
-     326,   318,   533,   327,   577,   321,   321,   578,   659,   327,
-     365,   322,   579,   581,   665,   580,   582,   682,   382,   559,
-     382,   298,   467,   553,   637,   667,   710,   722,   559,   723,
-     667,   525,   378,   676,   376,   693,   525,   525,   365,   684,
-      -1,    -1,   693,    -1,    -1,    -1,    -1,    -1,    -1,   589,
-     627,    -1,    -1,   593,   705,   698,   682,    -1,   589,    -1,
-      -1,    -1,   593,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     721,    -1,    -1,   716,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   627,   665,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   627,    -1,    -1,    -1,
-      -1,    -1,   688,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   693,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   664,   665,    -1,   667,    -1,    -1,
-      -1,    -1,    -1,   664,   665,    -1,   667,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   688,    -1,
-      -1,    -1,    -1,   693,    -1,    -1,    -1,   688,    -1,    -1,
-      -1,    -1,   693,    -1,   704,    -1,    -1,    -1,    -1,    -1,
-      -1,   711,    -1,   704,    -1,    -1,    -1,    -1,    -1,    -1,
-     711,    -1,   722,    -1,    -1,    -1,   726,    -1,    -1,    -1,
-      -1,   722,   732,    -1,    -1,   726,    -1,    -1,    -1,     0,
-      -1,   732,     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,    -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,   327,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     341,   342,   343,   344,   345,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   354,   355,   356,   357,   358,   359,   360,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   373,   374,   375,   376,   377,   378,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   387,    -1,   389,   390,
-     391,   392,   393,   394,   395,   396,   397,   398,   399,   400,
-     401,   402,   403,   404,   405,   406,   407,   408,   409,   410,
-     411,   412,   413,   414,   415,   416,   417,   418,   419,     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,    -1,    -1,   297,   298,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   316,   317,    -1,   319,    -1,   321,   322,    -1,
-      -1,    -1,    -1,   327,   328,   329,   330,   331,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   341,   342,   343,
-     344,   345,    -1,    -1,    -1,   349,   350,   351,   352,   353,
+       0,     0,     0,     0,     0,   328,   329,   330,   331,   332,
+     333,     0,     0,     0,     0,     0,     0,     0,     0,   334,
+       0,   335,   336,   337,   338,   339,   340,   341,   342,   343,
+     344,   345,   346,   347,   348,   349,   350,   351,   352,   353,
      354,   355,   356,   357,   358,   359,   360,   361,   362,   363,
-     364,    -1,   366,   367,   368,   369,   370,   371,   372,   373,
-     374,   375,   376,   377,   378,   379,   380,   381,   382,   383,
-     384,   385,   386,   387,   388,   389,   390,   391,   392,   393,
-     394,   395,   396,   397,   398,   399,   400,   401,   402,   403,
-     404,   405,   406,   407,   408,   409,   410,   411,   412,   413,
-     414,   415,   416,   417,   418,   419,     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,    -1,    -1,
-     297,   298,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   316,
-     317,    -1,   319,    -1,   321,   322,    -1,    -1,    -1,    -1,
-     327,   328,   329,   330,   331,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   341,   342,   343,   344,   345,    -1,
-      -1,    -1,   349,   350,   351,   352,   353,   354,   355,   356,
-     357,   358,   359,   360,   361,   362,   363,   364,    -1,   366,
-     367,   368,   369,   370,   371,   372,   373,   374,   375,   376,
-     377,   378,   379,   380,   381,   382,   383,   384,   385,   386,
-     387,   388,   389,   390,   391,   392,   393,   394,   395,   396,
-     397,   398,   399,   400,   401,   402,   403,   404,   405,   406,
-     407,   408,   409,   410,   411,   412,   413,   414,   415,   416,
-     417,   418,   419,     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,    -1,    -1,   297,   298,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   316,   317,    -1,   319,
-      -1,   321,    -1,    -1,    -1,    -1,    -1,   327,   328,   329,
-     330,   331,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   341,   342,   343,   344,   345,    -1,    -1,    -1,   349,
-     350,   351,   352,   353,   354,   355,   356,   357,   358,   359,
-     360,   361,   362,   363,   364,    -1,   366,   367,   368,   369,
-     370,   371,   372,   373,   374,   375,   376,   377,   378,   379,
-     380,   381,   382,   383,   384,   385,   386,   387,   388,   389,
-     390,   391,   392,   393,   394,   395,   396,   397,   398,   399,
-     400,   401,   402,   403,   404,   405,   406,   407,   408,   409,
-     410,   411,   412,   413,   414,   415,   416,   417,   418,   419,
-       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,    -1,    -1,   297,   298,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   316,   317,    -1,   319,    -1,   321,    -1,
-      -1,    -1,    -1,    -1,   327,   328,   329,   330,   331,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   341,   342,
-     343,   344,   345,    -1,    -1,    -1,   349,   350,   351,   352,
-     353,   354,   355,   356,   357,   358,   359,   360,   361,   362,
-     363,   364,    -1,   366,   367,   368,   369,   370,   371,   372,
-     373,   374,   375,   376,   377,   378,   379,   380,   381,   382,
-     383,   384,   385,   386,   387,   388,   389,   390,   391,   392,
-     393,   394,   395,   396,   397,   398,   399,   400,   401,   402,
-     403,   404,   405,   406,   407,   408,   409,   410,   411,   412,
-     413,   414,   415,   416,   417,   418,   419,     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,    -1,
-      -1,   297,   298,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     316,   317,    -1,   319,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   327,   328,   329,   330,   331,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   341,   342,   343,   344,   345,
-      -1,    -1,    -1,   349,   350,   351,   352,   353,   354,   355,
-     356,   357,   358,   359,   360,   361,   362,   363,   364,    -1,
-     366,   367,   368,   369,   370,   371,   372,   373,   374,   375,
-     376,   377,   378,   379,   380,   381,   382,   383,   384,   385,
-     386,   387,   388,   389,   390,   391,   392,   393,   394,   395,
-     396,   397,   398,   399,   400,   401,   402,   403,   404,   405,
-     406,   407,   408,   409,   410,   411,   412,   413,   414,   415,
-     416,   417,   418,   419,     3,     4,     5,     6,     7,     8,
+     364,   365,     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,
@@ -2726,61 +1746,66 @@
      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,    -1,    -1,   297,   298,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   316,   317,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   327,   328,
-     329,   330,   331,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   341,   342,   343,   344,   345,    -1,    -1,    -1,
-     349,   350,   351,   352,   353,   354,   355,   356,   357,   358,
-     359,   360,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   373,   374,   375,   376,   377,   378,
-     379,   380,   381,   382,   383,   384,   385,   386,   387,    -1,
-     389,   390,   391,   392,   393,   394,   395,   396,   397,   398,
-     399,   400,   401,   402,   403,   404,   405,   406,   407,   408,
-     409,   410,   411,   412,   413,   414,   415,   416,   417,   418,
-     419,     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,    -1,    -1,   297,   298,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   316,   317,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   328,   329,   330,   331,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   341,
-     342,   343,   344,    -1,    -1,    -1,    -1,   349,   350,   351,
-     352,   353,   354,   355,   356,   357,   358,   359,   360,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   373,   374,   375,   376,   377,   378,   379,   380,   381,
-     382,   383,   384,   385,   386,   387,    -1,   389,   390,   391,
-     392,   393,   394,   395,   396,   397,   398,   399,   400,   401,
-     402,   403,   404,   405,   406,   407,   408,   409,   410,   411,
-     412,   413,   414,   415,   416,   417,   418,   419,     3,     4,
+     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,   444,   445,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   446,   447,     0,
+     508,     0,   509,   510,     0,     0,     0,     0,   511,   448,
+     449,   450,   451,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   316,   317,   318,   319,   320,     0,     0,     0,
+     452,   453,   454,   455,   456,   321,   322,   323,   324,   325,
+     326,   327,   512,   513,   514,   515,     0,   516,   517,   518,
+     519,   520,   521,   522,   523,   524,   525,   328,   329,   330,
+     331,   332,   333,   457,   458,   459,   460,   461,   462,   463,
+     464,   334,   526,   335,   336,   337,   338,   339,   340,   341,
+     342,   343,   344,   345,   346,   347,   348,   349,   350,   351,
+     352,   353,   354,   355,   356,   357,   358,   359,   360,   361,
+     362,   363,   364,   365,     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,
+     444,   445,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   446,
+     447,     0,   508,     0,   509,   645,     0,     0,     0,     0,
+     511,   448,   449,   450,   451,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   316,   317,   318,   319,   320,     0,
+       0,     0,   452,   453,   454,   455,   456,   321,   322,   323,
+     324,   325,   326,   327,   512,   513,   514,   515,     0,   516,
+     517,   518,   519,   520,   521,   522,   523,   524,   525,   328,
+     329,   330,   331,   332,   333,   457,   458,   459,   460,   461,
+     462,   463,   464,   334,   526,   335,   336,   337,   338,   339,
+     340,   341,   342,   343,   344,   345,   346,   347,   348,   349,
+     350,   351,   352,   353,   354,   355,   356,   357,   358,   359,
+     360,   361,   362,   363,   364,   365,     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,
@@ -2810,61 +1835,66 @@
      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,
-      -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,   327,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   341,   342,   343,   344,
-     345,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   354,
-     355,   356,   357,   358,   359,   360,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   373,   374,
-     375,   376,   377,   378,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   387,    -1,   389,   390,   391,   392,   393,   394,
-     395,   396,   397,   398,   399,   400,   401,   402,   403,   404,
-     405,   406,   407,   408,   409,   410,   411,   412,   413,   414,
-     415,   416,   417,   418,   419,     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,    -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,   327,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   341,   342,   343,   344,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   353,   354,   355,   356,   357,
-     358,   359,   360,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   373,   374,   375,   376,   377,
-     378,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   387,
-      -1,   389,   390,   391,   392,   393,   394,   395,   396,   397,
-     398,   399,   400,   401,   402,   403,   404,   405,   406,   407,
-     408,   409,   410,   411,   412,   413,   414,   415,   416,   417,
-     418,   419,     3,     4,     5,     6,     7,     8,     9,    10,
+     295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
+     305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
+       0,     0,   444,   445,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   446,   447,     0,   508,     0,   509,     0,     0,     0,
+       0,     0,   511,   448,   449,   450,   451,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   316,   317,   318,   319,
+     320,     0,     0,     0,   452,   453,   454,   455,   456,   321,
+     322,   323,   324,   325,   326,   327,   512,   513,   514,   515,
+       0,   516,   517,   518,   519,   520,   521,   522,   523,   524,
+     525,   328,   329,   330,   331,   332,   333,   457,   458,   459,
+     460,   461,   462,   463,   464,   334,   526,   335,   336,   337,
+     338,   339,   340,   341,   342,   343,   344,   345,   346,   347,
+     348,   349,   350,   351,   352,   353,   354,   355,   356,   357,
+     358,   359,   360,   361,   362,   363,   364,   365,     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,   444,   445,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   446,   447,     0,   508,     0,   430,     0,
+       0,     0,     0,     0,   511,   448,   449,   450,   451,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   316,   317,
+     318,   319,   320,     0,     0,     0,   452,   453,   454,   455,
+     456,   321,   322,   323,   324,   325,   326,   327,   512,   513,
+     514,   515,     0,   516,   517,   518,   519,   520,   521,   522,
+     523,   524,   525,   328,   329,   330,   331,   332,   333,   457,
+     458,   459,   460,   461,   462,   463,   464,   334,   526,   335,
+     336,   337,   338,   339,   340,   341,   342,   343,   344,   345,
+     346,   347,   348,   349,   350,   351,   352,   353,   354,   355,
+     356,   357,   358,   359,   360,   361,   362,   363,   364,   365,
+       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,
@@ -2893,61 +1923,66 @@
      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,    -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,   322,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     341,   342,   343,   344,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   354,   355,   356,   357,   358,   359,   360,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   373,   374,   375,   376,   377,   378,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   387,    -1,   389,   390,
-     391,   392,   393,   394,   395,   396,   397,   398,   399,   400,
-     401,   402,   403,   404,   405,   406,   407,   408,   409,   410,
-     411,   412,   413,   414,   415,   416,   417,   418,   419,     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,    -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,   322,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   341,   342,   343,
-     344,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     354,   355,   356,   357,   358,   359,   360,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   373,
-     374,   375,   376,   377,   378,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   387,    -1,   389,   390,   391,   392,   393,
-     394,   395,   396,   397,   398,   399,   400,   401,   402,   403,
-     404,   405,   406,   407,   408,   409,   410,   411,   412,   413,
-     414,   415,   416,   417,   418,   419,     3,     4,     5,     6,
+     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,   444,   445,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   446,   447,     0,   508,     0,
+       0,     0,     0,     0,     0,     0,   511,   448,   449,   450,
+     451,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     316,   317,   318,   319,   320,     0,     0,     0,   452,   453,
+     454,   455,   456,   321,   322,   323,   324,   325,   326,   327,
+     512,   513,   514,   515,     0,   516,   517,   518,   519,   520,
+     521,   522,   523,   524,   525,   328,   329,   330,   331,   332,
+     333,   457,   458,   459,   460,   461,   462,   463,   464,   334,
+     526,   335,   336,   337,   338,   339,   340,   341,   342,   343,
+     344,   345,   346,   347,   348,   349,   350,   351,   352,   353,
+     354,   355,   356,   357,   358,   359,   360,   361,   362,   363,
+     364,   365,     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,   444,   445,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   446,   447,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   511,   448,
+     449,   450,   451,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   316,   317,   318,   319,   320,     0,     0,     0,
+     452,   453,   454,   455,   456,   321,   322,   323,   324,   325,
+     326,   327,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   328,   329,   330,
+     331,   332,   333,   457,   458,   459,   460,   461,   462,   463,
+     464,   334,     0,   335,   336,   337,   338,   339,   340,   341,
+     342,   343,   344,   345,   346,   347,   348,   349,   350,   351,
+     352,   353,   354,   355,   356,   357,   358,   359,   360,   361,
+     362,   363,   364,   365,     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,
@@ -2976,67 +2011,293 @@
      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,    -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,   322,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   341,   342,   343,   344,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   354,   355,   356,
-     357,   358,   359,   360,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   373,   374,   375,   376,
-     377,   378,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     387,    -1,   389,   390,   391,   392,   393,   394,   395,   396,
-     397,   398,   399,   400,   401,   402,   403,   404,   405,   406,
-     407,   408,   409,   410,   411,   412,   413,   414,   415,   416,
-     417,   418,   419,     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,    -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,   341,   342,   343,   344,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   354,   355,   356,   357,   358,   359,
-     360,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   373,   374,   375,   376,   377,   378,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   387,    -1,   389,
-     390,   391,   392,   393,   394,   395,   396,   397,   398,   399,
-     400,   401,   402,   403,   404,   405,   406,   407,   408,   409,
-     410,   411,   412,   413,   414,   415,   416,   417,   418,   419,
+     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,
+     444,   445,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   446,
+     447,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   448,   449,   450,   451,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   316,   317,   318,   319,     0,     0,
+       0,     0,   452,   453,   454,   455,   456,   321,   322,   323,
+     324,   325,   326,   327,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   328,
+     329,   330,   331,   332,   333,   457,   458,   459,   460,   461,
+     462,   463,   464,   334,     0,   335,   336,   337,   338,   339,
+     340,   341,   342,   343,   344,   345,   346,   347,   348,   349,
+     350,   351,   352,   353,   354,   355,   356,   357,   358,   359,
+     360,   361,   362,   363,   364,   365,     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,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   315,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   316,   317,   318,   319,
+     320,     0,     0,     0,     0,     0,     0,     0,     0,   321,
+     322,   323,   324,   325,   326,   327,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   328,   329,   330,   331,   332,   333,     0,     0,     0,
+       0,     0,     0,     0,     0,   334,     0,   335,   336,   337,
+     338,   339,   340,   341,   342,   343,   344,   345,   346,   347,
+     348,   349,   350,   351,   352,   353,   354,   355,   356,   357,
+     358,   359,   360,   361,   362,   363,   364,   365,     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,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   409,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   316,   317,
+     318,   319,     0,     0,     0,     0,     0,     0,     0,     0,
+     410,   321,   322,   323,   324,   325,   326,   327,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   328,   329,   330,   331,   332,   333,     0,
+       0,     0,     0,     0,     0,     0,     0,   334,     0,   335,
+     336,   337,   338,   339,   340,   341,   342,   343,   344,   345,
+     346,   347,   348,   349,   350,   351,   352,   353,   354,   355,
+     356,   357,   358,   359,   360,   361,   362,   363,   364,   365,
+       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,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   582,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     316,   317,   318,   319,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   321,   322,   323,   324,   325,   326,   327,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   328,   329,   330,   331,   332,
+     333,     0,     0,     0,     0,     0,     0,     0,     0,   334,
+       0,   335,   336,   337,   338,   339,   340,   341,   342,   343,
+     344,   345,   346,   347,   348,   349,   350,   351,   352,   353,
+     354,   355,   356,   357,   358,   359,   360,   361,   362,   363,
+     364,   365,     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,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   667,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   316,   317,   318,   319,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   321,   322,   323,   324,   325,
+     326,   327,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   328,   329,   330,
+     331,   332,   333,     0,     0,     0,     0,     0,     0,     0,
+       0,   334,     0,   335,   336,   337,   338,   339,   340,   341,
+     342,   343,   344,   345,   346,   347,   348,   349,   350,   351,
+     352,   353,   354,   355,   356,   357,   358,   359,   360,   361,
+     362,   363,   364,   365,     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,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   705,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   316,   317,   318,   319,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   321,   322,   323,
+     324,   325,   326,   327,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   328,
+     329,   330,   331,   332,   333,     0,     0,     0,     0,     0,
+       0,     0,     0,   334,     0,   335,   336,   337,   338,   339,
+     340,   341,   342,   343,   344,   345,   346,   347,   348,   349,
+     350,   351,   352,   353,   354,   355,   356,   357,   358,   359,
+     360,   361,   362,   363,   364,   365,     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,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   316,   317,   318,   319,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   321,
+     322,   323,   324,   325,   326,   327,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   328,   329,   330,   331,   332,   333,     0,     0,     0,
+       0,     0,     0,     0,     0,   334,     0,   335,   336,   337,
+     338,   339,   340,   341,   342,   343,   344,   345,   346,   347,
+     348,   349,   350,   351,   352,   353,   354,   355,   356,   357,
+     358,   359,   360,   361,   362,   363,   364,   365,     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,    -1,    -1,    63,
+      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,
@@ -3060,17 +2321,993 @@
      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,    -1,    -1,   297,   298,    -1,    -1,    -1,    -1,    -1,
+     294,   295,   296,   297,   298,   299,   300,   301,   302,   303,
+     304,   305,   306,   307,   308,   309,   310,   311,   312,   313,
+     314,     0,     0,   444,   445,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   446,   447,     0,     0,     0,   554,   724,     0,
+       0,     0,     0,     0,   448,   449,   450,   451,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   452,   453,   454,   455,   456,
+     321,     0,     0,     0,     0,   326,   327,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   457,   458,
+     459,   460,   461,   462,   463,   464,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     347,     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,   444,   445,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   446,   447,     0,     0,   492,
+       0,     0,     0,     0,     0,     0,     0,   448,   449,   450,
+     451,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   452,   453,
+     454,   455,   456,   321,     0,     0,     0,     0,   326,   327,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   457,   458,   459,   460,   461,   462,   463,   464,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   347,     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,   444,
+     445,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   446,   447,
+       0,     0,     0,   554,     0,     0,     0,     0,     0,     0,
+     448,   449,   450,   451,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   452,   453,   454,   455,   456,   321,     0,     0,     0,
+       0,   326,   327,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   457,   458,   459,   460,   461,   462,
+     463,   464,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   347,     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,   444,   445,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   446,   447,     0,     0,   610,     0,     0,     0,     0,
+       0,     0,     0,   448,   449,   450,   451,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   452,   453,   454,   455,   456,   321,
+       0,     0,     0,     0,   326,   327,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   457,   458,   459,
+     460,   461,   462,   463,   464,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   347,
+       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,   444,   445,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   446,   447,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   622,   448,   449,   450,   451,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   452,   453,   454,
+     455,   456,   321,     0,     0,     0,     0,   326,   327,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     457,   458,   459,   460,   461,   462,   463,   464,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   347,     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,   444,   445,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   446,   447,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   448,
+     449,   450,   451,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     452,   453,   454,   455,   456,   321,     0,     0,     0,     0,
+     326,   327,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   457,   458,   459,   460,   461,   462,   463,
+     464,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   347,     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,   444,   445,     0,     0,   475,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   493,
+     446,   447,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   448,   449,   450,   451,   562,   563,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   452,   453,   454,   455,   456,   321,     0,
+       0,     0,     0,   326,   572,     0,     0,     0,   575,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   493,
+       0,     0,     0,     0,     0,     0,   457,   458,   459,   460,
+     461,   462,   463,   464,     0,     0,     0,     0,   493,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   347,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   662,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   668,   669,   670,   493,   493,   493,   493,   493,   493,
+     493,   493,   493,   493,   493,   493,   493,   493,   493,   493,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   493
+};
+
+static const yytype_int16 yycheck[] =
+{
+       0,   732,     0,   341,     0,   486,   346,   383,   739,     0,
+     386,   349,   388,   389,   346,   339,   392,   349,   358,   750,
+       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,   558,   339,    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,   379,   447,   371,   540,   438,   552,   427,
+     554,   408,   484,   557,   343,   614,   326,   414,   321,   322,
+     693,   341,   339,   346,   341,   319,   320,   340,   404,   349,
+     349,   348,   340,   346,   400,   375,   341,   341,   435,   436,
+     375,   371,   473,   348,   348,   339,   375,   341,   721,   379,
+     371,   345,   362,   419,   357,   358,   375,   387,   379,   387,
+     390,   387,   376,   349,   399,   341,   387,   381,   382,   487,
+     400,   340,   348,   357,   404,   340,   519,   346,   521,   400,
+     340,   346,   343,   404,   618,   340,   346,   343,   506,   419,
+     346,   346,   375,   349,   346,   340,   340,   349,   419,   342,
+     430,   346,   346,   346,   343,   346,   482,   651,   349,   430,
+     323,   324,   584,   596,   597,   598,   599,   375,   484,   346,
+     486,   552,   349,   554,   567,   375,   557,   328,   329,   330,
+     331,   332,   333,   334,   335,   336,   337,   341,   346,   346,
+     571,   349,   349,   364,   365,   366,   349,   348,   354,   355,
+     356,   351,   482,   353,   484,   754,   486,   344,   692,   346,
+     704,   482,   348,   484,   375,   486,   317,   318,   346,   347,
+     346,   347,   592,   593,   340,   594,   595,   620,   600,   601,
+     339,   624,   579,   655,   341,   375,   375,   361,   360,   359,
+     325,   327,   558,   342,   341,   339,   344,   349,   339,   349,
+     744,   339,   339,   349,   347,   344,   375,   349,   339,   349,
+     540,   642,   643,   339,   375,   349,   349,   340,   584,   540,
+     651,   342,   375,   342,   346,   339,   760,   383,   558,   342,
+     375,   340,   339,   343,   340,   340,   348,   558,   349,   343,
+     343,   349,   344,   602,   687,   603,   606,   604,   710,   605,
+     693,   489,   607,   320,   584,   387,   578,   665,   695,   738,
+     750,   695,   751,   584,   721,   550,   712,   387,   550,   550,
+      -1,   400,    -1,   704,   404,    -1,   404,    -1,   721,    -1,
+     398,    -1,    -1,    -1,   614,    -1,    -1,    -1,   618,   655,
+     733,    -1,   710,   614,    -1,   726,    -1,   618,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   749,    -1,    -1,    -1,
+      -1,    -1,    -1,   744,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   655,    -1,   693,    -1,    -1,
+      -1,    -1,    -1,    -1,   655,    -1,    -1,    -1,    -1,    -1,
+     716,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   721,    -1,    -1,    -1,    -1,
+      -1,    -1,   692,   693,    -1,   695,    -1,    -1,    -1,    -1,
+      -1,   692,   693,    -1,   695,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   716,    -1,    -1,    -1,
+      -1,   721,    -1,    -1,    -1,   716,    -1,    -1,    -1,    -1,
+     721,    -1,   732,    -1,    -1,    -1,    -1,    -1,    -1,   739,
+      -1,   732,    -1,    -1,    -1,    -1,    -1,    -1,   739,    -1,
+     750,    -1,    -1,    -1,   754,    -1,    -1,    -1,    -1,   750,
+     760,    -1,    -1,   754,    -1,    -1,    -1,     0,    -1,   760,
+       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,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   316,   317,    -1,    -1,    -1,   321,   322,    -1,
-      -1,    -1,    -1,    -1,   328,   329,   330,   331,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   349,   350,   351,   352,   353,
-     354,    -1,    -1,    -1,    -1,   359,   360,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   349,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   379,   380,   381,   382,   383,
-     384,   385,   386,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   401,     4,     5,
+     363,   364,   365,   366,   367,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   376,   377,   378,   379,   380,   381,   382,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   398,   399,   400,   401,   402,
+     403,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   412,
+      -1,   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,     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,   319,   320,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   338,   339,    -1,
+     341,    -1,   343,   344,    -1,    -1,    -1,    -1,   349,   350,
+     351,   352,   353,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   363,   364,   365,   366,   367,    -1,    -1,    -1,
+     371,   372,   373,   374,   375,   376,   377,   378,   379,   380,
+     381,   382,   383,   384,   385,   386,    -1,   388,   389,   390,
+     391,   392,   393,   394,   395,   396,   397,   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,     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,
+     319,   320,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   338,
+     339,    -1,   341,    -1,   343,   344,    -1,    -1,    -1,    -1,
+     349,   350,   351,   352,   353,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   363,   364,   365,   366,   367,    -1,
+      -1,    -1,   371,   372,   373,   374,   375,   376,   377,   378,
+     379,   380,   381,   382,   383,   384,   385,   386,    -1,   388,
+     389,   390,   391,   392,   393,   394,   395,   396,   397,   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,     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,   319,   320,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   338,   339,    -1,   341,    -1,   343,    -1,    -1,    -1,
+      -1,    -1,   349,   350,   351,   352,   353,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   363,   364,   365,   366,
+     367,    -1,    -1,    -1,   371,   372,   373,   374,   375,   376,
+     377,   378,   379,   380,   381,   382,   383,   384,   385,   386,
+      -1,   388,   389,   390,   391,   392,   393,   394,   395,   396,
+     397,   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,     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,   319,   320,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   338,   339,    -1,   341,    -1,   343,    -1,
+      -1,    -1,    -1,    -1,   349,   350,   351,   352,   353,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   363,   364,
+     365,   366,   367,    -1,    -1,    -1,   371,   372,   373,   374,
+     375,   376,   377,   378,   379,   380,   381,   382,   383,   384,
+     385,   386,    -1,   388,   389,   390,   391,   392,   393,   394,
+     395,   396,   397,   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,
+       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,   319,   320,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   338,   339,    -1,   341,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   349,   350,   351,   352,
+     353,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     363,   364,   365,   366,   367,    -1,    -1,    -1,   371,   372,
+     373,   374,   375,   376,   377,   378,   379,   380,   381,   382,
+     383,   384,   385,   386,    -1,   388,   389,   390,   391,   392,
+     393,   394,   395,   396,   397,   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,     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,   319,   320,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   338,   339,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   349,   350,
+     351,   352,   353,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   363,   364,   365,   366,   367,    -1,    -1,    -1,
+     371,   372,   373,   374,   375,   376,   377,   378,   379,   380,
+     381,   382,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   398,   399,   400,
+     401,   402,   403,   404,   405,   406,   407,   408,   409,   410,
+     411,   412,    -1,   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,     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,
+     319,   320,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   338,
+     339,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   350,   351,   352,   353,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   363,   364,   365,   366,    -1,    -1,
+      -1,    -1,   371,   372,   373,   374,   375,   376,   377,   378,
+     379,   380,   381,   382,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   398,
+     399,   400,   401,   402,   403,   404,   405,   406,   407,   408,
+     409,   410,   411,   412,    -1,   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,     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,    -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,   349,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   363,   364,   365,   366,
+     367,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   376,
+     377,   378,   379,   380,   381,   382,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   398,   399,   400,   401,   402,   403,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   412,    -1,   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,     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,    -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,   349,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   363,   364,
+     365,   366,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     375,   376,   377,   378,   379,   380,   381,   382,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   398,   399,   400,   401,   402,   403,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   412,    -1,   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,
+       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,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   344,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     363,   364,   365,   366,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   376,   377,   378,   379,   380,   381,   382,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   398,   399,   400,   401,   402,
+     403,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   412,
+      -1,   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,     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,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   344,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   363,   364,   365,   366,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   376,   377,   378,   379,   380,
+     381,   382,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   398,   399,   400,
+     401,   402,   403,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   412,    -1,   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,     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,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   344,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   363,   364,   365,   366,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   376,   377,   378,
+     379,   380,   381,   382,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   398,
+     399,   400,   401,   402,   403,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   412,    -1,   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,     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,    -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,   363,   364,   365,   366,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   376,
+     377,   378,   379,   380,   381,   382,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   398,   399,   400,   401,   402,   403,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   412,    -1,   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,     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,
@@ -3099,58 +3336,63 @@
      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,    -1,
-      -1,   297,   298,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     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,   319,   320,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     316,   317,    -1,    -1,   320,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   328,   329,   330,   331,    -1,    -1,    -1,    -1,
+      -1,    -1,   338,   339,    -1,    -1,    -1,   343,   344,    -1,
+      -1,    -1,    -1,    -1,   350,   351,   352,   353,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   349,   350,   351,   352,   353,   354,    -1,
-      -1,    -1,    -1,   359,   360,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   371,   372,   373,   374,   375,
+     376,    -1,    -1,    -1,    -1,   381,   382,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   379,   380,   381,   382,   383,   384,   385,
-     386,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   401,     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,    -1,    -1,   297,
-     298,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   316,   317,
-      -1,    -1,    -1,   321,    -1,    -1,    -1,    -1,    -1,    -1,
-     328,   329,   330,   331,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   404,   405,
+     406,   407,   408,   409,   410,   411,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   349,   350,   351,   352,   353,   354,    -1,    -1,    -1,
-      -1,   359,   360,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     426,     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,   319,   320,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   379,   380,   381,   382,   383,   384,   385,   386,    -1,
+      -1,    -1,    -1,    -1,    -1,   338,   339,    -1,    -1,   342,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   350,   351,   352,
+     353,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   371,   372,
+     373,   374,   375,   376,    -1,    -1,    -1,    -1,   381,   382,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   401,     4,     5,     6,     7,     8,     9,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   404,   405,   406,   407,   408,   409,   410,   411,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   426,     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,
@@ -3179,57 +3421,62 @@
      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,    -1,    -1,   297,   298,    -1,
+     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,   319,
+     320,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   338,   339,
+      -1,    -1,    -1,   343,    -1,    -1,    -1,    -1,    -1,    -1,
+     350,   351,   352,   353,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   316,   317,    -1,    -1,
-     320,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   328,   329,
-     330,   331,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   349,
-     350,   351,   352,   353,   354,    -1,    -1,    -1,    -1,   359,
-     360,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   379,
-     380,   381,   382,   383,   384,   385,   386,    -1,    -1,    -1,
+      -1,   371,   372,   373,   374,   375,   376,    -1,    -1,    -1,
+      -1,   381,   382,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   401,     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,    -1,    -1,   297,   298,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   404,   405,   406,   407,   408,   409,
+     410,   411,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   426,     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,   319,   320,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   316,   317,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   327,   328,   329,   330,   331,
+      -1,   338,   339,    -1,    -1,   342,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   350,   351,   352,   353,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   349,   350,   351,
-     352,   353,   354,    -1,    -1,    -1,    -1,   359,   360,    -1,
+      -1,    -1,    -1,    -1,   371,   372,   373,   374,   375,   376,
+      -1,    -1,    -1,    -1,   381,   382,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   379,   380,   381,
-     382,   383,   384,   385,   386,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   401,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   404,   405,   406,
+     407,   408,   409,   410,   411,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   426,
        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,
@@ -3259,66 +3506,113 @@
      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,    -1,    -1,   297,   298,    -1,    -1,    -1,    -1,    -1,
+     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,   319,   320,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   316,   317,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   328,   329,   330,   331,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   338,   339,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,   349,   350,   351,   352,   353,
-     354,    -1,    -1,    -1,    -1,   359,   360,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   379,   380,   381,   382,   383,
-     384,   385,   386,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   401,     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,   391,
-      -1,   297,   298,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   405,    -1,    -1,    -1,    -1,    -1,    -1,
-     316,   317,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     422,   423,   328,   329,   330,   331,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   371,   372,   373,
+     374,   375,   376,    -1,    -1,    -1,    -1,   381,   382,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   349,   350,   351,   352,   353,   354,    -1,
-      -1,    -1,   454,   359,   360,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   465,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   379,   380,   381,   382,   383,   384,   385,
-     386,    -1,   484,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   401,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     404,   405,   406,   407,   408,   409,   410,   411,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   426,     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,   319,   320,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   338,   339,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   350,
+     351,   352,   353,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     371,   372,   373,   374,   375,   376,    -1,    -1,    -1,    -1,
+     381,   382,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   404,   405,   406,   407,   408,   409,   410,
+     411,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   426,     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,   319,   320,    -1,    -1,   413,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   427,
+     338,   339,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   350,   351,   352,   353,   444,   445,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   371,   372,   373,   374,   375,   376,    -1,
+      -1,    -1,    -1,   381,   382,    -1,    -1,    -1,   476,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   487,
+      -1,    -1,    -1,    -1,    -1,    -1,   404,   405,   406,   407,
+     408,   409,   410,   411,    -1,    -1,    -1,    -1,   506,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   426,    -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,   551,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   564,   565,   566,   567,   568,   569,   570,   571,
-     572,   573,   574,   575,   576,   577,   578,   579,   580,   581,
-     582,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   576,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   589,   590,   591,   592,   593,   594,   595,   596,   597,
+     598,   599,   600,   601,   602,   603,   604,   605,   606,   607,
       -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,
@@ -3328,12 +3622,13 @@
       -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,
-     682
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   710
 };
 
   /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
      symbol of state STATE-NUM.  */
-static const yytype_uint16 yystos[] =
+static const yytype_int16 yystos[] =
 {
        0,     3,     4,     5,     6,     7,     8,     9,    10,    11,
       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
@@ -3364,120 +3659,125 @@
      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,   327,   341,   342,   343,   344,   345,   354,
-     355,   356,   357,   358,   359,   360,   373,   374,   375,   376,
-     377,   378,   387,   389,   390,   391,   392,   393,   394,   395,
-     396,   397,   398,   399,   400,   401,   402,   403,   404,   405,
-     406,   407,   408,   409,   410,   411,   412,   413,   414,   415,
-     416,   417,   418,   419,   451,   452,   455,   456,   457,   458,
-     462,   463,   464,   465,   466,   467,   470,   471,   472,   473,
-     474,   476,   481,   482,   483,   524,   525,   526,   482,   321,
-     353,   317,   317,   327,   353,   327,   527,   318,   324,   459,
-     460,   461,   471,   476,   324,   327,   353,   327,   353,   472,
-     476,   335,   478,   479,     0,   525,   476,   485,   321,   353,
-     374,   468,   469,   353,   475,   319,   327,   477,   321,   503,
-     460,   459,   461,   353,   353,   317,   326,   477,   321,   324,
-     327,   454,   297,   298,   316,   317,   328,   329,   330,   331,
-     349,   350,   351,   352,   353,   379,   380,   381,   382,   383,
-     384,   385,   386,   421,   422,   423,   425,   426,   427,   428,
-     429,   430,   431,   432,   433,   474,   476,   480,   477,   327,
-     471,   476,   486,   487,   484,   326,   318,   324,   318,   324,
-     320,   432,   434,   435,   436,   437,   438,   439,   440,   441,
-     442,   443,   444,   445,   319,   327,   319,   321,   322,   327,
-     361,   362,   363,   364,   366,   367,   368,   369,   370,   371,
-     372,   388,   432,   445,   447,   449,   451,   455,   474,   476,
-     492,   493,   494,   495,   496,   504,   505,   506,   507,   510,
-     511,   514,   515,   516,   523,   528,   477,   326,   477,   321,
-     447,   490,   326,   453,   353,   324,   327,   432,   432,   449,
-     297,   298,   319,   323,   318,   318,   324,   360,   447,   317,
-     432,   324,   336,   476,   353,   488,   489,   322,   487,   486,
-     445,   450,   469,   353,   332,   333,   334,   329,   331,   295,
-     296,   299,   300,   335,   336,   301,   302,   339,   338,   337,
-     303,   305,   304,   340,   320,   320,   445,   319,   322,   497,
-     317,   327,   327,   518,   317,   317,   327,   327,   449,   317,
-     449,   325,   327,   306,   307,   308,   309,   310,   311,   312,
-     313,   314,   315,   326,   448,   324,   327,   322,   493,   507,
-     511,   516,   490,   326,   490,   491,   490,   486,   353,   318,
-     424,   449,   353,   447,   432,   488,   477,   324,   327,   322,
-     432,   432,   432,   434,   434,   435,   435,   436,   436,   436,
-     436,   437,   437,   438,   439,   440,   441,   442,   443,   446,
-     320,   353,   529,   530,   504,   517,   493,   519,   449,   327,
-     449,   325,   447,   447,   490,   322,   324,   322,   320,   327,
-     489,   449,   317,   320,   324,   498,   449,   464,   471,   509,
-     361,   492,   505,   520,   318,   318,   322,   490,   325,   450,
-     320,   530,   322,   353,   318,   317,   509,   521,   522,   500,
-     501,   502,   508,   512,   447,   318,   326,   494,   499,   503,
-     449,   327,   318,   365,   496,   494,   321,   490,   318,   449,
-     499,   500,   504,   513,   327,   322
+     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,   349,   363,   364,   365,   366,
+     367,   376,   377,   378,   379,   380,   381,   382,   398,   399,
+     400,   401,   402,   403,   412,   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,   476,   477,   480,   481,
+     482,   483,   487,   488,   489,   490,   491,   492,   495,   496,
+     497,   498,   499,   501,   506,   507,   508,   549,   550,   551,
+     507,   343,   375,   339,   339,   349,   375,   349,   552,   340,
+     346,   484,   485,   486,   496,   501,   346,   349,   375,   349,
+     375,   497,   501,   357,   503,   504,     0,   550,   501,   510,
+     343,   375,   399,   493,   494,   375,   500,   341,   349,   502,
+     343,   528,   485,   484,   486,   375,   375,   339,   348,   502,
+     343,   346,   349,   479,   319,   320,   338,   339,   350,   351,
+     352,   353,   371,   372,   373,   374,   375,   404,   405,   406,
+     407,   408,   409,   410,   411,   446,   447,   448,   450,   451,
+     452,   453,   454,   455,   456,   457,   458,   499,   501,   505,
+     502,   349,   496,   501,   511,   512,   509,   348,   340,   346,
+     340,   346,   342,   457,   459,   460,   461,   462,   463,   464,
+     465,   466,   467,   468,   469,   470,   341,   349,   341,   343,
+     344,   349,   383,   384,   385,   386,   388,   389,   390,   391,
+     392,   393,   394,   395,   396,   397,   413,   457,   470,   472,
+     474,   476,   480,   499,   501,   517,   518,   519,   520,   521,
+     529,   530,   531,   532,   535,   536,   539,   540,   541,   548,
+     553,   502,   348,   502,   343,   472,   515,   348,   478,   375,
+     346,   349,   457,   457,   474,   319,   320,   341,   345,   340,
+     340,   346,   382,   472,   339,   457,   346,   358,   501,   375,
+     513,   514,   344,   512,   511,   470,   475,   494,   375,   354,
+     355,   356,   351,   353,   317,   318,   321,   322,   357,   358,
+     323,   324,   361,   360,   359,   325,   327,   326,   362,   342,
+     342,   470,   341,   344,   522,   339,   349,   349,   543,   339,
+     339,   349,   349,   474,   339,   474,   347,   349,   349,   349,
+     349,   328,   329,   330,   331,   332,   333,   334,   335,   336,
+     337,   348,   473,   346,   349,   344,   518,   532,   536,   541,
+     515,   348,   515,   516,   515,   511,   375,   340,   449,   474,
+     375,   472,   457,   513,   502,   346,   349,   344,   457,   457,
+     457,   459,   459,   460,   460,   461,   461,   461,   461,   462,
+     462,   463,   464,   465,   466,   467,   468,   471,   342,   375,
+     554,   555,   529,   542,   518,   544,   474,   349,   474,   347,
+     472,   472,   515,   344,   346,   344,   342,   349,   514,   474,
+     339,   342,   346,   523,   474,   489,   496,   534,   383,   517,
+     530,   545,   340,   340,   344,   515,   347,   475,   342,   555,
+     344,   375,   340,   339,   534,   546,   547,   525,   526,   527,
+     533,   537,   472,   340,   348,   519,   524,   528,   474,   349,
+     340,   387,   521,   519,   343,   515,   340,   474,   524,   525,
+     529,   538,   349,   344
 };
 
   /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
-static const yytype_uint16 yyr1[] =
+static const yytype_int16 yyr1[] =
 {
-       0,   420,   421,   422,   422,   422,   422,   422,   422,   422,
-     422,   422,   422,   422,   422,   422,   422,   422,   423,   423,
-     423,   423,   423,   423,   424,   425,   426,   427,   427,   428,
-     428,   429,   429,   430,   431,   431,   431,   432,   432,   432,
-     432,   433,   433,   433,   433,   434,   434,   434,   434,   435,
-     435,   435,   436,   436,   436,   437,   437,   437,   437,   437,
-     438,   438,   438,   439,   439,   440,   440,   441,   441,   442,
-     442,   443,   443,   444,   444,   445,   446,   445,   447,   447,
-     448,   448,   448,   448,   448,   448,   448,   448,   448,   448,
-     448,   449,   449,   450,   451,   451,   451,   451,   451,   451,
-     451,   451,   451,   453,   452,   454,   454,   455,   456,   456,
-     457,   457,   458,   459,   459,   460,   460,   460,   460,   461,
-     462,   462,   462,   462,   462,   463,   463,   463,   463,   463,
-     464,   464,   465,   466,   466,   466,   466,   466,   466,   466,
-     466,   467,   468,   468,   469,   469,   469,   470,   471,   471,
-     472,   472,   472,   472,   472,   472,   472,   473,   473,   473,
+       0,   445,   446,   447,   447,   447,   447,   447,   447,   447,
+     447,   447,   447,   447,   447,   447,   447,   447,   448,   448,
+     448,   448,   448,   448,   449,   450,   451,   452,   452,   453,
+     453,   454,   454,   455,   456,   456,   456,   457,   457,   457,
+     457,   458,   458,   458,   458,   459,   459,   459,   459,   460,
+     460,   460,   461,   461,   461,   462,   462,   462,   462,   462,
+     463,   463,   463,   464,   464,   465,   465,   466,   466,   467,
+     467,   468,   468,   469,   469,   470,   471,   470,   472,   472,
      473,   473,   473,   473,   473,   473,   473,   473,   473,   473,
-     473,   473,   473,   473,   473,   473,   473,   473,   473,   473,
-     473,   473,   473,   473,   473,   473,   473,   473,   473,   473,
-     473,   473,   474,   475,   475,   476,   476,   477,   477,   477,
-     477,   478,   478,   479,   480,   480,   481,   481,   481,   481,
-     481,   481,   481,   481,   481,   481,   481,   481,   481,   481,
-     481,   481,   481,   481,   481,   481,   481,   481,   481,   481,
-     481,   481,   481,   481,   481,   481,   481,   481,   481,   481,
-     481,   481,   481,   481,   481,   481,   481,   481,   481,   481,
-     481,   481,   481,   481,   481,   481,   481,   481,   481,   481,
-     481,   481,   481,   481,   481,   481,   481,   481,   481,   481,
-     481,   481,   481,   481,   481,   481,   481,   481,   481,   481,
-     481,   481,   481,   481,   481,   481,   481,   481,   481,   481,
-     481,   481,   481,   481,   481,   481,   481,   481,   481,   481,
-     481,   481,   481,   481,   481,   481,   481,   481,   481,   481,
-     481,   481,   481,   481,   481,   481,   481,   481,   481,   481,
-     481,   481,   481,   481,   481,   481,   481,   481,   481,   481,
-     481,   481,   481,   481,   481,   481,   481,   481,   481,   481,
-     481,   481,   481,   481,   481,   481,   481,   481,   481,   481,
-     481,   481,   481,   481,   481,   481,   481,   481,   481,   481,
-     481,   481,   481,   481,   481,   481,   481,   481,   481,   481,
-     481,   481,   481,   481,   481,   481,   481,   481,   481,   481,
-     481,   481,   481,   481,   481,   481,   481,   481,   481,   481,
-     481,   481,   481,   481,   481,   481,   481,   481,   481,   481,
-     481,   481,   481,   481,   481,   481,   481,   481,   481,   481,
-     481,   481,   481,   481,   481,   481,   481,   481,   481,   481,
-     481,   481,   481,   481,   481,   481,   481,   481,   481,   481,
-     481,   481,   481,   481,   481,   481,   481,   481,   481,   481,
-     481,   481,   481,   481,   481,   481,   481,   481,   481,   481,
-     481,   481,   481,   481,   481,   481,   481,   481,   481,   481,
-     481,   481,   481,   481,   481,   481,   481,   481,   481,   481,
-     481,   481,   481,   481,   481,   481,   481,   481,   481,   481,
-     481,   481,   481,   481,   481,   481,   481,   481,   481,   481,
-     481,   481,   481,   481,   481,   481,   481,   481,   482,   482,
-     482,   484,   483,   485,   483,   486,   486,   487,   487,   488,
-     488,   489,   489,   490,   490,   490,   491,   491,   492,   493,
-     493,   494,   494,   494,   494,   494,   494,   494,   494,   495,
-     496,   497,   498,   496,   499,   499,   501,   500,   502,   500,
-     503,   503,   504,   504,   505,   505,   506,   506,   507,   508,
-     508,   509,   509,   510,   510,   512,   511,   513,   513,   514,
-     514,   515,   515,   517,   516,   518,   516,   519,   516,   520,
-     520,   521,   521,   522,   522,   523,   523,   523,   523,   523,
-     524,   524,   525,   525,   525,   527,   526,   528,   529,   529,
-     530,   530
+     473,   474,   474,   475,   476,   476,   476,   476,   476,   476,
+     476,   476,   476,   478,   477,   479,   479,   480,   481,   481,
+     482,   482,   483,   484,   484,   485,   485,   485,   485,   486,
+     487,   487,   487,   487,   487,   488,   488,   488,   488,   488,
+     489,   489,   490,   491,   491,   491,   491,   491,   491,   491,
+     491,   492,   493,   493,   494,   494,   494,   495,   496,   496,
+     497,   497,   497,   497,   497,   497,   497,   498,   498,   498,
+     498,   498,   498,   498,   498,   498,   498,   498,   498,   498,
+     498,   498,   498,   498,   498,   498,   498,   498,   498,   498,
+     498,   498,   498,   498,   498,   498,   498,   498,   498,   498,
+     498,   498,   499,   500,   500,   501,   501,   502,   502,   502,
+     502,   503,   503,   504,   505,   505,   506,   506,   506,   506,
+     506,   506,   506,   506,   506,   506,   506,   506,   506,   506,
+     506,   506,   506,   506,   506,   506,   506,   506,   506,   506,
+     506,   506,   506,   506,   506,   506,   506,   506,   506,   506,
+     506,   506,   506,   506,   506,   506,   506,   506,   506,   506,
+     506,   506,   506,   506,   506,   506,   506,   506,   506,   506,
+     506,   506,   506,   506,   506,   506,   506,   506,   506,   506,
+     506,   506,   506,   506,   506,   506,   506,   506,   506,   506,
+     506,   506,   506,   506,   506,   506,   506,   506,   506,   506,
+     506,   506,   506,   506,   506,   506,   506,   506,   506,   506,
+     506,   506,   506,   506,   506,   506,   506,   506,   506,   506,
+     506,   506,   506,   506,   506,   506,   506,   506,   506,   506,
+     506,   506,   506,   506,   506,   506,   506,   506,   506,   506,
+     506,   506,   506,   506,   506,   506,   506,   506,   506,   506,
+     506,   506,   506,   506,   506,   506,   506,   506,   506,   506,
+     506,   506,   506,   506,   506,   506,   506,   506,   506,   506,
+     506,   506,   506,   506,   506,   506,   506,   506,   506,   506,
+     506,   506,   506,   506,   506,   506,   506,   506,   506,   506,
+     506,   506,   506,   506,   506,   506,   506,   506,   506,   506,
+     506,   506,   506,   506,   506,   506,   506,   506,   506,   506,
+     506,   506,   506,   506,   506,   506,   506,   506,   506,   506,
+     506,   506,   506,   506,   506,   506,   506,   506,   506,   506,
+     506,   506,   506,   506,   506,   506,   506,   506,   506,   506,
+     506,   506,   506,   506,   506,   506,   506,   506,   506,   506,
+     506,   506,   506,   506,   506,   506,   506,   506,   506,   506,
+     506,   506,   506,   506,   506,   506,   506,   506,   506,   506,
+     506,   506,   506,   506,   506,   506,   506,   506,   506,   506,
+     506,   506,   506,   506,   506,   506,   506,   506,   506,   506,
+     506,   506,   506,   506,   506,   506,   506,   506,   506,   506,
+     506,   506,   506,   506,   506,   506,   506,   506,   506,   506,
+     506,   506,   506,   506,   506,   506,   506,   506,   506,   506,
+     506,   506,   506,   506,   506,   506,   506,   506,   506,   506,
+     507,   507,   507,   509,   508,   510,   508,   511,   511,   512,
+     512,   513,   513,   514,   514,   515,   515,   515,   516,   516,
+     517,   518,   518,   519,   519,   519,   519,   519,   519,   519,
+     519,   520,   521,   522,   523,   521,   524,   524,   526,   525,
+     527,   525,   528,   528,   529,   529,   530,   530,   531,   531,
+     532,   533,   533,   534,   534,   535,   535,   537,   536,   538,
+     538,   539,   539,   540,   540,   542,   541,   543,   541,   544,
+     541,   545,   545,   546,   546,   547,   547,   548,   548,   548,
+     548,   548,   548,   548,   548,   549,   549,   550,   550,   550,
+     552,   551,   553,   554,   554,   555,   555
 };
 
   /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
-static const yytype_uint8 yyr2[] =
+static const yytype_int8 yyr2[] =
 {
        0,     2,     1,     1,     3,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     4,
@@ -3529,23 +3829,25 @@
        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,     0,     6,     0,     5,     1,     2,     3,     4,     1,
-       3,     1,     2,     1,     3,     4,     1,     3,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     2,
-       2,     0,     0,     5,     1,     1,     0,     2,     0,     2,
-       2,     3,     1,     2,     1,     2,     1,     2,     5,     3,
-       1,     1,     4,     1,     2,     0,     8,     0,     1,     3,
-       2,     1,     2,     0,     6,     0,     8,     0,     7,     1,
-       1,     1,     0,     2,     3,     2,     2,     2,     3,     2,
-       1,     2,     1,     1,     1,     0,     3,     5,     1,     3,
-       1,     4
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     0,     6,     0,     5,     1,     2,     3,
+       4,     1,     3,     1,     2,     1,     3,     4,     1,     3,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     2,     2,     0,     0,     5,     1,     1,     0,     2,
+       0,     2,     2,     3,     1,     2,     1,     2,     1,     2,
+       5,     3,     1,     1,     4,     1,     2,     0,     8,     0,
+       1,     3,     2,     1,     2,     0,     6,     0,     8,     0,
+       7,     1,     1,     1,     0,     2,     3,     2,     2,     2,
+       3,     2,     2,     2,     2,     1,     2,     1,     1,     1,
+       0,     3,     5,     1,     3,     1,     4
 };
 
 
+enum { YYENOMEM = -2 };
+
 #define yyerrok         (yyerrstatus = 0)
 #define yyclearin       (yychar = YYEMPTY)
-#define YYEMPTY         (-2)
-#define YYEOF           0
 
 #define YYACCEPT        goto yyacceptlab
 #define YYABORT         goto yyabortlab
@@ -3554,27 +3856,26 @@
 
 #define YYRECOVERING()  (!!yyerrstatus)
 
-#define YYBACKUP(Token, Value)                                  \
-do                                                              \
-  if (yychar == YYEMPTY)                                        \
-    {                                                           \
-      yychar = (Token);                                         \
-      yylval = (Value);                                         \
-      YYPOPSTACK (yylen);                                       \
-      yystate = *yyssp;                                         \
-      goto yybackup;                                            \
-    }                                                           \
-  else                                                          \
-    {                                                           \
-      yyerror (pParseContext, YY_("syntax error: cannot back up")); \
-      YYERROR;                                                  \
-    }                                                           \
-while (0)
+#define YYBACKUP(Token, Value)                                    \
+  do                                                              \
+    if (yychar == YYEMPTY)                                        \
+      {                                                           \
+        yychar = (Token);                                         \
+        yylval = (Value);                                         \
+        YYPOPSTACK (yylen);                                       \
+        yystate = *yyssp;                                         \
+        goto yybackup;                                            \
+      }                                                           \
+    else                                                          \
+      {                                                           \
+        yyerror (pParseContext, YY_("syntax error: cannot back up")); \
+        YYERROR;                                                  \
+      }                                                           \
+  while (0)
 
-/* Error token number */
-#define YYTERROR        1
-#define YYERRCODE       256
-
+/* Backward compatibility with an undocumented macro.
+   Use YYerror or YYUNDEF. */
+#define YYERRCODE YYUNDEF
 
 
 /* Enable debugging if requested.  */
@@ -3592,55 +3893,59 @@
 } while (0)
 
 /* This macro is provided for backward compatibility. */
-#ifndef YY_LOCATION_PRINT
-# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
-#endif
+# ifndef YY_LOCATION_PRINT
+#  define YY_LOCATION_PRINT(File, Loc) ((void) 0)
+# endif
 
 
-# define YY_SYMBOL_PRINT(Title, Type, Value, Location)                    \
+# define YY_SYMBOL_PRINT(Title, Kind, Value, Location)                    \
 do {                                                                      \
   if (yydebug)                                                            \
     {                                                                     \
       YYFPRINTF (stderr, "%s ", Title);                                   \
       yy_symbol_print (stderr,                                            \
-                  Type, Value, pParseContext); \
+                  Kind, Value, pParseContext); \
       YYFPRINTF (stderr, "\n");                                           \
     }                                                                     \
 } while (0)
 
 
-/*----------------------------------------.
-| Print this symbol's value on YYOUTPUT.  |
-`----------------------------------------*/
+/*-----------------------------------.
+| Print this symbol's value on YYO.  |
+`-----------------------------------*/
 
 static void
-yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, glslang::TParseContext* pParseContext)
+yy_symbol_value_print (FILE *yyo,
+                       yysymbol_kind_t yykind, YYSTYPE const * const yyvaluep, glslang::TParseContext* pParseContext)
 {
-  FILE *yyo = yyoutput;
-  YYUSE (yyo);
+  FILE *yyoutput = yyo;
+  YYUSE (yyoutput);
   YYUSE (pParseContext);
   if (!yyvaluep)
     return;
 # ifdef YYPRINT
-  if (yytype < YYNTOKENS)
-    YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
+  if (yykind < YYNTOKENS)
+    YYPRINT (yyo, yytoknum[yykind], *yyvaluep);
 # endif
-  YYUSE (yytype);
+  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
+  YYUSE (yykind);
+  YY_IGNORE_MAYBE_UNINITIALIZED_END
 }
 
 
-/*--------------------------------.
-| Print this symbol on YYOUTPUT.  |
-`--------------------------------*/
+/*---------------------------.
+| Print this symbol on YYO.  |
+`---------------------------*/
 
 static void
-yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, glslang::TParseContext* pParseContext)
+yy_symbol_print (FILE *yyo,
+                 yysymbol_kind_t yykind, YYSTYPE const * const yyvaluep, glslang::TParseContext* pParseContext)
 {
-  YYFPRINTF (yyoutput, "%s %s (",
-             yytype < YYNTOKENS ? "token" : "nterm", yytname[yytype]);
+  YYFPRINTF (yyo, "%s %s (",
+             yykind < YYNTOKENS ? "token" : "nterm", yysymbol_name (yykind));
 
-  yy_symbol_value_print (yyoutput, yytype, yyvaluep, pParseContext);
-  YYFPRINTF (yyoutput, ")");
+  yy_symbol_value_print (yyo, yykind, yyvaluep, pParseContext);
+  YYFPRINTF (yyo, ")");
 }
 
 /*------------------------------------------------------------------.
@@ -3649,7 +3954,7 @@
 `------------------------------------------------------------------*/
 
 static void
-yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop)
+yy_stack_print (yy_state_t *yybottom, yy_state_t *yytop)
 {
   YYFPRINTF (stderr, "Stack now");
   for (; yybottom <= yytop; yybottom++)
@@ -3672,21 +3977,21 @@
 `------------------------------------------------*/
 
 static void
-yy_reduce_print (yytype_int16 *yyssp, YYSTYPE *yyvsp, int yyrule, glslang::TParseContext* pParseContext)
+yy_reduce_print (yy_state_t *yyssp, YYSTYPE *yyvsp,
+                 int yyrule, glslang::TParseContext* pParseContext)
 {
-  unsigned long int yylno = yyrline[yyrule];
+  int yylno = yyrline[yyrule];
   int yynrhs = yyr2[yyrule];
   int yyi;
-  YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
+  YYFPRINTF (stderr, "Reducing stack by rule %d (line %d):\n",
              yyrule - 1, yylno);
   /* The symbols being reduced.  */
   for (yyi = 0; yyi < yynrhs; yyi++)
     {
       YYFPRINTF (stderr, "   $%d = ", yyi + 1);
       yy_symbol_print (stderr,
-                       yystos[yyssp[yyi + 1 - yynrhs]],
-                       &(yyvsp[(yyi + 1) - (yynrhs)])
-                                              , pParseContext);
+                       YY_ACCESSING_SYMBOL (+yyssp[yyi + 1 - yynrhs]),
+                       &yyvsp[(yyi + 1) - (yynrhs)], pParseContext);
       YYFPRINTF (stderr, "\n");
     }
 }
@@ -3701,8 +4006,8 @@
    multiple parsers can coexist.  */
 int yydebug;
 #else /* !YYDEBUG */
-# define YYDPRINTF(Args)
-# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
+# define YYDPRINTF(Args) ((void) 0)
+# define YY_SYMBOL_PRINT(Title, Kind, Value, Location)
 # define YY_STACK_PRINT(Bottom, Top)
 # define YY_REDUCE_PRINT(Rule)
 #endif /* !YYDEBUG */
@@ -3725,28 +4030,76 @@
 #endif
 
 
-#if YYERROR_VERBOSE
+/* Context of a parse error.  */
+typedef struct
+{
+  yy_state_t *yyssp;
+  yysymbol_kind_t yytoken;
+} yypcontext_t;
 
-# ifndef yystrlen
-#  if defined __GLIBC__ && defined _STRING_H
-#   define yystrlen strlen
-#  else
+/* Put in YYARG at most YYARGN of the expected tokens given the
+   current YYCTX, and return the number of tokens stored in YYARG.  If
+   YYARG is null, return the number of expected tokens (guaranteed to
+   be less than YYNTOKENS).  Return YYENOMEM on memory exhaustion.
+   Return 0 if there are more than YYARGN expected tokens, yet fill
+   YYARG up to YYARGN. */
+static int
+yypcontext_expected_tokens (const yypcontext_t *yyctx,
+                            yysymbol_kind_t yyarg[], int yyargn)
+{
+  /* Actual size of YYARG. */
+  int yycount = 0;
+  int yyn = yypact[+*yyctx->yyssp];
+  if (!yypact_value_is_default (yyn))
+    {
+      /* Start YYX at -YYN if negative to avoid negative indexes in
+         YYCHECK.  In other words, skip the first -YYN actions for
+         this state because they are default actions.  */
+      int yyxbegin = yyn < 0 ? -yyn : 0;
+      /* Stay within bounds of both yycheck and yytname.  */
+      int yychecklim = YYLAST - yyn + 1;
+      int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
+      int yyx;
+      for (yyx = yyxbegin; yyx < yyxend; ++yyx)
+        if (yycheck[yyx + yyn] == yyx && yyx != YYSYMBOL_YYerror
+            && !yytable_value_is_error (yytable[yyx + yyn]))
+          {
+            if (!yyarg)
+              ++yycount;
+            else if (yycount == yyargn)
+              return 0;
+            else
+              yyarg[yycount++] = YY_CAST (yysymbol_kind_t, yyx);
+          }
+    }
+  if (yyarg && yycount == 0 && 0 < yyargn)
+    yyarg[0] = YYSYMBOL_YYEMPTY;
+  return yycount;
+}
+
+
+
+
+#ifndef yystrlen
+# if defined __GLIBC__ && defined _STRING_H
+#  define yystrlen(S) (YY_CAST (YYPTRDIFF_T, strlen (S)))
+# else
 /* Return the length of YYSTR.  */
-static YYSIZE_T
+static YYPTRDIFF_T
 yystrlen (const char *yystr)
 {
-  YYSIZE_T yylen;
+  YYPTRDIFF_T yylen;
   for (yylen = 0; yystr[yylen]; yylen++)
     continue;
   return yylen;
 }
-#  endif
 # endif
+#endif
 
-# ifndef yystpcpy
-#  if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
-#   define yystpcpy stpcpy
-#  else
+#ifndef yystpcpy
+# if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
+#  define yystpcpy stpcpy
+# else
 /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
    YYDEST.  */
 static char *
@@ -3760,10 +4113,10 @@
 
   return yyd - 1;
 }
-#  endif
 # endif
+#endif
 
-# ifndef yytnamerr
+#ifndef yytnamerr
 /* Copy to YYRES the contents of YYSTR after stripping away unnecessary
    quotes and backslashes, so that it's suitable for yyerror.  The
    heuristic is that double-quoting is unnecessary unless the string
@@ -3771,14 +4124,13 @@
    backslash-backslash).  YYSTR is taken from yytname.  If YYRES is
    null, do not copy; instead, return the length of what the result
    would have been.  */
-static YYSIZE_T
+static YYPTRDIFF_T
 yytnamerr (char *yyres, const char *yystr)
 {
   if (*yystr == '"')
     {
-      YYSIZE_T yyn = 0;
+      YYPTRDIFF_T yyn = 0;
       char const *yyp = yystr;
-
       for (;;)
         switch (*++yyp)
           {
@@ -3789,7 +4141,10 @@
           case '\\':
             if (*++yyp != '\\')
               goto do_not_strip_quotes;
-            /* Fall through.  */
+            else
+              goto append;
+
+          append:
           default:
             if (yyres)
               yyres[yyn] = *yyp;
@@ -3804,36 +4159,20 @@
     do_not_strip_quotes: ;
     }
 
-  if (! yyres)
+  if (yyres)
+    return yystpcpy (yyres, yystr) - yyres;
+  else
     return yystrlen (yystr);
-
-  return yystpcpy (yyres, yystr) - yyres;
 }
-# endif
+#endif
 
-/* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message
-   about the unexpected token YYTOKEN for the state stack whose top is
-   YYSSP.
 
-   Return 0 if *YYMSG was successfully written.  Return 1 if *YYMSG is
-   not large enough to hold the message.  In that case, also set
-   *YYMSG_ALLOC to the required number of bytes.  Return 2 if the
-   required number of bytes is too large to store.  */
 static int
-yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
-                yytype_int16 *yyssp, int yytoken)
+yy_syntax_error_arguments (const yypcontext_t *yyctx,
+                           yysymbol_kind_t yyarg[], int yyargn)
 {
-  YYSIZE_T yysize0 = yytnamerr (YY_NULLPTR, yytname[yytoken]);
-  YYSIZE_T yysize = yysize0;
-  enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
-  /* Internationalized format string. */
-  const char *yyformat = YY_NULLPTR;
-  /* Arguments of yyformat. */
-  char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
-  /* Number of reported tokens (one for the "unexpected", one per
-     "expected"). */
+  /* Actual size of YYARG. */
   int yycount = 0;
-
   /* There are many possibilities here to consider:
      - If this state is a consistent state with a default action, then
        the only way this function was invoked is if the default action
@@ -3857,63 +4196,78 @@
        one exception: it will still contain any token that will not be
        accepted due to an error action in a later state.
   */
-  if (yytoken != YYEMPTY)
+  if (yyctx->yytoken != YYSYMBOL_YYEMPTY)
     {
-      int yyn = yypact[*yyssp];
-      yyarg[yycount++] = yytname[yytoken];
-      if (!yypact_value_is_default (yyn))
-        {
-          /* Start YYX at -YYN if negative to avoid negative indexes in
-             YYCHECK.  In other words, skip the first -YYN actions for
-             this state because they are default actions.  */
-          int yyxbegin = yyn < 0 ? -yyn : 0;
-          /* Stay within bounds of both yycheck and yytname.  */
-          int yychecklim = YYLAST - yyn + 1;
-          int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
-          int yyx;
-
-          for (yyx = yyxbegin; yyx < yyxend; ++yyx)
-            if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR
-                && !yytable_value_is_error (yytable[yyx + yyn]))
-              {
-                if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
-                  {
-                    yycount = 1;
-                    yysize = yysize0;
-                    break;
-                  }
-                yyarg[yycount++] = yytname[yyx];
-                {
-                  YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULLPTR, yytname[yyx]);
-                  if (! (yysize <= yysize1
-                         && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
-                    return 2;
-                  yysize = yysize1;
-                }
-              }
-        }
+      int yyn;
+      if (yyarg)
+        yyarg[yycount] = yyctx->yytoken;
+      ++yycount;
+      yyn = yypcontext_expected_tokens (yyctx,
+                                        yyarg ? yyarg + 1 : yyarg, yyargn - 1);
+      if (yyn == YYENOMEM)
+        return YYENOMEM;
+      else
+        yycount += yyn;
     }
+  return yycount;
+}
+
+/* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message
+   about the unexpected token YYTOKEN for the state stack whose top is
+   YYSSP.
+
+   Return 0 if *YYMSG was successfully written.  Return -1 if *YYMSG is
+   not large enough to hold the message.  In that case, also set
+   *YYMSG_ALLOC to the required number of bytes.  Return YYENOMEM if the
+   required number of bytes is too large to store.  */
+static int
+yysyntax_error (YYPTRDIFF_T *yymsg_alloc, char **yymsg,
+                const yypcontext_t *yyctx)
+{
+  enum { YYARGS_MAX = 5 };
+  /* Internationalized format string. */
+  const char *yyformat = YY_NULLPTR;
+  /* Arguments of yyformat: reported tokens (one for the "unexpected",
+     one per "expected"). */
+  yysymbol_kind_t yyarg[YYARGS_MAX];
+  /* Cumulated lengths of YYARG.  */
+  YYPTRDIFF_T yysize = 0;
+
+  /* Actual size of YYARG. */
+  int yycount = yy_syntax_error_arguments (yyctx, yyarg, YYARGS_MAX);
+  if (yycount == YYENOMEM)
+    return YYENOMEM;
 
   switch (yycount)
     {
-# define YYCASE_(N, S)                      \
+#define YYCASE_(N, S)                       \
       case N:                               \
         yyformat = S;                       \
-      break
+        break
+    default: /* Avoid compiler warnings. */
       YYCASE_(0, YY_("syntax error"));
       YYCASE_(1, YY_("syntax error, unexpected %s"));
       YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
       YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
       YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
       YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
-# undef YYCASE_
+#undef YYCASE_
     }
 
+  /* Compute error message size.  Don't count the "%s"s, but reserve
+     room for the terminator.  */
+  yysize = yystrlen (yyformat) - 2 * yycount + 1;
   {
-    YYSIZE_T yysize1 = yysize + yystrlen (yyformat);
-    if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
-      return 2;
-    yysize = yysize1;
+    int yyi;
+    for (yyi = 0; yyi < yycount; ++yyi)
+      {
+        YYPTRDIFF_T yysize1
+          = yysize + yytnamerr (YY_NULLPTR, yytname[yyarg[yyi]]);
+        if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)
+          yysize = yysize1;
+        else
+          return YYENOMEM;
+      }
   }
 
   if (*yymsg_alloc < yysize)
@@ -3922,7 +4276,7 @@
       if (! (yysize <= *yymsg_alloc
              && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM))
         *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM;
-      return 1;
+      return -1;
     }
 
   /* Avoid sprintf, as that infringes on the user's name space.
@@ -3934,40 +4288,43 @@
     while ((*yyp = *yyformat) != '\0')
       if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount)
         {
-          yyp += yytnamerr (yyp, yyarg[yyi++]);
+          yyp += yytnamerr (yyp, yytname[yyarg[yyi++]]);
           yyformat += 2;
         }
       else
         {
-          yyp++;
-          yyformat++;
+          ++yyp;
+          ++yyformat;
         }
   }
   return 0;
 }
-#endif /* YYERROR_VERBOSE */
+
 
 /*-----------------------------------------------.
 | Release the memory associated to this symbol.  |
 `-----------------------------------------------*/
 
 static void
-yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, glslang::TParseContext* pParseContext)
+yydestruct (const char *yymsg,
+            yysymbol_kind_t yykind, YYSTYPE *yyvaluep, glslang::TParseContext* pParseContext)
 {
   YYUSE (yyvaluep);
   YYUSE (pParseContext);
   if (!yymsg)
     yymsg = "Deleting";
-  YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
+  YY_SYMBOL_PRINT (yymsg, yykind, yyvaluep, yylocationp);
 
   YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
-  YYUSE (yytype);
+  YYUSE (yykind);
   YY_IGNORE_MAYBE_UNINITIALIZED_END
 }
 
 
 
 
+
+
 /*----------.
 | yyparse.  |
 `----------*/
@@ -3975,7 +4332,7 @@
 int
 yyparse (glslang::TParseContext* pParseContext)
 {
-/* The lookahead symbol.  */
+/* Lookahead token kind.  */
 int yychar;
 
 
@@ -3986,45 +4343,41 @@
 YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default);
 
     /* Number of syntax errors so far.  */
-    int yynerrs;
+    int yynerrs = 0;
 
-    int yystate;
+    yy_state_fast_t yystate = 0;
     /* Number of tokens to shift before error messages enabled.  */
-    int yyerrstatus;
+    int yyerrstatus = 0;
 
-    /* The stacks and their tools:
-       'yyss': related to states.
-       'yyvs': related to semantic values.
-
-       Refer to the stacks through separate pointers, to allow yyoverflow
+    /* Refer to the stacks through separate pointers, to allow yyoverflow
        to reallocate them elsewhere.  */
 
-    /* The state stack.  */
-    yytype_int16 yyssa[YYINITDEPTH];
-    yytype_int16 *yyss;
-    yytype_int16 *yyssp;
+    /* Their size.  */
+    YYPTRDIFF_T yystacksize = YYINITDEPTH;
 
-    /* The semantic value stack.  */
+    /* The state stack: array, bottom, top.  */
+    yy_state_t yyssa[YYINITDEPTH];
+    yy_state_t *yyss = yyssa;
+    yy_state_t *yyssp = yyss;
+
+    /* The semantic value stack: array, bottom, top.  */
     YYSTYPE yyvsa[YYINITDEPTH];
-    YYSTYPE *yyvs;
-    YYSTYPE *yyvsp;
-
-    YYSIZE_T yystacksize;
+    YYSTYPE *yyvs = yyvsa;
+    YYSTYPE *yyvsp = yyvs;
 
   int yyn;
+  /* The return value of yyparse.  */
   int yyresult;
-  /* Lookahead token as an internal (translated) token number.  */
-  int yytoken = 0;
+  /* Lookahead symbol kind.  */
+  yysymbol_kind_t yytoken = YYSYMBOL_YYEMPTY;
   /* The variables used to return semantic value and location from the
      action routines.  */
   YYSTYPE yyval;
 
-#if YYERROR_VERBOSE
   /* Buffer for error messages, and its allocated size.  */
   char yymsgbuf[128];
   char *yymsg = yymsgbuf;
-  YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
-#endif
+  YYPTRDIFF_T yymsg_alloc = sizeof yymsgbuf;
 
 #define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N))
 
@@ -4032,58 +4385,60 @@
      Keep to zero when no symbol should be popped.  */
   int yylen = 0;
 
-  yyssp = yyss = yyssa;
-  yyvsp = yyvs = yyvsa;
-  yystacksize = YYINITDEPTH;
-
   YYDPRINTF ((stderr, "Starting parse\n"));
 
-  yystate = 0;
-  yyerrstatus = 0;
-  yynerrs = 0;
   yychar = YYEMPTY; /* Cause a token to be read.  */
   goto yysetstate;
 
+
 /*------------------------------------------------------------.
-| yynewstate -- Push a new state, which is found in yystate.  |
+| yynewstate -- push a new state, which is found in yystate.  |
 `------------------------------------------------------------*/
- yynewstate:
+yynewstate:
   /* In all cases, when you get here, the value and location stacks
      have just been pushed.  So pushing a state here evens the stacks.  */
   yyssp++;
 
- yysetstate:
-  *yyssp = yystate;
+
+/*--------------------------------------------------------------------.
+| yysetstate -- set current state (the top of the stack) to yystate.  |
+`--------------------------------------------------------------------*/
+yysetstate:
+  YYDPRINTF ((stderr, "Entering state %d\n", yystate));
+  YY_ASSERT (0 <= yystate && yystate < YYNSTATES);
+  YY_IGNORE_USELESS_CAST_BEGIN
+  *yyssp = YY_CAST (yy_state_t, yystate);
+  YY_IGNORE_USELESS_CAST_END
+  YY_STACK_PRINT (yyss, yyssp);
 
   if (yyss + yystacksize - 1 <= yyssp)
+#if !defined yyoverflow && !defined YYSTACK_RELOCATE
+    goto yyexhaustedlab;
+#else
     {
       /* Get the current used size of the three stacks, in elements.  */
-      YYSIZE_T yysize = yyssp - yyss + 1;
+      YYPTRDIFF_T yysize = yyssp - yyss + 1;
 
-#ifdef yyoverflow
+# if defined yyoverflow
       {
         /* Give user a chance to reallocate the stack.  Use copies of
            these so that the &'s don't force the real ones into
            memory.  */
+        yy_state_t *yyss1 = yyss;
         YYSTYPE *yyvs1 = yyvs;
-        yytype_int16 *yyss1 = yyss;
 
         /* Each stack pointer address is followed by the size of the
            data in use in that stack, in bytes.  This used to be a
            conditional around just the two extra args, but that might
            be undefined if yyoverflow is a macro.  */
         yyoverflow (YY_("memory exhausted"),
-                    &yyss1, yysize * sizeof (*yyssp),
-                    &yyvs1, yysize * sizeof (*yyvsp),
+                    &yyss1, yysize * YYSIZEOF (*yyssp),
+                    &yyvs1, yysize * YYSIZEOF (*yyvsp),
                     &yystacksize);
-
         yyss = yyss1;
         yyvs = yyvs1;
       }
-#else /* no yyoverflow */
-# ifndef YYSTACK_RELOCATE
-      goto yyexhaustedlab;
-# else
+# else /* defined YYSTACK_RELOCATE */
       /* Extend the stack our own way.  */
       if (YYMAXDEPTH <= yystacksize)
         goto yyexhaustedlab;
@@ -4092,9 +4447,10 @@
         yystacksize = YYMAXDEPTH;
 
       {
-        yytype_int16 *yyss1 = yyss;
+        yy_state_t *yyss1 = yyss;
         union yyalloc *yyptr =
-          (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
+          YY_CAST (union yyalloc *,
+                   YYSTACK_ALLOC (YY_CAST (YYSIZE_T, YYSTACK_BYTES (yystacksize))));
         if (! yyptr)
           goto yyexhaustedlab;
         YYSTACK_RELOCATE (yyss_alloc, yyss);
@@ -4104,30 +4460,30 @@
           YYSTACK_FREE (yyss1);
       }
 # endif
-#endif /* no yyoverflow */
 
       yyssp = yyss + yysize - 1;
       yyvsp = yyvs + yysize - 1;
 
-      YYDPRINTF ((stderr, "Stack size increased to %lu\n",
-                  (unsigned long int) yystacksize));
+      YY_IGNORE_USELESS_CAST_BEGIN
+      YYDPRINTF ((stderr, "Stack size increased to %ld\n",
+                  YY_CAST (long, yystacksize)));
+      YY_IGNORE_USELESS_CAST_END
 
       if (yyss + yystacksize - 1 <= yyssp)
         YYABORT;
     }
-
-  YYDPRINTF ((stderr, "Entering state %d\n", yystate));
+#endif /* !defined yyoverflow && !defined YYSTACK_RELOCATE */
 
   if (yystate == YYFINAL)
     YYACCEPT;
 
   goto yybackup;
 
+
 /*-----------.
 | yybackup.  |
 `-----------*/
 yybackup:
-
   /* Do appropriate processing given the current state.  Read a
      lookahead token if we need one and don't already have one.  */
 
@@ -4138,18 +4494,29 @@
 
   /* Not known => get a lookahead token if don't already have one.  */
 
-  /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol.  */
+  /* YYCHAR is either empty, or end-of-input, or a valid lookahead.  */
   if (yychar == YYEMPTY)
     {
-      YYDPRINTF ((stderr, "Reading a token: "));
+      YYDPRINTF ((stderr, "Reading a token\n"));
       yychar = yylex (&yylval, parseContext);
     }
 
   if (yychar <= YYEOF)
     {
-      yychar = yytoken = YYEOF;
+      yychar = YYEOF;
+      yytoken = YYSYMBOL_YYEOF;
       YYDPRINTF ((stderr, "Now at end of input.\n"));
     }
+  else if (yychar == YYerror)
+    {
+      /* The scanner already issued an error message, process directly
+         to error recovery.  But do not keep the error token as
+         lookahead, it is too special and may lead us to an endless
+         loop in error recovery. */
+      yychar = YYUNDEF;
+      yytoken = YYSYMBOL_YYerror;
+      goto yyerrlab1;
+    }
   else
     {
       yytoken = YYTRANSLATE (yychar);
@@ -4177,15 +4544,13 @@
 
   /* Shift the lookahead token.  */
   YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
-
-  /* Discard the shifted token.  */
-  yychar = YYEMPTY;
-
   yystate = yyn;
   YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
   *++yyvsp = yylval;
   YY_IGNORE_MAYBE_UNINITIALIZED_END
 
+  /* Discard the shifted token.  */
+  yychar = YYEMPTY;
   goto yynewstate;
 
 
@@ -4200,7 +4565,7 @@
 
 
 /*-----------------------------.
-| yyreduce -- Do a reduction.  |
+| yyreduce -- do a reduction.  |
 `-----------------------------*/
 yyreduce:
   /* yyn is the number of a rule to reduce with.  */
@@ -4220,304 +4585,304 @@
   YY_REDUCE_PRINT (yyn);
   switch (yyn)
     {
-        case 2:
-#line 357 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 2: /* variable_identifier: IDENTIFIER  */
+#line 371 "MachineIndependent/glslang.y"
+                 {
         (yyval.interm.intermTypedNode) = parseContext.handleVariable((yyvsp[0].lex).loc, (yyvsp[0].lex).symbol, (yyvsp[0].lex).string);
     }
-#line 4229 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4594 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 3:
-#line 363 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 3: /* primary_expression: variable_identifier  */
+#line 377 "MachineIndependent/glslang.y"
+                          {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 4237 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4602 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 4:
-#line 366 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 4: /* primary_expression: LEFT_PAREN expression RIGHT_PAREN  */
+#line 380 "MachineIndependent/glslang.y"
+                                        {
         (yyval.interm.intermTypedNode) = (yyvsp[-1].interm.intermTypedNode);
         if ((yyval.interm.intermTypedNode)->getAsConstantUnion())
             (yyval.interm.intermTypedNode)->getAsConstantUnion()->setExpression();
     }
-#line 4247 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4612 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 5:
-#line 371 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 5: /* primary_expression: FLOATCONSTANT  */
+#line 385 "MachineIndependent/glslang.y"
+                    {
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtFloat, (yyvsp[0].lex).loc, true);
     }
-#line 4255 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4620 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 6:
-#line 374 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 6: /* primary_expression: INTCONSTANT  */
+#line 388 "MachineIndependent/glslang.y"
+                  {
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true);
     }
-#line 4263 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4628 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 7:
-#line 377 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 7: /* primary_expression: UINTCONSTANT  */
+#line 391 "MachineIndependent/glslang.y"
+                   {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned literal");
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).u, (yyvsp[0].lex).loc, true);
     }
-#line 4272 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4637 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 8:
-#line 381 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 8: /* primary_expression: BOOLCONSTANT  */
+#line 395 "MachineIndependent/glslang.y"
+                   {
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).b, (yyvsp[0].lex).loc, true);
     }
-#line 4280 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4645 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 9:
-#line 385 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 9: /* primary_expression: STRING_LITERAL  */
+#line 399 "MachineIndependent/glslang.y"
+                     {
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).string, (yyvsp[0].lex).loc, true);
     }
-#line 4288 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4653 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 10:
-#line 388 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 10: /* primary_expression: INT32CONSTANT  */
+#line 402 "MachineIndependent/glslang.y"
+                    {
         parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed literal");
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true);
     }
-#line 4297 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4662 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 11:
-#line 392 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 11: /* primary_expression: UINT32CONSTANT  */
+#line 406 "MachineIndependent/glslang.y"
+                     {
         parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed literal");
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).u, (yyvsp[0].lex).loc, true);
     }
-#line 4306 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4671 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 12:
-#line 396 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 12: /* primary_expression: INT64CONSTANT  */
+#line 410 "MachineIndependent/glslang.y"
+                    {
         parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer literal");
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i64, (yyvsp[0].lex).loc, true);
     }
-#line 4315 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4680 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 13:
-#line 400 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 13: /* primary_expression: UINT64CONSTANT  */
+#line 414 "MachineIndependent/glslang.y"
+                     {
         parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer literal");
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).u64, (yyvsp[0].lex).loc, true);
     }
-#line 4324 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4689 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 14:
-#line 404 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 14: /* primary_expression: INT16CONSTANT  */
+#line 418 "MachineIndependent/glslang.y"
+                    {
         parseContext.explicitInt16Check((yyvsp[0].lex).loc, "16-bit integer literal");
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((short)(yyvsp[0].lex).i, (yyvsp[0].lex).loc, true);
     }
-#line 4333 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4698 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 15:
-#line 408 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 15: /* primary_expression: UINT16CONSTANT  */
+#line 422 "MachineIndependent/glslang.y"
+                     {
         parseContext.explicitInt16Check((yyvsp[0].lex).loc, "16-bit unsigned integer literal");
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((unsigned short)(yyvsp[0].lex).u, (yyvsp[0].lex).loc, true);
     }
-#line 4342 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4707 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 16:
-#line 412 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 16: /* primary_expression: DOUBLECONSTANT  */
+#line 426 "MachineIndependent/glslang.y"
+                     {
         parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double literal");
         if (! parseContext.symbolTable.atBuiltInLevel())
             parseContext.doubleCheck((yyvsp[0].lex).loc, "double literal");
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtDouble, (yyvsp[0].lex).loc, true);
     }
-#line 4353 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4718 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 17:
-#line 418 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 17: /* primary_expression: FLOAT16CONSTANT  */
+#line 432 "MachineIndependent/glslang.y"
+                      {
         parseContext.float16Check((yyvsp[0].lex).loc, "half float literal");
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtFloat16, (yyvsp[0].lex).loc, true);
     }
-#line 4362 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4727 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 18:
-#line 426 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 18: /* postfix_expression: primary_expression  */
+#line 440 "MachineIndependent/glslang.y"
+                         {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 4370 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4735 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 19:
-#line 429 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 19: /* postfix_expression: postfix_expression LEFT_BRACKET integer_expression RIGHT_BRACKET  */
+#line 443 "MachineIndependent/glslang.y"
+                                                                       {
         (yyval.interm.intermTypedNode) = parseContext.handleBracketDereference((yyvsp[-2].lex).loc, (yyvsp[-3].interm.intermTypedNode), (yyvsp[-1].interm.intermTypedNode));
     }
-#line 4378 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4743 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 20:
-#line 432 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 20: /* postfix_expression: function_call  */
+#line 446 "MachineIndependent/glslang.y"
+                    {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 4386 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4751 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 21:
-#line 435 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 21: /* postfix_expression: postfix_expression DOT IDENTIFIER  */
+#line 449 "MachineIndependent/glslang.y"
+                                        {
         (yyval.interm.intermTypedNode) = parseContext.handleDotDereference((yyvsp[0].lex).loc, (yyvsp[-2].interm.intermTypedNode), *(yyvsp[0].lex).string);
     }
-#line 4394 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4759 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 22:
-#line 438 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 22: /* postfix_expression: postfix_expression INC_OP  */
+#line 452 "MachineIndependent/glslang.y"
+                                {
         parseContext.variableCheck((yyvsp[-1].interm.intermTypedNode));
         parseContext.lValueErrorCheck((yyvsp[0].lex).loc, "++", (yyvsp[-1].interm.intermTypedNode));
         (yyval.interm.intermTypedNode) = parseContext.handleUnaryMath((yyvsp[0].lex).loc, "++", EOpPostIncrement, (yyvsp[-1].interm.intermTypedNode));
     }
-#line 4404 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4769 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 23:
-#line 443 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 23: /* postfix_expression: postfix_expression DEC_OP  */
+#line 457 "MachineIndependent/glslang.y"
+                                {
         parseContext.variableCheck((yyvsp[-1].interm.intermTypedNode));
         parseContext.lValueErrorCheck((yyvsp[0].lex).loc, "--", (yyvsp[-1].interm.intermTypedNode));
         (yyval.interm.intermTypedNode) = parseContext.handleUnaryMath((yyvsp[0].lex).loc, "--", EOpPostDecrement, (yyvsp[-1].interm.intermTypedNode));
     }
-#line 4414 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4779 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 24:
-#line 451 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 24: /* integer_expression: expression  */
+#line 465 "MachineIndependent/glslang.y"
+                 {
         parseContext.integerCheck((yyvsp[0].interm.intermTypedNode), "[]");
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 4423 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4788 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 25:
-#line 458 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 25: /* function_call: function_call_or_method  */
+#line 472 "MachineIndependent/glslang.y"
+                              {
         (yyval.interm.intermTypedNode) = parseContext.handleFunctionCall((yyvsp[0].interm).loc, (yyvsp[0].interm).function, (yyvsp[0].interm).intermNode);
         delete (yyvsp[0].interm).function;
     }
-#line 4432 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4797 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 26:
-#line 465 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 26: /* function_call_or_method: function_call_generic  */
+#line 479 "MachineIndependent/glslang.y"
+                            {
         (yyval.interm) = (yyvsp[0].interm);
     }
-#line 4440 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4805 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 27:
-#line 471 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 27: /* function_call_generic: function_call_header_with_parameters RIGHT_PAREN  */
+#line 485 "MachineIndependent/glslang.y"
+                                                       {
         (yyval.interm) = (yyvsp[-1].interm);
         (yyval.interm).loc = (yyvsp[0].lex).loc;
     }
-#line 4449 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4814 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 28:
-#line 475 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 28: /* function_call_generic: function_call_header_no_parameters RIGHT_PAREN  */
+#line 489 "MachineIndependent/glslang.y"
+                                                     {
         (yyval.interm) = (yyvsp[-1].interm);
         (yyval.interm).loc = (yyvsp[0].lex).loc;
     }
-#line 4458 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4823 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 29:
-#line 482 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 29: /* function_call_header_no_parameters: function_call_header VOID  */
+#line 496 "MachineIndependent/glslang.y"
+                                {
         (yyval.interm) = (yyvsp[-1].interm);
     }
-#line 4466 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4831 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 30:
-#line 485 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 30: /* function_call_header_no_parameters: function_call_header  */
+#line 499 "MachineIndependent/glslang.y"
+                           {
         (yyval.interm) = (yyvsp[0].interm);
     }
-#line 4474 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4839 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 31:
-#line 491 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 31: /* function_call_header_with_parameters: function_call_header assignment_expression  */
+#line 505 "MachineIndependent/glslang.y"
+                                                 {
         TParameter param = { 0, new TType };
         param.type->shallowCopy((yyvsp[0].interm.intermTypedNode)->getType());
         (yyvsp[-1].interm).function->addParameter(param);
         (yyval.interm).function = (yyvsp[-1].interm).function;
         (yyval.interm).intermNode = (yyvsp[0].interm.intermTypedNode);
     }
-#line 4486 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4851 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 32:
-#line 498 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 32: /* function_call_header_with_parameters: function_call_header_with_parameters COMMA assignment_expression  */
+#line 512 "MachineIndependent/glslang.y"
+                                                                       {
         TParameter param = { 0, new TType };
         param.type->shallowCopy((yyvsp[0].interm.intermTypedNode)->getType());
         (yyvsp[-2].interm).function->addParameter(param);
         (yyval.interm).function = (yyvsp[-2].interm).function;
         (yyval.interm).intermNode = parseContext.intermediate.growAggregate((yyvsp[-2].interm).intermNode, (yyvsp[0].interm.intermTypedNode), (yyvsp[-1].lex).loc);
     }
-#line 4498 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4863 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 33:
-#line 508 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 33: /* function_call_header: function_identifier LEFT_PAREN  */
+#line 522 "MachineIndependent/glslang.y"
+                                     {
         (yyval.interm) = (yyvsp[-1].interm);
     }
-#line 4506 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4871 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 34:
-#line 516 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 34: /* function_identifier: type_specifier  */
+#line 530 "MachineIndependent/glslang.y"
+                     {
         // Constructor
         (yyval.interm).intermNode = 0;
         (yyval.interm).function = parseContext.handleConstructorCall((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type));
     }
-#line 4516 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4881 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 35:
-#line 521 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 35: /* function_identifier: postfix_expression  */
+#line 535 "MachineIndependent/glslang.y"
+                         {
         //
         // Should be a method or subroutine call, but we haven't recognized the arguments yet.
         //
@@ -4544,51 +4909,51 @@
             (yyval.interm).function = new TFunction(empty, TType(EbtVoid), EOpNull);
         }
     }
-#line 4548 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4913 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 36:
-#line 549 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 36: /* function_identifier: non_uniform_qualifier  */
+#line 563 "MachineIndependent/glslang.y"
+                            {
         // Constructor
         (yyval.interm).intermNode = 0;
         (yyval.interm).function = parseContext.handleConstructorCall((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type));
     }
-#line 4558 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4923 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 37:
-#line 558 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 37: /* unary_expression: postfix_expression  */
+#line 572 "MachineIndependent/glslang.y"
+                         {
         parseContext.variableCheck((yyvsp[0].interm.intermTypedNode));
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
         if (TIntermMethod* method = (yyvsp[0].interm.intermTypedNode)->getAsMethodNode())
             parseContext.error((yyvsp[0].interm.intermTypedNode)->getLoc(), "incomplete method syntax", method->getMethodName().c_str(), "");
     }
-#line 4569 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4934 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 38:
-#line 564 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 38: /* unary_expression: INC_OP unary_expression  */
+#line 578 "MachineIndependent/glslang.y"
+                              {
         parseContext.lValueErrorCheck((yyvsp[-1].lex).loc, "++", (yyvsp[0].interm.intermTypedNode));
         (yyval.interm.intermTypedNode) = parseContext.handleUnaryMath((yyvsp[-1].lex).loc, "++", EOpPreIncrement, (yyvsp[0].interm.intermTypedNode));
     }
-#line 4578 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4943 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 39:
-#line 568 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 39: /* unary_expression: DEC_OP unary_expression  */
+#line 582 "MachineIndependent/glslang.y"
+                              {
         parseContext.lValueErrorCheck((yyvsp[-1].lex).loc, "--", (yyvsp[0].interm.intermTypedNode));
         (yyval.interm.intermTypedNode) = parseContext.handleUnaryMath((yyvsp[-1].lex).loc, "--", EOpPreDecrement, (yyvsp[0].interm.intermTypedNode));
     }
-#line 4587 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4952 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 40:
-#line 572 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 40: /* unary_expression: unary_operator unary_expression  */
+#line 586 "MachineIndependent/glslang.y"
+                                      {
         if ((yyvsp[-1].interm).op != EOpNull) {
             char errorOp[2] = {0, 0};
             switch((yyvsp[-1].interm).op) {
@@ -4604,180 +4969,180 @@
                 (yyval.interm.intermTypedNode)->getAsConstantUnion()->setExpression();
         }
     }
-#line 4608 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4973 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 41:
-#line 592 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpNull; }
-#line 4614 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+  case 41: /* unary_operator: PLUS  */
+#line 606 "MachineIndependent/glslang.y"
+            { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpNull; }
+#line 4979 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 42:
-#line 593 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpNegative; }
-#line 4620 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+  case 42: /* unary_operator: DASH  */
+#line 607 "MachineIndependent/glslang.y"
+            { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpNegative; }
+#line 4985 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 43:
-#line 594 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpLogicalNot; }
-#line 4626 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+  case 43: /* unary_operator: BANG  */
+#line 608 "MachineIndependent/glslang.y"
+            { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpLogicalNot; }
+#line 4991 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 44:
-#line 595 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpBitwiseNot;
+  case 44: /* unary_operator: TILDE  */
+#line 609 "MachineIndependent/glslang.y"
+            { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpBitwiseNot;
               parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise not"); }
-#line 4633 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4998 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 45:
-#line 601 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4639 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+  case 45: /* multiplicative_expression: unary_expression  */
+#line 615 "MachineIndependent/glslang.y"
+                       { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
+#line 5004 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 46:
-#line 602 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 46: /* multiplicative_expression: multiplicative_expression STAR unary_expression  */
+#line 616 "MachineIndependent/glslang.y"
+                                                      {
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "*", EOpMul, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 4649 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5014 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 47:
-#line 607 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 47: /* multiplicative_expression: multiplicative_expression SLASH unary_expression  */
+#line 621 "MachineIndependent/glslang.y"
+                                                       {
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "/", EOpDiv, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 4659 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5024 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 48:
-#line 612 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 48: /* multiplicative_expression: multiplicative_expression PERCENT unary_expression  */
+#line 626 "MachineIndependent/glslang.y"
+                                                         {
         parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "%");
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "%", EOpMod, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 4670 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5035 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 49:
-#line 621 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4676 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+  case 49: /* additive_expression: multiplicative_expression  */
+#line 635 "MachineIndependent/glslang.y"
+                                { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
+#line 5041 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 50:
-#line 622 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 50: /* additive_expression: additive_expression PLUS multiplicative_expression  */
+#line 636 "MachineIndependent/glslang.y"
+                                                         {
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "+", EOpAdd, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 4686 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5051 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 51:
-#line 627 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 51: /* additive_expression: additive_expression DASH multiplicative_expression  */
+#line 641 "MachineIndependent/glslang.y"
+                                                         {
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "-", EOpSub, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 4696 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5061 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 52:
-#line 635 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4702 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+  case 52: /* shift_expression: additive_expression  */
+#line 649 "MachineIndependent/glslang.y"
+                          { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
+#line 5067 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 53:
-#line 636 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 53: /* shift_expression: shift_expression LEFT_OP additive_expression  */
+#line 650 "MachineIndependent/glslang.y"
+                                                   {
         parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "bit shift left");
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "<<", EOpLeftShift, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 4713 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5078 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 54:
-#line 642 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 54: /* shift_expression: shift_expression RIGHT_OP additive_expression  */
+#line 656 "MachineIndependent/glslang.y"
+                                                    {
         parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "bit shift right");
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, ">>", EOpRightShift, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 4724 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5089 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 55:
-#line 651 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4730 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+  case 55: /* relational_expression: shift_expression  */
+#line 665 "MachineIndependent/glslang.y"
+                       { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
+#line 5095 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 56:
-#line 652 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 56: /* relational_expression: relational_expression LEFT_ANGLE shift_expression  */
+#line 666 "MachineIndependent/glslang.y"
+                                                        {
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "<", EOpLessThan, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 4740 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5105 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 57:
-#line 657 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 57: /* relational_expression: relational_expression RIGHT_ANGLE shift_expression  */
+#line 671 "MachineIndependent/glslang.y"
+                                                          {
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, ">", EOpGreaterThan, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 4750 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5115 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 58:
-#line 662 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 58: /* relational_expression: relational_expression LE_OP shift_expression  */
+#line 676 "MachineIndependent/glslang.y"
+                                                    {
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "<=", EOpLessThanEqual, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 4760 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5125 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 59:
-#line 667 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 59: /* relational_expression: relational_expression GE_OP shift_expression  */
+#line 681 "MachineIndependent/glslang.y"
+                                                    {
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, ">=", EOpGreaterThanEqual, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 4770 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5135 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 60:
-#line 675 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4776 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+  case 60: /* equality_expression: relational_expression  */
+#line 689 "MachineIndependent/glslang.y"
+                            { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
+#line 5141 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 61:
-#line 676 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 61: /* equality_expression: equality_expression EQ_OP relational_expression  */
+#line 690 "MachineIndependent/glslang.y"
+                                                       {
         parseContext.arrayObjectCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "array comparison");
         parseContext.opaqueCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "==");
         parseContext.specializationCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "==");
@@ -4786,12 +5151,12 @@
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 4790 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5155 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 62:
-#line 685 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 62: /* equality_expression: equality_expression NE_OP relational_expression  */
+#line 699 "MachineIndependent/glslang.y"
+                                                      {
         parseContext.arrayObjectCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "array comparison");
         parseContext.opaqueCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "!=");
         parseContext.specializationCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "!=");
@@ -4800,125 +5165,125 @@
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 4804 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5169 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 63:
-#line 697 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4810 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+  case 63: /* and_expression: equality_expression  */
+#line 711 "MachineIndependent/glslang.y"
+                          { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
+#line 5175 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 64:
-#line 698 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 64: /* and_expression: and_expression AMPERSAND equality_expression  */
+#line 712 "MachineIndependent/glslang.y"
+                                                   {
         parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "bitwise and");
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "&", EOpAnd, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 4821 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5186 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 65:
-#line 707 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4827 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+  case 65: /* exclusive_or_expression: and_expression  */
+#line 721 "MachineIndependent/glslang.y"
+                     { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
+#line 5192 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 66:
-#line 708 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 66: /* exclusive_or_expression: exclusive_or_expression CARET and_expression  */
+#line 722 "MachineIndependent/glslang.y"
+                                                   {
         parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "bitwise exclusive or");
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "^", EOpExclusiveOr, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 4838 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5203 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 67:
-#line 717 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4844 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+  case 67: /* inclusive_or_expression: exclusive_or_expression  */
+#line 731 "MachineIndependent/glslang.y"
+                              { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
+#line 5209 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 68:
-#line 718 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 68: /* inclusive_or_expression: inclusive_or_expression VERTICAL_BAR exclusive_or_expression  */
+#line 732 "MachineIndependent/glslang.y"
+                                                                   {
         parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "bitwise inclusive or");
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "|", EOpInclusiveOr, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 4855 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5220 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 69:
-#line 727 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4861 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+  case 69: /* logical_and_expression: inclusive_or_expression  */
+#line 741 "MachineIndependent/glslang.y"
+                              { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
+#line 5226 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 70:
-#line 728 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 70: /* logical_and_expression: logical_and_expression AND_OP inclusive_or_expression  */
+#line 742 "MachineIndependent/glslang.y"
+                                                            {
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "&&", EOpLogicalAnd, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 4871 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5236 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 71:
-#line 736 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4877 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+  case 71: /* logical_xor_expression: logical_and_expression  */
+#line 750 "MachineIndependent/glslang.y"
+                             { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
+#line 5242 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 72:
-#line 737 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 72: /* logical_xor_expression: logical_xor_expression XOR_OP logical_and_expression  */
+#line 751 "MachineIndependent/glslang.y"
+                                                            {
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "^^", EOpLogicalXor, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 4887 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5252 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 73:
-#line 745 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4893 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+  case 73: /* logical_or_expression: logical_xor_expression  */
+#line 759 "MachineIndependent/glslang.y"
+                             { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
+#line 5258 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 74:
-#line 746 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 74: /* logical_or_expression: logical_or_expression OR_OP logical_xor_expression  */
+#line 760 "MachineIndependent/glslang.y"
+                                                          {
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "||", EOpLogicalOr, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 4903 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5268 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 75:
-#line 754 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4909 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+  case 75: /* conditional_expression: logical_or_expression  */
+#line 768 "MachineIndependent/glslang.y"
+                            { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
+#line 5274 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 76:
-#line 755 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 76: /* $@1: %empty  */
+#line 769 "MachineIndependent/glslang.y"
+                                     {
         ++parseContext.controlFlowNestingLevel;
     }
-#line 4917 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5282 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 77:
-#line 758 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 77: /* conditional_expression: logical_or_expression QUESTION $@1 expression COLON assignment_expression  */
+#line 772 "MachineIndependent/glslang.y"
+                                             {
         --parseContext.controlFlowNestingLevel;
         parseContext.boolCheck((yyvsp[-4].lex).loc, (yyvsp[-5].interm.intermTypedNode));
         parseContext.rValueErrorCheck((yyvsp[-4].lex).loc, "?", (yyvsp[-5].interm.intermTypedNode));
@@ -4930,18 +5295,18 @@
             (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
         }
     }
-#line 4934 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5299 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 78:
-#line 773 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4940 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+  case 78: /* assignment_expression: conditional_expression  */
+#line 787 "MachineIndependent/glslang.y"
+                             { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
+#line 5305 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 79:
-#line 774 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 79: /* assignment_expression: unary_expression assignment_operator assignment_expression  */
+#line 788 "MachineIndependent/glslang.y"
+                                                                 {
         parseContext.arrayObjectCheck((yyvsp[-1].interm).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "array assignment");
         parseContext.opaqueCheck((yyvsp[-1].interm).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "=");
         parseContext.storage16BitAssignmentCheck((yyvsp[-1].interm).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "=");
@@ -4954,120 +5319,120 @@
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
         }
     }
-#line 4958 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5323 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 80:
-#line 790 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 80: /* assignment_operator: EQUAL  */
+#line 804 "MachineIndependent/glslang.y"
+            {
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).op = EOpAssign;
     }
-#line 4967 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5332 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 81:
-#line 794 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 81: /* assignment_operator: MUL_ASSIGN  */
+#line 808 "MachineIndependent/glslang.y"
+                 {
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).op = EOpMulAssign;
     }
-#line 4976 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5341 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 82:
-#line 798 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 82: /* assignment_operator: DIV_ASSIGN  */
+#line 812 "MachineIndependent/glslang.y"
+                 {
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).op = EOpDivAssign;
     }
-#line 4985 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5350 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 83:
-#line 802 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 83: /* assignment_operator: MOD_ASSIGN  */
+#line 816 "MachineIndependent/glslang.y"
+                 {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "%=");
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).op = EOpModAssign;
     }
-#line 4995 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5360 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 84:
-#line 807 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 84: /* assignment_operator: ADD_ASSIGN  */
+#line 821 "MachineIndependent/glslang.y"
+                 {
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).op = EOpAddAssign;
     }
-#line 5004 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5369 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 85:
-#line 811 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 85: /* assignment_operator: SUB_ASSIGN  */
+#line 825 "MachineIndependent/glslang.y"
+                 {
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).op = EOpSubAssign;
     }
-#line 5013 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5378 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 86:
-#line 815 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 86: /* assignment_operator: LEFT_ASSIGN  */
+#line 829 "MachineIndependent/glslang.y"
+                  {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bit-shift left assign");
         (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpLeftShiftAssign;
     }
-#line 5022 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5387 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 87:
-#line 819 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 87: /* assignment_operator: RIGHT_ASSIGN  */
+#line 833 "MachineIndependent/glslang.y"
+                   {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bit-shift right assign");
         (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpRightShiftAssign;
     }
-#line 5031 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5396 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 88:
-#line 823 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 88: /* assignment_operator: AND_ASSIGN  */
+#line 837 "MachineIndependent/glslang.y"
+                 {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise-and assign");
         (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpAndAssign;
     }
-#line 5040 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5405 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 89:
-#line 827 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 89: /* assignment_operator: XOR_ASSIGN  */
+#line 841 "MachineIndependent/glslang.y"
+                 {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise-xor assign");
         (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpExclusiveOrAssign;
     }
-#line 5049 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5414 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 90:
-#line 831 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 90: /* assignment_operator: OR_ASSIGN  */
+#line 845 "MachineIndependent/glslang.y"
+                {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise-or assign");
         (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpInclusiveOrAssign;
     }
-#line 5058 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5423 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 91:
-#line 838 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 91: /* expression: assignment_expression  */
+#line 852 "MachineIndependent/glslang.y"
+                            {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 5066 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5431 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 92:
-#line 841 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 92: /* expression: expression COMMA assignment_expression  */
+#line 855 "MachineIndependent/glslang.y"
+                                             {
         parseContext.samplerConstructorLocationCheck((yyvsp[-1].lex).loc, ",", (yyvsp[0].interm.intermTypedNode));
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addComma((yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode), (yyvsp[-1].lex).loc);
         if ((yyval.interm.intermTypedNode) == 0) {
@@ -5075,118 +5440,118 @@
             (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
         }
     }
-#line 5079 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5444 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 93:
-#line 852 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 93: /* constant_expression: conditional_expression  */
+#line 866 "MachineIndependent/glslang.y"
+                             {
         parseContext.constantValueCheck((yyvsp[0].interm.intermTypedNode), "");
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 5088 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5453 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 94:
-#line 859 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 94: /* declaration: function_prototype SEMICOLON  */
+#line 873 "MachineIndependent/glslang.y"
+                                   {
         parseContext.handleFunctionDeclarator((yyvsp[-1].interm).loc, *(yyvsp[-1].interm).function, true /* prototype */);
         (yyval.interm.intermNode) = 0;
         // TODO: 4.0 functionality: subroutines: make the identifier a user type for this signature
     }
-#line 5098 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5463 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 95:
-#line 864 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 95: /* declaration: init_declarator_list SEMICOLON  */
+#line 878 "MachineIndependent/glslang.y"
+                                     {
         if ((yyvsp[-1].interm).intermNode && (yyvsp[-1].interm).intermNode->getAsAggregate())
             (yyvsp[-1].interm).intermNode->getAsAggregate()->setOperator(EOpSequence);
         (yyval.interm.intermNode) = (yyvsp[-1].interm).intermNode;
     }
-#line 5108 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5473 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 96:
-#line 869 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 96: /* declaration: PRECISION precision_qualifier type_specifier SEMICOLON  */
+#line 883 "MachineIndependent/glslang.y"
+                                                             {
         parseContext.profileRequires((yyvsp[-3].lex).loc, ENoProfile, 130, 0, "precision statement");
         // lazy setting of the previous scope's defaults, has effect only the first time it is called in a particular scope
         parseContext.symbolTable.setPreviousDefaultPrecisions(&parseContext.defaultPrecision[0]);
         parseContext.setDefaultPrecision((yyvsp[-3].lex).loc, (yyvsp[-1].interm.type), (yyvsp[-2].interm.type).qualifier.precision);
         (yyval.interm.intermNode) = 0;
     }
-#line 5120 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5485 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 97:
-#line 876 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 97: /* declaration: block_structure SEMICOLON  */
+#line 890 "MachineIndependent/glslang.y"
+                                {
         parseContext.declareBlock((yyvsp[-1].interm).loc, *(yyvsp[-1].interm).typeList);
         (yyval.interm.intermNode) = 0;
     }
-#line 5129 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5494 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 98:
-#line 880 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 98: /* declaration: block_structure IDENTIFIER SEMICOLON  */
+#line 894 "MachineIndependent/glslang.y"
+                                           {
         parseContext.declareBlock((yyvsp[-2].interm).loc, *(yyvsp[-2].interm).typeList, (yyvsp[-1].lex).string);
         (yyval.interm.intermNode) = 0;
     }
-#line 5138 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5503 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 99:
-#line 884 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 99: /* declaration: block_structure IDENTIFIER array_specifier SEMICOLON  */
+#line 898 "MachineIndependent/glslang.y"
+                                                           {
         parseContext.declareBlock((yyvsp[-3].interm).loc, *(yyvsp[-3].interm).typeList, (yyvsp[-2].lex).string, (yyvsp[-1].interm).arraySizes);
         (yyval.interm.intermNode) = 0;
     }
-#line 5147 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5512 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 100:
-#line 888 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 100: /* declaration: type_qualifier SEMICOLON  */
+#line 902 "MachineIndependent/glslang.y"
+                               {
         parseContext.globalQualifierFixCheck((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier);
         parseContext.updateStandaloneQualifierDefaults((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type));
         (yyval.interm.intermNode) = 0;
     }
-#line 5157 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5522 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 101:
-#line 893 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 101: /* declaration: type_qualifier IDENTIFIER SEMICOLON  */
+#line 907 "MachineIndependent/glslang.y"
+                                          {
         parseContext.checkNoShaderLayouts((yyvsp[-2].interm.type).loc, (yyvsp[-2].interm.type).shaderQualifiers);
         parseContext.addQualifierToExisting((yyvsp[-2].interm.type).loc, (yyvsp[-2].interm.type).qualifier, *(yyvsp[-1].lex).string);
         (yyval.interm.intermNode) = 0;
     }
-#line 5167 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5532 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 102:
-#line 898 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 102: /* declaration: type_qualifier IDENTIFIER identifier_list SEMICOLON  */
+#line 912 "MachineIndependent/glslang.y"
+                                                          {
         parseContext.checkNoShaderLayouts((yyvsp[-3].interm.type).loc, (yyvsp[-3].interm.type).shaderQualifiers);
         (yyvsp[-1].interm.identifierList)->push_back((yyvsp[-2].lex).string);
         parseContext.addQualifierToExisting((yyvsp[-3].interm.type).loc, (yyvsp[-3].interm.type).qualifier, *(yyvsp[-1].interm.identifierList));
         (yyval.interm.intermNode) = 0;
     }
-#line 5178 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5543 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 103:
-#line 907 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { parseContext.nestedBlockCheck((yyvsp[-2].interm.type).loc); }
-#line 5184 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+  case 103: /* $@2: %empty  */
+#line 921 "MachineIndependent/glslang.y"
+                                           { parseContext.nestedBlockCheck((yyvsp[-2].interm.type).loc); }
+#line 5549 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 104:
-#line 907 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        --parseContext.structNestingLevel;
+  case 104: /* block_structure: type_qualifier IDENTIFIER LEFT_BRACE $@2 struct_declaration_list RIGHT_BRACE  */
+#line 921 "MachineIndependent/glslang.y"
+                                                                                                                          {
+        --parseContext.blockNestingLevel;
         parseContext.blockName = (yyvsp[-4].lex).string;
         parseContext.globalQualifierFixCheck((yyvsp[-5].interm.type).loc, (yyvsp[-5].interm.type).qualifier);
         parseContext.checkNoShaderLayouts((yyvsp[-5].interm.type).loc, (yyvsp[-5].interm.type).shaderQualifiers);
@@ -5194,55 +5559,55 @@
         (yyval.interm).loc = (yyvsp[-5].interm.type).loc;
         (yyval.interm).typeList = (yyvsp[-1].interm.typeList);
     }
-#line 5198 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5563 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 105:
-#line 918 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 105: /* identifier_list: COMMA IDENTIFIER  */
+#line 932 "MachineIndependent/glslang.y"
+                       {
         (yyval.interm.identifierList) = new TIdentifierList;
         (yyval.interm.identifierList)->push_back((yyvsp[0].lex).string);
     }
-#line 5207 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5572 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 106:
-#line 922 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 106: /* identifier_list: identifier_list COMMA IDENTIFIER  */
+#line 936 "MachineIndependent/glslang.y"
+                                       {
         (yyval.interm.identifierList) = (yyvsp[-2].interm.identifierList);
         (yyval.interm.identifierList)->push_back((yyvsp[0].lex).string);
     }
-#line 5216 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5581 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 107:
-#line 929 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 107: /* function_prototype: function_declarator RIGHT_PAREN  */
+#line 943 "MachineIndependent/glslang.y"
+                                       {
         (yyval.interm).function = (yyvsp[-1].interm.function);
         (yyval.interm).loc = (yyvsp[0].lex).loc;
     }
-#line 5225 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5590 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 108:
-#line 936 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 108: /* function_declarator: function_header  */
+#line 950 "MachineIndependent/glslang.y"
+                      {
         (yyval.interm.function) = (yyvsp[0].interm.function);
     }
-#line 5233 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5598 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 109:
-#line 939 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 109: /* function_declarator: function_header_with_parameters  */
+#line 953 "MachineIndependent/glslang.y"
+                                      {
         (yyval.interm.function) = (yyvsp[0].interm.function);
     }
-#line 5241 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5606 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 110:
-#line 946 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 110: /* function_header_with_parameters: function_header parameter_declaration  */
+#line 960 "MachineIndependent/glslang.y"
+                                            {
         // Add the parameter
         (yyval.interm.function) = (yyvsp[-1].interm.function);
         if ((yyvsp[0].interm).param.type->getBasicType() != EbtVoid)
@@ -5250,12 +5615,12 @@
         else
             delete (yyvsp[0].interm).param.type;
     }
-#line 5254 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5619 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 111:
-#line 954 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 111: /* function_header_with_parameters: function_header_with_parameters COMMA parameter_declaration  */
+#line 968 "MachineIndependent/glslang.y"
+                                                                  {
         //
         // Only first parameter of one-parameter functions can be void
         // The check for named parameters not being void is done in parameter_declarator
@@ -5272,12 +5637,12 @@
             (yyvsp[-2].interm.function)->addParameter((yyvsp[0].interm).param);
         }
     }
-#line 5276 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5641 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 112:
-#line 974 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 112: /* function_header: fully_specified_type IDENTIFIER LEFT_PAREN  */
+#line 988 "MachineIndependent/glslang.y"
+                                                 {
         if ((yyvsp[-2].interm.type).qualifier.storage != EvqGlobal && (yyvsp[-2].interm.type).qualifier.storage != EvqTemporary) {
             parseContext.error((yyvsp[-1].lex).loc, "no qualifiers allowed for function return",
                                GetStorageQualifierString((yyvsp[-2].interm.type).qualifier.storage), "");
@@ -5296,12 +5661,12 @@
         function = new TFunction((yyvsp[-1].lex).string, type);
         (yyval.interm.function) = function;
     }
-#line 5300 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5665 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 113:
-#line 997 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 113: /* parameter_declarator: type_specifier IDENTIFIER  */
+#line 1011 "MachineIndependent/glslang.y"
+                                {
         if ((yyvsp[-1].interm.type).arraySizes) {
             parseContext.profileRequires((yyvsp[-1].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type");
             parseContext.profileRequires((yyvsp[-1].interm.type).loc, EEsProfile, 300, 0, "arrayed type");
@@ -5316,12 +5681,12 @@
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).param = param;
     }
-#line 5320 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5685 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 114:
-#line 1012 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 114: /* parameter_declarator: type_specifier IDENTIFIER array_specifier  */
+#line 1026 "MachineIndependent/glslang.y"
+                                                {
         if ((yyvsp[-2].interm.type).arraySizes) {
             parseContext.profileRequires((yyvsp[-2].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type");
             parseContext.profileRequires((yyvsp[-2].interm.type).loc, EEsProfile, 300, 0, "arrayed type");
@@ -5340,12 +5705,12 @@
         (yyval.interm).loc = (yyvsp[-1].lex).loc;
         (yyval.interm).param = param;
     }
-#line 5344 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5709 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 115:
-#line 1037 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 115: /* parameter_declaration: type_qualifier parameter_declarator  */
+#line 1051 "MachineIndependent/glslang.y"
+                                          {
         (yyval.interm) = (yyvsp[0].interm);
         if ((yyvsp[-1].interm.type).qualifier.precision != EpqNone)
             (yyval.interm).param.type->getQualifier().precision = (yyvsp[-1].interm.type).qualifier.precision;
@@ -5356,24 +5721,24 @@
         parseContext.paramCheckFix((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier, *(yyval.interm).param.type);
 
     }
-#line 5360 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5725 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 116:
-#line 1048 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 116: /* parameter_declaration: parameter_declarator  */
+#line 1062 "MachineIndependent/glslang.y"
+                           {
         (yyval.interm) = (yyvsp[0].interm);
 
         parseContext.parameterTypeCheck((yyvsp[0].interm).loc, EvqIn, *(yyvsp[0].interm).param.type);
         parseContext.paramCheckFixStorage((yyvsp[0].interm).loc, EvqTemporary, *(yyval.interm).param.type);
         parseContext.precisionQualifierCheck((yyval.interm).loc, (yyval.interm).param.type->getBasicType(), (yyval.interm).param.type->getQualifier());
     }
-#line 5372 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5737 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 117:
-#line 1058 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 117: /* parameter_declaration: type_qualifier parameter_type_specifier  */
+#line 1072 "MachineIndependent/glslang.y"
+                                              {
         (yyval.interm) = (yyvsp[0].interm);
         if ((yyvsp[-1].interm.type).qualifier.precision != EpqNone)
             (yyval.interm).param.type->getQualifier().precision = (yyvsp[-1].interm.type).qualifier.precision;
@@ -5383,133 +5748,133 @@
         parseContext.parameterTypeCheck((yyvsp[0].interm).loc, (yyvsp[-1].interm.type).qualifier.storage, *(yyval.interm).param.type);
         parseContext.paramCheckFix((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier, *(yyval.interm).param.type);
     }
-#line 5387 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5752 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 118:
-#line 1068 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 118: /* parameter_declaration: parameter_type_specifier  */
+#line 1082 "MachineIndependent/glslang.y"
+                               {
         (yyval.interm) = (yyvsp[0].interm);
 
         parseContext.parameterTypeCheck((yyvsp[0].interm).loc, EvqIn, *(yyvsp[0].interm).param.type);
         parseContext.paramCheckFixStorage((yyvsp[0].interm).loc, EvqTemporary, *(yyval.interm).param.type);
         parseContext.precisionQualifierCheck((yyval.interm).loc, (yyval.interm).param.type->getBasicType(), (yyval.interm).param.type->getQualifier());
     }
-#line 5399 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5764 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 119:
-#line 1078 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 119: /* parameter_type_specifier: type_specifier  */
+#line 1092 "MachineIndependent/glslang.y"
+                     {
         TParameter param = { 0, new TType((yyvsp[0].interm.type)) };
         (yyval.interm).param = param;
         if ((yyvsp[0].interm.type).arraySizes)
             parseContext.arraySizeRequiredCheck((yyvsp[0].interm.type).loc, *(yyvsp[0].interm.type).arraySizes);
     }
-#line 5410 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5775 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 120:
-#line 1087 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 120: /* init_declarator_list: single_declaration  */
+#line 1101 "MachineIndependent/glslang.y"
+                         {
         (yyval.interm) = (yyvsp[0].interm);
     }
-#line 5418 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5783 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 121:
-#line 1090 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 121: /* init_declarator_list: init_declarator_list COMMA IDENTIFIER  */
+#line 1104 "MachineIndependent/glslang.y"
+                                            {
         (yyval.interm) = (yyvsp[-2].interm);
         parseContext.declareVariable((yyvsp[0].lex).loc, *(yyvsp[0].lex).string, (yyvsp[-2].interm).type);
     }
-#line 5427 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5792 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 122:
-#line 1094 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 122: /* init_declarator_list: init_declarator_list COMMA IDENTIFIER array_specifier  */
+#line 1108 "MachineIndependent/glslang.y"
+                                                            {
         (yyval.interm) = (yyvsp[-3].interm);
         parseContext.declareVariable((yyvsp[-1].lex).loc, *(yyvsp[-1].lex).string, (yyvsp[-3].interm).type, (yyvsp[0].interm).arraySizes);
     }
-#line 5436 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5801 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 123:
-#line 1098 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 123: /* init_declarator_list: init_declarator_list COMMA IDENTIFIER array_specifier EQUAL initializer  */
+#line 1112 "MachineIndependent/glslang.y"
+                                                                              {
         (yyval.interm).type = (yyvsp[-5].interm).type;
         TIntermNode* initNode = parseContext.declareVariable((yyvsp[-3].lex).loc, *(yyvsp[-3].lex).string, (yyvsp[-5].interm).type, (yyvsp[-2].interm).arraySizes, (yyvsp[0].interm.intermTypedNode));
         (yyval.interm).intermNode = parseContext.intermediate.growAggregate((yyvsp[-5].interm).intermNode, initNode, (yyvsp[-1].lex).loc);
     }
-#line 5446 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5811 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 124:
-#line 1103 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 124: /* init_declarator_list: init_declarator_list COMMA IDENTIFIER EQUAL initializer  */
+#line 1117 "MachineIndependent/glslang.y"
+                                                              {
         (yyval.interm).type = (yyvsp[-4].interm).type;
         TIntermNode* initNode = parseContext.declareVariable((yyvsp[-2].lex).loc, *(yyvsp[-2].lex).string, (yyvsp[-4].interm).type, 0, (yyvsp[0].interm.intermTypedNode));
         (yyval.interm).intermNode = parseContext.intermediate.growAggregate((yyvsp[-4].interm).intermNode, initNode, (yyvsp[-1].lex).loc);
     }
-#line 5456 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5821 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 125:
-#line 1111 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 125: /* single_declaration: fully_specified_type  */
+#line 1125 "MachineIndependent/glslang.y"
+                           {
         (yyval.interm).type = (yyvsp[0].interm.type);
         (yyval.interm).intermNode = 0;
 
         parseContext.declareTypeDefaults((yyval.interm).loc, (yyval.interm).type);
 
     }
-#line 5468 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5833 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 126:
-#line 1118 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 126: /* single_declaration: fully_specified_type IDENTIFIER  */
+#line 1132 "MachineIndependent/glslang.y"
+                                      {
         (yyval.interm).type = (yyvsp[-1].interm.type);
         (yyval.interm).intermNode = 0;
         parseContext.declareVariable((yyvsp[0].lex).loc, *(yyvsp[0].lex).string, (yyvsp[-1].interm.type));
     }
-#line 5478 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5843 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 127:
-#line 1123 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 127: /* single_declaration: fully_specified_type IDENTIFIER array_specifier  */
+#line 1137 "MachineIndependent/glslang.y"
+                                                      {
         (yyval.interm).type = (yyvsp[-2].interm.type);
         (yyval.interm).intermNode = 0;
         parseContext.declareVariable((yyvsp[-1].lex).loc, *(yyvsp[-1].lex).string, (yyvsp[-2].interm.type), (yyvsp[0].interm).arraySizes);
     }
-#line 5488 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5853 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 128:
-#line 1128 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 128: /* single_declaration: fully_specified_type IDENTIFIER array_specifier EQUAL initializer  */
+#line 1142 "MachineIndependent/glslang.y"
+                                                                        {
         (yyval.interm).type = (yyvsp[-4].interm.type);
         TIntermNode* initNode = parseContext.declareVariable((yyvsp[-3].lex).loc, *(yyvsp[-3].lex).string, (yyvsp[-4].interm.type), (yyvsp[-2].interm).arraySizes, (yyvsp[0].interm.intermTypedNode));
         (yyval.interm).intermNode = parseContext.intermediate.growAggregate(0, initNode, (yyvsp[-1].lex).loc);
     }
-#line 5498 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5863 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 129:
-#line 1133 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 129: /* single_declaration: fully_specified_type IDENTIFIER EQUAL initializer  */
+#line 1147 "MachineIndependent/glslang.y"
+                                                        {
         (yyval.interm).type = (yyvsp[-3].interm.type);
         TIntermNode* initNode = parseContext.declareVariable((yyvsp[-2].lex).loc, *(yyvsp[-2].lex).string, (yyvsp[-3].interm.type), 0, (yyvsp[0].interm.intermTypedNode));
         (yyval.interm).intermNode = parseContext.intermediate.growAggregate(0, initNode, (yyvsp[-1].lex).loc);
     }
-#line 5508 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5873 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 130:
-#line 1142 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 130: /* fully_specified_type: type_specifier  */
+#line 1156 "MachineIndependent/glslang.y"
+                     {
         (yyval.interm.type) = (yyvsp[0].interm.type);
 
         parseContext.globalQualifierTypeCheck((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type).qualifier, (yyval.interm.type));
@@ -5519,12 +5884,12 @@
         }
         parseContext.precisionQualifierCheck((yyval.interm.type).loc, (yyval.interm.type).basicType, (yyval.interm.type).qualifier);
     }
-#line 5523 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5888 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 131:
-#line 1152 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 131: /* fully_specified_type: type_qualifier type_specifier  */
+#line 1166 "MachineIndependent/glslang.y"
+                                     {
         parseContext.globalQualifierFixCheck((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier);
         parseContext.globalQualifierTypeCheck((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier, (yyvsp[0].interm.type));
 
@@ -5548,71 +5913,71 @@
              (parseContext.language == EShLangFragment && (yyval.interm.type).qualifier.storage == EvqVaryingIn)))
             (yyval.interm.type).qualifier.smooth = true;
     }
-#line 5552 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5917 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 132:
-#line 1179 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 132: /* invariant_qualifier: INVARIANT  */
+#line 1193 "MachineIndependent/glslang.y"
+                {
         parseContext.globalCheck((yyvsp[0].lex).loc, "invariant");
         parseContext.profileRequires((yyval.interm.type).loc, ENoProfile, 120, 0, "invariant");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.invariant = true;
     }
-#line 5563 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5928 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 133:
-#line 1188 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 133: /* interpolation_qualifier: SMOOTH  */
+#line 1202 "MachineIndependent/glslang.y"
+             {
         parseContext.globalCheck((yyvsp[0].lex).loc, "smooth");
         parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "smooth");
         parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 300, 0, "smooth");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.smooth = true;
     }
-#line 5575 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5940 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 134:
-#line 1195 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 134: /* interpolation_qualifier: FLAT  */
+#line 1209 "MachineIndependent/glslang.y"
+           {
         parseContext.globalCheck((yyvsp[0].lex).loc, "flat");
         parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "flat");
         parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 300, 0, "flat");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.flat = true;
     }
-#line 5587 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5952 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 135:
-#line 1203 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 135: /* interpolation_qualifier: NOPERSPECTIVE  */
+#line 1217 "MachineIndependent/glslang.y"
+                    {
         parseContext.globalCheck((yyvsp[0].lex).loc, "noperspective");
         parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 0, E_GL_NV_shader_noperspective_interpolation, "noperspective");
         parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "noperspective");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.nopersp = true;
     }
-#line 5599 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5964 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 136:
-#line 1210 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 136: /* interpolation_qualifier: EXPLICITINTERPAMD  */
+#line 1224 "MachineIndependent/glslang.y"
+                        {
         parseContext.globalCheck((yyvsp[0].lex).loc, "__explicitInterpAMD");
         parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 450, E_GL_AMD_shader_explicit_vertex_parameter, "explicit interpolation");
         parseContext.profileRequires((yyvsp[0].lex).loc, ECompatibilityProfile, 450, E_GL_AMD_shader_explicit_vertex_parameter, "explicit interpolation");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.explicitInterp = true;
     }
-#line 5611 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5976 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 137:
-#line 1217 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 137: /* interpolation_qualifier: PERVERTEXNV  */
+#line 1231 "MachineIndependent/glslang.y"
+                  {
         parseContext.globalCheck((yyvsp[0].lex).loc, "pervertexNV");
         parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 0, E_GL_NV_fragment_shader_barycentric, "fragment shader barycentric");
         parseContext.profileRequires((yyvsp[0].lex).loc, ECompatibilityProfile, 0, E_GL_NV_fragment_shader_barycentric, "fragment shader barycentric");
@@ -5620,12 +5985,12 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.pervertexNV = true;
     }
-#line 5624 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5989 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 138:
-#line 1225 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 138: /* interpolation_qualifier: PERPRIMITIVENV  */
+#line 1239 "MachineIndependent/glslang.y"
+                     {
         // No need for profile version or extension check. Shader stage already checks both.
         parseContext.globalCheck((yyvsp[0].lex).loc, "perprimitiveNV");
         parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangFragmentMask | EShLangMeshNVMask), "perprimitiveNV");
@@ -5635,109 +6000,109 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.perPrimitiveNV = true;
     }
-#line 5639 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6004 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 139:
-#line 1235 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 139: /* interpolation_qualifier: PERVIEWNV  */
+#line 1249 "MachineIndependent/glslang.y"
+                {
         // No need for profile version or extension check. Shader stage already checks both.
         parseContext.globalCheck((yyvsp[0].lex).loc, "perviewNV");
         parseContext.requireStage((yyvsp[0].lex).loc, EShLangMeshNV, "perviewNV");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.perViewNV = true;
     }
-#line 5651 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6016 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 140:
-#line 1242 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 140: /* interpolation_qualifier: PERTASKNV  */
+#line 1256 "MachineIndependent/glslang.y"
+                {
         // No need for profile version or extension check. Shader stage already checks both.
         parseContext.globalCheck((yyvsp[0].lex).loc, "taskNV");
         parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangTaskNVMask | EShLangMeshNVMask), "taskNV");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.perTaskNV = true;
     }
-#line 5663 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6028 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 141:
-#line 1253 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 141: /* layout_qualifier: LAYOUT LEFT_PAREN layout_qualifier_id_list RIGHT_PAREN  */
+#line 1267 "MachineIndependent/glslang.y"
+                                                             {
         (yyval.interm.type) = (yyvsp[-1].interm.type);
     }
-#line 5671 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6036 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 142:
-#line 1259 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 142: /* layout_qualifier_id_list: layout_qualifier_id  */
+#line 1273 "MachineIndependent/glslang.y"
+                          {
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 5679 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6044 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 143:
-#line 1262 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 143: /* layout_qualifier_id_list: layout_qualifier_id_list COMMA layout_qualifier_id  */
+#line 1276 "MachineIndependent/glslang.y"
+                                                         {
         (yyval.interm.type) = (yyvsp[-2].interm.type);
         (yyval.interm.type).shaderQualifiers.merge((yyvsp[0].interm.type).shaderQualifiers);
         parseContext.mergeObjectLayoutQualifiers((yyval.interm.type).qualifier, (yyvsp[0].interm.type).qualifier, false);
     }
-#line 5689 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6054 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 144:
-#line 1269 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 144: /* layout_qualifier_id: IDENTIFIER  */
+#line 1283 "MachineIndependent/glslang.y"
+                 {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         parseContext.setLayoutQualifier((yyvsp[0].lex).loc, (yyval.interm.type), *(yyvsp[0].lex).string);
     }
-#line 5698 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6063 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 145:
-#line 1273 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 145: /* layout_qualifier_id: IDENTIFIER EQUAL constant_expression  */
+#line 1287 "MachineIndependent/glslang.y"
+                                           {
         (yyval.interm.type).init((yyvsp[-2].lex).loc);
         parseContext.setLayoutQualifier((yyvsp[-2].lex).loc, (yyval.interm.type), *(yyvsp[-2].lex).string, (yyvsp[0].interm.intermTypedNode));
     }
-#line 5707 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6072 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 146:
-#line 1277 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { // because "shared" is both an identifier and a keyword
+  case 146: /* layout_qualifier_id: SHARED  */
+#line 1291 "MachineIndependent/glslang.y"
+             { // because "shared" is both an identifier and a keyword
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         TString strShared("shared");
         parseContext.setLayoutQualifier((yyvsp[0].lex).loc, (yyval.interm.type), strShared);
     }
-#line 5717 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6082 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 147:
-#line 1286 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 147: /* precise_qualifier: PRECISE  */
+#line 1300 "MachineIndependent/glslang.y"
+              {
         parseContext.profileRequires((yyval.interm.type).loc, ECoreProfile | ECompatibilityProfile, 400, E_GL_ARB_gpu_shader5, "precise");
         parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 320, Num_AEP_gpu_shader5, AEP_gpu_shader5, "precise");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.noContraction = true;
     }
-#line 5728 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6093 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 148:
-#line 1296 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 148: /* type_qualifier: single_type_qualifier  */
+#line 1310 "MachineIndependent/glslang.y"
+                            {
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 5736 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6101 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 149:
-#line 1299 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 149: /* type_qualifier: type_qualifier single_type_qualifier  */
+#line 1313 "MachineIndependent/glslang.y"
+                                           {
         (yyval.interm.type) = (yyvsp[-1].interm.type);
         if ((yyval.interm.type).basicType == EbtVoid)
             (yyval.interm.type).basicType = (yyvsp[0].interm.type).basicType;
@@ -5745,135 +6110,135 @@
         (yyval.interm.type).shaderQualifiers.merge((yyvsp[0].interm.type).shaderQualifiers);
         parseContext.mergeQualifiers((yyval.interm.type).loc, (yyval.interm.type).qualifier, (yyvsp[0].interm.type).qualifier, false);
     }
-#line 5749 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6114 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 150:
-#line 1310 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 150: /* single_type_qualifier: storage_qualifier  */
+#line 1324 "MachineIndependent/glslang.y"
+                        {
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 5757 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6122 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 151:
-#line 1313 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 151: /* single_type_qualifier: layout_qualifier  */
+#line 1327 "MachineIndependent/glslang.y"
+                       {
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 5765 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6130 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 152:
-#line 1316 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 152: /* single_type_qualifier: precision_qualifier  */
+#line 1330 "MachineIndependent/glslang.y"
+                          {
         parseContext.checkPrecisionQualifier((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type).qualifier.precision);
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 5774 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6139 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 153:
-#line 1320 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 153: /* single_type_qualifier: interpolation_qualifier  */
+#line 1334 "MachineIndependent/glslang.y"
+                              {
         // allow inheritance of storage qualifier from block declaration
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 5783 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6148 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 154:
-#line 1324 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 154: /* single_type_qualifier: invariant_qualifier  */
+#line 1338 "MachineIndependent/glslang.y"
+                          {
         // allow inheritance of storage qualifier from block declaration
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 5792 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6157 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 155:
-#line 1329 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 155: /* single_type_qualifier: precise_qualifier  */
+#line 1343 "MachineIndependent/glslang.y"
+                        {
         // allow inheritance of storage qualifier from block declaration
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 5801 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6166 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 156:
-#line 1333 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 156: /* single_type_qualifier: non_uniform_qualifier  */
+#line 1347 "MachineIndependent/glslang.y"
+                            {
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 5809 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6174 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 157:
-#line 1340 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 157: /* storage_qualifier: CONST  */
+#line 1354 "MachineIndependent/glslang.y"
+            {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqConst;  // will later turn into EvqConstReadOnly, if the initializer is not constant
     }
-#line 5818 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6183 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 158:
-#line 1344 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 158: /* storage_qualifier: INOUT  */
+#line 1358 "MachineIndependent/glslang.y"
+            {
         parseContext.globalCheck((yyvsp[0].lex).loc, "inout");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqInOut;
     }
-#line 5828 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6193 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 159:
-#line 1349 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 159: /* storage_qualifier: IN  */
+#line 1363 "MachineIndependent/glslang.y"
+         {
         parseContext.globalCheck((yyvsp[0].lex).loc, "in");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         // whether this is a parameter "in" or a pipeline "in" will get sorted out a bit later
         (yyval.interm.type).qualifier.storage = EvqIn;
     }
-#line 5839 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6204 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 160:
-#line 1355 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 160: /* storage_qualifier: OUT  */
+#line 1369 "MachineIndependent/glslang.y"
+          {
         parseContext.globalCheck((yyvsp[0].lex).loc, "out");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         // whether this is a parameter "out" or a pipeline "out" will get sorted out a bit later
         (yyval.interm.type).qualifier.storage = EvqOut;
     }
-#line 5850 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6215 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 161:
-#line 1361 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 161: /* storage_qualifier: CENTROID  */
+#line 1375 "MachineIndependent/glslang.y"
+               {
         parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 120, 0, "centroid");
         parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 300, 0, "centroid");
         parseContext.globalCheck((yyvsp[0].lex).loc, "centroid");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.centroid = true;
     }
-#line 5862 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6227 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 162:
-#line 1368 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 162: /* storage_qualifier: UNIFORM  */
+#line 1382 "MachineIndependent/glslang.y"
+              {
         parseContext.globalCheck((yyvsp[0].lex).loc, "uniform");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqUniform;
     }
-#line 5872 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6237 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 163:
-#line 1373 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 163: /* storage_qualifier: SHARED  */
+#line 1387 "MachineIndependent/glslang.y"
+             {
         parseContext.globalCheck((yyvsp[0].lex).loc, "shared");
         parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, 430, E_GL_ARB_compute_shader, "shared");
         parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 310, 0, "shared");
@@ -5881,22 +6246,22 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqShared;
     }
-#line 5885 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6250 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 164:
-#line 1381 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 164: /* storage_qualifier: BUFFER  */
+#line 1395 "MachineIndependent/glslang.y"
+             {
         parseContext.globalCheck((yyvsp[0].lex).loc, "buffer");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqBuffer;
     }
-#line 5895 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6260 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 165:
-#line 1387 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 165: /* storage_qualifier: ATTRIBUTE  */
+#line 1401 "MachineIndependent/glslang.y"
+                {
         parseContext.requireStage((yyvsp[0].lex).loc, EShLangVertex, "attribute");
         parseContext.checkDeprecated((yyvsp[0].lex).loc, ECoreProfile, 130, "attribute");
         parseContext.checkDeprecated((yyvsp[0].lex).loc, ENoProfile, 130, "attribute");
@@ -5908,12 +6273,12 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqVaryingIn;
     }
-#line 5912 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6277 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 166:
-#line 1399 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 166: /* storage_qualifier: VARYING  */
+#line 1413 "MachineIndependent/glslang.y"
+              {
         parseContext.checkDeprecated((yyvsp[0].lex).loc, ENoProfile, 130, "varying");
         parseContext.checkDeprecated((yyvsp[0].lex).loc, ECoreProfile, 130, "varying");
         parseContext.requireNotRemoved((yyvsp[0].lex).loc, ECoreProfile, 420, "varying");
@@ -5927,33 +6292,33 @@
         else
             (yyval.interm.type).qualifier.storage = EvqVaryingIn;
     }
-#line 5931 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6296 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 167:
-#line 1413 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 167: /* storage_qualifier: PATCH  */
+#line 1427 "MachineIndependent/glslang.y"
+            {
         parseContext.globalCheck((yyvsp[0].lex).loc, "patch");
         parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangTessControlMask | EShLangTessEvaluationMask), "patch");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.patch = true;
     }
-#line 5942 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6307 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 168:
-#line 1419 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 168: /* storage_qualifier: SAMPLE  */
+#line 1433 "MachineIndependent/glslang.y"
+             {
         parseContext.globalCheck((yyvsp[0].lex).loc, "sample");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.sample = true;
     }
-#line 5952 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6317 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 169:
-#line 1424 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 169: /* storage_qualifier: HITATTRNV  */
+#line 1438 "MachineIndependent/glslang.y"
+                {
         parseContext.globalCheck((yyvsp[0].lex).loc, "hitAttributeNV");
         parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangIntersectMask | EShLangClosestHitMask
             | EShLangAnyHitMask), "hitAttributeNV");
@@ -5961,12 +6326,12 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqHitAttr;
     }
-#line 5965 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6330 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 170:
-#line 1432 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 170: /* storage_qualifier: HITATTREXT  */
+#line 1446 "MachineIndependent/glslang.y"
+                 {
         parseContext.globalCheck((yyvsp[0].lex).loc, "hitAttributeEXT");
         parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangIntersectMask | EShLangClosestHitMask
             | EShLangAnyHitMask), "hitAttributeEXT");
@@ -5974,12 +6339,12 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqHitAttr;
     }
-#line 5978 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6343 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 171:
-#line 1440 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 171: /* storage_qualifier: PAYLOADNV  */
+#line 1454 "MachineIndependent/glslang.y"
+                {
         parseContext.globalCheck((yyvsp[0].lex).loc, "rayPayloadNV");
         parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangRayGenMask | EShLangClosestHitMask |
             EShLangAnyHitMask | EShLangMissMask), "rayPayloadNV");
@@ -5987,12 +6352,12 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqPayload;
     }
-#line 5991 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6356 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 172:
-#line 1448 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 172: /* storage_qualifier: PAYLOADEXT  */
+#line 1462 "MachineIndependent/glslang.y"
+                 {
         parseContext.globalCheck((yyvsp[0].lex).loc, "rayPayloadEXT");
         parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangRayGenMask | EShLangClosestHitMask |
             EShLangAnyHitMask | EShLangMissMask), "rayPayloadEXT");
@@ -6000,12 +6365,12 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqPayload;
     }
-#line 6004 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6369 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 173:
-#line 1456 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 173: /* storage_qualifier: PAYLOADINNV  */
+#line 1470 "MachineIndependent/glslang.y"
+                  {
         parseContext.globalCheck((yyvsp[0].lex).loc, "rayPayloadInNV");
         parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangClosestHitMask |
             EShLangAnyHitMask | EShLangMissMask), "rayPayloadInNV");
@@ -6013,12 +6378,12 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqPayloadIn;
     }
-#line 6017 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6382 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 174:
-#line 1464 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 174: /* storage_qualifier: PAYLOADINEXT  */
+#line 1478 "MachineIndependent/glslang.y"
+                   {
         parseContext.globalCheck((yyvsp[0].lex).loc, "rayPayloadInEXT");
         parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangClosestHitMask |
             EShLangAnyHitMask | EShLangMissMask), "rayPayloadInEXT");
@@ -6026,12 +6391,12 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqPayloadIn;
     }
-#line 6030 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6395 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 175:
-#line 1472 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 175: /* storage_qualifier: CALLDATANV  */
+#line 1486 "MachineIndependent/glslang.y"
+                 {
         parseContext.globalCheck((yyvsp[0].lex).loc, "callableDataNV");
         parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangRayGenMask |
             EShLangClosestHitMask | EShLangMissMask | EShLangCallableMask), "callableDataNV");
@@ -6039,12 +6404,12 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqCallableData;
     }
-#line 6043 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6408 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 176:
-#line 1480 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 176: /* storage_qualifier: CALLDATAEXT  */
+#line 1494 "MachineIndependent/glslang.y"
+                  {
         parseContext.globalCheck((yyvsp[0].lex).loc, "callableDataEXT");
         parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangRayGenMask |
             EShLangClosestHitMask | EShLangMissMask | EShLangCallableMask), "callableDataEXT");
@@ -6052,222 +6417,222 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqCallableData;
     }
-#line 6056 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6421 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 177:
-#line 1488 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 177: /* storage_qualifier: CALLDATAINNV  */
+#line 1502 "MachineIndependent/glslang.y"
+                   {
         parseContext.globalCheck((yyvsp[0].lex).loc, "callableDataInNV");
         parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangCallableMask), "callableDataInNV");
         parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 460, E_GL_NV_ray_tracing, "callableDataInNV");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqCallableDataIn;
     }
-#line 6068 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6433 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 178:
-#line 1495 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 178: /* storage_qualifier: CALLDATAINEXT  */
+#line 1509 "MachineIndependent/glslang.y"
+                    {
         parseContext.globalCheck((yyvsp[0].lex).loc, "callableDataInEXT");
         parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangCallableMask), "callableDataInEXT");
         parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 460, E_GL_EXT_ray_tracing, "callableDataInEXT");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqCallableDataIn;
     }
-#line 6080 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6445 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 179:
-#line 1502 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 179: /* storage_qualifier: COHERENT  */
+#line 1516 "MachineIndependent/glslang.y"
+               {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.coherent = true;
     }
-#line 6089 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6454 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 180:
-#line 1506 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 180: /* storage_qualifier: DEVICECOHERENT  */
+#line 1520 "MachineIndependent/glslang.y"
+                     {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_KHR_memory_scope_semantics, "devicecoherent");
         (yyval.interm.type).qualifier.devicecoherent = true;
     }
-#line 6099 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6464 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 181:
-#line 1511 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 181: /* storage_qualifier: QUEUEFAMILYCOHERENT  */
+#line 1525 "MachineIndependent/glslang.y"
+                          {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_KHR_memory_scope_semantics, "queuefamilycoherent");
         (yyval.interm.type).qualifier.queuefamilycoherent = true;
     }
-#line 6109 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6474 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 182:
-#line 1516 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 182: /* storage_qualifier: WORKGROUPCOHERENT  */
+#line 1530 "MachineIndependent/glslang.y"
+                        {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_KHR_memory_scope_semantics, "workgroupcoherent");
         (yyval.interm.type).qualifier.workgroupcoherent = true;
     }
-#line 6119 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6484 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 183:
-#line 1521 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 183: /* storage_qualifier: SUBGROUPCOHERENT  */
+#line 1535 "MachineIndependent/glslang.y"
+                       {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_KHR_memory_scope_semantics, "subgroupcoherent");
         (yyval.interm.type).qualifier.subgroupcoherent = true;
     }
-#line 6129 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6494 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 184:
-#line 1526 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 184: /* storage_qualifier: NONPRIVATE  */
+#line 1540 "MachineIndependent/glslang.y"
+                 {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_KHR_memory_scope_semantics, "nonprivate");
         (yyval.interm.type).qualifier.nonprivate = true;
     }
-#line 6139 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6504 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 185:
-#line 1531 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 185: /* storage_qualifier: SHADERCALLCOHERENT  */
+#line 1545 "MachineIndependent/glslang.y"
+                         {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_EXT_ray_tracing, "shadercallcoherent");
         (yyval.interm.type).qualifier.shadercallcoherent = true;
     }
-#line 6149 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6514 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 186:
-#line 1536 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 186: /* storage_qualifier: VOLATILE  */
+#line 1550 "MachineIndependent/glslang.y"
+               {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.volatil = true;
     }
-#line 6158 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6523 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 187:
-#line 1540 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 187: /* storage_qualifier: RESTRICT  */
+#line 1554 "MachineIndependent/glslang.y"
+               {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.restrict = true;
     }
-#line 6167 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6532 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 188:
-#line 1544 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 188: /* storage_qualifier: READONLY  */
+#line 1558 "MachineIndependent/glslang.y"
+               {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.readonly = true;
     }
-#line 6176 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6541 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 189:
-#line 1548 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 189: /* storage_qualifier: WRITEONLY  */
+#line 1562 "MachineIndependent/glslang.y"
+                {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.writeonly = true;
     }
-#line 6185 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6550 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 190:
-#line 1552 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 190: /* storage_qualifier: SUBROUTINE  */
+#line 1566 "MachineIndependent/glslang.y"
+                 {
         parseContext.spvRemoved((yyvsp[0].lex).loc, "subroutine");
         parseContext.globalCheck((yyvsp[0].lex).loc, "subroutine");
         parseContext.unimplemented((yyvsp[0].lex).loc, "subroutine");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
     }
-#line 6196 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6561 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 191:
-#line 1558 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 191: /* storage_qualifier: SUBROUTINE LEFT_PAREN type_name_list RIGHT_PAREN  */
+#line 1572 "MachineIndependent/glslang.y"
+                                                       {
         parseContext.spvRemoved((yyvsp[-3].lex).loc, "subroutine");
         parseContext.globalCheck((yyvsp[-3].lex).loc, "subroutine");
         parseContext.unimplemented((yyvsp[-3].lex).loc, "subroutine");
         (yyval.interm.type).init((yyvsp[-3].lex).loc);
     }
-#line 6207 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6572 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 192:
-#line 1569 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 192: /* non_uniform_qualifier: NONUNIFORM  */
+#line 1583 "MachineIndependent/glslang.y"
+                 {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.nonUniform = true;
     }
-#line 6216 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6581 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 193:
-#line 1576 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 193: /* type_name_list: IDENTIFIER  */
+#line 1590 "MachineIndependent/glslang.y"
+                 {
         // TODO
     }
-#line 6224 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6589 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 194:
-#line 1579 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 194: /* type_name_list: type_name_list COMMA IDENTIFIER  */
+#line 1593 "MachineIndependent/glslang.y"
+                                      {
         // TODO: 4.0 semantics: subroutines
         // 1) make sure each identifier is a type declared earlier with SUBROUTINE
         // 2) save all of the identifiers for future comparison with the declared function
     }
-#line 6234 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6599 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 195:
-#line 1588 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 195: /* type_specifier: type_specifier_nonarray type_parameter_specifier_opt  */
+#line 1602 "MachineIndependent/glslang.y"
+                                                           {
         (yyval.interm.type) = (yyvsp[-1].interm.type);
         (yyval.interm.type).qualifier.precision = parseContext.getDefaultPrecision((yyval.interm.type));
         (yyval.interm.type).typeParameters = (yyvsp[0].interm.typeParameters);
     }
-#line 6244 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6609 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 196:
-#line 1593 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 196: /* type_specifier: type_specifier_nonarray type_parameter_specifier_opt array_specifier  */
+#line 1607 "MachineIndependent/glslang.y"
+                                                                           {
         parseContext.arrayOfArrayVersionCheck((yyvsp[0].interm).loc, (yyvsp[0].interm).arraySizes);
         (yyval.interm.type) = (yyvsp[-2].interm.type);
         (yyval.interm.type).qualifier.precision = parseContext.getDefaultPrecision((yyval.interm.type));
         (yyval.interm.type).typeParameters = (yyvsp[-1].interm.typeParameters);
         (yyval.interm.type).arraySizes = (yyvsp[0].interm).arraySizes;
     }
-#line 6256 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6621 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 197:
-#line 1603 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 197: /* array_specifier: LEFT_BRACKET RIGHT_BRACKET  */
+#line 1617 "MachineIndependent/glslang.y"
+                                 {
         (yyval.interm).loc = (yyvsp[-1].lex).loc;
         (yyval.interm).arraySizes = new TArraySizes;
         (yyval.interm).arraySizes->addInnerSize();
     }
-#line 6266 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6631 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 198:
-#line 1608 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 198: /* array_specifier: LEFT_BRACKET conditional_expression RIGHT_BRACKET  */
+#line 1622 "MachineIndependent/glslang.y"
+                                                        {
         (yyval.interm).loc = (yyvsp[-2].lex).loc;
         (yyval.interm).arraySizes = new TArraySizes;
 
@@ -6275,492 +6640,492 @@
         parseContext.arraySizeCheck((yyvsp[-1].interm.intermTypedNode)->getLoc(), (yyvsp[-1].interm.intermTypedNode), size, "array size");
         (yyval.interm).arraySizes->addInnerSize(size);
     }
-#line 6279 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6644 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 199:
-#line 1616 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 199: /* array_specifier: array_specifier LEFT_BRACKET RIGHT_BRACKET  */
+#line 1630 "MachineIndependent/glslang.y"
+                                                 {
         (yyval.interm) = (yyvsp[-2].interm);
         (yyval.interm).arraySizes->addInnerSize();
     }
-#line 6288 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6653 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 200:
-#line 1620 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 200: /* array_specifier: array_specifier LEFT_BRACKET conditional_expression RIGHT_BRACKET  */
+#line 1634 "MachineIndependent/glslang.y"
+                                                                        {
         (yyval.interm) = (yyvsp[-3].interm);
 
         TArraySize size;
         parseContext.arraySizeCheck((yyvsp[-1].interm.intermTypedNode)->getLoc(), (yyvsp[-1].interm.intermTypedNode), size, "array size");
         (yyval.interm).arraySizes->addInnerSize(size);
     }
-#line 6300 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6665 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 201:
-#line 1630 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 201: /* type_parameter_specifier_opt: type_parameter_specifier  */
+#line 1644 "MachineIndependent/glslang.y"
+                               {
         (yyval.interm.typeParameters) = (yyvsp[0].interm.typeParameters);
     }
-#line 6308 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6673 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 202:
-#line 1633 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 202: /* type_parameter_specifier_opt: %empty  */
+#line 1647 "MachineIndependent/glslang.y"
+                        {
         (yyval.interm.typeParameters) = 0;
     }
-#line 6316 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6681 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 203:
-#line 1639 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 203: /* type_parameter_specifier: LEFT_ANGLE type_parameter_specifier_list RIGHT_ANGLE  */
+#line 1653 "MachineIndependent/glslang.y"
+                                                           {
         (yyval.interm.typeParameters) = (yyvsp[-1].interm.typeParameters);
     }
-#line 6324 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6689 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 204:
-#line 1645 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 204: /* type_parameter_specifier_list: unary_expression  */
+#line 1659 "MachineIndependent/glslang.y"
+                       {
         (yyval.interm.typeParameters) = new TArraySizes;
 
         TArraySize size;
         parseContext.arraySizeCheck((yyvsp[0].interm.intermTypedNode)->getLoc(), (yyvsp[0].interm.intermTypedNode), size, "type parameter");
         (yyval.interm.typeParameters)->addInnerSize(size);
     }
-#line 6336 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6701 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 205:
-#line 1652 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 205: /* type_parameter_specifier_list: type_parameter_specifier_list COMMA unary_expression  */
+#line 1666 "MachineIndependent/glslang.y"
+                                                           {
         (yyval.interm.typeParameters) = (yyvsp[-2].interm.typeParameters);
 
         TArraySize size;
         parseContext.arraySizeCheck((yyvsp[0].interm.intermTypedNode)->getLoc(), (yyvsp[0].interm.intermTypedNode), size, "type parameter");
         (yyval.interm.typeParameters)->addInnerSize(size);
     }
-#line 6348 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6713 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 206:
-#line 1662 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 206: /* type_specifier_nonarray: VOID  */
+#line 1676 "MachineIndependent/glslang.y"
+           {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtVoid;
     }
-#line 6357 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6722 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 207:
-#line 1666 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 207: /* type_specifier_nonarray: FLOAT  */
+#line 1680 "MachineIndependent/glslang.y"
+            {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
     }
-#line 6366 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6731 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 208:
-#line 1670 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 208: /* type_specifier_nonarray: INT  */
+#line 1684 "MachineIndependent/glslang.y"
+          {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt;
     }
-#line 6375 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6740 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 209:
-#line 1674 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 209: /* type_specifier_nonarray: UINT  */
+#line 1688 "MachineIndependent/glslang.y"
+           {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint;
     }
-#line 6385 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6750 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 210:
-#line 1679 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 210: /* type_specifier_nonarray: BOOL  */
+#line 1693 "MachineIndependent/glslang.y"
+           {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtBool;
     }
-#line 6394 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6759 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 211:
-#line 1683 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 211: /* type_specifier_nonarray: VEC2  */
+#line 1697 "MachineIndependent/glslang.y"
+           {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setVector(2);
     }
-#line 6404 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6769 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 212:
-#line 1688 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 212: /* type_specifier_nonarray: VEC3  */
+#line 1702 "MachineIndependent/glslang.y"
+           {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setVector(3);
     }
-#line 6414 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6779 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 213:
-#line 1693 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 213: /* type_specifier_nonarray: VEC4  */
+#line 1707 "MachineIndependent/glslang.y"
+           {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setVector(4);
     }
-#line 6424 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6789 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 214:
-#line 1698 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 214: /* type_specifier_nonarray: BVEC2  */
+#line 1712 "MachineIndependent/glslang.y"
+            {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtBool;
         (yyval.interm.type).setVector(2);
     }
-#line 6434 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6799 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 215:
-#line 1703 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 215: /* type_specifier_nonarray: BVEC3  */
+#line 1717 "MachineIndependent/glslang.y"
+            {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtBool;
         (yyval.interm.type).setVector(3);
     }
-#line 6444 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6809 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 216:
-#line 1708 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 216: /* type_specifier_nonarray: BVEC4  */
+#line 1722 "MachineIndependent/glslang.y"
+            {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtBool;
         (yyval.interm.type).setVector(4);
     }
-#line 6454 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6819 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 217:
-#line 1713 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 217: /* type_specifier_nonarray: IVEC2  */
+#line 1727 "MachineIndependent/glslang.y"
+            {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt;
         (yyval.interm.type).setVector(2);
     }
-#line 6464 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6829 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 218:
-#line 1718 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 218: /* type_specifier_nonarray: IVEC3  */
+#line 1732 "MachineIndependent/glslang.y"
+            {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt;
         (yyval.interm.type).setVector(3);
     }
-#line 6474 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6839 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 219:
-#line 1723 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 219: /* type_specifier_nonarray: IVEC4  */
+#line 1737 "MachineIndependent/glslang.y"
+            {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt;
         (yyval.interm.type).setVector(4);
     }
-#line 6484 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6849 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 220:
-#line 1728 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 220: /* type_specifier_nonarray: UVEC2  */
+#line 1742 "MachineIndependent/glslang.y"
+            {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer vector");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint;
         (yyval.interm.type).setVector(2);
     }
-#line 6495 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6860 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 221:
-#line 1734 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 221: /* type_specifier_nonarray: UVEC3  */
+#line 1748 "MachineIndependent/glslang.y"
+            {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer vector");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint;
         (yyval.interm.type).setVector(3);
     }
-#line 6506 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6871 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 222:
-#line 1740 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 222: /* type_specifier_nonarray: UVEC4  */
+#line 1754 "MachineIndependent/glslang.y"
+            {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer vector");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint;
         (yyval.interm.type).setVector(4);
     }
-#line 6517 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6882 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 223:
-#line 1746 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 223: /* type_specifier_nonarray: MAT2  */
+#line 1760 "MachineIndependent/glslang.y"
+           {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(2, 2);
     }
-#line 6527 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6892 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 224:
-#line 1751 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 224: /* type_specifier_nonarray: MAT3  */
+#line 1765 "MachineIndependent/glslang.y"
+           {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(3, 3);
     }
-#line 6537 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6902 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 225:
-#line 1756 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 225: /* type_specifier_nonarray: MAT4  */
+#line 1770 "MachineIndependent/glslang.y"
+           {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(4, 4);
     }
-#line 6547 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6912 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 226:
-#line 1761 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 226: /* type_specifier_nonarray: MAT2X2  */
+#line 1775 "MachineIndependent/glslang.y"
+             {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(2, 2);
     }
-#line 6557 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6922 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 227:
-#line 1766 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 227: /* type_specifier_nonarray: MAT2X3  */
+#line 1780 "MachineIndependent/glslang.y"
+             {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(2, 3);
     }
-#line 6567 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6932 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 228:
-#line 1771 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 228: /* type_specifier_nonarray: MAT2X4  */
+#line 1785 "MachineIndependent/glslang.y"
+             {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(2, 4);
     }
-#line 6577 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6942 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 229:
-#line 1776 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 229: /* type_specifier_nonarray: MAT3X2  */
+#line 1790 "MachineIndependent/glslang.y"
+             {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(3, 2);
     }
-#line 6587 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6952 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 230:
-#line 1781 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 230: /* type_specifier_nonarray: MAT3X3  */
+#line 1795 "MachineIndependent/glslang.y"
+             {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(3, 3);
     }
-#line 6597 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6962 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 231:
-#line 1786 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 231: /* type_specifier_nonarray: MAT3X4  */
+#line 1800 "MachineIndependent/glslang.y"
+             {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(3, 4);
     }
-#line 6607 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6972 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 232:
-#line 1791 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 232: /* type_specifier_nonarray: MAT4X2  */
+#line 1805 "MachineIndependent/glslang.y"
+             {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(4, 2);
     }
-#line 6617 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6982 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 233:
-#line 1796 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 233: /* type_specifier_nonarray: MAT4X3  */
+#line 1810 "MachineIndependent/glslang.y"
+             {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(4, 3);
     }
-#line 6627 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6992 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 234:
-#line 1801 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 234: /* type_specifier_nonarray: MAT4X4  */
+#line 1815 "MachineIndependent/glslang.y"
+             {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(4, 4);
     }
-#line 6637 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7002 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 235:
-#line 1807 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 235: /* type_specifier_nonarray: DOUBLE  */
+#line 1821 "MachineIndependent/glslang.y"
+             {
         parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double");
         if (! parseContext.symbolTable.atBuiltInLevel())
             parseContext.doubleCheck((yyvsp[0].lex).loc, "double");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
     }
-#line 6649 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7014 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 236:
-#line 1814 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 236: /* type_specifier_nonarray: FLOAT16_T  */
+#line 1828 "MachineIndependent/glslang.y"
+                {
         parseContext.float16ScalarVectorCheck((yyvsp[0].lex).loc, "float16_t", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
     }
-#line 6659 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7024 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 237:
-#line 1819 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 237: /* type_specifier_nonarray: FLOAT32_T  */
+#line 1833 "MachineIndependent/glslang.y"
+                {
         parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
     }
-#line 6669 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7034 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 238:
-#line 1824 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 238: /* type_specifier_nonarray: FLOAT64_T  */
+#line 1838 "MachineIndependent/glslang.y"
+                {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
     }
-#line 6679 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7044 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 239:
-#line 1829 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 239: /* type_specifier_nonarray: INT8_T  */
+#line 1843 "MachineIndependent/glslang.y"
+             {
         parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit signed integer", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt8;
     }
-#line 6689 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7054 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 240:
-#line 1834 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 240: /* type_specifier_nonarray: UINT8_T  */
+#line 1848 "MachineIndependent/glslang.y"
+              {
         parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint8;
     }
-#line 6699 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7064 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 241:
-#line 1839 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 241: /* type_specifier_nonarray: INT16_T  */
+#line 1853 "MachineIndependent/glslang.y"
+              {
         parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit signed integer", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt16;
     }
-#line 6709 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7074 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 242:
-#line 1844 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 242: /* type_specifier_nonarray: UINT16_T  */
+#line 1858 "MachineIndependent/glslang.y"
+               {
         parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint16;
     }
-#line 6719 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7084 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 243:
-#line 1849 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 243: /* type_specifier_nonarray: INT32_T  */
+#line 1863 "MachineIndependent/glslang.y"
+              {
         parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt;
     }
-#line 6729 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7094 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 244:
-#line 1854 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 244: /* type_specifier_nonarray: UINT32_T  */
+#line 1868 "MachineIndependent/glslang.y"
+               {
         parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint;
     }
-#line 6739 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7104 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 245:
-#line 1859 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 245: /* type_specifier_nonarray: INT64_T  */
+#line 1873 "MachineIndependent/glslang.y"
+              {
         parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt64;
     }
-#line 6749 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7114 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 246:
-#line 1864 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 246: /* type_specifier_nonarray: UINT64_T  */
+#line 1878 "MachineIndependent/glslang.y"
+               {
         parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint64;
     }
-#line 6759 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7124 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 247:
-#line 1869 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 247: /* type_specifier_nonarray: DVEC2  */
+#line 1883 "MachineIndependent/glslang.y"
+            {
         parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double vector");
         if (! parseContext.symbolTable.atBuiltInLevel())
             parseContext.doubleCheck((yyvsp[0].lex).loc, "double vector");
@@ -6768,12 +7133,12 @@
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setVector(2);
     }
-#line 6772 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7137 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 248:
-#line 1877 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 248: /* type_specifier_nonarray: DVEC3  */
+#line 1891 "MachineIndependent/glslang.y"
+            {
         parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double vector");
         if (! parseContext.symbolTable.atBuiltInLevel())
             parseContext.doubleCheck((yyvsp[0].lex).loc, "double vector");
@@ -6781,12 +7146,12 @@
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setVector(3);
     }
-#line 6785 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7150 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 249:
-#line 1885 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 249: /* type_specifier_nonarray: DVEC4  */
+#line 1899 "MachineIndependent/glslang.y"
+            {
         parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double vector");
         if (! parseContext.symbolTable.atBuiltInLevel())
             parseContext.doubleCheck((yyvsp[0].lex).loc, "double vector");
@@ -6794,375 +7159,375 @@
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setVector(4);
     }
-#line 6798 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7163 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 250:
-#line 1893 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 250: /* type_specifier_nonarray: F16VEC2  */
+#line 1907 "MachineIndependent/glslang.y"
+              {
         parseContext.float16ScalarVectorCheck((yyvsp[0].lex).loc, "half float vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setVector(2);
     }
-#line 6809 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7174 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 251:
-#line 1899 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 251: /* type_specifier_nonarray: F16VEC3  */
+#line 1913 "MachineIndependent/glslang.y"
+              {
         parseContext.float16ScalarVectorCheck((yyvsp[0].lex).loc, "half float vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setVector(3);
     }
-#line 6820 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7185 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 252:
-#line 1905 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 252: /* type_specifier_nonarray: F16VEC4  */
+#line 1919 "MachineIndependent/glslang.y"
+              {
         parseContext.float16ScalarVectorCheck((yyvsp[0].lex).loc, "half float vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setVector(4);
     }
-#line 6831 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7196 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 253:
-#line 1911 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 253: /* type_specifier_nonarray: F32VEC2  */
+#line 1925 "MachineIndependent/glslang.y"
+              {
         parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setVector(2);
     }
-#line 6842 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7207 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 254:
-#line 1917 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 254: /* type_specifier_nonarray: F32VEC3  */
+#line 1931 "MachineIndependent/glslang.y"
+              {
         parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setVector(3);
     }
-#line 6853 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7218 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 255:
-#line 1923 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 255: /* type_specifier_nonarray: F32VEC4  */
+#line 1937 "MachineIndependent/glslang.y"
+              {
         parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setVector(4);
     }
-#line 6864 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7229 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 256:
-#line 1929 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 256: /* type_specifier_nonarray: F64VEC2  */
+#line 1943 "MachineIndependent/glslang.y"
+              {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setVector(2);
     }
-#line 6875 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7240 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 257:
-#line 1935 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 257: /* type_specifier_nonarray: F64VEC3  */
+#line 1949 "MachineIndependent/glslang.y"
+              {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setVector(3);
     }
-#line 6886 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7251 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 258:
-#line 1941 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 258: /* type_specifier_nonarray: F64VEC4  */
+#line 1955 "MachineIndependent/glslang.y"
+              {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setVector(4);
     }
-#line 6897 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7262 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 259:
-#line 1947 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 259: /* type_specifier_nonarray: I8VEC2  */
+#line 1961 "MachineIndependent/glslang.y"
+             {
         parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt8;
         (yyval.interm.type).setVector(2);
     }
-#line 6908 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7273 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 260:
-#line 1953 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 260: /* type_specifier_nonarray: I8VEC3  */
+#line 1967 "MachineIndependent/glslang.y"
+             {
         parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt8;
         (yyval.interm.type).setVector(3);
     }
-#line 6919 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7284 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 261:
-#line 1959 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 261: /* type_specifier_nonarray: I8VEC4  */
+#line 1973 "MachineIndependent/glslang.y"
+             {
         parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt8;
         (yyval.interm.type).setVector(4);
     }
-#line 6930 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7295 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 262:
-#line 1965 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 262: /* type_specifier_nonarray: I16VEC2  */
+#line 1979 "MachineIndependent/glslang.y"
+              {
         parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt16;
         (yyval.interm.type).setVector(2);
     }
-#line 6941 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7306 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 263:
-#line 1971 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 263: /* type_specifier_nonarray: I16VEC3  */
+#line 1985 "MachineIndependent/glslang.y"
+              {
         parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt16;
         (yyval.interm.type).setVector(3);
     }
-#line 6952 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7317 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 264:
-#line 1977 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 264: /* type_specifier_nonarray: I16VEC4  */
+#line 1991 "MachineIndependent/glslang.y"
+              {
         parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt16;
         (yyval.interm.type).setVector(4);
     }
-#line 6963 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7328 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 265:
-#line 1983 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 265: /* type_specifier_nonarray: I32VEC2  */
+#line 1997 "MachineIndependent/glslang.y"
+              {
         parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt;
         (yyval.interm.type).setVector(2);
     }
-#line 6974 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7339 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 266:
-#line 1989 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 266: /* type_specifier_nonarray: I32VEC3  */
+#line 2003 "MachineIndependent/glslang.y"
+              {
         parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt;
         (yyval.interm.type).setVector(3);
     }
-#line 6985 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7350 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 267:
-#line 1995 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 267: /* type_specifier_nonarray: I32VEC4  */
+#line 2009 "MachineIndependent/glslang.y"
+              {
         parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt;
         (yyval.interm.type).setVector(4);
     }
-#line 6996 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7361 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 268:
-#line 2001 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 268: /* type_specifier_nonarray: I64VEC2  */
+#line 2015 "MachineIndependent/glslang.y"
+              {
         parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt64;
         (yyval.interm.type).setVector(2);
     }
-#line 7007 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7372 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 269:
-#line 2007 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 269: /* type_specifier_nonarray: I64VEC3  */
+#line 2021 "MachineIndependent/glslang.y"
+              {
         parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt64;
         (yyval.interm.type).setVector(3);
     }
-#line 7018 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7383 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 270:
-#line 2013 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 270: /* type_specifier_nonarray: I64VEC4  */
+#line 2027 "MachineIndependent/glslang.y"
+              {
         parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt64;
         (yyval.interm.type).setVector(4);
     }
-#line 7029 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7394 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 271:
-#line 2019 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 271: /* type_specifier_nonarray: U8VEC2  */
+#line 2033 "MachineIndependent/glslang.y"
+             {
         parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint8;
         (yyval.interm.type).setVector(2);
     }
-#line 7040 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7405 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 272:
-#line 2025 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 272: /* type_specifier_nonarray: U8VEC3  */
+#line 2039 "MachineIndependent/glslang.y"
+             {
         parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint8;
         (yyval.interm.type).setVector(3);
     }
-#line 7051 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7416 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 273:
-#line 2031 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 273: /* type_specifier_nonarray: U8VEC4  */
+#line 2045 "MachineIndependent/glslang.y"
+             {
         parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint8;
         (yyval.interm.type).setVector(4);
     }
-#line 7062 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7427 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 274:
-#line 2037 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 274: /* type_specifier_nonarray: U16VEC2  */
+#line 2051 "MachineIndependent/glslang.y"
+              {
         parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint16;
         (yyval.interm.type).setVector(2);
     }
-#line 7073 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7438 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 275:
-#line 2043 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 275: /* type_specifier_nonarray: U16VEC3  */
+#line 2057 "MachineIndependent/glslang.y"
+              {
         parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint16;
         (yyval.interm.type).setVector(3);
     }
-#line 7084 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7449 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 276:
-#line 2049 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 276: /* type_specifier_nonarray: U16VEC4  */
+#line 2063 "MachineIndependent/glslang.y"
+              {
         parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint16;
         (yyval.interm.type).setVector(4);
     }
-#line 7095 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7460 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 277:
-#line 2055 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 277: /* type_specifier_nonarray: U32VEC2  */
+#line 2069 "MachineIndependent/glslang.y"
+              {
         parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint;
         (yyval.interm.type).setVector(2);
     }
-#line 7106 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7471 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 278:
-#line 2061 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 278: /* type_specifier_nonarray: U32VEC3  */
+#line 2075 "MachineIndependent/glslang.y"
+              {
         parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint;
         (yyval.interm.type).setVector(3);
     }
-#line 7117 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7482 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 279:
-#line 2067 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 279: /* type_specifier_nonarray: U32VEC4  */
+#line 2081 "MachineIndependent/glslang.y"
+              {
         parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint;
         (yyval.interm.type).setVector(4);
     }
-#line 7128 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7493 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 280:
-#line 2073 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 280: /* type_specifier_nonarray: U64VEC2  */
+#line 2087 "MachineIndependent/glslang.y"
+              {
         parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint64;
         (yyval.interm.type).setVector(2);
     }
-#line 7139 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7504 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 281:
-#line 2079 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 281: /* type_specifier_nonarray: U64VEC3  */
+#line 2093 "MachineIndependent/glslang.y"
+              {
         parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint64;
         (yyval.interm.type).setVector(3);
     }
-#line 7150 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7515 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 282:
-#line 2085 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 282: /* type_specifier_nonarray: U64VEC4  */
+#line 2099 "MachineIndependent/glslang.y"
+              {
         parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint64;
         (yyval.interm.type).setVector(4);
     }
-#line 7161 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7526 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 283:
-#line 2091 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 283: /* type_specifier_nonarray: DMAT2  */
+#line 2105 "MachineIndependent/glslang.y"
+            {
         parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
         if (! parseContext.symbolTable.atBuiltInLevel())
             parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
@@ -7170,12 +7535,12 @@
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(2, 2);
     }
-#line 7174 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7539 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 284:
-#line 2099 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 284: /* type_specifier_nonarray: DMAT3  */
+#line 2113 "MachineIndependent/glslang.y"
+            {
         parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
         if (! parseContext.symbolTable.atBuiltInLevel())
             parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
@@ -7183,12 +7548,12 @@
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(3, 3);
     }
-#line 7187 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7552 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 285:
-#line 2107 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 285: /* type_specifier_nonarray: DMAT4  */
+#line 2121 "MachineIndependent/glslang.y"
+            {
         parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
         if (! parseContext.symbolTable.atBuiltInLevel())
             parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
@@ -7196,12 +7561,12 @@
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(4, 4);
     }
-#line 7200 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7565 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 286:
-#line 2115 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 286: /* type_specifier_nonarray: DMAT2X2  */
+#line 2129 "MachineIndependent/glslang.y"
+              {
         parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
         if (! parseContext.symbolTable.atBuiltInLevel())
             parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
@@ -7209,12 +7574,12 @@
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(2, 2);
     }
-#line 7213 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7578 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 287:
-#line 2123 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 287: /* type_specifier_nonarray: DMAT2X3  */
+#line 2137 "MachineIndependent/glslang.y"
+              {
         parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
         if (! parseContext.symbolTable.atBuiltInLevel())
             parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
@@ -7222,12 +7587,12 @@
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(2, 3);
     }
-#line 7226 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7591 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 288:
-#line 2131 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 288: /* type_specifier_nonarray: DMAT2X4  */
+#line 2145 "MachineIndependent/glslang.y"
+              {
         parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
         if (! parseContext.symbolTable.atBuiltInLevel())
             parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
@@ -7235,12 +7600,12 @@
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(2, 4);
     }
-#line 7239 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7604 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 289:
-#line 2139 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 289: /* type_specifier_nonarray: DMAT3X2  */
+#line 2153 "MachineIndependent/glslang.y"
+              {
         parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
         if (! parseContext.symbolTable.atBuiltInLevel())
             parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
@@ -7248,12 +7613,12 @@
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(3, 2);
     }
-#line 7252 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7617 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 290:
-#line 2147 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 290: /* type_specifier_nonarray: DMAT3X3  */
+#line 2161 "MachineIndependent/glslang.y"
+              {
         parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
         if (! parseContext.symbolTable.atBuiltInLevel())
             parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
@@ -7261,12 +7626,12 @@
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(3, 3);
     }
-#line 7265 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7630 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 291:
-#line 2155 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 291: /* type_specifier_nonarray: DMAT3X4  */
+#line 2169 "MachineIndependent/glslang.y"
+              {
         parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
         if (! parseContext.symbolTable.atBuiltInLevel())
             parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
@@ -7274,12 +7639,12 @@
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(3, 4);
     }
-#line 7278 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7643 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 292:
-#line 2163 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 292: /* type_specifier_nonarray: DMAT4X2  */
+#line 2177 "MachineIndependent/glslang.y"
+              {
         parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
         if (! parseContext.symbolTable.atBuiltInLevel())
             parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
@@ -7287,12 +7652,12 @@
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(4, 2);
     }
-#line 7291 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7656 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 293:
-#line 2171 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 293: /* type_specifier_nonarray: DMAT4X3  */
+#line 2185 "MachineIndependent/glslang.y"
+              {
         parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
         if (! parseContext.symbolTable.atBuiltInLevel())
             parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
@@ -7300,12 +7665,12 @@
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(4, 3);
     }
-#line 7304 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7669 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 294:
-#line 2179 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 294: /* type_specifier_nonarray: DMAT4X4  */
+#line 2193 "MachineIndependent/glslang.y"
+              {
         parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
         if (! parseContext.symbolTable.atBuiltInLevel())
             parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
@@ -7313,2120 +7678,2340 @@
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(4, 4);
     }
-#line 7317 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7682 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 295:
-#line 2187 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 295: /* type_specifier_nonarray: F16MAT2  */
+#line 2201 "MachineIndependent/glslang.y"
+              {
         parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setMatrix(2, 2);
     }
-#line 7328 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7693 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 296:
-#line 2193 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 296: /* type_specifier_nonarray: F16MAT3  */
+#line 2207 "MachineIndependent/glslang.y"
+              {
         parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setMatrix(3, 3);
     }
-#line 7339 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7704 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 297:
-#line 2199 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 297: /* type_specifier_nonarray: F16MAT4  */
+#line 2213 "MachineIndependent/glslang.y"
+              {
         parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setMatrix(4, 4);
     }
-#line 7350 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7715 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 298:
-#line 2205 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 298: /* type_specifier_nonarray: F16MAT2X2  */
+#line 2219 "MachineIndependent/glslang.y"
+                {
         parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setMatrix(2, 2);
     }
-#line 7361 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7726 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 299:
-#line 2211 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 299: /* type_specifier_nonarray: F16MAT2X3  */
+#line 2225 "MachineIndependent/glslang.y"
+                {
         parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setMatrix(2, 3);
     }
-#line 7372 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7737 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 300:
-#line 2217 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 300: /* type_specifier_nonarray: F16MAT2X4  */
+#line 2231 "MachineIndependent/glslang.y"
+                {
         parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setMatrix(2, 4);
     }
-#line 7383 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7748 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 301:
-#line 2223 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 301: /* type_specifier_nonarray: F16MAT3X2  */
+#line 2237 "MachineIndependent/glslang.y"
+                {
         parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setMatrix(3, 2);
     }
-#line 7394 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7759 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 302:
-#line 2229 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 302: /* type_specifier_nonarray: F16MAT3X3  */
+#line 2243 "MachineIndependent/glslang.y"
+                {
         parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setMatrix(3, 3);
     }
-#line 7405 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7770 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 303:
-#line 2235 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 303: /* type_specifier_nonarray: F16MAT3X4  */
+#line 2249 "MachineIndependent/glslang.y"
+                {
         parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setMatrix(3, 4);
     }
-#line 7416 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7781 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 304:
-#line 2241 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 304: /* type_specifier_nonarray: F16MAT4X2  */
+#line 2255 "MachineIndependent/glslang.y"
+                {
         parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setMatrix(4, 2);
     }
-#line 7427 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7792 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 305:
-#line 2247 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 305: /* type_specifier_nonarray: F16MAT4X3  */
+#line 2261 "MachineIndependent/glslang.y"
+                {
         parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setMatrix(4, 3);
     }
-#line 7438 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7803 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 306:
-#line 2253 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 306: /* type_specifier_nonarray: F16MAT4X4  */
+#line 2267 "MachineIndependent/glslang.y"
+                {
         parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setMatrix(4, 4);
     }
-#line 7449 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7814 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 307:
-#line 2259 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 307: /* type_specifier_nonarray: F32MAT2  */
+#line 2273 "MachineIndependent/glslang.y"
+              {
         parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(2, 2);
     }
-#line 7460 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7825 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 308:
-#line 2265 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 308: /* type_specifier_nonarray: F32MAT3  */
+#line 2279 "MachineIndependent/glslang.y"
+              {
         parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(3, 3);
     }
-#line 7471 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7836 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 309:
-#line 2271 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 309: /* type_specifier_nonarray: F32MAT4  */
+#line 2285 "MachineIndependent/glslang.y"
+              {
         parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(4, 4);
     }
-#line 7482 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7847 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 310:
-#line 2277 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 310: /* type_specifier_nonarray: F32MAT2X2  */
+#line 2291 "MachineIndependent/glslang.y"
+                {
         parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(2, 2);
     }
-#line 7493 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7858 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 311:
-#line 2283 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 311: /* type_specifier_nonarray: F32MAT2X3  */
+#line 2297 "MachineIndependent/glslang.y"
+                {
         parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(2, 3);
     }
-#line 7504 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7869 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 312:
-#line 2289 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 312: /* type_specifier_nonarray: F32MAT2X4  */
+#line 2303 "MachineIndependent/glslang.y"
+                {
         parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(2, 4);
     }
-#line 7515 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7880 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 313:
-#line 2295 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 313: /* type_specifier_nonarray: F32MAT3X2  */
+#line 2309 "MachineIndependent/glslang.y"
+                {
         parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(3, 2);
     }
-#line 7526 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7891 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 314:
-#line 2301 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 314: /* type_specifier_nonarray: F32MAT3X3  */
+#line 2315 "MachineIndependent/glslang.y"
+                {
         parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(3, 3);
     }
-#line 7537 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7902 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 315:
-#line 2307 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 315: /* type_specifier_nonarray: F32MAT3X4  */
+#line 2321 "MachineIndependent/glslang.y"
+                {
         parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(3, 4);
     }
-#line 7548 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7913 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 316:
-#line 2313 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 316: /* type_specifier_nonarray: F32MAT4X2  */
+#line 2327 "MachineIndependent/glslang.y"
+                {
         parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(4, 2);
     }
-#line 7559 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7924 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 317:
-#line 2319 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 317: /* type_specifier_nonarray: F32MAT4X3  */
+#line 2333 "MachineIndependent/glslang.y"
+                {
         parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(4, 3);
     }
-#line 7570 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7935 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 318:
-#line 2325 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 318: /* type_specifier_nonarray: F32MAT4X4  */
+#line 2339 "MachineIndependent/glslang.y"
+                {
         parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(4, 4);
     }
-#line 7581 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7946 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 319:
-#line 2331 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 319: /* type_specifier_nonarray: F64MAT2  */
+#line 2345 "MachineIndependent/glslang.y"
+              {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(2, 2);
     }
-#line 7592 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7957 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 320:
-#line 2337 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 320: /* type_specifier_nonarray: F64MAT3  */
+#line 2351 "MachineIndependent/glslang.y"
+              {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(3, 3);
     }
-#line 7603 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7968 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 321:
-#line 2343 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 321: /* type_specifier_nonarray: F64MAT4  */
+#line 2357 "MachineIndependent/glslang.y"
+              {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(4, 4);
     }
-#line 7614 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7979 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 322:
-#line 2349 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 322: /* type_specifier_nonarray: F64MAT2X2  */
+#line 2363 "MachineIndependent/glslang.y"
+                {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(2, 2);
     }
-#line 7625 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7990 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 323:
-#line 2355 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 323: /* type_specifier_nonarray: F64MAT2X3  */
+#line 2369 "MachineIndependent/glslang.y"
+                {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(2, 3);
     }
-#line 7636 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8001 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 324:
-#line 2361 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 324: /* type_specifier_nonarray: F64MAT2X4  */
+#line 2375 "MachineIndependent/glslang.y"
+                {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(2, 4);
     }
-#line 7647 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8012 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 325:
-#line 2367 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 325: /* type_specifier_nonarray: F64MAT3X2  */
+#line 2381 "MachineIndependent/glslang.y"
+                {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(3, 2);
     }
-#line 7658 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8023 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 326:
-#line 2373 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 326: /* type_specifier_nonarray: F64MAT3X3  */
+#line 2387 "MachineIndependent/glslang.y"
+                {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(3, 3);
     }
-#line 7669 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8034 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 327:
-#line 2379 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 327: /* type_specifier_nonarray: F64MAT3X4  */
+#line 2393 "MachineIndependent/glslang.y"
+                {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(3, 4);
     }
-#line 7680 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8045 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 328:
-#line 2385 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 328: /* type_specifier_nonarray: F64MAT4X2  */
+#line 2399 "MachineIndependent/glslang.y"
+                {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(4, 2);
     }
-#line 7691 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8056 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 329:
-#line 2391 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 329: /* type_specifier_nonarray: F64MAT4X3  */
+#line 2405 "MachineIndependent/glslang.y"
+                {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(4, 3);
     }
-#line 7702 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8067 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 330:
-#line 2397 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 330: /* type_specifier_nonarray: F64MAT4X4  */
+#line 2411 "MachineIndependent/glslang.y"
+                {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(4, 4);
     }
-#line 7713 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8078 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 331:
-#line 2403 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 331: /* type_specifier_nonarray: ACCSTRUCTNV  */
+#line 2417 "MachineIndependent/glslang.y"
+                  {
        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
        (yyval.interm.type).basicType = EbtAccStruct;
     }
-#line 7722 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8087 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 332:
-#line 2407 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 332: /* type_specifier_nonarray: ACCSTRUCTEXT  */
+#line 2421 "MachineIndependent/glslang.y"
+                   {
        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
        (yyval.interm.type).basicType = EbtAccStruct;
     }
-#line 7731 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8096 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 333:
-#line 2411 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 333: /* type_specifier_nonarray: RAYQUERYEXT  */
+#line 2425 "MachineIndependent/glslang.y"
+                  {
        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
        (yyval.interm.type).basicType = EbtRayQuery;
     }
-#line 7740 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8105 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 334:
-#line 2415 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 334: /* type_specifier_nonarray: ATOMIC_UINT  */
+#line 2429 "MachineIndependent/glslang.y"
+                  {
         parseContext.vulkanRemoved((yyvsp[0].lex).loc, "atomic counter types");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtAtomicUint;
     }
-#line 7750 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8115 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 335:
-#line 2420 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 335: /* type_specifier_nonarray: SAMPLER1D  */
+#line 2434 "MachineIndependent/glslang.y"
+                {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd1D);
     }
-#line 7760 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8125 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 336:
-#line 2426 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 336: /* type_specifier_nonarray: SAMPLER2D  */
+#line 2440 "MachineIndependent/glslang.y"
+                {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd2D);
     }
-#line 7770 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8135 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 337:
-#line 2431 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 337: /* type_specifier_nonarray: SAMPLER3D  */
+#line 2445 "MachineIndependent/glslang.y"
+                {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd3D);
     }
-#line 7780 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8145 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 338:
-#line 2436 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 338: /* type_specifier_nonarray: SAMPLERCUBE  */
+#line 2450 "MachineIndependent/glslang.y"
+                  {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, EsdCube);
     }
-#line 7790 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8155 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 339:
-#line 2441 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 339: /* type_specifier_nonarray: SAMPLER2DSHADOW  */
+#line 2455 "MachineIndependent/glslang.y"
+                      {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd2D, false, true);
     }
-#line 7800 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8165 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 340:
-#line 2446 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 340: /* type_specifier_nonarray: SAMPLERCUBESHADOW  */
+#line 2460 "MachineIndependent/glslang.y"
+                        {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, EsdCube, false, true);
     }
-#line 7810 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8175 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 341:
-#line 2451 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 341: /* type_specifier_nonarray: SAMPLER2DARRAY  */
+#line 2465 "MachineIndependent/glslang.y"
+                     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd2D, true);
     }
-#line 7820 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8185 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 342:
-#line 2456 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 342: /* type_specifier_nonarray: SAMPLER2DARRAYSHADOW  */
+#line 2470 "MachineIndependent/glslang.y"
+                           {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd2D, true, true);
     }
-#line 7830 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8195 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 343:
-#line 2462 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 343: /* type_specifier_nonarray: SAMPLER1DSHADOW  */
+#line 2476 "MachineIndependent/glslang.y"
+                      {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd1D, false, true);
     }
-#line 7840 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8205 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 344:
-#line 2467 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 344: /* type_specifier_nonarray: SAMPLER1DARRAY  */
+#line 2481 "MachineIndependent/glslang.y"
+                     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd1D, true);
     }
-#line 7850 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8215 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 345:
-#line 2472 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 345: /* type_specifier_nonarray: SAMPLER1DARRAYSHADOW  */
+#line 2486 "MachineIndependent/glslang.y"
+                           {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd1D, true, true);
     }
-#line 7860 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8225 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 346:
-#line 2477 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 346: /* type_specifier_nonarray: SAMPLERCUBEARRAY  */
+#line 2491 "MachineIndependent/glslang.y"
+                       {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, EsdCube, true);
     }
-#line 7870 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8235 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 347:
-#line 2482 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 347: /* type_specifier_nonarray: SAMPLERCUBEARRAYSHADOW  */
+#line 2496 "MachineIndependent/glslang.y"
+                             {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, EsdCube, true, true);
     }
-#line 7880 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8245 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 348:
-#line 2487 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 348: /* type_specifier_nonarray: F16SAMPLER1D  */
+#line 2501 "MachineIndependent/glslang.y"
+                   {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat16, Esd1D);
     }
-#line 7891 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8256 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 349:
-#line 2493 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 349: /* type_specifier_nonarray: F16SAMPLER2D  */
+#line 2507 "MachineIndependent/glslang.y"
+                   {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat16, Esd2D);
     }
-#line 7902 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8267 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 350:
-#line 2499 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 350: /* type_specifier_nonarray: F16SAMPLER3D  */
+#line 2513 "MachineIndependent/glslang.y"
+                   {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat16, Esd3D);
     }
-#line 7913 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8278 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 351:
-#line 2505 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 351: /* type_specifier_nonarray: F16SAMPLERCUBE  */
+#line 2519 "MachineIndependent/glslang.y"
+                     {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat16, EsdCube);
     }
-#line 7924 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8289 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 352:
-#line 2511 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 352: /* type_specifier_nonarray: F16SAMPLER1DSHADOW  */
+#line 2525 "MachineIndependent/glslang.y"
+                         {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat16, Esd1D, false, true);
     }
-#line 7935 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8300 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 353:
-#line 2517 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 353: /* type_specifier_nonarray: F16SAMPLER2DSHADOW  */
+#line 2531 "MachineIndependent/glslang.y"
+                         {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, false, true);
     }
-#line 7946 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8311 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 354:
-#line 2523 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 354: /* type_specifier_nonarray: F16SAMPLERCUBESHADOW  */
+#line 2537 "MachineIndependent/glslang.y"
+                           {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat16, EsdCube, false, true);
     }
-#line 7957 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8322 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 355:
-#line 2529 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 355: /* type_specifier_nonarray: F16SAMPLER1DARRAY  */
+#line 2543 "MachineIndependent/glslang.y"
+                        {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat16, Esd1D, true);
     }
-#line 7968 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8333 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 356:
-#line 2535 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 356: /* type_specifier_nonarray: F16SAMPLER2DARRAY  */
+#line 2549 "MachineIndependent/glslang.y"
+                        {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, true);
     }
-#line 7979 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8344 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 357:
-#line 2541 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 357: /* type_specifier_nonarray: F16SAMPLER1DARRAYSHADOW  */
+#line 2555 "MachineIndependent/glslang.y"
+                              {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat16, Esd1D, true, true);
     }
-#line 7990 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8355 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 358:
-#line 2547 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 358: /* type_specifier_nonarray: F16SAMPLER2DARRAYSHADOW  */
+#line 2561 "MachineIndependent/glslang.y"
+                              {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, true, true);
     }
-#line 8001 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8366 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 359:
-#line 2553 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 359: /* type_specifier_nonarray: F16SAMPLERCUBEARRAY  */
+#line 2567 "MachineIndependent/glslang.y"
+                          {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat16, EsdCube, true);
     }
-#line 8012 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8377 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 360:
-#line 2559 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 360: /* type_specifier_nonarray: F16SAMPLERCUBEARRAYSHADOW  */
+#line 2573 "MachineIndependent/glslang.y"
+                                {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat16, EsdCube, true, true);
     }
-#line 8023 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8388 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 361:
-#line 2565 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 361: /* type_specifier_nonarray: ISAMPLER1D  */
+#line 2579 "MachineIndependent/glslang.y"
+                 {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, Esd1D);
     }
-#line 8033 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8398 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 362:
-#line 2571 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 362: /* type_specifier_nonarray: ISAMPLER2D  */
+#line 2585 "MachineIndependent/glslang.y"
+                 {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, Esd2D);
     }
-#line 8043 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8408 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 363:
-#line 2576 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 363: /* type_specifier_nonarray: ISAMPLER3D  */
+#line 2590 "MachineIndependent/glslang.y"
+                 {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, Esd3D);
     }
-#line 8053 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8418 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 364:
-#line 2581 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 364: /* type_specifier_nonarray: ISAMPLERCUBE  */
+#line 2595 "MachineIndependent/glslang.y"
+                   {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, EsdCube);
     }
-#line 8063 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8428 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 365:
-#line 2586 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 365: /* type_specifier_nonarray: ISAMPLER2DARRAY  */
+#line 2600 "MachineIndependent/glslang.y"
+                      {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, Esd2D, true);
     }
-#line 8073 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8438 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 366:
-#line 2591 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 366: /* type_specifier_nonarray: USAMPLER2D  */
+#line 2605 "MachineIndependent/glslang.y"
+                 {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, Esd2D);
     }
-#line 8083 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8448 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 367:
-#line 2596 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 367: /* type_specifier_nonarray: USAMPLER3D  */
+#line 2610 "MachineIndependent/glslang.y"
+                 {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, Esd3D);
     }
-#line 8093 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8458 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 368:
-#line 2601 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 368: /* type_specifier_nonarray: USAMPLERCUBE  */
+#line 2615 "MachineIndependent/glslang.y"
+                   {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, EsdCube);
     }
-#line 8103 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8468 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 369:
-#line 2607 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 369: /* type_specifier_nonarray: ISAMPLER1DARRAY  */
+#line 2621 "MachineIndependent/glslang.y"
+                      {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, Esd1D, true);
     }
-#line 8113 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8478 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 370:
-#line 2612 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 370: /* type_specifier_nonarray: ISAMPLERCUBEARRAY  */
+#line 2626 "MachineIndependent/glslang.y"
+                        {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, EsdCube, true);
     }
-#line 8123 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8488 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 371:
-#line 2617 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 371: /* type_specifier_nonarray: USAMPLER1D  */
+#line 2631 "MachineIndependent/glslang.y"
+                 {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, Esd1D);
     }
-#line 8133 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8498 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 372:
-#line 2622 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 372: /* type_specifier_nonarray: USAMPLER1DARRAY  */
+#line 2636 "MachineIndependent/glslang.y"
+                      {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, Esd1D, true);
     }
-#line 8143 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8508 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 373:
-#line 2627 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 373: /* type_specifier_nonarray: USAMPLERCUBEARRAY  */
+#line 2641 "MachineIndependent/glslang.y"
+                        {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, EsdCube, true);
     }
-#line 8153 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8518 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 374:
-#line 2632 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 374: /* type_specifier_nonarray: TEXTURECUBEARRAY  */
+#line 2646 "MachineIndependent/glslang.y"
+                       {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat, EsdCube, true);
     }
-#line 8163 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8528 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 375:
-#line 2637 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 375: /* type_specifier_nonarray: ITEXTURECUBEARRAY  */
+#line 2651 "MachineIndependent/glslang.y"
+                        {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtInt, EsdCube, true);
     }
-#line 8173 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8538 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 376:
-#line 2642 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 376: /* type_specifier_nonarray: UTEXTURECUBEARRAY  */
+#line 2656 "MachineIndependent/glslang.y"
+                        {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtUint, EsdCube, true);
     }
-#line 8183 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8548 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 377:
-#line 2648 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 377: /* type_specifier_nonarray: USAMPLER2DARRAY  */
+#line 2662 "MachineIndependent/glslang.y"
+                      {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, Esd2D, true);
     }
-#line 8193 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8558 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 378:
-#line 2653 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 378: /* type_specifier_nonarray: TEXTURE2D  */
+#line 2667 "MachineIndependent/glslang.y"
+                {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D);
     }
-#line 8203 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8568 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 379:
-#line 2658 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 379: /* type_specifier_nonarray: TEXTURE3D  */
+#line 2672 "MachineIndependent/glslang.y"
+                {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat, Esd3D);
     }
-#line 8213 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8578 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 380:
-#line 2663 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 380: /* type_specifier_nonarray: TEXTURE2DARRAY  */
+#line 2677 "MachineIndependent/glslang.y"
+                     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D, true);
     }
-#line 8223 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8588 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 381:
-#line 2668 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 381: /* type_specifier_nonarray: TEXTURECUBE  */
+#line 2682 "MachineIndependent/glslang.y"
+                  {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat, EsdCube);
     }
-#line 8233 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8598 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 382:
-#line 2673 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 382: /* type_specifier_nonarray: ITEXTURE2D  */
+#line 2687 "MachineIndependent/glslang.y"
+                 {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtInt, Esd2D);
     }
-#line 8243 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8608 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 383:
-#line 2678 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 383: /* type_specifier_nonarray: ITEXTURE3D  */
+#line 2692 "MachineIndependent/glslang.y"
+                 {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtInt, Esd3D);
     }
-#line 8253 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8618 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 384:
-#line 2683 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 384: /* type_specifier_nonarray: ITEXTURECUBE  */
+#line 2697 "MachineIndependent/glslang.y"
+                   {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtInt, EsdCube);
     }
-#line 8263 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8628 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 385:
-#line 2688 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 385: /* type_specifier_nonarray: ITEXTURE2DARRAY  */
+#line 2702 "MachineIndependent/glslang.y"
+                      {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtInt, Esd2D, true);
     }
-#line 8273 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8638 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 386:
-#line 2693 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 386: /* type_specifier_nonarray: UTEXTURE2D  */
+#line 2707 "MachineIndependent/glslang.y"
+                 {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtUint, Esd2D);
     }
-#line 8283 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8648 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 387:
-#line 2698 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 387: /* type_specifier_nonarray: UTEXTURE3D  */
+#line 2712 "MachineIndependent/glslang.y"
+                 {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtUint, Esd3D);
     }
-#line 8293 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8658 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 388:
-#line 2703 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 388: /* type_specifier_nonarray: UTEXTURECUBE  */
+#line 2717 "MachineIndependent/glslang.y"
+                   {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtUint, EsdCube);
     }
-#line 8303 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8668 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 389:
-#line 2708 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 389: /* type_specifier_nonarray: UTEXTURE2DARRAY  */
+#line 2722 "MachineIndependent/glslang.y"
+                      {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtUint, Esd2D, true);
     }
-#line 8313 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8678 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 390:
-#line 2713 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 390: /* type_specifier_nonarray: SAMPLER  */
+#line 2727 "MachineIndependent/glslang.y"
+              {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setPureSampler(false);
     }
-#line 8323 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8688 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 391:
-#line 2718 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 391: /* type_specifier_nonarray: SAMPLERSHADOW  */
+#line 2732 "MachineIndependent/glslang.y"
+                    {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setPureSampler(true);
     }
-#line 8333 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8698 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 392:
-#line 2724 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 392: /* type_specifier_nonarray: SAMPLER2DRECT  */
+#line 2738 "MachineIndependent/glslang.y"
+                    {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, EsdRect);
     }
-#line 8343 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8708 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 393:
-#line 2729 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 393: /* type_specifier_nonarray: SAMPLER2DRECTSHADOW  */
+#line 2743 "MachineIndependent/glslang.y"
+                          {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, EsdRect, false, true);
     }
-#line 8353 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8718 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 394:
-#line 2734 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 394: /* type_specifier_nonarray: F16SAMPLER2DRECT  */
+#line 2748 "MachineIndependent/glslang.y"
+                       {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat16, EsdRect);
     }
-#line 8364 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8729 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 395:
-#line 2740 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 395: /* type_specifier_nonarray: F16SAMPLER2DRECTSHADOW  */
+#line 2754 "MachineIndependent/glslang.y"
+                             {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat16, EsdRect, false, true);
     }
-#line 8375 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8740 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 396:
-#line 2746 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 396: /* type_specifier_nonarray: ISAMPLER2DRECT  */
+#line 2760 "MachineIndependent/glslang.y"
+                     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, EsdRect);
     }
-#line 8385 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8750 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 397:
-#line 2751 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 397: /* type_specifier_nonarray: USAMPLER2DRECT  */
+#line 2765 "MachineIndependent/glslang.y"
+                     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, EsdRect);
     }
-#line 8395 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8760 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 398:
-#line 2756 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 398: /* type_specifier_nonarray: SAMPLERBUFFER  */
+#line 2770 "MachineIndependent/glslang.y"
+                    {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, EsdBuffer);
     }
-#line 8405 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8770 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 399:
-#line 2761 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 399: /* type_specifier_nonarray: F16SAMPLERBUFFER  */
+#line 2775 "MachineIndependent/glslang.y"
+                       {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat16, EsdBuffer);
     }
-#line 8416 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8781 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 400:
-#line 2767 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 400: /* type_specifier_nonarray: ISAMPLERBUFFER  */
+#line 2781 "MachineIndependent/glslang.y"
+                     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, EsdBuffer);
     }
-#line 8426 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8791 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 401:
-#line 2772 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 401: /* type_specifier_nonarray: USAMPLERBUFFER  */
+#line 2786 "MachineIndependent/glslang.y"
+                     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, EsdBuffer);
     }
-#line 8436 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8801 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 402:
-#line 2777 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 402: /* type_specifier_nonarray: SAMPLER2DMS  */
+#line 2791 "MachineIndependent/glslang.y"
+                  {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd2D, false, false, true);
     }
-#line 8446 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8811 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 403:
-#line 2782 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 403: /* type_specifier_nonarray: F16SAMPLER2DMS  */
+#line 2796 "MachineIndependent/glslang.y"
+                     {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, false, false, true);
     }
-#line 8457 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8822 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 404:
-#line 2788 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 404: /* type_specifier_nonarray: ISAMPLER2DMS  */
+#line 2802 "MachineIndependent/glslang.y"
+                   {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, Esd2D, false, false, true);
     }
-#line 8467 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8832 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 405:
-#line 2793 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 405: /* type_specifier_nonarray: USAMPLER2DMS  */
+#line 2807 "MachineIndependent/glslang.y"
+                   {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, Esd2D, false, false, true);
     }
-#line 8477 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8842 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 406:
-#line 2798 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 406: /* type_specifier_nonarray: SAMPLER2DMSARRAY  */
+#line 2812 "MachineIndependent/glslang.y"
+                       {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd2D, true, false, true);
     }
-#line 8487 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8852 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 407:
-#line 2803 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 407: /* type_specifier_nonarray: F16SAMPLER2DMSARRAY  */
+#line 2817 "MachineIndependent/glslang.y"
+                          {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, true, false, true);
     }
-#line 8498 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8863 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 408:
-#line 2809 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 408: /* type_specifier_nonarray: ISAMPLER2DMSARRAY  */
+#line 2823 "MachineIndependent/glslang.y"
+                        {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, Esd2D, true, false, true);
     }
-#line 8508 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8873 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 409:
-#line 2814 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 409: /* type_specifier_nonarray: USAMPLER2DMSARRAY  */
+#line 2828 "MachineIndependent/glslang.y"
+                        {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, Esd2D, true, false, true);
     }
-#line 8518 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8883 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 410:
-#line 2819 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 410: /* type_specifier_nonarray: TEXTURE1D  */
+#line 2833 "MachineIndependent/glslang.y"
+                {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat, Esd1D);
     }
-#line 8528 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8893 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 411:
-#line 2824 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 411: /* type_specifier_nonarray: F16TEXTURE1D  */
+#line 2838 "MachineIndependent/glslang.y"
+                   {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd1D);
     }
-#line 8539 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8904 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 412:
-#line 2830 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 412: /* type_specifier_nonarray: F16TEXTURE2D  */
+#line 2844 "MachineIndependent/glslang.y"
+                   {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd2D);
     }
-#line 8550 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8915 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 413:
-#line 2836 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 413: /* type_specifier_nonarray: F16TEXTURE3D  */
+#line 2850 "MachineIndependent/glslang.y"
+                   {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd3D);
     }
-#line 8561 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8926 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 414:
-#line 2842 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 414: /* type_specifier_nonarray: F16TEXTURECUBE  */
+#line 2856 "MachineIndependent/glslang.y"
+                     {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat16, EsdCube);
     }
-#line 8572 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8937 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 415:
-#line 2848 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 415: /* type_specifier_nonarray: TEXTURE1DARRAY  */
+#line 2862 "MachineIndependent/glslang.y"
+                     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat, Esd1D, true);
     }
-#line 8582 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8947 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 416:
-#line 2853 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 416: /* type_specifier_nonarray: F16TEXTURE1DARRAY  */
+#line 2867 "MachineIndependent/glslang.y"
+                        {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd1D, true);
     }
-#line 8593 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8958 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 417:
-#line 2859 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 417: /* type_specifier_nonarray: F16TEXTURE2DARRAY  */
+#line 2873 "MachineIndependent/glslang.y"
+                        {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd2D, true);
     }
-#line 8604 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8969 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 418:
-#line 2865 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 418: /* type_specifier_nonarray: F16TEXTURECUBEARRAY  */
+#line 2879 "MachineIndependent/glslang.y"
+                          {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat16, EsdCube, true);
     }
-#line 8615 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8980 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 419:
-#line 2871 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 419: /* type_specifier_nonarray: ITEXTURE1D  */
+#line 2885 "MachineIndependent/glslang.y"
+                 {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtInt, Esd1D);
     }
-#line 8625 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8990 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 420:
-#line 2876 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 420: /* type_specifier_nonarray: ITEXTURE1DARRAY  */
+#line 2890 "MachineIndependent/glslang.y"
+                      {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtInt, Esd1D, true);
     }
-#line 8635 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9000 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 421:
-#line 2881 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 421: /* type_specifier_nonarray: UTEXTURE1D  */
+#line 2895 "MachineIndependent/glslang.y"
+                 {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtUint, Esd1D);
     }
-#line 8645 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9010 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 422:
-#line 2886 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 422: /* type_specifier_nonarray: UTEXTURE1DARRAY  */
+#line 2900 "MachineIndependent/glslang.y"
+                      {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtUint, Esd1D, true);
     }
-#line 8655 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9020 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 423:
-#line 2891 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 423: /* type_specifier_nonarray: TEXTURE2DRECT  */
+#line 2905 "MachineIndependent/glslang.y"
+                    {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat, EsdRect);
     }
-#line 8665 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9030 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 424:
-#line 2896 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 424: /* type_specifier_nonarray: F16TEXTURE2DRECT  */
+#line 2910 "MachineIndependent/glslang.y"
+                       {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat16, EsdRect);
     }
-#line 8676 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9041 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 425:
-#line 2902 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 425: /* type_specifier_nonarray: ITEXTURE2DRECT  */
+#line 2916 "MachineIndependent/glslang.y"
+                     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtInt, EsdRect);
     }
-#line 8686 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9051 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 426:
-#line 2907 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 426: /* type_specifier_nonarray: UTEXTURE2DRECT  */
+#line 2921 "MachineIndependent/glslang.y"
+                     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtUint, EsdRect);
     }
-#line 8696 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9061 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 427:
-#line 2912 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 427: /* type_specifier_nonarray: TEXTUREBUFFER  */
+#line 2926 "MachineIndependent/glslang.y"
+                    {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat, EsdBuffer);
     }
-#line 8706 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9071 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 428:
-#line 2917 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 428: /* type_specifier_nonarray: F16TEXTUREBUFFER  */
+#line 2931 "MachineIndependent/glslang.y"
+                       {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat16, EsdBuffer);
     }
-#line 8717 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9082 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 429:
-#line 2923 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 429: /* type_specifier_nonarray: ITEXTUREBUFFER  */
+#line 2937 "MachineIndependent/glslang.y"
+                     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtInt, EsdBuffer);
     }
-#line 8727 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9092 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 430:
-#line 2928 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 430: /* type_specifier_nonarray: UTEXTUREBUFFER  */
+#line 2942 "MachineIndependent/glslang.y"
+                     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtUint, EsdBuffer);
     }
-#line 8737 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9102 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 431:
-#line 2933 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 431: /* type_specifier_nonarray: TEXTURE2DMS  */
+#line 2947 "MachineIndependent/glslang.y"
+                  {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D, false, false, true);
     }
-#line 8747 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9112 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 432:
-#line 2938 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 432: /* type_specifier_nonarray: F16TEXTURE2DMS  */
+#line 2952 "MachineIndependent/glslang.y"
+                     {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd2D, false, false, true);
     }
-#line 8758 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9123 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 433:
-#line 2944 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 433: /* type_specifier_nonarray: ITEXTURE2DMS  */
+#line 2958 "MachineIndependent/glslang.y"
+                   {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtInt, Esd2D, false, false, true);
     }
-#line 8768 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9133 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 434:
-#line 2949 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 434: /* type_specifier_nonarray: UTEXTURE2DMS  */
+#line 2963 "MachineIndependent/glslang.y"
+                   {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtUint, Esd2D, false, false, true);
     }
-#line 8778 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9143 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 435:
-#line 2954 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 435: /* type_specifier_nonarray: TEXTURE2DMSARRAY  */
+#line 2968 "MachineIndependent/glslang.y"
+                       {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D, true, false, true);
     }
-#line 8788 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9153 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 436:
-#line 2959 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 436: /* type_specifier_nonarray: F16TEXTURE2DMSARRAY  */
+#line 2973 "MachineIndependent/glslang.y"
+                          {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd2D, true, false, true);
     }
-#line 8799 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9164 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 437:
-#line 2965 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 437: /* type_specifier_nonarray: ITEXTURE2DMSARRAY  */
+#line 2979 "MachineIndependent/glslang.y"
+                        {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtInt, Esd2D, true, false, true);
     }
-#line 8809 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9174 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 438:
-#line 2970 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 438: /* type_specifier_nonarray: UTEXTURE2DMSARRAY  */
+#line 2984 "MachineIndependent/glslang.y"
+                        {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtUint, Esd2D, true, false, true);
     }
-#line 8819 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9184 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 439:
-#line 2975 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 439: /* type_specifier_nonarray: IMAGE1D  */
+#line 2989 "MachineIndependent/glslang.y"
+              {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, Esd1D);
     }
-#line 8829 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9194 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 440:
-#line 2980 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 440: /* type_specifier_nonarray: F16IMAGE1D  */
+#line 2994 "MachineIndependent/glslang.y"
+                 {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat16, Esd1D);
     }
-#line 8840 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9205 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 441:
-#line 2986 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 441: /* type_specifier_nonarray: IIMAGE1D  */
+#line 3000 "MachineIndependent/glslang.y"
+               {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, Esd1D);
     }
-#line 8850 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9215 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 442:
-#line 2991 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 442: /* type_specifier_nonarray: UIMAGE1D  */
+#line 3005 "MachineIndependent/glslang.y"
+               {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, Esd1D);
     }
-#line 8860 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9225 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 443:
-#line 2996 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 443: /* type_specifier_nonarray: IMAGE2D  */
+#line 3010 "MachineIndependent/glslang.y"
+              {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, Esd2D);
     }
-#line 8870 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9235 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 444:
-#line 3001 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 444: /* type_specifier_nonarray: F16IMAGE2D  */
+#line 3015 "MachineIndependent/glslang.y"
+                 {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat16, Esd2D);
     }
-#line 8881 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9246 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 445:
-#line 3007 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 445: /* type_specifier_nonarray: IIMAGE2D  */
+#line 3021 "MachineIndependent/glslang.y"
+               {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, Esd2D);
     }
-#line 8891 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9256 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 446:
-#line 3012 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 446: /* type_specifier_nonarray: UIMAGE2D  */
+#line 3026 "MachineIndependent/glslang.y"
+               {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, Esd2D);
     }
-#line 8901 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9266 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 447:
-#line 3017 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 447: /* type_specifier_nonarray: IMAGE3D  */
+#line 3031 "MachineIndependent/glslang.y"
+              {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, Esd3D);
     }
-#line 8911 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9276 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 448:
-#line 3022 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 448: /* type_specifier_nonarray: F16IMAGE3D  */
+#line 3036 "MachineIndependent/glslang.y"
+                 {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat16, Esd3D);
     }
-#line 8922 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9287 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 449:
-#line 3028 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 449: /* type_specifier_nonarray: IIMAGE3D  */
+#line 3042 "MachineIndependent/glslang.y"
+               {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, Esd3D);
     }
-#line 8932 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9297 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 450:
-#line 3033 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 450: /* type_specifier_nonarray: UIMAGE3D  */
+#line 3047 "MachineIndependent/glslang.y"
+               {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, Esd3D);
     }
-#line 8942 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9307 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 451:
-#line 3038 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 451: /* type_specifier_nonarray: IMAGE2DRECT  */
+#line 3052 "MachineIndependent/glslang.y"
+                  {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, EsdRect);
     }
-#line 8952 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9317 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 452:
-#line 3043 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 452: /* type_specifier_nonarray: F16IMAGE2DRECT  */
+#line 3057 "MachineIndependent/glslang.y"
+                     {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat16, EsdRect);
     }
-#line 8963 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9328 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 453:
-#line 3049 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 453: /* type_specifier_nonarray: IIMAGE2DRECT  */
+#line 3063 "MachineIndependent/glslang.y"
+                   {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, EsdRect);
     }
-#line 8973 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9338 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 454:
-#line 3054 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 454: /* type_specifier_nonarray: UIMAGE2DRECT  */
+#line 3068 "MachineIndependent/glslang.y"
+                   {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, EsdRect);
     }
-#line 8983 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9348 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 455:
-#line 3059 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 455: /* type_specifier_nonarray: IMAGECUBE  */
+#line 3073 "MachineIndependent/glslang.y"
+                {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, EsdCube);
     }
-#line 8993 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9358 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 456:
-#line 3064 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 456: /* type_specifier_nonarray: F16IMAGECUBE  */
+#line 3078 "MachineIndependent/glslang.y"
+                   {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat16, EsdCube);
     }
-#line 9004 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9369 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 457:
-#line 3070 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 457: /* type_specifier_nonarray: IIMAGECUBE  */
+#line 3084 "MachineIndependent/glslang.y"
+                 {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, EsdCube);
     }
-#line 9014 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9379 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 458:
-#line 3075 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 458: /* type_specifier_nonarray: UIMAGECUBE  */
+#line 3089 "MachineIndependent/glslang.y"
+                 {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, EsdCube);
     }
-#line 9024 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9389 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 459:
-#line 3080 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 459: /* type_specifier_nonarray: IMAGEBUFFER  */
+#line 3094 "MachineIndependent/glslang.y"
+                  {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, EsdBuffer);
     }
-#line 9034 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9399 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 460:
-#line 3085 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 460: /* type_specifier_nonarray: F16IMAGEBUFFER  */
+#line 3099 "MachineIndependent/glslang.y"
+                     {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat16, EsdBuffer);
     }
-#line 9045 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9410 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 461:
-#line 3091 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 461: /* type_specifier_nonarray: IIMAGEBUFFER  */
+#line 3105 "MachineIndependent/glslang.y"
+                   {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, EsdBuffer);
     }
-#line 9055 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9420 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 462:
-#line 3096 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 462: /* type_specifier_nonarray: UIMAGEBUFFER  */
+#line 3110 "MachineIndependent/glslang.y"
+                   {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, EsdBuffer);
     }
-#line 9065 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9430 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 463:
-#line 3101 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 463: /* type_specifier_nonarray: IMAGE1DARRAY  */
+#line 3115 "MachineIndependent/glslang.y"
+                   {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, Esd1D, true);
     }
-#line 9075 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9440 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 464:
-#line 3106 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 464: /* type_specifier_nonarray: F16IMAGE1DARRAY  */
+#line 3120 "MachineIndependent/glslang.y"
+                      {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat16, Esd1D, true);
     }
-#line 9086 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9451 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 465:
-#line 3112 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 465: /* type_specifier_nonarray: IIMAGE1DARRAY  */
+#line 3126 "MachineIndependent/glslang.y"
+                    {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, Esd1D, true);
     }
-#line 9096 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9461 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 466:
-#line 3117 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 466: /* type_specifier_nonarray: UIMAGE1DARRAY  */
+#line 3131 "MachineIndependent/glslang.y"
+                    {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, Esd1D, true);
     }
-#line 9106 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9471 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 467:
-#line 3122 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 467: /* type_specifier_nonarray: IMAGE2DARRAY  */
+#line 3136 "MachineIndependent/glslang.y"
+                   {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, Esd2D, true);
     }
-#line 9116 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9481 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 468:
-#line 3127 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 468: /* type_specifier_nonarray: F16IMAGE2DARRAY  */
+#line 3141 "MachineIndependent/glslang.y"
+                      {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat16, Esd2D, true);
     }
-#line 9127 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9492 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 469:
-#line 3133 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 469: /* type_specifier_nonarray: IIMAGE2DARRAY  */
+#line 3147 "MachineIndependent/glslang.y"
+                    {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, Esd2D, true);
     }
-#line 9137 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9502 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 470:
-#line 3138 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 470: /* type_specifier_nonarray: UIMAGE2DARRAY  */
+#line 3152 "MachineIndependent/glslang.y"
+                    {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, Esd2D, true);
     }
-#line 9147 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9512 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 471:
-#line 3143 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 471: /* type_specifier_nonarray: IMAGECUBEARRAY  */
+#line 3157 "MachineIndependent/glslang.y"
+                     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, EsdCube, true);
     }
-#line 9157 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9522 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 472:
-#line 3148 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 472: /* type_specifier_nonarray: F16IMAGECUBEARRAY  */
+#line 3162 "MachineIndependent/glslang.y"
+                        {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat16, EsdCube, true);
     }
-#line 9168 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9533 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 473:
-#line 3154 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 473: /* type_specifier_nonarray: IIMAGECUBEARRAY  */
+#line 3168 "MachineIndependent/glslang.y"
+                      {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, EsdCube, true);
     }
-#line 9178 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9543 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 474:
-#line 3159 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 474: /* type_specifier_nonarray: UIMAGECUBEARRAY  */
+#line 3173 "MachineIndependent/glslang.y"
+                      {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, EsdCube, true);
     }
-#line 9188 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9553 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 475:
-#line 3164 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 475: /* type_specifier_nonarray: IMAGE2DMS  */
+#line 3178 "MachineIndependent/glslang.y"
+                {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, Esd2D, false, false, true);
     }
-#line 9198 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9563 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 476:
-#line 3169 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 476: /* type_specifier_nonarray: F16IMAGE2DMS  */
+#line 3183 "MachineIndependent/glslang.y"
+                   {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat16, Esd2D, false, false, true);
     }
-#line 9209 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9574 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 477:
-#line 3175 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 477: /* type_specifier_nonarray: IIMAGE2DMS  */
+#line 3189 "MachineIndependent/glslang.y"
+                 {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, Esd2D, false, false, true);
     }
-#line 9219 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9584 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 478:
-#line 3180 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 478: /* type_specifier_nonarray: UIMAGE2DMS  */
+#line 3194 "MachineIndependent/glslang.y"
+                 {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, Esd2D, false, false, true);
     }
-#line 9229 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9594 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 479:
-#line 3185 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 479: /* type_specifier_nonarray: IMAGE2DMSARRAY  */
+#line 3199 "MachineIndependent/glslang.y"
+                     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, Esd2D, true, false, true);
     }
-#line 9239 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9604 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 480:
-#line 3190 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 480: /* type_specifier_nonarray: F16IMAGE2DMSARRAY  */
+#line 3204 "MachineIndependent/glslang.y"
+                        {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat16, Esd2D, true, false, true);
     }
-#line 9250 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9615 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 481:
-#line 3196 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 481: /* type_specifier_nonarray: IIMAGE2DMSARRAY  */
+#line 3210 "MachineIndependent/glslang.y"
+                      {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, Esd2D, true, false, true);
     }
-#line 9260 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9625 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 482:
-#line 3201 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 482: /* type_specifier_nonarray: UIMAGE2DMSARRAY  */
+#line 3215 "MachineIndependent/glslang.y"
+                      {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, Esd2D, true, false, true);
     }
-#line 9270 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9635 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 483:
-#line 3206 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {  // GL_OES_EGL_image_external
+  case 483: /* type_specifier_nonarray: I64IMAGE1D  */
+#line 3220 "MachineIndependent/glslang.y"
+                 {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setImage(EbtInt64, Esd1D);
+    }
+#line 9645 "MachineIndependent/glslang_tab.cpp"
+    break;
+
+  case 484: /* type_specifier_nonarray: U64IMAGE1D  */
+#line 3225 "MachineIndependent/glslang.y"
+                 {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setImage(EbtUint64, Esd1D);
+    }
+#line 9655 "MachineIndependent/glslang_tab.cpp"
+    break;
+
+  case 485: /* type_specifier_nonarray: I64IMAGE2D  */
+#line 3230 "MachineIndependent/glslang.y"
+                 {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setImage(EbtInt64, Esd2D);
+    }
+#line 9665 "MachineIndependent/glslang_tab.cpp"
+    break;
+
+  case 486: /* type_specifier_nonarray: U64IMAGE2D  */
+#line 3235 "MachineIndependent/glslang.y"
+                 {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setImage(EbtUint64, Esd2D);
+    }
+#line 9675 "MachineIndependent/glslang_tab.cpp"
+    break;
+
+  case 487: /* type_specifier_nonarray: I64IMAGE3D  */
+#line 3240 "MachineIndependent/glslang.y"
+                 {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setImage(EbtInt64, Esd3D);
+    }
+#line 9685 "MachineIndependent/glslang_tab.cpp"
+    break;
+
+  case 488: /* type_specifier_nonarray: U64IMAGE3D  */
+#line 3245 "MachineIndependent/glslang.y"
+                 {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setImage(EbtUint64, Esd3D);
+    }
+#line 9695 "MachineIndependent/glslang_tab.cpp"
+    break;
+
+  case 489: /* type_specifier_nonarray: I64IMAGE2DRECT  */
+#line 3250 "MachineIndependent/glslang.y"
+                     {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setImage(EbtInt64, EsdRect);
+    }
+#line 9705 "MachineIndependent/glslang_tab.cpp"
+    break;
+
+  case 490: /* type_specifier_nonarray: U64IMAGE2DRECT  */
+#line 3255 "MachineIndependent/glslang.y"
+                     {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setImage(EbtUint64, EsdRect);
+    }
+#line 9715 "MachineIndependent/glslang_tab.cpp"
+    break;
+
+  case 491: /* type_specifier_nonarray: I64IMAGECUBE  */
+#line 3260 "MachineIndependent/glslang.y"
+                   {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setImage(EbtInt64, EsdCube);
+    }
+#line 9725 "MachineIndependent/glslang_tab.cpp"
+    break;
+
+  case 492: /* type_specifier_nonarray: U64IMAGECUBE  */
+#line 3265 "MachineIndependent/glslang.y"
+                   {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setImage(EbtUint64, EsdCube);
+    }
+#line 9735 "MachineIndependent/glslang_tab.cpp"
+    break;
+
+  case 493: /* type_specifier_nonarray: I64IMAGEBUFFER  */
+#line 3270 "MachineIndependent/glslang.y"
+                     {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setImage(EbtInt64, EsdBuffer);
+    }
+#line 9745 "MachineIndependent/glslang_tab.cpp"
+    break;
+
+  case 494: /* type_specifier_nonarray: U64IMAGEBUFFER  */
+#line 3275 "MachineIndependent/glslang.y"
+                     {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setImage(EbtUint64, EsdBuffer);
+    }
+#line 9755 "MachineIndependent/glslang_tab.cpp"
+    break;
+
+  case 495: /* type_specifier_nonarray: I64IMAGE1DARRAY  */
+#line 3280 "MachineIndependent/glslang.y"
+                      {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setImage(EbtInt64, Esd1D, true);
+    }
+#line 9765 "MachineIndependent/glslang_tab.cpp"
+    break;
+
+  case 496: /* type_specifier_nonarray: U64IMAGE1DARRAY  */
+#line 3285 "MachineIndependent/glslang.y"
+                      {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setImage(EbtUint64, Esd1D, true);
+    }
+#line 9775 "MachineIndependent/glslang_tab.cpp"
+    break;
+
+  case 497: /* type_specifier_nonarray: I64IMAGE2DARRAY  */
+#line 3290 "MachineIndependent/glslang.y"
+                      {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setImage(EbtInt64, Esd2D, true);
+    }
+#line 9785 "MachineIndependent/glslang_tab.cpp"
+    break;
+
+  case 498: /* type_specifier_nonarray: U64IMAGE2DARRAY  */
+#line 3295 "MachineIndependent/glslang.y"
+                      {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setImage(EbtUint64, Esd2D, true);
+    }
+#line 9795 "MachineIndependent/glslang_tab.cpp"
+    break;
+
+  case 499: /* type_specifier_nonarray: I64IMAGECUBEARRAY  */
+#line 3300 "MachineIndependent/glslang.y"
+                        {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setImage(EbtInt64, EsdCube, true);
+    }
+#line 9805 "MachineIndependent/glslang_tab.cpp"
+    break;
+
+  case 500: /* type_specifier_nonarray: U64IMAGECUBEARRAY  */
+#line 3305 "MachineIndependent/glslang.y"
+                        {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setImage(EbtUint64, EsdCube, true);
+    }
+#line 9815 "MachineIndependent/glslang_tab.cpp"
+    break;
+
+  case 501: /* type_specifier_nonarray: I64IMAGE2DMS  */
+#line 3310 "MachineIndependent/glslang.y"
+                   {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setImage(EbtInt64, Esd2D, false, false, true);
+    }
+#line 9825 "MachineIndependent/glslang_tab.cpp"
+    break;
+
+  case 502: /* type_specifier_nonarray: U64IMAGE2DMS  */
+#line 3315 "MachineIndependent/glslang.y"
+                   {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setImage(EbtUint64, Esd2D, false, false, true);
+    }
+#line 9835 "MachineIndependent/glslang_tab.cpp"
+    break;
+
+  case 503: /* type_specifier_nonarray: I64IMAGE2DMSARRAY  */
+#line 3320 "MachineIndependent/glslang.y"
+                        {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setImage(EbtInt64, Esd2D, true, false, true);
+    }
+#line 9845 "MachineIndependent/glslang_tab.cpp"
+    break;
+
+  case 504: /* type_specifier_nonarray: U64IMAGE2DMSARRAY  */
+#line 3325 "MachineIndependent/glslang.y"
+                        {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setImage(EbtUint64, Esd2D, true, false, true);
+    }
+#line 9855 "MachineIndependent/glslang_tab.cpp"
+    break;
+
+  case 505: /* type_specifier_nonarray: SAMPLEREXTERNALOES  */
+#line 3330 "MachineIndependent/glslang.y"
+                         {  // GL_OES_EGL_image_external
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd2D);
         (yyval.interm.type).sampler.external = true;
     }
-#line 9281 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9866 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 484:
-#line 3212 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { // GL_EXT_YUV_target
+  case 506: /* type_specifier_nonarray: SAMPLEREXTERNAL2DY2YEXT  */
+#line 3336 "MachineIndependent/glslang.y"
+                              { // GL_EXT_YUV_target
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd2D);
         (yyval.interm.type).sampler.yuv = true;
     }
-#line 9292 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9877 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 485:
-#line 3218 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 507: /* type_specifier_nonarray: SUBPASSINPUT  */
+#line 3342 "MachineIndependent/glslang.y"
+                   {
         parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setSubpass(EbtFloat);
     }
-#line 9303 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9888 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 486:
-#line 3224 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 508: /* type_specifier_nonarray: SUBPASSINPUTMS  */
+#line 3348 "MachineIndependent/glslang.y"
+                     {
         parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setSubpass(EbtFloat, true);
     }
-#line 9314 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9899 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 487:
-#line 3230 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 509: /* type_specifier_nonarray: F16SUBPASSINPUT  */
+#line 3354 "MachineIndependent/glslang.y"
+                      {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float subpass input", parseContext.symbolTable.atBuiltInLevel());
         parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setSubpass(EbtFloat16);
     }
-#line 9326 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9911 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 488:
-#line 3237 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 510: /* type_specifier_nonarray: F16SUBPASSINPUTMS  */
+#line 3361 "MachineIndependent/glslang.y"
+                        {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float subpass input", parseContext.symbolTable.atBuiltInLevel());
         parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setSubpass(EbtFloat16, true);
     }
-#line 9338 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9923 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 489:
-#line 3244 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 511: /* type_specifier_nonarray: ISUBPASSINPUT  */
+#line 3368 "MachineIndependent/glslang.y"
+                    {
         parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setSubpass(EbtInt);
     }
-#line 9349 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9934 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 490:
-#line 3250 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 512: /* type_specifier_nonarray: ISUBPASSINPUTMS  */
+#line 3374 "MachineIndependent/glslang.y"
+                      {
         parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setSubpass(EbtInt, true);
     }
-#line 9360 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9945 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 491:
-#line 3256 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 513: /* type_specifier_nonarray: USUBPASSINPUT  */
+#line 3380 "MachineIndependent/glslang.y"
+                    {
         parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setSubpass(EbtUint);
     }
-#line 9371 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9956 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 492:
-#line 3262 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 514: /* type_specifier_nonarray: USUBPASSINPUTMS  */
+#line 3386 "MachineIndependent/glslang.y"
+                      {
         parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setSubpass(EbtUint, true);
     }
-#line 9382 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9967 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 493:
-#line 3268 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 515: /* type_specifier_nonarray: FCOOPMATNV  */
+#line 3392 "MachineIndependent/glslang.y"
+                 {
         parseContext.fcoopmatCheck((yyvsp[0].lex).loc, "fcoopmatNV", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).coopmat = true;
     }
-#line 9393 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9978 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 494:
-#line 3274 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 516: /* type_specifier_nonarray: ICOOPMATNV  */
+#line 3398 "MachineIndependent/glslang.y"
+                 {
         parseContext.intcoopmatCheck((yyvsp[0].lex).loc, "icoopmatNV", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt;
         (yyval.interm.type).coopmat = true;
     }
-#line 9404 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9989 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 495:
-#line 3280 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 517: /* type_specifier_nonarray: UCOOPMATNV  */
+#line 3404 "MachineIndependent/glslang.y"
+                 {
         parseContext.intcoopmatCheck((yyvsp[0].lex).loc, "ucoopmatNV", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint;
         (yyval.interm.type).coopmat = true;
     }
-#line 9415 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10000 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 496:
-#line 3287 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 518: /* type_specifier_nonarray: struct_specifier  */
+#line 3411 "MachineIndependent/glslang.y"
+                       {
         (yyval.interm.type) = (yyvsp[0].interm.type);
         (yyval.interm.type).qualifier.storage = parseContext.symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
         parseContext.structTypeCheck((yyval.interm.type).loc, (yyval.interm.type));
     }
-#line 9425 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10010 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 497:
-#line 3292 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 519: /* type_specifier_nonarray: TYPE_NAME  */
+#line 3416 "MachineIndependent/glslang.y"
+                {
         //
         // This is for user defined type names.  The lexical phase looked up the
         // type.
@@ -9439,48 +10024,48 @@
         } else
             parseContext.error((yyvsp[0].lex).loc, "expected type name", (yyvsp[0].lex).string->c_str(), "");
     }
-#line 9443 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10028 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 498:
-#line 3308 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 520: /* precision_qualifier: HIGH_PRECISION  */
+#line 3432 "MachineIndependent/glslang.y"
+                     {
         parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "highp precision qualifier");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         parseContext.handlePrecisionQualifier((yyvsp[0].lex).loc, (yyval.interm.type).qualifier, EpqHigh);
     }
-#line 9453 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10038 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 499:
-#line 3313 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 521: /* precision_qualifier: MEDIUM_PRECISION  */
+#line 3437 "MachineIndependent/glslang.y"
+                       {
         parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "mediump precision qualifier");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         parseContext.handlePrecisionQualifier((yyvsp[0].lex).loc, (yyval.interm.type).qualifier, EpqMedium);
     }
-#line 9463 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10048 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 500:
-#line 3318 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 522: /* precision_qualifier: LOW_PRECISION  */
+#line 3442 "MachineIndependent/glslang.y"
+                    {
         parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "lowp precision qualifier");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         parseContext.handlePrecisionQualifier((yyvsp[0].lex).loc, (yyval.interm.type).qualifier, EpqLow);
     }
-#line 9473 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10058 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 501:
-#line 3326 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { parseContext.nestedStructCheck((yyvsp[-2].lex).loc); }
-#line 9479 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+  case 523: /* $@3: %empty  */
+#line 3450 "MachineIndependent/glslang.y"
+                                   { parseContext.nestedStructCheck((yyvsp[-2].lex).loc); }
+#line 10064 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 502:
-#line 3326 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 524: /* struct_specifier: STRUCT IDENTIFIER LEFT_BRACE $@3 struct_declaration_list RIGHT_BRACE  */
+#line 3450 "MachineIndependent/glslang.y"
+                                                                                                                   {
         TType* structure = new TType((yyvsp[-1].interm.typeList), *(yyvsp[-4].lex).string);
         parseContext.structArrayCheck((yyvsp[-4].lex).loc, *structure);
         TVariable* userTypeDef = new TVariable((yyvsp[-4].lex).string, *structure, true);
@@ -9491,38 +10076,38 @@
         (yyval.interm.type).userDef = structure;
         --parseContext.structNestingLevel;
     }
-#line 9495 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10080 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 503:
-#line 3337 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { parseContext.nestedStructCheck((yyvsp[-1].lex).loc); }
-#line 9501 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+  case 525: /* $@4: %empty  */
+#line 3461 "MachineIndependent/glslang.y"
+                        { parseContext.nestedStructCheck((yyvsp[-1].lex).loc); }
+#line 10086 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 504:
-#line 3337 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 526: /* struct_specifier: STRUCT LEFT_BRACE $@4 struct_declaration_list RIGHT_BRACE  */
+#line 3461 "MachineIndependent/glslang.y"
+                                                                                                        {
         TType* structure = new TType((yyvsp[-1].interm.typeList), TString(""));
         (yyval.interm.type).init((yyvsp[-4].lex).loc);
         (yyval.interm.type).basicType = EbtStruct;
         (yyval.interm.type).userDef = structure;
         --parseContext.structNestingLevel;
     }
-#line 9513 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10098 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 505:
-#line 3347 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 527: /* struct_declaration_list: struct_declaration  */
+#line 3471 "MachineIndependent/glslang.y"
+                         {
         (yyval.interm.typeList) = (yyvsp[0].interm.typeList);
     }
-#line 9521 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10106 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 506:
-#line 3350 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 528: /* struct_declaration_list: struct_declaration_list struct_declaration  */
+#line 3474 "MachineIndependent/glslang.y"
+                                                 {
         (yyval.interm.typeList) = (yyvsp[-1].interm.typeList);
         for (unsigned int i = 0; i < (yyvsp[0].interm.typeList)->size(); ++i) {
             for (unsigned int j = 0; j < (yyval.interm.typeList)->size(); ++j) {
@@ -9532,12 +10117,12 @@
             (yyval.interm.typeList)->push_back((*(yyvsp[0].interm.typeList))[i]);
         }
     }
-#line 9536 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10121 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 507:
-#line 3363 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 529: /* struct_declaration: type_specifier struct_declarator_list SEMICOLON  */
+#line 3487 "MachineIndependent/glslang.y"
+                                                      {
         if ((yyvsp[-2].interm.type).arraySizes) {
             parseContext.profileRequires((yyvsp[-2].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type");
             parseContext.profileRequires((yyvsp[-2].interm.type).loc, EEsProfile, 300, 0, "arrayed type");
@@ -9559,12 +10144,12 @@
             (*(yyval.interm.typeList))[i].type->shallowCopy(type);
         }
     }
-#line 9563 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10148 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 508:
-#line 3385 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 530: /* struct_declaration: type_qualifier type_specifier struct_declarator_list SEMICOLON  */
+#line 3509 "MachineIndependent/glslang.y"
+                                                                     {
         if ((yyvsp[-2].interm.type).arraySizes) {
             parseContext.profileRequires((yyvsp[-2].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type");
             parseContext.profileRequires((yyvsp[-2].interm.type).loc, EEsProfile, 300, 0, "arrayed type");
@@ -9588,39 +10173,39 @@
             (*(yyval.interm.typeList))[i].type->shallowCopy(type);
         }
     }
-#line 9592 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10177 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 509:
-#line 3412 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 531: /* struct_declarator_list: struct_declarator  */
+#line 3536 "MachineIndependent/glslang.y"
+                        {
         (yyval.interm.typeList) = new TTypeList;
         (yyval.interm.typeList)->push_back((yyvsp[0].interm.typeLine));
     }
-#line 9601 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10186 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 510:
-#line 3416 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 532: /* struct_declarator_list: struct_declarator_list COMMA struct_declarator  */
+#line 3540 "MachineIndependent/glslang.y"
+                                                     {
         (yyval.interm.typeList)->push_back((yyvsp[0].interm.typeLine));
     }
-#line 9609 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10194 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 511:
-#line 3422 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 533: /* struct_declarator: IDENTIFIER  */
+#line 3546 "MachineIndependent/glslang.y"
+                 {
         (yyval.interm.typeLine).type = new TType(EbtVoid);
         (yyval.interm.typeLine).loc = (yyvsp[0].lex).loc;
         (yyval.interm.typeLine).type->setFieldName(*(yyvsp[0].lex).string);
     }
-#line 9619 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10204 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 512:
-#line 3427 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 534: /* struct_declarator: IDENTIFIER array_specifier  */
+#line 3551 "MachineIndependent/glslang.y"
+                                 {
         parseContext.arrayOfArrayVersionCheck((yyvsp[-1].lex).loc, (yyvsp[0].interm).arraySizes);
 
         (yyval.interm.typeLine).type = new TType(EbtVoid);
@@ -9628,236 +10213,236 @@
         (yyval.interm.typeLine).type->setFieldName(*(yyvsp[-1].lex).string);
         (yyval.interm.typeLine).type->transferArraySizes((yyvsp[0].interm).arraySizes);
     }
-#line 9632 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10217 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 513:
-#line 3438 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 535: /* initializer: assignment_expression  */
+#line 3562 "MachineIndependent/glslang.y"
+                            {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 9640 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10225 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 514:
-#line 3442 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 536: /* initializer: LEFT_BRACE initializer_list RIGHT_BRACE  */
+#line 3566 "MachineIndependent/glslang.y"
+                                              {
         const char* initFeature = "{ } style initializers";
         parseContext.requireProfile((yyvsp[-2].lex).loc, ~EEsProfile, initFeature);
         parseContext.profileRequires((yyvsp[-2].lex).loc, ~EEsProfile, 420, E_GL_ARB_shading_language_420pack, initFeature);
         (yyval.interm.intermTypedNode) = (yyvsp[-1].interm.intermTypedNode);
     }
-#line 9651 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10236 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 515:
-#line 3448 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 537: /* initializer: LEFT_BRACE initializer_list COMMA RIGHT_BRACE  */
+#line 3572 "MachineIndependent/glslang.y"
+                                                    {
         const char* initFeature = "{ } style initializers";
         parseContext.requireProfile((yyvsp[-3].lex).loc, ~EEsProfile, initFeature);
         parseContext.profileRequires((yyvsp[-3].lex).loc, ~EEsProfile, 420, E_GL_ARB_shading_language_420pack, initFeature);
         (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 9662 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10247 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 516:
-#line 3459 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 538: /* initializer_list: initializer  */
+#line 3583 "MachineIndependent/glslang.y"
+                  {
         (yyval.interm.intermTypedNode) = parseContext.intermediate.growAggregate(0, (yyvsp[0].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)->getLoc());
     }
-#line 9670 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10255 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 517:
-#line 3462 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 539: /* initializer_list: initializer_list COMMA initializer  */
+#line 3586 "MachineIndependent/glslang.y"
+                                         {
         (yyval.interm.intermTypedNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
     }
-#line 9678 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10263 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 518:
-#line 3469 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9684 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+  case 540: /* declaration_statement: declaration  */
+#line 3593 "MachineIndependent/glslang.y"
+                  { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
+#line 10269 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 519:
-#line 3473 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9690 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+  case 541: /* statement: compound_statement  */
+#line 3597 "MachineIndependent/glslang.y"
+                          { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
+#line 10275 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 520:
-#line 3474 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9696 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+  case 542: /* statement: simple_statement  */
+#line 3598 "MachineIndependent/glslang.y"
+                          { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
+#line 10281 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 521:
-#line 3480 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9702 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+  case 543: /* simple_statement: declaration_statement  */
+#line 3604 "MachineIndependent/glslang.y"
+                            { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
+#line 10287 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 522:
-#line 3481 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9708 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+  case 544: /* simple_statement: expression_statement  */
+#line 3605 "MachineIndependent/glslang.y"
+                            { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
+#line 10293 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 523:
-#line 3482 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9714 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+  case 545: /* simple_statement: selection_statement  */
+#line 3606 "MachineIndependent/glslang.y"
+                            { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
+#line 10299 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 524:
-#line 3483 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9720 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+  case 546: /* simple_statement: switch_statement  */
+#line 3607 "MachineIndependent/glslang.y"
+                            { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
+#line 10305 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 525:
-#line 3484 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9726 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+  case 547: /* simple_statement: case_label  */
+#line 3608 "MachineIndependent/glslang.y"
+                            { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
+#line 10311 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 526:
-#line 3485 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9732 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+  case 548: /* simple_statement: iteration_statement  */
+#line 3609 "MachineIndependent/glslang.y"
+                            { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
+#line 10317 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 527:
-#line 3486 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9738 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+  case 549: /* simple_statement: jump_statement  */
+#line 3610 "MachineIndependent/glslang.y"
+                            { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
+#line 10323 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 528:
-#line 3488 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9744 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+  case 550: /* simple_statement: demote_statement  */
+#line 3612 "MachineIndependent/glslang.y"
+                            { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
+#line 10329 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 529:
-#line 3494 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 551: /* demote_statement: DEMOTE SEMICOLON  */
+#line 3618 "MachineIndependent/glslang.y"
+                       {
         parseContext.requireStage((yyvsp[-1].lex).loc, EShLangFragment, "demote");
         parseContext.requireExtensions((yyvsp[-1].lex).loc, 1, &E_GL_EXT_demote_to_helper_invocation, "demote");
         (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpDemote, (yyvsp[-1].lex).loc);
     }
-#line 9754 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10339 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 530:
-#line 3503 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermNode) = 0; }
-#line 9760 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+  case 552: /* compound_statement: LEFT_BRACE RIGHT_BRACE  */
+#line 3627 "MachineIndependent/glslang.y"
+                             { (yyval.interm.intermNode) = 0; }
+#line 10345 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 531:
-#line 3504 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 553: /* $@5: %empty  */
+#line 3628 "MachineIndependent/glslang.y"
+                 {
         parseContext.symbolTable.push();
         ++parseContext.statementNestingLevel;
     }
-#line 9769 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10354 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 532:
-#line 3508 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 554: /* $@6: %empty  */
+#line 3632 "MachineIndependent/glslang.y"
+                     {
         parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
         --parseContext.statementNestingLevel;
     }
-#line 9778 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10363 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 533:
-#line 3512 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 555: /* compound_statement: LEFT_BRACE $@5 statement_list $@6 RIGHT_BRACE  */
+#line 3636 "MachineIndependent/glslang.y"
+                  {
         if ((yyvsp[-2].interm.intermNode) && (yyvsp[-2].interm.intermNode)->getAsAggregate())
             (yyvsp[-2].interm.intermNode)->getAsAggregate()->setOperator(EOpSequence);
         (yyval.interm.intermNode) = (yyvsp[-2].interm.intermNode);
     }
-#line 9788 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10373 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 534:
-#line 3520 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9794 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+  case 556: /* statement_no_new_scope: compound_statement_no_new_scope  */
+#line 3644 "MachineIndependent/glslang.y"
+                                      { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
+#line 10379 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 535:
-#line 3521 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9800 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+  case 557: /* statement_no_new_scope: simple_statement  */
+#line 3645 "MachineIndependent/glslang.y"
+                                      { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
+#line 10385 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 536:
-#line 3525 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 558: /* $@7: %empty  */
+#line 3649 "MachineIndependent/glslang.y"
+      {
         ++parseContext.controlFlowNestingLevel;
     }
-#line 9808 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10393 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 537:
-#line 3528 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 559: /* statement_scoped: $@7 compound_statement  */
+#line 3652 "MachineIndependent/glslang.y"
+                          {
         --parseContext.controlFlowNestingLevel;
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 9817 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10402 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 538:
-#line 3532 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 560: /* $@8: %empty  */
+#line 3656 "MachineIndependent/glslang.y"
+      {
         parseContext.symbolTable.push();
         ++parseContext.statementNestingLevel;
         ++parseContext.controlFlowNestingLevel;
     }
-#line 9827 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10412 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 539:
-#line 3537 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 561: /* statement_scoped: $@8 simple_statement  */
+#line 3661 "MachineIndependent/glslang.y"
+                       {
         parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
         --parseContext.statementNestingLevel;
         --parseContext.controlFlowNestingLevel;
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 9838 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10423 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 540:
-#line 3546 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 562: /* compound_statement_no_new_scope: LEFT_BRACE RIGHT_BRACE  */
+#line 3670 "MachineIndependent/glslang.y"
+                             {
         (yyval.interm.intermNode) = 0;
     }
-#line 9846 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10431 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 541:
-#line 3549 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 563: /* compound_statement_no_new_scope: LEFT_BRACE statement_list RIGHT_BRACE  */
+#line 3673 "MachineIndependent/glslang.y"
+                                            {
         if ((yyvsp[-1].interm.intermNode) && (yyvsp[-1].interm.intermNode)->getAsAggregate())
             (yyvsp[-1].interm.intermNode)->getAsAggregate()->setOperator(EOpSequence);
         (yyval.interm.intermNode) = (yyvsp[-1].interm.intermNode);
     }
-#line 9856 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10441 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 542:
-#line 3557 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 564: /* statement_list: statement  */
+#line 3681 "MachineIndependent/glslang.y"
+                {
         (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate((yyvsp[0].interm.intermNode));
         if ((yyvsp[0].interm.intermNode) && (yyvsp[0].interm.intermNode)->getAsBranchNode() && ((yyvsp[0].interm.intermNode)->getAsBranchNode()->getFlowOp() == EOpCase ||
                                             (yyvsp[0].interm.intermNode)->getAsBranchNode()->getFlowOp() == EOpDefault)) {
@@ -9865,12 +10450,12 @@
             (yyval.interm.intermNode) = 0;  // start a fresh subsequence for what's after this case
         }
     }
-#line 9869 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10454 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 543:
-#line 3565 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 565: /* statement_list: statement_list statement  */
+#line 3689 "MachineIndependent/glslang.y"
+                               {
         if ((yyvsp[0].interm.intermNode) && (yyvsp[0].interm.intermNode)->getAsBranchNode() && ((yyvsp[0].interm.intermNode)->getAsBranchNode()->getFlowOp() == EOpCase ||
                                             (yyvsp[0].interm.intermNode)->getAsBranchNode()->getFlowOp() == EOpDefault)) {
             parseContext.wrapupSwitchSubsequence((yyvsp[-1].interm.intermNode) ? (yyvsp[-1].interm.intermNode)->getAsAggregate() : 0, (yyvsp[0].interm.intermNode));
@@ -9878,77 +10463,77 @@
         } else
             (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-1].interm.intermNode), (yyvsp[0].interm.intermNode));
     }
-#line 9882 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10467 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 544:
-#line 3576 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermNode) = 0; }
-#line 9888 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+  case 566: /* expression_statement: SEMICOLON  */
+#line 3700 "MachineIndependent/glslang.y"
+                 { (yyval.interm.intermNode) = 0; }
+#line 10473 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 545:
-#line 3577 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermNode) = static_cast<TIntermNode*>((yyvsp[-1].interm.intermTypedNode)); }
-#line 9894 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+  case 567: /* expression_statement: expression SEMICOLON  */
+#line 3701 "MachineIndependent/glslang.y"
+                            { (yyval.interm.intermNode) = static_cast<TIntermNode*>((yyvsp[-1].interm.intermTypedNode)); }
+#line 10479 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 546:
-#line 3581 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 568: /* selection_statement: selection_statement_nonattributed  */
+#line 3705 "MachineIndependent/glslang.y"
+                                        {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 9902 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10487 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 547:
-#line 3585 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 569: /* selection_statement: attribute selection_statement_nonattributed  */
+#line 3709 "MachineIndependent/glslang.y"
+                                                  {
         parseContext.handleSelectionAttributes(*(yyvsp[-1].interm.attributes), (yyvsp[0].interm.intermNode));
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 9911 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10496 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 548:
-#line 3592 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 570: /* selection_statement_nonattributed: IF LEFT_PAREN expression RIGHT_PAREN selection_rest_statement  */
+#line 3716 "MachineIndependent/glslang.y"
+                                                                    {
         parseContext.boolCheck((yyvsp[-4].lex).loc, (yyvsp[-2].interm.intermTypedNode));
         (yyval.interm.intermNode) = parseContext.intermediate.addSelection((yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.nodePair), (yyvsp[-4].lex).loc);
     }
-#line 9920 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10505 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 549:
-#line 3599 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 571: /* selection_rest_statement: statement_scoped ELSE statement_scoped  */
+#line 3723 "MachineIndependent/glslang.y"
+                                             {
         (yyval.interm.nodePair).node1 = (yyvsp[-2].interm.intermNode);
         (yyval.interm.nodePair).node2 = (yyvsp[0].interm.intermNode);
     }
-#line 9929 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10514 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 550:
-#line 3603 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 572: /* selection_rest_statement: statement_scoped  */
+#line 3727 "MachineIndependent/glslang.y"
+                       {
         (yyval.interm.nodePair).node1 = (yyvsp[0].interm.intermNode);
         (yyval.interm.nodePair).node2 = 0;
     }
-#line 9938 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10523 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 551:
-#line 3611 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 573: /* condition: expression  */
+#line 3735 "MachineIndependent/glslang.y"
+                 {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
         parseContext.boolCheck((yyvsp[0].interm.intermTypedNode)->getLoc(), (yyvsp[0].interm.intermTypedNode));
     }
-#line 9947 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10532 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 552:
-#line 3615 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 574: /* condition: fully_specified_type IDENTIFIER EQUAL initializer  */
+#line 3739 "MachineIndependent/glslang.y"
+                                                        {
         parseContext.boolCheck((yyvsp[-2].lex).loc, (yyvsp[-3].interm.type));
 
         TType type((yyvsp[-3].interm.type));
@@ -9958,29 +10543,29 @@
         else
             (yyval.interm.intermTypedNode) = 0;
     }
-#line 9962 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10547 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 553:
-#line 3628 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 575: /* switch_statement: switch_statement_nonattributed  */
+#line 3752 "MachineIndependent/glslang.y"
+                                     {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 9970 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10555 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 554:
-#line 3632 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 576: /* switch_statement: attribute switch_statement_nonattributed  */
+#line 3756 "MachineIndependent/glslang.y"
+                                               {
         parseContext.handleSwitchAttributes(*(yyvsp[-1].interm.attributes), (yyvsp[0].interm.intermNode));
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 9979 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10564 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 555:
-#line 3639 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 577: /* $@9: %empty  */
+#line 3763 "MachineIndependent/glslang.y"
+                                               {
         // start new switch sequence on the switch stack
         ++parseContext.controlFlowNestingLevel;
         ++parseContext.statementNestingLevel;
@@ -9988,12 +10573,12 @@
         parseContext.switchLevel.push_back(parseContext.statementNestingLevel);
         parseContext.symbolTable.push();
     }
-#line 9992 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10577 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 556:
-#line 3647 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 578: /* switch_statement_nonattributed: SWITCH LEFT_PAREN expression RIGHT_PAREN $@9 LEFT_BRACE switch_statement_list RIGHT_BRACE  */
+#line 3771 "MachineIndependent/glslang.y"
+                                                 {
         (yyval.interm.intermNode) = parseContext.addSwitch((yyvsp[-7].lex).loc, (yyvsp[-5].interm.intermTypedNode), (yyvsp[-1].interm.intermNode) ? (yyvsp[-1].interm.intermNode)->getAsAggregate() : 0);
         delete parseContext.switchSequenceStack.back();
         parseContext.switchSequenceStack.pop_back();
@@ -10002,28 +10587,28 @@
         --parseContext.statementNestingLevel;
         --parseContext.controlFlowNestingLevel;
     }
-#line 10006 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10591 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 557:
-#line 3659 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 579: /* switch_statement_list: %empty  */
+#line 3783 "MachineIndependent/glslang.y"
+                    {
         (yyval.interm.intermNode) = 0;
     }
-#line 10014 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10599 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 558:
-#line 3662 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 580: /* switch_statement_list: statement_list  */
+#line 3786 "MachineIndependent/glslang.y"
+                     {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 10022 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10607 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 559:
-#line 3668 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 581: /* case_label: CASE expression COLON  */
+#line 3792 "MachineIndependent/glslang.y"
+                            {
         (yyval.interm.intermNode) = 0;
         if (parseContext.switchLevel.size() == 0)
             parseContext.error((yyvsp[-2].lex).loc, "cannot appear outside switch statement", "case", "");
@@ -10035,12 +10620,12 @@
             (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpCase, (yyvsp[-1].interm.intermTypedNode), (yyvsp[-2].lex).loc);
         }
     }
-#line 10039 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10624 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 560:
-#line 3680 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 582: /* case_label: DEFAULT COLON  */
+#line 3804 "MachineIndependent/glslang.y"
+                    {
         (yyval.interm.intermNode) = 0;
         if (parseContext.switchLevel.size() == 0)
             parseContext.error((yyvsp[-1].lex).loc, "cannot appear outside switch statement", "default", "");
@@ -10049,29 +10634,29 @@
         else
             (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpDefault, (yyvsp[-1].lex).loc);
     }
-#line 10053 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10638 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 561:
-#line 3692 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 583: /* iteration_statement: iteration_statement_nonattributed  */
+#line 3816 "MachineIndependent/glslang.y"
+                                        {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 10061 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10646 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 562:
-#line 3696 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 584: /* iteration_statement: attribute iteration_statement_nonattributed  */
+#line 3820 "MachineIndependent/glslang.y"
+                                                  {
         parseContext.handleLoopAttributes(*(yyvsp[-1].interm.attributes), (yyvsp[0].interm.intermNode));
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 10070 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10655 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 563:
-#line 3703 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 585: /* $@10: %empty  */
+#line 3827 "MachineIndependent/glslang.y"
+                       {
         if (! parseContext.limits.whileLoops)
             parseContext.error((yyvsp[-1].lex).loc, "while loops not available", "limitation", "");
         parseContext.symbolTable.push();
@@ -10079,34 +10664,34 @@
         ++parseContext.statementNestingLevel;
         ++parseContext.controlFlowNestingLevel;
     }
-#line 10083 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10668 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 564:
-#line 3711 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 586: /* iteration_statement_nonattributed: WHILE LEFT_PAREN $@10 condition RIGHT_PAREN statement_no_new_scope  */
+#line 3835 "MachineIndependent/glslang.y"
+                                                   {
         parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
         (yyval.interm.intermNode) = parseContext.intermediate.addLoop((yyvsp[0].interm.intermNode), (yyvsp[-2].interm.intermTypedNode), 0, true, (yyvsp[-5].lex).loc);
         --parseContext.loopNestingLevel;
         --parseContext.statementNestingLevel;
         --parseContext.controlFlowNestingLevel;
     }
-#line 10095 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10680 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 565:
-#line 3718 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 587: /* $@11: %empty  */
+#line 3842 "MachineIndependent/glslang.y"
+         {
         ++parseContext.loopNestingLevel;
         ++parseContext.statementNestingLevel;
         ++parseContext.controlFlowNestingLevel;
     }
-#line 10105 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10690 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 566:
-#line 3723 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 588: /* iteration_statement_nonattributed: DO $@11 statement WHILE LEFT_PAREN expression RIGHT_PAREN SEMICOLON  */
+#line 3847 "MachineIndependent/glslang.y"
+                                                                  {
         if (! parseContext.limits.whileLoops)
             parseContext.error((yyvsp[-7].lex).loc, "do-while loops not available", "limitation", "");
 
@@ -10117,23 +10702,23 @@
         --parseContext.statementNestingLevel;
         --parseContext.controlFlowNestingLevel;
     }
-#line 10121 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10706 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 567:
-#line 3734 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 589: /* $@12: %empty  */
+#line 3858 "MachineIndependent/glslang.y"
+                     {
         parseContext.symbolTable.push();
         ++parseContext.loopNestingLevel;
         ++parseContext.statementNestingLevel;
         ++parseContext.controlFlowNestingLevel;
     }
-#line 10132 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10717 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 568:
-#line 3740 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 590: /* iteration_statement_nonattributed: FOR LEFT_PAREN $@12 for_init_statement for_rest_statement RIGHT_PAREN statement_no_new_scope  */
+#line 3864 "MachineIndependent/glslang.y"
+                                                                               {
         parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
         (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate((yyvsp[-3].interm.intermNode), (yyvsp[-5].lex).loc);
         TIntermLoop* forLoop = parseContext.intermediate.addLoop((yyvsp[0].interm.intermNode), reinterpret_cast<TIntermTyped*>((yyvsp[-2].interm.nodePair).node1), reinterpret_cast<TIntermTyped*>((yyvsp[-2].interm.nodePair).node2), true, (yyvsp[-6].lex).loc);
@@ -10145,157 +10730,184 @@
         --parseContext.statementNestingLevel;
         --parseContext.controlFlowNestingLevel;
     }
-#line 10149 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10734 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 569:
-#line 3755 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 591: /* for_init_statement: expression_statement  */
+#line 3879 "MachineIndependent/glslang.y"
+                           {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 10157 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10742 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 570:
-#line 3758 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 592: /* for_init_statement: declaration_statement  */
+#line 3882 "MachineIndependent/glslang.y"
+                            {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 10165 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10750 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 571:
-#line 3764 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 593: /* conditionopt: condition  */
+#line 3888 "MachineIndependent/glslang.y"
+                {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 10173 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10758 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 572:
-#line 3767 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 594: /* conditionopt: %empty  */
+#line 3891 "MachineIndependent/glslang.y"
+                        {
         (yyval.interm.intermTypedNode) = 0;
     }
-#line 10181 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10766 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 573:
-#line 3773 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 595: /* for_rest_statement: conditionopt SEMICOLON  */
+#line 3897 "MachineIndependent/glslang.y"
+                             {
         (yyval.interm.nodePair).node1 = (yyvsp[-1].interm.intermTypedNode);
         (yyval.interm.nodePair).node2 = 0;
     }
-#line 10190 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10775 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 574:
-#line 3777 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 596: /* for_rest_statement: conditionopt SEMICOLON expression  */
+#line 3901 "MachineIndependent/glslang.y"
+                                         {
         (yyval.interm.nodePair).node1 = (yyvsp[-2].interm.intermTypedNode);
         (yyval.interm.nodePair).node2 = (yyvsp[0].interm.intermTypedNode);
     }
-#line 10199 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10784 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 575:
-#line 3784 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 597: /* jump_statement: CONTINUE SEMICOLON  */
+#line 3908 "MachineIndependent/glslang.y"
+                         {
         if (parseContext.loopNestingLevel <= 0)
             parseContext.error((yyvsp[-1].lex).loc, "continue statement only allowed in loops", "", "");
         (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpContinue, (yyvsp[-1].lex).loc);
     }
-#line 10209 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10794 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 576:
-#line 3789 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 598: /* jump_statement: BREAK SEMICOLON  */
+#line 3913 "MachineIndependent/glslang.y"
+                      {
         if (parseContext.loopNestingLevel + parseContext.switchSequenceStack.size() <= 0)
             parseContext.error((yyvsp[-1].lex).loc, "break statement only allowed in switch and loops", "", "");
         (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpBreak, (yyvsp[-1].lex).loc);
     }
-#line 10219 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10804 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 577:
-#line 3794 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 599: /* jump_statement: RETURN SEMICOLON  */
+#line 3918 "MachineIndependent/glslang.y"
+                       {
         (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpReturn, (yyvsp[-1].lex).loc);
         if (parseContext.currentFunctionType->getBasicType() != EbtVoid)
             parseContext.error((yyvsp[-1].lex).loc, "non-void function must return a value", "return", "");
         if (parseContext.inMain)
             parseContext.postEntryPointReturn = true;
     }
-#line 10231 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10816 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 578:
-#line 3801 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 600: /* jump_statement: RETURN expression SEMICOLON  */
+#line 3925 "MachineIndependent/glslang.y"
+                                  {
         (yyval.interm.intermNode) = parseContext.handleReturnValue((yyvsp[-2].lex).loc, (yyvsp[-1].interm.intermTypedNode));
     }
-#line 10239 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10824 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 579:
-#line 3804 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 601: /* jump_statement: DISCARD SEMICOLON  */
+#line 3928 "MachineIndependent/glslang.y"
+                        {
         parseContext.requireStage((yyvsp[-1].lex).loc, EShLangFragment, "discard");
         (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpKill, (yyvsp[-1].lex).loc);
     }
-#line 10248 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10833 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 580:
-#line 3813 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 602: /* jump_statement: TERMINATE_INVOCATION SEMICOLON  */
+#line 3932 "MachineIndependent/glslang.y"
+                                     {
+        parseContext.requireStage((yyvsp[-1].lex).loc, EShLangFragment, "terminateInvocation");
+        (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpTerminateInvocation, (yyvsp[-1].lex).loc);
+    }
+#line 10842 "MachineIndependent/glslang_tab.cpp"
+    break;
+
+  case 603: /* jump_statement: TERMINATE_RAY SEMICOLON  */
+#line 3937 "MachineIndependent/glslang.y"
+                              {
+        parseContext.requireStage((yyvsp[-1].lex).loc, EShLangAnyHit, "terminateRayEXT");
+        (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpTerminateRayKHR, (yyvsp[-1].lex).loc);
+    }
+#line 10851 "MachineIndependent/glslang_tab.cpp"
+    break;
+
+  case 604: /* jump_statement: IGNORE_INTERSECTION SEMICOLON  */
+#line 3941 "MachineIndependent/glslang.y"
+                                    {
+        parseContext.requireStage((yyvsp[-1].lex).loc, EShLangAnyHit, "ignoreIntersectionEXT");
+        (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpIgnoreIntersectionKHR, (yyvsp[-1].lex).loc);
+    }
+#line 10860 "MachineIndependent/glslang_tab.cpp"
+    break;
+
+  case 605: /* translation_unit: external_declaration  */
+#line 3951 "MachineIndependent/glslang.y"
+                           {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
         parseContext.intermediate.setTreeRoot((yyval.interm.intermNode));
     }
-#line 10257 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10869 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 581:
-#line 3817 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 606: /* translation_unit: translation_unit external_declaration  */
+#line 3955 "MachineIndependent/glslang.y"
+                                            {
         if ((yyvsp[0].interm.intermNode) != nullptr) {
             (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-1].interm.intermNode), (yyvsp[0].interm.intermNode));
             parseContext.intermediate.setTreeRoot((yyval.interm.intermNode));
         }
     }
-#line 10268 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10880 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 582:
-#line 3826 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 607: /* external_declaration: function_definition  */
+#line 3964 "MachineIndependent/glslang.y"
+                          {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 10276 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10888 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 583:
-#line 3829 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 608: /* external_declaration: declaration  */
+#line 3967 "MachineIndependent/glslang.y"
+                  {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 10284 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10896 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 584:
-#line 3833 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 609: /* external_declaration: SEMICOLON  */
+#line 3971 "MachineIndependent/glslang.y"
+                {
         parseContext.requireProfile((yyvsp[0].lex).loc, ~EEsProfile, "extraneous semicolon");
         parseContext.profileRequires((yyvsp[0].lex).loc, ~EEsProfile, 460, nullptr, "extraneous semicolon");
         (yyval.interm.intermNode) = nullptr;
     }
-#line 10294 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10906 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 585:
-#line 3842 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 610: /* $@13: %empty  */
+#line 3980 "MachineIndependent/glslang.y"
+                         {
         (yyvsp[0].interm).function = parseContext.handleFunctionDeclarator((yyvsp[0].interm).loc, *(yyvsp[0].interm).function, false /* not prototype */);
         (yyvsp[0].interm).intermNode = parseContext.handleFunctionDefinition((yyvsp[0].interm).loc, *(yyvsp[0].interm).function);
 
@@ -10307,12 +10919,12 @@
             ++parseContext.statementNestingLevel;
         }
     }
-#line 10311 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10923 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 586:
-#line 3854 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 611: /* function_definition: function_prototype $@13 compound_statement_no_new_scope  */
+#line 3992 "MachineIndependent/glslang.y"
+                                    {
         //   May be best done as post process phase on intermediate code
         if (parseContext.currentFunctionType->getBasicType() != EbtVoid && ! parseContext.functionReturnsValue)
             parseContext.error((yyvsp[-2].interm).loc, "function does not return a value:", "", (yyvsp[-2].interm).function->getName().c_str());
@@ -10338,52 +10950,53 @@
             --parseContext.statementNestingLevel;
         }
     }
-#line 10342 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10954 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 587:
-#line 3884 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 612: /* attribute: LEFT_BRACKET LEFT_BRACKET attribute_list RIGHT_BRACKET RIGHT_BRACKET  */
+#line 4022 "MachineIndependent/glslang.y"
+                                                                           {
         (yyval.interm.attributes) = (yyvsp[-2].interm.attributes);
         parseContext.requireExtensions((yyvsp[-4].lex).loc, 1, &E_GL_EXT_control_flow_attributes, "attribute");
     }
-#line 10351 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10963 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 588:
-#line 3890 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 613: /* attribute_list: single_attribute  */
+#line 4028 "MachineIndependent/glslang.y"
+                       {
         (yyval.interm.attributes) = (yyvsp[0].interm.attributes);
     }
-#line 10359 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10971 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 589:
-#line 3893 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 614: /* attribute_list: attribute_list COMMA single_attribute  */
+#line 4031 "MachineIndependent/glslang.y"
+                                            {
         (yyval.interm.attributes) = parseContext.mergeAttributes((yyvsp[-2].interm.attributes), (yyvsp[0].interm.attributes));
     }
-#line 10367 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10979 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 590:
-#line 3898 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 615: /* single_attribute: IDENTIFIER  */
+#line 4036 "MachineIndependent/glslang.y"
+                 {
         (yyval.interm.attributes) = parseContext.makeAttributes(*(yyvsp[0].lex).string);
     }
-#line 10375 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10987 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 591:
-#line 3901 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
+  case 616: /* single_attribute: IDENTIFIER LEFT_PAREN constant_expression RIGHT_PAREN  */
+#line 4039 "MachineIndependent/glslang.y"
+                                                            {
         (yyval.interm.attributes) = parseContext.makeAttributes(*(yyvsp[-3].lex).string, (yyvsp[-1].interm.intermTypedNode));
     }
-#line 10383 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10995 "MachineIndependent/glslang_tab.cpp"
     break;
 
 
-#line 10387 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10999 "MachineIndependent/glslang_tab.cpp"
+
       default: break;
     }
   /* User semantic actions sometimes alter yychar, and that requires
@@ -10397,25 +11010,23 @@
      case of YYERROR or YYBACKUP, subsequent parser actions might lead
      to an incorrect destructor call or verbose syntax error message
      before the lookahead is translated.  */
-  YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
+  YY_SYMBOL_PRINT ("-> $$ =", YY_CAST (yysymbol_kind_t, yyr1[yyn]), &yyval, &yyloc);
 
   YYPOPSTACK (yylen);
   yylen = 0;
-  YY_STACK_PRINT (yyss, yyssp);
 
   *++yyvsp = yyval;
 
   /* Now 'shift' the result of the reduction.  Determine what state
      that goes to, based on the state we popped back to and the rule
      number reduced by.  */
-
-  yyn = yyr1[yyn];
-
-  yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
-  if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
-    yystate = yytable[yystate];
-  else
-    yystate = yydefgoto[yyn - YYNTOKENS];
+  {
+    const int yylhs = yyr1[yyn] - YYNTOKENS;
+    const int yyi = yypgoto[yylhs] + *yyssp;
+    yystate = (0 <= yyi && yyi <= YYLAST && yycheck[yyi] == *yyssp
+               ? yytable[yyi]
+               : yydefgoto[yylhs]);
+  }
 
   goto yynewstate;
 
@@ -10426,50 +11037,44 @@
 yyerrlab:
   /* Make sure we have latest lookahead translation.  See comments at
      user semantic actions for why this is necessary.  */
-  yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar);
-
+  yytoken = yychar == YYEMPTY ? YYSYMBOL_YYEMPTY : YYTRANSLATE (yychar);
   /* If not already recovering from an error, report this error.  */
   if (!yyerrstatus)
     {
       ++yynerrs;
-#if ! YYERROR_VERBOSE
-      yyerror (pParseContext, YY_("syntax error"));
-#else
-# define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \
-                                        yyssp, yytoken)
       {
+        yypcontext_t yyctx
+          = {yyssp, yytoken};
         char const *yymsgp = YY_("syntax error");
         int yysyntax_error_status;
-        yysyntax_error_status = YYSYNTAX_ERROR;
+        yysyntax_error_status = yysyntax_error (&yymsg_alloc, &yymsg, &yyctx);
         if (yysyntax_error_status == 0)
           yymsgp = yymsg;
-        else if (yysyntax_error_status == 1)
+        else if (yysyntax_error_status == -1)
           {
             if (yymsg != yymsgbuf)
               YYSTACK_FREE (yymsg);
-            yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc);
-            if (!yymsg)
+            yymsg = YY_CAST (char *,
+                             YYSTACK_ALLOC (YY_CAST (YYSIZE_T, yymsg_alloc)));
+            if (yymsg)
               {
-                yymsg = yymsgbuf;
-                yymsg_alloc = sizeof yymsgbuf;
-                yysyntax_error_status = 2;
+                yysyntax_error_status
+                  = yysyntax_error (&yymsg_alloc, &yymsg, &yyctx);
+                yymsgp = yymsg;
               }
             else
               {
-                yysyntax_error_status = YYSYNTAX_ERROR;
-                yymsgp = yymsg;
+                yymsg = yymsgbuf;
+                yymsg_alloc = sizeof yymsgbuf;
+                yysyntax_error_status = YYENOMEM;
               }
           }
         yyerror (pParseContext, yymsgp);
-        if (yysyntax_error_status == 2)
+        if (yysyntax_error_status == YYENOMEM)
           goto yyexhaustedlab;
       }
-# undef YYSYNTAX_ERROR
-#endif
     }
 
-
-
   if (yyerrstatus == 3)
     {
       /* If just tried and failed to reuse lookahead token after an
@@ -10498,12 +11103,10 @@
 | yyerrorlab -- error raised explicitly by YYERROR.  |
 `---------------------------------------------------*/
 yyerrorlab:
-
-  /* Pacify compilers like GCC when the user code never invokes
-     YYERROR and the label yyerrorlab therefore never appears in user
-     code.  */
-  if (/*CONSTCOND*/ 0)
-     goto yyerrorlab;
+  /* Pacify compilers when the user code never invokes YYERROR and the
+     label yyerrorlab therefore never appears in user code.  */
+  if (0)
+    YYERROR;
 
   /* Do not reclaim the symbols of the rule whose action triggered
      this YYERROR.  */
@@ -10520,13 +11123,14 @@
 yyerrlab1:
   yyerrstatus = 3;      /* Each real token shifted decrements this.  */
 
+  /* Pop stack until we find a state that shifts the error token.  */
   for (;;)
     {
       yyn = yypact[yystate];
       if (!yypact_value_is_default (yyn))
         {
-          yyn += YYTERROR;
-          if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
+          yyn += YYSYMBOL_YYerror;
+          if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYSYMBOL_YYerror)
             {
               yyn = yytable[yyn];
               if (0 < yyn)
@@ -10540,7 +11144,7 @@
 
 
       yydestruct ("Error: popping",
-                  yystos[yystate], yyvsp, pParseContext);
+                  YY_ACCESSING_SYMBOL (yystate), yyvsp, pParseContext);
       YYPOPSTACK (1);
       yystate = *yyssp;
       YY_STACK_PRINT (yyss, yyssp);
@@ -10552,7 +11156,7 @@
 
 
   /* Shift the error token.  */
-  YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
+  YY_SYMBOL_PRINT ("Shifting", YY_ACCESSING_SYMBOL (yyn), yyvsp, yylsp);
 
   yystate = yyn;
   goto yynewstate;
@@ -10565,6 +11169,7 @@
   yyresult = 0;
   goto yyreturn;
 
+
 /*-----------------------------------.
 | yyabortlab -- YYABORT comes here.  |
 `-----------------------------------*/
@@ -10572,16 +11177,21 @@
   yyresult = 1;
   goto yyreturn;
 
-#if !defined yyoverflow || YYERROR_VERBOSE
+
+#if 1
 /*-------------------------------------------------.
 | yyexhaustedlab -- memory exhaustion comes here.  |
 `-------------------------------------------------*/
 yyexhaustedlab:
   yyerror (pParseContext, YY_("memory exhausted"));
   yyresult = 2;
-  /* Fall through.  */
+  goto yyreturn;
 #endif
 
+
+/*-------------------------------------------------------.
+| yyreturn -- parsing is finished, clean up and return.  |
+`-------------------------------------------------------*/
 yyreturn:
   if (yychar != YYEMPTY)
     {
@@ -10598,18 +11208,17 @@
   while (yyssp != yyss)
     {
       yydestruct ("Cleanup: popping",
-                  yystos[*yyssp], yyvsp, pParseContext);
+                  YY_ACCESSING_SYMBOL (+*yyssp), yyvsp, pParseContext);
       YYPOPSTACK (1);
     }
 #ifndef yyoverflow
   if (yyss != yyssa)
     YYSTACK_FREE (yyss);
 #endif
-#if YYERROR_VERBOSE
   if (yymsg != yymsgbuf)
     YYSTACK_FREE (yymsg);
-#endif
   return yyresult;
 }
-#line 3906 "MachineIndependent/glslang.y" /* yacc.c:1906  */
+
+#line 4044 "MachineIndependent/glslang.y"
 
diff --git a/glslang/MachineIndependent/glslang_tab.cpp.h b/glslang/MachineIndependent/glslang_tab.cpp.h
index 78b72a2..d6bc00d 100644
--- a/glslang/MachineIndependent/glslang_tab.cpp.h
+++ b/glslang/MachineIndependent/glslang_tab.cpp.h
@@ -1,8 +1,9 @@
-/* A Bison parser, made by GNU Bison 3.0.4.  */
+/* A Bison parser, made by GNU Bison 3.7.4.  */
 
 /* Bison interface for Yacc-like parsers in C
 
-   Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc.
+   Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2020 Free Software Foundation,
+   Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -30,6 +31,10 @@
    This special exception was added by the Free Software Foundation in
    version 2.2 of Bison.  */
 
+/* DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual,
+   especially those whose name start with YY_ or yy_.  They are
+   private implementation details that can be changed or removed.  */
+
 #ifndef YY_YY_MACHINEINDEPENDENT_GLSLANG_TAB_CPP_H_INCLUDED
 # define YY_YY_MACHINEINDEPENDENT_GLSLANG_TAB_CPP_H_INCLUDED
 /* Debug traces.  */
@@ -40,437 +45,466 @@
 extern int yydebug;
 #endif
 
-/* Token type.  */
+/* Token kinds.  */
 #ifndef YYTOKENTYPE
 # define YYTOKENTYPE
   enum yytokentype
   {
-    CONST = 258,
-    BOOL = 259,
-    INT = 260,
-    UINT = 261,
-    FLOAT = 262,
-    BVEC2 = 263,
-    BVEC3 = 264,
-    BVEC4 = 265,
-    IVEC2 = 266,
-    IVEC3 = 267,
-    IVEC4 = 268,
-    UVEC2 = 269,
-    UVEC3 = 270,
-    UVEC4 = 271,
-    VEC2 = 272,
-    VEC3 = 273,
-    VEC4 = 274,
-    MAT2 = 275,
-    MAT3 = 276,
-    MAT4 = 277,
-    MAT2X2 = 278,
-    MAT2X3 = 279,
-    MAT2X4 = 280,
-    MAT3X2 = 281,
-    MAT3X3 = 282,
-    MAT3X4 = 283,
-    MAT4X2 = 284,
-    MAT4X3 = 285,
-    MAT4X4 = 286,
-    SAMPLER2D = 287,
-    SAMPLER3D = 288,
-    SAMPLERCUBE = 289,
-    SAMPLER2DSHADOW = 290,
-    SAMPLERCUBESHADOW = 291,
-    SAMPLER2DARRAY = 292,
-    SAMPLER2DARRAYSHADOW = 293,
-    ISAMPLER2D = 294,
-    ISAMPLER3D = 295,
-    ISAMPLERCUBE = 296,
-    ISAMPLER2DARRAY = 297,
-    USAMPLER2D = 298,
-    USAMPLER3D = 299,
-    USAMPLERCUBE = 300,
-    USAMPLER2DARRAY = 301,
-    SAMPLER = 302,
-    SAMPLERSHADOW = 303,
-    TEXTURE2D = 304,
-    TEXTURE3D = 305,
-    TEXTURECUBE = 306,
-    TEXTURE2DARRAY = 307,
-    ITEXTURE2D = 308,
-    ITEXTURE3D = 309,
-    ITEXTURECUBE = 310,
-    ITEXTURE2DARRAY = 311,
-    UTEXTURE2D = 312,
-    UTEXTURE3D = 313,
-    UTEXTURECUBE = 314,
-    UTEXTURE2DARRAY = 315,
-    ATTRIBUTE = 316,
-    VARYING = 317,
-    FLOAT16_T = 318,
-    FLOAT32_T = 319,
-    DOUBLE = 320,
-    FLOAT64_T = 321,
-    INT64_T = 322,
-    UINT64_T = 323,
-    INT32_T = 324,
-    UINT32_T = 325,
-    INT16_T = 326,
-    UINT16_T = 327,
-    INT8_T = 328,
-    UINT8_T = 329,
-    I64VEC2 = 330,
-    I64VEC3 = 331,
-    I64VEC4 = 332,
-    U64VEC2 = 333,
-    U64VEC3 = 334,
-    U64VEC4 = 335,
-    I32VEC2 = 336,
-    I32VEC3 = 337,
-    I32VEC4 = 338,
-    U32VEC2 = 339,
-    U32VEC3 = 340,
-    U32VEC4 = 341,
-    I16VEC2 = 342,
-    I16VEC3 = 343,
-    I16VEC4 = 344,
-    U16VEC2 = 345,
-    U16VEC3 = 346,
-    U16VEC4 = 347,
-    I8VEC2 = 348,
-    I8VEC3 = 349,
-    I8VEC4 = 350,
-    U8VEC2 = 351,
-    U8VEC3 = 352,
-    U8VEC4 = 353,
-    DVEC2 = 354,
-    DVEC3 = 355,
-    DVEC4 = 356,
-    DMAT2 = 357,
-    DMAT3 = 358,
-    DMAT4 = 359,
-    F16VEC2 = 360,
-    F16VEC3 = 361,
-    F16VEC4 = 362,
-    F16MAT2 = 363,
-    F16MAT3 = 364,
-    F16MAT4 = 365,
-    F32VEC2 = 366,
-    F32VEC3 = 367,
-    F32VEC4 = 368,
-    F32MAT2 = 369,
-    F32MAT3 = 370,
-    F32MAT4 = 371,
-    F64VEC2 = 372,
-    F64VEC3 = 373,
-    F64VEC4 = 374,
-    F64MAT2 = 375,
-    F64MAT3 = 376,
-    F64MAT4 = 377,
-    DMAT2X2 = 378,
-    DMAT2X3 = 379,
-    DMAT2X4 = 380,
-    DMAT3X2 = 381,
-    DMAT3X3 = 382,
-    DMAT3X4 = 383,
-    DMAT4X2 = 384,
-    DMAT4X3 = 385,
-    DMAT4X4 = 386,
-    F16MAT2X2 = 387,
-    F16MAT2X3 = 388,
-    F16MAT2X4 = 389,
-    F16MAT3X2 = 390,
-    F16MAT3X3 = 391,
-    F16MAT3X4 = 392,
-    F16MAT4X2 = 393,
-    F16MAT4X3 = 394,
-    F16MAT4X4 = 395,
-    F32MAT2X2 = 396,
-    F32MAT2X3 = 397,
-    F32MAT2X4 = 398,
-    F32MAT3X2 = 399,
-    F32MAT3X3 = 400,
-    F32MAT3X4 = 401,
-    F32MAT4X2 = 402,
-    F32MAT4X3 = 403,
-    F32MAT4X4 = 404,
-    F64MAT2X2 = 405,
-    F64MAT2X3 = 406,
-    F64MAT2X4 = 407,
-    F64MAT3X2 = 408,
-    F64MAT3X3 = 409,
-    F64MAT3X4 = 410,
-    F64MAT4X2 = 411,
-    F64MAT4X3 = 412,
-    F64MAT4X4 = 413,
-    ATOMIC_UINT = 414,
-    ACCSTRUCTNV = 415,
-    ACCSTRUCTEXT = 416,
-    RAYQUERYEXT = 417,
-    FCOOPMATNV = 418,
-    ICOOPMATNV = 419,
-    UCOOPMATNV = 420,
-    SAMPLERCUBEARRAY = 421,
-    SAMPLERCUBEARRAYSHADOW = 422,
-    ISAMPLERCUBEARRAY = 423,
-    USAMPLERCUBEARRAY = 424,
-    SAMPLER1D = 425,
-    SAMPLER1DARRAY = 426,
-    SAMPLER1DARRAYSHADOW = 427,
-    ISAMPLER1D = 428,
-    SAMPLER1DSHADOW = 429,
-    SAMPLER2DRECT = 430,
-    SAMPLER2DRECTSHADOW = 431,
-    ISAMPLER2DRECT = 432,
-    USAMPLER2DRECT = 433,
-    SAMPLERBUFFER = 434,
-    ISAMPLERBUFFER = 435,
-    USAMPLERBUFFER = 436,
-    SAMPLER2DMS = 437,
-    ISAMPLER2DMS = 438,
-    USAMPLER2DMS = 439,
-    SAMPLER2DMSARRAY = 440,
-    ISAMPLER2DMSARRAY = 441,
-    USAMPLER2DMSARRAY = 442,
-    SAMPLEREXTERNALOES = 443,
-    SAMPLEREXTERNAL2DY2YEXT = 444,
-    ISAMPLER1DARRAY = 445,
-    USAMPLER1D = 446,
-    USAMPLER1DARRAY = 447,
-    F16SAMPLER1D = 448,
-    F16SAMPLER2D = 449,
-    F16SAMPLER3D = 450,
-    F16SAMPLER2DRECT = 451,
-    F16SAMPLERCUBE = 452,
-    F16SAMPLER1DARRAY = 453,
-    F16SAMPLER2DARRAY = 454,
-    F16SAMPLERCUBEARRAY = 455,
-    F16SAMPLERBUFFER = 456,
-    F16SAMPLER2DMS = 457,
-    F16SAMPLER2DMSARRAY = 458,
-    F16SAMPLER1DSHADOW = 459,
-    F16SAMPLER2DSHADOW = 460,
-    F16SAMPLER1DARRAYSHADOW = 461,
-    F16SAMPLER2DARRAYSHADOW = 462,
-    F16SAMPLER2DRECTSHADOW = 463,
-    F16SAMPLERCUBESHADOW = 464,
-    F16SAMPLERCUBEARRAYSHADOW = 465,
-    IMAGE1D = 466,
-    IIMAGE1D = 467,
-    UIMAGE1D = 468,
-    IMAGE2D = 469,
-    IIMAGE2D = 470,
-    UIMAGE2D = 471,
-    IMAGE3D = 472,
-    IIMAGE3D = 473,
-    UIMAGE3D = 474,
-    IMAGE2DRECT = 475,
-    IIMAGE2DRECT = 476,
-    UIMAGE2DRECT = 477,
-    IMAGECUBE = 478,
-    IIMAGECUBE = 479,
-    UIMAGECUBE = 480,
-    IMAGEBUFFER = 481,
-    IIMAGEBUFFER = 482,
-    UIMAGEBUFFER = 483,
-    IMAGE1DARRAY = 484,
-    IIMAGE1DARRAY = 485,
-    UIMAGE1DARRAY = 486,
-    IMAGE2DARRAY = 487,
-    IIMAGE2DARRAY = 488,
-    UIMAGE2DARRAY = 489,
-    IMAGECUBEARRAY = 490,
-    IIMAGECUBEARRAY = 491,
-    UIMAGECUBEARRAY = 492,
-    IMAGE2DMS = 493,
-    IIMAGE2DMS = 494,
-    UIMAGE2DMS = 495,
-    IMAGE2DMSARRAY = 496,
-    IIMAGE2DMSARRAY = 497,
-    UIMAGE2DMSARRAY = 498,
-    F16IMAGE1D = 499,
-    F16IMAGE2D = 500,
-    F16IMAGE3D = 501,
-    F16IMAGE2DRECT = 502,
-    F16IMAGECUBE = 503,
-    F16IMAGE1DARRAY = 504,
-    F16IMAGE2DARRAY = 505,
-    F16IMAGECUBEARRAY = 506,
-    F16IMAGEBUFFER = 507,
-    F16IMAGE2DMS = 508,
-    F16IMAGE2DMSARRAY = 509,
-    TEXTURECUBEARRAY = 510,
-    ITEXTURECUBEARRAY = 511,
-    UTEXTURECUBEARRAY = 512,
-    TEXTURE1D = 513,
-    ITEXTURE1D = 514,
-    UTEXTURE1D = 515,
-    TEXTURE1DARRAY = 516,
-    ITEXTURE1DARRAY = 517,
-    UTEXTURE1DARRAY = 518,
-    TEXTURE2DRECT = 519,
-    ITEXTURE2DRECT = 520,
-    UTEXTURE2DRECT = 521,
-    TEXTUREBUFFER = 522,
-    ITEXTUREBUFFER = 523,
-    UTEXTUREBUFFER = 524,
-    TEXTURE2DMS = 525,
-    ITEXTURE2DMS = 526,
-    UTEXTURE2DMS = 527,
-    TEXTURE2DMSARRAY = 528,
-    ITEXTURE2DMSARRAY = 529,
-    UTEXTURE2DMSARRAY = 530,
-    F16TEXTURE1D = 531,
-    F16TEXTURE2D = 532,
-    F16TEXTURE3D = 533,
-    F16TEXTURE2DRECT = 534,
-    F16TEXTURECUBE = 535,
-    F16TEXTURE1DARRAY = 536,
-    F16TEXTURE2DARRAY = 537,
-    F16TEXTURECUBEARRAY = 538,
-    F16TEXTUREBUFFER = 539,
-    F16TEXTURE2DMS = 540,
-    F16TEXTURE2DMSARRAY = 541,
-    SUBPASSINPUT = 542,
-    SUBPASSINPUTMS = 543,
-    ISUBPASSINPUT = 544,
-    ISUBPASSINPUTMS = 545,
-    USUBPASSINPUT = 546,
-    USUBPASSINPUTMS = 547,
-    F16SUBPASSINPUT = 548,
-    F16SUBPASSINPUTMS = 549,
-    LEFT_OP = 550,
-    RIGHT_OP = 551,
-    INC_OP = 552,
-    DEC_OP = 553,
-    LE_OP = 554,
-    GE_OP = 555,
-    EQ_OP = 556,
-    NE_OP = 557,
-    AND_OP = 558,
-    OR_OP = 559,
-    XOR_OP = 560,
-    MUL_ASSIGN = 561,
-    DIV_ASSIGN = 562,
-    ADD_ASSIGN = 563,
-    MOD_ASSIGN = 564,
-    LEFT_ASSIGN = 565,
-    RIGHT_ASSIGN = 566,
-    AND_ASSIGN = 567,
-    XOR_ASSIGN = 568,
-    OR_ASSIGN = 569,
-    SUB_ASSIGN = 570,
-    STRING_LITERAL = 571,
-    LEFT_PAREN = 572,
-    RIGHT_PAREN = 573,
-    LEFT_BRACKET = 574,
-    RIGHT_BRACKET = 575,
-    LEFT_BRACE = 576,
-    RIGHT_BRACE = 577,
-    DOT = 578,
-    COMMA = 579,
-    COLON = 580,
-    EQUAL = 581,
-    SEMICOLON = 582,
-    BANG = 583,
-    DASH = 584,
-    TILDE = 585,
-    PLUS = 586,
-    STAR = 587,
-    SLASH = 588,
-    PERCENT = 589,
-    LEFT_ANGLE = 590,
-    RIGHT_ANGLE = 591,
-    VERTICAL_BAR = 592,
-    CARET = 593,
-    AMPERSAND = 594,
-    QUESTION = 595,
-    INVARIANT = 596,
-    HIGH_PRECISION = 597,
-    MEDIUM_PRECISION = 598,
-    LOW_PRECISION = 599,
-    PRECISION = 600,
-    PACKED = 601,
-    RESOURCE = 602,
-    SUPERP = 603,
-    FLOATCONSTANT = 604,
-    INTCONSTANT = 605,
-    UINTCONSTANT = 606,
-    BOOLCONSTANT = 607,
-    IDENTIFIER = 608,
-    TYPE_NAME = 609,
-    CENTROID = 610,
-    IN = 611,
-    OUT = 612,
-    INOUT = 613,
-    STRUCT = 614,
-    VOID = 615,
-    WHILE = 616,
-    BREAK = 617,
-    CONTINUE = 618,
-    DO = 619,
-    ELSE = 620,
-    FOR = 621,
-    IF = 622,
-    DISCARD = 623,
-    RETURN = 624,
-    SWITCH = 625,
-    CASE = 626,
-    DEFAULT = 627,
-    UNIFORM = 628,
-    SHARED = 629,
-    BUFFER = 630,
-    FLAT = 631,
-    SMOOTH = 632,
-    LAYOUT = 633,
-    DOUBLECONSTANT = 634,
-    INT16CONSTANT = 635,
-    UINT16CONSTANT = 636,
-    FLOAT16CONSTANT = 637,
-    INT32CONSTANT = 638,
-    UINT32CONSTANT = 639,
-    INT64CONSTANT = 640,
-    UINT64CONSTANT = 641,
-    SUBROUTINE = 642,
-    DEMOTE = 643,
-    PAYLOADNV = 644,
-    PAYLOADINNV = 645,
-    HITATTRNV = 646,
-    CALLDATANV = 647,
-    CALLDATAINNV = 648,
-    PAYLOADEXT = 649,
-    PAYLOADINEXT = 650,
-    HITATTREXT = 651,
-    CALLDATAEXT = 652,
-    CALLDATAINEXT = 653,
-    PATCH = 654,
-    SAMPLE = 655,
-    NONUNIFORM = 656,
-    COHERENT = 657,
-    VOLATILE = 658,
-    RESTRICT = 659,
-    READONLY = 660,
-    WRITEONLY = 661,
-    DEVICECOHERENT = 662,
-    QUEUEFAMILYCOHERENT = 663,
-    WORKGROUPCOHERENT = 664,
-    SUBGROUPCOHERENT = 665,
-    NONPRIVATE = 666,
-    SHADERCALLCOHERENT = 667,
-    NOPERSPECTIVE = 668,
-    EXPLICITINTERPAMD = 669,
-    PERVERTEXNV = 670,
-    PERPRIMITIVENV = 671,
-    PERVIEWNV = 672,
-    PERTASKNV = 673,
-    PRECISE = 674
+    YYEMPTY = -2,
+    YYEOF = 0,                     /* "end of file"  */
+    YYerror = 256,                 /* error  */
+    YYUNDEF = 257,                 /* "invalid token"  */
+    CONST = 258,                   /* CONST  */
+    BOOL = 259,                    /* BOOL  */
+    INT = 260,                     /* INT  */
+    UINT = 261,                    /* UINT  */
+    FLOAT = 262,                   /* FLOAT  */
+    BVEC2 = 263,                   /* BVEC2  */
+    BVEC3 = 264,                   /* BVEC3  */
+    BVEC4 = 265,                   /* BVEC4  */
+    IVEC2 = 266,                   /* IVEC2  */
+    IVEC3 = 267,                   /* IVEC3  */
+    IVEC4 = 268,                   /* IVEC4  */
+    UVEC2 = 269,                   /* UVEC2  */
+    UVEC3 = 270,                   /* UVEC3  */
+    UVEC4 = 271,                   /* UVEC4  */
+    VEC2 = 272,                    /* VEC2  */
+    VEC3 = 273,                    /* VEC3  */
+    VEC4 = 274,                    /* VEC4  */
+    MAT2 = 275,                    /* MAT2  */
+    MAT3 = 276,                    /* MAT3  */
+    MAT4 = 277,                    /* MAT4  */
+    MAT2X2 = 278,                  /* MAT2X2  */
+    MAT2X3 = 279,                  /* MAT2X3  */
+    MAT2X4 = 280,                  /* MAT2X4  */
+    MAT3X2 = 281,                  /* MAT3X2  */
+    MAT3X3 = 282,                  /* MAT3X3  */
+    MAT3X4 = 283,                  /* MAT3X4  */
+    MAT4X2 = 284,                  /* MAT4X2  */
+    MAT4X3 = 285,                  /* MAT4X3  */
+    MAT4X4 = 286,                  /* MAT4X4  */
+    SAMPLER2D = 287,               /* SAMPLER2D  */
+    SAMPLER3D = 288,               /* SAMPLER3D  */
+    SAMPLERCUBE = 289,             /* SAMPLERCUBE  */
+    SAMPLER2DSHADOW = 290,         /* SAMPLER2DSHADOW  */
+    SAMPLERCUBESHADOW = 291,       /* SAMPLERCUBESHADOW  */
+    SAMPLER2DARRAY = 292,          /* SAMPLER2DARRAY  */
+    SAMPLER2DARRAYSHADOW = 293,    /* SAMPLER2DARRAYSHADOW  */
+    ISAMPLER2D = 294,              /* ISAMPLER2D  */
+    ISAMPLER3D = 295,              /* ISAMPLER3D  */
+    ISAMPLERCUBE = 296,            /* ISAMPLERCUBE  */
+    ISAMPLER2DARRAY = 297,         /* ISAMPLER2DARRAY  */
+    USAMPLER2D = 298,              /* USAMPLER2D  */
+    USAMPLER3D = 299,              /* USAMPLER3D  */
+    USAMPLERCUBE = 300,            /* USAMPLERCUBE  */
+    USAMPLER2DARRAY = 301,         /* USAMPLER2DARRAY  */
+    SAMPLER = 302,                 /* SAMPLER  */
+    SAMPLERSHADOW = 303,           /* SAMPLERSHADOW  */
+    TEXTURE2D = 304,               /* TEXTURE2D  */
+    TEXTURE3D = 305,               /* TEXTURE3D  */
+    TEXTURECUBE = 306,             /* TEXTURECUBE  */
+    TEXTURE2DARRAY = 307,          /* TEXTURE2DARRAY  */
+    ITEXTURE2D = 308,              /* ITEXTURE2D  */
+    ITEXTURE3D = 309,              /* ITEXTURE3D  */
+    ITEXTURECUBE = 310,            /* ITEXTURECUBE  */
+    ITEXTURE2DARRAY = 311,         /* ITEXTURE2DARRAY  */
+    UTEXTURE2D = 312,              /* UTEXTURE2D  */
+    UTEXTURE3D = 313,              /* UTEXTURE3D  */
+    UTEXTURECUBE = 314,            /* UTEXTURECUBE  */
+    UTEXTURE2DARRAY = 315,         /* UTEXTURE2DARRAY  */
+    ATTRIBUTE = 316,               /* ATTRIBUTE  */
+    VARYING = 317,                 /* VARYING  */
+    FLOAT16_T = 318,               /* FLOAT16_T  */
+    FLOAT32_T = 319,               /* FLOAT32_T  */
+    DOUBLE = 320,                  /* DOUBLE  */
+    FLOAT64_T = 321,               /* FLOAT64_T  */
+    INT64_T = 322,                 /* INT64_T  */
+    UINT64_T = 323,                /* UINT64_T  */
+    INT32_T = 324,                 /* INT32_T  */
+    UINT32_T = 325,                /* UINT32_T  */
+    INT16_T = 326,                 /* INT16_T  */
+    UINT16_T = 327,                /* UINT16_T  */
+    INT8_T = 328,                  /* INT8_T  */
+    UINT8_T = 329,                 /* UINT8_T  */
+    I64VEC2 = 330,                 /* I64VEC2  */
+    I64VEC3 = 331,                 /* I64VEC3  */
+    I64VEC4 = 332,                 /* I64VEC4  */
+    U64VEC2 = 333,                 /* U64VEC2  */
+    U64VEC3 = 334,                 /* U64VEC3  */
+    U64VEC4 = 335,                 /* U64VEC4  */
+    I32VEC2 = 336,                 /* I32VEC2  */
+    I32VEC3 = 337,                 /* I32VEC3  */
+    I32VEC4 = 338,                 /* I32VEC4  */
+    U32VEC2 = 339,                 /* U32VEC2  */
+    U32VEC3 = 340,                 /* U32VEC3  */
+    U32VEC4 = 341,                 /* U32VEC4  */
+    I16VEC2 = 342,                 /* I16VEC2  */
+    I16VEC3 = 343,                 /* I16VEC3  */
+    I16VEC4 = 344,                 /* I16VEC4  */
+    U16VEC2 = 345,                 /* U16VEC2  */
+    U16VEC3 = 346,                 /* U16VEC3  */
+    U16VEC4 = 347,                 /* U16VEC4  */
+    I8VEC2 = 348,                  /* I8VEC2  */
+    I8VEC3 = 349,                  /* I8VEC3  */
+    I8VEC4 = 350,                  /* I8VEC4  */
+    U8VEC2 = 351,                  /* U8VEC2  */
+    U8VEC3 = 352,                  /* U8VEC3  */
+    U8VEC4 = 353,                  /* U8VEC4  */
+    DVEC2 = 354,                   /* DVEC2  */
+    DVEC3 = 355,                   /* DVEC3  */
+    DVEC4 = 356,                   /* DVEC4  */
+    DMAT2 = 357,                   /* DMAT2  */
+    DMAT3 = 358,                   /* DMAT3  */
+    DMAT4 = 359,                   /* DMAT4  */
+    F16VEC2 = 360,                 /* F16VEC2  */
+    F16VEC3 = 361,                 /* F16VEC3  */
+    F16VEC4 = 362,                 /* F16VEC4  */
+    F16MAT2 = 363,                 /* F16MAT2  */
+    F16MAT3 = 364,                 /* F16MAT3  */
+    F16MAT4 = 365,                 /* F16MAT4  */
+    F32VEC2 = 366,                 /* F32VEC2  */
+    F32VEC3 = 367,                 /* F32VEC3  */
+    F32VEC4 = 368,                 /* F32VEC4  */
+    F32MAT2 = 369,                 /* F32MAT2  */
+    F32MAT3 = 370,                 /* F32MAT3  */
+    F32MAT4 = 371,                 /* F32MAT4  */
+    F64VEC2 = 372,                 /* F64VEC2  */
+    F64VEC3 = 373,                 /* F64VEC3  */
+    F64VEC4 = 374,                 /* F64VEC4  */
+    F64MAT2 = 375,                 /* F64MAT2  */
+    F64MAT3 = 376,                 /* F64MAT3  */
+    F64MAT4 = 377,                 /* F64MAT4  */
+    DMAT2X2 = 378,                 /* DMAT2X2  */
+    DMAT2X3 = 379,                 /* DMAT2X3  */
+    DMAT2X4 = 380,                 /* DMAT2X4  */
+    DMAT3X2 = 381,                 /* DMAT3X2  */
+    DMAT3X3 = 382,                 /* DMAT3X3  */
+    DMAT3X4 = 383,                 /* DMAT3X4  */
+    DMAT4X2 = 384,                 /* DMAT4X2  */
+    DMAT4X3 = 385,                 /* DMAT4X3  */
+    DMAT4X4 = 386,                 /* DMAT4X4  */
+    F16MAT2X2 = 387,               /* F16MAT2X2  */
+    F16MAT2X3 = 388,               /* F16MAT2X3  */
+    F16MAT2X4 = 389,               /* F16MAT2X4  */
+    F16MAT3X2 = 390,               /* F16MAT3X2  */
+    F16MAT3X3 = 391,               /* F16MAT3X3  */
+    F16MAT3X4 = 392,               /* F16MAT3X4  */
+    F16MAT4X2 = 393,               /* F16MAT4X2  */
+    F16MAT4X3 = 394,               /* F16MAT4X3  */
+    F16MAT4X4 = 395,               /* F16MAT4X4  */
+    F32MAT2X2 = 396,               /* F32MAT2X2  */
+    F32MAT2X3 = 397,               /* F32MAT2X3  */
+    F32MAT2X4 = 398,               /* F32MAT2X4  */
+    F32MAT3X2 = 399,               /* F32MAT3X2  */
+    F32MAT3X3 = 400,               /* F32MAT3X3  */
+    F32MAT3X4 = 401,               /* F32MAT3X4  */
+    F32MAT4X2 = 402,               /* F32MAT4X2  */
+    F32MAT4X3 = 403,               /* F32MAT4X3  */
+    F32MAT4X4 = 404,               /* F32MAT4X4  */
+    F64MAT2X2 = 405,               /* F64MAT2X2  */
+    F64MAT2X3 = 406,               /* F64MAT2X3  */
+    F64MAT2X4 = 407,               /* F64MAT2X4  */
+    F64MAT3X2 = 408,               /* F64MAT3X2  */
+    F64MAT3X3 = 409,               /* F64MAT3X3  */
+    F64MAT3X4 = 410,               /* F64MAT3X4  */
+    F64MAT4X2 = 411,               /* F64MAT4X2  */
+    F64MAT4X3 = 412,               /* F64MAT4X3  */
+    F64MAT4X4 = 413,               /* F64MAT4X4  */
+    ATOMIC_UINT = 414,             /* ATOMIC_UINT  */
+    ACCSTRUCTNV = 415,             /* ACCSTRUCTNV  */
+    ACCSTRUCTEXT = 416,            /* ACCSTRUCTEXT  */
+    RAYQUERYEXT = 417,             /* RAYQUERYEXT  */
+    FCOOPMATNV = 418,              /* FCOOPMATNV  */
+    ICOOPMATNV = 419,              /* ICOOPMATNV  */
+    UCOOPMATNV = 420,              /* UCOOPMATNV  */
+    SAMPLERCUBEARRAY = 421,        /* SAMPLERCUBEARRAY  */
+    SAMPLERCUBEARRAYSHADOW = 422,  /* SAMPLERCUBEARRAYSHADOW  */
+    ISAMPLERCUBEARRAY = 423,       /* ISAMPLERCUBEARRAY  */
+    USAMPLERCUBEARRAY = 424,       /* USAMPLERCUBEARRAY  */
+    SAMPLER1D = 425,               /* SAMPLER1D  */
+    SAMPLER1DARRAY = 426,          /* SAMPLER1DARRAY  */
+    SAMPLER1DARRAYSHADOW = 427,    /* SAMPLER1DARRAYSHADOW  */
+    ISAMPLER1D = 428,              /* ISAMPLER1D  */
+    SAMPLER1DSHADOW = 429,         /* SAMPLER1DSHADOW  */
+    SAMPLER2DRECT = 430,           /* SAMPLER2DRECT  */
+    SAMPLER2DRECTSHADOW = 431,     /* SAMPLER2DRECTSHADOW  */
+    ISAMPLER2DRECT = 432,          /* ISAMPLER2DRECT  */
+    USAMPLER2DRECT = 433,          /* USAMPLER2DRECT  */
+    SAMPLERBUFFER = 434,           /* SAMPLERBUFFER  */
+    ISAMPLERBUFFER = 435,          /* ISAMPLERBUFFER  */
+    USAMPLERBUFFER = 436,          /* USAMPLERBUFFER  */
+    SAMPLER2DMS = 437,             /* SAMPLER2DMS  */
+    ISAMPLER2DMS = 438,            /* ISAMPLER2DMS  */
+    USAMPLER2DMS = 439,            /* USAMPLER2DMS  */
+    SAMPLER2DMSARRAY = 440,        /* SAMPLER2DMSARRAY  */
+    ISAMPLER2DMSARRAY = 441,       /* ISAMPLER2DMSARRAY  */
+    USAMPLER2DMSARRAY = 442,       /* USAMPLER2DMSARRAY  */
+    SAMPLEREXTERNALOES = 443,      /* SAMPLEREXTERNALOES  */
+    SAMPLEREXTERNAL2DY2YEXT = 444, /* SAMPLEREXTERNAL2DY2YEXT  */
+    ISAMPLER1DARRAY = 445,         /* ISAMPLER1DARRAY  */
+    USAMPLER1D = 446,              /* USAMPLER1D  */
+    USAMPLER1DARRAY = 447,         /* USAMPLER1DARRAY  */
+    F16SAMPLER1D = 448,            /* F16SAMPLER1D  */
+    F16SAMPLER2D = 449,            /* F16SAMPLER2D  */
+    F16SAMPLER3D = 450,            /* F16SAMPLER3D  */
+    F16SAMPLER2DRECT = 451,        /* F16SAMPLER2DRECT  */
+    F16SAMPLERCUBE = 452,          /* F16SAMPLERCUBE  */
+    F16SAMPLER1DARRAY = 453,       /* F16SAMPLER1DARRAY  */
+    F16SAMPLER2DARRAY = 454,       /* F16SAMPLER2DARRAY  */
+    F16SAMPLERCUBEARRAY = 455,     /* F16SAMPLERCUBEARRAY  */
+    F16SAMPLERBUFFER = 456,        /* F16SAMPLERBUFFER  */
+    F16SAMPLER2DMS = 457,          /* F16SAMPLER2DMS  */
+    F16SAMPLER2DMSARRAY = 458,     /* F16SAMPLER2DMSARRAY  */
+    F16SAMPLER1DSHADOW = 459,      /* F16SAMPLER1DSHADOW  */
+    F16SAMPLER2DSHADOW = 460,      /* F16SAMPLER2DSHADOW  */
+    F16SAMPLER1DARRAYSHADOW = 461, /* F16SAMPLER1DARRAYSHADOW  */
+    F16SAMPLER2DARRAYSHADOW = 462, /* F16SAMPLER2DARRAYSHADOW  */
+    F16SAMPLER2DRECTSHADOW = 463,  /* F16SAMPLER2DRECTSHADOW  */
+    F16SAMPLERCUBESHADOW = 464,    /* F16SAMPLERCUBESHADOW  */
+    F16SAMPLERCUBEARRAYSHADOW = 465, /* F16SAMPLERCUBEARRAYSHADOW  */
+    IMAGE1D = 466,                 /* IMAGE1D  */
+    IIMAGE1D = 467,                /* IIMAGE1D  */
+    UIMAGE1D = 468,                /* UIMAGE1D  */
+    IMAGE2D = 469,                 /* IMAGE2D  */
+    IIMAGE2D = 470,                /* IIMAGE2D  */
+    UIMAGE2D = 471,                /* UIMAGE2D  */
+    IMAGE3D = 472,                 /* IMAGE3D  */
+    IIMAGE3D = 473,                /* IIMAGE3D  */
+    UIMAGE3D = 474,                /* UIMAGE3D  */
+    IMAGE2DRECT = 475,             /* IMAGE2DRECT  */
+    IIMAGE2DRECT = 476,            /* IIMAGE2DRECT  */
+    UIMAGE2DRECT = 477,            /* UIMAGE2DRECT  */
+    IMAGECUBE = 478,               /* IMAGECUBE  */
+    IIMAGECUBE = 479,              /* IIMAGECUBE  */
+    UIMAGECUBE = 480,              /* UIMAGECUBE  */
+    IMAGEBUFFER = 481,             /* IMAGEBUFFER  */
+    IIMAGEBUFFER = 482,            /* IIMAGEBUFFER  */
+    UIMAGEBUFFER = 483,            /* UIMAGEBUFFER  */
+    IMAGE1DARRAY = 484,            /* IMAGE1DARRAY  */
+    IIMAGE1DARRAY = 485,           /* IIMAGE1DARRAY  */
+    UIMAGE1DARRAY = 486,           /* UIMAGE1DARRAY  */
+    IMAGE2DARRAY = 487,            /* IMAGE2DARRAY  */
+    IIMAGE2DARRAY = 488,           /* IIMAGE2DARRAY  */
+    UIMAGE2DARRAY = 489,           /* UIMAGE2DARRAY  */
+    IMAGECUBEARRAY = 490,          /* IMAGECUBEARRAY  */
+    IIMAGECUBEARRAY = 491,         /* IIMAGECUBEARRAY  */
+    UIMAGECUBEARRAY = 492,         /* UIMAGECUBEARRAY  */
+    IMAGE2DMS = 493,               /* IMAGE2DMS  */
+    IIMAGE2DMS = 494,              /* IIMAGE2DMS  */
+    UIMAGE2DMS = 495,              /* UIMAGE2DMS  */
+    IMAGE2DMSARRAY = 496,          /* IMAGE2DMSARRAY  */
+    IIMAGE2DMSARRAY = 497,         /* IIMAGE2DMSARRAY  */
+    UIMAGE2DMSARRAY = 498,         /* UIMAGE2DMSARRAY  */
+    F16IMAGE1D = 499,              /* F16IMAGE1D  */
+    F16IMAGE2D = 500,              /* F16IMAGE2D  */
+    F16IMAGE3D = 501,              /* F16IMAGE3D  */
+    F16IMAGE2DRECT = 502,          /* F16IMAGE2DRECT  */
+    F16IMAGECUBE = 503,            /* F16IMAGECUBE  */
+    F16IMAGE1DARRAY = 504,         /* F16IMAGE1DARRAY  */
+    F16IMAGE2DARRAY = 505,         /* F16IMAGE2DARRAY  */
+    F16IMAGECUBEARRAY = 506,       /* F16IMAGECUBEARRAY  */
+    F16IMAGEBUFFER = 507,          /* F16IMAGEBUFFER  */
+    F16IMAGE2DMS = 508,            /* F16IMAGE2DMS  */
+    F16IMAGE2DMSARRAY = 509,       /* F16IMAGE2DMSARRAY  */
+    I64IMAGE1D = 510,              /* I64IMAGE1D  */
+    U64IMAGE1D = 511,              /* U64IMAGE1D  */
+    I64IMAGE2D = 512,              /* I64IMAGE2D  */
+    U64IMAGE2D = 513,              /* U64IMAGE2D  */
+    I64IMAGE3D = 514,              /* I64IMAGE3D  */
+    U64IMAGE3D = 515,              /* U64IMAGE3D  */
+    I64IMAGE2DRECT = 516,          /* I64IMAGE2DRECT  */
+    U64IMAGE2DRECT = 517,          /* U64IMAGE2DRECT  */
+    I64IMAGECUBE = 518,            /* I64IMAGECUBE  */
+    U64IMAGECUBE = 519,            /* U64IMAGECUBE  */
+    I64IMAGEBUFFER = 520,          /* I64IMAGEBUFFER  */
+    U64IMAGEBUFFER = 521,          /* U64IMAGEBUFFER  */
+    I64IMAGE1DARRAY = 522,         /* I64IMAGE1DARRAY  */
+    U64IMAGE1DARRAY = 523,         /* U64IMAGE1DARRAY  */
+    I64IMAGE2DARRAY = 524,         /* I64IMAGE2DARRAY  */
+    U64IMAGE2DARRAY = 525,         /* U64IMAGE2DARRAY  */
+    I64IMAGECUBEARRAY = 526,       /* I64IMAGECUBEARRAY  */
+    U64IMAGECUBEARRAY = 527,       /* U64IMAGECUBEARRAY  */
+    I64IMAGE2DMS = 528,            /* I64IMAGE2DMS  */
+    U64IMAGE2DMS = 529,            /* U64IMAGE2DMS  */
+    I64IMAGE2DMSARRAY = 530,       /* I64IMAGE2DMSARRAY  */
+    U64IMAGE2DMSARRAY = 531,       /* U64IMAGE2DMSARRAY  */
+    TEXTURECUBEARRAY = 532,        /* TEXTURECUBEARRAY  */
+    ITEXTURECUBEARRAY = 533,       /* ITEXTURECUBEARRAY  */
+    UTEXTURECUBEARRAY = 534,       /* UTEXTURECUBEARRAY  */
+    TEXTURE1D = 535,               /* TEXTURE1D  */
+    ITEXTURE1D = 536,              /* ITEXTURE1D  */
+    UTEXTURE1D = 537,              /* UTEXTURE1D  */
+    TEXTURE1DARRAY = 538,          /* TEXTURE1DARRAY  */
+    ITEXTURE1DARRAY = 539,         /* ITEXTURE1DARRAY  */
+    UTEXTURE1DARRAY = 540,         /* UTEXTURE1DARRAY  */
+    TEXTURE2DRECT = 541,           /* TEXTURE2DRECT  */
+    ITEXTURE2DRECT = 542,          /* ITEXTURE2DRECT  */
+    UTEXTURE2DRECT = 543,          /* UTEXTURE2DRECT  */
+    TEXTUREBUFFER = 544,           /* TEXTUREBUFFER  */
+    ITEXTUREBUFFER = 545,          /* ITEXTUREBUFFER  */
+    UTEXTUREBUFFER = 546,          /* UTEXTUREBUFFER  */
+    TEXTURE2DMS = 547,             /* TEXTURE2DMS  */
+    ITEXTURE2DMS = 548,            /* ITEXTURE2DMS  */
+    UTEXTURE2DMS = 549,            /* UTEXTURE2DMS  */
+    TEXTURE2DMSARRAY = 550,        /* TEXTURE2DMSARRAY  */
+    ITEXTURE2DMSARRAY = 551,       /* ITEXTURE2DMSARRAY  */
+    UTEXTURE2DMSARRAY = 552,       /* UTEXTURE2DMSARRAY  */
+    F16TEXTURE1D = 553,            /* F16TEXTURE1D  */
+    F16TEXTURE2D = 554,            /* F16TEXTURE2D  */
+    F16TEXTURE3D = 555,            /* F16TEXTURE3D  */
+    F16TEXTURE2DRECT = 556,        /* F16TEXTURE2DRECT  */
+    F16TEXTURECUBE = 557,          /* F16TEXTURECUBE  */
+    F16TEXTURE1DARRAY = 558,       /* F16TEXTURE1DARRAY  */
+    F16TEXTURE2DARRAY = 559,       /* F16TEXTURE2DARRAY  */
+    F16TEXTURECUBEARRAY = 560,     /* F16TEXTURECUBEARRAY  */
+    F16TEXTUREBUFFER = 561,        /* F16TEXTUREBUFFER  */
+    F16TEXTURE2DMS = 562,          /* F16TEXTURE2DMS  */
+    F16TEXTURE2DMSARRAY = 563,     /* F16TEXTURE2DMSARRAY  */
+    SUBPASSINPUT = 564,            /* SUBPASSINPUT  */
+    SUBPASSINPUTMS = 565,          /* SUBPASSINPUTMS  */
+    ISUBPASSINPUT = 566,           /* ISUBPASSINPUT  */
+    ISUBPASSINPUTMS = 567,         /* ISUBPASSINPUTMS  */
+    USUBPASSINPUT = 568,           /* USUBPASSINPUT  */
+    USUBPASSINPUTMS = 569,         /* USUBPASSINPUTMS  */
+    F16SUBPASSINPUT = 570,         /* F16SUBPASSINPUT  */
+    F16SUBPASSINPUTMS = 571,       /* F16SUBPASSINPUTMS  */
+    LEFT_OP = 572,                 /* LEFT_OP  */
+    RIGHT_OP = 573,                /* RIGHT_OP  */
+    INC_OP = 574,                  /* INC_OP  */
+    DEC_OP = 575,                  /* DEC_OP  */
+    LE_OP = 576,                   /* LE_OP  */
+    GE_OP = 577,                   /* GE_OP  */
+    EQ_OP = 578,                   /* EQ_OP  */
+    NE_OP = 579,                   /* NE_OP  */
+    AND_OP = 580,                  /* AND_OP  */
+    OR_OP = 581,                   /* OR_OP  */
+    XOR_OP = 582,                  /* XOR_OP  */
+    MUL_ASSIGN = 583,              /* MUL_ASSIGN  */
+    DIV_ASSIGN = 584,              /* DIV_ASSIGN  */
+    ADD_ASSIGN = 585,              /* ADD_ASSIGN  */
+    MOD_ASSIGN = 586,              /* MOD_ASSIGN  */
+    LEFT_ASSIGN = 587,             /* LEFT_ASSIGN  */
+    RIGHT_ASSIGN = 588,            /* RIGHT_ASSIGN  */
+    AND_ASSIGN = 589,              /* AND_ASSIGN  */
+    XOR_ASSIGN = 590,              /* XOR_ASSIGN  */
+    OR_ASSIGN = 591,               /* OR_ASSIGN  */
+    SUB_ASSIGN = 592,              /* SUB_ASSIGN  */
+    STRING_LITERAL = 593,          /* STRING_LITERAL  */
+    LEFT_PAREN = 594,              /* LEFT_PAREN  */
+    RIGHT_PAREN = 595,             /* RIGHT_PAREN  */
+    LEFT_BRACKET = 596,            /* LEFT_BRACKET  */
+    RIGHT_BRACKET = 597,           /* RIGHT_BRACKET  */
+    LEFT_BRACE = 598,              /* LEFT_BRACE  */
+    RIGHT_BRACE = 599,             /* RIGHT_BRACE  */
+    DOT = 600,                     /* DOT  */
+    COMMA = 601,                   /* COMMA  */
+    COLON = 602,                   /* COLON  */
+    EQUAL = 603,                   /* EQUAL  */
+    SEMICOLON = 604,               /* SEMICOLON  */
+    BANG = 605,                    /* BANG  */
+    DASH = 606,                    /* DASH  */
+    TILDE = 607,                   /* TILDE  */
+    PLUS = 608,                    /* PLUS  */
+    STAR = 609,                    /* STAR  */
+    SLASH = 610,                   /* SLASH  */
+    PERCENT = 611,                 /* PERCENT  */
+    LEFT_ANGLE = 612,              /* LEFT_ANGLE  */
+    RIGHT_ANGLE = 613,             /* RIGHT_ANGLE  */
+    VERTICAL_BAR = 614,            /* VERTICAL_BAR  */
+    CARET = 615,                   /* CARET  */
+    AMPERSAND = 616,               /* AMPERSAND  */
+    QUESTION = 617,                /* QUESTION  */
+    INVARIANT = 618,               /* INVARIANT  */
+    HIGH_PRECISION = 619,          /* HIGH_PRECISION  */
+    MEDIUM_PRECISION = 620,        /* MEDIUM_PRECISION  */
+    LOW_PRECISION = 621,           /* LOW_PRECISION  */
+    PRECISION = 622,               /* PRECISION  */
+    PACKED = 623,                  /* PACKED  */
+    RESOURCE = 624,                /* RESOURCE  */
+    SUPERP = 625,                  /* SUPERP  */
+    FLOATCONSTANT = 626,           /* FLOATCONSTANT  */
+    INTCONSTANT = 627,             /* INTCONSTANT  */
+    UINTCONSTANT = 628,            /* UINTCONSTANT  */
+    BOOLCONSTANT = 629,            /* BOOLCONSTANT  */
+    IDENTIFIER = 630,              /* IDENTIFIER  */
+    TYPE_NAME = 631,               /* TYPE_NAME  */
+    CENTROID = 632,                /* CENTROID  */
+    IN = 633,                      /* IN  */
+    OUT = 634,                     /* OUT  */
+    INOUT = 635,                   /* INOUT  */
+    STRUCT = 636,                  /* STRUCT  */
+    VOID = 637,                    /* VOID  */
+    WHILE = 638,                   /* WHILE  */
+    BREAK = 639,                   /* BREAK  */
+    CONTINUE = 640,                /* CONTINUE  */
+    DO = 641,                      /* DO  */
+    ELSE = 642,                    /* ELSE  */
+    FOR = 643,                     /* FOR  */
+    IF = 644,                      /* IF  */
+    DISCARD = 645,                 /* DISCARD  */
+    RETURN = 646,                  /* RETURN  */
+    SWITCH = 647,                  /* SWITCH  */
+    CASE = 648,                    /* CASE  */
+    DEFAULT = 649,                 /* DEFAULT  */
+    TERMINATE_INVOCATION = 650,    /* TERMINATE_INVOCATION  */
+    TERMINATE_RAY = 651,           /* TERMINATE_RAY  */
+    IGNORE_INTERSECTION = 652,     /* IGNORE_INTERSECTION  */
+    UNIFORM = 653,                 /* UNIFORM  */
+    SHARED = 654,                  /* SHARED  */
+    BUFFER = 655,                  /* BUFFER  */
+    FLAT = 656,                    /* FLAT  */
+    SMOOTH = 657,                  /* SMOOTH  */
+    LAYOUT = 658,                  /* LAYOUT  */
+    DOUBLECONSTANT = 659,          /* DOUBLECONSTANT  */
+    INT16CONSTANT = 660,           /* INT16CONSTANT  */
+    UINT16CONSTANT = 661,          /* UINT16CONSTANT  */
+    FLOAT16CONSTANT = 662,         /* FLOAT16CONSTANT  */
+    INT32CONSTANT = 663,           /* INT32CONSTANT  */
+    UINT32CONSTANT = 664,          /* UINT32CONSTANT  */
+    INT64CONSTANT = 665,           /* INT64CONSTANT  */
+    UINT64CONSTANT = 666,          /* UINT64CONSTANT  */
+    SUBROUTINE = 667,              /* SUBROUTINE  */
+    DEMOTE = 668,                  /* DEMOTE  */
+    PAYLOADNV = 669,               /* PAYLOADNV  */
+    PAYLOADINNV = 670,             /* PAYLOADINNV  */
+    HITATTRNV = 671,               /* HITATTRNV  */
+    CALLDATANV = 672,              /* CALLDATANV  */
+    CALLDATAINNV = 673,            /* CALLDATAINNV  */
+    PAYLOADEXT = 674,              /* PAYLOADEXT  */
+    PAYLOADINEXT = 675,            /* PAYLOADINEXT  */
+    HITATTREXT = 676,              /* HITATTREXT  */
+    CALLDATAEXT = 677,             /* CALLDATAEXT  */
+    CALLDATAINEXT = 678,           /* CALLDATAINEXT  */
+    PATCH = 679,                   /* PATCH  */
+    SAMPLE = 680,                  /* SAMPLE  */
+    NONUNIFORM = 681,              /* NONUNIFORM  */
+    COHERENT = 682,                /* COHERENT  */
+    VOLATILE = 683,                /* VOLATILE  */
+    RESTRICT = 684,                /* RESTRICT  */
+    READONLY = 685,                /* READONLY  */
+    WRITEONLY = 686,               /* WRITEONLY  */
+    DEVICECOHERENT = 687,          /* DEVICECOHERENT  */
+    QUEUEFAMILYCOHERENT = 688,     /* QUEUEFAMILYCOHERENT  */
+    WORKGROUPCOHERENT = 689,       /* WORKGROUPCOHERENT  */
+    SUBGROUPCOHERENT = 690,        /* SUBGROUPCOHERENT  */
+    NONPRIVATE = 691,              /* NONPRIVATE  */
+    SHADERCALLCOHERENT = 692,      /* SHADERCALLCOHERENT  */
+    NOPERSPECTIVE = 693,           /* NOPERSPECTIVE  */
+    EXPLICITINTERPAMD = 694,       /* EXPLICITINTERPAMD  */
+    PERVERTEXNV = 695,             /* PERVERTEXNV  */
+    PERPRIMITIVENV = 696,          /* PERPRIMITIVENV  */
+    PERVIEWNV = 697,               /* PERVIEWNV  */
+    PERTASKNV = 698,               /* PERTASKNV  */
+    PRECISE = 699                  /* PRECISE  */
   };
+  typedef enum yytokentype yytoken_kind_t;
 #endif
 
 /* Value type.  */
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
-
 union YYSTYPE
 {
-#line 97 "MachineIndependent/glslang.y" /* yacc.c:1909  */
+#line 97 "MachineIndependent/glslang.y"
 
     struct {
         glslang::TSourceLoc loc;
@@ -506,9 +540,9 @@
         glslang::TArraySizes* typeParameters;
     } interm;
 
-#line 510 "MachineIndependent/glslang_tab.cpp.h" /* yacc.c:1909  */
-};
+#line 544 "MachineIndependent/glslang_tab.cpp.h"
 
+};
 typedef union YYSTYPE YYSTYPE;
 # define YYSTYPE_IS_TRIVIAL 1
 # define YYSTYPE_IS_DECLARED 1
diff --git a/glslang/MachineIndependent/intermOut.cpp b/glslang/MachineIndependent/intermOut.cpp
index f23a705..5ce3e47 100644
--- a/glslang/MachineIndependent/intermOut.cpp
+++ b/glslang/MachineIndependent/intermOut.cpp
@@ -438,6 +438,9 @@
     case EOpConvUint64ToPtr:  out.debug << "Convert uint64_t to pointer";   break;
     case EOpConvPtrToUint64:  out.debug << "Convert pointer to uint64_t";   break;
 
+    case EOpConvUint64ToAccStruct: out.debug << "Convert uint64_t to acceleration structure"; break;
+    case EOpConvUvec2ToAccStruct:  out.debug << "Convert uvec2 to acceleration strucuture "; break;
+
     case EOpRadians:        out.debug << "radians";              break;
     case EOpDegrees:        out.debug << "degrees";              break;
     case EOpSin:            out.debug << "sine";                 break;
@@ -829,6 +832,7 @@
     case EOpConstructTextureSampler: out.debug << "Construct combined texture-sampler"; break;
     case EOpConstructReference:  out.debug << "Construct reference";  break;
     case EOpConstructCooperativeMatrix:  out.debug << "Construct cooperative matrix";  break;
+    case EOpConstructAccStruct: out.debug << "Construct acceleration structure"; break;
 
     case EOpLessThan:         out.debug << "Compare Less Than";             break;
     case EOpGreaterThan:      out.debug << "Compare Greater Than";          break;
@@ -1079,11 +1083,15 @@
     case EOpSubpassLoad:   out.debug << "subpassLoad";   break;
     case EOpSubpassLoadMS: out.debug << "subpassLoadMS"; break;
 
-    case EOpTrace:                            out.debug << "traceNV"; break;
+    case EOpTraceNV:                          out.debug << "traceNV"; break;
+    case EOpTraceKHR:                         out.debug << "traceRayKHR"; break;
     case EOpReportIntersection:               out.debug << "reportIntersectionNV"; break;
-    case EOpIgnoreIntersection:               out.debug << "ignoreIntersectionNV"; break;
-    case EOpTerminateRay:                     out.debug << "terminateRayNV"; break;
-    case EOpExecuteCallable:                  out.debug << "executeCallableNV"; break;
+    case EOpIgnoreIntersectionNV:             out.debug << "ignoreIntersectionNV"; break;
+    case EOpIgnoreIntersectionKHR:            out.debug << "ignoreIntersectionKHR"; break;
+    case EOpTerminateRayNV:                   out.debug << "terminateRayNV"; break;
+    case EOpTerminateRayKHR:                  out.debug << "terminateRayKHR"; break;
+    case EOpExecuteCallableNV:                out.debug << "executeCallableNV"; break;
+    case EOpExecuteCallableKHR:               out.debug << "executeCallableKHR"; break;
     case EOpWritePackedPrimitiveIndices4x8NV: out.debug << "writePackedPrimitiveIndices4x8NV"; break;
 
     case EOpRayQueryInitialize:                                            out.debug << "rayQueryInitializeEXT"; break;
@@ -1321,6 +1329,9 @@
                 out.debug << buf << "\n";
             }
             break;
+        case EbtString:
+            out.debug << "\"" << constUnion[i].getSConst()->c_str() << "\"\n";
+            break;
         default:
             out.info.message(EPrefixInternalError, "Unknown constant", node->getLoc());
             break;
@@ -1406,14 +1417,17 @@
     OutputTreeText(out, node, depth);
 
     switch (node->getFlowOp()) {
-    case EOpKill:      out.debug << "Branch: Kill";           break;
-    case EOpBreak:     out.debug << "Branch: Break";          break;
-    case EOpContinue:  out.debug << "Branch: Continue";       break;
-    case EOpReturn:    out.debug << "Branch: Return";         break;
-    case EOpCase:      out.debug << "case: ";                 break;
-    case EOpDemote:    out.debug << "Demote";                 break;
-    case EOpDefault:   out.debug << "default: ";              break;
-    default:               out.debug << "Branch: Unknown Branch"; break;
+    case EOpKill:                   out.debug << "Branch: Kill";                  break;
+    case EOpTerminateInvocation:    out.debug << "Branch: TerminateInvocation";   break;
+    case EOpIgnoreIntersectionKHR:  out.debug << "Branch: IgnoreIntersectionKHR"; break;
+    case EOpTerminateRayKHR:        out.debug << "Branch: TerminateRayKHR";       break;
+    case EOpBreak:                  out.debug << "Branch: Break";                 break;
+    case EOpContinue:               out.debug << "Branch: Continue";              break;
+    case EOpReturn:                 out.debug << "Branch: Return";                break;
+    case EOpCase:                   out.debug << "case: ";                        break;
+    case EOpDemote:                 out.debug << "Demote";                        break;
+    case EOpDefault:                out.debug << "default: ";                     break;
+    default:                        out.debug << "Branch: Unknown Branch";        break;
     }
 
     if (node->getExpression()) {
diff --git a/glslang/MachineIndependent/iomapper.cpp b/glslang/MachineIndependent/iomapper.cpp
index 905cf65..c42e74f 100644
--- a/glslang/MachineIndependent/iomapper.cpp
+++ b/glslang/MachineIndependent/iomapper.cpp
@@ -37,9 +37,11 @@
 
 #include "../Include/Common.h"
 #include "../Include/InfoSink.h"
+#include "../Include/Types.h"
 
 #include "gl_types.h"
 #include "iomapper.h"
+#include "SymbolTable.h"
 
 //
 // Map IO bindings.
@@ -82,17 +84,17 @@
         // 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
         else if (base->getQualifier().storage == EvqGlobal)
-            addGlobalReference(base->getName());
+            addGlobalReference(base->getAccessName());
 
         if (target) {
             TVarEntryInfo ent = {base->getId(), base, ! traverseAll};
             ent.stage = intermediate.getStage();
             TVarLiveMap::iterator at = target->find(
-                ent.symbol->getName()); // std::lower_bound(target->begin(), target->end(), ent, TVarEntryInfo::TOrderById());
+                ent.symbol->getAccessName()); // std::lower_bound(target->begin(), target->end(), ent, TVarEntryInfo::TOrderById());
             if (at != target->end() && at->second.id == ent.id)
                 at->second.live = at->second.live || ! traverseAll; // update live state
             else
-                (*target)[ent.symbol->getName()] = ent;
+                (*target)[ent.symbol->getAccessName()] = ent;
         }
     }
 
@@ -125,7 +127,8 @@
             return;
 
         TVarEntryInfo ent = { base->getId() };
-        TVarLiveMap::const_iterator at = source->find(base->getName());
+        // Fix a defect, when block has no instance name, we need to find its block name
+        TVarLiveMap::const_iterator at = source->find(base->getAccessName());
         if (at == source->end())
             return;
 
@@ -181,7 +184,7 @@
 
     inline void operator()(std::pair<const TString, TVarEntryInfo>& entKey)
     {
-        resolver.notifyInOut(stage, entKey.second);
+        resolver.notifyInOut(entKey.second.stage, entKey.second);
     }
 
 private:
@@ -189,12 +192,13 @@
 };
 
 struct TResolverUniformAdaptor {
-    TResolverUniformAdaptor(EShLanguage s, TIoMapResolver& r, TInfoSink& i, bool& e)
+    TResolverUniformAdaptor(EShLanguage s, TIoMapResolver& r, TVarLiveMap* uniform[EShLangCount], TInfoSink& i, bool& e)
       : stage(s)
       , resolver(r)
       , infoSink(i)
       , error(e)
     {
+        memcpy(uniformVarMap, uniform, EShLangCount * (sizeof(TVarLiveMap*)));
     }
 
     inline void operator()(std::pair<const TString, TVarEntryInfo>& entKey) {
@@ -206,9 +210,9 @@
         ent.newIndex = -1;
         const bool isValid = resolver.validateBinding(stage, ent);
         if (isValid) {
-            resolver.resolveBinding(stage, ent);
-            resolver.resolveSet(stage, ent);
-            resolver.resolveUniformLocation(stage, ent);
+            resolver.resolveBinding(ent.stage, ent);
+            resolver.resolveSet(ent.stage, ent);
+            resolver.resolveUniformLocation(ent.stage, ent);
 
             if (ent.newBinding != -1) {
                 if (ent.newBinding >= int(TQualifier::layoutBindingEnd)) {
@@ -217,6 +221,17 @@
                     infoSink.info.message(EPrefixInternalError, err.c_str());
                     error = true;
                 }
+
+                if (ent.symbol->getQualifier().hasBinding()) {
+                    for (uint32_t idx = EShLangVertex; idx < EShLangCount; ++idx) {
+                        if (idx == ent.stage || uniformVarMap[idx] == nullptr)
+                            continue;
+                        auto entKey2 = uniformVarMap[idx]->find(entKey.first);
+                        if (entKey2 != uniformVarMap[idx]->end()) {
+                            entKey2->second.newBinding = ent.newBinding;
+                        }
+                    }
+                }
             }
             if (ent.newSet != -1) {
                 if (ent.newSet >= int(TQualifier::layoutSetEnd)) {
@@ -225,6 +240,16 @@
                     infoSink.info.message(EPrefixInternalError, err.c_str());
                     error = true;
                 }
+                if (ent.symbol->getQualifier().hasSet()) {
+                    for (uint32_t idx = EShLangVertex; idx < EShLangCount; ++idx) {
+                        if ((idx == stage) || (uniformVarMap[idx] == nullptr))
+                            continue;
+                        auto entKey2 = uniformVarMap[idx]->find(entKey.first);
+                        if (entKey2 != uniformVarMap[idx]->end()) {
+                            entKey2->second.newSet = ent.newSet;
+                        }
+                    }
+                }
             }
         } else {
             TString errorMsg = "Invalid binding: " + entKey.first;
@@ -239,7 +264,7 @@
     TIoMapResolver& resolver;
     TInfoSink&      infoSink;
     bool&           error;
-
+    TVarLiveMap*    uniformVarMap[EShLangCount];
 private:
     TResolverUniformAdaptor& operator=(TResolverUniformAdaptor&) = delete;
 };
@@ -261,7 +286,7 @@
         ent.newBinding = -1;
         ent.newSet = -1;
         ent.newIndex = -1;
-        const bool isValid = resolver.validateInOut(stage, ent);
+        const bool isValid = resolver.validateInOut(ent.stage, ent);
         if (isValid) {
             resolver.resolveInOutLocation(stage, ent);
             resolver.resolveInOutComponent(stage, ent);
@@ -296,17 +321,116 @@
 struct TSymbolValidater
 {
     TSymbolValidater(TIoMapResolver& r, TInfoSink& i, TVarLiveMap* in[EShLangCount], TVarLiveMap* out[EShLangCount],
-                     TVarLiveMap* uniform[EShLangCount], bool& hadError)
+                     TVarLiveMap* uniform[EShLangCount], bool& hadError, EProfile profile, int version)
         : preStage(EShLangCount)
         , currentStage(EShLangCount)
         , nextStage(EShLangCount)
         , resolver(r)
         , infoSink(i)
         , hadError(hadError)
+        , profile(profile)
+        , version(version)
     {
         memcpy(inVarMaps, in, EShLangCount * (sizeof(TVarLiveMap*)));
         memcpy(outVarMaps, out, EShLangCount * (sizeof(TVarLiveMap*)));
         memcpy(uniformVarMap, uniform, EShLangCount * (sizeof(TVarLiveMap*)));
+
+        std::map<TString, TString> anonymousMemberMap;
+        std::vector<TRange> usedUniformLocation;
+        std::vector<TString> usedUniformName;
+        usedUniformLocation.clear();
+        usedUniformName.clear();
+        for (int i = 0; i < EShLangCount; i++) {
+            if (uniformVarMap[i]) {
+                for (auto uniformVar : *uniformVarMap[i])
+                {
+                    TIntermSymbol* pSymbol = uniformVar.second.symbol;
+                    TQualifier qualifier = uniformVar.second.symbol->getQualifier();
+                    TString symbolName = pSymbol->getAccessName();
+
+                    // All the uniform needs multi-stage location check (block/default)
+                    int uniformLocation = qualifier.layoutLocation;
+
+                    if (uniformLocation != TQualifier::layoutLocationEnd) {
+                        // Total size of current uniform, could be block, struct or other types.
+                        int size = TIntermediate::computeTypeUniformLocationSize(pSymbol->getType());
+
+                        TRange locationRange(uniformLocation, uniformLocation + size - 1);
+
+                        // Combine location and component ranges
+                        int overlapLocation = -1;
+                        bool diffLocation = false;
+
+                        // Check for collisions, except for vertex inputs on desktop targeting OpenGL
+                        overlapLocation = checkLocationOverlap(locationRange, usedUniformLocation, symbolName, usedUniformName, diffLocation);
+
+                        // Overlap locations of uniforms, regardless of components (multi stages)
+                        if (overlapLocation == -1) {
+                            usedUniformLocation.push_back(locationRange);
+                            usedUniformName.push_back(symbolName);
+                        }
+                        else if (overlapLocation >= 0) {
+                            if (diffLocation == true) {
+                                TString err = ("Uniform location should be equal for same uniforms: " +std::to_string(overlapLocation)).c_str();
+                                infoSink.info.message(EPrefixInternalError, err.c_str());
+                                hadError = true;
+                                break;
+                            }
+                            else {
+                                TString err = ("Uniform location overlaps across stages: " + std::to_string(overlapLocation)).c_str();
+                                infoSink.info.message(EPrefixInternalError, err.c_str());
+                                hadError = true;
+                                break;
+                            }
+                        }
+                    }
+
+                    if ((uniformVar.second.symbol->getBasicType() == EbtBlock) &&
+                        IsAnonymous(uniformVar.second.symbol->getName()))
+                    {
+                        auto blockType = uniformVar.second.symbol->getType().getStruct();
+                        for (size_t memberIdx = 0; memberIdx < blockType->size(); ++memberIdx) {
+                            auto memberName = (*blockType)[memberIdx].type->getFieldName();
+                            if (anonymousMemberMap.find(memberName) != anonymousMemberMap.end())
+                            {
+                                if (anonymousMemberMap[memberName] != uniformVar.second.symbol->getType().getTypeName())
+                                {
+                                    TString err = "Invalid block member name: " + memberName;
+                                    infoSink.info.message(EPrefixInternalError, err.c_str());
+                                    hadError = true;
+                                    break;
+                                }
+                            }
+                            else
+                            {
+                                anonymousMemberMap[memberName] = uniformVar.second.symbol->getType().getTypeName();
+                            }
+                        }
+                    }
+                    if (hadError)
+                        break;
+                }
+            }
+        }
+    }
+
+    // In case we need to new an intermediate, which costs too much
+    int checkLocationOverlap(const TRange& locationRange, std::vector<TRange>& usedUniformLocation, const TString symbolName, std::vector<TString>& usedUniformName, bool& diffLocation)
+    {
+        for (size_t r = 0; r < usedUniformLocation.size(); ++r) {
+            if (usedUniformName[r] == symbolName) {
+                diffLocation = true;
+                return (usedUniformLocation[r].start == locationRange.start &&
+                        usedUniformLocation[r].last == locationRange.last)
+                       ? -2 : std::max(locationRange.start, usedUniformLocation[r].start);
+            }
+            if (locationRange.overlap(usedUniformLocation[r])) {
+                // there is a collision; pick one
+                return std::max(locationRange.start, usedUniformLocation[r].start);
+            }
+        }
+
+        return -1; // no collision
     }
 
     inline void operator()(std::pair<const TString, TVarEntryInfo>& entKey) {
@@ -339,11 +463,24 @@
             // validate stage in;
             if (preStage == EShLangCount)
                 return;
-            if (name == "gl_PerVertex")
+            if (TSymbolTable::isBuiltInSymbol(base->getId()))
                 return;
             if (outVarMaps[preStage] != nullptr) {
                 auto ent2 = outVarMaps[preStage]->find(name);
+                uint32_t location = base->getType().getQualifier().layoutLocation;
+                if (ent2 == outVarMaps[preStage]->end() &&
+                    location != glslang::TQualifier::layoutLocationEnd) {
+                    for (auto var = outVarMaps[preStage]->begin(); var != ent2; var++) {
+                        if (var->second.symbol->getType().getQualifier().layoutLocation == location) {
+                            ent2 = var;
+                            break;
+                        }
+                    }
+                }
                 if (ent2 != outVarMaps[preStage]->end()) {
+                    auto& type1 = base->getType();
+                    auto& type2 = ent2->second.symbol->getType();
+                    hadError = hadError || typeCheck(&type1, &type2, name.c_str(), false);
                     if (ent2->second.symbol->getType().getQualifier().isArrayedIo(preStage)) {
                         TType subType(ent2->second.symbol->getType(), 0);
                         subType.appendMangledName(mangleName2);
@@ -351,23 +488,49 @@
                     else {
                         ent2->second.symbol->getType().appendMangledName(mangleName2);
                     }
-                    if (mangleName1 == mangleName2)
+
+                    if (mangleName1 == mangleName2) {
+                        // For ES 3.0 only, other versions have no such restrictions
+                        // According to ES 3.0 spec: The type and presence of the interpolation qualifiers and
+                        // storage qualifiers  of variables with the same name declared in all linked shaders must
+                        // match, otherwise the link command will fail.
+                        if (profile == EEsProfile && version == 300) {
+                            // Don't need to check smooth qualifier, as it uses the default interpolation mode
+                            if (ent1.stage == EShLangFragment && type1.isBuiltIn() == false) {
+                                if (type1.getQualifier().flat != type2.getQualifier().flat ||
+                                    type1.getQualifier().nopersp != type2.getQualifier().nopersp) {
+                                    TString err = "Interpolation qualifier mismatch : " + entKey.first;
+                                    infoSink.info.message(EPrefixInternalError, err.c_str());
+                                    hadError = true;
+                                }
+                            }
+                        }
                         return;
+                    }
                     else {
                         TString err = "Invalid In/Out variable type : " + entKey.first;
                         infoSink.info.message(EPrefixInternalError, err.c_str());
                         hadError = true;
                     }
                 }
+                else if (!base->getType().isBuiltIn()) {
+                    // According to spec: A link error is generated if any statically referenced input variable
+                    // or block does not have a matching output
+                    if (profile == EEsProfile && ent1.live) {
+                        hadError = true;
+                        TString errorStr = name + ": not been declare as a output variable in pre shader stage.";
+                        infoSink.info.message(EPrefixError, errorStr.c_str());
+                    }
+                }
                 return;
             }
         } else if (base->getQualifier().storage == EvqVaryingOut) {
             // validate stage out;
             if (nextStage == EShLangCount)
                 return;
-            if (name == "gl_PerVertex")
+            if (TSymbolTable::isBuiltInSymbol(base->getId()))
                 return;
-            if (outVarMaps[nextStage] != nullptr) {
+            if (inVarMaps[nextStage] != nullptr) {
                 auto ent2 = inVarMaps[nextStage]->find(name);
                 if (ent2 != inVarMaps[nextStage]->end()) {
                     if (ent2->second.symbol->getType().getQualifier().isArrayedIo(nextStage)) {
@@ -400,11 +563,50 @@
                             hadError = true;
                         }
                         mangleName2.clear();
+
+                        // validate instance name of blocks
+                        if (hadError == false &&
+                            base->getType().getBasicType() == EbtBlock &&
+                            IsAnonymous(base->getName()) != IsAnonymous(ent2->second.symbol->getName())) {
+                            TString err = "Matched uniform block names must also either all be lacking "
+                                          "an instance name or all having an instance name: " + entKey.first;
+                            infoSink.info.message(EPrefixInternalError, err.c_str());
+                            hadError = true;
+                        }
+
+                        // validate uniform block member qualifier and member names
+                        auto& type1 = base->getType();
+                        auto& type2 = ent2->second.symbol->getType();
+                        if (hadError == false && base->getType().getBasicType() == EbtBlock) {
+                            hadError = hadError || typeCheck(&type1, &type2, name.c_str(), true);
+                        }
+                        else {
+                            hadError = hadError || typeCheck(&type1, &type2, name.c_str(), false);
+                        }
+                    }
+                    else if (base->getBasicType() == EbtBlock)
+                    {
+                        if (IsAnonymous(base->getName()))
+                        {
+                            // The name of anonymous block member can't same with default uniform variable.
+                            auto blockType1 = base->getType().getStruct();
+                            for (size_t memberIdx = 0; memberIdx < blockType1->size(); ++memberIdx) {
+                                auto memberName = (*blockType1)[memberIdx].type->getFieldName();
+                                if (uniformVarMap[i]->find(memberName) != uniformVarMap[i]->end())
+                                {
+                                    TString err = "Invalid Uniform variable name : " + memberName;
+                                    infoSink.info.message(EPrefixInternalError, err.c_str());
+                                    hadError = true;
+                                    break;
+                                }
+                            }
+                        }
                     }
                 }
             }
         }
     }
+
     TVarLiveMap *inVarMaps[EShLangCount], *outVarMaps[EShLangCount], *uniformVarMap[EShLangCount];
     // Use for mark pre stage, to get more interface symbol information.
     EShLanguage preStage, currentStage, nextStage;
@@ -412,9 +614,118 @@
     TIoMapResolver& resolver;
     TInfoSink& infoSink;
     bool& hadError;
+    EProfile profile;
+    int version;
 
 private:
     TSymbolValidater& operator=(TSymbolValidater&) = delete;
+
+    bool qualifierCheck(const TType* const type1, const TType* const type2, const std::string& name, bool isBlock)
+    {
+        bool hasError = false;
+        const TQualifier& qualifier1 = type1->getQualifier();
+        const TQualifier& qualifier2 = type2->getQualifier();
+
+        if (((isBlock == false) &&
+            (type1->getQualifier().storage == EvqUniform && type2->getQualifier().storage == EvqUniform)) ||
+            (type1->getQualifier().storage == EvqGlobal && type2->getQualifier().storage == EvqGlobal)) {
+            if (qualifier1.precision != qualifier2.precision) {
+                hasError = true;
+                std::string errorStr = name + ": have precision conflict cross stage.";
+                infoSink.info.message(EPrefixError, errorStr.c_str());
+            }
+            if (qualifier1.hasFormat() && qualifier2.hasFormat()) {
+                if (qualifier1.layoutFormat != qualifier2.layoutFormat) {
+                    hasError = true;
+                    std::string errorStr = name + ": have layout format conflict cross stage.";
+                    infoSink.info.message(EPrefixError, errorStr.c_str());
+                }
+
+            }
+        }
+
+        if (isBlock == true) {
+            if (qualifier1.layoutPacking != qualifier2.layoutPacking) {
+                hasError = true;
+                std::string errorStr = name + ": have layoutPacking conflict cross stage.";
+                infoSink.info.message(EPrefixError, errorStr.c_str());
+            }
+            if (qualifier1.layoutMatrix != qualifier2.layoutMatrix) {
+                hasError = true;
+                std::string errorStr = name + ": have layoutMatrix conflict cross stage.";
+                infoSink.info.message(EPrefixError, errorStr.c_str());
+            }
+            if (qualifier1.layoutOffset != qualifier2.layoutOffset) {
+                hasError = true;
+                std::string errorStr = name + ": have layoutOffset conflict cross stage.";
+                infoSink.info.message(EPrefixError, errorStr.c_str());
+            }
+            if (qualifier1.layoutAlign != qualifier2.layoutAlign) {
+                hasError = true;
+                std::string errorStr = name + ": have layoutAlign conflict cross stage.";
+                infoSink.info.message(EPrefixError, errorStr.c_str());
+            }
+        }
+
+        return hasError;
+    }
+
+    bool typeCheck(const TType* const type1, const TType* const type2, const std::string& name, bool isBlock)
+    {
+        bool hasError = false;
+        if (!(type1->isStruct() && type2->isStruct())) {
+            hasError = hasError || qualifierCheck(type1, type2, name, isBlock);
+        }
+        else {
+            if (type1->getBasicType() == EbtBlock && type2->getBasicType() == EbtBlock)
+                isBlock = true;
+            const TTypeList* typeList1 = type1->getStruct();
+            const TTypeList* typeList2 = type2->getStruct();
+
+            std::string newName = name;
+            size_t memberCount = typeList1->size();
+            size_t index2 = 0;
+            for (size_t index = 0; index < memberCount; index++, index2++) {
+                // Skip inactive member
+                if (typeList1->at(index).type->getBasicType() == EbtVoid)
+                    continue;
+                while (index2 < typeList2->size() && typeList2->at(index2).type->getBasicType() == EbtVoid) {
+                    ++index2;
+                }
+
+                // TypeList1 has more members in list
+                if (index2 == typeList2->size()) {
+                    std::string errorStr = name + ": struct mismatch.";
+                    infoSink.info.message(EPrefixError, errorStr.c_str());
+                    hasError = true;
+                    break;
+                }
+
+                if (typeList1->at(index).type->getFieldName() != typeList2->at(index2).type->getFieldName()) {
+                    std::string errorStr = name + ": member name mismatch.";
+                    infoSink.info.message(EPrefixError, errorStr.c_str());
+                    hasError = true;
+                }
+                else {
+                    newName = typeList1->at(index).type->getFieldName().c_str();
+                }
+                hasError = hasError || typeCheck(typeList1->at(index).type, typeList2->at(index2).type, newName, isBlock);
+            }
+
+            while (index2 < typeList2->size())
+            {
+                // TypeList2 has more members
+                if (typeList2->at(index2).type->getBasicType() != EbtVoid) {
+                    std::string errorStr = name + ": struct mismatch.";
+                    infoSink.info.message(EPrefixError, errorStr.c_str());
+                    hasError = true;
+                    break;
+                }
+                ++index2;
+            }
+        }
+        return hasError;
+    }
 };
 
 struct TSlotCollector {
@@ -500,7 +811,7 @@
 
 int TDefaultIoResolverBase::resolveUniformLocation(EShLanguage /*stage*/, TVarEntryInfo& ent) {
     const TType& type = ent.symbol->getType();
-    const char* name = ent.symbol->getName().c_str();
+    const char* name =  ent.symbol->getAccessName().c_str();
     // kick out of not doing this
     if (! doAutoLocationMapping()) {
         return ent.newLocation = -1;
@@ -609,7 +920,7 @@
 
 int TDefaultGlslIoResolver::resolveInOutLocation(EShLanguage stage, TVarEntryInfo& ent) {
     const TType& type = ent.symbol->getType();
-    const TString& name = getAccessName(ent.symbol);
+    const TString& name = ent.symbol->getAccessName();
     if (currentStage != stage) {
         preStage = currentStage;
         currentStage = stage;
@@ -693,7 +1004,7 @@
 
 int TDefaultGlslIoResolver::resolveUniformLocation(EShLanguage /*stage*/, TVarEntryInfo& ent) {
     const TType& type = ent.symbol->getType();
-    const TString& name = getAccessName(ent.symbol);
+    const TString& name = ent.symbol->getAccessName();
     // kick out of not doing this
     if (! doAutoLocationMapping()) {
         return ent.newLocation = -1;
@@ -764,7 +1075,7 @@
 
 int TDefaultGlslIoResolver::resolveBinding(EShLanguage /*stage*/, TVarEntryInfo& ent) {
     const TType& type = ent.symbol->getType();
-    const TString& name = getAccessName(ent.symbol);
+    const TString& name = ent.symbol->getAccessName();
     // On OpenGL arrays of opaque types take a separate binding for each element
     int numBindings = intermediate.getSpv().openGl != 0 && type.isSizedArray() ? type.getCumulativeArraySize() : 1;
     TResourceType resource = getResourceType(type);
@@ -839,7 +1150,7 @@
 
 void TDefaultGlslIoResolver::reserverStorageSlot(TVarEntryInfo& ent, TInfoSink& infoSink) {
     const TType& type = ent.symbol->getType();
-    const TString& name = getAccessName(ent.symbol);
+    const TString& name = ent.symbol->getAccessName();
     TStorageQualifier storage = type.getQualifier().storage;
     EShLanguage stage(EShLangCount);
     switch (storage) {
@@ -899,7 +1210,7 @@
 
 void TDefaultGlslIoResolver::reserverResourceSlot(TVarEntryInfo& ent, TInfoSink& infoSink) {
     const TType& type = ent.symbol->getType();
-    const TString& name = getAccessName(ent.symbol);
+    const TString& name = ent.symbol->getAccessName();
     int resource = getResourceType(type);
     if (type.getQualifier().hasBinding()) {
         TVarSlotMap& varSlotMap = resourceSlotMap[resource];
@@ -922,13 +1233,6 @@
     }
 }
 
-const TString& TDefaultGlslIoResolver::getAccessName(const TIntermSymbol* symbol)
-{
-    return symbol->getBasicType() == EbtBlock ?
-        symbol->getType().getTypeName() :
-        symbol->getName();
-}
-
 //TDefaultGlslIoResolver end
 
 /*
@@ -1117,25 +1421,23 @@
     }
 
     // sort entries by priority. see TVarEntryInfo::TOrderByPriority for info.
-    std::for_each(inVarMap.begin(), inVarMap.end(),
-                  [&inVector](TVarLivePair p) { inVector.push_back(p); });
+    for (auto& var : inVarMap) { inVector.push_back(var); }
     std::sort(inVector.begin(), inVector.end(), [](const TVarLivePair& p1, const TVarLivePair& p2) -> bool {
         return TVarEntryInfo::TOrderByPriority()(p1.second, p2.second);
     });
-    std::for_each(outVarMap.begin(), outVarMap.end(),
-                  [&outVector](TVarLivePair p) { outVector.push_back(p); });
+    for (auto& var : outVarMap) { outVector.push_back(var); }
     std::sort(outVector.begin(), outVector.end(), [](const TVarLivePair& p1, const TVarLivePair& p2) -> bool {
         return TVarEntryInfo::TOrderByPriority()(p1.second, p2.second);
     });
-    std::for_each(uniformVarMap.begin(), uniformVarMap.end(),
-                  [&uniformVector](TVarLivePair p) { uniformVector.push_back(p); });
+    for (auto& var : uniformVarMap) { uniformVector.push_back(var); }
     std::sort(uniformVector.begin(), uniformVector.end(), [](const TVarLivePair& p1, const TVarLivePair& p2) -> bool {
         return TVarEntryInfo::TOrderByPriority()(p1.second, p2.second);
     });
     bool hadError = false;
+    TVarLiveMap* dummyUniformVarMap[EShLangCount] = {};
     TNotifyInOutAdaptor inOutNotify(stage, *resolver);
     TNotifyUniformAdaptor uniformNotify(stage, *resolver);
-    TResolverUniformAdaptor uniformResolve(stage, *resolver, infoSink, hadError);
+    TResolverUniformAdaptor uniformResolve(stage, *resolver, dummyUniformVarMap, infoSink, hadError);
     TResolverInOutAdaptor inOutResolve(stage, *resolver, infoSink, hadError);
     resolver->beginNotifications(stage);
     std::for_each(inVector.begin(), inVector.end(), inOutNotify);
@@ -1143,22 +1445,22 @@
     std::for_each(uniformVector.begin(), uniformVector.end(), uniformNotify);
     resolver->endNotifications(stage);
     resolver->beginResolve(stage);
-    std::for_each(inVector.begin(), inVector.end(), inOutResolve);
+    for (auto& var : inVector) { inOutResolve(var); }
     std::for_each(inVector.begin(), inVector.end(), [&inVarMap](TVarLivePair p) {
-        auto at = inVarMap.find(p.second.symbol->getName());
-        if (at != inVarMap.end())
+        auto at = inVarMap.find(p.second.symbol->getAccessName());
+        if (at != inVarMap.end() && p.second.id == at->second.id)
             at->second = p.second;
     });
-    std::for_each(outVector.begin(), outVector.end(), inOutResolve);
+    for (auto& var : outVector) { inOutResolve(var); }
     std::for_each(outVector.begin(), outVector.end(), [&outVarMap](TVarLivePair p) {
-        auto at = outVarMap.find(p.second.symbol->getName());
-        if (at != outVarMap.end())
+        auto at = outVarMap.find(p.second.symbol->getAccessName());
+        if (at != outVarMap.end() && p.second.id == at->second.id)
             at->second = p.second;
     });
     std::for_each(uniformVector.begin(), uniformVector.end(), uniformResolve);
     std::for_each(uniformVector.begin(), uniformVector.end(), [&uniformVarMap](TVarLivePair p) {
-        auto at = uniformVarMap.find(p.second.symbol->getName());
-        if (at != uniformVarMap.end())
+        auto at = uniformVarMap.find(p.second.symbol->getAccessName());
+        if (at != uniformVarMap.end() && p.second.id == at->second.id)
             at->second = p.second;
     });
     resolver->endResolve(stage);
@@ -1174,9 +1476,14 @@
 //
 // Returns false if the input is too malformed to do this.
 bool TGlslIoMapper::addStage(EShLanguage stage, TIntermediate& intermediate, TInfoSink& infoSink, TIoMapResolver* resolver) {
+    bool somethingToDo = !intermediate.getResourceSetBinding().empty() ||
+        intermediate.getAutoMapBindings() ||
+        intermediate.getAutoMapLocations();
 
-    bool somethingToDo = ! intermediate.getResourceSetBinding().empty() || intermediate.getAutoMapBindings() ||
-                         intermediate.getAutoMapLocations();
+    // Profile and version are use for symbol validate.
+    profile = intermediate.getProfile();
+    version = intermediate.getVersion();
+
     // Restrict the stricter condition to further check 'somethingToDo' only if 'somethingToDo' has not been set, reduce
     // unnecessary or insignificant for-loop operation after 'somethingToDo' have been true.
     for (int res = 0; (res < EResCount && !somethingToDo); ++res) {
@@ -1236,31 +1543,30 @@
     resolver->endResolve(EShLangCount);
     if (!hadError) {
         //Resolve uniform location, ubo/ssbo/opaque bindings across stages
-        TResolverUniformAdaptor uniformResolve(EShLangCount, *resolver, infoSink, hadError);
+        TResolverUniformAdaptor uniformResolve(EShLangCount, *resolver, uniformVarMap, infoSink, hadError);
         TResolverInOutAdaptor inOutResolve(EShLangCount, *resolver, infoSink, hadError);
-        TSymbolValidater symbolValidater(*resolver, infoSink, inVarMaps, outVarMaps, uniformVarMap, hadError);
+        TSymbolValidater symbolValidater(*resolver, infoSink, inVarMaps,
+                                         outVarMaps, uniformVarMap, hadError, profile, version);
         TVarLiveVector uniformVector;
         resolver->beginResolve(EShLangCount);
         for (int stage = EShLangVertex; stage < EShLangCount; stage++) {
             if (inVarMaps[stage] != nullptr) {
                 inOutResolve.setStage(EShLanguage(stage));
-                std::for_each(inVarMaps[stage]->begin(), inVarMaps[stage]->end(), symbolValidater);
-                std::for_each(inVarMaps[stage]->begin(), inVarMaps[stage]->end(), inOutResolve);
-                std::for_each(outVarMaps[stage]->begin(), outVarMaps[stage]->end(), symbolValidater);
-                std::for_each(outVarMaps[stage]->begin(), outVarMaps[stage]->end(), inOutResolve);
+                for (auto& var : *(inVarMaps[stage])) { symbolValidater(var); }
+                for (auto& var : *(inVarMaps[stage])) { inOutResolve(var); }
+                for (auto& var : *(outVarMaps[stage])) { symbolValidater(var); }
+                for (auto& var : *(outVarMaps[stage])) { inOutResolve(var); }
             }
             if (uniformVarMap[stage] != nullptr) {
                 uniformResolve.setStage(EShLanguage(stage));
-                // sort entries by priority. see TVarEntryInfo::TOrderByPriority for info.
-                std::for_each(uniformVarMap[stage]->begin(), uniformVarMap[stage]->end(),
-                              [&uniformVector](TVarLivePair p) { uniformVector.push_back(p); });
+                for (auto& var : *(uniformVarMap[stage])) { uniformVector.push_back(var); }
             }
         }
         std::sort(uniformVector.begin(), uniformVector.end(), [](const TVarLivePair& p1, const TVarLivePair& p2) -> bool {
             return TVarEntryInfo::TOrderByPriority()(p1.second, p2.second);
         });
-        std::for_each(uniformVector.begin(), uniformVector.end(), symbolValidater);
-        std::for_each(uniformVector.begin(), uniformVector.end(), uniformResolve);
+        for (auto& var : uniformVector) { symbolValidater(var); }
+        for (auto& var : uniformVector) { uniformResolve(var); }
         std::sort(uniformVector.begin(), uniformVector.end(), [](const TVarLivePair& p1, const TVarLivePair& p2) -> bool {
             return TVarEntryInfo::TOrderByPriority()(p1.second, p2.second);
         });
@@ -1269,14 +1575,18 @@
             if (intermediates[stage] != nullptr) {
                 // traverse each stage, set new location to each input/output and unifom symbol, set new binding to
                 // ubo, ssbo and opaque symbols
-                TVarLiveMap** pUniformVarMap = uniformVarMap;
+                TVarLiveMap** pUniformVarMap = uniformResolve.uniformVarMap;
                 std::for_each(uniformVector.begin(), uniformVector.end(), [pUniformVarMap, stage](TVarLivePair p) {
-                    auto at = pUniformVarMap[stage]->find(p.second.symbol->getName());
-                    if (at != pUniformVarMap[stage]->end())
+                    auto at = pUniformVarMap[stage]->find(p.second.symbol->getAccessName());
+                    if (at != pUniformVarMap[stage]->end() && at->second.id == p.second.id){
+                        int resolvedBinding = at->second.newBinding;
                         at->second = p.second;
+                        if (resolvedBinding > 0)
+                            at->second.newBinding = resolvedBinding;
+                    }
                 });
                 TVarSetTraverser iter_iomap(*intermediates[stage], *inVarMaps[stage], *outVarMaps[stage],
-                                            *uniformVarMap[stage]);
+                                            *uniformResolve.uniformVarMap[stage]);
                 intermediates[stage]->getTreeRoot()->traverse(&iter_iomap);
             }
         }
diff --git a/glslang/MachineIndependent/iomapper.h b/glslang/MachineIndependent/iomapper.h
index 6741327..7934c4a 100644
--- a/glslang/MachineIndependent/iomapper.h
+++ b/glslang/MachineIndependent/iomapper.h
@@ -203,7 +203,6 @@
     void endCollect(EShLanguage) override;
     void reserverStorageSlot(TVarEntryInfo& ent, TInfoSink& infoSink) override;
     void reserverResourceSlot(TVarEntryInfo& ent, TInfoSink& infoSink) override;
-    const TString& getAccessName(const TIntermSymbol*);
     // in/out symbol and uniform symbol are stored in the same resourceSlotMap, the storage key is used to identify each type of symbol.
     // We use stage and storage qualifier to construct a storage key. it can help us identify the same storage resource used in different stage.
     // if a resource is a program resource and we don't need know it usage stage, we can use same stage to build storage key.
@@ -263,10 +262,12 @@
 class TGlslIoMapper : public TIoMapper {
 public:
     TGlslIoMapper() {
-        memset(inVarMaps,     0, sizeof(TVarLiveMap*)   * EShLangCount);
-        memset(outVarMaps,    0, sizeof(TVarLiveMap*)   * EShLangCount);
-        memset(uniformVarMap, 0, sizeof(TVarLiveMap*)   * EShLangCount);
-        memset(intermediates, 0, sizeof(TIntermediate*) * EShLangCount);
+        memset(inVarMaps,     0, sizeof(TVarLiveMap*)   * (EShLangCount + 1));
+        memset(outVarMaps,    0, sizeof(TVarLiveMap*)   * (EShLangCount + 1));
+        memset(uniformVarMap, 0, sizeof(TVarLiveMap*)   * (EShLangCount + 1));
+        memset(intermediates, 0, sizeof(TIntermediate*) * (EShLangCount + 1));
+        profile = ENoProfile;
+        version = 0;
     }
     virtual ~TGlslIoMapper() {
         for (size_t stage = 0; stage < EShLangCount; stage++) {
@@ -293,6 +294,8 @@
                 *uniformVarMap[EShLangCount];
     TIntermediate* intermediates[EShLangCount];
     bool hadError = false;
+    EProfile profile;
+    int version;
 };
 
 } // end namespace glslang
diff --git a/glslang/MachineIndependent/linkValidate.cpp b/glslang/MachineIndependent/linkValidate.cpp
old mode 100755
new mode 100644
index a8e031b..4e84adb
--- a/glslang/MachineIndependent/linkValidate.cpp
+++ b/glslang/MachineIndependent/linkValidate.cpp
@@ -196,12 +196,14 @@
     MERGE_TRUE(pointMode);
 
     for (int i = 0; i < 3; ++i) {
-        if (!localSizeNotDefault[i] && unit.localSizeNotDefault[i]) {
-            localSize[i] = unit.localSize[i];
-            localSizeNotDefault[i] = true;
+        if (unit.localSizeNotDefault[i]) {
+            if (!localSizeNotDefault[i]) {
+                localSize[i] = unit.localSize[i];
+                localSizeNotDefault[i] = true;
+            }
+            else if (localSize[i] != unit.localSize[i])
+                error(infoSink, "Contradictory local size");
         }
-        else if (localSize[i] != unit.localSize[i])
-            error(infoSink, "Contradictory local size");
 
         if (localSizeSpecId[i] == TQualifier::layoutNotSet)
             localSizeSpecId[i] = unit.localSizeSpecId[i];
@@ -736,10 +738,10 @@
 
         // "The resulting stride (implicit or explicit), when divided by 4, must be less than or equal to the
         // implementation-dependent constant gl_MaxTransformFeedbackInterleavedComponents."
-        if (xfbBuffers[b].stride > (unsigned int)(4 * resources.maxTransformFeedbackInterleavedComponents)) {
+        if (xfbBuffers[b].stride > (unsigned int)(4 * resources->maxTransformFeedbackInterleavedComponents)) {
             error(infoSink, "xfb_stride is too large:");
             infoSink.info.prefix(EPrefixError);
-            infoSink.info << "    xfb_buffer " << (unsigned int)b << ", components (1/4 stride) needed are " << xfbBuffers[b].stride/4 << ", gl_MaxTransformFeedbackInterleavedComponents is " << resources.maxTransformFeedbackInterleavedComponents << "\n";
+            infoSink.info << "    xfb_buffer " << (unsigned int)b << ", components (1/4 stride) needed are " << xfbBuffers[b].stride/4 << ", gl_MaxTransformFeedbackInterleavedComponents is " << resources->maxTransformFeedbackInterleavedComponents << "\n";
         }
     }
 
@@ -1055,8 +1057,8 @@
     return found;
 }
 
-// Accumulate locations used for inputs, outputs, and uniforms, and check for collisions
-// as the accumulation is done.
+// Accumulate locations used for inputs, outputs, and uniforms, payload and callable data
+// and check for collisions as the accumulation is done.
 //
 // Returns < 0 if no collision, >= 0 if collision and the value returned is a colliding value.
 //
@@ -1068,6 +1070,7 @@
     typeCollision = false;
 
     int set;
+    int setRT;
     if (qualifier.isPipeInput())
         set = 0;
     else if (qualifier.isPipeOutput())
@@ -1076,11 +1079,17 @@
         set = 2;
     else if (qualifier.storage == EvqBuffer)
         set = 3;
+    else if (qualifier.isAnyPayload())
+        setRT = 0;
+    else if (qualifier.isAnyCallable())
+        setRT = 1;
     else
         return -1;
 
     int size;
-    if (qualifier.isUniformOrBuffer() || qualifier.isTaskMemory()) {
+    if (qualifier.isAnyPayload() || qualifier.isAnyCallable()) {
+        size = 1;
+    } else if (qualifier.isUniformOrBuffer() || qualifier.isTaskMemory()) {
         if (type.isSizedArray())
             size = type.getCumulativeArraySize();
         else
@@ -1108,10 +1117,17 @@
     // (A vertex shader input will show using only one location, even for a dvec3/4.)
     //
     // So, for the case of dvec3, we need two independent ioRanges.
-
+    //
+    // For raytracing IO (payloads and callabledata) each declaration occupies a single
+    // slot irrespective of type.
     int collision = -1; // no collision
 #ifndef GLSLANG_WEB
-    if (size == 2 && type.getBasicType() == EbtDouble && type.getVectorSize() == 3 &&
+    if (qualifier.isAnyPayload() || qualifier.isAnyCallable()) {
+        TRange range(qualifier.layoutLocation, qualifier.layoutLocation);
+        collision = checkLocationRT(setRT, qualifier.layoutLocation);
+        if (collision < 0)
+            usedIoRT[setRT].push_back(range);
+    } else if (size == 2 && type.getBasicType() == EbtDouble && type.getVectorSize() == 3 &&
         (qualifier.isPipeInput() || qualifier.isPipeOutput())) {
         // Dealing with dvec3 in/out split across two locations.
         // Need two io-ranges.
@@ -1187,6 +1203,16 @@
     return -1; // no collision
 }
 
+int TIntermediate::checkLocationRT(int set, int location) {
+    TRange range(location, location);
+    for (size_t r = 0; r < usedIoRT[set].size(); ++r) {
+        if (range.overlap(usedIoRT[set][r])) {
+            return range.start;
+        }
+    }
+    return -1; // no collision
+}
+
 // Accumulate bindings and offsets, and check for collisions
 // as the accumulation is done.
 //
diff --git a/glslang/MachineIndependent/localintermediate.h b/glslang/MachineIndependent/localintermediate.h
index 3cdc1f1..f8d8e80 100644
--- a/glslang/MachineIndependent/localintermediate.h
+++ b/glslang/MachineIndependent/localintermediate.h
@@ -259,6 +259,23 @@
     unsigned int features;
 };
 
+// MustBeAssigned wraps a T, asserting that it has been assigned with 
+// operator =() before attempting to read with operator T() or operator ->().
+// Used to catch cases where fields are read before they have been assigned.
+template<typename T>
+class MustBeAssigned
+{
+public:
+    MustBeAssigned() = default;
+    MustBeAssigned(const T& v) : value(v) {}
+    operator const T&() const { assert(isSet); return value; }
+    const T* operator ->() const { assert(isSet); return &value; }
+    MustBeAssigned& operator = (const T& v) { value = v; isSet = true; return *this; } 
+private:
+    T value;
+    bool isSet = false;
+};
+
 //
 // Set of helper functions to help parse and build the tree.
 //
@@ -270,6 +287,7 @@
         profile(p), version(v),
 #endif
         treeRoot(0),
+        resources(TBuiltInResource{}),
         numEntryPoints(0), numErrors(0), numPushConstants(0), recursive(false),
         invertY(false),
         useStorageBuffer(false),
@@ -398,6 +416,9 @@
     EShLanguage getStage() const { return language; }
     void addRequestedExtension(const char* extension) { requestedExtensions.insert(extension); }
     const std::set<std::string>& getRequestedExtensions() const { return requestedExtensions; }
+    bool isRayTracingStage() const {
+        return language >= EShLangRayGen && language <= EShLangCallableNV;
+    }
 
     void setTreeRoot(TIntermNode* r) { treeRoot = r; }
     TIntermNode* getTreeRoot() const { return treeRoot; }
@@ -406,6 +427,7 @@
     int getNumErrors() const { return numErrors; }
     void addPushConstantCount() { ++numPushConstants; }
     void setLimits(const TBuiltInResource& r) { resources = r; }
+    const TBuiltInResource& getLimits() const { return resources; }
 
     bool postProcess(TIntermNode*, EShLanguage);
     void removeTree();
@@ -512,6 +534,7 @@
     // Linkage related
     void addSymbolLinkageNodes(TIntermAggregate*& linkage, EShLanguage, TSymbolTable&);
     void addSymbolLinkageNode(TIntermAggregate*& linkage, const TSymbol&);
+    TIntermAggregate* findLinkerObjects() const;
 
     void setUseStorageBuffer() { useStorageBuffer = true; }
     bool usingStorageBuffer() const { return useStorageBuffer; }
@@ -847,6 +870,7 @@
 
     int addUsedLocation(const TQualifier&, const TType&, bool& typeCollision);
     int checkLocationRange(int set, const TIoRange& range, const TType&, bool& typeCollision);
+    int checkLocationRT(int set, int location);
     int addUsedOffsets(int binding, int offset, int numOffsets);
     bool addUsedConstantId(int id);
     static int computeTypeLocationSize(const TType&, EShLanguage);
@@ -922,7 +946,6 @@
     void checkCallGraphCycles(TInfoSink&);
     void checkCallGraphBodies(TInfoSink&, bool keepUncalled);
     void inOutLocationCheck(TInfoSink&);
-    TIntermAggregate* findLinkerObjects() const;
     bool userOutputUsed() const;
     bool isSpecializationOperation(const TIntermOperator&) const;
     bool isNonuniformPropagating(TOperator) const;
@@ -955,7 +978,7 @@
     SpvVersion spvVersion;
     TIntermNode* treeRoot;
     std::set<std::string> requestedExtensions;  // cumulation of all enabled or required extensions; not connected to what subset of the shader used them
-    TBuiltInResource resources;
+    MustBeAssigned<TBuiltInResource> resources;
     int numEntryPoints;
     int numErrors;
     int numPushConstants;
@@ -1031,6 +1054,8 @@
     std::unordered_set<int> usedConstantId; // specialization constant ids used
     std::vector<TOffsetRange> usedAtomics;  // sets of bindings used by atomic counters
     std::vector<TIoRange> usedIo[4];        // sets of used locations, one for each of in, out, uniform, and buffers
+    std::vector<TRange> usedIoRT[2];        // sets of used location, one for rayPayload/rayPayloadIN and other
+                                            // for callableData/callableDataIn
     // set of names of statically read/written I/O that might need extra checking
     std::set<TString> ioAccessed;
     // source code of shader, useful as part of debug information
diff --git a/glslang/MachineIndependent/preprocessor/Pp.cpp b/glslang/MachineIndependent/preprocessor/Pp.cpp
index a0a626f..aa1e0d7 100644
--- a/glslang/MachineIndependent/preprocessor/Pp.cpp
+++ b/glslang/MachineIndependent/preprocessor/Pp.cpp
@@ -455,6 +455,7 @@
                 token = scanToken(ppToken);
             }
         } else {
+            token = tokenPaste(token, *ppToken);
             token = evalToToken(token, shortCircuit, res, err, ppToken);
             return eval(token, precedence, shortCircuit, res, err, ppToken);
         }
diff --git a/glslang/MachineIndependent/preprocessor/PpTokens.cpp b/glslang/MachineIndependent/preprocessor/PpTokens.cpp
old mode 100755
new mode 100644
diff --git a/glslang/MachineIndependent/reflection.cpp b/glslang/MachineIndependent/reflection.cpp
index 0aabf37..7295002 100644
--- a/glslang/MachineIndependent/reflection.cpp
+++ b/glslang/MachineIndependent/reflection.cpp
@@ -658,14 +658,17 @@
 
                 blocks.back().numMembers = countAggregateMembers(type);
 
-                EShLanguageMask& stages = blocks.back().stages;
-                stages = static_cast<EShLanguageMask>(stages | 1 << intermediate.getStage());
+                if (updateStageMasks) {
+                    EShLanguageMask& stages = blocks.back().stages;
+                    stages = static_cast<EShLanguageMask>(stages | 1 << intermediate.getStage());
+                }
             }
             else {
                 blockIndex = it->second;
-
-                EShLanguageMask& stages = blocks[blockIndex].stages;
-                stages = static_cast<EShLanguageMask>(stages | 1 << intermediate.getStage());
+                if (updateStageMasks) {
+                    EShLanguageMask& stages = blocks[blockIndex].stages;
+                    stages = static_cast<EShLanguageMask>(stages | 1 << intermediate.getStage());
+                }
             }
         }
 
diff --git a/gtests/AST.FromFile.cpp b/gtests/AST.FromFile.cpp
index a8e4da4..dc7fea3 100644
--- a/gtests/AST.FromFile.cpp
+++ b/gtests/AST.FromFile.cpp
@@ -278,6 +278,8 @@
         "glsl.es320.subgroupShuffleRelative.comp",
         "glsl.es320.subgroupQuad.comp",
         "glsl.es320.subgroupVote.comp",
+        "terminate.frag",
+        "terminate.vert",
     })),
     FileNameAsCustomTestSuffix
 );
diff --git a/gtests/CMakeLists.txt b/gtests/CMakeLists.txt
index 6c48d9c..0617ff8 100644
--- a/gtests/CMakeLists.txt
+++ b/gtests/CMakeLists.txt
@@ -83,6 +83,12 @@
                                    ${gmock_SOURCE_DIR}/include
                                    ${gtest_SOURCE_DIR}/include)
 
+        if(ENABLE_OPT)
+            target_include_directories(glslangtests
+                PRIVATE ${spirv-tools_SOURCE_DIR}/include
+            )
+        endif(ENABLE_OPT)
+
         set(LIBRARIES
             glslang OSDependent OGLCompiler glslang
             SPIRV glslang-default-resource-limits)
diff --git a/gtests/Hlsl.FromFile.cpp b/gtests/Hlsl.FromFile.cpp
old mode 100755
new mode 100644
index 224ea59..4d1cb50
--- a/gtests/Hlsl.FromFile.cpp
+++ b/gtests/Hlsl.FromFile.cpp
@@ -308,6 +308,7 @@
         {"hlsl.pp.vert", "main"},
         {"hlsl.pp.line.frag", "main"},
         {"hlsl.precise.frag", "main"},
+        {"hlsl.printf.comp", "main"},
         {"hlsl.promote.atomic.frag", "main"},
         {"hlsl.promote.binary.frag", "main"},
         {"hlsl.promote.vec1.frag", "main"},
diff --git a/gtests/Link.FromFile.Vk.cpp b/gtests/Link.FromFile.Vk.cpp
old mode 100755
new mode 100644
diff --git a/gtests/Link.FromFile.cpp b/gtests/Link.FromFile.cpp
old mode 100755
new mode 100644
diff --git a/gtests/Spv.FromFile.cpp b/gtests/Spv.FromFile.cpp
index 309fe75..a393ccc 100644
--- a/gtests/Spv.FromFile.cpp
+++ b/gtests/Spv.FromFile.cpp
@@ -240,6 +240,7 @@
         "rayQuery-allOps.comp",
         "rayQuery-allOps.frag",
         "rayQuery-initialization.Error.comp",
+        "rayQuery-global.rgen",
         "spv.set.vert",
         "spv.double.comp",
         "spv.100ops.frag",
@@ -352,6 +353,7 @@
         "spv.int64.frag",
         "spv.intcoopmat.comp",
         "spv.intOps.vert",
+        "spv.layer.tese",
         "spv.layoutNested.vert",
         "spv.length.frag",
         "spv.localAggregates.frag",
@@ -376,6 +378,7 @@
         "spv.offsets.frag",
         "spv.Operations.frag",
         "spv.paramMemory.frag",
+        "spv.paramMemory.420.frag",
         "spv.precision.frag",
         "spv.precisionArgs.frag",
         "spv.precisionNonESSamp.frag",
@@ -410,6 +413,7 @@
         "spv.texture.vert",
         "spv.textureBuffer.vert",
         "spv.image.frag",
+        "spv.imageAtomic64.frag",
         "spv.types.frag",
         "spv.uint.frag",
         "spv.uniformArray.frag",
@@ -434,8 +438,10 @@
         "spv.specConstant.int16.comp",
         "spv.specConstant.int8.comp",
         "spv.storageBuffer.vert",
+        "spv.terminate.frag",
         "spv.precise.tese",
         "spv.precise.tesc",
+        "spv.viewportindex.tese",
         "spv.volatileAtomic.comp",
         "spv.vulkan100.subgroupArithmetic.comp",
         "spv.vulkan100.subgroupPartitioned.comp",
@@ -445,6 +451,8 @@
         "spv.samplerlessTextureFunctions.frag",
         "spv.smBuiltins.vert",
         "spv.smBuiltins.frag",
+        "spv.builtin.PrimitiveShadingRateEXT.vert",
+        "spv.builtin.ShadingRateEXT.frag",
     })),
     FileNameAsCustomTestSuffix
 );
@@ -550,6 +558,7 @@
         "spv.ext.AnyHitShader.rahit",
         "spv.ext.AnyHitShader_Errors.rahit",
         "spv.ext.ClosestHitShader.rchit",
+        "spv.ext.ClosestHitShader_Subgroup.rchit",
         "spv.ext.ClosestHitShader_Errors.rchit",
         "spv.ext.IntersectShader.rint",
         "spv.ext.IntersectShader_Errors.rint",
@@ -560,9 +569,16 @@
         "spv.ext.RayCallable_Errors.rcall",
         "spv.ext.RayConstants.rgen",
         "spv.ext.RayGenShader.rgen",
+        "spv.ext.RayGenShader_Errors.rgen",
         "spv.ext.RayGenShader11.rgen",
         "spv.ext.RayGenShaderArray.rgen",
+        "spv.ext.RayGenSBTlayout.rgen",
+        "spv.ext.RayGenSBTlayout140.rgen",
+        "spv.ext.RayGenSBTlayout430.rgen",
+        "spv.ext.RayGenSBTlayoutscalar.rgen",
         "spv.ext.World3x4.rahit",
+        "spv.ext.AccelDecl.frag",
+        "spv.ext.RayQueryDecl.frag",
     })),
     FileNameAsCustomTestSuffix
 );
diff --git a/gtests/TestFixture.h b/gtests/TestFixture.h
old mode 100755
new mode 100644
diff --git a/known_good.json b/known_good.json
index 289b384..81301e1 100644
--- a/known_good.json
+++ b/known_good.json
@@ -5,14 +5,14 @@
       "site" : "github",
       "subrepo" : "KhronosGroup/SPIRV-Tools",
       "subdir" : "External/spirv-tools",
-      "commit" : "0a1fb588cd365f7737cb121fdd64553923e0cef6"
+      "commit" : "cd590fa3341284cd6d1ee82366155786cfd44c96"
     },
     {
       "name" : "spirv-tools/external/spirv-headers",
       "site" : "github",
       "subrepo" : "KhronosGroup/SPIRV-Headers",
       "subdir" : "External/spirv-tools/external/spirv-headers",
-      "commit" : "060627f0b0d2fa8581b5acb939f46e3b9e500593"
+      "commit" : "f027d53ded7e230e008d37c8b47ede7cd308e19d"
     }
   ]
 }
diff --git a/kokoro/linux-clang-gn/build-docker.sh b/kokoro/linux-clang-gn/build-docker.sh
new file mode 100755
index 0000000..1035ab8
--- /dev/null
+++ b/kokoro/linux-clang-gn/build-docker.sh
@@ -0,0 +1,55 @@
+#!/bin/bash
+
+# Copyright (C) 2020 Google, Inc.
+#
+# 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 Google Inc. 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.
+
+set -e # Fail on any error.
+set -x # Display commands being run.
+
+echo "Fetching external projects..."
+./update_glslang_sources.py
+
+echo "Fetching depot_tools..."
+mkdir -p /tmp/depot_tools
+curl https://storage.googleapis.com/chrome-infra/depot_tools.zip -o /tmp/depot_tools.zip
+unzip /tmp/depot_tools.zip -d /tmp/depot_tools
+rm /tmp/depot_tools.zip
+export PATH="/tmp/depot_tools:$PATH"
+
+echo "Syncing client..."
+gclient sync --gclientfile=standalone.gclient
+gn gen out/Default
+
+echo "Building..."
+cd out/Default
+ninja
diff --git a/kokoro/linux-clang-gn/build.sh b/kokoro/linux-clang-gn/build.sh
new file mode 100755
index 0000000..563432a
--- /dev/null
+++ b/kokoro/linux-clang-gn/build.sh
@@ -0,0 +1,49 @@
+#!/bin/bash
+
+# Copyright (C) 2020 Google, Inc.
+#
+# 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 Google Inc. 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.
+
+set -e # Fail on any error.
+
+SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd )"
+ROOT_DIR="$( cd "${SCRIPT_DIR}/../.." >/dev/null 2>&1 && pwd )"
+
+docker run --rm -i \
+  --volume "${ROOT_DIR}:${ROOT_DIR}" \
+  --workdir "${ROOT_DIR}" \
+  --env ROOT_DIR="${ROOT_DIR}" \
+  --env SCRIPT_DIR="${SCRIPT_DIR}" \
+  --entrypoint "${SCRIPT_DIR}/build-docker.sh" \
+  "gcr.io/shaderc-build/radial-build:latest"
+
+sudo chown -R "$(id -u):$(id -g)" "${ROOT_DIR}"
diff --git a/kokoro/linux-clang-gn/continuous.cfg b/kokoro/linux-clang-gn/continuous.cfg
new file mode 100644
index 0000000..1b19146
--- /dev/null
+++ b/kokoro/linux-clang-gn/continuous.cfg
@@ -0,0 +1,35 @@
+# Copyright (C) 2020 Google, Inc.
+#
+# 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 Google Inc. 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.
+
+# Continuous build configuration.
+build_file: "glslang/kokoro/linux-clang-gn/build.sh"
diff --git a/kokoro/linux-clang-gn/presubmit.cfg b/kokoro/linux-clang-gn/presubmit.cfg
new file mode 100644
index 0000000..a72b9a8
--- /dev/null
+++ b/kokoro/linux-clang-gn/presubmit.cfg
@@ -0,0 +1,35 @@
+# Copyright (C) 2020 Google, Inc.
+#
+# 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 Google Inc. 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.
+
+# Presubmit build configuration.
+build_file: "glslang/kokoro/linux-clang-gn/build.sh"
diff --git a/standalone.gclient b/standalone.gclient
new file mode 100644
index 0000000..de067db
--- /dev/null
+++ b/standalone.gclient
@@ -0,0 +1,42 @@
+# Copyright (C) 2020 The Khronos Group Inc.
+#
+# 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 The Khronos Group Inc. 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.
+
+solutions = [
+  { "name"        : ".",
+    "url"         : "https://github.com/KhronosGroup/glslang",
+    "deps_file"   : "DEPS",
+    "managed"     : False,
+    "custom_deps" : {
+    },
+  },
+]