struct buf0 {
  ref : vec4<f32>,
}

@group(0) @binding(0) var<uniform> x_7 : buf0;

var<private> x_GLF_color : vec4<f32>;

fn main_1() {
  var f : f32;
  var v : vec4<f32>;
  f = determinant(mat3x3<f32>(vec3<f32>(1.0f, 0.0f, 0.0f), vec3<f32>(0.0f, 1.0f, 0.0f), vec3<f32>(0.0f, 0.0f, 1.0f)));
  let x_33 : f32 = f;
  let x_35 : f32 = f;
  let x_37 : f32 = f;
  let x_39 : f32 = f;
  v = vec4<f32>(sin(x_33), cos(x_35), exp2(x_37), log(x_39));
  let x_42 : vec4<f32> = v;
  let x_44 : vec4<f32> = x_7.ref;
  if ((distance(x_42, x_44) < 0.100000001f)) {
    x_GLF_color = vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f);
  } else {
    x_GLF_color = vec4<f32>(0.0f, 0.0f, 0.0f, 0.0f);
  }
  return;
}

struct main_out {
  @location(0)
  x_GLF_color_1 : vec4<f32>,
}

@fragment
fn main() -> main_out {
  main_1();
  return main_out(x_GLF_color);
}
