#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
int /*<<< orphan*/ rsencode(int, int, unsigned char *);
void apply_mask(int mask, int data_length, unsigned char *masked_codeword_array,
                unsigned char *codeword_array, int ecc_length) {
  int weight = 0;
  int j;
  switch (mask) {
  case 0:
    masked_codeword_array[0] = 0;
    for (j = 0; j < data_length; j++) {
      masked_codeword_array[j + 1] = codeword_array[j];
    }
    break;
  case 1:
    masked_codeword_array[0] = 1;
    for (j = 0; j < data_length; j++) {
      masked_codeword_array[j + 1] = (weight + codeword_array[j]) % 113;
      weight += 3;
    }
    break;
  case 2:
    masked_codeword_array[0] = 2;
    for (j = 0; j < data_length; j++) {
      masked_codeword_array[j + 1] = (weight + codeword_array[j]) % 113;
      weight += 7;
    }
    break;
  case 3:
    masked_codeword_array[0] = 3;
    for (j = 0; j < data_length; j++) {
      masked_codeword_array[j + 1] = (weight + codeword_array[j]) % 113;
      weight += 17;
    }
    break;
  }
  rsencode(data_length + 1, ecc_length, masked_codeword_array);
}


x86 assembly (clang, -O0):
<apply_mask>:
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%rsp
mov    %edi,-0x4(%rbp)
mov    %esi,-0x8(%rbp)
mov    %rdx,-0x10(%rbp)
mov    %rcx,-0x18(%rbp)
mov    %r8d,-0x1c(%rbp)
movl   $0x0,-0x20(%rbp)
mov    -0x4(%rbp),%eax
mov    %rax,-0x30(%rbp)
sub    $0x3,%rax
ja     12bb <apply_mask+0x1ab>
mov    -0x30(%rbp),%rax
lea    0xeb3(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
mov    -0x10(%rbp),%rax
movb   $0x0,(%rax)
movl   $0x0,-0x24(%rbp)
mov    -0x24(%rbp),%eax
cmp    -0x8(%rbp),%eax
jge    1199 <apply_mask+0x89>
mov    -0x18(%rbp),%rax
movslq -0x24(%rbp),%rcx
mov    (%rax,%rcx,1),%dl
mov    -0x10(%rbp),%rax
mov    -0x24(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    1164 <apply_mask+0x54>
jmp    12bb <apply_mask+0x1ab>
mov    -0x10(%rbp),%rax
movb   $0x1,(%rax)
movl   $0x0,-0x24(%rbp)
mov    -0x24(%rbp),%eax
cmp    -0x8(%rbp),%eax
jge    11f8 <apply_mask+0xe8>
mov    -0x20(%rbp),%eax
mov    -0x18(%rbp),%rcx
movslq -0x24(%rbp),%rdx
movzbl (%rcx,%rdx,1),%ecx
add    %ecx,%eax
mov    $0x71,%ecx
cltd
idiv   %ecx
mov    -0x10(%rbp),%rax
mov    -0x24(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x20(%rbp),%eax
add    $0x3,%eax
mov    %eax,-0x20(%rbp)
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    11ac <apply_mask+0x9c>
jmp    12bb <apply_mask+0x1ab>
mov    -0x10(%rbp),%rax
movb   $0x2,(%rax)
movl   $0x0,-0x24(%rbp)
mov    -0x24(%rbp),%eax
cmp    -0x8(%rbp),%eax
jge    1257 <apply_mask+0x147>
mov    -0x20(%rbp),%eax
mov    -0x18(%rbp),%rcx
movslq -0x24(%rbp),%rdx
movzbl (%rcx,%rdx,1),%ecx
add    %ecx,%eax
mov    $0x71,%ecx
cltd
idiv   %ecx
mov    -0x10(%rbp),%rax
mov    -0x24(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x20(%rbp),%eax
add    $0x7,%eax
mov    %eax,-0x20(%rbp)
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    120b <apply_mask+0xfb>
jmp    12bb <apply_mask+0x1ab>
mov    -0x10(%rbp),%rax
movb   $0x3,(%rax)
movl   $0x0,-0x24(%rbp)
mov    -0x24(%rbp),%eax
cmp    -0x8(%rbp),%eax
jge    12b6 <apply_mask+0x1a6>
mov    -0x20(%rbp),%eax
mov    -0x18(%rbp),%rcx
movslq -0x24(%rbp),%rdx
movzbl (%rcx,%rdx,1),%ecx
add    %ecx,%eax
mov    $0x71,%ecx
cltd
idiv   %ecx
mov    -0x10(%rbp),%rax
mov    -0x24(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x20(%rbp),%eax
add    $0x11,%eax
mov    %eax,-0x20(%rbp)
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    126a <apply_mask+0x15a>
jmp    12bb <apply_mask+0x1ab>
mov    -0x8(%rbp),%edi
add    $0x1,%edi
mov    -0x1c(%rbp),%esi
mov    -0x10(%rbp),%rdx
call   1030 <rsencode@plt>
add    $0x30,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<apply_mask>:
push   %rbp
push   %r14
push   %rbx
mov    %esi,%r9d
cmp    $0x3,%edi
ja     284b <apply_mask+0x173b>
mov    %edi,%eax
lea    0x2017(%rip),%rsi
movslq (%rsi,%rax,4),%rax
add    %rsi,%rax
jmp    *%rax
movb   $0x0,(%rdx)
test   %r9d,%r9d
jle    284b <apply_mask+0x173b>
mov    %r9d,%r10d
cmp    $0x8,%r9d
jb     1169 <apply_mask+0x59>
lea    0x1(%rdx),%rax
lea    (%rcx,%r10,1),%rsi
cmp    %rsi,%rax
jae    14d2 <apply_mask+0x3c2>
lea    (%r10,%rdx,1),%rax
add    $0x1,%rax
cmp    %rcx,%rax
jbe    14d2 <apply_mask+0x3c2>
xor    %esi,%esi
mov    %rsi,%r11
not    %r11
add    %r10,%r11
mov    %r10,%rdi
and    $0x3,%rdi
je     1192 <apply_mask+0x82>
nopl   (%rax)
movzbl (%rcx,%rsi,1),%eax
mov    %al,0x1(%rdx,%rsi,1)
add    $0x1,%rsi
add    $0xffffffffffffffff,%rdi
jne    1180 <apply_mask+0x70>
cmp    $0x3,%r11
jb     284b <apply_mask+0x173b>
nopl   0x0(%rax)
movzbl (%rcx,%rsi,1),%eax
mov    %al,0x1(%rdx,%rsi,1)
movzbl 0x1(%rcx,%rsi,1),%eax
mov    %al,0x2(%rdx,%rsi,1)
movzbl 0x2(%rcx,%rsi,1),%eax
mov    %al,0x3(%rdx,%rsi,1)
movzbl 0x3(%rcx,%rsi,1),%eax
mov    %al,0x4(%rdx,%rsi,1)
add    $0x4,%rsi
cmp    %rsi,%r10
jne    11a0 <apply_mask+0x90>
jmp    284b <apply_mask+0x173b>
movb   $0x1,(%rdx)
test   %r9d,%r9d
jle    284b <apply_mask+0x173b>
mov    %r9d,%r11d
cmp    $0x10,%r9d
jb     1208 <apply_mask+0xf8>
lea    0x1(%rdx),%rax
lea    (%rcx,%r11,1),%rsi
cmp    %rsi,%rax
jae    14e3 <apply_mask+0x3d3>
lea    (%r11,%rdx,1),%rax
add    $0x1,%rax
cmp    %rcx,%rax
jbe    14e3 <apply_mask+0x3d3>
xor    %r14d,%r14d
xor    %eax,%eax
mov    %r14,%r10
not    %r10
test   $0x1,%r11b
je     1246 <apply_mask+0x136>
movzbl (%rcx,%r14,1),%esi
add    %eax,%esi
imul   $0x21fb7813,%rsi,%rbx
shr    $0x20,%rbx
mov    %esi,%ebp
sub    %ebx,%ebp
shr    %ebp
add    %ebx,%ebp
shr    $0x6,%ebp
imul   $0x71,%ebp,%ebx
sub    %ebx,%esi
or     $0x1,%r14
mov    %sil,(%rdx,%r14,1)
add    $0x3,%eax
add    %r11,%r10
je     284b <apply_mask+0x173b>
lea    0x3(%rax),%esi
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movzbl (%rcx,%r14,1),%ebp
mov    %ebp,%ebx
add    %eax,%ebx
imul   $0x21fb7813,%rbx,%rdi
shr    $0x20,%rdi
sub    %edi,%ebx
shr    %ebx
add    %edi,%ebx
shr    $0x6,%ebx
imul   $0x71,%ebx,%edi
sub    %dil,%bpl
add    %al,%bpl
mov    %bpl,0x1(%rdx,%r14,1)
movzbl 0x1(%rcx,%r14,1),%edi
mov    %edi,%ebp
add    %esi,%ebp
imul   $0x21fb7813,%rbp,%rbx
shr    $0x20,%rbx
sub    %ebx,%ebp
shr    %ebp
add    %ebx,%ebp
shr    $0x6,%ebp
imul   $0x71,%ebp,%ebp
sub    %bpl,%dil
add    %al,%dil
add    $0x3,%dil
mov    %dil,0x2(%rdx,%r14,1)
lea    0x2(%r14),%rdi
add    $0x6,%eax
add    $0x6,%esi
mov    %rdi,%r14
cmp    %rdi,%r11
jne    1260 <apply_mask+0x150>
jmp    284b <apply_mask+0x173b>
movb   $0x2,(%rdx)
test   %r9d,%r9d
jle    284b <apply_mask+0x173b>
mov    %r9d,%r11d
cmp    $0x10,%r9d
jb     1309 <apply_mask+0x1f9>
lea    0x1(%rdx),%rax
lea    (%rcx,%r11,1),%rsi
cmp    %rsi,%rax
jae    18f6 <apply_mask+0x7e6>
lea    (%r11,%rdx,1),%rax
add    $0x1,%rax
cmp    %rcx,%rax
jbe    18f6 <apply_mask+0x7e6>
xor    %r14d,%r14d
xor    %eax,%eax
mov    %r14,%rsi
not    %rsi
test   $0x1,%r11b
je     1349 <apply_mask+0x239>
movzbl (%rcx,%r14,1),%ebp
add    %eax,%ebp
imul   $0x21fb7813,%rbp,%r10
shr    $0x20,%r10
mov    %ebp,%ebx
sub    %r10d,%ebx
shr    %ebx
add    %r10d,%ebx
shr    $0x6,%ebx
imul   $0x71,%ebx,%ebx
sub    %ebx,%ebp
or     $0x1,%r14
mov    %bpl,(%rdx,%r14,1)
add    $0x7,%eax
add    %r11,%rsi
je     284b <apply_mask+0x173b>
lea    0x7(%rax),%esi
cs nopw 0x0(%rax,%rax,1)
nop
movzbl (%rcx,%r14,1),%ebp
mov    %ebp,%ebx
add    %eax,%ebx
imul   $0x21fb7813,%rbx,%rdi
shr    $0x20,%rdi
sub    %edi,%ebx
shr    %ebx
add    %edi,%ebx
shr    $0x6,%ebx
imul   $0x71,%ebx,%edi
sub    %dil,%bpl
add    %al,%bpl
mov    %bpl,0x1(%rdx,%r14,1)
movzbl 0x1(%rcx,%r14,1),%edi
mov    %edi,%ebp
add    %esi,%ebp
imul   $0x21fb7813,%rbp,%rbx
shr    $0x20,%rbx
sub    %ebx,%ebp
shr    %ebp
add    %ebx,%ebp
shr    $0x6,%ebp
imul   $0x71,%ebp,%ebp
sub    %bpl,%dil
add    %al,%dil
add    $0x7,%dil
mov    %dil,0x2(%rdx,%r14,1)
lea    0x2(%r14),%rdi
add    $0xe,%eax
add    $0xe,%esi
mov    %rdi,%r14
cmp    %rdi,%r11
jne    1360 <apply_mask+0x250>
jmp    284b <apply_mask+0x173b>
movb   $0x3,(%rdx)
test   %r9d,%r9d
jle    284b <apply_mask+0x173b>
mov    %r9d,%r11d
cmp    $0x10,%r9d
jb     1409 <apply_mask+0x2f9>
lea    0x1(%rdx),%rax
lea    (%rcx,%r11,1),%rsi
cmp    %rsi,%rax
jae    1d06 <apply_mask+0xbf6>
lea    (%r11,%rdx,1),%rax
add    $0x1,%rax
cmp    %rcx,%rax
jbe    1d06 <apply_mask+0xbf6>
xor    %r14d,%r14d
xor    %eax,%eax
mov    %r14,%rsi
not    %rsi
test   $0x1,%r11b
je     1449 <apply_mask+0x339>
movzbl (%rcx,%r14,1),%ebp
add    %eax,%ebp
imul   $0x21fb7813,%rbp,%r10
shr    $0x20,%r10
mov    %ebp,%ebx
sub    %r10d,%ebx
shr    %ebx
add    %r10d,%ebx
shr    $0x6,%ebx
imul   $0x71,%ebx,%ebx
sub    %ebx,%ebp
or     $0x1,%r14
mov    %bpl,(%rdx,%r14,1)
add    $0x11,%eax
add    %r11,%rsi
je     284b <apply_mask+0x173b>
lea    0x11(%rax),%esi
cs nopw 0x0(%rax,%rax,1)
nop
movzbl (%rcx,%r14,1),%ebp
mov    %ebp,%ebx
add    %eax,%ebx
imul   $0x21fb7813,%rbx,%rdi
shr    $0x20,%rdi
sub    %edi,%ebx
shr    %ebx
add    %edi,%ebx
shr    $0x6,%ebx
imul   $0x71,%ebx,%edi
sub    %dil,%bpl
add    %al,%bpl
mov    %bpl,0x1(%rdx,%r14,1)
movzbl 0x1(%rcx,%r14,1),%edi
mov    %edi,%ebp
add    %esi,%ebp
imul   $0x21fb7813,%rbp,%rbx
shr    $0x20,%rbx
sub    %ebx,%ebp
shr    %ebp
add    %ebx,%ebp
shr    $0x6,%ebp
imul   $0x71,%ebp,%ebp
sub    %bpl,%dil
add    %al,%dil
add    $0x11,%dil
mov    %dil,0x2(%rdx,%r14,1)
lea    0x2(%r14),%rdi
add    $0x22,%eax
add    $0x22,%esi
mov    %rdi,%r14
cmp    %rdi,%r11
jne    1460 <apply_mask+0x350>
jmp    284b <apply_mask+0x173b>
cmp    $0x20,%r9d
jae    2116 <apply_mask+0x1006>
xor    %esi,%esi
jmp    2826 <apply_mask+0x1716>
mov    %r11d,%r14d
and    $0xfffffff0,%r14d
lea    -0x10(%r14),%rax
mov    %rax,%r10
shr    $0x4,%r10
add    $0x1,%r10
test   %rax,%rax
je     2143 <apply_mask+0x1033>
mov    %r10,%rax
and    $0xfffffffffffffffe,%rax
movdqa 0x1bce(%rip),%xmm10
movdqa 0x1bd5(%rip),%xmm11
movdqa 0x1bdc(%rip),%xmm14
movdqa 0x1be3(%rip),%xmm12
xor    %esi,%esi
pxor   %xmm13,%xmm13
movdqa 0x1b04(%rip),%xmm5
movdqa 0x1b0c(%rip),%xmm6
movdqa 0x1bd3(%rip),%xmm8
movdqa 0x1bda(%rip),%xmm9
cs nopw 0x0(%rax,%rax,1)
movdqu (%rcx,%rsi,1),%xmm1
movdqa %xmm1,%xmm7
punpcklbw %xmm13,%xmm7
movdqa %xmm7,%xmm4
punpckhwd %xmm13,%xmm4
punpcklwd %xmm13,%xmm7
punpckhbw %xmm13,%xmm1
movdqa %xmm1,%xmm0
punpckhwd %xmm13,%xmm0
punpcklwd %xmm13,%xmm1
paddd  %xmm11,%xmm1
paddd  %xmm10,%xmm0
paddd  %xmm12,%xmm7
paddd  %xmm14,%xmm4
movdqa %xmm4,%xmm2
pmuludq %xmm5,%xmm2
pshufd $0xed,%xmm2,%xmm2
pshufd $0xf5,%xmm4,%xmm3
pmuludq %xmm5,%xmm3
pshufd $0xed,%xmm3,%xmm3
punpckldq %xmm3,%xmm2
movdqa %xmm4,%xmm3
psubd  %xmm2,%xmm3
psrld  $0x1,%xmm3
paddd  %xmm2,%xmm3
psrld  $0x6,%xmm3
pshufd $0xf5,%xmm3,%xmm2
pmuludq %xmm6,%xmm3
pshufd $0xe8,%xmm3,%xmm3
pmuludq %xmm6,%xmm2
pshufd $0xe8,%xmm2,%xmm2
punpckldq %xmm2,%xmm3
psubd  %xmm3,%xmm4
movdqa %xmm7,%xmm2
pmuludq %xmm5,%xmm2
pshufd $0xed,%xmm2,%xmm2
pshufd $0xf5,%xmm7,%xmm3
pmuludq %xmm5,%xmm3
pshufd $0xed,%xmm3,%xmm3
punpckldq %xmm3,%xmm2
movdqa %xmm7,%xmm3
psubd  %xmm2,%xmm3
psrld  $0x1,%xmm3
paddd  %xmm2,%xmm3
psrld  $0x6,%xmm3
pshufd $0xf5,%xmm3,%xmm2
pmuludq %xmm6,%xmm3
pshufd $0xe8,%xmm3,%xmm3
pmuludq %xmm6,%xmm2
pshufd $0xe8,%xmm2,%xmm2
punpckldq %xmm2,%xmm3
psubd  %xmm3,%xmm7
packuswb %xmm4,%xmm7
movdqa %xmm0,%xmm2
pmuludq %xmm5,%xmm2
pshufd $0xed,%xmm2,%xmm2
pshufd $0xf5,%xmm0,%xmm3
pmuludq %xmm5,%xmm3
pshufd $0xed,%xmm3,%xmm3
punpckldq %xmm3,%xmm2
movdqa %xmm0,%xmm3
psubd  %xmm2,%xmm3
psrld  $0x1,%xmm3
paddd  %xmm2,%xmm3
psrld  $0x6,%xmm3
pshufd $0xf5,%xmm3,%xmm2
pmuludq %xmm6,%xmm3
pshufd $0xe8,%xmm3,%xmm3
pmuludq %xmm6,%xmm2
pshufd $0xe8,%xmm2,%xmm2
punpckldq %xmm2,%xmm3
psubd  %xmm3,%xmm0
movdqa %xmm1,%xmm2
pmuludq %xmm5,%xmm2
pshufd $0xed,%xmm2,%xmm2
pshufd $0xf5,%xmm1,%xmm3
pmuludq %xmm5,%xmm3
pshufd $0xed,%xmm3,%xmm3
punpckldq %xmm3,%xmm2
movdqa %xmm1,%xmm3
psubd  %xmm2,%xmm3
psrld  $0x1,%xmm3
paddd  %xmm2,%xmm3
psrld  $0x6,%xmm3
pshufd $0xf5,%xmm3,%xmm2
pmuludq %xmm6,%xmm3
pshufd $0xe8,%xmm3,%xmm3
pmuludq %xmm6,%xmm2
pshufd $0xe8,%xmm2,%xmm2
punpckldq %xmm2,%xmm3
psubd  %xmm3,%xmm1
packuswb %xmm0,%xmm1
packuswb %xmm1,%xmm7
movdqu %xmm7,0x1(%rdx,%rsi,1)
movdqu 0x10(%rcx,%rsi,1),%xmm0
movdqa %xmm0,%xmm2
punpcklbw %xmm13,%xmm2
movdqa %xmm2,%xmm3
punpckhwd %xmm13,%xmm3
punpcklwd %xmm13,%xmm2
punpckhbw %xmm13,%xmm0
movdqa %xmm0,%xmm4
punpckhwd %xmm13,%xmm4
punpcklwd %xmm13,%xmm0
movdqa %xmm11,%xmm1
paddd  %xmm8,%xmm1
paddd  %xmm0,%xmm1
movdqa %xmm10,%xmm0
paddd  %xmm8,%xmm0
paddd  %xmm4,%xmm0
movdqa %xmm12,%xmm7
paddd  %xmm8,%xmm7
paddd  %xmm2,%xmm7
movdqa %xmm14,%xmm2
paddd  %xmm8,%xmm2
paddd  %xmm3,%xmm2
movdqa %xmm2,%xmm3
pmuludq %xmm5,%xmm3
pshufd $0xed,%xmm3,%xmm3
pshufd $0xf5,%xmm2,%xmm4
pmuludq %xmm5,%xmm4
pshufd $0xed,%xmm4,%xmm4
punpckldq %xmm4,%xmm3
movdqa %xmm2,%xmm4
psubd  %xmm3,%xmm4
psrld  $0x1,%xmm4
paddd  %xmm3,%xmm4
psrld  $0x6,%xmm4
pshufd $0xf5,%xmm4,%xmm3
pmuludq %xmm6,%xmm4
pshufd $0xe8,%xmm4,%xmm4
pmuludq %xmm6,%xmm3
pshufd $0xe8,%xmm3,%xmm3
punpckldq %xmm3,%xmm4
psubd  %xmm4,%xmm2
movdqa %xmm7,%xmm3
pmuludq %xmm5,%xmm3
pshufd $0xed,%xmm3,%xmm3
pshufd $0xf5,%xmm7,%xmm4
pmuludq %xmm5,%xmm4
pshufd $0xed,%xmm4,%xmm4
punpckldq %xmm4,%xmm3
movdqa %xmm7,%xmm4
psubd  %xmm3,%xmm4
psrld  $0x1,%xmm4
paddd  %xmm3,%xmm4
psrld  $0x6,%xmm4
pshufd $0xf5,%xmm4,%xmm3
pmuludq %xmm6,%xmm4
pshufd $0xe8,%xmm4,%xmm4
pmuludq %xmm6,%xmm3
pshufd $0xe8,%xmm3,%xmm3
punpckldq %xmm3,%xmm4
psubd  %xmm4,%xmm7
packuswb %xmm2,%xmm7
movdqa %xmm0,%xmm2
pmuludq %xmm5,%xmm2
pshufd $0xed,%xmm2,%xmm2
pshufd $0xf5,%xmm0,%xmm3
pmuludq %xmm5,%xmm3
pshufd $0xed,%xmm3,%xmm3
punpckldq %xmm3,%xmm2
movdqa %xmm0,%xmm3
psubd  %xmm2,%xmm3
psrld  $0x1,%xmm3
paddd  %xmm2,%xmm3
psrld  $0x6,%xmm3
pshufd $0xf5,%xmm3,%xmm2
pmuludq %xmm6,%xmm3
pshufd $0xe8,%xmm3,%xmm3
pmuludq %xmm6,%xmm2
pshufd $0xe8,%xmm2,%xmm2
punpckldq %xmm2,%xmm3
psubd  %xmm3,%xmm0
movdqa %xmm1,%xmm2
pmuludq %xmm5,%xmm2
pshufd $0xed,%xmm2,%xmm2
pshufd $0xf5,%xmm1,%xmm3
pmuludq %xmm5,%xmm3
pshufd $0xed,%xmm3,%xmm3
punpckldq %xmm3,%xmm2
movdqa %xmm1,%xmm3
psubd  %xmm2,%xmm3
psrld  $0x1,%xmm3
paddd  %xmm2,%xmm3
psrld  $0x6,%xmm3
pshufd $0xf5,%xmm3,%xmm2
pmuludq %xmm6,%xmm3
pshufd $0xe8,%xmm3,%xmm3
pmuludq %xmm6,%xmm2
pshufd $0xe8,%xmm2,%xmm2
punpckldq %xmm2,%xmm3
psubd  %xmm3,%xmm1
packuswb %xmm0,%xmm1
packuswb %xmm1,%xmm7
movdqu %xmm7,0x11(%rdx,%rsi,1)
add    $0x20,%rsi
paddd  %xmm9,%xmm12
paddd  %xmm9,%xmm14
paddd  %xmm9,%xmm11
paddd  %xmm9,%xmm10
add    $0xfffffffffffffffe,%rax
jne    1560 <apply_mask+0x450>
jmp    2169 <apply_mask+0x1059>
mov    %r11d,%r14d
and    $0xfffffff0,%r14d
lea    -0x10(%r14),%rax
mov    %rax,%r10
shr    $0x4,%r10
add    $0x1,%r10
test   %rax,%rax
je     234f <apply_mask+0x123f>
mov    %r10,%rax
and    $0xfffffffffffffffe,%rax
movdqa 0x175b(%rip),%xmm10
movdqa 0x1762(%rip),%xmm11
movdqa 0x1769(%rip),%xmm14
movdqa 0x1770(%rip),%xmm12
xor    %esi,%esi
pxor   %xmm13,%xmm13
movdqa 0x16f1(%rip),%xmm5
movdqa 0x16f9(%rip),%xmm6
movdqa 0x1760(%rip),%xmm8
movdqa 0x1767(%rip),%xmm9
nopl   0x0(%rax)
movdqu (%rcx,%rsi,1),%xmm1
movdqa %xmm1,%xmm7
punpcklbw %xmm13,%xmm7
movdqa %xmm7,%xmm4
punpckhwd %xmm13,%xmm4
punpcklwd %xmm13,%xmm7
punpckhbw %xmm13,%xmm1
movdqa %xmm1,%xmm0
punpckhwd %xmm13,%xmm0
punpcklwd %xmm13,%xmm1
paddd  %xmm11,%xmm1
paddd  %xmm10,%xmm0
paddd  %xmm12,%xmm7
paddd  %xmm14,%xmm4
movdqa %xmm4,%xmm2
pmuludq %xmm5,%xmm2
pshufd $0xed,%xmm2,%xmm2
pshufd $0xf5,%xmm4,%xmm3
pmuludq %xmm5,%xmm3
pshufd $0xed,%xmm3,%xmm3
punpckldq %xmm3,%xmm2
movdqa %xmm4,%xmm3
psubd  %xmm2,%xmm3
psrld  $0x1,%xmm3
paddd  %xmm2,%xmm3
psrld  $0x6,%xmm3
pshufd $0xf5,%xmm3,%xmm2
pmuludq %xmm6,%xmm3
pshufd $0xe8,%xmm3,%xmm3
pmuludq %xmm6,%xmm2
pshufd $0xe8,%xmm2,%xmm2
punpckldq %xmm2,%xmm3
psubd  %xmm3,%xmm4
movdqa %xmm7,%xmm2
pmuludq %xmm5,%xmm2
pshufd $0xed,%xmm2,%xmm2
pshufd $0xf5,%xmm7,%xmm3
pmuludq %xmm5,%xmm3
pshufd $0xed,%xmm3,%xmm3
punpckldq %xmm3,%xmm2
movdqa %xmm7,%xmm3
psubd  %xmm2,%xmm3
psrld  $0x1,%xmm3
paddd  %xmm2,%xmm3
psrld  $0x6,%xmm3
pshufd $0xf5,%xmm3,%xmm2
pmuludq %xmm6,%xmm3
pshufd $0xe8,%xmm3,%xmm3
pmuludq %xmm6,%xmm2
pshufd $0xe8,%xmm2,%xmm2
punpckldq %xmm2,%xmm3
psubd  %xmm3,%xmm7
packuswb %xmm4,%xmm7
movdqa %xmm0,%xmm2
pmuludq %xmm5,%xmm2
pshufd $0xed,%xmm2,%xmm2
pshufd $0xf5,%xmm0,%xmm3
pmuludq %xmm5,%xmm3
pshufd $0xed,%xmm3,%xmm3
punpckldq %xmm3,%xmm2
movdqa %xmm0,%xmm3
psubd  %xmm2,%xmm3
psrld  $0x1,%xmm3
paddd  %xmm2,%xmm3
psrld  $0x6,%xmm3
pshufd $0xf5,%xmm3,%xmm2
pmuludq %xmm6,%xmm3
pshufd $0xe8,%xmm3,%xmm3
pmuludq %xmm6,%xmm2
pshufd $0xe8,%xmm2,%xmm2
punpckldq %xmm2,%xmm3
psubd  %xmm3,%xmm0
movdqa %xmm1,%xmm2
pmuludq %xmm5,%xmm2
pshufd $0xed,%xmm2,%xmm2
pshufd $0xf5,%xmm1,%xmm3
pmuludq %xmm5,%xmm3
pshufd $0xed,%xmm3,%xmm3
punpckldq %xmm3,%xmm2
movdqa %xmm1,%xmm3
psubd  %xmm2,%xmm3
psrld  $0x1,%xmm3
paddd  %xmm2,%xmm3
psrld  $0x6,%xmm3
pshufd $0xf5,%xmm3,%xmm2
pmuludq %xmm6,%xmm3
pshufd $0xe8,%xmm3,%xmm3
pmuludq %xmm6,%xmm2
pshufd $0xe8,%xmm2,%xmm2
punpckldq %xmm2,%xmm3
psubd  %xmm3,%xmm1
packuswb %xmm0,%xmm1
packuswb %xmm1,%xmm7
movdqu %xmm7,0x1(%rdx,%rsi,1)
movdqu 0x10(%rcx,%rsi,1),%xmm0
movdqa %xmm0,%xmm2
punpcklbw %xmm13,%xmm2
movdqa %xmm2,%xmm3
punpckhwd %xmm13,%xmm3
punpcklwd %xmm13,%xmm2
punpckhbw %xmm13,%xmm0
movdqa %xmm0,%xmm4
punpckhwd %xmm13,%xmm4
punpcklwd %xmm13,%xmm0
movdqa %xmm11,%xmm1
paddd  %xmm8,%xmm1
paddd  %xmm0,%xmm1
movdqa %xmm10,%xmm0
paddd  %xmm8,%xmm0
paddd  %xmm4,%xmm0
movdqa %xmm12,%xmm7
paddd  %xmm8,%xmm7
paddd  %xmm2,%xmm7
movdqa %xmm14,%xmm2
paddd  %xmm8,%xmm2
paddd  %xmm3,%xmm2
movdqa %xmm2,%xmm3
pmuludq %xmm5,%xmm3
pshufd $0xed,%xmm3,%xmm3
pshufd $0xf5,%xmm2,%xmm4
pmuludq %xmm5,%xmm4
pshufd $0xed,%xmm4,%xmm4
punpckldq %xmm4,%xmm3
movdqa %xmm2,%xmm4
psubd  %xmm3,%xmm4
psrld  $0x1,%xmm4
paddd  %xmm3,%xmm4
psrld  $0x6,%xmm4
pshufd $0xf5,%xmm4,%xmm3
pmuludq %xmm6,%xmm4
pshufd $0xe8,%xmm4,%xmm4
pmuludq %xmm6,%xmm3
pshufd $0xe8,%xmm3,%xmm3
punpckldq %xmm3,%xmm4
psubd  %xmm4,%xmm2
movdqa %xmm7,%xmm3
pmuludq %xmm5,%xmm3
pshufd $0xed,%xmm3,%xmm3
pshufd $0xf5,%xmm7,%xmm4
pmuludq %xmm5,%xmm4
pshufd $0xed,%xmm4,%xmm4
punpckldq %xmm4,%xmm3
movdqa %xmm7,%xmm4
psubd  %xmm3,%xmm4
psrld  $0x1,%xmm4
paddd  %xmm3,%xmm4
psrld  $0x6,%xmm4
pshufd $0xf5,%xmm4,%xmm3
pmuludq %xmm6,%xmm4
pshufd $0xe8,%xmm4,%xmm4
pmuludq %xmm6,%xmm3
pshufd $0xe8,%xmm3,%xmm3
punpckldq %xmm3,%xmm4
psubd  %xmm4,%xmm7
packuswb %xmm2,%xmm7
movdqa %xmm0,%xmm2
pmuludq %xmm5,%xmm2
pshufd $0xed,%xmm2,%xmm2
pshufd $0xf5,%xmm0,%xmm3
pmuludq %xmm5,%xmm3
pshufd $0xed,%xmm3,%xmm3
punpckldq %xmm3,%xmm2
movdqa %xmm0,%xmm3
psubd  %xmm2,%xmm3
psrld  $0x1,%xmm3
paddd  %xmm2,%xmm3
psrld  $0x6,%xmm3
pshufd $0xf5,%xmm3,%xmm2
pmuludq %xmm6,%xmm3
pshufd $0xe8,%xmm3,%xmm3
pmuludq %xmm6,%xmm2
pshufd $0xe8,%xmm2,%xmm2
punpckldq %xmm2,%xmm3
psubd  %xmm3,%xmm0
movdqa %xmm1,%xmm2
pmuludq %xmm5,%xmm2
pshufd $0xed,%xmm2,%xmm2
pshufd $0xf5,%xmm1,%xmm3
pmuludq %xmm5,%xmm3
pshufd $0xed,%xmm3,%xmm3
punpckldq %xmm3,%xmm2
movdqa %xmm1,%xmm3
psubd  %xmm2,%xmm3
psrld  $0x1,%xmm3
paddd  %xmm2,%xmm3
psrld  $0x6,%xmm3
pshufd $0xf5,%xmm3,%xmm2
pmuludq %xmm6,%xmm3
pshufd $0xe8,%xmm3,%xmm3
pmuludq %xmm6,%xmm2
pshufd $0xe8,%xmm2,%xmm2
punpckldq %xmm2,%xmm3
psubd  %xmm3,%xmm1
packuswb %xmm0,%xmm1
packuswb %xmm1,%xmm7
movdqu %xmm7,0x11(%rdx,%rsi,1)
add    $0x20,%rsi
paddd  %xmm9,%xmm12
paddd  %xmm9,%xmm14
paddd  %xmm9,%xmm11
paddd  %xmm9,%xmm10
add    $0xfffffffffffffffe,%rax
jne    1970 <apply_mask+0x860>
jmp    2375 <apply_mask+0x1265>
mov    %r11d,%r14d
and    $0xfffffff0,%r14d
lea    -0x10(%r14),%rax
mov    %rax,%r10
shr    $0x4,%r10
add    $0x1,%r10
test   %rax,%rax
je     2562 <apply_mask+0x1452>
mov    %r10,%rax
and    $0xfffffffffffffffe,%rax
movdqa 0x12cb(%rip),%xmm10
movdqa 0x12d2(%rip),%xmm11
movdqa 0x12d9(%rip),%xmm14
movdqa 0x12e0(%rip),%xmm12
xor    %esi,%esi
pxor   %xmm13,%xmm13
movdqa 0x12e1(%rip),%xmm5
movdqa 0x12e9(%rip),%xmm6
movdqa 0x12f0(%rip),%xmm8
movdqa 0x12f7(%rip),%xmm9
nopl   0x0(%rax)
movdqu (%rcx,%rsi,1),%xmm1
movdqa %xmm1,%xmm7
punpcklbw %xmm13,%xmm7
movdqa %xmm7,%xmm4
punpckhwd %xmm13,%xmm4
punpcklwd %xmm13,%xmm7
punpckhbw %xmm13,%xmm1
movdqa %xmm1,%xmm0
punpckhwd %xmm13,%xmm0
punpcklwd %xmm13,%xmm1
paddd  %xmm11,%xmm1
paddd  %xmm10,%xmm0
paddd  %xmm12,%xmm7
paddd  %xmm14,%xmm4
movdqa %xmm4,%xmm2
pmuludq %xmm5,%xmm2
pshufd $0xed,%xmm2,%xmm2
pshufd $0xf5,%xmm4,%xmm3
pmuludq %xmm5,%xmm3
pshufd $0xed,%xmm3,%xmm3
punpckldq %xmm3,%xmm2
movdqa %xmm4,%xmm3
psubd  %xmm2,%xmm3
psrld  $0x1,%xmm3
paddd  %xmm2,%xmm3
psrld  $0x6,%xmm3
pshufd $0xf5,%xmm3,%xmm2
pmuludq %xmm6,%xmm3
pshufd $0xe8,%xmm3,%xmm3
pmuludq %xmm6,%xmm2
pshufd $0xe8,%xmm2,%xmm2
punpckldq %xmm2,%xmm3
psubd  %xmm3,%xmm4
movdqa %xmm7,%xmm2
pmuludq %xmm5,%xmm2
pshufd $0xed,%xmm2,%xmm2
pshufd $0xf5,%xmm7,%xmm3
pmuludq %xmm5,%xmm3
pshufd $0xed,%xmm3,%xmm3
punpckldq %xmm3,%xmm2
movdqa %xmm7,%xmm3
psubd  %xmm2,%xmm3
psrld  $0x1,%xmm3
paddd  %xmm2,%xmm3
psrld  $0x6,%xmm3
pshufd $0xf5,%xmm3,%xmm2
pmuludq %xmm6,%xmm3
pshufd $0xe8,%xmm3,%xmm3
pmuludq %xmm6,%xmm2
pshufd $0xe8,%xmm2,%xmm2
punpckldq %xmm2,%xmm3
psubd  %xmm3,%xmm7
packuswb %xmm4,%xmm7
movdqa %xmm0,%xmm2
pmuludq %xmm5,%xmm2
pshufd $0xed,%xmm2,%xmm2
pshufd $0xf5,%xmm0,%xmm3
pmuludq %xmm5,%xmm3
pshufd $0xed,%xmm3,%xmm3
punpckldq %xmm3,%xmm2
movdqa %xmm0,%xmm3
psubd  %xmm2,%xmm3
psrld  $0x1,%xmm3
paddd  %xmm2,%xmm3
psrld  $0x6,%xmm3
pshufd $0xf5,%xmm3,%xmm2
pmuludq %xmm6,%xmm3
pshufd $0xe8,%xmm3,%xmm3
pmuludq %xmm6,%xmm2
pshufd $0xe8,%xmm2,%xmm2
punpckldq %xmm2,%xmm3
psubd  %xmm3,%xmm0
movdqa %xmm1,%xmm2
pmuludq %xmm5,%xmm2
pshufd $0xed,%xmm2,%xmm2
pshufd $0xf5,%xmm1,%xmm3
pmuludq %xmm5,%xmm3
pshufd $0xed,%xmm3,%xmm3
punpckldq %xmm3,%xmm2
movdqa %xmm1,%xmm3
psubd  %xmm2,%xmm3
psrld  $0x1,%xmm3
paddd  %xmm2,%xmm3
psrld  $0x6,%xmm3
pshufd $0xf5,%xmm3,%xmm2
pmuludq %xmm6,%xmm3
pshufd $0xe8,%xmm3,%xmm3
pmuludq %xmm6,%xmm2
pshufd $0xe8,%xmm2,%xmm2
punpckldq %xmm2,%xmm3
psubd  %xmm3,%xmm1
packuswb %xmm0,%xmm1
packuswb %xmm1,%xmm7
movdqu %xmm7,0x1(%rdx,%rsi,1)
movdqu 0x10(%rcx,%rsi,1),%xmm0
movdqa %xmm0,%xmm2
punpcklbw %xmm13,%xmm2
movdqa %xmm2,%xmm3
punpckhwd %xmm13,%xmm3
punpcklwd %xmm13,%xmm2
punpckhbw %xmm13,%xmm0
movdqa %xmm0,%xmm4
punpckhwd %xmm13,%xmm4
punpcklwd %xmm13,%xmm0
movdqa %xmm11,%xmm1
paddd  %xmm8,%xmm1
paddd  %xmm0,%xmm1
movdqa %xmm10,%xmm0
paddd  %xmm8,%xmm0
paddd  %xmm4,%xmm0
movdqa %xmm12,%xmm7
paddd  %xmm8,%xmm7
paddd  %xmm2,%xmm7
movdqa %xmm14,%xmm2
paddd  %xmm8,%xmm2
paddd  %xmm3,%xmm2
movdqa %xmm2,%xmm3
pmuludq %xmm5,%xmm3
pshufd $0xed,%xmm3,%xmm3
pshufd $0xf5,%xmm2,%xmm4
pmuludq %xmm5,%xmm4
pshufd $0xed,%xmm4,%xmm4
punpckldq %xmm4,%xmm3
movdqa %xmm2,%xmm4
psubd  %xmm3,%xmm4
psrld  $0x1,%xmm4
paddd  %xmm3,%xmm4
psrld  $0x6,%xmm4
pshufd $0xf5,%xmm4,%xmm3
pmuludq %xmm6,%xmm4
pshufd $0xe8,%xmm4,%xmm4
pmuludq %xmm6,%xmm3
pshufd $0xe8,%xmm3,%xmm3
punpckldq %xmm3,%xmm4
psubd  %xmm4,%xmm2
movdqa %xmm7,%xmm3
pmuludq %xmm5,%xmm3
pshufd $0xed,%xmm3,%xmm3
pshufd $0xf5,%xmm7,%xmm4
pmuludq %xmm5,%xmm4
pshufd $0xed,%xmm4,%xmm4
punpckldq %xmm4,%xmm3
movdqa %xmm7,%xmm4
psubd  %xmm3,%xmm4
psrld  $0x1,%xmm4
paddd  %xmm3,%xmm4
psrld  $0x6,%xmm4
pshufd $0xf5,%xmm4,%xmm3
pmuludq %xmm6,%xmm4
pshufd $0xe8,%xmm4,%xmm4
pmuludq %xmm6,%xmm3
pshufd $0xe8,%xmm3,%xmm3
punpckldq %xmm3,%xmm4
psubd  %xmm4,%xmm7
packuswb %xmm2,%xmm7
movdqa %xmm0,%xmm2
pmuludq %xmm5,%xmm2
pshufd $0xed,%xmm2,%xmm2
pshufd $0xf5,%xmm0,%xmm3
pmuludq %xmm5,%xmm3
pshufd $0xed,%xmm3,%xmm3
punpckldq %xmm3,%xmm2
movdqa %xmm0,%xmm3
psubd  %xmm2,%xmm3
psrld  $0x1,%xmm3
paddd  %xmm2,%xmm3
psrld  $0x6,%xmm3
pshufd $0xf5,%xmm3,%xmm2
pmuludq %xmm6,%xmm3
pshufd $0xe8,%xmm3,%xmm3
pmuludq %xmm6,%xmm2
pshufd $0xe8,%xmm2,%xmm2
punpckldq %xmm2,%xmm3
psubd  %xmm3,%xmm0
movdqa %xmm1,%xmm2
pmuludq %xmm5,%xmm2
pshufd $0xed,%xmm2,%xmm2
pshufd $0xf5,%xmm1,%xmm3
pmuludq %xmm5,%xmm3
pshufd $0xed,%xmm3,%xmm3
punpckldq %xmm3,%xmm2
movdqa %xmm1,%xmm3
psubd  %xmm2,%xmm3
psrld  $0x1,%xmm3
paddd  %xmm2,%xmm3
psrld  $0x6,%xmm3
pshufd $0xf5,%xmm3,%xmm2
pmuludq %xmm6,%xmm3
pshufd $0xe8,%xmm3,%xmm3
pmuludq %xmm6,%xmm2
pshufd $0xe8,%xmm2,%xmm2
punpckldq %xmm2,%xmm3
psubd  %xmm3,%xmm1
packuswb %xmm0,%xmm1
packuswb %xmm1,%xmm7
movdqu %xmm7,0x11(%rdx,%rsi,1)
add    $0x20,%rsi
paddd  %xmm9,%xmm12
paddd  %xmm9,%xmm14
paddd  %xmm9,%xmm11
paddd  %xmm9,%xmm10
add    $0xfffffffffffffffe,%rax
jne    1d80 <apply_mask+0xc70>
jmp    2588 <apply_mask+0x1478>
mov    %r10d,%esi
and    $0xffffffe0,%esi
lea    -0x20(%rsi),%rax
mov    %rax,%rdi
shr    $0x5,%rdi
add    $0x1,%rdi
mov    %edi,%r11d
and    $0x3,%r11d
cmp    $0x60,%rax
jae    2773 <apply_mask+0x1663>
xor    %eax,%eax
jmp    27dd <apply_mask+0x16cd>
movdqa 0xf94(%rip),%xmm10
movdqa 0xf9b(%rip),%xmm11
movdqa 0xfa2(%rip),%xmm14
movdqa 0xfa9(%rip),%xmm12
xor    %esi,%esi
test   $0x1,%r10b
je     233d <apply_mask+0x122d>
movdqu (%rcx,%rsi,1),%xmm0
pxor   %xmm1,%xmm1
movdqa %xmm0,%xmm2
punpcklbw %xmm1,%xmm2
movdqa %xmm2,%xmm3
punpckhwd %xmm1,%xmm3
paddd  %xmm3,%xmm14
punpcklwd %xmm1,%xmm2
paddd  %xmm2,%xmm12
punpckhbw %xmm1,%xmm0
movdqa %xmm0,%xmm2
punpckhwd %xmm1,%xmm2
paddd  %xmm2,%xmm10
punpcklwd %xmm1,%xmm0
paddd  %xmm0,%xmm11
movdqa 0xe84(%rip),%xmm0
movdqa %xmm14,%xmm1
pmuludq %xmm0,%xmm1
pshufd $0xed,%xmm1,%xmm1
pshufd $0xf5,%xmm14,%xmm2
pmuludq %xmm0,%xmm2
pshufd $0xed,%xmm2,%xmm2
punpckldq %xmm2,%xmm1
movdqa %xmm14,%xmm2
psubd  %xmm1,%xmm2
psrld  $0x1,%xmm2
paddd  %xmm1,%xmm2
psrld  $0x6,%xmm2
movdqa 0xe54(%rip),%xmm1
pshufd $0xf5,%xmm2,%xmm3
pmuludq %xmm1,%xmm2
pshufd $0xe8,%xmm2,%xmm2
pmuludq %xmm1,%xmm3
pshufd $0xe8,%xmm3,%xmm3
punpckldq %xmm3,%xmm2
psubd  %xmm2,%xmm14
movdqa %xmm12,%xmm2
pmuludq %xmm0,%xmm2
pshufd $0xed,%xmm2,%xmm2
pshufd $0xf5,%xmm12,%xmm3
pmuludq %xmm0,%xmm3
pshufd $0xed,%xmm3,%xmm3
punpckldq %xmm3,%xmm2
movdqa %xmm12,%xmm3
psubd  %xmm2,%xmm3
psrld  $0x1,%xmm3
paddd  %xmm2,%xmm3
psrld  $0x6,%xmm3
pshufd $0xf5,%xmm3,%xmm2
pmuludq %xmm1,%xmm3
pshufd $0xe8,%xmm3,%xmm3
pmuludq %xmm1,%xmm2
pshufd $0xe8,%xmm2,%xmm2
punpckldq %xmm2,%xmm3
psubd  %xmm3,%xmm12
packuswb %xmm14,%xmm12
movdqa %xmm10,%xmm2
pmuludq %xmm0,%xmm2
pshufd $0xed,%xmm2,%xmm2
pshufd $0xf5,%xmm10,%xmm3
pmuludq %xmm0,%xmm3
pshufd $0xed,%xmm3,%xmm3
punpckldq %xmm3,%xmm2
movdqa %xmm10,%xmm3
psubd  %xmm2,%xmm3
psrld  $0x1,%xmm3
paddd  %xmm2,%xmm3
psrld  $0x6,%xmm3
pshufd $0xf5,%xmm3,%xmm2
pmuludq %xmm1,%xmm3
pshufd $0xe8,%xmm3,%xmm3
pmuludq %xmm1,%xmm2
pshufd $0xe8,%xmm2,%xmm2
punpckldq %xmm2,%xmm3
psubd  %xmm3,%xmm10
movdqa %xmm11,%xmm2
pmuludq %xmm0,%xmm2
pshufd $0xed,%xmm2,%xmm2
pshufd $0xf5,%xmm11,%xmm3
pmuludq %xmm0,%xmm3
pshufd $0xed,%xmm3,%xmm0
punpckldq %xmm0,%xmm2
movdqa %xmm11,%xmm0
psubd  %xmm2,%xmm0
psrld  $0x1,%xmm0
paddd  %xmm2,%xmm0
psrld  $0x6,%xmm0
pshufd $0xf5,%xmm0,%xmm2
pmuludq %xmm1,%xmm0
pshufd $0xe8,%xmm0,%xmm0
pmuludq %xmm1,%xmm2
pshufd $0xe8,%xmm2,%xmm1
punpckldq %xmm1,%xmm0
psubd  %xmm0,%xmm11
packuswb %xmm10,%xmm11
packuswb %xmm11,%xmm12
or     $0x1,%rsi
movdqu %xmm12,(%rdx,%rsi,1)
cmp    %r11,%r14
je     284b <apply_mask+0x173b>
lea    (%r14,%r14,2),%eax
jmp    120d <apply_mask+0xfd>
movdqa 0xd28(%rip),%xmm10
movdqa 0xd2f(%rip),%xmm11
movdqa 0xd36(%rip),%xmm14
movdqa 0xd3d(%rip),%xmm12
xor    %esi,%esi
test   $0x1,%r10b
je     2549 <apply_mask+0x1439>
movdqu (%rcx,%rsi,1),%xmm0
pxor   %xmm1,%xmm1
movdqa %xmm0,%xmm2
punpcklbw %xmm1,%xmm2
movdqa %xmm2,%xmm3
punpckhwd %xmm1,%xmm3
paddd  %xmm3,%xmm14
punpcklwd %xmm1,%xmm2
paddd  %xmm2,%xmm12
punpckhbw %xmm1,%xmm0
movdqa %xmm0,%xmm2
punpckhwd %xmm1,%xmm2
paddd  %xmm2,%xmm10
punpcklwd %xmm1,%xmm0
paddd  %xmm0,%xmm11
movdqa 0xc78(%rip),%xmm0
movdqa %xmm14,%xmm1
pmuludq %xmm0,%xmm1
pshufd $0xed,%xmm1,%xmm1
pshufd $0xf5,%xmm14,%xmm2
pmuludq %xmm0,%xmm2
pshufd $0xed,%xmm2,%xmm2
punpckldq %xmm2,%xmm1
movdqa %xmm14,%xmm2
psubd  %xmm1,%xmm2
psrld  $0x1,%xmm2
paddd  %xmm1,%xmm2
psrld  $0x6,%xmm2
movdqa 0xc48(%rip),%xmm1
pshufd $0xf5,%xmm2,%xmm3
pmuludq %xmm1,%xmm2
pshufd $0xe8,%xmm2,%xmm2
pmuludq %xmm1,%xmm3
pshufd $0xe8,%xmm3,%xmm3
punpckldq %xmm3,%xmm2
psubd  %xmm2,%xmm14
movdqa %xmm12,%xmm2
pmuludq %xmm0,%xmm2
pshufd $0xed,%xmm2,%xmm2
pshufd $0xf5,%xmm12,%xmm3
pmuludq %xmm0,%xmm3
pshufd $0xed,%xmm3,%xmm3
punpckldq %xmm3,%xmm2
movdqa %xmm12,%xmm3
psubd  %xmm2,%xmm3
psrld  $0x1,%xmm3
paddd  %xmm2,%xmm3
psrld  $0x6,%xmm3
pshufd $0xf5,%xmm3,%xmm2
pmuludq %xmm1,%xmm3
pshufd $0xe8,%xmm3,%xmm3
pmuludq %xmm1,%xmm2
pshufd $0xe8,%xmm2,%xmm2
punpckldq %xmm2,%xmm3
psubd  %xmm3,%xmm12
packuswb %xmm14,%xmm12
movdqa %xmm10,%xmm2
pmuludq %xmm0,%xmm2
pshufd $0xed,%xmm2,%xmm2
pshufd $0xf5,%xmm10,%xmm3
pmuludq %xmm0,%xmm3
pshufd $0xed,%xmm3,%xmm3
punpckldq %xmm3,%xmm2
movdqa %xmm10,%xmm3
psubd  %xmm2,%xmm3
psrld  $0x1,%xmm3
paddd  %xmm2,%xmm3
psrld  $0x6,%xmm3
pshufd $0xf5,%xmm3,%xmm2
pmuludq %xmm1,%xmm3
pshufd $0xe8,%xmm3,%xmm3
pmuludq %xmm1,%xmm2
pshufd $0xe8,%xmm2,%xmm2
punpckldq %xmm2,%xmm3
psubd  %xmm3,%xmm10
movdqa %xmm11,%xmm2
pmuludq %xmm0,%xmm2
pshufd $0xed,%xmm2,%xmm2
pshufd $0xf5,%xmm11,%xmm3
pmuludq %xmm0,%xmm3
pshufd $0xed,%xmm3,%xmm0
punpckldq %xmm0,%xmm2
movdqa %xmm11,%xmm0
psubd  %xmm2,%xmm0
psrld  $0x1,%xmm0
paddd  %xmm2,%xmm0
psrld  $0x6,%xmm0
pshufd $0xf5,%xmm0,%xmm2
pmuludq %xmm1,%xmm0
pshufd $0xe8,%xmm0,%xmm0
pmuludq %xmm1,%xmm2
pshufd $0xe8,%xmm2,%xmm1
punpckldq %xmm1,%xmm0
psubd  %xmm0,%xmm11
packuswb %xmm10,%xmm11
packuswb %xmm11,%xmm12
or     $0x1,%rsi
movdqu %xmm12,(%rdx,%rsi,1)
cmp    %r11,%r14
je     284b <apply_mask+0x173b>
lea    0x0(,%r14,8),%eax
sub    %r14d,%eax
jmp    130e <apply_mask+0x1fe>
movdqa 0xa95(%rip),%xmm10
movdqa 0xa9c(%rip),%xmm11
movdqa 0xaa3(%rip),%xmm14
movdqa 0xaaa(%rip),%xmm12
xor    %esi,%esi
test   $0x1,%r10b
je     275c <apply_mask+0x164c>
movdqu (%rcx,%rsi,1),%xmm0
pxor   %xmm1,%xmm1
movdqa %xmm0,%xmm2
punpcklbw %xmm1,%xmm2
movdqa %xmm2,%xmm3
punpckhwd %xmm1,%xmm3
paddd  %xmm3,%xmm14
punpcklwd %xmm1,%xmm2
paddd  %xmm2,%xmm12
punpckhbw %xmm1,%xmm0
movdqa %xmm0,%xmm2
punpckhwd %xmm1,%xmm2
paddd  %xmm2,%xmm10
punpcklwd %xmm1,%xmm0
paddd  %xmm0,%xmm11
movdqa 0xa65(%rip),%xmm0
movdqa %xmm14,%xmm1
pmuludq %xmm0,%xmm1
pshufd $0xed,%xmm1,%xmm1
pshufd $0xf5,%xmm14,%xmm2
pmuludq %xmm0,%xmm2
pshufd $0xed,%xmm2,%xmm2
punpckldq %xmm2,%xmm1
movdqa %xmm14,%xmm2
psubd  %xmm1,%xmm2
psrld  $0x1,%xmm2
paddd  %xmm1,%xmm2
psrld  $0x6,%xmm2
movdqa 0xa35(%rip),%xmm1
pshufd $0xf5,%xmm2,%xmm3
pmuludq %xmm1,%xmm2
pshufd $0xe8,%xmm2,%xmm2
pmuludq %xmm1,%xmm3
pshufd $0xe8,%xmm3,%xmm3
punpckldq %xmm3,%xmm2
psubd  %xmm2,%xmm14
movdqa %xmm12,%xmm2
pmuludq %xmm0,%xmm2
pshufd $0xed,%xmm2,%xmm2
pshufd $0xf5,%xmm12,%xmm3
pmuludq %xmm0,%xmm3
pshufd $0xed,%xmm3,%xmm3
punpckldq %xmm3,%xmm2
movdqa %xmm12,%xmm3
psubd  %xmm2,%xmm3
psrld  $0x1,%xmm3
paddd  %xmm2,%xmm3
psrld  $0x6,%xmm3
pshufd $0xf5,%xmm3,%xmm2
pmuludq %xmm1,%xmm3
pshufd $0xe8,%xmm3,%xmm3
pmuludq %xmm1,%xmm2
pshufd $0xe8,%xmm2,%xmm2
punpckldq %xmm2,%xmm3
psubd  %xmm3,%xmm12
packuswb %xmm14,%xmm12
movdqa %xmm10,%xmm2
pmuludq %xmm0,%xmm2
pshufd $0xed,%xmm2,%xmm2
pshufd $0xf5,%xmm10,%xmm3
pmuludq %xmm0,%xmm3
pshufd $0xed,%xmm3,%xmm3
punpckldq %xmm3,%xmm2
movdqa %xmm10,%xmm3
psubd  %xmm2,%xmm3
psrld  $0x1,%xmm3
paddd  %xmm2,%xmm3
psrld  $0x6,%xmm3
pshufd $0xf5,%xmm3,%xmm2
pmuludq %xmm1,%xmm3
pshufd $0xe8,%xmm3,%xmm3
pmuludq %xmm1,%xmm2
pshufd $0xe8,%xmm2,%xmm2
punpckldq %xmm2,%xmm3
psubd  %xmm3,%xmm10
movdqa %xmm11,%xmm2
pmuludq %xmm0,%xmm2
pshufd $0xed,%xmm2,%xmm2
pshufd $0xf5,%xmm11,%xmm3
pmuludq %xmm0,%xmm3
pshufd $0xed,%xmm3,%xmm0
punpckldq %xmm0,%xmm2
movdqa %xmm11,%xmm0
psubd  %xmm2,%xmm0
psrld  $0x1,%xmm0
paddd  %xmm2,%xmm0
psrld  $0x6,%xmm0
pshufd $0xf5,%xmm0,%xmm2
pmuludq %xmm1,%xmm0
pshufd $0xe8,%xmm0,%xmm0
pmuludq %xmm1,%xmm2
pshufd $0xe8,%xmm2,%xmm1
punpckldq %xmm1,%xmm0
psubd  %xmm0,%xmm11
packuswb %xmm10,%xmm11
packuswb %xmm11,%xmm12
or     $0x1,%rsi
movdqu %xmm12,(%rdx,%rsi,1)
cmp    %r11,%r14
je     284b <apply_mask+0x173b>
mov    %r14d,%eax
shl    $0x4,%eax
add    %r14d,%eax
jmp    140e <apply_mask+0x2fe>
and    $0xfffffffffffffffc,%rdi
xor    %eax,%eax
nopl   0x0(%rax)
movups (%rcx,%rax,1),%xmm0
movups 0x10(%rcx,%rax,1),%xmm1
movups %xmm0,0x1(%rdx,%rax,1)
movups %xmm1,0x11(%rdx,%rax,1)
movups 0x20(%rcx,%rax,1),%xmm0
movups 0x30(%rcx,%rax,1),%xmm1
movups %xmm0,0x21(%rdx,%rax,1)
movups %xmm1,0x31(%rdx,%rax,1)
movups 0x40(%rcx,%rax,1),%xmm0
movups 0x50(%rcx,%rax,1),%xmm1
movups %xmm0,0x41(%rdx,%rax,1)
movups %xmm1,0x51(%rdx,%rax,1)
movdqu 0x60(%rcx,%rax,1),%xmm0
movdqu 0x70(%rcx,%rax,1),%xmm1
movdqu %xmm0,0x61(%rdx,%rax,1)
movdqu %xmm1,0x71(%rdx,%rax,1)
sub    $0xffffffffffffff80,%rax
add    $0xfffffffffffffffc,%rdi
jne    2780 <apply_mask+0x1670>
test   %r11,%r11
je     2817 <apply_mask+0x1707>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movdqu (%rcx,%rax,1),%xmm0
movdqu 0x10(%rcx,%rax,1),%xmm1
mov    %rax,%rdi
or     $0x1,%rdi
movdqu %xmm0,(%rdx,%rdi,1)
movdqu %xmm1,0x10(%rdx,%rdi,1)
add    $0x20,%rax
add    $0xffffffffffffffff,%r11
jne    27f0 <apply_mask+0x16e0>
cmp    %r10,%rsi
je     284b <apply_mask+0x173b>
test   $0x18,%r10b
je     116b <apply_mask+0x5b>
mov    %rsi,%rax
mov    %r10d,%esi
and    $0xfffffff8,%esi
nop
mov    (%rcx,%rax,1),%rdi
mov    %rdi,0x1(%rdx,%rax,1)
add    $0x8,%rax
cmp    %rax,%rsi
jne    2830 <apply_mask+0x1720>
cmp    %r10,%rsi
jne    116b <apply_mask+0x5b>
add    $0x1,%r9d
mov    %r9d,%edi
mov    %r8d,%esi
pop    %rbx
pop    %r14
pop    %rbp
jmp    1030 <rsencode@plt>

LLVM IR (-O0):
define void @apply_mask(i32 %0, i32 %1, i8* %2, i8* %3, i32 %4) {
%6 = alloca i32
%7 = alloca i32
%8 = alloca i8*
%9 = alloca i8*
%10 = alloca i32
%11 = alloca i32
%12 = alloca i32
store i32 %0, i32* %6
store i32 %1, i32* %7
store i8* %2, i8** %8
store i8* %3, i8** %9
store i32 %4, i32* %10
store i32 0, i32* %11
%13 = load i32, i32* %6
switch i32 %13, label %123 [
i32 0, label %14
i32 1, label %36
i32 2, label %65
i32 3, label %94
]
14: ; preds = %5
%15 = load i8*, i8** %8
%16 = getelementptr inbounds i8, i8* %15, i64 0
store i8 0, i8* %16
store i32 0, i32* %12
br label %17
17: ; preds = %32, %14
%18 = load i32, i32* %12
%19 = load i32, i32* %7
%20 = icmp slt i32 %18, %19
br i1 %20, label %21, label %35
21: ; preds = %17
%22 = load i8*, i8** %9
%23 = load i32, i32* %12
%24 = sext i32 %23 to i64
%25 = getelementptr inbounds i8, i8* %22, i64 %24
%26 = load i8, i8* %25
%27 = load i8*, i8** %8
%28 = load i32, i32* %12
%29 = add nsw i32 %28, 1
%30 = sext i32 %29 to i64
%31 = getelementptr inbounds i8, i8* %27, i64 %30
store i8 %26, i8* %31
br label %32
32: ; preds = %21
%33 = load i32, i32* %12
%34 = add nsw i32 %33, 1
store i32 %34, i32* %12
br label %17
35: ; preds = %17
br label %123
36: ; preds = %5
%37 = load i8*, i8** %8
%38 = getelementptr inbounds i8, i8* %37, i64 0
store i8 1, i8* %38
store i32 0, i32* %12
br label %39
39: ; preds = %61, %36
%40 = load i32, i32* %12
%41 = load i32, i32* %7
%42 = icmp slt i32 %40, %41
br i1 %42, label %43, label %64
43: ; preds = %39
%44 = load i32, i32* %11
%45 = load i8*, i8** %9
%46 = load i32, i32* %12
%47 = sext i32 %46 to i64
%48 = getelementptr inbounds i8, i8* %45, i64 %47
%49 = load i8, i8* %48
%50 = zext i8 %49 to i32
%51 = add nsw i32 %44, %50
%52 = srem i32 %51, 113
%53 = trunc i32 %52 to i8
%54 = load i8*, i8** %8
%55 = load i32, i32* %12
%56 = add nsw i32 %55, 1
%57 = sext i32 %56 to i64
%58 = getelementptr inbounds i8, i8* %54, i64 %57
store i8 %53, i8* %58
%59 = load i32, i32* %11
%60 = add nsw i32 %59, 3
store i32 %60, i32* %11
br label %61
61: ; preds = %43
%62 = load i32, i32* %12
%63 = add nsw i32 %62, 1
store i32 %63, i32* %12
br label %39
64: ; preds = %39
br label %123
65: ; preds = %5
%66 = load i8*, i8** %8
%67 = getelementptr inbounds i8, i8* %66, i64 0
store i8 2, i8* %67
store i32 0, i32* %12
br label %68
68: ; preds = %90, %65
%69 = load i32, i32* %12
%70 = load i32, i32* %7
%71 = icmp slt i32 %69, %70
br i1 %71, label %72, label %93
72: ; preds = %68
%73 = load i32, i32* %11
%74 = load i8*, i8** %9
%75 = load i32, i32* %12
%76 = sext i32 %75 to i64
%77 = getelementptr inbounds i8, i8* %74, i64 %76
%78 = load i8, i8* %77
%79 = zext i8 %78 to i32
%80 = add nsw i32 %73, %79
%81 = srem i32 %80, 113
%82 = trunc i32 %81 to i8
%83 = load i8*, i8** %8
%84 = load i32, i32* %12
%85 = add nsw i32 %84, 1
%86 = sext i32 %85 to i64
%87 = getelementptr inbounds i8, i8* %83, i64 %86
store i8 %82, i8* %87
%88 = load i32, i32* %11
%89 = add nsw i32 %88, 7
store i32 %89, i32* %11
br label %90
90: ; preds = %72
%91 = load i32, i32* %12
%92 = add nsw i32 %91, 1
store i32 %92, i32* %12
br label %68
93: ; preds = %68
br label %123
94: ; preds = %5
%95 = load i8*, i8** %8
%96 = getelementptr inbounds i8, i8* %95, i64 0
store i8 3, i8* %96
store i32 0, i32* %12
br label %97
97: ; preds = %119, %94
%98 = load i32, i32* %12
%99 = load i32, i32* %7
%100 = icmp slt i32 %98, %99
br i1 %100, label %101, label %122
101: ; preds = %97
%102 = load i32, i32* %11
%103 = load i8*, i8** %9
%104 = load i32, i32* %12
%105 = sext i32 %104 to i64
%106 = getelementptr inbounds i8, i8* %103, i64 %105
%107 = load i8, i8* %106
%108 = zext i8 %107 to i32
%109 = add nsw i32 %102, %108
%110 = srem i32 %109, 113
%111 = trunc i32 %110 to i8
%112 = load i8*, i8** %8
%113 = load i32, i32* %12
%114 = add nsw i32 %113, 1
%115 = sext i32 %114 to i64
%116 = getelementptr inbounds i8, i8* %112, i64 %115
store i8 %111, i8* %116
%117 = load i32, i32* %11
%118 = add nsw i32 %117, 17
store i32 %118, i32* %11
br label %119
119: ; preds = %101
%120 = load i32, i32* %12
%121 = add nsw i32 %120, 1
store i32 %121, i32* %12
br label %97
122: ; preds = %97
br label %123
123: ; preds = %5, %122, %93, %64, %35
%124 = load i32, i32* %7
%125 = add nsw i32 %124, 1
%126 = load i32, i32* %10
%127 = load i8*, i8** %8
%128 = call i32 @rsencode(i32 %125, i32 %126, i8* %127)
ret void
}

LLVM IR (-O2):
define void @apply_mask(i32 %0, i32 %1, i8* %2, i8* nocapture %3, i32 %4) {
switch i32 %0, label %502 [
i32 0, label %6
i32 1, label %160
i32 2, label %274
i32 3, label %388
]
6: ; preds = %5
store i8 0, i8* %2
%7 = icmp sgt i32 %1, 0
br i1 %7, label %8, label %502
8: ; preds = %6
%9 = zext i32 %1 to i64
%10 = icmp ult i32 %1, 8
br i1 %10, label %123, label %11
11: ; preds = %8
%12 = getelementptr i8, i8* %2, i64 1
%13 = add nuw nsw i64 %9, 1
%14 = getelementptr i8, i8* %2, i64 %13
%15 = getelementptr i8, i8* %3, i64 %9
%16 = icmp ult i8* %12, %15
%17 = icmp ugt i8* %14, %3
%18 = and i1 %16, %17
br i1 %18, label %123, label %19
19: ; preds = %11
%20 = icmp ult i32 %1, 32
br i1 %20, label %108, label %21
21: ; preds = %19
%22 = and i64 %9, 4294967264
%23 = add nsw i64 %22, -32
%24 = lshr exact i64 %23, 5
%25 = add nuw nsw i64 %24, 1
%26 = and i64 %25, 3
%27 = icmp ult i64 %23, 96
br i1 %27, label %83, label %28
28: ; preds = %21
%29 = and i64 %25, 1152921504606846972
br label %30
30: ; preds = %30, %28
%31 = phi i64 [ 0, %28 ], [ %80, %30 ]
%32 = phi i64 [ 0, %28 ], [ %81, %30 ]
%33 = getelementptr inbounds i8, i8* %3, i64 %31
%34 = bitcast i8* %33 to <16 x i8>*
%35 = load <16 x i8>, <16 x i8>* %34
%36 = getelementptr inbounds i8, i8* %33, i64 16
%37 = bitcast i8* %36 to <16 x i8>*
%38 = load <16 x i8>, <16 x i8>* %37
%39 = or i64 %31, 1
%40 = getelementptr inbounds i8, i8* %2, i64 %39
%41 = bitcast i8* %40 to <16 x i8>*
store <16 x i8> %35, <16 x i8>* %41
%42 = getelementptr inbounds i8, i8* %40, i64 16
%43 = bitcast i8* %42 to <16 x i8>*
store <16 x i8> %38, <16 x i8>* %43
%44 = or i64 %31, 32
%45 = getelementptr inbounds i8, i8* %3, i64 %44
%46 = bitcast i8* %45 to <16 x i8>*
%47 = load <16 x i8>, <16 x i8>* %46
%48 = getelementptr inbounds i8, i8* %45, i64 16
%49 = bitcast i8* %48 to <16 x i8>*
%50 = load <16 x i8>, <16 x i8>* %49
%51 = or i64 %31, 33
%52 = getelementptr inbounds i8, i8* %2, i64 %51
%53 = bitcast i8* %52 to <16 x i8>*
store <16 x i8> %47, <16 x i8>* %53
%54 = getelementptr inbounds i8, i8* %52, i64 16
%55 = bitcast i8* %54 to <16 x i8>*
store <16 x i8> %50, <16 x i8>* %55
%56 = or i64 %31, 64
%57 = getelementptr inbounds i8, i8* %3, i64 %56
%58 = bitcast i8* %57 to <16 x i8>*
%59 = load <16 x i8>, <16 x i8>* %58
%60 = getelementptr inbounds i8, i8* %57, i64 16
%61 = bitcast i8* %60 to <16 x i8>*
%62 = load <16 x i8>, <16 x i8>* %61
%63 = or i64 %31, 65
%64 = getelementptr inbounds i8, i8* %2, i64 %63
%65 = bitcast i8* %64 to <16 x i8>*
store <16 x i8> %59, <16 x i8>* %65
%66 = getelementptr inbounds i8, i8* %64, i64 16
%67 = bitcast i8* %66 to <16 x i8>*
store <16 x i8> %62, <16 x i8>* %67
%68 = or i64 %31, 96
%69 = getelementptr inbounds i8, i8* %3, i64 %68
%70 = bitcast i8* %69 to <16 x i8>*
%71 = load <16 x i8>, <16 x i8>* %70
%72 = getelementptr inbounds i8, i8* %69, i64 16
%73 = bitcast i8* %72 to <16 x i8>*
%74 = load <16 x i8>, <16 x i8>* %73
%75 = or i64 %31, 97
%76 = getelementptr inbounds i8, i8* %2, i64 %75
%77 = bitcast i8* %76 to <16 x i8>*
store <16 x i8> %71, <16 x i8>* %77
%78 = getelementptr inbounds i8, i8* %76, i64 16
%79 = bitcast i8* %78 to <16 x i8>*
store <16 x i8> %74, <16 x i8>* %79
%80 = add nuw i64 %31, 128
%81 = add i64 %32, 4
%82 = icmp eq i64 %81, %29
br i1 %82, label %83, label %30
83: ; preds = %30, %21
%84 = phi i64 [ 0, %21 ], [ %80, %30 ]
%85 = icmp eq i64 %26, 0
br i1 %85, label %103, label %86
86: ; preds = %83, %86
%87 = phi i64 [ %100, %86 ], [ %84, %83 ]
%88 = phi i64 [ %101, %86 ], [ 0, %83 ]
%89 = getelementptr inbounds i8, i8* %3, i64 %87
%90 = bitcast i8* %89 to <16 x i8>*
%91 = load <16 x i8>, <16 x i8>* %90
%92 = getelementptr inbounds i8, i8* %89, i64 16
%93 = bitcast i8* %92 to <16 x i8>*
%94 = load <16 x i8>, <16 x i8>* %93
%95 = or i64 %87, 1
%96 = getelementptr inbounds i8, i8* %2, i64 %95
%97 = bitcast i8* %96 to <16 x i8>*
store <16 x i8> %91, <16 x i8>* %97
%98 = getelementptr inbounds i8, i8* %96, i64 16
%99 = bitcast i8* %98 to <16 x i8>*
store <16 x i8> %94, <16 x i8>* %99
%100 = add nuw i64 %87, 32
%101 = add i64 %88, 1
%102 = icmp eq i64 %101, %26
br i1 %102, label %103, label %86
103: ; preds = %86, %83
%104 = icmp eq i64 %22, %9
br i1 %104, label %502, label %105
105: ; preds = %103
%106 = and i64 %9, 24
%107 = icmp eq i64 %106, 0
br i1 %107, label %123, label %108
108: ; preds = %19, %105
%109 = phi i64 [ %22, %105 ], [ 0, %19 ]
%110 = and i64 %9, 4294967288
br label %111
111: ; preds = %111, %108
%112 = phi i64 [ %109, %108 ], [ %119, %111 ]
%113 = getelementptr inbounds i8, i8* %3, i64 %112
%114 = bitcast i8* %113 to <8 x i8>*
%115 = load <8 x i8>, <8 x i8>* %114
%116 = or i64 %112, 1
%117 = getelementptr inbounds i8, i8* %2, i64 %116
%118 = bitcast i8* %117 to <8 x i8>*
store <8 x i8> %115, <8 x i8>* %118
%119 = add nuw i64 %112, 8
%120 = icmp eq i64 %119, %110
br i1 %120, label %121, label %111
121: ; preds = %111
%122 = icmp eq i64 %110, %9
br i1 %122, label %502, label %123
123: ; preds = %11, %8, %105, %121
%124 = phi i64 [ 0, %8 ], [ 0, %11 ], [ %22, %105 ], [ %110, %121 ]
%125 = xor i64 %124, -1
%126 = add nsw i64 %125, %9
%127 = and i64 %9, 3
%128 = icmp eq i64 %127, 0
br i1 %128, label %138, label %129
129: ; preds = %123, %129
%130 = phi i64 [ %134, %129 ], [ %124, %123 ]
%131 = phi i64 [ %136, %129 ], [ 0, %123 ]
%132 = getelementptr inbounds i8, i8* %3, i64 %130
%133 = load i8, i8* %132
%134 = add nuw nsw i64 %130, 1
%135 = getelementptr inbounds i8, i8* %2, i64 %134
store i8 %133, i8* %135
%136 = add i64 %131, 1
%137 = icmp eq i64 %136, %127
br i1 %137, label %138, label %129
138: ; preds = %129, %123
%139 = phi i64 [ %124, %123 ], [ %134, %129 ]
%140 = icmp ult i64 %126, 3
br i1 %140, label %502, label %141
141: ; preds = %138, %141
%142 = phi i64 [ %157, %141 ], [ %139, %138 ]
%143 = getelementptr inbounds i8, i8* %3, i64 %142
%144 = load i8, i8* %143
%145 = add nuw nsw i64 %142, 1
%146 = getelementptr inbounds i8, i8* %2, i64 %145
store i8 %144, i8* %146
%147 = getelementptr inbounds i8, i8* %3, i64 %145
%148 = load i8, i8* %147
%149 = add nuw nsw i64 %142, 2
%150 = getelementptr inbounds i8, i8* %2, i64 %149
store i8 %148, i8* %150
%151 = getelementptr inbounds i8, i8* %3, i64 %149
%152 = load i8, i8* %151
%153 = add nuw nsw i64 %142, 3
%154 = getelementptr inbounds i8, i8* %2, i64 %153
store i8 %152, i8* %154
%155 = getelementptr inbounds i8, i8* %3, i64 %153
%156 = load i8, i8* %155
%157 = add nuw nsw i64 %142, 4
%158 = getelementptr inbounds i8, i8* %2, i64 %157
store i8 %156, i8* %158
%159 = icmp eq i64 %157, %9
br i1 %159, label %502, label %141
160: ; preds = %5
store i8 1, i8* %2
%161 = icmp sgt i32 %1, 0
br i1 %161, label %162, label %502
162: ; preds = %160
%163 = zext i32 %1 to i64
%164 = icmp ult i32 %1, 16
br i1 %164, label %231, label %165
165: ; preds = %162
%166 = getelementptr i8, i8* %2, i64 1
%167 = add nuw nsw i64 %163, 1
%168 = getelementptr i8, i8* %2, i64 %167
%169 = getelementptr i8, i8* %3, i64 %163
%170 = icmp ult i8* %166, %169
%171 = icmp ugt i8* %168, %3
%172 = and i1 %170, %171
br i1 %172, label %231, label %173
173: ; preds = %165
%174 = and i64 %163, 4294967280
%175 = trunc i64 %174 to i32
%176 = mul i32 %175, 3
%177 = add nsw i64 %174, -16
%178 = lshr exact i64 %177, 4
%179 = add nuw nsw i64 %178, 1
%180 = and i64 %179, 1
%181 = icmp eq i64 %177, 0
br i1 %181, label %214, label %182
182: ; preds = %173
%183 = and i64 %179, 2305843009213693950
br label %184
184: ; preds = %184, %182
%185 = phi i64 [ 0, %182 ], [ %210, %184 ]
%186 = phi <16 x i32> [ <i32 0, i32 3, i32 6, i32 9, i32 12, i32 15, i32 18, i32 21, i32 24, i32 27, i32 30, i32 33, i32 36, i32 39, i32 42, i32 45>, %182 ], [ %211, %184 ]
%187 = phi i64 [ 0, %182 ], [ %212, %184 ]
%188 = getelementptr inbounds i8, i8* %3, i64 %185
%189 = bitcast i8* %188 to <16 x i8>*
%190 = load <16 x i8>, <16 x i8>* %189
%191 = zext <16 x i8> %190 to <16 x i32>
%192 = add nuw nsw <16 x i32> %186, %191
%193 = urem <16 x i32> %192, <i32 113, i32 113, i32 113, i32 113, i32 113, i32 113, i32 113, i32 113, i32 113, i32 113, i32 113, i32 113, i32 113, i32 113, i32 113, i32 113>
%194 = trunc <16 x i32> %193 to <16 x i8>
%195 = or i64 %185, 1
%196 = getelementptr inbounds i8, i8* %2, i64 %195
%197 = bitcast i8* %196 to <16 x i8>*
store <16 x i8> %194, <16 x i8>* %197
%198 = or i64 %185, 16
%199 = add <16 x i32> %186, <i32 48, i32 48, i32 48, i32 48, i32 48, i32 48, i32 48, i32 48, i32 48, i32 48, i32 48, i32 48, i32 48, i32 48, i32 48, i32 48>
%200 = getelementptr inbounds i8, i8* %3, i64 %198
%201 = bitcast i8* %200 to <16 x i8>*
%202 = load <16 x i8>, <16 x i8>* %201
%203 = zext <16 x i8> %202 to <16 x i32>
%204 = add nuw nsw <16 x i32> %199, %203
%205 = urem <16 x i32> %204, <i32 113, i32 113, i32 113, i32 113, i32 113, i32 113, i32 113, i32 113, i32 113, i32 113, i32 113, i32 113, i32 113, i32 113, i32 113, i32 113>
%206 = trunc <16 x i32> %205 to <16 x i8>
%207 = or i64 %185, 17
%208 = getelementptr inbounds i8, i8* %2, i64 %207
%209 = bitcast i8* %208 to <16 x i8>*
store <16 x i8> %206, <16 x i8>* %209
%210 = add nuw i64 %185, 32
%211 = add <16 x i32> %186, <i32 96, i32 96, i32 96, i32 96, i32 96, i32 96, i32 96, i32 96, i32 96, i32 96, i32 96, i32 96, i32 96, i32 96, i32 96, i32 96>
%212 = add i64 %187, 2
%213 = icmp eq i64 %212, %183
br i1 %213, label %214, label %184
214: ; preds = %184, %173
%215 = phi i64 [ 0, %173 ], [ %210, %184 ]
%216 = phi <16 x i32> [ <i32 0, i32 3, i32 6, i32 9, i32 12, i32 15, i32 18, i32 21, i32 24, i32 27, i32 30, i32 33, i32 36, i32 39, i32 42, i32 45>, %173 ], [ %211, %184 ]
%217 = icmp eq i64 %180, 0
br i1 %217, label %229, label %218
218: ; preds = %214
%219 = getelementptr inbounds i8, i8* %3, i64 %215
%220 = bitcast i8* %219 to <16 x i8>*
%221 = load <16 x i8>, <16 x i8>* %220
%222 = zext <16 x i8> %221 to <16 x i32>
%223 = add nuw nsw <16 x i32> %216, %222
%224 = urem <16 x i32> %223, <i32 113, i32 113, i32 113, i32 113, i32 113, i32 113, i32 113, i32 113, i32 113, i32 113, i32 113, i32 113, i32 113, i32 113, i32 113, i32 113>
%225 = trunc <16 x i32> %224 to <16 x i8>
%226 = or i64 %215, 1
%227 = getelementptr inbounds i8, i8* %2, i64 %226
%228 = bitcast i8* %227 to <16 x i8>*
store <16 x i8> %225, <16 x i8>* %228
br label %229
229: ; preds = %214, %218
%230 = icmp eq i64 %174, %163
br i1 %230, label %502, label %231
231: ; preds = %165, %162, %229
%232 = phi i64 [ 0, %165 ], [ 0, %162 ], [ %174, %229 ]
%233 = phi i32 [ 0, %165 ], [ 0, %162 ], [ %176, %229 ]
%234 = xor i64 %232, -1
%235 = and i64 %163, 1
%236 = icmp eq i64 %235, 0
br i1 %236, label %247, label %237
237: ; preds = %231
%238 = getelementptr inbounds i8, i8* %3, i64 %232
%239 = load i8, i8* %238
%240 = zext i8 %239 to i32
%241 = add nuw nsw i32 %233, %240
%242 = urem i32 %241, 113
%243 = trunc i32 %242 to i8
%244 = or i64 %232, 1
%245 = getelementptr inbounds i8, i8* %2, i64 %244
store i8 %243, i8* %245
%246 = add nuw nsw i32 %233, 3
br label %247
247: ; preds = %237, %231
%248 = phi i64 [ %232, %231 ], [ %244, %237 ]
%249 = phi i32 [ %233, %231 ], [ %246, %237 ]
%250 = sub nsw i64 0, %163
%251 = icmp eq i64 %234, %250
br i1 %251, label %502, label %252
252: ; preds = %247, %252
%253 = phi i64 [ %270, %252 ], [ %248, %247 ]
%254 = phi i32 [ %272, %252 ], [ %249, %247 ]
%255 = getelementptr inbounds i8, i8* %3, i64 %253
%256 = load i8, i8* %255
%257 = zext i8 %256 to i32
%258 = add nuw nsw i32 %254, %257
%259 = urem i32 %258, 113
%260 = trunc i32 %259 to i8
%261 = add nuw nsw i64 %253, 1
%262 = getelementptr inbounds i8, i8* %2, i64 %261
store i8 %260, i8* %262
%263 = add nuw nsw i32 %254, 3
%264 = getelementptr inbounds i8, i8* %3, i64 %261
%265 = load i8, i8* %264
%266 = zext i8 %265 to i32
%267 = add nuw nsw i32 %263, %266
%268 = urem i32 %267, 113
%269 = trunc i32 %268 to i8
%270 = add nuw nsw i64 %253, 2
%271 = getelementptr inbounds i8, i8* %2, i64 %270
store i8 %269, i8* %271
%272 = add nuw nsw i32 %254, 6
%273 = icmp eq i64 %270, %163
br i1 %273, label %502, label %252
274: ; preds = %5
store i8 2, i8* %2
%275 = icmp sgt i32 %1, 0
br i1 %275, label %276, label %502
276: ; preds = %274
%277 = zext i32 %1 to i64
%278 = icmp ult i32 %1, 16
br i1 %278, label %345, label %279
279: ; preds = %276
%280 = getelementptr i8, i8* %2, i64 1
%281 = add nuw nsw i64 %277, 1
%282 = getelementptr i8, i8* %2, i64 %281
%283 = getelementptr i8, i8* %3, i64 %277
%284 = icmp ult i8* %280, %283
%285 = icmp ugt i8* %282, %3
%286 = and i1 %284, %285
br i1 %286, label %345, label %287
287: ; preds = %279
%288 = and i64 %277, 4294967280
%289 = trunc i64 %288 to i32
%290 = mul i32 %289, 7
%291 = add nsw i64 %288, -16
%292 = lshr exact i64 %291, 4
%293 = add nuw nsw i64 %292, 1
%294 = and i64 %293, 1
%295 = icmp eq i64 %291, 0
br i1 %295, label %328, label %296
296: ; preds = %287
%297 = and i64 %293, 2305843009213693950
br label %298
298: ; preds = %298, %296
%299 = phi i64 [ 0, %296 ], [ %324, %298 ]
%300 = phi <16 x i32> [ <i32 0, i32 7, i32 14, i32 21, i32 28, i32 35, i32 42, i32 49, i32 56, i32 63, i32 70, i32 77, i32 84, i32 91, i32 98, i32 105>, %296 ], [ %325, %298 ]
%301 = phi i64 [ 0, %296 ], [ %326, %298 ]
%302 = getelementptr inbounds i8, i8* %3, i64 %299
%303 = bitcast i8* %302 to <16 x i8>*
%304 = load <16 x i8>, <16 x i8>* %303
%305 = zext <16 x i8> %304 to <16 x i32>
%306 = add nuw nsw <16 x i32> %300, %305
%307 = urem <16 x i32> %306, <i32 113, i32 113, i32 113, i32 113, i32 113, i32 113, i32 113, i32 113, i32 113, i32 113, i32 113, i32 113, i32 113, i32 113, i32 113, i32 113>
%308 = trunc <16 x i32> %307 to <16 x i8>
%309 = or i64 %299, 1
%310 = getelementptr inbounds i8, i8* %2, i64 %309
%311 = bitcast i8* %310 to <16 x i8>*
store <16 x i8> %308, <16 x i8>* %311
%312 = or i64 %299, 16
%313 = add <16 x i32> %300, <i32 112, i32 112, i32 112, i32 112, i32 112, i32 112, i32 112, i32 112, i32 112, i32 112, i32 112, i32 112, i32 112, i32 112, i32 112, i32 112>
%314 = getelementptr inbounds i8, i8* %3, i64 %312
%315 = bitcast i8* %314 to <16 x i8>*
%316 = load <16 x i8>, <16 x i8>* %315
%317 = zext <16 x i8> %316 to <16 x i32>
%318 = add nuw nsw <16 x i32> %313, %317
%319 = urem <16 x i32> %318, <i32 113, i32 113, i32 113, i32 113, i32 113, i32 113, i32 113, i32 113, i32 113, i32 113, i32 113, i32 113, i32 113, i32 113, i32 113, i32 113>
%320 = trunc <16 x i32> %319 to <16 x i8>
%321 = or i64 %299, 17
%322 = getelementptr inbounds i8, i8* %2, i64 %321
%323 = bitcast i8* %322 to <16 x i8>*
store <16 x i8> %320, <16 x i8>* %323
%324 = add nuw i64 %299, 32
%325 = add <16 x i32> %300, <i32 224, i32 224, i32 224, i32 224, i32 224, i32 224, i32 224, i32 224, i32 224, i32 224, i32 224, i32 224, i32 224, i32 224, i32 224, i32 224>
%326 = add i64 %301, 2
%327 = icmp eq i64 %326, %297
br i1 %327, label %328, label %298
328: ; preds = %298, %287
%329 = phi i64 [ 0, %287 ], [ %324, %298 ]
%330 = phi <16 x i32> [ <i32 0, i32 7, i32 14, i32 21, i32 28, i32 35, i32 42, i32 49, i32 56, i32 63, i32 70, i32 77, i32 84, i32 91, i32 98, i32 105>, %287 ], [ %325, %298 ]
%331 = icmp eq i64 %294, 0
br i1 %331, label %343, label %332
332: ; preds = %328
%333 = getelementptr inbounds i8, i8* %3, i64 %329
%334 = bitcast i8* %333 to <16 x i8>*
%335 = load <16 x i8>, <16 x i8>* %334
%336 = zext <16 x i8> %335 to <16 x i32>
%337 = add nuw nsw <16 x i32> %330, %336
%338 = urem <16 x i32> %337, <i32 113, i32 113, i32 113, i32 113, i32 113, i32 113, i32 113, i32 113, i32 113, i32 113, i32 113, i32 113, i32 113, i32 113, i32 113, i32 113>
%339 = trunc <16 x i32> %338 to <16 x i8>
%340 = or i64 %329, 1
%341 = getelementptr inbounds i8, i8* %2, i64 %340
%342 = bitcast i8* %341 to <16 x i8>*
store <16 x i8> %339, <16 x i8>* %342
br label %343
343: ; preds = %328, %332
%344 = icmp eq i64 %288, %277
br i1 %344, label %502, label %345
345: ; preds = %279, %276, %343
%346 = phi i64 [ 0, %279 ], [ 0, %276 ], [ %288, %343 ]
%347 = phi i32 [ 0, %279 ], [ 0, %276 ], [ %290, %343 ]
%348 = xor i64 %346, -1
%349 = and i64 %277, 1
%350 = icmp eq i64 %349, 0
br i1 %350, label %361, label %351
351: ; preds = %345
%352 = getelementptr inbounds i8, i8* %3, i64 %346
%353 = load i8, i8* %352
%354 = zext i8 %353 to i32
%355 = add nuw nsw i32 %347, %354
%356 = urem i32 %355, 113
%357 = trunc i32 %356 to i8
%358 = or i64 %346, 1
%359 = getelementptr inbounds i8, i8* %2, i64 %358
store i8 %357, i8* %359
%360 = add nuw nsw i32 %347, 7
br label %361
361: ; preds = %351, %345
%362 = phi i64 [ %346, %345 ], [ %358, %351 ]
%363 = phi i32 [ %347, %345 ], [ %360, %351 ]
%364 = sub nsw i64 0, %277
%365 = icmp eq i64 %348, %364
br i1 %365, label %502, label %366
366: ; preds = %361, %366
%367 = phi i64 [ %384, %366 ], [ %362, %361 ]
%368 = phi i32 [ %386, %366 ], [ %363, %361 ]
%369 = getelementptr inbounds i8, i8* %3, i64 %367
%370 = load i8, i8* %369
%371 = zext i8 %370 to i32
%372 = add nuw nsw i32 %368, %371
%373 = urem i32 %372, 113
%374 = trunc i32 %373 to i8
%375 = add nuw nsw i64 %367, 1
%376 = getelementptr inbounds i8, i8* %2, i64 %375
store i8 %374, i8* %376
%377 = add nuw nsw i32 %368, 7
%378 = getelementptr inbounds i8, i8* %3, i64 %375
%379 = load i8, i8* %378
%380 = zext i8 %379 to i32
%381 = add nuw nsw i32 %377, %380
%382 = urem i32 %381, 113
%383 = trunc i32 %382 to i8
%384 = add nuw nsw i64 %367, 2
%385 = getelementptr inbounds i8, i8* %2, i64 %384
store i8 %383, i8* %385
%386 = add nuw nsw i32 %368, 14
%387 = icmp eq i64 %384, %277
br i1 %387, label %502, label %366
388: ; preds = %5
store i8 3, i8* %2
%389 = icmp sgt i32 %1, 0
br i1 %389, label %390, label %502
390: ; preds = %388
%391 = zext i32 %1 to i64
%392 = icmp ult i32 %1, 16
br i1 %392, label %459, label %393
393: ; preds = %390
%394 = getelementptr i8, i8* %2, i64 1
%395 = add nuw nsw i64 %391, 1
%396 = getelementptr i8, i8* %2, i64 %395
%397 = getelementptr i8, i8* %3, i64 %391
%398 = icmp ult i8* %394, %397
%399 = icmp ugt i8* %396, %3
%400 = and i1 %398, %399
br i1 %400, label %459, label %401
401: ; preds = %393
%402 = and i64 %391, 4294967280
%403 = trunc i64 %402 to i32
%404 = mul i32 %403, 17
%405 = add nsw i64 %402, -16
%406 = lshr exact i64 %405, 4
%407 = add nuw nsw i64 %406, 1
%408 = and i64 %407, 1
%409 = icmp eq i64 %405, 0
br i1 %409, label %442, label %410
410: ; preds = %401
%411 = and i64 %407, 2305843009213693950
br label %412
412: ; preds = %412, %410
%413 = phi i64 [ 0, %410 ], [ %438, %412 ]
%414 = phi <16 x i32> [ <i32 0, i32 17, i32 34, i32 51, i32 68, i32 85, i32 102, i32 119, i32 136, i32 153, i32 170, i32 187, i32 204, i32 221, i32 238, i32 255>, %410 ], [ %439, %412 ]
%415 = phi i64 [ 0, %410 ], [ %440, %412 ]
%416 = getelementptr inbounds i8, i8* %3, i64 %413
%417 = bitcast i8* %416 to <16 x i8>*
%418 = load <16 x i8>, <16 x i8>* %417
%419 = zext <16 x i8> %418 to <16 x i32>
%420 = add nuw nsw <16 x i32> %414, %419
%421 = urem <16 x i32> %420, <i32 113, i32 113, i32 113, i32 113, i32 113, i32 113, i32 113, i32 113, i32 113, i32 113, i32 113, i32 113, i32 113, i32 113, i32 113, i32 113>
%422 = trunc <16 x i32> %421 to <16 x i8>
%423 = or i64 %413, 1
%424 = getelementptr inbounds i8, i8* %2, i64 %423
%425 = bitcast i8* %424 to <16 x i8>*
store <16 x i8> %422, <16 x i8>* %425
%426 = or i64 %413, 16
%427 = add <16 x i32> %414, <i32 272, i32 272, i32 272, i32 272, i32 272, i32 272, i32 272, i32 272, i32 272, i32 272, i32 272, i32 272, i32 272, i32 272, i32 272, i32 272>
%428 = getelementptr inbounds i8, i8* %3, i64 %426
%429 = bitcast i8* %428 to <16 x i8>*
%430 = load <16 x i8>, <16 x i8>* %429
%431 = zext <16 x i8> %430 to <16 x i32>
%432 = add nuw nsw <16 x i32> %427, %431
%433 = urem <16 x i32> %432, <i32 113, i32 113, i32 113, i32 113, i32 113, i32 113, i32 113, i32 113, i32 113, i32 113, i32 113, i32 113, i32 113, i32 113, i32 113, i32 113>
%434 = trunc <16 x i32> %433 to <16 x i8>
%435 = or i64 %413, 17
%436 = getelementptr inbounds i8, i8* %2, i64 %435
%437 = bitcast i8* %436 to <16 x i8>*
store <16 x i8> %434, <16 x i8>* %437
%438 = add nuw i64 %413, 32
%439 = add <16 x i32> %414, <i32 544, i32 544, i32 544, i32 544, i32 544, i32 544, i32 544, i32 544, i32 544, i32 544, i32 544, i32 544, i32 544, i32 544, i32 544, i32 544>
%440 = add i64 %415, 2
%441 = icmp eq i64 %440, %411
br i1 %441, label %442, label %412
442: ; preds = %412, %401
%443 = phi i64 [ 0, %401 ], [ %438, %412 ]
%444 = phi <16 x i32> [ <i32 0, i32 17, i32 34, i32 51, i32 68, i32 85, i32 102, i32 119, i32 136, i32 153, i32 170, i32 187, i32 204, i32 221, i32 238, i32 255>, %401 ], [ %439, %412 ]
%445 = icmp eq i64 %408, 0
br i1 %445, label %457, label %446
446: ; preds = %442
%447 = getelementptr inbounds i8, i8* %3, i64 %443
%448 = bitcast i8* %447 to <16 x i8>*
%449 = load <16 x i8>, <16 x i8>* %448
%450 = zext <16 x i8> %449 to <16 x i32>
%451 = add nuw nsw <16 x i32> %444, %450
%452 = urem <16 x i32> %451, <i32 113, i32 113, i32 113, i32 113, i32 113, i32 113, i32 113, i32 113, i32 113, i32 113, i32 113, i32 113, i32 113, i32 113, i32 113, i32 113>
%453 = trunc <16 x i32> %452 to <16 x i8>
%454 = or i64 %443, 1
%455 = getelementptr inbounds i8, i8* %2, i64 %454
%456 = bitcast i8* %455 to <16 x i8>*
store <16 x i8> %453, <16 x i8>* %456
br label %457
457: ; preds = %442, %446
%458 = icmp eq i64 %402, %391
br i1 %458, label %502, label %459
459: ; preds = %393, %390, %457
%460 = phi i64 [ 0, %393 ], [ 0, %390 ], [ %402, %457 ]
%461 = phi i32 [ 0, %393 ], [ 0, %390 ], [ %404, %457 ]
%462 = xor i64 %460, -1
%463 = and i64 %391, 1
%464 = icmp eq i64 %463, 0
br i1 %464, label %475, label %465
465: ; preds = %459
%466 = getelementptr inbounds i8, i8* %3, i64 %460
%467 = load i8, i8* %466
%468 = zext i8 %467 to i32
%469 = add nuw nsw i32 %461, %468
%470 = urem i32 %469, 113
%471 = trunc i32 %470 to i8
%472 = or i64 %460, 1
%473 = getelementptr inbounds i8, i8* %2, i64 %472
store i8 %471, i8* %473
%474 = add nuw nsw i32 %461, 17
br label %475
475: ; preds = %465, %459
%476 = phi i64 [ %460, %459 ], [ %472, %465 ]
%477 = phi i32 [ %461, %459 ], [ %474, %465 ]
%478 = sub nsw i64 0, %391
%479 = icmp eq i64 %462, %478
br i1 %479, label %502, label %480
480: ; preds = %475, %480
%481 = phi i64 [ %498, %480 ], [ %476, %475 ]
%482 = phi i32 [ %500, %480 ], [ %477, %475 ]
%483 = getelementptr inbounds i8, i8* %3, i64 %481
%484 = load i8, i8* %483
%485 = zext i8 %484 to i32
%486 = add nuw nsw i32 %482, %485
%487 = urem i32 %486, 113
%488 = trunc i32 %487 to i8
%489 = add nuw nsw i64 %481, 1
%490 = getelementptr inbounds i8, i8* %2, i64 %489
store i8 %488, i8* %490
%491 = add nuw nsw i32 %482, 17
%492 = getelementptr inbounds i8, i8* %3, i64 %489
%493 = load i8, i8* %492
%494 = zext i8 %493 to i32
%495 = add nuw nsw i32 %491, %494
%496 = urem i32 %495, 113
%497 = trunc i32 %496 to i8
%498 = add nuw nsw i64 %481, 2
%499 = getelementptr inbounds i8, i8* %2, i64 %498
store i8 %497, i8* %499
%500 = add nuw nsw i32 %482, 34
%501 = icmp eq i64 %498, %391
br i1 %501, label %502, label %480
502: ; preds = %475, %480, %361, %366, %247, %252, %138, %141, %457, %343, %229, %103, %121, %388, %274, %160, %6, %5
%503 = add nsw i32 %1, 1
%504 = tail call i32 @rsencode(i32 %503, i32 %4, i8* %2)
ret void
}