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

```asm
<main>:
  endbr64
  push   %r12
  lea    D47(%rip),%r12
  push   %rbp
  movq   %r12,%xmm0
  mov    %edi,%ebp
  push   %rbx
  mov    %rsi,%rbx
  sub    $0xf0,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0xe8(%rsp)
  xor    %eax,%eax
  lea    D11(%rip),%rax
  lea    0x1c(%rsp),%rdi
  movq   %rax,%xmm1
  punpcklqdq %xmm1,%xmm0
  movaps %xmm0,(%rsp)
  call   <sysinfo@plt>
  lea    0x20(%rsp),%rsi
  lea    D158(%rip),%rdi
  call   <statvfs@plt>
  cmpq   $0x0,0x8(%rbx)
  je     L126
L96:
  cmp    $0x1,%ebp
  jg     L33
L105:
  mov    0xe8(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L29
  add    $0xf0,%rsp
  xor    %eax,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  ret
L33:
  mov    0x8(%rbx),%rdi
  mov    $0x5,%edx
  lea    D198(%rip),%rsi
  call   <strncmp@plt>
  test   %rax,%rax
  je     L119
L78:
  mov    0x8(%rbx),%rdi
  mov    $0x5,%edx
  lea    D83(%rip),%rsi
  call   <strncmp@plt>
  test   %rax,%rax
  je     L79
L132:
  mov    0x8(%rbx),%rdi
  mov    $0x5,%edx
  lea    D123(%rip),%rsi
  call   <strncmp@plt>
  test   %rax,%rax
  je     L88
L48:
  mov    0x8(%rbx),%rdi
  mov    $0x5,%edx
  lea    D167(%rip),%rsi
  call   <strncmp@plt>
  test   %rax,%rax
  je     L93
L111:
  mov    0x8(%rbx),%rdi
  mov    $0x5,%edx
  lea    D133(%rip),%rsi
  call   <strncmp@plt>
  test   %rax,%rax
  jne    L105
  mov    0x30(%rsp),%rax
  imul   0x38(%rsp),%rax
  xor    %edx,%edx
  mov    $0x3b9aca00,%ecx
  lea    D74(%rip),%rdi
  div    %rcx
  xor    %edx,%edx
  mov    %rax,%r8
  mov    0x20(%rsp),%rax
  imul   0x28(%rsp),%rax
  div    %rcx
  mov    %r8,%rdx
  mov    %rax,%rsi
  xor    %eax,%eax
  call   <printf@plt>
  lea    D16(%rip),%rdi
  xor    %r9d,%r9d
  lea    D43(%rip),%r8
  lea    D17(%rip),%rcx
  lea    D113(%rip),%rdx
  mov    %rdi,%rsi
  call   <execl@plt>
  jmp    L105
L126:
  xor    %eax,%eax
  call   <menu@plt>
  jmp    L96
L93:
  lea    D63(%rip),%rbp
  lea    D27(%rip),%rdi
  call   <puts@plt>
  mov    %rbp,%rdi
  call   <puts@plt>
  xor    %eax,%eax
  call   <iface@plt>
  lea    D162(%rip),%rdi
  call   <puts@plt>
  mov    %rbp,%rdi
  call   <puts@plt>
  mov    $0x2,%esi
  lea    D31(%rip),%rdi
  call   <kernel@plt>
  jmp    L111
L88:
  lea    0x60(%rsp),%rbp
  mov    $0x80,%esi
  mov    %rbp,%rdi
  call   <gethostname@plt>
  mov    %rbp,%rsi
  lea    D70(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  jmp    L48
L79:
  xor    %eax,%eax
  call   <information@plt>
  xor    %eax,%eax
  call   <gnu_get_libc_version@plt>
  lea    D110(%rip),%rdi
  mov    %rax,%rsi
  xor    %eax,%eax
  call   <printf@plt>
  xor    %eax,%eax
  call   <stuff@plt>
  jmp    L132
L119:
  lea    D29(%rip),%rdi
  call   <puts@plt>
  movdqa (%rsp),%xmm2
  lea    0x40(%rsp),%rsi
  mov    %r12,%rdi
  movq   $0x0,0x50(%rsp)
  movaps %xmm2,0x40(%rsp)
  call   <execvp@plt>
  jmp    L78
L29:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: disassemble_data
arguments: label: D47
type: string
name: disassemble_data
arguments: label: D11
type: string
name: disassemble_data
arguments: label: D158
type: string
name: disassemble_data
arguments: label: D198
type: string
name: disassemble_data
arguments: label: D83
type: string
name: disassemble_data
arguments: label: D123
type: string
name: disassemble_data
arguments: label: D167
type: string
name: disassemble_data
arguments: label: D133
type: string
name: disassemble_data
arguments: label: D74
type: string
name: disassemble_data
arguments: label: D16
type: string
name: disassemble_data
arguments: label: D43
type: string
name: disassemble_data
arguments: label: D17
type: string
name: disassemble_data
arguments: label: D113
type: string
name: disassemble_data
arguments: label: D63
type: string
name: disassemble_data
arguments: label: D27
type: string
name: disassemble_data
arguments: label: D162
type: string
name: disassemble_data
arguments: label: D31
type: string
name: disassemble_data
arguments: label: D70
type: string
name: disassemble_data
arguments: label: D110
type: string
name: disassemble_data
arguments: label: D29
type: string

tool: D47: cat

tool: D11: /proc/net/arp

tool: D158: /

tool: D198: --arp

tool: D83: --system

tool: D123: --hostname

tool: D167: --ip

tool: D133: --disks

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



tool: D16: /bin/lsblk

tool: D43: -n

tool: D17: -S

tool: D113: -d

tool: D63: -----------------------------------------------------



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

tool: D162: Printing the TCP table.

tool: D31: /proc/net/tcp

tool: D70: Hostname: %s


tool: D110: GNU libc version: %s


tool: D29: This is the routing table.

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;
}
```