// File: /workspace/github_cpp_makefile_star2_O1/sudocode1[P]radio/compiler.cpp
// Function: main
int main() {
    std::string input;
    std::cout << "enter radio filename: ";
    std::getline(std::cin, input);
    std::cout << input << std::endl;
    std::vector <std::string> lines;{};
    std::string currentLine;
    std::ifstream file(input);
    std::vector<std::string> structs{};



    while (std::getline (file, currentLine)) {
        if (currentLine.rfind("@incl", 0) == 0) {
            readIncl(currentLine.substr(6), &lines);
        } else {
            lines.push_back(currentLine);
        }
        
    };

    file.close();

    std::ofstream writeFile("output.c");

    writeFile << "#include <stdio.h>\n";
    writeFile << "#include <string.h>\n";
    writeFile << "int main(){\n";

    int i=1;
    for (std::string line : lines) {
        std::vector<std::string> sep = split(line, ' ');

        if (line.rfind("out!", 0) == 0) {
            writeFile << "printf(" << line.substr(5) << ");\nprintf(\"\\n\");\n"; 
        } 
        else if (line.rfind("out", 0) == 0) {
            writeFile << "printf(" << line.substr(4) << ");\n"; 
        } 
        else if (line.rfind(";;", 0) == 0) {
            if (line.size() > 2) {
                writeFile << "//" << line.substr(2) << "\n";
            } else {
                writeFile << "//\n";
            }
        }
        else if (line.rfind("@structure", 0) == 0) {
            writeFile << "typedef struct {\n";
        }
        else if (line.rfind("@struct_access_property", 0) == 0) {
            std::string placeholder = "\%s";
            
            if (sep[1] == "str") {
                placeholder = "\%s";
            } else if (sep[1] == "int" || sep[1] == "float" || sep[1] == "double") {
                placeholder = "\%d";
            }

            writeFile << "printf(\"" << placeholder << "\"," << sep[2] << ");\n";
        }
        else if (line.rfind("@strout", 0) == 0) {
            writeFile << "printf(\"%s\", " << line.substr(8) << ");\n"; 
        } 
        else if (line.rfind("@intout", 0) == 0) {
            writeFile << "printf(\"%d\", " << line.substr(8) << ");\n"; 
        } 
        else if (line.rfind("@floatout", 0) == 0) {
            writeFile << "printf(\"%f\", " << line.substr(9) << ");\n"; 
        }
        else if (line.rfind("@!define", 0) == 0) {
            writeFile << sep[1] << " " << sep[2] << "() {\n";
        }
        else if (line.rfind("@define", 0) == 0) {
            writeFile << sep[1] << " " << sep[2] << " (";
        }
        else if (line.rfind("@param", 0) == 0) {
            writeFile << sep[1] << " " << sep[2] << ",";
        }
        else if (line.rfind("@finalparam", 0) == 0) {
            writeFile << sep[1] << " " << sep[2] << "){\n";
        }
        else if (line.rfind("@call", 0) == 0) {
            writeFile << sep[1] << "(" << line.substr(sep[0].size() + 1 + sep[1].size() + 1) << ");\n";
        }
        else if (line.rfind("@!call", 0) == 0) {
            writeFile << sep[1] << "();\n";
        }
        else if (line.rfind("@str", 0) == 0) {
            writeFile << "char* " << line.substr(5) << ";\n"; 
        } 
        else if (line.rfind("@int", 0) == 0) {
            writeFile << "int " << line.substr(5) << ";\n"; 
        } 
        else if (line.rfind("@float", 0) == 0) {
            writeFile << "float " << line.substr(7) << ";\n"; 
        }
        else if (line.rfind("@double", 0) == 0) {
            writeFile << "double " << line.substr(8) << ";\n"; 
        }
        else if (line.rfind("@redefine", 0) == 0) {
            writeFile << sep[1] << " = " << line.substr(sep[0].size() + sep[1].size() + 1) << ";\n"; 
        }
        else if (line.rfind("end", 0) == 0) {
            writeFile << "}\n";
        }
        else if (line.rfind("if", 0) == 0) {
            writeFile << "if(" << line.substr(3) << "){\n";
        }
        else if (line.rfind("else if", 0) == 0) {
            writeFile << "else if(" << line.substr(8) << "){\n";
        }
        else if (line.rfind("elif", 0) == 0) {
            writeFile << "else if(" << line.substr(5) << "){\n";
        }
        else if (line.rfind("else", 0) == 0) {
            writeFile << "else {\n";
        }
        else if (line.rfind("while", 0) == 0) {
            writeFile << "while(" << line.substr(6) << "){\n";
        }
        else if (line.rfind("for", 0) == 0) {
            writeFile << "for(" << line.substr(4) << "){\n";
        }
        else if (line.rfind("@nl", 0) == 0) {
            writeFile << "printf(\"\\n\");\n";
        }
        else if (line.rfind("@property", 0) == 0) {
            if (sep[1] == "str") {
                writeFile << "char * " << sep[2] << ";\n";
            } else if (sep[1] == "float") {
                writeFile << "float *" << sep[2] << ";\n";
            } else if (sep[1] == "double") {
                writeFile << "double * " << sep[2] << ";\n";
            } else if (sep[1] == "int") {
                writeFile << "int " << sep[2] << ";\n";
            }
        }
        else if (line.rfind("@create_struct", 0) == 0) {
            writeFile << sep[1] << " " << sep[2] << ";\n";
        }
        else if (line.rfind("@endstructure", 0) == 0) {
            writeFile << "} " << sep[1] << ";\n";
            structs.push_back(sep[1]);
        } 
        else {
            std::cout << "ERR: Line " << i << "\n" << line << "\n";
            break;
        }

        i++;
    }
    writeFile << "return 0;\n}";
    writeFile.close();
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x528, %rsp            # imm = 0x528
leaq -0x78(%rbp), %r14
movq %r14, -0x10(%r14)
movq $0x0, -0x8(%r14)
movb $0x0, (%r14)
movq 0x39e2(%rip), %rdi      # 0x5fd0
leaq 0x1a2b(%rip), %rsi      # 0x4020
movl $0x16, %edx
callq 0x2180
movq 0x39da(%rip), %rdi      # 0x5fe0
movq (%rdi), %rax
addq -0x18(%rax), %rdi
movl $0xa, %esi
callq 0x2130
movsbl %al, %edx
movq 0x39bf(%rip), %rdi      # 0x5fe0
leaq -0x88(%rbp), %rsi
callq 0x2250
movq -0x88(%rbp), %rsi
movq -0x80(%rbp), %rdx
movq 0x3991(%rip), %rdi      # 0x5fd0
callq 0x2180
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x2130
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x20c0
xorps %xmm0, %xmm0
movaps %xmm0, -0xe0(%rbp)
xorl %eax, %eax
movq %rax, -0xd0(%rbp)
leaq -0x98(%rbp), %rcx
movq %rcx, -0x10(%rcx)
movq %rax, -0x8(%rcx)
movb $0x0, (%rcx)
leaq -0x548(%rbp), %rbx
leaq -0x88(%rbp), %rsi
movq %rbx, %rdi
movl $0x8, %edx
callq 0x2200
xorps %xmm0, %xmm0
movaps %xmm0, -0x140(%rbp)
movq $0x0, -0x130(%rbp)
leaq -0xa8(%rbp), %r14
leaq 0x1966(%rip), %r15      # 0x4037
leaq -0x120(%rbp), %r12
leaq -0xe0(%rbp), %r13
movq -0x548(%rbp), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x2130
movsbl %al, %edx
movq %rbx, %rdi
movq %r14, %rsi
callq 0x2250
movq (%rax), %rcx
movq -0x18(%rcx), %rcx
testb $0x5, 0x20(%rax,%rcx)
jne 0x2784
movl $0x5, %ecx
movq %r14, %rdi
movq %r15, %rsi
xorl %edx, %edx
callq 0x2190
testq %rax, %rax
je 0x2737
movq %r13, %rdi
movq %r14, %rsi
callq 0x3b16
jmp 0x26df
movl $0x6, %edx
movq %r12, %rdi
movq %r14, %rsi
movq $-0x1, %rcx
callq 0x2160
movq %r12, %rdi
movq %r13, %rsi
callq 0x24c7
movq -0x120(%rbp), %rdi
leaq -0x110(%rbp), %rax
cmpq %rax, %rdi
je 0x26df
movq -0x110(%rbp), %rsi
incq %rsi
callq 0x2150
jmp 0x26df
leaq -0x548(%rbp), %rdi
callq 0x2040
leaq 0x18a6(%rip), %rsi      # 0x403d
leaq -0x340(%rbp), %rdi
movl $0x10, %edx
callq 0x2170
leaq 0x1897(%rip), %rsi      # 0x4046
leaq -0x340(%rbp), %rdi
movl $0x13, %edx
callq 0x2180
leaq 0x1893(%rip), %rsi      # 0x405a
leaq -0x340(%rbp), %rdi
movl $0x14, %edx
callq 0x2180
leaq 0x1890(%rip), %rsi      # 0x406f
leaq -0x340(%rbp), %rdi
movl $0xc, %edx
callq 0x2180
movq -0xe0(%rbp), %r12
movq -0xd8(%rbp), %r13
cmpq %r13, %r12
je 0x3851
movl $0x1, %r14d
leaq -0xc8(%rbp), %r15
leaq -0xb8(%rbp), %rax
movq %rax, -0xc8(%rbp)
movq (%r12), %rsi
movq 0x8(%r12), %rdx
addq %rsi, %rdx
movq %r15, %rdi
callq 0x3bda
leaq -0xf0(%rbp), %rax
movq %rax, -0x100(%rbp)
movq -0xc8(%rbp), %rsi
movq -0xc0(%rbp), %rdx
addq %rsi, %rdx
leaq -0x100(%rbp), %rbx
movq %rbx, %rdi
callq 0x3bda
leaq -0x60(%rbp), %rdi
movq %rbx, %rsi
movl $0x20, %edx
callq 0x23ac
movq -0x100(%rbp), %rdi
leaq -0xf0(%rbp), %rax
cmpq %rax, %rdi
je 0x2897
movq -0xf0(%rbp), %rsi
incq %rsi
callq 0x2150
movl $0x4, %ecx
movq %r15, %rdi
leaq 0x17d6(%rip), %rsi      # 0x407c
xorl %edx, %edx
callq 0x2190
testq %rax, %rax
je 0x2cad
movl $0x3, %ecx
movq %r15, %rdi
leaq 0x182b(%rip), %rsi      # 0x40f0
xorl %edx, %edx
callq 0x2190
testq %rax, %rax
je 0x2d0a
movl $0x2, %ecx
movq %r15, %rdi
leaq 0x17b7(%rip), %rsi      # 0x409b
xorl %edx, %edx
callq 0x2190
testq %rax, %rax
je 0x2d67
movl $0xa, %ecx
movq %r15, %rdi
leaq 0x17a2(%rip), %rsi      # 0x40a5
xorl %edx, %edx
callq 0x2190
testq %rax, %rax
je 0x2dda
movl $0x17, %ecx
movq %r15, %rdi
leaq 0x17a0(%rip), %rsi      # 0x40c2
xorl %edx, %edx
callq 0x2190
testq %rax, %rax
je 0x2dfa
movl $0x7, %ecx
movq %r15, %rdi
leaq 0x17ab(%rip), %rsi      # 0x40ec
xorl %edx, %edx
callq 0x2190
testq %rax, %rax
je 0x2f19
movl $0x7, %ecx
movq %r15, %rdi
leaq 0x17a2(%rip), %rsi      # 0x4102
xorl %edx, %edx
callq 0x2190
testq %rax, %rax
je 0x2f76
movl $0x9, %ecx
movq %r15, %rdi
leaq 0x1799(%rip), %rsi      # 0x4118
xorl %edx, %edx
callq 0x2190
testq %rax, %rax
je 0x2fd0
movl $0x8, %ecx
movq %r15, %rdi
leaq 0x1792(%rip), %rsi      # 0x4130
xorl %edx, %edx
callq 0x2190
testq %rax, %rax
je 0x3088
movl $0x7, %ecx
movq %r15, %rdi
leaq 0x1782(%rip), %rsi      # 0x413f
xorl %edx, %edx
callq 0x2190
testq %rax, %rax
je 0x30df
movl $0x6, %ecx
movq %r15, %rdi
leaq 0x176e(%rip), %rsi      # 0x414a
xorl %edx, %edx
callq 0x2190
testq %rax, %rax
je 0x3136
movl $0xb, %ecx
movq %r15, %rdi
leaq 0x1756(%rip), %rsi      # 0x4151
xorl %edx, %edx
callq 0x2190
testq %rax, %rax
je 0x318d
movl $0x5, %ecx
movq %r15, %rdi
leaq 0x1743(%rip), %rsi      # 0x415d
xorl %edx, %edx
callq 0x2190
testq %rax, %rax
je 0x31e4
movl $0x6, %ecx
movq %r15, %rdi
leaq 0x172a(%rip), %rsi      # 0x4163
xorl %edx, %edx
callq 0x2190
testq %rax, %rax
je 0x3263
movl $0x4, %ecx
movq %r15, %rdi
leaq 0x1717(%rip), %rsi      # 0x416f
xorl %edx, %edx
callq 0x2190
testq %rax, %rax
je 0x328f
movl $0x4, %ecx
movq %r15, %rdi
leaq 0x1704(%rip), %rsi      # 0x417b
xorl %edx, %edx
callq 0x2190
testq %rax, %rax
je 0x32ec
movl $0x6, %ecx
movq %r15, %rdi
leaq 0x16ef(%rip), %rsi      # 0x4185
xorl %edx, %edx
callq 0x2190
testq %rax, %rax
je 0x3349
movl $0x7, %ecx
movq %r15, %rdi
leaq 0x16de(%rip), %rsi      # 0x4193
xorl %edx, %edx
callq 0x2190
testq %rax, %rax
je 0x33a6
movl $0x9, %ecx
movq %r15, %rdi
leaq 0x16cf(%rip), %rsi      # 0x41a3
xorl %edx, %edx
callq 0x2190
testq %rax, %rax
je 0x3403
movl $0x3, %ecx
movq %r15, %rdi
leaq 0x16be(%rip), %rsi      # 0x41b1
xorl %edx, %edx
callq 0x2190
movl $0x2, %ebx
testq %rax, %rax
je 0x3481
movl $0x2, %ecx
movq %r15, %rdi
leaq 0x16a6(%rip), %rsi      # 0x41bd
xorl %edx, %edx
callq 0x2190
testq %rax, %rax
je 0x3494
movl $0x7, %ecx
movq %r15, %rdi
leaq 0x1682(%rip), %rsi      # 0x41b8
xorl %edx, %edx
callq 0x2190
testq %rax, %rax
je 0x34f1
movl $0x4, %ecx
movq %r15, %rdi
leaq 0x1674(%rip), %rsi      # 0x41c9
xorl %edx, %edx
callq 0x2190
testq %rax, %rax
je 0x354e
movl $0x4, %ecx
movq %r15, %rdi
leaq 0x165a(%rip), %rsi      # 0x41ce
xorl %edx, %edx
callq 0x2190
testq %rax, %rax
je 0x35ab
movl $0x5, %ecx
movq %r15, %rdi
leaq 0x1648(%rip), %rsi      # 0x41db
xorl %edx, %edx
callq 0x2190
testq %rax, %rax
je 0x35c3
movl $0x3, %ecx
movq %r15, %rdi
leaq 0x1636(%rip), %rsi      # 0x41e8
xorl %edx, %edx
callq 0x2190
testq %rax, %rax
je 0x3620
movl $0x3, %ecx
movq %r15, %rdi
leaq 0x1620(%rip), %rsi      # 0x41f1
xorl %edx, %edx
callq 0x2190
testq %rax, %rax
je 0x367d
movl $0x9, %ecx
movq %r15, %rdi
leaq 0x1605(%rip), %rsi      # 0x41f5
xorl %edx, %edx
callq 0x2190
testq %rax, %rax
je 0x3695
movl $0xe, %ecx
movq %r15, %rdi
leaq 0x160a(%rip), %rsi      # 0x4219
xorl %edx, %edx
callq 0x2190
testq %rax, %rax
je 0x372d
movl $0xd, %ecx
movq %r15, %rdi
leaq 0x15fa(%rip), %rsi      # 0x4228
xorl %edx, %edx
callq 0x2190
testq %rax, %rax
je 0x3763
movl $0xa, %edx
movq 0x3386(%rip), %rdi      # 0x5fd0
leaq 0x15e8(%rip), %rsi      # 0x4239
callq 0x2180
movq 0x3373(%rip), %rdi      # 0x5fd0
movl %r14d, %esi
callq 0x2220
movq %rax, %rbx
movl $0x1, %edx
movq %rax, %rdi
leaq 0x142c(%rip), %rsi      # 0x40a3
callq 0x2180
movq -0xc8(%rbp), %rsi
movq -0xc0(%rbp), %rdx
movq %rbx, %rdi
callq 0x2180
movb $0x1, %bl
movl $0x1, %edx
movq %rax, %rdi
leaq 0x1400(%rip), %rsi      # 0x40a3
callq 0x2180
jmp 0x3046
movl $0x7, %edx
leaq -0x340(%rbp), %rdi
leaq 0x13c1(%rip), %rsi      # 0x4081
callq 0x2180
movl $0x5, %edx
leaq -0x48(%rbp), %rdi
movq %r15, %rsi
movq $-0x1, %rcx
callq 0x2160
movq -0x48(%rbp), %rsi
movq -0x40(%rbp), %rdx
leaq -0x340(%rbp), %rdi
callq 0x2180
movl $0x11, %edx
movq %rax, %rdi
leaq 0x1389(%rip), %rsi      # 0x4089
callq 0x2180
jmp 0x3028
movl $0x7, %edx
leaq -0x340(%rbp), %rdi
leaq 0x1364(%rip), %rsi      # 0x4081
callq 0x2180
movl $0x4, %edx
leaq -0x48(%rbp), %rdi
movq %r15, %rsi
movq $-0x1, %rcx
callq 0x2160
movq -0x48(%rbp), %rsi
movq -0x40(%rbp), %rdx
leaq -0x340(%rbp), %rdi
callq 0x2180
movl $0x3, %edx
movq %rax, %rdi
leaq 0x133a(%rip), %rsi      # 0x4097
callq 0x2180
jmp 0x3028
movl $0x3, %ebx
cmpq $0x3, -0xc0(%rbp)
leaq -0x340(%rbp), %rdi
leaq 0x131f(%rip), %rsi      # 0x40a1
jb 0x2ded
movl $0x2, %edx
leaq 0x130e(%rip), %rsi      # 0x409e
callq 0x2180
movl $0x2, %edx
leaq -0x48(%rbp), %rdi
movq %r15, %rsi
movq $-0x1, %rcx
callq 0x2160
movq -0x48(%rbp), %rsi
movq -0x40(%rbp), %rdx
leaq -0x340(%rbp), %rdi
callq 0x2180
movl $0x1, %edx
movq %rax, %rdi
leaq 0x12d3(%rip), %rsi      # 0x40a3
callq 0x2180
jmp 0x3028
movl $0x11, %ebx
leaq -0x340(%rbp), %rdi
leaq 0x12c3(%rip), %rsi      # 0x40b0
movq %rbx, %rdx
callq 0x2180
jmp 0x3041
leaq -0x38(%rbp), %rax
movq %rax, -0x48(%rbp)
leaq -0x48(%rbp), %rdi
leaq 0x12cd(%rip), %rbx      # 0x40da
movq %rbx, %rsi
leaq 0x12c5(%rip), %rdx      # 0x40dc
callq 0x3c74
movq -0x60(%rbp), %rdi
addq $0x20, %rdi
leaq 0x1345(%rip), %rsi      # 0x4170
callq 0x2070
movq %rbx, %rcx
testl %eax, %eax
je 0x2e94
movq -0x60(%rbp), %rdi
addq $0x20, %rdi
leaq 0x1336(%rip), %rsi      # 0x417c
callq 0x2070
leaq 0x128b(%rip), %rcx      # 0x40dd
testl %eax, %eax
je 0x2e94
movq -0x60(%rbp), %rdi
addq $0x20, %rdi
leaq 0x1321(%rip), %rsi      # 0x4186
callq 0x2070
leaq 0x126c(%rip), %rcx      # 0x40dd
testl %eax, %eax
je 0x2e94
movq -0x60(%rbp), %rdi
addq $0x20, %rdi
leaq 0x1310(%rip), %rsi      # 0x4194
callq 0x2070
leaq 0x124d(%rip), %rcx      # 0x40dd
testl %eax, %eax
jne 0x2ea9
movq -0x40(%rbp), %rdx
movl $0x2, %r8d
leaq -0x48(%rbp), %rdi
xorl %esi, %esi
callq 0x21e0
movl $0x8, %edx
leaq -0x340(%rbp), %rdi
leaq 0x1224(%rip), %rsi      # 0x40e0
callq 0x2180
movq -0x48(%rbp), %rsi
movq -0x40(%rbp), %rdx
leaq -0x340(%rbp), %rdi
callq 0x2180
movq %rax, %rbx
movl $0x2, %edx
movq %rax, %rdi
leaq 0x1202(%rip), %rsi      # 0x40e9
callq 0x2180
movq -0x60(%rbp), %rax
movq 0x40(%rax), %rsi
movq 0x48(%rax), %rdx
movq %rbx, %rdi
callq 0x2180
movl $0x3, %edx
movq %rax, %rdi
leaq 0x1188(%rip), %rsi      # 0x4097
callq 0x2180
jmp 0x3028
movl $0xd, %edx
leaq -0x340(%rbp), %rdi
leaq 0x11c8(%rip), %rsi      # 0x40f4
callq 0x2180
movl $0x8, %edx
leaq -0x48(%rbp), %rdi
movq %r15, %rsi
movq $-0x1, %rcx
callq 0x2160
movq -0x48(%rbp), %rsi
movq -0x40(%rbp), %rdx
leaq -0x340(%rbp), %rdi
callq 0x2180
movl $0x3, %edx
movq %rax, %rdi
leaq 0x112b(%rip), %rsi      # 0x4097
callq 0x2180
jmp 0x3028
movl $0xd, %edx
leaq -0x340(%rbp), %rdi
leaq 0x1181(%rip), %rsi      # 0x410a
callq 0x2180
movl $0x8, %edx
leaq -0x48(%rbp), %rdi
movq %r15, %rsi
movq $-0x1, %rcx
callq 0x2160
movq -0x48(%rbp), %rsi
movq -0x40(%rbp), %rdx
leaq -0x340(%rbp), %rdi
callq 0x2180
movl $0x3, %edx
movq %rax, %rdi
leaq 0x10ce(%rip), %rsi      # 0x4097
callq 0x2180
jmp 0x3028
movl $0xd, %edx
leaq -0x340(%rbp), %rdi
leaq 0x113f(%rip), %rsi      # 0x4122
callq 0x2180
movl $0x9, %edx
leaq -0x48(%rbp), %rdi
movq %r15, %rsi
movq $-0x1, %rcx
callq 0x2160
movq -0x48(%rbp), %rsi
movq -0x40(%rbp), %rdx
leaq -0x340(%rbp), %rdi
callq 0x2180
movl $0x3, %edx
movq %rax, %rdi
leaq 0x1074(%rip), %rsi      # 0x4097
callq 0x2180
movq -0x48(%rbp), %rdi
leaq -0x38(%rbp), %rax
cmpq %rax, %rdi
je 0x3041
movq -0x38(%rbp), %rsi
incq %rsi
callq 0x2150
incl %r14d
xorl %ebx, %ebx
leaq -0x60(%rbp), %rdi
callq 0x3b62
movq -0xc8(%rbp), %rdi
leaq -0xb8(%rbp), %rax
cmpq %rax, %rdi
je 0x3071
movq -0xb8(%rbp), %rsi
incq %rsi
callq 0x2150
addq $0x20, %r12
cmpq %r13, %r12
sete %al
orb %al, %bl
je 0x2814
jmp 0x3851
movq -0x60(%rbp), %rax
movq 0x20(%rax), %rsi
movq 0x28(%rax), %rdx
leaq -0x340(%rbp), %rdi
callq 0x2180
movq %rax, %rbx
movl $0x1, %edx
movq %rax, %rdi
leaq 0x1165(%rip), %rsi      # 0x4217
callq 0x2180
movq -0x60(%rbp), %rax
movq 0x40(%rax), %rsi
movq 0x48(%rax), %rdx
movq %rbx, %rdi
callq 0x2180
movq %rax, %rdi
movl $0x5, %ebx
leaq 0x105f(%rip), %rsi      # 0x4139
jmp 0x2ded
movq -0x60(%rbp), %rax
movq 0x20(%rax), %rsi
movq 0x28(%rax), %rdx
leaq -0x340(%rbp), %rdi
callq 0x2180
movq %rax, %rbx
movl $0x1, %edx
movq %rax, %rdi
leaq 0x110e(%rip), %rsi      # 0x4217
callq 0x2180
movq -0x60(%rbp), %rax
movq 0x40(%rax), %rsi
movq 0x48(%rax), %rdx
movq %rbx, %rdi
callq 0x2180
movq %rax, %rdi
movl $0x2, %ebx
leaq 0x1016(%rip), %rsi      # 0x4147
jmp 0x2ded
movq -0x60(%rbp), %rax
movq 0x20(%rax), %rsi
movq 0x28(%rax), %rdx
leaq -0x340(%rbp), %rdi
callq 0x2180
movq %rax, %rbx
movl $0x1, %edx
movq %rax, %rdi
leaq 0x10b7(%rip), %rsi      # 0x4217
callq 0x2180
movq -0x60(%rbp), %rax
movq 0x40(%rax), %rsi
movq 0x48(%rax), %rdx
movq %rbx, %rdi
callq 0x2180
movq %rax, %rdi
movl $0x1, %ebx
leaq 0xf62(%rip), %rsi       # 0x40ea
jmp 0x2ded
movq -0x60(%rbp), %rax
movq 0x20(%rax), %rsi
movq 0x28(%rax), %rdx
leaq -0x340(%rbp), %rdi
callq 0x2180
movq %rax, %rbx
movl $0x1, %edx
movq %rax, %rdi
leaq 0x1060(%rip), %rsi      # 0x4217
callq 0x2180
movq -0x60(%rbp), %rax
movq 0x40(%rax), %rsi
movq 0x48(%rax), %rdx
movq %rbx, %rdi
callq 0x2180
movq %rax, %rdi
movl $0x3, %ebx
leaq 0xe99(%rip), %rsi       # 0x4078
jmp 0x2ded
movq -0x60(%rbp), %rax
movq 0x20(%rax), %rsi
movq 0x28(%rax), %rdx
leaq -0x340(%rbp), %rdi
callq 0x2180
movq %rax, %rbx
movl $0x1, %edx
movq %rax, %rdi
leaq 0xf3a(%rip), %rsi       # 0x4148
callq 0x2180
movq -0x60(%rbp), %rax
movq 0x8(%rax), %rcx
movq 0x28(%rax), %rax
leaq (%rcx,%rax), %rdx
addq $0x2, %rdx
leaq -0x48(%rbp), %rdi
movq %r15, %rsi
movq $-0x1, %rcx
callq 0x2160
movq -0x48(%rbp), %rsi
movq -0x40(%rbp), %rdx
movq %rbx, %rdi
callq 0x2180
movl $0x3, %edx
movq %rax, %rdi
leaq 0xe3e(%rip), %rsi       # 0x4097
callq 0x2180
jmp 0x3028
movq -0x60(%rbp), %rax
movq 0x20(%rax), %rsi
movq 0x28(%rax), %rdx
leaq -0x340(%rbp), %rdi
callq 0x2180
movq %rax, %rdi
movl $0x4, %ebx
leaq 0xee0(%rip), %rsi       # 0x416a
jmp 0x2ded
movl $0x6, %edx
leaq -0x340(%rbp), %rdi
leaq 0xed2(%rip), %rsi       # 0x4174
callq 0x2180
movl $0x5, %edx
leaq -0x48(%rbp), %rdi
movq %r15, %rsi
movq $-0x1, %rcx
callq 0x2160
movq -0x48(%rbp), %rsi
movq -0x40(%rbp), %rdx
leaq -0x340(%rbp), %rdi
callq 0x2180
movl $0x2, %edx
movq %rax, %rdi
leaq 0xdb6(%rip), %rsi       # 0x4098
callq 0x2180
jmp 0x3028
movl $0x4, %edx
leaq -0x340(%rbp), %rdi
leaq 0xe81(%rip), %rsi       # 0x4180
callq 0x2180
movl $0x5, %edx
leaq -0x48(%rbp), %rdi
movq %r15, %rsi
movq $-0x1, %rcx
callq 0x2160
movq -0x48(%rbp), %rsi
movq -0x40(%rbp), %rdx
leaq -0x340(%rbp), %rdi
callq 0x2180
movl $0x2, %edx
movq %rax, %rdi
leaq 0xd59(%rip), %rsi       # 0x4098
callq 0x2180
jmp 0x3028
movl $0x6, %edx
leaq -0x340(%rbp), %rdi
leaq 0xe30(%rip), %rsi       # 0x418c
callq 0x2180
movl $0x7, %edx
leaq -0x48(%rbp), %rdi
movq %r15, %rsi
movq $-0x1, %rcx
callq 0x2160
movq -0x48(%rbp), %rsi
movq -0x40(%rbp), %rdx
leaq -0x340(%rbp), %rdi
callq 0x2180
movl $0x2, %edx
movq %rax, %rdi
leaq 0xcfc(%rip), %rsi       # 0x4098
callq 0x2180
jmp 0x3028
movl $0x7, %edx
leaq -0x340(%rbp), %rdi
leaq 0xde2(%rip), %rsi       # 0x419b
callq 0x2180
movl $0x8, %edx
leaq -0x48(%rbp), %rdi
movq %r15, %rsi
movq $-0x1, %rcx
callq 0x2160
movq -0x48(%rbp), %rsi
movq -0x40(%rbp), %rdx
leaq -0x340(%rbp), %rdi
callq 0x2180
movl $0x2, %edx
movq %rax, %rdi
leaq 0xc9f(%rip), %rsi       # 0x4098
callq 0x2180
jmp 0x3028
movq -0x60(%rbp), %rax
movq 0x20(%rax), %rsi
movq 0x28(%rax), %rdx
leaq -0x340(%rbp), %rdi
callq 0x2180
movq %rax, %rbx
movl $0x3, %edx
movq %rax, %rdi
leaq 0xd80(%rip), %rsi       # 0x41ad
callq 0x2180
movq -0x60(%rbp), %rax
movq 0x8(%rax), %rcx
movq 0x28(%rax), %rax
leaq (%rcx,%rax), %rdx
incq %rdx
leaq -0x48(%rbp), %rdi
movq %r15, %rsi
movq $-0x1, %rcx
callq 0x2160
movq -0x48(%rbp), %rsi
movq -0x40(%rbp), %rdx
movq %rbx, %rdi
callq 0x2180
movl $0x2, %edx
movq %rax, %rdi
leaq 0xc21(%rip), %rsi       # 0x4098
callq 0x2180
jmp 0x3028
leaq -0x340(%rbp), %rdi
leaq 0xd26(%rip), %rsi       # 0x41b5
jmp 0x2ded
movl $0x3, %edx
leaq -0x340(%rbp), %rdi
leaq 0xd1e(%rip), %rsi       # 0x41c5
callq 0x2180
movl $0x3, %edx
leaq -0x48(%rbp), %rdi
movq %r15, %rsi
movq $-0x1, %rcx
callq 0x2160
movq -0x48(%rbp), %rsi
movq -0x40(%rbp), %rdx
leaq -0x340(%rbp), %rdi
callq 0x2180
movl $0x3, %edx
movq %rax, %rdi
leaq 0xb91(%rip), %rsi       # 0x4078
callq 0x2180
jmp 0x3028
movl $0x8, %edx
leaq -0x340(%rbp), %rdi
leaq 0xcbc(%rip), %rsi       # 0x41c0
callq 0x2180
movl $0x8, %edx
leaq -0x48(%rbp), %rdi
movq %r15, %rsi
movq $-0x1, %rcx
callq 0x2160
movq -0x48(%rbp), %rsi
movq -0x40(%rbp), %rdx
leaq -0x340(%rbp), %rdi
callq 0x2180
movl $0x3, %edx
movq %rax, %rdi
leaq 0xb34(%rip), %rsi       # 0x4078
callq 0x2180
jmp 0x3028
movl $0x8, %edx
leaq -0x340(%rbp), %rdi
leaq 0xc5f(%rip), %rsi       # 0x41c0
callq 0x2180
movl $0x5, %edx
leaq -0x48(%rbp), %rdi
movq %r15, %rsi
movq $-0x1, %rcx
callq 0x2160
movq -0x48(%rbp), %rsi
movq -0x40(%rbp), %rdx
leaq -0x340(%rbp), %rdi
callq 0x2180
movl $0x3, %edx
movq %rax, %rdi
leaq 0xad7(%rip), %rsi       # 0x4078
callq 0x2180
jmp 0x3028
movl $0x7, %ebx
leaq -0x340(%rbp), %rdi
leaq 0xc15(%rip), %rsi       # 0x41d3
jmp 0x2ded
movl $0x6, %edx
leaq -0x340(%rbp), %rdi
leaq 0xc0b(%rip), %rsi       # 0x41e1
callq 0x2180
movl $0x6, %edx
leaq -0x48(%rbp), %rdi
movq %r15, %rsi
movq $-0x1, %rcx
callq 0x2160
movq -0x48(%rbp), %rsi
movq -0x40(%rbp), %rdx
leaq -0x340(%rbp), %rdi
callq 0x2180
movl $0x3, %edx
movq %rax, %rdi
leaq 0xa62(%rip), %rsi       # 0x4078
callq 0x2180
jmp 0x3028
movl $0x4, %edx
leaq -0x340(%rbp), %rdi
leaq 0xbb9(%rip), %rsi       # 0x41ec
callq 0x2180
movl $0x4, %edx
leaq -0x48(%rbp), %rdi
movq %r15, %rsi
movq $-0x1, %rcx
callq 0x2160
movq -0x48(%rbp), %rsi
movq -0x40(%rbp), %rdx
leaq -0x340(%rbp), %rdi
callq 0x2180
movl $0x3, %edx
movq %rax, %rdi
leaq 0xa05(%rip), %rsi       # 0x4078
callq 0x2180
jmp 0x3028
movl $0xe, %ebx
leaq -0x340(%rbp), %rdi
leaq 0x9fc(%rip), %rsi       # 0x408c
jmp 0x2ded
movq -0x60(%rbp), %rdi
addq $0x20, %rdi
leaq 0xacc(%rip), %rsi       # 0x4170
callq 0x2070
testl %eax, %eax
je 0x37c0
movq -0x60(%rbp), %rdi
addq $0x20, %rdi
leaq 0xac6(%rip), %rsi       # 0x4186
callq 0x2070
testl %eax, %eax
je 0x37e5
movq -0x60(%rbp), %rdi
addq $0x20, %rdi
leaq 0xab8(%rip), %rsi       # 0x4194
callq 0x2070
testl %eax, %eax
je 0x380a
movq -0x60(%rbp), %rdi
addq $0x20, %rdi
leaq 0xa84(%rip), %rsi       # 0x417c
callq 0x2070
testl %eax, %eax
jne 0x3041
movl $0x4, %edx
leaq -0x340(%rbp), %rdi
leaq 0xa68(%rip), %rsi       # 0x4180
callq 0x2180
leaq -0x340(%rbp), %rax
movq %rax, -0x68(%rbp)
jmp 0x382d
movq -0x60(%rbp), %rax
movq 0x20(%rax), %rsi
movq 0x28(%rax), %rdx
leaq -0x340(%rbp), %rdi
callq 0x2180
movq %rax, -0x68(%rbp)
movl $0x1, %edx
movq -0x68(%rbp), %rdi
leaq 0xabe(%rip), %rsi       # 0x4217
callq 0x2180
jmp 0x382d
movl $0x2, %edx
leaq -0x340(%rbp), %rdi
leaq 0xac0(%rip), %rsi       # 0x4236
callq 0x2180
movq -0x60(%rbp), %rax
movq 0x20(%rax), %rsi
movq 0x28(%rax), %rdx
leaq -0x340(%rbp), %rdi
callq 0x2180
movl $0x2, %edx
movq %rax, %rdi
leaq 0x8f6(%rip), %rsi       # 0x4098
callq 0x2180
movq -0x60(%rbp), %rsi
addq $0x20, %rsi
leaq -0x140(%rbp), %rdi
callq 0x3b16
jmp 0x3041
movl $0x7, %edx
leaq -0x340(%rbp), %rdi
leaq 0xa2c(%rip), %rsi       # 0x41ff
callq 0x2180
leaq -0x340(%rbp), %rax
movq %rax, -0x68(%rbp)
jmp 0x382d
movl $0x7, %edx
leaq -0x340(%rbp), %rdi
leaq 0xa0f(%rip), %rsi       # 0x4207
callq 0x2180
leaq -0x340(%rbp), %rax
movq %rax, -0x68(%rbp)
jmp 0x382d
movl $0x9, %edx
leaq -0x340(%rbp), %rdi
leaq 0x9f2(%rip), %rsi       # 0x420f
callq 0x2180
leaq -0x340(%rbp), %rax
movq %rax, -0x68(%rbp)
movq -0x60(%rbp), %rax
movq 0x40(%rax), %rsi
movq 0x48(%rax), %rdx
movq -0x68(%rbp), %rdi
callq 0x2180
movq %rax, %rdi
leaq 0x84c(%rip), %rsi       # 0x4098
jmp 0x2ded
leaq 0x9ec(%rip), %rsi       # 0x4244
leaq -0x340(%rbp), %rdi
movl $0xb, %edx
callq 0x2180
leaq -0x340(%rbp), %rdi
callq 0x21a0
movq 0x274c(%rip), %rax      # 0x5fc8
movq (%rax), %rcx
movq 0x18(%rax), %rax
leaq -0x338(%rbp), %rdi
movq %rcx, -0x8(%rdi)
movq -0x18(%rcx), %rcx
movq %rax, -0x340(%rbp,%rcx)
callq 0x2110
leaq -0x248(%rbp), %rdi
callq 0x2080
leaq -0x140(%rbp), %rdi
callq 0x3b62
leaq -0x548(%rbp), %rdi
callq 0x2050
movq -0xa8(%rbp), %rdi
leaq -0x98(%rbp), %rax
cmpq %rax, %rdi
leaq -0x78(%rbp), %rbx
je 0x38e9
movq -0x98(%rbp), %rsi
incq %rsi
callq 0x2150
leaq -0xe0(%rbp), %rdi
callq 0x3b62
movq -0x88(%rbp), %rdi
cmpq %rbx, %rdi
je 0x390d
movq -0x78(%rbp), %rsi
incq %rsi
callq 0x2150
xorl %eax, %eax
addq $0x528, %rsp            # imm = 0x528
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0x3a12
jmp 0x3a61
jmp 0x3a12
jmp 0x3a61
jmp 0x3a12
jmp 0x3a61
jmp 0x3a12
jmp 0x3a61
jmp 0x3a61
jmp 0x3a12
jmp 0x3a61
jmp 0x3a61
jmp 0x3a12
jmp 0x3a61
jmp 0x3a12
jmp 0x3a61
jmp 0x3a12
jmp 0x3a61
jmp 0x3a12
jmp 0x3a12
jmp 0x3a61
jmp 0x3a12
jmp 0x3a61
jmp 0x3a61
jmp 0x3a12
jmp 0x3a61
jmp 0x3a12
jmp 0x3aa8
jmp 0x3aa8
movq %rax, %rbx
leaq -0x78(%rbp), %r14
leaq -0x98(%rbp), %r15
jmp 0x3ace
jmp 0x3a61
jmp 0x3a12
jmp 0x3a61
jmp 0x3a30
jmp 0x3a12
jmp 0x3a30
jmp 0x3a61
jmp 0x3a12
movq %rax, %rbx
jmp 0x3af5
jmp 0x3a61
jmp 0x3a12
movq %rax, %rbx
movq -0x120(%rbp), %rdi
leaq -0x110(%rbp), %rax
cmpq %rax, %rdi
je 0x3aab
movq -0x110(%rbp), %rsi
incq %rsi
callq 0x2150
jmp 0x3aab
movq %rax, %rbx
movq -0x48(%rbp), %rdi
leaq -0x38(%rbp), %rax
cmpq %rax, %rdi
je 0x3a64
movq -0x38(%rbp), %rsi
incq %rsi
callq 0x2150
jmp 0x3a64
movq %rax, %rbx
jmp 0x3a8f
movq %rax, %rbx
jmp 0x3a6d
movq %rax, %rbx
movq -0x100(%rbp), %rdi
leaq -0xf0(%rbp), %rax
cmpq %rax, %rdi
je 0x3a6d
movq -0xf0(%rbp), %rsi
incq %rsi
callq 0x2150
jmp 0x3a6d
movq %rax, %rbx
leaq -0x60(%rbp), %rdi
callq 0x3b62
movq -0xc8(%rbp), %rdi
leaq -0xb8(%rbp), %rax
cmpq %rax, %rdi
je 0x3a8f
movq -0xb8(%rbp), %rsi
incq %rsi
callq 0x2150
leaq -0x78(%rbp), %r14
leaq -0x98(%rbp), %r15
leaq -0x340(%rbp), %rdi
callq 0x21c0
jmp 0x3ab6
movq %rax, %rbx
leaq -0x78(%rbp), %r14
leaq -0x98(%rbp), %r15
leaq -0x140(%rbp), %rdi
callq 0x3b62
leaq -0x548(%rbp), %rdi
callq 0x2050
movq -0xa8(%rbp), %rdi
cmpq %r15, %rdi
je 0x3ae9
movq -0x98(%rbp), %rsi
incq %rsi
callq 0x2150
leaq -0xe0(%rbp), %rdi
callq 0x3b62
movq -0x88(%rbp), %rdi
cmpq %r14, %rdi
je 0x3b0d
movq -0x78(%rbp), %rsi
incq %rsi
callq 0x2150
movq %rbx, %rdi
callq 0x2230
nop