user: Demonstrate the C code that generates the assembly output below:

```asm
<httpdate_to_timet>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x470,%rsp
  mov    %rdi,-0x468(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  lea    -0x430(%rbp),%rax
  mov    $0x28,%edx
  mov    $0x0,%esi
  mov    %rax,%rdi
  call   <memset@plt>
  mov    -0x468(%rbp),%rax
  mov    %rax,-0x438(%rbp)
  jmp    L50
L175:
  addq   $0x1,-0x438(%rbp)
L50:
  mov    -0x438(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x20,%al
  je     L175
  mov    -0x438(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x9,%al
  je     L175
  lea    -0x458(%rbp),%r8
  lea    -0x450(%rbp),%rdi
  lea    -0x400(%rbp),%rcx
  lea    -0x454(%rbp),%rdx
  mov    -0x438(%rbp),%rax
  lea    -0x460(%rbp),%rsi
  push   %rsi
  lea    -0x45c(%rbp),%rsi
  push   %rsi
  mov    %r8,%r9
  mov    %rdi,%r8
  lea    D14(%rip),%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <sscanf@plt>
  add    $0x10,%rsp
  cmp    $0x6,%eax
  jne    L195
  lea    -0x448(%rbp),%rdx
  lea    -0x400(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <scan_mon@plt>
  test   %rax,%rax
  je     L195
  mov    -0x454(%rbp),%eax
  mov    %eax,-0x430(%rbp)
  mov    -0x448(%rbp),%rax
  mov    %rax,-0x428(%rbp)
  mov    -0x450(%rbp),%eax
  mov    %eax,-0x420(%rbp)
  mov    -0x458(%rbp),%eax
  mov    %eax,-0x41c(%rbp)
  mov    -0x45c(%rbp),%eax
  mov    %eax,-0x418(%rbp)
  mov    -0x460(%rbp),%eax
  mov    %eax,-0x414(%rbp)
  jmp    L121
L195:
  lea    -0x458(%rbp),%r8
  lea    -0x450(%rbp),%rdi
  lea    -0x400(%rbp),%rcx
  lea    -0x454(%rbp),%rdx
  mov    -0x438(%rbp),%rax
  lea    -0x460(%rbp),%rsi
  push   %rsi
  lea    -0x45c(%rbp),%rsi
  push   %rsi
  mov    %r8,%r9
  mov    %rdi,%r8
  lea    D66(%rip),%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <sscanf@plt>
  add    $0x10,%rsp
  cmp    $0x6,%eax
  jne    L231
  lea    -0x448(%rbp),%rdx
  lea    -0x400(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <scan_mon@plt>
  test   %rax,%rax
  je     L231
  mov    -0x454(%rbp),%eax
  mov    %eax,-0x430(%rbp)
  mov    -0x448(%rbp),%rax
  mov    %rax,-0x428(%rbp)
  mov    -0x450(%rbp),%eax
  mov    %eax,-0x420(%rbp)
  mov    -0x458(%rbp),%eax
  mov    %eax,-0x41c(%rbp)
  mov    -0x45c(%rbp),%eax
  mov    %eax,-0x418(%rbp)
  mov    -0x460(%rbp),%eax
  mov    %eax,-0x414(%rbp)
  jmp    L121
L231:
  lea    -0x454(%rbp),%r8
  lea    -0x460(%rbp),%rdi
  lea    -0x45c(%rbp),%rcx
  lea    -0x458(%rbp),%rdx
  mov    -0x438(%rbp),%rax
  lea    -0x450(%rbp),%rsi
  push   %rsi
  lea    -0x400(%rbp),%rsi
  push   %rsi
  mov    %r8,%r9
  mov    %rdi,%r8
  lea    D32(%rip),%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <sscanf@plt>
  add    $0x10,%rsp
  cmp    $0x6,%eax
  jne    L45
  lea    -0x448(%rbp),%rdx
  lea    -0x400(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <scan_mon@plt>
  test   %rax,%rax
  je     L45
  mov    -0x458(%rbp),%eax
  mov    %eax,-0x41c(%rbp)
  mov    -0x45c(%rbp),%eax
  mov    %eax,-0x418(%rbp)
  mov    -0x460(%rbp),%eax
  mov    %eax,-0x414(%rbp)
  mov    -0x454(%rbp),%eax
  mov    %eax,-0x430(%rbp)
  mov    -0x448(%rbp),%rax
  mov    %rax,-0x428(%rbp)
  mov    -0x450(%rbp),%eax
  mov    %eax,-0x420(%rbp)
  jmp    L121
L45:
  lea    -0x454(%rbp),%r8
  lea    -0x460(%rbp),%rdi
  lea    -0x45c(%rbp),%rcx
  lea    -0x458(%rbp),%rdx
  mov    -0x438(%rbp),%rax
  lea    -0x450(%rbp),%rsi
  push   %rsi
  lea    -0x400(%rbp),%rsi
  push   %rsi
  mov    %r8,%r9
  mov    %rdi,%r8
  lea    D63(%rip),%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <sscanf@plt>
  add    $0x10,%rsp
  cmp    $0x6,%eax
  jne    L293
  lea    -0x448(%rbp),%rdx
  lea    -0x400(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <scan_mon@plt>
  test   %rax,%rax
  je     L293
  mov    -0x458(%rbp),%eax
  mov    %eax,-0x41c(%rbp)
  mov    -0x45c(%rbp),%eax
  mov    %eax,-0x418(%rbp)
  mov    -0x460(%rbp),%eax
  mov    %eax,-0x414(%rbp)
  mov    -0x454(%rbp),%eax
  mov    %eax,-0x430(%rbp)
  mov    -0x448(%rbp),%rax
  mov    %rax,-0x428(%rbp)
  mov    -0x450(%rbp),%eax
  mov    %eax,-0x420(%rbp)
  jmp    L121
L293:
  lea    -0x450(%rbp),%r8
  lea    -0x400(%rbp),%rdi
  lea    -0x454(%rbp),%rcx
  lea    -0x200(%rbp),%rdx
  mov    -0x438(%rbp),%rax
  sub    $0x8,%rsp
  lea    -0x460(%rbp),%rsi
  push   %rsi
  lea    -0x45c(%rbp),%rsi
  push   %rsi
  lea    -0x458(%rbp),%rsi
  push   %rsi
  mov    %r8,%r9
  mov    %rdi,%r8
  lea    D5(%rip),%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <sscanf@plt>
  add    $0x20,%rsp
  cmp    $0x7,%eax
  jne    L277
  lea    -0x440(%rbp),%rdx
  lea    -0x200(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <scan_wday@plt>
  test   %rax,%rax
  je     L277
  lea    -0x448(%rbp),%rdx
  lea    -0x400(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <scan_mon@plt>
  test   %rax,%rax
  je     L277
  mov    -0x440(%rbp),%rax
  mov    %rax,-0x410(%rbp)
  mov    -0x454(%rbp),%eax
  mov    %eax,-0x430(%rbp)
  mov    -0x448(%rbp),%rax
  mov    %rax,-0x428(%rbp)
  mov    -0x450(%rbp),%eax
  mov    %eax,-0x420(%rbp)
  mov    -0x458(%rbp),%eax
  mov    %eax,-0x41c(%rbp)
  mov    -0x45c(%rbp),%eax
  mov    %eax,-0x418(%rbp)
  mov    -0x460(%rbp),%eax
  mov    %eax,-0x414(%rbp)
  jmp    L121
L277:
  lea    -0x450(%rbp),%r8
  lea    -0x400(%rbp),%rdi
  lea    -0x454(%rbp),%rcx
  lea    -0x200(%rbp),%rdx
  mov    -0x438(%rbp),%rax
  sub    $0x8,%rsp
  lea    -0x460(%rbp),%rsi
  push   %rsi
  lea    -0x45c(%rbp),%rsi
  push   %rsi
  lea    -0x458(%rbp),%rsi
  push   %rsi
  mov    %r8,%r9
  mov    %rdi,%r8
  lea    D48(%rip),%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <sscanf@plt>
  add    $0x20,%rsp
  cmp    $0x7,%eax
  jne    L220
  lea    -0x440(%rbp),%rdx
  lea    -0x200(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <scan_wday@plt>
  test   %rax,%rax
  je     L220
  lea    -0x448(%rbp),%rdx
  lea    -0x400(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <scan_mon@plt>
  test   %rax,%rax
  je     L220
  mov    -0x440(%rbp),%rax
  mov    %rax,-0x410(%rbp)
  mov    -0x454(%rbp),%eax
  mov    %eax,-0x430(%rbp)
  mov    -0x448(%rbp),%rax
  mov    %rax,-0x428(%rbp)
  mov    -0x450(%rbp),%eax
  mov    %eax,-0x420(%rbp)
  mov    -0x458(%rbp),%eax
  mov    %eax,-0x41c(%rbp)
  mov    -0x45c(%rbp),%eax
  mov    %eax,-0x418(%rbp)
  mov    -0x460(%rbp),%eax
  mov    %eax,-0x414(%rbp)
  jmp    L121
L220:
  lea    -0x458(%rbp),%r8
  lea    -0x454(%rbp),%rdi
  lea    -0x400(%rbp),%rcx
  lea    -0x200(%rbp),%rdx
  mov    -0x438(%rbp),%rax
  sub    $0x8,%rsp
  lea    -0x450(%rbp),%rsi
  push   %rsi
  lea    -0x460(%rbp),%rsi
  push   %rsi
  lea    -0x45c(%rbp),%rsi
  push   %rsi
  mov    %r8,%r9
  mov    %rdi,%r8
  lea    D69(%rip),%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <sscanf@plt>
  add    $0x20,%rsp
  cmp    $0x7,%eax
  jne    L61
  lea    -0x440(%rbp),%rdx
  lea    -0x200(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <scan_wday@plt>
  test   %rax,%rax
  je     L61
  lea    -0x448(%rbp),%rdx
  lea    -0x400(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <scan_mon@plt>
  test   %rax,%rax
  je     L61
  mov    -0x440(%rbp),%rax
  mov    %rax,-0x410(%rbp)
  mov    -0x448(%rbp),%rax
  mov    %rax,-0x428(%rbp)
  mov    -0x454(%rbp),%eax
  mov    %eax,-0x430(%rbp)
  mov    -0x458(%rbp),%eax
  mov    %eax,-0x41c(%rbp)
  mov    -0x45c(%rbp),%eax
  mov    %eax,-0x418(%rbp)
  mov    -0x460(%rbp),%eax
  mov    %eax,-0x414(%rbp)
  mov    -0x450(%rbp),%eax
  mov    %eax,-0x420(%rbp)
  jmp    L121
L61:
  mov    $0xffffffff,%eax
  jmp    L132
L121:
  mov    -0x420(%rbp),%eax
  cmp    $0x76c,%eax
  jle    L108
  mov    -0x420(%rbp),%eax
  sub    $0x76c,%eax
  mov    %eax,-0x420(%rbp)
  jmp    L286
L108:
  mov    -0x420(%rbp),%eax
  cmp    $0x45,%eax
  jg     L286
  mov    -0x420(%rbp),%eax
  add    $0x64,%eax
  mov    %eax,-0x420(%rbp)
L286:
  lea    -0x430(%rbp),%rax
  mov    %rax,%rdi
  call   <tm_to_time@plt>
  mov    %eax,-0x44c(%rbp)
  mov    -0x44c(%rbp),%eax
L132:
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L84
  call   <__stack_chk_fail@plt>
L84:
  leave
  ret
```

tool_calls: name: unpack_data
arguments: tag: D14
type: string
name: unpack_data
arguments: tag: D66
type: string
name: unpack_data
arguments: tag: D32
type: string
name: unpack_data
arguments: tag: D63
type: string
name: unpack_data
arguments: tag: D5
type: string
name: unpack_data
arguments: tag: D48
type: string
name: unpack_data
arguments: tag: D69
type: string

tool: D14: %d-%[a-zA-Z]-%d %d:%d:%d GMT

tool: D66: %d %[a-zA-Z] %d %d:%d:%d GMT

tool: D32: %d:%d:%d GMT %d-%[a-zA-Z]-%d

tool: D63: %d:%d:%d GMT %d %[a-zA-Z] %d

tool: D5: %[a-zA-Z], %d-%[a-zA-Z]-%d %d:%d:%d GMT

tool: D48: %[a-zA-Z], %d %[a-zA-Z] %d %d:%d:%d GMT

tool: D69: %[a-zA-Z] %[a-zA-Z] %d %d:%d:%d GMT %d

assistant: ```c
time_t httpdate_to_timet(const char *str) {
  struct tm tm;
  const char *cp;
  char str_mon[500], str_wday[500];
  int tm_sec, tm_min, tm_hour, tm_mday, tm_year;
  long tm_mon, tm_wday;
  time_t t;
  memset((char *)&tm, 0, sizeof(struct tm));
  for (cp = str; *cp == ' ' || *cp == '\t'; ++cp)
    ;
  if (sscanf(cp, "%d-%[a-zA-Z]-%d %d:%d:%d GMT", &tm_mday, str_mon, &tm_year, &tm_hour, &tm_min, &tm_sec) == 6 && scan_mon(str_mon, &tm_mon)) {
    tm.tm_mday = tm_mday;
    tm.tm_mon = tm_mon;
    tm.tm_year = tm_year;
    tm.tm_hour = tm_hour;
    tm.tm_min = tm_min;
    tm.tm_sec = tm_sec;
  } else if (sscanf(cp, "%d %[a-zA-Z] %d %d:%d:%d GMT", &tm_mday, str_mon, &tm_year, &tm_hour, &tm_min, &tm_sec) == 6 && scan_mon(str_mon, &tm_mon)) {
    tm.tm_mday = tm_mday;
    tm.tm_mon = tm_mon;
    tm.tm_year = tm_year;
    tm.tm_hour = tm_hour;
    tm.tm_min = tm_min;
    tm.tm_sec = tm_sec;
  } else if (sscanf(cp, "%d:%d:%d GMT %d-%[a-zA-Z]-%d", &tm_hour, &tm_min, &tm_sec, &tm_mday, str_mon, &tm_year) == 6 && scan_mon(str_mon, &tm_mon)) {
    tm.tm_hour = tm_hour;
    tm.tm_min = tm_min;
    tm.tm_sec = tm_sec;
    tm.tm_mday = tm_mday;
    tm.tm_mon = tm_mon;
    tm.tm_year = tm_year;
  } else if (sscanf(cp, "%d:%d:%d GMT %d %[a-zA-Z] %d", &tm_hour, &tm_min, &tm_sec, &tm_mday, str_mon, &tm_year) == 6 && scan_mon(str_mon, &tm_mon)) {
    tm.tm_hour = tm_hour;
    tm.tm_min = tm_min;
    tm.tm_sec = tm_sec;
    tm.tm_mday = tm_mday;
    tm.tm_mon = tm_mon;
    tm.tm_year = tm_year;
  } else if (sscanf(cp, "%[a-zA-Z], %d-%[a-zA-Z]-%d %d:%d:%d GMT", str_wday, &tm_mday, str_mon, &tm_year, &tm_hour, &tm_min, &tm_sec) == 7 && scan_wday(str_wday, &tm_wday) && scan_mon(str_mon, &tm_mon)) {
    tm.tm_wday = tm_wday;
    tm.tm_mday = tm_mday;
    tm.tm_mon = tm_mon;
    tm.tm_year = tm_year;
    tm.tm_hour = tm_hour;
    tm.tm_min = tm_min;
    tm.tm_sec = tm_sec;
  } else if (sscanf(cp, "%[a-zA-Z], %d %[a-zA-Z] %d %d:%d:%d GMT", str_wday, &tm_mday, str_mon, &tm_year, &tm_hour, &tm_min, &tm_sec) == 7 && scan_wday(str_wday, &tm_wday) && scan_mon(str_mon, &tm_mon)) {
    tm.tm_wday = tm_wday;
    tm.tm_mday = tm_mday;
    tm.tm_mon = tm_mon;
    tm.tm_year = tm_year;
    tm.tm_hour = tm_hour;
    tm.tm_min = tm_min;
    tm.tm_sec = tm_sec;
  } else if (sscanf(cp, "%[a-zA-Z] %[a-zA-Z] %d %d:%d:%d GMT %d", str_wday, str_mon, &tm_mday, &tm_hour, &tm_min, &tm_sec, &tm_year) == 7 && scan_wday(str_wday, &tm_wday) && scan_mon(str_mon, &tm_mon)) {
    tm.tm_wday = tm_wday;
    tm.tm_mon = tm_mon;
    tm.tm_mday = tm_mday;
    tm.tm_hour = tm_hour;
    tm.tm_min = tm_min;
    tm.tm_sec = tm_sec;
    tm.tm_year = tm_year;
  } else
    return (time_t)-1;
  if (tm.tm_year > 1900)
    tm.tm_year -= 1900;
  else if (tm.tm_year < 70)
    tm.tm_year += 100;
  t = tm_to_time(&tm);
  return t;
}
```