// File: JRLamontagne[P]cdice_sa/CDICEInit.cpp
// Function: populateDICE(DICE*, std::vector<double, std::allocator<double>>)
void populateDICE(DICE *dice, vector<double> parms)
{
	// Parameter index variable
	int ipar = 0;

	// Preferences ---------------------------------
	dice->econ.elasmu = (parms[ipar++]);		// Elasticity of marginal utility of consumption
  dice->econ.prstp = (parms[ipar++]);		// Initial rate of social time preference (per year)
  
  // Population and Technology -------------------
  dice->econ.gama = (parms[ipar++]);		// Capital elasticity in production function
  dice->econ.pop0 = (parms[ipar++]);		// Initial world population [Millions]
  dice->econ.popadj = (parms[ipar++]);		// Growth rate to calibrate to 2050 population projection
  dice->econ.popasym = (parms[ipar++]);	// Asymptotic world population [Millions]
  dice->econ.dk = (parms[ipar++]);			// Depreciation rate on capital (per year)
  dice->econ.q0 = (parms[ipar++]);			// Initial world gross output [Trillions 2005 US $]
  dice->econ.k0 = (parms[ipar++]);			// Initial capital value [Trillions 2005 US $]
  dice->econ.a0 = (parms[ipar++]);			// Initial level of total factor productivity (TFP)
  dice->econ.ga0 = (parms[ipar++]);		// Initial growth rate for TFP (per 5 years)
  dice->econ.dela = (parms[ipar++]);		// Decline rate of TFP (per 5 years)
	dice->lims.optlrsav = (dice->econ.dk + 0.004) / (dice->econ.dk + 0.004 * dice->econ.elasmu + dice->econ.prstp) * dice->econ.gama;
	
	// Emissions parameters ------------------------
	dice->econ.gsigma1 = (parms[ipar++]);		// Initial growth of sigma (per year)
  dice->econ.dsig = (parms[ipar++]);		// Decline rate of decarbonization (per period)
  dice->econ.eland0 = (parms[ipar++]);		// Carbon emissions from land 2010 [GtCO2 per year]
  dice->econ.deland = (parms[ipar++]);		// Decline rate of land emissions (per period)
  dice->econ.e0 = (parms[ipar++]);		// Industrial emissions 2010 [GtCO2 per year]
  dice->dvars.miu0 = (parms[ipar++]);		// Initial emissions control rate for base case 2010
  //dice->econ.sig0 = dice->carb.e0 / (dice->econ.q0 * (1 - dice->econ.miu0));
						// Carbon Intensity 2010 [kgCO2 per output 2005 USD 2010]

	// Carbon cycle ---------------------------------
	// Initial conditions	
	dice->carb.mat0 = (parms[ipar++]);		// Initial concentration in atmosphere 2010 [GtC]
  dice->carb.mu0 = (parms[ipar++]);		// Initial concentration in upper strata [GtC]
  dice->carb.ml0 = (parms[ipar++]);		// Initial concentration in lower strata [GtC]
  dice->carb.mateq = (parms[ipar++]);		// Equilibrium concentration in atmosphere [GtC]
  dice->carb.mueq = (parms[ipar++]);		// Equilibrium concentration in upper strata [GtC]
  dice->carb.mleq = (parms[ipar++]);		// Equilibrium concentration in lower strata [GtC]
  
  // Flow parameters (Carbon cycle transition matricies)
  dice->carb.b12 = (parms[ipar++]);
  dice->carb.b23 = (parms[ipar++]);
  dice->carb.b11 = 1 - dice->carb.b12;
  dice->carb.b21 = dice->carb.b12 * dice->carb.mateq / dice->carb.mueq;
  dice->carb.b22 = 1 - dice->carb.b21 - dice->carb.b23;
  dice->carb.b32 = dice->carb.b23 * dice->carb.mueq / dice->carb.mleq;
  dice->carb.b33 = 1 - dice->carb.b32;

	// Climate model parameters ---------------------
	if(dice->ctrl.use_doeclim == 1) {
	  dice->clim.t2co = (parms[ipar++]);
  	apply_calibration(dice, dice->clim.t2co);
  }
  else {
  	dice->clim.t2xco2 = (parms[ipar++]);	// Equilibrium temperature impact [dC per doubling CO2]
  }
  dice->carb.fex0 = (parms[ipar++]);	// 2010 forcings of non-CO2 greenhouse gases (GHG) [Wm-2]
  dice->carb.fex1 = (parms[ipar++]);	// 2100 forcings of non-CO2 GHG [Wm-2]
	if(dice->ctrl.use_doeclim == 0) {
    dice->clim.tocean0 = (parms[ipar++]);	// Initial lower stratum temperature change [dC from 1900]
    dice->clim.tatm0 = (parms[ipar++]);	// Initial atmospheric temperature change [dC from 1900]
    dice->clim.c1 = (parms[ipar++]);	// Climate equation coefficient for upper level
    dice->clim.c3 = (parms[ipar++]);	// Transfer coefficient upper to lower stratum
    dice->clim.c4 = (parms[ipar++]);	// Transfer coefficient for lower level
  }
  dice->carb.fco22x = (parms[ipar++]);	// Forcings of equilibrium CO2 doubling [Wm-2]
  if(dice->ctrl.use_doeclim == 0) {
  	dice->clim.lam = dice->carb.fco22x / dice->clim.t2xco2;	// Climate model parameter
  }
  
  // Climate damage parameters ---------------------
  dice->econ.a10 = (parms[ipar++]);			// Initial damage intercept
  dice->econ.a20 = (parms[ipar++]);		// Initial damage quadratic term
  dice->econ.a1 = (parms[ipar++]);			// Damage intercept
  dice->econ.a2 = (parms[ipar++]);		// Damage quadratic term
  dice->econ.a3 = (parms[ipar++]);			// Damage exponent
  
  // Abatement cost --------------------------------
  dice->econ.expcost2 = (parms[ipar++]);		// Exponent of control cost function
  dice->econ.pback = (parms[ipar++]);		// Cost of backstop [2005$ per tCO2 2010]
  dice->econ.gback = (parms[ipar++]);		// Initial cost decline backstop [cost per period]
  dice->dvars.limmiu = (parms[ipar++]);		// Upper limit on control rate after 2150
  dice->econ.tnopol = (parms[ipar++]);		// Period before which no emissions controls base
  dice->econ.cprice0 = (parms[ipar++]);		// Initial base carbon price [2005$ per tCO2]
  dice->econ.gcprice = (parms[ipar++]);		// Growth rate of base carbon price (per year)
  
  // Availability of fossil fuels ------------------
  dice->carb.fosslim = (parms[ipar++]);	// Maximum cummulative extraction fossil fuels [GtC]
  dice->lims.cca_up = dice->carb.fosslim;
  
  
  // Scaling and inessential parameters ------------
	// "Note that these are unnecessary for the calculations but are for convenience"
	// Quoted directly from comments in original GAMS code
  dice->econ.scale1 = 0.0302455265681763;	// Multiplicitive scaling coefficient
  dice->econ.scale2 = -10993.704;     // Additive scaling coefficient
  
  // Objective
  dice->econ.utility = 0.0;		// Welfare function (Sum of discounted utility of per capita consumption)


	// Decision variables
 	for (int i=0; i<dice->config.nPeriods; i++) {
		if(i > 0) {
		  dice->dvars.miu[i] = parms[ipar++];
		} else {
			dice->dvars.miu[i] = dice->dvars.miu0;
		}
	}
	for (int i=0; i<dice->config.nPeriods; i++) {
		if (i < dice->config.nPeriods - 10) {
		  dice->dvars.s[i] = parms[ipar++];
		}	else {
			dice->dvars.s[i] = dice->lims.optlrsav;
		}
	}

	
	return;
}

// Assembly:
subq $0x38, %rsp
movq %rsi, 0x8(%rsp)
movq %rdi, %rax
movq 0x8(%rsp), %rdi
movq %rdi, 0x10(%rsp)
movq %rax, 0x30(%rsp)
movq %rdi, 0x28(%rsp)
movl $0x0, 0x24(%rsp)
movl 0x24(%rsp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, 0x24(%rsp)
movslq %eax, %rsi
callq 0x15720
movq 0x10(%rsp), %rdi
movsd (%rax), %xmm0
movq 0x30(%rsp), %rax
movsd %xmm0, 0x190(%rax)
movl 0x24(%rsp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, 0x24(%rsp)
movslq %eax, %rsi
callq 0x15720
movq 0x10(%rsp), %rdi
movsd (%rax), %xmm0
movq 0x30(%rsp), %rax
movsd %xmm0, 0x198(%rax)
movl 0x24(%rsp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, 0x24(%rsp)
movslq %eax, %rsi
callq 0x15720
movq 0x10(%rsp), %rdi
movsd (%rax), %xmm0
movq 0x30(%rsp), %rax
movsd %xmm0, 0x1a0(%rax)
movl 0x24(%rsp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, 0x24(%rsp)
movslq %eax, %rsi
callq 0x15720
movq 0x10(%rsp), %rdi
movsd (%rax), %xmm0
movq 0x30(%rsp), %rax
movsd %xmm0, 0x1a8(%rax)
movl 0x24(%rsp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, 0x24(%rsp)
movslq %eax, %rsi
callq 0x15720
movq 0x10(%rsp), %rdi
movsd (%rax), %xmm0
movq 0x30(%rsp), %rax
movsd %xmm0, 0x1b0(%rax)
movl 0x24(%rsp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, 0x24(%rsp)
movslq %eax, %rsi
callq 0x15720
movq 0x10(%rsp), %rdi
movsd (%rax), %xmm0
movq 0x30(%rsp), %rax
movsd %xmm0, 0x1b8(%rax)
movl 0x24(%rsp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, 0x24(%rsp)
movslq %eax, %rsi
callq 0x15720
movq 0x10(%rsp), %rdi
movsd (%rax), %xmm0
movq 0x30(%rsp), %rax
movsd %xmm0, 0x1c0(%rax)
movl 0x24(%rsp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, 0x24(%rsp)
movslq %eax, %rsi
callq 0x15720
movq 0x10(%rsp), %rdi
movsd (%rax), %xmm0
movq 0x30(%rsp), %rax
movsd %xmm0, 0x1c8(%rax)
movl 0x24(%rsp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, 0x24(%rsp)
movslq %eax, %rsi
callq 0x15720
movq 0x10(%rsp), %rdi
movsd (%rax), %xmm0
movq 0x30(%rsp), %rax
movsd %xmm0, 0x1d0(%rax)
movl 0x24(%rsp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, 0x24(%rsp)
movslq %eax, %rsi
callq 0x15720
movq 0x10(%rsp), %rdi
movsd (%rax), %xmm0
movq 0x30(%rsp), %rax
movsd %xmm0, 0x1d8(%rax)
movl 0x24(%rsp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, 0x24(%rsp)
movslq %eax, %rsi
callq 0x15720
movq 0x10(%rsp), %rdi
movsd (%rax), %xmm0
movq 0x30(%rsp), %rax
movsd %xmm0, 0x1e0(%rax)
movl 0x24(%rsp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, 0x24(%rsp)
movslq %eax, %rsi
callq 0x15720
movq 0x10(%rsp), %rdi
movsd (%rax), %xmm0
movq 0x30(%rsp), %rax
movsd %xmm0, 0x1e8(%rax)
movq 0x30(%rsp), %rax
movsd 0x7fcf(%rip), %xmm0     # 0x1c1a8
addsd 0x1c0(%rax), %xmm0
movq 0x30(%rsp), %rax
movsd 0x1c0(%rax), %xmm2
movq 0x30(%rsp), %rax
movsd 0x190(%rax), %xmm1
movsd 0x7fa5(%rip), %xmm3     # 0x1c1a8
mulsd %xmm3, %xmm1
addsd %xmm2, %xmm1
movq 0x30(%rsp), %rax
addsd 0x198(%rax), %xmm1
divsd %xmm1, %xmm0
movq 0x30(%rsp), %rax
mulsd 0x1a0(%rax), %xmm0
movq 0x30(%rsp), %rax
movsd %xmm0, 0x4a8(%rax)
movl 0x24(%rsp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, 0x24(%rsp)
movslq %eax, %rsi
callq 0x15720
movq 0x10(%rsp), %rdi
movsd (%rax), %xmm0
movq 0x30(%rsp), %rax
movsd %xmm0, 0x248(%rax)
movl 0x24(%rsp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, 0x24(%rsp)
movslq %eax, %rsi
callq 0x15720
movq 0x10(%rsp), %rdi
movsd (%rax), %xmm0
movq 0x30(%rsp), %rax
movsd %xmm0, 0x250(%rax)
movl 0x24(%rsp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, 0x24(%rsp)
movslq %eax, %rsi
callq 0x15720
movq 0x10(%rsp), %rdi
movsd (%rax), %xmm0
movq 0x30(%rsp), %rax
movsd %xmm0, 0x260(%rax)
movl 0x24(%rsp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, 0x24(%rsp)
movslq %eax, %rsi
callq 0x15720
movq 0x10(%rsp), %rdi
movsd (%rax), %xmm0
movq 0x30(%rsp), %rax
movsd %xmm0, 0x268(%rax)
movl 0x24(%rsp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, 0x24(%rsp)
movslq %eax, %rsi
callq 0x15720
movq 0x10(%rsp), %rdi
movsd (%rax), %xmm0
movq 0x30(%rsp), %rax
movsd %xmm0, 0x270(%rax)
movl 0x24(%rsp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, 0x24(%rsp)
movslq %eax, %rsi
callq 0x15720
movq 0x10(%rsp), %rdi
movsd (%rax), %xmm0
movq 0x30(%rsp), %rax
movsd %xmm0, 0x40(%rax)
movl 0x24(%rsp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, 0x24(%rsp)
movslq %eax, %rsi
callq 0x15720
movq 0x10(%rsp), %rdi
movsd (%rax), %xmm0
movq 0x30(%rsp), %rax
movsd %xmm0, 0x3e0(%rax)
movl 0x24(%rsp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, 0x24(%rsp)
movslq %eax, %rsi
callq 0x15720
movq 0x10(%rsp), %rdi
movsd (%rax), %xmm0
movq 0x30(%rsp), %rax
movsd %xmm0, 0x3e8(%rax)
movl 0x24(%rsp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, 0x24(%rsp)
movslq %eax, %rsi
callq 0x15720
movq 0x10(%rsp), %rdi
movsd (%rax), %xmm0
movq 0x30(%rsp), %rax
movsd %xmm0, 0x3f0(%rax)
movl 0x24(%rsp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, 0x24(%rsp)
movslq %eax, %rsi
callq 0x15720
movq 0x10(%rsp), %rdi
movsd (%rax), %xmm0
movq 0x30(%rsp), %rax
movsd %xmm0, 0x3f8(%rax)
movl 0x24(%rsp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, 0x24(%rsp)
movslq %eax, %rsi
callq 0x15720
movq 0x10(%rsp), %rdi
movsd (%rax), %xmm0
movq 0x30(%rsp), %rax
movsd %xmm0, 0x400(%rax)
movl 0x24(%rsp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, 0x24(%rsp)
movslq %eax, %rsi
callq 0x15720
movq 0x10(%rsp), %rdi
movsd (%rax), %xmm0
movq 0x30(%rsp), %rax
movsd %xmm0, 0x408(%rax)
movl 0x24(%rsp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, 0x24(%rsp)
movslq %eax, %rsi
callq 0x15720
movq 0x10(%rsp), %rdi
movsd (%rax), %xmm0
movq 0x30(%rsp), %rax
movsd %xmm0, 0x410(%rax)
movl 0x24(%rsp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, 0x24(%rsp)
movslq %eax, %rsi
callq 0x15720
movsd (%rax), %xmm0
movq 0x30(%rsp), %rax
movsd %xmm0, 0x418(%rax)
movq 0x30(%rsp), %rax
movsd 0x7b73(%rip), %xmm0     # 0x1c008
subsd 0x410(%rax), %xmm0
movq 0x30(%rsp), %rax
movsd %xmm0, 0x420(%rax)
movq 0x30(%rsp), %rax
movsd 0x410(%rax), %xmm0
movq 0x30(%rsp), %rax
mulsd 0x3f8(%rax), %xmm0
movq 0x30(%rsp), %rax
divsd 0x400(%rax), %xmm0
movq 0x30(%rsp), %rax
movsd %xmm0, 0x428(%rax)
movq 0x30(%rsp), %rax
movsd 0x7b1d(%rip), %xmm0     # 0x1c008
subsd 0x428(%rax), %xmm0
movq 0x30(%rsp), %rax
subsd 0x418(%rax), %xmm0
movq 0x30(%rsp), %rax
movsd %xmm0, 0x430(%rax)
movq 0x30(%rsp), %rax
movsd 0x418(%rax), %xmm0
movq 0x30(%rsp), %rax
mulsd 0x400(%rax), %xmm0
movq 0x30(%rsp), %rax
divsd 0x408(%rax), %xmm0
movq 0x30(%rsp), %rax
movsd %xmm0, 0x438(%rax)
movq 0x30(%rsp), %rax
movsd 0x7aba(%rip), %xmm0     # 0x1c008
subsd 0x438(%rax), %xmm0
movq 0x30(%rsp), %rax
movsd %xmm0, 0x440(%rax)
movq 0x30(%rsp), %rax
cmpl $0x1, 0x58(%rax)
jne 0x145b2
movq 0x10(%rsp), %rdi
movl 0x24(%rsp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, 0x24(%rsp)
movslq %eax, %rsi
callq 0x15720
movsd (%rax), %xmm0
movq 0x30(%rsp), %rax
movsd %xmm0, 0x98(%rax)
movq 0x30(%rsp), %rdi
movq 0x30(%rsp), %rax
movsd 0x98(%rax), %xmm0
callq 0x1b200
jmp 0x145da
movq 0x10(%rsp), %rdi
movl 0x24(%rsp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, 0x24(%rsp)
movslq %eax, %rsi
callq 0x15720
movsd (%rax), %xmm0
movq 0x30(%rsp), %rax
movsd %xmm0, 0x60(%rax)
movq 0x10(%rsp), %rdi
movl 0x24(%rsp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, 0x24(%rsp)
movslq %eax, %rsi
callq 0x15720
movq 0x10(%rsp), %rdi
movsd (%rax), %xmm0
movq 0x30(%rsp), %rax
movsd %xmm0, 0x450(%rax)
movl 0x24(%rsp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, 0x24(%rsp)
movslq %eax, %rsi
callq 0x15720
movsd (%rax), %xmm0
movq 0x30(%rsp), %rax
movsd %xmm0, 0x458(%rax)
movq 0x30(%rsp), %rax
cmpl $0x0, 0x58(%rax)
jne 0x1470d
movq 0x10(%rsp), %rdi
movl 0x24(%rsp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, 0x24(%rsp)
movslq %eax, %rsi
callq 0x15720
movq 0x10(%rsp), %rdi
movsd (%rax), %xmm0
movq 0x30(%rsp), %rax
movsd %xmm0, 0x68(%rax)
movl 0x24(%rsp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, 0x24(%rsp)
movslq %eax, %rsi
callq 0x15720
movq 0x10(%rsp), %rdi
movsd (%rax), %xmm0
movq 0x30(%rsp), %rax
movsd %xmm0, 0x70(%rax)
movl 0x24(%rsp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, 0x24(%rsp)
movslq %eax, %rsi
callq 0x15720
movq 0x10(%rsp), %rdi
movsd (%rax), %xmm0
movq 0x30(%rsp), %rax
movsd %xmm0, 0x78(%rax)
movl 0x24(%rsp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, 0x24(%rsp)
movslq %eax, %rsi
callq 0x15720
movq 0x10(%rsp), %rdi
movsd (%rax), %xmm0
movq 0x30(%rsp), %rax
movsd %xmm0, 0x80(%rax)
movl 0x24(%rsp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, 0x24(%rsp)
movslq %eax, %rsi
callq 0x15720
movsd (%rax), %xmm0
movq 0x30(%rsp), %rax
movsd %xmm0, 0x88(%rax)
movq 0x10(%rsp), %rdi
movl 0x24(%rsp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, 0x24(%rsp)
movslq %eax, %rsi
callq 0x15720
movsd (%rax), %xmm0
movq 0x30(%rsp), %rax
movsd %xmm0, 0x448(%rax)
movq 0x30(%rsp), %rax
cmpl $0x0, 0x58(%rax)
jne 0x14767
movq 0x30(%rsp), %rax
movsd 0x448(%rax), %xmm0
movq 0x30(%rsp), %rax
divsd 0x60(%rax), %xmm0
movq 0x30(%rsp), %rax
movsd %xmm0, 0x90(%rax)
movq 0x10(%rsp), %rdi
movl 0x24(%rsp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, 0x24(%rsp)
movslq %eax, %rsi
callq 0x15720
movq 0x10(%rsp), %rdi
movsd (%rax), %xmm0
movq 0x30(%rsp), %rax
movsd %xmm0, 0x1f0(%rax)
movl 0x24(%rsp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, 0x24(%rsp)
movslq %eax, %rsi
callq 0x15720
movq 0x10(%rsp), %rdi
movsd (%rax), %xmm0
movq 0x30(%rsp), %rax
movsd %xmm0, 0x1f8(%rax)
movl 0x24(%rsp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, 0x24(%rsp)
movslq %eax, %rsi
callq 0x15720
movq 0x10(%rsp), %rdi
movsd (%rax), %xmm0
movq 0x30(%rsp), %rax
movsd %xmm0, 0x200(%rax)
movl 0x24(%rsp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, 0x24(%rsp)
movslq %eax, %rsi
callq 0x15720
movq 0x10(%rsp), %rdi
movsd (%rax), %xmm0
movq 0x30(%rsp), %rax
movsd %xmm0, 0x208(%rax)
movl 0x24(%rsp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, 0x24(%rsp)
movslq %eax, %rsi
callq 0x15720
movq 0x10(%rsp), %rdi
movsd (%rax), %xmm0
movq 0x30(%rsp), %rax
movsd %xmm0, 0x210(%rax)
movl 0x24(%rsp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, 0x24(%rsp)
movslq %eax, %rsi
callq 0x15720
movq 0x10(%rsp), %rdi
movsd (%rax), %xmm0
movq 0x30(%rsp), %rax
movsd %xmm0, 0x218(%rax)
movl 0x24(%rsp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, 0x24(%rsp)
movslq %eax, %rsi
callq 0x15720
movq 0x10(%rsp), %rdi
movsd (%rax), %xmm0
movq 0x30(%rsp), %rax
movsd %xmm0, 0x220(%rax)
movl 0x24(%rsp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, 0x24(%rsp)
movslq %eax, %rsi
callq 0x15720
movq 0x10(%rsp), %rdi
movsd (%rax), %xmm0
movq 0x30(%rsp), %rax
movsd %xmm0, 0x228(%rax)
movl 0x24(%rsp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, 0x24(%rsp)
movslq %eax, %rsi
callq 0x15720
movq 0x10(%rsp), %rdi
movsd (%rax), %xmm0
movq 0x30(%rsp), %rax
movsd %xmm0, 0x38(%rax)
movl 0x24(%rsp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, 0x24(%rsp)
movslq %eax, %rsi
callq 0x15720
movq 0x10(%rsp), %rdi
movsd (%rax), %xmm0
movq 0x30(%rsp), %rax
movsd %xmm0, 0x230(%rax)
movl 0x24(%rsp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, 0x24(%rsp)
movslq %eax, %rsi
callq 0x15720
movq 0x10(%rsp), %rdi
movsd (%rax), %xmm0
movq 0x30(%rsp), %rax
movsd %xmm0, 0x238(%rax)
movl 0x24(%rsp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, 0x24(%rsp)
movslq %eax, %rsi
callq 0x15720
movq 0x10(%rsp), %rdi
movsd (%rax), %xmm0
movq 0x30(%rsp), %rax
movsd %xmm0, 0x240(%rax)
movl 0x24(%rsp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, 0x24(%rsp)
movslq %eax, %rsi
callq 0x15720
movsd (%rax), %xmm0
movq 0x30(%rsp), %rax
movsd %xmm0, 0x460(%rax)
movq 0x30(%rsp), %rax
movsd 0x460(%rax), %xmm0
movq 0x30(%rsp), %rax
movsd %xmm0, 0x518(%rax)
movq 0x30(%rsp), %rax
movsd 0x77fe(%rip), %xmm0     # 0x1c1b8
movsd %xmm0, 0x278(%rax)
movq 0x30(%rsp), %rax
movsd 0x77e1(%rip), %xmm0     # 0x1c1b0
movsd %xmm0, 0x280(%rax)
movq 0x30(%rsp), %rax
xorps %xmm0, %xmm0
movsd %xmm0, 0x380(%rax)
movl $0x0, 0x20(%rsp)
movl 0x20(%rsp), %eax
movq 0x30(%rsp), %rcx
cmpl (%rcx), %eax
jge 0x14a62
cmpl $0x0, 0x20(%rsp)
jle 0x14a36
movq 0x10(%rsp), %rdi
movl 0x24(%rsp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, 0x24(%rsp)
movslq %eax, %rsi
callq 0x15720
movsd (%rax), %xmm0
movq 0x30(%rsp), %rax
movq 0x48(%rax), %rax
movslq 0x20(%rsp), %rcx
movsd %xmm0, (%rax,%rcx,8)
jmp 0x14a53
movq 0x30(%rsp), %rax
movsd 0x40(%rax), %xmm0
movq 0x30(%rsp), %rax
movq 0x48(%rax), %rax
movslq 0x20(%rsp), %rcx
movsd %xmm0, (%rax,%rcx,8)
jmp 0x14a55
movl 0x20(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x20(%rsp)
jmp 0x149ef
movl $0x0, 0x1c(%rsp)
movl 0x1c(%rsp), %eax
movq 0x30(%rsp), %rcx
cmpl (%rcx), %eax
jge 0x14aee
movl 0x1c(%rsp), %eax
movq 0x30(%rsp), %rcx
movl (%rcx), %ecx
subl $0xa, %ecx
cmpl %ecx, %eax
jge 0x14abc
movq 0x10(%rsp), %rdi
movl 0x24(%rsp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, 0x24(%rsp)
movslq %eax, %rsi
callq 0x15720
movsd (%rax), %xmm0
movq 0x30(%rsp), %rax
movq 0x50(%rax), %rax
movslq 0x1c(%rsp), %rcx
movsd %xmm0, (%rax,%rcx,8)
jmp 0x14adc
movq 0x30(%rsp), %rax
movsd 0x4a8(%rax), %xmm0
movq 0x30(%rsp), %rax
movq 0x50(%rax), %rax
movslq 0x1c(%rsp), %rcx
movsd %xmm0, (%rax,%rcx,8)
jmp 0x14ade
movl 0x1c(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x1c(%rsp)
jmp 0x14a6a
addq $0x38, %rsp
retq
nopw %cs:(%rax,%rax)