user: Converte this assembly snippet into its equivalent C code:

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x10,%rsp
  lea    D105(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    D51(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    D75(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  movl   $0x0,-0x4(%rbp)
  jmp    L48
L35:
  mov    -0x4(%rbp),%eax
  mov    %eax,%esi
  lea    D49(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    -0x4(%rbp),%eax
  mov    %eax,%esi
  lea    D47(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  cmpl   $0x8,-0x4(%rbp)
  je     L13
  cmpl   $0x9,-0x4(%rbp)
  jle    L10
  cmpl   $0xe,-0x4(%rbp)
  jle    L13
L10:
  cmpl   $0x11,-0x4(%rbp)
  je     L13
  lea    D39(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
L13:
  mov    -0x4(%rbp),%eax
  mov    %eax,%esi
  lea    D113(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    D0(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  addl   $0x1,-0x4(%rbp)
L48:
  cmpl   $0xff,-0x4(%rbp)
  jle    L35
  mov    $0xa,%edi
  call   <putchar@plt>
  lea    D72(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    D18(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    D11(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    D90(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  movl   $0x0,-0x4(%rbp)
  jmp    L47
L62:
  mov    -0x4(%rbp),%eax
  mov    %eax,%esi
  lea    D68(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  addl   $0x1,-0x4(%rbp)
L47:
  cmpl   $0xff,-0x4(%rbp)
  jle    L62
  mov    $0x0,%eax
  leave
  ret
```

tool_calls: name: read_data
arguments: data_tag: D105
type_infered: string
name: read_data
arguments: data_tag: D51
type_infered: string
name: read_data
arguments: data_tag: D75
type_infered: string
name: read_data
arguments: data_tag: D49
type_infered: string
name: read_data
arguments: data_tag: D47
type_infered: string
name: read_data
arguments: data_tag: D39
type_infered: string
name: read_data
arguments: data_tag: D113
type_infered: string
name: read_data
arguments: data_tag: D0
type_infered: string
name: read_data
arguments: data_tag: D72
type_infered: string
name: read_data
arguments: data_tag: D18
type_infered: string
name: read_data
arguments: data_tag: D11
type_infered: string
name: read_data
arguments: data_tag: D90
type_infered: string
name: read_data
arguments: data_tag: D68
type_infered: string

tool: D105: # handler

tool: D51: .text

tool: D75: .globl __alltraps

tool: D49: .globl vector%d


tool: D47: vector%d:


tool: D39:   pushl $0

tool: D113:   pushl $%d


tool: D0:   jmp __alltraps

tool: D72: # vector table

tool: D18: .data

tool: D11: .globl __vectors

tool: D90: __vectors:

tool: D68:   .long vector%d


assistant: ```c
int main(void) {
  printf("# handler\n");
  printf(".text\n");
  printf(".globl __alltraps\n");
  int i;
  for (i = 0; i < 256; i++) {
    printf(".globl vector%d\n", i);
    printf("vector%d:\n", i);
    if (i != 8 && (i < 10 || i > 14) && i != 17) {
      printf("  pushl $0\n");
    }
    printf("  pushl $%d\n", i);
    printf("  jmp __alltraps\n");
  }
  printf("\n");
  printf("# vector table\n");
  printf(".data\n");
  printf(".globl __vectors\n");
  printf("__vectors:\n");
  for (i = 0; i < 256; i++) {
    printf("  .long vector%d\n", i);
  }
  return 0;
}
```