user: 请从给定的汇编指令推导出C源代码：

```asm
<valid_tokens>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x490,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  lea    -0x290(%rbp),%rax
  lea    D10(%rip),%rdx
  mov    $0x50,%ecx
  mov    %rax,%rdi
  mov    %rdx,%rsi
  rep movsq %ds:(%rsi),%es:(%rdi)
  movq   $0x2b,-0x3f0(%rbp)
  movq   $0x0,-0x3e8(%rbp)
  movl   $0x0,-0x3e0(%rbp)
  movq   $0x2d,-0x3dc(%rbp)
  movq   $0x0,-0x3d4(%rbp)
  movl   $0x0,-0x3cc(%rbp)
  movq   $0x2a,-0x3c8(%rbp)
  movq   $0x0,-0x3c0(%rbp)
  movl   $0x0,-0x3b8(%rbp)
  movq   $0x2f,-0x3b4(%rbp)
  movq   $0x0,-0x3ac(%rbp)
  movl   $0x0,-0x3a4(%rbp)
  movq   $0x25,-0x3a0(%rbp)
  movq   $0x0,-0x398(%rbp)
  movl   $0x0,-0x390(%rbp)
  movq   $0x3c,-0x310(%rbp)
  movq   $0x0,-0x308(%rbp)
  movl   $0x0,-0x300(%rbp)
  movq   $0x3e,-0x2fc(%rbp)
  movq   $0x0,-0x2f4(%rbp)
  movl   $0x0,-0x2ec(%rbp)
  movq   $0x3d3e,-0x2e8(%rbp)
  movq   $0x0,-0x2e0(%rbp)
  movl   $0x0,-0x2d8(%rbp)
  movq   $0x3d3c,-0x2d4(%rbp)
  movq   $0x0,-0x2cc(%rbp)
  movl   $0x0,-0x2c4(%rbp)
  movq   $0x3d3d,-0x2c0(%rbp)
  movq   $0x0,-0x2b8(%rbp)
  movl   $0x0,-0x2b0(%rbp)
  movq   $0x3d21,-0x2ac(%rbp)
  movq   $0x0,-0x2a4(%rbp)
  movl   $0x0,-0x29c(%rbp)
  movq   $0x2626,-0x430(%rbp)
  movq   $0x0,-0x428(%rbp)
  movl   $0x0,-0x420(%rbp)
  movq   $0x7c7c,-0x41c(%rbp)
  movq   $0x0,-0x414(%rbp)
  movl   $0x0,-0x40c(%rbp)
  movq   $0x21,-0x408(%rbp)
  movq   $0x0,-0x400(%rbp)
  movl   $0x0,-0x3f8(%rbp)
  movq   $0x3d,-0x480(%rbp)
  movq   $0x0,-0x478(%rbp)
  movl   $0x0,-0x470(%rbp)
  movq   $0x2b2b,-0x460(%rbp)
  movq   $0x0,-0x458(%rbp)
  movl   $0x0,-0x450(%rbp)
  movq   $0x2d2d,-0x44c(%rbp)
  movq   $0x0,-0x444(%rbp)
  movl   $0x0,-0x43c(%rbp)
  movq   $0x7b,-0x380(%rbp)
  movq   $0x0,-0x378(%rbp)
  movl   $0x0,-0x370(%rbp)
  movq   $0x2c,-0x36c(%rbp)
  movq   $0x0,-0x364(%rbp)
  movl   $0x0,-0x35c(%rbp)
  movq   $0x3b,-0x358(%rbp)
  movq   $0x0,-0x350(%rbp)
  movl   $0x0,-0x348(%rbp)
  movq   $0x7d,-0x344(%rbp)
  movq   $0x0,-0x33c(%rbp)
  movl   $0x0,-0x334(%rbp)
  movq   $0x20,-0x330(%rbp)
  movq   $0x0,-0x328(%rbp)
  movl   $0x0,-0x320(%rbp)
  movl   $0x0,-0x488(%rbp)
  movl   $0x0,-0x484(%rbp)
  jmp    L32
L91:
  lea    -0x290(%rbp),%rcx
  mov    -0x484(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  shl    $0x2,%rax
  add    %rax,%rcx
  mov    -0x488(%rbp),%eax
  lea    D14(%rip),%rdx
  mov    %eax,%esi
  mov    %rcx,%rdi
  mov    $0x0,%eax
  call   <verify@plt>
  addl   $0x1,-0x488(%rbp)
  addl   $0x1,-0x484(%rbp)
L32:
  mov    -0x484(%rbp),%eax
  cmp    $0x1f,%eax
  jbe    L91
  movl   $0x0,-0x484(%rbp)
  jmp    L36
L33:
  lea    -0x3f0(%rbp),%rcx
  mov    -0x484(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  shl    $0x2,%rax
  add    %rax,%rcx
  mov    -0x488(%rbp),%eax
  lea    D26(%rip),%rdx
  mov    %eax,%esi
  mov    %rcx,%rdi
  mov    $0x0,%eax
  call   <verify@plt>
  addl   $0x1,-0x488(%rbp)
  addl   $0x1,-0x484(%rbp)
L36:
  mov    -0x484(%rbp),%eax
  cmp    $0x4,%eax
  jbe    L33
  movl   $0x0,-0x484(%rbp)
  jmp    L119
L116:
  lea    -0x310(%rbp),%rcx
  mov    -0x484(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  shl    $0x2,%rax
  add    %rax,%rcx
  mov    -0x488(%rbp),%eax
  lea    D38(%rip),%rdx
  mov    %eax,%esi
  mov    %rcx,%rdi
  mov    $0x0,%eax
  call   <verify@plt>
  addl   $0x1,-0x488(%rbp)
  addl   $0x1,-0x484(%rbp)
L119:
  mov    -0x484(%rbp),%eax
  cmp    $0x5,%eax
  jbe    L116
  movl   $0x0,-0x484(%rbp)
  jmp    L78
L10:
  lea    -0x430(%rbp),%rcx
  mov    -0x484(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  shl    $0x2,%rax
  add    %rax,%rcx
  mov    -0x488(%rbp),%eax
  lea    D69(%rip),%rdx
  mov    %eax,%esi
  mov    %rcx,%rdi
  mov    $0x0,%eax
  call   <verify@plt>
  addl   $0x1,-0x488(%rbp)
  addl   $0x1,-0x484(%rbp)
L78:
  mov    -0x484(%rbp),%eax
  cmp    $0x2,%eax
  jbe    L10
  movl   $0x0,-0x484(%rbp)
  jmp    L50
L55:
  lea    -0x480(%rbp),%rcx
  mov    -0x484(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  shl    $0x2,%rax
  add    %rax,%rcx
  mov    -0x488(%rbp),%eax
  lea    D65(%rip),%rdx
  mov    %eax,%esi
  mov    %rcx,%rdi
  mov    $0x0,%eax
  call   <verify@plt>
  addl   $0x1,-0x488(%rbp)
  addl   $0x1,-0x484(%rbp)
L50:
  cmpl   $0x0,-0x484(%rbp)
  je     L55
  movl   $0x0,-0x484(%rbp)
  jmp    L58
L49:
  lea    -0x460(%rbp),%rcx
  mov    -0x484(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  shl    $0x2,%rax
  add    %rax,%rcx
  mov    -0x488(%rbp),%eax
  lea    D70(%rip),%rdx
  mov    %eax,%esi
  mov    %rcx,%rdi
  mov    $0x0,%eax
  call   <verify@plt>
  addl   $0x1,-0x488(%rbp)
  addl   $0x1,-0x484(%rbp)
L58:
  mov    -0x484(%rbp),%eax
  cmp    $0x1,%eax
  jbe    L49
  movl   $0x0,-0x484(%rbp)
  jmp    L54
L8:
  lea    -0x380(%rbp),%rcx
  mov    -0x484(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  shl    $0x2,%rax
  add    %rax,%rcx
  mov    -0x488(%rbp),%eax
  lea    D7(%rip),%rdx
  mov    %eax,%esi
  mov    %rcx,%rdi
  mov    $0x0,%eax
  call   <verify@plt>
  addl   $0x1,-0x488(%rbp)
  addl   $0x1,-0x484(%rbp)
L54:
  mov    -0x484(%rbp),%eax
  cmp    $0x4,%eax
  jbe    L8
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L107
  call   <__stack_chk_fail@plt>
L107:
  leave
  ret
```

tool_calls: name: disassemble_data
arguments: data_label: D10
type: string
name: disassemble_data
arguments: data_label: D14
type: string
name: disassemble_data
arguments: data_label: D26
type: string
name: disassemble_data
arguments: data_label: D38
type: string
name: disassemble_data
arguments: data_label: D69
type: string
name: disassemble_data
arguments: data_label: D65
type: string
name: disassemble_data
arguments: data_label: D70
type: string
name: disassemble_data
arguments: data_label: D7
type: string

tool: D10: auto

tool: D14: KEYWORD

tool: D26: ARITHMETIC OPERATOR

tool: D38: RELATIONAL OPERATOR

tool: D69: CONDITIONAL OPERATOR

tool: D65: ASSIGNMENT OPERATOR

tool: D70: INC-DEC OPERATOR

tool: D7: 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++;
  }
}
```