#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*/ printf(char *);
int usage(char *progname) {
  printf("Usage: oggz <subcommand> [options] filename ...\n\n");
  printf(
      "oggz is a commandline tool for manipulating Ogg files. It supports\n"
      "multiplexed files conformant with RFC3533. Oggz can parse headers for\n"
      "CELT, CMML, FLAC, Kate, Opus, PCM, Speex, Theora, Vorbis and VP8, and "
      "can read and write\n"
      "Ogg Skeleton logical bitstreams.\n");
  printf("\nCommands:\n");
  printf("  help          Display help for a specific subcommand (eg. \"oggz "
         "help chop\")\n");
  printf("\nReporting:\n");
  printf("  codecs        Display the list of codecs found in one or more "
         "files and\n"
         "                their bitstreams.\n");
  printf("  diff          Hexdump the packets of two Ogg files and output "
         "differences.\n");
  printf("  dump          Hexdump packets of an Ogg file, or revert an Ogg "
         "file from\n"
         "                such a hexdump.\n");
  printf("  info          Display information about one or more Ogg files and "
         "their\n"
         "                bitstreams.\n");
  printf("  scan          Scan an Ogg file and output characteristic "
         "landmarks.\n");
  printf("  validate      Validate the Ogg framing of one or more files.\n");
  printf("\nExtraction:\n");
  printf("  rip           Extract one or more logical bitstreams from an Ogg "
         "file.\n");
  printf("\nEditing:\n");
  printf("  chop          Extract the part of an Ogg file between given start "
         "and/or\n"
         "                end times.\n");
  printf("  comment       List or edit comments in an Ogg file.\n");
  printf("  merge         Merge Ogg files together, interleaving pages in "
         "order of\n"
         "                presentation time.\n");
  printf("  sort          Sort the pages of an Ogg file in order of "
         "presentation time.\n");
  printf("\nMiscellaneous:\n");
  printf("  known-codecs  List codecs known by this version of oggz\n");
  printf("\n");
  printf("Please report bugs to <ogg-dev@xiph.org>\n");
  return 0;
}


x86 assembly (clang, -O0):
<usage>:
push   %rbp
mov    %rsp,%rbp
sub    $0x10,%rsp
mov    %rdi,-0x8(%rbp)
lea    0xedd(%rip),%rdi
call   1030 <printf@plt>
lea    0xf03(%rip),%rdi
call   1030 <printf@plt>
lea    0xffb(%rip),%rdi
call   1030 <printf@plt>
lea    0xffb(%rip),%rdi
call   1030 <printf@plt>
lea    0x103e(%rip),%rdi
call   1030 <printf@plt>
lea    0x103f(%rip),%rdi
call   1030 <printf@plt>
lea    0x10a0(%rip),%rdi
call   1030 <printf@plt>
lea    0x10e2(%rip),%rdi
call   1030 <printf@plt>
lea    0x1142(%rip),%rdi
call   1030 <printf@plt>
lea    0x119d(%rip),%rdi
call   1030 <printf@plt>
lea    0x11d8(%rip),%rdi
call   1030 <printf@plt>
lea    0x120c(%rip),%rdi
call   1030 <printf@plt>
lea    0x120e(%rip),%rdi
call   1030 <printf@plt>
lea    0x124c(%rip),%rdi
call   1030 <printf@plt>
lea    0x124b(%rip),%rdi
call   1030 <printf@plt>
lea    0x12a6(%rip),%rdi
call   1030 <printf@plt>
lea    0x12d1(%rip),%rdi
call   1030 <printf@plt>
lea    0x1332(%rip),%rdi
call   1030 <printf@plt>
lea    0x1374(%rip),%rdi
call   1030 <printf@plt>
lea    0x1379(%rip),%rdi
call   1030 <printf@plt>
lea    0xe1d(%rip),%rdi
call   1030 <printf@plt>
lea    0x139c(%rip),%rdi
call   1030 <printf@plt>
xor    %eax,%eax
add    $0x10,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<usage>:
push   %rax
lea    0xed8(%rip),%rdi
call   1040 <puts@plt>
lea    0xefd(%rip),%rdi
call   1040 <puts@plt>
lea    0xff4(%rip),%rdi
call   1040 <puts@plt>
lea    0xff3(%rip),%rdi
call   1040 <puts@plt>
lea    0x1035(%rip),%rdi
call   1040 <puts@plt>
lea    0x1035(%rip),%rdi
call   1040 <puts@plt>
lea    0x1095(%rip),%rdi
call   1040 <puts@plt>
lea    0x10d6(%rip),%rdi
call   1040 <puts@plt>
lea    0x1135(%rip),%rdi
call   1040 <puts@plt>
lea    0x118f(%rip),%rdi
call   1040 <puts@plt>
lea    0x11c9(%rip),%rdi
call   1040 <puts@plt>
lea    0x11fc(%rip),%rdi
call   1040 <puts@plt>
lea    0x11fd(%rip),%rdi
call   1040 <puts@plt>
lea    0x123a(%rip),%rdi
call   1040 <puts@plt>
lea    0x1238(%rip),%rdi
call   1040 <puts@plt>
lea    0x1292(%rip),%rdi
call   1040 <puts@plt>
lea    0x12bc(%rip),%rdi
call   1040 <puts@plt>
lea    0x131c(%rip),%rdi
call   1040 <puts@plt>
lea    0x135d(%rip),%rdi
call   1040 <puts@plt>
lea    0x1361(%rip),%rdi
call   1040 <puts@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
lea    0x1385(%rip),%rdi
call   1040 <puts@plt>
xor    %eax,%eax
pop    %rcx
ret

LLVM IR (-O0):
@.str = [50 x i8] c"Usage: oggz <subcommand> [options] filename ...\0A\0A\00"
@.str.1 = [260 x i8] c"oggz is a commandline tool for manipulating Ogg files. It supports\0Amultiplexed files conformant with RFC3533. Oggz can parse headers for\0ACELT, CMML, FLAC, Kate, Opus, PCM, Speex, Theora, Vorbis and VP8, and can read and write\0AOgg Skeleton logical bitstreams.\0A\00"
@.str.2 = [12 x i8] c"\0ACommands:\0A\00"
@.str.3 = [79 x i8] c" help Display help for a specific subcommand (eg. \22oggz help chop\22)\0A\00"
@.str.4 = [13 x i8] c"\0AReporting:\0A\00"
@.str.5 = [109 x i8] c" codecs Display the list of codecs found in one or more files and\0A their bitstreams.\0A\00"
@.str.6 = [78 x i8] c" diff Hexdump the packets of two Ogg files and output differences.\0A\00"
@.str.7 = [108 x i8] c" dump Hexdump packets of an Ogg file, or revert an Ogg file from\0A such a hexdump.\0A\00"
@.str.8 = [103 x i8] c" info Display information about one or more Ogg files and their\0A bitstreams.\0A\00"
@.str.9 = [71 x i8] c" scan Scan an Ogg file and output characteristic landmarks.\0A\00"
@.str.10 = [64 x i8] c" validate Validate the Ogg framing of one or more files.\0A\00"
@.str.11 = [14 x i8] c"\0AExtraction:\0A\00"
@.str.12 = [74 x i8] c" rip Extract one or more logical bitstreams from an Ogg file.\0A\00"
@.str.13 = [11 x i8] c"\0AEditing:\0A\00"
@.str.14 = [103 x i8] c" chop Extract the part of an Ogg file between given start and/or\0A end times.\0A\00"
@.str.15 = [55 x i8] c" comment List or edit comments in an Ogg file.\0A\00"
@.str.16 = [109 x i8] c" merge Merge Ogg files together, interleaving pages in order of\0A presentation time.\0A\00"
@.str.17 = [78 x i8] c" sort Sort the pages of an Ogg file in order of presentation time.\0A\00"
@.str.18 = [17 x i8] c"\0AMiscellaneous:\0A\00"
@.str.19 = [59 x i8] c" known-codecs List codecs known by this version of oggz\0A\00"
@.str.20 = [2 x i8] c"\0A\00"
@.str.21 = [42 x i8] c"Please report bugs to <ogg-dev@xiph.org>\0A\00"
define i32 @usage(i8* %0) {
%2 = alloca i8*
store i8* %0, i8** %2
%3 = call i32 @printf(i8* getelementptr inbounds ([50 x i8], [50 x i8]* @.str, i64 0, i64 0))
%4 = call i32 @printf(i8* getelementptr inbounds ([260 x i8], [260 x i8]* @.str.1, i64 0, i64 0))
%5 = call i32 @printf(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.2, i64 0, i64 0))
%6 = call i32 @printf(i8* getelementptr inbounds ([79 x i8], [79 x i8]* @.str.3, i64 0, i64 0))
%7 = call i32 @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.4, i64 0, i64 0))
%8 = call i32 @printf(i8* getelementptr inbounds ([109 x i8], [109 x i8]* @.str.5, i64 0, i64 0))
%9 = call i32 @printf(i8* getelementptr inbounds ([78 x i8], [78 x i8]* @.str.6, i64 0, i64 0))
%10 = call i32 @printf(i8* getelementptr inbounds ([108 x i8], [108 x i8]* @.str.7, i64 0, i64 0))
%11 = call i32 @printf(i8* getelementptr inbounds ([103 x i8], [103 x i8]* @.str.8, i64 0, i64 0))
%12 = call i32 @printf(i8* getelementptr inbounds ([71 x i8], [71 x i8]* @.str.9, i64 0, i64 0))
%13 = call i32 @printf(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @.str.10, i64 0, i64 0))
%14 = call i32 @printf(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.11, i64 0, i64 0))
%15 = call i32 @printf(i8* getelementptr inbounds ([74 x i8], [74 x i8]* @.str.12, i64 0, i64 0))
%16 = call i32 @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.13, i64 0, i64 0))
%17 = call i32 @printf(i8* getelementptr inbounds ([103 x i8], [103 x i8]* @.str.14, i64 0, i64 0))
%18 = call i32 @printf(i8* getelementptr inbounds ([55 x i8], [55 x i8]* @.str.15, i64 0, i64 0))
%19 = call i32 @printf(i8* getelementptr inbounds ([109 x i8], [109 x i8]* @.str.16, i64 0, i64 0))
%20 = call i32 @printf(i8* getelementptr inbounds ([78 x i8], [78 x i8]* @.str.17, i64 0, i64 0))
%21 = call i32 @printf(i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str.18, i64 0, i64 0))
%22 = call i32 @printf(i8* getelementptr inbounds ([59 x i8], [59 x i8]* @.str.19, i64 0, i64 0))
%23 = call i32 @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.20, i64 0, i64 0))
%24 = call i32 @printf(i8* getelementptr inbounds ([42 x i8], [42 x i8]* @.str.21, i64 0, i64 0))
ret i32 0
}

LLVM IR (-O2):
@str = [49 x i8] c"Usage: oggz <subcommand> [options] filename ...\0A\00"
@str.22 = [259 x i8] c"oggz is a commandline tool for manipulating Ogg files. It supports\0Amultiplexed files conformant with RFC3533. Oggz can parse headers for\0ACELT, CMML, FLAC, Kate, Opus, PCM, Speex, Theora, Vorbis and VP8, and can read and write\0AOgg Skeleton logical bitstreams.\00"
@str.23 = [11 x i8] c"\0ACommands:\00"
@str.24 = [78 x i8] c" help Display help for a specific subcommand (eg. \22oggz help chop\22)\00"
@str.25 = [12 x i8] c"\0AReporting:\00"
@str.26 = [108 x i8] c" codecs Display the list of codecs found in one or more files and\0A their bitstreams.\00"
@str.27 = [77 x i8] c" diff Hexdump the packets of two Ogg files and output differences.\00"
@str.28 = [107 x i8] c" dump Hexdump packets of an Ogg file, or revert an Ogg file from\0A such a hexdump.\00"
@str.29 = [102 x i8] c" info Display information about one or more Ogg files and their\0A bitstreams.\00"
@str.30 = [70 x i8] c" scan Scan an Ogg file and output characteristic landmarks.\00"
@str.31 = [63 x i8] c" validate Validate the Ogg framing of one or more files.\00"
@str.32 = [13 x i8] c"\0AExtraction:\00"
@str.33 = [73 x i8] c" rip Extract one or more logical bitstreams from an Ogg file.\00"
@str.34 = [10 x i8] c"\0AEditing:\00"
@str.35 = [102 x i8] c" chop Extract the part of an Ogg file between given start and/or\0A end times.\00"
@str.36 = [54 x i8] c" comment List or edit comments in an Ogg file.\00"
@str.37 = [108 x i8] c" merge Merge Ogg files together, interleaving pages in order of\0A presentation time.\00"
@str.38 = [77 x i8] c" sort Sort the pages of an Ogg file in order of presentation time.\00"
@str.39 = [16 x i8] c"\0AMiscellaneous:\00"
@str.40 = [58 x i8] c" known-codecs List codecs known by this version of oggz\00"
@str.41 = [41 x i8] c"Please report bugs to <ogg-dev@xiph.org>\00"
define i32 @usage(i8* nocapture readnone %0) {
%2 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([49 x i8], [49 x i8]* @str, i64 0, i64 0))
%3 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([259 x i8], [259 x i8]* @str.22, i64 0, i64 0))
%4 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([11 x i8], [11 x i8]* @str.23, i64 0, i64 0))
%5 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([78 x i8], [78 x i8]* @str.24, i64 0, i64 0))
%6 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([12 x i8], [12 x i8]* @str.25, i64 0, i64 0))
%7 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([108 x i8], [108 x i8]* @str.26, i64 0, i64 0))
%8 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([77 x i8], [77 x i8]* @str.27, i64 0, i64 0))
%9 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([107 x i8], [107 x i8]* @str.28, i64 0, i64 0))
%10 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([102 x i8], [102 x i8]* @str.29, i64 0, i64 0))
%11 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([70 x i8], [70 x i8]* @str.30, i64 0, i64 0))
%12 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([63 x i8], [63 x i8]* @str.31, i64 0, i64 0))
%13 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([13 x i8], [13 x i8]* @str.32, i64 0, i64 0))
%14 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([73 x i8], [73 x i8]* @str.33, i64 0, i64 0))
%15 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([10 x i8], [10 x i8]* @str.34, i64 0, i64 0))
%16 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([102 x i8], [102 x i8]* @str.35, i64 0, i64 0))
%17 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([54 x i8], [54 x i8]* @str.36, i64 0, i64 0))
%18 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([108 x i8], [108 x i8]* @str.37, i64 0, i64 0))
%19 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([77 x i8], [77 x i8]* @str.38, i64 0, i64 0))
%20 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([16 x i8], [16 x i8]* @str.39, i64 0, i64 0))
%21 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([58 x i8], [58 x i8]* @str.40, i64 0, i64 0))
%22 = tail call i32 @putchar(i32 10)
%23 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([41 x i8], [41 x i8]* @str.41, i64 0, i64 0))
ret i32 0
}