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

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
int /*<<< orphan*/ exit(int);
int /*<<< orphan*/ printf(char *, ...);
void usage(int exit_status) {
  printf("Usage: %s [OPTIONS] <PATH> [<PATH>...]\n", "fsnoop");
  printf("\n");
  printf("Options:\n");
  printf("   --help             -h   This help\n");
  printf("   --verbose          -v   Increased output verbosity\n");
  printf("\n");
  printf("   --cache            -C   Enable caching of PID:Path information so "
         "that closes\n");
  printf("                           have path information (default)\n");
  printf(
      "   --no-cache         -c   Disable caching of PID:Path information\n");
  printf("\n");
  printf("Path flags:\n");
  printf(
      "   --dont-follow           Do not follow symlinks specified as paths\n");
  printf("   --only-dir              Throw an error if a specified path is not "
         "a directory\n");
  printf("   --mount                 If specified paths are not mount points, "
         "change them\n");
  printf("                           to the mount points containing the "
         "specified path\n");
  printf("   --filesystem            Add the filesystems containing the "
         "specified paths,\n");
  printf("                           including all mount points for the "
         "filesystems\n");
  printf("\n");
  printf("Events:\n");
  printf("   --create                File or directory created\n");
  printf("   --open                  File or directory opened\n");
  printf("   --open-exec             File opened with intent to execute\n");
  printf("   --access                File or directory accessed (read)\n");
  printf("   --modify                File modified\n");
  printf("   --close                 File or directory closed\n");
  printf("   --close-write           Writable file closed\n");
  printf("   --close-no-write        Read-only file or directory closed\n");
  printf("   --attrib                File or directory metadata modified\n");
  printf("   --delete                File or directory deleted\n");
  printf("   --delete-self           File or directory specified as path "
         "delete\n");
  printf("   --move                  File or directory moved\n");
  printf("   --moved-from            File or directory moved from a specified "
         "path\n");
  printf("   --moved-to              File or directory moved into a specified "
         "path\n");
  printf("   --ondir                 Apply events to directories as well as "
         "files\n");
  printf("\n");
  printf("   --all              -a   All supported events\n");
  printf("\n");
  exit(exit_status);
}


x86 assembly (clang, -O0):
<usage>:
push   %rbp
mov    %rsp,%rbp
sub    $0x10,%rsp
mov    %edi,-0x4(%rbp)
lea    0xece(%rip),%rdi
lea    0xeef(%rip),%rsi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x12ef(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0xeda(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0xed6(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0xeee(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x12b7(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0xf09(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0xf4d(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0xf7b(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x127f(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0xfa3(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0xfa2(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0xfda(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x101e(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x1061(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x10a1(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x10e3(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x120f(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x1112(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x110d(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x1135(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x115c(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x118d(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x11bd(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x11d9(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x1200(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x1223(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x1254(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x1286(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x12ae(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x12e7(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x130d(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x1349(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x1385(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x1121(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x13b2(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x1105(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0x4(%rbp),%edi
call   1040 <exit@plt>

x86 assembly (clang, -O2):
<usage>:
push   %rbx
mov    %edi,%ebx
lea    0xeb6(%rip),%rdi
lea    0xed7(%rip),%rsi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
lea    0xec6(%rip),%rdi
call   1040 <puts@plt>
lea    0xec3(%rip),%rdi
call   1040 <puts@plt>
lea    0xedc(%rip),%rdi
call   1040 <puts@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
lea    0xefc(%rip),%rdi
call   1040 <puts@plt>
lea    0xf41(%rip),%rdi
call   1040 <puts@plt>
lea    0xf70(%rip),%rdi
call   1040 <puts@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
lea    0xf9d(%rip),%rdi
call   1040 <puts@plt>
lea    0xf9d(%rip),%rdi
call   1040 <puts@plt>
lea    0xfd6(%rip),%rdi
call   1040 <puts@plt>
lea    0x101b(%rip),%rdi
call   1040 <puts@plt>
lea    0x105f(%rip),%rdi
call   1040 <puts@plt>
lea    0x10a0(%rip),%rdi
call   1040 <puts@plt>
lea    0x10e3(%rip),%rdi
call   1040 <puts@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
lea    0x1117(%rip),%rdi
call   1040 <puts@plt>
lea    0x1113(%rip),%rdi
call   1040 <puts@plt>
lea    0x113c(%rip),%rdi
call   1040 <puts@plt>
lea    0x1164(%rip),%rdi
call   1040 <puts@plt>
lea    0x1196(%rip),%rdi
call   1040 <puts@plt>
lea    0x11c7(%rip),%rdi
call   1040 <puts@plt>
lea    0x11e4(%rip),%rdi
call   1040 <puts@plt>
lea    0x120c(%rip),%rdi
call   1040 <puts@plt>
lea    0x1230(%rip),%rdi
call   1040 <puts@plt>
lea    0x1262(%rip),%rdi
call   1040 <puts@plt>
lea    0x1295(%rip),%rdi
call   1040 <puts@plt>
lea    0x12be(%rip),%rdi
call   1040 <puts@plt>
lea    0x12f8(%rip),%rdi
call   1040 <puts@plt>
lea    0x131f(%rip),%rdi
call   1040 <puts@plt>
lea    0x135c(%rip),%rdi
call   1040 <puts@plt>
lea    0x1399(%rip),%rdi
call   1040 <puts@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
lea    0x13cb(%rip),%rdi
call   1040 <puts@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    %ebx,%edi
call   1060 <exit@plt>

LLVM IR (-O0):
@.str = [40 x i8] c"Usage: %s [OPTIONS] <PATH> [<PATH>...]\0A\00"
@.str.1 = [7 x i8] c"fsnoop\00"
@.str.2 = [2 x i8] c"\0A\00"
@.str.3 = [10 x i8] c"Options:\0A\00"
@.str.4 = [38 x i8] c" --help -h This help\0A\00"
@.str.5 = [55 x i8] c" --verbose -v Increased output verbosity\0A\00"
@.str.6 = [82 x i8] c" --cache -C Enable caching of PID:Path information so that closes\0A\00"
@.str.7 = [60 x i8] c" have path information (default)\0A\00"
@.str.8 = [68 x i8] c" --no-cache -c Disable caching of PID:Path information\0A\00"
@.str.9 = [13 x i8] c"Path flags:\0A\00"
@.str.10 = [70 x i8] c" --dont-follow Do not follow symlinks specified as paths\0A\00"
@.str.11 = [82 x i8] c" --only-dir Throw an error if a specified path is not a directory\0A\00"
@.str.12 = [81 x i8] c" --mount If specified paths are not mount points, change them\0A\00"
@.str.13 = [78 x i8] c" to the mount points containing the specified path\0A\00"
@.str.14 = [80 x i8] c" --filesystem Add the filesystems containing the specified paths,\0A\00"
@.str.15 = [75 x i8] c" including all mount points for the filesystems\0A\00"
@.str.16 = [9 x i8] c"Events:\0A\00"
@.str.17 = [54 x i8] c" --create File or directory created\0A\00"
@.str.18 = [53 x i8] c" --open File or directory opened\0A\00"
@.str.19 = [63 x i8] c" --open-exec File opened with intent to execute\0A\00"
@.str.20 = [62 x i8] c" --access File or directory accessed (read)\0A\00"
@.str.21 = [42 x i8] c" --modify File modified\0A\00"
@.str.22 = [53 x i8] c" --close File or directory closed\0A\00"
@.str.23 = [49 x i8] c" --close-write Writable file closed\0A\00"
@.str.24 = [63 x i8] c" --close-no-write Read-only file or directory closed\0A\00"
@.str.25 = [64 x i8] c" --attrib File or directory metadata modified\0A\00"
@.str.26 = [54 x i8] c" --delete File or directory deleted\0A\00"
@.str.27 = [71 x i8] c" --delete-self File or directory specified as path delete\0A\00"
@.str.28 = [52 x i8] c" --move File or directory moved\0A\00"
@.str.29 = [74 x i8] c" --moved-from File or directory moved from a specified path\0A\00"
@.str.30 = [74 x i8] c" --moved-to File or directory moved into a specified path\0A\00"
@.str.31 = [73 x i8] c" --ondir Apply events to directories as well as files\0A\00"
@.str.32 = [49 x i8] c" --all -a All supported events\0A\00"
define void @usage(i32 %0) {
%2 = alloca i32
store i32 %0, i32* %2
%3 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([40 x i8], [40 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.1, i64 0, i64 0))
%4 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.2, i64 0, i64 0))
%5 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.3, i64 0, i64 0))
%6 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([38 x i8], [38 x i8]* @.str.4, i64 0, i64 0))
%7 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([55 x i8], [55 x i8]* @.str.5, i64 0, i64 0))
%8 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.2, i64 0, i64 0))
%9 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([82 x i8], [82 x i8]* @.str.6, i64 0, i64 0))
%10 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([60 x i8], [60 x i8]* @.str.7, i64 0, i64 0))
%11 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([68 x i8], [68 x i8]* @.str.8, i64 0, i64 0))
%12 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.2, i64 0, i64 0))
%13 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.9, i64 0, i64 0))
%14 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([70 x i8], [70 x i8]* @.str.10, i64 0, i64 0))
%15 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([82 x i8], [82 x i8]* @.str.11, i64 0, i64 0))
%16 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([81 x i8], [81 x i8]* @.str.12, i64 0, i64 0))
%17 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([78 x i8], [78 x i8]* @.str.13, i64 0, i64 0))
%18 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([80 x i8], [80 x i8]* @.str.14, i64 0, i64 0))
%19 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([75 x i8], [75 x i8]* @.str.15, i64 0, i64 0))
%20 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.2, i64 0, i64 0))
%21 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.16, i64 0, i64 0))
%22 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([54 x i8], [54 x i8]* @.str.17, i64 0, i64 0))
%23 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([53 x i8], [53 x i8]* @.str.18, i64 0, i64 0))
%24 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([63 x i8], [63 x i8]* @.str.19, i64 0, i64 0))
%25 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([62 x i8], [62 x i8]* @.str.20, i64 0, i64 0))
%26 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([42 x i8], [42 x i8]* @.str.21, i64 0, i64 0))
%27 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([53 x i8], [53 x i8]* @.str.22, i64 0, i64 0))
%28 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([49 x i8], [49 x i8]* @.str.23, i64 0, i64 0))
%29 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([63 x i8], [63 x i8]* @.str.24, i64 0, i64 0))
%30 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @.str.25, i64 0, i64 0))
%31 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([54 x i8], [54 x i8]* @.str.26, i64 0, i64 0))
%32 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([71 x i8], [71 x i8]* @.str.27, i64 0, i64 0))
%33 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([52 x i8], [52 x i8]* @.str.28, i64 0, i64 0))
%34 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([74 x i8], [74 x i8]* @.str.29, i64 0, i64 0))
%35 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([74 x i8], [74 x i8]* @.str.30, i64 0, i64 0))
%36 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([73 x i8], [73 x i8]* @.str.31, i64 0, i64 0))
%37 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.2, i64 0, i64 0))
%38 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([49 x i8], [49 x i8]* @.str.32, i64 0, i64 0))
%39 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.2, i64 0, i64 0))
%40 = load i32, i32* %2
%41 = call i32 @exit(i32 %40)
unreachable
}

LLVM IR (-O2):
@.str = [40 x i8] c"Usage: %s [OPTIONS] <PATH> [<PATH>...]\0A\00"
@.str.1 = [7 x i8] c"fsnoop\00"
@str = [9 x i8] c"Options:\00"
@str.33 = [37 x i8] c" --help -h This help\00"
@str.34 = [54 x i8] c" --verbose -v Increased output verbosity\00"
@str.35 = [81 x i8] c" --cache -C Enable caching of PID:Path information so that closes\00"
@str.36 = [59 x i8] c" have path information (default)\00"
@str.37 = [67 x i8] c" --no-cache -c Disable caching of PID:Path information\00"
@str.38 = [12 x i8] c"Path flags:\00"
@str.39 = [69 x i8] c" --dont-follow Do not follow symlinks specified as paths\00"
@str.40 = [81 x i8] c" --only-dir Throw an error if a specified path is not a directory\00"
@str.41 = [80 x i8] c" --mount If specified paths are not mount points, change them\00"
@str.42 = [77 x i8] c" to the mount points containing the specified path\00"
@str.43 = [79 x i8] c" --filesystem Add the filesystems containing the specified paths,\00"
@str.44 = [74 x i8] c" including all mount points for the filesystems\00"
@str.45 = [8 x i8] c"Events:\00"
@str.46 = [53 x i8] c" --create File or directory created\00"
@str.47 = [52 x i8] c" --open File or directory opened\00"
@str.48 = [62 x i8] c" --open-exec File opened with intent to execute\00"
@str.49 = [61 x i8] c" --access File or directory accessed (read)\00"
@str.50 = [41 x i8] c" --modify File modified\00"
@str.51 = [52 x i8] c" --close File or directory closed\00"
@str.52 = [48 x i8] c" --close-write Writable file closed\00"
@str.53 = [62 x i8] c" --close-no-write Read-only file or directory closed\00"
@str.54 = [63 x i8] c" --attrib File or directory metadata modified\00"
@str.55 = [53 x i8] c" --delete File or directory deleted\00"
@str.56 = [70 x i8] c" --delete-self File or directory specified as path delete\00"
@str.57 = [51 x i8] c" --move File or directory moved\00"
@str.58 = [73 x i8] c" --moved-from File or directory moved from a specified path\00"
@str.59 = [73 x i8] c" --moved-to File or directory moved into a specified path\00"
@str.60 = [72 x i8] c" --ondir Apply events to directories as well as files\00"
@str.61 = [48 x i8] c" --all -a All supported events\00"
define void @usage(i32 %0) {
%2 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([40 x i8], [40 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.1, i64 0, i64 0))
%3 = tail call i32 @putchar(i32 10)
%4 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([9 x i8], [9 x i8]* @str, i64 0, i64 0))
%5 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([37 x i8], [37 x i8]* @str.33, i64 0, i64 0))
%6 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([54 x i8], [54 x i8]* @str.34, i64 0, i64 0))
%7 = tail call i32 @putchar(i32 10)
%8 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([81 x i8], [81 x i8]* @str.35, i64 0, i64 0))
%9 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([59 x i8], [59 x i8]* @str.36, i64 0, i64 0))
%10 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([67 x i8], [67 x i8]* @str.37, i64 0, i64 0))
%11 = tail call i32 @putchar(i32 10)
%12 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([12 x i8], [12 x i8]* @str.38, i64 0, i64 0))
%13 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([69 x i8], [69 x i8]* @str.39, i64 0, i64 0))
%14 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([81 x i8], [81 x i8]* @str.40, i64 0, i64 0))
%15 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([80 x i8], [80 x i8]* @str.41, i64 0, i64 0))
%16 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([77 x i8], [77 x i8]* @str.42, i64 0, i64 0))
%17 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([79 x i8], [79 x i8]* @str.43, i64 0, i64 0))
%18 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([74 x i8], [74 x i8]* @str.44, i64 0, i64 0))
%19 = tail call i32 @putchar(i32 10)
%20 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([8 x i8], [8 x i8]* @str.45, i64 0, i64 0))
%21 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([53 x i8], [53 x i8]* @str.46, i64 0, i64 0))
%22 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([52 x i8], [52 x i8]* @str.47, i64 0, i64 0))
%23 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([62 x i8], [62 x i8]* @str.48, i64 0, i64 0))
%24 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([61 x i8], [61 x i8]* @str.49, i64 0, i64 0))
%25 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([41 x i8], [41 x i8]* @str.50, i64 0, i64 0))
%26 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([52 x i8], [52 x i8]* @str.51, i64 0, i64 0))
%27 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([48 x i8], [48 x i8]* @str.52, i64 0, i64 0))
%28 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([62 x i8], [62 x i8]* @str.53, i64 0, i64 0))
%29 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([63 x i8], [63 x i8]* @str.54, i64 0, i64 0))
%30 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([53 x i8], [53 x i8]* @str.55, i64 0, i64 0))
%31 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([70 x i8], [70 x i8]* @str.56, i64 0, i64 0))
%32 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([51 x i8], [51 x i8]* @str.57, i64 0, i64 0))
%33 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([73 x i8], [73 x i8]* @str.58, i64 0, i64 0))
%34 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([73 x i8], [73 x i8]* @str.59, i64 0, i64 0))
%35 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([72 x i8], [72 x i8]* @str.60, i64 0, i64 0))
%36 = tail call i32 @putchar(i32 10)
%37 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([48 x i8], [48 x i8]* @str.61, i64 0, i64 0))
%38 = tail call i32 @putchar(i32 10)
%39 = tail call i32 @exit(i32 %0)
unreachable
}