// File: /workspace/github_c_makefile_star2_O3/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 0xbdc6c
movq %rdi, %r14
leaq 0x28cd23(%rip), %rdi    # 0x34a6a1
leaq 0x297efd(%rip), %rsi    # 0x355882
callq 0x107bfe
movq %rax, %rbx
leaq 0x288938(%rip), %rsi    # 0x3462cc
movq %rax, %rdi
callq 0x107e5c
movq 0x10(%r14), %rdx
leaq 0x29bb97(%rip), %rdi    # 0x35953e
leaq 0x297f07(%rip), %rsi    # 0x3558b5
xorl %ecx, %ecx
callq 0x10a770
movq %rax, %rbp
movq %rbx, %rdi
movq %rax, %rsi
callq 0x107cc0
movq 0x28(%r14), %rsi
movq %rbx, %rdi
callq 0xfc654
leaq 0x2(%r14), %rdx
leaq 0x2f8ae4(%rip), %rdi    # 0x3b64be
leaq 0x297ee8(%rip), %rsi    # 0x3558c9
xorl %ecx, %ecx
callq 0x10a235
movq %rax, 0x30(%rsp)
movq %rbx, %rdi
movq %rax, %rsi
callq 0x107cc0
leaq 0x3(%r14), %rdx
leaq 0x2fa256(%rip), %rdi    # 0x3b7c59
leaq 0x297ed0(%rip), %rsi    # 0x3558da
xorl %ecx, %ecx
callq 0x10a235
movq %rax, 0x28(%rsp)
movq %rbx, %rdi
movq %rax, %rsi
callq 0x107cc0
movq 0x18(%r14), %rdx
leaq 0x28be80(%rip), %rdi    # 0x3498ac
leaq 0x297ed0(%rip), %rsi    # 0x355903
xorl %ecx, %ecx
callq 0x10a770
movq %rax, 0x8(%rsp)
movq %rbx, %rdi
movq %rax, %rsi
callq 0x107cc0
movq 0x20(%r14), %rdx
leaq 0x2bc0bb(%rip), %rdi    # 0x379b10
leaq 0x297eb8(%rip), %rsi    # 0x355914
xorl %ecx, %ecx
callq 0x10a770
movq %rax, %r15
movq %rbx, %rdi
movq %rax, %rsi
callq 0x107cc0
leaq 0x6(%r14), %rdx
leaq 0x292666(%rip), %rdi    # 0x3500e2
leaq 0x297e9d(%rip), %rsi    # 0x355920
xorl %ecx, %ecx
callq 0x10a235
movq %rax, 0x20(%rsp)
movq %rbx, %rdi
movq %rax, %rsi
callq 0x107cc0
leaq 0x7(%r14), %rdx
leaq 0x29210c(%rip), %rdi    # 0x34fbb1
leaq 0x297e85(%rip), %rsi    # 0x355931
xorl %ecx, %ecx
callq 0x10a235
movq %rax, 0x18(%rsp)
movq %rbx, %rdi
movq %rax, %rsi
callq 0x107cc0
movq 0x30(%r14), %rdx
leaq 0x2a7ce7(%rip), %rdi    # 0x3657b5
leaq 0x297e71(%rip), %rsi    # 0x355946
xorl %ecx, %ecx
callq 0x10a770
movq %rax, %r13
movq %rbx, %rdi
movq %rax, %rsi
callq 0x107cc0
leaq 0x297e6d(%rip), %rdi    # 0x35595e
leaq 0x297e6d(%rip), %rsi    # 0x355965
movq %r14, %rdx
xorl %ecx, %ecx
callq 0x10a235
movq %rbx, %rdi
movq %rax, %rsi
callq 0x107cc0
leaq 0x5(%r14), %rdx
leaq 0x2b6877(%rip), %rdi    # 0x37438f
leaq 0x297e6e(%rip), %rsi    # 0x35598d
xorl %ecx, %ecx
callq 0x10a235
movq %rax, 0x10(%rsp)
movq %rbx, %rdi
movq %rax, %rsi
callq 0x107cc0
leaq 0x1(%r14), %rdx
leaq 0x29bd18(%rip), %rdi    # 0x359859
leaq 0x297e7c(%rip), %rsi    # 0x3559c4
xorl %ecx, %ecx
callq 0x10a235
movq %rbx, %rdi
movq %rax, %rsi
callq 0x107cc0
leaq 0x8(%r14), %rdx
leaq 0x2c9614(%rip), %rdi    # 0x387179
leaq 0x297e74(%rip), %rsi    # 0x3559e0
xorl %ecx, %ecx
callq 0x10a235
movq %rbx, %rdi
movq %rax, %rsi
callq 0x107cc0
leaq 0x9(%r14), %rdx
leaq 0x297f5c(%rip), %rdi    # 0x355ae5
leaq 0x297e73(%rip), %rsi    # 0x355a03
xorl %ecx, %ecx
callq 0x10a235
movq %rax, %r12
movq %rbx, %rdi
movq %rax, %rsi
callq 0x107cc0
addq $0x4, %r14
movq %r14, %rdi
callq 0x10a257
movq %rbx, %rdi
movq %rax, %rsi
callq 0x107cc0
movq %rbp, %rdi
movq 0x8(%rsp), %r14
movq %r14, %rsi
callq 0x10ab96
movq %rbp, %rdi
movq %r15, %rsi
callq 0x10ab96
movq %r14, %rdi
movq %r15, %rsi
callq 0x10ab96
movq %r15, %rdi
movq 0x10(%rsp), %rsi
callq 0x10ab96
movq 0x20(%rsp), %rbp
movq %rbp, %rdi
movq 0x18(%rsp), %r14
movq %r14, %rsi
callq 0x10ab96
movq %rbp, %rdi
movq %r13, %rsi
callq 0x10ab96
movq %r14, %rdi
movq %r13, %rsi
callq 0x10ab96
movq %rbp, %rdi
movq %r15, %rsi
callq 0x10a9e4
movq 0x28(%rsp), %rdi
movq 0x30(%rsp), %rsi
callq 0x10a9e4
movq %r14, %rdi
movq %r15, %rsi
callq 0x10a9e4
movq %r13, %rdi
movq %r15, %rsi
callq 0x10a9e4
movq %r12, %rdi
movq %r15, %rsi
movq 0x8(%rsp), %rdx
callq 0x10aa54
movq %rbx, %rax
addq $0x38, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
callq 0x1e341