// File: frolosofsky[P]pbft/./pbft_types.h
// Function: std::ostream& operator<<<std::ostream>(std::ostream&, Message const&)
Stream &operator<<(Stream &os, Message const &m) {
    switch(m.type) {
    case Message::Type::Write:
        return os << "Write{" << m.data.write << "}";
    case Message::Type::Read:
        return os << "Read{" << m.data.read << "}";
    case Message::Type::WriteAck:
        return os << "WriteAck{" << m.data.write_ack << "}";
    case Message::Type::ReadAck:
        return os << "ReadAck{" << m.data.read_ack << "}";
    case Message::Type::Response:
        return os << "Response{" << m.data.response << "}";
    case Message::Type::PrePrepare:
        return os << "PrePrepare{" << m.data.preprepare << "}";
    case Message::Type::Prepare:
        return os << "Prepare{" << m.data.prepare << "}";
    case Message::Type::Commit:
        return os << "Commit{" << m.data.commit << "}";
    }
    return os; // happy gcc
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x20, %rsp
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq -0x18(%rbp), %rax
movl (%rax), %eax
movq %rax, -0x20(%rbp)
subq $0x7, %rax
ja 0x85cf
movq -0x20(%rbp), %rax
leaq 0x6e55(%rip), %rcx      # 0xf264
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq -0x10(%rbp), %rdi
leaq 0x7031(%rip), %rsi      # 0xf454
callq 0x2110
movq %rax, %rdi
movq -0x18(%rbp), %rsi
addq $0x8, %rsi
callq 0x89e0
movq %rax, %rdi
leaq 0x7019(%rip), %rsi      # 0xf45b
callq 0x2110
movq %rax, -0x8(%rbp)
jmp 0x85d7
movq -0x10(%rbp), %rdi
leaq 0x7002(%rip), %rsi      # 0xf45d
callq 0x2110
movq %rax, %rdi
movq -0x18(%rbp), %rsi
addq $0x8, %rsi
callq 0x8a20
movq %rax, %rdi
leaq 0x6fe1(%rip), %rsi      # 0xf45b
callq 0x2110
movq %rax, -0x8(%rbp)
jmp 0x85d7
movq -0x10(%rbp), %rdi
leaq 0x6fd0(%rip), %rsi      # 0xf463
callq 0x2110
movq %rax, %rdi
movq -0x18(%rbp), %rsi
addq $0x8, %rsi
callq 0x8a60
movq %rax, %rdi
leaq 0x6fa9(%rip), %rsi      # 0xf45b
callq 0x2110
movq %rax, -0x8(%rbp)
jmp 0x85d7
movq -0x10(%rbp), %rdi
leaq 0x6fa2(%rip), %rsi      # 0xf46d
callq 0x2110
movq %rax, %rdi
movq -0x18(%rbp), %rsi
addq $0x8, %rsi
callq 0x8ac0
movq %rax, %rdi
leaq 0x6f71(%rip), %rsi      # 0xf45b
callq 0x2110
movq %rax, -0x8(%rbp)
jmp 0x85d7
movq -0x10(%rbp), %rdi
leaq 0x6f73(%rip), %rsi      # 0xf476
callq 0x2110
movq %rax, %rdi
movq -0x18(%rbp), %rsi
addq $0x8, %rsi
callq 0x8b20
movq %rax, %rdi
leaq 0x6f39(%rip), %rsi      # 0xf45b
callq 0x2110
movq %rax, -0x8(%rbp)
jmp 0x85d7
movq -0x10(%rbp), %rdi
leaq 0x6f45(%rip), %rsi      # 0xf480
callq 0x2110
movq %rax, %rdi
movq -0x18(%rbp), %rsi
addq $0x8, %rsi
callq 0x8b90
movq %rax, %rdi
leaq 0x6f01(%rip), %rsi      # 0xf45b
callq 0x2110
movq %rax, -0x8(%rbp)
jmp 0x85d7
movq -0x10(%rbp), %rdi
leaq 0x6f13(%rip), %rsi      # 0xf483
callq 0x2110
movq %rax, %rdi
movq -0x18(%rbp), %rsi
addq $0x8, %rsi
callq 0x8b90
movq %rax, %rdi
leaq 0x6ecc(%rip), %rsi      # 0xf45b
callq 0x2110
movq %rax, -0x8(%rbp)
jmp 0x85d7
movq -0x10(%rbp), %rdi
leaq 0x6ee7(%rip), %rsi      # 0xf48c
callq 0x2110
movq %rax, %rdi
movq -0x18(%rbp), %rsi
addq $0x8, %rsi
callq 0x8b90
movq %rax, %rdi
leaq 0x6e97(%rip), %rsi      # 0xf45b
callq 0x2110
movq %rax, -0x8(%rbp)
jmp 0x85d7
movq -0x10(%rbp), %rax
movq %rax, -0x8(%rbp)
movq -0x8(%rbp), %rax
addq $0x20, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)
nopl (%rax,%rax)