// File: /workspace/github_cpp_makefile_star2_O2/jansucan[P]diff-dd/src/options.cpp
// Function: Options::Parser::parseCreate(int, char**)
Create
Parser::parseCreate(int argc, char **argv)
{
    Create opts;

    // Skip the executable name. Do not skip the operation name. getopt expects
    // to start at an argument immediately preceding the possible options.
    argc -= 1;
    argv += 1;

    int ch;
    const char *arg_buffer_size = NULL;
    const char *arg_input_file = NULL;
    const char *arg_base_file = NULL;
    const char *arg_output_file = NULL;

    while ((ch = getopt(argc, argv, ":B:i:b:o:")) != -1) {
        switch (ch) {
        case 'B':
            arg_buffer_size = optarg;
            break;

        case 'i':
            arg_input_file = optarg;
            break;

        case 'b':
            arg_base_file = optarg;
            break;

        case 'o':
            arg_output_file = optarg;
            break;

        case ':':
            throw Error("missing argument for option '-" +
                        std::string(1, optopt) + "'");
        default:
            throw Error("unknown option '-" + std::string(1, optopt) + "'");
        }
    }

    argc -= optind;

    /* Convert numbers in the arguments */
    if ((arg_buffer_size != NULL) &&
        parseUnsigned(arg_buffer_size, &(opts.m_buffer_size))) {
        throw Error("incorrect buffer size");
    } else if (opts.m_buffer_size == 0) {
        throw Error("buffer size cannot be 0");
    }

    if (arg_input_file == NULL) {
        throw Error("missing input file");
    } else if (arg_base_file == NULL) {
        throw Error("missing base file");
    } else if (arg_output_file == NULL) {
        throw Error("missing output file");
    } else if (argc != 0) {
        throw Error("too many arguments");
    }

    opts.m_in_file_path = arg_input_file;
    opts.m_base_file_path = arg_base_file;
    opts.m_out_file_path = arg_output_file;

    return opts;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x98, %rsp
movq %rdx, %r14
movl %esi, %ebp
movq %rdi, 0x50(%rsp)
callq 0x5b6e
decl %ebp
addq $0x8, %r14
movq $0x0, 0x30(%rsp)
leaq 0x2b6a(%rip), %r12      # 0x880c
movq 0x72f7(%rip), %rbx      # 0xcfa0
xorl %r13d, %r13d
movq $0x0, 0x8(%rsp)
xorl %r15d, %r15d
movl %ebp, %edi
movq %r14, %rsi
movq %r12, %rdx
callq 0x3060
cmpl $0x42, %eax
jne 0x5ccf
movq (%rbx), %r15
jmp 0x5cb8
cmpl $-0x1, %eax
je 0x5d00
cmpl $0x62, %eax
je 0x5cfb
cmpl $0x69, %eax
je 0x5cf1
cmpl $0x6f, %eax
jne 0x5dae
movq (%rbx), %rax
movq %rax, 0x8(%rsp)
jmp 0x5cb8
movq (%rbx), %rax
movq %rax, 0x30(%rsp)
jmp 0x5cb8
movq (%rbx), %r13
jmp 0x5cb8
movq 0x8(%rsp), %rax
movq %rax, 0x38(%rsp)
movq %r13, 0x40(%rsp)
movq 0x30(%rsp), %r12
movq %r12, 0x48(%rsp)
movq 0x72b0(%rip), %rax      # 0xcfd0
movl (%rax), %ebx
testq %r15, %r15
movq 0x50(%rsp), %r14
je 0x5d3f
movq %r15, %rdi
movq %r14, %rsi
callq 0x613a
testl %eax, %eax
jne 0x6073
cmpl $0x0, (%r14)
je 0x5ef5
testq %r12, %r12
je 0x5f42
testq %r13, %r13
je 0x5f8f
cmpq $0x0, 0x8(%rsp)
je 0x5fdc
cmpl %ebx, %ebp
jne 0x6029
leaq 0x8(%r14), %rdi
leaq 0x48(%rsp), %rsi
callq 0x6678
leaq 0x30(%r14), %rdi
leaq 0x40(%rsp), %rsi
callq 0x6678
leaq 0x58(%r14), %rdi
leaq 0x38(%rsp), %rsi
callq 0x6678
movq %r14, %rax
addq $0x98, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
cmpl $0x3a, %eax
jne 0x5e56
movq 0x8(%rsp), %rax
movq %rax, 0x38(%rsp)
movq %r13, 0x40(%rsp)
movq 0x30(%rsp), %rax
movq %rax, 0x48(%rsp)
pushq $0x10
popq %rdi
callq 0x3130
movq %rax, %r15
movq 0x71d6(%rip), %rax      # 0xcfb8
movsbl (%rax), %edx
leaq 0x88(%rsp), %rax
movq %rax, -0x10(%rax)
leaq 0x78(%rsp), %rdi
pushq $0x1
popq %rsi
callq 0x3240
leaq 0x2a11(%rip), %rsi      # 0x8816
leaq 0x58(%rsp), %rdi
leaq 0x78(%rsp), %rdx
callq 0x663d
leaq 0x2a1a(%rip), %rdx      # 0x8835
leaq 0x10(%rsp), %rdi
leaq 0x58(%rsp), %rsi
callq 0x661e
movb $0x1, %bl
leaq 0x10(%rsp), %rsi
movq %r15, %rdi
callq 0x6662
xorl %ebx, %ebx
leaq 0x6e5e(%rip), %rsi      # 0xcca0
movq 0x7167(%rip), %rdx      # 0xcfb0
movq %r15, %rdi
callq 0x3330
jmp 0x60bb
movq 0x8(%rsp), %rax
movq %rax, 0x38(%rsp)
movq %r13, 0x40(%rsp)
movq 0x30(%rsp), %rax
movq %rax, 0x48(%rsp)
pushq $0x10
popq %rdi
callq 0x3130
movq %rax, %r15
movq 0x7137(%rip), %rax      # 0xcfb8
movsbl (%rax), %edx
leaq 0x88(%rsp), %rax
movq %rax, -0x10(%rax)
leaq 0x78(%rsp), %rdi
pushq $0x1
popq %rsi
callq 0x3240
leaq 0x2993(%rip), %rsi      # 0x8837
leaq 0x58(%rsp), %rdi
leaq 0x78(%rsp), %rdx
callq 0x663d
leaq 0x297b(%rip), %rdx      # 0x8835
leaq 0x10(%rsp), %rdi
leaq 0x58(%rsp), %rsi
callq 0x661e
movb $0x1, %bl
leaq 0x10(%rsp), %rsi
movq %r15, %rdi
callq 0x6662
xorl %ebx, %ebx
leaq 0x6dbf(%rip), %rsi      # 0xcca0
movq 0x70c8(%rip), %rdx      # 0xcfb0
movq %r15, %rdi
callq 0x3330
jmp 0x60bb
pushq $0x10
popq %rdi
callq 0x3130
movq %rax, %r15
leaq 0x2958(%rip), %rsi      # 0x885f
leaq 0x10(%rsp), %rdi
leaq 0x58(%rsp), %rdx
callq 0x3e0e
movb $0x1, %bl
leaq 0x10(%rsp), %rsi
movq %r15, %rdi
callq 0x6662
xorl %ebx, %ebx
leaq 0x6d72(%rip), %rsi      # 0xcca0
movq 0x707b(%rip), %rdx      # 0xcfb0
movq %r15, %rdi
callq 0x3330
jmp 0x60bb
pushq $0x10
popq %rdi
callq 0x3130
movq %rax, %r15
leaq 0x2923(%rip), %rsi      # 0x8877
leaq 0x10(%rsp), %rdi
leaq 0x58(%rsp), %rdx
callq 0x3e0e
movb $0x1, %bl
leaq 0x10(%rsp), %rsi
movq %r15, %rdi
callq 0x6662
xorl %ebx, %ebx
leaq 0x6d25(%rip), %rsi      # 0xcca0
movq 0x702e(%rip), %rdx      # 0xcfb0
movq %r15, %rdi
callq 0x3330
jmp 0x60bb
pushq $0x10
popq %rdi
callq 0x3130
movq %rax, %r15
leaq 0x28e9(%rip), %rsi      # 0x888a
leaq 0x10(%rsp), %rdi
leaq 0x58(%rsp), %rdx
callq 0x3e0e
movb $0x1, %bl
leaq 0x10(%rsp), %rsi
movq %r15, %rdi
callq 0x6662
xorl %ebx, %ebx
leaq 0x6cd8(%rip), %rsi      # 0xcca0
movq 0x6fe1(%rip), %rdx      # 0xcfb0
movq %r15, %rdi
callq 0x3330
jmp 0x60bb
pushq $0x10
popq %rdi
callq 0x3130
movq %rax, %r15
leaq 0x28ae(%rip), %rsi      # 0x889c
leaq 0x10(%rsp), %rdi
leaq 0x58(%rsp), %rdx
callq 0x3e0e
movb $0x1, %bl
leaq 0x10(%rsp), %rsi
movq %r15, %rdi
callq 0x6662
xorl %ebx, %ebx
leaq 0x6c8b(%rip), %rsi      # 0xcca0
movq 0x6f94(%rip), %rdx      # 0xcfb0
movq %r15, %rdi
callq 0x3330
jmp 0x60bb
pushq $0x10
popq %rdi
callq 0x3130
movq %rax, %r15
leaq 0x2875(%rip), %rsi      # 0x88b0
leaq 0x10(%rsp), %rdi
leaq 0x58(%rsp), %rdx
callq 0x3e0e
movb $0x1, %bl
leaq 0x10(%rsp), %rsi
movq %r15, %rdi
callq 0x6662
xorl %ebx, %ebx
leaq 0x6c3e(%rip), %rsi      # 0xcca0
movq 0x6f47(%rip), %rdx      # 0xcfb0
movq %r15, %rdi
callq 0x3330
jmp 0x60bb
pushq $0x10
popq %rdi
callq 0x3130
movq %rax, %r15
leaq 0x27c4(%rip), %rsi      # 0x8849
leaq 0x10(%rsp), %rdi
leaq 0x58(%rsp), %rdx
callq 0x3e0e
movb $0x1, %bl
leaq 0x10(%rsp), %rsi
movq %r15, %rdi
callq 0x6662
xorl %ebx, %ebx
leaq 0x6bf4(%rip), %rsi      # 0xcca0
movq 0x6efd(%rip), %rdx      # 0xcfb0
movq %r15, %rdi
callq 0x3330
jmp 0x60cf
jmp 0x611d
jmp 0x60cf
jmp 0x611d
jmp 0x60cf
jmp 0x611d
jmp 0x60cf
jmp 0x611d
jmp 0x60cf
jmp 0x611d
movq %rax, %r14
leaq 0x10(%rsp), %rdi
jmp 0x6110
jmp 0x611d
movq %rax, %r14
jmp 0x6128
jmp 0x60e2
movq %rax, %r14
leaq 0x10(%rsp), %rdi
callq 0x3398
jmp 0x60f8
jmp 0x60f3
movq %rax, %r14
movb $0x1, %bl
leaq 0x58(%rsp), %rdi
callq 0x3398
jmp 0x610b
jmp 0x6106
movq %rax, %r14
movb $0x1, %bl
leaq 0x78(%rsp), %rdi
callq 0x3398
testb %bl, %bl
jne 0x6120
jmp 0x6128
jmp 0x611d
movq %rax, %r14
movq %r15, %rdi
callq 0x3180
movq 0x50(%rsp), %rdi
callq 0x5a3a
movq %r14, %rdi
callq 0x3340