// File: fffrankkk[P]XmlCode/src/XMLParser.cpp
// Function: CXMLParser::Parse(char const*)
vector<CClassDetail *> CXMLParser::Parse(const char* pszFile)
{
    vector<CClassDetail *> vecDetail;
    CXMLTree CParser;
    if (!CParser.Create(pszFile)) {
        ERROR_OUT("create [%s].", pszFile);
        return vecDetail;
    }

    CXMLNode* pCRoot = CParser.GetRoot();
    if (PTR_NULL(pCRoot)) {
        return vecDetail;
    }
    vector<CXMLNode *> vecChildren = pCRoot->GetChildren();
    map<string, CClassDetail *> mapDetail;
    for (BT_AUTO(iterNode, vecChildren.begin()); iterNode != vecChildren.end(); ++iterNode) {
        CXMLNode* pCNode = *iterNode;
        if (pCNode->HasAttribute() || pCNode->HasChildren()) {
            BT_AUTO(iterDetail, mapDetail.find(pCNode->GetName()));
            CClassDetail* pCDetail = NULL;
            if (iterDetail == mapDetail.end()) {
                pCDetail = new CClassDetail;
                pCDetail->SetType("s");
                mapDetail.insert(make_pair(pCNode->GetName(), pCDetail));
                vecDetail.push_back(pCDetail);
            } else {
                pCDetail = iterDetail->second;
                pCDetail->SetType("m");
            }
            ParseNode(pCNode, pCDetail);
        }
    }
    return vecDetail;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x240, %rsp            # imm = 0x240
movq %rdi, -0x1c8(%rbp)
movq %rdi, %rax
movq %rax, -0x1c0(%rbp)
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x1b8(%rbp)
movb $0x0, -0x19(%rbp)
callq 0xb8f0
leaq -0x30(%rbp), %rdi
callq 0x6a00
jmp 0xa2e7
movq -0x18(%rbp), %rsi
leaq -0x30(%rbp), %rdi
callq 0x6ad0
movb %al, -0x1c9(%rbp)
jmp 0xa2fc
movb -0x1c9(%rbp), %al
testb $0x1, %al
jne 0xa430
jmp 0xa30c
jmp 0xa30e
jmp 0xa310
leaq -0x50(%rbp), %rdi
xorl %esi, %esi
movl $0x10, %edx
callq 0x5200
leaq -0x50(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x5670
movq -0x50(%rbp), %rax
movq %rax, -0x58(%rbp)
leaq -0x58(%rbp), %rdi
callq 0x52e0
movq %rax, -0x60(%rbp)
movq 0x40c87(%rip), %rax     # 0x4afd0
movq (%rax), %rdi
movq -0x60(%rbp), %rax
movl 0x14(%rax), %edx
addl $0x76c, %edx            # imm = 0x76C
movq -0x60(%rbp), %rax
movl 0x10(%rax), %ecx
addl $0x1, %ecx
movq -0x60(%rbp), %rax
movl 0xc(%rax), %r8d
movq -0x60(%rbp), %rax
movl 0x8(%rax), %r9d
movq -0x60(%rbp), %rax
movl 0x4(%rax), %r11d
movq -0x60(%rbp), %rax
movl (%rax), %r10d
movq -0x48(%rbp), %rax
leaq 0x2cce3(%rip), %rsi     # 0x37070
movl %r11d, (%rsp)
movl %r10d, 0x8(%rsp)
movq %rax, 0x10(%rsp)
movb $0x0, %al
callq 0x55b0
jmp 0xa3a4
movq 0x40c25(%rip), %rax     # 0x4afd0
movq (%rax), %rdi
leaq 0x2ccde(%rip), %rsi     # 0x37093
leaq 0x2cce6(%rip), %rdx     # 0x370a2
movl $0x27, %ecx
movb $0x0, %al
callq 0x55b0
movq 0x40c01(%rip), %rax     # 0x4afd0
movq (%rax), %rdi
movq -0x18(%rbp), %rdx
leaq 0x2ccd7(%rip), %rsi     # 0x370b4
movb $0x0, %al
callq 0x55b0
movq 0x40be5(%rip), %rax     # 0x4afd0
movq (%rax), %rdi
leaq 0x2da13(%rip), %rsi     # 0x37e08
movb $0x0, %al
callq 0x55b0
jmp 0xa3fe
movb $0x1, -0x19(%rbp)
movl $0x1, -0x64(%rbp)
jmp 0xa8bf
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0xa8f7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0xa8d0
leaq -0x30(%rbp), %rdi
callq 0x73b0
movq %rax, -0x1d8(%rbp)
jmp 0xa442
movq -0x1d8(%rbp), %rax
movq %rax, -0x70(%rbp)
cmpq $0x0, -0x70(%rbp)
jne 0xa464
movb $0x1, -0x19(%rbp)
movl $0x1, -0x64(%rbp)
jmp 0xa8bf
movq -0x70(%rbp), %rsi
leaq -0x88(%rbp), %rdi
callq 0x79d0
jmp 0xa476
leaq -0xb8(%rbp), %rdi
callq 0xb910
leaq -0x88(%rbp), %rdi
callq 0x9b70
movq %rax, -0xc0(%rbp)
leaq -0x88(%rbp), %rdi
callq 0x9a00
movq %rax, -0xc8(%rbp)
leaq -0xc0(%rbp), %rdi
leaq -0xc8(%rbp), %rsi
callq 0xb930
testb $0x1, %al
jne 0xa4c4
jmp 0xa880
leaq -0xc0(%rbp), %rdi
callq 0xb970
movq (%rax), %rax
movq %rax, -0xd0(%rbp)
movq -0xd0(%rbp), %rdi
callq 0xb990
movb %al, -0x1d9(%rbp)
jmp 0xa4ee
movb -0x1d9(%rbp), %al
testb $0x1, %al
jne 0xa51d
jmp 0xa4fa
movq -0xd0(%rbp), %rdi
callq 0xb9c0
movb %al, -0x1da(%rbp)
jmp 0xa50e
movb -0x1da(%rbp), %al
testb $0x1, %al
jne 0xa51d
jmp 0xa86d
movq -0xd0(%rbp), %rsi
leaq -0xf8(%rbp), %rdi
callq 0x65d0
jmp 0xa532
leaq -0xb8(%rbp), %rdi
leaq -0xf8(%rbp), %rsi
callq 0xb9f0
movq %rax, -0x1e8(%rbp)
jmp 0xa54e
movq -0x1e8(%rbp), %rax
movq %rax, -0xd8(%rbp)
leaq -0xf8(%rbp), %rdi
callq 0x5240
movq $0x0, -0x100(%rbp)
leaq -0xb8(%rbp), %rdi
callq 0xba50
movq %rax, -0x108(%rbp)
leaq -0xd8(%rbp), %rdi
leaq -0x108(%rbp), %rsi
callq 0xba20
testb $0x1, %al
jne 0xa5a2
jmp 0xa798
movl $0xa8, %edi
callq 0x53e0
movq %rax, -0x1f0(%rbp)
jmp 0xa5b5
movq -0x1f0(%rbp), %rdi
callq 0x1abb0
jmp 0xa5c3
movq -0x1f0(%rbp), %rax
movq %rax, -0x100(%rbp)
movq -0x100(%rbp), %rax
movq %rax, -0x200(%rbp)
leaq -0x129(%rbp), %rdi
movq %rdi, -0x1f8(%rbp)
callq 0x5750
movq -0x1f8(%rbp), %rdx
leaq 0x2ca10(%rip), %rsi     # 0x37010
leaq -0x128(%rbp), %rdi
callq 0x7a40
jmp 0xa60e
movq -0x200(%rbp), %rdi
leaq -0x128(%rbp), %rsi
callq 0x1ad20
jmp 0xa623
leaq -0x128(%rbp), %rdi
callq 0x5240
leaq -0x129(%rbp), %rdi
callq 0x5460
movq -0xd0(%rbp), %rsi
leaq -0x178(%rbp), %rdi
callq 0x65d0
jmp 0xa650
leaq -0x158(%rbp), %rdi
leaq -0x178(%rbp), %rsi
leaq -0x100(%rbp), %rdx
callq 0xbac0
jmp 0xa66c
leaq -0xb8(%rbp), %rdi
leaq -0x158(%rbp), %rsi
callq 0xba80
movb %dl, -0x209(%rbp)
movq %rax, -0x208(%rbp)
jmp 0xa68e
movb -0x209(%rbp), %al
movq -0x208(%rbp), %rcx
movq %rcx, -0x188(%rbp)
movb %al, -0x180(%rbp)
leaq -0x158(%rbp), %rdi
callq 0xbb00
leaq -0x178(%rbp), %rdi
callq 0x5240
movq -0x1c8(%rbp), %rdi
leaq -0x100(%rbp), %rsi
callq 0xbb20
jmp 0xa6d5
jmp 0xa84f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0xa8a5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0xf8(%rbp), %rdi
callq 0x5240
jmp 0xa8a5
movq -0x1f0(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
movl $0xa8, %esi
callq 0x53f0
jmp 0xa8a5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0xa750
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x128(%rbp), %rdi
callq 0x5240
leaq -0x129(%rbp), %rdi
callq 0x5460
jmp 0xa8a5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0xa787
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x158(%rbp), %rdi
callq 0xbb00
leaq -0x178(%rbp), %rdi
callq 0x5240
jmp 0xa8a5
leaq -0xd8(%rbp), %rdi
callq 0xbb90
movq 0x20(%rax), %rax
movq %rax, -0x100(%rbp)
movq -0x100(%rbp), %rax
movq %rax, -0x220(%rbp)
leaq -0x1a9(%rbp), %rdi
movq %rdi, -0x218(%rbp)
callq 0x5750
movq -0x218(%rbp), %rdx
leaq 0x2c8e3(%rip), %rsi     # 0x370c1
leaq -0x1a8(%rbp), %rdi
callq 0x7a40
jmp 0xa7ec
movq -0x220(%rbp), %rdi
leaq -0x1a8(%rbp), %rsi
callq 0x1ad20
jmp 0xa801
leaq -0x1a8(%rbp), %rdi
callq 0x5240
leaq -0x1a9(%rbp), %rdi
callq 0x5460
jmp 0xa84f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0xa841
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x1a8(%rbp), %rdi
callq 0x5240
leaq -0x1a9(%rbp), %rdi
callq 0x5460
jmp 0xa8a5
movq -0x1b8(%rbp), %rdi
movq -0xd0(%rbp), %rsi
movq -0x100(%rbp), %rdx
callq 0xa910
jmp 0xa86b
jmp 0xa86d
jmp 0xa86f
leaq -0xc0(%rbp), %rdi
callq 0xbbb0
jmp 0xa495
movb $0x1, -0x19(%rbp)
movl $0x1, -0x64(%rbp)
leaq -0xb8(%rbp), %rdi
callq 0xbbd0
leaq -0x88(%rbp), %rdi
callq 0x7680
jmp 0xa8bf
leaq -0xb8(%rbp), %rdi
callq 0xbbd0
leaq -0x88(%rbp), %rdi
callq 0x7680
jmp 0xa8d0
leaq -0x30(%rbp), %rdi
callq 0x6a30
testb $0x1, -0x19(%rbp)
jne 0xa8e7
jmp 0xa8db
leaq -0x30(%rbp), %rdi
callq 0x6a30
jmp 0xa8f7
movq -0x1c8(%rbp), %rdi
callq 0xbbf0
movq -0x1c0(%rbp), %rax
addq $0x240, %rsp            # imm = 0x240
popq %rbp
retq
movq -0x1c8(%rbp), %rdi
callq 0xbbf0
movq -0x38(%rbp), %rdi
callq 0x5740
nopl (%rax)