// File: /workspace/github_c_makefile_star2_O0/c-zhou[P]oatk/path_finder.c
// Function: main
int main(int argc, char *argv[])
{
    const char *opt_str = "c:e:f:g:hl:m:N:o:p:q:s:v:V";
    ketopt_t opt = KETOPT_INIT;
    int c, out_s, out_c, max_copy, max_path, ret = 0;
    FILE *fp_help;
    char *out_pref, *mito_annot, *pltd_annot, *ec_tag, *kc_tag, *sc_tag;
    int no_trn, no_rrn, min_len, ext_p, ext_m, bubble_size, tip_size, do_graph_clean;
    double max_eval, min_score, min_cf, seq_cf, weak_cross;

    sys_init();

    out_s = -1;
    out_c = 0;
    out_pref = "oatk.asm";
    max_copy = 10;
    max_path = 1000000;
    fp_help = stderr;
    mito_annot = 0;
    pltd_annot = 0;
    ec_tag = 0;
    kc_tag = 0;
    sc_tag = 0;
    no_trn = 1;
    no_rrn = 1;
    do_graph_clean = 1;
    bubble_size = 100000;
    tip_size = 10000;
    weak_cross = 0.3;
    max_eval = 1e-6;
    min_len = 10000;
    min_score = 300;
    ext_p = 3;
    ext_m = 1;
    seq_cf = .90;
    min_cf = .20;

    while ((c = ketopt(&opt, argc, argv, 1, opt_str, long_options)) >=0 ) {
        if (c == 'm') mito_annot = opt.arg;
        else if (c == 'p') pltd_annot = opt.arg;
        else if (c == 'f') seq_cf = atof(opt.arg);
        else if (c == 's') min_score = atof(opt.arg);
        else if (c == 'c') max_copy = atoi(opt.arg);
        else if (c == 'N') max_path = atoi(opt.arg);
        else if (c == 'g') {
            char *p;
            ext_p = strtol(opt.arg, &p, 10);
            if (*p == ',') ext_m = strtol(p + 1, &p, 10);
        }
        else if (c == 'q') min_cf = atof(opt.arg);
        else if (c == 'e') max_eval = atof(opt.arg);
        else if (c == 'l') min_len = atoi(opt.arg);
        else if (c == 'o') out_pref = opt.arg;
        else if (c == 301) out_s = 0, ++out_c;
        else if (c == 302) out_s = 1, ++out_c;
        else if (c == 303) out_s = 2, ++out_c;
        else if (c == 304) ec_tag = opt.arg;
        else if (c == 305) kc_tag = opt.arg;
        else if (c == 306) sc_tag = opt.arg;
        else if (c == 307) no_trn = 0;
        else if (c == 308) no_rrn = 1;
        else if (c == 309) bubble_size = atoi(opt.arg);
        else if (c == 310) tip_size = atoi(opt.arg);
        else if (c == 311) weak_cross = atof(opt.arg);
        else if (c == 312) do_graph_clean = 0;
        else if (c == 'v') VERBOSE = atoi(opt.arg);
        else if (c == 'h') fp_help = stdout;
        else if (c == 'V') {
            puts(PATHFINDER_VERSION);
            return 0;
        }
        else if (c == '?') {
            fprintf(stderr, "[E::%s] unknown option: \"%s\"\n", __func__, argv[opt.i - 1]);
            return 1;
        }
        else if (c == ':') {
            fprintf(stderr, "[E::%s] missing option: \"%s\"\n", __func__, argv[opt.i - 1]);
            return 1;
        }
    }

    if (argc == opt.ind || fp_help == stdout) {
        fprintf(fp_help, "\n");
        fprintf(fp_help, "Usage: pathfinder [options] <file>[.gfa[.gz]]\n");
        fprintf(fp_help, "Options:\n");
        fprintf(fp_help, "  Input/Output:\n");
        fprintf(fp_help, "    -m FILE              mitochondria core gene annotation file [NULL]\n");
        fprintf(fp_help, "    -p FILE              plastid core gene annotation file [NULL]\n");
        fprintf(fp_help, "    -o FILE              prefix of output files [%s]\n", out_pref);
        fprintf(fp_help, "    -f FLOAT             prefer circular path to longest if >= FLOAT sequence covered [%.2f]\n", seq_cf);
        //fprintf(fp_help, "    --longest            output only the longest path [default]\n");
        //fprintf(fp_help, "    --circular           output only the longest circular path\n");
        //fprintf(fp_help, "    --all                output all best paths\n");
        fprintf(fp_help, "    --edge-c-tag STR     edge coverage tag in the GFA file [EC:i] \n");
        fprintf(fp_help, "    --kmer-c-tag STR     kmer coverage tag in the GFA file [KC:i] \n");
        fprintf(fp_help, "    --seq-c-tag  STR     sequence coverage tag in the GFA file [SC:f]\n");
        fprintf(fp_help, "    -v INT               verbose level [%d]\n", VERBOSE);
        fprintf(fp_help, "    --version            show version number\n");
        fprintf(fp_help, "  Classification:\n");
        fprintf(fp_help, "    -s FLOAT             minimum annotation score of a core gene [%.1f]\n", min_score);
        fprintf(fp_help, "    -e FLOAT             maximum E-value of a core gene [%.3e]\n", max_eval);
        fprintf(fp_help, "    -g INT[,INT]         minimum number of core gene gain; the second INT for mitochondria [%d,%d]\n", ext_p, ext_m);
        fprintf(fp_help, "    -l INT               minimum length of a singleton sequence to keep [%d]\n", min_len);
        fprintf(fp_help, "    --include-trn        include tRNA genes for sequence classification\n");
        fprintf(fp_help, "    --include-rrn        include rRNA genes for sequence classification\n");
        fprintf(fp_help, "  Path-finding:\n");
        fprintf(fp_help, "    -q FLOAT             minimum coverage of a sequence compared to the subgraph average [%.2f]\n", min_cf);
        fprintf(fp_help, "    -c INT               maximum copy number to consider [%d]\n", max_copy);
        fprintf(fp_help, "    -N INT               maximum number of graph paths to explore [%d]\n", max_path);
        fprintf(fp_help, "    --max-bubble INT     maximum bubble size for assembly graph clean [%d]\n", bubble_size);
        fprintf(fp_help, "    --max-tip    INT     maximum tip size for assembly graph clean [%d]\n", tip_size);
        fprintf(fp_help, "    --weak-cross FLOAT   maximum relative edge coverage for weak crosslink clean [%.2f]\n", weak_cross);
        fprintf(fp_help, "    --no-graph-clean     do not do assembly graph clean\n");
        fprintf(fp_help, "\n");
        fprintf(fp_help, "Example: ./pathfinder -m asm_annot.mito.txt -p asm_annot.pltd.txt -o oatk.asm asm.gfa\n\n");
        return fp_help == stdout? 0 : 1;
    }

    if (argc - opt.ind < 1) {
        fprintf(stderr, "[E::%s] missing input: please specify the GFA file\n", __func__);
        return 1;
    }

    if (out_c > 1) {
        fprintf(stderr, "[E::%s] options --longest, --circular and --all are mutually exclusive\n", __func__);
        return 1;
    }
    
    if (mito_annot == 0 && pltd_annot == 0) {
        fprintf(stderr, "[E::%s] provide at least one HMM profile annotation file (-m and/or -p)\n", __func__);
        return 1;
    }

    if (ec_tag != 0) {
        if(is_valid_gfa_tag(ec_tag)) {
            memcpy(TAG_ARC_COV, ec_tag, 4);
        } else {
            fprintf(stderr, "[E::%s] invalid GFA tag (Regexp: [A-Za-z][A-Za-z0-9]:[A|i|f|Z|B]): %s\n", __func__, ec_tag);
            return 1;
        }
    }

    if (kc_tag != 0) {
        if(is_valid_gfa_tag(kc_tag)) {
            memcpy(TAG_SBP_COV, kc_tag, 4);
        } else {
            fprintf(stderr, "[E::%s] invalid GFA tag (Regexp: [A-Za-z][A-Za-z0-9]:[A|i|f|Z|B]): %s\n", __func__, kc_tag);
            return 1;
        }
    }

    if (sc_tag != 0) {
        if(is_valid_gfa_tag(sc_tag)) {
            memcpy(TAG_SEQ_COV, sc_tag, 4);
        } else {
            fprintf(stderr, "[E::%s] invalid GFA tag (Regexp: [A-Za-z][A-Za-z0-9]:[A|i|f|Z|B]): %s\n", __func__, sc_tag);
            return 1;
        }
    }

    if (out_s < 0) out_s = 0;
    
    ret = pathfinder(argv[opt.ind], mito_annot, pltd_annot, min_len, ext_p, ext_m, max_copy, max_path, 
            max_eval, min_score, min_cf, seq_cf, no_trn, no_rrn, do_graph_clean, bubble_size, tip_size, weak_cross,
            out_s, out_pref, VERBOSE);
    
    if (ret) {
        fprintf(stderr, "[E::%s] failed to analysis the GFA file\n", __func__);
        exit(EXIT_FAILURE);
    }

    if (fflush(stdout) == EOF) {
        fprintf(stderr, "[E::%s] failed to write the results\n", __func__);
        exit(EXIT_FAILURE);
    }

    if (VERBOSE >= 0) {
        fprintf(stderr, "[M::%s] Version: %s\n", __func__, PATHFINDER_VERSION);
        fprintf(stderr, "[M::%s] CMD:", __func__);
        int i;
        for (i = 0; i < argc; ++i)
            fprintf(stderr, " %s", argv[i]);
        fprintf(stderr, "\n[M::%s] Real time: %.3f sec; CPU: %.3f sec; Peak RSS: %.3f GB\n", __func__, realtime() - realtime0, cputime(), peakrss() / 1024.0 / 1024.0 / 1024.0);
    }

    return 0;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x158, %rsp            # imm = 0x158
movl $0x0, -0x2c(%rbp)
movl %edi, -0x30(%rbp)
movq %rsi, -0x38(%rbp)
leaq 0x4272b(%rip), %rax     # 0x49174
movq %rax, -0x40(%rbp)
movq 0x4e8bc(%rip), %rax     # 0x55310
movq %rax, -0x60(%rbp)
movq 0x4e8b9(%rip), %rax     # 0x55318
movq %rax, -0x58(%rbp)
movq 0x4e8b6(%rip), %rax     # 0x55320
movq %rax, -0x50(%rbp)
movq 0x4e8b3(%rip), %rax     # 0x55328
movq %rax, -0x48(%rbp)
movl $0x0, -0x78(%rbp)
callq 0x45090
movl $0xffffffff, -0x68(%rbp) # imm = 0xFFFFFFFF
movl $0x0, -0x6c(%rbp)
leaq 0x426f5(%rip), %rax     # 0x4918f
movq %rax, -0x88(%rbp)
movl $0xa, -0x70(%rbp)
movl $0xf4240, -0x74(%rbp)   # imm = 0xF4240
movq 0x4e542(%rip), %rax     # 0x54ff8
movq (%rax), %rax
movq %rax, -0x80(%rbp)
movq $0x0, -0x90(%rbp)
movq $0x0, -0x98(%rbp)
movq $0x0, -0xa0(%rbp)
movq $0x0, -0xa8(%rbp)
movq $0x0, -0xb0(%rbp)
movl $0x1, -0xb4(%rbp)
movl $0x1, -0xb8(%rbp)
movl $0x1, -0xd0(%rbp)
movl $0x186a0, -0xc8(%rbp)   # imm = 0x186A0
movl $0x2710, -0xcc(%rbp)    # imm = 0x2710
movsd 0x4251a(%rip), %xmm0    # 0x49048
movsd %xmm0, -0xf8(%rbp)
movsd 0x42502(%rip), %xmm0    # 0x49040
movsd %xmm0, -0xd8(%rbp)
movl $0x2710, -0xbc(%rbp)    # imm = 0x2710
movsd 0x424e0(%rip), %xmm0    # 0x49038
movsd %xmm0, -0xe0(%rbp)
movl $0x3, -0xc0(%rbp)
movl $0x1, -0xc4(%rbp)
movsd 0x424b4(%rip), %xmm0    # 0x49030
movsd %xmm0, -0xf0(%rbp)
movsd 0x4249c(%rip), %xmm0    # 0x49028
movsd %xmm0, -0xe8(%rbp)
movl -0x30(%rbp), %esi
movq -0x38(%rbp), %rdx
movq -0x40(%rbp), %r8
leaq -0x60(%rbp), %rdi
movl $0x1, %ecx
leaq 0x4e781(%rip), %r9      # 0x55330
callq 0x76a0
movl %eax, -0x64(%rbp)
cmpl $0x0, %eax
jl 0x6f67
cmpl $0x6d, -0x64(%rbp)
jne 0x6bd6
movq -0x58(%rbp), %rax
movq %rax, -0x90(%rbp)
jmp 0x6f62
cmpl $0x70, -0x64(%rbp)
jne 0x6bec
movq -0x58(%rbp), %rax
movq %rax, -0x98(%rbp)
jmp 0x6f60
cmpl $0x66, -0x64(%rbp)
jne 0x6c08
movq -0x58(%rbp), %rdi
callq 0x3100
movsd %xmm0, -0xf0(%rbp)
jmp 0x6f5e
cmpl $0x73, -0x64(%rbp)
jne 0x6c24
movq -0x58(%rbp), %rdi
callq 0x3100
movsd %xmm0, -0xe0(%rbp)
jmp 0x6f5c
cmpl $0x63, -0x64(%rbp)
jne 0x6c3b
movq -0x58(%rbp), %rdi
callq 0x34a0
movl %eax, -0x70(%rbp)
jmp 0x6f5a
cmpl $0x4e, -0x64(%rbp)
jne 0x6c52
movq -0x58(%rbp), %rdi
callq 0x34a0
movl %eax, -0x74(%rbp)
jmp 0x6f58
cmpl $0x67, -0x64(%rbp)
jne 0x6ca9
movq -0x58(%rbp), %rdi
leaq -0x100(%rbp), %rsi
movl $0xa, %edx
callq 0x3300
movl %eax, -0xc0(%rbp)
movq -0x100(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x2c, %eax
jne 0x6ca4
movq -0x100(%rbp), %rdi
addq $0x1, %rdi
leaq -0x100(%rbp), %rsi
movl $0xa, %edx
callq 0x3300
movl %eax, -0xc4(%rbp)
jmp 0x6f56
cmpl $0x71, -0x64(%rbp)
jne 0x6cc5
movq -0x58(%rbp), %rdi
callq 0x3100
movsd %xmm0, -0xe8(%rbp)
jmp 0x6f54
cmpl $0x65, -0x64(%rbp)
jne 0x6ce1
movq -0x58(%rbp), %rdi
callq 0x3100
movsd %xmm0, -0xd8(%rbp)
jmp 0x6f52
cmpl $0x6c, -0x64(%rbp)
jne 0x6cfb
movq -0x58(%rbp), %rdi
callq 0x34a0
movl %eax, -0xbc(%rbp)
jmp 0x6f50
cmpl $0x6f, -0x64(%rbp)
jne 0x6d11
movq -0x58(%rbp), %rax
movq %rax, -0x88(%rbp)
jmp 0x6f4e
cmpl $0x12d, -0x64(%rbp)     # imm = 0x12D
jne 0x6d2f
movl $0x0, -0x68(%rbp)
movl -0x6c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x6c(%rbp)
jmp 0x6f4c
cmpl $0x12e, -0x64(%rbp)     # imm = 0x12E
jne 0x6d4d
movl $0x1, -0x68(%rbp)
movl -0x6c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x6c(%rbp)
jmp 0x6f4a
cmpl $0x12f, -0x64(%rbp)     # imm = 0x12F
jne 0x6d6b
movl $0x2, -0x68(%rbp)
movl -0x6c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x6c(%rbp)
jmp 0x6f48
cmpl $0x130, -0x64(%rbp)     # imm = 0x130
jne 0x6d84
movq -0x58(%rbp), %rax
movq %rax, -0xa0(%rbp)
jmp 0x6f46
cmpl $0x131, -0x64(%rbp)     # imm = 0x131
jne 0x6d9d
movq -0x58(%rbp), %rax
movq %rax, -0xa8(%rbp)
jmp 0x6f44
cmpl $0x132, -0x64(%rbp)     # imm = 0x132
jne 0x6db6
movq -0x58(%rbp), %rax
movq %rax, -0xb0(%rbp)
jmp 0x6f42
cmpl $0x133, -0x64(%rbp)     # imm = 0x133
jne 0x6dce
movl $0x0, -0xb4(%rbp)
jmp 0x6f40
cmpl $0x134, -0x64(%rbp)     # imm = 0x134
jne 0x6de6
movl $0x1, -0xb8(%rbp)
jmp 0x6f3e
cmpl $0x135, -0x64(%rbp)     # imm = 0x135
jne 0x6e03
movq -0x58(%rbp), %rdi
callq 0x34a0
movl %eax, -0xc8(%rbp)
jmp 0x6f3c
cmpl $0x136, -0x64(%rbp)     # imm = 0x136
jne 0x6e20
movq -0x58(%rbp), %rdi
callq 0x34a0
movl %eax, -0xcc(%rbp)
jmp 0x6f3a
cmpl $0x137, -0x64(%rbp)     # imm = 0x137
jne 0x6e3f
movq -0x58(%rbp), %rdi
callq 0x3100
movsd %xmm0, -0xf8(%rbp)
jmp 0x6f38
cmpl $0x138, -0x64(%rbp)     # imm = 0x138
jne 0x6e57
movl $0x0, -0xd0(%rbp)
jmp 0x6f36
cmpl $0x76, -0x64(%rbp)
jne 0x6e71
movq -0x58(%rbp), %rdi
callq 0x34a0
movl %eax, 0x4e7f8(%rip)     # 0x55664
jmp 0x6f34
cmpl $0x68, -0x64(%rbp)
jne 0x6e8a
movq 0x4e15a(%rip), %rax     # 0x54fd8
movq (%rax), %rax
movq %rax, -0x80(%rbp)
jmp 0x6f32
cmpl $0x56, -0x64(%rbp)
jne 0x6ea8
leaq 0x42301(%rip), %rdi     # 0x49198
callq 0x30c0
movl $0x0, -0x2c(%rbp)
jmp 0x7681
cmpl $0x3f, -0x64(%rbp)
jne 0x6eea
movq 0x4e143(%rip), %rax     # 0x54ff8
movq (%rax), %rdi
movq -0x38(%rbp), %rax
movl -0x4c(%rbp), %ecx
subl $0x1, %ecx
movslq %ecx, %rcx
movq (%rax,%rcx,8), %rcx
leaq 0x422cc(%rip), %rsi     # 0x4919c
leaq 0x422e3(%rip), %rdx     # 0x491ba
movb $0x0, %al
callq 0x32e0
movl $0x1, -0x2c(%rbp)
jmp 0x7681
cmpl $0x3a, -0x64(%rbp)
jne 0x6f2c
movq 0x4e101(%rip), %rax     # 0x54ff8
movq (%rax), %rdi
movq -0x38(%rbp), %rax
movl -0x4c(%rbp), %ecx
subl $0x1, %ecx
movslq %ecx, %rcx
movq (%rax,%rcx,8), %rcx
leaq 0x422ad(%rip), %rsi     # 0x491bf
leaq 0x422a1(%rip), %rdx     # 0x491ba
movb $0x0, %al
callq 0x32e0
movl $0x1, -0x2c(%rbp)
jmp 0x7681
jmp 0x6f2e
jmp 0x6f30
jmp 0x6f32
jmp 0x6f34
jmp 0x6f36
jmp 0x6f38
jmp 0x6f3a
jmp 0x6f3c
jmp 0x6f3e
jmp 0x6f40
jmp 0x6f42
jmp 0x6f44
jmp 0x6f46
jmp 0x6f48
jmp 0x6f4a
jmp 0x6f4c
jmp 0x6f4e
jmp 0x6f50
jmp 0x6f52
jmp 0x6f54
jmp 0x6f56
jmp 0x6f58
jmp 0x6f5a
jmp 0x6f5c
jmp 0x6f5e
jmp 0x6f60
jmp 0x6f62
jmp 0x6b94
movl -0x30(%rbp), %eax
cmpl -0x60(%rbp), %eax
je 0x6f83
movq -0x80(%rbp), %rax
movq 0x4e05e(%rip), %rcx     # 0x54fd8
cmpq (%rcx), %rax
jne 0x721b
movq -0x80(%rbp), %rdi
leaq 0x42938(%rip), %rsi     # 0x498c6
movb $0x0, %al
callq 0x32e0
movq -0x80(%rbp), %rdi
leaq 0x4223d(%rip), %rsi     # 0x491dd
movb $0x0, %al
callq 0x32e0
movq -0x80(%rbp), %rdi
leaq 0x4225a(%rip), %rsi     # 0x4920c
movb $0x0, %al
callq 0x32e0
movq -0x80(%rbp), %rdi
leaq 0x42252(%rip), %rsi     # 0x49216
movb $0x0, %al
callq 0x32e0
movq -0x80(%rbp), %rdi
leaq 0x42251(%rip), %rsi     # 0x49227
movb $0x0, %al
callq 0x32e0
movq -0x80(%rbp), %rdi
leaq 0x42287(%rip), %rsi     # 0x4926f
movb $0x0, %al
callq 0x32e0
movq -0x80(%rbp), %rdi
movq -0x88(%rbp), %rdx
leaq 0x422b1(%rip), %rsi     # 0x492b2
movb $0x0, %al
callq 0x32e0
movq -0x80(%rbp), %rdi
movsd -0xf0(%rbp), %xmm0
leaq 0x422cd(%rip), %rsi     # 0x492e8
movb $0x1, %al
callq 0x32e0
movq -0x80(%rbp), %rdi
leaq 0x42319(%rip), %rsi     # 0x49346
movb $0x0, %al
callq 0x32e0
movq -0x80(%rbp), %rdi
leaq 0x4234b(%rip), %rsi     # 0x4938a
movb $0x0, %al
callq 0x32e0
movq -0x80(%rbp), %rdi
leaq 0x4237d(%rip), %rsi     # 0x493ce
movb $0x0, %al
callq 0x32e0
movq -0x80(%rbp), %rdi
movl 0x4e602(%rip), %edx     # 0x55664
leaq 0x423ac(%rip), %rsi     # 0x49415
movb $0x0, %al
callq 0x32e0
movq -0x80(%rbp), %rdi
leaq 0x423c7(%rip), %rsi     # 0x49442
movb $0x0, %al
callq 0x32e0
movq -0x80(%rbp), %rdi
leaq 0x423e3(%rip), %rsi     # 0x49470
movb $0x0, %al
callq 0x32e0
movq -0x80(%rbp), %rdi
movsd -0xe0(%rbp), %xmm0
leaq 0x423dc(%rip), %rsi     # 0x49483
movb $0x1, %al
callq 0x32e0
movq -0x80(%rbp), %rdi
movsd -0xd8(%rbp), %xmm0
leaq 0x4240b(%rip), %rsi     # 0x494cc
movb $0x1, %al
callq 0x32e0
movq -0x80(%rbp), %rdi
movl -0xc0(%rbp), %edx
movl -0xc4(%rbp), %ecx
leaq 0x4242d(%rip), %rsi     # 0x4950c
movb $0x0, %al
callq 0x32e0
movq -0x80(%rbp), %rdi
movl -0xbc(%rbp), %edx
leaq 0x42479(%rip), %rsi     # 0x49570
movb $0x0, %al
callq 0x32e0
movq -0x80(%rbp), %rdi
leaq 0x424b5(%rip), %rsi     # 0x495be
movb $0x0, %al
callq 0x32e0
movq -0x80(%rbp), %rdi
leaq 0x424ec(%rip), %rsi     # 0x49607
movb $0x0, %al
callq 0x32e0
movq -0x80(%rbp), %rdi
leaq 0x42523(%rip), %rsi     # 0x49650
movb $0x0, %al
callq 0x32e0
movq -0x80(%rbp), %rdi
movsd -0xe8(%rbp), %xmm0
leaq 0x4251a(%rip), %rsi     # 0x49661
movb $0x1, %al
callq 0x32e0
movq -0x80(%rbp), %rdi
movl -0x70(%rbp), %edx
leaq 0x42566(%rip), %rsi     # 0x496c2
movb $0x0, %al
callq 0x32e0
movq -0x80(%rbp), %rdi
movl -0x74(%rbp), %edx
leaq 0x42590(%rip), %rsi     # 0x49701
movb $0x0, %al
callq 0x32e0
movq -0x80(%rbp), %rdi
movl -0xc8(%rbp), %edx
leaq 0x425c0(%rip), %rsi     # 0x49749
movb $0x0, %al
callq 0x32e0
movq -0x80(%rbp), %rdi
movl -0xcc(%rbp), %edx
leaq 0x425f4(%rip), %rsi     # 0x49795
movb $0x0, %al
callq 0x32e0
movq -0x80(%rbp), %rdi
movsd -0xf8(%rbp), %xmm0
leaq 0x42623(%rip), %rsi     # 0x497de
movb $0x1, %al
callq 0x32e0
movq -0x80(%rbp), %rdi
leaq 0x4266a(%rip), %rsi     # 0x49837
movb $0x0, %al
callq 0x32e0
movq -0x80(%rbp), %rdi
leaq 0x426e7(%rip), %rsi     # 0x498c6
movb $0x0, %al
callq 0x32e0
movq -0x80(%rbp), %rdi
leaq 0x4267f(%rip), %rsi     # 0x49870
movb $0x0, %al
callq 0x32e0
movq -0x80(%rbp), %rdx
movq 0x4ddd5(%rip), %rax     # 0x54fd8
movq (%rax), %rsi
movl $0x1, %eax
xorl %ecx, %ecx
cmpq %rsi, %rdx
cmovel %ecx, %eax
movl %eax, -0x2c(%rbp)
jmp 0x7681
movl -0x30(%rbp), %eax
subl -0x60(%rbp), %eax
cmpl $0x1, %eax
jge 0x7251
movq 0x4ddcb(%rip), %rax     # 0x54ff8
movq (%rax), %rdi
leaq 0x42691(%rip), %rsi     # 0x498c8
leaq 0x41f7c(%rip), %rdx     # 0x491ba
movb $0x0, %al
callq 0x32e0
movl $0x1, -0x2c(%rbp)
jmp 0x7681
cmpl $0x1, -0x6c(%rbp)
jle 0x7282
movq 0x4dd9a(%rip), %rax     # 0x54ff8
movq (%rax), %rdi
leaq 0x42694(%rip), %rsi     # 0x498fc
leaq 0x41f4b(%rip), %rdx     # 0x491ba
movb $0x0, %al
callq 0x32e0
movl $0x1, -0x2c(%rbp)
jmp 0x7681
cmpq $0x0, -0x90(%rbp)
jne 0x72c1
cmpq $0x0, -0x98(%rbp)
jne 0x72c1
movq 0x4dd5b(%rip), %rax     # 0x54ff8
movq (%rax), %rdi
leaq 0x4269d(%rip), %rsi     # 0x49944
leaq 0x41f0c(%rip), %rdx     # 0x491ba
movb $0x0, %al
callq 0x32e0
movl $0x1, -0x2c(%rbp)
jmp 0x7681
cmpq $0x0, -0xa0(%rbp)
je 0x7324
movq -0xa0(%rbp), %rdi
callq 0x2d640
cmpl $0x0, %eax
je 0x72f0
movq -0xa0(%rbp), %rcx
leaq 0x4e3a6(%rip), %rax     # 0x55690
movl (%rcx), %ecx
movl %ecx, (%rax)
jmp 0x7322
movq 0x4dd01(%rip), %rax     # 0x54ff8
movq (%rax), %rdi
movq -0xa0(%rbp), %rcx
leaq 0x42685(%rip), %rsi     # 0x4998d
leaq 0x41eab(%rip), %rdx     # 0x491ba
movb $0x0, %al
callq 0x32e0
movl $0x1, -0x2c(%rbp)
jmp 0x7681
jmp 0x7324
cmpq $0x0, -0xa8(%rbp)
je 0x7387
movq -0xa8(%rbp), %rdi
callq 0x2d640
cmpl $0x0, %eax
je 0x7353
movq -0xa8(%rbp), %rcx
leaq 0x4e34b(%rip), %rax     # 0x55698
movl (%rcx), %ecx
movl %ecx, (%rax)
jmp 0x7385
movq 0x4dc9e(%rip), %rax     # 0x54ff8
movq (%rax), %rdi
movq -0xa8(%rbp), %rcx
leaq 0x42622(%rip), %rsi     # 0x4998d
leaq 0x41e48(%rip), %rdx     # 0x491ba
movb $0x0, %al
callq 0x32e0
movl $0x1, -0x2c(%rbp)
jmp 0x7681
jmp 0x7387
cmpq $0x0, -0xb0(%rbp)
je 0x73ea
movq -0xb0(%rbp), %rdi
callq 0x2d640
cmpl $0x0, %eax
je 0x73b6
movq -0xb0(%rbp), %rcx
leaq 0x4e2e4(%rip), %rax     # 0x55694
movl (%rcx), %ecx
movl %ecx, (%rax)
jmp 0x73e8
movq 0x4dc3b(%rip), %rax     # 0x54ff8
movq (%rax), %rdi
movq -0xb0(%rbp), %rcx
leaq 0x425bf(%rip), %rsi     # 0x4998d
leaq 0x41de5(%rip), %rdx     # 0x491ba
movb $0x0, %al
callq 0x32e0
movl $0x1, -0x2c(%rbp)
jmp 0x7681
jmp 0x73ea
cmpl $0x0, -0x68(%rbp)
jge 0x73f7
movl $0x0, -0x68(%rbp)
movq -0x38(%rbp), %rax
movslq -0x60(%rbp), %rcx
movq (%rax,%rcx,8), %rdi
movq -0x90(%rbp), %rsi
movq -0x98(%rbp), %rdx
movl -0xbc(%rbp), %ecx
movl -0xc0(%rbp), %r8d
movl -0xc4(%rbp), %r9d
movl -0x70(%rbp), %eax
movl %eax, -0x110(%rbp)
movl -0x74(%rbp), %eax
movl %eax, -0x10c(%rbp)
movsd -0xd8(%rbp), %xmm0
movsd -0xe0(%rbp), %xmm1
movsd -0xe8(%rbp), %xmm2
movsd -0xf0(%rbp), %xmm3
movl -0xb4(%rbp), %r13d
movl -0xb8(%rbp), %r12d
movl -0xd0(%rbp), %r15d
movl -0xc8(%rbp), %r14d
movl -0xcc(%rbp), %ebx
movsd -0xf8(%rbp), %xmm4
movl -0x68(%rbp), %r11d
movq -0x88(%rbp), %r10
movl 0x4e1d2(%rip), %eax     # 0x55664
movl %eax, -0x108(%rbp)
movl -0x110(%rbp), %eax
movl %eax, (%rsp)
movl -0x10c(%rbp), %eax
movl %eax, 0x8(%rsp)
movl -0x108(%rbp), %eax
movl %r13d, 0x10(%rsp)
movl %r12d, 0x18(%rsp)
movl %r15d, 0x20(%rsp)
movl %r14d, 0x28(%rsp)
movl %ebx, 0x30(%rsp)
movl %r11d, 0x38(%rsp)
movq %r10, 0x40(%rsp)
movl %eax, 0x48(%rsp)
callq 0x4210
movl %eax, -0x78(%rbp)
cmpl $0x0, -0x78(%rbp)
je 0x750e
movq 0x4db0c(%rip), %rax     # 0x54ff8
movq (%rax), %rdi
leaq 0x424de(%rip), %rsi     # 0x499d4
leaq 0x41cbd(%rip), %rdx     # 0x491ba
movb $0x0, %al
callq 0x32e0
movl $0x1, %edi
callq 0x34d0
movq 0x4dac3(%rip), %rax     # 0x54fd8
movq (%rax), %rdi
callq 0x3380
cmpl $-0x1, %eax
jne 0x754b
movq 0x4dacf(%rip), %rax     # 0x54ff8
movq (%rax), %rdi
leaq 0x424ca(%rip), %rsi     # 0x499fd
leaq 0x41c80(%rip), %rdx     # 0x491ba
movb $0x0, %al
callq 0x32e0
movl $0x1, %edi
callq 0x34d0
cmpl $0x0, 0x4e112(%rip)     # 0x55664
jl 0x767a
movq 0x4da99(%rip), %rax     # 0x54ff8
movq (%rax), %rdi
leaq 0x424b9(%rip), %rsi     # 0x49a22
leaq 0x41c4a(%rip), %rdx     # 0x491ba
leaq 0x41c21(%rip), %rcx     # 0x49198
movb $0x0, %al
callq 0x32e0
movq 0x4da73(%rip), %rax     # 0x54ff8
movq (%rax), %rdi
leaq 0x424a8(%rip), %rsi     # 0x49a37
leaq 0x41c24(%rip), %rdx     # 0x491ba
movb $0x0, %al
callq 0x32e0
movl $0x0, -0x104(%rbp)
movl -0x104(%rbp), %eax
cmpl -0x30(%rbp), %eax
jge 0x75ea
movq 0x4da3f(%rip), %rax     # 0x54ff8
movq (%rax), %rdi
movq -0x38(%rbp), %rax
movslq -0x104(%rbp), %rcx
movq (%rax,%rcx,8), %rdx
leaq 0x44d00(%rip), %rsi     # 0x4c2d2
movb $0x0, %al
callq 0x32e0
movl -0x104(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x104(%rbp)
jmp 0x75a7
movq 0x4da07(%rip), %rax     # 0x54ff8
movq (%rax), %rax
movq %rax, -0x128(%rbp)
callq 0x45010
leaq 0x4e0c1(%rip), %rax     # 0x556c8
subsd (%rax), %xmm0
movsd %xmm0, -0x120(%rbp)
callq 0x44f80
movsd %xmm0, -0x118(%rbp)
callq 0x44fe0
movq -0x128(%rbp), %rdi
movsd -0x120(%rbp), %xmm0
movsd -0x118(%rbp), %xmm1
cvtsi2sd %rax, %xmm2
movsd 0x41a07(%rip), %xmm3    # 0x49050
divsd %xmm3, %xmm2
movsd 0x419fb(%rip), %xmm3    # 0x49050
divsd %xmm3, %xmm2
movsd 0x419ef(%rip), %xmm3    # 0x49050
divsd %xmm3, %xmm2
leaq 0x423d8(%rip), %rsi     # 0x49a44
leaq 0x41b47(%rip), %rdx     # 0x491ba
movb $0x3, %al
callq 0x32e0
movl $0x0, -0x2c(%rbp)
movl -0x2c(%rbp), %eax
addq $0x158, %rsp            # imm = 0x158
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
nopw %cs:(%rax,%rax)