// File: /workspace/github_cpp_makefile_star2_O2/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 %rbx
subq $0x248, %rsp            # imm = 0x248
movq %rsi, %rbx
movl %edi, %r14d
callq 0x27fd7
leaq 0x8b73(%rip), %rsi      # 0x31106
leaq -0xf8(%rbp), %rdi
leaq -0x260(%rbp), %rdx
callq 0xc1b0
leaq 0x8b5e(%rip), %rsi      # 0x3110b
leaq -0xd8(%rbp), %rdi
leaq -0x170(%rbp), %rdx
callq 0xc1b0
leaq -0xf8(%rbp), %rdi
leaq -0xd8(%rbp), %rsi
callq 0x2784c
leaq -0xd8(%rbp), %rdi
callq 0xc9a0
leaq -0xf8(%rbp), %rdi
callq 0xc9a0
leaq 0x8915(%rip), %rsi      # 0x30f07
leaq -0xb8(%rbp), %rdi
leaq -0x260(%rbp), %rdx
callq 0xc1b0
leaq 0x8b14(%rip), %rsi      # 0x31120
leaq -0x98(%rbp), %rdi
leaq -0x170(%rbp), %rdx
callq 0xc1b0
xorps %xmm0, %xmm0
leaq -0x190(%rbp), %rdx
movaps %xmm0, (%rdx)
leaq 0x2bb(%rip), %rax       # 0x288ee
movq %rax, 0x18(%rdx)
leaq 0x2f6(%rip), %rax       # 0x28934
movq %rax, 0x10(%rdx)
leaq -0xb8(%rbp), %rdi
leaq -0x98(%rbp), %rsi
callq 0x277da
leaq -0x190(%rbp), %rdi
callq 0x28a76
leaq -0x98(%rbp), %rdi
callq 0xc9a0
leaq -0xb8(%rbp), %rdi
callq 0xc9a0
leaq 0x8abd(%rip), %rsi      # 0x3113d
leaq -0x78(%rbp), %rdi
leaq -0x260(%rbp), %rdx
callq 0xc1b0
leaq 0x8aab(%rip), %rsi      # 0x31142
leaq -0x58(%rbp), %rdi
leaq -0x170(%rbp), %rdx
callq 0xc1b0
leaq -0x78(%rbp), %rdi
leaq -0x58(%rbp), %rsi
callq 0x2784c
leaq -0x58(%rbp), %rdi
callq 0xc9a0
leaq -0x78(%rbp), %rdi
callq 0xc9a0
leaq -0x260(%rbp), %rdi
movl %r14d, %esi
movq %rbx, %rdx
callq 0x278fa
leaq -0x6a0(%rip), %rax      # 0x2803f
leaq -0x28(%rbp), %rdx
movq %rax, (%rdx)
leaq 0x8a19(%rip), %rsi      # 0x31106
leaq -0x170(%rbp), %r14
movq %r14, %rdi
callq 0x28e74
leaq -0x148(%rbp), %r15
leaq -0x676(%rip), %rax      # 0x28094
leaq -0x38(%rbp), %rdx
movq %rax, (%rdx)
leaq 0x87ef(%rip), %rsi      # 0x30f07
movq %r15, %rdi
callq 0x28e9e
leaq -0x120(%rbp), %r15
leaq -0x39d(%rip), %rax      # 0x28391
leaq -0x30(%rbp), %rdx
movq %rax, (%rdx)
leaq 0x8a01(%rip), %rsi      # 0x3113d
movq %r15, %rdi
callq 0x28e74
leaq -0x1c0(%rbp), %rdi
leaq -0x170(%rbp), %rsi
pushq $0x3
popq %rdx
leaq -0x1a(%rbp), %rcx
leaq -0x19(%rbp), %r8
callq 0x28ec8
pushq $0x50
popq %rbx
leaq (%rbx,%rbp), %rdi
addq $-0x170, %rdi           # imm = 0xFE90
callq 0xc9a0
addq $-0x28, %rbx
cmpq $-0x28, %rbx
jne 0x28765
leaq 0x879d(%rip), %rsi      # 0x30f23
leaq -0x170(%rbp), %rdi
leaq -0x28(%rbp), %rdx
callq 0xc1b0
leaq -0x260(%rbp), %rdi
leaq -0x170(%rbp), %rsi
callq 0x20cf2
movq %rax, %rdi
callq 0x2abee
movq %rax, %rbx
leaq -0x170(%rbp), %rdi
callq 0xc9a0
leaq -0x1c0(%rbp), %rdi
movq %rbx, %rsi
callq 0x28f10
leaq -0x260(%rbp), %rdi
callq *(%rax)
leaq -0x1c0(%rbp), %rdi
callq 0x29074
leaq -0x260(%rbp), %rdi
callq 0x2115a
xorl %eax, %eax
addq $0x248, %rsp            # imm = 0x248
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
jmp 0x288b9
movq %rax, %rbx
pushq $0x50
popq %r14
leaq (%r14,%rbp), %rdi
addq $-0x170, %rdi           # imm = 0xFE90
callq 0xc9a0
addq $-0x28, %r14
cmpq $-0x28, %r14
jne 0x2880c
jmp 0x288d9
jmp 0x2882d
movq %rax, %rbx
addq $-0x28, %r15
movq %r15, %rdi
callq 0xc9a0
cmpq %r14, %r15
jne 0x28830
jmp 0x288d9
movq %rax, %rbx
jmp 0x288d9
movq %rax, %rbx
leaq -0x58(%rbp), %rdi
callq 0xc9a0
jmp 0x2885f
movq %rax, %rbx
leaq -0x78(%rbp), %rdi
jmp 0x288ad
jmp 0x288b4
movq %rax, %rbx
leaq -0x190(%rbp), %rdi
callq 0x28a76
leaq -0x98(%rbp), %rdi
callq 0xc9a0
jmp 0x28887
movq %rax, %rbx
leaq -0xb8(%rbp), %rdi
jmp 0x288ad
jmp 0x288b4
movq %rax, %rbx
leaq -0xd8(%rbp), %rdi
callq 0xc9a0
jmp 0x288a6
movq %rax, %rbx
leaq -0xf8(%rbp), %rdi
callq 0xc9a0
jmp 0x288e5
movq %rax, %rbx
jmp 0x288e5
movq %rax, %rbx
jmp 0x288cd
movq %rax, %rbx
leaq -0x170(%rbp), %rdi
callq 0xc9a0
leaq -0x1c0(%rbp), %rdi
callq 0x29074
leaq -0x260(%rbp), %rdi
callq 0x2115a
movq %rbx, %rdi
callq 0xc850
nop