// File: /workspace/github_cpp_makefile_star2_O2/istellartech[P]OpenTsiolkovsky/src/rocket.cpp
// Function: Rocket::flight_simulation()
void Rocket::flight_simulation(){
    // rs : mean RocketNew::rocket_stages, class RocketStage
    using base_stepper_type = odeint::runge_kutta_dopri5<RocketStage::state>;
    auto Stepper = make_dense_output(1.0e-9, 1.0e-9, 1.0, base_stepper_type());

    for (int i = 0; i < rs.size(); i++){  // i is number of the rocket stages
        flag_separation_g = false;
        flag_separation_mass_reduce_g = false;
        flag_dump_g = false;
        flag_impact_g = false;
        if (i == 0){
            rs[i].posECI_init << posECI_init(rs[0].launch_pos_LLH);
            rs[i].velECI_init << velECI_init(rs[0].launch_vel_NED, rs[0].launch_pos_LLH);
            rs[i].previous_stage_separation_time = 0.0; // first stage calcuration start time[s]
        } else {
            rs[i].posECI_init << posECI_init_g;
            rs[i].velECI_init << velECI_init_g;
            rs[i].previous_stage_separation_time = rs[i-1].later_stage_separation_time;
        }
        rs[i].calc_start_time = rs[i].previous_stage_separation_time;
        std::vector<double> time_array;
        time_array = {rs[i].calc_start_time,
                      rs[i].dump_separation_time,
//                      rs[i].previous_stage_separation_time + rs[i].burn_start_time + rs[i].burn_end_time,
                      rs[i].later_stage_separation_time,
                      rs[i].calc_end_time
        };
        sort(time_array.begin(), time_array.end());  // ascending order for ODE
        std::replace_if(time_array.begin(), time_array.end(),
                        [&](double x){return x > rs[i].calc_end_time;},
                        rs[i].calc_end_time); // keep times to the upper limit(calc_end_time)
        double time_step = rs[i].calc_step_time;

        RocketStage::state State = { rs[i].mass_init,
                                     rs[i].posECI_init[0], rs[i].posECI_init[1], rs[i].posECI_init[2],
                                     rs[i].velECI_init[0], rs[i].velECI_init[1], rs[i].velECI_init[2],
        };
        string csv_filename = "./output/" + rs[i].name + "_dynamics_" + to_string(rs[i].num_stage) + ".csv";
        CsvObserver Observer(csv_filename, false);
        Observer.deep_copy(rs[i]);
        flag_duplicate = false;
        for (int j = 0; j < time_array.size() - 1; j++){  // j is number of time_array
            odeint::integrate_const(Stepper, rs[i], State,
                                    time_array[j], time_array[j+1], time_step,
                                    std::ref(Observer));
            CsvObserver Observer(csv_filename, true);
            Observer.deep_copy(rs[i]);
            if (time_array[j+1] == rs[i].later_stage_separation_time && !flag_separation_mass_reduce_g){
                State[0] = State[0] - rs[i+1].mass_init;  // reduce upper stage mass to "ODE x[0]"
                flag_separation_mass_reduce_g = true;
            }
            if (time_array[j+1] == rs[i].dump_separation_time){
                RocketStage temp_fo(rs[i], posECI_dump_init_g, velECI_dump_init_g);
                temp_fo.num_stage = rs[i].num_stage;
                fo.push_back(temp_fo);
                State[0] = State[0] - rs[i].dump_mass;  // reduce dumping mass to "ODE x[0]"
            }
            flag_duplicate = true;
        }
        cout << "                                           \r" << flush;
        cout << fixed << setprecision(6) << to_string(rs[i].num_stage) + " stage impact point [deg]:\t";
        cout << impact_point_g[0] << "\t"<< impact_point_g[1] << endl;
        impact_point_g << 0.0,0.0;
        if (!rs[i].following_stage_exist){
            break;
        }
    }

    // ==== DUMPING PRODUCTS flight simulation ====
    for (int i = 0; i < fo.size(); i++) {  // i is number of the dumping products
        flag_impact_g = false;
        RocketStage::state State = { fo[i].mass_init,
            fo[i].posECI_init[0], fo[i].posECI_init[1], fo[i].posECI_init[2],
            fo[i].velECI_init[0], fo[i].velECI_init[1], fo[i].velECI_init[2],
        };
        string csv_filename = "./output/" + fo[i].name + "_dynamics_" + to_string(fo[i].num_stage) + "_dump" +  ".csv";
        CsvObserver Observer(csv_filename, false);
        Observer.deep_copy(fo[i]);
        odeint::integrate_const(Stepper, fo[i], State,
                                fo[i].calc_start_time, fo[i].calc_end_time, fo[i].calc_step_time,
                                std::ref(Observer));
        cout << "                                           \r" << flush;
        cout << fixed << setprecision(6) << to_string(fo[i].num_stage) + " stage dumping product impact point [deg]:\t";
        cout << impact_point_g[0] << "\t"<< impact_point_g[1] << endl;
        impact_point_g << 0.0,0.0;
    }

    cout << fixed << setprecision(0);
    cout << "max altitude[m]:\t" << max_alt_g << endl;
    cout << "max downrange[m]:\t" << max_downrange_g << endl;
    cout << "Simulation Success!" << endl;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x6d88, %rsp           # imm = 0x6D88
movq %rdi, %rbx
leaq 0x1852(%rsp), %rdi
movl $0x1d9, %edx            # imm = 0x1D9
xorl %esi, %esi
callq 0x5220
leaq 0x10db(%rsp), %r13
leaq 0x18(%rbx), %rax
movq %rax, 0x770(%rsp)
leaq 0x2cd0(%rsp), %r14
leaq 0x1bf0(%rsp), %r12
xorl %edi, %edi
movq (%rbx), %rsi
movq 0x8(%rbx), %rax
subq %rsi, %rax
cqto
movl $0xec0, %ecx            # imm = 0xEC0
idivq %rcx
cmpq %rdi, %rax
jbe 0xbcf0
xorl %eax, %eax
movb %al, 0x23f75(%rip)      # 0x2f488
movb %al, 0x23f70(%rip)      # 0x2f489
movb %al, 0x23f6b(%rip)      # 0x2f48a
movb %al, 0x23f66(%rip)      # 0x2f48b
testq %rdi, %rdi
movq %rdi, 0x7b8(%rsp)
je 0xb5b1
movq %r14, %rbp
imulq $0xec0, %rdi, %r14      # imm = 0xEC0
addq %r14, %rsi
addq $0x3d0, %rsi            # imm = 0x3D0
leaq 0x908(%rsp), %r15
movq %r15, %rdi
leaq 0x23f00(%rip), %rdx     # 0x2f458
callq 0x13128
movq %r15, %rdi
callq 0xfe08
movq (%rbx), %rax
leaq (%rax,%r14), %rsi
addq $0x3e8, %rsi            # imm = 0x3E8
leaq 0x8e8(%rsp), %r15
movq %r15, %rdi
leaq 0x23eeb(%rip), %rdx     # 0x2f470
callq 0x13128
movq %r15, %rdi
callq 0xfe08
movq (%rbx), %rax
movsd -0x770(%rax,%r14), %xmm0
movsd %xmm0, 0x748(%rax,%r14)
movq %rbp, %r15
jmp 0xb67c
leaq 0x3d0(%rsi), %r14
movl $0x340, %r15d           # imm = 0x340
addq %r15, %rsi
leaq 0x8d0(%rsp), %rbp
movq %rbp, %rdi
callq 0x129c6
leaq 0x2cd0(%rsp), %rdi
movq %rbp, %rsi
callq 0x1db92
leaq 0x948(%rsp), %rbp
movq %rbp, %rdi
movq %r14, %rsi
leaq 0x2cd0(%rsp), %rdx
callq 0x13128
movq %rbp, %rdi
callq 0xfe08
movq (%rbx), %rsi
leaq 0x3e8(%rsi), %r14
addq $0x370, %rsi            # imm = 0x370
leaq 0x8a0(%rsp), %rdi
callq 0x129c6
movq (%rbx), %rsi
addq %r15, %rsi
leaq 0x2cd0(%rsp), %r15
leaq 0x8b8(%rsp), %rbp
movq %rbp, %rdi
callq 0x129c6
movq %r15, %rdi
leaq 0x8a0(%rsp), %rsi
movq %rbp, %rdx
callq 0x1dbf4
leaq 0x928(%rsp), %rbp
movq %rbp, %rdi
movq %r14, %rsi
movq %r15, %rdx
callq 0x13128
movq %rbp, %rdi
callq 0xfe08
movq (%rbx), %rax
andq $0x0, 0x748(%rax)
imulq $0xec0, 0x7b8(%rsp), %rbp # imm = 0xEC0
movsd 0x748(%rax,%rbp), %xmm0
movsd %xmm0, 0x258(%rax,%rbp)
xorps %xmm0, %xmm0
movaps %xmm0, 0x790(%rsp)
andq $0x0, 0x7a0(%rsp)
movsd 0x258(%rax,%rbp), %xmm0
movsd %xmm0, 0x2cd0(%rsp)
movsd 0x650(%rax,%rbp), %xmm0
movsd %xmm0, 0x2cd8(%rsp)
movsd 0x750(%rax,%rbp), %xmm0
movsd %xmm0, 0x2ce0(%rsp)
movsd 0x260(%rax,%rbp), %xmm0
movsd %xmm0, 0x2ce8(%rsp)
leaq 0x790(%rsp), %rdi
movq %r15, %rsi
leaq 0x2cf0(%rsp), %rdx
callq 0x132e0
movq 0x790(%rsp), %rdi
movq 0x798(%rsp), %rsi
callq 0x133fb
movq 0x790(%rsp), %rax
movq 0x798(%rsp), %rcx
movq (%rbx), %rdx
leaq (%rdx,%rbp), %rsi
addq $0x260, %rsi            # imm = 0x260
addq %rbp, %rdx
leaq 0x3db0(%rsp), %r14
cmpq %rcx, %rax
je 0xb769
movsd (%rax), %xmm1
movsd (%rsi), %xmm0
ucomisd %xmm0, %xmm1
jbe 0xb763
movsd %xmm0, (%rax)
addq $0x8, %rax
jmp 0xb74c
movsd 0x268(%rdx), %xmm0
movsd %xmm0, 0x7b0(%rsp)
movsd 0x280(%rdx), %xmm0
movsd %xmm0, 0x800(%rsp)
movsd 0x3d0(%rdx), %xmm0
movsd %xmm0, 0x808(%rsp)
movsd 0x3d8(%rdx), %xmm0
movsd %xmm0, 0x810(%rsp)
movsd 0x3e0(%rdx), %xmm0
movsd %xmm0, 0x818(%rsp)
movsd 0x3e8(%rdx), %xmm0
movsd %xmm0, 0x820(%rsp)
movsd 0x3f0(%rdx), %xmm0
movsd %xmm0, 0x828(%rsp)
movsd 0x3f8(%rdx), %xmm0
movsd %xmm0, 0x830(%rsp)
leaq 0x838(%rsp), %rax
xorpd %xmm0, %xmm0
movupd %xmm0, 0x20(%rax)
movupd %xmm0, 0x10(%rax)
movupd %xmm0, (%rax)
andq $0x0, 0x30(%rax)
addq $0x210, %rdx            # imm = 0x210
movq %r14, %rdi
leaq 0x15163(%rip), %rsi     # 0x20984
callq 0x6cd8
movq %r12, %rdi
movq %r14, %rsi
leaq 0x1515b(%rip), %rdx     # 0x2098e
callq 0x6cb9
movq (%rbx), %rax
movl 0x250(%rax,%rbp), %esi
leaq 0x7e0(%rsp), %r14
movq %r14, %rdi
callq 0xfa98
movq %r15, %rdi
movq %r12, %rsi
movq %r14, %rdx
callq 0x103f1
leaq 0x7c0(%rsp), %r14
movq %r14, %rdi
movq %r15, %rsi
leaq 0x13a87(%rip), %rdx     # 0x1f2fc
callq 0x6cb9
movq %r15, %rdi
callq 0x56e8
leaq 0x7e0(%rsp), %rdi
callq 0x56e8
movq %r12, %rdi
callq 0x56e8
leaq 0x3db0(%rsp), %rdi
callq 0x56e8
movq %r15, %rdi
movq %r14, %rsi
xorl %edx, %edx
callq 0x10458
movq (%rbx), %rsi
addq %rbp, %rsi
movq %r15, %rdi
callq 0xfe3c
movb $0x0, 0x23c1a(%rip)     # 0x2f4e0
xorl %r15d, %r15d
movq 0x798(%rsp), %rax
subq 0x790(%rsp), %rax
sarq $0x3, %rax
decq %rax
cmpq %r15, %rax
jbe 0xbb8a
movw $0x100, %r14w           # imm = 0x100
movw %r14w, 0x10d9(%rsp)
movl $0x385, %edx            # imm = 0x385
movq %r13, %rdi
leaq 0x4c7b(%rsp), %rsi
callq 0x52f0
andw $0x0, 0x1460(%rsp)
movl 0x77c(%rsp), %eax
movl %eax, 0x387(%r13)
movzwl 0x780(%rsp), %eax
movw %ax, 0x38b(%r13)
movaps 0x146e6(%rip), %xmm0    # 0x20020
movups %xmm0, 0x1468(%rsp)
movapd 0x146e6(%rip), %xmm0    # 0x20030
movupd %xmm0, 0x1478(%rsp)
movabsq $0x3ff0000000000000, %rax # imm = 0x3FF0000000000000
movq %rax, 0x1488(%rsp)
andl $0x0, 0x1490(%rsp)
movl $0x1c4, %edx            # imm = 0x1C4
leaq 0x1494(%rsp), %rdi
leaq 0x1a2c(%rsp), %rsi
callq 0x52f0
movb $0x1, 0x1658(%rsp)
movl 0x789(%rsp), %eax
movl 0x78c(%rsp), %ecx
movl %eax, 0x57e(%r13)
movl %ecx, 0x581(%r13)
movw %r14w, 0x1660(%rsp)
movl $0x1df, %edx            # imm = 0x1DF
leaq 0x1662(%rsp), %rdi
leaq 0x184c(%rsp), %rsi
callq 0x52f0
movl 0x782(%rsp), %eax
movl 0x785(%rsp), %ecx
movl %eax, 0x766(%r13)
movl %ecx, 0x769(%r13)
movq (%rbx), %rsi
addq %rbp, %rsi
leaq 0x5ec0(%rsp), %r14
movq %r14, %rdi
callq 0x105ec
movq 0x790(%rsp), %rax
movsd (%rax,%r15,8), %xmm0
movsd 0x8(%rax,%r15,8), %xmm1
movl $0xee, %ecx
movq %rsp, %rdi
leaq 0x10d8(%rsp), %rsi
rep  movsq (%rsi), %es:(%rdi)
movq %r14, %rdi
leaq 0x800(%rsp), %rsi
movsd 0x7b0(%rsp), %xmm2
leaq 0x2cd0(%rsp), %rdx
callq 0x10515
movq %r14, %rdi
callq 0x6e12
movq %r12, %rdi
leaq 0x7c0(%rsp), %rsi
pushq $0x1
popq %rdx
callq 0x10458
movq (%rbx), %rsi
addq %rbp, %rsi
movq %r12, %rdi
callq 0xfe3c
movq 0x790(%rsp), %rax
movsd 0x8(%rax,%r15,8), %xmm0
movq (%rbx), %rcx
leaq (%rcx,%rbp), %r14
ucomisd 0x750(%rcx,%rbp), %xmm0
jne 0xbac7
jp 0xbac7
cmpb $0x0, 0x239ed(%rip)     # 0x2f489
jne 0xbac7
movsd 0x800(%rsp), %xmm0
subsd 0x1140(%r14), %xmm0
movsd %xmm0, 0x800(%rsp)
movb $0x1, 0x239c9(%rip)     # 0x2f489
movsd 0x8(%rax,%r15,8), %xmm0
ucomisd 0x650(%r14), %xmm0
jne 0xbb73
jp 0xbb73
leaq 0x888(%rsp), %rdi
leaq 0x239c5(%rip), %rsi     # 0x2f4b0
callq 0x129c6
leaq 0x870(%rsp), %rdi
leaq 0x239c9(%rip), %rsi     # 0x2f4c8
callq 0x129c6
leaq 0x3db0(%rsp), %rdi
movq %r14, %rsi
leaq 0x888(%rsp), %rdx
leaq 0x870(%rsp), %rcx
callq 0xae60
movq (%rbx), %rax
movl 0x250(%rax,%rbp), %eax
movl %eax, 0x4000(%rsp)
movq 0x770(%rsp), %rdi
leaq 0x3db0(%rsp), %r14
movq %r14, %rsi
callq 0xfaf2
movsd 0x800(%rsp), %xmm0
movq (%rbx), %rax
subsd 0x658(%rax,%rbp), %xmm0
movsd %xmm0, 0x800(%rsp)
movq %r14, %rdi
callq 0x6e12
movb $0x1, 0x23966(%rip)     # 0x2f4e0
movq %r12, %rdi
callq 0x10b88
incq %r15
jmp 0xb8c9
movq 0x2341f(%rip), %r14     # 0x2efb0
movq %r14, %rdi
leaq 0x14dfe(%rip), %rsi     # 0x20999
callq 0x5370
movq %rax, %rdi
callq 0x5270
movq (%r14), %rax
movq -0x18(%rax), %rcx
movl 0x18(%r14,%rcx), %edx
movl $0xfffffefb, %esi       # imm = 0xFFFFFEFB
andl %esi, %edx
orl $0x4, %edx
movl %edx, 0x18(%r14,%rcx)
movq -0x18(%rax), %rax
movq $0x6, 0x8(%r14,%rax)
movq (%rbx), %rax
movl 0x250(%rax,%rbp), %esi
leaq 0x3db0(%rsp), %r15
movq %r15, %rdi
callq 0xfa98
movq %r12, %rdi
movq %r15, %rsi
leaq 0x14dcf(%rip), %rdx     # 0x209c6
callq 0x6cb9
movq %r14, %rdi
movq %r12, %rsi
callq 0x5340
movq %r12, %rdi
callq 0x56e8
leaq 0x3db0(%rsp), %rdi
callq 0x56e8
movsd 0x2387c(%rip), %xmm0    # 0x2f4a0
movq %r14, %rdi
callq 0x5570
movq %rax, %rdi
leaq 0x14daa(%rip), %rsi     # 0x209e0
callq 0x5370
movsd 0x23865(%rip), %xmm0    # 0x2f4a8
movq %rax, %rdi
callq 0x5570
movq %rax, %rdi
callq 0x51b0
leaq 0x23846(%rip), %rax     # 0x2f4a0
movq %rax, 0x1bf0(%rsp)
andq $0x0, 0x1bf8(%rsp)
pushq $0x1
popq %rax
movq %rax, 0x1c00(%rsp)
andq $0x0, 0x23822(%rip)     # 0x2f4a0
movq %rax, 0x1c08(%rsp)
andq $0x0, 0x3db0(%rsp)
movq %r12, %rdi
leaq 0x3db0(%rsp), %rsi
callq 0x10bb8
movq %r12, %rdi
callq 0x10c60
movq (%rbx), %rax
movb 0x740(%rax,%rbp), %bpl
leaq 0x2cd0(%rsp), %r14
movq %r14, %rdi
callq 0x10b88
leaq 0x7c0(%rsp), %rdi
callq 0x56e8
leaq 0x790(%rsp), %rdi
callq 0x6870
movq 0x7b8(%rsp), %rdi
incq %rdi
testb %bpl, %bpl
jne 0xb4ee
xorl %r13d, %r13d
leaq 0x7c0(%rsp), %rbp
xorl %edi, %edi
movq 0x18(%rbx), %rcx
movq 0x20(%rbx), %rax
subq %rcx, %rax
cqto
movl $0xec0, %esi            # imm = 0xEC0
idivq %rsi
cmpq %rdi, %rax
jbe 0xc192
movq %rdi, 0x7b0(%rsp)
movb $0x0, 0x23761(%rip)     # 0x2f48b
leaq (%rcx,%r13), %rdx
addq $0x210, %rdx            # imm = 0x210
movsd 0x70(%rdx), %xmm0
movsd %xmm0, 0x1bf0(%rsp)
movsd 0x1c0(%rdx), %xmm0
movsd %xmm0, 0x1bf8(%rsp)
movsd 0x1c8(%rdx), %xmm0
movsd %xmm0, 0x1c00(%rsp)
movsd 0x1d0(%rdx), %xmm0
movsd %xmm0, 0x1c08(%rsp)
movsd 0x1d8(%rdx), %xmm0
movsd %xmm0, 0x1c10(%rsp)
movsd 0x1e0(%rdx), %xmm0
movsd %xmm0, 0x1c18(%rsp)
movsd 0x1e8(%rdx), %xmm0
movsd %xmm0, 0x1c20(%rsp)
leaq 0x1c28(%rsp), %rax
xorpd %xmm0, %xmm0
movupd %xmm0, 0x20(%rax)
movupd %xmm0, 0x10(%rax)
movupd %xmm0, (%rax)
andq $0x0, 0x30(%rax)
leaq 0x7e0(%rsp), %r14
movq %r14, %rdi
leaq 0x14baa(%rip), %rsi     # 0x20984
callq 0x6cd8
movq %rbp, %r15
movq %rbp, %rdi
movq %r14, %rsi
leaq 0x14b9f(%rip), %rdx     # 0x2098e
callq 0x6cb9
movq 0x770(%rsp), %rax
movq (%rax), %rax
movl 0x250(%rax,%r13), %esi
leaq 0x790(%rsp), %r14
movq %r14, %rdi
callq 0xfa98
leaq 0x800(%rsp), %rbp
movq %rbp, %rdi
movq %r15, %rsi
movq %r14, %rdx
callq 0x103f1
leaq 0x2cd0(%rsp), %r14
movq %r14, %rdi
movq %rbp, %rsi
leaq 0x14ba0(%rip), %rdx     # 0x209e2
callq 0x6cb9
leaq 0x3db0(%rsp), %r12
movq %r12, %rdi
movq %r14, %rsi
leaq 0x134a0(%rip), %rdx     # 0x1f2fc
callq 0x6cb9
movq %r14, %rdi
callq 0x56e8
movq %rbp, %rdi
callq 0x56e8
leaq 0x790(%rsp), %rdi
callq 0x56e8
movq %r15, %rdi
callq 0x56e8
leaq 0x7e0(%rsp), %rdi
callq 0x56e8
movq %r14, %rdi
movq %r12, %rsi
xorl %edx, %edx
callq 0x10458
movq 0x770(%rsp), %rax
movq (%rax), %rsi
addq %r13, %rsi
movq %r14, %rdi
callq 0xfe3c
movw $0x100, %r12w           # imm = 0x100
movw %r12w, 0x969(%rsp)
movl $0x385, %edx            # imm = 0x385
leaq 0x96b(%rsp), %r14
movq %r14, %rdi
leaq 0x4c7b(%rsp), %rsi
callq 0x52f0
andw $0x0, 0xcf0(%rsp)
movl 0x77c(%rsp), %eax
movl %eax, 0x387(%r14)
movzwl 0x780(%rsp), %eax
movw %ax, 0x38b(%r14)
movaps 0x14111(%rip), %xmm0    # 0x20020
movups %xmm0, 0xcf8(%rsp)
movapd 0x14111(%rip), %xmm0    # 0x20030
movupd %xmm0, 0xd08(%rsp)
movabsq $0x3ff0000000000000, %rax # imm = 0x3FF0000000000000
movq %rax, 0xd18(%rsp)
andl $0x0, 0xd20(%rsp)
movl $0x1c4, %edx            # imm = 0x1C4
leaq 0xd24(%rsp), %rdi
leaq 0x1a2c(%rsp), %rsi
callq 0x52f0
movb $0x1, 0xee8(%rsp)
movl 0x789(%rsp), %eax
movl 0x78c(%rsp), %ecx
movl %eax, 0x57e(%r14)
movl %ecx, 0x581(%r14)
movw %r12w, 0xef0(%rsp)
movl $0x1df, %edx            # imm = 0x1DF
leaq 0xef2(%rsp), %rdi
leaq 0x184c(%rsp), %rsi
callq 0x52f0
movl 0x782(%rsp), %eax
movl 0x785(%rsp), %ecx
movl %eax, 0x766(%r14)
movl %ecx, 0x769(%r14)
movq 0x770(%rsp), %rax
movq (%rax), %rsi
addq %r13, %rsi
leaq 0x5000(%rsp), %rdi
callq 0x105ec
movq 0x770(%rsp), %rax
movq (%rax), %rax
movsd 0x258(%rax,%r13), %xmm0
movsd 0x260(%rax,%r13), %xmm1
movsd 0x268(%rax,%r13), %xmm2
movl $0xee, %ecx
movq %rsp, %rdi
leaq 0x968(%rsp), %rsi
rep  movsq (%rsi), %es:(%rdi)
leaq 0x5000(%rsp), %r14
movq %r14, %rdi
leaq 0x1bf0(%rsp), %rsi
leaq 0x2cd0(%rsp), %rdx
callq 0x10515
movq %r14, %rdi
callq 0x6e12
movq 0x22f6b(%rip), %rdi     # 0x2efb0
leaq 0x1494d(%rip), %rsi     # 0x20999
callq 0x5370
movq %rax, %rdi
callq 0x5270
movq 0x22f50(%rip), %rsi     # 0x2efb0
movq (%rsi), %rax
movq -0x18(%rax), %rcx
movl 0x18(%rsi,%rcx), %edx
movl $0xfffffefb, %edi       # imm = 0xFFFFFEFB
andl %edi, %edx
orl $0x4, %edx
movl %edx, 0x18(%rsi,%rcx)
movq -0x18(%rax), %rax
movq $0x6, 0x8(%rsi,%rax)
movq 0x770(%rsp), %rax
movq (%rax), %rax
movl 0x250(%rax,%r13), %esi
movq %r15, %r14
movq %r15, %rdi
callq 0xfa98
movq %rbp, %rdi
movq %r14, %rsi
leaq 0x14937(%rip), %rdx     # 0x209e8
callq 0x6cb9
movq 0x22ef3(%rip), %r14     # 0x2efb0
movq %r14, %rdi
movq %rbp, %rsi
callq 0x5340
movq %rbp, %rdi
callq 0x56e8
movq %r15, %rdi
callq 0x56e8
movsd 0x233c0(%rip), %xmm0    # 0x2f4a0
movq %r14, %rdi
callq 0x5570
movq %rax, %rdi
leaq 0x148ee(%rip), %rsi     # 0x209e0
callq 0x5370
movsd 0x233a9(%rip), %xmm0    # 0x2f4a8
movq %rax, %rdi
callq 0x5570
movq %rax, %rdi
callq 0x51b0
leaq 0x2338a(%rip), %rax     # 0x2f4a0
movq %rax, 0x800(%rsp)
andq $0x0, 0x808(%rsp)
pushq $0x1
popq %rax
movq %rax, 0x810(%rsp)
andq $0x0, 0x23366(%rip)     # 0x2f4a0
movq %rax, 0x818(%rsp)
andq $0x0, 0x7c0(%rsp)
movq %rbp, %rdi
movq %r15, %rsi
callq 0x10bb8
movq %rbp, %rdi
callq 0x10c60
leaq 0x2cd0(%rsp), %rdi
callq 0x10b88
leaq 0x3db0(%rsp), %rdi
callq 0x56e8
movq 0x7b0(%rsp), %rdi
incq %rdi
addq $0xec0, %r13            # imm = 0xEC0
movq %r15, %rbp
jmp 0xbcfd
movq 0x22e17(%rip), %rbx     # 0x2efb0
movq (%rbx), %rax
movq -0x18(%rax), %rcx
movl $0xfffffefb, %edx       # imm = 0xFFFFFEFB
andl 0x18(%rbx,%rcx), %edx
orl $0x4, %edx
movl %edx, 0x18(%rbx,%rcx)
movq -0x18(%rax), %rax
andq $0x0, 0x8(%rbx,%rax)
leaq 0x14853(%rip), %rsi     # 0x20a14
movq %rbx, %rdi
callq 0x5370
movsd 0x232c7(%rip), %xmm0    # 0x2f498
movq %rax, %rdi
callq 0x5570
movq %rax, %rdi
callq 0x51b0
leaq 0x1483e(%rip), %rsi     # 0x20a26
movq %rbx, %rdi
callq 0x5370
movsd 0x23298(%rip), %xmm0    # 0x2f490
movq %rax, %rdi
callq 0x5570
movq %rax, %rdi
callq 0x51b0
leaq 0x1482a(%rip), %rsi     # 0x20a39
movq %rbx, %rdi
callq 0x5370
movq %rax, %rdi
callq 0x51b0
addq $0x6d88, %rsp           # imm = 0x6D88
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %rax, %rbx
leaq 0x1bf0(%rsp), %rdi
callq 0x10c60
jmp 0xc3d1
movq %rax, %rbx
jmp 0xc260
jmp 0xc3bc
movq %rax, %rbx
leaq 0x1bf0(%rsp), %rdi
callq 0x56e8
leaq 0x3db0(%rsp), %rdi
callq 0x56e8
jmp 0xc3d1
jmp 0xc288
movq %rax, %rbx
jmp 0xc2bf
movq %rax, %rbx
jmp 0xc2a5
movq %rax, %rbx
jmp 0xc3de
jmp 0xc288
movq %rax, %rbx
jmp 0xc3eb
movq %rax, %rbx
jmp 0xc2b2
movq %rax, %rbx
leaq 0x2cd0(%rsp), %rdi
callq 0x56e8
leaq 0x7e0(%rsp), %rdi
callq 0x56e8
leaq 0x1bf0(%rsp), %rdi
callq 0x56e8
leaq 0x3db0(%rsp), %rdi
jmp 0xc3e6
movq %rax, %rbx
leaq 0x800(%rsp), %rdi
callq 0x10c60
jmp 0xc378
movq %rax, %rbx
jmp 0xc345
movq %rax, %rbx
leaq 0x2cd0(%rsp), %rdi
callq 0x56e8
jmp 0xc30d
movq %rax, %rbx
leaq 0x5000(%rsp), %rdi
callq 0x6e12
jmp 0xc378
movq %rax, %rbx
leaq 0x800(%rsp), %rdi
callq 0x56e8
jmp 0xc338
movq %rax, %rbx
leaq 0x800(%rsp), %rdi
callq 0x56e8
jmp 0xc357
jmp 0xc375
movq %rax, %rbx
jmp 0xc385
movq %rax, %rbx
leaq 0x790(%rsp), %rdi
callq 0x56e8
leaq 0x7c0(%rsp), %rdi
callq 0x56e8
jmp 0xc369
movq %rax, %rbx
leaq 0x7c0(%rsp), %rdi
callq 0x56e8
jmp 0xc378
movq %rax, %rbx
leaq 0x7e0(%rsp), %rdi
jmp 0xc38d
jmp 0xc3bc
movq %rax, %rbx
leaq 0x2cd0(%rsp), %rdi
callq 0x10b88
leaq 0x3db0(%rsp), %rdi
callq 0x56e8
jmp 0xc3f8
movq %rax, %rbx
leaq 0x3db0(%rsp), %rdi
callq 0x6e12
jmp 0xc3c4
jmp 0xc3c1
movq %rax, %rbx
leaq 0x5ec0(%rsp), %rdi
callq 0x6e12
jmp 0xc3d1
jmp 0xc3bc
movq %rax, %rbx
jmp 0xc3d1
movq %rax, %rbx
leaq 0x1bf0(%rsp), %rdi
callq 0x10b88
leaq 0x2cd0(%rsp), %rdi
callq 0x10b88
leaq 0x7c0(%rsp), %rdi
callq 0x56e8
leaq 0x790(%rsp), %rdi
callq 0x6870
movq %rbx, %rdi
callq 0x5640