user: What would the C source look like for the assembly code provided here:

```asm
<main>:
  endbr64
  sub    $0x98,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x88(%rsp)
  xor    %eax,%eax
  mov    D2(%rip),%rax
  mov    %rax,(%rsp)
  mov    D59(%rip),%rax
  mov    %rax,0x8(%rsp)
  mov    D58(%rip),%rax
  mov    %rax,0x10(%rsp)
  mov    D48(%rip),%rax
  mov    %rax,0x20(%rsp)
  mov    D7(%rip),%rax
  mov    %rax,0x28(%rsp)
  mov    D140(%rip),%rax
  mov    %rax,0x30(%rsp)
  mov    D43(%rip),%rax
  mov    %rax,0x40(%rsp)
  mov    D223(%rip),%rax
  mov    %rax,0x48(%rsp)
  movq   $0x0,0x50(%rsp)
  mov    D77(%rip),%rax
  mov    %rax,0x60(%rsp)
  mov    D195(%rip),%rax
  mov    %rax,0x68(%rsp)
  mov    D190(%rip),%rax
  mov    %rax,0x70(%rsp)
  mov    D236(%rip),%rax
  mov    %rax,0x78(%rsp)
  lea    0x20(%rsp),%rcx
  mov    %rsp,%rdx
  lea    0x40(%rsp),%rsi
  lea    0x60(%rsp),%rdi
  movsd  D144(%rip),%xmm1
  movsd  D209(%rip),%xmm0
  call   <estimate_ncf@plt>
  movsd  0x78(%rsp),%xmm3
  movsd  0x70(%rsp),%xmm2
  movsd  0x68(%rsp),%xmm1
  movsd  0x60(%rsp),%xmm0
  lea    D86(%rip),%rdi
  mov    $0x4,%eax
  call   <printf@plt>
  mov    D236(%rip),%rax
  movq   %rax,%xmm3
  movsd  D199(%rip),%xmm2
  movsd  D74(%rip),%xmm1
  mov    D77(%rip),%rax
  movq   %rax,%xmm0
  lea    D42(%rip),%rdi
  mov    $0x4,%eax
  call   <printf@plt>
  movsd  0x50(%rsp),%xmm2
  movsd  0x48(%rsp),%xmm1
  movsd  0x40(%rsp),%xmm0
  lea    D180(%rip),%rdi
  mov    $0x3,%eax
  call   <printf@plt>
  pxor   %xmm2,%xmm2
  movsd  D134(%rip),%xmm1
  movsd  D170(%rip),%xmm0
  lea    D137(%rip),%rdi
  mov    $0x3,%eax
  call   <printf@plt>
  mov    0x88(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L1
  mov    $0x0,%eax
  add    $0x98,%rsp
  ret
L1:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: retrieve_data
arguments: label: D2
type: byte[8]
name: retrieve_data
arguments: label: D59
type: byte[8]
name: retrieve_data
arguments: label: D58
type: byte[8]
name: retrieve_data
arguments: label: D48
type: byte[8]
name: retrieve_data
arguments: label: D7
type: f64
name: retrieve_data
arguments: label: D140
type: f64
name: retrieve_data
arguments: label: D43
type: byte[8]
name: retrieve_data
arguments: label: D223
type: byte[8]
name: retrieve_data
arguments: label: D77
type: f64
name: retrieve_data
arguments: label: D195
type: f64
name: retrieve_data
arguments: label: D190
type: f64
name: retrieve_data
arguments: label: D236
type: f64
name: retrieve_data
arguments: label: D144
type: f64
name: retrieve_data
arguments: label: D209
type: f64
name: retrieve_data
arguments: label: D86
type: string
name: retrieve_data
arguments: label: D199
type: f64
name: retrieve_data
arguments: label: D74
type: f64
name: retrieve_data
arguments: label: D42
type: string
name: retrieve_data
arguments: label: D180
type: string
name: retrieve_data
arguments: label: D134
type: byte[8]
name: retrieve_data
arguments: label: D170
type: byte[8]
name: retrieve_data
arguments: label: D137
type: string

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

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

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

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

tool: D7: 0.3004

tool: D140: 9.4569

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

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

tool: D77: 0.9996

tool: D195: 0.0167

tool: D190: 0.0134

tool: D236: 0.0197

tool: D144: 0.05

tool: D209: 0.1

tool: D86: q_est:	%f	%f	%f	%f


tool: D199: 0.0132

tool: D74: 0.0165

tool: D42: q_ref:	%f	%f	%f	%f


tool: D180: 
b_est:	%f	%f	%f


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

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

tool: D137: 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;
}
```