#include <metal_stdlib>

using namespace metal;
int vec4f() {
  return 0;
}

float vec2f(int i) {
  return float(i);
}

bool vec2i(float f) {
  return bool(f);
}

struct tint_symbol_6 {
  float4 value [[position]];
};

float4 tint_symbol_inner(uint VertexIndex) {
  float4 const tint_symbol_1 = float4(0.0f);
  float4 const tint_symbol_2 = float4(1.0f);
  int const tint_symbol_3 = vec4f();
  float const tint_symbol_4 = vec2f(tint_symbol_3);
  bool const tint_symbol_5 = vec2i(tint_symbol_4);
  return select(tint_symbol_1, tint_symbol_2, tint_symbol_5);
}

vertex tint_symbol_6 tint_symbol(uint VertexIndex [[vertex_id]]) {
  float4 const inner_result = tint_symbol_inner(VertexIndex);
  tint_symbol_6 wrapper_result = {};
  wrapper_result.value = inner_result;
  return wrapper_result;
}

