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

    conf::Config config;
    config("usage: 2g-prune-kn [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)")
      ('d', "discount=FLOAT", "arg", "0.1", "Kneser-Ney discount parameter")
      ('t', "temp-models=INT", "arg", "0", "Write out intermediate models for #V mod INT == 0")
      ('n', "no-normalization", "", "", "Do not normalize probabilities after smoothing")
      ('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];
    flt_type discount = config["discount"].get_float();
    unsigned int temp_vocab_interval = config["temp-models"].get_int();
    bool enable_fb = config["forward-backward"].specified;
    bool no_normalization = config["no-normalization"].specified;
    bool normalize_by_bigrams = config["normalize-by-bigrams"].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, discount: " << discount << 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, no normalization after smoothing: " << no_normalization << 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);
        Bigrams::kn_smooth(trans_stats, transitions, discount);
        if (!no_normalization) Bigrams::normalize(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, short_subwords);

        // 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_kn(words, msfg, transitions, enable_fb, discount, 1);
        if (!no_normalization) Bigrams::normalize(transitions);
        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 $0xd08, %rsp            # imm = 0xD08
movq %rsi, %rbx
movl %edi, %r14d
leaq -0x990(%rbp), %rdi
callq 0x975e
leaq -0x898(%rbp), %r12
movq %r12, -0x10(%r12)
leaq 0x22ecb(%rip), %rsi     # 0x28020
leaq 0x22f15(%rip), %rdx     # 0x28071
leaq -0x8a8(%rbp), %rdi
callq 0x8a1e
leaq -0x990(%rbp), %rdi
leaq -0x8a8(%rbp), %rsi
callq 0x97c4
movq %rax, %r15
leaq -0x878(%rbp), %r13
movq %r13, -0x10(%r13)
leaq 0x22eea(%rip), %rsi     # 0x2807a
leaq 0x22ee7(%rip), %rdx     # 0x2807e
leaq -0x888(%rbp), %rdi
callq 0x8a1e
leaq -0x1a0(%rbp), %rax
movq %rax, -0x10(%rax)
leaq 0x238b2(%rip), %rdx     # 0x28a67
leaq -0x1b0(%rbp), %rdi
movq %rdx, %rsi
callq 0x8a1e
leaq -0x6f8(%rbp), %rax
movq %rax, -0x10(%rax)
leaq 0x23891(%rip), %rdx     # 0x28a67
leaq -0x708(%rbp), %rdi
movq %rdx, %rsi
callq 0x8a1e
leaq -0x6d8(%rbp), %rax
movq %rax, -0x10(%rax)
leaq 0x22e7b(%rip), %rsi     # 0x28072
leaq 0x22e80(%rip), %rdx     # 0x2807e
leaq -0x6e8(%rbp), %rdi
callq 0x8a1e
leaq -0x888(%rbp), %rdx
leaq -0x1b0(%rbp), %rcx
leaq -0x708(%rbp), %r8
leaq -0x6e8(%rbp), %r9
movq %r15, %rdi
movl $0x68, %esi
callq 0x97dc
movq %rax, %r15
leaq -0x180(%rbp), %rax
movq %rax, -0x10(%rax)
leaq 0x22e37(%rip), %rsi     # 0x2807f
leaq 0x22e3e(%rip), %rdx     # 0x2808d
leaq -0x190(%rbp), %rdi
callq 0x8a1e
leaq -0x160(%rbp), %rax
movq %rax, -0x10(%rax)
leaq 0x22e21(%rip), %rsi     # 0x2808e
leaq 0x22e1d(%rip), %rdx     # 0x28091
leaq -0x170(%rbp), %rdi
callq 0x8a1e
leaq -0x6b8(%rbp), %rax
movq %rax, -0x10(%rax)
leaq 0x22e00(%rip), %rsi     # 0x28092
leaq 0x22dfd(%rip), %rdx     # 0x28096
leaq -0x6c8(%rbp), %rdi
callq 0x8a1e
leaq -0x698(%rbp), %rax
movq %rax, -0x10(%rax)
leaq 0x22de0(%rip), %rsi     # 0x28097
leaq 0x22e14(%rip), %rdx     # 0x280d2
leaq -0x6a8(%rbp), %rdi
callq 0x8a1e
leaq -0x190(%rbp), %rdx
leaq -0x170(%rbp), %rcx
leaq -0x6c8(%rbp), %r8
leaq -0x6a8(%rbp), %r9
movq %r15, %rdi
movl $0x63, %esi
callq 0x97dc
movq %rax, %r15
leaq -0x678(%rbp), %rax
movq %rax, -0x10(%rax)
leaq 0x22dcb(%rip), %rsi     # 0x280d3
leaq 0x22dd0(%rip), %rdx     # 0x280df
leaq -0x688(%rbp), %rdi
callq 0x8a1e
leaq -0x658(%rbp), %rax
movq %rax, -0x10(%rax)
leaq 0x22d61(%rip), %rsi     # 0x2808e
leaq 0x22d5d(%rip), %rdx     # 0x28091
leaq -0x668(%rbp), %rdi
callq 0x8a1e
leaq -0x638(%rbp), %rax
movq %rax, -0x10(%rax)
leaq 0x22d8e(%rip), %rsi     # 0x280e0
leaq 0x22d8a(%rip), %rdx     # 0x280e3
leaq -0x648(%rbp), %rdi
callq 0x8a1e
leaq -0x618(%rbp), %rax
movq %rax, -0x10(%rax)
leaq 0x22d6d(%rip), %rsi     # 0x280e4
leaq 0x22d86(%rip), %rdx     # 0x28104
leaq -0x628(%rbp), %rdi
callq 0x8a1e
leaq -0x688(%rbp), %rdx
leaq -0x668(%rbp), %rcx
leaq -0x648(%rbp), %r8
leaq -0x628(%rbp), %r9
movq %r15, %rdi
movl $0x72, %esi
callq 0x97dc
movq %rax, %r15
leaq -0x5f8(%rbp), %rax
movq %rax, -0x10(%rax)
leaq 0x22d3d(%rip), %rsi     # 0x28105
leaq 0x22d44(%rip), %rdx     # 0x28113
leaq -0x608(%rbp), %rdi
callq 0x8a1e
leaq -0x5d8(%rbp), %rax
movq %rax, -0x10(%rax)
leaq 0x22ca1(%rip), %rsi     # 0x2808e
leaq 0x22c9d(%rip), %rdx     # 0x28091
leaq -0x5e8(%rbp), %rdi
callq 0x8a1e
leaq -0x5b8(%rbp), %rax
movq %rax, -0x10(%rax)
leaq 0x22d31(%rip), %rsi     # 0x28143
leaq 0x22d2b(%rip), %rdx     # 0x28144
leaq -0x5c8(%rbp), %rdi
callq 0x8a1e
leaq -0x598(%rbp), %rax
movq %rax, -0x10(%rax)
leaq 0x22cdd(%rip), %rsi     # 0x28114
leaq 0x22d06(%rip), %rdx     # 0x28144
leaq -0x5a8(%rbp), %rdi
callq 0x8a1e
leaq -0x608(%rbp), %rdx
leaq -0x5e8(%rbp), %rcx
leaq -0x5c8(%rbp), %r8
leaq -0x5a8(%rbp), %r9
movq %r15, %rdi
movl $0x6d, %esi
callq 0x97dc
movq %rax, %r15
leaq -0x578(%rbp), %rax
movq %rax, -0x10(%rax)
leaq 0x22cbd(%rip), %rsi     # 0x28145
leaq 0x22cc4(%rip), %rdx     # 0x28153
leaq -0x588(%rbp), %rdi
callq 0x8a1e
leaq -0x558(%rbp), %rax
movq %rax, -0x10(%rax)
leaq 0x22ca7(%rip), %rsi     # 0x28154
leaq 0x22ca8(%rip), %rdx     # 0x2815c
leaq -0x568(%rbp), %rdi
callq 0x8a1e
leaq -0x538(%rbp), %rax
movq %rax, -0x10(%rax)
leaq 0x23595(%rip), %rdx     # 0x28a67
leaq -0x548(%rbp), %rdi
movq %rdx, %rsi
callq 0x8a1e
leaq -0x518(%rbp), %rax
movq %rax, -0x10(%rax)
leaq 0x22c6a(%rip), %rsi     # 0x2815d
leaq 0x22c8e(%rip), %rdx     # 0x28188
leaq -0x528(%rbp), %rdi
callq 0x8a1e
leaq -0x588(%rbp), %rdx
leaq -0x568(%rbp), %rcx
leaq -0x548(%rbp), %r8
leaq -0x528(%rbp), %r9
movq %r15, %rdi
movl $0x76, %esi
callq 0x97dc
movq %rax, %r15
leaq -0x4f8(%rbp), %rax
movq %rax, -0x10(%rax)
leaq 0x22c45(%rip), %rsi     # 0x28189
leaq 0x22c4c(%rip), %rdx     # 0x28197
leaq -0x508(%rbp), %rdi
callq 0x8a1e
leaq -0x4d8(%rbp), %rax
movq %rax, -0x10(%rax)
leaq 0x22b25(%rip), %rsi     # 0x2808e
leaq 0x22b21(%rip), %rdx     # 0x28091
leaq -0x4e8(%rbp), %rdi
callq 0x8a1e
leaq -0x4b8(%rbp), %rax
movq %rax, -0x10(%rax)
leaq 0x22c0a(%rip), %rsi     # 0x28198
leaq 0x22c06(%rip), %rdx     # 0x2819b
leaq -0x4c8(%rbp), %rdi
callq 0x8a1e
leaq -0x498(%rbp), %rax
movq %rax, -0x10(%rax)
leaq 0x22be9(%rip), %rsi     # 0x2819c
leaq 0x22bff(%rip), %rdx     # 0x281b9
leaq -0x4a8(%rbp), %rdi
callq 0x8a1e
leaq -0x508(%rbp), %rdx
leaq -0x4e8(%rbp), %rcx
leaq -0x4c8(%rbp), %r8
leaq -0x4a8(%rbp), %r9
movq %r15, %rdi
movl $0x64, %esi
callq 0x97dc
movq %rax, %r15
leaq -0x478(%rbp), %rax
movq %rax, -0x10(%rax)
leaq 0x22bb6(%rip), %rsi     # 0x281ba
leaq 0x22bbe(%rip), %rdx     # 0x281c9
leaq -0x488(%rbp), %rdi
callq 0x8a1e
leaq -0x458(%rbp), %rax
movq %rax, -0x10(%rax)
leaq 0x22a65(%rip), %rsi     # 0x2808e
leaq 0x22a61(%rip), %rdx     # 0x28091
leaq -0x468(%rbp), %rdi
callq 0x8a1e
leaq -0x438(%rbp), %rax
movq %rax, -0x10(%rax)
leaq 0x22bac(%rip), %rsi     # 0x281fa
leaq 0x22ba6(%rip), %rdx     # 0x281fb
leaq -0x448(%rbp), %rdi
callq 0x8a1e
leaq -0x418(%rbp), %rax
movq %rax, -0x10(%rax)
leaq 0x22b57(%rip), %rsi     # 0x281ca
leaq 0x22b81(%rip), %rdx     # 0x281fb
leaq -0x428(%rbp), %rdi
callq 0x8a1e
leaq -0x488(%rbp), %rdx
leaq -0x468(%rbp), %rcx
leaq -0x448(%rbp), %r8
leaq -0x428(%rbp), %r9
movq %r15, %rdi
movl $0x74, %esi
callq 0x97dc
movq %rax, %r15
leaq -0x3f8(%rbp), %rax
movq %rax, -0x10(%rax)
leaq 0x22b38(%rip), %rsi     # 0x281fc
leaq 0x22b41(%rip), %rdx     # 0x2820c
leaq -0x408(%rbp), %rdi
callq 0x8a1e
leaq -0x3d8(%rbp), %rax
movq %rax, -0x10(%rax)
leaq 0x2337e(%rip), %rdx     # 0x28a67
leaq -0x3e8(%rbp), %rdi
movq %rdx, %rsi
callq 0x8a1e
leaq -0x3b8(%rbp), %rax
movq %rax, -0x10(%rax)
leaq 0x2335d(%rip), %rdx     # 0x28a67
leaq -0x3c8(%rbp), %rdi
movq %rdx, %rsi
callq 0x8a1e
leaq -0x398(%rbp), %rax
movq %rax, -0x10(%rax)
leaq 0x22ae2(%rip), %rsi     # 0x2820d
leaq 0x22b09(%rip), %rdx     # 0x2823b
leaq -0x3a8(%rbp), %rdi
callq 0x8a1e
leaq -0x408(%rbp), %rdx
leaq -0x3e8(%rbp), %rcx
leaq -0x3c8(%rbp), %r8
leaq -0x3a8(%rbp), %r9
movq %r15, %rdi
movl $0x6e, %esi
callq 0x97dc
movq %rax, %r15
leaq -0x378(%rbp), %rax
movq %rax, -0x10(%rax)
leaq 0x22ac0(%rip), %rsi     # 0x2823c
leaq 0x22acd(%rip), %rdx     # 0x28250
leaq -0x388(%rbp), %rdi
callq 0x8a1e
leaq -0x358(%rbp), %rax
movq %rax, -0x10(%rax)
leaq 0x232c6(%rip), %rdx     # 0x28a67
leaq -0x368(%rbp), %rdi
movq %rdx, %rsi
callq 0x8a1e
leaq -0x338(%rbp), %rax
movq %rax, -0x10(%rax)
leaq 0x232a5(%rip), %rdx     # 0x28a67
leaq -0x348(%rbp), %rdi
movq %rdx, %rsi
callq 0x8a1e
leaq -0x318(%rbp), %rax
movq %rax, -0x10(%rax)
leaq 0x22a6e(%rip), %rsi     # 0x28251
leaq 0x22a98(%rip), %rdx     # 0x28282
leaq -0x328(%rbp), %rdi
callq 0x8a1e
leaq -0x388(%rbp), %rdx
leaq -0x368(%rbp), %rcx
leaq -0x348(%rbp), %r8
leaq -0x328(%rbp), %r9
movq %r15, %rdi
movl $0x62, %esi
callq 0x97dc
movq %rax, %r15
leaq -0x2f8(%rbp), %rax
movq %rax, -0x10(%rax)
leaq 0x22a4f(%rip), %rsi     # 0x28283
leaq 0x22a58(%rip), %rdx     # 0x28293
leaq -0x308(%rbp), %rdi
callq 0x8a1e
leaq -0x2d8(%rbp), %rax
movq %rax, -0x10(%rax)
leaq 0x2320e(%rip), %rdx     # 0x28a67
leaq -0x2e8(%rbp), %rdi
movq %rdx, %rsi
callq 0x8a1e
leaq -0x2b8(%rbp), %rax
movq %rax, -0x10(%rax)
leaq 0x231ed(%rip), %rdx     # 0x28a67
leaq -0x2c8(%rbp), %rdi
movq %rdx, %rsi
callq 0x8a1e
leaq -0x298(%rbp), %rax
movq %rax, -0x10(%rax)
leaq 0x229f9(%rip), %rsi     # 0x28294
leaq 0x22a26(%rip), %rdx     # 0x282c8
leaq -0x2a8(%rbp), %rdi
callq 0x8a1e
leaq -0x308(%rbp), %rdx
leaq -0x2e8(%rbp), %rcx
leaq -0x2c8(%rbp), %r8
leaq -0x2a8(%rbp), %r9
movq %r15, %rdi
movl $0x66, %esi
callq 0x97dc
movq %rax, %r15
leaq -0x278(%rbp), %rax
movq %rax, -0x10(%rax)
leaq 0x229dd(%rip), %rsi     # 0x282c9
leaq 0x229db(%rip), %rdx     # 0x282ce
leaq -0x288(%rbp), %rdi
callq 0x8a1e
leaq -0x258(%rbp), %rax
movq %rax, -0x10(%rax)
leaq 0x23156(%rip), %rdx     # 0x28a67
leaq -0x268(%rbp), %rdi
movq %rdx, %rsi
callq 0x8a1e
leaq -0x238(%rbp), %rax
movq %rax, -0x10(%rax)
leaq 0x23135(%rip), %rdx     # 0x28a67
leaq -0x248(%rbp), %rdi
movq %rdx, %rsi
callq 0x8a1e
leaq -0x218(%rbp), %rax
movq %rax, -0x10(%rax)
leaq 0x2297c(%rip), %rsi     # 0x282cf
leaq 0x22994(%rip), %rdx     # 0x282ee
leaq -0x228(%rbp), %rdi
callq 0x8a1e
leaq -0x288(%rbp), %rdx
leaq -0x268(%rbp), %rcx
leaq -0x248(%rbp), %r8
leaq -0x228(%rbp), %r9
movq %r15, %rdi
movl $0x38, %esi
callq 0x97dc
movq -0x228(%rbp), %rdi
leaq -0x218(%rbp), %rax
cmpq %rax, %rdi
je 0x59a7
callq 0x4360
movq -0x248(%rbp), %rdi
leaq -0x238(%rbp), %rax
cmpq %rax, %rdi
je 0x59bf
callq 0x4360
movq -0x268(%rbp), %rdi
leaq -0x258(%rbp), %rax
cmpq %rax, %rdi
je 0x59d7
callq 0x4360
movq -0x288(%rbp), %rdi
leaq -0x278(%rbp), %rax
cmpq %rax, %rdi
je 0x59ef
callq 0x4360
movq -0x2a8(%rbp), %rdi
leaq -0x298(%rbp), %rax
cmpq %rax, %rdi
je 0x5a07
callq 0x4360
movq -0x2c8(%rbp), %rdi
leaq -0x2b8(%rbp), %rax
cmpq %rax, %rdi
je 0x5a1f
callq 0x4360
movq -0x2e8(%rbp), %rdi
leaq -0x2d8(%rbp), %rax
cmpq %rax, %rdi
je 0x5a37
callq 0x4360
movq -0x308(%rbp), %rdi
leaq -0x2f8(%rbp), %rax
cmpq %rax, %rdi
je 0x5a4f
callq 0x4360
movq -0x328(%rbp), %rdi
leaq -0x318(%rbp), %rax
cmpq %rax, %rdi
je 0x5a67
callq 0x4360
movq -0x348(%rbp), %rdi
leaq -0x338(%rbp), %rax
cmpq %rax, %rdi
je 0x5a7f
callq 0x4360
movq -0x368(%rbp), %rdi
leaq -0x358(%rbp), %rax
cmpq %rax, %rdi
je 0x5a97
callq 0x4360
movq -0x388(%rbp), %rdi
leaq -0x378(%rbp), %rax
cmpq %rax, %rdi
je 0x5aaf
callq 0x4360
movq -0x3a8(%rbp), %rdi
leaq -0x398(%rbp), %rax
cmpq %rax, %rdi
je 0x5ac7
callq 0x4360
movq -0x3c8(%rbp), %rdi
leaq -0x3b8(%rbp), %rax
cmpq %rax, %rdi
je 0x5adf
callq 0x4360
movq -0x3e8(%rbp), %rdi
leaq -0x3d8(%rbp), %rax
cmpq %rax, %rdi
je 0x5af7
callq 0x4360
movq -0x408(%rbp), %rdi
leaq -0x3f8(%rbp), %rax
cmpq %rax, %rdi
je 0x5b0f
callq 0x4360
movq -0x428(%rbp), %rdi
leaq -0x418(%rbp), %rax
cmpq %rax, %rdi
je 0x5b27
callq 0x4360
movq -0x448(%rbp), %rdi
leaq -0x438(%rbp), %rax
cmpq %rax, %rdi
je 0x5b3f
callq 0x4360
movq -0x468(%rbp), %rdi
leaq -0x458(%rbp), %rax
cmpq %rax, %rdi
je 0x5b57
callq 0x4360
movq -0x488(%rbp), %rdi
leaq -0x478(%rbp), %rax
cmpq %rax, %rdi
je 0x5b6f
callq 0x4360
movq -0x4a8(%rbp), %rdi
leaq -0x498(%rbp), %rax
cmpq %rax, %rdi
je 0x5b87
callq 0x4360
movq -0x4c8(%rbp), %rdi
leaq -0x4b8(%rbp), %rax
cmpq %rax, %rdi
je 0x5b9f
callq 0x4360
movq -0x4e8(%rbp), %rdi
leaq -0x4d8(%rbp), %rax
cmpq %rax, %rdi
je 0x5bb7
callq 0x4360
movq -0x508(%rbp), %rdi
leaq -0x4f8(%rbp), %rax
cmpq %rax, %rdi
je 0x5bcf
callq 0x4360
movq -0x528(%rbp), %rdi
leaq -0x518(%rbp), %rax
cmpq %rax, %rdi
je 0x5be7
callq 0x4360
movq -0x548(%rbp), %rdi
leaq -0x538(%rbp), %rax
cmpq %rax, %rdi
je 0x5bff
callq 0x4360
movq -0x568(%rbp), %rdi
leaq -0x558(%rbp), %rax
cmpq %rax, %rdi
je 0x5c17
callq 0x4360
movq -0x588(%rbp), %rdi
leaq -0x578(%rbp), %rax
cmpq %rax, %rdi
je 0x5c2f
callq 0x4360
movq -0x5a8(%rbp), %rdi
leaq -0x598(%rbp), %rax
cmpq %rax, %rdi
je 0x5c47
callq 0x4360
movq -0x5c8(%rbp), %rdi
leaq -0x5b8(%rbp), %rax
cmpq %rax, %rdi
je 0x5c5f
callq 0x4360
movq -0x5e8(%rbp), %rdi
leaq -0x5d8(%rbp), %rax
cmpq %rax, %rdi
je 0x5c77
callq 0x4360
movq -0x608(%rbp), %rdi
leaq -0x5f8(%rbp), %rax
cmpq %rax, %rdi
je 0x5c8f
callq 0x4360
movq -0x628(%rbp), %rdi
leaq -0x618(%rbp), %rax
cmpq %rax, %rdi
je 0x5ca7
callq 0x4360
movq -0x648(%rbp), %rdi
leaq -0x638(%rbp), %rax
cmpq %rax, %rdi
je 0x5cbf
callq 0x4360
movq -0x668(%rbp), %rdi
leaq -0x658(%rbp), %rax
cmpq %rax, %rdi
je 0x5cd7
callq 0x4360
movq -0x688(%rbp), %rdi
leaq -0x678(%rbp), %rax
cmpq %rax, %rdi
je 0x5cef
callq 0x4360
movq -0x6a8(%rbp), %rdi
leaq -0x698(%rbp), %rax
cmpq %rax, %rdi
je 0x5d07
callq 0x4360
movq -0x6c8(%rbp), %rdi
leaq -0x6b8(%rbp), %rax
cmpq %rax, %rdi
je 0x5d1f
callq 0x4360
movq -0x170(%rbp), %rdi
leaq -0x160(%rbp), %rax
cmpq %rax, %rdi
je 0x5d37
callq 0x4360
movq -0x190(%rbp), %rdi
leaq -0x180(%rbp), %rax
cmpq %rax, %rdi
je 0x5d4f
callq 0x4360
movq -0x6e8(%rbp), %rdi
leaq -0x6d8(%rbp), %rax
cmpq %rax, %rdi
je 0x5d67
callq 0x4360
movq -0x708(%rbp), %rdi
leaq -0x6f8(%rbp), %rax
cmpq %rax, %rdi
je 0x5d7f
callq 0x4360
movq -0x1b0(%rbp), %rdi
leaq -0x1a0(%rbp), %rax
cmpq %rax, %rdi
je 0x5d97
callq 0x4360
movq -0x888(%rbp), %rdi
cmpq %r13, %rdi
je 0x5da8
callq 0x4360
movq -0x8a8(%rbp), %rdi
cmpq %r12, %rdi
je 0x5db9
callq 0x4360
leaq -0x990(%rbp), %rdi
movl %r14d, %esi
movq %rbx, %rdx
callq 0xa22a
movq -0x8f0(%rbp), %rax
subq -0x8f8(%rbp), %rax
cmpq $0x80, %rax
je 0x5dfc
movq 0x301e0(%rip), %rax     # 0x35fc8
movq (%rax), %rsi
leaq -0x990(%rbp), %rdi
movl $0x1, %edx
callq 0xa7cc
leaq -0x858(%rbp), %r14
movq %r14, -0x10(%r14)
leaq 0x224e1(%rip), %rsi     # 0x282ef
leaq 0x224e4(%rip), %rdx     # 0x282f9
leaq -0x868(%rbp), %rdi
callq 0x8a1e
leaq -0x990(%rbp), %rdi
leaq -0x868(%rbp), %rsi
callq 0xa2e4
movq %rax, %rdi
callq 0x9680
movl %eax, -0x3c(%rbp)
movq -0x868(%rbp), %rdi
cmpq %r14, %rdi
je 0x5e50
callq 0x4360
leaq -0x838(%rbp), %r14
movq %r14, -0x10(%r14)
leaq 0x22498(%rip), %rsi     # 0x282fa
leaq 0x22499(%rip), %rdx     # 0x28302
leaq -0x848(%rbp), %rdi
callq 0x8a1e
leaq -0x990(%rbp), %rdi
leaq -0x848(%rbp), %rsi
callq 0xa2e4
movq %rax, %rdi
callq 0x9680
movq %rax, -0x50(%rbp)
movq -0x848(%rbp), %rdi
cmpq %r14, %rdi
je 0x5ea5
callq 0x4360
leaq -0x818(%rbp), %r14
movq %r14, -0x10(%r14)
leaq 0x2244c(%rip), %rsi     # 0x28303
leaq 0x2244f(%rip), %rdx     # 0x2830d
leaq -0x828(%rbp), %rdi
callq 0x8a1e
leaq -0x990(%rbp), %rdi
leaq -0x828(%rbp), %rsi
callq 0xa2e4
movq %rax, %rdi
callq 0x9680
movl %eax, -0x30(%rbp)
movq -0x828(%rbp), %rdi
cmpq %r14, %rdi
je 0x5ef9
callq 0x4360
leaq -0x7f8(%rbp), %r14
movq %r14, -0x10(%r14)
leaq 0x22403(%rip), %rsi     # 0x2830e
leaq 0x22406(%rip), %rdx     # 0x28318
leaq -0x808(%rbp), %rdi
callq 0x8a1e
leaq -0x990(%rbp), %rdi
leaq -0x808(%rbp), %rsi
callq 0xa2e4
movq %rax, %rdi
callq 0x9680
movl %eax, %ebx
movq -0x808(%rbp), %rdi
cmpq %r14, %rdi
je 0x5f4c
callq 0x4360
movq -0x8f8(%rbp), %rax
leaq -0x100(%rbp), %rcx
movq %rcx, -0x10(%rcx)
movq (%rax), %rsi
movq 0x8(%rax), %rdx
addq %rsi, %rdx
leaq -0x110(%rbp), %rdi
callq 0x8984
movq -0x8f8(%rbp), %rax
leaq -0x140(%rbp), %rcx
movq %rcx, -0x10(%rcx)
movq 0x20(%rax), %rsi
movq 0x28(%rax), %rdx
addq %rsi, %rdx
leaq -0x150(%rbp), %rdi
callq 0x8984
movq -0x8f8(%rbp), %rax
leaq -0x120(%rbp), %rcx
movq %rcx, -0x10(%rcx)
movq 0x40(%rax), %rsi
movq 0x48(%rax), %rdx
addq %rsi, %rdx
leaq -0x130(%rbp), %rdi
callq 0x8984
movq -0x8f8(%rbp), %rax
leaq -0x1f8(%rbp), %rcx
movq %rcx, -0x10(%rcx)
movq 0x60(%rax), %rsi
movq 0x68(%rax), %rdx
addq %rsi, %rdx
leaq -0x208(%rbp), %rdi
callq 0x8984
leaq -0x7d8(%rbp), %r14
movq %r14, -0x10(%r14)
leaq 0x22318(%rip), %rsi     # 0x28319
leaq 0x22319(%rip), %rdx     # 0x28321
leaq -0x7e8(%rbp), %rdi
callq 0x8a1e
leaq -0x990(%rbp), %rdi
leaq -0x7e8(%rbp), %rsi
callq 0xa2e4
movq %rax, %rdi
callq 0x96c6
movss %xmm0, -0x34(%rbp)
movq -0x7e8(%rbp), %rdi
cmpq %r14, %rdi
je 0x6045
callq 0x4360
leaq -0x7b8(%rbp), %r14
movq %r14, -0x10(%r14)
leaq 0x222cb(%rip), %rsi     # 0x28322
leaq 0x222cf(%rip), %rdx     # 0x2832d
leaq -0x7c8(%rbp), %rdi
callq 0x8a1e
leaq -0x990(%rbp), %rdi
leaq -0x7c8(%rbp), %rsi
callq 0xa2e4
movq %rax, %rdi
callq 0x9680
movl %eax, -0x38(%rbp)
movq -0x7c8(%rbp), %rdi
cmpq %r14, %rdi
je 0x6099
callq 0x4360
leaq -0x798(%rbp), %r15
movq %r15, -0x10(%r15)
leaq 0x221d8(%rip), %rsi     # 0x28283
leaq 0x221e1(%rip), %rdx     # 0x28293
leaq -0x7a8(%rbp), %rdi
callq 0x8a1e
leaq -0x990(%rbp), %rdi
leaq -0x7a8(%rbp), %rsi
callq 0xa2e4
movb 0x4a(%rax), %r14b
movq -0x7a8(%rbp), %rdi
cmpq %r15, %rdi
je 0x60e6
callq 0x4360
leaq -0x778(%rbp), %r15
movq %r15, -0x10(%r15)
leaq 0x22104(%rip), %rsi     # 0x281fc
leaq 0x2210d(%rip), %rdx     # 0x2820c
leaq -0x788(%rbp), %rdi
callq 0x8a1e
leaq -0x990(%rbp), %rdi
leaq -0x788(%rbp), %rsi
callq 0xa2e4
movb 0x4a(%rax), %al
movb %al, -0x29(%rbp)
movq -0x788(%rbp), %rdi
cmpq %r15, %rdi
je 0x6135
callq 0x4360
leaq -0x758(%rbp), %r15
movq %r15, -0x10(%r15)
leaq 0x220f5(%rip), %rsi     # 0x2823c
leaq 0x22102(%rip), %rdx     # 0x28250
leaq -0x768(%rbp), %rdi
callq 0x8a1e
leaq -0x990(%rbp), %rdi
leaq -0x768(%rbp), %rsi
callq 0xa2e4
movb 0x4a(%rax), %r13b
movq -0x768(%rbp), %rdi
cmpq %r15, %rdi
je 0x6182
callq 0x4360
leaq -0x738(%rbp), %r12
movq %r12, -0x10(%r12)
leaq 0x22134(%rip), %rsi     # 0x282c9
leaq 0x22132(%rip), %rdx     # 0x282ce
leaq -0x748(%rbp), %rdi
callq 0x8a1e
leaq -0x990(%rbp), %rdi
leaq -0x748(%rbp), %rsi
callq 0xa2e4
movb 0x4a(%rax), %r15b
movq -0x748(%rbp), %rdi
cmpq %r12, %rdi
je 0x61d0
callq 0x4360
movq 0x2fe11(%rip), %rdi     # 0x35fe8
movq (%rdi), %rax
movq -0x18(%rax), %rax
orl $0x1, 0x18(%rdi,%rax)
leaq 0x22144(%rip), %rsi     # 0x2832e
movl $0x16, %edx
callq 0x4410
movq -0x110(%rbp), %rsi
movq -0x108(%rbp), %rdx
movq 0x2fddf(%rip), %rdi     # 0x35fe8
callq 0x4410
movq %rax, %rdi
callq 0x4180
movq 0x2fdcb(%rip), %rdi     # 0x35fe8
leaq 0x22121(%rip), %rsi     # 0x28345
movl $0x21, %edx
callq 0x4410
movq -0x150(%rbp), %rsi
movq -0x148(%rbp), %rdx
movq 0x2fda5(%rip), %rdi     # 0x35fe8
callq 0x4410
movq %rax, %rdi
callq 0x4180
movq 0x2fd91(%rip), %rdi     # 0x35fe8
leaq 0x22109(%rip), %rsi     # 0x28367
movl $0x12, %edx
callq 0x4410
movq -0x130(%rbp), %rsi
movq -0x128(%rbp), %rdx
movq 0x2fd6b(%rip), %rdi     # 0x35fe8
callq 0x4410
movq %rax, %rdi
callq 0x4180
movq 0x2fd57(%rip), %rdi     # 0x35fe8
leaq 0x220e2(%rip), %rsi     # 0x2837a
movl $0x1d, %edx
callq 0x4410
movq -0x208(%rbp), %rsi
movq -0x200(%rbp), %rdx
movq 0x2fd31(%rip), %rdi     # 0x35fe8
callq 0x4410
movq %rax, %rdi
callq 0x4180
movq 0x2fd1d(%rip), %rdi     # 0x35fe8
leaq 0x220c6(%rip), %rsi     # 0x28398
movl $0x26, %edx
callq 0x4410
movl -0x3c(%rbp), %esi
movq 0x2fd02(%rip), %rdi     # 0x35fe8
callq 0x4260
movq %rax, %rdi
callq 0x4180
movq 0x2fcee(%rip), %rdi     # 0x35fe8
leaq 0x220be(%rip), %rsi     # 0x283bf
movl $0x24, %edx
callq 0x4410
movl -0x50(%rbp), %r12d
movq 0x2fcd2(%rip), %rdi     # 0x35fe8
movq %r12, %rsi
callq 0x4260
movq %rax, %rdi
callq 0x4180
movq 0x2fcbb(%rip), %rdi     # 0x35fe8
leaq 0x220b0(%rip), %rsi     # 0x283e4
movl $0x33, %edx
callq 0x4410
movl -0x30(%rbp), %esi
movq 0x2fca0(%rip), %rdi     # 0x35fe8
callq 0x4260
movq %rax, %rdi
callq 0x4180
movq 0x2fc8c(%rip), %rdi     # 0x35fe8
leaq 0x220b5(%rip), %rsi     # 0x28418
movl $0x1f, %edx
callq 0x4410
movl %ebx, %esi
movq 0x2fc72(%rip), %rdi     # 0x35fe8
movq %rsi, -0xd0(%rbp)
callq 0x4260
movq %rax, %rdi
callq 0x4180
movq 0x2fc57(%rip), %rdi     # 0x35fe8
leaq 0x220a0(%rip), %rsi     # 0x28438
movl $0x16, %edx
callq 0x4410
cvtss2sd -0x34(%rbp), %xmm0
movq 0x2fc3a(%rip), %rdi     # 0x35fe8
movsd %xmm0, -0xd8(%rbp)
callq 0x45c0
movq %rax, %rdi
callq 0x4180
movq 0x2fc1e(%rip), %rdi     # 0x35fe8
leaq 0x2207e(%rip), %rsi     # 0x2844f
movl $0x16, %edx
callq 0x4410
movq 0x2fc06(%rip), %rbx     # 0x35fe8
movsd 0x21c1e(%rip), %xmm0    # 0x28008
movq %rbx, %rdi
callq 0x45c0
movq %rax, %rdi
callq 0x4180
movl -0x38(%rbp), %eax
movl %eax, %ecx
movq %rcx, -0xc8(%rbp)
testl %eax, %eax
je 0x644e
movq 0x2fbd7(%rip), %rdi     # 0x35fe8
leaq 0x2204e(%rip), %rsi     # 0x28466
movl $0x31, %edx
callq 0x4410
movq 0x2fbbf(%rip), %rdi     # 0x35fe8
movq -0xc8(%rbp), %rsi
callq 0x4260
movq %rax, %rbx
leaq 0x21db7(%rip), %rsi     # 0x281f6
movl $0x5, %edx
movq %rax, %rdi
callq 0x4410
jmp 0x6462
leaq 0x22043(%rip), %rsi     # 0x28498
movl $0x21, %edx
movq %rbx, %rdi
callq 0x4410
movq %rbx, %rdi
callq 0x4180
movq 0x2fb77(%rip), %rdi     # 0x35fe8
leaq 0x22042(%rip), %rsi     # 0x284ba
movl $0x2e, %edx
callq 0x4410
movzbl -0x29(%rbp), %esi
movq 0x2fb5b(%rip), %rdi     # 0x35fe8
callq 0x4600
movq %rax, %rdi
callq 0x4180
movq 0x2fb47(%rip), %rdi     # 0x35fe8
leaq 0x22041(%rip), %rsi     # 0x284e9
movl $0x3f, %edx
callq 0x4410
movzbl %r13b, %esi
movq 0x2fb2b(%rip), %rdi     # 0x35fe8
movl %esi, -0x84(%rbp)
callq 0x4600
movq %rax, %rdi
callq 0x4180
movq 0x2fb11(%rip), %rdi     # 0x35fe8
leaq 0x2204b(%rip), %rsi     # 0x28529
movl $0x22, %edx
callq 0x4410
movzbl %r14b, %esi
movq 0x2faf5(%rip), %rdi     # 0x35fe8
movl %esi, -0x34(%rbp)
callq 0x4600
movq %rax, %rdi
callq 0x4180
movq 0x2fade(%rip), %rdi     # 0x35fe8
leaq 0x2203b(%rip), %rsi     # 0x2854c
movl $0x1c, %edx
callq 0x4410
movzbl %r15b, %ebx
movq 0x2fac2(%rip), %rdi     # 0x35fe8
movl %ebx, %esi
callq 0x4600
movq %rax, %rdi
callq 0x4180
leaq -0xaa8(%rbp), %rax
xorl %r14d, %r14d
movl %r14d, (%rax)
movq %r14, 0x8(%rax)
movq %rax, 0x10(%rax)
movq %rax, 0x18(%rax)
movq %r14, 0x20(%rax)
leaq -0xa78(%rbp), %rax
movl %r14d, (%rax)
movq %r14, 0x8(%rax)
movq %rax, 0x10(%rax)
movq %rax, 0x18(%rax)
movq %r14, 0x20(%rax)
leaq -0x8d0(%rbp), %rax
movl %r14d, (%rax)
movq %r14, 0x8(%rax)
movq %rax, 0x10(%rax)
movq %rax, 0x18(%rax)
movq %r14, 0x20(%rax)
leaq 0x2fe33(%rip), %rsi     # 0x363c0
leaq -0xd20(%rbp), %rdi
callq 0x77ac
leaq -0x78(%rbp), %rax
movl %r14d, (%rax)
movq %r14, 0x8(%rax)
movq %rax, 0x10(%rax)
movq %rax, 0x18(%rax)
movq %r14, 0x20(%rax)
leaq -0x9e8(%rbp), %rax
movl %r14d, (%rax)
movq %r14, 0x8(%rax)
movq %rax, 0x10(%rax)
movq %rax, 0x18(%rax)
movq %r14, 0x20(%rax)
leaq -0x9b8(%rbp), %rax
movl %r14d, (%rax)
movq %r14, 0x8(%rax)
movq %rax, 0x10(%rax)
movq %rax, 0x18(%rax)
movq %r14, 0x20(%rax)
leaq -0xa48(%rbp), %rax
movl %r14d, (%rax)
movq %r14, 0x8(%rax)
movq %rax, 0x10(%rax)
movq %rax, 0x18(%rax)
movq %r14, 0x20(%rax)
movq 0x2f9e3(%rip), %rdi     # 0x35fe8
leaq 0x21f5d(%rip), %rsi     # 0x28569
movl $0x1c, %edx
callq 0x4410
movq -0x150(%rbp), %rsi
movq -0x148(%rbp), %rdx
movq 0x2f9bd(%rip), %rdi     # 0x35fe8
callq 0x4410
movq %rax, %rdi
callq 0x4180
leaq -0x80(%rbp), %rdi
leaq -0x150(%rbp), %rsi
callq 0x24442
testl %eax, %eax
jns 0x6675
movq 0x2f995(%rip), %rdi     # 0x35fe8
leaq 0x21f2c(%rip), %rsi     # 0x28586
movl $0x28, %edx
callq 0x4410
movq 0x2f97d(%rip), %rdi     # 0x35fe8
callq 0x4180
jmp 0x67dc
movq 0x2f96c(%rip), %rdi     # 0x35fe8
leaq 0x21f2c(%rip), %rsi     # 0x285af
movl $0x18, %edx
callq 0x4410
leaq -0x80(%rbp), %rdi
callq 0x24be6
movq 0x2f94b(%rip), %rdi     # 0x35fe8
movl %eax, %esi
callq 0x4650
movq %rax, %rdi
callq 0x4180
movq 0x2f935(%rip), %rdi     # 0x35fe8
leaq 0x21f0e(%rip), %rsi     # 0x285c8
movl $0x12, %edx
callq 0x4410
movq -0x58(%rbp), %rsi
movq 0x2f919(%rip), %rdi     # 0x35fe8
callq 0x4260
movq %rax, %rdi
callq 0x4180
leaq -0xa18(%rbp), %rax
movl $0x0, (%rax)
xorl %ecx, %ecx
movq %rcx, 0x8(%rax)
movq %rax, 0x10(%rax)
movq %rax, 0x18(%rax)
movq %rcx, 0x20(%rax)
leaq -0x80(%rbp), %rdi
leaq -0xa20(%rbp), %rsi
callq 0x24c3a
leaq -0xa20(%rbp), %rdi
leaq -0xa50(%rbp), %rsi
movl -0x30(%rbp), %edx
movl %ebx, %ecx
callq 0x75a2
movq 0x2f8be(%rip), %rdi     # 0x35fe8
leaq 0x21eaa(%rip), %rsi     # 0x285db
movl $0x12, %edx
callq 0x4410
movq -0x110(%rbp), %rsi
movq -0x108(%rbp), %rdx
movq 0x2f898(%rip), %rdi     # 0x35fe8
callq 0x4410
movq %rax, %rdi
callq 0x4180
leaq -0x718(%rbp), %r14
movq %r14, -0x10(%r14)
movq -0x110(%rbp), %rsi
movq -0x108(%rbp), %rdx
addq %rsi, %rdx
leaq -0x728(%rbp), %rdi
callq 0x8984
leaq -0x728(%rbp), %rdi
leaq -0x8d8(%rbp), %rsi
leaq -0x88(%rbp), %rdx
movl %ebx, %ecx
callq 0x1f386
movl %eax, %ebx
movq -0x728(%rbp), %rdi
cmpq %r14, %rdi
je 0x67b4
callq 0x4360
testl %ebx, %ebx
jns 0x67e6
movq 0x2f829(%rip), %rdi     # 0x35fe8
leaq 0x21e28(%rip), %rsi     # 0x285ee
movl $0x26, %edx
callq 0x4410
movq 0x2f811(%rip), %rdi     # 0x35fe8
callq 0x4180
movl $0x1, %edi
callq 0x4430
movq 0x2f7fb(%rip), %rdi     # 0x35fe8
leaq 0x22272(%rip), %rsi     # 0x28a66
movl $0x1, %edx
callq 0x4410
movq 0x2f7e3(%rip), %rdi     # 0x35fe8
leaq 0x21e09(%rip), %rsi     # 0x28615
movl $0xf, %edx
callq 0x4410
movq -0x8b0(%rbp), %rsi
movq 0x2f7c4(%rip), %rdi     # 0x35fe8
callq 0x4260
movq %rax, %rdi
callq 0x4180
movq 0x2f7b0(%rip), %rdi     # 0x35fe8
leaq 0x22227(%rip), %rsi     # 0x28a66
movl $0x1, %edx
callq 0x4410
movq 0x2f798(%rip), %rdi     # 0x35fe8
leaq 0x21dce(%rip), %rsi     # 0x28625
movl $0x15, %edx
callq 0x4410
movl -0x88(%rbp), %esi
movq 0x2f77a(%rip), %rdi     # 0x35fe8
callq 0x4650
movq %rax, %rdi
callq 0x4180
movq 0x2f766(%rip), %rdi     # 0x35fe8
leaq 0x21db2(%rip), %rsi     # 0x2863b
movl $0xd, %edx
callq 0x4410
movq -0x130(%rbp), %rsi
movq -0x128(%rbp), %rdx
movq 0x2f740(%rip), %rdi     # 0x35fe8
callq 0x4410
movq %rax, %rdi
callq 0x4180
leaq -0xd20(%rbp), %rdi
leaq -0x130(%rbp), %rsi
callq 0x15166
leaq -0xd20(%rbp), %rdi
leaq -0x80(%rbp), %rsi
callq 0x14cca
movq 0x2f709(%rip), %rcx     # 0x35fe8
movq (%rcx), %rax
movq -0x18(%rax), %rax
movq $0xf, 0x8(%rcx,%rax)
movq -0x50(%rbp), %rax
shrl %eax
movq %rax, -0x50(%rbp)
movl $0x1, -0x30(%rbp)
leaq -0xd20(%rbp), %rbx
leaq -0xc0(%rbp), %r15
movq $0x0, -0x48(%rbp)
movq -0xd0(%rbp), %r13
movl $0xa, %edx
movq 0x2f6bf(%rip), %rdi     # 0x35fe8
leaq 0x21d19(%rip), %rsi     # 0x28649
callq 0x4410
movq 0x2f6ac(%rip), %rdi     # 0x35fe8
movl -0x30(%rbp), %esi
callq 0x4650
movq %rax, %rdi
callq 0x4180
leaq -0x80(%rbp), %rdi
movq %rbx, %rsi
callq 0x1ae7f
leaq -0x8d8(%rbp), %rdi
movq %rbx, %rsi
leaq -0x9f0(%rbp), %rdx
leaq -0x9c0(%rbp), %rcx
movl -0x34(%rbp), %r8d
callq 0x23306
movsd %xmm0, -0x1b8(%rbp)
leaq -0x9f0(%rbp), %rdi
leaq -0x80(%rbp), %rsi
movsd -0xd8(%rbp), %xmm0
movsd 0x2166c(%rip), %xmm1    # 0x28008
callq 0x23796
cmpb $0x0, -0x29(%rbp)
jne 0x69b0
leaq -0x80(%rbp), %rdi
callq 0x23ffa
leaq -0x9f0(%rbp), %rdi
callq 0x8ab8
movl $0x14, %edx
movq 0x2f620(%rip), %rdi     # 0x35fe8
leaq 0x21c85(%rip), %rsi     # 0x28654
callq 0x4410
movq 0x2f60d(%rip), %rdi     # 0x35fe8
movsd -0x1b8(%rbp), %xmm0
callq 0x45c0
movq %rax, %rdi
callq 0x4180
movl $0x18, %edx
movq 0x2f5ec(%rip), %rdi     # 0x35fe8
leaq 0x21bac(%rip), %rsi     # 0x285af
callq 0x4410
leaq -0x80(%rbp), %rdi
callq 0x24be6
movq 0x2f5d0(%rip), %rdi     # 0x35fe8
movl %eax, %esi
callq 0x4650
movq %rax, %rdi
callq 0x4180
movl $0x12, %edx
movq 0x2f5b5(%rip), %rdi     # 0x35fe8
leaq 0x21b8e(%rip), %rsi     # 0x285c8
callq 0x4410
movq -0x58(%rbp), %rsi
movq 0x2f59e(%rip), %rdi     # 0x35fe8
callq 0x4260
movq %rax, %rdi
callq 0x4180
cmpl $0x0, -0x38(%rbp)
je 0x6a79
cmpl $0x1, -0x30(%rbp)
jne 0x6a79
movq -0x58(%rbp), %rcx
movq %rcx, %rax
xorl %edx, %edx
divq -0xc8(%rbp)
subl %edx, %ecx
movq %rcx, -0x48(%rbp)
movl $0x19, %edx
movq 0x2f563(%rip), %rdi     # 0x35fe8
leaq 0x21bdd(%rip), %rsi     # 0x28669
callq 0x4410
movq 0x2f550(%rip), %rdi     # 0x35fe8
callq 0x4180
movl $0x0, -0x1e0(%rbp)
xorl %ecx, %ecx
movq %rcx, -0x1d8(%rbp)
leaq -0x1e0(%rbp), %rax
movq %rax, -0x1d0(%rbp)
movq %rax, -0x1c8(%rbp)
movq %rcx, -0x1c0(%rbp)
movl -0x3c(%rbp), %edi
leaq -0x9c0(%rbp), %rsi
leaq -0x1e8(%rbp), %rdx
leaq -0xa50(%rbp), %rcx
callq 0x253b4
movl $0x14, %edx
movq 0x2f4f3(%rip), %rdi     # 0x35fe8
leaq 0x21b87(%rip), %rsi     # 0x28683
callq 0x4410
movq 0x2f4e0(%rip), %rdi     # 0x35fe8
callq 0x4180
leaq -0x80(%rbp), %rdi
movq %rbx, %rsi
callq 0x1ae7f
movl -0x84(%rbp), %eax
movl %eax, (%rsp)
leaq -0x8d8(%rbp), %rdi
movq %rbx, %rsi
leaq -0x9c0(%rbp), %rdx
leaq -0x80(%rbp), %rcx
leaq -0x1e8(%rbp), %r8
movl -0x34(%rbp), %r9d
callq 0x256cc
xorps %xmm0, %xmm0
movaps %xmm0, -0xf0(%rbp)
movq $0x0, -0xe0(%rbp)
leaq -0x1e8(%rbp), %rdi
leaq -0xf0(%rbp), %rsi
movl $0x1, %edx
callq 0x1fa9c
xorps %xmm0, %xmm0
movaps %xmm0, -0xc0(%rbp)
movq $0x0, -0xb0(%rbp)
movq -0xf0(%rbp), %r14
cmpq -0xe8(%rbp), %r14
je 0x6bd9
movq %r15, %rdi
movq %r14, %rsi
callq 0x795c
movq -0xb8(%rbp), %rcx
subq -0xc0(%rbp), %rcx
movq -0x58(%rbp), %rax
sarq $0x5, %rcx
subq %rcx, %rax
xorl %edx, %edx
divq %r12
testq %rdx, %rdx
sete %al
cmpq -0x50(%rbp), %rcx
setae %cl
testb %cl, %al
jne 0x6bd9
addq $0x28, %r14
jmp 0x6b90
movq %r15, %rdi
leaq -0x80(%rbp), %rsi
callq 0x24670
movq -0xc0(%rbp), %r14
cmpq -0xb8(%rbp), %r14
je 0x6c06
movq %rbx, %rdi
movq %r14, %rsi
callq 0x14b60
addq $0x20, %r14
jmp 0x6bec
leaq -0x8d8(%rbp), %rdi
movq %rbx, %rsi
leaq -0x80(%rbp), %rdx
movl -0x34(%rbp), %ecx
movsd -0xd8(%rbp), %xmm0
movl $0x1, %r8d
callq 0x23684
cmpb $0x0, -0x29(%rbp)
jne 0x6c39
leaq -0x80(%rbp), %rdi
callq 0x23ffa
movq %rbx, %rdi
leaq -0x80(%rbp), %rsi
callq 0x14cca
cmpl $0x0, -0x38(%rbp)
je 0x6d87
movq -0x58(%rbp), %rax
movl -0x48(%rbp), %ecx
cmpq %rcx, %rax
seta %cl
cmpq -0xd0(%rbp), %rax
setbe %al
orb %cl, %al
jne 0x6d87
leaq -0xc28(%rbp), %rdi
callq 0x44c0
movl $0xc, %edx
leaq -0xc28(%rbp), %rdi
leaq 0x21a0b(%rip), %rsi     # 0x28698
callq 0x4410
movq -0x58(%rbp), %rsi
leaq -0xc28(%rbp), %rdi
callq 0x4260
movl $0x3, %edx
movq %rax, %rdi
leaq 0x219f4(%rip), %rsi     # 0x286a5
callq 0x4410
movl $0xd, %edx
movq 0x2f326(%rip), %rdi     # 0x35fe8
leaq 0x219e0(%rip), %rsi     # 0x286a9
callq 0x4410
leaq -0xa8(%rbp), %rdi
leaq -0xc20(%rbp), %rsi
callq 0x45a0
movq -0xa8(%rbp), %rsi
movq -0xa0(%rbp), %rdx
movq 0x2f2f2(%rip), %rdi     # 0x35fe8
callq 0x4410
movq %rax, %rdi
callq 0x4180
movq -0xa8(%rbp), %rdi
leaq -0x98(%rbp), %rax
cmpq %rax, %rdi
je 0x6d1b
callq 0x4360
leaq -0xa8(%rbp), %rdi
leaq -0xc20(%rbp), %rsi
callq 0x45a0
leaq -0x80(%rbp), %rdi
leaq -0xa8(%rbp), %rsi
xorl %edx, %edx
movl $0x6, %ecx
callq 0x24106
movq -0xa8(%rbp), %rdi
leaq -0x98(%rbp), %rax
cmpq %rax, %rdi
je 0x6d5d
callq 0x4360
movq -0x48(%rbp), %rax
subl -0x38(%rbp), %eax
movq %rax, -0x48(%rbp)
leaq -0xc28(%rbp), %rdi
movq 0x2f242(%rip), %rsi     # 0x35fb8
callq 0x41c0
leaq -0xbb8(%rbp), %rdi
callq 0x4110
movq -0x58(%rbp), %r14
xorl %eax, %eax
cmpq %r13, %r14
seta %al
addl %eax, -0x30(%rbp)
movq %r15, %rdi
callq 0x79a8
leaq -0xf0(%rbp), %rdi
callq 0x79f6
leaq -0x1e8(%rbp), %rdi
callq 0x86ba
cmpq %r13, %r14
ja 0x691d
leaq -0x80(%rbp), %rdi
leaq -0x208(%rbp), %rsi
xorl %edx, %edx
movl $0x6, %ecx
callq 0x24106
xorl %edi, %edi
callq 0x4430
jmp 0x6e66
jmp 0x6de6
jmp 0x6e05
movq %rax, %rbx
movq -0xa8(%rbp), %rdi
leaq -0x98(%rbp), %rax
cmpq %rax, %rdi
je 0x6e08
callq 0x4360
jmp 0x6e08
jmp 0x6e05
movq %rax, %rbx
movq 0x2f1a9(%rip), %rsi     # 0x35fb8
leaq -0xc28(%rbp), %rdi
callq 0x41c0
leaq -0xbb8(%rbp), %rdi
callq 0x4110
jmp 0x6e32
jmp 0x6e2f
jmp 0x6e2f
jmp 0x6e2f
movq %rax, %rbx
leaq -0xc0(%rbp), %rdi
callq 0x79a8
jmp 0x6e43
movq %rax, %rbx
leaq -0xf0(%rbp), %rdi
callq 0x79f6
jmp 0x6e54
movq %rax, %rbx
leaq -0x1e8(%rbp), %rdi
callq 0x86ba
jmp 0x6e7f
jmp 0x6e66
jmp 0x6e66
movq %rax, %rbx
jmp 0x6e7f
movq %rax, %rbx
movq -0x728(%rbp), %rdi
cmpq %r14, %rdi
je 0x6e7f
callq 0x4360
leaq -0xa20(%rbp), %rdi
callq 0x86ba
jmp 0x6e92
jmp 0x6e8f
movq %rax, %rbx
leaq -0xa50(%rbp), %rdi
callq 0x8724
leaq -0x9c0(%rbp), %rdi
callq 0x86ba
leaq -0x9f0(%rbp), %rdi
callq 0x878e
leaq -0x80(%rbp), %rdi
callq 0x878e
leaq -0xd20(%rbp), %rdi
callq 0x13fcc
jmp 0x6ed0
movq %rax, %rbx
leaq -0x8d8(%rbp), %rdi
callq 0x86ba
leaq -0xa80(%rbp), %rdi
callq 0x86ba
leaq -0xab0(%rbp), %rdi
callq 0x86ba
jmp 0x6f61
jmp 0x6f5e
movq %rax, %rbx
movq -0x748(%rbp), %rdi
cmpq %r12, %rdi
jne 0x6f57
jmp 0x6f61
jmp 0x6f5e
movq %rax, %rbx
movq -0x768(%rbp), %rdi
jmp 0x6f31
jmp 0x6f5e
movq %rax, %rbx
movq -0x788(%rbp), %rdi
jmp 0x6f31
jmp 0x6f5e
movq %rax, %rbx
movq -0x7a8(%rbp), %rdi
cmpq %r15, %rdi
jne 0x6f57
jmp 0x6f61
jmp 0x6f5e
movq %rax, %rbx
movq -0x7c8(%rbp), %rdi
jmp 0x6f52
jmp 0x6f5e
movq %rax, %rbx
movq -0x7e8(%rbp), %rdi
cmpq %r14, %rdi
je 0x6f61
callq 0x4360
jmp 0x6f61
movq %rax, %rbx
movq -0x208(%rbp), %rdi
leaq -0x1f8(%rbp), %rax
cmpq %rax, %rdi
je 0x6f7e
callq 0x4360
jmp 0x6f7e
movq %rax, %rbx
movq -0x130(%rbp), %rdi
leaq -0x120(%rbp), %rax
cmpq %rax, %rdi
je 0x6f9b
callq 0x4360
jmp 0x6f9b
movq %rax, %rbx
movq -0x150(%rbp), %rdi
leaq -0x140(%rbp), %rax
cmpq %rax, %rdi
je 0x6fb8
callq 0x4360
jmp 0x6fb8
movq %rax, %rbx
movq -0x110(%rbp), %rdi
leaq -0x100(%rbp), %rax
cmpq %rax, %rdi
jne 0x7548
jmp 0x7552
jmp 0x754f
movq %rax, %rbx
movq -0x808(%rbp), %rdi
jmp 0x7016
jmp 0x754f
movq %rax, %rbx
movq -0x828(%rbp), %rdi
jmp 0x7016
jmp 0x754f
movq %rax, %rbx
movq -0x848(%rbp), %rdi
jmp 0x7016
jmp 0x754f
movq %rax, %rbx
movq -0x868(%rbp), %rdi
cmpq %r14, %rdi
jne 0x7548
jmp 0x7552
jmp 0x754f
jmp 0x754f
movq %rax, %rbx
movq -0x228(%rbp), %rdi
leaq -0x218(%rbp), %rax
cmpq %rax, %rdi
je 0x704e
callq 0x4360
jmp 0x704e
movq %rax, %rbx
movq -0x248(%rbp), %rdi
leaq -0x238(%rbp), %rax
cmpq %rax, %rdi
je 0x706b
callq 0x4360
jmp 0x706b
movq %rax, %rbx
movq -0x268(%rbp), %rdi
leaq -0x258(%rbp), %rax
cmpq %rax, %rdi
je 0x7088
callq 0x4360
jmp 0x7088
movq %rax, %rbx
movq -0x288(%rbp), %rdi
leaq -0x278(%rbp), %rax
cmpq %rax, %rdi
je 0x70a7
callq 0x4360
jmp 0x70a7
jmp 0x70a4
movq %rax, %rbx
movq -0x2a8(%rbp), %rdi
leaq -0x298(%rbp), %rax
cmpq %rax, %rdi
je 0x70c4
callq 0x4360
jmp 0x70c4
movq %rax, %rbx
movq -0x2c8(%rbp), %rdi
leaq -0x2b8(%rbp), %rax
cmpq %rax, %rdi
je 0x70e1
callq 0x4360
jmp 0x70e1
movq %rax, %rbx
movq -0x2e8(%rbp), %rdi
leaq -0x2d8(%rbp), %rax
cmpq %rax, %rdi
je 0x70fe
callq 0x4360
jmp 0x70fe
movq %rax, %rbx
movq -0x308(%rbp), %rdi
leaq -0x2f8(%rbp), %rax
cmpq %rax, %rdi
je 0x711d
callq 0x4360
jmp 0x711d
jmp 0x711a
movq %rax, %rbx
movq -0x328(%rbp), %rdi
leaq -0x318(%rbp), %rax
cmpq %rax, %rdi
je 0x713a
callq 0x4360
jmp 0x713a
movq %rax, %rbx
movq -0x348(%rbp), %rdi
leaq -0x338(%rbp), %rax
cmpq %rax, %rdi
je 0x7157
callq 0x4360
jmp 0x7157
movq %rax, %rbx
movq -0x368(%rbp), %rdi
leaq -0x358(%rbp), %rax
cmpq %rax, %rdi
je 0x7174
callq 0x4360
jmp 0x7174
movq %rax, %rbx
movq -0x388(%rbp), %rdi
leaq -0x378(%rbp), %rax
cmpq %rax, %rdi
je 0x7193
callq 0x4360
jmp 0x7193
jmp 0x7190
movq %rax, %rbx
movq -0x3a8(%rbp), %rdi
leaq -0x398(%rbp), %rax
cmpq %rax, %rdi
je 0x71b0
callq 0x4360
jmp 0x71b0
movq %rax, %rbx
movq -0x3c8(%rbp), %rdi
leaq -0x3b8(%rbp), %rax
cmpq %rax, %rdi
je 0x71cd
callq 0x4360
jmp 0x71cd
movq %rax, %rbx
movq -0x3e8(%rbp), %rdi
leaq -0x3d8(%rbp), %rax
cmpq %rax, %rdi
je 0x71ea
callq 0x4360
jmp 0x71ea
movq %rax, %rbx
movq -0x408(%rbp), %rdi
leaq -0x3f8(%rbp), %rax
cmpq %rax, %rdi
je 0x7209
callq 0x4360
jmp 0x7209
jmp 0x7206
movq %rax, %rbx
movq -0x428(%rbp), %rdi
leaq -0x418(%rbp), %rax
cmpq %rax, %rdi
je 0x7226
callq 0x4360
jmp 0x7226
movq %rax, %rbx
movq -0x448(%rbp), %rdi
leaq -0x438(%rbp), %rax
cmpq %rax, %rdi
je 0x7243
callq 0x4360
jmp 0x7243
movq %rax, %rbx
movq -0x468(%rbp), %rdi
leaq -0x458(%rbp), %rax
cmpq %rax, %rdi
je 0x7260
callq 0x4360
jmp 0x7260
movq %rax, %rbx
movq -0x488(%rbp), %rdi
leaq -0x478(%rbp), %rax
cmpq %rax, %rdi
je 0x727f
callq 0x4360
jmp 0x727f
jmp 0x727c
movq %rax, %rbx
movq -0x4a8(%rbp), %rdi
leaq -0x498(%rbp), %rax
cmpq %rax, %rdi
je 0x729c
callq 0x4360
jmp 0x729c
movq %rax, %rbx
movq -0x4c8(%rbp), %rdi
leaq -0x4b8(%rbp), %rax
cmpq %rax, %rdi
je 0x72b9
callq 0x4360
jmp 0x72b9
movq %rax, %rbx
movq -0x4e8(%rbp), %rdi
leaq -0x4d8(%rbp), %rax
cmpq %rax, %rdi
je 0x72d6
callq 0x4360
jmp 0x72d6
movq %rax, %rbx
movq -0x508(%rbp), %rdi
leaq -0x4f8(%rbp), %rax
cmpq %rax, %rdi
je 0x72f5
callq 0x4360
jmp 0x72f5
jmp 0x72f2
movq %rax, %rbx
movq -0x528(%rbp), %rdi
leaq -0x518(%rbp), %rax
cmpq %rax, %rdi
je 0x7312
callq 0x4360
jmp 0x7312
movq %rax, %rbx
movq -0x548(%rbp), %rdi
leaq -0x538(%rbp), %rax
cmpq %rax, %rdi
je 0x732f
callq 0x4360
jmp 0x732f
movq %rax, %rbx
movq -0x568(%rbp), %rdi
leaq -0x558(%rbp), %rax
cmpq %rax, %rdi
je 0x734c
callq 0x4360
jmp 0x734c
movq %rax, %rbx
movq -0x588(%rbp), %rdi
leaq -0x578(%rbp), %rax
cmpq %rax, %rdi
je 0x736b
callq 0x4360
jmp 0x736b
jmp 0x7368
movq %rax, %rbx
movq -0x5a8(%rbp), %rdi
leaq -0x598(%rbp), %rax
cmpq %rax, %rdi
je 0x7388
callq 0x4360
jmp 0x7388
movq %rax, %rbx
movq -0x5c8(%rbp), %rdi
leaq -0x5b8(%rbp), %rax
cmpq %rax, %rdi
je 0x73a5
callq 0x4360
jmp 0x73a5
movq %rax, %rbx
movq -0x5e8(%rbp), %rdi
leaq -0x5d8(%rbp), %rax
cmpq %rax, %rdi
je 0x73c2
callq 0x4360
jmp 0x73c2
movq %rax, %rbx
movq -0x608(%rbp), %rdi
leaq -0x5f8(%rbp), %rax
cmpq %rax, %rdi
je 0x73e1
callq 0x4360
jmp 0x73e1
jmp 0x73de
movq %rax, %rbx
movq -0x628(%rbp), %rdi
leaq -0x618(%rbp), %rax
cmpq %rax, %rdi
je 0x73fe
callq 0x4360
jmp 0x73fe
movq %rax, %rbx
movq -0x648(%rbp), %rdi
leaq -0x638(%rbp), %rax
cmpq %rax, %rdi
je 0x741b
callq 0x4360
jmp 0x741b
movq %rax, %rbx
movq -0x668(%rbp), %rdi
leaq -0x658(%rbp), %rax
cmpq %rax, %rdi
je 0x7438
callq 0x4360
jmp 0x7438
movq %rax, %rbx
movq -0x688(%rbp), %rdi
leaq -0x678(%rbp), %rax
cmpq %rax, %rdi
je 0x7457
callq 0x4360
jmp 0x7457
jmp 0x7454
movq %rax, %rbx
movq -0x6a8(%rbp), %rdi
leaq -0x698(%rbp), %rax
cmpq %rax, %rdi
je 0x7474
callq 0x4360
jmp 0x7474
movq %rax, %rbx
movq -0x6c8(%rbp), %rdi
leaq -0x6b8(%rbp), %rax
cmpq %rax, %rdi
je 0x7491
callq 0x4360
jmp 0x7491
movq %rax, %rbx
leaq -0x160(%rbp), %rax
movq -0x170(%rbp), %rdi
cmpq %rax, %rdi
je 0x74ae
callq 0x4360
jmp 0x74ae
movq %rax, %rbx
leaq -0x180(%rbp), %rax
movq -0x190(%rbp), %rdi
cmpq %rax, %rdi
je 0x74cd
callq 0x4360
jmp 0x74cd
jmp 0x74ca
movq %rax, %rbx
movq -0x6e8(%rbp), %rdi
leaq -0x6d8(%rbp), %rax
cmpq %rax, %rdi
je 0x74ea
callq 0x4360
jmp 0x74ea
movq %rax, %rbx
movq -0x708(%rbp), %rdi
leaq -0x6f8(%rbp), %rax
cmpq %rax, %rdi
je 0x7507
callq 0x4360
jmp 0x7507
movq %rax, %rbx
leaq -0x1a0(%rbp), %rax
movq -0x1b0(%rbp), %rdi
cmpq %rax, %rdi
je 0x7524
callq 0x4360
jmp 0x7524
movq %rax, %rbx
movq -0x888(%rbp), %rdi
cmpq %r13, %rdi
je 0x753c
callq 0x4360
jmp 0x753c
jmp 0x7539
movq %rax, %rbx
movq -0x8a8(%rbp), %rdi
cmpq %r12, %rdi
je 0x7552
callq 0x4360
jmp 0x7552
movq %rax, %rbx
leaq -0x8f8(%rbp), %rdi
callq 0x79a8
leaq -0x928(%rbp), %rdi
callq 0x8850
leaq -0x958(%rbp), %rdi
callq 0x88ba
leaq -0x970(%rbp), %r14
movq %r14, %rdi
callq 0x881c
movq -0x20(%r14), %rdi
leaq -0x980(%rbp), %rax
cmpq %rax, %rdi
je 0x759a
callq 0x4360
movq %rbx, %rdi
callq 0x4680