int step(char **matriz, int lin, int col, int linp, int colp, char jogador,
         char oposto, char dama, char odama) {
  int num = 0;
  num = (linp - lin < 0) ? (colp - col) : (linp - lin);
  if (matriz[lin][col] == dama) {
    if ((linp == 7 || linp == 0) &&
        (matriz[linp][colp] == oposto || matriz[linp][colp] == odama))
      return -1;
    if ((linp + colp) % 2 == 0) {
      if (matriz[linp][colp] == oposto || matriz[linp][colp] == odama) {
        if (colp > col) {
          if (matriz[linp + 1][colp + 1] == '-' &&
              matriz[linp - num][colp - num] == matriz[lin][col]) {
            matriz[linp + 1][colp + 1] = dama;
            matriz[lin][col] = '-';
            matriz[linp][colp] = '-';
            return 1;
          }
          if (matriz[linp - 1][colp + 1] == '-' &&
              matriz[linp + num][colp - num] == matriz[lin][col]) {
            matriz[linp - 1][colp + 1] = dama;
            matriz[lin][col] = '-';
            matriz[linp][colp] = '-';
            return 1;
          }
        } else {
          if (matriz[linp - 1][colp - 1] == '-' &&
              matriz[linp - num][colp - num] == matriz[lin][col]) {
            matriz[linp - 1][colp - 1] = dama;
            matriz[lin][col] = '-';
            matriz[linp][colp] = '-';
            return 1;
          }
          if (matriz[linp + 1][colp - 1] == '-' &&
              matriz[linp - num][colp + num] == matriz[lin][col]) {
            matriz[linp + 1][colp - 1] = dama;
            matriz[lin][col] = '-';
            matriz[linp][colp] = '-';
            return 1;
          }
        }
      } else if (restricaodama(matriz, lin, col, linp, colp, oposto, dama) ==
                 2) {
        matriz[linp][colp] = dama;
        matriz[lin][col] = '-';
        return 1;
      } else
        return -1;
    }
  }
  if ((linp + colp) % 2 == 0) {
    if ((linp == 7 || linp == 0) &&
        (matriz[linp][colp] == oposto || matriz[linp][colp] == odama))
      return -1;
    if (matriz[lin][col] == jogador && matriz[linp][colp] == jogador)
      return -1;
    if ((jogador == 'B' && linp > lin) || (jogador == 'P' && linp < lin))
      return -1;
    if ((matriz[lin][col] == jogador && linp - 1 == lin) ||
        (matriz[lin][col] == jogador && linp + 1 == lin)) {
      if (colp == col + 1 || colp == col - 1) {
        if (matriz[linp][colp] == '-') {
          matriz[linp][colp] = jogador;
          matriz[lin][col] = '-';
          return 1;
        }
      }
      if (matriz[linp][colp] == oposto) {
        if (matriz[linp - 1][colp + 1] == '-' && colp + 1 == col + 2 &&
            jogador == 'B') {
          matriz[linp - 1][colp + 1] = jogador;
          matriz[lin][col] = '-';
          matriz[linp][colp] = '-';
          return 1;
        }
        if (matriz[linp - 1][colp - 1] == '-' && colp - 1 == col - 2 &&
            jogador == 'B') {
          matriz[linp - 1][colp - 1] = jogador;
          matriz[lin][col] = '-';
          matriz[linp][colp] = '-';
          return 1;
        }
        if (matriz[linp + 1][colp + 1] == '-' && colp + 1 == col + 2 &&
            jogador == 'P') {
          matriz[linp + 1][colp + 1] = jogador;
          matriz[lin][col] = '-';
          matriz[linp][colp] = '-';
          return 1;
        }
        if (matriz[linp + 1][colp - 1] == '-' && colp - 1 == col - 2 &&
            jogador == 'P') {
          matriz[linp + 1][colp - 1] = jogador;
          matriz[lin][col] = '-';
          matriz[linp][colp] = '-';
          return 1;
        }
      }
    }
  }
  return -1;
}


x86 assembly (clang, -O0):
<step>:
push   %rbp
mov    %rsp,%rbp
sub    $0x40,%rsp
mov    %r9b,%al
mov    0x20(%rbp),%r9b
mov    0x18(%rbp),%r9b
mov    0x10(%rbp),%r9b
mov    %rdi,-0x10(%rbp)
mov    %esi,-0x14(%rbp)
mov    %edx,-0x18(%rbp)
mov    %ecx,-0x1c(%rbp)
mov    %r8d,-0x20(%rbp)
mov    %al,-0x21(%rbp)
movl   $0x0,-0x28(%rbp)
mov    -0x1c(%rbp),%eax
sub    -0x14(%rbp),%eax
cmp    $0x0,%eax
jge    115f <step+0x4f>
mov    -0x20(%rbp),%eax
sub    -0x18(%rbp),%eax
mov    %eax,-0x2c(%rbp)
jmp    1168 <step+0x58>
mov    -0x1c(%rbp),%eax
sub    -0x14(%rbp),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
mov    %eax,-0x28(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x18(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
movsbl 0x18(%rbp),%ecx
cmp    %ecx,%eax
jne    15ad <step+0x49d>
cmpl   $0x7,-0x1c(%rbp)
je     11a2 <step+0x92>
cmpl   $0x0,-0x1c(%rbp)
jne    11ee <step+0xde>
mov    -0x10(%rbp),%rax
movslq -0x1c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x20(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
movsbl 0x10(%rbp),%ecx
cmp    %ecx,%eax
je     11e2 <step+0xd2>
mov    -0x10(%rbp),%rax
movslq -0x1c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x20(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
movsbl 0x20(%rbp),%ecx
cmp    %ecx,%eax
jne    11ee <step+0xde>
movl   $0xffffffff,-0x4(%rbp)
jmp    1a2c <step+0x91c>
mov    -0x1c(%rbp),%eax
add    -0x20(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
cmp    $0x0,%edx
jne    15a8 <step+0x498>
mov    -0x10(%rbp),%rax
movslq -0x1c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x20(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
movsbl 0x10(%rbp),%ecx
cmp    %ecx,%eax
je     1245 <step+0x135>
mov    -0x10(%rbp),%rax
movslq -0x1c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x20(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
movsbl 0x20(%rbp),%ecx
cmp    %ecx,%eax
jne    1534 <step+0x424>
mov    -0x20(%rbp),%eax
cmp    -0x18(%rbp),%eax
jle    13c0 <step+0x2b0>
mov    -0x10(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x20(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x2d,%eax
jne    1306 <step+0x1f6>
mov    -0x10(%rbp),%rax
mov    -0x1c(%rbp),%ecx
sub    -0x28(%rbp),%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x20(%rbp),%ecx
sub    -0x28(%rbp),%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
mov    -0x10(%rbp),%rcx
movslq -0x14(%rbp),%rdx
mov    (%rcx,%rdx,8),%rcx
movslq -0x18(%rbp),%rdx
movsbl (%rcx,%rdx,1),%ecx
cmp    %ecx,%eax
jne    1306 <step+0x1f6>
mov    0x18(%rbp),%dl
mov    -0x10(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x20(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x18(%rbp),%rcx
movb   $0x2d,(%rax,%rcx,1)
mov    -0x10(%rbp),%rax
movslq -0x1c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x20(%rbp),%rcx
movb   $0x2d,(%rax,%rcx,1)
movl   $0x1,-0x4(%rbp)
jmp    1a2c <step+0x91c>
mov    -0x10(%rbp),%rax
mov    -0x1c(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x20(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x2d,%eax
jne    13bb <step+0x2ab>
mov    -0x10(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    -0x28(%rbp),%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x20(%rbp),%ecx
sub    -0x28(%rbp),%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
mov    -0x10(%rbp),%rcx
movslq -0x14(%rbp),%rdx
mov    (%rcx,%rdx,8),%rcx
movslq -0x18(%rbp),%rdx
movsbl (%rcx,%rdx,1),%ecx
cmp    %ecx,%eax
jne    13bb <step+0x2ab>
mov    0x18(%rbp),%dl
mov    -0x10(%rbp),%rax
mov    -0x1c(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x20(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x18(%rbp),%rcx
movb   $0x2d,(%rax,%rcx,1)
mov    -0x10(%rbp),%rax
movslq -0x1c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x20(%rbp),%rcx
movb   $0x2d,(%rax,%rcx,1)
movl   $0x1,-0x4(%rbp)
jmp    1a2c <step+0x91c>
jmp    152f <step+0x41f>
mov    -0x10(%rbp),%rax
mov    -0x1c(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x20(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x2d,%eax
jne    1475 <step+0x365>
mov    -0x10(%rbp),%rax
mov    -0x1c(%rbp),%ecx
sub    -0x28(%rbp),%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x20(%rbp),%ecx
sub    -0x28(%rbp),%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
mov    -0x10(%rbp),%rcx
movslq -0x14(%rbp),%rdx
mov    (%rcx,%rdx,8),%rcx
movslq -0x18(%rbp),%rdx
movsbl (%rcx,%rdx,1),%ecx
cmp    %ecx,%eax
jne    1475 <step+0x365>
mov    0x18(%rbp),%dl
mov    -0x10(%rbp),%rax
mov    -0x1c(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x20(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x18(%rbp),%rcx
movb   $0x2d,(%rax,%rcx,1)
mov    -0x10(%rbp),%rax
movslq -0x1c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x20(%rbp),%rcx
movb   $0x2d,(%rax,%rcx,1)
movl   $0x1,-0x4(%rbp)
jmp    1a2c <step+0x91c>
mov    -0x10(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x20(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x2d,%eax
jne    152a <step+0x41a>
mov    -0x10(%rbp),%rax
mov    -0x1c(%rbp),%ecx
sub    -0x28(%rbp),%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x20(%rbp),%ecx
add    -0x28(%rbp),%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
mov    -0x10(%rbp),%rcx
movslq -0x14(%rbp),%rdx
mov    (%rcx,%rdx,8),%rcx
movslq -0x18(%rbp),%rdx
movsbl (%rcx,%rdx,1),%ecx
cmp    %ecx,%eax
jne    152a <step+0x41a>
mov    0x18(%rbp),%dl
mov    -0x10(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x20(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x18(%rbp),%rcx
movb   $0x2d,(%rax,%rcx,1)
mov    -0x10(%rbp),%rax
movslq -0x1c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x20(%rbp),%rcx
movb   $0x2d,(%rax,%rcx,1)
movl   $0x1,-0x4(%rbp)
jmp    1a2c <step+0x91c>
jmp    152f <step+0x41f>
jmp    15a3 <step+0x493>
mov    -0x10(%rbp),%rdi
mov    -0x14(%rbp),%esi
mov    -0x18(%rbp),%edx
mov    -0x1c(%rbp),%ecx
mov    -0x20(%rbp),%r8d
movsbl 0x10(%rbp),%r9d
movsbl 0x18(%rbp),%eax
mov    %eax,(%rsp)
mov    $0x0,%al
call   1030 <restricaodama@plt>
cmp    $0x2,%eax
jne    1597 <step+0x487>
mov    0x18(%rbp),%dl
mov    -0x10(%rbp),%rax
movslq -0x1c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x20(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x18(%rbp),%rcx
movb   $0x2d,(%rax,%rcx,1)
movl   $0x1,-0x4(%rbp)
jmp    1a2c <step+0x91c>
movl   $0xffffffff,-0x4(%rbp)
jmp    1a2c <step+0x91c>
jmp    15a8 <step+0x498>
jmp    15ad <step+0x49d>
mov    -0x1c(%rbp),%eax
add    -0x20(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
cmp    $0x0,%edx
jne    1a25 <step+0x915>
cmpl   $0x7,-0x1c(%rbp)
je     15d8 <step+0x4c8>
cmpl   $0x0,-0x1c(%rbp)
jne    1624 <step+0x514>
mov    -0x10(%rbp),%rax
movslq -0x1c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x20(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
movsbl 0x10(%rbp),%ecx
cmp    %ecx,%eax
je     1618 <step+0x508>
mov    -0x10(%rbp),%rax
movslq -0x1c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x20(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
movsbl 0x20(%rbp),%ecx
cmp    %ecx,%eax
jne    1624 <step+0x514>
movl   $0xffffffff,-0x4(%rbp)
jmp    1a2c <step+0x91c>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x18(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
movsbl -0x21(%rbp),%ecx
cmp    %ecx,%eax
jne    1670 <step+0x560>
mov    -0x10(%rbp),%rax
movslq -0x1c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x20(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
movsbl -0x21(%rbp),%ecx
cmp    %ecx,%eax
jne    1670 <step+0x560>
movl   $0xffffffff,-0x4(%rbp)
jmp    1a2c <step+0x91c>
movsbl -0x21(%rbp),%eax
cmp    $0x42,%eax
jne    1689 <step+0x579>
mov    -0x1c(%rbp),%eax
cmp    -0x14(%rbp),%eax
jg     16a2 <step+0x592>
movsbl -0x21(%rbp),%eax
cmp    $0x50,%eax
jne    16ae <step+0x59e>
mov    -0x1c(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    16ae <step+0x59e>
movl   $0xffffffff,-0x4(%rbp)
jmp    1a2c <step+0x91c>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x18(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
movsbl -0x21(%rbp),%ecx
cmp    %ecx,%eax
jne    16dd <step+0x5cd>
mov    -0x1c(%rbp),%eax
sub    $0x1,%eax
cmp    -0x14(%rbp),%eax
je     170c <step+0x5fc>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x18(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
movsbl -0x21(%rbp),%ecx
cmp    %ecx,%eax
jne    1a20 <step+0x910>
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
cmp    -0x14(%rbp),%eax
jne    1a20 <step+0x910>
mov    -0x20(%rbp),%eax
mov    -0x18(%rbp),%ecx
add    $0x1,%ecx
cmp    %ecx,%eax
je     172e <step+0x61e>
mov    -0x20(%rbp),%eax
mov    -0x18(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jne    1786 <step+0x676>
mov    -0x10(%rbp),%rax
movslq -0x1c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x20(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x2d,%eax
jne    1781 <step+0x671>
mov    -0x21(%rbp),%dl
mov    -0x10(%rbp),%rax
movslq -0x1c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x20(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x18(%rbp),%rcx
movb   $0x2d,(%rax,%rcx,1)
movl   $0x1,-0x4(%rbp)
jmp    1a2c <step+0x91c>
jmp    1786 <step+0x676>
mov    -0x10(%rbp),%rax
movslq -0x1c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x20(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
movsbl 0x10(%rbp),%ecx
cmp    %ecx,%eax
jne    1a1b <step+0x90b>
mov    -0x10(%rbp),%rax
mov    -0x1c(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x20(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x2d,%eax
jne    1842 <step+0x732>
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    -0x18(%rbp),%ecx
add    $0x2,%ecx
cmp    %ecx,%eax
jne    1842 <step+0x732>
movsbl -0x21(%rbp),%eax
cmp    $0x42,%eax
jne    1842 <step+0x732>
mov    -0x21(%rbp),%dl
mov    -0x10(%rbp),%rax
mov    -0x1c(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x20(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x18(%rbp),%rcx
movb   $0x2d,(%rax,%rcx,1)
mov    -0x10(%rbp),%rax
movslq -0x1c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x20(%rbp),%rcx
movb   $0x2d,(%rax,%rcx,1)
movl   $0x1,-0x4(%rbp)
jmp    1a2c <step+0x91c>
mov    -0x10(%rbp),%rax
mov    -0x1c(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x20(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x2d,%eax
jne    18de <step+0x7ce>
mov    -0x20(%rbp),%eax
sub    $0x1,%eax
mov    -0x18(%rbp),%ecx
sub    $0x2,%ecx
cmp    %ecx,%eax
jne    18de <step+0x7ce>
movsbl -0x21(%rbp),%eax
cmp    $0x42,%eax
jne    18de <step+0x7ce>
mov    -0x21(%rbp),%dl
mov    -0x10(%rbp),%rax
mov    -0x1c(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x20(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x18(%rbp),%rcx
movb   $0x2d,(%rax,%rcx,1)
mov    -0x10(%rbp),%rax
movslq -0x1c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x20(%rbp),%rcx
movb   $0x2d,(%rax,%rcx,1)
movl   $0x1,-0x4(%rbp)
jmp    1a2c <step+0x91c>
mov    -0x10(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x20(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x2d,%eax
jne    197a <step+0x86a>
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    -0x18(%rbp),%ecx
add    $0x2,%ecx
cmp    %ecx,%eax
jne    197a <step+0x86a>
movsbl -0x21(%rbp),%eax
cmp    $0x50,%eax
jne    197a <step+0x86a>
mov    -0x21(%rbp),%dl
mov    -0x10(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x20(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x18(%rbp),%rcx
movb   $0x2d,(%rax,%rcx,1)
mov    -0x10(%rbp),%rax
movslq -0x1c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x20(%rbp),%rcx
movb   $0x2d,(%rax,%rcx,1)
movl   $0x1,-0x4(%rbp)
jmp    1a2c <step+0x91c>
mov    -0x10(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x20(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x2d,%eax
jne    1a16 <step+0x906>
mov    -0x20(%rbp),%eax
sub    $0x1,%eax
mov    -0x18(%rbp),%ecx
sub    $0x2,%ecx
cmp    %ecx,%eax
jne    1a16 <step+0x906>
movsbl -0x21(%rbp),%eax
cmp    $0x50,%eax
jne    1a16 <step+0x906>
mov    -0x21(%rbp),%dl
mov    -0x10(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x20(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x18(%rbp),%rcx
movb   $0x2d,(%rax,%rcx,1)
mov    -0x10(%rbp),%rax
movslq -0x1c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x20(%rbp),%rcx
movb   $0x2d,(%rax,%rcx,1)
movl   $0x1,-0x4(%rbp)
jmp    1a2c <step+0x91c>
jmp    1a1b <step+0x90b>
jmp    1a20 <step+0x910>
jmp    1a25 <step+0x915>
movl   $0xffffffff,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x40,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<step>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x48,%rsp
mov    %r8d,%r13d
mov    0x90(%rsp),%r11b
mov    0x88(%rsp),%bpl
mov    0x80(%rsp),%r10b
mov    %ecx,%eax
sub    %esi,%eax
sub    %edx,%r8d
test   %eax,%eax
cmovns %eax,%r8d
movslq %esi,%rax
lea    (%rdi,%rax,8),%rbx
mov    %rbx,0x10(%rsp)
mov    (%rdi,%rax,8),%rax
movslq %edx,%r14
mov    (%rax,%r14,1),%r15b
cmp    %bpl,%r15b
jne    1220 <step+0x110>
cmp    $0x7,%ecx
je     116f <step+0x5f>
test   %ecx,%ecx
jne    1192 <step+0x82>
mov    %ecx,%eax
mov    (%rdi,%rax,8),%rax
movslq %r13d,%rbx
mov    (%rax,%rbx,1),%al
mov    $0xffffffff,%ebx
cmp    %r10b,%al
je     1472 <step+0x362>
cmp    %r11b,%al
je     1472 <step+0x362>
lea    (%rcx,%r13,1),%eax
mov    $0xffffffff,%ebx
test   $0x1,%al
jne    1472 <step+0x362>
mov    %r14,0x40(%rsp)
movslq %ecx,%r12
lea    (%rdi,%r12,8),%rax
mov    %rax,0x28(%rsp)
mov    (%rdi,%r12,8),%rax
mov    %r11d,%r14d
mov    %r10d,%r11d
movslq %r13d,%r10
mov    %r10,0x30(%rsp)
mov    (%rax,%r10,1),%al
mov    %r11d,%r10d
mov    %r14d,%r11d
cmp    %r10b,%al
je     1304 <step+0x1f4>
cmp    %r11b,%al
je     1304 <step+0x1f4>
movsbl %bpl,%eax
movsbl %r10b,%r9d
mov    %eax,(%rsp)
mov    %r13d,%r8d
xor    %eax,%eax
call   1030 <restricaodama@plt>
cmp    $0x2,%eax
mov    0x40(%rsp),%rsi
jne    1472 <step+0x362>
mov    0x28(%rsp),%rax
mov    (%rax),%rax
mov    0x30(%rsp),%rcx
mov    %bpl,(%rax,%rcx,1)
mov    0x10(%rsp),%rcx
jmp    1466 <step+0x356>
lea    (%rcx,%r13,1),%eax
mov    $0xffffffff,%ebx
test   $0x1,%al
jne    1472 <step+0x362>
cmp    $0x7,%ecx
je     123a <step+0x12a>
test   %ecx,%ecx
jne    125d <step+0x14d>
mov    %ecx,%eax
mov    (%rdi,%rax,8),%rax
movslq %r13d,%rbp
mov    (%rax,%rbp,1),%al
mov    $0xffffffff,%ebx
cmp    %r10b,%al
je     1472 <step+0x362>
cmp    %r11b,%al
je     1472 <step+0x362>
cmp    %r9b,%r15b
jne    127b <step+0x16b>
movslq %ecx,%rax
mov    (%rdi,%rax,8),%rax
movslq %r13d,%rbp
mov    $0xffffffff,%ebx
cmp    %r9b,(%rax,%rbp,1)
je     1472 <step+0x362>
mov    $0xffffffff,%ebx
cmp    %esi,%ecx
jle    128e <step+0x17e>
cmp    $0x42,%r9b
je     1472 <step+0x362>
cmp    %esi,%ecx
jge    129c <step+0x18c>
cmp    $0x50,%r9b
je     1472 <step+0x362>
lea    -0x1(%rcx),%ebp
cmp    %r9b,%r15b
jne    12a8 <step+0x198>
cmp    %esi,%ebp
je     12bc <step+0x1ac>
cmp    %r9b,%r15b
jne    1472 <step+0x362>
lea    0x1(%rcx),%eax
cmp    %esi,%eax
jne    1472 <step+0x362>
lea    0x1(%rdx),%r8d
cmp    %r13d,%r8d
sete   %sil
add    $0xffffffff,%edx
cmp    %r13d,%edx
sete   %al
or     %sil,%al
movslq %ecx,%r15
mov    (%rdi,%r15,8),%rcx
movslq %r13d,%rsi
mov    (%rcx,%rsi,1),%r11b
cmp    $0x1,%al
jne    1483 <step+0x373>
cmp    $0x2d,%r11b
jne    1483 <step+0x373>
mov    %r9b,(%rcx,%rsi,1)
mov    0x10(%rsp),%rcx
mov    %r14,%rsi
jmp    1466 <step+0x356>
cmp    %edx,%r13d
mov    0x40(%rsp),%r14
jle    136a <step+0x25a>
mov    0x8(%rdi,%r12,8),%rax
mov    %rax,0x18(%rsp)
movslq %r13d,%rax
mov    %rax,%rbx
mov    %rax,0x20(%rsp)
mov    0x18(%rsp),%rbx
cmpb   $0x2d,0x1(%rax,%rbx,1)
jne    13c2 <step+0x2b2>
mov    %ecx,%eax
sub    %r8d,%eax
cltq
mov    (%rdi,%rax,8),%rax
mov    %rax,0x38(%rsp)
mov    %r13d,%eax
sub    %r8d,%eax
cltq
mov    0x38(%rsp),%rbx
cmp    %bpl,(%rbx,%rax,1)
mov    0x18(%rsp),%rax
jne    13c2 <step+0x2b2>
mov    0x20(%rsp),%rcx
mov    %bpl,0x1(%rax,%rcx,1)
jmp    144f <step+0x33f>
mov    -0x8(%rdi,%r12,8),%rax
mov    %rax,0x18(%rsp)
movslq %r13d,%rax
mov    %rax,%rbx
mov    %rax,0x20(%rsp)
mov    0x18(%rsp),%rbx
cmpb   $0x2d,-0x1(%rax,%rbx,1)
jne    140a <step+0x2fa>
mov    %ecx,%eax
sub    %r8d,%eax
cltq
mov    (%rdi,%rax,8),%rax
mov    %rax,0x38(%rsp)
mov    %r13d,%eax
sub    %r8d,%eax
cltq
mov    0x38(%rsp),%rbx
cmp    %bpl,(%rbx,%rax,1)
mov    0x18(%rsp),%rax
jne    140a <step+0x2fa>
mov    0x20(%rsp),%rcx
mov    %bpl,-0x1(%rax,%rcx,1)
jmp    144f <step+0x33f>
mov    -0x8(%rdi,%r12,8),%r12
mov    0x20(%rsp),%rax
cmpb   $0x2d,0x1(%r12,%rax,1)
jne    1231 <step+0x121>
lea    (%r8,%rcx,1),%eax
cltq
mov    (%rdi,%rax,8),%rax
mov    %rax,0x18(%rsp)
mov    %r13d,%eax
sub    %r8d,%eax
cltq
mov    0x18(%rsp),%rbx
cmp    %bpl,(%rbx,%rax,1)
jne    1231 <step+0x121>
mov    0x20(%rsp),%rax
mov    %bpl,0x1(%r12,%rax,1)
jmp    144f <step+0x33f>
mov    0x8(%rdi,%r12,8),%r12
mov    0x20(%rsp),%rax
cmpb   $0x2d,-0x1(%r12,%rax,1)
jne    1231 <step+0x121>
mov    %ecx,%eax
sub    %r8d,%eax
cltq
mov    (%rdi,%rax,8),%rax
mov    %rax,0x18(%rsp)
add    %r13d,%r8d
movslq %r8d,%rax
mov    0x18(%rsp),%rbx
cmp    %bpl,(%rbx,%rax,1)
jne    1231 <step+0x121>
mov    0x20(%rsp),%rax
mov    %bpl,-0x1(%r12,%rax,1)
mov    0x10(%rsp),%rax
mov    (%rax),%rax
movb   $0x2d,(%rax,%r14,1)
mov    0x30(%rsp),%rsi
mov    0x28(%rsp),%rcx
mov    (%rcx),%rax
movb   $0x2d,(%rax,%rsi,1)
mov    $0x1,%ebx
mov    %ebx,%eax
add    $0x48,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
cmp    %r10b,%r11b
jne    1472 <step+0x362>
lea    (%rdi,%r15,8),%rcx
movslq %ebp,%rax
mov    (%rdi,%rax,8),%rbp
movslq %r13d,%rax
cmpb   $0x2d,0x1(%rax,%rbp,1)
jne    14af <step+0x39f>
cmp    %r13d,%r8d
jne    14af <step+0x39f>
cmp    $0x42,%r9b
jne    14af <step+0x39f>
movb   $0x42,0x1(%rbp,%rax,1)
jmp    1501 <step+0x3f1>
cmpb   $0x2d,-0x1(%rax,%rbp,1)
jne    14c8 <step+0x3b8>
cmp    %r13d,%edx
jne    14c8 <step+0x3b8>
cmp    $0x42,%r9b
jne    14c8 <step+0x3b8>
movb   $0x42,-0x1(%rbp,%rax,1)
jmp    1501 <step+0x3f1>
mov    0x8(%rdi,%r15,8),%rdi
cmpb   $0x2d,0x1(%rdi,%rax,1)
jne    14e6 <step+0x3d6>
cmp    %r13d,%r8d
jne    14e6 <step+0x3d6>
cmp    $0x50,%r9b
jne    14e6 <step+0x3d6>
movb   $0x50,0x1(%rdi,%rax,1)
jmp    1501 <step+0x3f1>
cmpb   $0x2d,-0x1(%rdi,%rax,1)
jne    1472 <step+0x362>
cmp    %r13d,%edx
jne    1472 <step+0x362>
cmp    $0x50,%r9b
jne    1472 <step+0x362>
movb   $0x50,-0x1(%rdi,%rax,1)
mov    0x10(%rsp),%rax
mov    (%rax),%rax
movb   $0x2d,(%rax,%r14,1)
jmp    1466 <step+0x356>

LLVM IR (-O0):
define i32 @step(i8** %0, i32 %1, i32 %2, i32 %3, i32 %4, i8 signext %5, i8 signext %6, i8 signext %7, i8 signext %8) {
%10 = alloca i32
%11 = alloca i8**
%12 = alloca i32
%13 = alloca i32
%14 = alloca i32
%15 = alloca i32
%16 = alloca i8
%17 = alloca i8
%18 = alloca i8
%19 = alloca i8
%20 = alloca i32
store i8** %0, i8*** %11
store i32 %1, i32* %12
store i32 %2, i32* %13
store i32 %3, i32* %14
store i32 %4, i32* %15
store i8 %5, i8* %16
store i8 %6, i8* %17
store i8 %7, i8* %18
store i8 %8, i8* %19
store i32 0, i32* %20
%21 = load i32, i32* %14
%22 = load i32, i32* %12
%23 = sub nsw i32 %21, %22
%24 = icmp slt i32 %23, 0
br i1 %24, label %25, label %29
25: ; preds = %9
%26 = load i32, i32* %15
%27 = load i32, i32* %13
%28 = sub nsw i32 %26, %27
br label %33
29: ; preds = %9
%30 = load i32, i32* %14
%31 = load i32, i32* %12
%32 = sub nsw i32 %30, %31
br label %33
33: ; preds = %29, %25
%34 = phi i32 [ %28, %25 ], [ %32, %29 ]
store i32 %34, i32* %20
%35 = load i8**, i8*** %11
%36 = load i32, i32* %12
%37 = sext i32 %36 to i64
%38 = getelementptr inbounds i8*, i8** %35, i64 %37
%39 = load i8*, i8** %38
%40 = load i32, i32* %13
%41 = sext i32 %40 to i64
%42 = getelementptr inbounds i8, i8* %39, i64 %41
%43 = load i8, i8* %42
%44 = sext i8 %43 to i32
%45 = load i8, i8* %18
%46 = sext i8 %45 to i32
%47 = icmp eq i32 %44, %46
br i1 %47, label %48, label %429
48: ; preds = %33
%49 = load i32, i32* %14
%50 = icmp eq i32 %49, 7
br i1 %50, label %54, label %51
51: ; preds = %48
%52 = load i32, i32* %14
%53 = icmp eq i32 %52, 0
br i1 %53, label %54, label %83
54: ; preds = %51, %48
%55 = load i8**, i8*** %11
%56 = load i32, i32* %14
%57 = sext i32 %56 to i64
%58 = getelementptr inbounds i8*, i8** %55, i64 %57
%59 = load i8*, i8** %58
%60 = load i32, i32* %15
%61 = sext i32 %60 to i64
%62 = getelementptr inbounds i8, i8* %59, i64 %61
%63 = load i8, i8* %62
%64 = sext i8 %63 to i32
%65 = load i8, i8* %17
%66 = sext i8 %65 to i32
%67 = icmp eq i32 %64, %66
br i1 %67, label %82, label %68
68: ; preds = %54
%69 = load i8**, i8*** %11
%70 = load i32, i32* %14
%71 = sext i32 %70 to i64
%72 = getelementptr inbounds i8*, i8** %69, i64 %71
%73 = load i8*, i8** %72
%74 = load i32, i32* %15
%75 = sext i32 %74 to i64
%76 = getelementptr inbounds i8, i8* %73, i64 %75
%77 = load i8, i8* %76
%78 = sext i8 %77 to i32
%79 = load i8, i8* %19
%80 = sext i8 %79 to i32
%81 = icmp eq i32 %78, %80
br i1 %81, label %82, label %83
82: ; preds = %68, %54
store i32 -1, i32* %10
br label %821
83: ; preds = %68, %51
%84 = load i32, i32* %14
%85 = load i32, i32* %15
%86 = add nsw i32 %84, %85
%87 = srem i32 %86, 2
%88 = icmp eq i32 %87, 0
br i1 %88, label %89, label %428
89: ; preds = %83
%90 = load i8**, i8*** %11
%91 = load i32, i32* %14
%92 = sext i32 %91 to i64
%93 = getelementptr inbounds i8*, i8** %90, i64 %92
%94 = load i8*, i8** %93
%95 = load i32, i32* %15
%96 = sext i32 %95 to i64
%97 = getelementptr inbounds i8, i8* %94, i64 %96
%98 = load i8, i8* %97
%99 = sext i8 %98 to i32
%100 = load i8, i8* %17
%101 = sext i8 %100 to i32
%102 = icmp eq i32 %99, %101
br i1 %102, label %117, label %103
103: ; preds = %89
%104 = load i8**, i8*** %11
%105 = load i32, i32* %14
%106 = sext i32 %105 to i64
%107 = getelementptr inbounds i8*, i8** %104, i64 %106
%108 = load i8*, i8** %107
%109 = load i32, i32* %15
%110 = sext i32 %109 to i64
%111 = getelementptr inbounds i8, i8* %108, i64 %110
%112 = load i8, i8* %111
%113 = sext i8 %112 to i32
%114 = load i8, i8* %19
%115 = sext i8 %114 to i32
%116 = icmp eq i32 %113, %115
br i1 %116, label %117, label %396
117: ; preds = %103, %89
%118 = load i32, i32* %15
%119 = load i32, i32* %13
%120 = icmp sgt i32 %118, %119
br i1 %120, label %121, label %258
121: ; preds = %117
%122 = load i8**, i8*** %11
%123 = load i32, i32* %14
%124 = add nsw i32 %123, 1
%125 = sext i32 %124 to i64
%126 = getelementptr inbounds i8*, i8** %122, i64 %125
%127 = load i8*, i8** %126
%128 = load i32, i32* %15
%129 = add nsw i32 %128, 1
%130 = sext i32 %129 to i64
%131 = getelementptr inbounds i8, i8* %127, i64 %130
%132 = load i8, i8* %131
%133 = sext i8 %132 to i32
%134 = icmp eq i32 %133, 45
br i1 %134, label %135, label %189
135: ; preds = %121
%136 = load i8**, i8*** %11
%137 = load i32, i32* %14
%138 = load i32, i32* %20
%139 = sub nsw i32 %137, %138
%140 = sext i32 %139 to i64
%141 = getelementptr inbounds i8*, i8** %136, i64 %140
%142 = load i8*, i8** %141
%143 = load i32, i32* %15
%144 = load i32, i32* %20
%145 = sub nsw i32 %143, %144
%146 = sext i32 %145 to i64
%147 = getelementptr inbounds i8, i8* %142, i64 %146
%148 = load i8, i8* %147
%149 = sext i8 %148 to i32
%150 = load i8**, i8*** %11
%151 = load i32, i32* %12
%152 = sext i32 %151 to i64
%153 = getelementptr inbounds i8*, i8** %150, i64 %152
%154 = load i8*, i8** %153
%155 = load i32, i32* %13
%156 = sext i32 %155 to i64
%157 = getelementptr inbounds i8, i8* %154, i64 %156
%158 = load i8, i8* %157
%159 = sext i8 %158 to i32
%160 = icmp eq i32 %149, %159
br i1 %160, label %161, label %189
161: ; preds = %135
%162 = load i8, i8* %18
%163 = load i8**, i8*** %11
%164 = load i32, i32* %14
%165 = add nsw i32 %164, 1
%166 = sext i32 %165 to i64
%167 = getelementptr inbounds i8*, i8** %163, i64 %166
%168 = load i8*, i8** %167
%169 = load i32, i32* %15
%170 = add nsw i32 %169, 1
%171 = sext i32 %170 to i64
%172 = getelementptr inbounds i8, i8* %168, i64 %171
store i8 %162, i8* %172
%173 = load i8**, i8*** %11
%174 = load i32, i32* %12
%175 = sext i32 %174 to i64
%176 = getelementptr inbounds i8*, i8** %173, i64 %175
%177 = load i8*, i8** %176
%178 = load i32, i32* %13
%179 = sext i32 %178 to i64
%180 = getelementptr inbounds i8, i8* %177, i64 %179
store i8 45, i8* %180
%181 = load i8**, i8*** %11
%182 = load i32, i32* %14
%183 = sext i32 %182 to i64
%184 = getelementptr inbounds i8*, i8** %181, i64 %183
%185 = load i8*, i8** %184
%186 = load i32, i32* %15
%187 = sext i32 %186 to i64
%188 = getelementptr inbounds i8, i8* %185, i64 %187
store i8 45, i8* %188
store i32 1, i32* %10
br label %821
189: ; preds = %135, %121
%190 = load i8**, i8*** %11
%191 = load i32, i32* %14
%192 = sub nsw i32 %191, 1
%193 = sext i32 %192 to i64
%194 = getelementptr inbounds i8*, i8** %190, i64 %193
%195 = load i8*, i8** %194
%196 = load i32, i32* %15
%197 = add nsw i32 %196, 1
%198 = sext i32 %197 to i64
%199 = getelementptr inbounds i8, i8* %195, i64 %198
%200 = load i8, i8* %199
%201 = sext i8 %200 to i32
%202 = icmp eq i32 %201, 45
br i1 %202, label %203, label %257
203: ; preds = %189
%204 = load i8**, i8*** %11
%205 = load i32, i32* %14
%206 = load i32, i32* %20
%207 = add nsw i32 %205, %206
%208 = sext i32 %207 to i64
%209 = getelementptr inbounds i8*, i8** %204, i64 %208
%210 = load i8*, i8** %209
%211 = load i32, i32* %15
%212 = load i32, i32* %20
%213 = sub nsw i32 %211, %212
%214 = sext i32 %213 to i64
%215 = getelementptr inbounds i8, i8* %210, i64 %214
%216 = load i8, i8* %215
%217 = sext i8 %216 to i32
%218 = load i8**, i8*** %11
%219 = load i32, i32* %12
%220 = sext i32 %219 to i64
%221 = getelementptr inbounds i8*, i8** %218, i64 %220
%222 = load i8*, i8** %221
%223 = load i32, i32* %13
%224 = sext i32 %223 to i64
%225 = getelementptr inbounds i8, i8* %222, i64 %224
%226 = load i8, i8* %225
%227 = sext i8 %226 to i32
%228 = icmp eq i32 %217, %227
br i1 %228, label %229, label %257
229: ; preds = %203
%230 = load i8, i8* %18
%231 = load i8**, i8*** %11
%232 = load i32, i32* %14
%233 = sub nsw i32 %232, 1
%234 = sext i32 %233 to i64
%235 = getelementptr inbounds i8*, i8** %231, i64 %234
%236 = load i8*, i8** %235
%237 = load i32, i32* %15
%238 = add nsw i32 %237, 1
%239 = sext i32 %238 to i64
%240 = getelementptr inbounds i8, i8* %236, i64 %239
store i8 %230, i8* %240
%241 = load i8**, i8*** %11
%242 = load i32, i32* %12
%243 = sext i32 %242 to i64
%244 = getelementptr inbounds i8*, i8** %241, i64 %243
%245 = load i8*, i8** %244
%246 = load i32, i32* %13
%247 = sext i32 %246 to i64
%248 = getelementptr inbounds i8, i8* %245, i64 %247
store i8 45, i8* %248
%249 = load i8**, i8*** %11
%250 = load i32, i32* %14
%251 = sext i32 %250 to i64
%252 = getelementptr inbounds i8*, i8** %249, i64 %251
%253 = load i8*, i8** %252
%254 = load i32, i32* %15
%255 = sext i32 %254 to i64
%256 = getelementptr inbounds i8, i8* %253, i64 %255
store i8 45, i8* %256
store i32 1, i32* %10
br label %821
257: ; preds = %203, %189
br label %395
258: ; preds = %117
%259 = load i8**, i8*** %11
%260 = load i32, i32* %14
%261 = sub nsw i32 %260, 1
%262 = sext i32 %261 to i64
%263 = getelementptr inbounds i8*, i8** %259, i64 %262
%264 = load i8*, i8** %263
%265 = load i32, i32* %15
%266 = sub nsw i32 %265, 1
%267 = sext i32 %266 to i64
%268 = getelementptr inbounds i8, i8* %264, i64 %267
%269 = load i8, i8* %268
%270 = sext i8 %269 to i32
%271 = icmp eq i32 %270, 45
br i1 %271, label %272, label %326
272: ; preds = %258
%273 = load i8**, i8*** %11
%274 = load i32, i32* %14
%275 = load i32, i32* %20
%276 = sub nsw i32 %274, %275
%277 = sext i32 %276 to i64
%278 = getelementptr inbounds i8*, i8** %273, i64 %277
%279 = load i8*, i8** %278
%280 = load i32, i32* %15
%281 = load i32, i32* %20
%282 = sub nsw i32 %280, %281
%283 = sext i32 %282 to i64
%284 = getelementptr inbounds i8, i8* %279, i64 %283
%285 = load i8, i8* %284
%286 = sext i8 %285 to i32
%287 = load i8**, i8*** %11
%288 = load i32, i32* %12
%289 = sext i32 %288 to i64
%290 = getelementptr inbounds i8*, i8** %287, i64 %289
%291 = load i8*, i8** %290
%292 = load i32, i32* %13
%293 = sext i32 %292 to i64
%294 = getelementptr inbounds i8, i8* %291, i64 %293
%295 = load i8, i8* %294
%296 = sext i8 %295 to i32
%297 = icmp eq i32 %286, %296
br i1 %297, label %298, label %326
298: ; preds = %272
%299 = load i8, i8* %18
%300 = load i8**, i8*** %11
%301 = load i32, i32* %14
%302 = sub nsw i32 %301, 1
%303 = sext i32 %302 to i64
%304 = getelementptr inbounds i8*, i8** %300, i64 %303
%305 = load i8*, i8** %304
%306 = load i32, i32* %15
%307 = sub nsw i32 %306, 1
%308 = sext i32 %307 to i64
%309 = getelementptr inbounds i8, i8* %305, i64 %308
store i8 %299, i8* %309
%310 = load i8**, i8*** %11
%311 = load i32, i32* %12
%312 = sext i32 %311 to i64
%313 = getelementptr inbounds i8*, i8** %310, i64 %312
%314 = load i8*, i8** %313
%315 = load i32, i32* %13
%316 = sext i32 %315 to i64
%317 = getelementptr inbounds i8, i8* %314, i64 %316
store i8 45, i8* %317
%318 = load i8**, i8*** %11
%319 = load i32, i32* %14
%320 = sext i32 %319 to i64
%321 = getelementptr inbounds i8*, i8** %318, i64 %320
%322 = load i8*, i8** %321
%323 = load i32, i32* %15
%324 = sext i32 %323 to i64
%325 = getelementptr inbounds i8, i8* %322, i64 %324
store i8 45, i8* %325
store i32 1, i32* %10
br label %821
326: ; preds = %272, %258
%327 = load i8**, i8*** %11
%328 = load i32, i32* %14
%329 = add nsw i32 %328, 1
%330 = sext i32 %329 to i64
%331 = getelementptr inbounds i8*, i8** %327, i64 %330
%332 = load i8*, i8** %331
%333 = load i32, i32* %15
%334 = sub nsw i32 %333, 1
%335 = sext i32 %334 to i64
%336 = getelementptr inbounds i8, i8* %332, i64 %335
%337 = load i8, i8* %336
%338 = sext i8 %337 to i32
%339 = icmp eq i32 %338, 45
br i1 %339, label %340, label %394
340: ; preds = %326
%341 = load i8**, i8*** %11
%342 = load i32, i32* %14
%343 = load i32, i32* %20
%344 = sub nsw i32 %342, %343
%345 = sext i32 %344 to i64
%346 = getelementptr inbounds i8*, i8** %341, i64 %345
%347 = load i8*, i8** %346
%348 = load i32, i32* %15
%349 = load i32, i32* %20
%350 = add nsw i32 %348, %349
%351 = sext i32 %350 to i64
%352 = getelementptr inbounds i8, i8* %347, i64 %351
%353 = load i8, i8* %352
%354 = sext i8 %353 to i32
%355 = load i8**, i8*** %11
%356 = load i32, i32* %12
%357 = sext i32 %356 to i64
%358 = getelementptr inbounds i8*, i8** %355, i64 %357
%359 = load i8*, i8** %358
%360 = load i32, i32* %13
%361 = sext i32 %360 to i64
%362 = getelementptr inbounds i8, i8* %359, i64 %361
%363 = load i8, i8* %362
%364 = sext i8 %363 to i32
%365 = icmp eq i32 %354, %364
br i1 %365, label %366, label %394
366: ; preds = %340
%367 = load i8, i8* %18
%368 = load i8**, i8*** %11
%369 = load i32, i32* %14
%370 = add nsw i32 %369, 1
%371 = sext i32 %370 to i64
%372 = getelementptr inbounds i8*, i8** %368, i64 %371
%373 = load i8*, i8** %372
%374 = load i32, i32* %15
%375 = sub nsw i32 %374, 1
%376 = sext i32 %375 to i64
%377 = getelementptr inbounds i8, i8* %373, i64 %376
store i8 %367, i8* %377
%378 = load i8**, i8*** %11
%379 = load i32, i32* %12
%380 = sext i32 %379 to i64
%381 = getelementptr inbounds i8*, i8** %378, i64 %380
%382 = load i8*, i8** %381
%383 = load i32, i32* %13
%384 = sext i32 %383 to i64
%385 = getelementptr inbounds i8, i8* %382, i64 %384
store i8 45, i8* %385
%386 = load i8**, i8*** %11
%387 = load i32, i32* %14
%388 = sext i32 %387 to i64
%389 = getelementptr inbounds i8*, i8** %386, i64 %388
%390 = load i8*, i8** %389
%391 = load i32, i32* %15
%392 = sext i32 %391 to i64
%393 = getelementptr inbounds i8, i8* %390, i64 %392
store i8 45, i8* %393
store i32 1, i32* %10
br label %821
394: ; preds = %340, %326
br label %395
395: ; preds = %394, %257
br label %427
396: ; preds = %103
%397 = load i8**, i8*** %11
%398 = load i32, i32* %12
%399 = load i32, i32* %13
%400 = load i32, i32* %14
%401 = load i32, i32* %15
%402 = load i8, i8* %17
%403 = sext i8 %402 to i32
%404 = load i8, i8* %18
%405 = sext i8 %404 to i32
%406 = call i32 (i8**, i32, i32, i32, i32, i32, i32, ...) bitcast (i32 (...)* @restricaodama to i32 (i8**, i32, i32, i32, i32, i32, i32, ...)*)(i8** %397, i32 %398, i32 %399, i32 %400, i32 %401, i32 %403, i32 %405)
%407 = icmp eq i32 %406, 2
br i1 %407, label %408, label %426
408: ; preds = %396
%409 = load i8, i8* %18
%410 = load i8**, i8*** %11
%411 = load i32, i32* %14
%412 = sext i32 %411 to i64
%413 = getelementptr inbounds i8*, i8** %410, i64 %412
%414 = load i8*, i8** %413
%415 = load i32, i32* %15
%416 = sext i32 %415 to i64
%417 = getelementptr inbounds i8, i8* %414, i64 %416
store i8 %409, i8* %417
%418 = load i8**, i8*** %11
%419 = load i32, i32* %12
%420 = sext i32 %419 to i64
%421 = getelementptr inbounds i8*, i8** %418, i64 %420
%422 = load i8*, i8** %421
%423 = load i32, i32* %13
%424 = sext i32 %423 to i64
%425 = getelementptr inbounds i8, i8* %422, i64 %424
store i8 45, i8* %425
store i32 1, i32* %10
br label %821
426: ; preds = %396
store i32 -1, i32* %10
br label %821
427: ; preds = %395
br label %428
428: ; preds = %427, %83
br label %429
429: ; preds = %428, %33
%430 = load i32, i32* %14
%431 = load i32, i32* %15
%432 = add nsw i32 %430, %431
%433 = srem i32 %432, 2
%434 = icmp eq i32 %433, 0
br i1 %434, label %435, label %820
435: ; preds = %429
%436 = load i32, i32* %14
%437 = icmp eq i32 %436, 7
br i1 %437, label %441, label %438
438: ; preds = %435
%439 = load i32, i32* %14
%440 = icmp eq i32 %439, 0
br i1 %440, label %441, label %470
441: ; preds = %438, %435
%442 = load i8**, i8*** %11
%443 = load i32, i32* %14
%444 = sext i32 %443 to i64
%445 = getelementptr inbounds i8*, i8** %442, i64 %444
%446 = load i8*, i8** %445
%447 = load i32, i32* %15
%448 = sext i32 %447 to i64
%449 = getelementptr inbounds i8, i8* %446, i64 %448
%450 = load i8, i8* %449
%451 = sext i8 %450 to i32
%452 = load i8, i8* %17
%453 = sext i8 %452 to i32
%454 = icmp eq i32 %451, %453
br i1 %454, label %469, label %455
455: ; preds = %441
%456 = load i8**, i8*** %11
%457 = load i32, i32* %14
%458 = sext i32 %457 to i64
%459 = getelementptr inbounds i8*, i8** %456, i64 %458
%460 = load i8*, i8** %459
%461 = load i32, i32* %15
%462 = sext i32 %461 to i64
%463 = getelementptr inbounds i8, i8* %460, i64 %462
%464 = load i8, i8* %463
%465 = sext i8 %464 to i32
%466 = load i8, i8* %19
%467 = sext i8 %466 to i32
%468 = icmp eq i32 %465, %467
br i1 %468, label %469, label %470
469: ; preds = %455, %441
store i32 -1, i32* %10
br label %821
470: ; preds = %455, %438
%471 = load i8**, i8*** %11
%472 = load i32, i32* %12
%473 = sext i32 %472 to i64
%474 = getelementptr inbounds i8*, i8** %471, i64 %473
%475 = load i8*, i8** %474
%476 = load i32, i32* %13
%477 = sext i32 %476 to i64
%478 = getelementptr inbounds i8, i8* %475, i64 %477
%479 = load i8, i8* %478
%480 = sext i8 %479 to i32
%481 = load i8, i8* %16
%482 = sext i8 %481 to i32
%483 = icmp eq i32 %480, %482
br i1 %483, label %484, label %499
484: ; preds = %470
%485 = load i8**, i8*** %11
%486 = load i32, i32* %14
%487 = sext i32 %486 to i64
%488 = getelementptr inbounds i8*, i8** %485, i64 %487
%489 = load i8*, i8** %488
%490 = load i32, i32* %15
%491 = sext i32 %490 to i64
%492 = getelementptr inbounds i8, i8* %489, i64 %491
%493 = load i8, i8* %492
%494 = sext i8 %493 to i32
%495 = load i8, i8* %16
%496 = sext i8 %495 to i32
%497 = icmp eq i32 %494, %496
br i1 %497, label %498, label %499
498: ; preds = %484
store i32 -1, i32* %10
br label %821
499: ; preds = %484, %470
%500 = load i8, i8* %16
%501 = sext i8 %500 to i32
%502 = icmp eq i32 %501, 66
br i1 %502, label %503, label %507
503: ; preds = %499
%504 = load i32, i32* %14
%505 = load i32, i32* %12
%506 = icmp sgt i32 %504, %505
br i1 %506, label %515, label %507
507: ; preds = %503, %499
%508 = load i8, i8* %16
%509 = sext i8 %508 to i32
%510 = icmp eq i32 %509, 80
br i1 %510, label %511, label %516
511: ; preds = %507
%512 = load i32, i32* %14
%513 = load i32, i32* %12
%514 = icmp slt i32 %512, %513
br i1 %514, label %515, label %516
515: ; preds = %511, %503
store i32 -1, i32* %10
br label %821
516: ; preds = %511, %507
%517 = load i8**, i8*** %11
%518 = load i32, i32* %12
%519 = sext i32 %518 to i64
%520 = getelementptr inbounds i8*, i8** %517, i64 %519
%521 = load i8*, i8** %520
%522 = load i32, i32* %13
%523 = sext i32 %522 to i64
%524 = getelementptr inbounds i8, i8* %521, i64 %523
%525 = load i8, i8* %524
%526 = sext i8 %525 to i32
%527 = load i8, i8* %16
%528 = sext i8 %527 to i32
%529 = icmp eq i32 %526, %528
br i1 %529, label %530, label %535
530: ; preds = %516
%531 = load i32, i32* %14
%532 = sub nsw i32 %531, 1
%533 = load i32, i32* %12
%534 = icmp eq i32 %532, %533
br i1 %534, label %554, label %535
535: ; preds = %530, %516
%536 = load i8**, i8*** %11
%537 = load i32, i32* %12
%538 = sext i32 %537 to i64
%539 = getelementptr inbounds i8*, i8** %536, i64 %538
%540 = load i8*, i8** %539
%541 = load i32, i32* %13
%542 = sext i32 %541 to i64
%543 = getelementptr inbounds i8, i8* %540, i64 %542
%544 = load i8, i8* %543
%545 = sext i8 %544 to i32
%546 = load i8, i8* %16
%547 = sext i8 %546 to i32
%548 = icmp eq i32 %545, %547
br i1 %548, label %549, label %819
549: ; preds = %535
%550 = load i32, i32* %14
%551 = add nsw i32 %550, 1
%552 = load i32, i32* %12
%553 = icmp eq i32 %551, %552
br i1 %553, label %554, label %819
554: ; preds = %549, %530
%555 = load i32, i32* %15
%556 = load i32, i32* %13
%557 = add nsw i32 %556, 1
%558 = icmp eq i32 %555, %557
br i1 %558, label %564, label %559
559: ; preds = %554
%560 = load i32, i32* %15
%561 = load i32, i32* %13
%562 = sub nsw i32 %561, 1
%563 = icmp eq i32 %560, %562
br i1 %563, label %564, label %595
564: ; preds = %559, %554
%565 = load i8**, i8*** %11
%566 = load i32, i32* %14
%567 = sext i32 %566 to i64
%568 = getelementptr inbounds i8*, i8** %565, i64 %567
%569 = load i8*, i8** %568
%570 = load i32, i32* %15
%571 = sext i32 %570 to i64
%572 = getelementptr inbounds i8, i8* %569, i64 %571
%573 = load i8, i8* %572
%574 = sext i8 %573 to i32
%575 = icmp eq i32 %574, 45
br i1 %575, label %576, label %594
576: ; preds = %564
%577 = load i8, i8* %16
%578 = load i8**, i8*** %11
%579 = load i32, i32* %14
%580 = sext i32 %579 to i64
%581 = getelementptr inbounds i8*, i8** %578, i64 %580
%582 = load i8*, i8** %581
%583 = load i32, i32* %15
%584 = sext i32 %583 to i64
%585 = getelementptr inbounds i8, i8* %582, i64 %584
store i8 %577, i8* %585
%586 = load i8**, i8*** %11
%587 = load i32, i32* %12
%588 = sext i32 %587 to i64
%589 = getelementptr inbounds i8*, i8** %586, i64 %588
%590 = load i8*, i8** %589
%591 = load i32, i32* %13
%592 = sext i32 %591 to i64
%593 = getelementptr inbounds i8, i8* %590, i64 %592
store i8 45, i8* %593
store i32 1, i32* %10
br label %821
594: ; preds = %564
br label %595
595: ; preds = %594, %559
%596 = load i8**, i8*** %11
%597 = load i32, i32* %14
%598 = sext i32 %597 to i64
%599 = getelementptr inbounds i8*, i8** %596, i64 %598
%600 = load i8*, i8** %599
%601 = load i32, i32* %15
%602 = sext i32 %601 to i64
%603 = getelementptr inbounds i8, i8* %600, i64 %602
%604 = load i8, i8* %603
%605 = sext i8 %604 to i32
%606 = load i8, i8* %17
%607 = sext i8 %606 to i32
%608 = icmp eq i32 %605, %607
br i1 %608, label %609, label %818
609: ; preds = %595
%610 = load i8**, i8*** %11
%611 = load i32, i32* %14
%612 = sub nsw i32 %611, 1
%613 = sext i32 %612 to i64
%614 = getelementptr inbounds i8*, i8** %610, i64 %613
%615 = load i8*, i8** %614
%616 = load i32, i32* %15
%617 = add nsw i32 %616, 1
%618 = sext i32 %617 to i64
%619 = getelementptr inbounds i8, i8* %615, i64 %618
%620 = load i8, i8* %619
%621 = sext i8 %620 to i32
%622 = icmp eq i32 %621, 45
br i1 %622, label %623, label %661
623: ; preds = %609
%624 = load i32, i32* %15
%625 = add nsw i32 %624, 1
%626 = load i32, i32* %13
%627 = add nsw i32 %626, 2
%628 = icmp eq i32 %625, %627
br i1 %628, label %629, label %661
629: ; preds = %623
%630 = load i8, i8* %16
%631 = sext i8 %630 to i32
%632 = icmp eq i32 %631, 66
br i1 %632, label %633, label %661
633: ; preds = %629
%634 = load i8, i8* %16
%635 = load i8**, i8*** %11
%636 = load i32, i32* %14
%637 = sub nsw i32 %636, 1
%638 = sext i32 %637 to i64
%639 = getelementptr inbounds i8*, i8** %635, i64 %638
%640 = load i8*, i8** %639
%641 = load i32, i32* %15
%642 = add nsw i32 %641, 1
%643 = sext i32 %642 to i64
%644 = getelementptr inbounds i8, i8* %640, i64 %643
store i8 %634, i8* %644
%645 = load i8**, i8*** %11
%646 = load i32, i32* %12
%647 = sext i32 %646 to i64
%648 = getelementptr inbounds i8*, i8** %645, i64 %647
%649 = load i8*, i8** %648
%650 = load i32, i32* %13
%651 = sext i32 %650 to i64
%652 = getelementptr inbounds i8, i8* %649, i64 %651
store i8 45, i8* %652
%653 = load i8**, i8*** %11
%654 = load i32, i32* %14
%655 = sext i32 %654 to i64
%656 = getelementptr inbounds i8*, i8** %653, i64 %655
%657 = load i8*, i8** %656
%658 = load i32, i32* %15
%659 = sext i32 %658 to i64
%660 = getelementptr inbounds i8, i8* %657, i64 %659
store i8 45, i8* %660
store i32 1, i32* %10
br label %821
661: ; preds = %629, %623, %609
%662 = load i8**, i8*** %11
%663 = load i32, i32* %14
%664 = sub nsw i32 %663, 1
%665 = sext i32 %664 to i64
%666 = getelementptr inbounds i8*, i8** %662, i64 %665
%667 = load i8*, i8** %666
%668 = load i32, i32* %15
%669 = sub nsw i32 %668, 1
%670 = sext i32 %669 to i64
%671 = getelementptr inbounds i8, i8* %667, i64 %670
%672 = load i8, i8* %671
%673 = sext i8 %672 to i32
%674 = icmp eq i32 %673, 45
br i1 %674, label %675, label %713
675: ; preds = %661
%676 = load i32, i32* %15
%677 = sub nsw i32 %676, 1
%678 = load i32, i32* %13
%679 = sub nsw i32 %678, 2
%680 = icmp eq i32 %677, %679
br i1 %680, label %681, label %713
681: ; preds = %675
%682 = load i8, i8* %16
%683 = sext i8 %682 to i32
%684 = icmp eq i32 %683, 66
br i1 %684, label %685, label %713
685: ; preds = %681
%686 = load i8, i8* %16
%687 = load i8**, i8*** %11
%688 = load i32, i32* %14
%689 = sub nsw i32 %688, 1
%690 = sext i32 %689 to i64
%691 = getelementptr inbounds i8*, i8** %687, i64 %690
%692 = load i8*, i8** %691
%693 = load i32, i32* %15
%694 = sub nsw i32 %693, 1
%695 = sext i32 %694 to i64
%696 = getelementptr inbounds i8, i8* %692, i64 %695
store i8 %686, i8* %696
%697 = load i8**, i8*** %11
%698 = load i32, i32* %12
%699 = sext i32 %698 to i64
%700 = getelementptr inbounds i8*, i8** %697, i64 %699
%701 = load i8*, i8** %700
%702 = load i32, i32* %13
%703 = sext i32 %702 to i64
%704 = getelementptr inbounds i8, i8* %701, i64 %703
store i8 45, i8* %704
%705 = load i8**, i8*** %11
%706 = load i32, i32* %14
%707 = sext i32 %706 to i64
%708 = getelementptr inbounds i8*, i8** %705, i64 %707
%709 = load i8*, i8** %708
%710 = load i32, i32* %15
%711 = sext i32 %710 to i64
%712 = getelementptr inbounds i8, i8* %709, i64 %711
store i8 45, i8* %712
store i32 1, i32* %10
br label %821
713: ; preds = %681, %675, %661
%714 = load i8**, i8*** %11
%715 = load i32, i32* %14
%716 = add nsw i32 %715, 1
%717 = sext i32 %716 to i64
%718 = getelementptr inbounds i8*, i8** %714, i64 %717
%719 = load i8*, i8** %718
%720 = load i32, i32* %15
%721 = add nsw i32 %720, 1
%722 = sext i32 %721 to i64
%723 = getelementptr inbounds i8, i8* %719, i64 %722
%724 = load i8, i8* %723
%725 = sext i8 %724 to i32
%726 = icmp eq i32 %725, 45
br i1 %726, label %727, label %765
727: ; preds = %713
%728 = load i32, i32* %15
%729 = add nsw i32 %728, 1
%730 = load i32, i32* %13
%731 = add nsw i32 %730, 2
%732 = icmp eq i32 %729, %731
br i1 %732, label %733, label %765
733: ; preds = %727
%734 = load i8, i8* %16
%735 = sext i8 %734 to i32
%736 = icmp eq i32 %735, 80
br i1 %736, label %737, label %765
737: ; preds = %733
%738 = load i8, i8* %16
%739 = load i8**, i8*** %11
%740 = load i32, i32* %14
%741 = add nsw i32 %740, 1
%742 = sext i32 %741 to i64
%743 = getelementptr inbounds i8*, i8** %739, i64 %742
%744 = load i8*, i8** %743
%745 = load i32, i32* %15
%746 = add nsw i32 %745, 1
%747 = sext i32 %746 to i64
%748 = getelementptr inbounds i8, i8* %744, i64 %747
store i8 %738, i8* %748
%749 = load i8**, i8*** %11
%750 = load i32, i32* %12
%751 = sext i32 %750 to i64
%752 = getelementptr inbounds i8*, i8** %749, i64 %751
%753 = load i8*, i8** %752
%754 = load i32, i32* %13
%755 = sext i32 %754 to i64
%756 = getelementptr inbounds i8, i8* %753, i64 %755
store i8 45, i8* %756
%757 = load i8**, i8*** %11
%758 = load i32, i32* %14
%759 = sext i32 %758 to i64
%760 = getelementptr inbounds i8*, i8** %757, i64 %759
%761 = load i8*, i8** %760
%762 = load i32, i32* %15
%763 = sext i32 %762 to i64
%764 = getelementptr inbounds i8, i8* %761, i64 %763
store i8 45, i8* %764
store i32 1, i32* %10
br label %821
765: ; preds = %733, %727, %713
%766 = load i8**, i8*** %11
%767 = load i32, i32* %14
%768 = add nsw i32 %767, 1
%769 = sext i32 %768 to i64
%770 = getelementptr inbounds i8*, i8** %766, i64 %769
%771 = load i8*, i8** %770
%772 = load i32, i32* %15
%773 = sub nsw i32 %772, 1
%774 = sext i32 %773 to i64
%775 = getelementptr inbounds i8, i8* %771, i64 %774
%776 = load i8, i8* %775
%777 = sext i8 %776 to i32
%778 = icmp eq i32 %777, 45
br i1 %778, label %779, label %817
779: ; preds = %765
%780 = load i32, i32* %15
%781 = sub nsw i32 %780, 1
%782 = load i32, i32* %13
%783 = sub nsw i32 %782, 2
%784 = icmp eq i32 %781, %783
br i1 %784, label %785, label %817
785: ; preds = %779
%786 = load i8, i8* %16
%787 = sext i8 %786 to i32
%788 = icmp eq i32 %787, 80
br i1 %788, label %789, label %817
789: ; preds = %785
%790 = load i8, i8* %16
%791 = load i8**, i8*** %11
%792 = load i32, i32* %14
%793 = add nsw i32 %792, 1
%794 = sext i32 %793 to i64
%795 = getelementptr inbounds i8*, i8** %791, i64 %794
%796 = load i8*, i8** %795
%797 = load i32, i32* %15
%798 = sub nsw i32 %797, 1
%799 = sext i32 %798 to i64
%800 = getelementptr inbounds i8, i8* %796, i64 %799
store i8 %790, i8* %800
%801 = load i8**, i8*** %11
%802 = load i32, i32* %12
%803 = sext i32 %802 to i64
%804 = getelementptr inbounds i8*, i8** %801, i64 %803
%805 = load i8*, i8** %804
%806 = load i32, i32* %13
%807 = sext i32 %806 to i64
%808 = getelementptr inbounds i8, i8* %805, i64 %807
store i8 45, i8* %808
%809 = load i8**, i8*** %11
%810 = load i32, i32* %14
%811 = sext i32 %810 to i64
%812 = getelementptr inbounds i8*, i8** %809, i64 %811
%813 = load i8*, i8** %812
%814 = load i32, i32* %15
%815 = sext i32 %814 to i64
%816 = getelementptr inbounds i8, i8* %813, i64 %815
store i8 45, i8* %816
store i32 1, i32* %10
br label %821
817: ; preds = %785, %779, %765
br label %818
818: ; preds = %817, %595
br label %819
819: ; preds = %818, %549, %535
br label %820
820: ; preds = %819, %429
store i32 -1, i32* %10
br label %821
821: ; preds = %820, %789, %737, %685, %633, %576, %515, %498, %469, %426, %408, %366, %298, %229, %161, %82
%822 = load i32, i32* %10
ret i32 %822
}

LLVM IR (-O2):
define i32 @step(i8** %0, i32 %1, i32 %2, i32 %3, i32 %4, i8 signext %5, i8 signext %6, i8 signext %7, i8 signext %8) {
%10 = sub nsw i32 %3, %1
%11 = icmp slt i32 %10, 0
%12 = sub nsw i32 %4, %2
%13 = select i1 %11, i32 %12, i32 %10
%14 = sext i32 %1 to i64
%15 = getelementptr inbounds i8*, i8** %0, i64 %14
%16 = load i8*, i8** %15
%17 = sext i32 %2 to i64
%18 = getelementptr inbounds i8, i8* %16, i64 %17
%19 = load i8, i8* %18
%20 = sext i8 %7 to i32
%21 = icmp eq i8 %19, %7
br i1 %21, label %22, label %144
22: ; preds = %9
switch i32 %3, label %33 [
i32 7, label %23
i32 0, label %23
]
23: ; preds = %22, %22
%24 = zext i32 %3 to i64
%25 = getelementptr inbounds i8*, i8** %0, i64 %24
%26 = load i8*, i8** %25
%27 = sext i32 %4 to i64
%28 = getelementptr inbounds i8, i8* %26, i64 %27
%29 = load i8, i8* %28
%30 = icmp eq i8 %29, %6
%31 = icmp eq i8 %29, %8
%32 = or i1 %30, %31
br i1 %32, label %255, label %33
33: ; preds = %23, %22
%34 = add nsw i32 %4, %3
%35 = and i32 %34, 1
%36 = icmp eq i32 %35, 0
br i1 %36, label %37, label %255
37: ; preds = %33
%38 = sext i32 %3 to i64
%39 = getelementptr inbounds i8*, i8** %0, i64 %38
%40 = load i8*, i8** %39
%41 = sext i32 %4 to i64
%42 = getelementptr inbounds i8, i8* %40, i64 %41
%43 = load i8, i8* %42
%44 = icmp eq i8 %43, %6
%45 = icmp eq i8 %43, %8
%46 = or i1 %44, %45
br i1 %46, label %47, label %137
47: ; preds = %37
%48 = icmp sgt i32 %4, %2
br i1 %48, label %49, label %93
49: ; preds = %47
%50 = add nsw i32 %3, 1
%51 = sext i32 %50 to i64
%52 = getelementptr inbounds i8*, i8** %0, i64 %51
%53 = load i8*, i8** %52
%54 = add nsw i32 %4, 1
%55 = sext i32 %54 to i64
%56 = getelementptr inbounds i8, i8* %53, i64 %55
%57 = load i8, i8* %56
%58 = icmp eq i8 %57, 45
br i1 %58, label %59, label %72
59: ; preds = %49
%60 = sub nsw i32 %3, %13
%61 = sext i32 %60 to i64
%62 = getelementptr inbounds i8*, i8** %0, i64 %61
%63 = load i8*, i8** %62
%64 = sub nsw i32 %4, %13
%65 = sext i32 %64 to i64
%66 = getelementptr inbounds i8, i8* %63, i64 %65
%67 = load i8, i8* %66
%68 = icmp eq i8 %67, %7
br i1 %68, label %69, label %72
69: ; preds = %59
store i8 %7, i8* %56
%70 = load i8*, i8** %15
%71 = getelementptr inbounds i8, i8* %70, i64 %17
store i8 45, i8* %71
br label %250
72: ; preds = %59, %49
%73 = add nsw i32 %3, -1
%74 = sext i32 %73 to i64
%75 = getelementptr inbounds i8*, i8** %0, i64 %74
%76 = load i8*, i8** %75
%77 = getelementptr inbounds i8, i8* %76, i64 %55
%78 = load i8, i8* %77
%79 = icmp eq i8 %78, 45
br i1 %79, label %80, label %148
80: ; preds = %72
%81 = add nsw i32 %13, %3
%82 = sext i32 %81 to i64
%83 = getelementptr inbounds i8*, i8** %0, i64 %82
%84 = load i8*, i8** %83
%85 = sub nsw i32 %4, %13
%86 = sext i32 %85 to i64
%87 = getelementptr inbounds i8, i8* %84, i64 %86
%88 = load i8, i8* %87
%89 = icmp eq i8 %88, %7
br i1 %89, label %90, label %148
90: ; preds = %80
store i8 %7, i8* %77
%91 = load i8*, i8** %15
%92 = getelementptr inbounds i8, i8* %91, i64 %17
store i8 45, i8* %92
br label %250
93: ; preds = %47
%94 = add nsw i32 %3, -1
%95 = sext i32 %94 to i64
%96 = getelementptr inbounds i8*, i8** %0, i64 %95
%97 = load i8*, i8** %96
%98 = add nsw i32 %4, -1
%99 = sext i32 %98 to i64
%100 = getelementptr inbounds i8, i8* %97, i64 %99
%101 = load i8, i8* %100
%102 = icmp eq i8 %101, 45
br i1 %102, label %103, label %116
103: ; preds = %93
%104 = sub nsw i32 %3, %13
%105 = sext i32 %104 to i64
%106 = getelementptr inbounds i8*, i8** %0, i64 %105
%107 = load i8*, i8** %106
%108 = sub nsw i32 %4, %13
%109 = sext i32 %108 to i64
%110 = getelementptr inbounds i8, i8* %107, i64 %109
%111 = load i8, i8* %110
%112 = icmp eq i8 %111, %7
br i1 %112, label %113, label %116
113: ; preds = %103
store i8 %7, i8* %100
%114 = load i8*, i8** %15
%115 = getelementptr inbounds i8, i8* %114, i64 %17
store i8 45, i8* %115
br label %250
116: ; preds = %103, %93
%117 = add nsw i32 %3, 1
%118 = sext i32 %117 to i64
%119 = getelementptr inbounds i8*, i8** %0, i64 %118
%120 = load i8*, i8** %119
%121 = getelementptr inbounds i8, i8* %120, i64 %99
%122 = load i8, i8* %121
%123 = icmp eq i8 %122, 45
br i1 %123, label %124, label %148
124: ; preds = %116
%125 = sub nsw i32 %3, %13
%126 = sext i32 %125 to i64
%127 = getelementptr inbounds i8*, i8** %0, i64 %126
%128 = load i8*, i8** %127
%129 = add nsw i32 %13, %4
%130 = sext i32 %129 to i64
%131 = getelementptr inbounds i8, i8* %128, i64 %130
%132 = load i8, i8* %131
%133 = icmp eq i8 %132, %7
br i1 %133, label %134, label %148
134: ; preds = %124
store i8 %7, i8* %121
%135 = load i8*, i8** %15
%136 = getelementptr inbounds i8, i8* %135, i64 %17
store i8 45, i8* %136
br label %250
137: ; preds = %37
%138 = sext i8 %6 to i32
%139 = tail call i32 (i8**, i32, i32, i32, i32, i32, i32, ...) bitcast (i32 (...)* @restricaodama to i32 (i8**, i32, i32, i32, i32, i32, i32, ...)*)(i8** %0, i32 %1, i32 %2, i32 %3, i32 %4, i32 %138, i32 %20)
%140 = icmp eq i32 %139, 2
br i1 %140, label %141, label %255
141: ; preds = %137
%142 = load i8*, i8** %39
%143 = getelementptr inbounds i8, i8* %142, i64 %41
store i8 %7, i8* %143
br label %250
144: ; preds = %9
%145 = add nsw i32 %4, %3
%146 = and i32 %145, 1
%147 = icmp eq i32 %146, 0
br i1 %147, label %148, label %255
148: ; preds = %116, %124, %72, %80, %144
switch i32 %3, label %159 [
i32 7, label %149
i32 0, label %149
]
149: ; preds = %148, %148
%150 = zext i32 %3 to i64
%151 = getelementptr inbounds i8*, i8** %0, i64 %150
%152 = load i8*, i8** %151
%153 = sext i32 %4 to i64
%154 = getelementptr inbounds i8, i8* %152, i64 %153
%155 = load i8, i8* %154
%156 = icmp eq i8 %155, %6
%157 = icmp eq i8 %155, %8
%158 = or i1 %156, %157
br i1 %158, label %255, label %159
159: ; preds = %149, %148
%160 = icmp eq i8 %19, %5
br i1 %160, label %161, label %169
161: ; preds = %159
%162 = sext i32 %3 to i64
%163 = getelementptr inbounds i8*, i8** %0, i64 %162
%164 = load i8*, i8** %163
%165 = sext i32 %4 to i64
%166 = getelementptr inbounds i8, i8* %164, i64 %165
%167 = load i8, i8* %166
%168 = icmp eq i8 %167, %5
br i1 %168, label %255, label %169
169: ; preds = %161, %159
%170 = icmp eq i8 %5, 66
%171 = icmp sgt i32 %3, %1
%172 = and i1 %171, %170
br i1 %172, label %255, label %173
173: ; preds = %169
%174 = icmp eq i8 %5, 80
%175 = icmp slt i32 %3, %1
%176 = and i1 %175, %174
br i1 %176, label %255, label %177
177: ; preds = %173
%178 = add nsw i32 %3, -1
%179 = icmp eq i32 %178, %1
%180 = select i1 %160, i1 %179, i1 false
br i1 %180, label %185, label %181
181: ; preds = %177
%182 = add nsw i32 %3, 1
%183 = icmp eq i32 %182, %1
%184 = select i1 %160, i1 %183, i1 false
br i1 %184, label %185, label %255
185: ; preds = %181, %177
%186 = add nsw i32 %2, 1
%187 = icmp eq i32 %186, %4
%188 = add nsw i32 %2, -1
%189 = icmp eq i32 %188, %4
%190 = select i1 %187, i1 true, i1 %189
%191 = sext i32 %3 to i64
%192 = getelementptr inbounds i8*, i8** %0, i64 %191
%193 = load i8*, i8** %192
%194 = sext i32 %4 to i64
%195 = getelementptr inbounds i8, i8* %193, i64 %194
%196 = load i8, i8* %195
%197 = icmp eq i8 %196, 45
%198 = select i1 %190, i1 %197, i1 false
br i1 %198, label %199, label %200
199: ; preds = %185
store i8 %5, i8* %195
br label %250
200: ; preds = %185
%201 = getelementptr inbounds i8*, i8** %0, i64 %191
%202 = icmp eq i8 %196, %6
br i1 %202, label %203, label %255
203: ; preds = %200
%204 = sext i32 %178 to i64
%205 = getelementptr inbounds i8*, i8** %0, i64 %204
%206 = load i8*, i8** %205
%207 = add nsw i32 %4, 1
%208 = sext i32 %207 to i64
%209 = getelementptr inbounds i8, i8* %206, i64 %208
%210 = load i8, i8* %209
%211 = icmp eq i8 %210, 45
%212 = and i1 %187, %170
%213 = select i1 %211, i1 %212, i1 false
br i1 %213, label %214, label %217
214: ; preds = %203
store i8 66, i8* %209
%215 = load i8*, i8** %15
%216 = getelementptr inbounds i8, i8* %215, i64 %17
store i8 45, i8* %216
br label %250
217: ; preds = %203
%218 = add nsw i32 %4, -1
%219 = sext i32 %218 to i64
%220 = getelementptr inbounds i8, i8* %206, i64 %219
%221 = load i8, i8* %220
%222 = icmp eq i8 %221, 45
%223 = and i1 %189, %170
%224 = select i1 %222, i1 %223, i1 false
br i1 %224, label %225, label %228
225: ; preds = %217
store i8 66, i8* %220
%226 = load i8*, i8** %15
%227 = getelementptr inbounds i8, i8* %226, i64 %17
store i8 45, i8* %227
br label %250
228: ; preds = %217
%229 = add nsw i32 %3, 1
%230 = sext i32 %229 to i64
%231 = getelementptr inbounds i8*, i8** %0, i64 %230
%232 = load i8*, i8** %231
%233 = getelementptr inbounds i8, i8* %232, i64 %208
%234 = load i8, i8* %233
%235 = icmp eq i8 %234, 45
%236 = and i1 %187, %174
%237 = select i1 %235, i1 %236, i1 false
br i1 %237, label %238, label %241
238: ; preds = %228
store i8 80, i8* %233
%239 = load i8*, i8** %15
%240 = getelementptr inbounds i8, i8* %239, i64 %17
store i8 45, i8* %240
br label %250
241: ; preds = %228
%242 = getelementptr inbounds i8, i8* %232, i64 %219
%243 = load i8, i8* %242
%244 = icmp eq i8 %243, 45
%245 = and i1 %189, %174
%246 = select i1 %244, i1 %245, i1 false
br i1 %246, label %247, label %255
247: ; preds = %241
store i8 80, i8* %242
%248 = load i8*, i8** %15
%249 = getelementptr inbounds i8, i8* %248, i64 %17
store i8 45, i8* %249
br label %250
250: ; preds = %69, %90, %113, %134, %141, %199, %214, %225, %238, %247
%251 = phi i8** [ %201, %247 ], [ %201, %238 ], [ %201, %225 ], [ %201, %214 ], [ %15, %199 ], [ %15, %141 ], [ %39, %134 ], [ %39, %113 ], [ %39, %90 ], [ %39, %69 ]
%252 = phi i64 [ %194, %247 ], [ %194, %238 ], [ %194, %225 ], [ %194, %214 ], [ %17, %199 ], [ %17, %141 ], [ %41, %134 ], [ %41, %113 ], [ %41, %90 ], [ %41, %69 ]
%253 = load i8*, i8** %251
%254 = getelementptr inbounds i8, i8* %253, i64 %252
store i8 45, i8* %254
br label %255
255: ; preds = %250, %33, %144, %200, %241, %181, %169, %173, %161, %149, %137, %23
%256 = phi i32 [ -1, %23 ], [ -1, %137 ], [ -1, %149 ], [ -1, %161 ], [ -1, %173 ], [ -1, %169 ], [ -1, %181 ], [ -1, %241 ], [ -1, %200 ], [ -1, %144 ], [ -1, %33 ], [ 1, %250 ]
ret i32 %256
}