#include <metal_stdlib>

using namespace metal;
struct buf0 {
  /* 0x0000 */ packed_float2 resolution;
};
struct tint_array_wrapper {
  int arr[256];
};
struct main_out {
  float4 x_GLF_color_1;
};
struct tint_symbol_2 {
  float4 x_GLF_color_1 [[color(0)]];
};

void main_1(constant buf0& x_7, thread float4* const tint_symbol_7, thread tint_array_wrapper* const tint_symbol_8, thread float4* const tint_symbol_9) {
  float2 pos = 0.0f;
  int2 ipos = 0;
  int i = 0;
  int2 p = 0;
  bool canwalk = false;
  int v = 0;
  int directions = 0;
  int j = 0;
  int d = 0;
  float4 const x_59 = *(tint_symbol_7);
  float2 const x_62 = x_7.resolution;
  pos = (float2(x_59.x, x_59.y) / x_62);
  float const x_65 = pos.x;
  float const x_69 = pos.y;
  ipos = int2(int((x_65 * 16.0f)), int((x_69 * 16.0f)));
  i = 0;
  while (true) {
    int const x_77 = i;
    if ((x_77 < 256)) {
    } else {
      break;
    }
    int const x_80 = i;
    (*(tint_symbol_8)).arr[x_80] = 0;
    {
      int const x_82 = i;
      i = as_type<int>((as_type<uint>(x_82) + as_type<uint>(1)));
    }
  }
  p = int2(0, 0);
  canwalk = true;
  v = 0;
  while (true) {
    bool x_104 = false;
    bool x_124 = false;
    bool x_144 = false;
    bool x_164 = false;
    bool x_105_phi = false;
    bool x_125_phi = false;
    bool x_145_phi = false;
    bool x_165_phi = false;
    int const x_88 = v;
    v = as_type<int>((as_type<uint>(x_88) + as_type<uint>(1)));
    directions = 0;
    int const x_91 = p.x;
    bool const x_92 = (x_91 > 0);
    x_105_phi = x_92;
    if (x_92) {
      int const x_96 = p.x;
      int const x_99 = p.y;
      int const x_103 = (*(tint_symbol_8)).arr[as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_96) - as_type<uint>(2)))) + as_type<uint>(as_type<int>((as_type<uint>(x_99) * as_type<uint>(16))))))];
      x_104 = (x_103 == 0);
      x_105_phi = x_104;
    }
    bool const x_105 = x_105_phi;
    if (x_105) {
      int const x_108 = directions;
      directions = as_type<int>((as_type<uint>(x_108) + as_type<uint>(1)));
    }
    int const x_111 = p.y;
    bool const x_112 = (x_111 > 0);
    x_125_phi = x_112;
    if (x_112) {
      int const x_116 = p.x;
      int const x_118 = p.y;
      int const x_123 = (*(tint_symbol_8)).arr[as_type<int>((as_type<uint>(x_116) + as_type<uint>(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_118) - as_type<uint>(2)))) * as_type<uint>(16))))))];
      x_124 = (x_123 == 0);
      x_125_phi = x_124;
    }
    bool const x_125 = x_125_phi;
    if (x_125) {
      int const x_128 = directions;
      directions = as_type<int>((as_type<uint>(x_128) + as_type<uint>(1)));
    }
    int const x_131 = p.x;
    bool const x_132 = (x_131 < 14);
    x_145_phi = x_132;
    if (x_132) {
      int const x_136 = p.x;
      int const x_139 = p.y;
      int const x_143 = (*(tint_symbol_8)).arr[as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_136) + as_type<uint>(2)))) + as_type<uint>(as_type<int>((as_type<uint>(x_139) * as_type<uint>(16))))))];
      x_144 = (x_143 == 0);
      x_145_phi = x_144;
    }
    bool const x_145 = x_145_phi;
    if (x_145) {
      int const x_148 = directions;
      directions = as_type<int>((as_type<uint>(x_148) + as_type<uint>(1)));
    }
    int const x_151 = p.y;
    bool const x_152 = (x_151 < 14);
    x_165_phi = x_152;
    if (x_152) {
      int const x_156 = p.x;
      int const x_158 = p.y;
      int const x_163 = (*(tint_symbol_8)).arr[as_type<int>((as_type<uint>(x_156) + as_type<uint>(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_158) + as_type<uint>(2)))) * as_type<uint>(16))))))];
      x_164 = (x_163 == 0);
      x_165_phi = x_164;
    }
    bool const x_165 = x_165_phi;
    if (x_165) {
      int const x_168 = directions;
      directions = as_type<int>((as_type<uint>(x_168) + as_type<uint>(1)));
    }
    bool x_229 = false;
    bool x_242 = false;
    bool x_281 = false;
    bool x_295 = false;
    bool x_335 = false;
    bool x_348 = false;
    bool x_387 = false;
    bool x_400 = false;
    bool x_230_phi = false;
    bool x_243_phi = false;
    bool x_282_phi = false;
    bool x_296_phi = false;
    bool x_336_phi = false;
    bool x_349_phi = false;
    bool x_388_phi = false;
    bool x_401_phi = false;
    int const x_170 = directions;
    if ((x_170 == 0)) {
      canwalk = false;
      i = 0;
      while (true) {
        int const x_179 = i;
        if ((x_179 < 8)) {
        } else {
          break;
        }
        j = 0;
        while (true) {
          int const x_186 = j;
          if ((x_186 < 8)) {
          } else {
            break;
          }
          int const x_189 = j;
          int const x_191 = i;
          int const x_196 = (*(tint_symbol_8)).arr[as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_189) * as_type<uint>(2)))) + as_type<uint>(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_191) * as_type<uint>(2)))) * as_type<uint>(16))))))];
          if ((x_196 == 0)) {
            int const x_200 = j;
            p.x = as_type<int>((as_type<uint>(x_200) * as_type<uint>(2)));
            int const x_203 = i;
            p.y = as_type<int>((as_type<uint>(x_203) * as_type<uint>(2)));
            canwalk = true;
          }
          {
            int const x_206 = j;
            j = as_type<int>((as_type<uint>(x_206) + as_type<uint>(1)));
          }
        }
        {
          int const x_208 = i;
          i = as_type<int>((as_type<uint>(x_208) + as_type<uint>(1)));
        }
      }
      int const x_211 = p.x;
      int const x_213 = p.y;
      (*(tint_symbol_8)).arr[as_type<int>((as_type<uint>(x_211) + as_type<uint>(as_type<int>((as_type<uint>(x_213) * as_type<uint>(16))))))] = 1;
    } else {
      int const x_217 = v;
      int const x_218 = directions;
      d = (x_217 % x_218);
      int const x_220 = directions;
      int const x_221 = v;
      v = as_type<int>((as_type<uint>(x_221) + as_type<uint>(x_220)));
      int const x_223 = d;
      bool const x_224 = (x_223 >= 0);
      x_230_phi = x_224;
      if (x_224) {
        int const x_228 = p.x;
        x_229 = (x_228 > 0);
        x_230_phi = x_229;
      }
      bool const x_230 = x_230_phi;
      x_243_phi = x_230;
      if (x_230) {
        int const x_234 = p.x;
        int const x_237 = p.y;
        int const x_241 = (*(tint_symbol_8)).arr[as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_234) - as_type<uint>(2)))) + as_type<uint>(as_type<int>((as_type<uint>(x_237) * as_type<uint>(16))))))];
        x_242 = (x_241 == 0);
        x_243_phi = x_242;
      }
      bool const x_243 = x_243_phi;
      if (x_243) {
        int const x_246 = d;
        d = as_type<int>((as_type<uint>(x_246) - as_type<uint>(1)));
        int const x_249 = p.x;
        int const x_251 = p.y;
        (*(tint_symbol_8)).arr[as_type<int>((as_type<uint>(x_249) + as_type<uint>(as_type<int>((as_type<uint>(x_251) * as_type<uint>(16))))))] = 1;
        int const x_256 = p.x;
        int const x_259 = p.y;
        (*(tint_symbol_8)).arr[as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_256) - as_type<uint>(1)))) + as_type<uint>(as_type<int>((as_type<uint>(x_259) * as_type<uint>(16))))))] = 1;
        int const x_264 = p.x;
        int const x_267 = p.y;
        (*(tint_symbol_8)).arr[as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_264) - as_type<uint>(2)))) + as_type<uint>(as_type<int>((as_type<uint>(x_267) * as_type<uint>(16))))))] = 1;
        int const x_272 = p.x;
        p.x = as_type<int>((as_type<uint>(x_272) - as_type<uint>(2)));
      }
      int const x_275 = d;
      bool const x_276 = (x_275 >= 0);
      x_282_phi = x_276;
      if (x_276) {
        int const x_280 = p.y;
        x_281 = (x_280 > 0);
        x_282_phi = x_281;
      }
      bool const x_282 = x_282_phi;
      x_296_phi = x_282;
      if (x_282) {
        int const x_286 = p.x;
        int const x_288 = p.y;
        tint_array_wrapper const x_291 = *(tint_symbol_8);
        tint_array_wrapper const tint_symbol_4 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
        *(tint_symbol_8) = tint_symbol_4;
        *(tint_symbol_8) = x_291;
        int const x_294 = (*(tint_symbol_8)).arr[as_type<int>((as_type<uint>(x_286) + as_type<uint>(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_288) - as_type<uint>(2)))) * as_type<uint>(16))))))];
        x_295 = (x_294 == 0);
        x_296_phi = x_295;
      }
      bool const x_296 = x_296_phi;
      if (x_296) {
        int const x_299 = d;
        d = as_type<int>((as_type<uint>(x_299) - as_type<uint>(1)));
        int const x_302 = p.x;
        int const x_304 = p.y;
        (*(tint_symbol_8)).arr[as_type<int>((as_type<uint>(x_302) + as_type<uint>(as_type<int>((as_type<uint>(x_304) * as_type<uint>(16))))))] = 1;
        int const x_309 = p.x;
        int const x_311 = p.y;
        (*(tint_symbol_8)).arr[as_type<int>((as_type<uint>(x_309) + as_type<uint>(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_311) - as_type<uint>(1)))) * as_type<uint>(16))))))] = 1;
        int const x_317 = p.x;
        int const x_319 = p.y;
        tint_array_wrapper const x_321 = *(tint_symbol_8);
        tint_array_wrapper const tint_symbol_5 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
        *(tint_symbol_8) = tint_symbol_5;
        *(tint_symbol_8) = x_321;
        (*(tint_symbol_8)).arr[as_type<int>((as_type<uint>(x_317) + as_type<uint>(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_319) - as_type<uint>(2)))) * as_type<uint>(16))))))] = 1;
        int const x_326 = p.y;
        p.y = as_type<int>((as_type<uint>(x_326) - as_type<uint>(2)));
      }
      int const x_329 = d;
      bool const x_330 = (x_329 >= 0);
      x_336_phi = x_330;
      if (x_330) {
        int const x_334 = p.x;
        x_335 = (x_334 < 14);
        x_336_phi = x_335;
      }
      bool const x_336 = x_336_phi;
      x_349_phi = x_336;
      if (x_336) {
        int const x_340 = p.x;
        int const x_343 = p.y;
        int const x_347 = (*(tint_symbol_8)).arr[as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_340) + as_type<uint>(2)))) + as_type<uint>(as_type<int>((as_type<uint>(x_343) * as_type<uint>(16))))))];
        x_348 = (x_347 == 0);
        x_349_phi = x_348;
      }
      bool const x_349 = x_349_phi;
      if (x_349) {
        int const x_352 = d;
        d = as_type<int>((as_type<uint>(x_352) - as_type<uint>(1)));
        int const x_355 = p.x;
        int const x_357 = p.y;
        (*(tint_symbol_8)).arr[as_type<int>((as_type<uint>(x_355) + as_type<uint>(as_type<int>((as_type<uint>(x_357) * as_type<uint>(16))))))] = 1;
        int const x_362 = p.x;
        int const x_365 = p.y;
        (*(tint_symbol_8)).arr[as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_362) + as_type<uint>(1)))) + as_type<uint>(as_type<int>((as_type<uint>(x_365) * as_type<uint>(16))))))] = 1;
        int const x_370 = p.x;
        int const x_373 = p.y;
        (*(tint_symbol_8)).arr[as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_370) + as_type<uint>(2)))) + as_type<uint>(as_type<int>((as_type<uint>(x_373) * as_type<uint>(16))))))] = 1;
        int const x_378 = p.x;
        p.x = as_type<int>((as_type<uint>(x_378) + as_type<uint>(2)));
      }
      int const x_381 = d;
      bool const x_382 = (x_381 >= 0);
      x_388_phi = x_382;
      if (x_382) {
        int const x_386 = p.y;
        x_387 = (x_386 < 14);
        x_388_phi = x_387;
      }
      bool const x_388 = x_388_phi;
      x_401_phi = x_388;
      if (x_388) {
        int const x_392 = p.x;
        int const x_394 = p.y;
        int const x_399 = (*(tint_symbol_8)).arr[as_type<int>((as_type<uint>(x_392) + as_type<uint>(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_394) + as_type<uint>(2)))) * as_type<uint>(16))))))];
        x_400 = (x_399 == 0);
        x_401_phi = x_400;
      }
      bool const x_401 = x_401_phi;
      if (x_401) {
        int const x_404 = d;
        d = as_type<int>((as_type<uint>(x_404) - as_type<uint>(1)));
        int const x_407 = p.x;
        int const x_409 = p.y;
        (*(tint_symbol_8)).arr[as_type<int>((as_type<uint>(x_407) + as_type<uint>(as_type<int>((as_type<uint>(x_409) * as_type<uint>(16))))))] = 1;
        int const x_414 = p.x;
        int const x_416 = p.y;
        (*(tint_symbol_8)).arr[as_type<int>((as_type<uint>(x_414) + as_type<uint>(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_416) + as_type<uint>(1)))) * as_type<uint>(16))))))] = 1;
        int const x_422 = p.x;
        int const x_424 = p.y;
        (*(tint_symbol_8)).arr[as_type<int>((as_type<uint>(x_422) + as_type<uint>(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_424) + as_type<uint>(2)))) * as_type<uint>(16))))))] = 1;
        int const x_430 = p.y;
        p.y = as_type<int>((as_type<uint>(x_430) + as_type<uint>(2)));
      }
    }
    int const x_434 = ipos.y;
    int const x_437 = ipos.x;
    int const x_440 = (*(tint_symbol_8)).arr[as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_434) * as_type<uint>(16)))) + as_type<uint>(x_437)))];
    if ((x_440 == 1)) {
      *(tint_symbol_9) = float4(1.0f, 1.0f, 1.0f, 1.0f);
      return;
    }
    {
      bool const x_444 = canwalk;
      if (x_444) {
      } else {
        break;
      }
    }
  }
  *(tint_symbol_9) = float4(0.0f, 0.0f, 0.0f, 1.0f);
  return;
}

fragment tint_symbol_2 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_7 [[buffer(0)]]) {
  thread float4 tint_symbol_10 = 0.0f;
  thread tint_array_wrapper tint_symbol_11 = {};
  thread float4 tint_symbol_12 = 0.0f;
  tint_symbol_10 = gl_FragCoord_param;
  main_1(x_7, &(tint_symbol_10), &(tint_symbol_11), &(tint_symbol_12));
  main_out const tint_symbol_3 = {.x_GLF_color_1=tint_symbol_12};
  tint_symbol_2 const tint_symbol_6 = {.x_GLF_color_1=tint_symbol_3.x_GLF_color_1};
  return tint_symbol_6;
}

