user: What would the C source look like for the assembly code provided here?

```asm
<is_keyword>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x10,%rsp
  mov    %rdi,-0x8(%rbp)
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  sub    $0x61,%eax
  cmp    $0x16,%eax
  ja     L539
  mov    %eax,%eax
  lea    0x0(,%rax,4),%rdx
  lea    D155(%rip),%rax
  mov    (%rdx,%rax,1),%eax
  cltq
  lea    D155(%rip),%rdx
  add    %rdx,%rax
  notrack jmp *%rax
  mov    -0x8(%rbp),%rax
  lea    D322(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L419
  mov    $0x1,%eax
  jmp    L407
L419:
  mov    $0x0,%eax
  jmp    L407
  mov    -0x8(%rbp),%rax
  lea    D44(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L134
  mov    $0x1,%eax
  jmp    L407
L134:
  mov    $0x0,%eax
  jmp    L407
  mov    -0x8(%rbp),%rax
  lea    D6(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L453
  mov    -0x8(%rbp),%rax
  lea    D105(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L453
  mov    -0x8(%rbp),%rax
  lea    D134(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L453
  mov    -0x8(%rbp),%rax
  lea    D49(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L0
L453:
  mov    $0x1,%eax
  jmp    L407
L0:
  mov    $0x0,%eax
  jmp    L407
  mov    -0x8(%rbp),%rax
  lea    D18(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L382
  mov    -0x8(%rbp),%rax
  lea    D329(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L382
  mov    -0x8(%rbp),%rax
  lea    D120(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L410
L382:
  mov    $0x1,%eax
  jmp    L407
L410:
  mov    $0x0,%eax
  jmp    L407
  mov    -0x8(%rbp),%rax
  lea    D2(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L171
  mov    -0x8(%rbp),%rax
  lea    D326(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L171
  mov    -0x8(%rbp),%rax
  lea    D267(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L126
L171:
  mov    $0x1,%eax
  jmp    L407
L126:
  mov    $0x0,%eax
  jmp    L407
  mov    -0x8(%rbp),%rax
  lea    D74(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L401
  mov    -0x8(%rbp),%rax
  lea    D109(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L340
L401:
  mov    $0x1,%eax
  jmp    L407
L340:
  mov    $0x0,%eax
  jmp    L407
  mov    -0x8(%rbp),%rax
  lea    D150(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L614
  mov    $0x1,%eax
  jmp    L407
L614:
  mov    $0x0,%eax
  jmp    L407
  mov    -0x8(%rbp),%rax
  lea    D89(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L278
  mov    -0x8(%rbp),%rax
  lea    D85(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L24
L278:
  mov    $0x1,%eax
  jmp    L407
L24:
  mov    $0x0,%eax
  jmp    L407
  mov    -0x8(%rbp),%rax
  lea    D127(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L284
  mov    $0x1,%eax
  jmp    L407
L284:
  mov    $0x0,%eax
  jmp    L407
  mov    -0x8(%rbp),%rax
  lea    D84(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L533
  mov    -0x8(%rbp),%rax
  lea    D229(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L227
L533:
  mov    $0x1,%eax
  jmp    L407
L227:
  mov    $0x0,%eax
  jmp    L407
  mov    -0x8(%rbp),%rax
  lea    D79(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L256
  mov    -0x8(%rbp),%rax
  lea    D249(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L256
  mov    -0x8(%rbp),%rax
  lea    D96(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L256
  mov    -0x8(%rbp),%rax
  lea    D151(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L256
  mov    -0x8(%rbp),%rax
  lea    D50(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L256
  mov    -0x8(%rbp),%rax
  lea    D112(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L583
L256:
  mov    $0x1,%eax
  jmp    L407
L583:
  mov    $0x0,%eax
  jmp    L407
  mov    -0x8(%rbp),%rax
  lea    D130(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L112
  mov    $0x1,%eax
  jmp    L407
L112:
  mov    $0x0,%eax
  jmp    L407
  mov    -0x8(%rbp),%rax
  lea    D5(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L368
  mov    -0x8(%rbp),%rax
  lea    D316(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L207
L368:
  mov    $0x1,%eax
  jmp    L407
L207:
  mov    $0x0,%eax
  jmp    L407
  mov    -0x8(%rbp),%rax
  lea    D235(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L465
  mov    -0x8(%rbp),%rax
  lea    D51(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L101
L465:
  mov    $0x1,%eax
  jmp    L407
L101:
  mov    $0x0,%eax
  jmp    L407
  mov    -0x8(%rbp),%rax
  lea    D119(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L188
  mov    $0x1,%eax
  jmp    L407
L188:
  mov    $0x0,%eax
  jmp    L407
L539:
  mov    $0x0,%eax
L407:
  leave
  ret
```

tool_calls: name: parse_data
arguments: tag: D322
type_guessed: string
name: parse_data
arguments: tag: D44
type_guessed: string
name: parse_data
arguments: tag: D6
type_guessed: string
name: parse_data
arguments: tag: D105
type_guessed: string
name: parse_data
arguments: tag: D134
type_guessed: string
name: parse_data
arguments: tag: D49
type_guessed: string
name: parse_data
arguments: tag: D18
type_guessed: string
name: parse_data
arguments: tag: D329
type_guessed: string
name: parse_data
arguments: tag: D120
type_guessed: string
name: parse_data
arguments: tag: D2
type_guessed: string
name: parse_data
arguments: tag: D326
type_guessed: string
name: parse_data
arguments: tag: D267
type_guessed: string
name: parse_data
arguments: tag: D74
type_guessed: string
name: parse_data
arguments: tag: D109
type_guessed: string
name: parse_data
arguments: tag: D150
type_guessed: string
name: parse_data
arguments: tag: D89
type_guessed: string
name: parse_data
arguments: tag: D85
type_guessed: string
name: parse_data
arguments: tag: D127
type_guessed: string
name: parse_data
arguments: tag: D84
type_guessed: string
name: parse_data
arguments: tag: D229
type_guessed: string
name: parse_data
arguments: tag: D79
type_guessed: string
name: parse_data
arguments: tag: D249
type_guessed: string
name: parse_data
arguments: tag: D96
type_guessed: string
name: parse_data
arguments: tag: D151
type_guessed: string
name: parse_data
arguments: tag: D50
type_guessed: string
name: parse_data
arguments: tag: D112
type_guessed: string
name: parse_data
arguments: tag: D130
type_guessed: string
name: parse_data
arguments: tag: D5
type_guessed: string
name: parse_data
arguments: tag: D316
type_guessed: string
name: parse_data
arguments: tag: D235
type_guessed: string
name: parse_data
arguments: tag: D51
type_guessed: string
name: parse_data
arguments: tag: D119
type_guessed: string

tool: D322: auto

tool: D44: break

tool: D6: case

tool: D105: char

tool: D134: const

tool: D49: continue

tool: D18: default

tool: D329: do

tool: D120: double

tool: D2: else

tool: D326: enum

tool: D267: extern

tool: D74: float

tool: D109: for

tool: D150: goto

tool: D89: int

tool: D85: if

tool: D127: long

tool: D84: register

tool: D229: return

tool: D79: short

tool: D249: signed

tool: D96: sizeof

tool: D151: static

tool: D50: struct

tool: D112: switch

tool: D130: typedef

tool: D5: union

tool: D316: unsigned

tool: D235: void

tool: D51: volatile

tool: D119: while

assistant: ```c
int is_keyword(char *lexeme) {
  switch (lexeme[0]) {
  case 'a':
    if (!strcmp(lexeme, "auto"))
      return 1;
    return 0;
  case 'b':
    if (!strcmp(lexeme, "break"))
      return 1;
    return 0;
  case 'c':
    if (!strcmp(lexeme, "case") || !strcmp(lexeme, "char") || !strcmp(lexeme, "const") || !strcmp(lexeme, "continue"))
      return 1;
    return 0;
  case 'd':
    if (!strcmp(lexeme, "default") || !strcmp(lexeme, "do") || !strcmp(lexeme, "double"))
      return 1;
    return 0;
  case 'e':
    if (!strcmp(lexeme, "else") || !strcmp(lexeme, "enum") || !strcmp(lexeme, "extern"))
      return 1;
    return 0;
  case 'f':
    if (!strcmp(lexeme, "float") || !strcmp(lexeme, "for"))
      return 1;
    return 0;
  case 'g':
    if (!strcmp(lexeme, "goto"))
      return 1;
    return 0;
  case 'i':
    if (!strcmp(lexeme, "int") || !strcmp(lexeme, "if"))
      return 1;
    return 0;
  case 'l':
    if (!strcmp(lexeme, "long"))
      return 1;
    return 0;
  case 'r':
    if (!strcmp(lexeme, "register") || !strcmp(lexeme, "return"))
      return 1;
    return 0;
  case 's':
    if (!strcmp(lexeme, "short") || !strcmp(lexeme, "signed") || !strcmp(lexeme, "sizeof") || !strcmp(lexeme, "static") || !strcmp(lexeme, "struct") || !strcmp(lexeme, "switch"))
      return 1;
    return 0;
  case 't':
    if (!strcmp(lexeme, "typedef"))
      return 1;
    return 0;
  case 'u':
    if (!strcmp(lexeme, "union") || !strcmp(lexeme, "unsigned"))
      return 1;
    return 0;
  case 'v':
    if (!strcmp(lexeme, "void") || !strcmp(lexeme, "volatile"))
      return 1;
    return 0;
  case 'w':
    if (!strcmp(lexeme, "while"))
      return 1;
    return 0;
  default:
    return 0;
  }
}
```