user: 请从给定的汇编指令推导出C源代码:

```asm
<thruster_cluster>:
  endbr64
  push   %rbp
  mov    $0x3,%edi
  push   %rbx
  sub    $0x98,%rsp
  movss  %xmm0,(%rsp)
  mov    %fs:0x28,%rax
  mov    %rax,0x88(%rsp)
  xor    %eax,%eax
  call   <randn@plt>
  mov    %eax,%ebx
  xor    %eax,%eax
  call   <onion@plt>
  movss  (%rsp),%xmm2
  pxor   %xmm5,%xmm5
  movsd  D107(%rip),%xmm6
  mov    $0x1,%edi
  pxor   %xmm0,%xmm0
  cvtss2sd %xmm2,%xmm5
  mulsd  %xmm5,%xmm6
  movaps %xmm2,%xmm1
  movsd  %xmm5,(%rsp)
  movss  %xmm2,0x18(%rsp)
  cvtsd2ss %xmm6,%xmm0
  movsd  %xmm6,0x10(%rsp)
  call   <cyl@plt>
  movsd  (%rsp),%xmm0
  xor    %esi,%esi
  xor    %edi,%edi
  mulsd  D37(%rip),%xmm0
  cvtsd2ss %xmm0,%xmm0
  call   <xlate@plt>
  movsd  D212(%rip),%xmm1
  movapd %xmm1,%xmm0
  call   <randf@plt>
  mov    D212(%rip),%rax
  pxor   %xmm7,%xmm7
  subsd  D129(%rip),%xmm0
  addsd  D208(%rip),%xmm0
  cvtsd2ss %xmm0,%xmm7
  movq   %rax,%xmm0
  movss  %xmm7,0xc(%rsp)
  call   <randf@plt>
  mov    D212(%rip),%rax
  pxor   %xmm1,%xmm1
  subsd  D129(%rip),%xmm0
  addsd  D208(%rip),%xmm0
  cvtsd2ss %xmm0,%xmm1
  movq   %rax,%xmm0
  movss  %xmm1,0x8(%rsp)
  call   <randf@plt>
  movapd %xmm0,%xmm3
  subsd  D129(%rip),%xmm3
  addsd  D208(%rip),%xmm3
  cvtsd2ss %xmm3,%xmm3
  test   %ebx,%ebx
  jne    L15
  movss  0x18(%rsp),%xmm2
  movss  0x8(%rsp),%xmm1
  movss  0xc(%rsp),%xmm0
  mulss  %xmm2,%xmm1
  mulss  %xmm2,%xmm0
  mulss  D213(%rip),%xmm0
  mulss  %xmm3,%xmm2
  cvtss2sd %xmm1,%xmm1
  mulsd  D165(%rip),%xmm1
  cvtsd2ss %xmm1,%xmm1
  call   <thruster@plt>
L23:
  xor    %eax,%eax
  call   <end@plt>
  xor    %eax,%eax
  call   <end@plt>
  mov    0x88(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L10
  add    $0x98,%rsp
  pop    %rbx
  pop    %rbp
  ret
  cs nopw 0x0(%rax,%rax,1)
L15:
  mov    $0x7,%edi
  movss  %xmm3,0x1c(%rsp)
  lea    0x20(%rsp),%rbp
  call   <randn@plt>
  pxor   %xmm0,%xmm0
  pxor   %xmm4,%xmm4
  mov    %rbp,%rdi
  movsd  (%rsp),%xmm1
  mulsd  D84(%rip),%xmm1
  mov    %eax,%ebx
  cvtss2sd 0xc(%rsp),%xmm0
  cvtss2sd 0x8(%rsp),%xmm4
  mulsd  0x10(%rsp),%xmm4
  mov    D116(%rip),%edx
  lea    D85(%rip),%rsi
  lea    0x1(%rdx),%eax
  mov    %eax,D26(%rip)
  mulsd  %xmm0,%xmm1
  cvtsd2ss %xmm4,%xmm4
  movss  %xmm4,0x10(%rsp)
  cvtsd2ss %xmm1,%xmm1
  movss  %xmm1,0x18(%rsp)
  call   <sprintf@plt>
  movss  0x1c(%rsp),%xmm3
  movss  0x18(%rsp),%xmm1
  movss  D213(%rip),%xmm6
  movaps %xmm3,%xmm2
  movss  %xmm3,0xc(%rsp)
  mulss  %xmm1,%xmm2
  mulss  0x8(%rsp),%xmm1
  mulss  %xmm2,%xmm6
  cvtss2sd %xmm1,%xmm1
  mulsd  D165(%rip),%xmm1
  movaps %xmm6,%xmm0
  cvtsd2ss %xmm1,%xmm1
  call   <thruster@plt>
  pxor   %xmm1,%xmm1
  mov    %rbp,%rdi
  movss  0x10(%rsp),%xmm4
  movss  0xc(%rsp),%xmm3
  movss  D213(%rip),%xmm7
  mulss  %xmm4,%xmm3
  mulss  0x8(%rsp),%xmm4
  mulss  %xmm3,%xmm7
  movaps %xmm3,%xmm2
  cvtss2sd %xmm4,%xmm1
  mulsd  D165(%rip),%xmm1
  movaps %xmm7,%xmm0
  cvtsd2ss %xmm1,%xmm1
  call   <thruster_module@plt>
  movsd  (%rsp),%xmm0
  lea    0x2(%rbx),%edi
  mulsd  D26(%rip),%xmm0
  cvtsd2ss %xmm0,%xmm0
  call   <radial_dist@plt>
  mov    %rbp,%rdi
  call   <call_module@plt>
  xor    %eax,%eax
  call   <end_radial_dist@plt>
  jmp    L23
L10:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: extract_symbolic_data
arguments: data_tag: D107
type_guessed: f64
name: extract_symbolic_data
arguments: data_tag: D37
type_guessed: f64
name: extract_symbolic_data
arguments: data_tag: D212
type_guessed: f64
name: extract_symbolic_data
arguments: data_tag: D129
type_guessed: f64
name: extract_symbolic_data
arguments: data_tag: D208
type_guessed: f64
name: extract_symbolic_data
arguments: data_tag: D213
type_guessed: f32
name: extract_symbolic_data
arguments: data_tag: D165
type_guessed: f64
name: extract_symbolic_data
arguments: data_tag: D84
type_guessed: f64
name: extract_symbolic_data
arguments: data_tag: D85
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D26
type_guessed: f64

tool: D107: 0.2

tool: D37: 0.19

tool: D212: 0.3

tool: D129: 0.15

tool: D208: 1

tool: D213: 1.5

tool: D165: 0.4

tool: D84: 0.5

tool: D85: thruster_r_%d

tool: D26: 0.7

assistant: ```c
void thruster_cluster(float r) {
  static int modnum = 0;
  int ttype = randn(3);
  float v1, v2, v3;
  float r1, r2, r3;
  int n;
  char modname[100];
  onion();
  cyl(r * 0.2, r1 = r, r2 = r, 1);
  xlate(0, 0, r * 0.19);
  v1 = randf(0.3) - 0.15 + 1.0;
  v2 = randf(0.3) - 0.15 + 1.0;
  v3 = randf(0.3) - 0.15 + 1.0;
  switch (ttype) {
  case 0:
    thruster(r * v1 * 1.5, r * v2 * 0.4, r * v3);
    break;
  default:
    n = randn(7) + 2;
    r1 = r * 0.5 * v1;
    r2 = r * 0.2 * v2;
    r3 = r * 0.7;
    sprintf(modname, "thruster_r_%d", modnum++);
    thruster(r1 * v3 * 1.5, r1 * v2 * 0.4, r1 * v3);
    thruster_module(modname, r2 * v3 * 1.5, r2 * v2 * 0.4, r2 * v3);
    radial_dist(n, r3);
    call_module(modname);
    end_radial_dist();
    break;
  }
  end();
  end();
}
```