// File: joncampbell123[P]haxcc/haxpp.cpp
// Function: parse_tokens_define(std::vector<token, std::allocator<token>>&, __gnu_cxx::__normal_iterator<char*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>&, __gnu_cxx::__normal_iterator<char*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&)
void parse_tokens_define(token_string &tokens,string::iterator &li,const string::iterator lie,const int32_t lineno,const string &source) {
    vector<string> params;

    (void)lineno;
    (void)source;

    /* parens must follow #define with no space */
    if (strit_next_match_inc(li,lie,'(')) {
        /* (params)
         *
         * params =
         * params = identifier
         * params = identifier identifier
         * params = identifier ... */
        tokens.push_back(token::OPEN_PARENS);
        parse_skip_whitespace(li,lie);
        while (1) {
            if (li == lie) {
                throw invalid_argument("macro param list ended without closing parens");
            }
            else if (strit_next_match_inc(li,lie,')')) {
                tokens.push_back(token::CLOSE_PARENS);
                break;
            }
            else if (strit_next_match_inc(li,lie,',')) {
                tokens.push_back(token::COMMA);
            }
            else if (strit_next_match_inc(li,lie,'.','.','.')) {
                tokens.push_back(token::DOTDOTDOT);
            }
            else if (isidentifier_fc(*li)) {
                string ident = parse_identifier(li,lie); /* will throw exception otherwise */
                tokens.push_back(move(token(token::IDENTIFIER,ident)));
                params.push_back(ident);
            }
            else {
                throw invalid_argument(string("macro param list has unexpected char ") + (*li));
            }

            parse_skip_whitespace(li,lie);
        }
    }

    string r;

    parse_skip_whitespace(li,lie);

    while (li != lie) {
        if (strit_next_match_inc(li,lie,'#','#')) {
            if (!r.empty()) {
                tokens.push_back(move(token(token::MACROSUBST,r)));
                r.clear();
            }
            tokens.push_back(token::TOKEN_PASTE);
        }
        else if (strit_next_match_inc(li,lie,'#')) {
            if (!r.empty()) {
                tokens.push_back(move(token(token::MACROSUBST,r)));
                r.clear();
            }
            tokens.push_back(token::STRINGIFY);
        }
        else if (strit_next_match_inc(li,lie,',')) {
            if (!r.empty()) {
                tokens.push_back(move(token(token::MACROSUBST,r)));
                r.clear();
            }
            tokens.push_back(token::COMMA);
        }
        else if (isidentifier_fc(*li)) {
            string ident = parse_identifier(li,lie); /* will throw exception otherwise */

            auto paridx = find(params.begin(),params.end(),ident);
            if (paridx != params.end()) {
                if (!r.empty()) {
                    tokens.push_back(move(token(token::MACROSUBST,r)));
                    r.clear();
                }
                tokens.push_back(move(token(token::MACROPARAM,(unsigned long long)(paridx - params.begin()))));
            }
            else if (ident == "__VA_ARGS__") {
                if (!r.empty()) {
                    tokens.push_back(move(token(token::MACROSUBST,r)));
                    r.clear();
                }
                tokens.push_back(token::VA_ARGS);
            }
            else if (ident == "__VA_OPT__") {
                if (!r.empty()) {
                    tokens.push_back(move(token(token::MACROSUBST,r)));
                    r.clear();
                }
                tokens.push_back(token::VA_OPT);
                parse_skip_whitespace(li,lie);
                if (strit_next_match_inc(li,lie,'(')) {
                    int parens = 1;

                    tokens.push_back(token::OPEN_PARENS);
                    while (li != lie) {
                        if (*li == '(')
                            parens++;
                        else if (*li == ')') {
                            parens--;
                            if (parens == 0) {
                                tokens.push_back(move(token(token::MACROSUBST,r)));
                                tokens.push_back(token::CLOSE_PARENS);
                                r.clear();
                                li++;
                                break;
                            }
                        }

                        r += *li++;
                    }

                    if (parens != 0)
                        throw invalid_argument("Mismatched __VA_OPT__ parens");
                }
            }
            else {
                r += ident;
            }
        }
        else if (*li == ' ' && r.empty()) {
            li++; /* ignore */
        }
        else {
            r += *(li++);
        }
    }

    if (!r.empty()) {
        tokens.push_back(move(token(token::MACROSUBST,r)));
        r.clear();
    }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xd80, %rsp            # imm = 0xD80
movq %rdx, -0x8(%rbp)
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movl %ecx, -0x1c(%rbp)
movq %r8, -0x28(%rbp)
leaq -0x40(%rbp), %rdi
callq 0x161a0
movq -0x18(%rbp), %rdi
movq -0x8(%rbp), %rax
movq %rax, -0x48(%rbp)
movq -0x48(%rbp), %rsi
movl $0x28, %edx
callq 0x64a0
movb %al, -0xc51(%rbp)
jmp 0xf5f9
movb -0xc51(%rbp), %al
testb $0x1, %al
jne 0xf608
jmp 0xfb1d
movq -0x10(%rbp), %rax
movq %rax, -0xc60(%rbp)
leaq -0xd0(%rbp), %rdi
movl $0x20, %esi
callq 0x4170
jmp 0xf626
movq -0xc60(%rbp), %rdi
leaq -0xd0(%rbp), %rsi
callq 0x163b0
jmp 0xf63b
leaq -0xd0(%rbp), %rdi
callq 0x15bf0
movq -0x18(%rbp), %rdi
movq -0x8(%rbp), %rax
movq %rax, -0xd8(%rbp)
movq -0xd8(%rbp), %rsi
callq 0x4e50
jmp 0xf664
movq -0x18(%rbp), %rdi
leaq -0x8(%rbp), %rsi
callq 0x15b70
testb $0x1, %al
jne 0xf67a
jmp 0xf709
movl $0x10, %edi
callq 0x3130
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0xc68(%rbp)
leaq 0x15d5e(%rip), %rsi     # 0x253f6
callq 0x3530
jmp 0xf69f
movq -0xc68(%rbp), %rdi
movq 0x2392b(%rip), %rsi     # 0x32fd8
movq 0x2390c(%rip), %rdx     # 0x32fc0
callq 0x34b0
jmp 0x108af
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
jmp 0x1089d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
leaq -0xd0(%rbp), %rdi
callq 0x15bf0
jmp 0x1089d
movq -0xc68(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
callq 0x31f0
jmp 0x1089d
movq -0x18(%rbp), %rdi
movq -0x8(%rbp), %rax
movq %rax, -0xe0(%rbp)
movq -0xe0(%rbp), %rsi
movl $0x29, %edx
callq 0x64a0
movb %al, -0xc69(%rbp)
jmp 0xf731
movb -0xc69(%rbp), %al
testb $0x1, %al
jne 0xf73d
jmp 0xf79e
movq -0x10(%rbp), %rax
movq %rax, -0xc78(%rbp)
leaq -0x150(%rbp), %rdi
movl $0x21, %esi
callq 0x4170
jmp 0xf75b
movq -0xc78(%rbp), %rdi
leaq -0x150(%rbp), %rsi
callq 0x163b0
jmp 0xf770
leaq -0x150(%rbp), %rdi
callq 0x15bf0
jmp 0xfb1b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
leaq -0x150(%rbp), %rdi
callq 0x15bf0
jmp 0x1089d
movq -0x18(%rbp), %rdi
movq -0x8(%rbp), %rax
movq %rax, -0x158(%rbp)
movq -0x158(%rbp), %rsi
movl $0x2c, %edx
callq 0x64a0
movb %al, -0xc79(%rbp)
jmp 0xf7c6
movb -0xc79(%rbp), %al
testb $0x1, %al
jne 0xf7d2
jmp 0xf833
movq -0x10(%rbp), %rax
movq %rax, -0xc88(%rbp)
leaq -0x1d0(%rbp), %rdi
movl $0x17, %esi
callq 0x4170
jmp 0xf7f0
movq -0xc88(%rbp), %rdi
leaq -0x1d0(%rbp), %rsi
callq 0x163b0
jmp 0xf805
leaq -0x1d0(%rbp), %rdi
callq 0x15bf0
jmp 0xfaf7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
leaq -0x1d0(%rbp), %rdi
callq 0x15bf0
jmp 0x1089d
movq -0x18(%rbp), %rdi
movq -0x8(%rbp), %rax
movq %rax, -0x1d8(%rbp)
movq -0x1d8(%rbp), %rsi
movl $0x2e, %r8d
movl %r8d, %edx
movl %r8d, %ecx
callq 0x6930
movb %al, -0xc89(%rbp)
jmp 0xf862
movb -0xc89(%rbp), %al
testb $0x1, %al
jne 0xf86e
jmp 0xf8cf
movq -0x10(%rbp), %rax
movq %rax, -0xc98(%rbp)
leaq -0x250(%rbp), %rdi
movl $0x19, %esi
callq 0x4170
jmp 0xf88c
movq -0xc98(%rbp), %rdi
leaq -0x250(%rbp), %rsi
callq 0x163b0
jmp 0xf8a1
leaq -0x250(%rbp), %rdi
callq 0x15bf0
jmp 0xfaf5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
leaq -0x250(%rbp), %rdi
callq 0x15bf0
jmp 0x1089d
movq -0x18(%rbp), %rdi
callq 0x15a50
movsbl (%rax), %edi
callq 0x5700
testb $0x1, %al
jne 0xf8e9
jmp 0xf9e8
movq -0x18(%rbp), %rsi
movq -0x8(%rbp), %rax
movq %rax, -0x278(%rbp)
movq -0x278(%rbp), %rdx
leaq -0x270(%rbp), %rdi
callq 0x7ad0
jmp 0xf90d
movq -0x10(%rbp), %rax
movq %rax, -0xca0(%rbp)
leaq -0x310(%rbp), %rdi
leaq -0x270(%rbp), %rsi
callq 0x3100
jmp 0xf92d
leaq -0x2f0(%rbp), %rdi
movl $0x5, %esi
leaq -0x310(%rbp), %rdx
callq 0x4100
jmp 0xf947
movq -0xca0(%rbp), %rdi
leaq -0x2f0(%rbp), %rsi
callq 0x163b0
jmp 0xf95c
leaq -0x2f0(%rbp), %rdi
callq 0x15bf0
leaq -0x310(%rbp), %rdi
callq 0x3598
leaq -0x40(%rbp), %rdi
leaq -0x270(%rbp), %rsi
callq 0x163e0
jmp 0xf986
leaq -0x270(%rbp), %rdi
callq 0x3598
jmp 0xfaf3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
jmp 0xf9d7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
jmp 0xf9cb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
leaq -0x2f0(%rbp), %rdi
callq 0x15bf0
leaq -0x310(%rbp), %rdi
callq 0x3598
leaq -0x270(%rbp), %rdi
callq 0x3598
jmp 0x1089d
movb $0x1, -0x352(%rbp)
movl $0x10, %edi
callq 0x3130
movq %rax, -0xcb0(%rbp)
leaq -0x351(%rbp), %rdi
movq %rdi, -0xca8(%rbp)
callq 0x34f0
movq -0xca8(%rbp), %rdx
leaq 0x15a03(%rip), %rsi     # 0x25424
leaq -0x350(%rbp), %rdi
callq 0x15960
jmp 0xfa2f
movq -0x18(%rbp), %rdi
callq 0x15a50
movsbl (%rax), %edx
leaq -0x330(%rbp), %rdi
leaq -0x350(%rbp), %rsi
callq 0x15c10
jmp 0xfa50
movq -0xcb0(%rbp), %rdi
leaq -0x330(%rbp), %rsi
callq 0x34d0
jmp 0xfa65
movq -0xcb0(%rbp), %rdi
movb $0x0, -0x352(%rbp)
movq 0x2355e(%rip), %rsi     # 0x32fd8
movq 0x2353f(%rip), %rdx     # 0x32fc0
callq 0x34b0
jmp 0x108af
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
jmp 0xfacb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
jmp 0xfabf
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
leaq -0x330(%rbp), %rdi
callq 0x3598
leaq -0x350(%rbp), %rdi
callq 0x3598
leaq -0x351(%rbp), %rdi
callq 0x32f0
testb $0x1, -0x352(%rbp)
jne 0xfae2
jmp 0xfaee
movq -0xcb0(%rbp), %rdi
callq 0x31f0
jmp 0x1089d
jmp 0xfaf5
jmp 0xfaf7
jmp 0xfaf9
jmp 0xfafb
movq -0x18(%rbp), %rdi
movq -0x8(%rbp), %rax
movq %rax, -0x360(%rbp)
movq -0x360(%rbp), %rsi
callq 0x4e50
jmp 0xf662
jmp 0xfb1d
leaq -0x380(%rbp), %rdi
callq 0x33d0
movq -0x18(%rbp), %rdi
movq -0x8(%rbp), %rax
movq %rax, -0x388(%rbp)
movq -0x388(%rbp), %rsi
callq 0x4e50
movq -0x18(%rbp), %rdi
leaq -0x8(%rbp), %rsi
callq 0x15a10
testb $0x1, %al
jne 0xfb5a
jmp 0x107b6
movq -0x18(%rbp), %rdi
movq -0x8(%rbp), %rax
movq %rax, -0x390(%rbp)
movq -0x390(%rbp), %rsi
movl $0x23, %ecx
movl %ecx, %edx
callq 0x6a30
movb %al, -0xcb1(%rbp)
jmp 0xfb84
movb -0xcb1(%rbp), %al
testb $0x1, %al
jne 0xfb93
jmp 0xfcc5
leaq -0x380(%rbp), %rdi
callq 0x34a0
testb $0x1, %al
jne 0xfc64
movq -0x10(%rbp), %rax
movq %rax, -0xcc0(%rbp)
leaq -0x420(%rbp), %rdi
leaq -0x380(%rbp), %rsi
callq 0x3100
jmp 0xfbc7
leaq -0x400(%rbp), %rdi
movl $0x3, %esi
leaq -0x420(%rbp), %rdx
callq 0x4100
jmp 0xfbe1
movq -0xcc0(%rbp), %rdi
leaq -0x400(%rbp), %rsi
callq 0x163b0
jmp 0xfbf6
leaq -0x400(%rbp), %rdi
callq 0x15bf0
leaq -0x420(%rbp), %rdi
callq 0x3598
leaq -0x380(%rbp), %rdi
callq 0x33b0
jmp 0xfc64
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
jmp 0x10891
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
jmp 0xfc53
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
leaq -0x400(%rbp), %rdi
callq 0x15bf0
leaq -0x420(%rbp), %rdi
callq 0x3598
jmp 0x10891
movq -0x10(%rbp), %rax
movq %rax, -0xcc8(%rbp)
leaq -0x490(%rbp), %rdi
movl $0x7b, %esi
callq 0x4170
jmp 0xfc82
movq -0xcc8(%rbp), %rdi
leaq -0x490(%rbp), %rsi
callq 0x163b0
jmp 0xfc97
leaq -0x490(%rbp), %rdi
callq 0x15bf0
jmp 0x107b1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
leaq -0x490(%rbp), %rdi
callq 0x15bf0
jmp 0x10891
movq -0x18(%rbp), %rdi
movq -0x8(%rbp), %rax
movq %rax, -0x498(%rbp)
movq -0x498(%rbp), %rsi
movl $0x23, %edx
callq 0x64a0
movb %al, -0xcc9(%rbp)
jmp 0xfced
movb -0xcc9(%rbp), %al
testb $0x1, %al
jne 0xfcfc
jmp 0xfe1d
leaq -0x380(%rbp), %rdi
callq 0x34a0
testb $0x1, %al
jne 0xfdbc
movq -0x10(%rbp), %rax
movq %rax, -0xcd8(%rbp)
leaq -0x530(%rbp), %rdi
leaq -0x380(%rbp), %rsi
callq 0x3100
jmp 0xfd30
leaq -0x510(%rbp), %rdi
movl $0x3, %esi
leaq -0x530(%rbp), %rdx
callq 0x4100
jmp 0xfd4a
movq -0xcd8(%rbp), %rdi
leaq -0x510(%rbp), %rsi
callq 0x163b0
jmp 0xfd5f
leaq -0x510(%rbp), %rdi
callq 0x15bf0
leaq -0x530(%rbp), %rdi
callq 0x3598
leaq -0x380(%rbp), %rdi
callq 0x33b0
jmp 0xfdbc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
jmp 0xfdab
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
leaq -0x510(%rbp), %rdi
callq 0x15bf0
leaq -0x530(%rbp), %rdi
callq 0x3598
jmp 0x10891
movq -0x10(%rbp), %rax
movq %rax, -0xce0(%rbp)
leaq -0x5a0(%rbp), %rdi
movl $0x7a, %esi
callq 0x4170
jmp 0xfdda
movq -0xce0(%rbp), %rdi
leaq -0x5a0(%rbp), %rsi
callq 0x163b0
jmp 0xfdef
leaq -0x5a0(%rbp), %rdi
callq 0x15bf0
jmp 0x107af
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
leaq -0x5a0(%rbp), %rdi
callq 0x15bf0
jmp 0x10891
movq -0x18(%rbp), %rdi
movq -0x8(%rbp), %rax
movq %rax, -0x5a8(%rbp)
movq -0x5a8(%rbp), %rsi
movl $0x2c, %edx
callq 0x64a0
movb %al, -0xce1(%rbp)
jmp 0xfe45
movb -0xce1(%rbp), %al
testb $0x1, %al
jne 0xfe54
jmp 0xff75
leaq -0x380(%rbp), %rdi
callq 0x34a0
testb $0x1, %al
jne 0xff14
movq -0x10(%rbp), %rax
movq %rax, -0xcf0(%rbp)
leaq -0x640(%rbp), %rdi
leaq -0x380(%rbp), %rsi
callq 0x3100
jmp 0xfe88
leaq -0x620(%rbp), %rdi
movl $0x3, %esi
leaq -0x640(%rbp), %rdx
callq 0x4100
jmp 0xfea2
movq -0xcf0(%rbp), %rdi
leaq -0x620(%rbp), %rsi
callq 0x163b0
jmp 0xfeb7
leaq -0x620(%rbp), %rdi
callq 0x15bf0
leaq -0x640(%rbp), %rdi
callq 0x3598
leaq -0x380(%rbp), %rdi
callq 0x33b0
jmp 0xff14
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
jmp 0xff03
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
leaq -0x620(%rbp), %rdi
callq 0x15bf0
leaq -0x640(%rbp), %rdi
callq 0x3598
jmp 0x10891
movq -0x10(%rbp), %rax
movq %rax, -0xcf8(%rbp)
leaq -0x6b0(%rbp), %rdi
movl $0x17, %esi
callq 0x4170
jmp 0xff32
movq -0xcf8(%rbp), %rdi
leaq -0x6b0(%rbp), %rsi
callq 0x163b0
jmp 0xff47
leaq -0x6b0(%rbp), %rdi
callq 0x15bf0
jmp 0x107ad
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
leaq -0x6b0(%rbp), %rdi
callq 0x15bf0
jmp 0x10891
movq -0x18(%rbp), %rdi
callq 0x15a50
movsbl (%rax), %edi
callq 0x5700
testb $0x1, %al
jne 0xff8f
jmp 0x10741
movq -0x18(%rbp), %rsi
movq -0x8(%rbp), %rax
movq %rax, -0x6d8(%rbp)
movq -0x6d8(%rbp), %rdx
leaq -0x6d0(%rbp), %rdi
callq 0x7ad0
jmp 0xffb3
leaq -0x40(%rbp), %rdi
movq %rdi, -0xd08(%rbp)
callq 0x164a0
movq -0xd08(%rbp), %rdi
movq %rax, -0x6e8(%rbp)
callq 0x164d0
movq %rax, -0x6f0(%rbp)
movq -0x6e8(%rbp), %rdi
movq -0x6f0(%rbp), %rsi
leaq -0x6d0(%rbp), %rdx
callq 0x16450
movq %rax, -0xd00(%rbp)
jmp 0x10000
movq -0xd00(%rbp), %rax
movq %rax, -0x6e0(%rbp)
leaq -0x40(%rbp), %rdi
callq 0x164d0
movq %rax, -0x6f8(%rbp)
leaq -0x6e0(%rbp), %rdi
leaq -0x6f8(%rbp), %rsi
callq 0x16500
testb $0x1, %al
jne 0x1003a
jmp 0x10192
leaq -0x380(%rbp), %rdi
callq 0x34a0
testb $0x1, %al
jne 0x1010b
movq -0x10(%rbp), %rax
movq %rax, -0xd10(%rbp)
leaq -0x790(%rbp), %rdi
leaq -0x380(%rbp), %rsi
callq 0x3100
jmp 0x1006e
leaq -0x770(%rbp), %rdi
movl $0x3, %esi
leaq -0x790(%rbp), %rdx
callq 0x4100
jmp 0x10088
movq -0xd10(%rbp), %rdi
leaq -0x770(%rbp), %rsi
callq 0x163b0
jmp 0x1009d
leaq -0x770(%rbp), %rdi
callq 0x15bf0
leaq -0x790(%rbp), %rdi
callq 0x3598
leaq -0x380(%rbp), %rdi
callq 0x33b0
jmp 0x1010b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
jmp 0x10730
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
jmp 0x100fa
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
leaq -0x770(%rbp), %rdi
callq 0x15bf0
leaq -0x790(%rbp), %rdi
callq 0x3598
jmp 0x10730
movq -0x10(%rbp), %rax
movq %rax, -0xd18(%rbp)
leaq -0x40(%rbp), %rdi
callq 0x164a0
movq %rax, -0x808(%rbp)
leaq -0x6e0(%rbp), %rdi
leaq -0x808(%rbp), %rsi
callq 0x16540
movq %rax, %rdx
leaq -0x800(%rbp), %rdi
movl $0x4, %esi
callq 0x4090
jmp 0x1014f
movq -0xd18(%rbp), %rdi
leaq -0x800(%rbp), %rsi
callq 0x163b0
jmp 0x10164
leaq -0x800(%rbp), %rdi
callq 0x15bf0
jmp 0x10722
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
leaq -0x800(%rbp), %rdi
callq 0x15bf0
jmp 0x10730
leaq 0x14a55(%rip), %rsi     # 0x24bee
leaq -0x6d0(%rbp), %rdi
callq 0x15ab0
movb %al, -0xd19(%rbp)
jmp 0x101ad
movb -0xd19(%rbp), %al
testb $0x1, %al
jne 0x101bc
jmp 0x102dd
leaq -0x380(%rbp), %rdi
callq 0x34a0
testb $0x1, %al
jne 0x1027c
movq -0x10(%rbp), %rax
movq %rax, -0xd28(%rbp)
leaq -0x8a0(%rbp), %rdi
leaq -0x380(%rbp), %rsi
callq 0x3100
jmp 0x101f0
leaq -0x880(%rbp), %rdi
movl $0x3, %esi
leaq -0x8a0(%rbp), %rdx
callq 0x4100
jmp 0x1020a
movq -0xd28(%rbp), %rdi
leaq -0x880(%rbp), %rsi
callq 0x163b0
jmp 0x1021f
leaq -0x880(%rbp), %rdi
callq 0x15bf0
leaq -0x8a0(%rbp), %rdi
callq 0x3598
leaq -0x380(%rbp), %rdi
callq 0x33b0
jmp 0x1027c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
jmp 0x1026b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
leaq -0x880(%rbp), %rdi
callq 0x15bf0
leaq -0x8a0(%rbp), %rdi
callq 0x3598
jmp 0x10730
movq -0x10(%rbp), %rax
movq %rax, -0xd30(%rbp)
leaq -0x910(%rbp), %rdi
movl $0x7c, %esi
callq 0x4170
jmp 0x1029a
movq -0xd30(%rbp), %rdi
leaq -0x910(%rbp), %rsi
callq 0x163b0
jmp 0x102af
leaq -0x910(%rbp), %rdi
callq 0x15bf0
jmp 0x10720
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
leaq -0x910(%rbp), %rdi
callq 0x15bf0
jmp 0x10730
leaq 0x14916(%rip), %rsi     # 0x24bfa
leaq -0x6d0(%rbp), %rdi
callq 0x15ab0
movb %al, -0xd31(%rbp)
jmp 0x102f8
movb -0xd31(%rbp), %al
testb $0x1, %al
jne 0x10307
jmp 0x10707
leaq -0x380(%rbp), %rdi
callq 0x34a0
testb $0x1, %al
jne 0x103c7
movq -0x10(%rbp), %rax
movq %rax, -0xd40(%rbp)
leaq -0x9a0(%rbp), %rdi
leaq -0x380(%rbp), %rsi
callq 0x3100
jmp 0x1033b
leaq -0x980(%rbp), %rdi
movl $0x3, %esi
leaq -0x9a0(%rbp), %rdx
callq 0x4100
jmp 0x10355
movq -0xd40(%rbp), %rdi
leaq -0x980(%rbp), %rsi
callq 0x163b0
jmp 0x1036a
leaq -0x980(%rbp), %rdi
callq 0x15bf0
leaq -0x9a0(%rbp), %rdi
callq 0x3598
leaq -0x380(%rbp), %rdi
callq 0x33b0
jmp 0x103c7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
jmp 0x103b6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
leaq -0x980(%rbp), %rdi
callq 0x15bf0
leaq -0x9a0(%rbp), %rdi
callq 0x3598
jmp 0x10730
movq -0x10(%rbp), %rax
movq %rax, -0xd48(%rbp)
leaq -0xa10(%rbp), %rdi
movl $0x7d, %esi
callq 0x4170
jmp 0x103e5
movq -0xd48(%rbp), %rdi
leaq -0xa10(%rbp), %rsi
callq 0x163b0
jmp 0x103fa
leaq -0xa10(%rbp), %rdi
callq 0x15bf0
movq -0x18(%rbp), %rdi
movq -0x8(%rbp), %rax
movq %rax, -0xa18(%rbp)
movq -0xa18(%rbp), %rsi
callq 0x4e50
movq -0x18(%rbp), %rdi
movq -0x8(%rbp), %rax
movq %rax, -0xa20(%rbp)
movq -0xa20(%rbp), %rsi
movl $0x28, %edx
callq 0x64a0
movb %al, -0xd49(%rbp)
jmp 0x10449
movb -0xd49(%rbp), %al
testb $0x1, %al
jne 0x10458
jmp 0x10705
movl $0x1, -0xa24(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0xd58(%rbp)
leaq -0xaa0(%rbp), %rdi
movl $0x20, %esi
callq 0x4170
jmp 0x10480
movq -0xd58(%rbp), %rdi
leaq -0xaa0(%rbp), %rsi
callq 0x163b0
jmp 0x10495
leaq -0xaa0(%rbp), %rdi
callq 0x15bf0
movq -0x18(%rbp), %rdi
leaq -0x8(%rbp), %rsi
callq 0x15a10
testb $0x1, %al
jne 0x104b7
jmp 0x1069c
movq -0x18(%rbp), %rdi
callq 0x15a50
movsbl (%rax), %eax
cmpl $0x28, %eax
jne 0x10516
movl -0xa24(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xa24(%rbp)
jmp 0x10668
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
leaq -0xa10(%rbp), %rdi
callq 0x15bf0
jmp 0x10730
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
leaq -0xaa0(%rbp), %rdi
callq 0x15bf0
jmp 0x10730
movq -0x18(%rbp), %rdi
callq 0x15a50
movsbl (%rax), %eax
cmpl $0x29, %eax
jne 0x10666
movl -0xa24(%rbp), %eax
addl $-0x1, %eax
movl %eax, -0xa24(%rbp)
cmpl $0x0, -0xa24(%rbp)
jne 0x10664
movq -0x10(%rbp), %rax
movq %rax, -0xd60(%rbp)
leaq -0xb30(%rbp), %rdi
leaq -0x380(%rbp), %rsi
callq 0x3100
jmp 0x10567
leaq -0xb10(%rbp), %rdi
movl $0x3, %esi
leaq -0xb30(%rbp), %rdx
callq 0x4100
jmp 0x10581
movq -0xd60(%rbp), %rdi
leaq -0xb10(%rbp), %rsi
callq 0x163b0
jmp 0x10596
leaq -0xb10(%rbp), %rdi
callq 0x15bf0
leaq -0xb30(%rbp), %rdi
callq 0x3598
movq -0x10(%rbp), %rax
movq %rax, -0xd68(%rbp)
leaq -0xba0(%rbp), %rdi
movl $0x21, %esi
callq 0x4170
jmp 0x105cc
movq -0xd68(%rbp), %rdi
leaq -0xba0(%rbp), %rsi
callq 0x163b0
jmp 0x105e1
leaq -0xba0(%rbp), %rdi
callq 0x15bf0
leaq -0x380(%rbp), %rdi
callq 0x33b0
movq -0x18(%rbp), %rdi
xorl %esi, %esi
callq 0x15a70
movq %rax, -0xba8(%rbp)
jmp 0x1069c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
jmp 0x10636
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
leaq -0xb10(%rbp), %rdi
callq 0x15bf0
leaq -0xb30(%rbp), %rdi
callq 0x3598
jmp 0x10730
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
leaq -0xba0(%rbp), %rdi
callq 0x15bf0
jmp 0x10730
jmp 0x10666
jmp 0x10668
movq -0x18(%rbp), %rdi
xorl %esi, %esi
callq 0x15a70
movq %rax, -0xbb0(%rbp)
leaq -0xbb0(%rbp), %rdi
callq 0x15a50
movsbl (%rax), %esi
leaq -0x380(%rbp), %rdi
callq 0x3190
jmp 0x10697
jmp 0x104a1
cmpl $0x0, -0xa24(%rbp)
je 0x10703
movl $0x10, %edi
callq 0x3130
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0xd70(%rbp)
leaq 0x14d87(%rip), %rsi     # 0x2544a
callq 0x3530
jmp 0x106ca
movq -0xd70(%rbp), %rdi
movq 0x22900(%rip), %rsi     # 0x32fd8
movq 0x228e1(%rip), %rdx     # 0x32fc0
callq 0x34b0
jmp 0x108af
movq -0xd70(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
callq 0x31f0
jmp 0x10730
jmp 0x10705
jmp 0x1071e
leaq -0x380(%rbp), %rdi
leaq -0x6d0(%rbp), %rsi
callq 0x3390
jmp 0x1071c
jmp 0x1071e
jmp 0x10720
jmp 0x10722
leaq -0x6d0(%rbp), %rdi
callq 0x3598
jmp 0x107ab
leaq -0x6d0(%rbp), %rdi
callq 0x3598
jmp 0x10891
movq -0x18(%rbp), %rdi
callq 0x15a50
movsbl (%rax), %eax
cmpl $0x20, %eax
jne 0x10778
leaq -0x380(%rbp), %rdi
callq 0x34a0
testb $0x1, %al
jne 0x10764
jmp 0x10778
movq -0x18(%rbp), %rdi
xorl %esi, %esi
callq 0x15a70
movq %rax, -0xbb8(%rbp)
jmp 0x107a9
movq -0x18(%rbp), %rdi
xorl %esi, %esi
callq 0x15a70
movq %rax, -0xbc0(%rbp)
leaq -0xbc0(%rbp), %rdi
callq 0x15a50
movsbl (%rax), %esi
leaq -0x380(%rbp), %rdi
callq 0x3190
jmp 0x107a7
jmp 0x107a9
jmp 0x107ab
jmp 0x107ad
jmp 0x107af
jmp 0x107b1
jmp 0xfb44
leaq -0x380(%rbp), %rdi
callq 0x34a0
testb $0x1, %al
jne 0x10873
movq -0x10(%rbp), %rax
movq %rax, -0xd78(%rbp)
leaq -0xc50(%rbp), %rdi
leaq -0x380(%rbp), %rsi
callq 0x3100
jmp 0x107ea
leaq -0xc30(%rbp), %rdi
movl $0x3, %esi
leaq -0xc50(%rbp), %rdx
callq 0x4100
jmp 0x10804
movq -0xd78(%rbp), %rdi
leaq -0xc30(%rbp), %rsi
callq 0x163b0
jmp 0x10819
leaq -0xc30(%rbp), %rdi
callq 0x15bf0
leaq -0xc50(%rbp), %rdi
callq 0x3598
leaq -0x380(%rbp), %rdi
callq 0x33b0
jmp 0x10873
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
jmp 0x10865
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
leaq -0xc30(%rbp), %rdi
callq 0x15bf0
leaq -0xc50(%rbp), %rdi
callq 0x3598
jmp 0x10891
leaq -0x380(%rbp), %rdi
callq 0x3598
leaq -0x40(%rbp), %rdi
callq 0x16350
addq $0xd80, %rsp            # imm = 0xD80
popq %rbp
retq
leaq -0x380(%rbp), %rdi
callq 0x3598
leaq -0x40(%rbp), %rdi
callq 0x16350
movq -0x50(%rbp), %rdi
callq 0x34e0
nop