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

```asm
<_prtl10>:
  endbr64
  movabs $0x6666666666666667,%rcx
  push   %r14
  mov    %rsi,%r14
  push   %r13
  mov    %rdi,%r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x20,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x18(%rsp)
  xor    %eax,%eax
  mov    %rdi,%rax
  movb   $0x0,0xd(%rsp)
  imul   %rcx
  mov    %rdi,%rax
  sar    $0x3f,%rax
  sar    $0x2,%rdx
  mov    %rdx,%r12
  sub    %rax,%r12
  lea    (%r12,%r12,4),%rax
  add    %rax,%rax
  sub    %rax,%r13
  mov    %r12,%rax
  imul   %rcx
  mov    %r12,%rax
  add    $0x30,%r13d
  sar    $0x3f,%rax
  mov    %r13b,0xe(%rsp)
  sar    $0x2,%rdx
  mov    %rdx,%rbp
  sub    %rax,%rbp
  lea    0x0(%rbp,%rbp,4),%rax
  add    %rax,%rax
  sub    %rax,%r12
  mov    %rbp,%rax
  imul   %rcx
  mov    %rbp,%rax
  add    $0x30,%r12d
  sar    $0x3f,%rax
  mov    %r12b,0xf(%rsp)
  mov    %rdx,%rbx
  sar    $0x2,%rbx
  sub    %rax,%rbx
  lea    (%rbx,%rbx,4),%rax
  add    %rax,%rax
  sub    %rax,%rbp
  mov    %rbx,%rax
  imul   %rcx
  mov    %rbx,%rax
  add    $0x30,%ebp
  sar    $0x3f,%rax
  mov    %bpl,0x10(%rsp)
  sar    $0x2,%rdx
  mov    %rdx,%r11
  sub    %rax,%r11
  lea    (%r11,%r11,4),%rax
  add    %rax,%rax
  sub    %rax,%rbx
  mov    %r11,%rax
  imul   %rcx
  mov    %r11,%rax
  add    $0x30,%ebx
  mov    %bl,0x11(%rsp)
  sar    $0x2,%rdx
  sar    $0x3f,%rax
  mov    %rdx,%r10
  sub    %rax,%r10
  lea    (%r10,%r10,4),%rax
  add    %rax,%rax
  sub    %rax,%r11
  mov    %r10,%rax
  imul   %rcx
  mov    %r10,%rax
  add    $0x30,%r11d
  sar    $0x3f,%rax
  mov    %r11b,0x12(%rsp)
  sar    $0x2,%rdx
  mov    %rdx,%r9
  sub    %rax,%r9
  lea    (%r9,%r9,4),%rax
  add    %rax,%rax
  sub    %rax,%r10
  mov    %r9,%rax
  imul   %rcx
  mov    %r9,%rax
  add    $0x30,%r10d
  sar    $0x3f,%rax
  mov    %r10b,0x13(%rsp)
  sar    $0x2,%rdx
  mov    %rdx,%r8
  sub    %rax,%r8
  lea    (%r8,%r8,4),%rax
  add    %rax,%rax
  sub    %rax,%r9
  mov    %r8,%rax
  imul   %rcx
  mov    %r8,%rax
  add    $0x30,%r9d
  sar    $0x3f,%rax
  mov    %r9b,0x14(%rsp)
  mov    %rdx,%rdi
  sar    $0x2,%rdi
  sub    %rax,%rdi
  lea    (%rdi,%rdi,4),%rax
  add    %rax,%rax
  sub    %rax,%r8
  mov    %rdi,%rax
  imul   %rcx
  mov    %rdi,%rax
  add    $0x30,%r8d
  sar    $0x3f,%rax
  mov    %r8b,0x15(%rsp)
  sar    $0x2,%rdx
  mov    %rdx,%rsi
  sub    %rax,%rsi
  lea    (%rsi,%rsi,4),%rax
  add    %rax,%rax
  sub    %rax,%rdi
  mov    %rsi,%rax
  add    $0x30,%edi
  imul   %rcx
  mov    %rsi,%rax
  sar    $0x3f,%rax
  mov    %dil,0x16(%rsp)
  mov    %rdx,%rcx
  sar    $0x2,%rcx
  sub    %rax,%rcx
  lea    (%rcx,%rcx,4),%rax
  add    %rax,%rax
  sub    %rax,%rsi
  add    $0x30,%esi
  mov    %sil,0x17(%rsp)
  cmp    $0x30,%sil
  jne    L17
  cmp    $0x30,%dil
  jne    L134
  cmp    $0x30,%r8b
  jne    L189
  cmp    $0x30,%r9b
  jne    L85
  cmp    $0x30,%r10b
  jne    L97
  cmp    $0x30,%r11b
  jne    L161
  cmp    $0x30,%bl
  jne    L69
  cmp    $0x30,%bpl
  jne    L146
  cmp    $0x30,%r12b
  jne    L191
  movzwl 0xd(%rsp),%eax
  rol    $0x8,%ax
  mov    %ax,(%r14)
  nopw   0x0(%rax,%rax,1)
L264:
  mov    0x18(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L188
  add    $0x20,%rsp
  xor    %eax,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  ret
L161:
  mov    $0x5,%eax
  nopl   0x0(%rax,%rax,1)
L148:
  movslq %eax,%rdx
  lea    -0x3(%rax),%ecx
  movzbl 0xd(%rsp,%rdx,1),%edx
  mov    %dl,(%r14)
  lea    -0x1(%rax),%edx
  movslq %edx,%rdx
  movzbl 0xd(%rsp,%rdx,1),%edx
  mov    %dl,0x1(%r14)
  lea    -0x2(%rax),%edx
  movslq %edx,%rdx
  movzbl 0xd(%rsp,%rdx,1),%edx
  mov    %dl,0x2(%r14)
  cmp    $0x2,%eax
  je     L264
  movslq %ecx,%rcx
  lea    -0x4(%rax),%edx
  movzbl 0xd(%rsp,%rcx,1),%ecx
  mov    %cl,0x3(%r14)
  cmp    $0x3,%eax
  je     L264
  movslq %edx,%rdx
  lea    -0x5(%rax),%ecx
  movzbl 0xd(%rsp,%rdx,1),%edx
  mov    %dl,0x4(%r14)
  cmp    $0x4,%eax
  je     L264
  movslq %ecx,%rcx
  lea    -0x6(%rax),%edx
  movzbl 0xd(%rsp,%rcx,1),%ecx
  mov    %cl,0x5(%r14)
  cmp    $0x5,%eax
  je     L264
  movslq %edx,%rdx
  lea    -0x7(%rax),%ecx
  movzbl 0xd(%rsp,%rdx,1),%edx
  mov    %dl,0x6(%r14)
  cmp    $0x6,%eax
  je     L264
  movslq %ecx,%rcx
  lea    -0x8(%rax),%edx
  movzbl 0xd(%rsp,%rcx,1),%ecx
  mov    %cl,0x7(%r14)
  cmp    $0x7,%eax
  je     L264
  movslq %edx,%rdx
  lea    -0x9(%rax),%ecx
  movzbl 0xd(%rsp,%rdx,1),%edx
  mov    %dl,0x8(%r14)
  cmp    $0x8,%eax
  je     L264
  movslq %ecx,%rax
  movzbl 0xd(%rsp,%rax,1),%eax
  mov    %al,0x9(%r14)
  test   %ecx,%ecx
  je     L264
  movb   $0x0,0xa(%r14)
  jmp    L264
L17:
  mov    $0xa,%eax
  jmp    L148
L134:
  mov    $0x9,%eax
  jmp    L148
L189:
  mov    $0x8,%eax
  jmp    L148
L85:
  mov    $0x7,%eax
  jmp    L148
L97:
  mov    $0x6,%eax
  jmp    L148
L69:
  mov    $0x4,%eax
  jmp    L148
L146:
  mov    $0x3,%eax
  jmp    L148
L191:
  mov    $0x2,%eax
  jmp    L148
L188:
  call   <__stack_chk_fail@plt>
```

assistant: ```c
_prtl10(num, str) long num;
char *str;
{
  int i;
  char c, temp[11];
  temp[0] = '\0';
  for (i = 1; i <= 10; i++) {
    temp[i] = num % 10 + '0';
    num /= 10;
  }
  for (i = 10; temp[i] == '0'; i--)
    ;
  if (i == 0)
    i++;
  while (i >= 0)
    *str++ = temp[i--];
}
```