user: 请将这段汇编代码片段转换成等效的C代码：

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x20,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  lea    D65(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  jmp    L34
L21:
  lea    D166(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    D47(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    D149(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    D121(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    D105(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    D74(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    -0x14(%rbp),%rax
  mov    %rax,%rsi
  lea    D43(%rip),%rax
  mov    %rax,%rdi
  call   <scanf@plt>
  lea    D156(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    -0x14(%rbp),%eax
  cmp    $0x5,%eax
  je     L8
  lea    -0x10(%rbp),%rax
  mov    %rax,%rsi
  lea    D43(%rip),%rax
  mov    %rax,%rdi
  call   <scanf@plt>
  lea    D23(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    -0xc(%rbp),%rax
  mov    %rax,%rsi
  lea    D43(%rip),%rax
  mov    %rax,%rdi
  call   <scanf@plt>
  mov    -0x14(%rbp),%eax
  cmp    $0x1,%eax
  jne    L102
  mov    -0x10(%rbp),%edx
  mov    -0xc(%rbp),%eax
  mov    %edx,%ecx
  imul   %eax,%ecx
  mov    -0xc(%rbp),%edx
  mov    -0x10(%rbp),%eax
  mov    %eax,%esi
  lea    D31(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0x0,%eax
  call   <getchar@plt>
  mov    %al,-0x16(%rbp)
  jmp    L45
L102:
  mov    -0x14(%rbp),%eax
  cmp    $0x2,%eax
  jne    L10
  mov    -0x10(%rbp),%eax
  mov    -0xc(%rbp),%esi
  cltd
  idiv   %esi
  mov    %eax,%ecx
  mov    -0xc(%rbp),%edx
  mov    -0x10(%rbp),%eax
  mov    %eax,%esi
  lea    D30(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0x0,%eax
  call   <getchar@plt>
  mov    %al,-0x17(%rbp)
  jmp    L45
L10:
  mov    -0x14(%rbp),%eax
  cmp    $0x3,%eax
  jne    L31
  mov    -0x10(%rbp),%edx
  mov    -0xc(%rbp),%eax
  lea    (%rdx,%rax,1),%ecx
  mov    -0xc(%rbp),%edx
  mov    -0x10(%rbp),%eax
  mov    %eax,%esi
  lea    D91(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0x0,%eax
  call   <getchar@plt>
  mov    %al,-0x18(%rbp)
  jmp    L45
L31:
  mov    -0x14(%rbp),%eax
  cmp    $0x4,%eax
  jne    L112
  mov    -0x10(%rbp),%eax
  mov    -0xc(%rbp),%edx
  sub    %edx,%eax
  mov    %eax,%ecx
  mov    -0xc(%rbp),%edx
  mov    -0x10(%rbp),%eax
  mov    %eax,%esi
  lea    D161(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0x0,%eax
  call   <getchar@plt>
  mov    %al,-0x19(%rbp)
  jmp    L45
L112:
  lea    D141(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
L45:
  mov    $0x0,%eax
  call   <getchar@plt>
  mov    %al,-0x15(%rbp)
L34:
  mov    -0x14(%rbp),%eax
  cmp    $0x5,%eax
  jne    L21
  jmp    L3
L8:
  nop
L3:
  mov    $0x0,%eax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L128
  call   <__stack_chk_fail@plt>
L128:
  leave
  ret
```

tool_calls: name: parse_data
arguments: tag: D65
datatype: string
name: parse_data
arguments: tag: D166
datatype: string
name: parse_data
arguments: tag: D47
datatype: string
name: parse_data
arguments: tag: D149
datatype: string
name: parse_data
arguments: tag: D121
datatype: string
name: parse_data
arguments: tag: D105
datatype: string
name: parse_data
arguments: tag: D74
datatype: string
name: parse_data
arguments: tag: D43
datatype: string
name: parse_data
arguments: tag: D156
datatype: string
name: parse_data
arguments: tag: D23
datatype: string
name: parse_data
arguments: tag: D31
datatype: string
name: parse_data
arguments: tag: D30
datatype: string
name: parse_data
arguments: tag: D91
datatype: string
name: parse_data
arguments: tag: D161
datatype: string
name: parse_data
arguments: tag: D141
datatype: string

tool: D65: Hello and welcome to Sapein's Simple Calculator Program!

tool: D166: Please enter one of the below options to get started!

tool: D47: 1.Multiplication

tool: D149: 2.Division

tool: D121: 3.Addition

tool: D105: 4.Subtraction

tool: D74: 5.Exit

tool: D43:  %d

tool: D156: 
First Number: 

tool: D23: 
Second Number:

tool: D31: %d * %d = %d

tool: D30: %d / %d = %d

tool: D91: %d + %d = %d

tool: D161: %d - %d = %d

tool: D141: Wrong Input

assistant: ```c
int main() {
  int choice;
  int firstNumber;
  int secondNumber;
  printf("Hello and welcome to Sapein's Simple Calculator Program!\n");
  while (choice != 5) {
    printf("Please enter one of the below options to get started!\n");
    printf("1.Multiplication\n");
    printf("2.Division\n");
    printf("3.Addition\n");
    printf("4.Subtraction\n");
    printf("5.Exit\n");
    scanf(" %d", &choice);
    printf("\nFirst Number: ");
    if (choice == 5) {
      break;
    }
    scanf(" %d", &firstNumber);
    printf("\nSecond Number:");
    scanf(" %d", &secondNumber);
    if (choice == 1) {
      printf("%d * %d = %d", firstNumber, secondNumber, firstNumber * secondNumber);
      char wait = getchar();
    } else if (choice == 2) {
      printf("%d / %d = %d", firstNumber, secondNumber, firstNumber / secondNumber);
      char wait = getchar();
    } else if (choice == 3) {
      printf("%d + %d = %d", firstNumber, secondNumber, firstNumber + secondNumber);
      char wait = getchar();
    } else if (choice == 4) {
      printf("%d - %d = %d", firstNumber, secondNumber, firstNumber - secondNumber);
      char wait = getchar();
    } else {
      printf("Wrong Input");
    }
    char wait = getchar();
  }
  return 0;
}
```