user: Translate the below assembly code into C programming language:

```asm
<SHA256_Xcompare_27>:
  endbr64
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0xa0,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x98(%rsp)
  xor    %eax,%eax
  movabs $0x344ed2059fb165b5,%rax
  movabs $0x4081c30ae6aff393,%rdx
  mov    %rax,0x40(%rsp)
  mov    %rdx,0x48(%rsp)
  movabs $0xb6efd883a3dae649,%rax
  movabs $0xba09e2306ced3540,%rdx
  mov    %rax,0x50(%rsp)
  mov    %rdx,0x58(%rsp)
  movabs $0x6fc6844b6f6e2177,%rax
  movabs $0x75c6caa7e1fe79dd,%rdx
  mov    %rax,0x60(%rsp)
  mov    %rdx,0x68(%rsp)
  movabs $0x5a71bce882012989,%rax
  movabs $0xc2ca6000ca77b397,%rdx
  mov    %rax,0x70(%rsp)
  mov    %rdx,0x78(%rsp)
  movabs $0x5d61114d4a5399ae,%rax
  movabs $0x7a5d421117c6c57f,%rdx
  mov    %rax,0x80(%rsp)
  mov    %rdx,0x88(%rsp)
  movl   $0x7e29bac5,0x90(%rsp)
  movw   $0xde1a,0x94(%rsp)
  movb   $0xa9,0x96(%rsp)
  movabs $0xfa769569379967c2,%rax
  movabs $0xa061640b8396f988,%rdx
  mov    %rax,(%rsp)
  mov    %rdx,0x8(%rsp)
  movabs $0x55560154d7c6dfd5,%rax
  movabs $0xc4774926c11d8616,%rdx
  mov    %rax,0x10(%rsp)
  mov    %rdx,0x18(%rsp)
  lea    0x20(%rsp),%rbx
  mov    $0x20,%edx
  mov    $0x0,%esi
  mov    %rbx,%rdi
  call   <memset@plt>
  lea    0x40(%rsp),%r12
  mov    $0x57,%edx
  mov    %rbx,%rsi
  mov    %r12,%rdi
  call   <SHA256_VST@plt>
  mov    %rsp,%rbp
  lea    D23(%rip),%rcx
  mov    $0x20,%edx
  mov    %rbx,%rsi
  mov    %rbp,%rdi
  call   <check_test@plt>
  mov    $0x20,%edx
  mov    $0x0,%esi
  mov    %rbx,%rdi
  call   <memset@plt>
  mov    $0x57,%edx
  mov    %rbx,%rsi
  mov    %r12,%rdi
  call   <SHA256_NSS@plt>
  lea    D4(%rip),%rcx
  mov    $0x20,%edx
  mov    %rbx,%rsi
  mov    %rbp,%rdi
  call   <check_test@plt>
  mov    $0x20,%edx
  mov    $0x0,%esi
  mov    %rbx,%rdi
  call   <memset@plt>
  mov    $0x57,%edx
  mov    %rbx,%rsi
  mov    %r12,%rdi
  call   <SHA256_sodium@plt>
  lea    D22(%rip),%rcx
  mov    $0x20,%edx
  mov    %rbx,%rsi
  mov    %rbp,%rdi
  call   <check_test@plt>
  mov    0x98(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L3
  add    $0xa0,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  ret
L3:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: extract_symbolic_data
arguments: data_tag: D23
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D4
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D22
type_guessed: string

tool: D23: Disagreement between given answer and SHA256_VST in SHA256_Xcompare_27


tool: D4: Disagreement between given answer and SHA256_NSS in SHA256_Xcompare_27


tool: D22: Disagreement between given answer and SHA256_sodium in SHA256_Xcompare_27


assistant: ```c
void SHA256_Xcompare_27() {
  unsigned char input[87] = {181, 101, 177, 159, 5, 210, 78, 52, 147, 243, 175, 230, 10, 195, 129, 64, 73, 230, 218, 163, 131, 216, 239, 182, 64, 53, 237, 108, 48, 226, 9, 186, 119, 33, 110, 111, 75, 132, 198, 111, 221, 121, 254, 225, 167, 202, 198, 117, 137, 41, 1, 130, 232, 188, 113, 90, 151, 179, 119, 202, 0, 96, 202, 194, 174, 153, 83, 74, 77, 17, 97, 93, 127, 197, 198, 23, 17, 66, 93, 122, 197, 186, 41, 126, 26, 222, 169};
  unsigned char result0[32] = {0xC2, 0x67, 0x99, 0x37, 0x69, 0x95, 0x76, 0xFA, 0x88, 0xF9, 0x96, 0x83, 0x0B, 0x64, 0x61, 0xA0, 0xD5, 0xDF, 0xC6, 0xD7, 0x54, 0x01, 0x56, 0x55, 0x16, 0x86, 0x1D, 0xC1, 0x26, 0x49, 0x77, 0xC4};
  unsigned char result1[32];
  memset(result1, 0, 32);
  SHA256_VST(input, result1, 87);
  check_test(result0, result1, 32, "Disagreement between given answer and SHA256_VST in SHA256_Xcompare_27\n");
  memset(result1, 0, 32);
  SHA256_NSS(input, result1, 87);
  check_test(result0, result1, 32, "Disagreement between given answer and SHA256_NSS in SHA256_Xcompare_27\n");
  memset(result1, 0, 32);
  SHA256_sodium(input, result1, 87);
  check_test(result0, result1, 32, "Disagreement between given answer and SHA256_sodium in SHA256_Xcompare_27\n");
}
```