int ps_replace(unsigned short *s, char **s1, unsigned char *template,
               int size) {
  int i = 0, j = 0;
  while (i < size) {
    switch (s[i]) {
    case 0x0647:
      if (i < size - 1 && s[i + 1] != '\0') {
        s1[j++] = "h";
        template[j - 1] = 1;
        s1[j++] = "h";
        template[j - 1] = 2;
      } else {
        s1[j++] = "1";
        template[j - 1] = 1;
      };
      break;
    case 0x0639:
      s1[j++] = "1";
      template[j - 1] = 0;
      break;
    case 0x0627:
      s1[j++] = "2";
      template[j - 1] = 0;
      break;
    case 0x0622:
      s1[j++] = "2";
      template[j - 1] = 0;
      break;
    case 0x06D0:
      s1[j++] = "7";
      template[j - 1] = 0;
      break;
    case 0x064A:
      s1[j++] = "4";
      template[j - 1] = 0;
      break;
    case 0x06CC:
      s1[j++] = "8";
      template[j - 1] = 0;
      break;
    case 0x06CD:
      s1[j++] = "10";
      template[j - 1] = 0;
      break;
    case 0x0626:
      s1[j++] = "10";
      template[j - 1] = 0;
      break;
    case 0x0648:
      s1[j++] = "6";
      template[j - 1] = 0;
      break;
    case 0x0624:
      s1[j++] = "6";
      template[j - 1] = 0;
      break;
    case 0x0643:
      s1[j++] = "k";
      template[j - 1] = 1;
      break;
    case 0x06A9:
      s1[j++] = "k";
      template[j - 1] = 1;
      break;
    case 0x062E:
      s1[j++] = "kh";
      template[j - 1] = 1;
      break;
    case 0x069A:
      s1[j++] = "kh";
      template[j - 1] = 1;
      break;
    case 0x06AB:
      s1[j++] = "g";
      template[j - 1] = 1;
      break;
    case 0x0696:
      s1[j++] = "g";
      template[j - 1] = 1;
      break;
    case 0x063A:
      s1[j++] = "g";
      template[j - 1] = 1;
      break;
    case 0x0686:
      s1[j++] = "ch";
      template[j - 1] = 1;
      break;
    case 0x062C:
      s1[j++] = "j";
      template[j - 1] = 1;
      break;
    case 0x0698:
      s1[j++] = "j";
      template[j - 1] = 1;
      break;
    case 0x067C:
      s1[j++] = "tt";
      template[j - 1] = 1;
      break;
    case 0x0689:
      s1[j++] = "dd";
      template[j - 1] = 1;
      break;
    case 0x062A:
      s1[j++] = "t";
      template[j - 1] = 1;
      break;
    case 0x0637:
      s1[j++] = "t";
      template[j - 1] = 1;
      break;
    case 0x062F:
      s1[j++] = "d";
      template[j - 1] = 1;
      break;
    case 0x0630:
      s1[j++] = "d";
      template[j - 1] = 1;
      break;
    case 0x0646:
      s1[j++] = "n";
      template[j - 1] = 1;
      break;
    case 0x067E:
      s1[j++] = "p";
      template[j - 1] = 1;
      break;
    case 0x0641:
      s1[j++] = "f";
      template[j - 1] = 1;
      break;
    case 0x0628:
      s1[j++] = "b";
      template[j - 1] = 1;
      break;
    case 0x0645:
      s1[j++] = "m";
      template[j - 1] = 1;
      break;
    case 0x0631:
      s1[j++] = "r";
      template[j - 1] = 1;
      break;
    case 0x0644:
      s1[j++] = "l";
      template[j - 1] = 1;
      break;
    case 0x0634:
      s1[j++] = "sh";
      template[j - 1] = 1;
      break;
    case 0x0633:
      s1[j++] = "s";
      template[j - 1] = 1;
      break;
    case 0x062B:
      s1[j++] = "s";
      template[j - 1] = 1;
      break;
    case 0x0685:
      s1[j++] = "s";
      template[j - 1] = 1;
      break;
    case 0x0635:
      s1[j++] = "s";
      template[j - 1] = 1;
      break;
    case 0x062D:
      s1[j++] = "h";
      template[j - 1] = 1;
      break;
    case 0x0642:
      s1[j++] = "k";
      template[j - 1] = 1;
      break;
    case 0x0632:
      s1[j++] = "z";
      template[j - 1] = 1;
      break;
    case 0x0681:
      s1[j++] = "z";
      template[j - 1] = 1;
      break;
    case 0x0636:
      s1[j++] = "z";
      template[j - 1] = 1;
      break;
    case 0x0638:
      s1[j++] = "z";
      template[j - 1] = 1;
      break;
    case 0x0693:
      s1[j++] = "ddh";
      template[j - 1] = 1;
      break;
    }
    ++i;
  }
  return (j);
}


x86 assembly (clang, -O0):
<ps_replace>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %ecx,-0x1c(%rbp)
movl   $0x0,-0x20(%rbp)
movl   $0x0,-0x24(%rbp)
mov    -0x20(%rbp),%eax
cmp    -0x1c(%rbp),%eax
jge    1b22 <ps_replace+0xa22>
mov    -0x8(%rbp),%rax
movslq -0x20(%rbp),%rcx
movzwl (%rax,%rcx,2),%eax
add    $0xfffff9de,%eax
mov    %eax,%ecx
mov    %rcx,-0x30(%rbp)
sub    $0xae,%eax
ja     1b14 <ps_replace+0xa14>
mov    -0x30(%rbp),%rax
lea    0xea6(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
mov    -0x20(%rbp),%eax
mov    -0x1c(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jge    11ef <ps_replace+0xef>
mov    -0x8(%rbp),%rax
mov    -0x20(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movzwl (%rax,%rcx,2),%eax
cmp    $0x0,%eax
je     11ef <ps_replace+0xef>
mov    -0x10(%rbp),%rax
mov    -0x24(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x24(%rbp)
movslq %ecx,%rcx
lea    0x112c(%rip),%rdx
mov    %rdx,(%rax,%rcx,8)
mov    -0x18(%rbp),%rax
mov    -0x24(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movb   $0x1,(%rax,%rcx,1)
mov    -0x10(%rbp),%rax
mov    -0x24(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x24(%rbp)
movslq %ecx,%rcx
lea    0x10fe(%rip),%rdx
mov    %rdx,(%rax,%rcx,8)
mov    -0x18(%rbp),%rax
mov    -0x24(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movb   $0x2,(%rax,%rcx,1)
jmp    121d <ps_replace+0x11d>
mov    -0x10(%rbp),%rax
mov    -0x24(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x24(%rbp)
movslq %ecx,%rcx
lea    0x10b4(%rip),%rdx
mov    %rdx,(%rax,%rcx,8)
mov    -0x18(%rbp),%rax
mov    -0x24(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movb   $0x1,(%rax,%rcx,1)
jmp    1b14 <ps_replace+0xa14>
mov    -0x10(%rbp),%rax
mov    -0x24(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x24(%rbp)
movslq %ecx,%rcx
lea    0x1081(%rip),%rdx
mov    %rdx,(%rax,%rcx,8)
mov    -0x18(%rbp),%rax
mov    -0x24(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movb   $0x0,(%rax,%rcx,1)
jmp    1b14 <ps_replace+0xa14>
mov    -0x10(%rbp),%rax
mov    -0x24(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x24(%rbp)
movslq %ecx,%rcx
lea    0x1050(%rip),%rdx
mov    %rdx,(%rax,%rcx,8)
mov    -0x18(%rbp),%rax
mov    -0x24(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movb   $0x0,(%rax,%rcx,1)
jmp    1b14 <ps_replace+0xa14>
mov    -0x10(%rbp),%rax
mov    -0x24(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x24(%rbp)
movslq %ecx,%rcx
lea    0x101d(%rip),%rdx
mov    %rdx,(%rax,%rcx,8)
mov    -0x18(%rbp),%rax
mov    -0x24(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movb   $0x0,(%rax,%rcx,1)
jmp    1b14 <ps_replace+0xa14>
mov    -0x10(%rbp),%rax
mov    -0x24(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x24(%rbp)
movslq %ecx,%rcx
lea    0xfec(%rip),%rdx
mov    %rdx,(%rax,%rcx,8)
mov    -0x18(%rbp),%rax
mov    -0x24(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movb   $0x0,(%rax,%rcx,1)
jmp    1b14 <ps_replace+0xa14>
mov    -0x10(%rbp),%rax
mov    -0x24(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x24(%rbp)
movslq %ecx,%rcx
lea    0xfbb(%rip),%rdx
mov    %rdx,(%rax,%rcx,8)
mov    -0x18(%rbp),%rax
mov    -0x24(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movb   $0x0,(%rax,%rcx,1)
jmp    1b14 <ps_replace+0xa14>
mov    -0x10(%rbp),%rax
mov    -0x24(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x24(%rbp)
movslq %ecx,%rcx
lea    0xf8a(%rip),%rdx
mov    %rdx,(%rax,%rcx,8)
mov    -0x18(%rbp),%rax
mov    -0x24(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movb   $0x0,(%rax,%rcx,1)
jmp    1b14 <ps_replace+0xa14>
mov    -0x10(%rbp),%rax
mov    -0x24(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x24(%rbp)
movslq %ecx,%rcx
lea    0xf59(%rip),%rdx
mov    %rdx,(%rax,%rcx,8)
mov    -0x18(%rbp),%rax
mov    -0x24(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movb   $0x0,(%rax,%rcx,1)
jmp    1b14 <ps_replace+0xa14>
mov    -0x10(%rbp),%rax
mov    -0x24(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x24(%rbp)
movslq %ecx,%rcx
lea    0xf26(%rip),%rdx
mov    %rdx,(%rax,%rcx,8)
mov    -0x18(%rbp),%rax
mov    -0x24(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movb   $0x0,(%rax,%rcx,1)
jmp    1b14 <ps_replace+0xa14>
mov    -0x10(%rbp),%rax
mov    -0x24(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x24(%rbp)
movslq %ecx,%rcx
lea    0xef6(%rip),%rdx
mov    %rdx,(%rax,%rcx,8)
mov    -0x18(%rbp),%rax
mov    -0x24(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movb   $0x0,(%rax,%rcx,1)
jmp    1b14 <ps_replace+0xa14>
mov    -0x10(%rbp),%rax
mov    -0x24(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x24(%rbp)
movslq %ecx,%rcx
lea    0xec3(%rip),%rdx
mov    %rdx,(%rax,%rcx,8)
mov    -0x18(%rbp),%rax
mov    -0x24(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movb   $0x0,(%rax,%rcx,1)
jmp    1b14 <ps_replace+0xa14>
mov    -0x10(%rbp),%rax
mov    -0x24(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x24(%rbp)
movslq %ecx,%rcx
lea    0xe92(%rip),%rdx
mov    %rdx,(%rax,%rcx,8)
mov    -0x18(%rbp),%rax
mov    -0x24(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movb   $0x1,(%rax,%rcx,1)
jmp    1b14 <ps_replace+0xa14>
mov    -0x10(%rbp),%rax
mov    -0x24(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x24(%rbp)
movslq %ecx,%rcx
lea    0xe5f(%rip),%rdx
mov    %rdx,(%rax,%rcx,8)
mov    -0x18(%rbp),%rax
mov    -0x24(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movb   $0x1,(%rax,%rcx,1)
jmp    1b14 <ps_replace+0xa14>
mov    -0x10(%rbp),%rax
mov    -0x24(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x24(%rbp)
movslq %ecx,%rcx
lea    0xe2e(%rip),%rdx
mov    %rdx,(%rax,%rcx,8)
mov    -0x18(%rbp),%rax
mov    -0x24(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movb   $0x1,(%rax,%rcx,1)
jmp    1b14 <ps_replace+0xa14>
mov    -0x10(%rbp),%rax
mov    -0x24(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x24(%rbp)
movslq %ecx,%rcx
lea    0xdfb(%rip),%rdx
mov    %rdx,(%rax,%rcx,8)
mov    -0x18(%rbp),%rax
mov    -0x24(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movb   $0x1,(%rax,%rcx,1)
jmp    1b14 <ps_replace+0xa14>
mov    -0x10(%rbp),%rax
mov    -0x24(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x24(%rbp)
movslq %ecx,%rcx
lea    0xdcb(%rip),%rdx
mov    %rdx,(%rax,%rcx,8)
mov    -0x18(%rbp),%rax
mov    -0x24(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movb   $0x1,(%rax,%rcx,1)
jmp    1b14 <ps_replace+0xa14>
mov    -0x10(%rbp),%rax
mov    -0x24(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x24(%rbp)
movslq %ecx,%rcx
lea    0xd98(%rip),%rdx
mov    %rdx,(%rax,%rcx,8)
mov    -0x18(%rbp),%rax
mov    -0x24(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movb   $0x1,(%rax,%rcx,1)
jmp    1b14 <ps_replace+0xa14>
mov    -0x10(%rbp),%rax
mov    -0x24(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x24(%rbp)
movslq %ecx,%rcx
lea    0xd65(%rip),%rdx
mov    %rdx,(%rax,%rcx,8)
mov    -0x18(%rbp),%rax
mov    -0x24(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movb   $0x1,(%rax,%rcx,1)
jmp    1b14 <ps_replace+0xa14>
mov    -0x10(%rbp),%rax
mov    -0x24(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x24(%rbp)
movslq %ecx,%rcx
lea    0xd34(%rip),%rdx
mov    %rdx,(%rax,%rcx,8)
mov    -0x18(%rbp),%rax
mov    -0x24(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movb   $0x1,(%rax,%rcx,1)
jmp    1b14 <ps_replace+0xa14>
mov    -0x10(%rbp),%rax
mov    -0x24(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x24(%rbp)
movslq %ecx,%rcx
lea    0xd04(%rip),%rdx
mov    %rdx,(%rax,%rcx,8)
mov    -0x18(%rbp),%rax
mov    -0x24(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movb   $0x1,(%rax,%rcx,1)
jmp    1b14 <ps_replace+0xa14>
mov    -0x10(%rbp),%rax
mov    -0x24(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x24(%rbp)
movslq %ecx,%rcx
lea    0xcd1(%rip),%rdx
mov    %rdx,(%rax,%rcx,8)
mov    -0x18(%rbp),%rax
mov    -0x24(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movb   $0x1,(%rax,%rcx,1)
jmp    1b14 <ps_replace+0xa14>
mov    -0x10(%rbp),%rax
mov    -0x24(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x24(%rbp)
movslq %ecx,%rcx
lea    0xca0(%rip),%rdx
mov    %rdx,(%rax,%rcx,8)
mov    -0x18(%rbp),%rax
mov    -0x24(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movb   $0x1,(%rax,%rcx,1)
jmp    1b14 <ps_replace+0xa14>
mov    -0x10(%rbp),%rax
mov    -0x24(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x24(%rbp)
movslq %ecx,%rcx
lea    0xc70(%rip),%rdx
mov    %rdx,(%rax,%rcx,8)
mov    -0x18(%rbp),%rax
mov    -0x24(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movb   $0x1,(%rax,%rcx,1)
jmp    1b14 <ps_replace+0xa14>
mov    -0x10(%rbp),%rax
mov    -0x24(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x24(%rbp)
movslq %ecx,%rcx
lea    0xc3b(%rip),%rdx
mov    %rdx,(%rax,%rcx,8)
mov    -0x18(%rbp),%rax
mov    -0x24(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movb   $0x1,(%rax,%rcx,1)
jmp    1b14 <ps_replace+0xa14>
mov    -0x10(%rbp),%rax
mov    -0x24(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x24(%rbp)
movslq %ecx,%rcx
lea    0xc08(%rip),%rdx
mov    %rdx,(%rax,%rcx,8)
mov    -0x18(%rbp),%rax
mov    -0x24(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movb   $0x1,(%rax,%rcx,1)
jmp    1b14 <ps_replace+0xa14>
mov    -0x10(%rbp),%rax
mov    -0x24(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x24(%rbp)
movslq %ecx,%rcx
lea    0xbd8(%rip),%rdx
mov    %rdx,(%rax,%rcx,8)
mov    -0x18(%rbp),%rax
mov    -0x24(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movb   $0x1,(%rax,%rcx,1)
jmp    1b14 <ps_replace+0xa14>
mov    -0x10(%rbp),%rax
mov    -0x24(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x24(%rbp)
movslq %ecx,%rcx
lea    0xba5(%rip),%rdx
mov    %rdx,(%rax,%rcx,8)
mov    -0x18(%rbp),%rax
mov    -0x24(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movb   $0x1,(%rax,%rcx,1)
jmp    1b14 <ps_replace+0xa14>
mov    -0x10(%rbp),%rax
mov    -0x24(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x24(%rbp)
movslq %ecx,%rcx
lea    0xb74(%rip),%rdx
mov    %rdx,(%rax,%rcx,8)
mov    -0x18(%rbp),%rax
mov    -0x24(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movb   $0x1,(%rax,%rcx,1)
jmp    1b14 <ps_replace+0xa14>
mov    -0x10(%rbp),%rax
mov    -0x24(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x24(%rbp)
movslq %ecx,%rcx
lea    0xb43(%rip),%rdx
mov    %rdx,(%rax,%rcx,8)
mov    -0x18(%rbp),%rax
mov    -0x24(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movb   $0x1,(%rax,%rcx,1)
jmp    1b14 <ps_replace+0xa14>
mov    -0x10(%rbp),%rax
mov    -0x24(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x24(%rbp)
movslq %ecx,%rcx
lea    0xb12(%rip),%rdx
mov    %rdx,(%rax,%rcx,8)
mov    -0x18(%rbp),%rax
mov    -0x24(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movb   $0x1,(%rax,%rcx,1)
jmp    1b14 <ps_replace+0xa14>
mov    -0x10(%rbp),%rax
mov    -0x24(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x24(%rbp)
movslq %ecx,%rcx
lea    0xae1(%rip),%rdx
mov    %rdx,(%rax,%rcx,8)
mov    -0x18(%rbp),%rax
mov    -0x24(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movb   $0x1,(%rax,%rcx,1)
jmp    1b14 <ps_replace+0xa14>
mov    -0x10(%rbp),%rax
mov    -0x24(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x24(%rbp)
movslq %ecx,%rcx
lea    0xab0(%rip),%rdx
mov    %rdx,(%rax,%rcx,8)
mov    -0x18(%rbp),%rax
mov    -0x24(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movb   $0x1,(%rax,%rcx,1)
jmp    1b14 <ps_replace+0xa14>
mov    -0x10(%rbp),%rax
mov    -0x24(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x24(%rbp)
movslq %ecx,%rcx
lea    0xa7f(%rip),%rdx
mov    %rdx,(%rax,%rcx,8)
mov    -0x18(%rbp),%rax
mov    -0x24(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movb   $0x1,(%rax,%rcx,1)
jmp    1b14 <ps_replace+0xa14>
mov    -0x10(%rbp),%rax
mov    -0x24(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x24(%rbp)
movslq %ecx,%rcx
lea    0xa4e(%rip),%rdx
mov    %rdx,(%rax,%rcx,8)
mov    -0x18(%rbp),%rax
mov    -0x24(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movb   $0x1,(%rax,%rcx,1)
jmp    1b14 <ps_replace+0xa14>
mov    -0x10(%rbp),%rax
mov    -0x24(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x24(%rbp)
movslq %ecx,%rcx
lea    0xa1d(%rip),%rdx
mov    %rdx,(%rax,%rcx,8)
mov    -0x18(%rbp),%rax
mov    -0x24(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movb   $0x1,(%rax,%rcx,1)
jmp    1b14 <ps_replace+0xa14>
mov    -0x10(%rbp),%rax
mov    -0x24(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x24(%rbp)
movslq %ecx,%rcx
lea    0x9ed(%rip),%rdx
mov    %rdx,(%rax,%rcx,8)
mov    -0x18(%rbp),%rax
mov    -0x24(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movb   $0x1,(%rax,%rcx,1)
jmp    1b14 <ps_replace+0xa14>
mov    -0x10(%rbp),%rax
mov    -0x24(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x24(%rbp)
movslq %ecx,%rcx
lea    0x9ba(%rip),%rdx
mov    %rdx,(%rax,%rcx,8)
mov    -0x18(%rbp),%rax
mov    -0x24(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movb   $0x1,(%rax,%rcx,1)
jmp    1b14 <ps_replace+0xa14>
mov    -0x10(%rbp),%rax
mov    -0x24(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x24(%rbp)
movslq %ecx,%rcx
lea    0x987(%rip),%rdx
mov    %rdx,(%rax,%rcx,8)
mov    -0x18(%rbp),%rax
mov    -0x24(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movb   $0x1,(%rax,%rcx,1)
jmp    1b14 <ps_replace+0xa14>
mov    -0x10(%rbp),%rax
mov    -0x24(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x24(%rbp)
movslq %ecx,%rcx
lea    0x954(%rip),%rdx
mov    %rdx,(%rax,%rcx,8)
mov    -0x18(%rbp),%rax
mov    -0x24(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movb   $0x1,(%rax,%rcx,1)
jmp    1b14 <ps_replace+0xa14>
mov    -0x10(%rbp),%rax
mov    -0x24(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x24(%rbp)
movslq %ecx,%rcx
lea    0x906(%rip),%rdx
mov    %rdx,(%rax,%rcx,8)
mov    -0x18(%rbp),%rax
mov    -0x24(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movb   $0x1,(%rax,%rcx,1)
jmp    1b14 <ps_replace+0xa14>
mov    -0x10(%rbp),%rax
mov    -0x24(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x24(%rbp)
movslq %ecx,%rcx
lea    0x8cb(%rip),%rdx
mov    %rdx,(%rax,%rcx,8)
mov    -0x18(%rbp),%rax
mov    -0x24(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movb   $0x1,(%rax,%rcx,1)
jmp    1b14 <ps_replace+0xa14>
mov    -0x10(%rbp),%rax
mov    -0x24(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x24(%rbp)
movslq %ecx,%rcx
lea    0x8bd(%rip),%rdx
mov    %rdx,(%rax,%rcx,8)
mov    -0x18(%rbp),%rax
mov    -0x24(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movb   $0x1,(%rax,%rcx,1)
jmp    1b14 <ps_replace+0xa14>
mov    -0x10(%rbp),%rax
mov    -0x24(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x24(%rbp)
movslq %ecx,%rcx
lea    0x88a(%rip),%rdx
mov    %rdx,(%rax,%rcx,8)
mov    -0x18(%rbp),%rax
mov    -0x24(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movb   $0x1,(%rax,%rcx,1)
jmp    1b14 <ps_replace+0xa14>
mov    -0x10(%rbp),%rax
mov    -0x24(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x24(%rbp)
movslq %ecx,%rcx
lea    0x857(%rip),%rdx
mov    %rdx,(%rax,%rcx,8)
mov    -0x18(%rbp),%rax
mov    -0x24(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movb   $0x1,(%rax,%rcx,1)
jmp    1b14 <ps_replace+0xa14>
mov    -0x10(%rbp),%rax
mov    -0x24(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x24(%rbp)
movslq %ecx,%rcx
lea    0x824(%rip),%rdx
mov    %rdx,(%rax,%rcx,8)
mov    -0x18(%rbp),%rax
mov    -0x24(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movb   $0x1,(%rax,%rcx,1)
jmp    1b14 <ps_replace+0xa14>
mov    -0x10(%rbp),%rax
mov    -0x24(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x24(%rbp)
movslq %ecx,%rcx
lea    0x7f3(%rip),%rdx
mov    %rdx,(%rax,%rcx,8)
mov    -0x18(%rbp),%rax
mov    -0x24(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movb   $0x1,(%rax,%rcx,1)
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
jmp    1121 <ps_replace+0x21>
mov    -0x24(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<ps_replace>:
push   %rbp
push   %r15
push   %r14
push   %r12
push   %rbx
test   %ecx,%ecx
jle    132e <ps_replace+0x22e>
lea    -0x1(%rcx),%r8d
mov    %ecx,%r9d
xor    %ecx,%ecx
lea    0x119c(%rip),%r10
lea    0xed9(%rip),%r11
xor    %eax,%eax
nopl   0x0(%rax)
movzwl (%rdi,%rcx,2),%ebx
add    $0xfffff9de,%ebx
movzwl %bx,%ebp
cmp    $0xae,%ebp
ja     1318 <ps_replace+0x218>
mov    $0x1,%r14d
xor    %r15d,%r15d
movzwl %bx,%ebx
movslq (%r11,%rbx,4),%rbx
add    %r11,%rbx
mov    %eax,%ebp
mov    %r10,%r12
jmp    *%rbx
mov    $0x1,%r15b
lea    0x1183(%rip),%r12
jmp    1308 <ps_replace+0x208>
mov    $0x1,%r15b
lea    0x1172(%rip),%r12
jmp    1308 <ps_replace+0x208>
mov    $0x1,%r15b
lea    0x1140(%rip),%r12
jmp    1308 <ps_replace+0x208>
mov    $0x1,%r15b
lea    0x1136(%rip),%r12
jmp    1308 <ps_replace+0x208>
lea    0x1118(%rip),%r12
jmp    1305 <ps_replace+0x205>
lea    0x1117(%rip),%r12
jmp    1305 <ps_replace+0x205>
lea    0x1108(%rip),%r12
jmp    1305 <ps_replace+0x205>
mov    $0x1,%r15b
lea    0x110e(%rip),%r12
jmp    1308 <ps_replace+0x208>
mov    $0x1,%r15b
lea    0x10fc(%rip),%r12
jmp    1308 <ps_replace+0x208>
mov    $0x1,%r15b
lea    0x10ea(%rip),%r12
jmp    1308 <ps_replace+0x208>
mov    $0x1,%r15b
lea    0x10d3(%rip),%r12
jmp    1308 <ps_replace+0x208>
mov    $0x1,%r15b
lea    0x10da(%rip),%r12
jmp    1308 <ps_replace+0x208>
mov    $0x1,%r15b
lea    0x10bb(%rip),%r12
jmp    1308 <ps_replace+0x208>
mov    $0x1,%r15b
lea    0x10c0(%rip),%r12
jmp    1308 <ps_replace+0x208>
mov    $0x1,%r15b
lea    0x10b5(%rip),%r12
jmp    1308 <ps_replace+0x208>
mov    $0x1,%r15b
lea    0x109c(%rip),%r12
jmp    1308 <ps_replace+0x208>
mov    $0x1,%r15b
lea    0x1095(%rip),%r12
jmp    1308 <ps_replace+0x208>
mov    $0x1,%r15b
lea    0x1082(%rip),%r12
jmp    1308 <ps_replace+0x208>
mov    $0x1,%r15b
lea    0x106b(%rip),%r12
jmp    1308 <ps_replace+0x208>
mov    $0x1,%r15b
cmp    %r8,%rcx
jae    1327 <ps_replace+0x227>
cmpw   $0x0,0x2(%rdi,%rcx,2)
mov    %eax,%ebp
mov    %r10,%r12
je     130a <ps_replace+0x20a>
lea    0x1(%rax),%ebp
movslq %eax,%rbx
lea    0x1036(%rip),%r12
mov    %r12,(%rsi,%rbx,8)
movb   $0x1,(%rdx,%rbx,1)
mov    $0x2,%r15b
mov    $0x2,%r14d
jmp    130a <ps_replace+0x20a>
lea    0x100b(%rip),%r12
jmp    1305 <ps_replace+0x205>
mov    $0x1,%r15b
lea    0x1014(%rip),%r12
jmp    1308 <ps_replace+0x208>
mov    $0x1,%r15b
lea    0x1010(%rip),%r12
jmp    1308 <ps_replace+0x208>
mov    $0x1,%r15b
lea    0xff7(%rip),%r12
jmp    1308 <ps_replace+0x208>
mov    $0x1,%r15b
lea    0xff3(%rip),%r12
jmp    1308 <ps_replace+0x208>
mov    $0x1,%r15b
lea    0xfff(%rip),%r12
jmp    1308 <ps_replace+0x208>
lea    0xfc8(%rip),%r12
jmp    1305 <ps_replace+0x205>
lea    0xfbb(%rip),%r12
xor    %r15d,%r15d
mov    %eax,%ebp
add    %r14d,%eax
movslq %ebp,%rbx
mov    %r12,(%rsi,%rbx,8)
mov    %r15b,(%rdx,%rbx,1)
add    $0x1,%rcx
cmp    %rcx,%r9
jne    1130 <ps_replace+0x30>
jmp    1330 <ps_replace+0x230>
mov    %eax,%ebp
mov    %r10,%r12
jmp    130a <ps_replace+0x20a>
xor    %eax,%eax
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
@.str = [2 x i8] c"h\00"
@.str.1 = [2 x i8] c"1\00"
@.str.2 = [2 x i8] c"2\00"
@.str.3 = [2 x i8] c"7\00"
@.str.4 = [2 x i8] c"4\00"
@.str.5 = [2 x i8] c"8\00"
@.str.6 = [3 x i8] c"10\00"
@.str.7 = [2 x i8] c"6\00"
@.str.8 = [2 x i8] c"k\00"
@.str.9 = [3 x i8] c"kh\00"
@.str.10 = [2 x i8] c"g\00"
@.str.11 = [3 x i8] c"ch\00"
@.str.12 = [2 x i8] c"j\00"
@.str.13 = [3 x i8] c"tt\00"
@.str.14 = [3 x i8] c"dd\00"
@.str.15 = [2 x i8] c"t\00"
@.str.16 = [2 x i8] c"d\00"
@.str.17 = [2 x i8] c"n\00"
@.str.18 = [2 x i8] c"p\00"
@.str.19 = [2 x i8] c"f\00"
@.str.20 = [2 x i8] c"b\00"
@.str.21 = [2 x i8] c"m\00"
@.str.22 = [2 x i8] c"r\00"
@.str.23 = [2 x i8] c"l\00"
@.str.24 = [3 x i8] c"sh\00"
@.str.25 = [2 x i8] c"s\00"
@.str.26 = [2 x i8] c"z\00"
@.str.27 = [4 x i8] c"ddh\00"
define i32 @ps_replace(i16* %0, i8** %1, i8* %2, i32 %3) {
%5 = alloca i16*
%6 = alloca i8**
%7 = alloca i8*
%8 = alloca i32
%9 = alloca i32
%10 = alloca i32
store i16* %0, i16** %5
store i8** %1, i8*** %6
store i8* %2, i8** %7
store i32 %3, i32* %8
store i32 0, i32* %9
store i32 0, i32* %10
br label %11
11: ; preds = %564, %4
%12 = load i32, i32* %9
%13 = load i32, i32* %8
%14 = icmp slt i32 %12, %13
br i1 %14, label %15, label %567
15: ; preds = %11
%16 = load i16*, i16** %5
%17 = load i32, i32* %9
%18 = sext i32 %17 to i64
%19 = getelementptr inbounds i16, i16* %16, i64 %18
%20 = load i16, i16* %19
%21 = zext i16 %20 to i32
switch i32 %21, label %564 [
i32 1607, label %22
i32 1593, label %69
i32 1575, label %80
i32 1570, label %91
i32 1744, label %102
i32 1610, label %113
i32 1740, label %124
i32 1741, label %135
i32 1574, label %146
i32 1608, label %157
i32 1572, label %168
i32 1603, label %179
i32 1705, label %190
i32 1582, label %201
i32 1690, label %212
i32 1707, label %223
i32 1686, label %234
i32 1594, label %245
i32 1670, label %256
i32 1580, label %267
i32 1688, label %278
i32 1660, label %289
i32 1673, label %300
i32 1578, label %311
i32 1591, label %322
i32 1583, label %333
i32 1584, label %344
i32 1606, label %355
i32 1662, label %366
i32 1601, label %377
i32 1576, label %388
i32 1605, label %399
i32 1585, label %410
i32 1604, label %421
i32 1588, label %432
i32 1587, label %443
i32 1579, label %454
i32 1669, label %465
i32 1589, label %476
i32 1581, label %487
i32 1602, label %498
i32 1586, label %509
i32 1665, label %520
i32 1590, label %531
i32 1592, label %542
i32 1683, label %553
]
22: ; preds = %15
%23 = load i32, i32* %9
%24 = load i32, i32* %8
%25 = sub nsw i32 %24, 1
%26 = icmp slt i32 %23, %25
br i1 %26, label %27, label %57
27: ; preds = %22
%28 = load i16*, i16** %5
%29 = load i32, i32* %9
%30 = add nsw i32 %29, 1
%31 = sext i32 %30 to i64
%32 = getelementptr inbounds i16, i16* %28, i64 %31
%33 = load i16, i16* %32
%34 = zext i16 %33 to i32
%35 = icmp ne i32 %34, 0
br i1 %35, label %36, label %57
36: ; preds = %27
%37 = load i8**, i8*** %6
%38 = load i32, i32* %10
%39 = add nsw i32 %38, 1
store i32 %39, i32* %10
%40 = sext i32 %38 to i64
%41 = getelementptr inbounds i8*, i8** %37, i64 %40
store i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str, i64 0, i64 0), i8** %41
%42 = load i8*, i8** %7
%43 = load i32, i32* %10
%44 = sub nsw i32 %43, 1
%45 = sext i32 %44 to i64
%46 = getelementptr inbounds i8, i8* %42, i64 %45
store i8 1, i8* %46
%47 = load i8**, i8*** %6
%48 = load i32, i32* %10
%49 = add nsw i32 %48, 1
store i32 %49, i32* %10
%50 = sext i32 %48 to i64
%51 = getelementptr inbounds i8*, i8** %47, i64 %50
store i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str, i64 0, i64 0), i8** %51
%52 = load i8*, i8** %7
%53 = load i32, i32* %10
%54 = sub nsw i32 %53, 1
%55 = sext i32 %54 to i64
%56 = getelementptr inbounds i8, i8* %52, i64 %55
store i8 2, i8* %56
br label %68
57: ; preds = %27, %22
%58 = load i8**, i8*** %6
%59 = load i32, i32* %10
%60 = add nsw i32 %59, 1
store i32 %60, i32* %10
%61 = sext i32 %59 to i64
%62 = getelementptr inbounds i8*, i8** %58, i64 %61
store i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0), i8** %62
%63 = load i8*, i8** %7
%64 = load i32, i32* %10
%65 = sub nsw i32 %64, 1
%66 = sext i32 %65 to i64
%67 = getelementptr inbounds i8, i8* %63, i64 %66
store i8 1, i8* %67
br label %68
68: ; preds = %57, %36
br label %564
69: ; preds = %15
%70 = load i8**, i8*** %6
%71 = load i32, i32* %10
%72 = add nsw i32 %71, 1
store i32 %72, i32* %10
%73 = sext i32 %71 to i64
%74 = getelementptr inbounds i8*, i8** %70, i64 %73
store i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0), i8** %74
%75 = load i8*, i8** %7
%76 = load i32, i32* %10
%77 = sub nsw i32 %76, 1
%78 = sext i32 %77 to i64
%79 = getelementptr inbounds i8, i8* %75, i64 %78
store i8 0, i8* %79
br label %564
80: ; preds = %15
%81 = load i8**, i8*** %6
%82 = load i32, i32* %10
%83 = add nsw i32 %82, 1
store i32 %83, i32* %10
%84 = sext i32 %82 to i64
%85 = getelementptr inbounds i8*, i8** %81, i64 %84
store i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.2, i64 0, i64 0), i8** %85
%86 = load i8*, i8** %7
%87 = load i32, i32* %10
%88 = sub nsw i32 %87, 1
%89 = sext i32 %88 to i64
%90 = getelementptr inbounds i8, i8* %86, i64 %89
store i8 0, i8* %90
br label %564
91: ; preds = %15
%92 = load i8**, i8*** %6
%93 = load i32, i32* %10
%94 = add nsw i32 %93, 1
store i32 %94, i32* %10
%95 = sext i32 %93 to i64
%96 = getelementptr inbounds i8*, i8** %92, i64 %95
store i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.2, i64 0, i64 0), i8** %96
%97 = load i8*, i8** %7
%98 = load i32, i32* %10
%99 = sub nsw i32 %98, 1
%100 = sext i32 %99 to i64
%101 = getelementptr inbounds i8, i8* %97, i64 %100
store i8 0, i8* %101
br label %564
102: ; preds = %15
%103 = load i8**, i8*** %6
%104 = load i32, i32* %10
%105 = add nsw i32 %104, 1
store i32 %105, i32* %10
%106 = sext i32 %104 to i64
%107 = getelementptr inbounds i8*, i8** %103, i64 %106
store i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.3, i64 0, i64 0), i8** %107
%108 = load i8*, i8** %7
%109 = load i32, i32* %10
%110 = sub nsw i32 %109, 1
%111 = sext i32 %110 to i64
%112 = getelementptr inbounds i8, i8* %108, i64 %111
store i8 0, i8* %112
br label %564
113: ; preds = %15
%114 = load i8**, i8*** %6
%115 = load i32, i32* %10
%116 = add nsw i32 %115, 1
store i32 %116, i32* %10
%117 = sext i32 %115 to i64
%118 = getelementptr inbounds i8*, i8** %114, i64 %117
store i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.4, i64 0, i64 0), i8** %118
%119 = load i8*, i8** %7
%120 = load i32, i32* %10
%121 = sub nsw i32 %120, 1
%122 = sext i32 %121 to i64
%123 = getelementptr inbounds i8, i8* %119, i64 %122
store i8 0, i8* %123
br label %564
124: ; preds = %15
%125 = load i8**, i8*** %6
%126 = load i32, i32* %10
%127 = add nsw i32 %126, 1
store i32 %127, i32* %10
%128 = sext i32 %126 to i64
%129 = getelementptr inbounds i8*, i8** %125, i64 %128
store i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.5, i64 0, i64 0), i8** %129
%130 = load i8*, i8** %7
%131 = load i32, i32* %10
%132 = sub nsw i32 %131, 1
%133 = sext i32 %132 to i64
%134 = getelementptr inbounds i8, i8* %130, i64 %133
store i8 0, i8* %134
br label %564
135: ; preds = %15
%136 = load i8**, i8*** %6
%137 = load i32, i32* %10
%138 = add nsw i32 %137, 1
store i32 %138, i32* %10
%139 = sext i32 %137 to i64
%140 = getelementptr inbounds i8*, i8** %136, i64 %139
store i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.6, i64 0, i64 0), i8** %140
%141 = load i8*, i8** %7
%142 = load i32, i32* %10
%143 = sub nsw i32 %142, 1
%144 = sext i32 %143 to i64
%145 = getelementptr inbounds i8, i8* %141, i64 %144
store i8 0, i8* %145
br label %564
146: ; preds = %15
%147 = load i8**, i8*** %6
%148 = load i32, i32* %10
%149 = add nsw i32 %148, 1
store i32 %149, i32* %10
%150 = sext i32 %148 to i64
%151 = getelementptr inbounds i8*, i8** %147, i64 %150
store i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.6, i64 0, i64 0), i8** %151
%152 = load i8*, i8** %7
%153 = load i32, i32* %10
%154 = sub nsw i32 %153, 1
%155 = sext i32 %154 to i64
%156 = getelementptr inbounds i8, i8* %152, i64 %155
store i8 0, i8* %156
br label %564
157: ; preds = %15
%158 = load i8**, i8*** %6
%159 = load i32, i32* %10
%160 = add nsw i32 %159, 1
store i32 %160, i32* %10
%161 = sext i32 %159 to i64
%162 = getelementptr inbounds i8*, i8** %158, i64 %161
store i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.7, i64 0, i64 0), i8** %162
%163 = load i8*, i8** %7
%164 = load i32, i32* %10
%165 = sub nsw i32 %164, 1
%166 = sext i32 %165 to i64
%167 = getelementptr inbounds i8, i8* %163, i64 %166
store i8 0, i8* %167
br label %564
168: ; preds = %15
%169 = load i8**, i8*** %6
%170 = load i32, i32* %10
%171 = add nsw i32 %170, 1
store i32 %171, i32* %10
%172 = sext i32 %170 to i64
%173 = getelementptr inbounds i8*, i8** %169, i64 %172
store i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.7, i64 0, i64 0), i8** %173
%174 = load i8*, i8** %7
%175 = load i32, i32* %10
%176 = sub nsw i32 %175, 1
%177 = sext i32 %176 to i64
%178 = getelementptr inbounds i8, i8* %174, i64 %177
store i8 0, i8* %178
br label %564
179: ; preds = %15
%180 = load i8**, i8*** %6
%181 = load i32, i32* %10
%182 = add nsw i32 %181, 1
store i32 %182, i32* %10
%183 = sext i32 %181 to i64
%184 = getelementptr inbounds i8*, i8** %180, i64 %183
store i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.8, i64 0, i64 0), i8** %184
%185 = load i8*, i8** %7
%186 = load i32, i32* %10
%187 = sub nsw i32 %186, 1
%188 = sext i32 %187 to i64
%189 = getelementptr inbounds i8, i8* %185, i64 %188
store i8 1, i8* %189
br label %564
190: ; preds = %15
%191 = load i8**, i8*** %6
%192 = load i32, i32* %10
%193 = add nsw i32 %192, 1
store i32 %193, i32* %10
%194 = sext i32 %192 to i64
%195 = getelementptr inbounds i8*, i8** %191, i64 %194
store i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.8, i64 0, i64 0), i8** %195
%196 = load i8*, i8** %7
%197 = load i32, i32* %10
%198 = sub nsw i32 %197, 1
%199 = sext i32 %198 to i64
%200 = getelementptr inbounds i8, i8* %196, i64 %199
store i8 1, i8* %200
br label %564
201: ; preds = %15
%202 = load i8**, i8*** %6
%203 = load i32, i32* %10
%204 = add nsw i32 %203, 1
store i32 %204, i32* %10
%205 = sext i32 %203 to i64
%206 = getelementptr inbounds i8*, i8** %202, i64 %205
store i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.9, i64 0, i64 0), i8** %206
%207 = load i8*, i8** %7
%208 = load i32, i32* %10
%209 = sub nsw i32 %208, 1
%210 = sext i32 %209 to i64
%211 = getelementptr inbounds i8, i8* %207, i64 %210
store i8 1, i8* %211
br label %564
212: ; preds = %15
%213 = load i8**, i8*** %6
%214 = load i32, i32* %10
%215 = add nsw i32 %214, 1
store i32 %215, i32* %10
%216 = sext i32 %214 to i64
%217 = getelementptr inbounds i8*, i8** %213, i64 %216
store i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.9, i64 0, i64 0), i8** %217
%218 = load i8*, i8** %7
%219 = load i32, i32* %10
%220 = sub nsw i32 %219, 1
%221 = sext i32 %220 to i64
%222 = getelementptr inbounds i8, i8* %218, i64 %221
store i8 1, i8* %222
br label %564
223: ; preds = %15
%224 = load i8**, i8*** %6
%225 = load i32, i32* %10
%226 = add nsw i32 %225, 1
store i32 %226, i32* %10
%227 = sext i32 %225 to i64
%228 = getelementptr inbounds i8*, i8** %224, i64 %227
store i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.10, i64 0, i64 0), i8** %228
%229 = load i8*, i8** %7
%230 = load i32, i32* %10
%231 = sub nsw i32 %230, 1
%232 = sext i32 %231 to i64
%233 = getelementptr inbounds i8, i8* %229, i64 %232
store i8 1, i8* %233
br label %564
234: ; preds = %15
%235 = load i8**, i8*** %6
%236 = load i32, i32* %10
%237 = add nsw i32 %236, 1
store i32 %237, i32* %10
%238 = sext i32 %236 to i64
%239 = getelementptr inbounds i8*, i8** %235, i64 %238
store i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.10, i64 0, i64 0), i8** %239
%240 = load i8*, i8** %7
%241 = load i32, i32* %10
%242 = sub nsw i32 %241, 1
%243 = sext i32 %242 to i64
%244 = getelementptr inbounds i8, i8* %240, i64 %243
store i8 1, i8* %244
br label %564
245: ; preds = %15
%246 = load i8**, i8*** %6
%247 = load i32, i32* %10
%248 = add nsw i32 %247, 1
store i32 %248, i32* %10
%249 = sext i32 %247 to i64
%250 = getelementptr inbounds i8*, i8** %246, i64 %249
store i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.10, i64 0, i64 0), i8** %250
%251 = load i8*, i8** %7
%252 = load i32, i32* %10
%253 = sub nsw i32 %252, 1
%254 = sext i32 %253 to i64
%255 = getelementptr inbounds i8, i8* %251, i64 %254
store i8 1, i8* %255
br label %564
256: ; preds = %15
%257 = load i8**, i8*** %6
%258 = load i32, i32* %10
%259 = add nsw i32 %258, 1
store i32 %259, i32* %10
%260 = sext i32 %258 to i64
%261 = getelementptr inbounds i8*, i8** %257, i64 %260
store i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.11, i64 0, i64 0), i8** %261
%262 = load i8*, i8** %7
%263 = load i32, i32* %10
%264 = sub nsw i32 %263, 1
%265 = sext i32 %264 to i64
%266 = getelementptr inbounds i8, i8* %262, i64 %265
store i8 1, i8* %266
br label %564
267: ; preds = %15
%268 = load i8**, i8*** %6
%269 = load i32, i32* %10
%270 = add nsw i32 %269, 1
store i32 %270, i32* %10
%271 = sext i32 %269 to i64
%272 = getelementptr inbounds i8*, i8** %268, i64 %271
store i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.12, i64 0, i64 0), i8** %272
%273 = load i8*, i8** %7
%274 = load i32, i32* %10
%275 = sub nsw i32 %274, 1
%276 = sext i32 %275 to i64
%277 = getelementptr inbounds i8, i8* %273, i64 %276
store i8 1, i8* %277
br label %564
278: ; preds = %15
%279 = load i8**, i8*** %6
%280 = load i32, i32* %10
%281 = add nsw i32 %280, 1
store i32 %281, i32* %10
%282 = sext i32 %280 to i64
%283 = getelementptr inbounds i8*, i8** %279, i64 %282
store i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.12, i64 0, i64 0), i8** %283
%284 = load i8*, i8** %7
%285 = load i32, i32* %10
%286 = sub nsw i32 %285, 1
%287 = sext i32 %286 to i64
%288 = getelementptr inbounds i8, i8* %284, i64 %287
store i8 1, i8* %288
br label %564
289: ; preds = %15
%290 = load i8**, i8*** %6
%291 = load i32, i32* %10
%292 = add nsw i32 %291, 1
store i32 %292, i32* %10
%293 = sext i32 %291 to i64
%294 = getelementptr inbounds i8*, i8** %290, i64 %293
store i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.13, i64 0, i64 0), i8** %294
%295 = load i8*, i8** %7
%296 = load i32, i32* %10
%297 = sub nsw i32 %296, 1
%298 = sext i32 %297 to i64
%299 = getelementptr inbounds i8, i8* %295, i64 %298
store i8 1, i8* %299
br label %564
300: ; preds = %15
%301 = load i8**, i8*** %6
%302 = load i32, i32* %10
%303 = add nsw i32 %302, 1
store i32 %303, i32* %10
%304 = sext i32 %302 to i64
%305 = getelementptr inbounds i8*, i8** %301, i64 %304
store i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.14, i64 0, i64 0), i8** %305
%306 = load i8*, i8** %7
%307 = load i32, i32* %10
%308 = sub nsw i32 %307, 1
%309 = sext i32 %308 to i64
%310 = getelementptr inbounds i8, i8* %306, i64 %309
store i8 1, i8* %310
br label %564
311: ; preds = %15
%312 = load i8**, i8*** %6
%313 = load i32, i32* %10
%314 = add nsw i32 %313, 1
store i32 %314, i32* %10
%315 = sext i32 %313 to i64
%316 = getelementptr inbounds i8*, i8** %312, i64 %315
store i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.15, i64 0, i64 0), i8** %316
%317 = load i8*, i8** %7
%318 = load i32, i32* %10
%319 = sub nsw i32 %318, 1
%320 = sext i32 %319 to i64
%321 = getelementptr inbounds i8, i8* %317, i64 %320
store i8 1, i8* %321
br label %564
322: ; preds = %15
%323 = load i8**, i8*** %6
%324 = load i32, i32* %10
%325 = add nsw i32 %324, 1
store i32 %325, i32* %10
%326 = sext i32 %324 to i64
%327 = getelementptr inbounds i8*, i8** %323, i64 %326
store i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.15, i64 0, i64 0), i8** %327
%328 = load i8*, i8** %7
%329 = load i32, i32* %10
%330 = sub nsw i32 %329, 1
%331 = sext i32 %330 to i64
%332 = getelementptr inbounds i8, i8* %328, i64 %331
store i8 1, i8* %332
br label %564
333: ; preds = %15
%334 = load i8**, i8*** %6
%335 = load i32, i32* %10
%336 = add nsw i32 %335, 1
store i32 %336, i32* %10
%337 = sext i32 %335 to i64
%338 = getelementptr inbounds i8*, i8** %334, i64 %337
store i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.16, i64 0, i64 0), i8** %338
%339 = load i8*, i8** %7
%340 = load i32, i32* %10
%341 = sub nsw i32 %340, 1
%342 = sext i32 %341 to i64
%343 = getelementptr inbounds i8, i8* %339, i64 %342
store i8 1, i8* %343
br label %564
344: ; preds = %15
%345 = load i8**, i8*** %6
%346 = load i32, i32* %10
%347 = add nsw i32 %346, 1
store i32 %347, i32* %10
%348 = sext i32 %346 to i64
%349 = getelementptr inbounds i8*, i8** %345, i64 %348
store i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.16, i64 0, i64 0), i8** %349
%350 = load i8*, i8** %7
%351 = load i32, i32* %10
%352 = sub nsw i32 %351, 1
%353 = sext i32 %352 to i64
%354 = getelementptr inbounds i8, i8* %350, i64 %353
store i8 1, i8* %354
br label %564
355: ; preds = %15
%356 = load i8**, i8*** %6
%357 = load i32, i32* %10
%358 = add nsw i32 %357, 1
store i32 %358, i32* %10
%359 = sext i32 %357 to i64
%360 = getelementptr inbounds i8*, i8** %356, i64 %359
store i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.17, i64 0, i64 0), i8** %360
%361 = load i8*, i8** %7
%362 = load i32, i32* %10
%363 = sub nsw i32 %362, 1
%364 = sext i32 %363 to i64
%365 = getelementptr inbounds i8, i8* %361, i64 %364
store i8 1, i8* %365
br label %564
366: ; preds = %15
%367 = load i8**, i8*** %6
%368 = load i32, i32* %10
%369 = add nsw i32 %368, 1
store i32 %369, i32* %10
%370 = sext i32 %368 to i64
%371 = getelementptr inbounds i8*, i8** %367, i64 %370
store i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.18, i64 0, i64 0), i8** %371
%372 = load i8*, i8** %7
%373 = load i32, i32* %10
%374 = sub nsw i32 %373, 1
%375 = sext i32 %374 to i64
%376 = getelementptr inbounds i8, i8* %372, i64 %375
store i8 1, i8* %376
br label %564
377: ; preds = %15
%378 = load i8**, i8*** %6
%379 = load i32, i32* %10
%380 = add nsw i32 %379, 1
store i32 %380, i32* %10
%381 = sext i32 %379 to i64
%382 = getelementptr inbounds i8*, i8** %378, i64 %381
store i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.19, i64 0, i64 0), i8** %382
%383 = load i8*, i8** %7
%384 = load i32, i32* %10
%385 = sub nsw i32 %384, 1
%386 = sext i32 %385 to i64
%387 = getelementptr inbounds i8, i8* %383, i64 %386
store i8 1, i8* %387
br label %564
388: ; preds = %15
%389 = load i8**, i8*** %6
%390 = load i32, i32* %10
%391 = add nsw i32 %390, 1
store i32 %391, i32* %10
%392 = sext i32 %390 to i64
%393 = getelementptr inbounds i8*, i8** %389, i64 %392
store i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.20, i64 0, i64 0), i8** %393
%394 = load i8*, i8** %7
%395 = load i32, i32* %10
%396 = sub nsw i32 %395, 1
%397 = sext i32 %396 to i64
%398 = getelementptr inbounds i8, i8* %394, i64 %397
store i8 1, i8* %398
br label %564
399: ; preds = %15
%400 = load i8**, i8*** %6
%401 = load i32, i32* %10
%402 = add nsw i32 %401, 1
store i32 %402, i32* %10
%403 = sext i32 %401 to i64
%404 = getelementptr inbounds i8*, i8** %400, i64 %403
store i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.21, i64 0, i64 0), i8** %404
%405 = load i8*, i8** %7
%406 = load i32, i32* %10
%407 = sub nsw i32 %406, 1
%408 = sext i32 %407 to i64
%409 = getelementptr inbounds i8, i8* %405, i64 %408
store i8 1, i8* %409
br label %564
410: ; preds = %15
%411 = load i8**, i8*** %6
%412 = load i32, i32* %10
%413 = add nsw i32 %412, 1
store i32 %413, i32* %10
%414 = sext i32 %412 to i64
%415 = getelementptr inbounds i8*, i8** %411, i64 %414
store i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.22, i64 0, i64 0), i8** %415
%416 = load i8*, i8** %7
%417 = load i32, i32* %10
%418 = sub nsw i32 %417, 1
%419 = sext i32 %418 to i64
%420 = getelementptr inbounds i8, i8* %416, i64 %419
store i8 1, i8* %420
br label %564
421: ; preds = %15
%422 = load i8**, i8*** %6
%423 = load i32, i32* %10
%424 = add nsw i32 %423, 1
store i32 %424, i32* %10
%425 = sext i32 %423 to i64
%426 = getelementptr inbounds i8*, i8** %422, i64 %425
store i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.23, i64 0, i64 0), i8** %426
%427 = load i8*, i8** %7
%428 = load i32, i32* %10
%429 = sub nsw i32 %428, 1
%430 = sext i32 %429 to i64
%431 = getelementptr inbounds i8, i8* %427, i64 %430
store i8 1, i8* %431
br label %564
432: ; preds = %15
%433 = load i8**, i8*** %6
%434 = load i32, i32* %10
%435 = add nsw i32 %434, 1
store i32 %435, i32* %10
%436 = sext i32 %434 to i64
%437 = getelementptr inbounds i8*, i8** %433, i64 %436
store i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.24, i64 0, i64 0), i8** %437
%438 = load i8*, i8** %7
%439 = load i32, i32* %10
%440 = sub nsw i32 %439, 1
%441 = sext i32 %440 to i64
%442 = getelementptr inbounds i8, i8* %438, i64 %441
store i8 1, i8* %442
br label %564
443: ; preds = %15
%444 = load i8**, i8*** %6
%445 = load i32, i32* %10
%446 = add nsw i32 %445, 1
store i32 %446, i32* %10
%447 = sext i32 %445 to i64
%448 = getelementptr inbounds i8*, i8** %444, i64 %447
store i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.25, i64 0, i64 0), i8** %448
%449 = load i8*, i8** %7
%450 = load i32, i32* %10
%451 = sub nsw i32 %450, 1
%452 = sext i32 %451 to i64
%453 = getelementptr inbounds i8, i8* %449, i64 %452
store i8 1, i8* %453
br label %564
454: ; preds = %15
%455 = load i8**, i8*** %6
%456 = load i32, i32* %10
%457 = add nsw i32 %456, 1
store i32 %457, i32* %10
%458 = sext i32 %456 to i64
%459 = getelementptr inbounds i8*, i8** %455, i64 %458
store i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.25, i64 0, i64 0), i8** %459
%460 = load i8*, i8** %7
%461 = load i32, i32* %10
%462 = sub nsw i32 %461, 1
%463 = sext i32 %462 to i64
%464 = getelementptr inbounds i8, i8* %460, i64 %463
store i8 1, i8* %464
br label %564
465: ; preds = %15
%466 = load i8**, i8*** %6
%467 = load i32, i32* %10
%468 = add nsw i32 %467, 1
store i32 %468, i32* %10
%469 = sext i32 %467 to i64
%470 = getelementptr inbounds i8*, i8** %466, i64 %469
store i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.25, i64 0, i64 0), i8** %470
%471 = load i8*, i8** %7
%472 = load i32, i32* %10
%473 = sub nsw i32 %472, 1
%474 = sext i32 %473 to i64
%475 = getelementptr inbounds i8, i8* %471, i64 %474
store i8 1, i8* %475
br label %564
476: ; preds = %15
%477 = load i8**, i8*** %6
%478 = load i32, i32* %10
%479 = add nsw i32 %478, 1
store i32 %479, i32* %10
%480 = sext i32 %478 to i64
%481 = getelementptr inbounds i8*, i8** %477, i64 %480
store i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.25, i64 0, i64 0), i8** %481
%482 = load i8*, i8** %7
%483 = load i32, i32* %10
%484 = sub nsw i32 %483, 1
%485 = sext i32 %484 to i64
%486 = getelementptr inbounds i8, i8* %482, i64 %485
store i8 1, i8* %486
br label %564
487: ; preds = %15
%488 = load i8**, i8*** %6
%489 = load i32, i32* %10
%490 = add nsw i32 %489, 1
store i32 %490, i32* %10
%491 = sext i32 %489 to i64
%492 = getelementptr inbounds i8*, i8** %488, i64 %491
store i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str, i64 0, i64 0), i8** %492
%493 = load i8*, i8** %7
%494 = load i32, i32* %10
%495 = sub nsw i32 %494, 1
%496 = sext i32 %495 to i64
%497 = getelementptr inbounds i8, i8* %493, i64 %496
store i8 1, i8* %497
br label %564
498: ; preds = %15
%499 = load i8**, i8*** %6
%500 = load i32, i32* %10
%501 = add nsw i32 %500, 1
store i32 %501, i32* %10
%502 = sext i32 %500 to i64
%503 = getelementptr inbounds i8*, i8** %499, i64 %502
store i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.8, i64 0, i64 0), i8** %503
%504 = load i8*, i8** %7
%505 = load i32, i32* %10
%506 = sub nsw i32 %505, 1
%507 = sext i32 %506 to i64
%508 = getelementptr inbounds i8, i8* %504, i64 %507
store i8 1, i8* %508
br label %564
509: ; preds = %15
%510 = load i8**, i8*** %6
%511 = load i32, i32* %10
%512 = add nsw i32 %511, 1
store i32 %512, i32* %10
%513 = sext i32 %511 to i64
%514 = getelementptr inbounds i8*, i8** %510, i64 %513
store i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.26, i64 0, i64 0), i8** %514
%515 = load i8*, i8** %7
%516 = load i32, i32* %10
%517 = sub nsw i32 %516, 1
%518 = sext i32 %517 to i64
%519 = getelementptr inbounds i8, i8* %515, i64 %518
store i8 1, i8* %519
br label %564
520: ; preds = %15
%521 = load i8**, i8*** %6
%522 = load i32, i32* %10
%523 = add nsw i32 %522, 1
store i32 %523, i32* %10
%524 = sext i32 %522 to i64
%525 = getelementptr inbounds i8*, i8** %521, i64 %524
store i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.26, i64 0, i64 0), i8** %525
%526 = load i8*, i8** %7
%527 = load i32, i32* %10
%528 = sub nsw i32 %527, 1
%529 = sext i32 %528 to i64
%530 = getelementptr inbounds i8, i8* %526, i64 %529
store i8 1, i8* %530
br label %564
531: ; preds = %15
%532 = load i8**, i8*** %6
%533 = load i32, i32* %10
%534 = add nsw i32 %533, 1
store i32 %534, i32* %10
%535 = sext i32 %533 to i64
%536 = getelementptr inbounds i8*, i8** %532, i64 %535
store i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.26, i64 0, i64 0), i8** %536
%537 = load i8*, i8** %7
%538 = load i32, i32* %10
%539 = sub nsw i32 %538, 1
%540 = sext i32 %539 to i64
%541 = getelementptr inbounds i8, i8* %537, i64 %540
store i8 1, i8* %541
br label %564
542: ; preds = %15
%543 = load i8**, i8*** %6
%544 = load i32, i32* %10
%545 = add nsw i32 %544, 1
store i32 %545, i32* %10
%546 = sext i32 %544 to i64
%547 = getelementptr inbounds i8*, i8** %543, i64 %546
store i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.26, i64 0, i64 0), i8** %547
%548 = load i8*, i8** %7
%549 = load i32, i32* %10
%550 = sub nsw i32 %549, 1
%551 = sext i32 %550 to i64
%552 = getelementptr inbounds i8, i8* %548, i64 %551
store i8 1, i8* %552
br label %564
553: ; preds = %15
%554 = load i8**, i8*** %6
%555 = load i32, i32* %10
%556 = add nsw i32 %555, 1
store i32 %556, i32* %10
%557 = sext i32 %555 to i64
%558 = getelementptr inbounds i8*, i8** %554, i64 %557
store i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.27, i64 0, i64 0), i8** %558
%559 = load i8*, i8** %7
%560 = load i32, i32* %10
%561 = sub nsw i32 %560, 1
%562 = sext i32 %561 to i64
%563 = getelementptr inbounds i8, i8* %559, i64 %562
store i8 1, i8* %563
br label %564
564: ; preds = %15, %553, %542, %531, %520, %509, %498, %487, %476, %465, %454, %443, %432, %421, %410, %399, %388, %377, %366, %355, %344, %333, %322, %311, %300, %289, %278, %267, %256, %245, %234, %223, %212, %201, %190, %179, %168, %157, %146, %135, %124, %113, %102, %91, %80, %69, %68
%565 = load i32, i32* %9
%566 = add nsw i32 %565, 1
store i32 %566, i32* %9
br label %11
567: ; preds = %11
%568 = load i32, i32* %10
ret i32 %568
}

LLVM IR (-O2):
@.str = [2 x i8] c"h\00"
@.str.1 = [2 x i8] c"1\00"
@.str.2 = [2 x i8] c"2\00"
@.str.3 = [2 x i8] c"7\00"
@.str.4 = [2 x i8] c"4\00"
@.str.5 = [2 x i8] c"8\00"
@.str.6 = [3 x i8] c"10\00"
@.str.7 = [2 x i8] c"6\00"
@.str.8 = [2 x i8] c"k\00"
@.str.9 = [3 x i8] c"kh\00"
@.str.10 = [2 x i8] c"g\00"
@.str.11 = [3 x i8] c"ch\00"
@.str.12 = [2 x i8] c"j\00"
@.str.13 = [3 x i8] c"tt\00"
@.str.14 = [3 x i8] c"dd\00"
@.str.15 = [2 x i8] c"t\00"
@.str.16 = [2 x i8] c"d\00"
@.str.17 = [2 x i8] c"n\00"
@.str.18 = [2 x i8] c"p\00"
@.str.19 = [2 x i8] c"f\00"
@.str.20 = [2 x i8] c"b\00"
@.str.21 = [2 x i8] c"m\00"
@.str.22 = [2 x i8] c"r\00"
@.str.23 = [2 x i8] c"l\00"
@.str.24 = [3 x i8] c"sh\00"
@.str.25 = [2 x i8] c"s\00"
@.str.26 = [2 x i8] c"z\00"
@.str.27 = [4 x i8] c"ddh\00"
define i32 @ps_replace(i16* nocapture %0, i8** writeonly %1, i8* writeonly %2, i32 %3) {
%5 = icmp sgt i32 %3, 0
br i1 %5, label %6, label %84
6: ; preds = %4
%7 = add nsw i32 %3, -1
%8 = zext i32 %7 to i64
%9 = zext i32 %3 to i64
br label %10
10: ; preds = %6, %80
%11 = phi i64 [ 0, %6 ], [ %82, %80 ]
%12 = phi i32 [ 0, %6 ], [ %81, %80 ]
%13 = getelementptr inbounds i16, i16* %0, i64 %11
%14 = load i16, i16* %13
switch i16 %14, label %80 [
i16 1607, label %15
i16 1593, label %71
i16 1575, label %27
i16 1570, label %28
i16 1744, label %29
i16 1610, label %30
i16 1740, label %31
i16 1741, label %32
i16 1574, label %33
i16 1608, label %34
i16 1572, label %35
i16 1603, label %36
i16 1705, label %37
i16 1582, label %38
i16 1690, label %39
i16 1707, label %40
i16 1686, label %41
i16 1594, label %42
i16 1670, label %43
i16 1580, label %44
i16 1688, label %45
i16 1660, label %46
i16 1673, label %47
i16 1578, label %48
i16 1591, label %49
i16 1583, label %50
i16 1584, label %51
i16 1606, label %52
i16 1662, label %53
i16 1601, label %54
i16 1576, label %55
i16 1605, label %56
i16 1585, label %57
i16 1604, label %58
i16 1588, label %59
i16 1587, label %60
i16 1579, label %61
i16 1669, label %62
i16 1589, label %63
i16 1581, label %64
i16 1602, label %65
i16 1586, label %66
i16 1665, label %67
i16 1590, label %68
i16 1592, label %69
i16 1683, label %70
]
15: ; preds = %10
%16 = icmp ult i64 %11, %8
br i1 %16, label %17, label %71
17: ; preds = %15
%18 = add nuw nsw i64 %11, 1
%19 = getelementptr inbounds i16, i16* %0, i64 %18
%20 = load i16, i16* %19
%21 = icmp eq i16 %20, 0
br i1 %21, label %71, label %22
22: ; preds = %17
%23 = add nsw i32 %12, 1
%24 = sext i32 %12 to i64
%25 = getelementptr inbounds i8*, i8** %1, i64 %24
store i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str, i64 0, i64 0), i8** %25
%26 = getelementptr inbounds i8, i8* %2, i64 %24
store i8 1, i8* %26
br label %71
27: ; preds = %10
br label %71
28: ; preds = %10
br label %71
29: ; preds = %10
br label %71
30: ; preds = %10
br label %71
31: ; preds = %10
br label %71
32: ; preds = %10
br label %71
33: ; preds = %10
br label %71
34: ; preds = %10
br label %71
35: ; preds = %10
br label %71
36: ; preds = %10
br label %71
37: ; preds = %10
br label %71
38: ; preds = %10
br label %71
39: ; preds = %10
br label %71
40: ; preds = %10
br label %71
41: ; preds = %10
br label %71
42: ; preds = %10
br label %71
43: ; preds = %10
br label %71
44: ; preds = %10
br label %71
45: ; preds = %10
br label %71
46: ; preds = %10
br label %71
47: ; preds = %10
br label %71
48: ; preds = %10
br label %71
49: ; preds = %10
br label %71
50: ; preds = %10
br label %71
51: ; preds = %10
br label %71
52: ; preds = %10
br label %71
53: ; preds = %10
br label %71
54: ; preds = %10
br label %71
55: ; preds = %10
br label %71
56: ; preds = %10
br label %71
57: ; preds = %10
br label %71
58: ; preds = %10
br label %71
59: ; preds = %10
br label %71
60: ; preds = %10
br label %71
61: ; preds = %10
br label %71
62: ; preds = %10
br label %71
63: ; preds = %10
br label %71
64: ; preds = %10
br label %71
65: ; preds = %10
br label %71
66: ; preds = %10
br label %71
67: ; preds = %10
br label %71
68: ; preds = %10
br label %71
69: ; preds = %10
br label %71
70: ; preds = %10
br label %71
71: ; preds = %10, %15, %17, %27, %28, %29, %30, %31, %32, %33, %34, %35, %36, %37, %38, %39, %40, %41, %42, %43, %44, %45, %46, %47, %48, %49, %50, %51, %52, %53, %54, %55, %56, %57, %58, %59, %60, %61, %62, %63, %64, %65, %66, %67, %68, %69, %70, %22
%72 = phi i32 [ 1, %27 ], [ 1, %28 ], [ 1, %29 ], [ 1, %30 ], [ 1, %31 ], [ 1, %32 ], [ 1, %33 ], [ 1, %34 ], [ 1, %35 ], [ 1, %36 ], [ 1, %37 ], [ 1, %38 ], [ 1, %39 ], [ 1, %40 ], [ 1, %41 ], [ 1, %42 ], [ 1, %43 ], [ 1, %44 ], [ 1, %45 ], [ 1, %46 ], [ 1, %47 ], [ 1, %48 ], [ 1, %49 ], [ 1, %50 ], [ 1, %51 ], [ 1, %52 ], [ 1, %53 ], [ 1, %54 ], [ 1, %55 ], [ 1, %56 ], [ 1, %57 ], [ 1, %58 ], [ 1, %59 ], [ 1, %60 ], [ 1, %61 ], [ 1, %62 ], [ 1, %63 ], [ 1, %64 ], [ 1, %65 ], [ 1, %66 ], [ 1, %67 ], [ 1, %68 ], [ 1, %69 ], [ 1, %70 ], [ 2, %22 ], [ 1, %17 ], [ 1, %15 ], [ 1, %10 ]
%73 = phi i32 [ %12, %27 ], [ %12, %28 ], [ %12, %29 ], [ %12, %30 ], [ %12, %31 ], [ %12, %32 ], [ %12, %33 ], [ %12, %34 ], [ %12, %35 ], [ %12, %36 ], [ %12, %37 ], [ %12, %38 ], [ %12, %39 ], [ %12, %40 ], [ %12, %41 ], [ %12, %42 ], [ %12, %43 ], [ %12, %44 ], [ %12, %45 ], [ %12, %46 ], [ %12, %47 ], [ %12, %48 ], [ %12, %49 ], [ %12, %50 ], [ %12, %51 ], [ %12, %52 ], [ %12, %53 ], [ %12, %54 ], [ %12, %55 ], [ %12, %56 ], [ %12, %57 ], [ %12, %58 ], [ %12, %59 ], [ %12, %60 ], [ %12, %61 ], [ %12, %62 ], [ %12, %63 ], [ %12, %64 ], [ %12, %65 ], [ %12, %66 ], [ %12, %67 ], [ %12, %68 ], [ %12, %69 ], [ %12, %70 ], [ %23, %22 ], [ %12, %17 ], [ %12, %15 ], [ %12, %10 ]
%74 = phi i8* [ getelementptr inbounds ([2 x i8], [2 x i8]* @.str.2, i64 0, i64 0), %27 ], [ getelementptr inbounds ([2 x i8], [2 x i8]* @.str.2, i64 0, i64 0), %28 ], [ getelementptr inbounds ([2 x i8], [2 x i8]* @.str.3, i64 0, i64 0), %29 ], [ getelementptr inbounds ([2 x i8], [2 x i8]* @.str.4, i64 0, i64 0), %30 ], [ getelementptr inbounds ([2 x i8], [2 x i8]* @.str.5, i64 0, i64 0), %31 ], [ getelementptr inbounds ([3 x i8], [3 x i8]* @.str.6, i64 0, i64 0), %32 ], [ getelementptr inbounds ([3 x i8], [3 x i8]* @.str.6, i64 0, i64 0), %33 ], [ getelementptr inbounds ([2 x i8], [2 x i8]* @.str.7, i64 0, i64 0), %34 ], [ getelementptr inbounds ([2 x i8], [2 x i8]* @.str.7, i64 0, i64 0), %35 ], [ getelementptr inbounds ([2 x i8], [2 x i8]* @.str.8, i64 0, i64 0), %36 ], [ getelementptr inbounds ([2 x i8], [2 x i8]* @.str.8, i64 0, i64 0), %37 ], [ getelementptr inbounds ([3 x i8], [3 x i8]* @.str.9, i64 0, i64 0), %38 ], [ getelementptr inbounds ([3 x i8], [3 x i8]* @.str.9, i64 0, i64 0), %39 ], [ getelementptr inbounds ([2 x i8], [2 x i8]* @.str.10, i64 0, i64 0), %40 ], [ getelementptr inbounds ([2 x i8], [2 x i8]* @.str.10, i64 0, i64 0), %41 ], [ getelementptr inbounds ([2 x i8], [2 x i8]* @.str.10, i64 0, i64 0), %42 ], [ getelementptr inbounds ([3 x i8], [3 x i8]* @.str.11, i64 0, i64 0), %43 ], [ getelementptr inbounds ([2 x i8], [2 x i8]* @.str.12, i64 0, i64 0), %44 ], [ getelementptr inbounds ([2 x i8], [2 x i8]* @.str.12, i64 0, i64 0), %45 ], [ getelementptr inbounds ([3 x i8], [3 x i8]* @.str.13, i64 0, i64 0), %46 ], [ getelementptr inbounds ([3 x i8], [3 x i8]* @.str.14, i64 0, i64 0), %47 ], [ getelementptr inbounds ([2 x i8], [2 x i8]* @.str.15, i64 0, i64 0), %48 ], [ getelementptr inbounds ([2 x i8], [2 x i8]* @.str.15, i64 0, i64 0), %49 ], [ getelementptr inbounds ([2 x i8], [2 x i8]* @.str.16, i64 0, i64 0), %50 ], [ getelementptr inbounds ([2 x i8], [2 x i8]* @.str.16, i64 0, i64 0), %51 ], [ getelementptr inbounds ([2 x i8], [2 x i8]* @.str.17, i64 0, i64 0), %52 ], [ getelementptr inbounds ([2 x i8], [2 x i8]* @.str.18, i64 0, i64 0), %53 ], [ getelementptr inbounds ([2 x i8], [2 x i8]* @.str.19, i64 0, i64 0), %54 ], [ getelementptr inbounds ([2 x i8], [2 x i8]* @.str.20, i64 0, i64 0), %55 ], [ getelementptr inbounds ([2 x i8], [2 x i8]* @.str.21, i64 0, i64 0), %56 ], [ getelementptr inbounds ([2 x i8], [2 x i8]* @.str.22, i64 0, i64 0), %57 ], [ getelementptr inbounds ([2 x i8], [2 x i8]* @.str.23, i64 0, i64 0), %58 ], [ getelementptr inbounds ([3 x i8], [3 x i8]* @.str.24, i64 0, i64 0), %59 ], [ getelementptr inbounds ([2 x i8], [2 x i8]* @.str.25, i64 0, i64 0), %60 ], [ getelementptr inbounds ([2 x i8], [2 x i8]* @.str.25, i64 0, i64 0), %61 ], [ getelementptr inbounds ([2 x i8], [2 x i8]* @.str.25, i64 0, i64 0), %62 ], [ getelementptr inbounds ([2 x i8], [2 x i8]* @.str.25, i64 0, i64 0), %63 ], [ getelementptr inbounds ([2 x i8], [2 x i8]* @.str, i64 0, i64 0), %64 ], [ getelementptr inbounds ([2 x i8], [2 x i8]* @.str.8, i64 0, i64 0), %65 ], [ getelementptr inbounds ([2 x i8], [2 x i8]* @.str.26, i64 0, i64 0), %66 ], [ getelementptr inbounds ([2 x i8], [2 x i8]* @.str.26, i64 0, i64 0), %67 ], [ getelementptr inbounds ([2 x i8], [2 x i8]* @.str.26, i64 0, i64 0), %68 ], [ getelementptr inbounds ([2 x i8], [2 x i8]* @.str.26, i64 0, i64 0), %69 ], [ getelementptr inbounds ([4 x i8], [4 x i8]* @.str.27, i64 0, i64 0), %70 ], [ getelementptr inbounds ([2 x i8], [2 x i8]* @.str, i64 0, i64 0), %22 ], [ getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0), %17 ], [ getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0), %15 ], [ getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0), %10 ]
%75 = phi i8 [ 0, %27 ], [ 0, %28 ], [ 0, %29 ], [ 0, %30 ], [ 0, %31 ], [ 0, %32 ], [ 0, %33 ], [ 0, %34 ], [ 0, %35 ], [ 1, %36 ], [ 1, %37 ], [ 1, %38 ], [ 1, %39 ], [ 1, %40 ], [ 1, %41 ], [ 1, %42 ], [ 1, %43 ], [ 1, %44 ], [ 1, %45 ], [ 1, %46 ], [ 1, %47 ], [ 1, %48 ], [ 1, %49 ], [ 1, %50 ], [ 1, %51 ], [ 1, %52 ], [ 1, %53 ], [ 1, %54 ], [ 1, %55 ], [ 1, %56 ], [ 1, %57 ], [ 1, %58 ], [ 1, %59 ], [ 1, %60 ], [ 1, %61 ], [ 1, %62 ], [ 1, %63 ], [ 1, %64 ], [ 1, %65 ], [ 1, %66 ], [ 1, %67 ], [ 1, %68 ], [ 1, %69 ], [ 1, %70 ], [ 2, %22 ], [ 1, %17 ], [ 1, %15 ], [ 0, %10 ]
%76 = add nsw i32 %12, %72
%77 = sext i32 %73 to i64
%78 = getelementptr inbounds i8*, i8** %1, i64 %77
store i8* %74, i8** %78
%79 = getelementptr inbounds i8, i8* %2, i64 %77
store i8 %75, i8* %79
br label %80
80: ; preds = %71, %10
%81 = phi i32 [ %12, %10 ], [ %76, %71 ]
%82 = add nuw nsw i64 %11, 1
%83 = icmp eq i64 %82, %9
br i1 %83, label %84, label %10
84: ; preds = %80, %4
%85 = phi i32 [ 0, %4 ], [ %81, %80 ]
ret i32 %85
}