user: Demonstrate the C code that generates the assembly output below:

```asm
<hextoa>:
  endbr64
  mov    %rdi,%r8
  mov    %rdx,%rdi
  mov    %rcx,%rdx
  mov    %rsi,%r10
  shr    %rdx
  sub    %rdx,%r10
  test   %rcx,%rcx
  je     L21
  push   %rbx
  lea    -0x1(%rcx),%rbx
  mov    %rcx,%r9
  lea    (%r8,%r10,1),%rcx
  mov    %rbx,%rax
  shr    %rax
  lea    0x1(%rax),%r11
  sub    %rdx,%rax
  lea    0x1(%rax,%rsi,1),%rax
  lea    (%rdi,%r11,2),%rdx
  add    %r8,%rax
  cmp    %rax,%rdi
  setae  %al
  cmp    %rdx,%rcx
  setae  %dl
  or     %dl,%al
  je     L100
  cmp    $0x1d,%rbx
  seta   %dl
  cmp    $0xffffffffffffffff,%r9
  setne  %al
  test   %al,%dl
  je     L100
  mov    %r11,%rsi
  movdqa D29(%rip),%xmm7
  xor    %eax,%eax
  xor    %edx,%edx
  movdqa D63(%rip),%xmm12
  shr    $0x4,%rsi
  movdqa D60(%rip),%xmm11
  pxor   %xmm4,%xmm4
  movdqa D18(%rip),%xmm6
  movdqa D6(%rip),%xmm5
  movdqa D0(%rip),%xmm10
  movdqa D75(%rip),%xmm9
  movdqa D74(%rip),%xmm8
  nopw   0x0(%rax,%rax,1)
L23:
  movdqu (%rdi,%rax,2),%xmm1
  movdqu 0x10(%rdi,%rax,2),%xmm0
  add    $0x1,%rdx
  movdqu 0x10(%rdi,%rax,2),%xmm2
  pand   %xmm12,%xmm0
  pand   %xmm12,%xmm1
  packuswb %xmm0,%xmm1
  movdqu (%rdi,%rax,2),%xmm0
  psrlw  $0x8,%xmm2
  movdqa %xmm1,%xmm3
  movdqa %xmm1,%xmm13
  psrlw  $0x8,%xmm0
  pcmpgtb %xmm10,%xmm13
  paddb  %xmm9,%xmm3
  packuswb %xmm2,%xmm0
  movdqa %xmm1,%xmm2
  paddb  %xmm3,%xmm3
  paddb  %xmm11,%xmm2
  paddb  %xmm3,%xmm3
  paddb  %xmm2,%xmm2
  paddb  %xmm3,%xmm3
  paddb  %xmm2,%xmm2
  paddb  %xmm3,%xmm3
  paddb  %xmm2,%xmm2
  pand   %xmm13,%xmm3
  paddb  %xmm2,%xmm2
  pandn  %xmm2,%xmm13
  por    %xmm3,%xmm13
  movdqa %xmm1,%xmm3
  paddb  %xmm8,%xmm3
  psubusb %xmm7,%xmm3
  pcmpeqb %xmm4,%xmm3
  pand   %xmm3,%xmm2
  pandn  %xmm13,%xmm3
  movdqa %xmm0,%xmm13
  por    %xmm3,%xmm2
  movdqa %xmm1,%xmm3
  paddb  %xmm11,%xmm13
  paddb  %xmm5,%xmm3
  pcmpgtb %xmm6,%xmm1
  paddb  %xmm3,%xmm3
  paddb  %xmm3,%xmm3
  paddb  %xmm3,%xmm3
  pand   %xmm1,%xmm2
  paddb  %xmm3,%xmm3
  pandn  %xmm3,%xmm1
  movdqa %xmm0,%xmm3
  por    %xmm2,%xmm1
  pcmpgtb %xmm10,%xmm3
  movdqa %xmm0,%xmm2
  paddb  %xmm9,%xmm2
  paddb  %xmm1,%xmm13
  paddb  %xmm1,%xmm2
  pand   %xmm3,%xmm2
  pandn  %xmm13,%xmm3
  por    %xmm2,%xmm3
  movdqa %xmm0,%xmm2
  paddb  %xmm8,%xmm2
  psubusb %xmm7,%xmm2
  pcmpeqb %xmm4,%xmm2
  pand   %xmm2,%xmm13
  pandn  %xmm3,%xmm2
  movdqa %xmm0,%xmm3
  pcmpgtb %xmm6,%xmm0
  paddb  %xmm5,%xmm3
  por    %xmm13,%xmm2
  paddb  %xmm3,%xmm1
  pand   %xmm0,%xmm2
  pandn  %xmm1,%xmm0
  por    %xmm2,%xmm0
  movups %xmm0,(%rcx,%rax,1)
  add    $0x10,%rax
  cmp    %rdx,%rsi
  ja     L23
  mov    %r11,%rax
  and    $0xfffffffffffffff0,%rax
  add    %rax,%r10
  lea    (%rax,%rax,1),%rdx
  cmp    %rax,%r11
  je     L132
  lea    (%r8,%r10,1),%rsi
  jmp    L13
  cs nopw 0x0(%rax,%rax,1)
L46:
  lea    -0x57(%rcx),%eax
  shl    $0x4,%eax
L159:
  movzbl 0x1(%rdi,%rdx,1),%ecx
  lea    -0x57(%rax,%rcx,1),%r8d
  cmp    $0x60,%cl
  jg     L94
  lea    -0x30(%rax,%rcx,1),%r8d
  cmp    $0x40,%cl
  lea    -0x37(%rax,%rcx,1),%eax
  cmovg  %eax,%r8d
L94:
  add    $0x2,%rdx
  mov    %r8b,(%rsi)
  add    $0x1,%rsi
  cmp    %rdx,%r9
  jbe    L132
L13:
  movzbl (%rdi,%rdx,1),%ecx
  cmp    $0x60,%cl
  jg     L46
  mov    %ecx,%r8d
  lea    -0x37(%rcx),%eax
  shl    $0x4,%r8d
  shl    $0x4,%eax
  cmp    $0x40,%cl
  cmovle %r8d,%eax
  jmp    L159
  nopl   0x0(%rax)
L132:
  xor    %eax,%eax
  pop    %rbx
  ret
  nopl   0x0(%rax)
L100:
  xor    %edx,%edx
  jmp    L81
  nopl   0x0(%rax)
L140:
  lea    -0x57(%rsi),%eax
  movzbl 0x1(%rdi,%rdx,1),%esi
  shl    $0x4,%eax
  cmp    $0x60,%sil
  jle    L158
L111:
  lea    -0x57(%rax,%rsi,1),%eax
L142:
  add    $0x2,%rdx
  mov    %al,(%rcx)
  add    $0x1,%rcx
  cmp    %rdx,%r9
  jbe    L132
L81:
  movzbl (%rdi,%rdx,1),%esi
  cmp    $0x60,%sil
  jg     L140
  lea    -0x37(%rsi),%r8d
  mov    %esi,%eax
  shl    $0x4,%r8d
  shl    $0x4,%eax
  cmp    $0x41,%sil
  movzbl 0x1(%rdi,%rdx,1),%esi
  cmovge %r8d,%eax
  cmp    $0x60,%sil
  jg     L111
L158:
  lea    -0x37(%rax,%rsi,1),%r8d
  cmp    $0x41,%sil
  lea    -0x30(%rax,%rsi,1),%eax
  cmovge %r8d,%eax
  jmp    L142
  nopl   0x0(%rax)
L21:
  xor    %eax,%eax
  ret
```

tool_calls: name: parse_data
arguments: label: D29
data_type: byte[16]
name: parse_data
arguments: label: D63
data_type: byte[16]
name: parse_data
arguments: label: D60
data_type: byte[16]
name: parse_data
arguments: label: D18
data_type: byte[16]
name: parse_data
arguments: label: D6
data_type: byte[16]
name: parse_data
arguments: label: D0
data_type: byte[16]
name: parse_data
arguments: label: D75
data_type: byte[16]
name: parse_data
arguments: label: D74
data_type: byte[16]

tool: {"D29": [0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f]}

tool: {"D63": [0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00]}

tool: {"D60": [0xc9,0xc9,0xc9,0xc9,0xc9,0xc9,0xc9,0xc9,0xc9,0xc9,0xc9,0xc9,0xc9,0xc9,0xc9,0xc9]}

tool: {"D18": [0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40]}

tool: {"D6": [0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0]}

tool: {"D0": [0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60]}

tool: {"D75": [0xa9,0xa9,0xa9,0xa9,0xa9,0xa9,0xa9,0xa9,0xa9,0xa9,0xa9,0xa9,0xa9,0xa9,0xa9,0xa9]}

tool: {"D74": [0xbf,0xbf,0xbf,0xbf,0xbf,0xbf,0xbf,0xbf,0xbf,0xbf,0xbf,0xbf,0xbf,0xbf,0xbf,0xbf]}

assistant: ```c
int hextoa(char *const a, size_t alen, const char *const hex, size_t hexlen) {
  size_t j = alen - (hexlen / 2);
  for (size_t i = 0; i < hexlen; ++i) {
    char c;
    if (hex[i] >= 0x61) {
      c = (char)((hex[i] - 0x57) << 4);
    } else if (hex[i] >= 0x41) {
      c = (char)((hex[i] - 0x37) << 4);
    } else {
      c = (char)((hex[i] - 0x30) << 4);
    }
    ++i;
    if (hex[i] >= 0x61) {
      c += hex[i] - 0x57;
    } else if (hex[i] >= 0x41) {
      c += hex[i] - 0x37;
    } else {
      c += hex[i] - 0x30;
    }
    a[j] = c;
    ++j;
  }
  return 0;
}
```