// File: Luthaf[P]zeopp/net.cc
// Function: recursive_find_loops(int, int, int, int, XYZ, std::vector<CONNECTION, std::allocator<CONNECTION>>*, std::vector<MOLECULE, std::allocator<MOLECULE>>*, std::vector<bool, std::allocator<bool>>*, std::vector<int, std::allocator<int>>*, std::vector<int, std::allocator<int>>*, std::vector<int, std::allocator<int>>*, std::vector<XYZ, std::allocator<XYZ>>*, std::vector<bool, std::allocator<bool>>*, std::vector<int, std::allocator<int>>*, std::vector<int, std::allocator<int>>*, std::vector<int, std::allocator<int>>*, std::vector<XYZ, std::allocator<XYZ>>*, std::vector<int, std::allocator<int>>*, std::vector<XYZ, std::allocator<XYZ>>*, int)
bool recursive_find_loops(int this_v, int a, int b, int c, XYZ xyz, vector<CONNECTION> *two_way_connections, vector<MOLECULE> *assembled_molecules, vector<bool> *edge_traversed, vector<int> *vertex_visit_a, vector<int> *vertex_visit_b, vector<int> *vertex_visit_c, vector<XYZ> *vertex_visit_xyz, vector<bool> *vertex_visited, vector<int> *loops_a, vector<int> *loops_b, vector<int> *loops_c, vector<XYZ> *loops_xyz, vector<int> *unit_cell_vector_IDs, vector<XYZ> *unit_cell_vectors, int dimensionality) {
  bool verbose = false;
  //visit this vertex
  if(vertex_visited->at(this_v)) {
    //previously visited this vertex - have we made a loop?
    int old_a = vertex_visit_a->at(this_v);
    int old_b = vertex_visit_b->at(this_v);
    int old_c = vertex_visit_c->at(this_v);
    XYZ old_xyz = vertex_visit_xyz->at(this_v);
    int period_a = a-old_a;
    int period_b = b-old_b;
    int period_c = c-old_c;
    XYZ period_xyz = xyz-old_xyz;
    if(period_a!=0 || period_b!=0 || period_c!=0) { //it's a loop!
if(verbose) printf("DEBUG: a loop was found with periodicity (%d %d %d) and shift %.3f %.3f %.3f\n", period_a, period_b, period_c, period_xyz.x, period_xyz.y, period_xyz.z);
      bool found_all_uc_vectors = false;
      //is this new loop unique?
      if(loop_is_unique(period_a, period_b, period_c, loops_a, loops_b, loops_c)) {
if(verbose) printf("DEBUG: new loop is unique, testing for unit cell vector assignment ... \n");
        //does this new loop allow us to define a unit cell vector?
        found_all_uc_vectors = try_unit_cell_vector_assign(period_a, period_b, period_c, period_xyz, loops_a, loops_b, loops_c, loops_xyz, unit_cell_vector_IDs, unit_cell_vectors, dimensionality);
        //push loop
if(verbose) printf("DEBUG: ... pushing the new loop\n");
        loops_a->push_back(period_a);
        loops_b->push_back(period_b);
        loops_c->push_back(period_c);
        loops_xyz->push_back(period_xyz);
      } else {
if(verbose) printf("DEBUG: new loop is a duplicate\n");
      }
      return found_all_uc_vectors; //quit the recursive method here - we have a loop, time to try and find some other loops
    } else {
      //else do nothing - it's not a loop, so just proceed with journey from this vertex
    }
  } else {
    //haven't previously visited this vertex; visit it
    vertex_visited->at(this_v) = true;
    vertex_visit_a->at(this_v) = a;
    vertex_visit_b->at(this_v) = b;
    vertex_visit_c->at(this_v) = c;
    vertex_visit_xyz->at(this_v) = xyz;
  }
  //at this point, we have either completed a loop, or visited a vertex that did not complete a loop; only if a loop was found do we quit out - else proceed to recursively traverse other connections
  bool found_all_uc_vectors = false; //if we find them all during this run, terminate early
  int num_c = two_way_connections->size();
  for(int i=0; i<num_c && !found_all_uc_vectors; i++) {
    if(!edge_traversed->at(i)) {
      //only traverse new edges
      CONNECTION con = two_way_connections->at(i);
      if(con.v1==this_v) {
        //traverse this edge
        edge_traversed->at(i) = true;
        //don't visit the vertex - that will happen in next call
        int new_a = a+con.a;
        int new_b = b+con.b;
        int new_c = c+con.c;
        int a_edge_index = con.e1;
        int b_edge_index = con.e2;
        int a_vertex_index = con.v1;
        int b_vertex_index = con.v2;
        MOLECULE a_mol = assembled_molecules->at(a_vertex_index);
        int a_site_index = a_mol.permutation.at(a_edge_index);
        int a_atom_index = a_mol.sites.at(a_site_index);
        XYZ a_site = a_mol.atoms_xyz.at(a_atom_index);
        MOLECULE b_mol = assembled_molecules->at(b_vertex_index);
        int b_site_index = b_mol.permutation.at(b_edge_index);
        int b_atom_index = b_mol.sites.at(b_site_index);
        XYZ b_site = b_mol.atoms_xyz.at(b_atom_index);
        XYZ shift = b_site-a_site;
        XYZ new_xyz = xyz-shift;
        found_all_uc_vectors = recursive_find_loops(con.v2, new_a, new_b, new_c, new_xyz, two_way_connections, assembled_molecules, edge_traversed, vertex_visit_a, vertex_visit_b, vertex_visit_c, vertex_visit_xyz, vertex_visited, loops_a, loops_b, loops_c, loops_xyz, unit_cell_vector_IDs, unit_cell_vectors, dimensionality);
      } else if(con.v2==this_v) {
        //traverse this edge, pointing the other way
        edge_traversed->at(i) = true;
        //don't visit the vertex - that will happen in next call
        int new_a = a-con.a;
        int new_b = b-con.b;
        int new_c = c-con.c;
        int a_edge_index = con.e1;
        int b_edge_index = con.e2;
        int a_vertex_index = con.v1;
        int b_vertex_index = con.v2;
        MOLECULE a_mol = assembled_molecules->at(a_vertex_index);
        int a_site_index = a_mol.permutation.at(a_edge_index);
        int a_atom_index = a_mol.sites.at(a_site_index);
        XYZ a_site = a_mol.atoms_xyz.at(a_atom_index);
        MOLECULE b_mol = assembled_molecules->at(b_vertex_index);
        int b_site_index = b_mol.permutation.at(b_edge_index);
        int b_atom_index = b_mol.sites.at(b_site_index);
        XYZ b_site = b_mol.atoms_xyz.at(b_atom_index);
        XYZ shift = b_site-a_site;
        XYZ new_xyz = xyz+shift;
        found_all_uc_vectors = recursive_find_loops(con.v1, new_a, new_b, new_c, new_xyz, two_way_connections, assembled_molecules, edge_traversed, vertex_visit_a, vertex_visit_b, vertex_visit_c, vertex_visit_xyz, vertex_visited, loops_a, loops_b, loops_c, loops_xyz, unit_cell_vector_IDs, unit_cell_vectors, dimensionality);
      }
    }
  }
  return found_all_uc_vectors;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x6d8, %rsp            # imm = 0x6D8
movl 0x88(%rbp), %eax
movq 0x80(%rbp), %rax
movq 0x78(%rbp), %rax
movq 0x70(%rbp), %rax
movq 0x68(%rbp), %rax
movq 0x60(%rbp), %rax
movq 0x58(%rbp), %rax
movq 0x50(%rbp), %rax
movq 0x48(%rbp), %rax
movq 0x40(%rbp), %rax
movq 0x38(%rbp), %rax
movq 0x30(%rbp), %rax
movq 0x28(%rbp), %rax
leaq 0x10(%rbp), %rax
movq %rax, -0x578(%rbp)
movl %edi, -0x30(%rbp)
movl %esi, -0x34(%rbp)
movl %edx, -0x38(%rbp)
movl %ecx, -0x3c(%rbp)
movq %r8, -0x48(%rbp)
movq %r9, -0x50(%rbp)
movb $0x0, -0x51(%rbp)
movq 0x50(%rbp), %rdi
movslq -0x30(%rbp), %rsi
callq 0xfff0
movq %rax, -0x68(%rbp)
movq %rdx, -0x60(%rbp)
leaq -0x68(%rbp), %rdi
callq 0x101a0
testb $0x1, %al
jne 0x112067
jmp 0x1122c9
movq 0x30(%rbp), %rdi
movslq -0x30(%rbp), %rsi
callq 0x101d0
movl (%rax), %eax
movl %eax, -0x6c(%rbp)
movq 0x38(%rbp), %rdi
movslq -0x30(%rbp), %rsi
callq 0x101d0
movl (%rax), %eax
movl %eax, -0x70(%rbp)
movq 0x40(%rbp), %rdi
movslq -0x30(%rbp), %rsi
callq 0x101d0
movl (%rax), %eax
movl %eax, -0x74(%rbp)
movq 0x48(%rbp), %rdi
movslq -0x30(%rbp), %rsi
callq 0xae5c0
movq -0x578(%rbp), %rsi
movq (%rax), %rcx
movq %rcx, -0x90(%rbp)
movq 0x8(%rax), %rcx
movq %rcx, -0x88(%rbp)
movq 0x10(%rax), %rax
movq %rax, -0x80(%rbp)
movl -0x34(%rbp), %eax
subl -0x6c(%rbp), %eax
movl %eax, -0x94(%rbp)
movl -0x38(%rbp), %eax
subl -0x70(%rbp), %eax
movl %eax, -0x98(%rbp)
movl -0x3c(%rbp), %eax
subl -0x74(%rbp), %eax
movl %eax, -0x9c(%rbp)
leaq -0xb8(%rbp), %rdi
leaq -0x90(%rbp), %rdx
callq 0xeadf0
cmpl $0x0, -0x94(%rbp)
jne 0x112124
cmpl $0x0, -0x98(%rbp)
jne 0x112124
cmpl $0x0, -0x9c(%rbp)
je 0x1122c2
testb $0x1, -0x51(%rbp)
je 0x112162
movl -0x94(%rbp), %esi
movl -0x98(%rbp), %edx
movl -0x9c(%rbp), %ecx
movsd -0xb8(%rbp), %xmm0
movsd -0xb0(%rbp), %xmm1
movsd -0xa8(%rbp), %xmm2
leaq 0xeb1b0(%rip), %rdi     # 0x1fd30b
movb $0x3, %al
callq 0x5070
movb $0x0, -0xb9(%rbp)
movl -0x94(%rbp), %edi
movl -0x98(%rbp), %esi
movl -0x9c(%rbp), %edx
movq 0x58(%rbp), %rcx
movq 0x60(%rbp), %r8
movq 0x68(%rbp), %r9
callq 0x112c40
testb $0x1, %al
jne 0x112195
jmp 0x11229c
testb $0x1, -0x51(%rbp)
je 0x1121a9
leaq 0xeb1b7(%rip), %rdi     # 0x1fd359
movb $0x0, %al
callq 0x5070
movl -0x94(%rbp), %edi
movl -0x98(%rbp), %esi
movl -0x9c(%rbp), %edx
movq -0xb8(%rbp), %rax
movq %rax, -0xd8(%rbp)
movq -0xb0(%rbp), %rax
movq %rax, -0xd0(%rbp)
movq -0xa8(%rbp), %rax
movq %rax, -0xc8(%rbp)
movq 0x58(%rbp), %rcx
movq 0x60(%rbp), %r8
movq 0x68(%rbp), %r9
movq 0x70(%rbp), %rbx
movq 0x78(%rbp), %r11
movq 0x80(%rbp), %r10
movl 0x88(%rbp), %eax
leaq -0xd8(%rbp), %r14
movq (%r14), %r15
movq %r15, (%rsp)
movq 0x8(%r14), %r15
movq %r15, 0x8(%rsp)
movq 0x10(%r14), %r14
movq %r14, 0x10(%rsp)
movq %rbx, 0x18(%rsp)
movq %r11, 0x20(%rsp)
movq %r10, 0x28(%rsp)
movl %eax, 0x30(%rsp)
callq 0x1131a0
andb $0x1, %al
movb %al, -0xb9(%rbp)
testb $0x1, -0x51(%rbp)
je 0x11225a
leaq 0xeb14f(%rip), %rdi     # 0x1fd3a2
movb $0x0, %al
callq 0x5070
movq 0x58(%rbp), %rdi
leaq -0x94(%rbp), %rsi
callq 0xd1b0
movq 0x60(%rbp), %rdi
leaq -0x98(%rbp), %rsi
callq 0xd1b0
movq 0x68(%rbp), %rdi
leaq -0x9c(%rbp), %rsi
callq 0xd1b0
movq 0x70(%rbp), %rdi
leaq -0xb8(%rbp), %rsi
callq 0xafc20
jmp 0x1122b2
testb $0x1, -0x51(%rbp)
je 0x1122b0
leaq 0xeb11a(%rip), %rdi     # 0x1fd3c3
movb $0x0, %al
callq 0x5070
jmp 0x1122b2
movb -0xb9(%rbp), %al
andb $0x1, %al
movb %al, -0x29(%rbp)
jmp 0x112c1d
jmp 0x1122c4
jmp 0x112379
movq 0x50(%rbp), %rdi
movslq -0x30(%rbp), %rsi
callq 0xfff0
movq %rax, -0xe8(%rbp)
movq %rdx, -0xe0(%rbp)
leaq -0xe8(%rbp), %rdi
movl $0x1, %esi
callq 0x10040
movl -0x34(%rbp), %eax
movl %eax, -0x584(%rbp)
movq 0x30(%rbp), %rdi
movslq -0x30(%rbp), %rsi
callq 0x101d0
movl -0x584(%rbp), %ecx
movl %ecx, (%rax)
movl -0x38(%rbp), %eax
movl %eax, -0x580(%rbp)
movq 0x38(%rbp), %rdi
movslq -0x30(%rbp), %rsi
callq 0x101d0
movl -0x580(%rbp), %ecx
movl %ecx, (%rax)
movl -0x3c(%rbp), %eax
movl %eax, -0x57c(%rbp)
movq 0x40(%rbp), %rdi
movslq -0x30(%rbp), %rsi
callq 0x101d0
movl -0x57c(%rbp), %ecx
movl %ecx, (%rax)
movq 0x48(%rbp), %rdi
movslq -0x30(%rbp), %rsi
callq 0xae5c0
movq -0x578(%rbp), %rcx
movq (%rcx), %rdx
movq %rdx, (%rax)
movq 0x8(%rcx), %rdx
movq %rdx, 0x8(%rax)
movq 0x10(%rcx), %rcx
movq %rcx, 0x10(%rax)
movb $0x0, -0xe9(%rbp)
movq -0x48(%rbp), %rdi
callq 0xaf420
movl %eax, -0xf0(%rbp)
movl $0x0, -0xf4(%rbp)
movl -0xf4(%rbp), %ecx
xorl %eax, %eax
cmpl -0xf0(%rbp), %ecx
movb %al, -0x585(%rbp)
jge 0x1123bd
movb -0xe9(%rbp), %al
xorb $-0x1, %al
movb %al, -0x585(%rbp)
movb -0x585(%rbp), %al
testb $0x1, %al
jne 0x1123cc
jmp 0x112c12
movq 0x28(%rbp), %rdi
movslq -0xf4(%rbp), %rsi
callq 0xfff0
movq %rax, -0x108(%rbp)
movq %rdx, -0x100(%rbp)
leaq -0x108(%rbp), %rdi
callq 0x101a0
xorb $-0x1, %al
testb $0x1, %al
jne 0x112401
jmp 0x112bfc
movq -0x48(%rbp), %rdi
movslq -0xf4(%rbp), %rsi
callq 0xaf0e0
movq (%rax), %rcx
movq %rcx, -0x124(%rbp)
movq 0x8(%rax), %rcx
movq %rcx, -0x11c(%rbp)
movq 0x10(%rax), %rcx
movq %rcx, -0x114(%rbp)
movl 0x18(%rax), %eax
movl %eax, -0x10c(%rbp)
movl -0x124(%rbp), %eax
cmpl -0x30(%rbp), %eax
jne 0x11281c
movq 0x28(%rbp), %rdi
movslq -0xf4(%rbp), %rsi
callq 0xfff0
movq %rax, -0x138(%rbp)
movq %rdx, -0x130(%rbp)
leaq -0x138(%rbp), %rdi
movl $0x1, %esi
callq 0x10040
movl -0x34(%rbp), %eax
movl -0x114(%rbp), %ecx
addl %ecx, %eax
movl %eax, -0x13c(%rbp)
movl -0x38(%rbp), %eax
movl -0x110(%rbp), %ecx
addl %ecx, %eax
movl %eax, -0x140(%rbp)
movl -0x3c(%rbp), %eax
movl -0x10c(%rbp), %ecx
addl %ecx, %eax
movl %eax, -0x144(%rbp)
movl -0x11c(%rbp), %eax
movl %eax, -0x148(%rbp)
movl -0x118(%rbp), %eax
movl %eax, -0x14c(%rbp)
movl -0x124(%rbp), %eax
movl %eax, -0x150(%rbp)
movl -0x120(%rbp), %eax
movl %eax, -0x154(%rbp)
movq -0x50(%rbp), %rdi
movslq -0x150(%rbp), %rsi
callq 0xaf120
movq %rax, %rsi
leaq -0x200(%rbp), %rdi
callq 0xaf160
leaq -0x188(%rbp), %rdi
movslq -0x148(%rbp), %rsi
callq 0x101d0
movq %rax, -0x590(%rbp)
jmp 0x112516
movq -0x590(%rbp), %rax
movl (%rax), %eax
movl %eax, -0x204(%rbp)
leaq -0x1b8(%rbp), %rdi
movslq -0x204(%rbp), %rsi
callq 0x101d0
movq %rax, -0x598(%rbp)
jmp 0x112541
movq -0x598(%rbp), %rax
movl (%rax), %eax
movl %eax, -0x218(%rbp)
movslq -0x218(%rbp), %rsi
leaq -0x200(%rbp), %rdi
callq 0xae5c0
movq %rax, -0x5a0(%rbp)
jmp 0x11256c
movq -0x5a0(%rbp), %rax
movq 0x10(%rax), %rcx
movq %rcx, -0x220(%rbp)
movups (%rax), %xmm0
movaps %xmm0, -0x230(%rbp)
movq -0x50(%rbp), %rdi
movslq -0x154(%rbp), %rsi
callq 0xaf120
movq %rax, -0x5a8(%rbp)
jmp 0x1125a1
movq -0x5a8(%rbp), %rsi
leaq -0x2d8(%rbp), %rdi
callq 0xaf160
jmp 0x1125b6
leaq -0x260(%rbp), %rdi
movslq -0x14c(%rbp), %rsi
callq 0x101d0
movq %rax, -0x5b0(%rbp)
jmp 0x1125d2
movq -0x5b0(%rbp), %rax
movl (%rax), %eax
movl %eax, -0x2dc(%rbp)
leaq -0x290(%rbp), %rdi
movslq -0x2dc(%rbp), %rsi
callq 0x101d0
movq %rax, -0x5b8(%rbp)
jmp 0x1125fd
movq -0x5b8(%rbp), %rax
movl (%rax), %eax
movl %eax, -0x2e0(%rbp)
movslq -0x2e0(%rbp), %rsi
leaq -0x2d8(%rbp), %rdi
callq 0xae5c0
movq %rax, -0x5c0(%rbp)
jmp 0x112628
movq -0x5c0(%rbp), %rax
movq 0x10(%rax), %rcx
movq %rcx, -0x2f0(%rbp)
movups (%rax), %xmm0
movaps %xmm0, -0x300(%rbp)
leaq -0x318(%rbp), %rdi
leaq -0x300(%rbp), %rsi
leaq -0x230(%rbp), %rdx
callq 0xeadf0
jmp 0x112660
movq -0x578(%rbp), %rsi
leaq -0x330(%rbp), %rdi
leaq -0x318(%rbp), %rdx
callq 0xeadf0
jmp 0x11267c
movl -0x120(%rbp), %edi
movl -0x13c(%rbp), %esi
movl -0x140(%rbp), %edx
movl -0x144(%rbp), %eax
movl %eax, -0x5c8(%rbp)
movq -0x320(%rbp), %rax
movq %rax, -0x340(%rbp)
movups -0x330(%rbp), %xmm0
movaps %xmm0, -0x350(%rbp)
movq -0x48(%rbp), %r8
movq -0x50(%rbp), %r9
movq 0x28(%rbp), %r10
movq 0x30(%rbp), %r11
movq 0x38(%rbp), %rbx
movq 0x40(%rbp), %r14
movq 0x48(%rbp), %r15
movq 0x50(%rbp), %r12
movq 0x58(%rbp), %r13
movq 0x60(%rbp), %rax
movq %rax, -0x5d0(%rbp)
movq 0x68(%rbp), %rax
movq %rax, -0x5d8(%rbp)
movq 0x70(%rbp), %rax
movq %rax, -0x5e0(%rbp)
movq 0x78(%rbp), %rax
movq %rax, -0x5e8(%rbp)
movq 0x80(%rbp), %rax
movq %rax, -0x5f0(%rbp)
movl 0x88(%rbp), %eax
movl %eax, -0x5f4(%rbp)
movq -0x340(%rbp), %rcx
movq %rsp, %rax
movq %rax, -0x600(%rbp)
movq %rcx, 0x10(%rax)
movl -0x5f4(%rbp), %ecx
movaps -0x350(%rbp), %xmm0
movups %xmm0, (%rax)
movl %ecx, 0x78(%rax)
movq -0x5f0(%rbp), %rcx
movq %rcx, 0x70(%rax)
movq -0x5e8(%rbp), %rcx
movq %rcx, 0x68(%rax)
movq -0x5e0(%rbp), %rcx
movq %rcx, 0x60(%rax)
movq -0x5d8(%rbp), %rcx
movq %rcx, 0x58(%rax)
movq -0x5d0(%rbp), %rcx
movq %rcx, 0x50(%rax)
movl -0x5c8(%rbp), %ecx
movq %r13, 0x48(%rax)
movq %r12, 0x40(%rax)
movq %r15, 0x38(%rax)
movq %r14, 0x30(%rax)
movq %rbx, 0x28(%rax)
movq %r11, 0x20(%rax)
movq %r10, 0x18(%rax)
callq 0x111fd0
movb %al, -0x5c1(%rbp)
jmp 0x1127ae
movb -0x5c1(%rbp), %al
andb $0x1, %al
movb %al, -0xe9(%rbp)
leaq -0x2d8(%rbp), %rdi
callq 0xaf390
leaq -0x200(%rbp), %rdi
callq 0xaf390
jmp 0x112bfa
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x210(%rbp)
movl %eax, -0x214(%rbp)
jmp 0x11280b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x210(%rbp)
movl %eax, -0x214(%rbp)
leaq -0x2d8(%rbp), %rdi
callq 0xaf390
leaq -0x200(%rbp), %rdi
callq 0xaf390
jmp 0x112c34
movl -0x120(%rbp), %eax
cmpl -0x30(%rbp), %eax
jne 0x112bf8
movq 0x28(%rbp), %rdi
movslq -0xf4(%rbp), %rsi
callq 0xfff0
movq %rax, -0x360(%rbp)
movq %rdx, -0x358(%rbp)
leaq -0x360(%rbp), %rdi
movl $0x1, %esi
callq 0x10040
movl -0x34(%rbp), %eax
movl -0x114(%rbp), %ecx
subl %ecx, %eax
movl %eax, -0x364(%rbp)
movl -0x38(%rbp), %eax
movl -0x110(%rbp), %ecx
subl %ecx, %eax
movl %eax, -0x368(%rbp)
movl -0x3c(%rbp), %eax
movl -0x10c(%rbp), %ecx
subl %ecx, %eax
movl %eax, -0x36c(%rbp)
movl -0x11c(%rbp), %eax
movl %eax, -0x370(%rbp)
movl -0x118(%rbp), %eax
movl %eax, -0x374(%rbp)
movl -0x124(%rbp), %eax
movl %eax, -0x378(%rbp)
movl -0x120(%rbp), %eax
movl %eax, -0x37c(%rbp)
movq -0x50(%rbp), %rdi
movslq -0x378(%rbp), %rsi
callq 0xaf120
movq %rax, %rsi
leaq -0x428(%rbp), %rdi
callq 0xaf160
leaq -0x3b0(%rbp), %rdi
movslq -0x370(%rbp), %rsi
callq 0x101d0
movq %rax, -0x608(%rbp)
jmp 0x1128f8
movq -0x608(%rbp), %rax
movl (%rax), %eax
movl %eax, -0x42c(%rbp)
leaq -0x3e0(%rbp), %rdi
movslq -0x42c(%rbp), %rsi
callq 0x101d0
movq %rax, -0x610(%rbp)
jmp 0x112923
movq -0x610(%rbp), %rax
movl (%rax), %eax
movl %eax, -0x430(%rbp)
movslq -0x430(%rbp), %rsi
leaq -0x428(%rbp), %rdi
callq 0xae5c0
movq %rax, -0x618(%rbp)
jmp 0x11294e
movq -0x618(%rbp), %rax
movq 0x10(%rax), %rcx
movq %rcx, -0x440(%rbp)
movups (%rax), %xmm0
movaps %xmm0, -0x450(%rbp)
movq -0x50(%rbp), %rdi
movslq -0x37c(%rbp), %rsi
callq 0xaf120
movq %rax, -0x620(%rbp)
jmp 0x112983
movq -0x620(%rbp), %rsi
leaq -0x4f8(%rbp), %rdi
callq 0xaf160
jmp 0x112998
leaq -0x480(%rbp), %rdi
movslq -0x374(%rbp), %rsi
callq 0x101d0
movq %rax, -0x628(%rbp)
jmp 0x1129b4
movq -0x628(%rbp), %rax
movl (%rax), %eax
movl %eax, -0x4fc(%rbp)
leaq -0x4b0(%rbp), %rdi
movslq -0x4fc(%rbp), %rsi
callq 0x101d0
movq %rax, -0x630(%rbp)
jmp 0x1129df
movq -0x630(%rbp), %rax
movl (%rax), %eax
movl %eax, -0x500(%rbp)
movslq -0x500(%rbp), %rsi
leaq -0x4f8(%rbp), %rdi
callq 0xae5c0
movq %rax, -0x638(%rbp)
jmp 0x112a0a
movq -0x638(%rbp), %rax
movq 0x10(%rax), %rcx
movq %rcx, -0x510(%rbp)
movups (%rax), %xmm0
movaps %xmm0, -0x520(%rbp)
leaq -0x538(%rbp), %rdi
leaq -0x520(%rbp), %rsi
leaq -0x450(%rbp), %rdx
callq 0xeadf0
jmp 0x112a42
movq -0x578(%rbp), %rsi
leaq -0x550(%rbp), %rdi
leaq -0x538(%rbp), %rdx
callq 0xeae50
jmp 0x112a5e
movl -0x124(%rbp), %edi
movl -0x364(%rbp), %esi
movl -0x368(%rbp), %edx
movl -0x36c(%rbp), %eax
movl %eax, -0x640(%rbp)
movq -0x540(%rbp), %rax
movq %rax, -0x560(%rbp)
movups -0x550(%rbp), %xmm0
movaps %xmm0, -0x570(%rbp)
movq -0x48(%rbp), %r8
movq -0x50(%rbp), %r9
movq 0x28(%rbp), %r10
movq 0x30(%rbp), %r11
movq 0x38(%rbp), %rbx
movq 0x40(%rbp), %r14
movq 0x48(%rbp), %r15
movq 0x50(%rbp), %r12
movq 0x58(%rbp), %r13
movq 0x60(%rbp), %rax
movq %rax, -0x648(%rbp)
movq 0x68(%rbp), %rax
movq %rax, -0x650(%rbp)
movq 0x70(%rbp), %rax
movq %rax, -0x658(%rbp)
movq 0x78(%rbp), %rax
movq %rax, -0x660(%rbp)
movq 0x80(%rbp), %rax
movq %rax, -0x668(%rbp)
movl 0x88(%rbp), %eax
movl %eax, -0x66c(%rbp)
movq -0x560(%rbp), %rcx
movq %rsp, %rax
movq %rax, -0x678(%rbp)
movq %rcx, 0x10(%rax)
movl -0x66c(%rbp), %ecx
movaps -0x570(%rbp), %xmm0
movups %xmm0, (%rax)
movl %ecx, 0x78(%rax)
movq -0x668(%rbp), %rcx
movq %rcx, 0x70(%rax)
movq -0x660(%rbp), %rcx
movq %rcx, 0x68(%rax)
movq -0x658(%rbp), %rcx
movq %rcx, 0x60(%rax)
movq -0x650(%rbp), %rcx
movq %rcx, 0x58(%rax)
movq -0x648(%rbp), %rcx
movq %rcx, 0x50(%rax)
movl -0x640(%rbp), %ecx
movq %r13, 0x48(%rax)
movq %r12, 0x40(%rax)
movq %r15, 0x38(%rax)
movq %r14, 0x30(%rax)
movq %rbx, 0x28(%rax)
movq %r11, 0x20(%rax)
movq %r10, 0x18(%rax)
callq 0x111fd0
movb %al, -0x639(%rbp)
jmp 0x112b90
movb -0x639(%rbp), %al
andb $0x1, %al
movb %al, -0xe9(%rbp)
leaq -0x4f8(%rbp), %rdi
callq 0xaf390
leaq -0x428(%rbp), %rdi
callq 0xaf390
jmp 0x112bf8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x210(%rbp)
movl %eax, -0x214(%rbp)
jmp 0x112bea
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x210(%rbp)
movl %eax, -0x214(%rbp)
leaq -0x4f8(%rbp), %rdi
callq 0xaf390
leaq -0x428(%rbp), %rdi
callq 0xaf390
jmp 0x112c34
jmp 0x112bfa
jmp 0x112bfc
jmp 0x112bfe
movl -0xf4(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xf4(%rbp)
jmp 0x112399
movb -0xe9(%rbp), %al
andb $0x1, %al
movb %al, -0x29(%rbp)
movb -0x29(%rbp), %al
andb $0x1, %al
addq $0x6d8, %rsp            # imm = 0x6D8
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq -0x210(%rbp), %rdi
callq 0x58f0