#include <metal_stdlib>

using namespace metal;
struct Output {
  float4 Position;
  float4 color;
};
struct tint_symbol_2 {
  float4 color [[user(locn0)]];
  float4 Position [[position]];
};
struct tint_array_wrapper {
  float2 arr[4];
};
struct tint_array_wrapper_1 {
  float4 arr[4];
};

vertex tint_symbol_2 tint_symbol(uint VertexIndex [[vertex_id]], uint InstanceIndex [[instance_id]]) {
  tint_array_wrapper zv = {.arr={float2(0.200000003f, 0.200000003f), float2(0.300000012f, 0.300000012f), float2(-0.100000001f, -0.100000001f), float2(1.100000024f, 1.100000024f)}};
  float const z = zv.arr[InstanceIndex].x;
  Output output = {};
  output.Position = float4(0.5f, 0.5f, z, 1.0f);
  tint_array_wrapper_1 colors = {.arr={float4(1.0f, 0.0f, 0.0f, 1.0f), float4(0.0f, 1.0f, 0.0f, 1.0f), float4(0.0f, 0.0f, 1.0f, 1.0f), float4(1.0f, 1.0f, 1.0f, 1.0f)}};
  output.color = colors.arr[InstanceIndex];
  tint_symbol_2 const tint_symbol_3 = {.color=output.color, .Position=output.Position};
  return tint_symbol_3;
}

