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

```asm
<get_token_bool>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  mov    %rdi,-0x8(%rbp)
  mov    %esi,-0xc(%rbp)
  mov    %rdx,-0x18(%rbp)
  mov    %rcx,-0x20(%rbp)
  mov    %r8,-0x28(%rbp)
  mov    -0x18(%rbp),%rax
  mov    (%rax),%eax
  cmp    %eax,-0xc(%rbp)
  jle    L251
  mov    -0x18(%rbp),%rax
  mov    (%rax),%eax
  movslq %eax,%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0xa,%al
  je     L251
  mov    -0x18(%rbp),%rax
  mov    (%rax),%eax
  movslq %eax,%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  test   %al,%al
  jne    L2
L251:
  mov    $0x65,%eax
  jmp    L278
L218:
  mov    -0x18(%rbp),%rax
  mov    (%rax),%eax
  lea    0x1(%rax),%edx
  mov    -0x18(%rbp),%rax
  mov    %edx,(%rax)
L2:
  mov    -0x18(%rbp),%rax
  mov    (%rax),%eax
  cmp    %eax,-0xc(%rbp)
  jle    L129
  mov    -0x18(%rbp),%rax
  mov    (%rax),%eax
  movslq %eax,%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0xa,%al
  je     L129
  mov    -0x18(%rbp),%rax
  mov    (%rax),%eax
  movslq %eax,%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  test   %al,%al
  je     L129
  mov    -0x18(%rbp),%rax
  mov    (%rax),%eax
  movslq %eax,%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x20,%al
  je     L218
  mov    -0x18(%rbp),%rax
  mov    (%rax),%eax
  movslq %eax,%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x9,%al
  je     L218
L129:
  mov    -0x18(%rbp),%rax
  mov    (%rax),%eax
  cmp    %eax,-0xc(%rbp)
  jle    L280
  mov    -0x18(%rbp),%rax
  mov    (%rax),%eax
  movslq %eax,%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0xa,%al
  je     L280
  mov    -0x18(%rbp),%rax
  mov    (%rax),%eax
  movslq %eax,%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  test   %al,%al
  jne    L96
L280:
  mov    $0x65,%eax
  jmp    L278
L96:
  mov    -0x18(%rbp),%rax
  mov    (%rax),%eax
  movslq %eax,%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x2c,%al
  je     L68
  mov    -0x18(%rbp),%rax
  mov    (%rax),%eax
  movslq %eax,%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x3b,%al
  je     L68
  mov    -0x18(%rbp),%rax
  mov    (%rax),%eax
  movslq %eax,%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x7e,%al
  je     L68
  mov    -0x18(%rbp),%rax
  mov    (%rax),%eax
  movslq %eax,%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x7b,%al
  je     L68
  mov    -0x18(%rbp),%rax
  mov    (%rax),%eax
  movslq %eax,%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x7d,%al
  jne    L179
L68:
  mov    -0x18(%rbp),%rax
  mov    (%rax),%eax
  movslq %eax,%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%edx
  mov    -0x20(%rbp),%rax
  mov    %dl,(%rax)
  mov    -0x28(%rbp),%rax
  movl   $0x1,(%rax)
  mov    -0x18(%rbp),%rax
  mov    (%rax),%eax
  lea    0x1(%rax),%ecx
  mov    -0x18(%rbp),%rdx
  mov    %ecx,(%rdx)
  movslq %eax,%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  jmp    L278
L179:
  mov    -0x28(%rbp),%rax
  movl   $0x0,(%rax)
  mov    -0x18(%rbp),%rax
  mov    (%rax),%eax
  movslq %eax,%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x5c,%al
  jne    L67
  mov    -0x18(%rbp),%rax
  mov    (%rax),%eax
  lea    0x1(%rax),%ecx
  mov    -0x18(%rbp),%rdx
  mov    %ecx,(%rdx)
  movslq %eax,%rdx
  mov    -0x8(%rbp),%rax
  lea    (%rdx,%rax,1),%rsi
  mov    -0x28(%rbp),%rax
  mov    (%rax),%eax
  lea    0x1(%rax),%ecx
  mov    -0x28(%rbp),%rdx
  mov    %ecx,(%rdx)
  movslq %eax,%rdx
  mov    -0x20(%rbp),%rax
  add    %rax,%rdx
  movzbl (%rsi),%eax
  mov    %al,(%rdx)
  mov    -0x18(%rbp),%rax
  mov    (%rax),%eax
  lea    0x1(%rax),%ecx
  mov    -0x18(%rbp),%rdx
  mov    %ecx,(%rdx)
  movslq %eax,%rdx
  mov    -0x8(%rbp),%rax
  lea    (%rdx,%rax,1),%rsi
  mov    -0x28(%rbp),%rax
  mov    (%rax),%eax
  lea    0x1(%rax),%ecx
  mov    -0x28(%rbp),%rdx
  mov    %ecx,(%rdx)
  movslq %eax,%rdx
  mov    -0x20(%rbp),%rax
  add    %rax,%rdx
  movzbl (%rsi),%eax
  mov    %al,(%rdx)
  jmp    L111
L67:
  mov    -0x18(%rbp),%rax
  mov    (%rax),%eax
  lea    0x1(%rax),%ecx
  mov    -0x18(%rbp),%rdx
  mov    %ecx,(%rdx)
  movslq %eax,%rdx
  mov    -0x8(%rbp),%rax
  lea    (%rdx,%rax,1),%rsi
  mov    -0x28(%rbp),%rax
  mov    (%rax),%eax
  lea    0x1(%rax),%ecx
  mov    -0x28(%rbp),%rdx
  mov    %ecx,(%rdx)
  movslq %eax,%rdx
  mov    -0x20(%rbp),%rax
  add    %rax,%rdx
  movzbl (%rsi),%eax
  mov    %al,(%rdx)
  jmp    L111
L240:
  mov    -0x18(%rbp),%rax
  mov    (%rax),%eax
  movslq %eax,%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x5c,%al
  jne    L175
  mov    -0x18(%rbp),%rax
  mov    (%rax),%eax
  lea    0x1(%rax),%ecx
  mov    -0x18(%rbp),%rdx
  mov    %ecx,(%rdx)
  movslq %eax,%rdx
  mov    -0x8(%rbp),%rax
  lea    (%rdx,%rax,1),%rsi
  mov    -0x28(%rbp),%rax
  mov    (%rax),%eax
  lea    0x1(%rax),%ecx
  mov    -0x28(%rbp),%rdx
  mov    %ecx,(%rdx)
  movslq %eax,%rdx
  mov    -0x20(%rbp),%rax
  add    %rax,%rdx
  movzbl (%rsi),%eax
  mov    %al,(%rdx)
  mov    -0x18(%rbp),%rax
  mov    (%rax),%eax
  lea    0x1(%rax),%ecx
  mov    -0x18(%rbp),%rdx
  mov    %ecx,(%rdx)
  movslq %eax,%rdx
  mov    -0x8(%rbp),%rax
  lea    (%rdx,%rax,1),%rsi
  mov    -0x28(%rbp),%rax
  mov    (%rax),%eax
  lea    0x1(%rax),%ecx
  mov    -0x28(%rbp),%rdx
  mov    %ecx,(%rdx)
  movslq %eax,%rdx
  mov    -0x20(%rbp),%rax
  add    %rax,%rdx
  movzbl (%rsi),%eax
  mov    %al,(%rdx)
  jmp    L111
L175:
  mov    -0x18(%rbp),%rax
  mov    (%rax),%eax
  lea    0x1(%rax),%ecx
  mov    -0x18(%rbp),%rdx
  mov    %ecx,(%rdx)
  movslq %eax,%rdx
  mov    -0x8(%rbp),%rax
  lea    (%rdx,%rax,1),%rsi
  mov    -0x28(%rbp),%rax
  mov    (%rax),%eax
  lea    0x1(%rax),%ecx
  mov    -0x28(%rbp),%rdx
  mov    %ecx,(%rdx)
  movslq %eax,%rdx
  mov    -0x20(%rbp),%rax
  add    %rax,%rdx
  movzbl (%rsi),%eax
  mov    %al,(%rdx)
L111:
  mov    -0x18(%rbp),%rax
  mov    (%rax),%eax
  cmp    %eax,-0xc(%rbp)
  jle    L6
  mov    -0x18(%rbp),%rax
  mov    (%rax),%eax
  movslq %eax,%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0xa,%al
  je     L6
  mov    -0x18(%rbp),%rax
  mov    (%rax),%eax
  movslq %eax,%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  test   %al,%al
  je     L6
  mov    -0x18(%rbp),%rax
  mov    (%rax),%eax
  movslq %eax,%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x2c,%al
  je     L6
  mov    -0x18(%rbp),%rax
  mov    (%rax),%eax
  movslq %eax,%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x3b,%al
  je     L6
  mov    -0x18(%rbp),%rax
  mov    (%rax),%eax
  movslq %eax,%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x7e,%al
  je     L6
  mov    -0x18(%rbp),%rax
  mov    (%rax),%eax
  movslq %eax,%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x7b,%al
  je     L6
  mov    -0x18(%rbp),%rax
  mov    (%rax),%eax
  movslq %eax,%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x7d,%al
  jne    L240
L6:
  mov    -0x28(%rbp),%rax
  mov    (%rax),%eax
  movslq %eax,%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  movb   $0x0,(%rax)
  mov    $0x61,%eax
L278:
  pop    %rbp
  ret
```

assistant: ```c
int get_token_bool(buffer, len, ptr, tokenbuf, tokenlen)
unsigned char *buffer, *tokenbuf;
int len, *ptr, *tokenlen;
{
  if ((*ptr >= len) || (buffer[*ptr] == '\n') || (buffer[*ptr] == '\0'))
    return 'e';
  while ((*ptr < len) && (buffer[*ptr] != '\n') && (buffer[*ptr] != '\0') && ((buffer[*ptr] == ' ') || (buffer[*ptr] == '\t')))
    (*ptr)++;
  if ((*ptr >= len) || (buffer[*ptr] == '\n') || (buffer[*ptr] == '\0'))
    return 'e';
  if ((buffer[*ptr] == ',') || (buffer[*ptr] == ';') || (buffer[*ptr] == '~') || (buffer[*ptr] == '{') || (buffer[*ptr] == '}')) {
    tokenbuf[0] = buffer[*ptr];
    *tokenlen = 1;
    return buffer[(*ptr)++];
  }
  *tokenlen = 0;
  if (buffer[*ptr] == '\\') {
    tokenbuf[(*tokenlen)++] = buffer[(*ptr)++];
    tokenbuf[(*tokenlen)++] = buffer[(*ptr)++];
  } else
    tokenbuf[(*tokenlen)++] = buffer[(*ptr)++];
  while ((*ptr < len) && (buffer[*ptr] != '\n') && (buffer[*ptr] != '\0') && (buffer[*ptr] != ',') && (buffer[*ptr] != ';') && (buffer[*ptr] != '~') && (buffer[*ptr] != '{') && (buffer[*ptr] != '}')) {
    if (buffer[*ptr] == '\\') {
      tokenbuf[(*tokenlen)++] = buffer[(*ptr)++];
      tokenbuf[(*tokenlen)++] = buffer[(*ptr)++];
    } else
      tokenbuf[(*tokenlen)++] = buffer[(*ptr)++];
  }
  tokenbuf[*tokenlen] = '\0';
  return 'a';
}
```