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

    conf::Config config;
    config("usage: 2g-prune [OPTION...] WORDLIST TRANSITIONS_INIT MSFG_IN TRANSITIONS_OUT\n")
      ('h', "help", "", "", "display help")
      ('c', "candidates=INT", "arg", "5000", "Number of candidate subwords to try to remove per iteration")
      ('r', "removals=INT", "arg", "500", "Number of removals per iteration")
      ('m', "min-length=INT", "arg", "2", "Minimum length of subwords to remove, DEFAULT: 2")
      ('v', "vocab-size=INT", "arg must", "", "Target vocabulary size (stopping criterion)")
      ('t', "temp-models=INT", "arg", "0", "Write out intermediate models for #V mod INT == 0")
      ('b', "normalize-by-bigrams", "", "", "Normalize subword scores by the number of bigrams")
      ('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() != 4) config.print_help(stderr, 1);

    unsigned int n_candidates_per_iter = config["candidates"].get_int();
    unsigned int removals_per_iter = config["removals"].get_int();
    unsigned int min_removal_length = config["min-length"].get_int();
    unsigned int target_vocab_size = config["vocab-size"].get_int();
    string wordlist_fname = config.arguments[0];
    string initial_transitions_fname = config.arguments[1];
    string msfg_fname = config.arguments[2];
    string transition_fname = config.arguments[3];
    unsigned int temp_vocab_interval = config["temp-models"].get_int();
    bool normalize_by_bigrams = config["normalize-by-bigrams"].specified;
    bool enable_fb = config["forward-backward"].specified;
    bool utf8_encoding = config["utf-8"].specified;

    std::cerr << std::boolalpha;
    cerr << "parameters, wordlist: " << wordlist_fname << endl;
    cerr << "parameters, initial transitions: " << initial_transitions_fname << endl;
    cerr << "parameters, msfg: " << msfg_fname << endl;
    cerr << "parameters, transitions out: " << transition_fname << endl;
    cerr << "parameters, candidates per iteration: " << n_candidates_per_iter << endl;
    cerr << "parameters, removals per iteration: " << removals_per_iter << endl;
    cerr << "parameters, minimum length for subwords to remove: " << min_removal_length << endl;
    cerr << "parameters, target vocab size: " << target_vocab_size << endl;
    cerr << "parameters, floor lp: " << FLOOR_LP << endl;
    if (temp_vocab_interval > 0)
        cerr << "parameters, write temp models whenever #V modulo " << temp_vocab_interval << " == 0" << endl;
    else
        cerr << "parameters, write temp models: NO" << endl;
    cerr << "parameters, normalize subword scores by the number of bigrams: " << normalize_by_bigrams << endl;
    cerr << "parameters, use forward-backward: " << enable_fb << endl;
    cerr << "parameters, utf-8 encoding: " << utf8_encoding << endl;

    int word_maxlen;
    map<string, flt_type> all_chars;
    map<string, flt_type> freqs;
    map<string, flt_type> words;
    MultiStringFactorGraph msfg(start_end_symbol);
    transitions_t transitions;
    transitions_t trans_stats;
    map<string, flt_type> unigram_stats;
    set<string> short_subwords;

    cerr << "Reading initial transitions " << initial_transitions_fname << endl;
    int retval = Bigrams::read_transitions(transitions, initial_transitions_fname);
    if (retval < 0) {
        cerr << "something went wrong reading transitions" << endl;
        exit(EXIT_FAILURE);
    }
    cerr << "\tnumber of transitions: " << Bigrams::transition_count(transitions) << endl;
    cerr << "\tvocabulary size: " << transitions.size() << endl;

    map<string, flt_type> vocab;
    Bigrams::trans_to_vocab(transitions, vocab);
    find_short_factors(vocab, short_subwords, min_removal_length, utf8_encoding);

    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;

    cerr << "Reading msfg " << msfg_fname << endl;
    msfg.read(msfg_fname);
    msfg.prune_unused(transitions);

    std::cerr << std::setprecision(15);
    int iteration = 1;
    unsigned int next_out_vocab_size=0;
    while (true) {

        cerr << "Iteration " << iteration << endl;

        assign_scores(transitions, msfg);
        flt_type lp = Bigrams::collect_trans_stats(words, msfg, trans_stats, unigram_stats, enable_fb);
        transitions.swap(trans_stats);
        Bigrams::freqs_to_logprobs(transitions);
        trans_stats.clear();

        cerr << "\tbigram likelihood: " << lp << endl;
        cerr << "\tnumber of transitions: " << Bigrams::transition_count(transitions) << endl;
        cerr << "\tvocabulary size: " << transitions.size() << endl;

        if (iteration==1 && temp_vocab_interval > 0)
            next_out_vocab_size = transitions.size()/temp_vocab_interval * temp_vocab_interval;

        // Get candidate subwords
        cerr << "\tinitializing removals .." << endl;
        map<string, flt_type> candidates;
        Bigrams::init_candidates_freq(n_candidates_per_iter, unigram_stats, candidates, short_subwords);
        //Bigrams::init_candidates_num_contexts(n_candidates_per_iter, transitions, unigram_stats, candidates);

        // Score all candidates
        cerr << "\tranking removals .." << endl;
        assign_scores(transitions, msfg);
        Bigrams::rank_candidate_subwords(words, msfg, unigram_stats, transitions,
                                         candidates, enable_fb, normalize_by_bigrams);

        // Remove subwords
        vector<pair<string, flt_type> > sorted_scores;
        Unigrams::sort_vocab(candidates, sorted_scores, true);
        vector<string> to_remove;
        for (auto it = sorted_scores.begin(); it != sorted_scores.end(); ++it) {
            to_remove.push_back(it->first);
            if (((transitions.size()-to_remove.size()) % removals_per_iter == 0)
                  && to_remove.size() >= (removals_per_iter/2))
                    break;
        }
        Bigrams::remove_transitions(to_remove, transitions);
        for (auto it = to_remove.begin(); it != to_remove.end(); ++it)
            msfg.remove_arcs(*it);

        Bigrams::iterate(words, msfg, transitions, enable_fb, 1);
        msfg.prune_unused(transitions);

        // Write intermediate model
        if (temp_vocab_interval > 0
            && transitions.size() <= next_out_vocab_size
            && transitions.size() > target_vocab_size)
        {
            ostringstream transitions_temp;
            transitions_temp << "transitions." << transitions.size() << ".gz";
            cerr << "\twriting to: " << transitions_temp.str() << endl;
            Bigrams::write_transitions(transitions, transitions_temp.str());
            next_out_vocab_size -= temp_vocab_interval;
        }

        if  (transitions.size() <= target_vocab_size) break;
        iteration++;
    }

    // Write the final model
    Bigrams::write_transitions(transitions, transition_fname);

    exit(EXIT_SUCCESS);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0xbe8, %rsp            # imm = 0xBE8
movq %rsi, %rbx
movl %edi, %r14d
leaq -0x930(%rbp), %rdi
callq 0x83dc
leaq 0x1f4c9(%rip), %rsi     # 0x24022
leaq -0x848(%rbp), %rdi
leaq -0xb08(%rbp), %rdx
callq 0x4150
leaq -0x930(%rbp), %rdi
leaq -0x848(%rbp), %rsi
callq 0x8448
movq %rax, %r15
leaq 0x1f4f0(%rip), %rsi     # 0x24079
leaq -0x828(%rbp), %rdi
leaq -0xc00(%rbp), %rdx
callq 0x4150
leaq 0x1fd84(%rip), %rsi     # 0x24927
leaq -0x808(%rbp), %rdi
leaq -0x990(%rbp), %rdx
callq 0x4150
leaq 0x1fd6a(%rip), %rsi     # 0x24927
leaq -0x7e8(%rbp), %rdi
leaq -0x960(%rbp), %rdx
callq 0x4150
leaq 0x1f49a(%rip), %rsi     # 0x24071
leaq -0x7c8(%rbp), %rdi
leaq -0x1d8(%rbp), %rdx
callq 0x4150
pushq $0x68
popq %rsi
leaq -0x828(%rbp), %rdx
leaq -0x808(%rbp), %rcx
leaq -0x7e8(%rbp), %r8
leaq -0x7c8(%rbp), %r9
movq %r15, %rdi
callq 0x8460
movq %rax, %r15
leaq 0x1f463(%rip), %rsi     # 0x2407e
leaq -0x7a8(%rbp), %rdi
leaq -0x140(%rbp), %rdx
callq 0x4150
leaq 0x1f458(%rip), %rsi     # 0x2408d
leaq -0x788(%rbp), %rdi
leaq -0x2a8(%rbp), %rdx
callq 0x4150
leaq 0x1f442(%rip), %rsi     # 0x24091
leaq -0x768(%rbp), %rdi
leaq -0x278(%rbp), %rdx
callq 0x4150
leaq 0x1f42d(%rip), %rsi     # 0x24096
leaq -0x748(%rbp), %rdi
leaq -0x878(%rbp), %rdx
callq 0x4150
pushq $0x63
popq %rsi
leaq -0x7a8(%rbp), %rdx
leaq -0x788(%rbp), %rcx
leaq -0x768(%rbp), %r8
leaq -0x748(%rbp), %r9
movq %r15, %rdi
callq 0x8460
movq %rax, %r15
leaq 0x1f425(%rip), %rsi     # 0x240d2
leaq -0x728(%rbp), %rdi
leaq -0x248(%rbp), %rdx
callq 0x4150
leaq 0x1f3c6(%rip), %rsi     # 0x2408d
leaq -0x708(%rbp), %rdi
leaq -0xa0(%rbp), %rdx
callq 0x4150
leaq 0x1f3fe(%rip), %rsi     # 0x240df
leaq -0x6e8(%rbp), %rdi
leaq -0x1a8(%rbp), %rdx
callq 0x4150
leaq 0x1f3e8(%rip), %rsi     # 0x240e3
leaq -0x6c8(%rbp), %rdi
leaq -0x188(%rbp), %rdx
callq 0x4150
pushq $0x72
popq %rsi
leaq -0x728(%rbp), %rdx
leaq -0x708(%rbp), %rcx
leaq -0x6e8(%rbp), %r8
leaq -0x6c8(%rbp), %r9
movq %r15, %rdi
callq 0x8460
movq %rax, %r15
leaq 0x1f3c5(%rip), %rsi     # 0x24104
leaq -0x6a8(%rbp), %rdi
leaq -0x168(%rbp), %rdx
callq 0x4150
leaq 0x1f334(%rip), %rsi     # 0x2408d
leaq -0x688(%rbp), %rdi
leaq -0x1f8(%rbp), %rdx
callq 0x4150
leaq 0x1f3cf(%rip), %rsi     # 0x24142
leaq -0x668(%rbp), %rdi
leaq -0xf0(%rbp), %rdx
callq 0x4150
leaq 0x1f386(%rip), %rsi     # 0x24113
leaq -0x648(%rbp), %rdi
leaq -0x110(%rbp), %rdx
callq 0x4150
pushq $0x6d
popq %rsi
leaq -0x6a8(%rbp), %rdx
leaq -0x688(%rbp), %rcx
leaq -0x668(%rbp), %r8
leaq -0x648(%rbp), %r9
movq %r15, %rdi
callq 0x8460
movq %rax, %r15
leaq 0x1f373(%rip), %rsi     # 0x24144
leaq -0x628(%rbp), %rdi
leaq -0xc0(%rbp), %rdx
callq 0x4150
leaq 0x1f368(%rip), %rsi     # 0x24153
leaq -0x608(%rbp), %rdi
leaq -0x58(%rbp), %rdx
callq 0x4150
leaq 0x1fb25(%rip), %rsi     # 0x24927
leaq -0x5e8(%rbp), %rdi
leaq -0x42(%rbp), %rdx
callq 0x4150
leaq 0x1f343(%rip), %rsi     # 0x2415c
leaq -0x5c8(%rbp), %rdi
leaq -0x41(%rbp), %rdx
callq 0x4150
pushq $0x76
popq %rsi
leaq -0x628(%rbp), %rdx
leaq -0x608(%rbp), %rcx
leaq -0x5e8(%rbp), %r8
leaq -0x5c8(%rbp), %r9
movq %r15, %rdi
callq 0x8460
movq %rax, %r15
leaq 0x1f32e(%rip), %rsi     # 0x24188
leaq -0x5a8(%rbp), %rdi
leaq -0x40(%rbp), %rdx
callq 0x4150
leaq 0x1f21c(%rip), %rsi     # 0x2408d
leaq -0x588(%rbp), %rdi
leaq -0x3f(%rbp), %rdx
callq 0x4150
leaq 0x1f340(%rip), %rsi     # 0x241c8
leaq -0x568(%rbp), %rdi
leaq -0x3e(%rbp), %rdx
callq 0x4150
leaq 0x1f2f9(%rip), %rsi     # 0x24198
leaq -0x548(%rbp), %rdi
leaq -0x3d(%rbp), %rdx
callq 0x4150
pushq $0x74
popq %rsi
leaq -0x5a8(%rbp), %rdx
leaq -0x588(%rbp), %rcx
leaq -0x568(%rbp), %r8
leaq -0x548(%rbp), %r9
movq %r15, %rdi
callq 0x8460
movq %rax, %r15
leaq 0x1f2ea(%rip), %rsi     # 0x241ca
leaq -0x528(%rbp), %rdi
leaq -0x3c(%rbp), %rdx
callq 0x4150
leaq 0x1fa30(%rip), %rsi     # 0x24927
leaq -0x508(%rbp), %rdi
leaq -0x3b(%rbp), %rdx
callq 0x4150
leaq 0x1fa19(%rip), %rsi     # 0x24927
leaq -0x4e8(%rbp), %rdi
leaq -0x3a(%rbp), %rdx
callq 0x4150
leaq 0x1f2ba(%rip), %rsi     # 0x241df
leaq -0x4c8(%rbp), %rdi
leaq -0x39(%rbp), %rdx
callq 0x4150
pushq $0x62
popq %rsi
leaq -0x528(%rbp), %rdx
leaq -0x508(%rbp), %rcx
leaq -0x4e8(%rbp), %r8
leaq -0x4c8(%rbp), %r9
movq %r15, %rdi
callq 0x8460
movq %rax, %r15
leaq 0x1f2ab(%rip), %rsi     # 0x24211
leaq -0x4a8(%rbp), %rdi
leaq -0x38(%rbp), %rdx
callq 0x4150
leaq 0x1f9aa(%rip), %rsi     # 0x24927
leaq -0x488(%rbp), %rdi
leaq -0x37(%rbp), %rdx
callq 0x4150
leaq 0x1f993(%rip), %rsi     # 0x24927
leaq -0x468(%rbp), %rdi
leaq -0x36(%rbp), %rdx
callq 0x4150
leaq 0x1f277(%rip), %rsi     # 0x24222
leaq -0x448(%rbp), %rdi
leaq -0x35(%rbp), %rdx
callq 0x4150
pushq $0x66
popq %rsi
leaq -0x4a8(%rbp), %rdx
leaq -0x488(%rbp), %rcx
leaq -0x468(%rbp), %r8
leaq -0x448(%rbp), %r9
movq %r15, %rdi
callq 0x8460
movq %rax, %r15
leaq 0x1f26b(%rip), %rsi     # 0x24257
leaq -0x428(%rbp), %rdi
leaq -0x34(%rbp), %rdx
callq 0x4150
leaq 0x1f924(%rip), %rsi     # 0x24927
leaq -0x408(%rbp), %rdi
leaq -0x33(%rbp), %rdx
callq 0x4150
leaq 0x1f90d(%rip), %rsi     # 0x24927
leaq -0x3e8(%rbp), %rdi
leaq -0x32(%rbp), %rdx
callq 0x4150
leaq 0x1f22c(%rip), %rsi     # 0x2425d
leaq -0x3c8(%rbp), %rdi
leaq -0x31(%rbp), %rdx
callq 0x4150
pushq $0x38
popq %rsi
leaq -0x428(%rbp), %rdx
leaq -0x408(%rbp), %rcx
leaq -0x3e8(%rbp), %r8
leaq -0x3c8(%rbp), %r9
movq %r15, %rdi
callq 0x8460
leaq -0x3c8(%rbp), %rdi
callq 0x46e8
leaq -0x3e8(%rbp), %rdi
callq 0x46e8
leaq -0x408(%rbp), %rdi
callq 0x46e8
leaq -0x428(%rbp), %rdi
callq 0x46e8
leaq -0x448(%rbp), %rdi
callq 0x46e8
leaq -0x468(%rbp), %rdi
callq 0x46e8
leaq -0x488(%rbp), %rdi
callq 0x46e8
leaq -0x4a8(%rbp), %rdi
callq 0x46e8
leaq -0x4c8(%rbp), %rdi
callq 0x46e8
leaq -0x4e8(%rbp), %rdi
callq 0x46e8
leaq -0x508(%rbp), %rdi
callq 0x46e8
leaq -0x528(%rbp), %rdi
callq 0x46e8
leaq -0x548(%rbp), %rdi
callq 0x46e8
leaq -0x568(%rbp), %rdi
callq 0x46e8
leaq -0x588(%rbp), %rdi
callq 0x46e8
leaq -0x5a8(%rbp), %rdi
callq 0x46e8
leaq -0x5c8(%rbp), %rdi
callq 0x46e8
leaq -0x5e8(%rbp), %rdi
callq 0x46e8
leaq -0x608(%rbp), %rdi
callq 0x46e8
leaq -0x628(%rbp), %rdi
callq 0x46e8
leaq -0x648(%rbp), %rdi
callq 0x46e8
leaq -0x668(%rbp), %rdi
callq 0x46e8
leaq -0x688(%rbp), %rdi
callq 0x46e8
leaq -0x6a8(%rbp), %rdi
callq 0x46e8
leaq -0x6c8(%rbp), %rdi
callq 0x46e8
leaq -0x6e8(%rbp), %rdi
callq 0x46e8
leaq -0x708(%rbp), %rdi
callq 0x46e8
leaq -0x728(%rbp), %rdi
callq 0x46e8
leaq -0x748(%rbp), %rdi
callq 0x46e8
leaq -0x768(%rbp), %rdi
callq 0x46e8
leaq -0x788(%rbp), %rdi
callq 0x46e8
leaq -0x7a8(%rbp), %rdi
callq 0x46e8
leaq -0x7c8(%rbp), %rdi
callq 0x46e8
leaq -0x7e8(%rbp), %rdi
callq 0x46e8
leaq -0x808(%rbp), %rdi
callq 0x46e8
leaq -0x828(%rbp), %rdi
callq 0x46e8
leaq -0x848(%rbp), %rdi
callq 0x46e8
leaq -0x930(%rbp), %rdi
movl %r14d, %esi
movq %rbx, %rdx
callq 0x8cc6
movq -0x890(%rbp), %rax
subq -0x898(%rbp), %rax
cmpq $0x80, %rax
je 0x5265
movq 0x30d6d(%rip), %rax     # 0x35fc0
movq (%rax), %rsi
leaq -0x930(%rbp), %rdi
pushq $0x1
popq %rdx
callq 0x91ae
leaq 0x1f011(%rip), %rsi     # 0x2427d
leaq -0x3a8(%rbp), %rdi
leaq -0xb08(%rbp), %rdx
callq 0x4150
leaq -0x930(%rbp), %rdi
leaq -0x3a8(%rbp), %rsi
callq 0x8d66
movq %rax, %rdi
callq 0x82ac
movl %eax, -0x54(%rbp)
leaq -0x3a8(%rbp), %rdi
callq 0x46e8
leaq 0x1efd8(%rip), %rsi     # 0x24288
leaq -0x388(%rbp), %rdi
leaq -0xb08(%rbp), %rdx
callq 0x4150
leaq -0x930(%rbp), %rdi
leaq -0x388(%rbp), %rsi
callq 0x8d66
movq %rax, %rdi
callq 0x82ac
movq %rax, -0x68(%rbp)
leaq -0x388(%rbp), %rdi
callq 0x46e8
leaq 0x1ef9c(%rip), %rsi     # 0x24291
leaq -0x368(%rbp), %rdi
leaq -0xb08(%rbp), %rdx
callq 0x4150
leaq -0x930(%rbp), %rdi
leaq -0x368(%rbp), %rsi
callq 0x8d66
movq %rax, %rdi
callq 0x82ac
movl %eax, %ebx
leaq -0x368(%rbp), %rdi
callq 0x46e8
leaq 0x1ef64(%rip), %rsi     # 0x2429c
leaq -0x348(%rbp), %rdi
leaq -0xb08(%rbp), %rdx
callq 0x4150
leaq -0x930(%rbp), %rdi
leaq -0x348(%rbp), %rsi
callq 0x8d66
movq %rax, %rdi
callq 0x82ac
movl %eax, %r14d
leaq -0x348(%rbp), %rdi
callq 0x46e8
movq -0x898(%rbp), %rsi
leaq -0x1a8(%rbp), %rdi
callq 0x4480
movq -0x898(%rbp), %rsi
addq $0x20, %rsi
leaq -0x188(%rbp), %rdi
callq 0x4480
movq -0x898(%rbp), %rsi
addq $0x40, %rsi
leaq -0x168(%rbp), %rdi
callq 0x4480
movq -0x898(%rbp), %rsi
addq $0x60, %rsi
leaq -0x1f8(%rbp), %rdi
callq 0x4480
leaq 0x1eed3(%rip), %rsi     # 0x242a7
leaq -0x328(%rbp), %rdi
leaq -0xb08(%rbp), %rdx
callq 0x4150
leaq -0x930(%rbp), %rdi
leaq -0x328(%rbp), %rsi
callq 0x8d66
movq %rax, %rdi
callq 0x82ac
movl %eax, -0x2c(%rbp)
leaq -0x328(%rbp), %rdi
callq 0x46e8
leaq 0x1edb2(%rip), %rsi     # 0x241ca
leaq -0x308(%rbp), %rdi
leaq -0xb08(%rbp), %rdx
callq 0x4150
leaq -0x930(%rbp), %rdi
leaq -0x308(%rbp), %rsi
callq 0x8d66
movb 0x4a(%rax), %r12b
leaq -0x308(%rbp), %rdi
callq 0x46e8
leaq 0x1edbc(%rip), %rsi     # 0x24211
leaq -0x2e8(%rbp), %rdi
leaq -0xb08(%rbp), %rdx
callq 0x4150
leaq -0x930(%rbp), %rdi
leaq -0x2e8(%rbp), %rsi
callq 0x8d66
movb 0x4a(%rax), %r15b
leaq -0x2e8(%rbp), %rdi
callq 0x46e8
leaq 0x1edc5(%rip), %rsi     # 0x24257
leaq -0x2c8(%rbp), %rdi
leaq -0xb08(%rbp), %rdx
callq 0x4150
leaq -0x930(%rbp), %rdi
leaq -0x2c8(%rbp), %rsi
callq 0x8d66
movb 0x4a(%rax), %al
movb %al, -0x60(%rbp)
leaq -0x2c8(%rbp), %rdi
callq 0x46e8
movq 0x30b17(%rip), %rdi     # 0x35fe8
movq (%rdi), %rax
movq -0x18(%rax), %rax
orl $0x1, 0x18(%rdi,%rax)
leaq 0x1edcf(%rip), %rsi     # 0x242b3
callq 0x4350
leaq -0x1a8(%rbp), %rsi
movq %rax, %rdi
callq 0x4310
movq %rax, %rdi
callq 0x4190
movq 0x30ae1(%rip), %rdi     # 0x35fe8
leaq 0x1edbc(%rip), %rsi     # 0x242ca
callq 0x4350
leaq -0x188(%rbp), %rsi
movq %rax, %rdi
callq 0x4310
movq %rax, %rdi
callq 0x4190
movq 0x30ab7(%rip), %rdi     # 0x35fe8
leaq 0x1edb4(%rip), %rsi     # 0x242ec
callq 0x4350
leaq -0x168(%rbp), %rsi
movq %rax, %rdi
callq 0x4310
movq %rax, %rdi
callq 0x4190
movq 0x30a8d(%rip), %rdi     # 0x35fe8
leaq 0x1ed9d(%rip), %rsi     # 0x242ff
callq 0x4350
leaq -0x1f8(%rbp), %rsi
movq %rax, %rdi
callq 0x4310
movq %rax, %rdi
callq 0x4190
movq 0x30a63(%rip), %rdi     # 0x35fe8
leaq 0x1ed91(%rip), %rsi     # 0x2431d
callq 0x4350
movl -0x54(%rbp), %esi
movq %rax, %rdi
callq 0x4260
movq %rax, %rdi
callq 0x4190
movq 0x30a3d(%rip), %rdi     # 0x35fe8
leaq 0x1ed92(%rip), %rsi     # 0x24344
callq 0x4350
movl -0x68(%rbp), %esi
movq %rax, %rdi
movq %rsi, -0x148(%rbp)
callq 0x4260
movq %rax, %rdi
callq 0x4190
movq 0x30a10(%rip), %rdi     # 0x35fe8
leaq 0x1ed8a(%rip), %rsi     # 0x24369
callq 0x4350
movl %ebx, %esi
movq %rax, %rdi
movq %rsi, -0x50(%rbp)
callq 0x4260
movq %rax, %rdi
callq 0x4190
movq 0x309e7(%rip), %rdi     # 0x35fe8
leaq 0x1ed95(%rip), %rsi     # 0x2439d
callq 0x4350
movl %r14d, %esi
movq %rax, %rdi
movq %rsi, -0xd0(%rbp)
callq 0x4260
movq %rax, %rdi
callq 0x4190
movq 0x309ba(%rip), %rbx     # 0x35fe8
leaq 0x1ed88(%rip), %rsi     # 0x243bd
movq %rbx, %rdi
callq 0x4350
movsd 0x1e9c3(%rip), %xmm0    # 0x24008
movq %rax, %rdi
callq 0x4560
movq %rax, %rdi
callq 0x4190
movl -0x2c(%rbp), %eax
movl %eax, %ecx
movq %rcx, -0xc8(%rbp)
testl %eax, %eax
je 0x5693
movq 0x3097c(%rip), %rdi     # 0x35fe8
leaq 0x1ed61(%rip), %rsi     # 0x243d4
callq 0x4350
movq %rax, %rdi
movq -0xc8(%rbp), %rsi
callq 0x4260
movq %rax, %rbx
leaq 0x1eb33(%rip), %rsi     # 0x241c4
jmp 0x569a
leaq 0x1ed6c(%rip), %rsi     # 0x24406
movq %rbx, %rdi
callq 0x4350
movq %rax, %rdi
callq 0x4190
movq 0x30937(%rip), %rdi     # 0x35fe8
leaq 0x1ed70(%rip), %rsi     # 0x24428
callq 0x4350
movzbl %r12b, %esi
movq %rax, %rdi
movl %esi, -0x70(%rbp)
callq 0x45a0
movq %rax, %rdi
callq 0x4190
movq 0x3090d(%rip), %rdi     # 0x35fe8
leaq 0x1ed86(%rip), %rsi     # 0x24468
callq 0x4350
movzbl %r15b, %esi
movq %rax, %rdi
movl %esi, -0x30(%rbp)
callq 0x45a0
movq %rax, %rdi
callq 0x4190
movq 0x308e3(%rip), %rdi     # 0x35fe8
leaq 0x1ed7f(%rip), %rsi     # 0x2448b
callq 0x4350
movzbl -0x60(%rbp), %esi
movq %rax, %rdi
movl %esi, -0x6c(%rbp)
callq 0x45a0
movq %rax, %rdi
callq 0x4190
leaq -0x988(%rbp), %rax
andl $0x0, (%rax)
andq $0x0, 0x8(%rax)
movq %rax, 0x10(%rax)
movq %rax, 0x18(%rax)
andq $0x0, 0x20(%rax)
leaq -0x958(%rbp), %rax
andl $0x0, (%rax)
andq $0x0, 0x8(%rax)
movq %rax, 0x10(%rax)
movq %rax, 0x18(%rax)
andq $0x0, 0x20(%rax)
leaq -0x1d0(%rbp), %rax
andl $0x0, (%rax)
andq $0x0, 0x8(%rax)
movq %rax, 0x10(%rax)
movq %rax, 0x18(%rax)
andq $0x0, 0x20(%rax)
leaq 0x30c15(%rip), %rsi     # 0x36398
leaq -0xc00(%rbp), %rdi
callq 0x6456
leaq -0x138(%rbp), %rax
andl $0x0, (%rax)
andq $0x0, 0x8(%rax)
movq %rax, 0x10(%rax)
movq %rax, 0x18(%rax)
andq $0x0, 0x20(%rax)
leaq -0x2a0(%rbp), %rax
andl $0x0, (%rax)
andq $0x0, 0x8(%rax)
movq %rax, 0x10(%rax)
movq %rax, 0x18(%rax)
andq $0x0, 0x20(%rax)
leaq -0x270(%rbp), %rax
andl $0x0, (%rax)
andq $0x0, 0x8(%rax)
movq %rax, 0x10(%rax)
movq %rax, 0x18(%rax)
andq $0x0, 0x20(%rax)
leaq -0x870(%rbp), %rax
andl $0x0, (%rax)
andq $0x0, 0x8(%rax)
movq %rax, 0x10(%rax)
movq %rax, 0x18(%rax)
andq $0x0, 0x20(%rax)
movq 0x307e2(%rip), %rdi     # 0x35fe8
leaq 0x1ec9b(%rip), %rsi     # 0x244a8
callq 0x4350
leaq -0x188(%rbp), %rsi
movq %rax, %rdi
callq 0x4310
movq %rax, %rdi
callq 0x4190
leaq -0x140(%rbp), %rdi
leaq -0x188(%rbp), %rsi
callq 0x21290
testl %eax, %eax
jns 0x5860
movq 0x307a1(%rip), %rdi     # 0x35fe8
leaq 0x1ec77(%rip), %rsi     # 0x244c5
callq 0x4350
movq %rax, %rdi
callq 0x4190
jmp 0x5ab4
movq 0x30781(%rip), %rdi     # 0x35fe8
leaq 0x1ec80(%rip), %rsi     # 0x244ee
callq 0x4350
movq %rax, %rbx
leaq -0x140(%rbp), %rdi
callq 0x2191e
movq %rbx, %rdi
movl %eax, %esi
callq 0x4600
movq %rax, %rdi
callq 0x4190
movq 0x3074d(%rip), %rdi     # 0x35fe8
leaq 0x1ec65(%rip), %rsi     # 0x24507
callq 0x4350
movq -0x118(%rbp), %rsi
movq %rax, %rdi
callq 0x4260
movq %rax, %rdi
callq 0x4190
leaq -0x240(%rbp), %rax
andl $0x0, (%rax)
andq $0x0, 0x8(%rax)
movq %rax, 0x10(%rax)
movq %rax, 0x18(%rax)
andq $0x0, 0x20(%rax)
leaq -0x140(%rbp), %rdi
leaq -0x248(%rbp), %rsi
callq 0x21970
movq -0x230(%rbp), %r15
leaq -0xa0(%rbp), %r14
leaq -0xb08(%rbp), %rbx
leaq -0xf0(%rbp), %r13
leaq -0x240(%rbp), %rax
cmpq %rax, %r15
je 0x5a30
andq $0x0, -0x90(%rbp)
xorps %xmm0, %xmm0
movaps %xmm0, -0xa0(%rbp)
leaq 0x20(%r15), %r12
cmpb $0x0, -0x60(%rbp)
je 0x5996
andl $0x0, -0xb08(%rbp)
movq %r14, %rdi
movq %rbx, %rsi
callq 0x6fce
andl $0x0, -0xb08(%rbp)
xorl %eax, %eax
movl %eax, %eax
cmpq %rax, 0x28(%r15)
jbe 0x59ee
movq (%r12), %rcx
movb (%rcx,%rax), %dl
pushq $0x1
popq %rcx
testb %dl, %dl
jns 0x597b
pushq $0x4
popq %rcx
cmpb $-0x11, %dl
ja 0x597b
cmpb $-0x20, %dl
pushq $0x2
popq %rcx
sbbl $-0x1, %ecx
addl %ecx, %eax
movl %eax, -0xb08(%rbp)
movq %r14, %rdi
movq %rbx, %rsi
callq 0x6fa8
movl -0xb08(%rbp), %eax
jmp 0x5950
movq %rbx, %rdi
movq %r12, %rsi
callq 0x4480
movq -0xa0(%rbp), %rax
cmpq %rax, -0x98(%rbp)
je 0x59b8
movq %rax, -0x98(%rbp)
xorl %eax, %eax
movl %eax, -0xf0(%rbp)
movl %eax, %eax
movq -0xb00(%rbp), %rcx
incq %rcx
cmpq %rax, %rcx
jbe 0x59e6
movq %r14, %rdi
movq %r13, %rsi
callq 0x6fa8
movl -0xf0(%rbp), %eax
incl %eax
jmp 0x59ba
movq %rbx, %rdi
callq 0x46e8
movq -0x98(%rbp), %rax
subq -0xa0(%rbp), %rax
sarq $0x2, %rax
decq %rax
cmpq -0x50(%rbp), %rax
jae 0x5a18
leaq -0x878(%rbp), %rdi
movq %r12, %rsi
callq 0x7208
movq %r14, %rdi
callq 0x6e90
movq %r15, %rdi
callq 0x43c0
movq %rax, %r15
jmp 0x5909
movq 0x305b1(%rip), %rdi     # 0x35fe8
leaq 0x1eadc(%rip), %rsi     # 0x2451a
callq 0x4350
leaq -0x1a8(%rbp), %rsi
movq %rax, %rdi
callq 0x4310
movq %rax, %rdi
callq 0x4190
leaq -0x218(%rbp), %rdi
leaq -0x1a8(%rbp), %rsi
callq 0x4480
leaq -0x218(%rbp), %rdi
leaq -0x1d8(%rbp), %rsi
leaq -0x58(%rbp), %rdx
movl -0x6c(%rbp), %ecx
callq 0x1cdb2
movl %eax, %ebx
leaq -0x218(%rbp), %rdi
callq 0x46e8
testl %ebx, %ebx
jns 0x5abc
movq 0x30548(%rip), %rdi     # 0x35fe8
leaq 0x1ea86(%rip), %rsi     # 0x2452d
callq 0x4350
movq %rax, %rdi
callq 0x4190
pushq $0x1
popq %rdi
callq 0x43d0
movq 0x30525(%rip), %rdi     # 0x35fe8
leaq 0x1ee5c(%rip), %rsi     # 0x24926
callq 0x4350
leaq 0x1ea7e(%rip), %rsi     # 0x24554
movq %rax, %rdi
callq 0x4350
movq -0x1b0(%rbp), %rsi
movq %rax, %rdi
callq 0x4260
movq %rax, %rdi
callq 0x4190
movq 0x304ec(%rip), %rdi     # 0x35fe8
leaq 0x1ee23(%rip), %rsi     # 0x24926
callq 0x4350
leaq 0x1ea55(%rip), %rsi     # 0x24564
movq %rax, %rdi
callq 0x4350
movl -0x58(%rbp), %esi
movq %rax, %rdi
callq 0x4600
movq %rax, %rdi
callq 0x4190
movq 0x304b7(%rip), %rdi     # 0x35fe8
leaq 0x1ea42(%rip), %rsi     # 0x2457a
callq 0x4350
leaq -0x168(%rbp), %rsi
movq %rax, %rdi
callq 0x4310
movq %rax, %rdi
callq 0x4190
leaq -0xc00(%rbp), %rdi
leaq -0x168(%rbp), %rsi
callq 0x13116
leaq -0xc00(%rbp), %rdi
leaq -0x140(%rbp), %rsi
callq 0x12dce
movq 0x30467(%rip), %rcx     # 0x35fe8
movq (%rcx), %rax
movq -0x18(%rax), %rax
movq $0xf, 0x8(%rcx,%rax)
movq -0x68(%rbp), %rax
shrl %eax
movq %rax, -0x68(%rbp)
movq $0x0, -0x50(%rbp)
pushq $0x1
popq %r15
leaq -0x140(%rbp), %rbx
leaq -0xc00(%rbp), %r14
leaq -0xc0(%rbp), %r13
movq 0x30425(%rip), %rdi     # 0x35fe8
leaq 0x1e9be(%rip), %rsi     # 0x24588
callq 0x4350
movq %rax, %rdi
movl %r15d, %esi
callq 0x4600
movq %rax, %rdi
callq 0x4190
movq %rbx, %rdi
movq %r14, %rsi
callq 0x187a6
leaq -0x1d8(%rbp), %rdi
movq %r14, %rsi
leaq -0x2a8(%rbp), %rdx
leaq -0x278(%rbp), %rcx
movl -0x30(%rbp), %r8d
callq 0x2031e
movsd %xmm0, -0x60(%rbp)
movq %rbx, %rdi
leaq -0x2a8(%rbp), %rsi
callq 0x7766
movq %rbx, %rdi
movsd 0x1e3db(%rip), %xmm0    # 0x24008
callq 0x204d4
leaq -0x2a8(%rbp), %rdi
callq 0x783a
movq 0x303a3(%rip), %rdi     # 0x35fe8
leaq 0x1e947(%rip), %rsi     # 0x24593
callq 0x4350
movq %rax, %rdi
movsd -0x60(%rbp), %xmm0
callq 0x4560
movq %rax, %rdi
callq 0x4190
movq 0x3037b(%rip), %rdi     # 0x35fe8
leaq 0x1e87a(%rip), %rsi     # 0x244ee
callq 0x4350
movq %rax, %r12
movq %rbx, %rdi
callq 0x2191e
movq %r12, %rdi
movl %eax, %esi
callq 0x4600
movq %rax, %rdi
callq 0x4190
movq 0x3034b(%rip), %rdi     # 0x35fe8
leaq 0x1e863(%rip), %rsi     # 0x24507
callq 0x4350
movq -0x118(%rbp), %rsi
movq %rax, %rdi
callq 0x4260
movq %rax, %rdi
callq 0x4190
cmpl $0x0, -0x2c(%rbp)
sete %al
cmpl $0x1, %r15d
setne %cl
orb %al, %cl
jne 0x5ceb
movq -0x118(%rbp), %rcx
movq %rcx, %rax
xorl %edx, %edx
divq -0xc8(%rbp)
subl %edx, %ecx
movq %rcx, -0x50(%rbp)
movq 0x302f6(%rip), %rdi     # 0x35fe8
leaq 0x1e8af(%rip), %rsi     # 0x245a8
callq 0x4350
movq %rax, %rdi
callq 0x4190
andl $0x0, -0x98(%rbp)
andq $0x0, -0x90(%rbp)
leaq -0x98(%rbp), %rax
movq %rax, -0x88(%rbp)
movq %rax, -0x80(%rbp)
andq $0x0, -0x78(%rbp)
movl -0x54(%rbp), %edi
leaq -0x278(%rbp), %rsi
leaq -0xa0(%rbp), %rdx
leaq -0x878(%rbp), %rcx
callq 0x22066
movq 0x30298(%rip), %rdi     # 0x35fe8
leaq 0x1e86b(%rip), %rsi     # 0x245c2
callq 0x4350
movq %rax, %rdi
callq 0x4190
movq %rbx, %rdi
movq %r14, %rsi
callq 0x187a6
movl -0x70(%rbp), %eax
movl %eax, (%rsp)
leaq -0x1d8(%rbp), %rdi
movq %r14, %rsi
leaq -0x278(%rbp), %rdx
movq %rbx, %rcx
leaq -0xa0(%rbp), %r8
movl -0x30(%rbp), %r9d
callq 0x222ec
xorps %xmm0, %xmm0
movaps %xmm0, -0x110(%rbp)
andq $0x0, -0x100(%rbp)
leaq -0xa0(%rbp), %rdi
leaq -0x110(%rbp), %rsi
pushq $0x1
popq %rdx
callq 0x1d340
xorps %xmm0, %xmm0
movaps %xmm0, -0xc0(%rbp)
andq $0x0, -0xb0(%rbp)
movq -0x110(%rbp), %r12
cmpq -0x108(%rbp), %r12
je 0x5e22
movq %r13, %rdi
movq %r12, %rsi
callq 0x65de
movq -0x118(%rbp), %rax
movq -0xb8(%rbp), %rcx
subq -0xc0(%rbp), %rcx
sarq $0x5, %rcx
subq %rcx, %rax
xorl %edx, %edx
divq -0x148(%rbp)
addq $0x28, %r12
testq %rdx, %rdx
jne 0x5dda
cmpq -0x68(%rbp), %rcx
jb 0x5dda
movq %r13, %rdi
movq %rbx, %rsi
callq 0x21434
movq -0xc0(%rbp), %r12
cmpq -0xb8(%rbp), %r12
je 0x5e4e
movq %r14, %rdi
movq %r12, %rsi
callq 0x12c92
addq $0x20, %r12
jmp 0x5e34
leaq -0x1d8(%rbp), %rdi
movq %r14, %rsi
movq %rbx, %rdx
movl -0x30(%rbp), %ecx
pushq $0x1
popq %r8
callq 0x20214
movq %r14, %rdi
movq %rbx, %rsi
callq 0x12dce
movq -0x118(%rbp), %r12
cmpl $0x0, -0x2c(%rbp)
je 0x5f77
movl -0x50(%rbp), %eax
cmpq %rax, %r12
seta %al
cmpq -0xd0(%rbp), %r12
setbe %cl
orb %al, %cl
jne 0x5f77
leaq -0xb08(%rbp), %rdi
callq 0x4470
leaq -0xb08(%rbp), %rdi
leaq 0x1e71f(%rip), %rsi     # 0x245d7
callq 0x4350
movq -0x118(%rbp), %rsi
movq %rax, %rdi
callq 0x4260
movq %rax, %rdi
leaq 0x1e70e(%rip), %rsi     # 0x245e4
callq 0x4350
movq 0x30106(%rip), %rdi     # 0x35fe8
leaq 0x1e6ff(%rip), %rsi     # 0x245e8
callq 0x4350
movq %rax, %r12
leaq -0xf0(%rbp), %rdi
leaq -0xb00(%rbp), %rsi
callq 0x4540
movq %r12, %rdi
leaq -0xf0(%rbp), %rsi
callq 0x4310
movq %rax, %rdi
callq 0x4190
leaq -0xf0(%rbp), %r12
movq %r12, %rdi
callq 0x46e8
movq %r12, %rdi
leaq -0xb00(%rbp), %rsi
callq 0x4540
movq %rbx, %rdi
leaq -0xf0(%rbp), %rsi
xorl %edx, %edx
pushq $0x6
popq %rcx
callq 0x2101c
leaq -0xf0(%rbp), %rdi
callq 0x46e8
movq -0x50(%rbp), %rax
subl -0x2c(%rbp), %eax
movq %rax, -0x50(%rbp)
leaq -0xb08(%rbp), %rdi
callq 0x40d0
movq -0x118(%rbp), %r12
incl %r15d
movq %r13, %rdi
callq 0x661a
leaq -0x110(%rbp), %rdi
callq 0x6646
leaq -0xa0(%rbp), %rdi
callq 0x7438
cmpq -0xd0(%rbp), %r12
ja 0x5bbc
leaq -0x140(%rbp), %rdi
leaq -0x1f8(%rbp), %rsi
pushq $0x6
popq %rcx
xorl %edx, %edx
callq 0x2101c
xorl %edi, %edi
callq 0x43d0
jmp 0x602d
jmp 0x5fcc
jmp 0x5fdf
movq %rax, %rbx
leaq -0xf0(%rbp), %rdi
callq 0x46e8
jmp 0x5fe2
jmp 0x5fdf
movq %rax, %rbx
leaq -0xb08(%rbp), %rdi
callq 0x40d0
jmp 0x5ff9
jmp 0x5ff6
jmp 0x5ff6
jmp 0x5ff6
movq %rax, %rbx
leaq -0xc0(%rbp), %rdi
callq 0x661a
jmp 0x600a
movq %rax, %rbx
leaq -0x110(%rbp), %rdi
callq 0x6646
jmp 0x601b
movq %rax, %rbx
leaq -0xa0(%rbp), %rdi
callq 0x7438
jmp 0x6065
jmp 0x602d
jmp 0x602d
movq %rax, %rbx
jmp 0x6065
movq %rax, %rbx
leaq -0x218(%rbp), %rdi
callq 0x46e8
jmp 0x6065
jmp 0x6056
movq %rax, %rbx
leaq -0xb08(%rbp), %rdi
callq 0x46e8
jmp 0x6059
movq %rax, %rbx
leaq -0xa0(%rbp), %rdi
callq 0x6e90
leaq -0x248(%rbp), %rdi
callq 0x7438
jmp 0x6078
jmp 0x6075
movq %rax, %rbx
leaq -0x878(%rbp), %rdi
callq 0x74b0
leaq -0x278(%rbp), %rdi
callq 0x7438
leaq -0x2a8(%rbp), %rdi
callq 0x7528
leaq -0x140(%rbp), %rdi
callq 0x7528
leaq -0xc00(%rbp), %rdi
callq 0x122ac
jmp 0x60b9
movq %rax, %rbx
leaq -0x1d8(%rbp), %rdi
callq 0x7438
leaq -0x960(%rbp), %rdi
callq 0x7438
leaq -0x990(%rbp), %rdi
callq 0x7438
jmp 0x611f
jmp 0x611c
movq %rax, %rbx
leaq -0x2c8(%rbp), %rdi
jmp 0x6115
jmp 0x611c
movq %rax, %rbx
leaq -0x2e8(%rbp), %rdi
jmp 0x6115
jmp 0x611c
movq %rax, %rbx
leaq -0x308(%rbp), %rdi
jmp 0x6115
jmp 0x611c
movq %rax, %rbx
leaq -0x328(%rbp), %rdi
callq 0x46e8
jmp 0x611f
movq %rax, %rbx
leaq -0x1f8(%rbp), %rdi
callq 0x46e8
jmp 0x6130
movq %rax, %rbx
leaq -0x168(%rbp), %rdi
callq 0x46e8
jmp 0x6141
movq %rax, %rbx
leaq -0x188(%rbp), %rdi
callq 0x46e8
jmp 0x6152
movq %rax, %rbx
leaq -0x1a8(%rbp), %rdi
jmp 0x6438
jmp 0x643f
movq %rax, %rbx
leaq -0x348(%rbp), %rdi
jmp 0x6438
jmp 0x643f
movq %rax, %rbx
leaq -0x368(%rbp), %rdi
jmp 0x6438
jmp 0x643f
movq %rax, %rbx
leaq -0x388(%rbp), %rdi
jmp 0x6438
jmp 0x643f
movq %rax, %rbx
leaq -0x3a8(%rbp), %rdi
jmp 0x6438
jmp 0x643f
jmp 0x643f
movq %rax, %rbx
leaq -0x3c8(%rbp), %rdi
callq 0x46e8
jmp 0x61cc
movq %rax, %rbx
leaq -0x3e8(%rbp), %rdi
callq 0x46e8
jmp 0x61dd
movq %rax, %rbx
leaq -0x408(%rbp), %rdi
callq 0x46e8
jmp 0x61ee
movq %rax, %rbx
leaq -0x428(%rbp), %rdi
callq 0x46e8
jmp 0x6201
jmp 0x61fe
movq %rax, %rbx
leaq -0x448(%rbp), %rdi
callq 0x46e8
jmp 0x6212
movq %rax, %rbx
leaq -0x468(%rbp), %rdi
callq 0x46e8
jmp 0x6223
movq %rax, %rbx
leaq -0x488(%rbp), %rdi
callq 0x46e8
jmp 0x6234
movq %rax, %rbx
leaq -0x4a8(%rbp), %rdi
callq 0x46e8
jmp 0x6247
jmp 0x6244
movq %rax, %rbx
leaq -0x4c8(%rbp), %rdi
callq 0x46e8
jmp 0x6258
movq %rax, %rbx
leaq -0x4e8(%rbp), %rdi
callq 0x46e8
jmp 0x6269
movq %rax, %rbx
leaq -0x508(%rbp), %rdi
callq 0x46e8
jmp 0x627a
movq %rax, %rbx
leaq -0x528(%rbp), %rdi
callq 0x46e8
jmp 0x628d
jmp 0x628a
movq %rax, %rbx
leaq -0x548(%rbp), %rdi
callq 0x46e8
jmp 0x629e
movq %rax, %rbx
leaq -0x568(%rbp), %rdi
callq 0x46e8
jmp 0x62af
movq %rax, %rbx
leaq -0x588(%rbp), %rdi
callq 0x46e8
jmp 0x62c0
movq %rax, %rbx
leaq -0x5a8(%rbp), %rdi
callq 0x46e8
jmp 0x62d3
jmp 0x62d0
movq %rax, %rbx
leaq -0x5c8(%rbp), %rdi
callq 0x46e8
jmp 0x62e4
movq %rax, %rbx
leaq -0x5e8(%rbp), %rdi
callq 0x46e8
jmp 0x62f5
movq %rax, %rbx
leaq -0x608(%rbp), %rdi
callq 0x46e8
jmp 0x6306
movq %rax, %rbx
leaq -0x628(%rbp), %rdi
callq 0x46e8
jmp 0x6319
jmp 0x6316
movq %rax, %rbx
leaq -0x648(%rbp), %rdi
callq 0x46e8
jmp 0x632a
movq %rax, %rbx
leaq -0x668(%rbp), %rdi
callq 0x46e8
jmp 0x633b
movq %rax, %rbx
leaq -0x688(%rbp), %rdi
callq 0x46e8
jmp 0x634c
movq %rax, %rbx
leaq -0x6a8(%rbp), %rdi
callq 0x46e8
jmp 0x635f
jmp 0x635c
movq %rax, %rbx
leaq -0x6c8(%rbp), %rdi
callq 0x46e8
jmp 0x6370
movq %rax, %rbx
leaq -0x6e8(%rbp), %rdi
callq 0x46e8
jmp 0x6381
movq %rax, %rbx
leaq -0x708(%rbp), %rdi
callq 0x46e8
jmp 0x6392
movq %rax, %rbx
leaq -0x728(%rbp), %rdi
callq 0x46e8
jmp 0x63a5
jmp 0x63a2
movq %rax, %rbx
leaq -0x748(%rbp), %rdi
callq 0x46e8
jmp 0x63b6
movq %rax, %rbx
leaq -0x768(%rbp), %rdi
callq 0x46e8
jmp 0x63c7
movq %rax, %rbx
leaq -0x788(%rbp), %rdi
callq 0x46e8
jmp 0x63d8
movq %rax, %rbx
leaq -0x7a8(%rbp), %rdi
callq 0x46e8
jmp 0x63eb
jmp 0x63e8
movq %rax, %rbx
leaq -0x7c8(%rbp), %rdi
callq 0x46e8
jmp 0x63fc
movq %rax, %rbx
leaq -0x7e8(%rbp), %rdi
callq 0x46e8
jmp 0x640d
movq %rax, %rbx
leaq -0x808(%rbp), %rdi
callq 0x46e8
jmp 0x641e
movq %rax, %rbx
leaq -0x828(%rbp), %rdi
callq 0x46e8
jmp 0x6431
jmp 0x642e
movq %rax, %rbx
leaq -0x848(%rbp), %rdi
callq 0x46e8
jmp 0x6442
movq %rax, %rbx
leaq -0x930(%rbp), %rdi
callq 0x6672
movq %rbx, %rdi
callq 0x4620