user: Demonstrate the C code that generates the assembly output below:

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x10,%rsp
  mov    %edi,-0x4(%rbp)
  mov    %rsi,-0x10(%rbp)
  cmpl   $0x2,-0x4(%rbp)
  jne    L47
  mov    -0x10(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%rax
  mov    %rax,%rsi
  lea    D26(%rip),%rax
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L23
  mov    $0x0,%eax
  call   <test_list@plt>
  jmp    L20
L23:
  mov    -0x10(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%rax
  mov    %rax,%rsi
  lea    D31(%rip),%rax
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L18
  mov    $0x0,%eax
  call   <test_file@plt>
  jmp    L20
L18:
  mov    -0x10(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%rax
  mov    %rax,%rsi
  lea    D68(%rip),%rax
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L12
  mov    $0x0,%eax
  call   <test_str@plt>
  jmp    L20
L12:
  mov    -0x10(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%rax
  mov    %rax,%rsi
  lea    D10(%rip),%rax
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L8
  mov    $0x0,%eax
  call   <test_kernel@plt>
  jmp    L20
L8:
  mov    -0x10(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%rax
  mov    %rax,%rsi
  lea    D60(%rip),%rax
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L70
  mov    $0x0,%eax
  call   <test_net@plt>
  jmp    L20
L70:
  mov    -0x10(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%rax
  mov    %rax,%rsi
  lea    D48(%rip),%rax
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L20
  mov    $0x0,%eax
  call   <test_list@plt>
  mov    $0x0,%eax
  call   <test_file@plt>
  mov    $0x0,%eax
  call   <test_str@plt>
  mov    $0x0,%eax
  call   <test_kernel@plt>
  mov    $0x0,%eax
  call   <test_net@plt>
  jmp    L20
L47:
  mov    -0x10(%rbp),%rax
  mov    (%rax),%rax
  mov    %rax,%rsi
  lea    D49(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
L20:
  mov    $0x0,%eax
  leave
  ret
```

tool_calls: name: parse_data
arguments: label: D26
datatype: string
name: parse_data
arguments: label: D31
datatype: string
name: parse_data
arguments: label: D68
datatype: string
name: parse_data
arguments: label: D10
datatype: string
name: parse_data
arguments: label: D60
datatype: string
name: parse_data
arguments: label: D48
datatype: string
name: parse_data
arguments: label: D49
datatype: string

tool: D26: list

tool: D31: file

tool: D68: str

tool: D10: kernel

tool: D60: net

tool: D48: all

tool: D49: usage: %s [test]


assistant: ```c
int main(int argc, char **argv) {
  if (argc == 2) {
    if (strcmp("list", argv[1]) == 0) {
      test_list();
    } else if (strcmp("file", argv[1]) == 0) {
      test_file();
    } else if (strcmp("str", argv[1]) == 0) {
      test_str();
    } else if (strcmp("kernel", argv[1]) == 0) {
      test_kernel();
    } else if (strcmp("net", argv[1]) == 0) {
      test_net();
    } else if (strcmp("all", argv[1]) == 0) {
      test_list();
      test_file();
      test_str();
      test_kernel();
      test_net();
    }
  } else {
    printf("usage: %s [test]\n", argv[0]);
  }
  return 0;
}
```