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

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x20,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  lea    D67(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    D19(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    D23(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    D24(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    -0x10(%rbp),%rax
  mov    %rax,%rsi
  lea    D65(%rip),%rax
  mov    %rax,%rdi
  call   <scanf@plt>
  lea    D89(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    -0x18(%rbp),%rax
  mov    %rax,%rsi
  lea    D65(%rip),%rax
  mov    %rax,%rdi
  call   <scanf@plt>
  lea    D51(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    -0x14(%rbp),%rax
  mov    %rax,%rsi
  lea    D65(%rip),%rax
  mov    %rax,%rdi
  call   <scanf@plt>
  mov    -0x10(%rbp),%eax
  cmp    $0x1,%eax
  jne    L30
  mov    -0x14(%rbp),%edx
  mov    -0x18(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  call   <addition@plt>
  mov    %eax,-0xc(%rbp)
  mov    -0xc(%rbp),%eax
  mov    %eax,%esi
  lea    D37(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L10
L30:
  mov    -0x10(%rbp),%eax
  cmp    $0x2,%eax
  jne    L1
  mov    -0x14(%rbp),%edx
  mov    -0x18(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  call   <sub@plt>
  mov    %eax,-0xc(%rbp)
  mov    -0xc(%rbp),%eax
  mov    %eax,%esi
  lea    D104(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L10
L1:
  lea    D116(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
L10:
  mov    $0x0,%eax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L47
  call   <__stack_chk_fail@plt>
L47:
  leave
  ret
```

tool_calls: name: retrieve_data
arguments: tag: D67
type: string
name: retrieve_data
arguments: tag: D19
type: string
name: retrieve_data
arguments: tag: D23
type: string
name: retrieve_data
arguments: tag: D24
type: string
name: retrieve_data
arguments: tag: D65
type: string
name: retrieve_data
arguments: tag: D89
type: string
name: retrieve_data
arguments: tag: D51
type: string
name: retrieve_data
arguments: tag: D37
type: string
name: retrieve_data
arguments: tag: D104
type: string
name: retrieve_data
arguments: tag: D116
type: string

tool: D67: Your options

tool: D19: 
* 1 = Addition;

tool: D23: 
* 2 = Subtraction;

tool: D24: 
Please, select an option:

tool: D65: %d

tool: D89: Please, insert the primary number:

tool: D51: 
Please, insert the secundary number:

tool: D37: The addition is: %d


tool: D104: The sub is: %d


tool: D116: You selected the invalid option!

assistant: ```c
int main() {
  int x;
  int y;
  int option;
  int total;
  printf("Your options");
  printf("\n* 1 = Addition;");
  printf("\n* 2 = Subtraction;");
  printf("\nPlease, select an option:");
  scanf("%d", &option);
  printf("Please, insert the primary number:");
  scanf("%d", &x);
  printf("\nPlease, insert the secundary number:");
  scanf("%d", &y);
  if (option == 1) {
    total = addition(x, y);
    printf("The addition is: %d\n", total);
  } else if (option == 2) {
    total = sub(x, y);
    printf("The sub is: %d\n", total);
  } else {
    printf("You selected the invalid option!");
  }
}
```