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

```asm
<main>:
  endbr64
  sub    $0x98,%rsp
  movsd  D118(%rip),%xmm1
  movsd  D158(%rip),%xmm0
  mov    %fs:0x28,%rax
  mov    %rax,0x88(%rsp)
  xor    %eax,%eax
  lea    0x20(%rsp),%rcx
  mov    %rsp,%rdx
  lea    0x40(%rsp),%rsi
  mov    D95(%rip),%rax
  lea    0x60(%rsp),%rdi
  movq   $0x0,0x50(%rsp)
  mov    %rax,(%rsp)
  mov    D191(%rip),%rax
  mov    %rax,0x8(%rsp)
  mov    D106(%rip),%rax
  mov    %rax,0x10(%rsp)
  mov    D180(%rip),%rax
  mov    %rax,0x20(%rsp)
  mov    D48(%rip),%rax
  mov    %rax,0x28(%rsp)
  mov    D128(%rip),%rax
  mov    %rax,0x30(%rsp)
  mov    D198(%rip),%rax
  mov    %rax,0x40(%rsp)
  mov    D184(%rip),%rax
  mov    %rax,0x48(%rsp)
  mov    D112(%rip),%rax
  mov    %rax,0x60(%rsp)
  mov    D114(%rip),%rax
  mov    %rax,0x68(%rsp)
  mov    D169(%rip),%rax
  mov    %rax,0x70(%rsp)
  mov    D42(%rip),%rax
  mov    %rax,0x78(%rsp)
  call   <estimate_ncf@plt>
  movsd  0x78(%rsp),%xmm3
  mov    $0x4,%eax
  movsd  0x70(%rsp),%xmm2
  movsd  0x68(%rsp),%xmm1
  movsd  0x60(%rsp),%xmm0
  lea    D139(%rip),%rdi
  call   <printf@plt>
  mov    D42(%rip),%rax
  movsd  D23(%rip),%xmm2
  lea    D12(%rip),%rdi
  movsd  D219(%rip),%xmm1
  movq   %rax,%xmm3
  mov    D112(%rip),%rax
  movq   %rax,%xmm0
  mov    $0x4,%eax
  call   <printf@plt>
  movsd  0x50(%rsp),%xmm2
  movsd  0x48(%rsp),%xmm1
  lea    D113(%rip),%rdi
  movsd  0x40(%rsp),%xmm0
  mov    $0x3,%eax
  call   <printf@plt>
  pxor   %xmm2,%xmm2
  movsd  D94(%rip),%xmm1
  movsd  D209(%rip),%xmm0
  lea    D90(%rip),%rdi
  mov    $0x3,%eax
  call   <printf@plt>
  mov    0x88(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L4
  xor    %eax,%eax
  add    $0x98,%rsp
  ret
L4:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: parse_data
arguments: label: D118
type_guessed: f64
name: parse_data
arguments: label: D158
type_guessed: f64
name: parse_data
arguments: label: D95
type_guessed: byte[8]
name: parse_data
arguments: label: D191
type_guessed: byte[8]
name: parse_data
arguments: label: D106
type_guessed: byte[8]
name: parse_data
arguments: label: D180
type_guessed: byte[8]
name: parse_data
arguments: label: D48
type_guessed: f64
name: parse_data
arguments: label: D128
type_guessed: f64
name: parse_data
arguments: label: D198
type_guessed: byte[8]
name: parse_data
arguments: label: D184
type_guessed: byte[8]
name: parse_data
arguments: label: D112
type_guessed: f64
name: parse_data
arguments: label: D114
type_guessed: f64
name: parse_data
arguments: label: D169
type_guessed: f64
name: parse_data
arguments: label: D42
type_guessed: f64
name: parse_data
arguments: label: D139
type_guessed: string
name: parse_data
arguments: label: D23
type_guessed: f64
name: parse_data
arguments: label: D12
type_guessed: string
name: parse_data
arguments: label: D219
type_guessed: f64
name: parse_data
arguments: label: D113
type_guessed: string
name: parse_data
arguments: label: D94
type_guessed: byte[8]
name: parse_data
arguments: label: D209
type_guessed: byte[8]
name: parse_data
arguments: label: D90
type_guessed: string

tool: D118: 0.05

tool: D158: 0.1

tool: {"D95": [0xf5,0x8e,0x09,0xe7,0x09,0x3a,0x10,0x3f]}

tool: {"D191": [0xd0,0xfa,0x4a,0xd6,0x97,0x5b,0xe0,0xbe]}

tool: {"D106": [0xa2,0xaf,0xc5,0x13,0xe6,0xe2,0x44,0x3f]}

tool: {"D180": [0x0a,0x68,0x22,0x6c,0x78,0x7a,0xcd,0xbf]}

tool: D48: 0.3004

tool: D128: 9.4569

tool: {"D198": [0x01,0x4d,0x84,0x0d,0x4f,0xaf,0x84,0xbf]}

tool: {"D184": [0x76,0x71,0x1b,0x0d,0xe0,0x2d,0x80,0xbf]}

tool: D112: 0.9996

tool: D114: 0.0167

tool: D169: 0.0134

tool: D42: 0.0197

tool: D139: q_est:	%f	%f	%f	%f


tool: D23: 0.0132

tool: D12: q_ref:	%f	%f	%f	%f


tool: D219: 0.0165

tool: D113: 
b_est:	%f	%f	%f


tool: {"D94": [0x39,0xb4,0xc8,0x76,0xbe,0x9f,0x7a,0xbf]}

tool: {"D209": [0xde,0x71,0x8a,0x8e,0xe4,0xf2,0x7f,0xbf]}

tool: D90: b_ref:	%f	%f	%f


assistant: ```c
int main(void) {
  double omega[3] = {0.0619E-3, -0.0078E-3, 0.6374E-3};
  double acc[3] = {-0.2303, 0.3004, 9.4569};
  double b_est[3] = {-0.0101, -0.0079, 0.0000};
  double q_est[4] = {0.9996, 0.0167, 0.0134, 0.0197};
  double dt = 0.05;
  double kp = 0.1;
  estimate_ncf(q_est, b_est, omega, acc, kp, dt);
  printf("q_est:\t%f\t%f\t%f\t%f\n", q_est[0], q_est[1], q_est[2], q_est[3]);
  printf("q_ref:\t%f\t%f\t%f\t%f\n", 0.9996, 0.0165, 0.0132, 0.0197);
  printf("\nb_est:\t%f\t%f\t%f\n", b_est[0], b_est[1], b_est[2]);
  printf("b_ref:\t%f\t%f\t%f\n", -0.0078, -0.0065, 0.0000);
  return 0;
}
```