// File: /workspace/github_c_makefile_star2_O0/cbouilla[P]AES-attacks-finder/Solver.c
// Function: UnionSolver_tmp
Solver UnionSolver_tmp(Solver B1, Solver B2, int *X, const int n, const int sortie) // Réalise l'union de deux solvers. (Appelée par UnionSolver)
{	
	#if 0 // traité dans UnionSolver
	/* Cas où une solver est contenue dans l'autre */
	if (n==B1->Nvar)
	{
		free(X);
		if (PlusInteressant(B2,B1)) return copySolver(B2);
		else return copySolver(B1);
	}
	if (n==B2->Nvar)
	{
		free(X);
		return copySolver(B2);
	}
	#endif
	
	Solver __restrict B = NewSolver();
	B->var=X;
	B->Nvar=n;
	B->sortie=sortie;
	
	/* Cas où les deux solvers sont indépendantes (E(X1 u X2) = E(X1) + E(X2)) */
	if (B->sortie==B1->sortie + B2->sortie)
	{
		const int t1=max(max(B1->sortie,0) + B2->temps, B1->temps);
		const int t2=max(max(B2->sortie,0) + B1->temps, B2->temps);
		if (min(t1,t2)<=max(sortie,max(B1->temps,B2->temps)))
		{
			B->type=2;
			if (t1<t2 || (t1==t2 && OrdreListe(B2->var,B2->Nvar,B1->var,B1->Nvar)))
			{
				B->temps=t1;
				B->fils2=copySolver(B1);
				B->fils1=copySolver(B2);
			}
			else
			{
				B->temps=t2;
				B->fils2=copySolver(B2);
				B->fils1=copySolver(B1);
			}
			B->memoire=max(B1->memoire,B2->memoire);
			Solver tmp=SimplifierTypeSolver(B);
			freeSolver(B);
			return tmp;
		}
	}
	/* Cas où les deux solvers sont de type A -> B et A -> C */
	/*if (B1->type==2 && B2->type==2 && SameSolvers(B1->fils2,B2->fils2))
	{
		if (B1->fils2->temps<B2->fils2->temps || (B1->fils2->temps==B2->fils2->temps && B1->fils2->memoire<B2->fils2->memoire)) B->fils2=copySolver(B1->fils2);
		else B->fils2=copySolver(B2->fils2);
		int n_tmp;
		int *X_tmp=UnionListesTriees(B1->fils1->var,B1->fils1->Nvar,B2->fils1->var,B2->fils1->Nvar,&n_tmp);
		B->fils1=UnionSolver_tmp(B1->fils1,B2->fils1,X_tmp,n,B->sortie-B->fils2->sortie);
		B->temps=max(B->fils1->temps+max(B->fils2->sortie,0),B->fils2->temps);
		B->memoire=max(B->fils1->memoire,B->fils2->memoire);
		B->type=2;		
		Solver tmp=SimplifierTypeSolver(B);
		freeSolver(B);
		return tmp;
	}	
	else*/
	{
		/* Cas où l'on utilise de la mémoire */
		B->temps=max(B1->temps,max(B2->temps,B->sortie));
		if (max(B1->sortie,0)>max(B2->sortie,0) || (max(B1->sortie,0)==max(B2->sortie,0)  && (B1->Nvar>B2->Nvar || (B1->Nvar==B2->Nvar && B1->memoire<=B2->memoire))))
		{
			B->memoire=max(B2->sortie,max(B1->memoire,B2->memoire));
			B->fils1=copySolver(B1);
			B->fils2=copySolver(B2);
		}
		else
		{
			B->memoire=max(B1->sortie,max(B1->memoire,B2->memoire));
			B->fils1=copySolver(B2);
			B->fils2=copySolver(B1);
		}
		B->type=1;
		return B;
	}
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xc0, %rsp
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq %rdx, -0x20(%rbp)
movl %ecx, -0x24(%rbp)
movl %r8d, -0x28(%rbp)
callq 0x9280
movq %rax, -0x30(%rbp)
movq -0x20(%rbp), %rcx
movq -0x30(%rbp), %rax
movq %rcx, (%rax)
movl -0x24(%rbp), %ecx
movq -0x30(%rbp), %rax
movl %ecx, 0x8(%rax)
movl -0x28(%rbp), %ecx
movq -0x30(%rbp), %rax
movl %ecx, 0x14(%rax)
movq -0x30(%rbp), %rax
movl 0x14(%rax), %eax
movq -0x10(%rbp), %rcx
movl 0x14(%rcx), %ecx
movq -0x18(%rbp), %rdx
addl 0x14(%rdx), %ecx
cmpl %ecx, %eax
jne 0xa728
movq -0x10(%rbp), %rax
cmpl $0x0, 0x14(%rax)
jle 0xa4d9
movq -0x10(%rbp), %rax
movl 0x14(%rax), %eax
movl %eax, -0x44(%rbp)
jmp 0xa4e0
xorl %eax, %eax
movl %eax, -0x44(%rbp)
jmp 0xa4e0
movl -0x44(%rbp), %eax
movq -0x18(%rbp), %rcx
addl 0xc(%rcx), %eax
movq -0x10(%rbp), %rcx
cmpl 0xc(%rcx), %eax
jle 0xa51f
movq -0x10(%rbp), %rax
cmpl $0x0, 0x14(%rax)
jle 0xa509
movq -0x10(%rbp), %rax
movl 0x14(%rax), %eax
movl %eax, -0x48(%rbp)
jmp 0xa510
xorl %eax, %eax
movl %eax, -0x48(%rbp)
jmp 0xa510
movl -0x48(%rbp), %eax
movq -0x18(%rbp), %rcx
addl 0xc(%rcx), %eax
movl %eax, -0x4c(%rbp)
jmp 0xa529
movq -0x10(%rbp), %rax
movl 0xc(%rax), %eax
movl %eax, -0x4c(%rbp)
movl -0x4c(%rbp), %eax
movl %eax, -0x34(%rbp)
movq -0x18(%rbp), %rax
cmpl $0x0, 0x14(%rax)
jle 0xa545
movq -0x18(%rbp), %rax
movl 0x14(%rax), %eax
movl %eax, -0x50(%rbp)
jmp 0xa54c
xorl %eax, %eax
movl %eax, -0x50(%rbp)
jmp 0xa54c
movl -0x50(%rbp), %eax
movq -0x10(%rbp), %rcx
addl 0xc(%rcx), %eax
movq -0x18(%rbp), %rcx
cmpl 0xc(%rcx), %eax
jle 0xa58b
movq -0x18(%rbp), %rax
cmpl $0x0, 0x14(%rax)
jle 0xa575
movq -0x18(%rbp), %rax
movl 0x14(%rax), %eax
movl %eax, -0x54(%rbp)
jmp 0xa57c
xorl %eax, %eax
movl %eax, -0x54(%rbp)
jmp 0xa57c
movl -0x54(%rbp), %eax
movq -0x10(%rbp), %rcx
addl 0xc(%rcx), %eax
movl %eax, -0x58(%rbp)
jmp 0xa595
movq -0x18(%rbp), %rax
movl 0xc(%rax), %eax
movl %eax, -0x58(%rbp)
movl -0x58(%rbp), %eax
movl %eax, -0x38(%rbp)
movl -0x34(%rbp), %eax
cmpl -0x38(%rbp), %eax
jge 0xa5ab
movl -0x34(%rbp), %eax
movl %eax, -0x5c(%rbp)
jmp 0xa5b1
movl -0x38(%rbp), %eax
movl %eax, -0x5c(%rbp)
movl -0x5c(%rbp), %eax
movl %eax, -0x64(%rbp)
movl -0x28(%rbp), %eax
movl %eax, -0x60(%rbp)
movq -0x10(%rbp), %rax
movl 0xc(%rax), %eax
movq -0x18(%rbp), %rcx
cmpl 0xc(%rcx), %eax
jle 0xa5d9
movq -0x10(%rbp), %rax
movl 0xc(%rax), %eax
movl %eax, -0x68(%rbp)
jmp 0xa5e3
movq -0x18(%rbp), %rax
movl 0xc(%rax), %eax
movl %eax, -0x68(%rbp)
movl -0x60(%rbp), %eax
movl -0x68(%rbp), %ecx
cmpl %ecx, %eax
jle 0xa5f5
movl -0x28(%rbp), %eax
movl %eax, -0x6c(%rbp)
jmp 0xa621
movq -0x10(%rbp), %rax
movl 0xc(%rax), %eax
movq -0x18(%rbp), %rcx
cmpl 0xc(%rcx), %eax
jle 0xa611
movq -0x10(%rbp), %rax
movl 0xc(%rax), %eax
movl %eax, -0x70(%rbp)
jmp 0xa61b
movq -0x18(%rbp), %rax
movl 0xc(%rax), %eax
movl %eax, -0x70(%rbp)
movl -0x70(%rbp), %eax
movl %eax, -0x6c(%rbp)
movl -0x64(%rbp), %eax
movl -0x6c(%rbp), %ecx
cmpl %ecx, %eax
jg 0xa726
movq -0x30(%rbp), %rax
movb $0x2, 0x18(%rax)
movl -0x34(%rbp), %eax
cmpl -0x38(%rbp), %eax
jl 0xa66d
movl -0x34(%rbp), %eax
cmpl -0x38(%rbp), %eax
jne 0xa6a1
movq -0x18(%rbp), %rax
movq (%rax), %rdi
movq -0x18(%rbp), %rax
movl 0x8(%rax), %esi
movq -0x10(%rbp), %rax
movq (%rax), %rdx
movq -0x10(%rbp), %rax
movl 0x8(%rax), %ecx
callq 0x2890
cmpl $0x0, %eax
je 0xa6a1
movl -0x34(%rbp), %ecx
movq -0x30(%rbp), %rax
movl %ecx, 0xc(%rax)
movq -0x10(%rbp), %rdi
callq 0x9380
movq %rax, %rcx
movq -0x30(%rbp), %rax
movq %rcx, 0x28(%rax)
movq -0x18(%rbp), %rdi
callq 0x9380
movq %rax, %rcx
movq -0x30(%rbp), %rax
movq %rcx, 0x20(%rax)
jmp 0xa6d3
movl -0x38(%rbp), %ecx
movq -0x30(%rbp), %rax
movl %ecx, 0xc(%rax)
movq -0x18(%rbp), %rdi
callq 0x9380
movq %rax, %rcx
movq -0x30(%rbp), %rax
movq %rcx, 0x28(%rax)
movq -0x10(%rbp), %rdi
callq 0x9380
movq %rax, %rcx
movq -0x30(%rbp), %rax
movq %rcx, 0x20(%rax)
movq -0x10(%rbp), %rax
movl 0x10(%rax), %eax
movq -0x18(%rbp), %rcx
cmpl 0x10(%rcx), %eax
jle 0xa6ef
movq -0x10(%rbp), %rax
movl 0x10(%rax), %eax
movl %eax, -0x74(%rbp)
jmp 0xa6f9
movq -0x18(%rbp), %rax
movl 0x10(%rax), %eax
movl %eax, -0x74(%rbp)
movl -0x74(%rbp), %ecx
movq -0x30(%rbp), %rax
movl %ecx, 0x10(%rax)
movq -0x30(%rbp), %rdi
callq 0xa1f0
movq %rax, -0x40(%rbp)
movq -0x30(%rbp), %rdi
callq 0x93b0
movq -0x40(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0xaa50
jmp 0xa728
movq -0x10(%rbp), %rax
movl 0xc(%rax), %eax
movl %eax, -0x78(%rbp)
movq -0x18(%rbp), %rax
movl 0xc(%rax), %eax
movq -0x30(%rbp), %rcx
cmpl 0x14(%rcx), %eax
jle 0xa74e
movq -0x18(%rbp), %rax
movl 0xc(%rax), %eax
movl %eax, -0x7c(%rbp)
jmp 0xa758
movq -0x30(%rbp), %rax
movl 0x14(%rax), %eax
movl %eax, -0x7c(%rbp)
movl -0x78(%rbp), %eax
movl -0x7c(%rbp), %ecx
cmpl %ecx, %eax
jle 0xa76e
movq -0x10(%rbp), %rax
movl 0xc(%rax), %eax
movl %eax, -0x80(%rbp)
jmp 0xa7a3
movq -0x18(%rbp), %rax
movl 0xc(%rax), %eax
movq -0x30(%rbp), %rcx
cmpl 0x14(%rcx), %eax
jle 0xa78d
movq -0x18(%rbp), %rax
movl 0xc(%rax), %eax
movl %eax, -0x84(%rbp)
jmp 0xa79a
movq -0x30(%rbp), %rax
movl 0x14(%rax), %eax
movl %eax, -0x84(%rbp)
movl -0x84(%rbp), %eax
movl %eax, -0x80(%rbp)
movl -0x80(%rbp), %ecx
movq -0x30(%rbp), %rax
movl %ecx, 0xc(%rax)
movq -0x10(%rbp), %rax
cmpl $0x0, 0x14(%rax)
jle 0xa7c6
movq -0x10(%rbp), %rax
movl 0x14(%rax), %eax
movl %eax, -0x88(%rbp)
jmp 0xa7d0
xorl %eax, %eax
movl %eax, -0x88(%rbp)
jmp 0xa7d0
movl -0x88(%rbp), %eax
movl %eax, -0x8c(%rbp)
movq -0x18(%rbp), %rax
cmpl $0x0, 0x14(%rax)
jle 0xa7f5
movq -0x18(%rbp), %rax
movl 0x14(%rax), %eax
movl %eax, -0x90(%rbp)
jmp 0xa7ff
xorl %eax, %eax
movl %eax, -0x90(%rbp)
jmp 0xa7ff
movl -0x8c(%rbp), %eax
movl -0x90(%rbp), %ecx
cmpl %ecx, %eax
jg 0xa8b1
movq -0x10(%rbp), %rax
cmpl $0x0, 0x14(%rax)
jle 0xa82c
movq -0x10(%rbp), %rax
movl 0x14(%rax), %eax
movl %eax, -0x94(%rbp)
jmp 0xa836
xorl %eax, %eax
movl %eax, -0x94(%rbp)
jmp 0xa836
movl -0x94(%rbp), %eax
movl %eax, -0x98(%rbp)
movq -0x18(%rbp), %rax
cmpl $0x0, 0x14(%rax)
jle 0xa85b
movq -0x18(%rbp), %rax
movl 0x14(%rax), %eax
movl %eax, -0x9c(%rbp)
jmp 0xa865
xorl %eax, %eax
movl %eax, -0x9c(%rbp)
jmp 0xa865
movl -0x98(%rbp), %eax
movl -0x9c(%rbp), %ecx
cmpl %ecx, %eax
jne 0xa97b
movq -0x10(%rbp), %rax
movl 0x8(%rax), %eax
movq -0x18(%rbp), %rcx
cmpl 0x8(%rcx), %eax
jg 0xa8b1
movq -0x10(%rbp), %rax
movl 0x8(%rax), %eax
movq -0x18(%rbp), %rcx
cmpl 0x8(%rcx), %eax
jne 0xa97b
movq -0x10(%rbp), %rax
movl 0x10(%rax), %eax
movq -0x18(%rbp), %rcx
cmpl 0x10(%rcx), %eax
jg 0xa97b
movq -0x18(%rbp), %rax
movl 0x14(%rax), %eax
movl %eax, -0xa0(%rbp)
movq -0x10(%rbp), %rax
movl 0x10(%rax), %eax
movq -0x18(%rbp), %rcx
cmpl 0x10(%rcx), %eax
jle 0xa8dd
movq -0x10(%rbp), %rax
movl 0x10(%rax), %eax
movl %eax, -0xa4(%rbp)
jmp 0xa8ea
movq -0x18(%rbp), %rax
movl 0x10(%rax), %eax
movl %eax, -0xa4(%rbp)
movl -0xa0(%rbp), %eax
movl -0xa4(%rbp), %ecx
cmpl %ecx, %eax
jle 0xa909
movq -0x18(%rbp), %rax
movl 0x14(%rax), %eax
movl %eax, -0xa8(%rbp)
jmp 0xa941
movq -0x10(%rbp), %rax
movl 0x10(%rax), %eax
movq -0x18(%rbp), %rcx
cmpl 0x10(%rcx), %eax
jle 0xa928
movq -0x10(%rbp), %rax
movl 0x10(%rax), %eax
movl %eax, -0xac(%rbp)
jmp 0xa935
movq -0x18(%rbp), %rax
movl 0x10(%rax), %eax
movl %eax, -0xac(%rbp)
movl -0xac(%rbp), %eax
movl %eax, -0xa8(%rbp)
movl -0xa8(%rbp), %ecx
movq -0x30(%rbp), %rax
movl %ecx, 0x10(%rax)
movq -0x10(%rbp), %rdi
callq 0x9380
movq %rax, %rcx
movq -0x30(%rbp), %rax
movq %rcx, 0x20(%rax)
movq -0x18(%rbp), %rdi
callq 0x9380
movq %rax, %rcx
movq -0x30(%rbp), %rax
movq %rcx, 0x28(%rax)
jmp 0xaa40
movq -0x10(%rbp), %rax
movl 0x14(%rax), %eax
movl %eax, -0xb0(%rbp)
movq -0x10(%rbp), %rax
movl 0x10(%rax), %eax
movq -0x18(%rbp), %rcx
cmpl 0x10(%rcx), %eax
jle 0xa9a7
movq -0x10(%rbp), %rax
movl 0x10(%rax), %eax
movl %eax, -0xb4(%rbp)
jmp 0xa9b4
movq -0x18(%rbp), %rax
movl 0x10(%rax), %eax
movl %eax, -0xb4(%rbp)
movl -0xb0(%rbp), %eax
movl -0xb4(%rbp), %ecx
cmpl %ecx, %eax
jle 0xa9d3
movq -0x10(%rbp), %rax
movl 0x14(%rax), %eax
movl %eax, -0xb8(%rbp)
jmp 0xaa0b
movq -0x10(%rbp), %rax
movl 0x10(%rax), %eax
movq -0x18(%rbp), %rcx
cmpl 0x10(%rcx), %eax
jle 0xa9f2
movq -0x10(%rbp), %rax
movl 0x10(%rax), %eax
movl %eax, -0xbc(%rbp)
jmp 0xa9ff
movq -0x18(%rbp), %rax
movl 0x10(%rax), %eax
movl %eax, -0xbc(%rbp)
movl -0xbc(%rbp), %eax
movl %eax, -0xb8(%rbp)
movl -0xb8(%rbp), %ecx
movq -0x30(%rbp), %rax
movl %ecx, 0x10(%rax)
movq -0x18(%rbp), %rdi
callq 0x9380
movq %rax, %rcx
movq -0x30(%rbp), %rax
movq %rcx, 0x20(%rax)
movq -0x10(%rbp), %rdi
callq 0x9380
movq %rax, %rcx
movq -0x30(%rbp), %rax
movq %rcx, 0x28(%rax)
movq -0x30(%rbp), %rax
movb $0x1, 0x18(%rax)
movq -0x30(%rbp), %rax
movq %rax, -0x8(%rbp)
movq -0x8(%rbp), %rax
addq $0xc0, %rsp
popq %rbp
retq
nopl (%rax)