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

```asm
<_pst_debug_hexdump>:
  endbr64
  push   %r15
  mov    $0x1e,%eax
  push   %r14
  push   %r13
  mov    %rdx,%r13
  push   %r12
  mov    %rsi,%r12
  mov    %rdi,%rsi
  push   %rbp
  mov    %rdi,%rbp
  mov    $0xa,%edi
  push   %rbx
  sub    $0x18,%rsp
  cmp    $0xffffffff,%ecx
  cmovne %ecx,%eax
  mov    %eax,0x8(%rsp)
  call   <fputc@plt>
  test   %r13,%r13
  je     L3
  xor    %r15d,%r15d
  nopl   0x0(%rax,%rax,1)
L12:
  mov    %r15d,%edx
  lea    D24(%rip),%rsi
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <fprintf@plt>
  mov    0x8(%rsp),%eax
  movslq %r15d,%rbx
  test   %eax,%eax
  jle    L69
  cmp    %rbx,%r13
  jbe    L53
  sub    $0x1,%eax
  mov    %rbx,%r14
  add    %rbx,%rax
  mov    %rax,(%rsp)
  mov    $0x1,%eax
  sub    %ebx,%eax
  mov    %eax,0xc(%rsp)
  jmp    L82
  xchg   %ax,%ax
L72:
  add    $0x1,%r14
  cmp    %r14,%r13
  jbe    L128
L82:
  movzbl (%r12,%r14,1),%edx
  lea    D14(%rip),%rsi
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <fprintf@plt>
  mov    0xc(%rsp),%eax
  lea    (%rax,%r14,1),%r15d
  cmp    (%rsp),%r14
  jne    L72
  mov    %rbp,%rsi
  mov    $0x3a,%edi
  call   <fputc@plt>
L5:
  movslq 0x8(%rsp),%rax
  lea    (%rax,%rbx,1),%r15
  jmp    L29
  nopl   0x0(%rax)
L35:
  cmp    %r13,%rbx
  jae    L99
L29:
  movzbl (%r12,%rbx,1),%edi
  call   <isgraph@plt>
  mov    $0x2e,%edi
  test   %rax,%rax
  je     L27
  movzbl (%r12,%rbx,1),%edi
L27:
  mov    %rbp,%rsi
  call   <fputc@plt>
  lea    0x1(%rbx),%eax
  add    $0x1,%rbx
  cmp    %rbx,%r15
  jne    L35
  mov    %eax,%r15d
L52:
  mov    %rbp,%rsi
  mov    $0xa,%edi
  call   <fputc@plt>
  cmp    %rbx,%r13
  ja     L12
  jmp    L3
  nopl   0x0(%rax)
L53:
  xor    %r15d,%r15d
  nopl   0x0(%rax,%rax,1)
L128:
  mov    %rbp,%rcx
  mov    $0x3,%edx
  mov    $0x1,%esi
  add    $0x1,%r15d
  lea    D13(%rip),%rdi
  call   <fwrite@plt>
  cmp    %r15d,0x8(%rsp)
  jg     L128
  mov    %rbp,%rsi
  mov    $0x3a,%edi
  call   <fputc@plt>
  cmp    %rbx,%r13
  ja     L5
  nopw   0x0(%rax,%rax,1)
L99:
  mov    %rbp,%rsi
  mov    $0xa,%edi
  call   <fputc@plt>
L3:
  add    $0x18,%rsp
  mov    %rbp,%rsi
  mov    $0xa,%edi
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  jmp    1080 <fputc@plt>
L69:
  mov    %rbp,%rsi
  mov    $0x3a,%edi
  call   <fputc@plt>
  jmp    L52
```

tool_calls: name: parse_data
arguments: label: D24
datatype: string
name: parse_data
arguments: label: D14
datatype: string
name: parse_data
arguments: label: D13
datatype: string

tool: D24: %X	:

tool: D14: %02hhx 

tool: D13:    

assistant: ```c
void _pst_debug_hexdump(FILE *out, unsigned char *buf, size_t size, int col) {
  int off = 0, toff;
  int count = 0;
  if (col == -1) {
    col = 30;
  }
  fprintf(out, "\n");
  while (off < size) {
    fprintf(out, "%X\t:", off);
    toff = off;
    while (count < col && off < size) {
      fprintf(out, "%02hhx ", buf[off]);
      off++;
      count++;
    }
    off = toff;
    while (count < col) {
      fprintf(out, "   ");
      count++;
    }
    count = 0;
    fprintf(out, ":");
    while (count < col && off < size) {
      fprintf(out, "%c", isgraph(buf[off]) ? buf[off] : '.');
      off++;
      count++;
    }
    fprintf(out, "\n");
    count = 0;
  }
  fprintf(out, "\n");
}
```