#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*/ STDOUT_FILENO;
int /*<<< orphan*/ fputs(char const *, int /*<<< orphan*/);
scalar_t__ isatty(int /*<<< orphan*/);
int /*<<< orphan*/ printf(char *, char const *);
int /*<<< orphan*/ stdout;
void usage(const char *argv0) {
  const char *usage_str =
      "Usage: flash [OPTIONS] MATES_1.FASTQ MATES_2.FASTQ\n"
      "       flash [OPTIONS] --interleaved-input (MATES.FASTQ | -)\n"
      "       flash [OPTIONS] --tab-delimited-input (MATES.TAB | -)\n"
      "\n"
      "------------------------------------------------------------------------"
      "----\n"
      "                                 DESCRIPTION                            "
      "    \n"
      "------------------------------------------------------------------------"
      "----\n"
      "\n"
      "FLASH (Fast Length Adjustment of SHort reads) is an accurate and fast "
      "tool\n"
      "to merge paired-end reads that were generated from DNA fragments whose\n"
      "lengths are shorter than twice the length of reads.  Merged read pairs "
      "result\n"
      "in unpaired longer reads, which are generally more desired in genome\n"
      "assembly and genome analysis processes.\n"
      "\n"
      "Briefly, the FLASH algorithm considers all possible overlaps at or "
      "above a\n"
      "minimum length between the reads in a pair and chooses the overlap "
      "that\n"
      "results in the lowest mismatch density (proportion of mismatched bases "
      "in\n"
      "the overlapped region).  Ties between multiple overlaps are broken by\n"
      "considering quality scores at mismatch sites.  When building the "
      "merged\n"
      "sequence, FLASH computes a consensus sequence in the overlapped "
      "region.\n"
      "More details can be found in the original publication\n"
      "(http://bioinformatics.oxfordjournals.org/content/27/21/2957.full).\n"
      "\n"
      "Limitations of FLASH include:\n"
      "   - FLASH cannot merge paired-end reads that do not overlap.\n"
      "   - FLASH is not designed for data that has a significant amount of "
      "indel\n"
      "     errors (such as Sanger sequencing data).  It is best suited for "
      "Illumina\n"
      "     data.\n"
      "\n"
      "------------------------------------------------------------------------"
      "----\n"
      "                               MANDATORY INPUT\n"
      "------------------------------------------------------------------------"
      "----\n"
      "\n"
      "The most common input to FLASH is two FASTQ files containing read 1 and "
      "read 2\n"
      "of each mate pair, respectively, in the same order.\n"
      "\n"
      "Alternatively, you may provide one FASTQ file, which may be standard "
      "input,\n"
      "containing paired-end reads in either interleaved FASTQ (see the\n"
      "--interleaved-input option) or tab-delimited (see the "
      "--tab-delimited-input\n"
      "option) format.  In all cases, gzip compressed input is autodetected.  "
      "Also,\n"
      "in all cases, the PHRED offset is, by default, assumed to be 33; use "
      "the\n"
      "--phred-offset option to change it.\n"
      "\n"
      "------------------------------------------------------------------------"
      "----\n"
      "                                   OUTPUT\n"
      "------------------------------------------------------------------------"
      "----\n"
      "\n"
      "The default output of FLASH consists of the following files:\n"
      "\n"
      "   - out.extendedFrags.fastq      The merged reads.\n"
      "   - out.notCombined_1.fastq      Read 1 of mate pairs that were not "
      "merged.\n"
      "   - out.notCombined_2.fastq      Read 2 of mate pairs that were not "
      "merged.\n"
      "   - out.hist                     Numeric histogram of merged read "
      "lengths.\n"
      "   - out.histogram                Visual histogram of merged read "
      "lengths.\n"
      "\n"
      "FLASH also logs informational messages to standard output.  These can "
      "also be\n"
      "redirected to a file, as in the following example:\n"
      "\n"
      "  $ flash reads_1.fq reads_2.fq 2>&1 | tee flash.log\n"
      "\n"
      "In addition, FLASH supports several features affecting the output:\n"
      "\n"
      "   - Writing the merged reads directly to standard output "
      "(--to-stdout)\n"
      "   - Writing gzip compressed output files (-z) or using an external\n"
      "     compression program (--compress-prog)\n"
      "   - Writing the uncombined read pairs in interleaved FASTQ format\n"
      "     (--interleaved-output)\n"
      "   - Writing all output reads to a single file in tab-delimited format\n"
      "     (--tab-delimited-output)\n"
      "\n"
      "------------------------------------------------------------------------"
      "----\n"
      "                                   OPTIONS\n"
      "------------------------------------------------------------------------"
      "----\n"
      "\n"
      "  -m, --min-overlap=NUM   The minimum required overlap length between "
      "two\n"
      "                          reads to provide a confident overlap.  "
      "Default:\n"
      "                          10bp.\n"
      "\n"
      "  -M, --max-overlap=NUM   Maximum overlap length expected in "
      "approximately\n"
      "                          90% of read pairs.  It is by default set to "
      "65bp,\n"
      "                          which works well for 100bp reads generated "
      "from a\n"
      "                          180bp library, assuming a normal distribution "
      "of\n"
      "                          fragment lengths.  Overlaps longer than the "
      "maximum\n"
      "                          overlap parameter are still considered as "
      "good\n"
      "                          overlaps, but the mismatch density (explained "
      "below)\n"
      "                          is calculated over the first max_overlap "
      "bases in\n"
      "                          the overlapped region rather than the entire\n"
      "                          overlap.  Default: 65bp, or calculated from "
      "the\n"
      "                          specified read length, fragment length, and "
      "fragment\n"
      "                          length standard deviation.\n"
      "\n"
      "  -x, --max-mismatch-density=NUM\n"
      "                          Maximum allowed ratio between the number of\n"
      "                          mismatched base pairs and the overlap "
      "length.\n"
      "                          Two reads will not be combined with a given "
      "overlap\n"
      "                          if that overlap results in a mismatched base "
      "density\n"
      "                          higher than this value.  Note: Any occurence "
      "of an\n"
      "                          'N' in either read is ignored and not "
      "counted\n"
      "                          towards the mismatches or overlap length.  "
      "Our\n"
      "                          experimental results suggest that higher "
      "values of\n"
      "                          the maximum mismatch density yield larger\n"
      "                          numbers of correctly merged read pairs but "
      "at\n"
      "                          the expense of higher numbers of incorrectly\n"
      "                          merged read pairs.  Default: 0.25.\n"
      "\n"
      "  -O, --allow-outies      Also try combining read pairs in the "
      "\"outie\"\n"
      "                          orientation, e.g.\n"
      "\n"
      "                               Read 1: <-----------\n"
      "                               Read 2:       ------------>\n"
      "\n"
      "                          as opposed to only the \"innie\" orientation, "
      "e.g.\n"
      "\n"
      "                               Read 1:       <------------\n"
      "                               Read 2: ----------->\n"
      "\n"
      "                          FLASH uses the same parameters when trying "
      "each\n"
      "                          orientation.  If a read pair can be combined "
      "in\n"
      "                          both \"innie\" and \"outie\" orientations, "
      "the\n"
      "                          better-fitting one will be chosen using the "
      "same\n"
      "                          scoring algorithm that FLASH normally uses.\n"
      "\n"
      "                          This option also causes extra .innie and "
      ".outie\n"
      "                          histogram files to be produced.\n"
      "\n"
      "  -p, --phred-offset=OFFSET\n"
      "                          The smallest ASCII value of the characters "
      "used to\n"
      "                          represent quality values of bases in FASTQ "
      "files.\n"
      "                          It should be set to either 33, which "
      "corresponds\n"
      "                          to the later Illumina platforms and Sanger\n"
      "                          platforms, or 64, which corresponds to the\n"
      "                          earlier Illumina platforms.  Default: 33.\n"
      "\n"
      "  -r, --read-len=LEN\n"
      "  -f, --fragment-len=LEN\n"
      "  -s, --fragment-len-stddev=LEN\n"
      "                          Average read length, fragment length, and "
      "fragment\n"
      "                          standard deviation.  These are convenience "
      "parameters\n"
      "                          only, as they are only used for calculating "
      "the\n"
      "                          maximum overlap (--max-overlap) parameter.\n"
      "                          The maximum overlap is calculated as the "
      "overlap of\n"
      "                          average-length reads from an average-size "
      "fragment\n"
      "                          plus 2.5 times the fragment length standard\n"
      "                          deviation.  The default values are -r 100, -f "
      "180,\n"
      "                          and -s 18, so this works out to a maximum "
      "overlap of\n"
      "                          65 bp.  If --max-overlap is specified, then "
      "the\n"
      "                          specified value overrides the calculated "
      "value.\n"
      "\n"
      "                          If you do not know the standard deviation of "
      "the\n"
      "                          fragment library, you can probably assume "
      "that the\n"
      "                          standard deviation is 10% of the average "
      "fragment\n"
      "                          length.\n"
      "\n"
      "  --cap-mismatch-quals    Cap quality scores assigned at mismatch "
      "locations\n"
      "                          to 2.  This was the default behavior in FLASH "
      "v1.2.7\n"
      "                          and earlier.  Later versions will instead "
      "calculate\n"
      "                          such scores as max(|q1 - q2|, 2); that is, "
      "the\n"
      "                          absolute value of the difference in quality "
      "scores,\n"
      "                          but at least 2.  Essentially, the new "
      "behavior\n"
      "                          prevents a low quality base call that is "
      "likely a\n"
      "                          sequencing error from significantly bringing "
      "down\n"
      "                          the quality of a high quality, likely correct "
      "base\n"
      "                          call.\n"
      "\n"
      "  -l, --lowercase-overhang\n"
      "                          Print the non-overlapped portion of the "
      "merged reads\n"
      "                          in lowercase.\n"
      "\n"
      "  --interleaved-input     Instead of requiring files MATES_1.FASTQ and\n"
      "                          MATES_2.FASTQ, allow a single file "
      "MATES.FASTQ that\n"
      "                          has the paired-end reads interleaved.  "
      "Specify \"-\"\n"
      "                          to read from standard input.\n"
      "\n"
      "  --interleaved-output    Write the uncombined pairs in interleaved "
      "FASTQ\n"
      "                          format.\n"
      "\n"
      "  -I, --interleaved       Equivalent to specifying both "
      "--interleaved-input\n"
      "                          and --interleaved-output.\n"
      "\n"
      "  -Ti, --tab-delimited-input\n"
      "                          Assume the input is in tab-delimited format\n"
      "                          rather than FASTQ, in the format described "
      "below in\n"
      "                          '--tab-delimited-output'.  In this mode you "
      "should\n"
      "                          provide a single input file, each line of "
      "which must\n"
      "                          contain either a read pair (5 fields) or a "
      "single\n"
      "                          read (3 fields).  FLASH will try to combine "
      "the read\n"
      "                          pairs.  Single reads will be written to the "
      "output\n"
      "                          file as-is if also using "
      "--tab-delimited-output;\n"
      "                          otherwise they will be ignored.  Note that "
      "you may\n"
      "                          specify \"-\" as the input file to read the\n"
      "                          tab-delimited data from standard input.\n"
      "\n"
      "  -To, --tab-delimited-output\n"
      "                          Write output in tab-delimited format (not "
      "FASTQ).\n"
      "                          Each line will contain either a combined pair "
      "in the\n"
      "                          format 'tag <tab> seq <tab> qual' or an "
      "uncombined\n"
      "                          pair in the format 'tag <tab> seq_1 <tab> "
      "qual_1\n"
      "                          <tab> seq_2 <tab> qual_2'.\n"
      "\n"
      "  -o, --output-prefix=PREFIX\n"
      "                          Prefix of output files.  Default: \"out\".\n"
      "\n"
      "  -d, --output-directory=DIR\n"
      "                          Path to directory for output files.  "
      "Default:\n"
      "                          current working directory.\n"
      "\n"
      "  -c, --to-stdout         Write the combined reads to standard output.  "
      "In\n"
      "                          this mode, with FASTQ output (the default) "
      "the\n"
      "                          uncombined reads are discarded.  With "
      "tab-delimited\n"
      "                          output, uncombined reads are included in the\n"
      "                          tab-delimited data written to standard "
      "output.\n"
      "                          In both cases, histogram files are not "
      "written,\n"
      "                          and informational messages are sent to "
      "standard\n"
      "                          error rather than to standard output.\n"
      "\n"
      "  -z, --compress          Compress the output files directly with "
      "zlib,\n"
      "                          using the gzip container format.  Similar to\n"
      "                          specifying --compress-prog=gzip and "
      "--suffix=gz,\n"
      "                          but may be slightly faster.\n"
      "\n"
      "  --compress-prog=PROG    Pipe the output through the compression "
      "program\n"
      "                          PROG, which will be called as `PROG -c -',\n"
      "                          plus any arguments specified by "
      "--compress-prog-args.\n"
      "                          PROG must read uncompressed data from "
      "standard input\n"
      "                          and write compressed data to standard output "
      "when\n"
      "                          invoked as noted above.\n"
      "                          Examples: gzip, bzip2, xz, pigz.\n"
      "\n"
      "  --compress-prog-args=ARGS\n"
      "                          A string of additional arguments that will be "
      "passed\n"
      "                          to the compression program if one is "
      "specified with\n"
      "                          --compress-prog=PROG.  (The arguments '-c -' "
      "are\n"
      "                          still passed in addition to explicitly "
      "specified\n"
      "                          arguments.)\n"
      "\n"
      "  --suffix=SUFFIX, --output-suffix=SUFFIX\n"
      "                          Use SUFFIX as the suffix of the output files\n"
      "                          after \".fastq\".  A dot before the suffix is "
      "assumed,\n"
      "                          unless an empty suffix is provided.  "
      "Default:\n"
      "                          nothing; or 'gz' if -z is specified; or PROG "
      "if\n"
      "                          --compress-prog=PROG is specified.\n"
      "\n"
      "  -t, --threads=NTHREADS  Set the number of worker threads.  This is "
      "in\n"
      "                          addition to the I/O threads.  Default: number "
      "of\n"
      "                          processors.  Note: if you need FLASH's output "
      "to\n"
      "                          appear deterministically or in the same order "
      "as\n"
      "                          the original reads, you must specify -t 1\n"
      "                          (--threads=1).\n"
      "\n"
      "  -q, --quiet             Do not print informational messages.\n"
      "\n"
      "  -h, --help              Display this help and exit.\n"
      "\n"
      "  -v, --version           Display version.\n";
  fputs(usage_str, stdout);
  if (isatty(STDOUT_FILENO)) {
    printf("\nRun `%s --help | "
           "less"
           "' to "
           "prevent this text from scrolling by.\n",
           argv0);
  }
}


x86 assembly (clang, -O0):
<usage>:
push   %rbp
mov    %rsp,%rbp
sub    $0x10,%rsp
mov    %rdi,-0x8(%rbp)
lea    0xebd(%rip),%rax
mov    %rax,-0x10(%rbp)
mov    -0x10(%rbp),%rdi
mov    0x5e86(%rip),%rax
mov    (%rax),%esi
call   1050 <fputs@plt>
mov    0x5e90(%rip),%rax
mov    (%rax),%edi
call   1030 <isatty@plt>
cmp    $0x0,%rax
je     1181 <usage+0x51>
mov    -0x8(%rbp),%rsi
lea    0x4486(%rip),%rdi
call   1040 <printf@plt>
add    $0x10,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<usage>:
push   %rbx
mov    %rdi,%rbx
mov    0x5e9d(%rip),%rax
mov    (%rax),%esi
lea    0xebc(%rip),%rdi
call   1050 <fputs@plt>
mov    0x5ea0(%rip),%rax
mov    (%rax),%edi
call   1030 <isatty@plt>
test   %rax,%rax
je     116c <usage+0x3c>
lea    0x449f(%rip),%rdi
mov    %rbx,%rsi
pop    %rbx
jmp    1040 <printf@plt>
pop    %rbx
ret

LLVM IR (-O0):
@.str = [13826 x i8] c"Usage: flash [OPTIONS] MATES_1.FASTQ MATES_2.FASTQ\0A flash [OPTIONS] --interleaved-input (MATES.FASTQ | -)\0A flash [OPTIONS] --tab-delimited-input (MATES.TAB | -)\0A\0A----------------------------------------------------------------------------\0A DESCRIPTION \0A----------------------------------------------------------------------------\0A\0AFLASH (Fast Length Adjustment of SHort reads) is an accurate and fast tool\0Ato merge paired-end reads that were generated from DNA fragments whose\0Alengths are shorter than twice the length of reads. Merged read pairs result\0Ain unpaired longer reads, which are generally more desired in genome\0Aassembly and genome analysis processes.\0A\0ABriefly, the FLASH algorithm considers all possible overlaps at or above a\0Aminimum length between the reads in a pair and chooses the overlap that\0Aresults in the lowest mismatch density (proportion of mismatched bases in\0Athe overlapped region). Ties between multiple overlaps are broken by\0Aconsidering quality scores at mismatch sites. When building the merged\0Asequence, FLASH computes a consensus sequence in the overlapped region.\0AMore details can be found in the original publication\0A(http://bioinformatics.oxfordjournals.org/content/27/21/2957.full).\0A\0ALimitations of FLASH include:\0A - FLASH cannot merge paired-end reads that do not overlap.\0A - FLASH is not designed for data that has a significant amount of indel\0A errors (such as Sanger sequencing data). It is best suited for Illumina\0A data.\0A\0A----------------------------------------------------------------------------\0A MANDATORY INPUT\0A----------------------------------------------------------------------------\0A\0AThe most common input to FLASH is two FASTQ files containing read 1 and read 2\0Aof each mate pair, respectively, in the same order.\0A\0AAlternatively, you may provide one FASTQ file, which may be standard input,\0Acontaining paired-end reads in either interleaved FASTQ (see the\0A--interleaved-input option) or tab-delimited (see the --tab-delimited-input\0Aoption) format. In all cases, gzip compressed input is autodetected. Also,\0Ain all cases, the PHRED offset is, by default, assumed to be 33; use the\0A--phred-offset option to change it.\0A\0A----------------------------------------------------------------------------\0A OUTPUT\0A----------------------------------------------------------------------------\0A\0AThe default output of FLASH consists of the following files:\0A\0A - out.extendedFrags.fastq The merged reads.\0A - out.notCombined_1.fastq Read 1 of mate pairs that were not merged.\0A - out.notCombined_2.fastq Read 2 of mate pairs that were not merged.\0A - out.hist Numeric histogram of merged read lengths.\0A - out.histogram Visual histogram of merged read lengths.\0A\0AFLASH also logs informational messages to standard output. These can also be\0Aredirected to a file, as in the following example:\0A\0A $ flash reads_1.fq reads_2.fq 2>&1 | tee flash.log\0A\0AIn addition, FLASH supports several features affecting the output:\0A\0A - Writing the merged reads directly to standard output (--to-stdout)\0A - Writing gzip compressed output files (-z) or using an external\0A compression program (--compress-prog)\0A - Writing the uncombined read pairs in interleaved FASTQ format\0A (--interleaved-output)\0A - Writing all output reads to a single file in tab-delimited format\0A (--tab-delimited-output)\0A\0A----------------------------------------------------------------------------\0A OPTIONS\0A----------------------------------------------------------------------------\0A\0A -m, --min-overlap=NUM The minimum required overlap length between two\0A reads to provide a confident overlap. Default:\0A 10bp.\0A\0A -M, --max-overlap=NUM Maximum overlap length expected in approximately\0A 90% of read pairs. It is by default set to 65bp,\0A which works well for 100bp reads generated from a\0A 180bp library, assuming a normal distribution of\0A fragment lengths. Overlaps longer than the maximum\0A overlap parameter are still considered as good\0A overlaps, but the mismatch density (explained below)\0A is calculated over the first max_overlap bases in\0A the overlapped region rather than the entire\0A overlap. Default: 65bp, or calculated from the\0A specified read length, fragment length, and fragment\0A length standard deviation.\0A\0A -x, --max-mismatch-density=NUM\0A Maximum allowed ratio between the number of\0A mismatched base pairs and the overlap length.\0A Two reads will not be combined with a given overlap\0A if that overlap results in a mismatched base density\0A higher than this value. Note: Any occurence of an\0A 'N' in either read is ignored and not counted\0A towards the mismatches or overlap length. Our\0A experimental results suggest that higher values of\0A the maximum mismatch density yield larger\0A numbers of correctly merged read pairs but at\0A the expense of higher numbers of incorrectly\0A merged read pairs. Default: 0.25.\0A\0A -O, --allow-outies Also try combining read pairs in the \22outie\22\0A orientation, e.g.\0A\0A Read 1: <-----------\0A Read 2: ------------>\0A\0A as opposed to only the \22innie\22 orientation, e.g.\0A\0A Read 1: <------------\0A Read 2: ----------->\0A\0A FLASH uses the same parameters when trying each\0A orientation. If a read pair can be combined in\0A both \22innie\22 and \22outie\22 orientations, the\0A better-fitting one will be chosen using the same\0A scoring algorithm that FLASH normally uses.\0A\0A This option also causes extra .innie and .outie\0A histogram files to be produced.\0A\0A -p, --phred-offset=OFFSET\0A The smallest ASCII value of the characters used to\0A represent quality values of bases in FASTQ files.\0A It should be set to either 33, which corresponds\0A to the later Illumina platforms and Sanger\0A platforms, or 64, which corresponds to the\0A earlier Illumina platforms. Default: 33.\0A\0A -r, --read-len=LEN\0A -f, --fragment-len=LEN\0A -s, --fragment-len-stddev=LEN\0A Average read length, fragment length, and fragment\0A standard deviation. These are convenience parameters\0A only, as they are only used for calculating the\0A maximum overlap (--max-overlap) parameter.\0A The maximum overlap is calculated as the overlap of\0A average-length reads from an average-size fragment\0A plus 2.5 times the fragment length standard\0A deviation. The default values are -r 100, -f 180,\0A and -s 18, so this works out to a maximum overlap of\0A 65 bp. If --max-overlap is specified, then the\0A specified value overrides the calculated value.\0A\0A If you do not know the standard deviation of the\0A fragment library, you can probably assume that the\0A standard deviation is 10% of the average fragment\0A length.\0A\0A --cap-mismatch-quals Cap quality scores assigned at mismatch locations\0A to 2. This was the default behavior in FLASH v1.2.7\0A and earlier. Later versions will instead calculate\0A such scores as max(|q1 - q2|, 2); that is, the\0A absolute value of the difference in quality scores,\0A but at least 2. Essentially, the new behavior\0A prevents a low quality base call that is likely a\0A sequencing error from significantly bringing down\0A the quality of a high quality, likely correct base\0A call.\0A\0A -l, --lowercase-overhang\0A Print the non-overlapped portion of the merged reads\0A in lowercase.\0A\0A --interleaved-input Instead of requiring files MATES_1.FASTQ and\0A MATES_2.FASTQ, allow a single file MATES.FASTQ that\0A has the paired-end reads interleaved. Specify \22-\22\0A to read from standard input.\0A\0A --interleaved-output Write the uncombined pairs in interleaved FASTQ\0A format.\0A\0A -I, --interleaved Equivalent to specifying both --interleaved-input\0A and --interleaved-output.\0A\0A -Ti, --tab-delimited-input\0A Assume the input is in tab-delimited format\0A rather than FASTQ, in the format described below in\0A '--tab-delimited-output'. In this mode you should\0A provide a single input file, each line of which must\0A contain either a read pair (5 fields) or a single\0A read (3 fields). FLASH will try to combine the read\0A pairs. Single reads will be written to the output\0A file as-is if also using --tab-delimited-output;\0A otherwise they will be ignored. Note that you may\0A specify \22-\22 as the input file to read the\0A tab-delimited data from standard input.\0A\0A -To, --tab-delimited-output\0A Write output in tab-delimited format (not FASTQ).\0A Each line will contain either a combined pair in the\0A format 'tag <tab> seq <tab> qual' or an uncombined\0A pair in the format 'tag <tab> seq_1 <tab> qual_1\0A <tab> seq_2 <tab> qual_2'.\0A\0A -o, --output-prefix=PREFIX\0A Prefix of output files. Default: \22out\22.\0A\0A -d, --output-directory=DIR\0A Path to directory for output files. Default:\0A current working directory.\0A\0A -c, --to-stdout Write the combined reads to standard output. In\0A this mode, with FASTQ output (the default) the\0A uncombined reads are discarded. With tab-delimited\0A output, uncombined reads are included in the\0A tab-delimited data written to standard output.\0A In both cases, histogram files are not written,\0A and informational messages are sent to standard\0A error rather than to standard output.\0A\0A -z, --compress Compress the output files directly with zlib,\0A using the gzip container format. Similar to\0A specifying --compress-prog=gzip and --suffix=gz,\0A but may be slightly faster.\0A\0A --compress-prog=PROG Pipe the output through the compression program\0A PROG, which will be called as `PROG -c -',\0A plus any arguments specified by --compress-prog-args.\0A PROG must read uncompressed data from standard input\0A and write compressed data to standard output when\0A invoked as noted above.\0A Examples: gzip, bzip2, xz, pigz.\0A\0A --compress-prog-args=ARGS\0A A string of additional arguments that will be passed\0A to the compression program if one is specified with\0A --compress-prog=PROG. (The arguments '-c -' are\0A still passed in addition to explicitly specified\0A arguments.)\0A\0A --suffix=SUFFIX, --output-suffix=SUFFIX\0A Use SUFFIX as the suffix of the output files\0A after \22.fastq\22. A dot before the suffix is assumed,\0A unless an empty suffix is provided. Default:\0A nothing; or 'gz' if -z is specified; or PROG if\0A --compress-prog=PROG is specified.\0A\0A -t, --threads=NTHREADS Set the number of worker threads. This is in\0A addition to the I/O threads. Default: number of\0A processors. Note: if you need FLASH's output to\0A appear deterministically or in the same order as\0A the original reads, you must specify -t 1\0A (--threads=1).\0A\0A -q, --quiet Do not print informational messages.\0A\0A -h, --help Display this help and exit.\0A\0A -v, --version Display version.\0A\00"
@stdout = global i32 0
@STDOUT_FILENO = global i32 0
@.str.1 = [65 x i8] c"\0ARun `%s --help | less' to prevent this text from scrolling by.\0A\00"
define void @usage(i8* %0) {
%2 = alloca i8*
%3 = alloca i8*
store i8* %0, i8** %2
store i8* getelementptr inbounds ([13826 x i8], [13826 x i8]* @.str, i64 0, i64 0), i8** %3
%4 = load i8*, i8** %3
%5 = load i32, i32* @stdout
%6 = call i32 @fputs(i8* %4, i32 %5)
%7 = load i32, i32* @STDOUT_FILENO
%8 = call i64 @isatty(i32 %7)
%9 = icmp ne i64 %8, 0
br i1 %9, label %10, label %13
10: ; preds = %1
%11 = load i8*, i8** %2
%12 = call i32 @printf(i8* getelementptr inbounds ([65 x i8], [65 x i8]* @.str.1, i64 0, i64 0), i8* %11)
br label %13
13: ; preds = %10, %1
ret void
}

LLVM IR (-O2):
@.str = [13826 x i8] c"Usage: flash [OPTIONS] MATES_1.FASTQ MATES_2.FASTQ\0A flash [OPTIONS] --interleaved-input (MATES.FASTQ | -)\0A flash [OPTIONS] --tab-delimited-input (MATES.TAB | -)\0A\0A----------------------------------------------------------------------------\0A DESCRIPTION \0A----------------------------------------------------------------------------\0A\0AFLASH (Fast Length Adjustment of SHort reads) is an accurate and fast tool\0Ato merge paired-end reads that were generated from DNA fragments whose\0Alengths are shorter than twice the length of reads. Merged read pairs result\0Ain unpaired longer reads, which are generally more desired in genome\0Aassembly and genome analysis processes.\0A\0ABriefly, the FLASH algorithm considers all possible overlaps at or above a\0Aminimum length between the reads in a pair and chooses the overlap that\0Aresults in the lowest mismatch density (proportion of mismatched bases in\0Athe overlapped region). Ties between multiple overlaps are broken by\0Aconsidering quality scores at mismatch sites. When building the merged\0Asequence, FLASH computes a consensus sequence in the overlapped region.\0AMore details can be found in the original publication\0A(http://bioinformatics.oxfordjournals.org/content/27/21/2957.full).\0A\0ALimitations of FLASH include:\0A - FLASH cannot merge paired-end reads that do not overlap.\0A - FLASH is not designed for data that has a significant amount of indel\0A errors (such as Sanger sequencing data). It is best suited for Illumina\0A data.\0A\0A----------------------------------------------------------------------------\0A MANDATORY INPUT\0A----------------------------------------------------------------------------\0A\0AThe most common input to FLASH is two FASTQ files containing read 1 and read 2\0Aof each mate pair, respectively, in the same order.\0A\0AAlternatively, you may provide one FASTQ file, which may be standard input,\0Acontaining paired-end reads in either interleaved FASTQ (see the\0A--interleaved-input option) or tab-delimited (see the --tab-delimited-input\0Aoption) format. In all cases, gzip compressed input is autodetected. Also,\0Ain all cases, the PHRED offset is, by default, assumed to be 33; use the\0A--phred-offset option to change it.\0A\0A----------------------------------------------------------------------------\0A OUTPUT\0A----------------------------------------------------------------------------\0A\0AThe default output of FLASH consists of the following files:\0A\0A - out.extendedFrags.fastq The merged reads.\0A - out.notCombined_1.fastq Read 1 of mate pairs that were not merged.\0A - out.notCombined_2.fastq Read 2 of mate pairs that were not merged.\0A - out.hist Numeric histogram of merged read lengths.\0A - out.histogram Visual histogram of merged read lengths.\0A\0AFLASH also logs informational messages to standard output. These can also be\0Aredirected to a file, as in the following example:\0A\0A $ flash reads_1.fq reads_2.fq 2>&1 | tee flash.log\0A\0AIn addition, FLASH supports several features affecting the output:\0A\0A - Writing the merged reads directly to standard output (--to-stdout)\0A - Writing gzip compressed output files (-z) or using an external\0A compression program (--compress-prog)\0A - Writing the uncombined read pairs in interleaved FASTQ format\0A (--interleaved-output)\0A - Writing all output reads to a single file in tab-delimited format\0A (--tab-delimited-output)\0A\0A----------------------------------------------------------------------------\0A OPTIONS\0A----------------------------------------------------------------------------\0A\0A -m, --min-overlap=NUM The minimum required overlap length between two\0A reads to provide a confident overlap. Default:\0A 10bp.\0A\0A -M, --max-overlap=NUM Maximum overlap length expected in approximately\0A 90% of read pairs. It is by default set to 65bp,\0A which works well for 100bp reads generated from a\0A 180bp library, assuming a normal distribution of\0A fragment lengths. Overlaps longer than the maximum\0A overlap parameter are still considered as good\0A overlaps, but the mismatch density (explained below)\0A is calculated over the first max_overlap bases in\0A the overlapped region rather than the entire\0A overlap. Default: 65bp, or calculated from the\0A specified read length, fragment length, and fragment\0A length standard deviation.\0A\0A -x, --max-mismatch-density=NUM\0A Maximum allowed ratio between the number of\0A mismatched base pairs and the overlap length.\0A Two reads will not be combined with a given overlap\0A if that overlap results in a mismatched base density\0A higher than this value. Note: Any occurence of an\0A 'N' in either read is ignored and not counted\0A towards the mismatches or overlap length. Our\0A experimental results suggest that higher values of\0A the maximum mismatch density yield larger\0A numbers of correctly merged read pairs but at\0A the expense of higher numbers of incorrectly\0A merged read pairs. Default: 0.25.\0A\0A -O, --allow-outies Also try combining read pairs in the \22outie\22\0A orientation, e.g.\0A\0A Read 1: <-----------\0A Read 2: ------------>\0A\0A as opposed to only the \22innie\22 orientation, e.g.\0A\0A Read 1: <------------\0A Read 2: ----------->\0A\0A FLASH uses the same parameters when trying each\0A orientation. If a read pair can be combined in\0A both \22innie\22 and \22outie\22 orientations, the\0A better-fitting one will be chosen using the same\0A scoring algorithm that FLASH normally uses.\0A\0A This option also causes extra .innie and .outie\0A histogram files to be produced.\0A\0A -p, --phred-offset=OFFSET\0A The smallest ASCII value of the characters used to\0A represent quality values of bases in FASTQ files.\0A It should be set to either 33, which corresponds\0A to the later Illumina platforms and Sanger\0A platforms, or 64, which corresponds to the\0A earlier Illumina platforms. Default: 33.\0A\0A -r, --read-len=LEN\0A -f, --fragment-len=LEN\0A -s, --fragment-len-stddev=LEN\0A Average read length, fragment length, and fragment\0A standard deviation. These are convenience parameters\0A only, as they are only used for calculating the\0A maximum overlap (--max-overlap) parameter.\0A The maximum overlap is calculated as the overlap of\0A average-length reads from an average-size fragment\0A plus 2.5 times the fragment length standard\0A deviation. The default values are -r 100, -f 180,\0A and -s 18, so this works out to a maximum overlap of\0A 65 bp. If --max-overlap is specified, then the\0A specified value overrides the calculated value.\0A\0A If you do not know the standard deviation of the\0A fragment library, you can probably assume that the\0A standard deviation is 10% of the average fragment\0A length.\0A\0A --cap-mismatch-quals Cap quality scores assigned at mismatch locations\0A to 2. This was the default behavior in FLASH v1.2.7\0A and earlier. Later versions will instead calculate\0A such scores as max(|q1 - q2|, 2); that is, the\0A absolute value of the difference in quality scores,\0A but at least 2. Essentially, the new behavior\0A prevents a low quality base call that is likely a\0A sequencing error from significantly bringing down\0A the quality of a high quality, likely correct base\0A call.\0A\0A -l, --lowercase-overhang\0A Print the non-overlapped portion of the merged reads\0A in lowercase.\0A\0A --interleaved-input Instead of requiring files MATES_1.FASTQ and\0A MATES_2.FASTQ, allow a single file MATES.FASTQ that\0A has the paired-end reads interleaved. Specify \22-\22\0A to read from standard input.\0A\0A --interleaved-output Write the uncombined pairs in interleaved FASTQ\0A format.\0A\0A -I, --interleaved Equivalent to specifying both --interleaved-input\0A and --interleaved-output.\0A\0A -Ti, --tab-delimited-input\0A Assume the input is in tab-delimited format\0A rather than FASTQ, in the format described below in\0A '--tab-delimited-output'. In this mode you should\0A provide a single input file, each line of which must\0A contain either a read pair (5 fields) or a single\0A read (3 fields). FLASH will try to combine the read\0A pairs. Single reads will be written to the output\0A file as-is if also using --tab-delimited-output;\0A otherwise they will be ignored. Note that you may\0A specify \22-\22 as the input file to read the\0A tab-delimited data from standard input.\0A\0A -To, --tab-delimited-output\0A Write output in tab-delimited format (not FASTQ).\0A Each line will contain either a combined pair in the\0A format 'tag <tab> seq <tab> qual' or an uncombined\0A pair in the format 'tag <tab> seq_1 <tab> qual_1\0A <tab> seq_2 <tab> qual_2'.\0A\0A -o, --output-prefix=PREFIX\0A Prefix of output files. Default: \22out\22.\0A\0A -d, --output-directory=DIR\0A Path to directory for output files. Default:\0A current working directory.\0A\0A -c, --to-stdout Write the combined reads to standard output. In\0A this mode, with FASTQ output (the default) the\0A uncombined reads are discarded. With tab-delimited\0A output, uncombined reads are included in the\0A tab-delimited data written to standard output.\0A In both cases, histogram files are not written,\0A and informational messages are sent to standard\0A error rather than to standard output.\0A\0A -z, --compress Compress the output files directly with zlib,\0A using the gzip container format. Similar to\0A specifying --compress-prog=gzip and --suffix=gz,\0A but may be slightly faster.\0A\0A --compress-prog=PROG Pipe the output through the compression program\0A PROG, which will be called as `PROG -c -',\0A plus any arguments specified by --compress-prog-args.\0A PROG must read uncompressed data from standard input\0A and write compressed data to standard output when\0A invoked as noted above.\0A Examples: gzip, bzip2, xz, pigz.\0A\0A --compress-prog-args=ARGS\0A A string of additional arguments that will be passed\0A to the compression program if one is specified with\0A --compress-prog=PROG. (The arguments '-c -' are\0A still passed in addition to explicitly specified\0A arguments.)\0A\0A --suffix=SUFFIX, --output-suffix=SUFFIX\0A Use SUFFIX as the suffix of the output files\0A after \22.fastq\22. A dot before the suffix is assumed,\0A unless an empty suffix is provided. Default:\0A nothing; or 'gz' if -z is specified; or PROG if\0A --compress-prog=PROG is specified.\0A\0A -t, --threads=NTHREADS Set the number of worker threads. This is in\0A addition to the I/O threads. Default: number of\0A processors. Note: if you need FLASH's output to\0A appear deterministically or in the same order as\0A the original reads, you must specify -t 1\0A (--threads=1).\0A\0A -q, --quiet Do not print informational messages.\0A\0A -h, --help Display this help and exit.\0A\0A -v, --version Display version.\0A\00"
@stdout = global i32 0
@STDOUT_FILENO = global i32 0
@.str.1 = [65 x i8] c"\0ARun `%s --help | less' to prevent this text from scrolling by.\0A\00"
define void @usage(i8* %0) {
%2 = load i32, i32* @stdout
%3 = tail call i32 @fputs(i8* getelementptr inbounds ([13826 x i8], [13826 x i8]* @.str, i64 0, i64 0), i32 %2)
%4 = load i32, i32* @STDOUT_FILENO
%5 = tail call i64 @isatty(i32 %4)
%6 = icmp eq i64 %5, 0
br i1 %6, label %9, label %7
7: ; preds = %1
%8 = tail call i32 @printf(i8* getelementptr inbounds ([65 x i8], [65 x i8]* @.str.1, i64 0, i64 0), i8* %0)
br label %9
9: ; preds = %7, %1
ret void
}