// File: ALSchwalm[P]entrospy/entrospy/entrospy.cpp
// Function: main
int main(int argc, char** argv) {
    po::options_description desc("Usage: entrospy [OPTION] PATH...", 100);

    PrintingPolicy policy;
    DataFormat format;
    std::vector<std::string> paths;

    desc.add_options()                    //
        ("help,h", "Print help messages") //
        ("paths", po::value<std::vector<std::string>>(&paths),
         "Paths to search")                  //
        ("debug", "Enable debugging output") //
        ("all,a",
         "Do not ignore hidden files and directories") //
        ("block,b", po::value<std::string>(),
         "Process each file 'block' at a time. This will show the"
         " entropy for each block rather than the total file. The provided"
         " argument will be interpreted as a byte count unless suffixed"
         " with 'K', 'M', or 'G' for kilo, mega, and giga-bytes "
         "respectively") //
        ("categorize,c",
         "Show a categorization based on entropy in addition to the score") //
        ("print,p", "Print a hex view of each block")                       //
        ("addr", po::value<AddressFormat>(&policy.addr_format)
                     ->default_value(AddressFormat::HEX, "hex"),
         "Format to use for printed addresses: 'hex' or 'dec'") //
        ("lower,l", po::value<double>(&policy.bounds.first),
         "Do not show files with entropy lower than 'lower'") //
        ("upper,u", po::value<double>(&policy.bounds.second),
         "Do not show files with entropy higher than 'upper'") //
        ("format,f", po::value<DataFormat>(&format)
                         ->default_value(DataFormat::DATA, "data"),
         "Input format: 'data','text' or 'base64'") //
        ("graph,g",
         "Output a gnuplot script to standard out") //
        ("recursive,r",
         "Run directories in PATH recursively"); //

    po::positional_options_description p;
    p.add("paths", -1);

    po::variables_map vm;

    try {
        po::store(po::command_line_parser(argc, argv)
                      .options(desc)
                      .positional(p)
                      .run(),
                  vm);

        if (vm.count("help")) {
            std::cout << desc << std::endl;
            return 0;
        }

        po::notify(vm);
    } catch (po::error& e) {
        std::cerr << "entrospy: " << e.what() << std::endl;
        return EXIT_FAILURE;
    }

    uint64_t block_size = 0;
    if (vm.count("block")) {
        block_size = parse_block_size(vm["block"].as<std::string>());
    }

    if (vm.count("print")) {
        if (!vm.count("block")) {
            std::cerr << "entrospy: cannot specify 'print' without 'block'"
                      << std::endl;
            return EXIT_FAILURE;
        } else {
            policy.print_blocks = true;
        }
    }

    if (vm.count("graph")) {
        policy.print_graph = true;
    }

    if (vm.count("categorize")) {
        policy.categorize = true;
    }

    auto title = boost::format("Entropy for %1% (bs=%2%)") %
                 boost::algorithm::join(paths, ", ") % block_size;

    EntropyGraph graph{boost::str(title), block_size, policy};
    for (const auto& path : paths) {
        if (fs::is_directory(path)) {
            if (!vm.count("recursive")) {
                std::cerr << "entrospy: " << path << ": Is a directory"
                          << std::endl;
                continue;
            } else {
                for (fs::recursive_directory_iterator iter(path), end;
                     iter != end; ++iter) {
                    if (fs::is_directory(iter->path())) {
                        if (is_hidden(iter->path()) && !vm.count("all")) {
                            iter.no_push();
                        }
                        continue;
                    }
                    if (!is_hidden(iter->path()) || vm.count("all")) {
                        shannon_file(iter->path().string(), block_size, policy,
                                     format, graph);
                    }
                }
            }
        } else {
            shannon_file(path, block_size, policy, format, graph);
        }
    }

    if (policy.print_graph) {
        std::cout << graph;
    }
}

// Assembly:
subq $0x9e8, %rsp            # imm = 0x9E8
movl $0x0, 0x9e4(%rsp)
movl %edi, 0x9e0(%rsp)
movq %rsi, 0x9d8(%rsp)
leaq 0x937(%rsp), %rdi
movq %rdi, 0x278(%rsp)
callq 0xa9d0
movq 0x278(%rsp), %rdx
leaq 0x2b10d(%rip), %rsi     # 0x36452
leaq 0x938(%rsp), %rdi
callq 0xa750
jmp 0xb354
movq 0x40c0d(%rip), %rax     # 0x4bf68
movl (%rax), %ecx
shrl %ecx
leaq 0x958(%rsp), %rdi
leaq 0x938(%rsp), %rsi
movl $0x64, %edx
callq 0xa790
jmp 0xb37b
leaq 0x938(%rsp), %rdi
callq 0xab18
leaq 0x937(%rsp), %rdi
callq 0xa560
leaq 0x900(%rsp), %rdi
callq 0xd320
jmp 0xb3a4
leaq 0x8e0(%rsp), %rdi
callq 0xd380
leaq 0x958(%rsp), %rdi
callq 0xa620
movq %rax, 0x270(%rsp)
jmp 0xb3c8
movq 0x270(%rsp), %rax
movq %rax, 0x8d8(%rsp)
leaq 0x2b094(%rip), %rsi     # 0x36473
leaq 0x2b094(%rip), %rdx     # 0x3647a
leaq 0x8d8(%rsp), %rdi
callq 0xaa20
movq %rax, 0x268(%rsp)
jmp 0xb3fd
leaq 0x8e0(%rsp), %rdi
callq 0xd390
movq %rax, 0x260(%rsp)
jmp 0xb414
movq 0x260(%rsp), %rdx
movq 0x268(%rsp), %rdi
leaq 0x2b063(%rip), %rsi     # 0x3648e
leaq 0x2b062(%rip), %rcx     # 0x36494
callq 0xaab0
movq %rax, 0x258(%rsp)
jmp 0xb441
movq 0x258(%rsp), %rdi
leaq 0x2b054(%rip), %rsi     # 0x364a4
leaq 0x2b053(%rip), %rdx     # 0x364aa
callq 0xaa20
movq %rax, 0x250(%rsp)
jmp 0xb466
movq 0x250(%rsp), %rdi
leaq 0x2b04d(%rip), %rsi     # 0x364c2
leaq 0x2b04c(%rip), %rdx     # 0x364c8
callq 0xaa20
movq %rax, 0x248(%rsp)
jmp 0xb48b
callq 0xd3f0
movq %rax, 0x240(%rsp)
jmp 0xb49a
movq 0x240(%rsp), %rdx
movq 0x248(%rsp), %rdi
leaq 0x2b042(%rip), %rsi     # 0x364f3
leaq 0x2b043(%rip), %rcx     # 0x364fb
callq 0xaab0
movq %rax, 0x238(%rsp)
jmp 0xb4c7
movq 0x238(%rsp), %rdi
leaq 0x2b11c(%rip), %rsi     # 0x365f2
leaq 0x2b122(%rip), %rdx     # 0x365ff
callq 0xaa20
movq %rax, 0x230(%rsp)
jmp 0xb4ec
movq 0x230(%rsp), %rdi
leaq 0x2b144(%rip), %rsi     # 0x3663f
leaq 0x2b145(%rip), %rdx     # 0x36647
callq 0xaa20
movq %rax, 0x228(%rsp)
jmp 0xb511
leaq 0x918(%rsp), %rdi
callq 0xd400
movq %rax, 0x220(%rsp)
jmp 0xb528
movl $0x1, 0x8d4(%rsp)
leaq 0x8af(%rsp), %rdi
movq %rdi, 0x218(%rsp)
callq 0xa9d0
movq 0x218(%rsp), %rdx
leaq 0x2b114(%rip), %rsi     # 0x3666b
leaq 0x8b0(%rsp), %rdi
callq 0xa750
jmp 0xb566
movq 0x220(%rsp), %rdi
leaq 0x8d4(%rsp), %rsi
leaq 0x8b0(%rsp), %rdx
callq 0xd460
movq %rax, 0x210(%rsp)
jmp 0xb58d
movq 0x210(%rsp), %rdx
movq 0x228(%rsp), %rdi
leaq 0x2b0c2(%rip), %rsi     # 0x36666
leaq 0x2b0c4(%rip), %rcx     # 0x3666f
callq 0xaab0
movq %rax, 0x208(%rsp)
jmp 0xb5ba
leaq 0x908(%rsp), %rdi
callq 0xd4d0
movq %rax, 0x200(%rsp)
jmp 0xb5d1
movq 0x200(%rsp), %rdx
movq 0x208(%rsp), %rdi
leaq 0x2b0bb(%rip), %rsi     # 0x366a3
leaq 0x2b0bc(%rip), %rcx     # 0x366ab
callq 0xaab0
movq %rax, 0x1f8(%rsp)
jmp 0xb5fe
leaq 0x910(%rsp), %rdi
callq 0xd4d0
movq %rax, 0x1f0(%rsp)
jmp 0xb615
movq 0x1f0(%rsp), %rdx
movq 0x1f8(%rsp), %rdi
leaq 0x2b0b1(%rip), %rsi     # 0x366dd
leaq 0x2b0b2(%rip), %rcx     # 0x366e5
callq 0xaab0
movq %rax, 0x1e8(%rsp)
jmp 0xb642
leaq 0x8fc(%rsp), %rdi
callq 0xd530
movq %rax, 0x1e0(%rsp)
jmp 0xb659
movl $0x100, 0x8a8(%rsp) # imm = 0x100
leaq 0x887(%rsp), %rdi
movq %rdi, 0x1d8(%rsp)
callq 0xa9d0
movq 0x1d8(%rsp), %rdx
leaq 0x2b099(%rip), %rsi     # 0x36721
leaq 0x888(%rsp), %rdi
callq 0xa750
jmp 0xb697
movq 0x1e0(%rsp), %rdi
leaq 0x8a8(%rsp), %rsi
leaq 0x888(%rsp), %rdx
callq 0xd590
movq %rax, 0x1d0(%rsp)
jmp 0xb6be
movq 0x1d0(%rsp), %rdx
movq 0x1e8(%rsp), %rdi
leaq 0x2b043(%rip), %rsi     # 0x36718
leaq 0x2b04a(%rip), %rcx     # 0x36726
callq 0xaab0
movq %rax, 0x1c8(%rsp)
jmp 0xb6eb
movq 0x1c8(%rsp), %rdi
leaq 0x2b054(%rip), %rsi     # 0x3674e
leaq 0x2b055(%rip), %rdx     # 0x36756
callq 0xaa20
movq %rax, 0x1c0(%rsp)
jmp 0xb710
movq 0x1c0(%rsp), %rdi
leaq 0x2b05f(%rip), %rsi     # 0x3677e
leaq 0x2b064(%rip), %rdx     # 0x3678a
callq 0xaa20
jmp 0xb72d
leaq 0x888(%rsp), %rdi
callq 0xab18
leaq 0x887(%rsp), %rdi
callq 0xa560
leaq 0x8b0(%rsp), %rdi
callq 0xab18
leaq 0x8af(%rsp), %rdi
callq 0xa560
leaq 0x848(%rsp), %rdi
callq 0xa6e0
jmp 0xb770
leaq 0x2ad17(%rip), %rsi     # 0x3648e
leaq 0x848(%rsp), %rdi
movl $0xffffffff, %edx       # imm = 0xFFFFFFFF
callq 0xa570
jmp 0xb78b
leaq 0x7a8(%rsp), %rdi
callq 0xa210
jmp 0xb79a
movl 0x9e0(%rsp), %esi
movq 0x9d8(%rsp), %rdx
leaq 0x708(%rsp), %rdi
callq 0xd600
jmp 0xb7b8
leaq 0x708(%rsp), %rdi
leaq 0x958(%rsp), %rsi
callq 0xd740
movq %rax, 0x1b8(%rsp)
jmp 0xb7d7
movq 0x1b8(%rsp), %rdi
leaq 0x848(%rsp), %rsi
callq 0xd780
movq %rax, 0x1b0(%rsp)
jmp 0xb7f6
movq 0x1b0(%rsp), %rsi
leaq 0x780(%rsp), %rdi
callq 0xd7b0
jmp 0xb80d
leaq 0x780(%rsp), %rdi
leaq 0x7a8(%rsp), %rsi
xorl %edx, %edx
callq 0xa9a0
jmp 0xb826
leaq 0x780(%rsp), %rdi
callq 0xd880
leaq 0x708(%rsp), %rdi
callq 0xd890
leaq 0x7b8(%rsp), %rax
movq %rax, 0x1a0(%rsp)
leaq 0x6e7(%rsp), %rdi
movq %rdi, 0x1a8(%rsp)
callq 0xa9d0
movq 0x1a8(%rsp), %rdx
leaq 0x2af3a(%rip), %rsi     # 0x367ae
leaq 0x6e8(%rsp), %rdi
callq 0xa750
jmp 0xb883
movq 0x1a0(%rsp), %rdi
leaq 0x6e8(%rsp), %rsi
callq 0xd8a0
movq %rax, 0x198(%rsp)
jmp 0xb8a2
leaq 0x6e8(%rsp), %rdi
callq 0xab18
leaq 0x6e7(%rsp), %rdi
callq 0xa560
movq 0x198(%rsp), %rax
cmpq $0x0, %rax
je 0xbb87
movq 0x406db(%rip), %rdi     # 0x4bfb0
leaq 0x958(%rsp), %rsi
callq 0xa0b0
movq %rax, 0x190(%rsp)
jmp 0xb8ec
movq 0x190(%rsp), %rdi
movq 0x40665(%rip), %rsi     # 0x4bf60
callq 0xa540
jmp 0xb902
movl $0x0, 0x9e4(%rsp)
movl $0x1, 0x6e0(%rsp)
jmp 0xca6f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x928(%rsp)
movl %eax, 0x924(%rsp)
jmp 0xb954
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x928(%rsp)
movl %eax, 0x924(%rsp)
leaq 0x938(%rsp), %rdi
callq 0xab18
leaq 0x937(%rsp), %rdi
callq 0xa560
jmp 0xcb00
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x928(%rsp)
movl %eax, 0x924(%rsp)
jmp 0xcaf3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x928(%rsp)
movl %eax, 0x924(%rsp)
jmp 0xcae6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x928(%rsp)
movl %eax, 0x924(%rsp)
jmp 0xba15
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x928(%rsp)
movl %eax, 0x924(%rsp)
jmp 0xba08
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x928(%rsp)
movl %eax, 0x924(%rsp)
jmp 0xb9fb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x928(%rsp)
movl %eax, 0x924(%rsp)
leaq 0x888(%rsp), %rdi
callq 0xab18
leaq 0x887(%rsp), %rdi
callq 0xa560
leaq 0x8b0(%rsp), %rdi
callq 0xab18
leaq 0x8af(%rsp), %rdi
callq 0xa560
jmp 0xcae6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x928(%rsp)
movl %eax, 0x924(%rsp)
jmp 0xcad9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x928(%rsp)
movl %eax, 0x924(%rsp)
jmp 0xbae3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x928(%rsp)
movl %eax, 0x924(%rsp)
jmp 0xba90
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x928(%rsp)
movl %eax, 0x924(%rsp)
leaq 0x780(%rsp), %rdi
callq 0xd880
leaq 0x708(%rsp), %rdi
callq 0xd890
jmp 0xbae3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x928(%rsp)
movl %eax, 0x924(%rsp)
jmp 0xbad6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x928(%rsp)
movl %eax, 0x924(%rsp)
leaq 0x6e8(%rsp), %rdi
callq 0xab18
leaq 0x6e7(%rsp), %rdi
callq 0xa560
movl 0x924(%rsp), %eax
movl $0x1, %ecx
cmpl %ecx, %eax
jne 0xcacc
movq 0x928(%rsp), %rdi
callq 0xa1d0
movq %rax, 0x6d8(%rsp)
movq 0x404d5(%rip), %rdi     # 0x4bfe8
leaq 0x2ac99(%rip), %rsi     # 0x367b3
callq 0xa510
movq %rax, 0x188(%rsp)
jmp 0xbb29
movq 0x6d8(%rsp), %rdi
movq (%rdi), %rax
movq 0x10(%rax), %rax
callq *%rax
movq 0x188(%rsp), %rdi
movq %rax, %rsi
callq 0xa510
movq %rax, 0x180(%rsp)
jmp 0xbb54
movq 0x180(%rsp), %rdi
movq 0x403fd(%rip), %rsi     # 0x4bf60
callq 0xa540
jmp 0xbb6a
movl $0x1, 0x9e4(%rsp)
movl $0x1, 0x6e0(%rsp)
callq 0xa8f0
jmp 0xbbb3
leaq 0x7a8(%rsp), %rdi
callq 0xa2f0
jmp 0xbb96
jmp 0xbbd6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x928(%rsp)
movl %eax, 0x924(%rsp)
callq 0xa8f0
jmp 0xbbd1
jmp 0xca6f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x928(%rsp)
movl %eax, 0x924(%rsp)
jmp 0xcacc
jmp 0xcacc
movq $0x0, 0x6d0(%rsp)
leaq 0x7b8(%rsp), %rax
movq %rax, 0x170(%rsp)
leaq 0x6af(%rsp), %rdi
movq %rdi, 0x178(%rsp)
callq 0xa9d0
movq 0x178(%rsp), %rdx
leaq 0x2aa4a(%rip), %rsi     # 0x36660
leaq 0x6b0(%rsp), %rdi
callq 0xa750
jmp 0xbc25
movq 0x170(%rsp), %rdi
leaq 0x6b0(%rsp), %rsi
callq 0xd8a0
movq %rax, 0x168(%rsp)
jmp 0xbc44
leaq 0x6b0(%rsp), %rdi
callq 0xab18
leaq 0x6af(%rsp), %rdi
callq 0xa560
movq 0x168(%rsp), %rax
cmpq $0x0, %rax
je 0xbdb1
leaq 0x687(%rsp), %rdi
movq %rdi, 0x160(%rsp)
callq 0xa9d0
movq 0x160(%rsp), %rdx
leaq 0x2a9cc(%rip), %rsi     # 0x36660
leaq 0x688(%rsp), %rdi
callq 0xa750
jmp 0xbca3
leaq 0x7a8(%rsp), %rdi
leaq 0x688(%rsp), %rsi
callq 0xd900
movq %rax, 0x158(%rsp)
jmp 0xbcc2
movq 0x158(%rsp), %rdi
callq 0xd930
movq %rax, 0x150(%rsp)
jmp 0xbcd9
movq 0x150(%rsp), %rdi
callq 0xb200
movq %rax, 0x148(%rsp)
jmp 0xbcf0
movq 0x148(%rsp), %rax
movq %rax, 0x6d0(%rsp)
leaq 0x688(%rsp), %rdi
callq 0xab18
leaq 0x687(%rsp), %rdi
callq 0xa560
jmp 0xbdb1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x928(%rsp)
movl %eax, 0x924(%rsp)
jmp 0xbd56
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x928(%rsp)
movl %eax, 0x924(%rsp)
leaq 0x6b0(%rsp), %rdi
callq 0xab18
leaq 0x6af(%rsp), %rdi
callq 0xa560
jmp 0xcacc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x928(%rsp)
movl %eax, 0x924(%rsp)
jmp 0xbd9f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x928(%rsp)
movl %eax, 0x924(%rsp)
leaq 0x688(%rsp), %rdi
callq 0xab18
leaq 0x687(%rsp), %rdi
callq 0xa560
jmp 0xcacc
leaq 0x7b8(%rsp), %rax
movq %rax, 0x138(%rsp)
leaq 0x65f(%rsp), %rdi
movq %rdi, 0x140(%rsp)
callq 0xa9d0
movq 0x140(%rsp), %rdx
leaq 0x2a9d9(%rip), %rsi     # 0x367be
leaq 0x660(%rsp), %rdi
callq 0xa750
jmp 0xbdf4
movq 0x138(%rsp), %rdi
leaq 0x660(%rsp), %rsi
callq 0xd8a0
movq %rax, 0x130(%rsp)
jmp 0xbe13
leaq 0x660(%rsp), %rdi
callq 0xab18
leaq 0x65f(%rsp), %rdi
callq 0xa560
movq 0x130(%rsp), %rax
cmpq $0x0, %rax
je 0xbfcd
leaq 0x7b8(%rsp), %rax
movq %rax, 0x120(%rsp)
leaq 0x637(%rsp), %rdi
movq %rdi, 0x128(%rsp)
callq 0xa9d0
movq 0x128(%rsp), %rdx
leaq 0x2a7ed(%rip), %rsi     # 0x36660
leaq 0x638(%rsp), %rdi
callq 0xa750
jmp 0xbe82
movq 0x120(%rsp), %rdi
leaq 0x638(%rsp), %rsi
callq 0xd8a0
movq %rax, 0x118(%rsp)
jmp 0xbea1
movq 0x118(%rsp), %rax
cmpq $0x0, %rax
setne %al
xorb $-0x1, %al
movb %al, 0x117(%rsp)
leaq 0x638(%rsp), %rdi
callq 0xab18
leaq 0x637(%rsp), %rdi
callq 0xa560
movb 0x117(%rsp), %al
testb $0x1, %al
jne 0xbee3
jmp 0xbfc3
movq 0x400fe(%rip), %rdi     # 0x4bfe8
leaq 0x2a8d3(%rip), %rsi     # 0x367c4
callq 0xa510
movq %rax, 0x108(%rsp)
jmp 0xbf00
movq 0x108(%rsp), %rdi
movq 0x40051(%rip), %rsi     # 0x4bf60
callq 0xa540
jmp 0xbf16
movl $0x1, 0x9e4(%rsp)
movl $0x1, 0x6e0(%rsp)
jmp 0xca6f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x928(%rsp)
movl %eax, 0x924(%rsp)
jmp 0xbf68
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x928(%rsp)
movl %eax, 0x924(%rsp)
leaq 0x660(%rsp), %rdi
callq 0xab18
leaq 0x65f(%rsp), %rdi
callq 0xa560
jmp 0xcacc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x928(%rsp)
movl %eax, 0x924(%rsp)
jmp 0xbfb1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x928(%rsp)
movl %eax, 0x924(%rsp)
leaq 0x638(%rsp), %rdi
callq 0xab18
leaq 0x637(%rsp), %rdi
callq 0xa560
jmp 0xcacc
movb $0x1, 0x900(%rsp)
jmp 0xbfcd
leaq 0x7b8(%rsp), %rax
movq %rax, 0xf8(%rsp)
leaq 0x60f(%rsp), %rdi
movq %rdi, 0x100(%rsp)
callq 0xa9d0
movq 0x100(%rsp), %rdx
leaq 0x2a7f4(%rip), %rsi     # 0x367f5
leaq 0x610(%rsp), %rdi
callq 0xa750
jmp 0xc010
movq 0xf8(%rsp), %rdi
leaq 0x610(%rsp), %rsi
callq 0xd8a0
movq %rax, 0xf0(%rsp)
jmp 0xc02f
leaq 0x610(%rsp), %rdi
callq 0xab18
leaq 0x60f(%rsp), %rdi
callq 0xa560
movq 0xf0(%rsp), %rax
cmpq $0x0, %rax
je 0xc0aa
movb $0x1, 0x901(%rsp)
jmp 0xc0aa
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x928(%rsp)
movl %eax, 0x924(%rsp)
jmp 0xc098
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x928(%rsp)
movl %eax, 0x924(%rsp)
leaq 0x610(%rsp), %rdi
callq 0xab18
leaq 0x60f(%rsp), %rdi
callq 0xa560
jmp 0xcacc
leaq 0x7b8(%rsp), %rax
movq %rax, 0xe0(%rsp)
leaq 0x5e7(%rsp), %rdi
movq %rdi, 0xe8(%rsp)
callq 0xa9d0
movq 0xe8(%rsp), %rdx
leaq 0x2a71d(%rip), %rsi     # 0x367fb
leaq 0x5e8(%rsp), %rdi
callq 0xa750
jmp 0xc0ed
movq 0xe0(%rsp), %rdi
leaq 0x5e8(%rsp), %rsi
callq 0xd8a0
movq %rax, 0xd8(%rsp)
jmp 0xc10c
leaq 0x5e8(%rsp), %rdi
callq 0xab18
leaq 0x5e7(%rsp), %rdi
callq 0xa560
movq 0xd8(%rsp), %rax
cmpq $0x0, %rax
je 0xc187
movb $0x1, 0x902(%rsp)
jmp 0xc187
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x928(%rsp)
movl %eax, 0x924(%rsp)
jmp 0xc175
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x928(%rsp)
movl %eax, 0x924(%rsp)
leaq 0x5e8(%rsp), %rdi
callq 0xab18
leaq 0x5e7(%rsp), %rdi
callq 0xa560
jmp 0xcacc
leaq 0x2a678(%rip), %rsi     # 0x36806
leaq 0x420(%rsp), %rdi
callq 0xd940
jmp 0xc19d
leaq 0x2a67b(%rip), %rdx     # 0x3681f
leaq 0x400(%rsp), %rdi
leaq 0x8e0(%rsp), %rsi
callq 0xdb20
jmp 0xc1bb
leaq 0x420(%rsp), %rdi
leaq 0x400(%rsp), %rsi
callq 0xdaf0
movq %rax, 0xd0(%rsp)
jmp 0xc1da
movq 0xd0(%rsp), %rdi
leaq 0x6d0(%rsp), %rsi
callq 0xdd10
movq %rax, 0xc8(%rsp)
jmp 0xc1f9
movq 0xc8(%rsp), %rsi
leaq 0x500(%rsp), %rdi
callq 0xdd40
jmp 0xc210
leaq 0x400(%rsp), %rdi
callq 0xab18
leaq 0x420(%rsp), %rdi
callq 0xdea0
leaq 0x368(%rsp), %rdi
leaq 0x500(%rsp), %rsi
callq 0xdf00
jmp 0xc241
movq 0x6d0(%rsp), %rdx
leaq 0x388(%rsp), %rdi
leaq 0x368(%rsp), %rsi
leaq 0x900(%rsp), %rcx
callq 0x2e7f0
jmp 0xc268
leaq 0x368(%rsp), %rdi
callq 0xab18
leaq 0x8e0(%rsp), %rax
movq %rax, 0x360(%rsp)
movq 0x360(%rsp), %rdi
callq 0xdf30
movq %rax, 0x358(%rsp)
movq 0x360(%rsp), %rdi
callq 0xdf60
movq %rax, 0x350(%rsp)
leaq 0x358(%rsp), %rdi
leaq 0x350(%rsp), %rsi
callq 0xdf90
testb $0x1, %al
jne 0xc2cd
jmp 0xca28
leaq 0x358(%rsp), %rdi
callq 0xdfd0
movq %rax, 0x348(%rsp)
movq 0x348(%rsp), %rsi
leaq 0x328(%rsp), %rdi
callq 0xe010
jmp 0xc2f9
leaq 0x328(%rsp), %rdi
callq 0xdfe0
movb %al, 0xc7(%rsp)
jmp 0xc30f
leaq 0x328(%rsp), %rdi
callq 0xd290
movb 0xc7(%rsp), %al
testb $0x1, %al
jne 0xc32c
jmp 0xc9e4
leaq 0x7b8(%rsp), %rax
movq %rax, 0xb0(%rsp)
leaq 0x307(%rsp), %rdi
movq %rdi, 0xb8(%rsp)
callq 0xa9d0
movq 0xb8(%rsp), %rdx
leaq 0x2a4c2(%rip), %rsi     # 0x36822
leaq 0x308(%rsp), %rdi
callq 0xa750
jmp 0xc36f
movq 0xb0(%rsp), %rdi
leaq 0x308(%rsp), %rsi
callq 0xd8a0
movq %rax, 0xa8(%rsp)
jmp 0xc38e
movq 0xa8(%rsp), %rax
cmpq $0x0, %rax
setne %al
xorb $-0x1, %al
movb %al, 0xa7(%rsp)
leaq 0x308(%rsp), %rdi
callq 0xab18
leaq 0x307(%rsp), %rdi
callq 0xa560
movb 0xa7(%rsp), %al
testb $0x1, %al
jne 0xc3d0
jmp 0xc555
movq 0x3fc11(%rip), %rdi     # 0x4bfe8
leaq 0x2a3d5(%rip), %rsi     # 0x367b3
callq 0xa510
movq %rax, 0x98(%rsp)
jmp 0xc3ed
movq 0x98(%rsp), %rdi
movq 0x348(%rsp), %rsi
callq 0xa490
movq %rax, 0x90(%rsp)
jmp 0xc40c
movq 0x90(%rsp), %rdi
leaq 0x2a411(%rip), %rsi     # 0x3682c
callq 0xa510
movq %rax, 0x88(%rsp)
jmp 0xc42a
movq 0x88(%rsp), %rdi
movq 0x3fb27(%rip), %rsi     # 0x4bf60
callq 0xa540
jmp 0xc440
jmp 0xca16
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x928(%rsp)
movl %eax, 0x924(%rsp)
jmp 0xc47c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x928(%rsp)
movl %eax, 0x924(%rsp)
leaq 0x400(%rsp), %rdi
callq 0xab18
leaq 0x420(%rsp), %rdi
callq 0xdea0
jmp 0xcacc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x928(%rsp)
movl %eax, 0x924(%rsp)
jmp 0xcabf
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x928(%rsp)
movl %eax, 0x924(%rsp)
leaq 0x368(%rsp), %rdi
callq 0xab18
jmp 0xcabf
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x928(%rsp)
movl %eax, 0x924(%rsp)
jmp 0xcab2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x928(%rsp)
movl %eax, 0x924(%rsp)
leaq 0x328(%rsp), %rdi
callq 0xd290
jmp 0xcab2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x928(%rsp)
movl %eax, 0x924(%rsp)
jmp 0xc543
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x928(%rsp)
movl %eax, 0x924(%rsp)
leaq 0x308(%rsp), %rdi
callq 0xab18
leaq 0x307(%rsp), %rdi
callq 0xa560
jmp 0xcab2
movq 0x348(%rsp), %rsi
leaq 0x2d8(%rsp), %rdi
callq 0xe010
jmp 0xc56c
leaq 0x2f8(%rsp), %rdi
leaq 0x2d8(%rsp), %rsi
callq 0xe040
jmp 0xc583
leaq 0x2d8(%rsp), %rdi
callq 0xd290
leaq 0x2d0(%rsp), %rdi
callq 0xe0a0
leaq 0x2f8(%rsp), %rdi
leaq 0x2d0(%rsp), %rsi
callq 0xe0b0
movb %al, 0x87(%rsp)
jmp 0xc5bb
movb 0x87(%rsp), %al
testb $0x1, %al
jne 0xc631
jmp 0xc5c8
movl $0x4, 0x6e0(%rsp)
leaq 0x2d0(%rsp), %rdi
callq 0xe190
leaq 0x2f8(%rsp), %rdi
callq 0xe190
jmp 0xc9e0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x928(%rsp)
movl %eax, 0x924(%rsp)
leaq 0x2d8(%rsp), %rdi
callq 0xd290
jmp 0xcab2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x928(%rsp)
movl %eax, 0x924(%rsp)
jmp 0xc9c1
leaq 0x2f8(%rsp), %rdi
callq 0xe100
movq %rax, 0x78(%rsp)
jmp 0xc645
movq 0x78(%rsp), %rdi
callq 0xe120
movq %rax, %rdi
callq 0xdfe0
movb %al, 0x77(%rsp)
jmp 0xc65d
movb 0x77(%rsp), %al
testb $0x1, %al
jne 0xc66a
jmp 0xc7ec
movb $0x0, 0x2ae(%rsp)
movb $0x0, 0x2ad(%rsp)
leaq 0x2f8(%rsp), %rdi
callq 0xe100
movq %rax, 0x68(%rsp)
jmp 0xc68e
movq 0x68(%rsp), %rdi
callq 0xe120
movq %rax, %rdi
callq 0xb140
movb %al, 0x67(%rsp)
jmp 0xc6a6
movb 0x67(%rsp), %cl
xorl %eax, %eax
testb $0x1, %cl
movb %al, 0x66(%rsp)
jne 0xc6b7
jmp 0xc72c
leaq 0x7b8(%rsp), %rax
movq %rax, 0x50(%rsp)
leaq 0x2af(%rsp), %rdi
movq %rdi, 0x58(%rsp)
callq 0xa9d0
movq 0x58(%rsp), %rdx
movb $0x1, 0x2ae(%rsp)
leaq 0x2a153(%rip), %rsi     # 0x3683d
leaq 0x2b0(%rsp), %rdi
callq 0xa750
jmp 0xc6f9
movq 0x50(%rsp), %rdi
movb $0x1, 0x2ad(%rsp)
leaq 0x2b0(%rsp), %rsi
callq 0xd8a0
movq %rax, 0x48(%rsp)
jmp 0xc71a
movq 0x48(%rsp), %rax
cmpq $0x0, %rax
setne %al
xorb $-0x1, %al
movb %al, 0x66(%rsp)
movb 0x66(%rsp), %al
movb %al, 0x47(%rsp)
testb $0x1, 0x2ad(%rsp)
jne 0xc740
jmp 0xc74d
leaq 0x2b0(%rsp), %rdi
callq 0xab18
testb $0x1, 0x2ae(%rsp)
jne 0xc759
jmp 0xc766
leaq 0x2af(%rsp), %rdi
callq 0xa560
movb 0x47(%rsp), %al
testb $0x1, %al
jne 0xc770
jmp 0xc7e7
leaq 0x2f8(%rsp), %rdi
movl $0x1, %esi
callq 0xe130
jmp 0xc7e7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x928(%rsp)
movl %eax, 0x924(%rsp)
jmp 0xc7c9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x928(%rsp)
movl %eax, 0x924(%rsp)
testb $0x1, 0x2ad(%rsp)
jne 0xc7ba
jmp 0xc7c7
leaq 0x2b0(%rsp), %rdi
callq 0xab18
jmp 0xc7c9
testb $0x1, 0x2ae(%rsp)
jne 0xc7d5
jmp 0xc7e2
leaq 0x2af(%rsp), %rdi
callq 0xa560
jmp 0xc9c1
jmp 0xc9ad
movb $0x0, 0x286(%rsp)
movb $0x0, 0x285(%rsp)
leaq 0x2f8(%rsp), %rdi
callq 0xe100
movq %rax, 0x38(%rsp)
jmp 0xc810
movq 0x38(%rsp), %rdi
callq 0xe120
movq %rax, %rdi
callq 0xb140
movb %al, 0x37(%rsp)
jmp 0xc828
movb 0x37(%rsp), %cl
movb $0x1, %al
testb $0x1, %cl
movb %al, 0x36(%rsp)
jne 0xc839
jmp 0xc8ac
leaq 0x7b8(%rsp), %rax
movq %rax, 0x20(%rsp)
leaq 0x287(%rsp), %rdi
movq %rdi, 0x28(%rsp)
callq 0xa9d0
movq 0x28(%rsp), %rdx
movb $0x1, 0x286(%rsp)
leaq 0x29fd1(%rip), %rsi     # 0x3683d
leaq 0x288(%rsp), %rdi
callq 0xa750
jmp 0xc87b
movq 0x20(%rsp), %rdi
movb $0x1, 0x285(%rsp)
leaq 0x288(%rsp), %rsi
callq 0xd8a0
movq %rax, 0x18(%rsp)
jmp 0xc89c
movq 0x18(%rsp), %rax
cmpq $0x0, %rax
setne %al
movb %al, 0x36(%rsp)
movb 0x36(%rsp), %al
movb %al, 0x17(%rsp)
testb $0x1, 0x285(%rsp)
jne 0xc8c0
jmp 0xc8cd
leaq 0x288(%rsp), %rdi
callq 0xab18
testb $0x1, 0x286(%rsp)
jne 0xc8d9
jmp 0xc8e6
leaq 0x287(%rsp), %rdi
callq 0xa560
movb 0x17(%rsp), %al
testb $0x1, %al
jne 0xc8f3
jmp 0xc9ab
leaq 0x2f8(%rsp), %rdi
callq 0xe100
movq %rax, 0x8(%rsp)
jmp 0xc907
movq 0x8(%rsp), %rdi
callq 0xe120
movq %rax, %rdi
callq 0xd280
movq %rax, (%rsp)
jmp 0xc91f
movq (%rsp), %rdi
movq 0x6d0(%rsp), %rsi
movl 0x8fc(%rsp), %ecx
leaq 0x900(%rsp), %rdx
leaq 0x388(%rsp), %r8
callq 0x320e0
jmp 0xc949
jmp 0xc9ab
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x928(%rsp)
movl %eax, 0x924(%rsp)
jmp 0xc990
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x928(%rsp)
movl %eax, 0x924(%rsp)
testb $0x1, 0x285(%rsp)
jne 0xc981
jmp 0xc98e
leaq 0x288(%rsp), %rdi
callq 0xab18
jmp 0xc990
testb $0x1, 0x286(%rsp)
jne 0xc99c
jmp 0xc9a9
leaq 0x287(%rsp), %rdi
callq 0xa560
jmp 0xc9c1
jmp 0xc9ad
leaq 0x2f8(%rsp), %rdi
callq 0xe160
jmp 0xc9bc
jmp 0xc59d
leaq 0x2d0(%rsp), %rdi
callq 0xe190
leaq 0x2f8(%rsp), %rdi
callq 0xe190
jmp 0xcab2
jmp 0xc9e2
jmp 0xca14
movq 0x348(%rsp), %rdi
movq 0x6d0(%rsp), %rsi
movl 0x8fc(%rsp), %ecx
leaq 0x900(%rsp), %rdx
leaq 0x388(%rsp), %r8
callq 0x320e0
jmp 0xca12
jmp 0xca14
jmp 0xca16
leaq 0x358(%rsp), %rdi
callq 0xe1a0
jmp 0xc2af
testb $0x1, 0x901(%rsp)
je 0xca4a
movq 0x3f577(%rip), %rdi     # 0x4bfb0
leaq 0x388(%rsp), %rsi
callq 0x2e8d0
jmp 0xca48
jmp 0xca4a
leaq 0x388(%rsp), %rdi
callq 0xe1c0
leaq 0x500(%rsp), %rdi
callq 0xdea0
movl $0x0, 0x6e0(%rsp)
leaq 0x7a8(%rsp), %rdi
callq 0xe1f0
leaq 0x848(%rsp), %rdi
callq 0xe250
leaq 0x8e0(%rsp), %rdi
callq 0xe280
leaq 0x958(%rsp), %rdi
callq 0xe2e0
movl 0x9e4(%rsp), %eax
addq $0x9e8, %rsp            # imm = 0x9E8
retq
leaq 0x388(%rsp), %rdi
callq 0xe1c0
leaq 0x500(%rsp), %rdi
callq 0xdea0
leaq 0x7a8(%rsp), %rdi
callq 0xe1f0
leaq 0x848(%rsp), %rdi
callq 0xe250
leaq 0x8e0(%rsp), %rdi
callq 0xe280
leaq 0x958(%rsp), %rdi
callq 0xe2e0
movq 0x928(%rsp), %rdi
callq 0xa9b0
movq %rax, %rdi
callq 0xd090
nopw %cs:(%rax,%rax)