// File: EmbeddedPaul166[P]SNMP-Agent/src/parser.cpp
// Function: Parser::parseCustomDataTypeInformation()
void Parser::parseCustomDataTypeInformation()
{ 
    std::smatch match; 
    std::regex patternName("(\\w*) ::=");
    std::regex patternSequence("SEQUENCE");
    std::regex patternChoice("CHOICE");
    
    std::regex patternBrace("(\\d+)\\)\\)");
    std::regex patternBraceTwo("(\\d+)\\)");
    
    std::regex patternInteger("INTEGER");
    std::regex patternOctetString("OCTET STRING");
    std::regex patternObjectIdentifier("OBJECT IDENTIFIER");
    std::regex patternNULL("NULL");
    
    std::regex patternImplicit("IMPLICIT");
    std::regex patternExplicit("EXPLICIT");
    
    std::regex patternUniversal("UNIVERSAL");
    std::regex patternApplication("APPLICATION");
    std::regex patternContextSpecific("CONTEXT-SPECIFIC");
    std::regex patternPrivate("PRIVATE");
    
    std::regex patternSingleElementSequence("\\s*(\\w*?[^{},=])\\n\\s*.*?[^{}]\\n");
    std::regex patternSingleElementChoice("(\\w+)\\n");
    
    std::regex patternTagNumber("(\\d+)\\]");
    
    
    DataType dataType;
    
    m_customDataTypeNameVector.clear();
    
    for (std::vector<std::string>::size_type i = m_customDataTypeStringVector.size() - 1; i != (std::vector<std::string>::size_type) - 1; i--)
    {
        std::string & dataString = m_customDataTypeStringVector[i];
        
        if (std::regex_search(dataString, match, patternName))
        {
           m_customDataTypeNameVector.push_back(match.str(1));
        }
        
        if (std::regex_search(dataString, match, patternSequence))
        {
            
            dataType.m_baseType = BaseDataType::SEQUENCE;
            dataType.m_complexity = EncodingComplexity::CONSTRUCTED;
            std::sregex_iterator beginS(dataString.cbegin(), dataString.cend(), patternSingleElementSequence); 
            std::sregex_iterator endS;
            for (std::sregex_iterator it = beginS; it != endS; it++)
            {
                match = *it;
                dataType.m_nodeNameList.push_back(match.str(1));
            }
        }
        else if (std::regex_search(dataString, match, patternChoice))
        {
            dataType.m_baseType = BaseDataType::CHOICE;
            dataType.m_complexity = EncodingComplexity::CONSTRUCTED;
            std::sregex_iterator beginC(dataString.cbegin(), dataString.cend(), patternSingleElementChoice); 
            std::sregex_iterator endC;
            for (std::sregex_iterator it = beginC; it != endC; it++)
            {
                match = *it;
                dataType.m_nodeNameList.push_back(match.str(1));
            }
        
        }
        else if (std::regex_search(dataString, match, patternInteger))
        {
            dataType.m_baseType = BaseDataType::INTEGER;
            dataType.m_complexity = EncodingComplexity::PRIMITIVE;
            if (std::regex_search(dataString, match, patternBrace))
            {
                std::stringstream conv(match.str(1));     
                conv >> dataType.m_lengthLimit;
            }
            else if (std::regex_search(dataString, match, patternBraceTwo))
            {
                std::stringstream conv(match.str(1));     
                conv >> dataType.m_rangeLimitUpper;
            }
        }
        else if (std::regex_search(dataString, match, patternOctetString))
        {
            dataType.m_baseType = BaseDataType::OCTET_STRING;
            dataType.m_complexity = EncodingComplexity::PRIMITIVE;
            if (std::regex_search(dataString, match, patternBrace))
            {
                std::stringstream conv(match.str(1));     
                conv >> dataType.m_lengthLimit;
            }
            else if (std::regex_search(dataString, match, patternBraceTwo))
            {
                std::stringstream conv(match.str(1));     
                conv >> dataType.m_rangeLimitUpper;
            }
        }
        else if (std::regex_search(dataString, match, patternObjectIdentifier))
        {
            dataType.m_baseType = BaseDataType::OBJECT_IDENTIFIER;
            dataType.m_complexity = EncodingComplexity::PRIMITIVE;
            if (std::regex_search(dataString, match, patternBrace))
            {
                std::stringstream conv(match.str(1));     
                conv >> dataType.m_lengthLimit;
            }
            else if (std::regex_search(dataString, match, patternBraceTwo))
            {
                std::stringstream conv(match.str(1));     
                conv >> dataType.m_rangeLimitUpper;
            }
        }
        else
        {
            dataType.m_baseType = BaseDataType::NULL_D;
            dataType.m_complexity = EncodingComplexity::PRIMITIVE;
            if (std::regex_search(dataString, match, patternBrace))
            {
                std::stringstream conv(match.str(1));     
                conv >> dataType.m_lengthLimit;
            }
            else if (std::regex_search(dataString, match, patternBraceTwo))
            {
                std::stringstream conv(match.str(1));     
                conv >> dataType.m_rangeLimitUpper;
            }
        }
        
        if (std::regex_search(dataString, match, patternImplicit))
        {
            dataType.m_encodingType = EncodingType::IMPLICIT;
        }
        else if (std::regex_search(dataString, match, patternExplicit))
        {
            dataType.m_encodingType = EncodingType::EXPLICIT;
        }
        else
        {
            dataType.m_encodingType = EncodingType::UNIVERSAL;
        }
        
        if (std::regex_search(dataString, match, patternUniversal))
        {
            dataType.m_visibility = DataVisibility::UNIVERSAL;
        }
        else if (std::regex_search(dataString, match, patternApplication))
        {
            dataType.m_visibility = DataVisibility::APPLICATION;
        }
        else if (std::regex_search(dataString, match, patternPrivate))
        {
            dataType.m_visibility = DataVisibility::PRIVATE;
        }
        else
        {
            dataType.m_visibility = DataVisibility::CONTEXT_SPECIFIC;
        }
        
        if (std::regex_search(dataString, match, patternTagNumber))
        {
            int tag = std::stoi(match.str(1));
            dataType.m_tag = tag;
        }
        
        m_customDataTypeVector.push_back(dataType);
    }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x1350, %rsp           # imm = 0x1350
movq %rdi, -0x8(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x12c8(%rbp)
leaq -0x28(%rbp), %rdi
callq 0x18eb0
leaq 0x30e9a(%rip), %rsi     # 0x48774
leaq -0x48(%rbp), %rdi
movl $0x10, %edx
callq 0x18ef0
jmp 0x178ea
leaq 0x30e1e(%rip), %rsi     # 0x4870f
leaq -0x78(%rbp), %rdi
movl $0x10, %edx
callq 0x18ef0
jmp 0x17901
leaq 0x30c5c(%rip), %rsi     # 0x48564
leaq -0x98(%rbp), %rdi
movl $0x10, %edx
callq 0x18ef0
jmp 0x1791b
leaq 0x30e5c(%rip), %rsi     # 0x4877e
leaq -0xb8(%rbp), %rdi
movl $0x10, %edx
callq 0x18ef0
jmp 0x17935
leaq 0x30e4c(%rip), %rsi     # 0x48788
leaq -0xd8(%rbp), %rdi
movl $0x10, %edx
callq 0x18ef0
jmp 0x1794f
leaq 0x30d9f(%rip), %rsi     # 0x486f5
leaq -0xf8(%rbp), %rdi
movl $0x10, %edx
callq 0x18ef0
jmp 0x17969
leaq 0x30d8d(%rip), %rsi     # 0x486fd
leaq -0x118(%rbp), %rdi
movl $0x10, %edx
callq 0x18ef0
jmp 0x17983
leaq 0x30c0c(%rip), %rsi     # 0x48596
leaq -0x138(%rbp), %rdi
movl $0x10, %edx
callq 0x18ef0
jmp 0x1799d
leaq 0x30d66(%rip), %rsi     # 0x4870a
leaq -0x158(%rbp), %rdi
movl $0x10, %edx
callq 0x18ef0
jmp 0x179b7
leaq 0x30dd2(%rip), %rsi     # 0x48790
leaq -0x178(%rbp), %rdi
movl $0x10, %edx
callq 0x18ef0
jmp 0x179d1
leaq 0x30dc1(%rip), %rsi     # 0x48799
leaq -0x198(%rbp), %rdi
movl $0x10, %edx
callq 0x18ef0
jmp 0x179eb
leaq 0x30db0(%rip), %rsi     # 0x487a2
leaq -0x1b8(%rbp), %rdi
movl $0x10, %edx
callq 0x18ef0
jmp 0x17a05
leaq 0x30da0(%rip), %rsi     # 0x487ac
leaq -0x1d8(%rbp), %rdi
movl $0x10, %edx
callq 0x18ef0
jmp 0x17a1f
leaq 0x30d92(%rip), %rsi     # 0x487b8
leaq -0x1f8(%rbp), %rdi
movl $0x10, %edx
callq 0x18ef0
jmp 0x17a39
leaq 0x30d89(%rip), %rsi     # 0x487c9
leaq -0x218(%rbp), %rdi
movl $0x10, %edx
callq 0x18ef0
jmp 0x17a53
leaq 0x30d77(%rip), %rsi     # 0x487d1
leaq -0x238(%rbp), %rdi
movl $0x10, %edx
callq 0x18ef0
jmp 0x17a6d
leaq 0x30c5f(%rip), %rsi     # 0x486d3
leaq -0x258(%rbp), %rdi
movl $0x10, %edx
callq 0x18ef0
jmp 0x17a87
leaq 0x30d63(%rip), %rsi     # 0x487f1
leaq -0x278(%rbp), %rdi
movl $0x10, %edx
callq 0x18ef0
jmp 0x17aa1
leaq -0x2c8(%rbp), %rdi
callq 0x44a20
jmp 0x17aaf
movq -0x12c8(%rbp), %rdi
addq $0x18, %rdi
callq 0x196e0
movq -0x12c8(%rbp), %rdi
addq $0x48, %rdi
callq 0x8200
subq $0x1, %rax
movq %rax, -0x2d0(%rbp)
cmpq $-0x1, -0x2d0(%rbp)
je 0x18b03
movq -0x12c8(%rbp), %rdi
addq $0x48, %rdi
movq -0x2d0(%rbp), %rsi
callq 0x82b0
movq %rax, -0x2d8(%rbp)
movq -0x2d8(%rbp), %rdi
leaq -0x28(%rbp), %rsi
leaq -0x48(%rbp), %rdx
xorl %ecx, %ecx
callq 0x18f90
movb %al, -0x12c9(%rbp)
jmp 0x17b24
movb -0x12c9(%rbp), %al
testb $0x1, %al
jne 0x17b33
jmp 0x17cf3
movq -0x12c8(%rbp), %rax
addq $0x18, %rax
movq %rax, -0x12d8(%rbp)
leaq -0x2f8(%rbp), %rdi
leaq -0x28(%rbp), %rsi
movl $0x1, %edx
callq 0x18ff0
jmp 0x17b5c
movq -0x12d8(%rbp), %rdi
leaq -0x2f8(%rbp), %rsi
callq 0x19300
jmp 0x17b71
leaq -0x2f8(%rbp), %rdi
callq 0x62e0
jmp 0x17cf3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
jmp 0x18cd1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
jmp 0x18cc8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
jmp 0x18cbf
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
jmp 0x18cb3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
jmp 0x18ca7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
jmp 0x18c9b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
jmp 0x18c8f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
jmp 0x18c83
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
jmp 0x18c77
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
jmp 0x18c6b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
jmp 0x18c5f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
jmp 0x18c53
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
jmp 0x18c47
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
jmp 0x18c3b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
jmp 0x18c2f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
jmp 0x18c23
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
jmp 0x18c17
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
jmp 0x18c0b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
jmp 0x18bff
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
jmp 0x18bf3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
leaq -0x2f8(%rbp), %rdi
callq 0x62e0
jmp 0x18bf3
movq -0x2d8(%rbp), %rdi
leaq -0x28(%rbp), %rsi
leaq -0x78(%rbp), %rdx
xorl %ecx, %ecx
callq 0x18f90
movb %al, -0x12d9(%rbp)
jmp 0x17d11
movb -0x12d9(%rbp), %al
testb $0x1, %al
jne 0x17d20
jmp 0x17ee5
movl $0x5, -0x2c8(%rbp)
movl $0x1, -0x2c4(%rbp)
movq -0x2d8(%rbp), %rdi
callq 0x61b0
movq %rax, -0x340(%rbp)
movq -0x2d8(%rbp), %rdi
callq 0x60c0
movq %rax, -0x348(%rbp)
movq -0x340(%rbp), %rsi
movq -0x348(%rbp), %rdx
leaq -0x338(%rbp), %rdi
leaq -0x238(%rbp), %rcx
xorl %r8d, %r8d
callq 0x190a0
jmp 0x17d80
leaq -0x388(%rbp), %rdi
callq 0x191d0
jmp 0x17d8e
leaq -0x3c8(%rbp), %rdi
leaq -0x338(%rbp), %rsi
callq 0x19220
jmp 0x17da3
jmp 0x17da5
leaq -0x3c8(%rbp), %rdi
leaq -0x388(%rbp), %rsi
callq 0x19270
testb $0x1, %al
jne 0x17def
leaq -0x3c8(%rbp), %rdi
callq 0x193b0
jmp 0x17eab
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
jmp 0x17ed4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
jmp 0x17ec8
leaq -0x3c8(%rbp), %rdi
callq 0x192a0
movq %rax, %rsi
leaq -0x28(%rbp), %rdi
callq 0x192c0
jmp 0x17e09
leaq -0x2a8(%rbp), %rax
movq %rax, -0x12e8(%rbp)
leaq -0x3e8(%rbp), %rdi
leaq -0x28(%rbp), %rsi
movl $0x1, %edx
callq 0x18ff0
jmp 0x17e2e
movq -0x12e8(%rbp), %rdi
leaq -0x3e8(%rbp), %rsi
callq 0x19300
jmp 0x17e43
leaq -0x3e8(%rbp), %rdi
callq 0x62e0
leaq -0x428(%rbp), %rdi
leaq -0x3c8(%rbp), %rsi
xorl %edx, %edx
callq 0x19330
jmp 0x17e66
leaq -0x428(%rbp), %rdi
callq 0x193b0
jmp 0x17da5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
jmp 0x17e9d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
leaq -0x3e8(%rbp), %rdi
callq 0x62e0
leaq -0x3c8(%rbp), %rdi
callq 0x193b0
jmp 0x17ec8
leaq -0x388(%rbp), %rdi
callq 0x193b0
leaq -0x338(%rbp), %rdi
callq 0x193b0
jmp 0x188f7
leaq -0x388(%rbp), %rdi
callq 0x193b0
leaq -0x338(%rbp), %rdi
callq 0x193b0
jmp 0x18bf3
movq -0x2d8(%rbp), %rdi
leaq -0x28(%rbp), %rsi
leaq -0x98(%rbp), %rdx
xorl %ecx, %ecx
callq 0x18f90
movb %al, -0x12e9(%rbp)
jmp 0x17f06
movb -0x12e9(%rbp), %al
testb $0x1, %al
jne 0x17f15
jmp 0x180da
movl $0x7, -0x2c8(%rbp)
movl $0x1, -0x2c4(%rbp)
movq -0x2d8(%rbp), %rdi
callq 0x61b0
movq %rax, -0x470(%rbp)
movq -0x2d8(%rbp), %rdi
callq 0x60c0
movq %rax, -0x478(%rbp)
movq -0x470(%rbp), %rsi
movq -0x478(%rbp), %rdx
leaq -0x468(%rbp), %rdi
leaq -0x258(%rbp), %rcx
xorl %r8d, %r8d
callq 0x190a0
jmp 0x17f75
leaq -0x4b8(%rbp), %rdi
callq 0x191d0
jmp 0x17f83
leaq -0x4f8(%rbp), %rdi
leaq -0x468(%rbp), %rsi
callq 0x19220
jmp 0x17f98
jmp 0x17f9a
leaq -0x4f8(%rbp), %rdi
leaq -0x4b8(%rbp), %rsi
callq 0x19270
testb $0x1, %al
jne 0x17fe4
leaq -0x4f8(%rbp), %rdi
callq 0x193b0
jmp 0x180a0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
jmp 0x180c9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
jmp 0x180bd
leaq -0x4f8(%rbp), %rdi
callq 0x192a0
movq %rax, %rsi
leaq -0x28(%rbp), %rdi
callq 0x192c0
jmp 0x17ffe
leaq -0x2a8(%rbp), %rax
movq %rax, -0x12f8(%rbp)
leaq -0x518(%rbp), %rdi
leaq -0x28(%rbp), %rsi
movl $0x1, %edx
callq 0x18ff0
jmp 0x18023
movq -0x12f8(%rbp), %rdi
leaq -0x518(%rbp), %rsi
callq 0x19300
jmp 0x18038
leaq -0x518(%rbp), %rdi
callq 0x62e0
leaq -0x558(%rbp), %rdi
leaq -0x4f8(%rbp), %rsi
xorl %edx, %edx
callq 0x19330
jmp 0x1805b
leaq -0x558(%rbp), %rdi
callq 0x193b0
jmp 0x17f9a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
jmp 0x18092
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
leaq -0x518(%rbp), %rdi
callq 0x62e0
leaq -0x4f8(%rbp), %rdi
callq 0x193b0
jmp 0x180bd
leaq -0x4b8(%rbp), %rdi
callq 0x193b0
leaq -0x468(%rbp), %rdi
callq 0x193b0
jmp 0x188f5
leaq -0x4b8(%rbp), %rdi
callq 0x193b0
leaq -0x468(%rbp), %rdi
callq 0x193b0
jmp 0x18bf3
movq -0x2d8(%rbp), %rdi
leaq -0x28(%rbp), %rsi
leaq -0xf8(%rbp), %rdx
xorl %ecx, %ecx
callq 0x18f90
movb %al, -0x12f9(%rbp)
jmp 0x180fb
movb -0x12f9(%rbp), %al
testb $0x1, %al
jne 0x1810a
jmp 0x182ec
movl $0x0, -0x2c8(%rbp)
movl $0x0, -0x2c4(%rbp)
movq -0x2d8(%rbp), %rdi
leaq -0x28(%rbp), %rsi
leaq -0xb8(%rbp), %rdx
xorl %ecx, %ecx
callq 0x18f90
movb %al, -0x12fa(%rbp)
jmp 0x1813f
movb -0x12fa(%rbp), %al
testb $0x1, %al
jne 0x1814e
jmp 0x18203
leaq -0x700(%rbp), %rdi
leaq -0x28(%rbp), %rsi
movl $0x1, %edx
callq 0x18ff0
jmp 0x18165
movl $0x10, %edi
movl $0x8, %esi
callq 0x19a10
movl %eax, -0x1300(%rbp)
jmp 0x1817c
movl -0x1300(%rbp), %edx
leaq -0x6e0(%rbp), %rdi
leaq -0x700(%rbp), %rsi
callq 0x6690
jmp 0x18197
leaq -0x700(%rbp), %rdi
callq 0x62e0
leaq -0x2b8(%rbp), %rsi
leaq -0x6e0(%rbp), %rdi
callq 0x62d0
jmp 0x181b8
leaq -0x6e0(%rbp), %rdi
callq 0x6380
jmp 0x182e7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
leaq -0x700(%rbp), %rdi
callq 0x62e0
jmp 0x18bf3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
leaq -0x6e0(%rbp), %rdi
callq 0x6380
jmp 0x18bf3
movq -0x2d8(%rbp), %rdi
leaq -0x28(%rbp), %rsi
leaq -0xd8(%rbp), %rdx
xorl %ecx, %ecx
callq 0x18f90
movb %al, -0x1301(%rbp)
jmp 0x18224
movb -0x1301(%rbp), %al
testb $0x1, %al
jne 0x18233
jmp 0x182e5
leaq -0x8a8(%rbp), %rdi
leaq -0x28(%rbp), %rsi
movl $0x1, %edx
callq 0x18ff0
jmp 0x1824a
movl $0x10, %edi
movl $0x8, %esi
callq 0x19a10
movl %eax, -0x1308(%rbp)
jmp 0x18261
movl -0x1308(%rbp), %edx
leaq -0x888(%rbp), %rdi
leaq -0x8a8(%rbp), %rsi
callq 0x6690
jmp 0x1827c
leaq -0x8a8(%rbp), %rdi
callq 0x62e0
leaq -0x2b0(%rbp), %rsi
leaq -0x888(%rbp), %rdi
callq 0x62d0
jmp 0x1829d
leaq -0x888(%rbp), %rdi
callq 0x6380
jmp 0x182e5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
leaq -0x8a8(%rbp), %rdi
callq 0x62e0
jmp 0x18bf3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
leaq -0x888(%rbp), %rdi
callq 0x6380
jmp 0x18bf3
jmp 0x182e7
jmp 0x188f3
movq -0x2d8(%rbp), %rdi
leaq -0x28(%rbp), %rsi
leaq -0x118(%rbp), %rdx
xorl %ecx, %ecx
callq 0x18f90
movb %al, -0x1309(%rbp)
jmp 0x1830d
movb -0x1309(%rbp), %al
testb $0x1, %al
jne 0x1831c
jmp 0x184fe
movl $0x1, -0x2c8(%rbp)
movl $0x0, -0x2c4(%rbp)
movq -0x2d8(%rbp), %rdi
leaq -0x28(%rbp), %rsi
leaq -0xb8(%rbp), %rdx
xorl %ecx, %ecx
callq 0x18f90
movb %al, -0x130a(%rbp)
jmp 0x18351
movb -0x130a(%rbp), %al
testb $0x1, %al
jne 0x18360
jmp 0x18415
leaq -0xa50(%rbp), %rdi
leaq -0x28(%rbp), %rsi
movl $0x1, %edx
callq 0x18ff0
jmp 0x18377
movl $0x10, %edi
movl $0x8, %esi
callq 0x19a10
movl %eax, -0x1310(%rbp)
jmp 0x1838e
movl -0x1310(%rbp), %edx
leaq -0xa30(%rbp), %rdi
leaq -0xa50(%rbp), %rsi
callq 0x6690
jmp 0x183a9
leaq -0xa50(%rbp), %rdi
callq 0x62e0
leaq -0x2b8(%rbp), %rsi
leaq -0xa30(%rbp), %rdi
callq 0x62d0
jmp 0x183ca
leaq -0xa30(%rbp), %rdi
callq 0x6380
jmp 0x184f9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
leaq -0xa50(%rbp), %rdi
callq 0x62e0
jmp 0x18bf3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
leaq -0xa30(%rbp), %rdi
callq 0x6380
jmp 0x18bf3
movq -0x2d8(%rbp), %rdi
leaq -0x28(%rbp), %rsi
leaq -0xd8(%rbp), %rdx
xorl %ecx, %ecx
callq 0x18f90
movb %al, -0x1311(%rbp)
jmp 0x18436
movb -0x1311(%rbp), %al
testb $0x1, %al
jne 0x18445
jmp 0x184f7
leaq -0xbf8(%rbp), %rdi
leaq -0x28(%rbp), %rsi
movl $0x1, %edx
callq 0x18ff0
jmp 0x1845c
movl $0x10, %edi
movl $0x8, %esi
callq 0x19a10
movl %eax, -0x1318(%rbp)
jmp 0x18473
movl -0x1318(%rbp), %edx
leaq -0xbd8(%rbp), %rdi
leaq -0xbf8(%rbp), %rsi
callq 0x6690
jmp 0x1848e
leaq -0xbf8(%rbp), %rdi
callq 0x62e0
leaq -0x2b0(%rbp), %rsi
leaq -0xbd8(%rbp), %rdi
callq 0x62d0
jmp 0x184af
leaq -0xbd8(%rbp), %rdi
callq 0x6380
jmp 0x184f7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
leaq -0xbf8(%rbp), %rdi
callq 0x62e0
jmp 0x18bf3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
leaq -0xbd8(%rbp), %rdi
callq 0x6380
jmp 0x18bf3
jmp 0x184f9
jmp 0x188f1
movq -0x2d8(%rbp), %rdi
leaq -0x28(%rbp), %rsi
leaq -0x138(%rbp), %rdx
xorl %ecx, %ecx
callq 0x18f90
movb %al, -0x1319(%rbp)
jmp 0x1851f
movb -0x1319(%rbp), %al
testb $0x1, %al
jne 0x1852e
jmp 0x18710
movl $0x2, -0x2c8(%rbp)
movl $0x0, -0x2c4(%rbp)
movq -0x2d8(%rbp), %rdi
leaq -0x28(%rbp), %rsi
leaq -0xb8(%rbp), %rdx
xorl %ecx, %ecx
callq 0x18f90
movb %al, -0x131a(%rbp)
jmp 0x18563
movb -0x131a(%rbp), %al
testb $0x1, %al
jne 0x18572
jmp 0x18627
leaq -0xda0(%rbp), %rdi
leaq -0x28(%rbp), %rsi
movl $0x1, %edx
callq 0x18ff0
jmp 0x18589
movl $0x10, %edi
movl $0x8, %esi
callq 0x19a10
movl %eax, -0x1320(%rbp)
jmp 0x185a0
movl -0x1320(%rbp), %edx
leaq -0xd80(%rbp), %rdi
leaq -0xda0(%rbp), %rsi
callq 0x6690
jmp 0x185bb
leaq -0xda0(%rbp), %rdi
callq 0x62e0
leaq -0x2b8(%rbp), %rsi
leaq -0xd80(%rbp), %rdi
callq 0x62d0
jmp 0x185dc
leaq -0xd80(%rbp), %rdi
callq 0x6380
jmp 0x1870b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
leaq -0xda0(%rbp), %rdi
callq 0x62e0
jmp 0x18bf3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
leaq -0xd80(%rbp), %rdi
callq 0x6380
jmp 0x18bf3
movq -0x2d8(%rbp), %rdi
leaq -0x28(%rbp), %rsi
leaq -0xd8(%rbp), %rdx
xorl %ecx, %ecx
callq 0x18f90
movb %al, -0x1321(%rbp)
jmp 0x18648
movb -0x1321(%rbp), %al
testb $0x1, %al
jne 0x18657
jmp 0x18709
leaq -0xf48(%rbp), %rdi
leaq -0x28(%rbp), %rsi
movl $0x1, %edx
callq 0x18ff0
jmp 0x1866e
movl $0x10, %edi
movl $0x8, %esi
callq 0x19a10
movl %eax, -0x1328(%rbp)
jmp 0x18685
movl -0x1328(%rbp), %edx
leaq -0xf28(%rbp), %rdi
leaq -0xf48(%rbp), %rsi
callq 0x6690
jmp 0x186a0
leaq -0xf48(%rbp), %rdi
callq 0x62e0
leaq -0x2b0(%rbp), %rsi
leaq -0xf28(%rbp), %rdi
callq 0x62d0
jmp 0x186c1
leaq -0xf28(%rbp), %rdi
callq 0x6380
jmp 0x18709
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
leaq -0xf48(%rbp), %rdi
callq 0x62e0
jmp 0x18bf3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
leaq -0xf28(%rbp), %rdi
callq 0x6380
jmp 0x18bf3
jmp 0x1870b
jmp 0x188ef
movl $0x4, -0x2c8(%rbp)
movl $0x0, -0x2c4(%rbp)
movq -0x2d8(%rbp), %rdi
leaq -0x28(%rbp), %rsi
leaq -0xb8(%rbp), %rdx
xorl %ecx, %ecx
callq 0x18f90
movb %al, -0x1329(%rbp)
jmp 0x18745
movb -0x1329(%rbp), %al
testb $0x1, %al
jne 0x18754
jmp 0x18809
leaq -0x10f0(%rbp), %rdi
leaq -0x28(%rbp), %rsi
movl $0x1, %edx
callq 0x18ff0
jmp 0x1876b
movl $0x10, %edi
movl $0x8, %esi
callq 0x19a10
movl %eax, -0x1330(%rbp)
jmp 0x18782
movl -0x1330(%rbp), %edx
leaq -0x10d0(%rbp), %rdi
leaq -0x10f0(%rbp), %rsi
callq 0x6690
jmp 0x1879d
leaq -0x10f0(%rbp), %rdi
callq 0x62e0
leaq -0x2b8(%rbp), %rsi
leaq -0x10d0(%rbp), %rdi
callq 0x62d0
jmp 0x187be
leaq -0x10d0(%rbp), %rdi
callq 0x6380
jmp 0x188ed
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
leaq -0x10f0(%rbp), %rdi
callq 0x62e0
jmp 0x18bf3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
leaq -0x10d0(%rbp), %rdi
callq 0x6380
jmp 0x18bf3
movq -0x2d8(%rbp), %rdi
leaq -0x28(%rbp), %rsi
leaq -0xd8(%rbp), %rdx
xorl %ecx, %ecx
callq 0x18f90
movb %al, -0x1331(%rbp)
jmp 0x1882a
movb -0x1331(%rbp), %al
testb $0x1, %al
jne 0x18839
jmp 0x188eb
leaq -0x1298(%rbp), %rdi
leaq -0x28(%rbp), %rsi
movl $0x1, %edx
callq 0x18ff0
jmp 0x18850
movl $0x10, %edi
movl $0x8, %esi
callq 0x19a10
movl %eax, -0x1338(%rbp)
jmp 0x18867
movl -0x1338(%rbp), %edx
leaq -0x1278(%rbp), %rdi
leaq -0x1298(%rbp), %rsi
callq 0x6690
jmp 0x18882
leaq -0x1298(%rbp), %rdi
callq 0x62e0
leaq -0x2b0(%rbp), %rsi
leaq -0x1278(%rbp), %rdi
callq 0x62d0
jmp 0x188a3
leaq -0x1278(%rbp), %rdi
callq 0x6380
jmp 0x188eb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
leaq -0x1298(%rbp), %rdi
callq 0x62e0
jmp 0x18bf3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
leaq -0x1278(%rbp), %rdi
callq 0x6380
jmp 0x18bf3
jmp 0x188ed
jmp 0x188ef
jmp 0x188f1
jmp 0x188f3
jmp 0x188f5
jmp 0x188f7
movq -0x2d8(%rbp), %rdi
leaq -0x28(%rbp), %rsi
leaq -0x178(%rbp), %rdx
xorl %ecx, %ecx
callq 0x18f90
movb %al, -0x1339(%rbp)
jmp 0x18918
movb -0x1339(%rbp), %al
testb $0x1, %al
jne 0x18924
jmp 0x18930
movl $0x1, -0x2c0(%rbp)
jmp 0x18975
movq -0x2d8(%rbp), %rdi
leaq -0x28(%rbp), %rsi
leaq -0x198(%rbp), %rdx
xorl %ecx, %ecx
callq 0x18f90
movb %al, -0x133a(%rbp)
jmp 0x18951
movb -0x133a(%rbp), %al
testb $0x1, %al
jne 0x1895d
jmp 0x18969
movl $0x2, -0x2c0(%rbp)
jmp 0x18973
movl $0x0, -0x2c0(%rbp)
jmp 0x18975
movq -0x2d8(%rbp), %rdi
leaq -0x28(%rbp), %rsi
leaq -0x1b8(%rbp), %rdx
xorl %ecx, %ecx
callq 0x18f90
movb %al, -0x133b(%rbp)
jmp 0x18996
movb -0x133b(%rbp), %al
testb $0x1, %al
jne 0x189a2
jmp 0x189b1
movl $0x0, -0x2bc(%rbp)
jmp 0x18a31
movq -0x2d8(%rbp), %rdi
leaq -0x28(%rbp), %rsi
leaq -0x1d8(%rbp), %rdx
xorl %ecx, %ecx
callq 0x18f90
movb %al, -0x133c(%rbp)
jmp 0x189d2
movb -0x133c(%rbp), %al
testb $0x1, %al
jne 0x189de
jmp 0x189ea
movl $0x1, -0x2bc(%rbp)
jmp 0x18a2f
movq -0x2d8(%rbp), %rdi
leaq -0x28(%rbp), %rsi
leaq -0x218(%rbp), %rdx
xorl %ecx, %ecx
callq 0x18f90
movb %al, -0x133d(%rbp)
jmp 0x18a0b
movb -0x133d(%rbp), %al
testb $0x1, %al
jne 0x18a17
jmp 0x18a23
movl $0x3, -0x2bc(%rbp)
jmp 0x18a2d
movl $0x2, -0x2bc(%rbp)
jmp 0x18a2f
jmp 0x18a31
movq -0x2d8(%rbp), %rdi
leaq -0x28(%rbp), %rsi
leaq -0x278(%rbp), %rdx
xorl %ecx, %ecx
callq 0x18f90
movb %al, -0x133e(%rbp)
jmp 0x18a52
movb -0x133e(%rbp), %al
testb $0x1, %al
jne 0x18a5e
jmp 0x18ad5
leaq -0x12c0(%rbp), %rdi
leaq -0x28(%rbp), %rsi
movl $0x1, %edx
callq 0x18ff0
jmp 0x18a75
xorl %eax, %eax
movl %eax, %esi
leaq -0x12c0(%rbp), %rdi
movl $0xa, %edx
callq 0x19840
movl %eax, -0x1344(%rbp)
jmp 0x18a92
leaq -0x12c0(%rbp), %rdi
callq 0x62e0
movl -0x1344(%rbp), %eax
movl %eax, -0x129c(%rbp)
movl -0x129c(%rbp), %eax
movl %eax, -0x2ac(%rbp)
jmp 0x18ad5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
leaq -0x12c0(%rbp), %rdi
callq 0x62e0
jmp 0x18bf3
movq -0x12c8(%rbp), %rdi
leaq -0x2c8(%rbp), %rsi
callq 0x19a30
jmp 0x18aea
jmp 0x18aec
movq -0x2d0(%rbp), %rax
addq $-0x1, %rax
movq %rax, -0x2d0(%rbp)
jmp 0x17ada
leaq -0x2c8(%rbp), %rdi
callq 0x44a90
leaq -0x278(%rbp), %rdi
callq 0x19570
leaq -0x258(%rbp), %rdi
callq 0x19570
leaq -0x238(%rbp), %rdi
callq 0x19570
leaq -0x218(%rbp), %rdi
callq 0x19570
leaq -0x1f8(%rbp), %rdi
callq 0x19570
leaq -0x1d8(%rbp), %rdi
callq 0x19570
leaq -0x1b8(%rbp), %rdi
callq 0x19570
leaq -0x198(%rbp), %rdi
callq 0x19570
leaq -0x178(%rbp), %rdi
callq 0x19570
leaq -0x158(%rbp), %rdi
callq 0x19570
leaq -0x138(%rbp), %rdi
callq 0x19570
leaq -0x118(%rbp), %rdi
callq 0x19570
leaq -0xf8(%rbp), %rdi
callq 0x19570
leaq -0xd8(%rbp), %rdi
callq 0x19570
leaq -0xb8(%rbp), %rdi
callq 0x19570
leaq -0x98(%rbp), %rdi
callq 0x19570
leaq -0x78(%rbp), %rdi
callq 0x19570
leaq -0x48(%rbp), %rdi
callq 0x19570
leaq -0x28(%rbp), %rdi
callq 0x195a0
addq $0x1350, %rsp           # imm = 0x1350
popq %rbp
retq
leaq -0x2c8(%rbp), %rdi
callq 0x44a90
leaq -0x278(%rbp), %rdi
callq 0x19570
leaq -0x258(%rbp), %rdi
callq 0x19570
leaq -0x238(%rbp), %rdi
callq 0x19570
leaq -0x218(%rbp), %rdi
callq 0x19570
leaq -0x1f8(%rbp), %rdi
callq 0x19570
leaq -0x1d8(%rbp), %rdi
callq 0x19570
leaq -0x1b8(%rbp), %rdi
callq 0x19570
leaq -0x198(%rbp), %rdi
callq 0x19570
leaq -0x178(%rbp), %rdi
callq 0x19570
leaq -0x158(%rbp), %rdi
callq 0x19570
leaq -0x138(%rbp), %rdi
callq 0x19570
leaq -0x118(%rbp), %rdi
callq 0x19570
leaq -0xf8(%rbp), %rdi
callq 0x19570
leaq -0xd8(%rbp), %rdi
callq 0x19570
leaq -0xb8(%rbp), %rdi
callq 0x19570
leaq -0x98(%rbp), %rdi
callq 0x19570
leaq -0x78(%rbp), %rdi
callq 0x19570
leaq -0x48(%rbp), %rdi
callq 0x19570
leaq -0x28(%rbp), %rdi
callq 0x195a0
movq -0x50(%rbp), %rdi
callq 0x6790
nopw %cs:(%rax,%rax)