// File: nurseiit[P]cpp-server/./include/asio/detail/reactive_socket_recv_op.hpp
// Function: asio::detail::reactive_socket_recv_op<asio::mutable_buffers_1, asio::detail::read_until_delim_op_v1<asio::basic_stream_socket<asio::ip::tcp, asio::executor>, asio::basic_streambuf_ref<std::allocator<char>>, Session::read_first_line(std::shared_ptr<Session>)::'lambda'(std::error_code const&, unsigned long)>, asio::detail::io_object_executor<asio::executor>>::do_complete(void*, asio::detail::scheduler_operation*, std::error_code const&, unsigned long)
static void do_complete(void* owner, operation* base,
      const asio::error_code& /*ec*/,
      std::size_t /*bytes_transferred*/)
  {
    // Take ownership of the handler object.
    reactive_socket_recv_op* o(static_cast<reactive_socket_recv_op*>(base));
    ptr p = { asio::detail::addressof(o->handler_), o, o };
    handler_work<Handler, IoExecutor> w(o->handler_, o->io_executor_);

    ASIO_HANDLER_COMPLETION((*o));

    // Make a copy of the handler so that the memory can be deallocated before
    // the upcall is made. Even if we're not about to make an upcall, a
    // sub-object of the handler may be the true owner of the memory associated
    // with the handler. Consequently, a local copy of the handler is required
    // to ensure that any owning sub-object remains valid until after we have
    // deallocated the memory here.
    detail::binder2<Handler, asio::error_code, std::size_t>
      handler(o->handler_, o->ec_, o->bytes_transferred_);
    p.h = asio::detail::addressof(handler.handler_);
    p.reset();

    // Make the upcall if required.
    if (owner)
    {
      fenced_block b(fenced_block::half);
      ASIO_HANDLER_INVOCATION_BEGIN((handler.arg1_, handler.arg2_));
      w.complete(handler, handler.handler_);
      ASIO_HANDLER_INVOCATION_END;
    }
  }

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xc0, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq %rcx, -0x20(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x28(%rbp)
movq -0x28(%rbp), %rax
addq $0x58, %rax
movq %rax, -0x40(%rbp)
movq -0x28(%rbp), %rax
movq %rax, -0x38(%rbp)
movq -0x28(%rbp), %rax
movq %rax, -0x30(%rbp)
movq -0x28(%rbp), %rdx
movq %rdx, %rsi
addq $0x58, %rsi
addq $0x88, %rdx
leaq -0x60(%rbp), %rdi
callq 0x16190
movq -0x28(%rbp), %rcx
movq %rcx, %rsi
addq $0x58, %rsi
movq %rcx, %rdx
addq $0x18, %rdx
addq $0x28, %rcx
leaq -0xa8(%rbp), %rdi
callq 0x161e0
jmp 0x15f4e
leaq -0xa8(%rbp), %rax
movq %rax, -0x40(%rbp)
leaq -0x40(%rbp), %rdi
callq 0x16240
jmp 0x15f64
cmpq $0x0, -0x8(%rbp)
je 0x15fe6
leaq -0xb5(%rbp), %rdi
xorl %esi, %esi
callq 0x11860
jmp 0x15f7b
leaq -0x60(%rbp), %rdi
leaq -0xa8(%rbp), %rdx
movq %rdx, %rsi
callq 0x162e0
jmp 0x15f90
leaq -0xb5(%rbp), %rdi
callq 0x11240
jmp 0x15fe6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
jmp 0x16019
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
jmp 0x1600d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
leaq -0xb5(%rbp), %rdi
callq 0x11240
jmp 0x1600d
leaq -0xa8(%rbp), %rdi
callq 0x16330
leaq -0x60(%rbp), %rdi
callq 0x16350
leaq -0x40(%rbp), %rdi
callq 0x15c80
addq $0xc0, %rsp
popq %rbp
retq
leaq -0xa8(%rbp), %rdi
callq 0x16330
leaq -0x60(%rbp), %rdi
callq 0x16350
leaq -0x40(%rbp), %rdi
callq 0x15c80
movq -0xb0(%rbp), %rdi
callq 0x6700
nopw (%rax,%rax)