// File: /workspace/github_cpp_makefile_star2_O2/brashi[P]PetFera/src/animal/animal.cpp
// Function: Animal::printOutDetails(std::shared_ptr<Animal>)
void Animal::printOutDetails(shared_ptr<Animal> animal) {
    shared_ptr<Veterinario> vet = animal->getVeterinario();
    shared_ptr<Tratador> trt = animal->getTratador();
    string classe = Animal::getClasse(animal);
    string classificacao = Animal::getClassificacao(animal);

    cout << endl << "=-=-=-=-=- Visualização de animal -=-=-=-=-=-" << endl;
    cout << "Nome: " << animal->nome << endl;
    cout << "Espécie: " << animal->getEspecie() << endl;
    cout << "Perigoso: " << (animal->getPerigoso() ? "Sim" : "Não") << endl;
    cout << "Ameaçado por: " << animal->getAmeacadoPor() << endl;
    cout << "Veterinário: " << vet->getNome() << endl;
    cout << "  └ CRMV: " << vet->getCRMV() << endl;
    cout << "Tratador: " << trt->getNome() << endl;
    int un = trt->getUniforme();
    cout << "  └ N. Segurança: " << (un == 0? "Verde" : (un == 1 ? "Azul" : "Vermelho")) << endl;
    cout << "Categoria: " << classificacao << endl;
    if(classificacao == "Silvestre Exótico")
        cout << "  └ Habitat: " << dynamic_pointer_cast<Exotico>(animal)->getLocal() << endl;
    else if(classificacao == "Silvestre Nativo") {
        shared_ptr<Nativo> classificacao = dynamic_pointer_cast<Nativo>(animal);
        cout << "  ├ Lic. Transporte IBAMA: " << classificacao->getLicenca() << endl;
        cout << "  └ Região: " << classificacao->getRegiao() << endl;
    } else 
        cout << "  └ Adestrado: " << (dynamic_pointer_cast<Domestico>(animal)->getAdestrado() ? "Sim" : "Não") << endl;
    cout << "Classe: " << classe << endl;
    if(classe == "Ave")
        cout << "  └ Voa: " << (dynamic_pointer_cast<Ave>(animal)->getVoa() ? "Sim" : "Não") << endl;
    else if(classe == "Anfíbio") {
        shared_ptr<Anfibio> classe = dynamic_pointer_cast<Anfibio>(animal);
        cout << "  ├ Cauda: " << (classe->getCauda() ? "Sim" : "Não") << endl;
        cout << "  └ Pata: " << (classe->getPata() ? "Sim" : "Não") << endl;
    } else if(classe == "Réptil") {
        int pele = dynamic_pointer_cast<Reptil>(animal)->getPele();
        cout << "  └ Pele: " << (pele == 0? "Escama" : (pele == 1 ? "Placa" : "Carapaça")) << endl;
    } else
        cout << "  └ Gestação: " << (dynamic_pointer_cast<Mamifero>(animal)->getGestacao() ? "Sim" : "Não") << endl;
    cout << endl << "-=-=-=-=-=-=-=-=-=-= Fim =-=-=-=-=-=-=-=-=-=-" << endl << endl;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0xb8, %rsp
movq %rdi, %rbx
movq (%rdi), %rsi
addq $0x68, %rsi
leaq 0x48(%rsp), %rdi
callq 0x85b8
movq (%rbx), %rsi
addq $0x78, %rsi
leaq 0x38(%rsp), %rdi
callq 0x85cc
leaq 0xa8(%rsp), %r14
movq %r14, %rdi
movq %rbx, %rsi
callq 0x84e2
leaq 0x58(%rsp), %rdi
movq %r14, %rsi
xorl %edx, %edx
callq 0x111ac
leaq 0xb0(%rsp), %rdi
callq 0x8466
leaq 0x78(%rsp), %r14
movq %r14, %rdi
movq %rbx, %rsi
callq 0x84e2
leaq 0x88(%rsp), %rdi
movq %r14, %rsi
xorl %edx, %edx
callq 0x10f5a
leaq 0x80(%rsp), %rdi
callq 0x8466
movq 0x14a9b(%rip), %rdi     # 0x25fc8
callq 0x5160
leaq 0x7a9f(%rip), %rsi      # 0x18fd8
movq %rax, %rdi
callq 0x5270
movq %rax, %rdi
callq 0x5160
movq 0x14a78(%rip), %rdi     # 0x25fc8
leaq 0x78a2(%rip), %rsi      # 0x18df9
callq 0x5270
movq (%rbx), %rsi
addq $0x8, %rsi
movq %rax, %rdi
callq 0x5260
movq %rax, %rdi
callq 0x5160
movq 0x14a4e(%rip), %rdi     # 0x25fc8
leaq 0x7936(%rip), %rsi      # 0x18eb7
callq 0x5270
movq %rax, %r14
movq (%rbx), %rsi
addq $0x28, %rsi
leaq 0x8(%rsp), %rdi
callq 0x5340
leaq 0x8(%rsp), %rsi
movq %r14, %rdi
callq 0x5260
movq %rax, %rdi
callq 0x5160
leaq 0x8(%rsp), %rdi
callq 0x54c8
movq 0x14a08(%rip), %rdi     # 0x25fc8
leaq 0x7a41(%rip), %rsi      # 0x19008
callq 0x5270
movq (%rbx), %rcx
leaq 0x7a3d(%rip), %r13      # 0x19013
cmpb $0x0, 0x88(%rcx)
leaq 0x7a33(%rip), %r14      # 0x19017
movq %r14, %rsi
cmovneq %r13, %rsi
movq %rax, %rdi
callq 0x5270
movq %rax, %rdi
callq 0x5160
movq 0x149c6(%rip), %rdi     # 0x25fc8
leaq 0x7a13(%rip), %rsi      # 0x1901c
callq 0x5270
movq %rax, %r15
movq (%rbx), %rsi
addq $0x48, %rsi
leaq 0x8(%rsp), %rdi
callq 0x5340
leaq 0x8(%rsp), %rsi
movq %r15, %rdi
callq 0x5260
movq %rax, %rdi
callq 0x5160
leaq 0x8(%rsp), %rdi
callq 0x54c8
movq 0x14980(%rip), %rdi     # 0x25fc8
leaq 0x79dd(%rip), %rsi      # 0x1902c
callq 0x5270
movq %rax, %r15
movq 0x48(%rsp), %rsi
leaq 0x8(%rsp), %rdi
callq 0xfaa2
leaq 0x8(%rsp), %rsi
movq %r15, %rdi
callq 0x5260
movq %rax, %rdi
callq 0x5160
leaq 0x8(%rsp), %rdi
callq 0x54c8
movq 0x1493c(%rip), %rdi     # 0x25fc8
leaq 0x79a8(%rip), %rsi      # 0x1903b
callq 0x5270
movq %rax, %r15
movq 0x48(%rsp), %rsi
leaq 0x8(%rsp), %rdi
callq 0x104ee
leaq 0x8(%rsp), %rsi
movq %r15, %rdi
callq 0x5260
movq %rax, %rdi
callq 0x5160
leaq 0x8(%rsp), %rdi
callq 0x54c8
movq 0x148f8(%rip), %rdi     # 0x25fc8
leaq 0x7971(%rip), %rsi      # 0x19048
callq 0x5270
movq %rax, %r15
movq 0x38(%rsp), %rsi
leaq 0x8(%rsp), %rdi
callq 0xfaa2
leaq 0x8(%rsp), %rsi
movq %r15, %rdi
callq 0x5260
movq %rax, %rdi
callq 0x5160
leaq 0x8(%rsp), %rdi
callq 0x54c8
movq 0x38(%rsp), %rdi
callq 0xfeea
movl %eax, %ebp
movq 0x148a8(%rip), %rdi     # 0x25fc8
leaq 0x792c(%rip), %rsi      # 0x19053
callq 0x5270
cmpl $0x1, %ebp
leaq 0x775b(%rip), %rcx      # 0x18e91
leaq 0x7759(%rip), %rdx      # 0x18e96
cmoveq %rcx, %rdx
testl %ebp, %ebp
leaq 0x7741(%rip), %rsi      # 0x18e8b
cmovneq %rdx, %rsi
movq %rax, %rdi
callq 0x5270
movq %rax, %rdi
callq 0x5160
movq 0x14863(%rip), %rdi     # 0x25fc8
leaq 0x78fd(%rip), %rsi      # 0x19069
callq 0x5270
leaq 0x88(%rsp), %rsi
movq %rax, %rdi
callq 0x5260
movq %rax, %rdi
callq 0x5160
leaq 0x776d(%rip), %rsi      # 0x18efd
leaq 0x88(%rsp), %rdi
callq 0x8074
testb %al, %al
je 0x117ef
movq 0x14820(%rip), %rdi     # 0x25fc8
leaq 0x78c6(%rip), %rsi      # 0x19075
callq 0x5270
movq %rax, %r15
leaq 0x28(%rsp), %r12
movq %r12, %rdi
movq %rbx, %rsi
callq 0x7e1d
movq (%r12), %rsi
leaq 0x8(%rsp), %rdi
callq 0x12076
leaq 0x8(%rsp), %rsi
movq %r15, %rdi
callq 0x5260
movq %rax, %rdi
callq 0x5160
jmp 0x11896
leaq 0x771a(%rip), %rsi      # 0x18f10
leaq 0x88(%rsp), %rdi
callq 0x8074
testb %al, %al
je 0x118a7
leaq 0x28(%rsp), %rdi
movq %rbx, %rsi
callq 0x7e73
movq 0x147a9(%rip), %rdi     # 0x25fc8
leaq 0x785f(%rip), %rsi      # 0x19085
callq 0x5270
movq %rax, %r15
movq 0x28(%rsp), %rsi
leaq 0x8(%rsp), %rdi
callq 0x1497c
leaq 0x8(%rsp), %rsi
movq %r15, %rdi
callq 0x5260
movq %rax, %rdi
callq 0x5160
leaq 0x8(%rsp), %rdi
callq 0x54c8
movq 0x14765(%rip), %rdi     # 0x25fc8
leaq 0x7839(%rip), %rsi      # 0x190a3
callq 0x5270
movq %rax, %r15
movq 0x28(%rsp), %rsi
leaq 0x8(%rsp), %rdi
callq 0x14a6a
leaq 0x8(%rsp), %rsi
movq %r15, %rdi
callq 0x5260
movq %rax, %rdi
callq 0x5160
leaq 0x8(%rsp), %rdi
callq 0x54c8
leaq 0x30(%rsp), %rdi
jmp 0x118f4
movq 0x1471a(%rip), %rdi     # 0x25fc8
leaq 0x77fe(%rip), %rsi      # 0x190b3
callq 0x5270
movq %rax, %r15
leaq 0x8(%rsp), %r12
movq %r12, %rdi
movq %rbx, %rsi
callq 0x7dc7
movq (%r12), %rdi
callq 0x11fb0
testb %al, %al
movq %r14, %rsi
cmovneq %r13, %rsi
movq %r15, %rdi
callq 0x5270
movq %rax, %rdi
callq 0x5160
leaq 0x10(%rsp), %rdi
callq 0x8466
movq 0x146c8(%rip), %rdi     # 0x25fc8
leaq 0x77be(%rip), %rsi      # 0x190c5
callq 0x5270
leaq 0x58(%rsp), %rsi
movq %rax, %rdi
callq 0x5260
movq %rax, %rdi
callq 0x5160
leaq 0x7651(%rip), %rsi      # 0x18f79
leaq 0x58(%rsp), %rdi
callq 0x8074
testb %al, %al
je 0x11983
movq 0x1468b(%rip), %rdi     # 0x25fc8
leaq 0x778a(%rip), %rsi      # 0x190ce
callq 0x5270
movq %rax, %r15
leaq 0x8(%rsp), %r12
movq %r12, %rdi
movq %rbx, %rsi
callq 0x7ec9
movq (%r12), %rdi
callq 0x14c94
testb %al, %al
cmovneq %r13, %r14
movq %r15, %rdi
movq %r14, %rsi
callq 0x5270
movq %rax, %rdi
callq 0x5160
jmp 0x11ae8
leaq 0x75f3(%rip), %rsi      # 0x18f7d
leaq 0x58(%rsp), %rdi
callq 0x8074
testb %al, %al
je 0x11a20
leaq 0x8(%rsp), %rdi
movq %rbx, %rsi
callq 0x7f1e
movq 0x14618(%rip), %rdi     # 0x25fc8
leaq 0x7723(%rip), %rsi      # 0x190da
callq 0x5270
movq %rax, %rbx
movq 0x8(%rsp), %rdi
callq 0x163b0
testb %al, %al
movq %r14, %rsi
cmovneq %r13, %rsi
movq %rbx, %rdi
callq 0x5270
movq %rax, %rdi
callq 0x5160
movq 0x145df(%rip), %rdi     # 0x25fc8
leaq 0x76f8(%rip), %rsi      # 0x190e8
callq 0x5270
movq %rax, %rbx
movq 0x8(%rsp), %rdi
callq 0x16454
testb %al, %al
cmovneq %r13, %r14
movq %rbx, %rdi
movq %r14, %rsi
callq 0x5270
movq %rax, %rdi
callq 0x5160
jmp 0x11ae8
leaq 0x6c8b(%rip), %rsi      # 0x186b2
leaq 0x58(%rsp), %rdi
callq 0x8074
testb %al, %al
je 0x11aa0
leaq 0x8(%rsp), %r14
movq %r14, %rdi
movq %rbx, %rsi
callq 0x7f73
movq (%r14), %rdi
callq 0x15bba
movl %eax, %ebx
leaq 0x10(%rsp), %rdi
callq 0x8466
movq 0x14568(%rip), %rdi     # 0x25fc8
leaq 0x768e(%rip), %rsi      # 0x190f5
callq 0x5270
cmpl $0x1, %ebx
leaq 0x7693(%rip), %rcx      # 0x19109
leaq 0x7692(%rip), %rdx      # 0x1910f
cmoveq %rcx, %rdx
testl %ebx, %ebx
leaq 0x7678(%rip), %rsi      # 0x19102
cmovneq %rdx, %rsi
movq %rax, %rdi
callq 0x5270
movq %rax, %rdi
callq 0x5160
jmp 0x11af2
movq 0x14521(%rip), %rdi     # 0x25fc8
leaq 0x766b(%rip), %rsi      # 0x19119
callq 0x5270
movq %rax, %r15
leaq 0x8(%rsp), %r12
movq %r12, %rdi
movq %rbx, %rsi
callq 0x7fc8
movq (%r12), %rdi
callq 0x15428
testb %al, %al
cmovneq %r13, %r14
movq %r15, %rdi
movq %r14, %rsi
callq 0x5270
movq %rax, %rdi
callq 0x5160
leaq 0x10(%rsp), %rdi
callq 0x8466
movq 0x144cf(%rip), %rdi     # 0x25fc8
callq 0x5160
leaq 0x7627(%rip), %rsi      # 0x1912c
movq %rax, %rdi
callq 0x5270
movq %rax, %rdi
callq 0x5160
movq %rax, %rdi
callq 0x5160
leaq 0x88(%rsp), %rdi
callq 0x54c8
leaq 0x58(%rsp), %rdi
callq 0x54c8
leaq 0x40(%rsp), %rdi
callq 0x8466
leaq 0x50(%rsp), %rdi
callq 0x8466
addq $0xb8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0x11bb5
jmp 0x11b6a
jmp 0x11b6a
jmp 0x11bb5
jmp 0x11bdd
jmp 0x11b71
jmp 0x11b71
jmp 0x11b6a
movq %rax, %rbx
jmp 0x11b7e
jmp 0x11bb5
movq %rax, %rbx
leaq 0x8(%rsp), %rdi
callq 0x54c8
leaq 0x30(%rsp), %rdi
jmp 0x11bbd
jmp 0x11bdd
jmp 0x11bdd
jmp 0x11bdd
jmp 0x11bdd
jmp 0x11bdd
movq %rax, %rbx
leaq 0x80(%rsp), %rdi
callq 0x8466
jmp 0x11bed
movq %rax, %rbx
leaq 0xb0(%rsp), %rdi
callq 0x8466
jmp 0x11bf7
jmp 0x11bb5
movq %rax, %rbx
leaq 0x10(%rsp), %rdi
callq 0x8466
jmp 0x11be0
jmp 0x11bcc
jmp 0x11bcc
jmp 0x11bcc
jmp 0x11bcc
movq %rax, %rbx
leaq 0x8(%rsp), %rdi
callq 0x54c8
jmp 0x11be0
jmp 0x11bdd
movq %rax, %rbx
leaq 0x88(%rsp), %rdi
callq 0x54c8
leaq 0x58(%rsp), %rdi
callq 0x54c8
leaq 0x40(%rsp), %rdi
callq 0x8466
leaq 0x50(%rsp), %rdi
callq 0x8466
movq %rbx, %rdi
callq 0x5430
nop