// File: /workspace/github_c_makefile_star2_O1/genometools[P]genometools/src/tools/gt_sain.c
// Function: gt_sain_option_parser_new
static GtOptionParser *gt_sain_option_parser_new(void *tool_arguments)
{
  GtSainArguments *arguments = tool_arguments;
  GtOptionParser *op;
  GtOption *option, *optionesq, *optionfile, *optionmmap,
           *optionfasta, *optiondnaalphabet, *optionproteinalphabet,
           *optionlcp, *optionlcpkasai, *optionsmap, *optiontistabout;

  gt_assert(arguments != NULL);

  /* init */
  op = gt_option_parser_new("[option ...] [file]", /* XXX */
                            "Compute suffix array using induced "
                            "suffix sorting.");
  gt_option_parser_set_mail_address(op,"<kurtz@zbh.uni-hamburg.de>");

  /* -esq */
  optionesq = gt_option_new_string("esq", "specify encseq file",
                             arguments->encseqfile, NULL);
  gt_option_parser_add_option(op, optionesq);

  /* -dir */
  gt_encseq_options_add_readmode_option(op, arguments->dir);

  /* -lcp */
  optionlcp = gt_option_new_bool("lcp", "output lcp table",
                                 &arguments->outlcptab, false);
  gt_option_parser_add_option(op, optionlcp);

  /* -kasai */
  optionlcpkasai = gt_option_new_bool("kasai", "use kasai algorithm to compute "
                                      "lcp table",
                                      &arguments->lcpkasai, false);
  gt_option_parser_add_option(op, optionlcpkasai);

  /* -file */
  optionfile = gt_option_new_string("file", "specify filename",
                                   arguments->plainseqfile, NULL);
  gt_option_parser_add_option(op, optionfile);

  /* -fasta */
  optionfasta = gt_option_new_string("fasta","fasta input",
                                    arguments->fastafile, NULL);
  gt_option_parser_add_option(op, optionfasta);

  /* -dna */
  optiondnaalphabet = gt_option_new_bool("dna","use DNA alphabet",
                                         &arguments->dnaalphabet, false);
  gt_option_parser_add_option(op, optiondnaalphabet);

  /* -protein */
  optionproteinalphabet = gt_option_new_bool("protein","use protein alphabet",
                                             &arguments->proteinalphabet,false);
  gt_option_parser_add_option(op, optionproteinalphabet);

  /* -smap */
  optionsmap = gt_option_new_string("smap","specify symbol map file",
                                    arguments->smap, NULL);
  gt_option_parser_add_option(op, optionsmap);

  /* -icheck */
  option = gt_option_new_bool("icheck",
                              "intermediate check of all sorted arrays",
                              &arguments->icheck, false);
  gt_option_parser_add_option(op, option);

  /* -mmap */
  optionmmap = gt_option_new_bool("mmap",
                                  "use mmap to map the input file "
                                  "(requires option -file)",
                                  &arguments->dommap, false);
  gt_option_parser_add_option(op, optionmmap);

  /* -fcheck */
  option = gt_option_new_bool("fcheck", "final check of suffix array",
                              &arguments->fcheck, false);
  gt_option_parser_add_option(op, option);

  /* -suf */
  option = gt_option_new_bool("suf","output suffix array (table suftab)",
                              &arguments->suftabout, false);
  gt_option_parser_add_option(op, option);

  /* -tis */
  optiontistabout
    = gt_option_new_bool("tis","output transformed input sequence",
                         &arguments->tistabout, false);
  gt_option_parser_add_option(op, optiontistabout);

  /* -v */
  option = gt_option_new_verbose(&arguments->verbose);
  gt_option_parser_add_option(op, option);

  gt_option_exclude(optionesq,optionfile);
  gt_option_exclude(optionesq, optionfasta);
  gt_option_exclude(optionfile, optionfasta);
  gt_option_exclude(optionfasta, optionmmap);
  gt_option_exclude(optiondnaalphabet,optionproteinalphabet);
  gt_option_exclude(optiondnaalphabet,optionsmap);
  gt_option_exclude(optionproteinalphabet,optionsmap);
  gt_option_imply(optiondnaalphabet,optionfasta);
  gt_option_imply(optionlcpkasai,optionlcp);
  gt_option_imply(optionproteinalphabet,optionfasta);
  gt_option_imply(optionsmap,optionfasta);
  gt_option_imply_either_2(optiontistabout,optionfasta,optionfile);
  return op;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x38, %rsp
testq %rdi, %rdi
je 0xbfbfc
movq %rdi, %r14
leaq 0x293db4(%rip), %rdi    # 0x3536c2
leaq 0x29ef99(%rip), %rsi    # 0x35e8ae
callq 0x10cc4e
movq %rax, %rbx
leaq 0x28f9a8(%rip), %rsi    # 0x34f2cc
movq %rax, %rdi
callq 0x10ceab
movq 0x10(%r14), %rdx
leaq 0x2a2c57(%rip), %rdi    # 0x36258e
leaq 0x29efa3(%rip), %rsi    # 0x35e8e1
xorl %ecx, %ecx
callq 0x10f987
movq %rax, %rbp
movq %rbx, %rdi
movq %rax, %rsi
callq 0x10cd10
movq 0x28(%r14), %rsi
movq %rbx, %rdi
callq 0x1014bc
leaq 0x2(%r14), %rdx
leaq 0x300174(%rip), %rdi    # 0x3bfade
leaq 0x29ef84(%rip), %rsi    # 0x35e8f5
xorl %ecx, %ecx
callq 0x10f451
movq %rax, 0x30(%rsp)
movq %rbx, %rdi
movq %rax, %rsi
callq 0x10cd10
leaq 0x3(%r14), %rdx
leaq 0x30191f(%rip), %rdi    # 0x3c12b2
leaq 0x29ef6c(%rip), %rsi    # 0x35e906
xorl %ecx, %ecx
callq 0x10f451
movq %rax, 0x28(%rsp)
movq %rbx, %rdi
movq %rax, %rsi
callq 0x10cd10
movq 0x18(%r14), %rdx
leaq 0x292f00(%rip), %rdi    # 0x3528bc
leaq 0x29ef6c(%rip), %rsi    # 0x35e92f
xorl %ecx, %ecx
callq 0x10f987
movq %rax, 0x8(%rsp)
movq %rbx, %rdi
movq %rax, %rsi
callq 0x10cd10
movq 0x20(%r14), %rdx
leaq 0x2c3449(%rip), %rdi    # 0x382e2e
leaq 0x29ef54(%rip), %rsi    # 0x35e940
xorl %ecx, %ecx
callq 0x10f987
movq %rax, %r15
movq %rbx, %rdi
movq %rax, %rsi
callq 0x10cd10
leaq 0x6(%r14), %rdx
leaq 0x299706(%rip), %rdi    # 0x359112
leaq 0x29ef39(%rip), %rsi    # 0x35e94c
xorl %ecx, %ecx
callq 0x10f451
movq %rax, 0x20(%rsp)
movq %rbx, %rdi
movq %rax, %rsi
callq 0x10cd10
leaq 0x7(%r14), %rdx
leaq 0x2991ac(%rip), %rdi    # 0x358be1
leaq 0x29ef21(%rip), %rsi    # 0x35e95d
xorl %ecx, %ecx
callq 0x10f451
movq %rax, 0x18(%rsp)
movq %rbx, %rdi
movq %rax, %rsi
callq 0x10cd10
movq 0x30(%r14), %rdx
leaq 0x2aef3c(%rip), %rdi    # 0x36e99a
leaq 0x29ef0d(%rip), %rsi    # 0x35e972
xorl %ecx, %ecx
callq 0x10f987
movq %rax, %r13
movq %rbx, %rdi
movq %rax, %rsi
callq 0x10cd10
leaq 0x29ef09(%rip), %rdi    # 0x35e98a
leaq 0x29ef09(%rip), %rsi    # 0x35e991
movq %r14, %rdx
xorl %ecx, %ecx
callq 0x10f451
movq %rbx, %rdi
movq %rax, %rsi
callq 0x10cd10
leaq 0x5(%r14), %rdx
leaq 0x2bdb67(%rip), %rdi    # 0x37d60f
leaq 0x29ef0a(%rip), %rsi    # 0x35e9b9
xorl %ecx, %ecx
callq 0x10f451
movq %rax, 0x10(%rsp)
movq %rbx, %rdi
movq %rax, %rsi
callq 0x10cd10
leaq 0x1(%r14), %rdx
leaq 0x2a2dd8(%rip), %rdi    # 0x3628a9
leaq 0x29ef18(%rip), %rsi    # 0x35e9f0
xorl %ecx, %ecx
callq 0x10f451
movq %rbx, %rdi
movq %rax, %rsi
callq 0x10cd10
leaq 0x8(%r14), %rdx
leaq 0x2d0a5d(%rip), %rdi    # 0x390552
leaq 0x29ef10(%rip), %rsi    # 0x35ea0c
xorl %ecx, %ecx
callq 0x10f451
movq %rbx, %rdi
movq %rax, %rsi
callq 0x10cd10
leaq 0x9(%r14), %rdx
leaq 0x29eff8(%rip), %rdi    # 0x35eb11
leaq 0x29ef0f(%rip), %rsi    # 0x35ea2f
xorl %ecx, %ecx
callq 0x10f451
movq %rax, %r12
movq %rbx, %rdi
movq %rax, %rsi
callq 0x10cd10
addq $0x4, %r14
movq %r14, %rdi
callq 0x10f473
movq %rbx, %rdi
movq %rax, %rsi
callq 0x10cd10
movq %rbp, %rdi
movq 0x8(%rsp), %r14
movq %r14, %rsi
callq 0x10fd9f
movq %rbp, %rdi
movq %r15, %rsi
callq 0x10fd9f
movq %r14, %rdi
movq %r15, %rsi
callq 0x10fd9f
movq %r15, %rdi
movq 0x10(%rsp), %rsi
callq 0x10fd9f
movq 0x20(%rsp), %rbp
movq %rbp, %rdi
movq 0x18(%rsp), %r14
movq %r14, %rsi
callq 0x10fd9f
movq %rbp, %rdi
movq %r13, %rsi
callq 0x10fd9f
movq %r14, %rdi
movq %r13, %rsi
callq 0x10fd9f
movq %rbp, %rdi
movq %r15, %rsi
callq 0x10fbff
movq 0x28(%rsp), %rdi
movq 0x30(%rsp), %rsi
callq 0x10fbff
movq %r14, %rdi
movq %r15, %rsi
callq 0x10fbff
movq %r13, %rdi
movq %r15, %rsi
callq 0x10fbff
movq %r12, %rdi
movq %r15, %rsi
movq 0x8(%rsp), %rdx
callq 0x10fc6f
movq %rbx, %rax
addq $0x38, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
callq 0x1e692