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

```asm
<thirteen>:
  endbr64
  sub    $0x28,%rsp
  lea    D10(%rip),%rdi
  mov    %fs:0x28,%rax
  mov    %rax,0x18(%rsp)
  xor    %eax,%eax
  call   <printf@plt>
  lea    0x10(%rsp),%rcx
  lea    0x8(%rsp),%rsi
  lea    0xc(%rsp),%rdx
  lea    0x14(%rsp),%r8
  lea    D11(%rip),%rdi
  call   <scanf@plt>
  movss  0xc(%rsp),%xmm1
  movss  0x8(%rsp),%xmm0
  lea    D6(%rip),%rdi
  addss  0x14(%rsp),%xmm1
  addss  0x10(%rsp),%xmm0
  mov    $0x2,%eax
  cvtss2sd %xmm0,%xmm0
  cvtss2sd %xmm1,%xmm1
  call   <printf@plt>
  movss  0xc(%rsp),%xmm1
  movss  0x8(%rsp),%xmm0
  subss  0x14(%rsp),%xmm1
  mov    $0x2,%eax
  lea    D35(%rip),%rdi
  subss  0x10(%rsp),%xmm0
  cvtss2sd %xmm1,%xmm1
  cvtss2sd %xmm0,%xmm0
  call   <printf@plt>
  movss  0xc(%rsp),%xmm3
  movss  0x8(%rsp),%xmm0
  movss  0x10(%rsp),%xmm4
  movss  0x14(%rsp),%xmm2
  mov    $0x2,%eax
  lea    D16(%rip),%rdi
  movaps %xmm3,%xmm5
  movaps %xmm0,%xmm1
  mulss  %xmm4,%xmm5
  mulss  %xmm4,%xmm0
  mulss  %xmm2,%xmm1
  mulss  %xmm3,%xmm2
  addss  %xmm5,%xmm1
  subss  %xmm2,%xmm0
  cvtss2sd %xmm1,%xmm1
  cvtss2sd %xmm0,%xmm0
  call   <printf@plt>
  movss  0x10(%rsp),%xmm4
  movss  0x14(%rsp),%xmm0
  movss  0xc(%rsp),%xmm5
  movss  0x8(%rsp),%xmm2
  mov    $0x2,%eax
  lea    D56(%rip),%rdi
  movaps %xmm4,%xmm3
  movaps %xmm0,%xmm1
  mulss  %xmm4,%xmm3
  movaps %xmm2,%xmm6
  mulss  %xmm0,%xmm1
  mulss  %xmm0,%xmm6
  mulss  %xmm4,%xmm2
  mulss  %xmm5,%xmm0
  addss  %xmm1,%xmm3
  movaps %xmm5,%xmm1
  mulss  %xmm4,%xmm1
  addss  %xmm0,%xmm2
  pxor   %xmm0,%xmm0
  subss  %xmm6,%xmm1
  divss  %xmm3,%xmm2
  divss  %xmm3,%xmm1
  cvtss2sd %xmm2,%xmm0
  cvtss2sd %xmm1,%xmm1
  call   <printf@plt>
  xor    %eax,%eax
  call   <getchar@plt>
  xor    %eax,%eax
  lea    D23(%rip),%rdi
  call   <printf@plt>
  xor    %eax,%eax
  call   <getchar@plt>
  mov    0x18(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L4
  add    $0x28,%rsp
  ret
L4:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: extract_symbolic_data
arguments: data_label: D10
type: string
name: extract_symbolic_data
arguments: data_label: D11
type: string
name: extract_symbolic_data
arguments: data_label: D6
type: string
name: extract_symbolic_data
arguments: data_label: D35
type: string
name: extract_symbolic_data
arguments: data_label: D16
type: string
name: extract_symbolic_data
arguments: data_label: D56
type: string
name: extract_symbolic_data
arguments: data_label: D23
type: string

tool: D10: enter real, imaginary coefficients of 2 complex numbers (float): 

tool: D11: %f%f%f%f

tool: D6: 
generated sum		= % 09.2f %+09.2f i


tool: D35: generated difference	= % 09.2f %+09.2f i


tool: D16: generated product	= % 09.2f %+09.2f i


tool: D56: generated quotient	= % 09.2f %+09.2f i


tool: D23: 
returning to menu. press Enter...

assistant: ```c
void thirteen() {
  struct complex {
    float x, y;
  } z1, z2;
  printf("enter real, imaginary coefficients of 2 complex numbers (float): ");
  scanf("%f%f%f%f", &z1.x, &z1.y, &z2.x, &z2.y);
  printf("\ngenerated sum\t\t= % 09.2f %+09.2f i\n", (z1.x + z2.x), (z1.y + z2.y));
  printf("generated difference\t= % 09.2f %+09.2f i\n", (z1.x - z2.x), (z1.y - z2.y));
  printf("generated product\t= % 09.2f %+09.2f i\n", (z1.x * z2.x - z1.y * z2.y), (z1.x * z2.y + z1.y * z2.x));
  printf("generated quotient\t= % 09.2f %+09.2f i\n", (z1.x * z2.x + z1.y * z2.y) / (z2.x * z2.x + z2.y * z2.y), (-z1.x * z2.y + z1.y * z2.x) / (z2.x * z2.x + z2.y * z2.y));
  getchar();
  printf("\nreturning to menu. press Enter...");
  getchar();
}
```