// File: brashi[P]PetFera/src/./banco_dados.cpp
// Function: BancoDados::lerAnimais()
void BancoDados::lerAnimais() {
    if(!fs::exists(animalArq)) {
        cout << "Arquivo de animais ainda não criado." << endl;
        cout << "Leitura cancelada..." << endl;
        
        return;
    }
    if(fs::is_empty(animalArq)) {
        cout << "Arquivo de animais vazio." << endl;
        cout << "Leitura cancelada..." << endl;
        return;
    }

    ifstream arqDados(animalArq);
    if(arqDados.bad() || arqDados.fail()){
        throw "Arquivo de animais inexistente ou corrompido.";
    }
    int count = 0;
    int prox;

    string temp;
    string linha;
    string palavra;
    string classe, classificacao;
    vector<string> tokens;
    shared_ptr<Animal> animal;

    while(!arqDados.eof()) {
        tokens.clear();

        getline(arqDados, linha);
        stringstream s(linha);
        while(getline(s, palavra, ';')) {
            tokens.push_back(palavra);
        }

        if(tokens.size()) {
            classe = tokens.at(0);
            classificacao = tokens.at(1);

            animal = mapa.aMap[classe + classificacao]();
            animal->setNome(tokens.at(2));
            animal->setEspecie(tokens.at(3));
            animal->setAmeacadoPor(tokens.at(4));
            animal->setVeterinario(petshop->findVeterinario(tokens.at(5)));
            animal->setTratador(petshop->findTratador(tokens.at(6)));
            animal->setPerigoso(stoi(tokens.at(7)));

            switch(strFiltro[classificacao]) {
                case 'D':
                    dynamic_pointer_cast<Domestico>(animal)->setAdestrado(stoi(tokens.at(8)));
                    prox = 9;
                    break;
                case 'E':
                    dynamic_pointer_cast<Exotico>(animal)->setLocal(tokens.at(8));
                    prox = 9;
                    break;
                case 'N':
                    dynamic_pointer_cast<Nativo>(animal)->setRegiao(tokens.at(8));
                    dynamic_pointer_cast<Nativo>(animal)->setLicenca(tokens.at(9));
                    prox = 10;
                    break;
            }
            
            switch(strFiltro[classe]) {
                case 'A':
                    dynamic_pointer_cast<Ave>(animal)->setVoa(stoi(tokens.at(prox)));
                    break;
                case 'F':
                    dynamic_pointer_cast<Anfibio>(animal)->setCauda(stoi(tokens.at(prox)));
                    dynamic_pointer_cast<Anfibio>(animal)->setPata(stoi(tokens.at(prox + 1)));
                    break;
                case 'R':
                    dynamic_pointer_cast<Reptil>(animal)->setPele(static_cast<Pele>(stoi(tokens.at(prox))));
                    break;
                case 'M':
                    dynamic_pointer_cast<Mamifero>(animal)->setGestacao(stoi(tokens.at(prox)));
            }

            petshop->adicionarAnimal(animal);
            count++;
        }


    }
    arqDados.close();
    cout << "Arquivo de animais carregado com sucesso." << endl;
    cout << "Foram carregados " << count << " animais." << endl;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x900, %rsp            # imm = 0x900
movq %rdi, -0x8(%rbp)
movq -0x8(%rbp), %rsi
movq %rsi, -0x6d0(%rbp)
addq $0x30, %rsi
leaq -0x30(%rbp), %rdi
movq %rdi, -0x6c8(%rbp)
movl $0x2, %edx
callq 0xaea0
movq -0x6c8(%rbp), %rdi
callq 0xae70
movb %al, -0x6b9(%rbp)
jmp 0x93c7
movb -0x6b9(%rbp), %al
xorb $-0x1, %al
movb %al, -0x6d1(%rbp)
leaq -0x30(%rbp), %rdi
callq 0xaf80
movb -0x6d1(%rbp), %al
testb $0x1, %al
jne 0x93ea
jmp 0x944d
movq 0x59bd7(%rip), %rdi     # 0x62fc8
leaq 0x36ee6(%rip), %rsi     # 0x402de
callq 0x6310
movq %rax, %rdi
movq 0x59b99(%rip), %rsi     # 0x62fa0
callq 0x6360
movq 0x59bb5(%rip), %rdi     # 0x62fc8
leaq 0x36e13(%rip), %rsi     # 0x4022d
callq 0x6310
movq %rax, %rdi
movq 0x59b77(%rip), %rsi     # 0x62fa0
callq 0x6360
jmp 0xa49a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x30(%rbp), %rdi
callq 0xaf80
jmp 0xa503
movq -0x6d0(%rbp), %rsi
addq $0x30, %rsi
leaq -0x68(%rbp), %rdi
movq %rdi, -0x6e0(%rbp)
movl $0x2, %edx
callq 0xaea0
movq -0x6e0(%rbp), %rdi
callq 0x6610
movb %al, -0x6d2(%rbp)
jmp 0x9481
leaq -0x68(%rbp), %rdi
callq 0xaf80
movb -0x6d2(%rbp), %al
testb $0x1, %al
jne 0x9496
jmp 0x94f9
movq 0x59b2b(%rip), %rdi     # 0x62fc8
leaq 0x36e60(%rip), %rsi     # 0x40304
callq 0x6310
movq %rax, %rdi
movq 0x59aed(%rip), %rsi     # 0x62fa0
callq 0x6360
movq 0x59b09(%rip), %rdi     # 0x62fc8
leaq 0x36d67(%rip), %rsi     # 0x4022d
callq 0x6310
movq %rax, %rdi
movq 0x59acb(%rip), %rsi     # 0x62fa0
callq 0x6360
jmp 0xa49a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x68(%rbp), %rdi
callq 0xaf80
jmp 0xa503
movq -0x6d0(%rbp), %rsi
addq $0x30, %rsi
leaq -0x270(%rbp), %rdi
movl $0x8, %edx
callq 0x6540
movq -0x270(%rbp), %rax
movq -0x18(%rax), %rax
leaq -0x270(%rbp,%rax), %rdi
callq 0x65d0
movb %al, -0x6e1(%rbp)
jmp 0x9535
movb -0x6e1(%rbp), %al
testb $0x1, %al
jne 0x956d
jmp 0x9541
movq -0x270(%rbp), %rax
movq -0x18(%rax), %rax
leaq -0x270(%rbp,%rax), %rdi
callq 0x6030
movb %al, -0x6e2(%rbp)
jmp 0x9561
movb -0x6e2(%rbp), %al
testb $0x1, %al
jne 0x956d
jmp 0x95aa
movl $0x8, %edi
callq 0x61e0
movq %rax, %rdi
leaq 0x36d9d(%rip), %rax     # 0x4031e
movq %rax, (%rdi)
movq 0x59a1d(%rip), %rsi     # 0x62fa8
xorl %eax, %eax
movl %eax, %edx
callq 0x6570
jmp 0xa50c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0xa4f7
movl $0x0, -0x274(%rbp)
leaq -0x298(%rbp), %rdi
callq 0x6480
leaq -0x2b8(%rbp), %rdi
callq 0x6480
leaq -0x2d8(%rbp), %rdi
callq 0x6480
leaq -0x2f8(%rbp), %rdi
callq 0x6480
leaq -0x318(%rbp), %rdi
callq 0x6480
leaq -0x330(%rbp), %rdi
callq 0xbb40
leaq -0x340(%rbp), %rdi
callq 0xbe60
movq -0x270(%rbp), %rax
movq -0x18(%rax), %rax
leaq -0x270(%rbp,%rax), %rdi
callq 0x65e0
movb %al, -0x6e3(%rbp)
jmp 0x9628
movb -0x6e3(%rbp), %al
xorb $-0x1, %al
testb $0x1, %al
jne 0x9639
jmp 0xa393
leaq -0x330(%rbp), %rdi
callq 0xbb60
leaq -0x270(%rbp), %rdi
leaq -0x2b8(%rbp), %rsi
callq 0x6090
jmp 0x965a
movl $0x10, %edi
movl $0x8, %esi
callq 0xbb80
movl %eax, -0x6e8(%rbp)
jmp 0x9671
movl -0x6e8(%rbp), %edx
leaq -0x4c8(%rbp), %rdi
leaq -0x2b8(%rbp), %rsi
callq 0x6530
jmp 0x968c
jmp 0x968e
leaq -0x4c8(%rbp), %rdi
leaq -0x2d8(%rbp), %rsi
movl $0x3b, %edx
callq 0x65f0
movq %rax, -0x6f0(%rbp)
jmp 0x96af
movq -0x6f0(%rbp), %rdi
movq (%rdi), %rax
movq -0x18(%rax), %rax
addq %rax, %rdi
callq 0x6430
movb %al, -0x6f1(%rbp)
jmp 0x96cd
movb -0x6f1(%rbp), %al
testb $0x1, %al
jne 0x96d9
jmp 0x9712
leaq -0x330(%rbp), %rdi
leaq -0x2d8(%rbp), %rsi
callq 0xbba0
jmp 0x96ee
jmp 0x968e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0xa4a3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0xa382
leaq -0x330(%rbp), %rdi
callq 0xbc10
cmpq $0x0, %rax
je 0xa371
xorl %eax, %eax
movl %eax, %esi
leaq -0x330(%rbp), %rdi
callq 0xbc60
movq %rax, -0x700(%rbp)
jmp 0x9741
movq -0x700(%rbp), %rsi
leaq -0x2f8(%rbp), %rdi
callq 0x6050
jmp 0x9756
leaq -0x330(%rbp), %rdi
movl $0x1, %esi
callq 0xbc60
movq %rax, -0x708(%rbp)
jmp 0x9770
movq -0x708(%rbp), %rsi
leaq -0x318(%rbp), %rdi
callq 0x6050
jmp 0x9785
movq -0x6d0(%rbp), %rax
addq $0x70, %rax
movq %rax, -0x710(%rbp)
leaq -0x4f8(%rbp), %rdi
leaq -0x2f8(%rbp), %rsi
leaq -0x318(%rbp), %rdx
callq 0xbf60
jmp 0x97b3
movq -0x710(%rbp), %rdi
leaq -0x4f8(%rbp), %rsi
callq 0xbe80
movq %rax, -0x718(%rbp)
jmp 0x97cf
movq -0x718(%rbp), %rsi
leaq -0x4d8(%rbp), %rdi
callq 0xbfe0
jmp 0x97e4
leaq -0x340(%rbp), %rdi
movq %rdi, -0x730(%rbp)
leaq -0x4d8(%rbp), %rsi
movq %rsi, -0x738(%rbp)
callq 0xc030
movq -0x738(%rbp), %rdi
callq 0xb460
leaq -0x4f8(%rbp), %rdi
callq 0x6678
movq -0x730(%rbp), %rdi
callq 0xb480
movq %rax, -0x728(%rbp)
leaq -0x330(%rbp), %rdi
movl $0x2, %esi
callq 0xbc60
movq %rax, -0x720(%rbp)
jmp 0x984a
movq -0x720(%rbp), %rsi
leaq -0x518(%rbp), %rdi
callq 0x61a0
jmp 0x985f
movq -0x728(%rbp), %rdi
leaq -0x518(%rbp), %rsi
callq 0x297f0
jmp 0x9874
leaq -0x518(%rbp), %rdi
callq 0x6678
leaq -0x340(%rbp), %rdi
callq 0xb480
movq %rax, -0x748(%rbp)
leaq -0x330(%rbp), %rdi
movl $0x3, %esi
callq 0xbc60
movq %rax, -0x740(%rbp)
jmp 0x98ad
movq -0x740(%rbp), %rsi
leaq -0x538(%rbp), %rdi
callq 0x61a0
jmp 0x98c2
movq -0x748(%rbp), %rdi
leaq -0x538(%rbp), %rsi
callq 0x29ab0
jmp 0x98d7
leaq -0x538(%rbp), %rdi
callq 0x6678
leaq -0x340(%rbp), %rdi
callq 0xb480
movq %rax, -0x758(%rbp)
leaq -0x330(%rbp), %rdi
movl $0x4, %esi
callq 0xbc60
movq %rax, -0x750(%rbp)
jmp 0x9910
movq -0x750(%rbp), %rsi
leaq -0x558(%rbp), %rdi
callq 0x61a0
jmp 0x9925
movq -0x758(%rbp), %rdi
leaq -0x558(%rbp), %rsi
callq 0x29c40
jmp 0x993a
leaq -0x558(%rbp), %rdi
callq 0x6678
leaq -0x340(%rbp), %rdi
callq 0xb480
movq -0x6d0(%rbp), %rdi
movq %rax, -0x770(%rbp)
callq 0xb090
movq %rax, -0x768(%rbp)
leaq -0x330(%rbp), %rdi
movl $0x5, %esi
callq 0xbc60
movq %rax, -0x760(%rbp)
jmp 0x9986
movq -0x760(%rbp), %rsi
leaq -0x588(%rbp), %rdi
callq 0x61a0
jmp 0x999b
movq -0x768(%rbp), %rsi
leaq -0x568(%rbp), %rdi
leaq -0x588(%rbp), %rdx
callq 0x1aee0
jmp 0x99b7
movq -0x770(%rbp), %rdi
leaq -0x568(%rbp), %rsi
callq 0x29ca0
jmp 0x99cc
leaq -0x568(%rbp), %rdi
callq 0xb4c0
leaq -0x588(%rbp), %rdi
callq 0x6678
leaq -0x340(%rbp), %rdi
callq 0xb480
movq -0x6d0(%rbp), %rdi
movq %rax, -0x788(%rbp)
callq 0xb090
movq %rax, -0x780(%rbp)
leaq -0x330(%rbp), %rdi
movl $0x6, %esi
callq 0xbc60
movq %rax, -0x778(%rbp)
jmp 0x9a24
movq -0x778(%rbp), %rsi
leaq -0x5b8(%rbp), %rdi
callq 0x61a0
jmp 0x9a39
movq -0x780(%rbp), %rsi
leaq -0x598(%rbp), %rdi
leaq -0x5b8(%rbp), %rdx
callq 0x1b370
jmp 0x9a55
movq -0x788(%rbp), %rdi
leaq -0x598(%rbp), %rsi
callq 0x29d00
jmp 0x9a6a
leaq -0x598(%rbp), %rdi
callq 0xb4a0
leaq -0x5b8(%rbp), %rdi
callq 0x6678
leaq -0x340(%rbp), %rdi
callq 0xb480
movq %rax, -0x798(%rbp)
leaq -0x330(%rbp), %rdi
movl $0x7, %esi
callq 0xbc60
movq %rax, -0x790(%rbp)
jmp 0x9aaf
movq -0x790(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
movl $0xa, %edx
callq 0xbdc0
movl %eax, -0x79c(%rbp)
jmp 0x9acc
movq -0x798(%rbp), %rdi
movl -0x79c(%rbp), %eax
testl %eax, %eax
setne %al
movzbl %al, %esi
callq 0x29e60
jmp 0x9ae8
movq -0x6d0(%rbp), %rdi
addq $0xa0, %rdi
leaq -0x318(%rbp), %rsi
callq 0xb4e0
movq %rax, -0x7a8(%rbp)
jmp 0x9b0b
movq -0x7a8(%rbp), %rax
movsbl (%rax), %eax
movl %eax, -0x7ac(%rbp)
subl $0x44, %eax
je 0x9c2d
jmp 0x9b26
movl -0x7ac(%rbp), %eax
subl $0x45, %eax
je 0x9ce5
jmp 0x9b37
movl -0x7ac(%rbp), %eax
subl $0x4e, %eax
je 0x9db4
jmp 0x9f40
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x4f8(%rbp), %rdi
callq 0x6678
jmp 0xa382
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x518(%rbp), %rdi
callq 0x6678
jmp 0xa382
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x538(%rbp), %rdi
callq 0x6678
jmp 0xa382
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x558(%rbp), %rdi
callq 0x6678
jmp 0xa382
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x9be5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x568(%rbp), %rdi
callq 0xb4c0
leaq -0x588(%rbp), %rdi
callq 0x6678
jmp 0xa382
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x9c1c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x598(%rbp), %rdi
callq 0xb4a0
leaq -0x5b8(%rbp), %rdi
callq 0x6678
jmp 0xa382
leaq -0x5c8(%rbp), %rdi
movq %rdi, -0x7c8(%rbp)
leaq -0x340(%rbp), %rsi
callq 0xb510
movq -0x7c8(%rbp), %rdi
callq 0xb5a0
movq %rax, -0x7c0(%rbp)
leaq -0x330(%rbp), %rdi
movl $0x8, %esi
callq 0xbc60
movq %rax, -0x7b8(%rbp)
jmp 0x9c74
movq -0x7b8(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
movl $0xa, %edx
callq 0xbdc0
movl %eax, -0x7cc(%rbp)
jmp 0x9c91
movq -0x7c0(%rbp), %rdi
movl -0x7cc(%rbp), %eax
testl %eax, %eax
setne %al
movzbl %al, %esi
callq 0x2c2b0
jmp 0x9cad
leaq -0x5c8(%rbp), %rdi
callq 0xb5c0
movl $0x9, -0x278(%rbp)
jmp 0x9f40
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x5c8(%rbp), %rdi
callq 0xb5c0
jmp 0xa382
leaq -0x5d8(%rbp), %rdi
movq %rdi, -0x7e8(%rbp)
leaq -0x340(%rbp), %rsi
callq 0xb5e0
movq -0x7e8(%rbp), %rdi
callq 0xb670
movq %rax, -0x7e0(%rbp)
leaq -0x330(%rbp), %rdi
movl $0x8, %esi
callq 0xbc60
movq %rax, -0x7d8(%rbp)
jmp 0x9d2c
movq -0x7d8(%rbp), %rsi
leaq -0x5f8(%rbp), %rdi
callq 0x61a0
jmp 0x9d41
movq -0x7e0(%rbp), %rdi
leaq -0x5f8(%rbp), %rsi
callq 0x2c4b0
jmp 0x9d56
leaq -0x5f8(%rbp), %rdi
callq 0x6678
leaq -0x5d8(%rbp), %rdi
callq 0xb690
movl $0x9, -0x278(%rbp)
jmp 0x9f40
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x9da3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x5f8(%rbp), %rdi
callq 0x6678
leaq -0x5d8(%rbp), %rdi
callq 0xb690
jmp 0xa382
leaq -0x608(%rbp), %rdi
movq %rdi, -0x800(%rbp)
leaq -0x340(%rbp), %rsi
callq 0xb6b0
movq -0x800(%rbp), %rdi
callq 0xb740
movq %rax, -0x7f8(%rbp)
leaq -0x330(%rbp), %rdi
movl $0x8, %esi
callq 0xbc60
movq %rax, -0x7f0(%rbp)
jmp 0x9dfb
movq -0x7f0(%rbp), %rsi
leaq -0x628(%rbp), %rdi
callq 0x61a0
jmp 0x9e10
movq -0x7f8(%rbp), %rdi
leaq -0x628(%rbp), %rsi
callq 0x3bc20
jmp 0x9e25
leaq -0x628(%rbp), %rdi
callq 0x6678
leaq -0x608(%rbp), %rdi
callq 0xb760
leaq -0x638(%rbp), %rdi
movq %rdi, -0x818(%rbp)
leaq -0x340(%rbp), %rsi
callq 0xb6b0
movq -0x818(%rbp), %rdi
callq 0xb740
movq %rax, -0x810(%rbp)
leaq -0x330(%rbp), %rdi
movl $0x9, %esi
callq 0xbc60
movq %rax, -0x808(%rbp)
jmp 0x9e84
movq -0x808(%rbp), %rsi
leaq -0x658(%rbp), %rdi
callq 0x61a0
jmp 0x9e99
movq -0x810(%rbp), %rdi
leaq -0x658(%rbp), %rsi
callq 0x3ba90
jmp 0x9eae
leaq -0x658(%rbp), %rdi
callq 0x6678
leaq -0x638(%rbp), %rdi
callq 0xb760
movl $0xa, -0x278(%rbp)
jmp 0x9f40
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x9ef8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x628(%rbp), %rdi
callq 0x6678
leaq -0x608(%rbp), %rdi
callq 0xb760
jmp 0xa382
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x9f2f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x658(%rbp), %rdi
callq 0x6678
leaq -0x638(%rbp), %rdi
callq 0xb760
jmp 0xa382
movq -0x6d0(%rbp), %rdi
addq $0xa0, %rdi
leaq -0x2f8(%rbp), %rsi
callq 0xb4e0
movq %rax, -0x820(%rbp)
jmp 0x9f63
movq -0x820(%rbp), %rax
movsbl (%rax), %eax
addl $-0x41, %eax
movl %eax, %ecx
movq %rcx, -0x828(%rbp)
subl $0x11, %eax
ja 0xa2de
movq -0x828(%rbp), %rax
leaq 0x360bc(%rip), %rcx     # 0x4004c
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
leaq -0x668(%rbp), %rdi
movq %rdi, -0x840(%rbp)
leaq -0x340(%rbp), %rsi
callq 0xb780
movq -0x840(%rbp), %rdi
callq 0xb810
movq %rax, -0x838(%rbp)
movslq -0x278(%rbp), %rsi
leaq -0x330(%rbp), %rdi
callq 0xbc60
movq %rax, -0x830(%rbp)
jmp 0x9fe2
movq -0x830(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
movl $0xa, %edx
callq 0xbdc0
movl %eax, -0x844(%rbp)
jmp 0x9fff
movq -0x838(%rbp), %rdi
movl -0x844(%rbp), %eax
testl %eax, %eax
setne %al
movzbl %al, %esi
callq 0x3c0d0
jmp 0xa01b
leaq -0x668(%rbp), %rdi
callq 0xb830
jmp 0xa2de
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x668(%rbp), %rdi
callq 0xb830
jmp 0xa382
leaq -0x678(%rbp), %rdi
movq %rdi, -0x860(%rbp)
leaq -0x340(%rbp), %rsi
callq 0xb850
movq -0x860(%rbp), %rdi
callq 0xb8e0
movq %rax, -0x858(%rbp)
movslq -0x278(%rbp), %rsi
leaq -0x330(%rbp), %rdi
callq 0xbc60
movq %rax, -0x850(%rbp)
jmp 0xa092
movq -0x850(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
movl $0xa, %edx
callq 0xbdc0
movl %eax, -0x864(%rbp)
jmp 0xa0af
movq -0x858(%rbp), %rdi
movl -0x864(%rbp), %eax
testl %eax, %eax
setne %al
movzbl %al, %esi
callq 0x3e7b0
jmp 0xa0cb
leaq -0x678(%rbp), %rdi
callq 0xb900
leaq -0x688(%rbp), %rdi
movq %rdi, -0x880(%rbp)
leaq -0x340(%rbp), %rsi
callq 0xb850
movq -0x880(%rbp), %rdi
callq 0xb8e0
movq %rax, -0x878(%rbp)
movl -0x278(%rbp), %eax
incl %eax
movslq %eax, %rsi
leaq -0x330(%rbp), %rdi
callq 0xbc60
movq %rax, -0x870(%rbp)
jmp 0xa124
movq -0x870(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
movl $0xa, %edx
callq 0xbdc0
movl %eax, -0x884(%rbp)
jmp 0xa141
movq -0x878(%rbp), %rdi
movl -0x884(%rbp), %eax
testl %eax, %eax
setne %al
movzbl %al, %esi
callq 0x3e920
jmp 0xa15d
leaq -0x688(%rbp), %rdi
callq 0xb900
jmp 0xa2de
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x678(%rbp), %rdi
callq 0xb900
jmp 0xa382
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x688(%rbp), %rdi
callq 0xb900
jmp 0xa382
leaq -0x698(%rbp), %rdi
movq %rdi, -0x8a0(%rbp)
leaq -0x340(%rbp), %rsi
callq 0xb920
movq -0x8a0(%rbp), %rdi
callq 0xb9b0
movq %rax, -0x898(%rbp)
movslq -0x278(%rbp), %rsi
leaq -0x330(%rbp), %rdi
callq 0xbc60
movq %rax, -0x890(%rbp)
jmp 0xa1f1
movq -0x890(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
movl $0xa, %edx
callq 0xbdc0
movl %eax, -0x8a4(%rbp)
jmp 0xa20e
movl -0x8a4(%rbp), %esi
movq -0x898(%rbp), %rdi
callq 0x3db10
jmp 0xa222
leaq -0x698(%rbp), %rdi
callq 0xb9d0
jmp 0xa2de
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x698(%rbp), %rdi
callq 0xb9d0
jmp 0xa382
leaq -0x6a8(%rbp), %rdi
movq %rdi, -0x8c0(%rbp)
leaq -0x340(%rbp), %rsi
callq 0xb9f0
movq -0x8c0(%rbp), %rdi
callq 0xba80
movq %rax, -0x8b8(%rbp)
movslq -0x278(%rbp), %rsi
leaq -0x330(%rbp), %rdi
callq 0xbc60
movq %rax, -0x8b0(%rbp)
jmp 0xa299
movq -0x8b0(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
movl $0xa, %edx
callq 0xbdc0
movl %eax, -0x8c4(%rbp)
jmp 0xa2b6
movq -0x8b8(%rbp), %rdi
movl -0x8c4(%rbp), %eax
testl %eax, %eax
setne %al
movzbl %al, %esi
callq 0x3cdb0
jmp 0xa2d2
leaq -0x6a8(%rbp), %rdi
callq 0xbaa0
movq -0x6d0(%rbp), %rdi
callq 0xb090
movq %rax, -0x8d8(%rbp)
leaq -0x6b8(%rbp), %rdi
movq %rdi, -0x8d0(%rbp)
leaq -0x340(%rbp), %rsi
callq 0xb430
movq -0x8d8(%rbp), %rdi
movq -0x8d0(%rbp), %rsi
callq 0x1ab00
jmp 0xa320
leaq -0x6b8(%rbp), %rdi
callq 0xb460
movl -0x274(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x274(%rbp)
jmp 0xa371
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x6a8(%rbp), %rdi
callq 0xbaa0
jmp 0xa382
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x6b8(%rbp), %rdi
callq 0xb460
jmp 0xa382
leaq -0x4c8(%rbp), %rdi
callq 0x6280
jmp 0x9608
leaq -0x4c8(%rbp), %rdi
callq 0x6280
jmp 0xa4a3
leaq -0x270(%rbp), %rdi
callq 0x60b0
jmp 0xa3a1
movq 0x58c20(%rip), %rdi     # 0x62fc8
leaq 0x35f9d(%rip), %rsi     # 0x4034c
callq 0x6310
movq %rax, -0x8e0(%rbp)
jmp 0xa3bd
movq -0x8e0(%rbp), %rdi
movq 0x58bd5(%rip), %rsi     # 0x62fa0
callq 0x6360
jmp 0xa3d2
movq 0x58bef(%rip), %rdi     # 0x62fc8
leaq 0x35eec(%rip), %rsi     # 0x402cc
callq 0x6310
movq %rax, -0x8e8(%rbp)
jmp 0xa3ee
movq -0x8e8(%rbp), %rdi
movl -0x274(%rbp), %esi
callq 0x6580
movq %rax, -0x8f0(%rbp)
jmp 0xa409
movq -0x8f0(%rbp), %rdi
leaq 0x3600d(%rip), %rsi     # 0x40424
callq 0x6310
movq %rax, -0x8f8(%rbp)
jmp 0xa425
movq -0x8f8(%rbp), %rdi
movq 0x58b6d(%rip), %rsi     # 0x62fa0
callq 0x6360
jmp 0xa43a
leaq -0x340(%rbp), %rdi
callq 0xb460
leaq -0x330(%rbp), %rdi
callq 0xbe00
leaq -0x318(%rbp), %rdi
callq 0x6678
leaq -0x2f8(%rbp), %rdi
callq 0x6678
leaq -0x2d8(%rbp), %rdi
callq 0x6678
leaq -0x2b8(%rbp), %rdi
callq 0x6678
leaq -0x298(%rbp), %rdi
callq 0x6678
leaq -0x270(%rbp), %rdi
callq 0x60d0
addq $0x900, %rsp            # imm = 0x900
popq %rbp
retq
leaq -0x340(%rbp), %rdi
callq 0xb460
leaq -0x330(%rbp), %rdi
callq 0xbe00
leaq -0x318(%rbp), %rdi
callq 0x6678
leaq -0x2f8(%rbp), %rdi
callq 0x6678
leaq -0x2d8(%rbp), %rdi
callq 0x6678
leaq -0x2b8(%rbp), %rdi
callq 0x6678
leaq -0x298(%rbp), %rdi
callq 0x6678
leaq -0x270(%rbp), %rdi
callq 0x60d0
movq -0x38(%rbp), %rdi
callq 0x6590
nopl (%rax)