#version 310 es
precision mediump float;

layout(location = 0) flat out int i_1;
layout(location = 1) flat out uint u_1;
layout(location = 2) flat out ivec4 vi_1;
layout(location = 3) flat out uvec4 vu_1;
struct Interface {
  int i;
  uint u;
  ivec4 vi;
  uvec4 vu;
  vec4 pos;
};

Interface vert_main() {
  Interface tint_symbol = Interface(0, 0u, ivec4(0, 0, 0, 0), uvec4(0u, 0u, 0u, 0u), vec4(0.0f, 0.0f, 0.0f, 0.0f));
  return tint_symbol;
}

void main() {
  Interface inner_result = vert_main();
  i_1 = inner_result.i;
  u_1 = inner_result.u;
  vi_1 = inner_result.vi;
  vu_1 = inner_result.vu;
  gl_Position = inner_result.pos;
  gl_Position.y = -(gl_Position.y);
  gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
  return;
}
#version 310 es
precision mediump float;

layout(location = 0) flat in int i_1;
layout(location = 1) flat in uint u_1;
layout(location = 2) flat in ivec4 vi_1;
layout(location = 3) flat in uvec4 vu_1;
layout(location = 0) out int value;
struct Interface {
  int i;
  uint u;
  ivec4 vi;
  uvec4 vu;
  vec4 pos;
};

int frag_main(Interface inputs) {
  return inputs.i;
}

void main() {
  Interface tint_symbol = Interface(i_1, u_1, vi_1, vu_1, gl_FragCoord);
  int inner_result = frag_main(tint_symbol);
  value = inner_result;
  return;
}
