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

```asm
<main>:
  endbr64
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x348,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x338(%rsp)
  xor    %eax,%eax
  movabs $0x57474e574557544f,%rax
  movabs $0x5a49424151504243,%rdx
  mov    %rax,0x290(%rsp)
  mov    %rdx,0x298(%rsp)
  movabs $0x474a4c4d50415156,%rax
  movabs $0x424f56515454575a,%rdx
  mov    %rax,0x2a0(%rsp)
  mov    %rdx,0x2a8(%rsp)
  movabs $0x44494d50414d5551,%rax
  movabs $0x5651454241435a47,%rdx
  mov    %rax,0x2b0(%rsp)
  mov    %rdx,0x2b8(%rsp)
  movabs $0x4d58495a4c5a4d42,%rax
  movabs $0x514f56515a58414c,%rdx
  mov    %rax,0x2c0(%rsp)
  mov    %rdx,0x2c8(%rsp)
  movabs $0x575641584d4d4c56,%rax
  movabs $0x535a494c4c564945,%rdx
  mov    %rax,0x2d0(%rsp)
  mov    %rdx,0x2d8(%rsp)
  movabs $0x5a514a4241575a4e,%rax
  movabs $0x4f51544d4c4e574c,%rdx
  mov    %rax,0x2e0(%rsp)
  mov    %rdx,0x2e8(%rsp)
  movabs $0x474c4d5549564250,%rax
  movabs $0x4e51454150424357,%rdx
  mov    %rax,0x2f0(%rsp)
  mov    %rdx,0x2f8(%rsp)
  movabs $0x42424e4d54475442,%rax
  movabs $0x544942414d564d50,%rdx
  mov    %rax,0x300(%rsp)
  mov    %rdx,0x308(%rsp)
  movabs $0x564c5443574b4149,%rax
  movabs $0x4542514d55514242,%rdx
  mov    %rax,0x310(%rsp)
  mov    %rdx,0x318(%rsp)
  movabs $0x494542514d545150,%rax
  movabs $0x435a424755565141,%rdx
  mov    %rax,0x320(%rsp)
  mov    %rdx,0x328(%rsp)
  movw   $0x4241,0x330(%rsp)
  movb   $0x0,0x332(%rsp)
  lea    D14(%rip),%rdi
  call   <puts@plt>
  lea    0x290(%rsp),%rbx
  lea    0x332(%rsp),%rbp
L37:
  movsbl (%rbx),%edi
  call   <tolower@plt>
  mov    %al,(%rbx)
  movsbl %al,%edi
  call   <putchar@plt>
  add    $0x1,%rbx
  cmp    %rbp,%rbx
  jne    L37
  lea    D25(%rip),%rdi
  call   <puts@plt>
  mov    $0x1,%ebp
  lea    D8(%rip),%r13
L34:
  mov    %ebp,%esi
  mov    %r13,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0x0,%ebx
  lea    0x290(%rsp),%r12
L28:
  movsbl (%rbx,%r12,1),%edi
  call   <toascii@plt>
  sub    %ebp,%eax
  cmp    $0x60,%eax
  lea    0x1a(%rax),%ecx
  mov    %eax,%edx
  mov    %ecx,%eax
  cmovg  %edx,%eax
  mov    %eax,(%rsp,%rbx,4)
  mov    %eax,%edi
  call   <putchar@plt>
  add    $0x1,%rbx
  cmp    $0xa2,%rbx
  jne    L28
  mov    $0xa,%edi
  call   <putchar@plt>
  add    $0x1,%ebp
  cmp    $0x1a,%ebp
  jne    L34
  mov    0x338(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L0
  mov    $0x0,%eax
  add    $0x348,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  ret
L0:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: unpack_data
arguments: data_label: D14
type_guessed: string
name: unpack_data
arguments: data_label: D25
type_guessed: string
name: unpack_data
arguments: data_label: D8
type_guessed: string

tool: D14: tolower:

tool: D25: 
toascii

tool: D8: 
key = %d:


assistant: ```c
int main() {
  char s[] = "OTWEWNGWCBPQABIZVQAPMLJGZWTTQVOBQUMAPMIDGZCABEQVBMZLZIXMLAXZQVOQVLMMXAVWEIVLLIZSNZWABJQZLWNLMTQOPBVIUMLGWCBPAEQNBTGTMNBBPMVMABITIAKWCTLVBBQUMQBEPQTMQBEIAQVUGBZCAB";
  int A[162], i = 0, j;
  printf("tolower:\n");
  for (i = 0; i < 162; i++) {
    s[i] = tolower(s[i]);
    printf("%c", s[i]);
  }
  printf("\ntoascii\n");
  for (j = 1; j < 26; j++) {
    printf("\nkey = %d:\n", j);
    for (i = 0; i < 162; i++) {
      A[i] = toascii(s[i]) - j;
      if (A[i] < 97) {
        A[i] = A[i] + 26;
      }
      printf("%c", A[i]);
    }
    printf("\n");
  }
}
```