// File: /workspace/github_cpp_makefile_star2_O3/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 $0x368, %rsp            # imm = 0x368
movq %rsi, %rbx
movq %rdi, %r13
movq 0x45dfc(%rip), %rdi     # 0xb9fd8
leaq 0x1f32c(%rip), %rsi     # 0x9350f
xorl %edx, %edx
callq 0x52e0
movq 0x8(%rbx), %rax
leaq 0xf8(%rsp), %r12
movq %r12, -0x10(%r12)
movq 0x8(%rax), %rsi
movq 0x10(%rax), %rdx
addq %rsi, %rdx
leaq 0xe8(%rsp), %rdi
callq 0x351dc
movq 0x10(%rbx), %rax
testq %rax, %rax
je 0x7422a
movq 0x8(%rax), %rcx
cmpq 0x10(%rax), %rcx
jne 0x7440e
leaq 0x473ef(%rip), %rdi     # 0xbb620
leaq 0xe8(%rsp), %rsi
callq 0x773c6
movl %eax, %ebp
leaq 0x473a9(%rip), %rdi     # 0xbb5f0
leaq 0xe8(%rsp), %rsi
callq 0x76b78
movl %eax, %r15d
leaq 0x47422(%rip), %rdi     # 0xbb680
leaq 0xe8(%rsp), %rsi
callq 0x76a0e
cmpl %r15d, %ebp
setle %cl
cmpl %eax, %ebp
setle %dl
orb %cl, %dl
jne 0x7435c
leaq 0x80(%rsp), %rdi
callq 0x77362
leaq 0x4738e(%rip), %rdi     # 0xbb620
leaq 0xe8(%rsp), %rsi
leaq 0x80(%rsp), %rcx
movl $0x1, %edx
callq 0x7753a
movl $0x48, %edi
callq 0x5250
movq %rax, %r14
movl 0xa0(%rsp), %ebp
leaq 0x358(%rsp), %rbx
movq %rbx, -0x10(%rbx)
movq 0xa8(%rsp), %rsi
movq 0xb0(%rsp), %rdx
addq %rsi, %rdx
leaq 0x348(%rsp), %rdi
callq 0x351dc
movb $0x1, %r15b
leaq 0x348(%rsp), %rdx
movq %r14, %rdi
movl %ebp, %esi
callq 0x75d42
movq %r14, (%r13)
leaq 0x8(%r13), %rdi
xorl %r15d, %r15d
leaq 0x1cdfc(%rip), %rsi     # 0x9110f
leaq 0x10(%rsp), %rdx
callq 0x16148
movq 0x348(%rsp), %rdi
cmpq %rbx, %rdi
je 0x7433a
movq 0x358(%rsp), %rsi
incq %rsi
callq 0x5260
leaq 0xb8(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x75101
movq 0xb8(%rsp), %rsi
jmp 0x750f9
cmpl %eax, %r15d
jle 0x7440e
leaq 0x80(%rsp), %rdi
callq 0x76996
leaq 0x47277(%rip), %rdi     # 0xbb5f0
leaq 0xe8(%rsp), %rsi
leaq 0x80(%rsp), %rcx
movl $0x1, %edx
callq 0x76ef2
cmpl $-0x1, 0xe0(%rsp)
je 0x74fdb
movq (%rbx), %r14
leaq 0x338(%rsp), %r12
movq %r12, -0x10(%r12)
leaq 0x1e8a0(%rip), %rsi     # 0x92c58
leaq 0x1e8a6(%rip), %rdx     # 0x92c65
leaq 0x328(%rsp), %rdi
callq 0x253d0
leaq 0x1ec20(%rip), %rsi     # 0x92ff3
leaq 0x328(%rsp), %rdi
callq 0x5420
leaq 0x70(%rsp), %r15
movq %r15, -0x10(%r15)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x74e0f
movq %rdx, 0x60(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x70(%rsp)
jmp 0x74e16
leaq 0x4726b(%rip), %rdi     # 0xbb680
leaq 0xe8(%rsp), %rsi
movl $0x1, %edx
callq 0x76716
testb %al, %al
jne 0x745fe
movq (%rbx), %r15
leaq 0x40(%rsp), %r12
movq %r12, -0x10(%r12)
leaq 0x1e5f0(%rip), %rsi     # 0x92a33
leaq 0x1e606(%rip), %rdx     # 0x92a50
leaq 0x30(%rsp), %rdi
callq 0x253d0
movq %r13, %rbp
leaq 0x1eb95(%rip), %rsi     # 0x92ff3
leaq 0x30(%rsp), %rdi
callq 0x5420
leaq 0x20(%rsp), %rsi
movq %rsi, -0x10(%rsi)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x7448f
movq %rdx, 0x10(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x20(%rsp)
jmp 0x74495
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
leaq 0x10(%rsp), %rdi
movq %rdx, 0x8(%rdi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq 0xe8(%rsp), %rsi
movq 0xf0(%rsp), %rdx
callq 0x50d0
leaq 0x90(%rsp), %r14
movq %r14, -0x10(%r14)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
movq %r12, %r13
cmpq %rcx, %rdx
je 0x744f9
movq %rdx, 0x80(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x90(%rsp)
jmp 0x74500
movups (%rcx), %xmm0
movups %xmm0, (%r14)
movq %rbx, %r12
movq 0x8(%rax), %rdx
leaq 0x80(%rsp), %rdi
movq %rdx, 0x8(%rdi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0x1eaca(%rip), %rsi     # 0x92ff3
callq 0x5420
leaq 0x1f8(%rsp), %rbx
movq %rbx, -0x10(%rbx)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x7455e
movq %rdx, 0x1e8(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x1f8(%rsp)
jmp 0x74564
movups (%rcx), %xmm0
movups %xmm0, (%rbx)
movq 0x8(%rax), %rdx
leaq 0x1e8(%rsp), %rsi
movq %rdx, 0x8(%rsi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq %r15, %rdi
callq 0x65f40
movq 0x1e8(%rsp), %rdi
cmpq %rbx, %rdi
je 0x745a8
movq 0x1f8(%rsp), %rsi
incq %rsi
callq 0x5260
movq 0x80(%rsp), %rdi
cmpq %r14, %rdi
movq %r12, %rbx
je 0x745c8
movq 0x90(%rsp), %rsi
incq %rsi
callq 0x5260
movq 0x10(%rsp), %rdi
leaq 0x20(%rsp), %rax
cmpq %rax, %rdi
je 0x745e4
movq 0x20(%rsp), %rsi
incq %rsi
callq 0x5260
movq 0x30(%rsp), %rdi
cmpq %r13, %rdi
movq %rbp, %r13
je 0x745fe
movq 0x40(%rsp), %rsi
incq %rsi
callq 0x5260
movq %r13, 0x8(%rsp)
xorps %xmm0, %xmm0
movaps %xmm0, 0x30(%rsp)
movq $0x0, 0x40(%rsp)
movq %rbx, 0x58(%rsp)
movq 0x10(%rbx), %rax
testq %rax, %rax
je 0x74689
movq 0x8(%rax), %rbx
movq 0x10(%rax), %r13
cmpq %r13, %rbx
je 0x74689
leaq 0x98(%rsp), %r14
leaq 0x80(%rsp), %r15
leaq 0x30(%rsp), %r12
movq (%rbx), %rax
movq 0x8(%rax), %rsi
movq %r15, %rdi
callq 0x71f89
movq 0x30(%rsp), %rsi
movq %r12, %rdi
movq %r15, %rdx
callq 0x79896
movq 0x88(%rsp), %rdi
cmpq %r14, %rdi
je 0x74680
movq 0x98(%rsp), %rsi
incq %rsi
callq 0x5260
addq $0x8, %rbx
cmpq %r13, %rbx
jne 0x74644
leaq 0x80(%rsp), %rdi
callq 0x76ce2
leaq 0x46fe3(%rip), %rdi     # 0xbb680
leaq 0xe8(%rsp), %rsi
leaq 0x80(%rsp), %rcx
movl $0x1, %edx
callq 0x76d4e
xorps %xmm0, %xmm0
movaps %xmm0, 0x60(%rsp)
movq $0x0, 0x70(%rsp)
movq 0x30(%rsp), %rax
movq 0x38(%rsp), %rcx
movq %rcx, %rbx
subq %rax, %rbx
sarq $0x3, %rbx
movabsq $-0x3333333333333333, %rdx # imm = 0xCCCCCCCCCCCCCCCD
imulq %rdx, %rbx
movq 0xc8(%rsp), %rdx
subq 0xc0(%rsp), %rdx
sarq $0x5, %rdx
cmpq %rdx, %rbx
jne 0x748b0
cmpq %rax, %rcx
je 0x74910
shlq $0x5, %rbx
addq $-0x20, %rbx
xorl %r12d, %r12d
leaq 0x10(%rsp), %r15
leaq 0x1a8(%rsp), %rbp
xorl %r14d, %r14d
movq 0xc0(%rsp), %rsi
cmpq $0x5, 0x8(%rsi,%rbx)
jb 0x74785
addq %rbx, %rsi
movl $0x4, %ecx
movq %r15, %rdi
xorl %edx, %edx
callq 0x52a0
movq %r15, %rdi
leaq 0x1e276(%rip), %rsi     # 0x929cd
callq 0x50c0
movl %eax, %r13d
movq 0x10(%rsp), %rdi
leaq 0x20(%rsp), %rax
cmpq %rax, %rdi
je 0x7477b
movq 0x20(%rsp), %rsi
incq %rsi
callq 0x5260
movq 0x30(%rsp), %rax
testl %r13d, %r13d
je 0x747f4
movq (%rax,%r12), %rax
movq %rax, 0x10(%rsp)
movb $0x0, 0x18(%rsp)
movq 0x68(%rsp), %rsi
cmpq 0x70(%rsp), %rsi
je 0x747af
movups 0x10(%rsp), %xmm0
movups %xmm0, (%rsi)
addq $0x10, 0x68(%rsp)
jmp 0x747bc
leaq 0x60(%rsp), %rdi
movq %r15, %rdx
callq 0x79772
incq %r14
movq 0x30(%rsp), %rax
movq 0x38(%rsp), %rcx
subq %rax, %rcx
sarq $0x3, %rcx
movabsq $-0x3333333333333333, %rdx # imm = 0xCCCCCCCCCCCCCCCD
imulq %rdx, %rcx
addq $-0x20, %rbx
addq $0x28, %r12
cmpq %rcx, %r14
jb 0x7472b
jmp 0x74910
movq (%rax,%r12), %rax
cmpl $0x0, (%rax)
je 0x74811
movq 0x8(%rax), %rcx
movq 0x10(%rax), %rax
cmpb $0x23, -0x1(%rcx,%rax)
je 0x7487b
cmpb $0x7e, (%rcx)
jne 0x7487b
movq 0x58(%rsp), %rax
movq 0x10(%rax), %rax
movq 0x8(%rax), %rax
movq (%rax,%r14,8), %rax
movq (%rax), %r13
leaq 0x1b8(%rsp), %rax
movq %rax, 0x1a8(%rsp)
movq %rbp, %rdi
leaq 0x1e2d0(%rip), %rsi     # 0x92b0f
leaq 0x1e2f7(%rip), %rdx     # 0x92b3d
callq 0x253d0
movq %r13, %rdi
movq %rbp, %rsi
callq 0x65f40
movq 0x1a8(%rsp), %rdi
leaq 0x1b8(%rsp), %rax
cmpq %rax, %rdi
je 0x7487b
movq 0x1b8(%rsp), %rsi
incq %rsi
callq 0x5260
movq 0x30(%rsp), %rax
movq (%rax,%r12), %rax
movq %rax, 0x10(%rsp)
movb $0x1, 0x18(%rsp)
movq 0x68(%rsp), %rsi
cmpq 0x70(%rsp), %rsi
jne 0x7479f
leaq 0x60(%rsp), %rdi
movq %r15, %rdx
callq 0x79772
jmp 0x747bc
movq 0x58(%rsp), %rax
movq 0x10(%rax), %rax
movq (%rax), %r14
leaq 0x2f8(%rsp), %rbx
movq %rbx, -0x10(%rbx)
leaq 0x1e212(%rip), %rsi     # 0x92ae1
leaq 0x1e238(%rip), %rdx     # 0x92b0e
leaq 0x2e8(%rsp), %rdi
callq 0x253d0
leaq 0x2e8(%rsp), %rsi
movq %r14, %rdi
callq 0x65f40
movq 0x2e8(%rsp), %rdi
cmpq %rbx, %rdi
je 0x74910
movq 0x2f8(%rsp), %rsi
incq %rsi
callq 0x5260
leaq 0x46c91(%rip), %rsi     # 0xbb5a8
leaq 0x10(%rsp), %rdi
callq 0x63402
leaq 0x2d8(%rsp), %rbp
movq %rbp, -0x10(%rbp)
leaq 0x1d132(%rip), %rsi     # 0x91a66
leaq 0x1d12f(%rip), %rdx     # 0x91a6a
leaq 0x2c8(%rsp), %rdi
callq 0x253d0
movl $0x48, %edi
callq 0x5250
movq %rax, %r12
leaq 0x118(%rsp), %rbx
movq %rbx, -0x10(%rbx)
movq 0x80(%rsp), %rsi
movq 0x88(%rsp), %rdx
addq %rsi, %rdx
leaq 0x108(%rsp), %rdi
movq %rax, 0x58(%rsp)
callq 0x351dc
leaq 0x2b8(%rsp), %r14
movq %r14, -0x10(%r14)
leaq 0x1e8df(%rip), %rsi     # 0x93278
leaq 0x1e8de(%rip), %rdx     # 0x9327e
leaq 0x2a8(%rsp), %rdi
callq 0x253d0
movb $0x1, %bl
leaq 0x108(%rsp), %rsi
leaq 0x2a8(%rsp), %rdx
movq %r12, %rdi
callq 0x7653e
xorl %ebx, %ebx
movl $0x48, %edi
callq 0x5250
movq %rax, %r15
leaq 0x198(%rsp), %rbx
movq %rbx, -0x10(%rbx)
movq 0x10(%rsp), %rsi
movq 0x18(%rsp), %rdx
addq %rsi, %rdx
leaq 0x188(%rsp), %rdi
callq 0x351dc
leaq 0x298(%rsp), %r13
movq %r13, -0x10(%r13)
movq 0xa0(%rsp), %rsi
movq 0xa8(%rsp), %rdx
addq %rsi, %rdx
leaq 0x288(%rsp), %rdi
callq 0x351dc
movb $0x1, %r12b
leaq 0x188(%rsp), %rsi
leaq 0x288(%rsp), %rdx
movq %r15, %rdi
callq 0x7653e
xorl %r12d, %r12d
leaq 0x46b5b(%rip), %rdi     # 0xbb5a8
leaq 0x2c8(%rsp), %rsi
leaq 0x60(%rsp), %rcx
movq 0x58(%rsp), %rdx
movq %r15, %r8
callq 0x77216
movq 0x288(%rsp), %rdi
cmpq %r13, %rdi
je 0x74a84
movq 0x298(%rsp), %rsi
incq %rsi
callq 0x5260
movq 0x188(%rsp), %rdi
cmpq %rbx, %rdi
leaq 0x118(%rsp), %rbx
je 0x74aa9
movq 0x198(%rsp), %rsi
incq %rsi
callq 0x5260
movq 0x2a8(%rsp), %rdi
cmpq %r14, %rdi
je 0x74ac6
movq 0x2b8(%rsp), %rsi
incq %rsi
callq 0x5260
movq 0x108(%rsp), %rdi
cmpq %rbx, %rdi
je 0x74ae3
movq 0x118(%rsp), %rsi
incq %rsi
callq 0x5260
movq 0x2c8(%rsp), %rdi
cmpq %rbp, %rdi
je 0x74b00
movq 0x2d8(%rsp), %rsi
incq %rsi
callq 0x5260
leaq 0x278(%rsp), %r13
movq %r13, -0x10(%r13)
leaq 0x1e02b(%rip), %rsi     # 0x92b3e
leaq 0x1e029(%rip), %rdx     # 0x92b43
leaq 0x268(%rsp), %rdi
callq 0x253d0
movl $0x48, %edi
callq 0x5250
movq %rax, %r14
leaq 0x46a6d(%rip), %rdi     # 0xbb5a8
callq 0x632aa
movl %eax, %ebp
leaq 0x178(%rsp), %rax
movq %rax, -0x10(%rax)
leaq 0x1c5ba(%rip), %rsi     # 0x9110f
leaq 0x1c5ba(%rip), %rdx     # 0x91116
leaq 0x168(%rsp), %rdi
callq 0x253d0
movb $0x1, %bl
leaq 0x168(%rsp), %rdx
movq %r14, %rdi
movl %ebp, %esi
callq 0x75d42
xorl %ebx, %ebx
movl $0x48, %edi
callq 0x5250
movq %rax, %r15
leaq 0x158(%rsp), %rbx
movq %rbx, -0x10(%rbx)
leaq 0x1dfa5(%rip), %rsi     # 0x92b44
leaq 0x1dfa7(%rip), %rdx     # 0x92b4d
leaq 0x148(%rsp), %rdi
callq 0x253d0
leaq 0x258(%rsp), %r12
movq %r12, -0x10(%r12)
leaq 0x1e6b1(%rip), %rsi     # 0x93278
leaq 0x1e6b0(%rip), %rdx     # 0x9327e
leaq 0x248(%rsp), %rdi
callq 0x253d0
movb $0x1, %bpl
leaq 0x148(%rsp), %rsi
leaq 0x248(%rsp), %rdx
movq %r15, %rdi
callq 0x7653e
xorl %ebp, %ebp
leaq 0x469a9(%rip), %rdi     # 0xbb5a8
leaq 0x268(%rsp), %rsi
movq %r14, %rdx
movq %r15, %rcx
xorl %r8d, %r8d
callq 0x75c2c
movq 0x248(%rsp), %rdi
cmpq %r12, %rdi
je 0x74c32
movq 0x258(%rsp), %rsi
incq %rsi
callq 0x5260
movq 0x148(%rsp), %rdi
cmpq %rbx, %rdi
leaq 0xf8(%rsp), %r12
je 0x74c57
movq 0x158(%rsp), %rsi
incq %rsi
callq 0x5260
movq 0x168(%rsp), %rdi
leaq 0x178(%rsp), %rax
cmpq %rax, %rdi
je 0x74c7c
movq 0x178(%rsp), %rsi
incq %rsi
callq 0x5260
movq 0x268(%rsp), %rdi
cmpq %r13, %rdi
movq 0x8(%rsp), %r13
je 0x74c9e
movq 0x278(%rsp), %rsi
incq %rsi
callq 0x5260
movl $0x48, %edi
callq 0x5250
movq %rax, %r14
leaq 0x138(%rsp), %r15
movq %r15, -0x10(%r15)
movq 0x10(%rsp), %rsi
movq 0x18(%rsp), %rdx
addq %rsi, %rdx
leaq 0x128(%rsp), %rdi
callq 0x351dc
leaq 0x238(%rsp), %rbx
movq %rbx, -0x10(%rbx)
movq 0xa0(%rsp), %rsi
movq 0xa8(%rsp), %rdx
addq %rsi, %rdx
leaq 0x228(%rsp), %rdi
callq 0x351dc
movb $0x1, %bpl
leaq 0x128(%rsp), %rsi
leaq 0x228(%rsp), %rdx
movq %r14, %rdi
callq 0x7653e
movq %r14, (%r13)
leaq 0x8(%r13), %rdi
leaq 0x18(%r13), %rax
movq %rax, 0x8(%r13)
movq 0xa0(%rsp), %rsi
movq 0xa8(%rsp), %rdx
addq %rsi, %rdx
xorl %ebp, %ebp
callq 0x351dc
movq 0x228(%rsp), %rdi
cmpq %rbx, %rdi
je 0x74d5f
movq 0x238(%rsp), %rsi
incq %rsi
callq 0x5260
movq 0x128(%rsp), %rdi
cmpq %r15, %rdi
je 0x74d7c
movq 0x138(%rsp), %rsi
incq %rsi
callq 0x5260
leaq 0x20(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x74d97
movq 0x20(%rsp), %rsi
incq %rsi
callq 0x5260
leaq 0xc0(%rsp), %r14
movq 0x60(%rsp), %rdi
testq %rdi, %rdi
je 0x74db6
movq 0x70(%rsp), %rsi
subq %rdi, %rsi
callq 0x5260
movq %r14, %rdi
callq 0x757a6
leaq 0xb0(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x74ddf
movq 0xb0(%rsp), %rsi
incq %rsi
callq 0x5260
leaq 0x90(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x74e00
movq 0x90(%rsp), %rsi
incq %rsi
callq 0x5260
leaq 0x30(%rsp), %rdi
callq 0x77304
jmp 0x75122
movups (%rcx), %xmm0
movups %xmm0, (%r15)
movq 0x8(%rax), %rdx
leaq 0x60(%rsp), %rdi
movq %rdx, 0x8(%rdi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq 0x80(%rsp), %rsi
movq 0x88(%rsp), %rdx
callq 0x50d0
leaq 0x40(%rsp), %rsi
movq %rsi, -0x10(%rsi)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x74e6e
movq %rdx, 0x30(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x40(%rsp)
jmp 0x74e74
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
leaq 0x30(%rsp), %rdi
movq %rdx, 0x8(%rdi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0x1e15c(%rip), %rsi     # 0x92ff3
callq 0x5420
leaq 0x20(%rsp), %rbp
movq %rbp, -0x10(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x74ec3
movq %rdx, 0x10(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x20(%rsp)
jmp 0x74eca
movups (%rcx), %xmm0
movups %xmm0, (%rbp)
movq 0x8(%rax), %rdx
leaq 0x10(%rsp), %rdi
movq %rdx, 0x8(%rdi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0x1dd01(%rip), %rsi     # 0x92bee
callq 0x5420
leaq 0x218(%rsp), %rbx
movq %rbx, -0x10(%rbx)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x74f22
movq %rdx, 0x208(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x218(%rsp)
jmp 0x74f28
movups (%rcx), %xmm0
movups %xmm0, (%rbx)
movq 0x8(%rax), %rdx
leaq 0x208(%rsp), %rsi
movq %rdx, 0x8(%rsi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq %r14, %rdi
callq 0x65f40
movq 0x208(%rsp), %rdi
cmpq %rbx, %rdi
je 0x74f6c
movq 0x218(%rsp), %rsi
incq %rsi
callq 0x5260
movq 0x10(%rsp), %rdi
cmpq %rbp, %rdi
je 0x74f83
movq 0x20(%rsp), %rsi
incq %rsi
callq 0x5260
movq 0x30(%rsp), %rdi
leaq 0x40(%rsp), %rax
cmpq %rax, %rdi
je 0x74f9f
movq 0x40(%rsp), %rsi
incq %rsi
callq 0x5260
movq 0x60(%rsp), %rdi
cmpq %r15, %rdi
je 0x74fb6
movq 0x70(%rsp), %rsi
incq %rsi
callq 0x5260
movq 0x328(%rsp), %rdi
cmpq %r12, %rdi
leaq 0xf8(%rsp), %r12
je 0x74fdb
movq 0x338(%rsp), %rsi
incq %rsi
callq 0x5260
movl $0x48, %edi
callq 0x5250
movq %rax, %r14
leaq 0x1d8(%rsp), %r15
movq %r15, -0x10(%r15)
movq 0x80(%rsp), %rsi
movq 0x88(%rsp), %rdx
addq %rsi, %rdx
leaq 0x1c8(%rsp), %rdi
callq 0x351dc
leaq 0x318(%rsp), %rbx
movq %rbx, -0x10(%rbx)
movq 0xa0(%rsp), %rsi
movq 0xa8(%rsp), %rdx
addq %rsi, %rdx
leaq 0x308(%rsp), %rdi
callq 0x351dc
movb $0x1, %bpl
leaq 0x1c8(%rsp), %rsi
leaq 0x308(%rsp), %rdx
movq %r14, %rdi
callq 0x7653e
movq %r14, (%r13)
leaq 0x8(%r13), %rdi
leaq 0x18(%r13), %rax
movq %rax, 0x8(%r13)
movq 0xc0(%rsp), %rsi
movq 0xc8(%rsp), %rdx
addq %rsi, %rdx
xorl %ebp, %ebp
callq 0x351dc
movq 0x308(%rsp), %rdi
cmpq %rbx, %rdi
je 0x750a2
movq 0x318(%rsp), %rsi
incq %rsi
callq 0x5260
movq 0x1c8(%rsp), %rdi
cmpq %r15, %rdi
je 0x750bf
movq 0x1d8(%rsp), %rsi
incq %rsi
callq 0x5260
leaq 0xd0(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x750e0
movq 0xd0(%rsp), %rsi
incq %rsi
callq 0x5260
leaq 0xb0(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x75101
movq 0xb0(%rsp), %rsi
incq %rsi
callq 0x5260
leaq 0x90(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x75122
movq 0x90(%rsp), %rsi
incq %rsi
callq 0x5260
movq 0xe8(%rsp), %rdi
cmpq %r12, %rdi
je 0x7513f
movq 0xf8(%rsp), %rsi
incq %rsi
callq 0x5260
movq %r13, %rax
addq $0x368, %rsp            # imm = 0x368
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %rax, 0x8(%rsp)
movq 0x208(%rsp), %rdi
cmpq %rbx, %rdi
je 0x7517d
movq 0x218(%rsp), %rsi
incq %rsi
callq 0x5260
jmp 0x7517d
movq %rax, 0x8(%rsp)
movq 0x10(%rsp), %rdi
cmpq %rbp, %rdi
je 0x7519b
movq 0x20(%rsp), %rsi
incq %rsi
callq 0x5260
jmp 0x7519b
movq %rax, 0x8(%rsp)
movq 0x30(%rsp), %rdi
leaq 0x40(%rsp), %rax
cmpq %rax, %rdi
je 0x751be
movq 0x40(%rsp), %rsi
incq %rsi
callq 0x5260
jmp 0x751be
movq %rax, 0x8(%rsp)
movq 0x60(%rsp), %rdi
cmpq %r15, %rdi
je 0x751dc
movq 0x70(%rsp), %rsi
incq %rsi
callq 0x5260
jmp 0x751dc
movq %rax, 0x8(%rsp)
movq 0x328(%rsp), %rdi
cmpq %r12, %rdi
je 0x75359
movq 0x338(%rsp), %rsi
incq %rsi
jmp 0x75354
jmp 0x75236
movq %rax, 0x8(%rsp)
movq 0x1c8(%rsp), %rdi
cmpq %r15, %rdi
je 0x7534c
movq 0x1d8(%rsp), %rsi
incq %rsi
callq 0x5260
jmp 0x7534c
movq %rax, 0x8(%rsp)
jmp 0x7534c
jmp 0x75236
movq %rax, 0x8(%rsp)
jmp 0x75359
jmp 0x75520
movq %rax, 0x8(%rsp)
movq 0x2e8(%rsp), %rdi
cmpq %rbx, %rdi
je 0x7571d
movq 0x2f8(%rsp), %rsi
jmp 0x7570c
jmp 0x75718
movq %rax, 0x8(%rsp)
movq 0x1e8(%rsp), %rdi
cmpq %rbx, %rdi
je 0x75296
movq 0x1f8(%rsp), %rsi
incq %rsi
callq 0x5260
jmp 0x75296
movq %rax, 0x8(%rsp)
movq 0x80(%rsp), %rdi
cmpq %r14, %rdi
je 0x752bd
movq 0x90(%rsp), %rsi
incq %rsi
callq 0x5260
jmp 0x752bd
movq %r12, %r13
movq %rax, 0x8(%rsp)
movq 0x10(%rsp), %rdi
leaq 0x20(%rsp), %rax
cmpq %rax, %rdi
je 0x752e3
movq 0x20(%rsp), %rsi
incq %rsi
callq 0x5260
jmp 0x752e3
movq %r12, %r13
movq %rax, 0x8(%rsp)
movq 0x30(%rsp), %rdi
cmpq %r13, %rdi
je 0x75776
movq 0x40(%rsp), %rsi
incq %rsi
callq 0x5260
jmp 0x75776
jmp 0x75520
movq %rax, 0x8(%rsp)
movq 0x308(%rsp), %rdi
cmpq %rbx, %rdi
je 0x7532a
movq 0x318(%rsp), %rsi
incq %rsi
callq 0x5260
movq 0x1c8(%rsp), %rdi
cmpq %r15, %rdi
je 0x75347
movq 0x1d8(%rsp), %rsi
incq %rsi
callq 0x5260
testb %bpl, %bpl
je 0x75359
movl $0x48, %esi
movq %r14, %rdi
callq 0x5260
leaq 0x80(%rsp), %rdi
callq 0x764f0
jmp 0x75776
movq %rax, 0x8(%rsp)
jmp 0x754fd
jmp 0x75377
movq %rax, 0x8(%rsp)
jmp 0x7550a
jmp 0x75520
jmp 0x75718
movq %rax, 0x8(%rsp)
movq 0x1a8(%rsp), %rdi
leaq 0x1b8(%rsp), %rax
cmpq %rax, %rdi
je 0x7571d
movq 0x1b8(%rsp), %rsi
jmp 0x7570c
jmp 0x75718
movq %rax, 0x8(%rsp)
movq 0x128(%rsp), %rdi
cmpq %r15, %rdi
je 0x75572
movq 0x138(%rsp), %rsi
incq %rsi
callq 0x5260
jmp 0x75572
movq %rax, 0x8(%rsp)
jmp 0x75572
jmp 0x754b6
movq %rax, 0x8(%rsp)
movq 0x148(%rsp), %rdi
cmpq %rbx, %rdi
je 0x755c3
movq 0x158(%rsp), %rsi
incq %rsi
callq 0x5260
jmp 0x755c3
movq %rax, 0x8(%rsp)
jmp 0x755c3
jmp 0x7542c
movq %rax, 0x8(%rsp)
jmp 0x75602
movq %rax, 0x8(%rsp)
jmp 0x7560f
jmp 0x754b6
movq %rax, 0x8(%rsp)
movq 0x188(%rsp), %rdi
cmpq %rbx, %rdi
je 0x75671
movq 0x198(%rsp), %rsi
incq %rsi
callq 0x5260
jmp 0x75671
movq %rax, 0x8(%rsp)
jmp 0x75671
movq %rax, 0x8(%rsp)
movq 0x108(%rsp), %rdi
cmpq %rbx, %rdi
je 0x756cd
movq 0x118(%rsp), %rsi
incq %rsi
callq 0x5260
jmp 0x756cd
movq %rax, 0x8(%rsp)
jmp 0x756cd
movq %rax, 0x8(%rsp)
jmp 0x756dc
movq %rax, 0x8(%rsp)
jmp 0x756f9
jmp 0x75718
movq %rax, 0x8(%rsp)
jmp 0x75734
jmp 0x75743
jmp 0x75520
movq %rax, 0x8(%rsp)
movq 0x348(%rsp), %rdi
cmpq %rbx, %rdi
je 0x754f8
movq 0x358(%rsp), %rsi
incq %rsi
callq 0x5260
testb %r15b, %r15b
je 0x7550a
movl $0x48, %esi
movq %r14, %rdi
callq 0x5260
leaq 0x80(%rsp), %rdi
callq 0x764ba
jmp 0x75776
jmp 0x75520
jmp 0x75520
movq %rax, 0x8(%rsp)
jmp 0x75776
movq %rax, 0x8(%rsp)
movq 0x228(%rsp), %rdi
cmpq %rbx, %rdi
je 0x7554c
movq 0x238(%rsp), %rsi
incq %rsi
callq 0x5260
movq 0x128(%rsp), %rdi
cmpq %r15, %rdi
je 0x75569
movq 0x138(%rsp), %rsi
incq %rsi
callq 0x5260
testb %bpl, %bpl
je 0x756f9
movl $0x48, %esi
movq %r14, %rdi
jmp 0x756f4
movq %rax, 0x8(%rsp)
movq 0x248(%rsp), %rdi
cmpq %r12, %rdi
je 0x755a1
movq 0x258(%rsp), %rsi
incq %rsi
callq 0x5260
movq 0x148(%rsp), %rdi
cmpq %rbx, %rdi
je 0x755be
movq 0x158(%rsp), %rsi
incq %rsi
callq 0x5260
testb %bpl, %bpl
je 0x755d0
movl $0x48, %esi
movq %r15, %rdi
callq 0x5260
xorl %ebx, %ebx
jmp 0x755d9
movq %rax, 0x8(%rsp)
movq 0x168(%rsp), %rdi
leaq 0x178(%rsp), %rax
cmpq %rax, %rdi
je 0x755fe
movq 0x178(%rsp), %rsi
incq %rsi
callq 0x5260
testb %bl, %bl
je 0x7560f
movl $0x48, %esi
movq %r14, %rdi
callq 0x5260
movq 0x268(%rsp), %rdi
cmpq %r13, %rdi
je 0x756f9
movq 0x278(%rsp), %rsi
jmp 0x756f1
movq %rax, 0x8(%rsp)
movq 0x288(%rsp), %rdi
cmpq %r13, %rdi
je 0x7564f
movq 0x298(%rsp), %rsi
incq %rsi
callq 0x5260
movq 0x188(%rsp), %rdi
cmpq %rbx, %rdi
je 0x7566c
movq 0x198(%rsp), %rsi
incq %rsi
callq 0x5260
testb %r12b, %r12b
je 0x7567e
movl $0x48, %esi
movq %r15, %rdi
callq 0x5260
xorl %ebx, %ebx
jmp 0x75687
movq %rax, 0x8(%rsp)
movq 0x2a8(%rsp), %rdi
cmpq %r14, %rdi
je 0x756a4
movq 0x2b8(%rsp), %rsi
incq %rsi
callq 0x5260
movq 0x108(%rsp), %rdi
leaq 0x118(%rsp), %rax
cmpq %rax, %rdi
je 0x756c9
movq 0x118(%rsp), %rsi
incq %rsi
callq 0x5260
testb %bl, %bl
je 0x756dc
movl $0x48, %esi
movq 0x58(%rsp), %rdi
callq 0x5260
movq 0x2c8(%rsp), %rdi
cmpq %rbp, %rdi
je 0x756f9
movq 0x2d8(%rsp), %rsi
incq %rsi
callq 0x5260
leaq 0x20(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x7571d
movq 0x20(%rsp), %rsi
incq %rsi
callq 0x5260
jmp 0x7571d
jmp 0x75718
movq %rax, 0x8(%rsp)
movq 0x60(%rsp), %rdi
testq %rdi, %rdi
je 0x75734
movq 0x70(%rsp), %rsi
subq %rdi, %rsi
callq 0x5260
leaq 0x80(%rsp), %rdi
callq 0x768e8
jmp 0x7576c
movq %rax, 0x8(%rsp)
jmp 0x7576c
movq %rax, 0x8(%rsp)
movq 0x88(%rsp), %rdi
cmpq %r14, %rdi
je 0x7576c
movq 0x98(%rsp), %rsi
incq %rsi
callq 0x5260
leaq 0x30(%rsp), %rdi
callq 0x77304
movq 0xe8(%rsp), %rdi
leaq 0xf8(%rsp), %rax
cmpq %rax, %rdi
je 0x7579b
movq 0xf8(%rsp), %rsi
incq %rsi
callq 0x5260
movq 0x8(%rsp), %rdi
callq 0x53d0
nop