#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 */
typedef int uint8_t;
typedef size_t uint32_t;
typedef int /*<<< orphan*/ key;
typedef size_t int32_t;
typedef int /*<<< orphan*/ crypto;

/* Variables and functions */
int /*<<< orphan*/ printf(char *, ...);
int strlen(char *);
size_t wep_decrypt(int *, int *, size_t, int *, int);
size_t wep_encrypt(int *, int *, int, int *, int);
int wep_main() {
  uint32_t i;
  uint8_t key[] = {0x11, 0x11, 0x11, 0x11, 0x11};
  uint8_t crypto[] = {
      0x14, 0x04, 0x00, 0x00, 0x80, 0xd9, 0x3b, 0x35, 0xc0, 0x34, 0x2a, 0x2e,
      0x54, 0x51, 0xb1, 0x8c, 0xa0, 0x90, 0x66, 0xa2, 0x57, 0x90, 0x64, 0x36,
      0x79, 0x13, 0xf3, 0xd1, 0x99, 0x06, 0x8f, 0x76, 0x77, 0x70, 0x06, 0xcf,
      0x20, 0x9e, 0x3d, 0x52, 0xf8, 0x79, 0xb6, 0x2f, 0x10, 0x63, 0xd2, 0x28,
      0xca, 0x4f, 0x9f, 0xb1, 0x69, 0x0e, 0xa6, 0x3d, 0x3d, 0x89, 0x7f, 0x9c,
      0xe1, 0xae, 0x83, 0x49, 0x2c, 0x95, 0xbf, 0xdf, 0x35, 0x5e, 0x11, 0xf1,
      0xf6, 0x18, 0x63, 0x8a, 0x14, 0x30, 0x47, 0xd4};
  char *text = "The quick brown goatse jumped over the lazy tubgirl.";
  uint8_t cleartext[256];
  int32_t len = sizeof(crypto) - 4;
  uint8_t tmpbuf[1024];
  len = wep_decrypt(crypto, cleartext, len, key, sizeof(key));
  if (len <= 0) {
    printf("failed to decrypt!\n");
    return 1;
  } else {
    for (i = 0; i < len; i++) {
      printf("%02x ", cleartext[i]);
    }
    printf("\n\n");
  }
  len = wep_encrypt((uint8_t *)"test", tmpbuf, 4, key, sizeof(key));
  if (len <= 0) {
    printf("failed to encrypt!\n");
    return 1;
  }
  for (i = 0; i < len; i++) {
    printf("%02x ", tmpbuf[i]);
  }
  printf("\n\n");
  len =
      wep_encrypt((uint8_t *)text, tmpbuf, strlen(text) + 1, key, sizeof(key));
  if (len <= 0) {
    printf("failed to encrypt!\n");
    return 1;
  }
  len = wep_decrypt(tmpbuf, cleartext, len, key, sizeof(key));
  if (len <= 0) {
    printf("failed to decrypt!\n");
    return 1;
  }
  printf("round trip succesful: (%s).\n", cleartext);
  return 0;
}


x86 assembly (clang, -O0):
<wep_main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x15a0,%rsp
mov    0xe9e(%rip),%rax
mov    %rax,-0x30(%rbp)
mov    0xe9b(%rip),%rax
mov    %rax,-0x28(%rbp)
mov    0xe99(%rip),%eax
mov    %eax,-0x20(%rbp)
lea    -0x170(%rbp),%rdi
lea    0xe98(%rip),%rsi
mov    $0x140,%edx
call   1070 <memcpy@plt>
lea    0xfc7(%rip),%rax
mov    %rax,-0x178(%rbp)
movq   $0x13c,-0x588(%rbp)
lea    -0x170(%rbp),%rdi
lea    -0x580(%rbp),%rsi
mov    -0x588(%rbp),%rdx
lea    -0x30(%rbp),%rcx
mov    $0x14,%r8d
call   1060 <wep_decrypt@plt>
mov    %rax,-0x588(%rbp)
cmpq   $0x0,-0x588(%rbp)
ja     11fe <wep_main+0xae>
lea    0xfaa(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
movl   $0x1,-0x4(%rbp)
jmp    13d9 <wep_main+0x289>
movq   $0x0,-0x10(%rbp)
mov    -0x10(%rbp),%rax
cmp    -0x588(%rbp),%rax
jae    1241 <wep_main+0xf1>
mov    -0x10(%rbp),%rax
mov    -0x580(%rbp,%rax,4),%esi
lea    0xf80(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    1206 <wep_main+0xb6>
lea    0xf67(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    -0x1590(%rbp),%rsi
lea    -0x30(%rbp),%rcx
lea    0xf51(%rip),%rdi
mov    $0x4,%edx
mov    $0x14,%r8d
call   1050 <wep_encrypt@plt>
mov    %rax,-0x588(%rbp)
cmpq   $0x0,-0x588(%rbp)
ja     12a0 <wep_main+0x150>
lea    0xf2a(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
movl   $0x1,-0x4(%rbp)
jmp    13d9 <wep_main+0x289>
movq   $0x0,-0x10(%rbp)
mov    -0x10(%rbp),%rax
cmp    -0x588(%rbp),%rax
jae    12e3 <wep_main+0x193>
mov    -0x10(%rbp),%rax
mov    -0x1590(%rbp,%rax,4),%esi
lea    0xede(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    12a8 <wep_main+0x158>
lea    0xec5(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
mov    -0x178(%rbp),%rax
mov    %rax,-0x15a0(%rbp)
lea    -0x1590(%rbp),%rax
mov    %rax,-0x1598(%rbp)
mov    -0x178(%rbp),%rdi
call   1030 <strlen@plt>
mov    -0x15a0(%rbp),%rdi
mov    -0x1598(%rbp),%rsi
mov    %eax,%edx
add    $0x1,%edx
lea    -0x30(%rbp),%rcx
mov    $0x14,%r8d
call   1050 <wep_encrypt@plt>
mov    %rax,-0x588(%rbp)
cmpq   $0x0,-0x588(%rbp)
ja     136a <wep_main+0x21a>
lea    0xe60(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
movl   $0x1,-0x4(%rbp)
jmp    13d9 <wep_main+0x289>
lea    -0x1590(%rbp),%rdi
lea    -0x580(%rbp),%rsi
mov    -0x588(%rbp),%rdx
lea    -0x30(%rbp),%rcx
mov    $0x14,%r8d
call   1060 <wep_decrypt@plt>
mov    %rax,-0x588(%rbp)
cmpq   $0x0,-0x588(%rbp)
ja     13bd <wep_main+0x26d>
lea    0xdeb(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
movl   $0x1,-0x4(%rbp)
jmp    13d9 <wep_main+0x289>
lea    -0x580(%rbp),%rsi
lea    0xe00(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
movl   $0x0,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x15a0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<wep_main>:
push   %r15
push   %r14
push   %rbx
sub    $0x1560,%rsp
mov    0xe9e(%rip),%eax
mov    %eax,0x10(%rsp)
movaps 0xe83(%rip),%xmm0
movaps %xmm0,(%rsp)
lea    0xe98(%rip),%rsi
lea    0x420(%rsp),%rbx
mov    $0x140,%edx
mov    %rbx,%rdi
call   1080 <memcpy@plt>
lea    0x20(%rsp),%rsi
mov    %rsp,%rcx
mov    $0x13c,%edx
mov    %rbx,%rdi
mov    $0x14,%r8d
call   1070 <wep_decrypt@plt>
test   %rax,%rax
je     12c0 <wep_main+0x160>
mov    %rax,%r15
lea    0xfca(%rip),%r14
xor    %ebx,%ebx
nopl   (%rax)
mov    0x20(%rsp,%rbx,4),%esi
mov    %r14,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
add    $0x1,%rbx
cmp    %rbx,%r15
jne    11d0 <wep_main+0x70>
lea    0xfcd(%rip),%rdi
call   1030 <puts@plt>
lea    0xfa1(%rip),%rdi
lea    0x560(%rsp),%rsi
mov    %rsp,%rcx
mov    $0x4,%edx
mov    $0x14,%r8d
call   1060 <wep_encrypt@plt>
test   %rax,%rax
je     12c9 <wep_main+0x169>
mov    %rax,%r15
lea    0xf6d(%rip),%r14
xor    %ebx,%ebx
nopw   0x0(%rax,%rax,1)
mov    0x560(%rsp,%rbx,4),%esi
mov    %r14,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
add    $0x1,%rbx
cmp    %rbx,%r15
jne    1230 <wep_main+0xd0>
lea    0xf6a(%rip),%rdi
call   1030 <puts@plt>
lea    0xf03(%rip),%rbx
mov    %rbx,%rdi
call   1040 <strlen@plt>
lea    0x1(%rax),%edx
lea    0x560(%rsp),%rsi
mov    %rsp,%rcx
mov    %rbx,%rdi
mov    $0x14,%r8d
call   1060 <wep_encrypt@plt>
test   %rax,%rax
je     12c9 <wep_main+0x169>
lea    0x560(%rsp),%rdi
lea    0x20(%rsp),%rsi
mov    %rsp,%rcx
mov    %rax,%rdx
mov    $0x14,%r8d
call   1070 <wep_decrypt@plt>
test   %rax,%rax
je     12c0 <wep_main+0x160>
lea    0xef0(%rip),%rdi
xor    %ebx,%ebx
lea    0x20(%rsp),%rsi
xor    %eax,%eax
call   1050 <printf@plt>
jmp    12da <wep_main+0x17a>
lea    0xf09(%rip),%rdi
jmp    12d0 <wep_main+0x170>
lea    0xeed(%rip),%rdi
call   1030 <puts@plt>
mov    $0x1,%ebx
mov    %ebx,%eax
add    $0x1560,%rsp
pop    %rbx
pop    %r14
pop    %r15
ret

LLVM IR (-O0):
@__const.wep_main.key = [5 x i32] [i32 17, i32 17, i32 17, i32 17, i32 17]
@__const.wep_main.crypto = [80 x i32] [i32 20, i32 4, i32 0, i32 0, i32 128, i32 217, i32 59, i32 53, i32 192, i32 52, i32 42, i32 46, i32 84, i32 81, i32 177, i32 140, i32 160, i32 144, i32 102, i32 162, i32 87, i32 144, i32 100, i32 54, i32 121, i32 19, i32 243, i32 209, i32 153, i32 6, i32 143, i32 118, i32 119, i32 112, i32 6, i32 207, i32 32, i32 158, i32 61, i32 82, i32 248, i32 121, i32 182, i32 47, i32 16, i32 99, i32 210, i32 40, i32 202, i32 79, i32 159, i32 177, i32 105, i32 14, i32 166, i32 61, i32 61, i32 137, i32 127, i32 156, i32 225, i32 174, i32 131, i32 73, i32 44, i32 149, i32 191, i32 223, i32 53, i32 94, i32 17, i32 241, i32 246, i32 24, i32 99, i32 138, i32 20, i32 48, i32 71, i32 212]
@.str = [53 x i8] c"The quick brown goatse jumped over the lazy tubgirl.\00"
@.str.1 = [20 x i8] c"failed to decrypt!\0A\00"
@.str.2 = [6 x i8] c"%02x \00"
@.str.3 = [3 x i8] c"\0A\0A\00"
@.str.4 = [5 x i8] c"test\00"
@.str.5 = [20 x i8] c"failed to encrypt!\0A\00"
@.str.6 = [29 x i8] c"round trip succesful: (%s).\0A\00"
define i32 @wep_main() {
%1 = alloca i32
%2 = alloca i64
%3 = alloca [5 x i32]
%4 = alloca [80 x i32]
%5 = alloca i8*
%6 = alloca [256 x i32]
%7 = alloca i64
%8 = alloca [1024 x i32]
%9 = bitcast [5 x i32]* %3 to i8*
%10 = bitcast [80 x i32]* %4 to i8*
store i8* getelementptr inbounds ([53 x i8], [53 x i8]* @.str, i64 0, i64 0), i8** %5
store i64 316, i64* %7
%11 = getelementptr inbounds [80 x i32], [80 x i32]* %4, i64 0, i64 0
%12 = getelementptr inbounds [256 x i32], [256 x i32]* %6, i64 0, i64 0
%13 = load i64, i64* %7
%14 = getelementptr inbounds [5 x i32], [5 x i32]* %3, i64 0, i64 0
%15 = call i64 @wep_decrypt(i32* %11, i32* %12, i64 %13, i32* %14, i32 20)
store i64 %15, i64* %7
%16 = load i64, i64* %7
%17 = icmp ule i64 %16, 0
br i1 %17, label %18, label %20
18: ; preds = %0
%19 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.1, i64 0, i64 0))
store i32 1, i32* %1
br label %83
20: ; preds = %0
store i64 0, i64* %2
br label %21
21: ; preds = %30, %20
%22 = load i64, i64* %2
%23 = load i64, i64* %7
%24 = icmp ult i64 %22, %23
br i1 %24, label %25, label %33
25: ; preds = %21
%26 = load i64, i64* %2
%27 = getelementptr inbounds [256 x i32], [256 x i32]* %6, i64 0, i64 %26
%28 = load i32, i32* %27
%29 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.2, i64 0, i64 0), i32 %28)
br label %30
30: ; preds = %25
%31 = load i64, i64* %2
%32 = add i64 %31, 1
store i64 %32, i64* %2
br label %21
33: ; preds = %21
%34 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.3, i64 0, i64 0))
br label %35
35: ; preds = %33
%36 = getelementptr inbounds [1024 x i32], [1024 x i32]* %8, i64 0, i64 0
%37 = getelementptr inbounds [5 x i32], [5 x i32]* %3, i64 0, i64 0
%38 = call i64 @wep_encrypt(i32* bitcast ([5 x i8]* @.str.4 to i32*), i32* %36, i32 4, i32* %37, i32 20)
store i64 %38, i64* %7
%39 = load i64, i64* %7
%40 = icmp ule i64 %39, 0
br i1 %40, label %41, label %43
41: ; preds = %35
%42 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.5, i64 0, i64 0))
store i32 1, i32* %1
br label %83
43: ; preds = %35
store i64 0, i64* %2
br label %44
44: ; preds = %53, %43
%45 = load i64, i64* %2
%46 = load i64, i64* %7
%47 = icmp ult i64 %45, %46
br i1 %47, label %48, label %56
48: ; preds = %44
%49 = load i64, i64* %2
%50 = getelementptr inbounds [1024 x i32], [1024 x i32]* %8, i64 0, i64 %49
%51 = load i32, i32* %50
%52 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.2, i64 0, i64 0), i32 %51)
br label %53
53: ; preds = %48
%54 = load i64, i64* %2
%55 = add i64 %54, 1
store i64 %55, i64* %2
br label %44
56: ; preds = %44
%57 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.3, i64 0, i64 0))
%58 = load i8*, i8** %5
%59 = bitcast i8* %58 to i32*
%60 = getelementptr inbounds [1024 x i32], [1024 x i32]* %8, i64 0, i64 0
%61 = load i8*, i8** %5
%62 = call i32 @strlen(i8* %61)
%63 = add nsw i32 %62, 1
%64 = getelementptr inbounds [5 x i32], [5 x i32]* %3, i64 0, i64 0
%65 = call i64 @wep_encrypt(i32* %59, i32* %60, i32 %63, i32* %64, i32 20)
store i64 %65, i64* %7
%66 = load i64, i64* %7
%67 = icmp ule i64 %66, 0
br i1 %67, label %68, label %70
68: ; preds = %56
%69 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.5, i64 0, i64 0))
store i32 1, i32* %1
br label %83
70: ; preds = %56
%71 = getelementptr inbounds [1024 x i32], [1024 x i32]* %8, i64 0, i64 0
%72 = getelementptr inbounds [256 x i32], [256 x i32]* %6, i64 0, i64 0
%73 = load i64, i64* %7
%74 = getelementptr inbounds [5 x i32], [5 x i32]* %3, i64 0, i64 0
%75 = call i64 @wep_decrypt(i32* %71, i32* %72, i64 %73, i32* %74, i32 20)
store i64 %75, i64* %7
%76 = load i64, i64* %7
%77 = icmp ule i64 %76, 0
br i1 %77, label %78, label %80
78: ; preds = %70
%79 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.1, i64 0, i64 0))
store i32 1, i32* %1
br label %83
80: ; preds = %70
%81 = getelementptr inbounds [256 x i32], [256 x i32]* %6, i64 0, i64 0
%82 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([29 x i8], [29 x i8]* @.str.6, i64 0, i64 0), i32* %81)
store i32 0, i32* %1
br label %83
83: ; preds = %80, %78, %68, %41, %18
%84 = load i32, i32* %1
ret i32 %84
}

LLVM IR (-O2):
@__const.wep_main.key = [5 x i32] [i32 17, i32 17, i32 17, i32 17, i32 17]
@__const.wep_main.crypto = [80 x i32] [i32 20, i32 4, i32 0, i32 0, i32 128, i32 217, i32 59, i32 53, i32 192, i32 52, i32 42, i32 46, i32 84, i32 81, i32 177, i32 140, i32 160, i32 144, i32 102, i32 162, i32 87, i32 144, i32 100, i32 54, i32 121, i32 19, i32 243, i32 209, i32 153, i32 6, i32 143, i32 118, i32 119, i32 112, i32 6, i32 207, i32 32, i32 158, i32 61, i32 82, i32 248, i32 121, i32 182, i32 47, i32 16, i32 99, i32 210, i32 40, i32 202, i32 79, i32 159, i32 177, i32 105, i32 14, i32 166, i32 61, i32 61, i32 137, i32 127, i32 156, i32 225, i32 174, i32 131, i32 73, i32 44, i32 149, i32 191, i32 223, i32 53, i32 94, i32 17, i32 241, i32 246, i32 24, i32 99, i32 138, i32 20, i32 48, i32 71, i32 212]
@.str = [53 x i8] c"The quick brown goatse jumped over the lazy tubgirl.\00"
@.str.2 = [6 x i8] c"%02x \00"
@.str.4 = [5 x i8] c"test\00"
@.str.6 = [29 x i8] c"round trip succesful: (%s).\0A\00"
@str.7 = [2 x i8] c"\0A\00"
@str.10 = [19 x i8] c"failed to encrypt!\00"
@str.11 = [19 x i8] c"failed to decrypt!\00"
define i32 @wep_main() {
%1 = alloca [5 x i32]
%2 = alloca [80 x i32]
%3 = alloca [256 x i32]
%4 = alloca [1024 x i32]
%5 = bitcast [5 x i32]* %1 to i8*
%6 = bitcast [80 x i32]* %2 to i8*
%7 = bitcast [256 x i32]* %3 to i8*
%8 = bitcast [1024 x i32]* %4 to i8*
%9 = getelementptr inbounds [80 x i32], [80 x i32]* %2, i64 0, i64 0
%10 = getelementptr inbounds [256 x i32], [256 x i32]* %3, i64 0, i64 0
%11 = getelementptr inbounds [5 x i32], [5 x i32]* %1, i64 0, i64 0
%12 = call i64 @wep_decrypt(i32* %9, i32* %10, i64 316, i32* %11, i32 20)
%13 = icmp eq i64 %12, 0
br i1 %13, label %14, label %16
14: ; preds = %0
%15 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([19 x i8], [19 x i8]* @str.11, i64 0, i64 0))
br label %52
16: ; preds = %0, %16
%17 = phi i64 [ %21, %16 ], [ 0, %0 ]
%18 = getelementptr inbounds [256 x i32], [256 x i32]* %3, i64 0, i64 %17
%19 = load i32, i32* %18
%20 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([6 x i8], [6 x i8]* @.str.2, i64 0, i64 0), i32 %19)
%21 = add nuw i64 %17, 1
%22 = icmp eq i64 %21, %12
br i1 %22, label %23, label %16
23: ; preds = %16
%24 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([2 x i8], [2 x i8]* @str.7, i64 0, i64 0))
%25 = getelementptr inbounds [1024 x i32], [1024 x i32]* %4, i64 0, i64 0
%26 = call i64 @wep_encrypt(i32* bitcast ([5 x i8]* @.str.4 to i32*), i32* %25, i32 4, i32* %11, i32 20)
%27 = icmp eq i64 %26, 0
br i1 %27, label %28, label %30
28: ; preds = %23
%29 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([19 x i8], [19 x i8]* @str.10, i64 0, i64 0))
br label %52
30: ; preds = %23, %30
%31 = phi i64 [ %35, %30 ], [ 0, %23 ]
%32 = getelementptr inbounds [1024 x i32], [1024 x i32]* %4, i64 0, i64 %31
%33 = load i32, i32* %32
%34 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([6 x i8], [6 x i8]* @.str.2, i64 0, i64 0), i32 %33)
%35 = add nuw i64 %31, 1
%36 = icmp eq i64 %35, %26
br i1 %36, label %37, label %30
37: ; preds = %30
%38 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([2 x i8], [2 x i8]* @str.7, i64 0, i64 0))
%39 = call i32 @strlen(i8* getelementptr inbounds ([53 x i8], [53 x i8]* @.str, i64 0, i64 0))
%40 = add nsw i32 %39, 1
%41 = call i64 @wep_encrypt(i32* bitcast ([53 x i8]* @.str to i32*), i32* %25, i32 %40, i32* %11, i32 20)
%42 = icmp eq i64 %41, 0
br i1 %42, label %43, label %45
43: ; preds = %37
%44 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([19 x i8], [19 x i8]* @str.10, i64 0, i64 0))
br label %52
45: ; preds = %37
%46 = call i64 @wep_decrypt(i32* %25, i32* %10, i64 %41, i32* %11, i32 20)
%47 = icmp eq i64 %46, 0
br i1 %47, label %48, label %50
48: ; preds = %45
%49 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([19 x i8], [19 x i8]* @str.11, i64 0, i64 0))
br label %52
50: ; preds = %45
%51 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([29 x i8], [29 x i8]* @.str.6, i64 0, i64 0), i32* %10)
br label %52
52: ; preds = %50, %48, %43, %28, %14
%53 = phi i32 [ 1, %14 ], [ 1, %28 ], [ 1, %43 ], [ 1, %48 ], [ 0, %50 ]
ret i32 %53
}