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

```asm
<main>:
  endbr64
  push   %rbp
  mov    %edi,%ebp
  push   %rbx
  mov    %rsi,%rbx
  sub    $0xe8,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0xd8(%rsp)
  xor    %eax,%eax
  lea    0xc(%rsp),%rdi
  call   <sysinfo@plt>
  lea    0x10(%rsp),%rsi
  lea    D110(%rip),%rdi
  call   <statvfs@plt>
  cmpq   $0x0,0x8(%rbx)
  je     L57
L137:
  cmp    $0x1,%ebp
  jg     L22
L103:
  mov    0xd8(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L131
  add    $0xe8,%rsp
  xor    %eax,%eax
  pop    %rbx
  pop    %rbp
  ret
L22:
  mov    0x8(%rbx),%rdi
  mov    $0x5,%edx
  lea    D9(%rip),%rsi
  call   <strncmp@plt>
  test   %rax,%rax
  je     L23
L36:
  mov    0x8(%rbx),%rdi
  mov    $0x5,%edx
  lea    D177(%rip),%rsi
  call   <strncmp@plt>
  test   %rax,%rax
  je     L130
L121:
  mov    0x8(%rbx),%rdi
  mov    $0x5,%edx
  lea    D32(%rip),%rsi
  call   <strncmp@plt>
  test   %rax,%rax
  je     L110
L61:
  mov    0x8(%rbx),%rdi
  mov    $0x5,%edx
  lea    D42(%rip),%rsi
  call   <strncmp@plt>
  test   %rax,%rax
  je     L134
L44:
  mov    0x8(%rbx),%rdi
  mov    $0x5,%edx
  lea    D103(%rip),%rsi
  call   <strncmp@plt>
  test   %rax,%rax
  jne    L103
  mov    0x20(%rsp),%rax
  imul   0x28(%rsp),%rax
  xor    %edx,%edx
  mov    $0x3b9aca00,%ecx
  lea    D17(%rip),%rdi
  div    %rcx
  xor    %edx,%edx
  mov    %rax,%r8
  mov    0x10(%rsp),%rax
  imul   0x18(%rsp),%rax
  div    %rcx
  mov    %r8,%rdx
  mov    %rax,%rsi
  xor    %eax,%eax
  call   <printf@plt>
  lea    D91(%rip),%rdi
  xor    %r9d,%r9d
  lea    D196(%rip),%r8
  lea    D127(%rip),%rcx
  lea    D11(%rip),%rdx
  mov    %rdi,%rsi
  call   <execl@plt>
  jmp    L103
L57:
  xor    %eax,%eax
  call   <menu@plt>
  jmp    L137
L134:
  lea    D166(%rip),%rbp
  lea    D2(%rip),%rdi
  call   <puts@plt>
  mov    %rbp,%rdi
  call   <puts@plt>
  xor    %eax,%eax
  call   <iface@plt>
  lea    D1(%rip),%rdi
  call   <puts@plt>
  mov    %rbp,%rdi
  call   <puts@plt>
  mov    $0x2,%esi
  lea    D85(%rip),%rdi
  call   <kernel@plt>
  jmp    L44
L110:
  lea    0x50(%rsp),%rbp
  mov    $0x80,%esi
  mov    %rbp,%rdi
  call   <gethostname@plt>
  mov    %rbp,%rsi
  lea    D143(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  jmp    L61
L130:
  xor    %eax,%eax
  call   <information@plt>
  xor    %eax,%eax
  call   <gnu_get_libc_version@plt>
  lea    D137(%rip),%rdi
  mov    %rax,%rsi
  xor    %eax,%eax
  call   <printf@plt>
  xor    %eax,%eax
  call   <stuff@plt>
  jmp    L121
L23:
  lea    D194(%rip),%rdi
  call   <puts@plt>
  lea    D145(%rip),%rdi
  lea    0x30(%rsp),%rsi
  movq   $0x0,0x40(%rsp)
  lea    D58(%rip),%rax
  mov    %rdi,0x30(%rsp)
  mov    %rax,0x38(%rsp)
  call   <execvp@plt>
  jmp    L36
L131:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: retrieve_data
arguments: label: D110
type_guessed: string
name: retrieve_data
arguments: label: D9
type_guessed: string
name: retrieve_data
arguments: label: D177
type_guessed: string
name: retrieve_data
arguments: label: D32
type_guessed: string
name: retrieve_data
arguments: label: D42
type_guessed: string
name: retrieve_data
arguments: label: D103
type_guessed: string
name: retrieve_data
arguments: label: D17
type_guessed: string
name: retrieve_data
arguments: label: D91
type_guessed: string
name: retrieve_data
arguments: label: D196
type_guessed: string
name: retrieve_data
arguments: label: D127
type_guessed: string
name: retrieve_data
arguments: label: D11
type_guessed: string
name: retrieve_data
arguments: label: D166
type_guessed: string
name: retrieve_data
arguments: label: D2
type_guessed: string
name: retrieve_data
arguments: label: D1
type_guessed: string
name: retrieve_data
arguments: label: D85
type_guessed: string
name: retrieve_data
arguments: label: D143
type_guessed: string
name: retrieve_data
arguments: label: D137
type_guessed: string
name: retrieve_data
arguments: label: D194
type_guessed: string
name: retrieve_data
arguments: label: D145
type_guessed: string
name: retrieve_data
arguments: label: D58
type_guessed: string

tool: D110: /

tool: D9: --arp

tool: D177: --system

tool: D32: --hostname

tool: D42: --ip

tool: D103: --disks

tool: D17: The HDD size is %lu gigabytes, and has %lu gigabytes free.



tool: D91: /bin/lsblk

tool: D196: -n

tool: D127: -S

tool: D11: -d

tool: D166: -----------------------------------------------------



tool: D2: Printing the IP addresse(s) on the machine.

tool: D1: Printing the TCP table.

tool: D85: /proc/net/tcp

tool: D143: Hostname: %s


tool: D137: GNU libc version: %s


tool: D194: This is the routing table.

tool: D145: cat

tool: D58: /proc/net/arp

assistant: ```c
int main(int argc, char **argv) {
  char hostname[128];
  unsigned long hdd_size;
  unsigned long hdd_free;
  struct sysinfo info;
  sysinfo(&info);
  struct statvfs fsinfo;
  statvfs("/", &fsinfo);
  if (argv[1] == NULL) {
    menu();
  }
  if (argc > 1 && strncmp(argv[1], "--arp", 0x05) == 0) {
    printf("This is the routing table.\n");
    char *arg[] = {"cat", "/proc/net/arp", NULL};
    execvp(arg[0], arg);
  }
  if (argc > 1 && strncmp(argv[1], "--system", 0x05) == 0) {
    information();
    printf("GNU libc version: %s\n", gnu_get_libc_version());
    stuff();
  }
  if (argc > 1 && strncmp(argv[1], "--hostname", 0x05) == 0) {
    gethostname(hostname, sizeof hostname);
    printf("Hostname: %s\n", hostname);
  }
  if (argc > 1 && strncmp(argv[1], "--ip", 0x05) == 0) {
    printf("Printing the IP addresse(s) on the machine.\n");
    printf("-----------------------------------------------------\n\n\n");
    iface();
    printf("Printing the TCP table.\n");
    printf("-----------------------------------------------------\n\n\n");
    kernel("/proc/net/tcp", 2);
  }
  if (argc > 1 && strncmp(argv[1], "--disks", 0x05) == 0) {
    hdd_size = fsinfo.f_frsize * fsinfo.f_blocks;
    hdd_free = fsinfo.f_bsize * fsinfo.f_bfree;
    unsigned long capacity = hdd_size / 1000 / 1000 / 1000;
    unsigned long freesize = hdd_free / 1000 / 1000 / 1000;
    printf("The HDD size is %lu gigabytes, and has %lu gigabytes free.\n\n", capacity, freesize);
    execl("/bin/lsblk", "/bin/lsblk", "-d", "-S", "-n", NULL);
  }
  return 0;
}
```