// File: /workspace/github_cpp_makefile_star2_O3/Luthaf[P]zeopp/area_and_volume.cc
// Function: visVoro(char*, double, int, int, int, VORONOI_NETWORK*, ATOM_NETWORK*)
void visVoro(char* name, double probeRad, int skel_a, int skel_b, int skel_c, VORONOI_NETWORK* vornet, ATOM_NETWORK* atmnet) {
  string filename_xyz = string(name).append("_voro.xyz");
  string filename2_xyz = string(name).append("_voro_accessible.xyz");
  string filename3_xyz = string(name).append("_voro_nonaccessible.xyz");
  vector<bool> accessInfo;
  vector<bool> nonaccessInfo;
  vector<CHANNEL> channels;
  CHANNEL::findChannels(vornet, probeRad, &accessInfo, &channels);
  int num_accessible = 0;
  for(unsigned int i = 0; i < accessInfo.size(); i++) if(accessInfo.at(i)==1) num_accessible++;

  int num_nonaccessible = 0;
  nonaccessInfo.resize(accessInfo.size(),false);
  for(unsigned int i = 0; i < accessInfo.size(); i++) 
    if(vornet->nodes.at(i).rad_stat_sphere>probeRad&&accessInfo.at(i)==0) 
       {
       num_nonaccessible++;
       nonaccessInfo[i]=true;
       };

  //write Voronoi nodes as .xyz
  FILE *output_xyz; output_xyz = fopen(filename_xyz.c_str(), "w");
  FILE *output2_xyz; output2_xyz = fopen(filename2_xyz.c_str(), "w");
  FILE *output3_xyz; output3_xyz = fopen(filename3_xyz.c_str(), "w");
  fprintf(output_xyz, "%d\nVoronoi diagram for %s with probe radius %.3f\n", (int)(accessInfo.size()), name, probeRad);
  fprintf(output2_xyz, "%d\nVoronoi accessible diagram for %s with probe radius %.3f\n", num_accessible, name, probeRad);
  fprintf(output3_xyz, "%d\nVoronoi non-accessible diagram for %s with probe radius %.3f\n", num_nonaccessible, name, probeRad);
  for(unsigned int i = 0; i < accessInfo.size(); i++) {
    fprintf(output_xyz, "Al %.3f %.3f %.3f %.3f\n", vornet->nodes.at(i).x, vornet->nodes.at(i).y, vornet->nodes.at(i).z, vornet->nodes.at(i).rad_stat_sphere); //"Al" for 'all' Voronoi nodes, shown in main unit cell
    if(accessInfo.at(i)==1) {
      Point abc = atmnet->xyz_to_abc(vornet->nodes.at(i).x, vornet->nodes.at(i).y, vornet->nodes.at(i).z);
      float new_a = abc.vals[0] + skel_a;
      float new_b = abc.vals[1] + skel_b;
      float new_c = abc.vals[2] + skel_c;
      Point new_xyz = atmnet->abc_to_xyz(new_a, new_b, new_c);
      fprintf(output2_xyz, "Ac %.3f %.3f %.3f %.3f\n", new_xyz.vals[0], new_xyz.vals[1], new_xyz.vals[2], vornet->nodes.at(i).rad_stat_sphere); //"Ac" for 'accessible' Voronoi nodes, shown in adjacent cell
    } else {
    if(vornet->nodes.at(i).rad_stat_sphere>probeRad) {
      Point abc = atmnet->xyz_to_abc(vornet->nodes.at(i).x, vornet->nodes.at(i).y, vornet->nodes.at(i).z);
      float new_a = abc.vals[0] + skel_a;
      float new_b = abc.vals[1] + skel_b;
      float new_c = abc.vals[2] + skel_c;
      Point new_xyz = atmnet->abc_to_xyz(new_a, new_b, new_c);
      fprintf(output3_xyz, "In %.3f %.3f %.3f %.3f\n", new_xyz.vals[0], new_xyz.vals[1], new_xyz.vals[2], vornet->nodes.at(i).rad_stat_sphere); //"In" for 'nonaccessible' Voronoi nodes, shown in adjacent cell

     }; // ends if for nodes larger than probeRad

    };
  }
  fclose(output_xyz);
  fclose(output2_xyz);
  fclose(output3_xyz);


  // VTK saving function
  // Note: to avoid issues with reindexing of nodes in .vtk file
  //       when printing (non)accesible network, all nodes are printed first

  //write Voronoi edges as .vtk
  string filename_vtk = string(name).append("_voro.vtk");
  string filename2_vtk = string(name).append("_voro_accessible.vtk");
  string filename3_vtk = string(name).append("_voro_nonaccessible.vtk");
  //start saving the addresses of (non)accessible nodes
  int *accessIndex;
  accessIndex = new int[accessInfo.size()];
  int *nonaccessIndex;
  nonaccessIndex = new int[nonaccessInfo.size()];
  int count = accessInfo.size(); //start counter at total number of nodes - because accessible nodes are added on after
  int countNonacc = nonaccessInfo.size(); //start counter at total number of nodes - because nonaccessible nodes are added on after
  for(unsigned int i = 0; i < accessInfo.size(); i++) {
    if(accessInfo.at(i)==1) {
      accessIndex[i] = count;
      count++;
    } else accessIndex[i] = -1;
    if(nonaccessInfo.at(i)==1) {
      nonaccessIndex[i] = countNonacc;
      countNonacc++;
    } else nonaccessIndex[i] = -1;
  }
  //refer to those addresses in edge storage
  vector <int> to_vector, from_vector;
  vector <int> to2_vector, from2_vector;
  vector <int> to3_vector, from3_vector;
  for(unsigned int i=0; i<vornet->edges.size(); i++) {
		if(accessInfo.at(vornet->edges.at(i).from)>0 && accessInfo.at(vornet->edges.at(i).to)>0 && vornet->edges.at(i).rad_moving_sphere>probeRad) {
      //this edge is accessible - save it for accessible part of the image
      if(vornet->edges.at(i).delta_uc_x==0 && vornet->edges.at(i).delta_uc_y==0 && vornet->edges.at(i).delta_uc_z==0) { //just edges within the unit cell
        from2_vector.push_back(accessIndex[vornet->edges.at(i).from]);
        to2_vector.push_back(accessIndex[vornet->edges.at(i).to]);
      } else if(vornet->edges.at(i).delta_uc_x==skel_a && vornet->edges.at(i).delta_uc_y==skel_b && vornet->edges.at(i).delta_uc_z==skel_c) { //just edges from overall section to accessible section
        from2_vector.push_back(vornet->edges.at(i).from);
        to2_vector.push_back(accessIndex[vornet->edges.at(i).to]);
      }
    } // ends if for accessible

      if(nonaccessInfo.at(vornet->edges.at(i).from)>0 && nonaccessInfo.at(vornet->edges.at(i).to)>0 && vornet->edges.at(i).rad_moving_sphere>probeRad) {
      //this edge is within nonaccessible pocket - save it for nonaccessible part of the image
      if(vornet->edges.at(i).delta_uc_x==0 && vornet->edges.at(i).delta_uc_y==0 && vornet->edges.at(i).delta_uc_z==0) { //just edges within the unit cell
        from3_vector.push_back(nonaccessIndex[vornet->edges.at(i).from]);
        to3_vector.push_back(nonaccessIndex[vornet->edges.at(i).to]);
      } else if(vornet->edges.at(i).delta_uc_x==skel_a && vornet->edges.at(i).delta_uc_y==skel_b && vornet->edges.at(i).delta_uc_z==skel_c) { //just edges from overall section to accessible section
        from3_vector.push_back(nonaccessIndex[vornet->edges.at(i).from]);
        to3_vector.push_back(nonaccessIndex[vornet->edges.at(i).to]);
      }
    } // ends if for nonaccessible

    if(vornet->edges.at(i).delta_uc_x==0 && vornet->edges.at(i).delta_uc_y==0 && vornet->edges.at(i).delta_uc_z==0) { //just edges within the unit cell
      //regardless of accessibility, want to save the within-cell edges for overall part of the image
      from_vector.push_back(vornet->edges.at(i).from);
      to_vector.push_back(vornet->edges.at(i).to);
    }
  }; // end loop over all edges


  // VTK file write
  FILE *output_vtk; output_vtk = fopen(filename_vtk.c_str(), "w");
  FILE *output2_vtk; output2_vtk = fopen(filename2_vtk.c_str(), "w");
  FILE *output3_vtk; output3_vtk = fopen(filename3_vtk.c_str(), "w");
  fprintf(output_vtk, "# vtk DataFile Version 2.0\nvtk data for file %s\nASCII\nDATASET POLYDATA\nPOINTS %d double\n", name, (int)(accessInfo.size()));
  fprintf(output2_vtk, "# vtk DataFile Version 2.0\nvtk data for file %s\nASCII\nDATASET POLYDATA\nPOINTS %d double\n", name, (int)(accessInfo.size())+num_accessible);
  fprintf(output3_vtk, "# vtk DataFile Version 2.0\nvtk data for file %s\nASCII\nDATASET POLYDATA\nPOINTS %d double\n", name, (int)(accessInfo.size())+num_nonaccessible);
  //write nodes to file
  for(unsigned int i = 0; i < accessInfo.size(); i++) {
    fprintf(output_vtk, "%.3f %.3f %.3f\n", vornet->nodes.at(i).x, vornet->nodes.at(i).y, vornet->nodes.at(i).z);
    fprintf(output2_vtk, "%.3f %.3f %.3f\n", vornet->nodes.at(i).x, vornet->nodes.at(i).y, vornet->nodes.at(i).z);
    fprintf(output3_vtk, "%.3f %.3f %.3f\n", vornet->nodes.at(i).x, vornet->nodes.at(i).y, vornet->nodes.at(i).z);
  }
  for(unsigned int i = 0; i < accessInfo.size(); i++) {
    if(accessInfo.at(i)==1) {
      Point abc = atmnet->xyz_to_abc(vornet->nodes.at(i).x, vornet->nodes.at(i).y, vornet->nodes.at(i).z);
      float new_a = abc.vals[0] + skel_a;
      float new_b = abc.vals[1] + skel_b;
      float new_c = abc.vals[2] + skel_c;
      Point new_xyz = atmnet->abc_to_xyz(new_a, new_b, new_c);
      fprintf(output2_vtk, "%.3f %.3f %.3f\n", new_xyz.vals[0], new_xyz.vals[1], new_xyz.vals[2]);
    };
    if(nonaccessInfo.at(i)==1) {
      Point abc = atmnet->xyz_to_abc(vornet->nodes.at(i).x, vornet->nodes.at(i).y, vornet->nodes.at(i).z);
      float new_a = abc.vals[0] + skel_a;
      float new_b = abc.vals[1] + skel_b;
      float new_c = abc.vals[2] + skel_c;
      Point new_xyz = atmnet->abc_to_xyz(new_a, new_b, new_c);
      fprintf(output3_vtk, "%.3f %.3f %.3f\n", new_xyz.vals[0], new_xyz.vals[1], new_xyz.vals[2]);
    };
  }
  //write edges to file
  fprintf(output_vtk, "LINES %d %d\n", (int)(to_vector.size()), ((int)(to_vector.size()))*3);
  for(unsigned int i = 0; i < to_vector.size(); i++) {
    fprintf(output_vtk, "2 %d %d\n", to_vector.at(i), from_vector.at(i));
  }
  fprintf(output2_vtk, "LINES %d %d\n", (int)(to2_vector.size()), ((int)(to2_vector.size()))*3);
  for(unsigned int i = 0; i < to2_vector.size(); i++) {
    fprintf(output2_vtk, "2 %d %d\n", to2_vector.at(i), from2_vector.at(i));
  }
  fprintf(output3_vtk, "LINES %d %d\n", (int)(to3_vector.size()), ((int)(to3_vector.size()))*3);
  for(unsigned int i = 0; i < to3_vector.size(); i++) {
    fprintf(output3_vtk, "2 %d %d\n", to3_vector.at(i), from3_vector.at(i));
  }
  fclose(output_vtk);
  fclose(output2_vtk);
  fclose(output3_vtk);
  //FREE MEMORY
  delete[] accessIndex;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x278, %rsp            # imm = 0x278
movq %r9, %rbx
movq %r8, %r14
movl %ecx, 0xe4(%rsp)
movl %edx, 0xe8(%rsp)
movl %esi, 0xec(%rsp)
movsd %xmm0, 0x10(%rsp)
movq %rdi, %rsi
leaq 0x18(%rsp), %rdi
leaq 0x1e0(%rsp), %rdx
movq %rsi, 0xf8(%rsp)
callq 0x2f484
leaq 0x10f29f(%rip), %rsi    # 0x151c0d
leaq 0x18(%rsp), %rdi
callq 0x4820
leaq 0x90(%rsp), %r12
movq %r12, -0x10(%r12)
movq (%rax), %rsi
movq 0x8(%rax), %rdx
addq %rsi, %rdx
leaq 0x80(%rsp), %rdi
callq 0xf3ce
leaq 0x28(%rsp), %r15
movq -0x10(%r15), %rdi
cmpq %r15, %rdi
je 0x429b7
movq 0x28(%rsp), %rsi
incq %rsi
callq 0x4470
leaq 0x18(%rsp), %rdi
leaq 0x1e0(%rsp), %rdx
movq 0xf8(%rsp), %rsi
callq 0x2f484
leaq 0x10f23f(%rip), %rsi    # 0x151c17
leaq 0x18(%rsp), %rdi
callq 0x4820
leaq 0x70(%rsp), %r13
movq %r13, -0x10(%r13)
movq (%rax), %rsi
movq 0x8(%rax), %rdx
addq %rsi, %rdx
leaq 0x60(%rsp), %rdi
callq 0xf3ce
movq 0x18(%rsp), %rdi
cmpq %r15, %rdi
je 0x42a16
movq 0x28(%rsp), %rsi
incq %rsi
callq 0x4470
leaq 0x18(%rsp), %rdi
leaq 0x1e0(%rsp), %rdx
movq 0xf8(%rsp), %rsi
callq 0x2f484
leaq 0x10f1f5(%rip), %rsi    # 0x151c2c
leaq 0x18(%rsp), %rdi
callq 0x4820
leaq 0x50(%rsp), %rbp
movq %rbp, -0x10(%rbp)
movq (%rax), %rsi
movq 0x8(%rax), %rdx
addq %rsi, %rdx
leaq 0x40(%rsp), %rdi
callq 0xf3ce
movq 0x18(%rsp), %rdi
cmpq %r15, %rdi
je 0x42a75
movq 0x28(%rsp), %rsi
incq %rsi
callq 0x4470
xorl %r15d, %r15d
leaq 0x18(%rsp), %rsi
movq %r15, (%rsi)
movl %r15d, 0x8(%rsi)
movq %r15, 0x10(%rsi)
movl %r15d, 0x18(%rsi)
movq %r15, 0x20(%rsi)
movq %r15, 0x1e0(%rsp)
movl %r15d, 0x1e8(%rsp)
movq %r15, 0x1f0(%rsp)
movl %r15d, 0x1f8(%rsp)
movq %r15, 0x200(%rsp)
leaq 0x260(%rsp), %rdx
movq %r15, 0x10(%rdx)
xorpd %xmm0, %xmm0
movapd %xmm0, (%rdx)
movq %r14, %rdi
movsd 0x10(%rsp), %xmm0
callq 0x73b1c
movq %rbx, 0x1b8(%rsp)
movq 0x28(%rsp), %rax
movl 0x30(%rsp), %ecx
subq 0x18(%rsp), %rax
shlq $0x3, %rax
addq %rcx, %rax
jne 0x42afd
xorl %eax, %eax
jmp 0x42b3a
xorl %esi, %esi
movl $0x1, %ebp
leaq 0x18(%rsp), %rbx
xorl %r15d, %r15d
movq %rbx, %rdi
callq 0xee36
andq (%rax), %rdx
cmpq $0x1, %rdx
sbbl $-0x1, %r15d
movl %ebp, %esi
movq 0x28(%rsp), %rax
subq 0x18(%rsp), %rax
movl 0x30(%rsp), %ecx
leaq (%rcx,%rax,8), %rax
incl %ebp
cmpq %rsi, %rax
ja 0x42b0c
leaq 0x1e0(%rsp), %rdi
movq $0x0, 0x140(%rsp)
movq %rax, %rsi
xorl %edx, %edx
callq 0xedc8
movq %r15, 0x228(%rsp)
movq 0x28(%rsp), %rax
movl 0x30(%rsp), %ecx
subq 0x18(%rsp), %rax
shlq $0x3, %rax
addq %rcx, %rax
je 0x42c24
xorl %r15d, %r15d
movl $0x1, %r12d
leaq 0x18(%rsp), %rbx
movq $0x0, 0x140(%rsp)
movq 0x48(%r14), %rax
movq 0x50(%r14), %rdx
subq %rax, %rdx
sarq $0x6, %rdx
cmpq %r15, %rdx
jbe 0x43f60
movq %r15, %rcx
shlq $0x6, %rcx
movsd 0x18(%rax,%rcx), %xmm0
ucomisd 0x10(%rsp), %xmm0
jbe 0x42c03
movq %rbx, %rdi
movq %r15, %rsi
callq 0xee36
testq %rdx, (%rax)
jne 0x42c03
leal -0x1(%r12), %eax
movq 0x1e0(%rsp), %rdx
shrl $0x6, %eax
movl $0x1, %esi
movl %r15d, %ecx
shlq %cl, %rsi
movq 0x140(%rsp), %rcx
incl %ecx
movq %rcx, 0x140(%rsp)
orq %rsi, (%rdx,%rax,8)
movl %r12d, %r15d
movq 0x28(%rsp), %rax
subq 0x18(%rsp), %rax
movl 0x30(%rsp), %ecx
leaq (%rcx,%rax,8), %rax
incl %r12d
cmpq %r15, %rax
ja 0x42b95
movq 0x80(%rsp), %rdi
leaq 0x10f011(%rip), %rbx    # 0x151c44
movq %rbx, %rsi
callq 0x4510
movq %rax, %r15
movq 0x60(%rsp), %rdi
movq %rbx, %rsi
callq 0x4510
movq %rax, %r12
movq 0x40(%rsp), %rdi
movq %rbx, %rsi
callq 0x4510
movl 0x28(%rsp), %edx
subl 0x18(%rsp), %edx
movq %rax, %r13
shll $0x3, %edx
addl 0x30(%rsp), %edx
leaq 0x10efd2(%rip), %rsi    # 0x151c46
movq %r15, %rdi
movq 0xf8(%rsp), %rbx
movq %rbx, %rcx
movsd 0x10(%rsp), %xmm0
movb $0x1, %al
callq 0x45f0
leaq 0x10efe2(%rip), %rsi    # 0x151c78
movq %r12, 0x148(%rsp)
movq %r12, %rdi
movq 0x228(%rsp), %rdx
movq %rbx, %rcx
movsd 0x10(%rsp), %xmm0
movb $0x1, %al
callq 0x45f0
leaq 0x10eff5(%rip), %rsi    # 0x151cb5
movq %r13, 0xf0(%rsp)
movq %r13, %rdi
movq 0x140(%rsp), %rdx
movq %rbx, %rcx
movsd 0x10(%rsp), %xmm0
movb $0x1, %al
callq 0x45f0
movq 0x28(%rsp), %rax
movl 0x30(%rsp), %ecx
subq 0x18(%rsp), %rax
shlq $0x3, %rax
addq %rcx, %rax
je 0x42faf
xorps %xmm0, %xmm0
cvtsi2sdl 0xec(%rsp), %xmm0
movsd %xmm0, 0x8(%rsp)
xorps %xmm0, %xmm0
cvtsi2sdl 0xe8(%rsp), %xmm0
movsd %xmm0, 0x158(%rsp)
xorps %xmm0, %xmm0
cvtsi2sdl 0xe4(%rsp), %xmm0
movsd %xmm0, 0x150(%rsp)
movl $0x1, %ebx
xorl %r12d, %r12d
movq 0x48(%r14), %rax
movq 0x50(%r14), %rdx
subq %rax, %rdx
sarq $0x6, %rdx
cmpq %r12, %rdx
jbe 0x43ef2
movq %r12, %r13
shlq $0x6, %r13
movsd (%rax,%r13), %xmm0
movsd 0x8(%rax,%r13), %xmm1
movsd 0x10(%rax,%r13), %xmm2
movsd 0x18(%rax,%r13), %xmm3
movq %r15, %rdi
leaq 0x10ef70(%rip), %rsi    # 0x151cf6
movb $0x4, %al
callq 0x45f0
leaq 0x18(%rsp), %rdi
movq %r12, %rsi
callq 0xee36
testq %rdx, (%rax)
je 0x42e90
movq 0x48(%r14), %rax
movq 0x50(%r14), %rdx
subq %rax, %rdx
sarq $0x6, %rdx
cmpq %r12, %rdx
jbe 0x43f71
movsd (%rax,%r13), %xmm0
movsd 0x8(%rax,%r13), %xmm1
movsd 0x10(%rax,%r13), %xmm2
leaq 0xc0(%rsp), %rdi
movq 0x1b8(%rsp), %rbp
movq %rbp, %rsi
callq 0x52eec
movsd 0xc0(%rsp), %xmm0
addsd 0x8(%rsp), %xmm0
cvtsd2ss %xmm0, %xmm0
movsd 0xc8(%rsp), %xmm1
addsd 0x158(%rsp), %xmm1
cvtsd2ss %xmm1, %xmm1
movsd 0xd0(%rsp), %xmm2
addsd 0x150(%rsp), %xmm2
cvtsd2ss %xmm2, %xmm2
cvtss2sd %xmm0, %xmm0
cvtss2sd %xmm1, %xmm1
cvtss2sd %xmm2, %xmm2
leaq 0xa0(%rsp), %rdi
movq %rbp, %rsi
callq 0x52d94
movq 0x48(%r14), %rax
movq 0x50(%r14), %rdx
subq %rax, %rdx
sarq $0x6, %rdx
cmpq %r12, %rdx
jbe 0x43f82
movsd 0xb0(%rsp), %xmm2
movsd 0xa0(%rsp), %xmm0
movsd 0xa8(%rsp), %xmm1
movsd 0x18(%rax,%r13), %xmm3
movq 0x148(%rsp), %rdi
leaq 0x10ee83(%rip), %rsi    # 0x151d0e
jmp 0x42f88
movq 0x48(%r14), %rax
movq 0x50(%r14), %rdx
subq %rax, %rdx
sarq $0x6, %rdx
cmpq %r12, %rdx
jbe 0x43ef2
movsd 0x18(%rax,%r13), %xmm0
ucomisd 0x10(%rsp), %xmm0
jbe 0x42f8f
addq %r13, %rax
movsd (%rax), %xmm0
movsd 0x8(%rax), %xmm1
movsd 0x10(%rax), %xmm2
leaq 0xc0(%rsp), %rdi
movq 0x1b8(%rsp), %rbp
movq %rbp, %rsi
callq 0x52eec
movsd 0xc0(%rsp), %xmm0
addsd 0x8(%rsp), %xmm0
cvtsd2ss %xmm0, %xmm0
movsd 0xc8(%rsp), %xmm1
addsd 0x158(%rsp), %xmm1
cvtsd2ss %xmm1, %xmm1
movsd 0xd0(%rsp), %xmm2
addsd 0x150(%rsp), %xmm2
cvtsd2ss %xmm2, %xmm2
cvtss2sd %xmm0, %xmm0
cvtss2sd %xmm1, %xmm1
cvtss2sd %xmm2, %xmm2
leaq 0xa0(%rsp), %rdi
movq %rbp, %rsi
callq 0x52d94
movq 0x48(%r14), %rax
movq 0x50(%r14), %rdx
subq %rax, %rdx
sarq $0x6, %rdx
cmpq %r12, %rdx
jbe 0x43fb5
movsd 0xb0(%rsp), %xmm2
movsd 0xa0(%rsp), %xmm0
movsd 0xa8(%rsp), %xmm1
movsd 0x18(%rax,%r13), %xmm3
movq 0xf0(%rsp), %rdi
leaq 0x10ed9e(%rip), %rsi    # 0x151d26
movb $0x4, %al
callq 0x45f0
movl %ebx, %r12d
movq 0x28(%rsp), %rax
subq 0x18(%rsp), %rax
movl 0x30(%rsp), %ecx
leaq (%rcx,%rax,8), %rax
incl %ebx
cmpq %r12, %rax
ja 0x42d42
movq %r15, %rdi
callq 0x4450
movq 0x148(%rsp), %rdi
callq 0x4450
movq 0xf0(%rsp), %rdi
callq 0x4450
leaq 0xa0(%rsp), %rdi
leaq 0x208(%rsp), %rdx
movq 0xf8(%rsp), %rsi
callq 0x2f484
leaq 0x10ed49(%rip), %rsi    # 0x151d3e
leaq 0xa0(%rsp), %rdi
callq 0x4820
leaq 0xd0(%rsp), %rbx
movq %rbx, -0x10(%rbx)
movq (%rax), %rsi
movq 0x8(%rax), %rdx
addq %rsi, %rdx
leaq 0xc0(%rsp), %rdi
callq 0xf3ce
leaq 0xb0(%rsp), %r15
movq -0x10(%r15), %rdi
cmpq %r15, %rdi
je 0x43046
movq 0xb0(%rsp), %rsi
incq %rsi
callq 0x4470
leaq 0x208(%rsp), %rdi
leaq 0x160(%rsp), %rdx
movq 0xf8(%rsp), %rsi
callq 0x2f484
leaq 0x10ecde(%rip), %rsi    # 0x151d48
leaq 0x208(%rsp), %rdi
callq 0x4820
leaq 0xa0(%rsp), %rdi
movq %r15, (%rdi)
movq (%rax), %rsi
movq 0x8(%rax), %rdx
addq %rsi, %rdx
callq 0xf3ce
leaq 0x218(%rsp), %r12
movq -0x10(%r12), %rdi
cmpq %r12, %rdi
je 0x430b3
movq 0x218(%rsp), %rsi
incq %rsi
callq 0x4470
leaq 0x160(%rsp), %rdi
leaq 0x1c0(%rsp), %rdx
movq 0xf8(%rsp), %rsi
callq 0x2f484
leaq 0x10ec86(%rip), %rsi    # 0x151d5d
leaq 0x160(%rsp), %rdi
callq 0x4820
leaq 0x208(%rsp), %rdi
movq %r12, (%rdi)
movq (%rax), %rsi
movq 0x8(%rax), %rdx
addq %rsi, %rdx
callq 0xf3ce
leaq 0x170(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x4311f
movq 0x170(%rsp), %rsi
incq %rsi
callq 0x4470
movq 0x28(%rsp), %rbx
movl 0x30(%rsp), %r12d
subq 0x18(%rsp), %rbx
leaq (%r12,%rbx,8), %rbp
movq %rbp, %rax
shrq $0x3e, %rax
leaq (,%rbp,4), %rcx
xorl %edi, %edi
negq %rax
sbbq %rdi, %rdi
orq %rcx, %rdi
callq 0x4030
movq %rax, 0xf0(%rsp)
movabsq $0x3fffffffffffffff, %rax # imm = 0x3FFFFFFFFFFFFFFF
movq 0x1f0(%rsp), %rcx
subq 0x1e0(%rsp), %rcx
movl 0x1f8(%rsp), %edx
leaq (%rdx,%rcx,8), %r15
leaq (,%r15,4), %rcx
cmpq %rax, %r15
movq $-0x1, %rdi
cmovbeq %rcx, %rdi
callq 0x4030
movq %rax, 0x8(%rsp)
shlq $0x3, %rbx
addq %r12, %rbx
je 0x43233
movl $0x1, %r12d
xorl %ebx, %ebx
leaq 0x18(%rsp), %rdi
movq %rbx, %rsi
callq 0xee36
movq %rdx, %r13
andq (%rax), %r13
movl $0xffffffff, %eax       # imm = 0xFFFFFFFF
cmovnel %ebp, %eax
movq 0xf0(%rsp), %rcx
movl %eax, (%rcx,%rbx,4)
leaq 0x1e0(%rsp), %rdi
movq %rbx, %rsi
callq 0xee36
andq (%rax), %rdx
cmpq $0x1, %rdx
movl $0x0, %eax
sbbl %eax, %eax
cmpq $0x1, %rdx
movl %r15d, %ecx
sbbl $-0x1, %ecx
cmpq $0x1, %r13
sbbl $-0x1, %ebp
orl %r15d, %eax
movq 0x8(%rsp), %rdx
movl %eax, (%rdx,%rbx,4)
movl %r12d, %ebx
movq 0x28(%rsp), %rax
movl 0x30(%rsp), %edx
subq 0x18(%rsp), %rax
leaq (%rdx,%rax,8), %rax
incl %r12d
movl %ecx, %r15d
cmpq %rbx, %rax
ja 0x431b3
xorpd %xmm0, %xmm0
movapd %xmm0, 0x160(%rsp)
xorl %eax, %eax
movq %rax, 0x170(%rsp)
movq %rax, 0x1d0(%rsp)
movapd %xmm0, 0x1c0(%rsp)
movq %rax, 0x130(%rsp)
movapd %xmm0, 0x120(%rsp)
movq %rax, 0x1b0(%rsp)
movapd %xmm0, 0x1a0(%rsp)
movq %rax, 0x110(%rsp)
movapd %xmm0, 0x100(%rsp)
movq %rax, 0x190(%rsp)
movapd %xmm0, 0x180(%rsp)
movq 0x60(%r14), %rcx
cmpq %rcx, 0x68(%r14)
je 0x436e6
movl $0x1, %ebx
xorl %r13d, %r13d
leaq 0x18(%rsp), %rbp
movabsq $-0x3333333333333333, %r15 # imm = 0xCCCCCCCCCCCCCCCD
leaq (,%r13,4), %r12
addq %r13, %r12
movslq (%rcx,%r12,8), %rsi
movq %rbp, %rdi
callq 0xee36
testq %rdx, (%rax)
je 0x4344e
movq 0x60(%r14), %rax
movq 0x68(%r14), %rdx
subq %rax, %rdx
sarq $0x3, %rdx
imulq %r15, %rdx
cmpq %r13, %rdx
jbe 0x43f03
movslq 0x4(%rax,%r12,8), %rsi
movq %rbp, %rdi
callq 0xee36
testq %rdx, (%rax)
je 0x4344e
movq 0x60(%r14), %rcx
movq 0x68(%r14), %rdx
subq %rcx, %rdx
sarq $0x3, %rdx
imulq %r15, %rdx
cmpq %r13, %rdx
jbe 0x43f03
movsd 0x8(%rcx,%r12,8), %xmm0
ucomisd 0x10(%rsp), %xmm0
jbe 0x4344e
leaq (%rcx,%r12,8), %rax
movl 0x10(%rax), %esi
testl %esi, %esi
jne 0x4335c
cmpl $0x0, 0x14(%rax)
jne 0x4335c
cmpl $0x0, 0x18(%rax)
je 0x433ad
cmpl 0xec(%rsp), %esi
jne 0x4344e
movl 0xe8(%rsp), %esi
cmpl %esi, 0x14(%rax)
jne 0x4344e
movl 0xe4(%rsp), %esi
cmpl %esi, 0x18(%rax)
jne 0x4344e
movq 0x1a8(%rsp), %rsi
cmpq 0x1b0(%rsp), %rsi
jne 0x433ce
leaq 0x1a0(%rsp), %rdi
movq %rax, %rdx
callq 0xf864
jmp 0x433f0
movslq (%rax), %rax
movq 0xf0(%rsp), %rsi
leaq (%rsi,%rax,4), %rax
movq 0x1a8(%rsp), %rsi
cmpq 0x1b0(%rsp), %rsi
je 0x433e0
movl (%rax), %eax
movl %eax, (%rsi)
addq $0x4, %rsi
movq %rsi, 0x1a8(%rsp)
jmp 0x43403
leaq 0x1a0(%rsp), %rdi
movq %rax, %rdx
callq 0xf864
movq 0x60(%r14), %rcx
movq 0x68(%r14), %rdx
subq %rcx, %rdx
sarq $0x3, %rdx
imulq %r15, %rdx
cmpq %r13, %rdx
jbe 0x43ee1
movslq 0x4(%rcx,%r12,8), %rax
movq 0xf0(%rsp), %rcx
leaq (%rcx,%rax,4), %rdx
movq 0x128(%rsp), %rsi
cmpq 0x130(%rsp), %rsi
je 0x43441
movl (%rdx), %eax
movl %eax, (%rsi)
addq $0x4, %rsi
movq %rsi, 0x128(%rsp)
jmp 0x4344e
leaq 0x120(%rsp), %rdi
callq 0xf864
movq 0x60(%r14), %rax
movq 0x68(%r14), %rdx
subq %rax, %rdx
sarq $0x3, %rdx
imulq %r15, %rdx
cmpq %r13, %rdx
jbe 0x43f25
movslq (%rax,%r12,8), %rsi
leaq 0x1e0(%rsp), %rdi
callq 0xee36
testq %rdx, (%rax)
je 0x435f9
movq 0x60(%r14), %rax
movq 0x68(%r14), %rdx
subq %rax, %rdx
sarq $0x3, %rdx
imulq %r15, %rdx
cmpq %r13, %rdx
jbe 0x43f14
movslq 0x4(%rax,%r12,8), %rsi
leaq 0x1e0(%rsp), %rdi
callq 0xee36
testq %rdx, (%rax)
je 0x435f9
movq 0x60(%r14), %rcx
movq 0x68(%r14), %rdx
subq %rcx, %rdx
sarq $0x3, %rdx
imulq %r15, %rdx
cmpq %r13, %rdx
jbe 0x43f14
movsd 0x8(%rcx,%r12,8), %xmm0
ucomisd 0x10(%rsp), %xmm0
jbe 0x435f9
leaq (%rcx,%r12,8), %rax
movl 0x10(%rax), %esi
testl %esi, %esi
jne 0x43501
cmpl $0x0, 0x14(%rax)
jne 0x43501
cmpl $0x0, 0x18(%rax)
je 0x4355e
cmpl 0xec(%rsp), %esi
jne 0x435f9
movl 0xe8(%rsp), %esi
cmpl %esi, 0x14(%rax)
jne 0x435f9
movl 0xe4(%rsp), %esi
cmpl %esi, 0x18(%rax)
jne 0x435f9
movslq (%rax), %rax
movq 0x8(%rsp), %rsi
leaq (%rsi,%rax,4), %rax
movq 0x188(%rsp), %rsi
cmpq 0x190(%rsp), %rsi
jne 0x4357c
leaq 0x180(%rsp), %rdi
movq %rax, %rdx
callq 0xf864
jmp 0x4359e
movslq (%rax), %rax
movq 0x8(%rsp), %rsi
leaq (%rsi,%rax,4), %rax
movq 0x188(%rsp), %rsi
cmpq 0x190(%rsp), %rsi
je 0x4358e
movl (%rax), %eax
movl %eax, (%rsi)
addq $0x4, %rsi
movq %rsi, 0x188(%rsp)
jmp 0x435b1
leaq 0x180(%rsp), %rdi
movq %rax, %rdx
callq 0xf864
movq 0x60(%r14), %rcx
movq 0x68(%r14), %rdx
subq %rcx, %rdx
sarq $0x3, %rdx
imulq %r15, %rdx
cmpq %r13, %rdx
jbe 0x43ee1
movslq 0x4(%rcx,%r12,8), %rax
movq 0x8(%rsp), %rcx
leaq (%rcx,%rax,4), %rdx
movq 0x108(%rsp), %rsi
cmpq 0x110(%rsp), %rsi
je 0x435ec
movl (%rdx), %eax
movl %eax, (%rsi)
addq $0x4, %rsi
movq %rsi, 0x108(%rsp)
jmp 0x435f9
leaq 0x100(%rsp), %rdi
callq 0xf864
movq 0x60(%r14), %rcx
movq 0x68(%r14), %rdx
subq %rcx, %rdx
sarq $0x3, %rdx
imulq %r15, %rdx
cmpq %r13, %rdx
jbe 0x43ee1
cmpl $0x0, 0x10(%rcx,%r12,8)
jne 0x436d8
leaq (%rcx,%r12,8), %rax
cmpl $0x0, 0x14(%rax)
jne 0x436d8
cmpl $0x0, 0x18(%rax)
jne 0x436d8
movq 0x1c8(%rsp), %rsi
cmpq 0x1d0(%rsp), %rsi
je 0x4365d
movl (%rax), %eax
movl %eax, (%rsi)
addq $0x4, %rsi
movq %rsi, 0x1c8(%rsp)
jmp 0x43680
leaq 0x1c0(%rsp), %rdi
movq %rax, %rdx
callq 0xf864
movq 0x60(%r14), %rcx
movq 0x68(%r14), %rdx
subq %rcx, %rdx
sarq $0x3, %rdx
imulq %r15, %rdx
cmpq %r13, %rdx
jbe 0x43ee1
leaq (%rcx,%r12,8), %rax
addq $0x4, %rax
movq 0x168(%rsp), %rsi
cmpq 0x170(%rsp), %rsi
je 0x436b5
movl (%rax), %eax
movl %eax, (%rsi)
addq $0x4, %rsi
movq %rsi, 0x168(%rsp)
jmp 0x436d8
leaq 0x160(%rsp), %rdi
movq %rax, %rdx
callq 0xf864
movq 0x60(%r14), %rcx
movq 0x68(%r14), %rdx
subq %rcx, %rdx
sarq $0x3, %rdx
imulq %r15, %rdx
movl %ebx, %r13d
incl %ebx
cmpq %r13, %rdx
ja 0x432c4
movq 0xc0(%rsp), %rdi
leaq 0x10e54f(%rip), %rbx    # 0x151c44
movq %rbx, %rsi
callq 0x4510
movq %rax, %r13
movq 0xa0(%rsp), %rdi
movq %rbx, %rsi
callq 0x4510
movq %rax, %r12
movq 0x208(%rsp), %rdi
movq %rbx, %rsi
callq 0x4510
movl 0x28(%rsp), %ecx
subl 0x18(%rsp), %ecx
movq %rax, %rbp
shll $0x3, %ecx
addl 0x30(%rsp), %ecx
leaq 0x10e639(%rip), %rbx    # 0x151d75
movq %r13, %rdi
movq %rbx, %rsi
movq 0xf8(%rsp), %r15
movq %r15, %rdx
xorl %eax, %eax
callq 0x45f0
movl 0x28(%rsp), %eax
subl 0x18(%rsp), %eax
movq 0x228(%rsp), %rcx
addl 0x30(%rsp), %ecx
leal (%rcx,%rax,8), %ecx
movq %r12, 0x10(%rsp)
movq %r12, %rdi
movq %rbx, %rsi
movq %r15, %rdx
xorl %eax, %eax
callq 0x45f0
movl 0x28(%rsp), %eax
subl 0x18(%rsp), %eax
movq 0x140(%rsp), %rcx
addl 0x30(%rsp), %ecx
leal (%rcx,%rax,8), %ecx
movq %rbp, 0x8(%rsp)
movq %rbp, %rdi
movq %rbx, %rsi
movq %r15, %rdx
xorl %eax, %eax
callq 0x45f0
movq 0x28(%rsp), %rax
subq 0x18(%rsp), %rax
movl 0x30(%rsp), %ecx
shlq $0x3, %rax
negq %rcx
cmpq %rcx, %rax
je 0x438b5
movq %r13, %r12
movl $0x1, %r13d
xorl %r15d, %r15d
leaq 0x10e800(%rip), %rbx    # 0x151fdd
movq 0x48(%r14), %rax
movq 0x50(%r14), %rdx
subq %rax, %rdx
sarq $0x6, %rdx
cmpq %r15, %rdx
jbe 0x43ed0
movq %r15, %rbp
shlq $0x6, %rbp
movsd (%rax,%rbp), %xmm0
movsd 0x8(%rax,%rbp), %xmm1
movsd 0x10(%rax,%rbp), %xmm2
movq %r12, %rdi
movq %rbx, %rsi
movb $0x3, %al
callq 0x45f0
movq 0x48(%r14), %rax
movq 0x50(%r14), %rdx
subq %rax, %rdx
sarq $0x6, %rdx
cmpq %r15, %rdx
jbe 0x43ed0
movsd (%rax,%rbp), %xmm0
movsd 0x8(%rax,%rbp), %xmm1
movsd 0x10(%rax,%rbp), %xmm2
movq 0x10(%rsp), %rdi
movq %rbx, %rsi
movb $0x3, %al
callq 0x45f0
movq 0x48(%r14), %rax
movq 0x50(%r14), %rdx
subq %rax, %rdx
sarq $0x6, %rdx
cmpq %r15, %rdx
jbe 0x43ed0
movsd (%rax,%rbp), %xmm0
movsd 0x8(%rax,%rbp), %xmm1
movsd 0x10(%rax,%rbp), %xmm2
movq 0x8(%rsp), %rdi
movq %rbx, %rsi
movb $0x3, %al
callq 0x45f0
movl %r13d, %r15d
movq 0x28(%rsp), %rax
subq 0x18(%rsp), %rax
movl 0x30(%rsp), %ecx
leaq (%rcx,%rax,8), %rdx
incl %r13d
cmpq %r15, %rdx
ja 0x437dd
shlq $0x3, %rax
negq %rcx
movq %r12, %r13
cmpq %rcx, %rax
je 0x43b01
xorps %xmm0, %xmm0
cvtsi2sdl 0xec(%rsp), %xmm0
movsd %xmm0, 0x158(%rsp)
xorps %xmm0, %xmm0
cvtsi2sdl 0xe8(%rsp), %xmm0
movsd %xmm0, 0x150(%rsp)
xorps %xmm0, %xmm0
cvtsi2sdl 0xe4(%rsp), %xmm0
movsd %xmm0, 0x148(%rsp)
movl $0x1, %ebp
xorl %ebx, %ebx
leaq 0x248(%rsp), %r15
leaq 0x18(%rsp), %rdi
movq %rbx, %rsi
callq 0xee36
testq %rdx, (%rax)
je 0x439fd
movq 0x48(%r14), %rax
movq 0x50(%r14), %rdx
subq %rax, %rdx
sarq $0x6, %rdx
cmpq %rbx, %rdx
jbe 0x43fa4
movq %r13, %r12
movq %rbx, %rcx
shlq $0x6, %rcx
movsd (%rax,%rcx), %xmm0
movsd 0x8(%rax,%rcx), %xmm1
movsd 0x10(%rax,%rcx), %xmm2
movq %r15, %r13
movq %r15, %rdi
movq 0x1b8(%rsp), %r15
movq %r15, %rsi
callq 0x52eec
movsd 0x248(%rsp), %xmm0
addsd 0x158(%rsp), %xmm0
cvtsd2ss %xmm0, %xmm0
movsd 0x250(%rsp), %xmm1
addsd 0x150(%rsp), %xmm1
cvtsd2ss %xmm1, %xmm1
movsd 0x258(%rsp), %xmm2
addsd 0x148(%rsp), %xmm2
cvtsd2ss %xmm2, %xmm2
cvtss2sd %xmm0, %xmm0
cvtss2sd %xmm1, %xmm1
cvtss2sd %xmm2, %xmm2
leaq 0x230(%rsp), %rdi
movq %r15, %rsi
callq 0x52d94
movsd 0x230(%rsp), %xmm0
movsd 0x238(%rsp), %xmm1
movsd 0x240(%rsp), %xmm2
movq 0x10(%rsp), %rdi
leaq 0x10e5ed(%rip), %rsi    # 0x151fdd
movb $0x3, %al
callq 0x45f0
movq %r13, %r15
movq %r12, %r13
leaq 0x1e0(%rsp), %rdi
movq %rbx, %rsi
callq 0xee36
testq %rdx, (%rax)
je 0x43ae2
movq 0x48(%r14), %rax
movq 0x50(%r14), %rdx
subq %rax, %rdx
sarq $0x6, %rdx
cmpq %rbx, %rdx
jbe 0x43f93
shlq $0x6, %rbx
movsd (%rax,%rbx), %xmm0
movsd 0x8(%rax,%rbx), %xmm1
movsd 0x10(%rax,%rbx), %xmm2
movq %r15, %rdi
movq 0x1b8(%rsp), %rbx
movq %rbx, %rsi
callq 0x52eec
movsd 0x248(%rsp), %xmm0
addsd 0x158(%rsp), %xmm0
cvtsd2ss %xmm0, %xmm0
movsd 0x250(%rsp), %xmm1
addsd 0x150(%rsp), %xmm1
cvtsd2ss %xmm1, %xmm1
movsd 0x258(%rsp), %xmm2
addsd 0x148(%rsp), %xmm2
cvtsd2ss %xmm2, %xmm2
cvtss2sd %xmm0, %xmm0
cvtss2sd %xmm1, %xmm1
cvtss2sd %xmm2, %xmm2
leaq 0x230(%rsp), %rdi
movq %rbx, %rsi
callq 0x52d94
movsd 0x230(%rsp), %xmm0
movsd 0x238(%rsp), %xmm1
movsd 0x240(%rsp), %xmm2
movq 0x8(%rsp), %rdi
leaq 0x10e502(%rip), %rsi    # 0x151fdd
movb $0x3, %al
callq 0x45f0
movl %ebp, %ebx
movq 0x28(%rsp), %rax
subq 0x18(%rsp), %rax
movl 0x30(%rsp), %ecx
leaq (%rcx,%rax,8), %rax
incl %ebp
cmpq %rbx, %rax
ja 0x4390c
movq 0x168(%rsp), %rdx
subq 0x160(%rsp), %rdx
shrq $0x2, %rdx
leal (%rdx,%rdx,2), %ecx
leaq 0x10e2af(%rip), %rsi    # 0x151dce
movq %r13, %rdi
xorl %eax, %eax
callq 0x45f0
movq 0x160(%rsp), %rax
cmpq %rax, 0x168(%rsp)
je 0x43b9c
movl $0x1, %ebp
leaq 0x10e294(%rip), %rbx    # 0x151ddb
xorl %esi, %esi
movq 0x1c0(%rsp), %rcx
movq 0x1c8(%rsp), %rdx
subq %rcx, %rdx
sarq $0x2, %rdx
cmpq %rsi, %rdx
jbe 0x43f36
movl (%rax,%rsi,4), %edx
movl (%rcx,%rsi,4), %ecx
movq %r13, %rdi
movq %rbx, %rsi
xorl %eax, %eax
callq 0x45f0
movl %ebp, %esi
movq 0x160(%rsp), %rax
movq 0x168(%rsp), %rcx
subq %rax, %rcx
sarq $0x2, %rcx
incl %ebp
cmpq %rsi, %rcx
ja 0x43b49
movq 0x128(%rsp), %rdx
subq 0x120(%rsp), %rdx
shrq $0x2, %rdx
leal (%rdx,%rdx,2), %ecx
leaq 0x10e214(%rip), %rsi    # 0x151dce
movq 0x10(%rsp), %rdi
xorl %eax, %eax
callq 0x45f0
movq 0x120(%rsp), %rax
cmpq %rax, 0x128(%rsp)
je 0x43c3b
movl $0x1, %ebp
leaq 0x10e1f7(%rip), %rbx    # 0x151ddb
xorl %esi, %esi
movq 0x1a0(%rsp), %rcx
movq 0x1a8(%rsp), %rdx
subq %rcx, %rdx
sarq $0x2, %rdx
cmpq %rsi, %rdx
jbe 0x43f44
movl (%rax,%rsi,4), %edx
movl (%rcx,%rsi,4), %ecx
movq 0x10(%rsp), %rdi
movq %rbx, %rsi
xorl %eax, %eax
callq 0x45f0
movl %ebp, %esi
movq 0x120(%rsp), %rax
movq 0x128(%rsp), %rcx
subq %rax, %rcx
sarq $0x2, %rcx
incl %ebp
cmpq %rsi, %rcx
ja 0x43be6
movq 0x108(%rsp), %rdx
subq 0x100(%rsp), %rdx
shrq $0x2, %rdx
leal (%rdx,%rdx,2), %ecx
leaq 0x10e175(%rip), %rsi    # 0x151dce
movq 0x8(%rsp), %rdi
xorl %eax, %eax
callq 0x45f0
movq 0x100(%rsp), %rax
cmpq %rax, 0x108(%rsp)
je 0x43cda
movl $0x1, %ebp
leaq 0x10e158(%rip), %rbx    # 0x151ddb
xorl %esi, %esi
movq 0x180(%rsp), %rcx
movq 0x188(%rsp), %rdx
subq %rcx, %rdx
sarq $0x2, %rdx
cmpq %rsi, %rdx
jbe 0x43f52
movl (%rax,%rsi,4), %edx
movl (%rcx,%rsi,4), %ecx
movq 0x8(%rsp), %rdi
movq %rbx, %rsi
xorl %eax, %eax
callq 0x45f0
movl %ebp, %esi
movq 0x100(%rsp), %rax
movq 0x108(%rsp), %rcx
subq %rax, %rcx
sarq $0x2, %rcx
incl %ebp
cmpq %rsi, %rcx
ja 0x43c85
movq %r13, %rdi
callq 0x4450
movq 0x10(%rsp), %rdi
callq 0x4450
movq 0x8(%rsp), %rdi
callq 0x4450
movq 0xf0(%rsp), %rdi
callq 0x4570
movq 0x180(%rsp), %rdi
testq %rdi, %rdi
je 0x43d20
movq 0x190(%rsp), %rsi
subq %rdi, %rsi
callq 0x4470
movq 0x100(%rsp), %rdi
testq %rdi, %rdi
leaq 0x90(%rsp), %rbx
leaq 0x70(%rsp), %r14
leaq 0x50(%rsp), %r15
leaq 0x218(%rsp), %r12
je 0x43d57
movq 0x110(%rsp), %rsi
subq %rdi, %rsi
callq 0x4470
movq 0x1a0(%rsp), %rdi
testq %rdi, %rdi
je 0x43d74
movq 0x1b0(%rsp), %rsi
subq %rdi, %rsi
callq 0x4470
movq 0x120(%rsp), %rdi
testq %rdi, %rdi
je 0x43d91
movq 0x130(%rsp), %rsi
subq %rdi, %rsi
callq 0x4470
movq 0x1c0(%rsp), %rdi
testq %rdi, %rdi
je 0x43dae
movq 0x1d0(%rsp), %rsi
subq %rdi, %rsi
callq 0x4470
movq 0x160(%rsp), %rdi
testq %rdi, %rdi
je 0x43dcb
movq 0x170(%rsp), %rsi
subq %rdi, %rsi
callq 0x4470
movq 0x208(%rsp), %rdi
cmpq %r12, %rdi
je 0x43de8
movq 0x218(%rsp), %rsi
incq %rsi
callq 0x4470
movq 0xa0(%rsp), %rdi
leaq 0xb0(%rsp), %rax
cmpq %rax, %rdi
je 0x43e0d
movq 0xb0(%rsp), %rsi
incq %rsi
callq 0x4470
movq 0xc0(%rsp), %rdi
leaq 0xd0(%rsp), %rax
cmpq %rax, %rdi
je 0x43e32
movq 0xd0(%rsp), %rsi
incq %rsi
callq 0x4470
leaq 0x260(%rsp), %rdi
callq 0x48bbc
movq 0x1e0(%rsp), %rdi
testq %rdi, %rdi
je 0x43e5c
movq 0x200(%rsp), %rsi
subq %rdi, %rsi
callq 0x4470
movq 0x18(%rsp), %rdi
testq %rdi, %rdi
je 0x43e73
movq 0x38(%rsp), %rsi
subq %rdi, %rsi
callq 0x4470
movq 0x40(%rsp), %rdi
cmpq %r15, %rdi
je 0x43e8a
movq 0x50(%rsp), %rsi
incq %rsi
callq 0x4470
movq 0x60(%rsp), %rdi
cmpq %r14, %rdi
je 0x43ea1
movq 0x70(%rsp), %rsi
incq %rsi
callq 0x4470
movq 0x80(%rsp), %rdi
cmpq %rbx, %rdi
je 0x43ebe
movq 0x90(%rsp), %rsi
incq %rsi
callq 0x4470
addq $0x278, %rsp            # imm = 0x278
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x10981e(%rip), %rdi    # 0x14d6f5
movq %r15, %rsi
xorl %eax, %eax
callq 0x4630
leaq 0x10980d(%rip), %rdi    # 0x14d6f5
movq %r13, %rsi
xorl %eax, %eax
callq 0x4630
leaq 0x1097fc(%rip), %rdi    # 0x14d6f5
movq %r12, %rsi
xorl %eax, %eax
callq 0x4630
leaq 0x1097eb(%rip), %rdi    # 0x14d6f5
movq %r13, %rsi
xorl %eax, %eax
callq 0x4630
leaq 0x1097da(%rip), %rdi    # 0x14d6f5
movq %r13, %rsi
xorl %eax, %eax
callq 0x4630
leaq 0x1097c9(%rip), %rdi    # 0x14d6f5
movq %r13, %rsi
xorl %eax, %eax
callq 0x4630
leaq 0x1097b8(%rip), %rdi    # 0x14d6f5
xorl %eax, %eax
callq 0x4630
leaq 0x1097aa(%rip), %rdi    # 0x14d6f5
xorl %eax, %eax
callq 0x4630
leaq 0x10979c(%rip), %rdi    # 0x14d6f5
xorl %eax, %eax
callq 0x4630
leaq 0x10978e(%rip), %rdi    # 0x14d6f5
movq %r15, %rsi
xorl %eax, %eax
callq 0x4630
leaq 0x10977d(%rip), %rdi    # 0x14d6f5
movq %r12, %rsi
xorl %eax, %eax
callq 0x4630
leaq 0x10976c(%rip), %rdi    # 0x14d6f5
movq %r12, %rsi
xorl %eax, %eax
callq 0x4630
leaq 0x10975b(%rip), %rdi    # 0x14d6f5
movq %rbx, %rsi
xorl %eax, %eax
callq 0x4630
leaq 0x10974a(%rip), %rdi    # 0x14d6f5
movq %rbx, %rsi
xorl %eax, %eax
callq 0x4630
leaq 0x109739(%rip), %rdi    # 0x14d6f5
movq %r12, %rsi
xorl %eax, %eax
callq 0x4630
jmp 0x44138
jmp 0x44138
movq %rbx, %r14
movq %rax, %rbx
jmp 0x44039
movq %rbx, %r14
movq %rax, %rbx
jmp 0x44077
jmp 0x44179
jmp 0x44179
movq %rax, %rbx
jmp 0x442c7
movq %rax, %rbx
jmp 0x4431f
movq %rax, %rbx
jmp 0x44336
movq %rax, %rbx
jmp 0x44353
jmp 0x44195
movq %rbx, %r14
movq %rax, %rbx
leaq 0x170(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x44039
movq 0x170(%rsp), %rsi
incq %rsi
callq 0x4470
leaq 0x90(%rsp), %r12
leaq 0x70(%rsp), %r13
leaq 0x50(%rsp), %rbp
jmp 0x4428d
movq %rbx, %r14
movq %rax, %rbx
leaq 0x218(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x44077
movq 0x218(%rsp), %rsi
incq %rsi
callq 0x4470
leaq 0x90(%rsp), %r12
leaq 0x70(%rsp), %r13
leaq 0x50(%rsp), %rbp
jmp 0x442aa
movq %rax, %rbx
leaq 0xb0(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x4417c
movq 0xb0(%rsp), %rsi
incq %rsi
callq 0x4470
jmp 0x4417c
movq %rax, %rbx
movq 0x18(%rsp), %rdi
cmpq %r15, %rdi
je 0x4431f
movq 0x28(%rsp), %rsi
jmp 0x44317
movq %rax, %rbx
movq 0x18(%rsp), %rdi
cmpq %r15, %rdi
je 0x44336
movq 0x28(%rsp), %rsi
jmp 0x4432e
movq %rax, %rbx
leaq 0x28(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x44353
movq 0x28(%rsp), %rsi
jmp 0x4434b
jmp 0x44179
jmp 0x44179
jmp 0x44179
jmp 0x44179
jmp 0x44195
jmp 0x44195
jmp 0x44195
jmp 0x44195
jmp 0x44195
jmp 0x44195
jmp 0x44179
jmp 0x44179
jmp 0x44179
jmp 0x44179
jmp 0x44195
jmp 0x44195
jmp 0x44195
jmp 0x44195
jmp 0x44179
jmp 0x44138
movq %rax, %rbx
leaq 0x90(%rsp), %r12
leaq 0x70(%rsp), %r13
leaq 0x50(%rsp), %rbp
leaq 0xd0(%rsp), %r14
leaq 0xb0(%rsp), %r15
jmp 0x44268
jmp 0x44179
movq %rax, %rbx
jmp 0x44184
jmp 0x44195
jmp 0x44195
jmp 0x44195
jmp 0x44195
jmp 0x44195
jmp 0x44195
jmp 0x44195
jmp 0x44195
movq %rax, %rbx
leaq 0x90(%rsp), %r12
leaq 0x70(%rsp), %r13
leaq 0x50(%rsp), %rbp
jmp 0x442c7
jmp 0x44195
movq %rax, %rbx
leaq 0x90(%rsp), %r12
leaq 0x70(%rsp), %r13
leaq 0x50(%rsp), %rbp
leaq 0xd0(%rsp), %r14
leaq 0xb0(%rsp), %r15
movq 0x180(%rsp), %rdi
testq %rdi, %rdi
je 0x441d7
movq 0x190(%rsp), %rsi
subq %rdi, %rsi
callq 0x4470
movq 0x100(%rsp), %rdi
testq %rdi, %rdi
je 0x441f4
movq 0x110(%rsp), %rsi
subq %rdi, %rsi
callq 0x4470
movq 0x1a0(%rsp), %rdi
testq %rdi, %rdi
je 0x44211
movq 0x1b0(%rsp), %rsi
subq %rdi, %rsi
callq 0x4470
movq 0x120(%rsp), %rdi
testq %rdi, %rdi
je 0x4422e
movq 0x130(%rsp), %rsi
subq %rdi, %rsi
callq 0x4470
movq 0x1c0(%rsp), %rdi
testq %rdi, %rdi
je 0x4424b
movq 0x1d0(%rsp), %rsi
subq %rdi, %rsi
callq 0x4470
movq 0x160(%rsp), %rdi
testq %rdi, %rdi
je 0x44268
movq 0x170(%rsp), %rsi
subq %rdi, %rsi
callq 0x4470
movq 0x208(%rsp), %rdi
leaq 0x218(%rsp), %rax
cmpq %rax, %rdi
je 0x4428d
movq 0x218(%rsp), %rsi
incq %rsi
callq 0x4470
movq 0xa0(%rsp), %rdi
cmpq %r15, %rdi
je 0x442aa
movq 0xb0(%rsp), %rsi
incq %rsi
callq 0x4470
movq 0xc0(%rsp), %rdi
cmpq %r14, %rdi
je 0x442c7
movq 0xd0(%rsp), %rsi
incq %rsi
callq 0x4470
leaq 0x260(%rsp), %rdi
callq 0x48bbc
movq 0x1e0(%rsp), %rdi
testq %rdi, %rdi
je 0x442f1
movq 0x200(%rsp), %rsi
subq %rdi, %rsi
callq 0x4470
movq 0x18(%rsp), %rdi
testq %rdi, %rdi
je 0x44308
movq 0x38(%rsp), %rsi
subq %rdi, %rsi
callq 0x4470
movq 0x40(%rsp), %rdi
cmpq %rbp, %rdi
je 0x4431f
movq 0x50(%rsp), %rsi
incq %rsi
callq 0x4470
movq 0x60(%rsp), %rdi
cmpq %r13, %rdi
je 0x44336
movq 0x70(%rsp), %rsi
incq %rsi
callq 0x4470
movq 0x80(%rsp), %rdi
cmpq %r12, %rdi
je 0x44353
movq 0x90(%rsp), %rsi
incq %rsi
callq 0x4470
movq %rbx, %rdi
callq 0x4780