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

```asm
<sha1_handle>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  mov    0x4(%rsi),%eax
  mov    %rdi,%rbx
  mov    %rsi,%rdi
  mov    0x28(%rdi),%r8d
  mov    0x10(%rdi),%edx
  bswap  %eax
  mov    %eax,%r12d
  mov    0x14(%rdi),%eax
  mov    0xc(%rdi),%ecx
  bswap  %r8d
  mov    %r8d,%r13d
  mov    0x2c(%rdi),%r8d
  mov    0x24(%rdi),%r15d
  bswap  %eax
  mov    %eax,-0x44(%rsp)
  mov    0x18(%rdi),%eax
  bswap  %edx
  mov    0x30(%rdi),%r11d
  mov    %edx,-0x3c(%rsp)
  bswap  %r8d
  bswap  %ecx
  bswap  %eax
  mov    %eax,%r14d
  mov    0x1c(%rdi),%eax
  mov    0x38(%rdi),%edx
  mov    %r8d,-0x48(%rsp)
  mov    0x34(%rdi),%r8d
  bswap  %r11d
  bswap  %r15d
  bswap  %eax
  mov    (%rbx),%r10d
  mov    (%rsi),%r9d
  mov    %eax,-0x34(%rsp)
  mov    0x20(%rdi),%eax
  mov    0x3c(%rdi),%edi
  mov    %r11d,-0x38(%rsp)
  bswap  %r8d
  mov    0x8(%rsi),%esi
  mov    %r8d,-0x50(%rsp)
  bswap  %edx
  mov    %r10d,%ebp
  mov    %edx,-0x54(%rsp)
  bswap  %edi
  mov    0x4(%rbx),%edx
  rol    $0x5,%ebp
  mov    %edi,-0x4c(%rsp)
  mov    0x8(%rbx),%r11d
  bswap  %r9d
  bswap  %esi
  mov    0xc(%rbx),%r8d
  mov    %rbx,-0x8(%rsp)
  bswap  %eax
  mov    %r11d,%edi
  mov    0x10(%rbx),%ebx
  mov    %r10d,-0x18(%rsp)
  xor    %r8d,%edi
  mov    %r8d,-0x1c(%rsp)
  and    %edx,%edi
  mov    %ebx,-0xc(%rsp)
  xor    %r8d,%edi
  lea    0x5a827999(%rbx,%rbp,1),%r8d
  mov    %edx,%ebp
  mov    %edx,-0x14(%rsp)
  ror    $0x2,%ebp
  add    %r8d,%edi
  mov    -0x3c(%rsp),%edx
  mov    %r13d,-0x30(%rsp)
  mov    %ebp,%ebx
  mov    %r11d,%ebp
  add    %r9d,%edi
  xor    %ebx,%r11d
  mov    %ebp,-0x10(%rsp)
  mov    %r11d,%r8d
  mov    -0x1c(%rsp),%r11d
  and    %r10d,%r8d
  ror    $0x2,%r10d
  xor    %ebp,%r8d
  lea    0x5a827999(%rsi,%rbp,1),%ebp
  lea    0x5a827999(%r11,%r8,1),%r8d
  mov    %edi,%r11d
  add    %r12d,%r8d
  rol    $0x5,%r11d
  add    %r8d,%r11d
  mov    %ebx,%r8d
  xor    %r10d,%r8d
  and    %edi,%r8d
  ror    $0x2,%edi
  xor    %ebx,%r8d
  lea    0x5a827999(%rcx,%rbx,1),%ebx
  add    %r8d,%ebp
  mov    %r11d,%r8d
  rol    $0x5,%r8d
  add    %ebp,%r8d
  mov    %r10d,%ebp
  xor    %edi,%ebp
  and    %r11d,%ebp
  ror    $0x2,%r11d
  xor    %r10d,%ebp
  lea    0x5a827999(%rdx,%r10,1),%r10d
  mov    -0x44(%rsp),%edx
  add    %ebx,%ebp
  mov    %r8d,%ebx
  rol    $0x5,%ebx
  add    %ebp,%ebx
  mov    %edi,%ebp
  xor    %r11d,%ebp
  and    %r8d,%ebp
  xor    %edi,%ebp
  lea    0x5a827999(%rdx,%rdi,1),%edi
  mov    -0x34(%rsp),%edx
  add    %ebp,%r10d
  mov    %ebx,%ebp
  rol    $0x5,%ebp
  ror    $0x2,%r8d
  add    %r10d,%ebp
  mov    %r11d,%r10d
  xor    %r8d,%r10d
  and    %ebx,%r10d
  ror    $0x2,%ebx
  xor    %r11d,%r10d
  lea    0x5a827999(%r14,%r11,1),%r11d
  add    %r10d,%edi
  mov    %ebp,%r10d
  rol    $0x5,%r10d
  add    %edi,%r10d
  mov    %r8d,%edi
  xor    %ebx,%edi
  and    %ebp,%edi
  xor    %r8d,%edi
  lea    0x5a827999(%rdx,%r8,1),%r8d
  mov    -0x48(%rsp),%edx
  add    %r11d,%edi
  mov    %r10d,%r11d
  rol    $0x5,%r11d
  add    %edi,%r11d
  mov    %ebp,%edi
  mov    %ebx,%ebp
  ror    $0x2,%edi
  xor    %edi,%ebp
  and    %r10d,%ebp
  ror    $0x2,%r10d
  xor    %ebx,%ebp
  lea    0x5a827999(%rax,%rbx,1),%ebx
  add    %r8d,%ebp
  mov    %r11d,%r8d
  rol    $0x5,%r8d
  add    %ebp,%r8d
  mov    %edi,%ebp
  xor    %r10d,%ebp
  and    %r11d,%ebp
  ror    $0x2,%r11d
  xor    %edi,%ebp
  lea    0x5a827999(%r15,%rdi,1),%edi
  add    %ebx,%ebp
  mov    %r8d,%ebx
  rol    $0x5,%ebx
  add    %ebp,%ebx
  mov    %r10d,%ebp
  xor    %r11d,%ebp
  and    %r8d,%ebp
  ror    $0x2,%r8d
  xor    %r10d,%ebp
  lea    0x5a827999(%r13,%r10,1),%r10d
  mov    %r8d,%r13d
  add    %edi,%ebp
  mov    %ebx,%edi
  rol    $0x5,%edi
  add    %ebp,%edi
  mov    %r11d,%ebp
  xor    %r8d,%ebp
  and    %ebx,%ebp
  ror    $0x2,%ebx
  xor    %r11d,%ebp
  xor    %ebx,%r13d
  lea    0x5a827999(%rdx,%r11,1),%r11d
  mov    -0x50(%rsp),%edx
  add    %r10d,%ebp
  mov    %edi,%r10d
  rol    $0x5,%r10d
  add    %ebp,%r10d
  mov    %r13d,%ebp
  mov    %ebx,%r13d
  and    %edi,%ebp
  ror    $0x2,%edi
  xor    %r8d,%ebp
  xor    %edi,%r13d
  add    %r11d,%ebp
  mov    %r10d,%r11d
  rol    $0x5,%r11d
  add    %ebp,%r11d
  mov    %r13d,%ebp
  mov    -0x38(%rsp),%r13d
  and    %r10d,%ebp
  ror    $0x2,%r10d
  xor    %ebx,%ebp
  lea    0x5a827999(%r13,%r8,1),%r8d
  lea    0x5a827999(%rdx,%rbx,1),%ebx
  mov    -0x54(%rsp),%edx
  add    %r8d,%ebp
  mov    %r11d,%r8d
  rol    $0x5,%r8d
  add    %ebp,%r8d
  mov    %edi,%ebp
  xor    %r10d,%ebp
  mov    %r8d,%r13d
  and    %r11d,%ebp
  rol    $0x5,%r13d
  xor    %edi,%ebp
  lea    0x5a827999(%rdx,%rdi,1),%edi
  add    %ebx,%ebp
  mov    %r13d,%ebx
  mov    -0x4c(%rsp),%r13d
  add    %ebp,%ebx
  ror    $0x2,%r11d
  mov    %r10d,%ebp
  xor    %esi,%r9d
  xor    %r11d,%ebp
  xor    %eax,%r9d
  xor    -0x50(%rsp),%r9d
  xor    %ecx,%r12d
  and    %r8d,%ebp
  ror    $0x2,%r8d
  xor    %r10d,%ebp
  rol    %r9d
  lea    0x5a827999(%r13,%r10,1),%r10d
  add    %edi,%ebp
  mov    %ebx,%edi
  mov    %r9d,%r13d
  mov    %r8d,%r9d
  rol    $0x5,%edi
  add    %ebp,%edi
  mov    %r11d,%ebp
  xor    %r8d,%ebp
  and    %ebx,%ebp
  ror    $0x2,%ebx
  xor    %r11d,%ebp
  xor    %ebx,%r9d
  lea    0x5a827999(%r13,%r11,1),%r11d
  add    %r10d,%ebp
  mov    %edi,%r10d
  and    %edi,%r9d
  ror    $0x2,%edi
  rol    $0x5,%r10d
  xor    %r8d,%r9d
  add    %ebp,%r10d
  add    %r9d,%r11d
  mov    %r10d,%r9d
  rol    $0x5,%r9d
  add    %r11d,%r9d
  mov    %r12d,%r11d
  mov    %ebx,%r12d
  xor    %edi,%r12d
  xor    %r15d,%r11d
  xor    %edx,%r11d
  mov    %r12d,%ebp
  mov    %r9d,%r12d
  rol    %r11d
  and    %r10d,%ebp
  rol    $0x5,%r12d
  xor    -0x3c(%rsp),%esi
  xor    %ebx,%ebp
  lea    0x5a827999(%r11,%r8,1),%r8d
  ror    $0x2,%r10d
  xor    -0x30(%rsp),%esi
  add    %r8d,%ebp
  mov    %r12d,%r8d
  mov    %edi,%r12d
  xor    -0x4c(%rsp),%esi
  xor    %r10d,%r12d
  add    %ebp,%r8d
  mov    %esi,%edx
  mov    %r10d,%esi
  mov    %r12d,%ebp
  rol    %edx
  mov    %r8d,%r12d
  and    %r9d,%ebp
  lea    0x5a827999(%rdx,%rbx,1),%ebx
  ror    $0x2,%r9d
  mov    %edx,-0x40(%rsp)
  xor    %edi,%ebp
  xor    %r9d,%esi
  rol    $0x5,%r12d
  mov    -0x38(%rsp),%edx
  add    %ebp,%ebx
  mov    -0x44(%rsp),%ebp
  mov    %r13d,-0x44(%rsp)
  add    %ebx,%r12d
  mov    %esi,%ebx
  mov    %r9d,%esi
  xor    %ebp,%ecx
  xor    -0x48(%rsp),%ecx
  and    %r8d,%ebx
  ror    $0x2,%r8d
  xor    %r13d,%ecx
  xor    %r10d,%ebx
  mov    %ebp,%r13d
  rol    %ecx
  lea    0x5a827999(%rcx,%rdi,1),%edi
  add    %edi,%ebx
  mov    %r12d,%edi
  rol    $0x5,%edi
  add    %ebx,%edi
  mov    -0x3c(%rsp),%ebx
  xor    %r14d,%ebx
  xor    %ebx,%edx
  xor    %r11d,%edx
  rol    %edx
  xor    %r8d,%esi
  xor    %eax,%r14d
  mov    %esi,%ebx
  mov    %edi,%esi
  lea    0x6ed9eba1(%rdx,%r10,1),%r10d
  xor    %r12d,%ebx
  rol    $0x5,%esi
  add    %ebx,%r10d
  mov    %esi,%ebx
  mov    -0x34(%rsp),%esi
  ror    $0x2,%r12d
  add    %r10d,%ebx
  mov    -0x50(%rsp),%r10d
  xor    %esi,%r13d
  xor    %r13d,%r10d
  mov    %r8d,%r13d
  xor    -0x40(%rsp),%r10d
  xor    %r12d,%r13d
  rol    %r10d
  mov    %r13d,%ebp
  mov    %ebx,%r13d
  lea    0x6ed9eba1(%r10,%r9,1),%r9d
  xor    %edi,%ebp
  rol    $0x5,%r13d
  add    %ebp,%r9d
  mov    %r13d,%ebp
  ror    $0x2,%edi
  add    %r9d,%ebp
  mov    -0x54(%rsp),%r9d
  xor    %r14d,%r9d
  mov    %r12d,%r14d
  xor    %edi,%r14d
  xor    %ecx,%r9d
  rol    %r9d
  mov    %r14d,%r13d
  mov    %ebp,%r14d
  xor    %ebx,%r13d
  lea    0x6ed9eba1(%r9,%r8,1),%r8d
  rol    $0x5,%r14d
  add    %r13d,%r8d
  ror    $0x2,%ebx
  add    %r8d,%r14d
  mov    %esi,%r8d
  mov    %edi,%esi
  xor    %r15d,%r8d
  xor    -0x4c(%rsp),%r8d
  xor    %ebx,%esi
  xor    %edx,%r8d
  mov    %esi,%r13d
  mov    %r14d,%esi
  rol    %r8d
  xor    %ebp,%r13d
  lea    0x6ed9eba1(%r8,%r12,1),%r12d
  add    %r13d,%r12d
  rol    $0x5,%esi
  mov    %esi,%r13d
  mov    -0x30(%rsp),%esi
  ror    $0x2,%ebp
  add    %r12d,%r13d
  mov    %ebx,%r12d
  xor    %esi,%eax
  xor    -0x44(%rsp),%eax
  xor    %ebp,%r12d
  xor    %r10d,%eax
  xor    %r14d,%r12d
  ror    $0x2,%r14d
  rol    %eax
  mov    %eax,-0x34(%rsp)
  lea    0x6ed9eba1(%rax,%rdi,1),%edi
  mov    -0x48(%rsp),%eax
  add    %r12d,%edi
  mov    %r13d,%r12d
  xor    %r15d,%eax
  rol    $0x5,%r12d
  add    %edi,%r12d
  mov    %eax,%edi
  mov    %ebp,%eax
  xor    %r11d,%edi
  xor    %r14d,%eax
  xor    %r9d,%edi
  mov    %eax,%r15d
  mov    %r12d,%eax
  rol    %edi
  xor    %r13d,%r15d
  rol    $0x5,%eax
  lea    0x6ed9eba1(%rdi,%rbx,1),%ebx
  mov    %edi,-0x3c(%rsp)
  mov    -0x38(%rsp),%edi
  ror    $0x2,%r13d
  add    %r15d,%ebx
  mov    %eax,%r15d
  mov    %r14d,%eax
  add    %ebx,%r15d
  mov    -0x40(%rsp),%ebx
  xor    %edi,%esi
  xor    %r13d,%eax
  xor    %esi,%ebx
  xor    %r8d,%ebx
  rol    %ebx
  mov    %ebx,%esi
  mov    %eax,%ebx
  mov    %r15d,%eax
  xor    %r12d,%ebx
  rol    $0x5,%eax
  lea    0x6ed9eba1(%rsi,%rbp,1),%ebp
  mov    %esi,-0x38(%rsp)
  add    %ebx,%ebp
  mov    %eax,%ebx
  mov    -0x48(%rsp),%esi
  add    %ebp,%ebx
  xor    -0x50(%rsp),%esi
  ror    $0x2,%r12d
  xor    -0x54(%rsp),%edi
  mov    %esi,%ebp
  mov    %r13d,%esi
  xor    %ecx,%ebp
  xor    -0x34(%rsp),%ebp
  xor    %r12d,%esi
  mov    %ebp,%eax
  mov    %esi,%ebp
  mov    %r12d,%esi
  rol    %eax
  xor    %r15d,%ebp
  ror    $0x2,%r15d
  lea    0x6ed9eba1(%rax,%r14,1),%r14d
  xor    %r15d,%esi
  add    %r14d,%ebp
  mov    %ebx,%r14d
  rol    $0x5,%r14d
  add    %ebp,%r14d
  mov    %edi,%ebp
  xor    %edx,%ebp
  xor    -0x3c(%rsp),%ebp
  rol    %ebp
  mov    %ebp,%edi
  mov    %esi,%ebp
  mov    %r15d,%esi
  xor    %ebx,%ebp
  lea    0x6ed9eba1(%rdi,%r13,1),%r13d
  ror    $0x2,%ebx
  mov    %edi,-0x48(%rsp)
  add    %r13d,%ebp
  mov    %r14d,%r13d
  xor    %ebx,%esi
  rol    $0x5,%r13d
  add    %ebp,%r13d
  mov    -0x50(%rsp),%ebp
  xor    -0x4c(%rsp),%ebp
  xor    %r10d,%ebp
  xor    -0x38(%rsp),%ebp
  mov    %ebp,%edi
  mov    %esi,%ebp
  mov    %ebx,%esi
  rol    %edi
  xor    %r14d,%ebp
  ror    $0x2,%r14d
  lea    0x6ed9eba1(%rdi,%r12,1),%r12d
  add    %r12d,%ebp
  mov    %r13d,%r12d
  rol    $0x5,%r12d
  add    %ebp,%r12d
  mov    -0x54(%rsp),%ebp
  xor    -0x44(%rsp),%ebp
  xor    %r14d,%esi
  xor    %r9d,%ebp
  xor    %eax,%ebp
  rol    %ebp
  mov    %ebp,-0x54(%rsp)
  mov    %esi,%ebp
  mov    -0x54(%rsp),%esi
  xor    %r13d,%ebp
  ror    $0x2,%r13d
  lea    0x6ed9eba1(%rsi,%r15,1),%r15d
  mov    %r12d,%esi
  rol    $0x5,%esi
  add    %ebp,%r15d
  mov    %esi,%ebp
  add    %r15d,%ebp
  mov    -0x4c(%rsp),%r15d
  xor    %r11d,%r15d
  xor    %ecx,%r11d
  xor    -0x3c(%rsp),%r11d
  xor    %r8d,%r15d
  xor    -0x48(%rsp),%r15d
  mov    %r15d,%esi
  mov    %r14d,%r15d
  rol    %esi
  xor    %r13d,%r15d
  xor    %r12d,%r15d
  lea    0x6ed9eba1(%rsi,%rbx,1),%ebx
  ror    $0x2,%r12d
  mov    %esi,-0x30(%rsp)
  add    %r15d,%ebx
  mov    %ebp,%r15d
  rol    $0x5,%r15d
  add    %r15d,%ebx
  mov    -0x44(%rsp),%r15d
  xor    -0x40(%rsp),%r15d
  xor    -0x34(%rsp),%r15d
  xor    %edi,%r15d
  rol    %r15d
  mov    %r15d,%esi
  mov    %r13d,%r15d
  xor    %r12d,%r15d
  lea    0x6ed9eba1(%rsi,%r14,1),%r14d
  mov    %esi,-0x2c(%rsp)
  xor    %ebp,%r15d
  ror    $0x2,%ebp
  add    %r15d,%r14d
  mov    %ebx,%r15d
  rol    $0x5,%r15d
  add    %r15d,%r14d
  xor    -0x54(%rsp),%r11d
  xor    %r10d,%ecx
  mov    %r11d,%r15d
  xor    %eax,%ecx
  rol    %r15d
  mov    %r15d,%r11d
  mov    %r12d,%r15d
  mov    %r11d,-0x28(%rsp)
  xor    %ebp,%r15d
  mov    -0x40(%rsp),%esi
  lea    0x6ed9eba1(%r11,%r13,1),%r11d
  xor    %ebx,%r15d
  mov    %r14d,%r13d
  ror    $0x2,%ebx
  xor    -0x2c(%rsp),%ecx
  add    %r15d,%r11d
  rol    $0x5,%r13d
  xor    %edx,%esi
  xor    -0x38(%rsp),%esi
  xor    -0x30(%rsp),%esi
  add    %r13d,%r11d
  mov    %ebp,%r13d
  xor    %r9d,%edx
  mov    %esi,%r15d
  xor    %ebx,%r13d
  xor    -0x48(%rsp),%edx
  xor    -0x28(%rsp),%edx
  rol    %r15d
  xor    %r14d,%r13d
  ror    $0x2,%r14d
  mov    %eax,-0x50(%rsp)
  lea    0x6ed9eba1(%r15,%r12,1),%esi
  mov    %r11d,%r12d
  mov    %r14d,%eax
  mov    %edi,-0x44(%rsp)
  add    %r13d,%esi
  rol    $0x5,%r12d
  mov    %ecx,%r13d
  add    %r12d,%esi
  mov    %ebx,%r12d
  rol    %r13d
  xor    %r14d,%r12d
  lea    0x6ed9eba1(%r13,%rbp,1),%ecx
  xor    %r11d,%r12d
  ror    $0x2,%r11d
  add    %r12d,%ecx
  mov    %esi,%r12d
  rol    $0x5,%r12d
  add    %r12d,%ecx
  mov    %edx,%r12d
  rol    %r12d
  xor    %r11d,%eax
  xor    %r8d,%r10d
  xor    -0x3c(%rsp),%r8d
  mov    %eax,%ebp
  xor    %edi,%r10d
  mov    %ecx,%eax
  mov    -0x34(%rsp),%edi
  xor    %esi,%ebp
  lea    0x6ed9eba1(%r12,%rbx,1),%edx
  xor    %r15d,%r10d
  rol    $0x5,%eax
  add    %ebp,%edx
  ror    $0x2,%esi
  xor    %edi,%r9d
  xor    -0x54(%rsp),%r9d
  add    %eax,%edx
  mov    %r10d,%eax
  xor    %r13d,%r9d
  xor    -0x30(%rsp),%r8d
  rol    %eax
  xor    %r12d,%r8d
  mov    %eax,%ebp
  mov    %r11d,%eax
  rol    %r8d
  xor    %esi,%eax
  lea    0x6ed9eba1(%rbp,%r14,1),%r10d
  mov    %edx,%r14d
  mov    %r8d,-0x24(%rsp)
  mov    %eax,%ebx
  rol    $0x5,%r14d
  lea    0x6ed9eba1(%r8,%rsi,1),%r8d
  xor    %ecx,%ebx
  ror    $0x2,%ecx
  add    %ebx,%r10d
  add    %r14d,%r10d
  mov    %r9d,%r14d
  mov    %esi,%r9d
  xor    %ecx,%r9d
  rol    %r14d
  mov    %r10d,%eax
  mov    %r9d,%ebx
  lea    0x6ed9eba1(%r14,%r11,1),%r9d
  rol    $0x5,%eax
  xor    %edx,%ebx
  ror    $0x2,%edx
  add    %ebx,%r9d
  mov    -0x50(%rsp),%ebx
  add    %eax,%r9d
  mov    %ecx,%eax
  xor    %edx,%eax
  mov    %r9d,%esi
  mov    %eax,%r11d
  mov    %edi,%eax
  xor    %r10d,%r11d
  add    %r11d,%r8d
  mov    -0x38(%rsp),%r11d
  rol    $0x5,%esi
  add    %r8d,%esi
  ror    $0x2,%r10d
  xor    %r11d,%eax
  xor    -0x2c(%rsp),%eax
  mov    %esi,%edi
  xor    %ebp,%eax
  rol    $0x5,%edi
  rol    %eax
  lea    -0x70e44324(%rax,%rcx,1),%ecx
  mov    %eax,-0x20(%rsp)
  add    %edi,%ecx
  mov    %r9d,%edi
  or     %r10d,%edi
  mov    %edi,%eax
  mov    %r9d,%edi
  ror    $0x2,%r9d
  and    %r10d,%edi
  and    %edx,%eax
  or     %edi,%eax
  mov    -0x3c(%rsp),%edi
  add    %ecx,%eax
  mov    %esi,%ecx
  xor    %ebx,%edi
  xor    -0x28(%rsp),%edi
  and    %r9d,%ecx
  xor    %r14d,%edi
  rol    %edi
  mov    %edi,%r8d
  mov    %esi,%edi
  ror    $0x2,%esi
  or     %r9d,%edi
  lea    -0x70e44324(%r8,%rdx,1),%edx
  mov    %r8d,-0x50(%rsp)
  and    %r10d,%edi
  or     %edi,%ecx
  add    %ecx,%edx
  mov    %eax,%ecx
  rol    $0x5,%ecx
  add    %edx,%ecx
  mov    %r11d,%edx
  mov    -0x48(%rsp),%r11d
  mov    %ecx,%r8d
  xor    %r11d,%edx
  xor    %r15d,%edx
  xor    -0x24(%rsp),%edx
  rol    %edx
  rol    $0x5,%r8d
  lea    -0x70e44324(%rdx,%r10,1),%edi
  mov    %edx,-0x4c(%rsp)
  mov    -0x44(%rsp),%r10d
  add    %r8d,%edi
  mov    %eax,%r8d
  or     %esi,%r8d
  mov    %r8d,%edx
  mov    %eax,%r8d
  ror    $0x2,%eax
  and    %esi,%r8d
  and    %r9d,%edx
  or     %r8d,%edx
  add    %edi,%edx
  mov    %ebx,%edi
  xor    %r10d,%edi
  xor    %r13d,%edi
  xor    -0x20(%rsp),%edi
  rol    %edi
  mov    %edi,%ebx
  mov    %ecx,%edi
  or     %eax,%edi
  mov    %ebx,-0x48(%rsp)
  mov    %edi,%r8d
  mov    %ecx,%edi
  ror    $0x2,%ecx
  and    %esi,%r8d
  and    %eax,%edi
  or     %r8d,%edi
  lea    -0x70e44324(%rbx,%r9,1),%r8d
  mov    -0x30(%rsp),%ebx
  add    %edi,%r8d
  mov    %edx,%edi
  rol    $0x5,%edi
  add    %r8d,%edi
  mov    %r11d,%r8d
  mov    -0x54(%rsp),%r11d
  xor    %r11d,%r8d
  xor    %r12d,%r8d
  xor    -0x50(%rsp),%r8d
  mov    %r8d,%r9d
  rol    %r9d
  lea    -0x70e44324(%r9,%rsi,1),%r8d
  mov    %edi,%esi
  mov    %r9d,-0x44(%rsp)
  mov    %edx,%r9d
  rol    $0x5,%esi
  and    %ecx,%r9d
  add    %esi,%r8d
  mov    %edx,%esi
  ror    $0x2,%edx
  or     %ecx,%esi
  and    %eax,%esi
  or     %r9d,%esi
  mov    %edi,%r9d
  add    %r8d,%esi
  xor    %ebx,%r10d
  or     %edx,%r9d
  mov    %r10d,%r8d
  and    %ecx,%r9d
  xor    %ebp,%r8d
  xor    -0x4c(%rsp),%r8d
  mov    %r8d,%r10d
  mov    %edi,%r8d
  ror    $0x2,%edi
  rol    %r10d
  and    %edx,%r8d
  or     %r9d,%r8d
  lea    -0x70e44324(%r10,%rax,1),%eax
  mov    %r10d,-0x40(%rsp)
  mov    %esi,%r9d
  add    %r8d,%eax
  mov    %esi,%r8d
  and    %edi,%r9d
  rol    $0x5,%r8d
  add    %eax,%r8d
  mov    %r11d,%eax
  mov    -0x2c(%rsp),%r11d
  xor    %r11d,%eax
  xor    %r14d,%eax
  xor    -0x48(%rsp),%eax
  rol    %eax
  mov    %eax,-0x2c(%rsp)
  lea    -0x70e44324(%rax,%rcx,1),%eax
  mov    %r8d,%ecx
  rol    $0x5,%ecx
  add    %ecx,%eax
  mov    %esi,%ecx
  ror    $0x2,%esi
  or     %edi,%ecx
  and    %edx,%ecx
  or     %r9d,%ecx
  add    %eax,%ecx
  mov    %ebx,%eax
  mov    -0x28(%rsp),%ebx
  xor    %ebx,%eax
  xor    -0x24(%rsp),%eax
  xor    -0x44(%rsp),%eax
  mov    %eax,%r9d
  mov    %r8d,%eax
  rol    %r9d
  and    %esi,%eax
  mov    %r9d,%r10d
  mov    %r8d,%r9d
  or     %esi,%r9d
  lea    -0x70e44324(%r10,%rdx,1),%edx
  and    %edi,%r9d
  or     %r9d,%eax
  mov    %ecx,%r9d
  add    %edx,%eax
  rol    $0x5,%r9d
  add    %eax,%r9d
  mov    %r11d,%eax
  ror    $0x2,%r8d
  xor    %r15d,%eax
  xor    -0x20(%rsp),%eax
  xor    -0x40(%rsp),%eax
  xor    %r12d,%r15d
  mov    %eax,%r11d
  xor    -0x4c(%rsp),%r15d
  rol    %r11d
  xor    %r10d,%r15d
  lea    -0x70e44324(%r11,%rdi,1),%eax
  mov    %r9d,%edi
  rol    %r15d
  mov    %r11d,-0x3c(%rsp)
  rol    $0x5,%edi
  add    %edi,%eax
  mov    %ecx,%edi
  or     %r8d,%edi
  mov    %edi,%edx
  mov    %ecx,%edi
  ror    $0x2,%ecx
  and    %r8d,%edi
  and    %esi,%edx
  or     %edi,%edx
  add    %eax,%edx
  mov    %ebx,%eax
  xor    %r13d,%eax
  xor    -0x50(%rsp),%eax
  xor    -0x2c(%rsp),%eax
  mov    %eax,%edi
  mov    %r9d,%eax
  rol    %edi
  and    %ecx,%eax
  mov    %edi,%ebx
  mov    %r9d,%edi
  ror    $0x2,%r9d
  or     %ecx,%edi
  lea    -0x70e44324(%rbx,%rsi,1),%esi
  mov    %ebx,-0x38(%rsp)
  mov    %r15d,%ebx
  and    %r8d,%edi
  or     %edi,%eax
  lea    -0x70e44324(%r15,%r8,1),%edi
  mov    %edx,%r15d
  add    %eax,%esi
  mov    %edx,%eax
  rol    $0x5,%eax
  add    %esi,%eax
  mov    %eax,%esi
  rol    $0x5,%esi
  xor    %ebp,%r13d
  xor    -0x48(%rsp),%r13d
  and    %r9d,%r15d
  add    %esi,%edi
  mov    %edx,%esi
  xor    %r11d,%r13d
  ror    $0x2,%edx
  or     %r9d,%esi
  xor    %r14d,%r12d
  xor    -0x44(%rsp),%r12d
  xor    -0x38(%rsp),%r12d
  and    %ecx,%esi
  or     %r15d,%esi
  mov    %r13d,%r15d
  mov    -0x24(%rsp),%r13d
  rol    %r15d
  add    %edi,%esi
  mov    %eax,%edi
  mov    %r15d,%r11d
  mov    %eax,%r15d
  and    %edx,%edi
  or     %edx,%r15d
  lea    -0x70e44324(%r11,%rcx,1),%ecx
  mov    %r15d,%r8d
  mov    %eax,%r15d
  and    %r9d,%r8d
  ror    $0x2,%r15d
  or     %r8d,%edi
  mov    %r15d,%r8d
  mov    %r12d,%r15d
  mov    -0x20(%rsp),%r12d
  add    %edi,%ecx
  mov    %esi,%edi
  rol    %r15d
  rol    $0x5,%edi
  mov    %r15d,-0x34(%rsp)
  add    %ecx,%edi
  lea    -0x70e44324(%r15,%r9,1),%ecx
  mov    %edi,%r15d
  rol    $0x5,%r15d
  add    %r15d,%ecx
  mov    %esi,%r15d
  or     %r8d,%r15d
  mov    %r15d,%eax
  mov    %esi,%r15d
  ror    $0x2,%esi
  and    %r8d,%r15d
  and    %edx,%eax
  or     %r15d,%eax
  mov    %edi,%r15d
  add    %ecx,%eax
  xor    %r13d,%ebp
  or     %esi,%r15d
  xor    -0x40(%rsp),%ebp
  mov    %r15d,%r9d
  mov    %edi,%r15d
  xor    %ebx,%ebp
  xor    %r12d,%r14d
  and    %esi,%r15d
  rol    %ebp
  and    %r8d,%r9d
  xor    -0x2c(%rsp),%r14d
  mov    %r15d,%ecx
  mov    %eax,%r15d
  lea    -0x70e44324(%rbp,%rdx,1),%edx
  xor    %r11d,%r14d
  rol    $0x5,%r15d
  or     %r9d,%ecx
  rol    %r14d
  add    %ecx,%edx
  mov    %r15d,%ecx
  lea    -0x70e44324(%r14,%r8,1),%r8d
  ror    $0x2,%edi
  add    %edx,%ecx
  mov    %ecx,%r15d
  rol    $0x5,%r15d
  add    %r15d,%r8d
  mov    %eax,%r15d
  or     %edi,%r15d
  mov    %r15d,%edx
  mov    %eax,%r15d
  ror    $0x2,%eax
  and    %edi,%r15d
  and    %esi,%edx
  or     %r15d,%edx
  mov    %ecx,%r15d
  add    %r8d,%edx
  mov    -0x50(%rsp),%r8d
  or     %eax,%r15d
  mov    %r15d,%r9d
  mov    %ecx,%r15d
  xor    %r13d,%r8d
  and    %eax,%r15d
  and    %edi,%r9d
  xor    %r10d,%r8d
  xor    -0x34(%rsp),%r8d
  mov    %r8d,%r13d
  mov    %r15d,%r8d
  mov    %edx,%r15d
  rol    %r13d
  or     %r9d,%r8d
  lea    -0x70e44324(%r13,%rsi,1),%esi
  add    %r8d,%esi
  rol    $0x5,%r15d
  mov    %r15d,%r8d
  ror    $0x2,%ecx
  mov    %edx,%r15d
  add    %esi,%r8d
  mov    -0x4c(%rsp),%esi
  and    %ecx,%r15d
  xor    %r12d,%esi
  xor    -0x3c(%rsp),%esi
  xor    %ebp,%esi
  mov    %esi,%r12d
  rol    %r12d
  lea    -0x70e44324(%r12,%rdi,1),%esi
  mov    %r8d,%edi
  rol    $0x5,%edi
  add    %edi,%esi
  mov    %edx,%edi
  ror    $0x2,%edx
  or     %ecx,%edi
  and    %eax,%edi
  or     %r15d,%edi
  mov    %r8d,%r15d
  add    %esi,%edi
  or     %edx,%r15d
  mov    -0x50(%rsp),%esi
  xor    -0x48(%rsp),%esi
  xor    -0x38(%rsp),%esi
  mov    %r15d,%r9d
  mov    %r8d,%r15d
  ror    $0x2,%r8d
  xor    %r14d,%esi
  and    %edx,%r15d
  and    %ecx,%r9d
  rol    %esi
  mov    %esi,-0x54(%rsp)
  mov    %r15d,%esi
  or     %r9d,%esi
  mov    -0x54(%rsp),%r9d
  lea    -0x70e44324(%r9,%rax,1),%eax
  add    %eax,%esi
  mov    %edi,%eax
  rol    $0x5,%eax
  add    %esi,%eax
  mov    -0x4c(%rsp),%esi
  xor    -0x44(%rsp),%esi
  xor    %ebx,%esi
  mov    %eax,%r15d
  xor    %r13d,%esi
  rol    %esi
  rol    $0x5,%r15d
  lea    -0x70e44324(%rsi,%rcx,1),%ecx
  mov    %esi,-0x30(%rsp)
  add    %r15d,%ecx
  mov    %edi,%r15d
  or     %r8d,%r15d
  mov    %r15d,%esi
  mov    %edi,%r15d
  ror    $0x2,%edi
  and    %r8d,%r15d
  and    %edx,%esi
  or     %r15d,%esi
  mov    %eax,%r15d
  add    %ecx,%esi
  mov    -0x48(%rsp),%ecx
  xor    -0x40(%rsp),%ecx
  or     %edi,%r15d
  xor    %r11d,%ecx
  mov    %r15d,%r9d
  mov    %eax,%r15d
  ror    $0x2,%eax
  xor    %r12d,%ecx
  and    %edi,%r15d
  and    %r8d,%r9d
  rol    %ecx
  mov    %ecx,-0x50(%rsp)
  mov    %r15d,%ecx
  mov    %esi,%r15d
  or     %r9d,%ecx
  mov    -0x50(%rsp),%r9d
  rol    $0x5,%r15d
  lea    -0x70e44324(%r9,%rdx,1),%edx
  mov    -0x2c(%rsp),%r9d
  add    %ecx,%edx
  mov    %r15d,%ecx
  mov    %edi,%r15d
  add    %edx,%ecx
  mov    -0x44(%rsp),%edx
  xor    %eax,%r15d
  xor    %r9d,%edx
  xor    -0x34(%rsp),%edx
  xor    -0x54(%rsp),%edx
  rol    %edx
  mov    %edx,-0x4c(%rsp)
  mov    %r15d,%edx
  mov    -0x4c(%rsp),%r15d
  xor    %esi,%edx
  ror    $0x2,%esi
  lea    -0x359d3e2a(%r15,%r8,1),%r8d
  mov    %ecx,%r15d
  rol    $0x5,%r15d
  add    %edx,%r8d
  mov    %r15d,%edx
  add    %r8d,%edx
  mov    -0x40(%rsp),%r8d
  xor    %r10d,%r8d
  xor    %ebp,%r8d
  xor    -0x30(%rsp),%r8d
  rol    %r8d
  mov    %r8d,%r15d
  mov    %eax,%r8d
  xor    %esi,%r8d
  lea    -0x359d3e2a(%r15,%rdi,1),%edi
  mov    %r15d,-0x44(%rsp)
  xor    %ecx,%r8d
  ror    $0x2,%ecx
  add    %r8d,%edi
  mov    %edx,%r8d
  rol    $0x5,%r8d
  add    %edi,%r8d
  mov    -0x3c(%rsp),%edi
  xor    %r9d,%edi
  xor    %r14d,%edi
  xor    -0x50(%rsp),%edi
  rol    %edi
  mov    %edi,%r9d
  mov    %esi,%edi
  xor    %ecx,%edi
  lea    -0x359d3e2a(%r9,%rax,1),%eax
  mov    %r9d,-0x48(%rsp)
  xor    %edx,%edi
  ror    $0x2,%edx
  add    %edi,%eax
  mov    %r8d,%edi
  rol    $0x5,%edi
  add    %eax,%edi
  mov    -0x38(%rsp),%eax
  xor    %r10d,%eax
  mov    %ecx,%r10d
  xor    %r13d,%eax
  xor    -0x4c(%rsp),%eax
  xor    %edx,%r10d
  rol    %eax
  xor    %r8d,%r10d
  ror    $0x2,%r8d
  lea    -0x359d3e2a(%rax,%rsi,1),%r9d
  mov    %edi,%esi
  add    %r10d,%r9d
  rol    $0x5,%esi
  mov    %edx,%r10d
  add    %r9d,%esi
  mov    -0x3c(%rsp),%r9d
  xor    %ebx,%r9d
  xor    %r12d,%r9d
  xor    %r15d,%r9d
  rol    %r9d
  xor    %r8d,%r10d
  xor    -0x34(%rsp),%ebx
  mov    %r9d,-0x40(%rsp)
  xor    %edi,%r10d
  lea    -0x359d3e2a(%r9,%rcx,1),%r9d
  mov    %esi,%ecx
  rol    $0x5,%ecx
  add    %r10d,%r9d
  ror    $0x2,%edi
  mov    %r8d,%r10d
  add    %r9d,%ecx
  mov    -0x38(%rsp),%r9d
  xor    %edi,%r10d
  xor    %esi,%r10d
  ror    $0x2,%esi
  xor    %r11d,%r9d
  xor    -0x54(%rsp),%r9d
  xor    -0x48(%rsp),%r9d
  rol    %r9d
  mov    %r9d,-0x3c(%rsp)
  lea    -0x359d3e2a(%r9,%rdx,1),%r9d
  mov    %ecx,%edx
  add    %r10d,%r9d
  rol    $0x5,%edx
  mov    %edi,%r10d
  add    %r9d,%edx
  mov    -0x30(%rsp),%r9d
  xor    %esi,%r10d
  xor    %ecx,%r10d
  ror    $0x2,%ecx
  xor    %ebx,%r9d
  mov    %edx,%ebx
  xor    %eax,%r9d
  rol    $0x5,%ebx
  rol    %r9d
  lea    -0x359d3e2a(%r9,%r8,1),%r8d
  add    %r10d,%r8d
  add    %r8d,%ebx
  mov    %r11d,%r8d
  mov    %esi,%r11d
  xor    %ecx,%r11d
  xor    %ebp,%r8d
  xor    -0x50(%rsp),%r8d
  xor    -0x40(%rsp),%r8d
  rol    %r8d
  mov    %r11d,%r10d
  mov    %ebx,%r11d
  xor    %edx,%r10d
  lea    -0x359d3e2a(%r8,%rdi,1),%edi
  add    %r10d,%edi
  rol    $0x5,%r11d
  mov    %ecx,%r10d
  add    %edi,%r11d
  mov    -0x34(%rsp),%edi
  ror    $0x2,%edx
  xor    %edx,%r10d
  xor    %r14d,%edi
  xor    -0x4c(%rsp),%edi
  xor    -0x3c(%rsp),%edi
  xor    %ebx,%r10d
  rol    %edi
  ror    $0x2,%ebx
  xor    %r12d,%r14d
  lea    -0x359d3e2a(%rdi,%rsi,1),%esi
  add    %r10d,%esi
  mov    %r11d,%r10d
  rol    $0x5,%r10d
  add    %esi,%r10d
  mov    %ebp,%esi
  xor    %r13d,%esi
  xor    %r15d,%esi
  mov    %edx,%r15d
  xor    %ebx,%r15d
  xor    %r9d,%esi
  rol    %esi
  mov    %r15d,%ebp
  mov    %r10d,%r15d
  xor    %r11d,%ebp
  lea    -0x359d3e2a(%rsi,%rcx,1),%ecx
  rol    $0x5,%r15d
  add    %ebp,%ecx
  ror    $0x2,%r11d
  add    %ecx,%r15d
  mov    -0x48(%rsp),%ecx
  xor    %r14d,%ecx
  mov    %ebx,%r14d
  xor    %r11d,%r14d
  xor    %r8d,%ecx
  rol    %ecx
  mov    %r14d,%ebp
  mov    %r15d,%r14d
  xor    %r10d,%ebp
  lea    -0x359d3e2a(%rcx,%rdx,1),%edx
  rol    $0x5,%r14d
  add    %ebp,%edx
  add    %edx,%r14d
  xor    -0x54(%rsp),%r13d
  ror    $0x2,%r10d
  xor    -0x30(%rsp),%r12d
  mov    %r13d,%edx
  mov    %r11d,%r13d
  xor    %eax,%edx
  xor    %r10d,%r13d
  xor    %edi,%edx
  mov    %r13d,%ebp
  mov    %r14d,%r13d
  rol    %edx
  xor    %r15d,%ebp
  rol    $0x5,%r13d
  lea    -0x359d3e2a(%rdx,%rbx,1),%ebx
  ror    $0x2,%r15d
  add    %ebp,%ebx
  add    %ebx,%r13d
  mov    -0x40(%rsp),%ebx
  xor    %r12d,%ebx
  mov    %r10d,%r12d
  xor    %r15d,%r12d
  xor    %esi,%ebx
  rol    %ebx
  mov    %r12d,%ebp
  mov    %r13d,%r12d
  xor    %r14d,%ebp
  lea    -0x359d3e2a(%rbx,%r11,1),%r11d
  rol    $0x5,%r12d
  add    %ebp,%r11d
  ror    $0x2,%r14d
  mov    %r15d,%ebp
  add    %r11d,%r12d
  mov    -0x54(%rsp),%r11d
  xor    -0x50(%rsp),%r11d
  xor    %r14d,%ebp
  xor    -0x3c(%rsp),%r11d
  xor    %r13d,%ebp
  ror    $0x2,%r13d
  xor    %ecx,%r11d
  rol    %r11d
  lea    -0x359d3e2a(%r11,%r10,1),%r10d
  add    %ebp,%r10d
  mov    %r12d,%ebp
  rol    $0x5,%ebp
  add    %r10d,%ebp
  mov    -0x30(%rsp),%r10d
  xor    -0x4c(%rsp),%r10d
  xor    %r9d,%r10d
  mov    %r14d,%r9d
  xor    %edx,%r10d
  xor    %r13d,%r9d
  rol    %r10d
  xor    %r12d,%r9d
  ror    $0x2,%r12d
  lea    -0x359d3e2a(%r10,%r15,1),%r15d
  add    %r15d,%r9d
  mov    %ebp,%r15d
  rol    $0x5,%r15d
  add    %r9d,%r15d
  mov    -0x50(%rsp),%r9d
  xor    -0x44(%rsp),%r9d
  xor    %r8d,%r9d
  mov    %r13d,%r8d
  xor    %r12d,%r8d
  xor    %ebx,%r9d
  rol    %r9d
  mov    %r8d,%ebx
  xor    %ebp,%ebx
  lea    -0x359d3e2a(%r9,%r14,1),%r8d
  mov    %r15d,%r14d
  ror    $0x2,%ebp
  add    %ebx,%r8d
  rol    $0x5,%r14d
  add    %r14d,%r8d
  mov    -0x4c(%rsp),%r14d
  xor    -0x48(%rsp),%r14d
  mov    %r14d,%ebx
  mov    %r8d,%r14d
  xor    %edi,%ebx
  mov    %r12d,%edi
  rol    $0x5,%r14d
  xor    %ebp,%edi
  xor    %r11d,%ebx
  rol    %ebx
  mov    %edi,%r11d
  xor    %r15d,%r11d
  lea    -0x359d3e2a(%rbx,%r13,1),%edi
  ror    $0x2,%r15d
  add    %r11d,%edi
  mov    -0x44(%rsp),%r11d
  add    %r14d,%edi
  xor    %eax,%r11d
  mov    %edi,%r14d
  xor    %esi,%r11d
  mov    %ebp,%esi
  xor    %r10d,%r11d
  xor    %r15d,%esi
  xor    -0x3c(%rsp),%eax
  rol    $0x5,%r14d
  rol    %r11d
  xor    %r8d,%esi
  ror    $0x2,%r8d
  xor    %edx,%eax
  lea    -0x359d3e2a(%r12,%r11,1),%r10d
  xor    %ebx,%eax
  mov    -0x8(%rsp),%rbx
  mov    -0x1c(%rsp),%r11d
  add    %r10d,%esi
  mov    -0x48(%rsp),%r10d
  xor    -0x40(%rsp),%r10d
  rol    %eax
  xor    %ecx,%r10d
  mov    %r15d,%ecx
  add    %r14d,%esi
  mov    %r8d,%r14d
  xor    %r9d,%r10d
  xor    %r8d,%ecx
  rol    %r10d
  xor    %edi,%ecx
  ror    $0x2,%edi
  lea    -0x359d3e2a(%rbp,%r10,1),%r9d
  mov    -0x18(%rsp),%r10d
  xor    %edi,%r14d
  add    %r9d,%ecx
  mov    %esi,%r9d
  mov    %r14d,%edx
  rol    $0x5,%r9d
  lea    -0x359d3e2a(%r10,%rax,1),%eax
  xor    %esi,%edx
  ror    $0x2,%esi
  add    %r9d,%ecx
  add    %r15d,%eax
  add    -0x10(%rsp),%esi
  mov    %ecx,%r14d
  add    %edx,%eax
  mov    -0x14(%rsp),%edx
  mov    %esi,0x8(%rbx)
  rol    $0x5,%r14d
  add    %r14d,%eax
  mov    %eax,(%rbx)
  lea    (%rdx,%rcx,1),%eax
  mov    %rbx,%rcx
  mov    %eax,0x4(%rbx)
  lea    (%r11,%rdi,1),%eax
  mov    %eax,0xc(%rbx)
  mov    -0xc(%rsp),%ebx
  lea    (%rbx,%r8,1),%eax
  mov    %eax,0x10(%rcx)
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
```

assistant: ```c
void sha1_handle(unsigned int *state, const unsigned char data[64]) {
  unsigned int temp, W[16], A, B, C, D, E;
  { (W[0]) = ((unsigned int)(data)[(0)] << 24) | ((unsigned int)(data)[(0) + 1] << 16) | ((unsigned int)(data)[(0) + 2] << 8) | ((unsigned int)(data)[(0) + 3]); };
  { (W[1]) = ((unsigned int)(data)[(4)] << 24) | ((unsigned int)(data)[(4) + 1] << 16) | ((unsigned int)(data)[(4) + 2] << 8) | ((unsigned int)(data)[(4) + 3]); };
  { (W[2]) = ((unsigned int)(data)[(8)] << 24) | ((unsigned int)(data)[(8) + 1] << 16) | ((unsigned int)(data)[(8) + 2] << 8) | ((unsigned int)(data)[(8) + 3]); };
  { (W[3]) = ((unsigned int)(data)[(12)] << 24) | ((unsigned int)(data)[(12) + 1] << 16) | ((unsigned int)(data)[(12) + 2] << 8) | ((unsigned int)(data)[(12) + 3]); };
  { (W[4]) = ((unsigned int)(data)[(16)] << 24) | ((unsigned int)(data)[(16) + 1] << 16) | ((unsigned int)(data)[(16) + 2] << 8) | ((unsigned int)(data)[(16) + 3]); };
  { (W[5]) = ((unsigned int)(data)[(20)] << 24) | ((unsigned int)(data)[(20) + 1] << 16) | ((unsigned int)(data)[(20) + 2] << 8) | ((unsigned int)(data)[(20) + 3]); };
  { (W[6]) = ((unsigned int)(data)[(24)] << 24) | ((unsigned int)(data)[(24) + 1] << 16) | ((unsigned int)(data)[(24) + 2] << 8) | ((unsigned int)(data)[(24) + 3]); };
  { (W[7]) = ((unsigned int)(data)[(28)] << 24) | ((unsigned int)(data)[(28) + 1] << 16) | ((unsigned int)(data)[(28) + 2] << 8) | ((unsigned int)(data)[(28) + 3]); };
  { (W[8]) = ((unsigned int)(data)[(32)] << 24) | ((unsigned int)(data)[(32) + 1] << 16) | ((unsigned int)(data)[(32) + 2] << 8) | ((unsigned int)(data)[(32) + 3]); };
  { (W[9]) = ((unsigned int)(data)[(36)] << 24) | ((unsigned int)(data)[(36) + 1] << 16) | ((unsigned int)(data)[(36) + 2] << 8) | ((unsigned int)(data)[(36) + 3]); };
  { (W[10]) = ((unsigned int)(data)[(40)] << 24) | ((unsigned int)(data)[(40) + 1] << 16) | ((unsigned int)(data)[(40) + 2] << 8) | ((unsigned int)(data)[(40) + 3]); };
  { (W[11]) = ((unsigned int)(data)[(44)] << 24) | ((unsigned int)(data)[(44) + 1] << 16) | ((unsigned int)(data)[(44) + 2] << 8) | ((unsigned int)(data)[(44) + 3]); };
  { (W[12]) = ((unsigned int)(data)[(48)] << 24) | ((unsigned int)(data)[(48) + 1] << 16) | ((unsigned int)(data)[(48) + 2] << 8) | ((unsigned int)(data)[(48) + 3]); };
  { (W[13]) = ((unsigned int)(data)[(52)] << 24) | ((unsigned int)(data)[(52) + 1] << 16) | ((unsigned int)(data)[(52) + 2] << 8) | ((unsigned int)(data)[(52) + 3]); };
  { (W[14]) = ((unsigned int)(data)[(56)] << 24) | ((unsigned int)(data)[(56) + 1] << 16) | ((unsigned int)(data)[(56) + 2] << 8) | ((unsigned int)(data)[(56) + 3]); };
  { (W[15]) = ((unsigned int)(data)[(60)] << 24) | ((unsigned int)(data)[(60) + 1] << 16) | ((unsigned int)(data)[(60) + 2] << 8) | ((unsigned int)(data)[(60) + 3]); };
  A = state[0];
  B = state[1];
  C = state[2];
  D = state[3];
  E = state[4];
  {
    E += ((A << 5) | ((A & 0xFFFFFFFF) >> (32 - 5))) + (D ^ (B & (C ^ D))) + 0x5A827999 + W[0];
    B = ((B << 30) | ((B & 0xFFFFFFFF) >> (32 - 30)));
  };
  {
    D += ((E << 5) | ((E & 0xFFFFFFFF) >> (32 - 5))) + (C ^ (A & (B ^ C))) + 0x5A827999 + W[1];
    A = ((A << 30) | ((A & 0xFFFFFFFF) >> (32 - 30)));
  };
  {
    C += ((D << 5) | ((D & 0xFFFFFFFF) >> (32 - 5))) + (B ^ (E & (A ^ B))) + 0x5A827999 + W[2];
    E = ((E << 30) | ((E & 0xFFFFFFFF) >> (32 - 30)));
  };
  {
    B += ((C << 5) | ((C & 0xFFFFFFFF) >> (32 - 5))) + (A ^ (D & (E ^ A))) + 0x5A827999 + W[3];
    D = ((D << 30) | ((D & 0xFFFFFFFF) >> (32 - 30)));
  };
  {
    A += ((B << 5) | ((B & 0xFFFFFFFF) >> (32 - 5))) + (E ^ (C & (D ^ E))) + 0x5A827999 + W[4];
    C = ((C << 30) | ((C & 0xFFFFFFFF) >> (32 - 30)));
  };
  {
    E += ((A << 5) | ((A & 0xFFFFFFFF) >> (32 - 5))) + (D ^ (B & (C ^ D))) + 0x5A827999 + W[5];
    B = ((B << 30) | ((B & 0xFFFFFFFF) >> (32 - 30)));
  };
  {
    D += ((E << 5) | ((E & 0xFFFFFFFF) >> (32 - 5))) + (C ^ (A & (B ^ C))) + 0x5A827999 + W[6];
    A = ((A << 30) | ((A & 0xFFFFFFFF) >> (32 - 30)));
  };
  {
    C += ((D << 5) | ((D & 0xFFFFFFFF) >> (32 - 5))) + (B ^ (E & (A ^ B))) + 0x5A827999 + W[7];
    E = ((E << 30) | ((E & 0xFFFFFFFF) >> (32 - 30)));
  };
  {
    B += ((C << 5) | ((C & 0xFFFFFFFF) >> (32 - 5))) + (A ^ (D & (E ^ A))) + 0x5A827999 + W[8];
    D = ((D << 30) | ((D & 0xFFFFFFFF) >> (32 - 30)));
  };
  {
    A += ((B << 5) | ((B & 0xFFFFFFFF) >> (32 - 5))) + (E ^ (C & (D ^ E))) + 0x5A827999 + W[9];
    C = ((C << 30) | ((C & 0xFFFFFFFF) >> (32 - 30)));
  };
  {
    E += ((A << 5) | ((A & 0xFFFFFFFF) >> (32 - 5))) + (D ^ (B & (C ^ D))) + 0x5A827999 + W[10];
    B = ((B << 30) | ((B & 0xFFFFFFFF) >> (32 - 30)));
  };
  {
    D += ((E << 5) | ((E & 0xFFFFFFFF) >> (32 - 5))) + (C ^ (A & (B ^ C))) + 0x5A827999 + W[11];
    A = ((A << 30) | ((A & 0xFFFFFFFF) >> (32 - 30)));
  };
  {
    C += ((D << 5) | ((D & 0xFFFFFFFF) >> (32 - 5))) + (B ^ (E & (A ^ B))) + 0x5A827999 + W[12];
    E = ((E << 30) | ((E & 0xFFFFFFFF) >> (32 - 30)));
  };
  {
    B += ((C << 5) | ((C & 0xFFFFFFFF) >> (32 - 5))) + (A ^ (D & (E ^ A))) + 0x5A827999 + W[13];
    D = ((D << 30) | ((D & 0xFFFFFFFF) >> (32 - 30)));
  };
  {
    A += ((B << 5) | ((B & 0xFFFFFFFF) >> (32 - 5))) + (E ^ (C & (D ^ E))) + 0x5A827999 + W[14];
    C = ((C << 30) | ((C & 0xFFFFFFFF) >> (32 - 30)));
  };
  {
    E += ((A << 5) | ((A & 0xFFFFFFFF) >> (32 - 5))) + (D ^ (B & (C ^ D))) + 0x5A827999 + W[15];
    B = ((B << 30) | ((B & 0xFFFFFFFF) >> (32 - 30)));
  };
  {
    D += ((E << 5) | ((E & 0xFFFFFFFF) >> (32 - 5))) + (C ^ (A & (B ^ C))) + 0x5A827999 + (temp = W[(16 - 3) & 0x0F] ^ W[(16 - 8) & 0x0F] ^ W[(16 - 14) & 0x0F] ^ W[16 & 0x0F], (W[16 & 0x0F] = ((temp << 1) | ((temp & 0xFFFFFFFF) >> (32 - 1)))));
    A = ((A << 30) | ((A & 0xFFFFFFFF) >> (32 - 30)));
  };
  {
    C += ((D << 5) | ((D & 0xFFFFFFFF) >> (32 - 5))) + (B ^ (E & (A ^ B))) + 0x5A827999 + (temp = W[(17 - 3) & 0x0F] ^ W[(17 - 8) & 0x0F] ^ W[(17 - 14) & 0x0F] ^ W[17 & 0x0F], (W[17 & 0x0F] = ((temp << 1) | ((temp & 0xFFFFFFFF) >> (32 - 1)))));
    E = ((E << 30) | ((E & 0xFFFFFFFF) >> (32 - 30)));
  };
  {
    B += ((C << 5) | ((C & 0xFFFFFFFF) >> (32 - 5))) + (A ^ (D & (E ^ A))) + 0x5A827999 + (temp = W[(18 - 3) & 0x0F] ^ W[(18 - 8) & 0x0F] ^ W[(18 - 14) & 0x0F] ^ W[18 & 0x0F], (W[18 & 0x0F] = ((temp << 1) | ((temp & 0xFFFFFFFF) >> (32 - 1)))));
    D = ((D << 30) | ((D & 0xFFFFFFFF) >> (32 - 30)));
  };
  {
    A += ((B << 5) | ((B & 0xFFFFFFFF) >> (32 - 5))) + (E ^ (C & (D ^ E))) + 0x5A827999 + (temp = W[(19 - 3) & 0x0F] ^ W[(19 - 8) & 0x0F] ^ W[(19 - 14) & 0x0F] ^ W[19 & 0x0F], (W[19 & 0x0F] = ((temp << 1) | ((temp & 0xFFFFFFFF) >> (32 - 1)))));
    C = ((C << 30) | ((C & 0xFFFFFFFF) >> (32 - 30)));
  };
  {
    E += ((A << 5) | ((A & 0xFFFFFFFF) >> (32 - 5))) + (B ^ C ^ D) + 0x6ED9EBA1 + (temp = W[(20 - 3) & 0x0F] ^ W[(20 - 8) & 0x0F] ^ W[(20 - 14) & 0x0F] ^ W[20 & 0x0F], (W[20 & 0x0F] = ((temp << 1) | ((temp & 0xFFFFFFFF) >> (32 - 1)))));
    B = ((B << 30) | ((B & 0xFFFFFFFF) >> (32 - 30)));
  };
  {
    D += ((E << 5) | ((E & 0xFFFFFFFF) >> (32 - 5))) + (A ^ B ^ C) + 0x6ED9EBA1 + (temp = W[(21 - 3) & 0x0F] ^ W[(21 - 8) & 0x0F] ^ W[(21 - 14) & 0x0F] ^ W[21 & 0x0F], (W[21 & 0x0F] = ((temp << 1) | ((temp & 0xFFFFFFFF) >> (32 - 1)))));
    A = ((A << 30) | ((A & 0xFFFFFFFF) >> (32 - 30)));
  };
  {
    C += ((D << 5) | ((D & 0xFFFFFFFF) >> (32 - 5))) + (E ^ A ^ B) + 0x6ED9EBA1 + (temp = W[(22 - 3) & 0x0F] ^ W[(22 - 8) & 0x0F] ^ W[(22 - 14) & 0x0F] ^ W[22 & 0x0F], (W[22 & 0x0F] = ((temp << 1) | ((temp & 0xFFFFFFFF) >> (32 - 1)))));
    E = ((E << 30) | ((E & 0xFFFFFFFF) >> (32 - 30)));
  };
  {
    B += ((C << 5) | ((C & 0xFFFFFFFF) >> (32 - 5))) + (D ^ E ^ A) + 0x6ED9EBA1 + (temp = W[(23 - 3) & 0x0F] ^ W[(23 - 8) & 0x0F] ^ W[(23 - 14) & 0x0F] ^ W[23 & 0x0F], (W[23 & 0x0F] = ((temp << 1) | ((temp & 0xFFFFFFFF) >> (32 - 1)))));
    D = ((D << 30) | ((D & 0xFFFFFFFF) >> (32 - 30)));
  };
  {
    A += ((B << 5) | ((B & 0xFFFFFFFF) >> (32 - 5))) + (C ^ D ^ E) + 0x6ED9EBA1 + (temp = W[(24 - 3) & 0x0F] ^ W[(24 - 8) & 0x0F] ^ W[(24 - 14) & 0x0F] ^ W[24 & 0x0F], (W[24 & 0x0F] = ((temp << 1) | ((temp & 0xFFFFFFFF) >> (32 - 1)))));
    C = ((C << 30) | ((C & 0xFFFFFFFF) >> (32 - 30)));
  };
  {
    E += ((A << 5) | ((A & 0xFFFFFFFF) >> (32 - 5))) + (B ^ C ^ D) + 0x6ED9EBA1 + (temp = W[(25 - 3) & 0x0F] ^ W[(25 - 8) & 0x0F] ^ W[(25 - 14) & 0x0F] ^ W[25 & 0x0F], (W[25 & 0x0F] = ((temp << 1) | ((temp & 0xFFFFFFFF) >> (32 - 1)))));
    B = ((B << 30) | ((B & 0xFFFFFFFF) >> (32 - 30)));
  };
  {
    D += ((E << 5) | ((E & 0xFFFFFFFF) >> (32 - 5))) + (A ^ B ^ C) + 0x6ED9EBA1 + (temp = W[(26 - 3) & 0x0F] ^ W[(26 - 8) & 0x0F] ^ W[(26 - 14) & 0x0F] ^ W[26 & 0x0F], (W[26 & 0x0F] = ((temp << 1) | ((temp & 0xFFFFFFFF) >> (32 - 1)))));
    A = ((A << 30) | ((A & 0xFFFFFFFF) >> (32 - 30)));
  };
  {
    C += ((D << 5) | ((D & 0xFFFFFFFF) >> (32 - 5))) + (E ^ A ^ B) + 0x6ED9EBA1 + (temp = W[(27 - 3) & 0x0F] ^ W[(27 - 8) & 0x0F] ^ W[(27 - 14) & 0x0F] ^ W[27 & 0x0F], (W[27 & 0x0F] = ((temp << 1) | ((temp & 0xFFFFFFFF) >> (32 - 1)))));
    E = ((E << 30) | ((E & 0xFFFFFFFF) >> (32 - 30)));
  };
  {
    B += ((C << 5) | ((C & 0xFFFFFFFF) >> (32 - 5))) + (D ^ E ^ A) + 0x6ED9EBA1 + (temp = W[(28 - 3) & 0x0F] ^ W[(28 - 8) & 0x0F] ^ W[(28 - 14) & 0x0F] ^ W[28 & 0x0F], (W[28 & 0x0F] = ((temp << 1) | ((temp & 0xFFFFFFFF) >> (32 - 1)))));
    D = ((D << 30) | ((D & 0xFFFFFFFF) >> (32 - 30)));
  };
  {
    A += ((B << 5) | ((B & 0xFFFFFFFF) >> (32 - 5))) + (C ^ D ^ E) + 0x6ED9EBA1 + (temp = W[(29 - 3) & 0x0F] ^ W[(29 - 8) & 0x0F] ^ W[(29 - 14) & 0x0F] ^ W[29 & 0x0F], (W[29 & 0x0F] = ((temp << 1) | ((temp & 0xFFFFFFFF) >> (32 - 1)))));
    C = ((C << 30) | ((C & 0xFFFFFFFF) >> (32 - 30)));
  };
  {
    E += ((A << 5) | ((A & 0xFFFFFFFF) >> (32 - 5))) + (B ^ C ^ D) + 0x6ED9EBA1 + (temp = W[(30 - 3) & 0x0F] ^ W[(30 - 8) & 0x0F] ^ W[(30 - 14) & 0x0F] ^ W[30 & 0x0F], (W[30 & 0x0F] = ((temp << 1) | ((temp & 0xFFFFFFFF) >> (32 - 1)))));
    B = ((B << 30) | ((B & 0xFFFFFFFF) >> (32 - 30)));
  };
  {
    D += ((E << 5) | ((E & 0xFFFFFFFF) >> (32 - 5))) + (A ^ B ^ C) + 0x6ED9EBA1 + (temp = W[(31 - 3) & 0x0F] ^ W[(31 - 8) & 0x0F] ^ W[(31 - 14) & 0x0F] ^ W[31 & 0x0F], (W[31 & 0x0F] = ((temp << 1) | ((temp & 0xFFFFFFFF) >> (32 - 1)))));
    A = ((A << 30) | ((A & 0xFFFFFFFF) >> (32 - 30)));
  };
  {
    C += ((D << 5) | ((D & 0xFFFFFFFF) >> (32 - 5))) + (E ^ A ^ B) + 0x6ED9EBA1 + (temp = W[(32 - 3) & 0x0F] ^ W[(32 - 8) & 0x0F] ^ W[(32 - 14) & 0x0F] ^ W[32 & 0x0F], (W[32 & 0x0F] = ((temp << 1) | ((temp & 0xFFFFFFFF) >> (32 - 1)))));
    E = ((E << 30) | ((E & 0xFFFFFFFF) >> (32 - 30)));
  };
  {
    B += ((C << 5) | ((C & 0xFFFFFFFF) >> (32 - 5))) + (D ^ E ^ A) + 0x6ED9EBA1 + (temp = W[(33 - 3) & 0x0F] ^ W[(33 - 8) & 0x0F] ^ W[(33 - 14) & 0x0F] ^ W[33 & 0x0F], (W[33 & 0x0F] = ((temp << 1) | ((temp & 0xFFFFFFFF) >> (32 - 1)))));
    D = ((D << 30) | ((D & 0xFFFFFFFF) >> (32 - 30)));
  };
  {
    A += ((B << 5) | ((B & 0xFFFFFFFF) >> (32 - 5))) + (C ^ D ^ E) + 0x6ED9EBA1 + (temp = W[(34 - 3) & 0x0F] ^ W[(34 - 8) & 0x0F] ^ W[(34 - 14) & 0x0F] ^ W[34 & 0x0F], (W[34 & 0x0F] = ((temp << 1) | ((temp & 0xFFFFFFFF) >> (32 - 1)))));
    C = ((C << 30) | ((C & 0xFFFFFFFF) >> (32 - 30)));
  };
  {
    E += ((A << 5) | ((A & 0xFFFFFFFF) >> (32 - 5))) + (B ^ C ^ D) + 0x6ED9EBA1 + (temp = W[(35 - 3) & 0x0F] ^ W[(35 - 8) & 0x0F] ^ W[(35 - 14) & 0x0F] ^ W[35 & 0x0F], (W[35 & 0x0F] = ((temp << 1) | ((temp & 0xFFFFFFFF) >> (32 - 1)))));
    B = ((B << 30) | ((B & 0xFFFFFFFF) >> (32 - 30)));
  };
  {
    D += ((E << 5) | ((E & 0xFFFFFFFF) >> (32 - 5))) + (A ^ B ^ C) + 0x6ED9EBA1 + (temp = W[(36 - 3) & 0x0F] ^ W[(36 - 8) & 0x0F] ^ W[(36 - 14) & 0x0F] ^ W[36 & 0x0F], (W[36 & 0x0F] = ((temp << 1) | ((temp & 0xFFFFFFFF) >> (32 - 1)))));
    A = ((A << 30) | ((A & 0xFFFFFFFF) >> (32 - 30)));
  };
  {
    C += ((D << 5) | ((D & 0xFFFFFFFF) >> (32 - 5))) + (E ^ A ^ B) + 0x6ED9EBA1 + (temp = W[(37 - 3) & 0x0F] ^ W[(37 - 8) & 0x0F] ^ W[(37 - 14) & 0x0F] ^ W[37 & 0x0F], (W[37 & 0x0F] = ((temp << 1) | ((temp & 0xFFFFFFFF) >> (32 - 1)))));
    E = ((E << 30) | ((E & 0xFFFFFFFF) >> (32 - 30)));
  };
  {
    B += ((C << 5) | ((C & 0xFFFFFFFF) >> (32 - 5))) + (D ^ E ^ A) + 0x6ED9EBA1 + (temp = W[(38 - 3) & 0x0F] ^ W[(38 - 8) & 0x0F] ^ W[(38 - 14) & 0x0F] ^ W[38 & 0x0F], (W[38 & 0x0F] = ((temp << 1) | ((temp & 0xFFFFFFFF) >> (32 - 1)))));
    D = ((D << 30) | ((D & 0xFFFFFFFF) >> (32 - 30)));
  };
  {
    A += ((B << 5) | ((B & 0xFFFFFFFF) >> (32 - 5))) + (C ^ D ^ E) + 0x6ED9EBA1 + (temp = W[(39 - 3) & 0x0F] ^ W[(39 - 8) & 0x0F] ^ W[(39 - 14) & 0x0F] ^ W[39 & 0x0F], (W[39 & 0x0F] = ((temp << 1) | ((temp & 0xFFFFFFFF) >> (32 - 1)))));
    C = ((C << 30) | ((C & 0xFFFFFFFF) >> (32 - 30)));
  };
  {
    E += ((A << 5) | ((A & 0xFFFFFFFF) >> (32 - 5))) + ((B & C) | (D & (B | C))) + 0x8F1BBCDC + (temp = W[(40 - 3) & 0x0F] ^ W[(40 - 8) & 0x0F] ^ W[(40 - 14) & 0x0F] ^ W[40 & 0x0F], (W[40 & 0x0F] = ((temp << 1) | ((temp & 0xFFFFFFFF) >> (32 - 1)))));
    B = ((B << 30) | ((B & 0xFFFFFFFF) >> (32 - 30)));
  };
  {
    D += ((E << 5) | ((E & 0xFFFFFFFF) >> (32 - 5))) + ((A & B) | (C & (A | B))) + 0x8F1BBCDC + (temp = W[(41 - 3) & 0x0F] ^ W[(41 - 8) & 0x0F] ^ W[(41 - 14) & 0x0F] ^ W[41 & 0x0F], (W[41 & 0x0F] = ((temp << 1) | ((temp & 0xFFFFFFFF) >> (32 - 1)))));
    A = ((A << 30) | ((A & 0xFFFFFFFF) >> (32 - 30)));
  };
  {
    C += ((D << 5) | ((D & 0xFFFFFFFF) >> (32 - 5))) + ((E & A) | (B & (E | A))) + 0x8F1BBCDC + (temp = W[(42 - 3) & 0x0F] ^ W[(42 - 8) & 0x0F] ^ W[(42 - 14) & 0x0F] ^ W[42 & 0x0F], (W[42 & 0x0F] = ((temp << 1) | ((temp & 0xFFFFFFFF) >> (32 - 1)))));
    E = ((E << 30) | ((E & 0xFFFFFFFF) >> (32 - 30)));
  };
  {
    B += ((C << 5) | ((C & 0xFFFFFFFF) >> (32 - 5))) + ((D & E) | (A & (D | E))) + 0x8F1BBCDC + (temp = W[(43 - 3) & 0x0F] ^ W[(43 - 8) & 0x0F] ^ W[(43 - 14) & 0x0F] ^ W[43 & 0x0F], (W[43 & 0x0F] = ((temp << 1) | ((temp & 0xFFFFFFFF) >> (32 - 1)))));
    D = ((D << 30) | ((D & 0xFFFFFFFF) >> (32 - 30)));
  };
  {
    A += ((B << 5) | ((B & 0xFFFFFFFF) >> (32 - 5))) + ((C & D) | (E & (C | D))) + 0x8F1BBCDC + (temp = W[(44 - 3) & 0x0F] ^ W[(44 - 8) & 0x0F] ^ W[(44 - 14) & 0x0F] ^ W[44 & 0x0F], (W[44 & 0x0F] = ((temp << 1) | ((temp & 0xFFFFFFFF) >> (32 - 1)))));
    C = ((C << 30) | ((C & 0xFFFFFFFF) >> (32 - 30)));
  };
  {
    E += ((A << 5) | ((A & 0xFFFFFFFF) >> (32 - 5))) + ((B & C) | (D & (B | C))) + 0x8F1BBCDC + (temp = W[(45 - 3) & 0x0F] ^ W[(45 - 8) & 0x0F] ^ W[(45 - 14) & 0x0F] ^ W[45 & 0x0F], (W[45 & 0x0F] = ((temp << 1) | ((temp & 0xFFFFFFFF) >> (32 - 1)))));
    B = ((B << 30) | ((B & 0xFFFFFFFF) >> (32 - 30)));
  };
  {
    D += ((E << 5) | ((E & 0xFFFFFFFF) >> (32 - 5))) + ((A & B) | (C & (A | B))) + 0x8F1BBCDC + (temp = W[(46 - 3) & 0x0F] ^ W[(46 - 8) & 0x0F] ^ W[(46 - 14) & 0x0F] ^ W[46 & 0x0F], (W[46 & 0x0F] = ((temp << 1) | ((temp & 0xFFFFFFFF) >> (32 - 1)))));
    A = ((A << 30) | ((A & 0xFFFFFFFF) >> (32 - 30)));
  };
  {
    C += ((D << 5) | ((D & 0xFFFFFFFF) >> (32 - 5))) + ((E & A) | (B & (E | A))) + 0x8F1BBCDC + (temp = W[(47 - 3) & 0x0F] ^ W[(47 - 8) & 0x0F] ^ W[(47 - 14) & 0x0F] ^ W[47 & 0x0F], (W[47 & 0x0F] = ((temp << 1) | ((temp & 0xFFFFFFFF) >> (32 - 1)))));
    E = ((E << 30) | ((E & 0xFFFFFFFF) >> (32 - 30)));
  };
  {
    B += ((C << 5) | ((C & 0xFFFFFFFF) >> (32 - 5))) + ((D & E) | (A & (D | E))) + 0x8F1BBCDC + (temp = W[(48 - 3) & 0x0F] ^ W[(48 - 8) & 0x0F] ^ W[(48 - 14) & 0x0F] ^ W[48 & 0x0F], (W[48 & 0x0F] = ((temp << 1) | ((temp & 0xFFFFFFFF) >> (32 - 1)))));
    D = ((D << 30) | ((D & 0xFFFFFFFF) >> (32 - 30)));
  };
  {
    A += ((B << 5) | ((B & 0xFFFFFFFF) >> (32 - 5))) + ((C & D) | (E & (C | D))) + 0x8F1BBCDC + (temp = W[(49 - 3) & 0x0F] ^ W[(49 - 8) & 0x0F] ^ W[(49 - 14) & 0x0F] ^ W[49 & 0x0F], (W[49 & 0x0F] = ((temp << 1) | ((temp & 0xFFFFFFFF) >> (32 - 1)))));
    C = ((C << 30) | ((C & 0xFFFFFFFF) >> (32 - 30)));
  };
  {
    E += ((A << 5) | ((A & 0xFFFFFFFF) >> (32 - 5))) + ((B & C) | (D & (B | C))) + 0x8F1BBCDC + (temp = W[(50 - 3) & 0x0F] ^ W[(50 - 8) & 0x0F] ^ W[(50 - 14) & 0x0F] ^ W[50 & 0x0F], (W[50 & 0x0F] = ((temp << 1) | ((temp & 0xFFFFFFFF) >> (32 - 1)))));
    B = ((B << 30) | ((B & 0xFFFFFFFF) >> (32 - 30)));
  };
  {
    D += ((E << 5) | ((E & 0xFFFFFFFF) >> (32 - 5))) + ((A & B) | (C & (A | B))) + 0x8F1BBCDC + (temp = W[(51 - 3) & 0x0F] ^ W[(51 - 8) & 0x0F] ^ W[(51 - 14) & 0x0F] ^ W[51 & 0x0F], (W[51 & 0x0F] = ((temp << 1) | ((temp & 0xFFFFFFFF) >> (32 - 1)))));
    A = ((A << 30) | ((A & 0xFFFFFFFF) >> (32 - 30)));
  };
  {
    C += ((D << 5) | ((D & 0xFFFFFFFF) >> (32 - 5))) + ((E & A) | (B & (E | A))) + 0x8F1BBCDC + (temp = W[(52 - 3) & 0x0F] ^ W[(52 - 8) & 0x0F] ^ W[(52 - 14) & 0x0F] ^ W[52 & 0x0F], (W[52 & 0x0F] = ((temp << 1) | ((temp & 0xFFFFFFFF) >> (32 - 1)))));
    E = ((E << 30) | ((E & 0xFFFFFFFF) >> (32 - 30)));
  };
  {
    B += ((C << 5) | ((C & 0xFFFFFFFF) >> (32 - 5))) + ((D & E) | (A & (D | E))) + 0x8F1BBCDC + (temp = W[(53 - 3) & 0x0F] ^ W[(53 - 8) & 0x0F] ^ W[(53 - 14) & 0x0F] ^ W[53 & 0x0F], (W[53 & 0x0F] = ((temp << 1) | ((temp & 0xFFFFFFFF) >> (32 - 1)))));
    D = ((D << 30) | ((D & 0xFFFFFFFF) >> (32 - 30)));
  };
  {
    A += ((B << 5) | ((B & 0xFFFFFFFF) >> (32 - 5))) + ((C & D) | (E & (C | D))) + 0x8F1BBCDC + (temp = W[(54 - 3) & 0x0F] ^ W[(54 - 8) & 0x0F] ^ W[(54 - 14) & 0x0F] ^ W[54 & 0x0F], (W[54 & 0x0F] = ((temp << 1) | ((temp & 0xFFFFFFFF) >> (32 - 1)))));
    C = ((C << 30) | ((C & 0xFFFFFFFF) >> (32 - 30)));
  };
  {
    E += ((A << 5) | ((A & 0xFFFFFFFF) >> (32 - 5))) + ((B & C) | (D & (B | C))) + 0x8F1BBCDC + (temp = W[(55 - 3) & 0x0F] ^ W[(55 - 8) & 0x0F] ^ W[(55 - 14) & 0x0F] ^ W[55 & 0x0F], (W[55 & 0x0F] = ((temp << 1) | ((temp & 0xFFFFFFFF) >> (32 - 1)))));
    B = ((B << 30) | ((B & 0xFFFFFFFF) >> (32 - 30)));
  };
  {
    D += ((E << 5) | ((E & 0xFFFFFFFF) >> (32 - 5))) + ((A & B) | (C & (A | B))) + 0x8F1BBCDC + (temp = W[(56 - 3) & 0x0F] ^ W[(56 - 8) & 0x0F] ^ W[(56 - 14) & 0x0F] ^ W[56 & 0x0F], (W[56 & 0x0F] = ((temp << 1) | ((temp & 0xFFFFFFFF) >> (32 - 1)))));
    A = ((A << 30) | ((A & 0xFFFFFFFF) >> (32 - 30)));
  };
  {
    C += ((D << 5) | ((D & 0xFFFFFFFF) >> (32 - 5))) + ((E & A) | (B & (E | A))) + 0x8F1BBCDC + (temp = W[(57 - 3) & 0x0F] ^ W[(57 - 8) & 0x0F] ^ W[(57 - 14) & 0x0F] ^ W[57 & 0x0F], (W[57 & 0x0F] = ((temp << 1) | ((temp & 0xFFFFFFFF) >> (32 - 1)))));
    E = ((E << 30) | ((E & 0xFFFFFFFF) >> (32 - 30)));
  };
  {
    B += ((C << 5) | ((C & 0xFFFFFFFF) >> (32 - 5))) + ((D & E) | (A & (D | E))) + 0x8F1BBCDC + (temp = W[(58 - 3) & 0x0F] ^ W[(58 - 8) & 0x0F] ^ W[(58 - 14) & 0x0F] ^ W[58 & 0x0F], (W[58 & 0x0F] = ((temp << 1) | ((temp & 0xFFFFFFFF) >> (32 - 1)))));
    D = ((D << 30) | ((D & 0xFFFFFFFF) >> (32 - 30)));
  };
  {
    A += ((B << 5) | ((B & 0xFFFFFFFF) >> (32 - 5))) + ((C & D) | (E & (C | D))) + 0x8F1BBCDC + (temp = W[(59 - 3) & 0x0F] ^ W[(59 - 8) & 0x0F] ^ W[(59 - 14) & 0x0F] ^ W[59 & 0x0F], (W[59 & 0x0F] = ((temp << 1) | ((temp & 0xFFFFFFFF) >> (32 - 1)))));
    C = ((C << 30) | ((C & 0xFFFFFFFF) >> (32 - 30)));
  };
  {
    E += ((A << 5) | ((A & 0xFFFFFFFF) >> (32 - 5))) + (B ^ C ^ D) + 0xCA62C1D6 + (temp = W[(60 - 3) & 0x0F] ^ W[(60 - 8) & 0x0F] ^ W[(60 - 14) & 0x0F] ^ W[60 & 0x0F], (W[60 & 0x0F] = ((temp << 1) | ((temp & 0xFFFFFFFF) >> (32 - 1)))));
    B = ((B << 30) | ((B & 0xFFFFFFFF) >> (32 - 30)));
  };
  {
    D += ((E << 5) | ((E & 0xFFFFFFFF) >> (32 - 5))) + (A ^ B ^ C) + 0xCA62C1D6 + (temp = W[(61 - 3) & 0x0F] ^ W[(61 - 8) & 0x0F] ^ W[(61 - 14) & 0x0F] ^ W[61 & 0x0F], (W[61 & 0x0F] = ((temp << 1) | ((temp & 0xFFFFFFFF) >> (32 - 1)))));
    A = ((A << 30) | ((A & 0xFFFFFFFF) >> (32 - 30)));
  };
  {
    C += ((D << 5) | ((D & 0xFFFFFFFF) >> (32 - 5))) + (E ^ A ^ B) + 0xCA62C1D6 + (temp = W[(62 - 3) & 0x0F] ^ W[(62 - 8) & 0x0F] ^ W[(62 - 14) & 0x0F] ^ W[62 & 0x0F], (W[62 & 0x0F] = ((temp << 1) | ((temp & 0xFFFFFFFF) >> (32 - 1)))));
    E = ((E << 30) | ((E & 0xFFFFFFFF) >> (32 - 30)));
  };
  {
    B += ((C << 5) | ((C & 0xFFFFFFFF) >> (32 - 5))) + (D ^ E ^ A) + 0xCA62C1D6 + (temp = W[(63 - 3) & 0x0F] ^ W[(63 - 8) & 0x0F] ^ W[(63 - 14) & 0x0F] ^ W[63 & 0x0F], (W[63 & 0x0F] = ((temp << 1) | ((temp & 0xFFFFFFFF) >> (32 - 1)))));
    D = ((D << 30) | ((D & 0xFFFFFFFF) >> (32 - 30)));
  };
  {
    A += ((B << 5) | ((B & 0xFFFFFFFF) >> (32 - 5))) + (C ^ D ^ E) + 0xCA62C1D6 + (temp = W[(64 - 3) & 0x0F] ^ W[(64 - 8) & 0x0F] ^ W[(64 - 14) & 0x0F] ^ W[64 & 0x0F], (W[64 & 0x0F] = ((temp << 1) | ((temp & 0xFFFFFFFF) >> (32 - 1)))));
    C = ((C << 30) | ((C & 0xFFFFFFFF) >> (32 - 30)));
  };
  {
    E += ((A << 5) | ((A & 0xFFFFFFFF) >> (32 - 5))) + (B ^ C ^ D) + 0xCA62C1D6 + (temp = W[(65 - 3) & 0x0F] ^ W[(65 - 8) & 0x0F] ^ W[(65 - 14) & 0x0F] ^ W[65 & 0x0F], (W[65 & 0x0F] = ((temp << 1) | ((temp & 0xFFFFFFFF) >> (32 - 1)))));
    B = ((B << 30) | ((B & 0xFFFFFFFF) >> (32 - 30)));
  };
  {
    D += ((E << 5) | ((E & 0xFFFFFFFF) >> (32 - 5))) + (A ^ B ^ C) + 0xCA62C1D6 + (temp = W[(66 - 3) & 0x0F] ^ W[(66 - 8) & 0x0F] ^ W[(66 - 14) & 0x0F] ^ W[66 & 0x0F], (W[66 & 0x0F] = ((temp << 1) | ((temp & 0xFFFFFFFF) >> (32 - 1)))));
    A = ((A << 30) | ((A & 0xFFFFFFFF) >> (32 - 30)));
  };
  {
    C += ((D << 5) | ((D & 0xFFFFFFFF) >> (32 - 5))) + (E ^ A ^ B) + 0xCA62C1D6 + (temp = W[(67 - 3) & 0x0F] ^ W[(67 - 8) & 0x0F] ^ W[(67 - 14) & 0x0F] ^ W[67 & 0x0F], (W[67 & 0x0F] = ((temp << 1) | ((temp & 0xFFFFFFFF) >> (32 - 1)))));
    E = ((E << 30) | ((E & 0xFFFFFFFF) >> (32 - 30)));
  };
  {
    B += ((C << 5) | ((C & 0xFFFFFFFF) >> (32 - 5))) + (D ^ E ^ A) + 0xCA62C1D6 + (temp = W[(68 - 3) & 0x0F] ^ W[(68 - 8) & 0x0F] ^ W[(68 - 14) & 0x0F] ^ W[68 & 0x0F], (W[68 & 0x0F] = ((temp << 1) | ((temp & 0xFFFFFFFF) >> (32 - 1)))));
    D = ((D << 30) | ((D & 0xFFFFFFFF) >> (32 - 30)));
  };
  {
    A += ((B << 5) | ((B & 0xFFFFFFFF) >> (32 - 5))) + (C ^ D ^ E) + 0xCA62C1D6 + (temp = W[(69 - 3) & 0x0F] ^ W[(69 - 8) & 0x0F] ^ W[(69 - 14) & 0x0F] ^ W[69 & 0x0F], (W[69 & 0x0F] = ((temp << 1) | ((temp & 0xFFFFFFFF) >> (32 - 1)))));
    C = ((C << 30) | ((C & 0xFFFFFFFF) >> (32 - 30)));
  };
  {
    E += ((A << 5) | ((A & 0xFFFFFFFF) >> (32 - 5))) + (B ^ C ^ D) + 0xCA62C1D6 + (temp = W[(70 - 3) & 0x0F] ^ W[(70 - 8) & 0x0F] ^ W[(70 - 14) & 0x0F] ^ W[70 & 0x0F], (W[70 & 0x0F] = ((temp << 1) | ((temp & 0xFFFFFFFF) >> (32 - 1)))));
    B = ((B << 30) | ((B & 0xFFFFFFFF) >> (32 - 30)));
  };
  {
    D += ((E << 5) | ((E & 0xFFFFFFFF) >> (32 - 5))) + (A ^ B ^ C) + 0xCA62C1D6 + (temp = W[(71 - 3) & 0x0F] ^ W[(71 - 8) & 0x0F] ^ W[(71 - 14) & 0x0F] ^ W[71 & 0x0F], (W[71 & 0x0F] = ((temp << 1) | ((temp & 0xFFFFFFFF) >> (32 - 1)))));
    A = ((A << 30) | ((A & 0xFFFFFFFF) >> (32 - 30)));
  };
  {
    C += ((D << 5) | ((D & 0xFFFFFFFF) >> (32 - 5))) + (E ^ A ^ B) + 0xCA62C1D6 + (temp = W[(72 - 3) & 0x0F] ^ W[(72 - 8) & 0x0F] ^ W[(72 - 14) & 0x0F] ^ W[72 & 0x0F], (W[72 & 0x0F] = ((temp << 1) | ((temp & 0xFFFFFFFF) >> (32 - 1)))));
    E = ((E << 30) | ((E & 0xFFFFFFFF) >> (32 - 30)));
  };
  {
    B += ((C << 5) | ((C & 0xFFFFFFFF) >> (32 - 5))) + (D ^ E ^ A) + 0xCA62C1D6 + (temp = W[(73 - 3) & 0x0F] ^ W[(73 - 8) & 0x0F] ^ W[(73 - 14) & 0x0F] ^ W[73 & 0x0F], (W[73 & 0x0F] = ((temp << 1) | ((temp & 0xFFFFFFFF) >> (32 - 1)))));
    D = ((D << 30) | ((D & 0xFFFFFFFF) >> (32 - 30)));
  };
  {
    A += ((B << 5) | ((B & 0xFFFFFFFF) >> (32 - 5))) + (C ^ D ^ E) + 0xCA62C1D6 + (temp = W[(74 - 3) & 0x0F] ^ W[(74 - 8) & 0x0F] ^ W[(74 - 14) & 0x0F] ^ W[74 & 0x0F], (W[74 & 0x0F] = ((temp << 1) | ((temp & 0xFFFFFFFF) >> (32 - 1)))));
    C = ((C << 30) | ((C & 0xFFFFFFFF) >> (32 - 30)));
  };
  {
    E += ((A << 5) | ((A & 0xFFFFFFFF) >> (32 - 5))) + (B ^ C ^ D) + 0xCA62C1D6 + (temp = W[(75 - 3) & 0x0F] ^ W[(75 - 8) & 0x0F] ^ W[(75 - 14) & 0x0F] ^ W[75 & 0x0F], (W[75 & 0x0F] = ((temp << 1) | ((temp & 0xFFFFFFFF) >> (32 - 1)))));
    B = ((B << 30) | ((B & 0xFFFFFFFF) >> (32 - 30)));
  };
  {
    D += ((E << 5) | ((E & 0xFFFFFFFF) >> (32 - 5))) + (A ^ B ^ C) + 0xCA62C1D6 + (temp = W[(76 - 3) & 0x0F] ^ W[(76 - 8) & 0x0F] ^ W[(76 - 14) & 0x0F] ^ W[76 & 0x0F], (W[76 & 0x0F] = ((temp << 1) | ((temp & 0xFFFFFFFF) >> (32 - 1)))));
    A = ((A << 30) | ((A & 0xFFFFFFFF) >> (32 - 30)));
  };
  {
    C += ((D << 5) | ((D & 0xFFFFFFFF) >> (32 - 5))) + (E ^ A ^ B) + 0xCA62C1D6 + (temp = W[(77 - 3) & 0x0F] ^ W[(77 - 8) & 0x0F] ^ W[(77 - 14) & 0x0F] ^ W[77 & 0x0F], (W[77 & 0x0F] = ((temp << 1) | ((temp & 0xFFFFFFFF) >> (32 - 1)))));
    E = ((E << 30) | ((E & 0xFFFFFFFF) >> (32 - 30)));
  };
  {
    B += ((C << 5) | ((C & 0xFFFFFFFF) >> (32 - 5))) + (D ^ E ^ A) + 0xCA62C1D6 + (temp = W[(78 - 3) & 0x0F] ^ W[(78 - 8) & 0x0F] ^ W[(78 - 14) & 0x0F] ^ W[78 & 0x0F], (W[78 & 0x0F] = ((temp << 1) | ((temp & 0xFFFFFFFF) >> (32 - 1)))));
    D = ((D << 30) | ((D & 0xFFFFFFFF) >> (32 - 30)));
  };
  {
    A += ((B << 5) | ((B & 0xFFFFFFFF) >> (32 - 5))) + (C ^ D ^ E) + 0xCA62C1D6 + (temp = W[(79 - 3) & 0x0F] ^ W[(79 - 8) & 0x0F] ^ W[(79 - 14) & 0x0F] ^ W[79 & 0x0F], (W[79 & 0x0F] = ((temp << 1) | ((temp & 0xFFFFFFFF) >> (32 - 1)))));
    C = ((C << 30) | ((C & 0xFFFFFFFF) >> (32 - 30)));
  };
  state[0] += A;
  state[1] += B;
  state[2] += C;
  state[3] += D;
  state[4] += E;
}
```