user: 提供的汇编代码用C语言表示会是什么样子:

```asm
<ls_closest_approach>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x130,%rsp
  mov    %rdi,-0x108(%rbp)
  mov    %rsi,-0x110(%rbp)
  mov    %rdx,-0x118(%rbp)
  mov    %rcx,-0x120(%rbp)
  mov    %r8,-0x128(%rbp)
  mov    %r9,-0x130(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  mov    -0x118(%rbp),%rax
  movsd  (%rax),%xmm0
  mov    -0x120(%rbp),%rax
  movsd  (%rax),%xmm1
  ucomisd %xmm1,%xmm0
  jp     L193
  ucomisd %xmm1,%xmm0
  jne    L193
  mov    -0x118(%rbp),%rax
  add    $0x8,%rax
  movsd  (%rax),%xmm0
  mov    -0x120(%rbp),%rax
  add    $0x8,%rax
  movsd  (%rax),%xmm1
  ucomisd %xmm1,%xmm0
  jp     L193
  ucomisd %xmm1,%xmm0
  jne    L193
  mov    -0x118(%rbp),%rax
  add    $0x10,%rax
  movsd  (%rax),%xmm0
  mov    -0x120(%rbp),%rax
  add    $0x10,%rax
  movsd  (%rax),%xmm1
  ucomisd %xmm1,%xmm0
  jp     L193
  ucomisd %xmm1,%xmm0
  jne    L193
  mov    $0x1,%eax
  jmp    L326
L193:
  mov    $0x0,%eax
L326:
  mov    %al,-0xfb(%rbp)
  mov    -0x128(%rbp),%rax
  movsd  (%rax),%xmm0
  mov    -0x130(%rbp),%rax
  movsd  (%rax),%xmm1
  ucomisd %xmm1,%xmm0
  jp     L173
  ucomisd %xmm1,%xmm0
  jne    L173
  mov    -0x128(%rbp),%rax
  add    $0x8,%rax
  movsd  (%rax),%xmm0
  mov    -0x130(%rbp),%rax
  add    $0x8,%rax
  movsd  (%rax),%xmm1
  ucomisd %xmm1,%xmm0
  jp     L173
  ucomisd %xmm1,%xmm0
  jne    L173
  mov    -0x128(%rbp),%rax
  add    $0x10,%rax
  movsd  (%rax),%xmm0
  mov    -0x130(%rbp),%rax
  add    $0x10,%rax
  movsd  (%rax),%xmm1
  ucomisd %xmm1,%xmm0
  jp     L173
  ucomisd %xmm1,%xmm0
  jne    L173
  mov    $0x1,%eax
  jmp    L238
L173:
  mov    $0x0,%eax
L238:
  mov    %al,-0xfa(%rbp)
  cmpb   $0x0,-0xfb(%rbp)
  je     L11
  mov    -0x118(%rbp),%rdx
  mov    -0x108(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <cp_3d@plt>
  cmpb   $0x0,-0xfa(%rbp)
  je     L427
  mov    -0x128(%rbp),%rdx
  mov    -0x110(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <cp_3d@plt>
  jmp    L85
L427:
  mov    -0x118(%rbp),%rcx
  mov    -0x130(%rbp),%rdx
  mov    -0x128(%rbp),%rsi
  mov    -0x110(%rbp),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <p_ls_closest_approach@plt>
  jmp    L85
L11:
  cmpb   $0x0,-0xfa(%rbp)
  je     L471
  mov    -0x128(%rbp),%rdx
  mov    -0x110(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <cp_3d@plt>
  mov    -0x128(%rbp),%rcx
  mov    -0x120(%rbp),%rdx
  mov    -0x118(%rbp),%rsi
  mov    -0x108(%rbp),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <p_ls_closest_approach@plt>
L471:
  mov    -0x118(%rbp),%rdx
  mov    -0x120(%rbp),%rcx
  lea    -0x50(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <projmatrix@plt>
  mov    -0x118(%rbp),%rdx
  mov    -0x120(%rbp),%rcx
  lea    -0x70(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <diff_3d@plt>
  lea    -0x70(%rbp),%rdx
  lea    -0x50(%rbp),%rcx
  lea    -0xd0(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <mat_vmult_3d@plt>
  mov    -0x118(%rbp),%rdx
  mov    -0x128(%rbp),%rcx
  lea    -0x70(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <diff_3d@plt>
  lea    -0x70(%rbp),%rdx
  lea    -0x50(%rbp),%rcx
  lea    -0xb0(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <mat_vmult_3d@plt>
  mov    -0x118(%rbp),%rdx
  mov    -0x130(%rbp),%rcx
  lea    -0x70(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <diff_3d@plt>
  lea    -0x70(%rbp),%rdx
  lea    -0x50(%rbp),%rcx
  lea    -0x90(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <mat_vmult_3d@plt>
  lea    -0xb0(%rbp),%rdx
  lea    -0x90(%rbp),%rcx
  lea    -0x70(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <diff_3d@plt>
  lea    -0x70(%rbp),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <norm2_2d@plt>
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  movsd  %xmm0,-0xf0(%rbp)
  pxor   %xmm0,%xmm0
  ucomisd -0xf0(%rbp),%xmm0
  jp     L373
  pxor   %xmm0,%xmm0
  ucomisd -0xf0(%rbp),%xmm0
  je     L178
L373:
  lea    -0xb0(%rbp),%rdx
  lea    -0x70(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <inner_2d@plt>
  neg    %eax
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  divsd  -0xf0(%rbp),%xmm0
  movsd  %xmm0,-0xe8(%rbp)
  movsd  D6(%rip),%xmm0
  movapd %xmm0,%xmm1
  subsd  -0xe8(%rbp),%xmm1
  movsd  -0xa0(%rbp),%xmm0
  mulsd  %xmm0,%xmm1
  movsd  -0x80(%rbp),%xmm0
  mulsd  -0xe8(%rbp),%xmm0
  addsd  %xmm1,%xmm0
  movsd  -0xc0(%rbp),%xmm1
  divsd  %xmm1,%xmm0
  movsd  %xmm0,-0xe0(%rbp)
  movsd  -0xe8(%rbp),%xmm0
  pxor   %xmm1,%xmm1
  comisd %xmm1,%xmm0
  jb     L121
  movsd  D6(%rip),%xmm0
  comisd -0xe8(%rbp),%xmm0
  jb     L121
  movsd  -0xe0(%rbp),%xmm0
  pxor   %xmm1,%xmm1
  comisd %xmm1,%xmm0
  jb     L121
  movsd  D6(%rip),%xmm0
  comisd -0xe0(%rbp),%xmm0
  jb     L121
  movsd  D6(%rip),%xmm0
  subsd  -0xe8(%rbp),%xmm0
  movq   %xmm0,%rcx
  mov    -0x128(%rbp),%rdx
  lea    -0x70(%rbp),%rax
  movq   %rcx,%xmm0
  mov    %rdx,%rsi
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <scale_3d@plt>
  mov    -0xe8(%rbp),%rcx
  mov    -0x130(%rbp),%rdx
  mov    -0x110(%rbp),%rax
  movq   %rcx,%xmm0
  mov    %rdx,%rsi
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <scale_3d@plt>
  lea    -0x70(%rbp),%rdx
  mov    -0x110(%rbp),%rcx
  mov    -0x110(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <sum_3d@plt>
  movsd  D6(%rip),%xmm0
  subsd  -0xe0(%rbp),%xmm0
  movq   %xmm0,%rcx
  mov    -0x118(%rbp),%rdx
  lea    -0x70(%rbp),%rax
  movq   %rcx,%xmm0
  mov    %rdx,%rsi
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <scale_3d@plt>
  mov    -0xe0(%rbp),%rcx
  mov    -0x120(%rbp),%rdx
  mov    -0x108(%rbp),%rax
  movq   %rcx,%xmm0
  mov    %rdx,%rsi
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <scale_3d@plt>
  lea    -0x70(%rbp),%rdx
  mov    -0x108(%rbp),%rcx
  mov    -0x108(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <sum_3d@plt>
  jmp    L85
L121:
  movb   $0x0,-0xf9(%rbp)
  mov    -0x128(%rbp),%rcx
  mov    -0x120(%rbp),%rdx
  mov    -0x118(%rbp),%rsi
  lea    -0x70(%rbp),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <p_ls_closest_approach@plt>
  lea    -0x70(%rbp),%rdx
  mov    -0x128(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <cart2_3d@plt>
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  movsd  %xmm0,-0xf8(%rbp)
  lea    -0x70(%rbp),%rdx
  mov    -0x108(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <cp_3d@plt>
  mov    -0x128(%rbp),%rdx
  mov    -0x110(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <cp_3d@plt>
  mov    -0x130(%rbp),%rcx
  mov    -0x120(%rbp),%rdx
  mov    -0x118(%rbp),%rsi
  lea    -0x70(%rbp),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <p_ls_closest_approach@plt>
  lea    -0x70(%rbp),%rdx
  mov    -0x130(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <cart2_3d@plt>
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  movsd  %xmm0,-0xd8(%rbp)
  movsd  -0xf8(%rbp),%xmm0
  comisd -0xd8(%rbp),%xmm0
  jbe    L430
  movsd  -0xd8(%rbp),%xmm0
  movsd  %xmm0,-0xf8(%rbp)
  lea    -0x70(%rbp),%rdx
  mov    -0x108(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <cp_3d@plt>
  mov    -0x130(%rbp),%rdx
  mov    -0x110(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <cp_3d@plt>
L430:
  mov    -0x118(%rbp),%rcx
  mov    -0x130(%rbp),%rdx
  mov    -0x128(%rbp),%rsi
  lea    -0x70(%rbp),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <p_ls_closest_approach@plt>
  lea    -0x70(%rbp),%rdx
  mov    -0x118(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <cart2_3d@plt>
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  movsd  %xmm0,-0xd8(%rbp)
  movsd  -0xf8(%rbp),%xmm0
  comisd -0xd8(%rbp),%xmm0
  jbe    L248
  movsd  -0xd8(%rbp),%xmm0
  movsd  %xmm0,-0xf8(%rbp)
  lea    -0x70(%rbp),%rdx
  mov    -0x110(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <cp_3d@plt>
  mov    -0x118(%rbp),%rdx
  mov    -0x108(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <cp_3d@plt>
L248:
  mov    -0x120(%rbp),%rcx
  mov    -0x130(%rbp),%rdx
  mov    -0x128(%rbp),%rsi
  lea    -0x70(%rbp),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <p_ls_closest_approach@plt>
  lea    -0x70(%rbp),%rdx
  mov    -0x120(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <cart2_3d@plt>
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  movsd  %xmm0,-0xd8(%rbp)
  movsd  -0xf8(%rbp),%xmm0
  comisd -0xd8(%rbp),%xmm0
  ja     L78
  jmp    L85
L78:
  movsd  -0xd8(%rbp),%xmm0
  movsd  %xmm0,-0xf8(%rbp)
  lea    -0x70(%rbp),%rdx
  mov    -0x110(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <cp_3d@plt>
  mov    -0x120(%rbp),%rdx
  mov    -0x108(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <cp_3d@plt>
  jmp    L85
L178:
  nop
  movsd  -0xa0(%rbp),%xmm1
  pxor   %xmm0,%xmm0
  comisd %xmm1,%xmm0
  jbe    L273
  movsd  -0x80(%rbp),%xmm1
  pxor   %xmm0,%xmm0
  comisd %xmm1,%xmm0
  jbe    L273
  mov    -0x118(%rbp),%rdx
  mov    -0x108(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <cp_3d@plt>
  movsd  -0xa0(%rbp),%xmm0
  movsd  -0x80(%rbp),%xmm1
  comisd %xmm1,%xmm0
  jb     L411
  mov    -0x128(%rbp),%rax
  jmp    L296
L411:
  mov    -0x130(%rbp),%rax
L296:
  mov    -0x110(%rbp),%rdx
  mov    %rax,%rsi
  mov    %rdx,%rdi
  mov    $0x0,%eax
  call   <cp_3d@plt>
  jmp    L85
L273:
  movsd  -0xa0(%rbp),%xmm0
  movsd  -0xc0(%rbp),%xmm1
  comisd %xmm1,%xmm0
  jbe    L27
  movsd  -0x80(%rbp),%xmm0
  movsd  -0xc0(%rbp),%xmm1
  comisd %xmm1,%xmm0
  jbe    L27
  mov    -0x120(%rbp),%rdx
  mov    -0x108(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <cp_3d@plt>
  movsd  -0xa0(%rbp),%xmm1
  movsd  -0x80(%rbp),%xmm0
  comisd %xmm1,%xmm0
  jb     L438
  mov    -0x128(%rbp),%rax
  jmp    L136
L438:
  mov    -0x130(%rbp),%rax
L136:
  mov    -0x110(%rbp),%rdx
  mov    %rax,%rsi
  mov    %rdx,%rdi
  mov    $0x0,%eax
  call   <cp_3d@plt>
  jmp    L85
L27:
  movsd  -0xa0(%rbp),%xmm0
  pxor   %xmm1,%xmm1
  comisd %xmm1,%xmm0
  jb     L244
  movsd  -0xa0(%rbp),%xmm1
  movsd  -0xc0(%rbp),%xmm0
  comisd %xmm1,%xmm0
  jb     L244
  mov    -0x128(%rbp),%rdx
  mov    -0x110(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <cp_3d@plt>
  movsd  -0xa0(%rbp),%xmm0
  movsd  -0xc0(%rbp),%xmm1
  divsd  %xmm1,%xmm0
  movsd  %xmm0,-0xe8(%rbp)
  movsd  D6(%rip),%xmm0
  subsd  -0xe8(%rbp),%xmm0
  movq   %xmm0,%rcx
  mov    -0x118(%rbp),%rdx
  lea    -0x70(%rbp),%rax
  movq   %rcx,%xmm0
  mov    %rdx,%rsi
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <scale_3d@plt>
  mov    -0xe8(%rbp),%rcx
  mov    -0x120(%rbp),%rdx
  mov    -0x108(%rbp),%rax
  movq   %rcx,%xmm0
  mov    %rdx,%rsi
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <scale_3d@plt>
  lea    -0x70(%rbp),%rdx
  mov    -0x108(%rbp),%rcx
  mov    -0x108(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <sum_3d@plt>
  jmp    L85
L244:
  movsd  -0x80(%rbp),%xmm0
  pxor   %xmm1,%xmm1
  comisd %xmm1,%xmm0
  jb     L369
  movsd  -0x80(%rbp),%xmm1
  movsd  -0xc0(%rbp),%xmm0
  comisd %xmm1,%xmm0
  jb     L369
  mov    -0x130(%rbp),%rdx
  mov    -0x110(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <cp_3d@plt>
  movsd  -0x80(%rbp),%xmm0
  movsd  -0xc0(%rbp),%xmm1
  divsd  %xmm1,%xmm0
  movsd  %xmm0,-0xe8(%rbp)
  movsd  D6(%rip),%xmm0
  subsd  -0xe8(%rbp),%xmm0
  movq   %xmm0,%rcx
  mov    -0x118(%rbp),%rdx
  lea    -0x70(%rbp),%rax
  movq   %rcx,%xmm0
  mov    %rdx,%rsi
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <scale_3d@plt>
  mov    -0xe8(%rbp),%rcx
  mov    -0x120(%rbp),%rdx
  mov    -0x108(%rbp),%rax
  movq   %rcx,%xmm0
  mov    %rdx,%rsi
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <scale_3d@plt>
  lea    -0x70(%rbp),%rdx
  mov    -0x108(%rbp),%rcx
  mov    -0x108(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <sum_3d@plt>
  jmp    L85
L369:
  mov    -0x118(%rbp),%rdx
  mov    -0x108(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <cp_3d@plt>
  movsd  -0xa0(%rbp),%xmm1
  pxor   %xmm0,%xmm0
  subsd  %xmm1,%xmm0
  movsd  -0x80(%rbp),%xmm1
  movsd  -0xa0(%rbp),%xmm2
  subsd  %xmm2,%xmm1
  divsd  %xmm1,%xmm0
  movsd  %xmm0,-0xe8(%rbp)
  movsd  D6(%rip),%xmm0
  subsd  -0xe8(%rbp),%xmm0
  movq   %xmm0,%rcx
  mov    -0x128(%rbp),%rdx
  lea    -0x70(%rbp),%rax
  movq   %rcx,%xmm0
  mov    %rdx,%rsi
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <scale_3d@plt>
  mov    -0xe8(%rbp),%rcx
  mov    -0x130(%rbp),%rdx
  mov    -0x110(%rbp),%rax
  movq   %rcx,%xmm0
  mov    %rdx,%rsi
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <scale_3d@plt>
  lea    -0x70(%rbp),%rdx
  mov    -0x110(%rbp),%rcx
  mov    -0x110(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <sum_3d@plt>
  nop
L85:
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L177
  call   <__stack_chk_fail@plt>
L177:
  leave
  ret
```

tool_calls: name: read_data
arguments: tag: D6
data_type: f64

tool: D6: 1

assistant: ```c
void ls_closest_approach(double p0[3], double p1[3], double a0[3], double b0[3], double c0[3], double d0[3]) {
  double q1[3], q2[3], b[3], c[3], d[3], scr[3];
  double mat[9];
  double alpha, beta, d2;
  {
    char ab0, cd0;
    ab0 = (a0[0] == b0[0] && a0[1] == b0[1] && a0[2] == b0[2]);
    cd0 = (c0[0] == d0[0] && c0[1] == d0[1] && c0[2] == d0[2]);
    if (ab0) {
      cp_3d(p0, a0);
      if (cd0) {
        cp_3d(p1, c0);
        return;
      } else {
        p_ls_closest_approach(p1, c0, d0, a0);
        return;
      }
    }
    if (cd0) {
      cp_3d(p1, c0);
      p_ls_closest_approach(p0, a0, b0, c0);
    }
  }
  projmatrix(mat, b0, a0);
  diff_3d(scr, b0, a0);
  mat_vmult_3d(b, mat, scr);
  diff_3d(scr, c0, a0);
  mat_vmult_3d(c, mat, scr);
  diff_3d(scr, d0, a0);
  mat_vmult_3d(d, mat, scr);
  diff_3d(scr, d, c);
  d2 = norm2_2d(scr);
  if (d2 == 0)
    goto parallel;
  alpha = -inner_2d(scr, c) / d2;
  beta = ((1.0 - alpha) * c[2] + alpha * d[2]) / b[2];
  if (alpha >= 0 && alpha <= 1 && beta >= 0 && beta <= 1) {
    scale_3d(scr, c0, (1.0 - alpha));
    scale_3d(p1, d0, alpha);
    sum_3d(p1, p1, scr);
    scale_3d(scr, a0, (1.0 - beta));
    scale_3d(p0, b0, beta);
    sum_3d(p0, p0, scr);
    return;
  }
  {
    char found_one = 0;
    double d2, c2;
    p_ls_closest_approach(scr, a0, b0, c0);
    d2 = cart2_3d(c0, scr);
    cp_3d(p0, scr);
    cp_3d(p1, c0);
    p_ls_closest_approach(scr, a0, b0, d0);
    c2 = cart2_3d(d0, scr);
    if (c2 < d2) {
      d2 = c2;
      cp_3d(p0, scr);
      cp_3d(p1, d0);
    }
    p_ls_closest_approach(scr, c0, d0, a0);
    c2 = cart2_3d(a0, scr);
    if (c2 < d2) {
      d2 = c2;
      cp_3d(p1, scr);
      cp_3d(p0, a0);
    }
    p_ls_closest_approach(scr, c0, d0, b0);
    c2 = cart2_3d(b0, scr);
    if (c2 < d2) {
      d2 = c2;
      cp_3d(p1, scr);
      cp_3d(p0, b0);
    }
  }
  return;
parallel:
  if (c[2] < 0 && d[2] < 0) {
    cp_3d(p0, a0);
    cp_3d(p1, (c[2] >= d[2]) ? c0 : d0);
    return;
  }
  if (c[2] > b[2] && d[2] > b[2]) {
    cp_3d(p0, b0);
    cp_3d(p1, (c[2] <= d[2]) ? c0 : d0);
    return;
  }
  if (c[2] >= 0 && c[2] <= b[2]) {
    cp_3d(p1, c0);
    alpha = c[2] / b[2];
    scale_3d(scr, a0, (1.0 - alpha));
    scale_3d(p0, b0, alpha);
    sum_3d(p0, p0, scr);
    return;
  }
  if (d[2] >= 0 && d[2] <= b[2]) {
    cp_3d(p1, d0);
    alpha = d[2] / b[2];
    scale_3d(scr, a0, (1.0 - alpha));
    scale_3d(p0, b0, alpha);
    sum_3d(p0, p0, scr);
    return;
  }
  cp_3d(p0, a0);
  alpha = (0 - c[2]) / (d[2] - c[2]);
  scale_3d(scr, c0, (1.0 - alpha));
  scale_3d(p1, d0, alpha);
  sum_3d(p1, p1, scr);
  return;
}
```