// File: jansucan[P]diff-dd/src/main.cpp
// Function: main
int
main(int argc, char **argv)
{
    try {
        if (Options::Parser::isHelp(argc, argv)) {
            Options::printUsage();
        } else if (Options::Parser::isVersion(argc, argv)) {
            print_version();
        } else if (Options::Parser::isCreate(argc, argv)) {
            create(Options::Parser::parseCreate(argc, argv));
        } else if (Options::Parser::isRestore(argc, argv)) {
            restore(Options::Parser::parseRestore(argc, argv));
        } else {
            Options::printUsage();
            exit(1);
        }
    } catch (const Options::Error &e) {
        Options::printUsage();
        std::cerr << "ERROR: " << e.what() << std::endl;
        exit(1);
    } catch (const DiffddError &e) {
        std::cerr << "ERROR: " << e.what() << std::endl;
        exit(1);
    }

    exit(0);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x130, %rsp            # imm = 0x130
movl $0x0, -0x4(%rbp)
movl %edi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movl -0x8(%rbp), %edi
movq -0x10(%rbp), %rsi
callq 0xab40
movb %al, -0x109(%rbp)
jmp 0xa55d
movb -0x109(%rbp), %al
testb $0x1, %al
jne 0xa569
jmp 0xa586
callq 0xa870
jmp 0xa570
jmp 0xa7b8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
jmp 0xa68f
movl -0x8(%rbp), %edi
movq -0x10(%rbp), %rsi
callq 0xabf0
movb %al, -0x10a(%rbp)
jmp 0xa59a
movb -0x10a(%rbp), %al
testb $0x1, %al
jne 0xa5a6
jmp 0xa5b2
callq 0xa4e0
jmp 0xa5ad
jmp 0xa7b6
movl -0x8(%rbp), %edi
movq -0x10(%rbp), %rsi
callq 0xac40
movb %al, -0x10b(%rbp)
jmp 0xa5c6
movb -0x10b(%rbp), %al
testb $0x1, %al
jne 0xa5d2
jmp 0xa620
movl -0x8(%rbp), %esi
movq -0x10(%rbp), %rdx
leaq -0xa0(%rbp), %rdi
callq 0xace0
jmp 0xa5e7
leaq -0xa0(%rbp), %rdi
callq 0x6cf0
jmp 0xa5f5
leaq -0xa0(%rbp), %rdi
callq 0xa800
jmp 0xa7b4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
leaq -0xa0(%rbp), %rdi
callq 0xa800
jmp 0xa68f
movl -0x8(%rbp), %edi
movq -0x10(%rbp), %rsi
callq 0xac90
movb %al, -0x10c(%rbp)
jmp 0xa634
movb -0x10c(%rbp), %al
testb $0x1, %al
jne 0xa643
jmp 0xa7a1
movl -0x8(%rbp), %esi
movq -0x10(%rbp), %rdx
leaq -0xf8(%rbp), %rdi
callq 0xb770
jmp 0xa658
leaq -0xf8(%rbp), %rdi
callq 0xc740
jmp 0xa666
leaq -0xf8(%rbp), %rdi
callq 0xa840
jmp 0xa7b2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
leaq -0xf8(%rbp), %rdi
callq 0xa840
movl -0x1c(%rbp), %eax
movl %eax, -0x110(%rbp)
movl $0x2, %ecx
cmpl %ecx, %eax
jne 0xa71b
movq -0x18(%rbp), %rdi
callq 0x3100
movq %rax, -0x108(%rbp)
callq 0xa870
jmp 0xa6b8
movq 0xa931(%rip), %rdi      # 0x14ff0
leaq 0x40bf(%rip), %rsi      # 0xe785
callq 0x3290
movq %rax, -0x118(%rbp)
jmp 0xa6d4
movq -0x108(%rbp), %rdi
movq (%rdi), %rax
movq 0x10(%rax), %rax
callq *%rax
movq -0x118(%rbp), %rdi
movq %rax, %rsi
callq 0x3290
movq %rax, -0x120(%rbp)
jmp 0xa6fc
movq -0x120(%rbp), %rdi
movq 0xa88e(%rip), %rsi      # 0x14f98
callq 0x32d0
jmp 0xa711
movl $0x1, %edi
callq 0x3370
movl -0x110(%rbp), %eax
movl $0x1, %ecx
cmpl %ecx, %eax
jne 0xa7eb
movq -0x18(%rbp), %rdi
callq 0x3100
movq %rax, -0x100(%rbp)
movq 0xa8ab(%rip), %rdi      # 0x14ff0
leaq 0x4039(%rip), %rsi      # 0xe785
callq 0x3290
movq %rax, -0x128(%rbp)
jmp 0xa75a
movq -0x100(%rbp), %rdi
movq (%rdi), %rax
movq 0x10(%rax), %rax
callq *%rax
movq -0x128(%rbp), %rdi
movq %rax, %rsi
callq 0x3290
movq %rax, -0x130(%rbp)
jmp 0xa782
movq -0x130(%rbp), %rdi
movq 0xa808(%rip), %rsi      # 0x14f98
callq 0x32d0
jmp 0xa797
movl $0x1, %edi
callq 0x3370
callq 0xa870
jmp 0xa7a8
movl $0x1, %edi
callq 0x3370
jmp 0xa7b4
jmp 0xa7b6
jmp 0xa7b8
jmp 0xa7e4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
callq 0x3460
jmp 0xa7cd
jmp 0xa7eb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
callq 0x3460
jmp 0xa7e2
jmp 0xa7eb
xorl %edi, %edi
callq 0x3370
movq -0x18(%rbp), %rdi
callq 0x3490
movq %rax, %rdi
callq 0x4900
nopl (%rax)