// File: /workspace/github_cpp_makefile_star2_O1/sighingnow[P]compile-pascal/pl0_tac_gen.cpp
// Function: pl0_tac_call_func[abi:cxx11](pl0_ast_call_func const*)
pair<Value *, string> pl0_tac_call_func(pl0_ast_call_func const *stmt) {
    cout << __func__;
    // a single identifier can be a function id or just simple variable. STRATEGY: choose the nested one.
    string fid = stmt->fn->id;
    if (!stmt->args || stmt->args->args.empty()) {
        int d1 = valtb.depth(fid), d2 = vartb.depth(fid), d3 = functb.depth(fid);
        if (d1 > d2 && d1 > d3) {
            constant val; valtb.find(fid, true, val);
            return make_pair(new Value(val.val, val.dt), "integer");
        }
        if (d2 > d3) {
            variable var; vartb.find(fid, true, var);
            if (var.len != -1) {
                pl0_ast_error(stmt->loc, string("use an array ") + "\"" + var.name + "\"" + " as a factor.");
            }
            return make_pair(new Value(var.name, var.dt), var.type);
        }
    }
    if (!functb.find(fid, true)) {
        pl0_ast_error(stmt->loc, string("use of undeclared identifier ") + "\"" + fid + "\"");
    }
    std::vector<std::pair<Value *, std::string>> args;
    if (stmt->args) {
        for (auto argexpr: stmt->args->args) {
            auto arg = pl0_tac_expr(argexpr->arg);
            args.emplace(args.begin(), arg);
        }
    }
    func fn;
    functb.find(fid, true, fn);
    std::vector<std::pair<Value *, bool>> pushes; // <Value * val, bool is_ref>
    if (args.size() != fn.param_t.size()) {
        pl0_ast_error(stmt->args->loc, string("unmatched number of parameters and arguments."));
    }
    else {
        size_t len = args.size();
        for (size_t i = 0; i < args.size(); ++i) {
            bool is_ref = fn.param_t[len-1-i].length() > 4 && fn.param_t[len-1-i].substr(0, 4) == "ref_";
            // if (args[i].second != (is_ref ? fn.param_t[len-1-i].substr(4) : fn.param_t[len-1-i])) {
            //     pl0_ast_error(stmt->args->args[i]->loc, string("unmatched type of parameter and argument."));
            // }
            if (is_ref) {
                if (args[i].first->t == Value::TYPE::IMM || (args[i].first->sv.back() != '#' && args[i].first->sv.front() == '~')) {
                    pl0_ast_error(stmt->args->args[i]->loc, string("use constant or expression as reference value."));
                }
                pushes.emplace_back(make_pair(args[i].first, true));
            }
            else {
                pushes.emplace_back(make_pair(args[i].first, false));
            }
        }
    }
    string retval = irb.makeret();
    irb.emit("call", new Value(fn.name, "string"), pushes, new Value(retval, fn.rettype));
    irb.emit("label", new Value(irb.makelabel(), "integer"), new Value("allsuffix", "string"));
    return make_pair(new Value(retval, fn.rettype), fn.rettype);
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x358, %rsp            # imm = 0x358
movq %rsi, %rbx
movq %rdi, (%rsp)
movq 0x4648d(%rip), %rdi     # 0xbffd8
leaq 0x1f9bd(%rip), %rsi     # 0x9950f
xorl %edx, %edx
callq 0x52e0
movq 0x8(%rbx), %rax
leaq 0x108(%rsp), %r13
movq %r13, -0x10(%r13)
movq 0x8(%rax), %rsi
movq 0x10(%rax), %rdx
addq %rsi, %rdx
leaq 0xf8(%rsp), %rdi
callq 0x36590
movq %rbx, 0x8(%rsp)
movq 0x10(%rbx), %rax
testq %rax, %rax
je 0x79b9d
movq 0x8(%rax), %rcx
cmpq 0x10(%rax), %rcx
jne 0x79d7e
leaq 0x47a7c(%rip), %rdi     # 0xc1620
leaq 0xf8(%rsp), %rsi
callq 0x7cc84
movl %eax, %ebx
leaq 0x47a36(%rip), %rdi     # 0xc15f0
leaq 0xf8(%rsp), %rsi
callq 0x7c43e
movl %eax, %ebp
leaq 0x47ab0(%rip), %rdi     # 0xc1680
leaq 0xf8(%rsp), %rsi
callq 0x7c2c4
cmpl %ebp, %ebx
setle %cl
cmpl %eax, %ebx
setle %dl
orb %cl, %dl
jne 0x79ccf
leaq 0x90(%rsp), %rdi
callq 0x7cc20
leaq 0x47a1d(%rip), %rdi     # 0xc1620
leaq 0xf8(%rsp), %rsi
leaq 0x90(%rsp), %rcx
movl $0x1, %edx
callq 0x7ce02
movl $0x48, %edi
callq 0x5250
movq %rax, %r14
movl 0xb0(%rsp), %ebx
leaq 0x348(%rsp), %r15
movq %r15, -0x10(%r15)
movq 0xb8(%rsp), %rsi
movq 0xc0(%rsp), %rdx
addq %rsi, %rdx
leaq 0x338(%rsp), %rdi
callq 0x36590
movb $0x1, %bpl
leaq 0x338(%rsp), %rdx
movq %r14, %rdi
movl %ebx, %esi
callq 0x7b654
movq (%rsp), %rax
movq %r14, (%rax)
leaq 0x8(%rax), %rdi
xorl %ebp, %ebp
leaq 0x1d489(%rip), %rsi     # 0x9710f
leaq 0x50(%rsp), %rdx
callq 0x16132
movq 0x338(%rsp), %rdi
cmpq %r15, %rdi
je 0x79cad
movq 0x348(%rsp), %rsi
incq %rsi
callq 0x5260
leaq 0xc8(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x7aa87
movq 0xc8(%rsp), %rsi
jmp 0x7aa7f
cmpl %eax, %ebp
jle 0x79d7e
leaq 0x90(%rsp), %rdi
callq 0x7c24c
leaq 0x47905(%rip), %rdi     # 0xc15f0
leaq 0xf8(%rsp), %rsi
leaq 0x90(%rsp), %rcx
movl $0x1, %edx
callq 0x7c7b8
cmpl $-0x1, 0xf0(%rsp)
je 0x7a95e
movq 0x8(%rsp), %rax
movq (%rax), %rbx
leaq 0x80(%rsp), %r14
movq %r14, -0x10(%r14)
leaq 0x1ef2a(%rip), %rsi     # 0x98c58
leaq 0x1ef30(%rip), %rdx     # 0x98c65
leaq 0x70(%rsp), %rdi
callq 0x2670a
leaq 0x1f2ad(%rip), %rsi     # 0x98ff3
leaq 0x70(%rsp), %rdi
callq 0x5420
leaq 0x40(%rsp), %r15
movq %r15, -0x10(%r15)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x7a795
movq %rdx, 0x30(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x40(%rsp)
jmp 0x7a79c
leaq 0x478fb(%rip), %rdi     # 0xc1680
leaq 0xf8(%rsp), %rsi
movl $0x1, %edx
callq 0x7bfe8
testb %al, %al
jne 0x79f63
movq 0x8(%rsp), %rax
movq (%rax), %rbx
leaq 0x20(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x1ec7c(%rip), %rsi     # 0x98a33
leaq 0x1ec92(%rip), %rdx     # 0x98a50
leaq 0x10(%rsp), %rdi
callq 0x2670a
leaq 0x1f224(%rip), %rsi     # 0x98ff3
leaq 0x10(%rsp), %rdi
callq 0x5420
leaq 0x60(%rsp), %r14
movq %r14, -0x10(%r14)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x79e00
movq %rdx, 0x50(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x60(%rsp)
jmp 0x79e07
movups (%rcx), %xmm0
movups %xmm0, (%r14)
movq 0x8(%rax), %rdx
leaq 0x50(%rsp), %rdi
movq %rdx, 0x8(%rdi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq 0xf8(%rsp), %rsi
movq 0x100(%rsp), %rdx
callq 0x50d0
leaq 0xa0(%rsp), %r12
movq %r12, -0x10(%r12)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x79e69
movq %rdx, 0x90(%rsp)
movq (%rcx), %rdx
movq %rdx, 0xa0(%rsp)
jmp 0x79e71
movups (%rcx), %xmm0
movups %xmm0, (%r12)
movq 0x8(%rax), %rdx
leaq 0x90(%rsp), %rdi
movq %rdx, 0x8(%rdi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0x1f15c(%rip), %rsi     # 0x98ff3
callq 0x5420
leaq 0x188(%rsp), %r13
movq %r13, -0x10(%r13)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x79ecc
movq %rdx, 0x178(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x188(%rsp)
jmp 0x79ed4
movups (%rcx), %xmm0
movups %xmm0, (%r13)
movq 0x8(%rax), %rdx
leaq 0x178(%rsp), %rsi
movq %rdx, 0x8(%rsi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq %rbx, %rdi
callq 0x6be78
movq 0x178(%rsp), %rdi
cmpq %r13, %rdi
je 0x79f18
movq 0x188(%rsp), %rsi
incq %rsi
callq 0x5260
movq 0x90(%rsp), %rdi
cmpq %r12, %rdi
je 0x79f35
movq 0xa0(%rsp), %rsi
incq %rsi
callq 0x5260
movq 0x50(%rsp), %rdi
cmpq %r14, %rdi
je 0x79f4c
movq 0x60(%rsp), %rsi
incq %rsi
callq 0x5260
movq 0x10(%rsp), %rdi
cmpq %r15, %rdi
je 0x79f63
movq 0x20(%rsp), %rsi
incq %rsi
callq 0x5260
xorps %xmm0, %xmm0
movaps %xmm0, 0x30(%rsp)
movq $0x0, 0x40(%rsp)
movq 0x8(%rsp), %rax
movq 0x10(%rax), %rax
testq %rax, %rax
je 0x79fe9
movq 0x8(%rax), %r14
movq 0x10(%rax), %r13
cmpq %r13, %r14
je 0x79fe9
leaq 0xa8(%rsp), %r12
leaq 0x90(%rsp), %rbx
leaq 0x30(%rsp), %r15
movq (%r14), %rax
movq 0x8(%rax), %rsi
movq %rbx, %rdi
callq 0x77914
movq 0x30(%rsp), %rsi
movq %r15, %rdi
movq %rbx, %rdx
callq 0x7f15c
movq 0x98(%rsp), %rdi
cmpq %r12, %rdi
je 0x79fe0
movq 0xa8(%rsp), %rsi
incq %rsi
callq 0x5260
addq $0x8, %r14
cmpq %r13, %r14
jne 0x79fa4
leaq 0x90(%rsp), %rdi
callq 0x7c5b8
leaq 0x47683(%rip), %rdi     # 0xc1680
leaq 0xf8(%rsp), %rsi
leaq 0x90(%rsp), %rcx
movl $0x1, %edx
callq 0x7c624
xorps %xmm0, %xmm0
movaps %xmm0, 0x70(%rsp)
movq $0x0, 0x80(%rsp)
movq 0x38(%rsp), %rbp
subq 0x30(%rsp), %rbp
sarq $0x3, %rbp
movabsq $-0x3333333333333333, %rax # imm = 0xCCCCCCCCCCCCCCCD
imulq %rax, %rbp
movq 0xd8(%rsp), %rax
subq 0xd0(%rsp), %rax
sarq $0x5, %rax
cmpq %rax, %rbp
jne 0x7a234
movq 0x38(%rsp), %rax
cmpq 0x30(%rsp), %rax
je 0x7a294
shlq $0x5, %rbp
addq $-0x20, %rbp
xorl %ebx, %ebx
leaq 0x50(%rsp), %r15
leaq 0x158(%rsp), %r12
xorl %r14d, %r14d
movq 0xd0(%rsp), %rsi
movq 0x8(%rsi,%rbp), %r13
cmpq $0x5, %r13
jb 0x7a0ca
addq %rbp, %rsi
movl $0x4, %ecx
movq %r15, %rdi
xorl %edx, %edx
callq 0x52a0
movq %r15, %rdi
leaq 0x1e910(%rip), %rsi     # 0x989cd
callq 0x50c0
testl %eax, %eax
sete %r15b
jmp 0x7a0cd
xorl %r15d, %r15d
cmpq $0x5, %r13
jb 0x7a0ef
movq 0x50(%rsp), %rdi
leaq 0x60(%rsp), %rax
cmpq %rax, %rdi
je 0x7a0ef
movq 0x60(%rsp), %rsi
incq %rsi
callq 0x5260
testb %r15b, %r15b
je 0x7a1bc
movq 0x30(%rsp), %rax
movq (%rax,%rbx), %rax
cmpl $0x0, (%rax)
leaq 0x50(%rsp), %r15
je 0x7a11f
movq 0x8(%rax), %rcx
movq 0x10(%rax), %rax
cmpb $0x23, -0x1(%rcx,%rax)
je 0x7a189
cmpb $0x7e, (%rcx)
jne 0x7a189
movq 0x8(%rsp), %rax
movq 0x10(%rax), %rax
movq 0x8(%rax), %rax
movq (%rax,%r14,8), %rax
movq (%rax), %r13
leaq 0x168(%rsp), %rax
movq %rax, 0x158(%rsp)
movq %r12, %rdi
leaq 0x1e9c2(%rip), %rsi     # 0x98b0f
leaq 0x1e9e9(%rip), %rdx     # 0x98b3d
callq 0x2670a
movq %r13, %rdi
movq %r12, %rsi
callq 0x6be78
movq 0x158(%rsp), %rdi
leaq 0x168(%rsp), %rax
cmpq %rax, %rdi
je 0x7a189
movq 0x168(%rsp), %rsi
incq %rsi
callq 0x5260
movq 0x30(%rsp), %rax
movq (%rax,%rbx), %rax
movq %rax, 0x10(%rsp)
movb $0x1, 0x18(%rsp)
movq 0x78(%rsp), %rsi
cmpq 0x80(%rsp), %rsi
jne 0x7a1e3
leaq 0x70(%rsp), %rdi
leaq 0x10(%rsp), %rdx
callq 0x7f038
jmp 0x7a202
movq 0x30(%rsp), %rax
movq (%rax,%rbx), %rax
movq %rax, 0x10(%rsp)
movb $0x0, 0x18(%rsp)
movq 0x78(%rsp), %rsi
cmpq 0x80(%rsp), %rsi
leaq 0x50(%rsp), %r15
je 0x7a1f3
movups 0x10(%rsp), %xmm0
movups %xmm0, (%rsi)
addq $0x10, 0x78(%rsp)
jmp 0x7a202
leaq 0x70(%rsp), %rdi
leaq 0x10(%rsp), %rdx
callq 0x7f038
incq %r14
movq 0x38(%rsp), %rax
subq 0x30(%rsp), %rax
sarq $0x3, %rax
movabsq $-0x3333333333333333, %rcx # imm = 0xCCCCCCCCCCCCCCCD
imulq %rcx, %rax
addq $-0x20, %rbp
addq $0x28, %rbx
cmpq %rax, %r14
jb 0x7a08e
jmp 0x7a294
movq 0x8(%rsp), %rax
movq 0x10(%rax), %rax
movq (%rax), %rbx
leaq 0x2e8(%rsp), %r14
movq %r14, -0x10(%r14)
leaq 0x1e88e(%rip), %rsi     # 0x98ae1
leaq 0x1e8b4(%rip), %rdx     # 0x98b0e
leaq 0x2d8(%rsp), %rdi
callq 0x2670a
leaq 0x2d8(%rsp), %rsi
movq %rbx, %rdi
callq 0x6be78
movq 0x2d8(%rsp), %rdi
cmpq %r14, %rdi
je 0x7a294
movq 0x2e8(%rsp), %rsi
incq %rsi
callq 0x5260
leaq 0x4730d(%rip), %rsi     # 0xc15a8
leaq 0x10(%rsp), %rdi
callq 0x692e0
leaq 0x2c8(%rsp), %rbp
movq %rbp, -0x10(%rbp)
leaq 0x1d7ae(%rip), %rsi     # 0x97a66
leaq 0x1d7ab(%rip), %rdx     # 0x97a6a
leaq 0x2b8(%rsp), %rdi
callq 0x2670a
movl $0x48, %edi
callq 0x5250
movq %rax, %r12
leaq 0x148(%rsp), %rax
movq %rax, -0x10(%rax)
movq 0x90(%rsp), %rsi
movq 0x98(%rsp), %rdx
addq %rsi, %rdx
leaq 0x138(%rsp), %rdi
movq %r12, 0x8(%rsp)
callq 0x36590
leaq 0x2a8(%rsp), %r14
movq %r14, -0x10(%r14)
leaq 0x1ef5b(%rip), %rsi     # 0x99278
leaq 0x1ef5a(%rip), %rdx     # 0x9927e
leaq 0x298(%rsp), %rdi
callq 0x2670a
movb $0x1, %bl
leaq 0x138(%rsp), %rsi
leaq 0x298(%rsp), %rdx
movq %r12, %rdi
callq 0x7be1c
xorl %ebx, %ebx
movl $0x48, %edi
callq 0x5250
movq %rax, %r15
leaq 0x288(%rsp), %rbx
movq %rbx, -0x10(%rbx)
movq 0x10(%rsp), %rsi
movq 0x18(%rsp), %rdx
addq %rsi, %rdx
leaq 0x278(%rsp), %rdi
callq 0x36590
leaq 0x268(%rsp), %r13
movq %r13, -0x10(%r13)
movq 0xb0(%rsp), %rsi
movq 0xb8(%rsp), %rdx
addq %rsi, %rdx
leaq 0x258(%rsp), %rdi
callq 0x36590
movb $0x1, %r12b
leaq 0x278(%rsp), %rsi
leaq 0x258(%rsp), %rdx
movq %r15, %rdi
callq 0x7be1c
xorl %r12d, %r12d
leaq 0x471d7(%rip), %rdi     # 0xc15a8
leaq 0x2b8(%rsp), %rsi
leaq 0x70(%rsp), %rcx
movq 0x8(%rsp), %rdx
movq %r15, %r8
callq 0x7cad6
movq 0x258(%rsp), %rdi
cmpq %r13, %rdi
je 0x7a408
movq 0x268(%rsp), %rsi
incq %rsi
callq 0x5260
movq 0x278(%rsp), %rdi
cmpq %rbx, %rdi
leaq 0x148(%rsp), %rbx
je 0x7a42d
movq 0x288(%rsp), %rsi
incq %rsi
callq 0x5260
movq 0x298(%rsp), %rdi
cmpq %r14, %rdi
je 0x7a44a
movq 0x2a8(%rsp), %rsi
incq %rsi
callq 0x5260
movq 0x138(%rsp), %rdi
cmpq %rbx, %rdi
je 0x7a467
movq 0x148(%rsp), %rsi
incq %rsi
callq 0x5260
movq 0x2b8(%rsp), %rdi
cmpq %rbp, %rdi
je 0x7a484
movq 0x2c8(%rsp), %rsi
incq %rsi
callq 0x5260
leaq 0x248(%rsp), %r13
movq %r13, -0x10(%r13)
leaq 0x1e6a7(%rip), %rsi     # 0x98b3e
leaq 0x1e6a5(%rip), %rdx     # 0x98b43
leaq 0x238(%rsp), %rdi
callq 0x2670a
movl $0x48, %edi
callq 0x5250
movq %rax, %r14
leaq 0x470e9(%rip), %rdi     # 0xc15a8
callq 0x69188
movl %eax, %ebx
leaq 0x128(%rsp), %rax
movq %rax, -0x10(%rax)
leaq 0x1cc36(%rip), %rsi     # 0x9710f
leaq 0x1cc36(%rip), %rdx     # 0x97116
leaq 0x118(%rsp), %rdi
callq 0x2670a
movb $0x1, %bpl
leaq 0x118(%rsp), %rdx
movq %r14, %rdi
movl %ebx, %esi
callq 0x7b654
xorl %ebp, %ebp
movl $0x48, %edi
callq 0x5250
movq %rax, %r15
leaq 0x228(%rsp), %rbx
movq %rbx, -0x10(%rbx)
leaq 0x1e620(%rip), %rsi     # 0x98b44
leaq 0x1e622(%rip), %rdx     # 0x98b4d
leaq 0x218(%rsp), %rdi
callq 0x2670a
leaq 0x208(%rsp), %r12
movq %r12, -0x10(%r12)
leaq 0x1ed2c(%rip), %rsi     # 0x99278
leaq 0x1ed2b(%rip), %rdx     # 0x9927e
leaq 0x1f8(%rsp), %rdi
callq 0x2670a
movb $0x1, %bpl
leaq 0x218(%rsp), %rsi
leaq 0x1f8(%rsp), %rdx
movq %r15, %rdi
callq 0x7be1c
xorl %ebp, %ebp
leaq 0x47024(%rip), %rdi     # 0xc15a8
leaq 0x238(%rsp), %rsi
movq %r14, %rdx
movq %r15, %rcx
xorl %r8d, %r8d
callq 0x7b53e
movq 0x1f8(%rsp), %rdi
cmpq %r12, %rdi
je 0x7a5b7
movq 0x208(%rsp), %rsi
incq %rsi
callq 0x5260
movq 0x218(%rsp), %rdi
cmpq %rbx, %rdi
leaq 0x128(%rsp), %rbx
je 0x7a5dc
movq 0x228(%rsp), %rsi
incq %rsi
callq 0x5260
movq 0x118(%rsp), %rdi
cmpq %rbx, %rdi
je 0x7a5f9
movq 0x128(%rsp), %rsi
incq %rsi
callq 0x5260
movq 0x238(%rsp), %rdi
cmpq %r13, %rdi
leaq 0x108(%rsp), %r13
je 0x7a61e
movq 0x248(%rsp), %rsi
incq %rsi
callq 0x5260
movl $0x48, %edi
callq 0x5250
movq %rax, %r14
leaq 0x1e8(%rsp), %r15
movq %r15, -0x10(%r15)
movq 0x10(%rsp), %rsi
movq 0x18(%rsp), %rdx
addq %rsi, %rdx
leaq 0x1d8(%rsp), %rdi
callq 0x36590
leaq 0x1c8(%rsp), %r12
movq %r12, -0x10(%r12)
movq 0xb0(%rsp), %rsi
movq 0xb8(%rsp), %rdx
addq %rsi, %rdx
leaq 0x1b8(%rsp), %rdi
callq 0x36590
movb $0x1, %bl
leaq 0x1d8(%rsp), %rsi
leaq 0x1b8(%rsp), %rdx
movq %r14, %rdi
callq 0x7be1c
movq (%rsp), %rcx
movq %r14, (%rcx)
leaq 0x8(%rcx), %rdi
leaq 0x18(%rcx), %rax
movq %rax, 0x8(%rcx)
movq 0xb0(%rsp), %rsi
movq 0xb8(%rsp), %rdx
addq %rsi, %rdx
xorl %ebx, %ebx
callq 0x36590
movq 0x1b8(%rsp), %rdi
cmpq %r12, %rdi
je 0x7a6e2
movq 0x1c8(%rsp), %rsi
incq %rsi
callq 0x5260
movq 0x1d8(%rsp), %rdi
cmpq %r15, %rdi
je 0x7a6ff
movq 0x1e8(%rsp), %rsi
incq %rsi
callq 0x5260
leaq 0x20(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x7a71a
movq 0x20(%rsp), %rsi
incq %rsi
callq 0x5260
leaq 0xd0(%rsp), %rbx
movq 0x70(%rsp), %rdi
testq %rdi, %rdi
je 0x7a73c
movq 0x80(%rsp), %rsi
subq %rdi, %rsi
callq 0x5260
movq %rbx, %rdi
callq 0x7b062
leaq 0xc0(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x7a765
movq 0xc0(%rsp), %rsi
incq %rsi
callq 0x5260
leaq 0xa0(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x7a786
movq 0xa0(%rsp), %rsi
incq %rsi
callq 0x5260
leaq 0x30(%rsp), %rdi
callq 0x7cbc4
jmp 0x7aaa8
movups (%rcx), %xmm0
movups %xmm0, (%r15)
movq 0x8(%rax), %rdx
leaq 0x30(%rsp), %rdi
movq %rdx, 0x8(%rdi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq 0x90(%rsp), %rsi
movq 0x98(%rsp), %rdx
callq 0x50d0
leaq 0x20(%rsp), %r12
movq %r12, -0x10(%r12)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x7a7f5
movq %rdx, 0x10(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x20(%rsp)
jmp 0x7a7fd
movups (%rcx), %xmm0
movups %xmm0, (%r12)
movq 0x8(%rax), %rdx
leaq 0x10(%rsp), %rdi
movq %rdx, 0x8(%rdi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0x1e7d3(%rip), %rsi     # 0x98ff3
callq 0x5420
leaq 0x60(%rsp), %r13
movq %r13, -0x10(%r13)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x7a84c
movq %rdx, 0x50(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x60(%rsp)
jmp 0x7a854
movups (%rcx), %xmm0
movups %xmm0, (%r13)
movq 0x8(%rax), %rdx
leaq 0x50(%rsp), %rdi
movq %rdx, 0x8(%rdi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0x1e377(%rip), %rsi     # 0x98bee
callq 0x5420
leaq 0x1a8(%rsp), %rbp
movq %rbp, -0x10(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x7a8ac
movq %rdx, 0x198(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x1a8(%rsp)
jmp 0x7a8b3
movups (%rcx), %xmm0
movups %xmm0, (%rbp)
movq 0x8(%rax), %rdx
leaq 0x198(%rsp), %rsi
movq %rdx, 0x8(%rsi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq %rbx, %rdi
callq 0x6be78
movq 0x198(%rsp), %rdi
cmpq %rbp, %rdi
je 0x7a8f7
movq 0x1a8(%rsp), %rsi
incq %rsi
callq 0x5260
movq 0x50(%rsp), %rdi
cmpq %r13, %rdi
je 0x7a90e
movq 0x60(%rsp), %rsi
incq %rsi
callq 0x5260
movq 0x10(%rsp), %rdi
cmpq %r12, %rdi
leaq 0x108(%rsp), %r13
je 0x7a92d
movq 0x20(%rsp), %rsi
incq %rsi
callq 0x5260
movq 0x30(%rsp), %rdi
cmpq %r15, %rdi
je 0x7a944
movq 0x40(%rsp), %rsi
incq %rsi
callq 0x5260
movq 0x70(%rsp), %rdi
cmpq %r14, %rdi
je 0x7a95e
movq 0x80(%rsp), %rsi
incq %rsi
callq 0x5260
movl $0x48, %edi
callq 0x5250
movq %rax, %r14
leaq 0x328(%rsp), %r15
movq %r15, -0x10(%r15)
movq 0x90(%rsp), %rsi
movq 0x98(%rsp), %rdx
addq %rsi, %rdx
leaq 0x318(%rsp), %rdi
callq 0x36590
leaq 0x308(%rsp), %r12
movq %r12, -0x10(%r12)
movq 0xb0(%rsp), %rsi
movq 0xb8(%rsp), %rdx
addq %rsi, %rdx
leaq 0x2f8(%rsp), %rdi
callq 0x36590
movb $0x1, %bl
leaq 0x318(%rsp), %rsi
leaq 0x2f8(%rsp), %rdx
movq %r14, %rdi
callq 0x7be1c
movq (%rsp), %rcx
movq %r14, (%rcx)
leaq 0x8(%rcx), %rdi
leaq 0x18(%rcx), %rax
movq %rax, 0x8(%rcx)
movq 0xd0(%rsp), %rsi
movq 0xd8(%rsp), %rdx
addq %rsi, %rdx
xorl %ebx, %ebx
callq 0x36590
movq 0x2f8(%rsp), %rdi
cmpq %r12, %rdi
je 0x7aa28
movq 0x308(%rsp), %rsi
incq %rsi
callq 0x5260
movq 0x318(%rsp), %rdi
cmpq %r15, %rdi
je 0x7aa45
movq 0x328(%rsp), %rsi
incq %rsi
callq 0x5260
leaq 0xe0(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x7aa66
movq 0xe0(%rsp), %rsi
incq %rsi
callq 0x5260
leaq 0xc0(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x7aa87
movq 0xc0(%rsp), %rsi
incq %rsi
callq 0x5260
leaq 0xa0(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x7aaa8
movq 0xa0(%rsp), %rsi
incq %rsi
callq 0x5260
movq 0xf8(%rsp), %rdi
cmpq %r13, %rdi
je 0x7aac5
movq 0x108(%rsp), %rsi
incq %rsi
callq 0x5260
movq (%rsp), %rax
addq $0x358, %rsp            # imm = 0x358
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %rax, (%rsp)
movq 0x198(%rsp), %rdi
cmpq %rbp, %rdi
je 0x7ab02
movq 0x1a8(%rsp), %rsi
incq %rsi
callq 0x5260
jmp 0x7ab02
movq %rax, (%rsp)
movq 0x50(%rsp), %rdi
cmpq %r13, %rdi
je 0x7ab1f
movq 0x60(%rsp), %rsi
incq %rsi
callq 0x5260
jmp 0x7ab1f
movq %rax, (%rsp)
movq 0x10(%rsp), %rdi
cmpq %r12, %rdi
je 0x7ab3c
movq 0x20(%rsp), %rsi
incq %rsi
callq 0x5260
jmp 0x7ab3c
movq %rax, (%rsp)
movq 0x30(%rsp), %rdi
cmpq %r15, %rdi
je 0x7ab59
movq 0x40(%rsp), %rsi
incq %rsi
callq 0x5260
jmp 0x7ab59
movq %rax, (%rsp)
movq 0x70(%rsp), %rdi
cmpq %r14, %rdi
je 0x7aca1
movq 0x80(%rsp), %rsi
incq %rsi
jmp 0x7ac9c
jmp 0x7ab91
movq %rax, (%rsp)
movb $0x1, %bl
jmp 0x7ac73
movq %rax, (%rsp)
movb $0x1, %bl
jmp 0x7ac90
jmp 0x7ab91
movq %rax, (%rsp)
jmp 0x7aca1
jmp 0x7adb6
movq %rax, (%rsp)
movq 0x2d8(%rsp), %rdi
cmpq %r14, %rdi
je 0x7afd9
movq 0x2e8(%rsp), %rsi
jmp 0x7afa6
jmp 0x7afd5
movq %rax, (%rsp)
movq 0x178(%rsp), %rdi
cmpq %r13, %rdi
je 0x7abed
movq 0x188(%rsp), %rsi
incq %rsi
callq 0x5260
jmp 0x7abed
movq %rax, (%rsp)
movq 0x90(%rsp), %rdi
cmpq %r12, %rdi
je 0x7ac10
movq 0xa0(%rsp), %rsi
incq %rsi
callq 0x5260
jmp 0x7ac10
movq %rax, (%rsp)
movq 0x50(%rsp), %rdi
cmpq %r14, %rdi
je 0x7ac2d
movq 0x60(%rsp), %rsi
incq %rsi
callq 0x5260
jmp 0x7ac2d
movq %rax, (%rsp)
movq 0x10(%rsp), %rdi
cmpq %r15, %rdi
je 0x7b033
movq 0x20(%rsp), %rsi
incq %rsi
callq 0x5260
jmp 0x7b033
jmp 0x7adb6
movq %rax, (%rsp)
movq 0x2f8(%rsp), %rdi
cmpq %r12, %rdi
je 0x7ac73
movq 0x308(%rsp), %rsi
incq %rsi
callq 0x5260
movq 0x318(%rsp), %rdi
cmpq %r15, %rdi
je 0x7ac90
movq 0x328(%rsp), %rsi
incq %rsi
callq 0x5260
testb %bl, %bl
je 0x7aca1
movl $0x48, %esi
movq %r14, %rdi
callq 0x5260
leaq 0x90(%rsp), %rdi
callq 0x7bdce
jmp 0x7b033
movq %rax, (%rsp)
movb $0x1, %bpl
jmp 0x7ad8e
jmp 0x7acc1
movq %rax, (%rsp)
jmp 0x7ada0
jmp 0x7adb6
movq %rax, (%rsp)
movb $0x1, %bl
jmp 0x7adea
movq %rax, (%rsp)
movb $0x1, %bl
jmp 0x7ae07
jmp 0x7ad4f
movq %rax, (%rsp)
movb $0x1, %bpl
jmp 0x7ae3d
movq %rax, (%rsp)
movb $0x1, %bpl
jmp 0x7ae5a
jmp 0x7ad01
movq %rax, (%rsp)
movb $0x1, %bpl
jmp 0x7ae99
movq %rax, (%rsp)
jmp 0x7aeab
jmp 0x7ad4f
movq %rax, (%rsp)
movb $0x1, %r12b
jmp 0x7aeea
movq %rax, (%rsp)
movb $0x1, %r12b
jmp 0x7af07
movq %rax, (%rsp)
movb $0x1, %bl
jmp 0x7af3e
movq %rax, (%rsp)
movb $0x1, %bl
jmp 0x7af63
movq %rax, (%rsp)
jmp 0x7af76
movq %rax, (%rsp)
jmp 0x7af93
jmp 0x7afd5
movq %rax, (%rsp)
jmp 0x7aff3
jmp 0x7b002
jmp 0x7adb6
movq %rax, (%rsp)
movq 0x338(%rsp), %rdi
cmpq %r15, %rdi
je 0x7ad8e
movq 0x348(%rsp), %rsi
incq %rsi
callq 0x5260
testb %bpl, %bpl
je 0x7ada0
movl $0x48, %esi
movq %r14, %rdi
callq 0x5260
leaq 0x90(%rsp), %rdi
callq 0x7bd98
jmp 0x7b033
jmp 0x7adb6
jmp 0x7adb6
movq %rax, (%rsp)
jmp 0x7b033
jmp 0x7afd5
jmp 0x7afd5
movq %rax, (%rsp)
movq 0x1b8(%rsp), %rdi
cmpq %r12, %rdi
je 0x7adea
movq 0x1c8(%rsp), %rsi
incq %rsi
callq 0x5260
movq 0x1d8(%rsp), %rdi
cmpq %r15, %rdi
je 0x7ae07
movq 0x1e8(%rsp), %rsi
incq %rsi
callq 0x5260
testb %bl, %bl
je 0x7af93
movl $0x48, %esi
movq %r14, %rdi
jmp 0x7af8e
movq %rax, (%rsp)
movq 0x1f8(%rsp), %rdi
cmpq %r12, %rdi
je 0x7ae3d
movq 0x208(%rsp), %rsi
incq %rsi
callq 0x5260
movq 0x218(%rsp), %rdi
cmpq %rbx, %rdi
je 0x7ae5a
movq 0x228(%rsp), %rsi
incq %rsi
callq 0x5260
testb %bpl, %bpl
je 0x7ae6c
movl $0x48, %esi
movq %r15, %rdi
callq 0x5260
xorl %ebp, %ebp
jmp 0x7ae74
movq %rax, (%rsp)
movq 0x118(%rsp), %rdi
leaq 0x128(%rsp), %rax
cmpq %rax, %rdi
je 0x7ae99
movq 0x128(%rsp), %rsi
incq %rsi
callq 0x5260
testb %bpl, %bpl
je 0x7aeab
movl $0x48, %esi
movq %r14, %rdi
callq 0x5260
movq 0x238(%rsp), %rdi
cmpq %r13, %rdi
je 0x7af93
movq 0x248(%rsp), %rsi
jmp 0x7af8b
movq %rax, (%rsp)
movq 0x258(%rsp), %rdi
cmpq %r13, %rdi
je 0x7aeea
movq 0x268(%rsp), %rsi
incq %rsi
callq 0x5260
movq 0x278(%rsp), %rdi
cmpq %rbx, %rdi
je 0x7af07
movq 0x288(%rsp), %rsi
incq %rsi
callq 0x5260
testb %r12b, %r12b
je 0x7af19
movl $0x48, %esi
movq %r15, %rdi
callq 0x5260
xorl %ebx, %ebx
jmp 0x7af21
movq %rax, (%rsp)
movq 0x298(%rsp), %rdi
cmpq %r14, %rdi
je 0x7af3e
movq 0x2a8(%rsp), %rsi
incq %rsi
callq 0x5260
movq 0x138(%rsp), %rdi
leaq 0x148(%rsp), %rax
cmpq %rax, %rdi
je 0x7af63
movq 0x148(%rsp), %rsi
incq %rsi
callq 0x5260
testb %bl, %bl
je 0x7af76
movl $0x48, %esi
movq 0x8(%rsp), %rdi
callq 0x5260
movq 0x2b8(%rsp), %rdi
cmpq %rbp, %rdi
je 0x7af93
movq 0x2c8(%rsp), %rsi
incq %rsi
callq 0x5260
leaq 0x20(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x7afd9
movq 0x20(%rsp), %rsi
incq %rsi
callq 0x5260
jmp 0x7afd9
movq %rax, (%rsp)
movq 0x158(%rsp), %rdi
leaq 0x168(%rsp), %rax
cmpq %rax, %rdi
je 0x7afd9
movq 0x168(%rsp), %rsi
jmp 0x7afa6
jmp 0x7afd5
movq %rax, (%rsp)
movq 0x70(%rsp), %rdi
testq %rdi, %rdi
je 0x7aff3
movq 0x80(%rsp), %rsi
subq %rdi, %rsi
callq 0x5260
leaq 0x90(%rsp), %rdi
callq 0x7c1a6
jmp 0x7b029
movq %rax, (%rsp)
jmp 0x7b029
movq %rax, (%rsp)
movq 0x98(%rsp), %rdi
cmpq %r12, %rdi
je 0x7b029
movq 0xa8(%rsp), %rsi
incq %rsi
callq 0x5260
leaq 0x30(%rsp), %rdi
callq 0x7cbc4
movq 0xf8(%rsp), %rdi
leaq 0x108(%rsp), %rax
cmpq %rax, %rdi
je 0x7b058
movq 0x108(%rsp), %rsi
incq %rsi
callq 0x5260
movq (%rsp), %rdi
callq 0x53d0
nop