// File: FreeSlave[P]vhlt/hlcsg/qcsg.cpp
// Function: SaveOutside(brush_s const*, int, bface_s*, int)
static void     SaveOutside(const brush_t* const b, const int hull, bface_t* outside, const int mirrorcontents)
{
    bface_t*        f;
    bface_t*        f2;
    bface_t*        next;
    int             i;
    vec3_t          temp;

    for (f = outside; f; f = next)
    {
        next = f->next;

#ifdef HLCSG_EMPTYBRUSH
		int frontcontents, backcontents;
		int texinfo = f->texinfo;
		const char *texname = GetTextureByNumber_CSG (texinfo);
		frontcontents = f->contents;
		if (mirrorcontents == CONTENTS_TOEMPTY)
		{
			backcontents = f->backcontents;
		}
		else
		{
			backcontents = mirrorcontents;
		}
		if (frontcontents == CONTENTS_TOEMPTY)
		{
			frontcontents = CONTENTS_EMPTY;
		}
		if (backcontents == CONTENTS_TOEMPTY)
		{
			backcontents = CONTENTS_EMPTY;
		}

		bool frontnull, backnull;
		frontnull = false;
		backnull = false;
		if (mirrorcontents == CONTENTS_TOEMPTY)
		{
			if (strncasecmp (texname, "SKIP", 4) && strncasecmp (texname, "HINT", 4)
	#ifdef HLCSG_HLBSP_SOLIDHINT
				&& strncasecmp (texname, "SOLIDHINT", 9)
	#endif
				)
				// SKIP and HINT are special textures for hlbsp
			{
				backnull = true;
			}
		}
	#ifdef HLCSG_HLBSP_SOLIDHINT
		if (!strncasecmp (texname, "SOLIDHINT", 9))
		{
			if (frontcontents != backcontents)
			{
				frontnull = backnull = true; // not discardable, so remove "SOLIDHINT" texture name and behave like NULL
			}
		}
	#endif
	#ifdef HLCSG_WATERBACKFACE_FIX
		if (b->entitynum != 0 && !strncasecmp (texname, "!", 1))
		{
			backnull = true; // strip water face on one side
		}
	#endif
#endif

#ifdef HLCSG_EMPTYBRUSH
		f->contents = frontcontents;
		f->texinfo = frontnull? -1: texinfo;
#endif
        if (f->w->getArea() < g_tiny_threshold)
        {
            c_tiny++;
            Verbose("Entity %i, Brush %i: tiny fragment\n", 
#ifdef HLCSG_COUNT_NEW
				b->originalentitynum, b->originalbrushnum
#else
				b->entitynum, b->brushnum
#endif
				);
            continue;
        }

        // count unique faces
        if (!hull)
        {
            for (f2 = b->hulls[hull].faces; f2; f2 = f2->next)
            {
                if (f2->planenum == f->planenum)
                {
                    if (!f2->used)
                    {
                        f2->used = true;
                        c_outfaces++;
                    }
                    break;
                }
            }
        }

#ifdef HLCSG_WARNBADTEXINFO
		// check the texture alignment of this face
		if (!hull)
		{
			int texinfo = f->texinfo;
			const char *texname = GetTextureByNumber_CSG (texinfo);
			texinfo_t *tex = &g_texinfo[texinfo];

			if (texinfo != -1 // nullified textures (NULL, BEVEL, aaatrigger, etc.)
				&& !(tex->flags & TEX_SPECIAL) // sky
				&& strncasecmp (texname, "SKIP", 4) && strncasecmp (texname, "HINT", 4) // HINT and SKIP will be nullified only after hlbsp
	#ifdef HLCSG_HLBSP_SOLIDHINT
				&& strncasecmp (texname, "SOLIDHINT", 9)
	#endif
				)
			{
				// check for "Malformed face (%d) normal"
				vec3_t texnormal;
				CrossProduct (tex->vecs[1], tex->vecs[0], texnormal);
				VectorNormalize (texnormal);
				if (fabs (DotProduct (texnormal, f->plane->normal)) <= NORMAL_EPSILON)
				{
					Warning ("Entity %i, Brush %i: Malformed texture alignment (texture %s): Texture axis perpendicular to face.",
	#ifdef HLCSG_COUNT_NEW
						b->originalentitynum, b->originalbrushnum,
	#else
						b->entitynum, b->brushnum,
	#endif
						texname
						);
				}

				// check for "Bad surface extents"
				bool bad;
				int i;
				int j;
				vec_t val;
				
				bad = false;
				for (i = 0; i < f->w->m_NumPoints; i++)
				{
					for (j = 0; j < 2; j++)
					{
						val = DotProduct (f->w->m_Points[i], tex->vecs[j]) + tex->vecs[j][3];
						if (val < -99999 || val > 999999)
						{
							bad = true;
						}
					}
				}
				if (bad)
				{
					Warning ("Entity %i, Brush %i: Malformed texture alignment (texture %s): Bad surface extents.",
	#ifdef HLCSG_COUNT_NEW
						b->originalentitynum, b->originalbrushnum,
	#else
						b->entitynum, b->brushnum,
	#endif
						texname
						);
				}
			}
		}

#endif
        WriteFace(hull, f
#ifdef ZHLT_DETAILBRUSH
			, 
#ifdef ZHLT_CLIPNODEDETAILLEVEL
			(hull? b->clipnodedetaillevel: b->detaillevel)
#else
			b->detaillevel
#endif
#endif
			);

        //              if (mirrorcontents != CONTENTS_SOLID)
        {
            f->planenum ^= 1;
            f->plane = &g_mapplanes[f->planenum];
#ifdef HLCSG_EMPTYBRUSH
			f->contents = backcontents;
			f->texinfo = backnull? -1: texinfo;
#else
            f->contents = mirrorcontents;
#endif

            // swap point orders
            for (i = 0; i < f->w->m_NumPoints / 2; i++)      // add points backwards
            {
                VectorCopy(f->w->m_Points[i], temp);
                VectorCopy(f->w->m_Points[f->w->m_NumPoints - 1 - i], f->w->m_Points[i]);
                VectorCopy(temp, f->w->m_Points[f->w->m_NumPoints - 1 - i]);
            }
            WriteFace(hull, f
#ifdef ZHLT_DETAILBRUSH
				, 
#ifdef ZHLT_CLIPNODEDETAILLEVEL
				(hull? b->clipnodedetaillevel: b->detaillevel)
#else
				b->detaillevel
#endif
#endif
				);
        }

        FreeFace(f);
    }
}

// Assembly:
subq $0xf8, %rsp
movq %rdi, 0xf0(%rsp)
movl %esi, 0xec(%rsp)
movq %rdx, 0xe0(%rsp)
movl %ecx, 0xdc(%rsp)
movq 0xe0(%rsp), %rax
movq %rax, 0xd0(%rsp)
cmpq $0x0, 0xd0(%rsp)
je 0x257c1
movq 0xd0(%rsp), %rax
movq (%rax), %rax
movq %rax, 0xc0(%rsp)
movq 0xd0(%rsp), %rax
movl 0x20(%rax), %eax
movl %eax, 0x94(%rsp)
movl 0x94(%rsp), %edi
callq 0x28e00
movq %rax, 0x88(%rsp)
movq 0xd0(%rsp), %rax
movl 0x28(%rax), %eax
movl %eax, 0x9c(%rsp)
cmpl $-0x20, 0xdc(%rsp)
jne 0x24dad
movq 0xd0(%rsp), %rax
movl 0x2c(%rax), %eax
movl %eax, 0x98(%rsp)
jmp 0x24dbb
movl 0xdc(%rsp), %eax
movl %eax, 0x98(%rsp)
cmpl $-0x20, 0x9c(%rsp)
jne 0x24dd0
movl $0xffffffff, 0x9c(%rsp) # imm = 0xFFFFFFFF
cmpl $-0x20, 0x98(%rsp)
jne 0x24de5
movl $0xffffffff, 0x98(%rsp) # imm = 0xFFFFFFFF
movb $0x0, 0x87(%rsp)
movb $0x0, 0x86(%rsp)
cmpl $-0x20, 0xdc(%rsp)
jne 0x24e63
movq 0x88(%rsp), %rdi
leaq 0x95c2(%rip), %rsi      # 0x2e3d0
movl $0x4, %edx
callq 0x44e0
cmpl $0x0, %eax
je 0x24e61
movq 0x88(%rsp), %rdi
leaq 0x9668(%rip), %rsi      # 0x2e494
movl $0x4, %edx
callq 0x44e0
cmpl $0x0, %eax
je 0x24e61
movq 0x88(%rsp), %rdi
leaq 0x9645(%rip), %rsi      # 0x2e48f
movl $0x9, %edx
callq 0x44e0
cmpl $0x0, %eax
je 0x24e61
movb $0x1, 0x86(%rsp)
jmp 0x24e63
movq 0x88(%rsp), %rdi
leaq 0x961d(%rip), %rsi      # 0x2e48f
movl $0x9, %edx
callq 0x44e0
cmpl $0x0, %eax
jne 0x24ea3
movl 0x9c(%rsp), %eax
cmpl 0x98(%rsp), %eax
je 0x24ea1
movb $0x1, 0x86(%rsp)
movb $0x1, 0x87(%rsp)
jmp 0x24ea3
movq 0xf0(%rsp), %rax
cmpl $0x0, 0x8(%rax)
je 0x24ed7
movq 0x88(%rsp), %rdi
leaq 0xafa7(%rip), %rsi      # 0x2fe67
movl $0x1, %edx
callq 0x44e0
cmpl $0x0, %eax
jne 0x24ed7
movb $0x1, 0x86(%rsp)
movl 0x9c(%rsp), %ecx
movq 0xd0(%rsp), %rax
movl %ecx, 0x28(%rax)
testb $0x1, 0x87(%rsp)
je 0x24efe
movl $0xffffffff, %eax       # imm = 0xFFFFFFFF
movl %eax, 0x34(%rsp)
jmp 0x24f09
movl 0x94(%rsp), %eax
movl %eax, 0x34(%rsp)
movl 0x34(%rsp), %ecx
movq 0xd0(%rsp), %rax
movl %ecx, 0x20(%rax)
movq 0xd0(%rsp), %rax
movq 0x18(%rax), %rdi
callq 0xe200
movaps %xmm0, %xmm1
movsd 0x61b678c(%rip), %xmm0  # 0x61db6c0
ucomisd %xmm1, %xmm0
jbe 0x24f71
movl 0x61b683c(%rip), %eax   # 0x61db77c
addl $0x1, %eax
movl %eax, 0x61b6833(%rip)   # 0x61db77c
movq 0xf0(%rsp), %rax
movl (%rax), %esi
movq 0xf0(%rsp), %rax
movl 0x4(%rax), %edx
leaq 0xace7(%rip), %rdi      # 0x2fc4c
movb $0x0, %al
callq 0xc000
jmp 0x257ac
cmpl $0x0, 0xec(%rsp)
jne 0x2500d
movq 0xf0(%rsp), %rax
addq $0x60, %rax
movslq 0xec(%rsp), %rcx
imulq $0x38, %rcx, %rcx
addq %rcx, %rax
movq 0x30(%rax), %rax
movq %rax, 0xc8(%rsp)
cmpq $0x0, 0xc8(%rsp)
je 0x2500b
movq 0xc8(%rsp), %rax
movl 0x8(%rax), %eax
movq 0xd0(%rsp), %rcx
cmpl 0x8(%rcx), %eax
jne 0x24ff4
movq 0xc8(%rsp), %rax
testb $0x1, 0x24(%rax)
jne 0x24ff2
movq 0xc8(%rsp), %rax
movb $0x1, 0x24(%rax)
movl 0x61b678f(%rip), %eax   # 0x61db778
addl $0x1, %eax
movl %eax, 0x61b6786(%rip)   # 0x61db778
jmp 0x2500b
jmp 0x24ff6
movq 0xc8(%rsp), %rax
movq (%rax), %rax
movq %rax, 0xc8(%rsp)
jmp 0x24fa6
jmp 0x2500d
cmpl $0x0, 0xec(%rsp)
jne 0x253ea
movq 0xd0(%rsp), %rax
movl 0x20(%rax), %eax
movl %eax, 0x80(%rsp)
movl 0x80(%rsp), %edi
callq 0x28e00
movq %rax, 0x78(%rsp)
movslq 0x80(%rsp), %rcx
leaq 0x117a423(%rip), %rax   # 0x119f470
imulq $0x28, %rcx, %rcx
addq %rcx, %rax
movq %rax, 0x70(%rsp)
cmpl $-0x1, 0x80(%rsp)
je 0x253e8
movq 0x70(%rsp), %rax
movl 0x24(%rax), %eax
andl $0x1, %eax
cmpl $0x0, %eax
jne 0x253e8
movq 0x78(%rsp), %rdi
leaq 0x9349(%rip), %rsi      # 0x2e3d0
movl $0x4, %edx
callq 0x44e0
cmpl $0x0, %eax
je 0x253e8
movq 0x78(%rsp), %rdi
leaq 0x93ee(%rip), %rsi      # 0x2e494
movl $0x4, %edx
callq 0x44e0
cmpl $0x0, %eax
je 0x253e8
movq 0x78(%rsp), %rdi
leaq 0x93ca(%rip), %rsi      # 0x2e48f
movl $0x9, %edx
callq 0x44e0
cmpl $0x0, %eax
je 0x253e8
movq 0x70(%rsp), %rax
movss 0x14(%rax), %xmm0
movq 0x70(%rsp), %rax
movss 0x8(%rax), %xmm2
movq 0x70(%rsp), %rax
movss 0x18(%rax), %xmm1
movq 0x70(%rsp), %rax
mulss 0x4(%rax), %xmm1
movd %xmm1, %eax
xorl $0x80000000, %eax       # imm = 0x80000000
movd %eax, %xmm1
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
cvtss2sd %xmm0, %xmm0
movsd %xmm0, 0x50(%rsp)
movq 0x70(%rsp), %rax
movss 0x18(%rax), %xmm0
movq 0x70(%rsp), %rax
movss (%rax), %xmm2
movq 0x70(%rsp), %rax
movss 0x10(%rax), %xmm1
movq 0x70(%rsp), %rax
mulss 0x8(%rax), %xmm1
movd %xmm1, %eax
xorl $0x80000000, %eax       # imm = 0x80000000
movd %eax, %xmm1
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
cvtss2sd %xmm0, %xmm0
movsd %xmm0, 0x58(%rsp)
movq 0x70(%rsp), %rax
movss 0x10(%rax), %xmm0
movq 0x70(%rsp), %rax
movss 0x4(%rax), %xmm2
movq 0x70(%rsp), %rax
movss 0x14(%rax), %xmm1
movq 0x70(%rsp), %rax
mulss (%rax), %xmm1
movd %xmm1, %eax
xorl $0x80000000, %eax       # imm = 0x80000000
movd %eax, %xmm1
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
cvtss2sd %xmm0, %xmm0
movsd %xmm0, 0x60(%rsp)
leaq 0x50(%rsp), %rdi
callq 0x121b0
movsd 0x50(%rsp), %xmm0
movq 0xd0(%rsp), %rax
movq 0x10(%rax), %rax
movsd (%rax), %xmm2
movsd 0x58(%rsp), %xmm1
movq 0xd0(%rsp), %rax
movq 0x10(%rax), %rax
mulsd 0x8(%rax), %xmm1
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd 0x60(%rsp), %xmm1
movq 0xd0(%rsp), %rax
movq 0x10(%rax), %rax
movsd 0x10(%rax), %xmm2
mulsd %xmm2, %xmm1
addsd %xmm0, %xmm1
movaps 0x82a0(%rip), %xmm0     # 0x2d4b0
pand %xmm0, %xmm1
movsd 0x4e4c(%rip), %xmm0     # 0x2a068
ucomisd %xmm1, %xmm0
jb 0x2524a
movq 0xf0(%rsp), %rax
movl (%rax), %esi
movq 0xf0(%rsp), %rax
movl 0x4(%rax), %edx
movq 0x78(%rsp), %rcx
leaq 0xaa2d(%rip), %rdi      # 0x2fc70
movb $0x0, %al
callq 0xbef0
movb $0x0, 0x4f(%rsp)
movl $0x0, 0x48(%rsp)
movl 0x48(%rsp), %eax
movq 0xd0(%rsp), %rcx
movq 0x18(%rcx), %rcx
cmpl 0x8(%rcx), %eax
jae 0x253b7
movl $0x0, 0x44(%rsp)
cmpl $0x2, 0x44(%rsp)
jge 0x253a5
movq 0xd0(%rsp), %rax
movq 0x18(%rax), %rax
movq 0x10(%rax), %rax
movslq 0x48(%rsp), %rcx
imulq $0x18, %rcx, %rcx
addq %rcx, %rax
movsd (%rax), %xmm1
movq 0x70(%rsp), %rax
movslq 0x44(%rsp), %rcx
shlq $0x4, %rcx
addq %rcx, %rax
movss (%rax), %xmm0
cvtss2sd %xmm0, %xmm2
movq 0xd0(%rsp), %rax
movq 0x18(%rax), %rax
movq 0x10(%rax), %rax
movslq 0x48(%rsp), %rcx
imulq $0x18, %rcx, %rcx
addq %rcx, %rax
movsd 0x8(%rax), %xmm0
movq 0x70(%rsp), %rax
movslq 0x44(%rsp), %rcx
shlq $0x4, %rcx
addq %rcx, %rax
movss 0x4(%rax), %xmm3
cvtss2sd %xmm3, %xmm3
mulsd %xmm3, %xmm0
mulsd %xmm2, %xmm1
addsd %xmm0, %xmm1
movq 0xd0(%rsp), %rax
movq 0x18(%rax), %rax
movq 0x10(%rax), %rax
movslq 0x48(%rsp), %rcx
imulq $0x18, %rcx, %rcx
addq %rcx, %rax
movsd 0x10(%rax), %xmm0
movq 0x70(%rsp), %rax
movslq 0x44(%rsp), %rcx
shlq $0x4, %rcx
addq %rcx, %rax
movss 0x8(%rax), %xmm2
cvtss2sd %xmm2, %xmm2
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movq 0x70(%rsp), %rax
movslq 0x44(%rsp), %rcx
shlq $0x4, %rcx
addq %rcx, %rax
movss 0xc(%rax), %xmm1
cvtss2sd %xmm1, %xmm1
addsd %xmm1, %xmm0
movsd %xmm0, 0x38(%rsp)
movsd 0x9426(%rip), %xmm0     # 0x2e798
ucomisd 0x38(%rsp), %xmm0
ja 0x2538e
movsd 0x38(%rsp), %xmm0
movsd 0x9418(%rip), %xmm1     # 0x2e7a0
ucomisd %xmm1, %xmm0
jbe 0x25393
movb $0x1, 0x4f(%rsp)
jmp 0x25395
movl 0x44(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x44(%rsp)
jmp 0x25278
jmp 0x253a7
movl 0x48(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x48(%rsp)
jmp 0x25257
testb $0x1, 0x4f(%rsp)
je 0x253e6
movq 0xf0(%rsp), %rax
movl (%rax), %esi
movq 0xf0(%rsp), %rax
movl 0x4(%rax), %edx
movq 0x78(%rsp), %rcx
leaq 0xa8f4(%rip), %rdi      # 0x2fcd3
movb $0x0, %al
callq 0xbef0
jmp 0x253e8
jmp 0x253ea
movl 0xec(%rsp), %eax
movl %eax, 0x24(%rsp)
movq 0xd0(%rsp), %rax
movq %rax, 0x28(%rsp)
cmpl $0x0, 0xec(%rsp)
je 0x2541d
movq 0xf0(%rsp), %rax
movl 0x30(%rax), %eax
movl %eax, 0x20(%rsp)
jmp 0x2542c
movq 0xf0(%rsp), %rax
movl 0x24(%rax), %eax
movl %eax, 0x20(%rsp)
movq 0x28(%rsp), %rsi
movl 0x24(%rsp), %edi
movl 0x20(%rsp), %edx
callq 0x1fe70
movq 0xd0(%rsp), %rax
movl 0x8(%rax), %ecx
xorl $0x1, %ecx
movl %ecx, 0x8(%rax)
movq 0xd0(%rsp), %rax
movslq 0x8(%rax), %rax
leaq 0x20b553e(%rip), %rcx   # 0x20da9a0
shlq $0x6, %rax
addq %rax, %rcx
movq 0xd0(%rsp), %rax
movq %rcx, 0x10(%rax)
movl 0x98(%rsp), %ecx
movq 0xd0(%rsp), %rax
movl %ecx, 0x28(%rax)
testb $0x1, 0x86(%rsp)
je 0x2549c
movl $0xffffffff, %eax       # imm = 0xFFFFFFFF
movl %eax, 0x1c(%rsp)
jmp 0x254a7
movl 0x94(%rsp), %eax
movl %eax, 0x1c(%rsp)
movl 0x1c(%rsp), %ecx
movq 0xd0(%rsp), %rax
movl %ecx, 0x20(%rax)
movl $0x0, 0xbc(%rsp)
movl 0xbc(%rsp), %eax
movq 0xd0(%rsp), %rcx
movq 0x18(%rcx), %rcx
movl 0x8(%rcx), %ecx
shrl %ecx
cmpl %ecx, %eax
jae 0x2574b
movq 0xd0(%rsp), %rax
movq 0x18(%rax), %rax
movq 0x10(%rax), %rax
movslq 0xbc(%rsp), %rcx
imulq $0x18, %rcx, %rcx
addq %rcx, %rax
movsd (%rax), %xmm0
movsd %xmm0, 0xa0(%rsp)
movq 0xd0(%rsp), %rax
movq 0x18(%rax), %rax
movq 0x10(%rax), %rax
movslq 0xbc(%rsp), %rcx
imulq $0x18, %rcx, %rcx
addq %rcx, %rax
movsd 0x8(%rax), %xmm0
movsd %xmm0, 0xa8(%rsp)
movq 0xd0(%rsp), %rax
movq 0x18(%rax), %rax
movq 0x10(%rax), %rax
movslq 0xbc(%rsp), %rcx
imulq $0x18, %rcx, %rcx
addq %rcx, %rax
movsd 0x10(%rax), %xmm0
movsd %xmm0, 0xb0(%rsp)
movq 0xd0(%rsp), %rax
movq 0x18(%rax), %rax
movq 0x10(%rax), %rax
movq 0xd0(%rsp), %rcx
movq 0x18(%rcx), %rcx
movl 0x8(%rcx), %ecx
subl $0x1, %ecx
subl 0xbc(%rsp), %ecx
movl %ecx, %ecx
imulq $0x18, %rcx, %rcx
addq %rcx, %rax
movsd (%rax), %xmm0
movq 0xd0(%rsp), %rax
movq 0x18(%rax), %rax
movq 0x10(%rax), %rax
movslq 0xbc(%rsp), %rcx
imulq $0x18, %rcx, %rcx
addq %rcx, %rax
movsd %xmm0, (%rax)
movq 0xd0(%rsp), %rax
movq 0x18(%rax), %rax
movq 0x10(%rax), %rax
movq 0xd0(%rsp), %rcx
movq 0x18(%rcx), %rcx
movl 0x8(%rcx), %ecx
subl $0x1, %ecx
subl 0xbc(%rsp), %ecx
movl %ecx, %ecx
imulq $0x18, %rcx, %rcx
addq %rcx, %rax
movsd 0x8(%rax), %xmm0
movq 0xd0(%rsp), %rax
movq 0x18(%rax), %rax
movq 0x10(%rax), %rax
movslq 0xbc(%rsp), %rcx
imulq $0x18, %rcx, %rcx
addq %rcx, %rax
movsd %xmm0, 0x8(%rax)
movq 0xd0(%rsp), %rax
movq 0x18(%rax), %rax
movq 0x10(%rax), %rax
movq 0xd0(%rsp), %rcx
movq 0x18(%rcx), %rcx
movl 0x8(%rcx), %ecx
subl $0x1, %ecx
subl 0xbc(%rsp), %ecx
movl %ecx, %ecx
imulq $0x18, %rcx, %rcx
addq %rcx, %rax
movsd 0x10(%rax), %xmm0
movq 0xd0(%rsp), %rax
movq 0x18(%rax), %rax
movq 0x10(%rax), %rax
movslq 0xbc(%rsp), %rcx
imulq $0x18, %rcx, %rcx
addq %rcx, %rax
movsd %xmm0, 0x10(%rax)
movsd 0xa0(%rsp), %xmm0
movq 0xd0(%rsp), %rax
movq 0x18(%rax), %rax
movq 0x10(%rax), %rax
movq 0xd0(%rsp), %rcx
movq 0x18(%rcx), %rcx
movl 0x8(%rcx), %ecx
subl $0x1, %ecx
subl 0xbc(%rsp), %ecx
movl %ecx, %ecx
imulq $0x18, %rcx, %rcx
addq %rcx, %rax
movsd %xmm0, (%rax)
movsd 0xa8(%rsp), %xmm0
movq 0xd0(%rsp), %rax
movq 0x18(%rax), %rax
movq 0x10(%rax), %rax
movq 0xd0(%rsp), %rcx
movq 0x18(%rcx), %rcx
movl 0x8(%rcx), %ecx
subl $0x1, %ecx
subl 0xbc(%rsp), %ecx
movl %ecx, %ecx
imulq $0x18, %rcx, %rcx
addq %rcx, %rax
movsd %xmm0, 0x8(%rax)
movsd 0xb0(%rsp), %xmm0
movq 0xd0(%rsp), %rax
movq 0x18(%rax), %rax
movq 0x10(%rax), %rax
movq 0xd0(%rsp), %rcx
movq 0x18(%rcx), %rcx
movl 0x8(%rcx), %ecx
subl $0x1, %ecx
subl 0xbc(%rsp), %ecx
movl %ecx, %ecx
imulq $0x18, %rcx, %rcx
addq %rcx, %rax
movsd %xmm0, 0x10(%rax)
movl 0xbc(%rsp), %eax
addl $0x1, %eax
movl %eax, 0xbc(%rsp)
jmp 0x254c1
movl 0xec(%rsp), %eax
movl %eax, 0xc(%rsp)
movq 0xd0(%rsp), %rax
movq %rax, 0x10(%rsp)
cmpl $0x0, 0xec(%rsp)
je 0x2577e
movq 0xf0(%rsp), %rax
movl 0x30(%rax), %eax
movl %eax, 0x8(%rsp)
jmp 0x2578d
movq 0xf0(%rsp), %rax
movl 0x24(%rax), %eax
movl %eax, 0x8(%rsp)
movq 0x10(%rsp), %rsi
movl 0xc(%rsp), %edi
movl 0x8(%rsp), %edx
callq 0x1fe70
movq 0xd0(%rsp), %rdi
callq 0x1fe30
movq 0xc0(%rsp), %rax
movq %rax, 0xd0(%rsp)
jmp 0x24d35
addq $0xf8, %rsp
retq
nopl (%rax)