user: Please show me the C implementation that matches the assembly code listed below:

```asm
<has160_process_block>:
  endbr64
  push   %r15
  mov    %rdi,%r8
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x98,%rsp
  movdqu 0x20(%rsi),%xmm2
  mov    0x20(%rsi),%r14d
  mov    %fs:0x28,%rax
  mov    %rax,0x88(%rsp)
  xor    %eax,%eax
  mov    (%rdi),%edx
  movdqu (%rsi),%xmm0
  movaps %xmm2,0x20(%rsp)
  mov    0x24(%rsp),%eax
  mov    0x28(%rsp),%r12d
  movdqu 0x10(%rsi),%xmm1
  rol    $0x5,%edx
  mov    (%rsi),%ebp
  movaps %xmm0,(%rsp)
  movdqu 0x30(%rsi),%xmm3
  xor    %r14d,%eax
  mov    0x10(%rsi),%ebx
  xor    %r12d,%eax
  xor    0x2c(%rsp),%eax
  add    0x10(%rdi),%eax
  movaps %xmm1,0x10(%rsp)
  movaps %xmm3,0x30(%rsp)
  add    %edx,%eax
  mov    0x38(%rsp),%r11d
  mov    0x8(%rdi),%edi
  mov    0x30(%rsp),%r9d
  mov    0x3c(%rsp),%r13d
  xor    0xc(%r8),%edi
  and    0x4(%r8),%edi
  xor    0xc(%r8),%edi
  mov    0x4(%r8),%ecx
  add    %eax,%edi
  mov    0xc(%r8),%edx
  mov    0x8(%r8),%eax
  rol    $0xa,%ecx
  mov    0x4(%rsp),%r15d
  add    0x8(%r8),%r15d
  add    %ebp,%edx
  xor    %ecx,%eax
  and    (%r8),%eax
  xor    0x8(%r8),%eax
  add    %edx,%eax
  mov    %edi,%edx
  mov    %ecx,%esi
  mov    0xc(%rsp),%r10d
  rol    $0xb,%edx
  add    %eax,%edx
  mov    (%r8),%eax
  rol    $0xa,%eax
  xor    %eax,%esi
  and    %edi,%esi
  rol    $0xa,%edi
  xor    %ecx,%esi
  add    %esi,%r15d
  mov    %edx,%esi
  rol    $0x7,%esi
  add    %r15d,%esi
  mov    %eax,%r15d
  xor    %edi,%r15d
  and    %edx,%r15d
  xor    %eax,%r15d
  add    0x8(%rsp),%ecx
  rol    $0xa,%edx
  add    0xc(%rsp),%eax
  add    %ecx,%r15d
  mov    %esi,%ecx
  rol    $0xf,%ecx
  add    %r15d,%ecx
  mov    %edi,%r15d
  xor    %edx,%r15d
  and    %esi,%r15d
  rol    $0xa,%esi
  xor    %edi,%r15d
  add    %eax,%r15d
  mov    %ecx,%eax
  rol    $0x6,%eax
  add    %r15d,%eax
  mov    0x34(%rsp),%r15d
  xor    %r9d,%r15d
  xor    %r11d,%r15d
  xor    %r13d,%r15d
  add    %edi,%r15d
  mov    %edx,%edi
  xor    %esi,%edi
  and    %ecx,%edi
  rol    $0xa,%ecx
  xor    %edx,%edi
  add    %ebx,%edx
  add    %r15d,%edi
  mov    %eax,%r15d
  rol    $0xd,%r15d
  add    %edi,%r15d
  mov    %esi,%edi
  xor    %ecx,%edi
  and    %eax,%edi
  rol    $0xa,%eax
  xor    %esi,%edi
  add    %edx,%edi
  mov    %r15d,%edx
  rol    $0x8,%edx
  add    %edi,%edx
  mov    %ecx,%edi
  xor    %eax,%edi
  add    0x14(%rsp),%esi
  and    %r15d,%edi
  rol    $0xa,%r15d
  xor    %ecx,%edi
  add    0x18(%rsp),%ecx
  add    %esi,%edi
  mov    %edx,%esi
  rol    $0xe,%esi
  add    %edi,%esi
  mov    %eax,%edi
  xor    %r15d,%edi
  and    %edx,%edi
  rol    $0xa,%edx
  xor    %eax,%edi
  add    0x1c(%rsp),%eax
  add    %ecx,%edi
  mov    %esi,%ecx
  rol    $0x7,%ecx
  add    %edi,%ecx
  mov    %r15d,%edi
  xor    %edx,%edi
  and    %esi,%edi
  rol    $0xa,%esi
  xor    %r15d,%edi
  add    %edi,%eax
  mov    %ecx,%edi
  rol    $0xc,%edi
  add    %eax,%edi
  mov    0x4(%rsp),%eax
  xor    %ebp,%eax
  xor    0x8(%rsp),%eax
  xor    0xc(%rsp),%eax
  add    %r15d,%eax
  mov    %edx,%r15d
  xor    %esi,%r15d
  and    %ecx,%r15d
  xor    %edx,%r15d
  add    %eax,%r15d
  mov    %edi,%eax
  rol    $0x9,%eax
  rol    $0xa,%ecx
  add    %r14d,%edx
  add    %r15d,%eax
  mov    %esi,%r15d
  xor    %ecx,%r15d
  and    %edi,%r15d
  rol    $0xa,%edi
  xor    %esi,%r15d
  add    0x24(%rsp),%esi
  add    %edx,%r15d
  mov    %eax,%edx
  rol    $0xb,%edx
  add    %r15d,%edx
  mov    %ecx,%r15d
  xor    %edi,%r15d
  and    %eax,%r15d
  rol    $0xa,%eax
  xor    %ecx,%r15d
  add    %r12d,%ecx
  add    %esi,%r15d
  mov    %edx,%esi
  rol    $0x8,%esi
  add    %r15d,%esi
  mov    %edi,%r15d
  xor    %eax,%r15d
  and    %edx,%r15d
  rol    $0xa,%edx
  xor    %edi,%r15d
  add    0x2c(%rsp),%edi
  add    %ecx,%r15d
  mov    %esi,%ecx
  rol    $0xf,%ecx
  add    %r15d,%ecx
  mov    %edx,%r15d
  mov    %eax,%edx
  xor    %r15d,%edx
  and    %esi,%edx
  xor    %eax,%edx
  add    %edx,%edi
  mov    %ecx,%edx
  rol    $0x6,%edx
  rol    $0xa,%esi
  add    %edi,%edx
  mov    0x14(%rsp),%edi
  xor    %ebx,%edi
  xor    0x18(%rsp),%edi
  xor    0x1c(%rsp),%edi
  add    %edi,%eax
  mov    %r15d,%edi
  xor    %esi,%edi
  and    %ecx,%edi
  rol    $0xa,%ecx
  xor    %r15d,%edi
  add    %r9d,%r15d
  add    %eax,%edi
  mov    %edx,%eax
  rol    $0xc,%eax
  add    %edi,%eax
  mov    %esi,%edi
  xor    %ecx,%edi
  and    %edx,%edi
  rol    $0xa,%edx
  xor    %esi,%edi
  add    0x34(%rsp),%esi
  add    %edi,%r15d
  mov    %eax,%edi
  rol    $0x9,%edi
  add    %r15d,%edi
  mov    %ecx,%r15d
  xor    %edx,%r15d
  and    %eax,%r15d
  rol    $0xa,%eax
  xor    %ecx,%r15d
  add    %esi,%r15d
  mov    %edi,%esi
  rol    $0xe,%esi
  add    %r15d,%esi
  mov    %edx,%r15d
  xor    %eax,%r15d
  and    %edi,%r15d
  xor    %edx,%r15d
  add    %r11d,%ecx
  rol    $0xa,%edi
  add    %r13d,%edx
  add    %r15d,%ecx
  mov    %esi,%r15d
  rol    $0x5,%r15d
  add    %ecx,%r15d
  mov    %eax,%ecx
  xor    %edi,%ecx
  and    %esi,%ecx
  rol    $0xa,%esi
  xor    %eax,%ecx
  add    %ecx,%edx
  mov    %r15d,%ecx
  rol    $0xd,%ecx
  add    %edx,%ecx
  mov    0x4(%rsp),%edx
  xor    %ebx,%edx
  xor    0x2c(%rsp),%edx
  xor    %r11d,%edx
  lea    0x5a827999(%rax,%rdx,1),%eax
  mov    %edi,%edx
  lea    0x5a827999(%r10,%rdi,1),%edi
  mov    0x18(%rsp),%r10d
  xor    %esi,%edx
  xor    %r15d,%edx
  ror    $0xf,%r15d
  add    %eax,%edx
  mov    %ecx,%eax
  rol    $0x5,%eax
  add    %edx,%eax
  mov    %esi,%edx
  lea    0x5a827999(%r10,%rsi,1),%esi
  mov    0x24(%rsp),%r10d
  xor    %r15d,%edx
  xor    %ecx,%edx
  ror    $0xf,%ecx
  add    %edx,%edi
  mov    %eax,%edx
  rol    $0xb,%edx
  add    %edi,%edx
  mov    %r15d,%edi
  lea    0x5a827999(%r10,%r15,1),%r15d
  mov    0x8(%rsp),%r10d
  xor    %ecx,%edi
  xor    %eax,%edi
  add    %esi,%edi
  mov    %edx,%esi
  rol    $0x7,%esi
  ror    $0xf,%eax
  add    %edi,%esi
  mov    %eax,%edi
  mov    %ecx,%eax
  xor    %edi,%eax
  lea    0x5a827999(%rcx,%r9,1),%ecx
  xor    %edx,%eax
  ror    $0xf,%edx
  add    %eax,%r15d
  mov    %esi,%eax
  rol    $0xf,%eax
  add    %r15d,%eax
  mov    %edx,%r15d
  mov    %edi,%edx
  xor    %r15d,%edx
  xor    %esi,%edx
  ror    $0xf,%esi
  add    %ecx,%edx
  mov    %eax,%ecx
  rol    $0x6,%ecx
  add    %edx,%ecx
  mov    0x1c(%rsp),%edx
  xor    %ebp,%edx
  xor    %r12d,%edx
  xor    0x34(%rsp),%edx
  lea    0x5a827999(%rdi,%rdx,1),%edx
  mov    %r15d,%edi
  lea    0x5a827999(%r13,%r15,1),%r15d
  xor    %esi,%edi
  xor    %eax,%edi
  ror    $0xf,%eax
  add    %edx,%edi
  mov    %ecx,%edx
  rol    $0xd,%edx
  add    %edi,%edx
  mov    %eax,%edi
  mov    %esi,%eax
  xor    %edi,%eax
  lea    0x5a827999(%r10,%rsi,1),%esi
  mov    0x14(%rsp),%r10d
  xor    %ecx,%eax
  ror    $0xf,%ecx
  add    %r15d,%eax
  mov    %edx,%r15d
  rol    $0x8,%r15d
  add    %eax,%r15d
  mov    %edi,%eax
  lea    0x5a827999(%r10,%rdi,1),%edi
  xor    %ecx,%eax
  xor    %edx,%eax
  add    %eax,%esi
  mov    %r15d,%eax
  rol    $0xe,%eax
  add    %esi,%eax
  mov    %edx,%esi
  mov    %ecx,%edx
  ror    $0xf,%esi
  lea    0x5a827999(%rcx,%r14,1),%ecx
  xor    %esi,%edx
  xor    %r15d,%edx
  ror    $0xf,%r15d
  add    %edi,%edx
  mov    %eax,%edi
  rol    $0x7,%edi
  add    %edx,%edi
  mov    %esi,%edx
  xor    %r15d,%edx
  xor    %eax,%edx
  ror    $0xf,%eax
  add    %edx,%ecx
  mov    %edi,%edx
  rol    $0xc,%edx
  add    %ecx,%edx
  mov    %eax,%ecx
  mov    0xc(%rsp),%eax
  xor    0x18(%rsp),%eax
  xor    0x24(%rsp),%eax
  mov    0x2c(%rsp),%r10d
  xor    %r9d,%eax
  lea    0x5a827999(%rsi,%rax,1),%esi
  mov    %r15d,%eax
  lea    0x5a827999(%r10,%r15,1),%r15d
  mov    0x4(%rsp),%r10d
  xor    %ecx,%eax
  xor    %edi,%eax
  ror    $0xf,%edi
  add    %esi,%eax
  mov    %edx,%esi
  rol    $0x9,%esi
  add    %eax,%esi
  mov    %ecx,%eax
  lea    0x5a827999(%r11,%rcx,1),%ecx
  xor    %edi,%eax
  xor    %edx,%eax
  ror    $0xf,%edx
  add    %eax,%r15d
  mov    %esi,%eax
  rol    $0xb,%eax
  add    %r15d,%eax
  mov    %edx,%r15d
  mov    %edi,%edx
  xor    %r15d,%edx
  lea    0x5a827999(%r10,%rdi,1),%edi
  mov    0x1c(%rsp),%r10d
  xor    %esi,%edx
  ror    $0xf,%esi
  add    %ecx,%edx
  mov    %eax,%ecx
  rol    $0x8,%ecx
  add    %edx,%ecx
  mov    %r15d,%edx
  lea    0x5a827999(%r15,%rbx,1),%r15d
  xor    %esi,%edx
  xor    %eax,%edx
  ror    $0xf,%eax
  add    %edx,%edi
  mov    %ecx,%edx
  rol    $0xf,%edx
  add    %edi,%edx
  mov    %eax,%edi
  mov    %esi,%eax
  xor    %edi,%eax
  xor    %ecx,%eax
  ror    $0xf,%ecx
  add    %r15d,%eax
  mov    %edx,%r15d
  rol    $0x6,%r15d
  add    %eax,%r15d
  mov    0x8(%rsp),%eax
  xor    0x14(%rsp),%eax
  xor    %r14d,%eax
  xor    %r13d,%eax
  lea    0x5a827999(%rsi,%rax,1),%eax
  mov    %edi,%esi
  lea    0x5a827999(%r10,%rdi,1),%edi
  mov    0x34(%rsp),%r10d
  xor    %ecx,%esi
  xor    %edx,%esi
  add    %eax,%esi
  mov    %r15d,%eax
  rol    $0xc,%eax
  add    %esi,%eax
  mov    %edx,%esi
  mov    %ecx,%edx
  ror    $0xf,%esi
  lea    0x5a827999(%r12,%rcx,1),%ecx
  xor    %esi,%edx
  xor    %r15d,%edx
  ror    $0xf,%r15d
  add    %edi,%edx
  mov    %eax,%edi
  rol    $0x9,%edi
  add    %edx,%edi
  mov    %esi,%edx
  lea    0x5a827999(%r10,%rsi,1),%esi
  xor    %r15d,%edx
  xor    %eax,%edx
  ror    $0xf,%eax
  add    %edx,%ecx
  mov    %edi,%edx
  rol    $0xe,%edx
  add    %ecx,%edx
  mov    %eax,%ecx
  mov    %r15d,%eax
  xor    %ecx,%eax
  lea    0x5a827999(%r15,%rbp,1),%r15d
  xor    %edi,%eax
  ror    $0xf,%edi
  add    %esi,%eax
  mov    %edx,%esi
  rol    $0x5,%esi
  add    %eax,%esi
  mov    %ecx,%eax
  xor    %edi,%eax
  xor    %edx,%eax
  ror    $0xf,%edx
  add    %eax,%r15d
  mov    %esi,%eax
  rol    $0xd,%eax
  add    %r15d,%eax
  mov    %edx,%r15d
  mov    0x18(%rsp),%edx
  xor    %ebx,%edx
  xor    %r10d,%edx
  mov    0x14(%rsp),%r10d
  xor    %r13d,%edx
  lea    0x6ed9eba1(%rcx,%rdx,1),%ecx
  mov    %edi,%edx
  lea    0x6ed9eba1(%rdi,%r9,1),%edi
  not    %edx
  or     %esi,%edx
  ror    $0x7,%esi
  xor    %r15d,%edx
  add    %ecx,%edx
  mov    %eax,%ecx
  rol    $0x5,%ecx
  add    %edx,%ecx
  mov    %r15d,%edx
  lea    0x6ed9eba1(%r10,%r15,1),%r15d
  mov    0x1c(%rsp),%r10d
  not    %edx
  or     %eax,%edx
  xor    %esi,%edx
  add    %edx,%edi
  mov    %ecx,%edx
  rol    $0xb,%edx
  add    %edi,%edx
  ror    $0x7,%eax
  mov    %eax,%edi
  mov    %esi,%eax
  lea    0x6ed9eba1(%r11,%rsi,1),%esi
  not    %eax
  or     %ecx,%eax
  ror    $0x7,%ecx
  xor    %edi,%eax
  add    %r15d,%eax
  mov    %edx,%r15d
  rol    $0x7,%r15d
  add    %eax,%r15d
  mov    %edi,%eax
  lea    0x6ed9eba1(%r10,%rdi,1),%edi
  mov    0x24(%rsp),%r10d
  not    %eax
  or     %edx,%eax
  xor    %ecx,%eax
  add    %eax,%esi
  mov    %r15d,%eax
  rol    $0xf,%eax
  add    %esi,%eax
  mov    %edx,%esi
  mov    %ecx,%edx
  not    %edx
  ror    $0x7,%esi
  or     %r15d,%edx
  ror    $0x7,%r15d
  xor    %esi,%edx
  add    %edi,%edx
  mov    %eax,%edi
  rol    $0x6,%edi
  add    %edx,%edi
  mov    0x4(%rsp),%edx
  xor    0xc(%rsp),%edx
  xor    %r14d,%edx
  xor    %r12d,%edx
  lea    0x6ed9eba1(%rcx,%rdx,1),%edx
  mov    %esi,%ecx
  lea    0x6ed9eba1(%rsi,%rbp,1),%esi
  not    %ecx
  or     %eax,%ecx
  ror    $0x7,%eax
  xor    %r15d,%ecx
  add    %edx,%ecx
  mov    %edi,%edx
  rol    $0xd,%edx
  add    %ecx,%edx
  mov    %eax,%ecx
  mov    %r15d,%eax
  not    %eax
  lea    0x6ed9eba1(%r10,%r15,1),%r15d
  mov    0x8(%rsp),%r10d
  or     %edi,%eax
  xor    %ecx,%eax
  add    %esi,%eax
  mov    %edx,%esi
  rol    $0x8,%esi
  add    %eax,%esi
  mov    %ecx,%eax
  ror    $0x7,%edi
  lea    0x6ed9eba1(%r10,%rcx,1),%ecx
  not    %eax
  mov    0x2c(%rsp),%r10d
  or     %edx,%eax
  ror    $0x7,%edx
  xor    %edi,%eax
  add    %eax,%r15d
  mov    %esi,%eax
  rol    $0xe,%eax
  add    %r15d,%eax
  mov    %edx,%r15d
  mov    %edi,%edx
  not    %edx
  lea    0x6ed9eba1(%r10,%rdi,1),%edi
  mov    0x34(%rsp),%r10d
  or     %esi,%edx
  ror    $0x7,%esi
  xor    %r15d,%edx
  add    %ecx,%edx
  mov    %eax,%ecx
  rol    $0x7,%ecx
  add    %edx,%ecx
  mov    %r15d,%edx
  not    %edx
  or     %eax,%edx
  ror    $0x7,%eax
  xor    %esi,%edx
  add    %edx,%edi
  mov    %ecx,%edx
  rol    $0xc,%edx
  add    %edi,%edx
  mov    %eax,%edi
  mov    0x14(%rsp),%eax
  xor    0x1c(%rsp),%eax
  xor    %r9d,%eax
  xor    %r11d,%eax
  lea    0x6ed9eba1(%r15,%rax,1),%r15d
  mov    %esi,%eax
  lea    0x6ed9eba1(%rsi,%rbx,1),%esi
  not    %eax
  or     %ecx,%eax
  ror    $0x7,%ecx
  xor    %edi,%eax
  add    %r15d,%eax
  mov    %edx,%r15d
  rol    $0x9,%r15d
  add    %eax,%r15d
  mov    %edi,%eax
  lea    0x6ed9eba1(%r10,%rdi,1),%edi
  mov    0x18(%rsp),%r10d
  not    %eax
  or     %edx,%eax
  xor    %ecx,%eax
  add    %eax,%esi
  mov    %r15d,%eax
  rol    $0xb,%eax
  add    %esi,%eax
  mov    %edx,%esi
  mov    %ecx,%edx
  not    %edx
  ror    $0x7,%esi
  lea    0x6ed9eba1(%r10,%rcx,1),%ecx
  mov    0x4(%rsp),%r10d
  or     %r15d,%edx
  ror    $0x7,%r15d
  xor    %esi,%edx
  add    %edi,%edx
  mov    %eax,%edi
  rol    $0x8,%edi
  add    %edx,%edi
  mov    %esi,%edx
  lea    0x6ed9eba1(%r13,%rsi,1),%esi
  not    %edx
  or     %eax,%edx
  ror    $0x7,%eax
  xor    %r15d,%edx
  add    %edx,%ecx
  mov    %edi,%edx
  rol    $0xf,%edx
  add    %ecx,%edx
  mov    %eax,%ecx
  mov    %r15d,%eax
  not    %eax
  or     %edi,%eax
  ror    $0x7,%edi
  xor    %ecx,%eax
  add    %esi,%eax
  mov    %edx,%esi
  rol    $0x6,%esi
  add    %eax,%esi
  mov    0x8(%rsp),%eax
  xor    %ebp,%eax
  xor    0x24(%rsp),%eax
  xor    0x2c(%rsp),%eax
  lea    0x6ed9eba1(%r15,%rax,1),%eax
  mov    %ecx,%r15d
  lea    0x6ed9eba1(%rcx,%r14,1),%ecx
  not    %r15d
  or     %edx,%r15d
  ror    $0x7,%edx
  xor    %edi,%r15d
  add    %eax,%r15d
  mov    %esi,%eax
  rol    $0xc,%eax
  add    %r15d,%eax
  mov    %edx,%r15d
  mov    %edi,%edx
  not    %edx
  lea    0x6ed9eba1(%r10,%rdi,1),%edi
  mov    0xc(%rsp),%r10d
  or     %esi,%edx
  xor    %r15d,%edx
  add    %ecx,%edx
  mov    %eax,%ecx
  ror    $0x7,%esi
  rol    $0x9,%ecx
  add    %edx,%ecx
  mov    %r15d,%edx
  lea    0x6ed9eba1(%r12,%r15,1),%r15d
  not    %edx
  or     %eax,%edx
  ror    $0x7,%eax
  xor    %esi,%edx
  add    %edx,%edi
  mov    %ecx,%edx
  rol    $0xe,%edx
  add    %edi,%edx
  mov    %eax,%edi
  mov    %esi,%eax
  not    %eax
  lea    0x6ed9eba1(%r10,%rsi,1),%esi
  mov    0x1c(%rsp),%r10d
  or     %ecx,%eax
  ror    $0x7,%ecx
  xor    %edi,%eax
  add    %r15d,%eax
  mov    %edx,%r15d
  rol    $0x5,%r15d
  add    %eax,%r15d
  mov    %edi,%eax
  not    %eax
  or     %edx,%eax
  xor    %ecx,%eax
  add    %eax,%esi
  mov    %r15d,%eax
  rol    $0xd,%eax
  add    %esi,%eax
  mov    %edx,%esi
  mov    0x14(%rsp),%edx
  ror    $0x7,%esi
  xor    %ebp,%edx
  xor    %r12d,%edx
  xor    %r13d,%edx
  lea    -0x70e44324(%rdi,%rdx,1),%edi
  mov    %ecx,%edx
  lea    -0x70e44324(%r10,%rcx,1),%ecx
  mov    0x8(%rsp),%r10d
  xor    %esi,%edx
  xor    %r15d,%edx
  ror    $0x2,%r15d
  add    %edi,%edx
  mov    %eax,%edi
  rol    $0x5,%edi
  add    %edx,%edi
  mov    %esi,%edx
  lea    -0x70e44324(%r10,%rsi,1),%esi
  mov    0x34(%rsp),%r10d
  xor    %r15d,%edx
  xor    %eax,%edx
  ror    $0x2,%eax
  add    %edx,%ecx
  mov    %edi,%edx
  rol    $0xb,%edx
  add    %ecx,%edx
  mov    %eax,%ecx
  mov    %r15d,%eax
  xor    %ecx,%eax
  lea    -0x70e44324(%r10,%r15,1),%r15d
  xor    %edi,%eax
  ror    $0x2,%edi
  add    %esi,%eax
  mov    %edx,%esi
  rol    $0x7,%esi
  add    %eax,%esi
  mov    %ecx,%eax
  lea    -0x70e44324(%rcx,%r14,1),%ecx
  xor    %edi,%eax
  xor    %edx,%eax
  ror    $0x2,%edx
  add    %eax,%r15d
  mov    %esi,%eax
  rol    $0xf,%eax
  add    %r15d,%eax
  mov    %edx,%r15d
  mov    %edi,%edx
  xor    %r15d,%edx
  xor    %esi,%edx
  ror    $0x2,%esi
  add    %ecx,%edx
  mov    %eax,%ecx
  rol    $0x6,%ecx
  add    %edx,%ecx
  mov    0x4(%rsp),%edx
  xor    0x18(%rsp),%edx
  xor    0x2c(%rsp),%edx
  mov    0xc(%rsp),%r10d
  xor    %r9d,%edx
  lea    -0x70e44324(%rdi,%rdx,1),%edx
  mov    %r15d,%edi
  lea    -0x70e44324(%r10,%r15,1),%r15d
  mov    0x24(%rsp),%r10d
  xor    %esi,%edi
  xor    %eax,%edi
  ror    $0x2,%eax
  add    %edx,%edi
  mov    %ecx,%edx
  rol    $0xd,%edx
  add    %edi,%edx
  mov    %eax,%edi
  mov    %esi,%eax
  xor    %edi,%eax
  lea    -0x70e44324(%r11,%rsi,1),%esi
  xor    %ecx,%eax
  ror    $0x2,%ecx
  add    %r15d,%eax
  mov    %edx,%r15d
  rol    $0x8,%r15d
  add    %eax,%r15d
  mov    %edi,%eax
  lea    -0x70e44324(%r10,%rdi,1),%edi
  xor    %ecx,%eax
  xor    %edx,%eax
  ror    $0x2,%edx
  add    %eax,%esi
  mov    %r15d,%eax
  rol    $0xe,%eax
  add    %esi,%eax
  mov    %ecx,%esi
  lea    -0x70e44324(%rcx,%rbx,1),%ecx
  xor    %edx,%esi
  xor    %r15d,%esi
  ror    $0x2,%r15d
  add    %esi,%edi
  mov    %eax,%esi
  lea    -0x70e44324(%r13,%r15,1),%r13d
  rol    $0x7,%esi
  add    %edi,%esi
  mov    %edx,%edi
  xor    %r15d,%edi
  xor    %eax,%edi
  ror    $0x2,%eax
  add    %ecx,%edi
  mov    %esi,%ecx
  rol    $0xc,%ecx
  add    %edi,%ecx
  mov    %eax,%edi
  mov    0x8(%rsp),%eax
  xor    0x1c(%rsp),%eax
  xor    %r14d,%eax
  xor    0x34(%rsp),%eax
  lea    -0x70e44324(%r12,%rdi,1),%r12d
  mov    0x14(%rsp),%r14d
  lea    -0x70e44324(%rdx,%rax,1),%eax
  mov    %r15d,%edx
  xor    %edi,%edx
  xor    %esi,%edx
  add    %eax,%edx
  mov    %ecx,%eax
  rol    $0x9,%eax
  add    %edx,%eax
  ror    $0x2,%esi
  mov    %edi,%edx
  xor    0xc(%rsp),%ebx
  xor    %esi,%edx
  xor    %r10d,%ebx
  xor    %ecx,%edx
  ror    $0x2,%ecx
  xor    %r11d,%ebx
  add    %edx,%r13d
  mov    %eax,%edx
  rol    $0xb,%edx
  add    %r13d,%edx
  mov    %esi,%r13d
  lea    -0x70e44324(%r14,%rsi,1),%esi
  xor    %ecx,%r13d
  mov    %edx,%edi
  xor    %eax,%r13d
  rol    $0x8,%edi
  add    %r13d,%r12d
  ror    $0x2,%eax
  add    %r12d,%edi
  mov    %ecx,%r12d
  lea    -0x70e44324(%rax,%rbx,1),%r11d
  mov    0x2c(%rsp),%ebx
  xor    %eax,%r12d
  lea    -0x70e44324(%rcx,%rbp,1),%ecx
  xor    %edx,%r12d
  ror    $0x2,%edx
  add    %esi,%r12d
  mov    %edi,%esi
  rol    $0xf,%esi
  add    %r12d,%esi
  mov    %eax,%r12d
  mov    %edx,%eax
  xor    %edx,%r12d
  mov    %esi,%ebp
  lea    -0x70e44324(%rbx,%rdx,1),%edx
  mov    0x18(%rsp),%ebx
  xor    %edi,%r12d
  ror    $0x2,%edi
  xor    %edi,%eax
  add    %r12d,%ecx
  rol    $0x6,%ebp
  add    %ebp,%ecx
  xor    %esi,%eax
  add    %eax,%r11d
  mov    %ecx,%eax
  rol    $0xc,%eax
  add    %r11d,%eax
  ror    $0x2,%esi
  mov    %edi,%r11d
  lea    -0x70e44324(%rbx,%rdi,1),%edi
  xor    %esi,%r11d
  mov    %eax,%r10d
  mov    0x4(%rsp),%ebx
  xor    %ecx,%r11d
  rol    $0x9,%r10d
  add    %r11d,%edx
  ror    $0x2,%ecx
  add    %edx,%r10d
  mov    %esi,%edx
  lea    -0x70e44324(%rbx,%rsi,1),%esi
  mov    (%r8),%ebx
  xor    %ecx,%edx
  xor    %eax,%edx
  ror    $0x2,%eax
  add    %edx,%edi
  mov    %r10d,%edx
  rol    $0xe,%edx
  add    %edi,%edx
  mov    %ecx,%edi
  xor    %eax,%edi
  xor    %r10d,%edi
  ror    $0x2,%r10d
  add    %esi,%edi
  mov    %edx,%esi
  rol    $0x5,%esi
  add    %edi,%esi
  lea    -0x70e44324(%rbx,%r9,1),%edi
  add    %edi,%ecx
  mov    %eax,%edi
  add    0x10(%r8),%eax
  xor    %r10d,%edi
  mov    %eax,0x10(%r8)
  xor    %edx,%edi
  ror    $0x2,%edx
  add    0x8(%r8),%edx
  add    %edi,%ecx
  mov    %esi,%edi
  mov    %edx,0x8(%r8)
  mov    0xc(%r8),%edx
  rol    $0xd,%edi
  add    %edi,%ecx
  add    %r10d,%edx
  mov    %ecx,(%r8)
  mov    0x4(%r8),%ecx
  mov    %edx,0xc(%r8)
  add    %esi,%ecx
  mov    %ecx,0x4(%r8)
  mov    0x88(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L2
  add    $0x98,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L2:
  call   <__stack_chk_fail@plt>
```

assistant: ```c
void has160_process_block(unsigned *hash, const unsigned *block) {
  unsigned X[32];
  {
    unsigned j;
    for (j = 0; j < 16; j++) {
      X[j] = (block[j]);
    }
    X[16] = X[0] ^ X[1] ^ X[2] ^ X[3];
    X[17] = X[4] ^ X[5] ^ X[6] ^ X[7];
    X[18] = X[8] ^ X[9] ^ X[10] ^ X[11];
    X[19] = X[12] ^ X[13] ^ X[14] ^ X[15];
    X[20] = X[3] ^ X[6] ^ X[9] ^ X[12];
    X[21] = X[2] ^ X[5] ^ X[8] ^ X[15];
    X[22] = X[1] ^ X[4] ^ X[11] ^ X[14];
    X[23] = X[0] ^ X[7] ^ X[10] ^ X[13];
    X[24] = X[5] ^ X[7] ^ X[12] ^ X[14];
    X[25] = X[0] ^ X[2] ^ X[9] ^ X[11];
    X[26] = X[4] ^ X[6] ^ X[13] ^ X[15];
    X[27] = X[1] ^ X[3] ^ X[8] ^ X[10];
    X[28] = X[2] ^ X[7] ^ X[8] ^ X[13];
    X[29] = X[3] ^ X[4] ^ X[9] ^ X[14];
    X[30] = X[0] ^ X[5] ^ X[10] ^ X[15];
    X[31] = X[1] ^ X[6] ^ X[11] ^ X[12];
  }
  {
    unsigned A, B, C, D, E;
    A = hash[0];
    B = hash[1];
    C = hash[2];
    D = hash[3];
    E = hash[4];
    E += ((A) << (5) ^ ((A) >> (32 - (5)))) + (D ^ (B & (C ^ D))) + X[18];
    B = ((B) << (10) ^ ((B) >> (32 - (10))));
    ;
    D += ((E) << (11) ^ ((E) >> (32 - (11)))) + (C ^ (A & (B ^ C))) + X[0];
    A = ((A) << (10) ^ ((A) >> (32 - (10))));
    ;
    C += ((D) << (7) ^ ((D) >> (32 - (7)))) + (B ^ (E & (A ^ B))) + X[1];
    E = ((E) << (10) ^ ((E) >> (32 - (10))));
    ;
    B += ((C) << (15) ^ ((C) >> (32 - (15)))) + (A ^ (D & (E ^ A))) + X[2];
    D = ((D) << (10) ^ ((D) >> (32 - (10))));
    ;
    A += ((B) << (6) ^ ((B) >> (32 - (6)))) + (E ^ (C & (D ^ E))) + X[3];
    C = ((C) << (10) ^ ((C) >> (32 - (10))));
    ;
    E += ((A) << (13) ^ ((A) >> (32 - (13)))) + (D ^ (B & (C ^ D))) + X[19];
    B = ((B) << (10) ^ ((B) >> (32 - (10))));
    ;
    D += ((E) << (8) ^ ((E) >> (32 - (8)))) + (C ^ (A & (B ^ C))) + X[4];
    A = ((A) << (10) ^ ((A) >> (32 - (10))));
    ;
    C += ((D) << (14) ^ ((D) >> (32 - (14)))) + (B ^ (E & (A ^ B))) + X[5];
    E = ((E) << (10) ^ ((E) >> (32 - (10))));
    ;
    B += ((C) << (7) ^ ((C) >> (32 - (7)))) + (A ^ (D & (E ^ A))) + X[6];
    D = ((D) << (10) ^ ((D) >> (32 - (10))));
    ;
    A += ((B) << (12) ^ ((B) >> (32 - (12)))) + (E ^ (C & (D ^ E))) + X[7];
    C = ((C) << (10) ^ ((C) >> (32 - (10))));
    ;
    E += ((A) << (9) ^ ((A) >> (32 - (9)))) + (D ^ (B & (C ^ D))) + X[16];
    B = ((B) << (10) ^ ((B) >> (32 - (10))));
    ;
    D += ((E) << (11) ^ ((E) >> (32 - (11)))) + (C ^ (A & (B ^ C))) + X[8];
    A = ((A) << (10) ^ ((A) >> (32 - (10))));
    ;
    C += ((D) << (8) ^ ((D) >> (32 - (8)))) + (B ^ (E & (A ^ B))) + X[9];
    E = ((E) << (10) ^ ((E) >> (32 - (10))));
    ;
    B += ((C) << (15) ^ ((C) >> (32 - (15)))) + (A ^ (D & (E ^ A))) + X[10];
    D = ((D) << (10) ^ ((D) >> (32 - (10))));
    ;
    A += ((B) << (6) ^ ((B) >> (32 - (6)))) + (E ^ (C & (D ^ E))) + X[11];
    C = ((C) << (10) ^ ((C) >> (32 - (10))));
    ;
    E += ((A) << (12) ^ ((A) >> (32 - (12)))) + (D ^ (B & (C ^ D))) + X[17];
    B = ((B) << (10) ^ ((B) >> (32 - (10))));
    ;
    D += ((E) << (9) ^ ((E) >> (32 - (9)))) + (C ^ (A & (B ^ C))) + X[12];
    A = ((A) << (10) ^ ((A) >> (32 - (10))));
    ;
    C += ((D) << (14) ^ ((D) >> (32 - (14)))) + (B ^ (E & (A ^ B))) + X[13];
    E = ((E) << (10) ^ ((E) >> (32 - (10))));
    ;
    B += ((C) << (5) ^ ((C) >> (32 - (5)))) + (A ^ (D & (E ^ A))) + X[14];
    D = ((D) << (10) ^ ((D) >> (32 - (10))));
    ;
    A += ((B) << (13) ^ ((B) >> (32 - (13)))) + (E ^ (C & (D ^ E))) + X[15];
    C = ((C) << (10) ^ ((C) >> (32 - (10))));
    ;
    E += ((A) << (5) ^ ((A) >> (32 - (5)))) + (B ^ C ^ D) + X[22] + 0x5A827999;
    B = ((B) << (17) ^ ((B) >> (32 - (17))));
    ;
    D += ((E) << (11) ^ ((E) >> (32 - (11)))) + (A ^ B ^ C) + X[3] + 0x5A827999;
    A = ((A) << (17) ^ ((A) >> (32 - (17))));
    ;
    C += ((D) << (7) ^ ((D) >> (32 - (7)))) + (E ^ A ^ B) + X[6] + 0x5A827999;
    E = ((E) << (17) ^ ((E) >> (32 - (17))));
    ;
    B += ((C) << (15) ^ ((C) >> (32 - (15)))) + (D ^ E ^ A) + X[9] + 0x5A827999;
    D = ((D) << (17) ^ ((D) >> (32 - (17))));
    ;
    A += ((B) << (6) ^ ((B) >> (32 - (6)))) + (C ^ D ^ E) + X[12] + 0x5A827999;
    C = ((C) << (17) ^ ((C) >> (32 - (17))));
    ;
    E += ((A) << (13) ^ ((A) >> (32 - (13)))) + (B ^ C ^ D) + X[23] + 0x5A827999;
    B = ((B) << (17) ^ ((B) >> (32 - (17))));
    ;
    D += ((E) << (8) ^ ((E) >> (32 - (8)))) + (A ^ B ^ C) + X[15] + 0x5A827999;
    A = ((A) << (17) ^ ((A) >> (32 - (17))));
    ;
    C += ((D) << (14) ^ ((D) >> (32 - (14)))) + (E ^ A ^ B) + X[2] + 0x5A827999;
    E = ((E) << (17) ^ ((E) >> (32 - (17))));
    ;
    B += ((C) << (7) ^ ((C) >> (32 - (7)))) + (D ^ E ^ A) + X[5] + 0x5A827999;
    D = ((D) << (17) ^ ((D) >> (32 - (17))));
    ;
    A += ((B) << (12) ^ ((B) >> (32 - (12)))) + (C ^ D ^ E) + X[8] + 0x5A827999;
    C = ((C) << (17) ^ ((C) >> (32 - (17))));
    ;
    E += ((A) << (9) ^ ((A) >> (32 - (9)))) + (B ^ C ^ D) + X[20] + 0x5A827999;
    B = ((B) << (17) ^ ((B) >> (32 - (17))));
    ;
    D += ((E) << (11) ^ ((E) >> (32 - (11)))) + (A ^ B ^ C) + X[11] + 0x5A827999;
    A = ((A) << (17) ^ ((A) >> (32 - (17))));
    ;
    C += ((D) << (8) ^ ((D) >> (32 - (8)))) + (E ^ A ^ B) + X[14] + 0x5A827999;
    E = ((E) << (17) ^ ((E) >> (32 - (17))));
    ;
    B += ((C) << (15) ^ ((C) >> (32 - (15)))) + (D ^ E ^ A) + X[1] + 0x5A827999;
    D = ((D) << (17) ^ ((D) >> (32 - (17))));
    ;
    A += ((B) << (6) ^ ((B) >> (32 - (6)))) + (C ^ D ^ E) + X[4] + 0x5A827999;
    C = ((C) << (17) ^ ((C) >> (32 - (17))));
    ;
    E += ((A) << (12) ^ ((A) >> (32 - (12)))) + (B ^ C ^ D) + X[21] + 0x5A827999;
    B = ((B) << (17) ^ ((B) >> (32 - (17))));
    ;
    D += ((E) << (9) ^ ((E) >> (32 - (9)))) + (A ^ B ^ C) + X[7] + 0x5A827999;
    A = ((A) << (17) ^ ((A) >> (32 - (17))));
    ;
    C += ((D) << (14) ^ ((D) >> (32 - (14)))) + (E ^ A ^ B) + X[10] + 0x5A827999;
    E = ((E) << (17) ^ ((E) >> (32 - (17))));
    ;
    B += ((C) << (5) ^ ((C) >> (32 - (5)))) + (D ^ E ^ A) + X[13] + 0x5A827999;
    D = ((D) << (17) ^ ((D) >> (32 - (17))));
    ;
    A += ((B) << (13) ^ ((B) >> (32 - (13)))) + (C ^ D ^ E) + X[0] + 0x5A827999;
    C = ((C) << (17) ^ ((C) >> (32 - (17))));
    ;
    E += ((A) << (5) ^ ((A) >> (32 - (5)))) + (C ^ (B | ~D)) + X[26] + 0x6ED9EBA1;
    B = ((B) << (25) ^ ((B) >> (32 - (25))));
    ;
    D += ((E) << (11) ^ ((E) >> (32 - (11)))) + (B ^ (A | ~C)) + X[12] + 0x6ED9EBA1;
    A = ((A) << (25) ^ ((A) >> (32 - (25))));
    ;
    C += ((D) << (7) ^ ((D) >> (32 - (7)))) + (A ^ (E | ~B)) + X[5] + 0x6ED9EBA1;
    E = ((E) << (25) ^ ((E) >> (32 - (25))));
    ;
    B += ((C) << (15) ^ ((C) >> (32 - (15)))) + (E ^ (D | ~A)) + X[14] + 0x6ED9EBA1;
    D = ((D) << (25) ^ ((D) >> (32 - (25))));
    ;
    A += ((B) << (6) ^ ((B) >> (32 - (6)))) + (D ^ (C | ~E)) + X[7] + 0x6ED9EBA1;
    C = ((C) << (25) ^ ((C) >> (32 - (25))));
    ;
    E += ((A) << (13) ^ ((A) >> (32 - (13)))) + (C ^ (B | ~D)) + X[27] + 0x6ED9EBA1;
    B = ((B) << (25) ^ ((B) >> (32 - (25))));
    ;
    D += ((E) << (8) ^ ((E) >> (32 - (8)))) + (B ^ (A | ~C)) + X[0] + 0x6ED9EBA1;
    A = ((A) << (25) ^ ((A) >> (32 - (25))));
    ;
    C += ((D) << (14) ^ ((D) >> (32 - (14)))) + (A ^ (E | ~B)) + X[9] + 0x6ED9EBA1;
    E = ((E) << (25) ^ ((E) >> (32 - (25))));
    ;
    B += ((C) << (7) ^ ((C) >> (32 - (7)))) + (E ^ (D | ~A)) + X[2] + 0x6ED9EBA1;
    D = ((D) << (25) ^ ((D) >> (32 - (25))));
    ;
    A += ((B) << (12) ^ ((B) >> (32 - (12)))) + (D ^ (C | ~E)) + X[11] + 0x6ED9EBA1;
    C = ((C) << (25) ^ ((C) >> (32 - (25))));
    ;
    E += ((A) << (9) ^ ((A) >> (32 - (9)))) + (C ^ (B | ~D)) + X[24] + 0x6ED9EBA1;
    B = ((B) << (25) ^ ((B) >> (32 - (25))));
    ;
    D += ((E) << (11) ^ ((E) >> (32 - (11)))) + (B ^ (A | ~C)) + X[4] + 0x6ED9EBA1;
    A = ((A) << (25) ^ ((A) >> (32 - (25))));
    ;
    C += ((D) << (8) ^ ((D) >> (32 - (8)))) + (A ^ (E | ~B)) + X[13] + 0x6ED9EBA1;
    E = ((E) << (25) ^ ((E) >> (32 - (25))));
    ;
    B += ((C) << (15) ^ ((C) >> (32 - (15)))) + (E ^ (D | ~A)) + X[6] + 0x6ED9EBA1;
    D = ((D) << (25) ^ ((D) >> (32 - (25))));
    ;
    A += ((B) << (6) ^ ((B) >> (32 - (6)))) + (D ^ (C | ~E)) + X[15] + 0x6ED9EBA1;
    C = ((C) << (25) ^ ((C) >> (32 - (25))));
    ;
    E += ((A) << (12) ^ ((A) >> (32 - (12)))) + (C ^ (B | ~D)) + X[25] + 0x6ED9EBA1;
    B = ((B) << (25) ^ ((B) >> (32 - (25))));
    ;
    D += ((E) << (9) ^ ((E) >> (32 - (9)))) + (B ^ (A | ~C)) + X[8] + 0x6ED9EBA1;
    A = ((A) << (25) ^ ((A) >> (32 - (25))));
    ;
    C += ((D) << (14) ^ ((D) >> (32 - (14)))) + (A ^ (E | ~B)) + X[1] + 0x6ED9EBA1;
    E = ((E) << (25) ^ ((E) >> (32 - (25))));
    ;
    B += ((C) << (5) ^ ((C) >> (32 - (5)))) + (E ^ (D | ~A)) + X[10] + 0x6ED9EBA1;
    D = ((D) << (25) ^ ((D) >> (32 - (25))));
    ;
    A += ((B) << (13) ^ ((B) >> (32 - (13)))) + (D ^ (C | ~E)) + X[3] + 0x6ED9EBA1;
    C = ((C) << (25) ^ ((C) >> (32 - (25))));
    ;
    E += ((A) << (5) ^ ((A) >> (32 - (5)))) + (B ^ C ^ D) + X[30] + 0x8F1BBCDC;
    B = ((B) << (30) ^ ((B) >> (32 - (30))));
    ;
    D += ((E) << (11) ^ ((E) >> (32 - (11)))) + (A ^ B ^ C) + X[7] + 0x8F1BBCDC;
    A = ((A) << (30) ^ ((A) >> (32 - (30))));
    ;
    C += ((D) << (7) ^ ((D) >> (32 - (7)))) + (E ^ A ^ B) + X[2] + 0x8F1BBCDC;
    E = ((E) << (30) ^ ((E) >> (32 - (30))));
    ;
    B += ((C) << (15) ^ ((C) >> (32 - (15)))) + (D ^ E ^ A) + X[13] + 0x8F1BBCDC;
    D = ((D) << (30) ^ ((D) >> (32 - (30))));
    ;
    A += ((B) << (6) ^ ((B) >> (32 - (6)))) + (C ^ D ^ E) + X[8] + 0x8F1BBCDC;
    C = ((C) << (30) ^ ((C) >> (32 - (30))));
    ;
    E += ((A) << (13) ^ ((A) >> (32 - (13)))) + (B ^ C ^ D) + X[31] + 0x8F1BBCDC;
    B = ((B) << (30) ^ ((B) >> (32 - (30))));
    ;
    D += ((E) << (8) ^ ((E) >> (32 - (8)))) + (A ^ B ^ C) + X[3] + 0x8F1BBCDC;
    A = ((A) << (30) ^ ((A) >> (32 - (30))));
    ;
    C += ((D) << (14) ^ ((D) >> (32 - (14)))) + (E ^ A ^ B) + X[14] + 0x8F1BBCDC;
    E = ((E) << (30) ^ ((E) >> (32 - (30))));
    ;
    B += ((C) << (7) ^ ((C) >> (32 - (7)))) + (D ^ E ^ A) + X[9] + 0x8F1BBCDC;
    D = ((D) << (30) ^ ((D) >> (32 - (30))));
    ;
    A += ((B) << (12) ^ ((B) >> (32 - (12)))) + (C ^ D ^ E) + X[4] + 0x8F1BBCDC;
    C = ((C) << (30) ^ ((C) >> (32 - (30))));
    ;
    E += ((A) << (9) ^ ((A) >> (32 - (9)))) + (B ^ C ^ D) + X[28] + 0x8F1BBCDC;
    B = ((B) << (30) ^ ((B) >> (32 - (30))));
    ;
    D += ((E) << (11) ^ ((E) >> (32 - (11)))) + (A ^ B ^ C) + X[15] + 0x8F1BBCDC;
    A = ((A) << (30) ^ ((A) >> (32 - (30))));
    ;
    C += ((D) << (8) ^ ((D) >> (32 - (8)))) + (E ^ A ^ B) + X[10] + 0x8F1BBCDC;
    E = ((E) << (30) ^ ((E) >> (32 - (30))));
    ;
    B += ((C) << (15) ^ ((C) >> (32 - (15)))) + (D ^ E ^ A) + X[5] + 0x8F1BBCDC;
    D = ((D) << (30) ^ ((D) >> (32 - (30))));
    ;
    A += ((B) << (6) ^ ((B) >> (32 - (6)))) + (C ^ D ^ E) + X[0] + 0x8F1BBCDC;
    C = ((C) << (30) ^ ((C) >> (32 - (30))));
    ;
    E += ((A) << (12) ^ ((A) >> (32 - (12)))) + (B ^ C ^ D) + X[29] + 0x8F1BBCDC;
    B = ((B) << (30) ^ ((B) >> (32 - (30))));
    ;
    D += ((E) << (9) ^ ((E) >> (32 - (9)))) + (A ^ B ^ C) + X[11] + 0x8F1BBCDC;
    A = ((A) << (30) ^ ((A) >> (32 - (30))));
    ;
    C += ((D) << (14) ^ ((D) >> (32 - (14)))) + (E ^ A ^ B) + X[6] + 0x8F1BBCDC;
    E = ((E) << (30) ^ ((E) >> (32 - (30))));
    ;
    B += ((C) << (5) ^ ((C) >> (32 - (5)))) + (D ^ E ^ A) + X[1] + 0x8F1BBCDC;
    D = ((D) << (30) ^ ((D) >> (32 - (30))));
    ;
    A += ((B) << (13) ^ ((B) >> (32 - (13)))) + (C ^ D ^ E) + X[12] + 0x8F1BBCDC;
    C = ((C) << (30) ^ ((C) >> (32 - (30))));
    ;
    hash[0] += A;
    hash[1] += B;
    hash[2] += C;
    hash[3] += D;
    hash[4] += E;
  }
}
```