// File: /workspace/github_c_makefile_star2_O1/genometools[P]genometools/src/ltr/gt_ltrharvest.c
// Function: gt_ltrharvest_option_parser_new
static GtOptionParser* gt_ltrharvest_option_parser_new(void *tool_arguments)
{
  LTRharvestArguments *arguments = tool_arguments;
  GtOptionParser *op;
  GtOption *optionindex,
           *optionltrsearchseqrange,
           *optionseed,
           *optionminlenltr,
           *optionmaxlenltr,
           *optionmindistltr,
           *optionmaxdistltr,
           *optionmintsd,
           *optionmaxtsd,
           *optionsimilar,
           *optionmotif,
           *optionmotifmis,
           *optionvic,
           *optionoverlaps,
           *optionxdrop,
           *optionmat,
           *optionmis,
           *optionins,
           *optiondel,
           *optionv,
           *optiontabout,
           *optionmd5,
           *optionseqids,
           *optionoffset,
           *optionlongoutput,
           *optionout,
           *optionoutinner,
           *optiongff3,
           *optionscan;
  GtRange default_ltrsearchseqrange = {0,0};
  static const char *overlaps[] = {
    "best", /* the default */
    "no",
    "all",
    NULL
  };

  gt_assert(arguments);

  op = gt_option_parser_new("[option ...] -index <indexname>",
                            "Predict LTR retrotransposons.");

  /* -index */
  optionindex = gt_option_new_string("index",
                             "specify the name of the enhanced suffix "
                             "array index (mandatory)",
                             arguments->str_indexname, NULL);
  gt_option_is_mandatory(optionindex);
  gt_option_parser_add_option(op, optionindex);

  /* -range */
  optionltrsearchseqrange
    = gt_option_new_range("range",
                          "specify range in the input sequence(s) in which LTR "
                          "pairs are searched",
                          &arguments->searchrange,
                          &default_ltrsearchseqrange);
  gt_option_parser_add_option(op, optionltrsearchseqrange);

  /* -seed */
  optionseed = gt_option_new_uword_min("seed",
                               "specify minimum seed length for"
                               " exact repeats",
                               &arguments->minseedlength,
                               30UL,
                               1UL);
  gt_option_parser_add_option(op, optionseed);

  /* -minlenltr */
  optionminlenltr = gt_option_new_uword_min_max("minlenltr",
                               "specify minimum length for each LTR",
                               &arguments->minltrlength,
                               100UL,
                               1UL,
                               GT_UNDEF_UWORD);
  gt_option_parser_add_option(op, optionminlenltr);

  /* -maxlenltr */
  optionmaxlenltr = gt_option_new_uword_min_max("maxlenltr",
                               "specify maximum length for each LTR",
                               &arguments->maxltrlength,
                               1000UL,
                               1UL,
                               GT_UNDEF_UWORD);
  gt_option_parser_add_option(op, optionmaxlenltr);

  /* -mindistltr */
  optionmindistltr = gt_option_new_uword_min_max("mindistltr",
                               "specify minimum distance of "
                               "LTR startpositions",
                               &arguments->mindistance,
                               1000UL,
                               1UL,
                               GT_UNDEF_UWORD);
  gt_option_parser_add_option(op, optionmindistltr);

  /* -maxdistltr */
  optionmaxdistltr = gt_option_new_uword_min_max("maxdistltr",
                               "specify maximum distance of "
                               "LTR startpositions",
                               &arguments->maxdistance,
                               15000UL,
                               1UL,
                               GT_UNDEF_UWORD);
  gt_option_parser_add_option(op, optionmaxdistltr);

  /* -similar */
  optionsimilar = gt_option_new_double_min_max("similar",
                               "specify similaritythreshold in "
                               "range [1..100%]",
                               &arguments->similaritythreshold,
                               (double) 85.0,
                               (double) 0.0,
                               100.0);
  gt_option_parser_add_option(op, optionsimilar);

  /* -mintsd */
  optionmintsd = gt_option_new_uint_min_max("mintsd",
                              "specify minimum length for each TSD",
                               &arguments->minlengthTSD,
                               4U,
                               0,
                               GT_UNDEF_UINT);
  gt_option_parser_add_option(op, optionmintsd);

  /* -maxtsd */
  optionmaxtsd = gt_option_new_uint_min_max("maxtsd",
                              "specify maximum length for each TSD",
                               &arguments->maxlengthTSD,
                               20U,
                               0,
                               GT_UNDEF_UINT);
  gt_option_parser_add_option(op, optionmaxtsd);

  optionmotif = gt_option_new_string("motif",
                             "specify 2 nucleotides startmotif + "
                             "2 nucleotides endmotif: ****",
                             arguments->str_motif, NULL);
  gt_option_parser_add_option(op, optionmotif);
  arguments->optionmotif = gt_option_ref(optionmotif);

  /* -motifmis */
  optionmotifmis = gt_option_new_uint_min_max("motifmis",
                             "specify maximum number of "
                             "mismatches in motif [0,3]",
                             &arguments->allowedmismatches,
                             4U,
                             0,
                             3U);
  gt_option_parser_add_option(op, optionmotifmis);
  arguments->optionmotifmis = gt_option_ref(optionmotifmis);

  /* -vic */
  optionvic = gt_option_new_uint_min_max("vic",
                        "specify the number of nucleotides (to the left and "
                        "to the right) that will be searched "
                        "for TSDs and/or motifs around 5' and 3' boundary "
                        "of predicted LTR retrotransposons",
                        &arguments->vicinity,
                        60U,
                        1U,
                        500U);
  gt_option_parser_add_option(op, optionvic);

  /* -overlaps */
  optionoverlaps = gt_option_new_choice("overlaps",
               "specify no|best|all",
               arguments->str_overlaps,
               overlaps[0],
               overlaps);
  gt_option_parser_add_option(op, optionoverlaps);
  arguments->optionoverlaps = gt_option_ref(optionoverlaps);

  /* -xdrop */
  optionxdrop = gt_option_new_int_min("xdrop",
                        "specify xdropbelowscore for extension-alignment",
                        &arguments->xdropbelowscore,
                        5,
                        0);
  gt_option_parser_add_option(op, optionxdrop);

  /* -mat */
  optionmat = gt_option_new_int_min("mat",
                        "specify matchscore for extension-alignment",
                        &arguments->arbitscores.mat,
                        2,
                        1);
  gt_option_parser_add_option(op, optionmat);

  /* -mis */
  optionmis = gt_option_new_int_max("mis",
                        "specify mismatchscore for extension-alignment",
                        &arguments->arbitscores.mis,
                        -2,
                        -1);
  gt_option_parser_add_option(op, optionmis);

  /* -ins */
  optionins = gt_option_new_int_max("ins",
                        "specify insertionscore for extension-alignment",
                        &arguments->arbitscores.ins,
                        -3,
                        -1);
  gt_option_parser_add_option(op, optionins);

  /* -del */
  optiondel = gt_option_new_int_max("del",
                        "specify deletionscore for extension-alignment",
                        &arguments->arbitscores.del,
                        -3,
                        -1);
  gt_option_parser_add_option(op, optiondel);

  /* -v */
  optionv = gt_option_new_bool("v",
                           "verbose mode",
                           &arguments->verbosemode,
                           false);
  gt_option_parser_add_option(op, optionv);

  /* -tabout */
  optiontabout = gt_option_new_bool("tabout",
                                    "show 'old' tabular output instead "
                                    "of GFF3 on stdout",
                                    &arguments->tabout,
                                    true);
  gt_option_parser_add_option(op, optiontabout);

  /* -seqids */
  optionseqids = gt_option_new_bool("seqids",
                                    "use sequence descriptions instead of "
                                    "sequence numbers in GFF3 output",
                                    &arguments->seqids,
                                    false);
  gt_option_parser_add_option(op, optionseqids);

  /* -md5 */
  optionmd5 = gt_option_new_bool("md5",
                                 "add MD5 hashes to seqids in GFF3 output",
                                 &arguments->md5,
                                 false);
  gt_option_parser_add_option(op, optionmd5);

  /* -longoutput */
  optionlongoutput = gt_option_new_bool("longoutput",
                           "additional motif/TSD output",
                           &arguments->longoutput,
                           false);
  gt_option_parser_add_option(op, optionlongoutput);

  /* -out */
  arguments->fastaoutput = false;
  optionout = gt_option_new_string("out",
                             "specify FASTA outputfilename",
                             arguments->str_fastaoutputfilename, NULL);
  gt_option_parser_add_option(op, optionout);
  arguments->optionout = gt_option_ref(optionout);

  /* -outinner */
  arguments->fastaoutputinnerregion = false;
  optionoutinner = gt_option_new_string("outinner",
                             "specify FASTA outputfilename for inner regions",
                             arguments->str_fastaoutputfilenameinnerregion,
                              NULL);
  gt_option_parser_add_option(op, optionoutinner);
  arguments->optionoutinner = gt_option_ref(optionoutinner);

  /* -gff3 */
  arguments->gff3output = false;
  optiongff3 = gt_option_new_string("gff3",
                                    "specify GFF3 outputfilename",
                                    arguments->str_gff3filename, NULL);
  gt_option_parser_add_option(op, optiongff3);
  arguments->optiongff3 = gt_option_ref(optiongff3);

  /* -offset */
  optionoffset = gt_option_new_uword("offset",
                                     "offset added to GFF3 coordinates",
                                     &arguments->offset,
                                     0UL);
  gt_option_parser_add_option(op, optionoffset);
  gt_option_is_extended_option(optionoffset);

  /* -scan */
  optionscan = gt_option_new_bool("scan",
                                  "scan the index sequentially instead of "
                                  "mapping it into memory entirely",
                                  &arguments->scan,
                                  true);
  gt_option_parser_add_option(op, optionscan);
  gt_option_is_extended_option(optionscan);

  /* implications */
  gt_option_imply(optionmaxtsd, optionmintsd);
  gt_option_imply(optionmotifmis, optionmotif);

  gt_option_imply_either_2(optionlongoutput, optionmintsd, optionmotif);

  gt_option_parser_refer_to_manual(op);

  return op;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x38, %rsp
xorps %xmm0, %xmm0
movaps %xmm0, 0x20(%rsp)
testq %rdi, %rdi
je 0x20f7e7
movq %rdi, %r14
leaq 0x1b90f8(%rip), %rdi    # 0x3c82bb
leaq 0x1b9111(%rip), %rsi    # 0x3c82db
callq 0x10cc4e
movq %rax, %rbx
movq 0x10(%r14), %rdx
leaq 0x186ef1(%rip), %rdi    # 0x3960ce
leaq 0x157518(%rip), %rsi    # 0x3666fc
xorl %ecx, %ecx
callq 0x10f987
movq %rax, %r15
movq %rax, %rdi
callq 0x10fa96
movq %rbx, %rdi
movq %r15, %rsi
callq 0x10cd10
leaq 0x40(%r14), %rdx
leaq 0x1775b0(%rip), %rdi    # 0x3867bc
leaq 0x1b90e6(%rip), %rsi    # 0x3c82f9
leaq 0x20(%rsp), %rcx
callq 0x10f913
movq %rbx, %rdi
movq %rax, %rsi
callq 0x10cd10
leaq 0x50(%r14), %rdx
leaq 0x14f43d(%rip), %rdi    # 0x35e670
leaq 0x157502(%rip), %rsi    # 0x36673c
movl $0x1e, %ecx
movl $0x1, %r8d
callq 0x10f7ed
movq %rbx, %rdi
movq %rax, %rsi
callq 0x10cd10
leaq 0x58(%r14), %rdx
leaq 0x1b90e0(%rip), %rdi    # 0x3c8340
leaq 0x1b90e3(%rip), %rsi    # 0x3c834a
movl $0x64, %ecx
movl $0x1, %r8d
movq $-0x1, %r9
callq 0x10f81b
movq %rbx, %rdi
movq %rax, %rsi
callq 0x10cd10
leaq 0x60(%r14), %rdx
leaq 0x1b90da(%rip), %rdi    # 0x3c836e
leaq 0x1b90dd(%rip), %rsi    # 0x3c8378
movl $0x3e8, %ecx            # imm = 0x3E8
movl $0x1, %r8d
movq $-0x1, %r9
callq 0x10f81b
movq %rbx, %rdi
movq %rax, %rsi
callq 0x10cd10
leaq 0x68(%r14), %rdx
leaq 0x1b90d4(%rip), %rdi    # 0x3c839c
leaq 0x1b90d8(%rip), %rsi    # 0x3c83a7
movl $0x3e8, %ecx            # imm = 0x3E8
movl $0x1, %r8d
movq $-0x1, %r9
callq 0x10f81b
movq %rbx, %rdi
movq %rax, %rsi
callq 0x10cd10
leaq 0x70(%r14), %rdx
leaq 0x1b90da(%rip), %rdi    # 0x3c83d6
leaq 0x1b90de(%rip), %rsi    # 0x3c83e1
movl $0x3a98, %ecx           # imm = 0x3A98
movl $0x1, %r8d
movq $-0x1, %r9
callq 0x10f81b
movq %rbx, %rdi
movq %rax, %rsi
callq 0x10cd10
leaq 0x88(%r14), %rdx
leaq 0x178296(%rip), %rdi    # 0x3875c9
leaq 0x1b90d6(%rip), %rsi    # 0x3c8410
movsd 0x157306(%rip), %xmm0   # 0x366648
movsd 0x1434a6(%rip), %xmm2   # 0x3527f0
xorps %xmm1, %xmm1
callq 0x10f5d1
movq %rbx, %rdi
movq %rax, %rsi
callq 0x10cd10
leaq 0xa4(%r14), %rdx
leaq 0x1575ec(%rip), %rdi    # 0x366957
leaq 0x1575ec(%rip), %rsi    # 0x36695e
movl $0x4, %ecx
xorl %r8d, %r8d
movl $0xffffffff, %r9d       # imm = 0xFFFFFFFF
callq 0x10f78d
movq %rax, 0x18(%rsp)
movq %rbx, %rdi
movq %rax, %rsi
callq 0x10cd10
leaq 0xa8(%r14), %rdx
leaq 0x1575df(%rip), %rdi    # 0x366982
leaq 0x1575df(%rip), %rsi    # 0x366989
movl $0x14, %ecx
xorl %r8d, %r8d
movl $0xffffffff, %r9d       # imm = 0xFFFFFFFF
callq 0x10f78d
movq %rax, 0x10(%rsp)
movq %rbx, %rdi
movq %rax, %rsi
callq 0x10cd10
movq 0x18(%r14), %rdx
leaq 0x1bb78e(%rip), %rdi    # 0x3cab66
leaq 0x1b9060(%rip), %rsi    # 0x3c843f
xorl %ecx, %ecx
callq 0x10f987
movq %rax, %r13
movq %rbx, %rdi
movq %rax, %rsi
callq 0x10cd10
movq %r13, %rdi
callq 0x10cc3c
movq %rax, 0xc0(%r14)
leaq 0xac(%r14), %rdx
leaq 0x1b906e(%rip), %rdi    # 0x3c847f
leaq 0x1b9070(%rip), %rsi    # 0x3c8488
movl $0x4, %ecx
xorl %r8d, %r8d
movl $0x3, %r9d
callq 0x10f78d
movq %rax, %r15
movq %rax, 0x8(%rsp)
movq %rbx, %rdi
movq %rax, %rsi
callq 0x10cd10
movq %r15, %rdi
callq 0x10cc3c
movq %rax, 0xc8(%r14)
leaq 0xb0(%r14), %rdx
leaq 0x157552(%rip), %rdi    # 0x3669ad
leaq 0x1b905a(%rip), %rsi    # 0x3c84bc
movl $0x3c, %ecx
movl $0x1, %r8d
movl $0x1f4, %r9d            # imm = 0x1F4
callq 0x10f78d
movq %rbx, %rdi
movq %rax, %rsi
callq 0x10cd10
movq 0x20(%r14), %rdx
movq 0x2b6812(%rip), %rcx    # 0x4c5ca0
leaq 0x2b680b(%rip), %r8     # 0x4c5ca0
leaq 0x190b82(%rip), %rdi    # 0x3a001e
leaq 0x1b90c3(%rip), %rsi    # 0x3c8566
callq 0x10fa04
movq %rax, %r12
movq %rbx, %rdi
movq %rax, %rsi
callq 0x10cd10
movq %r12, %rdi
callq 0x10cc3c
movq %rax, 0xd0(%r14)
leaq 0x90(%r14), %rdx
leaq 0x173b84(%rip), %rdi    # 0x383057
leaq 0x1573fa(%rip), %rsi    # 0x3668d4
movl $0x5, %ecx
xorl %r8d, %r8d
callq 0x10f68b
movq %rbx, %rdi
movq %rax, %rsi
callq 0x10cd10
leaq 0x94(%r14), %rdx
leaq 0x155757(%rip), %rdi    # 0x364c57
leaq 0x157317(%rip), %rsi    # 0x36681e
movl $0x2, %ecx
movl $0x1, %r8d
callq 0x10f68b
movq %rbx, %rdi
movq %rax, %rsi
callq 0x10cd10
leaq 0x98(%r14), %rdx
leaq 0x1b8f54(%rip), %rdi    # 0x3c8484
leaq 0x157312(%rip), %rsi    # 0x366849
movl $0xfffffffe, %ecx       # imm = 0xFFFFFFFE
movl $0xffffffff, %r8d       # imm = 0xFFFFFFFF
callq 0x10f6b4
movq %rbx, %rdi
movq %rax, %rsi
callq 0x10cd10
leaq 0x9c(%r14), %rdx
leaq 0x198b16(%rip), %rdi    # 0x3a8076
leaq 0x157310(%rip), %rsi    # 0x366877
movl $0xfffffffd, %ecx       # imm = 0xFFFFFFFD
movl $0xffffffff, %r8d       # imm = 0xFFFFFFFF
callq 0x10f6b4
movq %rbx, %rdi
movq %rax, %rsi
callq 0x10cd10
leaq 0xa0(%r14), %rdx
leaq 0x1b7204(%rip), %rdi    # 0x3c6794
leaq 0x15730f(%rip), %rsi    # 0x3668a6
movl $0xfffffffd, %ecx       # imm = 0xFFFFFFFD
movl $0xffffffff, %r8d       # imm = 0xFFFFFFFF
callq 0x10f6b4
movq %rbx, %rdi
movq %rax, %rsi
callq 0x10cd10
leaq 0xbb(%r14), %rdx
leaq 0x18969a(%rip), %rdi    # 0x398c5a
leaq 0x1b8fb3(%rip), %rsi    # 0x3c857a
xorl %ecx, %ecx
callq 0x10f451
movq %rbx, %rdi
movq %rax, %rsi
callq 0x10cd10
leaq 0xbc(%r14), %rdx
leaq 0x1b8fa0(%rip), %rdi    # 0x3c8587
leaq 0x1b8fa0(%rip), %rsi    # 0x3c858e
movl $0x1, %ecx
callq 0x10f451
movq %rbx, %rdi
movq %rax, %rsi
callq 0x10cd10
leaq 0xbe(%r14), %rdx
leaq 0x18cd52(%rip), %rdi    # 0x39c363
leaq 0x157626(%rip), %rsi    # 0x366c3e
xorl %ecx, %ecx
callq 0x10f451
movq %rbx, %rdi
movq %rax, %rsi
callq 0x10cd10
leaq 0xbd(%r14), %rdx
leaq 0x16606c(%rip), %rdi    # 0x3756a4
leaq 0x157644(%rip), %rsi    # 0x366c83
xorl %ecx, %ecx
callq 0x10f451
movq %rbx, %rdi
movq %rax, %rsi
callq 0x10cd10
leaq 0xb9(%r14), %rdx
leaq 0x1bb613(%rip), %rdi    # 0x3cac72
leaq 0x1b8f5c(%rip), %rsi    # 0x3c85c2
xorl %ecx, %ecx
callq 0x10f451
movq %rax, %r12
movq %rbx, %rdi
movq %rax, %rsi
callq 0x10cd10
xorl %ebp, %ebp
movb %bpl, 0xb6(%r14)
movq 0x28(%r14), %rdx
leaq 0x1bb72f(%rip), %rdi    # 0x3cadbe
leaq 0x1b8f48(%rip), %rsi    # 0x3c85de
xorl %ecx, %ecx
callq 0x10f987
movq %rax, %r15
movq %rbx, %rdi
movq %rax, %rsi
callq 0x10cd10
movq %r15, %rdi
callq 0x10cc3c
movq %rax, 0xd8(%r14)
movb %bpl, 0xb7(%r14)
xorl %ebp, %ebp
movq 0x30(%r14), %rdx
leaq 0x1b8f2d(%rip), %rdi    # 0x3c85fb
leaq 0x1b8f2f(%rip), %rsi    # 0x3c8604
xorl %ecx, %ecx
callq 0x10f987
movq %rax, %r15
movq %rbx, %rdi
movq %rax, %rsi
callq 0x10cd10
movq %r15, %rdi
callq 0x10cc3c
movq %rax, 0xe0(%r14)
movb %bpl, 0xb8(%r14)
movq 0x38(%r14), %rdx
leaq 0x17a106(%rip), %rdi    # 0x389811
leaq 0x1b8f21(%rip), %rsi    # 0x3c8633
xorl %ecx, %ecx
callq 0x10f987
movq %rax, %r15
movq %rbx, %rdi
movq %rax, %rsi
callq 0x10cd10
movq %r15, %rdi
callq 0x10cc3c
movq %rax, 0xe8(%r14)
leaq 0x80(%r14), %rdx
leaq 0x161cda(%rip), %rdi    # 0x37141e
leaq 0x1b8f04(%rip), %rsi    # 0x3c864f
xorl %ecx, %ecx
callq 0x10f4c7
movq %rax, %r15
movq %rbx, %rdi
movq %rax, %rsi
callq 0x10cd10
movq %r15, %rdi
callq 0x10fbdf
addq $0xba, %r14
leaq 0x146d70(%rip), %rdi    # 0x3564e6
leaq 0x1b8ef3(%rip), %rsi    # 0x3c8670
movq %r14, %rdx
movl $0x1, %ecx
callq 0x10f451
movq %rax, %r14
movq %rbx, %rdi
movq %rax, %rsi
callq 0x10cd10
movq %r14, %rdi
callq 0x10fbdf
movq 0x10(%rsp), %rdi
movq 0x18(%rsp), %r14
movq %r14, %rsi
callq 0x10fbff
movq 0x8(%rsp), %rdi
movq %r13, %rsi
callq 0x10fbff
movq %r12, %rdi
movq %r14, %rsi
movq %r13, %rdx
callq 0x10fc6f
movq %rbx, %rdi
callq 0x10cd7d
movq %rbx, %rax
addq $0x38, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
callq 0x81f4a