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

```asm
<performOperation>:
  endbr64
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  mov    %edi,%ebx
  sub    $0x10,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x8(%rsp)
  xor    %eax,%eax
  cmp    $0x5,%edi
  jne    L216
  jmp    L226
  nopl   0x0(%rax)
L79:
  xor    %eax,%eax
  call   <ErrorMessage@plt>
  xor    %eax,%eax
  call   <getMenuOption@plt>
  mov    %eax,%ebx
L216:
  lea    -0x1(%rbx),%eax
  cmp    $0x4,%eax
  ja     L79
  cmp    $0x3,%ebx
  je     L222
  jg     L54
  cmp    $0x1,%ebx
  je     L47
  cmp    $0x2,%ebx
  jne    L217
  lea    D48(%rip),%rdi
  call   <printf@plt>
  nopl   (%rax)
L1:
  lea    0x4(%rsp),%r13
  mov    %rsp,%r12
  lea    D31(%rip),%rbp
  lea    D27(%rip),%r14
  jmp    L95
L203:
  mov    %r14,%rdi
  call   <printf@plt>
  xor    %eax,%eax
  call   <discardUnnecessaryInput@plt>
L95:
  mov    %r13,%rdx
  mov    %r12,%rsi
  mov    %rbp,%rdi
  call   <scanf@plt>
  cmp    $0x2,%eax
  jne    L203
  cmp    $0x3,%ebx
  je     L108
  jg     L70
  cmp    $0x1,%ebx
  je     L161
  cmp    $0x2,%ebx
  jne    L235
  movss  0x4(%rsp),%xmm1
  movss  (%rsp),%xmm0
  call   <Subtraction@plt>
  nopl   0x0(%rax,%rax,1)
L235:
  mov    0x8(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L12
  add    $0x10,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  ret
  nopl   0x0(%rax)
L70:
  cmp    $0x4,%ebx
  jne    L235
  movss  0x4(%rsp),%xmm1
  movss  (%rsp),%xmm0
  call   <Division@plt>
  jmp    L235
  nop
L54:
  cmp    $0x4,%ebx
  jne    L77
  lea    D4(%rip),%rdi
  call   <printf@plt>
  jmp    L1
  nopw   0x0(%rax,%rax,1)
L47:
  lea    D10(%rip),%rdi
  call   <printf@plt>
  jmp    L1
  nopl   0x0(%rax)
L226:
  xor    %eax,%eax
  call   <Exit@plt>
  jmp    L1
  nopl   0x0(%rax)
L222:
  lea    D43(%rip),%rdi
  call   <printf@plt>
  jmp    L1
  nopl   0x0(%rax)
L161:
  movss  0x4(%rsp),%xmm1
  movss  (%rsp),%xmm0
  call   <Add@plt>
  jmp    L235
  nopl   (%rax)
L108:
  movss  0x4(%rsp),%xmm1
  movss  (%rsp),%xmm0
  call   <Multiplication@plt>
  jmp    L235
L77:
  mov    $0x5,%ebx
  jmp    L1
L12:
  call   <__stack_chk_fail@plt>
L217:
  mov    $0x3,%ebx
  jmp    L1
```

tool_calls: name: retrieve_data
arguments: data_tag: D48
type_infered: string
name: retrieve_data
arguments: data_tag: D31
type_infered: string
name: retrieve_data
arguments: data_tag: D27
type_infered: string
name: retrieve_data
arguments: data_tag: D4
type_infered: string
name: retrieve_data
arguments: data_tag: D10
type_infered: string
name: retrieve_data
arguments: data_tag: D43
type_infered: string

tool: D48: 
Please enter two numbers for Subtraction, separated by a space: 

tool: D31: %f %f

tool: D27: 
Error reading your numbers, please re-enter both numbers: 

tool: D4: 
Please enter two numbers for Division, separated by a space: 

tool: D10: 
Please enter two numbers for Addition, separated by a space: 

tool: D43: 
Please enter two numbers for Multiplication, separated by a space: 

assistant: ```c
void performOperation(int i) {
  if (i == 5) {
    Exit();
  }
  while ((i < 1) || (i > 5)) {
    ErrorMessage();
    i = getMenuOption();
  }
  float num1, num2;
  switch (i) {
  case 1:
    printf("\nPlease enter two numbers for Addition, separated by a space: ");
    break;
  case 2:
    printf("\nPlease enter two numbers for Subtraction, separated by a space: ");
    break;
  case 3:
    printf("\nPlease enter two numbers for Multiplication, separated by a space: ");
    break;
  case 4:
    printf("\nPlease enter two numbers for Division, separated by a space: ");
    break;
  default:
    break;
  }
  while (2 != scanf("%f %f", &num1, &num2)) {
    printf("\nError reading your numbers, please re-enter both numbers: ");
    discardUnnecessaryInput();
  }
  switch (i) {
  case 1:
    Add(num1, num2);
    break;
  case 2:
    Subtraction(num1, num2);
    break;
  case 3:
    Multiplication(num1, num2);
    break;
  case 4:
    Division(num1, num2);
    break;
  default:
    break;
  }
}
```