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

```asm
<ptriproj>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x50,%rsp
  mov    %rdi,-0x28(%rbp)
  mov    %rsi,-0x30(%rbp)
  mov    %rdx,-0x38(%rbp)
  mov    %rcx,-0x40(%rbp)
  mov    %r8,-0x48(%rbp)
  mov    %r9d,-0x4c(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  lea    -0x18(%rbp),%r9
  lea    -0x20(%rbp),%r8
  mov    -0x40(%rbp),%rcx
  mov    -0x38(%rbp),%rdx
  mov    -0x30(%rbp),%rsi
  mov    -0x28(%rbp),%rax
  sub    $0x8,%rsp
  lea    -0x10(%rbp),%rdi
  push   %rdi
  mov    %rax,%rdi
  call   <lmoutr@plt>
  add    $0x10,%rsp
  cmpl   $0x0,-0x4c(%rbp)
  je     L59
  movsd  -0x20(%rbp),%xmm0
  pxor   %xmm1,%xmm1
  comisd %xmm1,%xmm0
  jb     L96
  movsd  -0x18(%rbp),%xmm0
  pxor   %xmm1,%xmm1
  comisd %xmm1,%xmm0
  jb     L96
  movsd  -0x20(%rbp),%xmm1
  movsd  -0x18(%rbp),%xmm0
  addsd  %xmm0,%xmm1
  movsd  D1(%rip),%xmm0
  comisd %xmm1,%xmm0
  jb     L96
  movsd  -0x18(%rbp),%xmm0
  mov    -0x20(%rbp),%rdi
  mov    -0x48(%rbp),%rcx
  mov    -0x38(%rbp),%rdx
  mov    -0x30(%rbp),%rsi
  mov    -0x28(%rbp),%rax
  movapd %xmm0,%xmm1
  movq   %rdi,%xmm0
  mov    %rax,%rdi
  call   <routlm@plt>
  jmp    L14
L96:
  movsd  -0x20(%rbp),%xmm1
  pxor   %xmm0,%xmm0
  comisd %xmm1,%xmm0
  jbe    L12
  mov    -0x4c(%rbp),%edi
  mov    -0x48(%rbp),%rcx
  mov    -0x40(%rbp),%rdx
  mov    -0x38(%rbp),%rsi
  mov    -0x28(%rbp),%rax
  mov    %edi,%r8d
  mov    %rax,%rdi
  call   <plinproj@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x10(%rbp)
  jmp    L14
L12:
  movsd  -0x18(%rbp),%xmm1
  pxor   %xmm0,%xmm0
  comisd %xmm1,%xmm0
  jbe    L44
  mov    -0x4c(%rbp),%edi
  mov    -0x48(%rbp),%rcx
  mov    -0x40(%rbp),%rdx
  mov    -0x30(%rbp),%rsi
  mov    -0x28(%rbp),%rax
  mov    %edi,%r8d
  mov    %rax,%rdi
  call   <plinproj@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x10(%rbp)
  jmp    L14
L44:
  mov    -0x4c(%rbp),%edi
  mov    -0x48(%rbp),%rcx
  mov    -0x40(%rbp),%rdx
  mov    -0x38(%rbp),%rsi
  mov    -0x30(%rbp),%rax
  mov    %edi,%r8d
  mov    %rax,%rdi
  call   <plinproj@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x10(%rbp)
  jmp    L14
L59:
  movsd  -0x18(%rbp),%xmm0
  mov    -0x20(%rbp),%rdi
  mov    -0x48(%rbp),%rcx
  mov    -0x38(%rbp),%rdx
  mov    -0x30(%rbp),%rsi
  mov    -0x28(%rbp),%rax
  movapd %xmm0,%xmm1
  movq   %rdi,%xmm0
  mov    %rax,%rdi
  call   <routlm@plt>
L14:
  movsd  -0x10(%rbp),%xmm0
  movq   %xmm0,%rax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L35
  call   <__stack_chk_fail@plt>
L35:
  movq   %rax,%xmm0
  leave
  ret
```

tool_calls: name: parse_data
arguments: data_label: D1
type_infered: byte[8]

tool: {"D1": [0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x3f]}

assistant: ```c
double ptriproj(double *v1, double *v2, double *v3, double *r, double *proj, int flag) {
  double la, mu, d;
  lmoutr(v1, v2, v3, r, &la, &mu, &d);
  if (flag) {
    if (la >= 0 && mu >= 0 && (la + mu) <= 1)
      routlm(v1, v2, v3, la, mu, proj);
    else if (la < 0)
      d = plinproj(v1, v3, r, proj, flag);
    else if (mu < 0)
      d = plinproj(v1, v2, r, proj, flag);
    else
      d = plinproj(v2, v3, r, proj, flag);
  } else {
    routlm(v1, v2, v3, la, mu, proj);
  }
  return d;
}
```