// File: temelmertcan[P]multgen/src/multgen.cpp
// Function: create_adder(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, bool, int, 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 create_adder (string final_stage_adder,
                  bool carryin, int adder_size,
                  queue<string>& verilog){

  if (final_stage_adder.compare ("RP") == 0)
    create_rp_adder (adder_size, carryin, verilog);
  else if (final_stage_adder.compare ("HC") == 0)
    create_hc_adder (adder_size, carryin, verilog);
  else if (final_stage_adder.compare ("LF") == 0)
    create_lf_adder (adder_size, carryin, verilog);
  else if (final_stage_adder.compare ("KS") == 0)
    create_ks_adder (adder_size, carryin, verilog);
  else if (final_stage_adder.compare ("BK") == 0)
    create_bk_adder (adder_size, carryin, verilog);
   else if (final_stage_adder.compare ("JSkCond") == 0)
     create_JSkCond_adder (adder_size, carryin, verilog);
  else{
    cout << "Bad Final Stage Adder Selection!" << endl;
    return 1;
  }

  string module_name = final_stage_adder+"_"+to_string(adder_size)+ (carryin?"_carry":"");
  
  verilog.push ("module "+module_name+"_spec (");
  verilog.push("indent");
  verilog.push("indent");
  if(carryin)
    verilog.push ("input logic carryin,");
  verilog.push ("input logic [" + to_string(adder_size-1) + ":0] IN1,");
  verilog.push ("input logic [" + to_string(adder_size-1) +  ":0] IN2,");
  verilog.push ("output logic adder_correct,");
  verilog.push ("output logic ["  + to_string(adder_size) +  ":0] spec_res);");
  verilog.push("outdent");
  verilog.push("");
  verilog.push((string)"assign spec_res = IN1 + IN2" + (string)(carryin?" + carryin;":";"));
  verilog.push("wire ["  + to_string(adder_size) +  ":0] adder_res;");
  verilog.push(module_name + " adder("+(carryin?"carryin, ":"")+"IN1, IN2, adder_res);");
  verilog.push("assign adder_correct = ((spec_res == adder_res) ? 1 : 0);");
  verilog.push("");
  verilog.push("outdent");
  verilog.push ("endmodule");
  verilog.push("");

  verilog.push ("\n");

  cout << endl;
  cout << "Adder Module (" << module_name << ") is created." << endl;
  cout << "   Inputs: IN1[" << adder_size-1 << ":0], IN2[" << adder_size-1 << ":0]" << (carryin?", carryin":"")<< endl;
  cout << "   Output: result[" <<adder_size << ":0]" << endl;
  cout << "   Function: result=IN1 + IN2" << (carryin?" + carryin":"") << endl;

  return 0;

}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x6b0, %rsp            # imm = 0x6B0
movq %rdi, -0x528(%rbp)
movb %sil, %al
movq %rdi, -0x10(%rbp)
andb $0x1, %al
movb %al, -0x11(%rbp)
movl %edx, -0x18(%rbp)
movq %rcx, -0x20(%rbp)
leaq 0x4f845(%rip), %rsi     # 0x57321
callq 0x30b0
cmpl $0x0, %eax
jne 0x7aff
movl -0x18(%rbp), %edi
movb -0x11(%rbp), %al
movq -0x20(%rbp), %rdx
andb $0x1, %al
movzbl %al, %esi
callq 0x23560
jmp 0x7c26
movq -0x528(%rbp), %rdi
leaq 0x4fbcf(%rip), %rsi     # 0x576dc
callq 0x30b0
cmpl $0x0, %eax
jne 0x7b30
movl -0x18(%rbp), %edi
movb -0x11(%rbp), %al
movq -0x20(%rbp), %rdx
andb $0x1, %al
movzbl %al, %esi
callq 0x263e0
jmp 0x7c24
movq -0x528(%rbp), %rdi
leaq 0x4fba1(%rip), %rsi     # 0x576df
callq 0x30b0
cmpl $0x0, %eax
jne 0x7b61
movl -0x18(%rbp), %edi
movb -0x11(%rbp), %al
movq -0x20(%rbp), %rdx
andb $0x1, %al
movzbl %al, %esi
callq 0x287f0
jmp 0x7c22
movq -0x528(%rbp), %rdi
leaq 0x4fb73(%rip), %rsi     # 0x576e2
callq 0x30b0
cmpl $0x0, %eax
jne 0x7b92
movl -0x18(%rbp), %edi
movb -0x11(%rbp), %al
movq -0x20(%rbp), %rdx
andb $0x1, %al
movzbl %al, %esi
callq 0x29a60
jmp 0x7c20
movq -0x528(%rbp), %rdi
leaq 0x4fb45(%rip), %rsi     # 0x576e5
callq 0x30b0
cmpl $0x0, %eax
jne 0x7bc0
movl -0x18(%rbp), %edi
movb -0x11(%rbp), %al
movq -0x20(%rbp), %rdx
andb $0x1, %al
movzbl %al, %esi
callq 0x2ac30
jmp 0x7c1e
movq -0x528(%rbp), %rdi
leaq 0x4fb1a(%rip), %rsi     # 0x576e8
callq 0x30b0
cmpl $0x0, %eax
jne 0x7bee
movl -0x18(%rbp), %edi
movb -0x11(%rbp), %al
movq -0x20(%rbp), %rdx
andb $0x1, %al
movzbl %al, %esi
callq 0x2cda0
jmp 0x7c1c
movq 0x5e3d3(%rip), %rdi     # 0x65fc8
leaq 0x50087(%rip), %rsi     # 0x57c83
callq 0x3250
movq %rax, %rdi
movq 0x5e3ad(%rip), %rsi     # 0x65fb8
callq 0x3280
movl $0x1, -0x4(%rbp)
jmp 0x8e42
jmp 0x7c1e
jmp 0x7c20
jmp 0x7c22
jmp 0x7c24
jmp 0x7c26
movq -0x528(%rbp), %rsi
leaq 0x51522(%rip), %rdx     # 0x59156
leaq -0x80(%rbp), %rdi
callq 0x1e680
movl -0x18(%rbp), %esi
leaq -0xa0(%rbp), %rdi
callq 0x1e700
jmp 0x7c4e
leaq -0x60(%rbp), %rdi
leaq -0x80(%rbp), %rsi
leaq -0xa0(%rbp), %rdx
callq 0x1e5b0
jmp 0x7c64
movb -0x11(%rbp), %cl
leaq 0x50036(%rip), %rax     # 0x57ca4
leaq 0x5196c(%rip), %rdx     # 0x595e1
testb $0x1, %cl
cmovneq %rax, %rdx
leaq -0x40(%rbp), %rdi
leaq -0x60(%rbp), %rsi
callq 0x1e560
jmp 0x7c8b
leaq -0x60(%rbp), %rdi
callq 0x31a0
leaq -0xa0(%rbp), %rdi
callq 0x31a0
leaq -0x80(%rbp), %rdi
callq 0x31a0
movq -0x20(%rbp), %rax
movq %rax, -0x530(%rbp)
leaq 0x4fff0(%rip), %rsi     # 0x57cab
leaq -0xf0(%rbp), %rdi
leaq -0x40(%rbp), %rdx
callq 0x1e820
jmp 0x7ccd
leaq 0x4ffdf(%rip), %rdx     # 0x57cb3
leaq -0xd0(%rbp), %rdi
leaq -0xf0(%rbp), %rsi
callq 0x1e560
jmp 0x7ce9
movq -0x530(%rbp), %rdi
leaq -0xd0(%rbp), %rsi
callq 0x1e3c0
jmp 0x7cfe
leaq -0xd0(%rbp), %rdi
callq 0x31a0
leaq -0xf0(%rbp), %rdi
callq 0x31a0
movq -0x20(%rbp), %rax
movq %rax, -0x540(%rbp)
leaq -0x111(%rbp), %rdi
movq %rdi, -0x538(%rbp)
callq 0x3430
movq -0x538(%rbp), %rdx
leaq 0x4ff79(%rip), %rsi     # 0x57cbb
leaq -0x110(%rbp), %rdi
callq 0x3320
jmp 0x7d50
movq -0x540(%rbp), %rdi
leaq -0x110(%rbp), %rsi
callq 0x1e3c0
jmp 0x7d65
leaq -0x110(%rbp), %rdi
callq 0x31a0
leaq -0x111(%rbp), %rdi
callq 0x32a0
movq -0x20(%rbp), %rax
movq %rax, -0x550(%rbp)
leaq -0x139(%rbp), %rdi
movq %rdi, -0x548(%rbp)
callq 0x3430
movq -0x548(%rbp), %rdx
leaq 0x4ff12(%rip), %rsi     # 0x57cbb
leaq -0x138(%rbp), %rdi
callq 0x3320
jmp 0x7db7
movq -0x550(%rbp), %rdi
leaq -0x138(%rbp), %rsi
callq 0x1e3c0
jmp 0x7dcc
leaq -0x138(%rbp), %rdi
callq 0x31a0
leaq -0x139(%rbp), %rdi
callq 0x32a0
testb $0x1, -0x11(%rbp)
je 0x7fda
movq -0x20(%rbp), %rax
movq %rax, -0x560(%rbp)
leaq -0x161(%rbp), %rdi
movq %rdi, -0x558(%rbp)
callq 0x3430
movq -0x558(%rbp), %rdx
leaq 0x4fea8(%rip), %rsi     # 0x57cc2
leaq -0x160(%rbp), %rdi
callq 0x3320
jmp 0x7e28
movq -0x560(%rbp), %rdi
leaq -0x160(%rbp), %rsi
callq 0x1e3c0
jmp 0x7e3d
leaq -0x160(%rbp), %rdi
callq 0x31a0
leaq -0x161(%rbp), %rdi
callq 0x32a0
jmp 0x7fda
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa8(%rbp)
movl %eax, -0xac(%rbp)
jmp 0x7ea9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa8(%rbp)
movl %eax, -0xac(%rbp)
jmp 0x7e9d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa8(%rbp)
movl %eax, -0xac(%rbp)
leaq -0x60(%rbp), %rdi
callq 0x31a0
leaq -0xa0(%rbp), %rdi
callq 0x31a0
leaq -0x80(%rbp), %rdi
callq 0x31a0
jmp 0x8e4e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa8(%rbp)
movl %eax, -0xac(%rbp)
jmp 0x8e37
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa8(%rbp)
movl %eax, -0xac(%rbp)
jmp 0x7f00
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa8(%rbp)
movl %eax, -0xac(%rbp)
leaq -0xd0(%rbp), %rdi
callq 0x31a0
leaq -0xf0(%rbp), %rdi
callq 0x31a0
jmp 0x8e37
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa8(%rbp)
movl %eax, -0xac(%rbp)
jmp 0x7f43
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa8(%rbp)
movl %eax, -0xac(%rbp)
leaq -0x110(%rbp), %rdi
callq 0x31a0
leaq -0x111(%rbp), %rdi
callq 0x32a0
jmp 0x8e37
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa8(%rbp)
movl %eax, -0xac(%rbp)
jmp 0x7f86
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa8(%rbp)
movl %eax, -0xac(%rbp)
leaq -0x138(%rbp), %rdi
callq 0x31a0
leaq -0x139(%rbp), %rdi
callq 0x32a0
jmp 0x8e37
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa8(%rbp)
movl %eax, -0xac(%rbp)
jmp 0x7fc9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa8(%rbp)
movl %eax, -0xac(%rbp)
leaq -0x160(%rbp), %rdi
callq 0x31a0
leaq -0x161(%rbp), %rdi
callq 0x32a0
jmp 0x8e37
movq -0x20(%rbp), %rax
movq %rax, -0x568(%rbp)
movl -0x18(%rbp), %esi
decl %esi
leaq -0x1c8(%rbp), %rdi
callq 0x1e700
jmp 0x7ff8
leaq 0x4fcd8(%rip), %rsi     # 0x57cd7
leaq -0x1a8(%rbp), %rdi
leaq -0x1c8(%rbp), %rdx
callq 0x1e930
jmp 0x8014
leaq 0x4fcca(%rip), %rdx     # 0x57ce5
leaq -0x188(%rbp), %rdi
leaq -0x1a8(%rbp), %rsi
callq 0x1e560
jmp 0x8030
movq -0x568(%rbp), %rdi
leaq -0x188(%rbp), %rsi
callq 0x1e3c0
jmp 0x8045
leaq -0x188(%rbp), %rdi
callq 0x31a0
leaq -0x1a8(%rbp), %rdi
callq 0x31a0
leaq -0x1c8(%rbp), %rdi
callq 0x31a0
movq -0x20(%rbp), %rax
movq %rax, -0x570(%rbp)
movl -0x18(%rbp), %esi
decl %esi
leaq -0x228(%rbp), %rdi
callq 0x1e700
jmp 0x8087
leaq 0x4fc49(%rip), %rsi     # 0x57cd7
leaq -0x208(%rbp), %rdi
leaq -0x228(%rbp), %rdx
callq 0x1e930
jmp 0x80a3
leaq 0x4fc44(%rip), %rdx     # 0x57cee
leaq -0x1e8(%rbp), %rdi
leaq -0x208(%rbp), %rsi
callq 0x1e560
jmp 0x80bf
movq -0x570(%rbp), %rdi
leaq -0x1e8(%rbp), %rsi
callq 0x1e3c0
jmp 0x80d4
leaq -0x1e8(%rbp), %rdi
callq 0x31a0
leaq -0x208(%rbp), %rdi
callq 0x31a0
leaq -0x228(%rbp), %rdi
callq 0x31a0
movq -0x20(%rbp), %rax
movq %rax, -0x580(%rbp)
leaq -0x249(%rbp), %rdi
movq %rdi, -0x578(%rbp)
callq 0x3430
movq -0x578(%rbp), %rdx
leaq 0x4fbd3(%rip), %rsi     # 0x57cf7
leaq -0x248(%rbp), %rdi
callq 0x3320
jmp 0x8132
movq -0x580(%rbp), %rdi
leaq -0x248(%rbp), %rsi
callq 0x1e3c0
jmp 0x8147
leaq -0x248(%rbp), %rdi
callq 0x31a0
leaq -0x249(%rbp), %rdi
callq 0x32a0
movq -0x20(%rbp), %rax
movq %rax, -0x588(%rbp)
movl -0x18(%rbp), %esi
leaq -0x2b0(%rbp), %rdi
callq 0x1e700
jmp 0x817b
leaq 0x4fb91(%rip), %rsi     # 0x57d13
leaq -0x290(%rbp), %rdi
leaq -0x2b0(%rbp), %rdx
callq 0x1e930
jmp 0x8197
leaq 0x4fb84(%rip), %rdx     # 0x57d22
leaq -0x270(%rbp), %rdi
leaq -0x290(%rbp), %rsi
callq 0x1e560
jmp 0x81b3
movq -0x588(%rbp), %rdi
leaq -0x270(%rbp), %rsi
callq 0x1e3c0
jmp 0x81c8
leaq -0x270(%rbp), %rdi
callq 0x31a0
leaq -0x290(%rbp), %rdi
callq 0x31a0
leaq -0x2b0(%rbp), %rdi
callq 0x31a0
movq -0x20(%rbp), %rax
movq %rax, -0x598(%rbp)
leaq -0x2d1(%rbp), %rdi
movq %rdi, -0x590(%rbp)
callq 0x3430
movq -0x590(%rbp), %rdx
leaq 0x4fb19(%rip), %rsi     # 0x57d31
leaq -0x2d0(%rbp), %rdi
callq 0x3320
jmp 0x8226
movq -0x598(%rbp), %rdi
leaq -0x2d0(%rbp), %rsi
callq 0x1e3c0
jmp 0x823b
leaq -0x2d0(%rbp), %rdi
callq 0x31a0
leaq -0x2d1(%rbp), %rdi
callq 0x32a0
movq -0x20(%rbp), %rax
movq %rax, -0x5a8(%rbp)
leaq -0x2f9(%rbp), %rdi
movq %rdi, -0x5a0(%rbp)
callq 0x3430
movq -0x5a0(%rbp), %rdx
leaq 0x51362(%rip), %rsi     # 0x595e1
leaq -0x2f8(%rbp), %rdi
callq 0x3320
jmp 0x828d
movq -0x5a8(%rbp), %rdi
leaq -0x2f8(%rbp), %rsi
callq 0x1e3c0
jmp 0x82a2
leaq -0x2f8(%rbp), %rdi
callq 0x31a0
leaq -0x2f9(%rbp), %rdi
callq 0x32a0
movq -0x20(%rbp), %rax
movq %rax, -0x5b8(%rbp)
leaq -0x341(%rbp), %rdi
movq %rdi, -0x5b0(%rbp)
callq 0x3430
movq -0x5b0(%rbp), %rdx
leaq 0x4fa53(%rip), %rsi     # 0x57d39
leaq -0x340(%rbp), %rdi
callq 0x3320
jmp 0x82f4
movb -0x11(%rbp), %dl
leaq 0x4fa57(%rip), %rcx     # 0x57d55
leaq 0x51406(%rip), %rax     # 0x5970b
testb $0x1, %dl
cmovneq %rcx, %rax
movq %rax, -0x5c8(%rbp)
leaq -0x369(%rbp), %rdi
movq %rdi, -0x5c0(%rbp)
callq 0x3430
movq -0x5c8(%rbp), %rsi
movq -0x5c0(%rbp), %rdx
leaq -0x368(%rbp), %rdi
callq 0x3320
jmp 0x8342
leaq -0x320(%rbp), %rdi
leaq -0x340(%rbp), %rsi
leaq -0x368(%rbp), %rdx
callq 0x1e5b0
jmp 0x835e
movq -0x5b8(%rbp), %rdi
leaq -0x320(%rbp), %rsi
callq 0x1e3c0
jmp 0x8373
leaq -0x320(%rbp), %rdi
callq 0x31a0
leaq -0x368(%rbp), %rdi
callq 0x31a0
leaq -0x369(%rbp), %rdi
callq 0x32a0
leaq -0x340(%rbp), %rdi
callq 0x31a0
leaq -0x341(%rbp), %rdi
callq 0x32a0
movq -0x20(%rbp), %rax
movq %rax, -0x5d0(%rbp)
movl -0x18(%rbp), %esi
leaq -0x3d0(%rbp), %rdi
callq 0x1e700
jmp 0x83cb
leaq 0x4f98f(%rip), %rsi     # 0x57d61
leaq -0x3b0(%rbp), %rdi
leaq -0x3d0(%rbp), %rdx
callq 0x1e930
jmp 0x83e7
leaq 0x4f97a(%rip), %rdx     # 0x57d68
leaq -0x390(%rbp), %rdi
leaq -0x3b0(%rbp), %rsi
callq 0x1e560
jmp 0x8403
movq -0x5d0(%rbp), %rdi
leaq -0x390(%rbp), %rsi
callq 0x1e3c0
jmp 0x8418
leaq -0x390(%rbp), %rdi
callq 0x31a0
leaq -0x3b0(%rbp), %rdi
callq 0x31a0
leaq -0x3d0(%rbp), %rdi
callq 0x31a0
movq -0x20(%rbp), %rax
movq %rax, -0x5d8(%rbp)
leaq 0x4f929(%rip), %rdx     # 0x57d77
leaq -0x430(%rbp), %rdi
leaq -0x40(%rbp), %rsi
callq 0x1e680
jmp 0x8460
movb -0x11(%rbp), %cl
leaq 0x4f915(%rip), %rax     # 0x57d7f
leaq 0x51170(%rip), %rdx     # 0x595e1
testb $0x1, %cl
cmovneq %rax, %rdx
leaq -0x410(%rbp), %rdi
leaq -0x430(%rbp), %rsi
callq 0x1e560
jmp 0x848d
leaq 0x4f8f5(%rip), %rdx     # 0x57d89
leaq -0x3f0(%rbp), %rdi
leaq -0x410(%rbp), %rsi
callq 0x1e560
jmp 0x84a9
movq -0x5d8(%rbp), %rdi
leaq -0x3f0(%rbp), %rsi
callq 0x1e3c0
jmp 0x84be
leaq -0x3f0(%rbp), %rdi
callq 0x31a0
leaq -0x410(%rbp), %rdi
callq 0x31a0
leaq -0x430(%rbp), %rdi
callq 0x31a0
movq -0x20(%rbp), %rax
movq %rax, -0x5e8(%rbp)
leaq -0x451(%rbp), %rdi
movq %rdi, -0x5e0(%rbp)
callq 0x3430
movq -0x5e0(%rbp), %rdx
leaq 0x4f891(%rip), %rsi     # 0x57d9f
leaq -0x450(%rbp), %rdi
callq 0x3320
jmp 0x851c
movq -0x5e8(%rbp), %rdi
leaq -0x450(%rbp), %rsi
callq 0x1e3c0
jmp 0x8531
leaq -0x450(%rbp), %rdi
callq 0x31a0
leaq -0x451(%rbp), %rdi
callq 0x32a0
movq -0x20(%rbp), %rax
movq %rax, -0x5f8(%rbp)
leaq -0x479(%rbp), %rdi
movq %rdi, -0x5f0(%rbp)
callq 0x3430
movq -0x5f0(%rbp), %rdx
leaq 0x5106c(%rip), %rsi     # 0x595e1
leaq -0x478(%rbp), %rdi
callq 0x3320
jmp 0x8583
movq -0x5f8(%rbp), %rdi
leaq -0x478(%rbp), %rsi
callq 0x1e3c0
jmp 0x8598
leaq -0x478(%rbp), %rdi
callq 0x31a0
leaq -0x479(%rbp), %rdi
callq 0x32a0
movq -0x20(%rbp), %rax
movq %rax, -0x608(%rbp)
leaq -0x4a1(%rbp), %rdi
movq %rdi, -0x600(%rbp)
callq 0x3430
movq -0x600(%rbp), %rdx
leaq 0x4f755(%rip), %rsi     # 0x57d31
leaq -0x4a0(%rbp), %rdi
callq 0x3320
jmp 0x85ea
movq -0x608(%rbp), %rdi
leaq -0x4a0(%rbp), %rsi
callq 0x1e3c0
jmp 0x85ff
leaq -0x4a0(%rbp), %rdi
callq 0x31a0
leaq -0x4a1(%rbp), %rdi
callq 0x32a0
movq -0x20(%rbp), %rax
movq %rax, -0x618(%rbp)
leaq -0x4c9(%rbp), %rdi
movq %rdi, -0x610(%rbp)
callq 0x3430
movq -0x610(%rbp), %rdx
leaq 0x4f796(%rip), %rsi     # 0x57dd9
leaq -0x4c8(%rbp), %rdi
callq 0x3320
jmp 0x8651
movq -0x618(%rbp), %rdi
leaq -0x4c8(%rbp), %rsi
callq 0x1e3c0
jmp 0x8666
leaq -0x4c8(%rbp), %rdi
callq 0x31a0
leaq -0x4c9(%rbp), %rdi
callq 0x32a0
movq -0x20(%rbp), %rax
movq %rax, -0x628(%rbp)
leaq -0x4f1(%rbp), %rdi
movq %rdi, -0x620(%rbp)
callq 0x3430
movq -0x620(%rbp), %rdx
leaq 0x50f37(%rip), %rsi     # 0x595e1
leaq -0x4f0(%rbp), %rdi
callq 0x3320
jmp 0x86b8
movq -0x628(%rbp), %rdi
leaq -0x4f0(%rbp), %rsi
callq 0x1e3c0
jmp 0x86cd
leaq -0x4f0(%rbp), %rdi
callq 0x31a0
leaq -0x4f1(%rbp), %rdi
callq 0x32a0
movq -0x20(%rbp), %rax
movq %rax, -0x638(%rbp)
leaq -0x519(%rbp), %rdi
movq %rdi, -0x630(%rbp)
callq 0x3430
movq -0x630(%rbp), %rdx
leaq 0x4e169(%rip), %rsi     # 0x5687a
leaq -0x518(%rbp), %rdi
callq 0x3320
jmp 0x871f
movq -0x638(%rbp), %rdi
leaq -0x518(%rbp), %rsi
callq 0x1e3c0
jmp 0x8734
leaq -0x518(%rbp), %rdi
callq 0x31a0
leaq -0x519(%rbp), %rdi
callq 0x32a0
movq 0x5d875(%rip), %rdi     # 0x65fc8
movq 0x5d85e(%rip), %rsi     # 0x65fb8
callq 0x3280
jmp 0x8761
movq 0x5d860(%rip), %rdi     # 0x65fc8
leaq 0x4f674(%rip), %rsi     # 0x57de3
callq 0x3250
movq %rax, -0x640(%rbp)
jmp 0x877d
movq -0x640(%rbp), %rdi
leaq -0x40(%rbp), %rsi
callq 0x3210
movq %rax, -0x648(%rbp)
jmp 0x8796
movq -0x648(%rbp), %rdi
leaq 0x4f64e(%rip), %rsi     # 0x57df2
callq 0x3250
movq %rax, -0x650(%rbp)
jmp 0x87b2
movq -0x650(%rbp), %rdi
movq 0x5d7f8(%rip), %rsi     # 0x65fb8
callq 0x3280
jmp 0x87c7
movq 0x5d7fa(%rip), %rdi     # 0x65fc8
leaq 0x4f62b(%rip), %rsi     # 0x57e00
callq 0x3250
movq %rax, -0x658(%rbp)
jmp 0x87e3
movq -0x658(%rbp), %rdi
movl -0x18(%rbp), %esi
decl %esi
callq 0x3410
movq %rax, -0x660(%rbp)
jmp 0x87fd
movq -0x660(%rbp), %rdi
leaq 0x4f605(%rip), %rsi     # 0x57e10
callq 0x3250
movq %rax, -0x668(%rbp)
jmp 0x8819
movq -0x668(%rbp), %rdi
movl -0x18(%rbp), %esi
decl %esi
callq 0x3410
movq %rax, -0x670(%rbp)
jmp 0x8833
movq -0x670(%rbp), %rdi
leaq 0x4f5d9(%rip), %rsi     # 0x57e1a
callq 0x3250
movq %rax, -0x678(%rbp)
jmp 0x884f
movq -0x678(%rbp), %rdi
movb -0x11(%rbp), %cl
leaq 0x4f5be(%rip), %rax     # 0x57e1e
leaq 0x50d7a(%rip), %rsi     # 0x595e1
testb $0x1, %cl
cmovneq %rax, %rsi
callq 0x3250
movq %rax, -0x680(%rbp)
jmp 0x887c
movq -0x680(%rbp), %rdi
movq 0x5d72e(%rip), %rsi     # 0x65fb8
callq 0x3280
jmp 0x8891
movq 0x5d730(%rip), %rdi     # 0x65fc8
leaq 0x4f589(%rip), %rsi     # 0x57e28
callq 0x3250
movq %rax, -0x688(%rbp)
jmp 0x88ad
movq -0x688(%rbp), %rdi
movl -0x18(%rbp), %esi
callq 0x3410
movq %rax, -0x690(%rbp)
jmp 0x88c5
movq -0x690(%rbp), %rdi
leaq 0x4f547(%rip), %rsi     # 0x57e1a
callq 0x3250
movq %rax, -0x698(%rbp)
jmp 0x88e1
movq -0x698(%rbp), %rdi
movq 0x5d6c9(%rip), %rsi     # 0x65fb8
callq 0x3280
jmp 0x88f6
movq 0x5d6cb(%rip), %rdi     # 0x65fc8
leaq 0x4f537(%rip), %rsi     # 0x57e3b
callq 0x3250
movq %rax, -0x6a0(%rbp)
jmp 0x8912
movq -0x6a0(%rbp), %rdi
movb -0x11(%rbp), %cl
leaq 0x4f536(%rip), %rax     # 0x57e59
leaq 0x50cb7(%rip), %rsi     # 0x595e1
testb $0x1, %cl
cmovneq %rax, %rsi
callq 0x3250
movq %rax, -0x6a8(%rbp)
jmp 0x893f
movq -0x6a8(%rbp), %rdi
movq 0x5d66b(%rip), %rsi     # 0x65fb8
callq 0x3280
jmp 0x8954
movl $0x0, -0x4(%rbp)
leaq -0x40(%rbp), %rdi
callq 0x31a0
jmp 0x8e42
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa8(%rbp)
movl %eax, -0xac(%rbp)
jmp 0x89bb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa8(%rbp)
movl %eax, -0xac(%rbp)
jmp 0x89af
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa8(%rbp)
movl %eax, -0xac(%rbp)
leaq -0x188(%rbp), %rdi
callq 0x31a0
leaq -0x1a8(%rbp), %rdi
callq 0x31a0
leaq -0x1c8(%rbp), %rdi
callq 0x31a0
jmp 0x8e37
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa8(%rbp)
movl %eax, -0xac(%rbp)
jmp 0x8a1e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa8(%rbp)
movl %eax, -0xac(%rbp)
jmp 0x8a12
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa8(%rbp)
movl %eax, -0xac(%rbp)
leaq -0x1e8(%rbp), %rdi
callq 0x31a0
leaq -0x208(%rbp), %rdi
callq 0x31a0
leaq -0x228(%rbp), %rdi
callq 0x31a0
jmp 0x8e37
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa8(%rbp)
movl %eax, -0xac(%rbp)
jmp 0x8a61
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa8(%rbp)
movl %eax, -0xac(%rbp)
leaq -0x248(%rbp), %rdi
callq 0x31a0
leaq -0x249(%rbp), %rdi
callq 0x32a0
jmp 0x8e37
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa8(%rbp)
movl %eax, -0xac(%rbp)
jmp 0x8ac4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa8(%rbp)
movl %eax, -0xac(%rbp)
jmp 0x8ab8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa8(%rbp)
movl %eax, -0xac(%rbp)
leaq -0x270(%rbp), %rdi
callq 0x31a0
leaq -0x290(%rbp), %rdi
callq 0x31a0
leaq -0x2b0(%rbp), %rdi
callq 0x31a0
jmp 0x8e37
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa8(%rbp)
movl %eax, -0xac(%rbp)
jmp 0x8b07
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa8(%rbp)
movl %eax, -0xac(%rbp)
leaq -0x2d0(%rbp), %rdi
callq 0x31a0
leaq -0x2d1(%rbp), %rdi
callq 0x32a0
jmp 0x8e37
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa8(%rbp)
movl %eax, -0xac(%rbp)
jmp 0x8b4a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa8(%rbp)
movl %eax, -0xac(%rbp)
leaq -0x2f8(%rbp), %rdi
callq 0x31a0
leaq -0x2f9(%rbp), %rdi
callq 0x32a0
jmp 0x8e37
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa8(%rbp)
movl %eax, -0xac(%rbp)
jmp 0x8bd9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa8(%rbp)
movl %eax, -0xac(%rbp)
jmp 0x8bc1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa8(%rbp)
movl %eax, -0xac(%rbp)
jmp 0x8bb5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa8(%rbp)
movl %eax, -0xac(%rbp)
leaq -0x320(%rbp), %rdi
callq 0x31a0
leaq -0x368(%rbp), %rdi
callq 0x31a0
leaq -0x369(%rbp), %rdi
callq 0x32a0
leaq -0x340(%rbp), %rdi
callq 0x31a0
leaq -0x341(%rbp), %rdi
callq 0x32a0
jmp 0x8e37
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa8(%rbp)
movl %eax, -0xac(%rbp)
jmp 0x8c3c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa8(%rbp)
movl %eax, -0xac(%rbp)
jmp 0x8c30
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa8(%rbp)
movl %eax, -0xac(%rbp)
leaq -0x390(%rbp), %rdi
callq 0x31a0
leaq -0x3b0(%rbp), %rdi
callq 0x31a0
leaq -0x3d0(%rbp), %rdi
callq 0x31a0
jmp 0x8e37
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa8(%rbp)
movl %eax, -0xac(%rbp)
jmp 0x8c9f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa8(%rbp)
movl %eax, -0xac(%rbp)
jmp 0x8c93
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa8(%rbp)
movl %eax, -0xac(%rbp)
leaq -0x3f0(%rbp), %rdi
callq 0x31a0
leaq -0x410(%rbp), %rdi
callq 0x31a0
leaq -0x430(%rbp), %rdi
callq 0x31a0
jmp 0x8e37
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa8(%rbp)
movl %eax, -0xac(%rbp)
jmp 0x8ce2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa8(%rbp)
movl %eax, -0xac(%rbp)
leaq -0x450(%rbp), %rdi
callq 0x31a0
leaq -0x451(%rbp), %rdi
callq 0x32a0
jmp 0x8e37
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa8(%rbp)
movl %eax, -0xac(%rbp)
jmp 0x8d25
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa8(%rbp)
movl %eax, -0xac(%rbp)
leaq -0x478(%rbp), %rdi
callq 0x31a0
leaq -0x479(%rbp), %rdi
callq 0x32a0
jmp 0x8e37
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa8(%rbp)
movl %eax, -0xac(%rbp)
jmp 0x8d68
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa8(%rbp)
movl %eax, -0xac(%rbp)
leaq -0x4a0(%rbp), %rdi
callq 0x31a0
leaq -0x4a1(%rbp), %rdi
callq 0x32a0
jmp 0x8e37
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa8(%rbp)
movl %eax, -0xac(%rbp)
jmp 0x8dab
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa8(%rbp)
movl %eax, -0xac(%rbp)
leaq -0x4c8(%rbp), %rdi
callq 0x31a0
leaq -0x4c9(%rbp), %rdi
callq 0x32a0
jmp 0x8e37
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa8(%rbp)
movl %eax, -0xac(%rbp)
jmp 0x8deb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa8(%rbp)
movl %eax, -0xac(%rbp)
leaq -0x4f0(%rbp), %rdi
callq 0x31a0
leaq -0x4f1(%rbp), %rdi
callq 0x32a0
jmp 0x8e37
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa8(%rbp)
movl %eax, -0xac(%rbp)
jmp 0x8e2b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa8(%rbp)
movl %eax, -0xac(%rbp)
leaq -0x518(%rbp), %rdi
callq 0x31a0
leaq -0x519(%rbp), %rdi
callq 0x32a0
leaq -0x40(%rbp), %rdi
callq 0x31a0
jmp 0x8e4e
movl -0x4(%rbp), %eax
addq $0x6b0, %rsp            # imm = 0x6B0
popq %rbp
retq
movq -0xa8(%rbp), %rdi
callq 0x3420
nopw (%rax,%rax)