// File: /workspace/github_cpp_makefile_star2_O1/Ziang95[P]Tomasulo_simulator/import.cpp
// Function: read_config_instrs(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>)
bool read_config_instrs(string path)
{
    if (sys_clk.get_prog_cyc())
    {
        err_log("Unsafe config modification, CPU is running");
        return false;
    }
    msg_log("Reading input file " + path, 1);
    ifstream file;
    string line, h, h1, h2; //h = head
    int p[4]; //p = params
    config *cfg_ret = new config();
    try{file.open(path);}
    catch(const ifstream::failure& e)
    {
        err_log("Exception occurred when opening file "+path);
        return false;
    }
#pragma region read_CPU_config
    if (CPU_cfg)
        delete CPU_cfg;
    while(getline(file, line))
    {
        if (line.empty())
            continue;
        else
        {
            istringstream s(line);
            s>>h1>>h2;
            h = h1 + ' ' + h2;
            if (h == "# of")
                continue;
            if (h == "Integer adder")
            {
                s>>p[0]>>p[1]>>p[3];
                cfg_ret->int_add = new instr_param(p[0], p[1], 0, p[3]);
            }
            else if (h == "FP adder")
            {
                s>>p[0]>>p[1]>>p[3];
                cfg_ret->fp_add = new instr_param(p[0], p[1], 0, p[3]);
            }
            else if (h == "FP multiplier")
            {
                s>>p[0]>>p[1]>>p[3];
                cfg_ret->fp_mul = new instr_param(p[0], p[1], 0, p[3]);
            }
            else if (h == "Load/store unit")
            {
                s>>p[0]>>p[1]>>p[2]>>p[3];
                cfg_ret->ld_str = new instr_param(p[0], p[1], p[2], p[3]);
            }
            else if (h == "ROB entries")
            {
                s>>line>>p[0];
                cfg_ret->ROB_num = new int(p[0]);
            }
            else
                break;
        }
    }
    if (!cfg_ret->fp_add || !cfg_ret->fp_mul || !cfg_ret->int_add || !cfg_ret->ROB_num || !cfg_ret->ld_str)
    {
        err_log("Config file is incomplete");
        return false;
    }
    CPU_cfg = cfg_ret;
    msg_log("CPU config read", 0);
#pragma endregion
#pragma region read_ini_reg_values
    string tmp;
    reg->clear();
    do {getline(file, line);}while(line.empty()||line.size()<4);
    line.erase(remove(line.begin(),line.end(),' '),line.end());
    line.erase(remove(line.begin(),line.end(),'\t'),line.end());
    istringstream iss(line);
    while (getline(iss, tmp, ','))
    {
        size_t e = tmp.find('=');
        size_t f = tmp.find('F');
        size_t i = tmp.find('R');
        memCell val;
        if (i != string::npos)
        {
            if (tmp.find('.') != string::npos)
            {
                err_log("Error: Trying to assign float value to an int reg");
                return -1;
            }
            val.i = stoi(tmp.substr(e + 1, tmp.size() - e - 1));
            reg->set(tmp.substr(i, e), val);
        }
        else if (f != string::npos)
        {
            val.f = stof(tmp.substr(e + 1, tmp.size() - e - 1));
            reg->set(tmp.substr(f, e), val);
        }
        else
        {
            err_log("IDK what's going on, better check your reg init line");
            return -1;
        }
        
    }
    msg_log("Ini reg values read", 2);
#pragma endregion
#pragma region read_ini_mem_values
    do{getline(file, line);}while(line.empty()||line.size()<4);
    line.erase(remove(line.begin(),line.end(),' '),line.end());
    line.erase(remove(line.begin(),line.end(),'\t'),line.end());
    istringstream iss1(line);
    while (getline(iss1, tmp, ','))
    {
        size_t e = tmp.find('=');
        size_t lb = tmp.find('[');
        size_t rb = tmp.find(']');
        size_t flt = tmp.find('.');
        if (flt == string::npos)
        {
            int val = stoi(tmp.substr(e + 1, tmp.size() - e - 1));
            main_mem.setMem(INTGR, stoi(tmp.substr(lb+1, rb-lb-1)), &val);
        }
        else
        {
            float val = stof(tmp.substr(e + 1, tmp.size() - e - 1));
            main_mem.setMem(FLTP, stoi(tmp.substr(lb+1, rb-lb-1)), &val);
        }
    }
    msg_log("Ini mem values read", 2);
#pragma endregion
#pragma region read_instrs
    if (instr_Q)
        delete instr_Q;
    vector <instr> tmp_Q = {};
    string opName, dest, op1, op2, ofst, imm;
    while(getline(file, line))
    {
        if (line.empty())
            continue;
        else
        {
            instr tmp_i;
            tmp_i.name = line;
            istringstream s(line);
            s>>opName;
            opCode code = get_opcode(opName);
            switch (code)
            {
            case ADD:
            case ADD_D:
            case SUB:
            case SUB_D:
            case MUL_D:
            {
                getline(s, dest, ',');
                getline(s, op1, ',');
                getline(s, op2, ',');
                dest.erase(remove(dest.begin(), dest.end(), ' '), dest.end());
                op1.erase(remove(op1.begin(), op1.end(), ' '), op1.end());
                op2.erase(remove(op2.begin(), op2.end(), ' '), op2.end());
                dest.erase(remove(dest.begin(), dest.end(), '\t'), dest.end());
                op1.erase(remove(op1.begin(), op1.end(), '\t'), op1.end());
                op2.erase(remove(op2.begin(), op2.end(), '\t'), op2.end());
                tmp_i.code = code;
                tmp_i.dest = dest;
                tmp_i.oprnd1 = op1;
                tmp_i.oprnd2 = op2;
                break;
            }
            case ADDI:
            {
                getline(s, dest, ',');
                getline(s, op1, ',');
                getline(s, imm, ',');
                dest.erase(remove(dest.begin(), dest.end(), ' '), dest.end());
                op1.erase(remove(op1.begin(), op1.end(), ' '), op1.end());
                imm.erase(remove(imm.begin(), imm.end(), ' '), imm.end());
                dest.erase(remove(dest.begin(), dest.end(), '\t'), dest.end());
                op1.erase(remove(op1.begin(), op1.end(), '\t'), op1.end());
                imm.erase(remove(imm.begin(), imm.end(), '\t'), imm.end());
                tmp_i.code = code;
                tmp_i.dest = dest;
                tmp_i.oprnd1 = op1;
                tmp_i.imdt = stoi(imm);
                break;
            }
            case BNE:
            case BEQ:
            {
                getline(s, op1, ',');
                getline(s, op2, ',');
                getline(s, ofst, ',');
                op1.erase(remove(op1.begin(), op1.end(), ' '), op1.end());
                op2.erase(remove(op2.begin(), op2.end(), ' '), op2.end());
                ofst.erase(remove(ofst.begin(), ofst.end(), ' '), ofst.end());
                op1.erase(remove(op1.begin(), op1.end(), '\t'), op1.end());
                op2.erase(remove(op2.begin(), op2.end(), '\t'), op2.end());
                ofst.erase(remove(ofst.begin(), ofst.end(), '\t'), ofst.end());
                tmp_i.code = code;
                tmp_i.oprnd1 = op1;
                tmp_i.oprnd2 = op2;
                tmp_i.offset = stoi(ofst);
                break;
            }
            case LD:
            case SD:
            {
                getline(s, dest, ',');
                getline(s, ofst, ',');
                dest.erase(remove(dest.begin(), dest.end(), ' '), dest.end());
                ofst.erase(remove(ofst.begin(), ofst.end(), ' '), ofst.end());
                dest.erase(remove(dest.begin(), dest.end(), '\t'), dest.end());
                ofst.erase(remove(ofst.begin(), ofst.end(), '\t'), ofst.end());
                tmp_i.code = code;
                tmp_i.dest = dest;
                size_t lb = ofst.find('(');
                size_t rb = ofst.find(')');
                tmp_i.oprnd1 = ofst.substr(lb + 1, rb - lb - 1);
                tmp_i.offset = stoi(ofst.substr(0, lb));
                break;
            }
            case NOP:
            {
                tmp_i.code = NOP;
                break;
            }
            case ERR:
            {
                err_log("Instruction opCode error, please check input file " + path);
                return false;
                break;
            }
            default:
                break;
            }
            tmp_Q.push_back(tmp_i);
        }
    }
    instr_Q = new instr_queue(tmp_Q);
#pragma endregion
    msg_log("Read complete!", 1);
    file.close();
    return true;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0xab8, %rsp            # imm = 0xAB8
movq %rdi, %r14
leaq 0x11a23(%rip), %rdi     # 0x1bca0
callq 0x9674
testl %eax, %eax
je 0xa2d0
leaq -0x408(%rbp), %rbx
movq %rbx, -0x10(%rbx)
leaq 0xb10e(%rip), %rsi      # 0x153a6
leaq 0xb131(%rip), %rdx      # 0x153d0
leaq -0x418(%rbp), %rdi
callq 0x7202
leaq -0x418(%rbp), %rdi
callq 0x9777
movq -0x418(%rbp), %rdi
cmpq %rbx, %rdi
je 0xa2c8
callq 0x3230
xorl %r15d, %r15d
jmp 0xabef
leaq 0xb0fa(%rip), %rsi      # 0x153d1
leaq -0x5d8(%rbp), %rbx
movq %rbx, %rdi
movq %r14, %rdx
callq 0x8bd0
movq %rbx, %rdi
movl $0x1, %esi
callq 0x9f03
leaq -0x5c8(%rbp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0xa30b
callq 0x3230
leaq -0x960(%rbp), %rdi
callq 0x3290
leaq -0xf0(%rbp), %rcx
movq %rcx, -0x10(%rcx)
xorl %eax, %eax
movq %rax, -0x8(%rcx)
movb %al, (%rcx)
leaq -0x2f0(%rbp), %rcx
movq %rcx, -0x10(%rcx)
movq %rax, -0x8(%rcx)
movb %al, (%rcx)
leaq -0x228(%rbp), %rcx
movq %rcx, -0x10(%rcx)
movq %rax, -0x8(%rcx)
movb %al, (%rcx)
leaq -0x208(%rbp), %rcx
movq %rcx, -0x10(%rcx)
movq %rax, -0x8(%rcx)
movb %al, (%rcx)
movl $0x28, %edi
callq 0x3250
pxor %xmm0, %xmm0
movdqu %xmm0, 0x10(%rax)
movdqu %xmm0, (%rax)
movq %rax, -0x30(%rbp)
movq $0x0, 0x20(%rax)
leaq -0x960(%rbp), %rdi
movq %r14, %rsi
movl $0x8, %edx
callq 0x3210
movq %r14, -0x1f8(%rbp)
leaq 0x10fb6(%rip), %rax     # 0x1b358
movq (%rax), %rbx
testq %rbx, %rbx
je 0xa3ba
movq %rbx, %rdi
callq 0xc360
movq %rbx, %rdi
callq 0x3230
leaq -0x100(%rbp), %r12
leaq -0xae0(%rbp), %rbx
leaq -0x598(%rbp), %r14
leaq -0x300(%rbp), %r13
movq -0x960(%rbp), %rax
movq -0x18(%rax), %rdi
leaq -0x960(%rbp), %r15
addq %r15, %rdi
movl $0xa, %esi
callq 0x3240
movsbl %al, %edx
movq %r15, %rdi
movq %r12, %rsi
callq 0x3470
movq (%rax), %rcx
movq -0x18(%rcx), %rcx
testb $0x5, 0x20(%rax,%rcx)
jne 0xa761
cmpq $0x0, -0xf8(%rbp)
je 0xa3d6
movq %rbx, %rdi
movq %r12, %rsi
movl $0x8, %edx
callq 0x3410
movq %rbx, %rdi
leaq -0x238(%rbp), %rsi
callq 0x32e0
movq %rax, %rdi
leaq -0x218(%rbp), %rsi
callq 0x32e0
leaq -0x588(%rbp), %rax
movq %rax, -0x598(%rbp)
movq -0x238(%rbp), %rsi
movq -0x230(%rbp), %rdx
addq %rsi, %rdx
movq %r14, %rdi
callq 0x7168
movq -0x590(%rbp), %rsi
movl $0x1, %ecx
movq %r14, %rdi
xorl %edx, %edx
movl $0x20, %r8d
callq 0x3490
movq -0x218(%rbp), %rsi
movq -0x210(%rbp), %rdx
movq %r14, %rdi
callq 0x30d0
leaq -0x748(%rbp), %r15
movq %r15, -0x758(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0xa4d6
movq %rdx, -0x758(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x748(%rbp)
jmp 0xa4df
movdqu (%rcx), %xmm0
movdqu %xmm0, (%r15)
movq 0x8(%rax), %rdx
movq %rdx, -0x750(%rbp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq %r13, %rdi
leaq -0x758(%rbp), %rsi
callq 0x32d0
movq -0x758(%rbp), %rdi
cmpq %r15, %rdi
je 0xa519
callq 0x3230
movq -0x598(%rbp), %rdi
leaq -0x588(%rbp), %rax
cmpq %rax, %rdi
je 0xa531
callq 0x3230
movq %r13, %rdi
leaq 0xaed0(%rip), %rsi      # 0x1540b
callq 0x30c0
testl %eax, %eax
je 0xa722
movq %r13, %rdi
leaq 0xaebe(%rip), %rsi      # 0x15410
callq 0x30c0
testl %eax, %eax
je 0xa5ed
movq %r13, %rdi
leaq 0xaeb5(%rip), %rsi      # 0x1541e
callq 0x30c0
testl %eax, %eax
je 0xa63c
movq %r13, %rdi
leaq 0xaea7(%rip), %rsi      # 0x15427
callq 0x30c0
testl %eax, %eax
je 0xa68b
movq %r13, %rdi
leaq 0xae9e(%rip), %rsi      # 0x15435
callq 0x30c0
testl %eax, %eax
je 0xa6d7
movq %r13, %rdi
leaq 0xae97(%rip), %rsi      # 0x15445
callq 0x30c0
testl %eax, %eax
jne 0xa742
movq %rbx, %rdi
movq %r12, %rsi
callq 0x32e0
movq %rax, %rdi
leaq -0x40(%rbp), %rsi
callq 0x3190
movl $0x4, %edi
callq 0x3250
movl -0x40(%rbp), %ecx
movl %ecx, (%rax)
movq -0x30(%rbp), %rcx
movq %rax, (%rcx)
jmp 0xa722
movq %rbx, %rdi
leaq -0x40(%rbp), %rsi
callq 0x3190
movq %rax, %rdi
leaq -0x3c(%rbp), %rsi
callq 0x3190
movq %rax, %rdi
leaq -0x34(%rbp), %rsi
callq 0x3190
movl $0x10, %edi
callq 0x3250
movq -0x40(%rbp), %rcx
movl -0x34(%rbp), %edx
movq %rcx, (%rax)
movl $0x0, 0x8(%rax)
movl %edx, 0xc(%rax)
movq -0x30(%rbp), %rcx
movq %rax, 0x8(%rcx)
jmp 0xa722
movq %rbx, %rdi
leaq -0x40(%rbp), %rsi
callq 0x3190
movq %rax, %rdi
leaq -0x3c(%rbp), %rsi
callq 0x3190
movq %rax, %rdi
leaq -0x34(%rbp), %rsi
callq 0x3190
movl $0x10, %edi
callq 0x3250
movq -0x40(%rbp), %rcx
movl -0x34(%rbp), %edx
movq %rcx, (%rax)
movl $0x0, 0x8(%rax)
movl %edx, 0xc(%rax)
movq -0x30(%rbp), %rcx
movq %rax, 0x10(%rcx)
jmp 0xa722
movq %rbx, %rdi
leaq -0x40(%rbp), %rsi
callq 0x3190
movq %rax, %rdi
leaq -0x3c(%rbp), %rsi
callq 0x3190
movq %rax, %rdi
leaq -0x34(%rbp), %rsi
callq 0x3190
movl $0x10, %edi
callq 0x3250
movq -0x40(%rbp), %rcx
movl -0x34(%rbp), %edx
movq %rcx, (%rax)
movl $0x0, 0x8(%rax)
movl %edx, 0xc(%rax)
movq -0x30(%rbp), %rcx
movq %rax, 0x18(%rcx)
jmp 0xa722
movq %rbx, %rdi
leaq -0x40(%rbp), %rsi
callq 0x3190
movq %rax, %rdi
leaq -0x3c(%rbp), %rsi
callq 0x3190
movq %rax, %rdi
leaq -0x38(%rbp), %rsi
callq 0x3190
movq %rax, %rdi
leaq -0x34(%rbp), %rsi
callq 0x3190
movl $0x10, %edi
callq 0x3250
movdqa -0x40(%rbp), %xmm0
movdqu %xmm0, (%rax)
movq -0x30(%rbp), %rcx
movq %rax, 0x20(%rcx)
movq %rbx, %rdi
movq 0x10894(%rip), %rsi     # 0x1afc0
callq 0x3350
leaq -0xa68(%rbp), %rdi
callq 0x30e0
jmp 0xa3d6
movq 0x10877(%rip), %rsi     # 0x1afc0
leaq -0xae0(%rbp), %rdi
callq 0x3350
leaq -0xa68(%rbp), %rdi
callq 0x30e0
movq -0x30(%rbp), %rax
cmpq $0x0, 0x10(%rax)
je 0xab3e
cmpq $0x0, 0x18(%rax)
je 0xab3e
cmpq $0x0, 0x8(%rax)
je 0xab3e
cmpq $0x0, (%rax)
je 0xab3e
cmpq $0x0, 0x20(%rax)
je 0xab3e
leaq 0x10bb6(%rip), %rcx     # 0x1b358
movq %rax, (%rcx)
leaq -0x3c8(%rbp), %rbx
movq %rbx, -0x10(%rbx)
leaq 0xacb4(%rip), %rsi      # 0x1546b
leaq 0xacbc(%rip), %rdx      # 0x1547a
leaq -0x3d8(%rbp), %rdi
callq 0x7202
leaq -0x3d8(%rbp), %rdi
xorl %esi, %esi
callq 0x9f03
leaq -0x960(%rbp), %r14
movq -0x3d8(%rbp), %rdi
cmpq %rbx, %rdi
je 0xa7f0
callq 0x3230
leaq -0x130(%rbp), %rax
movq %rax, -0x10(%rax)
movq $0x0, -0x8(%rax)
movb $0x0, (%rax)
leaq 0x1148b(%rip), %rax     # 0x1bc98
movq (%rax), %rdi
callq 0x13964
leaq -0x100(%rbp), %rbx
movq -0x960(%rbp), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x3240
movsbl %al, %edx
movq %r14, %rdi
movq %rbx, %rsi
callq 0x3470
movq -0xf8(%rbp), %rsi
cmpq $0x4, %rsi
jb 0xa81c
movq -0x100(%rbp), %rdi
addq %rdi, %rsi
leaq -0xae0(%rbp), %rdx
movb $0x20, (%rdx)
callq 0xc5c3
movq %rax, %rcx
subq -0x100(%rbp), %rcx
movq %rcx, -0xf8(%rbp)
movb $0x0, (%rax)
movq -0x100(%rbp), %rdi
movq -0xf8(%rbp), %rsi
addq %rdi, %rsi
leaq -0xae0(%rbp), %rdx
movb $0x9, (%rdx)
callq 0xc5c3
leaq -0x100(%rbp), %rsi
movq %rax, %rcx
subq (%rsi), %rcx
movq %rcx, 0x8(%rsi)
movb $0x0, (%rax)
leaq -0xae0(%rbp), %rdi
movl $0x8, %edx
callq 0x3410
leaq -0x140(%rbp), %r15
leaq -0xae0(%rbp), %rdi
movq %r15, %rsi
movl $0x2c, %edx
callq 0x3470
movq (%rax), %rcx
movq -0x18(%rcx), %rcx
testb $0x5, 0x20(%rax,%rcx)
jne 0xac08
movq %r15, %rdi
movl $0x3d, %esi
xorl %edx, %edx
callq 0x3300
movq %rax, %r13
movq %r15, %rdi
movl $0x46, %esi
xorl %edx, %edx
callq 0x3300
movq %rax, %rbx
movq %r15, %rdi
movl $0x52, %esi
xorl %edx, %edx
callq 0x3300
cmpq $-0x1, %rax
je 0xaa40
movq %rax, %r14
movq %r15, %rdi
movl $0x2e, %esi
xorl %edx, %edx
callq 0x3300
cmpq $-0x1, %rax
jne 0xbc44
movq %r14, -0x30(%rbp)
leaq 0x1(%r13), %rdx
movq %r13, %r12
notq %r13
addq -0x138(%rbp), %r13
leaq -0x758(%rbp), %rdi
movq %r15, %rsi
movq %r13, %rcx
callq 0x3270
movq -0x758(%rbp), %r14
callq 0x3050
movq %rax, %rbx
movl (%rax), %r15d
movl $0x0, (%rax)
movq %r14, %rdi
leaq -0x598(%rbp), %rsi
movl $0xa, %edx
callq 0x3330
cmpq %r14, -0x598(%rbp)
je 0xbd33
movq %rax, %r13
addq $-0x80000000, %rax      # imm = 0x80000000
movabsq $-0x100000000, %rcx     # imm = 0xFFFFFFFF00000000
cmpq %rcx, %rax
jb 0xbd27
movl (%rbx), %eax
cmpl $0x22, %eax
je 0xbd27
testl %eax, %eax
leaq -0x960(%rbp), %r14
jne 0xa9dc
movl %r15d, (%rbx)
movq -0x758(%rbp), %rdi
leaq -0x748(%rbp), %rax
cmpq %rax, %rdi
je 0xa9f4
callq 0x3230
leaq 0x1129d(%rip), %rax     # 0x1bc98
movq (%rax), %rbx
leaq -0x2e0(%rbp), %rdi
leaq -0x140(%rbp), %r15
movq %r15, %rsi
movq -0x30(%rbp), %rdx
movq %r12, %rcx
callq 0x3270
movq %rbx, %rdi
leaq -0x2e0(%rbp), %rsi
movl %r13d, %edx
callq 0x13750
movq -0x2e0(%rbp), %rdi
leaq -0x2d0(%rbp), %rax
jmp 0xab2b
cmpq $-0x1, %rbx
je 0xbc7e
leaq 0x1(%r13), %rdx
movq %r13, %rcx
notq %rcx
addq -0x138(%rbp), %rcx
leaq -0x758(%rbp), %rdi
movq %r15, %rsi
callq 0x3270
movq -0x758(%rbp), %r14
callq 0x3050
movq %rax, %r12
movl (%rax), %r15d
movl $0x0, (%rax)
movq %r14, %rdi
leaq -0x598(%rbp), %rsi
callq 0x3320
cmpq %r14, -0x598(%rbp)
je 0xbd6f
movl (%r12), %eax
testl %eax, %eax
je 0xaab7
cmpl $0x22, %eax
leaq -0x960(%rbp), %r14
jne 0xaac2
jmp 0xbd87
movl %r15d, (%r12)
leaq -0x960(%rbp), %r14
movd %xmm0, -0x30(%rbp)
movq -0x758(%rbp), %rdi
leaq -0x748(%rbp), %rax
cmpq %rax, %rdi
je 0xaadf
callq 0x3230
leaq 0x111b2(%rip), %rax     # 0x1bc98
movq (%rax), %r12
leaq -0x2c0(%rbp), %rdi
leaq -0x140(%rbp), %r15
movq %r15, %rsi
movq %rbx, %rdx
movq %r13, %rcx
callq 0x3270
movd -0x30(%rbp), %xmm0
movd %xmm0, %edx
movq %r12, %rdi
leaq -0x2c0(%rbp), %rsi
callq 0x13750
movq -0x2c0(%rbp), %rdi
leaq -0x2b0(%rbp), %rax
cmpq %rax, %rdi
je 0xa8c8
callq 0x3230
jmp 0xa8c8
leaq -0x3e8(%rbp), %rbx
movq %rbx, -0x10(%rbx)
leaq 0xa901(%rip), %rsi      # 0x15451
leaq 0xa913(%rip), %rdx      # 0x1546a
leaq -0x3f8(%rbp), %rdi
callq 0x7202
leaq -0x3f8(%rbp), %rdi
callq 0x9777
movq -0x3f8(%rbp), %rdi
cmpq %rbx, %rdi
je 0xab80
callq 0x3230
xorl %r15d, %r15d
movq -0x218(%rbp), %rdi
leaq -0x208(%rbp), %rax
cmpq %rax, %rdi
je 0xab9b
callq 0x3230
movq -0x238(%rbp), %rdi
leaq -0x228(%rbp), %rax
cmpq %rax, %rdi
je 0xabb3
callq 0x3230
movq -0x300(%rbp), %rdi
leaq -0x2f0(%rbp), %rax
cmpq %rax, %rdi
je 0xabcb
callq 0x3230
movq -0x100(%rbp), %rdi
leaq -0xf0(%rbp), %rax
cmpq %rax, %rdi
je 0xabe3
callq 0x3230
leaq -0x960(%rbp), %rdi
callq 0x30a0
andb $0x1, %r15b
movl %r15d, %eax
addq $0xab8, %rsp            # imm = 0xAB8
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq -0x368(%rbp), %rbx
movq %rbx, -0x10(%rbx)
leaq 0xa8c8(%rip), %rsi      # 0x154e2
leaq 0xa8d4(%rip), %rdx      # 0x154f5
leaq -0x378(%rbp), %rdi
callq 0x7202
leaq -0x378(%rbp), %rdi
movl $0x2, %esi
callq 0x9f03
movq -0x378(%rbp), %rdi
cmpq %rbx, %rdi
je 0xac4f
callq 0x3230
leaq -0x100(%rbp), %rbx
movq -0x960(%rbp), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x3240
movsbl %al, %edx
movq %r14, %rdi
movq %rbx, %rsi
callq 0x3470
movq -0xf8(%rbp), %rsi
cmpq $0x4, %rsi
jb 0xac56
movq -0x100(%rbp), %rdi
addq %rdi, %rsi
leaq -0x758(%rbp), %rdx
movb $0x20, (%rdx)
callq 0xc5c3
leaq -0x100(%rbp), %rdi
movq (%rdi), %rdx
addq 0x8(%rdi), %rdx
movq %rax, %rsi
callq 0x3090
movq -0x100(%rbp), %rdi
movq -0xf8(%rbp), %rsi
addq %rdi, %rsi
leaq -0x758(%rbp), %rdx
movb $0x9, (%rdx)
callq 0xc5c3
leaq -0x100(%rbp), %rdi
movq (%rdi), %rdx
addq 0x8(%rdi), %rdx
movq %rax, %rsi
callq 0x3090
leaq -0x758(%rbp), %rdi
leaq -0x100(%rbp), %rsi
movl $0x8, %edx
callq 0x3410
leaq -0x140(%rbp), %r12
leaq -0x758(%rbp), %rdi
movq %r12, %rsi
movl $0x2c, %edx
callq 0x3470
movq (%rax), %rcx
movq -0x18(%rcx), %rcx
testb $0x5, 0x20(%rax,%rcx)
jne 0xb02f
movq %r12, %rdi
movl $0x3d, %esi
xorl %edx, %edx
callq 0x3300
movq %rax, %r15
movq %r12, %rdi
movl $0x5b, %esi
xorl %edx, %edx
callq 0x3300
movq %rax, %rbx
movq %r12, %rdi
movl $0x5d, %esi
xorl %edx, %edx
callq 0x3300
movq %rax, %r13
movq %r12, %rdi
movl $0x2e, %esi
xorl %edx, %edx
callq 0x3300
leaq 0x1(%r15), %rdx
notq %r15
cmpq $-0x1, %rax
je 0xadf2
addq -0x138(%rbp), %r15
leaq -0x598(%rbp), %rdi
movq %r12, %rsi
movq %r15, %rcx
callq 0x3270
movq -0x598(%rbp), %r14
callq 0x3050
movq %rax, %r15
movl (%rax), %r12d
movl $0x0, (%rax)
movq %r14, %rdi
leaq -0x1f0(%rbp), %rsi
callq 0x3320
cmpq %r14, -0x1f0(%rbp)
je 0xbd03
movl (%r15), %eax
testl %eax, %eax
je 0xaf3a
cmpl $0x22, %eax
leaq -0x960(%rbp), %r14
jne 0xaf44
jmp 0xbd7b
addq -0x138(%rbp), %r15
leaq -0x598(%rbp), %rdi
movq %r12, %rsi
movq %r15, %rcx
callq 0x3270
movq -0x598(%rbp), %r14
callq 0x3050
movq %rax, %r15
movl (%rax), %eax
movl %eax, -0x30(%rbp)
movl $0x0, (%r15)
movq %r14, %rdi
leaq -0x1f0(%rbp), %rsi
movl $0xa, %edx
callq 0x3330
cmpq %r14, -0x1f0(%rbp)
je 0xbd3f
movq %rax, %r12
addq $-0x80000000, %rax      # imm = 0x80000000
movabsq $-0x100000000, %rcx     # imm = 0xFFFFFFFF00000000
cmpq %rcx, %rax
jb 0xbd4b
movl (%r15), %eax
cmpl $0x22, %eax
je 0xbd4b
testl %eax, %eax
leaq -0x960(%rbp), %r14
jne 0xae80
movl -0x30(%rbp), %eax
movl %eax, (%r15)
movq -0x598(%rbp), %rdi
leaq -0x588(%rbp), %rax
cmpq %rax, %rdi
je 0xae98
callq 0x3230
movl %r12d, -0x160(%rbp)
leaq 0x1(%rbx), %rdx
notq %rbx
addq %rbx, %r13
leaq -0x598(%rbp), %rdi
leaq -0x140(%rbp), %rsi
movq %r13, %rcx
callq 0x3270
movq -0x598(%rbp), %rbx
movl (%r15), %r12d
movl $0x0, (%r15)
movq %rbx, %rdi
leaq -0x1f0(%rbp), %rsi
movl $0xa, %edx
callq 0x3330
cmpq %rbx, -0x1f0(%rbp)
je 0xbd57
leaq -0x80000000(%rax), %rcx
movabsq $-0x100000000, %rdx     # imm = 0xFFFFFFFF00000000
cmpq %rdx, %rcx
jb 0xbd63
movl (%r15), %ecx
cmpl $0x22, %ecx
je 0xbd63
testl %ecx, %ecx
jne 0xaf1e
movl %r12d, (%r15)
leaq 0x10e03(%rip), %rdi     # 0x1bd28
xorl %esi, %esi
movl %eax, %edx
leaq -0x160(%rbp), %rcx
callq 0xf8e0
jmp 0xb007
movl %r12d, (%r15)
leaq -0x960(%rbp), %r14
movq -0x598(%rbp), %rdi
leaq -0x588(%rbp), %rax
cmpq %rax, %rdi
je 0xaf66
movd %xmm0, -0x30(%rbp)
callq 0x3230
movd -0x30(%rbp), %xmm0
movd %xmm0, -0x160(%rbp)
leaq 0x1(%rbx), %rdx
notq %rbx
addq %rbx, %r13
leaq -0x598(%rbp), %rdi
leaq -0x140(%rbp), %rsi
movq %r13, %rcx
callq 0x3270
movq -0x598(%rbp), %rbx
movl (%r15), %r12d
movl $0x0, (%r15)
movq %rbx, %rdi
leaq -0x1f0(%rbp), %rsi
movl $0xa, %edx
callq 0x3330
cmpq %rbx, -0x1f0(%rbp)
je 0xbd1b
leaq -0x80000000(%rax), %rcx
movabsq $-0x100000000, %rdx     # imm = 0xFFFFFFFF00000000
cmpq %rdx, %rcx
jb 0xbd0f
movl (%r15), %ecx
cmpl $0x22, %ecx
je 0xbd0f
testl %ecx, %ecx
jne 0xafed
movl %r12d, (%r15)
leaq 0x10d34(%rip), %rdi     # 0x1bd28
movl $0x1, %esi
movl %eax, %edx
leaq -0x160(%rbp), %rcx
callq 0xf8e0
movq -0x598(%rbp), %rdi
leaq -0x588(%rbp), %rax
cmpq %rax, %rdi
leaq -0x140(%rbp), %r12
je 0xad0d
callq 0x3230
jmp 0xad0d
leaq -0x348(%rbp), %rbx
movq %rbx, -0x10(%rbx)
leaq 0xa4b5(%rip), %rsi      # 0x154f6
leaq 0xa4c1(%rip), %rdx      # 0x15509
leaq -0x358(%rbp), %rdi
callq 0x7202
leaq -0x358(%rbp), %rdi
movl $0x2, %esi
callq 0x9f03
movq -0x358(%rbp), %rdi
cmpq %rbx, %rdi
je 0xb076
callq 0x3230
leaq 0x102e3(%rip), %rax     # 0x1b360
movq (%rax), %rbx
testq %rbx, %rbx
je 0xb096
leaq 0x10(%rbx), %rdi
callq 0xc590
movq %rbx, %rdi
callq 0x3230
pxor %xmm0, %xmm0
leaq -0x260(%rbp), %rax
movdqa %xmm0, (%rax)
xorl %r12d, %r12d
movq %r12, 0x10(%rax)
leaq -0x150(%rbp), %rax
movq %rax, -0x10(%rax)
movq %r12, -0x8(%rax)
movb %r12b, (%rax)
leaq -0x90(%rbp), %rax
movq %rax, -0x10(%rax)
movq %r12, -0x8(%rax)
movb %r12b, (%rax)
leaq -0x70(%rbp), %rax
movq %rax, -0x10(%rax)
movq %r12, -0x8(%rax)
movb %r12b, (%rax)
leaq -0xd0(%rbp), %rax
movq %rax, -0x10(%rax)
movq %r12, -0x8(%rax)
movb %r12b, (%rax)
leaq -0xb0(%rbp), %rax
movq %rax, -0x10(%rax)
movq %r12, -0x8(%rax)
movb %r12b, (%rax)
leaq -0x110(%rbp), %rax
movq %rax, -0x10(%rax)
movq %r12, -0x8(%rax)
movb %r12b, (%rax)
movb $0x1, %r15b
leaq -0x100(%rbp), %r13
leaq -0x598(%rbp), %rbx
movq -0x960(%rbp), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x3240
movsbl %al, %edx
movq %r14, %rdi
movq %r13, %rsi
callq 0x3470
movq (%rax), %rcx
movq -0x18(%rcx), %rcx
testb $0x5, 0x20(%rax,%rcx)
jne 0xbaf2
cmpq $0x0, -0xf8(%rbp)
je 0xb126
leaq -0x1e0(%rbp), %rax
movq %rax, -0x1f0(%rbp)
movq %r12, -0x1e8(%rbp)
movb %r12b, -0x1e0(%rbp)
leaq -0x1b8(%rbp), %rax
movq %rax, -0x1c8(%rbp)
movq %r12, -0x1c0(%rbp)
movb %r12b, -0x1b8(%rbp)
leaq -0x198(%rbp), %rax
movq %rax, -0x1a8(%rbp)
movq %r12, -0x1a0(%rbp)
movb %r12b, -0x198(%rbp)
leaq -0x178(%rbp), %rax
movq %rax, -0x188(%rbp)
movq %r12, -0x180(%rbp)
movb %r12b, -0x178(%rbp)
movq %r12, -0x168(%rbp)
leaq -0x1f0(%rbp), %rdi
movq %r13, %rsi
callq 0x3160
movq %rbx, %rdi
movq %r13, %rsi
movl $0x8, %edx
callq 0x3410
movq %rbx, %rdi
leaq -0x160(%rbp), %rsi
callq 0x32e0
leaq -0x290(%rbp), %rax
movq %rax, -0x2a0(%rbp)
movq -0x160(%rbp), %rsi
movq -0x158(%rbp), %rdx
addq %rsi, %rdx
leaq -0x2a0(%rbp), %rdi
callq 0x7168
leaq -0x2a0(%rbp), %rdi
callq 0xa0f0
movl %eax, %ebx
movq -0x2a0(%rbp), %rdi
leaq -0x290(%rbp), %rax
cmpq %rax, %rdi
je 0xb25e
callq 0x3230
movl %ebx, %eax
leaq 0xa0dd(%rip), %rcx      # 0x15344
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
leaq -0x598(%rbp), %rdi
leaq -0xa0(%rbp), %rsi
movl $0x2c, %edx
callq 0x3470
leaq -0x598(%rbp), %rdi
leaq -0x80(%rbp), %rsi
movl $0x2c, %edx
callq 0x3470
leaq -0x598(%rbp), %rdi
leaq -0xe0(%rbp), %rsi
movl $0x2c, %edx
callq 0x3470
movl %ebx, %r12d
movq -0xa0(%rbp), %rdi
movq -0x98(%rbp), %rsi
addq %rdi, %rsi
movb $0x20, -0x60(%rbp)
leaq -0x60(%rbp), %rbx
movq %rbx, %rdx
callq 0xc5c3
movq %rax, %rcx
subq -0xa0(%rbp), %rcx
movq %rcx, -0x98(%rbp)
movb $0x0, (%rax)
movq -0x80(%rbp), %rdi
movq -0x78(%rbp), %rsi
addq %rdi, %rsi
movb $0x20, -0x60(%rbp)
movq %rbx, %rdx
callq 0xc5c3
movq %rax, %rcx
subq -0x80(%rbp), %rcx
movq %rcx, -0x78(%rbp)
movb $0x0, (%rax)
movq -0xe0(%rbp), %rdi
movq -0xd8(%rbp), %rsi
addq %rdi, %rsi
movb $0x20, -0x60(%rbp)
movq %rbx, %rdx
callq 0xc5c3
movq %rax, %rcx
subq -0xe0(%rbp), %rcx
movq %rcx, -0xd8(%rbp)
movb $0x0, (%rax)
movq -0xa0(%rbp), %rdi
movq -0x98(%rbp), %rsi
addq %rdi, %rsi
movb $0x9, -0x60(%rbp)
movq %rbx, %rdx
callq 0xc5c3
movq %rax, %rcx
subq -0xa0(%rbp), %rcx
movq %rcx, -0x98(%rbp)
movb $0x0, (%rax)
movq -0x80(%rbp), %rdi
movq -0x78(%rbp), %rsi
addq %rdi, %rsi
movb $0x9, -0x60(%rbp)
movq %rbx, %rdx
callq 0xc5c3
movq %rax, %rcx
subq -0x80(%rbp), %rcx
movq %rcx, -0x78(%rbp)
movb $0x0, (%rax)
movq -0xe0(%rbp), %rdi
movq -0xd8(%rbp), %rsi
addq %rdi, %rsi
movb $0x9, -0x60(%rbp)
movq %rbx, %rdx
callq 0xc5c3
movq %rax, %rcx
subq -0xe0(%rbp), %rcx
movq %rcx, -0xd8(%rbp)
movb $0x0, (%rax)
movl %r12d, -0x1d0(%rbp)
leaq -0x1c8(%rbp), %rdi
leaq -0xa0(%rbp), %rsi
callq 0x3160
xorl %r12d, %r12d
leaq -0x1a8(%rbp), %rdi
leaq -0x80(%rbp), %rsi
callq 0x3160
leaq -0x188(%rbp), %rdi
leaq -0xe0(%rbp), %rsi
callq 0x3160
jmp 0xba4a
leaq -0x598(%rbp), %rdi
leaq -0xa0(%rbp), %rsi
movl $0x2c, %edx
callq 0x3470
leaq -0x598(%rbp), %rdi
leaq -0xc0(%rbp), %rsi
movl $0x2c, %edx
callq 0x3470
movl %ebx, %r14d
movq -0xa0(%rbp), %rdi
movq -0x98(%rbp), %rsi
addq %rdi, %rsi
movb $0x20, -0x60(%rbp)
leaq -0x60(%rbp), %rbx
movq %rbx, %rdx
callq 0xc5c3
movq %rax, %rcx
subq -0xa0(%rbp), %rcx
movq %rcx, -0x98(%rbp)
movb $0x0, (%rax)
movq -0xc0(%rbp), %rdi
movq -0xb8(%rbp), %rsi
addq %rdi, %rsi
movb $0x20, -0x60(%rbp)
movq %rbx, %rdx
callq 0xc5c3
movq %rax, %rcx
subq -0xc0(%rbp), %rcx
movq %rcx, -0xb8(%rbp)
movb $0x0, (%rax)
movq -0xa0(%rbp), %rdi
movq -0x98(%rbp), %rsi
addq %rdi, %rsi
movb $0x9, -0x60(%rbp)
movq %rbx, %rdx
callq 0xc5c3
movq %rax, %rcx
subq -0xa0(%rbp), %rcx
movq %rcx, -0x98(%rbp)
movb $0x0, (%rax)
movq -0xc0(%rbp), %rdi
movq -0xb8(%rbp), %rsi
addq %rdi, %rsi
movb $0x9, -0x60(%rbp)
movq %rbx, %rdx
callq 0xc5c3
movq %rax, %rcx
subq -0xc0(%rbp), %rcx
movq %rcx, -0xb8(%rbp)
movb $0x0, (%rax)
movl %r14d, -0x1d0(%rbp)
leaq -0x1c8(%rbp), %rdi
leaq -0xa0(%rbp), %rsi
callq 0x3160
leaq -0xc0(%rbp), %r14
movq %r14, %rdi
movl $0x28, %esi
xorl %edx, %edx
callq 0x3300
movq %rax, %rbx
movq %r14, %rdi
movl $0x29, %esi
xorl %edx, %edx
callq 0x3300
leaq 0x1(%rbx), %rdx
movq %rbx, %rcx
notq %rcx
addq %rax, %rcx
leaq -0x60(%rbp), %r14
movq %r14, %rdi
leaq -0xc0(%rbp), %rsi
callq 0x3270
leaq -0x1a8(%rbp), %rdi
movq %r14, %rsi
callq 0x32d0
movq -0x60(%rbp), %rdi
leaq -0x50(%rbp), %rax
cmpq %rax, %rdi
je 0xb58d
callq 0x3230
movq %r14, %rdi
leaq -0xc0(%rbp), %rsi
xorl %edx, %edx
movq %rbx, %rcx
callq 0x3270
movq -0x60(%rbp), %r14
callq 0x3050
movq %rax, %rbx
movl (%rax), %eax
movl %eax, -0x30(%rbp)
movl $0x0, (%rbx)
movq %r14, %rdi
leaq -0x240(%rbp), %rsi
movl $0xa, %edx
callq 0x3330
cmpq %r14, -0x240(%rbp)
je 0xbd93
leaq -0x80000000(%rax), %rcx
movabsq $-0x100000000, %rdx     # imm = 0xFFFFFFFF00000000
cmpq %rdx, %rcx
leaq -0x960(%rbp), %r14
jb 0xbdb7
movl (%rbx), %ecx
cmpl $0x22, %ecx
je 0xbdb7
testl %ecx, %ecx
jne 0xb60e
movl -0x30(%rbp), %ecx
movl %ecx, (%rbx)
movl %eax, -0x164(%rbp)
movq -0x60(%rbp), %rdi
leaq -0x50(%rbp), %rax
cmpq %rax, %rdi
je 0xba4a
callq 0x3230
jmp 0xba4a
leaq -0x598(%rbp), %rdi
leaq -0x80(%rbp), %rsi
movl $0x2c, %edx
callq 0x3470
leaq -0x598(%rbp), %rdi
leaq -0xe0(%rbp), %rsi
movl $0x2c, %edx
callq 0x3470
leaq -0x598(%rbp), %rdi
leaq -0xc0(%rbp), %rsi
movl $0x2c, %edx
callq 0x3470
movq -0x80(%rbp), %rdi
movq -0x78(%rbp), %rsi
addq %rdi, %rsi
movb $0x20, -0x60(%rbp)
leaq -0x60(%rbp), %r14
movq %r14, %rdx
callq 0xc5c3
movq %rax, %rcx
subq -0x80(%rbp), %rcx
movq %rcx, -0x78(%rbp)
movb $0x0, (%rax)
movq -0xe0(%rbp), %rdi
movq -0xd8(%rbp), %rsi
addq %rdi, %rsi
movb $0x20, -0x60(%rbp)
movq %r14, %rdx
callq 0xc5c3
movq %rax, %rcx
subq -0xe0(%rbp), %rcx
movq %rcx, -0xd8(%rbp)
movb $0x0, (%rax)
movq -0xc0(%rbp), %rdi
movq -0xb8(%rbp), %rsi
addq %rdi, %rsi
movb $0x20, -0x60(%rbp)
movq %r14, %rdx
callq 0xc5c3
movq %rax, %rcx
subq -0xc0(%rbp), %rcx
movq %rcx, -0xb8(%rbp)
movb $0x0, (%rax)
movq -0x80(%rbp), %rdi
movq -0x78(%rbp), %rsi
addq %rdi, %rsi
movb $0x9, -0x60(%rbp)
movq %r14, %rdx
callq 0xc5c3
movq %rax, %rcx
subq -0x80(%rbp), %rcx
movq %rcx, -0x78(%rbp)
movb $0x0, (%rax)
movq -0xe0(%rbp), %rdi
movq -0xd8(%rbp), %rsi
addq %rdi, %rsi
movb $0x9, -0x60(%rbp)
movq %r14, %rdx
callq 0xc5c3
movq %rax, %rcx
subq -0xe0(%rbp), %rcx
movq %rcx, -0xd8(%rbp)
movb $0x0, (%rax)
movq -0xc0(%rbp), %rdi
movq -0xb8(%rbp), %rsi
addq %rdi, %rsi
movb $0x9, -0x60(%rbp)
movq %r14, %rdx
callq 0xc5c3
movq %rax, %rcx
subq -0xc0(%rbp), %rcx
movq %rcx, -0xb8(%rbp)
movb $0x0, (%rax)
movl %ebx, -0x1d0(%rbp)
leaq -0x1a8(%rbp), %rdi
leaq -0x80(%rbp), %rsi
callq 0x3160
leaq -0x188(%rbp), %rdi
leaq -0xe0(%rbp), %rsi
callq 0x3160
movq -0xc0(%rbp), %r14
callq 0x3050
movq %rax, %rbx
movl (%rax), %eax
movl %eax, -0x30(%rbp)
movl $0x0, (%rbx)
movq %r14, %rdi
leaq -0x60(%rbp), %rsi
movl $0xa, %edx
callq 0x3330
cmpq %r14, -0x60(%rbp)
je 0xbdab
leaq -0x80000000(%rax), %rcx
movabsq $-0x100000000, %rdx     # imm = 0xFFFFFFFF00000000
cmpq %rdx, %rcx
jb 0xbd9f
movl (%rbx), %ecx
cmpl $0x22, %ecx
je 0xbd9f
testl %ecx, %ecx
leaq -0x960(%rbp), %r14
jne 0xb819
movl -0x30(%rbp), %ecx
movl %ecx, (%rbx)
movl %eax, -0x164(%rbp)
jmp 0xba4a
movl $0xa, -0x1d0(%rbp)
jmp 0xba4a
leaq -0x280(%rbp), %rdi
leaq 0x9cc9(%rip), %rsi      # 0x1550a
movq -0x1f8(%rbp), %rdx
callq 0x8bd0
leaq -0x280(%rbp), %rdi
callq 0x9777
movq -0x280(%rbp), %rdi
leaq -0x270(%rbp), %rax
cmpq %rax, %rdi
je 0xb871
callq 0x3230
xorl %ebx, %ebx
xorl %r15d, %r15d
jmp 0xba5f
leaq -0x598(%rbp), %rdi
leaq -0xa0(%rbp), %rsi
movl $0x2c, %edx
callq 0x3470
leaq -0x598(%rbp), %rdi
leaq -0x80(%rbp), %rsi
movl $0x2c, %edx
callq 0x3470
leaq -0x598(%rbp), %rdi
leaq -0x120(%rbp), %rsi
movl $0x2c, %edx
callq 0x3470
movq -0xa0(%rbp), %rdi
movq -0x98(%rbp), %rsi
addq %rdi, %rsi
movb $0x20, -0x60(%rbp)
leaq -0x60(%rbp), %rdx
callq 0xc5c3
movq -0xa0(%rbp), %rdx
addq -0x98(%rbp), %rdx
leaq -0xa0(%rbp), %rdi
movq %rax, %rsi
callq 0x3090
movq -0x80(%rbp), %rdi
movq -0x78(%rbp), %rsi
addq %rdi, %rsi
movb $0x20, -0x60(%rbp)
leaq -0x60(%rbp), %rdx
callq 0xc5c3
movq -0x80(%rbp), %rdx
addq -0x78(%rbp), %rdx
leaq -0x80(%rbp), %rdi
movq %rax, %rsi
callq 0x3090
movq -0x120(%rbp), %rdi
movq -0x118(%rbp), %rsi
addq %rdi, %rsi
movb $0x20, -0x60(%rbp)
leaq -0x60(%rbp), %rdx
callq 0xc5c3
movq -0x120(%rbp), %rdx
addq -0x118(%rbp), %rdx
leaq -0x120(%rbp), %rdi
movq %rax, %rsi
callq 0x3090
movq -0xa0(%rbp), %rdi
movq -0x98(%rbp), %rsi
addq %rdi, %rsi
movb $0x9, -0x60(%rbp)
leaq -0x60(%rbp), %rdx
callq 0xc5c3
movq -0xa0(%rbp), %rdx
addq -0x98(%rbp), %rdx
leaq -0xa0(%rbp), %rdi
movq %rax, %rsi
callq 0x3090
movq -0x80(%rbp), %rdi
movq -0x78(%rbp), %rsi
addq %rdi, %rsi
movb $0x9, -0x60(%rbp)
leaq -0x60(%rbp), %rdx
callq 0xc5c3
movq -0x80(%rbp), %rdx
addq -0x78(%rbp), %rdx
leaq -0x80(%rbp), %rdi
movq %rax, %rsi
callq 0x3090
movq -0x120(%rbp), %rdi
movq -0x118(%rbp), %rsi
addq %rdi, %rsi
movb $0x9, -0x60(%rbp)
leaq -0x60(%rbp), %rdx
callq 0xc5c3
movq -0x120(%rbp), %rdx
addq -0x118(%rbp), %rdx
leaq -0x120(%rbp), %rdi
movq %rax, %rsi
callq 0x3090
movl $0x4, -0x1d0(%rbp)
leaq -0x1c8(%rbp), %rdi
leaq -0xa0(%rbp), %rsi
callq 0x3160
leaq -0x1a8(%rbp), %rdi
leaq -0x80(%rbp), %rsi
callq 0x3160
leaq -0x120(%rbp), %rdi
xorl %esi, %esi
movl $0xa, %edx
callq 0xc3b7
movl %eax, -0x168(%rbp)
movb $0x1, %bl
leaq -0x260(%rbp), %rdi
leaq -0x1f0(%rbp), %rsi
callq 0xc458
leaq -0x598(%rbp), %rdi
movq 0xf553(%rip), %rsi      # 0x1afc0
callq 0x3350
leaq -0x520(%rbp), %rdi
callq 0x30e0
movq -0x188(%rbp), %rdi
leaq -0x178(%rbp), %rax
cmpq %rax, %rdi
je 0xba96
callq 0x3230
movq -0x1a8(%rbp), %rdi
leaq -0x198(%rbp), %rax
cmpq %rax, %rdi
je 0xbaae
callq 0x3230
movq -0x1c8(%rbp), %rdi
leaq -0x1b8(%rbp), %rax
cmpq %rax, %rdi
je 0xbac6
callq 0x3230
movq -0x1f0(%rbp), %rdi
leaq -0x1e0(%rbp), %rax
cmpq %rax, %rdi
je 0xbade
callq 0x3230
testb %bl, %bl
leaq -0x598(%rbp), %rbx
jne 0xb126
jmp 0xbb8d
movl $0x28, %edi
callq 0x3250
movq %rax, %rbx
leaq -0x318(%rbp), %rdi
leaq -0x260(%rbp), %rsi
callq 0xc4f0
leaq -0x318(%rbp), %rsi
movq %rbx, %rdi
callq 0xcbec
leaq 0xf838(%rip), %rax      # 0x1b360
movq %rbx, (%rax)
leaq -0x318(%rbp), %rdi
callq 0xc590
leaq -0x328(%rbp), %rbx
movq %rbx, -0x10(%rbx)
leaq 0x99f4(%rip), %rsi      # 0x1553d
leaq 0x99fb(%rip), %rdx      # 0x1554b
leaq -0x338(%rbp), %rdi
callq 0x7202
leaq -0x338(%rbp), %rdi
movl $0x1, %esi
callq 0x9f03
movq -0x338(%rbp), %rdi
cmpq %rbx, %rdi
je 0xbb7e
callq 0x3230
movb $0x1, %r15b
leaq -0x960(%rbp), %rdi
callq 0x3080
movq -0x120(%rbp), %rdi
leaq -0x110(%rbp), %rax
cmpq %rax, %rdi
je 0xbba5
callq 0x3230
movq -0xc0(%rbp), %rdi
leaq -0xb0(%rbp), %rax
cmpq %rax, %rdi
je 0xbbbd
callq 0x3230
movq -0xe0(%rbp), %rdi
leaq -0xd0(%rbp), %rax
cmpq %rax, %rdi
je 0xbbd5
callq 0x3230
movq -0x80(%rbp), %rdi
leaq -0x70(%rbp), %rax
cmpq %rax, %rdi
je 0xbbe7
callq 0x3230
movq -0xa0(%rbp), %rdi
leaq -0x90(%rbp), %rax
cmpq %rax, %rdi
je 0xbbff
callq 0x3230
movq -0x160(%rbp), %rdi
leaq -0x150(%rbp), %rax
cmpq %rax, %rdi
je 0xbc17
callq 0x3230
leaq -0x260(%rbp), %rdi
callq 0xc590
movq 0xf396(%rip), %rsi      # 0x1afc0
leaq -0x758(%rbp), %rdi
callq 0x3350
leaq -0x6e0(%rbp), %rdi
callq 0x30e0
jmp 0xbcc3
leaq -0x3a8(%rbp), %rbx
movq %rbx, -0x10(%rbx)
leaq 0x9825(%rip), %rsi      # 0x1547b
leaq 0x984f(%rip), %rdx      # 0x154ac
leaq -0x3b8(%rbp), %rdi
callq 0x7202
leaq -0x3b8(%rbp), %rdi
callq 0x9777
movq -0x3b8(%rbp), %rdi
jmp 0xbcb6
leaq -0x388(%rbp), %rbx
movq %rbx, -0x10(%rbx)
leaq 0x981d(%rip), %rsi      # 0x154ad
leaq 0x984a(%rip), %rdx      # 0x154e1
leaq -0x398(%rbp), %rdi
callq 0x7202
leaq -0x398(%rbp), %rdi
callq 0x9777
movq -0x398(%rbp), %rdi
movb $0x1, %r15b
cmpq %rbx, %rdi
je 0xbcc3
callq 0x3230
movq 0xf2f6(%rip), %rsi      # 0x1afc0
leaq -0xae0(%rbp), %rdi
callq 0x3350
leaq -0xa68(%rbp), %rdi
callq 0x30e0
movq -0x140(%rbp), %rdi
leaq -0x130(%rbp), %rax
cmpq %rax, %rdi
je 0xab83
callq 0x3230
jmp 0xab83
leaq 0x9847(%rip), %rdi      # 0x15551
callq 0x3180
leaq 0x9836(%rip), %rdi      # 0x1554c
callq 0x3360
leaq 0x982a(%rip), %rdi      # 0x1554c
callq 0x3180
leaq 0x981e(%rip), %rdi      # 0x1554c
callq 0x3360
leaq 0x9812(%rip), %rdi      # 0x1554c
callq 0x3180
leaq 0x9806(%rip), %rdi      # 0x1554c
callq 0x3180
leaq 0x97fa(%rip), %rdi      # 0x1554c
callq 0x3360
leaq 0x97ee(%rip), %rdi      # 0x1554c
callq 0x3180
leaq 0x97e2(%rip), %rdi      # 0x1554c
callq 0x3360
leaq 0x97db(%rip), %rdi      # 0x15551
callq 0x3180
leaq 0x97cf(%rip), %rdi      # 0x15551
callq 0x3360
leaq 0x97c3(%rip), %rdi      # 0x15551
callq 0x3360
leaq 0x97b2(%rip), %rdi      # 0x1554c
callq 0x3180
leaq 0x97a6(%rip), %rdi      # 0x1554c
callq 0x3360
leaq 0x979a(%rip), %rdi      # 0x1554c
callq 0x3180
leaq 0x978e(%rip), %rdi      # 0x1554c
callq 0x3360
movq %rax, %r14
movq -0x280(%rbp), %rdi
leaq -0x270(%rbp), %rax
jmp 0xbe7c
jmp 0xbf9e
jmp 0xbf9e
jmp 0xbf9e
jmp 0xbf9e
jmp 0xbf9e
jmp 0xbf9e
jmp 0xbf9e
jmp 0xbf9e
jmp 0xbf9e
jmp 0xbf9e
jmp 0xbf9e
jmp 0xbf9e
jmp 0xbf9e
jmp 0xbf9e
jmp 0xbf9e
jmp 0xbf9e
jmp 0xbf9e
jmp 0xbf9e
jmp 0xbf9e
jmp 0xbf9e
jmp 0xbf9e
jmp 0xbf9e
jmp 0xbf9e
jmp 0xbf9e
movq %rax, %r14
cmpl $0x0, (%rbx)
jne 0xbfa1
movl -0x30(%rbp), %eax
movl %eax, (%rbx)
jmp 0xbfa1
movq %rax, %r14
cmpl $0x0, (%rbx)
jne 0xbe74
movl -0x30(%rbp), %eax
movl %eax, (%rbx)
movq -0x60(%rbp), %rdi
leaq -0x50(%rbp), %rax
cmpq %rax, %rdi
je 0xbfa1
callq 0x3230
jmp 0xbfa1
movq %rax, %r14
movq -0x398(%rbp), %rdi
jmp 0xbf5e
jmp 0xc261
jmp 0xbf9e
jmp 0xbf9e
jmp 0xbf9e
jmp 0xbf9e
jmp 0xbf9e
jmp 0xbf9e
movq %rax, %r14
movq -0x3b8(%rbp), %rdi
jmp 0xbf5e
jmp 0xc261
jmp 0xbedc
jmp 0xbf9e
movq %rax, %r14
jmp 0xbfc0
movq %rax, %r14
movq -0x338(%rbp), %rdi
cmpq %rbx, %rdi
jne 0xbf14
jmp 0xc1aa
jmp 0xc1a7
movq %rax, %r14
leaq -0x318(%rbp), %rdi
callq 0xc590
jmp 0xbf11
movq %rax, %r14
movq %rbx, %rdi
callq 0x3230
jmp 0xc1aa
movq %rax, %r14
movq -0x358(%rbp), %rdi
cmpq %rbx, %rdi
jne 0xc19d
jmp 0xc240
jmp 0xc11c
jmp 0xc261
jmp 0xc261
jmp 0xc261
jmp 0xc261
jmp 0xc261
movq %rax, %r14
movq -0x378(%rbp), %rdi
cmpq %rbx, %rdi
jne 0xc170
jmp 0xc264
jmp 0xc261
jmp 0xc1a7
jmp 0xc29d
jmp 0xc29d
jmp 0xc29d
jmp 0xc29d
movq %rax, %r14
movq -0x3d8(%rbp), %rdi
jmp 0xc019
jmp 0xc2c5
movq %rax, %r14
movq 0xf018(%rip), %rsi      # 0x1afc0
leaq -0x598(%rbp), %rdi
callq 0x3350
leaq -0x520(%rbp), %rdi
callq 0x30e0
leaq -0x1f0(%rbp), %rdi
callq 0xc496
jmp 0xc1aa
jmp 0xc261
movq %rax, %r14
movq -0x2c0(%rbp), %rdi
leaq -0x2b0(%rbp), %rax
jmp 0xc167
jmp 0xc11c
jmp 0xc04c
jmp 0xc11c
movq %rax, %r14
cmpl $0x0, (%r12)
jne 0xc159
movl %r15d, (%r12)
jmp 0xc159
movq %rax, %r14
movq -0x3f8(%rbp), %rdi
cmpq %rbx, %rdi
jne 0xc296
jmp 0xc2ec
jmp 0xc2c5
jmp 0xc261
movq %rax, %r14
movq -0x2e0(%rbp), %rdi
leaq -0x2d0(%rbp), %rax
jmp 0xc167
jmp 0xc11c
movq %rax, %r14
jmp 0xc186
jmp 0xc11c
movq %r14, %rbx
movq %rax, %r14
cmpl $0x1, %edx
jne 0xc2ec
movq %r14, %rdi
callq 0x3120
leaq 0x936e(%rip), %rsi      # 0x153e5
leaq -0x5b8(%rbp), %rdi
movq %rbx, %rdx
callq 0x8bd0
leaq -0x5b8(%rbp), %rdi
callq 0x9777
leaq -0x5a8(%rbp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0xc0a7
callq 0x3230
callq 0x33f0
jmp 0xab80
jmp 0xc2c5
movq %rax, %r14
leaq -0x5a8(%rbp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0xc0d3
callq 0x3230
jmp 0xc0d3
movq %rax, %r14
callq 0x33f0
jmp 0xc2ec
movq %rax, %rdi
callq 0x8c5b
jmp 0xc2c5
movq %rax, %r14
leaq -0x5c8(%rbp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
jne 0xc13c
jmp 0xc358
jmp 0xc17a
movq %rax, %r14
cmpl $0x0, (%r15)
jne 0xc186
movl -0x30(%rbp), %eax
movl %eax, (%r15)
jmp 0xc186
jmp 0xc17a
jmp 0xc261
movq %rax, %r14
jmp 0xc240
jmp 0xc261
movq %rax, %r14
movq -0x418(%rbp), %rdi
cmpq %rbx, %rdi
je 0xc358
callq 0x3230
jmp 0xc358
movq %rax, %r14
jmp 0xc358
movq %rax, %r14
cmpl $0x0, (%rbx)
jne 0xc159
movl %r15d, (%rbx)
movq -0x758(%rbp), %rdi
leaq -0x748(%rbp), %rax
cmpq %rax, %rdi
je 0xc264
callq 0x3230
jmp 0xc264
movq %rax, %r14
cmpl $0x0, (%r15)
jne 0xc186
movl %r12d, (%r15)
movq -0x598(%rbp), %rdi
leaq -0x588(%rbp), %rax
cmpq %rax, %rdi
je 0xc240
callq 0x3230
jmp 0xc240
movq %rax, %r14
movq -0x120(%rbp), %rdi
leaq -0x110(%rbp), %rax
cmpq %rax, %rdi
je 0xc1c2
callq 0x3230
movq -0xc0(%rbp), %rdi
leaq -0xb0(%rbp), %rax
cmpq %rax, %rdi
je 0xc1da
callq 0x3230
movq -0xe0(%rbp), %rdi
leaq -0xd0(%rbp), %rax
cmpq %rax, %rdi
je 0xc1f2
callq 0x3230
movq -0x80(%rbp), %rdi
leaq -0x70(%rbp), %rax
cmpq %rax, %rdi
je 0xc204
callq 0x3230
movq -0xa0(%rbp), %rdi
leaq -0x90(%rbp), %rax
cmpq %rax, %rdi
je 0xc21c
callq 0x3230
movq -0x160(%rbp), %rdi
leaq -0x150(%rbp), %rax
cmpq %rax, %rdi
je 0xc234
callq 0x3230
leaq -0x260(%rbp), %rdi
callq 0xc590
movq 0xed79(%rip), %rsi      # 0x1afc0
leaq -0x758(%rbp), %rdi
callq 0x3350
leaq -0x6e0(%rbp), %rdi
callq 0x30e0
jmp 0xc264
movq %rax, %r14
movq 0xed55(%rip), %rsi      # 0x1afc0
leaq -0xae0(%rbp), %rdi
callq 0x3350
leaq -0xa68(%rbp), %rdi
callq 0x30e0
movq -0x140(%rbp), %rdi
leaq -0x130(%rbp), %rax
cmpq %rax, %rdi
je 0xc2ec
callq 0x3230
jmp 0xc2ec
movq %rax, %r14
jmp 0xc283
jmp 0xc2c5
jmp 0xc2a8
jmp 0xc2ca
movq %rax, %r14
movq -0x598(%rbp), %rdi
leaq -0x588(%rbp), %rax
cmpq %rax, %rdi
je 0xc2cd
callq 0x3230
jmp 0xc2cd
movq %rax, %r14
jmp 0xc2ec
movq %rax, %r14
movq 0xecec(%rip), %rsi      # 0x1afc0
leaq -0xae0(%rbp), %rdi
callq 0x3350
leaq -0xa68(%rbp), %rdi
callq 0x30e0
movq -0x218(%rbp), %rdi
leaq -0x208(%rbp), %rax
cmpq %rax, %rdi
je 0xc304
callq 0x3230
movq -0x238(%rbp), %rdi
leaq -0x228(%rbp), %rax
cmpq %rax, %rdi
je 0xc31c
callq 0x3230
movq -0x300(%rbp), %rdi
leaq -0x2f0(%rbp), %rax
cmpq %rax, %rdi
je 0xc334
callq 0x3230
movq -0x100(%rbp), %rdi
leaq -0xf0(%rbp), %rax
cmpq %rax, %rdi
je 0xc34c
callq 0x3230
leaq -0x960(%rbp), %rdi
callq 0x30a0
movq %r14, %rdi
callq 0x3440