// File: /workspace/github_cpp_makefile_star2_O1/TheStanian[P]Args/main.cpp
// Function: main
int main(int argc, char *argv[]) {
	/* It's as simple as creating an instance of ArgsHandler! */
	ArgsHandler args(argc, argv, true);

	/* Printing all args could be useful for debugging purposes. */
	std::cout << args << std::endl;

	// Checking for flag "flag" (-flag)
	if (args.hasFlag("flag")) {
		std::cout << "We have a flag called flag!" << std::endl;
	}

	/* Checking for a flag's value (-flag=value) */
	if (args.hasFlag("flag")) {
		std::cout << "It even has a value of \"" << args.getFlagValueString("flag") << "\"!" << std::endl;
	}

	/* No need to ensure the flag actually has been set, as you can easily provide a default! */
	if (!args.hasFlag("flag")) {
		std::cout << "There is no flag called flag, but we can still get the default value of \""
				<< args.getFlagValueString("flag", "_defaultValue") << "\"."<< std::endl;
	}
	/*
	 * (I have also provided methods for doubles, ints and bools.
	 *  I decided not to go with templates here, as implementation for every case is different, and templates are messy.)
	 */

	/* You can get the arguments after a specific flag (-flag in this case) like so: */
	std::vector<std::string> argsAfterFlag = args.getFlagArguments("flag");
	std::cout << "arguments after flag \"flag\": ";
	for (std::string &s:argsAfterFlag) {
		std::cout << s << "; ";
	}
	std::cout << std::endl;

	/* In some cases it can be useful to check which flags you've checked for so far.
	 * You can get them as a std::set<std::string> or printed to cout.
	 */
	args.printCheckedFlags();

	return 0;
}

// Assembly:
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x1e0, %rsp            # imm = 0x1E0
movq %rsi, %rdx
movl %edi, %esi
leaq 0x128(%rsp), %rbx
movq %rbx, %rdi
movl $0x1, %ecx
callq 0x2e4c
movq 0x7adb(%rip), %rdi      # 0x9fd8
movq %rbx, %rsi
callq 0x4241
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x2160
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x20f0
leaq 0x118(%rsp), %r14
movq %r14, -0x10(%r14)
leaq 0x4ac2(%rip), %rsi      # 0x7004
leaq 0x4abf(%rip), %rdx      # 0x7008
leaq 0x108(%rsp), %rdi
callq 0x2dbc
leaq 0x128(%rsp), %rdi
leaq 0x108(%rsp), %rsi
callq 0x3648
movl %eax, %ebx
movq 0x108(%rsp), %rdi
cmpq %r14, %rdi
je 0x258a
movq 0x118(%rsp), %rsi
incq %rsi
callq 0x2180
testb %bl, %bl
je 0x25d4
movq 0x7a43(%rip), %rbx      # 0x9fd8
leaq 0x4a6d(%rip), %rsi      # 0x7009
movl $0x1b, %edx
movq %rbx, %rdi
callq 0x21b0
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x2160
movsbl %al, %esi
movq 0x7a11(%rip), %rdi      # 0x9fd8
callq 0x2030
movq %rax, %rdi
callq 0x20f0
leaq 0xf8(%rsp), %r14
movq %r14, -0x10(%r14)
leaq 0x4a1d(%rip), %rsi      # 0x7004
leaq 0x4a1a(%rip), %rdx      # 0x7008
leaq 0xe8(%rsp), %rdi
callq 0x2dbc
leaq 0x128(%rsp), %rdi
leaq 0xe8(%rsp), %rsi
callq 0x3648
movl %eax, %ebx
movq 0xe8(%rsp), %rdi
cmpq %r14, %rdi
je 0x262f
movq 0xf8(%rsp), %rsi
incq %rsi
callq 0x2180
testb %bl, %bl
je 0x2764
movq 0x799a(%rip), %rdi      # 0x9fd8
leaq 0x49e0(%rip), %rsi      # 0x7025
movl $0x18, %edx
callq 0x21b0
leaq 0xd8(%rsp), %r14
movq %r14, -0x10(%r14)
leaq 0x49a2(%rip), %rsi      # 0x7004
leaq 0x499f(%rip), %rdx      # 0x7008
leaq 0xc8(%rsp), %rdi
callq 0x2dbc
leaq 0xb8(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x4aa2(%rip), %rdx      # 0x712b
leaq 0xa8(%rsp), %rdi
movq %rdx, %rsi
callq 0x2dbc
leaq 0x8(%rsp), %rdi
leaq 0x128(%rsp), %rsi
leaq 0xc8(%rsp), %rdx
leaq 0xa8(%rsp), %rcx
callq 0x3688
movq 0x8(%rsp), %rsi
movq 0x10(%rsp), %rdx
movq 0x790c(%rip), %rdi      # 0x9fd8
callq 0x21b0
movq %rax, %rbx
leaq 0x4963(%rip), %rsi      # 0x703e
movl $0x2, %edx
movq %rax, %rdi
callq 0x21b0
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x2160
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x20f0
leaq 0x18(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x272a
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x2180
movq 0xa8(%rsp), %rdi
cmpq %r15, %rdi
je 0x2747
movq 0xb8(%rsp), %rsi
incq %rsi
callq 0x2180
movq 0xc8(%rsp), %rdi
cmpq %r14, %rdi
je 0x2764
movq 0xd8(%rsp), %rsi
incq %rsi
callq 0x2180
leaq 0x98(%rsp), %r14
movq %r14, -0x10(%r14)
leaq 0x488d(%rip), %rsi      # 0x7004
leaq 0x488a(%rip), %rdx      # 0x7008
leaq 0x88(%rsp), %rdi
callq 0x2dbc
leaq 0x128(%rsp), %rdi
leaq 0x88(%rsp), %rsi
callq 0x3648
movl %eax, %ebx
movq 0x88(%rsp), %rdi
cmpq %r14, %rdi
je 0x27bf
movq 0x98(%rsp), %rsi
incq %rsi
callq 0x2180
testb %bl, %bl
jne 0x28da
movq 0x780a(%rip), %rdi      # 0x9fd8
leaq 0x486c(%rip), %rsi      # 0x7041
movl $0x49, %edx
callq 0x21b0
leaq 0x78(%rsp), %r14
movq %r14, -0x10(%r14)
leaq 0x4815(%rip), %rsi      # 0x7004
leaq 0x4812(%rip), %rdx      # 0x7008
leaq 0x68(%rsp), %rdi
callq 0x2dbc
leaq 0x58(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x487b(%rip), %rsi      # 0x708b
leaq 0x4881(%rip), %rdx      # 0x7098
leaq 0x48(%rsp), %rdi
callq 0x2dbc
leaq 0x8(%rsp), %rdi
leaq 0x128(%rsp), %rsi
leaq 0x68(%rsp), %rdx
leaq 0x48(%rsp), %rcx
callq 0x3688
movq 0x8(%rsp), %rsi
movq 0x10(%rsp), %rdx
movq 0x778a(%rip), %rdi      # 0x9fd8
callq 0x21b0
movq %rax, %rbx
leaq 0x483c(%rip), %rsi      # 0x7099
movl $0x2, %edx
movq %rax, %rdi
callq 0x21b0
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x2160
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x20f0
leaq 0x18(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x28ac
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x2180
movq 0x48(%rsp), %rdi
cmpq %r15, %rdi
je 0x28c3
movq 0x58(%rsp), %rsi
incq %rsi
callq 0x2180
movq 0x68(%rsp), %rdi
cmpq %r14, %rdi
je 0x28da
movq 0x78(%rsp), %rsi
incq %rsi
callq 0x2180
leaq 0x38(%rsp), %r14
movq %r14, -0x10(%r14)
leaq 0x471a(%rip), %rsi      # 0x7004
leaq 0x4717(%rip), %rdx      # 0x7008
leaq 0x28(%rsp), %rdi
callq 0x2dbc
leaq 0x8(%rsp), %rdi
leaq 0x128(%rsp), %rsi
leaq 0x28(%rsp), %rdx
callq 0x3b9a
movq 0x28(%rsp), %rdi
cmpq %r14, %rdi
je 0x2929
movq 0x38(%rsp), %rsi
incq %rsi
callq 0x2180
movq 0x76a8(%rip), %rbx      # 0x9fd8
leaq 0x4765(%rip), %rsi      # 0x709c
movl $0x1d, %edx
movq %rbx, %rdi
callq 0x21b0
movq 0x8(%rsp), %r12
movq 0x10(%rsp), %r13
cmpq %r13, %r12
je 0x298b
movq 0x767e(%rip), %r14      # 0x9fd8
leaq 0x4759(%rip), %r15      # 0x70ba
movq (%r12), %rsi
movq 0x8(%r12), %rdx
movq %r14, %rdi
callq 0x21b0
movl $0x2, %edx
movq %rax, %rdi
movq %r15, %rsi
callq 0x21b0
addq $0x20, %r12
cmpq %r13, %r12
jne 0x2961
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x2160
movsbl %al, %esi
movq 0x762f(%rip), %rdi      # 0x9fd8
callq 0x2030
movq %rax, %rdi
callq 0x20f0
leaq 0x128(%rsp), %rdi
callq 0x40da
leaq 0x8(%rsp), %rdi
callq 0x2bce
leaq 0x1a8(%rsp), %rbx
movq %rbx, %rdi
callq 0x2c7a
movq -0x20(%rbx), %rdi
leaq 0x198(%rsp), %rax
cmpq %rax, %rdi
je 0x29fe
movq 0x198(%rsp), %rsi
incq %rsi
callq 0x2180
movq 0x170(%rsp), %rdi
testq %rdi, %rdi
je 0x2a1b
movq 0x180(%rsp), %rsi
subq %rdi, %rsi
callq 0x2180
leaq 0x140(%rsp), %rdi
callq 0x2cfc
leaq 0x128(%rsp), %rdi
callq 0x2bce
xorl %eax, %eax
addq $0x1e0, %rsp            # imm = 0x1E0
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
retq
movq %rax, %rbx
jmp 0x2b22
movq %rax, %rbx
jmp 0x2b39
jmp 0x2ba6
movq %rax, %rbx
jmp 0x2b68
movq %rax, %rbx
jmp 0x2b85
jmp 0x2ba6
movq %rax, %rbx
movq 0x28(%rsp), %rdi
cmpq %r14, %rdi
je 0x2bb8
movq 0x38(%rsp), %rsi
jmp 0x2b9a
jmp 0x2ba6
movq %rax, %rbx
movq 0x88(%rsp), %rdi
cmpq %r14, %rdi
je 0x2bb8
movq 0x98(%rsp), %rsi
jmp 0x2b9a
jmp 0x2ba6
movq %rax, %rbx
movq 0xe8(%rsp), %rdi
cmpq %r14, %rdi
je 0x2bb8
movq 0xf8(%rsp), %rsi
jmp 0x2b9a
jmp 0x2ba6
movq %rax, %rbx
movq 0x108(%rsp), %rdi
cmpq %r14, %rdi
je 0x2bb8
movq 0x118(%rsp), %rsi
jmp 0x2b9a
jmp 0x2ba6
movq %rax, %rbx
leaq 0x18(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x2b22
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x2180
movq 0x48(%rsp), %rdi
cmpq %r15, %rdi
je 0x2b39
movq 0x58(%rsp), %rsi
incq %rsi
callq 0x2180
movq 0x68(%rsp), %rdi
cmpq %r14, %rdi
je 0x2bb8
movq 0x78(%rsp), %rsi
jmp 0x2b9a
movq %rax, %rbx
leaq 0x18(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x2b68
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x2180
movq 0xa8(%rsp), %rdi
cmpq %r15, %rdi
je 0x2b85
movq 0xb8(%rsp), %rsi
incq %rsi
callq 0x2180
movq 0xc8(%rsp), %rdi
cmpq %r14, %rdi
je 0x2bb8
movq 0xd8(%rsp), %rsi
incq %rsi
callq 0x2180
jmp 0x2bb8
jmp 0x2bab
movq %rax, %rbx
jmp 0x2bb8
movq %rax, %rbx
leaq 0x8(%rsp), %rdi
callq 0x2bce
leaq 0x128(%rsp), %rdi
callq 0x2c2a
movq %rbx, %rdi
callq 0x2290
nop