// File: Luthaf[P]zeopp/voro++/src/v_compute.cc
// Function: bool voro::voro_compute<voro::container>::compute_cell<voro::voronoicell>(voro::voronoicell&, int, int, int, int, int)
bool voro_compute<c_class>::compute_cell(v_cell &c,int ijk,int s,int ci,int cj,int ck) {
	static const int count_list[8]={7,11,15,19,26,35,45,59},*count_e=count_list+8;
	double x,y,z,x1,y1,z1,qx=0,qy=0,qz=0;
	double xlo,ylo,zlo,xhi,yhi,zhi,x2,y2,z2,rs;
	int i,j,k,di,dj,dk,ei,ej,ek,f,g,l,disp;
	double fx,fy,fz,gxs,gys,gzs,*radp;
	unsigned int q,*e,*mijk;

	if(!con.initialize_voronoicell(c,ijk,s,ci,cj,ck,i,j,k,x,y,z,disp)) return false;
	con.r_init(ijk,s);

	// Initialize the Voronoi cell to fill the entire container
	double crs,mrs;

	int next_count=3,*count_p=(const_cast<int*> (count_list));

	// Test all particles in the particle's local region first
	for(l=0;l<s;l++) {
		x1=p[ijk][ps*l]-x;
		y1=p[ijk][ps*l+1]-y;
		z1=p[ijk][ps*l+2]-z;
		rs=con.r_scale(x1*x1+y1*y1+z1*z1,ijk,l);
		if(!c.nplane(x1,y1,z1,rs,id[ijk][l])) return false;
	}
	l++;
	while(l<co[ijk]) {
		x1=p[ijk][ps*l]-x;
		y1=p[ijk][ps*l+1]-y;
		z1=p[ijk][ps*l+2]-z;
		rs=con.r_scale(x1*x1+y1*y1+z1*z1,ijk,l);
		if(!c.nplane(x1,y1,z1,rs,id[ijk][l])) return false;
		l++;
	}

	// Now compute the maximum distance squared from the cell center to a
	// vertex. This is used to cut off the calculation since we only need
	// to test out to twice this range.
	mrs=c.max_radius_squared();

	// Now compute the fractional position of the particle within its
	// region and store it in (fx,fy,fz). We use this to compute an index
	// (di,dj,dk) of which subregion the particle is within.
	unsigned int m1,m2;
	con.frac_pos(x,y,z,ci,cj,ck,fx,fy,fz);
	di=int(fx*xsp*wl_fgrid);dj=int(fy*ysp*wl_fgrid);dk=int(fz*zsp*wl_fgrid);

	// The indices (di,dj,dk) tell us which worklist to use, to test the
	// blocks in the optimal order. But we only store worklists for the
	// eighth of the region where di, dj, and dk are all less than half the
	// full grid. The rest of the cases are handled by symmetry. In this
	// section, we detect for these cases, by reflecting high values of di,
	// dj, and dk. For these cases, a mask is constructed in m1 and m2
	// which is used to flip the worklist information when it is loaded.
	if(di>=wl_hgrid) {
		gxs=fx;
		m1=127+(3<<21);m2=1+(1<<21);di=wl_fgrid-1-di;if(di<0) di=0;
	} else {m1=m2=0;gxs=boxx-fx;}
	if(dj>=wl_hgrid) {
		gys=fy;
		m1|=(127<<7)+(3<<24);m2|=(1<<7)+(1<<24);dj=wl_fgrid-1-dj;if(dj<0) dj=0;
	} else gys=boxy-fy;
	if(dk>=wl_hgrid) {
		gzs=fz;
		m1|=(127<<14)+(3<<27);m2|=(1<<14)+(1<<27);dk=wl_fgrid-1-dk;if(dk<0) dk=0;
	} else gzs=boxz-fz;
	gxs*=gxs;gys*=gys;gzs*=gzs;

	// Now compute which worklist we are going to use, and set radp and e to
	// point at the right offsets
	ijk=di+wl_hgrid*(dj+wl_hgrid*dk);
	radp=mrad+ijk*wl_seq_length;
	e=(const_cast<unsigned int*> (wl))+ijk*wl_seq_length;

	// Read in how many items in the worklist can be tested without having to
	// worry about writing to the mask
	f=e[0];g=0;
	do {

		// At the intervals specified by count_list, we recompute the
		// maximum radius squared
		if(g==next_count) {
			mrs=c.max_radius_squared();
			if(count_p!=count_e) next_count=*(count_p++);
		}

		// If mrs is less than the minimum distance to any untested
		// block, then we are done
		if(con.r_ctest(radp[g],mrs)) return true;
		g++;

		// Load in a block off the worklist, permute it with the
		// symmetry mask, and decode its position. These are all
		// integer bit operations so they should run very fast.
		q=e[g];q^=m1;q+=m2;
		di=q&127;di-=64;
		dj=(q>>7)&127;dj-=64;
		dk=(q>>14)&127;dk-=64;

		// Check that the worklist position is in range
		ei=di+i;if(ei<0||ei>=hx) continue;
		ej=dj+j;if(ej<0||ej>=hy) continue;
		ek=dk+k;if(ek<0||ek>=hz) continue;

		// Call the compute_min_max_radius() function. This returns
		// true if the minimum distance to the block is bigger than the
		// current mrs, in which case we skip this block and move on.
		// Otherwise, it computes the maximum distance to the block and
		// returns it in crs.
		if(compute_min_max_radius(di,dj,dk,fx,fy,fz,gxs,gys,gzs,crs,mrs)) continue;

		// Now compute which region we are going to loop over, adding a
		// displacement for the periodic cases
		ijk=con.region_index(ci,cj,ck,ei,ej,ek,qx,qy,qz,disp);

		// If mrs is bigger than the maximum distance to the block,
		// then we have to test all particles in the block for
		// intersections. Otherwise, we do additional checks and skip
		// those particles which can't possibly intersect the block.
		if(co[ijk]>0) {
			l=0;x2=x-qx;y2=y-qy;z2=z-qz;
			if(!con.r_ctest(crs,mrs)) {
				do {
					x1=p[ijk][ps*l]-x2;
					y1=p[ijk][ps*l+1]-y2;
					z1=p[ijk][ps*l+2]-z2;
					rs=con.r_scale(x1*x1+y1*y1+z1*z1,ijk,l);
					if(!c.nplane(x1,y1,z1,rs,id[ijk][l])) return false;
					l++;
				} while (l<co[ijk]);
			} else {
				do {
					x1=p[ijk][ps*l]-x2;
					y1=p[ijk][ps*l+1]-y2;
					z1=p[ijk][ps*l+2]-z2;
					rs=x1*x1+y1*y1+z1*z1;
					if(con.r_scale_check(rs,mrs,ijk,l)&&!c.nplane(x1,y1,z1,rs,id[ijk][l])) return false;
					l++;
				} while (l<co[ijk]);
			}
		}
	} while(g<f);

	// If we reach here, we were unable to compute the entire cell using
	// the first part of the worklist. This section of the algorithm
	// continues the worklist, but it now starts preparing the mask that we
	// need if we end up going block by block. We do the same as before,
	// but we put a mark down on the mask for every block that's tested.
	// The worklist also contains information about which neighbors of each
	// block are not also on the worklist, and we start storing those
	// points in a list in case we have to go block by block. Update the
	// mask counter, and if it wraps around then reset the whole mask; that
	// will only happen once every 2^32 tries.
	mv++;
	if(mv==0) {reset_mask();mv=1;}

	// Set the queue pointers
	int *qu_s=qu,*qu_e=qu;

	while(g<wl_seq_length-1) {

		// At the intervals specified by count_list, we recompute the
		// maximum radius squared
		if(g==next_count) {
			mrs=c.max_radius_squared();
			if(count_p!=count_e) next_count=*(count_p++);
		}

		// If mrs is less than the minimum distance to any untested
		// block, then we are done
		if(con.r_ctest(radp[g],mrs)) return true;
		g++;

		// Load in a block off the worklist, permute it with the
		// symmetry mask, and decode its position. These are all
		// integer bit operations so they should run very fast.
		q=e[g];q^=m1;q+=m2;
		di=q&127;di-=64;
		dj=(q>>7)&127;dj-=64;
		dk=(q>>14)&127;dk-=64;

		// Compute the position in the mask of the current block. If
		// this lies outside the mask, then skip it. Otherwise, mark
		// it.
		ei=di+i;if(ei<0||ei>=hx) continue;
		ej=dj+j;if(ej<0||ej>=hy) continue;
		ek=dk+k;if(ek<0||ek>=hz) continue;
		mijk=mask+ei+hx*(ej+hy*ek);
		*mijk=mv;

		// Call the compute_min_max_radius() function. This returns
		// true if the minimum distance to the block is bigger than the
		// current mrs, in which case we skip this block and move on.
		// Otherwise, it computes the maximum distance to the block and
		// returns it in crs.
		if(compute_min_max_radius(di,dj,dk,fx,fy,fz,gxs,gys,gzs,crs,mrs)) continue;

		// Now compute which region we are going to loop over, adding a
		// displacement for the periodic cases
		ijk=con.region_index(ci,cj,ck,ei,ej,ek,qx,qy,qz,disp);

		// If mrs is bigger than the maximum distance to the block,
		// then we have to test all particles in the block for
		// intersections. Otherwise, we do additional checks and skip
		// those particles which can't possibly intersect the block.
		if(co[ijk]>0) {
			l=0;x2=x-qx;y2=y-qy;z2=z-qz;
			if(!con.r_ctest(crs,mrs)) {
				do {
					x1=p[ijk][ps*l]-x2;
					y1=p[ijk][ps*l+1]-y2;
					z1=p[ijk][ps*l+2]-z2;
					rs=con.r_scale(x1*x1+y1*y1+z1*z1,ijk,l);
					if(!c.nplane(x1,y1,z1,rs,id[ijk][l])) return false;
					l++;
				} while (l<co[ijk]);
			} else {
				do {
					x1=p[ijk][ps*l]-x2;
					y1=p[ijk][ps*l+1]-y2;
					z1=p[ijk][ps*l+2]-z2;
					rs=x1*x1+y1*y1+z1*z1;
					if(con.r_scale_check(rs,mrs,ijk,l)&&!c.nplane(x1,y1,z1,rs,id[ijk][l])) return false;
					l++;
				} while (l<co[ijk]);
			}
		}

		// If there might not be enough memory on the list for these
		// additions, then add more
		if(qu_e>qu_l-18) add_list_memory(qu_s,qu_e);

		// Test the parts of the worklist element which tell us what
		// neighbors of this block are not on the worklist. Store them
		// on the block list, and mark the mask.
		scan_bits_mask_add(q,mijk,ei,ej,ek,qu_e);
	}

	// Do a check to see if we've reached the radius cutoff
	if(con.r_ctest(radp[g],mrs)) return true;

	// We were unable to completely compute the cell based on the blocks in
	// the worklist, so now we have to go block by block, reading in items
	// off the list
	while(qu_s!=qu_e) {

		// If we reached the end of the list memory loop back to the
		// start
		if(qu_s==qu_l) qu_s=qu;

		// Read in a block off the list, and compute the upper and lower
		// coordinates in each of the three dimensions
		ei=*(qu_s++);ej=*(qu_s++);ek=*(qu_s++);
		xlo=(ei-i)*boxx-fx;xhi=xlo+boxx;
		ylo=(ej-j)*boxy-fy;yhi=ylo+boxy;
		zlo=(ek-k)*boxz-fz;zhi=zlo+boxz;

		// Carry out plane tests to see if any particle in this block
		// could possibly intersect the cell
		if(ei>i) {
			if(ej>j) {
				if(ek>k) {if(corner_test(c,xlo,ylo,zlo,xhi,yhi,zhi)) continue;}
				else if(ek<k) {if(corner_test(c,xlo,ylo,zhi,xhi,yhi,zlo)) continue;}
				else {if(edge_z_test(c,xlo,ylo,zlo,xhi,yhi,zhi)) continue;}
			} else if(ej<j) {
				if(ek>k) {if(corner_test(c,xlo,yhi,zlo,xhi,ylo,zhi)) continue;}
				else if(ek<k) {if(corner_test(c,xlo,yhi,zhi,xhi,ylo,zlo)) continue;}
				else {if(edge_z_test(c,xlo,yhi,zlo,xhi,ylo,zhi)) continue;}
			} else {
				if(ek>k) {if(edge_y_test(c,xlo,ylo,zlo,xhi,yhi,zhi)) continue;}
				else if(ek<k) {if(edge_y_test(c,xlo,ylo,zhi,xhi,yhi,zlo)) continue;}
				else {if(face_x_test(c,xlo,ylo,zlo,yhi,zhi)) continue;}
			}
		} else if(ei<i) {
			if(ej>j) {
				if(ek>k) {if(corner_test(c,xhi,ylo,zlo,xlo,yhi,zhi)) continue;}
				else if(ek<k) {if(corner_test(c,xhi,ylo,zhi,xlo,yhi,zlo)) continue;}
				else {if(edge_z_test(c,xhi,ylo,zlo,xlo,yhi,zhi)) continue;}
			} else if(ej<j) {
				if(ek>k) {if(corner_test(c,xhi,yhi,zlo,xlo,ylo,zhi)) continue;}
				else if(ek<k) {if(corner_test(c,xhi,yhi,zhi,xlo,ylo,zlo)) continue;}
				else {if(edge_z_test(c,xhi,yhi,zlo,xlo,ylo,zhi)) continue;}
			} else {
				if(ek>k) {if(edge_y_test(c,xhi,ylo,zlo,xlo,yhi,zhi)) continue;}
				else if(ek<k) {if(edge_y_test(c,xhi,ylo,zhi,xlo,yhi,zlo)) continue;}
				else {if(face_x_test(c,xhi,ylo,zlo,yhi,zhi)) continue;}
			}
		} else {
			if(ej>j) {
				if(ek>k) {if(edge_x_test(c,xlo,ylo,zlo,xhi,yhi,zhi)) continue;}
				else if(ek<k) {if(edge_x_test(c,xlo,ylo,zhi,xhi,yhi,zlo)) continue;}
				else {if(face_y_test(c,xlo,ylo,zlo,xhi,zhi)) continue;}
			} else if(ej<j) {
				if(ek>k) {if(edge_x_test(c,xlo,yhi,zlo,xhi,ylo,zhi)) continue;}
				else if(ek<k) {if(edge_x_test(c,xlo,yhi,zhi,xhi,ylo,zlo)) continue;}
				else {if(face_y_test(c,xlo,yhi,zlo,xhi,zhi)) continue;}
			} else {
				if(ek>k) {if(face_z_test(c,xlo,ylo,zlo,xhi,yhi)) continue;}
				else if(ek<k) {if(face_z_test(c,xlo,ylo,zhi,xhi,yhi)) continue;}
				else voro_fatal_error("Compute cell routine revisiting central block, which should never\nhappen.",VOROPP_INTERNAL_ERROR);
			}
		}

		// Now compute the region that we are going to test over, and
		// set a displacement vector for the periodic cases
		ijk=con.region_index(ci,cj,ck,ei,ej,ek,qx,qy,qz,disp);

		// Loop over all the elements in the block to test for cuts. It
		// would be possible to exclude some of these cases by testing
		// against mrs, but this will probably not save time.
		if(co[ijk]>0) {
			l=0;x2=x-qx;y2=y-qy;z2=z-qz;
			do {
				x1=p[ijk][ps*l]-x2;
				y1=p[ijk][ps*l+1]-y2;
				z1=p[ijk][ps*l+2]-z2;
				rs=con.r_scale(x1*x1+y1*y1+z1*z1,ijk,l);
				if(!c.nplane(x1,y1,z1,rs,id[ijk][l])) return false;
				l++;
			} while (l<co[ijk]);
		}

		// If there's not much memory on the block list then add more
		if((qu_s<=qu_e?(qu_l-qu_e)+(qu_s-qu):qu_s-qu_e)<18) add_list_memory(qu_s,qu_e);

		// Test the neighbors of the current block, and add them to the
		// block list if they haven't already been tested
		add_to_mask(ei,ej,ek,qu_e);
	}

	return true;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x1d8, %rsp            # imm = 0x1D8
movl 0x10(%rbp), %eax
movq %rdi, -0x38(%rbp)
movq %rsi, -0x40(%rbp)
movl %edx, -0x44(%rbp)
movl %ecx, -0x48(%rbp)
movl %r8d, -0x4c(%rbp)
movl %r9d, -0x50(%rbp)
movq -0x38(%rbp), %rax
movq %rax, -0x1b0(%rbp)
xorps %xmm0, %xmm0
movsd %xmm0, -0x88(%rbp)
xorps %xmm0, %xmm0
movsd %xmm0, -0x90(%rbp)
xorps %xmm0, %xmm0
movsd %xmm0, -0x98(%rbp)
movq (%rax), %rdi
movq -0x40(%rbp), %rsi
movl -0x44(%rbp), %edx
movl -0x48(%rbp), %ecx
movl -0x4c(%rbp), %r8d
movl -0x50(%rbp), %r9d
movl 0x10(%rbp), %r13d
leaq -0xec(%rbp), %r12
leaq -0xf0(%rbp), %r15
leaq -0xf4(%rbp), %r14
leaq -0x58(%rbp), %rbx
leaq -0x60(%rbp), %r11
leaq -0x68(%rbp), %r10
leaq -0x11c(%rbp), %rax
movl %r13d, (%rsp)
movq %r12, 0x8(%rsp)
movq %r15, 0x10(%rsp)
movq %r14, 0x18(%rsp)
movq %rbx, 0x20(%rsp)
movq %r11, 0x28(%rsp)
movq %r10, 0x30(%rsp)
movq %rax, 0x38(%rsp)
callq 0x21ba0
testb $0x1, %al
jne 0x1fa83
movb $0x0, -0x29(%rbp)
jmp 0x21b88
movq -0x1b0(%rbp), %rax
movq (%rax), %rdi
movl -0x44(%rbp), %esi
movl -0x48(%rbp), %edx
callq 0x21e90
movl $0x3, -0x184(%rbp)
leaq 0x38567(%rip), %rax     # 0x58010
movq %rax, -0x190(%rbp)
movl $0x0, -0x118(%rbp)
movl -0x118(%rbp), %eax
cmpl -0x48(%rbp), %eax
jge 0x1fbf5
movq -0x1b0(%rbp), %rax
movq 0x58(%rax), %rcx
movslq -0x44(%rbp), %rdx
movq (%rcx,%rdx,8), %rcx
movl 0x4c(%rax), %edx
imull -0x118(%rbp), %edx
movslq %edx, %rdx
movsd (%rcx,%rdx,8), %xmm0
subsd -0x58(%rbp), %xmm0
movsd %xmm0, -0x70(%rbp)
movq 0x58(%rax), %rcx
movslq -0x44(%rbp), %rdx
movq (%rcx,%rdx,8), %rcx
movl 0x4c(%rax), %edx
imull -0x118(%rbp), %edx
addl $0x1, %edx
movslq %edx, %rdx
movsd (%rcx,%rdx,8), %xmm0
subsd -0x60(%rbp), %xmm0
movsd %xmm0, -0x78(%rbp)
movq 0x58(%rax), %rcx
movslq -0x44(%rbp), %rdx
movq (%rcx,%rdx,8), %rcx
movl 0x4c(%rax), %edx
imull -0x118(%rbp), %edx
addl $0x2, %edx
movslq %edx, %rdx
movsd (%rcx,%rdx,8), %xmm0
subsd -0x68(%rbp), %xmm0
movsd %xmm0, -0x80(%rbp)
movq (%rax), %rdi
movsd -0x70(%rbp), %xmm1
movsd -0x70(%rbp), %xmm2
movsd -0x78(%rbp), %xmm0
mulsd -0x78(%rbp), %xmm0
mulsd %xmm2, %xmm1
addsd %xmm0, %xmm1
movsd -0x80(%rbp), %xmm0
movsd -0x80(%rbp), %xmm2
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movl -0x44(%rbp), %esi
movl -0x118(%rbp), %edx
callq 0x21ea0
movq -0x1b0(%rbp), %rax
movsd %xmm0, -0xe8(%rbp)
movq -0x40(%rbp), %rdi
movsd -0x70(%rbp), %xmm0
movsd -0x78(%rbp), %xmm1
movsd -0x80(%rbp), %xmm2
movsd -0xe8(%rbp), %xmm3
movq 0x50(%rax), %rax
movslq -0x44(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movslq -0x118(%rbp), %rcx
movl (%rax,%rcx,4), %esi
callq 0x21ec0
testb $0x1, %al
jne 0x1fbdf
movb $0x0, -0x29(%rbp)
jmp 0x21b88
jmp 0x1fbe1
movl -0x118(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x118(%rbp)
jmp 0x1faba
movl -0x118(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x118(%rbp)
movq -0x1b0(%rbp), %rcx
movl -0x118(%rbp), %eax
movq 0x60(%rcx), %rcx
movslq -0x44(%rbp), %rdx
cmpl (%rcx,%rdx,4), %eax
jge 0x1fd4c
movq -0x1b0(%rbp), %rax
movq 0x58(%rax), %rcx
movslq -0x44(%rbp), %rdx
movq (%rcx,%rdx,8), %rcx
movl 0x4c(%rax), %edx
imull -0x118(%rbp), %edx
movslq %edx, %rdx
movsd (%rcx,%rdx,8), %xmm0
subsd -0x58(%rbp), %xmm0
movsd %xmm0, -0x70(%rbp)
movq 0x58(%rax), %rcx
movslq -0x44(%rbp), %rdx
movq (%rcx,%rdx,8), %rcx
movl 0x4c(%rax), %edx
imull -0x118(%rbp), %edx
addl $0x1, %edx
movslq %edx, %rdx
movsd (%rcx,%rdx,8), %xmm0
subsd -0x60(%rbp), %xmm0
movsd %xmm0, -0x78(%rbp)
movq 0x58(%rax), %rcx
movslq -0x44(%rbp), %rdx
movq (%rcx,%rdx,8), %rcx
movl 0x4c(%rax), %edx
imull -0x118(%rbp), %edx
addl $0x2, %edx
movslq %edx, %rdx
movsd (%rcx,%rdx,8), %xmm0
subsd -0x68(%rbp), %xmm0
movsd %xmm0, -0x80(%rbp)
movq (%rax), %rdi
movsd -0x70(%rbp), %xmm1
movsd -0x70(%rbp), %xmm2
movsd -0x78(%rbp), %xmm0
mulsd -0x78(%rbp), %xmm0
mulsd %xmm2, %xmm1
addsd %xmm0, %xmm1
movsd -0x80(%rbp), %xmm0
movsd -0x80(%rbp), %xmm2
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movl -0x44(%rbp), %esi
movl -0x118(%rbp), %edx
callq 0x21ea0
movq -0x1b0(%rbp), %rax
movsd %xmm0, -0xe8(%rbp)
movq -0x40(%rbp), %rdi
movsd -0x70(%rbp), %xmm0
movsd -0x78(%rbp), %xmm1
movsd -0x80(%rbp), %xmm2
movsd -0xe8(%rbp), %xmm3
movq 0x50(%rax), %rax
movslq -0x44(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movslq -0x118(%rbp), %rcx
movl (%rax,%rcx,4), %esi
callq 0x21ec0
testb $0x1, %al
jne 0x1fd38
movb $0x0, -0x29(%rbp)
jmp 0x21b88
movl -0x118(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x118(%rbp)
jmp 0x1fc04
movq -0x40(%rbp), %rdi
callq 0xb9c0
movq -0x1b0(%rbp), %rax
movsd %xmm0, -0x180(%rbp)
movq (%rax), %rdi
movsd -0x58(%rbp), %xmm0
movsd -0x60(%rbp), %xmm1
movsd -0x68(%rbp), %xmm2
cvtsi2sdl -0x4c(%rbp), %xmm3
cvtsi2sdl -0x50(%rbp), %xmm4
cvtsi2sdl 0x10(%rbp), %xmm5
leaq -0x128(%rbp), %rsi
leaq -0x130(%rbp), %rdx
leaq -0x138(%rbp), %rcx
callq 0x21f10
movq -0x1b0(%rbp), %rax
movsd -0x128(%rbp), %xmm0
mulsd 0x20(%rax), %xmm0
movsd 0x3823d(%rip), %xmm1    # 0x57ff8
mulsd %xmm1, %xmm0
cvttsd2si %xmm0, %ecx
movl %ecx, -0xf8(%rbp)
movsd -0x130(%rbp), %xmm0
mulsd 0x28(%rax), %xmm0
movsd 0x3821a(%rip), %xmm1    # 0x57ff8
mulsd %xmm1, %xmm0
cvttsd2si %xmm0, %ecx
movl %ecx, -0xfc(%rbp)
movsd -0x138(%rbp), %xmm0
mulsd 0x30(%rax), %xmm0
movsd 0x381f7(%rip), %xmm1    # 0x57ff8
mulsd %xmm1, %xmm0
cvttsd2si %xmm0, %eax
movl %eax, -0x100(%rbp)
cmpl $0x4, -0xf8(%rbp)
jl 0x1fe62
movsd -0x128(%rbp), %xmm0
movsd %xmm0, -0x140(%rbp)
movl $0x60007f, -0x194(%rbp) # imm = 0x60007F
movl $0x200001, -0x198(%rbp) # imm = 0x200001
movl $0x7, %eax
subl -0xf8(%rbp), %eax
movl %eax, -0xf8(%rbp)
cmpl $0x0, -0xf8(%rbp)
jge 0x1fe60
movl $0x0, -0xf8(%rbp)
jmp 0x1fe92
movq -0x1b0(%rbp), %rax
movl $0x0, -0x198(%rbp)
movl $0x0, -0x194(%rbp)
movsd 0x8(%rax), %xmm0
subsd -0x128(%rbp), %xmm0
movsd %xmm0, -0x140(%rbp)
cmpl $0x4, -0xfc(%rbp)
jl 0x1fef3
movsd -0x130(%rbp), %xmm0
movsd %xmm0, -0x148(%rbp)
movl -0x194(%rbp), %eax
orl $0x3003f80, %eax        # imm = 0x3003F80
movl %eax, -0x194(%rbp)
movl -0x198(%rbp), %eax
orl $0x1000080, %eax        # imm = 0x1000080
movl %eax, -0x198(%rbp)
movl $0x7, %eax
subl -0xfc(%rbp), %eax
movl %eax, -0xfc(%rbp)
cmpl $0x0, -0xfc(%rbp)
jge 0x1fef1
movl $0x0, -0xfc(%rbp)
jmp 0x1ff0f
movq -0x1b0(%rbp), %rax
movsd 0x10(%rax), %xmm0
subsd -0x130(%rbp), %xmm0
movsd %xmm0, -0x148(%rbp)
cmpl $0x4, -0x100(%rbp)
jl 0x1ff70
movsd -0x138(%rbp), %xmm0
movsd %xmm0, -0x150(%rbp)
movl -0x194(%rbp), %eax
orl $0x181fc000, %eax       # imm = 0x181FC000
movl %eax, -0x194(%rbp)
movl -0x198(%rbp), %eax
orl $0x8004000, %eax        # imm = 0x8004000
movl %eax, -0x198(%rbp)
movl $0x7, %eax
subl -0x100(%rbp), %eax
movl %eax, -0x100(%rbp)
cmpl $0x0, -0x100(%rbp)
jge 0x1ff6e
movl $0x0, -0x100(%rbp)
jmp 0x1ff8c
movq -0x1b0(%rbp), %rax
movsd 0x18(%rax), %xmm0
subsd -0x138(%rbp), %xmm0
movsd %xmm0, -0x150(%rbp)
movq -0x1b0(%rbp), %rax
movsd -0x140(%rbp), %xmm0
mulsd -0x140(%rbp), %xmm0
movsd %xmm0, -0x140(%rbp)
movsd -0x148(%rbp), %xmm0
mulsd -0x148(%rbp), %xmm0
movsd %xmm0, -0x148(%rbp)
movsd -0x150(%rbp), %xmm0
mulsd -0x150(%rbp), %xmm0
movsd %xmm0, -0x150(%rbp)
movl -0xf8(%rbp), %ecx
movl -0xfc(%rbp), %edx
movl -0x100(%rbp), %esi
shll $0x2, %esi
addl %esi, %edx
shll $0x2, %edx
addl %edx, %ecx
movl %ecx, -0x44(%rbp)
movq 0x80(%rax), %rcx
movl -0x44(%rbp), %edx
shll $0x6, %edx
movslq %edx, %rdx
shlq $0x3, %rdx
addq %rdx, %rcx
movq %rcx, -0x158(%rbp)
movq 0x78(%rax), %rax
movl -0x44(%rbp), %ecx
shll $0x6, %ecx
movslq %ecx, %rcx
shlq $0x2, %rcx
addq %rcx, %rax
movq %rax, -0x168(%rbp)
movq -0x168(%rbp), %rax
movl (%rax), %eax
movl %eax, -0x110(%rbp)
movl $0x0, -0x114(%rbp)
movl -0x114(%rbp), %eax
cmpl -0x184(%rbp), %eax
jne 0x2009a
movq -0x40(%rbp), %rdi
callq 0xb9c0
movsd %xmm0, -0x180(%rbp)
movq -0x190(%rbp), %rax
cmpq 0x460cf(%rip), %rax     # 0x66148
je 0x20098
movq -0x190(%rbp), %rax
movq %rax, %rcx
addq $0x4, %rcx
movq %rcx, -0x190(%rbp)
movl (%rax), %eax
movl %eax, -0x184(%rbp)
jmp 0x2009a
movq -0x1b0(%rbp), %rax
movq (%rax), %rdi
movq -0x158(%rbp), %rax
movslq -0x114(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
movsd -0x180(%rbp), %xmm1
callq 0x22000
testb $0x1, %al
jne 0x200ca
jmp 0x200d3
movb $0x1, -0x29(%rbp)
jmp 0x21b88
movl -0x114(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x114(%rbp)
movq -0x168(%rbp), %rax
movslq -0x114(%rbp), %rcx
movl (%rax,%rcx,4), %eax
movl %eax, -0x15c(%rbp)
movl -0x194(%rbp), %eax
xorl -0x15c(%rbp), %eax
movl %eax, -0x15c(%rbp)
movl -0x198(%rbp), %eax
addl -0x15c(%rbp), %eax
movl %eax, -0x15c(%rbp)
movl -0x15c(%rbp), %eax
andl $0x7f, %eax
movl %eax, -0xf8(%rbp)
movl -0xf8(%rbp), %eax
subl $0x40, %eax
movl %eax, -0xf8(%rbp)
movl -0x15c(%rbp), %eax
shrl $0x7, %eax
andl $0x7f, %eax
movl %eax, -0xfc(%rbp)
movl -0xfc(%rbp), %eax
subl $0x40, %eax
movl %eax, -0xfc(%rbp)
movl -0x15c(%rbp), %eax
shrl $0xe, %eax
andl $0x7f, %eax
movl %eax, -0x100(%rbp)
movl -0x100(%rbp), %eax
subl $0x40, %eax
movl %eax, -0x100(%rbp)
movl -0xf8(%rbp), %eax
addl -0xec(%rbp), %eax
movl %eax, -0x104(%rbp)
cmpl $0x0, -0x104(%rbp)
jl 0x201aa
movq -0x1b0(%rbp), %rcx
movl -0x104(%rbp), %eax
cmpl 0x38(%rcx), %eax
jl 0x201af
jmp 0x20626
movl -0xfc(%rbp), %eax
addl -0xf0(%rbp), %eax
movl %eax, -0x108(%rbp)
cmpl $0x0, -0x108(%rbp)
jl 0x201dc
movq -0x1b0(%rbp), %rcx
movl -0x108(%rbp), %eax
cmpl 0x3c(%rcx), %eax
jl 0x201e1
jmp 0x20626
movl -0x100(%rbp), %eax
addl -0xf4(%rbp), %eax
movl %eax, -0x10c(%rbp)
cmpl $0x0, -0x10c(%rbp)
jl 0x2020e
movq -0x1b0(%rbp), %rcx
movl -0x10c(%rbp), %eax
cmpl 0x40(%rcx), %eax
jl 0x20213
jmp 0x20626
movq -0x1b0(%rbp), %rdi
movl -0xf8(%rbp), %esi
movl -0xfc(%rbp), %edx
movl -0x100(%rbp), %ecx
movsd -0x128(%rbp), %xmm0
movsd -0x130(%rbp), %xmm1
movsd -0x138(%rbp), %xmm2
movsd -0x140(%rbp), %xmm3
movsd -0x148(%rbp), %xmm4
movsd -0x150(%rbp), %xmm5
movsd -0x180(%rbp), %xmm6
leaq -0x178(%rbp), %r8
callq 0x22030
testb $0x1, %al
jne 0x20276
jmp 0x2027b
jmp 0x20626
movq -0x1b0(%rbp), %rax
movq (%rax), %rdi
movl -0x4c(%rbp), %esi
movl -0x50(%rbp), %edx
movl 0x10(%rbp), %ecx
movl -0x104(%rbp), %r8d
movl -0x108(%rbp), %r9d
movl -0x10c(%rbp), %r14d
leaq -0x88(%rbp), %rbx
leaq -0x90(%rbp), %r11
leaq -0x98(%rbp), %r10
leaq -0x11c(%rbp), %rax
movl %r14d, (%rsp)
movq %rbx, 0x8(%rsp)
movq %r11, 0x10(%rsp)
movq %r10, 0x18(%rsp)
movq %rax, 0x20(%rsp)
callq 0x23640
movl %eax, %ecx
movq -0x1b0(%rbp), %rax
movl %ecx, -0x44(%rbp)
movq 0x60(%rax), %rax
movslq -0x44(%rbp), %rcx
cmpl $0x0, (%rax,%rcx,4)
jle 0x20624
movq -0x1b0(%rbp), %rax
movl $0x0, -0x118(%rbp)
movsd -0x58(%rbp), %xmm0
subsd -0x88(%rbp), %xmm0
movsd %xmm0, -0xd0(%rbp)
movsd -0x60(%rbp), %xmm0
subsd -0x90(%rbp), %xmm0
movsd %xmm0, -0xd8(%rbp)
movsd -0x68(%rbp), %xmm0
subsd -0x98(%rbp), %xmm0
movsd %xmm0, -0xe0(%rbp)
movq (%rax), %rdi
movsd -0x178(%rbp), %xmm0
movsd -0x180(%rbp), %xmm1
callq 0x22000
testb $0x1, %al
jne 0x204bd
jmp 0x2036c
movq -0x1b0(%rbp), %rax
movq 0x58(%rax), %rcx
movslq -0x44(%rbp), %rdx
movq (%rcx,%rdx,8), %rcx
movl 0x4c(%rax), %edx
imull -0x118(%rbp), %edx
movslq %edx, %rdx
movsd (%rcx,%rdx,8), %xmm0
subsd -0xd0(%rbp), %xmm0
movsd %xmm0, -0x70(%rbp)
movq 0x58(%rax), %rcx
movslq -0x44(%rbp), %rdx
movq (%rcx,%rdx,8), %rcx
movl 0x4c(%rax), %edx
imull -0x118(%rbp), %edx
addl $0x1, %edx
movslq %edx, %rdx
movsd (%rcx,%rdx,8), %xmm0
subsd -0xd8(%rbp), %xmm0
movsd %xmm0, -0x78(%rbp)
movq 0x58(%rax), %rcx
movslq -0x44(%rbp), %rdx
movq (%rcx,%rdx,8), %rcx
movl 0x4c(%rax), %edx
imull -0x118(%rbp), %edx
addl $0x2, %edx
movslq %edx, %rdx
movsd (%rcx,%rdx,8), %xmm0
subsd -0xe0(%rbp), %xmm0
movsd %xmm0, -0x80(%rbp)
movq (%rax), %rdi
movsd -0x70(%rbp), %xmm1
movsd -0x70(%rbp), %xmm2
movsd -0x78(%rbp), %xmm0
mulsd -0x78(%rbp), %xmm0
mulsd %xmm2, %xmm1
addsd %xmm0, %xmm1
movsd -0x80(%rbp), %xmm0
movsd -0x80(%rbp), %xmm2
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movl -0x44(%rbp), %esi
movl -0x118(%rbp), %edx
callq 0x21ea0
movq -0x1b0(%rbp), %rax
movsd %xmm0, -0xe8(%rbp)
movq -0x40(%rbp), %rdi
movsd -0x70(%rbp), %xmm0
movsd -0x78(%rbp), %xmm1
movsd -0x80(%rbp), %xmm2
movsd -0xe8(%rbp), %xmm3
movq 0x50(%rax), %rax
movslq -0x44(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movslq -0x118(%rbp), %rcx
movl (%rax,%rcx,4), %esi
callq 0x21ec0
testb $0x1, %al
jne 0x2048b
movb $0x0, -0x29(%rbp)
jmp 0x21b88
movl -0x118(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x118(%rbp)
movq -0x1b0(%rbp), %rcx
movl -0x118(%rbp), %eax
movq 0x60(%rcx), %rcx
movslq -0x44(%rbp), %rdx
cmpl (%rcx,%rdx,4), %eax
jl 0x2036c
jmp 0x20622
jmp 0x204bf
movq -0x1b0(%rbp), %rax
movq 0x58(%rax), %rcx
movslq -0x44(%rbp), %rdx
movq (%rcx,%rdx,8), %rcx
movl 0x4c(%rax), %edx
imull -0x118(%rbp), %edx
movslq %edx, %rdx
movsd (%rcx,%rdx,8), %xmm0
subsd -0xd0(%rbp), %xmm0
movsd %xmm0, -0x70(%rbp)
movq 0x58(%rax), %rcx
movslq -0x44(%rbp), %rdx
movq (%rcx,%rdx,8), %rcx
movl 0x4c(%rax), %edx
imull -0x118(%rbp), %edx
addl $0x1, %edx
movslq %edx, %rdx
movsd (%rcx,%rdx,8), %xmm0
subsd -0xd8(%rbp), %xmm0
movsd %xmm0, -0x78(%rbp)
movq 0x58(%rax), %rcx
movslq -0x44(%rbp), %rdx
movq (%rcx,%rdx,8), %rcx
movl 0x4c(%rax), %edx
imull -0x118(%rbp), %edx
addl $0x2, %edx
movslq %edx, %rdx
movsd (%rcx,%rdx,8), %xmm0
subsd -0xe0(%rbp), %xmm0
movsd %xmm0, -0x80(%rbp)
movsd -0x70(%rbp), %xmm1
movsd -0x70(%rbp), %xmm2
movsd -0x78(%rbp), %xmm0
mulsd -0x78(%rbp), %xmm0
mulsd %xmm2, %xmm1
addsd %xmm0, %xmm1
movsd -0x80(%rbp), %xmm0
movsd -0x80(%rbp), %xmm2
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0xe8(%rbp)
movq (%rax), %rdi
movsd -0x180(%rbp), %xmm0
movl -0x44(%rbp), %edx
movl -0x118(%rbp), %ecx
leaq -0xe8(%rbp), %rsi
callq 0x23880
testb $0x1, %al
jne 0x205a9
jmp 0x205f3
movq -0x1b0(%rbp), %rax
movq -0x40(%rbp), %rdi
movsd -0x70(%rbp), %xmm0
movsd -0x78(%rbp), %xmm1
movsd -0x80(%rbp), %xmm2
movsd -0xe8(%rbp), %xmm3
movq 0x50(%rax), %rax
movslq -0x44(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movslq -0x118(%rbp), %rcx
movl (%rax,%rcx,4), %esi
callq 0x21ec0
testb $0x1, %al
jne 0x205f3
movb $0x0, -0x29(%rbp)
jmp 0x21b88
movl -0x118(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x118(%rbp)
movq -0x1b0(%rbp), %rcx
movl -0x118(%rbp), %eax
movq 0x60(%rcx), %rcx
movslq -0x44(%rbp), %rdx
cmpl (%rcx,%rdx,4), %eax
jl 0x204bf
jmp 0x20622
jmp 0x20624
jmp 0x20626
movl -0x114(%rbp), %eax
cmpl -0x110(%rbp), %eax
jl 0x2004c
movq -0x1b0(%rbp), %rax
movl 0x70(%rax), %ecx
addl $0x1, %ecx
movl %ecx, 0x70(%rax)
cmpl $0x0, 0x70(%rax)
jne 0x20668
movq -0x1b0(%rbp), %rdi
callq 0x1f710
movq -0x1b0(%rbp), %rax
movl $0x1, 0x70(%rax)
movq -0x1b0(%rbp), %rax
movq 0x90(%rax), %rcx
movq %rcx, -0x1a0(%rbp)
movq 0x90(%rax), %rax
movq %rax, -0x1a8(%rbp)
cmpl $0x3f, -0x114(%rbp)
jge 0x20d2f
movl -0x114(%rbp), %eax
cmpl -0x184(%rbp), %eax
jne 0x206e6
movq -0x40(%rbp), %rdi
callq 0xb9c0
movsd %xmm0, -0x180(%rbp)
movq -0x190(%rbp), %rax
cmpq 0x45a83(%rip), %rax     # 0x66148
je 0x206e4
movq -0x190(%rbp), %rax
movq %rax, %rcx
addq $0x4, %rcx
movq %rcx, -0x190(%rbp)
movl (%rax), %eax
movl %eax, -0x184(%rbp)
jmp 0x206e6
movq -0x1b0(%rbp), %rax
movq (%rax), %rdi
movq -0x158(%rbp), %rax
movslq -0x114(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
movsd -0x180(%rbp), %xmm1
callq 0x22000
testb $0x1, %al
jne 0x20716
jmp 0x2071f
movb $0x1, -0x29(%rbp)
jmp 0x21b88
movl -0x114(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x114(%rbp)
movq -0x168(%rbp), %rax
movslq -0x114(%rbp), %rcx
movl (%rax,%rcx,4), %eax
movl %eax, -0x15c(%rbp)
movl -0x194(%rbp), %eax
xorl -0x15c(%rbp), %eax
movl %eax, -0x15c(%rbp)
movl -0x198(%rbp), %eax
addl -0x15c(%rbp), %eax
movl %eax, -0x15c(%rbp)
movl -0x15c(%rbp), %eax
andl $0x7f, %eax
movl %eax, -0xf8(%rbp)
movl -0xf8(%rbp), %eax
subl $0x40, %eax
movl %eax, -0xf8(%rbp)
movl -0x15c(%rbp), %eax
shrl $0x7, %eax
andl $0x7f, %eax
movl %eax, -0xfc(%rbp)
movl -0xfc(%rbp), %eax
subl $0x40, %eax
movl %eax, -0xfc(%rbp)
movl -0x15c(%rbp), %eax
shrl $0xe, %eax
andl $0x7f, %eax
movl %eax, -0x100(%rbp)
movl -0x100(%rbp), %eax
subl $0x40, %eax
movl %eax, -0x100(%rbp)
movl -0xf8(%rbp), %eax
addl -0xec(%rbp), %eax
movl %eax, -0x104(%rbp)
cmpl $0x0, -0x104(%rbp)
jl 0x207f6
movq -0x1b0(%rbp), %rcx
movl -0x104(%rbp), %eax
cmpl 0x38(%rcx), %eax
jl 0x207fb
jmp 0x2068b
movl -0xfc(%rbp), %eax
addl -0xf0(%rbp), %eax
movl %eax, -0x108(%rbp)
cmpl $0x0, -0x108(%rbp)
jl 0x20828
movq -0x1b0(%rbp), %rcx
movl -0x108(%rbp), %eax
cmpl 0x3c(%rcx), %eax
jl 0x2082d
jmp 0x2068b
movl -0x100(%rbp), %eax
addl -0xf4(%rbp), %eax
movl %eax, -0x10c(%rbp)
cmpl $0x0, -0x10c(%rbp)
jl 0x2085a
movq -0x1b0(%rbp), %rcx
movl -0x10c(%rbp), %eax
cmpl 0x40(%rcx), %eax
jl 0x2085f
jmp 0x2068b
movq -0x1b0(%rbp), %rdi
movq 0x88(%rdi), %rax
movslq -0x104(%rbp), %rcx
shlq $0x2, %rcx
addq %rcx, %rax
movl 0x38(%rdi), %ecx
movl -0x108(%rbp), %edx
movl 0x3c(%rdi), %esi
imull -0x10c(%rbp), %esi
addl %esi, %edx
imull %edx, %ecx
movslq %ecx, %rcx
shlq $0x2, %rcx
addq %rcx, %rax
movq %rax, -0x170(%rbp)
movl 0x70(%rdi), %ecx
movq -0x170(%rbp), %rax
movl %ecx, (%rax)
movl -0xf8(%rbp), %esi
movl -0xfc(%rbp), %edx
movl -0x100(%rbp), %ecx
movsd -0x128(%rbp), %xmm0
movsd -0x130(%rbp), %xmm1
movsd -0x138(%rbp), %xmm2
movsd -0x140(%rbp), %xmm3
movsd -0x148(%rbp), %xmm4
movsd -0x150(%rbp), %xmm5
movsd -0x180(%rbp), %xmm6
leaq -0x178(%rbp), %r8
callq 0x22030
testb $0x1, %al
jne 0x2090c
jmp 0x20911
jmp 0x2068b
movq -0x1b0(%rbp), %rax
movq (%rax), %rdi
movl -0x4c(%rbp), %esi
movl -0x50(%rbp), %edx
movl 0x10(%rbp), %ecx
movl -0x104(%rbp), %r8d
movl -0x108(%rbp), %r9d
movl -0x10c(%rbp), %r14d
leaq -0x88(%rbp), %rbx
leaq -0x90(%rbp), %r11
leaq -0x98(%rbp), %r10
leaq -0x11c(%rbp), %rax
movl %r14d, (%rsp)
movq %rbx, 0x8(%rsp)
movq %r11, 0x10(%rsp)
movq %r10, 0x18(%rsp)
movq %rax, 0x20(%rsp)
callq 0x23640
movl %eax, %ecx
movq -0x1b0(%rbp), %rax
movl %ecx, -0x44(%rbp)
movq 0x60(%rax), %rax
movslq -0x44(%rbp), %rcx
cmpl $0x0, (%rax,%rcx,4)
jle 0x20cba
movq -0x1b0(%rbp), %rax
movl $0x0, -0x118(%rbp)
movsd -0x58(%rbp), %xmm0
subsd -0x88(%rbp), %xmm0
movsd %xmm0, -0xd0(%rbp)
movsd -0x60(%rbp), %xmm0
subsd -0x90(%rbp), %xmm0
movsd %xmm0, -0xd8(%rbp)
movsd -0x68(%rbp), %xmm0
subsd -0x98(%rbp), %xmm0
movsd %xmm0, -0xe0(%rbp)
movq (%rax), %rdi
movsd -0x178(%rbp), %xmm0
movsd -0x180(%rbp), %xmm1
callq 0x22000
testb $0x1, %al
jne 0x20b53
jmp 0x20a02
movq -0x1b0(%rbp), %rax
movq 0x58(%rax), %rcx
movslq -0x44(%rbp), %rdx
movq (%rcx,%rdx,8), %rcx
movl 0x4c(%rax), %edx
imull -0x118(%rbp), %edx
movslq %edx, %rdx
movsd (%rcx,%rdx,8), %xmm0
subsd -0xd0(%rbp), %xmm0
movsd %xmm0, -0x70(%rbp)
movq 0x58(%rax), %rcx
movslq -0x44(%rbp), %rdx
movq (%rcx,%rdx,8), %rcx
movl 0x4c(%rax), %edx
imull -0x118(%rbp), %edx
addl $0x1, %edx
movslq %edx, %rdx
movsd (%rcx,%rdx,8), %xmm0
subsd -0xd8(%rbp), %xmm0
movsd %xmm0, -0x78(%rbp)
movq 0x58(%rax), %rcx
movslq -0x44(%rbp), %rdx
movq (%rcx,%rdx,8), %rcx
movl 0x4c(%rax), %edx
imull -0x118(%rbp), %edx
addl $0x2, %edx
movslq %edx, %rdx
movsd (%rcx,%rdx,8), %xmm0
subsd -0xe0(%rbp), %xmm0
movsd %xmm0, -0x80(%rbp)
movq (%rax), %rdi
movsd -0x70(%rbp), %xmm1
movsd -0x70(%rbp), %xmm2
movsd -0x78(%rbp), %xmm0
mulsd -0x78(%rbp), %xmm0
mulsd %xmm2, %xmm1
addsd %xmm0, %xmm1
movsd -0x80(%rbp), %xmm0
movsd -0x80(%rbp), %xmm2
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movl -0x44(%rbp), %esi
movl -0x118(%rbp), %edx
callq 0x21ea0
movq -0x1b0(%rbp), %rax
movsd %xmm0, -0xe8(%rbp)
movq -0x40(%rbp), %rdi
movsd -0x70(%rbp), %xmm0
movsd -0x78(%rbp), %xmm1
movsd -0x80(%rbp), %xmm2
movsd -0xe8(%rbp), %xmm3
movq 0x50(%rax), %rax
movslq -0x44(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movslq -0x118(%rbp), %rcx
movl (%rax,%rcx,4), %esi
callq 0x21ec0
testb $0x1, %al
jne 0x20b21
movb $0x0, -0x29(%rbp)
jmp 0x21b88
movl -0x118(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x118(%rbp)
movq -0x1b0(%rbp), %rcx
movl -0x118(%rbp), %eax
movq 0x60(%rcx), %rcx
movslq -0x44(%rbp), %rdx
cmpl (%rcx,%rdx,4), %eax
jl 0x20a02
jmp 0x20cb8
jmp 0x20b55
movq -0x1b0(%rbp), %rax
movq 0x58(%rax), %rcx
movslq -0x44(%rbp), %rdx
movq (%rcx,%rdx,8), %rcx
movl 0x4c(%rax), %edx
imull -0x118(%rbp), %edx
movslq %edx, %rdx
movsd (%rcx,%rdx,8), %xmm0
subsd -0xd0(%rbp), %xmm0
movsd %xmm0, -0x70(%rbp)
movq 0x58(%rax), %rcx
movslq -0x44(%rbp), %rdx
movq (%rcx,%rdx,8), %rcx
movl 0x4c(%rax), %edx
imull -0x118(%rbp), %edx
addl $0x1, %edx
movslq %edx, %rdx
movsd (%rcx,%rdx,8), %xmm0
subsd -0xd8(%rbp), %xmm0
movsd %xmm0, -0x78(%rbp)
movq 0x58(%rax), %rcx
movslq -0x44(%rbp), %rdx
movq (%rcx,%rdx,8), %rcx
movl 0x4c(%rax), %edx
imull -0x118(%rbp), %edx
addl $0x2, %edx
movslq %edx, %rdx
movsd (%rcx,%rdx,8), %xmm0
subsd -0xe0(%rbp), %xmm0
movsd %xmm0, -0x80(%rbp)
movsd -0x70(%rbp), %xmm1
movsd -0x70(%rbp), %xmm2
movsd -0x78(%rbp), %xmm0
mulsd -0x78(%rbp), %xmm0
mulsd %xmm2, %xmm1
addsd %xmm0, %xmm1
movsd -0x80(%rbp), %xmm0
movsd -0x80(%rbp), %xmm2
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0xe8(%rbp)
movq (%rax), %rdi
movsd -0x180(%rbp), %xmm0
movl -0x44(%rbp), %edx
movl -0x118(%rbp), %ecx
leaq -0xe8(%rbp), %rsi
callq 0x23880
testb $0x1, %al
jne 0x20c3f
jmp 0x20c89
movq -0x1b0(%rbp), %rax
movq -0x40(%rbp), %rdi
movsd -0x70(%rbp), %xmm0
movsd -0x78(%rbp), %xmm1
movsd -0x80(%rbp), %xmm2
movsd -0xe8(%rbp), %xmm3
movq 0x50(%rax), %rax
movslq -0x44(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movslq -0x118(%rbp), %rcx
movl (%rax,%rcx,4), %esi
callq 0x21ec0
testb $0x1, %al
jne 0x20c89
movb $0x0, -0x29(%rbp)
jmp 0x21b88
movl -0x118(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x118(%rbp)
movq -0x1b0(%rbp), %rcx
movl -0x118(%rbp), %eax
movq 0x60(%rcx), %rcx
movslq -0x44(%rbp), %rdx
cmpl (%rcx,%rdx,4), %eax
jl 0x20b55
jmp 0x20cb8
jmp 0x20cba
movq -0x1b0(%rbp), %rcx
movq -0x1a8(%rbp), %rax
movq 0x98(%rcx), %rcx
addq $-0x48, %rcx
cmpq %rcx, %rax
jbe 0x20cf2
movq -0x1b0(%rbp), %rdi
leaq -0x1a0(%rbp), %rsi
leaq -0x1a8(%rbp), %rdx
callq 0x238b0
movq -0x1b0(%rbp), %rdi
movl -0x15c(%rbp), %esi
movq -0x170(%rbp), %rdx
movl -0x104(%rbp), %ecx
movl -0x108(%rbp), %r8d
movl -0x10c(%rbp), %r9d
leaq -0x1a8(%rbp), %rax
movq %rax, (%rsp)
callq 0x23a60
jmp 0x2068b
movq -0x1b0(%rbp), %rax
movq (%rax), %rdi
movq -0x158(%rbp), %rax
movslq -0x114(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
movsd -0x180(%rbp), %xmm1
callq 0x22000
testb $0x1, %al
jne 0x20d5f
jmp 0x20d68
movb $0x1, -0x29(%rbp)
jmp 0x21b88
jmp 0x20d6a
movq -0x1a0(%rbp), %rax
cmpq -0x1a8(%rbp), %rax
je 0x21b84
movq -0x1b0(%rbp), %rcx
movq -0x1a0(%rbp), %rax
cmpq 0x98(%rcx), %rax
jne 0x20daa
movq -0x1b0(%rbp), %rax
movq 0x90(%rax), %rax
movq %rax, -0x1a0(%rbp)
movq -0x1b0(%rbp), %rax
movq -0x1a0(%rbp), %rcx
movq %rcx, %rdx
addq $0x4, %rdx
movq %rdx, -0x1a0(%rbp)
movl (%rcx), %ecx
movl %ecx, -0x104(%rbp)
movq -0x1a0(%rbp), %rcx
movq %rcx, %rdx
addq $0x4, %rdx
movq %rdx, -0x1a0(%rbp)
movl (%rcx), %ecx
movl %ecx, -0x108(%rbp)
movq -0x1a0(%rbp), %rcx
movq %rcx, %rdx
addq $0x4, %rdx
movq %rdx, -0x1a0(%rbp)
movl (%rcx), %ecx
movl %ecx, -0x10c(%rbp)
movl -0x104(%rbp), %ecx
subl -0xec(%rbp), %ecx
cvtsi2sd %ecx, %xmm0
movsd 0x8(%rax), %xmm2
movsd -0x128(%rbp), %xmm1
movq %xmm1, %rcx
movabsq $-0x8000000000000000, %rdx # imm = 0x8000000000000000
xorq %rdx, %rcx
movq %rcx, %xmm1
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0xa0(%rbp)
movsd -0xa0(%rbp), %xmm0
addsd 0x8(%rax), %xmm0
movsd %xmm0, -0xb8(%rbp)
movl -0x108(%rbp), %ecx
subl -0xf0(%rbp), %ecx
cvtsi2sd %ecx, %xmm0
movsd 0x10(%rax), %xmm2
movsd -0x130(%rbp), %xmm1
movq %xmm1, %rcx
movabsq $-0x8000000000000000, %rdx # imm = 0x8000000000000000
xorq %rdx, %rcx
movq %rcx, %xmm1
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0xa8(%rbp)
movsd -0xa8(%rbp), %xmm0
addsd 0x10(%rax), %xmm0
movsd %xmm0, -0xc0(%rbp)
movl -0x10c(%rbp), %ecx
subl -0xf4(%rbp), %ecx
cvtsi2sd %ecx, %xmm0
movsd 0x18(%rax), %xmm2
movsd -0x138(%rbp), %xmm1
movq %xmm1, %rcx
movabsq $-0x8000000000000000, %rdx # imm = 0x8000000000000000
xorq %rdx, %rcx
movq %rcx, %xmm1
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0xb0(%rbp)
movsd -0xb0(%rbp), %xmm0
addsd 0x18(%rax), %xmm0
movsd %xmm0, -0xc8(%rbp)
movl -0x104(%rbp), %eax
cmpl -0xec(%rbp), %eax
jle 0x2126c
movl -0x108(%rbp), %eax
cmpl -0xf0(%rbp), %eax
jle 0x21044
movl -0x10c(%rbp), %eax
cmpl -0xf4(%rbp), %eax
jle 0x20f95
movq -0x1b0(%rbp), %rdi
movq -0x40(%rbp), %rsi
movsd -0xa0(%rbp), %xmm0
movsd -0xa8(%rbp), %xmm1
movsd -0xb0(%rbp), %xmm2
movsd -0xb8(%rbp), %xmm3
movsd -0xc0(%rbp), %xmm4
movsd -0xc8(%rbp), %xmm5
callq 0x23ed0
testb $0x1, %al
jne 0x20f8b
jmp 0x20f90
jmp 0x20d6a
jmp 0x2103f
movl -0x10c(%rbp), %eax
cmpl -0xf4(%rbp), %eax
jge 0x20ff0
movq -0x1b0(%rbp), %rdi
movq -0x40(%rbp), %rsi
movsd -0xa0(%rbp), %xmm0
movsd -0xa8(%rbp), %xmm1
movsd -0xc8(%rbp), %xmm2
movsd -0xb8(%rbp), %xmm3
movsd -0xc0(%rbp), %xmm4
movsd -0xb0(%rbp), %xmm5
callq 0x23ed0
testb $0x1, %al
jne 0x20fe9
jmp 0x20fee
jmp 0x20d6a
jmp 0x2103d
movq -0x1b0(%rbp), %rdi
movq -0x40(%rbp), %rsi
movsd -0xa0(%rbp), %xmm0
movsd -0xa8(%rbp), %xmm1
movsd -0xb0(%rbp), %xmm2
movsd -0xb8(%rbp), %xmm3
movsd -0xc0(%rbp), %xmm4
movsd -0xc8(%rbp), %xmm5
callq 0x24300
testb $0x1, %al
jne 0x21036
jmp 0x2103b
jmp 0x20d6a
jmp 0x2103d
jmp 0x2103f
jmp 0x21267
movl -0x108(%rbp), %eax
cmpl -0xf0(%rbp), %eax
jge 0x21163
movl -0x10c(%rbp), %eax
cmpl -0xf4(%rbp), %eax
jle 0x210b4
movq -0x1b0(%rbp), %rdi
movq -0x40(%rbp), %rsi
movsd -0xa0(%rbp), %xmm0
movsd -0xc0(%rbp), %xmm1
movsd -0xb0(%rbp), %xmm2
movsd -0xb8(%rbp), %xmm3
movsd -0xa8(%rbp), %xmm4
movsd -0xc8(%rbp), %xmm5
callq 0x23ed0
testb $0x1, %al
jne 0x210aa
jmp 0x210af
jmp 0x20d6a
jmp 0x2115e
movl -0x10c(%rbp), %eax
cmpl -0xf4(%rbp), %eax
jge 0x2110f
movq -0x1b0(%rbp), %rdi
movq -0x40(%rbp), %rsi
movsd -0xa0(%rbp), %xmm0
movsd -0xc0(%rbp), %xmm1
movsd -0xc8(%rbp), %xmm2
movsd -0xb8(%rbp), %xmm3
movsd -0xa8(%rbp), %xmm4
movsd -0xb0(%rbp), %xmm5
callq 0x23ed0
testb $0x1, %al
jne 0x21108
jmp 0x2110d
jmp 0x20d6a
jmp 0x2115c
movq -0x1b0(%rbp), %rdi
movq -0x40(%rbp), %rsi
movsd -0xa0(%rbp), %xmm0
movsd -0xc0(%rbp), %xmm1
movsd -0xb0(%rbp), %xmm2
movsd -0xb8(%rbp), %xmm3
movsd -0xa8(%rbp), %xmm4
movsd -0xc8(%rbp), %xmm5
callq 0x24300
testb $0x1, %al
jne 0x21155
jmp 0x2115a
jmp 0x20d6a
jmp 0x2115c
jmp 0x2115e
jmp 0x21265
movl -0x10c(%rbp), %eax
cmpl -0xf4(%rbp), %eax
jle 0x211c1
movq -0x1b0(%rbp), %rdi
movq -0x40(%rbp), %rsi
movsd -0xa0(%rbp), %xmm0
movsd -0xa8(%rbp), %xmm1
movsd -0xb0(%rbp), %xmm2
movsd -0xb8(%rbp), %xmm3
movsd -0xc0(%rbp), %xmm4
movsd -0xc8(%rbp), %xmm5
callq 0x246b0
testb $0x1, %al
jne 0x211b7
jmp 0x211bc
jmp 0x20d6a
jmp 0x21263
movl -0x10c(%rbp), %eax
cmpl -0xf4(%rbp), %eax
jge 0x2121c
movq -0x1b0(%rbp), %rdi
movq -0x40(%rbp), %rsi
movsd -0xa0(%rbp), %xmm0
movsd -0xa8(%rbp), %xmm1
movsd -0xc8(%rbp), %xmm2
movsd -0xb8(%rbp), %xmm3
movsd -0xc0(%rbp), %xmm4
movsd -0xb0(%rbp), %xmm5
callq 0x246b0
testb $0x1, %al
jne 0x21215
jmp 0x2121a
jmp 0x20d6a
jmp 0x21261
movq -0x1b0(%rbp), %rdi
movq -0x40(%rbp), %rsi
movsd -0xa0(%rbp), %xmm0
movsd -0xa8(%rbp), %xmm1
movsd -0xb0(%rbp), %xmm2
movsd -0xc0(%rbp), %xmm3
movsd -0xc8(%rbp), %xmm4
callq 0x24a60
testb $0x1, %al
jne 0x2125a
jmp 0x2125f
jmp 0x20d6a
jmp 0x21261
jmp 0x21263
jmp 0x21265
jmp 0x21267
jmp 0x218b4
movl -0x104(%rbp), %eax
cmpl -0xec(%rbp), %eax
jge 0x215c5
movl -0x108(%rbp), %eax
cmpl -0xf0(%rbp), %eax
jle 0x2139d
movl -0x10c(%rbp), %eax
cmpl -0xf4(%rbp), %eax
jle 0x212ee
movq -0x1b0(%rbp), %rdi
movq -0x40(%rbp), %rsi
movsd -0xb8(%rbp), %xmm0
movsd -0xa8(%rbp), %xmm1
movsd -0xb0(%rbp), %xmm2
movsd -0xa0(%rbp), %xmm3
movsd -0xc0(%rbp), %xmm4
movsd -0xc8(%rbp), %xmm5
callq 0x23ed0
testb $0x1, %al
jne 0x212e4
jmp 0x212e9
jmp 0x20d6a
jmp 0x21398
movl -0x10c(%rbp), %eax
cmpl -0xf4(%rbp), %eax
jge 0x21349
movq -0x1b0(%rbp), %rdi
movq -0x40(%rbp), %rsi
movsd -0xb8(%rbp), %xmm0
movsd -0xa8(%rbp), %xmm1
movsd -0xc8(%rbp), %xmm2
movsd -0xa0(%rbp), %xmm3
movsd -0xc0(%rbp), %xmm4
movsd -0xb0(%rbp), %xmm5
callq 0x23ed0
testb $0x1, %al
jne 0x21342
jmp 0x21347
jmp 0x20d6a
jmp 0x21396
movq -0x1b0(%rbp), %rdi
movq -0x40(%rbp), %rsi
movsd -0xb8(%rbp), %xmm0
movsd -0xa8(%rbp), %xmm1
movsd -0xb0(%rbp), %xmm2
movsd -0xa0(%rbp), %xmm3
movsd -0xc0(%rbp), %xmm4
movsd -0xc8(%rbp), %xmm5
callq 0x24300
testb $0x1, %al
jne 0x2138f
jmp 0x21394
jmp 0x20d6a
jmp 0x21396
jmp 0x21398
jmp 0x215c0
movl -0x108(%rbp), %eax
cmpl -0xf0(%rbp), %eax
jge 0x214bc
movl -0x10c(%rbp), %eax
cmpl -0xf4(%rbp), %eax
jle 0x2140d
movq -0x1b0(%rbp), %rdi
movq -0x40(%rbp), %rsi
movsd -0xb8(%rbp), %xmm0
movsd -0xc0(%rbp), %xmm1
movsd -0xb0(%rbp), %xmm2
movsd -0xa0(%rbp), %xmm3
movsd -0xa8(%rbp), %xmm4
movsd -0xc8(%rbp), %xmm5
callq 0x23ed0
testb $0x1, %al
jne 0x21403
jmp 0x21408
jmp 0x20d6a
jmp 0x214b7
movl -0x10c(%rbp), %eax
cmpl -0xf4(%rbp), %eax
jge 0x21468
movq -0x1b0(%rbp), %rdi
movq -0x40(%rbp), %rsi
movsd -0xb8(%rbp), %xmm0
movsd -0xc0(%rbp), %xmm1
movsd -0xc8(%rbp), %xmm2
movsd -0xa0(%rbp), %xmm3
movsd -0xa8(%rbp), %xmm4
movsd -0xb0(%rbp), %xmm5
callq 0x23ed0
testb $0x1, %al
jne 0x21461
jmp 0x21466
jmp 0x20d6a
jmp 0x214b5
movq -0x1b0(%rbp), %rdi
movq -0x40(%rbp), %rsi
movsd -0xb8(%rbp), %xmm0
movsd -0xc0(%rbp), %xmm1
movsd -0xb0(%rbp), %xmm2
movsd -0xa0(%rbp), %xmm3
movsd -0xa8(%rbp), %xmm4
movsd -0xc8(%rbp), %xmm5
callq 0x24300
testb $0x1, %al
jne 0x214ae
jmp 0x214b3
jmp 0x20d6a
jmp 0x214b5
jmp 0x214b7
jmp 0x215be
movl -0x10c(%rbp), %eax
cmpl -0xf4(%rbp), %eax
jle 0x2151a
movq -0x1b0(%rbp), %rdi
movq -0x40(%rbp), %rsi
movsd -0xb8(%rbp), %xmm0
movsd -0xa8(%rbp), %xmm1
movsd -0xb0(%rbp), %xmm2
movsd -0xa0(%rbp), %xmm3
movsd -0xc0(%rbp), %xmm4
movsd -0xc8(%rbp), %xmm5
callq 0x246b0
testb $0x1, %al
jne 0x21510
jmp 0x21515
jmp 0x20d6a
jmp 0x215bc
movl -0x10c(%rbp), %eax
cmpl -0xf4(%rbp), %eax
jge 0x21575
movq -0x1b0(%rbp), %rdi
movq -0x40(%rbp), %rsi
movsd -0xb8(%rbp), %xmm0
movsd -0xa8(%rbp), %xmm1
movsd -0xc8(%rbp), %xmm2
movsd -0xa0(%rbp), %xmm3
movsd -0xc0(%rbp), %xmm4
movsd -0xb0(%rbp), %xmm5
callq 0x246b0
testb $0x1, %al
jne 0x2156e
jmp 0x21573
jmp 0x20d6a
jmp 0x215ba
movq -0x1b0(%rbp), %rdi
movq -0x40(%rbp), %rsi
movsd -0xb8(%rbp), %xmm0
movsd -0xa8(%rbp), %xmm1
movsd -0xb0(%rbp), %xmm2
movsd -0xc0(%rbp), %xmm3
movsd -0xc8(%rbp), %xmm4
callq 0x24a60
testb $0x1, %al
jne 0x215b3
jmp 0x215b8
jmp 0x20d6a
jmp 0x215ba
jmp 0x215bc
jmp 0x215be
jmp 0x215c0
jmp 0x218b2
movl -0x108(%rbp), %eax
cmpl -0xf0(%rbp), %eax
jle 0x216dc
movl -0x10c(%rbp), %eax
cmpl -0xf4(%rbp), %eax
jle 0x21635
movq -0x1b0(%rbp), %rdi
movq -0x40(%rbp), %rsi
movsd -0xa0(%rbp), %xmm0
movsd -0xa8(%rbp), %xmm1
movsd -0xb0(%rbp), %xmm2
movsd -0xb8(%rbp), %xmm3
movsd -0xc0(%rbp), %xmm4
movsd -0xc8(%rbp), %xmm5
callq 0x24c80
testb $0x1, %al
jne 0x2162b
jmp 0x21630
jmp 0x20d6a
jmp 0x216d7
movl -0x10c(%rbp), %eax
cmpl -0xf4(%rbp), %eax
jge 0x21690
movq -0x1b0(%rbp), %rdi
movq -0x40(%rbp), %rsi
movsd -0xa0(%rbp), %xmm0
movsd -0xa8(%rbp), %xmm1
movsd -0xc8(%rbp), %xmm2
movsd -0xb8(%rbp), %xmm3
movsd -0xc0(%rbp), %xmm4
movsd -0xb0(%rbp), %xmm5
callq 0x24c80
testb $0x1, %al
jne 0x21689
jmp 0x2168e
jmp 0x20d6a
jmp 0x216d5
movq -0x1b0(%rbp), %rdi
movq -0x40(%rbp), %rsi
movsd -0xa0(%rbp), %xmm0
movsd -0xa8(%rbp), %xmm1
movsd -0xb0(%rbp), %xmm2
movsd -0xb8(%rbp), %xmm3
movsd -0xc8(%rbp), %xmm4
callq 0x25030
testb $0x1, %al
jne 0x216ce
jmp 0x216d3
jmp 0x20d6a
jmp 0x216d5
jmp 0x216d7
jmp 0x218b0
movl -0x108(%rbp), %eax
cmpl -0xf0(%rbp), %eax
jge 0x217f3
movl -0x10c(%rbp), %eax
cmpl -0xf4(%rbp), %eax
jle 0x2174c
movq -0x1b0(%rbp), %rdi
movq -0x40(%rbp), %rsi
movsd -0xa0(%rbp), %xmm0
movsd -0xc0(%rbp), %xmm1
movsd -0xb0(%rbp), %xmm2
movsd -0xb8(%rbp), %xmm3
movsd -0xa8(%rbp), %xmm4
movsd -0xc8(%rbp), %xmm5
callq 0x24c80
testb $0x1, %al
jne 0x21742
jmp 0x21747
jmp 0x20d6a
jmp 0x217ee
movl -0x10c(%rbp), %eax
cmpl -0xf4(%rbp), %eax
jge 0x217a7
movq -0x1b0(%rbp), %rdi
movq -0x40(%rbp), %rsi
movsd -0xa0(%rbp), %xmm0
movsd -0xc0(%rbp), %xmm1
movsd -0xc8(%rbp), %xmm2
movsd -0xb8(%rbp), %xmm3
movsd -0xa8(%rbp), %xmm4
movsd -0xb0(%rbp), %xmm5
callq 0x24c80
testb $0x1, %al
jne 0x217a0
jmp 0x217a5
jmp 0x20d6a
jmp 0x217ec
movq -0x1b0(%rbp), %rdi
movq -0x40(%rbp), %rsi
movsd -0xa0(%rbp), %xmm0
movsd -0xc0(%rbp), %xmm1
movsd -0xb0(%rbp), %xmm2
movsd -0xb8(%rbp), %xmm3
movsd -0xc8(%rbp), %xmm4
callq 0x25030
testb $0x1, %al
jne 0x217e5
jmp 0x217ea
jmp 0x20d6a
jmp 0x217ec
jmp 0x217ee
jmp 0x218ae
movl -0x10c(%rbp), %eax
cmpl -0xf4(%rbp), %eax
jle 0x21846
movq -0x1b0(%rbp), %rdi
movq -0x40(%rbp), %rsi
movsd -0xa0(%rbp), %xmm0
movsd -0xa8(%rbp), %xmm1
movsd -0xb0(%rbp), %xmm2
movsd -0xb8(%rbp), %xmm3
movsd -0xc0(%rbp), %xmm4
callq 0x25250
testb $0x1, %al
jne 0x2183f
jmp 0x21844
jmp 0x20d6a
jmp 0x218ac
movl -0x10c(%rbp), %eax
cmpl -0xf4(%rbp), %eax
jge 0x21899
movq -0x1b0(%rbp), %rdi
movq -0x40(%rbp), %rsi
movsd -0xa0(%rbp), %xmm0
movsd -0xa8(%rbp), %xmm1
movsd -0xc8(%rbp), %xmm2
movsd -0xb8(%rbp), %xmm3
movsd -0xc0(%rbp), %xmm4
callq 0x25250
testb $0x1, %al
jne 0x21892
jmp 0x21897
jmp 0x20d6a
jmp 0x218aa
leaq 0x36790(%rip), %rdi     # 0x58030
movl $0x3, %esi
callq 0x1b690
jmp 0x218ac
jmp 0x218ae
jmp 0x218b0
jmp 0x218b2
jmp 0x218b4
movq -0x1b0(%rbp), %rax
movq (%rax), %rdi
movl -0x4c(%rbp), %esi
movl -0x50(%rbp), %edx
movl 0x10(%rbp), %ecx
movl -0x104(%rbp), %r8d
movl -0x108(%rbp), %r9d
movl -0x10c(%rbp), %r14d
leaq -0x88(%rbp), %rbx
leaq -0x90(%rbp), %r11
leaq -0x98(%rbp), %r10
leaq -0x11c(%rbp), %rax
movl %r14d, (%rsp)
movq %rbx, 0x8(%rsp)
movq %r11, 0x10(%rsp)
movq %r10, 0x18(%rsp)
movq %rax, 0x20(%rsp)
callq 0x23640
movl %eax, %ecx
movq -0x1b0(%rbp), %rax
movl %ecx, -0x44(%rbp)
movq 0x60(%rax), %rax
movslq -0x44(%rbp), %rcx
cmpl $0x0, (%rax,%rcx,4)
jle 0x21aca
movl $0x0, -0x118(%rbp)
movsd -0x58(%rbp), %xmm0
subsd -0x88(%rbp), %xmm0
movsd %xmm0, -0xd0(%rbp)
movsd -0x60(%rbp), %xmm0
subsd -0x90(%rbp), %xmm0
movsd %xmm0, -0xd8(%rbp)
movsd -0x68(%rbp), %xmm0
subsd -0x98(%rbp), %xmm0
movsd %xmm0, -0xe0(%rbp)
movq -0x1b0(%rbp), %rax
movq 0x58(%rax), %rcx
movslq -0x44(%rbp), %rdx
movq (%rcx,%rdx,8), %rcx
movl 0x4c(%rax), %edx
imull -0x118(%rbp), %edx
movslq %edx, %rdx
movsd (%rcx,%rdx,8), %xmm0
subsd -0xd0(%rbp), %xmm0
movsd %xmm0, -0x70(%rbp)
movq 0x58(%rax), %rcx
movslq -0x44(%rbp), %rdx
movq (%rcx,%rdx,8), %rcx
movl 0x4c(%rax), %edx
imull -0x118(%rbp), %edx
addl $0x1, %edx
movslq %edx, %rdx
movsd (%rcx,%rdx,8), %xmm0
subsd -0xd8(%rbp), %xmm0
movsd %xmm0, -0x78(%rbp)
movq 0x58(%rax), %rcx
movslq -0x44(%rbp), %rdx
movq (%rcx,%rdx,8), %rcx
movl 0x4c(%rax), %edx
imull -0x118(%rbp), %edx
addl $0x2, %edx
movslq %edx, %rdx
movsd (%rcx,%rdx,8), %xmm0
subsd -0xe0(%rbp), %xmm0
movsd %xmm0, -0x80(%rbp)
movq (%rax), %rdi
movsd -0x70(%rbp), %xmm1
movsd -0x70(%rbp), %xmm2
movsd -0x78(%rbp), %xmm0
mulsd -0x78(%rbp), %xmm0
mulsd %xmm2, %xmm1
addsd %xmm0, %xmm1
movsd -0x80(%rbp), %xmm0
movsd -0x80(%rbp), %xmm2
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movl -0x44(%rbp), %esi
movl -0x118(%rbp), %edx
callq 0x21ea0
movq -0x1b0(%rbp), %rax
movsd %xmm0, -0xe8(%rbp)
movq -0x40(%rbp), %rdi
movsd -0x70(%rbp), %xmm0
movsd -0x78(%rbp), %xmm1
movsd -0x80(%rbp), %xmm2
movsd -0xe8(%rbp), %xmm3
movq 0x50(%rax), %rax
movslq -0x44(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movslq -0x118(%rbp), %rcx
movl (%rax,%rcx,4), %esi
callq 0x21ec0
testb $0x1, %al
jne 0x21a9b
movb $0x0, -0x29(%rbp)
jmp 0x21b88
movl -0x118(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x118(%rbp)
movq -0x1b0(%rbp), %rcx
movl -0x118(%rbp), %eax
movq 0x60(%rcx), %rcx
movslq -0x44(%rbp), %rdx
cmpl (%rcx,%rdx,4), %eax
jl 0x2197c
jmp 0x21aca
movq -0x1a0(%rbp), %rax
cmpq -0x1a8(%rbp), %rax
ja 0x21b17
movq -0x1b0(%rbp), %rdx
movq 0x98(%rdx), %rax
movq -0x1a8(%rbp), %rcx
subq %rcx, %rax
sarq $0x2, %rax
movq -0x1a0(%rbp), %rcx
movq 0x90(%rdx), %rdx
subq %rdx, %rcx
sarq $0x2, %rcx
addq %rcx, %rax
movq %rax, -0x1b8(%rbp)
jmp 0x21b33
movq -0x1a0(%rbp), %rax
movq -0x1a8(%rbp), %rcx
subq %rcx, %rax
sarq $0x2, %rax
movq %rax, -0x1b8(%rbp)
movq -0x1b8(%rbp), %rax
cmpq $0x12, %rax
jge 0x21b5a
movq -0x1b0(%rbp), %rdi
leaq -0x1a0(%rbp), %rsi
leaq -0x1a8(%rbp), %rdx
callq 0x238b0
movq -0x1b0(%rbp), %rdi
movl -0x104(%rbp), %esi
movl -0x108(%rbp), %edx
movl -0x10c(%rbp), %ecx
leaq -0x1a8(%rbp), %r8
callq 0x25470
jmp 0x20d6a
movb $0x1, -0x29(%rbp)
movb -0x29(%rbp), %al
andb $0x1, %al
addq $0x1d8, %rsp            # imm = 0x1D8
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
nop