// File: /workspace/github_cpp_makefile_star2_O2/adamiaonr[P]rid-analytics/src/argvparser.cpp
// Function: CommandLineProcessing::ArgvParser::usageDescription[abi:cxx11](unsigned int) const
string ArgvParser::usageDescription(unsigned int _width) const
{
    string usage; // the usage description text

    if (intro_description.length())
        usage += formatString(intro_description, _width) + "\n\n";

    if (max_key>1) // if we have some options
        usage += formatString("Available options\n-----------------",_width) + "\n";

    // loop over all option attribute entries (which equals looping over all
    // different options (not option names)
    for (Key2AttributeMap::const_iterator it = option2attribute.begin();
            it != option2attribute.end();
            ++it)
    {
        string os; // temp string for the option

        // get the list of alternative names for this option
        list<string> alternatives = getAllOptionAlternatives(it->first);

        unsigned int count = 0;
        for( list<string>::const_iterator alt = alternatives.begin();
                alt != alternatives.end();
                ++alt )
        {
            ++count;
            // additional '-' for long options
            if (alt->length() > 1)
                os += "-";

            os += "-" + *alt;

            // note if the option requires a value
            if (option2attribute.find(it->first)->second & OptionRequiresValue)
                os += " <value>";

            // alternatives to come?
            if (count < alternatives.size())
                os += ", "; // add separator
        }

        // note if the option is required
        if (option2attribute.find(it->first)->second & OptionRequired)
            os += " [required]";

        usage += formatString(os, _width) + "\n";

        if (option2descr.find(it->first) != option2descr.end())
            usage += formatString(option2descr.find(it->first)->second, _width, 4);
        else
            usage += formatString("(no description)", _width, 4);

        // finally a little gap
        usage += "\n\n";
    }

    if (!errorcode2descr.size()) // if have no errorcodes
        return(usage);

    usage += formatString("Return codes\n-----------------", _width) + "\n";

    //   map<int, string>::const_iterator eit;
    for( std::map<int, std::string>::const_iterator alt = errorcode2descr.begin();
            alt != errorcode2descr.end();
            ++alt )
    {
        ostringstream code;
        code << alt->first;
        string label = formatString(code.str(), _width, 4);
        string descr = formatString(alt->second, _width, 10);
        usage += label + descr.substr(label.length()) + "\n";
    }

    return(usage);
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x258, %rsp            # imm = 0x258
movl %edx, 0xc(%rsp)
leaq 0x10(%rdi), %rax
movq %rax, (%rdi)
andq $0x0, 0x8(%rdi)
movq %rsi, %r13
movq %rdi, 0x10(%rsp)
movb $0x0, 0x10(%rdi)
cmpq $0x0, 0x118(%rsi)
je 0x1b9bc
leaq 0x110(%r13), %rsi
leaq 0x18(%rsp), %rdi
movl 0xc(%rsp), %edx
xorl %ecx, %ecx
callq 0x1bf9b
leaq 0xecd0(%rip), %rdx      # 0x2a651
leaq 0xe0(%rsp), %rdi
leaq 0x18(%rsp), %rsi
callq 0x179a0
leaq 0xe0(%rsp), %rsi
movq 0x10(%rsp), %rdi
callq 0x4790
leaq 0xe0(%rsp), %rdi
callq 0x41c0
leaq 0x18(%rsp), %rdi
callq 0x41c0
cmpl $0x2, (%r13)
jb 0x1ba3a
leaq 0xf1ef(%rip), %rsi      # 0x2abb9
leaq 0x40(%rsp), %rdi
leaq 0x68(%rsp), %rdx
callq 0x16c66
leaq 0x18(%rsp), %rdi
leaq 0x40(%rsp), %rsi
movl 0xc(%rsp), %edx
xorl %ecx, %ecx
callq 0x1bf9b
leaq 0xec5d(%rip), %rdx      # 0x2a652
leaq 0xe0(%rsp), %rdi
leaq 0x18(%rsp), %rsi
callq 0x179a0
leaq 0xe0(%rsp), %rsi
movq 0x10(%rsp), %rdi
callq 0x4790
leaq 0xe0(%rsp), %rdi
callq 0x41c0
leaq 0x18(%rsp), %rdi
callq 0x41c0
leaq 0x40(%rsp), %rdi
callq 0x41c0
leaq 0x38(%r13), %r15
movq 0x50(%r13), %r14
leaq 0x40(%r13), %rax
movq %rax, 0x90(%rsp)
leaq 0x68(%r13), %rax
movq %rax, 0x60(%rsp)
leaq 0x70(%r13), %rax
movq %rax, 0x88(%rsp)
leaq 0xe0(%rsp), %rbp
leaq 0x18(%rsp), %r12
movq %r13, 0x38(%rsp)
cmpq 0x90(%rsp), %r14
je 0x1bc92
leaq 0xf0(%rsp), %rax
movq %rax, 0xe0(%rsp)
andq $0x0, 0xe8(%rsp)
movb $0x0, 0xf0(%rsp)
movl 0x20(%r14), %edx
leaq 0x68(%rsp), %rbx
movq %rbx, %rdi
movq %r13, %rsi
callq 0x1b838
movq %r14, 0x98(%rsp)
leaq 0x20(%r14), %r13
pushq $0x1
popq %r14
movq (%rbx), %rbx
leaq 0x68(%rsp), %rax
cmpq %rax, %rbx
je 0x1bb52
cmpq $0x2, 0x18(%rbx)
jb 0x1baeb
movq %rbp, %rdi
leaq 0xf13a(%rip), %rsi      # 0x2ac20
callq 0x4760
leaq 0x10(%rbx), %rdx
movq %r12, %rdi
leaq 0xf127(%rip), %rsi      # 0x2ac20
callq 0x1c862
movq %rbp, %rdi
movq %r12, %rsi
callq 0x4790
movq %r12, %rdi
callq 0x41c0
movq %r15, %rdi
movq %r13, %rsi
callq 0x1d4fc
testb $0x1, 0x24(%rax)
je 0x1bb31
movq %rbp, %rdi
leaq 0xf0b1(%rip), %rsi      # 0x2abdd
callq 0x4760
movl %r14d, %eax
cmpq %rax, 0x78(%rsp)
jbe 0x1bb4a
movq %rbp, %rdi
leaq 0xeb63(%rip), %rsi      # 0x2a6a8
callq 0x4760
incl %r14d
jmp 0x1bac8
movq %r15, %rdi
movq %r13, %rsi
callq 0x1d4fc
testb $0x2, 0x24(%rax)
movq 0x98(%rsp), %r14
je 0x1bb7a
movq %rbp, %rdi
leaq 0xf071(%rip), %rsi      # 0x2abe6
callq 0x4760
leaq 0x40(%rsp), %rbx
movq %rbx, %rdi
movq %rbp, %rsi
movl 0xc(%rsp), %edx
xorl %ecx, %ecx
callq 0x1bf9b
movq %r12, %rdi
movq %rbx, %rsi
leaq 0xeab5(%rip), %rdx      # 0x2a652
callq 0x179a0
movq 0x10(%rsp), %rdi
movq %r12, %rsi
callq 0x4790
movq %r12, %rdi
callq 0x41c0
leaq 0x40(%rsp), %rdi
callq 0x41c0
movq 0x60(%rsp), %rdi
movq %r13, %rsi
callq 0x1cf5a
cmpq 0x88(%rsp), %rax
je 0x1bc0d
movq 0x60(%rsp), %rdi
movq %r13, %rsi
callq 0x1cf5a
addq $0x28, %rax
movq %r12, %rdi
movq %rax, %rsi
movl 0xc(%rsp), %edx
pushq $0x4
popq %rcx
callq 0x1bf9b
movq 0x10(%rsp), %rdi
movq %r12, %rsi
callq 0x4790
movq %r12, %rdi
jmp 0x1bc55
leaq 0x40(%rsp), %rbx
movq %rbx, %rdi
leaq 0xefd6(%rip), %rsi      # 0x2abf2
leaq 0xa0(%rsp), %rdx
callq 0x16c66
movq %r12, %rdi
movq %rbx, %rsi
movl 0xc(%rsp), %edx
pushq $0x4
popq %rcx
callq 0x1bf9b
movq 0x10(%rsp), %rdi
movq %r12, %rsi
callq 0x4790
movq %r12, %rdi
callq 0x41c0
leaq 0x40(%rsp), %rdi
callq 0x41c0
movq 0x10(%rsp), %rdi
leaq 0xe9eb(%rip), %rsi      # 0x2a651
callq 0x4760
leaq 0x68(%rsp), %rdi
callq 0x1cd4e
movq %rbp, %rdi
callq 0x41c0
movq %r14, %rdi
callq 0x4420
movq %rax, %r14
movq 0x38(%rsp), %r13
jmp 0x1ba75
cmpq $0x0, 0xf0(%r13)
je 0x1be39
leaq 0xef5c(%rip), %rsi      # 0x2ac03
leaq 0x40(%rsp), %rdi
leaq 0x68(%rsp), %rdx
callq 0x16c66
leaq 0x18(%rsp), %rdi
leaq 0x40(%rsp), %rsi
movl 0xc(%rsp), %edx
xorl %ecx, %ecx
callq 0x1bf9b
movq 0x38(%rsp), %rbx
leaq 0xe97b(%rip), %rdx      # 0x2a652
leaq 0xe0(%rsp), %rdi
leaq 0x18(%rsp), %rsi
callq 0x179a0
leaq 0xe0(%rsp), %rsi
movq 0x10(%rsp), %rdi
callq 0x4790
leaq 0xe0(%rsp), %rdi
callq 0x41c0
leaq 0x18(%rsp), %rdi
callq 0x41c0
leaq 0x40(%rsp), %r15
movq %r15, %rdi
callq 0x41c0
movq 0xe0(%rbx), %r13
addq $0xd0, %rbx
movq %rbx, 0x38(%rsp)
leaq 0xc0(%rsp), %rbp
leaq 0xa0(%rsp), %r12
leaq 0x68(%rsp), %rbx
cmpq 0x38(%rsp), %r13
je 0x1be39
leaq 0xe0(%rsp), %r14
movq %r14, %rdi
callq 0x44f0
movl 0x20(%r13), %esi
movq %r14, %rdi
callq 0x46d0
movq %r15, %rdi
leaq 0xe8(%rsp), %rsi
callq 0x4610
leaq 0x18(%rsp), %rdi
movq %r15, %rsi
movl 0xc(%rsp), %r14d
movl %r14d, %edx
pushq $0x4
popq %rcx
callq 0x1bf9b
movq %r15, %rdi
callq 0x41c0
leaq 0x28(%r13), %rsi
movq %r15, %rdi
movl %r14d, %edx
pushq $0xa
popq %rcx
callq 0x1bf9b
movq 0x20(%rsp), %rdx
movq %rbp, %rdi
movq %r15, %rsi
pushq $-0x1
popq %rcx
callq 0x43e0
movq %r12, %rdi
leaq 0x18(%rsp), %rsi
movq %rbp, %rdx
callq 0x1c8d8
movq %rbx, %rdi
movq %r12, %rsi
leaq 0xe872(%rip), %rdx      # 0x2a652
callq 0x179a0
movq 0x10(%rsp), %rdi
movq %rbx, %rsi
callq 0x4790
movq %rbx, %rdi
callq 0x41c0
movq %r12, %rdi
callq 0x41c0
movq %rbp, %rdi
callq 0x41c0
movq %r15, %rdi
callq 0x41c0
leaq 0x18(%rsp), %rdi
callq 0x41c0
leaq 0xe0(%rsp), %rdi
callq 0x4120
movq %r13, %rdi
callq 0x4420
movq %rax, %r13
jmp 0x1bd47
movq 0x10(%rsp), %rax
addq $0x258, %rsp            # imm = 0x258
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0x1be5b
jmp 0x1be6d
jmp 0x1be7c
jmp 0x1befd
movq %rax, %r14
leaq 0xe0(%rsp), %rdi
callq 0x41c0
jmp 0x1be70
movq %rax, %r14
leaq 0x18(%rsp), %rdi
callq 0x41c0
jmp 0x1be7f
movq %rax, %r14
leaq 0x40(%rsp), %rdi
jmp 0x1bf84
jmp 0x1befd
movq %rax, %r14
leaq 0xe0(%rsp), %rdi
callq 0x41c0
jmp 0x1bea0
movq %rax, %r14
leaq 0x18(%rsp), %rdi
jmp 0x1bf84
jmp 0x1befd
jmp 0x1bf38
jmp 0x1bf6f
jmp 0x1bf3d
movq %rax, %r14
jmp 0x1bef1
movq %rax, %r14
jmp 0x1bee4
movq %rax, %r14
jmp 0x1bed7
movq %rax, %r14
leaq 0x68(%rsp), %rdi
callq 0x41c0
leaq 0xa0(%rsp), %rdi
callq 0x41c0
leaq 0xc0(%rsp), %rdi
callq 0x41c0
leaq 0x40(%rsp), %rdi
callq 0x41c0
jmp 0x1bf19
movq %rax, %r14
jmp 0x1bf89
jmp 0x1bf07
movq %rax, %r14
jmp 0x1bf23
movq %rax, %r14
leaq 0x40(%rsp), %rdi
jmp 0x1bf1e
movq %rax, %r14
leaq 0x18(%rsp), %rdi
callq 0x41c0
leaq 0xe0(%rsp), %rdi
callq 0x4120
jmp 0x1bf89
jmp 0x1bf5c
jmp 0x1bf6f
jmp 0x1bf6f
movq %rax, %r14
jmp 0x1bf4a
movq %rax, %r14
leaq 0x18(%rsp), %rdi
callq 0x41c0
leaq 0x40(%rsp), %rdi
jmp 0x1bf64
jmp 0x1bf6f
movq %rax, %r14
jmp 0x1bf7c
jmp 0x1bf6f
jmp 0x1bf6f
movq %rax, %r14
leaq 0x18(%rsp), %rdi
callq 0x41c0
jmp 0x1bf72
jmp 0x1bf6f
jmp 0x1bf6f
movq %rax, %r14
leaq 0x68(%rsp), %rdi
callq 0x1cd4e
leaq 0xe0(%rsp), %rdi
callq 0x41c0
movq 0x10(%rsp), %rdi
callq 0x41c0
movq %r14, %rdi
callq 0x4700