// File: /workspace/github_cpp_makefile_star2_O1/KJTang[P]SimpleCompiler/VirtualMachine.cpp
// Function: VirtualMachine::execute()
bool VirtualMachine::execute() {
    getNextWord();
    while (true) {
        switch (curWord) {
            case (int)OP::EXIT: {
                #ifdef DEBUG
                std::cout<<"-- exit"<<std::endl;
                #endif
                while (!this->data.empty()) {
                    delete[] this->data.back();
                    delete[] this->dataFlag.back();
                    this->data.pop_back();
                    this->dataFlag.pop_back();
                }
                return true;
            }
            case (int)OP::NOP: {
                #ifdef DEBUG
                std::cout<<"-- nop"<<std::endl;
                #endif
                getNextWord();
                break;
            }
            case (int)OP::PRIT: {
                #ifdef DEBUG
                std::cout<<"-- prit"<<std::endl;
                #endif
                std::cout<<this->stack.top()<<std::endl;
                this->stack.pop();
                getNextWord();
                break;
            }
            case (int)OP::SCAN: {
                getNextWord();
                #ifdef DEBUG
                std::cout<<"-- scan "<<this->curWord<<std::endl;
                #endif
                int pos = this->eipStack.size();
                while (pos != -1) {
                    if (this->dataFlag[pos][this->curWord]) {
                        std::cin>>this->data[pos][this->curWord];
                        getNextWord();
                        break;
                    } else {
                        --pos;
                    }
                }
                if (pos == -1) {
                    #ifdef DEBUG
                    std::cout<<"variable not found"<<std::endl;
                    #endif
                    return false;
                }
                break;
            }
            case (int)OP::ADD: {
                #ifdef DEBUG
                std::cout<<"-- add"<<std::endl;
                #endif
                int a = this->stack.top();
                this->stack.pop();
                int b = this->stack.top();
                this->stack.pop();
                this->stack.push(a+b);
                getNextWord();
                break;
            }
            case (int)OP::SUB: {
                #ifdef DEBUG
                std::cout<<"-- sub"<<std::endl;
                #endif
                int a = this->stack.top();
                this->stack.pop();
                int b = this->stack.top();
                this->stack.pop();
                this->stack.push(b-a);
                getNextWord();
                break;
            }
            case (int)OP::MUL: {
                #ifdef DEBUG
                std::cout<<"-- mul"<<std::endl;
                #endif
                int a = this->stack.top();
                this->stack.pop();
                int b = this->stack.top();
                this->stack.pop();
                this->stack.push(a*b);
                getNextWord();
                break;
            }
            case (int)OP::DIV: {
                #ifdef DEBUG
                std::cout<<"-- div"<<std::endl;
                #endif
                int a = this->stack.top();
                this->stack.pop();
                int b = this->stack.top();
                this->stack.pop();
                this->stack.push(b/a);
                getNextWord();
                break;
            }
            case (int)OP::GT: {
                #ifdef DEBUG
                std::cout<<"-- gt"<<std::endl;
                #endif
                int a = this->stack.top();
                this->stack.pop();
                int b = this->stack.top();
                this->stack.pop();
                this->stack.push(b>a?1:0);
                getNextWord();
                break;
            }
            case (int)OP::LT: {
                #ifdef DEBUG
                std::cout<<"-- lt"<<std::endl;
                #endif
                int a = this->stack.top();
                this->stack.pop();
                int b = this->stack.top();
                this->stack.pop();
                this->stack.push(b<a?1:0);
                getNextWord();
                break;
            }
            case (int)OP::GTE: {
                #ifdef DEBUG
                std::cout<<"-- gte"<<std::endl;
                #endif
                int a = this->stack.top();
                this->stack.pop();
                int b = this->stack.top();
                this->stack.pop();
                this->stack.push(b>=a?1:0);
                getNextWord();
                break;
            }
            case (int)OP::LTE: {
                #ifdef DEBUG
                std::cout<<"-- lte"<<std::endl;
                #endif
                int a = this->stack.top();
                this->stack.pop();
                int b = this->stack.top();
                this->stack.pop();
                this->stack.push(b<=a?1:0);
                getNextWord();
                break;
            }
            case (int)OP::EQU: {
                #ifdef DEBUG
                std::cout<<"-- gt"<<std::endl;
                #endif
                int a = this->stack.top();
                this->stack.pop();
                int b = this->stack.top();
                this->stack.pop();
                this->stack.push(b==a?1:0);
                getNextWord();
                break;
            }
            case (int)OP::NE: {
                #ifdef DEBUG
                std::cout<<"-- lt"<<std::endl;
                #endif
                int a = this->stack.top();
                this->stack.pop();
                int b = this->stack.top();
                this->stack.pop();
                this->stack.push(b!=a?1:0);
                getNextWord();
                break;
            }
            case (int)OP::DUP: {
                #ifdef DEBUG
                std::cout<<"-- dup"<<std::endl;
                #endif
                this->stack.push(this->stack.top());
                getNextWord();
                break;
            }
            case (int)OP::POP: {
                #ifdef DEBUG
                std::cout<<"-- pop"<<std::endl;
                #endif
                this->stack.pop();
                getNextWord();
                break;
            }
            case (int)OP::PUSH: {
                getNextWord();
                #ifdef DEBUG
                std::cout<<"-- push "<<curWord<<std::endl;
                #endif
                this->stack.push(curWord);
                getNextWord();
                break;
            }
            case (int)OP::JZ: {
                getNextWord();
                #ifdef DEBUG
                std::cout<<"-- jz "<<this->curWord<<" "<<binCode[curWord]<<std::endl;
                #endif
                if (this->stack.top() == 0) {
                    this->eip = curWord;
                }
                this->stack.pop();
                getNextWord();
                break;
            }
            case (int)OP::JMP: {
                getNextWord();
                #ifdef DEBUG
                std::cout<<"-- jmp "<<this->curWord<<std::endl;
                #endif
                this->eip = curWord;
                getNextWord();
                break;
            }
            case (int)OP::INT: {
                getNextWord();
                #ifdef DEBUG
                std::cout<<"-- int "<<this->curWord<<std::endl;
                #endif
                this->dataFlag[this->eipStack.size()][this->curWord] = true;
                getNextWord();
                break;
            }
            case (int)OP::LOAD: {
                getNextWord();
                #ifdef DEBUG
                std::cout<<"-- load "<<this->curWord<<std::endl;
                #endif
                int pos = this->eipStack.size();
                while (pos != -1) {
                    if (this->dataFlag[pos][this->curWord]) {
                        this->stack.push(this->data[pos][this->curWord]);
                        getNextWord();
                        break;
                    } else {
                        --pos;
                    }    
                }
                if (pos == -1) {
                    #ifdef DEBUG
                    std::cout<<"variable "<<this->curWord<<" not found"<<std::endl;
                    #endif
                    return false;
                }
                break;
            }
            case (int)OP::SAVE: {
                getNextWord();
                #ifdef DEBUG
                std::cout<<"-- save "<<this->curWord<<std::endl;
                #endif
                int pos = this->eipStack.size();
                while (pos != -1) {
                    if (this->dataFlag[pos][this->curWord]) {
                        this->data[pos][this->curWord] = this->stack.top();
                        this->stack.pop();
                        getNextWord();
                        break;
                    } else {
                        --pos;
                    }
                }
                if (pos == -1) {
                    #ifdef DEBUG
                    std::cout<<"variable not found"<<std::endl;
                    #endif
                    return false;
                }
                break;
            }
            case (int)OP::CALL: {
                getNextWord();
                #ifdef DEBUG
                std::cout<<"-- call "<<this->curWord<<std::endl;
                #endif
                this->eipStack.push(this->eip);
                this->eip = this->curWord;
                int *local = new int[DATA_SEG_SIZE];
                this->data.push_back(local);
                bool *localFlag = new bool[DATA_SEG_SIZE];
                memset(localFlag, false, DATA_SEG_SIZE);
                this->dataFlag.push_back(localFlag);
                getNextWord();
                break;
            }
            case (int)OP::FUNC: {
                getNextWord();
                #ifdef DEBUG
                std::cout<<"-- func "<<this->curWord<<std::endl;
                #endif
                while (this->curWord != (int)OP::ENDF) {
                    getNextWord();
                }
                break;
            }
            case (int)OP::RET: {
                #ifdef DEBUG
                std::cout<<"-- ret "<<this->eipStack.top()<<std::endl;
                #endif
                this->eip = this->eipStack.top();
                this->eipStack.pop();
                getNextWord();
                delete[] this->data.back();
                delete[] this->dataFlag.back();
                this->data.pop_back();
                this->dataFlag.pop_back();
                break;
            }
            case (int)OP::ENDF: {
                #ifdef DEBUG
                std::cout<<"-- endf"<<std::endl;
                #endif
                getNextWord();
                break;
            }
            default: {
                #ifdef DEBUG
                std::cout<<"-- unknown: "<<this->curWord<<std::endl;
                #endif
                return false;
            }
        }
        #ifdef DEBUG
        this->printStack();
        this->printData();
        #endif
    }
    return true;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x38, %rsp
movq %rdi, %rbx
leaq 0x98(%rdi), %r14
movslq 0x98(%rdi), %rax
leal 0x1(%rax), %ecx
movl %ecx, 0x98(%rdi)
movq (%rdi), %rcx
movl (%rcx,%rax,4), %eax
leaq 0xf0(%rdi), %r15
movl %eax, 0xf0(%rdi)
leaq 0xa0(%rdi), %rax
movq %rax, -0x40(%rbp)
leaq 0x68(%rdi), %rax
movq %rax, -0x50(%rbp)
leaq 0x80(%rdi), %rax
movq %rax, -0x48(%rbp)
leaq 0x18(%rdi), %r13
movq %r14, -0x38(%rbp)
movl (%r15), %eax
xorl %r12d, %r12d
cmpq $0x1a, %rax
ja 0xdfd0
leaq 0x1dcd(%rip), %rcx      # 0xf3b8
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq 0x48(%rbx), %rax
cmpq 0x50(%rbx), %rax
jne 0xd60b
movq 0x60(%rbx), %rcx
movl $0x200, %eax            # imm = 0x200
addq -0x8(%rcx), %rax
movl -0x4(%rax), %esi
movq 0x69bb(%rip), %rdi      # 0x13fd0
callq 0x3320
movq %rax, %r12
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r12, %rdi
movl $0xa, %esi
callq 0x31d0
movsbl %al, %esi
movq %r12, %rdi
callq 0x3040
movq %rax, %rdi
callq 0x3150
jmp 0xde72
movslq 0x98(%rbx), %rax
leal 0x1(%rax), %ecx
movl %ecx, 0x98(%rbx)
movq (%rbx), %rcx
movslq (%rcx,%rax,4), %rax
movl %eax, 0xf0(%rbx)
leal 0x1(%rax), %edx
movl %edx, 0x98(%rbx)
jmp 0xdf92
movq 0x48(%rbx), %rax
cmpq 0x50(%rbx), %rax
jne 0xd68b
movq 0x60(%rbx), %rcx
movl $0x200, %eax            # imm = 0x200
addq -0x8(%rcx), %rax
movl -0x4(%rax), %r14d
movq %r13, %rdi
callq 0xe3c0
movq 0x48(%rbx), %rax
cmpq 0x50(%rbx), %rax
jne 0xd6ae
movq 0x60(%rbx), %rcx
movl $0x200, %eax            # imm = 0x200
addq -0x8(%rcx), %rax
movl -0x4(%rax), %r12d
movq %r13, %rdi
callq 0xe3c0
xorl %eax, %eax
cmpl %r14d, %r12d
sete %al
jmp 0xdd3a
movq 0x48(%rbx), %rax
cmpq 0x50(%rbx), %rax
jne 0xd6de
movq 0x60(%rbx), %rcx
movl $0x200, %eax            # imm = 0x200
addq -0x8(%rcx), %rax
movl -0x4(%rax), %r12d
movq %r13, %rdi
callq 0xe3c0
movq 0x48(%rbx), %rax
cmpq 0x50(%rbx), %rax
jne 0xd701
movq 0x60(%rbx), %rcx
movl $0x200, %eax            # imm = 0x200
addq -0x8(%rcx), %rax
imull -0x4(%rax), %r12d
jmp 0xd841
movq 0x48(%rbx), %rax
cmpq 0x50(%rbx), %rax
jne 0xd722
movq 0x60(%rbx), %rcx
movl $0x200, %eax            # imm = 0x200
addq -0x8(%rcx), %rax
movl -0x4(%rax), %r14d
movq %r13, %rdi
callq 0xe3c0
movq 0x48(%rbx), %rax
cmpq 0x50(%rbx), %rax
jne 0xd745
movq 0x60(%rbx), %rcx
movl $0x200, %eax            # imm = 0x200
addq -0x8(%rcx), %rax
movl -0x4(%rax), %r12d
movq %r13, %rdi
callq 0xe3c0
movl %r12d, %eax
cltd
idivl %r14d
jmp 0xdd3a
movq 0x48(%rbx), %rax
cmpq 0x50(%rbx), %rax
jne 0xd774
movq 0x60(%rbx), %rcx
movl $0x200, %eax            # imm = 0x200
addq -0x8(%rcx), %rax
movl -0x4(%rax), %r14d
movq %r13, %rdi
callq 0xe3c0
movq 0x48(%rbx), %rax
cmpq 0x50(%rbx), %rax
jne 0xd797
movq 0x60(%rbx), %rcx
movl $0x200, %eax            # imm = 0x200
addq -0x8(%rcx), %rax
movl -0x4(%rax), %r12d
movq %r13, %rdi
callq 0xe3c0
xorl %eax, %eax
cmpl %r14d, %r12d
setl %al
jmp 0xdd3a
movq 0x48(%rbx), %rax
cmpq 0x50(%rbx), %rax
jne 0xd7c7
movq 0x60(%rbx), %rcx
movl $0x200, %eax            # imm = 0x200
addq -0x8(%rcx), %rax
movl -0x4(%rax), %r14d
movq %r13, %rdi
callq 0xe3c0
movq 0x48(%rbx), %rax
cmpq 0x50(%rbx), %rax
jne 0xd7ea
movq 0x60(%rbx), %rcx
movl $0x200, %eax            # imm = 0x200
addq -0x8(%rcx), %rax
movl -0x4(%rax), %r12d
movq %r13, %rdi
callq 0xe3c0
xorl %eax, %eax
cmpl %r14d, %r12d
setle %al
jmp 0xdd3a
movq 0x48(%rbx), %rax
cmpq 0x50(%rbx), %rax
jne 0xd81a
movq 0x60(%rbx), %rcx
movl $0x200, %eax            # imm = 0x200
addq -0x8(%rcx), %rax
movl -0x4(%rax), %r12d
movq %r13, %rdi
callq 0xe3c0
movq 0x48(%rbx), %rax
cmpq 0x50(%rbx), %rax
jne 0xd83d
movq 0x60(%rbx), %rcx
movl $0x200, %eax            # imm = 0x200
addq -0x8(%rcx), %rax
addl -0x4(%rax), %r12d
movq %r13, %rdi
callq 0xe3c0
movl %r12d, -0x30(%rbp)
movq 0x48(%rbx), %rax
movq 0x58(%rbx), %rcx
addq $-0x4, %rcx
cmpq %rcx, %rax
je 0xdec1
movl %r12d, (%rax)
jmp 0xdda2
movq 0x48(%rbx), %rax
cmpq 0x50(%rbx), %rax
jne 0xd881
movq 0x60(%rbx), %rcx
movl $0x200, %eax            # imm = 0x200
addq -0x8(%rcx), %rax
movl -0x4(%rax), %r14d
movq %r13, %rdi
callq 0xe3c0
movq 0x48(%rbx), %rax
cmpq 0x50(%rbx), %rax
jne 0xd8a4
movq 0x60(%rbx), %rcx
movl $0x200, %eax            # imm = 0x200
addq -0x8(%rcx), %rax
movl -0x4(%rax), %r12d
movq %r13, %rdi
callq 0xe3c0
xorl %eax, %eax
cmpl %r14d, %r12d
setge %al
jmp 0xdd3a
movq 0x48(%rbx), %rax
cmpq 0x50(%rbx), %rax
jne 0xd8d4
movq 0x60(%rbx), %rcx
movl $0x200, %eax            # imm = 0x200
addq -0x8(%rcx), %rax
movl -0x4(%rax), %r14d
movq %r13, %rdi
callq 0xe3c0
movq 0x48(%rbx), %rax
cmpq 0x50(%rbx), %rax
jne 0xd8f7
movq 0x60(%rbx), %rcx
movl $0x200, %eax            # imm = 0x200
addq -0x8(%rcx), %rax
movl -0x4(%rax), %r12d
subl %r14d, %r12d
movq %r13, %rdi
callq 0xe3c0
movl %r12d, -0x30(%rbp)
movq 0x48(%rbx), %rax
movq 0x58(%rbx), %rcx
addq $-0x4, %rcx
cmpq %rcx, %rax
je 0xdd5a
movl %r12d, (%rax)
addq $0x4, %rax
movq %rax, 0x48(%rbx)
jmp 0xdd66
movq 0x48(%rbx), %rax
cmpq 0x50(%rbx), %rax
jne 0xd946
movq 0x60(%rbx), %rcx
movl $0x200, %eax            # imm = 0x200
addq -0x8(%rcx), %rax
movl -0x4(%rax), %r14d
movq %r13, %rdi
callq 0xe3c0
movq 0x48(%rbx), %rax
cmpq 0x50(%rbx), %rax
jne 0xd969
movq 0x60(%rbx), %rcx
movl $0x200, %eax            # imm = 0x200
addq -0x8(%rcx), %rax
movl -0x4(%rax), %r12d
movq %r13, %rdi
callq 0xe3c0
xorl %eax, %eax
cmpl %r14d, %r12d
setne %al
jmp 0xdd3a
movslq 0x98(%rbx), %rcx
leal 0x1(%rcx), %eax
movl %eax, 0x98(%rbx)
movq (%rbx), %rdx
movq 0xc0(%rbx), %rax
movslq (%rdx,%rcx,4), %rsi
movl %esi, 0xf0(%rbx)
movq 0xe8(%rbx), %rcx
movq %rcx, %rdx
subq 0xc8(%rbx), %rdx
shrq $0x3, %rdx
cmpq $0x1, %rcx
adcq $-0x1, %rdx
shlq $0x7, %rdx
movq 0xd0(%rbx), %rcx
subq 0xd8(%rbx), %rcx
shrq $0x2, %rcx
subq 0xb0(%rbx), %rax
shrq $0x2, %rax
addq %rcx, %rax
addq %rdx, %rax
cmpl $-0x1, %eax
sete %r12b
je 0xdfcd
movq 0x80(%rbx), %rcx
cltq
movq (%rcx,%rax,8), %rdx
cmpb $0x0, (%rdx,%rsi)
jne 0xda22
subq $0x1, %rax
setb %r12b
jb 0xdfcd
movq (%rcx,%rax,8), %rdx
cmpb $0x1, (%rdx,%rsi)
jne 0xda0a
movq 0x68(%rbx), %rcx
shlq $0x2, %rsi
addq (%rcx,%rax,8), %rsi
movq 0x48(%rbx), %rax
movq 0x58(%rbx), %rcx
addq $-0x4, %rcx
cmpq %rcx, %rax
je 0xdfa0
movl (%rsi), %ecx
movl %ecx, (%rax)
addq $0x4, %rax
movq %rax, 0x48(%rbx)
jmp 0xdfa8
movslq 0x98(%rbx), %rcx
leal 0x1(%rcx), %eax
movl %eax, 0x98(%rbx)
movq (%rbx), %rdx
movq 0x48(%rbx), %rax
movl (%rdx,%rcx,4), %ecx
movl %ecx, 0xf0(%rbx)
movq 0x58(%rbx), %rdx
addq $-0x4, %rdx
cmpq %rdx, %rax
jne 0xdda0
movq %r13, %rdi
movq %r15, %rsi
jmp 0xded5
movslq 0x98(%rbx), %rax
leaq 0x1(%rax), %rcx
movl %ecx, 0x98(%rbx)
movq (%rbx), %rcx
movq 0xc0(%rbx), %rdx
movslq (%rcx,%rax,4), %rsi
movl %esi, 0xf0(%rbx)
movq 0xe8(%rbx), %rdi
movq %rdi, %r8
subq 0xc8(%rbx), %r8
shrq $0x3, %r8
cmpq $0x1, %rdi
adcq $-0x1, %r8
movq 0xd0(%rbx), %rdi
subq 0xd8(%rbx), %rdi
subq 0xb0(%rbx), %rdx
shlq $0xa, %r8
addq 0x80(%rbx), %r8
leaq (%r8,%rdi,2), %rdi
movq (%rdi,%rdx,2), %rdx
movb $0x1, (%rdx,%rsi)
leal 0x2(%rax), %edx
movl %edx, 0x98(%rbx)
movl 0x4(%rcx,%rax,4), %eax
movl %eax, 0xf0(%rbx)
jmp 0xd5d4
movslq 0x98(%rbx), %rax
leal 0x1(%rax), %ecx
movl %ecx, 0x98(%rbx)
movq (%rbx), %rdx
movq 0xc0(%rbx), %rcx
movslq (%rdx,%rax,4), %rax
movl %eax, 0xf0(%rbx)
movq 0xe8(%rbx), %rdx
movq %rdx, %rsi
subq 0xc8(%rbx), %rsi
shrq $0x3, %rsi
cmpq $0x1, %rdx
adcq $-0x1, %rsi
shlq $0x7, %rsi
movq 0xd0(%rbx), %rdx
subq 0xd8(%rbx), %rdx
shrq $0x2, %rdx
subq 0xb0(%rbx), %rcx
shrq $0x2, %rcx
addq %rdx, %rcx
addq %rsi, %rcx
cmpl $-0x1, %ecx
sete %r12b
je 0xdfcd
movq 0x80(%rbx), %rdx
movslq %ecx, %rcx
movq (%rdx,%rcx,8), %rsi
cmpb $0x0, (%rsi,%rax)
jne 0xdbb7
subq $0x1, %rcx
setb %r12b
jb 0xdfcd
movq (%rdx,%rcx,8), %rsi
cmpb $0x1, (%rsi,%rax)
jne 0xdb9f
movq 0x48(%rbx), %rdx
cmpq 0x50(%rbx), %rdx
jne 0xdbce
movq 0x60(%rbx), %rsi
movl $0x200, %edx            # imm = 0x200
addq -0x8(%rsi), %rdx
movl -0x4(%rdx), %edx
movq 0x68(%rbx), %rsi
movq (%rsi,%rcx,8), %rcx
movl %edx, (%rcx,%rax,4)
movq %r13, %rdi
callq 0xe3c0
jmp 0xdfa8
movslq 0x98(%rbx), %rcx
leal 0x1(%rcx), %eax
movl %eax, 0x98(%rbx)
movq (%rbx), %rdx
movq 0xc0(%rbx), %rax
movslq (%rdx,%rcx,4), %rsi
movl %esi, 0xf0(%rbx)
movq 0xe8(%rbx), %rcx
movq %rcx, %rdx
subq 0xc8(%rbx), %rdx
shrq $0x3, %rdx
cmpq $0x1, %rcx
adcq $-0x1, %rdx
shlq $0x7, %rdx
movq 0xd0(%rbx), %rcx
subq 0xd8(%rbx), %rcx
shrq $0x2, %rcx
subq 0xb0(%rbx), %rax
shrq $0x2, %rax
addq %rcx, %rax
addq %rdx, %rax
cmpl $-0x1, %eax
sete %r12b
je 0xdfcd
movq 0x80(%rbx), %rcx
cltq
movq (%rcx,%rax,8), %rdx
cmpb $0x0, (%rdx,%rsi)
jne 0xdc89
subq $0x1, %rax
setb %r12b
jb 0xdfcd
movq (%rcx,%rax,8), %rdx
cmpb $0x1, (%rdx,%rsi)
jne 0xdc71
movq 0x68(%rbx), %rcx
shlq $0x2, %rsi
addq (%rcx,%rax,8), %rsi
movq 0x6344(%rip), %rdi      # 0x13fe0
callq 0x3140
jmp 0xdfa8
movslq 0x98(%rbx), %rcx
leal 0x1(%rcx), %eax
movl %eax, 0x98(%rbx)
movq (%rbx), %rdx
movl (%rdx,%rcx,4), %esi
movl %esi, 0xf0(%rbx)
cmpl $0x1a, %esi
je 0xd5d4
cltq
leaq (%rdx,%rax,4), %rax
addl $0x2, %ecx
movl %ecx, (%r14)
movl (%rax), %edx
movl %edx, (%r15)
addq $0x4, %rax
incl %ecx
cmpl $0x1a, %edx
jne 0xdcd4
jmp 0xd5d4
movq 0x48(%rbx), %rax
cmpq 0x50(%rbx), %rax
jne 0xdd03
movq 0x60(%rbx), %rcx
movl $0x200, %eax            # imm = 0x200
addq -0x8(%rcx), %rax
movl -0x4(%rax), %r14d
movq %r13, %rdi
callq 0xe3c0
movq 0x48(%rbx), %rax
cmpq 0x50(%rbx), %rax
jne 0xdd26
movq 0x60(%rbx), %rcx
movl $0x200, %eax            # imm = 0x200
addq -0x8(%rcx), %rax
movl -0x4(%rax), %r12d
movq %r13, %rdi
callq 0xe3c0
xorl %eax, %eax
cmpl %r14d, %r12d
setg %al
movl %eax, -0x30(%rbp)
movq 0x48(%rbx), %rcx
movq 0x58(%rbx), %rdx
addq $-0x4, %rdx
cmpq %rdx, %rcx
je 0xdd5a
movl %eax, (%rcx)
addq $0x4, %rcx
movq %rcx, 0x48(%rbx)
jmp 0xdd66
leaq -0x30(%rbp), %rsi
movq %r13, %rdi
callq 0xb67a
movq -0x38(%rbp), %r14
jmp 0xdf7f
movq 0x48(%rbx), %rax
movq %rax, %rsi
cmpq 0x50(%rbx), %rax
jne 0xdd89
movq 0x60(%rbx), %rcx
movl $0x200, %esi            # imm = 0x200
addq -0x8(%rcx), %rsi
addq $-0x4, %rsi
movq 0x58(%rbx), %rcx
addq $-0x4, %rcx
cmpq %rcx, %rax
je 0xded2
movl (%rsi), %ecx
movl %ecx, (%rax)
addq $0x4, %rax
movq %rax, 0x48(%rbx)
jmp 0xdf7f
movq 0xd0(%rbx), %rax
cmpq 0xd8(%rbx), %rax
jne 0xddcf
movq 0xe8(%rbx), %rcx
movl $0x200, %eax            # imm = 0x200
addq -0x8(%rcx), %rax
movl -0x4(%rax), %eax
movl %eax, 0x98(%rbx)
movq -0x40(%rbp), %rdi
callq 0xe3c0
movslq 0x98(%rbx), %rax
leal 0x1(%rax), %ecx
movl %ecx, 0x98(%rbx)
movq (%rbx), %rcx
movq 0x70(%rbx), %rdx
movl (%rcx,%rax,4), %eax
movl %eax, 0xf0(%rbx)
movq -0x8(%rdx), %rdi
testq %rdi, %rdi
je 0xde0f
callq 0x3270
movq 0x88(%rbx), %rax
movq -0x8(%rax), %rdi
testq %rdi, %rdi
je 0xde24
callq 0x3270
addq $-0x8, 0x70(%rbx)
addq $-0x8, 0x88(%rbx)
jmp 0xd5d4
movslq 0x98(%rbx), %rax
leal 0x1(%rax), %ecx
movl %ecx, 0x98(%rbx)
movq (%rbx), %rdx
movq 0x48(%rbx), %rcx
movl (%rdx,%rax,4), %eax
movl %eax, 0xf0(%rbx)
cmpq 0x50(%rbx), %rcx
jne 0xde69
movq 0x60(%rbx), %rdx
movl $0x200, %ecx            # imm = 0x200
addq -0x8(%rdx), %rcx
cmpl $0x0, -0x4(%rcx)
jne 0xde72
movl %eax, (%r14)
movq %r13, %rdi
callq 0xe3c0
jmp 0xdf7f
movslq 0x98(%rbx), %rdx
leal 0x1(%rdx), %eax
movl %eax, 0x98(%rbx)
movq (%rbx), %rsi
movq 0xd0(%rbx), %rcx
movl (%rsi,%rdx,4), %edx
movl %edx, 0xf0(%rbx)
movq 0xe0(%rbx), %rdx
addq $-0x4, %rdx
cmpq %rdx, %rcx
je 0xdedf
movl %eax, (%rcx)
addq $0x4, %rcx
movq %rcx, 0xd0(%rbx)
jmp 0xdeeb
leaq -0x30(%rbp), %rsi
movq %r13, %rdi
callq 0xb67a
jmp 0xdf7f
movq %r13, %rdi
callq 0xe412
jmp 0xdf7f
movq -0x40(%rbp), %rdi
movq %r14, %rsi
callq 0xe412
movl 0xf0(%rbx), %eax
movl %eax, 0x98(%rbx)
movl $0x190, %edi            # imm = 0x190
callq 0x3030
movq %rax, -0x30(%rbp)
movq 0x70(%rbx), %rsi
cmpq 0x78(%rbx), %rsi
je 0xdf19
movq %rax, (%rsi)
addq $0x8, 0x70(%rbx)
jmp 0xdf26
leaq -0x30(%rbp), %rdx
movq -0x50(%rbp), %rdi
callq 0xe16a
movl $0x64, %edi
callq 0x3030
movq %rax, -0x58(%rbp)
xorps %xmm0, %xmm0
movups %xmm0, (%rax)
movups %xmm0, 0x10(%rax)
movups %xmm0, 0x20(%rax)
movups %xmm0, 0x30(%rax)
movups %xmm0, 0x40(%rax)
movups %xmm0, 0x50(%rax)
movl $0x0, 0x60(%rax)
movq 0x88(%rbx), %rsi
cmpq 0x90(%rbx), %rsi
je 0xdf72
movq %rax, (%rsi)
addq $0x8, 0x88(%rbx)
jmp 0xdf7f
leaq -0x58(%rbp), %rdx
movq -0x48(%rbp), %rdi
callq 0xe286
movslq 0x98(%rbx), %rax
leal 0x1(%rax), %ecx
movl %ecx, 0x98(%rbx)
movq (%rbx), %rcx
movl (%rcx,%rax,4), %eax
movl %eax, 0xf0(%rbx)
jmp 0xd5d4
movq %r13, %rdi
callq 0xe412
movslq 0x98(%rbx), %rax
leal 0x1(%rax), %ecx
movl %ecx, 0x98(%rbx)
movq (%rbx), %rcx
movl (%rcx,%rax,4), %eax
movl %eax, 0xf0(%rbx)
testb %r12b, %r12b
je 0xd5d4
xorl %r12d, %r12d
movl %r12d, %eax
addq $0x38, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq 0x70(%rbx), %rax
movb $0x1, %r12b
cmpq %rax, 0x68(%rbx)
je 0xdfd0
movq -0x8(%rax), %rdi
testq %rdi, %rdi
je 0xdffd
callq 0x3270
movq 0x88(%rbx), %rax
movq -0x8(%rax), %rdi
testq %rdi, %rdi
je 0xe012
callq 0x3270
movq 0x68(%rbx), %rcx
movq 0x70(%rbx), %rax
addq $-0x8, %rax
movq %rax, 0x70(%rbx)
addq $-0x8, 0x88(%rbx)
cmpq %rax, %rcx
jne 0xdfef
jmp 0xdfd0
nop