// File: Mirrvin[P]DragonsResurrectingInc/./specialists/BodySpecialist.cpp
// Function: BodySpecialist::handle(packet_t)
bool handle(packet_t packet) {        
        bool success = true;
        switch(packet.status.MPI_TAG){
            case NEED_BODY:
                success = this->handleNeedBody(packet); break;
            case NEED_BODY_ACK:
                success = this->handleNeedBodyAck(packet); break;
            case FINISH_NEED_BODY:
                success = this->handleFinishNeedBody(packet); break;
            case NEED_TAIL_POSITIVE:
                success = this->handleNeedTailPositive(packet); break;
            case NEED_TAIL_NEGATIVE:
                success = this->handleNeedTailNegative(packet); break;
            case AVENGERS_ASSEMBLE:
                success = this->handleAvengersAssemble(packet); break;
            case NEED_DESK_REQUEST:
                success = this->handleNeedDeskRequest(packet); break;
            case NEED_DESK_REPLY:
                success = this->handleNeedDeskReply(packet); break;
            case FREE_DESK:
                success = this->handleFreeDesk(packet); break;
            case DO_PAPERWORK:
                success = this->handleDoPaperwork(packet); break;
            case DONE_PAPERWORK:
                success = this->handleDonePaperwork(packet); break;
            case RESURRECTION_FINISHED:
                success = this->handleResurrectionFinished(packet); break;
            case NEED_BODY_POSITIVE:
                success = this->handleNeedBodyPositive(packet); break;
            case NEED_BODY_NEGATIVE:
                success = this->handleNeedBodyNegative(packet); break;
            case END:
                success = this->handleEnd(packet); break;
            default: 
                printf("%u: No handler for tag %d in BodySpecialist\n",Monitor::getLamport(), packet.status.MPI_TAG); break;                
        }
        return success;
    }

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x2b0, %rsp            # imm = 0x2B0
leaq 0x10(%rbp), %rax
movq %rax, -0x280(%rbp)
movq %rdi, -0x8(%rbp)
movq -0x8(%rbp), %rcx
movq %rcx, -0x278(%rbp)
movb $0x1, -0x9(%rbp)
movl 0x14(%rax), %eax
addl $-0x65, %eax
movl %eax, %ecx
movq %rcx, -0x270(%rbp)
subl $0x15, %eax
ja 0xe663
movq -0x270(%rbp), %rax
leaq 0x6e91(%rip), %rcx      # 0x15050
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq -0x280(%rbp), %rsi
leaq -0x38(%rbp), %rdi
movl $0x28, %edx
callq 0x84d0
movq -0x278(%rbp), %rdi
movq -0x18(%rbp), %rcx
movq %rsp, %rax
movq %rcx, 0x20(%rax)
movups -0x38(%rbp), %xmm0
movups -0x28(%rbp), %xmm1
movups %xmm1, 0x10(%rax)
movups %xmm0, (%rax)
callq 0xe970
andb $0x1, %al
movb %al, -0x9(%rbp)
jmp 0xe682
movq -0x280(%rbp), %rsi
leaq -0x60(%rbp), %rdi
movl $0x28, %edx
callq 0x84d0
movq -0x278(%rbp), %rdi
movq -0x40(%rbp), %rcx
movq %rsp, %rax
movq %rcx, 0x20(%rax)
movups -0x60(%rbp), %xmm0
movups -0x50(%rbp), %xmm1
movups %xmm1, 0x10(%rax)
movups %xmm0, (%rax)
callq 0xea80
andb $0x1, %al
movb %al, -0x9(%rbp)
jmp 0xe682
movq -0x280(%rbp), %rsi
leaq -0x88(%rbp), %rdi
movl $0x28, %edx
callq 0x84d0
movq -0x278(%rbp), %rdi
movq -0x68(%rbp), %rcx
movq %rsp, %rax
movq %rcx, 0x20(%rax)
movups -0x88(%rbp), %xmm0
movups -0x78(%rbp), %xmm1
movups %xmm1, 0x10(%rax)
movups %xmm0, (%rax)
callq 0xeac0
andb $0x1, %al
movb %al, -0x9(%rbp)
jmp 0xe682
movq -0x280(%rbp), %rsi
leaq -0xb0(%rbp), %rdi
movl $0x28, %edx
callq 0x84d0
movq -0x278(%rbp), %rdi
movq -0x90(%rbp), %rcx
movq %rsp, %rax
movq %rcx, 0x20(%rax)
movups -0xb0(%rbp), %xmm0
movups -0xa0(%rbp), %xmm1
movups %xmm1, 0x10(%rax)
movups %xmm0, (%rax)
callq 0xec00
andb $0x1, %al
movb %al, -0x9(%rbp)
jmp 0xe682
movq -0x280(%rbp), %rsi
leaq -0xd8(%rbp), %rdi
movl $0x28, %edx
callq 0x84d0
movq -0x278(%rbp), %rdi
movq -0xb8(%rbp), %rcx
movq %rsp, %rax
movq %rcx, 0x20(%rax)
movups -0xd8(%rbp), %xmm0
movups -0xc8(%rbp), %xmm1
movups %xmm1, 0x10(%rax)
movups %xmm0, (%rax)
callq 0xec70
andb $0x1, %al
movb %al, -0x9(%rbp)
jmp 0xe682
movq -0x280(%rbp), %rsi
leaq -0x100(%rbp), %rdi
movl $0x28, %edx
callq 0x84d0
movq -0x278(%rbp), %rdi
movq -0xe0(%rbp), %rcx
movq %rsp, %rax
movq %rcx, 0x20(%rax)
movups -0x100(%rbp), %xmm0
movups -0xf0(%rbp), %xmm1
movups %xmm1, 0x10(%rax)
movups %xmm0, (%rax)
callq 0xeca0
andb $0x1, %al
movb %al, -0x9(%rbp)
jmp 0xe682
movq -0x280(%rbp), %rsi
leaq -0x128(%rbp), %rdi
movl $0x28, %edx
callq 0x84d0
movq -0x278(%rbp), %rdi
movq -0x108(%rbp), %rcx
movq %rsp, %rax
movq %rcx, 0x20(%rax)
movups -0x128(%rbp), %xmm0
movups -0x118(%rbp), %xmm1
movups %xmm1, 0x10(%rax)
movups %xmm0, (%rax)
callq 0xed30
andb $0x1, %al
movb %al, -0x9(%rbp)
jmp 0xe682
movq -0x280(%rbp), %rsi
leaq -0x150(%rbp), %rdi
movl $0x28, %edx
callq 0x84d0
movq -0x278(%rbp), %rdi
movq -0x130(%rbp), %rcx
movq %rsp, %rax
movq %rcx, 0x20(%rax)
movups -0x150(%rbp), %xmm0
movups -0x140(%rbp), %xmm1
movups %xmm1, 0x10(%rax)
movups %xmm0, (%rax)
callq 0xed80
andb $0x1, %al
movb %al, -0x9(%rbp)
jmp 0xe682
movq -0x280(%rbp), %rsi
leaq -0x178(%rbp), %rdi
movl $0x28, %edx
callq 0x84d0
movq -0x278(%rbp), %rdi
movq -0x158(%rbp), %rcx
movq %rsp, %rax
movq %rcx, 0x20(%rax)
movups -0x178(%rbp), %xmm0
movups -0x168(%rbp), %xmm1
movups %xmm1, 0x10(%rax)
movups %xmm0, (%rax)
callq 0xedc0
andb $0x1, %al
movb %al, -0x9(%rbp)
jmp 0xe682
movq -0x280(%rbp), %rsi
leaq -0x1a0(%rbp), %rdi
movl $0x28, %edx
callq 0x84d0
movq -0x278(%rbp), %rdi
movq -0x180(%rbp), %rcx
movq %rsp, %rax
movq %rcx, 0x20(%rax)
movups -0x1a0(%rbp), %xmm0
movups -0x190(%rbp), %xmm1
movups %xmm1, 0x10(%rax)
movups %xmm0, (%rax)
callq 0xee00
andb $0x1, %al
movb %al, -0x9(%rbp)
jmp 0xe682
movq -0x280(%rbp), %rsi
leaq -0x1c8(%rbp), %rdi
movl $0x28, %edx
callq 0x84d0
movq -0x278(%rbp), %rdi
movq -0x1a8(%rbp), %rcx
movq %rsp, %rax
movq %rcx, 0x20(%rax)
movups -0x1c8(%rbp), %xmm0
movups -0x1b8(%rbp), %xmm1
movups %xmm1, 0x10(%rax)
movups %xmm0, (%rax)
callq 0xee80
andb $0x1, %al
movb %al, -0x9(%rbp)
jmp 0xe682
movq -0x280(%rbp), %rsi
leaq -0x1f0(%rbp), %rdi
movl $0x28, %edx
callq 0x84d0
movq -0x278(%rbp), %rdi
movq -0x1d0(%rbp), %rcx
movq %rsp, %rax
movq %rcx, 0x20(%rax)
movups -0x1f0(%rbp), %xmm0
movups -0x1e0(%rbp), %xmm1
movups %xmm1, 0x10(%rax)
movups %xmm0, (%rax)
callq 0xeeb0
andb $0x1, %al
movb %al, -0x9(%rbp)
jmp 0xe682
movq -0x280(%rbp), %rsi
leaq -0x218(%rbp), %rdi
movl $0x28, %edx
callq 0x84d0
movq -0x278(%rbp), %rdi
movq -0x1f8(%rbp), %rcx
movq %rsp, %rax
movq %rcx, 0x20(%rax)
movups -0x218(%rbp), %xmm0
movups -0x208(%rbp), %xmm1
movups %xmm1, 0x10(%rax)
movups %xmm0, (%rax)
callq 0xeee0
andb $0x1, %al
movb %al, -0x9(%rbp)
jmp 0xe682
movq -0x280(%rbp), %rsi
leaq -0x240(%rbp), %rdi
movl $0x28, %edx
callq 0x84d0
movq -0x278(%rbp), %rdi
movq -0x220(%rbp), %rcx
movq %rsp, %rax
movq %rcx, 0x20(%rax)
movups -0x240(%rbp), %xmm0
movups -0x230(%rbp), %xmm1
movups %xmm1, 0x10(%rax)
movups %xmm0, (%rax)
callq 0xef30
andb $0x1, %al
movb %al, -0x9(%rbp)
jmp 0xe682
movq -0x280(%rbp), %rsi
leaq -0x268(%rbp), %rdi
movl $0x28, %edx
callq 0x84d0
movq -0x278(%rbp), %rdi
movq -0x248(%rbp), %rcx
movq %rsp, %rax
movq %rcx, 0x20(%rax)
movups -0x268(%rbp), %xmm0
movups -0x258(%rbp), %xmm1
movups %xmm1, 0x10(%rax)
movups %xmm0, (%rax)
callq 0x14270
andb $0x1, %al
movb %al, -0x9(%rbp)
jmp 0xe682
callq 0x12e00
movl %eax, %esi
movq -0x280(%rbp), %rax
movl 0x14(%rax), %edx
leaq 0x6ba5(%rip), %rdi      # 0x15220
movb $0x0, %al
callq 0x8040
movb -0x9(%rbp), %al
andb $0x1, %al
addq $0x2b0, %rsp            # imm = 0x2B0
popq %rbp
retq