// File: /workspace/github_cpp_makefile_star2_O3/eniac[P]Mantis/src/compile/compile_p4.cpp
// Function: generatePackingTablesForIng(std::vector<AstNode*, std::allocator<AstNode*>>*, std::vector<std::pair<std::vector<std::pair<ReactionArgNode*, int>, std::allocator<std::pair<ReactionArgNode*, int>>>, int>, std::allocator<std::pair<std::vector<std::pair<ReactionArgNode*, int>, std::allocator<std::pair<ReactionArgNode*, int>>>, int>>> const&, bool)
static vector<MblRefNode*> generatePackingTablesForIng(vector<AstNode*>* newNodes,
                                          const vector<ReactionArgBin>& bins, bool forIng) {
    vector<MblRefNode*> reactionArgRefs;

    string p4rArgHdrType;
    string p4rArgHdrName;
    string p4rPackTableNameBase;
    string p4rPackActionNameBase;
    string p4rPackFlcNameBase;
    string p4rPackFlNameBase;
    if(forIng) {
        p4rArgHdrType = std::string(kP4rIngArghdrType);
        p4rArgHdrName = std::string(kP4rIngArghdrName);
        p4rPackTableNameBase = "__tiPack";
        p4rPackActionNameBase = "__aiPack";
        p4rPackFlcNameBase = "__flci_packedArgs_reg";
        p4rPackFlNameBase = "__fli_packedArgs_reg";
    } else {
        p4rArgHdrType = std::string(kP4rEgrArghdrType);
        p4rArgHdrName = std::string(kP4rEgrArghdrName);
        p4rPackTableNameBase = "__tePack";
        p4rPackActionNameBase = "__aePack";
        p4rPackFlcNameBase = "__flce_packedArgs_reg";
        p4rPackFlNameBase = "__fle_packedArgs_reg";
    }

    // Generate packed fields
    ostringstream oss_fld;
    oss_fld << "header_type " << p4rArgHdrType << " {\n"
            << "  fields {\n";
    for (int i = 0; i < bins.size(); ++i) {
        oss_fld << "  reg" << i << " : " << bins[i].second << ";\n";
    }
    oss_fld << " }\n"
            << "}\n\n"
            << "metadata " << p4rArgHdrType << " "
                           << p4rArgHdrName << ";\n\n";
    auto packedMetaNode = new UnanchoredNode(
            new string(oss_fld.str()), new string("metadata"),
            new string(p4rArgHdrType));
    newNodes->push_back(packedMetaNode);

    // Synthesize table/action for each pack
    for (int i = 0; i < bins.size(); ++i) {
        // Generate packing table
        auto tiPackName = new NameNode(new string(p4rPackTableNameBase+std::to_string(i)));
        auto tiPackReads = new TableReadStmtsNode();
        auto tiPackActions = new TableActionStmtsNode();
        tiPackActions->push_back(
                new TableActionStmtNode(new NameNode(new string(p4rPackActionNameBase+std::to_string(i)))));
        auto tiPackTable = new TableNode(tiPackName, tiPackReads, tiPackActions,
                                        "  default_action : "+p4rPackActionNameBase+std::to_string(i)+"();\nsize:1;", "");
        newNodes->push_back(tiPackTable);

        // Generate packing action
        auto aiPackName = new NameNode(new string(p4rPackActionNameBase+std::to_string(i)));
        auto aiPackParams = new ActionParamsNode();
        auto aiPackStmts = new ActionStmtsNode(); 

        // Actual size of the reg (<= 32)
        int regsize = 0;
        // Generate field list node
        ostringstream oss_fl;
        oss_fl << "field_list " << p4rPackFlNameBase << i << "{\n";
        for (int j = 0; j < bins[i].first.size(); ++j) {

            AstNode* arg = bins[i].first[j].first->arg_;
            int width = bins[i].first[j].second;
            regsize += width;

            if (typeContains(arg, "FieldNode")) {
                oss_fl << arg->toString() << ";\n";
            } else if (typeContains(arg, "MblRefNode")) {
                oss_fl << arg->toString() << ";\n";
                // Mark this ref for future processing
                // Currently not supporting field list and hash duplication
                reactionArgRefs.push_back(dynamic_cast<MblRefNode*>(arg));
            } else {
                assert(false);
            }            

        }
        // Close field_list
        oss_fl << "\n}\n\n";
        newNodes->push_back(
            new UnanchoredNode(
                new string(oss_fl.str()), new string("field_list"),
                new string("field_list"+std::to_string(i)))
        );  

        // Generate field_list_calculation
        ostringstream oss_flc;
        oss_flc << "field_list_calculation " << p4rPackFlcNameBase << i << " {\n"
                << "  input {\n"
                << "    " << p4rPackFlNameBase << i << ";\n"
                << "  }\n"
                << "  algorithm : identity;\n"
                << "  output_width : " << regsize << ";\n"
                << "}\n\n";

        newNodes->push_back(
            new UnanchoredNode(
                new string(oss_flc.str()), new string("field_list_calc"),
                new string(p4rPackFlcNameBase+std::to_string(i)))
        ); 

        // Example: modify_field_with_hash_based_offset(dst, 0, __flce_packedArgs_reg0, 4294967296);
        // Note: alternative approach using (modify - shift_left - add_to_field) would not fit into a single action due to data plane constraints
        auto aiPackStmtName = new NameNode(new string("modify_field_with_hash_based_offset"));
        auto aiPackStmtArgs = new ArgsNode();
        // dst
        ostringstream oss_postfix;
        oss_postfix << "reg" << i;
        BodyWordNode* targetBodyWord = new BodyWordNode(
            BodyWordNode::FIELD,
                new FieldNode(
                    new NameNode(new string(p4rArgHdrName)),
                    new NameNode(new string(oss_postfix.str()))));
        aiPackStmtArgs->push_back(targetBodyWord);
        // base
        aiPackStmtArgs->push_back(
                new BodyWordNode(
                    BodyWordNode::INTEGER,
                    new IntegerNode(new string(to_string(0))))); 
        // __calc_packedArgs_regx
        aiPackStmtArgs->push_back(
                new BodyWordNode(
                    BodyWordNode::STRING,
                    new StrNode(new string(p4rPackFlcNameBase+std::to_string(i)))));             
        // size (power of 2)           
        aiPackStmtArgs->push_back(
                new BodyWordNode(
                    BodyWordNode::INTEGER,
                    new IntegerNode(new string(to_string((long long)(pow(2, regsize))))))); 

        aiPackStmts->push_back(
                new ActionStmtNode(aiPackStmtName, aiPackStmtArgs, ActionStmtNode::NAME_ARGLIST, NULL, NULL));        
        
        auto aiPackAction = new ActionNode(aiPackName, aiPackParams, aiPackStmts);
        auto aiPackActionWrapper = new InputNode(NULL, aiPackAction);
        newNodes->push_back(aiPackActionWrapper);
    }
    
    return reactionArgRefs;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x768, %rsp            # imm = 0x768
movq %rdx, -0x60(%rbp)
movq %rsi, -0x68(%rbp)
xorpd %xmm0, %xmm0
movupd %xmm0, (%rdi)
xorl %eax, %eax
movq %rdi, -0xe8(%rbp)
movq %rax, 0x10(%rdi)
leaq -0xc0(%rbp), %rdx
movq %rdx, -0x10(%rdx)
movq %rax, -0x8(%rdx)
movb %al, (%rdx)
leaq -0x138(%rbp), %rdx
movq %rdx, -0x10(%rdx)
movq %rax, -0x8(%rdx)
movb %al, (%rdx)
leaq -0x178(%rbp), %rdx
movq %rdx, -0x10(%rdx)
movq %rax, -0x8(%rdx)
movb %al, (%rdx)
leaq -0x118(%rbp), %rdx
movq %rdx, -0x10(%rdx)
movq %rax, -0x8(%rdx)
movb %al, (%rdx)
leaq -0xa0(%rbp), %rdx
movq %rdx, -0x10(%rdx)
movq %rax, -0x8(%rdx)
movb %al, (%rdx)
leaq -0x80(%rbp), %rdx
movq %rdx, -0x10(%rdx)
movq %rax, -0x8(%rdx)
movb %al, (%rdx)
leaq -0x778(%rbp), %r14
testl %ecx, %ecx
je 0x69a9e
movq %r14, -0x10(%r14)
leaq 0x1057c(%rip), %rsi     # 0x79f42
leaq 0x10586(%rip), %rdx     # 0x79f53
leaq -0x788(%rbp), %rdi
callq 0x32e40
leaq -0xd0(%rbp), %rdi
leaq -0x788(%rbp), %rbx
movq %rbx, %rsi
callq 0x2e4c0
movq (%rbx), %rdi
cmpq %r14, %rdi
je 0x699fc
callq 0x2e360
leaq -0x788(%rbp), %rdi
movq %r14, (%rdi)
leaq 0x10547(%rip), %rsi     # 0x79f54
leaq 0x1054f(%rip), %rdx     # 0x79f63
callq 0x32e40
leaq -0x148(%rbp), %rdi
movq %rbx, %rsi
callq 0x2e4c0
movq (%rbx), %rdi
cmpq %r14, %rdi
je 0x69a35
callq 0x2e360
leaq -0x188(%rbp), %rdi
movq 0x8(%rdi), %rdx
leaq 0x1012b(%rip), %rcx     # 0x79b72
movl $0x8, %r8d
xorl %esi, %esi
callq 0x2e640
leaq -0x128(%rbp), %rdi
movq 0x8(%rdi), %rdx
leaq 0x104fe(%rip), %rcx     # 0x79f64
movl $0x8, %r8d
xorl %esi, %esi
callq 0x2e640
leaq -0xb0(%rbp), %rdi
movq 0x8(%rdi), %rdx
leaq 0x104e8(%rip), %rcx     # 0x79f6d
movl $0x15, %r8d
xorl %esi, %esi
callq 0x2e640
leaq 0x104ea(%rip), %rcx     # 0x79f83
jmp 0x69b7c
movq %r14, -0x10(%r14)
leaq 0x104ef(%rip), %rsi     # 0x79f98
leaq 0x104f9(%rip), %rdx     # 0x79fa9
leaq -0x788(%rbp), %rdi
callq 0x32e40
leaq -0xd0(%rbp), %rdi
leaq -0x788(%rbp), %rbx
movq %rbx, %rsi
callq 0x2e4c0
movq (%rbx), %rdi
cmpq %r14, %rdi
je 0x69adf
callq 0x2e360
leaq -0x788(%rbp), %rdi
movq %r14, (%rdi)
leaq 0x104ba(%rip), %rsi     # 0x79faa
leaq 0x104c2(%rip), %rdx     # 0x79fb9
callq 0x32e40
leaq -0x148(%rbp), %rdi
movq %rbx, %rsi
callq 0x2e4c0
movq (%rbx), %rdi
cmpq %r14, %rdi
je 0x69b18
callq 0x2e360
leaq -0x188(%rbp), %rdi
movq 0x8(%rdi), %rdx
leaq 0x10075(%rip), %rcx     # 0x79b9f
movl $0x8, %r8d
xorl %esi, %esi
callq 0x2e640
leaq -0x128(%rbp), %rdi
movq 0x8(%rdi), %rdx
leaq 0x10471(%rip), %rcx     # 0x79fba
movl $0x8, %r8d
xorl %esi, %esi
callq 0x2e640
leaq -0xb0(%rbp), %rdi
movq 0x8(%rdi), %rdx
leaq 0x1045b(%rip), %rcx     # 0x79fc3
movl $0x15, %r8d
xorl %esi, %esi
callq 0x2e640
leaq 0x1045d(%rip), %rcx     # 0x79fd9
leaq -0x90(%rbp), %rdi
movq 0x8(%rdi), %rdx
movl $0x14, %r8d
xorl %esi, %esi
callq 0x2e640
leaq -0x788(%rbp), %rdi
callq 0x2e550
leaq 0xc23e(%rip), %rsi      # 0x75de5
leaq -0x788(%rbp), %rdi
movl $0xc, %edx
callq 0x2e440
movq -0xd0(%rbp), %rsi
movq -0xc8(%rbp), %rdx
leaq -0x788(%rbp), %rdi
callq 0x2e440
movq %rax, %rbx
leaq 0xfff3(%rip), %rsi      # 0x79bcf
movl $0x3, %edx
movq %rax, %rdi
callq 0x2e440
leaq 0xc202(%rip), %rsi      # 0x75df2
movl $0xb, %edx
movq %rbx, %rdi
callq 0x2e440
movq -0x60(%rbp), %rcx
movq 0x8(%rcx), %rax
cmpq (%rcx), %rax
je 0x69c97
movl $0x18, %r12d
xorl %ebx, %ebx
leaq -0x788(%rbp), %r15
leaq 0xc201(%rip), %r13      # 0x75e25
movl $0x5, %edx
movq %r15, %rdi
leaq 0x103bb(%rip), %rsi     # 0x79fee
callq 0x2e440
movq %r15, %rdi
movl %ebx, %esi
callq 0x2e700
movq %rax, %r14
movl $0x3, %edx
movq %rax, %rdi
leaq 0x100e8(%rip), %rsi     # 0x79d3c
callq 0x2e440
movq -0x60(%rbp), %rax
movq (%rax), %rax
movl (%rax,%r12), %esi
movq %r14, %rdi
callq 0x2e700
movl $0x2, %edx
movq %rax, %rdi
movq %r13, %rsi
callq 0x2e440
movq -0x60(%rbp), %rcx
movq 0x8(%rcx), %rax
subq (%rcx), %rax
incq %rbx
sarq $0x5, %rax
addq $0x20, %r12
cmpq %rbx, %rax
ja 0x69c24
leaq 0xd719(%rip), %rsi      # 0x773b7
leaq -0x788(%rbp), %rdi
movl $0x3, %edx
callq 0x2e440
leaq 0x103d7(%rip), %rsi     # 0x7a08d
leaq -0x788(%rbp), %rdi
movl $0x3, %edx
callq 0x2e440
leaq 0xc138(%rip), %rsi      # 0x75e06
leaq -0x788(%rbp), %rdi
movl $0x9, %edx
callq 0x2e440
movq -0xd0(%rbp), %rsi
movq -0xc8(%rbp), %rdx
leaq -0x788(%rbp), %rdi
callq 0x2e440
movq %rax, %rbx
leaq 0xe36e(%rip), %rsi      # 0x78071
movl $0x1, %edx
movq %rax, %rdi
callq 0x2e440
movq -0x148(%rbp), %rsi
movq -0x140(%rbp), %rdx
movq %rbx, %rdi
callq 0x2e440
leaq 0xd4a7(%rip), %rsi      # 0x771d4
movl $0x3, %edx
movq %rax, %rdi
callq 0x2e440
movl $0x58, %edi
callq 0x2e3a0
movq %rax, %rbx
movl $0x20, %edi
callq 0x2e3a0
movq %rax, %r14
leaq -0x780(%rbp), %rsi
movq %rax, %rdi
callq 0x2e660
movl $0x20, %edi
callq 0x2e3a0
movq %rax, %r15
addq $0x10, %rax
movq %rax, (%r15)
leaq 0xffc2(%rip), %rsi      # 0x79d40
leaq 0xffc3(%rip), %rdx      # 0x79d48
movq %r15, %rdi
callq 0x32e40
movl $0x20, %edi
callq 0x2e3a0
movq %rax, %r12
addq $0x10, %rax
movq %rax, (%r12)
movq -0xd0(%rbp), %rsi
movq -0xc8(%rbp), %rdx
addq %rsi, %rdx
movq %r12, %rdi
callq 0x32cbc
movq %rbx, %rdi
movq %r14, %rsi
movq %r15, %rdx
movq %r12, %rcx
callq 0x3e120
movq %rbx, -0x320(%rbp)
movq -0x68(%rbp), %rdi
movq 0x8(%rdi), %rsi
cmpq 0x10(%rdi), %rsi
je 0x69deb
movq %rbx, (%rsi)
addq $0x8, 0x8(%rdi)
jmp 0x69df7
leaq -0x320(%rbp), %rdx
callq 0x3311a
movq -0x60(%rbp), %rcx
movq 0x8(%rcx), %rax
cmpq (%rcx), %rax
je 0x6b0e0
movq $0x0, -0x30(%rbp)
movl $0x48, %edi
callq 0x2e3a0
movq %rax, -0x40(%rbp)
movl $0x20, %edi
callq 0x2e3a0
movq %rax, %rbx
movl $0x1, %r14d
cmpq $0xa, -0x30(%rbp)
jb 0x69e80
movl $0x4, %r14d
movq -0x30(%rbp), %rax
cmpl $0x63, %eax
jbe 0x69e77
cmpl $0x3e7, %eax            # imm = 0x3E7
jbe 0x69e7d
cmpl $0x2710, %eax           # imm = 0x2710
jb 0x69e80
movl %eax, %ecx
movl $0xd1b71759, %edx       # imm = 0xD1B71759
imulq %rdx, %rcx
shrq $0x2d, %rcx
addl $0x4, %r14d
cmpl $0x1869f, %eax          # imm = 0x1869F
movl %ecx, %eax
ja 0x69e42
addl $-0x3, %r14d
jmp 0x69e80
addl $-0x2, %r14d
jmp 0x69e80
decl %r14d
movl %r14d, %esi
leaq -0x310(%rbp), %rax
movq %rax, -0x320(%rbp)
leaq -0x320(%rbp), %r15
movq %r15, %rdi
movl $0x2d, %edx
callq 0x2e460
movq -0x320(%rbp), %rdi
movl %r14d, %esi
movq -0x30(%rbp), %rdx
callq 0x39847
movb $0x1, %r14b
movq -0x188(%rbp), %rcx
movq -0x180(%rbp), %r8
movq %r15, %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0x2e420
movq %rbx, %rdx
addq $0x10, %rdx
movq %rdx, (%rbx)
movq (%rax), %rsi
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rsi
je 0x69efa
movq %rsi, (%rbx)
movq (%rcx), %rdx
movq %rdx, 0x10(%rbx)
jmp 0x69f02
movupd (%rcx), %xmm0
movupd %xmm0, (%rdx)
movq 0x8(%rax), %rdx
movq %rdx, 0x8(%rbx)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
xorl %r14d, %r14d
movq -0x40(%rbp), %rdi
movq %rbx, %rsi
callq 0x326ee
movq -0x320(%rbp), %rdi
leaq -0x310(%rbp), %rax
cmpq %rax, %rdi
je 0x69f40
callq 0x2e360
movl $0x48, %edi
callq 0x2e3a0
movq %rax, %r14
movq %rax, %rdi
callq 0x36ac4
movl $0x48, %edi
callq 0x2e3a0
movq %rax, %r15
movq %rax, %rdi
callq 0x36dde
movl $0x48, %edi
callq 0x2e3a0
movq %rax, -0x58(%rbp)
movl $0x48, %edi
callq 0x2e3a0
movq %rax, -0x50(%rbp)
movl $0x20, %edi
callq 0x2e3a0
movq %rax, %r12
movl $0x1, %ebx
cmpq $0xa, -0x30(%rbp)
jb 0x69fe2
movl $0x4, %ebx
movq -0x30(%rbp), %rax
cmpl $0x63, %eax
jbe 0x69fdb
cmpl $0x3e7, %eax            # imm = 0x3E7
jbe 0x69fe0
cmpl $0x2710, %eax           # imm = 0x2710
jb 0x69fe2
movl %eax, %ecx
movl $0xd1b71759, %edx       # imm = 0xD1B71759
imulq %rdx, %rcx
shrq $0x2d, %rcx
addl $0x4, %ebx
cmpl $0x1869f, %eax          # imm = 0x1869F
movl %ecx, %eax
ja 0x69fa8
addl $-0x3, %ebx
jmp 0x69fe2
addl $-0x2, %ebx
jmp 0x69fe2
decl %ebx
movq %r15, -0x38(%rbp)
movq %r14, -0x48(%rbp)
movl %ebx, %esi
leaq -0x310(%rbp), %rax
movq %rax, -0x320(%rbp)
leaq -0x320(%rbp), %r14
movq %r14, %rdi
movl $0x2d, %edx
callq 0x2e460
movq -0x320(%rbp), %rdi
movl %ebx, %esi
movq -0x30(%rbp), %rdx
callq 0x39847
movb $0x1, %bl
movq -0x128(%rbp), %rcx
movq -0x120(%rbp), %r8
movb $0x1, %r13b
movb $0x1, %r15b
movq %r14, %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0x2e420
movq %r12, %rdx
addq $0x10, %rdx
movq %rdx, (%r12)
movq (%rax), %rsi
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rsi
je 0x6a06a
movq %rsi, (%r12)
movq (%rcx), %rdx
movq %rdx, 0x10(%r12)
jmp 0x6a072
movupd (%rcx), %xmm0
movupd %xmm0, (%rdx)
movq 0x8(%rax), %rdx
movq %rdx, 0x8(%r12)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
xorl %r15d, %r15d
movb $0x1, %r13b
movq -0x50(%rbp), %rdi
movq %r12, %rsi
callq 0x326ee
xorl %r13d, %r13d
xorl %r15d, %r15d
movq -0x58(%rbp), %rdi
movq -0x50(%rbp), %rsi
callq 0x36c26
xorl %r13d, %r13d
xorl %ebx, %ebx
xorl %r15d, %r15d
movq -0x38(%rbp), %rdi
movq -0x58(%rbp), %rsi
callq 0x3257c
movq -0x320(%rbp), %rdi
leaq -0x310(%rbp), %rax
cmpq %rax, %rdi
je 0x6a0dc
callq 0x2e360
movl $0x98, %edi
callq 0x2e3a0
leaq -0x158(%rbp), %r14
movq %rax, %r15
leaq -0x498(%rbp), %rdi
leaq 0xfef6(%rip), %rsi      # 0x79ff4
leaq -0x128(%rbp), %rdx
callq 0x50757
movl $0x1, %ebx
cmpq $0xa, -0x30(%rbp)
jb 0x6a159
movl $0x4, %ebx
movq -0x30(%rbp), %rax
cmpl $0x63, %eax
jbe 0x6a152
cmpl $0x3e7, %eax            # imm = 0x3E7
jbe 0x6a157
cmpl $0x2710, %eax           # imm = 0x2710
jb 0x6a159
movl %eax, %ecx
movl $0xd1b71759, %edx       # imm = 0xD1B71759
imulq %rdx, %rcx
shrq $0x2d, %rcx
addl $0x4, %ebx
cmpl $0x1869f, %eax          # imm = 0x1869F
movl %ecx, %eax
ja 0x6a11f
addl $-0x3, %ebx
jmp 0x6a159
addl $-0x2, %ebx
jmp 0x6a159
decl %ebx
movl %ebx, %esi
leaq -0x600(%rbp), %rax
movq %rax, -0x610(%rbp)
leaq -0x610(%rbp), %rdi
movl $0x2d, %edx
callq 0x2e460
movq -0x610(%rbp), %rdi
movl %ebx, %esi
movq -0x30(%rbp), %rdx
callq 0x39847
movq -0x498(%rbp), %rcx
movl $0xf, %edi
leaq -0x488(%rbp), %rax
cmpq %rax, %rcx
je 0x6a1ab
movq -0x488(%rbp), %rdi
movq -0x490(%rbp), %r8
movq -0x610(%rbp), %rsi
movq -0x608(%rbp), %rdx
leaq (%rdx,%r8), %rax
cmpq %rdi, %rax
jbe 0x6a1e6
movl $0xf, %edi
leaq -0x600(%rbp), %r9
cmpq %r9, %rsi
je 0x6a1e1
movq -0x600(%rbp), %rdi
cmpq %rdi, %rax
jbe 0x6a1f4
leaq -0x498(%rbp), %rdi
callq 0x2e130
jmp 0x6a204
leaq -0x610(%rbp), %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0x2e420
leaq -0x310(%rbp), %rsi
movq %rsi, -0x320(%rbp)
movq (%rax), %rdx
leaq 0x10(%rax), %rcx
cmpq %rcx, %rdx
je 0x6a231
movq %rdx, -0x320(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x310(%rbp)
jmp 0x6a239
movupd (%rcx), %xmm0
movupd %xmm0, (%rsi)
movq %rax, %rdx
addq $0x8, %rdx
movq 0x8(%rax), %rsi
movq %rsi, -0x318(%rbp)
movq %rcx, (%rax)
movq $0x0, (%rdx)
movb $0x0, (%rcx)
leaq -0x320(%rbp), %rdi
leaq 0xfda2(%rip), %rsi      # 0x7a008
callq 0x2e7e0
movq %r14, -0x168(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x6a294
movq %rdx, -0x168(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x158(%rbp)
jmp 0x6a29d
movupd (%rcx), %xmm0
movupd %xmm0, (%r14)
movq 0x8(%rax), %rdx
movq %rdx, -0x160(%rbp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq -0x198(%rbp), %rax
movq %rax, -0x1a8(%rbp)
leaq -0x1a8(%rbp), %rbx
movq %rbx, %rdi
leaq 0xd605(%rip), %rdx      # 0x778db
movq %rdx, %rsi
callq 0x32e40
movq %r15, %rdi
movq -0x40(%rbp), %rsi
movq -0x48(%rbp), %rdx
movq -0x38(%rbp), %rcx
leaq -0x168(%rbp), %r8
movq %rbx, %r9
callq 0x36f40
movq -0x1a8(%rbp), %rdi
leaq -0x198(%rbp), %rax
cmpq %rax, %rdi
je 0x6a314
callq 0x2e360
movq -0x168(%rbp), %rdi
cmpq %r14, %rdi
je 0x6a325
callq 0x2e360
movq -0x320(%rbp), %rdi
leaq -0x310(%rbp), %rax
cmpq %rax, %rdi
je 0x6a33d
callq 0x2e360
movq -0x610(%rbp), %rdi
leaq -0x600(%rbp), %rax
cmpq %rax, %rdi
je 0x6a355
callq 0x2e360
movq -0x498(%rbp), %rdi
leaq -0x488(%rbp), %rax
cmpq %rax, %rdi
je 0x6a36d
callq 0x2e360
movq %r15, -0x320(%rbp)
movq -0x68(%rbp), %rdi
movq 0x8(%rdi), %rsi
cmpq 0x10(%rdi), %rsi
je 0x6a38c
movq %r15, (%rsi)
addq $0x8, 0x8(%rdi)
jmp 0x6a398
leaq -0x320(%rbp), %rdx
callq 0x3311a
movl $0x48, %edi
callq 0x2e3a0
movq %rax, -0x58(%rbp)
movl $0x20, %edi
callq 0x2e3a0
movq %rax, %rbx
movl $0x1, %r14d
cmpq $0xa, -0x30(%rbp)
jb 0x6a408
movl $0x4, %r14d
movq -0x30(%rbp), %rax
cmpl $0x63, %eax
jbe 0x6a3ff
cmpl $0x3e7, %eax            # imm = 0x3E7
jbe 0x6a405
cmpl $0x2710, %eax           # imm = 0x2710
jb 0x6a408
movl %eax, %ecx
movl $0xd1b71759, %edx       # imm = 0xD1B71759
imulq %rdx, %rcx
shrq $0x2d, %rcx
addl $0x4, %r14d
cmpl $0x1869f, %eax          # imm = 0x1869F
movl %ecx, %eax
ja 0x6a3ca
addl $-0x3, %r14d
jmp 0x6a408
addl $-0x2, %r14d
jmp 0x6a408
decl %r14d
movl %r14d, %esi
leaq -0x310(%rbp), %rax
movq %rax, -0x320(%rbp)
leaq -0x320(%rbp), %r15
movq %r15, %rdi
movl $0x2d, %edx
callq 0x2e460
movq -0x320(%rbp), %rdi
movl %r14d, %esi
movq -0x30(%rbp), %rdx
callq 0x39847
movb $0x1, %r14b
movq -0x128(%rbp), %rcx
movq -0x120(%rbp), %r8
movq %r15, %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0x2e420
movq %rbx, %rdx
addq $0x10, %rdx
movq %rdx, (%rbx)
movq (%rax), %rsi
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rsi
je 0x6a482
movq %rsi, (%rbx)
movq (%rcx), %rdx
movq %rdx, 0x10(%rbx)
jmp 0x6a48a
movupd (%rcx), %xmm0
movupd %xmm0, (%rdx)
movq 0x8(%rax), %rdx
movq %rdx, 0x8(%rbx)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
xorl %r14d, %r14d
movq -0x58(%rbp), %rdi
movq %rbx, %rsi
callq 0x326ee
movq -0x320(%rbp), %rdi
leaq -0x310(%rbp), %rax
cmpq %rax, %rdi
je 0x6a4c8
callq 0x2e360
movl $0x48, %edi
callq 0x2e3a0
movq %rax, -0xe0(%rbp)
movq %rax, %rdi
callq 0x385e6
movl $0x48, %edi
callq 0x2e3a0
movq %rax, -0x50(%rbp)
movq %rax, %rdi
callq 0x38bfc
leaq -0x320(%rbp), %rbx
movq %rbx, %rdi
callq 0x2e550
movl $0xb, %edx
movq %rbx, %rdi
leaq 0xfaff(%rip), %rsi      # 0x7a014
callq 0x2e440
movq -0x90(%rbp), %rsi
movq -0x88(%rbp), %rdx
leaq -0x320(%rbp), %rdi
callq 0x2e440
movq %rax, %rdi
movq -0x30(%rbp), %rsi
callq 0x2e700
movl $0x2, %edx
movq %rax, %rdi
leaq 0xf681(%rip), %rsi      # 0x79bd0
callq 0x2e440
movq -0x60(%rbp), %rax
movq (%rax), %rcx
movq -0x30(%rbp), %r14
shlq $0x5, %r14
movq (%rcx,%r14), %rax
cmpq %rax, 0x8(%rcx,%r14)
je 0x6a6d7
xorl %r12d, %r12d
movl $0x8, %r13d
xorl %r15d, %r15d
movq -0x8(%rax,%r13), %rcx
movq 0x40(%rcx), %rbx
addl (%rax,%r13), %r15d
movq %rbx, %rdi
leaq 0xd99f(%rip), %rsi      # 0x77f34
callq 0x6e968
testb %al, %al
je 0x6a5fc
movq (%rbx), %rax
leaq -0x498(%rbp), %rdi
movq %rbx, %rsi
callq *(%rax)
movq -0x498(%rbp), %rsi
movq -0x490(%rbp), %rdx
leaq -0x320(%rbp), %rdi
callq 0x2e440
movl $0x2, %edx
movq %rax, %rdi
leaq 0xb84f(%rip), %rsi      # 0x75e25
callq 0x2e440
movq -0x498(%rbp), %rdi
leaq -0x488(%rbp), %rax
cmpq %rax, %rdi
je 0x6a6ae
callq 0x2e360
jmp 0x6a6ae
movq %rbx, %rdi
leaq 0xb80a(%rip), %rsi      # 0x75e10
callq 0x6e968
testb %al, %al
je 0x6b19e
movq (%rbx), %rax
leaq -0x498(%rbp), %rdi
movq %rbx, %rsi
callq *(%rax)
movq -0x498(%rbp), %rsi
movq -0x490(%rbp), %rdx
leaq -0x320(%rbp), %rdi
callq 0x2e440
movl $0x2, %edx
movq %rax, %rdi
leaq 0xb7da(%rip), %rsi      # 0x75e25
callq 0x2e440
movq -0x498(%rbp), %rdi
leaq -0x488(%rbp), %rax
cmpq %rax, %rdi
je 0x6a668
callq 0x2e360
movq %rbx, %rdi
leaq 0x2203e(%rip), %rsi     # 0x8c6b0
leaq 0x22e7f(%rip), %rdx     # 0x8d4f8
xorl %ecx, %ecx
callq 0x2e430
movq %rax, -0x498(%rbp)
movq -0xe8(%rbp), %rdi
movq 0x8(%rdi), %rsi
cmpq 0x10(%rdi), %rsi
je 0x6a6a2
movq %rax, (%rsi)
addq $0x8, 0x8(%rdi)
jmp 0x6a6ae
leaq -0x498(%rbp), %rdx
callq 0x6e260
incq %r12
movq -0x60(%rbp), %rax
movq (%rax), %rcx
movq (%rcx,%r14), %rax
movq 0x8(%rcx,%r14), %rcx
subq %rax, %rcx
sarq $0x4, %rcx
addq $0x10, %r13
cmpq %r12, %rcx
ja 0x6a57e
jmp 0x6a6da
xorl %r15d, %r15d
movl $0x4, %edx
leaq -0x320(%rbp), %rdi
leaq 0xf99f(%rip), %rsi      # 0x7a08c
callq 0x2e440
movl $0x58, %edi
callq 0x2e3a0
movq %rax, %r12
movl $0x20, %edi
callq 0x2e3a0
movq %rax, %rbx
movq %rax, %rdi
leaq -0x318(%rbp), %rsi
callq 0x2e660
movl $0x20, %edi
callq 0x2e3a0
movq %rax, %r14
addq $0x10, %rax
movq %rax, (%r14)
movq %r14, %rdi
leaq 0xf958(%rip), %rsi      # 0x7a091
leaq 0xf95b(%rip), %rdx      # 0x7a09b
callq 0x32e40
movq %rbx, -0x48(%rbp)
movl $0x20, %edi
callq 0x2e3a0
movq %rax, %rsi
movl $0x1, %ebx
cmpq $0xa, -0x30(%rbp)
jb 0x6a7a5
movl $0x4, %ebx
movq -0x30(%rbp), %rax
cmpl $0x63, %eax
jbe 0x6a79e
cmpl $0x3e7, %eax            # imm = 0x3E7
jbe 0x6a7a3
cmpl $0x2710, %eax           # imm = 0x2710
jb 0x6a7a5
movl %eax, %ecx
movl $0xd1b71759, %edx       # imm = 0xD1B71759
imulq %rdx, %rcx
shrq $0x2d, %rcx
addl $0x4, %ebx
cmpl $0x1869f, %eax          # imm = 0x1869F
movl %ecx, %eax
ja 0x6a76b
addl $-0x3, %ebx
jmp 0x6a7a5
addl $-0x2, %ebx
jmp 0x6a7a5
decl %ebx
movq %rsi, -0x38(%rbp)
movq %r12, -0x40(%rbp)
movl %ebx, %esi
leaq -0x488(%rbp), %rax
movq %rax, -0x498(%rbp)
leaq -0x498(%rbp), %r13
movq %r13, %rdi
movl $0x2d, %edx
callq 0x2e460
movq -0x498(%rbp), %rdi
movl %ebx, %esi
movq -0x30(%rbp), %rdx
callq 0x39847
movb $0x1, %bl
movl $0xa, %r8d
movb $0x1, %r12b
movq %r13, %rdi
xorl %esi, %esi
xorl %edx, %edx
leaq 0xf895(%rip), %rcx      # 0x7a091
callq 0x2e420
movq -0x38(%rbp), %rcx
movq %rcx, %rdi
addq $0x10, %rdi
movq %rdi, (%rcx)
movq (%rax), %rsi
movq %rax, %r8
addq $0x10, %r8
cmpq %r8, %rsi
je 0x6a82a
movq %rsi, (%rcx)
movq (%r8), %rsi
movq %rsi, 0x10(%rcx)
jmp 0x6a833
movupd (%r8), %xmm0
movupd %xmm0, (%rdi)
movq 0x8(%rax), %rsi
movq %rsi, 0x8(%rcx)
movq %r8, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
xorl %r12d, %r12d
movq -0x40(%rbp), %rdi
movq -0x48(%rbp), %rsi
movq %r14, %rdx
callq 0x3e120
movq -0x40(%rbp), %rax
movq %rax, -0x610(%rbp)
movq -0x68(%rbp), %rdi
movq 0x8(%rdi), %rsi
cmpq 0x10(%rdi), %rsi
je 0x6a880
movq %rax, (%rsi)
addq $0x8, 0x8(%rdi)
jmp 0x6a891
xorl %r12d, %r12d
xorl %ebx, %ebx
leaq -0x610(%rbp), %rdx
callq 0x3311a
movq -0x498(%rbp), %rdi
leaq -0x488(%rbp), %rax
cmpq %rax, %rdi
je 0x6a8a9
callq 0x2e360
leaq -0x498(%rbp), %rbx
movq %rbx, %rdi
callq 0x2e550
movl $0x17, %edx
movq %rbx, %rdi
leaq 0xf7d5(%rip), %rsi      # 0x7a09c
callq 0x2e440
movq -0xb0(%rbp), %rsi
movq -0xa8(%rbp), %rdx
leaq -0x498(%rbp), %rdi
callq 0x2e440
movq %rax, %rdi
movq -0x30(%rbp), %rsi
callq 0x2e700
movq %rax, %rbx
movl $0x3, %edx
movq %rax, %rdi
leaq 0xf2cb(%rip), %rsi      # 0x79bcf
callq 0x2e440
movl $0xa, %edx
movq %rbx, %rdi
leaq 0xf79c(%rip), %rsi      # 0x7a0b4
callq 0x2e440
movl $0x4, %edx
movq %rbx, %rdi
leaq 0xb482(%rip), %rsi      # 0x75dae
callq 0x2e440
movq -0x90(%rbp), %rsi
movq -0x88(%rbp), %rdx
movq %rbx, %rdi
callq 0x2e440
movq %rax, %rdi
movq -0x30(%rbp), %rsi
callq 0x2e700
movq %rax, %rbx
movl $0x2, %edx
movq %rax, %rdi
leaq 0xb4c0(%rip), %rsi      # 0x75e25
callq 0x2e440
movl $0x4, %edx
movq %rbx, %rdi
leaq 0xca3d(%rip), %rsi      # 0x773b6
callq 0x2e440
movl $0x18, %edx
movq %rbx, %rdi
leaq 0xf732(%rip), %rsi      # 0x7a0bf
callq 0x2e440
movl $0x11, %edx
movq %rbx, %rdi
leaq 0xf737(%rip), %rsi      # 0x7a0d8
callq 0x2e440
movq %rbx, %rdi
movl %r15d, %esi
callq 0x2e700
movq %rax, %rbx
movl $0x2, %edx
movq %rax, %rdi
leaq 0xb462(%rip), %rsi      # 0x75e25
callq 0x2e440
movl $0x3, %edx
movq %rbx, %rdi
leaq 0xf6b6(%rip), %rsi      # 0x7a08d
callq 0x2e440
movl $0x58, %edi
callq 0x2e3a0
movq %rax, %r12
movl $0x20, %edi
callq 0x2e3a0
movq %rax, %rbx
movq %rax, %rdi
leaq -0x490(%rbp), %rsi
callq 0x2e660
movl $0x20, %edi
callq 0x2e3a0
movq %rax, %r14
addq $0x10, %rax
movq %rax, (%r14)
movq %r14, %rdi
leaq 0xf6c7(%rip), %rsi      # 0x7a0ea
leaq 0xf6cf(%rip), %rdx      # 0x7a0f9
callq 0x32e40
movq %rbx, -0x48(%rbp)
movl $0x20, %edi
callq 0x2e3a0
movq %rax, %rsi
movl $0x1, %ebx
cmpq $0xa, -0x30(%rbp)
jb 0x6aa8f
movl $0x4, %ebx
movq -0x30(%rbp), %rax
cmpl $0x63, %eax
jbe 0x6aa88
cmpl $0x3e7, %eax            # imm = 0x3E7
jbe 0x6aa8d
cmpl $0x2710, %eax           # imm = 0x2710
jb 0x6aa8f
movl %eax, %ecx
movl $0xd1b71759, %edx       # imm = 0xD1B71759
imulq %rdx, %rcx
shrq $0x2d, %rcx
addl $0x4, %ebx
cmpl $0x1869f, %eax          # imm = 0x1869F
movl %ecx, %eax
ja 0x6aa55
addl $-0x3, %ebx
jmp 0x6aa8f
addl $-0x2, %ebx
jmp 0x6aa8f
decl %ebx
movq %rsi, -0x38(%rbp)
movq %r12, -0x40(%rbp)
movl %ebx, %esi
leaq -0x600(%rbp), %rax
movq %rax, -0x610(%rbp)
leaq -0x610(%rbp), %r13
movq %r13, %rdi
movl $0x2d, %edx
callq 0x2e460
movq -0x610(%rbp), %rdi
movl %ebx, %esi
movq -0x30(%rbp), %rdx
callq 0x39847
movb $0x1, %bl
movq -0xb0(%rbp), %rcx
movq -0xa8(%rbp), %r8
movb $0x1, %r12b
movq %r13, %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0x2e420
movq -0x38(%rbp), %rcx
movq %rcx, %rdi
addq $0x10, %rdi
movq %rdi, (%rcx)
movq (%rax), %rsi
movq %rax, %r8
addq $0x10, %r8
cmpq %r8, %rsi
je 0x6ab15
movq %rsi, (%rcx)
movq (%r8), %rsi
movq %rsi, 0x10(%rcx)
jmp 0x6ab1e
movupd (%r8), %xmm0
movupd %xmm0, (%rdi)
movq 0x8(%rax), %rsi
movq %rsi, 0x8(%rcx)
movq %r8, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
xorl %r12d, %r12d
movq -0x40(%rbp), %rdi
movq -0x48(%rbp), %rsi
movq %r14, %rdx
callq 0x3e120
movq -0x40(%rbp), %rax
movq %rax, -0x108(%rbp)
movq -0x68(%rbp), %rdi
movq 0x8(%rdi), %rsi
cmpq 0x10(%rdi), %rsi
je 0x6ab6b
movq %rax, (%rsi)
addq $0x8, 0x8(%rdi)
jmp 0x6ab7c
xorl %r12d, %r12d
xorl %ebx, %ebx
leaq -0x108(%rbp), %rdx
callq 0x3311a
movq -0x610(%rbp), %rdi
leaq -0x600(%rbp), %rax
cmpq %rax, %rdi
je 0x6ab94
callq 0x2e360
movl $0x48, %edi
callq 0x2e3a0
movq %rax, -0x48(%rbp)
movl $0x20, %edi
callq 0x2e3a0
movq %rax, %rbx
addq $0x10, %rax
movq %rax, (%rbx)
movq %rbx, %rdi
leaq 0xf53a(%rip), %rsi      # 0x7a0fa
leaq 0xf556(%rip), %rdx      # 0x7a11d
callq 0x32e40
movq -0x48(%rbp), %rdi
movq %rbx, %rsi
callq 0x326ee
movl $0x48, %edi
callq 0x2e3a0
movq %rax, -0x40(%rbp)
movq %rax, %rdi
callq 0x382be
leaq -0x610(%rbp), %rbx
movq %rbx, %rdi
callq 0x2e550
movl $0x3, %edx
movq %rbx, %rdi
leaq 0xf3e4(%rip), %rsi      # 0x79ff0
callq 0x2e440
movq %rbx, %rdi
movq -0x30(%rbp), %rsi
callq 0x2e700
movl $0x50, %edi
callq 0x2e3a0
movq %rax, -0x38(%rbp)
movl $0x50, %edi
callq 0x2e3a0
movq %rax, %r12
movl $0x48, %edi
callq 0x2e3a0
movq %rax, %r13
movl $0x20, %edi
callq 0x2e3a0
movq %rax, %rbx
addq $0x10, %rax
movq %rax, (%rbx)
movq -0x148(%rbp), %rsi
movq -0x140(%rbp), %rdx
addq %rsi, %rdx
movq %rbx, %rdi
callq 0x32cbc
movq %r13, %rdi
movq %rbx, %rsi
callq 0x326ee
movl $0x48, %edi
callq 0x2e3a0
movq %rax, %rbx
movl $0x20, %edi
callq 0x2e3a0
movq %rax, %r14
movq %rax, %rdi
leaq -0x608(%rbp), %rsi
callq 0x2e660
movq %rbx, %rdi
movq %r14, %rsi
callq 0x326ee
movq %r12, %rdi
movq %r13, %rsi
movq %rbx, %rdx
callq 0x3c376
movq -0x38(%rbp), %rdi
movl $0x2, %esi
movq %r12, %rdx
callq 0x34f1c
movq -0x40(%rbp), %rdi
movq -0x38(%rbp), %rsi
callq 0x326a4
movl $0x50, %edi
callq 0x2e3a0
movq %rax, %r14
movl $0x48, %edi
callq 0x2e3a0
movq %rax, %rbx
movl $0x20, %edi
callq 0x2e3a0
movq %rax, %r12
addq $0x10, %rax
movq %rax, (%r12)
movl $0x1, %esi
movq %r12, %rdi
movl $0x2d, %edx
callq 0x2e460
movq (%r12), %rax
movb $0x30, (%rax)
movq %rbx, %rdi
movq %r12, %rsi
callq 0x32998
movq %r14, %rdi
movl $0x4, %esi
movq %rbx, %rdx
callq 0x34f1c
movq -0x40(%rbp), %rdi
movq %r14, %rsi
callq 0x326a4
movl $0x50, %edi
callq 0x2e3a0
movl $0x48, %edi
movq %rax, -0xd8(%rbp)
callq 0x2e3a0
movq %rax, -0x38(%rbp)
movl $0x20, %edi
callq 0x2e3a0
movq %rax, %rsi
movl $0x1, %ebx
cmpq $0xa, -0x30(%rbp)
jb 0x6adc7
movl $0x4, %ebx
movq -0x30(%rbp), %rax
cmpl $0x63, %eax
jbe 0x6adc0
cmpl $0x3e7, %eax            # imm = 0x3E7
jbe 0x6adc5
cmpl $0x2710, %eax           # imm = 0x2710
jb 0x6adc7
movl %eax, %ecx
movl $0xd1b71759, %edx       # imm = 0xD1B71759
imulq %rdx, %rcx
shrq $0x2d, %rcx
addl $0x4, %ebx
cmpl $0x1869f, %eax          # imm = 0x1869F
movl %ecx, %eax
ja 0x6ad8d
addl $-0x3, %ebx
jmp 0x6adc7
addl $-0x2, %ebx
jmp 0x6adc7
decl %ebx
movq %rsi, -0x70(%rbp)
movl %ebx, %esi
leaq -0xf8(%rbp), %rax
movq %rax, -0x108(%rbp)
leaq -0x108(%rbp), %r12
movq %r12, %rdi
movl $0x2d, %edx
callq 0x2e460
movq -0x108(%rbp), %rdi
movl %ebx, %esi
movq -0x30(%rbp), %rdx
callq 0x39847
movb $0x1, %bl
movq -0xb0(%rbp), %rcx
movq -0xa8(%rbp), %r8
movb $0x1, %r13b
movb $0x1, %r14b
movq %r12, %rdi
xorl %esi, %esi
xorl %edx, %edx
movq -0xd8(%rbp), %r12
callq 0x2e420
movq -0x70(%rbp), %rsi
movq %rsi, %rdx
addq $0x10, %rdx
movq %rdx, (%rsi)
movq (%rax), %rdi
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdi
je 0x6ae53
movq %rdi, (%rsi)
movq (%rcx), %rdx
movq %rdx, 0x10(%rsi)
jmp 0x6ae5b
movupd (%rcx), %xmm0
movupd %xmm0, (%rdx)
movq 0x8(%rax), %rdx
movq %rdx, 0x8(%rsi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
xorl %r13d, %r13d
movb $0x1, %r14b
movq -0x38(%rbp), %rdi
callq 0x32870
xorl %r13d, %r13d
xorl %r14d, %r14d
movq %r12, %rdi
movl $0x3, %esi
movq -0x38(%rbp), %rdx
callq 0x34f1c
xorl %r13d, %r13d
xorl %r14d, %r14d
xorl %ebx, %ebx
movq -0x40(%rbp), %rdi
movq %r12, %rsi
callq 0x326a4
movq -0x108(%rbp), %rdi
leaq -0xf8(%rbp), %rax
cmpq %rax, %rdi
je 0x6aec4
callq 0x2e360
movl $0x50, %edi
callq 0x2e3a0
movq %rax, %rbx
movl $0x48, %edi
callq 0x2e3a0
movq %rax, %r12
movq %rbx, -0x38(%rbp)
movl $0x20, %edi
callq 0x2e3a0
movq %rax, %r13
movsd 0xea19(%rip), %xmm0     # 0x79910
movl %r15d, %edi
callq 0x2e620
cvttsd2si %xmm0, %r15
movq %r15, %rbx
negq %rbx
cmovsq %r15, %rbx
movl $0x1, %r14d
cmpq $0xa, %rbx
jb 0x6af6e
movl $0x4, %r14d
movq %rbx, %rcx
cmpq $0x63, %rcx
jbe 0x6af65
cmpq $0x3e7, %rcx            # imm = 0x3E7
jbe 0x6af6b
cmpq $0x2710, %rcx           # imm = 0x2710
jb 0x6af6e
movq %rcx, %rax
movabsq $0x346dc5d63886594b, %rdx # imm = 0x346DC5D63886594B
mulq %rdx
shrq $0xb, %rdx
addl $0x4, %r14d
cmpq $0x1869f, %rcx          # imm = 0x1869F
movq %rdx, %rcx
ja 0x6af23
addl $-0x3, %r14d
jmp 0x6af6e
addl $-0x2, %r14d
jmp 0x6af6e
decl %r14d
shrq $0x3f, %r15
leal (%r15,%r14), %esi
movq %r13, %rax
addq $0x10, %rax
movq %rax, (%r13)
movq %r13, %rdi
movl $0x2d, %edx
callq 0x2e460
addq (%r13), %r15
movq %r15, %rdi
movl %r14d, %esi
movq %rbx, %rdx
callq 0x6e37c
movq %r12, %rdi
movq %r13, %rsi
callq 0x32998
movq -0x38(%rbp), %rbx
movq %rbx, %rdi
movl $0x4, %esi
movq %r12, %rdx
callq 0x34f1c
movq -0x40(%rbp), %rdi
movq %rbx, %rsi
callq 0x326a4
movl $0x60, %edi
callq 0x2e3a0
movq %rax, %rbx
movq %rax, %rdi
movq -0x48(%rbp), %rsi
movq -0x40(%rbp), %rdx
xorl %ecx, %ecx
xorl %r8d, %r8d
xorl %r9d, %r9d
callq 0x387d8
movq -0x50(%rbp), %rdi
movq %rbx, %rsi
callq 0x3265a
movl $0x58, %edi
callq 0x2e3a0
movq %rax, %rbx
movq %rax, %rdi
movq -0x58(%rbp), %rsi
movq -0xe0(%rbp), %rdx
movq -0x50(%rbp), %rcx
callq 0x38dca
movl $0x50, %edi
callq 0x2e3a0
movq %rax, %r14
movq %rax, %rdi
xorl %esi, %esi
movq %rbx, %rdx
callq 0x323d8
movq %r14, -0x108(%rbp)
movq -0x68(%rbp), %rdi
movq 0x8(%rdi), %rsi
cmpq 0x10(%rdi), %rsi
je 0x6b059
movq %r14, (%rsi)
addq $0x8, 0x8(%rdi)
jmp 0x6b065
leaq -0x108(%rbp), %rdx
callq 0x3311a
leaq -0x610(%rbp), %rdi
movq 0x22f35(%rip), %rbx     # 0x8dfa8
movq %rbx, %rsi
callq 0x2e230
leaq -0x5a0(%rbp), %rdi
callq 0x2e150
leaq -0x498(%rbp), %rdi
movq %rbx, %rsi
callq 0x2e230
leaq -0x428(%rbp), %rdi
callq 0x2e150
leaq -0x320(%rbp), %rdi
movq %rbx, %rsi
callq 0x2e230
leaq -0x2b0(%rbp), %rdi
callq 0x2e150
movq -0x30(%rbp), %rdx
incq %rdx
movq -0x60(%rbp), %rcx
movq 0x8(%rcx), %rax
subq (%rcx), %rax
sarq $0x5, %rax
movq %rdx, -0x30(%rbp)
cmpq %rdx, %rax
ja 0x69e10
movq 0x22ec1(%rip), %rsi     # 0x8dfa8
leaq -0x788(%rbp), %rdi
callq 0x2e230
leaq -0x718(%rbp), %rdi
callq 0x2e150
movq -0x90(%rbp), %rdi
leaq -0x80(%rbp), %rax
cmpq %rax, %rdi
je 0x6b114
callq 0x2e360
movq -0xb0(%rbp), %rdi
leaq -0xa0(%rbp), %rax
cmpq %rax, %rdi
je 0x6b12c
callq 0x2e360
movq -0x128(%rbp), %rdi
leaq -0x118(%rbp), %rax
cmpq %rax, %rdi
je 0x6b144
callq 0x2e360
movq -0x188(%rbp), %rdi
leaq -0x178(%rbp), %rax
cmpq %rax, %rdi
je 0x6b15c
callq 0x2e360
movq -0x148(%rbp), %rdi
leaq -0x138(%rbp), %rax
cmpq %rax, %rdi
je 0x6b174
callq 0x2e360
movq -0xd0(%rbp), %rdi
leaq -0xc0(%rbp), %rax
cmpq %rax, %rdi
je 0x6b18c
callq 0x2e360
addq $0x768, %rsp            # imm = 0x768
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0xab8f(%rip), %rdi      # 0x75d34
leaq 0xe7e3(%rip), %rsi      # 0x7998f
leaq 0xee6d(%rip), %rcx      # 0x7a020
movl $0x3fa, %edx            # imm = 0x3FA
callq 0x2e2a0
jmp 0x6b673
jmp 0x6b1fb
jmp 0x6b1fb
jmp 0x6b1fb
jmp 0x6b1fb
movq %rax, %r13
movq %r12, %rdi
jmp 0x6b1e0
movq %rax, %r13
movq %r15, %rdi
jmp 0x6b1e0
movq %rax, %r13
movq %r14, %rdi
callq 0x2e360
jmp 0x6b1f3
jmp 0x6b673
jmp 0x6b1fb
jmp 0x6b1f0
movq %rax, %r13
movq %rbx, %rdi
jmp 0x6b667
movq %rax, %r13
jmp 0x6b727
jmp 0x6b67b
jmp 0x6b673
jmp 0x6b673
jmp 0x6b67b
jmp 0x6b477
jmp 0x6b477
movq %rax, %r13
jmp 0x6b242
movq %rax, %rbx
movq %r13, %rdi
callq 0x2e360
jmp 0x6b466
movq %rax, %r13
movq -0x70(%rbp), %rdi
callq 0x2e360
movq -0x38(%rbp), %rdi
callq 0x2e360
jmp 0x6b614
jmp 0x6b48f
jmp 0x6b67b
movq %rax, %r13
movq %r14, %rdi
callq 0x2e360
jmp 0x6b4bd
movq %rax, %r13
jmp 0x6b614
jmp 0x6b297
movq %rax, %r13
movq %rbx, %rdi
callq 0x2e360
jmp 0x6b29a
jmp 0x6b6a3
movq %rax, %r13
movq -0x40(%rbp), %rdi
jmp 0x6b579
jmp 0x6b6a3
movq %rax, %r13
movq -0x48(%rbp), %rdi
jmp 0x6b579
movq %rax, %r13
movq %r12, %rdi
callq 0x2e360
jmp 0x6b485
movq %rax, %r14
movq %rbx, %rdi
callq 0x2e360
jmp 0x6b4aa
jmp 0x6b6a3
movq %rax, %r13
movq %r14, %rdi
jmp 0x6b2d6
movq %rax, %r13
movq %rbx, %rdi
callq 0x2e360
jmp 0x6b576
jmp 0x6b4d2
movq %rax, %r13
movq %r14, %rdi
jmp 0x6b2f3
movq %rax, %r13
movq %rbx, %rdi
callq 0x2e360
jmp 0x6b5b8
jmp 0x6b6e6
jmp 0x6b4ca
movq %rax, %r13
movq -0x38(%rbp), %rdi
callq 0x2e360
movq -0x40(%rbp), %r12
jmp 0x6b576
movq %rax, %r13
movq -0x38(%rbp), %rdi
callq 0x2e360
movq -0x40(%rbp), %r12
jmp 0x6b5b8
jmp 0x6b6a3
jmp 0x6b6e6
jmp 0x6b673
movq %rax, %r13
jmp 0x6b36f
jmp 0x6b673
jmp 0x6b673
jmp 0x6b673
movq %rax, %r13
movq -0x1a8(%rbp), %rdi
leaq -0x198(%rbp), %rax
cmpq %rax, %rdi
je 0x6b36f
callq 0x2e360
movq -0x168(%rbp), %rdi
leaq -0x158(%rbp), %rax
cmpq %rax, %rdi
je 0x6b3c8
callq 0x2e360
jmp 0x6b3c8
jmp 0x6b446
jmp 0x6b43b
movq %rax, %r13
movq -0x50(%rbp), %rdi
jmp 0x6b667
jmp 0x6b673
movq %rax, %r13
jmp 0x6b3f8
movq %rax, %r13
movq -0xe0(%rbp), %rdi
jmp 0x6b667
movq %rax, %r13
jmp 0x6b4fe
movq %rax, %r13
jmp 0x6b3e0
movq %rax, %r13
movq -0x320(%rbp), %rdi
leaq -0x310(%rbp), %rax
cmpq %rax, %rdi
je 0x6b3e0
callq 0x2e360
movq -0x610(%rbp), %rdi
leaq -0x600(%rbp), %rax
cmpq %rax, %rdi
je 0x6b3f8
callq 0x2e360
movq -0x498(%rbp), %rdi
leaq -0x488(%rbp), %rax
cmpq %rax, %rdi
je 0x6b43e
callq 0x2e360
jmp 0x6b43e
movq %rax, %r13
movq %r12, %rdi
callq 0x2e360
jmp 0x6b42a
movq %rax, %r13
jmp 0x6b530
movq %rax, %r13
movq -0x50(%rbp), %rdi
jmp 0x6b501
movq %rax, %r13
jmp 0x6b538
movq %rax, %r13
movq %r15, %rdi
jmp 0x6b667
movq %rax, %r13
jmp 0x6b663
movq %rax, %r13
movq %r14, %rdi
jmp 0x6b667
jmp 0x6b673
jmp 0x6b673
movq %rax, %rbx
movq %r12, %rdi
callq 0x2e360
movq %rbx, %r13
movq -0x38(%rbp), %rbx
jmp 0x6b47a
movq %rax, %r13
movq %rbx, %rdi
jmp 0x6b61b
movq %rax, %r13
movq %rbx, %rdi
callq 0x2e360
jmp 0x6b492
movq %rax, %r13
movq %r14, %rdi
jmp 0x6b61b
movq %rax, %r13
jmp 0x6b5cb
jmp 0x6b67b
movq %rax, %r14
movq %r13, %rdi
callq 0x2e360
movq %r14, %r13
jmp 0x6b5c3
movq %rax, %r13
movq %rbx, %rdi
callq 0x2e360
jmp 0x6b5c3
movq %rax, %r13
jmp 0x6b576
movq %rax, %r13
jmp 0x6b5b8
movq %rax, %r13
movq -0x320(%rbp), %rdi
leaq -0x310(%rbp), %rax
cmpq %rax, %rdi
je 0x6b4f5
callq 0x2e360
testb %r14b, %r14b
je 0x6b663
movq %rbx, %rdi
callq 0x2e360
jmp 0x6b663
jmp 0x6b673
movq %rax, %r13
movq -0x320(%rbp), %rdi
leaq -0x310(%rbp), %rax
cmpq %rax, %rdi
je 0x6b52b
callq 0x2e360
testb %r14b, %r14b
je 0x6b538
movq %rbx, %rdi
callq 0x2e360
movq -0x40(%rbp), %rdi
jmp 0x6b667
movq %rax, %r13
movq -0x610(%rbp), %rdi
leaq -0x600(%rbp), %rax
cmpq %rax, %rdi
je 0x6b55c
callq 0x2e360
testb %r12b, %r12b
je 0x6b56a
movq -0x38(%rbp), %rdi
callq 0x2e360
testb %bl, %bl
movq -0x40(%rbp), %r12
je 0x6b6a6
movq %r12, %rdi
callq 0x2e360
jmp 0x6b6a6
movq %rax, %r13
movq -0x498(%rbp), %rdi
leaq -0x488(%rbp), %rax
cmpq %rax, %rdi
je 0x6b59e
callq 0x2e360
testb %r12b, %r12b
je 0x6b5ac
movq -0x38(%rbp), %rdi
callq 0x2e360
testb %bl, %bl
movq -0x40(%rbp), %r12
je 0x6b6e9
movq %r12, %rdi
jmp 0x6b6df
movq %rax, %r13
movq %r12, %rdi
callq 0x2e360
movq -0x38(%rbp), %rdi
jmp 0x6b61b
jmp 0x6b6e6
movq %rax, %r15
movq -0x108(%rbp), %rdi
leaq -0xf8(%rbp), %rax
cmpq %rax, %rdi
je 0x6b5f1
callq 0x2e360
testb %r13b, %r13b
je 0x6b5ff
movq -0x70(%rbp), %rdi
callq 0x2e360
testb %r14b, %r14b
je 0x6b60d
movq -0x38(%rbp), %rdi
callq 0x2e360
testb %bl, %bl
movq %r15, %r13
je 0x6b67e
movq -0xd8(%rbp), %rdi
callq 0x2e360
jmp 0x6b67e
movq %rax, %r14
movq -0x320(%rbp), %rdi
leaq -0x310(%rbp), %rax
cmpq %rax, %rdi
je 0x6b63d
callq 0x2e360
testb %r15b, %r15b
je 0x6b64a
movq %r12, %rdi
callq 0x2e360
testb %r13b, %r13b
je 0x6b658
movq -0x50(%rbp), %rdi
callq 0x2e360
testb %bl, %bl
movq %r14, %r13
je 0x6b708
movq -0x58(%rbp), %rdi
callq 0x2e360
jmp 0x6b708
jmp 0x6b6e6
movq %rax, %r13
jmp 0x6b708
movq %rax, %r13
movq 0x22923(%rip), %rsi     # 0x8dfa8
leaq -0x610(%rbp), %rdi
callq 0x2e230
leaq -0x5a0(%rbp), %rdi
callq 0x2e150
jmp 0x6b6a6
jmp 0x6b6e6
jmp 0x6b6e6
movq %rax, %r13
movq 0x228fb(%rip), %rsi     # 0x8dfa8
leaq -0x498(%rbp), %rdi
callq 0x2e230
leaq -0x428(%rbp), %rdi
callq 0x2e150
jmp 0x6b6e9
jmp 0x6b6c9
movq %rax, %r13
movq -0x498(%rbp), %rdi
leaq -0x488(%rbp), %rax
cmpq %rax, %rdi
je 0x6b6e9
callq 0x2e360
jmp 0x6b6e9
movq %rax, %r13
movq 0x228b8(%rip), %rsi     # 0x8dfa8
leaq -0x320(%rbp), %rdi
callq 0x2e230
leaq -0x2b0(%rbp), %rdi
callq 0x2e150
movq 0x22899(%rip), %rsi     # 0x8dfa8
leaq -0x788(%rbp), %rdi
callq 0x2e230
leaq -0x718(%rbp), %rdi
callq 0x2e150
leaq -0x80(%rbp), %rax
movq -0x90(%rbp), %rdi
cmpq %rax, %rdi
je 0x6b73c
callq 0x2e360
movq -0xb0(%rbp), %rdi
leaq -0xa0(%rbp), %rax
cmpq %rax, %rdi
je 0x6b754
callq 0x2e360
movq -0x128(%rbp), %rdi
leaq -0x118(%rbp), %rax
cmpq %rax, %rdi
je 0x6b76c
callq 0x2e360
movq -0x188(%rbp), %rdi
leaq -0x178(%rbp), %rax
cmpq %rax, %rdi
je 0x6b784
callq 0x2e360
movq -0x148(%rbp), %rdi
leaq -0x138(%rbp), %rax
cmpq %rax, %rdi
je 0x6b79c
callq 0x2e360
movq -0xd0(%rbp), %rdi
leaq -0xc0(%rbp), %rax
cmpq %rax, %rdi
je 0x6b7b4
callq 0x2e360
movq -0xe8(%rbp), %rax
movq (%rax), %rdi
testq %rdi, %rdi
je 0x6b7c8
callq 0x2e360
movq %r13, %rdi
callq 0x2e730