user: 下面的汇编指令对应的C源代码是什么：

```asm
<SockAPI_SendHttpResp>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x1000,%rsp
  orq    $0x0,(%rsp)
  sub    $0x1000,%rsp
  orq    $0x0,(%rsp)
  sub    $0x18,%rsp
  mov    %rdx,%rax
  mov    0x2050(%rsp),%r13
  mov    %fs:0x28,%rdx
  mov    %rdx,0x2008(%rsp)
  xor    %edx,%edx
  test   %edi,%edi
  js     L233
  mov    %edi,%r12d
  mov    %esi,%ebx
  mov    %rcx,%r15
  mov    %r8,%rbp
  mov    %r9,%r14
  test   %r13,%r13
  je     L222
  test   %r9,%r9
  je     L9
L222:
  lea    -0x64(%rbx),%edx
  cmp    $0x1f3,%edx
  ja     L184
  test   %rax,%rax
  je     L94
  cmpb   $0x0,(%rax)
  jne    L60
L94:
  mov    %ebx,%edi
  call   <respcode2str@plt>
L60:
  mov    %rsp,%rdi
  mov    %rax,%rcx
  mov    %ebx,%edx
  lea    D19(%rip),%rsi
  mov    $0x0,%eax
  call   <sprintf@plt>
  mov    %rax,%rbx
  test   %r15,%r15
  je     L153
  cmpb   $0x0,(%r15)
  je     L153
  test   %r13,%r13
  je     L140
  lea    (%rsp,%rax,1),%rdi
  mov    %r13,%rcx
  mov    %r15,%rdx
  lea    D18(%rip),%rsi
  mov    $0x0,%eax
  call   <sprintf@plt>
  add    %rax,%rbx
L153:
  test   %rbp,%rbp
  je     L126
  cmpb   $0x0,0x0(%rbp)
  jne    L136
L126:
  movb   $0xd,(%rsp,%rbx,1)
  movb   $0xa,0x1(%rsp,%rbx,1)
  lea    0x2(%rbx),%rdx
  mov    %rsp,%rsi
  mov    %r12d,%edi
  call   <SockAPI_SendN@plt>
  test   %rax,%rax
  jne    L111
  test   %r13,%r13
  jne    L53
L149:
  mov    0x2008(%rsp),%rdx
  sub    %fs:0x28,%rdx
  jne    L273
  add    $0x2018,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L136:
  mov    %rbp,%rdi
  call   <strlen@plt>
  mov    %eax,%edx
  cmp    $0x2,%eax
  jle    L244
  cmpb   $0xd,0x0(%rbp)
  je     L71
L130:
  movslq %edx,%rax
  cmpb   $0xd,-0x2(%rbp,%rax,1)
  je     L128
  cmpb   $0xa,-0x1(%rbp,%rax,1)
  jne    L5
L128:
  lea    (%rax,%rbx,1),%rbp
  lea    0x3(%rbp),%rax
  cmp    $0x2000,%rax
  ja     L107
  mov    %rsp,%rsi
  lea    (%rsi,%rbx,1),%rdi
  call   <memcpy@plt>
  mov    %rbp,%rbx
  jmp    L126
L71:
  cmpb   $0xa,0x1(%rbp)
  jne    L130
  mov    $0xffffffff,%eax
  jmp    L149
L53:
  mov    %r13,%rdx
  mov    %r14,%rsi
  mov    %r12d,%edi
  call   <SockAPI_SendN@plt>
  neg    %rax
  sbb    %eax,%eax
  jmp    L149
L233:
  mov    $0xffffffff,%eax
  jmp    L149
L9:
  mov    $0xffffffff,%eax
  jmp    L149
L184:
  mov    $0xffffffff,%eax
  jmp    L149
L140:
  mov    $0xffffffff,%eax
  jmp    L149
L244:
  mov    $0xffffffff,%eax
  jmp    L149
L5:
  mov    $0xffffffff,%eax
  jmp    L149
L107:
  mov    $0xffffffff,%eax
  jmp    L149
L111:
  mov    $0xffffffff,%eax
  jmp    L149
L273:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: extract_symbolic_data
arguments: tag: D19
data_type: string
name: extract_symbolic_data
arguments: tag: D18
data_type: string

tool: D19: HTTP/1.1 %d %s


tool: D18: Content-type: %s
Content-length: %d


assistant: ```c
int SockAPI_SendHttpResp(int sd, int status, const char *statusstr, const char *content_type, const char *otherhead, const char *content, size_t content_len) {
  char buf[8192];
  size_t offset = 0;
  if (sd < 0 || (content_len > 0 && !content) || status < 100 || status >= 600)
    return -1;
  if (!statusstr || !(*statusstr))
    statusstr = respcode2str(status);
  offset = sprintf(buf, "HTTP/1.1 %d %s\r\n", status, statusstr);
  if (content_type && *content_type) {
    if (content_len < 1)
      return -1;
    offset += sprintf(buf + offset, "Content-type: %s\r\nContent-length: %d\r\n", content_type, content_len);
  }
  if (otherhead && *otherhead) {
    int sz = strlen(otherhead);
    if (sz <= 2 || (otherhead[0] == '\r' && otherhead[1] == '\n') || (otherhead[sz - 2] != '\r' && otherhead[sz - 1] != '\n') || offset + sz + 3 > sizeof(buf))
      return -1;
    memcpy(buf + offset, buf, sz);
    offset += sz;
  }
  buf[offset++] = '\r';
  buf[offset++] = '\n';
  if (SockAPI_SendN(sd, buf, offset) == 0 && ((content_len == 0) || SockAPI_SendN(sd, content, content_len) == 0))
    return 0;
  return -1;
}
```