// File: /workspace/github_cpp_makefile_star2_O1/sus304[P]ForRocket/src/solver/trajectory_solver.cpp
// Function: forrocket::TrajectorySolver::TrajectorySolver(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>)
forrocket::TrajectorySolver::TrajectorySolver(std::string solver_config_json_file) {
    JsonControl jc_solver_config(solver_config_json_file);
    
    model_id = jc_solver_config.getString("Model ID");
    number_stage = jc_solver_config.getInt("Number of Stage");

    // Making Stage instance
    RocketStageFactory stage_factory;
    for (int i=1; i <= number_stage; ++i) {
        auto jc_stage = JsonControl(jc_solver_config.getString("Stage"+std::to_string(i)+" Config File List"));
        stage_vector.push_back(stage_factory.Create(i, 
                                                jc_stage.getString("Rocket Configuration File Path"),
                                                jc_stage.getString("Engine Configuration File Path"),
                                                jc_stage.getString("Sequence of Event File Path")));
    }

    for (auto& stage : stage_vector) {
        stage.fdr = FlightDataRecorder(&stage.rocket);
    }

    // Prepare Launch - Master Clock
    DateTime launch_date(jc_solver_config.getString("Launch DateTime"));
    master_clock = SequenceClock(launch_date, 0.0);

    // Prepare Launch - Position Velocity Attitude
    Rocket& rocket_first_stage = stage_vector[0].rocket;
    auto jc_launch = jc_solver_config.getSubItem("Launch Condition");

    Eigen::Vector3d pos_init_LLH;
    pos_init_LLH << jc_launch.getDouble("Latitude [deg]"), jc_launch.getDouble("Longitude [deg]"), jc_launch.getDouble("Height for WGS84 [deg]");

    rocket_first_stage.position.Initialize(master_clock.UTC_date_init, pos_init_LLH);

    Eigen::Vector3d vel_init_NED;
    vel_init_NED << jc_launch.getDouble("North Velocity [m/s]"), jc_launch.getDouble("East Velocity [m/s]"), jc_launch.getDouble("Down Velocity [m/s]");
    rocket_first_stage.velocity.Initialize(master_clock.UTC_date_init, vel_init_NED, pos_init_LLH, rocket_first_stage.position.ECI);

    Eigen::Vector3d euler;
    euler << jc_launch.getDouble("Azimuth [deg]"), jc_launch.getDouble("Elevation [deg]"), 0.0;
    euler = euler / 180.0 * 3.14159265;
    rocket_first_stage.attitude.Initialize(euler);

    rocket_first_stage.angular_velocity << 0.0, 0.0, 0.0;

    // Prepare Launch - Wind
    auto jc_wind = jc_solver_config.getSubItem("Wind Condition");
    if (jc_wind.getBool("Enable Wind")) {
        wind = EnvironmentWind(jc_wind.getString("Wind File Path"));
    } else {
        wind = EnvironmentWind(false);
    }
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x1688, %rsp           # imm = 0x1688
movq %rsi, %rbx
movq %rdi, %r13
leaq 0x10(%rdi), %r12
movq %r12, (%rdi)
xorl %eax, %eax
movq %rax, 0x8(%rdi)
movb $0x0, 0x10(%rdi)
leaq 0x28(%rdi), %rcx
movq %rcx, 0x78(%rsp)
xorpd %xmm0, %xmm0
movupd %xmm0, 0x28(%rdi)
movq %rax, 0x38(%rdi)
leaq 0x40(%rdi), %r15
movq %r15, %rdi
callq 0x17c0e
leaq 0x88(%r13), %rdi
movq %rdi, 0x50(%rsp)
callq 0x3363a
leaq 0x390(%rsp), %r14
movq %r14, -0x10(%r14)
movq (%rbx), %rsi
movq 0x8(%rbx), %rdx
addq %rsi, %rdx
leaq 0x380(%rsp), %rdi
callq 0x7f1c
leaq 0x30(%rsp), %rdi
leaq 0x380(%rsp), %rsi
movq %r13, (%rsp)
callq 0x800c
movq 0x380(%rsp), %rdi
cmpq %r14, %rdi
je 0x31b05
movq 0x390(%rsp), %rsi
incq %rsi
callq 0x5350
leaq 0x370(%rsp), %r14
movq %r14, -0x10(%r14)
leaq 0xba88(%rip), %rsi      # 0x3d5a0
leaq 0xba89(%rip), %rdx      # 0x3d5a8
leaq 0x360(%rsp), %rdi
callq 0x92e2
leaq 0x470(%rsp), %rdi
leaq 0x30(%rsp), %rsi
leaq 0x360(%rsp), %rdx
callq 0x816a
leaq 0x470(%rsp), %rbx
movq %r13, %rdi
movq %rbx, %rsi
callq 0x53f0
movq (%rbx), %rdi
leaq 0x480(%rsp), %rax
cmpq %rax, %rdi
je 0x31b79
movq 0x480(%rsp), %rsi
incq %rsi
callq 0x5350
movq 0x360(%rsp), %rdi
cmpq %r14, %rdi
je 0x31b96
movq 0x370(%rsp), %rsi
incq %rsi
callq 0x5350
leaq 0x350(%rsp), %rbx
movq %rbx, -0x10(%rbx)
leaq 0xba00(%rip), %rsi      # 0x3d5a9
leaq 0xba08(%rip), %rdx      # 0x3d5b8
leaq 0x340(%rsp), %rdi
callq 0x92e2
leaq 0x30(%rsp), %rdi
leaq 0x340(%rsp), %rsi
callq 0x818a
movq %r15, 0x28(%rsp)
movq %r12, 0x8(%rsp)
movl %eax, 0x20(%r13)
movq 0x340(%rsp), %rdi
cmpq %rbx, %rdi
je 0x31bfa
movq 0x350(%rsp), %rsi
incq %rsi
callq 0x5350
cmpl $0x0, 0x20(%r13)
jle 0x32063
leaq 0x68(%rsp), %r15
movl $0x1, %r12d
leaq 0x80(%rsp), %r14
leaq 0x320(%rsp), %rbx
movl $0xd1b71759, %edx       # imm = 0xD1B71759
movl $0x1, %r13d
cmpl $0xa, %r12d
jb 0x31c73
movl $0x4, %r13d
movl %r12d, %eax
cmpl $0x63, %eax
jbe 0x31c6a
cmpl $0x3e7, %eax            # imm = 0x3E7
jbe 0x31c70
cmpl $0x2710, %eax           # imm = 0x2710
jb 0x31c73
movl %eax, %ecx
imulq %rdx, %rcx
shrq $0x2d, %rcx
addl $0x4, %r13d
cmpl $0x1869f, %eax          # imm = 0x1869F
movl %ecx, %eax
ja 0x31c3a
addl $-0x3, %r13d
jmp 0x31c73
addl $-0x2, %r13d
jmp 0x31c73
decl %r13d
movl %r13d, %esi
leaq 0x90(%rsp), %rax
movq %rax, 0x80(%rsp)
movq %r14, %rdi
movl $0x2d, %edx
callq 0x53c0
movq 0x80(%rsp), %rdi
movl %r13d, %esi
movl %r12d, %edx
callq 0x91d2
movl $0x5, %r8d
movq %r14, %rbp
movq %r14, %rdi
xorl %esi, %esi
xorl %edx, %edx
leaq 0xb8f6(%rip), %rcx      # 0x3d5b3
callq 0x53a0
leaq 0x480(%rsp), %rsi
movq %rsi, 0x470(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x31cf6
movq %rdx, 0x470(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x480(%rsp)
jmp 0x31cfe
movupd (%rcx), %xmm0
movupd %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, 0x478(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0x470(%rsp), %rdi
leaq 0xb891(%rip), %rsi      # 0x3d5b9
callq 0x5650
leaq 0x68(%rsp), %rsi
movq %rsi, 0x58(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
movq %rbx, %r13
je 0x31d58
movq %rdx, 0x58(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x68(%rsp)
jmp 0x31d60
movupd (%rcx), %xmm0
movupd %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, 0x60(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq %r13, %rdi
leaq 0x30(%rsp), %rsi
leaq 0x58(%rsp), %rdx
callq 0x816a
leaq 0xa0(%rsp), %rdi
movq %r13, %rsi
callq 0x800c
movq 0x320(%rsp), %rdi
leaq 0x330(%rsp), %rax
cmpq %rax, %rdi
je 0x31dbf
movq 0x330(%rsp), %rsi
incq %rsi
callq 0x5350
movq 0x58(%rsp), %rdi
leaq 0x68(%rsp), %rax
cmpq %rax, %rdi
leaq 0xa0(%rsp), %r13
je 0x31de3
movq 0x68(%rsp), %rsi
incq %rsi
callq 0x5350
movq 0x470(%rsp), %rdi
leaq 0x480(%rsp), %rax
cmpq %rax, %rdi
je 0x31e08
movq 0x480(%rsp), %rsi
incq %rsi
callq 0x5350
movq 0x80(%rsp), %rdi
leaq 0x90(%rsp), %rax
cmpq %rax, %rdi
je 0x31e2d
movq 0x90(%rsp), %rsi
incq %rsi
callq 0x5350
leaq 0x128(%rsp), %rax
movq %rax, 0x118(%rsp)
leaq 0x118(%rsp), %r15
movq %r15, %rdi
leaq 0xb77c(%rip), %rsi      # 0x3d5cb
leaq 0xb793(%rip), %rdx      # 0x3d5e9
callq 0x92e2
leaq 0x160(%rsp), %rdi
movq %r13, %rsi
movq %r15, %rdx
callq 0x816a
leaq 0x108(%rsp), %rax
movq %rax, 0xf8(%rsp)
leaq 0xf8(%rsp), %r15
movq %r15, %rdi
leaq 0xb75a(%rip), %rsi      # 0x3d5ea
leaq 0xb771(%rip), %rdx      # 0x3d608
callq 0x92e2
leaq 0x140(%rsp), %rdi
movq %r13, %rsi
movq %r15, %rdx
callq 0x816a
leaq 0xe8(%rsp), %rax
movq %rax, 0xd8(%rsp)
leaq 0xd8(%rsp), %r15
movq %r15, %rdi
leaq 0xb738(%rip), %rsi      # 0x3d609
leaq 0xb74c(%rip), %rdx      # 0x3d624
callq 0x92e2
leaq 0x300(%rsp), %r14
movq %r14, %rdi
movq %r13, %rsi
movq %r15, %rdx
callq 0x816a
leaq 0x470(%rsp), %r15
movq %r15, %rdi
leaq 0x17(%rsp), %rsi
movl %r12d, %edx
leaq 0x160(%rsp), %rcx
leaq 0x140(%rsp), %r8
movq %r14, %r9
callq 0x2cde4
movq 0x78(%rsp), %rdi
movq %r15, %rsi
callq 0x33c3e
leaq 0x12f0(%rsp), %rdi
callq 0x2e1fe
leaq 0x480(%rsp), %rdi
callq 0x2c6b0
movq 0x300(%rsp), %rdi
leaq 0x310(%rsp), %rax
cmpq %rax, %rdi
je 0x31f6a
movq 0x310(%rsp), %rsi
incq %rsi
callq 0x5350
movq 0xd8(%rsp), %rdi
leaq 0xe8(%rsp), %rax
cmpq %rax, %rdi
je 0x31f8f
movq 0xe8(%rsp), %rsi
incq %rsi
callq 0x5350
movq 0x140(%rsp), %rdi
leaq 0x150(%rsp), %rax
cmpq %rax, %rdi
je 0x31fb4
movq 0x150(%rsp), %rsi
incq %rsi
callq 0x5350
movq 0xf8(%rsp), %rdi
leaq 0x108(%rsp), %rax
cmpq %rax, %rdi
je 0x31fd9
movq 0x108(%rsp), %rsi
incq %rsi
callq 0x5350
movq 0x160(%rsp), %rdi
leaq 0x170(%rsp), %rax
cmpq %rax, %rdi
je 0x31ffe
movq 0x170(%rsp), %rsi
incq %rsi
callq 0x5350
movq 0x118(%rsp), %rdi
leaq 0x128(%rsp), %rax
cmpq %rax, %rdi
je 0x32023
movq 0x128(%rsp), %rsi
incq %rsi
callq 0x5350
movq %r13, %rdi
callq 0x860c
movzbl 0xa0(%rsp), %esi
leaq 0xa8(%rsp), %rdi
callq 0x86ae
leal 0x1(%r12), %eax
movq (%rsp), %r13
cmpl 0x20(%r13), %r12d
movl %eax, %r12d
movq %rbp, %r14
movl $0xd1b71759, %edx       # imm = 0xD1B71759
leaq 0x68(%rsp), %r15
jl 0x31c25
movq 0x28(%r13), %r14
movq 0x30(%r13), %r15
cmpq %r15, %r14
je 0x320a7
leaq 0x470(%rsp), %rbx
leaq 0x10(%r14), %rsi
movq %rbx, %rdi
callq 0x1bdec
leaq 0xe80(%r14), %rdi
movq %rbx, %rsi
callq 0x3366e
movq %rbx, %rdi
callq 0x2e1fe
addq $0x1210, %r14           # imm = 0x1210
cmpq %r15, %r14
jne 0x32078
leaq 0x2f0(%rsp), %rbx
movq %rbx, -0x10(%rbx)
leaq 0xb56b(%rip), %rsi      # 0x3d625
leaq 0xb573(%rip), %rdx      # 0x3d634
leaq 0x2e0(%rsp), %rdi
callq 0x92e2
leaq 0x3c0(%rsp), %rdi
leaq 0x30(%rsp), %rsi
leaq 0x2e0(%rsp), %rdx
callq 0x816a
movq 0x28(%rsp), %r14
leaq 0x80(%rsp), %rdi
leaq 0x3c0(%rsp), %rsi
callq 0x173ba
leaq 0x3d0(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x32123
movq 0x3d0(%rsp), %rsi
incq %rsi
callq 0x5350
movq 0x2e0(%rsp), %rdi
cmpq %rbx, %rdi
je 0x32140
movq 0x2f0(%rsp), %rsi
incq %rsi
callq 0x5350
leaq 0x454(%rsp), %rdi
leaq 0x80(%rsp), %rsi
callq 0x17896
leaq 0x470(%rsp), %rdi
leaq 0x454(%rsp), %rsi
xorpd %xmm0, %xmm0
callq 0x17c90
leaq 0x488(%rsp), %rsi
movq -0x8(%rsi), %rax
movq %rax, 0x10(%r14)
movupd -0x18(%rsi), %xmm0
movupd %xmm0, (%r14)
leaq 0x58(%r13), %rdi
movq %rdi, 0x28(%rsp)
callq 0x178c0
movupd 0x4a8(%rsp), %xmm0
movupd %xmm0, 0x78(%r13)
movq 0x28(%r13), %r13
leaq 0x2d0(%rsp), %rbx
movq %rbx, -0x10(%rbx)
leaq 0xb479(%rip), %rsi      # 0x3d635
leaq 0xb482(%rip), %rdx      # 0x3d645
leaq 0x2c0(%rsp), %rdi
callq 0x92e2
leaq 0x18(%rsp), %rdi
leaq 0x30(%rsp), %rsi
leaq 0x2c0(%rsp), %rdx
callq 0x81f2
movq 0x2c0(%rsp), %rdi
cmpq %rbx, %rdi
je 0x32204
movq 0x2d0(%rsp), %rsi
incq %rsi
callq 0x5350
leaq 0x2b0(%rsp), %rbx
movq %rbx, -0x10(%rbx)
leaq 0xb42f(%rip), %rsi      # 0x3d646
leaq 0xb436(%rip), %rdx      # 0x3d654
leaq 0x2a0(%rsp), %rdi
callq 0x92e2
leaq 0x18(%rsp), %rdi
leaq 0x2a0(%rsp), %rsi
callq 0x81ac
leaq 0xa0(%rsp), %rax
movq %rax, 0x470(%rsp)
movq $0x0, 0x478(%rsp)
movl $0x1, %ecx
movq %rcx, 0x480(%rsp)
movq %rcx, 0x488(%rsp)
movsd %xmm0, (%rax)
leaq 0x290(%rsp), %r12
movq %r12, -0x10(%r12)
leaq 0xb3cf(%rip), %rsi      # 0x3d655
leaq 0xb3d7(%rip), %rdx      # 0x3d664
leaq 0x280(%rsp), %rdi
callq 0x92e2
leaq 0x18(%rsp), %rdi
leaq 0x280(%rsp), %rsi
callq 0x81ac
leaq 0x400(%rsp), %r15
movsd %xmm0, (%r15)
leaq 0x470(%rsp), %rdi
movq %r15, %rsi
callq 0x1726a
movq %rax, %r14
leaq 0x270(%rsp), %rbp
movq %rbp, -0x10(%rbp)
leaq 0xb386(%rip), %rsi      # 0x3d665
leaq 0xb395(%rip), %rdx      # 0x3d67b
leaq 0x260(%rsp), %rdi
callq 0x92e2
leaq 0x18(%rsp), %rdi
leaq 0x260(%rsp), %rsi
callq 0x81ac
leaq 0x3e0(%rsp), %rsi
movsd %xmm0, (%rsi)
movq %r14, %rdi
callq 0x1726a
movq 0x260(%rsp), %rdi
cmpq %rbp, %rdi
je 0x32336
movq 0x270(%rsp), %rsi
incq %rsi
callq 0x5350
movq 0x280(%rsp), %rdi
cmpq %r12, %rdi
je 0x32353
movq 0x290(%rsp), %rsi
incq %rsi
callq 0x5350
movq 0x488(%rsp), %rax
addq 0x478(%rsp), %rax
cmpq $0x3, %rax
jne 0x32da5
cmpq $0x1, 0x480(%rsp)
jne 0x32da5
movq 0x2a0(%rsp), %rdi
cmpq %rbx, %rdi
je 0x32399
movq 0x2b0(%rsp), %rsi
incq %rsi
callq 0x5350
leaq 0x438(%rsp), %rdi
movq 0x28(%rsp), %rsi
callq 0x17896
leaq 0x2b0(%r13), %r14
leaq 0x438(%rsp), %rsi
leaq 0xa0(%rsp), %rdx
movq %r14, %rdi
callq 0x1a3e4
leaq 0x250(%rsp), %rbp
movq %rbp, -0x10(%rbp)
leaq 0xb29f(%rip), %rsi      # 0x3d67c
leaq 0xb2ac(%rip), %rdx      # 0x3d690
leaq 0x240(%rsp), %rdi
callq 0x92e2
leaq 0x18(%rsp), %rdi
leaq 0x240(%rsp), %rsi
callq 0x81ac
movq %r15, 0x470(%rsp)
movq $0x0, 0x478(%rsp)
movl $0x1, %eax
movq %rax, 0x480(%rsp)
movq %rax, 0x488(%rsp)
movsd %xmm0, 0x400(%rsp)
leaq 0xc8(%rsp), %rax
movq %rax, -0x10(%rax)
leaq 0xb249(%rip), %rsi      # 0x3d691
leaq 0xb255(%rip), %rdx      # 0x3d6a4
leaq 0xb8(%rsp), %rdi
callq 0x92e2
leaq 0x18(%rsp), %rdi
leaq 0xb8(%rsp), %rsi
callq 0x81ac
leaq 0x3e0(%rsp), %r15
movsd %xmm0, (%r15)
leaq 0x470(%rsp), %rdi
movq %r15, %rsi
callq 0x1726a
movq %rax, %r12
leaq 0x230(%rsp), %rbx
movq %rbx, -0x10(%rbx)
leaq 0xb204(%rip), %rsi      # 0x3d6a5
leaq 0xb210(%rip), %rdx      # 0x3d6b8
leaq 0x220(%rsp), %rdi
callq 0x92e2
leaq 0x18(%rsp), %rdi
leaq 0x220(%rsp), %rsi
callq 0x81ac
leaq 0x40(%rsp), %rsi
movsd %xmm0, (%rsi)
movq %r12, %rdi
callq 0x1726a
movq 0x220(%rsp), %rdi
cmpq %rbx, %rdi
je 0x324f5
movq 0x230(%rsp), %rsi
incq %rsi
callq 0x5350
movq 0xb8(%rsp), %rdi
leaq 0xc8(%rsp), %rax
cmpq %rax, %rdi
je 0x3251a
movq 0xc8(%rsp), %rsi
incq %rsi
callq 0x5350
movq 0x488(%rsp), %rax
addq 0x478(%rsp), %rax
cmpq $0x3, %rax
jne 0x32da5
cmpq $0x1, 0x480(%rsp)
jne 0x32da5
movq 0x240(%rsp), %rdi
cmpq %rbp, %rdi
je 0x32560
movq 0x250(%rsp), %rsi
incq %rsi
callq 0x5350
leaq 0x41c(%rsp), %rdi
movq 0x28(%rsp), %rsi
callq 0x17896
leaq 0x2f8(%r13), %rdi
leaq 0x41c(%rsp), %rsi
leaq 0x400(%rsp), %rdx
leaq 0xa0(%rsp), %rcx
movq %r14, %r8
callq 0x1a916
leaq 0x210(%rsp), %rbx
movq %rbx, -0x10(%rbx)
leaq 0xb10d(%rip), %rsi      # 0x3d6b9
leaq 0xb113(%rip), %rdx      # 0x3d6c6
leaq 0x200(%rsp), %rdi
callq 0x92e2
leaq 0x18(%rsp), %rdi
leaq 0x200(%rsp), %rsi
callq 0x81ac
movq %r15, 0x470(%rsp)
movq $0x0, 0x478(%rsp)
movl $0x1, %eax
movq %rax, 0x480(%rsp)
movq %rax, 0x488(%rsp)
movsd %xmm0, 0x3e0(%rsp)
leaq 0x1f0(%rsp), %r14
movq %r14, -0x10(%r14)
leaq 0xb0b0(%rip), %rsi      # 0x3d6c7
leaq 0xb0b8(%rip), %rdx      # 0x3d6d6
leaq 0x1e0(%rsp), %rdi
callq 0x92e2
leaq 0x18(%rsp), %rdi
leaq 0x1e0(%rsp), %rsi
callq 0x81ac
leaq 0x40(%rsp), %rsi
movsd %xmm0, (%rsi)
leaq 0x470(%rsp), %rdi
callq 0x1726a
leaq 0x138(%rsp), %rsi
movq $0x0, (%rsi)
movq %rax, %rdi
callq 0x1726a
movq 0x1e0(%rsp), %rdi
cmpq %r14, %rdi
je 0x32687
movq 0x1f0(%rsp), %rsi
incq %rsi
callq 0x5350
movq 0x488(%rsp), %rax
addq 0x478(%rsp), %rax
cmpq $0x3, %rax
jne 0x32da5
cmpq $0x1, 0x480(%rsp)
jne 0x32da5
movq 0x200(%rsp), %rdi
cmpq %rbx, %rdi
je 0x326cd
movq 0x210(%rsp), %rsi
incq %rsi
callq 0x5350
leaq 0x3e0(%rsp), %rsi
movapd (%rsi), %xmm0
divpd 0xae9f(%rip), %xmm0     # 0x3d580
mulpd 0xaea7(%rip), %xmm0     # 0x3d590
movapd %xmm0, (%rsi)
movsd 0x10(%rsi), %xmm0
divsd 0x4916(%rip), %xmm0     # 0x37010
mulsd 0x4906(%rip), %xmm0     # 0x37008
movsd %xmm0, 0x10(%rsi)
leaq 0x3e0(%r13), %rdi
callq 0x195cc
leaq 0x440(%r13), %rax
leaq 0x470(%rsp), %rdi
movq %rax, (%rdi)
xorl %eax, %eax
movq %rax, 0x8(%rdi)
movl $0x1, %ecx
movq %rcx, 0x10(%rdi)
movq %rcx, 0x18(%rdi)
movq %rax, 0x440(%r13)
leaq 0x40(%rsp), %rsi
movq %rax, (%rsi)
callq 0x1726a
leaq 0x138(%rsp), %rsi
movq $0x0, (%rsi)
movq %rax, %rdi
movq (%rsp), %r15
callq 0x1726a
movq 0x488(%rsp), %rax
addq 0x478(%rsp), %rax
cmpq $0x3, %rax
jne 0x32da5
cmpq $0x1, 0x480(%rsp)
jne 0x32da5
leaq 0x1d0(%rsp), %rbx
movq %rbx, -0x10(%rbx)
leaq 0xaf34(%rip), %rsi      # 0x3d6d7
leaq 0xaf3b(%rip), %rdx      # 0x3d6e5
leaq 0x1c0(%rsp), %rdi
callq 0x92e2
leaq 0x40(%rsp), %rdi
leaq 0x30(%rsp), %rsi
leaq 0x1c0(%rsp), %rdx
callq 0x81f2
movq 0x1c0(%rsp), %rdi
cmpq %rbx, %rdi
je 0x327eb
movq 0x1d0(%rsp), %rsi
incq %rsi
callq 0x5350
leaq 0x1b0(%rsp), %r14
movq %r14, -0x10(%r14)
leaq 0xaee8(%rip), %rsi      # 0x3d6e6
leaq 0xaeec(%rip), %rdx      # 0x3d6f1
leaq 0x1a0(%rsp), %rdi
callq 0x92e2
leaq 0x40(%rsp), %rdi
leaq 0x1a0(%rsp), %rsi
callq 0x81d0
movl %eax, %ebx
movq 0x1a0(%rsp), %rdi
cmpq %r14, %rdi
je 0x32843
movq 0x1b0(%rsp), %rsi
incq %rsi
callq 0x5350
testb %bl, %bl
je 0x32914
leaq 0x190(%rsp), %rbx
movq %rbx, -0x10(%rbx)
leaq 0xae94(%rip), %rsi      # 0x3d6f2
leaq 0xae9b(%rip), %rdx      # 0x3d700
leaq 0x180(%rsp), %rdi
callq 0x92e2
leaq 0x3a0(%rsp), %rdi
leaq 0x40(%rsp), %rsi
leaq 0x180(%rsp), %rdx
callq 0x816a
leaq 0x470(%rsp), %rdi
leaq 0x3a0(%rsp), %rsi
callq 0x187c4
leaq 0x470(%rsp), %rsi
movq 0x50(%rsp), %rdi
callq 0x19cc2
leaq 0x128(%r15), %rdi
leaq 0x510(%rsp), %rsi
callq 0x19cc2
leaq 0x470(%rsp), %rdi
callq 0x33866
leaq 0x3b0(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x328f5
movq 0x3b0(%rsp), %rsi
incq %rsi
callq 0x5350
movq 0x180(%rsp), %rdi
cmpq %rbx, %rdi
je 0x32956
movq 0x190(%rsp), %rsi
incq %rsi
callq 0x5350
jmp 0x32956
leaq 0x470(%rsp), %rdi
xorl %esi, %esi
callq 0x18664
leaq 0x470(%rsp), %rsi
movq 0x50(%rsp), %rdi
callq 0x19cc2
leaq 0x128(%r15), %rdi
leaq 0x510(%rsp), %rsi
callq 0x19cc2
leaq 0x470(%rsp), %rdi
callq 0x33866
leaq 0x40(%rsp), %rdi
callq 0x860c
leaq 0x48(%rsp), %rdi
movzbl -0x8(%rdi), %esi
callq 0x86ae
leaq 0x18(%rsp), %rdi
callq 0x860c
leaq 0x20(%rsp), %rdi
movzbl -0x8(%rdi), %esi
callq 0x86ae
leaq 0x30(%rsp), %rdi
callq 0x860c
leaq 0x38(%rsp), %rdi
movzbl -0x8(%rdi), %esi
callq 0x86ae
addq $0x1688, %rsp           # imm = 0x1688
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %rax, %r15
jmp 0x329ce
movq %rax, %r15
jmp 0x329ef
jmp 0x32a3a
jmp 0x32a3a
movq %rax, %r15
leaq 0x470(%rsp), %rdi
callq 0x33866
leaq 0x3b0(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x329ef
movq 0x3b0(%rsp), %rsi
incq %rsi
callq 0x5350
movq 0x180(%rsp), %rdi
cmpq %rbx, %rdi
je 0x32a3d
movq 0x190(%rsp), %rsi
jmp 0x32a30
movq %rax, %r15
leaq 0x470(%rsp), %rdi
callq 0x33866
jmp 0x32a3d
movq %rax, %r15
movq 0x1a0(%rsp), %rdi
cmpq %r14, %rdi
je 0x32a3d
movq 0x1b0(%rsp), %rsi
incq %rsi
callq 0x5350
jmp 0x32a3d
movq %rax, %r15
leaq 0x40(%rsp), %rdi
callq 0x272b0
jmp 0x32d8a
movq %rax, %r15
movq 0x1c0(%rsp), %rdi
cmpq %rbx, %rdi
je 0x32d8a
movq 0x1d0(%rsp), %rsi
jmp 0x32d82
jmp 0x32d02
jmp 0x32a74
movq %rax, %r15
movq 0x488(%rsp), %rax
addq 0x478(%rsp), %rax
cmpq $0x3, %rax
jne 0x32da5
cmpq $0x1, 0x480(%rsp)
je 0x32d8a
jmp 0x32da5
jmp 0x32d02
jmp 0x32c05
movq %rax, %r15
jmp 0x32c25
movq %rax, %r15
jmp 0x32c4e
jmp 0x32d02
jmp 0x32c93
movq %rax, %r15
jmp 0x32cbb
movq %rax, %r15
jmp 0x32ce4
jmp 0x32d02
jmp 0x32d2c
movq %rax, %r15
jmp 0x32d4c
movq %rax, %r15
jmp 0x32d6d
jmp 0x32d02
movq %rax, %r15
movq 0x2c0(%rsp), %rdi
cmpq %rbx, %rdi
je 0x32d94
movq 0x2d0(%rsp), %rsi
jmp 0x32b5d
jmp 0x32dcc
movq %rax, %r15
leaq 0x3d0(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x32b44
movq 0x3d0(%rsp), %rsi
incq %rsi
callq 0x5350
jmp 0x32b44
movq %rax, %r15
movq 0x2e0(%rsp), %rdi
cmpq %rbx, %rdi
je 0x32d94
movq 0x2f0(%rsp), %rsi
incq %rsi
callq 0x5350
jmp 0x32d94
jmp 0x32dcc
movq %rax, %r14
movq 0x340(%rsp), %rdi
cmpq %rbx, %rdi
je 0x32b8f
movq 0x350(%rsp), %rsi
incq %rsi
callq 0x5350
movq (%rsp), %r13
movq %r14, %rbx
jmp 0x32fc8
movq %rax, %rbx
jmp 0x32fc8
movq %rax, %rbx
movq 0x360(%rsp), %rdi
cmpq %r14, %rdi
je 0x32e76
movq 0x370(%rsp), %rsi
incq %rsi
callq 0x5350
jmp 0x32e76
movq %rax, %rbx
jmp 0x32e76
movq %rax, %rbx
movq 0x380(%rsp), %rdi
cmpq %r14, %rdi
je 0x32bf4
movq 0x390(%rsp), %rsi
incq %rsi
callq 0x5350
movq (%rsp), %r13
jmp 0x32fd2
movq %rax, %rbx
jmp 0x32fd2
movq %rax, %r15
movq 0x1e0(%rsp), %rdi
cmpq %r14, %rdi
je 0x32c25
movq 0x1f0(%rsp), %rsi
incq %rsi
callq 0x5350
movq 0x488(%rsp), %rax
addq 0x478(%rsp), %rax
cmpq $0x3, %rax
jne 0x32da5
cmpq $0x1, 0x480(%rsp)
jne 0x32da5
movq 0x200(%rsp), %rdi
cmpq %rbx, %rdi
je 0x32d8a
movq 0x210(%rsp), %rsi
jmp 0x32d82
jmp 0x32d02
movq %rax, %r15
movq 0x220(%rsp), %rdi
cmpq %rbx, %rdi
je 0x32c96
movq 0x230(%rsp), %rsi
incq %rsi
callq 0x5350
jmp 0x32c96
movq %rax, %r15
movq 0xb8(%rsp), %rdi
leaq 0xc8(%rsp), %rax
cmpq %rax, %rdi
je 0x32cbb
movq 0xc8(%rsp), %rsi
incq %rsi
callq 0x5350
movq 0x488(%rsp), %rax
addq 0x478(%rsp), %rax
cmpq $0x3, %rax
jne 0x32da5
cmpq $0x1, 0x480(%rsp)
jne 0x32da5
movq 0x240(%rsp), %rdi
cmpq %rbp, %rdi
je 0x32d8a
movq 0x250(%rsp), %rsi
jmp 0x32d82
movq %rax, %r15
jmp 0x32d8a
movq %rax, %r15
movq 0x260(%rsp), %rdi
cmpq %rbp, %rdi
je 0x32d2f
movq 0x270(%rsp), %rsi
incq %rsi
callq 0x5350
jmp 0x32d2f
movq %rax, %r15
movq 0x280(%rsp), %rdi
cmpq %r12, %rdi
je 0x32d4c
movq 0x290(%rsp), %rsi
incq %rsi
callq 0x5350
movq 0x488(%rsp), %rax
addq 0x478(%rsp), %rax
cmpq $0x3, %rax
jne 0x32da5
cmpq $0x1, 0x480(%rsp)
jne 0x32da5
movq 0x2a0(%rsp), %rdi
cmpq %rbx, %rdi
je 0x32d8a
movq 0x2b0(%rsp), %rsi
incq %rsi
callq 0x5350
leaq 0x18(%rsp), %rdi
callq 0x272b0
movq 0x8(%rsp), %r12
movq (%rsp), %r13
movq %r15, %rbx
jmp 0x32fc8
leaq 0x7964(%rip), %rdi      # 0x3a710
leaq 0x79fb(%rip), %rsi      # 0x3a7ae
leaq 0x7be6(%rip), %rcx      # 0x3a9a0
movl $0x78, %edx
callq 0x5230
movq %rax, %rbx
jmp 0x32fdc
movq %rax, %r15
jmp 0x32d94
movq %rax, %rbx
jmp 0x32e71
movq %rax, %rbx
jmp 0x32e4c
movq %rax, %rbx
jmp 0x32e27
movq %rax, %rbx
jmp 0x32e10
movq %rax, %rbx
movq 0x320(%rsp), %rdi
leaq 0x330(%rsp), %rax
cmpq %rax, %rdi
je 0x32e10
movq 0x330(%rsp), %rsi
incq %rsi
callq 0x5350
movq 0x58(%rsp), %rdi
cmpq %r15, %rdi
je 0x32e27
movq 0x68(%rsp), %rsi
incq %rsi
callq 0x5350
movq 0x470(%rsp), %rdi
leaq 0x480(%rsp), %rax
cmpq %rax, %rdi
je 0x32e4c
movq 0x480(%rsp), %rsi
incq %rsi
callq 0x5350
movq 0x80(%rsp), %rdi
leaq 0x90(%rsp), %rax
cmpq %rax, %rdi
je 0x32e71
movq 0x90(%rsp), %rsi
incq %rsi
callq 0x5350
movq 0x8(%rsp), %r12
movq (%rsp), %r13
jmp 0x32fc8
movq %rax, %rbx
movq 0x8(%rsp), %r12
movq (%rsp), %r13
jmp 0x32fbb
movq %rax, %rbx
jmp 0x32f8d
movq %rax, %rbx
jmp 0x32f68
movq %rax, %rbx
jmp 0x32f43
movq %rax, %rbx
jmp 0x32f1e
movq %rax, %rbx
jmp 0x32ef9
movq %rax, %rbx
jmp 0x32ed4
movq %rax, %rbx
leaq 0x12f0(%rsp), %rdi
callq 0x2e1fe
leaq 0x480(%rsp), %rdi
callq 0x2c6b0
movq 0x300(%rsp), %rdi
leaq 0x310(%rsp), %rax
cmpq %rax, %rdi
je 0x32ef9
movq 0x310(%rsp), %rsi
incq %rsi
callq 0x5350
movq 0xd8(%rsp), %rdi
leaq 0xe8(%rsp), %rax
cmpq %rax, %rdi
je 0x32f1e
movq 0xe8(%rsp), %rsi
incq %rsi
callq 0x5350
movq 0x140(%rsp), %rdi
leaq 0x150(%rsp), %rax
cmpq %rax, %rdi
je 0x32f43
movq 0x150(%rsp), %rsi
incq %rsi
callq 0x5350
movq 0xf8(%rsp), %rdi
leaq 0x108(%rsp), %rax
cmpq %rax, %rdi
je 0x32f68
movq 0x108(%rsp), %rsi
incq %rsi
callq 0x5350
movq 0x160(%rsp), %rdi
leaq 0x170(%rsp), %rax
cmpq %rax, %rdi
je 0x32f8d
movq 0x170(%rsp), %rsi
incq %rsi
callq 0x5350
movq 0x8(%rsp), %r12
movq (%rsp), %r13
movq 0x118(%rsp), %rdi
leaq 0x128(%rsp), %rax
cmpq %rax, %rdi
je 0x32fbb
movq 0x128(%rsp), %rsi
incq %rsi
callq 0x5350
leaq 0xa0(%rsp), %rdi
callq 0x272b0
leaq 0x30(%rsp), %rdi
callq 0x272b0
movq 0x50(%rsp), %rdi
callq 0x33866
movq 0x78(%rsp), %rdi
callq 0x33946
movq (%r13), %rdi
cmpq %r12, %rdi
je 0x32ffb
movq (%r12), %rsi
incq %rsi
callq 0x5350
movq %rbx, %rdi
callq 0x55e0
movq %rax, %rbx
movq 0x8(%rsp), %r12
jmp 0x32fc8
nop