// File: travisdowns[P]avx-turbo/./args.hxx
// Function: _gnu_cxx::__normal_iterator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const*, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>>> args::ArgumentParser::ParseArgs<__gnu_cxx::__normal_iterator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const*, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>>>>(__gnu_cxx::__normal_iterator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const*, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>>>, __gnu_cxx::__normal_iterator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const*, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>>>)
It ParseArgs(It begin, It end)
            {
                // Reset all Matched statuses and errors
                Reset();
                bool terminated = false;

                // Check all arg chunks
                for (auto it = begin; it != end; ++it)
                {
                    const auto &chunk = *it;

                    if (!terminated && chunk == terminator)
                    {
                        terminated = true;
                    } else if (!terminated && ParseOption(chunk) == OptionType::LongFlag)
                    {
                        if (!ParseLong(it, end))
                        {
                            return it;
                        }
                    } else if (!terminated && ParseOption(chunk) == OptionType::ShortFlag)
                    {
                        if (!ParseShort(it, end))
                        {
                            return it;
                        }
                    } else
                    {
                        auto pos = GetNextPositional();
                        if (pos)
                        {
                            pos->ParseValue(chunk);

                            if (pos->KickOut())
                            {
                                return ++it;
                            }
                        } else
                        {
                            RaiseParseError("Passed in argument, but no positional arguments were ready to receive it: " + chunk);
                            return it;
                        }
                    }
                }

                for (Base *child: Children())
                {
                    child->Validate(shortprefix, longprefix);
                }

                if (!Matched())
                {
#ifdef ARGS_NOEXCEPT
                    error = Error::Validation;
#else
                    std::ostringstream problem;
                    problem << "Group validation failed somewhere!";
                    throw ValidationError(problem.str());
#endif
                }

                return end;
            }

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x260, %rsp            # imm = 0x260
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq %rdi, -0x20(%rbp)
movq -0x20(%rbp), %rdi
movq %rdi, -0x248(%rbp)
movq (%rdi), %rax
callq *0x28(%rax)
movb $0x0, -0x21(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x30(%rbp)
leaq -0x30(%rbp), %rdi
leaq -0x18(%rbp), %rsi
callq 0x1ade0
testb $0x1, %al
jne 0x22b2a
jmp 0x22cbe
leaq -0x30(%rbp), %rdi
callq 0x1ae50
movq %rax, -0x38(%rbp)
testb $0x1, -0x21(%rbp)
jne 0x22b63
movq -0x248(%rbp), %rsi
movq -0x38(%rbp), %rdi
addq $0x148, %rsi            # imm = 0x148
callq 0x169d0
testb $0x1, %al
jne 0x22b5a
jmp 0x22b63
movb $0x1, -0x21(%rbp)
jmp 0x22cae
testb $0x1, -0x21(%rbp)
jne 0x22bb0
movq -0x248(%rbp), %rdi
movq -0x38(%rbp), %rsi
callq 0x22e80
cmpl $0x0, %eax
jne 0x22bb0
movq -0x248(%rbp), %rdi
movq -0x18(%rbp), %rax
movq %rax, -0x40(%rbp)
movq -0x40(%rbp), %rdx
leaq -0x30(%rbp), %rsi
callq 0x22f50
testb $0x1, %al
jne 0x22bab
movq -0x30(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0x22e5e
jmp 0x22cac
testb $0x1, -0x21(%rbp)
jne 0x22bfd
movq -0x248(%rbp), %rdi
movq -0x38(%rbp), %rsi
callq 0x22e80
cmpl $0x1, %eax
jne 0x22bfd
movq -0x248(%rbp), %rdi
movq -0x18(%rbp), %rax
movq %rax, -0x48(%rbp)
movq -0x48(%rbp), %rdx
leaq -0x30(%rbp), %rsi
callq 0x23310
testb $0x1, %al
jne 0x22bf8
movq -0x30(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0x22e5e
jmp 0x22caa
movq -0x248(%rbp), %rdi
callq 0x238d0
movq %rax, -0x50(%rbp)
cmpq $0x0, -0x50(%rbp)
je 0x22c48
movq -0x50(%rbp), %rdi
movq -0x38(%rbp), %rsi
movq (%rdi), %rax
callq *0x38(%rax)
movq -0x50(%rbp), %rdi
callq 0x23a00
testb $0x1, %al
jne 0x22c31
jmp 0x22c46
leaq -0x30(%rbp), %rdi
callq 0x1ae70
movq (%rax), %rax
movq %rax, -0x8(%rbp)
jmp 0x22e5e
jmp 0x22ca8
movq -0x38(%rbp), %rdx
leaq 0x1e931(%rip), %rsi     # 0x41584
leaq -0x70(%rbp), %rdi
movq %rdi, -0x250(%rbp)
callq 0x114c0
movq -0x248(%rbp), %rdi
movq -0x250(%rbp), %rsi
callq 0x23a20
jmp 0x22c78
leaq -0x70(%rbp), %rdi
callq 0x7290
movq -0x30(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0x22e5e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
leaq -0x70(%rbp), %rdi
callq 0x7290
jmp 0x22e6b
jmp 0x22caa
jmp 0x22cac
jmp 0x22cae
jmp 0x22cb0
leaq -0x30(%rbp), %rdi
callq 0x1ae70
jmp 0x22b14
movq -0x248(%rbp), %rdi
callq 0x136c0
movq %rax, -0x88(%rbp)
movq -0x88(%rbp), %rdi
callq 0x13ac0
movq %rax, -0x90(%rbp)
movq -0x88(%rbp), %rdi
callq 0x13b10
movq %rax, -0x98(%rbp)
leaq -0x90(%rbp), %rdi
leaq -0x98(%rbp), %rsi
callq 0x23a90
testb $0x1, %al
jne 0x22d10
jmp 0x22d59
leaq -0x90(%rbp), %rdi
callq 0x13a90
movq -0x248(%rbp), %rdx
movq (%rax), %rax
movq %rax, -0xa0(%rbp)
movq -0xa0(%rbp), %rdi
movq %rdx, %rsi
addq $0x108, %rsi            # imm = 0x108
addq $0xe8, %rdx
movq (%rdi), %rax
callq *0x18(%rax)
leaq -0x90(%rbp), %rdi
callq 0x13a00
jmp 0x22cf7
movq -0x248(%rbp), %rdi
movq (%rdi), %rax
callq *0x10(%rax)
testb $0x1, %al
jne 0x22e56
leaq -0x218(%rbp), %rdi
movq %rdi, -0x258(%rbp)
callq 0x7610
movq -0x258(%rbp), %rdi
leaq 0x1e840(%rip), %rsi     # 0x415cf
callq 0x7470
jmp 0x22d96
movb $0x1, -0x239(%rbp)
movl $0x10, %edi
callq 0x7210
movq %rax, -0x260(%rbp)
leaq -0x238(%rbp), %rdi
leaq -0x218(%rbp), %rsi
callq 0x7490
jmp 0x22dc3
movq -0x260(%rbp), %rdi
leaq -0x238(%rbp), %rsi
callq 0x23ad0
jmp 0x22dd8
movq -0x260(%rbp), %rdi
movb $0x0, -0x239(%rbp)
leaq 0x37c33(%rip), %rsi     # 0x5aa20
leaq -0x8094(%rip), %rdx     # 0x1ad60
callq 0x7790
jmp 0x22e74
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
jmp 0x22e48
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
jmp 0x22e2f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
leaq -0x238(%rbp), %rdi
callq 0x7290
testb $0x1, -0x239(%rbp)
jne 0x22e3a
jmp 0x22e46
movq -0x260(%rbp), %rdi
callq 0x7350
jmp 0x22e48
leaq -0x218(%rbp), %rdi
callq 0x70f0
jmp 0x22e6b
movq -0x18(%rbp), %rax
movq %rax, -0x8(%rbp)
movq -0x8(%rbp), %rax
addq $0x260, %rsp            # imm = 0x260
popq %rbp
retq
movq -0x78(%rbp), %rdi
callq 0x77b0
nopw %cs:(%rax,%rax)
nop