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

```asm
<outxwords>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x70,%rsp
  mov    %rdi,-0x58(%rbp)
  mov    %rsi,-0x60(%rbp)
  mov    %edx,-0x64(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  mov    -0x58(%rbp),%rax
  mov    %rax,-0x38(%rbp)
  mov    -0x60(%rbp),%rax
  shr    $0x3,%rax
  mov    %rax,-0x30(%rbp)
  movq   $0x0,-0x28(%rbp)
  movq   $0x0,-0x48(%rbp)
  jmp    L198
L76:
  mov    -0x30(%rbp),%rax
  sub    -0x48(%rbp),%rax
  shl    $0x3,%rax
  lea    -0x8(%rax),%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  test   %rax,%rax
  jne    L163
  addq   $0x1,-0x48(%rbp)
L198:
  mov    -0x48(%rbp),%rax
  cmp    -0x30(%rbp),%rax
  jl     L76
  jmp    L135
L163:
  nop
L135:
  mov    -0x48(%rbp),%rax
  cmp    -0x30(%rbp),%rax
  jne    L220
  lea    D66(%rip),%rax
  mov    %rax,%rdi
  call   <out@plt>
  jmp    L57
L220:
  cmpq   $0xfe,-0x48(%rbp)
  jle    L153
  mov    -0x48(%rbp),%rax
  shl    $0x2,%rax
  cmp    %rax,-0x30(%rbp)
  jle    L161
L153:
  movq   $0x0,-0x48(%rbp)
L161:
  andq   $0xfffffffffffffffc,-0x48(%rbp)
  mov    -0x48(%rbp),%rax
  sub    %rax,-0x30(%rbp)
  movq   $0x0,-0x50(%rbp)
  movq   $0x0,-0x40(%rbp)
  jmp    L173
L63:
  mov    -0x40(%rbp),%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  cmp    %rax,-0x50(%rbp)
  jae    L55
  mov    -0x40(%rbp),%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  mov    %rax,-0x50(%rbp)
L55:
  addq   $0x1,-0x40(%rbp)
L173:
  mov    -0x40(%rbp),%rax
  cmp    -0x30(%rbp),%rax
  jl     L63
  mov    $0xffffffff,%eax
  cmp    %rax,-0x50(%rbp)
  ja     L26
  cmpq   $0xffff,-0x50(%rbp)
  ja     L178
  cmpq   $0xff,-0x50(%rbp)
  ja     L194
  cmpq   $0x63,-0x50(%rbp)
  jbe    L179
  lea    D13(%rip),%rax
  jmp    L167
L179:
  lea    D1(%rip),%rax
  jmp    L167
L194:
  lea    D52(%rip),%rax
  jmp    L167
L178:
  lea    D60(%rip),%rax
  jmp    L167
L26:
  lea    D36(%rip),%rax
L167:
  mov    %rax,-0x28(%rbp)
  mov    $0x1,%edi
  call   <beginblock@plt>
  movq   $0x0,-0x40(%rbp)
  jmp    L211
L8:
  mov    -0x40(%rbp),%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0x28(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <outf@plt>
  addq   $0x1,-0x40(%rbp)
L211:
  mov    -0x40(%rbp),%rax
  cmp    -0x30(%rbp),%rax
  jl     L8
  cmpq   $0x0,-0x48(%rbp)
  je     L71
  mov    -0x28(%rbp),%rdx
  lea    -0x20(%rbp),%rax
  lea    D37(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <sprintf@plt>
  mov    -0x48(%rbp),%rdx
  lea    -0x20(%rbp),%rax
  mov    $0x0,%esi
  mov    %rax,%rdi
  call   <strf@plt>
  mov    %eax,%edi
  call   <outcomment@plt>
L71:
  mov    $0x0,%eax
  call   <endblock@plt>
L57:
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L2
  call   <__stack_chk_fail@plt>
L2:
  leave
  ret
```

tool_calls: name: disassemble_data
arguments: data_label: D66
data_type: string
name: disassemble_data
arguments: data_label: D13
data_type: string
name: disassemble_data
arguments: data_label: D1
data_type: string
name: disassemble_data
arguments: data_label: D52
data_type: string
name: disassemble_data
arguments: data_label: D60
data_type: string
name: disassemble_data
arguments: data_label: D36
data_type: string
name: disassemble_data
arguments: data_label: D37
data_type: string

tool: D66: { 0 }

tool: D13: 0x%02lX

tool: D1: %lu

tool: D52: 0x%04lX

tool: D60: 0x%08lX

tool: D36: 0x%016lX

tool: D37: %s x %%ld

assistant: ```c
void outxwords(void const *ptr, long size, int ndx) {
  Elf64_Xword const *xwords = ptr;
  long count = size / sizeof *xwords;
  char fmtbuf[16];
  char const *fmt = NULL;
  unsigned long max;
  long zeroes, i;
  (void)ndx;
  for (zeroes = 0; zeroes < count; ++zeroes)
    if (xwords[count - zeroes - 1])
      break;
  if (zeroes == count) {
    out("{ 0 }");
    return;
  }
  if (zeroes < 255 || zeroes * 4 < count)
    zeroes = 0;
  zeroes &= ~3;
  count -= zeroes;
  max = 0;
  for (i = 0; i < count; ++i) {
    if (max < xwords[i])
      max = xwords[i];
  }
  fmt = max > 0xFFFFFFFF ? "0x%016lX" : max > 0x0000FFFF ? "0x%08lX" : max > 0x000000FF ? "0x%04lX" : max > 99 ? "0x%02lX" : "%lu";
  beginblock(1);
  for (i = 0; i < count; ++i)
    outf(fmt, xwords[i]);
  if (zeroes) {
    sprintf(fmtbuf, "%s x %%ld", fmt);
    outcomment(strf(fmtbuf, 0, zeroes));
  }
  endblock();
}
```