user: Converte this assembly snippet into its equivalent C code:

```asm
<SHA256_Xcompare_27>:
  endbr64
  push   %r13
  xor    %esi,%esi
  mov    $0x20,%edx
  push   %r12
  push   %rbp
  sub    $0xa0,%rsp
  movdqa D14(%rip),%xmm0
  mov    %fs:0x28,%rax
  mov    %rax,0x98(%rsp)
  xor    %eax,%eax
  lea    0x20(%rsp),%rbp
  lea    0x40(%rsp),%r13
  mov    %rsp,%r12
  movaps %xmm0,0x40(%rsp)
  mov    $0xffffde1a,%eax
  movdqa D58(%rip),%xmm0
  mov    %rbp,%rdi
  movl   $0x7e29bac5,0x90(%rsp)
  movaps %xmm0,0x50(%rsp)
  movdqa D57(%rip),%xmm0
  mov    %ax,0x94(%rsp)
  movaps %xmm0,0x60(%rsp)
  movdqa D69(%rip),%xmm0
  movb   $0xa9,0x96(%rsp)
  movaps %xmm0,0x70(%rsp)
  movdqa D18(%rip),%xmm0
  movaps %xmm0,0x80(%rsp)
  movdqa D17(%rip),%xmm0
  movaps %xmm0,(%rsp)
  movdqa D24(%rip),%xmm0
  movaps %xmm0,0x10(%rsp)
  call   <memset@plt>
  mov    $0x57,%edx
  mov    %rbp,%rsi
  mov    %r13,%rdi
  call   <SHA256_VST@plt>
  mov    $0x20,%edx
  mov    %rbp,%rsi
  mov    %r12,%rdi
  lea    D15(%rip),%rcx
  call   <check_test@plt>
  xor    %esi,%esi
  mov    $0x20,%edx
  mov    %rbp,%rdi
  call   <memset@plt>
  mov    $0x57,%edx
  mov    %rbp,%rsi
  mov    %r13,%rdi
  call   <SHA256_NSS@plt>
  mov    $0x20,%edx
  mov    %rbp,%rsi
  mov    %r12,%rdi
  lea    D28(%rip),%rcx
  call   <check_test@plt>
  xor    %esi,%esi
  mov    $0x20,%edx
  mov    %rbp,%rdi
  call   <memset@plt>
  mov    $0x57,%edx
  mov    %rbp,%rsi
  mov    %r13,%rdi
  call   <SHA256_sodium@plt>
  mov    $0x20,%edx
  mov    %rbp,%rsi
  mov    %r12,%rdi
  lea    D80(%rip),%rcx
  call   <check_test@plt>
  mov    0x98(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L7
  add    $0xa0,%rsp
  pop    %rbp
  pop    %r12
  pop    %r13
  ret
L7:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: parse_data
arguments: data_label: D14
datatype: byte[16]
name: parse_data
arguments: data_label: D58
datatype: byte[16]
name: parse_data
arguments: data_label: D57
datatype: byte[16]
name: parse_data
arguments: data_label: D69
datatype: byte[16]
name: parse_data
arguments: data_label: D18
datatype: byte[16]
name: parse_data
arguments: data_label: D17
datatype: byte[16]
name: parse_data
arguments: data_label: D24
datatype: byte[16]
name: parse_data
arguments: data_label: D15
datatype: string
name: parse_data
arguments: data_label: D28
datatype: string
name: parse_data
arguments: data_label: D80
datatype: string

tool: {"D14": [0xb5,0x65,0xb1,0x9f,0x05,0xd2,0x4e,0x34,0x93,0xf3,0xaf,0xe6,0x0a,0xc3,0x81,0x40]}

tool: {"D58": [0x49,0xe6,0xda,0xa3,0x83,0xd8,0xef,0xb6,0x40,0x35,0xed,0x6c,0x30,0xe2,0x09,0xba]}

tool: {"D57": [0x77,0x21,0x6e,0x6f,0x4b,0x84,0xc6,0x6f,0xdd,0x79,0xfe,0xe1,0xa7,0xca,0xc6,0x75]}

tool: {"D69": [0x89,0x29,0x01,0x82,0xe8,0xbc,0x71,0x5a,0x97,0xb3,0x77,0xca,0x00,0x60,0xca,0xc2]}

tool: {"D18": [0xae,0x99,0x53,0x4a,0x4d,0x11,0x61,0x5d,0x7f,0xc5,0xc6,0x17,0x11,0x42,0x5d,0x7a]}

tool: {"D17": [0xc2,0x67,0x99,0x37,0x69,0x95,0x76,0xfa,0x88,0xf9,0x96,0x83,0x0b,0x64,0x61,0xa0]}

tool: {"D24": [0xd5,0xdf,0xc6,0xd7,0x54,0x01,0x56,0x55,0x16,0x86,0x1d,0xc1,0x26,0x49,0x77,0xc4]}

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


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


tool: D80: 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");
}
```