// File: 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
movq %rsp, %rbp
subq $0x560, %rsp            # imm = 0x560
movq %rdi, -0x4f8(%rbp)
movq %rdi, %rax
movq %rax, -0x4f0(%rbp)
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movl %edx, -0x14(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x4e8(%rbp)
movb $0x0, -0x15(%rbp)
callq 0x5730
movq -0x4e8(%rbp), %rdi
addq $0x110, %rdi            # imm = 0x110
callq 0x57e0
cmpq $0x0, %rax
je 0x412c4
movq -0x4e8(%rbp), %rsi
addq $0x110, %rsi            # imm = 0x110
movl -0x14(%rbp), %edx
leaq -0x58(%rbp), %rdi
xorl %ecx, %ecx
callq 0x41dc0
jmp 0x41246
leaq 0x22275(%rip), %rdx     # 0x634c2
leaq -0x38(%rbp), %rdi
leaq -0x58(%rbp), %rsi
callq 0x31d00
jmp 0x4125c
movq -0x4f8(%rbp), %rdi
leaq -0x38(%rbp), %rsi
callq 0x5650
jmp 0x4126e
leaq -0x38(%rbp), %rdi
callq 0x52f0
leaq -0x58(%rbp), %rdi
callq 0x52f0
jmp 0x412c4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x41da0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x412b6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x38(%rbp), %rdi
callq 0x52f0
leaq -0x58(%rbp), %rdi
callq 0x52f0
jmp 0x41da0
movq -0x4e8(%rbp), %rax
cmpl $0x1, (%rax)
jbe 0x413eb
leaq -0xc9(%rbp), %rdi
movq %rdi, -0x500(%rbp)
callq 0x5930
movq -0x500(%rbp), %rdx
leaq 0x227d8(%rip), %rsi     # 0x63acd
leaq -0xc8(%rbp), %rdi
callq 0x30320
jmp 0x41303
movl -0x14(%rbp), %edx
leaq -0xa8(%rbp), %rdi
leaq -0xc8(%rbp), %rsi
xorl %ecx, %ecx
callq 0x41dc0
jmp 0x4131d
leaq 0x2219f(%rip), %rdx     # 0x634c3
leaq -0x88(%rbp), %rdi
leaq -0xa8(%rbp), %rsi
callq 0x31d00
jmp 0x41339
movq -0x4f8(%rbp), %rdi
leaq -0x88(%rbp), %rsi
callq 0x5650
jmp 0x4134e
leaq -0x88(%rbp), %rdi
callq 0x52f0
leaq -0xa8(%rbp), %rdi
callq 0x52f0
leaq -0xc8(%rbp), %rdi
callq 0x52f0
leaq -0xc9(%rbp), %rdi
callq 0x5510
jmp 0x413eb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x413da
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x413ce
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x413c2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x88(%rbp), %rdi
callq 0x52f0
leaq -0xa8(%rbp), %rdi
callq 0x52f0
leaq -0xc8(%rbp), %rdi
callq 0x52f0
leaq -0xc9(%rbp), %rdi
callq 0x5510
jmp 0x41da0
movq -0x4e8(%rbp), %rdi
addq $0x38, %rdi
callq 0x43720
movq %rax, -0xd8(%rbp)
movq -0x4e8(%rbp), %rdi
addq $0x38, %rdi
callq 0x43780
movq %rax, -0xe0(%rbp)
leaq -0xd8(%rbp), %rdi
leaq -0xe0(%rbp), %rsi
callq 0x43750
testb $0x1, %al
jne 0x41435
jmp 0x419c1
leaq -0x100(%rbp), %rdi
callq 0x5730
leaq -0xd8(%rbp), %rdi
callq 0x437b0
movq -0x4e8(%rbp), %rsi
movl (%rax), %edx
leaq -0x118(%rbp), %rdi
callq 0x40fc0
jmp 0x41464
movl $0x0, -0x11c(%rbp)
leaq -0x118(%rbp), %rdi
callq 0x43420
movq %rax, -0x130(%rbp)
leaq -0x128(%rbp), %rdi
leaq -0x130(%rbp), %rsi
callq 0x43450
leaq -0x118(%rbp), %rdi
callq 0x434a0
movq %rax, -0x140(%rbp)
leaq -0x138(%rbp), %rdi
leaq -0x140(%rbp), %rsi
callq 0x43450
leaq -0x128(%rbp), %rdi
leaq -0x138(%rbp), %rsi
callq 0x43470
testb $0x1, %al
jne 0x414d6
jmp 0x4165e
movl -0x11c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x11c(%rbp)
leaq -0x128(%rbp), %rdi
callq 0x434d0
movq %rax, %rdi
callq 0x57e0
cmpq $0x1, %rax
jbe 0x41538
leaq 0x2262e(%rip), %rsi     # 0x63b34
leaq -0x100(%rbp), %rdi
callq 0x5460
jmp 0x41514
jmp 0x41538
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x419b0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x419a4
leaq -0x128(%rbp), %rdi
callq 0x43610
movq %rax, %rdx
leaq 0x225e6(%rip), %rsi     # 0x63b34
leaq -0x160(%rbp), %rdi
callq 0x43500
jmp 0x4155c
leaq -0x100(%rbp), %rdi
leaq -0x160(%rbp), %rsi
callq 0x5650
jmp 0x41571
leaq -0x160(%rbp), %rdi
callq 0x52f0
movq -0x4e8(%rbp), %rax
addq $0x38, %rax
movq %rax, -0x510(%rbp)
leaq -0xd8(%rbp), %rdi
callq 0x437b0
movq -0x510(%rbp), %rdi
movq %rax, %rsi
callq 0x437d0
movq %rax, -0x508(%rbp)
jmp 0x415b3
movq -0x508(%rbp), %rax
movq %rax, -0x168(%rbp)
leaq -0x168(%rbp), %rdi
callq 0x437b0
movl 0x4(%rax), %eax
andl $0x1, %eax
cmpl $0x0, %eax
je 0x4160c
leaq 0x22512(%rip), %rsi     # 0x63af1
leaq -0x100(%rbp), %rdi
callq 0x5460
jmp 0x415ed
jmp 0x4160c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x160(%rbp), %rdi
callq 0x52f0
jmp 0x419a4
movl -0x11c(%rbp), %eax
movq %rax, -0x518(%rbp)
leaq -0x118(%rbp), %rdi
callq 0x43630
movq %rax, %rcx
movq -0x518(%rbp), %rax
cmpq %rcx, %rax
jae 0x4164b
leaq 0x21ede(%rip), %rsi     # 0x63519
leaq -0x100(%rbp), %rdi
callq 0x5460
jmp 0x41649
jmp 0x4164b
jmp 0x4164d
leaq -0x128(%rbp), %rdi
callq 0x43660
jmp 0x41494
movq -0x4e8(%rbp), %rax
addq $0x38, %rax
movq %rax, -0x528(%rbp)
leaq -0xd8(%rbp), %rdi
callq 0x437b0
movq -0x528(%rbp), %rdi
movq %rax, %rsi
callq 0x437d0
movq %rax, -0x520(%rbp)
jmp 0x41694
movq -0x520(%rbp), %rax
movq %rax, -0x170(%rbp)
leaq -0x170(%rbp), %rdi
callq 0x437b0
movl 0x4(%rax), %eax
andl $0x2, %eax
cmpl $0x0, %eax
je 0x416d0
leaq 0x2243a(%rip), %rsi     # 0x63afa
leaq -0x100(%rbp), %rdi
callq 0x5460
jmp 0x416ce
jmp 0x416d0
movl -0x14(%rbp), %edx
leaq -0x1b0(%rbp), %rdi
leaq -0x100(%rbp), %rsi
xorl %ecx, %ecx
callq 0x41dc0
jmp 0x416ea
leaq 0x21dd2(%rip), %rdx     # 0x634c3
leaq -0x190(%rbp), %rdi
leaq -0x1b0(%rbp), %rsi
callq 0x31d00
jmp 0x41706
movq -0x4f8(%rbp), %rdi
leaq -0x190(%rbp), %rsi
callq 0x5650
jmp 0x4171b
leaq -0x190(%rbp), %rdi
callq 0x52f0
leaq -0x1b0(%rbp), %rdi
callq 0x52f0
movq -0x4e8(%rbp), %rax
addq $0x68, %rax
movq %rax, -0x538(%rbp)
leaq -0xd8(%rbp), %rdi
callq 0x437b0
movq -0x538(%rbp), %rdi
movq %rax, %rsi
callq 0x43070
movq %rax, -0x530(%rbp)
jmp 0x41769
movq -0x4e8(%rbp), %rdi
movq -0x530(%rbp), %rax
movq %rax, -0x1b8(%rbp)
addq $0x68, %rdi
callq 0x430a0
movq %rax, -0x1c0(%rbp)
leaq -0x1b8(%rbp), %rdi
leaq -0x1c0(%rbp), %rsi
callq 0x43040
testb $0x1, %al
jne 0x417aa
jmp 0x41891
movq -0x4e8(%rbp), %rax
addq $0x68, %rax
movq %rax, -0x548(%rbp)
leaq -0xd8(%rbp), %rdi
callq 0x437b0
movq -0x548(%rbp), %rdi
movq %rax, %rsi
callq 0x43070
movq %rax, -0x540(%rbp)
jmp 0x417e0
movq -0x540(%rbp), %rax
movq %rax, -0x1e8(%rbp)
leaq -0x1e8(%rbp), %rdi
callq 0x430d0
movq %rax, %rsi
addq $0x8, %rsi
movl -0x14(%rbp), %edx
leaq -0x1e0(%rbp), %rdi
movl $0x4, %ecx
callq 0x41dc0
jmp 0x41817
movq -0x4f8(%rbp), %rdi
leaq -0x1e0(%rbp), %rsi
callq 0x5650
jmp 0x4182c
leaq -0x1e0(%rbp), %rdi
callq 0x52f0
jmp 0x41966
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x41863
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x190(%rbp), %rdi
callq 0x52f0
leaq -0x1b0(%rbp), %rdi
callq 0x52f0
jmp 0x419a4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x1e0(%rbp), %rdi
callq 0x52f0
jmp 0x419a4
leaq -0x229(%rbp), %rdi
movq %rdi, -0x550(%rbp)
callq 0x5930
movq -0x550(%rbp), %rdx
leaq 0x22254(%rip), %rsi     # 0x63b06
leaq -0x228(%rbp), %rdi
callq 0x30320
jmp 0x418c0
movl -0x14(%rbp), %edx
leaq -0x208(%rbp), %rdi
leaq -0x228(%rbp), %rsi
movl $0x4, %ecx
callq 0x41dc0
jmp 0x418dd
movq -0x4f8(%rbp), %rdi
leaq -0x208(%rbp), %rsi
callq 0x5650
jmp 0x418f2
leaq -0x208(%rbp), %rdi
callq 0x52f0
leaq -0x228(%rbp), %rdi
callq 0x52f0
leaq -0x229(%rbp), %rdi
callq 0x5510
jmp 0x41966
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x41958
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x4194c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x208(%rbp), %rdi
callq 0x52f0
leaq -0x228(%rbp), %rdi
callq 0x52f0
leaq -0x229(%rbp), %rdi
callq 0x5510
jmp 0x419a4
movq -0x4f8(%rbp), %rdi
leaq 0x21b4e(%rip), %rsi     # 0x634c2
callq 0x5460
jmp 0x4197b
leaq -0x118(%rbp), %rdi
callq 0x43680
leaq -0x100(%rbp), %rdi
callq 0x52f0
leaq -0xd8(%rbp), %rdi
callq 0x43800
jmp 0x41402
leaq -0x118(%rbp), %rdi
callq 0x43680
leaq -0x100(%rbp), %rdi
callq 0x52f0
jmp 0x41da0
movq -0x4e8(%rbp), %rdi
addq $0xc8, %rdi
callq 0x43830
cmpq $0x0, %rax
jne 0x419ed
movb $0x1, -0x15(%rbp)
movl $0x1, -0x230(%rbp)
jmp 0x41d7e
leaq -0x291(%rbp), %rdi
movq %rdi, -0x558(%rbp)
callq 0x5930
movq -0x558(%rbp), %rdx
leaq 0x22109(%rip), %rsi     # 0x63b17
leaq -0x290(%rbp), %rdi
callq 0x30320
jmp 0x41a1c
movl -0x14(%rbp), %edx
leaq -0x270(%rbp), %rdi
leaq -0x290(%rbp), %rsi
xorl %ecx, %ecx
callq 0x41dc0
jmp 0x41a36
leaq 0x21a86(%rip), %rdx     # 0x634c3
leaq -0x250(%rbp), %rdi
leaq -0x270(%rbp), %rsi
callq 0x31d00
jmp 0x41a52
movq -0x4f8(%rbp), %rdi
leaq -0x250(%rbp), %rsi
callq 0x5650
jmp 0x41a67
leaq -0x250(%rbp), %rdi
callq 0x52f0
leaq -0x270(%rbp), %rdi
callq 0x52f0
leaq -0x290(%rbp), %rdi
callq 0x52f0
leaq -0x291(%rbp), %rdi
callq 0x5510
movq -0x4e8(%rbp), %rdi
addq $0xc8, %rdi
callq 0x43850
movq %rax, -0x2a0(%rbp)
movq -0x4e8(%rbp), %rdi
addq $0xc8, %rdi
callq 0x438b0
movq %rax, -0x2a8(%rbp)
leaq -0x2a0(%rbp), %rdi
leaq -0x2a8(%rbp), %rsi
callq 0x43880
testb $0x1, %al
jne 0x41ae7
jmp 0x41d70
leaq -0x420(%rbp), %rdi
callq 0x56e0
jmp 0x41af5
leaq -0x2a0(%rbp), %rdi
callq 0x438e0
movl (%rax), %esi
leaq -0x420(%rbp), %rdi
callq 0x58f0
jmp 0x41b11
leaq -0x460(%rbp), %rdi
leaq -0x420(%rbp), %rsi
callq 0x54c0
jmp 0x41b26
movl -0x14(%rbp), %edx
leaq -0x440(%rbp), %rdi
leaq -0x460(%rbp), %rsi
movl $0x4, %ecx
callq 0x41dc0
jmp 0x41b43
leaq -0x460(%rbp), %rdi
callq 0x52f0
leaq -0x2a0(%rbp), %rdi
callq 0x438e0
movq %rax, %rsi
addq $0x8, %rsi
movl -0x14(%rbp), %edx
leaq -0x480(%rbp), %rdi
movl $0xa, %ecx
callq 0x41dc0
jmp 0x41b78
leaq -0x440(%rbp), %rdi
callq 0x57e0
movq %rax, %rdx
leaq -0x4e0(%rbp), %rdi
leaq -0x480(%rbp), %rsi
movq $-0x1, %rcx
callq 0x54d0
jmp 0x41ba3
leaq -0x4c0(%rbp), %rdi
leaq -0x440(%rbp), %rsi
leaq -0x4e0(%rbp), %rdx
callq 0x43910
jmp 0x41bbf
leaq 0x218fd(%rip), %rdx     # 0x634c3
leaq -0x4a0(%rbp), %rdi
leaq -0x4c0(%rbp), %rsi
callq 0x31d00
jmp 0x41bdb
movq -0x4f8(%rbp), %rdi
leaq -0x4a0(%rbp), %rsi
callq 0x5650
jmp 0x41bf0
leaq -0x4a0(%rbp), %rdi
callq 0x52f0
leaq -0x4c0(%rbp), %rdi
callq 0x52f0
leaq -0x4e0(%rbp), %rdi
callq 0x52f0
leaq -0x480(%rbp), %rdi
callq 0x52f0
leaq -0x440(%rbp), %rdi
callq 0x52f0
leaq -0x420(%rbp), %rdi
callq 0x5150
leaq -0x2a0(%rbp), %rdi
callq 0x43960
jmp 0x41ab1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x41ca3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x41c97
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x41c8b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x250(%rbp), %rdi
callq 0x52f0
leaq -0x270(%rbp), %rdi
callq 0x52f0
leaq -0x290(%rbp), %rdi
callq 0x52f0
leaq -0x291(%rbp), %rdi
callq 0x5510
jmp 0x41da0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x41d62
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x460(%rbp), %rdi
callq 0x52f0
jmp 0x41d62
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x41d56
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x41d4a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x41d3e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x41d32
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x4a0(%rbp), %rdi
callq 0x52f0
leaq -0x4c0(%rbp), %rdi
callq 0x52f0
leaq -0x4e0(%rbp), %rdi
callq 0x52f0
leaq -0x480(%rbp), %rdi
callq 0x52f0
leaq -0x440(%rbp), %rdi
callq 0x52f0
leaq -0x420(%rbp), %rdi
callq 0x5150
jmp 0x41da0
movb $0x1, -0x15(%rbp)
movl $0x1, -0x230(%rbp)
testb $0x1, -0x15(%rbp)
jne 0x41d90
movq -0x4f8(%rbp), %rdi
callq 0x52f0
movq -0x4f0(%rbp), %rax
addq $0x560, %rsp            # imm = 0x560
popq %rbp
retq
movq -0x4f8(%rbp), %rdi
callq 0x52f0
movq -0x60(%rbp), %rdi
callq 0x5920
nopw %cs:(%rax,%rax)