// File: wichtounet[P]articles/src/boost_po/v1.cpp
// Function: main
int main(int argc, const char* argv[]){
    po::options_description description("MyTool Usage");

    description.add_options()
        ("help,h", "Display this help message")
        ("compression,c", po::value<int>()->default_value(5)->implicit_value(10),"Compression level")
        ("input-files", po::value<std::vector<std::string>>(), "Input files")
        ("version,v", "Display the version number");

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

    po::variables_map vm;
    po::store(po::command_line_parser(argc, argv).options(description).positional(p).run(), vm);
    po::notify(vm);

    if(vm.count("help")){
        std::cout << description;

        return 0;
    }

    if(vm.count("version")){
        std::cout << "MyTool Version 1.0" << std::endl;

        return 0;
    }

    if(vm.count("compression")){
        std::cout << "Compression level " << vm["compression"].as<int>() << std::endl;
    }

    if(vm.count("input-files")){
        std::vector<std::string> files = vm["input-files"].as<std::vector<std::string>>();
        for(std::string file : files){
            std::cout << "Input file " << file << std::endl;
        }
    }

    return 0;
}

// Assembly:
subq $0x4a8, %rsp            # imm = 0x4A8
movl $0x0, 0x4a4(%rsp)
movl %edi, 0x4a0(%rsp)
movq %rsi, 0x498(%rsp)
leaq 0x3f7(%rsp), %rdi
movq %rdi, 0x110(%rsp)
callq 0x5520
movq 0x110(%rsp), %rdx
leaq 0xe8df(%rip), %rsi      # 0x14004
leaq 0x3f8(%rsp), %rdi
callq 0x53d0
jmp 0x5734
movq 0x17855(%rip), %rax     # 0x1cf90
movl (%rax), %edx
movl %edx, %ecx
shrl %ecx
leaq 0x418(%rsp), %rdi
leaq 0x3f8(%rsp), %rsi
callq 0x53e0
jmp 0x5758
leaq 0x3f8(%rsp), %rdi
callq 0x55a8
leaq 0x3f7(%rsp), %rdi
callq 0x52e0
leaq 0x418(%rsp), %rdi
callq 0x5330
movq %rax, 0x108(%rsp)
jmp 0x5789
movq 0x108(%rsp), %rax
movq %rax, 0x3d8(%rsp)
leaq 0xe871(%rip), %rsi      # 0x14011
leaq 0xe871(%rip), %rdx      # 0x14018
leaq 0x3d8(%rsp), %rdi
callq 0x5540
movq %rax, 0x100(%rsp)
jmp 0x57be
callq 0x61c0
movq %rax, 0xf8(%rsp)
jmp 0x57cd
movq 0xf8(%rsp), %rdi
movl $0x5, 0x3d4(%rsp)
leaq 0x3d4(%rsp), %rsi
callq 0x61d0
movq %rax, 0xf0(%rsp)
jmp 0x57f7
movq 0xf0(%rsp), %rdi
movl $0xa, 0x3d0(%rsp)
leaq 0x3d0(%rsp), %rsi
callq 0x6250
movq %rax, 0xe8(%rsp)
jmp 0x5821
movq 0xe8(%rsp), %rdx
movq 0x100(%rsp), %rdi
leaq 0xe7fa(%rip), %rsi      # 0x14032
leaq 0xe801(%rip), %rcx      # 0x14040
callq 0x5570
movq %rax, 0xe0(%rsp)
jmp 0x584e
callq 0x62d0
movq %rax, 0xd8(%rsp)
jmp 0x585d
movq 0xd8(%rsp), %rdx
movq 0xe0(%rsp), %rdi
leaq 0xe7de(%rip), %rsi      # 0x14052
leaq 0xe7e3(%rip), %rcx      # 0x1405e
callq 0x5570
movq %rax, 0xd0(%rsp)
jmp 0x588a
movq 0xd0(%rsp), %rdi
leaq 0xe7d1(%rip), %rsi      # 0x1406a
leaq 0xe7d4(%rip), %rdx      # 0x14074
callq 0x5540
jmp 0x58a7
leaq 0x398(%rsp), %rdi
callq 0x53a0
jmp 0x58b6
leaq 0xe795(%rip), %rsi      # 0x14052
leaq 0x398(%rsp), %rdi
movl $0xffffffff, %edx       # imm = 0xFFFFFFFF
callq 0x52f0
jmp 0x58d1
leaq 0x2f8(%rsp), %rdi
callq 0x50f0
jmp 0x58e0
movl 0x4a0(%rsp), %esi
movq 0x498(%rsp), %rdx
leaq 0x258(%rsp), %rdi
callq 0x62e0
jmp 0x58fe
leaq 0x258(%rsp), %rdi
leaq 0x418(%rsp), %rsi
callq 0x6420
movq %rax, 0xc8(%rsp)
jmp 0x591d
movq 0xc8(%rsp), %rdi
leaq 0x398(%rsp), %rsi
callq 0x6460
movq %rax, 0xc0(%rsp)
jmp 0x593c
movq 0xc0(%rsp), %rsi
leaq 0x2d0(%rsp), %rdi
callq 0x6490
jmp 0x5953
leaq 0x2d0(%rsp), %rdi
leaq 0x2f8(%rsp), %rsi
xorl %edx, %edx
callq 0x54f0
jmp 0x596c
leaq 0x2d0(%rsp), %rdi
callq 0x6560
leaq 0x258(%rsp), %rdi
callq 0x6570
leaq 0x2f8(%rsp), %rdi
callq 0x5160
jmp 0x5995
leaq 0x308(%rsp), %rax
movq %rax, 0xb0(%rsp)
leaq 0x237(%rsp), %rdi
movq %rdi, 0xb8(%rsp)
callq 0x5520
movq 0xb8(%rsp), %rdx
leaq 0xe6c6(%rip), %rsi      # 0x1408f
leaq 0x238(%rsp), %rdi
callq 0x53d0
jmp 0x59d8
movq 0xb0(%rsp), %rdi
leaq 0x238(%rsp), %rsi
callq 0x6580
movq %rax, 0xa8(%rsp)
jmp 0x59f7
leaq 0x238(%rsp), %rdi
callq 0x55a8
leaq 0x237(%rsp), %rdi
callq 0x52e0
movq 0xa8(%rsp), %rax
cmpq $0x0, %rax
je 0x5b7a
movq 0x1759e(%rip), %rdi     # 0x1cfc8
leaq 0x418(%rsp), %rsi
callq 0x5080
jmp 0x5a39
movl $0x0, 0x4a4(%rsp)
movl $0x1, 0x230(%rsp)
jmp 0x6150
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x3e8(%rsp)
movl %eax, 0x3e4(%rsp)
jmp 0x5a8b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x3e8(%rsp)
movl %eax, 0x3e4(%rsp)
leaq 0x3f8(%rsp), %rdi
callq 0x55a8
leaq 0x3f7(%rsp), %rdi
callq 0x52e0
jmp 0x61ad
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x3e8(%rsp)
movl %eax, 0x3e4(%rsp)
jmp 0x61a0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x3e8(%rsp)
movl %eax, 0x3e4(%rsp)
jmp 0x6193
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x3e8(%rsp)
movl %eax, 0x3e4(%rsp)
jmp 0x6186
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x3e8(%rsp)
movl %eax, 0x3e4(%rsp)
jmp 0x5b1f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x3e8(%rsp)
movl %eax, 0x3e4(%rsp)
leaq 0x2d0(%rsp), %rdi
callq 0x6560
leaq 0x258(%rsp), %rdi
callq 0x6570
jmp 0x6186
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x3e8(%rsp)
movl %eax, 0x3e4(%rsp)
jmp 0x5b68
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x3e8(%rsp)
movl %eax, 0x3e4(%rsp)
leaq 0x238(%rsp), %rdi
callq 0x55a8
leaq 0x237(%rsp), %rdi
callq 0x52e0
jmp 0x6186
leaq 0x308(%rsp), %rax
movq %rax, 0x98(%rsp)
leaq 0x20f(%rsp), %rdi
movq %rdi, 0xa0(%rsp)
callq 0x5520
movq 0xa0(%rsp), %rdx
leaq 0xe4e6(%rip), %rsi      # 0x14094
leaq 0x210(%rsp), %rdi
callq 0x53d0
jmp 0x5bbd
movq 0x98(%rsp), %rdi
leaq 0x210(%rsp), %rsi
callq 0x6580
movq %rax, 0x90(%rsp)
jmp 0x5bdc
leaq 0x210(%rsp), %rdi
callq 0x55a8
leaq 0x20f(%rsp), %rdi
callq 0x52e0
movq 0x90(%rsp), %rax
cmpq $0x0, %rax
je 0x5c9f
movq 0x173b9(%rip), %rdi     # 0x1cfc8
leaq 0xe486(%rip), %rsi      # 0x1409c
callq 0x52a0
movq %rax, 0x88(%rsp)
jmp 0x5c25
movq 0x88(%rsp), %rdi
movq 0x17354(%rip), %rsi     # 0x1cf88
callq 0x52d0
jmp 0x5c3b
movl $0x0, 0x4a4(%rsp)
movl $0x1, 0x230(%rsp)
jmp 0x6150
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x3e8(%rsp)
movl %eax, 0x3e4(%rsp)
jmp 0x5c8d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x3e8(%rsp)
movl %eax, 0x3e4(%rsp)
leaq 0x210(%rsp), %rdi
callq 0x55a8
leaq 0x20f(%rsp), %rdi
callq 0x52e0
jmp 0x6186
leaq 0x308(%rsp), %rax
movq %rax, 0x78(%rsp)
leaq 0x1e7(%rsp), %rdi
movq %rdi, 0x80(%rsp)
callq 0x5520
movq 0x80(%rsp), %rdx
leaq 0xe3df(%rip), %rsi      # 0x140af
leaq 0x1e8(%rsp), %rdi
callq 0x53d0
jmp 0x5cdf
movq 0x78(%rsp), %rdi
leaq 0x1e8(%rsp), %rsi
callq 0x6580
movq %rax, 0x70(%rsp)
jmp 0x5cf8
leaq 0x1e8(%rsp), %rdi
callq 0x55a8
leaq 0x1e7(%rsp), %rdi
callq 0x52e0
movq 0x70(%rsp), %rax
cmpq $0x0, %rax
je 0x5e71
movq 0x172a0(%rip), %rdi     # 0x1cfc8
leaq 0xe38c(%rip), %rsi      # 0x140bb
callq 0x52a0
movq %rax, 0x68(%rsp)
jmp 0x5d3b
leaq 0x1bf(%rsp), %rdi
movq %rdi, 0x60(%rsp)
callq 0x5520
movq 0x60(%rsp), %rdx
leaq 0xe356(%rip), %rsi      # 0x140af
leaq 0x1c0(%rsp), %rdi
callq 0x53d0
jmp 0x5d68
leaq 0x2f8(%rsp), %rdi
leaq 0x1c0(%rsp), %rsi
callq 0x65e0
movq %rax, 0x58(%rsp)
jmp 0x5d84
movq 0x58(%rsp), %rdi
callq 0x6610
movq %rax, 0x50(%rsp)
jmp 0x5d95
movq 0x68(%rsp), %rdi
movq 0x50(%rsp), %rax
movl (%rax), %esi
callq 0x54e0
movq %rax, 0x48(%rsp)
jmp 0x5dad
movq 0x48(%rsp), %rdi
movq 0x171cf(%rip), %rsi     # 0x1cf88
callq 0x52d0
jmp 0x5dc0
leaq 0x1c0(%rsp), %rdi
callq 0x55a8
leaq 0x1bf(%rsp), %rdi
callq 0x52e0
jmp 0x5e71
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x3e8(%rsp)
movl %eax, 0x3e4(%rsp)
jmp 0x5e16
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x3e8(%rsp)
movl %eax, 0x3e4(%rsp)
leaq 0x1e8(%rsp), %rdi
callq 0x55a8
leaq 0x1e7(%rsp), %rdi
callq 0x52e0
jmp 0x6186
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x3e8(%rsp)
movl %eax, 0x3e4(%rsp)
jmp 0x5e5f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x3e8(%rsp)
movl %eax, 0x3e4(%rsp)
leaq 0x1c0(%rsp), %rdi
callq 0x55a8
leaq 0x1bf(%rsp), %rdi
callq 0x52e0
jmp 0x6186
leaq 0x308(%rsp), %rax
movq %rax, 0x38(%rsp)
leaq 0x197(%rsp), %rdi
movq %rdi, 0x40(%rsp)
callq 0x5520
movq 0x40(%rsp), %rdx
leaq 0xe1b6(%rip), %rsi      # 0x14052
leaq 0x198(%rsp), %rdi
callq 0x53d0
jmp 0x5eab
movq 0x38(%rsp), %rdi
leaq 0x198(%rsp), %rsi
callq 0x6580
movq %rax, 0x30(%rsp)
jmp 0x5ec4
leaq 0x198(%rsp), %rdi
callq 0x55a8
leaq 0x197(%rsp), %rdi
callq 0x52e0
movq 0x30(%rsp), %rax
cmpq $0x0, %rax
je 0x613a
leaq 0x157(%rsp), %rdi
movq %rdi, 0x28(%rsp)
callq 0x5520
movq 0x28(%rsp), %rdx
leaq 0xe147(%rip), %rsi      # 0x14052
leaq 0x158(%rsp), %rdi
callq 0x53d0
jmp 0x5f1a
leaq 0x2f8(%rsp), %rdi
leaq 0x158(%rsp), %rsi
callq 0x65e0
movq %rax, 0x20(%rsp)
jmp 0x5f36
movq 0x20(%rsp), %rdi
callq 0x6620
movq %rax, 0x18(%rsp)
jmp 0x5f47
movq 0x18(%rsp), %rsi
leaq 0x178(%rsp), %rdi
callq 0x6630
jmp 0x5f5b
leaq 0x158(%rsp), %rdi
callq 0x55a8
leaq 0x157(%rsp), %rdi
callq 0x52e0
leaq 0x178(%rsp), %rax
movq %rax, 0x148(%rsp)
movq 0x148(%rsp), %rdi
callq 0x6730
movq %rax, 0x140(%rsp)
movq 0x148(%rsp), %rdi
callq 0x6760
movq %rax, 0x138(%rsp)
leaq 0x140(%rsp), %rdi
leaq 0x138(%rsp), %rsi
callq 0x6790
testb $0x1, %al
jne 0x5fcd
jmp 0x611c
leaq 0x140(%rsp), %rdi
callq 0x67d0
movq %rax, %rsi
leaq 0x118(%rsp), %rdi
callq 0x5100
jmp 0x5fec
movq 0x16fd5(%rip), %rdi     # 0x1cfc8
leaq 0xe0d4(%rip), %rsi      # 0x140ce
callq 0x52a0
movq %rax, 0x10(%rsp)
jmp 0x6006
movq 0x10(%rsp), %rdi
leaq 0x118(%rsp), %rsi
callq 0x5270
movq %rax, 0x8(%rsp)
jmp 0x601f
movq 0x8(%rsp), %rdi
movq 0x16f5d(%rip), %rsi     # 0x1cf88
callq 0x52d0
jmp 0x6032
leaq 0x118(%rsp), %rdi
callq 0x55a8
leaq 0x140(%rsp), %rdi
callq 0x67e0
jmp 0x5faf
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x3e8(%rsp)
movl %eax, 0x3e4(%rsp)
jmp 0x6088
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x3e8(%rsp)
movl %eax, 0x3e4(%rsp)
leaq 0x198(%rsp), %rdi
callq 0x55a8
leaq 0x197(%rsp), %rdi
callq 0x52e0
jmp 0x6186
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x3e8(%rsp)
movl %eax, 0x3e4(%rsp)
jmp 0x60d1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x3e8(%rsp)
movl %eax, 0x3e4(%rsp)
leaq 0x158(%rsp), %rdi
callq 0x55a8
leaq 0x157(%rsp), %rdi
callq 0x52e0
jmp 0x6186
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x3e8(%rsp)
movl %eax, 0x3e4(%rsp)
jmp 0x612b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x3e8(%rsp)
movl %eax, 0x3e4(%rsp)
leaq 0x118(%rsp), %rdi
callq 0x55a8
jmp 0x612b
leaq 0x178(%rsp), %rdi
callq 0x6800
jmp 0x613a
leaq 0x178(%rsp), %rdi
callq 0x6800
jmp 0x6186
movl $0x0, 0x4a4(%rsp)
movl $0x1, 0x230(%rsp)
leaq 0x2f8(%rsp), %rdi
callq 0x6860
leaq 0x398(%rsp), %rdi
callq 0x68c0
leaq 0x418(%rsp), %rdi
callq 0x68f0
movl 0x4a4(%rsp), %eax
addq $0x4a8, %rsp            # imm = 0x4A8
retq
leaq 0x2f8(%rsp), %rdi
callq 0x6860
leaq 0x398(%rsp), %rdi
callq 0x68c0
leaq 0x418(%rsp), %rdi
callq 0x68f0
movq 0x3e8(%rsp), %rdi
callq 0x5500
nopw (%rax,%rax)