user: Please show me the C implementation that matches the assembly code listed below:

```asm
<valid_tokens>:
  endbr64
  push   %r12
  xor    %edx,%edx
  lea    D88(%rip),%rsi
  mov    $0x50,%ecx
  push   %rbp
  lea    D79(%rip),%r12
  push   %rbx
  xor    %ebx,%ebx
  sub    $0x480,%rsp
  movdqa D82(%rip),%xmm0
  movdqa D59(%rip),%xmm1
  mov    %fs:0x28,%rax
  mov    %rax,0x478(%rsp)
  xor    %eax,%eax
  mov    %rdx,0xa8(%rsp)
  movabs $0x2d00000000,%rax
  xor    %edx,%edx
  movaps %xmm0,0xb0(%rsp)
  movdqa D120(%rip),%xmm0
  lea    0x1f0(%rsp),%rdi
  lea    0x1f0(%rsp),%rbp
  rep movsq %ds:(%rsi),%es:(%rdi)
  mov    %rax,0xa0(%rsp)
  movabs $0x3e00000000,%rax
  movaps %xmm1,0x190(%rsp)
  movdqa D139(%rip),%xmm1
  mov    %rax,0x180(%rsp)
  movabs $0x3d2100000000,%rax
  mov    %rdx,0x188(%rsp)
  xor    %edx,%edx
  movaps %xmm0,0xc0(%rsp)
  pxor   %xmm0,%xmm0
  mov    %rax,0x1d0(%rsp)
  movabs $0x7c7c00000000,%rax
  movaps %xmm1,0x1a0(%rsp)
  movq   $0x2b,0x90(%rsp)
  movq   $0x0,0x98(%rsp)
  movq   $0x25,0xe0(%rsp)
  movq   $0x0,0xe8(%rsp)
  movl   $0x0,0xf0(%rsp)
  movq   $0x3c,0x170(%rsp)
  movq   $0x0,0x178(%rsp)
  movq   $0x3d3d,0x1c0(%rsp)
  movq   $0x0,0x1c8(%rsp)
  movaps %xmm0,0xd0(%rsp)
  movaps %xmm0,0x1b0(%rsp)
  mov    %rdx,0x1d8(%rsp)
  movdqa D124(%rip),%xmm1
  xor    %edx,%edx
  mov    %rax,0x60(%rsp)
  movabs $0x2d2d00000000,%rax
  mov    %rdx,0x68(%rsp)
  xor    %edx,%edx
  movaps %xmm1,0x70(%rsp)
  movdqa D142(%rip),%xmm1
  mov    %rax,0x30(%rsp)
  movabs $0x2c00000000,%rax
  mov    %rdx,0x38(%rsp)
  xor    %edx,%edx
  movaps %xmm1,0x120(%rsp)
  movdqa D85(%rip),%xmm1
  movq   $0x0,0x1e0(%rsp)
  movq   $0x2626,0x50(%rsp)
  movq   $0x0,0x58(%rsp)
  movq   $0x0,0x80(%rsp)
  movl   $0x0,0x88(%rsp)
  movq   $0x3d,(%rsp)
  movq   $0x0,0x8(%rsp)
  movl   $0x0,0x10(%rsp)
  movq   $0x2b2b,0x20(%rsp)
  movq   $0x0,0x28(%rsp)
  movq   $0x0,0x40(%rsp)
  movq   $0x7b,0x100(%rsp)
  movq   $0x0,0x108(%rsp)
  mov    %rax,0x110(%rsp)
  mov    %rdx,0x118(%rsp)
  movq   $0x20,0x150(%rsp)
  movq   $0x0,0x158(%rsp)
  movl   $0x0,0x160(%rsp)
  movaps %xmm1,0x130(%rsp)
  movaps %xmm0,0x140(%rsp)
  xchg   %ax,%ax
L15:
  mov    %ebx,%esi
  mov    %rbp,%rdi
  mov    %r12,%rdx
  xor    %eax,%eax
  call   <verify@plt>
  add    $0x1,%ebx
  add    $0x14,%rbp
  cmp    $0x20,%ebx
  jne    L15
  lea    0x90(%rsp),%rbp
  lea    D131(%rip),%r12
  nopw   0x0(%rax,%rax,1)
L46:
  mov    %ebx,%esi
  mov    %rbp,%rdi
  mov    %r12,%rdx
  xor    %eax,%eax
  call   <verify@plt>
  add    $0x1,%ebx
  add    $0x14,%rbp
  cmp    $0x25,%ebx
  jne    L46
  lea    0x170(%rsp),%rbp
  lea    D136(%rip),%r12
  nopw   0x0(%rax,%rax,1)
L12:
  mov    %ebx,%esi
  mov    %rbp,%rdi
  mov    %r12,%rdx
  xor    %eax,%eax
  call   <verify@plt>
  add    $0x1,%ebx
  add    $0x14,%rbp
  cmp    $0x2b,%ebx
  jne    L12
  lea    D67(%rip),%r12
  lea    0x50(%rsp),%rdi
  mov    $0x2b,%esi
  xor    %eax,%eax
  mov    %r12,%rdx
  lea    0x100(%rsp),%rbp
  mov    $0x31,%ebx
  call   <verify@plt>
  mov    %r12,%rdx
  lea    0x64(%rsp),%rdi
  xor    %eax,%eax
  mov    $0x2c,%esi
  call   <verify@plt>
  mov    %r12,%rdx
  lea    0x78(%rsp),%rdi
  xor    %eax,%eax
  mov    $0x2d,%esi
  lea    D71(%rip),%r12
  call   <verify@plt>
  mov    %rsp,%rdi
  mov    $0x2e,%esi
  xor    %eax,%eax
  lea    D106(%rip),%rdx
  call   <verify@plt>
  mov    %r12,%rdx
  lea    0x20(%rsp),%rdi
  xor    %eax,%eax
  mov    $0x2f,%esi
  call   <verify@plt>
  mov    %r12,%rdx
  lea    0x34(%rsp),%rdi
  xor    %eax,%eax
  mov    $0x30,%esi
  lea    D128(%rip),%r12
  call   <verify@plt>
  nopw   0x0(%rax,%rax,1)
L40:
  mov    %ebx,%esi
  mov    %rbp,%rdi
  mov    %r12,%rdx
  xor    %eax,%eax
  call   <verify@plt>
  add    $0x1,%ebx
  add    $0x14,%rbp
  cmp    $0x36,%ebx
  jne    L40
  mov    0x478(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L44
  add    $0x480,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  ret
L44:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: disassemble_data
arguments: tag: D88
type: string
name: disassemble_data
arguments: tag: D79
type: string
name: disassemble_data
arguments: tag: D82
type: byte[16]
name: disassemble_data
arguments: tag: D59
type: byte[16]
name: disassemble_data
arguments: tag: D120
type: byte[16]
name: disassemble_data
arguments: tag: D139
type: byte[16]
name: disassemble_data
arguments: tag: D124
type: byte[16]
name: disassemble_data
arguments: tag: D142
type: byte[16]
name: disassemble_data
arguments: tag: D85
type: byte[16]
name: disassemble_data
arguments: tag: D131
type: string
name: disassemble_data
arguments: tag: D136
type: string
name: disassemble_data
arguments: tag: D67
type: string
name: disassemble_data
arguments: tag: D71
type: string
name: disassemble_data
arguments: tag: D106
type: string
name: disassemble_data
arguments: tag: D128
type: string

tool: D88: auto

tool: D79: KEYWORD

tool: {"D82": [0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x00,0x00,0x00,0x00]}

tool: {"D59": [0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3e,0x3d,0x00,0x00,0x00,0x00,0x00,0x00]}

tool: {"D120": [0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2f,0x00,0x00,0x00]}

tool: {"D139": [0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3c,0x3d,0x00,0x00]}

tool: {"D124": [0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00]}

tool: {"D142": [0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x00,0x00,0x00,0x00]}

tool: {"D85": [0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7d,0x00,0x00,0x00]}

tool: D131: ARITHMETIC OPERATOR

tool: D136: RELATIONAL OPERATOR

tool: D67: CONDITIONAL OPERATOR

tool: D71: INC-DEC OPERATOR

tool: D106: ASSIGNMENT OPERATOR

tool: D128: PUNCTUATION SYMBOL

assistant: ```c
void valid_tokens() {
  char keyword[][20] = {"auto", "extern", "sizeof", "break", "float", "static", "case", "for", "struct", "char", "goto", "switch", "const", "if", "typedef", "continue", "int", "union", "default", "long", "unsigned", "do", "register", "void", "return", "double", "volatile", "else", "short", "while", "enum", "signed"};
  char arithmetic[][20] = {"+", "-", "*", "/", "%"};
  char relational[][20] = {"<", ">", ">=", "<=", "==", "!="};
  char conditional[][20] = {"&&", "||", "!"};
  char assignment[][20] = {"="};
  char inc_dec[][20] = {"++", "--"};
  char punctuation[][20] = {"{", ",", ";", "}", " "};
  int k = 0, i;
  for (i = 0; i < (sizeof(keyword) / sizeof(keyword[0])); i++) {
    verify(keyword[i], k, "KEYWORD");
    k++;
  }
  for (i = 0; i < (sizeof(arithmetic) / sizeof(arithmetic[0])); i++) {
    verify(arithmetic[i], k, "ARITHMETIC OPERATOR");
    k++;
  }
  for (i = 0; i < (sizeof(relational) / sizeof(relational[0])); i++) {
    verify(relational[i], k, "RELATIONAL OPERATOR");
    k++;
  }
  for (i = 0; i < (sizeof(conditional) / sizeof(conditional[0])); i++) {
    verify(conditional[i], k, "CONDITIONAL OPERATOR");
    k++;
  }
  for (i = 0; i < (sizeof(assignment) / sizeof(assignment[0])); i++) {
    verify(assignment[i], k, "ASSIGNMENT OPERATOR");
    k++;
  }
  for (i = 0; i < (sizeof(inc_dec) / sizeof(inc_dec[0])); i++) {
    verify(inc_dec[i], k, "INC-DEC OPERATOR");
    k++;
  }
  for (i = 0; i < (sizeof(punctuation) / sizeof(punctuation[0])); i++) {
    verify(punctuation[i], k, "PUNCTUATION SYMBOL");
    k++;
  }
}
```