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

```asm
<login_page>:
  endbr64
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x78,%rsp
  mov    %rdi,%rbx
  mov    %fs:0x28,%rax
  mov    %rax,0x68(%rsp)
  xor    %eax,%eax
  lea    D98(%rip),%rsi
  call   <mg_get_var@plt>
  mov    %rax,%rbp
  lea    D58(%rip),%rsi
  mov    %rbx,%rdi
  call   <mg_get_var@plt>
  mov    %rax,%r12
  lea    D30(%rip),%rsi
  mov    %rbx,%rdi
  call   <mg_get_header@plt>
  test   %rbp,%rbp
  je     L15
  mov    %rax,%r13
  test   %r12,%r12
  je     L15
  lea    D45(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L106
L17:
  lea    D75(%rip),%rsi
  mov    %rbx,%rdi
  mov    $0x0,%eax
  call   <mg_printf@plt>
L20:
  mov    %rbp,%rdi
  call   <mg_free@plt>
L99:
  test   %r12,%r12
  je     L80
  mov    %r12,%rdi
  call   <mg_free@plt>
L80:
  mov    0x68(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L65
  add    $0x78,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  ret
L106:
  lea    D45(%rip),%rsi
  mov    %r12,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L17
  test   %r13,%r13
  je     L23
  mov    %rsp,%rdx
  lea    D66(%rip),%rsi
  mov    %r13,%rdi
  call   <sscanf@plt>
  cmp    $0x1,%eax
  je     L53
L23:
  mov    %rsp,%rdi
  lea    D43(%rip),%rsi
  call   <strcpy@plt>
L53:
  mov    %rsp,%rdx
  lea    D29(%rip),%rsi
  mov    %rbx,%rdi
  mov    $0x0,%eax
  call   <mg_printf@plt>
  jmp    L20
L15:
  lea    D75(%rip),%rsi
  mov    %rbx,%rdi
  mov    $0x0,%eax
  call   <mg_printf@plt>
  test   %rbp,%rbp
  je     L99
  jmp    L20
L65:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: read_data
arguments: data_tag: D98
data_type: string
name: read_data
arguments: data_tag: D58
data_type: string
name: read_data
arguments: data_tag: D30
data_type: string
name: read_data
arguments: data_tag: D45
data_type: string
name: read_data
arguments: data_tag: D75
data_type: string
name: read_data
arguments: data_tag: D66
data_type: string
name: read_data
arguments: data_tag: D43
data_type: string
name: read_data
arguments: data_tag: D29
data_type: string

tool: D98: name

tool: D58: pass

tool: D30: Cookie

tool: D45: admin

tool: D75: HTTP/1.1 200 OK
content-Type: text/html

Please login (enter admin/admin to pass)<br><form method=post>Name: <input type=text name=name></input><br/>Password: <input type=password name=pass></input><br/><input type=submit value=Login></input></form>

tool: D66: uri=%99s

tool: D43: /

tool: D29: HTTP/1.1 301 Moved Permanently
Location: %s
Set-Cookie: allow=yes;



assistant: ```c
void login_page(struct mg_connection *conn, const struct mg_request_info *ri, void *data) {
  char *name, *pass, uri[100];
  const char *cookie;
  name = mg_get_var(conn, "name");
  pass = mg_get_var(conn, "pass");
  cookie = mg_get_header(conn, "Cookie");
  if (name != NULL && pass != NULL && strcmp(name, "admin") == 0 && strcmp(pass, "admin") == 0) {
    if (cookie == NULL || sscanf(cookie, "uri=%99s", uri) != 1)
      (void)strcpy(uri, "/");
    mg_printf(conn,
              "HTTP/1.1 301 Moved Permanently\r\n"
              "Location: %s\r\n"
              "Set-Cookie: allow=yes;\r\n\r\n",
              uri);
  } else {
    mg_printf(conn, "HTTP/1.1 200 OK\r\n"
                    "content-Type: text/html\r\n\r\n"
                    "Please login (enter admin/admin to pass)<br>"
                    "<form method=post>"
                    "Name: <input type=text name=name></input><br/>"
                    "Password: <input type=password name=pass></input><br/>"
                    "<input type=submit value=Login></input>"
                    "</form>");
  }
  if (name != NULL)
    mg_free(name);
  if (pass != NULL)
    mg_free(pass);
}
```