// File: aalto-speech[P]ftk/src/iterate.cc
// Function: main
int main(int argc, char* argv[]) {

    flt_type one_char_min_lp = -25.0;

    conf::Config config;
    config("usage: iterate [OPTION...] WORDLIST IN_VOCAB OUT_VOCAB\n")
      ('h', "help", "", "", "display help")
      ('i', "iterations=INT", "arg", "5", "Number of iterations")
      ('f', "forward-backward", "", "", "Use Forward-backward segmentation instead of Viterbi")
      ('8', "utf-8", "", "", "Utf-8 character encoding in use");
    config.default_parse(argc, argv);
    if (config.arguments.size() != 3) config.print_help(stderr, 1);

    int num_iterations = config["iterations"].get_int();
    bool enable_forward_backward = config["forward-backward"].specified;
    bool utf8_encoding = config["utf-8"].specified;
    string wordlist_fname = config.arguments[0];
    string vocab_in_fname = config.arguments[1];
    string vocab_out_fname = config.arguments[2];

    cerr << std::boolalpha;
    cerr << "parameters, wordlist: " << wordlist_fname << endl;
    cerr << "parameters, initial vocabulary: " << vocab_in_fname << endl;
    cerr << "parameters, final vocabulary: " << vocab_out_fname << endl;
    cerr << "parameters, use forward-backward: " << enable_forward_backward << endl;
    cerr << "parameters, number of iterations: " << num_iterations << endl;
    cerr << "parameters, utf-8 encoding: " << utf8_encoding << endl;

    int maxlen, word_maxlen;
    set<string> all_chars;
    map<string, flt_type> vocab;
    map<string, flt_type> freqs;
    map<string, flt_type> words;

    cerr << "Reading vocabulary " << vocab_in_fname << endl;
    int retval = Unigrams::read_vocab(vocab_in_fname, vocab, maxlen, utf8_encoding);
    if (retval < 0) {
        cerr << "something went wrong reading vocabulary" << endl;
        exit(EXIT_FAILURE);
    }
    cerr << "\t" << "size: " << vocab.size() << endl;
    cerr << "\t" << "maximum string length: " << maxlen << endl;
    find_short_factors(vocab, all_chars, 2, utf8_encoding);

    set<string> special_words;
    cerr << "Reading word list " << wordlist_fname << endl;
    retval = Unigrams::read_vocab(wordlist_fname, words, word_maxlen, utf8_encoding);
    if (retval < 0) {
        cerr << "something went wrong reading word list" << endl;
        exit(EXIT_FAILURE);
    }

    cerr << "\t" << "wordlist size: " << words.size() << endl;
    cerr << "\t" << "maximum word length: " << word_maxlen << endl;

    Unigrams ug;
    if (enable_forward_backward)
        ug.set_segmentation_method(forward_backward);
    else
        ug.set_segmentation_method(viterbi);
    ug.set_utf8(utf8_encoding);

    cerr << "iterating.." << endl;
    time_t rawtime;
    time ( &rawtime );
    cerr << "start time: " << ctime (&rawtime) << endl;
    for (int i=0; i<num_iterations; i++) {
        flt_type cost = ug.resegment_words(words, vocab, freqs, special_words);
        cerr << "likelihood: " << cost << endl;
        vocab = freqs;
        Unigrams::freqs_to_logprobs(vocab);
        floor_values(vocab, SMALL_LP);
        assert_factors(vocab, all_chars, one_char_min_lp);
    }
    time ( &rawtime );
    cerr << "end time: " << ctime (&rawtime) << endl;

    Unigrams::write_vocab(vocab_out_fname, vocab);

    exit(EXIT_SUCCESS);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x850, %rsp            # imm = 0x850
movl $0x0, -0x4(%rbp)
movl %edi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movabsq $-0x3fc7000000000000, %rax # imm = 0xC039000000000000
movq %rax, -0x18(%rbp)
leaq -0xd0(%rbp), %rdi
callq 0xdca0
leaq -0xf1(%rbp), %rdi
movq %rdi, -0x620(%rbp)
callq 0x5720
movq -0x620(%rbp), %rdx
leaq 0x62006(%rip), %rsi     # 0x6801a
leaq -0xf0(%rbp), %rdi
callq 0x5580
jmp 0x6022
leaq -0xd0(%rbp), %rdi
leaq -0xf0(%rbp), %rsi
callq 0xdd10
movq %rax, -0x628(%rbp)
jmp 0x603e
leaq -0x129(%rbp), %rdi
movq %rdi, -0x630(%rbp)
callq 0x5720
movq -0x630(%rbp), %rdx
leaq 0x61ffb(%rip), %rsi     # 0x6805a
leaq -0x128(%rbp), %rdi
callq 0x5580
jmp 0x606d
leaq -0x151(%rbp), %rdi
movq %rdi, -0x638(%rbp)
callq 0x5720
movq -0x638(%rbp), %rdx
leaq 0x62524(%rip), %rsi     # 0x685b2
leaq -0x150(%rbp), %rdi
callq 0x5580
jmp 0x609c
leaq -0x179(%rbp), %rdi
movq %rdi, -0x640(%rbp)
callq 0x5720
movq -0x640(%rbp), %rdx
leaq 0x624f5(%rip), %rsi     # 0x685b2
leaq -0x178(%rbp), %rdi
callq 0x5580
jmp 0x60cb
leaq -0x1a1(%rbp), %rdi
movq %rdi, -0x648(%rbp)
callq 0x5720
movq -0x648(%rbp), %rdx
leaq 0x61f66(%rip), %rsi     # 0x68052
leaq -0x1a0(%rbp), %rdi
callq 0x5580
jmp 0x60fa
movq -0x628(%rbp), %rdi
movl $0x68, %esi
leaq -0x128(%rbp), %rdx
leaq -0x150(%rbp), %rcx
leaq -0x178(%rbp), %r8
leaq -0x1a0(%rbp), %r9
callq 0xdd40
movq %rax, -0x650(%rbp)
jmp 0x6130
leaq -0x1c9(%rbp), %rdi
movq %rdi, -0x658(%rbp)
callq 0x5720
movq -0x658(%rbp), %rdx
leaq 0x61f0e(%rip), %rsi     # 0x6805f
leaq -0x1c8(%rbp), %rdi
callq 0x5580
jmp 0x615f
leaq -0x1f1(%rbp), %rdi
movq %rdi, -0x660(%rbp)
callq 0x5720
movq -0x660(%rbp), %rdx
leaq 0x61eee(%rip), %rsi     # 0x6806e
leaq -0x1f0(%rbp), %rdi
callq 0x5580
jmp 0x618e
leaq -0x219(%rbp), %rdi
movq %rdi, -0x668(%rbp)
callq 0x5720
movq -0x668(%rbp), %rdx
leaq 0x61ec3(%rip), %rsi     # 0x68072
leaq -0x218(%rbp), %rdi
callq 0x5580
jmp 0x61bd
leaq -0x241(%rbp), %rdi
movq %rdi, -0x670(%rbp)
callq 0x5720
movq -0x670(%rbp), %rdx
leaq 0x61e96(%rip), %rsi     # 0x68074
leaq -0x240(%rbp), %rdi
callq 0x5580
jmp 0x61ec
movq -0x650(%rbp), %rdi
movl $0x69, %esi
leaq -0x1c8(%rbp), %rdx
leaq -0x1f0(%rbp), %rcx
leaq -0x218(%rbp), %r8
leaq -0x240(%rbp), %r9
callq 0xdd40
movq %rax, -0x678(%rbp)
jmp 0x6222
leaq -0x269(%rbp), %rdi
movq %rdi, -0x680(%rbp)
callq 0x5720
movq -0x680(%rbp), %rdx
leaq 0x61e46(%rip), %rsi     # 0x68089
leaq -0x268(%rbp), %rdi
callq 0x5580
jmp 0x6251
leaq -0x291(%rbp), %rdi
movq %rdi, -0x688(%rbp)
callq 0x5720
movq -0x688(%rbp), %rdx
leaq 0x62340(%rip), %rsi     # 0x685b2
leaq -0x290(%rbp), %rdi
callq 0x5580
jmp 0x6280
leaq -0x2b9(%rbp), %rdi
movq %rdi, -0x690(%rbp)
callq 0x5720
movq -0x690(%rbp), %rdx
leaq 0x62311(%rip), %rsi     # 0x685b2
leaq -0x2b8(%rbp), %rdi
callq 0x5580
jmp 0x62af
leaq -0x2e1(%rbp), %rdi
movq %rdi, -0x698(%rbp)
callq 0x5720
movq -0x698(%rbp), %rdx
leaq 0x61dca(%rip), %rsi     # 0x6809a
leaq -0x2e0(%rbp), %rdi
callq 0x5580
jmp 0x62de
movq -0x678(%rbp), %rdi
movl $0x66, %esi
leaq -0x268(%rbp), %rdx
leaq -0x290(%rbp), %rcx
leaq -0x2b8(%rbp), %r8
leaq -0x2e0(%rbp), %r9
callq 0xdd40
movq %rax, -0x6a0(%rbp)
jmp 0x6314
leaq -0x309(%rbp), %rdi
movq %rdi, -0x6a8(%rbp)
callq 0x5720
movq -0x6a8(%rbp), %rdx
leaq 0x61d9a(%rip), %rsi     # 0x680cf
leaq -0x308(%rbp), %rdi
callq 0x5580
jmp 0x6343
leaq -0x331(%rbp), %rdi
movq %rdi, -0x6b0(%rbp)
callq 0x5720
movq -0x6b0(%rbp), %rdx
leaq 0x6224e(%rip), %rsi     # 0x685b2
leaq -0x330(%rbp), %rdi
callq 0x5580
jmp 0x6372
leaq -0x359(%rbp), %rdi
movq %rdi, -0x6b8(%rbp)
callq 0x5720
movq -0x6b8(%rbp), %rdx
leaq 0x6221f(%rip), %rsi     # 0x685b2
leaq -0x358(%rbp), %rdi
callq 0x5580
jmp 0x63a1
leaq -0x381(%rbp), %rdi
movq %rdi, -0x6c0(%rbp)
callq 0x5720
movq -0x6c0(%rbp), %rdx
leaq 0x61d13(%rip), %rsi     # 0x680d5
leaq -0x380(%rbp), %rdi
callq 0x5580
jmp 0x63d0
movq -0x6a0(%rbp), %rdi
movl $0x38, %esi
leaq -0x308(%rbp), %rdx
leaq -0x330(%rbp), %rcx
leaq -0x358(%rbp), %r8
leaq -0x380(%rbp), %r9
callq 0xdd40
jmp 0x63ff
leaq -0x380(%rbp), %rdi
callq 0x5858
leaq -0x381(%rbp), %rdi
callq 0x5450
leaq -0x358(%rbp), %rdi
callq 0x5858
leaq -0x359(%rbp), %rdi
callq 0x5450
leaq -0x330(%rbp), %rdi
callq 0x5858
leaq -0x331(%rbp), %rdi
callq 0x5450
leaq -0x308(%rbp), %rdi
callq 0x5858
leaq -0x309(%rbp), %rdi
callq 0x5450
leaq -0x2e0(%rbp), %rdi
callq 0x5858
leaq -0x2e1(%rbp), %rdi
callq 0x5450
leaq -0x2b8(%rbp), %rdi
callq 0x5858
leaq -0x2b9(%rbp), %rdi
callq 0x5450
leaq -0x290(%rbp), %rdi
callq 0x5858
leaq -0x291(%rbp), %rdi
callq 0x5450
leaq -0x268(%rbp), %rdi
callq 0x5858
leaq -0x269(%rbp), %rdi
callq 0x5450
leaq -0x240(%rbp), %rdi
callq 0x5858
leaq -0x241(%rbp), %rdi
callq 0x5450
leaq -0x218(%rbp), %rdi
callq 0x5858
leaq -0x219(%rbp), %rdi
callq 0x5450
leaq -0x1f0(%rbp), %rdi
callq 0x5858
leaq -0x1f1(%rbp), %rdi
callq 0x5450
leaq -0x1c8(%rbp), %rdi
callq 0x5858
leaq -0x1c9(%rbp), %rdi
callq 0x5450
leaq -0x1a0(%rbp), %rdi
callq 0x5858
leaq -0x1a1(%rbp), %rdi
callq 0x5450
leaq -0x178(%rbp), %rdi
callq 0x5858
leaq -0x179(%rbp), %rdi
callq 0x5450
leaq -0x150(%rbp), %rdi
callq 0x5858
leaq -0x151(%rbp), %rdi
callq 0x5450
leaq -0x128(%rbp), %rdi
callq 0x5858
leaq -0x129(%rbp), %rdi
callq 0x5450
leaq -0xf0(%rbp), %rdi
callq 0x5858
leaq -0xf1(%rbp), %rdi
callq 0x5450
movl -0x8(%rbp), %esi
movq -0x10(%rbp), %rdx
leaq -0xd0(%rbp), %rdi
callq 0xeb90
jmp 0x65ac
leaq -0xd0(%rbp), %rdi
addq $0x98, %rdi
callq 0x7b00
cmpq $0x3, %rax
je 0x698b
movq 0x8f9f0(%rip), %rax     # 0x95fc0
movq (%rax), %rsi
leaq -0xd0(%rbp), %rdi
movl $0x1, %edx
callq 0xf350
jmp 0x65e6
jmp 0x698b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x100(%rbp)
movl %eax, -0x104(%rbp)
jmp 0x6963
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x100(%rbp)
movl %eax, -0x104(%rbp)
jmp 0x6957
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x100(%rbp)
movl %eax, -0x104(%rbp)
jmp 0x694b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x100(%rbp)
movl %eax, -0x104(%rbp)
jmp 0x6933
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x100(%rbp)
movl %eax, -0x104(%rbp)
jmp 0x691b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x100(%rbp)
movl %eax, -0x104(%rbp)
jmp 0x6903
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x100(%rbp)
movl %eax, -0x104(%rbp)
jmp 0x68f7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x100(%rbp)
movl %eax, -0x104(%rbp)
jmp 0x68eb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x100(%rbp)
movl %eax, -0x104(%rbp)
jmp 0x68d3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x100(%rbp)
movl %eax, -0x104(%rbp)
jmp 0x68bb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x100(%rbp)
movl %eax, -0x104(%rbp)
jmp 0x68a3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x100(%rbp)
movl %eax, -0x104(%rbp)
jmp 0x6897
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x100(%rbp)
movl %eax, -0x104(%rbp)
jmp 0x688b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x100(%rbp)
movl %eax, -0x104(%rbp)
jmp 0x6873
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x100(%rbp)
movl %eax, -0x104(%rbp)
jmp 0x685b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x100(%rbp)
movl %eax, -0x104(%rbp)
jmp 0x6843
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x100(%rbp)
movl %eax, -0x104(%rbp)
jmp 0x6837
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x100(%rbp)
movl %eax, -0x104(%rbp)
jmp 0x682b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x100(%rbp)
movl %eax, -0x104(%rbp)
jmp 0x6813
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x100(%rbp)
movl %eax, -0x104(%rbp)
jmp 0x67fb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x100(%rbp)
movl %eax, -0x104(%rbp)
jmp 0x67e3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x100(%rbp)
movl %eax, -0x104(%rbp)
leaq -0x380(%rbp), %rdi
callq 0x5858
leaq -0x381(%rbp), %rdi
callq 0x5450
leaq -0x358(%rbp), %rdi
callq 0x5858
leaq -0x359(%rbp), %rdi
callq 0x5450
leaq -0x330(%rbp), %rdi
callq 0x5858
leaq -0x331(%rbp), %rdi
callq 0x5450
leaq -0x308(%rbp), %rdi
callq 0x5858
leaq -0x309(%rbp), %rdi
callq 0x5450
leaq -0x2e0(%rbp), %rdi
callq 0x5858
leaq -0x2e1(%rbp), %rdi
callq 0x5450
leaq -0x2b8(%rbp), %rdi
callq 0x5858
leaq -0x2b9(%rbp), %rdi
callq 0x5450
leaq -0x290(%rbp), %rdi
callq 0x5858
leaq -0x291(%rbp), %rdi
callq 0x5450
leaq -0x268(%rbp), %rdi
callq 0x5858
leaq -0x269(%rbp), %rdi
callq 0x5450
leaq -0x240(%rbp), %rdi
callq 0x5858
leaq -0x241(%rbp), %rdi
callq 0x5450
leaq -0x218(%rbp), %rdi
callq 0x5858
leaq -0x219(%rbp), %rdi
callq 0x5450
leaq -0x1f0(%rbp), %rdi
callq 0x5858
leaq -0x1f1(%rbp), %rdi
callq 0x5450
leaq -0x1c8(%rbp), %rdi
callq 0x5858
leaq -0x1c9(%rbp), %rdi
callq 0x5450
leaq -0x1a0(%rbp), %rdi
callq 0x5858
leaq -0x1a1(%rbp), %rdi
callq 0x5450
leaq -0x178(%rbp), %rdi
callq 0x5858
leaq -0x179(%rbp), %rdi
callq 0x5450
leaq -0x150(%rbp), %rdi
callq 0x5858
leaq -0x151(%rbp), %rdi
callq 0x5450
leaq -0x128(%rbp), %rdi
callq 0x5858
leaq -0x129(%rbp), %rdi
callq 0x5450
leaq -0xf0(%rbp), %rdi
callq 0x5858
leaq -0xf1(%rbp), %rdi
callq 0x5450
jmp 0x7638
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x100(%rbp)
movl %eax, -0x104(%rbp)
jmp 0x7638
leaq -0x3a9(%rbp), %rdi
movq %rdi, -0x6c8(%rbp)
callq 0x5720
movq -0x6c8(%rbp), %rdx
leaq 0x616d2(%rip), %rsi     # 0x6807e
leaq -0x3a8(%rbp), %rdi
callq 0x5580
jmp 0x69ba
leaq -0xd0(%rbp), %rdi
leaq -0x3a8(%rbp), %rsi
callq 0xecd0
movq %rax, -0x6d0(%rbp)
jmp 0x69d6
movq -0x6d0(%rbp), %rdi
callq 0xda20
movl %eax, -0x6d4(%rbp)
jmp 0x69ea
leaq -0x3a8(%rbp), %rdi
callq 0x5858
leaq -0x3a9(%rbp), %rdi
callq 0x5450
movl -0x6d4(%rbp), %eax
movl %eax, -0x388(%rbp)
leaq -0x3d1(%rbp), %rdi
movq %rdi, -0x6e0(%rbp)
callq 0x5720
movq -0x6e0(%rbp), %rdx
leaq 0x6165a(%rip), %rsi     # 0x68089
leaq -0x3d0(%rbp), %rdi
callq 0x5580
jmp 0x6a3d
leaq -0xd0(%rbp), %rdi
leaq -0x3d0(%rbp), %rsi
callq 0xecd0
movq %rax, -0x6e8(%rbp)
jmp 0x6a59
movq -0x6e8(%rbp), %rax
movb 0x4a(%rax), %al
movb %al, -0x6f1(%rbp)
leaq -0x3d0(%rbp), %rdi
callq 0x5858
leaq -0x3d1(%rbp), %rdi
callq 0x5450
movb -0x6f1(%rbp), %al
andb $0x1, %al
movb %al, -0x3aa(%rbp)
leaq -0x3f9(%rbp), %rdi
movq %rdi, -0x6f0(%rbp)
callq 0x5720
movq -0x6f0(%rbp), %rdx
leaq 0x6161f(%rip), %rsi     # 0x680cf
leaq -0x3f8(%rbp), %rdi
callq 0x5580
jmp 0x6abe
leaq -0xd0(%rbp), %rdi
leaq -0x3f8(%rbp), %rsi
callq 0xecd0
movq %rax, -0x700(%rbp)
jmp 0x6ada
movq -0x700(%rbp), %rax
movb 0x4a(%rax), %al
movb %al, -0x701(%rbp)
leaq -0x3f8(%rbp), %rdi
callq 0x5858
leaq -0x3f9(%rbp), %rdi
callq 0x5450
movb -0x701(%rbp), %al
andb $0x1, %al
movb %al, -0x3d2(%rbp)
leaq -0x38(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x7b20
movq %rax, %rsi
leaq -0x420(%rbp), %rdi
callq 0x51c0
jmp 0x6b2e
leaq -0x38(%rbp), %rdi
movl $0x1, %esi
callq 0x7b20
movq %rax, %rsi
leaq -0x440(%rbp), %rdi
callq 0x51c0
jmp 0x6b4d
leaq -0x38(%rbp), %rdi
movl $0x2, %esi
callq 0x7b20
movq %rax, %rsi
leaq -0x460(%rbp), %rdi
callq 0x51c0
jmp 0x6b6c
movq 0x8f475(%rip), %rdi     # 0x95fe8
leaq 0xfc6(%rip), %rsi       # 0x7b40
callq 0x5140
jmp 0x6b81
movq 0x8f460(%rip), %rdi     # 0x95fe8
leaq 0x61566(%rip), %rsi     # 0x680f5
callq 0x53f0
movq %rax, -0x710(%rbp)
jmp 0x6b9d
movq -0x710(%rbp), %rdi
leaq -0x420(%rbp), %rsi
callq 0x53a0
movq %rax, -0x718(%rbp)
jmp 0x6bb9
movq -0x718(%rbp), %rdi
movq 0x8f3d1(%rip), %rsi     # 0x95f98
callq 0x5430
jmp 0x6bce
movq 0x8f413(%rip), %rdi     # 0x95fe8
leaq 0x61530(%rip), %rsi     # 0x6810c
callq 0x53f0
movq %rax, -0x720(%rbp)
jmp 0x6bea
movq -0x720(%rbp), %rdi
leaq -0x440(%rbp), %rsi
callq 0x53a0
movq %rax, -0x728(%rbp)
jmp 0x6c06
movq -0x728(%rbp), %rdi
movq 0x8f384(%rip), %rsi     # 0x95f98
callq 0x5430
jmp 0x6c1b
movq 0x8f3c6(%rip), %rdi     # 0x95fe8
leaq 0x61504(%rip), %rsi     # 0x6812d
callq 0x53f0
movq %rax, -0x730(%rbp)
jmp 0x6c37
movq -0x730(%rbp), %rdi
leaq -0x460(%rbp), %rsi
callq 0x53a0
movq %rax, -0x738(%rbp)
jmp 0x6c53
movq -0x738(%rbp), %rdi
movq 0x8f337(%rip), %rsi     # 0x95f98
callq 0x5430
jmp 0x6c68
movq 0x8f379(%rip), %rdi     # 0x95fe8
leaq 0x614d6(%rip), %rsi     # 0x6814c
callq 0x53f0
movq %rax, -0x740(%rbp)
jmp 0x6c84
movq -0x740(%rbp), %rdi
movzbl -0x3aa(%rbp), %esi
andl $0x1, %esi
callq 0x5730
movq %rax, -0x748(%rbp)
jmp 0x6ca3
movq -0x748(%rbp), %rdi
movq 0x8f2e7(%rip), %rsi     # 0x95f98
callq 0x5430
jmp 0x6cb8
movq 0x8f329(%rip), %rdi     # 0x95fe8
leaq 0x614a9(%rip), %rsi     # 0x6816f
callq 0x53f0
movq %rax, -0x750(%rbp)
jmp 0x6cd4
movq -0x750(%rbp), %rdi
movl -0x388(%rbp), %esi
callq 0x5700
movq %rax, -0x758(%rbp)
jmp 0x6cef
movq -0x758(%rbp), %rdi
movq 0x8f29b(%rip), %rsi     # 0x95f98
callq 0x5430
jmp 0x6d04
movq 0x8f2dd(%rip), %rdi     # 0x95fe8
leaq 0x61480(%rip), %rsi     # 0x68192
callq 0x53f0
movq %rax, -0x760(%rbp)
jmp 0x6d20
movq -0x760(%rbp), %rdi
movzbl -0x3d2(%rbp), %esi
andl $0x1, %esi
callq 0x5730
movq %rax, -0x768(%rbp)
jmp 0x6d3f
movq -0x768(%rbp), %rdi
movq 0x8f24b(%rip), %rsi     # 0x95f98
callq 0x5430
jmp 0x6d54
leaq -0x498(%rbp), %rdi
callq 0x7b70
leaq -0x4c8(%rbp), %rdi
callq 0x7b90
leaq -0x4f8(%rbp), %rdi
callq 0x7b90
leaq -0x528(%rbp), %rdi
callq 0x7b90
movq 0x8f25d(%rip), %rdi     # 0x95fe8
leaq 0x6141d(%rip), %rsi     # 0x681af
callq 0x53f0
movq %rax, -0x770(%rbp)
jmp 0x6da0
movq -0x770(%rbp), %rdi
leaq -0x440(%rbp), %rsi
callq 0x53a0
movq %rax, -0x778(%rbp)
jmp 0x6dbc
movq -0x778(%rbp), %rdi
movq 0x8f1ce(%rip), %rsi     # 0x95f98
callq 0x5430
jmp 0x6dd1
leaq -0x550(%rbp), %rdi
leaq -0x440(%rbp), %rsi
callq 0x51c0
jmp 0x6de6
movzbl -0x3d2(%rbp), %ecx
andl $0x1, %ecx
leaq -0x550(%rbp), %rdi
leaq -0x4c8(%rbp), %rsi
leaq -0x464(%rbp), %rdx
callq 0x57480
movl %eax, -0x77c(%rbp)
jmp 0x6e12
leaq -0x550(%rbp), %rdi
callq 0x5858
movl -0x77c(%rbp), %eax
movl %eax, -0x52c(%rbp)
cmpl $0x0, -0x52c(%rbp)
jge 0x6fba
movq 0x8f1aa(%rip), %rdi     # 0x95fe8
leaq 0x6137e(%rip), %rsi     # 0x681c3
callq 0x53f0
movq %rax, -0x788(%rbp)
jmp 0x6e53
movq -0x788(%rbp), %rdi
movq 0x8f137(%rip), %rsi     # 0x95f98
callq 0x5430
jmp 0x6e68
movl $0x1, %edi
callq 0x54a0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x100(%rbp)
movl %eax, -0x104(%rbp)
jmp 0x6ea4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x100(%rbp)
movl %eax, -0x104(%rbp)
leaq -0x3a8(%rbp), %rdi
callq 0x5858
leaq -0x3a9(%rbp), %rdi
callq 0x5450
jmp 0x7638
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x100(%rbp)
movl %eax, -0x104(%rbp)
jmp 0x6ee7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x100(%rbp)
movl %eax, -0x104(%rbp)
leaq -0x3d0(%rbp), %rdi
callq 0x5858
leaq -0x3d1(%rbp), %rdi
callq 0x5450
jmp 0x7638
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x100(%rbp)
movl %eax, -0x104(%rbp)
jmp 0x6f2a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x100(%rbp)
movl %eax, -0x104(%rbp)
leaq -0x3f8(%rbp), %rdi
callq 0x5858
leaq -0x3f9(%rbp), %rdi
callq 0x5450
jmp 0x7638
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x100(%rbp)
movl %eax, -0x104(%rbp)
jmp 0x762c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x100(%rbp)
movl %eax, -0x104(%rbp)
jmp 0x7620
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x100(%rbp)
movl %eax, -0x104(%rbp)
jmp 0x7614
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x100(%rbp)
movl %eax, -0x104(%rbp)
jmp 0x75e4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x100(%rbp)
movl %eax, -0x104(%rbp)
leaq -0x550(%rbp), %rdi
callq 0x5858
jmp 0x75e4
movq 0x8f027(%rip), %rdi     # 0x95fe8
leaq 0x615e9(%rip), %rsi     # 0x685b1
callq 0x53f0
movq %rax, -0x790(%rbp)
jmp 0x6fd6
movq -0x790(%rbp), %rdi
leaq 0x61262(%rip), %rsi     # 0x68246
callq 0x53f0
movq %rax, -0x798(%rbp)
jmp 0x6ff2
leaq -0x4c8(%rbp), %rdi
callq 0x7bb0
movq -0x798(%rbp), %rdi
movq %rax, %rsi
callq 0x50f0
movq %rax, -0x7a0(%rbp)
jmp 0x7016
movq -0x7a0(%rbp), %rdi
movq 0x8ef74(%rip), %rsi     # 0x95f98
callq 0x5430
jmp 0x702b
movq 0x8efb6(%rip), %rdi     # 0x95fe8
leaq 0x61578(%rip), %rsi     # 0x685b1
callq 0x53f0
movq %rax, -0x7a8(%rbp)
jmp 0x7047
movq -0x7a8(%rbp), %rdi
leaq 0x61196(%rip), %rsi     # 0x681eb
callq 0x53f0
movq %rax, -0x7b0(%rbp)
jmp 0x7063
movq -0x7b0(%rbp), %rdi
movl -0x464(%rbp), %esi
callq 0x5700
movq %rax, -0x7b8(%rbp)
jmp 0x707e
movq -0x7b8(%rbp), %rdi
movq 0x8ef0c(%rip), %rsi     # 0x95f98
callq 0x5430
jmp 0x7093
movzbl -0x3d2(%rbp), %ecx
andl $0x1, %ecx
leaq -0x4c8(%rbp), %rdi
leaq -0x498(%rbp), %rsi
movl $0x2, %edx
callq 0x7650
jmp 0x70b7
leaq -0x580(%rbp), %rdi
callq 0x7b70
movq 0x8ef1e(%rip), %rdi     # 0x95fe8
leaq 0x61132(%rip), %rsi     # 0x68203
callq 0x53f0
movq %rax, -0x7c0(%rbp)
jmp 0x70df
movq -0x7c0(%rbp), %rdi
leaq -0x420(%rbp), %rsi
callq 0x53a0
movq %rax, -0x7c8(%rbp)
jmp 0x70fb
movq -0x7c8(%rbp), %rdi
movq 0x8ee8f(%rip), %rsi     # 0x95f98
callq 0x5430
jmp 0x7110
leaq -0x5a0(%rbp), %rdi
leaq -0x420(%rbp), %rsi
callq 0x51c0
jmp 0x7125
movzbl -0x3d2(%rbp), %ecx
andl $0x1, %ecx
leaq -0x5a0(%rbp), %rdi
leaq -0x528(%rbp), %rsi
leaq -0x468(%rbp), %rdx
callq 0x57480
movl %eax, -0x7cc(%rbp)
jmp 0x7151
movl -0x7cc(%rbp), %eax
movl %eax, -0x52c(%rbp)
leaq -0x5a0(%rbp), %rdi
callq 0x5858
cmpl $0x0, -0x52c(%rbp)
jge 0x71e7
movq 0x8ee6f(%rip), %rdi     # 0x95fe8
leaq 0x61096(%rip), %rsi     # 0x68216
callq 0x53f0
movq %rax, -0x7d8(%rbp)
jmp 0x718e
movq -0x7d8(%rbp), %rdi
movq 0x8edfc(%rip), %rsi     # 0x95f98
callq 0x5430
jmp 0x71a3
movl $0x1, %edi
callq 0x54a0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x100(%rbp)
movl %eax, -0x104(%rbp)
jmp 0x75d8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x100(%rbp)
movl %eax, -0x104(%rbp)
leaq -0x5a0(%rbp), %rdi
callq 0x5858
jmp 0x75d8
movq 0x8edfa(%rip), %rdi     # 0x95fe8
leaq 0x613bc(%rip), %rsi     # 0x685b1
callq 0x53f0
movq %rax, -0x7e0(%rbp)
jmp 0x7203
movq -0x7e0(%rbp), %rdi
leaq 0x6102c(%rip), %rsi     # 0x6823d
callq 0x53f0
movq %rax, -0x7e8(%rbp)
jmp 0x721f
leaq -0x528(%rbp), %rdi
callq 0x7bb0
movq -0x7e8(%rbp), %rdi
movq %rax, %rsi
callq 0x50f0
movq %rax, -0x7f0(%rbp)
jmp 0x7243
movq -0x7f0(%rbp), %rdi
movq 0x8ed47(%rip), %rsi     # 0x95f98
callq 0x5430
jmp 0x7258
movq 0x8ed89(%rip), %rdi     # 0x95fe8
leaq 0x6134b(%rip), %rsi     # 0x685b1
callq 0x53f0
movq %rax, -0x7f8(%rbp)
jmp 0x7274
movq -0x7f8(%rbp), %rdi
leaq 0x60fcb(%rip), %rsi     # 0x6824d
callq 0x53f0
movq %rax, -0x800(%rbp)
jmp 0x7290
movq -0x800(%rbp), %rdi
movl -0x468(%rbp), %esi
callq 0x5700
movq %rax, -0x808(%rbp)
jmp 0x72ab
movq -0x808(%rbp), %rdi
movq 0x8ecdf(%rip), %rsi     # 0x95f98
callq 0x5430
jmp 0x72c0
leaq -0x5b0(%rbp), %rdi
callq 0x7bd0
jmp 0x72ce
testb $0x1, -0x3aa(%rbp)
je 0x72ee
leaq 0x3dc72(%rip), %rsi     # 0x44f50
leaq -0x5b0(%rbp), %rdi
callq 0x7bf0
jmp 0x72ec
jmp 0x7305
leaq 0x3d2bb(%rip), %rsi     # 0x445b0
leaq -0x5b0(%rbp), %rdi
callq 0x7bf0
jmp 0x7303
jmp 0x7305
movzbl -0x3d2(%rbp), %esi
andl $0x1, %esi
leaq -0x5b0(%rbp), %rdi
callq 0x7c10
jmp 0x731d
movq 0x8ecc4(%rip), %rdi     # 0x95fe8
leaq 0x60f38(%rip), %rsi     # 0x68263
callq 0x53f0
movq %rax, -0x810(%rbp)
jmp 0x7339
movq -0x810(%rbp), %rdi
movq 0x8ec51(%rip), %rsi     # 0x95f98
callq 0x5430
jmp 0x734e
leaq -0x5b8(%rbp), %rdi
callq 0x53c0
movq 0x8ec87(%rip), %rdi     # 0x95fe8
leaq 0x60f07(%rip), %rsi     # 0x6826f
callq 0x53f0
movq %rax, -0x818(%rbp)
jmp 0x7376
leaq -0x5b8(%rbp), %rdi
callq 0x5190
movq -0x818(%rbp), %rdi
movq %rax, %rsi
callq 0x53f0
movq %rax, -0x820(%rbp)
jmp 0x739a
movq -0x820(%rbp), %rdi
movq 0x8ebf0(%rip), %rsi     # 0x95f98
callq 0x5430
jmp 0x73af
movl $0x0, -0x5bc(%rbp)
movl -0x5bc(%rbp), %eax
cmpl -0x388(%rbp), %eax
jge 0x7515
leaq -0x5f8(%rbp), %rdi
leaq -0x580(%rbp), %rsi
callq 0x7c30
jmp 0x73e0
leaq -0x5b0(%rbp), %rdi
leaq -0x528(%rbp), %rsi
leaq -0x4c8(%rbp), %rdx
leaq -0x4f8(%rbp), %rcx
leaq -0x5f8(%rbp), %r8
callq 0x58340
movsd %xmm0, -0x828(%rbp)
jmp 0x7412
leaq -0x5f8(%rbp), %rdi
callq 0x7c60
movsd -0x828(%rbp), %xmm0
movsd %xmm0, -0x5c8(%rbp)
movq 0x8ebb3(%rip), %rdi     # 0x95fe8
leaq 0x60e40(%rip), %rsi     # 0x6827c
callq 0x53f0
movq %rax, -0x830(%rbp)
jmp 0x744a
movq -0x830(%rbp), %rdi
movsd -0x5c8(%rbp), %xmm0
callq 0x57b0
movq %rax, -0x838(%rbp)
jmp 0x7467
movq -0x838(%rbp), %rdi
movq 0x8eb23(%rip), %rsi     # 0x95f98
callq 0x5430
jmp 0x747c
leaq -0x4c8(%rbp), %rdi
leaq -0x4f8(%rbp), %rsi
callq 0x7c80
jmp 0x7491
leaq -0x4c8(%rbp), %rdi
movsd 0x60b68(%rip), %xmm0    # 0x68008
callq 0x58460
jmp 0x74a7
leaq -0x4c8(%rbp), %rdi
movq %rdi, -0x840(%rbp)
movsd 0x60b53(%rip), %xmm0    # 0x68010
callq 0x5f30
movq -0x840(%rbp), %rdi
movsd -0x18(%rbp), %xmm0
leaq -0x498(%rbp), %rsi
callq 0x7760
jmp 0x74dc
jmp 0x74de
movl -0x5bc(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x5bc(%rbp)
jmp 0x73b9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x100(%rbp)
movl %eax, -0x104(%rbp)
leaq -0x5f8(%rbp), %rdi
callq 0x7c60
jmp 0x75d8
leaq -0x5b8(%rbp), %rdi
callq 0x53c0
movq 0x8eac0(%rip), %rdi     # 0x95fe8
leaq 0x60d5a(%rip), %rsi     # 0x68289
callq 0x53f0
movq %rax, -0x848(%rbp)
jmp 0x753d
leaq -0x5b8(%rbp), %rdi
callq 0x5190
movq -0x848(%rbp), %rdi
movq %rax, %rsi
callq 0x53f0
movq %rax, -0x850(%rbp)
jmp 0x7561
movq -0x850(%rbp), %rdi
movq 0x8ea29(%rip), %rsi     # 0x95f98
callq 0x5430
jmp 0x7576
leaq -0x618(%rbp), %rdi
leaq -0x460(%rbp), %rsi
callq 0x51c0
jmp 0x758b
leaq -0x618(%rbp), %rdi
leaq -0x4c8(%rbp), %rsi
xorl %edx, %edx
movl $0x6, %ecx
callq 0x57a60
jmp 0x75a7
leaq -0x618(%rbp), %rdi
callq 0x5858
xorl %edi, %edi
callq 0x54a0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x100(%rbp)
movl %eax, -0x104(%rbp)
leaq -0x618(%rbp), %rdi
callq 0x5858
leaq -0x580(%rbp), %rdi
callq 0x7c60
leaq -0x528(%rbp), %rdi
callq 0x7cb0
leaq -0x4f8(%rbp), %rdi
callq 0x7cb0
leaq -0x4c8(%rbp), %rdi
callq 0x7cb0
leaq -0x498(%rbp), %rdi
callq 0x7c60
leaq -0x460(%rbp), %rdi
callq 0x5858
leaq -0x440(%rbp), %rdi
callq 0x5858
leaq -0x420(%rbp), %rdi
callq 0x5858
leaq -0xd0(%rbp), %rdi
callq 0x7cd0
movq -0x100(%rbp), %rdi
callq 0x5710