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

```asm
<r_mvndu>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x1000,%rsp
  orq    $0x0,(%rsp)
  sub    $0xc20,%rsp
  mov    %rdi,-0x1bd8(%rbp)
  mov    %rsi,-0x1be0(%rbp)
  mov    %rdx,-0x1be8(%rbp)
  mov    %rcx,-0x1bf0(%rbp)
  mov    %r8,-0x1bf8(%rbp)
  mov    %r9,-0x1c00(%rbp)
  mov    0x10(%rbp),%rax
  mov    %rax,-0x1c08(%rbp)
  mov    0x18(%rbp),%rax
  mov    %rax,-0x1c10(%rbp)
  mov    0x20(%rbp),%rax
  mov    %rax,-0x1c18(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  mov    -0x1bd8(%rbp),%rax
  mov    (%rax),%eax
  mov    %eax,-0x1bc4(%rbp)
  mov    -0x1bf8(%rbp),%rax
  mov    (%rax),%eax
  mov    %eax,%edx
  neg    %edx
  cmovns %edx,%eax
  mov    %eax,-0x1bc0(%rbp)
  movl   $0x1,-0x1bd0(%rbp)
  movl   $0x0,-0x1bc8(%rbp)
  jmp    L48
L25:
  movl   $0x1,-0x1bcc(%rbp)
  jmp    L107
L72:
  mov    -0x1bc8(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x1bf0(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  mov    -0x1bcc(%rbp),%eax
  movslq %eax,%rcx
  mov    -0x1bd0(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  shl    $0x2,%rax
  add    %rcx,%rax
  movsd  %xmm0,-0x1910(%rbp,%rax,8)
  addl   $0x1,-0x1bc8(%rbp)
  addl   $0x1,-0x1bcc(%rbp)
L107:
  mov    -0x1bcc(%rbp),%eax
  cmp    -0x1bc4(%rbp),%eax
  jle    L72
  mov    -0x1bd0(%rbp),%eax
  cltq
  shl    $0x3,%rax
  lea    -0x8(%rax),%rdx
  mov    -0x1be0(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  mov    -0x1bd0(%rbp),%eax
  cltq
  movsd  %xmm0,-0x1af0(%rbp,%rax,8)
  mov    -0x1bd0(%rbp),%eax
  cltq
  shl    $0x3,%rax
  lea    -0x8(%rax),%rdx
  mov    -0x1be8(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  mov    -0x1bd0(%rbp),%eax
  cltq
  movsd  %xmm0,-0x1a50(%rbp,%rax,8)
  addl   $0x1,-0x1bd0(%rbp)
L48:
  mov    -0x1bd0(%rbp),%eax
  cmp    -0x1bc4(%rbp),%eax
  jle    L25
  mov    -0x1bc0(%rbp),%eax
  cmp    -0x1bc4(%rbp),%eax
  jge    L5
  movl   $0x1,-0x1bd0(%rbp)
  jmp    L100
L52:
  mov    -0x1bc4(%rbp),%eax
  movslq %eax,%rcx
  mov    -0x1bd0(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  shl    $0x2,%rax
  add    %rcx,%rax
  movsd  -0x1910(%rbp,%rax,8),%xmm0
  movsd  %xmm0,-0x1b98(%rbp)
  mov    -0x1bc0(%rbp),%eax
  movslq %eax,%rcx
  mov    -0x1bd0(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  shl    $0x2,%rax
  add    %rcx,%rax
  movsd  -0x1910(%rbp,%rax,8),%xmm0
  mov    -0x1bc4(%rbp),%eax
  movslq %eax,%rcx
  mov    -0x1bd0(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  shl    $0x2,%rax
  add    %rcx,%rax
  movsd  %xmm0,-0x1910(%rbp,%rax,8)
  mov    -0x1bc0(%rbp),%eax
  movslq %eax,%rcx
  mov    -0x1bd0(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  shl    $0x2,%rax
  add    %rcx,%rax
  movsd  -0x1b98(%rbp),%xmm0
  movsd  %xmm0,-0x1910(%rbp,%rax,8)
  addl   $0x1,-0x1bd0(%rbp)
L100:
  mov    -0x1bd0(%rbp),%eax
  cmp    -0x1bc4(%rbp),%eax
  jle    L52
  movl   $0x1,-0x1bd0(%rbp)
  jmp    L96
L227:
  mov    -0x1bd0(%rbp),%eax
  movslq %eax,%rcx
  mov    -0x1bc4(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  shl    $0x2,%rax
  add    %rcx,%rax
  movsd  -0x1910(%rbp,%rax,8),%xmm0
  movsd  %xmm0,-0x1b98(%rbp)
  mov    -0x1bd0(%rbp),%eax
  movslq %eax,%rcx
  mov    -0x1bc0(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  shl    $0x2,%rax
  add    %rcx,%rax
  movsd  -0x1910(%rbp,%rax,8),%xmm0
  mov    -0x1bd0(%rbp),%eax
  movslq %eax,%rcx
  mov    -0x1bc4(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  shl    $0x2,%rax
  add    %rcx,%rax
  movsd  %xmm0,-0x1910(%rbp,%rax,8)
  mov    -0x1bd0(%rbp),%eax
  movslq %eax,%rcx
  mov    -0x1bc0(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  shl    $0x2,%rax
  add    %rcx,%rax
  movsd  -0x1b98(%rbp),%xmm0
  movsd  %xmm0,-0x1910(%rbp,%rax,8)
  addl   $0x1,-0x1bd0(%rbp)
L96:
  mov    -0x1bd0(%rbp),%eax
  cmp    -0x1bc4(%rbp),%eax
  jle    L227
  mov    -0x1bc4(%rbp),%eax
  cltq
  movsd  -0x1af0(%rbp,%rax,8),%xmm0
  movsd  %xmm0,-0x1b98(%rbp)
  mov    -0x1bc0(%rbp),%eax
  cltq
  movsd  -0x1af0(%rbp,%rax,8),%xmm0
  mov    -0x1bc4(%rbp),%eax
  cltq
  movsd  %xmm0,-0x1af0(%rbp,%rax,8)
  mov    -0x1bc0(%rbp),%eax
  cltq
  movsd  -0x1b98(%rbp),%xmm0
  movsd  %xmm0,-0x1af0(%rbp,%rax,8)
  mov    -0x1bc4(%rbp),%eax
  cltq
  movsd  -0x1a50(%rbp,%rax,8),%xmm0
  movsd  %xmm0,-0x1b98(%rbp)
  mov    -0x1bc0(%rbp),%eax
  cltq
  movsd  -0x1a50(%rbp,%rax,8),%xmm0
  mov    -0x1bc4(%rbp),%eax
  cltq
  movsd  %xmm0,-0x1a50(%rbp,%rax,8)
  mov    -0x1bc0(%rbp),%eax
  cltq
  movsd  -0x1b98(%rbp),%xmm0
  movsd  %xmm0,-0x1a50(%rbp,%rax,8)
L5:
  mov    -0x1bc4(%rbp),%eax
  sub    $0x1,%eax
  mov    %eax,-0x1bbc(%rbp)
  mov    -0x1bf8(%rbp),%rax
  mov    (%rax),%eax
  test   %eax,%eax
  jle    L159
  mov    -0x1bc4(%rbp),%eax
  cltq
  movsd  -0x1a50(%rbp,%rax,8),%xmm0
  movsd  %xmm0,-0x1ba0(%rbp)
  jmp    L47
L159:
  mov    -0x1bc4(%rbp),%eax
  cltq
  movsd  -0x1af0(%rbp,%rax,8),%xmm0
  movsd  %xmm0,-0x1ba0(%rbp)
L47:
  movl   $0x1,-0x1bd0(%rbp)
  jmp    L220
L119:
  movl   $0x1,-0x1bcc(%rbp)
  jmp    L122
L129:
  mov    -0x1bcc(%rbp),%eax
  movslq %eax,%rcx
  mov    -0x1bd0(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  shl    $0x2,%rax
  add    %rcx,%rax
  movsd  -0x1910(%rbp,%rax,8),%xmm0
  mov    -0x1bc4(%rbp),%eax
  movslq %eax,%rcx
  mov    -0x1bd0(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  shl    $0x2,%rax
  add    %rcx,%rax
  movsd  -0x1910(%rbp,%rax,8),%xmm2
  mov    -0x1bcc(%rbp),%eax
  movslq %eax,%rcx
  mov    -0x1bc4(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  shl    $0x2,%rax
  add    %rcx,%rax
  movsd  -0x1910(%rbp,%rax,8),%xmm1
  mulsd  %xmm2,%xmm1
  subsd  %xmm1,%xmm0
  mov    -0x1bcc(%rbp),%eax
  movslq %eax,%rcx
  mov    -0x1bd0(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  shl    $0x2,%rax
  add    %rcx,%rax
  movsd  %xmm0,-0x1910(%rbp,%rax,8)
  addl   $0x1,-0x1bcc(%rbp)
L122:
  mov    -0x1bcc(%rbp),%eax
  cmp    -0x1bbc(%rbp),%eax
  jle    L129
  mov    -0x1bc4(%rbp),%eax
  movslq %eax,%rcx
  mov    -0x1bd0(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  shl    $0x2,%rax
  add    %rcx,%rax
  movsd  -0x1910(%rbp,%rax,8),%xmm0
  mulsd  -0x1ba0(%rbp),%xmm0
  mov    -0x1bd0(%rbp),%eax
  cltq
  movsd  %xmm0,-0x1b90(%rbp,%rax,8)
  addl   $0x1,-0x1bd0(%rbp)
L220:
  mov    -0x1bd0(%rbp),%eax
  cmp    -0x1bbc(%rbp),%eax
  jle    L119
  movl   $0x1,-0x1bd0(%rbp)
  jmp    L130
L13:
  mov    -0x1bd0(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  shl    $0x3,%rax
  add    %rbp,%rax
  sub    $0x1910,%rax
  mov    (%rax),%rax
  movq   %rax,%xmm0
  call   <sqrt@plt>
  movq   %xmm0,%rax
  mov    -0x1bd0(%rbp),%edx
  movslq %edx,%rdx
  mov    %rax,-0x19b0(%rbp,%rdx,8)
  mov    -0x1bd0(%rbp),%eax
  cltq
  movsd  -0x1af0(%rbp,%rax,8),%xmm0
  mov    -0x1bd0(%rbp),%eax
  cltq
  movsd  -0x1b90(%rbp,%rax,8),%xmm1
  subsd  %xmm1,%xmm0
  mov    -0x1bd0(%rbp),%eax
  cltq
  movsd  -0x19b0(%rbp,%rax,8),%xmm1
  divsd  %xmm1,%xmm0
  mov    -0x1bd0(%rbp),%eax
  cltq
  movsd  %xmm0,-0x1af0(%rbp,%rax,8)
  mov    -0x1bd0(%rbp),%eax
  cltq
  movsd  -0x1a50(%rbp,%rax,8),%xmm0
  mov    -0x1bd0(%rbp),%eax
  cltq
  movsd  -0x1b90(%rbp,%rax,8),%xmm1
  subsd  %xmm1,%xmm0
  mov    -0x1bd0(%rbp),%eax
  cltq
  movsd  -0x19b0(%rbp,%rax,8),%xmm1
  divsd  %xmm1,%xmm0
  mov    -0x1bd0(%rbp),%eax
  cltq
  movsd  %xmm0,-0x1a50(%rbp,%rax,8)
  addl   $0x1,-0x1bd0(%rbp)
L130:
  mov    -0x1bd0(%rbp),%eax
  cmp    -0x1bbc(%rbp),%eax
  jle    L13
  movl   $0x1,-0x1bd0(%rbp)
  jmp    L20
L87:
  movl   $0x1,-0x1bcc(%rbp)
  jmp    L229
L56:
  mov    -0x1bcc(%rbp),%eax
  movslq %eax,%rcx
  mov    -0x1bd0(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  shl    $0x2,%rax
  add    %rcx,%rax
  movsd  -0x1910(%rbp,%rax,8),%xmm0
  mov    -0x1bd0(%rbp),%eax
  cltq
  movsd  -0x19b0(%rbp,%rax,8),%xmm2
  mov    -0x1bcc(%rbp),%eax
  cltq
  movsd  -0x19b0(%rbp,%rax,8),%xmm1
  mulsd  %xmm2,%xmm1
  divsd  %xmm1,%xmm0
  mov    -0x1bcc(%rbp),%eax
  movslq %eax,%rcx
  mov    -0x1bd0(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  shl    $0x2,%rax
  add    %rcx,%rax
  movsd  %xmm0,-0xc90(%rbp,%rax,8)
  addl   $0x1,-0x1bcc(%rbp)
L229:
  mov    -0x1bcc(%rbp),%eax
  cmp    -0x1bbc(%rbp),%eax
  jle    L56
  addl   $0x1,-0x1bd0(%rbp)
L20:
  mov    -0x1bd0(%rbp),%eax
  cmp    -0x1bbc(%rbp),%eax
  jle    L87
  mov    -0x1c08(%rbp),%rax
  mov    (%rax),%rdi
  mov    -0x1c00(%rbp),%rax
  mov    (%rax),%r10d
  lea    -0x1bb8(%rbp),%r9
  lea    -0xc90(%rbp),%rcx
  lea    -0x1a50(%rbp),%rdx
  lea    -0x1af0(%rbp),%rsi
  mov    -0x1bbc(%rbp),%eax
  push   -0x1c10(%rbp)
  lea    -0x1bb0(%rbp),%r8
  push   %r8
  movq   %rdi,%xmm0
  mov    %r10d,%r8d
  mov    %eax,%edi
  call   <mvn1@plt>
  add    $0x10,%rsp
  mov    -0x1ba0(%rbp),%rax
  movq   %rax,%xmm0
  call   <phi@plt>
  movsd  -0x1bb8(%rbp),%xmm1
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x1ba8(%rbp)
  mov    -0x1bf8(%rbp),%rax
  mov    (%rax),%eax
  test   %eax,%eax
  jns    L66
  movsd  -0x1ba8(%rbp),%xmm0
  movq   D0(%rip),%xmm1
  xorpd  %xmm1,%xmm0
  movsd  %xmm0,-0x1ba8(%rbp)
L66:
  mov    -0x1c18(%rbp),%rax
  movsd  -0x1ba8(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L202
  call   <__stack_chk_fail@plt>
L202:
  leave
  ret
```

tool_calls: name: unpack_data
arguments: label: D0
data_type: byte[8]

tool: {"D0": [0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80]}

assistant: ```c
void r_mvndu(int *m0, double *w, double *x, double *rhmat, int *ksign, int *nsim, double *eps, int *ifail, double *der0) {
  double der, tem, bb, pr, sd;
  double rr[20][20], mu[20], a[20], b[20], rc[20][20], dd[20];
  int i, j, m1, k, m, ii;
  void mvn1(int, double[], double[], double[][20], int, double, double *, double *, int *);
  double phi(double);
  m = *m0;
  k = abs(*ksign);
  for (i = 1, ii = 0; i <= m; i++) {
    for (j = 1; j <= m; j++) {
      rr[i][j] = rhmat[ii];
      ii++;
    }
    a[i] = w[i - 1];
    b[i] = x[i - 1];
  }
  if (k < m) {
    for (i = 1; i <= m; i++) {
      tem = rr[i][m];
      rr[i][m] = rr[i][k];
      rr[i][k] = tem;
    }
    for (i = 1; i <= m; i++) {
      tem = rr[m][i];
      rr[m][i] = rr[k][i];
      rr[k][i] = tem;
    }
    tem = a[m];
    a[m] = a[k];
    a[k] = tem;
    tem = b[m];
    b[m] = b[k];
    b[k] = tem;
  }
  m1 = m - 1;
  if ((*ksign) > 0)
    bb = b[m];
  else
    bb = a[m];
  for (i = 1; i <= m1; i++) {
    for (j = 1; j <= m1; j++)
      rr[i][j] -= rr[i][m] * rr[m][j];
    mu[i] = rr[i][m] * bb;
  }
  for (i = 1; i <= m1; i++) {
    dd[i] = sqrt(rr[i][i]);
    a[i] = (a[i] - mu[i]) / dd[i];
    b[i] = (b[i] - mu[i]) / dd[i];
  }
  for (i = 1; i <= m1; i++) {
    for (j = 1; j <= m1; j++)
      rc[i][j] = rr[i][j] / (dd[i] * dd[j]);
  }
  mvn1(m1, a, b, rc, *nsim, *eps, &pr, &sd, ifail);
  der = phi(bb) * pr;
  if (*ksign < 0)
    der = -der;
  *der0 = der;
}
```