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

```asm
<elapsed_time_hr>:
  endbr64
  push   %rbp
  mov    %rdx,%rbp
  sub    $0x60,%rsp
  mov    %rdi,0x38(%rsp)
  lea    0x20(%rsp),%rdx
  lea    0x40(%rsp),%rdi
  mov    %rsi,0x28(%rsp)
  lea    0x30(%rsp),%rsi
  movq   %xmm0,0x30(%rsp)
  movq   %xmm1,0x20(%rsp)
  mov    %fs:0x28,%rax
  mov    %rax,0x58(%rsp)
  xor    %eax,%eax
  call   <sub_time_hr@plt>
  pxor   %xmm1,%xmm1
  pxor   %xmm0,%xmm0
  mov    %rbp,%rsi
  pxor   %xmm2,%xmm2
  cvtsi2sdq 0x48(%rsp),%xmm1
  movsd  D11(%rip),%xmm3
  lea    D37(%rip),%rdi
  cvtsi2sdq 0x38(%rsp),%xmm0
  xor    %eax,%eax
  lea    D52(%rip),%rbp
  cvtsi2sdq 0x28(%rsp),%xmm2
  divsd  %xmm3,%xmm1
  divsd  %xmm3,%xmm0
  addsd  0x40(%rsp),%xmm1
  movsd  %xmm1,0x18(%rsp)
  divsd  %xmm3,%xmm2
  addsd  0x30(%rsp),%xmm0
  movsd  %xmm0,0x10(%rsp)
  addsd  0x20(%rsp),%xmm2
  movsd  %xmm2,0x8(%rsp)
  call   <printf@plt>
  lea    D61(%rip),%rdi
  call   <puts@plt>
  mov    %rbp,%rdi
  call   <puts@plt>
  movsd  0x10(%rsp),%xmm0
  mov    $0x1,%eax
  lea    D10(%rip),%rdi
  call   <printf@plt>
  movsd  0x8(%rsp),%xmm2
  mov    $0x1,%eax
  lea    D1(%rip),%rdi
  movapd %xmm2,%xmm0
  call   <printf@plt>
  movsd  0x18(%rsp),%xmm1
  mov    $0x1,%eax
  lea    D17(%rip),%rdi
  movapd %xmm1,%xmm0
  movsd  %xmm1,0x8(%rsp)
  call   <printf@plt>
  mov    %rbp,%rdi
  call   <puts@plt>
  lea    D44(%rip),%rdi
  call   <puts@plt>
  movsd  0x8(%rsp),%xmm1
  mov    0x58(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L3
  add    $0x60,%rsp
  movapd %xmm1,%xmm0
  pop    %rbp
  ret
L3:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: parse_data
arguments: data_label: D11
datatype: f32[2]
name: parse_data
arguments: data_label: D37
datatype: string
name: parse_data
arguments: data_label: D52
datatype: string
name: parse_data
arguments: data_label: D61
datatype: string
name: parse_data
arguments: data_label: D10
datatype: string
name: parse_data
arguments: data_label: D1
datatype: string
name: parse_data
arguments: data_label: D17
datatype: string
name: parse_data
arguments: data_label: D44
datatype: string

tool: {"D11": [0.0,25.725290298461914]}

tool: D37: 
--- %s


tool: D52: |

tool: D61: --- Timings ------------------------------------------------------------------------

tool: D10: | Start: %.9lf   

tool: D1: End: %.9lf   

tool: D17: Duration: %.9lf s


tool: D44: ------------------------------------------------------------------------------------

assistant: ```c
double elapsed_time_hr(struct timespec t1, struct timespec t2, char *title) {
  struct timespec elapsed;
  sub_time_hr(&elapsed, &t1, &t2);
  double elapsed_duration = 0;
  double elapsed_start = 0;
  double elapsed_end = 0;
  elapsed_duration = elapsed.tv_sec + ((double)elapsed.tv_nsec / 1000000000);
  elapsed_start = t1.tv_sec + ((double)t1.tv_nsec / 1000000000);
  elapsed_end = t2.tv_sec + ((double)t2.tv_nsec / 1000000000);
  printf("\n--- %s\n", title);
  printf("--- Timings ------------------------------------------------------------------------\n");
  printf("|\n");
  printf("| Start: %.9lf   ", elapsed_start);
  printf("End: %.9lf   ", elapsed_end);
  printf("Duration: %.9lf s\n", elapsed_duration);
  printf("|\n");
  printf("------------------------------------------------------------------------------------\n");
  return elapsed_duration;
}
```