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

```asm
<hugeglasso>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0xe8,%rsp
  mov    %rdi,0xd0(%rsp)
  mov    %rsi,%r12
  mov    %rdx,%r14
  mov    %ecx,%r13d
  movsd  %xmm0,0x8(%rsp)
  mov    %ecx,%ebx
  imul   %ecx,%ebx
  movslq %ebx,%rbx
  shl    $0x2,%rbx
  mov    %rbx,%rdi
  call   <malloc@plt>
  mov    %rax,0x28(%rsp)
  mov    %rbx,%rdi
  call   <malloc@plt>
  mov    %rax,0x48(%rsp)
  movslq %r13d,%rbx
  mov    %rbx,0x90(%rsp)
  lea    0x0(,%rbx,4),%rbp
  mov    %rbp,0x20(%rsp)
  mov    %rbp,%rdi
  call   <malloc@plt>
  mov    %rax,0x38(%rsp)
  shl    $0x3,%rbx
  mov    %rbx,0x88(%rsp)
  mov    %rbx,%rdi
  call   <malloc@plt>
  mov    %rax,%r15
  mov    %rbx,%rdi
  call   <malloc@plt>
  mov    %rax,0x98(%rsp)
  test   %r13d,%r13d
  jle    L404
  lea    0x4(%rbp),%rdi
  mov    %rdi,0x40(%rsp)
  mov    0x48(%rsp),%rcx
  mov    %rcx,%r9
  mov    %r14,%rbp
  add    $0x8,%rbx
  mov    %rbx,0x50(%rsp)
  lea    -0x1(%r13),%ebx
  mov    %rbx,0x58(%rsp)
  mov    $0x0,%ebx
  movl   $0x0,0x18(%rsp)
  mov    $0x0,%eax
  mov    0x38(%rsp),%rsi
  jmp    L175
L474:
  mov    0x10(%rsp),%edi
  add    (%rsi,%rax,4),%edi
  movslq %edi,%rdi
  mov    0x28(%rsp),%r8
  mov    %r11d,(%r8,%rdi,4)
  mov    (%rsi,%rax,4),%edi
  add    $0x1,%edi
  mov    %edi,(%rsi,%rax,4)
  movl   $0xffffffff,(%rcx,%rdx,4)
  xorpd  D18(%rip),%xmm0
  divsd  %xmm1,%xmm0
  mov    0x30(%rsp),%rdi
  movsd  %xmm0,(%rdi,%rdx,8)
L479:
  lea    0x1(%rdx),%rdi
  cmp    %r10,%rdx
  je     L120
  mov    %rdi,%rdx
L496:
  mov    %edx,%r11d
  mov    %rbp,0x30(%rsp)
  movsd  0x0(%rbp,%rdx,8),%xmm0
  ucomisd D46(%rip),%xmm0
  jp     L474
  jne    L474
  movl   $0x1,(%rcx,%rdx,4)
  jmp    L479
L120:
  cmp    0x58(%rsp),%rax
  je     L404
  lea    0x1(%rax),%r10
  mov    %r10,%rdx
  jmp    L204
L395:
  mov    0x10(%rsp),%edi
  add    (%rsi,%rax,4),%edi
  movslq %edi,%rdi
  mov    0x28(%rsp),%r8
  mov    %r11d,(%r8,%rdi,4)
  mov    (%rsi,%rax,4),%edi
  add    $0x1,%edi
  mov    %edi,(%rsi,%rax,4)
  movl   $0xffffffff,(%rcx,%rdx,4)
  xorpd  D18(%rip),%xmm0
  divsd  %xmm1,%xmm0
  mov    0x30(%rsp),%rdi
  movsd  %xmm0,(%rdi,%rdx,8)
L665:
  add    $0x1,%rdx
  cmp    %edx,%r13d
  jle    L701
L204:
  mov    %edx,%r11d
  mov    %rbp,0x30(%rsp)
  movsd  0x0(%rbp,%rdx,8),%xmm0
  ucomisd D46(%rip),%xmm0
  jp     L395
  jne    L395
  movl   $0x1,(%rcx,%rdx,4)
  jmp    L665
L701:
  add    0x40(%rsp),%r9
  add    %r13d,0x18(%rsp)
  add    0x20(%rsp),%rcx
  add    0x88(%rsp),%rbp
  add    0x50(%rsp),%rbx
  mov    %r10,%rax
L175:
  mov    0x18(%rsp),%edi
  mov    %edi,0x10(%rsp)
  mov    0xd0(%rsp),%rdi
  movsd  0x8(%rsp),%xmm0
  addsd  (%rdi,%rbx,1),%xmm0
  movsd  %xmm0,(%r12,%rbx,1)
  movl   $0x0,(%rsi,%rax,4)
  movsd  (%r14,%rbx,1),%xmm1
  movq   $0x0,(%r14,%rbx,1)
  movl   $0xffffffff,(%r9)
  test   %eax,%eax
  jle    L120
  lea    -0x1(%rax),%r10d
  mov    $0x0,%edx
  jmp    L496
L404:
  movl   $0x0,0xa4(%rsp)
  movsd  0x8(%rsp),%xmm5
  xorpd  D18(%rip),%xmm5
  movq   D77(%rip),%xmm4
  mov    %r13d,%eax
  mov    %r12,%r13
  mov    %r14,%r12
  mov    %r15,%r14
  mov    %eax,%r15d
  jmp    L695
L88:
  comisd %xmm1,%xmm5
  jbe    L107
  addsd  0x8(%rsp),%xmm1
  movslq %ebx,%rax
  divsd  0x0(%rbp,%rax,8),%xmm1
  movsd  %xmm1,(%r12,%rsi,8)
  lea    (%r15,%r13,1),%eax
  cltq
  mov    0x28(%rsp),%rdx
  mov    0x10(%rsp),%ecx
  mov    %ecx,(%rdx,%rax,4)
  add    $0x1,%r13d
  mov    0x38(%rsp),%rax
  mov    0x20(%rsp),%rdx
  mov    %r13d,(%rax,%rdx,4)
  mov    0x18(%rsp),%rax
  movl   $0xffffffff,(%rax)
L28:
  movsd  (%r12,%rsi,8),%xmm0
  mov    0x60(%rsp),%rax
  movsd  %xmm0,(%rax,%rsi,8)
L630:
  add    $0x1,%rsi
  add    $0x4,%rdi
  add    0x40(%rsp),%ebx
  add    0x30(%rsp),%r10d
  cmp    %r11,%rsi
  je     L159
L151:
  mov    %esi,0x10(%rsp)
  mov    %rdi,0x18(%rsp)
  cmpl   $0xffffffff,(%rdi)
  je     L630
  mov    %r10d,%r8d
  mov    0x70(%rsp),%rax
  movsd  (%rax,%rsi,8),%xmm1
  mov    0x38(%rsp),%rax
  mov    0x20(%rsp),%rdx
  mov    (%rax,%rdx,4),%r13d
  test   %r13d,%r13d
  jle    L227
  lea    -0x1(%r13),%eax
  add    0x50(%rsp),%rax
  mov    0x78(%rsp),%rdx
  lea    (%rdx,%rax,4),%r9
  mov    0x58(%rsp),%rdx
L724:
  mov    (%rdx),%eax
  lea    (%r8,%rax,1),%ecx
  movslq %ecx,%rcx
  add    %r15d,%eax
  cltq
  movsd  0x0(%rbp,%rcx,8),%xmm0
  mulsd  (%r14,%rax,8),%xmm0
  subsd  %xmm0,%xmm1
  add    $0x4,%rdx
  cmp    %r9,%rdx
  jne    L724
L227:
  movsd  0x8(%rsp),%xmm2
  comisd %xmm2,%xmm1
  jbe    L88
  subsd  %xmm2,%xmm1
  movslq %ebx,%rax
  divsd  0x0(%rbp,%rax,8),%xmm1
  movsd  %xmm1,(%r12,%rsi,8)
  lea    (%r15,%r13,1),%eax
  cltq
  mov    0x28(%rsp),%rdx
  mov    0x10(%rsp),%ecx
  mov    %ecx,(%rdx,%rax,4)
  add    $0x1,%r13d
  mov    0x38(%rsp),%rax
  mov    0x20(%rsp),%rdx
  mov    %r13d,(%rax,%rdx,4)
  mov    0x18(%rsp),%rax
  movl   $0xffffffff,(%rax)
  jmp    L28
L107:
  movq   $0x0,(%r12,%rsi,8)
  jmp    L28
L159:
  mov    0x58(%rsp),%r11
  mov    0xa8(%rsp),%r13
  mov    0x30(%rsp),%ebx
  mov    0x38(%rsp),%rax
  mov    0x20(%rsp),%rsi
  mov    (%rax,%rsi,4),%eax
  mov    %eax,0x18(%rsp)
  lea    -0x1(%rax),%eax
  add    0x50(%rsp),%rax
  mov    0x28(%rsp),%rdi
  lea    0x4(%rdi,%rax,4),%rdi
  movl   $0x0,0x10(%rsp)
  jmp    L464
L439:
  comisd %xmm1,%xmm5
  jbe    L82
  addsd  0x8(%rsp),%xmm1
  divsd  %xmm6,%xmm1
  movslq %esi,%rax
  movsd  %xmm1,(%r12,%rax,8)
  subsd  %xmm1,%xmm7
L468:
  movslq %esi,%rsi
  movsd  (%r12,%rsi,8),%xmm1
  movapd %xmm1,%xmm0
  subsd  %xmm3,%xmm0
  andpd  %xmm4,%xmm0
  addsd  %xmm0,%xmm2
  movsd  %xmm1,(%r10)
L508:
  add    $0x4,%r9
  cmp    %rdi,%r9
  je     L22
L420:
  mov    (%r9),%esi
  cmp    $0xffffffff,%esi
  je     L508
  mov    %ebx,%r8d
  imul   %esi,%r8d
  lea    (%r15,%rsi,1),%eax
  cltq
  lea    (%r14,%rax,8),%r10
  movsd  (%r10),%xmm3
  lea    (%rsi,%r8,1),%edx
  movslq %edx,%rdx
  movsd  0x0(%rbp,%rdx,8),%xmm6
  movapd %xmm3,%xmm1
  mulsd  %xmm6,%xmm1
  addsd  0x0(%r13,%rax,8),%xmm1
  mov    %r11,%rdx
L284:
  mov    (%rdx),%eax
  lea    (%r8,%rax,1),%ecx
  movslq %ecx,%rcx
  add    %r15d,%eax
  cltq
  movsd  0x0(%rbp,%rcx,8),%xmm0
  mulsd  (%r14,%rax,8),%xmm0
  subsd  %xmm0,%xmm1
  add    $0x4,%rdx
  cmp    %rdi,%rdx
  jne    L284
  movsd  0x8(%rsp),%xmm0
  comisd %xmm0,%xmm1
  jbe    L439
  subsd  %xmm0,%xmm1
  divsd  %xmm6,%xmm1
  movslq %esi,%rax
  movsd  %xmm1,(%r12,%rax,8)
  addsd  %xmm1,%xmm7
  jmp    L468
L82:
  movslq %esi,%rax
  movq   $0x0,(%r12,%rax,8)
  jmp    L468
L22:
  addl   $0x1,0x10(%rsp)
  mov    0x10(%rsp),%eax
  divsd  %xmm7,%xmm2
  comisd D12(%rip),%xmm2
  jbe    L332
  cmp    $0x270f,%eax
  jg     L332
L464:
  pxor   %xmm7,%xmm7
  movapd %xmm7,%xmm2
  cmpl   $0x0,0x18(%rsp)
  jle    L22
  mov    %r11,%r9
  pxor   %xmm7,%xmm7
  movapd %xmm7,%xmm2
  jmp    L420
L332:
  mov    0x18(%rsp),%eax
  test   %eax,%eax
  jle    L330
  mov    0xa0(%rsp),%ecx
  add    %ecx,%eax
  mov    %eax,%r10d
  mov    %r11,%rdx
  mov    $0x0,%r8d
  pxor   %xmm1,%xmm1
  movapd %xmm1,%xmm0
  jmp    L277
L451:
  sub    %r8d,%esi
  movslq %esi,%rsi
  mov    0x28(%rsp),%rdi
  mov    %eax,(%rdi,%rsi,4)
L428:
  add    $0x4,%rdx
  add    $0x1,%ecx
  cmp    %r10d,%ecx
  je     L348
L277:
  mov    %ecx,%esi
  mov    (%rdx),%eax
  movslq %eax,%rdi
  ucomisd (%r12,%rdi,8),%xmm1
  jp     L451
  ucomisd (%r12,%rdi,8),%xmm0
  jne    L451
  add    $0x1,%r8d
  add    %r15d,%eax
  cltq
  mov    0x48(%rsp),%rdi
  movl   $0x1,(%rdi,%rax,4)
  movl   $0xffffffff,(%rdx)
  jmp    L428
L330:
  mov    $0x0,%r8d
L348:
  mov    0x18(%rsp),%esi
  mov    %esi,%eax
  sub    %r8d,%eax
  mov    0x38(%rsp),%rdi
  mov    0x20(%rsp),%rdx
  mov    %eax,(%rdi,%rdx,4)
  addl   $0x1,0x84(%rsp)
  mov    0x84(%rsp),%eax
  mov    0xc8(%rsp),%edi
  cmp    %edi,%esi
  je     L61
  cmp    $0x270f,%eax
  jg     L61
L210:
  mov    0x38(%rsp),%rax
  mov    0x20(%rsp),%rsi
  mov    (%rax,%rsi,4),%eax
  mov    %eax,0xc8(%rsp)
  lea    0x1(%rbx),%eax
  mov    %eax,0x40(%rsp)
  mov    0xb8(%rsp),%rdi
  mov    $0x0,%r10d
  mov    $0x0,%edx
  mov    $0x0,%esi
  mov    0x28(%rsp),%rax
  add    $0x4,%rax
  mov    %rax,0x78(%rsp)
  mov    %r11,0x58(%rsp)
  mov    0x68(%rsp),%r11
  mov    %r13,0xa8(%rsp)
  mov    %ebx,0x30(%rsp)
  mov    %edx,%ebx
  jmp    L151
L61:
  mov    %ebx,%r13d
  mov    0x60(%rsp),%rbx
  mov    0x20(%rsp),%rsi
  mov    %esi,%r11d
  test   %esi,%esi
  jle    L203
  mov    %rbp,%rcx
  mov    0xc0(%rsp),%r8
  add    %rbp,%r8
  mov    0xcc(%rsp),%edx
  lea    -0x1(%rdx),%edi
  mov    0x50(%rsp),%rax
  add    %rdi,%rax
  lea    0x8(%rbp,%rax,8),%r9
  lea    0x1(%rdx),%r10d
L48:
  mov    $0x0,%eax
  pxor   %xmm0,%xmm0
  mov    %rcx,%rdx
L110:
  movsd  (%rbx,%rax,8),%xmm1
  mulsd  (%rcx,%rax,8),%xmm1
  addsd  %xmm1,%xmm0
  mov    %rax,%r15
  add    $0x1,%rax
  cmp    %rdi,%r15
  jne    L110
  cmp    %r10d,%r13d
  jle    L183
  lea    0x1(%rsi),%rax
L652:
  movsd  (%rbx,%rax,8),%xmm1
  mulsd  (%rdx,%rax,8),%xmm1
  addsd  %xmm1,%xmm0
  add    $0x1,%rax
  cmp    %eax,%r13d
  jg     L652
L183:
  movsd  %xmm0,(%r8)
  movsd  %xmm0,(%rdx,%rsi,8)
  add    $0x8,%r8
  add    0x88(%rsp),%rcx
  cmp    %r9,%r8
  jne    L48
L203:
  mov    0xcc(%rsp),%edi
  lea    0x1(%rdi),%eax
  cmp    %eax,%r13d
  jle    L667
  mov    0xb0(%rsp),%rcx
  lea    0x8(%rbp,%rcx,8),%rsi
  mov    0xa0(%rsp),%eax
  add    %r13d,%eax
  cltq
  lea    0x0(%rbp,%rax,8),%rdx
  lea    -0x2(%r13),%eax
  sub    %edi,%eax
  add    %rcx,%rax
  lea    0x10(%rbp,%rax,8),%r8
  lea    -0x1(%rdi),%ecx
  mov    0x20(%rsp),%r9
L238:
  test   %r11d,%r11d
  jle    L168
  mov    $0x0,%eax
  pxor   %xmm0,%xmm0
L302:
  movsd  (%rbx,%rax,8),%xmm1
  mulsd  (%rdx,%rax,8),%xmm1
  addsd  %xmm1,%xmm0
  mov    %rax,%rdi
  add    $0x1,%rax
  cmp    %rdi,%rcx
  jne    L302
L155:
  lea    0x1(%r9),%rax
  mov    %rdx,%rdi
L663:
  movsd  (%rbx,%rax,8),%xmm1
  mulsd  (%rdx,%rax,8),%xmm1
  addsd  %xmm1,%xmm0
  add    $0x1,%rax
  cmp    %eax,%r13d
  jg     L663
  movsd  %xmm0,(%rsi)
  movsd  %xmm0,(%rdi,%r9,8)
  add    $0x8,%rsi
  add    0x88(%rsp),%rdx
  cmp    %r8,%rsi
  jne    L238
L667:
  mov    $0x0,%eax
  movq   D77(%rip),%xmm1
  mov    0x98(%rsp),%rdx
L650:
  movsd  (%rdx,%rax,8),%xmm0
  subsd  (%rbx,%rax,8),%xmm0
  andpd  %xmm1,%xmm0
  addsd  %xmm0,%xmm8
  add    $0x1,%rax
  cmp    0x68(%rsp),%rax
  jne    L650
  addsd  %xmm7,%xmm9
  addq   $0x1,0x20(%rsp)
  mov    0x20(%rsp),%rax
  add    %r13d,0xa0(%rsp)
  mov    0x90(%rsp),%rsi
  add    %rsi,0x50(%rsp)
  mov    0xd8(%rsp),%rsi
  add    %rsi,0xb0(%rsp)
  cmp    0x68(%rsp),%rax
  je     L688
L254:
  mov    0x20(%rsp),%eax
  mov    %eax,0xcc(%rsp)
  mov    0xa0(%rsp),%r15d
  mov    0x50(%rsp),%rax
  shl    $0x3,%rax
  mov    %rax,0xc0(%rsp)
  lea    (%r14,%rax,1),%rbx
  mov    $0x0,%eax
  mov    0x98(%rsp),%rdx
L549:
  movsd  (%rbx,%rax,8),%xmm0
  movsd  %xmm0,(%rdx,%rax,8)
  add    $0x1,%rax
  cmp    0x68(%rsp),%rax
  jne    L549
  mov    0x50(%rsp),%rax
  shl    $0x2,%rax
  mov    0x48(%rsp),%rsi
  add    %rax,%rsi
  mov    %rsi,0xb8(%rsp)
  mov    0xd0(%rsp),%rsi
  mov    %rsi,%rdi
  add    0xc0(%rsp),%rdi
  mov    %rdi,0x70(%rsp)
  mov    0x28(%rsp),%rdi
  lea    (%rax,%rdi,1),%r11
  movl   $0x0,0x84(%rsp)
  mov    %rbx,0x60(%rsp)
  mov    %r13d,%ebx
  mov    %rsi,%r13
  jmp    L210
L168:
  pxor   %xmm0,%xmm0
  jmp    L155
L688:
  mov    %r14,%rax
  mov    %r12,%r14
  mov    %r13d,%r15d
  mov    %rbp,%r13
  mov    %rax,%r12
L618:
  addl   $0x1,0xa4(%rsp)
  mov    0xa4(%rsp),%eax
  divsd  %xmm9,%xmm8
  comisd D12(%rip),%xmm8
  jbe    L380
  cmp    $0x63,%eax
  jg     L380
L695:
  pxor   %xmm9,%xmm9
  movapd %xmm9,%xmm8
  test   %r15d,%r15d
  jle    L618
  mov    0x90(%rsp),%rax
  add    $0x1,%rax
  mov    %rax,0xd8(%rsp)
  mov    %r15d,%eax
  mov    %rax,0x68(%rsp)
  movq   $0x0,0xb0(%rsp)
  movq   $0x0,0x50(%rsp)
  movl   $0x0,0xa0(%rsp)
  movq   $0x0,0x20(%rsp)
  pxor   %xmm9,%xmm9
  movapd %xmm9,%xmm8
  mov    %r13,%rbp
  mov    %r12,%rax
  mov    %r14,%r12
  mov    %r15d,%r13d
  mov    %rax,%r14
  jmp    L254
L380:
  mov    %r15d,%eax
  mov    %r14,%r15
  mov    %r12,%r14
  mov    %r13,%r12
  mov    %eax,%r13d
  test   %eax,%eax
  jle    L258
  mov    0x90(%rsp),%rax
  add    $0x1,%rax
  mov    %rax,0x10(%rsp)
  lea    -0x1(%r13),%ebp
  mov    %r13d,%eax
  mov    %rax,0x8(%rsp)
  mov    $0x0,%ebx
  mov    $0x0,%edx
  mov    $0x0,%edi
  mov    $0x1,%eax
  pxor   %xmm0,%xmm0
  movsd  D114(%rip),%xmm2
  lea    0x8(%r14),%r9
  lea    0x10(%r14),%rsi
  mov    %rsi,0x18(%rsp)
  jmp    L239
L664:
  lea    (%rdi,%r13,1),%ecx
  movslq %ecx,%rcx
  lea    0x0(,%rcx,8),%rsi
  add    %rax,%rcx
  shl    $0x3,%rcx
  pxor   %xmm0,%xmm0
L662:
  movsd  (%r12,%rsi,1),%xmm1
  mulsd  (%r14,%rsi,1),%xmm1
  addsd  %xmm1,%xmm0
  add    $0x8,%rsi
  cmp    %rcx,%rsi
  jne    L662
L331:
  add    $0x1,%rax
  add    %r13d,%edi
  add    0x10(%rsp),%rdx
  add    0x90(%rsp),%rbx
L239:
  mov    %eax,%r8d
  mov    %eax,%r10d
  cmp    %r13d,%eax
  jge    L611
  movslq %edi,%rcx
  shl    $0x3,%rcx
  lea    (%r12,%rcx,1),%r11
  add    %r14,%rcx
  mov    %rax,%rsi
L244:
  movsd  (%r11,%rsi,8),%xmm1
  mulsd  (%rcx,%rsi,8),%xmm1
  addsd  %xmm1,%xmm0
  add    $0x1,%rsi
  cmp    %esi,%r13d
  jg     L244
L611:
  movsd  (%r12,%rdx,8),%xmm1
  subsd  %xmm0,%xmm1
  movapd %xmm2,%xmm0
  divsd  %xmm1,%xmm0
  movsd  %xmm0,(%r14,%rdx,8)
  lea    -0x1(%r8),%ecx
  test   %ecx,%ecx
  jle    L319
  lea    (%r14,%rbx,8),%rcx
  lea    -0x2(%r8),%esi
  add    %rbx,%rsi
  lea    (%r9,%rsi,8),%rsi
  movapd %xmm0,%xmm1
  xorpd  D18(%rip),%xmm1
L317:
  movapd %xmm1,%xmm3
  mulsd  (%rcx),%xmm3
  movsd  %xmm3,(%rcx)
  add    $0x8,%rcx
  cmp    %rsi,%rcx
  jne    L317
L319:
  cmp    %rax,0x8(%rsp)
  je     L258
  lea    (%r9,%rdx,8),%rcx
  mov    %ebp,%esi
  sub    %r8d,%esi
  add    %rdx,%rsi
  mov    0x18(%rsp),%r11
  lea    (%r11,%rsi,8),%rsi
  xorpd  D18(%rip),%xmm0
L248:
  movapd %xmm0,%xmm1
  mulsd  (%rcx),%xmm1
  movsd  %xmm1,(%rcx)
  add    $0x8,%rcx
  cmp    %rcx,%rsi
  jne    L248
  test   %r10d,%r10d
  jg     L664
  pxor   %xmm0,%xmm0
  jmp    L331
L258:
  mov    0x28(%rsp),%rdi
  call   <free@plt>
  mov    0x48(%rsp),%rdi
  call   <free@plt>
  mov    0x38(%rsp),%rdi
  call   <free@plt>
  mov    %r15,%rdi
  call   <free@plt>
  mov    0x98(%rsp),%rdi
  call   <free@plt>
  add    $0xe8,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
```

tool_calls: name: extract_symbolic_data
arguments: data_tag: D18
data_type: byte[16]
name: extract_symbolic_data
arguments: data_tag: D46
data_type: byte[8]
name: extract_symbolic_data
arguments: data_tag: D77
data_type: qword
name: extract_symbolic_data
arguments: data_tag: D12
data_type: byte[16]
name: extract_symbolic_data
arguments: data_tag: D114
data_type: byte[8]

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

tool: {"D46": [0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00]}

tool: D77: 9223372036854775807

tool: {"D12": [0x2d,0x43,0x1c,0xeb,0xe2,0x36,0x1a,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x3f]}

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

assistant: ```c
void hugeglasso(const double *S, double *W, double *T, int d, double ilambda) {
  int d2;
  d2 = d * d;
  int i, j, k;
  int rss_idx, w_idx;
  int tmp_i;
  int tmp_j, tmp_a;
  int gap_int;
  double gap_ext, gap_act;
  double thol_act = 1e-4;
  double thol_ext = 1e-4;
  int MAX_ITER_EXT = 100;
  int MAX_ITER_INT = 10000;
  int MAX_ITER_ACT = 10000;
  int iter_ext, iter_int, iter_act;
  int *idx_a = (int *)malloc((d2) * sizeof(int));
  int *idx_i = (int *)malloc((d2) * sizeof(int));
  int *size_a = (int *)malloc(d * sizeof(int));
  double *w1 = (double *)malloc(d * sizeof(double));
  double *ww = (double *)malloc(d * sizeof(double));
  int size_a_prev;
  int junk_a;
  double r;
  double tmp1, tmp2, tmp3, tmp4, tmp5, tmp6;
  for (i = 0; i < d; i++) {
    tmp_i = i * d;
    W[tmp_i + i] = S[tmp_i + i] + ilambda;
    size_a[i] = 0;
    tmp1 = T[tmp_i + i];
    T[tmp_i + i] = 0;
    idx_i[tmp_i + i] = -1;
    for (j = 0; j < i; j++) {
      if (T[tmp_i + j] != 0) {
        idx_a[tmp_i + size_a[i]] = j;
        size_a[i]++;
        idx_i[tmp_i + j] = -1;
        T[tmp_i + j] = -T[tmp_i + j] / tmp1;
      } else
        idx_i[tmp_i + j] = 1;
    }
    for (j = i + 1; j < d; j++) {
      if (T[tmp_i + j] != 0) {
        idx_a[tmp_i + size_a[i]] = j;
        size_a[i]++;
        idx_i[tmp_i + j] = -1;
        T[tmp_i + j] = -T[tmp_i + j] / tmp1;
      } else
        idx_i[tmp_i + j] = 1;
    }
  }
  gap_ext = 1;
  iter_ext = 0;
  while (gap_ext > thol_ext && iter_ext < MAX_ITER_EXT) {
    tmp1 = 0;
    tmp6 = 0;
    tmp5 = 0;
    for (i = 0; i < d; i++) {
      tmp_i = i * d;
      gap_int = 1;
      iter_int = 0;
      for (j = 0; j < d; j++)
        ww[j] = T[tmp_i + j];
      while (gap_int != 0 && iter_int < MAX_ITER_INT) {
        size_a_prev = size_a[i];
        for (j = 0; j < d; j++) {
          if (idx_i[tmp_i + j] != -1) {
            tmp_j = j * d;
            r = S[tmp_i + j];
            for (k = 0; k < size_a[i]; k++) {
              rss_idx = idx_a[tmp_i + k];
              r = r - W[tmp_j + rss_idx] * T[tmp_i + rss_idx];
            }
            if (r > ilambda) {
              w1[j] = (r - ilambda) / W[tmp_j + j];
              idx_a[tmp_i + size_a[i]] = j;
              size_a[i] = size_a[i] + 1;
              idx_i[tmp_i + j] = -1;
            } else if (r < -ilambda) {
              w1[j] = (r + ilambda) / W[tmp_j + j];
              idx_a[tmp_i + size_a[i]] = j;
              size_a[i] = size_a[i] + 1;
              idx_i[tmp_i + j] = -1;
            } else
              w1[j] = 0;
            T[tmp_i + j] = w1[j];
          }
        }
        gap_int = size_a[i] - size_a_prev;
        gap_act = 1;
        iter_act = 0;
        while (gap_act > thol_act && iter_act < MAX_ITER_ACT) {
          tmp3 = 0;
          tmp4 = 0;
          for (j = 0; j < size_a[i]; j++) {
            w_idx = idx_a[tmp_i + j];
            if (w_idx != -1) {
              tmp_a = w_idx * d;
              r = S[tmp_i + w_idx] + T[tmp_i + w_idx] * W[tmp_a + w_idx];
              for (k = 0; k < size_a[i]; k++) {
                rss_idx = idx_a[tmp_i + k];
                r = r - W[tmp_a + rss_idx] * T[tmp_i + rss_idx];
              }
              if (r > ilambda) {
                w1[w_idx] = (r - ilambda) / W[tmp_a + w_idx];
                tmp4 += w1[w_idx];
              } else if (r < -ilambda) {
                w1[w_idx] = (r + ilambda) / W[tmp_a + w_idx];
                tmp4 -= w1[w_idx];
              } else
                w1[w_idx] = 0;
              tmp3 = tmp3 + fabs(w1[w_idx] - T[tmp_i + w_idx]);
              T[tmp_i + w_idx] = w1[w_idx];
            }
          }
          gap_act = tmp3 / tmp4;
          iter_act++;
        }
        junk_a = 0;
        for (j = 0; j < size_a[i]; j++) {
          w_idx = idx_a[tmp_i + j];
          if (w1[w_idx] == 0) {
            junk_a++;
            idx_i[tmp_i + w_idx] = 1;
            idx_a[tmp_i + j] = -1;
          } else
            idx_a[tmp_i + j - junk_a] = w_idx;
        }
        size_a[i] = size_a[i] - junk_a;
        iter_int++;
      }
      for (j = 0; j < i; j++) {
        tmp2 = 0;
        tmp_j = j * d;
        for (k = 0; k < i; k++)
          tmp2 = tmp2 + T[tmp_i + k] * W[tmp_j + k];
        for (k = i + 1; k < d; k++)
          tmp2 = tmp2 + T[tmp_i + k] * W[tmp_j + k];
        W[tmp_i + j] = tmp2;
        W[tmp_j + i] = tmp2;
      }
      for (j = i + 1; j < d; j++) {
        tmp2 = 0;
        tmp_j = j * d;
        for (k = 0; k < i; k++)
          tmp2 = tmp2 + T[tmp_i + k] * W[tmp_j + k];
        for (k = i + 1; k < d; k++)
          tmp2 = tmp2 + T[tmp_i + k] * W[tmp_j + k];
        W[tmp_i + j] = tmp2;
        W[tmp_j + i] = tmp2;
      }
      for (j = 0; j < d; j++)
        tmp5 = tmp5 + fabs(ww[j] - T[tmp_i + j]);
      tmp6 = tmp6 + tmp4;
    }
    gap_ext = tmp5 / tmp6;
    iter_ext++;
  }
  for (i = 0; i < d; i++) {
    tmp2 = 0;
    for (j = 0; j < i; j++)
      tmp2 = tmp2 + W[i * d + j] * T[i * d + j];
    for (j = i + 1; j < d; j++)
      tmp2 = tmp2 + W[i * d + j] * T[i * d + j];
    tmp1 = 1 / (W[i * d + i] - tmp2);
    T[i * d + i] = tmp1;
    for (j = 0; j < i; j++)
      T[i * d + j] = -tmp1 * T[i * d + j];
    for (j = i + 1; j < d; j++)
      T[i * d + j] = -tmp1 * T[i * d + j];
  }
  free(idx_a);
  free(idx_i);
  free(size_a);
  free(w1);
  free(ww);
}
```