// File: Ciaxur[P]yagb-emu/include/imgui/imstb_truetype.h
// Function: stbtt__run_charstring(stbtt_fontinfo const*, int, stbtt__csctx*)
static int stbtt__run_charstring(const stbtt_fontinfo *info, int glyph_index, stbtt__csctx *c)
{
   int in_header = 1, maskbits = 0, subr_stack_height = 0, sp = 0, v, i, b0;
   int has_subrs = 0, clear_stack;
   float s[48];
   stbtt__buf subr_stack[10], subrs = info->subrs, b;
   float f;

#define STBTT__CSERR(s) (0)

   // this currently ignores the initial width value, which isn't needed if we have hmtx
   b = stbtt__cff_index_get(info->charstrings, glyph_index);
   while (b.cursor < b.size) {
      i = 0;
      clear_stack = 1;
      b0 = stbtt__buf_get8(&b);
      switch (b0) {
      // @TODO implement hinting
      case 0x13: // hintmask
      case 0x14: // cntrmask
         if (in_header)
            maskbits += (sp / 2); // implicit "vstem"
         in_header = 0;
         stbtt__buf_skip(&b, (maskbits + 7) / 8);
         break;

      case 0x01: // hstem
      case 0x03: // vstem
      case 0x12: // hstemhm
      case 0x17: // vstemhm
         maskbits += (sp / 2);
         break;

      case 0x15: // rmoveto
         in_header = 0;
         if (sp < 2) return STBTT__CSERR("rmoveto stack");
         stbtt__csctx_rmove_to(c, s[sp-2], s[sp-1]);
         break;
      case 0x04: // vmoveto
         in_header = 0;
         if (sp < 1) return STBTT__CSERR("vmoveto stack");
         stbtt__csctx_rmove_to(c, 0, s[sp-1]);
         break;
      case 0x16: // hmoveto
         in_header = 0;
         if (sp < 1) return STBTT__CSERR("hmoveto stack");
         stbtt__csctx_rmove_to(c, s[sp-1], 0);
         break;

      case 0x05: // rlineto
         if (sp < 2) return STBTT__CSERR("rlineto stack");
         for (; i + 1 < sp; i += 2)
            stbtt__csctx_rline_to(c, s[i], s[i+1]);
         break;

      // hlineto/vlineto and vhcurveto/hvcurveto alternate horizontal and vertical
      // starting from a different place.

      case 0x07: // vlineto
         if (sp < 1) return STBTT__CSERR("vlineto stack");
         goto vlineto;
      case 0x06: // hlineto
         if (sp < 1) return STBTT__CSERR("hlineto stack");
         for (;;) {
            if (i >= sp) break;
            stbtt__csctx_rline_to(c, s[i], 0);
            i++;
      vlineto:
            if (i >= sp) break;
            stbtt__csctx_rline_to(c, 0, s[i]);
            i++;
         }
         break;

      case 0x1F: // hvcurveto
         if (sp < 4) return STBTT__CSERR("hvcurveto stack");
         goto hvcurveto;
      case 0x1E: // vhcurveto
         if (sp < 4) return STBTT__CSERR("vhcurveto stack");
         for (;;) {
            if (i + 3 >= sp) break;
            stbtt__csctx_rccurve_to(c, 0, s[i], s[i+1], s[i+2], s[i+3], (sp - i == 5) ? s[i + 4] : 0.0f);
            i += 4;
      hvcurveto:
            if (i + 3 >= sp) break;
            stbtt__csctx_rccurve_to(c, s[i], 0, s[i+1], s[i+2], (sp - i == 5) ? s[i+4] : 0.0f, s[i+3]);
            i += 4;
         }
         break;

      case 0x08: // rrcurveto
         if (sp < 6) return STBTT__CSERR("rcurveline stack");
         for (; i + 5 < sp; i += 6)
            stbtt__csctx_rccurve_to(c, s[i], s[i+1], s[i+2], s[i+3], s[i+4], s[i+5]);
         break;

      case 0x18: // rcurveline
         if (sp < 8) return STBTT__CSERR("rcurveline stack");
         for (; i + 5 < sp - 2; i += 6)
            stbtt__csctx_rccurve_to(c, s[i], s[i+1], s[i+2], s[i+3], s[i+4], s[i+5]);
         if (i + 1 >= sp) return STBTT__CSERR("rcurveline stack");
         stbtt__csctx_rline_to(c, s[i], s[i+1]);
         break;

      case 0x19: // rlinecurve
         if (sp < 8) return STBTT__CSERR("rlinecurve stack");
         for (; i + 1 < sp - 6; i += 2)
            stbtt__csctx_rline_to(c, s[i], s[i+1]);
         if (i + 5 >= sp) return STBTT__CSERR("rlinecurve stack");
         stbtt__csctx_rccurve_to(c, s[i], s[i+1], s[i+2], s[i+3], s[i+4], s[i+5]);
         break;

      case 0x1A: // vvcurveto
      case 0x1B: // hhcurveto
         if (sp < 4) return STBTT__CSERR("(vv|hh)curveto stack");
         f = 0.0;
         if (sp & 1) { f = s[i]; i++; }
         for (; i + 3 < sp; i += 4) {
            if (b0 == 0x1B)
               stbtt__csctx_rccurve_to(c, s[i], f, s[i+1], s[i+2], s[i+3], 0.0);
            else
               stbtt__csctx_rccurve_to(c, f, s[i], s[i+1], s[i+2], 0.0, s[i+3]);
            f = 0.0;
         }
         break;

      case 0x0A: // callsubr
         if (!has_subrs) {
            if (info->fdselect.size)
               subrs = stbtt__cid_get_glyph_subrs(info, glyph_index);
            has_subrs = 1;
         }
         // fallthrough
      case 0x1D: // callgsubr
         if (sp < 1) return STBTT__CSERR("call(g|)subr stack");
         v = (int) s[--sp];
         if (subr_stack_height >= 10) return STBTT__CSERR("recursion limit");
         subr_stack[subr_stack_height++] = b;
         b = stbtt__get_subr(b0 == 0x0A ? subrs : info->gsubrs, v);
         if (b.size == 0) return STBTT__CSERR("subr not found");
         b.cursor = 0;
         clear_stack = 0;
         break;

      case 0x0B: // return
         if (subr_stack_height <= 0) return STBTT__CSERR("return outside subr");
         b = subr_stack[--subr_stack_height];
         clear_stack = 0;
         break;

      case 0x0E: // endchar
         stbtt__csctx_close_shape(c);
         return 1;

      case 0x0C: { // two-byte escape
         float dx1, dx2, dx3, dx4, dx5, dx6, dy1, dy2, dy3, dy4, dy5, dy6;
         float dx, dy;
         int b1 = stbtt__buf_get8(&b);
         switch (b1) {
         // @TODO These "flex" implementations ignore the flex-depth and resolution,
         // and always draw beziers.
         case 0x22: // hflex
            if (sp < 7) return STBTT__CSERR("hflex stack");
            dx1 = s[0];
            dx2 = s[1];
            dy2 = s[2];
            dx3 = s[3];
            dx4 = s[4];
            dx5 = s[5];
            dx6 = s[6];
            stbtt__csctx_rccurve_to(c, dx1, 0, dx2, dy2, dx3, 0);
            stbtt__csctx_rccurve_to(c, dx4, 0, dx5, -dy2, dx6, 0);
            break;

         case 0x23: // flex
            if (sp < 13) return STBTT__CSERR("flex stack");
            dx1 = s[0];
            dy1 = s[1];
            dx2 = s[2];
            dy2 = s[3];
            dx3 = s[4];
            dy3 = s[5];
            dx4 = s[6];
            dy4 = s[7];
            dx5 = s[8];
            dy5 = s[9];
            dx6 = s[10];
            dy6 = s[11];
            //fd is s[12]
            stbtt__csctx_rccurve_to(c, dx1, dy1, dx2, dy2, dx3, dy3);
            stbtt__csctx_rccurve_to(c, dx4, dy4, dx5, dy5, dx6, dy6);
            break;

         case 0x24: // hflex1
            if (sp < 9) return STBTT__CSERR("hflex1 stack");
            dx1 = s[0];
            dy1 = s[1];
            dx2 = s[2];
            dy2 = s[3];
            dx3 = s[4];
            dx4 = s[5];
            dx5 = s[6];
            dy5 = s[7];
            dx6 = s[8];
            stbtt__csctx_rccurve_to(c, dx1, dy1, dx2, dy2, dx3, 0);
            stbtt__csctx_rccurve_to(c, dx4, 0, dx5, dy5, dx6, -(dy1+dy2+dy5));
            break;

         case 0x25: // flex1
            if (sp < 11) return STBTT__CSERR("flex1 stack");
            dx1 = s[0];
            dy1 = s[1];
            dx2 = s[2];
            dy2 = s[3];
            dx3 = s[4];
            dy3 = s[5];
            dx4 = s[6];
            dy4 = s[7];
            dx5 = s[8];
            dy5 = s[9];
            dx6 = dy6 = s[10];
            dx = dx1+dx2+dx3+dx4+dx5;
            dy = dy1+dy2+dy3+dy4+dy5;
            if (STBTT_fabs(dx) > STBTT_fabs(dy))
               dy6 = -dy;
            else
               dx6 = -dx;
            stbtt__csctx_rccurve_to(c, dx1, dy1, dx2, dy2, dx3, dy3);
            stbtt__csctx_rccurve_to(c, dx4, dy4, dx5, dy5, dx6, dy6);
            break;

         default:
            return STBTT__CSERR("unimplemented");
         }
      } break;

      default:
         if (b0 != 255 && b0 != 28 && (b0 < 32 || b0 > 254)) //-V560
            return STBTT__CSERR("reserved operator");

         // push immediate
         if (b0 == 255) {
            f = (float)(stbtt_int32)stbtt__buf_get32(&b) / 0x10000;
         } else {
            stbtt__buf_skip(&b, -1);
            f = (float)(stbtt_int16)stbtt__cff_int(&b);
         }
         if (sp >= 48) return STBTT__CSERR("push stack overflow");
         s[sp++] = f;
         clear_stack = 0;
         break;
      }
      if (clear_stack) sp = 0;
   }
   return STBTT__CSERR("no endchar");

#undef STBTT__CSERR
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x2c0, %rsp            # imm = 0x2C0
movq %rdi, -0x10(%rbp)
movl %esi, -0x14(%rbp)
movq %rdx, -0x20(%rbp)
movl $0x1, -0x24(%rbp)
movl $0x0, -0x28(%rbp)
movl $0x0, -0x2c(%rbp)
movl $0x0, -0x30(%rbp)
movl $0x0, -0x40(%rbp)
movq -0x10(%rbp), %rax
movq 0x70(%rax), %rcx
movq %rcx, -0x1c0(%rbp)
movq 0x78(%rax), %rax
movq %rax, -0x1b8(%rbp)
movq -0x10(%rbp), %rax
movq 0x50(%rax), %rcx
movq %rcx, -0x1f8(%rbp)
movq 0x58(%rax), %rax
movq %rax, -0x1f0(%rbp)
movl -0x14(%rbp), %edx
movq -0x1f8(%rbp), %rdi
movq -0x1f0(%rbp), %rsi
callq 0x11f280
movq %rax, -0x1e8(%rbp)
movq %rdx, -0x1e0(%rbp)
movq -0x1e8(%rbp), %rax
movq %rax, -0x1d0(%rbp)
movq -0x1e0(%rbp), %rax
movq %rax, -0x1c8(%rbp)
movl -0x1c8(%rbp), %eax
cmpl -0x1c4(%rbp), %eax
jge 0x120e33
movl $0x0, -0x38(%rbp)
movl $0x1, -0x44(%rbp)
leaq -0x1d0(%rbp), %rdi
callq 0x11f150
movzbl %al, %eax
movl %eax, -0x3c(%rbp)
movl -0x3c(%rbp), %eax
decl %eax
movl %eax, %ecx
movq %rcx, -0x270(%rbp)
subl $0x1e, %eax
ja 0x120d5e
movq -0x270(%rbp), %rax
leaq 0x63c24(%rip), %rcx     # 0x183a78
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
cmpl $0x0, -0x24(%rbp)
je 0x11fe74
movl -0x30(%rbp), %eax
movl $0x2, %ecx
cltd
idivl %ecx
addl -0x28(%rbp), %eax
movl %eax, -0x28(%rbp)
movl $0x0, -0x24(%rbp)
movl -0x28(%rbp), %eax
addl $0x7, %eax
movl $0x8, %ecx
cltd
idivl %ecx
movl %eax, %esi
leaq -0x1d0(%rbp), %rdi
callq 0x11f090
jmp 0x120e21
movl -0x30(%rbp), %eax
movl $0x2, %ecx
cltd
idivl %ecx
addl -0x28(%rbp), %eax
movl %eax, -0x28(%rbp)
jmp 0x120e21
movl $0x0, -0x24(%rbp)
cmpl $0x2, -0x30(%rbp)
jge 0x11fecb
movl $0x0, -0x4(%rbp)
jmp 0x120e3a
movq -0x20(%rbp), %rdi
movl -0x30(%rbp), %eax
subl $0x2, %eax
cltq
movss -0x110(%rbp,%rax,4), %xmm0
movl -0x30(%rbp), %eax
subl $0x1, %eax
cltq
movss -0x110(%rbp,%rax,4), %xmm1
callq 0x120e50
jmp 0x120e21
movl $0x0, -0x24(%rbp)
cmpl $0x1, -0x30(%rbp)
jge 0x11ff14
movl $0x0, -0x4(%rbp)
jmp 0x120e3a
movq -0x20(%rbp), %rdi
movl -0x30(%rbp), %eax
subl $0x1, %eax
cltq
movss -0x110(%rbp,%rax,4), %xmm1
xorps %xmm0, %xmm0
callq 0x120e50
jmp 0x120e21
movl $0x0, -0x24(%rbp)
cmpl $0x1, -0x30(%rbp)
jge 0x11ff4f
movl $0x0, -0x4(%rbp)
jmp 0x120e3a
movq -0x20(%rbp), %rdi
movl -0x30(%rbp), %eax
subl $0x1, %eax
cltq
movss -0x110(%rbp,%rax,4), %xmm0
xorps %xmm1, %xmm1
callq 0x120e50
jmp 0x120e21
cmpl $0x2, -0x30(%rbp)
jge 0x11ff83
movl $0x0, -0x4(%rbp)
jmp 0x120e3a
jmp 0x11ff85
movl -0x38(%rbp), %eax
addl $0x1, %eax
cmpl -0x30(%rbp), %eax
jge 0x11ffc2
movq -0x20(%rbp), %rdi
movslq -0x38(%rbp), %rax
movss -0x110(%rbp,%rax,4), %xmm0
movl -0x38(%rbp), %eax
addl $0x1, %eax
cltq
movss -0x110(%rbp,%rax,4), %xmm1
callq 0x120ef0
movl -0x38(%rbp), %eax
addl $0x2, %eax
movl %eax, -0x38(%rbp)
jmp 0x11ff85
jmp 0x120e21
cmpl $0x1, -0x30(%rbp)
jge 0x11ffd9
movl $0x0, -0x4(%rbp)
jmp 0x120e3a
jmp 0x12001b
cmpl $0x1, -0x30(%rbp)
jge 0x11ffed
movl $0x0, -0x4(%rbp)
jmp 0x120e3a
jmp 0x11ffef
movl -0x38(%rbp), %eax
cmpl -0x30(%rbp), %eax
jl 0x11fff9
jmp 0x120049
movq -0x20(%rbp), %rdi
movslq -0x38(%rbp), %rax
movss -0x110(%rbp,%rax,4), %xmm0
xorps %xmm1, %xmm1
callq 0x120ef0
movl -0x38(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x38(%rbp)
movl -0x38(%rbp), %eax
cmpl -0x30(%rbp), %eax
jl 0x120025
jmp 0x120049
movq -0x20(%rbp), %rdi
movslq -0x38(%rbp), %rax
movss -0x110(%rbp,%rax,4), %xmm1
xorps %xmm0, %xmm0
callq 0x120ef0
movl -0x38(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x38(%rbp)
jmp 0x11ffef
jmp 0x120e21
cmpl $0x4, -0x30(%rbp)
jge 0x120060
movl $0x0, -0x4(%rbp)
jmp 0x120e3a
jmp 0x120167
cmpl $0x4, -0x30(%rbp)
jge 0x120077
movl $0x0, -0x4(%rbp)
jmp 0x120e3a
jmp 0x120079
movl -0x38(%rbp), %eax
addl $0x3, %eax
cmpl -0x30(%rbp), %eax
jl 0x120089
jmp 0x12024a
movq -0x20(%rbp), %rax
movq %rax, -0x288(%rbp)
movslq -0x38(%rbp), %rax
movss -0x110(%rbp,%rax,4), %xmm0
movss %xmm0, -0x280(%rbp)
movl -0x38(%rbp), %eax
addl $0x1, %eax
cltq
movss -0x110(%rbp,%rax,4), %xmm0
movss %xmm0, -0x27c(%rbp)
movl -0x38(%rbp), %eax
addl $0x2, %eax
cltq
movss -0x110(%rbp,%rax,4), %xmm0
movss %xmm0, -0x278(%rbp)
movl -0x38(%rbp), %eax
addl $0x3, %eax
cltq
movss -0x110(%rbp,%rax,4), %xmm0
movss %xmm0, -0x274(%rbp)
movl -0x30(%rbp), %eax
subl -0x38(%rbp), %eax
cmpl $0x5, %eax
jne 0x12011a
movl -0x38(%rbp), %eax
addl $0x4, %eax
cltq
movss -0x110(%rbp,%rax,4), %xmm0
movss %xmm0, -0x28c(%rbp)
jmp 0x120127
xorps %xmm0, %xmm0
movss %xmm0, -0x28c(%rbp)
jmp 0x120127
movss -0x274(%rbp), %xmm4
movss -0x278(%rbp), %xmm3
movss -0x27c(%rbp), %xmm2
movss -0x280(%rbp), %xmm1
movq -0x288(%rbp), %rdi
movss -0x28c(%rbp), %xmm5
xorps %xmm0, %xmm0
callq 0x120f70
movl -0x38(%rbp), %eax
addl $0x4, %eax
movl %eax, -0x38(%rbp)
movl -0x38(%rbp), %eax
addl $0x3, %eax
cmpl -0x30(%rbp), %eax
jl 0x120177
jmp 0x12024a
movq -0x20(%rbp), %rax
movq %rax, -0x2a0(%rbp)
movslq -0x38(%rbp), %rax
movss -0x110(%rbp,%rax,4), %xmm0
movss %xmm0, -0x298(%rbp)
movl -0x38(%rbp), %eax
addl $0x1, %eax
cltq
movss -0x110(%rbp,%rax,4), %xmm0
movss %xmm0, -0x294(%rbp)
movl -0x38(%rbp), %eax
addl $0x2, %eax
cltq
movss -0x110(%rbp,%rax,4), %xmm0
movss %xmm0, -0x290(%rbp)
movl -0x30(%rbp), %eax
subl -0x38(%rbp), %eax
cmpl $0x5, %eax
jne 0x1201ef
movl -0x38(%rbp), %eax
addl $0x4, %eax
cltq
movss -0x110(%rbp,%rax,4), %xmm0
movss %xmm0, -0x2a4(%rbp)
jmp 0x1201fc
xorps %xmm0, %xmm0
movss %xmm0, -0x2a4(%rbp)
jmp 0x1201fc
movss -0x290(%rbp), %xmm3
movss -0x294(%rbp), %xmm2
movss -0x298(%rbp), %xmm0
movq -0x2a0(%rbp), %rdi
movss -0x2a4(%rbp), %xmm4
movl -0x38(%rbp), %eax
addl $0x3, %eax
cltq
movss -0x110(%rbp,%rax,4), %xmm5
xorps %xmm1, %xmm1
callq 0x120f70
movl -0x38(%rbp), %eax
addl $0x4, %eax
movl %eax, -0x38(%rbp)
jmp 0x120079
jmp 0x120e21
cmpl $0x6, -0x30(%rbp)
jge 0x120261
movl $0x0, -0x4(%rbp)
jmp 0x120e3a
jmp 0x120263
movl -0x38(%rbp), %eax
addl $0x5, %eax
cmpl -0x30(%rbp), %eax
jge 0x1202e7
movq -0x20(%rbp), %rdi
movslq -0x38(%rbp), %rax
movss -0x110(%rbp,%rax,4), %xmm0
movl -0x38(%rbp), %eax
addl $0x1, %eax
cltq
movss -0x110(%rbp,%rax,4), %xmm1
movl -0x38(%rbp), %eax
addl $0x2, %eax
cltq
movss -0x110(%rbp,%rax,4), %xmm2
movl -0x38(%rbp), %eax
addl $0x3, %eax
cltq
movss -0x110(%rbp,%rax,4), %xmm3
movl -0x38(%rbp), %eax
addl $0x4, %eax
cltq
movss -0x110(%rbp,%rax,4), %xmm4
movl -0x38(%rbp), %eax
addl $0x5, %eax
cltq
movss -0x110(%rbp,%rax,4), %xmm5
callq 0x120f70
movl -0x38(%rbp), %eax
addl $0x6, %eax
movl %eax, -0x38(%rbp)
jmp 0x120263
jmp 0x120e21
cmpl $0x8, -0x30(%rbp)
jge 0x1202fe
movl $0x0, -0x4(%rbp)
jmp 0x120e3a
jmp 0x120300
movl -0x38(%rbp), %eax
addl $0x5, %eax
movl -0x30(%rbp), %ecx
subl $0x2, %ecx
cmpl %ecx, %eax
jge 0x120389
movq -0x20(%rbp), %rdi
movslq -0x38(%rbp), %rax
movss -0x110(%rbp,%rax,4), %xmm0
movl -0x38(%rbp), %eax
addl $0x1, %eax
cltq
movss -0x110(%rbp,%rax,4), %xmm1
movl -0x38(%rbp), %eax
addl $0x2, %eax
cltq
movss -0x110(%rbp,%rax,4), %xmm2
movl -0x38(%rbp), %eax
addl $0x3, %eax
cltq
movss -0x110(%rbp,%rax,4), %xmm3
movl -0x38(%rbp), %eax
addl $0x4, %eax
cltq
movss -0x110(%rbp,%rax,4), %xmm4
movl -0x38(%rbp), %eax
addl $0x5, %eax
cltq
movss -0x110(%rbp,%rax,4), %xmm5
callq 0x120f70
movl -0x38(%rbp), %eax
addl $0x6, %eax
movl %eax, -0x38(%rbp)
jmp 0x120300
movl -0x38(%rbp), %eax
addl $0x1, %eax
cmpl -0x30(%rbp), %eax
jl 0x1203a0
movl $0x0, -0x4(%rbp)
jmp 0x120e3a
movq -0x20(%rbp), %rdi
movslq -0x38(%rbp), %rax
movss -0x110(%rbp,%rax,4), %xmm0
movl -0x38(%rbp), %eax
addl $0x1, %eax
cltq
movss -0x110(%rbp,%rax,4), %xmm1
callq 0x120ef0
jmp 0x120e21
cmpl $0x8, -0x30(%rbp)
jge 0x1203de
movl $0x0, -0x4(%rbp)
jmp 0x120e3a
jmp 0x1203e0
movl -0x38(%rbp), %eax
addl $0x1, %eax
movl -0x30(%rbp), %ecx
subl $0x6, %ecx
cmpl %ecx, %eax
jge 0x120422
movq -0x20(%rbp), %rdi
movslq -0x38(%rbp), %rax
movss -0x110(%rbp,%rax,4), %xmm0
movl -0x38(%rbp), %eax
addl $0x1, %eax
cltq
movss -0x110(%rbp,%rax,4), %xmm1
callq 0x120ef0
movl -0x38(%rbp), %eax
addl $0x2, %eax
movl %eax, -0x38(%rbp)
jmp 0x1203e0
movl -0x38(%rbp), %eax
addl $0x5, %eax
cmpl -0x30(%rbp), %eax
jl 0x120439
movl $0x0, -0x4(%rbp)
jmp 0x120e3a
movq -0x20(%rbp), %rdi
movslq -0x38(%rbp), %rax
movss -0x110(%rbp,%rax,4), %xmm0
movl -0x38(%rbp), %eax
addl $0x1, %eax
cltq
movss -0x110(%rbp,%rax,4), %xmm1
movl -0x38(%rbp), %eax
addl $0x2, %eax
cltq
movss -0x110(%rbp,%rax,4), %xmm2
movl -0x38(%rbp), %eax
addl $0x3, %eax
cltq
movss -0x110(%rbp,%rax,4), %xmm3
movl -0x38(%rbp), %eax
addl $0x4, %eax
cltq
movss -0x110(%rbp,%rax,4), %xmm4
movl -0x38(%rbp), %eax
addl $0x5, %eax
cltq
movss -0x110(%rbp,%rax,4), %xmm5
callq 0x120f70
jmp 0x120e21
cmpl $0x4, -0x30(%rbp)
jge 0x1204bb
movl $0x0, -0x4(%rbp)
jmp 0x120e3a
xorps %xmm0, %xmm0
movss %xmm0, -0x1d4(%rbp)
movl -0x30(%rbp), %eax
andl $0x1, %eax
cmpl $0x0, %eax
je 0x1204ef
movslq -0x38(%rbp), %rax
movss -0x110(%rbp,%rax,4), %xmm0
movss %xmm0, -0x1d4(%rbp)
movl -0x38(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x38(%rbp)
jmp 0x1204f1
movl -0x38(%rbp), %eax
addl $0x3, %eax
cmpl -0x30(%rbp), %eax
jge 0x1205c9
cmpl $0x1b, -0x3c(%rbp)
jne 0x12055c
movq -0x20(%rbp), %rdi
movslq -0x38(%rbp), %rax
movss -0x110(%rbp,%rax,4), %xmm0
movss -0x1d4(%rbp), %xmm1
movl -0x38(%rbp), %eax
addl $0x1, %eax
cltq
movss -0x110(%rbp,%rax,4), %xmm2
movl -0x38(%rbp), %eax
addl $0x2, %eax
cltq
movss -0x110(%rbp,%rax,4), %xmm3
movl -0x38(%rbp), %eax
addl $0x3, %eax
cltq
movss -0x110(%rbp,%rax,4), %xmm4
xorps %xmm5, %xmm5
callq 0x120f70
jmp 0x1205b0
movq -0x20(%rbp), %rdi
movss -0x1d4(%rbp), %xmm0
movslq -0x38(%rbp), %rax
movss -0x110(%rbp,%rax,4), %xmm1
movl -0x38(%rbp), %eax
addl $0x1, %eax
cltq
movss -0x110(%rbp,%rax,4), %xmm2
movl -0x38(%rbp), %eax
addl $0x2, %eax
cltq
movss -0x110(%rbp,%rax,4), %xmm3
movl -0x38(%rbp), %eax
addl $0x3, %eax
cltq
movss -0x110(%rbp,%rax,4), %xmm5
xorps %xmm4, %xmm4
callq 0x120f70
xorps %xmm0, %xmm0
movss %xmm0, -0x1d4(%rbp)
movl -0x38(%rbp), %eax
addl $0x4, %eax
movl %eax, -0x38(%rbp)
jmp 0x1204f1
jmp 0x120e21
cmpl $0x0, -0x40(%rbp)
jne 0x12061e
movq -0x10(%rbp), %rax
cmpl $0x0, 0x9c(%rax)
je 0x120617
movq -0x10(%rbp), %rdi
movl -0x14(%rbp), %esi
callq 0x121050
movq %rax, -0x208(%rbp)
movq %rdx, -0x200(%rbp)
movq -0x208(%rbp), %rax
movq %rax, -0x1c0(%rbp)
movq -0x200(%rbp), %rax
movq %rax, -0x1b8(%rbp)
movl $0x1, -0x40(%rbp)
jmp 0x120620
cmpl $0x1, -0x30(%rbp)
jge 0x120632
movl $0x0, -0x4(%rbp)
jmp 0x120e3a
movl -0x30(%rbp), %eax
addl $-0x1, %eax
movl %eax, -0x30(%rbp)
cltq
cvttss2si -0x110(%rbp,%rax,4), %eax
movl %eax, -0x34(%rbp)
cmpl $0xa, -0x2c(%rbp)
jl 0x12065b
movl $0x0, -0x4(%rbp)
jmp 0x120e3a
movl -0x2c(%rbp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, -0x2c(%rbp)
movslq %eax, %rcx
leaq -0x1b0(%rbp), %rax
shlq $0x4, %rcx
addq %rcx, %rax
movq -0x1d0(%rbp), %rcx
movq %rcx, (%rax)
movq -0x1c8(%rbp), %rcx
movq %rcx, 0x8(%rax)
cmpl $0xa, -0x3c(%rbp)
jne 0x1206a2
leaq -0x1c0(%rbp), %rax
movq %rax, -0x2b0(%rbp)
jmp 0x1206b1
movq -0x10(%rbp), %rax
addq $0x60, %rax
movq %rax, -0x2b0(%rbp)
movq -0x2b0(%rbp), %rax
movq (%rax), %rcx
movq %rcx, -0x228(%rbp)
movq 0x8(%rax), %rax
movq %rax, -0x220(%rbp)
movl -0x34(%rbp), %edx
movq -0x228(%rbp), %rdi
movq -0x220(%rbp), %rsi
callq 0x1211d0
movq %rax, -0x218(%rbp)
movq %rdx, -0x210(%rbp)
movq -0x218(%rbp), %rax
movq %rax, -0x1d0(%rbp)
movq -0x210(%rbp), %rax
movq %rax, -0x1c8(%rbp)
cmpl $0x0, -0x1c4(%rbp)
jne 0x120722
movl $0x0, -0x4(%rbp)
jmp 0x120e3a
movl $0x0, -0x1c8(%rbp)
movl $0x0, -0x44(%rbp)
jmp 0x120e21
cmpl $0x0, -0x2c(%rbp)
jg 0x12074a
movl $0x0, -0x4(%rbp)
jmp 0x120e3a
movl -0x2c(%rbp), %eax
addl $-0x1, %eax
movl %eax, -0x2c(%rbp)
movslq %eax, %rcx
leaq -0x1b0(%rbp), %rax
shlq $0x4, %rcx
addq %rcx, %rax
movq (%rax), %rcx
movq %rcx, -0x1d0(%rbp)
movq 0x8(%rax), %rax
movq %rax, -0x1c8(%rbp)
movl $0x0, -0x44(%rbp)
jmp 0x120e21
movq -0x20(%rbp), %rdi
callq 0x121280
movl $0x1, -0x4(%rbp)
jmp 0x120e3a
leaq -0x1d0(%rbp), %rdi
callq 0x11f150
movzbl %al, %eax
movl %eax, -0x264(%rbp)
movl -0x264(%rbp), %eax
addl $-0x22, %eax
movl %eax, %ecx
movq %rcx, -0x2b8(%rbp)
subl $0x3, %eax
ja 0x120d4d
movq -0x2b8(%rbp), %rax
leaq 0x6331c(%rip), %rcx     # 0x183af4
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
cmpl $0x7, -0x30(%rbp)
jge 0x1207f3
movl $0x0, -0x4(%rbp)
jmp 0x120e3a
movss -0x110(%rbp), %xmm0
movss %xmm0, -0x22c(%rbp)
movss -0x10c(%rbp), %xmm0
movss %xmm0, -0x230(%rbp)
movss -0x108(%rbp), %xmm0
movss %xmm0, -0x248(%rbp)
movss -0x104(%rbp), %xmm0
movss %xmm0, -0x234(%rbp)
movss -0x100(%rbp), %xmm0
movss %xmm0, -0x238(%rbp)
movss -0xfc(%rbp), %xmm0
movss %xmm0, -0x23c(%rbp)
movss -0xf8(%rbp), %xmm0
movss %xmm0, -0x240(%rbp)
movq -0x20(%rbp), %rdi
movss -0x22c(%rbp), %xmm0
movss -0x230(%rbp), %xmm2
movss -0x248(%rbp), %xmm3
movss -0x234(%rbp), %xmm4
xorps %xmm5, %xmm5
movaps %xmm5, %xmm1
callq 0x120f70
movq -0x20(%rbp), %rdi
movss -0x238(%rbp), %xmm0
movss -0x23c(%rbp), %xmm2
movss -0x248(%rbp), %xmm1
movd %xmm1, %eax
xorl $0x80000000, %eax       # imm = 0x80000000
movd %eax, %xmm3
movss -0x240(%rbp), %xmm4
xorps %xmm5, %xmm5
movaps %xmm5, %xmm1
callq 0x120f70
jmp 0x120d59
cmpl $0xd, -0x30(%rbp)
jge 0x1208e5
movl $0x0, -0x4(%rbp)
jmp 0x120e3a
movss -0x110(%rbp), %xmm0
movss %xmm0, -0x22c(%rbp)
movss -0x10c(%rbp), %xmm0
movss %xmm0, -0x244(%rbp)
movss -0x108(%rbp), %xmm0
movss %xmm0, -0x230(%rbp)
movss -0x104(%rbp), %xmm0
movss %xmm0, -0x248(%rbp)
movss -0x100(%rbp), %xmm0
movss %xmm0, -0x234(%rbp)
movss -0xfc(%rbp), %xmm0
movss %xmm0, -0x24c(%rbp)
movss -0xf8(%rbp), %xmm0
movss %xmm0, -0x238(%rbp)
movss -0xf4(%rbp), %xmm0
movss %xmm0, -0x250(%rbp)
movss -0xf0(%rbp), %xmm0
movss %xmm0, -0x23c(%rbp)
movss -0xec(%rbp), %xmm0
movss %xmm0, -0x254(%rbp)
movss -0xe8(%rbp), %xmm0
movss %xmm0, -0x240(%rbp)
movss -0xe4(%rbp), %xmm0
movss %xmm0, -0x258(%rbp)
movq -0x20(%rbp), %rdi
movss -0x22c(%rbp), %xmm0
movss -0x244(%rbp), %xmm1
movss -0x230(%rbp), %xmm2
movss -0x248(%rbp), %xmm3
movss -0x234(%rbp), %xmm4
movss -0x24c(%rbp), %xmm5
callq 0x120f70
movq -0x20(%rbp), %rdi
movss -0x238(%rbp), %xmm0
movss -0x250(%rbp), %xmm1
movss -0x23c(%rbp), %xmm2
movss -0x254(%rbp), %xmm3
movss -0x240(%rbp), %xmm4
movss -0x258(%rbp), %xmm5
callq 0x120f70
jmp 0x120d59
cmpl $0x9, -0x30(%rbp)
jge 0x120a2e
movl $0x0, -0x4(%rbp)
jmp 0x120e3a
movss -0x110(%rbp), %xmm0
movss %xmm0, -0x22c(%rbp)
movss -0x10c(%rbp), %xmm0
movss %xmm0, -0x244(%rbp)
movss -0x108(%rbp), %xmm0
movss %xmm0, -0x230(%rbp)
movss -0x104(%rbp), %xmm0
movss %xmm0, -0x248(%rbp)
movss -0x100(%rbp), %xmm0
movss %xmm0, -0x234(%rbp)
movss -0xfc(%rbp), %xmm0
movss %xmm0, -0x238(%rbp)
movss -0xf8(%rbp), %xmm0
movss %xmm0, -0x23c(%rbp)
movss -0xf4(%rbp), %xmm0
movss %xmm0, -0x254(%rbp)
movss -0xf0(%rbp), %xmm0
movss %xmm0, -0x240(%rbp)
movq -0x20(%rbp), %rdi
movss -0x22c(%rbp), %xmm0
movss -0x244(%rbp), %xmm1
movss -0x230(%rbp), %xmm2
movss -0x248(%rbp), %xmm3
movss -0x234(%rbp), %xmm4
xorps %xmm5, %xmm5
callq 0x120f70
movq -0x20(%rbp), %rdi
movss -0x238(%rbp), %xmm0
movss -0x23c(%rbp), %xmm2
movss -0x254(%rbp), %xmm3
movss -0x240(%rbp), %xmm4
movss -0x244(%rbp), %xmm1
addss -0x248(%rbp), %xmm1
addss -0x254(%rbp), %xmm1
movd %xmm1, %eax
xorl $0x80000000, %eax       # imm = 0x80000000
movd %eax, %xmm5
xorps %xmm1, %xmm1
callq 0x120f70
jmp 0x120d59
cmpl $0xb, -0x30(%rbp)
jge 0x120b5a
movl $0x0, -0x4(%rbp)
jmp 0x120e3a
movss -0x110(%rbp), %xmm0
movss %xmm0, -0x22c(%rbp)
movss -0x10c(%rbp), %xmm0
movss %xmm0, -0x244(%rbp)
movss -0x108(%rbp), %xmm0
movss %xmm0, -0x230(%rbp)
movss -0x104(%rbp), %xmm0
movss %xmm0, -0x248(%rbp)
movss -0x100(%rbp), %xmm0
movss %xmm0, -0x234(%rbp)
movss -0xfc(%rbp), %xmm0
movss %xmm0, -0x24c(%rbp)
movss -0xf8(%rbp), %xmm0
movss %xmm0, -0x238(%rbp)
movss -0xf4(%rbp), %xmm0
movss %xmm0, -0x250(%rbp)
movss -0xf0(%rbp), %xmm0
movss %xmm0, -0x23c(%rbp)
movss -0xec(%rbp), %xmm0
movss %xmm0, -0x254(%rbp)
movss -0xe8(%rbp), %xmm0
movss %xmm0, -0x258(%rbp)
movss %xmm0, -0x240(%rbp)
movss -0x22c(%rbp), %xmm0
addss -0x230(%rbp), %xmm0
addss -0x234(%rbp), %xmm0
addss -0x238(%rbp), %xmm0
addss -0x23c(%rbp), %xmm0
movss %xmm0, -0x25c(%rbp)
movss -0x244(%rbp), %xmm0
addss -0x248(%rbp), %xmm0
addss -0x24c(%rbp), %xmm0
addss -0x250(%rbp), %xmm0
addss -0x254(%rbp), %xmm0
movss %xmm0, -0x260(%rbp)
movss -0x25c(%rbp), %xmm0
movaps 0x51b7f(%rip), %xmm1    # 0x172800
pand %xmm1, %xmm0
movss -0x260(%rbp), %xmm1
movaps 0x51b6c(%rip), %xmm2    # 0x172800
pand %xmm2, %xmm1
ucomiss %xmm1, %xmm0
jbe 0x120cbc
movss -0x260(%rbp), %xmm0
movd %xmm0, %eax
xorl $0x80000000, %eax       # imm = 0x80000000
movd %eax, %xmm0
movss %xmm0, -0x258(%rbp)
jmp 0x120cd9
movss -0x25c(%rbp), %xmm0
movd %xmm0, %eax
xorl $0x80000000, %eax       # imm = 0x80000000
movd %eax, %xmm0
movss %xmm0, -0x240(%rbp)
movq -0x20(%rbp), %rdi
movss -0x22c(%rbp), %xmm0
movss -0x244(%rbp), %xmm1
movss -0x230(%rbp), %xmm2
movss -0x248(%rbp), %xmm3
movss -0x234(%rbp), %xmm4
movss -0x24c(%rbp), %xmm5
callq 0x120f70
movq -0x20(%rbp), %rdi
movss -0x238(%rbp), %xmm0
movss -0x250(%rbp), %xmm1
movss -0x23c(%rbp), %xmm2
movss -0x254(%rbp), %xmm3
movss -0x240(%rbp), %xmm4
movss -0x258(%rbp), %xmm5
callq 0x120f70
jmp 0x120d59
movl $0x0, -0x4(%rbp)
jmp 0x120e3a
jmp 0x120e21
cmpl $0xff, -0x3c(%rbp)
je 0x120d88
cmpl $0x1c, -0x3c(%rbp)
je 0x120d88
cmpl $0x20, -0x3c(%rbp)
jl 0x120d7c
cmpl $0xfe, -0x3c(%rbp)
jle 0x120d88
movl $0x0, -0x4(%rbp)
jmp 0x120e3a
cmpl $0xff, -0x3c(%rbp)
jne 0x120dbc
leaq -0x1d0(%rbp), %rdi
movl $0x4, %esi
callq 0x11f5d0
cvtsi2ss %eax, %xmm0
movss 0x62c9a(%rip), %xmm1    # 0x183a48
divss %xmm1, %xmm0
movss %xmm0, -0x1d4(%rbp)
jmp 0x120ded
leaq -0x1d0(%rbp), %rdi
movq %rdi, -0x2c0(%rbp)
movl $0xffffffff, %esi       # imm = 0xFFFFFFFF
callq 0x11f090
movq -0x2c0(%rbp), %rdi
callq 0x11f750
cwtl
cvtsi2ss %eax, %xmm0
movss %xmm0, -0x1d4(%rbp)
cmpl $0x30, -0x30(%rbp)
jl 0x120dfc
movl $0x0, -0x4(%rbp)
jmp 0x120e3a
movss -0x1d4(%rbp), %xmm0
movl -0x30(%rbp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, -0x30(%rbp)
cltq
movss %xmm0, -0x110(%rbp,%rax,4)
movl $0x0, -0x44(%rbp)
cmpl $0x0, -0x44(%rbp)
je 0x120e2e
movl $0x0, -0x30(%rbp)
jmp 0x11fdfd
movl $0x0, -0x4(%rbp)
movl -0x4(%rbp), %eax
addq $0x2c0, %rsp            # imm = 0x2C0
popq %rbp
retq
nopw %cs:(%rax,%rax)