user: What is the c source code of the assembly code below:

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x10,%rsp
  mov    %edi,-0x4(%rbp)
  mov    %rsi,-0x10(%rbp)
  cmpl   $0x1,-0x4(%rbp)
  jg     L105
  mov    $0x0,%eax
  call   <prefixdb_help@plt>
  jmp    L95
L47:
  mov    -0x10(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%rdx
  add    $0x1,%rdx
  mov    %rdx,(%rax)
L105:
  mov    -0x10(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%rax
  movzbl (%rax),%eax
  cmp    $0x2d,%al
  je     L47
  mov    -0x10(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  mov    %eax,%edx
  mov    -0x10(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%rax
  lea    D12(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncasecmp@plt>
  test   %eax,%eax
  jne    L83
  mov    $0x0,%eax
  call   <prefixdb_help@plt>
  jmp    L95
L83:
  mov    -0x10(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  mov    %eax,%edx
  mov    -0x10(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%rax
  lea    D31(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncasecmp@plt>
  test   %eax,%eax
  jne    L94
  mov    $0x0,%eax
  call   <prefixdb_bench@plt>
  jmp    L95
L94:
  mov    -0x10(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  mov    %eax,%edx
  mov    -0x10(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%rax
  lea    D23(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncasecmp@plt>
  test   %eax,%eax
  jne    L51
  cmpl   $0x4,-0x4(%rbp)
  je     L30
  mov    $0x0,%eax
  call   <prefixdb_help@plt>
  jmp    L95
L30:
  mov    -0x10(%rbp),%rax
  add    $0x18,%rax
  mov    (%rax),%rdx
  mov    -0x10(%rbp),%rax
  add    $0x10,%rax
  mov    (%rax),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <prefixdb_import@plt>
  jmp    L95
L51:
  mov    -0x10(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  mov    %eax,%edx
  mov    -0x10(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%rax
  lea    D18(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncasecmp@plt>
  test   %eax,%eax
  jne    L63
  cmpl   $0x3,-0x4(%rbp)
  jg     L59
  mov    $0x0,%eax
  call   <prefixdb_help@plt>
  jmp    L95
L59:
  mov    -0x10(%rbp),%rax
  lea    0x18(%rax),%rdx
  mov    -0x10(%rbp),%rax
  add    $0x10,%rax
  mov    (%rax),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <prefixdb_search@plt>
  jmp    L95
L63:
  mov    $0x0,%eax
  call   <prefixdb_help@plt>
L95:
  leave
  ret
```

tool_calls: name: parse_data
arguments: data_tag: D12
datatype: string
name: parse_data
arguments: data_tag: D31
datatype: string
name: parse_data
arguments: data_tag: D23
datatype: string
name: parse_data
arguments: data_tag: D18
datatype: string

tool: D12: help

tool: D31: bench

tool: D23: import

tool: D18: search

assistant: ```c
int main(int argc, char **argv) {
  if (argc < 2) {
    return prefixdb_help();
  }
  while (*(argv[1]) == '-')
    argv[1]++;
  if (!strncasecmp(argv[1], "help", strlen(argv[1]))) {
    return prefixdb_help();
  } else if (!strncasecmp(argv[1], "bench", strlen(argv[1]))) {
    return prefixdb_bench();
  } else if (!strncasecmp(argv[1], "import", strlen(argv[1]))) {
    return (argc != 4) ? prefixdb_help() : prefixdb_import(argv[2], argv[3]);
  } else if (!strncasecmp(argv[1], "search", strlen(argv[1]))) {
    return (argc < 4) ? prefixdb_help() : prefixdb_search(argv[2], argv + 3);
  }
  return prefixdb_help();
}
```