// File: martinda3[P]Compiler/src/tc.cpp
// Function: processCommandLine(int, char**, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>)
void processCommandLine(int argc, char *argv[], string filename) {
    string toycFile, outputFileName, javaClass;

    try {
        toycFile = argv[2];

        /* Verify we are using the correct file type*/
        std::size_t found = toycFile.find(".tc");
        if (found == std::string::npos) {
            cerr << "ERROR: Invalid File Type: filename\"" << toycFile
                      << "\""<< endl;
            exit(EXIT_FAILURE);
        }

        /* Generate Output path + file */
        outputFileName = toycFile.substr(0, found + 1) + "j";

        /* Generate Class file */
        /* Check if file is local */
        found = toycFile.find_last_of("/");
        if (found != std::string::npos) {
            /* Path + File */
            javaClass = toycFile.substr(found + 1, (toycFile.find(".tc") - found) - 1);
        } else {
            /* Local File */
            javaClass = toycFile.substr(0, toycFile.find(".tc"));
        }
        cout << "Class: " << javaClass << endl;

        outputClassFileName = javaClass;
    }
    catch (...) {}
    switch (argc) {
        case 1:
            printUsageMessage();
            break;
        case 3:
            inputFileName = argv[2];
            targetFileName = outputFileName;
            if (argv[1][0] == '-' && argv[1][1] == 's') {
                turnVerboseOn();
                turnScannerOn();
                if (argv[1][2] == '0') // add more robust debugging
                {
                    turnVerboseOff();
                    turnScannerOff();
                    turnScannerOff();
                    turnCodeGenOff();
                }
                TCfile *test1;
                test1 = new TCfile(inputFileName, targetFileName, inputFileHandler(inputFileName));
                cout << test1->getFileInfo();
                TClexer *scanner = new TClexer(inputFileName);
                int tok;
                while ((tok = scanner->getToken()->getTokenType()) != EOFILE);
            } else if (argv[1][0] == '-' && argv[1][1] == 'c') {
                turnVerboseOn();
                turnParserOn();
                turnScannerOn();
                turnCodeGenOn();
                if (argv[1][2] == '0') {
                    turnVerboseOff();
                    turnScannerOff();
                    turnScannerOff();
                    turnCodeGenOff();
                }
                TClexer *scanner;
                TCparser *parser;
                ASabstractSyntax *ast;
                CGcodeGenerator *cg;
                CGtargetCode *tc;
                TCfile *test1;
                test1 = new TCfile(inputFileName, targetFileName, inputFileHandler(inputFileName));
                cout << test1->getFileInfo();
                try { scanner = new TClexer(inputFileName); }
                catch (...) {
                    cerr << "ERROR: TClexer" << endl;
                    exit(EXIT_FAILURE);
                }

                try { parser = new TCparser(scanner); }
                catch (...) {
                    cerr << "ERROR: TCparser" << endl;
                    exit(EXIT_FAILURE);
                }

                try { ast = parser->parse(); }
                catch (...) {
                    cerr << "ERROR: ASabstractSyntax" << endl;
                    exit(EXIT_FAILURE);
                }

                try { cg = new JVMcodeGenerator(); }
                catch (...) {
                    cerr << "ERROR: CGcodeGenerator" << endl;
                    exit(EXIT_FAILURE);
                }

                try { tc = cg->generateCode(ast); }
                catch (...) {
                    cerr << "ERROR: CGtargetCode" << endl;
                    exit(EXIT_FAILURE);
                }

                try { tc->writeCode(tc, targetFileName); }
                catch (...) {
                    cerr << "ERROR: writeCode" << endl;
                    exit(EXIT_FAILURE);
                }

                if (v_code_gen) {
                    dumpAST(ast);
                    dumpST(symTable);
                    dumpCode(tc);
                }
            } else if (argv[1][0] == '-' && argv[1][1] == 'p') {
                turnVerboseOn();
                turnParserOn();
                turnScannerOn();
                if (argv[1][2] == '0') {
                    turnVerboseOff();
                    turnScannerOff();
                    turnScannerOff();
                    turnCodeGenOff();
                }
                TCfile *test1;
                test1 = new TCfile(inputFileName, targetFileName, inputFileHandler(inputFileName));
                cout << test1->getFileInfo();
                TClexer *scanner;
                try { scanner = new TClexer(inputFileName); }
                catch (...) {
                    cerr << "ERROR: TClexer" << endl;
                    exit(EXIT_FAILURE);
                }
                int tok;
                while ((tok = scanner->getToken()->getTokenType()) != EOFILE);
            } else if (argv[1][0] == '-' && argv[1][1] == 'a') {
                turnVerboseOn();
               // turnParserOn();
                //turnScannerOn();
                turnCodeGenOn();
                if (argv[1][2] == '0') {
                    turnVerboseOff();
                    turnScannerOff();
                    turnScannerOff();
                    turnCodeGenOff();
                }
                TCfile *test1;
                test1 = new TCfile(inputFileName, targetFileName, inputFileHandler(inputFileName));
                cout << test1->getFileInfo();
                TClexer *scanner;
                TCparser *parser;
                ASabstractSyntax *ast;
                try { scanner = new TClexer(inputFileName); }
                catch (...) {
                    cerr << "ERROR: TClexer" << endl;
                    exit(EXIT_FAILURE);
                }

                try { parser = new TCparser(scanner); }
                catch (...) {
                    cerr << "ERROR: TCparser" << endl;
                    exit(EXIT_FAILURE);
                }

                try { ast = parser->parse(); }
                catch (...) {
                    cerr << "ERROR: ASabstractSyntax" << endl;
                    exit(EXIT_FAILURE);
                }

                if (v_code_gen) {
                    dumpAST(ast);
                    dumpST(symTable);
                }
            } else {
                cout << inputFileHandler(inputFileName);
            }
            break;
        default:
            printUsageMessage();
            break;
    }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x5f0, %rsp            # imm = 0x5F0
movl %edi, -0x4(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
leaq -0x38(%rbp), %rdi
movq %rdi, -0x488(%rbp)
callq 0x9480
leaq -0x58(%rbp), %rdi
callq 0x9480
leaq -0x78(%rbp), %rdi
callq 0x9480
movq -0x488(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rsi
callq 0x9470
jmp 0x2ed3e
leaq -0x38(%rbp), %rdi
leaq 0x603a(%rip), %rsi      # 0x34d83
xorl %eax, %eax
movl %eax, %edx
callq 0x9630
movq %rax, -0x90(%rbp)
cmpq $-0x1, -0x90(%rbp)
jne 0x2edeb
movq 0x16282(%rip), %rdi     # 0x44ff0
leaq 0x6012(%rip), %rsi      # 0x34d87
callq 0x9340
movq %rax, -0x490(%rbp)
jmp 0x2ed83
movq -0x490(%rbp), %rdi
leaq -0x38(%rbp), %rsi
callq 0x92f0
movq %rax, -0x498(%rbp)
jmp 0x2ed9c
movq -0x498(%rbp), %rdi
leaq 0x4a86(%rip), %rsi      # 0x33830
callq 0x9340
movq %rax, -0x4a0(%rbp)
jmp 0x2edb8
movq -0x4a0(%rbp), %rdi
movq 0x161ea(%rip), %rsi     # 0x44fb0
callq 0x9380
jmp 0x2edcd
movl $0x1, %edi
callq 0x9410
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0x2ef0c
movq -0x90(%rbp), %rcx
incq %rcx
xorl %eax, %eax
movl %eax, %edx
leaq -0xd0(%rbp), %rdi
leaq -0x38(%rbp), %rsi
callq 0x9370
jmp 0x2ee0b
leaq 0x4f38(%rip), %rdx      # 0x33d4a
leaq -0xb0(%rbp), %rdi
leaq -0xd0(%rbp), %rsi
callq 0xcc00
jmp 0x2ee27
leaq -0x58(%rbp), %rdi
leaq -0xb0(%rbp), %rsi
callq 0x9420
leaq -0xb0(%rbp), %rdi
callq 0x9658
leaq -0xd0(%rbp), %rdi
callq 0x9658
leaq -0x38(%rbp), %rdi
leaq 0x4a13(%rip), %rsi      # 0x3386d
movq $-0x1, %rdx
callq 0x9320
movq %rax, -0x90(%rbp)
cmpq $-0x1, -0x90(%rbp)
je 0x2ef46
movq -0x90(%rbp), %rax
incq %rax
movq %rax, -0x4a8(%rbp)
leaq 0x5ef0(%rip), %rsi      # 0x34d83
xorl %eax, %eax
movl %eax, %edx
leaq -0x38(%rbp), %rdi
movq %rdi, -0x4b0(%rbp)
callq 0x9630
movq -0x4b0(%rbp), %rsi
movq -0x4a8(%rbp), %rdx
movq -0x90(%rbp), %rcx
notq %rcx
addq %rax, %rcx
leaq -0xf0(%rbp), %rdi
callq 0x9370
jmp 0x2eed0
leaq -0x78(%rbp), %rdi
leaq -0xf0(%rbp), %rsi
callq 0x9420
leaq -0xf0(%rbp), %rdi
callq 0x9658
jmp 0x2efa3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
leaq -0xd0(%rbp), %rdi
callq 0x9658
movq -0x80(%rbp), %rdi
callq 0x9140
callq 0x9540
jmp 0x2ef1c
jmp 0x2ef1e
movl -0x4(%rbp), %eax
movl %eax, -0x4b4(%rbp)
subl $0x1, %eax
je 0x2f018
jmp 0x2ef32
movl -0x4b4(%rbp), %eax
subl $0x3, %eax
je 0x2f024
jmp 0x30315
leaq 0x5e36(%rip), %rsi      # 0x34d83
xorl %eax, %eax
movl %eax, %edx
movq %rdx, -0x4c0(%rbp)
leaq -0x38(%rbp), %rdi
movq %rdi, -0x4c8(%rbp)
callq 0x9630
movq -0x4c8(%rbp), %rsi
movq -0x4c0(%rbp), %rdx
movq %rax, %rcx
leaq -0x110(%rbp), %rdi
callq 0x9370
jmp 0x2ef87
leaq -0x78(%rbp), %rdi
leaq -0x110(%rbp), %rsi
callq 0x9420
leaq -0x110(%rbp), %rdi
callq 0x9658
movq 0x1601e(%rip), %rdi     # 0x44fc8
leaq 0x5dfa(%rip), %rsi      # 0x34dab
callq 0x9340
movq %rax, -0x4d0(%rbp)
jmp 0x2efbf
movq -0x4d0(%rbp), %rdi
leaq -0x78(%rbp), %rsi
callq 0x92f0
movq %rax, -0x4d8(%rbp)
jmp 0x2efd8
movq -0x4d8(%rbp), %rdi
movq 0x15fca(%rip), %rsi     # 0x44fb0
callq 0x9380
jmp 0x2efed
leaq 0x1660c(%rip), %rdi     # 0x45600
leaq -0x78(%rbp), %rsi
callq 0x9050
jmp 0x2efff
jmp 0x2ef1e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0x30342
callq 0x30370
jmp 0x2f01f
jmp 0x3031e
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rsi
leaq 0x165ad(%rip), %rdi     # 0x455e0
callq 0x9470
jmp 0x2f03a
leaq 0x165df(%rip), %rdi     # 0x45620
leaq -0x58(%rbp), %rsi
callq 0x9050
jmp 0x2f04c
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
movsbl (%rax), %eax
cmpl $0x2d, %eax
jne 0x2f34e
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
movsbl 0x1(%rax), %eax
cmpl $0x73, %eax
jne 0x2f34e
callq 0x1e9c0
jmp 0x2f07c
callq 0x1e9e0
jmp 0x2f083
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
movsbl 0x2(%rax), %eax
cmpl $0x30, %eax
jne 0x2f0b2
callq 0x1e9d0
jmp 0x2f09b
callq 0x1e9f0
jmp 0x2f0a2
callq 0x1e9f0
jmp 0x2f0a9
callq 0x1ea30
jmp 0x2f0b0
jmp 0x2f0b2
movl $0x48, %edi
callq 0x9350
movq %rax, -0x4e0(%rbp)
jmp 0x2f0c5
movb $0x1, -0x179(%rbp)
leaq 0x1650d(%rip), %rsi     # 0x455e0
leaq -0x138(%rbp), %rdi
callq 0x9170
jmp 0x2f0e1
leaq 0x16538(%rip), %rsi     # 0x45620
leaq -0x158(%rbp), %rdi
callq 0x9170
jmp 0x2f0f6
leaq 0x164e3(%rip), %rsi     # 0x455e0
leaq -0x178(%rbp), %rdi
callq 0x9170
jmp 0x2f10b
leaq -0x178(%rbp), %rdi
callq 0x30420
movl %eax, -0x4e4(%rbp)
jmp 0x2f11f
movl -0x4e4(%rbp), %ecx
movq -0x4e0(%rbp), %rdi
leaq -0x138(%rbp), %rsi
leaq -0x158(%rbp), %rdx
callq 0x1d880
jmp 0x2f141
movq -0x4e0(%rbp), %rax
movb $0x0, -0x179(%rbp)
movq %rax, -0x118(%rbp)
leaq -0x178(%rbp), %rdi
callq 0x9658
leaq -0x158(%rbp), %rdi
callq 0x9658
leaq -0x138(%rbp), %rdi
callq 0x9658
movq -0x118(%rbp), %rsi
leaq -0x1a0(%rbp), %rdi
callq 0x1d920
jmp 0x2f18f
movq 0x15e32(%rip), %rdi     # 0x44fc8
leaq -0x1a0(%rbp), %rsi
callq 0x92f0
jmp 0x2f1a4
leaq -0x1a0(%rbp), %rdi
callq 0x9658
movl $0x1, %edi
callq 0x9350
movq %rax, -0x4f0(%rbp)
jmp 0x2f1c3
movb $0x1, -0x1c9(%rbp)
leaq 0x1640f(%rip), %rsi     # 0x455e0
leaq -0x1c8(%rbp), %rdi
callq 0x9170
jmp 0x2f1df
movq -0x4f0(%rbp), %rdi
leaq -0x1c8(%rbp), %rsi
callq 0x14470
jmp 0x2f1f4
movb $0x0, -0x1c9(%rbp)
leaq -0x1c8(%rbp), %rdi
callq 0x9658
movq -0x4f0(%rbp), %rax
movq %rax, -0x1a8(%rbp)
movq -0x1a8(%rbp), %rdi
callq 0x14a60
movq %rax, -0x4f8(%rbp)
jmp 0x2f22a
movq -0x4f8(%rbp), %rdi
callq 0x1be60
movl %eax, -0x4fc(%rbp)
jmp 0x2f23e
movl -0x4fc(%rbp), %eax
movl %eax, -0x1d0(%rbp)
cmpl $0x2d, %eax
je 0x2f349
jmp 0x2f215
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0x2f2bb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0x2f2af
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0x2f2a3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
leaq -0x178(%rbp), %rdi
callq 0x9658
leaq -0x158(%rbp), %rdi
callq 0x9658
leaq -0x138(%rbp), %rdi
callq 0x9658
testb $0x1, -0x179(%rbp)
jne 0x2f2c6
jmp 0x2f2d7
movq -0x4e0(%rbp), %rdi
movl $0x48, %esi
callq 0x9360
jmp 0x30342
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
leaq -0x1a0(%rbp), %rdi
callq 0x9658
jmp 0x30342
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0x2f328
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
leaq -0x1c8(%rbp), %rdi
callq 0x9658
testb $0x1, -0x1c9(%rbp)
jne 0x2f333
jmp 0x2f344
movq -0x4f0(%rbp), %rdi
movl $0x1, %esi
callq 0x9360
jmp 0x30342
jmp 0x30313
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
movsbl (%rax), %eax
cmpl $0x2d, %eax
jne 0x2fa70
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
movsbl 0x1(%rax), %eax
cmpl $0x63, %eax
jne 0x2fa70
callq 0x1e9c0
jmp 0x2f37e
callq 0x1ea00
jmp 0x2f385
callq 0x1e9e0
jmp 0x2f38c
callq 0x1ea20
jmp 0x2f393
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
movsbl 0x2(%rax), %eax
cmpl $0x30, %eax
jne 0x2f3c2
callq 0x1e9d0
jmp 0x2f3ab
callq 0x1e9f0
jmp 0x2f3b2
callq 0x1e9f0
jmp 0x2f3b9
callq 0x1ea30
jmp 0x2f3c0
jmp 0x2f3c2
movl $0x48, %edi
callq 0x9350
movq %rax, -0x508(%rbp)
jmp 0x2f3d5
movb $0x1, -0x261(%rbp)
leaq 0x161fd(%rip), %rsi     # 0x455e0
leaq -0x220(%rbp), %rdi
callq 0x9170
jmp 0x2f3f1
leaq 0x16228(%rip), %rsi     # 0x45620
leaq -0x240(%rbp), %rdi
callq 0x9170
jmp 0x2f406
leaq 0x161d3(%rip), %rsi     # 0x455e0
leaq -0x260(%rbp), %rdi
callq 0x9170
jmp 0x2f41b
leaq -0x260(%rbp), %rdi
callq 0x30420
movl %eax, -0x50c(%rbp)
jmp 0x2f42f
movl -0x50c(%rbp), %ecx
movq -0x508(%rbp), %rdi
leaq -0x220(%rbp), %rsi
leaq -0x240(%rbp), %rdx
callq 0x1d880
jmp 0x2f451
movq -0x508(%rbp), %rax
movb $0x0, -0x261(%rbp)
movq %rax, -0x200(%rbp)
leaq -0x260(%rbp), %rdi
callq 0x9658
leaq -0x240(%rbp), %rdi
callq 0x9658
leaq -0x220(%rbp), %rdi
callq 0x9658
movq -0x200(%rbp), %rsi
leaq -0x288(%rbp), %rdi
callq 0x1d920
jmp 0x2f49f
movq 0x15b22(%rip), %rdi     # 0x44fc8
leaq -0x288(%rbp), %rsi
callq 0x92f0
jmp 0x2f4b4
leaq -0x288(%rbp), %rdi
callq 0x9658
movl $0x1, %edi
callq 0x9350
movq %rax, -0x518(%rbp)
jmp 0x2f4d3
movb $0x1, -0x2a9(%rbp)
leaq 0x160ff(%rip), %rsi     # 0x455e0
leaq -0x2a8(%rbp), %rdi
callq 0x9170
jmp 0x2f4ef
movq -0x518(%rbp), %rdi
leaq -0x2a8(%rbp), %rsi
callq 0x14470
jmp 0x2f504
movq -0x518(%rbp), %rax
movb $0x0, -0x2a9(%rbp)
movq %rax, -0x1d8(%rbp)
leaq -0x2a8(%rbp), %rdi
callq 0x9658
jmp 0x2f68b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0x2f590
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0x2f584
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0x2f578
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
leaq -0x260(%rbp), %rdi
callq 0x9658
leaq -0x240(%rbp), %rdi
callq 0x9658
leaq -0x220(%rbp), %rdi
callq 0x9658
testb $0x1, -0x261(%rbp)
jne 0x2f59b
jmp 0x2f5ac
movq -0x508(%rbp), %rdi
movl $0x48, %esi
callq 0x9360
jmp 0x30342
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
leaq -0x288(%rbp), %rdi
callq 0x9658
jmp 0x30342
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0x2f62c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0x2f60e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
leaq -0x2a8(%rbp), %rdi
callq 0x9658
testb $0x1, -0x2a9(%rbp)
jne 0x2f619
jmp 0x2f62a
movq -0x518(%rbp), %rdi
movl $0x1, %esi
callq 0x9360
jmp 0x2f62c
movq -0x80(%rbp), %rdi
callq 0x9140
movq 0x159b4(%rip), %rdi     # 0x44ff0
leaq 0x5770(%rip), %rsi      # 0x34db3
callq 0x9340
movq %rax, -0x520(%rbp)
jmp 0x2f651
movq -0x520(%rbp), %rdi
movq 0x15951(%rip), %rsi     # 0x44fb0
callq 0x9380
jmp 0x2f666
movl $0x1, %edi
callq 0x9410
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
callq 0x9540
jmp 0x2f686
jmp 0x30342
movl $0x10, %edi
callq 0x9350
movq %rax, -0x528(%rbp)
jmp 0x2f69e
movq -0x528(%rbp), %rdi
movq -0x1d8(%rbp), %rsi
callq 0xd4e0
jmp 0x2f6b3
movq -0x528(%rbp), %rax
movq %rax, -0x1e0(%rbp)
jmp 0x2f756
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0x2f6f7
movq -0x528(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
movl $0x10, %esi
callq 0x9360
movq -0x80(%rbp), %rdi
callq 0x9140
movq 0x158e9(%rip), %rdi     # 0x44ff0
leaq 0x56b4(%rip), %rsi      # 0x34dc2
callq 0x9340
movq %rax, -0x530(%rbp)
jmp 0x2f71c
movq -0x530(%rbp), %rdi
movq 0x15886(%rip), %rsi     # 0x44fb0
callq 0x9380
jmp 0x2f731
movl $0x1, %edi
callq 0x9410
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
callq 0x9540
jmp 0x2f751
jmp 0x30342
movq -0x1e0(%rbp), %rdi
callq 0xd500
movq %rax, -0x538(%rbp)
jmp 0x2f76b
movq -0x538(%rbp), %rax
movq %rax, -0x1e8(%rbp)
jmp 0x2f7e9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
movq -0x80(%rbp), %rdi
callq 0x9140
movq 0x15856(%rip), %rdi     # 0x44ff0
leaq 0x5631(%rip), %rsi      # 0x34dd2
callq 0x9340
movq %rax, -0x540(%rbp)
jmp 0x2f7af
movq -0x540(%rbp), %rdi
movq 0x157f3(%rip), %rsi     # 0x44fb0
callq 0x9380
jmp 0x2f7c4
movl $0x1, %edi
callq 0x9410
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
callq 0x9540
jmp 0x2f7e4
jmp 0x30342
movl $0x10, %edi
callq 0x9350
movq %rax, -0x548(%rbp)
jmp 0x2f7fc
movq -0x548(%rbp), %rdi
callq 0x20610
jmp 0x2f80a
movq -0x548(%rbp), %rax
movq %rax, -0x1f0(%rbp)
jmp 0x2f8ad
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0x2f84e
movq -0x548(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
movl $0x10, %esi
callq 0x9360
movq -0x80(%rbp), %rdi
callq 0x9140
movq 0x15792(%rip), %rdi     # 0x44ff0
leaq 0x5585(%rip), %rsi      # 0x34dea
callq 0x9340
movq %rax, -0x550(%rbp)
jmp 0x2f873
movq -0x550(%rbp), %rdi
movq 0x1572f(%rip), %rsi     # 0x44fb0
callq 0x9380
jmp 0x2f888
movl $0x1, %edi
callq 0x9410
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
callq 0x9540
jmp 0x2f8a8
jmp 0x30342
movq -0x1f0(%rbp), %rdi
movq -0x1e8(%rbp), %rsi
movq (%rdi), %rax
movq (%rax), %rax
callq *%rax
movq %rax, -0x558(%rbp)
jmp 0x2f8cc
movq -0x558(%rbp), %rax
movq %rax, -0x1f8(%rbp)
jmp 0x2f94a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
movq -0x80(%rbp), %rdi
callq 0x9140
movq 0x156f5(%rip), %rdi     # 0x44ff0
leaq 0x54ff(%rip), %rsi      # 0x34e01
callq 0x9340
movq %rax, -0x560(%rbp)
jmp 0x2f910
movq -0x560(%rbp), %rdi
movq 0x15692(%rip), %rsi     # 0x44fb0
callq 0x9380
jmp 0x2f925
movl $0x1, %edi
callq 0x9410
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
callq 0x9540
jmp 0x2f945
jmp 0x30342
movq -0x1f8(%rbp), %rax
movq %rax, -0x570(%rbp)
movq %rax, -0x568(%rbp)
leaq 0x15cba(%rip), %rsi     # 0x45620
leaq -0x2d0(%rbp), %rdi
callq 0x9170
jmp 0x2f974
movq -0x570(%rbp), %rsi
movq -0x568(%rbp), %rdi
movq (%rdi), %rax
movq 0x20(%rax), %rax
leaq -0x2d0(%rbp), %rdx
callq *%rax
jmp 0x2f994
leaq -0x2d0(%rbp), %rdi
callq 0x9658
jmp 0x2fa30
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0x2f9d1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
leaq -0x2d0(%rbp), %rdi
callq 0x9658
movq -0x80(%rbp), %rdi
callq 0x9140
movq 0x1560f(%rip), %rdi     # 0x44ff0
leaq 0x542d(%rip), %rsi      # 0x34e15
callq 0x9340
movq %rax, -0x578(%rbp)
jmp 0x2f9f6
movq -0x578(%rbp), %rdi
movq 0x155ac(%rip), %rsi     # 0x44fb0
callq 0x9380
jmp 0x2fa0b
movl $0x1, %edi
callq 0x9410
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
callq 0x9540
jmp 0x2fa2b
jmp 0x30342
leaq 0x15c94(%rip), %rax     # 0x456cb
testb $0x1, (%rax)
je 0x2fa6b
movq -0x1e8(%rbp), %rdi
callq 0x1bad0
jmp 0x2fa4a
leaq 0x15c0f(%rip), %rax     # 0x45660
movq (%rax), %rdi
callq 0x1bb60
jmp 0x2fa5b
movq -0x1f8(%rbp), %rdi
callq 0x1bc00
jmp 0x2fa69
jmp 0x2fa6b
jmp 0x30311
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
movsbl (%rax), %eax
cmpl $0x2d, %eax
jne 0x2fde9
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
movsbl 0x1(%rax), %eax
cmpl $0x70, %eax
jne 0x2fde9
callq 0x1e9c0
jmp 0x2faa0
callq 0x1ea00
jmp 0x2faa7
callq 0x1e9e0
jmp 0x2faae
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
movsbl 0x2(%rax), %eax
cmpl $0x30, %eax
jne 0x2fadd
callq 0x1e9d0
jmp 0x2fac6
callq 0x1e9f0
jmp 0x2facd
callq 0x1e9f0
jmp 0x2fad4
callq 0x1ea30
jmp 0x2fadb
jmp 0x2fadd
movl $0x48, %edi
callq 0x9350
movq %rax, -0x580(%rbp)
jmp 0x2faf0
movb $0x1, -0x339(%rbp)
leaq 0x15ae2(%rip), %rsi     # 0x455e0
leaq -0x2f8(%rbp), %rdi
callq 0x9170
jmp 0x2fb0c
leaq 0x15b0d(%rip), %rsi     # 0x45620
leaq -0x318(%rbp), %rdi
callq 0x9170
jmp 0x2fb21
leaq 0x15ab8(%rip), %rsi     # 0x455e0
leaq -0x338(%rbp), %rdi
callq 0x9170
jmp 0x2fb36
leaq -0x338(%rbp), %rdi
callq 0x30420
movl %eax, -0x584(%rbp)
jmp 0x2fb4a
movl -0x584(%rbp), %ecx
movq -0x580(%rbp), %rdi
leaq -0x2f8(%rbp), %rsi
leaq -0x318(%rbp), %rdx
callq 0x1d880
jmp 0x2fb6c
movq -0x580(%rbp), %rax
movb $0x0, -0x339(%rbp)
movq %rax, -0x2d8(%rbp)
leaq -0x338(%rbp), %rdi
callq 0x9658
leaq -0x318(%rbp), %rdi
callq 0x9658
leaq -0x2f8(%rbp), %rdi
callq 0x9658
movq -0x2d8(%rbp), %rsi
leaq -0x360(%rbp), %rdi
callq 0x1d920
jmp 0x2fbba
movq 0x15407(%rip), %rdi     # 0x44fc8
leaq -0x360(%rbp), %rsi
callq 0x92f0
jmp 0x2fbcf
leaq -0x360(%rbp), %rdi
callq 0x9658
movl $0x1, %edi
callq 0x9350
movq %rax, -0x590(%rbp)
jmp 0x2fbee
movb $0x1, -0x389(%rbp)
leaq 0x159e4(%rip), %rsi     # 0x455e0
leaq -0x388(%rbp), %rdi
callq 0x9170
jmp 0x2fc0a
movq -0x590(%rbp), %rdi
leaq -0x388(%rbp), %rsi
callq 0x14470
jmp 0x2fc1f
movq -0x590(%rbp), %rax
movb $0x0, -0x389(%rbp)
movq %rax, -0x368(%rbp)
leaq -0x388(%rbp), %rdi
callq 0x9658
jmp 0x2fda6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0x2fcab
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0x2fc9f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0x2fc93
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
leaq -0x338(%rbp), %rdi
callq 0x9658
leaq -0x318(%rbp), %rdi
callq 0x9658
leaq -0x2f8(%rbp), %rdi
callq 0x9658
testb $0x1, -0x339(%rbp)
jne 0x2fcb6
jmp 0x2fcc7
movq -0x580(%rbp), %rdi
movl $0x48, %esi
callq 0x9360
jmp 0x30342
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
leaq -0x360(%rbp), %rdi
callq 0x9658
jmp 0x30342
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0x2fd47
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0x2fd29
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
leaq -0x388(%rbp), %rdi
callq 0x9658
testb $0x1, -0x389(%rbp)
jne 0x2fd34
jmp 0x2fd45
movq -0x590(%rbp), %rdi
movl $0x1, %esi
callq 0x9360
jmp 0x2fd47
movq -0x80(%rbp), %rdi
callq 0x9140
movq 0x15299(%rip), %rdi     # 0x44ff0
leaq 0x5055(%rip), %rsi      # 0x34db3
callq 0x9340
movq %rax, -0x598(%rbp)
jmp 0x2fd6c
movq -0x598(%rbp), %rdi
movq 0x15236(%rip), %rsi     # 0x44fb0
callq 0x9380
jmp 0x2fd81
movl $0x1, %edi
callq 0x9410
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
callq 0x9540
jmp 0x2fda1
jmp 0x30342
jmp 0x2fda8
movq -0x368(%rbp), %rdi
callq 0x14a60
movq %rax, -0x5a0(%rbp)
jmp 0x2fdbd
movq -0x5a0(%rbp), %rdi
callq 0x1be60
movl %eax, -0x5a4(%rbp)
jmp 0x2fdd1
movl -0x5a4(%rbp), %eax
movl %eax, -0x390(%rbp)
cmpl $0x2d, %eax
je 0x2fde4
jmp 0x2fda8
jmp 0x3030f
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
movsbl (%rax), %eax
cmpl $0x2d, %eax
jne 0x302a5
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
movsbl 0x1(%rax), %eax
cmpl $0x61, %eax
jne 0x302a5
callq 0x1e9c0
jmp 0x2fe19
callq 0x1ea20
jmp 0x2fe20
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
movsbl 0x2(%rax), %eax
cmpl $0x30, %eax
jne 0x2fe4f
callq 0x1e9d0
jmp 0x2fe38
callq 0x1e9f0
jmp 0x2fe3f
callq 0x1e9f0
jmp 0x2fe46
callq 0x1ea30
jmp 0x2fe4d
jmp 0x2fe4f
movl $0x48, %edi
callq 0x9350
movq %rax, -0x5b0(%rbp)
jmp 0x2fe62
movb $0x1, -0x3f9(%rbp)
leaq 0x15770(%rip), %rsi     # 0x455e0
leaq -0x3b8(%rbp), %rdi
callq 0x9170
jmp 0x2fe7e
leaq 0x1579b(%rip), %rsi     # 0x45620
leaq -0x3d8(%rbp), %rdi
callq 0x9170
jmp 0x2fe93
leaq 0x15746(%rip), %rsi     # 0x455e0
leaq -0x3f8(%rbp), %rdi
callq 0x9170
jmp 0x2fea8
leaq -0x3f8(%rbp), %rdi
callq 0x30420
movl %eax, -0x5b4(%rbp)
jmp 0x2febc
movl -0x5b4(%rbp), %ecx
movq -0x5b0(%rbp), %rdi
leaq -0x3b8(%rbp), %rsi
leaq -0x3d8(%rbp), %rdx
callq 0x1d880
jmp 0x2fede
movq -0x5b0(%rbp), %rax
movb $0x0, -0x3f9(%rbp)
movq %rax, -0x398(%rbp)
leaq -0x3f8(%rbp), %rdi
callq 0x9658
leaq -0x3d8(%rbp), %rdi
callq 0x9658
leaq -0x3b8(%rbp), %rdi
callq 0x9658
movq -0x398(%rbp), %rsi
leaq -0x420(%rbp), %rdi
callq 0x1d920
jmp 0x2ff2c
movq 0x15095(%rip), %rdi     # 0x44fc8
leaq -0x420(%rbp), %rsi
callq 0x92f0
jmp 0x2ff41
leaq -0x420(%rbp), %rdi
callq 0x9658
movl $0x1, %edi
callq 0x9350
movq %rax, -0x5c0(%rbp)
jmp 0x2ff60
movb $0x1, -0x459(%rbp)
leaq 0x15672(%rip), %rsi     # 0x455e0
leaq -0x458(%rbp), %rdi
callq 0x9170
jmp 0x2ff7c
movq -0x5c0(%rbp), %rdi
leaq -0x458(%rbp), %rsi
callq 0x14470
jmp 0x2ff91
movq -0x5c0(%rbp), %rax
movb $0x0, -0x459(%rbp)
movq %rax, -0x428(%rbp)
leaq -0x458(%rbp), %rdi
callq 0x9658
jmp 0x30118
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0x3001d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0x30011
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0x30005
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
leaq -0x3f8(%rbp), %rdi
callq 0x9658
leaq -0x3d8(%rbp), %rdi
callq 0x9658
leaq -0x3b8(%rbp), %rdi
callq 0x9658
testb $0x1, -0x3f9(%rbp)
jne 0x30028
jmp 0x30039
movq -0x5b0(%rbp), %rdi
movl $0x48, %esi
callq 0x9360
jmp 0x30342
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
leaq -0x420(%rbp), %rdi
callq 0x9658
jmp 0x30342
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0x300b9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0x3009b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
leaq -0x458(%rbp), %rdi
callq 0x9658
testb $0x1, -0x459(%rbp)
jne 0x300a6
jmp 0x300b7
movq -0x5c0(%rbp), %rdi
movl $0x1, %esi
callq 0x9360
jmp 0x300b9
movq -0x80(%rbp), %rdi
callq 0x9140
movq 0x14f27(%rip), %rdi     # 0x44ff0
leaq 0x4ce3(%rip), %rsi      # 0x34db3
callq 0x9340
movq %rax, -0x5c8(%rbp)
jmp 0x300de
movq -0x5c8(%rbp), %rdi
movq 0x14ec4(%rip), %rsi     # 0x44fb0
callq 0x9380
jmp 0x300f3
movl $0x1, %edi
callq 0x9410
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
callq 0x9540
jmp 0x30113
jmp 0x30342
movl $0x10, %edi
callq 0x9350
movq %rax, -0x5d0(%rbp)
jmp 0x3012b
movq -0x5d0(%rbp), %rdi
movq -0x428(%rbp), %rsi
callq 0xd4e0
jmp 0x30140
movq -0x5d0(%rbp), %rax
movq %rax, -0x430(%rbp)
jmp 0x301e3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0x30184
movq -0x5d0(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
movl $0x10, %esi
callq 0x9360
movq -0x80(%rbp), %rdi
callq 0x9140
movq 0x14e5c(%rip), %rdi     # 0x44ff0
leaq 0x4c27(%rip), %rsi      # 0x34dc2
callq 0x9340
movq %rax, -0x5d8(%rbp)
jmp 0x301a9
movq -0x5d8(%rbp), %rdi
movq 0x14df9(%rip), %rsi     # 0x44fb0
callq 0x9380
jmp 0x301be
movl $0x1, %edi
callq 0x9410
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
callq 0x9540
jmp 0x301de
jmp 0x30342
movq -0x430(%rbp), %rdi
callq 0xd500
movq %rax, -0x5e0(%rbp)
jmp 0x301f8
movq -0x5e0(%rbp), %rax
movq %rax, -0x438(%rbp)
jmp 0x30276
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
movq -0x80(%rbp), %rdi
callq 0x9140
movq 0x14dc9(%rip), %rdi     # 0x44ff0
leaq 0x4ba4(%rip), %rsi      # 0x34dd2
callq 0x9340
movq %rax, -0x5e8(%rbp)
jmp 0x3023c
movq -0x5e8(%rbp), %rdi
movq 0x14d66(%rip), %rsi     # 0x44fb0
callq 0x9380
jmp 0x30251
movl $0x1, %edi
callq 0x9410
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
callq 0x9540
jmp 0x30271
jmp 0x30342
leaq 0x1544e(%rip), %rax     # 0x456cb
testb $0x1, (%rax)
je 0x302a3
movq -0x438(%rbp), %rdi
callq 0x1bad0
jmp 0x30290
leaq 0x153c9(%rip), %rax     # 0x45660
movq (%rax), %rdi
callq 0x1bb60
jmp 0x302a1
jmp 0x302a3
jmp 0x3030d
leaq 0x15334(%rip), %rsi     # 0x455e0
leaq -0x480(%rbp), %rdi
callq 0x9170
jmp 0x302ba
leaq -0x480(%rbp), %rdi
callq 0x30420
movl %eax, -0x5ec(%rbp)
jmp 0x302ce
movl -0x5ec(%rbp), %esi
movq 0x14ced(%rip), %rdi     # 0x44fc8
callq 0x95a0
jmp 0x302e2
leaq -0x480(%rbp), %rdi
callq 0x9658
jmp 0x3030d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
leaq -0x480(%rbp), %rdi
callq 0x9658
jmp 0x30342
jmp 0x3030f
jmp 0x30311
jmp 0x30313
jmp 0x3031e
callq 0x30370
jmp 0x3031c
jmp 0x3031e
leaq -0x78(%rbp), %rdi
callq 0x9658
leaq -0x58(%rbp), %rdi
callq 0x9658
leaq -0x38(%rbp), %rdi
callq 0x9658
addq $0x5f0, %rsp            # imm = 0x5F0
popq %rbp
retq
leaq -0x78(%rbp), %rdi
callq 0x9658
leaq -0x58(%rbp), %rdi
callq 0x9658
leaq -0x38(%rbp), %rdi
callq 0x9658
movq -0x80(%rbp), %rdi
callq 0x95b0
movq %rax, %rdi
callq 0x13a00
nop