user: Please show me the C implementation that matches the assembly code listed below:

```asm
<plnkin>:
  endbr64
  mulsd  %xmm1,%xmm0
  push   %rbx
  sub    $0x10,%rsp
  movsd  D94(%rip),%xmm2
  divsd  %xmm0,%xmm2
  movapd %xmm2,%xmm6
  movsd  %xmm2,0x8(%rsp)
  mulsd  D68(%rip),%xmm6
  movapd %xmm6,%xmm0
  movsd  %xmm6,(%rsp)
  call   <exp@plt>
  movsd  0x8(%rsp),%xmm2
  movsd  (%rsp),%xmm6
  comisd D83(%rip),%xmm2
  movapd %xmm0,%xmm5
  jae    L66
  comisd D35(%rip),%xmm2
  jb     L25
  movsd  D113(%rip),%xmm0
  mov    $0x1,%ebx
  jmp    L38
  nop
L66:
  movsd  D107(%rip),%xmm0
  mov    $0x3,%ebx
L38:
  mulsd  %xmm6,%xmm0
  movsd  %xmm5,0x8(%rsp)
  movsd  %xmm6,(%rsp)
  call   <exp@plt>
  movsd  (%rsp),%xmm6
  movsd  0x8(%rsp),%xmm5
  movapd %xmm0,%xmm3
L68:
  movsd  D41(%rip),%xmm7
  movsd  D64(%rip),%xmm4
  pxor   %xmm0,%xmm0
  nopl   0x0(%rax)
L42:
  mulsd  %xmm5,%xmm3
  pxor   %xmm2,%xmm2
  mov    %ebx,%eax
  cvtsi2sd %ebx,%xmm2
  imul   %ebx,%eax
  mulsd  %xmm6,%xmm2
  imul   %eax,%eax
  movapd %xmm2,%xmm1
  addsd  %xmm7,%xmm1
  mulsd  %xmm2,%xmm1
  addsd  %xmm4,%xmm1
  mulsd  %xmm2,%xmm1
  pxor   %xmm2,%xmm2
  cvtsi2sd %eax,%xmm2
  addsd  %xmm4,%xmm1
  mulsd  %xmm3,%xmm1
  divsd  %xmm2,%xmm1
  addsd  %xmm1,%xmm0
  sub    $0x1,%ebx
  jne    L42
  mulsd  D80(%rip),%xmm0
  add    $0x10,%rsp
  pop    %rbx
  ret
  nop
L25:
  comisd D53(%rip),%xmm2
  jae    L33
  mulsd  D93(%rip),%xmm2
  addsd  D18(%rip),%xmm2
  cvttsd2si %xmm2,%rbx
L52:
  mov    %ebx,%eax
  pxor   %xmm0,%xmm0
  sub    $0x1,%ebx
  movsd  %xmm5,0x8(%rsp)
  neg    %eax
  movsd  %xmm6,(%rsp)
  cvtsi2sd %eax,%xmm0
  mulsd  %xmm6,%xmm0
  call   <exp@plt>
  test   %ebx,%ebx
  movsd  (%rsp),%xmm6
  movsd  0x8(%rsp),%xmm5
  movapd %xmm0,%xmm3
  pxor   %xmm0,%xmm0
  jg     L68
  add    $0x10,%rsp
  pop    %rbx
  ret
  nopl   0x0(%rax,%rax,1)
L33:
  mulsd  D17(%rip),%xmm2
  addsd  D63(%rip),%xmm2
  cvttsd2si %xmm2,%rbx
  jmp    L52
```

tool_calls: name: read_data
arguments: tag: D94
data_type: f64
name: read_data
arguments: tag: D68
data_type: f64
name: read_data
arguments: tag: D83
data_type: f64[2]
name: read_data
arguments: tag: D35
data_type: f64[2]
name: read_data
arguments: tag: D113
data_type: f32[2]
name: read_data
arguments: tag: D107
data_type: f32[2]
name: read_data
arguments: tag: D41
data_type: f64
name: read_data
arguments: tag: D64
data_type: f64
name: read_data
arguments: tag: D80
data_type: f64
name: read_data
arguments: tag: D53
data_type: f64[2]
name: read_data
arguments: tag: D93
data_type: byte[8]
name: read_data
arguments: tag: D18
data_type: f64
name: read_data
arguments: tag: D17
data_type: byte[8]
name: read_data
arguments: tag: D63
data_type: f64

tool: D94: 0.01

tool: D68: 1.43879

tool: {"D83": [7.4,4.2]}

tool: {"D35": [4.2,0.45]}

tool: {"D113": [0.0,-2.0]}

tool: {"D107": [0.0,-2.25]}

tool: D41: 3

tool: D64: 6

tool: D80: 0.15399

tool: {"D53": [0.45,-2.3]}

tool: {"D93": [0x14,0xae,0x47,0xe1,0x7a,0x54,0x47,0xc0]}

tool: D18: 33

tool: {"D17": [0x66,0x66,0x66,0x66,0x66,0x66,0x02,0xc0]}

tool: D63: 12.96

assistant: ```c
double plnkin(double lambda, double T) {
  double c2 = 1.43879;
  double y = 0.01 / (lambda * T);
  double z = c2 * y;
  double a2 = exp(z);
  double s = 0;
  int x = 0;
  if (y >= 7.4)
    x = 4;
  else if (y >= 4.2)
    x = 2;
  else if (y >= 0.45)
    x = (unsigned)(-2.3 * y + 12.96);
  else
    x = (unsigned)(-46.66 * y + 33.);
  double a1 = exp(-x * z);
  while (--x > 0) {
    a1 *= a2;
    double arg = x * z;
    s += a1 * (6. + arg * (6. + arg * (3. + arg))) / ((((x) * (x))) * (((x) * (x))));
  }
  return 0.15399 * s;
}
```