user: 请从给定的汇编指令推导出C源代码：

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0xf0,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
L14:
  lea    D34(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    -0xe4(%rbp),%rax
  mov    %rax,%rsi
  lea    D16(%rip),%rax
  mov    %rax,%rdi
  call   <scanf@plt>
  mov    $0x0,%eax
  call   <getchar@plt>
  mov    -0xe4(%rbp),%eax
  cmp    $0x1,%eax
  je     L47
  mov    -0xe4(%rbp),%eax
  test   %eax,%eax
  je     L47
  lea    D62(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
L47:
  mov    -0xe4(%rbp),%eax
  cmp    $0x1,%eax
  je     L19
  mov    -0xe4(%rbp),%eax
  test   %eax,%eax
  jne    L14
L19:
  mov    -0xe4(%rbp),%eax
  test   %eax,%eax
  je     L32
  lea    D26(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    -0xe0(%rbp),%rax
  mov    %rax,%rdi
  call   <gets@plt>
  lea    D61(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    -0x70(%rbp),%rax
  mov    %rax,%rdi
  call   <gets@plt>
  lea    -0x70(%rbp),%rdx
  lea    -0xe0(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <Compress@plt>
  jmp    L61
L32:
  lea    D47(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    -0xe0(%rbp),%rax
  mov    %rax,%rdi
  call   <gets@plt>
  lea    D3(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    -0x70(%rbp),%rax
  mov    %rax,%rdi
  call   <gets@plt>
  lea    -0x70(%rbp),%rdx
  lea    -0xe0(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <Decompress@plt>
L61:
  mov    $0x0,%eax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L42
  call   <__stack_chk_fail@plt>
L42:
  leave
  ret
```

tool_calls: name: read_data
arguments: label: D34
data_type: string
name: read_data
arguments: label: D16
data_type: string
name: read_data
arguments: label: D62
data_type: string
name: read_data
arguments: label: D26
data_type: string
name: read_data
arguments: label: D61
data_type: string
name: read_data
arguments: label: D47
data_type: string
name: read_data
arguments: label: D3
data_type: string

tool: D34: Digite 1 para COMPRIMIR ou 0 para DESCOMPRIMIR.


tool: D16: %d

tool: D62: Comando invalido!


tool: D26: Digite o caminho do arquivo que sera comprimido:


tool: D61: Digite o caminho do novo arquivo comprimido que sera criado:


tool: D47: Digite o caminho do arquivo que sera descomprimido:


tool: D3: Digite o caminho do novo arquivo descomprimido que sera criado:


assistant: ```c
int main() {
  int comp_descomp;
  do {
    printf("Digite 1 para COMPRIMIR ou 0 para DESCOMPRIMIR.\n");
    scanf("%d", &comp_descomp);
    getchar();
    if (comp_descomp != 1 && comp_descomp != 0) {
      printf("Comando invalido!\n");
    }
  } while (comp_descomp != 1 && comp_descomp != 0);
  if (comp_descomp) {
    char file_to_compress[100];
    char file_created[100];
    printf("Digite o caminho do arquivo que sera comprimido:\n");
    gets(file_to_compress);
    printf("Digite o caminho do novo arquivo comprimido que sera criado:\n");
    gets(file_created);
    Compress(file_to_compress, file_created);
  } else {
    char file_to_decompress[100];
    char decompressed_file[100];
    printf("Digite o caminho do arquivo que sera descomprimido:\n");
    gets(file_to_decompress);
    printf("Digite o caminho do novo arquivo descomprimido que sera criado:\n");
    gets(decompressed_file);
    Decompress(file_to_decompress, decompressed_file);
  }
  return 0;
}
```