glslx 0.4.2 → 0.4.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/glslx +87 -87
  2. package/glslx.d.ts +1 -0
  3. package/package.json +1 -1
package/glslx CHANGED
@@ -1,89 +1,89 @@
1
1
  #!/usr/bin/env node
2
- (function(){var Vh=Object.create||function(a){return{__proto__:a}};function ji(a,b){a.prototype=Vh(b.prototype),a.prototype.constructor=a}var ki=Math.imul||function(a,b){return (a*(b>>>16)<<16)+a*(b&65535)|0};var Hf;function li(a){return typeof a==='string'}function mi(a){return a===null?a:a+''}function Ef(c,a,b){return c.a=a,c.b=b,c.c=a.length,c}function Ff(c){if(c.b>=c.c)return-1;var a=c.a.charCodeAt((c.b=c.b+1|0)-1|0);if(a&64512^55296)return a;if(c.b>=c.c)return-1;var b=c.a.charCodeAt((c.b=c.b+1|0)-1|0);return ((a<<10)+b|0)-56613888|0}function Oc(a){return a.c=a.c+1|0,a.c}function sd(p,a){switch(a){case 0:var b={};return Array.from(p.b.keys()).forEach(function(c){b[c]=p.b.get(c)}),JSON.stringify({shaders:p.a?p.a.map(function(d){var e={name:d.a,contents:d.b};switch(d.c){case 1:e.type='vertex';break;case 2:e.type='fragment';break}return e}):null,renaming:b},null,2)+'\n';case 1:if(p.a){for(var f='',O=0,C=p.a,P=C.length;O<P;O=O+1|0){var h=C[O];f+='export const GLSLX_SOURCE_'+h.a.replace(new RegExp('([a-z0-9])([A-Z])',
3
- 'g'),'$1_$2').toUpperCase()+' = '+JSON.stringify(h.b)+'\n'}if(p.b&&Array.from(p.b.keys()).length){f+='\n';for(var S=0,ea=Array.from(p.b.keys()),fa=ea.length;S<fa;S=S+1|0){var l=ea[S];f+='export const GLSLX_NAME_'+l.replace(new RegExp('([a-z0-9])([A-Z])','g'),'$1_$2').toUpperCase()+' = '+JSON.stringify(p.b.get(l))+'\n'}}return f}break;case 2:if(p.a){var m='';m+='#ifndef GLSLX_STRINGS_H\n',m+='#define GLSLX_STRINGS_H\n',m+='\n';for(var V=0,ba=p.a,ga=ba.length;V<ga;V=V+1|0){var g=ba[V];m+='static const char *GLSLX_SOURCE_'+g.a.replace(new RegExp('([a-z0-9])([A-Z])','g'),'$1_$2').toUpperCase()+' = '+JSON.stringify(g.b)+';\n'}if(m+='\n',p.b){for(var ja=0,ua=Array.from(p.b.keys()),Ma=ua.length;ja<Ma;ja=ja+1|0){var i=ua[ja];m+='static const char *GLSLX_NAME_'+i.replace(new RegExp('([a-z0-9])([A-Z])','g'),'$1_$2').toUpperCase()+' = '+JSON.stringify(p.b.get(i))+';\n'}m+='\n'}return m+='#endif\n',m}break;case 3:if(p.a){for(var n='',na=0,ka=p.a,pb=ka.length;na<pb;na=na+1|0){var k=ka[na];n+='const GLSLX_SOURCE_'+k.a.replace(new RegExp('([a-z0-9])([A-Z])',
4
- 'g'),'$1_$2').toUpperCase()+' = '+JSON.stringify(k.b)+'\n'}if(p.b&&Array.from(p.b.keys()).length){n+='\n';for(var qa=0,Za=Array.from(p.b.keys()),La=Za.length;qa<La;qa=qa+1|0){var q=Za[qa];n+='const GLSLX_NAME_'+q.replace(new RegExp('([a-z0-9])([A-Z])','g'),'$1_$2').toUpperCase()+' = '+JSON.stringify(p.b.get(q))+'\n'}}return n}break;case 4:if(p.a){for(var v='',Na=0,jb=p.a,Xa=jb.length;Na<Xa;Na=Na+1|0){var u=jb[Na];v+='pub static GLSLX_SOURCE_'+u.a.replace(new RegExp('([a-z0-9])([A-Z])','g'),'$1_$2').toUpperCase()+': &str = '+JSON.stringify(u.b)+';\n'}if(p.b&&Array.from(p.b.keys()).length){v+='\n';for(var Aa=0,Ya=Array.from(p.b.keys()),Fa=Ya.length;Aa<Fa;Aa=Aa+1|0){var B=Ya[Aa];v+='pub static GLSLX_NAME_'+B.replace(new RegExp('([a-z0-9])([A-Z])','g'),'$1_$2').toUpperCase()+': &str = '+JSON.stringify(p.b.get(B))+';\n'}}return v}break}return null}function ie(a,b){for(var c=null,h=0,l=b.length;h<l;h=h+1|0){var d=b[h];if(d.c.b==1){c=d;break}}var e=null;if(c){e=new Ti('<api>',"\n#version 300 es\nimport {\n in highp int gl_VertexID;\n in highp int gl_InstanceID;\n out highp vec4 gl_Position;\n out highp float gl_PointSize;\n\n in highp vec4 gl_FragCoord;\n in bool gl_FrontFacing;\n out highp float gl_FragDepth;\n in mediump vec2 gl_PointCoord;\n\n const mediump int gl_MaxVertexAttribs;\n const mediump int gl_MaxVertexUniformVectors;\n const mediump int gl_MaxVertexOutputVectors;\n const mediump int gl_MaxFragmentInputVectors;\n const mediump int gl_MaxVertexTextureImageUnits;\n const mediump int gl_MaxCombinedTextureImageUnits;\n const mediump int gl_MaxTextureImageUnits;\n const mediump int gl_MaxFragmentUniformVectors;\n const mediump int gl_MaxDrawBuffers;\n const mediump int gl_MinProgramTexelOffset;\n const mediump int gl_MaxProgramTexelOffset;\n\n struct gl_DepthRangeParameters {\n highp float near; // n\n highp float far; // f\n highp float diff; // f - n\n };\n uniform gl_DepthRangeParameters gl_DepthRange;\n\n ////////////////////////////////////////////////////////////////////////////////\n // Angle and Trigonometry Functions\n\n // Converts `degrees` to radians, i.e. `π / 180 * degrees`\n float radians(float degrees);\n // Converts `degrees` to radians, i.e. `π / 180 * degrees`\n vec2 radians(vec2 degrees);\n // Converts `degrees` to radians, i.e. `π / 180 * degrees`\n vec3 radians(vec3 degrees);\n // Converts `degrees` to radians, i.e. `π / 180 * degrees`\n vec4 radians(vec4 degrees);\n\n // Converts `radians` to degrees, i.e. `180 / π * radians`\n float degrees(float radians);\n // Converts `radians` to degrees, i.e. `180 / π * radians`\n vec2 degrees(vec2 radians);\n // Converts `radians` to degrees, i.e. `180 / π * radians`\n vec3 degrees(vec3 radians);\n // Converts `radians` to degrees, i.e. `180 / π * radians`\n vec4 degrees(vec4 radians);\n\n // The standard trigonometric sine function.\n float sin(float angle);\n // The standard trigonometric sine function.\n vec2 sin(vec2 angle);\n // The standard trigonometric sine function.\n vec3 sin(vec3 angle);\n // The standard trigonometric sine function.\n vec4 sin(vec4 angle);\n\n // The standard trigonometric cosine function.\n float cos(float angle);\n // The standard trigonometric cosine function.\n vec2 cos(vec2 angle);\n // The standard trigonometric cosine function.\n vec3 cos(vec3 angle);\n // The standard trigonometric cosine function.\n vec4 cos(vec4 angle);\n\n // The standard trigonometric tangent.\n float tan(float angle);\n // The standard trigonometric tangent.\n vec2 tan(vec2 angle);\n // The standard trigonometric tangent.\n vec3 tan(vec3 angle);\n // The standard trigonometric tangent.\n vec4 tan(vec4 angle);\n\n // Arc sine. Returns an angle whose sine is `x`. The range of values returned by this function is `[-π/2, π/2]`. Results are undefined if `∣x∣>1`.\n float asin(float x);\n // Arc sine. Returns an angle whose sine is `x`. The range of values returned by this function is `[-π/2, π/2]`. Results are undefined if `∣x∣>1`.\n vec2 asin(vec2 x);\n // Arc sine. Returns an angle whose sine is `x`. The range of values returned by this function is `[-π/2, π/2]`. Results are undefined if `∣x∣>1`.\n vec3 asin(vec3 x);\n // Arc sine. Returns an angle whose sine is `x`. The range of values returned by this function is `[-π/2, π/2]`. Results are undefined if `∣x∣>1`.\n vec4 asin(vec4 x);\n\n // Arc cosine. Returns an angle whose cosine is `x`. The range of values returned by this function is `[0, π]`. Results are undefined if `∣x∣>1`.\n float acos(float x);\n // Arc cosine. Returns an angle whose cosine is `x`. The range of values returned by this function is `[0, π]`. Results are undefined if `∣x∣>1`.\n vec2 acos(vec2 x);\n // Arc cosine. Returns an angle whose cosine is `x`. The range of values returned by this function is `[0, π]`. Results are undefined if `∣x∣>1`.\n vec3 acos(vec3 x);\n // Arc cosine. Returns an angle whose cosine is `x`. The range of values returned by this function is `[0, π]`. Results are undefined if `∣x∣>1`.\n vec4 acos(vec4 x);\n\n // Arc tangent. Returns an angle whose tangent is `y/x`. The signs of `x` and `y` are used to determine what quadrant the\n // angle is in. The range of values returned by this function is `[−π,π]`. Results are undefined if `x` and `y` are both 0.\n float atan(float y, float x);\n // Arc tangent. Returns an angle whose tangent is `y/x`. The signs of `x` and `y` are used to determine what quadrant the\n // angle is in. The range of values returned by this function is `[−π,π]`. Results are undefined if `x` and `y` are both 0.\n vec2 atan(vec2 y, vec2 x);\n // Arc tangent. Returns an angle whose tangent is `y/x`. The signs of `x` and `y` are used to determine what quadrant the\n // angle is in. The range of values returned by this function is `[−π,π]`. Results are undefined if `x` and `y` are both 0.\n vec3 atan(vec3 y, vec3 x);\n // Arc tangent. Returns an angle whose tangent is `y/x`. The signs of `x` and `y` are used to determine what quadrant the\n // angle is in. The range of values returned by this function is `[−π,π]`. Results are undefined if `x` and `y` are both 0.\n vec4 atan(vec4 y, vec4 x);\n\n // Arc tangent. Returns an angle whose tangent is `y_over_x`. The range of values returned by this function is `[-π/2, π/2]`.\n float atan(float y_over_x);\n // Arc tangent. Returns an angle whose tangent is `y_over_x`. The range of values returned by this function is `[-π/2, π/2]`.\n vec2 atan(vec2 y_over_x);\n // Arc tangent. Returns an angle whose tangent is `y_over_x`. The range of values returned by this function is `[-π/2, π/2]`.\n vec3 atan(vec3 y_over_x);\n // Arc tangent. Returns an angle whose tangent is `y_over_x`. The range of values returned by this function is `[-π/2, π/2]`.\n vec4 atan(vec4 y_over_x);\n\n // Returns the hyperbolic sine function `(eˣ - e⁻ˣ) / 2`\n float sinh(float x);\n // Returns the hyperbolic sine function `(eˣ - e⁻ˣ) / 2`\n vec2 sinh(vec2 x);\n // Returns the hyperbolic sine function `(eˣ - e⁻ˣ) / 2`\n vec3 sinh(vec3 x);\n // Returns the hyperbolic sine function `(eˣ - e⁻ˣ) / 2`\n vec4 sinh(vec4 x);\n\n // Returns the hyperbolic cosine function `(eˣ + e⁻ˣ) / 2`\n float cosh(float x);\n // Returns the hyperbolic cosine function `(eˣ + e⁻ˣ) / 2`\n vec2 cosh(vec2 x);\n // Returns the hyperbolic cosine function `(eˣ + e⁻ˣ) / 2`\n vec3 cosh(vec3 x);\n // Returns the hyperbolic cosine function `(eˣ + e⁻ˣ) / 2`\n vec4 cosh(vec4 x);\n\n // Returns the hyperbolic tangent function `sinh(x) / cosh(x)`\n float tanh(float x);\n // Returns the hyperbolic tangent function `sinh(x) / cosh(x)`\n vec2 tanh(vec2 x);\n // Returns the hyperbolic tangent function `sinh(x) / cosh(x)`\n vec3 tanh(vec3 x);\n // Returns the hyperbolic tangent function `sinh(x) / cosh(x)`\n vec4 tanh(vec4 x);\n\n // Arc hyperbolic sine; returns the inverse of `sinh`.\n float asinh(float x);\n // Arc hyperbolic sine; returns the inverse of `sinh`.\n vec2 asinh(vec2 x);\n // Arc hyperbolic sine; returns the inverse of `sinh`.\n vec3 asinh(vec3 x);\n // Arc hyperbolic sine; returns the inverse of `sinh`.\n vec4 asinh(vec4 x);\n\n // Arc hyperbolic cosine; returns the non-negative inverse of `cosh`. Results are undefined if `x < 1`.\n float acosh(float x);\n // Arc hyperbolic cosine; returns the non-negative inverse of `cosh`. Results are undefined if `x < 1`.\n vec2 acosh(vec2 x);\n // Arc hyperbolic cosine; returns the non-negative inverse of `cosh`. Results are undefined if `x < 1`.\n vec3 acosh(vec3 x);\n // Arc hyperbolic cosine; returns the non-negative inverse of `cosh`. Results are undefined if `x < 1`.\n vec4 acosh(vec4 x);\n\n // Arc hyperbolic tangent; returns the inverse of `tanh`. Results are undefined if `∣x∣≥1`.\n float atanh(float x);\n // Arc hyperbolic tangent; returns the inverse of `tanh`. Results are undefined if `∣x∣≥1`.\n vec2 atanh(vec2 x);\n // Arc hyperbolic tangent; returns the inverse of `tanh`. Results are undefined if `∣x∣≥1`.\n vec3 atanh(vec3 x);\n // Arc hyperbolic tangent; returns the inverse of `tanh`. Results are undefined if `∣x∣≥1`.\n vec4 atanh(vec4 x);\n\n ////////////////////////////////////////////////////////////////////////////////\n // Exponential Functions\n\n // Returns `x` raised to the `y` power, i.e., `xʸ`. Results are undefined if `x < 0`. Results are undefined if `x = 0` and `y <= 0`.\n float pow(float x, float y);\n // Returns `x` raised to the `y` power, i.e., `xʸ`. Results are undefined if `x < 0`. Results are undefined if `x = 0` and `y <= 0`.\n vec2 pow(vec2 x, vec2 y);\n // Returns `x` raised to the `y` power, i.e., `xʸ`. Results are undefined if `x < 0`. Results are undefined if `x = 0` and `y <= 0`.\n vec3 pow(vec3 x, vec3 y);\n // Returns `x` raised to the `y` power, i.e., `xʸ`. Results are undefined if `x < 0`. Results are undefined if `x = 0` and `y <= 0`.\n vec4 pow(vec4 x, vec4 y);\n\n // Returns the natural exponentiation of `x`, i.e., `eˣ`\n float exp(float x);\n // Returns the natural exponentiation of `x`, i.e., `eˣ`\n vec2 exp(vec2 x);\n // Returns the natural exponentiation of `x`, i.e., `eˣ`\n vec3 exp(vec3 x);\n // Returns the natural exponentiation of `x`, i.e., `eˣ`\n vec4 exp(vec4 x);\n\n // Returns the natural logarithm of `x`, i.e., returns the value `y` which satisfies the equation `x = eʸ`. Results are undefined if `x <= 0`.\n float log(float x);\n // Returns the natural logarithm of `x`, i.e., returns the value `y` which satisfies the equation `x = eʸ`. Results are undefined if `x <= 0`.\n vec2 log(vec2 x);\n // Returns the natural logarithm of `x`, i.e., returns the value `y` which satisfies the equation `x = eʸ`. Results are undefined if `x <= 0`.\n vec3 log(vec3 x);\n // Returns the natural logarithm of `x`, i.e., returns the value `y` which satisfies the equation `x = eʸ`. Results are undefined if `x <= 0`.\n vec4 log(vec4 x);\n\n // Returns 2 raised to the `x` power, i.e., `2ˣ`.\n float exp2(float x);\n // Returns 2 raised to the `x` power, i.e., `2ˣ`.\n vec2 exp2(vec2 x);\n // Returns 2 raised to the `x` power, i.e., `2ˣ`.\n vec3 exp2(vec3 x);\n // Returns 2 raised to the `x` power, i.e., `2ˣ`.\n vec4 exp2(vec4 x);\n\n // Returns the base 2 logarithm of `x`, i.e., returns the value `y` which satisfies the equation `x = 2ʸ`. Results are undefined if `x <= 0`.\n float log2(float x);\n // Returns the base 2 logarithm of `x`, i.e., returns the value `y` which satisfies the equation `x = 2ʸ`. Results are undefined if `x <= 0`.\n vec2 log2(vec2 x);\n // Returns the base 2 logarithm of `x`, i.e., returns the value `y` which satisfies the equation `x = 2ʸ`. Results are undefined if `x <= 0`.\n vec3 log2(vec3 x);\n // Returns the base 2 logarithm of `x`, i.e., returns the value `y` which satisfies the equation `x = 2ʸ`. Results are undefined if `x <= 0`.\n vec4 log2(vec4 x);\n\n // Returns `√x`. Results are undefined if `x < 0`.\n float sqrt(float x);\n // Returns `√x`. Results are undefined if `x < 0`.\n vec2 sqrt(vec2 x);\n // Returns `√x`. Results are undefined if `x < 0`.\n vec3 sqrt(vec3 x);\n // Returns `√x`. Results are undefined if `x < 0`.\n vec4 sqrt(vec4 x);\n\n // Returns `1 / √x`. Results are undefined if `x <= 0`.\n float inversesqrt(float x);\n // Returns `1 / √x`. Results are undefined if `x <= 0`.\n vec2 inversesqrt(vec2 x);\n // Returns `1 / √x`. Results are undefined if `x <= 0`.\n vec3 inversesqrt(vec3 x);\n // Returns `1 / √x`. Results are undefined if `x <= 0`.\n vec4 inversesqrt(vec4 x);\n\n ////////////////////////////////////////////////////////////////////////////////\n // Common Functions\n\n // Returns `x` if `x >= 0`, otherwise it returns `-x`.\n float abs(float x);\n // Returns `x` if `x >= 0`, otherwise it returns `-x`.\n vec2 abs(vec2 x);\n // Returns `x` if `x >= 0`, otherwise it returns `-x`.\n vec3 abs(vec3 x);\n // Returns `x` if `x >= 0`, otherwise it returns `-x`.\n vec4 abs(vec4 x);\n\n // Returns `x` if `x >= 0`, otherwise it returns `-x`.\n int abs(int x);\n // Returns `x` if `x >= 0`, otherwise it returns `-x`.\n ivec2 abs(ivec2 x);\n // Returns `x` if `x >= 0`, otherwise it returns `-x`.\n ivec3 abs(ivec3 x);\n // Returns `x` if `x >= 0`, otherwise it returns `-x`.\n ivec4 abs(ivec4 x);\n\n // Returns `1.0` if `x > 0`, `0.0` if `x = 0`, or `-1.0` if `x < 0`.\n float sign(float x);\n // Returns `1.0` if `x > 0`, `0.0` if `x = 0`, or `-1.0` if `x < 0`.\n vec2 sign(vec2 x);\n // Returns `1.0` if `x > 0`, `0.0` if `x = 0`, or `-1.0` if `x < 0`.\n vec3 sign(vec3 x);\n // Returns `1.0` if `x > 0`, `0.0` if `x = 0`, or `-1.0` if `x < 0`.\n vec4 sign(vec4 x);\n\n // Returns `1` if `x > 0`, `0` if `x = 0`, or `-1` if `x < 0`.\n int sign(int x);\n // Returns `1` if `x > 0`, `0` if `x = 0`, or `-1` if `x < 0`.\n ivec2 sign(ivec2 x);\n // Returns `1` if `x > 0`, `0` if `x = 0`, or `-1` if `x < 0`.\n ivec3 sign(ivec3 x);\n // Returns `1` if `x > 0`, `0` if `x = 0`, or `-1` if `x < 0`.\n ivec4 sign(ivec4 x);\n\n // Returns a value equal to the nearest integer that is less than or equal to `x`\n float floor(float x);\n // Returns a value equal to the nearest integer that is less than or equal to `x`\n vec2 floor(vec2 x);\n // Returns a value equal to the nearest integer that is less than or equal to `x`\n vec3 floor(vec3 x);\n // Returns a value equal to the nearest integer that is less than or equal to `x`\n vec4 floor(vec4 x);\n\n // Returns a value equal to the nearest integer to `x` whose absolute value is not larger than the absolute value of `x`.\n float trunc(float x);\n // Returns a value equal to the nearest integer to `x` whose absolute value is not larger than the absolute value of `x`.\n vec2 trunc(vec2 x);\n // Returns a value equal to the nearest integer to `x` whose absolute value is not larger than the absolute value of `x`.\n vec3 trunc(vec3 x);\n // Returns a value equal to the nearest integer to `x` whose absolute value is not larger than the absolute value of `x`.\n vec4 trunc(vec4 x);\n\n // Returns a value equal to the nearest integer to `x`. The fraction `0.5` will round in a direction chosen by the implementation.\n float round(float x);\n // Returns a value equal to the nearest integer to `x`. The fraction `0.5` will round in a direction chosen by the implementation.\n vec2 round(vec2 x);\n // Returns a value equal to the nearest integer to `x`. The fraction `0.5` will round in a direction chosen by the implementation.\n vec3 round(vec3 x);\n // Returns a value equal to the nearest integer to `x`. The fraction `0.5` will round in a direction chosen by the implementation.\n vec4 round(vec4 x);\n\n // Returns a value equal to the nearest integer to `x`. A fractional part of `0.5` will round toward the nearest even integer.\n float roundEven(float x);\n // Returns a value equal to the nearest integer to `x`. A fractional part of `0.5` will round toward the nearest even integer.\n vec2 roundEven(vec2 x);\n // Returns a value equal to the nearest integer to `x`. A fractional part of `0.5` will round toward the nearest even integer.\n vec3 roundEven(vec3 x);\n // Returns a value equal to the nearest integer to `x`. A fractional part of `0.5` will round toward the nearest even integer.\n vec4 roundEven(vec4 x);\n\n // Returns a value equal to the nearest integer that is greater than or equal to `x`\n float ceil(float x);\n // Returns a value equal to the nearest integer that is greater than or equal to `x`\n vec2 ceil(vec2 x);\n // Returns a value equal to the nearest integer that is greater than or equal to `x`\n vec3 ceil(vec3 x);\n // Returns a value equal to the nearest integer that is greater than or equal to `x`\n vec4 ceil(vec4 x);\n\n // Returns `x - floor(x)`\n float fract(float x);\n // Returns `x - floor(x)`\n vec2 fract(vec2 x);\n // Returns `x - floor(x)`\n vec3 fract(vec3 x);\n // Returns `x - floor(x)`\n vec4 fract(vec4 x);\n\n // Modulus. Returns `x - y * floor(x/y)`\n float mod(float x, float y);\n // Modulus. Returns `x - y * floor(x/y)`\n vec2 mod(vec2 x, float y);\n // Modulus. Returns `x - y * floor(x/y)`\n vec3 mod(vec3 x, float y);\n // Modulus. Returns `x - y * floor(x/y)`\n vec4 mod(vec4 x, float y);\n\n // Modulus. Returns `x - y * floor(x/y)`\n vec2 mod(vec2 x, vec2 y);\n // Modulus. Returns `x - y * floor(x/y)`\n vec3 mod(vec3 x, vec3 y);\n // Modulus. Returns `x - y * floor(x/y)`\n vec4 mod(vec4 x, vec4 y);\n\n // Returns the fractional part of `x` and sets `i` to the integer part (as a whole number floating point value).\n // Both the return value and the output parameter will have the same sign as `x`.\n // If `x` has the value `+/- INF`, the return value should be `NaN` and must be either `NaN` or `0.0`.\n float modf(float x, out float i);\n // Returns the fractional part of `x` and sets `i` to the integer part (as a whole number floating point value).\n // Both the return value and the output parameter will have the same sign as `x`.\n // If `x` has the value `+/- INF`, the return value should be `NaN` and must be either `NaN` or `0.0`.\n vec2 modf(vec2 x, out vec2 i);\n // Returns the fractional part of `x` and sets `i` to the integer part (as a whole number floating point value).\n // Both the return value and the output parameter will have the same sign as `x`.\n // If `x` has the value `+/- INF`, the return value should be `NaN` and must be either `NaN` or `0.0`.\n vec3 modf(vec3 x, out vec3 i);\n // Returns the fractional part of `x` and sets `i` to the integer part (as a whole number floating point value).\n // Both the return value and the output parameter will have the same sign as `x`.\n // If `x` has the value `+/- INF`, the return value should be `NaN` and must be either `NaN` or `0.0`.\n vec4 modf(vec4 x, out vec4 i);\n\n // Returns `y` if `y < x`, otherwise it returns `x`.\n float min(float x, float y);\n // Returns `y` if `y < x`, otherwise it returns `x`.\n vec2 min(vec2 x, float y);\n // Returns `y` if `y < x`, otherwise it returns `x`.\n vec2 min(vec2 x, vec2 y);\n // Returns `y` if `y < x`, otherwise it returns `x`.\n vec3 min(vec3 x, float y);\n // Returns `y` if `y < x`, otherwise it returns `x`.\n vec3 min(vec3 x, vec3 y);\n // Returns `y` if `y < x`, otherwise it returns `x`.\n vec4 min(vec4 x, float y);\n // Returns `y` if `y < x`, otherwise it returns `x`.\n vec4 min(vec4 x, vec4 y);\n\n // Returns `y` if `y < x`, otherwise it returns `x`.\n int min(int x, int y);\n // Returns `y` if `y < x`, otherwise it returns `x`.\n ivec2 min(ivec2 x, int y);\n // Returns `y` if `y < x`, otherwise it returns `x`.\n ivec2 min(ivec2 x, ivec2 y);\n // Returns `y` if `y < x`, otherwise it returns `x`.\n ivec3 min(ivec3 x, int y);\n // Returns `y` if `y < x`, otherwise it returns `x`.\n ivec3 min(ivec3 x, ivec3 y);\n // Returns `y` if `y < x`, otherwise it returns `x`.\n ivec4 min(ivec4 x, int y);\n // Returns `y` if `y < x`, otherwise it returns `x`.\n ivec4 min(ivec4 x, ivec4 y);\n\n // Returns `y` if `y < x`, otherwise it returns `x`.\n uint min(uint x, uint y);\n // Returns `y` if `y < x`, otherwise it returns `x`.\n uvec2 min(uvec2 x, uint y);\n // Returns `y` if `y < x`, otherwise it returns `x`.\n uvec2 min(uvec2 x, uvec2 y);\n // Returns `y` if `y < x`, otherwise it returns `x`.\n uvec3 min(uvec3 x, uint y);\n // Returns `y` if `y < x`, otherwise it returns `x`.\n uvec3 min(uvec3 x, uvec3 y);\n // Returns `y` if `y < x`, otherwise it returns `x`.\n uvec4 min(uvec4 x, uint y);\n // Returns `y` if `y < x`, otherwise it returns `x`.\n uvec4 min(uvec4 x, uvec4 y);\n\n // Returns `y` if `x < y`, otherwise it returns `x`.\n float max(float x, float y);\n // Returns `y` if `x < y`, otherwise it returns `x`.\n vec2 max(vec2 x, float y);\n // Returns `y` if `x < y`, otherwise it returns `x`.\n vec2 max(vec2 x, vec2 y);\n // Returns `y` if `x < y`, otherwise it returns `x`.\n vec3 max(vec3 x, float y);\n // Returns `y` if `x < y`, otherwise it returns `x`.\n vec3 max(vec3 x, vec3 y);\n // Returns `y` if `x < y`, otherwise it returns `x`.\n vec4 max(vec4 x, float y);\n // Returns `y` if `x < y`, otherwise it returns `x`.\n vec4 max(vec4 x, vec4 y);\n\n // Returns `y` if `x < y`, otherwise it returns `x`.\n int max(int x, int y);\n // Returns `y` if `x < y`, otherwise it returns `x`.\n ivec2 max(ivec2 x, int y);\n // Returns `y` if `x < y`, otherwise it returns `x`.\n ivec2 max(ivec2 x, ivec2 y);\n // Returns `y` if `x < y`, otherwise it returns `x`.\n ivec3 max(ivec3 x, int y);\n // Returns `y` if `x < y`, otherwise it returns `x`.\n ivec3 max(ivec3 x, ivec3 y);\n // Returns `y` if `x < y`, otherwise it returns `x`.\n ivec4 max(ivec4 x, int y);\n // Returns `y` if `x < y`, otherwise it returns `x`.\n ivec4 max(ivec4 x, ivec4 y);\n\n // Returns `y` if `x < y`, otherwise it returns `x`.\n uint max(uint x, uint y);\n // Returns `y` if `x < y`, otherwise it returns `x`.\n uvec2 max(uvec2 x, uint y);\n // Returns `y` if `x < y`, otherwise it returns `x`.\n uvec2 max(uvec2 x, uvec2 y);\n // Returns `y` if `x < y`, otherwise it returns `x`.\n uvec3 max(uvec3 x, uint y);\n // Returns `y` if `x < y`, otherwise it returns `x`.\n uvec3 max(uvec3 x, uvec3 y);\n // Returns `y` if `x < y`, otherwise it returns `x`.\n uvec4 max(uvec4 x, uint y);\n // Returns `y` if `x < y`, otherwise it returns `x`.\n uvec4 max(uvec4 x, uvec4 y);\n\n // Returns `min(max(x, minVal), maxVal)`. Results are undefined if `minVal > maxVal`.\n float clamp(float x, float minVal, float maxVal);\n // Returns `min(max(x, minVal), maxVal)`. Results are undefined if `minVal > maxVal`.\n vec2 clamp(vec2 x, float minVal, float maxVal);\n // Returns `min(max(x, minVal), maxVal)`. Results are undefined if `minVal > maxVal`.\n vec2 clamp(vec2 x, vec2 minVal, vec2 maxVal);\n // Returns `min(max(x, minVal), maxVal)`. Results are undefined if `minVal > maxVal`.\n vec3 clamp(vec3 x, float minVal, float maxVal);\n // Returns `min(max(x, minVal), maxVal)`. Results are undefined if `minVal > maxVal`.\n vec3 clamp(vec3 x, vec3 minVal, vec3 maxVal);\n // Returns `min(max(x, minVal), maxVal)`. Results are undefined if `minVal > maxVal`.\n vec4 clamp(vec4 x, float minVal, float maxVal);\n // Returns `min(max(x, minVal), maxVal)`. Results are undefined if `minVal > maxVal`.\n vec4 clamp(vec4 x, vec4 minVal, vec4 maxVal);\n\n // Returns `min(max(x, minVal), maxVal)`. Results are undefined if `minVal > maxVal`.\n int clamp(int x, int minVal, int maxVal);\n // Returns `min(max(x, minVal), maxVal)`. Results are undefined if `minVal > maxVal`.\n ivec2 clamp(ivec2 x, int minVal, int maxVal);\n // Returns `min(max(x, minVal), maxVal)`. Results are undefined if `minVal > maxVal`.\n ivec2 clamp(ivec2 x, ivec2 minVal, ivec2 maxVal);\n // Returns `min(max(x, minVal), maxVal)`. Results are undefined if `minVal > maxVal`.\n ivec3 clamp(ivec3 x, int minVal, int maxVal);\n // Returns `min(max(x, minVal), maxVal)`. Results are undefined if `minVal > maxVal`.\n ivec3 clamp(ivec3 x, ivec3 minVal, ivec3 maxVal);\n // Returns `min(max(x, minVal), maxVal)`. Results are undefined if `minVal > maxVal`.\n ivec4 clamp(ivec4 x, int minVal, int maxVal);\n // Returns `min(max(x, minVal), maxVal)`. Results are undefined if `minVal > maxVal`.\n ivec4 clamp(ivec4 x, ivec4 minVal, ivec4 maxVal);\n\n // Returns `min(max(x, minVal), maxVal)`. Results are undefined if `minVal > maxVal`.\n uint clamp(uint x, uint minVal, uint maxVal);\n // Returns `min(max(x, minVal), maxVal)`. Results are undefined if `minVal > maxVal`.\n uvec2 clamp(uvec2 x, uint minVal, uint maxVal);\n // Returns `min(max(x, minVal), maxVal)`. Results are undefined if `minVal > maxVal`.\n uvec2 clamp(uvec2 x, uvec2 minVal, uvec2 maxVal);\n // Returns `min(max(x, minVal), maxVal)`. Results are undefined if `minVal > maxVal`.\n uvec3 clamp(uvec3 x, uint minVal, uint maxVal);\n // Returns `min(max(x, minVal), maxVal)`. Results are undefined if `minVal > maxVal`.\n uvec3 clamp(uvec3 x, uvec3 minVal, uvec3 maxVal);\n // Returns `min(max(x, minVal), maxVal)`. Results are undefined if `minVal > maxVal`.\n uvec4 clamp(uvec4 x, uint minVal, uint maxVal);\n // Returns `min(max(x, minVal), maxVal)`. Results are undefined if `minVal > maxVal`.\n uvec4 clamp(uvec4 x, uvec4 minVal, uvec4 maxVal);\n\n // Returns the linear blend of `x` and `y`, i.e. `x * (1-a) + y * a`\n float mix(float x, float y, float a);\n // Returns the linear blend of `x` and `y`, i.e. `x * (1-a) + y * a`\n vec2 mix(vec2 x, vec2 y, float a);\n // Returns the linear blend of `x` and `y`, i.e. `x * (1-a) + y * a`\n vec2 mix(vec2 x, vec2 y, vec2 a);\n // Returns the linear blend of `x` and `y`, i.e. `x * (1-a) + y * a`\n vec3 mix(vec3 x, vec3 y, float a);\n // Returns the linear blend of `x` and `y`, i.e. `x * (1-a) + y * a`\n vec3 mix(vec3 x, vec3 y, vec3 a);\n // Returns the linear blend of `x` and `y`, i.e. `x * (1-a) + y * a`\n vec4 mix(vec4 x, vec4 y, float a);\n // Returns the linear blend of `x` and `y`, i.e. `x * (1-a) + y * a`\n vec4 mix(vec4 x, vec4 y, vec4 a);\n\n // Selects which vector each returned component comes from. For a component of `a` that is\n // false, the corresponding component of `x` is returned. For a component of `a` that is true,\n // the corresponding component of `y` is returned.\n float mix(float x, float y, bool a);\n // Selects which vector each returned component comes from. For a component of `a` that is\n // false, the corresponding component of `x` is returned. For a component of `a` that is true,\n // the corresponding component of `y` is returned.\n vec2 mix(vec2 x, vec2 y, bvec2 a);\n // Selects which vector each returned component comes from. For a component of `a` that is\n // false, the corresponding component of `x` is returned. For a component of `a` that is true,\n // the corresponding component of `y` is returned.\n vec3 mix(vec3 x, vec3 y, bvec3 a);\n // Selects which vector each returned component comes from. For a component of `a` that is\n // false, the corresponding component of `x` is returned. For a component of `a` that is true,\n // the corresponding component of `y` is returned.\n vec4 mix(vec4 x, vec4 y, bvec4 a);\n\n // Returns `0.0` if `x < edge`, otherwise it returns `1.0`\n float step(float edge, float x);\n // Returns `0.0` if `x < edge`, otherwise it returns `1.0`\n vec2 step(float edge, vec2 x);\n // Returns `0.0` if `x < edge`, otherwise it returns `1.0`\n vec2 step(vec2 edge, vec2 x);\n // Returns `0.0` if `x < edge`, otherwise it returns `1.0`\n vec3 step(float edge, vec3 x);\n // Returns `0.0` if `x < edge`, otherwise it returns `1.0`\n vec3 step(vec3 edge, vec3 x);\n // Returns `0.0` if `x < edge`, otherwise it returns `1.0`\n vec4 step(float edge, vec4 x);\n // Returns `0.0` if `x < edge`, otherwise it returns `1.0`\n vec4 step(vec4 edge, vec4 x);\n\n // Returns `0.0` if `x <= edge0` and `1.0` if `x >= edge1` and performs smooth Hermite interpolation between 0 and 1 when `edge0 < x < edge1`.\n // This is useful in cases where you would want a threshold function with a smooth transition. This is equivalent to:\n //\n // ```glslx\n // float t = clamp((x - edge0) / (edge1 - edge0), 0.0, 1.0);\n // return t * t * (3.0 - 2.0 * t);\n // ```\n //\n // Results are undefined if `edge0 >= edge1`.\n float smoothstep(float edge0, float edge1, float x);\n // Returns `0.0` if `x <= edge0` and `1.0` if `x >= edge1` and performs smooth Hermite interpolation between 0 and 1 when `edge0 < x < edge1`.\n // This is useful in cases where you would want a threshold function with a smooth transition. This is equivalent to:\n //\n // ```glslx\n // vec2 t = clamp((x - edge0) / (edge1 - edge0), 0.0, 1.0);\n // return t * t * (3.0 - 2.0 * t);\n // ```\n //\n // Results are undefined if `edge0 >= edge1`.\n vec2 smoothstep(float edge0, float edge1, vec2 x);\n // Returns `0.0` if `x <= edge0` and `1.0` if `x >= edge1` and performs smooth Hermite interpolation between 0 and 1 when `edge0 < x < edge1`.\n // This is useful in cases where you would want a threshold function with a smooth transition. This is equivalent to:\n //\n // ```glslx\n // vec2 t = clamp((x - edge0) / (edge1 - edge0), 0.0, 1.0);\n // return t * t * (3.0 - 2.0 * t);\n // ```\n //\n // Results are undefined if `edge0 >= edge1`.\n vec2 smoothstep(vec2 edge0, vec2 edge1, vec2 x);\n // Returns `0.0` if `x <= edge0` and `1.0` if `x >= edge1` and performs smooth Hermite interpolation between 0 and 1 when `edge0 < x < edge1`.\n // This is useful in cases where you would want a threshold function with a smooth transition. This is equivalent to:\n //\n // ```glslx\n // vec3 t = clamp((x - edge0) / (edge1 - edge0), 0.0, 1.0);\n // return t * t * (3.0 - 2.0 * t);\n // ```\n //\n // Results are undefined if `edge0 >= edge1`.\n vec3 smoothstep(float edge0, float edge1, vec3 x);\n // Returns `0.0` if `x <= edge0` and `1.0` if `x >= edge1` and performs smooth Hermite interpolation between 0 and 1 when `edge0 < x < edge1`.\n // This is useful in cases where you would want a threshold function with a smooth transition. This is equivalent to:\n //\n // ```glslx\n // vec3 t = clamp((x - edge0) / (edge1 - edge0), 0.0, 1.0);\n // return t * t * (3.0 - 2.0 * t);\n // ```\n //\n // Results are undefined if `edge0 >= edge1`.\n vec3 smoothstep(vec3 edge0, vec3 edge1, vec3 x);\n // Returns `0.0` if `x <= edge0` and `1.0` if `x >= edge1` and performs smooth Hermite interpolation between 0 and 1 when `edge0 < x < edge1`.\n // This is useful in cases where you would want a threshold function with a smooth transition. This is equivalent to:\n //\n // ```glslx\n // vec4 t = clamp((x - edge0) / (edge1 - edge0), 0.0, 1.0);\n // return t * t * (3.0 - 2.0 * t);\n // ```\n //\n // Results are undefined if `edge0 >= edge1`.\n vec4 smoothstep(float edge0, float edge1, vec4 x);\n // Returns `0.0` if `x <= edge0` and `1.0` if `x >= edge1` and performs smooth Hermite interpolation between 0 and 1 when `edge0 < x < edge1`.\n // This is useful in cases where you would want a threshold function with a smooth transition. This is equivalent to:\n //\n // ```glslx\n // vec4 t = clamp((x - edge0) / (edge1 - edge0), 0.0, 1.0);\n // return t * t * (3.0 - 2.0 * t);\n // ```\n //\n // Results are undefined if `edge0 >= edge1`.\n vec4 smoothstep(vec4 edge0, vec4 edge1, vec4 x);\n\n // Returns `true` if `x` holds a NaN. Returns `false` otherwise.\n bool isnan(float x);\n // Returns `true` if `x` holds a NaN. Returns `false` otherwise.\n bvec2 isnan(vec2 x);\n // Returns `true` if `x` holds a NaN. Returns `false` otherwise.\n bvec3 isnan(vec3 x);\n // Returns `true` if `x` holds a NaN. Returns `false` otherwise.\n bvec4 isnan(vec4 x);\n\n // Returns `true` if `x` holds a positive infinity or negative infinity. Returns `false` otherwise.\n bool isinf(float x);\n // Returns `true` if `x` holds a positive infinity or negative infinity. Returns `false` otherwise.\n bvec2 isinf(vec2 x);\n // Returns `true` if `x` holds a positive infinity or negative infinity. Returns `false` otherwise.\n bvec3 isinf(vec3 x);\n // Returns `true` if `x` holds a positive infinity or negative infinity. Returns `false` otherwise.\n bvec4 isinf(vec4 x);\n\n // Returns a signed or unsigned `highp` integer value representing the encoding of a floating-point value.\n // For `highp` floating point, the value's bit level representation is preserved.\n // For `mediump` and `lowp`, the value is first converted to `highp` floating point and the encoding of that value is returned.\n int floatBitsToInt(float value);\n // Returns a signed or unsigned `highp` integer value representing the encoding of a floating-point value.\n // For `highp` floating point, the value's bit level representation is preserved.\n // For `mediump` and `lowp`, the value is first converted to `highp` floating point and the encoding of that value is returned.\n ivec2 floatBitsToInt(vec2 value);\n // Returns a signed or unsigned `highp` integer value representing the encoding of a floating-point value.\n // For `highp` floating point, the value's bit level representation is preserved.\n // For `mediump` and `lowp`, the value is first converted to `highp` floating point and the encoding of that value is returned.\n ivec3 floatBitsToInt(vec3 value);\n // Returns a signed or unsigned `highp` integer value representing the encoding of a floating-point value.\n // For `highp` floating point, the value's bit level representation is preserved.\n // For `mediump` and `lowp`, the value is first converted to `highp` floating point and the encoding of that value is returned.\n ivec4 floatBitsToInt(vec4 value);\n\n // Returns a signed or unsigned `highp` integer value representing the encoding of a floating-point value.\n // For `highp` floating point, the value's bit level representation is preserved.\n // For `mediump` and `lowp`, the value is first converted to `highp` floating point and the encoding of that value is returned.\n uint floatBitsToUint(float value);\n // Returns a signed or unsigned `highp` integer value representing the encoding of a floating-point value.\n // For `highp` floating point, the value's bit level representation is preserved.\n // For `mediump` and `lowp`, the value is first converted to `highp` floating point and the encoding of that value is returned.\n uvec2 floatBitsToUint(vec2 value);\n // Returns a signed or unsigned `highp` integer value representing the encoding of a floating-point value.\n // For `highp` floating point, the value's bit level representation is preserved.\n // For `mediump` and `lowp`, the value is first converted to `highp` floating point and the encoding of that value is returned.\n uvec3 floatBitsToUint(vec3 value);\n // Returns a signed or unsigned `highp` integer value representing the encoding of a floating-point value.\n // For `highp` floating point, the value's bit level representation is preserved.\n // For `mediump` and `lowp`, the value is first converted to `highp` floating point and the encoding of that value is returned.\n uvec4 floatBitsToUint(vec4 value);\n\n // Returns a `highp` floating-point value corresponding to a signed or unsigned integer encoding of a floating-point\n // value. If an `inf` or `NaN` is passed in, it will not signal, and the resulting floating point value is unspecified.\n // Otherwise, the bit-level representation is preserved. For `lowp` and `mediump`, the value is first converted to the\n // corresponding signed or unsigned `highp` integer and then reinterpreted as a `highp` floating point value as before.\n float intBitsToFloat(int value);\n // Returns a `highp` floating-point value corresponding to a signed or unsigned integer encoding of a floating-point\n // value. If an `inf` or `NaN` is passed in, it will not signal, and the resulting floating point value is unspecified.\n // Otherwise, the bit-level representation is preserved. For `lowp` and `mediump`, the value is first converted to the\n // corresponding signed or unsigned `highp` integer and then reinterpreted as a `highp` floating point value as before.\n vec2 intBitsToFloat(ivec2 value);\n // Returns a `highp` floating-point value corresponding to a signed or unsigned integer encoding of a floating-point\n // value. If an `inf` or `NaN` is passed in, it will not signal, and the resulting floating point value is unspecified.\n // Otherwise, the bit-level representation is preserved. For `lowp` and `mediump`, the value is first converted to the\n // corresponding signed or unsigned `highp` integer and then reinterpreted as a `highp` floating point value as before.\n vec3 intBitsToFloat(ivec3 value);\n // Returns a `highp` floating-point value corresponding to a signed or unsigned integer encoding of a floating-point\n // value. If an `inf` or `NaN` is passed in, it will not signal, and the resulting floating point value is unspecified.\n // Otherwise, the bit-level representation is preserved. For `lowp` and `mediump`, the value is first converted to the\n // corresponding signed or unsigned `highp` integer and then reinterpreted as a `highp` floating point value as before.\n vec4 intBitsToFloat(ivec4 value);\n\n // Returns a `highp` floating-point value corresponding to a signed or unsigned integer encoding of a floating-point\n // value. If an `inf` or `NaN` is passed in, it will not signal, and the resulting floating point value is unspecified.\n // Otherwise, the bit-level representation is preserved. For `lowp` and `mediump`, the value is first converted to the\n // corresponding signed or unsigned `highp` integer and then reinterpreted as a `highp` floating point value as before.\n float intBitsToFloat(uint value);\n // Returns a `highp` floating-point value corresponding to a signed or unsigned integer encoding of a floating-point\n // value. If an `inf` or `NaN` is passed in, it will not signal, and the resulting floating point value is unspecified.\n // Otherwise, the bit-level representation is preserved. For `lowp` and `mediump`, the value is first converted to the\n // corresponding signed or unsigned `highp` integer and then reinterpreted as a `highp` floating point value as before.\n vec2 intBitsToFloat(uvec2 value);\n // Returns a `highp` floating-point value corresponding to a signed or unsigned integer encoding of a floating-point\n // value. If an `inf` or `NaN` is passed in, it will not signal, and the resulting floating point value is unspecified.\n // Otherwise, the bit-level representation is preserved. For `lowp` and `mediump`, the value is first converted to the\n // corresponding signed or unsigned `highp` integer and then reinterpreted as a `highp` floating point value as before.\n vec3 intBitsToFloat(uvec3 value);\n // Returns a `highp` floating-point value corresponding to a signed or unsigned integer encoding of a floating-point\n // value. If an `inf` or `NaN` is passed in, it will not signal, and the resulting floating point value is unspecified.\n // Otherwise, the bit-level representation is preserved. For `lowp` and `mediump`, the value is first converted to the\n // corresponding signed or unsigned `highp` integer and then reinterpreted as a `highp` floating point value as before.\n vec4 intBitsToFloat(uvec4 value);\n\n ////////////////////////////////////////////////////////////////////////////////\n // Floating-Point Pack and Unpack Functions\n\n // First, converts each component of the normalized floating-point value `v` into 16-bit integer values. Then,\n // the results are packed into the returned 32-bit unsigned integer. The conversion for component `c` of `v` to\n // fixed point is done as follows:\n //\n // ```glslx\n // packSnorm2x16: round(clamp(c, -1, +1) * 32767.0)\n // ```\n //\n // The first component of the vector will be written to the least significant bits of the output; the last component\n // will be written to the most significant bits.\n highp uint packSnorm2x16(vec2 v);\n // First, unpacks a single 32-bit unsigned integer `p` into a pair of 16-bit signed integers. Then, each component is\n // converted to a normalized floating-point value to generate the returned two-component vector. The conversion for\n // unpacked fixed-point value `f` to floating point is done as follows:\n //\n // ```glslx\n // unpackSnorm2x16: clamp(f / 32767.0, -1, +1)\n //\n // The first component of the returned vector will be extracted from the least significant bits of the input; the\n // last component will be extracted from the most significant bits.\n highp vec2 unpackSnorm2x16(highp uint p);\n\n // First, converts each component of the normalized floating-point value `v` into 16-bit integer values. Then,\n // the results are packed into the returned 32-bit unsigned integer. The conversion for component `c` of `v` to\n // fixed point is done as follows:\n //\n // ```glslx\n // packUnorm2x16: round(clamp(c, 0, +1) * 65535.0)\n // ```\n //\n // The first component of the vector will be written to the least significant bits of the output; the last component\n // will be written to the most significant bits.\n highp uint packUnorm2x16(vec2 v);\n // First, unpacks a single 32-bit unsigned integer `p` into a pair of 16-bit unsigned integers. Then, each component\n // is converted to a normalized floating-point value to generate the returned two-component vector. The conversion for\n // unpacked fixed-point value `f` to floating point is done as follows:\n //\n // ```glslx\n // unpackUnorm2x16: f / 65535.0\n // ```\n //\n // The first component of the returned vector will be extracted from the least significant bits of the input; the\n // last component will be extracted from the most significant bits.\n highp vec2 unpackUnorm2x16(highp uint p);\n\n // Returns an unsigned integer obtained by converting the components of a two-component floating-point vector to\n // the 16-bit floating-point representation found in the OpenGL ES Specification, and then packing these two\n // 16-bit integers into a 32-bit unsigned integer.\n //\n // The first vector component specifies the 16 least-significant bits of the result; the second component\n // specifies the 16 most-significant bits.\n highp uint packHalf2x16(mediump vec2 v);\n // Returns a two-component floating-point vector with components obtained by unpacking a 32-bit unsigned\n // integer into a pair of 16-bit values, interpreting those values as 16-bit floating-point numbers according to the\n // OpenGL ES Specification, and converting them to 32-bit floating-point values.\n //\n // The first component of the vector is obtained from the 16 least-significant bits of `v`; the second component is\n // obtained from the 16 most-significant bits of `v`.\n mediump vec2 unpackHalf2x16(highp uint v);\n\n ////////////////////////////////////////////////////////////////////////////////\n // Geometric Functions\n\n // Returns the length of vector `x`, i.e. `√x²`\n float length(float x);\n // Returns the length of vector `x`, i.e. `√x[0]² + x[1]²`\n float length(vec2 x);\n // Returns the length of vector `x`, i.e. `√x[0]² + x[1]² + x[2]²`\n float length(vec3 x);\n // Returns the length of vector `x`, i.e. `√x[0]² + x[1]² + x[2]² + x[3]²`\n float length(vec4 x);\n\n // Returns the distance between `p0` and `p1`, i.e. `length(p0 - p1)`\n float distance(float p0, float p1);\n // Returns the distance between `p0` and `p1`, i.e. `length(p0 - p1)`\n float distance(vec2 p0, vec2 p1);\n // Returns the distance between `p0` and `p1`, i.e. `length(p0 - p1)`\n float distance(vec3 p0, vec3 p1);\n // Returns the distance between `p0` and `p1`, i.e. `length(p0 - p1)`\n float distance(vec4 p0, vec4 p1);\n\n // Returns the dot product of `x` and `y`, i.e. `x*y`\n float dot(float x, float y);\n // Returns the dot product of `x` and `y`, i.e. `x[0]*y[0] + x[1]*y[1]`\n float dot(vec2 x, vec2 y);\n // Returns the dot product of `x` and `y`, i.e. `x[0]*y[0] + x[1]*y[1] + x[2]*y[2]`\n float dot(vec3 x, vec3 y);\n // Returns the dot product of `x` and `y`, i.e. `x[0]*y[0] + x[1]*y[1] + x[2]*y[2] + x[3]*y[3]`\n float dot(vec4 x, vec4 y);\n\n // Returns the cross product of `x` and `y`, i.e.\n //\n // ```glslx\n // vec3(\n // x[1]*y[2] - y[1]*x[2],\n // x[2]*y[0] - y[2]*x[0],\n // x[0]*y[1] - y[0]*x[1])\n // ```\n vec3 cross(vec3 x, vec3 y);\n\n // Returns a vector in the same direction as `x` but with a length of 1 i.e. `x / length(x)`\n float normalize(float x);\n // Returns a vector in the same direction as `x` but with a length of 1 i.e. `x / length(x)`\n vec2 normalize(vec2 x);\n // Returns a vector in the same direction as `x` but with a length of 1 i.e. `x / length(x)`\n vec3 normalize(vec3 x);\n // Returns a vector in the same direction as `x` but with a length of 1 i.e. `x / length(x)`\n vec4 normalize(vec4 x);\n\n // If `dot(Nref, I) < 0` return `N`, otherwise return `-N`\n float faceforward(float N, float I, float Nref);\n // If `dot(Nref, I) < 0` return `N`, otherwise return `-N`\n vec2 faceforward(vec2 N, vec2 I, vec2 Nref);\n // If `dot(Nref, I) < 0` return `N`, otherwise return `-N`\n vec3 faceforward(vec3 N, vec3 I, vec3 Nref);\n // If `dot(Nref, I) < 0` return `N`, otherwise return `-N`\n vec4 faceforward(vec4 N, vec4 I, vec4 Nref);\n\n // For the incident vector `I` and surface orientation `N`, returns the reflection direction: `I - 2 * dot(N, I) * N`.\n // `N` must already be normalized in order to achieve the desired result.\n float reflect(float I, float N);\n // For the incident vector `I` and surface orientation `N`, returns the reflection direction: `I - 2 * dot(N, I) * N`.\n // `N` must already be normalized in order to achieve the desired result.\n vec2 reflect(vec2 I, vec2 N);\n // For the incident vector `I` and surface orientation `N`, returns the reflection direction: `I - 2 * dot(N, I) * N`.\n // `N` must already be normalized in order to achieve the desired result.\n vec3 reflect(vec3 I, vec3 N);\n // For the incident vector `I` and surface orientation `N`, returns the reflection direction: `I - 2 * dot(N, I) * N`.\n // `N` must already be normalized in order to achieve the desired result.\n vec4 reflect(vec4 I, vec4 N);\n\n // For the incident vector `I` and surface normal `N`, and the ratio of indices of refraction `eta`, return the refraction vector.\n // The result is computed by:\n //\n // ```glslx\n // float k = 1.0 - eta * eta * (1.0 - dot(N, I) * dot(N, I));\n // if (k < 0.0) return float(0.0);\n // else return eta * I - (eta * dot(N, I) + sqrt(k)) * N;\n // ```\n //\n // The input parameters for the incident vector `I` and the surface normal `N`.\n float refract(float I, float N, float eta);\n // For the incident vector `I` and surface normal `N`, and the ratio of indices of refraction `eta`, return the refraction vector.\n // The result is computed by:\n //\n // ```glslx\n // float k = 1.0 - eta * eta * (1.0 - dot(N, I) * dot(N, I));\n // if (k < 0.0) return vec2(0.0);\n // else return eta * I - (eta * dot(N, I) + sqrt(k)) * N;\n // ```\n //\n // The input parameters for the incident vector `I` and the surface normal `N`.\n vec2 refract(vec2 I, vec2 N, float eta);\n // For the incident vector `I` and surface normal `N`, and the ratio of indices of refraction `eta`, return the refraction vector.\n // The result is computed by:\n //\n // ```glslx\n // float k = 1.0 - eta * eta * (1.0 - dot(N, I) * dot(N, I));\n // if (k < 0.0) return vec3(0.0);\n // else return eta * I - (eta * dot(N, I) + sqrt(k)) * N;\n // ```\n //\n // The input parameters for the incident vector `I` and the surface normal `N`.\n vec3 refract(vec3 I, vec3 N, float eta);\n // For the incident vector `I` and surface normal `N`, and the ratio of indices of refraction `eta`, return the refraction vector.\n // The result is computed by:\n //\n // ```glslx\n // float k = 1.0 - eta * eta * (1.0 - dot(N, I) * dot(N, I));\n // if (k < 0.0) return vec4(0.0);\n // else return eta * I - (eta * dot(N, I) + sqrt(k)) * N;\n // ```\n //\n // The input parameters for the incident vector `I` and the surface normal `N`.\n vec4 refract(vec4 I, vec4 N, float eta);\n\n ////////////////////////////////////////////////////////////////////////////////\n // Matrix Functions\n\n // Multiply matrix `x` by matrix `y` component-wise, i.e., `result[i][j]` is the scalar product of `x[i][j]` and `y[i][j]`.\n // Note: to get linear algebraic matrix multiplication, use the multiply operator (`*`).\n mat2 matrixCompMult(mat2 x, mat2 y);\n // Multiply matrix `x` by matrix `y` component-wise, i.e., `result[i][j]` is the scalar product of `x[i][j]` and `y[i][j]`.\n // Note: to get linear algebraic matrix multiplication, use the multiply operator (`*`).\n mat3 matrixCompMult(mat3 x, mat3 y);\n // Multiply matrix `x` by matrix `y` component-wise, i.e., `result[i][j]` is the scalar product of `x[i][j]` and `y[i][j]`.\n // Note: to get linear algebraic matrix multiplication, use the multiply operator (`*`).\n mat4 matrixCompMult(mat4 x, mat4 y);\n\n // Treats the first parameter `c` as a column vector (matrix with one column) and the second parameter `r` as a row\n // vector (matrix with one row) and does a linear algebraic matrix multiply `c * r`, yielding a matrix whose number of\n // rows is the number of components in `c` and whose number of columns is the number of components in `r`.\n mat2 outerProduct(vec2 c, vec2 r);\n // Treats the first parameter `c` as a column vector (matrix with one column) and the second parameter `r` as a row\n // vector (matrix with one row) and does a linear algebraic matrix multiply `c * r`, yielding a matrix whose number of\n // rows is the number of components in `c` and whose number of columns is the number of components in `r`.\n mat3 outerProduct(vec3 c, vec3 r);\n // Treats the first parameter `c` as a column vector (matrix with one column) and the second parameter `r` as a row\n // vector (matrix with one row) and does a linear algebraic matrix multiply `c * r`, yielding a matrix whose number of\n // rows is the number of components in `c` and whose number of columns is the number of components in `r`.\n mat4 outerProduct(vec4 c, vec4 r);\n // Treats the first parameter `c` as a column vector (matrix with one column) and the second parameter `r` as a row\n // vector (matrix with one row) and does a linear algebraic matrix multiply `c * r`, yielding a matrix whose number of\n // rows is the number of components in `c` and whose number of columns is the number of components in `r`.\n mat2x3 outerProduct(vec3 c, vec2 r);\n // Treats the first parameter `c` as a column vector (matrix with one column) and the second parameter `r` as a row\n // vector (matrix with one row) and does a linear algebraic matrix multiply `c * r`, yielding a matrix whose number of\n // rows is the number of components in `c` and whose number of columns is the number of components in `r`.\n mat3x2 outerProduct(vec2 c, vec3 r);\n // Treats the first parameter `c` as a column vector (matrix with one column) and the second parameter `r` as a row\n // vector (matrix with one row) and does a linear algebraic matrix multiply `c * r`, yielding a matrix whose number of\n // rows is the number of components in `c` and whose number of columns is the number of components in `r`.\n mat2x4 outerProduct(vec4 c, vec2 r);\n // Treats the first parameter `c` as a column vector (matrix with one column) and the second parameter `r` as a row\n // vector (matrix with one row) and does a linear algebraic matrix multiply `c * r`, yielding a matrix whose number of\n // rows is the number of components in `c` and whose number of columns is the number of components in `r`.\n mat4x2 outerProduct(vec2 c, vec4 r);\n // Treats the first parameter `c` as a column vector (matrix with one column) and the second parameter `r` as a row\n // vector (matrix with one row) and does a linear algebraic matrix multiply `c * r`, yielding a matrix whose number of\n // rows is the number of components in `c` and whose number of columns is the number of components in `r`.\n mat3x4 outerProduct(vec4 c, vec3 r);\n // Treats the first parameter `c` as a column vector (matrix with one column) and the second parameter `r` as a row\n // vector (matrix with one row) and does a linear algebraic matrix multiply `c * r`, yielding a matrix whose number of\n // rows is the number of components in `c` and whose number of columns is the number of components in `r`.\n mat4x3 outerProduct(vec3 c, vec4 r);\n\n // Returns a matrix that is the transpose of `m`. The input matrix `m` is not modified.\n mat2 transpose(mat2 m);\n // Returns a matrix that is the transpose of `m`. The input matrix `m` is not modified.\n mat3 transpose(mat3 m);\n // Returns a matrix that is the transpose of `m`. The input matrix `m` is not modified.\n mat4 transpose(mat4 m);\n // Returns a matrix that is the transpose of `m`. The input matrix `m` is not modified.\n mat2x3 transpose(mat3x2 m);\n // Returns a matrix that is the transpose of `m`. The input matrix `m` is not modified.\n mat3x2 transpose(mat2x3 m);\n // Returns a matrix that is the transpose of `m`. The input matrix `m` is not modified.\n mat2x4 transpose(mat4x2 m);\n // Returns a matrix that is the transpose of `m`. The input matrix `m` is not modified.\n mat4x2 transpose(mat2x4 m);\n // Returns a matrix that is the transpose of `m`. The input matrix `m` is not modified.\n mat3x4 transpose(mat4x3 m);\n // Returns a matrix that is the transpose of `m`. The input matrix `m` is not modified.\n mat4x3 transpose(mat3x4 m);\n\n // Returns the determinant of `m`.\n float determinant(mat2 m);\n // Returns the determinant of `m`.\n float determinant(mat3 m);\n // Returns the determinant of `m`.\n float determinant(mat4 m);\n\n // Returns a matrix that is the inverse of `m`. The input matrix `m` is not modified. The values in\n // the returned matrix are undefined if `m` is singular or poorly-conditioned (nearly singular).\n mat2 inverse(mat2 m);\n // Returns a matrix that is the inverse of `m`. The input matrix `m` is not modified. The values in\n // the returned matrix are undefined if `m` is singular or poorly-conditioned (nearly singular).\n mat3 inverse(mat3 m);\n // Returns a matrix that is the inverse of `m`. The input matrix `m` is not modified. The values in\n // the returned matrix are undefined if `m` is singular or poorly-conditioned (nearly singular).\n mat4 inverse(mat4 m);\n\n ////////////////////////////////////////////////////////////////////////////////\n // Vector Relational Functions\n\n // Returns the component-wise compare of `x < y`.\n bvec2 lessThan(vec2 x, vec2 y);\n // Returns the component-wise compare of `x < y`.\n bvec2 lessThan(ivec2 x, ivec2 y);\n // Returns the component-wise compare of `x < y`.\n bvec2 lessThan(uvec2 x, uvec2 y);\n // Returns the component-wise compare of `x < y`.\n bvec3 lessThan(vec3 x, vec3 y);\n // Returns the component-wise compare of `x < y`.\n bvec3 lessThan(ivec3 x, ivec3 y);\n // Returns the component-wise compare of `x < y`.\n bvec3 lessThan(uvec3 x, uvec3 y);\n // Returns the component-wise compare of `x < y`.\n bvec4 lessThan(vec4 x, vec4 y);\n // Returns the component-wise compare of `x < y`.\n bvec4 lessThan(ivec4 x, ivec4 y);\n // Returns the component-wise compare of `x < y`.\n bvec4 lessThan(uvec4 x, uvec4 y);\n\n // Returns the component-wise compare of `x <= y`.\n bvec2 lessThanEqual(vec2 x, vec2 y);\n // Returns the component-wise compare of `x <= y`.\n bvec2 lessThanEqual(ivec2 x, ivec2 y);\n // Returns the component-wise compare of `x <= y`.\n bvec2 lessThanEqual(uvec2 x, uvec2 y);\n // Returns the component-wise compare of `x <= y`.\n bvec3 lessThanEqual(vec3 x, vec3 y);\n // Returns the component-wise compare of `x <= y`.\n bvec3 lessThanEqual(ivec3 x, ivec3 y);\n // Returns the component-wise compare of `x <= y`.\n bvec3 lessThanEqual(uvec3 x, uvec3 y);\n // Returns the component-wise compare of `x <= y`.\n bvec4 lessThanEqual(vec4 x, vec4 y);\n // Returns the component-wise compare of `x <= y`.\n bvec4 lessThanEqual(ivec4 x, ivec4 y);\n // Returns the component-wise compare of `x <= y`.\n bvec4 lessThanEqual(uvec4 x, uvec4 y);\n\n // Returns the component-wise compare of `x > y`.\n bvec2 greaterThan(vec2 x, vec2 y);\n // Returns the component-wise compare of `x > y`.\n bvec2 greaterThan(ivec2 x, ivec2 y);\n // Returns the component-wise compare of `x > y`.\n bvec2 greaterThan(uvec2 x, uvec2 y);\n // Returns the component-wise compare of `x > y`.\n bvec3 greaterThan(vec3 x, vec3 y);\n // Returns the component-wise compare of `x > y`.\n bvec3 greaterThan(ivec3 x, ivec3 y);\n // Returns the component-wise compare of `x > y`.\n bvec3 greaterThan(uvec3 x, uvec3 y);\n // Returns the component-wise compare of `x > y`.\n bvec4 greaterThan(vec4 x, vec4 y);\n // Returns the component-wise compare of `x > y`.\n bvec4 greaterThan(ivec4 x, ivec4 y);\n // Returns the component-wise compare of `x > y`.\n bvec4 greaterThan(uvec4 x, uvec4 y);\n\n // Returns the component-wise compare of `x >= y`.\n bvec2 greaterThanEqual(vec2 x, vec2 y);\n // Returns the component-wise compare of `x >= y`.\n bvec2 greaterThanEqual(ivec2 x, ivec2 y);\n // Returns the component-wise compare of `x >= y`.\n bvec2 greaterThanEqual(uvec2 x, uvec2 y);\n // Returns the component-wise compare of `x >= y`.\n bvec3 greaterThanEqual(vec3 x, vec3 y);\n // Returns the component-wise compare of `x >= y`.\n bvec3 greaterThanEqual(ivec3 x, ivec3 y);\n // Returns the component-wise compare of `x >= y`.\n bvec3 greaterThanEqual(uvec3 x, uvec3 y);\n // Returns the component-wise compare of `x >= y`.\n bvec4 greaterThanEqual(vec4 x, vec4 y);\n // Returns the component-wise compare of `x >= y`.\n bvec4 greaterThanEqual(ivec4 x, ivec4 y);\n // Returns the component-wise compare of `x >= y`.\n bvec4 greaterThanEqual(uvec4 x, uvec4 y);\n\n // Returns the component-wise compare of `x == y`.\n bvec2 equal(vec2 x, vec2 y);\n // Returns the component-wise compare of `x == y`.\n bvec2 equal(ivec2 x, ivec2 y);\n // Returns the component-wise compare of `x == y`.\n bvec2 equal(uvec2 x, uvec2 y);\n // Returns the component-wise compare of `x == y`.\n bvec2 equal(bvec2 x, bvec2 y);\n // Returns the component-wise compare of `x == y`.\n bvec3 equal(vec3 x, vec3 y);\n // Returns the component-wise compare of `x == y`.\n bvec3 equal(ivec3 x, ivec3 y);\n // Returns the component-wise compare of `x == y`.\n bvec3 equal(uvec3 x, uvec3 y);\n // Returns the component-wise compare of `x == y`.\n bvec3 equal(bvec3 x, bvec3 y);\n // Returns the component-wise compare of `x == y`.\n bvec4 equal(vec4 x, vec4 y);\n // Returns the component-wise compare of `x == y`.\n bvec4 equal(ivec4 x, ivec4 y);\n // Returns the component-wise compare of `x == y`.\n bvec4 equal(uvec4 x, uvec4 y);\n // Returns the component-wise compare of `x == y`.\n bvec4 equal(bvec4 x, bvec4 y);\n\n // Returns the component-wise compare of `x != y`.\n bvec2 notEqual(vec2 x, vec2 y);\n // Returns the component-wise compare of `x != y`.\n bvec2 notEqual(ivec2 x, ivec2 y);\n // Returns the component-wise compare of `x != y`.\n bvec2 notEqual(uvec2 x, uvec2 y);\n // Returns the component-wise compare of `x != y`.\n bvec2 notEqual(bvec2 x, bvec2 y);\n // Returns the component-wise compare of `x != y`.\n bvec3 notEqual(vec3 x, vec3 y);\n // Returns the component-wise compare of `x != y`.\n bvec3 notEqual(ivec3 x, ivec3 y);\n // Returns the component-wise compare of `x != y`.\n bvec3 notEqual(uvec3 x, uvec3 y);\n // Returns the component-wise compare of `x != y`.\n bvec3 notEqual(bvec3 x, bvec3 y);\n // Returns the component-wise compare of `x != y`.\n bvec4 notEqual(vec4 x, vec4 y);\n // Returns the component-wise compare of `x != y`.\n bvec4 notEqual(ivec4 x, ivec4 y);\n // Returns the component-wise compare of `x != y`.\n bvec4 notEqual(uvec4 x, uvec4 y);\n // Returns the component-wise compare of `x != y`.\n bvec4 notEqual(bvec4 x, bvec4 y);\n\n // Returns true if any component of `x` is `true`.\n bool any(bvec2 x);\n // Returns true if any component of `x` is `true`.\n bool any(bvec3 x);\n // Returns true if any component of `x` is `true`.\n bool any(bvec4 x);\n\n // Returns true only if all components of `x` are `true`.\n bool all(bvec2 x);\n // Returns true only if all components of `x` are `true`.\n bool all(bvec3 x);\n // Returns true only if all components of `x` are `true`.\n bool all(bvec4 x);\n\n // Returns the component-wise logical complement of `x`.\n bvec2 not(bvec2 x);\n // Returns the component-wise logical complement of `x`.\n bvec3 not(bvec3 x);\n // Returns the component-wise logical complement of `x`.\n bvec4 not(bvec4 x);\n\n ////////////////////////////////////////////////////////////////////////////////\n // Texture Lookup Functions\n\n // Returns the dimensions of level `lod` for the texture bound to `sampler`.\n highp ivec2 textureSize(sampler2D sampler, int lod);\n // Returns the dimensions of level `lod` for the texture bound to `sampler`.\n highp ivec2 textureSize(isampler2D sampler, int lod);\n // Returns the dimensions of level `lod` for the texture bound to `sampler`.\n highp ivec2 textureSize(usampler2D sampler, int lod);\n // Returns the dimensions of level `lod` for the texture bound to `sampler`.\n highp ivec3 textureSize(sampler3D sampler, int lod);\n // Returns the dimensions of level `lod` for the texture bound to `sampler`.\n highp ivec3 textureSize(isampler3D sampler, int lod);\n // Returns the dimensions of level `lod` for the texture bound to `sampler`.\n highp ivec3 textureSize(usampler3D sampler, int lod);\n // Returns the dimensions of level `lod` for the texture bound to `sampler`.\n highp ivec2 textureSize(samplerCube sampler, int lod);\n // Returns the dimensions of level `lod` for the texture bound to `sampler`.\n highp ivec2 textureSize(isamplerCube sampler, int lod);\n // Returns the dimensions of level `lod` for the texture bound to `sampler`.\n highp ivec2 textureSize(usamplerCube sampler, int lod);\n // Returns the dimensions of level `lod` for the texture bound to `sampler`.\n highp ivec2 textureSize(sampler2DShadow sampler, int lod);\n // Returns the dimensions of level `lod` for the texture bound to `sampler`.\n highp ivec2 textureSize(samplerCubeShadow sampler, int lod);\n // Returns the dimensions of level `lod` for the texture bound to `sampler`.\n highp ivec3 textureSize(sampler2DArray sampler, int lod);\n // Returns the dimensions of level `lod` for the texture bound to `sampler`.\n highp ivec3 textureSize(isampler2DArray sampler, int lod);\n // Returns the dimensions of level `lod` for the texture bound to `sampler`.\n highp ivec3 textureSize(usampler2DArray sampler, int lod);\n // Returns the dimensions of level `lod` for the texture bound to `sampler`.\n highp ivec3 textureSize(sampler2DArrayShadow sampler, int lod);\n\n // Use the texture coordinate `P` to do a texture lookup in the texture currently bound to `sampler`.\n vec4 texture(sampler2D sampler, vec2 P);\n // Use the texture coordinate `P` to do a texture lookup in the texture currently bound to `sampler`.\n ivec4 texture(isampler2D sampler, vec2 P);\n // Use the texture coordinate `P` to do a texture lookup in the texture currently bound to `sampler`.\n uvec4 texture(usampler2D sampler, vec2 P);\n // Use the texture coordinate `P` to do a texture lookup in the texture currently bound to `sampler`.\n vec4 texture(sampler2D sampler, vec2 P, float bias);\n // Use the texture coordinate `P` to do a texture lookup in the texture currently bound to `sampler`.\n ivec4 texture(isampler2D sampler, vec2 P, float bias);\n // Use the texture coordinate `P` to do a texture lookup in the texture currently bound to `sampler`.\n uvec4 texture(usampler2D sampler, vec2 P, float bias);\n\n // Use the texture coordinate `P` to do a texture lookup in the texture currently bound to `sampler`.\n vec4 texture(sampler3D sampler, vec3 P);\n // Use the texture coordinate `P` to do a texture lookup in the texture currently bound to `sampler`.\n ivec4 texture(isampler3D sampler, vec3 P);\n // Use the texture coordinate `P` to do a texture lookup in the texture currently bound to `sampler`.\n uvec4 texture(usampler3D sampler, vec3 P);\n // Use the texture coordinate `P` to do a texture lookup in the texture currently bound to `sampler`.\n vec4 texture(sampler3D sampler, vec3 P, float bias);\n // Use the texture coordinate `P` to do a texture lookup in the texture currently bound to `sampler`.\n ivec4 texture(isampler3D sampler, vec3 P, float bias);\n // Use the texture coordinate `P` to do a texture lookup in the texture currently bound to `sampler`.\n uvec4 texture(usampler3D sampler, vec3 P, float bias);\n\n // Use the texture coordinate `P` to do a texture lookup in the texture currently bound to `sampler`.\n vec4 texture(samplerCube sampler, vec3 P);\n // Use the texture coordinate `P` to do a texture lookup in the texture currently bound to `sampler`.\n ivec4 texture(isamplerCube sampler, vec3 P);\n // Use the texture coordinate `P` to do a texture lookup in the texture currently bound to `sampler`.\n uvec4 texture(usamplerCube sampler, vec3 P);\n // Use the texture coordinate `P` to do a texture lookup in the texture currently bound to `sampler`.\n vec4 texture(samplerCube sampler, vec3 P, float bias);\n // Use the texture coordinate `P` to do a texture lookup in the texture currently bound to `sampler`.\n ivec4 texture(isamplerCube sampler, vec3 P, float bias);\n // Use the texture coordinate `P` to do a texture lookup in the texture currently bound to `sampler`.\n uvec4 texture(usamplerCube sampler, vec3 P, float bias);\n\n // Use the texture coordinate `P` to do a texture lookup in the texture currently bound to `sampler`.\n float texture(sampler2DShadow sampler, vec3 P);\n // Use the texture coordinate `P` to do a texture lookup in the texture currently bound to `sampler`.\n float texture(sampler2DShadow sampler, vec3 P, float bias);\n // Use the texture coordinate `P` to do a texture lookup in the texture currently bound to `sampler`.\n float texture(samplerCubeShadow sampler, vec4 P);\n // Use the texture coordinate `P` to do a texture lookup in the texture currently bound to `sampler`.\n float texture(samplerCubeShadow sampler, vec4 P, float bias);\n\n // Use the texture coordinate `P` to do a texture lookup in the texture currently bound to `sampler`.\n vec4 texture(sampler2DArray sampler, vec3 P);\n // Use the texture coordinate `P` to do a texture lookup in the texture currently bound to `sampler`.\n ivec4 texture(isampler2DArray sampler, vec3 P);\n // Use the texture coordinate `P` to do a texture lookup in the texture currently bound to `sampler`.\n uvec4 texture(usampler2DArray sampler, vec3 P);\n // Use the texture coordinate `P` to do a texture lookup in the texture currently bound to `sampler`.\n vec4 texture(sampler2DArray sampler, vec3 P, float bias);\n // Use the texture coordinate `P` to do a texture lookup in the texture currently bound to `sampler`.\n ivec4 texture(isampler2DArray sampler, vec3 P, float bias);\n // Use the texture coordinate `P` to do a texture lookup in the texture currently bound to `sampler`.\n uvec4 texture(usampler2DArray sampler, vec3 P, float bias);\n\n // Use the texture coordinate `P` to do a texture lookup in the texture currently bound to `sampler`.\n float texture(sampler2DArrayShadow sampler, vec4 P);\n\n // Do a texture lookup with projection. The texture coordinates consumed from `P`, not including the last\n // component of `P`, are divided by the last component of `P` to form projected coordinates `P'`.\n vec4 textureProj(sampler2D sampler, vec3 P);\n // Do a texture lookup with projection. The texture coordinates consumed from `P`, not including the last\n // component of `P`, are divided by the last component of `P` to form projected coordinates `P'`.\n ivec4 textureProj(isampler2D sampler, vec3 P);\n // Do a texture lookup with projection. The texture coordinates consumed from `P`, not including the last\n // component of `P`, are divided by the last component of `P` to form projected coordinates `P'`.\n uvec4 textureProj(usampler2D sampler, vec3 P);\n // Do a texture lookup with projection. The texture coordinates consumed from `P`, not including the last\n // component of `P`, are divided by the last component of `P` to form projected coordinates `P'`.\n vec4 textureProj(sampler2D sampler, vec3 P, float bias);\n // Do a texture lookup with projection. The texture coordinates consumed from `P`, not including the last\n // component of `P`, are divided by the last component of `P` to form projected coordinates `P'`.\n ivec4 textureProj(isampler2D sampler, vec3 P, float bias);\n // Do a texture lookup with projection. The texture coordinates consumed from `P`, not including the last\n // component of `P`, are divided by the last component of `P` to form projected coordinates `P'`.\n uvec4 textureProj(usampler2D sampler, vec3 P, float bias);\n\n // Do a texture lookup with projection. The texture coordinates consumed from `P`, not including the last\n // component of `P`, are divided by the last component of `P` to form projected coordinates `P'`.\n vec4 textureProj(sampler2D sampler, vec4 P);\n // Do a texture lookup with projection. The texture coordinates consumed from `P`, not including the last\n // component of `P`, are divided by the last component of `P` to form projected coordinates `P'`.\n ivec4 textureProj(isampler2D sampler, vec4 P);\n // Do a texture lookup with projection. The texture coordinates consumed from `P`, not including the last\n // component of `P`, are divided by the last component of `P` to form projected coordinates `P'`.\n uvec4 textureProj(usampler2D sampler, vec4 P);\n // Do a texture lookup with projection. The texture coordinates consumed from `P`, not including the last\n // component of `P`, are divided by the last component of `P` to form projected coordinates `P'`.\n vec4 textureProj(sampler2D sampler, vec4 P, float bias);\n // Do a texture lookup with projection. The texture coordinates consumed from `P`, not including the last\n // component of `P`, are divided by the last component of `P` to form projected coordinates `P'`.\n ivec4 textureProj(isampler2D sampler, vec4 P, float bias);\n // Do a texture lookup with projection. The texture coordinates consumed from `P`, not including the last\n // component of `P`, are divided by the last component of `P` to form projected coordinates `P'`.\n uvec4 textureProj(usampler2D sampler, vec4 P, float bias);\n\n // Do a texture lookup with projection. The texture coordinates consumed from `P`, not including the last\n // component of `P`, are divided by the last component of `P` to form projected coordinates `P'`.\n vec4 textureProj(sampler3D sampler, vec4 P);\n // Do a texture lookup with projection. The texture coordinates consumed from `P`, not including the last\n // component of `P`, are divided by the last component of `P` to form projected coordinates `P'`.\n ivec4 textureProj(isampler3D sampler, vec4 P);\n // Do a texture lookup with projection. The texture coordinates consumed from `P`, not including the last\n // component of `P`, are divided by the last component of `P` to form projected coordinates `P'`.\n uvec4 textureProj(usampler3D sampler, vec4 P);\n // Do a texture lookup with projection. The texture coordinates consumed from `P`, not including the last\n // component of `P`, are divided by the last component of `P` to form projected coordinates `P'`.\n vec4 textureProj(sampler3D sampler, vec4 P, float bias);\n // Do a texture lookup with projection. The texture coordinates consumed from `P`, not including the last\n // component of `P`, are divided by the last component of `P` to form projected coordinates `P'`.\n ivec4 textureProj(isampler3D sampler, vec4 P, float bias);\n // Do a texture lookup with projection. The texture coordinates consumed from `P`, not including the last\n // component of `P`, are divided by the last component of `P` to form projected coordinates `P'`.\n uvec4 textureProj(usampler3D sampler, vec4 P, float bias);\n\n // Do a texture lookup with projection. The texture coordinates consumed from `P`, not including the last\n // component of `P`, are divided by the last component of `P` to form projected coordinates `P'`.\n float textureProj(sampler2DShadow sampler, vec4 P);\n // Do a texture lookup with projection. The texture coordinates consumed from `P`, not including the last\n // component of `P`, are divided by the last component of `P` to form projected coordinates `P'`.\n float textureProj(sampler2DShadow sampler, vec4 P, float bias);\n\n // Do a texture lookup as in `texture` but with explicit LOD; `lod` specifies `λbase` and sets the partial derivatives.\n vec4 textureLod(sampler2D sampler, vec2 P, float lod);\n // Do a texture lookup as in `texture` but with explicit LOD; `lod` specifies `λbase` and sets the partial derivatives.\n ivec4 textureLod(isampler2D sampler, vec2 P, float lod);\n // Do a texture lookup as in `texture` but with explicit LOD; `lod` specifies `λbase` and sets the partial derivatives.\n uvec4 textureLod(usampler2D sampler, vec2 P, float lod);\n // Do a texture lookup as in `texture` but with explicit LOD; `lod` specifies `λbase` and sets the partial derivatives.\n vec4 textureLod(sampler3D sampler, vec3 P, float lod);\n // Do a texture lookup as in `texture` but with explicit LOD; `lod` specifies `λbase` and sets the partial derivatives.\n ivec4 textureLod(isampler3D sampler, vec3 P, float lod);\n // Do a texture lookup as in `texture` but with explicit LOD; `lod` specifies `λbase` and sets the partial derivatives.\n uvec4 textureLod(usampler3D sampler, vec3 P, float lod);\n // Do a texture lookup as in `texture` but with explicit LOD; `lod` specifies `λbase` and sets the partial derivatives.\n vec4 textureLod(samplerCube sampler, vec3 P, float lod);\n // Do a texture lookup as in `texture` but with explicit LOD; `lod` specifies `λbase` and sets the partial derivatives.\n ivec4 textureLod(isamplerCube sampler, vec3 P, float lod);\n // Do a texture lookup as in `texture` but with explicit LOD; `lod` specifies `λbase` and sets the partial derivatives.\n uvec4 textureLod(usamplerCube sampler, vec3 P, float lod);\n // Do a texture lookup as in `texture` but with explicit LOD; `lod` specifies `λbase` and sets the partial derivatives.\n float textureLod(sampler2DShadow sampler, vec3 P, float lod);\n // Do a texture lookup as in `texture` but with explicit LOD; `lod` specifies `λbase` and sets the partial derivatives.\n vec4 textureLod(sampler2DArray sampler, vec3 P, float lod);\n // Do a texture lookup as in `texture` but with explicit LOD; `lod` specifies `λbase` and sets the partial derivatives.\n ivec4 textureLod(isampler2DArray sampler, vec3 P, float lod);\n // Do a texture lookup as in `texture` but with explicit LOD; `lod` specifies `λbase` and sets the partial derivatives.\n uvec4 textureLod(usampler2DArray sampler, vec3 P, float lod);\n\n // Do a texture lookup as in texture but with `offset` added to the `(u,v)` texel coordinates\n // before looking up each texel. The offset value must be a constant expression.\n vec4 textureOffset(sampler2D sampler, vec2 P, ivec2 offset);\n // Do a texture lookup as in texture but with `offset` added to the `(u,v)` texel coordinates\n // before looking up each texel. The offset value must be a constant expression.\n ivec4 textureOffset(isampler2D sampler, vec2 P, ivec2 offset);\n // Do a texture lookup as in texture but with `offset` added to the `(u,v)` texel coordinates\n // before looking up each texel. The offset value must be a constant expression.\n uvec4 textureOffset(usampler2D sampler, vec2 P, ivec2 offset);\n // Do a texture lookup as in texture but with `offset` added to the `(u,v)` texel coordinates\n // before looking up each texel. The offset value must be a constant expression.\n vec4 textureOffset(sampler2D sampler, vec2 P, ivec2 offset, float bias);\n // Do a texture lookup as in texture but with `offset` added to the `(u,v)` texel coordinates\n // before looking up each texel. The offset value must be a constant expression.\n ivec4 textureOffset(isampler2D sampler, vec2 P, ivec2 offset, float bias);\n // Do a texture lookup as in texture but with `offset` added to the `(u,v)` texel coordinates\n // before looking up each texel. The offset value must be a constant expression.\n uvec4 textureOffset(usampler2D sampler, vec2 P, ivec2 offset, float bias);\n\n // Do a texture lookup as in texture but with `offset` added to the `(u,v,w)` texel coordinates\n // before looking up each texel. The offset value must be a constant expression.\n vec4 textureOffset(sampler3D sampler, vec3 P, ivec3 offset);\n // Do a texture lookup as in texture but with `offset` added to the `(u,v,w)` texel coordinates\n // before looking up each texel. The offset value must be a constant expression.\n ivec4 textureOffset(isampler3D sampler, vec3 P, ivec3 offset);\n // Do a texture lookup as in texture but with `offset` added to the `(u,v,w)` texel coordinates\n // before looking up each texel. The offset value must be a constant expression.\n uvec4 textureOffset(usampler3D sampler, vec3 P, ivec3 offset);\n // Do a texture lookup as in texture but with `offset` added to the `(u,v,w)` texel coordinates\n // before looking up each texel. The offset value must be a constant expression.\n vec4 textureOffset(sampler3D sampler, vec3 P, ivec3 offset, float bias);\n // Do a texture lookup as in texture but with `offset` added to the `(u,v,w)` texel coordinates\n // before looking up each texel. The offset value must be a constant expression.\n ivec4 textureOffset(isampler3D sampler, vec3 P, ivec3 offset, float bias);\n // Do a texture lookup as in texture but with `offset` added to the `(u,v,w)` texel coordinates\n // before looking up each texel. The offset value must be a constant expression.\n uvec4 textureOffset(usampler3D sampler, vec3 P, ivec3 offset, float bias);\n\n // Do a texture lookup as in texture but with `offset` added to the `(u,v,w)` texel coordinates\n // before looking up each texel. The offset value must be a constant expression.\n float textureOffset(sampler2DShadow sampler, vec3 P, ivec2 offset);\n // Do a texture lookup as in texture but with `offset` added to the `(u,v,w)` texel coordinates\n // before looking up each texel. The offset value must be a constant expression.\n float textureOffset(sampler2DShadow sampler, vec3 P, ivec2 offset, float bias);\n\n // Do a texture lookup as in texture but with `offset` added to the `(u,v,w)` texel coordinates\n // before looking up each texel. The offset value must be a constant expression. Note that\n // `offset` does not apply to the layer coordinate for texture arrays.\n vec4 textureOffset(sampler2DArray sampler, vec3 P, ivec2 offset);\n // Do a texture lookup as in texture but with `offset` added to the `(u,v,w)` texel coordinates\n // before looking up each texel. The offset value must be a constant expression. Note that\n // `offset` does not apply to the layer coordinate for texture arrays.\n ivec4 textureOffset(isampler2DArray sampler, vec3 P, ivec2 offset);\n // Do a texture lookup as in texture but with `offset` added to the `(u,v,w)` texel coordinates\n // before looking up each texel. The offset value must be a constant expression. Note that\n // `offset` does not apply to the layer coordinate for texture arrays.\n uvec4 textureOffset(usampler2DArray sampler, vec3 P, ivec2 offset);\n // Do a texture lookup as in texture but with `offset` added to the `(u,v,w)` texel coordinates\n // before looking up each texel. The offset value must be a constant expression. Note that\n // `offset` does not apply to the layer coordinate for texture arrays.\n vec4 textureOffset(sampler2DArray sampler, vec3 P, ivec2 offset, float bias);\n // Do a texture lookup as in texture but with `offset` added to the `(u,v,w)` texel coordinates\n // before looking up each texel. The offset value must be a constant expression. Note that\n // `offset` does not apply to the layer coordinate for texture arrays.\n ivec4 textureOffset(isampler2DArray sampler, vec3 P, ivec2 offset, float bias);\n // Do a texture lookup as in texture but with `offset` added to the `(u,v,w)` texel coordinates\n // before looking up each texel. The offset value must be a constant expression. Note that\n // `offset` does not apply to the layer coordinate for texture arrays.\n uvec4 textureOffset(usampler2DArray sampler, vec3 P, ivec2 offset, float bias);\n\n // Use integer texture coordinate `P` to lookup a single texel from sampler.\n vec4 texelFetch(sampler2D sampler, ivec2 P, int lod);\n // Use integer texture coordinate `P` to lookup a single texel from sampler.\n ivec4 texelFetch(isampler2D sampler, ivec2 P, int lod);\n // Use integer texture coordinate `P` to lookup a single texel from sampler.\n uvec4 texelFetch(usampler2D sampler, ivec2 P, int lod);\n // Use integer texture coordinate `P` to lookup a single texel from sampler.\n vec4 texelFetch(sampler3D sampler, ivec3 P, int lod);\n // Use integer texture coordinate `P` to lookup a single texel from sampler.\n ivec4 texelFetch(isampler3D sampler, ivec3 P, int lod);\n // Use integer texture coordinate `P` to lookup a single texel from sampler.\n uvec4 texelFetch(usampler3D sampler, ivec3 P, int lod);\n // Use integer texture coordinate `P` to lookup a single texel from sampler.\n vec4 texelFetch(sampler2DArray sampler, ivec3 P, int lod);\n // Use integer texture coordinate `P` to lookup a single texel from sampler.\n ivec4 texelFetch(isampler2DArray sampler, ivec3 P, int lod);\n // Use integer texture coordinate `P` to lookup a single texel from sampler.\n uvec4 texelFetch(usampler2DArray sampler, ivec3 P, int lod);\n\n // Fetch a single texel as in `texelFetch` offset by `offset` as described in `textureOffset`.\n vec4 texelFetchOffset(sampler2D sampler, ivec2 P, int lod, ivec2 offset);\n // Fetch a single texel as in `texelFetch` offset by `offset` as described in `textureOffset`.\n ivec4 texelFetchOffset(isampler2D sampler, ivec2 P, int lod, ivec2 offset);\n // Fetch a single texel as in `texelFetch` offset by `offset` as described in `textureOffset`.\n uvec4 texelFetchOffset(usampler2D sampler, ivec2 P, int lod, ivec2 offset);\n // Fetch a single texel as in `texelFetch` offset by `offset` as described in `textureOffset`.\n vec4 texelFetchOffset(sampler3D sampler, ivec3 P, int lod, ivec3 offset);\n // Fetch a single texel as in `texelFetch` offset by `offset` as described in `textureOffset`.\n ivec4 texelFetchOffset(isampler3D sampler, ivec3 P, int lod, ivec3 offset);\n // Fetch a single texel as in `texelFetch` offset by `offset` as described in `textureOffset`.\n uvec4 texelFetchOffset(usampler3D sampler, ivec3 P, int lod, ivec3 offset);\n // Fetch a single texel as in `texelFetch` offset by `offset` as described in `textureOffset`.\n vec4 texelFetchOffset(sampler2DArray sampler, ivec3 P, int lod, ivec2 offset);\n // Fetch a single texel as in `texelFetch` offset by `offset` as described in `textureOffset`.\n ivec4 texelFetchOffset(isampler2DArray sampler, ivec3 P, int lod, ivec2 offset);\n // Fetch a single texel as in `texelFetch` offset by `offset` as described in `textureOffset`.\n uvec4 texelFetchOffset(usampler2DArray sampler, ivec3 P, int lod, ivec2 offset);\n\n// Do a projective texture lookup as described in `textureProj` offset by `offset` as described in `textureOffset`.\n vec4 textureProjOffset(sampler2D sampler, vec3 P, ivec2 offset);\n // Do a projective texture lookup as described in `textureProj` offset by `offset` as described in `textureOffset`.\n ivec4 textureProjOffset(isampler2D sampler, vec3 P, ivec2 offset);\n // Do a projective texture lookup as described in `textureProj` offset by `offset` as described in `textureOffset`.\n uvec4 textureProjOffset(usampler2D sampler, vec3 P, ivec2 offset);\n // Do a projective texture lookup as described in `textureProj` offset by `offset` as described in `textureOffset`.\n vec4 textureProjOffset(sampler2D sampler, vec3 P, ivec2 offset, float bias);\n // Do a projective texture lookup as described in `textureProj` offset by `offset` as described in `textureOffset`.\n ivec4 textureProjOffset(isampler2D sampler, vec3 P, ivec2 offset, float bias);\n // Do a projective texture lookup as described in `textureProj` offset by `offset` as described in `textureOffset`.\n uvec4 textureProjOffset(usampler2D sampler, vec3 P, ivec2 offset, float bias);\n // Do a projective texture lookup as described in `textureProj` offset by `offset` as described in `textureOffset`.\n vec4 textureProjOffset(sampler2D sampler, vec4 P, ivec2 offset);\n // Do a projective texture lookup as described in `textureProj` offset by `offset` as described in `textureOffset`.\n ivec4 textureProjOffset(isampler2D sampler, vec4 P, ivec2 offset);\n // Do a projective texture lookup as described in `textureProj` offset by `offset` as described in `textureOffset`.\n uvec4 textureProjOffset(usampler2D sampler, vec4 P, ivec2 offset);\n // Do a projective texture lookup as described in `textureProj` offset by `offset` as described in `textureOffset`.\n vec4 textureProjOffset(sampler2D sampler, vec4 P, ivec2 offset, float bias);\n // Do a projective texture lookup as described in `textureProj` offset by `offset` as described in `textureOffset`.\n ivec4 textureProjOffset(isampler2D sampler, vec4 P, ivec2 offset, float bias);\n // Do a projective texture lookup as described in `textureProj` offset by `offset` as described in `textureOffset`.\n uvec4 textureProjOffset(usampler2D sampler, vec4 P, ivec2 offset, float bias);\n // Do a projective texture lookup as described in `textureProj` offset by `offset` as described in `textureOffset`.\n vec4 textureProjOffset(sampler3D sampler, vec4 P, ivec3 offset);\n // Do a projective texture lookup as described in `textureProj` offset by `offset` as described in `textureOffset`.\n ivec4 textureProjOffset(isampler3D sampler, vec4 P, ivec3 offset);\n // Do a projective texture lookup as described in `textureProj` offset by `offset` as described in `textureOffset`.\n uvec4 textureProjOffset(usampler3D sampler, vec4 P, ivec3 offset);\n // Do a projective texture lookup as described in `textureProj` offset by `offset` as described in `textureOffset`.\n vec4 textureProjOffset(sampler3D sampler, vec4 P, ivec3 offset, float bias);\n // Do a projective texture lookup as described in `textureProj` offset by `offset` as described in `textureOffset`.\n ivec4 textureProjOffset(isampler3D sampler, vec4 P, ivec3 offset, float bias);\n // Do a projective texture lookup as described in `textureProj` offset by `offset` as described in `textureOffset`.\n uvec4 textureProjOffset(usampler3D sampler, vec4 P, ivec3 offset, float bias);\n // Do a projective texture lookup as described in `textureProj` offset by `offset` as described in `textureOffset`.\n float textureProjOffset(sampler2DShadow sampler, vec4 P, ivec2 offset);\n // Do a projective texture lookup as described in `textureProj` offset by `offset` as described in `textureOffset`.\n float textureProjOffset(sampler2DShadow sampler, vec4 P, ivec2 offset, float bias);\n\n // Do an offset texture lookup with explicit LOD. See `textureLod` and `textureOffset`.\n vec4 textureLodOffset(sampler2D sampler, vec2 P, float lod, ivec2 offset);\n // Do an offset texture lookup with explicit LOD. See `textureLod` and `textureOffset`.\n ivec4 textureLodOffset(isampler2D sampler, vec2 P, float lod, ivec2 offset);\n // Do an offset texture lookup with explicit LOD. See `textureLod` and `textureOffset`.\n uvec4 textureLodOffset(usampler2D sampler, vec2 P, float lod, ivec2 offset);\n // Do an offset texture lookup with explicit LOD. See `textureLod` and `textureOffset`.\n vec4 textureLodOffset(sampler3D sampler, vec3 P, float lod, ivec3 offset);\n // Do an offset texture lookup with explicit LOD. See `textureLod` and `textureOffset`.\n ivec4 textureLodOffset(isampler3D sampler, vec3 P, float lod, ivec3 offset);\n // Do an offset texture lookup with explicit LOD. See `textureLod` and `textureOffset`.\n uvec4 textureLodOffset(usampler3D sampler, vec3 P, float lod, ivec3 offset);\n // Do an offset texture lookup with explicit LOD. See `textureLod` and `textureOffset`.\n float textureLodOffset(sampler2DShadow sampler, vec3 P, float lod, ivec2 offset);\n // Do an offset texture lookup with explicit LOD. See `textureLod` and `textureOffset`.\n vec4 textureLodOffset(sampler2DArray sampler, vec3 P, float lod, ivec2 offset);\n // Do an offset texture lookup with explicit LOD. See `textureLod` and `textureOffset`.\n ivec4 textureLodOffset(isampler2DArray sampler, vec3 P, float lod, ivec2 offset);\n // Do an offset texture lookup with explicit LOD. See `textureLod` and `textureOffset`.\n uvec4 textureLodOffset(usampler2DArray sampler, vec3 P, float lod, ivec2 offset);\n\n // Do a projective texture lookup with explicit LOD. See `textureProj` and `textureLod`.\n vec4 textureProjLod(sampler2D sampler, vec3 P, float lod);\n // Do a projective texture lookup with explicit LOD. See `textureProj` and `textureLod`.\n ivec4 textureProjLod(isampler2D sampler, vec3 P, float lod);\n // Do a projective texture lookup with explicit LOD. See `textureProj` and `textureLod`.\n uvec4 textureProjLod(usampler2D sampler, vec3 P, float lod);\n // Do a projective texture lookup with explicit LOD. See `textureProj` and `textureLod`.\n vec4 textureProjLod(sampler2D sampler, vec4 P, float lod);\n // Do a projective texture lookup with explicit LOD. See `textureProj` and `textureLod`.\n ivec4 textureProjLod(isampler2D sampler, vec4 P, float lod);\n // Do a projective texture lookup with explicit LOD. See `textureProj` and `textureLod`.\n uvec4 textureProjLod(usampler2D sampler, vec4 P, float lod);\n // Do a projective texture lookup with explicit LOD. See `textureProj` and `textureLod`.\n vec4 textureProjLod(sampler3D sampler, vec4 P, float lod);\n // Do a projective texture lookup with explicit LOD. See `textureProj` and `textureLod`.\n ivec4 textureProjLod(isampler3D sampler, vec4 P, float lod);\n // Do a projective texture lookup with explicit LOD. See `textureProj` and `textureLod`.\n uvec4 textureProjLod(usampler3D sampler, vec4 P, float lod);\n // Do a projective texture lookup with explicit LOD. See `textureProj` and `textureLod`.\n float textureProjLod(sampler2DShadow sampler, vec4 P, float lod);\n\n // Do an offset projective texture lookup with explicit LOD. See `textureProj`, `textureLod`, and `textureOffset`.\n vec4 textureProjLodOffset(sampler2D sampler, vec3 P, float lod, ivec2 offset);\n // Do an offset projective texture lookup with explicit LOD. See `textureProj`, `textureLod`, and `textureOffset`.\n ivec4 textureProjLodOffset(isampler2D sampler, vec3 P, float lod, ivec2 offset);\n // Do an offset projective texture lookup with explicit LOD. See `textureProj`, `textureLod`, and `textureOffset`.\n uvec4 textureProjLodOffset(usampler2D sampler, vec3 P, float lod, ivec2 offset);\n // Do an offset projective texture lookup with explicit LOD. See `textureProj`, `textureLod`, and `textureOffset`.\n vec4 textureProjLodOffset(sampler2D sampler, vec4 P, float lod, ivec2 offset);\n // Do an offset projective texture lookup with explicit LOD. See `textureProj`, `textureLod`, and `textureOffset`.\n ivec4 textureProjLodOffset(isampler2D sampler, vec4 P, float lod, ivec2 offset);\n // Do an offset projective texture lookup with explicit LOD. See `textureProj`, `textureLod`, and `textureOffset`.\n uvec4 textureProjLodOffset(usampler2D sampler, vec4 P, float lod, ivec2 offset);\n // Do an offset projective texture lookup with explicit LOD. See `textureProj`, `textureLod`, and `textureOffset`.\n vec4 textureProjLodOffset(sampler3D sampler, vec4 P, float lod, ivec3 offset);\n // Do an offset projective texture lookup with explicit LOD. See `textureProj`, `textureLod`, and `textureOffset`.\n ivec4 textureProjLodOffset(isampler3D sampler, vec4 P, float lod, ivec3 offset);\n // Do an offset projective texture lookup with explicit LOD. See `textureProj`, `textureLod`, and `textureOffset`.\n uvec4 textureProjLodOffset(usampler3D sampler, vec4 P, float lod, ivec3 offset);\n // Do an offset projective texture lookup with explicit LOD. See `textureProj`, `textureLod`, and `textureOffset`.\n float textureProjLodOffset(sampler2DShadow sampler, vec4 P, float lod, ivec2 offset);\n\n // Do a texture lookup as in texture but with explicit gradients. The partial derivatives of `P` are with respect to window `x` and window `y`.\n vec4 textureGrad(sampler2D sampler, vec2 P, vec2 dPdx, vec2 dPdy);\n // Do a texture lookup as in texture but with explicit gradients. The partial derivatives of `P` are with respect to window `x` and window `y`.\n ivec4 textureGrad(isampler2D sampler, vec2 P, vec2 dPdx, vec2 dPdy);\n // Do a texture lookup as in texture but with explicit gradients. The partial derivatives of `P` are with respect to window `x` and window `y`.\n uvec4 textureGrad(usampler2D sampler, vec2 P, vec2 dPdx, vec2 dPdy);\n // Do a texture lookup as in texture but with explicit gradients. The partial derivatives of `P` are with respect to window `x` and window `y`.\n vec4 textureGrad(sampler3D sampler, vec3 P, vec3 dPdx, vec3 dPdy);\n // Do a texture lookup as in texture but with explicit gradients. The partial derivatives of `P` are with respect to window `x` and window `y`.\n ivec4 textureGrad(isampler3D sampler, vec3 P, vec3 dPdx, vec3 dPdy);\n // Do a texture lookup as in texture but with explicit gradients. The partial derivatives of `P` are with respect to window `x` and window `y`.\n uvec4 textureGrad(usampler3D sampler, vec3 P, vec3 dPdx, vec3 dPdy);\n // Do a texture lookup as in texture but with explicit gradients. The partial derivatives of `P` are with respect to window `x` and window `y`.\n vec4 textureGrad(samplerCube sampler, vec3 P, vec3 dPdx, vec3 dPdy);\n // Do a texture lookup as in texture but with explicit gradients. The partial derivatives of `P` are with respect to window `x` and window `y`.\n ivec4 textureGrad(isamplerCube sampler, vec3 P, vec3 dPdx, vec3 dPdy);\n // Do a texture lookup as in texture but with explicit gradients. The partial derivatives of `P` are with respect to window `x` and window `y`.\n uvec4 textureGrad(usamplerCube sampler, vec3 P, vec3 dPdx, vec3 dPdy);\n // Do a texture lookup as in texture but with explicit gradients. The partial derivatives of `P` are with respect to window `x` and window `y`.\n float textureGrad(sampler2DShadow sampler, vec3 P, vec2 dPdx, vec2 dPdy);\n // Do a texture lookup as in texture but with explicit gradients. The partial derivatives of `P` are with respect to window `x` and window `y`.\n float textureGrad(samplerCubeShadow sampler, vec4 P, vec3 dPdx, vec3 dPdy);\n // Do a texture lookup as in texture but with explicit gradients. The partial derivatives of `P` are with respect to window `x` and window `y`.\n vec4 textureGrad(sampler2DArray sampler, vec3 P, vec2 dPdx, vec2 dPdy);\n // Do a texture lookup as in texture but with explicit gradients. The partial derivatives of `P` are with respect to window `x` and window `y`.\n ivec4 textureGrad(isampler2DArray sampler, vec3 P, vec2 dPdx, vec2 dPdy);\n // Do a texture lookup as in texture but with explicit gradients. The partial derivatives of `P` are with respect to window `x` and window `y`.\n uvec4 textureGrad(usampler2DArray sampler, vec3 P, vec2 dPdx, vec2 dPdy);\n // Do a texture lookup as in texture but with explicit gradients. The partial derivatives of `P` are with respect to window `x` and window `y`.\n float textureGrad(sampler2DArrayShadow sampler, vec4 P, vec2 dPdx, vec2 dPdy);\n\n // Do a texture lookup with both explicit gradient and offset, as described in `textureGrad` and `textureOffset`.\n vec4 textureGradOffset(sampler2D sampler, vec2 P, vec2 dPdx, vec2 dPdy, ivec2 offset);\n // Do a texture lookup with both explicit gradient and offset, as described in `textureGrad` and `textureOffset`.\n ivec4 textureGradOffset(isampler2D sampler, vec2 P, vec2 dPdx, vec2 dPdy, ivec2 offset);\n // Do a texture lookup with both explicit gradient and offset, as described in `textureGrad` and `textureOffset`.\n uvec4 textureGradOffset(usampler2D sampler, vec2 P, vec2 dPdx, vec2 dPdy, ivec2 offset);\n // Do a texture lookup with both explicit gradient and offset, as described in `textureGrad` and `textureOffset`.\n vec4 textureGradOffset(sampler3D sampler, vec3 P, vec3 dPdx, vec3 dPdy, ivec3 offset);\n // Do a texture lookup with both explicit gradient and offset, as described in `textureGrad` and `textureOffset`.\n ivec4 textureGradOffset(isampler3D sampler, vec3 P, vec3 dPdx, vec3 dPdy, ivec3 offset);\n // Do a texture lookup with both explicit gradient and offset, as described in `textureGrad` and `textureOffset`.\n uvec4 textureGradOffset(usampler3D sampler, vec3 P, vec3 dPdx, vec3 dPdy, ivec3 offset);\n // Do a texture lookup with both explicit gradient and offset, as described in `textureGrad` and `textureOffset`.\n float textureGradOffset(sampler2DShadow sampler, vec3 P, vec2 dPdx, vec2 dPdy, ivec2 offset);\n // Do a texture lookup with both explicit gradient and offset, as described in `textureGrad` and `textureOffset`.\n vec4 textureGradOffset(sampler2DArray sampler, vec3 P, vec2 dPdx, vec2 dPdy, ivec2 offset);\n // Do a texture lookup with both explicit gradient and offset, as described in `textureGrad` and `textureOffset`.\n ivec4 textureGradOffset(isampler2DArray sampler, vec3 P, vec2 dPdx, vec2 dPdy, ivec2 offset);\n // Do a texture lookup with both explicit gradient and offset, as described in `textureGrad` and `textureOffset`.\n uvec4 textureGradOffset(usampler2DArray sampler, vec3 P, vec2 dPdx, vec2 dPdy, ivec2 offset);\n // Do a texture lookup with both explicit gradient and offset, as described in `textureGrad` and `textureOffset`.\n float textureGradOffset(sampler2DArrayShadow sampler, vec4 P, vec2 dPdx, vec2 dPdy, ivec2 offset);\n\n // Do a texture lookup both projectively, as described in `textureProj`, and with explicit gradient as\n // described in `textureGrad`. The partial derivatives `dPdx` and `dPdy` are assumed to be already projected.\n vec4 textureProjGrad(sampler2D sampler, vec3 P, vec2 dPdx, vec2 dPdy);\n // Do a texture lookup both projectively, as described in `textureProj`, and with explicit gradient as\n // described in `textureGrad`. The partial derivatives `dPdx` and `dPdy` are assumed to be already projected.\n ivec4 textureProjGrad(isampler2D sampler, vec3 P, vec2 dPdx, vec2 dPdy);\n // Do a texture lookup both projectively, as described in `textureProj`, and with explicit gradient as\n // described in `textureGrad`. The partial derivatives `dPdx` and `dPdy` are assumed to be already projected.\n uvec4 textureProjGrad(usampler2D sampler, vec3 P, vec2 dPdx, vec2 dPdy);\n // Do a texture lookup both projectively, as described in `textureProj`, and with explicit gradient as\n // described in `textureGrad`. The partial derivatives `dPdx` and `dPdy` are assumed to be already projected.\n vec4 textureProjGrad(sampler2D sampler, vec4 P, vec2 dPdx, vec2 dPdy);\n // Do a texture lookup both projectively, as described in `textureProj`, and with explicit gradient as\n // described in `textureGrad`. The partial derivatives `dPdx` and `dPdy` are assumed to be already projected.\n ivec4 textureProjGrad(isampler2D sampler, vec4 P, vec2 dPdx, vec2 dPdy);\n // Do a texture lookup both projectively, as described in `textureProj`, and with explicit gradient as\n // described in `textureGrad`. The partial derivatives `dPdx` and `dPdy` are assumed to be already projected.\n uvec4 textureProjGrad(usampler2D sampler, vec4 P, vec2 dPdx, vec2 dPdy);\n // Do a texture lookup both projectively, as described in `textureProj`, and with explicit gradient as\n // described in `textureGrad`. The partial derivatives `dPdx` and `dPdy` are assumed to be already projected.\n vec4 textureProjGrad(sampler3D sampler, vec4 P, vec3 dPdx, vec3 dPdy);\n // Do a texture lookup both projectively, as described in `textureProj`, and with explicit gradient as\n // described in `textureGrad`. The partial derivatives `dPdx` and `dPdy` are assumed to be already projected.\n ivec4 textureProjGrad(isampler3D sampler, vec4 P, vec3 dPdx, vec3 dPdy);\n // Do a texture lookup both projectively, as described in `textureProj`, and with explicit gradient as\n // described in `textureGrad`. The partial derivatives `dPdx` and `dPdy` are assumed to be already projected.\n uvec4 textureProjGrad(usampler3D sampler, vec4 P, vec3 dPdx, vec3 dPdy);\n // Do a texture lookup both projectively, as described in `textureProj`, and with explicit gradient as\n // described in `textureGrad`. The partial derivatives `dPdx` and `dPdy` are assumed to be already projected.\n float textureProjGrad(sampler2DShadow sampler, vec4 P, vec2 dPdx, vec2 dPdy);\n\n // Do a texture lookup projectively and with explicit gradient as described in `textureProjGrad`, as well as with `offset`, as described in `textureOffset`.\n vec4 textureProjGradOffset(sampler2D sampler, vec3 P, vec2 dPdx, vec2 dPdy, ivec2 offset);\n // Do a texture lookup projectively and with explicit gradient as described in `textureProjGrad`, as well as with `offset`, as described in `textureOffset`.\n ivec4 textureProjGradOffset(isampler2D sampler, vec3 P, vec2 dPdx, vec2 dPdy, ivec2 offset);\n // Do a texture lookup projectively and with explicit gradient as described in `textureProjGrad`, as well as with `offset`, as described in `textureOffset`.\n uvec4 textureProjGradOffset(usampler2D sampler, vec3 P, vec2 dPdx, vec2 dPdy, ivec2 offset);\n // Do a texture lookup projectively and with explicit gradient as described in `textureProjGrad`, as well as with `offset`, as described in `textureOffset`.\n vec4 textureProjGradOffset(sampler2D sampler, vec4 P, vec2 dPdx, vec2 dPdy, ivec2 offset);\n // Do a texture lookup projectively and with explicit gradient as described in `textureProjGrad`, as well as with `offset`, as described in `textureOffset`.\n ivec4 textureProjGradOffset(isampler2D sampler, vec4 P, vec2 dPdx, vec2 dPdy, ivec2 offset);\n // Do a texture lookup projectively and with explicit gradient as described in `textureProjGrad`, as well as with `offset`, as described in `textureOffset`.\n uvec4 textureProjGradOffset(usampler2D sampler, vec4 P, vec2 dPdx, vec2 dPdy, ivec2 offset);\n // Do a texture lookup projectively and with explicit gradient as described in `textureProjGrad`, as well as with `offset`, as described in `textureOffset`.\n vec4 textureProjGradOffset(sampler3D sampler, vec4 P, vec3 dPdx, vec3 dPdy, ivec3 offset);\n // Do a texture lookup projectively and with explicit gradient as described in `textureProjGrad`, as well as with `offset`, as described in `textureOffset`.\n ivec4 textureProjGradOffset(isampler3D sampler, vec4 P, vec3 dPdx, vec3 dPdy, ivec3 offset);\n // Do a texture lookup projectively and with explicit gradient as described in `textureProjGrad`, as well as with `offset`, as described in `textureOffset`.\n uvec4 textureProjGradOffset(usampler3D sampler, vec4 P, vec3 dPdx, vec3 dPdy, ivec3 offset);\n // Do a texture lookup projectively and with explicit gradient as described in `textureProjGrad`, as well as with `offset`, as described in `textureOffset`.\n float textureProjGradOffset(sampler2DShadow sampler, vec4 P, vec2 dPdx, vec2 dPdy, ivec2 offset);\n\n ////////////////////////////////////////////////////////////////////////////////\n // Fragment Processing Functions\n\n // Returns the derivative in x using local differencing for the input argument `p`.\n float dFdx(float p);\n // Returns the derivative in x using local differencing for the input argument `p`.\n vec2 dFdx(vec2 p);\n // Returns the derivative in x using local differencing for the input argument `p`.\n vec3 dFdx(vec3 p);\n // Returns the derivative in x using local differencing for the input argument `p`.\n vec4 dFdx(vec4 p);\n\n // Returns the derivative in y using local differencing for the input argument `p`.\n float dFdy(float p);\n // Returns the derivative in y using local differencing for the input argument `p`.\n vec2 dFdy(vec2 p);\n // Returns the derivative in y using local differencing for the input argument `p`.\n vec3 dFdy(vec3 p);\n // Returns the derivative in y using local differencing for the input argument `p`.\n vec4 dFdy(vec4 p);\n\n // Returns the sum of the absolute derivative in x and y using local differencing for the input argument `p`, i.e., `abs(dFdx(p)) + abs(dFdy(p))`.\n float fwidth(float p);\n // Returns the sum of the absolute derivative in x and y using local differencing for the input argument `p`, i.e., `abs(dFdx(p)) + abs(dFdy(p))`.\n vec2 fwidth(vec2 p);\n // Returns the sum of the absolute derivative in x and y using local differencing for the input argument `p`, i.e., `abs(dFdx(p)) + abs(dFdy(p))`.\n vec3 fwidth(vec3 p);\n // Returns the sum of the absolute derivative in x and y using local differencing for the input argument `p`, i.e., `abs(dFdx(p)) + abs(dFdy(p))`.\n vec4 fwidth(vec4 p);\n}\n");
5
- for(var m=0,g=b.length;m<g;m=m+1|0){var f=b[m];f.c.b||vg(a,f,c)}}else e=new Ti('<api>',"\nimport {\n // The variable `gl_Position` is available only in the vertex language and is intended for writing the\n // homogeneous vertex position. This value will be used by primitive assembly, clipping, culling, and other\n // fixed functionality operations that operate on primitives after vertex processing has occurred.\n //\n // All executions of a well-formed vertex shader should write a value into this variable. It can be\n // written at any time during shader execution. It may also be read back by the shader after being written.\n // Compilers may generate a diagnostic message if they detect `gl_Position` is not written, or read before\n // being written, but not all such cases are detectable. The value of `gl_Position` is undefined if a vertex\n // shader is executed and does not write `gl_Position`.\n highp vec4 gl_Position;\n\n // The variable `gl_PointSize` is available only in the vertex language and is intended for\n // a vertex shader to write the size of the point to be rasterized. It is measured in pixels.\n mediump float gl_PointSize;\n\n const int gl_MaxVertexAttribs;\n const int gl_MaxVertexUniformVectors;\n const int gl_MaxVaryingVectors;\n const int gl_MaxVertexTextureImageUnits;\n const int gl_MaxCombinedTextureImageUnits;\n const int gl_MaxTextureImageUnits;\n const int gl_MaxFragmentUniformVectors;\n const int gl_MaxDrawBuffers;\n\n // The fragment shader has access to the read-only built-in variable `gl_FrontFacing` whose value is `true` if\n // the fragment belongs to a front-facing primitive. One use of this is to emulate two-sided lighting by\n // selecting one of two colors calculated by the vertex shader.\n const bool gl_FrontFacing;\n\n // The fragment shader has access to the read-only built-in variable `gl_PointCoord`. The values in\n // `gl_PointCoord` are two-dimensional coordinates indicating where within a point primitive the current\n // fragment is located. They range from 0.0 to 1.0 across the point. If the current primitive is not a\n // point, then the values read from `gl_PointCoord` are undefined.\n const mediump vec2 gl_PointCoord;\n\n // The variable `gl_FragCoord` is available as a read-only variable from within fragment shaders and it holds\n // the window relative coordinates `x`, `y`, `z`, and `1/w` values for the fragment. This value is the result\n // of the fixed functionality that interpolates primitives after vertex processing to generate fragments. The `z`\n // component is the depth value that will be used for the fragment's depth.\n const mediump vec4 gl_FragCoord;\n\n // Writing to `gl_FragColor` specifies the fragment color that will be used by the subsequent fixed\n // functionality pipeline.\n //\n // If subsequent fixed functionality consumes fragment color and an execution of a fragment shader\n // does not write a value to `gl_FragColor` then the fragment color consumed is undefined.\n mediump vec4 gl_FragColor;\n\n // The variable `gl_FragData` is an array. Writing to `gl_FragData[n]` specifies the fragment data that will be\n // used by the subsequent fixed functionality pipeline for data `n`.\n //\n // If subsequent fixed functionality consumes fragment data and an execution of a fragment shader does not write\n // a value to it, then the fragment data consumed is undefined.\n mediump vec4 gl_FragData[gl_MaxDrawBuffers];\n\n // Depth range in window coordinates\n struct gl_DepthRangeParameters {\n float near;\n float far;\n // Equal to `far - near`\n float diff;\n };\n\n uniform gl_DepthRangeParameters gl_DepthRange;\n\n ////////////////////////////////////////////////////////////////////////////////\n // Angle and Trigonometry Functions\n\n // Converts `degrees` to radians, i.e. `π / 180 * degrees`\n float radians(float degrees);\n // Converts `degrees` to radians, i.e. `π / 180 * degrees`\n vec2 radians(vec2 degrees);\n // Converts `degrees` to radians, i.e. `π / 180 * degrees`\n vec3 radians(vec3 degrees);\n // Converts `degrees` to radians, i.e. `π / 180 * degrees`\n vec4 radians(vec4 degrees);\n\n // Converts `radians` to degrees, i.e. `180 / π * radians`\n float degrees(float radians);\n // Converts `radians` to degrees, i.e. `180 / π * radians`\n vec2 degrees(vec2 radians);\n // Converts `radians` to degrees, i.e. `180 / π * radians`\n vec3 degrees(vec3 radians);\n // Converts `radians` to degrees, i.e. `180 / π * radians`\n vec4 degrees(vec4 radians);\n\n // The standard trigonometric sine function.\n float sin(float angle);\n // The standard trigonometric sine function.\n vec2 sin(vec2 angle);\n // The standard trigonometric sine function.\n vec3 sin(vec3 angle);\n // The standard trigonometric sine function.\n vec4 sin(vec4 angle);\n\n // The standard trigonometric cosine function.\n float cos(float angle);\n // The standard trigonometric cosine function.\n vec2 cos(vec2 angle);\n // The standard trigonometric cosine function.\n vec3 cos(vec3 angle);\n // The standard trigonometric cosine function.\n vec4 cos(vec4 angle);\n\n // The standard trigonometric tangent.\n float tan(float angle);\n // The standard trigonometric tangent.\n vec2 tan(vec2 angle);\n // The standard trigonometric tangent.\n vec3 tan(vec3 angle);\n // The standard trigonometric tangent.\n vec4 tan(vec4 angle);\n\n // Arc sine. Returns an angle whose sine is `x`. The range of values returned by this function is `[-π/2, π/2]`. Results are undefined if `∣x∣>1`.\n float asin(float x);\n // Arc sine. Returns an angle whose sine is `x`. The range of values returned by this function is `[-π/2, π/2]`. Results are undefined if `∣x∣>1`.\n vec2 asin(vec2 x);\n // Arc sine. Returns an angle whose sine is `x`. The range of values returned by this function is `[-π/2, π/2]`. Results are undefined if `∣x∣>1`.\n vec3 asin(vec3 x);\n // Arc sine. Returns an angle whose sine is `x`. The range of values returned by this function is `[-π/2, π/2]`. Results are undefined if `∣x∣>1`.\n vec4 asin(vec4 x);\n\n // Arc cosine. Returns an angle whose cosine is `x`. The range of values returned by this function is `[0, π]`. Results are undefined if `∣x∣>1`.\n float acos(float x);\n // Arc cosine. Returns an angle whose cosine is `x`. The range of values returned by this function is `[0, π]`. Results are undefined if `∣x∣>1`.\n vec2 acos(vec2 x);\n // Arc cosine. Returns an angle whose cosine is `x`. The range of values returned by this function is `[0, π]`. Results are undefined if `∣x∣>1`.\n vec3 acos(vec3 x);\n // Arc cosine. Returns an angle whose cosine is `x`. The range of values returned by this function is `[0, π]`. Results are undefined if `∣x∣>1`.\n vec4 acos(vec4 x);\n\n // Arc tangent. Returns an angle whose tangent is `y/x`. The signs of `x` and `y` are used to determine what quadrant the\n // angle is in. The range of values returned by this function is `[−π,π]`. Results are undefined if `x` and `y` are both 0.\n float atan(float y, float x);\n // Arc tangent. Returns an angle whose tangent is `y/x`. The signs of `x` and `y` are used to determine what quadrant the\n // angle is in. The range of values returned by this function is `[−π,π]`. Results are undefined if `x` and `y` are both 0.\n vec2 atan(vec2 y, vec2 x);\n // Arc tangent. Returns an angle whose tangent is `y/x`. The signs of `x` and `y` are used to determine what quadrant the\n // angle is in. The range of values returned by this function is `[−π,π]`. Results are undefined if `x` and `y` are both 0.\n vec3 atan(vec3 y, vec3 x);\n // Arc tangent. Returns an angle whose tangent is `y/x`. The signs of `x` and `y` are used to determine what quadrant the\n // angle is in. The range of values returned by this function is `[−π,π]`. Results are undefined if `x` and `y` are both 0.\n vec4 atan(vec4 y, vec4 x);\n\n // Arc tangent. Returns an angle whose tangent is `y_over_x`. The range of values returned by this function is `[-π/2, π/2]`.\n float atan(float y_over_x);\n // Arc tangent. Returns an angle whose tangent is `y_over_x`. The range of values returned by this function is `[-π/2, π/2]`.\n vec2 atan(vec2 y_over_x);\n // Arc tangent. Returns an angle whose tangent is `y_over_x`. The range of values returned by this function is `[-π/2, π/2]`.\n vec3 atan(vec3 y_over_x);\n // Arc tangent. Returns an angle whose tangent is `y_over_x`. The range of values returned by this function is `[-π/2, π/2]`.\n vec4 atan(vec4 y_over_x);\n\n ////////////////////////////////////////////////////////////////////////////////\n // Exponential Functions\n\n // Returns `x` raised to the `y` power, i.e., `xʸ`. Results are undefined if `x < 0`. Results are undefined if `x = 0` and `y <= 0`.\n float pow(float x, float y);\n // Returns `x` raised to the `y` power, i.e., `xʸ`. Results are undefined if `x < 0`. Results are undefined if `x = 0` and `y <= 0`.\n vec2 pow(vec2 x, vec2 y);\n // Returns `x` raised to the `y` power, i.e., `xʸ`. Results are undefined if `x < 0`. Results are undefined if `x = 0` and `y <= 0`.\n vec3 pow(vec3 x, vec3 y);\n // Returns `x` raised to the `y` power, i.e., `xʸ`. Results are undefined if `x < 0`. Results are undefined if `x = 0` and `y <= 0`.\n vec4 pow(vec4 x, vec4 y);\n\n // Returns the natural exponentiation of `x`, i.e., `eˣ`\n float exp(float x);\n // Returns the natural exponentiation of `x`, i.e., `eˣ`\n vec2 exp(vec2 x);\n // Returns the natural exponentiation of `x`, i.e., `eˣ`\n vec3 exp(vec3 x);\n // Returns the natural exponentiation of `x`, i.e., `eˣ`\n vec4 exp(vec4 x);\n\n // Returns the natural logarithm of `x`, i.e., returns the value `y` which satisfies the equation `x = eʸ`. Results are undefined if `x <= 0`.\n float log(float x);\n // Returns the natural logarithm of `x`, i.e., returns the value `y` which satisfies the equation `x = eʸ`. Results are undefined if `x <= 0`.\n vec2 log(vec2 x);\n // Returns the natural logarithm of `x`, i.e., returns the value `y` which satisfies the equation `x = eʸ`. Results are undefined if `x <= 0`.\n vec3 log(vec3 x);\n // Returns the natural logarithm of `x`, i.e., returns the value `y` which satisfies the equation `x = eʸ`. Results are undefined if `x <= 0`.\n vec4 log(vec4 x);\n\n // Returns 2 raised to the `x` power, i.e., `2ˣ`.\n float exp2(float x);\n // Returns 2 raised to the `x` power, i.e., `2ˣ`.\n vec2 exp2(vec2 x);\n // Returns 2 raised to the `x` power, i.e., `2ˣ`.\n vec3 exp2(vec3 x);\n // Returns 2 raised to the `x` power, i.e., `2ˣ`.\n vec4 exp2(vec4 x);\n\n // Returns the base 2 logarithm of `x`, i.e., returns the value `y` which satisfies the equation `x = 2ʸ`. Results are undefined if `x <= 0`.\n float log2(float x);\n // Returns the base 2 logarithm of `x`, i.e., returns the value `y` which satisfies the equation `x = 2ʸ`. Results are undefined if `x <= 0`.\n vec2 log2(vec2 x);\n // Returns the base 2 logarithm of `x`, i.e., returns the value `y` which satisfies the equation `x = 2ʸ`. Results are undefined if `x <= 0`.\n vec3 log2(vec3 x);\n // Returns the base 2 logarithm of `x`, i.e., returns the value `y` which satisfies the equation `x = 2ʸ`. Results are undefined if `x <= 0`.\n vec4 log2(vec4 x);\n\n // Returns `√x`. Results are undefined if `x < 0`.\n float sqrt(float x);\n // Returns `√x`. Results are undefined if `x < 0`.\n vec2 sqrt(vec2 x);\n // Returns `√x`. Results are undefined if `x < 0`.\n vec3 sqrt(vec3 x);\n // Returns `√x`. Results are undefined if `x < 0`.\n vec4 sqrt(vec4 x);\n\n // Returns `1 / √x`. Results are undefined if `x <= 0`.\n float inversesqrt(float x);\n // Returns `1 / √x`. Results are undefined if `x <= 0`.\n vec2 inversesqrt(vec2 x);\n // Returns `1 / √x`. Results are undefined if `x <= 0`.\n vec3 inversesqrt(vec3 x);\n // Returns `1 / √x`. Results are undefined if `x <= 0`.\n vec4 inversesqrt(vec4 x);\n\n ////////////////////////////////////////////////////////////////////////////////\n // Common Functions\n\n // Returns `x` if `x >= 0`, otherwise it returns `-x`.\n float abs(float x);\n // Returns `x` if `x >= 0`, otherwise it returns `-x`.\n vec2 abs(vec2 x);\n // Returns `x` if `x >= 0`, otherwise it returns `-x`.\n vec3 abs(vec3 x);\n // Returns `x` if `x >= 0`, otherwise it returns `-x`.\n vec4 abs(vec4 x);\n\n // Returns `1.0` if `x > 0`, `0.0` if `x = 0`, or `-1.0` if `x < 0`\n float sign(float x);\n // Returns `1.0` if `x > 0`, `0.0` if `x = 0`, or `-1.0` if `x < 0`\n vec2 sign(vec2 x);\n // Returns `1.0` if `x > 0`, `0.0` if `x = 0`, or `-1.0` if `x < 0`\n vec3 sign(vec3 x);\n // Returns `1.0` if `x > 0`, `0.0` if `x = 0`, or `-1.0` if `x < 0`\n vec4 sign(vec4 x);\n\n // Returns a value equal to the nearest integer that is less than or equal to `x`\n float floor(float x);\n // Returns a value equal to the nearest integer that is less than or equal to `x`\n vec2 floor(vec2 x);\n // Returns a value equal to the nearest integer that is less than or equal to `x`\n vec3 floor(vec3 x);\n // Returns a value equal to the nearest integer that is less than or equal to `x`\n vec4 floor(vec4 x);\n\n // Returns a value equal to the nearest integer that is greater than or equal to `x`\n float ceil(float x);\n // Returns a value equal to the nearest integer that is greater than or equal to `x`\n vec2 ceil(vec2 x);\n // Returns a value equal to the nearest integer that is greater than or equal to `x`\n vec3 ceil(vec3 x);\n // Returns a value equal to the nearest integer that is greater than or equal to `x`\n vec4 ceil(vec4 x);\n\n // Returns `x - floor(x)`\n float fract(float x);\n // Returns `x - floor(x)`\n vec2 fract(vec2 x);\n // Returns `x - floor(x)`\n vec3 fract(vec3 x);\n // Returns `x - floor(x)`\n vec4 fract(vec4 x);\n\n // Modulus (modulo). Returns `x - y * floor(x/y)`\n float mod(float x, float y);\n // Modulus (modulo). Returns `x - y * floor(x/y)`\n vec2 mod(vec2 x, float y);\n // Modulus (modulo). Returns `x - y * floor(x/y)`\n vec3 mod(vec3 x, float y);\n // Modulus (modulo). Returns `x - y * floor(x/y)`\n vec4 mod(vec4 x, float y);\n\n // Modulus. Returns `x - y * floor(x/y)`\n vec2 mod(vec2 x, vec2 y);\n // Modulus. Returns `x - y * floor(x/y)`\n vec3 mod(vec3 x, vec3 y);\n // Modulus. Returns `x - y * floor(x/y)`\n vec4 mod(vec4 x, vec4 y);\n\n // Returns `y` if `y < x`, otherwise it returns `x`\n float min(float x, float y);\n // Returns `y` if `y < x`, otherwise it returns `x`\n vec2 min(vec2 x, float y);\n // Returns `y` if `y < x`, otherwise it returns `x`\n vec2 min(vec2 x, vec2 y);\n // Returns `y` if `y < x`, otherwise it returns `x`\n vec3 min(vec3 x, float y);\n // Returns `y` if `y < x`, otherwise it returns `x`\n vec3 min(vec3 x, vec3 y);\n // Returns `y` if `y < x`, otherwise it returns `x`\n vec4 min(vec4 x, float y);\n // Returns `y` if `y < x`, otherwise it returns `x`\n vec4 min(vec4 x, vec4 y);\n\n // Returns `y` if `x < y`, otherwise it returns `x`\n float max(float x, float y);\n // Returns `y` if `x < y`, otherwise it returns `x`\n vec2 max(vec2 x, float y);\n // Returns `y` if `x < y`, otherwise it returns `x`\n vec2 max(vec2 x, vec2 y);\n // Returns `y` if `x < y`, otherwise it returns `x`\n vec3 max(vec3 x, float y);\n // Returns `y` if `x < y`, otherwise it returns `x`\n vec3 max(vec3 x, vec3 y);\n // Returns `y` if `x < y`, otherwise it returns `x`\n vec4 max(vec4 x, float y);\n // Returns `y` if `x < y`, otherwise it returns `x`\n vec4 max(vec4 x, vec4 y);\n\n // Returns `min(max(x, minVal), maxVal)`. Results are undefined if `minVal > maxVal`.\n float clamp(float x, float minVal, float maxVal);\n // Returns `min(max(x, minVal), maxVal)`. Results are undefined if `minVal > maxVal`.\n vec2 clamp(vec2 x, float minVal, float maxVal);\n // Returns `min(max(x, minVal), maxVal)`. Results are undefined if `minVal > maxVal`.\n vec2 clamp(vec2 x, vec2 minVal, vec2 maxVal);\n // Returns `min(max(x, minVal), maxVal)`. Results are undefined if `minVal > maxVal`.\n vec3 clamp(vec3 x, float minVal, float maxVal);\n // Returns `min(max(x, minVal), maxVal)`. Results are undefined if `minVal > maxVal`.\n vec3 clamp(vec3 x, vec3 minVal, vec3 maxVal);\n // Returns `min(max(x, minVal), maxVal)`. Results are undefined if `minVal > maxVal`.\n vec4 clamp(vec4 x, float minVal, float maxVal);\n // Returns `min(max(x, minVal), maxVal)`. Results are undefined if `minVal > maxVal`.\n vec4 clamp(vec4 x, vec4 minVal, vec4 maxVal);\n\n // Returns the linear blend of `x` and `y`, i.e. `x * (1-a) + y * a`\n float mix(float x, float y, float a);\n // Returns the linear blend of `x` and `y`, i.e. `x * (1-a) + y * a`\n vec2 mix(vec2 x, vec2 y, float a);\n // Returns the linear blend of `x` and `y`, i.e. `x * (1-a) + y * a`\n vec2 mix(vec2 x, vec2 y, vec2 a);\n // Returns the linear blend of `x` and `y`, i.e. `x * (1-a) + y * a`\n vec3 mix(vec3 x, vec3 y, float a);\n // Returns the linear blend of `x` and `y`, i.e. `x * (1-a) + y * a`\n vec3 mix(vec3 x, vec3 y, vec3 a);\n // Returns the linear blend of `x` and `y`, i.e. `x * (1-a) + y * a`\n vec4 mix(vec4 x, vec4 y, float a);\n // Returns the linear blend of `x` and `y`, i.e. `x * (1-a) + y * a`\n vec4 mix(vec4 x, vec4 y, vec4 a);\n\n // Returns `0.0` if `x < edge`, otherwise it returns `1.0`\n float step(float edge, float x);\n // Returns `0.0` if `x < edge`, otherwise it returns `1.0`\n vec2 step(float edge, vec2 x);\n // Returns `0.0` if `x < edge`, otherwise it returns `1.0`\n vec2 step(vec2 edge, vec2 x);\n // Returns `0.0` if `x < edge`, otherwise it returns `1.0`\n vec3 step(float edge, vec3 x);\n // Returns `0.0` if `x < edge`, otherwise it returns `1.0`\n vec3 step(vec3 edge, vec3 x);\n // Returns `0.0` if `x < edge`, otherwise it returns `1.0`\n vec4 step(float edge, vec4 x);\n // Returns `0.0` if `x < edge`, otherwise it returns `1.0`\n vec4 step(vec4 edge, vec4 x);\n\n // Returns `0.0` if `x <= edge0` and `1.0` if `x >= edge1` and performs smooth Hermite interpolation between 0 and 1 when `edge0 < x < edge1`.\n // This is useful in cases where you would want a threshold function with a smooth transition. This is equivalent to:\n //\n // ```glslx\n // float t = clamp((x - edge0) / (edge1 - edge0), 0.0, 1.0);\n // return t * t * (3.0 - 2.0 * t);\n // ```\n //\n // Results are undefined if `edge0 >= edge1`.\n float smoothstep(float edge0, float edge1, float x);\n // Returns `0.0` if `x <= edge0` and `1.0` if `x >= edge1` and performs smooth Hermite interpolation between 0 and 1 when `edge0 < x < edge1`.\n // This is useful in cases where you would want a threshold function with a smooth transition. This is equivalent to:\n //\n // ```glslx\n // vec2 t = clamp((x - edge0) / (edge1 - edge0), 0.0, 1.0);\n // return t * t * (3.0 - 2.0 * t);\n // ```\n //\n // Results are undefined if `edge0 >= edge1`.\n vec2 smoothstep(float edge0, float edge1, vec2 x);\n // Returns `0.0` if `x <= edge0` and `1.0` if `x >= edge1` and performs smooth Hermite interpolation between 0 and 1 when `edge0 < x < edge1`.\n // This is useful in cases where you would want a threshold function with a smooth transition. This is equivalent to:\n //\n // ```glslx\n // vec2 t = clamp((x - edge0) / (edge1 - edge0), 0.0, 1.0);\n // return t * t * (3.0 - 2.0 * t);\n // ```\n //\n // Results are undefined if `edge0 >= edge1`.\n vec2 smoothstep(vec2 edge0, vec2 edge1, vec2 x);\n // Returns `0.0` if `x <= edge0` and `1.0` if `x >= edge1` and performs smooth Hermite interpolation between 0 and 1 when `edge0 < x < edge1`.\n // This is useful in cases where you would want a threshold function with a smooth transition. This is equivalent to:\n //\n // ```glslx\n // vec3 t = clamp((x - edge0) / (edge1 - edge0), 0.0, 1.0);\n // return t * t * (3.0 - 2.0 * t);\n // ```\n //\n // Results are undefined if `edge0 >= edge1`.\n vec3 smoothstep(float edge0, float edge1, vec3 x);\n // Returns `0.0` if `x <= edge0` and `1.0` if `x >= edge1` and performs smooth Hermite interpolation between 0 and 1 when `edge0 < x < edge1`.\n // This is useful in cases where you would want a threshold function with a smooth transition. This is equivalent to:\n //\n // ```glslx\n // vec3 t = clamp((x - edge0) / (edge1 - edge0), 0.0, 1.0);\n // return t * t * (3.0 - 2.0 * t);\n // ```\n //\n // Results are undefined if `edge0 >= edge1`.\n vec3 smoothstep(vec3 edge0, vec3 edge1, vec3 x);\n // Returns `0.0` if `x <= edge0` and `1.0` if `x >= edge1` and performs smooth Hermite interpolation between 0 and 1 when `edge0 < x < edge1`.\n // This is useful in cases where you would want a threshold function with a smooth transition. This is equivalent to:\n //\n // ```glslx\n // vec4 t = clamp((x - edge0) / (edge1 - edge0), 0.0, 1.0);\n // return t * t * (3.0 - 2.0 * t);\n // ```\n //\n // Results are undefined if `edge0 >= edge1`.\n vec4 smoothstep(float edge0, float edge1, vec4 x);\n // Returns `0.0` if `x <= edge0` and `1.0` if `x >= edge1` and performs smooth Hermite interpolation between 0 and 1 when `edge0 < x < edge1`.\n // This is useful in cases where you would want a threshold function with a smooth transition. This is equivalent to:\n //\n // ```glslx\n // vec4 t = clamp((x - edge0) / (edge1 - edge0), 0.0, 1.0);\n // return t * t * (3.0 - 2.0 * t);\n // ```\n //\n // Results are undefined if `edge0 >= edge1`.\n vec4 smoothstep(vec4 edge0, vec4 edge1, vec4 x);\n\n ////////////////////////////////////////////////////////////////////////////////\n // Geometric Functions\n\n // Returns the length of vector `x`, i.e. `√x²`\n float length(float x);\n // Returns the length of vector `x`, i.e. `√x[0]² + x[1]²`\n float length(vec2 x);\n // Returns the length of vector `x`, i.e. `√x[0]² + x[1]² + x[2]²`\n float length(vec3 x);\n // Returns the length of vector `x`, i.e. `√x[0]² + x[1]² + x[2]² + x[3]²`\n float length(vec4 x);\n\n // Returns the distance between `p0` and `p1`, i.e. `length(p0 - p1)`\n float distance(float p0, float p1);\n // Returns the distance between `p0` and `p1`, i.e. `length(p0 - p1)`\n float distance(vec2 p0, vec2 p1);\n // Returns the distance between `p0` and `p1`, i.e. `length(p0 - p1)`\n float distance(vec3 p0, vec3 p1);\n // Returns the distance between `p0` and `p1`, i.e. `length(p0 - p1)`\n float distance(vec4 p0, vec4 p1);\n\n // Returns the dot product of `x` and `y`, i.e. `x*y`\n float dot(float x, float y);\n // Returns the dot product of `x` and `y`, i.e. `x[0]*y[0] + x[1]*y[1]`\n float dot(vec2 x, vec2 y);\n // Returns the dot product of `x` and `y`, i.e. `x[0]*y[0] + x[1]*y[1] + x[2]*y[2]`\n float dot(vec3 x, vec3 y);\n // Returns the dot product of `x` and `y`, i.e. `x[0]*y[0] + x[1]*y[1] + x[2]*y[2] + x[3]*y[3]`\n float dot(vec4 x, vec4 y);\n\n // Returns the cross product of `x` and `y`, i.e.\n //\n // ```glslx\n // vec3(\n // x[1]*y[2] - y[1]*x[2],\n // x[2]*y[0] - y[2]*x[0],\n // x[0]*y[1] - y[0]*x[1])\n // ```\n vec3 cross(vec3 x, vec3 y);\n\n // Returns a vector in the same direction as `x` but with a length of 1.\n float normalize(float x);\n // Returns a vector in the same direction as `x` but with a length of 1.\n vec2 normalize(vec2 x);\n // Returns a vector in the same direction as `x` but with a length of 1.\n vec3 normalize(vec3 x);\n // Returns a vector in the same direction as `x` but with a length of 1.\n vec4 normalize(vec4 x);\n\n // If `dot(Nref, I) < 0` return `N`, otherwise return `-N`\n float faceforward(float N, float I, float Nref);\n // If `dot(Nref, I) < 0` return `N`, otherwise return `-N`\n vec2 faceforward(vec2 N, vec2 I, vec2 Nref);\n // If `dot(Nref, I) < 0` return `N`, otherwise return `-N`\n vec3 faceforward(vec3 N, vec3 I, vec3 Nref);\n // If `dot(Nref, I) < 0` return `N`, otherwise return `-N`\n vec4 faceforward(vec4 N, vec4 I, vec4 Nref);\n\n // For the incident vector `I` and surface orientation `N`, returns the reflection direction: `I - 2 * dot(N, I) * N`.\n // `N` must already be normalized in order to achieve the desired result.\n float reflect(float I, float N);\n // For the incident vector `I` and surface orientation `N`, returns the reflection direction: `I - 2 * dot(N, I) * N`.\n // `N` must already be normalized in order to achieve the desired result.\n vec2 reflect(vec2 I, vec2 N);\n // For the incident vector `I` and surface orientation `N`, returns the reflection direction: `I - 2 * dot(N, I) * N`.\n // `N` must already be normalized in order to achieve the desired result.\n vec3 reflect(vec3 I, vec3 N);\n // For the incident vector `I` and surface orientation `N`, returns the reflection direction: `I - 2 * dot(N, I) * N`.\n // `N` must already be normalized in order to achieve the desired result.\n vec4 reflect(vec4 I, vec4 N);\n\n // For the incident vector `I` and surface normal `N`, and the ratio of indices of refraction `eta`, return the refraction vector.\n // The result is computed by:\n //\n // ```glslx\n // float k = 1.0 - eta * eta * (1.0 - dot(N, I) * dot(N, I));\n // if (k < 0.0) return float(0.0);\n // else return eta * I - (eta * dot(N, I) + sqrt(k)) * N;\n // ```\n //\n // The input parameters for the incident vector `I` and the surface normal `N`.\n float refract(float I, float N, float eta);\n // For the incident vector `I` and surface normal `N`, and the ratio of indices of refraction `eta`, return the refraction vector.\n // The result is computed by:\n //\n // ```glslx\n // float k = 1.0 - eta * eta * (1.0 - dot(N, I) * dot(N, I));\n // if (k < 0.0) return vec2(0.0);\n // else return eta * I - (eta * dot(N, I) + sqrt(k)) * N;\n // ```\n //\n // The input parameters for the incident vector `I` and the surface normal `N`.\n vec2 refract(vec2 I, vec2 N, float eta);\n // For the incident vector `I` and surface normal `N`, and the ratio of indices of refraction `eta`, return the refraction vector.\n // The result is computed by:\n //\n // ```glslx\n // float k = 1.0 - eta * eta * (1.0 - dot(N, I) * dot(N, I));\n // if (k < 0.0) return vec3(0.0);\n // else return eta * I - (eta * dot(N, I) + sqrt(k)) * N;\n // ```\n //\n // The input parameters for the incident vector `I` and the surface normal `N`.\n vec3 refract(vec3 I, vec3 N, float eta);\n // For the incident vector `I` and surface normal `N`, and the ratio of indices of refraction `eta`, return the refraction vector.\n // The result is computed by:\n //\n // ```glslx\n // float k = 1.0 - eta * eta * (1.0 - dot(N, I) * dot(N, I));\n // if (k < 0.0) return vec4(0.0);\n // else return eta * I - (eta * dot(N, I) + sqrt(k)) * N;\n // ```\n //\n // The input parameters for the incident vector `I` and the surface normal `N`.\n vec4 refract(vec4 I, vec4 N, float eta);\n\n ////////////////////////////////////////////////////////////////////////////////\n // Matrix Functions\n\n // Multiply matrix `x` by matrix `y` component-wise, i.e., `result[i][j]` is the scalar product of `x[i][j]` and `y[i][j]`.\n // Note: to get linear algebraic matrix multiplication, use the multiply operator (`*`).\n mat2 matrixCompMult(mat2 x, mat2 y);\n // Multiply matrix `x` by matrix `y` component-wise, i.e., `result[i][j]` is the scalar product of `x[i][j]` and `y[i][j]`.\n // Note: to get linear algebraic matrix multiplication, use the multiply operator (`*`).\n mat3 matrixCompMult(mat3 x, mat3 y);\n // Multiply matrix `x` by matrix `y` component-wise, i.e., `result[i][j]` is the scalar product of `x[i][j]` and `y[i][j]`.\n // Note: to get linear algebraic matrix multiplication, use the multiply operator (`*`).\n mat4 matrixCompMult(mat4 x, mat4 y);\n\n ////////////////////////////////////////////////////////////////////////////////\n // Vector Relational Functions\n\n // Returns the component-wise compare of `x < y`.\n bvec2 lessThan(ivec2 x, ivec2 y);\n // Returns the component-wise compare of `x < y`.\n bvec2 lessThan(vec2 x, vec2 y);\n // Returns the component-wise compare of `x < y`.\n bvec3 lessThan(ivec3 x, ivec3 y);\n // Returns the component-wise compare of `x < y`.\n bvec3 lessThan(vec3 x, vec3 y);\n // Returns the component-wise compare of `x < y`.\n bvec4 lessThan(ivec4 x, ivec4 y);\n // Returns the component-wise compare of `x < y`.\n bvec4 lessThan(vec4 x, vec4 y);\n\n // Returns the component-wise compare of `x <= y`.\n bvec2 lessThanEqual(ivec2 x, ivec2 y);\n // Returns the component-wise compare of `x <= y`.\n bvec2 lessThanEqual(vec2 x, vec2 y);\n // Returns the component-wise compare of `x <= y`.\n bvec3 lessThanEqual(ivec3 x, ivec3 y);\n // Returns the component-wise compare of `x <= y`.\n bvec3 lessThanEqual(vec3 x, vec3 y);\n // Returns the component-wise compare of `x <= y`.\n bvec4 lessThanEqual(ivec4 x, ivec4 y);\n // Returns the component-wise compare of `x <= y`.\n bvec4 lessThanEqual(vec4 x, vec4 y);\n\n // Returns the component-wise compare of `x > y`.\n bvec2 greaterThan(ivec2 x, ivec2 y);\n // Returns the component-wise compare of `x > y`.\n bvec2 greaterThan(vec2 x, vec2 y);\n // Returns the component-wise compare of `x > y`.\n bvec3 greaterThan(ivec3 x, ivec3 y);\n // Returns the component-wise compare of `x > y`.\n bvec3 greaterThan(vec3 x, vec3 y);\n // Returns the component-wise compare of `x > y`.\n bvec4 greaterThan(ivec4 x, ivec4 y);\n // Returns the component-wise compare of `x > y`.\n bvec4 greaterThan(vec4 x, vec4 y);\n\n // Returns the component-wise compare of `x >= y`.\n bvec2 greaterThanEqual(ivec2 x, ivec2 y);\n // Returns the component-wise compare of `x >= y`.\n bvec2 greaterThanEqual(vec2 x, vec2 y);\n // Returns the component-wise compare of `x >= y`.\n bvec3 greaterThanEqual(ivec3 x, ivec3 y);\n // Returns the component-wise compare of `x >= y`.\n bvec3 greaterThanEqual(vec3 x, vec3 y);\n // Returns the component-wise compare of `x >= y`.\n bvec4 greaterThanEqual(ivec4 x, ivec4 y);\n // Returns the component-wise compare of `x >= y`.\n bvec4 greaterThanEqual(vec4 x, vec4 y);\n\n // Returns the component-wise compare of `x == y`.\n bvec2 equal(bvec2 x, bvec2 y);\n // Returns the component-wise compare of `x == y`.\n bvec2 equal(ivec2 x, ivec2 y);\n // Returns the component-wise compare of `x == y`.\n bvec2 equal(vec2 x, vec2 y);\n // Returns the component-wise compare of `x == y`.\n bvec3 equal(bvec3 x, bvec3 y);\n // Returns the component-wise compare of `x == y`.\n bvec3 equal(ivec3 x, ivec3 y);\n // Returns the component-wise compare of `x == y`.\n bvec3 equal(vec3 x, vec3 y);\n // Returns the component-wise compare of `x == y`.\n bvec4 equal(bvec4 x, bvec4 y);\n // Returns the component-wise compare of `x == y`.\n bvec4 equal(ivec4 x, ivec4 y);\n // Returns the component-wise compare of `x == y`.\n bvec4 equal(vec4 x, vec4 y);\n\n // Returns the component-wise compare of `x != y`.\n bvec2 notEqual(bvec2 x, bvec2 y);\n // Returns the component-wise compare of `x != y`.\n bvec2 notEqual(ivec2 x, ivec2 y);\n // Returns the component-wise compare of `x != y`.\n bvec2 notEqual(vec2 x, vec2 y);\n // Returns the component-wise compare of `x != y`.\n bvec3 notEqual(bvec3 x, bvec3 y);\n // Returns the component-wise compare of `x != y`.\n bvec3 notEqual(ivec3 x, ivec3 y);\n // Returns the component-wise compare of `x != y`.\n bvec3 notEqual(vec3 x, vec3 y);\n // Returns the component-wise compare of `x != y`.\n bvec4 notEqual(bvec4 x, bvec4 y);\n // Returns the component-wise compare of `x != y`.\n bvec4 notEqual(ivec4 x, ivec4 y);\n // Returns the component-wise compare of `x != y`.\n bvec4 notEqual(vec4 x, vec4 y);\n\n // Returns true if any component of `x` is `true`.\n bool any(bvec2 x);\n // Returns true if any component of `x` is `true`.\n bool any(bvec3 x);\n // Returns true if any component of `x` is `true`.\n bool any(bvec4 x);\n\n // Returns true only if all components of `x` are `true`.\n bool all(bvec2 x);\n // Returns true only if all components of `x` are `true`.\n bool all(bvec3 x);\n // Returns true only if all components of `x` are `true`.\n bool all(bvec4 x);\n\n // Returns the component-wise logical complement of `x`.\n bvec2 not(bvec2 x);\n // Returns the component-wise logical complement of `x`.\n bvec3 not(bvec3 x);\n // Returns the component-wise logical complement of `x`.\n bvec4 not(bvec4 x);\n\n ////////////////////////////////////////////////////////////////////////////////\n // Texture Lookup Functions\n\n // Use the texture coordinate `coord` to do a texture lookup in the 2D texture currently bound to `sampler`.\n vec4 texture2D(sampler2D sampler, vec2 coord);\n // Use the texture coordinate `coord` to do a texture lookup in the 2D texture currently bound to `sampler`.\n vec4 texture2D(sampler2D sampler, vec2 coord, float bias);\n // Use the texture coordinate `coord` to do a texture lookup in the 2D texture currently bound to `sampler`.\n vec4 texture2DLod(sampler2D sampler, vec2 coord, float lod);\n // Use the texture coordinate `coord` to do a texture lookup in the 2D texture currently bound to `sampler`.\n // The texture coordinate `(coord.s, coord.t)` is divided by the last component of `coord`.\n vec4 texture2DProj(sampler2D sampler, vec3 coord);\n // Use the texture coordinate `coord` to do a texture lookup in the 2D texture currently bound to `sampler`.\n // The texture coordinate `(coord.s, coord.t)` is divided by the last component of `coord`.\n vec4 texture2DProj(sampler2D sampler, vec3 coord, float bias);\n // Use the texture coordinate `coord` to do a texture lookup in the 2D texture currently bound to `sampler`.\n // The texture coordinate `(coord.s, coord.t)` is divided by the last component of `coord`.\n vec4 texture2DProjLod(sampler2D sampler, vec3 coord, float lod);\n // Use the texture coordinate `coord` to do a texture lookup in the 2D texture currently bound to `sampler`.\n // The texture coordinate `(coord.s, coord.t)` is divided by the last component of `coord`. The third component of `coord` is ignored.\n vec4 texture2DProj(sampler2D sampler, vec4 coord);\n // Use the texture coordinate `coord` to do a texture lookup in the 2D texture currently bound to `sampler`.\n // The texture coordinate `(coord.s, coord.t)` is divided by the last component of `coord`. The third component of `coord` is ignored.\n vec4 texture2DProj(sampler2D sampler, vec4 coord, float bias);\n // Use the texture coordinate `coord` to do a texture lookup in the 2D texture currently bound to `sampler`.\n // The texture coordinate `(coord.s, coord.t)` is divided by the last component of `coord`. The third component of `coord` is ignored.\n vec4 texture2DProjLod(sampler2D sampler, vec4 coord, float lod);\n\n // Use the texture coordinate `coord` to do a texture lookup in the cube map texture currently bound to `sampler`.\n // The direction of `coord` is used to select which face to do a 2-dimensional texture lookup in.\n vec4 textureCube(samplerCube sampler, vec3 coord);\n // Use the texture coordinate `coord` to do a texture lookup in the cube map texture currently bound to `sampler`.\n // The direction of `coord` is used to select which face to do a 2-dimensional texture lookup in.\n vec4 textureCube(samplerCube sampler, vec3 coord, float bias);\n // Use the texture coordinate `coord` to do a texture lookup in the cube map texture currently bound to `sampler`.\n // The direction of `coord` is used to select which face to do a 2-dimensional texture lookup in.\n vec4 textureCubeLod(samplerCube sampler, vec3 coord, float lod);\n\n #extension GL_OES_standard_derivatives {\n // Available only in the fragment shader, this function returns the partial derivative of expression `p` with respect to the window `x` coordinate.\n //\n // Expressions that imply higher order derivatives such as `dFdx(dFdx(n))` have undefined results, as do mixed-order derivatives such as\n // `dFdx(dFdy(n))`. It is assumed that the expression `p` is continuous and therefore, expressions evaluated via non-uniform control flow may be undefined.\n float dFdx(float v);\n // Available only in the fragment shader, this function returns the partial derivative of expression `p` with respect to the window `x` coordinate.\n //\n // Expressions that imply higher order derivatives such as `dFdx(dFdx(n))` have undefined results, as do mixed-order derivatives such as\n // `dFdx(dFdy(n))`. It is assumed that the expression `p` is continuous and therefore, expressions evaluated via non-uniform control flow may be undefined.\n vec2 dFdx(vec2 v);\n // Available only in the fragment shader, this function returns the partial derivative of expression `p` with respect to the window `x` coordinate.\n //\n // Expressions that imply higher order derivatives such as `dFdx(dFdx(n))` have undefined results, as do mixed-order derivatives such as\n // `dFdx(dFdy(n))`. It is assumed that the expression `p` is continuous and therefore, expressions evaluated via non-uniform control flow may be undefined.\n vec3 dFdx(vec3 v);\n // Available only in the fragment shader, this function returns the partial derivative of expression `p` with respect to the window `x` coordinate.\n //\n // Expressions that imply higher order derivatives such as `dFdx(dFdx(n))` have undefined results, as do mixed-order derivatives such as\n // `dFdx(dFdy(n))`. It is assumed that the expression `p` is continuous and therefore, expressions evaluated via non-uniform control flow may be undefined.\n vec4 dFdx(vec4 v);\n\n // Available only in the fragment shader, this function returns the partial derivative of expression `p` with respect to the window `y` coordinate.\n //\n // Expressions that imply higher order derivatives such as `dFdy(dFdy(n))` have undefined results, as do mixed-order derivatives such as\n // `dFdx(dFdy(n))`. It is assumed that the expression `p` is continuous and therefore, expressions evaluated via non-uniform control flow may be undefined.\n float dFdy(float v);\n // Available only in the fragment shader, this function returns the partial derivative of expression `p` with respect to the window `y` coordinate.\n //\n // Expressions that imply higher order derivatives such as `dFdy(dFdy(n))` have undefined results, as do mixed-order derivatives such as\n // `dFdx(dFdy(n))`. It is assumed that the expression `p` is continuous and therefore, expressions evaluated via non-uniform control flow may be undefined.\n vec2 dFdy(vec2 v);\n // Available only in the fragment shader, this function returns the partial derivative of expression `p` with respect to the window `y` coordinate.\n //\n // Expressions that imply higher order derivatives such as `dFdy(dFdy(n))` have undefined results, as do mixed-order derivatives such as\n // `dFdx(dFdy(n))`. It is assumed that the expression `p` is continuous and therefore, expressions evaluated via non-uniform control flow may be undefined.\n vec3 dFdy(vec3 v);\n // Available only in the fragment shader, this function returns the partial derivative of expression `p` with respect to the window `y` coordinate.\n //\n // Expressions that imply higher order derivatives such as `dFdy(dFdy(n))` have undefined results, as do mixed-order derivatives such as\n // `dFdx(dFdy(n))`. It is assumed that the expression `p` is continuous and therefore, expressions evaluated via non-uniform control flow may be undefined.\n vec4 dFdy(vec4 v);\n\n // Returns the sum of the absolute derivative in `x` and `y` using local differencing for the input argument `p`, i.e. `abs(dFdx(p)) + abs(dFdy(p))`\n float fwidth(float v);\n // Returns the sum of the absolute derivative in `x` and `y` using local differencing for the input argument `p`, i.e. `abs(dFdx(p)) + abs(dFdy(p))`\n vec2 fwidth(vec2 v);\n // Returns the sum of the absolute derivative in `x` and `y` using local differencing for the input argument `p`, i.e. `abs(dFdx(p)) + abs(dFdy(p))`\n vec3 fwidth(vec3 v);\n // Returns the sum of the absolute derivative in `x` and `y` using local differencing for the input argument `p`, i.e. `abs(dFdx(p)) + abs(dFdy(p))`\n vec4 fwidth(vec4 v);\n }\n\n #extension GL_EXT_frag_depth {\n // Available only in the fragment language, `gl_FragDepthEXT` is an output variable that is used to establish the depth value for the current fragment.\n // If depth buffering is enabled and no shader writes to `gl_FragDepthEXT`, then the fixed function value for depth will be used (this value is contained\n // in the `z` component of `gl_FragCoord`) otherwise, the value written to `gl_FragDepthEXT` is used.\n //\n // If a shader statically assigns to `gl_FragDepthEXT`, then the value of the fragment's depth may be undefined for executions of the shader that take\n // that path. That is, if the set of linked fragment shaders statically contain a write to `gl_FragDepthEXT`, then it is responsible for always writing it.\n float gl_FragDepthEXT;\n }\n\n #extension GL_EXT_shader_texture_lod {\n vec4 texture2DGradEXT(sampler2D sampler, vec2 P, vec2 dPdx, vec2 dPdy);\n vec4 texture2DLodEXT(sampler2D sampler, vec2 coord, float lod);\n vec4 texture2DProjGradEXT(sampler2D sampler, vec3 P, vec2 dPdx, vec2 dPdy);\n vec4 texture2DProjGradEXT(sampler2D sampler, vec4 P, vec2 dPdx, vec2 dPdy);\n vec4 texture2DProjLodEXT(sampler2D sampler, vec3 coord, float lod);\n vec4 texture2DProjLodEXT(sampler2D sampler, vec4 coord, float lod);\n vec4 textureCubeGradEXT(samplerCube sampler, vec3 P, vec3 dPdx, vec3 dPdy);\n vec4 textureCubeLodEXT(samplerCube sampler, vec3 coord, float lod);\n }\n}\n");
6
- return xc(a,e,0),b.unshift(e),c?1:0}function Kf(a,b,c){if(a.d)return null;for(var k=0,q=b.length;k<q;k=k+1|0){var d=b[k];xc(a,d,0)}for(var e=ie(a,b),f=new Ei(0),h=new Ri(1,null),l=new oi(c.e),m=new Pi(a,l,e),g=[],v=0,u=b.length;v<u;v=v+1|0){var i=b[v],n=Nd(a,i.c,f,l,h,m);Jf(g,n.a)}return Sd(m,f),new ri(f,g)}function je(a,b,c){if(a.d)return null;for(var S=0,ea=b.length;S<ea;S=S+1|0){var d=b[S];xc(a,d,0)}for(var e=ie(a,b),f=new Ei(0),h=new Ri(1,null),l=new oi(c.e),m=new Pi(a,l,e),fa=0,V=b.length;fa<V;fa=fa+1|0){var g=b[fa];Nd(a,g.c,f,l,h,m)}if(Sd(m,f),a.d)return null;for(var i=[],n=[],ja=0,ua=Lf(h),Ma=ua.length;ja<Ma;ja=ja+1|0){for(var k=ua[ja],q=new Ei(0),v=new Ri(1,null),u=new oi(c.e),B=new Di,p=new Pi(B,u,e),ba=0,ga=b.length;ba<ga;ba=ba+1|0){var O=b[ba];Nd(B,O.c,q,u,v,p)}Sd(p,q),Mf(v,k),mh(q,u,c,e),n.push(q),i.push(new pi(k.c,'',qh(k.e))),e^1||Nf(q,k)}for(var C=$g(new Ni(c.c),n),P=0,na=i.length;P<na;P=P+1|0)i[P].b=new ti(n[P],c).a;return new qi(i,C)}function Lf(a){for(var b=[],d=0,e=Array.from(a.c.values()),f=e.length;d<f;d=d+1|0){
7
- var c=e[d];c instanceof wc&&c.e&49152&&b.push(c)}return b}function Mf(a,b){for(var e=0,f=Array.from(a.c.values()),h=f.length;e<h;e=e+1|0){var c=f[e];if(c.a^b.a)c.e&=-49153;else{c.c='main';var d=c.u;d&&(d.c=c.c)}}}function Nf(a,b){var c=(b.e&16384)!=0,d=(b.e&32768)!=0;if(c!=d)for(var e=a.g;e;e=e.k)if(e.b==17){var f=e.h|0;f&64&&Y(e,f&-65|(d?32:1024))}}function Of(c,a){var b=a.m;c.b.push(c.b.length==0||rd(c.b)),b&&Ie(b.b)&&c.a.push(!1)}function Pf(d,a){var b=a.m,c=d.b.pop();c&&(a.q=!0),b&&Ie(b.b)&&!d.a.pop()&&(b.b==19&&Ua(b.g)||b.b==7&&Ua(b.i)||b.b==10&&(!Ja(b)||Ua(Ja(b))))&&rb(d.b,!1)}function ke(e,a){if(rd(e.b))switch(a.b){case 4:e.a.length&&rb(e.a,!0),rb(e.b,!1);break;case 15:case 6:case 5:rb(e.b,!1);break;case 12:var b=a.g,c=a.g.k,d=a.g.k.k;Ua(b)?c.q||rb(e.b,!1):Qb(b)&&d?d.q||rb(e.b,!1):c&&d&&!c.q&&!d.q&&rb(e.b,!1);break}}function Qf(a,b){return le(a)||le(b)||a.b!=b.b&&(a.b==18||a.b==14||b.b==14||a.b==9||b.b==9)}function le(a){return a.b==11&&a.e.q!=null}function me(a,b){var c=a.toString(),d=a.toExponential();
8
- d.length<c.length&&(c=d);var e=c.indexOf('e'),f='';return ~e&&(f=c.slice(e),c=c.slice(0,e)),c=(+(+c).toFixed(6)).toString(),f==''&&c.indexOf('.')==-1&&(c+=b^1?'.0':'.'),b==1&&c.startsWith('0.')&&c!='0.'&&(c=c.slice(1)),b==1&&c.startsWith('-0.')&&c!='-0.'&&(c='-'+c.slice(2)),c+f}function Rf(b,a){switch(a.b){case 11:case 16:return (a.e.e&65536)!=0;case 17:return ((a.h|0)&65536)!=0}return!1}function td(a){a.f||(a.b+=a.c)}function ud(a){a.f||(a.b=a.b.slice(a.c.length))}function bb(i,a){switch(a.b){case 3:if(!a.g&&a.m)i.a+=';';else{i.a+='{'+i.d,td(i);for(var b=a.g;b;b=b.k)i.a+=i.b,bb(i,b),i.a+=i.d;ud(i),i.a+=i.b+'}'}break;case 4:i.a+='break;';break;case 5:i.a+='continue;';break;case 6:i.a+='discard;';break;case 7:i.a+='do',nc(i,a.g,0),i.a+=i.d+i.b+'while'+i.e+'(',Q(i,a.i,0),i.a+=');';break;case 8:Q(i,a.g,0),i.a+=';';break;case 9:ne(i),i.a+='#extension '+a.l+i.e+':'+i.e;switch(a.h|0){case 1:i.a+='disable';break;case 2:i.a+='enable';break;case 3:i.a+='require';break;case 4:i.a+='warn';break}oe(i);break;case 10:i.a+='for'+i.e+'(',
9
- wb(a)?wb(a).b^17?(Q(i,wb(a),0),i.a+=';'):bb(i,wb(a)):i.a+=';',Ja(a)&&(i.a+=i.e,Q(i,Ja(a),0)),i.a+=';',Zc(a)&&(i.a+=i.e,Q(i,Zc(a),0)),i.a+=')',nc(i,a.i,1);break;case 11:var c=a.e;i.a+=hb(c.e,i.e),Q(i,c.k,0),i.a+=' ',i.a+=c.c,i.a+='(';for(var n=0,k=c.n,q=k.length;n<q;n=n+1|0){var d=k[n];d!=c.n[0]&&(i.a+=','+i.e),i.a+=hb(d.e,i.e),Q(i,d.p,0),i.a+=' ',vd(i,d)}i.a+=')',c.q?(i.a+=i.e,bb(i,c.q)):i.a+=';';break;case 12:i.a+='if'+i.e+'(',Q(i,a.g,0),i.a+=')',nc(i,a.g.k,1),a.g.k.k&&(i.a+=i.d+i.b+'else',a.g.k.k.b^12?nc(i,a.g.k.k,0):(i.a+=' ',bb(i,a.g.k.k)));break;case 14:i.a+='precision ',i.a+=hb(a.h|0,i.e),Q(i,a.g,0),i.a+=';';break;case 15:var e=a.g;i.a+='return',e&&(Cg(e.b)||(i.a+=' '),Q(i,e,0)),i.a+=';';break;case 16:var f=a.e;i.a+=hb(f.e,i.e),i.a+='struct '+f.c+i.e+'{'+i.d,td(i);for(var h=a.g.g;h;h=h.k)i.a+=i.b,bb(i,h),i.a+=i.d;if(ud(i),i.a+=i.b+'}',a.g.k)for(var l=a.g.k.g.k;l;l=l.k)i.a+=l.n.n?','+i.e:i.e,vd(i,l.e);i.a+=';';break;case 17:i.a+=hb(a.h|0,i.e),Q(i,a.g,0);for(var m=a.g.k;m;m=m.k){var g=m.e;i.a+=m.n.n?','+i.e:' ',
10
- vd(i,g)}i.a+=';';break;case 18:ne(i),i.a+='#version '+a.l,oe(i);break;case 19:i.a+='while'+i.e+'(',Q(i,a.g,0),i.a+=')',nc(i,a.i,1);break;default:i.a+=Qh[a.b];break}}function ne(a){a.a!=''&&!a.a.endsWith('\n')&&(a.a+='\n')}function oe(a){a.f&&(a.a+='\n')}function nc(c,a,b){a.b^3?(c.a+=c.f&&!b?' ':c.d,td(c),c.a+=c.b,bb(c,a),ud(c)):(c.a+=c.e,bb(c,a))}function pe(c,a){for(var b=a;b;b=b.k)b!=a&&(c.a+=','+c.e),Q(c,b,1)}function vd(b,a){b.a+=a.c,a.C&&(b.a+='[',Q(b,a.C,0),b.a+=']'),W(a)&&(b.a+=b.e+'='+b.e,Q(b,W(a),1))}function Q(d,a,b){switch(a.b){case 20:Q(d,a.g,15),d.a+='(',pe(d,a.g.k),d.a+=')';break;case 21:Q(d,a.g,16),d.a+='.',d.a+=a.e?a.e.c:a.l;break;case 22:2<b&&(d.a+='('),Q(d,a.g,3),d.a+=d.e+'?'+d.e,Q(d,a.g.k,2),d.a+=d.e+':'+d.e,Q(d,a.i,2),2<b&&(d.a+=')');break;case 23:d.a+=a.e.c;break;case 25:0<b&&(d.a+='('),pe(d,a.g),0<b&&(d.a+=')');break;case 26:var c=a.g;d.a+=rf(a.f).a.c,c&&(d.a+='[',Q(d,c,0),d.a+=']');break;case 28:d.a+=(!!a.h).toString();break;case 29:d.a+=me(a.h,d.f?1:0);break;case 30:d.a+=(a.h|0).toString();
11
- break;case 31:d.a+=(a.h|0)+'u';break;case 48:Q(d,a.g,16),d.a+='[',Q(d,a.i,0),d.a+=']';break;case 32:Nb(d,'~',a,b);break;case 33:Nb(d,'-',a,b);break;case 34:Nb(d,'!',a,b);break;case 35:Nb(d,'+',a,b);break;case 36:Nb(d,'--',a,b);break;case 37:Nb(d,'++',a,b);break;case 38:qe(d,'--',a,b);break;case 39:qe(d,'++',a,b);break;case 40:J(d,'+',a,b,12);break;case 41:J(d,'&',a,b,12);break;case 42:J(d,'|',a,b,12);break;case 43:J(d,'^',a,b,12);break;case 44:J(d,'/',a,b,13);break;case 45:J(d,'==',a,b,10);break;case 46:J(d,'>',a,b,10);break;case 47:J(d,'>=',a,b,10);break;case 49:J(d,'<',a,b,10);break;case 50:J(d,'<=',a,b,10);break;case 51:J(d,'&&',a,b,5);break;case 52:J(d,'||',a,b,3);break;case 53:J(d,'^^',a,b,4);break;case 54:J(d,'*',a,b,13);break;case 55:J(d,'!=',a,b,10);break;case 56:J(d,'%',a,b,13);break;case 57:J(d,'<<',a,b,12);break;case 58:J(d,'>>',a,b,12);break;case 59:J(d,'-',a,b,12);break;case 60:J(d,'=',a,b,2);break;case 61:J(d,'+=',a,b,2);break;case 62:J(d,'&=',a,b,2);break;case 63:J(d,'|=',a,b,2);break;case 64:J(d,
12
- '^=',a,b,2);break;case 65:J(d,'/=',a,b,2);break;case 66:J(d,'*=',a,b,2);break;case 67:J(d,'%=',a,b,2);break;case 68:J(d,'<<=',a,b,2);break;case 69:J(d,'>>=',a,b,2);break;case 70:J(d,'-=',a,b,2);break;default:d.a+=Qh[a.b];break}}function Nb(f,a,b,c){var d=b.g,e=d.b;f.a+=a,(a.charCodeAt(0)==45&&(e==33||e==36||Ig(d))||a.charCodeAt(0)==43&&(e==35||e==37))&&(f.a+=' '),Q(f,d,14)}function qe(d,a,b,c){Q(d,b.g,15),d.a+=a}function J(f,a,b,c,d){var e=Vc(b.b);d<c&&(f.a+='('),Q(f,b.g,d+(e|0)|0),f.a+=f.e+a+f.e,Q(f,b.i,d+(!e|0)|0),d<c&&(f.a+=')')}function M(a){if(a.f==H)return null;switch(a.b){case 30:case 29:case 28:return Sa(a);case 23:return Sf(a);case 25:return Tf(a);case 22:return Uf(a);case 21:return Vf(a);case 48:return Wf(a);case 20:return Xf(a);case 33:return we(a,function(b){return-b},function(c){return -c|0});case 34:return cg(a,function(d){return!d});case 35:return we(a,function(e){return+e},function(f){return+f});case 40:return xd(a,function(h,l){return h+l},function(m,g){return m+g|0});case 59:return xd(a,function(i,n){
13
- return i-n},function(k,q){return k-q|0});case 54:return Yf(a);case 44:return xd(a,function(v,u){return u!=0?v/u:0},function(B,p){return p?B/p|0:0});case 45:case 55:return $f(a);case 51:return wd(a,function(O,C){return O&&C});case 52:return wd(a,function(P,S){return P||S});case 53:return wd(a,function(ea,fa){return ea!=fa});case 46:return Pc(a,function(V,ba){return V>ba});case 47:return Pc(a,function(ga,ja){return ga>=ja});case 49:return Pc(a,function(ua,Ma){return ua<Ma});case 50:return Pc(a,function(na,ka){return na<=ka})}return null}function Sf(a){var b=a.e;if(b&&b.e&4){if(b.h)return Sa(b.h);if(b.B)return s(new Ei(27),a.f)}return null}function Tf(a){for(var b=a.g;b;b=b.k){var c=M(b);if(!c||b==a.i)return c}return null}function Uf(a){var b=M(a.g),c=M(a.g.k),d=M(a.i);return b&&b.b==28&&c&&d?!b.h?d:c:null}function Vf(a){var b=M(a.g);if(b&&b.b==20){var c=b.f,d=a.l;if(bd(c))for(var e=d.length,f=Ka(c),v=0,u=Xd(f),B=u.length;v<B;v=v+1|0){var h=u[v];if(~h.indexOf(d[0])){if(e==1)return r(qc(b,1+h.indexOf(d)|0));for(var l=Yd(T(c),
14
- e),m=Ca(l),g=0;g<e;g=g+1|0)o(m,Sa(qc(b,1+h.indexOf(d[g])|0)));return m}}else if(c.a&&c.a instanceof vc)for(var i=c.a,n=i.i,k=0,p=n.length;k<p;k=k+1|0){var q=n[k];if(q.c==d)return r(qc(b,1+k|0))}}return null}function Wf(a){var b=M(a.g),c=M(a.i);if(b&&b.b==20&&c&&c.b==30){var d=b.f;if(bd(d)){var e=X(d),f=c.h|0;if(-1<f&&f<e)return r(qc(b,f+1|0))}else if(ya(d)){var h=X(d),l=c.h|0;if(-1<l&&l<h){for(var m=xa(d),g=Ca(m),i=qc(b,ki(l,h)),n=0;n<h;n=n+1|0)o(g,r(i.k));return g}}}return null}function Xf(a){var b=a.g;if(a.f==da&&b.b==21&&b.l=='length'&&Wc(a)){var c=b.g.f;if(c.b&&c.c>0)return s(s(Y(new Ei(30),c.c),da),da)}if(b.b^26)return null;for(var d=b.f,e=T(d),f=0,h=0,l=[],m=0,g=b.k;g;g=g.k){var i=M(g);if(!i)return null;if(i.b==20&&e&&T(i.g.f))for(var n=i.g.k;n;n=n.k){var k=re(e,n);if(!k)return null;l.push(k)}else{if(e&&(i=re(e,i),!i))return null;l.push(i)}ya(i.f)&&(f=X(i.f),h=X(xa(i.f))),m=m+1|0}return ya(d)&&f&&h&&m^1?null:T(d)?Zf(l,d,ya(d)?f:0,ya(d)?h:0):d.a&&d.a instanceof vc?_f(l,d):null}function Ob(a){for(var b=[],c=a.g.k;c;c=c.k)b.push(c.h);
15
- return b}function Yf(a){var ka,b=M(a.g),c=M(a.i),d=b&&b.f,e=c&&c.f;if(b&&c){if(d==mb&&e==ec||d==nb&&e==fc||d==ob&&e==gc){for(var f=X(d),h=Ca(d),l=Ob(b),m=Ob(c),g=0;g<f;g=g+1|0){for(var i=0,n=0;n<f;n=n+1|0)i+=l[n]*m[n+ki(g,f)|0];o(h,s(ra(new Ei(29),i),ia))}return h}if(d==ec&&e==mb||d==fc&&e==nb||d==gc&&e==ob){for(var k=X(d),q=Ca(e),v=Ob(b),u=Ob(c),B=0;B<k;B=B+1|0){for(var p=0,O=0;O<k;O=O+1|0)p+=v[B+ki(O,k)|0]*u[O];o(q,s(ra(new Ei(29),p),ia))}return q}if(ya(d)&&e==d){for(var C=X(d),P=Ca(d),S=Ob(b),ea=Ob(c),fa=0;fa<C;fa=fa+1|0)for(var V=0;V<C;V=V+1|0){for(var ba=0,ga=0;ga<C;ga=ga+1|0)ba+=S[V+ki(ga,C)|0]*ea[ga+ki(fa,C)|0];o(P,s(ra(new Ei(29),ba),ia))}return P}return (ka=ue(b,c,function(ja,ua){return ja*ua}))||ve(b,c,function(Ma,na){return ki(Ma,na)})}return null}function re(a,b){var c=0;switch(b.b){case 28:c=+!!b.h;break;case 30:c=b.h|0;break;case 29:c=b.h;break;default:return null}switch(a){case ha:return s(Ia(new Ei(28),!!c),ha);case da:return s(Y(new Ei(30),c|0),da);case ia:return s(ra(new Ei(29),c),ia)}return null}
16
- function Zf(a,b,c,d){var e=Ka(b),f=T(b),h=Ca(b);if(a.length^1){if(c&&d){for(var q=X(b),v=X(xa(b)),u=0;u<q;u=u+1|0)for(var B=0;B<v;B=B+1|0)o(h,u<c&&B<d?a[B+ki(u,d)|0]:s(ra(new Ei(29),u^B?0:1),ia))}else{if(a.length<e)return null;for(var p=0;p<e;p=p+1|0){var O=a[p];if(O.f!=f)return null;o(h,O)}}}else{var l=a[0];if(l.f!=f)return null;if(ya(b)){for(var m=X(b),g=X(xa(b)),i=0;i<m;i=i+1|0)for(var n=0;n<g;n=n+1|0)o(h,n^i?s(ra(new Ei(29),0),ia):Sa(l))}else for(var k=0;k<e;k=k+1|0)o(h,Sa(l))}return xa(b)?h:r(h.i)}function _f(a,b){var c=b.a.i,d=Ca(b);if(a.length^c.length)return null;for(var e=0,f=a.length;e<f;e=e+1|0){if(a[e].f!=ca(c[e]))return null;o(d,a[e])}return d}function $f(a){var b=M(a.g),c=M(a.i);if(b&&c){var d=ta(b,c);return s(Ia(new Ei(28),a.b^45?!d:d),ha)}return null}function se(a,b,c,d){if(a.b==20&&a.g.b==26&&T(a.g.f)==b){for(var e=Ca(a.g.f),f=a.g.k;f;f=f.k){var h=M(f);if(!h||h.b^c)return null;o(e,d(h))}return e}return null}function ag(a,b){return a.b^29?se(a,ia,29,function(c){return s(ra(new Ei(29),b(c.h)),ia)}):s(ra(new Ei(29),
17
- b(a.h)),ia)}function bg(a,b){return a.b^30?se(a,da,30,function(c){return s(Y(new Ei(30),b(c.h|0)),da)}):s(Y(new Ei(30),b(a.h|0)),da)}function te(a,b,c,d,e){var f=a.b==20&&a.g.b==26&&T(a.g.f)==c,h=b.b==20&&b.g.b==26&&T(b.g.f)==c;if(f&&h&&b.f==a.f){for(var l=Ca(a.f),m=a.g.k,g=b.g.k;m&&g;){var i=M(m),n=M(g);if(!i||i.b^d||!n||n.b^d)return null;o(l,e(i,n)),m=m.k,g=g.k}if(!m&&!g)return l}else if(f&&b.b==d){for(var k=Ca(a.f),q=a.g.k;q;q=q.k){var v=M(q);if(!v||v.b^d)return null;o(k,e(v,b))}return k}else if(a.b==d&&h){for(var u=Ca(b.f),B=b.g.k;B;B=B.k){var p=M(B);if(!p||p.b^d)return null;o(u,e(a,p))}return u}return null}function ue(a,b,c){return a.b==29&&b.b==29?s(ra(new Ei(29),c(a.h,b.h)),ia):te(a,b,ia,29,function(d,e){return s(ra(new Ei(29),c(d.h,e.h)),ia)})}function ve(a,b,c){return a.b==30&&b.b==30?s(Y(new Ei(30),c(a.h|0,b.h|0)),da):te(a,b,da,30,function(d,e){return s(Y(new Ei(30),c(d.h|0,e.h|0)),da)})}function cg(a,b){var c=M(a.g);return c&&c.b==28?s(Ia(new Ei(28),b(!!c.h)),ha):null}function we(a,b,c){var e,d=M(a.g);
18
- return d&&((e=ag(d,b))||bg(d,c))}function wd(a,b){var c=M(a.g),d=M(a.i);return c&&d&&c.b==28&&d.b==28?s(Ia(new Ei(28),b(!!c.h,!!d.h)),ha):null}function xd(a,b,c){var f,d=M(a.g),e=M(a.i);return d&&e?(f=ue(d,e,b))||ve(d,e,c):null}function Pc(a,b){var c=M(a.g),d=M(a.i);if(c&&d){if(c.b==29&&d.b==29)return s(Ia(new Ei(28),b(c.h,d.h)),ha);if(c.b==30&&d.b==30)return s(Ia(new Ei(28),b(c.h|0,d.h|0)),ha)}return null}function xe(a,b,c){for(var d=0,e=0,f=a.length;e<f;){var h=a.charCodeAt(e);e=e+1|0,Qc(h)&&(d=d+1|0,h==13&&e<f&&a.charCodeAt(e)==10&&(e=e+1|0))}return d>2&&(d=2),mc(c,d)}function dg(a,b,c){switch(c){case 78:switch(b){case 95:return!0;case 126:return!1}break;case 77:switch(b){case 92:return!0;case 126:return!1}break;case 95:if(b==95)return!0;break;case 92:if(b==92)return!0;break;case 115:case 114:if(qf(b)||b==118||b==50)return!1;break;case 111:case 120:case 119:case 118:case 112:return!1;case 117:if(b==113)return!1;break}switch(b){case 115:case 114:case 112:case 79:case 76:return!1;case 95:case 92:switch(a){case 130:case 115:case 114:case 111:case 110:case 120:case 79:case 76:case 32:case 12:
19
- return!1}if(sh(a))return!1;break;case 78:case 77:if(c==126)return!1;break}return!0}function Qc(a){return a==10||a==13}function eg(a){for(var b=0,c=a.length;b<c;b=b+1|0)if(Qc(a.charCodeAt(b)))return!0;return!1}function ye(a){return a==32||a==9}function Rc(a){for(var b=0,c=a.length;b<c;b=b+1|0)if(!ye(a.charCodeAt(b)))return!1;return!0}function fg(a){for(var b=a.length;ye(a.charCodeAt(b-1|0));)b=b-1|0;return a.slice(0,b)}function gg(a,b,c,d){for(var e=[],f=0,h=0,l=a.length;h<l;h=h+1|0){var m=a.charCodeAt(h);Qc(m)&&(e.push(a.slice(f,h)),m==13&&(h+1|0)<l&&a.charCodeAt(h+1|0)==10&&(h=h+1|0),f=h+1|0)}e.push(a.slice(f));for(var g=b.length;g>0&&!Qc(b.charCodeAt(g-1|0));)g=g-1|0;for(var i=b.slice(g),n=i,p=0,O=e.slice(1),C=O.length;p<C;p=p+1|0){var k=O[p];if(!Rc(k)){for(var q=0,v=k.length;q<v&&q<n.length&&k.charCodeAt(q)==n.charCodeAt(q);)q=q+1|0;n=n.slice(0,q)}}for(var u='',P=0,S=e.length;P<S;P=P+1|0){var B=e[P];u==''?(Rc(i)&&(u+=i.slice(n.length)),u+=B):(u+=d,Rc(B)||(u+=c+B.slice(n.length)))}return u}function hg(a,b,c,d){
20
- var e=new Di,f=new Ti('<stdin>',a);if(xc(e,f,1),e.d)return a;var h='',l=f.c.a,m=130,g=130,i=0,n=0,k=!0,q=0,v=null,u=function(B){return!Rc(a.slice(l[B-1|0].a.c,l[B].a.b))},p=function(O,C){switch(O){case 120:case 117:return!0;case 4:case 9:case 10:case 11:case 12:case 15:case 17:case 32:case 43:return!C}return!1},P=null,S=function(){for(var ea=1,fa=q;fa<l.length;fa=fa+1|0){switch(l[fa].b){case 0:case 1:continue;case 113:ea=0;break}break}n=n+ea|0,P(),n=n-ea|0},V=function(){var ba=1;return l[q].b==115&&u(q+1|0)&&(ba=0),n=n+ba|0,v(function(ga){return ga==115})?(n=n-ba|0,!0):(n=n-ba|0,!1)};P=function(){for(;v(function(ja){return ja==0||ja==1}););switch(l[q].b){case 130:case 117:return!1;case 75:case 72:case 74:case 73:case 71:v(function(ua){return!0});break;case 17:v(function(Ma){return!0}),V()&&S(),l[q].b^12||P();break;case 15:case 43:v(function(na){return!0}),V()&&S();break;case 11:v(function(ka){return!0}),S(),v(function(pb){return pb==43})&&(V(),v(function(qa){return qa==120}));break;case 12:if(v(function(Za){return!0}),
21
- l[q].b^17)S();else{var La=u(q);La&&(n=n+1|0),v(function(Na){return!0}),V()&&S(),La&&(n=n-1|0)}break;case 113:case 120:v(function(jb){return!0});break;case 121:case 122:case 123:case 124:for(v(function(Xa){return!0});v(function(Aa){return!u(q)}););break;default:var Ya=qf(l[q].b);if(v(function(Fa){return!0}),Ya&&v(function(Ea){return Ea==114}),Ya&&v(function(Hb){return Hb==126})&&v(function(kb){return kb==115}))v(function(_a){return _a==113})||v(function(Oa){return Oa==120});else{for(var qb=!1;!qb&&u(q)&&(qb=!0,n=n+1|0),v(function($a){return!p($a,!1)}););v(function(Bb){return Bb==120}),qb&&(n=n-1|0)}break}return!0};var _b=function(){for(var Cb=[],Ib=q;Ib<l.length;){var $b=l[Ib].b;switch($b){case 113:case 114:case 115:Cb.push($b);break;case 117:if(!Cb.length)return Ib;if(Cb.pop()^113)return-1;break;case 118:if(!Cb.length||Cb.pop()^114)return-1;break;case 119:if(!Cb.length||Cb.pop()^115)return-1;break}Ib=Ib+1|0}return-1},lb=-1,Db=function(){var Jb=_b(),ac=Jb!=-1&&eg(a.slice(l[q-1|0].a.c,l[Jb].a.b));for(ac&&(lb=q),
22
- n=n+1|0;P(););n=n-1|0,ac&&(lb=q),v(function(ic){return ic==117})},ab=!1,Eb=function(){var Kc=!ab;for(ab=!0,Kc&&(n=n+1|0);v(function(od){return od!=119}););Kc&&(n=n-1|0),v(function(ce){return ce==119})},Ec=function(){var bc=!ab;for(ab=!0,bc&&(n=n+1|0);v(function(Fc){return Fc!=118}););bc&&(n=n-1|0),v(function(jc){return jc==118})};for(v=function(Kb){var va=l[q];if(!Kb(va.b)||va.b==130)return!1;var Fb=lb^q?g^130?xe(a.slice(i,va.a.b),b,c):'':'\n';q=q+1|0,h+=Fb,Fb!=''&&(k=!0,ab=!1),k?h+=mc(b,n):dg(m,g,va.b)&&(h+=' ');var Lb=I(va.a);switch(va.b){case 0:Lb=fg(Lb);break;case 1:Lb=gg(Lb,a.slice(0,va.a.b),mc(b,n),c);break}h+=Lb,m=g,g=va.b,i=va.a.c,k=!1;switch(va.b){case 113:Db();break;case 115:Eb();break;case 114:Ec();break}return!0};P()||v(function(cc){return cc!=130}););var Gc=xe(a.slice(i),b,c);switch(d){case 0:Gc!=''&&(h+=c);break;case 2:h!=''&&(h+=c);break}return h}function ig(a){return a.f!=null?new ui(G(a.h)+' '+a.f+';',''):a.d&&new ui(oc(a.d),Sc(a.d.f))}function Tc(b,a){return a.a==b.a&&uc(a,b.b)}function yd(b,a){
23
- return Tc(b,a.b)?(b.c=z(a),b.d=a,b.e=a.b,!0):!1}function zd(b,a){return yd(b,a)||Ra(b,a.p)||Ra(b,a.C)||Ra(b,W(a))}function jg(c,a){for(var d=0,e=a.n,f=e.length;d<f;d=d+1|0){var b=e[d];if(zd(c,b))return!0}return yd(c,a)||Ra(c,a.k)||Ra(c,a.q)}function kg(c,a){for(var d=0,e=a.i,f=e.length;d<f;d=d+1|0){var b=e[d];if(zd(c,b))return!0}return yd(c,a)}function Ra(c,a){var d;if(!a)return!1;for(var b=a.g;b;b=b.k)if(Ra(c,b))return!0;switch(a.b){case 23:if(Tc(c,a.c))return c.c=a.f,c.d=a.e,c.e=a.c,!0;break;case 26:if(Tc(c,a.c))return c.c=a.f,c.d=((d=c.c).b?d.b:c.c).a,c.e=a.c,!0;break;case 21:if(Tc(c,a.d))return c.c=a.f,bd(a.g.f)?(c.f=a.l,c.h=a.f):c.d=a.e,c.e=a.d,!0;break;case 2:return zd(c,a.e);case 11:return jg(c,a.e);case 16:return kg(c,a.e)}return!1}function Ae(d,a){switch(a.b){case 16:case 11:Be(d,a.e);break;case 17:for(var b=a.g.k;b;b=b.k)Be(d,b.e);break;case 0:for(var c=a.g;c;c=c.k)Ae(d,c);break}}function Be(b,a){a.b&&a.b.a==b.a&&b.b.push(a)}function lg(l,a){var b=new vi(l.a,l.b);if(Ra(b,a),l.d=b.d,l.d){tb(l,a);var c=null;
24
- l.c.sort(function(d,e){return d.a==e.a?qd(d.b,e.b):If(d.a.a,e.a.a)}),Mb(l.c,function(f){var h=c;return c=f,h!=null&&Yg(c,h)})}}function sb(c,a,b){b==c.d&&a&&I(a)==c.d.c&&c.c.push(a)}function Ad(b,a){sb(b,a.b,a),tb(b,a.p),tb(b,a.C),tb(b,W(a))}function mg(c,a){sb(c,a.b,a),sb(c,a.b,a.u),tb(c,a.k),tb(c,a.q);for(var d=0,e=a.n,f=e.length;d<f;d=d+1|0){var b=e[d];Ad(c,b)}}function ng(c,a){sb(c,a.b,a);for(var d=0,e=a.i,f=e.length;d<f;d=d+1|0){var b=e[d];Ad(c,b)}}function tb(c,a){if(a){for(var b=a.g;b;b=b.k)tb(c,b);switch(a.b){case 23:sb(c,a.c,a.e);break;case 21:sb(c,a.d,a.e);break;case 26:sb(c,a.c,a.f.a);break;case 2:Ad(c,a.e);break;case 11:mg(c,a.e);break;case 16:ng(c,a.e);break}}}function og(d,a){N(d,'keyword','false'),N(d,'keyword','true'),N(d,'keyword','void'),N(d,'keyword','const'),N(d,'keyword','lowp'),N(d,'keyword','mediump'),N(d,'keyword','highp');for(var e=0,f=Kh.length;e<f;e=e+1|0){var b=Kh[e];N(d,'struct',b.a.c).c=oc(b.a)}if(d.a.c.b==1)for(var h=0,l=Lh.length;h<l;h=h+1|0){var c=Lh[h];N(d,'struct',c.a.c).c=oc(c.a)}
25
- Cd(d,a)}function Bd(b,a){return a!=null&&a.a==b.a&&uc(a,b.b)}function N(e,a,b){var c=null,d=a+':'+b;return e.c.has(d)?c=e.c.get(d):(c=new yi(a,b),e.d.push(c),Pa(e.c,d,c)),c}function Pb(d,a){var b=a==_d()?'method':a instanceof wc?'function':a instanceof vc?'struct':'variable',c=N(d,b,a.c);c.c!=''?c.c+='\n':c.d=Sc(a.f),c.c+=oc(a)}function Cd(C,a){if(!a)return!1;var b=Bd(C,a.c);switch(a.b){case 0:for(var c=!1,d=a.g;d;d=d.k)if(d.b==11&&Bd(C,d.c)){c=!0;break}c||(N(C,'keyword','@fragment'),N(C,'keyword','@vertex'),N(C,'keyword','#version 300 es'),N(C,'keyword','invariant'),N(C,'keyword','precision'),N(C,'keyword','uniform'),C.a.c.b^1?(N(C,'keyword','attribute'),N(C,'keyword','varying')):(N(C,'keyword','centroid'),N(C,'keyword','flat'),N(C,'keyword','layout'),N(C,'keyword','location'),N(C,'keyword','smooth')));break;case 11:if(Pb(C,a.e),b){var e=a.e;N(C,'keyword','discard'),N(C,'keyword','return');for(var P=0,S=e.n,ea=S.length;P<ea;P=P+1|0){var f=S[P];Pb(C,f)}Cd(C,e.q)}break;case 2:Pb(C,a.e);break;case 16:Pb(C,a.e);break;
26
- case 10:case 19:case 7:b&&(N(C,'keyword','break'),N(C,'keyword','continue'));break;case 21:var h=a.g;if(b&&!Bd(C,h.c)){C.d=[];var l=h.f;switch(l){case yc:case Bc:case mb:case zc:case Cc:case nb:case Ac:case Dc:case ob:for(var fa=0,V=Xd(Ka(l)),ba=V.length;fa<ba;fa=fa+1|0)for(var m=V[fa],g=1;g<5;g=g+1|0){for(var i=[],n=0;n<g;n=n+1|0)i.push(0);for(;;){for(var k='',q=0;q<g;q=q+1|0)k+=m[i[q]];var v=Yd(T(l),k.length).a;N(C,'variable',k).c=v.c+' '+k+';';for(var u=0;u<g;){var B=i[u];if((B=B+1|0)^m.length||(B=0),i[u]=B,B)break;u=u+1|0}if(u==g)break}}break;default:if(l.a&&l.a instanceof vc)for(var ga=0,ja=l.a.i,ua=ja.length;ga<ua;ga=ga+1|0){var p=ja[ga];Pb(C,p)}else l.b&&Pb(C,_d());break}return!0}break}if(!a.b||b||a.b==17)for(var O=a.g;O;O=O.k)if(Cd(C,O))return!0;return b}function Ce(b,a){return a!=null&&a.a==b.a&&uc(a,b.b)}function Dd(qa,a){if(!a||a.b&&!Ce(qa,a.c))return!1;for(var b=a.g;b;b=b.k)if(Dd(qa,b))return!0;switch(a.b){case 11:return Dd(qa,a.e.q),!0;case 20:var c=a.g;if(!Ce(qa,c.c)){var d=c.k,e=c.f,f=e.a;if(f){
27
- for(var h=[],l=d;l;l=l.k)h.push(l);if(f instanceof wc){for(var m=[],g=f;g;g=g.v)~m.indexOf(g.u)||m.push(g);m.reverse();for(var Za=0,La=m.length;Za<La;Za=Za+1|0){var i=m[Za];qa.c.push(new Ai(oc(i),i.n.map(function(n){return pc(n)}),Sc(i.f)))}if(qa.c.length){qa.e=0;for(var k=[],q=0;q<m.length;q=q+1|0)k.push(q);for(var v=h.length;v>0;v=v-1|0){for(var u=[],Na=0,jb=k,Xa=jb.length;Na<Xa;Na=Na+1|0){var B=jb[Na];m[B].n.length>=v&&u.push(B)}if(u.length){k=u;break}}if(k.length>1){var p=k.slice();Mb(p,function(O){for(var C=m[O].n,P=0,Aa=Math.min(C.length,h.length);P<Aa;P=P+1|0){var S=ca(C[P]),ea=h[P].f;if(ea!=H&&S!=ea)return!0}return!1}),p.length||(p=k.slice(),Mb(p,function(fa){for(var V=m[fa].n,ba=0,Ya=Math.min(V.length,h.length);ba<Ya;ba=ba+1|0){var ga=ca(V[ba]),ja=h[ba].f,ua=Ka(ga),Ma=Ka(ja);if(ja!=H&&ga!=ja&&(!ua||!Ma||ua^Ma))return!0}return!1})),p.length&&(k=p)}k.length&&(qa.e=k[0])}}if(f instanceof vc&&!T(e)){var na=f.i.map(function(ka){return pc(ka)});qa.c.push(new Ai(f.c+'('+na.join(', ')+');',na,Sc(f.f))),qa.e=0}
28
- if(h.length){qa.d=0;for(var Fa=0,Ea=h.length;Fa<Ea;Fa=Fa+1|0){var pb=h[Fa];if(qa.b<=pb.c.c||!pb.k)break;qa.d=qa.d+1|0}}return!0}}break}return!1}function ze(a){switch(a.b){case 30:return (a.h|0).toString();case 28:return (!!a.h).toString();case 29:return me(a.h,0);case 20:for(var b=a.g,c=G(a.f)+'(',d=b.k;d;d=d.k)d.n!=b&&(c+=', '),c+=ze(d);return c+')'}return null}function oc(a){if(a instanceof vc){var b=a,c=hb(b.e,' ')+'struct '+a.c;if(b.a>-1){c+=' {\n';for(var i=0,n=b.i,k=n.length;i<k;i=i+1|0){var d=n[i];c+=' '+pc(d)+';\n'}c+='}'}return c+';'}if(a instanceof pf){var e=a,f=pc(e);if(e.h){var h=ze(e.h);h!=null&&(f+=' = '+h)}return f+';'}if(a instanceof wc){for(var l=a,m=hb(l.e,' ')+G(l.k.f)+' '+a.c+'(',q=0,v=l.n,u=v.length;q<u;q=q+1|0){var g=v[q];g!=l.n[0]&&(m+=', '),m+=pc(g)}return m+');'}return null}function pc(a){var b=ca(a),c=hb(a.e,' ')+G(b.b||b)+' '+a.c;return b.b&&(c+=b.c>0?'['+b.c+']':'[]'),c}function Sc(a){var b='';if(a)for(var f=0,h=a.length;f<h;f=f+1|0){var c=a[f],d=0,e=c.length;for(c.startsWith('//')?d=d+2|0:c.startsWith('/*')&&(d=d+2|0,
29
- e=e-2|0);d<e&&c.charCodeAt(d)==32;)d=d+1|0;for(;e>d&&c.charCodeAt(e-1|0)==32;)e=e-1|0;b!=''&&(b+='\n'),b+=c.slice(d,e)}return b}function De(a,b,c){if(!b)return a+': '+c+'\n';var d=Pd(b,0);return Od(b)+': '+a+': '+c+'\n'+d.a+'\n'+d.b+'\n'}function pg(c){for(var a=new hi,d=0,e=c.a,f=e.length;d<f;d=d+1|0){var b=e[d];a.a+=De(b.a?'warning':'error',b.b,b.c),b.d&&(a.a+=De('note',b.d,b.e))}return a.a}function t(c,a,b){(!c.e||c.e.b^a.b)&&(c.e=a,c.a.push(new Ci(0,a,b)),c.d=c.d+1|0)}function qg(c,a,b){c.a.push(new Ci(1,a,b)),c.c=c.c+1|0}function ub(d,a,b){var c=rd(d.a);c.d=a,c.e=b}function rg(b,a){t(b,a,'"'+I(a)+'" is a reserved word')}function Ee(b,a){t(b,a.a,'Unexpected '+yf[a.b])}function sg(b,a){t(b,a,'There is no symbol called "'+I(a)+'" in the current scope')}function Ed(c,a,b){t(c,a,'There is already a symbol called "'+I(a)+'" in the current scope'),ub(c,b,'The previous definition of "'+I(b)+'" is here')}function tg(f,a,b,c,d,e){t(f,a,'Cannot change the return type of "'+b+'" to type "'+G(c)+'"'),ub(f,e,'The forward declaration of "'+b+'" has a return type of "'+G(d)+'"')}
30
- function Fe(b,a){t(b,a,'The operator "'+I(a)+'" is reserved and cannot be used')}function ug(b,a){t(b,a,'Unrecognized version "'+I(a)+'"')}function vg(c,a,b){t(c,Qd($c(a)),'Expected this file to start with "#version 300 es"'),ub(c,Wa(b.c.a[0].a,b.c.a[2].a),'This is expected due to "#version 300 es" here')}function wg(d,a,b,c){t(d,a,'Cannot include file "'+b+'" that uses a different GLSL version');switch(c.c.b){case 0:ub(d,Qd($c(c)),'Add "#version 300 es" to the included file');break;case 1:ub(d,Qd($c(a.a)),'Add "#version 300 es" to the including file');break}}function xg(e,a,b,c,d){t(e,a,'The constructor for type "'+G(b)+'" only takes '+c+' argument'+(c^1?'s':'')+' and this argument would bring the total to '+d)}function Ge(d,a,b,c){t(d,a,'Cannot construct type "'+G(b)+'" with '+c+' argument'+(c^1?'s':''))}function yg(f,a,b,c,d,e){t(f,a,'Expected '+b+' argument'+(b^1?'s':'')+' but found '+c+' argument'+(c^1?'s':'')+' when calling function "'+d+'"'),e&&ub(f,e,'The definition of function "'+d+'" is here')}function zg(f,a,b,c,d,e){
31
- t(f,a,'Expected '+b+' argument'+(b^1?'s':'')+' but found '+c+' argument'+(c^1?'s':'')+' when constructing type "'+d+'"'),e&&ub(f,e,'The definition of struct "'+d+'" is here')}function Ag(c,a,b){b.b?t(c,a,'Cannot use a conditional expression with array type "'+G(b)+'"'):t(c,a,'Cannot use a conditional expression with type "'+G(b)+'" because it contains an array')}function He(c,a,b){b.b?t(c,a,'Cannot assign to array type "'+G(b)+'"'):t(c,a,'Cannot assign to type "'+G(b)+'" because it contains an array')}function Bg(e,a,b,c,d){c==d?t(e,a,'There is no operator "'+b+'" defined for type "'+G(c)+'"'):t(e,a,'No binary operator "'+b+'" for type "'+G(c)+'" and type "'+G(d)+'"')}function Je(b,a){b.b=a.b,b.c=a.c,b.d=a.d,b.e=a.e,b.f=a.f,b.h=a.h,b.l=a.l}function Ke(b){var a=new Ei(b.b);return Je(a,b),a}function Id(b){for(var a=Ke(b);b.g;)o(a,r(b.g));return a}function Sa(c){for(var a=Ke(c),b=c.g;b;b=b.k)o(a,Sa(b));return a}function K(b,a){a!=b&&(Je(b,a),Gg(b),Fg(b,a))}function Wc(a){return a.g!=null&&a.g==a.i}function Eg(c){
32
- for(var a=0,b=c.g;b;b=b.k)a=a+1|0;return a}function qc(c,a){for(var b=c.g;a;)b=b.k,a=a-1|0;return b}function s(b,a){return b.f=a,b}function Xc(b,a){return b.e=a,b}function Ia(b,a){return b.h=+a,b}function Y(b,a){return b.h=a,b}function ra(b,a){return b.h=a,b}function cb(b,a){return b.l=a,b}function w(b,a){return b.c=a,b}function Ta(b,a){return b.d=a,b}function o(b,a){return a?(a.m=b,b.g?(a.n=b.i,b.i.k=a,b.i=a):b.i=b.g=a,b):b}function Fg(b,a){for(;a.g;)o(b,r(a.g));return b}function r(a){return a.n?a.n.k=a.k:a.m.g=a.k,a.k?a.k.n=a.n:a.m.i=a.n,a.m=null,a.n=null,a.k=null,a}function Gg(a){for(;a.g;)r(a.g)}function oa(b,a){return a.m=b.m,a.n=b.n,a.k=b.k,b.n?b.n.k=a:b.m.g=a,b.k?b.k.n=a:b.m.i=a,b.m=null,b.n=null,b.k=null,b}function Yc(c,a,b){return b?a?(b.m=c,b.n=a.n,b.k=a,a.n?a.n.k=b:c.g=b,a.n=b,c):o(c,b):c}function Le(a){for(;a.g;)Yc(a.m,a.k,r(a.i));r(a)}function Ua(a){return a.b==28&&!!a.h}function Qb(a){return a.b==28&&!!!a.h}function rc(b,a){return b.b==29&&b.h==a||(b.b==30||b.b==31)&&(b.h|0)==a}function Hg(a){return a.m!=null&&a.m.b==20&&a.m.g==a}
33
- function Me(f){if(f.m){if(Hd(f.m.b)||Vc(f.m.b)&&f.m.g==f)return!0;if(f.m.b==20&&f.m.f!=H){var a=f.m.g,b=a.e;if(b&&b instanceof wc)for(var c=b,d=0,e=a.k;e;e=e.k){if(e==f)return (c.n[d].e&64)!=0;d=d+1|0}}}return!1}function Ne(a){return Me(a)?!0:a.m&&(a.m.b==21||a.m.b==48)?Ne(a.m):!1}function Oe(a){return a.b==3&&a.g==null}function vb(a){return a.b==25&&a.g==null}function Ig(a){return a.b==30&&(a.h|0)<0||a.b==29&&a.h<0}function sa(a){switch(a.b){case 28:case 29:case 30:case 23:return!0;case 22:return sa(a.g)&&sa(a.g.k)&&sa(a.i);case 21:return sa(a.g)}return Gd(a.b)?!Hd(a.b)&&sa(a.g):Uc(a.b)?!Vc(a.b)&&sa(a.g)&&sa(a.i):!1}function Rb(a){switch(a.b){case 28:Ia(a,!!!a.h);break;case 34:K(a,r(a.g));break;case 45:a.b=55;break;case 55:a.b=45;break;case 49:a.b=47;break;case 46:a.b=50;break;case 50:a.b=46;break;case 47:a.b=49;break;case 25:Rb(a.i);break;case 52:a.b=51,Rb(a.g),Rb(a.i);break;case 51:a.b=52,Rb(a.g),Rb(a.i);break;default:K(a,s(o(new Ei(34),Id(a)),ha));break}}function ta(d,a){if(d.b==a.b){switch(d.b){case 28:return !!d.h==!!a.h;
34
- case 29:return d.h==a.h;case 30:return (d.h|0)==(a.h|0);case 23:return d.e==a.e;case 26:return d.f==a.f;case 21:return ta(d.g,a.g)&&d.e==a.e&&d.l==a.l;case 22:return ta(d.g,a.g)&&ta(d.g.k,a.g.k)&&ta(d.i,a.i);case 20:for(var b=d.g,c=a.g;b&&c;){if(!ta(b,c))return!1;b=b.k,c=c.k}return b==null&&c==null}if(Gd(d.b))return ta(d.g,a.g);if(Uc(d.b))return ta(d.g,a.g)&&ta(d.i,a.i)}return!1}function Pe(a,b,c,d){return o(o(o(o(new Ei(10),a||new Ei(25)),b||new Ei(25)),c||new Ei(25)),d)}function Ca(a){return s(o(new Ei(20),s(new Ei(26),a)),a)}function wb(a){return vb(a.g)?null:a.g}function Ja(a){return vb(a.g.k)?null:a.g.k}function Zc(a){return vb(a.i.n)?null:a.i.n}function Qe(){return zf=zf+1|0,zf}function R(a,b){wa(a,b,0).b=function(c){return eb(c,1)}}function Sb(a){return function(b,c,d){return Ta(w(o(new Ei(a),d),Wa(c.a,d.c)),c.a)}}function Re(a){return function(b,c,d){return Ta(w(o(new Ei(a),c),Wa(c.c,d.a)),d.a)}}function L(a){return function(b,c,d,e){return Ta(w(o(o(new Ei(a),c),e),Wa(c.c,e.c)),d.a)}}function Jd(a){var b=a.length,c=a.charCodeAt(b-1|0);
35
- return (c==117||c==85)&&(a=a.slice(0,b-1|0)),a.length>1&&a.charCodeAt(0)==48&&a.charCodeAt(1)^120&&a.charCodeAt(1)^88?parseInt(a,8):a|0}function Jg(a){var b=a==1;if(b){if(Bf)return Bf}else if(Af)return Af;var c=new Ki,d=function(e,f,h){return Fe(e.a,f.a),w(s(new Ei(27),H),Wa(f.a,h.c))},l=function(m,g,i,n){return Fe(m.a,i.a),w(s(new Ei(27),H),Wa(g.c,n.c))};return tc(c,36,function(k,q){return w(s(Ia(new Ei(28),!0),ha),q.a)}),tc(c,13,function(v,u){return w(s(Ia(new Ei(28),!1),ha),u.a)}),tc(c,127,function(B,p){return w(s(Y(new Ei(30),Jd(I(p.a))),da),p.a)}),tc(c,125,function(O,C){return w(s(ra(new Ei(29),+I(C.a)),ia),C.a)}),tc(c,128,function(P,S){return b?w(s(Y(new Ei(31),Jd(I(S.a))),hc),S.a):(Ee(P.a,S),w(s(new Ei(24),H),S.a))}),R(c,3),R(c,5),R(c,6),R(c,7),R(c,14),R(c,20),R(c,22),R(c,23),R(c,24),R(c,26),R(c,27),R(c,28),R(c,39),R(c,40),R(c,41),R(c,42),R(c,51),R(c,52),R(c,53),R(c,54),R(c,55),R(c,56),R(c,63),R(c,68),R(c,69),R(c,70),Vb(c,76,14,b?Sb(32):d),Vb(c,77,14,Sb(36)),Vb(c,78,14,Sb(37)),Vb(c,92,14,Sb(33)),Vb(c,79,
36
- 14,Sb(34)),Vb(c,95,14,Sb(35)),bf(c,77,15,Re(38)),bf(c,78,15,Re(39)),Z(c,83,13,L(44)),Z(c,84,10,L(45)),Z(c,85,10,L(46)),Z(c,86,10,L(47)),Z(c,87,10,L(49)),Z(c,88,10,L(50)),Z(c,92,12,L(59)),Z(c,93,13,L(54)),Z(c,94,10,L(55)),Z(c,95,12,L(40)),Z(c,96,13,b?L(56):l),Z(c,97,11,b?L(57):l),Z(c,98,11,b?L(58):l),Z(c,90,3,L(52)),Z(c,91,4,L(53)),Z(c,89,5,L(51)),Z(c,80,8,b?L(41):l),Z(c,81,6,b?L(42):l),Z(c,82,7,b?L(43):l),Da(c,99,2,L(60)),Da(c,100,2,L(61)),Da(c,101,2,b?L(62):l),Da(c,102,2,b?L(63):l),Da(c,103,2,b?L(64):l),Da(c,104,2,L(65)),Da(c,105,2,L(66)),Da(c,106,2,b?L(67):l),Da(c,107,2,b?L(68):l),Da(c,108,2,b?L(69):l),Da(c,109,2,L(70)),wa(c,126,0).b=function(ea){var fa=eb(ea,0);if(fa)return fa;var V=F(ea),ba=I(V.a),ga=Vd(ea.i,ba);return ga?(ga.l!=null&&Ga(ea.d.a,ga.l,0)==1&&t(ea.a,V.a,'Cannot use "'+ba+'" from disabled extension "'+ga.l+'"'),ga.g=ga.g+1|0,w(Xc(new Ei(23),ga),V.a)):(sg(ea.a,V.a),w(s(new Ei(24),H),V.a))},Z(c,111,1,function(ja,ua,Ma,na){return ua.b^25&&(ua=w(o(new Ei(25),ua),ua.c)),o(ua,na),w(ua,D(ja,ua.c))}),
37
- wa(c,112,16).c=function(ka,pb){var qa=x(ka).a;F(ka);var Za=x(ka).a;return A(ka,126)?Ta(w(cb(o(new Ei(21),pb),I(Za)),D(ka,pb.c)),Za):Ta(w(cb(o(new Ei(21),pb),''),D(ka,pb.c)),df(qa))},wa(c,115,0).b=function(La){var Na=F(La),jb=aa(La.h,La,0);return !jb||!A(La,119)?w(s(new Ei(24),H),D(La,Na.a)):w(jb,D(La,Na.a))},wa(c,115,15).c=function(Xa,Aa){var Ya=F(Xa),Fa=o(new Ei(20),Aa);return Kg(Xa,Fa,119)?(Aa.b==26&&Aa.f.b&&vb(Aa.g)&&(Aa.f=ad(Aa.f.b,Eg(Fa)-1|0)),Ta(w(Fa,D(Xa,Aa.c)),D(Xa,Ya.a))):w(s(new Ei(24),H),D(Xa,Ya.a))},wa(c,114,16).c=function(Ea,Hb){var kb=F(Ea);if(x(Ea).b==118)return Va(Ea),F(Ea),w(s(new Ei(24),H),D(Ea,kb.a));var _a=aa(Ea.h,Ea,0);return !_a||!A(Ea,118)?w(s(new Ei(24),H),D(Ea,kb.a)):Ta(w(o(o(new Ei(48),Hb),_a),D(Ea,Hb.c)),D(Ea,kb.a))},wa(c,116,2).c=function(Oa,qb){var $a=F(Oa),Bb=aa(Oa.h,Oa,1);if(!Bb||!A(Oa,110))return w(s(new Ei(24),H),D(Oa,$a.a));var _b=aa(Oa.h,Oa,1);return _b?w(o(o(o(new Ei(22),qb),Bb),_b),D(Oa,qb.c)):w(s(new Ei(24),H),D(Oa,$a.a))},b?Bf=c:Af=c,c}function Kg(a,b,c){for(var d=!0;!E(a,
38
- c);){d||A(a,111);var e=x(a),f=aa(a.h,a,1);if(f)o(b,f);else if(o(b,w(s(new Ei(24),H),D(a,e.a))),x(a).b^111&&x(a).b^c)return!1;d=!1}return!0}function Lg(a){var b=F(a);a.i=new Ri(3,a.i);var c=db(a,2);if(!c||!A(a,43)||!A(a,115))return null;var d=aa(a.h,a,0);return !d||!A(a,119)?null:(Ub(a),Tb(a,b.a,o(o(new Ei(7),c),d)))}function Mg(a){var b=F(a),c=a.m;if(a.m|=b.b^74?b.b^73?b.b^72?65536:49152:32768:16384,E(a,113)){var d=new Ei(13);return !sc(a,d,1)||!A(a,117)?(a.m=c,null):(a.m=c,w(d,D(a,b.a)))}var e=db(a,1);return e?(a.m=c,e):(a.m=c,null)}function Og(a){var b=F(a),c=x(a).a;if(!A(a,126))return null;var d=I(c);if(E(a,113)){a.d.a.has(d)||Pa(a.d.a,d,0);var e=new Ei(13);if(!sc(a,e,1)||!A(a,117))return null;for(var f=e.g;f;f=f.k)if(f.b^17)f.e&&(f.e.l=d);else for(var h=f.g.k;h;h=h.k)h.e.l=d;return w(e,D(a,b.a))}if(!Wh.has(d)&&!a.d.a.has(d)&&qg(a.a,c,'The extension "'+d+'" is not in the known list of valid WebGL extensions'),!A(a,110))return null;var l=I(x(a).a);if(!Ng.has(l))return Va(a),null;F(a);var m=Ng.get(l);return Pa(a.d.a,
39
- d,m),Ta(w(Y(cb(new Ei(9),d),m),D(a,b.a)),c)}function Pg(a){var b=F(a);if(a.i=new Ri(3,a.i),!A(a,115))return null;var c=null;if(!E(a,120)){var d=Ue(a),e=Kd(a,2),f=null;if(e){if(f=eb(a,1),!f)return null}else f=eb(a,0);if(f){if(c=Te(a,b.a,e,f,0,d),!c)return null}else if((c=aa(a.h,a,0),!c)||!A(a,120))return null}var h=null;if(!E(a,120)&&((h=aa(a.h,a,0),!h)||!A(a,120)))return null;var l=null;if(!E(a,119)&&((l=aa(a.h,a,0),!l)||!A(a,119)))return null;var m=db(a,2);return m&&(Ub(a),w(Pe(c,h,l,m),D(a,b.a)))}function Qg(a){var b=F(a);if(!A(a,115))return null;var c=x(a),d=aa(a.h,a,0);if(d||(d=w(s(new Ei(24),H),D(a,c.a))),!A(a,119))return null;var e=db(a,2);if(!e)return null;var f=null;return E(a,12)&&(f=db(a,2),!f)?null:w(o(o(o(new Ei(12),d),e),f),D(a,b.a))}function Rg(a){a.g&&t(a.a,x(a).a,'Move "#version" to the beginning of the file');var b=F(a),c=x(a).a;if(!A(a,127))return null;if(I(c)=='100')return w(cb(new Ei(18),'100'),D(a,b.a));if(I(c)=='300'){var d=x(a).a;if(!A(a,126))return null;if(I(d)=='es')return w(cb(new Ei(18),
40
- '300 es'),D(a,b.a))}return ug(a.a,c),w(cb(new Ei(18),I(D(a,c))),D(a,b.a))}function Sg(a){var b=F(a);if(a.i=new Ri(3,a.i),!A(a,115))return null;var c=x(a),d=aa(a.h,a,0);if(d||(d=w(s(new Ei(24),H),D(a,c.a))),!A(a,119))return null;var e=db(a,2);return e&&(Ub(a),w(o(o(new Ei(19),d),e),D(a,b.a)))}function Tg(a){var b=F(a),c=null;if(!E(a,120)){var d=x(a);c=aa(a.h,a,0),c||(c=w(s(new Ei(24),H),D(a,d.a))),A(a,120)}return w(o(new Ei(15),c),D(a,b.a))}function Ug(a){var b=F(a),c=0;switch(x(a).b){case 25:c=256;break;case 29:c=512;break;case 16:c=16;break;default:return Va(a),null}F(a);var d=eb(a,1);return d&&Tb(a,b.a,o(Y(new Ei(14),c),d))}function Vg(a,b,c){var d=x(a).a;if(!A(a,126))return null;var e=new vc(Oc(a.d),d,I(d),new Ri(4,a.i));if(e.e|=a.m|b,e.f=c,!Md(a,e))return null;var f=x(a).a,h=new Ei(1),l=null;if(!A(a,113))return null;for(a.i=e.d;x(a).b^117&&x(a).b^130;){var m=db(a,3);if(!m)return null;if(m.b^17)t(a.a,m.c,'This statement cannot be used inside a struct');else{o(h,m);for(var g=m.g.k;g;g=g.k){var i=g.e;e.i.push(i),
41
- W(i)&&t(a.a,W(i).c,'Cannot initialize struct variables')}}}if(Ub(a),!A(a,117))return null;if(w(h,D(a,f)),x(a).b^126)A(a,120);else if(l=$e(0,s(new Ei(26),z(e)),F(a).a,a,c),!l)return null;return o(o(Xc(new Ei(16),e),h),l)}function Se(a,b,c){for(var d=!1,e=a.i;e;e=e.b)if(e.a==3){d=!0;break}return d||t(a.a,b,'This statement cannot be used outside a loop'),Tb(a,b,c)}function Tb(a,b,c){return A(a,120),w(c,D(a,b))}function Te(a,b,c,d,e,f){var h=x(a).a;if(!c&&x(a).b^126){var l=af(a.h,a,0,d);return l&&Tb(a,b,o(new Ei(8),l))}if(!A(a,126))return null;if(E(a,115))return Xg(c,d,h,a,f);var m=$e(c,d,h,a,f);return m&&w(m,D(a,b))}function Ue(a){var b=x(a),c=b.c;if(!c)return null;for(var d=b.a.b,e=null,f=c.length-1|0;f>-1;f=f-1|0){for(var h=c[f],l=h.a.b.slice(h.c,d),m=0,g=0;g<l.length;g=g+1|0){var i=l.charCodeAt(g);(i==13||i==10)&&(m=m+1|0,i==13&&(g+1|0)<l.length&&l.charCodeAt(g+1|0)==10&&(g=g+1|0))}if(m>1)break;(e||(e=[])).push(I(h)),d=h.b}return e&&e.reverse(),e}function db(a,b){var c=x(a);switch(c.b){case 4:return Se(a,F(a).a,
42
- new Ei(4));case 9:return Se(a,F(a).a,new Ei(5));case 10:return Tb(a,F(a).a,new Ei(6));case 11:return Lg(a);case 72:case 73:case 74:case 75:return Mg(a);case 121:return Og(a);case 15:return Pg(a);case 17:return Qg(a);case 113:return We(a);case 31:return Ug(a);case 32:return Tg(a);case 120:return w(new Ei(3),F(a).a);case 122:return Rg(a);case 43:return Sg(a)}var d=Ue(a),e=Kd(a,b),f=null;if(E(a,35)){var h=Vg(a,e,d);return h&&w(h,D(a,c.a))}if(e){if(f=eb(a,1),!f)return null}else f=eb(a,0);if(f)return Te(a,c.a,e,f,1,d);var l=aa(a.h,a,0);return l&&Tb(a,c.a,o(new Ei(8),l))}function Ve(a,b){if(b.b^17&&b.b^16){var c=a.i.a==1||a.i.a==4,d=b.b==9||b.b==11||b.b==14||b.b==18;d&&!c?t(a.a,b.c,'This statement cannot be used inside a function'):!d&&c&&t(a.a,b.c,'This statement cannot be used outside a function')}}function Wg(a,b){var c=x(a).a;if(!A(a,129))return!1;var d=null;try{d=JSON.parse(I(c))}catch(l){return t(a.a,c,'Invalid string literal'),!1}var e=a.d.b;if(!e)return t(a.a,c,'Cannot include files without access to a file system'),
43
- !1;var f=e(d,c.a.a);if(!f)return t(a.a,c,'Cannot read the file '+JSON.stringify(d)),!1;if(a.f.has(f.a))return!0;Pa(a.f,f.a,!0),a.l.push(new Hi(c,$c(f))),xc(a.a,f,0),a.c^f.c.b&&wg(a.a,c,d,f);var h=new Ii(a.a,f.c,a.d,a.e,a.f);return h.i=a.i,!sc(h,b,1)||!A(h,130)?!1:!0}function We(a){var b=x(a),c=new Ei(3);return a.i=new Ri(2,a.i),!A(a,113)||!sc(a,c,2)||!A(a,117)?null:(Ub(a),w(c,D(a,b.a)))}function Xe(a){switch(a){case 50:case 8:case 44:case 21:case 37:case 2:case 38:case 18:case 30:case 19:case 16:case 29:case 25:return!0}return!1}function Ye(a){if(E(a,50)){if(E(a,115))for(;x(a).b^130&&!E(a,119);)F(a)}else F(a)}function Kd(a,b){var c=a.c==1,d=0;if(b==1)if(c&&E(a,50)&&A(a,115)){for(var e=-1;;){var f=x(a);if(f.b==126&&I(f.a)=='location')F(a),A(a,99)&&(x(a).b==127||x(a).b==128?(e=Jd(I(x(a).a)),F(a)):A(a,127));else{if(Va(a),f.b^126)break;F(a)}if(!E(a,111))break}~e&&(d|=e<<18|1<<17),A(a,119)}else E(a,21)&&(d|=128),c&&(E(a,45)?d|=8:E(a,62)&&(d|=2048));if(b^3&&E(a,8)?d|=4:b==1&&E(a,37)?d|=4096:b==1&&!c&&E(a,2)?d|=1:b==1&&!c&&E(a,
44
- 38)?d|=8192:b==1&&c&&E(a,44)?(d|=2,E(a,18)?d|=32:E(a,30)?d|=1024:Va(a)):(!b||c&&b==1)&&E(a,18)?d|=32:(!b||c&&b==1)&&E(a,30)?d|=1024:(!b||c&&b==1)&&E(a,19)&&(d|=64),E(a,16)?d|=16:E(a,29)?d|=512:E(a,25)&&(d|=256),Xe(x(a).b))for(t(a.a,x(a).a,'Cannot use this qualifier here'),Ye(a);Xe(x(a).b);)Ye(a);return d}function eb(a,b){var c=x(a),d=null;switch(c.b){case 3:d=ha;break;case 5:d=yc;break;case 6:d=zc;break;case 7:d=Ac;break;case 14:d=ia;break;case 20:d=da;break;case 22:d=Bc;break;case 23:d=Cc;break;case 24:d=Dc;break;case 26:d=ec;break;case 27:d=fc;break;case 28:d=gc;break;case 33:d=wh;break;case 34:d=xh;break;case 39:d=mb;break;case 40:d=nb;break;case 41:d=ob;break;case 42:d=$d;break;case 46:d=U(a,yh);break;case 47:d=U(a,zh);break;case 48:d=U(a,Ah);break;case 49:d=U(a,Bh);break;case 51:d=U(a,dd);break;case 52:d=U(a,ed);break;case 53:d=U(a,fd);break;case 54:d=U(a,gd);break;case 55:d=U(a,hd);break;case 56:d=U(a,id);break;case 57:d=U(a,Ch);break;case 58:d=U(a,Dh);break;case 59:d=U(a,Eh);break;case 60:d=U(a,bi);break;
45
- case 61:d=U(a,Fh);break;case 63:d=U(a,hc);break;case 64:d=U(a,Gh);break;case 65:d=U(a,Hh);break;case 66:d=U(a,Ih);break;case 67:d=U(a,Jh);break;case 68:d=U(a,jd);break;case 69:d=U(a,kd);break;case 70:d=U(a,ld);break;case 126:var e=Vd(a.i,I(c.a));if(!e||!(e instanceof vc))return b^1||Va(a),null;d=z(e);break;default:return b^1||Va(a),null}if(F(a),a.c==1){var f=Ze(a,!0,!0);if(f)if(f==de)d=H;else return w(s(o(new Ei(26),f.a),ad(d,f.b)),D(a,c.a))}return w(s(new Ei(26),d),D(a,c.a))}function Ze(a,b,c){if(!c)return Ld(a),null;var d=x(a);if(!E(a,114))return null;var e=null,f=0;if(E(a,118)){if(!b)return t(a.a,D(a,d.a),'All array sizes must be specified'),Ld(a),de;e=new Ei(25)}else{if(e=aa(a.h,a,0),!e||!A(a,118))return de;if(_(a.e,e),pa(a.e,e,da),e.f!=H){var h=M(e);h?h.b^30||(f=h.h|0,f<1&&(t(a.a,e.c,'Cannot declare an array with a size of "'+f+'"'),f=0)):t(a.a,e.c,'This value must be a compile-time constant')}if(Ld(a))return de}return new Fi(e,f)}function Ld(a){if(x(a).b^114)return!1;for(;;){var b=F(a);if(x(a).b^118&&!aa(a.h,
46
- a,0)||!A(a,118)||(t(a.a,D(a,b.a),'Multidimensional arrays are not a part of the language'),x(a).b^114))return!0}}function Xg(a,b,c,d,e){var f=d.i,h=new wc(Oc(d.d),c,I(c),new Ri(0,f));if(h.e|=d.m|a|(h.c=='main'?49152:0),h.f=e,h.k=b,d.i=h.d,E(d,42)){if(!A(d,119))return null}else if(!E(d,119)){for(;;){var l=Kd(d,0),m=eb(d,1);if(!m)return null;var g=x(d).a;if(!A(d,126))return null;var i=new pf(Oc(d.d),g,I(g),d.i,0);if(i.e|=l,i.p=m,i.P=m.f,h.n.push(i),Md(d,i),_e(d,i),!E(d,111))break}if(!A(d,119))return null}var n=Ga(f.c,I(c),null),k=!E(d,120);if(n){if(n instanceof wc){for(var q=n;q;q=q.v)if(rh(q,h)){q.k.f!=h.k.f?tg(d.a,h.k.c,h.c,h.k.f,q.k.f,q.k.c):q.q||!k?Ed(d.a,h.b,q.b):(q.u=h,h.u=q,h.e|=q.e,q.e=h.e);break}h.v=n,oh(f,h)}else return Ed(d.a,c,n.b),null}else mf(f,h);if(k){var v=d.m;if(d.m&=-114689,h.q=We(d),d.m=v,!h.q)return null}return Ub(d),w(Xc(new Ei(11),h),D(d,b.c))}function _e(a,b){var c=Ze(a,b.B!=0,ca(b).b==null);c==de?b.P=H:c&&(b.C=c.a,ca(b)!=H&&(b.P=ad(ca(b),c.b)))}function $e(a,b,c,d,e){for(var f=o(Y(new Ei(17),
47
- d.m|a),b);;){var h=new pf(Oc(d.d),c,I(c),d.i,d.i.a^1?d.i.a^4?2:3:1);h.e|=d.m|a,h.f=e,h.p=b,_e(d,h);var l=x(d).a,m=null;if(E(d,99)){var g=x(d);m=aa(d.h,d,1),m||(m=w(s(new Ei(24),H),D(d,g.a)))}else l=null;var i=Ta(w(o(Xc(new Ei(2),h),m),D(d,h.b)),l);if(h.O=i,h.e&4)_(d.e,i);else{_(d.e,h.p);var n=ca(h);if(n.b&&m){var k=h.p.g,q=h.C;(k&&vb(k)||q&&vb(q))&&(_(d.e,m),m.f.b&&m.f.c>0&&(h.P=ad(n.b,m.f.c)))}}if(o(f,i),Md(d,h),!E(d,111))return A(d,120),f;if(c=x(d).a,!A(d,126))return null}}function Md(a,b){var c=Ga(a.i.c,b.c,null);return c?(Ed(a.a,b.b,c.b),!1):(mf(a.i,b),!0)}function sc(a,b,c){for(;x(a).b^130&&x(a).b^117;){var d=x(a).a;if(E(a,123)){if(c^1)return t(a.a,d,'"#include" statements cannot be used here'),E(a,129),!1;if(!Wg(a,b))return!1}else{var e=db(a,c);if(!e)return!1;if(e.b^13)Ve(a,e),o(b,e);else for(;e.g;){var f=r(e.g);Ve(a,f),o(b,f)}}}return!0}function Nd(a,b,c,d,e,f){var h=new Map,l=new Ii(a,b,d,f,h);return l.i=e,sc(l,c,1)&&A(l,130),new Gi(l.l)}function x(a){return a.b[a.g]}function F(b){var a=x(b);return (b.g+1|0)<b.b.length&&(b.g=b.g+1|0),
48
- a}function D(c,a){var b=c.b[c.g>0?c.g-1|0:0];return b.a.c<a.b?a:Wa(a,b.a)}function E(b,a){return x(b).b^a?!1:(F(b),!0)}function A(e,a){if(E(e,a))return!0;var b=x(e),c=b.a,d=(e.g>0?e.b[e.g-1|0]:b).a;return a==120||cf(d).a^cf(c).a?t(e.a,df(d),'Expected '+yf[a]):t(e.a,c,'Expected '+yf[a]+' but found '+yf[b.b]),!1}function Va(a){Ee(a.a,x(a))}function U(b,a){return b.c^1?(Va(b),H):a}function Ub(a){a.i=a.i.b}function wa(e,a,b){var c=Ba(e.a,a,null);if(c)b>c.a&&(c.a=b);else{var d=new Ji(b);c=d,Ha(e.a,a,d)}return c}function aa(f,a,b){var c=x(a),d=Ba(f.a,c.b,null);if(!d||!d.b)return Va(a),null;var e=af(f,a,b,d.b(a));return e}function af(f,a,b,c){for(;c;){var d=x(a).b,e=Ba(f.a,d,null);if(!e||!e.c||e.a<=b)break;c=e.c(a,c)}return c}function tc(d,a,b){wa(d,a,0).b=function(c){return b(c,F(c))}}function Vb(h,a,b,c){wa(h,a,0).b=function(d){var e=F(d),f=aa(h,d,b);return f&&c(d,e,f)}}function bf(f,a,b,c){wa(f,a,b).c=function(d,e){return c(d,e,F(d))}}function Z(l,a,b,c){wa(l,a,b).c=function(d,e){var f=F(d),h=aa(l,d,b);return h&&c(d,
49
- e,f,h)}}function Da(l,a,b,c){wa(l,a,b).c=function(d,e){var f=F(d),h=aa(l,d,b-1|0);return h&&c(d,e,f,h)}}function I(a){return a.a.b.slice(a.b,a.c)}function Od(b){var a=Yb(b.a,b.b);return b.a.a+':'+(a.a+1|0)+':'+(a.b+1|0)}function Yg(b,a){return b.a==a.a&&b.b<a.c&&a.b<b.c}function uc(b,a){return b.b<=a&&a<=b.c}function Pd(p,a){for(var b=Yb(p.a,p.b),c=Yb(p.a,p.c),d=ph(p.a,b.a),e=b.b,f=c.a^b.a?d.length:c.b,h=Ef(Uh,d,0),l=[],m=0,g=0;;){h.b^e||(m=l.length),h.b^f||(g=l.length);var i=Ff(h);if(i<0)break;if(i^9)l.push(i);else for(var n=0,O=8-l.length%8|0;n<O;n=n+1|0)l.push(32)}var k=l.length;if(a>0&&k>a){var q=Math.min(g-m|0,a/2|0),v=Math.max((a-q|0)/2|0,3);if(m<v)d=Nc(l.slice(0,a-3|0))+'...',g>(a-3|0)&&(g=a-3|0);else if((k-m|0)<(a-v|0)){var u=k-a|0;d='...'+Nc(l.slice(u+3|0,k)),m=m-u|0,g=g-u|0}else{var B=m-v|0;d='...'+Nc(l.slice(B+3|0,(B+a|0)-3|0))+'...',m=m-B|0,g=g-B|0,g>(a-3|0)&&(g=a-3|0)}}else d=Nc(l);return new Li(d,mc(' ',m)+((g-m|0)<2?'^':mc('~',g-m|0)))}function Zg(c,a,b){return new Mi(c.a,c.b+a|0,c.b+b|0)}function cf(a){
50
- return Yb(a.a,a.b)}function Qd(a){return new Mi(a.a,a.b,a.b)}function df(a){return new Mi(a.a,a.c,a.c)}function Wa(a,b){return new Mi(a.a,a.b,b.c)}function _g(a){var b='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_'[a%53];for(a=a/53|0;a>0;)a=a-1|0,b+='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_0123456789'[a%63],a=a/63|0;return b}function $g(n,a){for(var b=0,k=a.length;b<k;b=b+1|0)n.h=b,xb(n,a[b]);bh(n);var c=new Map,d=ef(n,n.f,null);d.sort(function(e,f){return qd(ff(n,f),ff(n,e))});for(var O=0,C=d.length;O<C;O=O+1|0)for(var h=d[O],l=null,B=0,p=h.length;B<p;B=B+1|0)for(var m=h[B],q=0,v=Array.from(m.c.values()),u=v.length;q<u;q=q+1|0){var g=v[q],i=g.c;!(g.e&7<<14)&&(!n.a||n.a==1&&!nf(g))&&(l==null&&(l=ah(n)),g.c=l),!(g.e&65536)&&nf(g)&&Pa(c,i,g.c)}return c}function xb(f,a){var l,h;a.e&&((h=Rd(f,a.e)).d=h.d+1|0);for(var b=a.g;b;b=b.k)xb(f,b);switch(a.b){case 2:var c=a.e;xb(f,c.p),W(c)&&xb(f,W(c));break;case 11:var d=a.e;f.m=f.d.get(a.e.a).b,d.u&&be(f.f,f.m,Rd(f,d.u).b),xb(f,d.k);for(var m=0,g=d.n,i=g.length;m<i;m=m+1|0){
51
- var e=g[m];(l=Rd(f,e)).d=l.d+1|0,xb(f,e.p)}d.q&&xb(f,d.q),f.m=-1;break}}function Rd(c,a){var b=Ba(c.d,a.a,null);return b||(b=new Oi(a.c,c.c.length),b.e=Zd(a),c.c.push(b),Ha(c.d,a.a,b),tf(c.e),tf(c.f)),b.c.has(c.h)||Ha(b.c,c.h,a),Zd(a)&&be(c.e,c.m,b.b),b}function ah(b){for(;;){var a=_g(b.l);if(b.l=b.l+1|0,!th.has(a)&&!uh.has(a)&&!a.startsWith('gl_'))return a}}function ef(h,a,b){for(var c=new Map,l=0,m=h.c,g=m.length;l<g;l=l+1|0){var d=m[l];if(!b||b(d)){var e=md(a,d.b),f=Ba(c,e,null);f||(f=[],Ha(c,e,f)),f.push(d)}}return Array.from(c.values())}function bh(b){ch(b,ef(b,b.e,function(a){return a.e}))}function ch(l,a){for(var b=[],g=0,i=a.length;g<i;g=g+1|0){var c=a[g];c.sort(function(d,e){return qd(e.d,d.d)});for(var f=0,m=c.length;f<m;f=f+1|0){var h=c[f];f<b.length?be(l.f,h.b,b[f]):b.push(h.b)}}}function ff(d,a){for(var b=0,e=0,f=a.length;e<f;e=e+1|0){var c=a[e];b=b+c.d|0}return b}function Sd(f,a){_(f,a);for(var h=0,l=f.e,m=l.length;h<m;h=h+1|0){var b=l[h];r(b)}var c=a.g;f.e.length&&Yc(a,c,f.e[0]);for(var g=0,i=Array.from(f.f.values()),n=i.length;g<n;g=g+1|0){
52
- var d=i[g];Yc(a,c,d)}f.a.b=f.a.b.filter(function(e){return e.g==0})}function Td(b,a){a.b.a.a!='<api>'&&!a.g&&!(a.e&49152)&&b.a.b.push(a)}function _(p,a){if(!a.f){a.f=H;var b=a.b;switch(b){case 0:case 1:Ud(p,a);break;case 2:var c=a.e;Td(p,c),_(p,c.p);var d=ca(c);if(d==$d&&(t(p.a,c.p.c,'Cannot create a variable of type "'+G(d)+'"'),d=H),c.C&&!vb(c.C)&&(la(p,c.C),pa(p,c.C,da)),W(c)&&(la(p,W(c)),pa(p,W(c),d),d.d&&!p.c&&He(p.a,a.d,d)),c.e&4)if(W(c)){if(W(c).f!=H){var e=M(W(c));e?c.h=e:t(p.a,W(c).c,'This value must be a compile-time constant')}}else c.B^2||t(p.a,c.b,'Constants must be initialized');break;case 3:yb(p,a);break;case 4:case 5:case 6:break;case 7:yb(p,a.g),_(p,a.i),pa(p,a.i,ha);break;case 8:_(p,a.g);break;case 9:break;case 10:wb(a)&&la(p,wb(a)),Ja(a)&&(la(p,Ja(a)),pa(p,Ja(a),ha)),Zc(a)&&la(p,Zc(a)),yb(p,a.i);break;case 11:var f=a.e;Td(p,f);for(var O=0,C=f.n,P=C.length;O<P;O=O+1|0){var h=C[O];_(p,h.p)}_(p,f.k),f.q&&(p.h=f.k.f,yb(p,f.q),p.h&&p.h!=$d&&f.q.q&&t(p.a,f.b,'All control paths for "'+f.c+'" must return a value of type "'+G(p.h)+'"'),
53
- p.h=null);break;case 12:_(p,a.g),pa(p,a.g,ha),yb(p,a.g.k),a.g.k.k&&yb(p,a.g.k.k);break;case 14:break;case 15:a.g?(_(p,a.g),pa(p,a.g,p.h||H)):(a.f=$d,pa(p,a,p.h||H));break;case 16:var l=a.e;Td(p,l),Ud(p,a);for(var m=z(l),S=0,ea=l.i,fa=ea.length;S<fa;S=S+1|0){var g=ea[S],i=ca(g);i.d&&(m.d=!0),i.e&&(m.e=!0)}break;case 17:Ud(p,a);break;case 18:p.e.push(a);break;case 19:_(p,a.g),pa(p,a.g,ha),yb(p,a.i);break;case 20:gh(p,a);break;case 21:hh(p,a);break;case 22:var n=a.g,k=a.i,q=a.g.k;la(p,n),pa(p,n,ha),la(p,q),la(p,k),q.f==H||k.f==H?a.f=H:q.f!=k.f?t(p.a,Wa(q.c,k.c),'Cannot merge type "'+G(q.f)+'" and type "'+G(k.f)+'"'):q.f.d?Ag(p.a,Wa(q.c,k.c),q.f):a.f=q.f;break;case 23:var v=a.e;v instanceof pf?(_(p,v.p),a.f=ca(v)):v instanceof wc&&!Hg(a)?t(p.a,a.c,'The function "'+v.c+'" must be called'):a.f=z(v);var u=v.l;u!=null&&!p.f.has(u)&&!Ga(p.b.a,u,0)&&Pa(p.f,u,Y(cb(new Ei(9),u),2));break;case 25:for(var B=a.g;B;B=B.k)la(p,B);a.f=a.i.f;break;default:Gd(b)?dh(p,a):Uc(b)&&fh(p,a);break}}}function yb(c,a){if(Of(c.d,a),a.b^3)_(c,
54
- a),ke(c.d,a);else for(var b=a.g;b;b=b.k)_(c,b),ke(c.d,b);Pf(c.d,a)}function dh(d,a){var b=a.g;la(d,b),Hd(a.b)&&gf(d,b);var c=b.f;switch(a.b){case 33:case 35:case 36:case 37:case 38:case 39:a.f=cd(c)?c:H;break;case 32:a.f=ib(c)?c:H;break;case 34:a.f=c==ha?ha:H;break}a.f==H&&c!=H&&t(d.a,a.d,'No unary operator "'+I(a.d)+'" for type "'+G(c)+'"')}function eh(c,a,b){var f,e,d;if(ya(a)){if(ya(b)){if(X(a)==X(xa(b)))return (d=ae(X(b),X(xa(a))))||H}else if(xa(b)==ia&&X(a)==X(b))return (e=ae(1,X(xa(a))))||H}else if(xa(a)==ia&&ya(b)&&X(a)==X(xa(b)))return (f=ae(X(b),1))||H;return H}function fh(i,a){var b=a.g,c=a.i;la(i,b),la(i,c),Vc(a.b)&&gf(i,b);var d=b.f,e=c.f,f=d==e;switch(a.b){case 40:case 59:case 54:case 44:a.f=f&&T(d)||cd(d)&&e==T(d)?d:cd(e)&&d==T(e)?e:a.b^54?H:eh(i,d,e);break;case 41:case 42:case 43:case 56:a.f=f&&ib(d)||ib(d)&&e==T(d)?d:ib(e)&&d==T(e)?e:H;break;case 57:case 58:a.f=f&&ib(d)||ib(d)&&e==T(d)?d:H;break;case 45:case 55:a.f=f&&vh(d,i.c)?ha:H;break;case 51:case 52:case 53:a.f=f&&d==ha?ha:H;break;case 49:case 50:case 46:case 47:
55
- a.f=f&&(d==ia||d==da)?ha:H;break;case 60:a.f=d,d.d&&!i.c&&He(i.a,a.d,d),pa(i,c,d);return;case 61:case 70:case 66:case 65:a.f=f&&T(d)||cd(d)&&e==T(d)||a.b==66&&(d==mb&&e==ec||d==nb&&e==fc||d==ob&&e==gc)?d:H;break;case 62:case 63:case 64:case 67:case 68:case 69:a.f=f&&ib(d)||ib(d)&&e==T(d)?d:H;break;case 48:if(e==da){var h=xa(d);h&&(a.f=h);var l=M(c);if(l&&l.b==30){var m=l.h|0,g=X(d);(m<0||g>0&&m>=g)&&t(i.a,c.c,'Index "'+m+'" is out of bounds for type "'+G(d)+'"')}}break}a.f==H&&d!=H&&e!=H&&(a.b^48?Bg(i.a,a.d,I(a.d),d,e):t(i.a,a.d,'No index operator for type "'+G(d)+'" and type "'+G(e)+'"'))}function gh(i,a){var b=a.g;if(i.c==1&&b.b==21&&b.l=='length'){var c=b.g;la(i,c);var d=c.f;if(d.b){var e=_d();b.f=z(e),a.e=e}else t(i.a,b.d,'Cannot find "'+b.l+'" on type "'+G(d)+'"'),b.f=H}else _(i,b);for(var f=b.f,h=f.a,l=[],m=!1,g=b.k;g;g=g.k)la(i,g),l.push(g),g.f==H&&(m=!0);if(!m){if(h){if(h instanceof wc){ih(i,h,a,l);return}if(h instanceof vc){kh(i,f,a,l);return}}b.b==26&&f.b?jh(i,f,a,l):f!=H&&t(i.a,b.c,'Cannot call type "'+G(f)+'"')}}
56
- function hh(l,a){var b=a.g,c=a.l,d=a.d;if(la(l,b),c!=''){var e=b.f,f=Me(a);if(bd(e))a.f=lh(l,d,e,c,f);else if(e==H);else{if(e.a&&e.a instanceof vc)for(var m=0,g=e.a.i,i=g.length;m<i;m=m+1|0){var h=g[m];if(h.c==c){a.e=h,_(l,h.p),a.f=ca(h);break}}a.e||t(l.a,d,'Cannot find "'+c+'" on type "'+G(e)+'"')}}}function ih(p,a,b,c){for(var d=[],e=a;e;e=e.v)~d.indexOf(e.u)||d.push(e);if(d.length^1&&(d=d.slice(),Mb(d,function(f){return f.n.length!=c.length}),d.length^1)){var h=d.slice();Mb(d,function(l){for(var m=0,O=c.length;m<O;m=m+1|0)if(ca(l.n[m])!=c[m].f)return!0;return!1}),d.length^1&&(d=h,Mb(d,function(g){for(var i=0,C=c.length;i<C;i=i+1|0){var n=ca(g.n[i]),k=c[i].f,q=Ka(n),v=Ka(k);if(n!=k&&(!q||!v||q^v))return!0}return!1}))}if(d.length^1)t(p.a,b.g.c,'No matching overload for function "'+a.c+'"');else{var u=d[0];if(u.n.length^c.length)yg(p.a,b.d,u.n.length,c.length,u.c,u.b);else for(var B=0,P=c.length;B<P;B=B+1|0)pa(p,c[B],ca(u.n[B]));b.g.e=u,b.f=u.k.f}}function jh(e,a,b,c){b.f=a,a.c>0&&a.c^c.length&&Ge(e.a,b.d,a,c.length);
57
- for(var f=0,h=c.length;f<h;f=f+1|0){var d=c[f];pa(e,d,a.b)}}function kh(u,a,b,c){if(b.f=a,a!=H)if(T(a)){for(var d=Ka(a),e=!1,f=0,B=0,p=c.length;B<p;B=B+1|0){var h=c[B],l=h.f,m=Ka(l);if(!T(l)){l!=H&&t(u.a,h.c,'Cannot use value of type "'+G(l)+'" when constructing type "'+G(a)+'"');return}f>=d&&xg(u.a,h.c,a,d,f+m|0),ya(l)&&(e=!0),f=f+m|0}var g=ya(a)&&e;g&&c.length^1?t(u.a,b.d,'If a matrix argument is given to a matrix constructor, it is an error to have any other arguments'):f<d&&f^1&&!g&&Ge(u.a,b.d,a,f)}else{var i=a.a,n=i.i,k=n.length,q=c.length;if(k^q)zg(u.a,b.d,k,q,i.c,i.b);else for(var v=0;v<k;v=v+1|0)pa(u,c[v],ca(n[v]))}}function lh(m,a,b,c,d){var e=c.length;if(e<1||e>4)return t(m.a,a,'Invalid swizzle "'+c+'" on type "'+G(b)+'"'),H;for(var f=Ka(b),g=0,i=Xd(f),n=i.length;g<n;g=g+1|0){var h=i[g];if(~h.indexOf(c[0])){for(var l=1;l<e;l=l+1|0){if(h.indexOf(c[l])==-1)return t(m.a,a,'Invalid swizzle "'+c+'" on type "'+G(b)+'"'),H;if(d&&~c.slice(0,l).indexOf(c[l]))return t(m.a,Zg(a,l,l+1|0),'The field "'+c[l]+'" cannot be specified multiple times when used as a storage location'),
58
- H}return Yd(T(b),e)}}return t(m.a,a,'Invalid swizzle "'+c+'" on type "'+G(b)+'"'),H}function la(b,a){_(b,a),a.b==26&&a.f!=H&&(t(b.a,a.c,'Unexpected type "'+G(a.f)+'"'),a.f=H)}function Ud(c,a){for(var b=a.g;b;b=b.k)_(c,b)}function gf(c,a){d:for(var b=a;;){if(b.f==H)break;switch(b.b){case 23:(b.e.e&4||b.e.e&4096)&&t(c.a,a.c,'Cannot store to this location');break d;case 21:b=b.g;break;case 48:b=b.g;break;default:t(c.a,a.c,'Cannot store to this location');break d}}}function pa(c,a,b){a.f!=b&&a.f!=H&&b!=H&&t(c.a,a.c,'Cannot convert from type "'+G(a.f)+'" to type "'+G(b)+'"')}function mh(a,b,c,d){for(;;){var e=new Qi(d);if(c.a&&gb(e,a),c.d&&(fb(e,a),Ab(e,a),nh(e,a,b)),!e.b)break}c.a&&zb(a)}function zb(a){switch(a.b){case 12:if(!a.g.k.k)return!0;var b=a.g.k,c=zb(b);return c&&b.b^3&&oa(b,o(new Ei(3),Id(b))),zb(a.g.k.k);case 10:return zb(a.i);case 11:var d=a.e;d.q&&zb(d.q);break;case 19:return zb(a.i);default:for(var e=a.g;e;e=e.k)zb(e);return!1}return!1}function fb(m,a){for(var b=a.g;b;b=b.k)fb(m,b);switch(a.b){case 2:
59
- var c=a.e;c.C&&fb(m,c.C),W(c)&&fb(m,W(c)),(c.B==2||c.B==1)&&(m.c.push(c),Ha(m.d,c.a,0),Ha(m.e,c.a,0));break;case 11:var d=a.e;Ha(m.d,d.a,0),fb(m,d.k);for(var g=0,i=d.n,n=i.length;g<n;g=g+1|0){var e=i[g];fb(m,e.p),e.C&&fb(m,e.C)}d.q&&fb(m,d.q);break;case 23:var f=a.e.a,h=Ba(m.d,f,-1);~h&&Ha(m.d,f,h+1|0),Ne(a)&&(h=Ba(m.e,f,-1),~h&&Ha(m.e,f,h+1|0));var l=a.e.l;l!=null&&Pa(m.f,l,0);break}}function Ab(g,a){for(var b=a.g,c=null;b;b=c)c=b.k,Ab(g,b);switch(a.b){case 2:if(kf(g,a.e)||lf(g,a.e)||jf(g,a.e)&&(!a.g||sa(a.g)||a.e.h))r(a),g.b=!0;else{a.g&&Ab(g,a.g);var d=a.e.C;if(d&&d.b==23){var e=hf(g,d.e);e&&(a.e.C=e,g.b=!0)}}break;case 11:var f=a.e;if(jf(g,f)&&!(f.e&49152))r(a),g.b=!0;else{Ab(g,f.k);for(var i=0,n=f.n,k=n.length;i<k;i=i+1|0){var h=n[i];Ab(g,h.p),h.C&&Ab(g,h.C)}f.q&&Ab(g,f.q)}break;case 17:if(!a.g.k){var l=a.m.b;l==3||!l||l==16?r(a):l^10?K(a,new Ei(3)):K(a,new Ei(25)),g.b=!0}break;case 23:var m=hf(g,a.e);m&&(K(a,m),g.b=!0);break}}function hf(b,a){return kf(b,a)?Sa(a.h):lf(b,a)?Sa(W(a)):null}function nh(e,a,b){
60
- for(var c=a.g,d=null;c;c=d)d=c.k,c.b==9&&!e.f.has(c.l)&&!Ga(b.a,c.l,0)&&r(c)}function jf(b,a){return Ba(b.d,a.a,-1)==0&&(!(a instanceof wc)||a.u==null||Ba(b.d,a.u.a,-1)==0)}function kf(b,a){return a.h!=null&&Fd(a.h.b)}function lf(b,a){return Ba(b.e,a.a,-1)==0&&W(a)!=null&&Fd(W(a).b)}function gb(y,a){for(var b=a.g,c=null;b;b=c)c=b.k,gb(y,b);switch(a.b){case 2:var d=a.e;d.C&&gb(y,d.C),W(d)&&gb(y,W(d));break;case 3:for(var e=a.g;e;e=e.k)if(Dg(e.b)&&e.k){for(;e.k;)r(e.k);y.b=!0}if(a.m&&a.m.b==3){for(var f=!1,h=a.g;h;h=h.k)h.b^17||(f=!0);if(!f){Le(a),y.b=!0;return}}break;case 8:if(a.m.b==3){if(sa(a.g)){r(a),y.b=!0;return}var l=a.n;if(l&&l.b==8)if(y.a==1&&(sf(l.g.f)||sf(a.g.f)));else{var m=r(a.g);o(a,s(o(o(new Ei(25),r(r(l).g)),m),m.f)),y.b=!0;return}}break;case 7:_c(y,a.g),Qb(a.i)&&(oa(a,o(new Ei(3),r(a.g))),y.b=!0);break;case 10:if(_c(y,a.i),!wb(a)&&a.n&&a.n.b==8&&(oa(a.g,r(a.n.g)),r(a.n),y.b=!0),Ja(a)&&Ua(Ja(a))&&(oa(Ja(a),new Ei(25)),y.b=!0),a.i.b^5){for(;a.i.g&&a.i.i.b==5;)r(a.i.i),y.b=!0}else oa(a.i,new Ei(3)),
61
- y.b=!0;break;case 11:var g=a.e;gb(y,g.k);for(var nd=0,Mc=g.n,he=Mc.length;nd<he;nd=nd+1|0){var i=Mc[nd];gb(y,i.p),i.C&&gb(y,i.C)}g.q&&gb(y,g.q);break;case 12:if(_c(y,a.g.k),a.g.k.k&&_c(y,a.g.k.k),Ua(a.g)){oa(a,r(a.g.k)),y.b=!0;return}if(Qb(a.g)){a.g.k.k?oa(a,r(a.g.k.k)):r(a),y.b=!0;return}if(a.g.k.k&&a.g.k.b==15&&a.g.k.k.b==15){var n=a.g.k.g,k=a.g.k.k.g;if(n&&k){oa(a,o(new Ei(15),s(o(o(o(new Ei(22),r(a.g)),r(n)),r(k)),n.f))),y.b=!0;return}}if(a.g.k.k&&a.g.k.b==8&&a.g.k.k.b==8){var q=a.g.k.g,v=a.g.k.k.g;if(q.f==v.f)if(y.a==1&&q.f==$d);else{oa(a,o(new Ei(8),s(o(o(o(new Ei(22),r(a.g)),r(q)),r(v)),q.f))),y.b=!0;return}}if(!a.g.k.k&&a.g.k.b==8){var u=a.g.k.g,B=u.b==60&&u.g.b==23&&Zd(u.g.e);if(u.f==da||u.f==ia||B){var p=B?Sa(u.g):u.f==da?s(Y(new Ei(30),0),da):s(ra(new Ei(29),0),ia);oa(a,o(new Ei(8),s(o(o(o(new Ei(22),r(a.g)),r(u)),p),u.f))),y.b=!0;return}}if(!a.g.k.k&&a.g.k.b==12&&!a.g.k.g.k.k){var O=a.g,C=a.g.k.g,P=a.g.k.g.k;K(O,s(o(o(new Ei(51),Id(O)),r(C)),ha)),K(a.g.k,r(P)),y.b=!0;return}if(Oe(a.g.k)){a.g.k.k?(Rb(a.g),
62
- r(a.g.k)):oa(a,o(new Ei(8),r(a.g))),y.b=!0;return}if(a.g.k.k&&Oe(a.g.k.k)){r(a.g.k.k),y.b=!0;return}break;case 15:for(var S=a.n;S&&S.b==12&&!S.g.k.k&&S.g.k.b==15;){var ea=S.g.k.g,fa=a.g;if(!ea||!fa)break;oa(a,o(new Ei(15),s(o(o(o(new Ei(22),r(S.g)),r(ea)),r(fa)),ea.f))),r(S),S=a.n,y.b=!0}break;case 17:for(var V=a.n;V;V=V.n){if(V.b^17)break;if(V.g.f==a.g.f&&(V.h|0)==(a.h|0)){for(;V.i!=V.g;)Yc(a,a.g.k,r(V.i));r(V),y.b=!0;return}for(var ba=V.g.k;ba;ba=ba.k){var ga=ba.g;if(ga&&!Fd(ga.b))return}}break;case 19:var ja=a.g,ua=a.i;oa(a,Pe(null,r(ja),null,r(ua))),y.b=!0;break;case 22:var Ma=a.g,na=a.g.k,ka=a.i;if(Ua(Ma)){K(a,r(na)),y.b=!0;return}if(Qb(Ma)){K(a,r(ka)),y.b=!0;return}if(na.b==ka.b&&Uc(na.b)&&ta(na.g,ka.g)&&na.b^48){var pb=na.g,qa=na.i,Za=ka.i;if(qa.f==Za.f){var La=o(o(o(new Ei(22),r(Ma)),r(qa)),r(Za));La.f=qa.f,K(a,o(o(new Ei(na.b),r(pb)),La)),y.b=!0;return}}if(na.b==60&&ta(na.g,ka)&&sa(ka)){var Na=na.g,jb=na.i,Xa=o(o(o(new Ei(22),r(Ma)),r(jb)),r(ka));Xa.f=jb.f,K(a,o(o(new Ei(60),r(Na)),Xa)),y.b=!0;return}
63
- break;case 25:for(var Aa=a.g,Ya=null;Aa!=a.i;Aa=Ya)Ya=Aa.k,sa(Aa)&&(r(Aa),y.b=!0);if(a.m.b==25){Le(a),y.b=!0;return}if(Wc(a)){K(a,r(a.g)),y.b=!0;return}break;case 33:var Fa=a.g;Fa.b^33?Fa.b^30?Fa.b^29||Wb(y,a,-Fa.h):Xb(y,a,-(Fa.h|0)|0):(K(a,r(Fa.g)),y.b=!0);break;case 34:var Ea=a.g;Ea.b^34?Ea.b^28||$(y,a,!!!Ea.h):(K(a,r(Ea.g)),y.b=!0);break;case 35:K(a,r(a.g));break;case 40:var Hb=a.g,kb=a.i;rc(Hb,0)?(K(a,r(kb)),y.b=!0):rc(kb,0)?(K(a,r(Hb)),y.b=!0):Hb.b==30&&kb.b==30?Xb(y,a,(Hb.h|0)+(kb.h|0)|0):Hb.b==29&&kb.b==29&&Wb(y,a,Hb.h+kb.h);break;case 20:var _a=a.g;if(_a.b^26){if(a.f==da&&_a.b==21&&_a.l=='length'&&Wc(a)){var Ib=_a.g.f;Ib.b&&Ib.c>0&&(K(a,s(s(Y(new Ei(30),Ib.c),da),da)),y.b=!0)}}else{var Oa=_a.f;if(Oa==da){var qb=_a.k;qb&&!qb.k&&qb.b==30&&(K(a,r(qb)),y.b=!0)}else if(Oa==ia){var $a=_a.k;$a&&!$a.k&&$a.b==30&&Wb(y,a,$a.h|0)}else if(T(Oa)==ia)for(var Bb=_a.k;Bb;Bb=Bb.k)if(Bb.b==29){var _b=Bb.h,Cb=_b|0;_b==Cb&&Xb(y,Bb,Cb)}}break;case 44:var $b=a.g,lb=a.i;rc(lb,1)?(K(a,r($b)),y.b=!0):$b.b==30&&lb.b==30?Xb(y,a,
64
- lb.h|0?($b.h|0)/(lb.h|0)|0:0):$b.b==29&&lb.b==29&&Wb(y,a,lb.h!=0?$b.h/lb.h:0);break;case 45:var Db=a.g,Jb=a.i;ta(Db,Jb)&&sa(Db)?($(y,a,!0),y.b=!0):Db.b==30&&Jb.b==30?$(y,a,(Db.h|0)==(Jb.h|0)):Db.b==29&&Jb.b==29&&$(y,a,Db.h==Jb.h);break;case 46:var ac=a.g,ic=a.i;ac.b==30&&ic.b==30?$(y,a,(ac.h|0)>(ic.h|0)):ac.b==29&&ic.b==29&&$(y,a,ac.h>ic.h);break;case 47:var ab=a.g,Eb=a.i;ab.b^30?Eb.b^30?ab.b==30&&Eb.b==30?$(y,a,(ab.h|0)>=(Eb.h|0)):ab.b==29&&Eb.b==29&&$(y,a,ab.h>=Eb.h):(a.b=46,Y(Eb,(Eb.h|0)-1|0),y.b=!0):(a.b=46,Y(ab,(ab.h|0)+1|0),y.b=!0);break;case 48:var Kc=a.g,od=a.i,ce=Kc.f;if(od.b==30){var Ec=od.h|0,bc=0;switch(ce){case yc:case Bc:case mb:bc=2;break;case zc:case Cc:case nb:bc=3;break;case Ac:case Dc:case ob:bc=4;break}Ec>-1&&Ec<bc&&(K(a,s(cb(o(new Ei(21),r(Kc)),'xyzw'[Ec]),a.f)),y.b=!0)}break;case 49:var Fc=a.g,jc=a.i;Fc.b==30&&jc.b==30?$(y,a,(Fc.h|0)<(jc.h|0)):Fc.b==29&&jc.b==29&&$(y,a,Fc.h<jc.h);break;case 50:var Kb=a.g,va=a.i;Kb.b^30?va.b^30?Kb.b==30&&va.b==30?$(y,a,(Kb.h|0)<=(va.h|0)):Kb.b==29&&va.b==29&&$(y,
65
- a,Kb.h<=va.h):(a.b=49,Y(va,(va.h|0)+1|0),y.b=!0):(a.b=49,Y(Kb,(Kb.h|0)-1|0),y.b=!0);break;case 51:var Fb=a.g,Lb=a.i;Fb.b==28&&Ua(Fb)?(K(a,r(Lb)),y.b=!0):Fb.b==28&&Qb(Fb)?$(y,a,!1):Fb.b==28&&Lb.b==28&&$(y,a,!!Fb.h&&!!Lb.h);break;case 52:var cc=a.g,Gc=a.i;cc.b==28&&Qb(cc)?(K(a,r(Gc)),y.b=!0):cc.b==28&&Ua(cc)?$(y,a,!0):cc.b==28&&Gc.b==28&&$(y,a,!!cc.h&&!!Gc.h);break;case 53:var Lc=a.g,pd=a.i;Lc.b==28&&pd.b==28&&$(y,a,!!Lc.h!=!!pd.h);break;case 54:var kc=a.g,Gb=a.i;kc.b==30&&(kc.h|0)==1?(K(a,r(Gb)),y.b=!0):Gb.b==30&&(Gb.h|0)==1?(K(a,r(kc)),y.b=!0):kc.b==30&&Gb.b==30?Xb(y,a,ki(kc.h|0,Gb.h|0)):kc.b==29&&Gb.b==29&&Wb(y,a,kc.h*Gb.h);break;case 55:var Hc=a.g,dc=a.i;ta(Hc,dc)&&sa(Hc)?($(y,a,!1),y.b=!0):Hc.b==30&&dc.b==30?$(y,a,(Hc.h|0)!=(dc.h|0)):Hc.b==29&&dc.b==29&&$(y,a,Hc.h!=dc.h);break;case 59:var lc=a.g,Ic=a.i;rc(lc,0)?(K(a,s(o(new Ei(33),r(Ic)),a.f)),y.b=!0):rc(Ic,0)?(K(a,r(lc)),y.b=!0):lc.b==30&&Ic.b==30?Xb(y,a,(lc.h|0)-(Ic.h|0)|0):lc.b==29&&Ic.b==29&&Wb(y,a,lc.h-Ic.h);break}}function $(c,a,b){K(a,s(s(Ia(new Ei(28),
66
- b),ha),ha)),c.b=!0}function Wb(c,a,b){K(a,s(s(ra(new Ei(29),b),ia),ia)),c.b=!0}function Xb(c,a,b){K(a,s(s(Y(new Ei(30),b),da),da)),c.b=!0}function _c(b,a){a.b==3&&Wc(a)&&(oa(a,r(a.g)),b.b=!0)}function mf(b,a){Pa(b.c,a.c,a)}function oh(b,a){Pa(b.c,a.c,a)}function Vd(c,a){var b=Ga(c.c,a,null);return b||c.b&&Vd(c.b,a)}function $c(a){return new Mi(a,0,a.b.length)}function ph(d,a){if(Wd(d),a<0||a>=d.d.length)return'';var b=d.d[a],c=(a+1|0)<d.d.length?d.d[a+1|0]-1|0:d.b.length;return d.b.slice(b,c)}function Yb(h,a){Wd(h);for(var b=h.d.length,c=0;b>0;){var d=b/2|0,e=c+d|0;h.d[e]<=a?(c=e+1|0,b=(b-d|0)-1|0):b=d}var f=c>0?a-h.d[c-1|0]|0:a;return new Si(c-1|0,f)}function Zb(d,a,b){if(Wd(d),a>-1&&a<d.d.length){var c=d.d[a];if(b>-1&&((a+1|0)<d.d.length?(c+b|0)<d.d[a+1|0]:(c+b|0)<=d.b.length))return c+b|0}return-1}function Wd(b){if(!b.d){b.d=[0];for(var a=0,c=b.b.length;a<c;a=a+1|0)b.b.charCodeAt(a)^10||b.d.push(a+1|0)}}function Xd(a){switch(a){case 2:return Xh;case 3:return Yh;case 4:return Zh}return null}function Yd(a,b){
67
- switch(a){case ha:switch(b){case 1:return ha;case 2:return yc;case 3:return zc;case 4:return Ac}break;case ia:switch(b){case 1:return ia;case 2:return mb;case 3:return nb;case 4:return ob}break;case da:switch(b){case 1:return da;case 2:return Bc;case 3:return Cc;case 4:return Dc}break;case hc:switch(b){case 1:return hc;case 2:return jd;case 3:return kd;case 4:return ld}break}return null}function nf(a){return (a.e&4097)!=0||(a.e&32)!=0&&a.d.a==1}function Zd(a){return a instanceof pf&&(a.B==0||a.B==2)}function z(a){return a.m||(a.m=new Xi(a,null,0)),a.m}function rh(c,a){if(c.n.length^a.n.length)return!1;for(var b=0,d=c.n.length;b<d;b=b+1|0)if(ca(c.n[b])!=ca(a.n[b]))return!1;return!0}function _d(){return of||(of=new wc(-999,null,'length',null),of.k=s(new Ei(26),da)),of}function ca(a){return a.P||a.p.f}function W(a){var b;return (b=a.O)&&b.g}function xc(a,b,c){for(var d=b.b.split(_h),e=[],f=null,h=0,l=0,m=0,ea=d.length;m<ea;m=m+1|0){var g=d[m],i=g.length,n=l+i|0,k=new Mi(b,l,n);if(m%2){var q=g.charCodeAt(0);if(q>64&&q<91||q>96&&q<123||q==95){
68
- var v=Ga(th,g,130);v^130?e.push(new Vi(k,v,f)):uh.has(g)?rg(a,k):e.push(new Vi(k,126,f))}else if(q^64){if(q>47&&q<58||q==46&&i>1)$h.test(g)?(q=g.charCodeAt(i-1|0),e.push(new Vi(k,q==117||q==85?128:127,f))):e.push(new Vi(k,125,f));else if(q^35){if(q^34){var p=Ga(ai,g,130);p^130||(g.startsWith('//')?c^1?(f||(f=[])).push(k):p=0:g.startsWith('/*')&&(c^1?(f||(f=[])).push(k):p=1)),p^130&&e.push(new Vi(k,p,f))}else e.push(new Vi(k,129,f))}else{var B=124;switch(g){case'#version':B=122;break;case'#extension':B=121;break;case'#include':B=123;break}e.push(new Vi(k,B,f))}}else{var u=71;switch(g){case'@vertex':u=74;break;case'@fragment':u=73;break}e.push(new Vi(k,u,f))}}else if(g!=''){t(a,k,'Syntax error "'+g+'"');break}e.length^h&&(f=null,h=e.length),l=n}var O=0;if(e.length>2){var C=e[0],P=e[1],S=e[2];C.b==122&&P.b==127&&S.b==126&&I(P.a)=='300'&&I(S.a)=='es'&&(O=1)}e.push(new Vi(new Mi(b,l,l),130,f)),b.c=new Wi(e,O)}function rf(a){return a.b?rf(a.b):a}function ad(c,a){c.f||(c.f=new Map);var b=Ba(c.f,a,null);return b||(Ha(c.f,
69
- a,b=new Xi(null,c,a)),b.d=!0,b.e=c.e),b}function G(a){return a.b?a.c>0?G(a.b)+'['+a.c+']':G(a.b)+'[]':a.a.c}function X(a){switch(a){case yc:case mb:case Bc:case jd:case ec:case dd:case ed:return 2;case zc:case nb:case Cc:case kd:case fc:case fd:case gd:return 3;case Ac:case ob:case Dc:case ld:case gc:case hd:case id:return 4}return a.c}function xa(a){switch(a){case yc:case zc:case Ac:return ha;case mb:case nb:case ob:return ia;case Bc:case Cc:case Dc:return da;case jd:case kd:case ld:return hc;case ec:case fd:case hd:return mb;case fc:case dd:case id:return nb;case gc:case ed:case gd:return ob}return a.b}function Ka(a){switch(a){case ha:case ia:case da:case hc:return 1;case yc:case mb:case Bc:case jd:return 2;case zc:case nb:case Cc:case kd:return 3;case Ac:case ob:case Dc:case ld:case ec:return 4;case dd:case fd:return 6;case ed:case hd:return 8;case fc:return 9;case gd:case id:return 12;case gc:return 16}return 0}function T(a){switch(a){case ha:case yc:case zc:case Ac:return ha;case ia:case mb:case nb:case ob:case ec:case fc:case gc:case dd:case ed:case fd:case gd:case hd:case id:
70
- return ia;case da:case Bc:case Cc:case Dc:return da;case hc:case jd:case kd:case ld:return hc}return null}function bd(a){switch(a){case yc:case zc:case Ac:case Bc:case Cc:case Dc:case jd:case kd:case ld:case mb:case nb:case ob:return!0}return!1}function ya(a){switch(a){case ec:case fc:case gc:case dd:case ed:case fd:case gd:case hd:case id:return!0}return!1}function ib(b){var a=T(b);return a==da||a==hc}function cd(b){var a=T(b);return a==ia||a==da||a==hc}function vh(b,a){return !b.e&&(!b.d||a==1)}function sf(a){return a==$d||a.d}function ma(a){return a.e=!0,a}function ae(a,b){switch(ki(a,10)+b|0){case 21:case 12:return mb;case 31:case 13:return nb;case 41:case 14:return ob;case 22:return ec;case 23:return dd;case 24:return ed;case 32:return fd;case 33:return fc;case 34:return gd;case 42:return hd;case 43:return id;case 44:return gc}return null}function tf(b){var a=b.a.length;return b.a.push(a),a}function be(c,a,b){c.a[md(c,a)]=md(c,b)}function md(c,a){var b=c.a[a];return b^a&&(b=md(c,b),c.a[a]=b),b}function za(a,b){
71
- uf(a),process.stdout.write(b),uf(0)}function Mh(a){za(3,'error: '),za(1,a+'\n')}function Nh(a){za(2,'note: '),za(1,a+'\n')}function Oh(a){za(7,'warning: '),za(1,a+'\n')}function vf(a){for(var b=process.stdout.columns,m=0,g=a.a,i=g.length;m<i;m=m+1|0){var c=g[m];c.b&&za(1,Od(c.b)+': ');switch(c.a){case 1:Oh(c.c);break;case 0:Mh(c.c);break}if(c.b){var d=Pd(c.b,b);za(2,d.a+'\n'),za(4,d.b+'\n')}if(c.d){za(1,Od(c.d)+': '),Nh(c.e);var e=Pd(c.d,b);za(2,e.a+'\n'),za(4,e.b+'\n')}}var f=a.d!=0,h=a.c!=0,l='';h&&(l+=a.c+' warning'+(a.c^1?'s':''),f&&(l+=' and ')),f&&(l+=a.d+' error'+(a.d^1?'s':'')),(h||f)&&process.stdout.write(l+' generated\n')}function wf(a){if(li(a))return[new Ti('<stdin>',a)];if(a instanceof Array){for(var b=[],c=0,e=a.length;c<e;c=c+1|0){var d=a[c];b.push(new Ti(mi(d.name),mi(d.contents)))}return b}return[new Ti(mi(a.name),mi(a.contents))]}function xf(a){return function(b,c){var d=a(b,c);if(li(d))return new Ti(b,d);if(!d)return null;var e=d.name,f=d.contents;if(li(e)&&li(f))return new Ti(e,f);throw new Error('Invalid file access result')}}
72
- function Ph(){var a=process.argv.slice(2),b=new ni,c=[],d=0,e=null,f=require('fs'),h=require('path');b.e=function(l,m){var g=h.resolve(h.dirname(m),l);try{return new Ti(g,f.readFileSync(g,'utf8'))}catch(p){}return null};for(var u=0,B=a.length;u<B;u=u+1|0){var i=a[u];if(i.startsWith('-'))switch(i){case'--disable-rewriting':b.a=!1;break;case'--pretty-print':b.b=!1;break;case'--keep-symbols':b.d=!1;break;case'--help':case'-h':console.log("\nUsage: glslx [sources] [flags]\n\n --output=PATH\n Set the path to the output file. Defaults to standard out.\n\n --format=FORMAT\n Set the output format, must be json, js, c++, rust, or skew. Defaults to json.\n\nAdvanced:\n\n --disable-rewriting\n Disable syntax tree rewriting, useful to check for driver bugs.\n\n --pretty-print\n Format the output nicely instead of minifying it.\n\n --renaming=MODE\n Valid modes are all, internal-only, or none. Defaults to all.\n\n --keep-symbols\n Don't inline constants or remove unused symbols.\n");return;default:if(i.startsWith('--output='))e=i.slice(9);
73
- else if(i.startsWith('--format=')){var n=i.slice(9);Cf.has(n)||(console.log('invalid output format "'+n+'"'),process.exit(1)),d=Cf.get(n)}else if(i.startsWith('--renaming=')){var k=i.slice(11);Df.has(k)||(console.log('invalid symbol renaming mode "'+k+'"'),process.exit(1)),b.c=Df.get(k)}else console.log('invalid flag "'+i+'"'),process.exit(1);break}else c.push(new Ti(h.resolve(i),f.readFileSync(i,'utf8')))}if(c.length){var q=new Di,v=je(q,c,b);v?e!=null?(f.writeFileSync(e,sd(v,d)),vf(q)):process.stdout.write(sd(v,d)):(vf(q),process.exit(1))}else console.log("\nUsage: glslx [sources] [flags]\n\n --output=PATH\n Set the path to the output file. Defaults to standard out.\n\n --format=FORMAT\n Set the output format, must be json, js, c++, rust, or skew. Defaults to json.\n\nAdvanced:\n\n --disable-rewriting\n Disable syntax tree rewriting, useful to check for driver bugs.\n\n --pretty-print\n Format the output nicely instead of minifying it.\n\n --renaming=MODE\n Valid modes are all, internal-only, or none. Defaults to all.\n\n --keep-symbols\n Don't inline constants or remove unused symbols.\n")}
74
- function Zi(){var a=(function(){return this})(),b=typeof exports!=='undefined'?exports:a.GLSLX={};b.compile=di,b.compileIDE=ei,b.format=fi,typeof require!=='undefined'&&typeof module!=='undefined'&&require.main===module&&Ph()}function Fd(a){return a>27&&a<31}function Gd(a){return a>31&&a<40}function Cg(a){return a>31&&a<38}function Hd(a){return a>35&&a<40}function Uc(a){return a>39&&a<71}function Vc(a){return a>59&&a<71}function Dg(a){return a==4||a==5||a==6||a==15}function Ie(a){return a==7||a==10||a==19}function qh(c){var a=(c&16384)!=0,b=(c&32768)!=0;return a&&!b?1:b&&!a?2:0}function hb(d,a){var b='';if(d&128&&(b+='invariant '),d&8&&(b+='flat '),d&2048&&(b+='smooth '),d&1<<17){var c=d/(1<<18)|0;b+='layout(location'+a+'='+a+c+')'+a}return d&1&&(b+='attribute '),d&4&&(b+='const '),d&4096&&(b+='uniform '),d&8192&&(b+='varying '),d&2&&(b+='centroid '),d&32&&(b+='in '),d&64&&(b+='inout '),d&1024&&(b+='out '),d&16&&(b+='highp '),d&256&&(b+='lowp '),d&512&&(b+='mediump '),b}function sh(a){return a>79&&a<110}function qf(a){
75
- switch(a){case 126:case 42:case 33:case 57:case 58:case 59:case 60:case 34:case 61:case 46:case 47:case 48:case 49:case 64:case 65:case 66:case 67:case 14:case 39:case 40:case 41:case 20:case 22:case 23:case 24:case 63:case 68:case 69:case 70:case 3:case 5:case 6:case 7:case 26:case 27:case 28:case 51:case 52:case 53:case 54:case 55:case 56:return!0}return!1}function uf(a){process.stdout.isTTY&&process.stdout.write('\x1B[0;'+ci.get(a)+'m')}function rb(b,a){return b[b.length-1|0]=a}function rd(a){return a[a.length-1|0]}function Jf(c,a){for(var d=0,e=a.length;d<e;d=d+1|0){var b=a[d];c.push(b)}}function Mb(d,a){for(var b=0,c=0,e=d.length;c<e;c=c+1|0)a(d[c])||(b<c&&(d[b]=d[c]),b=b+1|0);for(;b<d.length;)d.pop()}function Pa(c,a,b){return c.set(a,b),b}function j(c,a,b){return c.set(a,b),c}function Ga(d,a,b){var c=d.get(a);return c!==void 0?c:b}function Ha(c,a,b){return c.set(a,b),b}function Qa(c,a,b){return c.set(a,b),c}function Ba(d,a,b){var c=d.get(a);return c!==void 0?c:b}function qd(b,a){return (a<b|0)-(a>b|0)|0}
76
- function Nc(a){for(var b=new hi,d=0,e=a.length;d<e;d=d+1|0){var c=a[d];b.a+=Gf(c)}return b.a}function If(b,a){return (a<b|0)-(a>b|0)|0}function mc(d,a){for(var b='',c=0;c<a;c=c+1|0)b+=d;return b}function Gf(a){return a<65536?String.fromCharCode(a):String.fromCharCode((a-65536>>10)+55296|0)+String.fromCharCode((a-65536&1023)+56320|0)}function Jc(a){if(!a)return null;var b=a.a,c=Yb(b,a.b),d=Yb(b,a.c);return{source:b.a,start:{line:c.a,column:c.b},end:{line:d.a,column:d.b}}}function di(a,b){b=b||{};var c=wf(a),d=new Di,e=new ni;e.c=Ga(Df,b.renaming,0),b.disableRewriting&&(e.a=!1),b.prettyPrint&&(e.b=!1),b.keepSymbols&&(e.d=!1),b.fileAccess&&(e.e=xf(b.fileAccess)),e.f='indent'in b?mi(b.indent):' ',e.h='newline'in b?mi(b.newline):'\n';var f=je(d,c,e);return{log:pg(d),output:f?sd(f,Ga(Cf,b.format,0)):null}}function ei(a,b){b=b||{};var c=wf(a),d=new Di,e=new ni;b.fileAccess&&(e.e=xf(b.fileAccess));var f=Kf(d,c,e),h=function(l){for(var Gc,m=l.source+'',g=l.line|0,i=l.column|0,n=!!l.ignoreDiagnostics,k=null,q=null,v=null,Gb=0,Hc=c.length;Gb<Hc;Gb=Gb+1|0){
77
- var u=c[Gb];if(u.a==m){var B=Zb(u,g,i);if(~B){if(!n&&d)for(var Lc=0,pd=d.a,kc=pd.length;Lc<kc;Lc=Lc+1|0){var p=pd[Lc];if(p.b&&p.b.a==u&&uc(p.b,B)){q=new ui(p.c,''),k=p.b;break}}if(!q&&f){var O=new vi(u,B);Ra(O,f.a),q=ig(O),q&&(k=O.e,v=(Gc=O.d)&&Gc.c)}}break}}return{tooltip:q&&q.a,range:Jc(k),symbol:v,documentation:q&&q.b}},C=function(P){for(var S=P.source+'',ea=P.line|0,fa=P.column|0,V=null,ba=null,ga=null,dc=0,lc=f.b,Ic=lc.length;dc<Ic;dc=dc+1|0){var ja=lc[dc];if(ja.a.a.a==S){var ua=Zb(ja.a.a,ea,fa);if(~ua&&uc(ja.a,ua))return{definition:Jc(ja.b),range:Jc(ja.a),symbol:ja.b.a.a}}}for(var y=0,nd=c.length;y<nd;y=y+1|0){var Ma=c[y];if(Ma.a==S){var na=Zb(Ma,ea,fa);if(~na&&f){var ka=new vi(Ma,na);Ra(ka,f.a),ka.d&&ka.d.b&&ka.d.b.a.a!='<api>'&&(ba=ka.d.b,V=ka.e,ga=ka.d.c)}break}}return{definition:Jc(ba),range:Jc(V),symbol:ga}},pb=function(qa){for(var Za=qa.source+'',La=null,Mc=0,he=c.length;Mc<he;Mc=Mc+1|0){var Na=c[Mc];if(Na.a==Za){if(f){var jb=new wi(Na);Ae(jb,f.a),La=jb.b.map(function(Xa){return{name:Xa.c,kind:Xa instanceof pf?'variable':Xa instanceof wc?'function':Xa instanceof vc?'struct':null,
78
- range:Jc(Xa.b)}})}break}}return{symbols:La}},Aa=function(Ya){for(var Fa=Ya.source+'',Ea=Ya.line|0,Hb=Ya.column|0,kb=null,_a=null,ee=0,Rh=c.length;ee<Rh;ee=ee+1|0){var Oa=c[ee];if(Oa.a==Fa){var qb=Zb(Oa,Ea,Hb);if(~qb&&f){var $a=new xi(Oa,qb);lg($a,f.a),$a.d&&$a.d.b&&$a.d.b.a.a!='<api>'&&(kb=$a.c.map(Jc),_a=$a.d.c)}break}}return{ranges:kb,symbol:_a}},Bb=function(_b){for(var Cb=_b.source+'',Ib=_b.line|0,$b=_b.column|0,lb=[],fe=0,Sh=c.length;fe<Sh;fe=fe+1|0){var Db=c[fe];if(Db.a==Cb){var Jb=Zb(Db,Ib,$b);if(~Jb&&f){var ac=new zi(Db,Jb);og(ac,f.a),lb=ac.d.map(function(ic){return{kind:ic.a,name:ic.b,detail:ic.c,documentation:ic.d}})}}}return{completions:lb}},ab=function(Eb){for(var Kc=Eb.source+'',od=Eb.line|0,ce=Eb.column|0,Ec=[],bc=-1,Fc=-1,ge=0,Th=c.length;ge<Th;ge=ge+1|0){var jc=c[ge];if(jc.a==Kc){var Kb=Zb(jc,od,ce);if(~Kb&&f){var va=new Bi(jc,Kb);Dd(va,f.a),bc=va.d,Fc=va.e,Ec=va.c.map(function(Fb){return{text:Fb.a,'arguments':Fb.b,documentation:Fb.c}})}}}return{signatures:Ec,activeArgument:bc,activeSignature:Fc}};
79
- return{unusedSymbols:d.b.map(function(Lb){return{name:Lb.c,range:Jc(Lb.b)}}),diagnostics:d.a.map(function(cc){return{kind:gi[cc.a].toLowerCase(),range:Jc(cc.b),text:cc.c}}),tooltipQuery:h,definitionQuery:C,symbolsQuery:pb,renameQuery:Aa,completionQuery:Bb,signatureQuery:ab}}function fi(a,b){b=b||{};var c='indent'in b?mi(b.indent):' ',d='newline'in b?mi(b.newline):'\n',e=2;if('trailingNewline'in b){var f=mi(b.trailingNewline);switch(f){case'preserve':e=0;break;case'remove':e=1;break;case'insert':e=2;break;default:throw new Error('Invalid "trailingNewline" value: '+f)}}return hg(mi(a),c,d,e)}function hi(){this.a=''}function ii(){this.a='',this.b=0,this.c=0}function ni(){this.a=!0,this.b=!0,this.c=0,this.d=!0,this.e=null,this.f=' ',this.h='\n'}function oi(a){this.a=new Map,this.c=0,this.b=a}function pi(a,b,c){this.a=a,this.b=b,this.c=c}function qi(a,b){this.a=a,this.b=b}function ri(a,b){this.a=a,this.b=b}function si(){this.a=[],this.b=[]}function ti(a,b){this.a='',this.b='',this.c=null,this.d=null,this.e=' ',this.f=b.b,
80
- this.f?(this.e='',this.d=''):(this.c=b.f,this.d=b.h);for(var c=null,d=a.g;d;d=d.k)Rf(this,d)||(c&&Qf(c,d)&&(this.a+=this.d),bb(this,d),this.a+=this.d,c=d)}function ui(a,b){this.a=a,this.b=b}function vi(a,b){this.a=a,this.b=b,this.c=null,this.d=null,this.e=null,this.f=null,this.h=null}function wi(a){this.a=a,this.b=[]}function xi(a,b){this.a=a,this.b=b,this.c=[],this.d=null}function yi(a,b){this.a=a,this.b=b,this.c='',this.d=''}function zi(a,b){this.a=a,this.b=b,this.c=new Map,this.d=[]}function Ai(a,b,c){this.a=a,this.b=b,this.c=c}function Bi(a,b){this.a=a,this.b=b,this.c=[],this.d=-1,this.e=-1}function Ci(a,b,c){this.a=a,this.b=b,this.c=c,this.d=null,this.e=''}function Di(){this.a=[],this.b=[],this.c=0,this.d=0,this.e=null}function Ei(a){this.a=Qe(),this.b=a,this.c=null,this.d=null,this.e=null,this.f=null,this.h=0,this.l=null,this.m=null,this.g=null,this.i=null,this.n=null,this.k=null,this.q=!1}function Fi(a,b){this.a=a,this.b=b}function Gi(a){this.a=a}function Hi(a,b){this.a=a,this.b=b}function Ii(a,b,c,d,e){
81
- this.a=null,this.b=null,this.c=0,this.d=null,this.e=null,this.f=null,this.h=null,this.l=[],this.m=0,this.g=0,this.i=null,this.a=a,this.b=b.a,this.c=b.b,this.d=c,this.e=d,this.f=e,this.h=Jg(this.c)}function Ji(a){this.a=a,this.b=null,this.c=null}function Ki(){this.a=new Map}function Li(a,b){this.a=a,this.b=b}function Mi(a,b,c){this.a=a,this.b=b,this.c=c}function Oi(a,b){this.a=a,this.b=b,this.c=new Map,this.d=0,this.e=!1}function Ni(a){this.a=a,this.b=[],this.c=[],this.d=new Map,this.e=new Yi,this.f=new Yi,this.h=0,this.l=0,this.m=-1}function Pi(a,b,c){this.a=a,this.b=b,this.c=c,this.d=new si,this.e=[],this.f=new Map,this.h=null}function Qi(a){this.a=a,this.b=!1,this.c=[],this.d=new Map,this.e=new Map,this.f=new Map}function Ri(a,b){this.a=a,this.b=b,this.c=new Map}function Si(a,b){this.a=a,this.b=b}function Ti(a,b){this.a=a,this.b=b,this.c=null,this.d=null}function Ui(a,b,c,d){this.a=a,this.b=b,this.c=c,this.d=d,this.e=0,this.f=null,this.h=null,this.l=null,this.m=null,this.g=0}function vc(a,b,c,d){Ui.call(this,
82
- a,b,c,d),this.i=[]}ji(vc,Ui);function wc(a,b,c,d){Ui.call(this,a,b,c,d),this.n=[],this.k=null,this.q=null,this.v=null,this.u=null}ji(wc,Ui);function pf(a,b,c,d,e){Ui.call(this,a,b,c,d),this.B=e,this.p=null,this.O=null,this.C=null,this.P=null}ji(pf,Ui);function Vi(a,b,c){this.a=a,this.b=b,this.c=c}function Wi(a,b){this.a=a,this.b=b}function Xi(a,b,c){this.a=a,this.b=b,this.c=c,this.d=!1,this.e=!1,this.f=null}function Yi(){this.a=[]}var Uh=new ii,zf=0,de=new Fi(null,-1),Af=null,Bf=null,Ng=j(j(j(j(new Map,'disable',1),'enable',2),'require',3),'warn',4),Wh=j(j(j(j(new Map,'GL_OES_standard_derivatives',0),'GL_EXT_frag_depth',0),'GL_EXT_draw_buffers',0),'GL_EXT_shader_texture_lod',0),Xh=['xy','st','rg'],Yh=['xyz','stp','rgb'],Zh=['xyzw','stpq','rgba'],of=null,_h=new RegExp('(\\.[0-9]+[eE][+-]?[0-9]+\\b|\\.[0-9]+\\b|[0-9]+\\.[0-9]+[eE][+-]?[0-9]+\\b|[0-9]+\\.[0-9]+\\b|[0-9]+\\.[eE][+-]?[0-9]+\\b|[0-9]+\\.|[0-9]+[eE][+-]?[0-9]+\\b|[1-9][0-9]*[uU]?\\b|0[0-7]*[uU]?\\b|0[xX][0-9A-Fa-f]+[uU]?\\b|[ \t\r\n]|/\\*(?:.|\r\n|\n)*?\\*/|//.*|&&|\\|\\||\\^\\^|\\+\\+|--|<<=?|>>=?|[()[\\]{}\\.,?:;]|[+\\-*/%=!<>&|^~]=?|@?[A-Za-z_][A-Za-z0-9_]*\\b|#\\w+\\b|"(?:[^"\\\\]|\\\\.)*")'),$h=new RegExp('^([1-9][0-9]*|0[0-7]*|0[xX][0-9A-Fa-f]+)[uU]?$'),th=j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(new Map,
83
- 'attribute',2),'bool',3),'break',4),'bvec2',5),'bvec3',6),'bvec4',7),'const',8),'continue',9),'discard',10),'do',11),'else',12),'false',13),'float',14),'for',15),'highp',16),'if',17),'in',18),'inout',19),'int',20),'invariant',21),'ivec2',22),'ivec3',23),'ivec4',24),'lowp',25),'mat2',26),'mat3',27),'mat4',28),'mediump',29),'out',30),'precision',31),'return',32),'sampler2D',33),'samplerCube',34),'struct',35),'true',36),'uniform',37),'varying',38),'vec2',39),'vec3',40),'vec4',41),'void',42),'while',43),'centroid',44),'flat',45),'isampler2D',46),'isampler2DArray',47),'isampler3D',48),'isamplerCube',49),'layout',50),'mat2x2',26),'mat2x3',51),'mat2x4',52),'mat3x2',53),'mat3x3',27),'mat3x4',54),'mat4x2',55),'mat4x3',56),'mat4x4',28),'sampler2DArray',57),'sampler2DArrayShadow',58),'sampler2DShadow',59),'sampler3D',60),'samplerCubeShadow',61),'smooth',62),'uint',63),'usampler2D',64),'usampler2DArray',65),'usampler3D',66),'usamplerCube',67),'uvec2',68),'uvec3',69),'uvec4',70),'export',72),'import',75),ai=j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(new Map,
84
- '~',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),uh=j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(new Map,'asm',0),'cast',0),'class',0),'default',0),'double',0),'dvec2',0),'dvec3',0),'dvec4',0),'enum',0),'extern',0),'external',0),'fixed',0),'fvec2',0),'fvec3',0),'fvec4',0),'goto',0),'half',0),'hvec2',0),'hvec3',0),'hvec4',0),'inline',0),'input',0),'interface',0),'long',0),'namespace',0),'noinline',0),'output',0),'packed',0),'public',0),'sampler1D',0),'sampler1DShadow',0),'sampler2DRect',0),'sampler2DRectShadow',0),'sampler3DRect',0),'short',0),'sizeof',0),'static',0),'superp',0),'switch',0),'template',0),'this',0),'typedef',
85
- 0),'union',0),'unsigned',0),'using',0),'volatile',0),ha=z(new vc(-1,null,'bool',null)),yc=z(new vc(-2,null,'bvec2',null)),zc=z(new vc(-3,null,'bvec3',null)),Ac=z(new vc(-4,null,'bvec4',null)),H=z(new vc(-5,null,'<error>',null)),ia=z(new vc(-6,null,'float',null)),da=z(new vc(-7,null,'int',null)),Bc=z(new vc(-8,null,'ivec2',null)),Cc=z(new vc(-9,null,'ivec3',null)),Dc=z(new vc(-10,null,'ivec4',null)),ec=z(new vc(-11,null,'mat2',null)),fc=z(new vc(-12,null,'mat3',null)),gc=z(new vc(-13,null,'mat4',null)),wh=ma(z(new vc(-14,null,'sampler2D',null))),xh=ma(z(new vc(-15,null,'samplerCube',null))),mb=z(new vc(-16,null,'vec2',null)),nb=z(new vc(-17,null,'vec3',null)),ob=z(new vc(-18,null,'vec4',null)),$d=z(new vc(-19,null,'void',null)),yh=ma(z(new vc(-20,null,'isampler2D',null))),zh=ma(z(new vc(-21,null,'isampler2DArray',null))),Ah=ma(z(new vc(-22,null,'isampler3D',null))),Bh=ma(z(new vc(-23,null,'isamplerCube',null))),dd=z(new vc(-24,null,'mat2x3',null)),ed=z(new vc(-25,null,'mat2x4',null)),fd=z(new vc(-26,null,'mat3x2',
86
- null)),gd=z(new vc(-27,null,'mat3x4',null)),hd=z(new vc(-28,null,'mat4x2',null)),id=z(new vc(-29,null,'mat4x3',null)),Ch=ma(z(new vc(-30,null,'sampler2DArray',null))),Dh=ma(z(new vc(-31,null,'sampler2DArrayShadow',null))),Eh=ma(z(new vc(-32,null,'sampler2DShadow',null))),bi=ma(z(new vc(-33,null,'sampler3D',null))),Fh=ma(z(new vc(-34,null,'samplerCubeShadow',null))),hc=z(new vc(-35,null,'uint',null)),Gh=ma(z(new vc(-36,null,'usampler2D',null))),Hh=ma(z(new vc(-37,null,'usampler2DArray',null))),Ih=ma(z(new vc(-38,null,'usampler3D',null))),Jh=ma(z(new vc(-39,null,'usamplerCube',null))),jd=z(new vc(-40,null,'uvec2',null)),kd=z(new vc(-41,null,'uvec3',null)),ld=z(new vc(-42,null,'uvec4',null)),Kh=[ha,yc,zc,Ac,ia,da,Bc,Cc,Dc,ec,fc,gc,wh,xh,mb,nb,ob],Lh=[yh,zh,Ah,Bh,dd,ed,fd,gd,hd,id,Ch,Dh,Eh,Fh,hc,Gh,Hh,Ih,Jh,jd,kd,ld],Cf=j(j(j(j(j(new Map,'json',0),'js',1),'c++',2),'skew',3),'rust',4),Df=j(j(j(new Map,'all',0),'internal-only',1),'none',2),gi=['ERROR','WARNING'],Qh=['GLOBAL','STRUCT_BLOCK','VARIABLE','BLOCK','BREAK',
87
- 'CONTINUE','DISCARD','DO_WHILE','EXPRESSION','EXTENSION','FOR','FUNCTION','IF','MODIFIER_BLOCK','PRECISION','RETURN','STRUCT','VARIABLES','VERSION','WHILE','CALL','DOT','HOOK','NAME','PARSE_ERROR','SEQUENCE','TYPE','UNKNOWN_CONSTANT','BOOL','FLOAT','INT','UINT','COMPLEMENT','NEGATIVE','NOT','POSITIVE','PREFIX_DECREMENT','PREFIX_INCREMENT','POSTFIX_DECREMENT','POSTFIX_INCREMENT','ADD','BITWISE_AND','BITWISE_OR','BITWISE_XOR','DIVIDE','EQUAL','GREATER_THAN','GREATER_THAN_OR_EQUAL','INDEX','LESS_THAN','LESS_THAN_OR_EQUAL','LOGICAL_AND','LOGICAL_OR','LOGICAL_XOR','MULTIPLY','NOT_EQUAL','REMAINDER','SHIFT_LEFT','SHIFT_RIGHT','SUBTRACT','ASSIGN','ASSIGN_ADD','ASSIGN_BITWISE_AND','ASSIGN_BITWISE_OR','ASSIGN_BITWISE_XOR','ASSIGN_DIVIDE','ASSIGN_MULTIPLY','ASSIGN_REMAINDER','ASSIGN_SHIFT_LEFT','ASSIGN_SHIFT_RIGHT','ASSIGN_SUBTRACT'],yf=['SINGLE_LINE_COMMENT','MULTI_LINE_COMMENT','ATTRIBUTE','BOOL','BREAK','BVEC2','BVEC3','BVEC4','CONST','CONTINUE','DISCARD','DO','ELSE','FALSE','FLOAT','FOR','HIGHP','IF','IN','INOUT','INT',
2
+ (function(){var Xh=Object.create||function(a){return{__proto__:a}};function li(a,b){a.prototype=Xh(b.prototype),a.prototype.constructor=a}var mi=Math.imul||function(a,b){return (a*(b>>>16)<<16)+a*(b&65535)|0};var If;function ni(a){return typeof a==='string'}function oi(a){return a===null?a:a+''}function Ff(c,a,b){return c.a=a,c.b=b,c.c=a.length,c}function Gf(c){if(c.b>=c.c)return-1;var a=c.a.charCodeAt((c.b=c.b+1|0)-1|0);if(a&64512^55296)return a;if(c.b>=c.c)return-1;var b=c.a.charCodeAt((c.b=c.b+1|0)-1|0);return ((a<<10)+b|0)-56613888|0}function Oc(a){return a.c=a.c+1|0,a.c}function sd(p,a){switch(a){case 0:var b={};return Array.from(p.b.keys()).forEach(function(c){b[c]=p.b.get(c)}),JSON.stringify({shaders:p.a?p.a.map(function(d){var e={name:d.a,contents:d.b};switch(d.c){case 1:e.type='vertex';break;case 2:e.type='fragment';break}return e}):null,renaming:b},null,2)+'\n';case 1:if(p.a){for(var f='',N=0,y=p.a,Q=y.length;N<Q;N=N+1|0){var h=y[N];f+='export const GLSLX_SOURCE_'+h.a.replace(new RegExp('([a-z0-9])([A-Z])',
3
+ 'g'),'$1_$2').toUpperCase()+' = '+JSON.stringify(h.b)+'\n'}if(p.b&&Array.from(p.b.keys()).length){f+='\n';for(var S=0,ca=Array.from(p.b.keys()),ba=ca.length;S<ba;S=S+1|0){var m=ca[S];f+='export const GLSLX_NAME_'+m.replace(new RegExp('([a-z0-9])([A-Z])','g'),'$1_$2').toUpperCase()+' = '+JSON.stringify(p.b.get(m))+'\n'}}return f}break;case 2:if(p.a){var l='';l+='#ifndef GLSLX_STRINGS_H\n',l+='#define GLSLX_STRINGS_H\n',l+='\n';for(var V=0,da=p.a,ga=da.length;V<ga;V=V+1|0){var g=da[V];l+='static const char *GLSLX_SOURCE_'+g.a.replace(new RegExp('([a-z0-9])([A-Z])','g'),'$1_$2').toUpperCase()+' = '+JSON.stringify(g.b)+';\n'}if(l+='\n',p.b){for(var ja=0,ua=Array.from(p.b.keys()),Na=ua.length;ja<Na;ja=ja+1|0){var i=ua[ja];l+='static const char *GLSLX_NAME_'+i.replace(new RegExp('([a-z0-9])([A-Z])','g'),'$1_$2').toUpperCase()+' = '+JSON.stringify(p.b.get(i))+';\n'}l+='\n'}return l+='#endif\n',l}break;case 3:if(p.a){for(var n='',na=0,ka=p.a,qb=ka.length;na<qb;na=na+1|0){var k=ka[na];n+='const GLSLX_SOURCE_'+k.a.replace(new RegExp('([a-z0-9])([A-Z])',
4
+ 'g'),'$1_$2').toUpperCase()+' = '+JSON.stringify(k.b)+'\n'}if(p.b&&Array.from(p.b.keys()).length){n+='\n';for(var qa=0,$a=Array.from(p.b.keys()),La=$a.length;qa<La;qa=qa+1|0){var q=$a[qa];n+='const GLSLX_NAME_'+q.replace(new RegExp('([a-z0-9])([A-Z])','g'),'$1_$2').toUpperCase()+' = '+JSON.stringify(p.b.get(q))+'\n'}}return n}break;case 4:if(p.a){for(var v='',Oa=0,jb=p.a,Ya=jb.length;Oa<Ya;Oa=Oa+1|0){var u=jb[Oa];v+='pub static GLSLX_SOURCE_'+u.a.replace(new RegExp('([a-z0-9])([A-Z])','g'),'$1_$2').toUpperCase()+': &str = '+JSON.stringify(u.b)+';\n'}if(p.b&&Array.from(p.b.keys()).length){v+='\n';for(var za=0,Za=Array.from(p.b.keys()),Fa=Za.length;za<Fa;za=za+1|0){var C=Za[za];v+='pub static GLSLX_NAME_'+C.replace(new RegExp('([a-z0-9])([A-Z])','g'),'$1_$2').toUpperCase()+': &str = '+JSON.stringify(p.b.get(C))+';\n'}}return v}break}return null}function ie(a,b){for(var c=null,h=0,m=b.length;h<m;h=h+1|0){var d=b[h];if(d.c.b==1){c=d;break}}var e=null;if(c){e=new Vi('<api>',"\n#version 300 es\nimport {\n in highp int gl_VertexID;\n in highp int gl_InstanceID;\n out highp vec4 gl_Position;\n out highp float gl_PointSize;\n\n in highp vec4 gl_FragCoord;\n in bool gl_FrontFacing;\n out highp float gl_FragDepth;\n in mediump vec2 gl_PointCoord;\n\n const mediump int gl_MaxVertexAttribs;\n const mediump int gl_MaxVertexUniformVectors;\n const mediump int gl_MaxVertexOutputVectors;\n const mediump int gl_MaxFragmentInputVectors;\n const mediump int gl_MaxVertexTextureImageUnits;\n const mediump int gl_MaxCombinedTextureImageUnits;\n const mediump int gl_MaxTextureImageUnits;\n const mediump int gl_MaxFragmentUniformVectors;\n const mediump int gl_MaxDrawBuffers;\n const mediump int gl_MinProgramTexelOffset;\n const mediump int gl_MaxProgramTexelOffset;\n\n struct gl_DepthRangeParameters {\n highp float near; // n\n highp float far; // f\n highp float diff; // f - n\n };\n uniform gl_DepthRangeParameters gl_DepthRange;\n\n ////////////////////////////////////////////////////////////////////////////////\n // Angle and Trigonometry Functions\n\n // Converts `degrees` to radians, i.e. `π / 180 * degrees`\n float radians(float degrees);\n // Converts `degrees` to radians, i.e. `π / 180 * degrees`\n vec2 radians(vec2 degrees);\n // Converts `degrees` to radians, i.e. `π / 180 * degrees`\n vec3 radians(vec3 degrees);\n // Converts `degrees` to radians, i.e. `π / 180 * degrees`\n vec4 radians(vec4 degrees);\n\n // Converts `radians` to degrees, i.e. `180 / π * radians`\n float degrees(float radians);\n // Converts `radians` to degrees, i.e. `180 / π * radians`\n vec2 degrees(vec2 radians);\n // Converts `radians` to degrees, i.e. `180 / π * radians`\n vec3 degrees(vec3 radians);\n // Converts `radians` to degrees, i.e. `180 / π * radians`\n vec4 degrees(vec4 radians);\n\n // The standard trigonometric sine function.\n float sin(float angle);\n // The standard trigonometric sine function.\n vec2 sin(vec2 angle);\n // The standard trigonometric sine function.\n vec3 sin(vec3 angle);\n // The standard trigonometric sine function.\n vec4 sin(vec4 angle);\n\n // The standard trigonometric cosine function.\n float cos(float angle);\n // The standard trigonometric cosine function.\n vec2 cos(vec2 angle);\n // The standard trigonometric cosine function.\n vec3 cos(vec3 angle);\n // The standard trigonometric cosine function.\n vec4 cos(vec4 angle);\n\n // The standard trigonometric tangent.\n float tan(float angle);\n // The standard trigonometric tangent.\n vec2 tan(vec2 angle);\n // The standard trigonometric tangent.\n vec3 tan(vec3 angle);\n // The standard trigonometric tangent.\n vec4 tan(vec4 angle);\n\n // Arc sine. Returns an angle whose sine is `x`. The range of values returned by this function is `[-π/2, π/2]`. Results are undefined if `∣x∣>1`.\n float asin(float x);\n // Arc sine. Returns an angle whose sine is `x`. The range of values returned by this function is `[-π/2, π/2]`. Results are undefined if `∣x∣>1`.\n vec2 asin(vec2 x);\n // Arc sine. Returns an angle whose sine is `x`. The range of values returned by this function is `[-π/2, π/2]`. Results are undefined if `∣x∣>1`.\n vec3 asin(vec3 x);\n // Arc sine. Returns an angle whose sine is `x`. The range of values returned by this function is `[-π/2, π/2]`. Results are undefined if `∣x∣>1`.\n vec4 asin(vec4 x);\n\n // Arc cosine. Returns an angle whose cosine is `x`. The range of values returned by this function is `[0, π]`. Results are undefined if `∣x∣>1`.\n float acos(float x);\n // Arc cosine. Returns an angle whose cosine is `x`. The range of values returned by this function is `[0, π]`. Results are undefined if `∣x∣>1`.\n vec2 acos(vec2 x);\n // Arc cosine. Returns an angle whose cosine is `x`. The range of values returned by this function is `[0, π]`. Results are undefined if `∣x∣>1`.\n vec3 acos(vec3 x);\n // Arc cosine. Returns an angle whose cosine is `x`. The range of values returned by this function is `[0, π]`. Results are undefined if `∣x∣>1`.\n vec4 acos(vec4 x);\n\n // Arc tangent. Returns an angle whose tangent is `y/x`. The signs of `x` and `y` are used to determine what quadrant the\n // angle is in. The range of values returned by this function is `[−π,π]`. Results are undefined if `x` and `y` are both 0.\n float atan(float y, float x);\n // Arc tangent. Returns an angle whose tangent is `y/x`. The signs of `x` and `y` are used to determine what quadrant the\n // angle is in. The range of values returned by this function is `[−π,π]`. Results are undefined if `x` and `y` are both 0.\n vec2 atan(vec2 y, vec2 x);\n // Arc tangent. Returns an angle whose tangent is `y/x`. The signs of `x` and `y` are used to determine what quadrant the\n // angle is in. The range of values returned by this function is `[−π,π]`. Results are undefined if `x` and `y` are both 0.\n vec3 atan(vec3 y, vec3 x);\n // Arc tangent. Returns an angle whose tangent is `y/x`. The signs of `x` and `y` are used to determine what quadrant the\n // angle is in. The range of values returned by this function is `[−π,π]`. Results are undefined if `x` and `y` are both 0.\n vec4 atan(vec4 y, vec4 x);\n\n // Arc tangent. Returns an angle whose tangent is `y_over_x`. The range of values returned by this function is `[-π/2, π/2]`.\n float atan(float y_over_x);\n // Arc tangent. Returns an angle whose tangent is `y_over_x`. The range of values returned by this function is `[-π/2, π/2]`.\n vec2 atan(vec2 y_over_x);\n // Arc tangent. Returns an angle whose tangent is `y_over_x`. The range of values returned by this function is `[-π/2, π/2]`.\n vec3 atan(vec3 y_over_x);\n // Arc tangent. Returns an angle whose tangent is `y_over_x`. The range of values returned by this function is `[-π/2, π/2]`.\n vec4 atan(vec4 y_over_x);\n\n // Returns the hyperbolic sine function `(eˣ - e⁻ˣ) / 2`\n float sinh(float x);\n // Returns the hyperbolic sine function `(eˣ - e⁻ˣ) / 2`\n vec2 sinh(vec2 x);\n // Returns the hyperbolic sine function `(eˣ - e⁻ˣ) / 2`\n vec3 sinh(vec3 x);\n // Returns the hyperbolic sine function `(eˣ - e⁻ˣ) / 2`\n vec4 sinh(vec4 x);\n\n // Returns the hyperbolic cosine function `(eˣ + e⁻ˣ) / 2`\n float cosh(float x);\n // Returns the hyperbolic cosine function `(eˣ + e⁻ˣ) / 2`\n vec2 cosh(vec2 x);\n // Returns the hyperbolic cosine function `(eˣ + e⁻ˣ) / 2`\n vec3 cosh(vec3 x);\n // Returns the hyperbolic cosine function `(eˣ + e⁻ˣ) / 2`\n vec4 cosh(vec4 x);\n\n // Returns the hyperbolic tangent function `sinh(x) / cosh(x)`\n float tanh(float x);\n // Returns the hyperbolic tangent function `sinh(x) / cosh(x)`\n vec2 tanh(vec2 x);\n // Returns the hyperbolic tangent function `sinh(x) / cosh(x)`\n vec3 tanh(vec3 x);\n // Returns the hyperbolic tangent function `sinh(x) / cosh(x)`\n vec4 tanh(vec4 x);\n\n // Arc hyperbolic sine; returns the inverse of `sinh`.\n float asinh(float x);\n // Arc hyperbolic sine; returns the inverse of `sinh`.\n vec2 asinh(vec2 x);\n // Arc hyperbolic sine; returns the inverse of `sinh`.\n vec3 asinh(vec3 x);\n // Arc hyperbolic sine; returns the inverse of `sinh`.\n vec4 asinh(vec4 x);\n\n // Arc hyperbolic cosine; returns the non-negative inverse of `cosh`. Results are undefined if `x < 1`.\n float acosh(float x);\n // Arc hyperbolic cosine; returns the non-negative inverse of `cosh`. Results are undefined if `x < 1`.\n vec2 acosh(vec2 x);\n // Arc hyperbolic cosine; returns the non-negative inverse of `cosh`. Results are undefined if `x < 1`.\n vec3 acosh(vec3 x);\n // Arc hyperbolic cosine; returns the non-negative inverse of `cosh`. Results are undefined if `x < 1`.\n vec4 acosh(vec4 x);\n\n // Arc hyperbolic tangent; returns the inverse of `tanh`. Results are undefined if `∣x∣≥1`.\n float atanh(float x);\n // Arc hyperbolic tangent; returns the inverse of `tanh`. Results are undefined if `∣x∣≥1`.\n vec2 atanh(vec2 x);\n // Arc hyperbolic tangent; returns the inverse of `tanh`. Results are undefined if `∣x∣≥1`.\n vec3 atanh(vec3 x);\n // Arc hyperbolic tangent; returns the inverse of `tanh`. Results are undefined if `∣x∣≥1`.\n vec4 atanh(vec4 x);\n\n ////////////////////////////////////////////////////////////////////////////////\n // Exponential Functions\n\n // Returns `x` raised to the `y` power, i.e., `xʸ`. Results are undefined if `x < 0`. Results are undefined if `x = 0` and `y <= 0`.\n float pow(float x, float y);\n // Returns `x` raised to the `y` power, i.e., `xʸ`. Results are undefined if `x < 0`. Results are undefined if `x = 0` and `y <= 0`.\n vec2 pow(vec2 x, vec2 y);\n // Returns `x` raised to the `y` power, i.e., `xʸ`. Results are undefined if `x < 0`. Results are undefined if `x = 0` and `y <= 0`.\n vec3 pow(vec3 x, vec3 y);\n // Returns `x` raised to the `y` power, i.e., `xʸ`. Results are undefined if `x < 0`. Results are undefined if `x = 0` and `y <= 0`.\n vec4 pow(vec4 x, vec4 y);\n\n // Returns the natural exponentiation of `x`, i.e., `eˣ`\n float exp(float x);\n // Returns the natural exponentiation of `x`, i.e., `eˣ`\n vec2 exp(vec2 x);\n // Returns the natural exponentiation of `x`, i.e., `eˣ`\n vec3 exp(vec3 x);\n // Returns the natural exponentiation of `x`, i.e., `eˣ`\n vec4 exp(vec4 x);\n\n // Returns the natural logarithm of `x`, i.e., returns the value `y` which satisfies the equation `x = eʸ`. Results are undefined if `x <= 0`.\n float log(float x);\n // Returns the natural logarithm of `x`, i.e., returns the value `y` which satisfies the equation `x = eʸ`. Results are undefined if `x <= 0`.\n vec2 log(vec2 x);\n // Returns the natural logarithm of `x`, i.e., returns the value `y` which satisfies the equation `x = eʸ`. Results are undefined if `x <= 0`.\n vec3 log(vec3 x);\n // Returns the natural logarithm of `x`, i.e., returns the value `y` which satisfies the equation `x = eʸ`. Results are undefined if `x <= 0`.\n vec4 log(vec4 x);\n\n // Returns 2 raised to the `x` power, i.e., `2ˣ`.\n float exp2(float x);\n // Returns 2 raised to the `x` power, i.e., `2ˣ`.\n vec2 exp2(vec2 x);\n // Returns 2 raised to the `x` power, i.e., `2ˣ`.\n vec3 exp2(vec3 x);\n // Returns 2 raised to the `x` power, i.e., `2ˣ`.\n vec4 exp2(vec4 x);\n\n // Returns the base 2 logarithm of `x`, i.e., returns the value `y` which satisfies the equation `x = 2ʸ`. Results are undefined if `x <= 0`.\n float log2(float x);\n // Returns the base 2 logarithm of `x`, i.e., returns the value `y` which satisfies the equation `x = 2ʸ`. Results are undefined if `x <= 0`.\n vec2 log2(vec2 x);\n // Returns the base 2 logarithm of `x`, i.e., returns the value `y` which satisfies the equation `x = 2ʸ`. Results are undefined if `x <= 0`.\n vec3 log2(vec3 x);\n // Returns the base 2 logarithm of `x`, i.e., returns the value `y` which satisfies the equation `x = 2ʸ`. Results are undefined if `x <= 0`.\n vec4 log2(vec4 x);\n\n // Returns `√x`. Results are undefined if `x < 0`.\n float sqrt(float x);\n // Returns `√x`. Results are undefined if `x < 0`.\n vec2 sqrt(vec2 x);\n // Returns `√x`. Results are undefined if `x < 0`.\n vec3 sqrt(vec3 x);\n // Returns `√x`. Results are undefined if `x < 0`.\n vec4 sqrt(vec4 x);\n\n // Returns `1 / √x`. Results are undefined if `x <= 0`.\n float inversesqrt(float x);\n // Returns `1 / √x`. Results are undefined if `x <= 0`.\n vec2 inversesqrt(vec2 x);\n // Returns `1 / √x`. Results are undefined if `x <= 0`.\n vec3 inversesqrt(vec3 x);\n // Returns `1 / √x`. Results are undefined if `x <= 0`.\n vec4 inversesqrt(vec4 x);\n\n ////////////////////////////////////////////////////////////////////////////////\n // Common Functions\n\n // Returns `x` if `x >= 0`, otherwise it returns `-x`.\n float abs(float x);\n // Returns `x` if `x >= 0`, otherwise it returns `-x`.\n vec2 abs(vec2 x);\n // Returns `x` if `x >= 0`, otherwise it returns `-x`.\n vec3 abs(vec3 x);\n // Returns `x` if `x >= 0`, otherwise it returns `-x`.\n vec4 abs(vec4 x);\n\n // Returns `x` if `x >= 0`, otherwise it returns `-x`.\n int abs(int x);\n // Returns `x` if `x >= 0`, otherwise it returns `-x`.\n ivec2 abs(ivec2 x);\n // Returns `x` if `x >= 0`, otherwise it returns `-x`.\n ivec3 abs(ivec3 x);\n // Returns `x` if `x >= 0`, otherwise it returns `-x`.\n ivec4 abs(ivec4 x);\n\n // Returns `1.0` if `x > 0`, `0.0` if `x = 0`, or `-1.0` if `x < 0`.\n float sign(float x);\n // Returns `1.0` if `x > 0`, `0.0` if `x = 0`, or `-1.0` if `x < 0`.\n vec2 sign(vec2 x);\n // Returns `1.0` if `x > 0`, `0.0` if `x = 0`, or `-1.0` if `x < 0`.\n vec3 sign(vec3 x);\n // Returns `1.0` if `x > 0`, `0.0` if `x = 0`, or `-1.0` if `x < 0`.\n vec4 sign(vec4 x);\n\n // Returns `1` if `x > 0`, `0` if `x = 0`, or `-1` if `x < 0`.\n int sign(int x);\n // Returns `1` if `x > 0`, `0` if `x = 0`, or `-1` if `x < 0`.\n ivec2 sign(ivec2 x);\n // Returns `1` if `x > 0`, `0` if `x = 0`, or `-1` if `x < 0`.\n ivec3 sign(ivec3 x);\n // Returns `1` if `x > 0`, `0` if `x = 0`, or `-1` if `x < 0`.\n ivec4 sign(ivec4 x);\n\n // Returns a value equal to the nearest integer that is less than or equal to `x`\n float floor(float x);\n // Returns a value equal to the nearest integer that is less than or equal to `x`\n vec2 floor(vec2 x);\n // Returns a value equal to the nearest integer that is less than or equal to `x`\n vec3 floor(vec3 x);\n // Returns a value equal to the nearest integer that is less than or equal to `x`\n vec4 floor(vec4 x);\n\n // Returns a value equal to the nearest integer to `x` whose absolute value is not larger than the absolute value of `x`.\n float trunc(float x);\n // Returns a value equal to the nearest integer to `x` whose absolute value is not larger than the absolute value of `x`.\n vec2 trunc(vec2 x);\n // Returns a value equal to the nearest integer to `x` whose absolute value is not larger than the absolute value of `x`.\n vec3 trunc(vec3 x);\n // Returns a value equal to the nearest integer to `x` whose absolute value is not larger than the absolute value of `x`.\n vec4 trunc(vec4 x);\n\n // Returns a value equal to the nearest integer to `x`. The fraction `0.5` will round in a direction chosen by the implementation.\n float round(float x);\n // Returns a value equal to the nearest integer to `x`. The fraction `0.5` will round in a direction chosen by the implementation.\n vec2 round(vec2 x);\n // Returns a value equal to the nearest integer to `x`. The fraction `0.5` will round in a direction chosen by the implementation.\n vec3 round(vec3 x);\n // Returns a value equal to the nearest integer to `x`. The fraction `0.5` will round in a direction chosen by the implementation.\n vec4 round(vec4 x);\n\n // Returns a value equal to the nearest integer to `x`. A fractional part of `0.5` will round toward the nearest even integer.\n float roundEven(float x);\n // Returns a value equal to the nearest integer to `x`. A fractional part of `0.5` will round toward the nearest even integer.\n vec2 roundEven(vec2 x);\n // Returns a value equal to the nearest integer to `x`. A fractional part of `0.5` will round toward the nearest even integer.\n vec3 roundEven(vec3 x);\n // Returns a value equal to the nearest integer to `x`. A fractional part of `0.5` will round toward the nearest even integer.\n vec4 roundEven(vec4 x);\n\n // Returns a value equal to the nearest integer that is greater than or equal to `x`\n float ceil(float x);\n // Returns a value equal to the nearest integer that is greater than or equal to `x`\n vec2 ceil(vec2 x);\n // Returns a value equal to the nearest integer that is greater than or equal to `x`\n vec3 ceil(vec3 x);\n // Returns a value equal to the nearest integer that is greater than or equal to `x`\n vec4 ceil(vec4 x);\n\n // Returns `x - floor(x)`\n float fract(float x);\n // Returns `x - floor(x)`\n vec2 fract(vec2 x);\n // Returns `x - floor(x)`\n vec3 fract(vec3 x);\n // Returns `x - floor(x)`\n vec4 fract(vec4 x);\n\n // Modulus. Returns `x - y * floor(x/y)`\n float mod(float x, float y);\n // Modulus. Returns `x - y * floor(x/y)`\n vec2 mod(vec2 x, float y);\n // Modulus. Returns `x - y * floor(x/y)`\n vec3 mod(vec3 x, float y);\n // Modulus. Returns `x - y * floor(x/y)`\n vec4 mod(vec4 x, float y);\n\n // Modulus. Returns `x - y * floor(x/y)`\n vec2 mod(vec2 x, vec2 y);\n // Modulus. Returns `x - y * floor(x/y)`\n vec3 mod(vec3 x, vec3 y);\n // Modulus. Returns `x - y * floor(x/y)`\n vec4 mod(vec4 x, vec4 y);\n\n // Returns the fractional part of `x` and sets `i` to the integer part (as a whole number floating point value).\n // Both the return value and the output parameter will have the same sign as `x`.\n // If `x` has the value `+/- INF`, the return value should be `NaN` and must be either `NaN` or `0.0`.\n float modf(float x, out float i);\n // Returns the fractional part of `x` and sets `i` to the integer part (as a whole number floating point value).\n // Both the return value and the output parameter will have the same sign as `x`.\n // If `x` has the value `+/- INF`, the return value should be `NaN` and must be either `NaN` or `0.0`.\n vec2 modf(vec2 x, out vec2 i);\n // Returns the fractional part of `x` and sets `i` to the integer part (as a whole number floating point value).\n // Both the return value and the output parameter will have the same sign as `x`.\n // If `x` has the value `+/- INF`, the return value should be `NaN` and must be either `NaN` or `0.0`.\n vec3 modf(vec3 x, out vec3 i);\n // Returns the fractional part of `x` and sets `i` to the integer part (as a whole number floating point value).\n // Both the return value and the output parameter will have the same sign as `x`.\n // If `x` has the value `+/- INF`, the return value should be `NaN` and must be either `NaN` or `0.0`.\n vec4 modf(vec4 x, out vec4 i);\n\n // Returns `y` if `y < x`, otherwise it returns `x`.\n float min(float x, float y);\n // Returns `y` if `y < x`, otherwise it returns `x`.\n vec2 min(vec2 x, float y);\n // Returns `y` if `y < x`, otherwise it returns `x`.\n vec2 min(vec2 x, vec2 y);\n // Returns `y` if `y < x`, otherwise it returns `x`.\n vec3 min(vec3 x, float y);\n // Returns `y` if `y < x`, otherwise it returns `x`.\n vec3 min(vec3 x, vec3 y);\n // Returns `y` if `y < x`, otherwise it returns `x`.\n vec4 min(vec4 x, float y);\n // Returns `y` if `y < x`, otherwise it returns `x`.\n vec4 min(vec4 x, vec4 y);\n\n // Returns `y` if `y < x`, otherwise it returns `x`.\n int min(int x, int y);\n // Returns `y` if `y < x`, otherwise it returns `x`.\n ivec2 min(ivec2 x, int y);\n // Returns `y` if `y < x`, otherwise it returns `x`.\n ivec2 min(ivec2 x, ivec2 y);\n // Returns `y` if `y < x`, otherwise it returns `x`.\n ivec3 min(ivec3 x, int y);\n // Returns `y` if `y < x`, otherwise it returns `x`.\n ivec3 min(ivec3 x, ivec3 y);\n // Returns `y` if `y < x`, otherwise it returns `x`.\n ivec4 min(ivec4 x, int y);\n // Returns `y` if `y < x`, otherwise it returns `x`.\n ivec4 min(ivec4 x, ivec4 y);\n\n // Returns `y` if `y < x`, otherwise it returns `x`.\n uint min(uint x, uint y);\n // Returns `y` if `y < x`, otherwise it returns `x`.\n uvec2 min(uvec2 x, uint y);\n // Returns `y` if `y < x`, otherwise it returns `x`.\n uvec2 min(uvec2 x, uvec2 y);\n // Returns `y` if `y < x`, otherwise it returns `x`.\n uvec3 min(uvec3 x, uint y);\n // Returns `y` if `y < x`, otherwise it returns `x`.\n uvec3 min(uvec3 x, uvec3 y);\n // Returns `y` if `y < x`, otherwise it returns `x`.\n uvec4 min(uvec4 x, uint y);\n // Returns `y` if `y < x`, otherwise it returns `x`.\n uvec4 min(uvec4 x, uvec4 y);\n\n // Returns `y` if `x < y`, otherwise it returns `x`.\n float max(float x, float y);\n // Returns `y` if `x < y`, otherwise it returns `x`.\n vec2 max(vec2 x, float y);\n // Returns `y` if `x < y`, otherwise it returns `x`.\n vec2 max(vec2 x, vec2 y);\n // Returns `y` if `x < y`, otherwise it returns `x`.\n vec3 max(vec3 x, float y);\n // Returns `y` if `x < y`, otherwise it returns `x`.\n vec3 max(vec3 x, vec3 y);\n // Returns `y` if `x < y`, otherwise it returns `x`.\n vec4 max(vec4 x, float y);\n // Returns `y` if `x < y`, otherwise it returns `x`.\n vec4 max(vec4 x, vec4 y);\n\n // Returns `y` if `x < y`, otherwise it returns `x`.\n int max(int x, int y);\n // Returns `y` if `x < y`, otherwise it returns `x`.\n ivec2 max(ivec2 x, int y);\n // Returns `y` if `x < y`, otherwise it returns `x`.\n ivec2 max(ivec2 x, ivec2 y);\n // Returns `y` if `x < y`, otherwise it returns `x`.\n ivec3 max(ivec3 x, int y);\n // Returns `y` if `x < y`, otherwise it returns `x`.\n ivec3 max(ivec3 x, ivec3 y);\n // Returns `y` if `x < y`, otherwise it returns `x`.\n ivec4 max(ivec4 x, int y);\n // Returns `y` if `x < y`, otherwise it returns `x`.\n ivec4 max(ivec4 x, ivec4 y);\n\n // Returns `y` if `x < y`, otherwise it returns `x`.\n uint max(uint x, uint y);\n // Returns `y` if `x < y`, otherwise it returns `x`.\n uvec2 max(uvec2 x, uint y);\n // Returns `y` if `x < y`, otherwise it returns `x`.\n uvec2 max(uvec2 x, uvec2 y);\n // Returns `y` if `x < y`, otherwise it returns `x`.\n uvec3 max(uvec3 x, uint y);\n // Returns `y` if `x < y`, otherwise it returns `x`.\n uvec3 max(uvec3 x, uvec3 y);\n // Returns `y` if `x < y`, otherwise it returns `x`.\n uvec4 max(uvec4 x, uint y);\n // Returns `y` if `x < y`, otherwise it returns `x`.\n uvec4 max(uvec4 x, uvec4 y);\n\n // Returns `min(max(x, minVal), maxVal)`. Results are undefined if `minVal > maxVal`.\n float clamp(float x, float minVal, float maxVal);\n // Returns `min(max(x, minVal), maxVal)`. Results are undefined if `minVal > maxVal`.\n vec2 clamp(vec2 x, float minVal, float maxVal);\n // Returns `min(max(x, minVal), maxVal)`. Results are undefined if `minVal > maxVal`.\n vec2 clamp(vec2 x, vec2 minVal, vec2 maxVal);\n // Returns `min(max(x, minVal), maxVal)`. Results are undefined if `minVal > maxVal`.\n vec3 clamp(vec3 x, float minVal, float maxVal);\n // Returns `min(max(x, minVal), maxVal)`. Results are undefined if `minVal > maxVal`.\n vec3 clamp(vec3 x, vec3 minVal, vec3 maxVal);\n // Returns `min(max(x, minVal), maxVal)`. Results are undefined if `minVal > maxVal`.\n vec4 clamp(vec4 x, float minVal, float maxVal);\n // Returns `min(max(x, minVal), maxVal)`. Results are undefined if `minVal > maxVal`.\n vec4 clamp(vec4 x, vec4 minVal, vec4 maxVal);\n\n // Returns `min(max(x, minVal), maxVal)`. Results are undefined if `minVal > maxVal`.\n int clamp(int x, int minVal, int maxVal);\n // Returns `min(max(x, minVal), maxVal)`. Results are undefined if `minVal > maxVal`.\n ivec2 clamp(ivec2 x, int minVal, int maxVal);\n // Returns `min(max(x, minVal), maxVal)`. Results are undefined if `minVal > maxVal`.\n ivec2 clamp(ivec2 x, ivec2 minVal, ivec2 maxVal);\n // Returns `min(max(x, minVal), maxVal)`. Results are undefined if `minVal > maxVal`.\n ivec3 clamp(ivec3 x, int minVal, int maxVal);\n // Returns `min(max(x, minVal), maxVal)`. Results are undefined if `minVal > maxVal`.\n ivec3 clamp(ivec3 x, ivec3 minVal, ivec3 maxVal);\n // Returns `min(max(x, minVal), maxVal)`. Results are undefined if `minVal > maxVal`.\n ivec4 clamp(ivec4 x, int minVal, int maxVal);\n // Returns `min(max(x, minVal), maxVal)`. Results are undefined if `minVal > maxVal`.\n ivec4 clamp(ivec4 x, ivec4 minVal, ivec4 maxVal);\n\n // Returns `min(max(x, minVal), maxVal)`. Results are undefined if `minVal > maxVal`.\n uint clamp(uint x, uint minVal, uint maxVal);\n // Returns `min(max(x, minVal), maxVal)`. Results are undefined if `minVal > maxVal`.\n uvec2 clamp(uvec2 x, uint minVal, uint maxVal);\n // Returns `min(max(x, minVal), maxVal)`. Results are undefined if `minVal > maxVal`.\n uvec2 clamp(uvec2 x, uvec2 minVal, uvec2 maxVal);\n // Returns `min(max(x, minVal), maxVal)`. Results are undefined if `minVal > maxVal`.\n uvec3 clamp(uvec3 x, uint minVal, uint maxVal);\n // Returns `min(max(x, minVal), maxVal)`. Results are undefined if `minVal > maxVal`.\n uvec3 clamp(uvec3 x, uvec3 minVal, uvec3 maxVal);\n // Returns `min(max(x, minVal), maxVal)`. Results are undefined if `minVal > maxVal`.\n uvec4 clamp(uvec4 x, uint minVal, uint maxVal);\n // Returns `min(max(x, minVal), maxVal)`. Results are undefined if `minVal > maxVal`.\n uvec4 clamp(uvec4 x, uvec4 minVal, uvec4 maxVal);\n\n // Returns the linear blend of `x` and `y`, i.e. `x * (1-a) + y * a`\n float mix(float x, float y, float a);\n // Returns the linear blend of `x` and `y`, i.e. `x * (1-a) + y * a`\n vec2 mix(vec2 x, vec2 y, float a);\n // Returns the linear blend of `x` and `y`, i.e. `x * (1-a) + y * a`\n vec2 mix(vec2 x, vec2 y, vec2 a);\n // Returns the linear blend of `x` and `y`, i.e. `x * (1-a) + y * a`\n vec3 mix(vec3 x, vec3 y, float a);\n // Returns the linear blend of `x` and `y`, i.e. `x * (1-a) + y * a`\n vec3 mix(vec3 x, vec3 y, vec3 a);\n // Returns the linear blend of `x` and `y`, i.e. `x * (1-a) + y * a`\n vec4 mix(vec4 x, vec4 y, float a);\n // Returns the linear blend of `x` and `y`, i.e. `x * (1-a) + y * a`\n vec4 mix(vec4 x, vec4 y, vec4 a);\n\n // Selects which vector each returned component comes from. For a component of `a` that is\n // false, the corresponding component of `x` is returned. For a component of `a` that is true,\n // the corresponding component of `y` is returned.\n float mix(float x, float y, bool a);\n // Selects which vector each returned component comes from. For a component of `a` that is\n // false, the corresponding component of `x` is returned. For a component of `a` that is true,\n // the corresponding component of `y` is returned.\n vec2 mix(vec2 x, vec2 y, bvec2 a);\n // Selects which vector each returned component comes from. For a component of `a` that is\n // false, the corresponding component of `x` is returned. For a component of `a` that is true,\n // the corresponding component of `y` is returned.\n vec3 mix(vec3 x, vec3 y, bvec3 a);\n // Selects which vector each returned component comes from. For a component of `a` that is\n // false, the corresponding component of `x` is returned. For a component of `a` that is true,\n // the corresponding component of `y` is returned.\n vec4 mix(vec4 x, vec4 y, bvec4 a);\n\n // Returns `0.0` if `x < edge`, otherwise it returns `1.0`\n float step(float edge, float x);\n // Returns `0.0` if `x < edge`, otherwise it returns `1.0`\n vec2 step(float edge, vec2 x);\n // Returns `0.0` if `x < edge`, otherwise it returns `1.0`\n vec2 step(vec2 edge, vec2 x);\n // Returns `0.0` if `x < edge`, otherwise it returns `1.0`\n vec3 step(float edge, vec3 x);\n // Returns `0.0` if `x < edge`, otherwise it returns `1.0`\n vec3 step(vec3 edge, vec3 x);\n // Returns `0.0` if `x < edge`, otherwise it returns `1.0`\n vec4 step(float edge, vec4 x);\n // Returns `0.0` if `x < edge`, otherwise it returns `1.0`\n vec4 step(vec4 edge, vec4 x);\n\n // Returns `0.0` if `x <= edge0` and `1.0` if `x >= edge1` and performs smooth Hermite interpolation between 0 and 1 when `edge0 < x < edge1`.\n // This is useful in cases where you would want a threshold function with a smooth transition. This is equivalent to:\n //\n // ```glslx\n // float t = clamp((x - edge0) / (edge1 - edge0), 0.0, 1.0);\n // return t * t * (3.0 - 2.0 * t);\n // ```\n //\n // Results are undefined if `edge0 >= edge1`.\n float smoothstep(float edge0, float edge1, float x);\n // Returns `0.0` if `x <= edge0` and `1.0` if `x >= edge1` and performs smooth Hermite interpolation between 0 and 1 when `edge0 < x < edge1`.\n // This is useful in cases where you would want a threshold function with a smooth transition. This is equivalent to:\n //\n // ```glslx\n // vec2 t = clamp((x - edge0) / (edge1 - edge0), 0.0, 1.0);\n // return t * t * (3.0 - 2.0 * t);\n // ```\n //\n // Results are undefined if `edge0 >= edge1`.\n vec2 smoothstep(float edge0, float edge1, vec2 x);\n // Returns `0.0` if `x <= edge0` and `1.0` if `x >= edge1` and performs smooth Hermite interpolation between 0 and 1 when `edge0 < x < edge1`.\n // This is useful in cases where you would want a threshold function with a smooth transition. This is equivalent to:\n //\n // ```glslx\n // vec2 t = clamp((x - edge0) / (edge1 - edge0), 0.0, 1.0);\n // return t * t * (3.0 - 2.0 * t);\n // ```\n //\n // Results are undefined if `edge0 >= edge1`.\n vec2 smoothstep(vec2 edge0, vec2 edge1, vec2 x);\n // Returns `0.0` if `x <= edge0` and `1.0` if `x >= edge1` and performs smooth Hermite interpolation between 0 and 1 when `edge0 < x < edge1`.\n // This is useful in cases where you would want a threshold function with a smooth transition. This is equivalent to:\n //\n // ```glslx\n // vec3 t = clamp((x - edge0) / (edge1 - edge0), 0.0, 1.0);\n // return t * t * (3.0 - 2.0 * t);\n // ```\n //\n // Results are undefined if `edge0 >= edge1`.\n vec3 smoothstep(float edge0, float edge1, vec3 x);\n // Returns `0.0` if `x <= edge0` and `1.0` if `x >= edge1` and performs smooth Hermite interpolation between 0 and 1 when `edge0 < x < edge1`.\n // This is useful in cases where you would want a threshold function with a smooth transition. This is equivalent to:\n //\n // ```glslx\n // vec3 t = clamp((x - edge0) / (edge1 - edge0), 0.0, 1.0);\n // return t * t * (3.0 - 2.0 * t);\n // ```\n //\n // Results are undefined if `edge0 >= edge1`.\n vec3 smoothstep(vec3 edge0, vec3 edge1, vec3 x);\n // Returns `0.0` if `x <= edge0` and `1.0` if `x >= edge1` and performs smooth Hermite interpolation between 0 and 1 when `edge0 < x < edge1`.\n // This is useful in cases where you would want a threshold function with a smooth transition. This is equivalent to:\n //\n // ```glslx\n // vec4 t = clamp((x - edge0) / (edge1 - edge0), 0.0, 1.0);\n // return t * t * (3.0 - 2.0 * t);\n // ```\n //\n // Results are undefined if `edge0 >= edge1`.\n vec4 smoothstep(float edge0, float edge1, vec4 x);\n // Returns `0.0` if `x <= edge0` and `1.0` if `x >= edge1` and performs smooth Hermite interpolation between 0 and 1 when `edge0 < x < edge1`.\n // This is useful in cases where you would want a threshold function with a smooth transition. This is equivalent to:\n //\n // ```glslx\n // vec4 t = clamp((x - edge0) / (edge1 - edge0), 0.0, 1.0);\n // return t * t * (3.0 - 2.0 * t);\n // ```\n //\n // Results are undefined if `edge0 >= edge1`.\n vec4 smoothstep(vec4 edge0, vec4 edge1, vec4 x);\n\n // Returns `true` if `x` holds a NaN. Returns `false` otherwise.\n bool isnan(float x);\n // Returns `true` if `x` holds a NaN. Returns `false` otherwise.\n bvec2 isnan(vec2 x);\n // Returns `true` if `x` holds a NaN. Returns `false` otherwise.\n bvec3 isnan(vec3 x);\n // Returns `true` if `x` holds a NaN. Returns `false` otherwise.\n bvec4 isnan(vec4 x);\n\n // Returns `true` if `x` holds a positive infinity or negative infinity. Returns `false` otherwise.\n bool isinf(float x);\n // Returns `true` if `x` holds a positive infinity or negative infinity. Returns `false` otherwise.\n bvec2 isinf(vec2 x);\n // Returns `true` if `x` holds a positive infinity or negative infinity. Returns `false` otherwise.\n bvec3 isinf(vec3 x);\n // Returns `true` if `x` holds a positive infinity or negative infinity. Returns `false` otherwise.\n bvec4 isinf(vec4 x);\n\n // Returns a signed or unsigned `highp` integer value representing the encoding of a floating-point value.\n // For `highp` floating point, the value's bit level representation is preserved.\n // For `mediump` and `lowp`, the value is first converted to `highp` floating point and the encoding of that value is returned.\n int floatBitsToInt(float value);\n // Returns a signed or unsigned `highp` integer value representing the encoding of a floating-point value.\n // For `highp` floating point, the value's bit level representation is preserved.\n // For `mediump` and `lowp`, the value is first converted to `highp` floating point and the encoding of that value is returned.\n ivec2 floatBitsToInt(vec2 value);\n // Returns a signed or unsigned `highp` integer value representing the encoding of a floating-point value.\n // For `highp` floating point, the value's bit level representation is preserved.\n // For `mediump` and `lowp`, the value is first converted to `highp` floating point and the encoding of that value is returned.\n ivec3 floatBitsToInt(vec3 value);\n // Returns a signed or unsigned `highp` integer value representing the encoding of a floating-point value.\n // For `highp` floating point, the value's bit level representation is preserved.\n // For `mediump` and `lowp`, the value is first converted to `highp` floating point and the encoding of that value is returned.\n ivec4 floatBitsToInt(vec4 value);\n\n // Returns a signed or unsigned `highp` integer value representing the encoding of a floating-point value.\n // For `highp` floating point, the value's bit level representation is preserved.\n // For `mediump` and `lowp`, the value is first converted to `highp` floating point and the encoding of that value is returned.\n uint floatBitsToUint(float value);\n // Returns a signed or unsigned `highp` integer value representing the encoding of a floating-point value.\n // For `highp` floating point, the value's bit level representation is preserved.\n // For `mediump` and `lowp`, the value is first converted to `highp` floating point and the encoding of that value is returned.\n uvec2 floatBitsToUint(vec2 value);\n // Returns a signed or unsigned `highp` integer value representing the encoding of a floating-point value.\n // For `highp` floating point, the value's bit level representation is preserved.\n // For `mediump` and `lowp`, the value is first converted to `highp` floating point and the encoding of that value is returned.\n uvec3 floatBitsToUint(vec3 value);\n // Returns a signed or unsigned `highp` integer value representing the encoding of a floating-point value.\n // For `highp` floating point, the value's bit level representation is preserved.\n // For `mediump` and `lowp`, the value is first converted to `highp` floating point and the encoding of that value is returned.\n uvec4 floatBitsToUint(vec4 value);\n\n // Returns a `highp` floating-point value corresponding to a signed or unsigned integer encoding of a floating-point\n // value. If an `inf` or `NaN` is passed in, it will not signal, and the resulting floating point value is unspecified.\n // Otherwise, the bit-level representation is preserved. For `lowp` and `mediump`, the value is first converted to the\n // corresponding signed or unsigned `highp` integer and then reinterpreted as a `highp` floating point value as before.\n float intBitsToFloat(int value);\n // Returns a `highp` floating-point value corresponding to a signed or unsigned integer encoding of a floating-point\n // value. If an `inf` or `NaN` is passed in, it will not signal, and the resulting floating point value is unspecified.\n // Otherwise, the bit-level representation is preserved. For `lowp` and `mediump`, the value is first converted to the\n // corresponding signed or unsigned `highp` integer and then reinterpreted as a `highp` floating point value as before.\n vec2 intBitsToFloat(ivec2 value);\n // Returns a `highp` floating-point value corresponding to a signed or unsigned integer encoding of a floating-point\n // value. If an `inf` or `NaN` is passed in, it will not signal, and the resulting floating point value is unspecified.\n // Otherwise, the bit-level representation is preserved. For `lowp` and `mediump`, the value is first converted to the\n // corresponding signed or unsigned `highp` integer and then reinterpreted as a `highp` floating point value as before.\n vec3 intBitsToFloat(ivec3 value);\n // Returns a `highp` floating-point value corresponding to a signed or unsigned integer encoding of a floating-point\n // value. If an `inf` or `NaN` is passed in, it will not signal, and the resulting floating point value is unspecified.\n // Otherwise, the bit-level representation is preserved. For `lowp` and `mediump`, the value is first converted to the\n // corresponding signed or unsigned `highp` integer and then reinterpreted as a `highp` floating point value as before.\n vec4 intBitsToFloat(ivec4 value);\n\n // Returns a `highp` floating-point value corresponding to a signed or unsigned integer encoding of a floating-point\n // value. If an `inf` or `NaN` is passed in, it will not signal, and the resulting floating point value is unspecified.\n // Otherwise, the bit-level representation is preserved. For `lowp` and `mediump`, the value is first converted to the\n // corresponding signed or unsigned `highp` integer and then reinterpreted as a `highp` floating point value as before.\n float intBitsToFloat(uint value);\n // Returns a `highp` floating-point value corresponding to a signed or unsigned integer encoding of a floating-point\n // value. If an `inf` or `NaN` is passed in, it will not signal, and the resulting floating point value is unspecified.\n // Otherwise, the bit-level representation is preserved. For `lowp` and `mediump`, the value is first converted to the\n // corresponding signed or unsigned `highp` integer and then reinterpreted as a `highp` floating point value as before.\n vec2 intBitsToFloat(uvec2 value);\n // Returns a `highp` floating-point value corresponding to a signed or unsigned integer encoding of a floating-point\n // value. If an `inf` or `NaN` is passed in, it will not signal, and the resulting floating point value is unspecified.\n // Otherwise, the bit-level representation is preserved. For `lowp` and `mediump`, the value is first converted to the\n // corresponding signed or unsigned `highp` integer and then reinterpreted as a `highp` floating point value as before.\n vec3 intBitsToFloat(uvec3 value);\n // Returns a `highp` floating-point value corresponding to a signed or unsigned integer encoding of a floating-point\n // value. If an `inf` or `NaN` is passed in, it will not signal, and the resulting floating point value is unspecified.\n // Otherwise, the bit-level representation is preserved. For `lowp` and `mediump`, the value is first converted to the\n // corresponding signed or unsigned `highp` integer and then reinterpreted as a `highp` floating point value as before.\n vec4 intBitsToFloat(uvec4 value);\n\n ////////////////////////////////////////////////////////////////////////////////\n // Floating-Point Pack and Unpack Functions\n\n // First, converts each component of the normalized floating-point value `v` into 16-bit integer values. Then,\n // the results are packed into the returned 32-bit unsigned integer. The conversion for component `c` of `v` to\n // fixed point is done as follows:\n //\n // ```glslx\n // packSnorm2x16: round(clamp(c, -1, +1) * 32767.0)\n // ```\n //\n // The first component of the vector will be written to the least significant bits of the output; the last component\n // will be written to the most significant bits.\n highp uint packSnorm2x16(vec2 v);\n // First, unpacks a single 32-bit unsigned integer `p` into a pair of 16-bit signed integers. Then, each component is\n // converted to a normalized floating-point value to generate the returned two-component vector. The conversion for\n // unpacked fixed-point value `f` to floating point is done as follows:\n //\n // ```glslx\n // unpackSnorm2x16: clamp(f / 32767.0, -1, +1)\n //\n // The first component of the returned vector will be extracted from the least significant bits of the input; the\n // last component will be extracted from the most significant bits.\n highp vec2 unpackSnorm2x16(highp uint p);\n\n // First, converts each component of the normalized floating-point value `v` into 16-bit integer values. Then,\n // the results are packed into the returned 32-bit unsigned integer. The conversion for component `c` of `v` to\n // fixed point is done as follows:\n //\n // ```glslx\n // packUnorm2x16: round(clamp(c, 0, +1) * 65535.0)\n // ```\n //\n // The first component of the vector will be written to the least significant bits of the output; the last component\n // will be written to the most significant bits.\n highp uint packUnorm2x16(vec2 v);\n // First, unpacks a single 32-bit unsigned integer `p` into a pair of 16-bit unsigned integers. Then, each component\n // is converted to a normalized floating-point value to generate the returned two-component vector. The conversion for\n // unpacked fixed-point value `f` to floating point is done as follows:\n //\n // ```glslx\n // unpackUnorm2x16: f / 65535.0\n // ```\n //\n // The first component of the returned vector will be extracted from the least significant bits of the input; the\n // last component will be extracted from the most significant bits.\n highp vec2 unpackUnorm2x16(highp uint p);\n\n // Returns an unsigned integer obtained by converting the components of a two-component floating-point vector to\n // the 16-bit floating-point representation found in the OpenGL ES Specification, and then packing these two\n // 16-bit integers into a 32-bit unsigned integer.\n //\n // The first vector component specifies the 16 least-significant bits of the result; the second component\n // specifies the 16 most-significant bits.\n highp uint packHalf2x16(mediump vec2 v);\n // Returns a two-component floating-point vector with components obtained by unpacking a 32-bit unsigned\n // integer into a pair of 16-bit values, interpreting those values as 16-bit floating-point numbers according to the\n // OpenGL ES Specification, and converting them to 32-bit floating-point values.\n //\n // The first component of the vector is obtained from the 16 least-significant bits of `v`; the second component is\n // obtained from the 16 most-significant bits of `v`.\n mediump vec2 unpackHalf2x16(highp uint v);\n\n ////////////////////////////////////////////////////////////////////////////////\n // Geometric Functions\n\n // Returns the length of vector `x`, i.e. `√x²`\n float length(float x);\n // Returns the length of vector `x`, i.e. `√x[0]² + x[1]²`\n float length(vec2 x);\n // Returns the length of vector `x`, i.e. `√x[0]² + x[1]² + x[2]²`\n float length(vec3 x);\n // Returns the length of vector `x`, i.e. `√x[0]² + x[1]² + x[2]² + x[3]²`\n float length(vec4 x);\n\n // Returns the distance between `p0` and `p1`, i.e. `length(p0 - p1)`\n float distance(float p0, float p1);\n // Returns the distance between `p0` and `p1`, i.e. `length(p0 - p1)`\n float distance(vec2 p0, vec2 p1);\n // Returns the distance between `p0` and `p1`, i.e. `length(p0 - p1)`\n float distance(vec3 p0, vec3 p1);\n // Returns the distance between `p0` and `p1`, i.e. `length(p0 - p1)`\n float distance(vec4 p0, vec4 p1);\n\n // Returns the dot product of `x` and `y`, i.e. `x*y`\n float dot(float x, float y);\n // Returns the dot product of `x` and `y`, i.e. `x[0]*y[0] + x[1]*y[1]`\n float dot(vec2 x, vec2 y);\n // Returns the dot product of `x` and `y`, i.e. `x[0]*y[0] + x[1]*y[1] + x[2]*y[2]`\n float dot(vec3 x, vec3 y);\n // Returns the dot product of `x` and `y`, i.e. `x[0]*y[0] + x[1]*y[1] + x[2]*y[2] + x[3]*y[3]`\n float dot(vec4 x, vec4 y);\n\n // Returns the cross product of `x` and `y`, i.e.\n //\n // ```glslx\n // vec3(\n // x[1]*y[2] - y[1]*x[2],\n // x[2]*y[0] - y[2]*x[0],\n // x[0]*y[1] - y[0]*x[1])\n // ```\n vec3 cross(vec3 x, vec3 y);\n\n // Returns a vector in the same direction as `x` but with a length of 1 i.e. `x / length(x)`\n float normalize(float x);\n // Returns a vector in the same direction as `x` but with a length of 1 i.e. `x / length(x)`\n vec2 normalize(vec2 x);\n // Returns a vector in the same direction as `x` but with a length of 1 i.e. `x / length(x)`\n vec3 normalize(vec3 x);\n // Returns a vector in the same direction as `x` but with a length of 1 i.e. `x / length(x)`\n vec4 normalize(vec4 x);\n\n // If `dot(Nref, I) < 0` return `N`, otherwise return `-N`\n float faceforward(float N, float I, float Nref);\n // If `dot(Nref, I) < 0` return `N`, otherwise return `-N`\n vec2 faceforward(vec2 N, vec2 I, vec2 Nref);\n // If `dot(Nref, I) < 0` return `N`, otherwise return `-N`\n vec3 faceforward(vec3 N, vec3 I, vec3 Nref);\n // If `dot(Nref, I) < 0` return `N`, otherwise return `-N`\n vec4 faceforward(vec4 N, vec4 I, vec4 Nref);\n\n // For the incident vector `I` and surface orientation `N`, returns the reflection direction: `I - 2 * dot(N, I) * N`.\n // `N` must already be normalized in order to achieve the desired result.\n float reflect(float I, float N);\n // For the incident vector `I` and surface orientation `N`, returns the reflection direction: `I - 2 * dot(N, I) * N`.\n // `N` must already be normalized in order to achieve the desired result.\n vec2 reflect(vec2 I, vec2 N);\n // For the incident vector `I` and surface orientation `N`, returns the reflection direction: `I - 2 * dot(N, I) * N`.\n // `N` must already be normalized in order to achieve the desired result.\n vec3 reflect(vec3 I, vec3 N);\n // For the incident vector `I` and surface orientation `N`, returns the reflection direction: `I - 2 * dot(N, I) * N`.\n // `N` must already be normalized in order to achieve the desired result.\n vec4 reflect(vec4 I, vec4 N);\n\n // For the incident vector `I` and surface normal `N`, and the ratio of indices of refraction `eta`, return the refraction vector.\n // The result is computed by:\n //\n // ```glslx\n // float k = 1.0 - eta * eta * (1.0 - dot(N, I) * dot(N, I));\n // if (k < 0.0) return float(0.0);\n // else return eta * I - (eta * dot(N, I) + sqrt(k)) * N;\n // ```\n //\n // The input parameters for the incident vector `I` and the surface normal `N`.\n float refract(float I, float N, float eta);\n // For the incident vector `I` and surface normal `N`, and the ratio of indices of refraction `eta`, return the refraction vector.\n // The result is computed by:\n //\n // ```glslx\n // float k = 1.0 - eta * eta * (1.0 - dot(N, I) * dot(N, I));\n // if (k < 0.0) return vec2(0.0);\n // else return eta * I - (eta * dot(N, I) + sqrt(k)) * N;\n // ```\n //\n // The input parameters for the incident vector `I` and the surface normal `N`.\n vec2 refract(vec2 I, vec2 N, float eta);\n // For the incident vector `I` and surface normal `N`, and the ratio of indices of refraction `eta`, return the refraction vector.\n // The result is computed by:\n //\n // ```glslx\n // float k = 1.0 - eta * eta * (1.0 - dot(N, I) * dot(N, I));\n // if (k < 0.0) return vec3(0.0);\n // else return eta * I - (eta * dot(N, I) + sqrt(k)) * N;\n // ```\n //\n // The input parameters for the incident vector `I` and the surface normal `N`.\n vec3 refract(vec3 I, vec3 N, float eta);\n // For the incident vector `I` and surface normal `N`, and the ratio of indices of refraction `eta`, return the refraction vector.\n // The result is computed by:\n //\n // ```glslx\n // float k = 1.0 - eta * eta * (1.0 - dot(N, I) * dot(N, I));\n // if (k < 0.0) return vec4(0.0);\n // else return eta * I - (eta * dot(N, I) + sqrt(k)) * N;\n // ```\n //\n // The input parameters for the incident vector `I` and the surface normal `N`.\n vec4 refract(vec4 I, vec4 N, float eta);\n\n ////////////////////////////////////////////////////////////////////////////////\n // Matrix Functions\n\n // Multiply matrix `x` by matrix `y` component-wise, i.e., `result[i][j]` is the scalar product of `x[i][j]` and `y[i][j]`.\n // Note: to get linear algebraic matrix multiplication, use the multiply operator (`*`).\n mat2 matrixCompMult(mat2 x, mat2 y);\n // Multiply matrix `x` by matrix `y` component-wise, i.e., `result[i][j]` is the scalar product of `x[i][j]` and `y[i][j]`.\n // Note: to get linear algebraic matrix multiplication, use the multiply operator (`*`).\n mat3 matrixCompMult(mat3 x, mat3 y);\n // Multiply matrix `x` by matrix `y` component-wise, i.e., `result[i][j]` is the scalar product of `x[i][j]` and `y[i][j]`.\n // Note: to get linear algebraic matrix multiplication, use the multiply operator (`*`).\n mat4 matrixCompMult(mat4 x, mat4 y);\n\n // Treats the first parameter `c` as a column vector (matrix with one column) and the second parameter `r` as a row\n // vector (matrix with one row) and does a linear algebraic matrix multiply `c * r`, yielding a matrix whose number of\n // rows is the number of components in `c` and whose number of columns is the number of components in `r`.\n mat2 outerProduct(vec2 c, vec2 r);\n // Treats the first parameter `c` as a column vector (matrix with one column) and the second parameter `r` as a row\n // vector (matrix with one row) and does a linear algebraic matrix multiply `c * r`, yielding a matrix whose number of\n // rows is the number of components in `c` and whose number of columns is the number of components in `r`.\n mat3 outerProduct(vec3 c, vec3 r);\n // Treats the first parameter `c` as a column vector (matrix with one column) and the second parameter `r` as a row\n // vector (matrix with one row) and does a linear algebraic matrix multiply `c * r`, yielding a matrix whose number of\n // rows is the number of components in `c` and whose number of columns is the number of components in `r`.\n mat4 outerProduct(vec4 c, vec4 r);\n // Treats the first parameter `c` as a column vector (matrix with one column) and the second parameter `r` as a row\n // vector (matrix with one row) and does a linear algebraic matrix multiply `c * r`, yielding a matrix whose number of\n // rows is the number of components in `c` and whose number of columns is the number of components in `r`.\n mat2x3 outerProduct(vec3 c, vec2 r);\n // Treats the first parameter `c` as a column vector (matrix with one column) and the second parameter `r` as a row\n // vector (matrix with one row) and does a linear algebraic matrix multiply `c * r`, yielding a matrix whose number of\n // rows is the number of components in `c` and whose number of columns is the number of components in `r`.\n mat3x2 outerProduct(vec2 c, vec3 r);\n // Treats the first parameter `c` as a column vector (matrix with one column) and the second parameter `r` as a row\n // vector (matrix with one row) and does a linear algebraic matrix multiply `c * r`, yielding a matrix whose number of\n // rows is the number of components in `c` and whose number of columns is the number of components in `r`.\n mat2x4 outerProduct(vec4 c, vec2 r);\n // Treats the first parameter `c` as a column vector (matrix with one column) and the second parameter `r` as a row\n // vector (matrix with one row) and does a linear algebraic matrix multiply `c * r`, yielding a matrix whose number of\n // rows is the number of components in `c` and whose number of columns is the number of components in `r`.\n mat4x2 outerProduct(vec2 c, vec4 r);\n // Treats the first parameter `c` as a column vector (matrix with one column) and the second parameter `r` as a row\n // vector (matrix with one row) and does a linear algebraic matrix multiply `c * r`, yielding a matrix whose number of\n // rows is the number of components in `c` and whose number of columns is the number of components in `r`.\n mat3x4 outerProduct(vec4 c, vec3 r);\n // Treats the first parameter `c` as a column vector (matrix with one column) and the second parameter `r` as a row\n // vector (matrix with one row) and does a linear algebraic matrix multiply `c * r`, yielding a matrix whose number of\n // rows is the number of components in `c` and whose number of columns is the number of components in `r`.\n mat4x3 outerProduct(vec3 c, vec4 r);\n\n // Returns a matrix that is the transpose of `m`. The input matrix `m` is not modified.\n mat2 transpose(mat2 m);\n // Returns a matrix that is the transpose of `m`. The input matrix `m` is not modified.\n mat3 transpose(mat3 m);\n // Returns a matrix that is the transpose of `m`. The input matrix `m` is not modified.\n mat4 transpose(mat4 m);\n // Returns a matrix that is the transpose of `m`. The input matrix `m` is not modified.\n mat2x3 transpose(mat3x2 m);\n // Returns a matrix that is the transpose of `m`. The input matrix `m` is not modified.\n mat3x2 transpose(mat2x3 m);\n // Returns a matrix that is the transpose of `m`. The input matrix `m` is not modified.\n mat2x4 transpose(mat4x2 m);\n // Returns a matrix that is the transpose of `m`. The input matrix `m` is not modified.\n mat4x2 transpose(mat2x4 m);\n // Returns a matrix that is the transpose of `m`. The input matrix `m` is not modified.\n mat3x4 transpose(mat4x3 m);\n // Returns a matrix that is the transpose of `m`. The input matrix `m` is not modified.\n mat4x3 transpose(mat3x4 m);\n\n // Returns the determinant of `m`.\n float determinant(mat2 m);\n // Returns the determinant of `m`.\n float determinant(mat3 m);\n // Returns the determinant of `m`.\n float determinant(mat4 m);\n\n // Returns a matrix that is the inverse of `m`. The input matrix `m` is not modified. The values in\n // the returned matrix are undefined if `m` is singular or poorly-conditioned (nearly singular).\n mat2 inverse(mat2 m);\n // Returns a matrix that is the inverse of `m`. The input matrix `m` is not modified. The values in\n // the returned matrix are undefined if `m` is singular or poorly-conditioned (nearly singular).\n mat3 inverse(mat3 m);\n // Returns a matrix that is the inverse of `m`. The input matrix `m` is not modified. The values in\n // the returned matrix are undefined if `m` is singular or poorly-conditioned (nearly singular).\n mat4 inverse(mat4 m);\n\n ////////////////////////////////////////////////////////////////////////////////\n // Vector Relational Functions\n\n // Returns the component-wise compare of `x < y`.\n bvec2 lessThan(vec2 x, vec2 y);\n // Returns the component-wise compare of `x < y`.\n bvec2 lessThan(ivec2 x, ivec2 y);\n // Returns the component-wise compare of `x < y`.\n bvec2 lessThan(uvec2 x, uvec2 y);\n // Returns the component-wise compare of `x < y`.\n bvec3 lessThan(vec3 x, vec3 y);\n // Returns the component-wise compare of `x < y`.\n bvec3 lessThan(ivec3 x, ivec3 y);\n // Returns the component-wise compare of `x < y`.\n bvec3 lessThan(uvec3 x, uvec3 y);\n // Returns the component-wise compare of `x < y`.\n bvec4 lessThan(vec4 x, vec4 y);\n // Returns the component-wise compare of `x < y`.\n bvec4 lessThan(ivec4 x, ivec4 y);\n // Returns the component-wise compare of `x < y`.\n bvec4 lessThan(uvec4 x, uvec4 y);\n\n // Returns the component-wise compare of `x <= y`.\n bvec2 lessThanEqual(vec2 x, vec2 y);\n // Returns the component-wise compare of `x <= y`.\n bvec2 lessThanEqual(ivec2 x, ivec2 y);\n // Returns the component-wise compare of `x <= y`.\n bvec2 lessThanEqual(uvec2 x, uvec2 y);\n // Returns the component-wise compare of `x <= y`.\n bvec3 lessThanEqual(vec3 x, vec3 y);\n // Returns the component-wise compare of `x <= y`.\n bvec3 lessThanEqual(ivec3 x, ivec3 y);\n // Returns the component-wise compare of `x <= y`.\n bvec3 lessThanEqual(uvec3 x, uvec3 y);\n // Returns the component-wise compare of `x <= y`.\n bvec4 lessThanEqual(vec4 x, vec4 y);\n // Returns the component-wise compare of `x <= y`.\n bvec4 lessThanEqual(ivec4 x, ivec4 y);\n // Returns the component-wise compare of `x <= y`.\n bvec4 lessThanEqual(uvec4 x, uvec4 y);\n\n // Returns the component-wise compare of `x > y`.\n bvec2 greaterThan(vec2 x, vec2 y);\n // Returns the component-wise compare of `x > y`.\n bvec2 greaterThan(ivec2 x, ivec2 y);\n // Returns the component-wise compare of `x > y`.\n bvec2 greaterThan(uvec2 x, uvec2 y);\n // Returns the component-wise compare of `x > y`.\n bvec3 greaterThan(vec3 x, vec3 y);\n // Returns the component-wise compare of `x > y`.\n bvec3 greaterThan(ivec3 x, ivec3 y);\n // Returns the component-wise compare of `x > y`.\n bvec3 greaterThan(uvec3 x, uvec3 y);\n // Returns the component-wise compare of `x > y`.\n bvec4 greaterThan(vec4 x, vec4 y);\n // Returns the component-wise compare of `x > y`.\n bvec4 greaterThan(ivec4 x, ivec4 y);\n // Returns the component-wise compare of `x > y`.\n bvec4 greaterThan(uvec4 x, uvec4 y);\n\n // Returns the component-wise compare of `x >= y`.\n bvec2 greaterThanEqual(vec2 x, vec2 y);\n // Returns the component-wise compare of `x >= y`.\n bvec2 greaterThanEqual(ivec2 x, ivec2 y);\n // Returns the component-wise compare of `x >= y`.\n bvec2 greaterThanEqual(uvec2 x, uvec2 y);\n // Returns the component-wise compare of `x >= y`.\n bvec3 greaterThanEqual(vec3 x, vec3 y);\n // Returns the component-wise compare of `x >= y`.\n bvec3 greaterThanEqual(ivec3 x, ivec3 y);\n // Returns the component-wise compare of `x >= y`.\n bvec3 greaterThanEqual(uvec3 x, uvec3 y);\n // Returns the component-wise compare of `x >= y`.\n bvec4 greaterThanEqual(vec4 x, vec4 y);\n // Returns the component-wise compare of `x >= y`.\n bvec4 greaterThanEqual(ivec4 x, ivec4 y);\n // Returns the component-wise compare of `x >= y`.\n bvec4 greaterThanEqual(uvec4 x, uvec4 y);\n\n // Returns the component-wise compare of `x == y`.\n bvec2 equal(vec2 x, vec2 y);\n // Returns the component-wise compare of `x == y`.\n bvec2 equal(ivec2 x, ivec2 y);\n // Returns the component-wise compare of `x == y`.\n bvec2 equal(uvec2 x, uvec2 y);\n // Returns the component-wise compare of `x == y`.\n bvec2 equal(bvec2 x, bvec2 y);\n // Returns the component-wise compare of `x == y`.\n bvec3 equal(vec3 x, vec3 y);\n // Returns the component-wise compare of `x == y`.\n bvec3 equal(ivec3 x, ivec3 y);\n // Returns the component-wise compare of `x == y`.\n bvec3 equal(uvec3 x, uvec3 y);\n // Returns the component-wise compare of `x == y`.\n bvec3 equal(bvec3 x, bvec3 y);\n // Returns the component-wise compare of `x == y`.\n bvec4 equal(vec4 x, vec4 y);\n // Returns the component-wise compare of `x == y`.\n bvec4 equal(ivec4 x, ivec4 y);\n // Returns the component-wise compare of `x == y`.\n bvec4 equal(uvec4 x, uvec4 y);\n // Returns the component-wise compare of `x == y`.\n bvec4 equal(bvec4 x, bvec4 y);\n\n // Returns the component-wise compare of `x != y`.\n bvec2 notEqual(vec2 x, vec2 y);\n // Returns the component-wise compare of `x != y`.\n bvec2 notEqual(ivec2 x, ivec2 y);\n // Returns the component-wise compare of `x != y`.\n bvec2 notEqual(uvec2 x, uvec2 y);\n // Returns the component-wise compare of `x != y`.\n bvec2 notEqual(bvec2 x, bvec2 y);\n // Returns the component-wise compare of `x != y`.\n bvec3 notEqual(vec3 x, vec3 y);\n // Returns the component-wise compare of `x != y`.\n bvec3 notEqual(ivec3 x, ivec3 y);\n // Returns the component-wise compare of `x != y`.\n bvec3 notEqual(uvec3 x, uvec3 y);\n // Returns the component-wise compare of `x != y`.\n bvec3 notEqual(bvec3 x, bvec3 y);\n // Returns the component-wise compare of `x != y`.\n bvec4 notEqual(vec4 x, vec4 y);\n // Returns the component-wise compare of `x != y`.\n bvec4 notEqual(ivec4 x, ivec4 y);\n // Returns the component-wise compare of `x != y`.\n bvec4 notEqual(uvec4 x, uvec4 y);\n // Returns the component-wise compare of `x != y`.\n bvec4 notEqual(bvec4 x, bvec4 y);\n\n // Returns true if any component of `x` is `true`.\n bool any(bvec2 x);\n // Returns true if any component of `x` is `true`.\n bool any(bvec3 x);\n // Returns true if any component of `x` is `true`.\n bool any(bvec4 x);\n\n // Returns true only if all components of `x` are `true`.\n bool all(bvec2 x);\n // Returns true only if all components of `x` are `true`.\n bool all(bvec3 x);\n // Returns true only if all components of `x` are `true`.\n bool all(bvec4 x);\n\n // Returns the component-wise logical complement of `x`.\n bvec2 not(bvec2 x);\n // Returns the component-wise logical complement of `x`.\n bvec3 not(bvec3 x);\n // Returns the component-wise logical complement of `x`.\n bvec4 not(bvec4 x);\n\n ////////////////////////////////////////////////////////////////////////////////\n // Texture Lookup Functions\n\n // Returns the dimensions of level `lod` for the texture bound to `sampler`.\n highp ivec2 textureSize(sampler2D sampler, int lod);\n // Returns the dimensions of level `lod` for the texture bound to `sampler`.\n highp ivec2 textureSize(isampler2D sampler, int lod);\n // Returns the dimensions of level `lod` for the texture bound to `sampler`.\n highp ivec2 textureSize(usampler2D sampler, int lod);\n // Returns the dimensions of level `lod` for the texture bound to `sampler`.\n highp ivec3 textureSize(sampler3D sampler, int lod);\n // Returns the dimensions of level `lod` for the texture bound to `sampler`.\n highp ivec3 textureSize(isampler3D sampler, int lod);\n // Returns the dimensions of level `lod` for the texture bound to `sampler`.\n highp ivec3 textureSize(usampler3D sampler, int lod);\n // Returns the dimensions of level `lod` for the texture bound to `sampler`.\n highp ivec2 textureSize(samplerCube sampler, int lod);\n // Returns the dimensions of level `lod` for the texture bound to `sampler`.\n highp ivec2 textureSize(isamplerCube sampler, int lod);\n // Returns the dimensions of level `lod` for the texture bound to `sampler`.\n highp ivec2 textureSize(usamplerCube sampler, int lod);\n // Returns the dimensions of level `lod` for the texture bound to `sampler`.\n highp ivec2 textureSize(sampler2DShadow sampler, int lod);\n // Returns the dimensions of level `lod` for the texture bound to `sampler`.\n highp ivec2 textureSize(samplerCubeShadow sampler, int lod);\n // Returns the dimensions of level `lod` for the texture bound to `sampler`.\n highp ivec3 textureSize(sampler2DArray sampler, int lod);\n // Returns the dimensions of level `lod` for the texture bound to `sampler`.\n highp ivec3 textureSize(isampler2DArray sampler, int lod);\n // Returns the dimensions of level `lod` for the texture bound to `sampler`.\n highp ivec3 textureSize(usampler2DArray sampler, int lod);\n // Returns the dimensions of level `lod` for the texture bound to `sampler`.\n highp ivec3 textureSize(sampler2DArrayShadow sampler, int lod);\n\n // Use the texture coordinate `P` to do a texture lookup in the texture currently bound to `sampler`.\n vec4 texture(sampler2D sampler, vec2 P);\n // Use the texture coordinate `P` to do a texture lookup in the texture currently bound to `sampler`.\n ivec4 texture(isampler2D sampler, vec2 P);\n // Use the texture coordinate `P` to do a texture lookup in the texture currently bound to `sampler`.\n uvec4 texture(usampler2D sampler, vec2 P);\n // Use the texture coordinate `P` to do a texture lookup in the texture currently bound to `sampler`.\n vec4 texture(sampler2D sampler, vec2 P, float bias);\n // Use the texture coordinate `P` to do a texture lookup in the texture currently bound to `sampler`.\n ivec4 texture(isampler2D sampler, vec2 P, float bias);\n // Use the texture coordinate `P` to do a texture lookup in the texture currently bound to `sampler`.\n uvec4 texture(usampler2D sampler, vec2 P, float bias);\n\n // Use the texture coordinate `P` to do a texture lookup in the texture currently bound to `sampler`.\n vec4 texture(sampler3D sampler, vec3 P);\n // Use the texture coordinate `P` to do a texture lookup in the texture currently bound to `sampler`.\n ivec4 texture(isampler3D sampler, vec3 P);\n // Use the texture coordinate `P` to do a texture lookup in the texture currently bound to `sampler`.\n uvec4 texture(usampler3D sampler, vec3 P);\n // Use the texture coordinate `P` to do a texture lookup in the texture currently bound to `sampler`.\n vec4 texture(sampler3D sampler, vec3 P, float bias);\n // Use the texture coordinate `P` to do a texture lookup in the texture currently bound to `sampler`.\n ivec4 texture(isampler3D sampler, vec3 P, float bias);\n // Use the texture coordinate `P` to do a texture lookup in the texture currently bound to `sampler`.\n uvec4 texture(usampler3D sampler, vec3 P, float bias);\n\n // Use the texture coordinate `P` to do a texture lookup in the texture currently bound to `sampler`.\n vec4 texture(samplerCube sampler, vec3 P);\n // Use the texture coordinate `P` to do a texture lookup in the texture currently bound to `sampler`.\n ivec4 texture(isamplerCube sampler, vec3 P);\n // Use the texture coordinate `P` to do a texture lookup in the texture currently bound to `sampler`.\n uvec4 texture(usamplerCube sampler, vec3 P);\n // Use the texture coordinate `P` to do a texture lookup in the texture currently bound to `sampler`.\n vec4 texture(samplerCube sampler, vec3 P, float bias);\n // Use the texture coordinate `P` to do a texture lookup in the texture currently bound to `sampler`.\n ivec4 texture(isamplerCube sampler, vec3 P, float bias);\n // Use the texture coordinate `P` to do a texture lookup in the texture currently bound to `sampler`.\n uvec4 texture(usamplerCube sampler, vec3 P, float bias);\n\n // Use the texture coordinate `P` to do a texture lookup in the texture currently bound to `sampler`.\n float texture(sampler2DShadow sampler, vec3 P);\n // Use the texture coordinate `P` to do a texture lookup in the texture currently bound to `sampler`.\n float texture(sampler2DShadow sampler, vec3 P, float bias);\n // Use the texture coordinate `P` to do a texture lookup in the texture currently bound to `sampler`.\n float texture(samplerCubeShadow sampler, vec4 P);\n // Use the texture coordinate `P` to do a texture lookup in the texture currently bound to `sampler`.\n float texture(samplerCubeShadow sampler, vec4 P, float bias);\n\n // Use the texture coordinate `P` to do a texture lookup in the texture currently bound to `sampler`.\n vec4 texture(sampler2DArray sampler, vec3 P);\n // Use the texture coordinate `P` to do a texture lookup in the texture currently bound to `sampler`.\n ivec4 texture(isampler2DArray sampler, vec3 P);\n // Use the texture coordinate `P` to do a texture lookup in the texture currently bound to `sampler`.\n uvec4 texture(usampler2DArray sampler, vec3 P);\n // Use the texture coordinate `P` to do a texture lookup in the texture currently bound to `sampler`.\n vec4 texture(sampler2DArray sampler, vec3 P, float bias);\n // Use the texture coordinate `P` to do a texture lookup in the texture currently bound to `sampler`.\n ivec4 texture(isampler2DArray sampler, vec3 P, float bias);\n // Use the texture coordinate `P` to do a texture lookup in the texture currently bound to `sampler`.\n uvec4 texture(usampler2DArray sampler, vec3 P, float bias);\n\n // Use the texture coordinate `P` to do a texture lookup in the texture currently bound to `sampler`.\n float texture(sampler2DArrayShadow sampler, vec4 P);\n\n // Do a texture lookup with projection. The texture coordinates consumed from `P`, not including the last\n // component of `P`, are divided by the last component of `P` to form projected coordinates `P'`.\n vec4 textureProj(sampler2D sampler, vec3 P);\n // Do a texture lookup with projection. The texture coordinates consumed from `P`, not including the last\n // component of `P`, are divided by the last component of `P` to form projected coordinates `P'`.\n ivec4 textureProj(isampler2D sampler, vec3 P);\n // Do a texture lookup with projection. The texture coordinates consumed from `P`, not including the last\n // component of `P`, are divided by the last component of `P` to form projected coordinates `P'`.\n uvec4 textureProj(usampler2D sampler, vec3 P);\n // Do a texture lookup with projection. The texture coordinates consumed from `P`, not including the last\n // component of `P`, are divided by the last component of `P` to form projected coordinates `P'`.\n vec4 textureProj(sampler2D sampler, vec3 P, float bias);\n // Do a texture lookup with projection. The texture coordinates consumed from `P`, not including the last\n // component of `P`, are divided by the last component of `P` to form projected coordinates `P'`.\n ivec4 textureProj(isampler2D sampler, vec3 P, float bias);\n // Do a texture lookup with projection. The texture coordinates consumed from `P`, not including the last\n // component of `P`, are divided by the last component of `P` to form projected coordinates `P'`.\n uvec4 textureProj(usampler2D sampler, vec3 P, float bias);\n\n // Do a texture lookup with projection. The texture coordinates consumed from `P`, not including the last\n // component of `P`, are divided by the last component of `P` to form projected coordinates `P'`.\n vec4 textureProj(sampler2D sampler, vec4 P);\n // Do a texture lookup with projection. The texture coordinates consumed from `P`, not including the last\n // component of `P`, are divided by the last component of `P` to form projected coordinates `P'`.\n ivec4 textureProj(isampler2D sampler, vec4 P);\n // Do a texture lookup with projection. The texture coordinates consumed from `P`, not including the last\n // component of `P`, are divided by the last component of `P` to form projected coordinates `P'`.\n uvec4 textureProj(usampler2D sampler, vec4 P);\n // Do a texture lookup with projection. The texture coordinates consumed from `P`, not including the last\n // component of `P`, are divided by the last component of `P` to form projected coordinates `P'`.\n vec4 textureProj(sampler2D sampler, vec4 P, float bias);\n // Do a texture lookup with projection. The texture coordinates consumed from `P`, not including the last\n // component of `P`, are divided by the last component of `P` to form projected coordinates `P'`.\n ivec4 textureProj(isampler2D sampler, vec4 P, float bias);\n // Do a texture lookup with projection. The texture coordinates consumed from `P`, not including the last\n // component of `P`, are divided by the last component of `P` to form projected coordinates `P'`.\n uvec4 textureProj(usampler2D sampler, vec4 P, float bias);\n\n // Do a texture lookup with projection. The texture coordinates consumed from `P`, not including the last\n // component of `P`, are divided by the last component of `P` to form projected coordinates `P'`.\n vec4 textureProj(sampler3D sampler, vec4 P);\n // Do a texture lookup with projection. The texture coordinates consumed from `P`, not including the last\n // component of `P`, are divided by the last component of `P` to form projected coordinates `P'`.\n ivec4 textureProj(isampler3D sampler, vec4 P);\n // Do a texture lookup with projection. The texture coordinates consumed from `P`, not including the last\n // component of `P`, are divided by the last component of `P` to form projected coordinates `P'`.\n uvec4 textureProj(usampler3D sampler, vec4 P);\n // Do a texture lookup with projection. The texture coordinates consumed from `P`, not including the last\n // component of `P`, are divided by the last component of `P` to form projected coordinates `P'`.\n vec4 textureProj(sampler3D sampler, vec4 P, float bias);\n // Do a texture lookup with projection. The texture coordinates consumed from `P`, not including the last\n // component of `P`, are divided by the last component of `P` to form projected coordinates `P'`.\n ivec4 textureProj(isampler3D sampler, vec4 P, float bias);\n // Do a texture lookup with projection. The texture coordinates consumed from `P`, not including the last\n // component of `P`, are divided by the last component of `P` to form projected coordinates `P'`.\n uvec4 textureProj(usampler3D sampler, vec4 P, float bias);\n\n // Do a texture lookup with projection. The texture coordinates consumed from `P`, not including the last\n // component of `P`, are divided by the last component of `P` to form projected coordinates `P'`.\n float textureProj(sampler2DShadow sampler, vec4 P);\n // Do a texture lookup with projection. The texture coordinates consumed from `P`, not including the last\n // component of `P`, are divided by the last component of `P` to form projected coordinates `P'`.\n float textureProj(sampler2DShadow sampler, vec4 P, float bias);\n\n // Do a texture lookup as in `texture` but with explicit LOD; `lod` specifies `λbase` and sets the partial derivatives.\n vec4 textureLod(sampler2D sampler, vec2 P, float lod);\n // Do a texture lookup as in `texture` but with explicit LOD; `lod` specifies `λbase` and sets the partial derivatives.\n ivec4 textureLod(isampler2D sampler, vec2 P, float lod);\n // Do a texture lookup as in `texture` but with explicit LOD; `lod` specifies `λbase` and sets the partial derivatives.\n uvec4 textureLod(usampler2D sampler, vec2 P, float lod);\n // Do a texture lookup as in `texture` but with explicit LOD; `lod` specifies `λbase` and sets the partial derivatives.\n vec4 textureLod(sampler3D sampler, vec3 P, float lod);\n // Do a texture lookup as in `texture` but with explicit LOD; `lod` specifies `λbase` and sets the partial derivatives.\n ivec4 textureLod(isampler3D sampler, vec3 P, float lod);\n // Do a texture lookup as in `texture` but with explicit LOD; `lod` specifies `λbase` and sets the partial derivatives.\n uvec4 textureLod(usampler3D sampler, vec3 P, float lod);\n // Do a texture lookup as in `texture` but with explicit LOD; `lod` specifies `λbase` and sets the partial derivatives.\n vec4 textureLod(samplerCube sampler, vec3 P, float lod);\n // Do a texture lookup as in `texture` but with explicit LOD; `lod` specifies `λbase` and sets the partial derivatives.\n ivec4 textureLod(isamplerCube sampler, vec3 P, float lod);\n // Do a texture lookup as in `texture` but with explicit LOD; `lod` specifies `λbase` and sets the partial derivatives.\n uvec4 textureLod(usamplerCube sampler, vec3 P, float lod);\n // Do a texture lookup as in `texture` but with explicit LOD; `lod` specifies `λbase` and sets the partial derivatives.\n float textureLod(sampler2DShadow sampler, vec3 P, float lod);\n // Do a texture lookup as in `texture` but with explicit LOD; `lod` specifies `λbase` and sets the partial derivatives.\n vec4 textureLod(sampler2DArray sampler, vec3 P, float lod);\n // Do a texture lookup as in `texture` but with explicit LOD; `lod` specifies `λbase` and sets the partial derivatives.\n ivec4 textureLod(isampler2DArray sampler, vec3 P, float lod);\n // Do a texture lookup as in `texture` but with explicit LOD; `lod` specifies `λbase` and sets the partial derivatives.\n uvec4 textureLod(usampler2DArray sampler, vec3 P, float lod);\n\n // Do a texture lookup as in texture but with `offset` added to the `(u,v)` texel coordinates\n // before looking up each texel. The offset value must be a constant expression.\n vec4 textureOffset(sampler2D sampler, vec2 P, ivec2 offset);\n // Do a texture lookup as in texture but with `offset` added to the `(u,v)` texel coordinates\n // before looking up each texel. The offset value must be a constant expression.\n ivec4 textureOffset(isampler2D sampler, vec2 P, ivec2 offset);\n // Do a texture lookup as in texture but with `offset` added to the `(u,v)` texel coordinates\n // before looking up each texel. The offset value must be a constant expression.\n uvec4 textureOffset(usampler2D sampler, vec2 P, ivec2 offset);\n // Do a texture lookup as in texture but with `offset` added to the `(u,v)` texel coordinates\n // before looking up each texel. The offset value must be a constant expression.\n vec4 textureOffset(sampler2D sampler, vec2 P, ivec2 offset, float bias);\n // Do a texture lookup as in texture but with `offset` added to the `(u,v)` texel coordinates\n // before looking up each texel. The offset value must be a constant expression.\n ivec4 textureOffset(isampler2D sampler, vec2 P, ivec2 offset, float bias);\n // Do a texture lookup as in texture but with `offset` added to the `(u,v)` texel coordinates\n // before looking up each texel. The offset value must be a constant expression.\n uvec4 textureOffset(usampler2D sampler, vec2 P, ivec2 offset, float bias);\n\n // Do a texture lookup as in texture but with `offset` added to the `(u,v,w)` texel coordinates\n // before looking up each texel. The offset value must be a constant expression.\n vec4 textureOffset(sampler3D sampler, vec3 P, ivec3 offset);\n // Do a texture lookup as in texture but with `offset` added to the `(u,v,w)` texel coordinates\n // before looking up each texel. The offset value must be a constant expression.\n ivec4 textureOffset(isampler3D sampler, vec3 P, ivec3 offset);\n // Do a texture lookup as in texture but with `offset` added to the `(u,v,w)` texel coordinates\n // before looking up each texel. The offset value must be a constant expression.\n uvec4 textureOffset(usampler3D sampler, vec3 P, ivec3 offset);\n // Do a texture lookup as in texture but with `offset` added to the `(u,v,w)` texel coordinates\n // before looking up each texel. The offset value must be a constant expression.\n vec4 textureOffset(sampler3D sampler, vec3 P, ivec3 offset, float bias);\n // Do a texture lookup as in texture but with `offset` added to the `(u,v,w)` texel coordinates\n // before looking up each texel. The offset value must be a constant expression.\n ivec4 textureOffset(isampler3D sampler, vec3 P, ivec3 offset, float bias);\n // Do a texture lookup as in texture but with `offset` added to the `(u,v,w)` texel coordinates\n // before looking up each texel. The offset value must be a constant expression.\n uvec4 textureOffset(usampler3D sampler, vec3 P, ivec3 offset, float bias);\n\n // Do a texture lookup as in texture but with `offset` added to the `(u,v,w)` texel coordinates\n // before looking up each texel. The offset value must be a constant expression.\n float textureOffset(sampler2DShadow sampler, vec3 P, ivec2 offset);\n // Do a texture lookup as in texture but with `offset` added to the `(u,v,w)` texel coordinates\n // before looking up each texel. The offset value must be a constant expression.\n float textureOffset(sampler2DShadow sampler, vec3 P, ivec2 offset, float bias);\n\n // Do a texture lookup as in texture but with `offset` added to the `(u,v,w)` texel coordinates\n // before looking up each texel. The offset value must be a constant expression. Note that\n // `offset` does not apply to the layer coordinate for texture arrays.\n vec4 textureOffset(sampler2DArray sampler, vec3 P, ivec2 offset);\n // Do a texture lookup as in texture but with `offset` added to the `(u,v,w)` texel coordinates\n // before looking up each texel. The offset value must be a constant expression. Note that\n // `offset` does not apply to the layer coordinate for texture arrays.\n ivec4 textureOffset(isampler2DArray sampler, vec3 P, ivec2 offset);\n // Do a texture lookup as in texture but with `offset` added to the `(u,v,w)` texel coordinates\n // before looking up each texel. The offset value must be a constant expression. Note that\n // `offset` does not apply to the layer coordinate for texture arrays.\n uvec4 textureOffset(usampler2DArray sampler, vec3 P, ivec2 offset);\n // Do a texture lookup as in texture but with `offset` added to the `(u,v,w)` texel coordinates\n // before looking up each texel. The offset value must be a constant expression. Note that\n // `offset` does not apply to the layer coordinate for texture arrays.\n vec4 textureOffset(sampler2DArray sampler, vec3 P, ivec2 offset, float bias);\n // Do a texture lookup as in texture but with `offset` added to the `(u,v,w)` texel coordinates\n // before looking up each texel. The offset value must be a constant expression. Note that\n // `offset` does not apply to the layer coordinate for texture arrays.\n ivec4 textureOffset(isampler2DArray sampler, vec3 P, ivec2 offset, float bias);\n // Do a texture lookup as in texture but with `offset` added to the `(u,v,w)` texel coordinates\n // before looking up each texel. The offset value must be a constant expression. Note that\n // `offset` does not apply to the layer coordinate for texture arrays.\n uvec4 textureOffset(usampler2DArray sampler, vec3 P, ivec2 offset, float bias);\n\n // Use integer texture coordinate `P` to lookup a single texel from sampler.\n vec4 texelFetch(sampler2D sampler, ivec2 P, int lod);\n // Use integer texture coordinate `P` to lookup a single texel from sampler.\n ivec4 texelFetch(isampler2D sampler, ivec2 P, int lod);\n // Use integer texture coordinate `P` to lookup a single texel from sampler.\n uvec4 texelFetch(usampler2D sampler, ivec2 P, int lod);\n // Use integer texture coordinate `P` to lookup a single texel from sampler.\n vec4 texelFetch(sampler3D sampler, ivec3 P, int lod);\n // Use integer texture coordinate `P` to lookup a single texel from sampler.\n ivec4 texelFetch(isampler3D sampler, ivec3 P, int lod);\n // Use integer texture coordinate `P` to lookup a single texel from sampler.\n uvec4 texelFetch(usampler3D sampler, ivec3 P, int lod);\n // Use integer texture coordinate `P` to lookup a single texel from sampler.\n vec4 texelFetch(sampler2DArray sampler, ivec3 P, int lod);\n // Use integer texture coordinate `P` to lookup a single texel from sampler.\n ivec4 texelFetch(isampler2DArray sampler, ivec3 P, int lod);\n // Use integer texture coordinate `P` to lookup a single texel from sampler.\n uvec4 texelFetch(usampler2DArray sampler, ivec3 P, int lod);\n\n // Fetch a single texel as in `texelFetch` offset by `offset` as described in `textureOffset`.\n vec4 texelFetchOffset(sampler2D sampler, ivec2 P, int lod, ivec2 offset);\n // Fetch a single texel as in `texelFetch` offset by `offset` as described in `textureOffset`.\n ivec4 texelFetchOffset(isampler2D sampler, ivec2 P, int lod, ivec2 offset);\n // Fetch a single texel as in `texelFetch` offset by `offset` as described in `textureOffset`.\n uvec4 texelFetchOffset(usampler2D sampler, ivec2 P, int lod, ivec2 offset);\n // Fetch a single texel as in `texelFetch` offset by `offset` as described in `textureOffset`.\n vec4 texelFetchOffset(sampler3D sampler, ivec3 P, int lod, ivec3 offset);\n // Fetch a single texel as in `texelFetch` offset by `offset` as described in `textureOffset`.\n ivec4 texelFetchOffset(isampler3D sampler, ivec3 P, int lod, ivec3 offset);\n // Fetch a single texel as in `texelFetch` offset by `offset` as described in `textureOffset`.\n uvec4 texelFetchOffset(usampler3D sampler, ivec3 P, int lod, ivec3 offset);\n // Fetch a single texel as in `texelFetch` offset by `offset` as described in `textureOffset`.\n vec4 texelFetchOffset(sampler2DArray sampler, ivec3 P, int lod, ivec2 offset);\n // Fetch a single texel as in `texelFetch` offset by `offset` as described in `textureOffset`.\n ivec4 texelFetchOffset(isampler2DArray sampler, ivec3 P, int lod, ivec2 offset);\n // Fetch a single texel as in `texelFetch` offset by `offset` as described in `textureOffset`.\n uvec4 texelFetchOffset(usampler2DArray sampler, ivec3 P, int lod, ivec2 offset);\n\n// Do a projective texture lookup as described in `textureProj` offset by `offset` as described in `textureOffset`.\n vec4 textureProjOffset(sampler2D sampler, vec3 P, ivec2 offset);\n // Do a projective texture lookup as described in `textureProj` offset by `offset` as described in `textureOffset`.\n ivec4 textureProjOffset(isampler2D sampler, vec3 P, ivec2 offset);\n // Do a projective texture lookup as described in `textureProj` offset by `offset` as described in `textureOffset`.\n uvec4 textureProjOffset(usampler2D sampler, vec3 P, ivec2 offset);\n // Do a projective texture lookup as described in `textureProj` offset by `offset` as described in `textureOffset`.\n vec4 textureProjOffset(sampler2D sampler, vec3 P, ivec2 offset, float bias);\n // Do a projective texture lookup as described in `textureProj` offset by `offset` as described in `textureOffset`.\n ivec4 textureProjOffset(isampler2D sampler, vec3 P, ivec2 offset, float bias);\n // Do a projective texture lookup as described in `textureProj` offset by `offset` as described in `textureOffset`.\n uvec4 textureProjOffset(usampler2D sampler, vec3 P, ivec2 offset, float bias);\n // Do a projective texture lookup as described in `textureProj` offset by `offset` as described in `textureOffset`.\n vec4 textureProjOffset(sampler2D sampler, vec4 P, ivec2 offset);\n // Do a projective texture lookup as described in `textureProj` offset by `offset` as described in `textureOffset`.\n ivec4 textureProjOffset(isampler2D sampler, vec4 P, ivec2 offset);\n // Do a projective texture lookup as described in `textureProj` offset by `offset` as described in `textureOffset`.\n uvec4 textureProjOffset(usampler2D sampler, vec4 P, ivec2 offset);\n // Do a projective texture lookup as described in `textureProj` offset by `offset` as described in `textureOffset`.\n vec4 textureProjOffset(sampler2D sampler, vec4 P, ivec2 offset, float bias);\n // Do a projective texture lookup as described in `textureProj` offset by `offset` as described in `textureOffset`.\n ivec4 textureProjOffset(isampler2D sampler, vec4 P, ivec2 offset, float bias);\n // Do a projective texture lookup as described in `textureProj` offset by `offset` as described in `textureOffset`.\n uvec4 textureProjOffset(usampler2D sampler, vec4 P, ivec2 offset, float bias);\n // Do a projective texture lookup as described in `textureProj` offset by `offset` as described in `textureOffset`.\n vec4 textureProjOffset(sampler3D sampler, vec4 P, ivec3 offset);\n // Do a projective texture lookup as described in `textureProj` offset by `offset` as described in `textureOffset`.\n ivec4 textureProjOffset(isampler3D sampler, vec4 P, ivec3 offset);\n // Do a projective texture lookup as described in `textureProj` offset by `offset` as described in `textureOffset`.\n uvec4 textureProjOffset(usampler3D sampler, vec4 P, ivec3 offset);\n // Do a projective texture lookup as described in `textureProj` offset by `offset` as described in `textureOffset`.\n vec4 textureProjOffset(sampler3D sampler, vec4 P, ivec3 offset, float bias);\n // Do a projective texture lookup as described in `textureProj` offset by `offset` as described in `textureOffset`.\n ivec4 textureProjOffset(isampler3D sampler, vec4 P, ivec3 offset, float bias);\n // Do a projective texture lookup as described in `textureProj` offset by `offset` as described in `textureOffset`.\n uvec4 textureProjOffset(usampler3D sampler, vec4 P, ivec3 offset, float bias);\n // Do a projective texture lookup as described in `textureProj` offset by `offset` as described in `textureOffset`.\n float textureProjOffset(sampler2DShadow sampler, vec4 P, ivec2 offset);\n // Do a projective texture lookup as described in `textureProj` offset by `offset` as described in `textureOffset`.\n float textureProjOffset(sampler2DShadow sampler, vec4 P, ivec2 offset, float bias);\n\n // Do an offset texture lookup with explicit LOD. See `textureLod` and `textureOffset`.\n vec4 textureLodOffset(sampler2D sampler, vec2 P, float lod, ivec2 offset);\n // Do an offset texture lookup with explicit LOD. See `textureLod` and `textureOffset`.\n ivec4 textureLodOffset(isampler2D sampler, vec2 P, float lod, ivec2 offset);\n // Do an offset texture lookup with explicit LOD. See `textureLod` and `textureOffset`.\n uvec4 textureLodOffset(usampler2D sampler, vec2 P, float lod, ivec2 offset);\n // Do an offset texture lookup with explicit LOD. See `textureLod` and `textureOffset`.\n vec4 textureLodOffset(sampler3D sampler, vec3 P, float lod, ivec3 offset);\n // Do an offset texture lookup with explicit LOD. See `textureLod` and `textureOffset`.\n ivec4 textureLodOffset(isampler3D sampler, vec3 P, float lod, ivec3 offset);\n // Do an offset texture lookup with explicit LOD. See `textureLod` and `textureOffset`.\n uvec4 textureLodOffset(usampler3D sampler, vec3 P, float lod, ivec3 offset);\n // Do an offset texture lookup with explicit LOD. See `textureLod` and `textureOffset`.\n float textureLodOffset(sampler2DShadow sampler, vec3 P, float lod, ivec2 offset);\n // Do an offset texture lookup with explicit LOD. See `textureLod` and `textureOffset`.\n vec4 textureLodOffset(sampler2DArray sampler, vec3 P, float lod, ivec2 offset);\n // Do an offset texture lookup with explicit LOD. See `textureLod` and `textureOffset`.\n ivec4 textureLodOffset(isampler2DArray sampler, vec3 P, float lod, ivec2 offset);\n // Do an offset texture lookup with explicit LOD. See `textureLod` and `textureOffset`.\n uvec4 textureLodOffset(usampler2DArray sampler, vec3 P, float lod, ivec2 offset);\n\n // Do a projective texture lookup with explicit LOD. See `textureProj` and `textureLod`.\n vec4 textureProjLod(sampler2D sampler, vec3 P, float lod);\n // Do a projective texture lookup with explicit LOD. See `textureProj` and `textureLod`.\n ivec4 textureProjLod(isampler2D sampler, vec3 P, float lod);\n // Do a projective texture lookup with explicit LOD. See `textureProj` and `textureLod`.\n uvec4 textureProjLod(usampler2D sampler, vec3 P, float lod);\n // Do a projective texture lookup with explicit LOD. See `textureProj` and `textureLod`.\n vec4 textureProjLod(sampler2D sampler, vec4 P, float lod);\n // Do a projective texture lookup with explicit LOD. See `textureProj` and `textureLod`.\n ivec4 textureProjLod(isampler2D sampler, vec4 P, float lod);\n // Do a projective texture lookup with explicit LOD. See `textureProj` and `textureLod`.\n uvec4 textureProjLod(usampler2D sampler, vec4 P, float lod);\n // Do a projective texture lookup with explicit LOD. See `textureProj` and `textureLod`.\n vec4 textureProjLod(sampler3D sampler, vec4 P, float lod);\n // Do a projective texture lookup with explicit LOD. See `textureProj` and `textureLod`.\n ivec4 textureProjLod(isampler3D sampler, vec4 P, float lod);\n // Do a projective texture lookup with explicit LOD. See `textureProj` and `textureLod`.\n uvec4 textureProjLod(usampler3D sampler, vec4 P, float lod);\n // Do a projective texture lookup with explicit LOD. See `textureProj` and `textureLod`.\n float textureProjLod(sampler2DShadow sampler, vec4 P, float lod);\n\n // Do an offset projective texture lookup with explicit LOD. See `textureProj`, `textureLod`, and `textureOffset`.\n vec4 textureProjLodOffset(sampler2D sampler, vec3 P, float lod, ivec2 offset);\n // Do an offset projective texture lookup with explicit LOD. See `textureProj`, `textureLod`, and `textureOffset`.\n ivec4 textureProjLodOffset(isampler2D sampler, vec3 P, float lod, ivec2 offset);\n // Do an offset projective texture lookup with explicit LOD. See `textureProj`, `textureLod`, and `textureOffset`.\n uvec4 textureProjLodOffset(usampler2D sampler, vec3 P, float lod, ivec2 offset);\n // Do an offset projective texture lookup with explicit LOD. See `textureProj`, `textureLod`, and `textureOffset`.\n vec4 textureProjLodOffset(sampler2D sampler, vec4 P, float lod, ivec2 offset);\n // Do an offset projective texture lookup with explicit LOD. See `textureProj`, `textureLod`, and `textureOffset`.\n ivec4 textureProjLodOffset(isampler2D sampler, vec4 P, float lod, ivec2 offset);\n // Do an offset projective texture lookup with explicit LOD. See `textureProj`, `textureLod`, and `textureOffset`.\n uvec4 textureProjLodOffset(usampler2D sampler, vec4 P, float lod, ivec2 offset);\n // Do an offset projective texture lookup with explicit LOD. See `textureProj`, `textureLod`, and `textureOffset`.\n vec4 textureProjLodOffset(sampler3D sampler, vec4 P, float lod, ivec3 offset);\n // Do an offset projective texture lookup with explicit LOD. See `textureProj`, `textureLod`, and `textureOffset`.\n ivec4 textureProjLodOffset(isampler3D sampler, vec4 P, float lod, ivec3 offset);\n // Do an offset projective texture lookup with explicit LOD. See `textureProj`, `textureLod`, and `textureOffset`.\n uvec4 textureProjLodOffset(usampler3D sampler, vec4 P, float lod, ivec3 offset);\n // Do an offset projective texture lookup with explicit LOD. See `textureProj`, `textureLod`, and `textureOffset`.\n float textureProjLodOffset(sampler2DShadow sampler, vec4 P, float lod, ivec2 offset);\n\n // Do a texture lookup as in texture but with explicit gradients. The partial derivatives of `P` are with respect to window `x` and window `y`.\n vec4 textureGrad(sampler2D sampler, vec2 P, vec2 dPdx, vec2 dPdy);\n // Do a texture lookup as in texture but with explicit gradients. The partial derivatives of `P` are with respect to window `x` and window `y`.\n ivec4 textureGrad(isampler2D sampler, vec2 P, vec2 dPdx, vec2 dPdy);\n // Do a texture lookup as in texture but with explicit gradients. The partial derivatives of `P` are with respect to window `x` and window `y`.\n uvec4 textureGrad(usampler2D sampler, vec2 P, vec2 dPdx, vec2 dPdy);\n // Do a texture lookup as in texture but with explicit gradients. The partial derivatives of `P` are with respect to window `x` and window `y`.\n vec4 textureGrad(sampler3D sampler, vec3 P, vec3 dPdx, vec3 dPdy);\n // Do a texture lookup as in texture but with explicit gradients. The partial derivatives of `P` are with respect to window `x` and window `y`.\n ivec4 textureGrad(isampler3D sampler, vec3 P, vec3 dPdx, vec3 dPdy);\n // Do a texture lookup as in texture but with explicit gradients. The partial derivatives of `P` are with respect to window `x` and window `y`.\n uvec4 textureGrad(usampler3D sampler, vec3 P, vec3 dPdx, vec3 dPdy);\n // Do a texture lookup as in texture but with explicit gradients. The partial derivatives of `P` are with respect to window `x` and window `y`.\n vec4 textureGrad(samplerCube sampler, vec3 P, vec3 dPdx, vec3 dPdy);\n // Do a texture lookup as in texture but with explicit gradients. The partial derivatives of `P` are with respect to window `x` and window `y`.\n ivec4 textureGrad(isamplerCube sampler, vec3 P, vec3 dPdx, vec3 dPdy);\n // Do a texture lookup as in texture but with explicit gradients. The partial derivatives of `P` are with respect to window `x` and window `y`.\n uvec4 textureGrad(usamplerCube sampler, vec3 P, vec3 dPdx, vec3 dPdy);\n // Do a texture lookup as in texture but with explicit gradients. The partial derivatives of `P` are with respect to window `x` and window `y`.\n float textureGrad(sampler2DShadow sampler, vec3 P, vec2 dPdx, vec2 dPdy);\n // Do a texture lookup as in texture but with explicit gradients. The partial derivatives of `P` are with respect to window `x` and window `y`.\n float textureGrad(samplerCubeShadow sampler, vec4 P, vec3 dPdx, vec3 dPdy);\n // Do a texture lookup as in texture but with explicit gradients. The partial derivatives of `P` are with respect to window `x` and window `y`.\n vec4 textureGrad(sampler2DArray sampler, vec3 P, vec2 dPdx, vec2 dPdy);\n // Do a texture lookup as in texture but with explicit gradients. The partial derivatives of `P` are with respect to window `x` and window `y`.\n ivec4 textureGrad(isampler2DArray sampler, vec3 P, vec2 dPdx, vec2 dPdy);\n // Do a texture lookup as in texture but with explicit gradients. The partial derivatives of `P` are with respect to window `x` and window `y`.\n uvec4 textureGrad(usampler2DArray sampler, vec3 P, vec2 dPdx, vec2 dPdy);\n // Do a texture lookup as in texture but with explicit gradients. The partial derivatives of `P` are with respect to window `x` and window `y`.\n float textureGrad(sampler2DArrayShadow sampler, vec4 P, vec2 dPdx, vec2 dPdy);\n\n // Do a texture lookup with both explicit gradient and offset, as described in `textureGrad` and `textureOffset`.\n vec4 textureGradOffset(sampler2D sampler, vec2 P, vec2 dPdx, vec2 dPdy, ivec2 offset);\n // Do a texture lookup with both explicit gradient and offset, as described in `textureGrad` and `textureOffset`.\n ivec4 textureGradOffset(isampler2D sampler, vec2 P, vec2 dPdx, vec2 dPdy, ivec2 offset);\n // Do a texture lookup with both explicit gradient and offset, as described in `textureGrad` and `textureOffset`.\n uvec4 textureGradOffset(usampler2D sampler, vec2 P, vec2 dPdx, vec2 dPdy, ivec2 offset);\n // Do a texture lookup with both explicit gradient and offset, as described in `textureGrad` and `textureOffset`.\n vec4 textureGradOffset(sampler3D sampler, vec3 P, vec3 dPdx, vec3 dPdy, ivec3 offset);\n // Do a texture lookup with both explicit gradient and offset, as described in `textureGrad` and `textureOffset`.\n ivec4 textureGradOffset(isampler3D sampler, vec3 P, vec3 dPdx, vec3 dPdy, ivec3 offset);\n // Do a texture lookup with both explicit gradient and offset, as described in `textureGrad` and `textureOffset`.\n uvec4 textureGradOffset(usampler3D sampler, vec3 P, vec3 dPdx, vec3 dPdy, ivec3 offset);\n // Do a texture lookup with both explicit gradient and offset, as described in `textureGrad` and `textureOffset`.\n float textureGradOffset(sampler2DShadow sampler, vec3 P, vec2 dPdx, vec2 dPdy, ivec2 offset);\n // Do a texture lookup with both explicit gradient and offset, as described in `textureGrad` and `textureOffset`.\n vec4 textureGradOffset(sampler2DArray sampler, vec3 P, vec2 dPdx, vec2 dPdy, ivec2 offset);\n // Do a texture lookup with both explicit gradient and offset, as described in `textureGrad` and `textureOffset`.\n ivec4 textureGradOffset(isampler2DArray sampler, vec3 P, vec2 dPdx, vec2 dPdy, ivec2 offset);\n // Do a texture lookup with both explicit gradient and offset, as described in `textureGrad` and `textureOffset`.\n uvec4 textureGradOffset(usampler2DArray sampler, vec3 P, vec2 dPdx, vec2 dPdy, ivec2 offset);\n // Do a texture lookup with both explicit gradient and offset, as described in `textureGrad` and `textureOffset`.\n float textureGradOffset(sampler2DArrayShadow sampler, vec4 P, vec2 dPdx, vec2 dPdy, ivec2 offset);\n\n // Do a texture lookup both projectively, as described in `textureProj`, and with explicit gradient as\n // described in `textureGrad`. The partial derivatives `dPdx` and `dPdy` are assumed to be already projected.\n vec4 textureProjGrad(sampler2D sampler, vec3 P, vec2 dPdx, vec2 dPdy);\n // Do a texture lookup both projectively, as described in `textureProj`, and with explicit gradient as\n // described in `textureGrad`. The partial derivatives `dPdx` and `dPdy` are assumed to be already projected.\n ivec4 textureProjGrad(isampler2D sampler, vec3 P, vec2 dPdx, vec2 dPdy);\n // Do a texture lookup both projectively, as described in `textureProj`, and with explicit gradient as\n // described in `textureGrad`. The partial derivatives `dPdx` and `dPdy` are assumed to be already projected.\n uvec4 textureProjGrad(usampler2D sampler, vec3 P, vec2 dPdx, vec2 dPdy);\n // Do a texture lookup both projectively, as described in `textureProj`, and with explicit gradient as\n // described in `textureGrad`. The partial derivatives `dPdx` and `dPdy` are assumed to be already projected.\n vec4 textureProjGrad(sampler2D sampler, vec4 P, vec2 dPdx, vec2 dPdy);\n // Do a texture lookup both projectively, as described in `textureProj`, and with explicit gradient as\n // described in `textureGrad`. The partial derivatives `dPdx` and `dPdy` are assumed to be already projected.\n ivec4 textureProjGrad(isampler2D sampler, vec4 P, vec2 dPdx, vec2 dPdy);\n // Do a texture lookup both projectively, as described in `textureProj`, and with explicit gradient as\n // described in `textureGrad`. The partial derivatives `dPdx` and `dPdy` are assumed to be already projected.\n uvec4 textureProjGrad(usampler2D sampler, vec4 P, vec2 dPdx, vec2 dPdy);\n // Do a texture lookup both projectively, as described in `textureProj`, and with explicit gradient as\n // described in `textureGrad`. The partial derivatives `dPdx` and `dPdy` are assumed to be already projected.\n vec4 textureProjGrad(sampler3D sampler, vec4 P, vec3 dPdx, vec3 dPdy);\n // Do a texture lookup both projectively, as described in `textureProj`, and with explicit gradient as\n // described in `textureGrad`. The partial derivatives `dPdx` and `dPdy` are assumed to be already projected.\n ivec4 textureProjGrad(isampler3D sampler, vec4 P, vec3 dPdx, vec3 dPdy);\n // Do a texture lookup both projectively, as described in `textureProj`, and with explicit gradient as\n // described in `textureGrad`. The partial derivatives `dPdx` and `dPdy` are assumed to be already projected.\n uvec4 textureProjGrad(usampler3D sampler, vec4 P, vec3 dPdx, vec3 dPdy);\n // Do a texture lookup both projectively, as described in `textureProj`, and with explicit gradient as\n // described in `textureGrad`. The partial derivatives `dPdx` and `dPdy` are assumed to be already projected.\n float textureProjGrad(sampler2DShadow sampler, vec4 P, vec2 dPdx, vec2 dPdy);\n\n // Do a texture lookup projectively and with explicit gradient as described in `textureProjGrad`, as well as with `offset`, as described in `textureOffset`.\n vec4 textureProjGradOffset(sampler2D sampler, vec3 P, vec2 dPdx, vec2 dPdy, ivec2 offset);\n // Do a texture lookup projectively and with explicit gradient as described in `textureProjGrad`, as well as with `offset`, as described in `textureOffset`.\n ivec4 textureProjGradOffset(isampler2D sampler, vec3 P, vec2 dPdx, vec2 dPdy, ivec2 offset);\n // Do a texture lookup projectively and with explicit gradient as described in `textureProjGrad`, as well as with `offset`, as described in `textureOffset`.\n uvec4 textureProjGradOffset(usampler2D sampler, vec3 P, vec2 dPdx, vec2 dPdy, ivec2 offset);\n // Do a texture lookup projectively and with explicit gradient as described in `textureProjGrad`, as well as with `offset`, as described in `textureOffset`.\n vec4 textureProjGradOffset(sampler2D sampler, vec4 P, vec2 dPdx, vec2 dPdy, ivec2 offset);\n // Do a texture lookup projectively and with explicit gradient as described in `textureProjGrad`, as well as with `offset`, as described in `textureOffset`.\n ivec4 textureProjGradOffset(isampler2D sampler, vec4 P, vec2 dPdx, vec2 dPdy, ivec2 offset);\n // Do a texture lookup projectively and with explicit gradient as described in `textureProjGrad`, as well as with `offset`, as described in `textureOffset`.\n uvec4 textureProjGradOffset(usampler2D sampler, vec4 P, vec2 dPdx, vec2 dPdy, ivec2 offset);\n // Do a texture lookup projectively and with explicit gradient as described in `textureProjGrad`, as well as with `offset`, as described in `textureOffset`.\n vec4 textureProjGradOffset(sampler3D sampler, vec4 P, vec3 dPdx, vec3 dPdy, ivec3 offset);\n // Do a texture lookup projectively and with explicit gradient as described in `textureProjGrad`, as well as with `offset`, as described in `textureOffset`.\n ivec4 textureProjGradOffset(isampler3D sampler, vec4 P, vec3 dPdx, vec3 dPdy, ivec3 offset);\n // Do a texture lookup projectively and with explicit gradient as described in `textureProjGrad`, as well as with `offset`, as described in `textureOffset`.\n uvec4 textureProjGradOffset(usampler3D sampler, vec4 P, vec3 dPdx, vec3 dPdy, ivec3 offset);\n // Do a texture lookup projectively and with explicit gradient as described in `textureProjGrad`, as well as with `offset`, as described in `textureOffset`.\n float textureProjGradOffset(sampler2DShadow sampler, vec4 P, vec2 dPdx, vec2 dPdy, ivec2 offset);\n\n ////////////////////////////////////////////////////////////////////////////////\n // Fragment Processing Functions\n\n // Returns the derivative in x using local differencing for the input argument `p`.\n float dFdx(float p);\n // Returns the derivative in x using local differencing for the input argument `p`.\n vec2 dFdx(vec2 p);\n // Returns the derivative in x using local differencing for the input argument `p`.\n vec3 dFdx(vec3 p);\n // Returns the derivative in x using local differencing for the input argument `p`.\n vec4 dFdx(vec4 p);\n\n // Returns the derivative in y using local differencing for the input argument `p`.\n float dFdy(float p);\n // Returns the derivative in y using local differencing for the input argument `p`.\n vec2 dFdy(vec2 p);\n // Returns the derivative in y using local differencing for the input argument `p`.\n vec3 dFdy(vec3 p);\n // Returns the derivative in y using local differencing for the input argument `p`.\n vec4 dFdy(vec4 p);\n\n // Returns the sum of the absolute derivative in x and y using local differencing for the input argument `p`, i.e., `abs(dFdx(p)) + abs(dFdy(p))`.\n float fwidth(float p);\n // Returns the sum of the absolute derivative in x and y using local differencing for the input argument `p`, i.e., `abs(dFdx(p)) + abs(dFdy(p))`.\n vec2 fwidth(vec2 p);\n // Returns the sum of the absolute derivative in x and y using local differencing for the input argument `p`, i.e., `abs(dFdx(p)) + abs(dFdy(p))`.\n vec3 fwidth(vec3 p);\n // Returns the sum of the absolute derivative in x and y using local differencing for the input argument `p`, i.e., `abs(dFdx(p)) + abs(dFdy(p))`.\n vec4 fwidth(vec4 p);\n}\n");
5
+ for(var l=0,g=b.length;l<g;l=l+1|0){var f=b[l];f.c.b||wg(a,f,c)}}else e=new Vi('<api>',"\nimport {\n // The variable `gl_Position` is available only in the vertex language and is intended for writing the\n // homogeneous vertex position. This value will be used by primitive assembly, clipping, culling, and other\n // fixed functionality operations that operate on primitives after vertex processing has occurred.\n //\n // All executions of a well-formed vertex shader should write a value into this variable. It can be\n // written at any time during shader execution. It may also be read back by the shader after being written.\n // Compilers may generate a diagnostic message if they detect `gl_Position` is not written, or read before\n // being written, but not all such cases are detectable. The value of `gl_Position` is undefined if a vertex\n // shader is executed and does not write `gl_Position`.\n highp vec4 gl_Position;\n\n // The variable `gl_PointSize` is available only in the vertex language and is intended for\n // a vertex shader to write the size of the point to be rasterized. It is measured in pixels.\n mediump float gl_PointSize;\n\n const int gl_MaxVertexAttribs;\n const int gl_MaxVertexUniformVectors;\n const int gl_MaxVaryingVectors;\n const int gl_MaxVertexTextureImageUnits;\n const int gl_MaxCombinedTextureImageUnits;\n const int gl_MaxTextureImageUnits;\n const int gl_MaxFragmentUniformVectors;\n const int gl_MaxDrawBuffers;\n\n // The fragment shader has access to the read-only built-in variable `gl_FrontFacing` whose value is `true` if\n // the fragment belongs to a front-facing primitive. One use of this is to emulate two-sided lighting by\n // selecting one of two colors calculated by the vertex shader.\n const bool gl_FrontFacing;\n\n // The fragment shader has access to the read-only built-in variable `gl_PointCoord`. The values in\n // `gl_PointCoord` are two-dimensional coordinates indicating where within a point primitive the current\n // fragment is located. They range from 0.0 to 1.0 across the point. If the current primitive is not a\n // point, then the values read from `gl_PointCoord` are undefined.\n const mediump vec2 gl_PointCoord;\n\n // The variable `gl_FragCoord` is available as a read-only variable from within fragment shaders and it holds\n // the window relative coordinates `x`, `y`, `z`, and `1/w` values for the fragment. This value is the result\n // of the fixed functionality that interpolates primitives after vertex processing to generate fragments. The `z`\n // component is the depth value that will be used for the fragment's depth.\n const mediump vec4 gl_FragCoord;\n\n // Writing to `gl_FragColor` specifies the fragment color that will be used by the subsequent fixed\n // functionality pipeline.\n //\n // If subsequent fixed functionality consumes fragment color and an execution of a fragment shader\n // does not write a value to `gl_FragColor` then the fragment color consumed is undefined.\n mediump vec4 gl_FragColor;\n\n // The variable `gl_FragData` is an array. Writing to `gl_FragData[n]` specifies the fragment data that will be\n // used by the subsequent fixed functionality pipeline for data `n`.\n //\n // If subsequent fixed functionality consumes fragment data and an execution of a fragment shader does not write\n // a value to it, then the fragment data consumed is undefined.\n mediump vec4 gl_FragData[gl_MaxDrawBuffers];\n\n // Depth range in window coordinates\n struct gl_DepthRangeParameters {\n float near;\n float far;\n // Equal to `far - near`\n float diff;\n };\n\n uniform gl_DepthRangeParameters gl_DepthRange;\n\n ////////////////////////////////////////////////////////////////////////////////\n // Angle and Trigonometry Functions\n\n // Converts `degrees` to radians, i.e. `π / 180 * degrees`\n float radians(float degrees);\n // Converts `degrees` to radians, i.e. `π / 180 * degrees`\n vec2 radians(vec2 degrees);\n // Converts `degrees` to radians, i.e. `π / 180 * degrees`\n vec3 radians(vec3 degrees);\n // Converts `degrees` to radians, i.e. `π / 180 * degrees`\n vec4 radians(vec4 degrees);\n\n // Converts `radians` to degrees, i.e. `180 / π * radians`\n float degrees(float radians);\n // Converts `radians` to degrees, i.e. `180 / π * radians`\n vec2 degrees(vec2 radians);\n // Converts `radians` to degrees, i.e. `180 / π * radians`\n vec3 degrees(vec3 radians);\n // Converts `radians` to degrees, i.e. `180 / π * radians`\n vec4 degrees(vec4 radians);\n\n // The standard trigonometric sine function.\n float sin(float angle);\n // The standard trigonometric sine function.\n vec2 sin(vec2 angle);\n // The standard trigonometric sine function.\n vec3 sin(vec3 angle);\n // The standard trigonometric sine function.\n vec4 sin(vec4 angle);\n\n // The standard trigonometric cosine function.\n float cos(float angle);\n // The standard trigonometric cosine function.\n vec2 cos(vec2 angle);\n // The standard trigonometric cosine function.\n vec3 cos(vec3 angle);\n // The standard trigonometric cosine function.\n vec4 cos(vec4 angle);\n\n // The standard trigonometric tangent.\n float tan(float angle);\n // The standard trigonometric tangent.\n vec2 tan(vec2 angle);\n // The standard trigonometric tangent.\n vec3 tan(vec3 angle);\n // The standard trigonometric tangent.\n vec4 tan(vec4 angle);\n\n // Arc sine. Returns an angle whose sine is `x`. The range of values returned by this function is `[-π/2, π/2]`. Results are undefined if `∣x∣>1`.\n float asin(float x);\n // Arc sine. Returns an angle whose sine is `x`. The range of values returned by this function is `[-π/2, π/2]`. Results are undefined if `∣x∣>1`.\n vec2 asin(vec2 x);\n // Arc sine. Returns an angle whose sine is `x`. The range of values returned by this function is `[-π/2, π/2]`. Results are undefined if `∣x∣>1`.\n vec3 asin(vec3 x);\n // Arc sine. Returns an angle whose sine is `x`. The range of values returned by this function is `[-π/2, π/2]`. Results are undefined if `∣x∣>1`.\n vec4 asin(vec4 x);\n\n // Arc cosine. Returns an angle whose cosine is `x`. The range of values returned by this function is `[0, π]`. Results are undefined if `∣x∣>1`.\n float acos(float x);\n // Arc cosine. Returns an angle whose cosine is `x`. The range of values returned by this function is `[0, π]`. Results are undefined if `∣x∣>1`.\n vec2 acos(vec2 x);\n // Arc cosine. Returns an angle whose cosine is `x`. The range of values returned by this function is `[0, π]`. Results are undefined if `∣x∣>1`.\n vec3 acos(vec3 x);\n // Arc cosine. Returns an angle whose cosine is `x`. The range of values returned by this function is `[0, π]`. Results are undefined if `∣x∣>1`.\n vec4 acos(vec4 x);\n\n // Arc tangent. Returns an angle whose tangent is `y/x`. The signs of `x` and `y` are used to determine what quadrant the\n // angle is in. The range of values returned by this function is `[−π,π]`. Results are undefined if `x` and `y` are both 0.\n float atan(float y, float x);\n // Arc tangent. Returns an angle whose tangent is `y/x`. The signs of `x` and `y` are used to determine what quadrant the\n // angle is in. The range of values returned by this function is `[−π,π]`. Results are undefined if `x` and `y` are both 0.\n vec2 atan(vec2 y, vec2 x);\n // Arc tangent. Returns an angle whose tangent is `y/x`. The signs of `x` and `y` are used to determine what quadrant the\n // angle is in. The range of values returned by this function is `[−π,π]`. Results are undefined if `x` and `y` are both 0.\n vec3 atan(vec3 y, vec3 x);\n // Arc tangent. Returns an angle whose tangent is `y/x`. The signs of `x` and `y` are used to determine what quadrant the\n // angle is in. The range of values returned by this function is `[−π,π]`. Results are undefined if `x` and `y` are both 0.\n vec4 atan(vec4 y, vec4 x);\n\n // Arc tangent. Returns an angle whose tangent is `y_over_x`. The range of values returned by this function is `[-π/2, π/2]`.\n float atan(float y_over_x);\n // Arc tangent. Returns an angle whose tangent is `y_over_x`. The range of values returned by this function is `[-π/2, π/2]`.\n vec2 atan(vec2 y_over_x);\n // Arc tangent. Returns an angle whose tangent is `y_over_x`. The range of values returned by this function is `[-π/2, π/2]`.\n vec3 atan(vec3 y_over_x);\n // Arc tangent. Returns an angle whose tangent is `y_over_x`. The range of values returned by this function is `[-π/2, π/2]`.\n vec4 atan(vec4 y_over_x);\n\n ////////////////////////////////////////////////////////////////////////////////\n // Exponential Functions\n\n // Returns `x` raised to the `y` power, i.e., `xʸ`. Results are undefined if `x < 0`. Results are undefined if `x = 0` and `y <= 0`.\n float pow(float x, float y);\n // Returns `x` raised to the `y` power, i.e., `xʸ`. Results are undefined if `x < 0`. Results are undefined if `x = 0` and `y <= 0`.\n vec2 pow(vec2 x, vec2 y);\n // Returns `x` raised to the `y` power, i.e., `xʸ`. Results are undefined if `x < 0`. Results are undefined if `x = 0` and `y <= 0`.\n vec3 pow(vec3 x, vec3 y);\n // Returns `x` raised to the `y` power, i.e., `xʸ`. Results are undefined if `x < 0`. Results are undefined if `x = 0` and `y <= 0`.\n vec4 pow(vec4 x, vec4 y);\n\n // Returns the natural exponentiation of `x`, i.e., `eˣ`\n float exp(float x);\n // Returns the natural exponentiation of `x`, i.e., `eˣ`\n vec2 exp(vec2 x);\n // Returns the natural exponentiation of `x`, i.e., `eˣ`\n vec3 exp(vec3 x);\n // Returns the natural exponentiation of `x`, i.e., `eˣ`\n vec4 exp(vec4 x);\n\n // Returns the natural logarithm of `x`, i.e., returns the value `y` which satisfies the equation `x = eʸ`. Results are undefined if `x <= 0`.\n float log(float x);\n // Returns the natural logarithm of `x`, i.e., returns the value `y` which satisfies the equation `x = eʸ`. Results are undefined if `x <= 0`.\n vec2 log(vec2 x);\n // Returns the natural logarithm of `x`, i.e., returns the value `y` which satisfies the equation `x = eʸ`. Results are undefined if `x <= 0`.\n vec3 log(vec3 x);\n // Returns the natural logarithm of `x`, i.e., returns the value `y` which satisfies the equation `x = eʸ`. Results are undefined if `x <= 0`.\n vec4 log(vec4 x);\n\n // Returns 2 raised to the `x` power, i.e., `2ˣ`.\n float exp2(float x);\n // Returns 2 raised to the `x` power, i.e., `2ˣ`.\n vec2 exp2(vec2 x);\n // Returns 2 raised to the `x` power, i.e., `2ˣ`.\n vec3 exp2(vec3 x);\n // Returns 2 raised to the `x` power, i.e., `2ˣ`.\n vec4 exp2(vec4 x);\n\n // Returns the base 2 logarithm of `x`, i.e., returns the value `y` which satisfies the equation `x = 2ʸ`. Results are undefined if `x <= 0`.\n float log2(float x);\n // Returns the base 2 logarithm of `x`, i.e., returns the value `y` which satisfies the equation `x = 2ʸ`. Results are undefined if `x <= 0`.\n vec2 log2(vec2 x);\n // Returns the base 2 logarithm of `x`, i.e., returns the value `y` which satisfies the equation `x = 2ʸ`. Results are undefined if `x <= 0`.\n vec3 log2(vec3 x);\n // Returns the base 2 logarithm of `x`, i.e., returns the value `y` which satisfies the equation `x = 2ʸ`. Results are undefined if `x <= 0`.\n vec4 log2(vec4 x);\n\n // Returns `√x`. Results are undefined if `x < 0`.\n float sqrt(float x);\n // Returns `√x`. Results are undefined if `x < 0`.\n vec2 sqrt(vec2 x);\n // Returns `√x`. Results are undefined if `x < 0`.\n vec3 sqrt(vec3 x);\n // Returns `√x`. Results are undefined if `x < 0`.\n vec4 sqrt(vec4 x);\n\n // Returns `1 / √x`. Results are undefined if `x <= 0`.\n float inversesqrt(float x);\n // Returns `1 / √x`. Results are undefined if `x <= 0`.\n vec2 inversesqrt(vec2 x);\n // Returns `1 / √x`. Results are undefined if `x <= 0`.\n vec3 inversesqrt(vec3 x);\n // Returns `1 / √x`. Results are undefined if `x <= 0`.\n vec4 inversesqrt(vec4 x);\n\n ////////////////////////////////////////////////////////////////////////////////\n // Common Functions\n\n // Returns `x` if `x >= 0`, otherwise it returns `-x`.\n float abs(float x);\n // Returns `x` if `x >= 0`, otherwise it returns `-x`.\n vec2 abs(vec2 x);\n // Returns `x` if `x >= 0`, otherwise it returns `-x`.\n vec3 abs(vec3 x);\n // Returns `x` if `x >= 0`, otherwise it returns `-x`.\n vec4 abs(vec4 x);\n\n // Returns `1.0` if `x > 0`, `0.0` if `x = 0`, or `-1.0` if `x < 0`\n float sign(float x);\n // Returns `1.0` if `x > 0`, `0.0` if `x = 0`, or `-1.0` if `x < 0`\n vec2 sign(vec2 x);\n // Returns `1.0` if `x > 0`, `0.0` if `x = 0`, or `-1.0` if `x < 0`\n vec3 sign(vec3 x);\n // Returns `1.0` if `x > 0`, `0.0` if `x = 0`, or `-1.0` if `x < 0`\n vec4 sign(vec4 x);\n\n // Returns a value equal to the nearest integer that is less than or equal to `x`\n float floor(float x);\n // Returns a value equal to the nearest integer that is less than or equal to `x`\n vec2 floor(vec2 x);\n // Returns a value equal to the nearest integer that is less than or equal to `x`\n vec3 floor(vec3 x);\n // Returns a value equal to the nearest integer that is less than or equal to `x`\n vec4 floor(vec4 x);\n\n // Returns a value equal to the nearest integer that is greater than or equal to `x`\n float ceil(float x);\n // Returns a value equal to the nearest integer that is greater than or equal to `x`\n vec2 ceil(vec2 x);\n // Returns a value equal to the nearest integer that is greater than or equal to `x`\n vec3 ceil(vec3 x);\n // Returns a value equal to the nearest integer that is greater than or equal to `x`\n vec4 ceil(vec4 x);\n\n // Returns `x - floor(x)`\n float fract(float x);\n // Returns `x - floor(x)`\n vec2 fract(vec2 x);\n // Returns `x - floor(x)`\n vec3 fract(vec3 x);\n // Returns `x - floor(x)`\n vec4 fract(vec4 x);\n\n // Modulus (modulo). Returns `x - y * floor(x/y)`\n float mod(float x, float y);\n // Modulus (modulo). Returns `x - y * floor(x/y)`\n vec2 mod(vec2 x, float y);\n // Modulus (modulo). Returns `x - y * floor(x/y)`\n vec3 mod(vec3 x, float y);\n // Modulus (modulo). Returns `x - y * floor(x/y)`\n vec4 mod(vec4 x, float y);\n\n // Modulus. Returns `x - y * floor(x/y)`\n vec2 mod(vec2 x, vec2 y);\n // Modulus. Returns `x - y * floor(x/y)`\n vec3 mod(vec3 x, vec3 y);\n // Modulus. Returns `x - y * floor(x/y)`\n vec4 mod(vec4 x, vec4 y);\n\n // Returns `y` if `y < x`, otherwise it returns `x`\n float min(float x, float y);\n // Returns `y` if `y < x`, otherwise it returns `x`\n vec2 min(vec2 x, float y);\n // Returns `y` if `y < x`, otherwise it returns `x`\n vec2 min(vec2 x, vec2 y);\n // Returns `y` if `y < x`, otherwise it returns `x`\n vec3 min(vec3 x, float y);\n // Returns `y` if `y < x`, otherwise it returns `x`\n vec3 min(vec3 x, vec3 y);\n // Returns `y` if `y < x`, otherwise it returns `x`\n vec4 min(vec4 x, float y);\n // Returns `y` if `y < x`, otherwise it returns `x`\n vec4 min(vec4 x, vec4 y);\n\n // Returns `y` if `x < y`, otherwise it returns `x`\n float max(float x, float y);\n // Returns `y` if `x < y`, otherwise it returns `x`\n vec2 max(vec2 x, float y);\n // Returns `y` if `x < y`, otherwise it returns `x`\n vec2 max(vec2 x, vec2 y);\n // Returns `y` if `x < y`, otherwise it returns `x`\n vec3 max(vec3 x, float y);\n // Returns `y` if `x < y`, otherwise it returns `x`\n vec3 max(vec3 x, vec3 y);\n // Returns `y` if `x < y`, otherwise it returns `x`\n vec4 max(vec4 x, float y);\n // Returns `y` if `x < y`, otherwise it returns `x`\n vec4 max(vec4 x, vec4 y);\n\n // Returns `min(max(x, minVal), maxVal)`. Results are undefined if `minVal > maxVal`.\n float clamp(float x, float minVal, float maxVal);\n // Returns `min(max(x, minVal), maxVal)`. Results are undefined if `minVal > maxVal`.\n vec2 clamp(vec2 x, float minVal, float maxVal);\n // Returns `min(max(x, minVal), maxVal)`. Results are undefined if `minVal > maxVal`.\n vec2 clamp(vec2 x, vec2 minVal, vec2 maxVal);\n // Returns `min(max(x, minVal), maxVal)`. Results are undefined if `minVal > maxVal`.\n vec3 clamp(vec3 x, float minVal, float maxVal);\n // Returns `min(max(x, minVal), maxVal)`. Results are undefined if `minVal > maxVal`.\n vec3 clamp(vec3 x, vec3 minVal, vec3 maxVal);\n // Returns `min(max(x, minVal), maxVal)`. Results are undefined if `minVal > maxVal`.\n vec4 clamp(vec4 x, float minVal, float maxVal);\n // Returns `min(max(x, minVal), maxVal)`. Results are undefined if `minVal > maxVal`.\n vec4 clamp(vec4 x, vec4 minVal, vec4 maxVal);\n\n // Returns the linear blend of `x` and `y`, i.e. `x * (1-a) + y * a`\n float mix(float x, float y, float a);\n // Returns the linear blend of `x` and `y`, i.e. `x * (1-a) + y * a`\n vec2 mix(vec2 x, vec2 y, float a);\n // Returns the linear blend of `x` and `y`, i.e. `x * (1-a) + y * a`\n vec2 mix(vec2 x, vec2 y, vec2 a);\n // Returns the linear blend of `x` and `y`, i.e. `x * (1-a) + y * a`\n vec3 mix(vec3 x, vec3 y, float a);\n // Returns the linear blend of `x` and `y`, i.e. `x * (1-a) + y * a`\n vec3 mix(vec3 x, vec3 y, vec3 a);\n // Returns the linear blend of `x` and `y`, i.e. `x * (1-a) + y * a`\n vec4 mix(vec4 x, vec4 y, float a);\n // Returns the linear blend of `x` and `y`, i.e. `x * (1-a) + y * a`\n vec4 mix(vec4 x, vec4 y, vec4 a);\n\n // Returns `0.0` if `x < edge`, otherwise it returns `1.0`\n float step(float edge, float x);\n // Returns `0.0` if `x < edge`, otherwise it returns `1.0`\n vec2 step(float edge, vec2 x);\n // Returns `0.0` if `x < edge`, otherwise it returns `1.0`\n vec2 step(vec2 edge, vec2 x);\n // Returns `0.0` if `x < edge`, otherwise it returns `1.0`\n vec3 step(float edge, vec3 x);\n // Returns `0.0` if `x < edge`, otherwise it returns `1.0`\n vec3 step(vec3 edge, vec3 x);\n // Returns `0.0` if `x < edge`, otherwise it returns `1.0`\n vec4 step(float edge, vec4 x);\n // Returns `0.0` if `x < edge`, otherwise it returns `1.0`\n vec4 step(vec4 edge, vec4 x);\n\n // Returns `0.0` if `x <= edge0` and `1.0` if `x >= edge1` and performs smooth Hermite interpolation between 0 and 1 when `edge0 < x < edge1`.\n // This is useful in cases where you would want a threshold function with a smooth transition. This is equivalent to:\n //\n // ```glslx\n // float t = clamp((x - edge0) / (edge1 - edge0), 0.0, 1.0);\n // return t * t * (3.0 - 2.0 * t);\n // ```\n //\n // Results are undefined if `edge0 >= edge1`.\n float smoothstep(float edge0, float edge1, float x);\n // Returns `0.0` if `x <= edge0` and `1.0` if `x >= edge1` and performs smooth Hermite interpolation between 0 and 1 when `edge0 < x < edge1`.\n // This is useful in cases where you would want a threshold function with a smooth transition. This is equivalent to:\n //\n // ```glslx\n // vec2 t = clamp((x - edge0) / (edge1 - edge0), 0.0, 1.0);\n // return t * t * (3.0 - 2.0 * t);\n // ```\n //\n // Results are undefined if `edge0 >= edge1`.\n vec2 smoothstep(float edge0, float edge1, vec2 x);\n // Returns `0.0` if `x <= edge0` and `1.0` if `x >= edge1` and performs smooth Hermite interpolation between 0 and 1 when `edge0 < x < edge1`.\n // This is useful in cases where you would want a threshold function with a smooth transition. This is equivalent to:\n //\n // ```glslx\n // vec2 t = clamp((x - edge0) / (edge1 - edge0), 0.0, 1.0);\n // return t * t * (3.0 - 2.0 * t);\n // ```\n //\n // Results are undefined if `edge0 >= edge1`.\n vec2 smoothstep(vec2 edge0, vec2 edge1, vec2 x);\n // Returns `0.0` if `x <= edge0` and `1.0` if `x >= edge1` and performs smooth Hermite interpolation between 0 and 1 when `edge0 < x < edge1`.\n // This is useful in cases where you would want a threshold function with a smooth transition. This is equivalent to:\n //\n // ```glslx\n // vec3 t = clamp((x - edge0) / (edge1 - edge0), 0.0, 1.0);\n // return t * t * (3.0 - 2.0 * t);\n // ```\n //\n // Results are undefined if `edge0 >= edge1`.\n vec3 smoothstep(float edge0, float edge1, vec3 x);\n // Returns `0.0` if `x <= edge0` and `1.0` if `x >= edge1` and performs smooth Hermite interpolation between 0 and 1 when `edge0 < x < edge1`.\n // This is useful in cases where you would want a threshold function with a smooth transition. This is equivalent to:\n //\n // ```glslx\n // vec3 t = clamp((x - edge0) / (edge1 - edge0), 0.0, 1.0);\n // return t * t * (3.0 - 2.0 * t);\n // ```\n //\n // Results are undefined if `edge0 >= edge1`.\n vec3 smoothstep(vec3 edge0, vec3 edge1, vec3 x);\n // Returns `0.0` if `x <= edge0` and `1.0` if `x >= edge1` and performs smooth Hermite interpolation between 0 and 1 when `edge0 < x < edge1`.\n // This is useful in cases where you would want a threshold function with a smooth transition. This is equivalent to:\n //\n // ```glslx\n // vec4 t = clamp((x - edge0) / (edge1 - edge0), 0.0, 1.0);\n // return t * t * (3.0 - 2.0 * t);\n // ```\n //\n // Results are undefined if `edge0 >= edge1`.\n vec4 smoothstep(float edge0, float edge1, vec4 x);\n // Returns `0.0` if `x <= edge0` and `1.0` if `x >= edge1` and performs smooth Hermite interpolation between 0 and 1 when `edge0 < x < edge1`.\n // This is useful in cases where you would want a threshold function with a smooth transition. This is equivalent to:\n //\n // ```glslx\n // vec4 t = clamp((x - edge0) / (edge1 - edge0), 0.0, 1.0);\n // return t * t * (3.0 - 2.0 * t);\n // ```\n //\n // Results are undefined if `edge0 >= edge1`.\n vec4 smoothstep(vec4 edge0, vec4 edge1, vec4 x);\n\n ////////////////////////////////////////////////////////////////////////////////\n // Geometric Functions\n\n // Returns the length of vector `x`, i.e. `√x²`\n float length(float x);\n // Returns the length of vector `x`, i.e. `√x[0]² + x[1]²`\n float length(vec2 x);\n // Returns the length of vector `x`, i.e. `√x[0]² + x[1]² + x[2]²`\n float length(vec3 x);\n // Returns the length of vector `x`, i.e. `√x[0]² + x[1]² + x[2]² + x[3]²`\n float length(vec4 x);\n\n // Returns the distance between `p0` and `p1`, i.e. `length(p0 - p1)`\n float distance(float p0, float p1);\n // Returns the distance between `p0` and `p1`, i.e. `length(p0 - p1)`\n float distance(vec2 p0, vec2 p1);\n // Returns the distance between `p0` and `p1`, i.e. `length(p0 - p1)`\n float distance(vec3 p0, vec3 p1);\n // Returns the distance between `p0` and `p1`, i.e. `length(p0 - p1)`\n float distance(vec4 p0, vec4 p1);\n\n // Returns the dot product of `x` and `y`, i.e. `x*y`\n float dot(float x, float y);\n // Returns the dot product of `x` and `y`, i.e. `x[0]*y[0] + x[1]*y[1]`\n float dot(vec2 x, vec2 y);\n // Returns the dot product of `x` and `y`, i.e. `x[0]*y[0] + x[1]*y[1] + x[2]*y[2]`\n float dot(vec3 x, vec3 y);\n // Returns the dot product of `x` and `y`, i.e. `x[0]*y[0] + x[1]*y[1] + x[2]*y[2] + x[3]*y[3]`\n float dot(vec4 x, vec4 y);\n\n // Returns the cross product of `x` and `y`, i.e.\n //\n // ```glslx\n // vec3(\n // x[1]*y[2] - y[1]*x[2],\n // x[2]*y[0] - y[2]*x[0],\n // x[0]*y[1] - y[0]*x[1])\n // ```\n vec3 cross(vec3 x, vec3 y);\n\n // Returns a vector in the same direction as `x` but with a length of 1.\n float normalize(float x);\n // Returns a vector in the same direction as `x` but with a length of 1.\n vec2 normalize(vec2 x);\n // Returns a vector in the same direction as `x` but with a length of 1.\n vec3 normalize(vec3 x);\n // Returns a vector in the same direction as `x` but with a length of 1.\n vec4 normalize(vec4 x);\n\n // If `dot(Nref, I) < 0` return `N`, otherwise return `-N`\n float faceforward(float N, float I, float Nref);\n // If `dot(Nref, I) < 0` return `N`, otherwise return `-N`\n vec2 faceforward(vec2 N, vec2 I, vec2 Nref);\n // If `dot(Nref, I) < 0` return `N`, otherwise return `-N`\n vec3 faceforward(vec3 N, vec3 I, vec3 Nref);\n // If `dot(Nref, I) < 0` return `N`, otherwise return `-N`\n vec4 faceforward(vec4 N, vec4 I, vec4 Nref);\n\n // For the incident vector `I` and surface orientation `N`, returns the reflection direction: `I - 2 * dot(N, I) * N`.\n // `N` must already be normalized in order to achieve the desired result.\n float reflect(float I, float N);\n // For the incident vector `I` and surface orientation `N`, returns the reflection direction: `I - 2 * dot(N, I) * N`.\n // `N` must already be normalized in order to achieve the desired result.\n vec2 reflect(vec2 I, vec2 N);\n // For the incident vector `I` and surface orientation `N`, returns the reflection direction: `I - 2 * dot(N, I) * N`.\n // `N` must already be normalized in order to achieve the desired result.\n vec3 reflect(vec3 I, vec3 N);\n // For the incident vector `I` and surface orientation `N`, returns the reflection direction: `I - 2 * dot(N, I) * N`.\n // `N` must already be normalized in order to achieve the desired result.\n vec4 reflect(vec4 I, vec4 N);\n\n // For the incident vector `I` and surface normal `N`, and the ratio of indices of refraction `eta`, return the refraction vector.\n // The result is computed by:\n //\n // ```glslx\n // float k = 1.0 - eta * eta * (1.0 - dot(N, I) * dot(N, I));\n // if (k < 0.0) return float(0.0);\n // else return eta * I - (eta * dot(N, I) + sqrt(k)) * N;\n // ```\n //\n // The input parameters for the incident vector `I` and the surface normal `N`.\n float refract(float I, float N, float eta);\n // For the incident vector `I` and surface normal `N`, and the ratio of indices of refraction `eta`, return the refraction vector.\n // The result is computed by:\n //\n // ```glslx\n // float k = 1.0 - eta * eta * (1.0 - dot(N, I) * dot(N, I));\n // if (k < 0.0) return vec2(0.0);\n // else return eta * I - (eta * dot(N, I) + sqrt(k)) * N;\n // ```\n //\n // The input parameters for the incident vector `I` and the surface normal `N`.\n vec2 refract(vec2 I, vec2 N, float eta);\n // For the incident vector `I` and surface normal `N`, and the ratio of indices of refraction `eta`, return the refraction vector.\n // The result is computed by:\n //\n // ```glslx\n // float k = 1.0 - eta * eta * (1.0 - dot(N, I) * dot(N, I));\n // if (k < 0.0) return vec3(0.0);\n // else return eta * I - (eta * dot(N, I) + sqrt(k)) * N;\n // ```\n //\n // The input parameters for the incident vector `I` and the surface normal `N`.\n vec3 refract(vec3 I, vec3 N, float eta);\n // For the incident vector `I` and surface normal `N`, and the ratio of indices of refraction `eta`, return the refraction vector.\n // The result is computed by:\n //\n // ```glslx\n // float k = 1.0 - eta * eta * (1.0 - dot(N, I) * dot(N, I));\n // if (k < 0.0) return vec4(0.0);\n // else return eta * I - (eta * dot(N, I) + sqrt(k)) * N;\n // ```\n //\n // The input parameters for the incident vector `I` and the surface normal `N`.\n vec4 refract(vec4 I, vec4 N, float eta);\n\n ////////////////////////////////////////////////////////////////////////////////\n // Matrix Functions\n\n // Multiply matrix `x` by matrix `y` component-wise, i.e., `result[i][j]` is the scalar product of `x[i][j]` and `y[i][j]`.\n // Note: to get linear algebraic matrix multiplication, use the multiply operator (`*`).\n mat2 matrixCompMult(mat2 x, mat2 y);\n // Multiply matrix `x` by matrix `y` component-wise, i.e., `result[i][j]` is the scalar product of `x[i][j]` and `y[i][j]`.\n // Note: to get linear algebraic matrix multiplication, use the multiply operator (`*`).\n mat3 matrixCompMult(mat3 x, mat3 y);\n // Multiply matrix `x` by matrix `y` component-wise, i.e., `result[i][j]` is the scalar product of `x[i][j]` and `y[i][j]`.\n // Note: to get linear algebraic matrix multiplication, use the multiply operator (`*`).\n mat4 matrixCompMult(mat4 x, mat4 y);\n\n ////////////////////////////////////////////////////////////////////////////////\n // Vector Relational Functions\n\n // Returns the component-wise compare of `x < y`.\n bvec2 lessThan(ivec2 x, ivec2 y);\n // Returns the component-wise compare of `x < y`.\n bvec2 lessThan(vec2 x, vec2 y);\n // Returns the component-wise compare of `x < y`.\n bvec3 lessThan(ivec3 x, ivec3 y);\n // Returns the component-wise compare of `x < y`.\n bvec3 lessThan(vec3 x, vec3 y);\n // Returns the component-wise compare of `x < y`.\n bvec4 lessThan(ivec4 x, ivec4 y);\n // Returns the component-wise compare of `x < y`.\n bvec4 lessThan(vec4 x, vec4 y);\n\n // Returns the component-wise compare of `x <= y`.\n bvec2 lessThanEqual(ivec2 x, ivec2 y);\n // Returns the component-wise compare of `x <= y`.\n bvec2 lessThanEqual(vec2 x, vec2 y);\n // Returns the component-wise compare of `x <= y`.\n bvec3 lessThanEqual(ivec3 x, ivec3 y);\n // Returns the component-wise compare of `x <= y`.\n bvec3 lessThanEqual(vec3 x, vec3 y);\n // Returns the component-wise compare of `x <= y`.\n bvec4 lessThanEqual(ivec4 x, ivec4 y);\n // Returns the component-wise compare of `x <= y`.\n bvec4 lessThanEqual(vec4 x, vec4 y);\n\n // Returns the component-wise compare of `x > y`.\n bvec2 greaterThan(ivec2 x, ivec2 y);\n // Returns the component-wise compare of `x > y`.\n bvec2 greaterThan(vec2 x, vec2 y);\n // Returns the component-wise compare of `x > y`.\n bvec3 greaterThan(ivec3 x, ivec3 y);\n // Returns the component-wise compare of `x > y`.\n bvec3 greaterThan(vec3 x, vec3 y);\n // Returns the component-wise compare of `x > y`.\n bvec4 greaterThan(ivec4 x, ivec4 y);\n // Returns the component-wise compare of `x > y`.\n bvec4 greaterThan(vec4 x, vec4 y);\n\n // Returns the component-wise compare of `x >= y`.\n bvec2 greaterThanEqual(ivec2 x, ivec2 y);\n // Returns the component-wise compare of `x >= y`.\n bvec2 greaterThanEqual(vec2 x, vec2 y);\n // Returns the component-wise compare of `x >= y`.\n bvec3 greaterThanEqual(ivec3 x, ivec3 y);\n // Returns the component-wise compare of `x >= y`.\n bvec3 greaterThanEqual(vec3 x, vec3 y);\n // Returns the component-wise compare of `x >= y`.\n bvec4 greaterThanEqual(ivec4 x, ivec4 y);\n // Returns the component-wise compare of `x >= y`.\n bvec4 greaterThanEqual(vec4 x, vec4 y);\n\n // Returns the component-wise compare of `x == y`.\n bvec2 equal(bvec2 x, bvec2 y);\n // Returns the component-wise compare of `x == y`.\n bvec2 equal(ivec2 x, ivec2 y);\n // Returns the component-wise compare of `x == y`.\n bvec2 equal(vec2 x, vec2 y);\n // Returns the component-wise compare of `x == y`.\n bvec3 equal(bvec3 x, bvec3 y);\n // Returns the component-wise compare of `x == y`.\n bvec3 equal(ivec3 x, ivec3 y);\n // Returns the component-wise compare of `x == y`.\n bvec3 equal(vec3 x, vec3 y);\n // Returns the component-wise compare of `x == y`.\n bvec4 equal(bvec4 x, bvec4 y);\n // Returns the component-wise compare of `x == y`.\n bvec4 equal(ivec4 x, ivec4 y);\n // Returns the component-wise compare of `x == y`.\n bvec4 equal(vec4 x, vec4 y);\n\n // Returns the component-wise compare of `x != y`.\n bvec2 notEqual(bvec2 x, bvec2 y);\n // Returns the component-wise compare of `x != y`.\n bvec2 notEqual(ivec2 x, ivec2 y);\n // Returns the component-wise compare of `x != y`.\n bvec2 notEqual(vec2 x, vec2 y);\n // Returns the component-wise compare of `x != y`.\n bvec3 notEqual(bvec3 x, bvec3 y);\n // Returns the component-wise compare of `x != y`.\n bvec3 notEqual(ivec3 x, ivec3 y);\n // Returns the component-wise compare of `x != y`.\n bvec3 notEqual(vec3 x, vec3 y);\n // Returns the component-wise compare of `x != y`.\n bvec4 notEqual(bvec4 x, bvec4 y);\n // Returns the component-wise compare of `x != y`.\n bvec4 notEqual(ivec4 x, ivec4 y);\n // Returns the component-wise compare of `x != y`.\n bvec4 notEqual(vec4 x, vec4 y);\n\n // Returns true if any component of `x` is `true`.\n bool any(bvec2 x);\n // Returns true if any component of `x` is `true`.\n bool any(bvec3 x);\n // Returns true if any component of `x` is `true`.\n bool any(bvec4 x);\n\n // Returns true only if all components of `x` are `true`.\n bool all(bvec2 x);\n // Returns true only if all components of `x` are `true`.\n bool all(bvec3 x);\n // Returns true only if all components of `x` are `true`.\n bool all(bvec4 x);\n\n // Returns the component-wise logical complement of `x`.\n bvec2 not(bvec2 x);\n // Returns the component-wise logical complement of `x`.\n bvec3 not(bvec3 x);\n // Returns the component-wise logical complement of `x`.\n bvec4 not(bvec4 x);\n\n ////////////////////////////////////////////////////////////////////////////////\n // Texture Lookup Functions\n\n // Use the texture coordinate `coord` to do a texture lookup in the 2D texture currently bound to `sampler`.\n vec4 texture2D(sampler2D sampler, vec2 coord);\n // Use the texture coordinate `coord` to do a texture lookup in the 2D texture currently bound to `sampler`.\n vec4 texture2D(sampler2D sampler, vec2 coord, float bias);\n // Use the texture coordinate `coord` to do a texture lookup in the 2D texture currently bound to `sampler`.\n vec4 texture2DLod(sampler2D sampler, vec2 coord, float lod);\n // Use the texture coordinate `coord` to do a texture lookup in the 2D texture currently bound to `sampler`.\n // The texture coordinate `(coord.s, coord.t)` is divided by the last component of `coord`.\n vec4 texture2DProj(sampler2D sampler, vec3 coord);\n // Use the texture coordinate `coord` to do a texture lookup in the 2D texture currently bound to `sampler`.\n // The texture coordinate `(coord.s, coord.t)` is divided by the last component of `coord`.\n vec4 texture2DProj(sampler2D sampler, vec3 coord, float bias);\n // Use the texture coordinate `coord` to do a texture lookup in the 2D texture currently bound to `sampler`.\n // The texture coordinate `(coord.s, coord.t)` is divided by the last component of `coord`.\n vec4 texture2DProjLod(sampler2D sampler, vec3 coord, float lod);\n // Use the texture coordinate `coord` to do a texture lookup in the 2D texture currently bound to `sampler`.\n // The texture coordinate `(coord.s, coord.t)` is divided by the last component of `coord`. The third component of `coord` is ignored.\n vec4 texture2DProj(sampler2D sampler, vec4 coord);\n // Use the texture coordinate `coord` to do a texture lookup in the 2D texture currently bound to `sampler`.\n // The texture coordinate `(coord.s, coord.t)` is divided by the last component of `coord`. The third component of `coord` is ignored.\n vec4 texture2DProj(sampler2D sampler, vec4 coord, float bias);\n // Use the texture coordinate `coord` to do a texture lookup in the 2D texture currently bound to `sampler`.\n // The texture coordinate `(coord.s, coord.t)` is divided by the last component of `coord`. The third component of `coord` is ignored.\n vec4 texture2DProjLod(sampler2D sampler, vec4 coord, float lod);\n\n // Use the texture coordinate `coord` to do a texture lookup in the cube map texture currently bound to `sampler`.\n // The direction of `coord` is used to select which face to do a 2-dimensional texture lookup in.\n vec4 textureCube(samplerCube sampler, vec3 coord);\n // Use the texture coordinate `coord` to do a texture lookup in the cube map texture currently bound to `sampler`.\n // The direction of `coord` is used to select which face to do a 2-dimensional texture lookup in.\n vec4 textureCube(samplerCube sampler, vec3 coord, float bias);\n // Use the texture coordinate `coord` to do a texture lookup in the cube map texture currently bound to `sampler`.\n // The direction of `coord` is used to select which face to do a 2-dimensional texture lookup in.\n vec4 textureCubeLod(samplerCube sampler, vec3 coord, float lod);\n\n #extension GL_OES_standard_derivatives {\n // Available only in the fragment shader, this function returns the partial derivative of expression `p` with respect to the window `x` coordinate.\n //\n // Expressions that imply higher order derivatives such as `dFdx(dFdx(n))` have undefined results, as do mixed-order derivatives such as\n // `dFdx(dFdy(n))`. It is assumed that the expression `p` is continuous and therefore, expressions evaluated via non-uniform control flow may be undefined.\n float dFdx(float v);\n // Available only in the fragment shader, this function returns the partial derivative of expression `p` with respect to the window `x` coordinate.\n //\n // Expressions that imply higher order derivatives such as `dFdx(dFdx(n))` have undefined results, as do mixed-order derivatives such as\n // `dFdx(dFdy(n))`. It is assumed that the expression `p` is continuous and therefore, expressions evaluated via non-uniform control flow may be undefined.\n vec2 dFdx(vec2 v);\n // Available only in the fragment shader, this function returns the partial derivative of expression `p` with respect to the window `x` coordinate.\n //\n // Expressions that imply higher order derivatives such as `dFdx(dFdx(n))` have undefined results, as do mixed-order derivatives such as\n // `dFdx(dFdy(n))`. It is assumed that the expression `p` is continuous and therefore, expressions evaluated via non-uniform control flow may be undefined.\n vec3 dFdx(vec3 v);\n // Available only in the fragment shader, this function returns the partial derivative of expression `p` with respect to the window `x` coordinate.\n //\n // Expressions that imply higher order derivatives such as `dFdx(dFdx(n))` have undefined results, as do mixed-order derivatives such as\n // `dFdx(dFdy(n))`. It is assumed that the expression `p` is continuous and therefore, expressions evaluated via non-uniform control flow may be undefined.\n vec4 dFdx(vec4 v);\n\n // Available only in the fragment shader, this function returns the partial derivative of expression `p` with respect to the window `y` coordinate.\n //\n // Expressions that imply higher order derivatives such as `dFdy(dFdy(n))` have undefined results, as do mixed-order derivatives such as\n // `dFdx(dFdy(n))`. It is assumed that the expression `p` is continuous and therefore, expressions evaluated via non-uniform control flow may be undefined.\n float dFdy(float v);\n // Available only in the fragment shader, this function returns the partial derivative of expression `p` with respect to the window `y` coordinate.\n //\n // Expressions that imply higher order derivatives such as `dFdy(dFdy(n))` have undefined results, as do mixed-order derivatives such as\n // `dFdx(dFdy(n))`. It is assumed that the expression `p` is continuous and therefore, expressions evaluated via non-uniform control flow may be undefined.\n vec2 dFdy(vec2 v);\n // Available only in the fragment shader, this function returns the partial derivative of expression `p` with respect to the window `y` coordinate.\n //\n // Expressions that imply higher order derivatives such as `dFdy(dFdy(n))` have undefined results, as do mixed-order derivatives such as\n // `dFdx(dFdy(n))`. It is assumed that the expression `p` is continuous and therefore, expressions evaluated via non-uniform control flow may be undefined.\n vec3 dFdy(vec3 v);\n // Available only in the fragment shader, this function returns the partial derivative of expression `p` with respect to the window `y` coordinate.\n //\n // Expressions that imply higher order derivatives such as `dFdy(dFdy(n))` have undefined results, as do mixed-order derivatives such as\n // `dFdx(dFdy(n))`. It is assumed that the expression `p` is continuous and therefore, expressions evaluated via non-uniform control flow may be undefined.\n vec4 dFdy(vec4 v);\n\n // Returns the sum of the absolute derivative in `x` and `y` using local differencing for the input argument `p`, i.e. `abs(dFdx(p)) + abs(dFdy(p))`\n float fwidth(float v);\n // Returns the sum of the absolute derivative in `x` and `y` using local differencing for the input argument `p`, i.e. `abs(dFdx(p)) + abs(dFdy(p))`\n vec2 fwidth(vec2 v);\n // Returns the sum of the absolute derivative in `x` and `y` using local differencing for the input argument `p`, i.e. `abs(dFdx(p)) + abs(dFdy(p))`\n vec3 fwidth(vec3 v);\n // Returns the sum of the absolute derivative in `x` and `y` using local differencing for the input argument `p`, i.e. `abs(dFdx(p)) + abs(dFdy(p))`\n vec4 fwidth(vec4 v);\n }\n\n #extension GL_EXT_frag_depth {\n // Available only in the fragment language, `gl_FragDepthEXT` is an output variable that is used to establish the depth value for the current fragment.\n // If depth buffering is enabled and no shader writes to `gl_FragDepthEXT`, then the fixed function value for depth will be used (this value is contained\n // in the `z` component of `gl_FragCoord`) otherwise, the value written to `gl_FragDepthEXT` is used.\n //\n // If a shader statically assigns to `gl_FragDepthEXT`, then the value of the fragment's depth may be undefined for executions of the shader that take\n // that path. That is, if the set of linked fragment shaders statically contain a write to `gl_FragDepthEXT`, then it is responsible for always writing it.\n float gl_FragDepthEXT;\n }\n\n #extension GL_EXT_shader_texture_lod {\n vec4 texture2DGradEXT(sampler2D sampler, vec2 P, vec2 dPdx, vec2 dPdy);\n vec4 texture2DLodEXT(sampler2D sampler, vec2 coord, float lod);\n vec4 texture2DProjGradEXT(sampler2D sampler, vec3 P, vec2 dPdx, vec2 dPdy);\n vec4 texture2DProjGradEXT(sampler2D sampler, vec4 P, vec2 dPdx, vec2 dPdy);\n vec4 texture2DProjLodEXT(sampler2D sampler, vec3 coord, float lod);\n vec4 texture2DProjLodEXT(sampler2D sampler, vec4 coord, float lod);\n vec4 textureCubeGradEXT(samplerCube sampler, vec3 P, vec3 dPdx, vec3 dPdy);\n vec4 textureCubeLodEXT(samplerCube sampler, vec3 coord, float lod);\n }\n}\n");
6
+ return xc(a,e,0),b.unshift(e),c?1:0}function Lf(a,b,c){if(a.d)return null;for(var k=0,q=b.length;k<q;k=k+1|0){var d=b[k];xc(a,d,0)}for(var e=ie(a,b),f=new Gi(0),h=new Ti(1,null),m=new qi(c.e),l=new Ri(a,m,e),g=[],v=0,u=b.length;v<u;v=v+1|0){var i=b[v],n=Nd(a,i.c,f,m,h,l);Kf(g,n.a)}return Sd(l,f),new ti(f,g)}function je(a,b,c){if(a.d)return null;for(var S=0,ca=b.length;S<ca;S=S+1|0){var d=b[S];xc(a,d,0)}for(var e=ie(a,b),f=new Gi(0),h=new Ti(1,null),m=new qi(c.e),l=new Ri(a,m,e),ba=0,V=b.length;ba<V;ba=ba+1|0){var g=b[ba];Nd(a,g.c,f,m,h,l)}if(Sd(l,f),a.d)return null;for(var i=[],n=[],ja=0,ua=Mf(h),Na=ua.length;ja<Na;ja=ja+1|0){for(var k=ua[ja],q=new Gi(0),v=new Ti(1,null),u=new qi(c.e),C=new Fi,p=new Ri(C,u,e),da=0,ga=b.length;da<ga;da=da+1|0){var N=b[da];Nd(C,N.c,q,u,v,p)}Sd(p,q),Nf(v,k),nh(q,u,c,e),n.push(q),i.push(new ri(k.c,'',rh(k.e))),e^1||Of(q,k)}for(var y=ah(new Pi(c.c),n),Q=0,na=i.length;Q<na;Q=Q+1|0)i[Q].b=new vi(n[Q],c).a;return new si(i,y)}function Mf(a){for(var b=[],d=0,e=Array.from(a.c.values()),f=e.length;d<f;d=d+1|0){
7
+ var c=e[d];c instanceof wc&&c.e&49152&&b.push(c)}return b}function Nf(a,b){for(var e=0,f=Array.from(a.c.values()),h=f.length;e<h;e=e+1|0){var c=f[e];if(c.a^b.a)c.e&=-49153;else{c.c='main';var d=c.u;d&&(d.c=c.c)}}}function Of(a,b){var c=(b.e&16384)!=0,d=(b.e&32768)!=0;if(c!=d)for(var e=a.g;e;e=e.k)if(e.b==17){var f=e.h|0;f&64&&Y(e,f&-65|(d?32:1024))}}function Pf(c,a){var b=a.l;c.b.push(c.b.length==0||rd(c.b)),b&&Je(b.b)&&c.a.push(!1)}function Qf(d,a){var b=a.l,c=d.b.pop();c&&(a.q=!0),b&&Je(b.b)&&!d.a.pop()&&(b.b==19&&Va(b.g)||b.b==7&&Va(b.i)||b.b==10&&(!Ja(b)||Va(Ja(b))))&&tb(d.b,!1)}function ke(e,a){if(rd(e.b))switch(a.b){case 4:e.a.length&&tb(e.a,!0),tb(e.b,!1);break;case 15:case 6:case 5:tb(e.b,!1);break;case 12:var b=a.g,c=a.g.k,d=a.g.k.k;Va(b)?c.q||tb(e.b,!1):Rb(b)&&d?d.q||tb(e.b,!1):c&&d&&!c.q&&!d.q&&tb(e.b,!1);break}}function Rf(a,b){return le(a)||le(b)||a.b!=b.b&&(a.b==18||a.b==14||b.b==14||a.b==9||b.b==9)}function le(a){return a.b==11&&a.e.q!=null}function me(a,b){var c=a.toString(),d=a.toExponential();
8
+ d.length<c.length&&(c=d);var e=c.indexOf('e'),f='';return ~e&&(f=c.slice(e),c=c.slice(0,e)),c=(+(+c).toFixed(6)).toString(),f==''&&c.indexOf('.')==-1&&(c+=b^1?'.0':'.'),b==1&&c.startsWith('0.')&&c!='0.'&&(c=c.slice(1)),b==1&&c.startsWith('-0.')&&c!='-0.'&&(c='-'+c.slice(2)),c+f}function Sf(b,a){switch(a.b){case 11:case 16:return (a.e.e&65536)!=0;case 17:return ((a.h|0)&65536)!=0}return!1}function td(a){a.f||(a.b+=a.c)}function ud(a){a.f||(a.b=a.b.slice(a.c.length))}function bb(i,a){switch(a.b){case 3:if(!a.g&&a.l)i.a+=';';else{i.a+='{'+i.d,td(i);for(var b=a.g;b;b=b.k)i.a+=i.b,bb(i,b),i.a+=i.d;ud(i),i.a+=i.b+'}'}break;case 4:i.a+='break;';break;case 5:i.a+='continue;';break;case 6:i.a+='discard;';break;case 7:i.a+='do',nc(i,a.g,0),i.a+=i.d+i.b+'while'+i.e+'(',P(i,a.i,0),i.a+=');';break;case 8:P(i,a.g,0),i.a+=';';break;case 9:ne(i),i.a+='#extension '+a.m+i.e+':'+i.e;switch(a.h|0){case 1:i.a+='disable';break;case 2:i.a+='enable';break;case 3:i.a+='require';break;case 4:i.a+='warn';break}oe(i);break;case 10:i.a+='for'+i.e+'(',
9
+ yb(a)?yb(a).b^17?(P(i,yb(a),0),i.a+=';'):bb(i,yb(a)):i.a+=';',Ja(a)&&(i.a+=i.e,P(i,Ja(a),0)),i.a+=';',Zc(a)&&(i.a+=i.e,P(i,Zc(a),0)),i.a+=')',nc(i,a.i,1);break;case 11:var c=a.e;i.a+=hb(c.e,i.e),P(i,c.k,0),i.a+=' ',i.a+=c.c,i.a+='(';for(var n=0,k=c.n,q=k.length;n<q;n=n+1|0){var d=k[n];d!=c.n[0]&&(i.a+=','+i.e),i.a+=hb(d.e,i.e),P(i,d.p,0),i.a+=' ',vd(i,d)}i.a+=')',c.q?(i.a+=i.e,bb(i,c.q)):i.a+=';';break;case 12:i.a+='if'+i.e+'(',P(i,a.g,0),i.a+=')',nc(i,a.g.k,1),a.g.k.k&&(i.a+=i.d+i.b+'else',a.g.k.k.b^12?nc(i,a.g.k.k,0):(i.a+=' ',bb(i,a.g.k.k)));break;case 14:i.a+='precision ',i.a+=hb(a.h|0,i.e),P(i,a.g,0),i.a+=';';break;case 15:var e=a.g;i.a+='return',e&&(Dg(e.b)||(i.a+=' '),P(i,e,0)),i.a+=';';break;case 16:var f=a.e;i.a+=hb(f.e,i.e),i.a+='struct '+f.c+i.e+'{'+i.d,td(i);for(var h=a.g.g;h;h=h.k)i.a+=i.b,bb(i,h),i.a+=i.d;if(ud(i),i.a+=i.b+'}',a.g.k)for(var m=a.g.k.g.k;m;m=m.k)i.a+=m.n.n?','+i.e:i.e,vd(i,m.e);i.a+=';';break;case 17:i.a+=hb(a.h|0,i.e),P(i,a.g,0);for(var l=a.g.k;l;l=l.k){var g=l.e;i.a+=l.n.n?','+i.e:' ',
10
+ vd(i,g)}i.a+=';';break;case 18:ne(i),i.a+='#version '+a.m,oe(i);break;case 19:i.a+='while'+i.e+'(',P(i,a.g,0),i.a+=')',nc(i,a.i,1);break;default:i.a+=Rh[a.b];break}}function ne(a){a.a!=''&&!a.a.endsWith('\n')&&(a.a+='\n')}function oe(a){a.f&&(a.a+='\n')}function nc(c,a,b){a.b^3?(c.a+=c.f&&!b?' ':c.d,td(c),c.a+=c.b,bb(c,a),ud(c)):(c.a+=c.e,bb(c,a))}function pe(c,a){for(var b=a;b;b=b.k)b!=a&&(c.a+=','+c.e),P(c,b,1)}function vd(b,a){b.a+=a.c,a.y&&(b.a+='[',P(b,a.y,0),b.a+=']'),W(a)&&(b.a+=b.e+'='+b.e,P(b,W(a),1))}function P(d,a,b){switch(a.b){case 20:P(d,a.g,15),d.a+='(',pe(d,a.g.k),d.a+=')';break;case 21:P(d,a.g,16),d.a+='.',d.a+=a.e?a.e.c:a.m;break;case 22:2<b&&(d.a+='('),P(d,a.g,3),d.a+=d.e+'?'+d.e,P(d,a.g.k,2),d.a+=d.e+':'+d.e,P(d,a.i,2),2<b&&(d.a+=')');break;case 23:d.a+=a.e.c;break;case 25:0<b&&(d.a+='('),pe(d,a.g),0<b&&(d.a+=')');break;case 26:var c=a.g;d.a+=sf(a.f).a.c,c&&(d.a+='[',P(d,c,0),d.a+=']');break;case 28:d.a+=(!!a.h).toString();break;case 29:d.a+=me(a.h,d.f?1:0);break;case 30:d.a+=(a.h|0).toString();
11
+ break;case 31:d.a+=(a.h|0)+'u';break;case 48:P(d,a.g,16),d.a+='[',P(d,a.i,0),d.a+=']';break;case 32:Ob(d,'~',a,b);break;case 33:Ob(d,'-',a,b);break;case 34:Ob(d,'!',a,b);break;case 35:Ob(d,'+',a,b);break;case 36:Ob(d,'--',a,b);break;case 37:Ob(d,'++',a,b);break;case 38:qe(d,'--',a,b);break;case 39:qe(d,'++',a,b);break;case 40:K(d,'+',a,b,12);break;case 41:K(d,'&',a,b,12);break;case 42:K(d,'|',a,b,12);break;case 43:K(d,'^',a,b,12);break;case 44:K(d,'/',a,b,13);break;case 45:K(d,'==',a,b,10);break;case 46:K(d,'>',a,b,10);break;case 47:K(d,'>=',a,b,10);break;case 49:K(d,'<',a,b,10);break;case 50:K(d,'<=',a,b,10);break;case 51:K(d,'&&',a,b,5);break;case 52:K(d,'||',a,b,3);break;case 53:K(d,'^^',a,b,4);break;case 54:K(d,'*',a,b,13);break;case 55:K(d,'!=',a,b,10);break;case 56:K(d,'%',a,b,13);break;case 57:K(d,'<<',a,b,12);break;case 58:K(d,'>>',a,b,12);break;case 59:K(d,'-',a,b,12);break;case 60:K(d,'=',a,b,2);break;case 61:K(d,'+=',a,b,2);break;case 62:K(d,'&=',a,b,2);break;case 63:K(d,'|=',a,b,2);break;case 64:K(d,
12
+ '^=',a,b,2);break;case 65:K(d,'/=',a,b,2);break;case 66:K(d,'*=',a,b,2);break;case 67:K(d,'%=',a,b,2);break;case 68:K(d,'<<=',a,b,2);break;case 69:K(d,'>>=',a,b,2);break;case 70:K(d,'-=',a,b,2);break;default:d.a+=Rh[a.b];break}}function Ob(f,a,b,c){var d=b.g,e=d.b;f.a+=a,(a.charCodeAt(0)==45&&(e==33||e==36||Jg(d))||a.charCodeAt(0)==43&&(e==35||e==37))&&(f.a+=' '),P(f,d,14)}function qe(d,a,b,c){P(d,b.g,15),d.a+=a}function K(f,a,b,c,d){var e=Vc(b.b);d<c&&(f.a+='('),P(f,b.g,d+(e|0)|0),f.a+=f.e+a+f.e,P(f,b.i,d+(!e|0)|0),d<c&&(f.a+=')')}function O(a){if(a.f==I)return null;switch(a.b){case 30:case 29:case 28:return Ta(a);case 23:return Tf(a);case 25:return Uf(a);case 22:return Vf(a);case 21:return Wf(a);case 48:return Xf(a);case 20:return Yf(a);case 33:return we(a,function(b){return-b},function(c){return -c|0});case 34:return dg(a,function(d){return!d});case 35:return we(a,function(e){return+e},function(f){return+f});case 40:return xd(a,function(h,m){return h+m},function(l,g){return l+g|0});case 59:return xd(a,function(i,n){
13
+ return i-n},function(k,q){return k-q|0});case 54:return Zf(a);case 44:return xd(a,function(v,u){return u!=0?v/u:0},function(C,p){return p?C/p|0:0});case 45:case 55:return ag(a);case 51:return wd(a,function(N,y){return N&&y});case 52:return wd(a,function(Q,S){return Q||S});case 53:return wd(a,function(ca,ba){return ca!=ba});case 46:return Pc(a,function(V,da){return V>da});case 47:return Pc(a,function(ga,ja){return ga>=ja});case 49:return Pc(a,function(ua,Na){return ua<Na});case 50:return Pc(a,function(na,ka){return na<=ka})}return null}function Tf(a){var b=a.e;if(b&&b.e&4){if(b.h)return Ta(b.h);if(b.C)return s(new Gi(27),a.f)}return null}function Uf(a){for(var b=a.g;b;b=b.k){var c=O(b);if(!c||b==a.i)return c}return null}function Vf(a){var b=O(a.g),c=O(a.g.k),d=O(a.i);return b&&b.b==28&&c&&d?!b.h?d:c:null}function Wf(a){var b=O(a.g);if(b&&b.b==20){var c=b.f,d=a.m;if(bd(c))for(var e=d.length,f=Ka(c),v=0,u=Xd(f),C=u.length;v<C;v=v+1|0){var h=u[v];if(~h.indexOf(d[0])){if(e==1)return r(qc(b,1+h.indexOf(d)|0));for(var m=Yd(T(c),
14
+ e),l=Ca(m),g=0;g<e;g=g+1|0)o(l,Ta(qc(b,1+h.indexOf(d[g])|0)));return l}}else if(c.a&&c.a instanceof vc)for(var i=c.a,n=i.i,k=0,p=n.length;k<p;k=k+1|0){var q=n[k];if(q.c==d)return r(qc(b,1+k|0))}}return null}function Xf(a){var b=O(a.g),c=O(a.i);if(b&&b.b==20&&c&&c.b==30){var d=b.f;if(bd(d)){var e=X(d),f=c.h|0;if(-1<f&&f<e)return r(qc(b,f+1|0))}else if(xa(d)){var h=X(d),m=c.h|0;if(-1<m&&m<h){for(var l=wa(d),g=Ca(l),i=qc(b,mi(m,h)),n=0;n<h;n=n+1|0)o(g,r(i.k));return g}}}return null}function Yf(a){var b=a.g;if(a.f==fa&&b.b==21&&b.m=='length'&&Wc(a)){var c=b.g.f;if(c.b&&c.c>0)return s(s(Y(new Gi(30),c.c),fa),fa)}if(b.b^26)return null;for(var d=b.f,e=T(d),f=0,h=0,m=[],l=0,g=b.k;g;g=g.k){var i=O(g);if(!i)return null;if(i.b==20&&e&&T(i.g.f))for(var n=i.g.k;n;n=n.k){var k=re(e,n);if(!k)return null;m.push(k)}else{if(e&&(i=re(e,i),!i))return null;m.push(i)}xa(i.f)&&(f=X(i.f),h=X(wa(i.f))),l=l+1|0}return xa(d)&&f&&h&&l^1?null:T(d)?_f(m,d,xa(d)?f:0,xa(d)?h:0):d.a&&d.a instanceof vc?$f(m,d):null}function Pb(a){for(var b=[],c=a.g.k;c;c=c.k)b.push(c.h);
15
+ return b}function Zf(a){var ka,b=O(a.g),c=O(a.i),d=b&&b.f,e=c&&c.f;if(b&&c){if(d==nb&&e==dc||d==ob&&e==ec||d==pb&&e==fc){for(var f=X(d),h=Ca(d),m=Pb(b),l=Pb(c),g=0;g<f;g=g+1|0){for(var i=0,n=0;n<f;n=n+1|0)i+=m[n]*l[n+mi(g,f)|0];o(h,s(ra(new Gi(29),i),ia))}return h}if(d==dc&&e==nb||d==ec&&e==ob||d==fc&&e==pb){for(var k=X(d),q=Ca(e),v=Pb(b),u=Pb(c),C=0;C<k;C=C+1|0){for(var p=0,N=0;N<k;N=N+1|0)p+=v[C+mi(N,k)|0]*u[N];o(q,s(ra(new Gi(29),p),ia))}return q}if(xa(d)&&e==d){for(var y=X(d),Q=Ca(d),S=Pb(b),ca=Pb(c),ba=0;ba<y;ba=ba+1|0)for(var V=0;V<y;V=V+1|0){for(var da=0,ga=0;ga<y;ga=ga+1|0)da+=S[V+mi(ga,y)|0]*ca[ga+mi(ba,y)|0];o(Q,s(ra(new Gi(29),da),ia))}return Q}return (ka=ue(b,c,function(ja,ua){return ja*ua}))||ve(b,c,function(Na,na){return mi(Na,na)})}return null}function re(a,b){var c=0;switch(b.b){case 28:c=+!!b.h;break;case 30:c=b.h|0;break;case 29:c=b.h;break;default:return null}switch(a){case ha:return s(Ia(new Gi(28),!!c),ha);case fa:return s(Y(new Gi(30),c|0),fa);case ia:return s(ra(new Gi(29),c),ia)}return null}
16
+ function _f(a,b,c,d){var e=Ka(b),f=T(b),h=Ca(b);if(a.length^1){if(c&&d){for(var q=X(b),v=X(wa(b)),u=0;u<q;u=u+1|0)for(var C=0;C<v;C=C+1|0)o(h,u<c&&C<d?a[C+mi(u,d)|0]:s(ra(new Gi(29),u^C?0:1),ia))}else{if(a.length<e)return null;for(var p=0;p<e;p=p+1|0){var N=a[p];if(N.f!=f)return null;o(h,N)}}}else{var m=a[0];if(m.f!=f)return null;if(xa(b)){for(var l=X(b),g=X(wa(b)),i=0;i<l;i=i+1|0)for(var n=0;n<g;n=n+1|0)o(h,n^i?s(ra(new Gi(29),0),ia):Ta(m))}else for(var k=0;k<e;k=k+1|0)o(h,Ta(m))}return wa(b)?h:r(h.i)}function $f(a,b){var c=b.a.i,d=Ca(b);if(a.length^c.length)return null;for(var e=0,f=a.length;e<f;e=e+1|0){if(a[e].f!=ea(c[e]))return null;o(d,a[e])}return d}function ag(a){var b=O(a.g),c=O(a.i);if(b&&c){var d=ta(b,c);return s(Ia(new Gi(28),a.b^45?!d:d),ha)}return null}function se(a,b,c,d){if(a.b==20&&a.g.b==26&&T(a.g.f)==b){for(var e=Ca(a.g.f),f=a.g.k;f;f=f.k){var h=O(f);if(!h||h.b^c)return null;o(e,d(h))}return e}return null}function bg(a,b){return a.b^29?se(a,ia,29,function(c){return s(ra(new Gi(29),b(c.h)),ia)}):s(ra(new Gi(29),
17
+ b(a.h)),ia)}function cg(a,b){return a.b^30?se(a,fa,30,function(c){return s(Y(new Gi(30),b(c.h|0)),fa)}):s(Y(new Gi(30),b(a.h|0)),fa)}function te(a,b,c,d,e){var f=a.b==20&&a.g.b==26&&T(a.g.f)==c,h=b.b==20&&b.g.b==26&&T(b.g.f)==c;if(f&&h&&b.f==a.f){for(var m=Ca(a.f),l=a.g.k,g=b.g.k;l&&g;){var i=O(l),n=O(g);if(!i||i.b^d||!n||n.b^d)return null;o(m,e(i,n)),l=l.k,g=g.k}if(!l&&!g)return m}else if(f&&b.b==d){for(var k=Ca(a.f),q=a.g.k;q;q=q.k){var v=O(q);if(!v||v.b^d)return null;o(k,e(v,b))}return k}else if(a.b==d&&h){for(var u=Ca(b.f),C=b.g.k;C;C=C.k){var p=O(C);if(!p||p.b^d)return null;o(u,e(a,p))}return u}return null}function ue(a,b,c){return a.b==29&&b.b==29?s(ra(new Gi(29),c(a.h,b.h)),ia):te(a,b,ia,29,function(d,e){return s(ra(new Gi(29),c(d.h,e.h)),ia)})}function ve(a,b,c){return a.b==30&&b.b==30?s(Y(new Gi(30),c(a.h|0,b.h|0)),fa):te(a,b,fa,30,function(d,e){return s(Y(new Gi(30),c(d.h|0,e.h|0)),fa)})}function dg(a,b){var c=O(a.g);return c&&c.b==28?s(Ia(new Gi(28),b(!!c.h)),ha):null}function we(a,b,c){var e,d=O(a.g);
18
+ return d&&((e=bg(d,b))||cg(d,c))}function wd(a,b){var c=O(a.g),d=O(a.i);return c&&d&&c.b==28&&d.b==28?s(Ia(new Gi(28),b(!!c.h,!!d.h)),ha):null}function xd(a,b,c){var f,d=O(a.g),e=O(a.i);return d&&e?(f=ue(d,e,b))||ve(d,e,c):null}function Pc(a,b){var c=O(a.g),d=O(a.i);if(c&&d){if(c.b==29&&d.b==29)return s(Ia(new Gi(28),b(c.h,d.h)),ha);if(c.b==30&&d.b==30)return s(Ia(new Gi(28),b(c.h|0,d.h|0)),ha)}return null}function xe(a,b,c){for(var d=0,e=0,f=a.length;e<f;){var h=a.charCodeAt(e);e=e+1|0,Qc(h)&&(d=d+1|0,h==13&&e<f&&a.charCodeAt(e)==10&&(e=e+1|0))}return d>2&&(d=2),mc(c,d)}function eg(a,b,c){switch(c){case 78:switch(b){case 95:return!0;case 126:return!1}break;case 77:switch(b){case 92:return!0;case 126:return!1}break;case 95:if(b==95)return!0;break;case 92:if(b==92)return!0;break;case 115:case 114:if(rf(b)||b==118||b==50)return!1;break;case 111:case 120:case 119:case 118:case 112:return!1;case 117:if(b==113)return!1;break}switch(b){case 115:case 114:case 112:case 79:case 76:return!1;case 95:case 92:switch(a){case 130:case 115:case 114:case 111:case 110:case 120:case 79:case 76:case 32:case 12:
19
+ return!1}if(th(a))return!1;break;case 78:case 77:if(c==126)return!1;break}return!0}function Qc(a){return a==10||a==13}function fg(a){for(var b=0,c=a.length;b<c;b=b+1|0)if(Qc(a.charCodeAt(b)))return!0;return!1}function ye(a){return a==32||a==9}function Rc(a){for(var b=0,c=a.length;b<c;b=b+1|0)if(!ye(a.charCodeAt(b)))return!1;return!0}function gg(a){for(var b=a.length;ye(a.charCodeAt(b-1|0));)b=b-1|0;return a.slice(0,b)}function hg(a,b,c,d){for(var e=[],f=0,h=0,m=a.length;h<m;h=h+1|0){var l=a.charCodeAt(h);Qc(l)&&(e.push(a.slice(f,h)),l==13&&(h+1|0)<m&&a.charCodeAt(h+1|0)==10&&(h=h+1|0),f=h+1|0)}e.push(a.slice(f));for(var g=b.length;g>0&&!Qc(b.charCodeAt(g-1|0));)g=g-1|0;for(var i=b.slice(g),n=i,p=0,N=e.slice(1),y=N.length;p<y;p=p+1|0){var k=N[p];if(!Rc(k)){for(var q=0,v=k.length;q<v&&q<n.length&&k.charCodeAt(q)==n.charCodeAt(q);)q=q+1|0;n=n.slice(0,q)}}for(var u='',Q=0,S=e.length;Q<S;Q=Q+1|0){var C=e[Q];u==''?(Rc(i)&&(u+=i.slice(n.length)),u+=C):(u+=d,Rc(C)||(u+=c+C.slice(n.length)))}return u}function ig(a,b,c,d){
20
+ var e=new Fi,f=new Vi('<stdin>',a);if(xc(e,f,1),e.d)return a;var h='',m=f.c.a,l=130,g=130,i=0,n=0,k=!0,q=0,v=null,u=function(C){return!Rc(a.slice(m[C-1|0].a.c,m[C].a.b))},p=function(N,y){switch(N){case 120:case 117:return!0;case 4:case 9:case 10:case 11:case 12:case 15:case 17:case 32:case 43:return!y}return!1},Q=null,S=function(){for(var ca=1,ba=q;ba<m.length;ba=ba+1|0){switch(m[ba].b){case 0:case 1:continue;case 113:ca=0;break}break}n=n+ca|0,Q(),n=n-ca|0},V=function(){var da=1;return m[q].b==115&&u(q+1|0)&&(da=0),n=n+da|0,v(function(ga){return ga==115})?(n=n-da|0,!0):(n=n-da|0,!1)};Q=function(){for(;v(function(ja){return ja==0||ja==1}););switch(m[q].b){case 130:case 117:return!1;case 75:case 72:case 74:case 73:case 71:v(function(ua){return!0});break;case 17:v(function(Na){return!0}),V()&&S(),m[q].b^12||Q();break;case 15:case 43:v(function(na){return!0}),V()&&S();break;case 11:v(function(ka){return!0}),S(),v(function(qb){return qb==43})&&(V(),v(function(qa){return qa==120}));break;case 12:if(v(function($a){return!0}),
21
+ m[q].b^17)S();else{var La=u(q);La&&(n=n+1|0),v(function(Oa){return!0}),V()&&S(),La&&(n=n-1|0)}break;case 113:case 120:v(function(jb){return!0});break;case 121:case 122:case 123:case 124:for(v(function(Ya){return!0});v(function(za){return!u(q)}););break;default:var Za=rf(m[q].b);if(v(function(Fa){return!0}),Za&&v(function(Ea){return Ea==114}),Za&&v(function(Gb){return Gb==126})&&v(function(kb){return kb==115}))v(function(ab){return ab==113})||v(function(_a){return _a==120});else{for(var lb=!1;!lb&&u(q)&&(lb=!0,n=n+1|0),v(function(Hb){return!p(Hb,!1)}););v(function(Ma){return Ma==120}),lb&&(n=n-1|0)}break}return!0};var hc=function(){for(var rb=[],Ib=q;Ib<m.length;){var $b=m[Ib].b;switch($b){case 113:case 114:case 115:rb.push($b);break;case 117:if(!rb.length)return Ib;if(rb.pop()^113)return-1;break;case 118:if(!rb.length||rb.pop()^114)return-1;break;case 119:if(!rb.length||rb.pop()^115)return-1;break}Ib=Ib+1|0}return-1},sb=-1,Jb=function(){var Db=hc(),ac=Db!=-1&&fg(a.slice(m[q-1|0].a.c,m[Db].a.b));for(ac&&(sb=q),
22
+ n=n+1|0;Q(););n=n-1|0,ac&&(sb=q),v(function(Fc){return Fc==117})},Pa=!1,Kb=function(){var Gc=!Pa;for(Pa=!0,Gc&&(n=n+1|0);v(function(od){return od!=119}););Gc&&(n=n-1|0),v(function(ce){return ce==119})},Kc=function(){var bc=!Pa;for(Pa=!0,bc&&(n=n+1|0);v(function(Hc){return Hc!=118}););bc&&(n=n-1|0),v(function(Ic){return Ic==118})};for(v=function(Eb){var Aa=m[q];if(!Eb(Aa.b)||Aa.b==130)return!1;var mb=sb^q?g^130?xe(a.slice(i,Aa.a.b),b,c):'':'\n';q=q+1|0,h+=mb,mb!=''&&(k=!0,Pa=!1),k?h+=mc(b,n):eg(l,g,Aa.b)&&(h+=' ');var Fb=J(Aa.a);switch(Aa.b){case 0:Fb=gg(Fb);break;case 1:Fb=hg(Fb,a.slice(0,Aa.a.b),mc(b,n),c);break}h+=Fb,l=g,g=Aa.b,i=Aa.a.c,k=!1;switch(Aa.b){case 113:Jb();break;case 115:Kb();break;case 114:Kc();break}return!0};Q()||v(function(ic){return ic!=130}););var Jc=xe(a.slice(i),b,c);switch(d){case 0:Jc!=''&&(h+=c);break;case 2:h!=''&&(h+=c);break}return h}function jg(a){return a.f!=null?new wi(H(a.h)+' '+a.f+';',''):a.d&&new wi(oc(a.d),Sc(a.d.f))}function Tc(b,a){return a.a==b.a&&uc(a,b.b)}function yd(b,a){
23
+ return Tc(b,a.b)?(b.c=z(a),b.d=a,b.e=a.b,!0):!1}function zd(b,a){return yd(b,a)||Sa(b,a.p)||Sa(b,a.y)||Sa(b,W(a))}function kg(c,a){for(var d=0,e=a.n,f=e.length;d<f;d=d+1|0){var b=e[d];if(zd(c,b))return!0}return yd(c,a)||Sa(c,a.k)||Sa(c,a.q)}function lg(c,a){for(var d=0,e=a.i,f=e.length;d<f;d=d+1|0){var b=e[d];if(zd(c,b))return!0}return yd(c,a)}function Sa(c,a){var d;if(!a)return!1;for(var b=a.g;b;b=b.k)if(Sa(c,b))return!0;switch(a.b){case 23:if(Tc(c,a.c))return c.c=a.f,c.d=a.e,c.e=a.c,!0;break;case 26:if(Tc(c,a.c))return c.c=a.f,c.d=((d=c.c).b?d.b:c.c).a,c.e=a.c,!0;break;case 21:if(Tc(c,a.d))return c.c=a.f,bd(a.g.f)?(c.f=a.m,c.h=a.f):c.d=a.e,c.e=a.d,!0;break;case 2:return zd(c,a.e);case 11:return kg(c,a.e);case 16:return lg(c,a.e)}return!1}function Ae(d,a){switch(a.b){case 16:case 11:Be(d,a.e);break;case 17:for(var b=a.g.k;b;b=b.k)Be(d,b.e);break;case 0:for(var c=a.g;c;c=c.k)Ae(d,c);break}}function Be(b,a){a.b&&a.b.a==b.a&&b.b.push(a)}function mg(c,a){var b=new xi(c.a,c.b);Sa(b,a),c.e=b.d,c.e&&(vb(c,a),Ce(c.c),
24
+ Ce(c.d))}function ub(d,a,b,c){b==d.e&&a&&J(a)==d.e.c&&(d.c.push(a),c^1||d.d.push(a))}function Ad(b,a){ub(b,a.b,a,1),vb(b,a.p),vb(b,a.y),vb(b,W(a))}function ng(c,a){ub(c,a.b,a,1),ub(c,a.b,a.u,1),vb(c,a.k),vb(c,a.q);for(var d=0,e=a.n,f=e.length;d<f;d=d+1|0){var b=e[d];Ad(c,b)}}function og(c,a){ub(c,a.b,a,1);for(var d=0,e=a.i,f=e.length;d<f;d=d+1|0){var b=e[d];Ad(c,b)}}function vb(c,a){if(a){for(var b=a.g;b;b=b.k)vb(c,b);switch(a.b){case 23:ub(c,a.c,a.e,0);break;case 21:ub(c,a.d,a.e,0);break;case 26:ub(c,a.c,a.f.a,0);break;case 2:Ad(c,a.e);break;case 11:ng(c,a.e);break;case 16:og(c,a.e);break}}}function pg(d,a){F(d,'keyword','false'),F(d,'keyword','true'),F(d,'keyword','void'),F(d,'keyword','const'),F(d,'keyword','lowp'),F(d,'keyword','mediump'),F(d,'keyword','highp');for(var e=0,f=Lh.length;e<f;e=e+1|0){var b=Lh[e];F(d,'struct',b.a.c).c=oc(b.a)}if(d.a.c.b==1)for(var h=0,m=Mh.length;h<m;h=h+1|0){var c=Mh[h];F(d,'struct',c.a.c).c=oc(c.a)}Cd(d,a)}function Bd(b,a){return a!=null&&a.a==b.a&&uc(a,b.b)}function F(e,a,b){
25
+ var c=null,d=a+':'+b;return e.c.has(d)?c=e.c.get(d):(c=new Ai(a,b),e.d.push(c),Qa(e.c,d,c)),c}function Qb(d,a){var b=a==_d()?'method':a instanceof wc?'function':a instanceof vc?'struct':'variable',c=F(d,b,a.c);c.c!=''?c.c+='\n':c.d=Sc(a.f),c.c+=oc(a)}function Cd(y,a){if(!a)return!1;var b=Bd(y,a.c);switch(a.b){case 0:for(var c=!1,d=a.g;d;d=d.k)if(d.b==11&&Bd(y,d.c)){c=!0;break}c||(F(y,'keyword','@fragment'),F(y,'keyword','@vertex'),F(y,'keyword','#define'),F(y,'keyword','#elif'),F(y,'keyword','#else'),F(y,'keyword','#endif'),F(y,'keyword','#error'),F(y,'keyword','#extension'),F(y,'keyword','#if'),F(y,'keyword','#ifdef'),F(y,'keyword','#ifndef'),F(y,'keyword','#include'),F(y,'keyword','#line'),F(y,'keyword','#pragma'),F(y,'keyword','#undef'),F(y,'keyword','#version 300 es'),F(y,'keyword','invariant'),F(y,'keyword','precision'),F(y,'keyword','uniform'),y.a.c.b^1?(F(y,'keyword','attribute'),F(y,'keyword','varying')):(F(y,'keyword','centroid'),F(y,'keyword','flat'),F(y,'keyword','layout'),F(y,'keyword','location'),
26
+ F(y,'keyword','smooth')));break;case 11:if(Qb(y,a.e),b){var e=a.e;F(y,'keyword','discard'),F(y,'keyword','return');for(var Q=0,S=e.n,ca=S.length;Q<ca;Q=Q+1|0){var f=S[Q];Qb(y,f)}Cd(y,e.q)}break;case 2:Qb(y,a.e);break;case 16:Qb(y,a.e);break;case 10:case 19:case 7:b&&(F(y,'keyword','break'),F(y,'keyword','continue'));break;case 21:var h=a.g;if(b&&!Bd(y,h.c)){y.d=[];var m=h.f;switch(m){case yc:case Bc:case nb:case zc:case Cc:case ob:case Ac:case Dc:case pb:for(var ba=0,V=Xd(Ka(m)),da=V.length;ba<da;ba=ba+1|0)for(var l=V[ba],g=1;g<5;g=g+1|0){for(var i=[],n=0;n<g;n=n+1|0)i.push(0);for(;;){for(var k='',q=0;q<g;q=q+1|0)k+=l[i[q]];var v=Yd(T(m),k.length).a;F(y,'variable',k).c=v.c+' '+k+';';for(var u=0;u<g;){var C=i[u];if((C=C+1|0)^l.length||(C=0),i[u]=C,C)break;u=u+1|0}if(u==g)break}}break;default:if(m.a&&m.a instanceof vc)for(var ga=0,ja=m.a.i,ua=ja.length;ga<ua;ga=ga+1|0){var p=ja[ga];Qb(y,p)}else m.b&&Qb(y,_d());break}return!0}break}if(!a.b||b||a.b==17)for(var N=a.g;N;N=N.k)if(Cd(y,N))return!0;return b}function De(b,a){
27
+ return a!=null&&a.a==b.a&&uc(a,b.b)}function Dd(qa,a){if(!a||a.b&&!De(qa,a.c))return!1;for(var b=a.g;b;b=b.k)if(Dd(qa,b))return!0;switch(a.b){case 11:return Dd(qa,a.e.q),!0;case 20:var c=a.g;if(!De(qa,c.c)){var d=c.k,e=c.f,f=e.a;if(f){for(var h=[],m=d;m;m=m.k)h.push(m);if(f instanceof wc){for(var l=[],g=f;g;g=g.v)~l.indexOf(g.u)||l.push(g);l.reverse();for(var $a=0,La=l.length;$a<La;$a=$a+1|0){var i=l[$a];qa.c.push(new Ci(oc(i),i.n.map(function(n){return pc(n)}),Sc(i.f)))}if(qa.c.length){qa.e=0;for(var k=[],q=0;q<l.length;q=q+1|0)k.push(q);for(var v=h.length;v>0;v=v-1|0){for(var u=[],Oa=0,jb=k,Ya=jb.length;Oa<Ya;Oa=Oa+1|0){var C=jb[Oa];l[C].n.length>=v&&u.push(C)}if(u.length){k=u;break}}if(k.length>1){var p=k.slice();Nb(p,function(N){for(var y=l[N].n,Q=0,za=Math.min(y.length,h.length);Q<za;Q=Q+1|0){var S=ea(y[Q]),ca=h[Q].f;if(ca!=I&&S!=ca)return!0}return!1}),p.length||(p=k.slice(),Nb(p,function(ba){for(var V=l[ba].n,da=0,Za=Math.min(V.length,h.length);da<Za;da=da+1|0){var ga=ea(V[da]),ja=h[da].f,ua=Ka(ga),Na=Ka(ja);
28
+ if(ja!=I&&ga!=ja&&(!ua||!Na||ua^Na))return!0}return!1})),p.length&&(k=p)}k.length&&(qa.e=k[0])}}if(f instanceof vc&&!T(e)){var na=f.i.map(function(ka){return pc(ka)});qa.c.push(new Ci(f.c+'('+na.join(', ')+');',na,Sc(f.f))),qa.e=0}if(h.length){qa.d=0;for(var Fa=0,Ea=h.length;Fa<Ea;Fa=Fa+1|0){var qb=h[Fa];if(qa.b<=qb.c.c||!qb.k)break;qa.d=qa.d+1|0}}return!0}}break}return!1}function ze(a){switch(a.b){case 30:return (a.h|0).toString();case 28:return (!!a.h).toString();case 29:return me(a.h,0);case 20:for(var b=a.g,c=H(a.f)+'(',d=b.k;d;d=d.k)d.n!=b&&(c+=', '),c+=ze(d);return c+')'}return null}function oc(a){if(a instanceof vc){var b=a,c=hb(b.e,' ')+'struct '+a.c;if(b.a>-1){c+=' {\n';for(var i=0,n=b.i,k=n.length;i<k;i=i+1|0){var d=n[i];c+=' '+pc(d)+';\n'}c+='}'}return c+';'}if(a instanceof qf){var e=a,f=pc(e);if(e.h){var h=ze(e.h);h!=null&&(f+=' = '+h)}return f+';'}if(a instanceof wc){for(var m=a,l=hb(m.e,' ')+H(m.k.f)+' '+a.c+'(',q=0,v=m.n,u=v.length;q<u;q=q+1|0){var g=v[q];g!=m.n[0]&&(l+=', '),l+=pc(g)}return l+');'}
29
+ return null}function pc(a){var b=ea(a),c=hb(a.e,' ')+H(b.b||b)+' '+a.c;return b.b&&(c+=b.c>0?'['+b.c+']':'[]'),c}function Sc(a){var b='';if(a)for(var f=0,h=a.length;f<h;f=f+1|0){var c=a[f],d=0,e=c.length;for(c.startsWith('//')?d=d+2|0:c.startsWith('/*')&&(d=d+2|0,e=e-2|0);d<e&&c.charCodeAt(d)==32;)d=d+1|0;for(;e>d&&c.charCodeAt(e-1|0)==32;)e=e-1|0;b!=''&&(b+='\n'),b+=c.slice(d,e)}return b}function Ce(a){var b=null;a.sort(function(c,d){return c.a==d.a?qd(c.b,d.b):Jf(c.a.a,d.a.a)}),Nb(a,function(e){var f=b;return b=e,f!=null&&Zg(b,f)})}function Ee(a,b,c){if(!b)return a+': '+c+'\n';var d=Pd(b,0);return Od(b)+': '+a+': '+c+'\n'+d.a+'\n'+d.b+'\n'}function qg(c){for(var a=new ji,d=0,e=c.a,f=e.length;d<f;d=d+1|0){var b=e[d];a.a+=Ee(b.a?'warning':'error',b.b,b.c),b.d&&(a.a+=Ee('note',b.d,b.e))}return a.a}function t(c,a,b){(!c.e||c.e.b^a.b)&&(c.e=a,c.a.push(new Ei(0,a,b)),c.d=c.d+1|0)}function rg(c,a,b){c.a.push(new Ei(1,a,b)),c.c=c.c+1|0}function wb(d,a,b){var c=rd(d.a);c.d=a,c.e=b}function sg(b,a){t(b,a,'"'+J(a)+'" is a reserved word')}
30
+ function Fe(b,a){t(b,a.a,'Unexpected '+zf[a.b])}function tg(b,a){t(b,a,'There is no symbol called "'+J(a)+'" in the current scope')}function Ed(c,a,b){t(c,a,'There is already a symbol called "'+J(a)+'" in the current scope'),wb(c,b,'The previous definition of "'+J(b)+'" is here')}function ug(f,a,b,c,d,e){t(f,a,'Cannot change the return type of "'+b+'" to type "'+H(c)+'"'),wb(f,e,'The forward declaration of "'+b+'" has a return type of "'+H(d)+'"')}function Ge(b,a){t(b,a,'The operator "'+J(a)+'" is reserved and cannot be used')}function vg(b,a){t(b,a,'Unrecognized version "'+J(a)+'"')}function wg(c,a,b){t(c,Qd($c(a)),'Expected this file to start with "#version 300 es"'),wb(c,Xa(b.c.a[0].a,b.c.a[2].a),'This is expected due to "#version 300 es" here')}function xg(d,a,b,c){t(d,a,'Cannot include file "'+b+'" that uses a different GLSL version');switch(c.c.b){case 0:wb(d,Qd($c(c)),'Add "#version 300 es" to the included file');break;case 1:wb(d,Qd($c(a.a)),'Add "#version 300 es" to the including file');break}}function yg(e,a,b,c,d){
31
+ t(e,a,'The constructor for type "'+H(b)+'" only takes '+c+' argument'+(c^1?'s':'')+' and this argument would bring the total to '+d)}function He(d,a,b,c){t(d,a,'Cannot construct type "'+H(b)+'" with '+c+' argument'+(c^1?'s':''))}function zg(f,a,b,c,d,e){t(f,a,'Expected '+b+' argument'+(b^1?'s':'')+' but found '+c+' argument'+(c^1?'s':'')+' when calling function "'+d+'"'),e&&wb(f,e,'The definition of function "'+d+'" is here')}function Ag(f,a,b,c,d,e){t(f,a,'Expected '+b+' argument'+(b^1?'s':'')+' but found '+c+' argument'+(c^1?'s':'')+' when constructing type "'+d+'"'),e&&wb(f,e,'The definition of struct "'+d+'" is here')}function Bg(c,a,b){b.b?t(c,a,'Cannot use a conditional expression with array type "'+H(b)+'"'):t(c,a,'Cannot use a conditional expression with type "'+H(b)+'" because it contains an array')}function Ie(c,a,b){b.b?t(c,a,'Cannot assign to array type "'+H(b)+'"'):t(c,a,'Cannot assign to type "'+H(b)+'" because it contains an array')}function Cg(e,a,b,c,d){c==d?t(e,a,'There is no operator "'+b+'" defined for type "'+H(c)+'"'):t(e,
32
+ a,'No binary operator "'+b+'" for type "'+H(c)+'" and type "'+H(d)+'"')}function Ke(b,a){b.b=a.b,b.c=a.c,b.d=a.d,b.e=a.e,b.f=a.f,b.h=a.h,b.m=a.m}function Le(b){var a=new Gi(b.b);return Ke(a,b),a}function Id(b){for(var a=Le(b);b.g;)o(a,r(b.g));return a}function Ta(c){for(var a=Le(c),b=c.g;b;b=b.k)o(a,Ta(b));return a}function L(b,a){a!=b&&(Ke(b,a),Hg(b),Gg(b,a))}function Wc(a){return a.g!=null&&a.g==a.i}function Fg(c){for(var a=0,b=c.g;b;b=b.k)a=a+1|0;return a}function qc(c,a){for(var b=c.g;a;)b=b.k,a=a-1|0;return b}function s(b,a){return b.f=a,b}function Xc(b,a){return b.e=a,b}function Ia(b,a){return b.h=+a,b}function Y(b,a){return b.h=a,b}function ra(b,a){return b.h=a,b}function cb(b,a){return b.m=a,b}function w(b,a){return b.c=a,b}function Ua(b,a){return b.d=a,b}function o(b,a){return a?(a.l=b,b.g?(a.n=b.i,b.i.k=a,b.i=a):b.i=b.g=a,b):b}function Gg(b,a){for(;a.g;)o(b,r(a.g));return b}function r(a){return a.n?a.n.k=a.k:a.l.g=a.k,a.k?a.k.n=a.n:a.l.i=a.n,a.l=null,a.n=null,a.k=null,a}function Hg(a){for(;a.g;)r(a.g)}
33
+ function oa(b,a){return a.l=b.l,a.n=b.n,a.k=b.k,b.n?b.n.k=a:b.l.g=a,b.k?b.k.n=a:b.l.i=a,b.l=null,b.n=null,b.k=null,b}function Yc(c,a,b){return b?a?(b.l=c,b.n=a.n,b.k=a,a.n?a.n.k=b:c.g=b,a.n=b,c):o(c,b):c}function Me(a){for(;a.g;)Yc(a.l,a.k,r(a.i));r(a)}function Va(a){return a.b==28&&!!a.h}function Rb(a){return a.b==28&&!!!a.h}function rc(b,a){return b.b==29&&b.h==a||(b.b==30||b.b==31)&&(b.h|0)==a}function Ig(a){return a.l!=null&&a.l.b==20&&a.l.g==a}function Ne(f){if(f.l){if(Hd(f.l.b)||Vc(f.l.b)&&f.l.g==f)return!0;if(f.l.b==20&&f.l.f!=I){var a=f.l.g,b=a.e;if(b&&b instanceof wc)for(var c=b,d=0,e=a.k;e;e=e.k){if(e==f)return (c.n[d].e&64)!=0;d=d+1|0}}}return!1}function Oe(a){return Ne(a)?!0:a.l&&(a.l.b==21||a.l.b==48)?Oe(a.l):!1}function Pe(a){return a.b==3&&a.g==null}function xb(a){return a.b==25&&a.g==null}function Jg(a){return a.b==30&&(a.h|0)<0||a.b==29&&a.h<0}function sa(a){switch(a.b){case 28:case 29:case 30:case 23:return!0;case 22:return sa(a.g)&&sa(a.g.k)&&sa(a.i);case 21:return sa(a.g)}return Gd(a.b)?!Hd(a.b)&&sa(a.g):Uc(a.b)?!Vc(a.b)&&sa(a.g)&&sa(a.i):!1}
34
+ function Sb(a){switch(a.b){case 28:Ia(a,!!!a.h);break;case 34:L(a,r(a.g));break;case 45:a.b=55;break;case 55:a.b=45;break;case 49:a.b=47;break;case 46:a.b=50;break;case 50:a.b=46;break;case 47:a.b=49;break;case 25:Sb(a.i);break;case 52:a.b=51,Sb(a.g),Sb(a.i);break;case 51:a.b=52,Sb(a.g),Sb(a.i);break;default:L(a,s(o(new Gi(34),Id(a)),ha));break}}function ta(d,a){if(d.b==a.b){switch(d.b){case 28:return !!d.h==!!a.h;case 29:return d.h==a.h;case 30:return (d.h|0)==(a.h|0);case 23:return d.e==a.e;case 26:return d.f==a.f;case 21:return ta(d.g,a.g)&&d.e==a.e&&d.m==a.m;case 22:return ta(d.g,a.g)&&ta(d.g.k,a.g.k)&&ta(d.i,a.i);case 20:for(var b=d.g,c=a.g;b&&c;){if(!ta(b,c))return!1;b=b.k,c=c.k}return b==null&&c==null}if(Gd(d.b))return ta(d.g,a.g);if(Uc(d.b))return ta(d.g,a.g)&&ta(d.i,a.i)}return!1}function Qe(a,b,c,d){return o(o(o(o(new Gi(10),a||new Gi(25)),b||new Gi(25)),c||new Gi(25)),d)}function Ca(a){return s(o(new Gi(20),s(new Gi(26),a)),a)}function yb(a){return xb(a.g)?null:a.g}function Ja(a){return xb(a.g.k)?null:a.g.k}
35
+ function Zc(a){return xb(a.i.n)?null:a.i.n}function Re(){return Af=Af+1|0,Af}function R(a,b){va(a,b,0).b=function(c){return eb(c,1)}}function Tb(a){return function(b,c,d){return Ua(w(o(new Gi(a),d),Xa(c.a,d.c)),c.a)}}function Se(a){return function(b,c,d){return Ua(w(o(new Gi(a),c),Xa(c.c,d.a)),d.a)}}function M(a){return function(b,c,d,e){return Ua(w(o(o(new Gi(a),c),e),Xa(c.c,e.c)),d.a)}}function Jd(a){var b=a.length,c=a.charCodeAt(b-1|0);return (c==117||c==85)&&(a=a.slice(0,b-1|0)),a.length>1&&a.charCodeAt(0)==48&&a.charCodeAt(1)^120&&a.charCodeAt(1)^88?parseInt(a,8):a|0}function Kg(a){var b=a==1;if(b){if(Cf)return Cf}else if(Bf)return Bf;var c=new Mi,d=function(e,f,h){return Ge(e.a,f.a),w(s(new Gi(27),I),Xa(f.a,h.c))},m=function(l,g,i,n){return Ge(l.a,i.a),w(s(new Gi(27),I),Xa(g.c,n.c))};return tc(c,36,function(k,q){return w(s(Ia(new Gi(28),!0),ha),q.a)}),tc(c,13,function(v,u){return w(s(Ia(new Gi(28),!1),ha),u.a)}),tc(c,127,function(C,p){return w(s(Y(new Gi(30),Jd(J(p.a))),fa),p.a)}),tc(c,125,function(N,y){
36
+ return w(s(ra(new Gi(29),+J(y.a)),ia),y.a)}),tc(c,128,function(Q,S){return b?w(s(Y(new Gi(31),Jd(J(S.a))),gc),S.a):(Fe(Q.a,S),w(s(new Gi(24),I),S.a))}),R(c,3),R(c,5),R(c,6),R(c,7),R(c,14),R(c,20),R(c,22),R(c,23),R(c,24),R(c,26),R(c,27),R(c,28),R(c,39),R(c,40),R(c,41),R(c,42),R(c,51),R(c,52),R(c,53),R(c,54),R(c,55),R(c,56),R(c,63),R(c,68),R(c,69),R(c,70),Wb(c,76,14,b?Tb(32):d),Wb(c,77,14,Tb(36)),Wb(c,78,14,Tb(37)),Wb(c,92,14,Tb(33)),Wb(c,79,14,Tb(34)),Wb(c,95,14,Tb(35)),cf(c,77,15,Se(38)),cf(c,78,15,Se(39)),Z(c,83,13,M(44)),Z(c,84,10,M(45)),Z(c,85,10,M(46)),Z(c,86,10,M(47)),Z(c,87,10,M(49)),Z(c,88,10,M(50)),Z(c,92,12,M(59)),Z(c,93,13,M(54)),Z(c,94,10,M(55)),Z(c,95,12,M(40)),Z(c,96,13,b?M(56):m),Z(c,97,11,b?M(57):m),Z(c,98,11,b?M(58):m),Z(c,90,3,M(52)),Z(c,91,4,M(53)),Z(c,89,5,M(51)),Z(c,80,8,b?M(41):m),Z(c,81,6,b?M(42):m),Z(c,82,7,b?M(43):m),Da(c,99,2,M(60)),Da(c,100,2,M(61)),Da(c,101,2,b?M(62):m),Da(c,102,2,b?M(63):m),Da(c,103,2,b?M(64):m),Da(c,104,2,M(65)),Da(c,105,2,M(66)),Da(c,106,2,b?M(67):m),Da(c,107,2,b?M(68):m),
37
+ Da(c,108,2,b?M(69):m),Da(c,109,2,M(70)),va(c,126,0).b=function(ca){var ba=eb(ca,0);if(ba)return ba;var V=G(ca),da=J(V.a),ga=Vd(ca.i,da);return ga?(ga.m!=null&&Ga(ca.d.a,ga.m,0)==1&&t(ca.a,V.a,'Cannot use "'+da+'" from disabled extension "'+ga.m+'"'),ga.g=ga.g+1|0,w(Xc(new Gi(23),ga),V.a)):(tg(ca.a,V.a),w(s(new Gi(24),I),V.a))},Z(c,111,1,function(ja,ua,Na,na){return ua.b^25&&(ua=w(o(new Gi(25),ua),ua.c)),o(ua,na),w(ua,D(ja,ua.c))}),va(c,112,16).c=function(ka,qb){var qa=x(ka).a;G(ka);var $a=x(ka).a;return B(ka,126)?Ua(w(cb(o(new Gi(21),qb),J($a)),D(ka,qb.c)),$a):Ua(w(cb(o(new Gi(21),qb),''),D(ka,qb.c)),ef(qa))},va(c,115,0).b=function(La){var Oa=G(La),jb=aa(La.h,La,0);return !jb||!B(La,119)?w(s(new Gi(24),I),D(La,Oa.a)):w(jb,D(La,Oa.a))},va(c,115,15).c=function(Ya,za){var Za=G(Ya),Fa=o(new Gi(20),za);return Lg(Ya,Fa,119)?(za.b==26&&za.f.b&&xb(za.g)&&(za.f=ad(za.f.b,Fg(Fa)-1|0)),Ua(w(Fa,D(Ya,za.c)),D(Ya,Za.a))):w(s(new Gi(24),I),D(Ya,Za.a))},va(c,114,16).c=function(Ea,Gb){var kb=G(Ea);if(x(Ea).b==118)return Wa(Ea),
38
+ G(Ea),w(s(new Gi(24),I),D(Ea,kb.a));var ab=aa(Ea.h,Ea,0);return !ab||!B(Ea,118)?w(s(new Gi(24),I),D(Ea,kb.a)):Ua(w(o(o(new Gi(48),Gb),ab),D(Ea,Gb.c)),D(Ea,kb.a))},va(c,116,2).c=function(_a,lb){var Hb=G(_a),Ma=aa(_a.h,_a,1);if(!Ma||!B(_a,110))return w(s(new Gi(24),I),D(_a,Hb.a));var hc=aa(_a.h,_a,1);return hc?w(o(o(o(new Gi(22),lb),Ma),hc),D(_a,lb.c)):w(s(new Gi(24),I),D(_a,Hb.a))},b?Cf=c:Bf=c,c}function Lg(a,b,c){for(var d=!0;!E(a,c);){d||B(a,111);var e=x(a),f=aa(a.h,a,1);if(f)o(b,f);else if(o(b,w(s(new Gi(24),I),D(a,e.a))),x(a).b^111&&x(a).b^c)return!1;d=!1}return!0}function Mg(a){var b=G(a);a.i=new Ti(3,a.i);var c=db(a,2);if(!c||!B(a,43)||!B(a,115))return null;var d=aa(a.h,a,0);return !d||!B(a,119)?null:(Vb(a),Ub(a,b.a,o(o(new Gi(7),c),d)))}function Ng(a){var b=G(a),c=a.l;if(a.l|=b.b^74?b.b^73?b.b^72?65536:49152:32768:16384,E(a,113)){var d=new Gi(13);return !sc(a,d,1)||!B(a,117)?(a.l=c,null):(a.l=c,w(d,D(a,b.a)))}var e=db(a,1);return e?(a.l=c,e):(a.l=c,null)}function Pg(a){var b=G(a),c=x(a).a;if(!B(a,126))return null;
39
+ var d=J(c);if(E(a,113)){a.d.a.has(d)||Qa(a.d.a,d,0);var e=new Gi(13);if(!sc(a,e,1)||!B(a,117))return null;for(var f=e.g;f;f=f.k)if(f.b^17)f.e&&(f.e.m=d);else for(var h=f.g.k;h;h=h.k)h.e.m=d;return w(e,D(a,b.a))}if(!Yh.has(d)&&!a.d.a.has(d)&&rg(a.a,c,'The extension "'+d+'" is not in the known list of valid WebGL extensions'),!B(a,110))return null;var m=J(x(a).a);if(!Og.has(m))return Wa(a),null;G(a);var l=Og.get(m);return Qa(a.d.a,d,l),Ua(w(Y(cb(new Gi(9),d),l),D(a,b.a)),c)}function Qg(a){var b=G(a);if(a.i=new Ti(3,a.i),!B(a,115))return null;var c=null;if(!E(a,120)){var d=Ve(a),e=Kd(a,2),f=null;if(e){if(f=eb(a,1),!f)return null}else f=eb(a,0);if(f){if(c=Ue(a,b.a,e,f,0,d),!c)return null}else if((c=aa(a.h,a,0),!c)||!B(a,120))return null}var h=null;if(!E(a,120)&&((h=aa(a.h,a,0),!h)||!B(a,120)))return null;var m=null;if(!E(a,119)&&((m=aa(a.h,a,0),!m)||!B(a,119)))return null;var l=db(a,2);return l&&(Vb(a),w(Qe(c,h,m,l),D(a,b.a)))}function Rg(a){var b=G(a);if(!B(a,115))return null;var c=x(a),d=aa(a.h,a,0);if(d||(d=w(s(new Gi(24),
40
+ I),D(a,c.a))),!B(a,119))return null;var e=db(a,2);if(!e)return null;var f=null;return E(a,12)&&(f=db(a,2),!f)?null:w(o(o(o(new Gi(12),d),e),f),D(a,b.a))}function Sg(a){a.g&&t(a.a,x(a).a,'Move "#version" to the beginning of the file');var b=G(a),c=x(a).a;if(!B(a,127))return null;if(J(c)=='100')return w(cb(new Gi(18),'100'),D(a,b.a));if(J(c)=='300'){var d=x(a).a;if(!B(a,126))return null;if(J(d)=='es')return w(cb(new Gi(18),'300 es'),D(a,b.a))}return vg(a.a,c),w(cb(new Gi(18),J(D(a,c))),D(a,b.a))}function Tg(a){var b=G(a);if(a.i=new Ti(3,a.i),!B(a,115))return null;var c=x(a),d=aa(a.h,a,0);if(d||(d=w(s(new Gi(24),I),D(a,c.a))),!B(a,119))return null;var e=db(a,2);return e&&(Vb(a),w(o(o(new Gi(19),d),e),D(a,b.a)))}function Ug(a){var b=G(a),c=null;if(!E(a,120)){var d=x(a);c=aa(a.h,a,0),c||(c=w(s(new Gi(24),I),D(a,d.a))),B(a,120)}return w(o(new Gi(15),c),D(a,b.a))}function Vg(a){var b=G(a),c=0;switch(x(a).b){case 25:c=256;break;case 29:c=512;break;case 16:c=16;break;default:return Wa(a),null}G(a);var d=eb(a,1);return d&&Ub(a,
41
+ b.a,o(Y(new Gi(14),c),d))}function Wg(a,b,c){var d=x(a).a;if(!B(a,126))return null;var e=new vc(Oc(a.d),d,J(d),new Ti(4,a.i));if(e.e|=a.l|b,e.f=c,!Md(a,e))return null;var f=x(a).a,h=new Gi(1),m=null;if(!B(a,113))return null;for(a.i=e.d;x(a).b^117&&x(a).b^130;){var l=db(a,3);if(!l)return null;if(l.b^17)t(a.a,l.c,'This statement cannot be used inside a struct');else{o(h,l);for(var g=l.g.k;g;g=g.k){var i=g.e;e.i.push(i),W(i)&&t(a.a,W(i).c,'Cannot initialize struct variables')}}}if(Vb(a),!B(a,117))return null;if(w(h,D(a,f)),x(a).b^126)B(a,120);else if(m=af(0,s(new Gi(26),z(e)),G(a).a,a,c),!m)return null;return o(o(Xc(new Gi(16),e),h),m)}function Te(a,b,c){for(var d=!1,e=a.i;e;e=e.b)if(e.a==3){d=!0;break}return d||t(a.a,b,'This statement cannot be used outside a loop'),Ub(a,b,c)}function Ub(a,b,c){return B(a,120),w(c,D(a,b))}function Ue(a,b,c,d,e,f){var h=x(a).a;if(!c&&x(a).b^126){var m=bf(a.h,a,0,d);return m&&Ub(a,b,o(new Gi(8),m))}if(!B(a,126))return null;if(E(a,115))return Yg(c,d,h,a,f);var l=af(c,d,h,a,f);return l&&w(l,
42
+ D(a,b))}function Ve(a){var b=x(a),c=b.c;if(!c)return null;for(var d=b.a.b,e=null,f=c.length-1|0;f>-1;f=f-1|0){for(var h=c[f],m=h.a.b.slice(h.c,d),l=0,g=0;g<m.length;g=g+1|0){var i=m.charCodeAt(g);(i==13||i==10)&&(l=l+1|0,i==13&&(g+1|0)<m.length&&m.charCodeAt(g+1|0)==10&&(g=g+1|0))}if(l>1)break;(e||(e=[])).push(J(h)),d=h.b}return e&&e.reverse(),e}function db(a,b){var c=x(a);switch(c.b){case 4:return Te(a,G(a).a,new Gi(4));case 9:return Te(a,G(a).a,new Gi(5));case 10:return Ub(a,G(a).a,new Gi(6));case 11:return Mg(a);case 72:case 73:case 74:case 75:return Ng(a);case 121:return Pg(a);case 15:return Qg(a);case 17:return Rg(a);case 113:return Xe(a);case 31:return Vg(a);case 32:return Ug(a);case 120:return w(new Gi(3),G(a).a);case 124:return Sg(a);case 43:return Tg(a)}var d=Ve(a),e=Kd(a,b),f=null;if(E(a,35)){var h=Wg(a,e,d);return h&&w(h,D(a,c.a))}if(e){if(f=eb(a,1),!f)return null}else f=eb(a,0);if(f)return Ue(a,c.a,e,f,1,d);var m=aa(a.h,a,0);return m&&Ub(a,c.a,o(new Gi(8),m))}function We(a,b){if(b.b^17&&b.b^16){var c=a.i.a==1||a.i.a==4,d=b.b==9||b.b==11||b.b==14||b.b==18;
43
+ d&&!c?t(a.a,b.c,'This statement cannot be used inside a function'):!d&&c&&t(a.a,b.c,'This statement cannot be used outside a function')}}function Xg(a,b){var c=x(a).a;if(!B(a,129))return!0;var d=null;try{d=JSON.parse(J(c))}catch(m){return t(a.a,c,'Invalid string literal'),!0}var e=a.d.b;if(!e)return t(a.a,c,'Cannot include files without access to a file system'),!1;var f=e(d,c.a.a);if(!f)return t(a.a,c,'Cannot read the file '+JSON.stringify(d)),!1;if(a.f.has(f.a))return!0;Qa(a.f,f.a,!0),a.m.push(new Ji(c,$c(f))),xc(a.a,f,0),a.c^f.c.b&&xg(a.a,c,d,f);var h=new Ki(a.a,f.c,a.d,a.e,a.f);return h.i=a.i,!sc(h,b,1)||!B(h,130)?!1:!0}function Xe(a){var b=x(a),c=new Gi(3);return a.i=new Ti(2,a.i),!B(a,113)||!sc(a,c,2)||!B(a,117)?null:(Vb(a),w(c,D(a,b.a)))}function Ye(a){switch(a){case 50:case 8:case 44:case 21:case 37:case 2:case 38:case 18:case 30:case 19:case 16:case 29:case 25:return!0}return!1}function Ze(a){if(E(a,50)){if(E(a,115))for(;x(a).b^130&&!E(a,119);)G(a)}else G(a)}function Kd(a,b){var c=a.c==1,d=0;if(b==1)if(c&&E(a,
44
+ 50)&&B(a,115)){for(var e=-1;;){var f=x(a);if(f.b==126&&J(f.a)=='location')G(a),B(a,99)&&(x(a).b==127||x(a).b==128?(e=Jd(J(x(a).a)),G(a)):B(a,127));else{if(Wa(a),f.b^126)break;G(a)}if(!E(a,111))break}~e&&(d|=e<<18|1<<17),B(a,119)}else E(a,21)&&(d|=128),c&&(E(a,45)?d|=8:E(a,62)&&(d|=2048));if(b^3&&E(a,8)?d|=4:b==1&&E(a,37)?d|=4096:b==1&&!c&&E(a,2)?d|=1:b==1&&!c&&E(a,38)?d|=8192:b==1&&c&&E(a,44)?(d|=2,E(a,18)?d|=32:E(a,30)?d|=1024:Wa(a)):(!b||c&&b==1)&&E(a,18)?d|=32:(!b||c&&b==1)&&E(a,30)?d|=1024:(!b||c&&b==1)&&E(a,19)&&(d|=64),E(a,16)?d|=16:E(a,29)?d|=512:E(a,25)&&(d|=256),Ye(x(a).b))for(t(a.a,x(a).a,'Cannot use this qualifier here'),Ze(a);Ye(x(a).b);)Ze(a);return d}function eb(a,b){var c=x(a),d=null;switch(c.b){case 3:d=ha;break;case 5:d=yc;break;case 6:d=zc;break;case 7:d=Ac;break;case 14:d=ia;break;case 20:d=fa;break;case 22:d=Bc;break;case 23:d=Cc;break;case 24:d=Dc;break;case 26:d=dc;break;case 27:d=ec;break;case 28:d=fc;break;case 33:d=xh;break;case 34:d=yh;break;case 39:d=nb;break;case 40:d=ob;break;case 41:
45
+ d=pb;break;case 42:d=$d;break;case 46:d=U(a,zh);break;case 47:d=U(a,Ah);break;case 48:d=U(a,Bh);break;case 49:d=U(a,Ch);break;case 51:d=U(a,dd);break;case 52:d=U(a,ed);break;case 53:d=U(a,fd);break;case 54:d=U(a,gd);break;case 55:d=U(a,hd);break;case 56:d=U(a,id);break;case 57:d=U(a,Dh);break;case 58:d=U(a,Eh);break;case 59:d=U(a,Fh);break;case 60:d=U(a,di);break;case 61:d=U(a,Gh);break;case 63:d=U(a,gc);break;case 64:d=U(a,Hh);break;case 65:d=U(a,Ih);break;case 66:d=U(a,Jh);break;case 67:d=U(a,Kh);break;case 68:d=U(a,jd);break;case 69:d=U(a,kd);break;case 70:d=U(a,ld);break;case 126:var e=Vd(a.i,J(c.a));if(!e||!(e instanceof vc))return b^1||Wa(a),null;e.g=e.g+1|0,d=z(e);break;default:return b^1||Wa(a),null}if(G(a),a.c==1){var f=_e(a,!0,!0);if(f)if(f==ee)d=I;else return w(s(o(new Gi(26),f.a),ad(d,f.b)),D(a,c.a))}return w(s(new Gi(26),d),D(a,c.a))}function _e(a,b,c){if(!c)return Ld(a),null;var d=x(a);if(!E(a,114))return null;var e=null,f=0;if(E(a,118)){if(!b)return t(a.a,D(a,d.a),'All array sizes must be specified'),
46
+ Ld(a),ee;e=new Gi(25)}else{if(e=aa(a.h,a,0),!e||!B(a,118))return ee;if(_(a.e,e),pa(a.e,e,fa),e.f!=I){var h=O(e);h?h.b^30||(f=h.h|0,f<1&&(t(a.a,e.c,'Cannot declare an array with a size of "'+f+'"'),f=0)):t(a.a,e.c,'This value must be a compile-time constant')}if(Ld(a))return ee}return new Hi(e,f)}function Ld(a){if(x(a).b^114)return!1;for(;;){var b=G(a);if(x(a).b^118&&!aa(a.h,a,0)||!B(a,118)||(t(a.a,D(a,b.a),'Multidimensional arrays are not a part of the language'),x(a).b^114))return!0}}function Yg(a,b,c,d,e){var f=d.i,h=new wc(Oc(d.d),c,J(c),new Ti(0,f));if(h.e|=d.l|a|(h.c=='main'?49152:0),h.f=e,h.k=b,d.i=h.d,E(d,42)){if(!B(d,119))return null}else if(!E(d,119)){for(;;){var m=Kd(d,0),l=eb(d,1);if(!l)return null;var g=x(d).a;if(!B(d,126))return null;var i=new qf(Oc(d.d),g,J(g),d.i,0);if(i.e|=m,i.p=l,i.Q=l.f,h.n.push(i),Md(d,i),$e(d,i),!E(d,111))break}if(!B(d,119))return null}var n=Ga(f.c,J(c),null),k=!E(d,120);if(n){if(n instanceof wc){for(var q=n;q;q=q.v)if(sh(q,h)){q.k.f!=h.k.f?ug(d.a,h.k.c,h.c,h.k.f,q.k.f,q.k.c):q.q||!k?Ed(d.a,
47
+ h.b,q.b):(q.u=h,h.u=q,h.e|=q.e,q.e=h.e);break}h.v=n,ph(f,h)}else return Ed(d.a,c,n.b),null}else nf(f,h);if(k){var v=d.l;if(d.l&=-114689,h.q=Xe(d),d.l=v,!h.q)return null}return Vb(d),w(Xc(new Gi(11),h),D(d,b.c))}function $e(a,b){var c=_e(a,b.C!=0,ea(b).b==null);c==ee?b.Q=I:c&&(b.y=c.a,ea(b)!=I&&(b.Q=ad(ea(b),c.b)))}function af(a,b,c,d,e){for(var f=o(Y(new Gi(17),d.l|a),b);;){var h=new qf(Oc(d.d),c,J(c),d.i,d.i.a^1?d.i.a^4?2:3:1);h.e|=d.l|a,h.f=e,h.p=b,$e(d,h);var m=x(d).a,l=null;if(E(d,99)){var g=x(d);l=aa(d.h,d,1),l||(l=w(s(new Gi(24),I),D(d,g.a)))}else m=null;var i=Ua(w(o(Xc(new Gi(2),h),l),D(d,h.b)),m);if(h.N=i,h.e&4)_(d.e,i);else{_(d.e,h.p);var n=ea(h);if(n.b&&l){var k=h.p.g,q=h.y;(k&&xb(k)||q&&xb(q))&&(_(d.e,l),l.f.b&&l.f.c>0&&(h.Q=ad(n.b,l.f.c)))}}if(o(f,i),Md(d,h),!E(d,111))return B(d,120),f;if(c=x(d).a,!B(d,126))return null}}function Md(a,b){var c=Ga(a.i.c,b.c,null);return c?(Ed(a.a,b.b,c.b),!1):(nf(a.i,b),!0)}function sc(a,b,c){for(;x(a).b^130&&x(a).b^117;){var d=x(a).a;if(E(a,122)){if(c^1)return t(a.a,
48
+ d,'"#include" statements cannot be used here'),E(a,129),!1;if(!Xg(a,b))return!1}else{var e=db(a,c);if(!e)return!1;if(e.b^13)We(a,e),o(b,e);else for(;e.g;){var f=r(e.g);We(a,f),o(b,f)}}}return!0}function Nd(a,b,c,d,e,f){var h=new Map,m=new Ki(a,b,d,f,h);return m.i=e,sc(m,c,1)&&B(m,130),new Ii(m.m)}function x(a){return a.b[a.g]}function G(b){var a=x(b);return (b.g+1|0)<b.b.length&&(b.g=b.g+1|0),a}function D(c,a){var b=c.b[c.g>0?c.g-1|0:0];return b.a.c<a.b?a:Xa(a,b.a)}function E(b,a){return x(b).b^a?!1:(G(b),!0)}function B(e,a){if(E(e,a))return!0;var b=x(e),c=b.a,d=(e.g>0?e.b[e.g-1|0]:b).a;return a==120||df(d).a^df(c).a?t(e.a,ef(d),'Expected '+zf[a]):t(e.a,c,'Expected '+zf[a]+' but found '+zf[b.b]),!1}function Wa(a){Fe(a.a,x(a))}function U(b,a){return b.c^1?(Wa(b),I):a}function Vb(a){a.i=a.i.b}function va(e,a,b){var c=Ba(e.a,a,null);if(c)b>c.a&&(c.a=b);else{var d=new Li(b);c=d,Ha(e.a,a,d)}return c}function aa(f,a,b){var c=x(a),d=Ba(f.a,c.b,null);if(!d||!d.b)return Wa(a),null;var e=bf(f,a,b,d.b(a));return e}function bf(f,a,b,c){
49
+ for(;c;){var d=x(a).b,e=Ba(f.a,d,null);if(!e||!e.c||e.a<=b)break;c=e.c(a,c)}return c}function tc(d,a,b){va(d,a,0).b=function(c){return b(c,G(c))}}function Wb(h,a,b,c){va(h,a,0).b=function(d){var e=G(d),f=aa(h,d,b);return f&&c(d,e,f)}}function cf(f,a,b,c){va(f,a,b).c=function(d,e){return c(d,e,G(d))}}function Z(m,a,b,c){va(m,a,b).c=function(d,e){var f=G(d),h=aa(m,d,b);return h&&c(d,e,f,h)}}function Da(m,a,b,c){va(m,a,b).c=function(d,e){var f=G(d),h=aa(m,d,b-1|0);return h&&c(d,e,f,h)}}function J(a){return a.a.b.slice(a.b,a.c)}function Od(b){var a=Zb(b.a,b.b);return b.a.a+':'+(a.a+1|0)+':'+(a.b+1|0)}function Zg(b,a){return b.a==a.a&&b.b<a.c&&a.b<b.c}function uc(b,a){return b.b<=a&&a<=b.c}function Pd(p,a){for(var b=Zb(p.a,p.b),c=Zb(p.a,p.c),d=qh(p.a,b.a),e=b.b,f=c.a^b.a?d.length:c.b,h=Ff(Wh,d,0),m=[],l=0,g=0;;){h.b^e||(l=m.length),h.b^f||(g=m.length);var i=Gf(h);if(i<0)break;if(i^9)m.push(i);else for(var n=0,N=8-m.length%8|0;n<N;n=n+1|0)m.push(32)}var k=m.length;if(a>0&&k>a){var q=Math.min(g-l|0,a/2|0),v=Math.max((a-q|0)/2|0,
50
+ 3);if(l<v)d=Nc(m.slice(0,a-3|0))+'...',g>(a-3|0)&&(g=a-3|0);else if((k-l|0)<(a-v|0)){var u=k-a|0;d='...'+Nc(m.slice(u+3|0,k)),l=l-u|0,g=g-u|0}else{var C=l-v|0;d='...'+Nc(m.slice(C+3|0,(C+a|0)-3|0))+'...',l=l-C|0,g=g-C|0,g>(a-3|0)&&(g=a-3|0)}}else d=Nc(m);return new Ni(d,mc(' ',l)+((g-l|0)<2?'^':mc('~',g-l|0)))}function _g(c,a,b){return new Oi(c.a,c.b+a|0,c.b+b|0)}function df(a){return Zb(a.a,a.b)}function Qd(a){return new Oi(a.a,a.b,a.b)}function ef(a){return new Oi(a.a,a.c,a.c)}function Xa(a,b){return new Oi(a.a,a.b,b.c)}function $g(a){var b='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_'[a%53];for(a=a/53|0;a>0;)a=a-1|0,b+='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_0123456789'[a%63],a=a/63|0;return b}function ah(n,a){for(var b=0,k=a.length;b<k;b=b+1|0)n.h=b,zb(n,a[b]);ch(n);var c=new Map,d=ff(n,n.f,null);d.sort(function(e,f){return qd(gf(n,f),gf(n,e))});for(var N=0,y=d.length;N<y;N=N+1|0)for(var h=d[N],m=null,C=0,p=h.length;C<p;C=C+1|0)for(var l=h[C],q=0,v=Array.from(l.c.values()),u=v.length;q<u;q=q+1|0){
51
+ var g=v[q],i=g.c;!(g.e&7<<14)&&(!n.a||n.a==1&&!of(g))&&(m==null&&(m=bh(n)),g.c=m),!(g.e&65536)&&of(g)&&Qa(c,i,g.c)}return c}function zb(f,a){var m,h;a.e&&((h=Rd(f,a.e)).d=h.d+1|0);for(var b=a.g;b;b=b.k)zb(f,b);switch(a.b){case 2:var c=a.e;zb(f,c.p),W(c)&&zb(f,W(c));break;case 11:var d=a.e;f.l=f.d.get(a.e.a).b,d.u&&be(f.f,f.l,Rd(f,d.u).b),zb(f,d.k);for(var l=0,g=d.n,i=g.length;l<i;l=l+1|0){var e=g[l];(m=Rd(f,e)).d=m.d+1|0,zb(f,e.p)}d.q&&zb(f,d.q),f.l=-1;break}}function Rd(c,a){var b=Ba(c.d,a.a,null);return b||(b=new Qi(a.c,c.c.length),b.e=Zd(a),c.c.push(b),Ha(c.d,a.a,b),uf(c.e),uf(c.f)),b.c.has(c.h)||Ha(b.c,c.h,a),Zd(a)&&be(c.e,c.l,b.b),b}function bh(b){for(;;){var a=$g(b.m);if(b.m=b.m+1|0,!uh.has(a)&&!vh.has(a)&&!a.startsWith('gl_'))return a}}function ff(h,a,b){for(var c=new Map,m=0,l=h.c,g=l.length;m<g;m=m+1|0){var d=l[m];if(!b||b(d)){var e=md(a,d.b),f=Ba(c,e,null);f||(f=[],Ha(c,e,f)),f.push(d)}}return Array.from(c.values())}function ch(b){dh(b,ff(b,b.e,function(a){return a.e}))}function dh(m,a){for(var b=[],g=0,i=a.length;g<i;g=g+1|0){
52
+ var c=a[g];c.sort(function(d,e){return qd(e.d,d.d)});for(var f=0,l=c.length;f<l;f=f+1|0){var h=c[f];f<b.length?be(m.f,h.b,b[f]):b.push(h.b)}}}function gf(d,a){for(var b=0,e=0,f=a.length;e<f;e=e+1|0){var c=a[e];b=b+c.d|0}return b}function Sd(f,a){_(f,a);for(var h=0,m=f.e,l=m.length;h<l;h=h+1|0){var b=m[h];r(b)}var c=a.g;f.e.length&&Yc(a,c,f.e[0]);for(var g=0,i=Array.from(f.f.values()),n=i.length;g<n;g=g+1|0){var d=i[g];Yc(a,c,d)}f.a.b=f.a.b.filter(function(e){return e.g==0})}function Td(b,a){a.b.a.a!='<api>'&&!a.g&&!(a.e&49152)&&b.a.b.push(a)}function _(p,a){if(!a.f){a.f=I;var b=a.b;switch(b){case 0:case 1:Ud(p,a);break;case 2:var c=a.e;Td(p,c),_(p,c.p);var d=ea(c);if(d==$d&&(t(p.a,c.p.c,'Cannot create a variable of type "'+H(d)+'"'),d=I),c.y&&!xb(c.y)&&(la(p,c.y),pa(p,c.y,fa)),W(c)&&(la(p,W(c)),pa(p,W(c),d),d.d&&!p.c&&Ie(p.a,a.d,d)),c.e&4)if(W(c)){if(W(c).f!=I){var e=O(W(c));e?c.h=e:t(p.a,W(c).c,'This value must be a compile-time constant')}}else c.C^2||t(p.a,c.b,'Constants must be initialized');break;case 3:Ab(p,
53
+ a);break;case 4:case 5:case 6:break;case 7:Ab(p,a.g),_(p,a.i),pa(p,a.i,ha);break;case 8:_(p,a.g);break;case 9:break;case 10:yb(a)&&la(p,yb(a)),Ja(a)&&(la(p,Ja(a)),pa(p,Ja(a),ha)),Zc(a)&&la(p,Zc(a)),Ab(p,a.i);break;case 11:var f=a.e;Td(p,f);for(var N=0,y=f.n,Q=y.length;N<Q;N=N+1|0){var h=y[N];_(p,h.p)}_(p,f.k),f.q&&(p.h=f.k.f,Ab(p,f.q),p.h&&p.h!=$d&&f.q.q&&t(p.a,f.b,'All control paths for "'+f.c+'" must return a value of type "'+H(p.h)+'"'),p.h=null);break;case 12:_(p,a.g),pa(p,a.g,ha),Ab(p,a.g.k),a.g.k.k&&Ab(p,a.g.k.k);break;case 14:break;case 15:a.g?(_(p,a.g),pa(p,a.g,p.h||I)):(a.f=$d,pa(p,a,p.h||I));break;case 16:var m=a.e;Td(p,m),Ud(p,a);for(var l=z(m),S=0,ca=m.i,ba=ca.length;S<ba;S=S+1|0){var g=ca[S],i=ea(g);i.d&&(l.d=!0),i.e&&(l.e=!0)}break;case 17:Ud(p,a);break;case 18:p.e.push(a);break;case 19:_(p,a.g),pa(p,a.g,ha),Ab(p,a.i);break;case 20:hh(p,a);break;case 21:ih(p,a);break;case 22:var n=a.g,k=a.i,q=a.g.k;la(p,n),pa(p,n,ha),la(p,q),la(p,k),q.f==I||k.f==I?a.f=I:q.f!=k.f?t(p.a,Xa(q.c,k.c),'Cannot merge type "'+H(q.f)+'" and type "'+H(k.f)+'"'):q.f.d?Bg(p.a,
54
+ Xa(q.c,k.c),q.f):a.f=q.f;break;case 23:var v=a.e;v instanceof qf?(_(p,v.p),a.f=ea(v)):v instanceof wc&&!Ig(a)?t(p.a,a.c,'The function "'+v.c+'" must be called'):a.f=z(v);var u=v.m;u!=null&&!p.f.has(u)&&!Ga(p.b.a,u,0)&&Qa(p.f,u,Y(cb(new Gi(9),u),2));break;case 25:for(var C=a.g;C;C=C.k)la(p,C);a.f=a.i.f;break;default:Gd(b)?eh(p,a):Uc(b)&&gh(p,a);break}}}function Ab(c,a){if(Pf(c.d,a),a.b^3)_(c,a),ke(c.d,a);else for(var b=a.g;b;b=b.k)_(c,b),ke(c.d,b);Qf(c.d,a)}function eh(d,a){var b=a.g;la(d,b),Hd(a.b)&&hf(d,b);var c=b.f;switch(a.b){case 33:case 35:case 36:case 37:case 38:case 39:a.f=cd(c)?c:I;break;case 32:a.f=ib(c)?c:I;break;case 34:a.f=c==ha?ha:I;break}a.f==I&&c!=I&&t(d.a,a.d,'No unary operator "'+J(a.d)+'" for type "'+H(c)+'"')}function fh(c,a,b){var f,e,d;if(xa(a)){if(xa(b)){if(X(a)==X(wa(b)))return (d=ae(X(b),X(wa(a))))||I}else if(wa(b)==ia&&X(a)==X(b))return (e=ae(1,X(wa(a))))||I}else if(wa(a)==ia&&xa(b)&&X(a)==X(wa(b)))return (f=ae(X(b),1))||I;return I}function gh(i,a){var b=a.g,c=a.i;la(i,b),la(i,c),Vc(a.b)&&hf(i,
55
+ b);var d=b.f,e=c.f,f=d==e;switch(a.b){case 40:case 59:case 54:case 44:a.f=f&&T(d)||cd(d)&&e==T(d)?d:cd(e)&&d==T(e)?e:a.b^54?I:fh(i,d,e);break;case 41:case 42:case 43:case 56:a.f=f&&ib(d)||ib(d)&&e==T(d)?d:ib(e)&&d==T(e)?e:I;break;case 57:case 58:a.f=f&&ib(d)||ib(d)&&e==T(d)?d:I;break;case 45:case 55:a.f=f&&wh(d,i.c)?ha:I;break;case 51:case 52:case 53:a.f=f&&d==ha?ha:I;break;case 49:case 50:case 46:case 47:a.f=f&&(d==ia||d==fa)?ha:I;break;case 60:a.f=d,d.d&&!i.c&&Ie(i.a,a.d,d),pa(i,c,d);return;case 61:case 70:case 66:case 65:a.f=f&&T(d)||cd(d)&&e==T(d)||a.b==66&&(d==nb&&e==dc||d==ob&&e==ec||d==pb&&e==fc)?d:I;break;case 62:case 63:case 64:case 67:case 68:case 69:a.f=f&&ib(d)||ib(d)&&e==T(d)?d:I;break;case 48:if(e==fa){var h=wa(d);h&&(a.f=h);var m=O(c);if(m&&m.b==30){var l=m.h|0,g=X(d);(l<0||g>0&&l>=g)&&t(i.a,c.c,'Index "'+l+'" is out of bounds for type "'+H(d)+'"')}}break}a.f==I&&d!=I&&e!=I&&(a.b^48?Cg(i.a,a.d,J(a.d),d,e):t(i.a,a.d,'No index operator for type "'+H(d)+'" and type "'+H(e)+'"'))}function hh(i,a){var b=a.g;
56
+ if(i.c==1&&b.b==21&&b.m=='length'){var c=b.g;la(i,c);var d=c.f;if(d.b){var e=_d();b.f=z(e),a.e=e}else t(i.a,b.d,'Cannot find "'+b.m+'" on type "'+H(d)+'"'),b.f=I}else _(i,b);for(var f=b.f,h=f.a,m=[],l=!1,g=b.k;g;g=g.k)la(i,g),m.push(g),g.f==I&&(l=!0);if(!l){if(h){if(h instanceof wc){jh(i,h,a,m);return}if(h instanceof vc){lh(i,f,a,m);return}}b.b==26&&f.b?kh(i,f,a,m):f!=I&&t(i.a,b.c,'Cannot call type "'+H(f)+'"')}}function ih(m,a){var b=a.g,c=a.m,d=a.d;if(la(m,b),c!=''){var e=b.f,f=Ne(a);if(bd(e))a.f=mh(m,d,e,c,f);else if(e==I);else{if(e.a&&e.a instanceof vc)for(var l=0,g=e.a.i,i=g.length;l<i;l=l+1|0){var h=g[l];if(h.c==c){h.g=h.g+1|0,a.e=h,_(m,h.p),a.f=ea(h);break}}a.e||t(m.a,d,'Cannot find "'+c+'" on type "'+H(e)+'"')}}}function jh(p,a,b,c){for(var d=[],e=a;e;e=e.v)~d.indexOf(e.u)||d.push(e);if(d.length^1&&(d=d.slice(),Nb(d,function(f){return f.n.length!=c.length}),d.length^1)){var h=d.slice();Nb(d,function(m){for(var l=0,N=c.length;l<N;l=l+1|0)if(ea(m.n[l])!=c[l].f)return!0;return!1}),d.length^1&&(d=h,Nb(d,function(g){
57
+ for(var i=0,y=c.length;i<y;i=i+1|0){var n=ea(g.n[i]),k=c[i].f,q=Ka(n),v=Ka(k);if(n!=k&&(!q||!v||q^v))return!0}return!1}))}if(d.length^1)t(p.a,b.g.c,'No matching overload for function "'+a.c+'"');else{var u=d[0];if(u.n.length^c.length)zg(p.a,b.d,u.n.length,c.length,u.c,u.b);else for(var C=0,Q=c.length;C<Q;C=C+1|0)pa(p,c[C],ea(u.n[C]));b.g.e=u,b.f=u.k.f}}function kh(e,a,b,c){b.f=a,a.c>0&&a.c^c.length&&He(e.a,b.d,a,c.length);for(var f=0,h=c.length;f<h;f=f+1|0){var d=c[f];pa(e,d,a.b)}}function lh(u,a,b,c){if(b.f=a,a!=I)if(T(a)){for(var d=Ka(a),e=!1,f=0,C=0,p=c.length;C<p;C=C+1|0){var h=c[C],m=h.f,l=Ka(m);if(!T(m)){m!=I&&t(u.a,h.c,'Cannot use value of type "'+H(m)+'" when constructing type "'+H(a)+'"');return}f>=d&&yg(u.a,h.c,a,d,f+l|0),xa(m)&&(e=!0),f=f+l|0}var g=xa(a)&&e;g&&c.length^1?t(u.a,b.d,'If a matrix argument is given to a matrix constructor, it is an error to have any other arguments'):f<d&&f^1&&!g&&He(u.a,b.d,a,f)}else{var i=a.a,n=i.i,k=n.length,q=c.length;if(k^q)Ag(u.a,b.d,k,q,i.c,i.b);else for(var v=0;v<k;v=v+1|0)pa(u,
58
+ c[v],ea(n[v]))}}function mh(l,a,b,c,d){var e=c.length;if(e<1||e>4)return t(l.a,a,'Invalid swizzle "'+c+'" on type "'+H(b)+'"'),I;for(var f=Ka(b),g=0,i=Xd(f),n=i.length;g<n;g=g+1|0){var h=i[g];if(~h.indexOf(c[0])){for(var m=1;m<e;m=m+1|0){if(h.indexOf(c[m])==-1)return t(l.a,a,'Invalid swizzle "'+c+'" on type "'+H(b)+'"'),I;if(d&&~c.slice(0,m).indexOf(c[m]))return t(l.a,_g(a,m,m+1|0),'The field "'+c[m]+'" cannot be specified multiple times when used as a storage location'),I}return Yd(T(b),e)}}return t(l.a,a,'Invalid swizzle "'+c+'" on type "'+H(b)+'"'),I}function la(b,a){_(b,a),a.b==26&&a.f!=I&&(t(b.a,a.c,'Unexpected type "'+H(a.f)+'"'),a.f=I)}function Ud(c,a){for(var b=a.g;b;b=b.k)_(c,b)}function hf(c,a){d:for(var b=a;;){if(b.f==I)break;switch(b.b){case 23:(b.e.e&4||b.e.e&4096)&&t(c.a,a.c,'Cannot store to this location');break d;case 21:b=b.g;break;case 48:b=b.g;break;default:t(c.a,a.c,'Cannot store to this location');break d}}}function pa(c,a,b){a.f!=b&&a.f!=I&&b!=I&&t(c.a,a.c,'Cannot convert from type "'+H(a.f)+'" to type "'+H(b)+'"')}
59
+ function nh(a,b,c,d){for(;;){var e=new Si(d);if(c.a&&gb(e,a),c.d&&(fb(e,a),Cb(e,a),oh(e,a,b)),!e.b)break}c.a&&Bb(a)}function Bb(a){switch(a.b){case 12:if(!a.g.k.k)return!0;var b=a.g.k,c=Bb(b);return c&&b.b^3&&oa(b,o(new Gi(3),Id(b))),Bb(a.g.k.k);case 10:return Bb(a.i);case 11:var d=a.e;d.q&&Bb(d.q);break;case 19:return Bb(a.i);default:for(var e=a.g;e;e=e.k)Bb(e);return!1}return!1}function fb(l,a){for(var b=a.g;b;b=b.k)fb(l,b);switch(a.b){case 2:var c=a.e;c.y&&fb(l,c.y),W(c)&&fb(l,W(c)),(c.C==2||c.C==1)&&(l.c.push(c),Ha(l.d,c.a,0),Ha(l.e,c.a,0));break;case 11:var d=a.e;Ha(l.d,d.a,0),fb(l,d.k);for(var g=0,i=d.n,n=i.length;g<n;g=g+1|0){var e=i[g];fb(l,e.p),e.y&&fb(l,e.y)}d.q&&fb(l,d.q);break;case 23:var f=a.e.a,h=Ba(l.d,f,-1);~h&&Ha(l.d,f,h+1|0),Oe(a)&&(h=Ba(l.e,f,-1),~h&&Ha(l.e,f,h+1|0));var m=a.e.m;m!=null&&Qa(l.f,m,0);break}}function Cb(g,a){for(var b=a.g,c=null;b;b=c)c=b.k,Cb(g,b);switch(a.b){case 2:if(lf(g,a.e)||mf(g,a.e)||kf(g,a.e)&&(!a.g||sa(a.g)||a.e.h))r(a),g.b=!0;else{a.g&&Cb(g,a.g);var d=a.e.y;if(d&&d.b==23){
60
+ var e=jf(g,d.e);e&&(a.e.y=e,g.b=!0)}}break;case 11:var f=a.e;if(kf(g,f)&&!(f.e&49152))r(a),g.b=!0;else{Cb(g,f.k);for(var i=0,n=f.n,k=n.length;i<k;i=i+1|0){var h=n[i];Cb(g,h.p),h.y&&Cb(g,h.y)}f.q&&Cb(g,f.q)}break;case 17:if(!a.g.k){var m=a.l.b;m==3||!m||m==16?r(a):m^10?L(a,new Gi(3)):L(a,new Gi(25)),g.b=!0}break;case 23:var l=jf(g,a.e);l&&(L(a,l),g.b=!0);break}}function jf(b,a){return lf(b,a)?Ta(a.h):mf(b,a)?Ta(W(a)):null}function oh(e,a,b){for(var c=a.g,d=null;c;c=d)d=c.k,c.b==9&&!e.f.has(c.m)&&!Ga(b.a,c.m,0)&&r(c)}function kf(b,a){return Ba(b.d,a.a,-1)==0&&(!(a instanceof wc)||a.u==null||Ba(b.d,a.u.a,-1)==0)}function lf(b,a){return a.h!=null&&Fd(a.h.b)}function mf(b,a){return Ba(b.e,a.a,-1)==0&&W(a)!=null&&Fd(W(a).b)}function gb(A,a){for(var b=a.g,c=null;b;b=c)c=b.k,gb(A,b);switch(a.b){case 2:var d=a.e;d.y&&gb(A,d.y),W(d)&&gb(A,W(d));break;case 3:for(var e=a.g;e;e=e.k)if(Eg(e.b)&&e.k){for(;e.k;)r(e.k);A.b=!0}if(a.l&&a.l.b==3){for(var f=!1,h=a.g;h;h=h.k)h.b^17||(f=!0);if(!f){Me(a),A.b=!0;return}}break;case 8:if(a.l.b==3){
61
+ if(sa(a.g)){r(a),A.b=!0;return}var m=a.n;if(m&&m.b==8)if(A.a==1&&(tf(m.g.f)||tf(a.g.f)));else{var l=r(a.g);o(a,s(o(o(new Gi(25),r(r(m).g)),l),l.f)),A.b=!0;return}}break;case 7:_c(A,a.g),Rb(a.i)&&(oa(a,o(new Gi(3),r(a.g))),A.b=!0);break;case 10:if(_c(A,a.i),!yb(a)&&a.n&&a.n.b==8&&(oa(a.g,r(a.n.g)),r(a.n),A.b=!0),Ja(a)&&Va(Ja(a))&&(oa(Ja(a),new Gi(25)),A.b=!0),a.i.b^5){for(;a.i.g&&a.i.i.b==5;)r(a.i.i),A.b=!0}else oa(a.i,new Gi(3)),A.b=!0;break;case 11:var g=a.e;gb(A,g.k);for(var lc=0,de=g.n,nd=de.length;lc<nd;lc=lc+1|0){var i=de[lc];gb(A,i.p),i.y&&gb(A,i.y)}g.q&&gb(A,g.q);break;case 12:if(_c(A,a.g.k),a.g.k.k&&_c(A,a.g.k.k),Va(a.g)){oa(a,r(a.g.k)),A.b=!0;return}if(Rb(a.g)){a.g.k.k?oa(a,r(a.g.k.k)):r(a),A.b=!0;return}if(a.g.k.k&&a.g.k.b==15&&a.g.k.k.b==15){var n=a.g.k.g,k=a.g.k.k.g;if(n&&k){oa(a,o(new Gi(15),s(o(o(o(new Gi(22),r(a.g)),r(n)),r(k)),n.f))),A.b=!0;return}}if(a.g.k.k&&a.g.k.b==8&&a.g.k.k.b==8){var q=a.g.k.g,v=a.g.k.k.g;if(q.f==v.f)if(A.a==1&&q.f==$d);else{oa(a,o(new Gi(8),s(o(o(o(new Gi(22),r(a.g)),r(q)),
62
+ r(v)),q.f))),A.b=!0;return}}if(!a.g.k.k&&a.g.k.b==8){var u=a.g.k.g,C=u.b==60&&u.g.b==23&&Zd(u.g.e);if(u.f==fa||u.f==ia||C){var p=C?Ta(u.g):u.f==fa?s(Y(new Gi(30),0),fa):s(ra(new Gi(29),0),ia);oa(a,o(new Gi(8),s(o(o(o(new Gi(22),r(a.g)),r(u)),p),u.f))),A.b=!0;return}}if(!a.g.k.k&&a.g.k.b==12&&!a.g.k.g.k.k){var N=a.g,y=a.g.k.g,Q=a.g.k.g.k;L(N,s(o(o(new Gi(51),Id(N)),r(y)),ha)),L(a.g.k,r(Q)),A.b=!0;return}if(Pe(a.g.k)){a.g.k.k?(Sb(a.g),r(a.g.k)):oa(a,o(new Gi(8),r(a.g))),A.b=!0;return}if(a.g.k.k&&Pe(a.g.k.k)){r(a.g.k.k),A.b=!0;return}break;case 15:for(var S=a.n;S&&S.b==12&&!S.g.k.k&&S.g.k.b==15;){var ca=S.g.k.g,ba=a.g;if(!ca||!ba)break;oa(a,o(new Gi(15),s(o(o(o(new Gi(22),r(S.g)),r(ca)),r(ba)),ca.f))),r(S),S=a.n,A.b=!0}break;case 17:for(var V=a.n;V;V=V.n){if(V.b^17)break;if(V.g.f==a.g.f&&(V.h|0)==(a.h|0)){for(;V.i!=V.g;)Yc(a,a.g.k,r(V.i));r(V),A.b=!0;return}for(var da=V.g.k;da;da=da.k){var ga=da.g;if(ga&&!Fd(ga.b))return}}break;case 19:var ja=a.g,ua=a.i;oa(a,Qe(null,r(ja),null,r(ua))),A.b=!0;break;case 22:var Na=a.g,na=a.g.k,ka=a.i;
63
+ if(Va(Na)){L(a,r(na)),A.b=!0;return}if(Rb(Na)){L(a,r(ka)),A.b=!0;return}if(na.b==ka.b&&Uc(na.b)&&ta(na.g,ka.g)&&na.b^48){var qb=na.g,qa=na.i,$a=ka.i;if(qa.f==$a.f){var La=o(o(o(new Gi(22),r(Na)),r(qa)),r($a));La.f=qa.f,L(a,o(o(new Gi(na.b),r(qb)),La)),A.b=!0;return}}if(na.b==60&&ta(na.g,ka)&&sa(ka)){var Oa=na.g,jb=na.i,Ya=o(o(o(new Gi(22),r(Na)),r(jb)),r(ka));Ya.f=jb.f,L(a,o(o(new Gi(60),r(Oa)),Ya)),A.b=!0;return}break;case 25:for(var za=a.g,Za=null;za!=a.i;za=Za)Za=za.k,sa(za)&&(r(za),A.b=!0);if(a.l.b==25){Me(a),A.b=!0;return}if(Wc(a)){L(a,r(a.g)),A.b=!0;return}break;case 33:var Fa=a.g;Fa.b^33?Fa.b^30?Fa.b^29||Xb(A,a,-Fa.h):Yb(A,a,-(Fa.h|0)|0):(L(a,r(Fa.g)),A.b=!0);break;case 34:var Ea=a.g;Ea.b^34?Ea.b^28||$(A,a,!!!Ea.h):(L(a,r(Ea.g)),A.b=!0);break;case 35:L(a,r(a.g));break;case 40:var Gb=a.g,kb=a.i;rc(Gb,0)?(L(a,r(kb)),A.b=!0):rc(kb,0)?(L(a,r(Gb)),A.b=!0):Gb.b==30&&kb.b==30?Yb(A,a,(Gb.h|0)+(kb.h|0)|0):Gb.b==29&&kb.b==29&&Xb(A,a,Gb.h+kb.h);break;case 20:var ab=a.g;if(ab.b^26){if(a.f==fa&&ab.b==21&&ab.m=='length'&&Wc(a)){
64
+ var Ib=ab.g.f;Ib.b&&Ib.c>0&&(L(a,s(s(Y(new Gi(30),Ib.c),fa),fa)),A.b=!0)}}else{var _a=ab.f;if(_a==fa){var lb=ab.k;lb&&!lb.k&&lb.b==30&&(L(a,r(lb)),A.b=!0)}else if(_a==ia){var Hb=ab.k;Hb&&!Hb.k&&Hb.b==30&&Xb(A,a,Hb.h|0)}else if(T(_a)==ia)for(var Ma=ab.k;Ma;Ma=Ma.k)if(Ma.b==29){var hc=Ma.h,rb=hc|0;hc==rb&&Yb(A,Ma,rb)}}break;case 44:var $b=a.g,sb=a.i;rc(sb,1)?(L(a,r($b)),A.b=!0):$b.b==30&&sb.b==30?Yb(A,a,sb.h|0?($b.h|0)/(sb.h|0)|0:0):$b.b==29&&sb.b==29&&Xb(A,a,sb.h!=0?$b.h/sb.h:0);break;case 45:var Jb=a.g,Db=a.i;ta(Jb,Db)&&sa(Jb)?($(A,a,!0),A.b=!0):Jb.b==30&&Db.b==30?$(A,a,(Jb.h|0)==(Db.h|0)):Jb.b==29&&Db.b==29&&$(A,a,Jb.h==Db.h);break;case 46:var ac=a.g,Fc=a.i;ac.b==30&&Fc.b==30?$(A,a,(ac.h|0)>(Fc.h|0)):ac.b==29&&Fc.b==29&&$(A,a,ac.h>Fc.h);break;case 47:var Pa=a.g,Kb=a.i;Pa.b^30?Kb.b^30?Pa.b==30&&Kb.b==30?$(A,a,(Pa.h|0)>=(Kb.h|0)):Pa.b==29&&Kb.b==29&&$(A,a,Pa.h>=Kb.h):(a.b=46,Y(Kb,(Kb.h|0)-1|0),A.b=!0):(a.b=46,Y(Pa,(Pa.h|0)+1|0),A.b=!0);break;case 48:var Gc=a.g,od=a.i,ce=Gc.f;if(od.b==30){var Kc=od.h|0,bc=0;switch(ce){
65
+ case yc:case Bc:case nb:bc=2;break;case zc:case Cc:case ob:bc=3;break;case Ac:case Dc:case pb:bc=4;break}Kc>-1&&Kc<bc&&(L(a,s(cb(o(new Gi(21),r(Gc)),'xyzw'[Kc]),a.f)),A.b=!0)}break;case 49:var Hc=a.g,Ic=a.i;Hc.b==30&&Ic.b==30?$(A,a,(Hc.h|0)<(Ic.h|0)):Hc.b==29&&Ic.b==29&&$(A,a,Hc.h<Ic.h);break;case 50:var Eb=a.g,Aa=a.i;Eb.b^30?Aa.b^30?Eb.b==30&&Aa.b==30?$(A,a,(Eb.h|0)<=(Aa.h|0)):Eb.b==29&&Aa.b==29&&$(A,a,Eb.h<=Aa.h):(a.b=49,Y(Aa,(Aa.h|0)+1|0),A.b=!0):(a.b=49,Y(Eb,(Eb.h|0)-1|0),A.b=!0);break;case 51:var mb=a.g,Fb=a.i;mb.b==28&&Va(mb)?(L(a,r(Fb)),A.b=!0):mb.b==28&&Rb(mb)?$(A,a,!1):mb.b==28&&Fb.b==28&&$(A,a,!!mb.h&&!!Fb.h);break;case 52:var ic=a.g,Jc=a.i;ic.b==28&&Rb(ic)?(L(a,r(Jc)),A.b=!0):ic.b==28&&Va(ic)?$(A,a,!0):ic.b==28&&Jc.b==28&&$(A,a,!!ic.h&&!!Jc.h);break;case 53:var pd=a.g,Lc=a.i;pd.b==28&&Lc.b==28&&$(A,a,!!pd.h!=!!Lc.h);break;case 54:var cc=a.g,jc=a.i;cc.b==30&&(cc.h|0)==1?(L(a,r(jc)),A.b=!0):jc.b==30&&(jc.h|0)==1?(L(a,r(cc)),A.b=!0):cc.b==30&&jc.b==30?Yb(A,a,mi(cc.h|0,jc.h|0)):cc.b==29&&jc.b==29&&Xb(A,
66
+ a,cc.h*jc.h);break;case 55:var Lb=a.g,Mc=a.i;ta(Lb,Mc)&&sa(Lb)?($(A,a,!1),A.b=!0):Lb.b==30&&Mc.b==30?$(A,a,(Lb.h|0)!=(Mc.h|0)):Lb.b==29&&Mc.b==29&&$(A,a,Lb.h!=Mc.h);break;case 59:var Mb=a.g,kc=a.i;rc(Mb,0)?(L(a,s(o(new Gi(33),r(kc)),a.f)),A.b=!0):rc(kc,0)?(L(a,r(Mb)),A.b=!0):Mb.b==30&&kc.b==30?Yb(A,a,(Mb.h|0)-(kc.h|0)|0):Mb.b==29&&kc.b==29&&Xb(A,a,Mb.h-kc.h);break}}function $(c,a,b){L(a,s(s(Ia(new Gi(28),b),ha),ha)),c.b=!0}function Xb(c,a,b){L(a,s(s(ra(new Gi(29),b),ia),ia)),c.b=!0}function Yb(c,a,b){L(a,s(s(Y(new Gi(30),b),fa),fa)),c.b=!0}function _c(b,a){a.b==3&&Wc(a)&&(oa(a,r(a.g)),b.b=!0)}function nf(b,a){Qa(b.c,a.c,a)}function ph(b,a){Qa(b.c,a.c,a)}function Vd(c,a){var b=Ga(c.c,a,null);return b||c.b&&Vd(c.b,a)}function $c(a){return new Oi(a,0,a.b.length)}function qh(d,a){if(Wd(d),a<0||a>=d.d.length)return'';var b=d.d[a],c=(a+1|0)<d.d.length?d.d[a+1|0]-1|0:d.b.length;return d.b.slice(b,c)}function Zb(h,a){Wd(h);for(var b=h.d.length,c=0;b>0;){var d=b/2|0,e=c+d|0;h.d[e]<=a?(c=e+1|0,b=(b-d|0)-1|0):b=d}var f=c>0?a-h.d[c-1|0]|0:a;
67
+ return new Ui(c-1|0,f)}function _b(d,a,b){if(Wd(d),a>-1&&a<d.d.length){var c=d.d[a];if(b>-1&&((a+1|0)<d.d.length?(c+b|0)<d.d[a+1|0]:(c+b|0)<=d.b.length))return c+b|0}return-1}function Wd(b){if(!b.d){b.d=[0];for(var a=0,c=b.b.length;a<c;a=a+1|0)b.b.charCodeAt(a)^10||b.d.push(a+1|0)}}function Xd(a){switch(a){case 2:return Zh;case 3:return _h;case 4:return $h}return null}function Yd(a,b){switch(a){case ha:switch(b){case 1:return ha;case 2:return yc;case 3:return zc;case 4:return Ac}break;case ia:switch(b){case 1:return ia;case 2:return nb;case 3:return ob;case 4:return pb}break;case fa:switch(b){case 1:return fa;case 2:return Bc;case 3:return Cc;case 4:return Dc}break;case gc:switch(b){case 1:return gc;case 2:return jd;case 3:return kd;case 4:return ld}break}return null}function of(a){return (a.e&4097)!=0||(a.e&32)!=0&&a.d.a==1}function Zd(a){return a instanceof qf&&(a.C==0||a.C==2)}function z(a){return a.l||(a.l=new Zi(a,null,0)),a.l}function sh(c,a){if(c.n.length^a.n.length)return!1;for(var b=0,d=c.n.length;b<d;b=b+1|0)if(ea(c.n[b])!=ea(a.n[b]))return!1;
68
+ return!0}function _d(){return pf||(pf=new wc(-999,null,'length',null),pf.k=s(new Gi(26),fa)),pf}function ea(a){return a.Q||a.p.f}function W(a){var b;return (b=a.N)&&b.g}function xc(a,b,c){for(var d=b.b.split(ai),e=[],f=null,h=0,m=0,l=0,ba=d.length;l<ba;l=l+1|0){var g=d[l],i=g.length,n=m+i|0,k=new Oi(b,m,n);if(l%2){var q=g.charCodeAt(0);if(q>64&&q<91||q>96&&q<123||q==95){var v=Ga(uh,g,130);v^130?e.push(new Xi(k,v,f)):vh.has(g)?sg(a,k):e.push(new Xi(k,126,f))}else if(q^64){if(q>47&&q<58||q==46&&i>1)bi.test(g)?(q=g.charCodeAt(i-1|0),e.push(new Xi(k,q==117||q==85?128:127,f))):e.push(new Xi(k,125,f));else if(q^35){if(q^34){var N=Ga(ci,g,130);N^130||(g.startsWith('//')?c^1?(f||(f=[])).push(k):N=0:g.startsWith('/*')&&(c^1?(f||(f=[])).push(k):N=1)),N^130&&e.push(new Xi(k,N,f))}else e.push(new Xi(k,129,f))}else{for(var C=123,p=1;p<g.length&&(g.charCodeAt(p)==32||g.charCodeAt(p)==9);)p=p+1|0;switch(g.slice(p)){case'extension':C=121;break;case'include':C=122;break;case'version':C=124;break}e.push(new Xi(k,C,f))}}else{var u=71;
69
+ switch(g){case'@vertex':u=74;break;case'@fragment':u=73;break}e.push(new Xi(k,u,f))}}else if(g!=''){t(a,k,'Syntax error "'+g+'"');break}e.length^h&&(f=null,h=e.length),m=n}var y=0;if(e.length>2){var Q=e[0],S=e[1],ca=e[2];Q.b==124&&S.b==127&&ca.b==126&&J(S.a)=='300'&&J(ca.a)=='es'&&(y=1)}e.push(new Xi(new Oi(b,m,m),130,f)),b.c=new Yi(e,y)}function sf(a){return a.b?sf(a.b):a}function ad(c,a){c.f||(c.f=new Map);var b=Ba(c.f,a,null);return b||(Ha(c.f,a,b=new Zi(null,c,a)),b.d=!0,b.e=c.e),b}function H(a){return a.b?a.c>0?H(a.b)+'['+a.c+']':H(a.b)+'[]':a.a.c}function X(a){switch(a){case yc:case nb:case Bc:case jd:case dc:case dd:case ed:return 2;case zc:case ob:case Cc:case kd:case ec:case fd:case gd:return 3;case Ac:case pb:case Dc:case ld:case fc:case hd:case id:return 4}return a.c}function wa(a){switch(a){case yc:case zc:case Ac:return ha;case nb:case ob:case pb:return ia;case Bc:case Cc:case Dc:return fa;case jd:case kd:case ld:return gc;case dc:case fd:case hd:return nb;case ec:case dd:case id:return ob;case fc:case ed:case gd:
70
+ return pb}return a.b}function Ka(a){switch(a){case ha:case ia:case fa:case gc:return 1;case yc:case nb:case Bc:case jd:return 2;case zc:case ob:case Cc:case kd:return 3;case Ac:case pb:case Dc:case ld:case dc:return 4;case dd:case fd:return 6;case ed:case hd:return 8;case ec:return 9;case gd:case id:return 12;case fc:return 16}return 0}function T(a){switch(a){case ha:case yc:case zc:case Ac:return ha;case ia:case nb:case ob:case pb:case dc:case ec:case fc:case dd:case ed:case fd:case gd:case hd:case id:return ia;case fa:case Bc:case Cc:case Dc:return fa;case gc:case jd:case kd:case ld:return gc}return null}function bd(a){switch(a){case yc:case zc:case Ac:case Bc:case Cc:case Dc:case jd:case kd:case ld:case nb:case ob:case pb:return!0}return!1}function xa(a){switch(a){case dc:case ec:case fc:case dd:case ed:case fd:case gd:case hd:case id:return!0}return!1}function ib(b){var a=T(b);return a==fa||a==gc}function cd(b){var a=T(b);return a==ia||a==fa||a==gc}function wh(b,a){return !b.e&&(!b.d||a==1)}function tf(a){
71
+ return a==$d||a.d}function ma(a){return a.e=!0,a}function ae(a,b){switch(mi(a,10)+b|0){case 21:case 12:return nb;case 31:case 13:return ob;case 41:case 14:return pb;case 22:return dc;case 23:return dd;case 24:return ed;case 32:return fd;case 33:return ec;case 34:return gd;case 42:return hd;case 43:return id;case 44:return fc}return null}function uf(b){var a=b.a.length;return b.a.push(a),a}function be(c,a,b){c.a[md(c,a)]=md(c,b)}function md(c,a){var b=c.a[a];return b^a&&(b=md(c,b),c.a[a]=b),b}function ya(a,b){vf(a),process.stdout.write(b),vf(0)}function Nh(a){ya(3,'error: '),ya(1,a+'\n')}function Oh(a){ya(2,'note: '),ya(1,a+'\n')}function Ph(a){ya(7,'warning: '),ya(1,a+'\n')}function wf(a){for(var b=process.stdout.columns,l=0,g=a.a,i=g.length;l<i;l=l+1|0){var c=g[l];c.b&&ya(1,Od(c.b)+': ');switch(c.a){case 1:Ph(c.c);break;case 0:Nh(c.c);break}if(c.b){var d=Pd(c.b,b);ya(2,d.a+'\n'),ya(4,d.b+'\n')}if(c.d){ya(1,Od(c.d)+': '),Oh(c.e);var e=Pd(c.d,b);ya(2,e.a+'\n'),ya(4,e.b+'\n')}}var f=a.d!=0,h=a.c!=0,m='';h&&(m+=a.c+' warning'+(a.c^1?'s':''),
72
+ f&&(m+=' and ')),f&&(m+=a.d+' error'+(a.d^1?'s':'')),(h||f)&&process.stdout.write(m+' generated\n')}function xf(a){if(ni(a))return[new Vi('<stdin>',a)];if(a instanceof Array){for(var b=[],c=0,e=a.length;c<e;c=c+1|0){var d=a[c];b.push(new Vi(oi(d.name),oi(d.contents)))}return b}return[new Vi(oi(a.name),oi(a.contents))]}function yf(a){return function(b,c){var d=a(b,c);if(ni(d))return new Vi(b,d);if(!d)return null;var e=d.name,f=d.contents;if(ni(e)&&ni(f))return new Vi(e,f);throw new Error('Invalid file access result')}}function Qh(){var a=process.argv.slice(2),b=new pi,c=[],d=0,e=null,f=require('fs'),h=require('path');b.e=function(m,l){var g=h.resolve(h.dirname(l),m);try{return new Vi(g,f.readFileSync(g,'utf8'))}catch(p){}return null};for(var u=0,C=a.length;u<C;u=u+1|0){var i=a[u];if(i.startsWith('-'))switch(i){case'--disable-rewriting':b.a=!1;break;case'--pretty-print':b.b=!1;break;case'--keep-symbols':b.d=!1;break;case'--help':case'-h':console.log("\nUsage: glslx [sources] [flags]\n\n --output=PATH\n Set the path to the output file. Defaults to standard out.\n\n --format=FORMAT\n Set the output format, must be json, js, c++, rust, or skew. Defaults to json.\n\nAdvanced:\n\n --disable-rewriting\n Disable syntax tree rewriting, useful to check for driver bugs.\n\n --pretty-print\n Format the output nicely instead of minifying it.\n\n --renaming=MODE\n Valid modes are all, internal-only, or none. Defaults to all.\n\n --keep-symbols\n Don't inline constants or remove unused symbols.\n");
73
+ return;default:if(i.startsWith('--output='))e=i.slice(9);else if(i.startsWith('--format=')){var n=i.slice(9);Df.has(n)||(console.log('invalid output format "'+n+'"'),process.exit(1)),d=Df.get(n)}else if(i.startsWith('--renaming=')){var k=i.slice(11);Ef.has(k)||(console.log('invalid symbol renaming mode "'+k+'"'),process.exit(1)),b.c=Ef.get(k)}else console.log('invalid flag "'+i+'"'),process.exit(1);break}else c.push(new Vi(h.resolve(i),f.readFileSync(i,'utf8')))}if(c.length){var q=new Fi,v=je(q,c,b);v?e!=null?(f.writeFileSync(e,sd(v,d)),wf(q)):process.stdout.write(sd(v,d)):(wf(q),process.exit(1))}else console.log("\nUsage: glslx [sources] [flags]\n\n --output=PATH\n Set the path to the output file. Defaults to standard out.\n\n --format=FORMAT\n Set the output format, must be json, js, c++, rust, or skew. Defaults to json.\n\nAdvanced:\n\n --disable-rewriting\n Disable syntax tree rewriting, useful to check for driver bugs.\n\n --pretty-print\n Format the output nicely instead of minifying it.\n\n --renaming=MODE\n Valid modes are all, internal-only, or none. Defaults to all.\n\n --keep-symbols\n Don't inline constants or remove unused symbols.\n")}
74
+ function $i(){var a=(function(){return this})(),b=typeof exports!=='undefined'?exports:a.GLSLX={};b.compile=fi,b.compileIDE=gi,b.format=hi,typeof require!=='undefined'&&typeof module!=='undefined'&&require.main===module&&Qh()}function Fd(a){return a>27&&a<31}function Gd(a){return a>31&&a<40}function Dg(a){return a>31&&a<38}function Hd(a){return a>35&&a<40}function Uc(a){return a>39&&a<71}function Vc(a){return a>59&&a<71}function Eg(a){return a==4||a==5||a==6||a==15}function Je(a){return a==7||a==10||a==19}function rh(c){var a=(c&16384)!=0,b=(c&32768)!=0;return a&&!b?1:b&&!a?2:0}function hb(d,a){var b='';if(d&128&&(b+='invariant '),d&8&&(b+='flat '),d&2048&&(b+='smooth '),d&1<<17){var c=d/(1<<18)|0;b+='layout(location'+a+'='+a+c+')'+a}return d&1&&(b+='attribute '),d&4&&(b+='const '),d&4096&&(b+='uniform '),d&8192&&(b+='varying '),d&2&&(b+='centroid '),d&32&&(b+='in '),d&64&&(b+='inout '),d&1024&&(b+='out '),d&16&&(b+='highp '),d&256&&(b+='lowp '),d&512&&(b+='mediump '),b}function th(a){return a>79&&a<110}function rf(a){
75
+ switch(a){case 126:case 42:case 33:case 57:case 58:case 59:case 60:case 34:case 61:case 46:case 47:case 48:case 49:case 64:case 65:case 66:case 67:case 14:case 39:case 40:case 41:case 20:case 22:case 23:case 24:case 63:case 68:case 69:case 70:case 3:case 5:case 6:case 7:case 26:case 27:case 28:case 51:case 52:case 53:case 54:case 55:case 56:return!0}return!1}function vf(a){process.stdout.isTTY&&process.stdout.write('\x1B[0;'+ei.get(a)+'m')}function tb(b,a){return b[b.length-1|0]=a}function rd(a){return a[a.length-1|0]}function Kf(c,a){for(var d=0,e=a.length;d<e;d=d+1|0){var b=a[d];c.push(b)}}function Nb(d,a){for(var b=0,c=0,e=d.length;c<e;c=c+1|0)a(d[c])||(b<c&&(d[b]=d[c]),b=b+1|0);for(;b<d.length;)d.pop()}function Qa(c,a,b){return c.set(a,b),b}function j(c,a,b){return c.set(a,b),c}function Ga(d,a,b){var c=d.get(a);return c!==void 0?c:b}function Ha(c,a,b){return c.set(a,b),b}function Ra(c,a,b){return c.set(a,b),c}function Ba(d,a,b){var c=d.get(a);return c!==void 0?c:b}function qd(b,a){return (a<b|0)-(a>b|0)|0}
76
+ function Nc(a){for(var b=new ji,d=0,e=a.length;d<e;d=d+1|0){var c=a[d];b.a+=Hf(c)}return b.a}function Jf(b,a){return (a<b|0)-(a>b|0)|0}function mc(d,a){for(var b='',c=0;c<a;c=c+1|0)b+=d;return b}function Hf(a){return a<65536?String.fromCharCode(a):String.fromCharCode((a-65536>>10)+55296|0)+String.fromCharCode((a-65536&1023)+56320|0)}function Ec(a){if(!a)return null;var b=a.a,c=Zb(b,a.b),d=Zb(b,a.c);return{source:b.a,start:{line:c.a,column:c.b},end:{line:d.a,column:d.b}}}function fi(a,b){b=b||{};var c=xf(a),d=new Fi,e=new pi;e.c=Ga(Ef,b.renaming,0),b.disableRewriting&&(e.a=!1),b.prettyPrint&&(e.b=!1),b.keepSymbols&&(e.d=!1),b.fileAccess&&(e.e=yf(b.fileAccess)),e.f='indent'in b?oi(b.indent):' ',e.h='newline'in b?oi(b.newline):'\n';var f=je(d,c,e);return{log:qg(d),output:f?sd(f,Ga(Df,b.format,0)):null}}function gi(a,b){b=b||{};var c=xf(a),d=new Fi,e=new pi;b.fileAccess&&(e.e=yf(b.fileAccess));var f=Lf(d,c,e),h=function(m){for(var pd,l=m.source+'',g=m.line|0,i=m.column|0,n=!!m.ignoreDiagnostics,k=null,q=null,v=null,Lb=0,Mc=c.length;Lb<Mc;Lb=Lb+1|0){
77
+ var u=c[Lb];if(u.a==l){var C=_b(u,g,i);if(~C){if(!n&&d)for(var Lc=0,cc=d.a,jc=cc.length;Lc<jc;Lc=Lc+1|0){var p=cc[Lc];if(p.b&&p.b.a==u&&uc(p.b,C)){q=new wi(p.c,''),k=p.b;break}}if(!q&&f){var N=new xi(u,C);Sa(N,f.a),q=jg(N),q&&(k=N.e,v=(pd=N.d)&&pd.c)}}break}}return{tooltip:q&&q.a,range:Ec(k),symbol:v,documentation:q&&q.b}},y=function(Q){for(var S=Q.source+'',ca=Q.line|0,ba=Q.column|0,V=null,da=null,ga=null,Mb=0,kc=f.b,A=kc.length;Mb<A;Mb=Mb+1|0){var ja=kc[Mb];if(ja.a.a.a==S){var ua=_b(ja.a.a,ca,ba);if(~ua&&uc(ja.a,ua))return{definition:Ec(ja.b),range:Ec(ja.a),symbol:ja.b.a.a}}}for(var lc=0,de=c.length;lc<de;lc=lc+1|0){var Na=c[lc];if(Na.a==S){var na=_b(Na,ca,ba);if(~na&&f){var ka=new xi(Na,na);Sa(ka,f.a),ka.d&&ka.d.b&&ka.d.b.a.a!='<api>'&&(da=ka.d.b,V=ka.e,ga=ka.d.c)}break}}return{definition:Ec(da),range:Ec(V),symbol:ga}},qb=function(qa){for(var $a=qa.source+'',La=null,nd=0,Sh=c.length;nd<Sh;nd=nd+1|0){var Oa=c[nd];if(Oa.a==$a){if(f){var jb=new yi(Oa);Ae(jb,f.a),La=jb.b.map(function(Ya){return{name:Ya.c,kind:Ya instanceof qf?'variable':Ya instanceof wc?'function':Ya instanceof vc?'struct':null,
78
+ range:Ec(Ya.b)}})}break}}return{symbols:La}},za=function(Za){for(var Fa=Za.source+'',Ea=Za.line|0,Gb=Za.column|0,kb=null,ab=null,_a=null,fe=0,Th=c.length;fe<Th;fe=fe+1|0){var lb=c[fe];if(lb.a==Fa){var Hb=_b(lb,Ea,Gb);if(~Hb&&f){var Ma=new zi(lb,Hb);mg(Ma,f.a),Ma.e&&Ma.e.b&&Ma.e.b.a.a!='<api>'&&(kb=Ma.c.map(Ec),ab=Ma.d.map(Ec),_a=Ma.e.c)}break}}return{ranges:kb,definitions:ab,symbol:_a}},hc=function(rb){for(var Ib=rb.source+'',$b=rb.line|0,sb=rb.column|0,Jb=[],ge=0,Uh=c.length;ge<Uh;ge=ge+1|0){var Db=c[ge];if(Db.a==Ib){var ac=_b(Db,$b,sb);if(~ac&&f){var Fc=new Bi(Db,ac);pg(Fc,f.a),Jb=Fc.d.map(function(Pa){return{kind:Pa.a,name:Pa.b,detail:Pa.c,documentation:Pa.d}})}}}return{completions:Jb}},Kb=function(Gc){for(var od=Gc.source+'',ce=Gc.line|0,Kc=Gc.column|0,bc=[],Hc=-1,Ic=-1,he=0,Vh=c.length;he<Vh;he=he+1|0){var Eb=c[he];if(Eb.a==od){var Aa=_b(Eb,ce,Kc);if(~Aa&&f){var mb=new Di(Eb,Aa);Dd(mb,f.a),Hc=mb.d,Ic=mb.e,bc=mb.c.map(function(Fb){return{text:Fb.a,'arguments':Fb.b,documentation:Fb.c}})}}}return{signatures:bc,
79
+ activeArgument:Hc,activeSignature:Ic}};return{unusedSymbols:d.b.map(function(ic){return{name:ic.c,range:Ec(ic.b)}}),diagnostics:d.a.map(function(Jc){return{kind:ii[Jc.a].toLowerCase(),range:Ec(Jc.b),text:Jc.c}}),tooltipQuery:h,definitionQuery:y,symbolsQuery:qb,renameQuery:za,completionQuery:hc,signatureQuery:Kb}}function hi(a,b){b=b||{};var c='indent'in b?oi(b.indent):' ',d='newline'in b?oi(b.newline):'\n',e=2;if('trailingNewline'in b){var f=oi(b.trailingNewline);switch(f){case'preserve':e=0;break;case'remove':e=1;break;case'insert':e=2;break;default:throw new Error('Invalid "trailingNewline" value: '+f)}}return ig(oi(a),c,d,e)}function ji(){this.a=''}function ki(){this.a='',this.b=0,this.c=0}function pi(){this.a=!0,this.b=!0,this.c=0,this.d=!0,this.e=null,this.f=' ',this.h='\n'}function qi(a){this.a=new Map,this.c=0,this.b=a}function ri(a,b,c){this.a=a,this.b=b,this.c=c}function si(a,b){this.a=a,this.b=b}function ti(a,b){this.a=a,this.b=b}function ui(){this.a=[],this.b=[]}function vi(a,b){this.a='',this.b='',
80
+ this.c=null,this.d=null,this.e=' ',this.f=b.b,this.f?(this.e='',this.d=''):(this.c=b.f,this.d=b.h);for(var c=null,d=a.g;d;d=d.k)Sf(this,d)||(c&&Rf(c,d)&&(this.a+=this.d),bb(this,d),this.a+=this.d,c=d)}function wi(a,b){this.a=a,this.b=b}function xi(a,b){this.a=a,this.b=b,this.c=null,this.d=null,this.e=null,this.f=null,this.h=null}function yi(a){this.a=a,this.b=[]}function zi(a,b){this.a=a,this.b=b,this.c=[],this.d=[],this.e=null}function Ai(a,b){this.a=a,this.b=b,this.c='',this.d=''}function Bi(a,b){this.a=a,this.b=b,this.c=new Map,this.d=[]}function Ci(a,b,c){this.a=a,this.b=b,this.c=c}function Di(a,b){this.a=a,this.b=b,this.c=[],this.d=-1,this.e=-1}function Ei(a,b,c){this.a=a,this.b=b,this.c=c,this.d=null,this.e=''}function Fi(){this.a=[],this.b=[],this.c=0,this.d=0,this.e=null}function Gi(a){this.a=Re(),this.b=a,this.c=null,this.d=null,this.e=null,this.f=null,this.h=0,this.m=null,this.l=null,this.g=null,this.i=null,this.n=null,this.k=null,this.q=!1}function Hi(a,b){this.a=a,this.b=b}function Ii(a){this.a=a}function Ji(a,b){
81
+ this.a=a,this.b=b}function Ki(a,b,c,d,e){this.a=null,this.b=null,this.c=0,this.d=null,this.e=null,this.f=null,this.h=null,this.m=[],this.l=0,this.g=0,this.i=null,this.a=a,this.b=b.a,this.c=b.b,this.d=c,this.e=d,this.f=e,this.h=Kg(this.c)}function Li(a){this.a=a,this.b=null,this.c=null}function Mi(){this.a=new Map}function Ni(a,b){this.a=a,this.b=b}function Oi(a,b,c){this.a=a,this.b=b,this.c=c}function Qi(a,b){this.a=a,this.b=b,this.c=new Map,this.d=0,this.e=!1}function Pi(a){this.a=a,this.b=[],this.c=[],this.d=new Map,this.e=new _i,this.f=new _i,this.h=0,this.m=0,this.l=-1}function Ri(a,b,c){this.a=a,this.b=b,this.c=c,this.d=new ui,this.e=[],this.f=new Map,this.h=null}function Si(a){this.a=a,this.b=!1,this.c=[],this.d=new Map,this.e=new Map,this.f=new Map}function Ti(a,b){this.a=a,this.b=b,this.c=new Map}function Ui(a,b){this.a=a,this.b=b}function Vi(a,b){this.a=a,this.b=b,this.c=null,this.d=null}function Wi(a,b,c,d){this.a=a,this.b=b,this.c=c,this.d=d,this.e=0,this.f=null,this.h=null,this.m=null,this.l=null,this.g=0}
82
+ function vc(a,b,c,d){Wi.call(this,a,b,c,d),this.i=[]}li(vc,Wi);function wc(a,b,c,d){Wi.call(this,a,b,c,d),this.n=[],this.k=null,this.q=null,this.v=null,this.u=null}li(wc,Wi);function qf(a,b,c,d,e){Wi.call(this,a,b,c,d),this.C=e,this.p=null,this.N=null,this.y=null,this.Q=null}li(qf,Wi);function Xi(a,b,c){this.a=a,this.b=b,this.c=c}function Yi(a,b){this.a=a,this.b=b}function Zi(a,b,c){this.a=a,this.b=b,this.c=c,this.d=!1,this.e=!1,this.f=null}function _i(){this.a=[]}var Wh=new ki,Af=0,ee=new Hi(null,-1),Bf=null,Cf=null,Og=j(j(j(j(new Map,'disable',1),'enable',2),'require',3),'warn',4),Yh=j(j(j(j(new Map,'GL_OES_standard_derivatives',0),'GL_EXT_frag_depth',0),'GL_EXT_draw_buffers',0),'GL_EXT_shader_texture_lod',0),Zh=['xy','st','rg'],_h=['xyz','stp','rgb'],$h=['xyzw','stpq','rgba'],pf=null,ai=new RegExp('(\\.[0-9]+[eE][+-]?[0-9]+\\b|\\.[0-9]+\\b|[0-9]+\\.[0-9]+[eE][+-]?[0-9]+\\b|[0-9]+\\.[0-9]+\\b|[0-9]+\\.[eE][+-]?[0-9]+\\b|[0-9]+\\.|[0-9]+[eE][+-]?[0-9]+\\b|[1-9][0-9]*[uU]?\\b|0[0-7]*[uU]?\\b|0[xX][0-9A-Fa-f]+[uU]?\\b|[ \t\r\n]|/\\*(?:.|\r\n|\n)*?\\*/|//.*|&&|\\|\\||\\^\\^|\\+\\+|--|<<=?|>>=?|[()[\\]{}\\.,?:;]|[+\\-*/%=!<>&|^~]=?|@?[A-Za-z_][A-Za-z0-9_]*\\b|#\\s*\\w+\\b|"(?:[^"\\n\\\\]|\\\\.)*"?)'),bi=new RegExp('^([1-9][0-9]*|0[0-7]*|0[xX][0-9A-Fa-f]+)[uU]?$'),uh=j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(new Map,
83
+ 'attribute',2),'bool',3),'break',4),'bvec2',5),'bvec3',6),'bvec4',7),'const',8),'continue',9),'discard',10),'do',11),'else',12),'false',13),'float',14),'for',15),'highp',16),'if',17),'in',18),'inout',19),'int',20),'invariant',21),'ivec2',22),'ivec3',23),'ivec4',24),'lowp',25),'mat2',26),'mat3',27),'mat4',28),'mediump',29),'out',30),'precision',31),'return',32),'sampler2D',33),'samplerCube',34),'struct',35),'true',36),'uniform',37),'varying',38),'vec2',39),'vec3',40),'vec4',41),'void',42),'while',43),'centroid',44),'flat',45),'isampler2D',46),'isampler2DArray',47),'isampler3D',48),'isamplerCube',49),'layout',50),'mat2x2',26),'mat2x3',51),'mat2x4',52),'mat3x2',53),'mat3x3',27),'mat3x4',54),'mat4x2',55),'mat4x3',56),'mat4x4',28),'sampler2DArray',57),'sampler2DArrayShadow',58),'sampler2DShadow',59),'sampler3D',60),'samplerCubeShadow',61),'smooth',62),'uint',63),'usampler2D',64),'usampler2DArray',65),'usampler3D',66),'usamplerCube',67),'uvec2',68),'uvec3',69),'uvec4',70),'export',72),'import',75),ci=j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(new Map,
84
+ '~',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),vh=j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(new Map,'asm',0),'cast',0),'class',0),'default',0),'double',0),'dvec2',0),'dvec3',0),'dvec4',0),'enum',0),'extern',0),'external',0),'fixed',0),'fvec2',0),'fvec3',0),'fvec4',0),'goto',0),'half',0),'hvec2',0),'hvec3',0),'hvec4',0),'inline',0),'input',0),'interface',0),'long',0),'namespace',0),'noinline',0),'output',0),'packed',0),'public',0),'sampler1D',0),'sampler1DShadow',0),'sampler2DRect',0),'sampler2DRectShadow',0),'sampler3DRect',0),'short',0),'sizeof',0),'static',0),'superp',0),'switch',0),'template',0),'this',0),'typedef',
85
+ 0),'union',0),'unsigned',0),'using',0),'volatile',0),ha=z(new vc(-1,null,'bool',null)),yc=z(new vc(-2,null,'bvec2',null)),zc=z(new vc(-3,null,'bvec3',null)),Ac=z(new vc(-4,null,'bvec4',null)),I=z(new vc(-5,null,'<error>',null)),ia=z(new vc(-6,null,'float',null)),fa=z(new vc(-7,null,'int',null)),Bc=z(new vc(-8,null,'ivec2',null)),Cc=z(new vc(-9,null,'ivec3',null)),Dc=z(new vc(-10,null,'ivec4',null)),dc=z(new vc(-11,null,'mat2',null)),ec=z(new vc(-12,null,'mat3',null)),fc=z(new vc(-13,null,'mat4',null)),xh=ma(z(new vc(-14,null,'sampler2D',null))),yh=ma(z(new vc(-15,null,'samplerCube',null))),nb=z(new vc(-16,null,'vec2',null)),ob=z(new vc(-17,null,'vec3',null)),pb=z(new vc(-18,null,'vec4',null)),$d=z(new vc(-19,null,'void',null)),zh=ma(z(new vc(-20,null,'isampler2D',null))),Ah=ma(z(new vc(-21,null,'isampler2DArray',null))),Bh=ma(z(new vc(-22,null,'isampler3D',null))),Ch=ma(z(new vc(-23,null,'isamplerCube',null))),dd=z(new vc(-24,null,'mat2x3',null)),ed=z(new vc(-25,null,'mat2x4',null)),fd=z(new vc(-26,null,'mat3x2',
86
+ null)),gd=z(new vc(-27,null,'mat3x4',null)),hd=z(new vc(-28,null,'mat4x2',null)),id=z(new vc(-29,null,'mat4x3',null)),Dh=ma(z(new vc(-30,null,'sampler2DArray',null))),Eh=ma(z(new vc(-31,null,'sampler2DArrayShadow',null))),Fh=ma(z(new vc(-32,null,'sampler2DShadow',null))),di=ma(z(new vc(-33,null,'sampler3D',null))),Gh=ma(z(new vc(-34,null,'samplerCubeShadow',null))),gc=z(new vc(-35,null,'uint',null)),Hh=ma(z(new vc(-36,null,'usampler2D',null))),Ih=ma(z(new vc(-37,null,'usampler2DArray',null))),Jh=ma(z(new vc(-38,null,'usampler3D',null))),Kh=ma(z(new vc(-39,null,'usamplerCube',null))),jd=z(new vc(-40,null,'uvec2',null)),kd=z(new vc(-41,null,'uvec3',null)),ld=z(new vc(-42,null,'uvec4',null)),Lh=[ha,yc,zc,Ac,ia,fa,Bc,Cc,Dc,dc,ec,fc,xh,yh,nb,ob,pb],Mh=[zh,Ah,Bh,Ch,dd,ed,fd,gd,hd,id,Dh,Eh,Fh,Gh,gc,Hh,Ih,Jh,Kh,jd,kd,ld],Df=j(j(j(j(j(new Map,'json',0),'js',1),'c++',2),'skew',3),'rust',4),Ef=j(j(j(new Map,'all',0),'internal-only',1),'none',2),ii=['ERROR','WARNING'],Rh=['GLOBAL','STRUCT_BLOCK','VARIABLE','BLOCK','BREAK',
87
+ 'CONTINUE','DISCARD','DO_WHILE','EXPRESSION','EXTENSION','FOR','FUNCTION','IF','MODIFIER_BLOCK','PRECISION','RETURN','STRUCT','VARIABLES','VERSION','WHILE','CALL','DOT','HOOK','NAME','PARSE_ERROR','SEQUENCE','TYPE','UNKNOWN_CONSTANT','BOOL','FLOAT','INT','UINT','COMPLEMENT','NEGATIVE','NOT','POSITIVE','PREFIX_DECREMENT','PREFIX_INCREMENT','POSTFIX_DECREMENT','POSTFIX_INCREMENT','ADD','BITWISE_AND','BITWISE_OR','BITWISE_XOR','DIVIDE','EQUAL','GREATER_THAN','GREATER_THAN_OR_EQUAL','INDEX','LESS_THAN','LESS_THAN_OR_EQUAL','LOGICAL_AND','LOGICAL_OR','LOGICAL_XOR','MULTIPLY','NOT_EQUAL','REMAINDER','SHIFT_LEFT','SHIFT_RIGHT','SUBTRACT','ASSIGN','ASSIGN_ADD','ASSIGN_BITWISE_AND','ASSIGN_BITWISE_OR','ASSIGN_BITWISE_XOR','ASSIGN_DIVIDE','ASSIGN_MULTIPLY','ASSIGN_REMAINDER','ASSIGN_SHIFT_LEFT','ASSIGN_SHIFT_RIGHT','ASSIGN_SUBTRACT'],zf=['SINGLE_LINE_COMMENT','MULTI_LINE_COMMENT','ATTRIBUTE','BOOL','BREAK','BVEC2','BVEC3','BVEC4','CONST','CONTINUE','DISCARD','DO','ELSE','FALSE','FLOAT','FOR','HIGHP','IF','IN','INOUT','INT',
88
88
  'INVARIANT','IVEC2','IVEC3','IVEC4','LOWP','MAT2','MAT3','MAT4','MEDIUMP','OUT','PRECISION','RETURN','SAMPLER2D','SAMPLERCUBE','STRUCT','TRUE','UNIFORM','VARYING','VEC2','VEC3','VEC4','VOID','WHILE','CENTROID','FLAT','ISAMPLER2D','ISAMPLER2DARRAY','ISAMPLER3D','ISAMPLERCUBE','LAYOUT','MAT2X3','MAT2X4','MAT3X2','MAT3X4','MAT4X2','MAT4X3','SAMPLER2DARRAY','SAMPLER2DARRAYSHADOW','SAMPLER2DSHADOW','SAMPLER3D','SAMPLERCUBESHADOW','SMOOTH','UINT','USAMPLER2D','USAMPLER2DARRAY','USAMPLER3D','USAMPLERCUBE','UVEC2','UVEC3','UVEC4','DECORATOR','EXPORT','EXPORT_FRAGMENT','EXPORT_VERTEX','IMPORT','COMPLEMENT','DECREMENT','INCREMENT','NOT','BITWISE_AND','BITWISE_OR','BITWISE_XOR','DIVIDE','EQUAL','GREATER_THAN','GREATER_THAN_OR_EQUAL','LESS_THAN','LESS_THAN_OR_EQUAL','LOGICAL_AND','LOGICAL_OR','LOGICAL_XOR','MINUS','MULTIPLY','NOT_EQUAL','PLUS','REMAINDER','SHIFT_LEFT','SHIFT_RIGHT','ASSIGN','ASSIGN_ADD','ASSIGN_BITWISE_AND','ASSIGN_BITWISE_OR','ASSIGN_BITWISE_XOR','ASSIGN_DIVIDE','ASSIGN_MULTIPLY','ASSIGN_REMAINDER','ASSIGN_SHIFT_LEFT',
89
- 'ASSIGN_SHIFT_RIGHT','ASSIGN_SUBTRACT','COLON','COMMA','DOT','LEFT_BRACE','LEFT_BRACKET','LEFT_PARENTHESIS','QUESTION','RIGHT_BRACE','RIGHT_BRACKET','RIGHT_PARENTHESIS','SEMICOLON','EXTENSION','VERSION','INCLUDE','PRAGMA','FLOAT_LITERAL','IDENTIFIER','INT_LITERAL','UINT_LITERAL','STRING_LITERAL','END_OF_FILE'],ci=Qa(Qa(Qa(Qa(Qa(Qa(Qa(Qa(Qa(new Map,0,0),1,1),2,90),3,31),4,32),5,33),6,34),7,35),8,36);Zi()})();
89
+ 'ASSIGN_SHIFT_RIGHT','ASSIGN_SUBTRACT','COLON','COMMA','DOT','LEFT_BRACE','LEFT_BRACKET','LEFT_PARENTHESIS','QUESTION','RIGHT_BRACE','RIGHT_BRACKET','RIGHT_PARENTHESIS','SEMICOLON','EXTENSION','INCLUDE','PREPROCESSOR_DIRECTIVE','VERSION','FLOAT_LITERAL','IDENTIFIER','INT_LITERAL','UINT_LITERAL','STRING_LITERAL','END_OF_FILE'],ei=Ra(Ra(Ra(Ra(Ra(Ra(Ra(Ra(Ra(new Map,0,0),1,1),2,90),3,31),4,32),5,33),6,34),7,35),8,36);$i()})();