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

```asm
<http_unchunk_data>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  mov    %rdi,-0x28(%rbp)
  mov    -0x28(%rbp),%rax
  mov    %rax,-0x10(%rbp)
  mov    -0x28(%rbp),%rax
  mov    %rax,-0x8(%rbp)
  movl   $0x0,-0x14(%rbp)
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x3c,%al
  jne    L250
  jmp    L93
L88:
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0xa,%al
  je     L163
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0xd,%al
  je     L163
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x9,%al
  je     L163
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%edx
  mov    -0x10(%rbp),%rax
  mov    %dl,(%rax)
  addq   $0x1,-0x10(%rbp)
L163:
  addq   $0x1,-0x8(%rbp)
L93:
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  jne    L88
  mov    -0x10(%rbp),%rax
  movb   $0x0,(%rax)
  jmp    L96
L50:
  shll   $0x4,-0x14(%rbp)
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x2f,%al
  jle    L294
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x39,%al
  jg     L294
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  sub    $0x30,%eax
  add    %eax,-0x14(%rbp)
  jmp    L14
L294:
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x40,%al
  jle    L107
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x46,%al
  jg     L107
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  sub    $0x37,%eax
  add    %eax,-0x14(%rbp)
  jmp    L14
L107:
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x60,%al
  jle    L8
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x66,%al
  jg     L8
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  sub    $0x57,%eax
  add    %eax,-0x14(%rbp)
  jmp    L14
L8:
  sarl   $0x4,-0x14(%rbp)
  jmp    L159
L14:
  addq   $0x1,-0x8(%rbp)
L250:
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0xa,%al
  je     L159
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0xd,%al
  jne    L50
L159:
  cmpl   $0x0,-0x14(%rbp)
  je     L80
  jmp    L337
L292:
  addq   $0x1,-0x8(%rbp)
L337:
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0xa,%al
  je     L292
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0xd,%al
  je     L292
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x9,%al
  je     L292
  jmp    L69
L270:
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0xa,%al
  je     L323
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0xd,%al
  je     L323
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x9,%al
  je     L323
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%edx
  mov    -0x10(%rbp),%rax
  mov    %dl,(%rax)
  addq   $0x1,-0x10(%rbp)
L323:
  addq   $0x1,-0x8(%rbp)
  subl   $0x1,-0x14(%rbp)
L69:
  cmpl   $0x0,-0x14(%rbp)
  jg     L270
  jmp    L3
L152:
  addq   $0x1,-0x8(%rbp)
L3:
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0xa,%al
  je     L152
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0xd,%al
  je     L152
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x9,%al
  je     L152
  jmp    L250
L80:
  nop
  mov    -0x10(%rbp),%rax
  movb   $0x0,(%rax)
L96:
  pop    %rbp
  ret
```

assistant: ```c
void __attribute__((visibility("hidden"))) http_unchunk_data(char *buffer) {
  char *temp = buffer;
  char *p = buffer;
  int chunklen = 0;
  if (*p == '<') {
    while (*p) {
      if (!(*p == '\n' || *p == '\r' || *p == '\t')) {
        *temp = *p;
        temp++;
      }
      p++;
    }
    *temp = '\0';
    return;
  }
  while (1) {
    while (*p != '\n' && *p != '\r') {
      chunklen = chunklen << 4;
      if ('0' <= *p && *p <= '9')
        chunklen += *p - '0';
      else if ('A' <= *p && *p <= 'F')
        chunklen += 10 - 'A' + *p;
      else if ('a' <= *p && *p <= 'f')
        chunklen += 10 + *p - 'a';
      else {
        chunklen = chunklen >> 4;
        break;
      }
      p++;
    }
    if (chunklen == 0)
      break;
    while (*p == '\n' || *p == '\r' || *p == '\t')
      p++;
    while (chunklen > 0) {
      if (!(*p == '\n' || *p == '\r' || *p == '\t')) {
        *temp = *p;
        temp++;
      }
      p++;
      chunklen--;
    }
    while (*p == '\n' || *p == '\r' || *p == '\t')
      p++;
  }
  *temp = '\0';
}
```