// File: /workspace/github_cpp_makefile_star2_O1/demon386[P]git-store/main.cpp
// Function: main
int main(int argc, char *argv[])
{
    check_git_cmd_available();
    command::add_subcommand("init", "Initialize git repo.");
    command::add_subcommand("write", "Write content into git repo.",
            [](po::options_description& subopts) {
            subopts.add_options()
            ("tree,t", "give tree's hash even given just one file")
            ("delete,d", "delete added files");
            });
    command::add_subcommand("read", "read content into current dir.");

    const po::variables_map options = command::parse_args(argc, argv);

    std::map<std::string, ProcessFuncT> process_func_map = {
        {"init", process_init_cmd},
        {"write", process_write_cmd},
        {"read", process_read_cmd}
    };

    const auto& cmd = options["command"].as<std::string>();
    auto func = process_func_map.at(cmd);
    func(options);
    return 0;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x238, %rsp            # imm = 0x238
movq %rsi, %rbx
movl %edi, %r14d
callq 0x2da15
leaq -0x100(%rbp), %r15
movq %r15, -0x10(%r15)
leaq 0x8d79(%rip), %rsi      # 0x37066
leaq 0x8d76(%rip), %rdx      # 0x3706a
leaq -0x110(%rbp), %rdi
callq 0xf97e
leaq -0xe0(%rbp), %r12
movq %r12, -0x10(%r12)
leaq 0x8d58(%rip), %rsi      # 0x3706b
leaq 0x8d65(%rip), %rdx      # 0x3707f
leaq -0xf0(%rbp), %rdi
callq 0xf97e
leaq -0x110(%rbp), %rdi
leaq -0xf0(%rbp), %rsi
callq 0x2cf45
movq -0xf0(%rbp), %rdi
cmpq %r12, %rdi
je 0x2e34a
callq 0xb430
movq -0x110(%rbp), %rdi
cmpq %r15, %rdi
je 0x2e35b
callq 0xb430
leaq -0xc0(%rbp), %r15
movq %r15, -0x10(%r15)
leaq 0x8afa(%rip), %rsi      # 0x36e67
leaq 0x8af8(%rip), %rdx      # 0x36e6c
leaq -0xd0(%rbp), %rdi
callq 0xf97e
leaq -0xa0(%rbp), %r12
movq %r12, -0x10(%r12)
leaq 0x8ced(%rip), %rsi      # 0x37080
leaq 0x8d02(%rip), %rdx      # 0x3709c
leaq -0xb0(%rbp), %rdi
callq 0xf97e
xorps %xmm0, %xmm0
leaq -0x50(%rbp), %rdx
movaps %xmm0, (%rdx)
leaq 0x3b5(%rip), %rax       # 0x2e76c
movq %rax, 0x18(%rdx)
leaq 0x3f0(%rip), %rax       # 0x2e7b2
movq %rax, 0x10(%rdx)
leaq -0xd0(%rbp), %rdi
leaq -0xb0(%rbp), %rsi
callq 0x2ce26
movq -0x40(%rbp), %rax
testq %rax, %rax
je 0x2e3f0
leaq -0x50(%rbp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
movq -0xb0(%rbp), %rdi
cmpq %r12, %rdi
je 0x2e401
callq 0xb430
movq -0xd0(%rbp), %rdi
cmpq %r15, %rdi
je 0x2e412
callq 0xb430
leaq -0x80(%rbp), %r15
movq %r15, -0x10(%r15)
leaq 0x8c7c(%rip), %rsi      # 0x3709d
leaq 0x8c79(%rip), %rdx      # 0x370a1
leaq -0x90(%rbp), %rdi
callq 0xf97e
leaq -0x60(%rbp), %r12
movq %r12, -0x10(%r12)
leaq 0x8c5e(%rip), %rsi      # 0x370a2
leaq 0x8c75(%rip), %rdx      # 0x370c0
leaq -0x70(%rbp), %rdi
callq 0xf97e
leaq -0x90(%rbp), %rdi
leaq -0x70(%rbp), %rsi
callq 0x2cf45
movq -0x70(%rbp), %rdi
cmpq %r12, %rdi
je 0x2e472
callq 0xb430
movq -0x90(%rbp), %rdi
cmpq %r15, %rdi
je 0x2e483
callq 0xb430
leaq -0x258(%rbp), %rdi
movl %r14d, %esi
movq %rbx, %rdx
callq 0x2d094
leaq -0x178(%rbp), %r12
movq %r12, -0x10(%r12)
leaq 0x8bbe(%rip), %rsi      # 0x37066
leaq 0x8bbb(%rip), %rdx      # 0x3706a
leaq -0x188(%rbp), %r15
movq %r15, %rdi
callq 0xf97e
leaq -0xa34(%rip), %rax      # 0x2da91
leaq -0x160(%rbp), %r14
movq %rax, -0x8(%r14)
leaq -0x150(%rbp), %rax
movq %rax, -0x10(%rax)
leaq 0x8985(%rip), %rsi      # 0x36e67
leaq 0x8983(%rip), %rdx      # 0x36e6c
movq %r14, %rdi
callq 0xf97e
leaq -0x9d5(%rip), %rax      # 0x2db23
leaq -0x138(%rbp), %r14
movq %rax, -0x8(%r14)
leaq -0x128(%rbp), %r13
movq %r13, -0x10(%r13)
leaq 0x8b88(%rip), %rsi      # 0x3709d
leaq 0x8b85(%rip), %rdx      # 0x370a1
movq %r14, %rdi
callq 0xf97e
leaq -0x52d(%rip), %rax      # 0x2dffe
leaq -0x188(%rbp), %rsi
movq %rax, 0x70(%rsi)
leaq -0x1b8(%rbp), %rdi
leaq -0x2a(%rbp), %rcx
leaq -0x29(%rbp), %r8
movl $0x3, %edx
callq 0x2ec14
leaq -0x128(%rbp), %rbx
xorl %r14d, %r14d
movq -0x138(%rbp,%r14), %rdi
leaq (%rbx,%r14), %rax
cmpq %rdi, %rax
je 0x2e56f
callq 0xb430
addq $-0x28, %r14
cmpq $-0x78, %r14
jne 0x2e559
leaq -0x188(%rbp), %rdi
movq %r12, (%rdi)
leaq 0x88f9(%rip), %rsi      # 0x36e83
leaq 0x88f9(%rip), %rdx      # 0x36e8a
callq 0xf97e
leaq -0x258(%rbp), %rdi
leaq -0x188(%rbp), %rsi
callq 0x24f3e
movq %rax, %rdi
callq 0x31436
movq %rax, %rbx
movq -0x188(%rbp), %rdi
cmpq %r12, %rdi
je 0x2e5c5
callq 0xb430
leaq -0x1b8(%rbp), %rdi
movq %rbx, %rsi
callq 0x2ec98
leaq -0x258(%rbp), %rdi
callq *(%rax)
leaq -0x1b8(%rbp), %rdi
callq 0x2edb8
leaq 0x1cc88(%rip), %rax     # 0x4b278
addq $0x10, %rax
leaq -0x1e8(%rbp), %rdi
movq %rax, -0x70(%rdi)
callq 0xf7a4
leaq -0x218(%rbp), %rdi
callq 0x13a3e
leaq -0x248(%rbp), %rdi
callq 0x253de
xorl %eax, %eax
addq $0x238, %rsp            # imm = 0x238
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0x2e6f2
jmp 0x2e732
movq %rax, %rbx
movq $-0x78, %r12
movq -0x10(%r13), %rdi
cmpq %rdi, %r13
je 0x2e652
callq 0xb430
addq $-0x28, %r13
addq $0x28, %r12
jne 0x2e644
movb $0x1, %al
jmp 0x2e671
jmp 0x2e662
movq %rax, %rbx
xorl %eax, %eax
jmp 0x2e671
movq %rax, %rbx
xorl %eax, %eax
movq %r15, %r14
cmpq %r14, %r15
sete %cl
orb %al, %cl
jne 0x2e757
leaq -0x188(%rbp), %r15
movq -0x28(%r14), %rdi
leaq -0x18(%r14), %rax
cmpq %rdi, %rax
je 0x2e698
callq 0xb430
addq $-0x28, %r14
cmpq %r15, %r14
jne 0x2e686
jmp 0x2e757
movq %rax, %rbx
movq -0x70(%rbp), %rdi
cmpq %r12, %rdi
je 0x2e6bc
callq 0xb430
jmp 0x2e6bc
movq %rax, %rbx
movq -0x90(%rbp), %rdi
jmp 0x2e726
movq %rax, %rbx
movq -0x40(%rbp), %rax
testq %rax, %rax
je 0x2e6df
leaq -0x50(%rbp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
movq -0xb0(%rbp), %rdi
cmpq %r12, %rdi
je 0x2e6fd
callq 0xb430
jmp 0x2e6fd
movq %rax, %rdi
callq 0xe997
movq %rax, %rbx
movq -0xd0(%rbp), %rdi
jmp 0x2e726
movq %rax, %rbx
movq -0xf0(%rbp), %rdi
cmpq %r12, %rdi
je 0x2e71f
callq 0xb430
jmp 0x2e71f
movq %rax, %rbx
movq -0x110(%rbp), %rdi
cmpq %r15, %rdi
je 0x2e763
callq 0xb430
jmp 0x2e763
movq %rax, %rbx
jmp 0x2e74b
movq %rax, %rbx
movq -0x188(%rbp), %rdi
cmpq %r12, %rdi
je 0x2e74b
callq 0xb430
leaq -0x1b8(%rbp), %rdi
callq 0x2edb8
leaq -0x258(%rbp), %rdi
callq 0x25348
movq %rbx, %rdi
callq 0xb7f0
nop