// File: /workspace/github_c_makefile_star2_O2/PoulinV[P]AxiCLASS/build/../external/heating/noninjection.c
// Function: noninjection_init
int noninjection_init(struct precision* ppr,
                      struct background* pba,
                      struct thermodynamics* pth,
                      struct perturbations* ppt,
                      struct primordial* ppm,
                      struct noninjection* pni){

  /** Summary: */

  /** - Define local variables */
  int index_k,index_z;
  int last_index_back, last_index_thermo, last_index_coarse = 0;
  double *pvecback, *pvecthermo;
  double R, dkappa;
  double dEdt;
  double z_wkb;
  double h,a,b;
  double temp_injection;
  double z_coarse;

  /* z-table */
  pni->z_size = pth->tt_size;
  class_alloc(pni->z_table,
              pni->z_size*sizeof(double),
              pni->error_message);
  memcpy(pni->z_table,
         pth->z_table,
         pni->z_size*sizeof(double));
  pni->last_index_z = 0;

  /* Photon non-injected table */
  class_alloc(pni->photon_dep_table,
              pni->z_size*sizeof(double),
              pni->error_message);
  /* Initialize to zero */
  for(index_z = 0; index_z < pni->z_size; ++index_z){
    pni->photon_dep_table[index_z] = 0.;
  }

  /** - Allocate new storage space that is a bit coarser in z as to reduce computational costs */
  pni->logz_max = log(1.+pni->z_table[pni->z_size-1]);
  pni->z_size_coarse = ppr->noninjection_Nz_log; /* This table is only going to be filled after the initial run anyway */
  class_alloc(pni->z_table_coarse,
              pni->z_size_coarse*sizeof(double),
              pni->error_message);
  for(index_z=0;index_z<pni->z_size_coarse-1;++index_z){
    pni->z_table_coarse[index_z] = exp(index_z*pni->logz_max/(pni->z_size_coarse-1))-1.;
  }
  pni->z_table_coarse[pni->z_size_coarse-1] = pni->z_table[pni->z_size-1];

  class_alloc(pni->noninjection_table,
              pni->z_size_coarse*sizeof(double),
              pni->error_message);
  class_alloc(pni->ddnoninjection_table,
              pni->z_size_coarse*sizeof(double),
              pni->error_message);

  /** - Allocate qunatities from primordial structure */
  pni->k_max = ppr->k_max_acc_diss;
  pni->k_min = ppr->k_min_acc_diss;
  pni->k_size = ppr->noninjection_Nk_acc_diss;
  class_alloc(pni->k,
              pni->k_size*sizeof(double),
              pni->error_message);
  class_alloc(pni->k_weights,
              pni->k_size*sizeof(double),
              pni->error_message);
  class_alloc(pni->pk_primordial_k,
              pni->k_size*sizeof(double),
              pni->error_message);

  /** - Import primordial spectrum */
  for (index_k=0; index_k<pni->k_size; index_k++) {
    pni->k[index_k] = exp(log(pni->k_min)+(log(pni->k_max)-log(pni->k_min))/(pni->k_size)*index_k);

    class_call(primordial_spectrum_at_k(ppm,
                                        ppt->index_md_scalars,
                                        linear,
                                        pni->k[index_k],
                                        &pni->pk_primordial_k[index_k]),
               ppm->error_message,
               pni->error_message);
  }

  /** - Prepare wavenumber integration */
  class_call(array_trapezoidal_weights(pni->k,
                                       pni->k_size,
                                       pni->k_weights,
                                       pni->error_message),
             pni->error_message,
             pni->error_message);

  class_alloc(pni->integrand_approx,
              pni->k_size*sizeof(double),
              pni->error_message);

  /** - Allocate backgorund and thermodynamcis vectors */
  last_index_back = 0;
  last_index_thermo = 0;
  class_alloc(pvecback,
              pba->bg_size*sizeof(double),
              pni->error_message);
  class_alloc(pvecthermo,
              pth->tt_size*sizeof(double),
              pni->error_message);

  /** - Calculate WKB approximation ampltidue factor f_nu at early times */
  z_wkb = ppr->z_wkb_acc_diss;
  class_call(background_at_z(pba,
                             z_wkb,
                             long_info,
                             inter_normal,
                             &last_index_back,
                             pvecback),
             pba->error_message,
             pni->error_message);

  pni->f_nu_wkb = (1.-pvecback[pba->index_bg_rho_g]/(pvecback[pba->index_bg_Omega_r]*pvecback[pba->index_bg_rho_crit]));

  /** - Import quantities from other structures */
  /* Background structure */
  pni->H0 = pba->H0*_c_/_Mpc_over_m_;                                                               // [1/s]
  pni->T_g0 = pba->T_cmb;                                                                           // [K]
  pni->Omega0_b = pba->Omega0_b;                                                                    // [-]
  pni->Omega0_cdm = pba->Omega0_cdm;                                                                // [-]
  pni->rho0_cdm = pba->Omega0_cdm*pow(pni->H0,2)*3/8./_PI_/_G_*_c_*_c_;                             // [J/m^3]

  /* Thermodynamics structure */
  pni->fHe = pth->fHe;                                                                              // [-]
  pni->N_e0 = pth->n_e;                                                                             // [1/m^3]

  /** - Loop over z and calculate the heating at each point */
  dEdt = 0.;
  for(index_z=0; index_z<pni->z_size_coarse; ++index_z){

    z_coarse = pni->z_table_coarse[index_z];
    pni->noninjection_table[index_z] = 0.;

    /* Import quantities from background and thermodynamics structure */
    class_call(background_at_z(pba,
                               z_coarse,
                               long_info,
                               inter_closeby,
                               &last_index_back,
                               pvecback),
               pba->error_message,
               pni->error_message);

    pni->H = pvecback[pba->index_bg_H]*_c_/_Mpc_over_m_;                                            // [1/s]
    pni->a = pvecback[pba->index_bg_a];                                                             // [-]
    pni->rho_g = pvecback[pba->index_bg_rho_g]*_Jm3_over_Mpc2_;                                     // [J/m^3]
    R = (3./4.)*pvecback[pba->index_bg_rho_b]/pvecback[pba->index_bg_rho_g];                        // [-]
    pni->nH = pni->N_e0*pow(pni->a,-3);

    class_call(thermodynamics_at_z(pba,
                                   pth,
                                   z_coarse,
                                   inter_normal,
                                   &last_index_thermo,
                                   pvecback,
                                   pvecthermo),
               pth->error_message,
               pni->error_message);

    dkappa = pvecthermo[pth->index_th_dkappa];                                                      // [1/Mpc]
    pni->dkD_dz = 1./(pvecback[pba->index_bg_H]*dkappa)*(16./15.+pow(R,2.)/(1.+R))/(6.*(1.0+R));    // [Mpc^2]
    pni->kD = 2.*_PI_/pvecthermo[pth->index_th_r_d];                                                // [1/Mpc]
    pni->T_b = pvecthermo[pth->index_th_Tb];                                                        // [K]
    pni->T_g = pni->T_g0/pni->a;                                                                    // [K]
    pni->x_e = pvecthermo[pth->index_th_xe];                                                        // [-]
    pni->heat_capacity = (3./2.)*_k_B_*pni->nH*(1.+pni->fHe+pni->x_e);                              // [J/(K m^3)]

    /* Include all non-injected energy that does not need to be deposited (i.e. adiabatic terms as below) */
    /* First order cooling of photons due to adiabatic interaction with baryons */
    class_call(noninjection_rate_adiabatic_cooling(pni,
                                                   z_coarse,
                                                   &dEdt),
               pni->error_message,
               pni->error_message);
    pni->noninjection_table[index_z]+=dEdt;

    /* Second order acoustic dissipation of BAO */
    class_call(noninjection_rate_acoustic_diss(pni,
                                               z_coarse,
                                               &dEdt),
               pni->error_message,
               pni->error_message);
    pni->noninjection_table[index_z]+=dEdt;
  }

  /** - Spline coarse z table in view of interpolation */
  class_call(array_spline_table_columns2(pni->z_table_coarse,
                                         pni->z_size_coarse,
                                         pni->noninjection_table,
                                         1,
                                         pni->ddnoninjection_table,
                                         _SPLINE_EST_DERIV_,
                                         pni->error_message),
             pni->error_message,
             pni->error_message);

  /** - Evaluate the spline coarse table at the fine-grained z samples */
  for(index_z=0;index_z<pni->z_size;++index_z){
    class_call(array_spline_hunt(pni->z_table_coarse,
                                 pni->z_size_coarse,
                                 pni->z_table[index_z],
                                 &last_index_coarse,
                                 &h,&a,&b,
                                 pni->error_message),
               pni->error_message,
               pni->error_message);

    temp_injection = array_spline_eval(pni->noninjection_table,
                                       pni->ddnoninjection_table,
                                       last_index_coarse,
                                       last_index_coarse+1,
                                       h,a,b);
    pni->photon_dep_table[index_z]+=temp_injection;
  }

  /** - Free temporary variables */
  free(pvecback);
  free(pvecthermo);

  return _SUCCESS_;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x898, %rsp            # imm = 0x898
movq %r9, %rbx
movq %r8, 0x38(%rsp)
movq %rcx, 0x40(%rsp)
movq %rdx, %rbp
movq %rsi, 0x30(%rsp)
andl $0x0, 0x10(%rsp)
movq %rdi, %r13
movslq 0xf08(%rdx), %r15
movl %r15d, 0x60(%r9)
leaq (,%r15,8), %r14
movq %r14, %rdi
callq 0x8490
movq %rax, 0x68(%rbx)
testq %rax, %rax
je 0xcaf93
movq %rax, %r12
movq %rbp, 0x20(%rsp)
movq 0xf10(%rbp), %rsi
movq %rax, %rdi
movq %r14, %rdx
callq 0x82f0
andl $0x0, 0x70(%rbx)
movq %r14, %rdi
callq 0x8490
movq %rax, 0x108(%rbx)
testq %rax, %rax
je 0xcb153
xorl %ecx, %ecx
testl %r15d, %r15d
movl $0x0, %edx
cmovgl %r15d, %edx
movq %r13, %rbp
cmpq %rcx, %rdx
je 0xcaf10
andq $0x0, (%rax,%rcx,8)
incq %rcx
jmp 0xcaf01
movsd -0x8(%r12,%r15,8), %xmm0
addsd 0x1a341(%rip), %xmm0    # 0xe5260
callq 0x82e0
movsd %xmm0, 0x48(%rbx)
movslq 0x1dc(%rbp), %r15
movl %r15d, 0x40(%rbx)
movq %r15, %rdi
shlq $0x3, %rdi
callq 0x8490
movq %rax, 0x38(%rbx)
testq %rax, %rax
je 0xcb196
xorl %r14d, %r14d
movq 0x38(%rsp), %r12
leal -0x1(%r15), %ecx
movslq %ecx, %rdx
cmpq %rdx, %r14
jge 0xcafd6
cvtsi2sd %r14d, %xmm0
mulsd 0x48(%rbx), %xmm0
cvtsi2sd %ecx, %xmm1
divsd %xmm1, %xmm0
callq 0x86a0
addsd 0x1a868(%rip), %xmm0    # 0xe57e8
movq 0x38(%rbx), %rax
movsd %xmm0, (%rax,%r14,8)
incq %r14
movl 0x40(%rbx), %r15d
jmp 0xcaf55
shll $0x3, %r15d
leaq 0x1a066(%rip), %rsi     # 0xe5004
leaq 0x55a0b(%rip), %rdx     # 0x1209b0
leaq 0x90(%rsp), %r14
movq %r14, %rdi
movl %r15d, %ecx
xorl %eax, %eax
callq 0x2e014
addq $0x110, %rbx            # imm = 0x110
leaq 0x1a06c(%rip), %rsi     # 0xe5034
leaq 0x559ee(%rip), %rdx     # 0x1209bd
pushq $0x2f
jmp 0xcb324
movq 0x68(%rbx), %rcx
movslq 0x60(%rbx), %rsi
movsd -0x8(%rcx,%rsi,8), %xmm0
movsd %xmm0, (%rax,%rdx,8)
movslq %r15d, %r14
shlq $0x3, %r14
movq %r14, %rdi
callq 0x8490
movq %rax, 0x50(%rbx)
testq %rax, %rax
je 0xcb1da
movq %r14, %rdi
callq 0x8490
movq %rax, 0x58(%rbx)
testq %rax, %rax
je 0xcb21d
movups 0x1e8(%rbp), %xmm0
movups %xmm0, (%rbx)
movslq 0x1e0(%rbp), %r14
movl %r14d, 0x10(%rbx)
movq %r14, %r15
shlq $0x3, %r15
movq %r15, %rdi
callq 0x8490
movq %rax, 0x18(%rbx)
testq %rax, %rax
je 0xcb260
movq %r15, %rdi
callq 0x8490
movq %rax, 0x20(%rbx)
testq %rax, %rax
je 0xcb2a4
movq %r15, %rdi
callq 0x8490
movq %rax, 0x28(%rbx)
testq %rax, %rax
je 0xcb2e5
xorl %r14d, %r14d
xorl %r15d, %r15d
movslq 0x10(%rbx), %rsi
cmpq %rsi, %r15
jge 0xcb349
movsd (%rbx), %xmm0
callq 0x82e0
movsd %xmm0, 0x28(%rsp)
movsd 0x8(%rbx), %xmm0
callq 0x82e0
movsd %xmm0, 0x60(%rsp)
movsd (%rbx), %xmm0
callq 0x82e0
movsd 0x60(%rsp), %xmm1
subsd %xmm0, %xmm1
cvtsi2sdl 0x10(%rbx), %xmm0
divsd %xmm0, %xmm1
cvtsi2sd %r15d, %xmm0
mulsd %xmm1, %xmm0
addsd 0x28(%rsp), %xmm0
callq 0x86a0
movq 0x18(%rbx), %rax
movsd %xmm0, (%rax,%r14)
movq 0x40(%rsp), %rax
movl 0x848(%rax), %esi
movq 0x28(%rbx), %rcx
addq %r14, %rcx
movq %r12, %rdi
xorl %edx, %edx
callq 0x8f820
incq %r15
addq $0x8, %r14
cmpl $0x1, %eax
jne 0xcb07b
addq $0x32a, %r12            # imm = 0x32A
leaq 0x1a2d5(%rip), %rsi     # 0xe53f0
leaq 0x55934(%rip), %rdx     # 0x120a56
leaq 0x90(%rsp), %r14
movq %r14, %rdi
movq %r12, %rcx
xorl %eax, %eax
callq 0x2e014
addq $0x110, %rbx            # imm = 0x110
leaq 0x19eef(%rip), %rsi     # 0xe5034
leaq 0x55871(%rip), %rdx     # 0x1209bd
pushq $0x68
jmp 0xcb324
shll $0x3, %r15d
leaq 0x19ea6(%rip), %rsi     # 0xe5004
leaq 0x5586a(%rip), %rdx     # 0x1209cf
leaq 0x90(%rsp), %r14
movq %r14, %rdi
movl %r15d, %ecx
xorl %eax, %eax
callq 0x2e014
addq $0x110, %rbx            # imm = 0x110
leaq 0x19eac(%rip), %rsi     # 0xe5034
leaq 0x5582e(%rip), %rdx     # 0x1209bd
pushq $0x38
jmp 0xcb324
leal (,%r15,8), %ecx
leaq 0x19e5f(%rip), %rsi     # 0xe5004
leaq 0x55839(%rip), %rdx     # 0x1209e5
leaq 0x90(%rsp), %r14
movq %r14, %rdi
xorl %eax, %eax
callq 0x2e014
addq $0x110, %rbx            # imm = 0x110
leaq 0x19e68(%rip), %rsi     # 0xe5034
leaq 0x557ea(%rip), %rdx     # 0x1209bd
pushq $0x43
jmp 0xcb324
shll $0x3, %r15d
leaq 0x19e1f(%rip), %rsi     # 0xe5004
leaq 0x5580d(%rip), %rdx     # 0x1209f9
leaq 0x90(%rsp), %r14
movq %r14, %rdi
movl %r15d, %ecx
xorl %eax, %eax
callq 0x2e014
addq $0x110, %rbx            # imm = 0x110
leaq 0x19e25(%rip), %rsi     # 0xe5034
leaq 0x557a7(%rip), %rdx     # 0x1209bd
pushq $0x4b
jmp 0xcb324
shll $0x3, %r15d
leaq 0x19ddc(%rip), %rsi     # 0xe5004
leaq 0x557e2(%rip), %rdx     # 0x120a11
leaq 0x90(%rsp), %r14
movq %r14, %rdi
movl %r15d, %ecx
xorl %eax, %eax
callq 0x2e014
addq $0x110, %rbx            # imm = 0x110
leaq 0x19de2(%rip), %rsi     # 0xe5034
leaq 0x55764(%rip), %rdx     # 0x1209bd
pushq $0x4e
jmp 0xcb324
leal (,%r14,8), %ecx
leaq 0x19d95(%rip), %rsi     # 0xe5004
leaq 0x557b5(%rip), %rdx     # 0x120a2b
leaq 0x90(%rsp), %r14
movq %r14, %rdi
xorl %eax, %eax
callq 0x2e014
addq $0x110, %rbx            # imm = 0x110
leaq 0x19d9e(%rip), %rsi     # 0xe5034
leaq 0x55720(%rip), %rdx     # 0x1209bd
pushq $0x56
jmp 0xcb324
leal (,%r14,8), %ecx
leaq 0x19d51(%rip), %rsi     # 0xe5004
leaq 0x55778(%rip), %rdx     # 0x120a32
leaq 0x90(%rsp), %r14
movq %r14, %rdi
xorl %eax, %eax
callq 0x2e014
addq $0x110, %rbx            # imm = 0x110
leaq 0x19d5a(%rip), %rsi     # 0xe5034
leaq 0x556dc(%rip), %rdx     # 0x1209bd
pushq $0x59
jmp 0xcb324
leal (,%r14,8), %ecx
leaq 0x19d10(%rip), %rsi     # 0xe5004
leaq 0x55746(%rip), %rdx     # 0x120a41
leaq 0x90(%rsp), %r14
movq %r14, %rdi
xorl %eax, %eax
callq 0x2e014
addq $0x110, %rbx            # imm = 0x110
leaq 0x19d19(%rip), %rsi     # 0xe5034
leaq 0x5569b(%rip), %rdx     # 0x1209bd
pushq $0x5c
popq %rcx
movq %rbx, %rdi
movq %r14, %r8
xorl %eax, %eax
callq 0x2e014
pushq $0x1
popq %rbp
movl %ebp, %eax
addq $0x898, %rsp            # imm = 0x898
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq 0x18(%rbx), %rdi
movq 0x20(%rbx), %rdx
leaq 0x110(%rbx), %r12
movq %r12, %rcx
callq 0x191be
cmpl $0x1, %eax
jne 0xcb39d
leaq 0x1a084(%rip), %rsi     # 0xe53f0
leaq 0x55751(%rip), %rdx     # 0x120ac4
leaq 0x90(%rsp), %rbx
movq %rbx, %rdi
movq %r12, %rcx
xorl %eax, %eax
callq 0x2e014
leaq 0x19ca5(%rip), %rsi     # 0xe5034
leaq 0x55627(%rip), %rdx     # 0x1209bd
pushq $0x71
jmp 0xcb528
movslq 0x10(%rbx), %r14
leaq (,%r14,8), %rdi
callq 0x8490
movq %rax, 0x30(%rbx)
testq %rax, %rax
je 0xcb47f
andl $0x0, 0x14(%rsp)
andl $0x0, 0x4c(%rsp)
movq 0x30(%rsp), %rax
movslq 0x43c(%rax), %r14
leaq (,%r14,8), %rdi
callq 0x8490
testq %rax, %rax
je 0xcb4b8
movq %rax, %r13
movq 0x20(%rsp), %rax
movslq 0xf08(%rax), %r15
leaq (,%r15,8), %rdi
callq 0x8490
testq %rax, %rax
je 0xcb4f1
movq %rax, %r14
movsd 0x1f8(%rbp), %xmm0
pushq $0x2
popq %rsi
leaq 0x14(%rsp), %rcx
movq 0x30(%rsp), %r15
movq %r15, %rdi
xorl %edx, %edx
movq %r13, %r8
callq 0x585e8
cmpl $0x1, %eax
jne 0xcb534
addq $0xd1c, %r15            # imm = 0xD1C
leaq 0x19fa8(%rip), %rsi     # 0xe53f0
leaq 0x556de(%rip), %rdx     # 0x120b2d
leaq 0x90(%rsp), %rbx
movq %rbx, %rdi
movq %r15, %rcx
xorl %eax, %eax
callq 0x2e014
leaq 0x19bc9(%rip), %rsi     # 0xe5034
leaq 0x5554b(%rip), %rdx     # 0x1209bd
movq %r12, %rdi
movl $0x8a, %ecx
jmp 0xcb52c
shll $0x3, %r14d
leaq 0x19b7a(%rip), %rsi     # 0xe5004
leaq 0x55686(%rip), %rdx     # 0x120b17
leaq 0x90(%rsp), %rbx
movq %rbx, %rdi
movl %r14d, %ecx
xorl %eax, %eax
callq 0x2e014
leaq 0x19b87(%rip), %rsi     # 0xe5034
leaq 0x55509(%rip), %rdx     # 0x1209bd
pushq $0x75
jmp 0xcb528
shll $0x3, %r14d
leaq 0x19b41(%rip), %rsi     # 0xe5004
leaq 0x40c68(%rip), %rdx     # 0x10c132
leaq 0x90(%rsp), %rbx
movq %rbx, %rdi
movl %r14d, %ecx
xorl %eax, %eax
callq 0x2e014
leaq 0x19b4e(%rip), %rsi     # 0xe5034
leaq 0x554d0(%rip), %rdx     # 0x1209bd
pushq $0x7c
jmp 0xcb528
shll $0x3, %r15d
leaq 0x19b08(%rip), %rsi     # 0xe5004
leaq 0x40c3d(%rip), %rdx     # 0x10c140
leaq 0x90(%rsp), %rbx
movq %rbx, %rdi
movl %r15d, %ecx
xorl %eax, %eax
callq 0x2e014
leaq 0x19b15(%rip), %rsi     # 0xe5034
leaq 0x55497(%rip), %rdx     # 0x1209bd
pushq $0x7f
popq %rcx
movq %r12, %rdi
movq %rbx, %r8
jmp 0xcb32b
movq %r14, 0x50(%rsp)
movq %r12, 0x18(%rsp)
movslq 0x38c(%r15), %rax
movsd (%r13,%rax,8), %xmm0
movslq 0x404(%r15), %rax
movsd (%r13,%rax,8), %xmm1
movslq 0x408(%r15), %rax
mulsd (%r13,%rax,8), %xmm1
divsd %xmm1, %xmm0
movsd 0x19cec(%rip), %xmm1    # 0xe5260
subsd %xmm0, %xmm1
movsd %xmm1, 0x78(%rbx)
movsd 0x1e52b(%rip), %xmm2    # 0xe9ab0
movsd (%r15), %xmm0
mulsd %xmm2, %xmm0
divsd 0x1e412(%rip), %xmm0    # 0xe99a8
movsd %xmm0, 0x90(%rbx)
movups 0x18(%r15), %xmm1
movups %xmm1, 0x98(%rbx)
movsd 0x28(%r15), %xmm1
mulsd %xmm0, %xmm0
mulsd %xmm1, %xmm0
mulsd 0x1b188(%rip), %xmm0    # 0xe6748
mulsd 0x1e3e8(%rip), %xmm0    # 0xe99b0
divsd 0x1c9c8(%rip), %xmm0    # 0xe7f98
movsd %xmm1, 0xa8(%rbx)
divsd 0x1e3d8(%rip), %xmm0    # 0xe99b8
mulsd %xmm2, %xmm0
mulsd %xmm2, %xmm0
movsd %xmm0, 0xb0(%rbx)
movq 0x20(%rsp), %rax
movupd 0x1000(%rax), %xmm0
movupd %xmm0, 0xb8(%rbx)
xorl %r14d, %r14d
pushq $0x1
popq %rbp
movq 0x50(%rsp), %r15
movslq 0x40(%rbx), %rsi
movq 0x38(%rbx), %rdi
cmpq %rsi, %r14
jge 0xcb897
movsd (%rdi,%r14,8), %xmm0
movq 0x50(%rbx), %rax
andq $0x0, (%rax,%r14,8)
movq 0x30(%rsp), %r12
movq %r12, %rdi
movsd %xmm0, 0x40(%rsp)
pushq $0x2
popq %rsi
movl %ebp, %edx
leaq 0x14(%rsp), %rcx
movq %r13, %r8
callq 0x585e8
cmpl $0x1, %eax
je 0xcb8fc
movq %r14, 0x28(%rsp)
movslq 0x384(%r12), %rax
movsd (%r13,%rax,8), %xmm0
mulsd 0x1e43b(%rip), %xmm0    # 0xe9ab0
divsd 0x1e32b(%rip), %xmm0    # 0xe99a8
movsd %xmm0, 0xc8(%rbx)
movslq 0x380(%r12), %rax
movsd (%r13,%rax,8), %xmm0
movsd %xmm0, 0xd0(%rbx)
movslq 0x38c(%r12), %rax
movsd (%r13,%rax,8), %xmm1
movsd %xmm1, 0x70(%rsp)
mulsd 0x38f07(%rip), %xmm1    # 0x1045c0
movsd %xmm1, 0xd8(%rbx)
movslq 0x390(%r12), %rax
movsd (%r13,%rax,8), %xmm1
movaps %xmm1, 0x60(%rsp)
movsd 0xc0(%rbx), %xmm1
movsd %xmm1, 0x38(%rsp)
movsd 0x1cd55(%rip), %xmm1    # 0xe8440
callq 0x8650
mulsd 0x38(%rsp), %xmm0
movsd %xmm0, 0xe8(%rbx)
movq %r12, %rdi
movq 0x20(%rsp), %r14
movq %r14, %rsi
movsd 0x40(%rsp), %xmm0
xorl %edx, %edx
leaq 0x4c(%rsp), %rcx
movq %r13, %r8
movq %r15, %r9
callq 0x61ff8
cmpl $0x1, %eax
je 0xcb943
movapd 0x60(%rsp), %xmm3
mulsd 0x1e2e0(%rip), %xmm3    # 0xe9a18
divsd 0x70(%rsp), %xmm3
movslq 0xe80(%r14), %rax
movsd (%r15,%rax,8), %xmm0
movslq 0x384(%r12), %rax
movq %r13, %r12
mulsd (%r13,%rax,8), %xmm0
movapd %xmm3, %xmm1
mulsd %xmm3, %xmm1
shufpd $0x2, 0x51542(%rip), %xmm1 # xmm1 = xmm1[0],mem[1]
movsd 0x19aea(%rip), %xmm4    # 0xe5260
addsd %xmm4, %xmm3
movapd %xmm3, %xmm2
unpcklpd %xmm0, %xmm2            # xmm2 = xmm2[0],xmm0[0]
divpd %xmm2, %xmm1
movapd %xmm1, %xmm0
addsd 0x38e5e(%rip), %xmm0    # 0x1045f0
unpckhpd %xmm1, %xmm1            # xmm1 = xmm1[1,1]
mulsd %xmm0, %xmm1
shufpd $0x2, 0x551fd(%rip), %xmm1 # xmm1 = xmm1[0],mem[1]
mulsd 0x1aea5(%rip), %xmm3    # 0xe6650
movslq 0xf00(%r14), %rax
movhpd (%r15,%rax,8), %xmm3    # xmm3 = xmm3[0],mem[0]
divpd %xmm3, %xmm1
movupd %xmm1, 0x80(%rbx)
movslq 0xee4(%r14), %rax
movsd (%r15,%rax,8), %xmm0
movsd %xmm0, 0xf0(%rbx)
movsd 0x98(%rbx), %xmm0
divsd 0xd0(%rbx), %xmm0
movsd %xmm0, 0xf8(%rbx)
movslq 0xe7c(%r14), %rax
movsd (%r15,%rax,8), %xmm1
movsd %xmm1, 0x100(%rbx)
movsd 0xe8(%rbx), %xmm2
mulsd 0x38dba(%rip), %xmm2    # 0x1045d0
movsd 0xb8(%rbx), %xmm3
addsd %xmm4, %xmm3
addsd %xmm1, %xmm3
mulsd %xmm2, %xmm3
movsd %xmm3, 0xe0(%rbx)
xorpd 0x199f6(%rip), %xmm3    # 0xe5230
mulsd 0xc8(%rbx), %xmm3
mulsd %xmm0, %xmm3
movsd %xmm3, 0x58(%rsp)
movq 0x50(%rbx), %rax
movq 0x28(%rsp), %r14
addsd (%rax,%r14,8), %xmm3
movsd %xmm3, (%rax,%r14,8)
movq %rbx, %rdi
leaq 0x58(%rsp), %rsi
callq 0xcbb3f
testl %eax, %eax
jne 0xcb98a
movsd 0x58(%rsp), %xmm0
movq 0x50(%rbx), %rax
addsd (%rax,%r14,8), %xmm0
movsd %xmm0, (%rax,%r14,8)
incq %r14
movq %r12, %r13
jmp 0xcb610
movq 0x50(%rbx), %rdx
movq 0x58(%rbx), %r8
movq 0x18(%rsp), %r12
movq %r12, (%rsp)
pushq $0x1
popq %rbp
movl %ebp, %ecx
movl %ebp, %r9d
callq 0x141fa
cmpl $0x1, %eax
jne 0xcb9cd
leaq 0x19b2b(%rip), %rsi     # 0xe53f0
leaq 0x5539d(%rip), %rdx     # 0x120c69
leaq 0x90(%rsp), %rbx
movq %rbx, %rdi
movq %r12, %rcx
xorl %eax, %eax
callq 0x2e014
leaq 0x1974c(%rip), %rsi     # 0xe5034
leaq 0x550ce(%rip), %rdx     # 0x1209bd
movq %r12, %rdi
movl $0xde, %ecx
jmp 0xcbb09
addq $0xd1c, %r12            # imm = 0xD1C
leaq 0x19ae6(%rip), %rsi     # 0xe53f0
leaq 0x5526d(%rip), %rdx     # 0x120b7e
leaq 0x90(%rsp), %rbx
movq %rbx, %rdi
movq %r12, %rcx
xorl %eax, %eax
callq 0x2e014
leaq 0x19707(%rip), %rsi     # 0xe5034
leaq 0x55089(%rip), %rdx     # 0x1209bd
movq 0x18(%rsp), %rdi
movl $0xa9, %ecx
jmp 0xcbb09
addq $0x1064, %r14           # imm = 0x1064
leaq 0x19a9f(%rip), %rsi     # 0xe53f0
leaq 0x5527b(%rip), %rdx     # 0x120bd3
leaq 0x90(%rsp), %rbx
movq %rbx, %rdi
movq %r14, %rcx
xorl %eax, %eax
callq 0x2e014
leaq 0x196c0(%rip), %rsi     # 0xe5034
leaq 0x55042(%rip), %rdx     # 0x1209bd
movq 0x18(%rsp), %rdi
movl $0xb9, %ecx
jmp 0xcbb09
leaq 0x19a5f(%rip), %rsi     # 0xe53f0
leaq 0x5529b(%rip), %rdx     # 0x120c33
leaq 0x90(%rsp), %rbx
movq %rbx, %rdi
movq 0x18(%rsp), %r14
movq %r14, %rcx
xorl %eax, %eax
callq 0x2e014
leaq 0x1967b(%rip), %rsi     # 0xe5034
leaq 0x54ffd(%rip), %rdx     # 0x1209bd
movq %r14, %rdi
movl $0xd1, %ecx
jmp 0xcbb09
xorl %r15d, %r15d
leaq 0x10(%rsp), %r14
movslq 0x60(%rbx), %rax
cmpq %rax, %r15
jge 0xcbab7
movq 0x38(%rbx), %rdi
movl 0x40(%rbx), %esi
movq 0x68(%rbx), %rax
movsd (%rax,%r15,8), %xmm0
movq %r12, (%rsp)
movq %r14, %rdx
leaq 0x88(%rsp), %rcx
leaq 0x80(%rsp), %r8
leaq 0x78(%rsp), %r9
callq 0x17d10
cmpl $0x1, %eax
je 0xcbad0
movsd 0x80(%rsp), %xmm1
movslq 0x10(%rsp), %rax
movsd 0x78(%rsp), %xmm2
movq 0x50(%rbx), %rcx
movsd 0x8(%rcx,%rax,8), %xmm3
mulsd %xmm2, %xmm3
movsd (%rcx,%rax,8), %xmm0
mulsd %xmm1, %xmm0
movapd %xmm1, %xmm4
mulsd %xmm1, %xmm4
mulsd %xmm1, %xmm4
subsd %xmm1, %xmm4
movapd %xmm2, %xmm1
mulsd %xmm2, %xmm1
mulsd %xmm2, %xmm1
subsd %xmm2, %xmm1
movq 0x58(%rbx), %rcx
mulsd 0x8(%rcx,%rax,8), %xmm1
mulsd (%rcx,%rax,8), %xmm4
addsd %xmm3, %xmm0
addsd %xmm1, %xmm4
movsd 0x88(%rsp), %xmm1
mulsd %xmm1, %xmm4
mulsd %xmm1, %xmm4
divsd 0x1abb8(%rip), %xmm4    # 0xe6650
addsd %xmm0, %xmm4
movq 0x108(%rbx), %rax
addsd (%rax,%r15,8), %xmm4
movsd %xmm4, (%rax,%r15,8)
incq %r15
jmp 0xcb9d5
movq %r13, %rdi
callq 0x8430
movq 0x50(%rsp), %rdi
callq 0x8430
xorl %ebp, %ebp
jmp 0xcb335
leaq 0x19919(%rip), %rsi     # 0xe53f0
leaq 0x5521e(%rip), %rdx     # 0x120cfc
leaq 0x90(%rsp), %rbx
movq %rbx, %rdi
movq %r12, %rcx
xorl %eax, %eax
callq 0x2e014
leaq 0x1953a(%rip), %rsi     # 0xe5034
leaq 0x54ebc(%rip), %rdx     # 0x1209bd
movq %r12, %rdi
movl $0xe9, %ecx
movq %rbx, %r8
xorl %eax, %eax
callq 0x2e014
jmp 0xcb335