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

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
int SHRT_MAX;
char getchar();
int /*<<< orphan*/ printf(char *, ...);
int /*<<< orphan*/ system(char *);
void main() {
  char c;
  char input[SHRT_MAX], prompt[SHRT_MAX];
  int lock, sprompt, i;
  prompt[0] = '>';
  while (1) {
    printf("%s ", prompt);
    for (i = 0; i < SHRT_MAX; i++) {
      input[i] = '\0';
    }
    i = 0;
    do {
      c = getchar();
      input[i++] = c;
    } while (c != '\n');
    if (input[0] == '\n') {
      system("clear");
    }
    if ((input[0] == 'Q' || input[0] == 'q') && (input[1] == '\n')) {
      return;
    } else if ((input[0] == 'Q' || input[0] == 'q') &&
               (input[1] == 'U' || input[1] == 'u') &&
               (input[2] == 'I' || input[2] == 'i') &&
               (input[3] == 'T' || input[3] == 't') && (input[4] == '\n')) {
      return;
    }
    if ((input[0] == 't') && (input[1] == 'l') && (input[2] == 'o') &&
        (input[3] == 'c') && (input[4] == 'k') && (input[5] == '\n')) {
      while (1) {
        for (i = 0; i < SHRT_MAX; i++) {
          input[i] = '\0';
        }
        lock = 0;
        printf("unlock: ");
        i = 0;
        do {
          c = getchar();
          input[i++] = c;
        } while (c != '\n');
        if ((input[0] == "NOTSOSECRET"[0]) && (input[1] == "NOTSOSECRET"[1]) &&
            (input[2] == "NOTSOSECRET"[2]) && (input[3] == "NOTSOSECRET"[3]) &&
            (input[4] == "NOTSOSECRET"[4]) && (input[5] == "NOTSOSECRET"[5]) &&
            (input[6] == "NOTSOSECRET"[6]) && (input[7] == "NOTSOSECRET"[7]) &&
            (input[8] == "NOTSOSECRET"[8]) && (input[9] == "NOTSOSECRET"[9]) &&
            (input[10] == "NOTSOSECRET"[10]) && (input[11] == '\n')) {
          lock = 1;
        }
        if (lock == 1) {
          break;
        }
      }
    }
    if ((input[0] == 'c') && (input[1] == 'p') && (input[2] == 'r') &&
        (input[3] == 'o') && (input[4] == 'm') && (input[5] == 'p') &&
        (input[6] == 't')) {
      int j = 0;
      if (input[7] == ' ') {
        i = 8;
      } else {
        i = 7;
      }
      for (i; i < SHRT_MAX; i++) {
        prompt[j] = input[i];
        if (prompt[j] == '\n') {
          prompt[j] = '\0';
        }
        j++;
      }
      sprompt = 1;
    } else if ((input[0] == 'd') && (input[1] == 'p') && (input[2] == 'r') &&
               (input[3] == 'o') && (input[4] == 'm') && (input[5] == 'p') &&
               (input[6] == 't')) {
      prompt[0] = '>';
      for (i = 1; i < SHRT_MAX; i++) {
        prompt[i] = '\0';
      }
      sprompt = 1;
    }
    if ((input[0] == 'l') && (input[1] == 'o') && (input[2] == 'g') &&
        (input[3] == 'o') && (input[4] == '\n')) {
      system("cat logo");
    } else if (lock == 0 && sprompt == 0) {
      system(input);
    }
    lock = 0;
    sprompt = 0;
  }
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x50,%rsp
mov    0x2ea1(%rip),%rax
mov    (%rax),%ecx
mov    %rsp,%rdx
mov    %rdx,-0x10(%rbp)
mov    %rcx,%rsi
add    $0xf,%rsi
and    $0xfffffffffffffff0,%rsi
mov    %rsp,%rdx
sub    %rsi,%rdx
mov    %rdx,-0x48(%rbp)
mov    %rdx,%rsp
mov    %rcx,-0x18(%rbp)
mov    (%rax),%eax
mov    %eax,%ecx
mov    %rcx,%rdx
add    $0xf,%rdx
and    $0xfffffffffffffff0,%rdx
mov    %rsp,%rax
sub    %rdx,%rax
mov    %rax,-0x40(%rbp)
mov    %rax,%rsp
mov    %rcx,-0x20(%rbp)
movb   $0x3e,(%rax)
jmp    118c <main+0x5c>
mov    -0x40(%rbp),%rsi
lea    0xe69(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
movl   $0x0,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
mov    0x2e31(%rip),%rcx
cmp    (%rcx),%eax
jge    11d1 <main+0xa1>
mov    -0x48(%rbp),%rax
movslq -0x2c(%rbp),%rcx
movb   $0x0,(%rax,%rcx,1)
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    11a5 <main+0x75>
movl   $0x0,-0x2c(%rbp)
mov    $0x0,%al
call   1050 <getchar@plt>
mov    %al,%cl
mov    -0x48(%rbp),%rax
mov    %cl,-0x1(%rbp)
mov    -0x1(%rbp),%dl
mov    -0x2c(%rbp),%ecx
mov    %ecx,%esi
add    $0x1,%esi
mov    %esi,-0x2c(%rbp)
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
movsbl -0x1(%rbp),%eax
cmp    $0xa,%eax
jne    11d8 <main+0xa8>
mov    -0x48(%rbp),%rax
movsbl (%rax),%eax
cmp    $0xa,%eax
jne    1225 <main+0xf5>
lea    0xde4(%rip),%rdi
call   1030 <system@plt>
mov    -0x48(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x51,%eax
je     1245 <main+0x115>
mov    -0x48(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x71,%eax
jne    1262 <main+0x132>
mov    -0x48(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0xa,%eax
jne    1262 <main+0x132>
movl   $0x1,-0x30(%rbp)
jmp    1785 <main+0x655>
mov    -0x48(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x51,%eax
je     1282 <main+0x152>
mov    -0x48(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x71,%eax
jne    1305 <main+0x1d5>
mov    -0x48(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x55,%eax
je     12a4 <main+0x174>
mov    -0x48(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x75,%eax
jne    1305 <main+0x1d5>
mov    -0x48(%rbp),%rax
movsbl 0x2(%rax),%eax
cmp    $0x49,%eax
je     12c6 <main+0x196>
mov    -0x48(%rbp),%rax
movsbl 0x2(%rax),%eax
cmp    $0x69,%eax
jne    1305 <main+0x1d5>
mov    -0x48(%rbp),%rax
movsbl 0x3(%rax),%eax
cmp    $0x54,%eax
je     12e8 <main+0x1b8>
mov    -0x48(%rbp),%rax
movsbl 0x3(%rax),%eax
cmp    $0x74,%eax
jne    1305 <main+0x1d5>
mov    -0x48(%rbp),%rax
movsbl 0x4(%rax),%eax
cmp    $0xa,%eax
jne    1305 <main+0x1d5>
movl   $0x1,-0x30(%rbp)
jmp    1785 <main+0x655>
jmp    130a <main+0x1da>
mov    -0x48(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x74,%eax
jne    1526 <main+0x3f6>
mov    -0x48(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x6c,%eax
jne    1526 <main+0x3f6>
mov    -0x48(%rbp),%rax
movsbl 0x2(%rax),%eax
cmp    $0x6f,%eax
jne    1526 <main+0x3f6>
mov    -0x48(%rbp),%rax
movsbl 0x3(%rax),%eax
cmp    $0x63,%eax
jne    1526 <main+0x3f6>
mov    -0x48(%rbp),%rax
movsbl 0x4(%rax),%eax
cmp    $0x6b,%eax
jne    1526 <main+0x3f6>
mov    -0x48(%rbp),%rax
movsbl 0x5(%rax),%eax
cmp    $0xa,%eax
jne    1526 <main+0x3f6>
jmp    1374 <main+0x244>
jmp    1379 <main+0x249>
movl   $0x0,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
mov    0x2c56(%rip),%rcx
cmp    (%rcx),%eax
jge    13ac <main+0x27c>
mov    -0x48(%rbp),%rax
movslq -0x2c(%rbp),%rcx
movb   $0x0,(%rax,%rcx,1)
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    1380 <main+0x250>
movl   $0x0,-0x24(%rbp)
lea    0xc50(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
movl   $0x0,-0x2c(%rbp)
mov    $0x0,%al
call   1050 <getchar@plt>
mov    %al,%cl
mov    -0x48(%rbp),%rax
mov    %cl,-0x1(%rbp)
mov    -0x1(%rbp),%dl
mov    -0x2c(%rbp),%ecx
mov    %ecx,%esi
add    $0x1,%esi
mov    %esi,-0x2c(%rbp)
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
movsbl -0x1(%rbp),%eax
cmp    $0xa,%eax
jne    13c8 <main+0x298>
mov    -0x48(%rbp),%rax
movsbl (%rax),%eax
movsbl 0xc0c(%rip),%ecx
cmp    %ecx,%eax
jne    150d <main+0x3dd>
mov    -0x48(%rbp),%rax
movsbl 0x1(%rax),%eax
movsbl 0xbf6(%rip),%ecx
cmp    %ecx,%eax
jne    150d <main+0x3dd>
mov    -0x48(%rbp),%rax
movsbl 0x2(%rax),%eax
movsbl 0xbe0(%rip),%ecx
cmp    %ecx,%eax
jne    150d <main+0x3dd>
mov    -0x48(%rbp),%rax
movsbl 0x3(%rax),%eax
movsbl 0xbca(%rip),%ecx
cmp    %ecx,%eax
jne    150d <main+0x3dd>
mov    -0x48(%rbp),%rax
movsbl 0x4(%rax),%eax
movsbl 0xbb4(%rip),%ecx
cmp    %ecx,%eax
jne    150d <main+0x3dd>
mov    -0x48(%rbp),%rax
movsbl 0x5(%rax),%eax
movsbl 0xb9e(%rip),%ecx
cmp    %ecx,%eax
jne    150d <main+0x3dd>
mov    -0x48(%rbp),%rax
movsbl 0x6(%rax),%eax
movsbl 0xb88(%rip),%ecx
cmp    %ecx,%eax
jne    150d <main+0x3dd>
mov    -0x48(%rbp),%rax
movsbl 0x7(%rax),%eax
movsbl 0xb72(%rip),%ecx
cmp    %ecx,%eax
jne    150d <main+0x3dd>
mov    -0x48(%rbp),%rax
movsbl 0x8(%rax),%eax
movsbl 0xb5c(%rip),%ecx
cmp    %ecx,%eax
jne    150d <main+0x3dd>
mov    -0x48(%rbp),%rax
movsbl 0x9(%rax),%eax
movsbl 0xb46(%rip),%ecx
cmp    %ecx,%eax
jne    150d <main+0x3dd>
mov    -0x48(%rbp),%rax
movsbl 0xa(%rax),%eax
movsbl 0xb30(%rip),%ecx
cmp    %ecx,%eax
jne    150d <main+0x3dd>
mov    -0x48(%rbp),%rax
movsbl 0xb(%rax),%eax
cmp    $0xa,%eax
jne    150d <main+0x3dd>
movl   $0x1,-0x24(%rbp)
cmpl   $0x1,-0x24(%rbp)
jne    151c <main+0x3ec>
jmp    1521 <main+0x3f1>
jmp    1374 <main+0x244>
jmp    1526 <main+0x3f6>
mov    -0x48(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x63,%eax
jne    162f <main+0x4ff>
mov    -0x48(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x70,%eax
jne    162f <main+0x4ff>
mov    -0x48(%rbp),%rax
movsbl 0x2(%rax),%eax
cmp    $0x72,%eax
jne    162f <main+0x4ff>
mov    -0x48(%rbp),%rax
movsbl 0x3(%rax),%eax
cmp    $0x6f,%eax
jne    162f <main+0x4ff>
mov    -0x48(%rbp),%rax
movsbl 0x4(%rax),%eax
cmp    $0x6d,%eax
jne    162f <main+0x4ff>
mov    -0x48(%rbp),%rax
movsbl 0x5(%rax),%eax
cmp    $0x70,%eax
jne    162f <main+0x4ff>
mov    -0x48(%rbp),%rax
movsbl 0x6(%rax),%eax
cmp    $0x74,%eax
jne    162f <main+0x4ff>
mov    -0x48(%rbp),%rax
movl   $0x0,-0x34(%rbp)
movsbl 0x7(%rax),%eax
cmp    $0x20,%eax
jne    15c0 <main+0x490>
movl   $0x8,-0x2c(%rbp)
jmp    15c7 <main+0x497>
movl   $0x7,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
mov    0x2a0f(%rip),%rcx
cmp    (%rcx),%eax
jge    1623 <main+0x4f3>
mov    -0x40(%rbp),%rax
mov    -0x48(%rbp),%rcx
movslq -0x2c(%rbp),%rdx
mov    (%rcx,%rdx,1),%dl
movslq -0x34(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
movslq -0x34(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0xa,%eax
jne    160c <main+0x4dc>
mov    -0x40(%rbp),%rax
movslq -0x34(%rbp),%rcx
movb   $0x0,(%rax,%rcx,1)
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    15c7 <main+0x497>
movl   $0x1,-0x28(%rbp)
jmp    16eb <main+0x5bb>
mov    -0x48(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x64,%eax
jne    16e6 <main+0x5b6>
mov    -0x48(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x70,%eax
jne    16e6 <main+0x5b6>
mov    -0x48(%rbp),%rax
movsbl 0x2(%rax),%eax
cmp    $0x72,%eax
jne    16e6 <main+0x5b6>
mov    -0x48(%rbp),%rax
movsbl 0x3(%rax),%eax
cmp    $0x6f,%eax
jne    16e6 <main+0x5b6>
mov    -0x48(%rbp),%rax
movsbl 0x4(%rax),%eax
cmp    $0x6d,%eax
jne    16e6 <main+0x5b6>
mov    -0x48(%rbp),%rax
movsbl 0x5(%rax),%eax
cmp    $0x70,%eax
jne    16e6 <main+0x5b6>
mov    -0x48(%rbp),%rax
movsbl 0x6(%rax),%eax
cmp    $0x74,%eax
jne    16e6 <main+0x5b6>
mov    -0x40(%rbp),%rax
movb   $0x3e,(%rax)
movl   $0x1,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
mov    0x2923(%rip),%rcx
cmp    (%rcx),%eax
jge    16df <main+0x5af>
mov    -0x40(%rbp),%rax
movslq -0x2c(%rbp),%rcx
movb   $0x0,(%rax,%rcx,1)
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    16b3 <main+0x583>
movl   $0x1,-0x28(%rbp)
jmp    16eb <main+0x5bb>
mov    -0x48(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x6c,%eax
jne    1750 <main+0x620>
mov    -0x48(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x6f,%eax
jne    1750 <main+0x620>
mov    -0x48(%rbp),%rax
movsbl 0x2(%rax),%eax
cmp    $0x67,%eax
jne    1750 <main+0x620>
mov    -0x48(%rbp),%rax
movsbl 0x3(%rax),%eax
cmp    $0x6f,%eax
jne    1750 <main+0x620>
mov    -0x48(%rbp),%rax
movsbl 0x4(%rax),%eax
cmp    $0xa,%eax
jne    1750 <main+0x620>
lea    0x8d9(%rip),%rdi
call   1030 <system@plt>
jmp    1772 <main+0x642>
cmpl   $0x0,-0x24(%rbp)
jne    176d <main+0x63d>
cmpl   $0x0,-0x28(%rbp)
jne    176d <main+0x63d>
mov    -0x48(%rbp),%rdi
call   1030 <system@plt>
jmp    1772 <main+0x642>
movl   $0x0,-0x24(%rbp)
movl   $0x0,-0x28(%rbp)
jmp    1187 <main+0x57>
mov    -0x10(%rbp),%rax
mov    %rax,%rsp
mov    %rbp,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rbp
mov    %rsp,%rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
push   %rax
mov    0x2e8b(%rip),%r13
mov    0x0(%r13),%eax
mov    %rsp,%r12
add    $0xf,%rax
and    $0xfffffffffffffff0,%rax
sub    %rax,%r12
mov    %r12,%rsp
mov    %rsp,%r14
sub    %rax,%r14
mov    %r14,%rsp
movb   $0x3e,(%r14)
lea    0x1(%r14),%rax
mov    %rax,-0x30(%rbp)
lea    0xfb8(%rip),%r15
jmp    1198 <main+0x58>
nopl   0x0(%rax,%rax,1)
mov    %r12,%rdi
call   1030 <system@plt>
lea    0xf95(%rip),%rdi
mov    %r14,%rsi
xor    %eax,%eax
call   1040 <printf@plt>
mov    0x0(%r13),%edx
test   %edx,%edx
jle    11bb <main+0x7b>
mov    %r12,%rdi
xor    %esi,%esi
call   1050 <memset@plt>
mov    %r12,%rbx
xchg   %ax,%ax
xor    %eax,%eax
call   1060 <getchar@plt>
mov    %al,(%rbx)
add    $0x1,%rbx
cmp    $0xa,%al
jne    11c0 <main+0x80>
mov    (%r12),%al
cmp    $0xa,%al
jne    11e9 <main+0xa9>
lea    0xf58(%rip),%rdi
call   1030 <system@plt>
mov    (%r12),%al
mov    $0x1,%dil
lea    -0x51(%rax),%ecx
cmp    $0x23,%cl
ja     15e0 <main+0x4a0>
movzbl %cl,%esi
lea    0xe1e(%rip),%rbx
movslq (%rbx,%rsi,4),%rdx
add    %rbx,%rdx
jmp    *%rdx
mov    0x1(%r12),%dl
cmp    $0xa,%dl
je     162e <main+0x4ee>
cmp    $0x20,%cl
ja     15e0 <main+0x4a0>
lea    0xe87(%rip),%rbx
movslq (%rbx,%rsi,4),%rcx
add    %rbx,%rcx
jmp    *%rcx
or     $0x20,%dl
cmp    $0x75,%dl
jne    1260 <main+0x120>
mov    0x2(%r12),%cl
or     $0x20,%cl
cmp    $0x69,%cl
jne    1260 <main+0x120>
mov    0x3(%r12),%cl
or     $0x20,%cl
cmp    $0x74,%cl
jne    1260 <main+0x120>
cmpb   $0xa,0x4(%r12)
je     162e <main+0x4ee>
cmp    $0x64,%al
je     12f0 <main+0x1b0>
cmp    $0x63,%al
jne    15e0 <main+0x4a0>
cmpb   $0x70,0x1(%r12)
jne    1190 <main+0x50>
cmpb   $0x72,0x2(%r12)
jne    1190 <main+0x50>
cmpb   $0x6f,0x3(%r12)
jne    1190 <main+0x50>
cmpb   $0x6d,0x4(%r12)
jne    1190 <main+0x50>
cmpb   $0x70,0x5(%r12)
jne    1190 <main+0x50>
cmpb   $0x74,0x6(%r12)
jne    1190 <main+0x50>
xor    %ecx,%ecx
cmpb   $0x20,0x7(%r12)
sete   %cl
add    $0x7,%ecx
mov    0x0(%r13),%r10d
sub    %ecx,%r10d
jle    1198 <main+0x58>
mov    %ecx,%ecx
cmp    $0x8,%r10d
jae    143d <main+0x2fd>
mov    %rcx,%rdx
xor    %r9d,%r9d
jmp    15af <main+0x46f>
nopw   0x0(%rax,%rax,1)
cmpb   $0x70,0x1(%r12)
jne    1190 <main+0x50>
cmpb   $0x72,0x2(%r12)
jne    1190 <main+0x50>
cmpb   $0x6f,0x3(%r12)
jne    1190 <main+0x50>
cmpb   $0x6d,0x4(%r12)
jne    1190 <main+0x50>
cmpb   $0x70,0x5(%r12)
jne    1190 <main+0x50>
cmpb   $0x74,0x6(%r12)
jne    1190 <main+0x50>
movb   $0x3e,(%r14)
mov    0x0(%r13),%edx
cmp    $0x2,%edx
jl     1198 <main+0x58>
add    $0xffffffff,%edx
mov    -0x30(%rbp),%rdi
xor    %esi,%esi
call   1050 <memset@plt>
jmp    1198 <main+0x58>
cmpb   $0x6c,0x1(%r12)
jne    1190 <main+0x50>
cmpb   $0x6f,0x2(%r12)
jne    1190 <main+0x50>
cmpb   $0x63,0x3(%r12)
jne    1190 <main+0x50>
cmpb   $0x6b,0x4(%r12)
jne    1190 <main+0x50>
cmpb   $0xa,0x5(%r12)
jne    1190 <main+0x50>
nopl   0x0(%rax,%rax,1)
mov    0x0(%r13),%edx
test   %edx,%edx
jle    13b2 <main+0x272>
mov    %r12,%rdi
xor    %esi,%esi
call   1050 <memset@plt>
mov    %r15,%rdi
xor    %eax,%eax
call   1040 <printf@plt>
mov    %r12,%rbx
nop
xor    %eax,%eax
call   1060 <getchar@plt>
mov    %al,(%rbx)
add    $0x1,%rbx
cmp    $0xa,%al
jne    13c0 <main+0x280>
cmpb   $0x4e,(%r12)
jne    13a0 <main+0x260>
cmpb   $0x4f,0x1(%r12)
jne    13a0 <main+0x260>
cmpb   $0x54,0x2(%r12)
jne    13a0 <main+0x260>
cmpb   $0x53,0x3(%r12)
jne    13a0 <main+0x260>
cmpb   $0x4f,0x4(%r12)
jne    13a0 <main+0x260>
cmpb   $0x53,0x5(%r12)
jne    13a0 <main+0x260>
cmpb   $0x45,0x6(%r12)
jne    13a0 <main+0x260>
cmpb   $0x43,0x7(%r12)
jne    13a0 <main+0x260>
cmpb   $0x52,0x8(%r12)
jne    13a0 <main+0x260>
cmpb   $0x45,0x9(%r12)
jne    13a0 <main+0x260>
cmpb   $0x54,0xa(%r12)
jne    13a0 <main+0x260>
cmpb   $0xa,0xb(%r12)
jne    13a0 <main+0x260>
jmp    1198 <main+0x58>
cmp    $0x20,%r10d
movdqa 0xbc7(%rip),%xmm3
jae    1453 <main+0x313>
xor    %r9d,%r9d
jmp    1561 <main+0x421>
mov    %r10d,%r9d
and    $0xffffffe0,%r9d
lea    -0x20(%r9),%rdx
mov    %rdx,%r8
shr    $0x5,%r8
add    $0x1,%r8
test   %rdx,%rdx
je     150e <main+0x3ce>
mov    %r8,%rsi
and    $0xfffffffffffffffe,%rsi
xor    %edi,%edi
movdqa 0xb7d(%rip),%xmm4
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
mov    %rdi,%rdx
or     %rcx,%rdx
movdqu (%r12,%rdx,1),%xmm0
movdqu 0x10(%r12,%rdx,1),%xmm1
movdqa %xmm0,%xmm2
pcmpeqb %xmm4,%xmm2
pandn  %xmm0,%xmm2
movdqa %xmm1,%xmm0
pcmpeqb %xmm4,%xmm0
pandn  %xmm1,%xmm0
movdqa %xmm2,(%r14,%rdi,1)
movdqa %xmm0,0x10(%r14,%rdi,1)
lea    0x20(%rdi),%rdx
or     %rcx,%rdx
movdqu (%r12,%rdx,1),%xmm0
movdqu 0x10(%r12,%rdx,1),%xmm1
movdqa %xmm0,%xmm2
pcmpeqb %xmm4,%xmm2
pandn  %xmm0,%xmm2
movdqa %xmm1,%xmm0
pcmpeqb %xmm4,%xmm0
pandn  %xmm1,%xmm0
movdqa %xmm2,0x20(%r14,%rdi,1)
movdqa %xmm0,0x30(%r14,%rdi,1)
add    $0x40,%rdi
add    $0xfffffffffffffffe,%rsi
jne    1490 <main+0x350>
jmp    1518 <main+0x3d8>
xor    %edi,%edi
movdqa 0xae8(%rip),%xmm4
test   $0x1,%r8b
je     1556 <main+0x416>
mov    %rdi,%rdx
or     %rcx,%rdx
movdqu (%r12,%rdx,1),%xmm0
movdqu 0x10(%r12,%rdx,1),%xmm1
movdqa %xmm0,%xmm2
pcmpeqb %xmm4,%xmm2
pandn  %xmm0,%xmm2
movdqa %xmm1,%xmm0
pcmpeqb %xmm4,%xmm0
pandn  %xmm1,%xmm0
movdqa %xmm2,(%r14,%rdi,1)
movdqa %xmm0,0x10(%r14,%rdi,1)
cmp    %r10,%r9
je     15a5 <main+0x465>
test   $0x18,%r10b
je     15a9 <main+0x469>
mov    %r9,%rsi
mov    %r10d,%r9d
and    $0xfffffff8,%r9d
lea    (%r9,%rcx,1),%rdx
add    %r12,%rcx
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movq   (%rcx,%rsi,1),%xmm0
movdqa %xmm0,%xmm1
pcmpeqb %xmm3,%xmm1
pandn  %xmm0,%xmm1
movq   %xmm1,(%r14,%rsi,1)
add    $0x8,%rsi
cmp    %rsi,%r9
jne    1580 <main+0x440>
cmp    %r10,%r9
jne    15af <main+0x46f>
xor    %edi,%edi
jmp    15e0 <main+0x4a0>
or     %r9,%rcx
mov    %rcx,%rdx
add    %r12,%rdx
lea    (%r14,%r9,1),%rsi
sub    %r9,%r10
xor    %ecx,%ecx
nopl   0x0(%rax,%rax,1)
movzbl (%rdx,%rcx,1),%ebx
xor    %edi,%edi
cmp    $0xa,%bl
cmove  %edi,%ebx
mov    %bl,(%rsi,%rcx,1)
add    $0x1,%rcx
cmp    %rcx,%r10
jne    15c0 <main+0x480>
nopl   0x0(%rax,%rax,1)
cmp    $0x6c,%al
jne    1620 <main+0x4e0>
cmpb   $0x6f,0x1(%r12)
jne    1620 <main+0x4e0>
cmpb   $0x67,0x2(%r12)
jne    1620 <main+0x4e0>
cmpb   $0x6f,0x3(%r12)
jne    1620 <main+0x4e0>
cmpb   $0xa,0x4(%r12)
jne    1620 <main+0x4e0>
lea    0xb3c(%rip),%rdi
call   1030 <system@plt>
jmp    1198 <main+0x58>
cs nopw 0x0(%rax,%rax,1)
nop
test   %dil,%dil
je     1198 <main+0x58>
jmp    1190 <main+0x50>
lea    -0x28(%rbp),%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
@SHRT_MAX = global i32 0
@.str = [4 x i8] c"%s \00"
@.str.1 = [6 x i8] c"clear\00"
@.str.2 = [9 x i8] c"unlock: \00"
@.str.3 = [12 x i8] c"NOTSOSECRET\00"
@.str.4 = [9 x i8] c"cat logo\00"
define void @main() {
%1 = alloca i8
%2 = alloca i8*
%3 = alloca i64
%4 = alloca i64
%5 = alloca i32
%6 = alloca i32
%7 = alloca i32
%8 = alloca i32
%9 = alloca i32
%10 = load i32, i32* @SHRT_MAX
%11 = zext i32 %10 to i64
%12 = call i8* @llvm.stacksave()
store i8* %12, i8** %2
%13 = alloca i8, i64 %11
store i64 %11, i64* %3
%14 = load i32, i32* @SHRT_MAX
%15 = zext i32 %14 to i64
%16 = alloca i8, i64 %15
store i64 %15, i64* %4
%17 = getelementptr inbounds i8, i8* %16, i64 0
store i8 62, i8* %17
br label %18
18: ; preds = %419, %0
br label %19
19: ; preds = %18
%20 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0), i8* %16)
store i32 0, i32* %7
br label %21
21: ; preds = %29, %19
%22 = load i32, i32* %7
%23 = load i32, i32* @SHRT_MAX
%24 = icmp slt i32 %22, %23
br i1 %24, label %25, label %32
25: ; preds = %21
%26 = load i32, i32* %7
%27 = sext i32 %26 to i64
%28 = getelementptr inbounds i8, i8* %13, i64 %27
store i8 0, i8* %28
br label %29
29: ; preds = %25
%30 = load i32, i32* %7
%31 = add nsw i32 %30, 1
store i32 %31, i32* %7
br label %21
32: ; preds = %21
store i32 0, i32* %7
br label %33
33: ; preds = %40, %32
%34 = call signext i8 (...) @getchar()
store i8 %34, i8* %1
%35 = load i8, i8* %1
%36 = load i32, i32* %7
%37 = add nsw i32 %36, 1
store i32 %37, i32* %7
%38 = sext i32 %36 to i64
%39 = getelementptr inbounds i8, i8* %13, i64 %38
store i8 %35, i8* %39
br label %40
40: ; preds = %33
%41 = load i8, i8* %1
%42 = sext i8 %41 to i32
%43 = icmp ne i32 %42, 10
br i1 %43, label %33, label %44
44: ; preds = %40
%45 = getelementptr inbounds i8, i8* %13, i64 0
%46 = load i8, i8* %45
%47 = sext i8 %46 to i32
%48 = icmp eq i32 %47, 10
br i1 %48, label %49, label %51
49: ; preds = %44
%50 = call i32 @system(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.1, i64 0, i64 0))
br label %51
51: ; preds = %49, %44
%52 = getelementptr inbounds i8, i8* %13, i64 0
%53 = load i8, i8* %52
%54 = sext i8 %53 to i32
%55 = icmp eq i32 %54, 81
br i1 %55, label %61, label %56
56: ; preds = %51
%57 = getelementptr inbounds i8, i8* %13, i64 0
%58 = load i8, i8* %57
%59 = sext i8 %58 to i32
%60 = icmp eq i32 %59, 113
br i1 %60, label %61, label %67
61: ; preds = %56, %51
%62 = getelementptr inbounds i8, i8* %13, i64 1
%63 = load i8, i8* %62
%64 = sext i8 %63 to i32
%65 = icmp eq i32 %64, 10
br i1 %65, label %66, label %67
66: ; preds = %61
store i32 1, i32* %8
br label %420
67: ; preds = %61, %56
%68 = getelementptr inbounds i8, i8* %13, i64 0
%69 = load i8, i8* %68
%70 = sext i8 %69 to i32
%71 = icmp eq i32 %70, 81
br i1 %71, label %77, label %72
72: ; preds = %67
%73 = getelementptr inbounds i8, i8* %13, i64 0
%74 = load i8, i8* %73
%75 = sext i8 %74 to i32
%76 = icmp eq i32 %75, 113
br i1 %76, label %77, label %113
77: ; preds = %72, %67
%78 = getelementptr inbounds i8, i8* %13, i64 1
%79 = load i8, i8* %78
%80 = sext i8 %79 to i32
%81 = icmp eq i32 %80, 85
br i1 %81, label %87, label %82
82: ; preds = %77
%83 = getelementptr inbounds i8, i8* %13, i64 1
%84 = load i8, i8* %83
%85 = sext i8 %84 to i32
%86 = icmp eq i32 %85, 117
br i1 %86, label %87, label %113
87: ; preds = %82, %77
%88 = getelementptr inbounds i8, i8* %13, i64 2
%89 = load i8, i8* %88
%90 = sext i8 %89 to i32
%91 = icmp eq i32 %90, 73
br i1 %91, label %97, label %92
92: ; preds = %87
%93 = getelementptr inbounds i8, i8* %13, i64 2
%94 = load i8, i8* %93
%95 = sext i8 %94 to i32
%96 = icmp eq i32 %95, 105
br i1 %96, label %97, label %113
97: ; preds = %92, %87
%98 = getelementptr inbounds i8, i8* %13, i64 3
%99 = load i8, i8* %98
%100 = sext i8 %99 to i32
%101 = icmp eq i32 %100, 84
br i1 %101, label %107, label %102
102: ; preds = %97
%103 = getelementptr inbounds i8, i8* %13, i64 3
%104 = load i8, i8* %103
%105 = sext i8 %104 to i32
%106 = icmp eq i32 %105, 116
br i1 %106, label %107, label %113
107: ; preds = %102, %97
%108 = getelementptr inbounds i8, i8* %13, i64 4
%109 = load i8, i8* %108
%110 = sext i8 %109 to i32
%111 = icmp eq i32 %110, 10
br i1 %111, label %112, label %113
112: ; preds = %107
store i32 1, i32* %8
br label %420
113: ; preds = %107, %102, %92, %82, %72
br label %114
114: ; preds = %113
%115 = getelementptr inbounds i8, i8* %13, i64 0
%116 = load i8, i8* %115
%117 = sext i8 %116 to i32
%118 = icmp eq i32 %117, 116
br i1 %118, label %119, label %260
119: ; preds = %114
%120 = getelementptr inbounds i8, i8* %13, i64 1
%121 = load i8, i8* %120
%122 = sext i8 %121 to i32
%123 = icmp eq i32 %122, 108
br i1 %123, label %124, label %260
124: ; preds = %119
%125 = getelementptr inbounds i8, i8* %13, i64 2
%126 = load i8, i8* %125
%127 = sext i8 %126 to i32
%128 = icmp eq i32 %127, 111
br i1 %128, label %129, label %260
129: ; preds = %124
%130 = getelementptr inbounds i8, i8* %13, i64 3
%131 = load i8, i8* %130
%132 = sext i8 %131 to i32
%133 = icmp eq i32 %132, 99
br i1 %133, label %134, label %260
134: ; preds = %129
%135 = getelementptr inbounds i8, i8* %13, i64 4
%136 = load i8, i8* %135
%137 = sext i8 %136 to i32
%138 = icmp eq i32 %137, 107
br i1 %138, label %139, label %260
139: ; preds = %134
%140 = getelementptr inbounds i8, i8* %13, i64 5
%141 = load i8, i8* %140
%142 = sext i8 %141 to i32
%143 = icmp eq i32 %142, 10
br i1 %143, label %144, label %260
144: ; preds = %139
br label %145
145: ; preds = %258, %144
br label %146
146: ; preds = %145
store i32 0, i32* %7
br label %147
147: ; preds = %155, %146
%148 = load i32, i32* %7
%149 = load i32, i32* @SHRT_MAX
%150 = icmp slt i32 %148, %149
br i1 %150, label %151, label %158
151: ; preds = %147
%152 = load i32, i32* %7
%153 = sext i32 %152 to i64
%154 = getelementptr inbounds i8, i8* %13, i64 %153
store i8 0, i8* %154
br label %155
155: ; preds = %151
%156 = load i32, i32* %7
%157 = add nsw i32 %156, 1
store i32 %157, i32* %7
br label %147
158: ; preds = %147
store i32 0, i32* %5
%159 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.2, i64 0, i64 0))
store i32 0, i32* %7
br label %160
160: ; preds = %167, %158
%161 = call signext i8 (...) @getchar()
store i8 %161, i8* %1
%162 = load i8, i8* %1
%163 = load i32, i32* %7
%164 = add nsw i32 %163, 1
store i32 %164, i32* %7
%165 = sext i32 %163 to i64
%166 = getelementptr inbounds i8, i8* %13, i64 %165
store i8 %162, i8* %166
br label %167
167: ; preds = %160
%168 = load i8, i8* %1
%169 = sext i8 %168 to i32
%170 = icmp ne i32 %169, 10
br i1 %170, label %160, label %171
171: ; preds = %167
%172 = getelementptr inbounds i8, i8* %13, i64 0
%173 = load i8, i8* %172
%174 = sext i8 %173 to i32
%175 = load i8, i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.3, i64 0, i64 0)
%176 = sext i8 %175 to i32
%177 = icmp eq i32 %174, %176
br i1 %177, label %178, label %254
178: ; preds = %171
%179 = getelementptr inbounds i8, i8* %13, i64 1
%180 = load i8, i8* %179
%181 = sext i8 %180 to i32
%182 = load i8, i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.3, i64 0, i64 1)
%183 = sext i8 %182 to i32
%184 = icmp eq i32 %181, %183
br i1 %184, label %185, label %254
185: ; preds = %178
%186 = getelementptr inbounds i8, i8* %13, i64 2
%187 = load i8, i8* %186
%188 = sext i8 %187 to i32
%189 = load i8, i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.3, i64 0, i64 2)
%190 = sext i8 %189 to i32
%191 = icmp eq i32 %188, %190
br i1 %191, label %192, label %254
192: ; preds = %185
%193 = getelementptr inbounds i8, i8* %13, i64 3
%194 = load i8, i8* %193
%195 = sext i8 %194 to i32
%196 = load i8, i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.3, i64 0, i64 3)
%197 = sext i8 %196 to i32
%198 = icmp eq i32 %195, %197
br i1 %198, label %199, label %254
199: ; preds = %192
%200 = getelementptr inbounds i8, i8* %13, i64 4
%201 = load i8, i8* %200
%202 = sext i8 %201 to i32
%203 = load i8, i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.3, i64 0, i64 4)
%204 = sext i8 %203 to i32
%205 = icmp eq i32 %202, %204
br i1 %205, label %206, label %254
206: ; preds = %199
%207 = getelementptr inbounds i8, i8* %13, i64 5
%208 = load i8, i8* %207
%209 = sext i8 %208 to i32
%210 = load i8, i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.3, i64 0, i64 5)
%211 = sext i8 %210 to i32
%212 = icmp eq i32 %209, %211
br i1 %212, label %213, label %254
213: ; preds = %206
%214 = getelementptr inbounds i8, i8* %13, i64 6
%215 = load i8, i8* %214
%216 = sext i8 %215 to i32
%217 = load i8, i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.3, i64 0, i64 6)
%218 = sext i8 %217 to i32
%219 = icmp eq i32 %216, %218
br i1 %219, label %220, label %254
220: ; preds = %213
%221 = getelementptr inbounds i8, i8* %13, i64 7
%222 = load i8, i8* %221
%223 = sext i8 %222 to i32
%224 = load i8, i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.3, i64 0, i64 7)
%225 = sext i8 %224 to i32
%226 = icmp eq i32 %223, %225
br i1 %226, label %227, label %254
227: ; preds = %220
%228 = getelementptr inbounds i8, i8* %13, i64 8
%229 = load i8, i8* %228
%230 = sext i8 %229 to i32
%231 = load i8, i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.3, i64 0, i64 8)
%232 = sext i8 %231 to i32
%233 = icmp eq i32 %230, %232
br i1 %233, label %234, label %254
234: ; preds = %227
%235 = getelementptr inbounds i8, i8* %13, i64 9
%236 = load i8, i8* %235
%237 = sext i8 %236 to i32
%238 = load i8, i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.3, i64 0, i64 9)
%239 = sext i8 %238 to i32
%240 = icmp eq i32 %237, %239
br i1 %240, label %241, label %254
241: ; preds = %234
%242 = getelementptr inbounds i8, i8* %13, i64 10
%243 = load i8, i8* %242
%244 = sext i8 %243 to i32
%245 = load i8, i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.3, i64 0, i64 10)
%246 = sext i8 %245 to i32
%247 = icmp eq i32 %244, %246
br i1 %247, label %248, label %254
248: ; preds = %241
%249 = getelementptr inbounds i8, i8* %13, i64 11
%250 = load i8, i8* %249
%251 = sext i8 %250 to i32
%252 = icmp eq i32 %251, 10
br i1 %252, label %253, label %254
253: ; preds = %248
store i32 1, i32* %5
br label %254
254: ; preds = %253, %248, %241, %234, %227, %220, %213, %206, %199, %192, %185, %178, %171
%255 = load i32, i32* %5
%256 = icmp eq i32 %255, 1
br i1 %256, label %257, label %258
257: ; preds = %254
br label %259
258: ; preds = %254
br label %145
259: ; preds = %257
br label %260
260: ; preds = %259, %139, %134, %129, %124, %119, %114
%261 = getelementptr inbounds i8, i8* %13, i64 0
%262 = load i8, i8* %261
%263 = sext i8 %262 to i32
%264 = icmp eq i32 %263, 99
br i1 %264, label %265, label %333
265: ; preds = %260
%266 = getelementptr inbounds i8, i8* %13, i64 1
%267 = load i8, i8* %266
%268 = sext i8 %267 to i32
%269 = icmp eq i32 %268, 112
br i1 %269, label %270, label %333
270: ; preds = %265
%271 = getelementptr inbounds i8, i8* %13, i64 2
%272 = load i8, i8* %271
%273 = sext i8 %272 to i32
%274 = icmp eq i32 %273, 114
br i1 %274, label %275, label %333
275: ; preds = %270
%276 = getelementptr inbounds i8, i8* %13, i64 3
%277 = load i8, i8* %276
%278 = sext i8 %277 to i32
%279 = icmp eq i32 %278, 111
br i1 %279, label %280, label %333
280: ; preds = %275
%281 = getelementptr inbounds i8, i8* %13, i64 4
%282 = load i8, i8* %281
%283 = sext i8 %282 to i32
%284 = icmp eq i32 %283, 109
br i1 %284, label %285, label %333
285: ; preds = %280
%286 = getelementptr inbounds i8, i8* %13, i64 5
%287 = load i8, i8* %286
%288 = sext i8 %287 to i32
%289 = icmp eq i32 %288, 112
br i1 %289, label %290, label %333
290: ; preds = %285
%291 = getelementptr inbounds i8, i8* %13, i64 6
%292 = load i8, i8* %291
%293 = sext i8 %292 to i32
%294 = icmp eq i32 %293, 116
br i1 %294, label %295, label %333
295: ; preds = %290
store i32 0, i32* %9
%296 = getelementptr inbounds i8, i8* %13, i64 7
%297 = load i8, i8* %296
%298 = sext i8 %297 to i32
%299 = icmp eq i32 %298, 32
br i1 %299, label %300, label %301
300: ; preds = %295
store i32 8, i32* %7
br label %302
301: ; preds = %295
store i32 7, i32* %7
br label %302
302: ; preds = %301, %300
%303 = load i32, i32* %7
br label %304
304: ; preds = %329, %302
%305 = load i32, i32* %7
%306 = load i32, i32* @SHRT_MAX
%307 = icmp slt i32 %305, %306
br i1 %307, label %308, label %332
308: ; preds = %304
%309 = load i32, i32* %7
%310 = sext i32 %309 to i64
%311 = getelementptr inbounds i8, i8* %13, i64 %310
%312 = load i8, i8* %311
%313 = load i32, i32* %9
%314 = sext i32 %313 to i64
%315 = getelementptr inbounds i8, i8* %16, i64 %314
store i8 %312, i8* %315
%316 = load i32, i32* %9
%317 = sext i32 %316 to i64
%318 = getelementptr inbounds i8, i8* %16, i64 %317
%319 = load i8, i8* %318
%320 = sext i8 %319 to i32
%321 = icmp eq i32 %320, 10
br i1 %321, label %322, label %326
322: ; preds = %308
%323 = load i32, i32* %9
%324 = sext i32 %323 to i64
%325 = getelementptr inbounds i8, i8* %16, i64 %324
store i8 0, i8* %325
br label %326
326: ; preds = %322, %308
%327 = load i32, i32* %9
%328 = add nsw i32 %327, 1
store i32 %328, i32* %9
br label %329
329: ; preds = %326
%330 = load i32, i32* %7
%331 = add nsw i32 %330, 1
store i32 %331, i32* %7
br label %304
332: ; preds = %304
store i32 1, i32* %6
br label %383
333: ; preds = %290, %285, %280, %275, %270, %265, %260
%334 = getelementptr inbounds i8, i8* %13, i64 0
%335 = load i8, i8* %334
%336 = sext i8 %335 to i32
%337 = icmp eq i32 %336, 100
br i1 %337, label %338, label %382
338: ; preds = %333
%339 = getelementptr inbounds i8, i8* %13, i64 1
%340 = load i8, i8* %339
%341 = sext i8 %340 to i32
%342 = icmp eq i32 %341, 112
br i1 %342, label %343, label %382
343: ; preds = %338
%344 = getelementptr inbounds i8, i8* %13, i64 2
%345 = load i8, i8* %344
%346 = sext i8 %345 to i32
%347 = icmp eq i32 %346, 114
br i1 %347, label %348, label %382
348: ; preds = %343
%349 = getelementptr inbounds i8, i8* %13, i64 3
%350 = load i8, i8* %349
%351 = sext i8 %350 to i32
%352 = icmp eq i32 %351, 111
br i1 %352, label %353, label %382
353: ; preds = %348
%354 = getelementptr inbounds i8, i8* %13, i64 4
%355 = load i8, i8* %354
%356 = sext i8 %355 to i32
%357 = icmp eq i32 %356, 109
br i1 %357, label %358, label %382
358: ; preds = %353
%359 = getelementptr inbounds i8, i8* %13, i64 5
%360 = load i8, i8* %359
%361 = sext i8 %360 to i32
%362 = icmp eq i32 %361, 112
br i1 %362, label %363, label %382
363: ; preds = %358
%364 = getelementptr inbounds i8, i8* %13, i64 6
%365 = load i8, i8* %364
%366 = sext i8 %365 to i32
%367 = icmp eq i32 %366, 116
br i1 %367, label %368, label %382
368: ; preds = %363
%369 = getelementptr inbounds i8, i8* %16, i64 0
store i8 62, i8* %369
store i32 1, i32* %7
br label %370
370: ; preds = %378, %368
%371 = load i32, i32* %7
%372 = load i32, i32* @SHRT_MAX
%373 = icmp slt i32 %371, %372
br i1 %373, label %374, label %381
374: ; preds = %370
%375 = load i32, i32* %7
%376 = sext i32 %375 to i64
%377 = getelementptr inbounds i8, i8* %16, i64 %376
store i8 0, i8* %377
br label %378
378: ; preds = %374
%379 = load i32, i32* %7
%380 = add nsw i32 %379, 1
store i32 %380, i32* %7
br label %370
381: ; preds = %370
store i32 1, i32* %6
br label %382
382: ; preds = %381, %363, %358, %353, %348, %343, %338, %333
br label %383
383: ; preds = %382, %332
%384 = getelementptr inbounds i8, i8* %13, i64 0
%385 = load i8, i8* %384
%386 = sext i8 %385 to i32
%387 = icmp eq i32 %386, 108
br i1 %387, label %388, label %410
388: ; preds = %383
%389 = getelementptr inbounds i8, i8* %13, i64 1
%390 = load i8, i8* %389
%391 = sext i8 %390 to i32
%392 = icmp eq i32 %391, 111
br i1 %392, label %393, label %410
393: ; preds = %388
%394 = getelementptr inbounds i8, i8* %13, i64 2
%395 = load i8, i8* %394
%396 = sext i8 %395 to i32
%397 = icmp eq i32 %396, 103
br i1 %397, label %398, label %410
398: ; preds = %393
%399 = getelementptr inbounds i8, i8* %13, i64 3
%400 = load i8, i8* %399
%401 = sext i8 %400 to i32
%402 = icmp eq i32 %401, 111
br i1 %402, label %403, label %410
403: ; preds = %398
%404 = getelementptr inbounds i8, i8* %13, i64 4
%405 = load i8, i8* %404
%406 = sext i8 %405 to i32
%407 = icmp eq i32 %406, 10
br i1 %407, label %408, label %410
408: ; preds = %403
%409 = call i32 @system(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.4, i64 0, i64 0))
br label %419
410: ; preds = %403, %398, %393, %388, %383
%411 = load i32, i32* %5
%412 = icmp eq i32 %411, 0
br i1 %412, label %413, label %418
413: ; preds = %410
%414 = load i32, i32* %6
%415 = icmp eq i32 %414, 0
br i1 %415, label %416, label %418
416: ; preds = %413
%417 = call i32 @system(i8* %13)
br label %418
418: ; preds = %416, %413, %410
br label %419
419: ; preds = %418, %408
store i32 0, i32* %5
store i32 0, i32* %6
br label %18
420: ; preds = %112, %66
%421 = load i8*, i8** %2
ret void
}

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