// File: temelmertcan[P]multgen/src/adders.cpp
// Function: create_JSkCond_adder(int, 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>>>>>&)
void create_JSkCond_adder (int size, bool carryin, std::queue<string>& verilog){

  int index = 0;

  string* g = new string[size];
  string* p = new string[size];

  string* gtmp = new string[size];
  string* ptmp = new string[size];


  ppx_preprocess(size,  carryin,  index, "JSkCond", gtmp, ptmp, verilog);
  pgtmp_to_pg(size, gtmp, g);
  pgtmp_to_pg(size, ptmp, p);

  verilog.push("");
  verilog.push("// J. Sklansky – Conditional Adder \n");

  int stage=0;

  
  unsigned long long coef;
  for (coef = 1; coef < size; coef *= 2){
    verilog.push("");
    verilog.push("// Stage " + to_string(++stage)+ " - prop from 1 to " + to_string(coef) + " per group.");

    for (int i=coef; i < size; i++){
      //verilog.push("i:" + to_string(i));

      if((i)/coef % 2 == 0)
        continue;
      int prev = i - (i % coef) - 1;

      string new_p = "p_" + to_string(stage)+ "_" + to_string(i);
      string new_g = "g_" + to_string(stage)+ "_" + to_string(i);

      verilog.push ("wire logic "+ new_p + ";");
      verilog.push ("wire logic "+ new_g + ";");

      verilog.push ("assign "+ new_p + " = " + p[i] + " & " + p[prev] + ";");
      verilog.push ("assign "+ new_g + " = (" + p[i] + " & " + g[prev] + ") | " + g[i] + ";");

      gtmp[i] =  new_g;
      ptmp[i] =  new_p;
    }

    pgtmp_to_pg(size, gtmp, g);
    pgtmp_to_pg(size, ptmp, p);
  }

  verilog.push("");
  verilog.push("// JSkCondA postprocess ");

  ppx_postprocess (size, index, g, p, verilog);

  delete[] p;
  delete[] g;

  delete[] ptmp;
  delete[] gtmp;

}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x750, %rsp            # imm = 0x750
movb %sil, %al
movl %edi, -0x4(%rbp)
andb $0x1, %al
movb %al, -0x5(%rbp)
movq %rdx, -0x10(%rbp)
movl $0x0, -0x14(%rbp)
movslq -0x4(%rbp), %rax
movq %rax, -0x598(%rbp)
movl $0x20, %ecx
mulq %rcx
movq %rax, %rdi
seto %cl
addq $0x8, %rdi
setb %al
orb %al, %cl
movq $-0x1, %rax
testb $0x1, %cl
cmovneq %rax, %rdi
callq 0x3030
movq %rax, %rcx
movq -0x598(%rbp), %rax
movq %rax, (%rcx)
addq $0x8, %rcx
movq %rcx, -0x590(%rbp)
cmpq $0x0, %rax
je 0x2ce6b
movq -0x590(%rbp), %rax
movq -0x598(%rbp), %rdx
shlq $0x5, %rdx
movq %rax, %rcx
addq %rdx, %rcx
movq %rcx, -0x5a8(%rbp)
movq %rax, -0x5a0(%rbp)
movq -0x5a0(%rbp), %rdi
movq %rdi, -0x5b0(%rbp)
callq 0x3330
movq -0x5b0(%rbp), %rax
movq -0x5a8(%rbp), %rcx
addq $0x20, %rax
cmpq %rcx, %rax
movq %rax, -0x5a0(%rbp)
jne 0x2ce3a
movq -0x590(%rbp), %rax
movq %rax, -0x20(%rbp)
movslq -0x4(%rbp), %rax
movq %rax, -0x5c0(%rbp)
movl $0x20, %ecx
mulq %rcx
movq %rax, %rdi
seto %cl
addq $0x8, %rdi
setb %al
orb %al, %cl
movq $-0x1, %rax
testb $0x1, %cl
cmovneq %rax, %rdi
callq 0x3030
movq %rax, %rcx
movq -0x5c0(%rbp), %rax
movq %rax, (%rcx)
addq $0x8, %rcx
movq %rcx, -0x5b8(%rbp)
cmpq $0x0, %rax
je 0x2cf20
movq -0x5b8(%rbp), %rax
movq -0x5c0(%rbp), %rdx
shlq $0x5, %rdx
movq %rax, %rcx
addq %rdx, %rcx
movq %rcx, -0x5d0(%rbp)
movq %rax, -0x5c8(%rbp)
movq -0x5c8(%rbp), %rdi
movq %rdi, -0x5d8(%rbp)
callq 0x3330
movq -0x5d8(%rbp), %rax
movq -0x5d0(%rbp), %rcx
addq $0x20, %rax
cmpq %rcx, %rax
movq %rax, -0x5c8(%rbp)
jne 0x2ceef
movq -0x5b8(%rbp), %rax
movq %rax, -0x28(%rbp)
movslq -0x4(%rbp), %rax
movq %rax, -0x5e8(%rbp)
movl $0x20, %ecx
mulq %rcx
movq %rax, %rdi
seto %cl
addq $0x8, %rdi
setb %al
orb %al, %cl
movq $-0x1, %rax
testb $0x1, %cl
cmovneq %rax, %rdi
callq 0x3030
movq %rax, %rcx
movq -0x5e8(%rbp), %rax
movq %rax, (%rcx)
addq $0x8, %rcx
movq %rcx, -0x5e0(%rbp)
cmpq $0x0, %rax
je 0x2cfd5
movq -0x5e0(%rbp), %rax
movq -0x5e8(%rbp), %rdx
shlq $0x5, %rdx
movq %rax, %rcx
addq %rdx, %rcx
movq %rcx, -0x5f8(%rbp)
movq %rax, -0x5f0(%rbp)
movq -0x5f0(%rbp), %rdi
movq %rdi, -0x600(%rbp)
callq 0x3330
movq -0x600(%rbp), %rax
movq -0x5f8(%rbp), %rcx
addq $0x20, %rax
cmpq %rcx, %rax
movq %rax, -0x5f0(%rbp)
jne 0x2cfa4
movq -0x5e0(%rbp), %rax
movq %rax, -0x30(%rbp)
movslq -0x4(%rbp), %rax
movq %rax, -0x610(%rbp)
movl $0x20, %ecx
mulq %rcx
movq %rax, %rdi
seto %cl
addq $0x8, %rdi
setb %al
orb %al, %cl
movq $-0x1, %rax
testb $0x1, %cl
cmovneq %rax, %rdi
callq 0x3030
movq %rax, %rcx
movq -0x610(%rbp), %rax
movq %rax, (%rcx)
addq $0x8, %rcx
movq %rcx, -0x608(%rbp)
cmpq $0x0, %rax
je 0x2d08a
movq -0x608(%rbp), %rax
movq -0x610(%rbp), %rdx
shlq $0x5, %rdx
movq %rax, %rcx
addq %rdx, %rcx
movq %rcx, -0x620(%rbp)
movq %rax, -0x618(%rbp)
movq -0x618(%rbp), %rdi
movq %rdi, -0x628(%rbp)
callq 0x3330
movq -0x628(%rbp), %rax
movq -0x620(%rbp), %rcx
addq $0x20, %rax
cmpq %rcx, %rax
movq %rax, -0x618(%rbp)
jne 0x2d059
movq -0x608(%rbp), %rax
movq %rax, -0x38(%rbp)
movl -0x4(%rbp), %eax
movl %eax, -0x638(%rbp)
movb -0x5(%rbp), %al
movb %al, -0x631(%rbp)
leaq -0x59(%rbp), %rdi
movq %rdi, -0x630(%rbp)
callq 0x3430
movq -0x630(%rbp), %rdx
leaq 0x2a623(%rip), %rsi     # 0x576e8
leaq -0x58(%rbp), %rdi
callq 0x3320
jmp 0x2d0d0
movl -0x638(%rbp), %edi
movb -0x631(%rbp), %al
movq -0x10(%rbp), %rdx
movq %rsp, %rcx
movq %rdx, (%rcx)
movzbl %al, %esi
andl $0x1, %esi
leaq -0x14(%rbp), %rdx
leaq -0x58(%rbp), %rcx
leaq -0x30(%rbp), %r8
leaq -0x38(%rbp), %r9
callq 0x249e0
jmp 0x2d103
leaq -0x58(%rbp), %rdi
callq 0x31a0
leaq -0x59(%rbp), %rdi
callq 0x32a0
movl -0x4(%rbp), %edi
leaq -0x30(%rbp), %rsi
leaq -0x20(%rbp), %rdx
callq 0x26380
movl -0x4(%rbp), %edi
leaq -0x38(%rbp), %rsi
leaq -0x28(%rbp), %rdx
callq 0x26380
movq -0x10(%rbp), %rax
movq %rax, -0x648(%rbp)
leaq -0x91(%rbp), %rdi
movq %rdi, -0x640(%rbp)
callq 0x3430
movq -0x640(%rbp), %rdx
leaq 0x2c480(%rip), %rsi     # 0x595e1
leaq -0x90(%rbp), %rdi
callq 0x3320
jmp 0x2d16f
movq -0x648(%rbp), %rdi
leaq -0x90(%rbp), %rsi
callq 0x1e3c0
jmp 0x2d184
leaq -0x90(%rbp), %rdi
callq 0x31a0
leaq -0x91(%rbp), %rdi
callq 0x32a0
movq -0x10(%rbp), %rax
movq %rax, -0x658(%rbp)
leaq -0xb9(%rbp), %rdi
movq %rdi, -0x650(%rbp)
callq 0x3430
movq -0x650(%rbp), %rdx
leaq 0x2bbf2(%rip), %rsi     # 0x58dba
leaq -0xb8(%rbp), %rdi
callq 0x3320
jmp 0x2d1d6
movq -0x658(%rbp), %rdi
leaq -0xb8(%rbp), %rsi
callq 0x1e3c0
jmp 0x2d1eb
leaq -0xb8(%rbp), %rdi
callq 0x31a0
leaq -0xb9(%rbp), %rdi
callq 0x32a0
movl $0x0, -0xc0(%rbp)
movq $0x1, -0xc8(%rbp)
movq -0xc8(%rbp), %rax
movslq -0x4(%rbp), %rcx
cmpq %rcx, %rax
jae 0x2ddfd
movq -0x10(%rbp), %rax
movq %rax, -0x668(%rbp)
leaq -0xe9(%rbp), %rdi
movq %rdi, -0x660(%rbp)
callq 0x3430
movq -0x660(%rbp), %rdx
leaq 0x2c389(%rip), %rsi     # 0x595e1
leaq -0xe8(%rbp), %rdi
callq 0x3320
jmp 0x2d266
movq -0x668(%rbp), %rdi
leaq -0xe8(%rbp), %rsi
callq 0x1e3c0
jmp 0x2d27b
leaq -0xe8(%rbp), %rdi
callq 0x31a0
leaq -0xe9(%rbp), %rdi
callq 0x32a0
movq -0x10(%rbp), %rax
movq %rax, -0x678(%rbp)
movl -0xc0(%rbp), %esi
incl %esi
movl %esi, -0xc0(%rbp)
leaq -0x190(%rbp), %rdi
movq %rdi, -0x670(%rbp)
callq 0x1e700
movq -0x670(%rbp), %rdx
leaq 0x2ba82(%rip), %rsi     # 0x58d4f
leaq -0x170(%rbp), %rdi
callq 0x1e930
jmp 0x2d2db
leaq 0x2baff(%rip), %rdx     # 0x58de1
leaq -0x150(%rbp), %rdi
leaq -0x170(%rbp), %rsi
callq 0x1e560
jmp 0x2d2f7
movq -0xc8(%rbp), %rsi
leaq -0x1b0(%rbp), %rdi
callq 0x2e180
jmp 0x2d30c
leaq -0x130(%rbp), %rdi
leaq -0x150(%rbp), %rsi
leaq -0x1b0(%rbp), %rdx
callq 0x1e5b0
jmp 0x2d328
leaq 0x2bac5(%rip), %rdx     # 0x58df4
leaq -0x110(%rbp), %rdi
leaq -0x130(%rbp), %rsi
callq 0x1e560
jmp 0x2d344
movq -0x678(%rbp), %rdi
leaq -0x110(%rbp), %rsi
callq 0x1e3c0
jmp 0x2d359
leaq -0x110(%rbp), %rdi
callq 0x31a0
leaq -0x130(%rbp), %rdi
callq 0x31a0
leaq -0x1b0(%rbp), %rdi
callq 0x31a0
leaq -0x150(%rbp), %rdi
callq 0x31a0
leaq -0x170(%rbp), %rdi
callq 0x31a0
leaq -0x190(%rbp), %rdi
callq 0x31a0
movq -0xc8(%rbp), %rax
movl %eax, -0x1b4(%rbp)
movl -0x1b4(%rbp), %eax
cmpl -0x4(%rbp), %eax
jge 0x2ddc7
movslq -0x1b4(%rbp), %rax
xorl %ecx, %ecx
movl %ecx, %edx
divq -0xc8(%rbp)
andq $0x1, %rax
cmpq $0x0, %rax
jne 0x2d55a
jmp 0x2dab7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
jmp 0x2d405
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
leaq -0x58(%rbp), %rdi
callq 0x31a0
leaq -0x59(%rbp), %rdi
callq 0x32a0
jmp 0x2e146
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
jmp 0x2d439
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
leaq -0x90(%rbp), %rdi
callq 0x31a0
leaq -0x91(%rbp), %rdi
callq 0x32a0
jmp 0x2e146
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
jmp 0x2d470
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
leaq -0xb8(%rbp), %rdi
callq 0x31a0
leaq -0xb9(%rbp), %rdi
callq 0x32a0
jmp 0x2e146
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
jmp 0x2d4a7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
leaq -0xe8(%rbp), %rdi
callq 0x31a0
leaq -0xe9(%rbp), %rdi
callq 0x32a0
jmp 0x2e146
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
jmp 0x2d549
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
jmp 0x2d53d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
jmp 0x2d531
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
jmp 0x2d525
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
jmp 0x2d519
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
leaq -0x110(%rbp), %rdi
callq 0x31a0
leaq -0x130(%rbp), %rdi
callq 0x31a0
leaq -0x1b0(%rbp), %rdi
callq 0x31a0
leaq -0x150(%rbp), %rdi
callq 0x31a0
leaq -0x170(%rbp), %rdi
callq 0x31a0
leaq -0x190(%rbp), %rdi
callq 0x31a0
jmp 0x2e146
movslq -0x1b4(%rbp), %rax
movl %eax, %ecx
movq -0xc8(%rbp), %rsi
xorl %edx, %edx
divq %rsi
movl %edx, %eax
notl %eax
addl %ecx, %eax
movl %eax, -0x1b8(%rbp)
movl -0xc0(%rbp), %esi
leaq -0x238(%rbp), %rdi
movq %rdi, -0x680(%rbp)
callq 0x1e700
movq -0x680(%rbp), %rdx
leaq 0x2b01a(%rip), %rsi     # 0x585bc
leaq -0x218(%rbp), %rdi
callq 0x1e930
jmp 0x2d5b0
leaq 0x2bb9f(%rip), %rdx     # 0x59156
leaq -0x1f8(%rbp), %rdi
leaq -0x218(%rbp), %rsi
callq 0x1e560
jmp 0x2d5cc
movl -0x1b4(%rbp), %esi
leaq -0x258(%rbp), %rdi
callq 0x1e700
jmp 0x2d5e0
leaq -0x1d8(%rbp), %rdi
leaq -0x1f8(%rbp), %rsi
leaq -0x258(%rbp), %rdx
callq 0x1e5b0
jmp 0x2d5fc
leaq -0x258(%rbp), %rdi
callq 0x31a0
leaq -0x1f8(%rbp), %rdi
callq 0x31a0
leaq -0x218(%rbp), %rdi
callq 0x31a0
leaq -0x238(%rbp), %rdi
callq 0x31a0
movl -0xc0(%rbp), %esi
leaq -0x2d8(%rbp), %rdi
callq 0x1e700
jmp 0x2d640
leaq 0x2b63b(%rip), %rsi     # 0x58c82
leaq -0x2b8(%rbp), %rdi
leaq -0x2d8(%rbp), %rdx
callq 0x1e930
jmp 0x2d65c
leaq 0x2baf3(%rip), %rdx     # 0x59156
leaq -0x298(%rbp), %rdi
leaq -0x2b8(%rbp), %rsi
callq 0x1e560
jmp 0x2d678
movl -0x1b4(%rbp), %esi
leaq -0x2f8(%rbp), %rdi
callq 0x1e700
jmp 0x2d68c
leaq -0x278(%rbp), %rdi
leaq -0x298(%rbp), %rsi
leaq -0x2f8(%rbp), %rdx
callq 0x1e5b0
jmp 0x2d6a8
leaq -0x2f8(%rbp), %rdi
callq 0x31a0
leaq -0x298(%rbp), %rdi
callq 0x31a0
leaq -0x2b8(%rbp), %rdi
callq 0x31a0
leaq -0x2d8(%rbp), %rdi
callq 0x31a0
movq -0x10(%rbp), %rax
movq %rax, -0x688(%rbp)
leaq 0x2b57f(%rip), %rsi     # 0x58c69
leaq -0x338(%rbp), %rdi
leaq -0x1d8(%rbp), %rdx
callq 0x1e820
jmp 0x2d6ff
leaq 0x2c005(%rip), %rdx     # 0x5970b
leaq -0x318(%rbp), %rdi
leaq -0x338(%rbp), %rsi
callq 0x1e560
jmp 0x2d71b
movq -0x688(%rbp), %rdi
leaq -0x318(%rbp), %rsi
callq 0x1e3c0
jmp 0x2d730
leaq -0x318(%rbp), %rdi
callq 0x31a0
leaq -0x338(%rbp), %rdi
callq 0x31a0
movq -0x10(%rbp), %rax
movq %rax, -0x690(%rbp)
leaq 0x2b50f(%rip), %rsi     # 0x58c69
leaq -0x378(%rbp), %rdi
leaq -0x278(%rbp), %rdx
callq 0x1e820
jmp 0x2d76f
leaq 0x2bf95(%rip), %rdx     # 0x5970b
leaq -0x358(%rbp), %rdi
leaq -0x378(%rbp), %rsi
callq 0x1e560
jmp 0x2d78b
movq -0x690(%rbp), %rdi
leaq -0x358(%rbp), %rsi
callq 0x1e3c0
jmp 0x2d7a0
leaq -0x358(%rbp), %rdi
callq 0x31a0
leaq -0x378(%rbp), %rdi
callq 0x31a0
movq -0x10(%rbp), %rax
movq %rax, -0x698(%rbp)
leaq 0x2ade8(%rip), %rsi     # 0x585b2
leaq -0x438(%rbp), %rdi
leaq -0x1d8(%rbp), %rdx
callq 0x1e820
jmp 0x2d7df
leaq 0x2aa70(%rip), %rdx     # 0x58256
leaq -0x418(%rbp), %rdi
leaq -0x438(%rbp), %rsi
callq 0x1e560
jmp 0x2d7fb
movq -0x28(%rbp), %rdx
movslq -0x1b4(%rbp), %rax
shlq $0x5, %rax
addq %rax, %rdx
leaq -0x3f8(%rbp), %rdi
leaq -0x418(%rbp), %rsi
callq 0x1e980
jmp 0x2d822
leaq 0x2b96c(%rip), %rdx     # 0x59195
leaq -0x3d8(%rbp), %rdi
leaq -0x3f8(%rbp), %rsi
callq 0x1e560
jmp 0x2d83e
movq -0x28(%rbp), %rdx
movslq -0x1b8(%rbp), %rax
shlq $0x5, %rax
addq %rax, %rdx
leaq -0x3b8(%rbp), %rdi
leaq -0x3d8(%rbp), %rsi
callq 0x1e980
jmp 0x2d865
leaq 0x2be9f(%rip), %rdx     # 0x5970b
leaq -0x398(%rbp), %rdi
leaq -0x3b8(%rbp), %rsi
callq 0x1e560
jmp 0x2d881
movq -0x698(%rbp), %rdi
leaq -0x398(%rbp), %rsi
callq 0x1e3c0
jmp 0x2d896
leaq -0x398(%rbp), %rdi
callq 0x31a0
leaq -0x3b8(%rbp), %rdi
callq 0x31a0
leaq -0x3d8(%rbp), %rdi
callq 0x31a0
leaq -0x3f8(%rbp), %rdi
callq 0x31a0
leaq -0x418(%rbp), %rdi
callq 0x31a0
leaq -0x438(%rbp), %rdi
callq 0x31a0
movq -0x10(%rbp), %rax
movq %rax, -0x6a0(%rbp)
leaq 0x2acc2(%rip), %rsi     # 0x585b2
leaq -0x538(%rbp), %rdi
leaq -0x278(%rbp), %rdx
callq 0x1e820
jmp 0x2d905
leaq 0x2ab9e(%rip), %rdx     # 0x584aa
leaq -0x518(%rbp), %rdi
leaq -0x538(%rbp), %rsi
callq 0x1e560
jmp 0x2d921
movq -0x28(%rbp), %rdx
movslq -0x1b4(%rbp), %rax
shlq $0x5, %rax
addq %rax, %rdx
leaq -0x4f8(%rbp), %rdi
leaq -0x518(%rbp), %rsi
callq 0x1e980
jmp 0x2d948
leaq 0x2b846(%rip), %rdx     # 0x59195
leaq -0x4d8(%rbp), %rdi
leaq -0x4f8(%rbp), %rsi
callq 0x1e560
jmp 0x2d964
movq -0x20(%rbp), %rdx
movslq -0x1b8(%rbp), %rax
shlq $0x5, %rax
addq %rax, %rdx
leaq -0x4b8(%rbp), %rdi
leaq -0x4d8(%rbp), %rsi
callq 0x1e980
jmp 0x2d98b
leaq 0x2b6e6(%rip), %rdx     # 0x59078
leaq -0x498(%rbp), %rdi
leaq -0x4b8(%rbp), %rsi
callq 0x1e560
jmp 0x2d9a7
movq -0x20(%rbp), %rdx
movslq -0x1b4(%rbp), %rax
shlq $0x5, %rax
addq %rax, %rdx
leaq -0x478(%rbp), %rdi
leaq -0x498(%rbp), %rsi
callq 0x1e980
jmp 0x2d9ce
leaq 0x2bd36(%rip), %rdx     # 0x5970b
leaq -0x458(%rbp), %rdi
leaq -0x478(%rbp), %rsi
callq 0x1e560
jmp 0x2d9ea
movq -0x6a0(%rbp), %rdi
leaq -0x458(%rbp), %rsi
callq 0x1e3c0
jmp 0x2d9ff
leaq -0x458(%rbp), %rdi
callq 0x31a0
leaq -0x478(%rbp), %rdi
callq 0x31a0
leaq -0x498(%rbp), %rdi
callq 0x31a0
leaq -0x4b8(%rbp), %rdi
callq 0x31a0
leaq -0x4d8(%rbp), %rdi
callq 0x31a0
leaq -0x4f8(%rbp), %rdi
callq 0x31a0
leaq -0x518(%rbp), %rdi
callq 0x31a0
leaq -0x538(%rbp), %rdi
callq 0x31a0
movq -0x30(%rbp), %rdi
movslq -0x1b4(%rbp), %rax
shlq $0x5, %rax
addq %rax, %rdi
leaq -0x278(%rbp), %rsi
callq 0x3050
jmp 0x2da7f
movq -0x38(%rbp), %rdi
movslq -0x1b4(%rbp), %rax
shlq $0x5, %rax
addq %rax, %rdi
leaq -0x1d8(%rbp), %rsi
callq 0x3050
jmp 0x2da9f
leaq -0x278(%rbp), %rdi
callq 0x31a0
leaq -0x1d8(%rbp), %rdi
callq 0x31a0
movl -0x1b4(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x1b4(%rbp)
jmp 0x2d3ae
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
jmp 0x2db25
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
jmp 0x2db19
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
jmp 0x2db0d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
leaq -0x258(%rbp), %rdi
callq 0x31a0
leaq -0x1f8(%rbp), %rdi
callq 0x31a0
leaq -0x218(%rbp), %rdi
callq 0x31a0
leaq -0x238(%rbp), %rdi
callq 0x31a0
jmp 0x2e146
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
jmp 0x2ddb6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
jmp 0x2dba1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
jmp 0x2db95
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
jmp 0x2db89
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
leaq -0x2f8(%rbp), %rdi
callq 0x31a0
leaq -0x298(%rbp), %rdi
callq 0x31a0
leaq -0x2b8(%rbp), %rdi
callq 0x31a0
leaq -0x2d8(%rbp), %rdi
callq 0x31a0
jmp 0x2ddb6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
jmp 0x2ddaa
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
jmp 0x2dbe9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
leaq -0x318(%rbp), %rdi
callq 0x31a0
leaq -0x338(%rbp), %rdi
callq 0x31a0
jmp 0x2ddaa
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
jmp 0x2dc20
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
leaq -0x358(%rbp), %rdi
callq 0x31a0
leaq -0x378(%rbp), %rdi
callq 0x31a0
jmp 0x2ddaa
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
jmp 0x2dcc2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
jmp 0x2dcb6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
jmp 0x2dcaa
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
jmp 0x2dc9e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
jmp 0x2dc92
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
leaq -0x398(%rbp), %rdi
callq 0x31a0
leaq -0x3b8(%rbp), %rdi
callq 0x31a0
leaq -0x3d8(%rbp), %rdi
callq 0x31a0
leaq -0x3f8(%rbp), %rdi
callq 0x31a0
leaq -0x418(%rbp), %rdi
callq 0x31a0
leaq -0x438(%rbp), %rdi
callq 0x31a0
jmp 0x2ddaa
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
jmp 0x2dd9e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
jmp 0x2dd92
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
jmp 0x2dd86
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
jmp 0x2dd7a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
jmp 0x2dd6e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
jmp 0x2dd62
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
jmp 0x2dd56
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
leaq -0x458(%rbp), %rdi
callq 0x31a0
leaq -0x478(%rbp), %rdi
callq 0x31a0
leaq -0x498(%rbp), %rdi
callq 0x31a0
leaq -0x4b8(%rbp), %rdi
callq 0x31a0
leaq -0x4d8(%rbp), %rdi
callq 0x31a0
leaq -0x4f8(%rbp), %rdi
callq 0x31a0
leaq -0x518(%rbp), %rdi
callq 0x31a0
leaq -0x538(%rbp), %rdi
callq 0x31a0
leaq -0x278(%rbp), %rdi
callq 0x31a0
leaq -0x1d8(%rbp), %rdi
callq 0x31a0
jmp 0x2e146
movl -0x4(%rbp), %edi
leaq -0x30(%rbp), %rsi
leaq -0x20(%rbp), %rdx
callq 0x26380
movl -0x4(%rbp), %edi
leaq -0x38(%rbp), %rsi
leaq -0x28(%rbp), %rdx
callq 0x26380
movq -0xc8(%rbp), %rax
shlq %rax
movq %rax, -0xc8(%rbp)
jmp 0x2d218
movq -0x10(%rbp), %rax
movq %rax, -0x6b0(%rbp)
leaq -0x559(%rbp), %rdi
movq %rdi, -0x6a8(%rbp)
callq 0x3430
movq -0x6a8(%rbp), %rdx
leaq 0x2b7b8(%rip), %rsi     # 0x595e1
leaq -0x558(%rbp), %rdi
callq 0x3320
jmp 0x2de37
movq -0x6b0(%rbp), %rdi
leaq -0x558(%rbp), %rsi
callq 0x1e3c0
jmp 0x2de4c
leaq -0x558(%rbp), %rdi
callq 0x31a0
leaq -0x559(%rbp), %rdi
callq 0x32a0
movq -0x10(%rbp), %rax
movq %rax, -0x6c0(%rbp)
leaq -0x581(%rbp), %rdi
movq %rdi, -0x6b8(%rbp)
callq 0x3430
movq -0x6b8(%rbp), %rdx
leaq 0x2af70(%rip), %rsi     # 0x58e00
leaq -0x580(%rbp), %rdi
callq 0x3320
jmp 0x2de9e
movq -0x6c0(%rbp), %rdi
leaq -0x580(%rbp), %rsi
callq 0x1e3c0
jmp 0x2deb3
leaq -0x580(%rbp), %rdi
callq 0x31a0
leaq -0x581(%rbp), %rdi
callq 0x32a0
movl -0x4(%rbp), %edi
movq -0x10(%rbp), %r8
leaq -0x14(%rbp), %rsi
leaq -0x20(%rbp), %rdx
leaq -0x28(%rbp), %rcx
callq 0x25d30
movq -0x28(%rbp), %rax
movq %rax, -0x6c8(%rbp)
cmpq $0x0, %rax
je 0x2df60
movq -0x6c8(%rbp), %rcx
movq %rcx, %rax
addq $-0x8, %rax
movq %rax, -0x6d8(%rbp)
movq -0x8(%rcx), %rdx
shlq $0x5, %rdx
movq %rcx, %rax
addq %rdx, %rax
cmpq %rax, %rcx
movq %rax, -0x6d0(%rbp)
je 0x2df54
movq -0x6d0(%rbp), %rdi
addq $-0x20, %rdi
movq %rdi, -0x6e0(%rbp)
callq 0x31a0
movq -0x6c8(%rbp), %rcx
movq -0x6e0(%rbp), %rax
cmpq %rcx, %rax
movq %rax, -0x6d0(%rbp)
jne 0x2df23
movq -0x6d8(%rbp), %rdi
callq 0x32f0
movq -0x20(%rbp), %rax
movq %rax, -0x6e8(%rbp)
cmpq $0x0, %rax
je 0x2dfdd
movq -0x6e8(%rbp), %rcx
movq %rcx, %rax
addq $-0x8, %rax
movq %rax, -0x6f8(%rbp)
movq -0x8(%rcx), %rdx
shlq $0x5, %rdx
movq %rcx, %rax
addq %rdx, %rax
cmpq %rax, %rcx
movq %rax, -0x6f0(%rbp)
je 0x2dfd1
movq -0x6f0(%rbp), %rdi
addq $-0x20, %rdi
movq %rdi, -0x700(%rbp)
callq 0x31a0
movq -0x6e8(%rbp), %rcx
movq -0x700(%rbp), %rax
cmpq %rcx, %rax
movq %rax, -0x6f0(%rbp)
jne 0x2dfa0
movq -0x6f8(%rbp), %rdi
callq 0x32f0
movq -0x38(%rbp), %rax
movq %rax, -0x708(%rbp)
cmpq $0x0, %rax
je 0x2e05a
movq -0x708(%rbp), %rcx
movq %rcx, %rax
addq $-0x8, %rax
movq %rax, -0x718(%rbp)
movq -0x8(%rcx), %rdx
shlq $0x5, %rdx
movq %rcx, %rax
addq %rdx, %rax
cmpq %rax, %rcx
movq %rax, -0x710(%rbp)
je 0x2e04e
movq -0x710(%rbp), %rdi
addq $-0x20, %rdi
movq %rdi, -0x720(%rbp)
callq 0x31a0
movq -0x708(%rbp), %rcx
movq -0x720(%rbp), %rax
cmpq %rcx, %rax
movq %rax, -0x710(%rbp)
jne 0x2e01d
movq -0x718(%rbp), %rdi
callq 0x32f0
movq -0x30(%rbp), %rax
movq %rax, -0x728(%rbp)
cmpq $0x0, %rax
je 0x2e0d7
movq -0x728(%rbp), %rcx
movq %rcx, %rax
addq $-0x8, %rax
movq %rax, -0x738(%rbp)
movq -0x8(%rcx), %rdx
shlq $0x5, %rdx
movq %rcx, %rax
addq %rdx, %rax
cmpq %rax, %rcx
movq %rax, -0x730(%rbp)
je 0x2e0cb
movq -0x730(%rbp), %rdi
addq $-0x20, %rdi
movq %rdi, -0x740(%rbp)
callq 0x31a0
movq -0x728(%rbp), %rcx
movq -0x740(%rbp), %rax
cmpq %rcx, %rax
movq %rax, -0x730(%rbp)
jne 0x2e09a
movq -0x738(%rbp), %rdi
callq 0x32f0
addq $0x750, %rsp            # imm = 0x750
popq %rbp
retq
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
jmp 0x2e106
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
leaq -0x558(%rbp), %rdi
callq 0x31a0
leaq -0x559(%rbp), %rdi
callq 0x32a0
jmp 0x2e146
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
jmp 0x2e13a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
leaq -0x580(%rbp), %rdi
callq 0x31a0
leaq -0x581(%rbp), %rdi
callq 0x32a0
movq -0x68(%rbp), %rdi
callq 0x3420
nop