user: What is the c source code of the assembly code below?

```asm
<dtostrf>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  mov    %esi,%r13d
  push   %r12
  mov    %rdx,%r12
  push   %rbp
  mov    %edi,%ebp
  push   %rbx
  mov    %edi,%ebx
  sub    $0x38,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x28(%rsp)
  xor    %eax,%eax
  neg    %ebx
  movss  %xmm0,(%rsp)
  cmovs  %edi,%ebx
  call   <isnanf@plt>
  movss  (%rsp),%xmm1
  test   %rax,%rax
  je     L4
  pxor   %xmm0,%xmm0
  xor    %eax,%eax
  comiss %xmm1,%xmm0
  seta   %al
  add    $0x3,%eax
  cmp    %ebx,%eax
  jl     L552
L435:
  movss  D102(%rip),%xmm0
  call   <copysignf@plt>
  test   %rax,%rax
  jns    L17
  movl   $0x4e414e2d,(%r12)
  lea    0x4(%r12),%r8
  nop
L419:
  movb   $0x0,(%r8)
L204:
  mov    0x28(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L133
  add    $0x38,%rsp
  mov    %r8,%rax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopw   0x0(%rax,%rax,1)
L552:
  sub    %eax,%ebx
  test   %ebp,%ebp
  js     L704
  movss  D102(%rip),%xmm0
  call   <copysignf@plt>
  test   %rax,%rax
  js     L619
L538:
  mov    $0x414e,%r11d
  movb   $0x4e,0x2(%r12)
  lea    0x3(%r12),%r8
  mov    %r11w,(%r12)
  test   %ebx,%ebx
  je     L419
L362:
  movslq %ebx,%rbx
  mov    %r8,%rdi
  mov    $0x20,%esi
  mov    %rbx,%rdx
  call   <memset@plt>
  mov    %rax,%r8
  add    %rbx,%r8
  jmp    L419
  nopl   0x0(%rax,%rax,1)
L4:
  movaps %xmm1,%xmm0
  movss  %xmm1,(%rsp)
  call   <isinff@plt>
  movss  (%rsp),%xmm1
  test   %rax,%rax
  je     L464
  pxor   %xmm0,%xmm0
  comiss %xmm1,%xmm0
  ja     L499
  cmp    $0x3,%ebx
  jle    L144
  mov    $0x3,%eax
L593:
  sub    %eax,%ebx
  test   %ebp,%ebp
  js     L127
  comiss %xmm1,%xmm0
  ja     L603
L184:
  mov    $0x4e49,%r10d
  movb   $0x46,0x2(%r12)
  lea    0x3(%r12),%r8
  mov    %r10w,(%r12)
  test   %ebx,%ebx
  jne    L362
  jmp    L419
  nopl   0x0(%rax,%rax,1)
L464:
  lea    0x20(%rsp),%r15
  movaps %xmm1,%xmm0
  lea    0x1c(%rsp),%rsi
  mov    %r13d,%edi
  mov    %r15,%rdx
  movss  %xmm1,(%rsp)
  mov    %r13d,%ebx
  call   <fcvtf@plt>
  mov    %r13d,%ecx
  movss  (%rsp),%xmm1
  mov    %rax,%r8
  mov    0x1c(%rsp),%eax
  or     %eax,%ecx
  je     L233
  neg    %eax
  cmp    %eax,%r13d
  jge    L123
  mov    %r13d,%eax
  lea    D116(%rip),%r8
  neg    %eax
  mov    %eax,0x1c(%rsp)
L123:
  mov    %r8,%rdi
  mov    %r8,(%rsp)
  movss  %xmm1,0x8(%rsp)
  call   <strlen@plt>
  mov    0x1c(%rsp),%ecx
  mov    (%rsp),%r8
  mov    %eax,%r14d
  xor    %eax,%eax
  movss  0x8(%rsp),%xmm1
  cmp    %r14d,%ecx
  setl   %al
  add    %eax,%r14d
  test   %ecx,%ecx
  jne    L300
  add    $0x1,%r14d
L109:
  mov    0x20(%rsp),%r9d
  test   %r9d,%r9d
  je     L422
  add    $0x1,%r14d
  mov    %ebp,%eax
  movslq %r14d,%rbx
  sub    %r14d,%eax
  add    %r12,%rbx
  test   %eax,%eax
  jle    L252
  movslq %eax,%r15
  mov    $0x20,%esi
  mov    %r12,%rdi
  mov    %r8,0x8(%rsp)
  mov    %r15,%rdx
  mov    %ecx,(%rsp)
  add    %r15,%rbx
  call   <memset@plt>
  mov    (%rsp),%ecx
  mov    0x8(%rsp),%r8
  lea    (%r12,%r15,1),%rdx
L334:
  movb   $0x2d,(%rdx)
  lea    0x1(%rdx),%rax
L163:
  test   %ecx,%ecx
  jne    L177
  test   %r13d,%r13d
  je     L247
  mov    $0x2e30,%edi
  add    $0x2,%rax
  mov    %di,-0x2(%rax)
L247:
  cmp    %rbx,%rax
  jae    L40
  movzbl (%r8),%edx
  lea    0x1(%rax),%rsi
  lea    0x1(%r8),%rcx
  mov    %dl,(%rax)
  cmp    %rbx,%rsi
  je     L6
  mov    0x1c(%rsp),%edi
  lea    -0x1(%rdi),%edx
  jmp    L255
  nopl   0x0(%rax)
L444:
  movb   $0x2e,0x1(%rax)
  add    $0x2,%rax
  cmp    %rbx,%rax
  jae    L40
L515:
  movzbl (%rcx),%edi
  lea    0x1(%rax),%rsi
  sub    $0x1,%edx
  add    $0x1,%rcx
  mov    %dil,(%rax)
  cmp    %rbx,%rsi
  je     L6
L255:
  mov    %edx,0x1c(%rsp)
  test   %edx,%edx
  je     L444
  mov    %rsi,%rax
  cmp    %rbx,%rax
  jb     L515
L40:
  mov    %rax,%rbx
L6:
  test   %ebp,%ebp
  js     L658
L78:
  movb   $0x0,(%rbx)
  mov    %r12,%r8
  jmp    L204
  nopl   0x0(%rax)
L233:
  cmpb   $0x34,(%r8)
  jle    L656
  lea    D71(%rip),%r8
L688:
  movl   $0x1,0x1c(%rsp)
  jmp    L123
  xchg   %ax,%ax
L704:
  test   %ebx,%ebx
  je     L435
  movslq %ebx,%rbx
  mov    %r12,%rdi
  mov    $0x20,%esi
  mov    %rbx,%rdx
  add    %rbx,%r12
  call   <memset@plt>
  movss  (%rsp),%xmm1
  jmp    L435
  nopl   0x0(%rax,%rax,1)
L499:
  mov    $0x4,%eax
  cmp    $0x4,%ebx
  jg     L593
L100:
  movl   $0x464e492d,(%r12)
  lea    0x4(%r12),%r8
  jmp    L419
L127:
  test   %ebx,%ebx
  je     L144
  movslq %ebx,%rbx
  mov    %r12,%rdi
  mov    $0x20,%esi
  movss  %xmm1,(%rsp)
  mov    %rbx,%rdx
  add    %rbx,%r12
  call   <memset@plt>
  movss  (%rsp),%xmm1
  pxor   %xmm0,%xmm0
L144:
  comiss %xmm1,%xmm0
  ja     L100
  mov    $0x4e49,%eax
  movb   $0x46,0x2(%r12)
  lea    0x3(%r12),%r8
  mov    %ax,(%r12)
  jmp    L419
  nopw   0x0(%rax,%rax,1)
L177:
  jns    L247
  test   %r13d,%r13d
  je     L247
  mov    %ecx,%r9d
  mov    $0x1,%edx
  mov    $0x2e30,%esi
  neg    %r9d
  test   %ecx,%ecx
  mov    %si,(%rax)
  lea    0x2(%rax),%rdi
  cmovns %edx,%r9d
  mov    %ecx,%edx
  not    %edx
  cmp    $0xe,%edx
  jbe    L330
  mov    %r9d,%esi
  movd   %ecx,%xmm7
  movdqa D72(%rip),%xmm4
  movdqa D114(%rip),%xmm3
  shr    $0x4,%esi
  pshufd $0x0,%xmm7,%xmm1
  movdqa D14(%rip),%xmm2
  mov    %rdi,%rdx
  sub    $0x1,%esi
  paddd  D15(%rip),%xmm1
  shl    $0x4,%rsi
  lea    0x12(%rax,%rsi,1),%rax
  nopw   0x0(%rax,%rax,1)
L626:
  movdqa %xmm1,%xmm0
  movups %xmm2,(%rdx)
  add    $0x10,%rdx
  paddd  %xmm4,%xmm1
  paddd  %xmm3,%xmm0
  cmp    %rdx,%rax
  jne    L626
  mov    %r9d,%eax
  pshufd $0xff,%xmm0,%xmm0
  and    $0xfffffff0,%eax
  movd   %xmm0,%edx
  mov    %eax,%r10d
  lea    (%rax,%rcx,1),%esi
  add    %rdi,%r10
  cmp    %r9d,%eax
  je     L88
L703:
  sub    %eax,%r9d
  lea    -0x1(%r9),%edx
  cmp    $0x6,%edx
  jbe    L225
  mov    D14(%rip),%rdx
  movd   %esi,%xmm0
  movq   D96(%rip),%xmm1
  mov    %rdx,(%rdi,%rax,1)
  lea    0x1(%rsi),%eax
  movd   %eax,%xmm5
  mov    %r9d,%eax
  punpckldq %xmm5,%xmm0
  and    $0xfffffff8,%eax
  paddd  %xmm1,%xmm0
  mov    %eax,%r11d
  add    %eax,%esi
  add    %r11,%r10
  pshufd $0xe5,%xmm0,%xmm6
  movd   %xmm6,%edx
  cmp    %eax,%r9d
  je     L88
L225:
  mov    %esi,%edx
  movb   $0x30,(%r10)
  add    $0x1,%edx
  je     L88
  mov    %esi,%edx
  movb   $0x30,0x1(%r10)
  add    $0x2,%edx
  je     L88
  mov    %esi,%edx
  movb   $0x30,0x2(%r10)
  add    $0x3,%edx
  je     L88
  mov    %esi,%edx
  movb   $0x30,0x3(%r10)
  add    $0x4,%edx
  je     L88
  mov    %esi,%edx
  movb   $0x30,0x4(%r10)
  add    $0x5,%edx
  je     L88
  mov    %esi,%edx
  movb   $0x30,0x5(%r10)
  add    $0x6,%edx
  je     L88
  movb   $0x30,0x6(%r10)
  lea    0x7(%rsi),%edx
L88:
  mov    %ecx,%eax
  mov    %edx,0x1c(%rsp)
  neg    %eax
  test   %ecx,%ecx
  mov    $0x1,%ecx
  cmovns %rcx,%rax
  add    %rdi,%rax
  jmp    L247
  nopl   0x0(%rax)
L422:
  mov    %ebp,%eax
  movslq %r14d,%rbx
  sub    %r14d,%eax
  add    %r12,%rbx
  test   %eax,%eax
  jle    L243
  movslq %eax,%r15
  mov    $0x20,%esi
  mov    %r12,%rdi
  mov    %r8,0x8(%rsp)
  mov    %r15,%rdx
  mov    %ecx,(%rsp)
  add    %r15,%rbx
  call   <memset@plt>
  mov    (%rsp),%ecx
  mov    0x8(%rsp),%r8
  lea    (%r12,%r15,1),%rax
  jmp    L163
  nopw   0x0(%rax,%rax,1)
L300:
  movss  %xmm1,(%rsp)
  jns    L109
  test   %r13d,%r13d
  je     L109
  mov    %r8,%rdi
  mov    %r8,0x8(%rsp)
  lea    0x2(%r13),%r14d
  call   <strlen@plt>
  mov    0x1c(%rsp),%ecx
  mov    0x8(%rsp),%r8
  mov    %eax,%r9d
  lea    (%rcx,%r13,1),%eax
  cmp    %eax,%r9d
  jbe    L109
  test   %r13d,%r13d
  movss  (%rsp),%xmm1
  jle    L594
  movss  D45(%rip),%xmm0
L251:
  mulss  %xmm0,%xmm1
  sub    $0x1,%ebx
  jne    L251
L594:
  mov    %r15,%rdx
  lea    0x24(%rsp),%rsi
  movaps %xmm1,%xmm0
  mov    %ebx,%edi
  call   <fcvtf@plt>
  mov    0x1c(%rsp),%ecx
  lea    0x1(%r13),%edx
  mov    %rax,%r8
  mov    0x24(%rsp),%eax
  sub    %ecx,%eax
  cmp    %edx,%eax
  jne    L109
  add    $0x1,%ecx
  mov    %ecx,0x1c(%rsp)
  jmp    L109
L658:
  add    %ebp,%r14d
  mov    %r14d,%eax
  not    %eax
  jns    L78
  xor    %edx,%edx
  test   %eax,%eax
  mov    %rbx,%rdi
  mov    $0x20,%esi
  cmovns %eax,%edx
  movslq %edx,%rbp
  add    $0x1,%rbp
  mov    %rbp,%rdx
  add    %rbp,%rbx
  call   <memset@plt>
  jmp    L78
  nopl   0x0(%rax)
L17:
  mov    $0x414e,%edx
  movb   $0x4e,0x2(%r12)
  lea    0x3(%r12),%r8
  mov    %dx,(%r12)
  jmp    L419
L656:
  lea    D116(%rip),%r8
  jmp    L688
  xchg   %ax,%ax
L243:
  mov    %r12,%rax
  jmp    L163
  nopl   0x0(%rax,%rax,1)
L252:
  mov    %r12,%rdx
  jmp    L334
L330:
  mov    %rdi,%r10
  mov    %ecx,%esi
  xor    %eax,%eax
  jmp    L703
L133:
  call   <__stack_chk_fail@plt>
L603:
  movb   $0x2d,(%r12)
  add    $0x1,%r12
  jmp    L184
L619:
  movb   $0x2d,(%r12)
  add    $0x1,%r12
  jmp    L538
```

tool_calls: name: parse_data
arguments: data_tag: D102
type: byte[4]
name: parse_data
arguments: data_tag: D116
type: string
name: parse_data
arguments: data_tag: D71
type: string
name: parse_data
arguments: data_tag: D72
type: byte[16]
name: parse_data
arguments: data_tag: D114
type: byte[16]
name: parse_data
arguments: data_tag: D14
type: byte[16]
name: parse_data
arguments: data_tag: D15
type: byte[16]
name: parse_data
arguments: data_tag: D96
type: byte[8]
name: parse_data
arguments: data_tag: D45
type: f32

tool: {"D102": [0x00,0x00,0x80,0x3f]}

tool: D116: 0

tool: D71: 1

tool: {"D72": [0x10,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x10,0x00,0x00,0x00]}

tool: {"D114": [0x0d,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x0d,0x00,0x00,0x00]}

tool: {"D14": [0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30]}

tool: {"D15": [0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x03,0x00,0x00,0x00]}

tool: {"D96": [0x07,0x00,0x00,0x00,0x07,0x00,0x00,0x00]}

tool: D45: 10

assistant: ```c
char *dtostrf(float val, int width, unsigned int precision, char *buf) {
  int decpt, sign, reqd, pad;
  const char *s, *e;
  char *p;
  int awidth = abs(width);
  if (isnanf(val)) {
    int ndigs = (val < 0) ? 4 : 3;
    awidth = (awidth > ndigs) ? awidth - ndigs : 0;
    if (width < 0) {
      while (awidth) {
        *buf++ = ' ';
        awidth--;
      }
    }
    if (copysignf(1.0f, val) < 0)
      *buf++ = '-';
    if (0x04) {
      *buf++ = 'N';
      *buf++ = 'A';
      *buf++ = 'N';
    } else {
      *buf++ = 'n';
      *buf++ = 'a';
      *buf++ = 'n';
    }
    while (awidth) {
      *buf++ = ' ';
      awidth--;
    }
    *buf = 0;
    return buf;
  }
  if (isinff(val)) {
    int ndigs = (val < 0) ? 4 : 3;
    awidth = (awidth > ndigs) ? awidth - ndigs : 0;
    if (width < 0) {
      while (awidth) {
        *buf++ = ' ';
        awidth--;
      }
    }
    if (val < 0)
      *buf++ = '-';
    if (0x04) {
      *buf++ = 'I';
      *buf++ = 'N';
      *buf++ = 'F';
    } else {
      *buf++ = 'i';
      *buf++ = 'n';
      *buf++ = 'f';
    }
    while (awidth) {
      *buf++ = ' ';
      awidth--;
    }
    *buf = 0;
    return buf;
  }
  s = fcvtf(val, precision, &decpt, &sign);
  if (precision == 0 && decpt == 0) {
    s = (*s < '5') ? "0" : "1";
    decpt++;
  }
  if (-decpt > (int)precision) {
    s = "0";
    decpt = -precision;
  }
  reqd = strlen(s);
  if (reqd > decpt)
    reqd++;
  if (decpt == 0)
    reqd++;
  if (decpt < 0 && precision > 0) {
    reqd = precision + 2;
    if (strlen(s) > precision + decpt) {
      int newPrecision = precision;
      int newDecimalPoint;
      while (newPrecision > 0) {
        val *= 10.0;
        newPrecision--;
      }
      s = fcvtf(val, newPrecision, &newDecimalPoint, &sign);
      if (newDecimalPoint - decpt == precision + 1)
        decpt++;
    }
  }
  if (sign)
    reqd++;
  p = buf;
  e = p + reqd;
  pad = width - reqd;
  if (pad > 0) {
    e += pad;
    while (pad-- > 0)
      *p++ = ' ';
  }
  if (sign)
    *p++ = '-';
  if (decpt == 0 && precision > 0) {
    *p++ = '0';
    *p++ = '.';
  } else if (decpt < 0 && precision > 0) {
    *p++ = '0';
    *p++ = '.';
    while (decpt < 0) {
      decpt++;
      *p++ = '0';
    }
  }
  while (p < e) {
    *p++ = *s++;
    if (p == e)
      break;
    if (--decpt == 0)
      *p++ = '.';
  }
  if (width < 0) {
    pad = (reqd + width) * -1;
    while (pad-- > 0)
      *p++ = ' ';
  }
  *p = 0;
  return buf;
}
```