// File: /workspace/github_cpp_makefile_star2_O2/sighingnow[P]compile-pascal/pl0_tac_gen.cpp
// Function: pl0_tac_for_stmt(pl0_ast_for_stmt const*)
void pl0_tac_for_stmt(pl0_ast_for_stmt const *stmt) {
    cout << __func__;
    // code structure: compare -> execute -> compare again
    int beginlabel = irb.makelabel(), frontlabel = irb.makelabel();
    int innerlabel = irb.makelabel();
    int endlabel = irb.makelabel(), taillabel = irb.makelabel();
    pair<Value *, string> s = pl0_tac_expr(stmt->initial);
    pair<Value *, string> t = pl0_tac_expr(stmt->end);
    
    // validate loop iterator.
    variable var;
    if (vartb.find(stmt->iter->id, true, var) == false) {
        pl0_ast_error(stmt->iter->loc, string("undeclared identifier ") + "\"" + stmt->iter->id + "\"");
    }
    if (s.second != "integer" && s.second != "char") {
        pl0_ast_error(stmt->initial->loc, "use array as initial value in for loop");
    }

////////////////////////////////////////////////////////////////////////////////////
    irb.emit("cmp", new Value(frontlabel, "integer"), s.first, t.first);
    if (stmt->step->val == 1) {
        irb.emit("goto", new Value("jg", "string"), new Value(taillabel, "integer"));
    }
    else {
        irb.emit("goto", new Value("jl", "string"), new Value(taillabel, "integer"));
    }
    irb.emitlabel(frontlabel);
/////////////////////////////////////////////////////////////////////////////////////

    Value *end;
    if (t.first->t == Value::TYPE::STR && t.first->sv[0] == '~') {
        end = new Value("~" + t.first->sv, t.second);
        irb.emit("def", end, new Value(t.second, "string"), new Value(-1, "integer"));
        irb.emit("=", end, t.first);
    }
    else {
        end = t.first;
    }

    irb.emit("=", new Value(stmt->iter->id, var.dt), s.first);
    irb.emit("goto", new Value("jmp", "string"), new Value(beginlabel, "integer"));
    irb.emitlabel(beginlabel);
    if (t.second != "integer" && t.second != "char") {
        pl0_ast_error(stmt->end->loc, "use array as end value in for loop");
    }
    // add end value to symbol table.
    
    irb.emit("cmp", new Value(innerlabel, "integer"), new Value(stmt->iter->id, var.dt), end);
    if (stmt->step->val == 1) {
        irb.emit("goto", new Value("jg", "string"), new Value(endlabel, "integer"));
    }
    else {
        irb.emit("goto", new Value("jl", "string"), new Value(endlabel, "integer"));
    }
    irb.emitlabel(innerlabel); // label for inner executable block.
    pl0_tac_stmt(stmt->stmt);
    irb.emit("+", new Value(stmt->iter->id, var.dt), new Value(stmt->iter->id, var.dt), new Value(stmt->step->val, "integer"));
    irb.emit("goto", new Value("jmp", "string"), new Value(beginlabel, "integer"));
    irb.emitlabel(endlabel);
    irb.emit("=", new Value(stmt->iter->id, var.dt), t.first);
    irb.emit("goto", new Value("jmp", "string"), new Value(taillabel, "integer"));
    irb.emitlabel(taillabel);
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x838, %rsp            # imm = 0x838
movq %rdi, %r14
movq 0x47f9e(%rip), %rdi     # 0x8afd8
leaq 0x184fe(%rip), %rsi     # 0x5b53f
callq 0x5250
leaq 0x49583(%rip), %rbx     # 0x8c5d0
movq %rbx, %rdi
callq 0x3bb88
movl %eax, 0x18(%rsp)
movq %rbx, %rdi
callq 0x3bb88
movl %eax, %ebp
movq %rbx, %rdi
callq 0x3bb88
movl %eax, 0x1c(%rsp)
movq %rbx, %rdi
callq 0x3bb88
movl %eax, 0x14(%rsp)
movq %rbx, %rdi
callq 0x3bb88
movl %eax, 0x10(%rsp)
movq 0x20(%r14), %rsi
leaq 0xa8(%rsp), %rdi
callq 0x44859
movq %r14, (%rsp)
movq 0x28(%r14), %rsi
leaq 0x80(%rsp), %rdi
callq 0x44859
leaq 0x7d0(%rsp), %rdi
callq 0x472c8
movq (%rsp), %rax
movq 0x18(%rax), %rsi
addq $0x8, %rsi
leaq 0x4954b(%rip), %rdi     # 0x8c618
pushq $0x1
popq %rdx
leaq 0x7d0(%rsp), %rcx
callq 0x47682
testb %al, %al
jne 0x4318b
movq (%rsp), %rax
movq 0x18(%rax), %rax
movq (%rax), %rbx
leaq 0x17963(%rip), %rsi     # 0x5aa5a
leaq 0x60(%rsp), %rdi
leaq 0xf(%rsp), %rdx
callq 0xfa26
leaq 0x17f16(%rip), %rdx     # 0x5b023
leaq 0x40(%rsp), %rdi
leaq 0x60(%rsp), %rsi
callq 0xfd14
movq (%rsp), %rax
movq 0x18(%rax), %rdx
addq $0x8, %rdx
leaq 0x20(%rsp), %rdi
leaq 0x40(%rsp), %rsi
callq 0xfda4
leaq 0x17ee5(%rip), %rdx     # 0x5b023
leaq 0x7b0(%rsp), %rdi
leaq 0x20(%rsp), %rsi
callq 0xfd14
leaq 0x7b0(%rsp), %rsi
movq %rbx, %rdi
callq 0x3da88
leaq 0x7b0(%rsp), %rdi
callq 0x5120
leaq 0x20(%rsp), %rdi
callq 0x5120
leaq 0x40(%rsp), %rdi
callq 0x5120
leaq 0x60(%rsp), %rdi
callq 0x5120
leaq 0xb0(%rsp), %rdi
leaq 0x15f75(%rip), %rsi     # 0x5910f
callq 0x47a19
testb %al, %al
je 0x431fc
leaq 0x166bd(%rip), %rsi     # 0x59867
leaq 0xb0(%rsp), %rdi
callq 0x47a19
testb %al, %al
je 0x431fc
movq (%rsp), %rax
movq 0x20(%rax), %rax
movq (%rax), %rbx
leaq 0x179a1(%rip), %rsi     # 0x5ab6e
leaq 0x790(%rsp), %rdi
leaq 0x20(%rsp), %rdx
callq 0xfa26
leaq 0x790(%rsp), %rsi
movq %rbx, %rdi
callq 0x3da88
leaq 0x790(%rsp), %rdi
callq 0x5120
leaq 0x178bb(%rip), %rsi     # 0x5aabe
leaq 0x770(%rsp), %rdi
leaq 0x20(%rsp), %rdx
callq 0xfa26
pushq $0x48
popq %rdi
callq 0x5260
movq %rax, %rbx
leaq 0x15ee8(%rip), %rsi     # 0x5910f
leaq 0x750(%rsp), %rdi
leaq 0x40(%rsp), %rdx
callq 0xfa26
movb $0x1, %r12b
leaq 0x750(%rsp), %rdx
movq %rbx, %rdi
movl %ebp, %esi
callq 0x46ac6
movq 0xa8(%rsp), %rcx
xorl %r12d, %r12d
movq 0x80(%rsp), %r8
leaq 0x49368(%rip), %rdi     # 0x8c5d0
leaq 0x770(%rsp), %rsi
movq %rbx, %rdx
callq 0x46a38
leaq 0x750(%rsp), %rdi
callq 0x5120
leaq 0x770(%rsp), %rdi
callq 0x5120
movq (%rsp), %rax
movq 0x38(%rax), %rax
cmpl $0x1, 0x8(%rax)
jne 0x433a7
leaq 0x17817(%rip), %rsi     # 0x5aac2
leaq 0x730(%rsp), %rdi
leaq 0x20(%rsp), %rdx
callq 0xfa26
pushq $0x48
popq %rdi
callq 0x5260
movq %rax, %rbx
leaq 0x177fc(%rip), %rsi     # 0x5aacb
leaq 0x710(%rsp), %rdi
leaq 0x40(%rsp), %rdx
callq 0xfa26
leaq 0x17fc0(%rip), %rsi     # 0x5b2a8
leaq 0x6f0(%rsp), %rdi
leaq 0x60(%rsp), %rdx
callq 0xfa26
movb $0x1, %r12b
leaq 0x710(%rsp), %rsi
leaq 0x6f0(%rsp), %rdx
movq %rbx, %rdi
callq 0x46fc0
xorl %r12d, %r12d
pushq $0x48
popq %rdi
callq 0x5260
movq %rax, %r13
leaq 0x15de5(%rip), %rsi     # 0x5910f
leaq 0x6d0(%rsp), %rdi
leaq 0xf(%rsp), %rdx
callq 0xfa26
movb $0x1, %r12b
leaq 0x6d0(%rsp), %rdx
movq %r13, %rdi
movl 0x10(%rsp), %esi
callq 0x46ac6
xorl %r12d, %r12d
leaq 0x49273(%rip), %rdi     # 0x8c5d0
leaq 0x730(%rsp), %rsi
movq %rbx, %rdx
movq %r13, %rcx
xorl %r8d, %r8d
callq 0x46a38
leaq 0x6d0(%rsp), %rdi
callq 0x5120
leaq 0x6f0(%rsp), %rdi
callq 0x5120
leaq 0x710(%rsp), %rdi
callq 0x5120
leaq 0x730(%rsp), %rdi
jmp 0x434a5
leaq 0x17714(%rip), %rsi     # 0x5aac2
leaq 0x6b0(%rsp), %rdi
leaq 0x20(%rsp), %rdx
callq 0xfa26
pushq $0x48
popq %rdi
callq 0x5260
movq %rax, %rbx
leaq 0x17700(%rip), %rsi     # 0x5aad2
leaq 0x690(%rsp), %rdi
leaq 0x40(%rsp), %rdx
callq 0xfa26
leaq 0x17ebd(%rip), %rsi     # 0x5b2a8
leaq 0x670(%rsp), %rdi
leaq 0x60(%rsp), %rdx
callq 0xfa26
movb $0x1, %r12b
leaq 0x690(%rsp), %rsi
leaq 0x670(%rsp), %rdx
movq %rbx, %rdi
callq 0x46fc0
xorl %r12d, %r12d
pushq $0x48
popq %rdi
callq 0x5260
movq %rax, %r13
leaq 0x15ce2(%rip), %rsi     # 0x5910f
leaq 0x650(%rsp), %rdi
leaq 0xf(%rsp), %rdx
callq 0xfa26
movb $0x1, %r12b
leaq 0x650(%rsp), %rdx
movq %r13, %rdi
movl 0x10(%rsp), %esi
callq 0x46ac6
xorl %r12d, %r12d
leaq 0x49170(%rip), %rdi     # 0x8c5d0
leaq 0x6b0(%rsp), %rsi
movq %rbx, %rdx
movq %r13, %rcx
xorl %r8d, %r8d
callq 0x46a38
leaq 0x650(%rsp), %rdi
callq 0x5120
leaq 0x670(%rsp), %rdi
callq 0x5120
leaq 0x690(%rsp), %rdi
callq 0x5120
leaq 0x6b0(%rsp), %rdi
callq 0x5120
leaq 0x4911f(%rip), %rdi     # 0x8c5d0
movl %ebp, %esi
callq 0x46b94
movq 0x80(%rsp), %rbx
cmpl $0x1, (%rbx)
jne 0x43689
movq 0x8(%rbx), %rax
cmpb $0x7e, (%rax)
jne 0x43689
pushq $0x48
popq %rdi
callq 0x5260
movq %rax, %rbp
addq $0x8, %rbx
leaq 0x175f4(%rip), %rsi     # 0x5aae0
leaq 0x630(%rsp), %rdi
movq %rbx, %rdx
callq 0xfbb3
leaq 0x88(%rsp), %r14
leaq 0x610(%rsp), %rdi
movq %r14, %rsi
callq 0x5340
leaq 0x630(%rsp), %rsi
leaq 0x610(%rsp), %rdx
movq %rbp, %rdi
callq 0x46fc0
leaq 0x610(%rsp), %rdi
callq 0x5120
leaq 0x630(%rsp), %rdi
callq 0x5120
leaq 0x1744e(%rip), %rsi     # 0x5a99b
leaq 0x5f0(%rsp), %rdi
leaq 0x20(%rsp), %rdx
callq 0xfa26
pushq $0x48
popq %rdi
callq 0x5260
movq %rax, %rbx
leaq 0x5d0(%rsp), %rdi
movq %r14, %rsi
callq 0x5340
leaq 0x17d27(%rip), %rsi     # 0x5b2a8
leaq 0x5b0(%rsp), %rdi
leaq 0x40(%rsp), %rdx
callq 0xfa26
movb $0x1, %r12b
leaq 0x5d0(%rsp), %rsi
leaq 0x5b0(%rsp), %rdx
movq %rbx, %rdi
callq 0x46fc0
xorl %r12d, %r12d
pushq $0x48
popq %rdi
callq 0x5260
movq %rax, %r13
leaq 0x15b4c(%rip), %rsi     # 0x5910f
leaq 0x590(%rsp), %rdi
leaq 0x60(%rsp), %rdx
callq 0xfa26
movb $0x1, %r12b
pushq $-0x1
popq %rsi
leaq 0x590(%rsp), %rdx
movq %r13, %rdi
callq 0x46ac6
xorl %r12d, %r12d
leaq 0x48fdb(%rip), %rdi     # 0x8c5d0
leaq 0x5f0(%rsp), %rsi
movq %rbp, %rdx
movq %rbx, %rcx
movq %r13, %r8
callq 0x46a38
leaq 0x590(%rsp), %rdi
callq 0x5120
leaq 0x5b0(%rsp), %rdi
callq 0x5120
leaq 0x5d0(%rsp), %rdi
callq 0x5120
leaq 0x5f0(%rsp), %rdi
callq 0x5120
leaq 0x15ad2(%rip), %rsi     # 0x59118
leaq 0x570(%rsp), %rdi
leaq 0x20(%rsp), %rdx
callq 0xfa26
movq 0x80(%rsp), %rcx
leaq 0x48f69(%rip), %rdi     # 0x8c5d0
leaq 0x570(%rsp), %rsi
movq %rbp, %rdx
xorl %r8d, %r8d
callq 0x46a38
leaq 0x570(%rsp), %rdi
callq 0x5120
jmp 0x4368c
movq %rbx, %rbp
leaq 0x15a85(%rip), %rsi     # 0x59118
leaq 0x550(%rsp), %rdi
leaq 0x20(%rsp), %rdx
callq 0xfa26
pushq $0x48
popq %rdi
callq 0x5260
movq %rax, %rbx
movq (%rsp), %rax
movq 0x18(%rax), %rsi
addq $0x8, %rsi
leaq 0x530(%rsp), %rdi
callq 0x5340
leaq 0x7f0(%rsp), %r15
leaq 0x510(%rsp), %rdi
movq %r15, %rsi
callq 0x5340
movb $0x1, %r12b
leaq 0x530(%rsp), %rsi
leaq 0x510(%rsp), %rdx
movq %rbx, %rdi
callq 0x46fc0
xorl %r12d, %r12d
movq 0xa8(%rsp), %rcx
leaq 0x48ec2(%rip), %rdi     # 0x8c5d0
leaq 0x550(%rsp), %rsi
movq %rbx, %rdx
xorl %r8d, %r8d
callq 0x46a38
leaq 0x510(%rsp), %rdi
callq 0x5120
leaq 0x530(%rsp), %rdi
callq 0x5120
leaq 0x550(%rsp), %rdi
callq 0x5120
leaq 0x17373(%rip), %rsi     # 0x5aac2
leaq 0x4f0(%rsp), %rdi
leaq 0x20(%rsp), %rdx
callq 0xfa26
pushq $0x48
popq %rdi
callq 0x5260
movq %rax, %rbx
leaq 0x17369(%rip), %rsi     # 0x5aadc
leaq 0x4d0(%rsp), %rdi
leaq 0x40(%rsp), %rdx
callq 0xfa26
leaq 0x17b1c(%rip), %rsi     # 0x5b2a8
leaq 0x4b0(%rsp), %rdi
leaq 0x60(%rsp), %rdx
callq 0xfa26
movb $0x1, %r12b
leaq 0x4d0(%rsp), %rsi
leaq 0x4b0(%rsp), %rdx
movq %rbx, %rdi
callq 0x46fc0
xorl %r12d, %r12d
pushq $0x48
popq %rdi
callq 0x5260
movq %rax, %r13
leaq 0x15941(%rip), %rsi     # 0x5910f
leaq 0x490(%rsp), %rdi
leaq 0xf(%rsp), %rdx
callq 0xfa26
movb $0x1, %r12b
leaq 0x490(%rsp), %rdx
movq %r13, %rdi
movl 0x18(%rsp), %esi
callq 0x46ac6
xorl %r12d, %r12d
leaq 0x48dcf(%rip), %rdi     # 0x8c5d0
leaq 0x4f0(%rsp), %rsi
movq %rbx, %rdx
movq %r13, %rcx
xorl %r8d, %r8d
callq 0x46a38
leaq 0x490(%rsp), %rdi
callq 0x5120
leaq 0x4b0(%rsp), %rdi
callq 0x5120
leaq 0x4d0(%rsp), %rdi
callq 0x5120
leaq 0x4f0(%rsp), %rdi
callq 0x5120
leaq 0x48d7e(%rip), %rdi     # 0x8c5d0
movl 0x18(%rsp), %esi
callq 0x46b94
leaq 0x88(%rsp), %rdi
leaq 0x158a5(%rip), %rsi     # 0x5910f
callq 0x47a19
testb %al, %al
je 0x438cc
leaq 0x15fed(%rip), %rsi     # 0x59867
leaq 0x88(%rsp), %rdi
callq 0x47a19
testb %al, %al
je 0x438cc
movq (%rsp), %rax
movq 0x28(%rax), %rax
movq (%rax), %rbx
leaq 0x172f8(%rip), %rsi     # 0x5ab95
leaq 0x470(%rsp), %rdi
leaq 0x20(%rsp), %rdx
callq 0xfa26
leaq 0x470(%rsp), %rsi
movq %rbx, %rdi
callq 0x3da88
leaq 0x470(%rsp), %rdi
callq 0x5120
leaq 0x171eb(%rip), %rsi     # 0x5aabe
leaq 0x450(%rsp), %rdi
leaq 0x20(%rsp), %rdx
callq 0xfa26
pushq $0x48
popq %rdi
callq 0x5260
movq %rax, %rbx
leaq 0x15818(%rip), %rsi     # 0x5910f
leaq 0x430(%rsp), %rdi
leaq 0x40(%rsp), %rdx
callq 0xfa26
movb $0x1, %r12b
leaq 0x430(%rsp), %rdx
movq %rbx, %rdi
movl 0x1c(%rsp), %esi
callq 0x46ac6
xorl %r12d, %r12d
pushq $0x48
popq %rdi
callq 0x5260
movq %rax, %r13
movq (%rsp), %rax
movq 0x18(%rax), %rsi
addq $0x8, %rsi
leaq 0x410(%rsp), %rdi
callq 0x5340
leaq 0x3f0(%rsp), %rdi
movq %r15, %rsi
callq 0x5340
movb $0x1, %r12b
leaq 0x410(%rsp), %rsi
leaq 0x3f0(%rsp), %rdx
movq %r13, %rdi
callq 0x46fc0
xorl %r12d, %r12d
leaq 0x48c54(%rip), %rdi     # 0x8c5d0
leaq 0x450(%rsp), %rsi
movq %rbx, %rdx
movq %r13, %rcx
movq %rbp, %r8
callq 0x46a38
leaq 0x3f0(%rsp), %rdi
callq 0x5120
leaq 0x410(%rsp), %rdi
callq 0x5120
leaq 0x430(%rsp), %rdi
callq 0x5120
leaq 0x450(%rsp), %rdi
callq 0x5120
movq (%rsp), %rax
movq 0x38(%rax), %rax
cmpl $0x1, 0x8(%rax)
jne 0x43ada
leaq 0x170e3(%rip), %rsi     # 0x5aac2
leaq 0x3d0(%rsp), %rdi
leaq 0x20(%rsp), %rdx
callq 0xfa26
pushq $0x48
popq %rdi
callq 0x5260
movq %rax, %rbx
leaq 0x170c8(%rip), %rsi     # 0x5aacb
leaq 0x3b0(%rsp), %rdi
leaq 0x40(%rsp), %rdx
callq 0xfa26
leaq 0x1788c(%rip), %rsi     # 0x5b2a8
leaq 0x390(%rsp), %rdi
leaq 0x60(%rsp), %rdx
callq 0xfa26
movb $0x1, %bpl
leaq 0x3b0(%rsp), %rsi
leaq 0x390(%rsp), %rdx
movq %rbx, %rdi
callq 0x46fc0
xorl %ebp, %ebp
pushq $0x48
popq %rdi
callq 0x5260
movq %rax, %r13
leaq 0x156b2(%rip), %rsi     # 0x5910f
leaq 0x370(%rsp), %rdi
leaq 0xf(%rsp), %rdx
callq 0xfa26
movb $0x1, %r12b
leaq 0x370(%rsp), %rdx
movq %r13, %rdi
movl 0x14(%rsp), %esi
callq 0x46ac6
xorl %r12d, %r12d
leaq 0x48b40(%rip), %rdi     # 0x8c5d0
leaq 0x3d0(%rsp), %rsi
movq %rbx, %rdx
movq %r13, %rcx
xorl %r8d, %r8d
callq 0x46a38
leaq 0x370(%rsp), %rdi
callq 0x5120
leaq 0x390(%rsp), %rdi
callq 0x5120
leaq 0x3b0(%rsp), %rdi
callq 0x5120
leaq 0x3d0(%rsp), %rdi
jmp 0x43bd7
leaq 0x16fe1(%rip), %rsi     # 0x5aac2
leaq 0x350(%rsp), %rdi
leaq 0x20(%rsp), %rdx
callq 0xfa26
pushq $0x48
popq %rdi
callq 0x5260
movq %rax, %rbx
leaq 0x16fcd(%rip), %rsi     # 0x5aad2
leaq 0x330(%rsp), %rdi
leaq 0x40(%rsp), %rdx
callq 0xfa26
leaq 0x1778a(%rip), %rsi     # 0x5b2a8
leaq 0x310(%rsp), %rdi
leaq 0x60(%rsp), %rdx
callq 0xfa26
movb $0x1, %bpl
leaq 0x330(%rsp), %rsi
leaq 0x310(%rsp), %rdx
movq %rbx, %rdi
callq 0x46fc0
xorl %ebp, %ebp
pushq $0x48
popq %rdi
callq 0x5260
movq %rax, %r13
leaq 0x155b0(%rip), %rsi     # 0x5910f
leaq 0x2f0(%rsp), %rdi
leaq 0xf(%rsp), %rdx
callq 0xfa26
movb $0x1, %r12b
leaq 0x2f0(%rsp), %rdx
movq %r13, %rdi
movl 0x14(%rsp), %esi
callq 0x46ac6
xorl %r12d, %r12d
leaq 0x48a3e(%rip), %rdi     # 0x8c5d0
leaq 0x350(%rsp), %rsi
movq %rbx, %rdx
movq %r13, %rcx
xorl %r8d, %r8d
callq 0x46a38
leaq 0x2f0(%rsp), %rdi
callq 0x5120
leaq 0x310(%rsp), %rdi
callq 0x5120
leaq 0x330(%rsp), %rdi
callq 0x5120
leaq 0x350(%rsp), %rdi
callq 0x5120
leaq 0x489ed(%rip), %rdi     # 0x8c5d0
movl 0x1c(%rsp), %esi
callq 0x46b94
movq (%rsp), %rax
movq 0x30(%rax), %rdi
callq 0x3fe31
leaq 0x16fb8(%rip), %rsi     # 0x5abb8
leaq 0x2d0(%rsp), %rdi
leaq 0x20(%rsp), %rdx
callq 0xfa26
pushq $0x48
popq %rdi
callq 0x5260
movq %rax, %r13
movq (%rsp), %rax
movq 0x18(%rax), %rsi
addq $0x8, %rsi
leaq 0x2b0(%rsp), %rdi
callq 0x5340
leaq 0x290(%rsp), %rdi
movq %r15, %rsi
callq 0x5340
movb $0x1, %bpl
leaq 0x2b0(%rsp), %rsi
leaq 0x290(%rsp), %rdx
movq %r13, %rdi
callq 0x46fc0
xorl %ebp, %ebp
pushq $0x48
popq %rdi
callq 0x5260
movq %rax, %rbx
movq (%rsp), %rax
movq 0x18(%rax), %rsi
addq $0x8, %rsi
leaq 0x270(%rsp), %rdi
callq 0x5340
leaq 0x250(%rsp), %rdi
movq %r15, %rsi
callq 0x5340
movb $0x1, %r12b
leaq 0x270(%rsp), %rsi
leaq 0x250(%rsp), %rdx
movq %rbx, %rdi
callq 0x46fc0
xorl %r12d, %r12d
pushq $0x48
popq %rdi
callq 0x5260
movq %rax, %rbp
movq (%rsp), %rax
movq 0x38(%rax), %rax
movl 0x8(%rax), %r12d
leaq 0x1543c(%rip), %rsi     # 0x5910f
leaq 0x230(%rsp), %rdi
leaq 0x40(%rsp), %rdx
callq 0xfa26
movb $0x1, %r14b
leaq 0x230(%rsp), %rdx
movq %rbp, %rdi
movl %r12d, %esi
callq 0x46ac6
xorl %r14d, %r14d
leaq 0x488cb(%rip), %rdi     # 0x8c5d0
leaq 0x2d0(%rsp), %rsi
movq %r13, %rdx
movq %rbx, %rcx
movq %rbp, %r8
callq 0x46a38
leaq 0x230(%rsp), %rdi
callq 0x5120
leaq 0x250(%rsp), %rdi
callq 0x5120
leaq 0x270(%rsp), %rdi
callq 0x5120
leaq 0x290(%rsp), %rdi
callq 0x5120
leaq 0x2b0(%rsp), %rdi
callq 0x5120
leaq 0x2d0(%rsp), %rdi
callq 0x5120
leaq 0x16d52(%rip), %rsi     # 0x5aac2
leaq 0x210(%rsp), %rdi
leaq 0x20(%rsp), %rdx
callq 0xfa26
pushq $0x48
popq %rdi
callq 0x5260
movq %rax, %rbx
leaq 0x16d48(%rip), %rsi     # 0x5aadc
leaq 0x1f0(%rsp), %rdi
leaq 0x40(%rsp), %rdx
callq 0xfa26
leaq 0x174fb(%rip), %rsi     # 0x5b2a8
leaq 0x1d0(%rsp), %rdi
leaq 0x60(%rsp), %rdx
callq 0xfa26
movb $0x1, %bpl
leaq 0x1f0(%rsp), %rsi
leaq 0x1d0(%rsp), %rdx
movq %rbx, %rdi
callq 0x46fc0
xorl %ebp, %ebp
pushq $0x48
popq %rdi
callq 0x5260
movq %rax, %r13
leaq 0x15321(%rip), %rsi     # 0x5910f
leaq 0x1b0(%rsp), %rdi
leaq 0xf(%rsp), %rdx
callq 0xfa26
movb $0x1, %r12b
leaq 0x1b0(%rsp), %rdx
movq %r13, %rdi
movl 0x18(%rsp), %esi
callq 0x46ac6
xorl %r12d, %r12d
leaq 0x487af(%rip), %rdi     # 0x8c5d0
leaq 0x210(%rsp), %rsi
movq %rbx, %rdx
movq %r13, %rcx
xorl %r8d, %r8d
callq 0x46a38
leaq 0x1b0(%rsp), %rdi
callq 0x5120
leaq 0x1d0(%rsp), %rdi
callq 0x5120
leaq 0x1f0(%rsp), %rdi
callq 0x5120
leaq 0x210(%rsp), %rdi
callq 0x5120
leaq 0x4875e(%rip), %rdi     # 0x8c5d0
movl 0x14(%rsp), %esi
callq 0x46b94
leaq 0x15296(%rip), %rsi     # 0x59118
leaq 0x190(%rsp), %rdi
leaq 0x20(%rsp), %rdx
callq 0xfa26
pushq $0x48
popq %rdi
callq 0x5260
movq %rax, %rbx
movq (%rsp), %rax
movq 0x18(%rax), %rsi
addq $0x8, %rsi
leaq 0x170(%rsp), %rdi
callq 0x5340
leaq 0x150(%rsp), %rdi
movq %r15, %rsi
callq 0x5340
movb $0x1, %r15b
leaq 0x170(%rsp), %rsi
leaq 0x150(%rsp), %rdx
movq %rbx, %rdi
callq 0x46fc0
xorl %r15d, %r15d
movq 0x80(%rsp), %rcx
leaq 0x486db(%rip), %rdi     # 0x8c5d0
leaq 0x190(%rsp), %rsi
movq %rbx, %rdx
xorl %r8d, %r8d
callq 0x46a38
leaq 0x150(%rsp), %rdi
callq 0x5120
leaq 0x170(%rsp), %rdi
callq 0x5120
leaq 0x190(%rsp), %rdi
callq 0x5120
leaq 0x16b8c(%rip), %rsi     # 0x5aac2
leaq 0x130(%rsp), %rdi
leaq 0x20(%rsp), %rdx
callq 0xfa26
pushq $0x48
popq %rdi
callq 0x5260
movq %rax, %rbx
leaq 0x16b82(%rip), %rsi     # 0x5aadc
leaq 0x110(%rsp), %rdi
leaq 0x40(%rsp), %rdx
callq 0xfa26
leaq 0x17335(%rip), %rsi     # 0x5b2a8
leaq 0xf0(%rsp), %rdi
leaq 0x60(%rsp), %rdx
callq 0xfa26
movb $0x1, %bpl
leaq 0x110(%rsp), %rsi
leaq 0xf0(%rsp), %rdx
movq %rbx, %rdi
callq 0x46fc0
xorl %ebp, %ebp
pushq $0x48
popq %rdi
callq 0x5260
movq %rax, %r15
leaq 0x1515b(%rip), %rsi     # 0x5910f
leaq 0xd0(%rsp), %rdi
leaq 0xf(%rsp), %rdx
callq 0xfa26
movb $0x1, %r12b
leaq 0xd0(%rsp), %rdx
movq %r15, %rdi
movl 0x10(%rsp), %esi
callq 0x46ac6
xorl %r12d, %r12d
leaq 0x485e9(%rip), %rdi     # 0x8c5d0
leaq 0x130(%rsp), %rsi
movq %rbx, %rdx
movq %r15, %rcx
xorl %r8d, %r8d
callq 0x46a38
leaq 0xd0(%rsp), %rdi
callq 0x5120
leaq 0xf0(%rsp), %rdi
callq 0x5120
leaq 0x110(%rsp), %rdi
callq 0x5120
leaq 0x130(%rsp), %rdi
callq 0x5120
leaq 0x48598(%rip), %rdi     # 0x8c5d0
movl 0x10(%rsp), %esi
callq 0x46b94
leaq 0x7d0(%rsp), %rdi
callq 0x46fa0
leaq 0x88(%rsp), %rdi
callq 0x5120
leaq 0xb0(%rsp), %rdi
callq 0x5120
addq $0x838, %rsp            # imm = 0x838
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %rax, (%rsp)
leaq 0x470(%rsp), %rdi
jmp 0x4480b
jmp 0x44840
movq %rax, (%rsp)
leaq 0x570(%rsp), %rdi
jmp 0x4480b
jmp 0x44840
movq %rax, (%rsp)
jmp 0x44190
movq %rax, (%rsp)
movb $0x1, %r12b
jmp 0x441b1
movq %rax, (%rsp)
jmp 0x441c3
movq %rax, (%rsp)
jmp 0x441ce
jmp 0x44840
movq %rax, (%rsp)
leaq 0x610(%rsp), %rdi
callq 0x5120
jmp 0x440e9
movq %rax, (%rsp)
leaq 0x630(%rsp), %rdi
callq 0x5120
jmp 0x440fc
movq %rax, (%rsp)
pushq $0x48
popq %rsi
movq %rbp, %rdi
callq 0x5270
jmp 0x44810
movq %rax, (%rsp)
leaq 0x790(%rsp), %rdi
jmp 0x4480b
jmp 0x44840
movq %rax, (%rsp)
jmp 0x4434b
movq %rax, (%rsp)
jmp 0x44370
movq %rax, (%rsp)
movb $0x1, %bpl
jmp 0x44390
movq %rax, (%rsp)
movb $0x1, %bpl
jmp 0x443cb
movq %rax, (%rsp)
jmp 0x443a2
movq %rax, (%rsp)
jmp 0x443dd
movq %rax, (%rsp)
jmp 0x443ad
movq %rax, (%rsp)
jmp 0x443e8
jmp 0x44840
jmp 0x44840
movq %rax, (%rsp)
leaq 0x590(%rsp), %rdi
callq 0x5120
testb %r12b, %r12b
je 0x4419b
pushq $0x48
popq %rsi
movq %r13, %rdi
callq 0x5270
xorl %r12d, %r12d
jmp 0x441a4
movq %rax, (%rsp)
leaq 0x5b0(%rsp), %rdi
callq 0x5120
leaq 0x5d0(%rsp), %rdi
callq 0x5120
testb %r12b, %r12b
je 0x441ce
pushq $0x48
popq %rsi
movq %rbx, %rdi
callq 0x5270
leaq 0x5f0(%rsp), %rdi
jmp 0x4480b
movq %rax, (%rsp)
jmp 0x44486
movq %rax, (%rsp)
jmp 0x444ac
movq %rax, (%rsp)
movb $0x1, %r12b
jmp 0x444cd
movq %rax, (%rsp)
movb $0x1, %r12b
jmp 0x44508
movq %rax, (%rsp)
jmp 0x444df
movq %rax, (%rsp)
jmp 0x4451a
movq %rax, (%rsp)
jmp 0x444ea
movq %rax, (%rsp)
jmp 0x44525
jmp 0x44840
jmp 0x44840
movq %rax, (%rsp)
leaq 0x7b0(%rsp), %rdi
callq 0x5120
jmp 0x4424a
movq %rax, (%rsp)
leaq 0x20(%rsp), %rdi
callq 0x5120
jmp 0x4425a
movq %rax, (%rsp)
leaq 0x40(%rsp), %rdi
callq 0x5120
jmp 0x4426a
movq %rax, (%rsp)
leaq 0x60(%rsp), %rdi
jmp 0x4480b
jmp 0x44840
movq %rax, (%rsp)
jmp 0x44571
movq %rax, (%rsp)
movb $0x1, %bpl
jmp 0x44591
movq %rax, (%rsp)
jmp 0x445a3
movq %rax, (%rsp)
jmp 0x445ae
jmp 0x44840
movq %rax, (%rsp)
movb $0x1, %r15b
jmp 0x445cc
movq %rax, (%rsp)
jmp 0x445de
movq %rax, (%rsp)
jmp 0x445e9
jmp 0x44840
movq %rax, (%rsp)
jmp 0x4460c
movq %rax, (%rsp)
movb $0x1, %bpl
jmp 0x4462c
movq %rax, (%rsp)
jmp 0x4463e
movq %rax, (%rsp)
jmp 0x44649
jmp 0x44840
movq %rax, (%rsp)
jmp 0x4466c
movq %rax, (%rsp)
movb $0x1, %r12b
jmp 0x4468d
movq %rax, (%rsp)
jmp 0x4469f
movq %rax, (%rsp)
movb $0x1, %bpl
jmp 0x446bf
movq %rax, (%rsp)
jmp 0x446d1
movq %rax, (%rsp)
jmp 0x446dc
jmp 0x44840
movq %rax, (%rsp)
leaq 0x2f0(%rsp), %rdi
callq 0x5120
testb %r12b, %r12b
je 0x44356
pushq $0x48
popq %rsi
movq %r13, %rdi
callq 0x5270
xorl %ebp, %ebp
jmp 0x44383
movq %rax, (%rsp)
leaq 0x370(%rsp), %rdi
callq 0x5120
testb %r12b, %r12b
je 0x4437b
pushq $0x48
popq %rsi
movq %r13, %rdi
callq 0x5270
xorl %ebp, %ebp
jmp 0x443be
movq %rax, (%rsp)
leaq 0x310(%rsp), %rdi
callq 0x5120
leaq 0x330(%rsp), %rdi
callq 0x5120
testb %bpl, %bpl
je 0x443ad
pushq $0x48
popq %rsi
movq %rbx, %rdi
callq 0x5270
leaq 0x350(%rsp), %rdi
jmp 0x4480b
movq %rax, (%rsp)
leaq 0x390(%rsp), %rdi
callq 0x5120
leaq 0x3b0(%rsp), %rdi
callq 0x5120
testb %bpl, %bpl
je 0x443e8
pushq $0x48
popq %rsi
movq %rbx, %rdi
callq 0x5270
leaq 0x3d0(%rsp), %rdi
jmp 0x4480b
movq %rax, (%rsp)
movb $0x1, %r12b
jmp 0x446fa
movq %rax, (%rsp)
jmp 0x4470c
movq %rax, (%rsp)
jmp 0x44732
movq %rax, (%rsp)
jmp 0x4473d
jmp 0x44840
movq %rax, (%rsp)
jmp 0x44760
movq %rax, (%rsp)
movb $0x1, %r12b
jmp 0x44781
movq %rax, (%rsp)
jmp 0x44793
movq %rax, (%rsp)
jmp 0x4479e
jmp 0x44840
movq %rax, (%rsp)
movb $0x1, %r12b
jmp 0x447b9
movq %rax, (%rsp)
jmp 0x447cb
movq %rax, (%rsp)
jmp 0x447d6
jmp 0x44840
movq %rax, (%rsp)
leaq 0x650(%rsp), %rdi
callq 0x5120
testb %r12b, %r12b
je 0x44491
pushq $0x48
popq %rsi
movq %r13, %rdi
callq 0x5270
xorl %r12d, %r12d
jmp 0x444c0
movq %rax, (%rsp)
leaq 0x6d0(%rsp), %rdi
callq 0x5120
testb %r12b, %r12b
je 0x444b7
pushq $0x48
popq %rsi
movq %r13, %rdi
callq 0x5270
xorl %r12d, %r12d
jmp 0x444fb
movq %rax, (%rsp)
leaq 0x670(%rsp), %rdi
callq 0x5120
leaq 0x690(%rsp), %rdi
callq 0x5120
testb %r12b, %r12b
je 0x444ea
pushq $0x48
popq %rsi
movq %rbx, %rdi
callq 0x5270
leaq 0x6b0(%rsp), %rdi
jmp 0x4480b
movq %rax, (%rsp)
leaq 0x6f0(%rsp), %rdi
callq 0x5120
leaq 0x710(%rsp), %rdi
callq 0x5120
testb %r12b, %r12b
je 0x44525
pushq $0x48
popq %rsi
movq %rbx, %rdi
callq 0x5270
leaq 0x730(%rsp), %rdi
jmp 0x4480b
movq %rax, (%rsp)
jmp 0x447f8
movq %rax, (%rsp)
jmp 0x44803
jmp 0x44840
movq %rax, (%rsp)
jmp 0x4481d
movq %rax, (%rsp)
jmp 0x4482a
movq %rax, (%rsp)
leaq 0xd0(%rsp), %rdi
callq 0x5120
testb %r12b, %r12b
je 0x4457c
pushq $0x48
popq %rsi
movq %r15, %rdi
callq 0x5270
xorl %ebp, %ebp
jmp 0x44584
movq %rax, (%rsp)
leaq 0xf0(%rsp), %rdi
callq 0x5120
leaq 0x110(%rsp), %rdi
callq 0x5120
testb %bpl, %bpl
je 0x445ae
pushq $0x48
popq %rsi
movq %rbx, %rdi
callq 0x5270
leaq 0x130(%rsp), %rdi
jmp 0x4480b
movq %rax, (%rsp)
leaq 0x150(%rsp), %rdi
callq 0x5120
leaq 0x170(%rsp), %rdi
callq 0x5120
testb %r15b, %r15b
je 0x445e9
pushq $0x48
popq %rsi
movq %rbx, %rdi
callq 0x5270
leaq 0x190(%rsp), %rdi
jmp 0x4480b
movq %rax, (%rsp)
leaq 0x1b0(%rsp), %rdi
callq 0x5120
testb %r12b, %r12b
je 0x44617
pushq $0x48
popq %rsi
movq %r13, %rdi
callq 0x5270
xorl %ebp, %ebp
jmp 0x4461f
movq %rax, (%rsp)
leaq 0x1d0(%rsp), %rdi
callq 0x5120
leaq 0x1f0(%rsp), %rdi
callq 0x5120
testb %bpl, %bpl
je 0x44649
pushq $0x48
popq %rsi
movq %rbx, %rdi
callq 0x5270
leaq 0x210(%rsp), %rdi
jmp 0x4480b
movq %rax, (%rsp)
leaq 0x230(%rsp), %rdi
callq 0x5120
testb %r14b, %r14b
je 0x44677
pushq $0x48
popq %rsi
movq %rbp, %rdi
callq 0x5270
xorl %r12d, %r12d
jmp 0x44680
movq %rax, (%rsp)
leaq 0x250(%rsp), %rdi
callq 0x5120
leaq 0x270(%rsp), %rdi
callq 0x5120
testb %r12b, %r12b
je 0x446aa
pushq $0x48
popq %rsi
movq %rbx, %rdi
callq 0x5270
xorl %ebp, %ebp
jmp 0x446b2
movq %rax, (%rsp)
leaq 0x290(%rsp), %rdi
callq 0x5120
leaq 0x2b0(%rsp), %rdi
callq 0x5120
testb %bpl, %bpl
je 0x446dc
pushq $0x48
popq %rsi
movq %r13, %rdi
callq 0x5270
leaq 0x2d0(%rsp), %rdi
jmp 0x4480b
movq %rax, (%rsp)
leaq 0x3f0(%rsp), %rdi
callq 0x5120
leaq 0x410(%rsp), %rdi
callq 0x5120
testb %r12b, %r12b
je 0x44717
pushq $0x48
popq %rsi
movq %r13, %rdi
callq 0x5270
xorl %r12d, %r12d
jmp 0x44720
movq %rax, (%rsp)
leaq 0x430(%rsp), %rdi
callq 0x5120
testb %r12b, %r12b
je 0x4473d
pushq $0x48
popq %rsi
movq %rbx, %rdi
callq 0x5270
leaq 0x450(%rsp), %rdi
jmp 0x4480b
movq %rax, (%rsp)
leaq 0x490(%rsp), %rdi
callq 0x5120
testb %r12b, %r12b
je 0x4476b
pushq $0x48
popq %rsi
movq %r13, %rdi
callq 0x5270
xorl %r12d, %r12d
jmp 0x44774
movq %rax, (%rsp)
leaq 0x4b0(%rsp), %rdi
callq 0x5120
leaq 0x4d0(%rsp), %rdi
callq 0x5120
testb %r12b, %r12b
je 0x4479e
pushq $0x48
popq %rsi
movq %rbx, %rdi
callq 0x5270
leaq 0x4f0(%rsp), %rdi
jmp 0x4480b
movq %rax, (%rsp)
leaq 0x510(%rsp), %rdi
callq 0x5120
leaq 0x530(%rsp), %rdi
callq 0x5120
testb %r12b, %r12b
je 0x447d6
pushq $0x48
popq %rsi
movq %rbx, %rdi
callq 0x5270
leaq 0x550(%rsp), %rdi
jmp 0x4480b
jmp 0x44840
movq %rax, (%rsp)
leaq 0x750(%rsp), %rdi
callq 0x5120
testb %r12b, %r12b
je 0x44803
pushq $0x48
popq %rsi
movq %rbx, %rdi
callq 0x5270
leaq 0x770(%rsp), %rdi
callq 0x5120
leaq 0x7d0(%rsp), %rdi
callq 0x46fa0
leaq 0x88(%rsp), %rdi
callq 0x5120
leaq 0xb0(%rsp), %rdi
callq 0x5120
movq (%rsp), %rdi
callq 0x53f0
movq %rax, (%rsp)
jmp 0x44810