user: Translate the below assembly code into C programming language:

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x40,%rsp
  lea    D35(%rip),%rax
  mov    %rax,-0x28(%rbp)
  lea    D62(%rip),%rax
  mov    %rax,-0x20(%rbp)
  mov    -0x28(%rbp),%rax
  add    $0x7a3140,%rax
  movsd  D63(%rip),%xmm0
  movsd  %xmm0,(%rax)
  movl   $0x0,-0x3c(%rbp)
  jmp    L126
L101:
  mov    $0x3e8,%eax
  sub    -0x3c(%rbp),%eax
  mov    %eax,-0x38(%rbp)
  jmp    L83
L133:
  cmpl   $0x3e7,-0x38(%rbp)
  jg     L105
  mov    $0x3e8,%eax
  sub    -0x38(%rbp),%eax
  jmp    L75
L105:
  mov    $0x0,%eax
L75:
  mov    %eax,-0x34(%rbp)
  jmp    L10
L36:
  mov    -0x38(%rbp),%eax
  cltq
  imul   $0x1f48,%rax,%rdx
  mov    -0x28(%rbp),%rax
  add    %rax,%rdx
  mov    -0x34(%rbp),%eax
  cltq
  movsd  (%rdx,%rax,8),%xmm0
  movsd  %xmm0,-0x8(%rbp)
  pxor   %xmm0,%xmm0
  ucomisd -0x8(%rbp),%xmm0
  jp     L138
  pxor   %xmm0,%xmm0
  ucomisd -0x8(%rbp),%xmm0
  je     L21
L138:
  mov    -0x38(%rbp),%eax
  cltq
  imul   $0x1f48,%rax,%rax
  lea    -0x1f48(%rax),%rdx
  mov    -0x20(%rbp),%rax
  add    %rax,%rdx
  mov    -0x34(%rbp),%eax
  add    $0x1,%eax
  cltq
  movsd  (%rdx,%rax,8),%xmm1
  movsd  -0x8(%rbp),%xmm2
  movsd  D39(%rip),%xmm0
  mulsd  %xmm2,%xmm0
  mov    -0x38(%rbp),%eax
  cltq
  imul   $0x1f48,%rax,%rax
  lea    -0x1f48(%rax),%rdx
  mov    -0x20(%rbp),%rax
  add    %rax,%rdx
  mov    -0x34(%rbp),%eax
  add    $0x1,%eax
  addsd  %xmm1,%xmm0
  cltq
  movsd  %xmm0,(%rdx,%rax,8)
  mov    -0x38(%rbp),%eax
  cltq
  add    $0x1,%rax
  imul   $0x1f48,%rax,%rdx
  mov    -0x20(%rbp),%rax
  add    %rax,%rdx
  mov    -0x34(%rbp),%eax
  mov    $0x1,%ecx
  test   %eax,%eax
  cmovle %ecx,%eax
  sub    $0x1,%eax
  cltq
  movsd  (%rdx,%rax,8),%xmm1
  movsd  -0x8(%rbp),%xmm2
  movsd  D27(%rip),%xmm0
  mulsd  %xmm2,%xmm0
  mov    -0x38(%rbp),%eax
  cltq
  add    $0x1,%rax
  imul   $0x1f48,%rax,%rdx
  mov    -0x20(%rbp),%rax
  add    %rax,%rdx
  mov    -0x34(%rbp),%eax
  mov    $0x1,%ecx
  test   %eax,%eax
  cmovle %ecx,%eax
  sub    $0x1,%eax
  addsd  %xmm1,%xmm0
  cltq
  movsd  %xmm0,(%rdx,%rax,8)
  mov    -0x38(%rbp),%eax
  cltq
  imul   $0x1f48,%rax,%rdx
  mov    -0x20(%rbp),%rax
  add    %rax,%rdx
  mov    -0x34(%rbp),%eax
  cltq
  movsd  (%rdx,%rax,8),%xmm1
  movsd  -0x8(%rbp),%xmm2
  movsd  D57(%rip),%xmm0
  mulsd  %xmm2,%xmm0
  mov    -0x38(%rbp),%eax
  cltq
  imul   $0x1f48,%rax,%rdx
  mov    -0x20(%rbp),%rax
  add    %rax,%rdx
  addsd  %xmm1,%xmm0
  mov    -0x34(%rbp),%eax
  cltq
  movsd  %xmm0,(%rdx,%rax,8)
  mov    -0x38(%rbp),%eax
  cltq
  imul   $0x1f48,%rax,%rdx
  mov    -0x28(%rbp),%rax
  add    %rax,%rdx
  mov    -0x34(%rbp),%eax
  cltq
  pxor   %xmm0,%xmm0
  movsd  %xmm0,(%rdx,%rax,8)
L21:
  addl   $0x1,-0x34(%rbp)
L10:
  mov    -0x34(%rbp),%eax
  cmp    -0x3c(%rbp),%eax
  jle    L36
  addl   $0x1,-0x38(%rbp)
L83:
  mov    -0x3c(%rbp),%eax
  add    $0x3e8,%eax
  cmp    %eax,-0x38(%rbp)
  jle    L133
  mov    -0x28(%rbp),%rax
  mov    %rax,-0x10(%rbp)
  mov    -0x20(%rbp),%rax
  mov    %rax,-0x28(%rbp)
  mov    -0x10(%rbp),%rax
  mov    %rax,-0x20(%rbp)
  addl   $0x1,-0x3c(%rbp)
L126:
  cmpl   $0x3e7,-0x3c(%rbp)
  jle    L101
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x18(%rbp)
  movl   $0x0,-0x30(%rbp)
  jmp    L28
L121:
  movl   $0x0,-0x2c(%rbp)
  jmp    L33
L111:
  mov    -0x30(%rbp),%eax
  cltq
  imul   $0x1f48,%rax,%rdx
  mov    -0x28(%rbp),%rax
  add    %rax,%rdx
  mov    -0x2c(%rbp),%eax
  cltq
  movsd  (%rdx,%rax,8),%xmm1
  mov    -0x30(%rbp),%edx
  mov    -0x2c(%rbp),%eax
  add    %edx,%eax
  sub    $0x3e8,%eax
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  mulsd  %xmm1,%xmm0
  movsd  -0x18(%rbp),%xmm1
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x18(%rbp)
  addl   $0x1,-0x2c(%rbp)
L33:
  cmpl   $0x3e8,-0x2c(%rbp)
  jle    L111
  addl   $0x1,-0x30(%rbp)
L28:
  cmpl   $0x7d0,-0x30(%rbp)
  jle    L121
  mov    -0x18(%rbp),%rax
  movq   %rax,%xmm0
  lea    D26(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  mov    $0x0,%eax
  leave
  ret
```

tool_calls: name: extract_symbolic_data
arguments: label: D63
type: f32[2]
name: extract_symbolic_data
arguments: label: D39
type: f64
name: extract_symbolic_data
arguments: label: D27
type: f64
name: extract_symbolic_data
arguments: label: D57
type: f64
name: extract_symbolic_data
arguments: label: D26
type: string

tool: {"D63": [0.0,1.875]}

tool: D39: 0.5

tool: D27: 0.4

tool: D57: 0.1

tool: D26: %f


assistant: ```c
int main() {
  static double buffer[2][1000 * 2 + 1][1000 + 1];
  double(*src)[1000 + 1] = buffer[0], (*dst)[1000 + 1] = buffer[1];
  src[1000][0] = 1;
  for (int n = 0; n < 1000; ++n) {
    for (int i = 1000 - n; i <= 1000 + n; ++i) {
      for (int j = i < 1000 ? 1000 - i : 0; j <= n; ++j) {
        double x = src[i][j];
        if (x != 0) {
          dst[i - 1][j + 1] += x * 0.5;
          dst[i + 1][j > 0 ? j - 1 : 0] += x * 0.4;
          dst[i][j] += x * 0.1;
          src[i][j] = 0;
        }
      }
    }
    double(*tmp)[1000 + 1] = src;
    src = dst;
    dst = tmp;
  }
  double e = 0;
  for (int i = 0; i < 1000 * 2 + 1; ++i)
    for (int j = 0; j < 1000 + 1; ++j)
      e += src[i][j] * (i + j - 1000);
  printf("%f\n", e);
}
```