// File: /workspace/github_c_makefile_star2_O3/olcaytaner[P]Isell/svmsolve.c
// Function: solve
void solve(Solverptr s, int l, SVM_Q_MATRIX_TYPE qmatrixtype, double* b, signed char *y, double *alpha, double Cp, double Cn, Solutioninfoptr si, Svm_problem prob, Svm_parameter param, int nu)
{
 /*Last Changed 28.04.2005*/
	double *Q_i, *Q_j, alpha_i, C_i, C_j, old_alpha_i, old_alpha_j, delta, diff, sum, delta_alpha_i, delta_alpha_j, v;
	int i, j, iter, counter, ui, uj, k;
	s->l = l;
	s->qmatrixtype = qmatrixtype;
	switch (qmatrixtype)
	 {
	  case QC  :s->svcq = empty_svcq(prob, param, y);
				         break;
			case QR  :s->svrq = empty_svrq(prob, param);
				         break;
			case QONE:s->oneclassq = empty_oneclassq(prob, param);
				         break;
	 }
 s->b = safemalloc(s->l * sizeof(double), "solve", 14);
	memcpy(s->b, b, s->l * sizeof(double));
 s->y = safemalloc(s->l * sizeof(signed char), "solve", 16);
	memcpy(s->y, y, s->l * sizeof(signed char));
 s->alpha = safemalloc(s->l * sizeof(double), "solve", 18);
	memcpy(s->alpha, alpha, s->l * sizeof(double));
	s->Cp = Cp;
	s->Cn = Cn;
	s->eps = param.eps;
	s->unshrinked = 0;
	s->alpha_status = safemalloc(s->l * sizeof(char), "solve", 24);
	for (i = 0; i < s->l; i++)
			update_alpha_status(s, i);
	s->active_set = safemalloc(s->l * sizeof(int), "solve", 27);
	for (i = 0; i < s->l; i++)
			s->active_set[i] = i;
	s->active_size = s->l;
	s->G = safemalloc(s->l * sizeof(double), "solve", 31);
	s->G_bar = safemalloc(s->l * sizeof(double), "solve", 32);
	for (i = 0; i < s->l; i++)
	 {
			s->G[i] = b[i];
			s->G_bar[i] = 0;
		}
	for (i = 0; i < s->l; i++)
			if (!is_lower_bound(s, i))
			 {
				 Q_i = solver_get_Q(s, i, s->l);
				 alpha_i = s->alpha[i];
				 for (j = 0; j < s->l; j++)
					  s->G[j] += alpha_i * Q_i[j];
				 if (is_upper_bound(s, i))
					  for (j = 0; j < s->l; j++)
						   s->G_bar[j] += get_C(s, i) * Q_i[j];
			 }
	iter = 0;
	counter = imin(s->l, 1000) + 1;
	while (1)
	 {
		 if(--counter == 0)
			 {
			  counter = imin(s->l, 1000);
			  if (param.shrinking) 
						 do_shrinking(s);
			 }
		 if (select_working_set_general(s, &i, &j, nu) != 0)
			 {
			  reconstruct_gradient(s);
			  s->active_size = s->l;
			  if (select_working_set_general(s, &i, &j, nu) != 0)
				   break;
			  else
				   counter = 1;	
			 }		
		++iter;
		Q_i = solver_get_Q(s, i, s->active_size);
		Q_j = solver_get_Q(s, j, s->active_size);
		C_i = get_C(s, i);
		C_j = get_C(s, j);
		old_alpha_i = s->alpha[i];
		old_alpha_j = s->alpha[j];
		if (s->y[i] != s->y[j])
		 {
			 delta = (-s->G[i] - s->G[j]) / fmax(Q_i[i] + Q_j[j] + 2 * Q_i[j], 0.0);
			 diff = s->alpha[i] - s->alpha[j];
			 s->alpha[i] += delta;
			 s->alpha[j] += delta;			
			 if (diff > 0)
			  {
		  		if (s->alpha[j] < 0)
						 {
				   	s->alpha[j] = 0;
					   s->alpha[i] = diff;
						 }
				 }
			 else
				 {
				  if (s->alpha[i] < 0)
						 {
					   s->alpha[i] = 0;
					   s->alpha[j] = -diff;
						 }
				 }
			 if (diff > C_i - C_j)
				 {
			  	if (s->alpha[i] > C_i)
						 {
					   s->alpha[i] = C_i;
					   s->alpha[j] = C_i - diff;
						 }
				 }
			 else
			  {
				  if (s->alpha[j] > C_j)
						 {
					   s->alpha[j] = C_j;
					   s->alpha[i] = C_j + diff;
						 } 
				 }
		 }
		else
		 {
			 delta = (s->G[i] - s->G[j]) / fmax(Q_i[i] + Q_j[j] - 2 * Q_i[j], 0.0);
			 sum = s->alpha[i] + s->alpha[j];
			 s->alpha[i] -= delta;
			 s->alpha[j] += delta;
			 if (sum > C_i)
				 {
			  	if (s->alpha[i] > C_i)
						 {
					   s->alpha[i] = C_i;
					   s->alpha[j] = sum - C_i;
						 }
				 }
			 else
			  {
			  	if (alpha[j] < 0)
						 {
					   s->alpha[j] = 0;
					   s->alpha[i] = sum;
						 }
				 }
			 if (sum > C_j)
				 {
			  	if (s->alpha[j] > C_j)
						 {
					   s->alpha[j] = C_j;
					   s->alpha[i] = sum - C_j;
						 }
				 }
			 else
				 {
				  if (s->alpha[i] < 0)
						 {
					   s->alpha[i] = 0;
					   s->alpha[j] = sum;
						 }
				 }
		 }
		delta_alpha_i = s->alpha[i] - old_alpha_i;
		delta_alpha_j = s->alpha[j] - old_alpha_j;	
		for (k = 0; k < s->active_size; k++)
			 s->G[k] += Q_i[k] * delta_alpha_i + Q_j[k] * delta_alpha_j;
  ui = is_upper_bound(s, i);
		uj = is_upper_bound(s, j);
		update_alpha_status(s, i);
		update_alpha_status(s, j);
		if (ui != is_upper_bound(s, i))
		 {
				Q_i = solver_get_Q(s, i, s->l);
				if (ui)
					 for (k = 0; k < s->l; k++)
						  s->G_bar[k] -= C_i * Q_i[k];
				else
					 for (k = 0;k < s->l; k++)
						  s->G_bar[k] += C_i * Q_i[k];
		 }
		if (uj != is_upper_bound(s, j))
		 {
				Q_j = solver_get_Q(s, j, s->l);
				if (uj)
					 for (k = 0; k < s->l; k++)
						  s->G_bar[k] -= C_j * Q_j[k];
				else
					 for (k = 0; k < s->l; k++)
						  s->G_bar[k] += C_j * Q_j[k];
		 }
	 }
	si->rho = calculate_rho_general(s, si, nu);
	v = 0;
	for (i = 0; i < s->l; i++)
			v += s->alpha[i] * (s->G[i] + s->b[i]);
	si->obj = v / 2;
 for (i = 0; i < s->l; i++)
			alpha[s->active_set[i]] = s->alpha[i];
	si->upper_bound_p = Cp;
	si->upper_bound_n = Cn;
	safe_free(s->b);
	safe_free(s->y);
	safe_free(s->alpha);
	safe_free(s->alpha_status);
	safe_free(s->active_set);
	safe_free(s->G);
	safe_free(s->G_bar);
	switch (qmatrixtype)
	 {
	  case QC  :free_svcq(s->svcq);
				         break;
			case QR  :free_svrq(s->svrq);
				         break;
			case QONE:free_oneclassq(s->oneclassq);
				         break;
	 }
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0xd8, %rsp
movsd %xmm1, 0x98(%rsp)
movsd %xmm0, 0x90(%rsp)
movq %r9, %rbp
movq %r8, %r15
movq %rcx, %r14
movq %rdi, %rbx
movl 0x190(%rsp), %r12d
leaq 0x118(%rsp), %rax
movq 0x110(%rsp), %rcx
movl %esi, 0x78(%rdi)
movl %edx, 0x28(%rdi)
cmpl $0x2, %edx
movl %r12d, 0x84(%rsp)
movl %edx, 0x8c(%rsp)
movq %rcx, 0xa8(%rsp)
je 0x96c0c
cmpl $0x1, %edx
je 0x96bd8
testl %edx, %edx
jne 0x96c4a
leaq 0x20(%rsp), %rdi
movl $0xb, %ecx
leaq 0x138(%rsp), %rsi
rep  movsq (%rsi), %es:(%rdi)
movups (%rax), %xmm0
movupd 0x10(%rax), %xmm1
movupd %xmm1, 0x10(%rsp)
movups %xmm0, (%rsp)
movq %r15, %rdi
callq 0x941f0
movl $0x30, %r12d
jmp 0x96c3e
leaq 0x20(%rsp), %rdi
movl $0xb, %ecx
leaq 0x138(%rsp), %rsi
rep  movsq (%rsi), %es:(%rdi)
movups (%rax), %xmm0
movupd 0x10(%rax), %xmm1
movupd %xmm1, 0x10(%rsp)
movups %xmm0, (%rsp)
movl $0x38, %r12d
callq 0x944cc
jmp 0x96c3e
leaq 0x20(%rsp), %rdi
movl $0xb, %ecx
leaq 0x138(%rsp), %rsi
rep  movsq (%rsi), %es:(%rdi)
movups (%rax), %xmm0
movupd 0x10(%rax), %xmm1
movupd %xmm1, 0x10(%rsp)
movups %xmm0, (%rsp)
movl $0x40, %r12d
callq 0x943a4
movq %rax, (%rbx,%r12)
movl 0x84(%rsp), %r12d
movslq 0x78(%rbx), %rdi
shlq $0x3, %rdi
leaq 0x1b01f(%rip), %r13     # 0xb1c78
movq %r13, %rsi
movl $0xe, %edx
callq 0x3a0e1
movq %rax, 0x60(%rbx)
movslq 0x78(%rbx), %rdx
shlq $0x3, %rdx
movq %rax, %rdi
movq %r14, %rsi
callq 0x4310
movslq 0x78(%rbx), %rdi
movq %r13, %rsi
movl $0x10, %edx
callq 0x3a0e1
movq %rax, 0x8(%rbx)
movslq 0x78(%rbx), %rdx
movq %rax, %rdi
movq %r15, %rsi
callq 0x4310
movslq 0x78(%rbx), %rdi
shlq $0x3, %rdi
movq %r13, %rsi
movl $0x12, %edx
callq 0x3a0e1
movq %rax, 0x20(%rbx)
movslq 0x78(%rbx), %rdx
shlq $0x3, %rdx
movq %rax, %rdi
movq %rbp, %rsi
callq 0x4310
movsd 0x90(%rsp), %xmm0
movsd %xmm0, 0x50(%rbx)
movsd 0x98(%rsp), %xmm0
movsd %xmm0, 0x58(%rbx)
leaq 0x138(%rsp), %rax
movsd 0x28(%rax), %xmm0
movsd %xmm0, 0x48(%rbx)
movl $0x0, 0x7c(%rbx)
movslq 0x78(%rbx), %rdi
movq %r13, %rsi
movl $0x18, %edx
callq 0x3a0e1
movq %rax, 0x18(%rbx)
movslq 0x78(%rbx), %rdi
testq %rdi, %rdi
jle 0x96d6e
xorl %eax, %eax
xorpd %xmm0, %xmm0
movq 0x8(%rbx), %rcx
movq 0x20(%rbx), %rdx
movsd (%rdx,%rax,8), %xmm1
xorl %edx, %edx
cmpb $0x0, (%rcx,%rax)
setle %dl
ucomisd 0x50(%rbx,%rdx,8), %xmm1
jae 0x96d54
ucomisd %xmm1, %xmm0
movq 0x18(%rbx), %rcx
jae 0x96d5e
movb $0x2, (%rcx,%rax)
jmp 0x96d62
movq 0x18(%rbx), %rcx
movb $0x1, (%rcx,%rax)
jmp 0x96d62
movb $0x0, (%rcx,%rax)
incq %rax
movslq 0x78(%rbx), %rdi
cmpq %rdi, %rax
jl 0x96d26
shlq $0x2, %rdi
leaq 0x1aeff(%rip), %rsi     # 0xb1c78
movl $0x1b, %edx
callq 0x3a0e1
movq %rax, 0x68(%rbx)
movslq 0x78(%rbx), %rdi
testq %rdi, %rdi
jle 0x96da5
xorl %ecx, %ecx
movl %ecx, (%rax,%rcx,4)
incq %rcx
movl 0x78(%rbx), %edx
movslq %edx, %rdi
cmpq %rdi, %rcx
jl 0x96d92
jmp 0x96da7
movl %edi, %edx
movl %edx, (%rbx)
shlq $0x3, %rdi
leaq 0x1aec4(%rip), %r15     # 0xb1c78
movq %r15, %rsi
movl $0x1f, %edx
callq 0x3a0e1
movq %rax, 0x10(%rbx)
movslq 0x78(%rbx), %rdi
shlq $0x3, %rdi
movq %r15, %rsi
movl $0x20, %edx
callq 0x3a0e1
movq %rax, 0x70(%rbx)
movslq 0x78(%rbx), %rdx
testq %rdx, %rdx
movq %rbp, 0xa0(%rsp)
jle 0x96eeb
movq 0x10(%rbx), %rcx
xorl %esi, %esi
movsd (%r14,%rsi,8), %xmm0
movsd %xmm0, (%rcx,%rsi,8)
movq $0x0, (%rax,%rsi,8)
incq %rsi
cmpq %rsi, %rdx
jne 0x96df9
movl %edx, 0x80(%rsp)
testl %edx, %edx
jle 0x96eeb
movq 0x18(%rbx), %rcx
xorl %r14d, %r14d
cmpb $0x0, (%rcx,%r14)
je 0x96eda
movq %rbx, %rdi
movl %r14d, %esi
callq 0x95fb8
movslq 0x78(%rbx), %rdx
testq %rdx, %rdx
jle 0x96ed4
movq 0x20(%rbx), %rcx
movsd (%rcx,%r14,8), %xmm0
movq 0x10(%rbx), %rcx
xorl %esi, %esi
movsd (%rax,%rsi,8), %xmm1
mulsd %xmm0, %xmm1
addsd (%rcx,%rsi,8), %xmm1
movsd %xmm1, (%rcx,%rsi,8)
incq %rsi
cmpq %rsi, %rdx
jne 0x96e5d
testl %edx, %edx
setle %dil
movq 0x18(%rbx), %rcx
cmpb $0x1, (%rcx,%r14)
setne %r8b
movl $0x0, %esi
cmovnel %edx, %esi
orb %dil, %r8b
jne 0x96eda
movq 0x8(%rbx), %rsi
movq 0x70(%rbx), %rdi
xorl %r8d, %r8d
xorl %r9d, %r9d
cmpb $0x0, (%rsi,%r14)
setle %r9b
movsd 0x50(%rbx,%r9,8), %xmm0
mulsd (%rax,%r8,8), %xmm0
addsd (%rdi,%r8,8), %xmm0
movsd %xmm0, (%rdi,%r8,8)
incq %r8
cmpq %r8, %rdx
jne 0x96ea3
movl %edx, %esi
jmp 0x96eda
movq 0x18(%rbx), %rcx
xorl %esi, %esi
incq %r14
movslq %edx, %rax
cmpq %rax, %r14
jl 0x96e2a
jmp 0x96eee
xorl %r14d, %r14d
leaq 0x80(%rsp), %r15
movl %r14d, (%r15)
leaq 0x88(%rsp), %r13
movl %esi, (%r13)
movl %edx, %edi
movl $0x3e8, %esi            # imm = 0x3E8
callq 0x39b49
incl %eax
movl %eax, 0x7c(%rsp)
movl 0x7c(%rsp), %ebp
decl %ebp
jne 0x96f44
movl 0x78(%rbx), %edi
movl $0x3e8, %esi            # imm = 0x3E8
callq 0x39b49
movl %eax, %ebp
leaq 0x138(%rsp), %rax
cmpl $0x0, 0x50(%rax)
je 0x96f44
movq %rbx, %rdi
callq 0x966f5
movq %rbx, %rdi
movq %r15, %rsi
movq %r13, %rdx
movl %r12d, %ecx
callq 0x9616d
testl %eax, %eax
je 0x96f89
movq %rbx, %rdi
callq 0x960c2
movl 0x78(%rbx), %ebp
movl %ebp, (%rbx)
movq %rbx, %rdi
movq %r15, %rsi
movq %r13, %rdx
movl %r12d, %ecx
callq 0x9616d
testl %eax, %eax
jne 0x973e6
movl $0x1, 0x7c(%rsp)
jmp 0x96f8f
movl %ebp, 0x7c(%rsp)
movl (%rbx), %ebp
movl 0x80(%rsp), %r15d
movq %rbx, %rdi
movl %r15d, %esi
movl %ebp, %edx
callq 0x95fb8
movq %rax, %rbp
movl 0x88(%rsp), %r14d
movl (%rbx), %edx
movq %rbx, %rdi
movl %r14d, %esi
callq 0x95fb8
movq 0x8(%rbx), %rdx
movq 0x10(%rbx), %rsi
movslq %r15d, %rcx
movb (%rdx,%rcx), %r8b
xorl %edi, %edi
testb %r8b, %r8b
setle %dil
movsd 0x50(%rbx,%rdi,8), %xmm7
movslq %r14d, %r12
movb (%rdx,%r12), %r9b
xorl %edi, %edi
testb %r9b, %r9b
setle %dil
movsd 0x50(%rbx,%rdi,8), %xmm6
movq 0x20(%rbx), %rdi
movsd (%rdi,%rcx,8), %xmm1
movsd (%rdi,%r12,8), %xmm0
movsd (%rsi,%rcx,8), %xmm2
cmpb %r9b, %r8b
jne 0x97088
subsd (%rsi,%r12,8), %xmm2
movsd (%rbp,%rcx,8), %xmm3
addsd (%rax,%r12,8), %xmm3
movsd (%rbp,%r12,8), %xmm4
addsd %xmm4, %xmm4
subsd %xmm4, %xmm3
xorpd %xmm5, %xmm5
maxsd %xmm5, %xmm3
divsd %xmm3, %xmm2
movapd %xmm1, %xmm3
movapd %xmm1, %xmm4
subsd %xmm2, %xmm4
movsd %xmm4, (%rdi,%rcx,8)
addsd (%rdi,%r12,8), %xmm2
addsd %xmm0, %xmm3
movsd %xmm2, (%rdi,%r12,8)
ucomisd %xmm7, %xmm3
jbe 0x970f9
movsd (%rdi,%rcx,8), %xmm2
ucomisd %xmm7, %xmm2
jbe 0x97116
movsd %xmm7, (%rdi,%rcx,8)
movapd %xmm3, %xmm2
subsd %xmm7, %xmm2
movsd %xmm2, (%rdi,%r12,8)
jmp 0x97116
xorpd 0xf140(%rip), %xmm2     # 0xa61d0
subsd (%rsi,%r12,8), %xmm2
movsd (%rbp,%rcx,8), %xmm3
addsd (%rax,%r12,8), %xmm3
movsd (%rbp,%r12,8), %xmm4
addsd %xmm4, %xmm4
addsd %xmm3, %xmm4
xorpd %xmm5, %xmm5
maxsd %xmm5, %xmm4
divsd %xmm4, %xmm2
movapd %xmm1, %xmm3
movapd %xmm1, %xmm4
addsd %xmm2, %xmm4
movsd %xmm4, (%rdi,%rcx,8)
addsd (%rdi,%r12,8), %xmm2
subsd %xmm0, %xmm3
movsd %xmm2, (%rdi,%r12,8)
ucomisd %xmm5, %xmm3
jbe 0x97138
ucomisd %xmm2, %xmm5
jbe 0x97159
movq $0x0, (%rdi,%r12,8)
movsd %xmm3, (%rdi,%rcx,8)
jmp 0x97159
movq 0xa0(%rsp), %r8
ucomisd (%r8,%r12,8), %xmm5
jbe 0x97116
movq $0x0, (%rdi,%r12,8)
movsd %xmm3, (%rdi,%rcx,8)
ucomisd %xmm6, %xmm3
jbe 0x97187
movsd (%rdi,%r12,8), %xmm2
ucomisd %xmm6, %xmm2
jbe 0x971b9
movsd %xmm6, (%rdi,%r12,8)
subsd %xmm6, %xmm3
jmp 0x971b4
ucomisd (%rdi,%rcx,8), %xmm5
jbe 0x97159
movq $0x0, (%rdi,%rcx,8)
movapd %xmm3, %xmm2
xorpd 0xf07d(%rip), %xmm2     # 0xa61d0
movlpd %xmm2, (%rdi,%r12,8)
movapd %xmm7, %xmm2
subsd %xmm6, %xmm2
ucomisd %xmm2, %xmm3
jbe 0x9719e
movsd (%rdi,%rcx,8), %xmm2
ucomisd %xmm7, %xmm2
jbe 0x971b9
movsd %xmm7, (%rdi,%rcx,8)
movapd %xmm7, %xmm2
subsd %xmm3, %xmm2
movsd %xmm2, (%rdi,%r12,8)
jmp 0x971b9
ucomisd (%rdi,%rcx,8), %xmm5
jbe 0x971b9
movq $0x0, (%rdi,%rcx,8)
movsd %xmm3, (%rdi,%r12,8)
jmp 0x971b9
movsd (%rdi,%r12,8), %xmm2
ucomisd %xmm6, %xmm2
jbe 0x971b9
movsd %xmm6, (%rdi,%r12,8)
addsd %xmm6, %xmm3
movsd %xmm3, (%rdi,%rcx,8)
movsd (%rdi,%rcx,8), %xmm2
movslq (%rbx), %r8
testq %r8, %r8
jle 0x97209
subsd %xmm1, %xmm2
movsd (%rdi,%r12,8), %xmm1
subsd %xmm0, %xmm1
xorl %r9d, %r9d
movsd (%rax,%r9,8), %xmm0
mulsd %xmm1, %xmm0
movsd (%rbp,%r9,8), %xmm3
mulsd %xmm2, %xmm3
addsd %xmm0, %xmm3
addsd (%rsi,%r9,8), %xmm3
movsd %xmm3, (%rsi,%r9,8)
incq %r9
cmpq %r9, %r8
jne 0x971d7
movsd (%rdi,%rcx,8), %xmm2
movq 0x18(%rbx), %rax
xorl %esi, %esi
cmpb $0x0, (%rdx,%rcx)
setle %sil
ucomisd %xmm2, %xmm5
setb %dl
addb %dl, %dl
ucomisd 0x50(%rbx,%rsi,8), %xmm2
movb (%rax,%rcx), %r13b
movzbl %dl, %edx
movl $0x1, %esi
cmovael %esi, %edx
movb (%rax,%r12), %bpl
movb %dl, (%rax,%rcx)
movq 0x8(%rbx), %rax
movq 0x20(%rbx), %rdx
movsd (%rdx,%r12,8), %xmm0
xorl %edx, %edx
cmpb $0x0, (%rax,%r12)
setle %dl
ucomisd 0x50(%rbx,%rdx,8), %xmm0
jae 0x9726d
ucomisd %xmm0, %xmm5
movq 0x18(%rbx), %rax
jae 0x97278
movb $0x2, (%rax,%r12)
jmp 0x9727d
movq 0x18(%rbx), %rax
movb $0x1, (%rax,%r12)
jmp 0x9727d
movb $0x0, (%rax,%r12)
cmpb $0x1, %r13b
sete %al
movq 0x18(%rbx), %rdx
cmpb $0x1, (%rdx,%rcx)
setne %cl
xorb %al, %cl
movapd %xmm6, 0xc0(%rsp)
jne 0x97326
movapd %xmm7, 0xb0(%rsp)
movl 0x78(%rbx), %edx
movq %rbx, %rdi
movl %r15d, %esi
callq 0x95fb8
movl 0x78(%rbx), %ecx
cmpb $0x1, %r13b
jne 0x972f8
testl %ecx, %ecx
movapd 0xb0(%rsp), %xmm1
jle 0x97326
movq 0x70(%rbx), %rdx
xorpd 0xeef7(%rip), %xmm1     # 0xa61d0
xorl %esi, %esi
movsd (%rax,%rsi,8), %xmm0
mulsd %xmm1, %xmm0
addsd (%rdx,%rsi,8), %xmm0
movsd %xmm0, (%rdx,%rsi,8)
incq %rsi
cmpq %rsi, %rcx
jne 0x972db
jmp 0x97326
testl %ecx, %ecx
movapd 0xb0(%rsp), %xmm1
jle 0x97326
movq 0x70(%rbx), %rdx
xorl %esi, %esi
movsd (%rax,%rsi,8), %xmm0
mulsd %xmm1, %xmm0
addsd (%rdx,%rsi,8), %xmm0
movsd %xmm0, (%rdx,%rsi,8)
incq %rsi
cmpq %rsi, %rcx
jne 0x9730b
cmpb $0x1, %bpl
sete %al
movq 0x18(%rbx), %rcx
cmpb $0x1, (%rcx,%r12)
setne %cl
xorb %al, %cl
movl 0x84(%rsp), %r12d
leaq 0x80(%rsp), %r15
leaq 0x88(%rsp), %r13
jne 0x96f17
movl 0x78(%rbx), %edx
movq %rbx, %rdi
movl %r14d, %esi
callq 0x95fb8
movl 0x78(%rbx), %ecx
cmpb $0x1, %bpl
jne 0x973af
testl %ecx, %ecx
movapd 0xc0(%rsp), %xmm1
jle 0x96f17
movq 0x70(%rbx), %rdx
xorpd 0xee43(%rip), %xmm1     # 0xa61d0
xorl %esi, %esi
movsd (%rax,%rsi,8), %xmm0
mulsd %xmm1, %xmm0
addsd (%rdx,%rsi,8), %xmm0
movsd %xmm0, (%rdx,%rsi,8)
incq %rsi
cmpq %rsi, %rcx
jne 0x9738f
jmp 0x96f17
testl %ecx, %ecx
movapd 0xc0(%rsp), %xmm1
jle 0x96f17
movq 0x70(%rbx), %rdx
xorl %esi, %esi
movsd (%rax,%rsi,8), %xmm0
mulsd %xmm1, %xmm0
addsd (%rdx,%rsi,8), %xmm0
movsd %xmm0, (%rdx,%rsi,8)
incq %rsi
cmpq %rsi, %rcx
jne 0x973c6
jmp 0x96f17
testl %r12d, %r12d
movq 0xa8(%rsp), %rsi
movq %rbx, %rdi
je 0x97403
movq %rsi, %r14
callq 0x96890
movl 0x78(%rbx), %ebp
jmp 0x9740b
movq %rsi, %r14
callq 0x96a50
movsd %xmm0, 0x8(%r14)
testl %ebp, %ebp
movq %r14, %r9
jle 0x97483
movq 0x10(%rbx), %rcx
movq 0x20(%rbx), %rdx
movq 0x60(%rbx), %rsi
movl %ebp, %eax
xorpd %xmm0, %xmm0
xorl %edi, %edi
movsd (%rcx,%rdi,8), %xmm1
addsd (%rsi,%rdi,8), %xmm1
mulsd (%rdx,%rdi,8), %xmm1
addsd %xmm1, %xmm0
incq %rdi
cmpq %rdi, %rax
jne 0x9742c
mulsd 0xe8c9(%rip), %xmm0     # 0xa5d18
movsd %xmm0, (%r9)
testl %ebp, %ebp
movq 0xa0(%rsp), %r8
jle 0x9748a
movq 0x20(%rbx), %rcx
movq 0x68(%rbx), %rdx
xorl %esi, %esi
movsd (%rcx,%rsi,8), %xmm0
movslq (%rdx,%rsi,4), %rdi
movsd %xmm0, (%r8,%rdi,8)
incq %rsi
cmpq %rsi, %rax
jne 0x9746a
jmp 0x9748a
movq $0x0, (%r9)
movsd 0x90(%rsp), %xmm0
movsd %xmm0, 0x10(%r9)
movsd 0x98(%rsp), %xmm0
movsd %xmm0, 0x18(%r9)
movq 0x60(%rbx), %rdi
callq 0x3a180
movq 0x8(%rbx), %rdi
callq 0x3a180
movq 0x20(%rbx), %rdi
callq 0x3a180
movq 0x18(%rbx), %rdi
callq 0x3a180
movq 0x68(%rbx), %rdi
callq 0x3a180
movq 0x10(%rbx), %rdi
callq 0x3a180
movq 0x70(%rbx), %rdi
callq 0x3a180
movl 0x8c(%rsp), %eax
cmpl $0x2, %eax
je 0x97530
cmpl $0x1, %eax
je 0x97516
testl %eax, %eax
jne 0x9754a
movq 0x30(%rbx), %rdi
addq $0xd8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x9428d
movq 0x38(%rbx), %rdi
addq $0xd8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x945ed
movq 0x40(%rbx), %rdi
addq $0xd8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x9440e
addq $0xd8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq