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

```asm
<sha3_keccakf>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x170,%rsp
  mov    %rdi,-0x168(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movl   $0x1,-0x130(%rbp)
  movl   $0x8082,-0x12c(%rbp)
  movl   $0x808a,-0x128(%rbp)
  movl   $0x80008000,-0x124(%rbp)
  movl   $0x808b,-0x120(%rbp)
  movl   $0x80000001,-0x11c(%rbp)
  movl   $0x80008081,-0x118(%rbp)
  movl   $0x8009,-0x114(%rbp)
  movl   $0x8a,-0x110(%rbp)
  movl   $0x88,-0x10c(%rbp)
  movl   $0x80008009,-0x108(%rbp)
  movl   $0x8000000a,-0x104(%rbp)
  movl   $0x8000808b,-0x100(%rbp)
  movl   $0x8b,-0xfc(%rbp)
  movl   $0x8089,-0xf8(%rbp)
  movl   $0x8003,-0xf4(%rbp)
  movl   $0x8002,-0xf0(%rbp)
  movl   $0x80,-0xec(%rbp)
  movl   $0x800a,-0xe8(%rbp)
  movl   $0x8000000a,-0xe4(%rbp)
  movl   $0x80008081,-0xe0(%rbp)
  movl   $0x8080,-0xdc(%rbp)
  movl   $0x80000001,-0xd8(%rbp)
  movl   $0x80008008,-0xd4(%rbp)
  movl   $0x1,-0xd0(%rbp)
  movl   $0x3,-0xcc(%rbp)
  movl   $0x6,-0xc8(%rbp)
  movl   $0xa,-0xc4(%rbp)
  movl   $0xf,-0xc0(%rbp)
  movl   $0x15,-0xbc(%rbp)
  movl   $0x1c,-0xb8(%rbp)
  movl   $0x24,-0xb4(%rbp)
  movl   $0x2d,-0xb0(%rbp)
  movl   $0x37,-0xac(%rbp)
  movl   $0x2,-0xa8(%rbp)
  movl   $0xe,-0xa4(%rbp)
  movl   $0x1b,-0xa0(%rbp)
  movl   $0x29,-0x9c(%rbp)
  movl   $0x38,-0x98(%rbp)
  movl   $0x8,-0x94(%rbp)
  movl   $0x19,-0x90(%rbp)
  movl   $0x2b,-0x8c(%rbp)
  movl   $0x3e,-0x88(%rbp)
  movl   $0x12,-0x84(%rbp)
  movl   $0x27,-0x80(%rbp)
  movl   $0x3d,-0x7c(%rbp)
  movl   $0x14,-0x78(%rbp)
  movl   $0x2c,-0x74(%rbp)
  movl   $0xa,-0x70(%rbp)
  movl   $0x7,-0x6c(%rbp)
  movl   $0xb,-0x68(%rbp)
  movl   $0x11,-0x64(%rbp)
  movl   $0x12,-0x60(%rbp)
  movl   $0x3,-0x5c(%rbp)
  movl   $0x5,-0x58(%rbp)
  movl   $0x10,-0x54(%rbp)
  movl   $0x8,-0x50(%rbp)
  movl   $0x15,-0x4c(%rbp)
  movl   $0x18,-0x48(%rbp)
  movl   $0x4,-0x44(%rbp)
  movl   $0xf,-0x40(%rbp)
  movl   $0x17,-0x3c(%rbp)
  movl   $0x13,-0x38(%rbp)
  movl   $0xd,-0x34(%rbp)
  movl   $0xc,-0x30(%rbp)
  movl   $0x2,-0x2c(%rbp)
  movl   $0x14,-0x28(%rbp)
  movl   $0xe,-0x24(%rbp)
  movl   $0x16,-0x20(%rbp)
  movl   $0x9,-0x1c(%rbp)
  movl   $0x6,-0x18(%rbp)
  movl   $0x1,-0x14(%rbp)
  movl   $0x0,-0x158(%rbp)
  jmp    L142
L15:
  movl   $0x0,-0x160(%rbp)
  jmp    L103
L99:
  mov    -0x160(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x168(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%edx
  mov    -0x160(%rbp),%eax
  cltq
  add    $0x5,%rax
  lea    0x0(,%rax,4),%rcx
  mov    -0x168(%rbp),%rax
  add    %rcx,%rax
  mov    (%rax),%eax
  xor    %eax,%edx
  mov    -0x160(%rbp),%eax
  cltq
  add    $0xa,%rax
  lea    0x0(,%rax,4),%rcx
  mov    -0x168(%rbp),%rax
  add    %rcx,%rax
  mov    (%rax),%eax
  xor    %eax,%edx
  mov    -0x160(%rbp),%eax
  cltq
  add    $0xf,%rax
  lea    0x0(,%rax,4),%rcx
  mov    -0x168(%rbp),%rax
  add    %rcx,%rax
  mov    (%rax),%eax
  xor    %eax,%edx
  mov    -0x160(%rbp),%eax
  cltq
  add    $0x14,%rax
  lea    0x0(,%rax,4),%rcx
  mov    -0x168(%rbp),%rax
  add    %rcx,%rax
  mov    (%rax),%eax
  xor    %eax,%edx
  mov    -0x160(%rbp),%eax
  cltq
  mov    %edx,-0x150(%rbp,%rax,4)
  addl   $0x1,-0x160(%rbp)
L103:
  cmpl   $0x4,-0x160(%rbp)
  jle    L99
  movl   $0x0,-0x160(%rbp)
  jmp    L26
L113:
  mov    -0x160(%rbp),%eax
  lea    0x4(%rax),%edx
  movslq %edx,%rax
  imul   $0x66666667,%rax,%rax
  shr    $0x20,%rax
  sar    %eax
  mov    %edx,%ecx
  sar    $0x1f,%ecx
  sub    %ecx,%eax
  mov    %eax,%ecx
  shl    $0x2,%ecx
  add    %eax,%ecx
  mov    %edx,%eax
  sub    %ecx,%eax
  cltq
  mov    -0x150(%rbp,%rax,4),%esi
  mov    -0x160(%rbp),%eax
  lea    0x1(%rax),%edx
  movslq %edx,%rax
  imul   $0x66666667,%rax,%rax
  shr    $0x20,%rax
  sar    %eax
  mov    %edx,%ecx
  sar    $0x1f,%ecx
  sub    %ecx,%eax
  mov    %eax,%ecx
  shl    $0x2,%ecx
  add    %eax,%ecx
  mov    %edx,%eax
  sub    %ecx,%eax
  cltq
  mov    -0x150(%rbp,%rax,4),%eax
  lea    (%rax,%rax,1),%edi
  mov    -0x160(%rbp),%eax
  lea    0x1(%rax),%edx
  movslq %edx,%rax
  imul   $0x66666667,%rax,%rax
  shr    $0x20,%rax
  sar    %eax
  mov    %edx,%ecx
  sar    $0x1f,%ecx
  sub    %ecx,%eax
  mov    %eax,%ecx
  shl    $0x2,%ecx
  add    %eax,%ecx
  mov    %edx,%eax
  sub    %ecx,%eax
  cltq
  mov    -0x150(%rbp,%rax,4),%eax
  mov    $0x3f,%edx
  mov    %edx,%ecx
  sar    %cl,%eax
  or     %edi,%eax
  xor    %esi,%eax
  mov    %eax,-0x154(%rbp)
  movl   $0x0,-0x15c(%rbp)
  jmp    L74
L97:
  mov    -0x15c(%rbp),%edx
  mov    -0x160(%rbp),%eax
  add    %edx,%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x168(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  mov    -0x15c(%rbp),%ecx
  mov    -0x160(%rbp),%edx
  add    %ecx,%edx
  movslq %edx,%rdx
  lea    0x0(,%rdx,4),%rcx
  mov    -0x168(%rbp),%rdx
  add    %rcx,%rdx
  xor    -0x154(%rbp),%eax
  mov    %eax,(%rdx)
  addl   $0x5,-0x15c(%rbp)
L74:
  cmpl   $0x18,-0x15c(%rbp)
  jle    L97
  addl   $0x1,-0x160(%rbp)
L26:
  cmpl   $0x4,-0x160(%rbp)
  jle    L113
  mov    -0x168(%rbp),%rax
  mov    0x4(%rax),%eax
  mov    %eax,-0x154(%rbp)
  movl   $0x0,-0x160(%rbp)
  jmp    L151
L160:
  mov    -0x160(%rbp),%eax
  cltq
  mov    -0x70(%rbp,%rax,4),%eax
  mov    %eax,-0x15c(%rbp)
  mov    -0x15c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x168(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  mov    %eax,-0x150(%rbp)
  mov    -0x160(%rbp),%eax
  cltq
  mov    -0xd0(%rbp,%rax,4),%eax
  mov    -0x154(%rbp),%edx
  mov    %edx,%esi
  mov    %eax,%ecx
  shl    %cl,%esi
  mov    -0x160(%rbp),%eax
  cltq
  mov    -0xd0(%rbp,%rax,4),%edx
  mov    $0x40,%eax
  sub    %edx,%eax
  mov    -0x154(%rbp),%edx
  mov    %eax,%ecx
  sar    %cl,%edx
  mov    -0x15c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rcx
  mov    -0x168(%rbp),%rax
  add    %rcx,%rax
  or     %esi,%edx
  mov    %edx,(%rax)
  mov    -0x150(%rbp),%eax
  mov    %eax,-0x154(%rbp)
  addl   $0x1,-0x160(%rbp)
L151:
  cmpl   $0x17,-0x160(%rbp)
  jle    L160
  movl   $0x0,-0x15c(%rbp)
  jmp    L87
L33:
  movl   $0x0,-0x160(%rbp)
  jmp    L29
L156:
  mov    -0x15c(%rbp),%edx
  mov    -0x160(%rbp),%eax
  add    %edx,%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x168(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%edx
  mov    -0x160(%rbp),%eax
  cltq
  mov    %edx,-0x150(%rbp,%rax,4)
  addl   $0x1,-0x160(%rbp)
L29:
  cmpl   $0x4,-0x160(%rbp)
  jle    L156
  movl   $0x0,-0x160(%rbp)
  jmp    L57
L79:
  mov    -0x15c(%rbp),%edx
  mov    -0x160(%rbp),%eax
  add    %edx,%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x168(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%esi
  mov    -0x160(%rbp),%eax
  lea    0x1(%rax),%edx
  movslq %edx,%rax
  imul   $0x66666667,%rax,%rax
  shr    $0x20,%rax
  sar    %eax
  mov    %edx,%ecx
  sar    $0x1f,%ecx
  sub    %ecx,%eax
  mov    %eax,%ecx
  shl    $0x2,%ecx
  add    %eax,%ecx
  mov    %edx,%eax
  sub    %ecx,%eax
  cltq
  mov    -0x150(%rbp,%rax,4),%eax
  not    %eax
  mov    %eax,%edi
  mov    -0x160(%rbp),%eax
  lea    0x2(%rax),%edx
  movslq %edx,%rax
  imul   $0x66666667,%rax,%rax
  shr    $0x20,%rax
  sar    %eax
  mov    %edx,%ecx
  sar    $0x1f,%ecx
  sub    %ecx,%eax
  mov    %eax,%ecx
  shl    $0x2,%ecx
  add    %eax,%ecx
  mov    %edx,%eax
  sub    %ecx,%eax
  cltq
  mov    -0x150(%rbp,%rax,4),%eax
  and    %eax,%edi
  mov    %edi,%ecx
  mov    -0x15c(%rbp),%edx
  mov    -0x160(%rbp),%eax
  add    %edx,%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x168(%rbp),%rax
  add    %rdx,%rax
  xor    %ecx,%esi
  mov    %esi,%edx
  mov    %edx,(%rax)
  addl   $0x1,-0x160(%rbp)
L57:
  cmpl   $0x4,-0x160(%rbp)
  jle    L79
  addl   $0x5,-0x15c(%rbp)
L87:
  cmpl   $0x18,-0x15c(%rbp)
  jle    L33
  mov    -0x168(%rbp),%rax
  mov    (%rax),%edx
  mov    -0x158(%rbp),%eax
  cltq
  mov    -0x130(%rbp,%rax,4),%eax
  xor    %eax,%edx
  mov    -0x168(%rbp),%rax
  mov    %edx,(%rax)
  addl   $0x1,-0x158(%rbp)
L142:
  cmpl   $0x17,-0x158(%rbp)
  jle    L15
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L52
  call   <__stack_chk_fail@plt>
L52:
  leave
  ret
```

assistant: ```c
void sha3_keccakf(uint64_t st[25]) {
  const uint64_t keccakf_rndc[24] = {0x0000000000000001, 0x0000000000008082, 0x800000000000808a, 0x8000000080008000, 0x000000000000808b, 0x0000000080000001, 0x8000000080008081, 0x8000000000008009, 0x000000000000008a, 0x0000000000000088, 0x0000000080008009, 0x000000008000000a, 0x000000008000808b, 0x800000000000008b, 0x8000000000008089, 0x8000000000008003, 0x8000000000008002, 0x8000000000000080, 0x000000000000800a, 0x800000008000000a, 0x8000000080008081, 0x8000000000008080, 0x0000000080000001, 0x8000000080008008};
  const int keccakf_rotc[24] = {1, 3, 6, 10, 15, 21, 28, 36, 45, 55, 2, 14, 27, 41, 56, 8, 25, 43, 62, 18, 39, 61, 20, 44};
  const int keccakf_piln[24] = {10, 7, 11, 17, 18, 3, 5, 16, 8, 21, 24, 4, 15, 23, 19, 13, 12, 2, 20, 14, 22, 9, 6, 1};
  int i, j, r;
  uint64_t t, bc[5];
  for (r = 0; r < 24; r++) {
    for (i = 0; i < 5; i++)
      bc[i] = st[i] ^ st[i + 5] ^ st[i + 10] ^ st[i + 15] ^ st[i + 20];
    for (i = 0; i < 5; i++) {
      t = bc[(i + 4) % 5] ^ (((bc[(i + 1) % 5]) << (1)) | ((bc[(i + 1) % 5]) >> (64 - (1))));
      for (j = 0; j < 25; j += 5)
        st[j + i] ^= t;
    }
    t = st[1];
    for (i = 0; i < 24; i++) {
      j = keccakf_piln[i];
      bc[0] = st[j];
      st[j] = (((t) << (keccakf_rotc[i])) | ((t) >> (64 - (keccakf_rotc[i]))));
      t = bc[0];
    }
    for (j = 0; j < 25; j += 5) {
      for (i = 0; i < 5; i++)
        bc[i] = st[j + i];
      for (i = 0; i < 5; i++)
        st[j + i] ^= (~bc[(i + 1) % 5]) & bc[(i + 2) % 5];
    }
    st[0] ^= keccakf_rndc[r];
  }
}
```