// File: mirkat1206[P]Quine-McCluskey-Petrick-Method/Petrick_Method.cpp
// Function: Petrick_Method::Expansion(std::set<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>>&, int, int)
void Petrick_Method::Expansion(set<string> &product, int i_POS, int maxi) {
	if( i_POS==maxi ) { 
		string s = set2string(product) ;
		if( s_SOP.find(s)==s_SOP.end() ) {
			s_SOP.insert( s );
			SOP.push_back( product );
		}
	}
	int size = POS[ i_POS ].size() ;
	for( int i=0 ; i<size ; i++ ) {
		if( product.find( POS[ i_POS ][i] )==product.end() ) {
			product.insert( POS[ i_POS ][ i ] );
			Expansion( product , i_POS+1 , maxi );
			product.erase( POS[ i_POS ][i] );
		}
		else
			Expansion( product , i_POS+1 , maxi );
	}
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xd0, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movl %edx, -0x14(%rbp)
movl %ecx, -0x18(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x98(%rbp)
movl -0x14(%rbp), %eax
cmpl -0x18(%rbp), %eax
jne 0xb4bf
movq -0x98(%rbp), %rsi
movq -0x10(%rbp), %rdx
leaq -0x38(%rbp), %rdi
movq %rdi, -0xa8(%rbp)
callq 0xb620
movq -0x98(%rbp), %rdi
movq -0xa8(%rbp), %rsi
addq $0x30, %rdi
callq 0xc360
movq %rax, -0xa0(%rbp)
jmp 0xb41b
movq -0x98(%rbp), %rdi
movq -0xa0(%rbp), %rax
movq %rax, -0x40(%rbp)
addq $0x30, %rdi
callq 0xc3a0
movq %rax, -0x58(%rbp)
leaq -0x40(%rbp), %rdi
leaq -0x58(%rbp), %rsi
callq 0xc330
testb $0x1, %al
jne 0xb44d
jmp 0xb4b6
movq -0x98(%rbp), %rdi
addq $0x30, %rdi
leaq -0x38(%rbp), %rsi
callq 0xc3d0
movb %dl, -0xb1(%rbp)
movq %rax, -0xb0(%rbp)
jmp 0xb470
movq -0x98(%rbp), %rdi
movb -0xb1(%rbp), %al
movq -0xb0(%rbp), %rcx
movq %rcx, -0x68(%rbp)
movb %al, -0x60(%rbp)
addq $0x18, %rdi
movq -0x10(%rbp), %rsi
callq 0xc420
jmp 0xb49a
jmp 0xb4b6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0x38(%rbp), %rdi
callq 0x2120
jmp 0xb610
leaq -0x38(%rbp), %rdi
callq 0x2120
movq -0x98(%rbp), %rdi
movslq -0x14(%rbp), %rsi
callq 0xc490
movq %rax, %rdi
callq 0x4490
movl %eax, -0x6c(%rbp)
movl $0x0, -0x70(%rbp)
movl -0x70(%rbp), %eax
cmpl -0x6c(%rbp), %eax
jge 0xb607
movq -0x98(%rbp), %rdi
movq -0x10(%rbp), %rax
movq %rax, -0xc0(%rbp)
movslq -0x14(%rbp), %rsi
callq 0xc490
movq %rax, %rdi
movslq -0x70(%rbp), %rsi
callq 0x4580
movq -0xc0(%rbp), %rdi
movq %rax, %rsi
callq 0xc360
movq %rax, -0x78(%rbp)
movq -0x10(%rbp), %rdi
callq 0xc3a0
movq %rax, -0x80(%rbp)
leaq -0x78(%rbp), %rdi
leaq -0x80(%rbp), %rsi
callq 0xc330
testb $0x1, %al
jne 0xb54a
jmp 0xb5de
movq -0x98(%rbp), %rdi
movq -0x10(%rbp), %rax
movq %rax, -0xd0(%rbp)
movslq -0x14(%rbp), %rsi
callq 0xc490
movq %rax, %rdi
movslq -0x70(%rbp), %rsi
callq 0x4580
movq -0xd0(%rbp), %rdi
movq %rax, %rsi
callq 0xc3d0
movq -0x98(%rbp), %rdi
movq %rax, -0x90(%rbp)
movb %dl, -0x88(%rbp)
movq -0x10(%rbp), %rsi
movl -0x14(%rbp), %edx
addl $0x1, %edx
movl -0x18(%rbp), %ecx
callq 0xb3b0
movq -0x98(%rbp), %rdi
movq -0x10(%rbp), %rax
movq %rax, -0xc8(%rbp)
movslq -0x14(%rbp), %rsi
callq 0xc490
movq %rax, %rdi
movslq -0x70(%rbp), %rsi
callq 0x4580
movq -0xc8(%rbp), %rdi
movq %rax, %rsi
callq 0xc4b0
jmp 0xb5f7
movq -0x98(%rbp), %rdi
movq -0x10(%rbp), %rsi
movl -0x14(%rbp), %edx
addl $0x1, %edx
movl -0x18(%rbp), %ecx
callq 0xb3b0
jmp 0xb5f9
movl -0x70(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x70(%rbp)
jmp 0xb4e1
addq $0xd0, %rsp
popq %rbp
retq
movq -0x48(%rbp), %rdi
callq 0x2340
nopl (%rax)