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

```asm
<interpret_xsq>:
  endbr64
  push   %r15
  push   %r14
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x20,%rsp
  movq   %xmm0,%r15
  movsd  %xmm1,(%rsp)
  movsd  %xmm2,0x8(%rsp)
  mov    %fs:0x28,%rax
  mov    %rax,0x18(%rsp)
  xor    %eax,%eax
  movsd  D344(%rip),%xmm0
  comisd %xmm1,%xmm0
  ja     L14
  pxor   %xmm0,%xmm0
  movq   %r15,%xmm4
  comisd %xmm4,%xmm0
  ja     L14
  movsd  D21(%rip),%xmm0
  comisd %xmm2,%xmm0
  ja     L14
  pxor   %xmm0,%xmm0
  movsd  (%rsp),%xmm4
  ucomisd %xmm4,%xmm0
  ja     L205
  sqrtsd %xmm4,%xmm4
  movapd %xmm4,%xmm0
L133:
  mulsd  D179(%rip),%xmm0
  movapd %xmm0,%xmm3
  movsd  D0(%rip),%xmm2
  movapd %xmm0,%xmm1
  andpd  %xmm2,%xmm1
  movsd  D402(%rip),%xmm4
  ucomisd %xmm1,%xmm4
  jbe    L299
  cvttsd2si %xmm0,%rax
  pxor   %xmm1,%xmm1
  cvtsi2sd %rax,%xmm1
  cmpnlesd %xmm1,%xmm3
  movsd  D21(%rip),%xmm4
  andpd  %xmm4,%xmm3
  addsd  %xmm1,%xmm3
  andnpd %xmm0,%xmm2
  orpd   %xmm2,%xmm3
L299:
  movq   %xmm3,%r12
  movsd  (%rsp),%xmm7
  movapd %xmm7,%xmm4
  mulsd  %xmm7,%xmm4
  movq   %xmm4,%r14
  mov    $0x1f4,%ebx
  jmp    L56
L14:
  movsd  0x8(%rsp),%xmm2
  movsd  (%rsp),%xmm1
  movq   %r15,%xmm0
  lea    D190(%rip),%rdi
  mov    $0x3,%eax
  call   <printf@plt>
  mov    $0x1,%edi
  call   <exit@plt>
L205:
  movsd  (%rsp),%xmm0
  call   <sqrt@plt>
  jmp    L133
L103:
  movq   %xmm3,%r12
  sub    $0x1,%ebx
  je     L225
L56:
  movsd  (%rsp),%xmm5
  movapd %xmm5,%xmm0
  movq   %r12,%xmm7
  subsd  %xmm7,%xmm0
  movq   %r12,%xmm1
  maxsd  %xmm5,%xmm1
  mulsd  D304(%rip),%xmm1
  movq   %r14,%xmm2
  divsd  %xmm1,%xmm2
  maxsd  %xmm2,%xmm0
  lea    0x14(%rsp),%rdi
  movq   %r12,%xmm2
  movapd %xmm5,%xmm1
  mov    $0x3,%eax
  call   <xsq_to_stddev@plt>
  cmp    $0xffffffff,%eax
  jl     L225
  movq   %r12,%xmm0
  mulsd  D163(%rip),%xmm0
  movapd %xmm0,%xmm3
  movsd  D0(%rip),%xmm2
  movapd %xmm0,%xmm1
  andpd  %xmm2,%xmm1
  movsd  D402(%rip),%xmm4
  ucomisd %xmm1,%xmm4
  jbe    L103
  cvttsd2si %xmm0,%rax
  pxor   %xmm1,%xmm1
  cvtsi2sd %rax,%xmm1
  cmpnlesd %xmm1,%xmm3
  movsd  D21(%rip),%xmm4
  andpd  %xmm4,%xmm3
  addsd  %xmm1,%xmm3
  andnpd %xmm0,%xmm2
  orpd   %xmm2,%xmm3
  jmp    L103
L225:
  pxor   %xmm0,%xmm0
  movsd  (%rsp),%xmm4
  ucomisd %xmm4,%xmm0
  ja     L72
  sqrtsd %xmm4,%xmm4
  movapd %xmm4,%xmm0
L142:
  mulsd  D265(%rip),%xmm0
  movapd %xmm0,%xmm3
  movsd  D0(%rip),%xmm2
  movapd %xmm0,%xmm1
  andpd  %xmm2,%xmm1
  movsd  D402(%rip),%xmm4
  ucomisd %xmm1,%xmm4
  jbe    L86
  cvttsd2si %xmm0,%rax
  pxor   %xmm1,%xmm1
  cvtsi2sd %rax,%xmm1
  cmpnlesd %xmm1,%xmm3
  movsd  D21(%rip),%xmm4
  andpd  %xmm4,%xmm3
  addsd  %xmm1,%xmm3
  andnpd %xmm0,%xmm2
  orpd   %xmm2,%xmm3
L86:
  movq   %xmm3,%rbp
  mov    $0x1f4,%ebx
  jmp    L252
L72:
  movsd  (%rsp),%xmm0
  call   <sqrt@plt>
  jmp    L142
L147:
  movq   %xmm3,%rbp
  sub    $0x1,%ebx
  je     L321
L252:
  movsd  (%rsp),%xmm6
  movapd %xmm6,%xmm0
  movq   %rbp,%xmm7
  subsd  %xmm7,%xmm0
  movq   %rbp,%xmm1
  maxsd  %xmm6,%xmm1
  mulsd  D304(%rip),%xmm1
  movq   %r14,%xmm2
  divsd  %xmm1,%xmm2
  maxsd  %xmm2,%xmm0
  lea    0x14(%rsp),%rdi
  movq   %rbp,%xmm2
  movapd %xmm6,%xmm1
  mov    $0x3,%eax
  call   <xsq_to_stddev@plt>
  cmp    $0xfffffffc,%eax
  jl     L321
  movq   %rbp,%xmm0
  mulsd  D163(%rip),%xmm0
  movapd %xmm0,%xmm3
  movsd  D0(%rip),%xmm2
  movapd %xmm0,%xmm1
  andpd  %xmm2,%xmm1
  movsd  D402(%rip),%xmm7
  ucomisd %xmm1,%xmm7
  jbe    L147
  cvttsd2si %xmm0,%rax
  pxor   %xmm1,%xmm1
  cvtsi2sd %rax,%xmm1
  cmpnlesd %xmm1,%xmm3
  movsd  D21(%rip),%xmm4
  andpd  %xmm4,%xmm3
  addsd  %xmm1,%xmm3
  andnpd %xmm0,%xmm2
  orpd   %xmm2,%xmm3
  jmp    L147
L321:
  movq   %r12,%xmm4
  comisd 0x8(%rsp),%xmm4
  ja     L12
  movq   %rbp,%xmm4
  comisd 0x8(%rsp),%xmm4
  ja     L210
L285:
  lea    D362(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  movq   %r15,%xmm0
  mov    $0x1,%eax
  call   <print2digits@plt>
  lea    D23(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  movsd  (%rsp),%xmm0
  mov    $0x1,%eax
  call   <print2digits@plt>
  lea    D296(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  cmpl   $0x0,0x14(%rsp)
  lea    D135(%rip),%rdi
  lea    D223(%rip),%rax
  cmove  %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    0x14(%rsp),%rdi
  movsd  0x8(%rsp),%xmm2
  movsd  (%rsp),%xmm1
  movq   %r15,%xmm0
  mov    $0x3,%eax
  call   <xsq_to_stddev@plt>
  pxor   %xmm4,%xmm4
  cvtsi2sd %eax,%xmm4
  movq   %xmm4,%rbx
  movapd %xmm4,%xmm0
  mov    $0x1,%eax
  call   <print2digits@plt>
  movq   %rbx,%xmm0
  lea    D330(%rip),%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  movq   %rbx,%xmm4
  andpd  D0(%rip),%xmm4
  movq   %xmm4,%rbx
  comisd D305(%rip),%xmm4
  ja     L131
  comisd D168(%rip),%xmm4
  ja     L126
  comisd D19(%rip),%xmm4
  jbe    L317
  mov    $0xa,%edi
  call   <putchar@plt>
  lea    D256(%rip),%rdi
  call   <puts@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  jmp    L222
L12:
  lea    D419(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  movq   %r12,%xmm0
  mov    $0x1,%eax
  call   <print2digits@plt>
  lea    D117(%rip),%rdi
  call   <puts@plt>
  jmp    L222
L210:
  lea    D53(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  movq   %rbp,%xmm0
  mov    $0x1,%eax
  call   <print2digits@plt>
  lea    D208(%rip),%rdi
  call   <puts@plt>
  lea    D385(%rip),%rdi
  call   <puts@plt>
  jmp    L285
L131:
  mov    $0xa,%edi
  call   <putchar@plt>
  lea    D155(%rip),%rdi
  call   <puts@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
L222:
  mov    0x18(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L28
  add    $0x20,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r14
  pop    %r15
  ret
L126:
  mov    $0xa,%edi
  call   <putchar@plt>
  lea    D25(%rip),%rdi
  call   <puts@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  jmp    L222
L317:
  lea    D333(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  cmpl   $0x0,0x14(%rsp)
  je     L239
L246:
  movq   %rbx,%xmm4
  comisd D143(%rip),%xmm4
  jbe    L62
  lea    D420(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L222
L239:
  lea    D245(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L246
L62:
  lea    D391(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L222
L28:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: unpack_data
arguments: tag: D344
type: f64
name: unpack_data
arguments: tag: D21
type: f64
name: unpack_data
arguments: tag: D179
type: f64
name: unpack_data
arguments: tag: D0
type: qword[2]
name: unpack_data
arguments: tag: D402
type: f32[2]
name: unpack_data
arguments: tag: D190
type: string
name: unpack_data
arguments: tag: D304
type: f32[2]
name: unpack_data
arguments: tag: D163
type: f64
name: unpack_data
arguments: tag: D265
type: f64
name: unpack_data
arguments: tag: D362
type: string
name: unpack_data
arguments: tag: D23
type: string
name: unpack_data
arguments: tag: D296
type: string
name: unpack_data
arguments: tag: D135
type: string
name: unpack_data
arguments: tag: D223
type: string
name: unpack_data
arguments: tag: D330
type: string
name: unpack_data
arguments: tag: D305
type: f64[2]
name: unpack_data
arguments: tag: D168
type: f64[2]
name: unpack_data
arguments: tag: D19
type: f64[2]
name: unpack_data
arguments: tag: D256
type: string
name: unpack_data
arguments: tag: D419
type: string
name: unpack_data
arguments: tag: D117
type: string
name: unpack_data
arguments: tag: D53
type: string
name: unpack_data
arguments: tag: D208
type: string
name: unpack_data
arguments: tag: D385
type: string
name: unpack_data
arguments: tag: D155
type: string
name: unpack_data
arguments: tag: D25
type: string
name: unpack_data
arguments: tag: D333
type: string
name: unpack_data
arguments: tag: D143
type: f64[2]
name: unpack_data
arguments: tag: D420
type: string
name: unpack_data
arguments: tag: D245
type: string
name: unpack_data
arguments: tag: D391
type: string

tool: D344: 2

tool: D21: 1

tool: D179: 3

tool: {"D0": [0x7fffffffffffffff,0x0000000000000000]}

tool: {"D402": [0.0,176.0]}

tool: D190: Argument error in interpret_xsq(%f,%f,%f)!


tool: {"D304": [0.0,2.25]}

tool: D163: 1.1

tool: D265: 7

tool: D362:   X^2 = 

tool: D23: , k = 

tool: D296: , equivalent normal standard deviation 

tool: D135: = 

tool: D223: ~ 

tool: D330: 


tool: {"D305": [6.1,4.9]}

tool: {"D168": [4.9,2.6]}

tool: {"D19": [2.6,1.645]}

tool: D256:   This rng may be faulty.  Confidence level p > 1-1.0e-3

tool: D419:   This test requires 

tool: D117:  or more random generates.

tool: D53:   Note: at least 

tool: D208:  random generates are needed

tool: D385:     for a two-tailed test with confidence p > 1-1.0e-6

tool: D155:   THIS RNG IS FAULTY!  Confidence level p > 1-1.0e-9

tool: D25:   This rng is faulty!  Confidence level p > 1-1.0e-6

tool: D333:   This message should appear 

tool: {"D143": [1.645,0.0]}

tool: D420: 10%% of the time.


tool: D245: about 

tool: D391: 90%% of the time.


assistant: ```c
extern void interpret_xsq(xsq, k, n) double xsq, k, n;
{
  double stddev;
  int i;
  int robust;
  int accurate;
  double nrobust, ngiveup;
  double smallxsq;
  if (k < 2.0 || xsq < 0.0 || n < 1.0) {
    printf("Argument error in interpret_xsq(%f,%f,%f)!\n", xsq, k, n);
    exit(1);
  }
  ngiveup = ceil(3.0 * sqrt(k));
  for (i = 0; i < 500; i++) {
    smallxsq = (((k - ngiveup) > (k * k / (4 * (((ngiveup) > (k)) ? (ngiveup) : (k))))) ? (k - ngiveup) : (k * k / (4 * (((ngiveup) > (k)) ? (ngiveup) : (k)))));
    if (xsq_to_stddev(smallxsq, k, ngiveup, &accurate) < -1.645)
      break;
    ngiveup = ceil(ngiveup * 1.1);
  }
  nrobust = ceil(7.0 * sqrt(k));
  for (i = 0; i < 500; i++) {
    smallxsq = (((k - nrobust) > (k * k / (4 * (((nrobust) > (k)) ? (nrobust) : (k))))) ? (k - nrobust) : (k * k / (4 * (((nrobust) > (k)) ? (nrobust) : (k)))));
    if (xsq_to_stddev(smallxsq, k, nrobust, &accurate) < -4.892)
      break;
    nrobust = ceil(nrobust * 1.1);
  }
  if (n < ngiveup) {
    printf("  This test requires ");
    print2digits(ngiveup);
    printf(" or more random generates.\n");
    return;
  }
  if (n < nrobust) {
    printf("  Note: at least ");
    print2digits(nrobust);
    printf(" random generates are needed\n");
    printf("    for a two-tailed test with confidence p > 1-1.0e-6\n");
  };
  printf("  X^2 = ");
  print2digits(xsq);
  printf(", k = ");
  print2digits(k);
  printf(", equivalent normal standard deviation ");
  printf(accurate ? "= " : "~ ");
  stddev = xsq_to_stddev(xsq, k, n, &accurate);
  print2digits(stddev);
  printf("\n", stddev);
  if (fabs(stddev) > 6.1) {
    printf("\n");
    printf("  THIS RNG IS FAULTY!  Confidence level p > 1-1.0e-9\n");
    printf("\n");
  } else if (fabs(stddev) > 4.9) {
    printf("\n");
    printf("  This rng is faulty!  Confidence level p > 1-1.0e-6\n");
    printf("\n");
  } else if (fabs(stddev) > 2.6) {
    printf("\n");
    printf("  This rng may be faulty.  Confidence level p > 1-1.0e-3\n");
    printf("\n");
  } else {
    printf("  This message should appear ");
    if (!accurate) {
      printf("about ");
    }
    if (fabs(stddev) > 1.645) {
      printf("10%% of the time.\n");
    } else {
      printf("90%% of the time.\n");
    }
  }
}
```