// File: /workspace/github_cpp_makefile_star2_O3/gdaws[P]process-monitor/program_arguments.cpp
// Function: program_arguments::parser::parse(int, char const**)
void parser::parse(int argc, const char ** argv)
{
    bool print_help = false;
    set_options_group(NULL);
    add_option('h', "help", "display this help and exit", print_help);
    
    std::vector<std::string> error_messages;
    
    for(int i = 1; i < argc; i++)
    {
        const char * arg = argv[i];
        
        if(arg[0] == '-')
        {
            if(arg[1] == '-')
            {
                const char * name_begin = arg + 2;
                const char * value = strstr(name_begin, "=");
                const char * name_end = 
                    (value ? value : name_begin + strlen(name_begin));
                
                verbose_names_iterator iter = 
                    m_verbose_names.find(std::string(name_begin, name_end));
                
                if(iter == m_verbose_names.end())
                {
                    std::stringstream format;
                    format<<"unknown option  '--"
                          <<std::string(name_begin, name_end)
                          <<"'";
                    error_messages.push_back(format.str());
                    continue;
                }
                
                option * opt = &(iter->second);
                
                if(value)
                {
                    if(!opt->value_name)
                    {
                        std::stringstream format;
                        format<<"option '--"
                              <<std::string(name_begin, name_end)
                              <<"' doesn't allow an argument";
                        error_messages.push_back(format.str());
                        continue;
                    }
                }
                else
                {
                    if(opt->value_name)
                    {
                        std::stringstream format;
                        format<<"option  '--"
                              <<std::string(name_begin, name_end)
                              <<"' requires an argument";
                        error_messages.push_back(format.str());
                        continue;
                    }
                }
                
                opt->binding->parse_value(value + 1);
            }
            else
            {
                names_iterator iter = m_names.find(arg[1]);
                
                if(iter == m_names.end())
                {
                    std::stringstream format;
                    format<<"unknown option  '-"<<arg[1]<<"'";
                    error_messages.push_back(format.str());
                    continue;
                }
                
                option * opt = &(iter->second);
                
                const char * value = "=";
                
                if(opt->value_name)
                {
                    value = argv[++i];
                    
                    if(!value || value[0] == '-')
                    {
                        std::stringstream format;
                        format<<"option  '-"<<arg[1]
                              <<"' requires an argument";
                        error_messages.push_back(format.str());
                        continue;
                    }
                }
                
                opt->binding->parse_value(value);
            }
        }
        else
        {
            if(m_next_argument == m_arguments.end())
            {
                if(m_argument_repeat_last)
                {
                    m_next_argument = m_arguments.begin() + 
                        (m_arguments.size() - m_argument_repeat_last);
                }
                else
                {
                    error_messages.push_back("too many arguments");
                    continue;
                }
            }
            
            (*m_next_argument).binding->parse_value(arg);
            m_next_argument++;
        }
    }
    
    if(print_help)
    {
        help(argv[0]);
        exit(0);
    }
    
    if(m_next_argument < m_arguments.end()  - m_argument_repeat_last)
    {
        for(; m_next_argument != m_arguments.end(); m_next_argument++)
        {
            std::stringstream format;
            format<<"missing "<<uppercase(m_next_argument->value_name)
                  <<" argument";
            error_messages.push_back(format.str());
        }
    }
    
    if(error_messages.size())
    {
        for(std::vector<std::string>::const_iterator iter 
                = error_messages.begin(); iter != error_messages.end(); iter++)
        {
            std::cerr<<argv[0]<<": "<<*iter<<std::endl;
        }
        exit(1);
    }
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x228, %rsp            # imm = 0x228
movq %rdx, 0x38(%rsp)
movl %esi, %ebp
movq %rdi, %r15
leaq 0x27(%rsp), %rbx
movb $0x0, (%rbx)
xorl %esi, %esi
callq 0x325e
movl $0x18, %edi
callq 0x21c0
leaq 0x5a09(%rip), %rcx      # 0x8d10
movq %rcx, (%rax)
movq %rbx, 0x8(%rax)
movl %ebp, %ebx
movb $0x1, 0x10(%rax)
leaq 0x2d59(%rip), %rdx      # 0x6074
leaq 0x2d57(%rip), %r8       # 0x6079
movq %r15, %rdi
movl $0x68, %esi
xorl %ecx, %ecx
movq %rax, %r9
callq 0x2c42
xorps %xmm0, %xmm0
movaps %xmm0, 0x40(%rsp)
movq $0x0, 0x50(%rsp)
cmpl $0x2, %ebp
jl 0x38ce
leaq 0x8(%r15), %rax
movq %rax, 0x68(%rsp)
leaq 0xa0(%rsp), %r13
leaq 0x80(%r13), %rax
movq %rax, 0x28(%rsp)
leaq 0x30(%r15), %rax
movq %rax, 0x98(%rsp)
leaq 0x38(%r15), %rax
movq %rax, 0x90(%rsp)
movl $0x1, %ebp
movl %ebx, 0x30(%rsp)
movslq %ebp, %rax
movq 0x38(%rsp), %rcx
movq (%rcx,%rax,8), %r12
cmpb $0x2d, (%r12)
jne 0x3502
movb 0x1(%r12), %dl
cmpb $0x2d, %dl
jne 0x355d
addq $0x2, %r12
movq %r12, %rdi
movl $0x3d, %esi
callq 0x20c0
movq %rax, %rbx
testq %rax, %rax
jne 0x33d5
movq %r12, %rdi
callq 0x20e0
addq %r12, %rax
movq %rax, %rdx
leaq 0xb0(%rsp), %rax
movq %rax, 0xa0(%rsp)
movq %r13, %rdi
movq %r12, %rsi
movq %rdx, 0x60(%rsp)
callq 0x4d04
movq 0x98(%rsp), %rdi
movq %r13, %r14
movq %r13, %rsi
callq 0x5b2e
movq %rax, %r13
movq 0xa0(%rsp), %rdi
leaq 0xb0(%rsp), %rax
cmpq %rax, %rdi
je 0x3433
movq 0xb0(%rsp), %rsi
incq %rsi
callq 0x21d0
cmpq 0x90(%rsp), %r13
je 0x3609
movq 0x50(%r13), %rax
testq %rbx, %rbx
je 0x3715
testq %rax, %rax
jne 0x37c9
movq %r14, %r13
movq %r14, %rdi
callq 0x2130
movl $0xa, %edx
leaq 0xb0(%rsp), %rdi
leaq 0x2c36(%rip), %rsi      # 0x60ac
callq 0x2200
movl 0x30(%rsp), %ebx
leaq 0x10(%rsp), %rax
movq %rax, (%rsp)
movq %rsp, %rdi
movq %r12, %rsi
movq 0x60(%rsp), %rdx
callq 0x4d04
movq (%rsp), %rsi
movq 0x8(%rsp), %rdx
leaq 0xb0(%rsp), %rdi
callq 0x2200
movl $0x1b, %edx
movq %rax, %rdi
leaq 0x2bfa(%rip), %rsi      # 0x60b7
callq 0x2200
movq (%rsp), %rdi
leaq 0x10(%rsp), %rax
cmpq %rax, %rdi
je 0x34dd
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x21d0
movq %rsp, %r14
movq %r14, %rdi
leaq 0xb8(%rsp), %rsi
callq 0x22a0
leaq 0x40(%rsp), %rdi
movq %r14, %rsi
callq 0x5b74
jmp 0x3883
movq 0x80(%r15), %rax
movq 0x90(%r15), %rcx
cmpq %rax, %rcx
jne 0x3544
movslq 0x98(%r15), %rcx
testq %rcx, %rcx
je 0x36b4
movq 0x78(%r15), %rdx
subq %rdx, %rax
shrq $0x4, %rax
subq %rcx, %rax
shlq $0x4, %rax
addq %rdx, %rax
movq %rax, 0x90(%r15)
movq %rax, %rcx
movq 0x8(%rcx), %rdi
movq (%rdi), %rax
movq %r12, %rsi
callq *(%rax)
addq $0x10, 0x90(%r15)
jmp 0x38b7
movq 0x10(%r15), %rsi
testq %rsi, %rsi
je 0x3592
movq 0x68(%rsp), %rcx
xorl %edi, %edi
cmpb %dl, 0x20(%rsi)
setl %dil
cmovgeq %rsi, %rcx
movq 0x10(%rsi,%rdi,8), %rsi
testq %rsi, %rsi
jne 0x356b
cmpq 0x68(%rsp), %rcx
je 0x3592
cmpb 0x20(%rcx), %dl
jge 0x37e4
movq %r13, %rdi
callq 0x2130
movl $0x12, %edx
leaq 0xb0(%rsp), %rdi
leaq 0x2b3c(%rip), %rsi      # 0x60ea
callq 0x2200
movb 0x1(%r12), %al
movb %al, (%rsp)
movl $0x1, %edx
leaq 0xb0(%rsp), %rdi
movq %rsp, %rsi
callq 0x2200
movl $0x1, %edx
movq %rax, %rdi
leaq 0x2acb(%rip), %rsi      # 0x60aa
callq 0x2200
movq %rsp, %r14
movq %r14, %rdi
leaq 0xb8(%rsp), %rsi
callq 0x22a0
leaq 0x40(%rsp), %rdi
movq %r14, %rsi
callq 0x5b74
jmp 0x3883
movq %r14, %r13
movq %r14, %rdi
callq 0x2130
movl $0x13, %edx
leaq 0xb0(%rsp), %rdi
leaq 0x2a6e(%rip), %rsi      # 0x6096
callq 0x2200
movl 0x30(%rsp), %ebx
leaq 0x10(%rsp), %rax
movq %rax, (%rsp)
movq %rsp, %rdi
movq %r12, %rsi
movq 0x60(%rsp), %rdx
callq 0x4d04
movq (%rsp), %rsi
movq 0x8(%rsp), %rdx
leaq 0xb0(%rsp), %rdi
callq 0x2200
movl $0x1, %edx
movq %rax, %rdi
leaq 0x2a3b(%rip), %rsi      # 0x60aa
callq 0x2200
movq (%rsp), %rdi
leaq 0x10(%rsp), %rax
cmpq %rax, %rdi
je 0x368f
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x21d0
movq %rsp, %r14
movq %r14, %rdi
leaq 0xb8(%rsp), %rsi
callq 0x22a0
leaq 0x40(%rsp), %rdi
movq %r14, %rsi
callq 0x5b74
jmp 0x3883
leaq 0xb0(%rsp), %rax
movq %rax, 0xa0(%rsp)
movq %r13, %rdi
leaq 0x2a2f(%rip), %rsi      # 0x60fd
leaq 0x2a3a(%rip), %rdx      # 0x610f
callq 0x4d04
leaq 0x40(%rsp), %rdi
movq %r13, %rsi
callq 0x5b74
movq 0xa0(%rsp), %rdi
leaq 0xb0(%rsp), %rax
cmpq %rax, %rdi
je 0x38b7
movq 0xb0(%rsp), %rsi
incq %rsi
callq 0x21d0
jmp 0x38b7
testq %rax, %rax
je 0x37c9
movq %r14, %r13
movq %r14, %rdi
callq 0x2130
movl $0xb, %edx
leaq 0xb0(%rsp), %rdi
leaq 0x2961(%rip), %rsi      # 0x609e
callq 0x2200
movl 0x30(%rsp), %ebx
leaq 0x10(%rsp), %rax
movq %rax, (%rsp)
movq %rsp, %rdi
movq %r12, %rsi
movq 0x60(%rsp), %rdx
callq 0x4d04
movq (%rsp), %rsi
movq 0x8(%rsp), %rdx
leaq 0xb0(%rsp), %rdi
callq 0x2200
movl $0x16, %edx
movq %rax, %rdi
leaq 0x294f(%rip), %rsi      # 0x60d3
callq 0x2200
movq (%rsp), %rdi
leaq 0x10(%rsp), %rax
cmpq %rax, %rdi
je 0x37a4
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x21d0
movq %rsp, %r14
movq %r14, %rdi
leaq 0xb8(%rsp), %rsi
callq 0x22a0
leaq 0x40(%rsp), %rdi
movq %r14, %rsi
callq 0x5b74
jmp 0x3883
movq 0x60(%r13), %rdi
incq %rbx
movq (%rdi), %rax
movq %rbx, %rsi
callq *(%rax)
movl 0x30(%rsp), %ebx
movq %r14, %r13
jmp 0x38b7
cmpq $0x0, 0x38(%rcx)
leaq 0x28a4(%rip), %rsi      # 0x6094
je 0x38c3
leal 0x1(%rax), %ebp
movq 0x38(%rsp), %rdx
movq 0x8(%rdx,%rax,8), %rsi
testq %rsi, %rsi
je 0x3811
cmpb $0x2d, (%rsi)
jne 0x38c3
movq %r13, %rdi
callq 0x2130
movl $0xa, %edx
leaq 0xb0(%rsp), %rdi
leaq 0x28c5(%rip), %rsi      # 0x60f2
callq 0x2200
movb 0x1(%r12), %al
movb %al, (%rsp)
movl $0x1, %edx
leaq 0xb0(%rsp), %rdi
movq %rsp, %rsi
callq 0x2200
movl $0x16, %edx
movq %rax, %rdi
leaq 0x2875(%rip), %rsi      # 0x60d3
callq 0x2200
movq %rsp, %r14
movq %r14, %rdi
leaq 0xb8(%rsp), %rsi
callq 0x22a0
leaq 0x40(%rsp), %rdi
movq %r14, %rsi
callq 0x5b74
movq (%rsp), %rdi
leaq 0x10(%rsp), %rax
cmpq %rax, %rdi
je 0x389e
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x21d0
movq %r13, %rdi
movq 0x5708(%rip), %rsi      # 0x8fb0
callq 0x2150
movq 0x28(%rsp), %rdi
callq 0x20a0
incl %ebp
cmpl %ebx, %ebp
jl 0x338c
jmp 0x38ce
movq 0x48(%rcx), %rdi
movq (%rdi), %rax
callq *(%rax)
jmp 0x38b7
cmpb $0x0, 0x27(%rsp)
jne 0x3a61
movslq 0x98(%r15), %rax
shlq $0x4, %rax
movq 0x80(%r15), %rcx
movq 0x90(%r15), %rdx
movq %rcx, %rsi
subq %rax, %rsi
cmpq %rsi, %rdx
setae %al
cmpq %rcx, %rdx
sete %cl
orb %al, %cl
jne 0x3a39
leaq 0xb0(%rsp), %r12
leaq 0x10(%rsp), %r13
leaq 0xa0(%rsp), %rbp
movq %rsp, %rbx
movq 0x5685(%rip), %r14      # 0x8fb0
movq %rbp, %rdi
callq 0x2130
movl $0x8, %edx
movq %r12, %rdi
leaq 0x27ce(%rip), %rsi      # 0x6110
callq 0x2200
movq 0x90(%r15), %rax
movq (%rax), %rsi
leaq 0x70(%rsp), %rdi
leaq 0x37(%rsp), %rdx
callq 0x46dc
movq 0x70(%rsp), %rsi
movq 0x78(%rsp), %rdx
movq %rbx, %rdi
callq 0x4411
movq (%rsp), %rsi
movq 0x8(%rsp), %rdx
movq %r12, %rdi
callq 0x2200
movl $0x9, %edx
movq %rax, %rdi
leaq 0x274e(%rip), %rsi      # 0x60e0
callq 0x2200
movq (%rsp), %rdi
cmpq %r13, %rdi
je 0x39ad
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x21d0
movq 0x70(%rsp), %rdi
leaq 0x80(%rsp), %rax
cmpq %rax, %rdi
je 0x39cf
movq 0x80(%rsp), %rsi
incq %rsi
callq 0x21d0
movq %rbx, %rdi
leaq 0xb8(%rsp), %rsi
callq 0x22a0
leaq 0x40(%rsp), %rdi
movq %rbx, %rsi
callq 0x5b74
movq (%rsp), %rdi
cmpq %r13, %rdi
je 0x3a02
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x21d0
movq %rbp, %rdi
movq %r14, %rsi
callq 0x2150
leaq 0x120(%rsp), %rdi
callq 0x20a0
movq 0x90(%r15), %rax
addq $0x10, %rax
movq %rax, 0x90(%r15)
cmpq 0x80(%r15), %rax
jne 0x392b
movq 0x40(%rsp), %r12
cmpq %r12, 0x48(%rsp)
jne 0x3a78
leaq 0x40(%rsp), %rdi
callq 0x2a30
addq $0x228, %rsp            # imm = 0x228
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq 0x38(%rsp), %rax
movq (%rax), %rsi
movq %r15, %rdi
callq 0x3c96
xorl %edi, %edi
callq 0x2220
movq 0x5571(%rip), %rbx      # 0x8ff0
leaq 0x2698(%rip), %r14      # 0x611e
movq 0x38(%rsp), %rax
movq (%rax), %r15
testq %r15, %r15
je 0x3aab
movq %r15, %rdi
callq 0x20e0
movq %rbx, %rdi
movq %r15, %rsi
movq %rax, %rdx
callq 0x2200
jmp 0x3ac2
movq (%rbx), %rax
movq -0x18(%rax), %rax
leaq (%rbx,%rax), %rdi
movl 0x20(%rbx,%rax), %esi
orl $0x1, %esi
callq 0x22d0
movl $0x2, %edx
movq %rbx, %rdi
movq %r14, %rsi
callq 0x2200
movq (%r12), %rsi
movq 0x8(%r12), %rdx
movq %rbx, %rdi
callq 0x2200
movq %rax, %r15
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r15, %rdi
movl $0xa, %esi
callq 0x21b0
movsbl %al, %esi
movq %r15, %rdi
callq 0x2040
movq %rax, %rdi
callq 0x2110
addq $0x20, %r12
cmpq 0x48(%rsp), %r12
jne 0x3a86
movl $0x1, %edi
callq 0x2220
jmp 0x3b8b
jmp 0x3be4
jmp 0x3c02
jmp 0x3c02
jmp 0x3c02
jmp 0x3b8b
jmp 0x3be4
jmp 0x3be4
jmp 0x3be4
jmp 0x3c02
jmp 0x3b8b
jmp 0x3be4
jmp 0x3be4
jmp 0x3be4
jmp 0x3c02
jmp 0x3c02
jmp 0x3be4
jmp 0x3baf
jmp 0x3c02
jmp 0x3b8b
jmp 0x3b8b
jmp 0x3c02
jmp 0x3b8b
jmp 0x3be4
jmp 0x3be4
jmp 0x3be4
jmp 0x3c02
jmp 0x3b8b
movq %rax, %rbx
movq (%rsp), %rdi
leaq 0x10(%rsp), %rax
cmpq %rax, %rdi
je 0x3be7
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x21d0
jmp 0x3be7
jmp 0x3be4
jmp 0x3c02
movq %rax, %rbx
movq 0xa0(%rsp), %rdi
leaq 0xb0(%rsp), %rax
cmpq %rax, %rdi
je 0x3c84
movq 0xb0(%rsp), %rsi
incq %rsi
callq 0x21d0
jmp 0x3c84
jmp 0x3c02
jmp 0x3c02
movq %rax, %rbx
movq 0x53c2(%rip), %rsi      # 0x8fb0
leaq 0xa0(%rsp), %rdi
callq 0x2150
movq 0x28(%rsp), %rdi
jmp 0x3c7f
movq %rax, %rbx
jmp 0x3c84
jmp 0x3c10
jmp 0x3c10
movq %rax, %rbx
jmp 0x3c41
movq %rax, %rbx
jmp 0x3c63
movq %rax, %rbx
movq (%rsp), %rdi
cmpq %r13, %rdi
je 0x3c63
movq 0x10(%rsp), %rsi
jmp 0x3c5b
movq %rax, %rbx
movq (%rsp), %rdi
cmpq %r13, %rdi
je 0x3c41
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x21d0
movq 0x70(%rsp), %rdi
leaq 0x80(%rsp), %rax
cmpq %rax, %rdi
je 0x3c63
movq 0x80(%rsp), %rsi
incq %rsi
callq 0x21d0
movq 0x5346(%rip), %rsi      # 0x8fb0
leaq 0xa0(%rsp), %rdi
callq 0x2150
leaq 0x120(%rsp), %rdi
callq 0x20a0
leaq 0x40(%rsp), %rdi
callq 0x2a30
movq %rbx, %rdi
callq 0x22f0