#version 310 es
precision mediump float;

struct vertexUniformBuffer1 {
  mat2 transform1;
};
struct vertexUniformBuffer2 {
  mat2 transform2;
};

layout(binding = 0) uniform vertexUniformBuffer1_1 {
  mat2 transform1;
} x_20;
layout(binding = 0) uniform vertexUniformBuffer2_1 {
  mat2 transform2;
} x_26;

struct tint_symbol_3 {
  uint tint_symbol_1;
};
struct tint_symbol_4 {
  vec4 value;
};

vec4 tint_symbol_inner(uint tint_symbol_1) {
  vec2 indexable[3] = vec2[3](vec2(0.0f, 0.0f), vec2(0.0f, 0.0f), vec2(0.0f, 0.0f));
  mat2 x_23 = x_20.transform1;
  mat2 x_28 = x_26.transform2;
  uint x_46 = tint_symbol_1;
  vec2 tint_symbol_5[3] = vec2[3](vec2(-1.0f, 1.0f), vec2(1.0f, 1.0f), vec2(-1.0f, -1.0f));
  indexable = tint_symbol_5;
  vec2 x_51 = indexable[x_46];
  vec2 x_52 = (mat2((x_23[0u] + x_28[0u]), (x_23[1u] + x_28[1u])) * x_51);
  return vec4(x_52.x, x_52.y, 0.0f, 1.0f);
}

tint_symbol_4 tint_symbol(tint_symbol_3 tint_symbol_2) {
  vec4 inner_result = tint_symbol_inner(tint_symbol_2.tint_symbol_1);
  tint_symbol_4 wrapper_result = tint_symbol_4(vec4(0.0f, 0.0f, 0.0f, 0.0f));
  wrapper_result.value = inner_result;
  return wrapper_result;
}
void main() {
  tint_symbol_3 inputs;
  inputs.tint_symbol_1 = uint(gl_VertexID);
  tint_symbol_4 outputs;
  outputs = tint_symbol(inputs);
  gl_Position = outputs.value;
  gl_Position.z = 2.0 * gl_Position.z - gl_Position.w;
  gl_Position.y = -gl_Position.y;
}


