$0x2145; BYTE $0xc4 // and r12d,r8d
LONG $0xf07b43c4; WORD $0x19e8 // rorx r13d,r8d,0x19
LONG $0xf07b43c4; WORD $0x0bf8 // rorx r15d,r8d,0xb
LONG $0x30048d42 // lea eax,[rax+r14*1]
LONG $0x231c8d47 // lea r11d,[r11+r12*1]
LONG $0xf23842c4; BYTE $0xe2 // andn r12d,r8d,r10d
WORD $0x3145; BYTE $0xfd // xor r13d,r15d
LONG $0xf07b43c4; WORD $0x06f0 // rorx r14d,r8d,0x6
LONG $0x231c8d47 // lea r11d,[r11+r12*1]
WORD $0x3145; BYTE $0xf5 // xor r13d,r14d
WORD $0x8941; BYTE $0xc7 // mov r15d,eax
LONG $0xf07b63c4; WORD $0x16e0 // rorx r12d,eax,0x16
LONG $0x2b1c8d47 // lea r11d,[r11+r13*1]
WORD $0x3141; BYTE $0xdf // xor r15d,ebx
LONG $0xf07b63c4; WORD $0x0df0 // rorx r14d,eax,0xd
LONG $0xf07b63c4; WORD $0x02e8 // rorx r13d,eax,0x2
LONG $0x1a148d42 // lea edx,[rdx+r11*1]
WORD $0x2144; BYTE $0xff // and edi,r15d
WORD $0x3145; BYTE $0xe6 // xor r14d,r12d
WORD $0xdf31 // xor edi,ebx
WORD $0x3145; BYTE $0xee // xor r14d,r13d
LONG $0x3b1c8d45 // lea r11d,[r11+rdi*1]
WORD $0x8945; BYTE $0xc4 // mov r12d,r8d
// ROUND(R11, AX, BX, CX, DX, R8, R9, R10, R12, R13, R14, DI, R15, SP, 0x44)
LONG $0x24540344; BYTE $0x44 // add r10d,[rsp+0x44]
WORD $0x2141; BYTE $0xd4 // and r12d,edx
LONG $0xf07b63c4; WORD $0x19ea // rorx r13d,edx,0x19
LONG $0xf07be3c4; WORD $0x0bfa // rorx edi,edx,0xb
LONG $0x331c8d47 // lea r11d,[r11+r14*1]
LONG $0x22148d47 // lea r10d,[r10+r12*1]
LONG $0xf26842c4; BYTE $0xe1 // andn r12d,edx,r9d
WORD $0x3141; BYTE $0xfd // xor r13d,edi
LONG $0xf07b63c4; WORD $0x06f2 // rorx r14d,edx,0x6
LONG $0x22148d47 // lea r10d,[r10+r12*1]
WORD $0x3145; BYTE $0xf5 // xor r13d,r14d
WORD $0x8944; BYTE $0xdf // mov edi,r11d
LONG $0xf07b43c4; WORD $0x16e3 // rorx r12d,r11d,0x16
LONG $0x2a148d47 // lea r10d,[r10+r13*1]
WORD $0xc731 // xor edi,eax
LONG $0xf07b43c4; WORD $0x0df3 // rorx r14d,r11d,0xd
LONG $0xf07b43c4; WORD $0x02eb // rorx r13d,r11d,0x2
LONG $0x110c8d42 // lea ecx,[rcx+r10*1]
WORD $0x2141; BYTE $0xff // and r15d,edi
WORD $0x3145; BYTE $0xe6 // xor r14d,r12d
WORD $0x3141; BYTE $0xc7 // xor r15d,eax
WORD $0x3145; BYTE $0xee // xor r14d,r13d
LONG $0x3a148d47 // lea r10d,[r10+r15*1]
WORD $0x8941; BYTE $0xd4 // mov r12d,edx
// ROUND(R10, R11, AX, BX, CX, DX, R8, R9, R12, R13, R14, R15, DI, SP, 0x48)
LONG $0x244c0344; BYTE $0x48 // add r9d,[rsp+0x48]
WORD $0x2141; BYTE $0xcc // and r12d,ecx
LONG $0xf07b63c4; WORD $0x19e9 // rorx r13d,ecx,0x19
LONG $0xf07b63c4; WORD $0x0bf9 // rorx r15d,ecx,0xb
LONG $0x32148d47 // lea r10d,[r10+r14*1]
LONG $0x210c8d47 // lea r9d,[r9+r12*1]
LONG $0xf27042c4; BYTE $0xe0 // andn r12d,ecx,r8d
WORD $0x3145; BYTE $0xfd // xor r13d,r15d
LONG $0xf07b63c4; WORD $0x06f1 // rorx r14d,ecx,0x6
LONG $0x210c8d47 // lea r9d,[r9+r12*1]
WORD $0x3145; BYTE $0xf5 // xor r13d,r14d
WORD $0x8945; BYTE $0xd7 // mov r15d,r10d
LONG $0xf07b43c4; WORD $0x16e2 // rorx r12d,r10d,0x16
LONG $0x290c8d47 // lea r9d,[r9+r13*1]
WORD $0x3145; BYTE $0xdf // xor r15d,r11d
LONG $0xf07b43c4; WORD $0x0df2 // rorx r14d,r10d,0xd
LONG $0xf07b43c4; WORD $0x02ea // rorx r13d,r10d,0x2
LONG $0x0b1c8d42 // lea ebx,[rbx+r9*1]
WORD $0x2144; BYTE $0xff // and edi,r15d
WORD $0x3145; BYTE $0xe6 // xor r14d,r12d
WORD $0x3144; BYTE $0xdf // xor edi,r11d
WORD $0x3145; BYTE $0xee // xor r14d,r13d
LONG $0x390c8d45 // lea r9d,[r9+rdi*1]
WORD $0x8941; BYTE $0xcc // mov r12d,ecx
// ROUND(R9, R10, R11, AX, BX, CX, DX, R8, R12, R13, R14, DI, R15, SP, 0x4c)
LONG $0x24440344; BYTE $0x4c // add r8d,[rsp+0x4c]
WORD $0x2141; BYTE $0xdc // and r12d,ebx
LONG $0xf07b63c4; WORD $0x19eb // rorx r13d,ebx,0x19
LONG $0xf07be3c4; WORD $0x0bfb // rorx edi,ebx,0xb
LONG $0x310c8d47 // lea r9d,[r9+r14*1]
LONG $0x20048d47 // lea r8d,[r8+r12*1]
LONG $0xf26062c4; BYTE $0xe2 // andn r12d,ebx,edx
WORD $0x3141; BYTE $0xfd // xor r13d,edi
LONG $0xf07b63c4; WORD $0x06f3 // rorx r14d,ebx,0x6
LONG $0x20048d47 // lea r8d,[r8+r12*1]
WORD $0x3145; BYTE $0xf5 // xor r13d,r14d
WORD $0x8944; BYTE $0xcf // mov edi,r9d
LONG $0xf07b43c4; WORD $0x16e1 // rorx r12d,r9d,0x16
LONG $0x28048d47 // lea r8d,[r8+r13*1]
WORD $0x3144; BYTE $0xd7 // xor edi,r10d
LONG $0xf07b43c4; WORD $0x0df1 // rorx r14d,r9d,0xd
LONG $0xf07b43c4; WORD $0x02e9 // rorx r13d,r9d,0x2
LONG $0x00048d42 // lea eax,[rax+r8*1]
WORD $0x2141; BYTE $0xff // and r15d,edi
WORD $0x3145; BYTE $0xe6 // xor r14d,r12d
WORD $0x3145; BYTE $0xd7 // xor r15d,r10d
WORD $0x3145; BYTE $0xee // xor r14d,r13d
LONG $0x38048d47 // lea r8d,[r8+r15*1]
WORD $0x8941; BYTE $0xdc // mov r12d,ebx
// ROUND(R8, R9, R10, R11, AX, BX, CX, DX, R12, R13, R14, R15, DI, SP, 0x60)
LONG $0x60245403 // add edx,[rsp+0x60]
WORD $0x2141; BYTE $0xc4 // and r12d,eax
LONG $0xf07b63c4; WORD $0x19e8 // rorx r13d,eax,0x19
LONG $0xf07b63c4; WORD $0x0bf8 // rorx r15d,eax,0xb
LONG $0x30048d47 // lea r8d,[r8+r14*1]
LONG $0x22148d42 // lea edx,[rdx+r12*1]
LONG $0xf27862c4; BYTE $0xe1 // andn r12d,eax,ecx
WORD $0x3145; BYTE $0xfd // xor r13d,r15d
LONG $0xf07b63c4; WORD $0x06f0 // rorx r14d,eax,0x6
LONG $0x22148d42 // lea edx,[rdx+r12*1]
WORD $0x3145; BYTE $0xf5 // xor r13d,r14d
WORD $0x8945; BYTE $0xc7 // mov r15d,r8d
LONG $0xf07b43c4; WORD $0x16e0 // rorx r12d,r8d,0x16
LONG $0x2a148d42 // lea edx,[rdx+r13*1]
WORD $0x3145; BYTE $0xcf // xor r15d,r9d
LONG $0xf07b43c4; WORD $0x0df0 // rorx r14d,r8d,0xd
LONG $0xf07b43c4; WORD $0x02e8 // rorx r13d,r8d,0x2
LONG $0x131c8d45 // lea r11d,[r11+rdx*1]
WORD $0x2144; BYTE $0xff // and edi,r15d
WORD $0x3145; BYTE $0xe6 // xor r14d,r12d
WORD $0x3144; BYTE $0xcf // xor edi,r9d
WORD $0x3145; BYTE $0xee // xor r14d,r13d
WORD $0x148d; BYTE $0x3a // lea edx,[rdx+rdi*1]
WORD $0x8941; BYTE $0xc4 // mov r12d,eax
// ROUND(DX, R8, R9, R10, R11, AX, BX, CX, R12, R13, R14, DI, R15, SP, 0x64)
LONG $0x64244c03 // add ecx,[rsp+0x64]
WORD $0x2145; BYTE $0xdc // and r12d,r11d
LONG $0xf07b43c4; WORD $0x19eb // rorx r13d,r11d,0x19
LONG $0xf07bc3c4; WORD $0x0bfb // rorx edi,r11d,0xb
LONG $0x32148d42 // lea edx,[rdx+r14*1]
LONG $0x210c8d42 // lea ecx,[rcx+r12*1]
LONG $0xf22062c4; BYTE $0xe3 // andn r12d,r11d,ebx
WORD $0x3141; BYTE $0xfd // xor r13d,edi
LONG $0xf07b43c4; WORD $0x06f3 // rorx r14d,r11d,0x6
LONG $0x210c8d42 // lea ecx,[rcx+r12*1]
WORD $0x3145; BYTE $0xf5 // xor r13d,r14d
WORD $0xd789 // mov edi,edx
LONG $0xf07b63c4; WORD $0x16e2 // rorx r12d,edx,0x16
LONG $0x290c8d42 // lea ecx,[rcx+r13*1]
WORD $0x3144; BYTE $0xc7 // xor edi,r8d
LONG $0xf07b63c4; WORD $0x0df2 // rorx r14d,edx,0xd
LONG $0xf07b63c4; WORD $0x02ea // rorx r13d,edx,0x2
LONG $0x0a148d45 // lea r10d,[r10+rcx*1]
WORD $0x2141; BYTE $0xff // and r15d,edi
WORD $0x3145; BYTE $0xe6 // xor r14d,r12d
WORD $0x3145; BYTE $0xc7 // xor r15d,r8d
WORD $0x3145; BYTE $0xee // xor r14d,r13d
LONG $0x390c8d42 // lea ecx,[rcx+r15*1]
WORD $0x8945; BYTE $0xdc // mov r12d,r11d
// ROUND(CX, DX, R8, R9, R10, R11, AX, BX, R12, R13, R14, R15, DI, SP, 0x68)
LONG $0x68245c03 // add ebx,[rsp+0x68]
WORD $0x2145; BYTE $0xd4 // and r12d,r10d
LONG $0xf07b43c4; WORD $0x19ea // rorx r13d,r10d,0x19
LONG $0xf07b43c4; WORD $0x0bfa // rorx r15d,r10d,0xb
LONG $0x310c8d42 // lea ecx,[rcx+r14*1]
LONG $0x231c8d42 // lea ebx,[rbx+r12*1]
LONG $0xf22862c4; BYTE $0xe0 // andn r12d,r10d,eax
WORD $0x3145; BYTE $0xfd // xor r13d,r15d
LONG $0xf07b43c4; WORD $0x06f2 // rorx r14d,r10d,0x6
LONG $0x231c8d42 // lea ebx,[rbx+r12*1]
WORD $0x3145; BYTE $0xf5 // xor r13d,r14d
WORD $0x8941; BYTE $0xcf // mov r15d,ecx
LONG $0xf07b63c4; WORD $0x16e1 // rorx r12d,ecx,0x16
LONG $0x2b1c8d42 // lea ebx,[rbx+r13*1]
WORD $0x3141; BYTE $0xd7 // xor r15d,edx
LONG $0xf07b63c4; WORD $0x0df1 // rorx r14d,ecx,0xd
LONG $0xf07b63c4; WORD $0x02e9 // rorx r13d,ecx,0x2
LONG $0x190c8d45 // lea r9d,[r9+rbx*1]
WORD $0x2144; BYTE $0xff // and edi,r15d
WORD $0x3145; BYTE $0xe6 // xor r14d,r12d
WORD $0xd731 // xor edi,edx
WORD $0x3145; BYTE $0xee // xor r14d,r13d
WORD $0x1c8d; BYTE $0x3b // lea ebx,[rbx+rdi*1]
WORD $0x8945; BYTE $0xd4 // mov r12d,r10d
// ROUND(BX, CX, DX, R8, R9, R10, R11, AX, R12, R13, R14, DI, R15, SP, 0x6c)
LONG $0x6c244403 // add eax,[rsp+0x6c]
WORD $0x2145; BYTE $0xcc // and r12d,r9d
LONG $0xf07b43c4; WORD $0x19e9 // rorx r13d,r9d,0x19
LONG $0xf07bc3c4; WORD $0x0bf9 // rorx edi,r9d,0xb
LONG $0x331c8d42 // lea ebx,[rbx+r14*1]
LONG $0x20048d42 // lea eax,[rax+r12*1]
LONG $0xf23042c4; BYTE $0xe3 // andn r12d,r9d,r11d
WORD $0x3141; BYTE $0xfd // xor r13d,edi
LONG $0xf07b43c4; WORD $0x06f1 // rorx r14d,r9d,0x6
LONG $0x20048d42 // lea eax,[rax+r12*1]
WORD $0x3145; BYTE $0xf5 // xor r13d,r14d
WORD $0xdf89 // mov edi,ebx
LONG $0xf07b63c4; WORD $0x16e3 // rorx r12d,ebx,0x16
LONG $0x28048d42 // lea eax,[rax+r13*1]
WORD $0xcf31 // xor edi,ecx
LONG $0xf07b63c4; WORD $0x0df3 // rorx r14d,ebx,0xd
LONG $0xf07b63c4; WORD $0x02eb // rorx r13d,ebx,0x2
LONG $0x00048d45 // lea r8d,[r8+rax*1]
WORD $0x2141; BYTE $0xff // and r15d,edi
WORD $0x3145; BYTE $0xe6 // xor r14d,r12d
WORD $0x3141; BYTE $0xcf // xor r15d,ecx
WORD $0x3145; BYTE $0xee // xor r14d,r13d
LONG $0x38048d42 // lea eax,[rax+r15*1]
WORD $0x8945; BYTE $0xcc // mov r12d,r9d
// ROUND(AX, BX, CX, DX, R8, R9, R10, R11, R12, R13, R14, R15, DI, SP, 0x00)
LONG $0x241c0344 // add r11d,[rsp]
WORD $0x2145; BYTE $0xc4 // and r12d,r8d
LONG $0xf07b43c4; WORD $0x19e8 // rorx r13d,r8d,0x19
LONG $0xf07b43c4; WORD $0x0bf8 // rorx r15d,r8d,0xb
LONG $0x30048d42 // lea eax,[rax+r14*1]
LONG $0x231c8d47 // lea r11d,[r11+r12*1]
LONG $0xf23842c4; BYTE $0xe2 // andn r12d,r8d,r10d
WORD $0x3145; BYTE $0xfd // xor r13d,r15d
LONG $0xf07b43c4; WORD $0x06f0 // rorx r14d,r8d,0x6
LONG $0x231c8d47 // lea r11d,[r11+r12*1]
WORD $0x3145; BYTE $0xf5 // xor r13d,r14d
WORD $0x8941; BYTE $0xc7 // mov r15d,eax
LONG $0xf07b63c4; WORD $0x16e0 // rorx r12d,eax,0x16
LONG $0x2b1c8d47 // lea r11d,[r11+r13*1]
WORD $0x3141; BYTE $0xdf // xor r15d,ebx
LONG $0xf07b63c4; WORD $0x0df0 // rorx r14d,eax,0xd
LONG $0xf07b63c4; WORD $0x02e8 // rorx r13d,eax,0x2
LONG $0x1a148d42 // lea edx,[rdx+r11*1]
WORD $0x2144; BYTE $0xff // and edi,r15d
WORD $0x3145; BYTE $0xe6 // xor r14d,r12d
WORD $0xdf31 // xor edi,ebx
WORD $0x3145; BYTE $0xee // xor r14d,r13d
LONG $0x3b1c8d45 // lea r11d,[r11+rdi*1]
WORD $0x8945; BYTE $0xc4 // mov r12d,r8d
// ROUND(R11, AX, BX, CX, DX, R8, R9, R10, R12, R13, R14, DI, R15, SP, 0x04)
LONG $0x24540344; BYTE $0x04 // add r10d,[rsp+0x4]
WORD $0x2141; BYTE $0xd4 // and r12d,edx
LONG $0xf07b63c4; WORD $0x19ea // rorx r13d,edx,0x19
LONG $0xf07be3c4; WORD $0x0bfa // rorx edi,edx,0xb
LONG $0x331c8d47 // lea r11d,[r11+r14*1]
LONG $0x22148d47 // lea r10d,[r10+r12*1]
LONG $0xf26842c4; BYTE $0xe1 // andn r12d,edx,r9d
WORD $0x3141; BYTE $0xfd // xor r13d,edi
LONG $0xf07b63c4; WORD $0x06f2 // rorx r14d,edx,0x6
LONG $0x22148d47 // lea r10d,[r10+r12*1]
WORD $0x3145; BYTE $0xf5 // xor r13d,r14d
WORD $0x8944; BYTE $0xdf // mov edi,r11d
LONG $0xf07b43c4; WORD $0x16e3 // rorx r12d,r11d,0x16
LONG $0x2a148d47 // lea r10d,[r10+r13*1]
WORD $0xc731 // xor edi,eax
LONG $0xf07b43c4; WORD $0x0df3 // rorx r14d,r11d,0xd
LONG $0xf07b43c4; WORD $0x02eb // rorx r13d,r11d,0x2
LONG $0x110c8d42 // lea ecx,[rcx+r10*1]
WORD $0x2141; BYTE $0xff // and r15d,edi
WORD $0x3145; BYTE $0xe6 // xor r14d,r12d
WORD $0x3141; BYTE $0xc7 // xor r15d,eax
WORD $0x3145; BYTE $0xee // xor r14d,r13d
LONG $0x3a148d47 // lea r10d,[r10+r15*1]
WORD $0x8941; BYTE $0xd4 // mov r12d,edx
// ROUND(R10, R11, AX, BX, CX, DX, R8, R9, R12, R13, R14, R15, DI, SP, 0x08)
LONG $0x244c0344; BYTE $0x08 // add r9d,[rsp+0x8]
WORD $0x2141; BYTE $0xcc // and r12d,ecx
LONG $0xf07b63c4; WORD $0x19e9 // rorx r13d,ecx,0x19
LONG $0xf07b63c4; WORD $0x0bf9 // rorx r15d,ecx,0xb
LONG $0x32148d47 // lea r10d,[r10+r14*1]
LONG $0x210c8d47 // lea r9d,[r9+r12*1]
LONG $0xf27042c4; BYTE $0xe0 // andn r12d,ecx,r8d
WORD $0x3145; BYTE $0xfd // xor r13d,r15d
LONG $0xf07b63c4; WORD $0x06f1 // rorx r14d,ecx,0x6
LONG $0x210c8d47 // lea r9d,[r9+r12*1]
WORD $0x3145; BYTE $0xf5 // xor r13d,r14d
WORD $0x8945; BYTE $0xd7 // mov r15d,r10d
LONG $0xf07b43c4; WORD $0x16e2 // rorx r12d,r10d,0x16
LONG $0x290c8d47 // lea r9d,[r9+r13*1]
WORD $0x3145; BYTE $0xdf // xor r15d,r11d
LONG $0xf07b43c4; WORD $0x0df2 // rorx r14d,r10d,0xd
LONG $0xf07b43c4; WORD $0x02ea // rorx r13d,r10d,0x2
LONG $0x0b1c8d42 // lea ebx,[rbx+r9*1]
WORD $0x2144; BYTE $0xff // and edi,r15d
WORD $0x3145; BYTE $0xe6 // xor r14d,r12d
WORD $0x3144; BYTE $0xdf // xor edi,r11d
WORD $0x3145; BYTE $0xee // xor r14d,r13d
LONG $0x390c8d45 // lea r9d,[r9+rdi*1]
WORD $0x8941; BYTE $0xcc // mov r12d,ecx
// ROUND(R9, R10, R11, AX, BX, CX, DX, R8, R12, R13, R14, DI, R15, SP, 0x0c)
LONG $0x24440344; BYTE $0x0c // add r8d,[rsp+0xc]
WORD $0x2141; BYTE $0xdc // and r12d,ebx
LONG $0xf07b63c4; WORD $0x19eb // rorx r13d,ebx,0x19
LONG $0xf07be3c4; WORD $0x0bfb // rorx edi,ebx,0xb
LONG $0x310c8d47 // lea r9d,[r9+r14*1]
LONG $0x20048d47 // lea r8d,[r8+r12*1]
LONG $0xf26062c4; BYTE $0xe2 // andn r12d,ebx,edx
WORD $0x3141; BYTE $0xfd // xor r13d,edi
LONG $0xf07b63c4; WORD $0x06f3 // rorx r14d,ebx,0x6
LONG $0x20048d47 // lea r8d,[r8+r12*1]
WORD $0x3145; BYTE $0xf5 // xor r13d,r14d
WORD $0x8944; BYTE $0xcf // mov edi,r9d
LONG $0xf07b43c4; WORD $0x16e1 // rorx r12d,r9d,0x16
LONG $0x28048d47 // lea r8d,[r8+r13*1]
WORD $0x3144; BYTE $0xd7 // xor edi,r10d
LONG $0xf07b43c4; WORD $0x0df1 // rorx r14d,r9d,0xd
LONG $0xf07b43c4; WORD $0x02e9 // rorx r13d,r9d,0x2
LONG $0x00048d42 // lea eax,[rax+r8*1]
WORD $0x2141; BYTE $0xff // and r15d,edi
WORD $0x3145; BYTE $0xe6 // xor r14d,r12d
WORD $0x3145; BYTE $0xd7 // xor r15d,r10d
WORD $0x3145; BYTE $0xee // xor r14d,r13d
LONG $0x38048d47 // lea r8d,[r8+r15*1]
WORD $0x8941; BYTE $0xdc // mov r12d,ebx
// ROUND(R8, R9, R10, R11, AX, BX, CX, DX, R12, R13, R14, R15, DI, SP, 0x20)
LONG $0x20245403 // add edx,[rsp+0x20]
WORD $0x2141; BYTE $0xc4 // and r12d,eax
LONG $0xf07b63c4; WORD $0x19e8 // rorx r13d,eax,0x19
LONG $0xf07b63c4; WORD $0x0bf8 // rorx r15d,eax,0xb
LONG $0x30048d47 // lea r8d,[r8+r14*1]
LONG $0x22148d42 // lea edx,[rdx+r12*1]
LONG $0xf27862c4; BYTE $0xe1 // andn r12d,eax,ecx
WORD $0x3145; BYTE $0xfd // xor r13d,r15d
LONG $0xf07b63c4; WORD $0x06f0 // rorx r14d,eax,0x6
LONG $0x22148d42 // lea edx,[rdx+r12*1]
WORD $0x3145; BYTE $0xf5 // xor r13d,r14d
WORD $0x8945; BYTE $0xc7 // mov r15d,r8d
LONG $0xf07b43c4; WORD $0x16e0 // rorx r12d,r8d,0x16
LONG $0x2a148d42 // lea edx,[rdx+r13*1]
WORD $0x3145; BYTE $0xcf // xor r15d,r9d
LONG $0xf07b43c4; WORD $0x0df0 // rorx r14d,r8d,0xd
LONG $0xf07b43c4; WORD $0x02e8 // rorx r13d,r8d,0x2
LONG $0x131c8d45 // lea r11d,[r11+rdx*1]
WORD $0x2144; BYTE $0xff // and edi,r15d
WORD $0x3145; BYTE $0xe6 // xor r14d,r12d
WORD $0x3144; BYTE $0xcf // xor edi,r9d
WORD $0x3145; BYTE $0xee // xor r14d,r13d
WORD $0x148d; BYTE $0x3a // lea edx,[rdx+rdi*1]
WORD $0x8941; BYTE $0xc4 // mov r12d,eax
// ROUND(DX, R8, R9, R10, R11, AX, BX, CX, R12, R13, R14, DI, R15, SP, 0x24)
LONG $0x24244c03 // add ecx,[rsp+0x24]
WORD $0x2145; BYTE $0xdc // and r12d,r11d
LONG $0xf07b43c4; WORD $0x19eb // rorx r13d,r11d,0x19
LONG $0xf07bc3c4; WORD $0x0bfb // rorx edi,r11d,0xb
LONG $0x32148d42 // lea edx,[rdx+r14*1]
LONG $0x210c8d42 // lea ecx,[rcx+r12*1]
LONG $0xf22062c4; BYTE $0xe3 // andn r12d,r11d,ebx
WORD $0x3141; BYTE $0xfd // xor r13d,edi
LONG $0xf07b43c4; WORD $0x06f3 // rorx r14d,r11d,0x6
LONG $0x210c8d42 // lea ecx,[rcx+r12*1]
WORD $0x3145; BYTE $0xf5 // xor r13d,r14d
WORD $0xd789 // mov edi,edx
LONG $0xf07b63c4; WORD $0x16e2 // rorx r12d,edx,0x16
LONG $0x290c8d42 // lea ecx,[rcx+r13*1]
WORD $0x3144; BYTE $0xc7 // xor edi,r8d
LONG $0xf07b63c4; WORD $0x0df2 // rorx r14d,edx,0xd
LONG $0xf07b63c4; WORD $0x02ea // rorx r13d,edx,0x2
LONG $0x0a148d45 // lea r10d,[r10+rcx*1]
WORD $0x2141; BYTE $0xff // and r15d,edi
WORD $0x3145; BYTE $0xe6 // xor r14d,r12d
WORD $0x3145; BYTE $0xc7 // xor r15d,r8d
WORD $0x3145; BYTE $0xee // xor r14d,r13d
LONG $0x390c8d42 // lea ecx,[rcx+r15*1]
WORD $0x8945; BYTE $0xdc // mov r12d,r11d
// ROUND(CX, DX, R8, R9, R10, R11, AX, BX, R12, R13, R14, R15, DI, SP, 0x28)
LONG $0x28245c03 // add ebx,[rsp+0x28]
WORD $0x2145; BYTE $0xd4 // and r12d,r10d
LONG $0xf07b43c4; WORD $0x19ea // rorx r13d,r10d,0x19
LONG $0xf07b43c4; WORD $0x0bfa // rorx r15d,r10d,0xb
LONG $0x310c8d42 // lea ecx,[rcx+r14*1]
LONG $0x231c8d42 // lea ebx,[rbx+r12*1]
LONG $0xf22862c4; BYTE $0xe0 // andn r12d,r10d,eax
WORD $0x3145; BYTE $0xfd // xor r13d,r15d
LONG $0xf07b43c4; WORD $0x06f2 // rorx r14d,r10d,0x6
LONG $0x231c8d42 // lea ebx,[rbx+r12*1]
WORD $0x3145; BYTE $0xf5 // xor r13d,r14d
WORD $0x8941; BYTE $0xcf // mov r15d,ecx
LONG $0xf07b63c4; WORD $0x16e1 // rorx r12d,ecx,0x16
LONG $0x2b1c8d42 // lea ebx,[rbx+r13*1]
WORD $0x3141; BYTE $0xd7 // xor r15d,edx
LONG $0xf07b63c4; WORD $0x0df1 // rorx r14d,ecx,0xd
LONG $0xf07b63c4; WORD $0x02e9 // rorx r13d,ecx,0x2
LONG $0x190c8d45 // lea r9d,[r9+rbx*1]
WORD $0x2144; BYTE $0xff // and edi,r15d
WORD $0x3145; BYTE $0xe6 // xor r14d,r12d
WORD $0xd731 // xor edi,edx
WORD $0x3145; BYTE $0xee // xor r14d,r13d
WORD $0x1c8d; BYTE $0x3b // lea ebx,[rbx+rdi*1]
WORD $0x8945; BYTE $0xd4 // mov r12d,r10d
// ROUND(BX, CX, DX, R8, R9, R10, R11, AX, R12, R13, R14, DI, R15, SP, 0x2c)
LONG $0x2c244403 // add eax,[rsp+0x2c]
WORD $0x2145; BYTE $0xcc // and r12d,r9d
LONG $0xf07b43c4; WORD $0x19e9 // rorx r13d,r9d,0x19
LONG $0xf07bc3c4; WORD $0x0bf9 // rorx edi,r9d,0xb
LONG $0x331c8d42 // lea ebx,[rbx+r14*1]
LONG $0x20048d42 // lea eax,[rax+r12*1]
LONG $0xf23042c4; BYTE $0xe3 // andn r12d,r9d,r11d
WORD $0x3141; BYTE $0xfd // xor r13d,edi
LONG $0xf07b43c4; WORD $0x06f1 // rorx r14d,r9d,0x6
LONG $0x20048d42 // lea eax,[rax+r12*1]
WORD $0x3145; BYTE $0xf5 // xor r13d,r14d
WORD $0xdf89 // mov edi,ebx
LONG $0xf07b63c4; WORD $0x16e3 // rorx r12d,ebx,0x16
LONG $0x28048d42 // lea eax,[rax+r13*1]
WORD $0xcf31 // xor edi,ecx
LONG $0xf07b63c4; WORD $0x0df3 // rorx r14d,ebx,0xd
LONG $0xf07b63c4; WORD $0x02eb // rorx r13d,ebx,0x2
LONG $0x00048d45 // lea r8d,[r8+rax*1]
WORD $0x2141; BYTE $0xff // and r15d,edi
WORD $0x3145; BYTE $0xe6 // xor r14d,r12d
WORD $0x3141; BYTE $0xcf // xor r15d,ecx
WORD $0x3145; BYTE $0xee // xor r14d,r13d
LONG $0x38048d42 // lea eax,[rax+r15*1]
WORD $0x8945; BYTE $0xcc // mov r12d,r9d
MOVQ 0x200(SP), DI // $_ctx
ADDQ R14, AX
LEAQ 0x1c0(SP), BP
ADDL (DI), AX
ADDL 4(DI), BX
ADDL 8(DI), CX
ADDL 12(DI), DX
ADDL 16(DI), R8
ADDL 20(DI), R9
ADDL 24(DI), R10
ADDL 28(DI), R11
MOVL AX, (DI)
MOVL BX, 4(DI)
MOVL CX, 8(DI)
MOVL DX, 12(DI)
MOVL R8, 16(DI)
MOVL R9, 20(DI)
MOVL R10, 24(DI)
MOVL R11, 28(DI)
CMPQ SI, 0x50(BP) // $_end
JE done
XORQ R14, R14
MOVQ BX, DI
XORQ CX, DI // magic
MOVQ R9, R12
loop2:
// ROUND(AX, BX, CX, DX, R8, R9, R10, R11, R12, R13, R14, R15, DI, BP, 0x10)
LONG $0x105d0344 // add r11d,[rbp+0x10]
WORD $0x2145; BYTE $0xc4 // and r12d,r8d
LONG $0xf07b43c4; WORD $0x19e8 // rorx r13d,r8d,0x19
LONG $0xf07b43c4; WORD $0x0bf8 // rorx r15d,r8d,0xb
LONG $0x30048d42 // lea eax,[rax+r14*1]
LONG $0x231c8d47 // lea r11d,[r11+r12*1]
LONG $0xf23842c4; BYTE $0xe2 // andn r12d,r8d,r10d
WORD $0x3145; BYTE $0xfd // xor r13d,r15d
LONG $0xf07b43c4; WORD $0x06f0 // rorx r14d,r8d,0x6
LONG $0x231c8d47 // lea r11d,[r11+r12*1]
WORD $0x3145; BYTE $0xf5 // xor r13d,r14d
WORD $0x8941; BYTE $0xc7 // mov r15d,eax
LONG $0xf07b63c4; WORD $0x16e0 // rorx r12d,eax,0x16
LONG $0x2b1c8d47 // lea r11d,[r11+r13*1]
WORD $0x3141; BYTE $0xdf // xor r15d,ebx
LONG $0xf07b63c4; WORD $0x0df0 // rorx r14d,eax,0xd
LONG $0xf07b63c4; WORD $0x02e8 // rorx r13d,eax,0x2
LONG $0x1a148d42 // lea edx,[rdx+r11*1]
WORD $0x2144; BYTE $0xff // and edi,r15d
WORD $0x3145; BYTE $0xe6 // xor r14d,r12d
WORD $0xdf31 // xor edi,ebx
WORD $0x3145; BYTE $0xee // xor r14d,r13d
LONG $0x3b1c8d45 // lea r11d,[r11+rdi*1]
WORD $0x8945; BYTE $0xc4 // mov r12d,r8d
// ROUND(R11, AX, BX, CX, DX, R8, R9, R10, R12, R13, R14, DI, R15, BP, 0x14)
LONG $0x14550344 // add r10d,[rbp+0x14]
WORD $0x2141; BYTE $0xd4 // and r12d,edx
LONG $0xf07b63c4; WORD $0x19ea // rorx r13d,edx,0x19
LONG $0xf07be3c4; WORD $0x0bfa // rorx edi,edx,0xb
LONG $0x331c8d47 // lea r11d,[r11+r14*1]
LONG $0x22148d47 // lea r10d,[r10+r12*1]
LONG $0xf26842c4; BYTE $0xe1 // andn r12d,edx,r9d
WORD $0x3141; BYTE $0xfd // xor r13d,edi
LONG $0xf07b63c4; WORD $0x06f2 // rorx r14d,edx,0x6
LONG $0x22148d47 // lea r10d,[r10+r12*1]
WORD $0x3145; BYTE $0xf5 // xor r13d,r14d
WORD $0x8944; BYTE $0xdf // mov edi,r11d
LONG $0xf07b43c4; WORD $0x16e3 // rorx r12d,r11d,0x16
LONG $0x2a148d47 // lea r10d,[r10+r13*1]
WORD $0xc731 // xor edi,eax
LONG $0xf07b43c4; WORD $0x0df3 // rorx r14d,r11d,0xd
LONG $0xf07b43c4; WORD $0x02eb // rorx r13d,r11d,0x2
LONG $0x110c8d42 // lea ecx,[rcx+r10*1]
WORD $0x2141; BYTE $0xff // and r15d,edi
WORD $0x3145; BYTE $0xe6 // xor r14d,r12d
WORD $0x3141; BYTE $0xc7 // xor r15d,eax
WORD $0x3145; BYTE $0xee // xor r14d,r13d
LONG $0x3a148d47 // lea r10d,[r10+r15*1]
WORD $0x8941; BYTE $0xd4 // mov r12d,edx
// ROUND(R10, R11, AX, BX, CX, DX, R8, R9, R12, R13, R14, R15, DI, BP, 0x18)
LONG $0x184d0344 // add r9d,[rbp+0x18]
WORD $0x2141; BYTE $0xcc // and r12d,ecx
LONG $0xf07b63c4; WORD $0x19e9 // rorx r13d,ecx,0x19
LONG $0xf07b63c4; WORD $0x0bf9 // rorx r15d,ecx,0xb
LONG $0x32148d47 // lea r10d,[r10+r14*1]
LONG $0x210c8d47 // lea r9d,[r9+r12*1]
LONG $0xf27042c4; BYTE $0xe0 // andn r12d,ecx,r8d
WORD $0x3145; BYTE $0xfd // xor r13d,r15d
LONG $0xf07b63c4; WORD $0x06f1 // rorx r14d,ecx,0x6
LONG $0x210c8d47 // lea r9d,[r9+r12*1]
WORD $0x3145; BYTE $0xf5 // xor r13d,r14d
WORD $0x8945; BYTE $0xd7 // mov r15d,r10d
LONG $0xf07b43c4; WORD $0x16e2 // rorx r12d,r10d,0x16
LONG $0x290c8d47 // lea r9d,[r9+r13*1]
WORD $0x3145; BYTE $0xdf // xor r15d,r11d
LONG $0xf07b43c4; WORD $0x0df2 // rorx r14d,r10d,0xd
LONG $0xf07b43c4; WORD $0x02ea // rorx r13d,r10d,0x2
LONG $0x0b1c8d42 // lea ebx,[rbx+r9*1]
WORD $0x2144; BYTE $0xff // and edi,r15d
WORD $0x3145; BYTE $0xe6 // xor r14d,r12d
WORD $0x3144; BYTE $0xdf // xor edi,r11d
WORD $0x3145; BYTE $0xee // xor r14d,r13d
LONG $0x390c8d45 // lea r9d,[r9+rdi*1]
WORD $0x8941; BYTE $0xcc // mov r12d,ecx
// ROUND(R9, R10, R11, AX, BX, CX, DX, R8, R12, R13, R14, DI, R15, BP, 0x1c)
LONG $0x1c450344 // add r8d,[rbp+0x1c]
WORD $0x2141; BYTE $0xdc // and r12d,ebx
LONG $0xf07b63c4; WORD $0x19eb // rorx r13d,ebx,0x19
LONG $0xf07be3c4; WORD $0x0bfb // rorx edi,ebx,0xb
LONG $0x310c8d47 // lea r9d,[r9+r14*1]
LONG $0x20048d47 // lea r8d,[r8+r12*1]
LONG $0xf26062c4; BYTE $0xe2 // andn r12d,ebx,edx
WORD $0x3141; BYTE $0xfd // xor r13d,edi
LONG $0xf07b63c4; WORD $0x06f3 // rorx r14d,ebx,0x6
LONG $0x20048d47 // lea r8d,[r8+r12*1]
WORD $0x3145; BYTE $0xf5 // xor r13d,r14d
WORD $0x8944; BYTE $0xcf // mov edi,r9d
LONG $0xf07b43c4; WORD $0x16e1 // rorx r12d,r9d,0x16
LONG $0x28048d47 // lea r8d,[r8+r13*1]
WORD $0x3144; BYTE $0xd7 // xor edi,r10d
LONG $0xf07b43c4; WORD $0x0df1 // rorx r14d,r9d,0xd
LONG $0xf07b43c4; WORD $0x02e9 // rorx r13d,r9d,0x2
LONG $0x00048d42 // lea eax,[rax+r8*1]
WORD $0x2141; BYTE $0xff // and r15d,edi
WORD $0x3145; BYTE $0xe6 // xor r14d,r12d
WORD $0x3145; BYTE $0xd7 // xor r15d,r10d
WORD $0x3145; BYTE $0xee // xor r14d,r13d
LONG $0x38048d47 // lea r8d,[r8+r15*1]
WORD $0x8941; BYTE $0xdc // mov r12d,ebx
// ROUND(R8, R9, R10, R11, AX, BX, CX, DX, R12, R13, R14, R15, DI, BP, 0x30)
WORD $0x5503; BYTE $0x30 // add edx,[rbp+0x30]
WORD $0x2141; BYTE $0xc4 // and r12d,eax
LONG $0xf07b63c4; WORD $0x19e8 // rorx r13d,eax,0x19
LONG $0xf07b63c4; WORD $0x0bf8 // rorx r15d,eax,0xb
LONG $0x30048d47 // lea r8d,[r8+r14*1]
LONG $0x22148d42 // lea edx,[rdx+r12*1]
LONG $0xf27862c4; BYTE $0xe1 // andn r12d,eax,ecx
WORD $0x3145; BYTE $0xfd // xor r13d,r15d
LONG $0xf07b63c4; WORD $0x06f0 // rorx r14d,eax,0x6
LONG $0x22148d42 // lea edx,[rdx+r12*1]
WORD $0x3145; BYTE $0xf5 // xor r13d,r14d
WORD $0x8945; BYTE $0xc7 // mov r15d,r8d
LONG $0xf07b43c4; WORD $0x16e0 // rorx r12d,r8d,0x16
LONG $0x2a148d42 // lea edx,[rdx+r13*1]
WORD $0x3145; BYTE $0xcf // xor r15d,r9d
LONG $0xf07b43c4; WORD $0x0df0 // rorx r14d,r8d,0xd
LONG $0xf07b43c4; WORD $0x02e8 // rorx r13d,r8d,0x2
LONG $0x131c8d45 // lea r11d,[r11+rdx*1]
WORD $0x2144; BYTE $0xff // and edi,r15d
WORD $0x3145; BYTE $0xe6 // xor r14d,r12d
WORD $0x3144; BYTE $0xcf // xor edi,r9d
WORD $0x3145; BYTE $0xee // xor r14d,r13d
WORD $0x148d; BYTE $0x3a // lea edx,[rdx+rdi*1]
WORD $0x8941; BYTE $0xc4 // mov r12d,eax
// ROUND(DX, R8, R9, R10, R11, AX, BX, CX, R12, R13, R14, DI, R15, BP, 0x34)
WORD $0x4d03; BYTE $0x34 // add ecx,[rbp+0x34]
WORD $0x2145; BYTE $0xdc // and r12d,r11d
LONG $0xf07b43c4; WORD $0x19eb // rorx r13d,r11d,0x19
LONG $0xf07bc3c4; WORD $0x0bfb // rorx edi,r11d,0xb
LONG $0x32148d42 // lea edx,[rdx+r14*1]
LONG $0x210c8d42 // lea ecx,[rcx+r12*1]
LONG $0xf22062c4; BYTE $0xe3 // andn r12d,r11d,ebx
WORD $0x3141; BYTE $0xfd // xor r13d,edi
LONG $0xf07b43c4; WORD $0x06f3 // rorx r14d,r11d,0x6
LONG $0x210c8d42 // lea ecx,[rcx+r12*1]
WORD $0x3145; BYTE $0xf5 // xor r13d,r14d
WORD $0xd789 // mov edi,edx
LONG $0xf07b63c4; WORD $0x16e2 // rorx r12d,edx,0x16
LONG $0x290c8d42 // lea ecx,[rcx+r13*1]
WORD $0x3144; BYTE $0xc7 // xor edi,r8d
LONG $0xf07b63c4; WORD $0x0df2 // rorx r14d,edx,0xd
LONG $0xf07b63c4; WORD $0x02ea // rorx r13d,edx,0x2
LONG $0x0a148d45 // lea r10d,[r10+rcx*1]
WORD $0x2141; BYTE $0xff // and r15d,edi
WORD $0x3145; BYTE $0xe6 // xor r14d,r12d
WORD $0x3145; BYTE $0xc7 // xor r15d,r8d
WORD $0x3145; BYTE $0xee // xor r14d,r13d
LONG $0x390c8d42 // lea ecx,[rcx+r15*1]
WORD $0x8945; BYTE $0xdc // mov r12d,r11d
// ROUND(CX, DX, R8, R9, R10, R11, AX, BX, R12, R13, R14, R15, DI, BP, 0x38)
WORD $0x5d03; BYTE $0x38 // add ebx,[rbp+0x38]
WORD $0x2145; BYTE $0xd4 // and r12d,r10d
LONG $0xf07b43c4; WORD $0x19ea // rorx r13d,r10d,0x19
LONG $0xf07b43c4; WORD $0x0bfa // rorx r15d,r10d,0xb
LONG $0x310c8d42 // lea ecx,[rcx+r14*1]
LONG $0x231c8d42 // lea ebx,[rbx+r12*1]
LONG $0xf22862c4; BYTE $0xe0 // andn r12d,r10d,eax
WORD $0x3145; BYTE $0xfd // xor r13d,r15d
LONG $0xf07b43c4; WORD $0x06f2 // rorx r14d,r10d,0x6
LONG $0x231c8d42 // lea ebx,[rbx+r12*1]
WORD $0x3145; BYTE $0xf5 // xor r13d,r14d
WORD $0x8941; BYTE $0xcf // mov r15d,ecx
LONG $0xf07b63c4; WORD $0x16e1 // rorx r12d,ecx,0x16
LONG $0x2b1c8d42 // lea ebx,[rbx+r13*1]
WORD $0x3141; BYTE $0xd7 // xor r15d,edx
LONG $0xf07b63c4; WORD $0x0df1 // rorx r14d,ecx,0xd
LONG $0xf07b63c4; WORD $0x02e9 // rorx r13d,ecx,0x2
LONG $0x190c8d45 // lea r9d,[r9+rbx*1]
WORD $0x2144; BYTE $0xff // and edi,r15d
WORD $0x3145; BYTE $0xe6 // xor r14d,r12d
WORD $0xd731 // xor edi,edx
WORD $0x3145; BYTE $0xee // xor r14d,r13d
WORD $0x1c8d; BYTE $0x3b // lea ebx,[rbx+rdi*1]
WORD $0x8945; BYTE $0xd4 // mov r12d,r10d
// ROUND(BX, CX, DX, R8, R9, R10, R11, AX, R12, R13, R14, DI, R15, BP, 0x3c)
WORD $0x4503; BYTE $0x3c // add eax,[rbp+0x3c]
WORD $0x2145; BYTE $0xcc // and r12d,r9d
LONG $0xf07b43c4; WORD $0x19e9 // rorx r13d,r9d,0x19
LONG $0xf07bc3c4; WORD $0x0bf9 // rorx edi,r9d,0xb
LONG $0x331c8d42 // lea ebx,[rbx+r14*1]
LONG $0x20048d42 // lea eax,[rax+r12*1]
LONG $0xf23042c4; BYTE $0xe3 // andn r12d,r9d,r11d
WORD $0x3141; BYTE $0xfd // xor r13d,edi
LONG $0xf07b43c4; WORD $0x06f1 // rorx r14d,r9d,0x6
LONG $0x20048d42 // lea eax,[rax+r12*1]
WORD $0x3145; BYTE $0xf5 // xor r13d,r14d
WORD $0xdf89 // mov edi,ebx
LONG $0xf07b63c4; WORD $0x16e3 // rorx r12d,ebx,0x16
LONG $0x28048d42 // lea eax,[rax+r13*1]
WORD $0xcf31 // xor edi,ecx
LONG $0xf07b63c4; WORD $0x0df3 // rorx r14d,ebx,0xd
LONG $0xf07b63c4; WORD $0x02eb // rorx r13d,ebx,0x2
LONG $0x00048d45 // lea r8d,[r8+rax*1]
WORD $0x2141; BYTE $0xff // and r15d,edi
WORD $0x3145; BYTE $0xe6 // xor r14d,r12d
WORD $0x3141; BYTE $0xcf // xor r15d,ecx
WORD $0x3145; BYTE $0xee // xor r14d,r13d
LONG $0x38048d42 // lea eax,[rax+r15*1]
WORD $0x8945; BYTE $0xcc // mov r12d,r9d
ADDQ $-0x40, BP
CMPQ BP, SP
JAE loop2
MOVQ 0x200(SP), DI // $_ctx
ADDQ R14, AX
ADDQ $0x1c0, SP
ADDL (DI), AX
ADDL 4(DI), BX
ADDL 8(DI), CX
ADDL 12(DI), DX
ADDL 16(DI), R8
ADDL 20(DI), R9
ADDQ $0x80, SI // input += 2
ADDL 24(DI), R10
MOVQ SI, R12
ADDL 28(DI), R11
CMPQ SI, 0x50(SP) // input == _end
MOVL AX, (DI)
LONG $0xe4440f4c // cmove r12,rsp /* next block or stale data */
MOVL AX, (DI)
MOVL BX, 4(DI)
MOVL CX, 8(DI)
MOVL DX, 12(DI)
MOVL R8, 16(DI)
MOVL R9, 20(DI)
MOVL R10, 24(DI)
MOVL R11, 28(DI)
JBE loop0
LEAQ (SP), BP
done:
MOVQ BP, SP
MOVQ 0x58(SP), SP // restore saved stack pointer
WORD $0xf8c5; BYTE $0x77 // vzeroupper
RET