// File: /workspace/github_cpp_makefile_star2_O2/temelmertcan[P]multgen/src/wallace.cpp
// Function: create_4to2tree(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>**, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, int, int, int, int, bool, bool, std::queue<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::deque<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>>>&, int&, bool**&)
void create_4to2tree (string** pp_matrix,
		      string final_stage_adder,
		      int pp_dim1,
		      int pp_dim2,
		      int out_size,
		      int shift_amount,
		      bool create_fin_adder,
		      bool signed_mult,
		      std::queue<string>& verilog,
		      int& adder_size,
		      bool**& zeros_in_output){

  std::queue<string>* main_queue = new std::queue<string>[out_size];
  std::queue<string>* temp_queue = new std::queue<string>[out_size];

  // create the initial queue
  //for (int i = pp_dim1-1; i >= 0; i--)
  for (int i = 0; i < pp_dim1; i++)
    for (int j = 0; j < pp_dim2 && j< out_size; j++)
      if (pp_matrix[i][j] != "")
        main_queue[j].push (pp_matrix[i][j]);

  int cnt = 0;
  int stage_cnt = 0;

  struct four2twoi {
    four2twoi(string var1,string var2,string var3,string var4,string var5,int col,int maxsize){
      in1 = new string[maxsize];
      in2 = new string[maxsize];
      in3 = new string[maxsize];
      in4 = new string[maxsize];
      in1[0]=var1;
      in2[0]=var2;
      in3[0]=var3;
      in4[0]=var4;
      cin=var5;
      this->col = col;
      this->size=1;
    }
    ~four2twoi(){
      delete in1; delete in2; delete in3; delete in4;
    }
    void add(string var1,string var2,string var3,string var4){
      in1[size] = var1;
      in2[size] = var2;
      in3[size] = var3;
      in4[size] = var4;
      size++;
      
    }
    int col = 0; // starting col num.
    int size = 0;
    string cin = "";
    string *in1,*in2,*in3,*in4;  
   };

  int max_q_size;
  //print_main_queue(main_queue, out_size);

  while ((max_q_size = get_max_queue_size(main_queue, out_size)) > 2) {

    
    // Step 1: sum the stuff in main_queue with fa/ha

    int start = -1;
    for (int j = 0; j < out_size; j++){
      std::queue<string>& cur = main_queue[j];
      if (cur.size()>=(max_q_size>5?5:max_q_size>4?4:3)){
	start = j; 
	break;
      }
    }
    if (start < 0) // should never happen bcs of the while condition.
      break;

    // !!
    //cout<< ("// 4to2 compressor tree Stage " + to_string(stage_cnt)) << endl;
    
    // !!
    //cout << "Starting column is " << start << endl;

    std::queue<four2twoi*> avl_four2twoi;
    std::queue<four2twoi*> used_four2twoi;
    
    
    
    verilog.push("");
    verilog.push("// 4to2 compressor tree Stage " + to_string(++stage_cnt));
    for (int j = start; j < out_size; j++){
      // !!
      //cout << "Working on j=" << j << endl;
      
      std::queue<string>& cur = main_queue[j];
      while (cur.size() >= 2){
	//cout << "cur.size() " << cur.size() << endl;
	string var1 = cur.front();
	cur.pop();
	string var2 = cur.front();
	cur.pop();
	string var3 = "1'b0";
	if (cur.size() >= 1){
	  var3 = cur.front();
	  cur.pop();
	}
	string var4 = "1'b0";
	if (cur.size() >= 1){
	  var4 = cur.front();
	  cur.pop();
	}

	if (avl_four2twoi.empty()){
	  string var5 = "1'b0";
	  if (cur.size() >= 1){
	    var5 = cur.front();
	    cur.pop();
	  }
	  //cout << "Creating a new start for:"<<var1<<var2<<var3<<var4<<var5<<endl;
	  four2twoi * f_obj = new four2twoi(var1,var2,var3,var4,var5,j,out_size);
	  used_four2twoi.push(f_obj);
	}else{
	  four2twoi * f_obj = avl_four2twoi.front();
	  avl_four2twoi.pop();
	  f_obj->add(var1,var2,var3,var4);
	  used_four2twoi.push(f_obj);
	}
      }
      //!!
      //cout << "Filling unused avls " <<endl;
      // unused available ones should be filled with zeros for this column
      while(!avl_four2twoi.empty()){
	string var1 = "1'b0";
	if (cur.size() >= 1){
	  var1 = cur.front();
	  cur.pop();
	}
	four2twoi * f_obj = avl_four2twoi.front();
	avl_four2twoi.pop();
	f_obj->add(var1,"1'b0","1'b0","1'b0");
	used_four2twoi.push(f_obj);
      }

      // Moving onto the next column, make all used now available.
      avl_four2twoi.swap(used_four2twoi);

      
    }

    // !!
    //cout << "Time to dump 4to2-compressor instances " << avl_four2twoi.size() << endl;
    
    // Time to dump 4to2-compressor instances
    while(!avl_four2twoi.empty()){

      // !!
      //cout << "Total # of compressors to add: " << avl_four2twoi.size() << endl;
      
      four2twoi * f_obj = avl_four2twoi.front();
      avl_four2twoi.pop();

      // get rid of trailing 1'b0 stuff.
      int trailing_size = 0;
      for (int i = f_obj->size-1; i>=0; i--){
	if (f_obj->in1[i]=="1'b0" && f_obj->in2[i]=="1'b0" && f_obj->in3[i]=="1'b0" && f_obj->in4[i]=="1'b0"){
	  trailing_size++;
	}else
	  break;
      }
      int localsize = f_obj->size - trailing_size;

      // !!
      //cout << "trailing_size: " << trailing_size << endl;


      string* in1 = f_obj->in1;
      string* in2 = f_obj->in2;
      string* in3 = f_obj->in3;
      string* in4 = f_obj->in4;
      int in1size = localsize;
      int in2size = localsize;
      int in3size = localsize;
      int in4size = localsize;

      // !!
      //cout << "merge input vector for a more readable and compact verilog output.... " << endl;
      
      // merge input vector for a more readable and compact verilog output.
      compress_concat_vector(in1, in1size);
      // !!
      // cout << "merge in2 for a more readable and compact verilog output.... " << endl;
      compress_concat_vector(in2, in2size);
       // !!
      //cout << "merge in3 for a more readable and compact verilog output.... " << endl;
      compress_concat_vector(in3, in3size);
       // !!
      //cout << "merge in4 for a more readable and compact verilog output.... " << endl;
      compress_concat_vector(in4, in4size);

      verilog.push("");
      verilog.push("wire cout" + to_string(cnt) + ";");
      verilog.push("wire [" + to_string(localsize-1) + ":0] sum" + to_string(cnt) + ";");
      verilog.push("wire [" + to_string(localsize-1) + ":0] carry" + to_string(cnt) + ";");
      verilog.push("Four2Two #("+to_string(localsize)+") cmp42_"+to_string(cnt)+"(");
      verilog.push("indent");
      verilog.push("indent");
      string inst = ".in1({";
      for (int k = in1size-1; k>=0; k--){
	inst += in1[k] + (k>0 ? ", ":"}),");
      }
      verilog.push(inst);
      inst = ".in2({";
      for (int k = in2size-1; k>=0; k--){
	inst += in2[k] + (k>0 ? ", ":"}),");
      }
      verilog.push(inst);
      inst = ".in3({";
      for (int k = in3size-1; k>=0; k--){
	inst += in3[k] + (k>0 ? ", ":"}),");
      }
      verilog.push(inst);
      inst = ".in4({";
      for (int k = in4size-1; k>=0; k--){
	inst += in4[k] + (k>0 ? ", ":"}),");
      }
      verilog.push(inst);
      verilog.push(".cin("+f_obj->cin+"),");
      verilog.push(".sum(sum" + to_string(cnt) + "),");
      verilog.push(".carry(carry" + to_string(cnt) + "),");
      verilog.push(".cout(cout" + to_string(cnt) + "));");
      verilog.push("outdent");
      verilog.push("outdent");

      // Now put the new result in temp_queue
      for (int i = 0; i<localsize; i++){
	int c = i+f_obj->col;
	if (c < out_size)
	  temp_queue[c].push("sum" + to_string(cnt) + "[" + to_string(i) + "]");
	if (c+1 < out_size){
	  temp_queue[c+1].push("carry" + to_string(cnt) + "[" + to_string(i) + "]");
	  if (i == localsize-1)
	    temp_queue[c+1].push("cout" + to_string(cnt));
	}
      }

      //delete f_obj; f_obj=NULL;
      cnt++;
      
    }
     	
    // Step 2; Move stuff from temp_queue to main_queue
    move_to_main_queue(temp_queue, main_queue, out_size);

    //print_main_queue(main_queue, out_size);

  }

  verilog.push("");

  if (create_fin_adder)
    create_finaladder_inst (main_queue,
                            final_stage_adder,
                            out_size, shift_amount,
                            verilog,
                            adder_size);
  else
    create_two_result_vectors (main_queue,
                               out_size,
                               verilog,
                               signed_mult,
                               adder_size,
                               zeros_in_output);

  delete[] temp_queue;
  // delete[] main_queue;

  // cout << "adder size " << adder_size << endl;

}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x3e8, %rsp            # imm = 0x3E8
movl %r9d, -0x15c(%rbp)
movq %rcx, -0xd0(%rbp)
movq %rdx, -0xa8(%rbp)
movq %rsi, -0x1d0(%rbp)
movl %r8d, -0x2c(%rbp)
movslq %r8d, %r13
pushq $0x50
popq %rcx
movq %r13, %rax
mulq %rcx
movq %rdi, %r15
seto %cl
orq $0x8, %rax
pushq $-0x1
popq %rdi
testb %cl, %cl
cmoveq %rax, %rdi
movq %rdi, -0xd8(%rbp)
callq 0x2030
movq %r13, (%rax)
movq %rax, -0x38(%rbp)
addq $0x8, %rax
movq %rax, -0x60(%rbp)
testl %r13d, %r13d
je 0x2de82
imulq $-0x50, %r13, %rbx
xorl %r14d, %r14d
movq -0x60(%rbp), %r12
movq %r12, %rdi
callq 0x11e0c
addq $-0x50, %r14
addq $0x50, %r12
cmpq %r14, %rbx
jne 0x2de6d
movq -0x60(%rbp), %rax
movq %rax, -0x128(%rbp)
movq -0xd8(%rbp), %rdi
callq 0x2030
leaq 0x8(%rax), %rcx
movq %rcx, -0x120(%rbp)
movq %rax, -0x150(%rbp)
movq %r13, (%rax)
testl %r13d, %r13d
je 0x2ded6
imulq $-0x50, %r13, %rbx
xorl %r14d, %r14d
movq -0x120(%rbp), %r12
movq %r12, %rdi
callq 0x11e0c
addq $-0x50, %r14
addq $0x50, %r12
cmpq %r14, %rbx
jne 0x2dec1
movl -0x2c(%rbp), %eax
movq -0xd0(%rbp), %r13
cmpl %eax, %r13d
cmovgel %eax, %r13d
xorl %r14d, %r14d
testl %r13d, %r13d
cmovlel %r14d, %r13d
movq -0xa8(%rbp), %rax
testl %eax, %eax
cmovlel %r14d, %eax
movq %rax, -0xa8(%rbp)
shlq $0x5, %r13
cmpq -0xa8(%rbp), %r14
je 0x2df52
movq -0x60(%rbp), %r12
xorl %ebx, %ebx
cmpq %rbx, %r13
je 0x2df4d
movq (%r15,%r14,8), %rdi
addq %rbx, %rdi
leaq 0x56a6(%rip), %rsi      # 0x335d1
callq 0x11b84
testb %al, %al
je 0x2df43
movq (%r15,%r14,8), %rsi
addq %rbx, %rsi
movq %r12, %rdi
callq 0x19602
addq $0x20, %rbx
addq $0x50, %r12
jmp 0x2df18
incq %r14
jmp 0x2df09
movl -0x2c(%rbp), %esi
movl %esi, %eax
movq %rax, -0xd8(%rbp)
shlq $0x5, %rax
movq %rax, -0xd0(%rbp)
addq $0x8, %rax
movq %rax, -0xa8(%rbp)
testl %esi, %esi
movl $0x0, %eax
cmovgl %esi, %eax
movq %rax, -0x1d8(%rbp)
leaq -0xa0(%rbp), %r14
leaq -0x58(%rbp), %r12
movl $0x0, -0xe4(%rbp)
movl $0x0, -0x38(%rbp)
movq -0x60(%rbp), %rbx
movq %rbx, %r15
movq %rbx, %rdi
callq 0x2b0e0
cmpl $0x3, %eax
jb 0x2f185
xorl %ebx, %ebx
cmpl $0x5, %eax
sete %bl
addq $0x3, %rbx
cmpl $0x6, %eax
pushq $0x5
popq %rax
cmovaeq %rax, %rbx
xorl %eax, %eax
cmpq %rax, -0x1d8(%rbp)
je 0x2f185
movq %rax, %r13
movq %r15, %rdi
callq 0x1219a
cmpq %rbx, %rax
jae 0x2dffa
movq %r13, %rax
incq %rax
addq $0x50, %r15
jmp 0x2dfd1
leaq -0x1c8(%rbp), %rdi
callq 0x2f6b2
leaq -0x250(%rbp), %rdi
callq 0x2f6b2
movq %r14, %rdi
leaq 0x55b5(%rip), %rsi      # 0x335d1
movq %r12, %rdx
callq 0x20b0
movq 0x20(%rbp), %rdi
movq %r14, %rsi
callq 0x120e4
movq %r14, %rdi
callq 0x20f0
movl -0xe4(%rbp), %esi
incl %esi
movq %r12, %rdi
movl %esi, -0xe4(%rbp)
callq 0x11c73
movq %r14, %rdi
leaq 0x56cc(%rip), %rsi      # 0x33724
movq %r12, %rdx
callq 0x11d49
movq 0x20(%rbp), %rdi
movq %r14, %rsi
callq 0x120e4
movq %r14, %rdi
callq 0x20f0
movq %r12, %rdi
callq 0x20f0
cmpl -0x2c(%rbp), %r13d
jge 0x2f12d
movq %r13, -0x60(%rbp)
imulq $0x50, %r13, %r13
addq -0x128(%rbp), %r13
movq %r13, %rdi
callq 0x1219a
cmpq $0x1, %rax
jbe 0x2e5e4
movq 0x10(%r13), %rsi
leaq -0xa0(%rbp), %rdi
callq 0x2250
movq %r13, %rdi
callq 0x125d4
movq 0x10(%r13), %rsi
leaq -0x58(%rbp), %rdi
callq 0x2250
movq %r13, %rdi
callq 0x125d4
leaq -0x80(%rbp), %rdi
leaq 0x4ee5(%rip), %rsi      # 0x32fc4
leaq -0xc8(%rbp), %rdx
callq 0x20b0
movq %r13, %rdi
callq 0x1219a
testq %rax, %rax
je 0x2e10d
movq 0x10(%r13), %rsi
leaq -0x80(%rbp), %rdi
callq 0x2130
movq %r13, %rdi
callq 0x125d4
leaq -0xc8(%rbp), %rdi
leaq 0x4ea9(%rip), %rsi      # 0x32fc4
leaq -0x118(%rbp), %rdx
callq 0x20b0
movq %r13, %rdi
callq 0x1219a
testq %rax, %rax
je 0x2e14c
movq 0x10(%r13), %rsi
leaq -0xc8(%rbp), %rdi
callq 0x2130
movq %r13, %rdi
callq 0x125d4
movq -0x1b8(%rbp), %rax
cmpq %rax, -0x198(%rbp)
je 0x2e223
movq (%rax), %rbx
movq %rbx, -0x118(%rbp)
leaq -0x1c8(%rbp), %rdi
callq 0x2f972
leaq -0x3d0(%rbp), %rdi
leaq -0xa0(%rbp), %rsi
callq 0x2250
leaq -0x3b0(%rbp), %rdi
leaq -0x58(%rbp), %rsi
callq 0x2250
leaq -0x390(%rbp), %rdi
leaq -0x80(%rbp), %rsi
callq 0x2250
leaq -0x410(%rbp), %r14
movq %r14, %rdi
leaq -0xc8(%rbp), %rsi
callq 0x2250
movq %rbx, %rdi
leaq -0x3d0(%rbp), %rbx
movq %rbx, %rsi
movq %r14, %r15
leaq -0x3b0(%rbp), %r14
movq %r14, %rdx
leaq -0x390(%rbp), %r12
movq %r12, %rcx
movq %r15, %r8
callq 0x2f9c6
movq %r15, %rdi
callq 0x20f0
movq %r12, %rdi
callq 0x20f0
movq %r14, %rdi
callq 0x20f0
movq %rbx, %rdi
callq 0x20f0
leaq -0x250(%rbp), %rdi
leaq -0x118(%rbp), %rsi
callq 0x2f78a
jmp 0x2e4a2
leaq -0x118(%rbp), %rdi
leaq 0x4d93(%rip), %rsi      # 0x32fc4
leaq -0x148(%rbp), %rdx
callq 0x20b0
movq %r13, %rdi
callq 0x1219a
testq %rax, %rax
je 0x2e262
movq 0x10(%r13), %rsi
leaq -0x118(%rbp), %rdi
callq 0x2130
movq %r13, %rdi
callq 0x125d4
pushq $0x48
popq %rdi
callq 0x21d0
movq %rax, %r14
leaq -0x2f0(%rbp), %rdi
leaq -0xa0(%rbp), %rsi
callq 0x2250
leaq -0x2d0(%rbp), %rdi
leaq -0x58(%rbp), %rsi
callq 0x2250
leaq -0x2b0(%rbp), %rdi
leaq -0x80(%rbp), %rsi
callq 0x2250
leaq -0x290(%rbp), %rdi
leaq -0xc8(%rbp), %rsi
callq 0x2250
leaq -0x270(%rbp), %rdi
leaq -0x118(%rbp), %rsi
callq 0x2250
andq $0x0, (%r14)
movq %r14, %r12
addq $0x8, %r12
movq %r12, %rdi
leaq 0x52f6(%rip), %rsi      # 0x335d1
leaq -0x200(%rbp), %rdx
callq 0x20b0
movq -0xa8(%rbp), %rdi
callq 0x2030
movq -0xd8(%rbp), %rcx
movq %rcx, (%rax)
leaq 0x8(%rax), %rbx
addq $0x18, %rax
movq -0xd0(%rbp), %rcx
movq %rax, -0x10(%rax)
andq $0x0, -0x8(%rax)
movb $0x0, (%rax)
addq $0x20, %rax
addq $-0x20, %rcx
jne 0x2e30c
movq %rbx, 0x28(%r14)
movq -0xa8(%rbp), %rdi
callq 0x2030
movq -0xd8(%rbp), %rcx
movq %rcx, (%rax)
leaq 0x8(%rax), %rcx
addq $0x18, %rax
movq -0xd0(%rbp), %rdx
movq %rax, -0x10(%rax)
andq $0x0, -0x8(%rax)
movb $0x0, (%rax)
addq $0x20, %rax
addq $-0x20, %rdx
jne 0x2e34b
movq %rcx, 0x30(%r14)
movq -0xa8(%rbp), %rdi
callq 0x2030
movq -0xd8(%rbp), %rcx
movq %rcx, (%rax)
leaq 0x8(%rax), %rcx
addq $0x18, %rax
movq -0xd0(%rbp), %rdx
movq %rax, -0x10(%rax)
andq $0x0, -0x8(%rax)
movb $0x0, (%rax)
addq $0x20, %rax
addq $-0x20, %rdx
jne 0x2e38a
movq %rcx, 0x38(%r14)
movq -0xa8(%rbp), %rdi
callq 0x2030
movq -0xd8(%rbp), %rcx
movq %rcx, (%rax)
leaq 0x8(%rax), %rcx
addq $0x18, %rax
movq -0xd0(%rbp), %rdx
movq %rax, -0x10(%rax)
andq $0x0, -0x8(%rax)
movb $0x0, (%rax)
addq $0x20, %rax
addq $-0x20, %rdx
jne 0x2e3c9
movq %rcx, 0x40(%r14)
movq %rbx, %rdi
leaq -0x2f0(%rbp), %rsi
callq 0x2130
movq 0x30(%r14), %rdi
leaq -0x2d0(%rbp), %rsi
callq 0x2130
movq 0x38(%r14), %rdi
leaq -0x2b0(%rbp), %rsi
callq 0x2130
movq 0x40(%r14), %rdi
leaq -0x290(%rbp), %rsi
callq 0x2130
movq %r12, %rdi
leaq -0x270(%rbp), %rsi
callq 0x2130
movq -0x60(%rbp), %rax
movl %eax, (%r14)
movl $0x1, 0x4(%r14)
leaq -0x270(%rbp), %rdi
callq 0x20f0
leaq -0x290(%rbp), %rdi
callq 0x20f0
leaq -0x2b0(%rbp), %rdi
callq 0x20f0
leaq -0x2d0(%rbp), %rdi
callq 0x20f0
leaq -0x2f0(%rbp), %rdi
callq 0x20f0
movq %r14, -0x148(%rbp)
leaq -0x250(%rbp), %rdi
leaq -0x148(%rbp), %rsi
callq 0x2f78a
leaq -0x118(%rbp), %rdi
callq 0x20f0
leaq -0xc8(%rbp), %rdi
callq 0x20f0
leaq -0x80(%rbp), %rdi
callq 0x20f0
leaq -0x58(%rbp), %rdi
callq 0x20f0
leaq -0xa0(%rbp), %rdi
callq 0x20f0
jmp 0x2e095
leaq -0xa0(%rbp), %rdi
leaq 0x4ae5(%rip), %rsi      # 0x32fc4
leaq -0x58(%rbp), %rdx
callq 0x20b0
movq %r13, %rdi
callq 0x1219a
testq %rax, %rax
je 0x2e50d
movq 0x10(%r13), %rsi
leaq -0xa0(%rbp), %rdi
callq 0x2130
movq %r13, %rdi
callq 0x125d4
movq (%rbx), %rbx
movq %rbx, -0x58(%rbp)
leaq -0x1c8(%rbp), %rdi
callq 0x2f972
leaq -0x370(%rbp), %rdi
leaq -0xa0(%rbp), %rsi
callq 0x2250
leaq -0x350(%rbp), %rdi
leaq 0x4a83(%rip), %r14      # 0x32fc4
movq %r14, %rsi
leaq -0x80(%rbp), %rdx
callq 0x20b0
leaq -0x330(%rbp), %rdi
movq %r14, %rsi
leaq -0xc8(%rbp), %rdx
callq 0x20b0
leaq -0x3f0(%rbp), %r15
movq %r15, %rdi
movq %r14, %rsi
leaq -0x118(%rbp), %rdx
callq 0x20b0
movq %rbx, %rdi
leaq -0x370(%rbp), %rbx
movq %rbx, %rsi
leaq -0x350(%rbp), %r14
movq %r14, %rdx
movq %r15, %r12
leaq -0x330(%rbp), %r15
movq %r15, %rcx
movq %r12, %r8
callq 0x2f9c6
movq %r12, %rdi
callq 0x20f0
movq %r15, %rdi
callq 0x20f0
movq %r14, %rdi
callq 0x20f0
movq %rbx, %rdi
callq 0x20f0
leaq -0x250(%rbp), %rdi
leaq -0x58(%rbp), %rsi
callq 0x2f78a
leaq -0xa0(%rbp), %rdi
callq 0x20f0
movq -0x1b8(%rbp), %rbx
movq -0x198(%rbp), %rax
cmpq %rbx, %rax
jne 0x2e4d1
movups -0x1c8(%rbp), %xmm0
movups -0x1b0(%rbp), %xmm1
movaps %xmm0, -0xa0(%rbp)
movq -0x1a0(%rbp), %rdx
movups -0x190(%rbp), %xmm0
movq -0x180(%rbp), %r8
pushq $0xa
popq %rcx
leaq -0x1c8(%rbp), %rdi
leaq -0x250(%rbp), %rsi
rep  movsq (%rsi), %es:(%rdi)
movaps -0xa0(%rbp), %xmm2
movaps %xmm2, -0x250(%rbp)
movq %rbx, -0x240(%rbp)
movups %xmm1, -0x238(%rbp)
movq %rdx, -0x228(%rbp)
movq %rax, -0x220(%rbp)
movups %xmm0, -0x218(%rbp)
movq %r8, -0x208(%rbp)
movq -0x60(%rbp), %r13
incq %r13
jmp 0x2e07c
movq (%rax), %rbx
leaq -0x1c8(%rbp), %rdi
callq 0x2f972
movq %rbx, -0x60(%rbp)
movl 0x4(%rbx), %ebx
movq %rbx, %r12
shlq $0x5, %r12
addq $-0x20, %r12
movq $0x0, -0x158(%rbp)
pushq $-0x1
popq %rax
movq %rax, -0xe0(%rbp)
xorl %r13d, %r13d
testl %ebx, %ebx
leaq 0x4905(%rip), %r14      # 0x32fc4
movq -0x60(%rbp), %r15
jle 0x2e73f
movq 0x28(%r15), %rdi
addq %r12, %rdi
movq %r14, %rsi
callq 0x11b91
testb %al, %al
je 0x2e73f
movq 0x30(%r15), %rdi
addq %r12, %rdi
movq %r14, %rsi
callq 0x11b91
testb %al, %al
je 0x2e73f
movq 0x38(%r15), %rdi
addq %r12, %rdi
movq %r14, %rsi
callq 0x11b91
testb %al, %al
je 0x2e73f
movq 0x40(%r15), %rdi
addq %r12, %rdi
movq %r14, %rsi
callq 0x11b91
testb %al, %al
je 0x2e73f
incl %r13d
decl %ebx
addq $-0x20, %r12
movq -0xe0(%rbp), %rax
decl %eax
movq %rax, -0xe0(%rbp)
movq -0x158(%rbp), %rax
decl %eax
movq %rax, -0x158(%rbp)
jmp 0x2e6b6
movl 0x4(%r15), %r14d
movl %r14d, %ecx
subl %r13d, %ecx
movq 0x28(%r15), %rdi
movq 0x30(%r15), %rax
movq %rax, -0x178(%rbp)
movq 0x38(%r15), %rax
movq %rax, -0x170(%rbp)
movq 0x40(%r15), %rax
movq %rax, -0x168(%rbp)
movl %ecx, -0xf4(%rbp)
movl %ecx, -0xf0(%rbp)
movl %ecx, -0xec(%rbp)
movl %ecx, %r15d
movl %ecx, -0xe8(%rbp)
movq %rdi, -0x1e0(%rbp)
leaq -0xf4(%rbp), %rsi
callq 0x2d620
movq -0x178(%rbp), %rdi
leaq -0xf0(%rbp), %rsi
callq 0x2d620
movq -0x170(%rbp), %rdi
leaq -0xec(%rbp), %rsi
callq 0x2d620
movq -0x168(%rbp), %rdi
leaq -0xe8(%rbp), %rsi
callq 0x2d620
leaq -0xa0(%rbp), %rbx
movq %rbx, %rdi
leaq 0x4deb(%rip), %rsi      # 0x335d1
leaq -0x58(%rbp), %rdx
callq 0x20b0
movq 0x20(%rbp), %rdi
movq %rbx, %rsi
callq 0x120e4
movq %rbx, %rdi
callq 0x20f0
leaq -0x80(%rbp), %rbx
movq %rbx, %rdi
movl -0x38(%rbp), %esi
callq 0x11c73
leaq -0x58(%rbp), %r12
movq %r12, %rdi
leaq 0x4f23(%rip), %rsi      # 0x33743
movq %rbx, %rdx
callq 0x11d49
leaq -0xa0(%rbp), %rbx
movq %rbx, %rdi
movq %r12, %rsi
leaq 0x4ea5(%rip), %rdx      # 0x336e1
callq 0x11ba1
movq 0x20(%rbp), %rdi
movq %rbx, %rsi
callq 0x120e4
movq %rbx, %rdi
callq 0x20f0
leaq -0x58(%rbp), %rdi
callq 0x20f0
leaq -0x80(%rbp), %rdi
callq 0x20f0
notl %r13d
movl %r14d, -0x160(%rbp)
addl %r14d, %r13d
leaq -0x118(%rbp), %r14
movq %r14, %rdi
movl %r13d, %esi
callq 0x11c73
leaq -0xc8(%rbp), %rbx
movq %rbx, %rdi
leaq 0x34c7(%rip), %rsi      # 0x31d5e
movq %r14, %rdx
callq 0x11d49
leaq -0x80(%rbp), %rdi
movq %rbx, %rsi
leaq 0x4ea0(%rip), %rdx      # 0x3374d
callq 0x11ba1
leaq -0x148(%rbp), %rbx
movq %rbx, %rdi
movl -0x38(%rbp), %esi
callq 0x11c73
movq %r12, %rdi
leaq -0x80(%rbp), %rsi
movq %rbx, %rdx
callq 0x11bca
leaq -0xa0(%rbp), %rbx
movq %rbx, %rdi
movq %r12, %rsi
leaq 0x4dfa(%rip), %rdx      # 0x336e1
callq 0x11ba1
movq 0x20(%rbp), %rdi
movq %rbx, %rsi
callq 0x120e4
movq %rbx, %rdi
callq 0x20f0
leaq -0x58(%rbp), %rdi
callq 0x20f0
leaq -0x148(%rbp), %rdi
callq 0x20f0
leaq -0x80(%rbp), %rdi
callq 0x20f0
leaq -0xc8(%rbp), %rbx
movq %rbx, %rdi
callq 0x20f0
movq %r14, %rdi
callq 0x20f0
movq %r14, %rdi
movl %r13d, %esi
callq 0x11c73
movq %rbx, %rdi
leaq 0x3414(%rip), %rsi      # 0x31d5e
movq %r14, %rdx
callq 0x11d49
leaq -0x80(%rbp), %rdi
movq %rbx, %rsi
leaq 0x4df5(%rip), %rdx      # 0x33755
callq 0x11ba1
leaq -0x148(%rbp), %rbx
movq %rbx, %rdi
movl -0x38(%rbp), %esi
callq 0x11c73
movq %r12, %rdi
leaq -0x80(%rbp), %rsi
movq %rbx, %rdx
callq 0x11bca
leaq -0xa0(%rbp), %rbx
movq %rbx, %rdi
movq %r12, %rsi
leaq 0x4d47(%rip), %rdx      # 0x336e1
callq 0x11ba1
movq 0x20(%rbp), %rdi
movq %rbx, %rsi
callq 0x120e4
movq %rbx, %rdi
callq 0x20f0
leaq -0x58(%rbp), %rdi
callq 0x20f0
leaq -0x148(%rbp), %rdi
callq 0x20f0
leaq -0x80(%rbp), %rdi
callq 0x20f0
leaq -0xc8(%rbp), %rbx
movq %rbx, %rdi
callq 0x20f0
movq %r14, %rdi
callq 0x20f0
movq %r14, %rdi
movl %r15d, %esi
callq 0x11c73
movq %rbx, %rdi
leaq 0x4d62(%rip), %rsi      # 0x3375f
movq %r14, %rdx
callq 0x11d49
leaq -0x80(%rbp), %rdi
movq %rbx, %rsi
leaq 0x4d58(%rip), %rdx      # 0x3376b
callq 0x11ba1
leaq -0x148(%rbp), %rbx
movq %rbx, %rdi
movl -0x38(%rbp), %esi
callq 0x11c73
movq %r12, %rdi
leaq -0x80(%rbp), %rsi
movq %rbx, %rdx
callq 0x11bca
leaq -0xa0(%rbp), %rbx
movq %rbx, %rdi
movq %r12, %rsi
leaq 0x4630(%rip), %rdx      # 0x3307d
callq 0x11ba1
movq 0x20(%rbp), %rdi
movq %rbx, %rsi
callq 0x120e4
movq %rbx, %rdi
callq 0x20f0
movq %r12, %rdi
callq 0x20f0
leaq -0x148(%rbp), %rdi
callq 0x20f0
leaq -0x80(%rbp), %rdi
callq 0x20f0
leaq -0xc8(%rbp), %rdi
callq 0x20f0
leaq -0x118(%rbp), %rdi
callq 0x20f0
movq %rbx, %rdi
leaq 0x3213(%rip), %rsi      # 0x31cb8
movq %r12, %rdx
callq 0x20b0
movq 0x20(%rbp), %rdi
movq %rbx, %rsi
callq 0x120e4
movq %rbx, %rdi
callq 0x20f0
movq %rbx, %rdi
leaq 0x31ed(%rip), %rsi      # 0x31cb8
leaq -0x58(%rbp), %rdx
callq 0x20b0
movq 0x20(%rbp), %rdi
movq %rbx, %rsi
callq 0x120e4
movq %rbx, %rdi
callq 0x20f0
movq %rbx, %rdi
leaq 0x4c82(%rip), %rsi      # 0x33774
leaq -0x58(%rbp), %rdx
callq 0x20b0
movl -0xf4(%rbp), %r12d
movq %r12, %rax
shlq $0x5, %rax
movq -0x1e0(%rbp), %rcx
leaq (%rcx,%rax), %rbx
addq $-0x20, %rbx
testl %r12d, %r12d
jle 0x2eb62
cmpq $0x1, %r12
leaq 0x3ace(%rip), %rdx      # 0x325f6
leaq 0x4c4c(%rip), %rax      # 0x3377b
cmoveq %rax, %rdx
leaq -0x58(%rbp), %r13
movq %r13, %rdi
movq %rbx, %rsi
callq 0x11c3b
leaq -0xa0(%rbp), %rdi
movq %r13, %rsi
callq 0x2360
movq %r13, %rdi
callq 0x20f0
addq $-0x20, %rbx
decq %r12
jmp 0x2eb18
movq 0x20(%rbp), %rdi
leaq -0xa0(%rbp), %rbx
movq %rbx, %rsi
callq 0x19602
movq %rbx, %rdi
leaq 0x4c00(%rip), %rsi      # 0x3377f
callq 0x2350
movl -0xf0(%rbp), %r12d
movq %r12, %rax
shlq $0x5, %rax
movq -0x178(%rbp), %rcx
leaq (%rcx,%rax), %rbx
addq $-0x20, %rbx
testl %r12d, %r12d
jle 0x2ebeb
cmpq $0x1, %r12
leaq 0x3a45(%rip), %rdx      # 0x325f6
leaq 0x4bc3(%rip), %rax      # 0x3377b
cmoveq %rax, %rdx
leaq -0x58(%rbp), %r13
movq %r13, %rdi
movq %rbx, %rsi
callq 0x11c3b
leaq -0xa0(%rbp), %rdi
movq %r13, %rsi
callq 0x2360
movq %r13, %rdi
callq 0x20f0
addq $-0x20, %rbx
decq %r12
jmp 0x2eba1
movq 0x20(%rbp), %rdi
leaq -0xa0(%rbp), %rbx
movq %rbx, %rsi
callq 0x19602
movq %rbx, %rdi
leaq 0x4b7e(%rip), %rsi      # 0x33786
callq 0x2350
movl -0xec(%rbp), %r12d
movq %r12, %rax
shlq $0x5, %rax
movq -0x170(%rbp), %rcx
leaq (%rcx,%rax), %rbx
addq $-0x20, %rbx
testl %r12d, %r12d
jle 0x2ec74
cmpq $0x1, %r12
leaq 0x39bc(%rip), %rdx      # 0x325f6
leaq 0x4b3a(%rip), %rax      # 0x3377b
cmoveq %rax, %rdx
leaq -0x58(%rbp), %r13
movq %r13, %rdi
movq %rbx, %rsi
callq 0x11c3b
leaq -0xa0(%rbp), %rdi
movq %r13, %rsi
callq 0x2360
movq %r13, %rdi
callq 0x20f0
addq $-0x20, %rbx
decq %r12
jmp 0x2ec2a
movq 0x20(%rbp), %rdi
leaq -0xa0(%rbp), %rbx
movq %rbx, %rsi
callq 0x19602
movq %rbx, %rdi
leaq 0x4afc(%rip), %rsi      # 0x3378d
callq 0x2350
movl -0xe8(%rbp), %r12d
movq %r12, %rax
shlq $0x5, %rax
movq -0x168(%rbp), %rcx
leaq (%rcx,%rax), %rbx
addq $-0x20, %rbx
testl %r12d, %r12d
jle 0x2ecfd
cmpq $0x1, %r12
leaq 0x3933(%rip), %rdx      # 0x325f6
leaq 0x4ab1(%rip), %rax      # 0x3377b
cmoveq %rax, %rdx
leaq -0x58(%rbp), %r13
movq %r13, %rdi
movq %rbx, %rsi
callq 0x11c3b
leaq -0xa0(%rbp), %rdi
movq %r13, %rsi
callq 0x2360
movq %r13, %rdi
callq 0x20f0
addq $-0x20, %rbx
decq %r12
jmp 0x2ecb3
movq 0x20(%rbp), %rdi
leaq -0xa0(%rbp), %rsi
callq 0x19602
movq -0x60(%rbp), %rax
leaq 0x8(%rax), %rdx
leaq -0x80(%rbp), %r14
movq %r14, %rdi
leaq 0x4a71(%rip), %rsi      # 0x33794
callq 0x11cd3
leaq -0x58(%rbp), %rbx
movq %rbx, %rdi
movq %r14, %rsi
leaq 0x4a43(%rip), %r15      # 0x3377c
movq %r15, %rdx
callq 0x11ba1
movq 0x20(%rbp), %rdi
movq %rbx, %rsi
callq 0x120e4
movq %rbx, %rdi
callq 0x20f0
movq %r14, %rdi
callq 0x20f0
leaq -0xc8(%rbp), %rbx
movq %rbx, %rdi
movl -0x38(%rbp), %esi
callq 0x11c73
movq %r14, %rdi
leaq 0x4a21(%rip), %rsi      # 0x3379a
movq %rbx, %rdx
callq 0x11d49
leaq -0x58(%rbp), %rbx
movq %rbx, %rdi
movq %r14, %rsi
movq %r15, %rdx
callq 0x11ba1
movq 0x20(%rbp), %rdi
movq %rbx, %rsi
callq 0x120e4
movq %rbx, %rdi
callq 0x20f0
movq %r14, %rdi
callq 0x20f0
leaq -0xc8(%rbp), %rbx
movq %rbx, %rdi
callq 0x20f0
movq %rbx, %rdi
movl -0x38(%rbp), %esi
callq 0x11c73
movq %r14, %rdi
leaq 0x49d0(%rip), %rsi      # 0x337a3
movq %rbx, %rdx
callq 0x11d49
leaq -0x58(%rbp), %rbx
movq %rbx, %rdi
movq %r14, %rsi
movq %r15, %rdx
callq 0x11ba1
movq 0x20(%rbp), %rdi
movq %rbx, %rsi
callq 0x120e4
movq %rbx, %rdi
callq 0x20f0
movq %r14, %rdi
callq 0x20f0
leaq -0xc8(%rbp), %rbx
movq %rbx, %rdi
callq 0x20f0
movq %rbx, %rdi
movl -0x38(%rbp), %esi
callq 0x11c73
movq %r14, %rdi
leaq 0x4983(%rip), %rsi      # 0x337b0
movq %rbx, %rdx
callq 0x11d49
leaq -0x58(%rbp), %rbx
movq %rbx, %rdi
movq %r14, %rsi
leaq 0x3673(%rip), %rdx      # 0x324b9
callq 0x11ba1
movq 0x20(%rbp), %rdi
movq %rbx, %rsi
callq 0x120e4
movq %rbx, %rdi
callq 0x20f0
movq %r14, %rdi
callq 0x20f0
leaq -0xc8(%rbp), %rdi
callq 0x20f0
movq %rbx, %rdi
leaq 0x2eb1(%rip), %rsi      # 0x31d2e
movq %r14, %rdx
callq 0x20b0
movq 0x20(%rbp), %rdi
movq %rbx, %rsi
callq 0x120e4
movl -0x160(%rbp), %r14d
movq %rbx, %rdi
callq 0x20f0
movq %rbx, %rdi
leaq 0x2e84(%rip), %rsi      # 0x31d2e
leaq -0x80(%rbp), %rdx
callq 0x20b0
movq 0x20(%rbp), %rdi
movq %rbx, %rsi
callq 0x120e4
movq %rbx, %rdi
callq 0x20f0
movq -0xe0(%rbp), %rax
addl %r14d, %eax
movq %rax, -0xe0(%rbp)
movq -0x158(%rbp), %r15
addl %r14d, %r15d
testl %r15d, %r15d
movl $0x0, %eax
cmovlel %eax, %r15d
xorl %r12d, %r12d
cmpl %r12d, %r15d
je 0x2f11e
movq -0x60(%rbp), %rax
movslq (%rax), %rbx
leal (%r12,%rbx), %eax
movl -0x2c(%rbp), %ecx
cmpl %ecx, %eax
jge 0x2efea
leaq -0x148(%rbp), %r13
movq %r13, %rdi
movl -0x38(%rbp), %esi
callq 0x11c73
leaq -0x118(%rbp), %r14
movq %r14, %rdi
leaq 0x481e(%rip), %rsi      # 0x33751
movq %r13, %rdx
callq 0x11d49
leaq -0xc8(%rbp), %rdi
movq %r14, %rsi
leaq 0x353e(%rip), %rdx      # 0x3248a
callq 0x11ba1
leaq -0x200(%rbp), %r13
movq %r13, %rdi
movl %r12d, %esi
callq 0x11c73
leaq -0x80(%rbp), %r14
movq %r14, %rdi
leaq -0xc8(%rbp), %rsi
movq %r13, %rdx
callq 0x11bca
leaq -0x58(%rbp), %r13
movq %r13, %rdi
movq %r14, %rsi
leaq 0x2e8f(%rip), %rdx      # 0x31e19
callq 0x11ba1
leaq (%r12,%rbx), %rax
imulq $0x50, %rax, %rdi
addq -0x120(%rbp), %rdi
movq %r13, %rsi
callq 0x120e4
movq %r13, %rdi
callq 0x20f0
leaq -0x80(%rbp), %rdi
callq 0x20f0
leaq -0x200(%rbp), %rdi
callq 0x20f0
leaq -0xc8(%rbp), %rdi
callq 0x20f0
leaq -0x118(%rbp), %rdi
callq 0x20f0
leaq -0x148(%rbp), %rdi
callq 0x20f0
movl -0x2c(%rbp), %ecx
movl %ebx, %eax
leaq (%r12,%rax), %rbx
incq %rbx
cmpl %ecx, %ebx
jge 0x2f116
leaq -0x148(%rbp), %r13
movq %r13, %rdi
movl -0x38(%rbp), %esi
callq 0x11c73
leaq -0x118(%rbp), %r14
movq %r14, %rdi
leaq 0x473b(%rip), %rsi      # 0x33759
movq %r13, %rdx
callq 0x11d49
leaq -0xc8(%rbp), %rdi
movq %r14, %rsi
leaq 0x3453(%rip), %rdx      # 0x3248a
callq 0x11ba1
leaq -0x200(%rbp), %r13
movq %r13, %rdi
movl %r12d, %esi
callq 0x11c73
leaq -0x80(%rbp), %r14
movq %r14, %rdi
leaq -0xc8(%rbp), %rsi
movq %r13, %rdx
callq 0x11bca
leaq -0x58(%rbp), %r13
movq %r13, %rdi
movq %r14, %rsi
leaq 0x2da4(%rip), %rdx      # 0x31e19
callq 0x11ba1
movslq %ebx, %rax
imulq $0x50, %rax, %rbx
addq -0x120(%rbp), %rbx
movq %rbx, %rdi
movq %r13, %rsi
callq 0x120e4
movq %r13, %rdi
callq 0x20f0
leaq -0x80(%rbp), %rdi
callq 0x20f0
leaq -0x200(%rbp), %rdi
callq 0x20f0
leaq -0xc8(%rbp), %rdi
callq 0x20f0
leaq -0x118(%rbp), %rdi
callq 0x20f0
leaq -0x148(%rbp), %rdi
callq 0x20f0
cmpl %r12d, -0xe0(%rbp)
jne 0x2f116
movq %r14, %rdi
movl -0x38(%rbp), %esi
callq 0x11c73
movq %r13, %rdi
leaq 0x4656(%rip), %rsi      # 0x33748
movq %r14, %rdx
callq 0x11d49
movq %rbx, %rdi
movq %r13, %rsi
callq 0x120e4
movq %r13, %rdi
callq 0x20f0
leaq -0x80(%rbp), %rdi
callq 0x20f0
incq %r12
jmp 0x2eef1
incl -0x38(%rbp)
leaq -0xa0(%rbp), %rdi
callq 0x20f0
movq -0x1b8(%rbp), %rax
cmpq %rax, -0x198(%rbp)
jne 0x2e67d
movq -0x128(%rbp), %rbx
movq -0x120(%rbp), %rdi
movq %rbx, %rsi
movl -0x2c(%rbp), %edx
callq 0x2af64
leaq -0x250(%rbp), %rdi
callq 0x2fa38
leaq -0x1c8(%rbp), %rdi
callq 0x2fa38
movl -0x2c(%rbp), %esi
leaq -0xa0(%rbp), %r14
leaq -0x58(%rbp), %r12
jmp 0x2dfa5
leaq 0x4445(%rip), %rsi      # 0x335d1
leaq -0x1c8(%rbp), %rdi
leaq -0x250(%rbp), %rdx
callq 0x20b0
leaq -0x1c8(%rbp), %rsi
movq 0x20(%rbp), %rdi
callq 0x120e4
movq -0x150(%rbp), %r15
leaq -0x1c8(%rbp), %rdi
callq 0x20f0
cmpb $0x0, 0x10(%rbp)
je 0x2f20c
leaq -0x310(%rbp), %rbx
movq %rbx, %rdi
movq -0x1d0(%rbp), %rsi
callq 0x2250
leaq -0x128(%rbp), %rdi
movq %rbx, %rsi
movl -0x2c(%rbp), %edx
movl -0x15c(%rbp), %ecx
movq 0x20(%rbp), %r8
movq 0x28(%rbp), %r9
callq 0x2bc1e
leaq -0x310(%rbp), %rdi
callq 0x20f0
jmp 0x2f229
leaq -0x128(%rbp), %rdi
movl -0x2c(%rbp), %esi
movq 0x20(%rbp), %rdx
xorl %ecx, %ecx
movq 0x28(%rbp), %r8
movq 0x30(%rbp), %r9
callq 0x2b124
movq (%r15), %rax
testq %rax, %rax
je 0x2f24b
imulq $0x50, %rax, %rbx
movq %r15, %r14
addq $-0x48, %r14
leaq (%r14,%rbx), %rdi
callq 0x11f3e
addq $-0x50, %rbx
jne 0x2f23c
movq %r15, %rdi
callq 0x2230
addq $0x3e8, %rsp            # imm = 0x3E8
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %rax, %rbx
leaq -0x310(%rbp), %rdi
jmp 0x2f2b4
jmp 0x2f5f1
movq %rax, %rbx
leaq -0xa0(%rbp), %rdi
callq 0x20f0
jmp 0x2f28a
movq %rax, %rbx
leaq -0x58(%rbp), %rdi
jmp 0x2f68d
jmp 0x2f5f1
jmp 0x2f608
jmp 0x2f5f1
movq %rax, %rbx
jmp 0x2f69e
movq %rax, %rbx
leaq -0x1c8(%rbp), %rdi
callq 0x20f0
jmp 0x2f6aa
movq %rax, %rbx
jmp 0x2f6aa
movq %rax, %rbx
testq %r14, %r14
je 0x2f2eb
negq %r14
movq -0x150(%rbp), %r15
addq $-0x48, %r15
leaq (%r15,%r14), %rdi
callq 0x11f3e
addq $-0x50, %r14
jne 0x2f2dc
movq -0x150(%rbp), %rdi
jmp 0x2f31a
movq %rax, %rbx
testq %r14, %r14
je 0x2f316
negq %r14
movq -0x38(%rbp), %r15
addq $-0x48, %r15
leaq (%r15,%r14), %rdi
callq 0x11f3e
addq $-0x50, %r14
jne 0x2f307
movq -0x38(%rbp), %rdi
callq 0x2230
jmp 0x2f6aa
jmp 0x2f48b
jmp 0x2f608
jmp 0x2f379
jmp 0x2f358
jmp 0x2f35d
jmp 0x2f608
jmp 0x2f608
jmp 0x2f608
jmp 0x2f35d
jmp 0x2f608
jmp 0x2f379
jmp 0x2f358
jmp 0x2f47d
jmp 0x2f5fe
movq %rax, %rbx
jmp 0x2f369
movq %rax, %rbx
leaq -0x58(%rbp), %rdi
callq 0x20f0
leaq -0x80(%rbp), %rdi
callq 0x20f0
jmp 0x2f37c
jmp 0x2f608
movq %rax, %rbx
leaq -0xc8(%rbp), %rdi
jmp 0x2f681
jmp 0x2f5fe
jmp 0x2f3d6
jmp 0x2f3e7
jmp 0x2f5f1
jmp 0x2f424
jmp 0x2f5f1
jmp 0x2f454
jmp 0x2f608
jmp 0x2f3fb
jmp 0x2f409
jmp 0x2f3d6
jmp 0x2f3e7
jmp 0x2f608
jmp 0x2f5f1
jmp 0x2f5f1
jmp 0x2f424
jmp 0x2f454
jmp 0x2f3fb
jmp 0x2f409
jmp 0x2f5f1
jmp 0x2f608
movq %rax, %rbx
leaq -0xa0(%rbp), %rdi
callq 0x20f0
jmp 0x2f3fe
movq %rax, %rbx
jmp 0x2f433
jmp 0x2f5f1
movq %rax, %rbx
jmp 0x2f465
jmp 0x2f5f1
movq %rax, %rbx
leaq -0x58(%rbp), %rdi
callq 0x20f0
jmp 0x2f427
movq %rax, %rbx
jmp 0x2f43c
movq %rax, %rbx
leaq -0xa0(%rbp), %rdi
callq 0x20f0
jmp 0x2f45c
jmp 0x2f5f1
movq %rax, %rbx
leaq -0x148(%rbp), %rdi
callq 0x20f0
leaq -0x80(%rbp), %rdi
callq 0x20f0
leaq -0xc8(%rbp), %rdi
callq 0x20f0
leaq -0x118(%rbp), %rdi
jmp 0x2f68d
movq %rax, %rbx
jmp 0x2f448
movq %rax, %rbx
leaq -0x58(%rbp), %rdi
callq 0x20f0
leaq -0x80(%rbp), %rdi
jmp 0x2f68d
jmp 0x2f5f1
jmp 0x2f608
jmp 0x2f593
movq %rax, %rbx
leaq -0x58(%rbp), %rdi
callq 0x20f0
jmp 0x2f48e
movq %rax, %rbx
leaq -0x80(%rbp), %rdi
jmp 0x2f681
jmp 0x2f608
movq %rax, %rbx
jmp 0x2f654
movq %rax, %rbx
jmp 0x2f63c
movq %rax, %rbx
jmp 0x2f630
movq %rax, %rbx
jmp 0x2f624
movq %rax, %rbx
jmp 0x2f648
movq %rax, %rbx
jmp 0x2f618
jmp 0x2f603
jmp 0x2f4d7
jmp 0x2f4e1
jmp 0x2f4dc
movq %rax, %rbx
jmp 0x2f539
movq %rax, %rbx
jmp 0x2f50c
movq %rax, %rbx
jmp 0x2f521
jmp 0x2f608
jmp 0x2f4f6
jmp 0x2f4fb
jmp 0x2f500
jmp 0x2f608
movq %rax, %rbx
jmp 0x2f52d
movq %rax, %rbx
jmp 0x2f515
movq %rax, %rbx
leaq -0x58(%rbp), %rdi
callq 0x20f0
leaq -0x80(%rbp), %rdi
callq 0x20f0
leaq -0x200(%rbp), %rdi
callq 0x20f0
leaq -0xc8(%rbp), %rdi
callq 0x20f0
leaq -0x118(%rbp), %rdi
callq 0x20f0
leaq -0x148(%rbp), %rdi
jmp 0x2f681
jmp 0x2f608
jmp 0x2f603
movq %rax, %rbx
leaq -0x410(%rbp), %rdi
callq 0x20f0
jmp 0x2f56d
movq %rax, %rbx
jmp 0x2f579
movq %rax, %rbx
jmp 0x2f585
movq %rax, %rbx
leaq -0x390(%rbp), %rdi
callq 0x20f0
leaq -0x3b0(%rbp), %rdi
callq 0x20f0
leaq -0x3d0(%rbp), %rdi
jmp 0x2f663
jmp 0x2f5f9
movq %rax, %rbx
jmp 0x2f65c
jmp 0x2f608
jmp 0x2f5fe
jmp 0x2f608
jmp 0x2f5fe
jmp 0x2f5fe
jmp 0x2f608
jmp 0x2f5fe
jmp 0x2f608
movq %rax, %rbx
jmp 0x2f5bf
movq %rax, %rbx
leaq -0x3f0(%rbp), %rdi
callq 0x20f0
leaq -0x330(%rbp), %rdi
callq 0x20f0
jmp 0x2f5d7
movq %rax, %rbx
jmp 0x2f5e3
jmp 0x2f5f1
movq %rax, %rbx
leaq -0x350(%rbp), %rdi
callq 0x20f0
leaq -0x370(%rbp), %rdi
jmp 0x2f681
jmp 0x2f608
movq %rax, %rbx
jmp 0x2f692
movq %rax, %rbx
jmp 0x2f674
movq %rax, %rbx
jmp 0x2f67d
movq %rax, %rbx
jmp 0x2f668
movq %rax, %rbx
jmp 0x2f686
movq %rax, %rbx
movq %r12, %rdi
callq 0x20f0
leaq -0x270(%rbp), %rdi
callq 0x20f0
leaq -0x290(%rbp), %rdi
callq 0x20f0
leaq -0x2b0(%rbp), %rdi
callq 0x20f0
leaq -0x2d0(%rbp), %rdi
callq 0x20f0
leaq -0x2f0(%rbp), %rdi
callq 0x20f0
movq %r14, %rdi
callq 0x21a0
leaq -0x118(%rbp), %rdi
callq 0x20f0
leaq -0xc8(%rbp), %rdi
callq 0x20f0
leaq -0x80(%rbp), %rdi
callq 0x20f0
leaq -0x58(%rbp), %rdi
callq 0x20f0
leaq -0xa0(%rbp), %rdi
callq 0x20f0
leaq -0x250(%rbp), %rdi
callq 0x2fa38
leaq -0x1c8(%rbp), %rdi
callq 0x2fa38
movq %rbx, %rdi
callq 0x2330