user: What would the C source look like for the assembly code provided here:

```asm
<main>:
  endbr64
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x1f8,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x1e8(%rsp)
  xor    %eax,%eax
  movabs $0x6867666564636261,%rax
  mov    %rax,0x7(%rsp)
  movb   $0x0,0xf(%rsp)
  movabs $0x2073692073696854,%rax
  movabs $0x6d206863756d2061,%rdx
  mov    %rax,0x70(%rsp)
  mov    %rdx,0x78(%rsp)
  movabs $0x696469722065726f,%rax
  movabs $0x742073756f6c7563,%rdx
  mov    %rax,0x80(%rsp)
  mov    %rdx,0x88(%rsp)
  movabs $0x6163656220747365,%rax
  movabs $0x3220666f20657375,%rdx
  mov    %rax,0x90(%rsp)
  mov    %rdx,0x98(%rsp)
  movabs $0x2e37393537343331,%rax
  mov    %rax,0xa0(%rsp)
  movb   $0x0,0xa8(%rsp)
  movabs $0x6e69617220656854,%rcx
  movabs $0x69617053206e6920,%rbx
  mov    %rcx,0x10(%rsp)
  mov    %rbx,0x18(%rsp)
  movabs $0x20736c6c6166206e,%rax
  movabs $0x6920796c74736f6d,%rdx
  mov    %rax,0x20(%rsp)
  mov    %rdx,0x28(%rsp)
  movabs $0x6c7020656874206e,%rax
  mov    %rax,0x30(%rsp)
  movl   $0x736e6961,0x38(%rsp)
  movw   $0x2e,0x3c(%rsp)
  mov    %rcx,0x40(%rsp)
  mov    %rbx,0x48(%rsp)
  movabs $0x20736c6c6166206e,%rsi
  movabs $0x6920796c6e69616d,%rdi
  mov    %rsi,0x50(%rsp)
  mov    %rdi,0x58(%rsp)
  mov    %rax,0x60(%rsp)
  movl   $0x736e6961,0x68(%rsp)
  movw   $0x2e,0x6c(%rsp)
  movq   $0x0,0xb0(%rsp)
  movq   $0x0,0xb8(%rsp)
  movq   $0x0,0xc0(%rsp)
  movq   $0x0,0xc8(%rsp)
  movq   $0x0,0xd0(%rsp)
  movq   $0x0,0xd8(%rsp)
  movq   $0x0,0xe0(%rsp)
  movq   $0x0,0xe8(%rsp)
  movb   $0x0,0xf0(%rsp)
  movq   $0x0,0x100(%rsp)
  movq   $0x0,0x108(%rsp)
  movq   $0x0,0x110(%rsp)
  movq   $0x0,0x118(%rsp)
  movq   $0x0,0x120(%rsp)
  movq   $0x0,0x128(%rsp)
  movq   $0x0,0x130(%rsp)
  movq   $0x0,0x138(%rsp)
  movb   $0x0,0x140(%rsp)
  movq   $0x0,0x150(%rsp)
  movq   $0x0,0x158(%rsp)
  movq   $0x0,0x160(%rsp)
  movq   $0x0,0x168(%rsp)
  movq   $0x0,0x170(%rsp)
  movq   $0x0,0x178(%rsp)
  movq   $0x0,0x180(%rsp)
  movq   $0x0,0x188(%rsp)
  movb   $0x0,0x190(%rsp)
  movq   $0x0,0x1a0(%rsp)
  movq   $0x0,0x1a8(%rsp)
  movq   $0x0,0x1b0(%rsp)
  movq   $0x0,0x1b8(%rsp)
  movq   $0x0,0x1c0(%rsp)
  movq   $0x0,0x1c8(%rsp)
  movq   $0x0,0x1d0(%rsp)
  movq   $0x0,0x1d8(%rsp)
  movb   $0x0,0x1e0(%rsp)
  lea    0xb0(%rsp),%r12
  lea    0x7(%rsp),%rdi
  mov    %r12,%rdx
  mov    $0x8,%esi
  call   <nilsimsa_compute@plt>
  lea    0x100(%rsp),%r13
  lea    0x70(%rsp),%rdi
  mov    %r13,%rdx
  mov    $0x38,%esi
  call   <nilsimsa_compute@plt>
  lea    0x150(%rsp),%rbx
  lea    0x10(%rsp),%rdi
  mov    %rbx,%rdx
  mov    $0x2d,%esi
  call   <nilsimsa_compute@plt>
  lea    0x1a0(%rsp),%rbp
  lea    0x40(%rsp),%rdi
  mov    %rbp,%rdx
  mov    $0x2d,%esi
  call   <nilsimsa_compute@plt>
  mov    %r13,%rsi
  mov    %r12,%rdi
  call   <nilsimsa_compare@plt>
  cmp    $0x4,%eax
  sete   %dil
  movzbl %dil,%edi
  call   <assert@plt>
  mov    %rbp,%rsi
  mov    %rbx,%rdi
  call   <nilsimsa_compare@plt>
  cmp    $0x5c,%eax
  sete   %dil
  movzbl %dil,%edi
  call   <assert@plt>
  mov    0x1e8(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L1
  mov    $0x0,%eax
  add    $0x1f8,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  ret
L1:
  call   <__stack_chk_fail@plt>
```

assistant: ```c
int main(int argc, char **argv) {
  const char data1[] = "abcdefgh";
  const char data2[] = "This is a much more ridiculous test because of 21347597.";
  const char data3[] = "The rain in Spain falls mostly in the plains.";
  const char data4[] = "The rain in Spain falls mainly in the plains.";
  int data1_sz = sizeof(data1) / sizeof(data1[0]) - 1;
  int data2_sz = sizeof(data2) / sizeof(data2[0]) - 1;
  int data3_sz = sizeof(data3) / sizeof(data3[0]) - 1;
  int data4_sz = sizeof(data4) / sizeof(data4[0]) - 1;
  char hash1[65] = {0};
  char hash2[65] = {0};
  char hash3[65] = {0};
  char hash4[65] = {0};
  nilsimsa_compute(data1, data1_sz, hash1);
  nilsimsa_compute(data2, data2_sz, hash2);
  nilsimsa_compute(data3, data3_sz, hash3);
  nilsimsa_compute(data4, data4_sz, hash4);
  assert(nilsimsa_compare(hash1, hash2) == 4);
  assert(nilsimsa_compare(hash3, hash4) == 92);
  return 0;
}
```