// File: pdx-cs-tutors[P]pdp/main.cpp
// Function: main
int main(int argc, char **argv) {
    std::map<std::string, std::map<std::string, BaseTestSuite*>> suites;

    suites["lll"] = {
        {"insertion", new LLLInsertionTests()},
        {"removal", new LLLRemovalTests()}
    };

    suites["cll"] = {
        {"insertion", new CLLInsertionTests()},
        {"removal", new CLLRemovalTests()}
    };

    int errored = 0;

    if (argc == 1 || strcmp(argv[1], "all") == 0) {
        for (auto suite : suites) {
            for (auto set : suite.second) {
                set.second->run();
            }
        }
    } else if (argc == 2) {
        auto it = suites.find(argv[1]);
        if (it == suites.end()) {
            print_no_match(argv[1]);
            errored = 1;
        } else {
            for (auto set : suites[argv[1]]) {
                set.second->run();
            }
        }
    } else if (argc > 2) {
        auto it = suites[argv[1]].find(argv[2]);
        if (it == suites[argv[1]].end()) {
            std::stringstream ss;
            ss << argv[1] << " " << argv[2];
            print_no_match(ss.str());
            errored = 1;
        } else {
            if (argc > 3) {
                if (!suites[argv[1]][argv[2]]->run(argv[3])) {
                    std::stringstream ss;
                    ss << argv[1] << " " << argv[2] << " " << argv[3];
                    print_no_match(ss.str());
                }
            } else {
                suites[argv[1]][argv[2]]->run();
            }
        }
    }

    for (auto const& pair : suites) {
        for (auto const& suite : suites[pair.first]) {
            if (suite.second) delete suite.second;
        }
    }

    return errored;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xab0, %rsp            # imm = 0xAB0
movl $0x0, -0x4(%rbp)
movl %edi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
leaq -0x40(%rbp), %rdi
callq 0x1ef10
leaq -0xa0(%rbp), %rax
movq %rax, -0xa8(%rbp)
movl $0x98, %edi
callq 0x1f470
movq %rax, -0x860(%rbp)
jmp 0x3d6c3
movq -0x860(%rbp), %rdi
callq 0x1e140
jmp 0x3d6d1
movq -0x860(%rbp), %rax
movq %rax, -0xb0(%rbp)
leaq 0x6836(%rip), %rsi      # 0x43f1c
leaq -0xa0(%rbp), %rdi
leaq -0xb0(%rbp), %rdx
callq 0x1f380
jmp 0x3d6fb
leaq -0x78(%rbp), %rax
movq %rax, -0x870(%rbp)
movq %rax, -0xa8(%rbp)
movl $0x98, %edi
callq 0x1f470
movq %rax, -0x868(%rbp)
jmp 0x3d720
movq -0x868(%rbp), %rdi
callq 0x1f120
jmp 0x3d72e
movq -0x870(%rbp), %rdi
movq -0x868(%rbp), %rax
movq %rax, -0xc8(%rbp)
leaq 0x67dc(%rip), %rsi      # 0x43f26
leaq -0xc8(%rbp), %rdx
callq 0x208e0
jmp 0x3d758
leaq -0xa0(%rbp), %rax
movq %rax, -0x50(%rbp)
movq $0x2, -0x48(%rbp)
leaq -0xe9(%rbp), %rdi
movq %rdi, -0x878(%rbp)
callq 0x20560
movq -0x878(%rbp), %rdx
leaq 0x67a2(%rip), %rsi      # 0x43f2e
leaq -0xe8(%rbp), %rdi
callq 0x1fc60
jmp 0x3d79a
leaq -0x40(%rbp), %rdi
leaq -0xe8(%rbp), %rsi
callq 0x201a0
movq %rax, -0x880(%rbp)
jmp 0x3d7b3
movq -0x880(%rbp), %rdi
movq -0x50(%rbp), %rsi
movq -0x48(%rbp), %rdx
callq 0x1e8f0
jmp 0x3d7c9
leaq -0xe8(%rbp), %rdi
callq 0x1eba0
leaq -0xe9(%rbp), %rdi
callq 0x1f620
leaq -0xa0(%rbp), %rax
movq %rax, -0x890(%rbp)
addq $0x50, %rax
movq %rax, -0x888(%rbp)
movq -0x888(%rbp), %rdi
addq $-0x28, %rdi
movq %rdi, -0x898(%rbp)
callq 0x1e230
movq -0x890(%rbp), %rcx
movq -0x898(%rbp), %rax
cmpq %rcx, %rax
movq %rax, -0x888(%rbp)
jne 0x3d7fa
leaq -0x150(%rbp), %rax
movq %rax, -0x158(%rbp)
movl $0x98, %edi
callq 0x1f470
movq %rax, -0x8a0(%rbp)
jmp 0x3d84c
movq -0x8a0(%rbp), %rdi
callq 0x1f6c0
jmp 0x3d85a
movq -0x8a0(%rbp), %rax
movq %rax, -0x160(%rbp)
leaq 0x66ad(%rip), %rsi      # 0x43f1c
leaq -0x150(%rbp), %rdi
leaq -0x160(%rbp), %rdx
callq 0x1e660
jmp 0x3d884
leaq -0x128(%rbp), %rax
movq %rax, -0x8b0(%rbp)
movq %rax, -0x158(%rbp)
movl $0x98, %edi
callq 0x1f470
movq %rax, -0x8a8(%rbp)
jmp 0x3d8ac
movq -0x8a8(%rbp), %rdi
callq 0x1fdf0
jmp 0x3d8ba
movq -0x8b0(%rbp), %rdi
movq -0x8a8(%rbp), %rax
movq %rax, -0x168(%rbp)
leaq 0x6650(%rip), %rsi      # 0x43f26
leaq -0x168(%rbp), %rdx
callq 0x20270
jmp 0x3d8e4
leaq -0x150(%rbp), %rax
movq %rax, -0x100(%rbp)
movq $0x2, -0xf8(%rbp)
leaq -0x189(%rbp), %rdi
movq %rdi, -0x8b8(%rbp)
callq 0x20560
movq -0x8b8(%rbp), %rdx
leaq 0x6614(%rip), %rsi      # 0x43f32
leaq -0x188(%rbp), %rdi
callq 0x1fc60
jmp 0x3d92c
leaq -0x40(%rbp), %rdi
leaq -0x188(%rbp), %rsi
callq 0x201a0
movq %rax, -0x8c0(%rbp)
jmp 0x3d945
movq -0x8c0(%rbp), %rdi
movq -0x100(%rbp), %rsi
movq -0xf8(%rbp), %rdx
callq 0x1e8f0
jmp 0x3d961
leaq -0x188(%rbp), %rdi
callq 0x1eba0
leaq -0x189(%rbp), %rdi
callq 0x1f620
leaq -0x150(%rbp), %rax
movq %rax, -0x8d0(%rbp)
addq $0x50, %rax
movq %rax, -0x8c8(%rbp)
movq -0x8c8(%rbp), %rdi
addq $-0x28, %rdi
movq %rdi, -0x8d8(%rbp)
callq 0x1e230
movq -0x8d0(%rbp), %rcx
movq -0x8d8(%rbp), %rax
cmpq %rcx, %rax
movq %rax, -0x8c8(%rbp)
jne 0x3d992
movl $0x0, -0x190(%rbp)
cmpl $0x1, -0x8(%rbp)
je 0x3d9f0
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rdi
leaq 0x5d65(%rip), %rsi      # 0x43747
callq 0x1fd90
cmpl $0x0, %eax
jne 0x3de5e
leaq -0x40(%rbp), %rax
movq %rax, -0x198(%rbp)
movq -0x198(%rbp), %rdi
callq 0x1e930
movq %rax, -0x1a0(%rbp)
movq -0x198(%rbp), %rdi
callq 0x1efd0
movq %rax, -0x1a8(%rbp)
leaq -0x1a0(%rbp), %rdi
leaq -0x1a8(%rbp), %rsi
callq 0x1e110
testb $0x1, %al
jne 0x3da3d
jmp 0x3de59
leaq -0x1a0(%rbp), %rdi
callq 0x1ed60
movq %rax, %rsi
leaq -0x1f8(%rbp), %rdi
callq 0x1ea10
jmp 0x3da5a
leaq -0x1f8(%rbp), %rax
addq $0x20, %rax
movq %rax, -0x200(%rbp)
movq -0x200(%rbp), %rdi
callq 0x1f4d0
movq %rax, -0x208(%rbp)
movq -0x200(%rbp), %rdi
callq 0x1e200
movq %rax, -0x210(%rbp)
leaq -0x208(%rbp), %rdi
leaq -0x210(%rbp), %rsi
callq 0x20060
testb $0x1, %al
jne 0x3daae
jmp 0x3de2b
leaq -0x208(%rbp), %rdi
callq 0x1efe0
movq %rax, %rsi
leaq -0x238(%rbp), %rdi
callq 0x20460
jmp 0x3dacb
movq -0x218(%rbp), %rax
movq %rax, -0x8e8(%rbp)
leaq -0x259(%rbp), %rdi
movq %rdi, -0x8e0(%rbp)
callq 0x20560
movq -0x8e0(%rbp), %rdx
leaq 0x5541(%rip), %rsi      # 0x4303b
leaq -0x258(%rbp), %rdi
callq 0x1fc60
jmp 0x3db08
movq -0x8e8(%rbp), %rdi
movq (%rdi), %rax
movq 0x30(%rax), %rax
leaq -0x258(%rbp), %rsi
callq *%rax
jmp 0x3db21
leaq -0x258(%rbp), %rdi
callq 0x1eba0
leaq -0x259(%rbp), %rdi
callq 0x1f620
leaq -0x238(%rbp), %rdi
callq 0x1e230
leaq -0x208(%rbp), %rdi
callq 0x1eb10
jmp 0x3da92
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb8(%rbp)
movl %eax, -0xbc(%rbp)
jmp 0x3dba8
movq -0x860(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb8(%rbp)
movl %eax, -0xbc(%rbp)
callq 0x1f2f0
jmp 0x3dba8
movq -0x868(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb8(%rbp)
movl %eax, -0xbc(%rbp)
callq 0x1f2f0
movq -0xa8(%rbp), %rax
leaq -0xa0(%rbp), %rcx
cmpq %rax, %rcx
movq %rax, -0x8f0(%rbp)
je 0x3dbf3
movq -0x8f0(%rbp), %rdi
addq $-0x28, %rdi
movq %rdi, -0x8f8(%rbp)
callq 0x1e230
movq -0x8f8(%rbp), %rax
leaq -0xa0(%rbp), %rcx
cmpq %rcx, %rax
movq %rax, -0x8f0(%rbp)
jne 0x3dbc2
jmp 0x3ec49
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb8(%rbp)
movl %eax, -0xbc(%rbp)
jmp 0x3dc2a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb8(%rbp)
movl %eax, -0xbc(%rbp)
leaq -0xe8(%rbp), %rdi
callq 0x1eba0
leaq -0xe9(%rbp), %rdi
callq 0x1f620
leaq -0xa0(%rbp), %rax
movq %rax, -0x908(%rbp)
addq $0x50, %rax
movq %rax, -0x900(%rbp)
movq -0x900(%rbp), %rdi
addq $-0x28, %rdi
movq %rdi, -0x910(%rbp)
callq 0x1e230
movq -0x908(%rbp), %rcx
movq -0x910(%rbp), %rax
cmpq %rcx, %rax
movq %rax, -0x900(%rbp)
jne 0x3dc4f
jmp 0x3ec49
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb8(%rbp)
movl %eax, -0xbc(%rbp)
jmp 0x3dcd7
movq -0x8a0(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb8(%rbp)
movl %eax, -0xbc(%rbp)
callq 0x1f2f0
jmp 0x3dcd7
movq -0x8a8(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb8(%rbp)
movl %eax, -0xbc(%rbp)
callq 0x1f2f0
movq -0x158(%rbp), %rax
leaq -0x150(%rbp), %rcx
cmpq %rax, %rcx
movq %rax, -0x918(%rbp)
je 0x3dd22
movq -0x918(%rbp), %rdi
addq $-0x28, %rdi
movq %rdi, -0x920(%rbp)
callq 0x1e230
movq -0x920(%rbp), %rax
leaq -0x150(%rbp), %rcx
cmpq %rcx, %rax
movq %rax, -0x918(%rbp)
jne 0x3dcf1
jmp 0x3ec49
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb8(%rbp)
movl %eax, -0xbc(%rbp)
jmp 0x3dd59
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb8(%rbp)
movl %eax, -0xbc(%rbp)
leaq -0x188(%rbp), %rdi
callq 0x1eba0
leaq -0x189(%rbp), %rdi
callq 0x1f620
leaq -0x150(%rbp), %rax
movq %rax, -0x930(%rbp)
addq $0x50, %rax
movq %rax, -0x928(%rbp)
movq -0x928(%rbp), %rdi
addq $-0x28, %rdi
movq %rdi, -0x938(%rbp)
callq 0x1e230
movq -0x930(%rbp), %rcx
movq -0x938(%rbp), %rax
cmpq %rcx, %rax
movq %rax, -0x928(%rbp)
jne 0x3dd7e
jmp 0x3ec49
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb8(%rbp)
movl %eax, -0xbc(%rbp)
jmp 0x3ec49
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb8(%rbp)
movl %eax, -0xbc(%rbp)
jmp 0x3de48
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb8(%rbp)
movl %eax, -0xbc(%rbp)
jmp 0x3de11
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb8(%rbp)
movl %eax, -0xbc(%rbp)
leaq -0x258(%rbp), %rdi
callq 0x1eba0
leaq -0x259(%rbp), %rdi
callq 0x1f620
leaq -0x238(%rbp), %rdi
callq 0x1e230
jmp 0x3de48
leaq -0x1f8(%rbp), %rdi
callq 0x1f330
leaq -0x1a0(%rbp), %rdi
callq 0x1e460
jmp 0x3da21
leaq -0x1f8(%rbp), %rdi
callq 0x1f330
jmp 0x3ec49
jmp 0x3eafa
cmpl $0x2, -0x8(%rbp)
jne 0x3e20a
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x948(%rbp)
leaq -0x289(%rbp), %rdi
movq %rdi, -0x940(%rbp)
callq 0x20560
movq -0x948(%rbp), %rsi
movq -0x940(%rbp), %rdx
leaq -0x288(%rbp), %rdi
callq 0x1fc60
jmp 0x3dea6
leaq -0x40(%rbp), %rdi
leaq -0x288(%rbp), %rsi
callq 0x1f310
movq %rax, -0x950(%rbp)
jmp 0x3debf
movq -0x950(%rbp), %rax
movq %rax, -0x268(%rbp)
leaq -0x288(%rbp), %rdi
callq 0x1eba0
leaq -0x289(%rbp), %rdi
callq 0x1f620
leaq -0x40(%rbp), %rdi
callq 0x1efd0
movq %rax, -0x298(%rbp)
leaq -0x268(%rbp), %rdi
leaq -0x298(%rbp), %rsi
callq 0x1e720
testb $0x1, %al
jne 0x3df11
jmp 0x3e00a
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x960(%rbp)
leaq -0x2b9(%rbp), %rdi
movq %rdi, -0x958(%rbp)
callq 0x20560
movq -0x960(%rbp), %rsi
movq -0x958(%rbp), %rdx
leaq -0x2b8(%rbp), %rdi
callq 0x1fc60
jmp 0x3df4f
leaq -0x2b8(%rbp), %rdi
callq 0x200e0
jmp 0x3df5d
leaq -0x2b8(%rbp), %rdi
callq 0x1eba0
leaq -0x2b9(%rbp), %rdi
callq 0x1f620
movl $0x1, -0x190(%rbp)
jmp 0x3e205
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb8(%rbp)
movl %eax, -0xbc(%rbp)
jmp 0x3dfb6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb8(%rbp)
movl %eax, -0xbc(%rbp)
leaq -0x288(%rbp), %rdi
callq 0x1eba0
leaq -0x289(%rbp), %rdi
callq 0x1f620
jmp 0x3ec49
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb8(%rbp)
movl %eax, -0xbc(%rbp)
jmp 0x3dff9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb8(%rbp)
movl %eax, -0xbc(%rbp)
leaq -0x2b8(%rbp), %rdi
callq 0x1eba0
leaq -0x2b9(%rbp), %rdi
callq 0x1f620
jmp 0x3ec49
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x970(%rbp)
leaq -0x2e9(%rbp), %rdi
movq %rdi, -0x968(%rbp)
callq 0x20560
movq -0x970(%rbp), %rsi
movq -0x968(%rbp), %rdx
leaq -0x2e8(%rbp), %rdi
callq 0x1fc60
jmp 0x3e048
leaq -0x40(%rbp), %rdi
leaq -0x2e8(%rbp), %rsi
callq 0x201a0
movq %rax, -0x978(%rbp)
jmp 0x3e061
leaq -0x2e8(%rbp), %rdi
callq 0x1eba0
leaq -0x2e9(%rbp), %rdi
callq 0x1f620
movq -0x978(%rbp), %rax
movq %rax, -0x2c8(%rbp)
movq -0x2c8(%rbp), %rdi
callq 0x1f4d0
movq %rax, -0x2f8(%rbp)
movq -0x2c8(%rbp), %rdi
callq 0x1e200
movq %rax, -0x300(%rbp)
leaq -0x2f8(%rbp), %rdi
leaq -0x300(%rbp), %rsi
callq 0x20060
testb $0x1, %al
jne 0x3e0c9
jmp 0x3e203
leaq -0x2f8(%rbp), %rdi
callq 0x1efe0
movq %rax, %rsi
leaq -0x328(%rbp), %rdi
callq 0x20460
jmp 0x3e0e6
movq -0x308(%rbp), %rax
movq %rax, -0x988(%rbp)
leaq -0x349(%rbp), %rdi
movq %rdi, -0x980(%rbp)
callq 0x20560
movq -0x980(%rbp), %rdx
leaq 0x4f26(%rip), %rsi      # 0x4303b
leaq -0x348(%rbp), %rdi
callq 0x1fc60
jmp 0x3e123
movq -0x988(%rbp), %rdi
movq (%rdi), %rax
movq 0x30(%rax), %rax
leaq -0x348(%rbp), %rsi
callq *%rax
jmp 0x3e13c
leaq -0x348(%rbp), %rdi
callq 0x1eba0
leaq -0x349(%rbp), %rdi
callq 0x1f620
leaq -0x328(%rbp), %rdi
callq 0x1e230
leaq -0x2f8(%rbp), %rdi
callq 0x1eb10
jmp 0x3e0ad
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb8(%rbp)
movl %eax, -0xbc(%rbp)
jmp 0x3e1a3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb8(%rbp)
movl %eax, -0xbc(%rbp)
leaq -0x2e8(%rbp), %rdi
callq 0x1eba0
leaq -0x2e9(%rbp), %rdi
callq 0x1f620
jmp 0x3ec49
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb8(%rbp)
movl %eax, -0xbc(%rbp)
jmp 0x3e1e6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb8(%rbp)
movl %eax, -0xbc(%rbp)
leaq -0x348(%rbp), %rdi
callq 0x1eba0
leaq -0x349(%rbp), %rdi
callq 0x1f620
leaq -0x328(%rbp), %rdi
callq 0x1e230
jmp 0x3ec49
jmp 0x3e205
jmp 0x3eaf8
cmpl $0x2, -0x8(%rbp)
jle 0x3eaf6
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x998(%rbp)
leaq -0x379(%rbp), %rdi
movq %rdi, -0x990(%rbp)
callq 0x20560
movq -0x998(%rbp), %rsi
movq -0x990(%rbp), %rdx
leaq -0x378(%rbp), %rdi
callq 0x1fc60
jmp 0x3e252
leaq -0x40(%rbp), %rdi
leaq -0x378(%rbp), %rsi
callq 0x201a0
movq %rax, -0x9a0(%rbp)
jmp 0x3e26b
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rax
movq %rax, -0x9b0(%rbp)
leaq -0x3a1(%rbp), %rdi
movq %rdi, -0x9a8(%rbp)
callq 0x20560
movq -0x9b0(%rbp), %rsi
movq -0x9a8(%rbp), %rdx
leaq -0x3a0(%rbp), %rdi
callq 0x1fc60
jmp 0x3e2a9
movq -0x9a0(%rbp), %rdi
leaq -0x3a0(%rbp), %rsi
callq 0x203a0
movq %rax, -0x9b8(%rbp)
jmp 0x3e2c5
movq -0x9b8(%rbp), %rax
movq %rax, -0x358(%rbp)
leaq -0x3a0(%rbp), %rdi
callq 0x1eba0
leaq -0x3a1(%rbp), %rdi
callq 0x1f620
leaq -0x378(%rbp), %rdi
callq 0x1eba0
leaq -0x379(%rbp), %rdi
callq 0x1f620
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x9c8(%rbp)
leaq -0x3d1(%rbp), %rdi
movq %rdi, -0x9c0(%rbp)
callq 0x20560
movq -0x9c8(%rbp), %rsi
movq -0x9c0(%rbp), %rdx
leaq -0x3d0(%rbp), %rdi
callq 0x1fc60
jmp 0x3e341
leaq -0x40(%rbp), %rdi
leaq -0x3d0(%rbp), %rsi
callq 0x201a0
movq %rax, -0x9d0(%rbp)
jmp 0x3e35a
movq -0x9d0(%rbp), %rdi
callq 0x1e200
movq %rax, -0x3b0(%rbp)
leaq -0x358(%rbp), %rdi
leaq -0x3b0(%rbp), %rsi
callq 0x1fc40
movb %al, -0x9d1(%rbp)
leaq -0x3d0(%rbp), %rdi
callq 0x1eba0
leaq -0x3d1(%rbp), %rdi
callq 0x1f620
movb -0x9d1(%rbp), %al
testb $0x1, %al
jne 0x3e3ad
jmp 0x3e55d
leaq -0x560(%rbp), %rdi
callq 0x1ed10
jmp 0x3e3bb
leaq -0x550(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rsi
callq 0x1f440
movq %rax, -0x9e0(%rbp)
jmp 0x3e3d8
movq -0x9e0(%rbp), %rdi
leaq 0x4c54(%rip), %rsi      # 0x4303a
callq 0x1f440
movq %rax, -0x9e8(%rbp)
jmp 0x3e3f4
movq -0x9e8(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rsi
callq 0x1f440
jmp 0x3e40a
leaq -0x580(%rbp), %rdi
leaq -0x560(%rbp), %rsi
callq 0x1f410
jmp 0x3e41f
leaq -0x580(%rbp), %rdi
callq 0x200e0
jmp 0x3e42d
leaq -0x580(%rbp), %rdi
callq 0x1eba0
movl $0x1, -0x190(%rbp)
leaq -0x560(%rbp), %rdi
callq 0x1edc0
jmp 0x3eaf4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb8(%rbp)
movl %eax, -0xbc(%rbp)
jmp 0x3e4c6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb8(%rbp)
movl %eax, -0xbc(%rbp)
jmp 0x3e4ba
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb8(%rbp)
movl %eax, -0xbc(%rbp)
jmp 0x3e4ae
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb8(%rbp)
movl %eax, -0xbc(%rbp)
leaq -0x3a0(%rbp), %rdi
callq 0x1eba0
leaq -0x3a1(%rbp), %rdi
callq 0x1f620
leaq -0x378(%rbp), %rdi
callq 0x1eba0
leaq -0x379(%rbp), %rdi
callq 0x1f620
jmp 0x3ec49
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb8(%rbp)
movl %eax, -0xbc(%rbp)
jmp 0x3e509
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb8(%rbp)
movl %eax, -0xbc(%rbp)
leaq -0x3d0(%rbp), %rdi
callq 0x1eba0
leaq -0x3d1(%rbp), %rdi
callq 0x1f620
jmp 0x3ec49
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb8(%rbp)
movl %eax, -0xbc(%rbp)
jmp 0x3e54c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb8(%rbp)
movl %eax, -0xbc(%rbp)
leaq -0x580(%rbp), %rdi
callq 0x1eba0
leaq -0x560(%rbp), %rdi
callq 0x1edc0
jmp 0x3ec49
cmpl $0x3, -0x8(%rbp)
jle 0x3e8d5
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x9f8(%rbp)
leaq -0x5a1(%rbp), %rdi
movq %rdi, -0x9f0(%rbp)
callq 0x20560
movq -0x9f8(%rbp), %rsi
movq -0x9f0(%rbp), %rdx
leaq -0x5a0(%rbp), %rdi
callq 0x1fc60
jmp 0x3e5a5
leaq -0x40(%rbp), %rdi
leaq -0x5a0(%rbp), %rsi
callq 0x201a0
movq %rax, -0xa00(%rbp)
jmp 0x3e5be
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rax
movq %rax, -0xa10(%rbp)
leaq -0x5c9(%rbp), %rdi
movq %rdi, -0xa08(%rbp)
callq 0x20560
movq -0xa10(%rbp), %rsi
movq -0xa08(%rbp), %rdx
leaq -0x5c8(%rbp), %rdi
callq 0x1fc60
jmp 0x3e5fc
movq -0xa00(%rbp), %rdi
leaq -0x5c8(%rbp), %rsi
callq 0x20790
movq %rax, -0xa18(%rbp)
jmp 0x3e618
movq -0xa18(%rbp), %rax
movq (%rax), %rax
movq %rax, -0xa30(%rbp)
movq -0x10(%rbp), %rax
movq 0x18(%rax), %rax
movq %rax, -0xa28(%rbp)
leaq -0x5f1(%rbp), %rdi
movq %rdi, -0xa20(%rbp)
callq 0x20560
movq -0xa28(%rbp), %rsi
movq -0xa20(%rbp), %rdx
leaq -0x5f0(%rbp), %rdi
callq 0x1fc60
jmp 0x3e667
movq -0xa30(%rbp), %rdi
movq (%rdi), %rax
movq 0x30(%rax), %rax
leaq -0x5f0(%rbp), %rsi
callq *%rax
movl %eax, -0xa34(%rbp)
jmp 0x3e686
movl -0xa34(%rbp), %eax
cmpl $0x0, %eax
setne %al
xorb $-0x1, %al
movb %al, -0xa35(%rbp)
leaq -0x5f0(%rbp), %rdi
callq 0x1eba0
leaq -0x5f1(%rbp), %rdi
callq 0x1f620
leaq -0x5c8(%rbp), %rdi
callq 0x1eba0
leaq -0x5c9(%rbp), %rdi
callq 0x1f620
leaq -0x5a0(%rbp), %rdi
callq 0x1eba0
leaq -0x5a1(%rbp), %rdi
callq 0x1f620
movb -0xa35(%rbp), %al
testb $0x1, %al
jne 0x3e6f1
jmp 0x3e8d0
leaq -0x780(%rbp), %rdi
callq 0x1ed10
jmp 0x3e6ff
leaq -0x770(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rsi
callq 0x1f440
movq %rax, -0xa40(%rbp)
jmp 0x3e71c
movq -0xa40(%rbp), %rdi
leaq 0x4910(%rip), %rsi      # 0x4303a
callq 0x1f440
movq %rax, -0xa48(%rbp)
jmp 0x3e738
movq -0xa48(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rsi
callq 0x1f440
movq %rax, -0xa50(%rbp)
jmp 0x3e755
movq -0xa50(%rbp), %rdi
leaq 0x48d7(%rip), %rsi      # 0x4303a
callq 0x1f440
movq %rax, -0xa58(%rbp)
jmp 0x3e771
movq -0xa58(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x18(%rax), %rsi
callq 0x1f440
jmp 0x3e787
leaq -0x7a0(%rbp), %rdi
leaq -0x780(%rbp), %rsi
callq 0x1f410
jmp 0x3e79c
leaq -0x7a0(%rbp), %rdi
callq 0x200e0
jmp 0x3e7aa
leaq -0x7a0(%rbp), %rdi
callq 0x1eba0
leaq -0x780(%rbp), %rdi
callq 0x1edc0
jmp 0x3e8d0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb8(%rbp)
movl %eax, -0xbc(%rbp)
jmp 0x3e87c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb8(%rbp)
movl %eax, -0xbc(%rbp)
jmp 0x3e870
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb8(%rbp)
movl %eax, -0xbc(%rbp)
jmp 0x3e864
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb8(%rbp)
movl %eax, -0xbc(%rbp)
jmp 0x3e858
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb8(%rbp)
movl %eax, -0xbc(%rbp)
jmp 0x3e84c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb8(%rbp)
movl %eax, -0xbc(%rbp)
leaq -0x5f0(%rbp), %rdi
callq 0x1eba0
leaq -0x5f1(%rbp), %rdi
callq 0x1f620
leaq -0x5c8(%rbp), %rdi
callq 0x1eba0
leaq -0x5c9(%rbp), %rdi
callq 0x1f620
leaq -0x5a0(%rbp), %rdi
callq 0x1eba0
leaq -0x5a1(%rbp), %rdi
callq 0x1f620
jmp 0x3ec49
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb8(%rbp)
movl %eax, -0xbc(%rbp)
jmp 0x3e8bf
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb8(%rbp)
movl %eax, -0xbc(%rbp)
leaq -0x7a0(%rbp), %rdi
callq 0x1eba0
leaq -0x780(%rbp), %rdi
callq 0x1edc0
jmp 0x3ec49
jmp 0x3eaf2
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0xa68(%rbp)
leaq -0x7c1(%rbp), %rdi
movq %rdi, -0xa60(%rbp)
callq 0x20560
movq -0xa68(%rbp), %rsi
movq -0xa60(%rbp), %rdx
leaq -0x7c0(%rbp), %rdi
callq 0x1fc60
jmp 0x3e913
leaq -0x40(%rbp), %rdi
leaq -0x7c0(%rbp), %rsi
callq 0x201a0
movq %rax, -0xa70(%rbp)
jmp 0x3e92c
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rax
movq %rax, -0xa80(%rbp)
leaq -0x7e9(%rbp), %rdi
movq %rdi, -0xa78(%rbp)
callq 0x20560
movq -0xa80(%rbp), %rsi
movq -0xa78(%rbp), %rdx
leaq -0x7e8(%rbp), %rdi
callq 0x1fc60
jmp 0x3e96a
movq -0xa70(%rbp), %rdi
leaq -0x7e8(%rbp), %rsi
callq 0x20790
movq %rax, -0xa88(%rbp)
jmp 0x3e986
movq -0xa88(%rbp), %rax
movq (%rax), %rax
movq %rax, -0xa98(%rbp)
leaq -0x811(%rbp), %rdi
movq %rdi, -0xa90(%rbp)
callq 0x20560
movq -0xa90(%rbp), %rdx
leaq 0x4683(%rip), %rsi      # 0x4303b
leaq -0x810(%rbp), %rdi
callq 0x1fc60
jmp 0x3e9c6
movq -0xa98(%rbp), %rdi
movq (%rdi), %rax
movq 0x30(%rax), %rax
leaq -0x810(%rbp), %rsi
callq *%rax
jmp 0x3e9df
leaq -0x810(%rbp), %rdi
callq 0x1eba0
leaq -0x811(%rbp), %rdi
callq 0x1f620
leaq -0x7e8(%rbp), %rdi
callq 0x1eba0
leaq -0x7e9(%rbp), %rdi
callq 0x1f620
leaq -0x7c0(%rbp), %rdi
callq 0x1eba0
leaq -0x7c1(%rbp), %rdi
callq 0x1f620
jmp 0x3eaf2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb8(%rbp)
movl %eax, -0xbc(%rbp)
jmp 0x3eae1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb8(%rbp)
movl %eax, -0xbc(%rbp)
jmp 0x3ead5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb8(%rbp)
movl %eax, -0xbc(%rbp)
jmp 0x3eac9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb8(%rbp)
movl %eax, -0xbc(%rbp)
jmp 0x3eabd
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb8(%rbp)
movl %eax, -0xbc(%rbp)
jmp 0x3eab1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb8(%rbp)
movl %eax, -0xbc(%rbp)
leaq -0x810(%rbp), %rdi
callq 0x1eba0
leaq -0x811(%rbp), %rdi
callq 0x1f620
leaq -0x7e8(%rbp), %rdi
callq 0x1eba0
leaq -0x7e9(%rbp), %rdi
callq 0x1f620
leaq -0x7c0(%rbp), %rdi
callq 0x1eba0
leaq -0x7c1(%rbp), %rdi
callq 0x1f620
jmp 0x3ec49
jmp 0x3eaf4
jmp 0x3eaf6
jmp 0x3eaf8
jmp 0x3eafa
leaq -0x40(%rbp), %rax
movq %rax, -0x820(%rbp)
movq -0x820(%rbp), %rdi
callq 0x1e930
movq %rax, -0x828(%rbp)
movq -0x820(%rbp), %rdi
callq 0x1efd0
movq %rax, -0x830(%rbp)
leaq -0x828(%rbp), %rdi
leaq -0x830(%rbp), %rsi
callq 0x1e110
testb $0x1, %al
jne 0x3eb47
jmp 0x3ec2b
leaq -0x828(%rbp), %rdi
callq 0x1ed60
movq %rax, -0x838(%rbp)
movq -0x838(%rbp), %rsi
leaq -0x40(%rbp), %rdi
callq 0x1e880
movq %rax, -0xaa0(%rbp)
jmp 0x3eb73
movq -0xaa0(%rbp), %rax
movq %rax, -0x840(%rbp)
movq -0x840(%rbp), %rdi
callq 0x1f4d0
movq %rax, -0x848(%rbp)
movq -0x840(%rbp), %rdi
callq 0x1e200
movq %rax, -0x850(%rbp)
leaq -0x848(%rbp), %rdi
leaq -0x850(%rbp), %rsi
callq 0x20060
testb $0x1, %al
jne 0x3ebc0
jmp 0x3ec18
leaq -0x848(%rbp), %rdi
callq 0x1efe0
movq %rax, -0x858(%rbp)
movq -0x858(%rbp), %rax
cmpq $0x0, 0x20(%rax)
je 0x3ec08
movq -0x858(%rbp), %rax
movq 0x20(%rax), %rax
movq %rax, -0xaa8(%rbp)
cmpq $0x0, %rax
je 0x3ec06
movq -0xaa8(%rbp), %rdi
movq (%rdi), %rax
callq *0x8(%rax)
jmp 0x3ec08
jmp 0x3ec0a
leaq -0x848(%rbp), %rdi
callq 0x1eb10
jmp 0x3eba7
jmp 0x3ec1a
leaq -0x828(%rbp), %rdi
callq 0x1e460
jmp 0x3eb2b
movl -0x190(%rbp), %eax
movl %eax, -0x4(%rbp)
leaq -0x40(%rbp), %rdi
callq 0x1edf0
movl -0x4(%rbp), %eax
addq $0xab0, %rsp            # imm = 0xAB0
popq %rbp
retq
leaq -0x40(%rbp), %rdi
callq 0x1edf0
movq -0xb8(%rbp), %rdi
callq 0x20540
nop