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

```asm
<main>:
  endbr64
  push   %r12
  mov    $0x23,%esi
  push   %rbp
  push   %rbx
  sub    $0xa0,%rsp
  movdqa D17(%rip),%xmm0
  mov    %fs:0x28,%rax
  mov    %rax,0x98(%rsp)
  xor    %eax,%eax
  mov    %rsp,%r12
  mov    D43(%rip),%rax
  movl   $0x2694,0x88(%rsp)
  movaps %xmm0,(%rsp)
  movdqa D30(%rip),%xmm0
  mov    %r12,%rdi
  mov    %rax,0x80(%rsp)
  movaps %xmm0,0x10(%rsp)
  movdqa D31(%rip),%xmm0
  movaps %xmm0,0x20(%rsp)
  movdqa D21(%rip),%xmm0
  movaps %xmm0,0x30(%rsp)
  movdqa D36(%rip),%xmm0
  movaps %xmm0,0x40(%rsp)
  movdqa D28(%rip),%xmm0
  movaps %xmm0,0x50(%rsp)
  movdqa D18(%rip),%xmm0
  movaps %xmm0,0x60(%rsp)
  movdqa D53(%rip),%xmm0
  movaps %xmm0,0x70(%rsp)
  call   <max@plt>
  test   %eax,%eax
  jle    L0
  mov    %eax,%ebp
  mov    $0x1,%ebx
  xchg   %ax,%ax
L4:
  mov    %ebx,%edx
  mov    $0x23,%esi
  lea    (%rbx,%rbx,4),%ebx
  mov    %r12,%rdi
  call   <radix_sort@plt>
  mov    $0x23,%esi
  mov    %r12,%rdi
  add    %ebx,%ebx
  call   <print@plt>
  mov    %ebp,%eax
  cltd
  idiv   %ebx
  test   %eax,%eax
  jne    L4
L0:
  mov    0x98(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L13
  add    $0xa0,%rsp
  xor    %eax,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  ret
L13:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: extract_symbolic_data
arguments: label: D17
type_infered: byte[16]
name: extract_symbolic_data
arguments: label: D43
type_infered: byte[8]
name: extract_symbolic_data
arguments: label: D30
type_infered: byte[16]
name: extract_symbolic_data
arguments: label: D31
type_infered: byte[16]
name: extract_symbolic_data
arguments: label: D21
type_infered: byte[16]
name: extract_symbolic_data
arguments: label: D36
type_infered: byte[16]
name: extract_symbolic_data
arguments: label: D28
type_infered: byte[16]
name: extract_symbolic_data
arguments: label: D18
type_infered: byte[16]
name: extract_symbolic_data
arguments: label: D53
type_infered: byte[16]

tool: {"D17": [0x03,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x62,0x00,0x00,0x00]}

tool: {"D43": [0x48,0x1f,0x00,0x00,0xb1,0xcb,0x74,0x00]}

tool: {"D30": [0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0x64,0x03,0x00,0x00]}

tool: {"D31": [0xd3,0x00,0x00,0x00,0xa7,0x08,0x00,0x00,0x0a,0x00,0x00,0x00,0xcb,0x01,0x00,0x00]}

tool: {"D21": [0xa6,0x02,0x00,0x00,0x4d,0x05,0x00,0x00,0x24,0x00,0x00,0x00,0x09,0x00,0x00,0x00]}

tool: {"D36": [0x1e,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x31,0x00,0x00,0x00]}

tool: {"D28": [0x52,0x00,0x00,0x00,0xec,0x01,0x00,0x00,0x53,0x00,0x00,0x00,0x99,0x00,0x00,0x00]}

tool: {"D18": [0xff,0x02,0x00,0x00,0x40,0x00,0x00,0x00,0x94,0x03,0x00,0x00,0x51,0x00,0x00,0x00]}

tool: {"D53": [0x04,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0xd2,0x04,0x00,0x00,0x85,0x1a,0x00,0x00]}

assistant: ```c
int main(void) {
  int arr[] = {3, 24, 78, 98, 6, 12, 45, 868, 211, 2215, 10, 459, 678, 1357, 36, 9, 30, 25, 1, 49, 82, 492, 83, 153, 767, 64, 916, 81, 4, 97, 1234, 6789, 8008, 7654321, 9876};
  int length = 35;
  int m = max(arr, length);
  for (int radix = 1; m / radix > 0; radix *= 10) {
    radix_sort(arr, length, radix);
    print(arr, length);
  }
  return 0;
}
```