// File: /workspace/github_cpp_makefile_star2_O3/eniac[P]Mantis/src/compile/compile_c.cpp
// Function: generateDialogueEnd(std::vector<AstNode*, std::allocator<AstNode*>>, std::__cxx11::basic_ostringstream<char, std::char_traits<char>, std::allocator<char>>&, int, int)
void generateDialogueEnd(std::vector<AstNode*> nodeArray, ostringstream& oss_reaction_update, int ing_iso_opt, int egr_iso_opt) {

    // __vv points to shallow copy under isolation, now update version bit commit together with other mbls)
    oss_reaction_update << "\n  __mantis__mod_vars_ing;\n";
    oss_reaction_update << "\n  __mantis__mod_vars_egr;\n";

    // Flip __vv to point to shallow copy
    if(((unsigned int)ing_iso_opt) & 0b10) {
        oss_reaction_update << "\n  __mantis__flip_vv_ing;\n\n";
    }
    if(((unsigned int)egr_iso_opt) & 0b10) {
        oss_reaction_update << "\n  __mantis__flip_vv_egr;\n\n";
    }

    // Under isolation, call mirror macros to mirror shallow copies for mbl table operations
    // Get the reaction string and find all user macros
    P4RReactionNode * react_node = findReaction(nodeArray);
    string p4r_reaction_user_str = "";
    if (react_node != 0) {
        p4r_reaction_user_str = react_node->body_->toString();
    }

    // No need to check isolation opt and ing/egr, just mirror user-specified operations in prepare
    for (auto node : nodeArray) {
        // For each mbl table
        if(typeContains(node, "P4RMalleableTableNode")) {
            TableNode* table = dynamic_cast<P4RMalleableTableNode*>(node)->table_;
            string table_name = *(table->name_->word_);

            TableActionStmtsNode* actions = table->actions_;

            // Mbl tables are always with With matches (at least match on __vv)
            // For each action
            for (TableActionStmtNode* tas : *actions->list_) {
                string action_name = *tas->name_->word_;

                string str_prepare_macro_func;
                string str_mirror_macro_func;

                std::smatch result;

                // Construct match regrex for add
                str_prepare_macro_func = table_name + "_add_" + action_name;
                std::regex e_add (str_prepare_macro_func+"\\s*\\("+"([^\\)]*)"+"\\)");   // matches words beginning by "sub"

                // Stop after first match
                while (std::regex_search (p4r_reaction_user_str, result, e_add)) {
                    
                    str_prepare_macro_func = result[0];
                    str_mirror_macro_func = "__mantis__mirror_" + str_prepare_macro_func;
                    // Call corresponding mirror macros
                    oss_reaction_update << "\n  "
                                        << str_mirror_macro_func
                                        << ";\n\n";

                    // Search remaining string of p4r_reaction_user_str
                    p4r_reaction_user_str = result.suffix().str();
                }
                // Mod
                str_prepare_macro_func = table_name + "_mod_" + action_name;
                std::regex e_mod (str_prepare_macro_func+"\\s*\\("+"([^\\)]*)"+"\\)");   // matches words beginning by "sub"
                while (std::regex_search (p4r_reaction_user_str, result, e_mod)) {
                    str_prepare_macro_func = result[0];
                    str_mirror_macro_func = "__mantis__mirror_" + str_prepare_macro_func;
                    oss_reaction_update << "\n  "
                                        << str_mirror_macro_func
                                        << ";\n\n";
                    p4r_reaction_user_str = result.suffix().str();
                }
                // Del
                str_prepare_macro_func = table_name + "_del_" + action_name;
                std::regex e_del (str_prepare_macro_func+"\\s*\\("+"([^\\)]*)"+"\\)");   // matches words beginning by "sub"
                while (std::regex_search (p4r_reaction_user_str, result, e_del)) {
                    str_prepare_macro_func = result[0];
                    str_mirror_macro_func = "__mantis__mirror_" + str_prepare_macro_func;
                    oss_reaction_update << "\n  "
                                        << str_mirror_macro_func
                                        << ";\n\n";
                    p4r_reaction_user_str = result.suffix().str();
                }
            }   
        }
    }

    // Point __vv back to working copy for next dialogue
    if(((unsigned int)ing_iso_opt) & 0b10) {
        oss_reaction_update << "\n  __mantis__flip_vv_ing;\n\n";
    }
    if(((unsigned int)egr_iso_opt) & 0b10) {
        oss_reaction_update << "\n  __mantis__flip_vv_egr;\n\n";
    }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x1c8, %rsp            # imm = 0x1C8
movl %ecx, %r12d
movl %edx, %r13d
movq %rsi, %rbx
movq %rdi, %r14
leaq 0x2840a(%rip), %rsi     # 0x77815
movl $0x1b, %edx
movq %rbx, %rdi
callq 0x2e440
leaq 0x2846e(%rip), %rsi     # 0x7788d
movl $0x1b, %edx
movq %rbx, %rdi
callq 0x2e440
testb $0x2, %r13b
je 0x4f446
leaq 0x2813f(%rip), %rsi     # 0x77578
movl $0x1b, %edx
movq %rbx, %rdi
callq 0x2e440
testb $0x2, %r12b
je 0x4f460
leaq 0x28141(%rip), %rsi     # 0x77594
movl $0x1b, %edx
movq %rbx, %rdi
callq 0x2e440
leaq -0x1f0(%rbp), %r15
movq %r15, %rdi
movq %r14, %rsi
callq 0x32ac0
movq %r15, %rdi
callq 0x6f412
movq %rax, %r15
movq -0x1f0(%rbp), %rdi
testq %rdi, %rdi
je 0x4f48e
callq 0x2e360
movl %r13d, -0x138(%rbp)
movl %r12d, -0x134(%rbp)
leaq -0x120(%rbp), %rax
movq %rax, -0x10(%rax)
leaq 0x2842d(%rip), %rdx     # 0x778db
leaq -0x130(%rbp), %rdi
movq %rdx, %rsi
callq 0x32e40
testq %r15, %r15
je 0x4f4fc
movq 0x50(%r15), %rsi
movq (%rsi), %rax
leaq -0x110(%rbp), %rdi
callq *(%rax)
leaq -0x130(%rbp), %rdi
leaq -0x110(%rbp), %r15
movq %r15, %rsi
callq 0x2e4c0
movq (%r15), %rdi
leaq -0x100(%rbp), %rax
cmpq %rax, %rdi
je 0x4f4fc
callq 0x2e360
movq (%r14), %rax
movq 0x8(%r14), %rcx
movq %rcx, -0x1c0(%rbp)
cmpq %rcx, %rax
je 0x501e9
leaq -0x148(%rbp), %r15
leaq -0x88(%rbp), %r14
movq %rax, -0x1c8(%rbp)
movq (%rax), %r12
movq %r12, %rdi
leaq 0x286b0(%rip), %rsi     # 0x77be5
callq 0x6e968
testb %al, %al
je 0x501d1
movq %r12, %rdi
leaq 0x3d164(%rip), %rsi     # 0x8c6b0
leaq 0x3defd(%rip), %rdx     # 0x8d450
xorl %ecx, %ecx
callq 0x2e430
movq 0x40(%rax), %r12
movq 0x40(%r12), %rax
movq 0x40(%rax), %rax
leaq -0x100(%rbp), %rcx
movq %rcx, -0x110(%rbp)
movq (%rax), %rsi
movq 0x8(%rax), %rdx
addq %rsi, %rdx
leaq -0x110(%rbp), %rdi
callq 0x32cbc
movq 0x50(%r12), %rax
movq 0x40(%rax), %rax
movq (%rax), %rcx
movq 0x8(%rax), %rax
movq %rax, -0x1d0(%rbp)
cmpq %rax, %rcx
je 0x501b9
movq %rcx, -0x1d8(%rbp)
movq (%rcx), %rax
movq 0x40(%rax), %rax
movq 0x40(%rax), %rax
leaq -0x168(%rbp), %rcx
movq %rcx, -0x178(%rbp)
movq (%rax), %rsi
movq 0x8(%rax), %rdx
addq %rsi, %rdx
leaq -0x178(%rbp), %rdi
callq 0x32cbc
leaq -0x98(%rbp), %rax
movq %rax, -0xa8(%rbp)
xorl %ecx, %ecx
movq %rcx, -0xa0(%rbp)
movb %cl, -0x98(%rbp)
leaq -0xe0(%rbp), %rax
movq %rax, -0xf0(%rbp)
movq %rcx, -0xe8(%rbp)
movb %cl, -0xe0(%rbp)
xorps %xmm0, %xmm0
movaps %xmm0, -0xc0(%rbp)
movaps %xmm0, -0xd0(%rbp)
leaq -0x78(%rbp), %rax
movq %rax, -0x88(%rbp)
movq -0x110(%rbp), %rsi
movq -0x108(%rbp), %rdx
addq %rsi, %rdx
movq %r14, %rdi
callq 0x32cbc
movq %r14, %rdi
leaq 0x28406(%rip), %rsi     # 0x77a5e
callq 0x2e7e0
movq -0x178(%rbp), %rsi
movq -0x170(%rbp), %rdx
movq %r14, %rdi
callq 0x2e130
leaq -0x188(%rbp), %r12
movq %r12, -0x198(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x4f6a3
movq %rdx, -0x198(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x188(%rbp)
jmp 0x4f6ab
movups (%rcx), %xmm0
movups %xmm0, (%r12)
movq 0x8(%rax), %rdx
movq %rdx, -0x190(%rbp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq -0xa8(%rbp), %rdi
leaq -0x198(%rbp), %rsi
callq 0x2e4c0
movq -0x198(%rbp), %rdi
cmpq %r12, %rdi
je 0x4f6e9
callq 0x2e360
movq -0x88(%rbp), %rdi
leaq -0x78(%rbp), %rax
cmpq %rax, %rdi
je 0x4f6fe
callq 0x2e360
leaq -0x58(%rbp), %rax
movq %rax, -0x68(%rbp)
movq -0xa8(%rbp), %rsi
movq -0xa0(%rbp), %rdx
addq %rsi, %rdx
leaq -0x68(%rbp), %r12
movq %r12, %rdi
callq 0x32cbc
movq %r12, %rdi
leaq 0x28930(%rip), %rsi     # 0x7805d
callq 0x2e7e0
movq %r12, %rdi
leaq 0x28927(%rip), %rsi     # 0x78063
callq 0x2e7e0
leaq -0x38(%rbp), %rsi
movq %rsi, -0x48(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x4f765
movq %rdx, -0x48(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x38(%rbp)
jmp 0x4f76b
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, -0x40(%rbp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq -0x48(%rbp), %rdi
leaq 0x288df(%rip), %rsi     # 0x7806c
callq 0x2e7e0
leaq -0x78(%rbp), %rsi
movq %rsi, -0x88(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x4f7bc
movq %rdx, -0x88(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x78(%rbp)
jmp 0x4f7c2
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, -0x80(%rbp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq -0x198(%rbp), %rdi
movq %r14, %rsi
movl $0x10, %edx
callq 0x506c4
movq -0x88(%rbp), %rdi
leaq -0x78(%rbp), %rax
cmpq %rax, %rdi
je 0x4f802
callq 0x2e360
movq -0x48(%rbp), %rdi
leaq -0x38(%rbp), %rax
cmpq %rax, %rdi
je 0x4f814
callq 0x2e360
movq -0x68(%rbp), %rdi
leaq -0x58(%rbp), %rax
cmpq %rax, %rdi
jne 0x4f9d9
movq -0x130(%rbp), %rdi
movq -0x128(%rbp), %rsi
addq %rdi, %rsi
leaq -0xd0(%rbp), %rdx
leaq -0x198(%rbp), %rcx
xorl %r8d, %r8d
callq 0x60d67
testb %al, %al
je 0x4f9e3
movq -0xd0(%rbp), %rcx
movq -0xc8(%rbp), %rdx
movq %rdx, %rax
subq %rcx, %rax
leaq -0x48(%rdx), %rsi
cmpq $0x48, %rax
movq %rcx, %rax
cmoveq %rsi, %rax
cmpq %rcx, %rdx
cmoveq %rsi, %rax
cmpb $0x1, 0x10(%rax)
jne 0x4f8a0
movq (%rax), %rsi
movq 0x8(%rax), %rdx
leaq -0x78(%rbp), %r12
movq %r12, -0x88(%rbp)
movq %r14, %rdi
callq 0x63144
jmp 0x4f8b7
leaq -0x78(%rbp), %r12
movq %r12, -0x88(%rbp)
movq $0x0, -0x80(%rbp)
movb $0x0, -0x78(%rbp)
leaq -0xa8(%rbp), %rdi
movq %r14, %rsi
callq 0x2e4c0
movq -0x88(%rbp), %rdi
cmpq %r12, %rdi
je 0x4f8d7
callq 0x2e360
movq %r14, %rdi
leaq 0x283a6(%rip), %rsi     # 0x77c87
leaq -0xa8(%rbp), %rdx
callq 0x50757
leaq -0xf0(%rbp), %rdi
movq %r14, %rsi
callq 0x2e4c0
movq -0x88(%rbp), %rdi
leaq -0x78(%rbp), %rax
cmpq %rax, %rdi
je 0x4f911
callq 0x2e360
movl $0x3, %edx
movq %rbx, %rdi
leaq 0x2874f(%rip), %rsi     # 0x7806f
callq 0x2e440
movq -0xf0(%rbp), %rsi
movq -0xe8(%rbp), %rdx
movq %rbx, %rdi
callq 0x2e440
movl $0x3, %edx
movq %rax, %rdi
leaq 0x2788a(%rip), %rsi     # 0x771d4
callq 0x2e440
movq -0xc8(%rbp), %rax
movq %rax, %rdx
subq -0xd0(%rbp), %rdx
sarq $0x3, %rdx
movabsq $-0x5555555555555555, %rcx # imm = 0xAAAAAAAAAAAAAAAB
imulq %rcx, %rdx
movq $-0x48, %rcx
cmpq $0x4, %rdx
jb 0x4f986
movq $-0x18, %rcx
cmpb $0x1, 0x10(%rax,%rcx)
jne 0x4f9a7
movq (%rax,%rcx), %rsi
movq 0x8(%rax,%rcx), %rdx
movq %r12, -0x88(%rbp)
movq %r14, %rdi
callq 0x63144
jmp 0x4f9ba
movq %r12, -0x88(%rbp)
movq $0x0, -0x80(%rbp)
movb $0x0, -0x78(%rbp)
leaq -0x130(%rbp), %rdi
movq %r14, %rsi
callq 0x2e4c0
movq -0x88(%rbp), %rdi
cmpq %r12, %rdi
je 0x4f825
callq 0x2e360
jmp 0x4f825
leaq -0x38(%rbp), %rax
movq %rax, -0x48(%rbp)
movq -0x110(%rbp), %rsi
movq -0x108(%rbp), %rdx
addq %rsi, %rdx
leaq -0x48(%rbp), %r12
movq %r12, %rdi
callq 0x32cbc
movq %r12, %rdi
leaq 0x28134(%rip), %rsi     # 0x77b46
callq 0x2e7e0
movq -0x178(%rbp), %rsi
movq -0x170(%rbp), %rdx
movq %r12, %rdi
callq 0x2e130
leaq -0x78(%rbp), %r12
movq %r12, -0x88(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x4fa57
movq %rdx, -0x88(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x78(%rbp)
jmp 0x4fa5f
movups (%rcx), %xmm0
movups %xmm0, (%r12)
movq 0x8(%rax), %rdx
movq %rdx, -0x80(%rbp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq -0xa8(%rbp), %rdi
movq %r14, %rsi
callq 0x2e4c0
movq -0x88(%rbp), %rdi
cmpq %r12, %rdi
je 0x4fa96
callq 0x2e360
movq -0x48(%rbp), %rdi
leaq -0x38(%rbp), %rax
cmpq %rax, %rdi
je 0x4faa8
callq 0x2e360
movq %r15, -0x158(%rbp)
movq -0xa8(%rbp), %rsi
movq -0xa0(%rbp), %rdx
addq %rsi, %rdx
leaq -0x158(%rbp), %r12
movq %r12, %rdi
callq 0x32cbc
movq %r12, %rdi
leaq 0x28584(%rip), %rsi     # 0x7805d
callq 0x2e7e0
movq %r12, %rdi
leaq 0x2857b(%rip), %rsi     # 0x78063
callq 0x2e7e0
leaq -0x58(%rbp), %rsi
movq %rsi, -0x68(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x4fb11
movq %rdx, -0x68(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x58(%rbp)
jmp 0x4fb17
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, -0x60(%rbp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq -0x68(%rbp), %rdi
leaq 0x28533(%rip), %rsi     # 0x7806c
callq 0x2e7e0
leaq -0x38(%rbp), %rsi
movq %rsi, -0x48(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x4fb62
movq %rdx, -0x48(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x38(%rbp)
jmp 0x4fb68
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, -0x40(%rbp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq %r14, %rdi
leaq -0x48(%rbp), %rsi
movl $0x10, %edx
callq 0x506c4
movq -0x48(%rbp), %rdi
leaq -0x38(%rbp), %rax
cmpq %rax, %rdi
je 0x4fba2
callq 0x2e360
movq -0x68(%rbp), %rdi
leaq -0x58(%rbp), %rax
cmpq %rax, %rdi
je 0x4fbb4
callq 0x2e360
movq -0x158(%rbp), %rdi
cmpq %r15, %rdi
jne 0x4fd73
movq -0x130(%rbp), %rdi
movq -0x128(%rbp), %rsi
addq %rdi, %rsi
leaq -0xd0(%rbp), %rdx
movq %r14, %rcx
xorl %r8d, %r8d
callq 0x60d67
testb %al, %al
je 0x4fd7d
movq -0xd0(%rbp), %rcx
movq -0xc8(%rbp), %rdx
movq %rdx, %rax
subq %rcx, %rax
leaq -0x48(%rdx), %rsi
cmpq $0x48, %rax
movq %rcx, %rax
cmoveq %rsi, %rax
cmpq %rcx, %rdx
cmoveq %rsi, %rax
cmpb $0x1, 0x10(%rax)
jne 0x4fc3c
movq (%rax), %rsi
movq 0x8(%rax), %rdx
leaq -0x38(%rbp), %r12
movq %r12, -0x48(%rbp)
leaq -0x48(%rbp), %r13
movq %r13, %rdi
callq 0x63144
jmp 0x4fc54
leaq -0x38(%rbp), %r12
movq %r12, -0x48(%rbp)
movq $0x0, -0x40(%rbp)
movb $0x0, -0x38(%rbp)
leaq -0x48(%rbp), %r13
leaq -0xa8(%rbp), %rdi
movq %r13, %rsi
callq 0x2e4c0
movq -0x48(%rbp), %rdi
cmpq %r12, %rdi
je 0x4fc71
callq 0x2e360
leaq -0x48(%rbp), %r12
movq %r12, %rdi
leaq 0x28008(%rip), %rsi     # 0x77c87
leaq -0xa8(%rbp), %rdx
callq 0x50757
leaq -0xf0(%rbp), %rdi
movq %r12, %rsi
callq 0x2e4c0
movq -0x48(%rbp), %rdi
leaq -0x38(%rbp), %rax
cmpq %rax, %rdi
je 0x4fcac
callq 0x2e360
movl $0x3, %edx
movq %rbx, %rdi
leaq 0x283b4(%rip), %rsi     # 0x7806f
callq 0x2e440
movq -0xf0(%rbp), %rsi
movq -0xe8(%rbp), %rdx
movq %rbx, %rdi
callq 0x2e440
movl $0x3, %edx
movq %rax, %rdi
leaq 0x274ef(%rip), %rsi     # 0x771d4
callq 0x2e440
movq -0xc8(%rbp), %rax
movq %rax, %rdx
subq -0xd0(%rbp), %rdx
sarq $0x3, %rdx
movabsq $-0x5555555555555555, %rcx # imm = 0xAAAAAAAAAAAAAAAB
imulq %rcx, %rdx
movq $-0x48, %rcx
cmpq $0x4, %rdx
jb 0x4fd21
movq $-0x18, %rcx
cmpb $0x1, 0x10(%rax,%rcx)
jne 0x4fd43
movq (%rax,%rcx), %rsi
movq 0x8(%rax,%rcx), %rdx
leaq -0x38(%rbp), %r12
movq %r12, -0x48(%rbp)
movq %r13, %rdi
callq 0x63144
jmp 0x4fd57
leaq -0x38(%rbp), %r12
movq %r12, -0x48(%rbp)
movq $0x0, -0x40(%rbp)
movb $0x0, -0x38(%rbp)
leaq -0x130(%rbp), %rdi
movq %r13, %rsi
callq 0x2e4c0
movq -0x48(%rbp), %rdi
cmpq %r12, %rdi
je 0x4fbc4
callq 0x2e360
jmp 0x4fbc4
leaq -0x58(%rbp), %rax
movq %rax, -0x68(%rbp)
movq -0x110(%rbp), %rsi
movq -0x108(%rbp), %rdx
addq %rsi, %rdx
leaq -0x68(%rbp), %r12
movq %r12, %rdi
callq 0x32cbc
movq %r12, %rdi
leaq 0x27d21(%rip), %rsi     # 0x77acd
callq 0x2e7e0
movq -0x178(%rbp), %rsi
movq -0x170(%rbp), %rdx
movq %r12, %rdi
callq 0x2e130
leaq -0x38(%rbp), %r12
movq %r12, -0x48(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x4fdeb
movq %rdx, -0x48(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x38(%rbp)
jmp 0x4fdf3
movups (%rcx), %xmm0
movups %xmm0, (%r12)
leaq -0x48(%rbp), %rsi
movq 0x8(%rax), %rdx
movq %rdx, -0x40(%rbp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq -0xa8(%rbp), %rdi
callq 0x2e4c0
movq -0x48(%rbp), %rdi
cmpq %r12, %rdi
je 0x4fe28
callq 0x2e360
movq -0x68(%rbp), %rdi
leaq -0x58(%rbp), %rax
cmpq %rax, %rdi
je 0x4fe3a
callq 0x2e360
leaq -0x1a8(%rbp), %rax
movq %rax, -0x1b8(%rbp)
movq -0xa8(%rbp), %rsi
movq -0xa0(%rbp), %rdx
addq %rsi, %rdx
leaq -0x1b8(%rbp), %r12
movq %r12, %rdi
callq 0x32cbc
movq %r12, %rdi
leaq 0x281eb(%rip), %rsi     # 0x7805d
callq 0x2e7e0
movq %r12, %rdi
leaq 0x281e2(%rip), %rsi     # 0x78063
callq 0x2e7e0
movq %r15, -0x158(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x4feaf
movq %rdx, -0x158(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x148(%rbp)
jmp 0x4feb6
movups (%rcx), %xmm0
movups %xmm0, (%r15)
movq 0x8(%rax), %rdx
movq %rdx, -0x150(%rbp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq -0x158(%rbp), %rdi
leaq 0x2818e(%rip), %rsi     # 0x7806c
callq 0x2e7e0
leaq -0x58(%rbp), %rsi
movq %rsi, -0x68(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x4ff07
movq %rdx, -0x68(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x58(%rbp)
jmp 0x4ff0d
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, -0x60(%rbp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq -0x48(%rbp), %rdi
leaq -0x68(%rbp), %rsi
movl $0x10, %edx
callq 0x506c4
movq -0x68(%rbp), %rdi
leaq -0x58(%rbp), %rax
cmpq %rax, %rdi
je 0x4ff48
callq 0x2e360
movq -0x158(%rbp), %rdi
cmpq %r15, %rdi
je 0x4ff59
callq 0x2e360
movq -0x1b8(%rbp), %rdi
leaq -0x1a8(%rbp), %rax
cmpq %rax, %rdi
je 0x500ff
callq 0x2e360
jmp 0x500ff
movq %r14, %r13
movq %r15, %r12
movq -0xd0(%rbp), %rcx
movq -0xc8(%rbp), %rdx
movq %rdx, %rax
subq %rcx, %rax
leaq -0x48(%rdx), %rsi
cmpq $0x48, %rax
movq %rcx, %rax
cmoveq %rsi, %rax
cmpq %rcx, %rdx
cmoveq %rsi, %rax
cmpb $0x1, 0x10(%rax)
jne 0x4ffcd
movq (%rax), %rsi
movq 0x8(%rax), %rdx
leaq -0x58(%rbp), %r15
movq %r15, -0x68(%rbp)
leaq -0x68(%rbp), %r14
movq %r14, %rdi
callq 0x63144
jmp 0x4ffe5
leaq -0x58(%rbp), %r15
movq %r15, -0x68(%rbp)
movq $0x0, -0x60(%rbp)
movb $0x0, -0x58(%rbp)
leaq -0x68(%rbp), %r14
leaq -0xa8(%rbp), %rdi
movq %r14, %rsi
callq 0x2e4c0
movq -0x68(%rbp), %rdi
cmpq %r15, %rdi
je 0x50002
callq 0x2e360
movq %r14, %rdi
leaq 0x27c7b(%rip), %rsi     # 0x77c87
leaq -0xa8(%rbp), %rdx
callq 0x50757
leaq -0xf0(%rbp), %rdi
movq %r14, %rsi
callq 0x2e4c0
movq -0x68(%rbp), %rdi
leaq -0x58(%rbp), %rax
cmpq %rax, %rdi
je 0x50039
callq 0x2e360
movl $0x3, %edx
movq %rbx, %rdi
leaq 0x28027(%rip), %rsi     # 0x7806f
callq 0x2e440
movq -0xf0(%rbp), %rsi
movq -0xe8(%rbp), %rdx
movq %rbx, %rdi
callq 0x2e440
movl $0x3, %edx
movq %rax, %rdi
leaq 0x27162(%rip), %rsi     # 0x771d4
callq 0x2e440
movq -0xc8(%rbp), %rax
movq %rax, %rdx
subq -0xd0(%rbp), %rdx
sarq $0x3, %rdx
movabsq $-0x5555555555555555, %rcx # imm = 0xAAAAAAAAAAAAAAAB
imulq %rcx, %rdx
movq $-0x48, %rcx
cmpq $0x4, %rdx
jb 0x500ae
movq $-0x18, %rcx
cmpb $0x1, 0x10(%rax,%rcx)
jne 0x500cc
movq (%rax,%rcx), %rsi
movq 0x8(%rax,%rcx), %rdx
movq %r15, -0x68(%rbp)
movq %r14, %rdi
callq 0x63144
jmp 0x500dc
movq %r15, -0x68(%rbp)
movq $0x0, -0x60(%rbp)
movb $0x0, -0x58(%rbp)
leaq -0x130(%rbp), %rdi
movq %r14, %rsi
callq 0x2e4c0
movq -0x68(%rbp), %rdi
cmpq %r15, %rdi
je 0x500f9
callq 0x2e360
movq %r12, %r15
movq %r13, %r14
movq -0x130(%rbp), %rdi
movq -0x128(%rbp), %rsi
addq %rdi, %rsi
leaq -0xd0(%rbp), %rdx
leaq -0x48(%rbp), %rcx
xorl %r8d, %r8d
callq 0x60d67
testb %al, %al
jne 0x4ff7a
leaq -0x48(%rbp), %rdi
callq 0x5072e
movq %r14, %rdi
callq 0x5072e
leaq -0x198(%rbp), %rdi
callq 0x5072e
movq -0xd0(%rbp), %rdi
testq %rdi, %rdi
je 0x50159
callq 0x2e360
movq -0xf0(%rbp), %rdi
leaq -0xe0(%rbp), %rax
cmpq %rax, %rdi
je 0x50171
callq 0x2e360
movq -0xa8(%rbp), %rdi
leaq -0x98(%rbp), %rax
cmpq %rax, %rdi
je 0x50189
callq 0x2e360
movq -0x178(%rbp), %rdi
leaq -0x168(%rbp), %rax
cmpq %rax, %rdi
je 0x501a1
callq 0x2e360
movq -0x1d8(%rbp), %rcx
addq $0x8, %rcx
cmpq -0x1d0(%rbp), %rcx
jne 0x4f5ab
movq -0x110(%rbp), %rdi
leaq -0x100(%rbp), %rax
cmpq %rax, %rdi
je 0x501d1
callq 0x2e360
movq -0x1c8(%rbp), %rax
addq $0x8, %rax
cmpq -0x1c0(%rbp), %rax
jne 0x4f521
testb $0x2, -0x138(%rbp)
je 0x50206
leaq 0x2737f(%rip), %rsi     # 0x77578
movl $0x1b, %edx
movq %rbx, %rdi
callq 0x2e440
testb $0x2, -0x134(%rbp)
je 0x50223
leaq 0x2737e(%rip), %rsi     # 0x77594
movl $0x1b, %edx
movq %rbx, %rdi
callq 0x2e440
movq -0x130(%rbp), %rdi
leaq -0x120(%rbp), %rax
cmpq %rax, %rdi
je 0x5023b
callq 0x2e360
addq $0x1c8, %rsp            # imm = 0x1C8
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0x50273
jmp 0x50273
movq %rax, %rbx
jmp 0x5048c
movq %rax, %rbx
movq -0x1f0(%rbp), %rdi
testq %rdi, %rdi
jne 0x50487
jmp 0x5048c
jmp 0x50273
movq %rax, %rbx
jmp 0x50474
jmp 0x503e3
jmp 0x50299
movq %rax, %rbx
movq -0x68(%rbp), %rdi
leaq -0x58(%rbp), %rax
cmpq %rax, %rdi
je 0x502a1
callq 0x2e360
jmp 0x502a1
movq %rax, %rbx
jmp 0x502b2
movq %rax, %rbx
movq -0x158(%rbp), %rdi
cmpq %r15, %rdi
je 0x502b2
callq 0x2e360
movq -0x1b8(%rbp), %rdi
leaq -0x1a8(%rbp), %rax
jmp 0x502d4
jmp 0x502c9
jmp 0x503e3
movq %rax, %rbx
movq -0x68(%rbp), %rdi
leaq -0x58(%rbp), %rax
cmpq %rax, %rdi
je 0x503e6
callq 0x2e360
jmp 0x503e6
jmp 0x503f4
jmp 0x502ee
movq %rax, %rbx
movq -0x48(%rbp), %rdi
leaq -0x38(%rbp), %rax
cmpq %rax, %rdi
jne 0x5034b
jmp 0x503f7
jmp 0x503f4
movq %rax, %rbx
jmp 0x50329
jmp 0x5030f
movq %rax, %rbx
jmp 0x5033b
movq %rax, %rbx
movq -0x48(%rbp), %rdi
leaq -0x38(%rbp), %rax
cmpq %rax, %rdi
je 0x50329
callq 0x2e360
movq -0x68(%rbp), %rdi
leaq -0x58(%rbp), %rax
cmpq %rax, %rdi
je 0x5033b
callq 0x2e360
movq -0x158(%rbp), %rdi
cmpq %r15, %rdi
je 0x503f7
callq 0x2e360
jmp 0x503f7
movq %rax, %rbx
jmp 0x5045c
jmp 0x50373
jmp 0x50361
movq %rax, %rbx
movq -0x88(%rbp), %rdi
leaq -0x78(%rbp), %rax
jmp 0x503b7
jmp 0x5037b
movq %rax, %rbx
jmp 0x50403
movq %rax, %rbx
jmp 0x503af
movq %rax, %rbx
jmp 0x5039d
movq %rax, %rbx
movq -0x88(%rbp), %rdi
leaq -0x78(%rbp), %rax
cmpq %rax, %rdi
je 0x5039d
callq 0x2e360
movq -0x48(%rbp), %rdi
leaq -0x38(%rbp), %rax
cmpq %rax, %rdi
je 0x503af
callq 0x2e360
movq -0x68(%rbp), %rdi
leaq -0x58(%rbp), %rax
cmpq %rax, %rdi
je 0x50403
callq 0x2e360
jmp 0x50403
jmp 0x503e3
jmp 0x503e3
jmp 0x503d5
jmp 0x503d5
jmp 0x503f4
jmp 0x503f4
jmp 0x503d5
jmp 0x503e3
jmp 0x503f4
movq %rax, %rbx
leaq -0x48(%rbp), %rdi
callq 0x5072e
jmp 0x503e6
movq %rax, %rbx
leaq -0x88(%rbp), %rdi
callq 0x5072e
jmp 0x503f7
movq %rax, %rbx
leaq -0x198(%rbp), %rdi
callq 0x5072e
movq -0xd0(%rbp), %rdi
testq %rdi, %rdi
je 0x50414
callq 0x2e360
movq -0xf0(%rbp), %rdi
leaq -0xe0(%rbp), %rax
cmpq %rax, %rdi
je 0x5042c
callq 0x2e360
movq -0xa8(%rbp), %rdi
leaq -0x98(%rbp), %rax
cmpq %rax, %rdi
je 0x50444
callq 0x2e360
movq -0x178(%rbp), %rdi
leaq -0x168(%rbp), %rax
cmpq %rax, %rdi
je 0x5045c
callq 0x2e360
movq -0x110(%rbp), %rdi
leaq -0x100(%rbp), %rax
cmpq %rax, %rdi
je 0x50474
callq 0x2e360
movq -0x130(%rbp), %rdi
leaq -0x120(%rbp), %rax
cmpq %rax, %rdi
je 0x5048c
callq 0x2e360
movq %rbx, %rdi
callq 0x2e730