// File: Laakeri[P]Triangulator/src/PMC.cpp
// Function: PMC::ONE_MORE_VERTEX(Graph const&, std::vector<std::vector<int, std::allocator<int>>, std::allocator<std::vector<int, std::allocator<int>>>> const&, std::vector<std::vector<int, std::allocator<int>>, std::allocator<std::vector<int, std::allocator<int>>>> const&, std::vector<std::vector<int, std::allocator<int>>, std::allocator<std::vector<int, std::allocator<int>>>> const&, int, PMC::valueT, int)
vector<vector<int> > ONE_MORE_VERTEX(const Graph& G, const vector<vector<int> >& oldPMCs, const vector<vector<int> >& oldMinSeps, const vector<vector<int> >& minSeps, int a, valueT upperBound, int PROBLEM) {
	vector<vector<int> > PMCs;
	for (const auto& pmc : oldPMCs) {
		if (!hasFullComponent(G, pmc)) {
			PMCs.push_back(pmc);
		}
		else {
			if (extend2(G, pmc, a)) {
				PMCs.push_back(pmc);
				PMCs.back().push_back(a);
				if (!canFill(G, PMCs.back(), upperBound, PROBLEM)) {
					PMCs.pop_back();
				}
			}
		}
	}
	int i2 = 0;
	set<vector<int> > tried;
	for (const auto& minSep : minSeps) {
		if (find(minSep.begin(), minSep.end(), a) != minSep.end()) continue;
		if (!canFill(G, minSep, upperBound, PROBLEM)) continue;
		if (extend2(G, minSep, a)) {
			PMCs.push_back(minSep);
			PMCs.back().push_back(a);
			if (hasFullComponent(G, PMCs.back())) {
				PMCs.pop_back();
			}
			else if (!canFill(G, PMCs.back(), upperBound, PROBLEM)) {
				PMCs.pop_back();
			}
		}
		while (i2 < (int)oldMinSeps.size() && oldMinSeps[i2] < minSep) i2++;
		if (i2 == (int)oldMinSeps.size() || oldMinSeps[i2] != minSep) {
			vector<vector<int> > components = getComponents(G, minSep);
			assert(components.size() >= 2);
			for (const auto& T : minSeps) {
				for (const auto& C : components) {
					vector<int> npmc = minSep;
					bool fo = false;
					for (int x : T) {
						if (binary_search(C.begin(), C.end(), x)) {
							if (!binary_search(minSep.begin(), minSep.end(), x)) {
								npmc.push_back(x);
								fo = true;
							}
						}
					}
					if (fo) {
						if (tried.count(npmc)) continue;
						tried.insert(npmc);
						if (PROBLEM == PROBLEM_HYPER) {
							if (isPMCbrute(G, npmc) && canFill(G, npmc, upperBound, PROBLEM)) {
								PMCs.push_back(npmc);
							}
						}
						else {
							if (canFill(G, npmc, upperBound, PROBLEM) && isPMCbrute(G, npmc)) {
								PMCs.push_back(npmc);
							}
						}
					}
				}
			}
		}
	}
	return PMCs;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x350, %rsp            # imm = 0x350
movq %rdi, -0x2b8(%rbp)
movq %rdi, %rax
movq %rax, -0x2b0(%rbp)
movl 0x40(%rbp), %eax
leaq 0x10(%rbp), %rax
movq %rax, -0x2a8(%rbp)
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq %rcx, -0x20(%rbp)
movq %r8, -0x28(%rbp)
movl %r9d, -0x2c(%rbp)
movb $0x0, -0x2d(%rbp)
callq 0x17630
movq -0x18(%rbp), %rax
movq %rax, -0x38(%rbp)
movq -0x38(%rbp), %rdi
callq 0x5fb0
movq %rax, -0x40(%rbp)
movq -0x38(%rbp), %rdi
callq 0x5fe0
movq %rax, -0x48(%rbp)
leaq -0x40(%rbp), %rdi
leaq -0x48(%rbp), %rsi
callq 0x63a0
testb $0x1, %al
jne 0x3bff3
jmp 0x3c137
leaq -0x40(%rbp), %rdi
callq 0x6410
movq %rax, -0x50(%rbp)
movq -0x10(%rbp), %rdi
movq -0x50(%rbp), %rsi
callq 0x3a720
movb %al, -0x2b9(%rbp)
jmp 0x3c015
movb -0x2b9(%rbp), %al
testb $0x1, %al
jne 0x3c049
jmp 0x3c021
movq -0x2b8(%rbp), %rdi
movq -0x50(%rbp), %rsi
callq 0x17bb0
jmp 0x3c033
jmp 0x3c127
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x3ca18
movq -0x10(%rbp), %rdi
movq -0x50(%rbp), %rsi
movl -0x2c(%rbp), %edx
callq 0x3a9c0
movb %al, -0x2ba(%rbp)
jmp 0x3c061
movb -0x2ba(%rbp), %al
testb $0x1, %al
jne 0x3c070
jmp 0x3c125
movq -0x2b8(%rbp), %rdi
movq -0x50(%rbp), %rsi
callq 0x17bb0
jmp 0x3c082
movq -0x2b8(%rbp), %rdi
callq 0x28760
movq %rax, %rdi
leaq -0x2c(%rbp), %rsi
callq 0xdff0
jmp 0x3c09c
movq -0x2b8(%rbp), %rdi
movq -0x10(%rbp), %rax
movq %rax, -0x2c8(%rbp)
callq 0x28760
movq -0x2c8(%rbp), %rdi
movq %rax, %rsi
movq -0x2a8(%rbp), %rax
movaps (%rax), %xmm0
movaps 0x10(%rax), %xmm1
movaps 0x20(%rax), %xmm2
movaps %xmm2, -0x70(%rbp)
movaps %xmm1, -0x80(%rbp)
movaps %xmm0, -0x90(%rbp)
movl 0x40(%rbp), %edx
movaps -0x90(%rbp), %xmm0
movaps -0x80(%rbp), %xmm1
movaps -0x70(%rbp), %xmm2
movq %rsp, %rax
movaps %xmm2, 0x20(%rax)
movaps %xmm1, 0x10(%rax)
movaps %xmm0, (%rax)
callq 0x3be20
movb %al, -0x2bb(%rbp)
jmp 0x3c10b
movb -0x2bb(%rbp), %al
testb $0x1, %al
jne 0x3c123
jmp 0x3c117
movq -0x2b8(%rbp), %rdi
callq 0x434a0
jmp 0x3c125
jmp 0x3c127
jmp 0x3c129
leaq -0x40(%rbp), %rdi
callq 0x6430
jmp 0x3bfdd
movl $0x0, -0x94(%rbp)
leaq -0xc8(%rbp), %rdi
callq 0x434d0
movq -0x28(%rbp), %rax
movq %rax, -0xd0(%rbp)
movq -0xd0(%rbp), %rdi
callq 0x5fb0
movq %rax, -0xd8(%rbp)
movq -0xd0(%rbp), %rdi
callq 0x5fe0
movq %rax, -0xe0(%rbp)
leaq -0xd8(%rbp), %rdi
leaq -0xe0(%rbp), %rsi
callq 0x63a0
testb $0x1, %al
jne 0x3c19a
jmp 0x3c9cc
leaq -0xd8(%rbp), %rdi
callq 0x6410
movq %rax, -0xe8(%rbp)
movq -0xe8(%rbp), %rdi
callq 0x6680
movq %rax, -0xf8(%rbp)
movq -0xe8(%rbp), %rdi
callq 0x66b0
movq %rax, -0x100(%rbp)
movq -0xf8(%rbp), %rdi
movq -0x100(%rbp), %rsi
leaq -0x2c(%rbp), %rdx
callq 0x434f0
movq %rax, -0x2d0(%rbp)
jmp 0x3c1f3
movq -0x2d0(%rbp), %rax
movq %rax, -0xf0(%rbp)
movq -0xe8(%rbp), %rdi
callq 0x66b0
movq %rax, -0x108(%rbp)
leaq -0xf0(%rbp), %rdi
leaq -0x108(%rbp), %rsi
callq 0xbbc0
testb $0x1, %al
jne 0x3c22d
jmp 0x3c243
jmp 0x3c9bb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x3c9ee
movq -0x2a8(%rbp), %rax
movq -0x10(%rbp), %rdi
movq -0xe8(%rbp), %rsi
movaps (%rax), %xmm0
movaps 0x10(%rax), %xmm1
movaps 0x20(%rax), %xmm2
movaps %xmm2, -0x120(%rbp)
movaps %xmm1, -0x130(%rbp)
movaps %xmm0, -0x140(%rbp)
movl 0x40(%rbp), %edx
movaps -0x140(%rbp), %xmm0
movaps -0x130(%rbp), %xmm1
movaps -0x120(%rbp), %xmm2
movq %rsp, %rax
movaps %xmm2, 0x20(%rax)
movaps %xmm1, 0x10(%rax)
movaps %xmm0, (%rax)
callq 0x3be20
movb %al, -0x2d1(%rbp)
jmp 0x3c2a8
movb -0x2d1(%rbp), %al
testb $0x1, %al
jne 0x3c2b9
jmp 0x3c2b4
jmp 0x3c9bb
movq -0x10(%rbp), %rdi
movq -0xe8(%rbp), %rsi
movl -0x2c(%rbp), %edx
callq 0x3a9c0
movb %al, -0x2d2(%rbp)
jmp 0x3c2d4
movb -0x2d2(%rbp), %al
testb $0x1, %al
jne 0x3c2e3
jmp 0x3c3f4
movq -0x2b8(%rbp), %rdi
movq -0xe8(%rbp), %rsi
callq 0x17bb0
jmp 0x3c2f8
movq -0x2b8(%rbp), %rdi
callq 0x28760
movq %rax, %rdi
leaq -0x2c(%rbp), %rsi
callq 0xdff0
jmp 0x3c312
movq -0x2b8(%rbp), %rdi
movq -0x10(%rbp), %rax
movq %rax, -0x2e0(%rbp)
callq 0x28760
movq -0x2e0(%rbp), %rdi
movq %rax, %rsi
callq 0x3a720
movb %al, -0x2d3(%rbp)
jmp 0x3c340
movb -0x2d3(%rbp), %al
testb $0x1, %al
jne 0x3c34c
jmp 0x3c35d
movq -0x2b8(%rbp), %rdi
callq 0x434a0
jmp 0x3c3f2
movq -0x2b8(%rbp), %rdi
movq -0x10(%rbp), %rax
movq %rax, -0x2f0(%rbp)
callq 0x28760
movq -0x2f0(%rbp), %rdi
movq %rax, %rsi
movq -0x2a8(%rbp), %rax
movaps (%rax), %xmm0
movaps 0x10(%rax), %xmm1
movaps 0x20(%rax), %xmm2
movaps %xmm2, -0x150(%rbp)
movaps %xmm1, -0x160(%rbp)
movaps %xmm0, -0x170(%rbp)
movl 0x40(%rbp), %edx
movaps -0x170(%rbp), %xmm0
movaps -0x160(%rbp), %xmm1
movaps -0x150(%rbp), %xmm2
movq %rsp, %rax
movaps %xmm2, 0x20(%rax)
movaps %xmm1, 0x10(%rax)
movaps %xmm0, (%rax)
callq 0x3be20
movb %al, -0x2e1(%rbp)
jmp 0x3c3d8
movb -0x2e1(%rbp), %al
testb $0x1, %al
jne 0x3c3f0
jmp 0x3c3e4
movq -0x2b8(%rbp), %rdi
callq 0x434a0
jmp 0x3c3f2
jmp 0x3c3f4
jmp 0x3c3f6
movl -0x94(%rbp), %eax
movl %eax, -0x2f8(%rbp)
movq -0x20(%rbp), %rdi
callq 0x5e80
movl -0x2f8(%rbp), %ecx
movl %eax, %edx
xorl %eax, %eax
cmpl %edx, %ecx
movb %al, -0x2f1(%rbp)
jge 0x3c454
movq -0x20(%rbp), %rdi
movslq -0x94(%rbp), %rsi
callq 0xbba0
movq %rax, %rdi
movq -0xe8(%rbp), %rsi
callq 0x1d8a0
movb %al, -0x2f9(%rbp)
jmp 0x3c446
movb -0x2f9(%rbp), %al
movb %al, -0x2f1(%rbp)
jmp 0x3c454
movb -0x2f1(%rbp), %al
testb $0x1, %al
jne 0x3c460
jmp 0x3c471
movl -0x94(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x94(%rbp)
jmp 0x3c3f6
movl -0x94(%rbp), %eax
movl %eax, -0x300(%rbp)
movq -0x20(%rbp), %rdi
callq 0x5e80
movq %rax, %rcx
movl -0x300(%rbp), %eax
cmpl %ecx, %eax
je 0x3c4c9
movq -0x20(%rbp), %rdi
movslq -0x94(%rbp), %rsi
callq 0xbba0
movq %rax, %rdi
movq -0xe8(%rbp), %rsi
callq 0x43540
movb %al, -0x301(%rbp)
jmp 0x3c4ba
movb -0x301(%rbp), %al
testb $0x1, %al
jne 0x3c4c9
jmp 0x3c9b9
movq -0x10(%rbp), %rsi
movq -0xe8(%rbp), %rdx
leaq -0x188(%rbp), %rdi
callq 0x3b170
jmp 0x3c4e2
leaq -0x188(%rbp), %rdi
callq 0x5e80
cmpq $0x2, %rax
jb 0x3c4f6
jmp 0x3c515
leaq 0x1e5fd(%rip), %rdi     # 0x5aafa
leaq 0x1e172(%rip), %rsi     # 0x5a676
movl $0x168, %edx            # imm = 0x168
leaq 0x1e601(%rip), %rcx     # 0x5ab11
callq 0x31a0
movq -0x28(%rbp), %rax
movq %rax, -0x190(%rbp)
movq -0x190(%rbp), %rdi
callq 0x5fb0
movq %rax, -0x198(%rbp)
movq -0x190(%rbp), %rdi
callq 0x5fe0
movq %rax, -0x1a0(%rbp)
leaq -0x198(%rbp), %rdi
leaq -0x1a0(%rbp), %rsi
callq 0x63a0
testb $0x1, %al
jne 0x3c562
jmp 0x3c99d
leaq -0x198(%rbp), %rdi
callq 0x6410
movq %rax, -0x1a8(%rbp)
leaq -0x188(%rbp), %rax
movq %rax, -0x1b0(%rbp)
movq -0x1b0(%rbp), %rdi
callq 0x58e0
movq %rax, -0x1b8(%rbp)
movq -0x1b0(%rbp), %rdi
callq 0x5910
movq %rax, -0x1c0(%rbp)
leaq -0x1b8(%rbp), %rdi
leaq -0x1c0(%rbp), %rsi
callq 0x5940
testb $0x1, %al
jne 0x3c5c5
jmp 0x3c98a
leaq -0x1b8(%rbp), %rdi
callq 0x5980
movq %rax, -0x1c8(%rbp)
movq -0xe8(%rbp), %rsi
leaq -0x1e0(%rbp), %rdi
callq 0x6490
jmp 0x3c5ed
movb $0x0, -0x1e1(%rbp)
movq -0x1a8(%rbp), %rax
movq %rax, -0x1f0(%rbp)
movq -0x1f0(%rbp), %rdi
callq 0x6680
movq %rax, -0x1f8(%rbp)
movq -0x1f0(%rbp), %rdi
callq 0x66b0
movq %rax, -0x200(%rbp)
leaq -0x1f8(%rbp), %rdi
leaq -0x200(%rbp), %rsi
callq 0xbbc0
testb $0x1, %al
jne 0x3c644
jmp 0x3c764
leaq -0x1f8(%rbp), %rdi
callq 0xbc00
movl (%rax), %eax
movl %eax, -0x204(%rbp)
movq -0x1c8(%rbp), %rdi
callq 0x6680
movq %rax, -0x210(%rbp)
movq -0x1c8(%rbp), %rdi
callq 0x66b0
movq %rax, -0x218(%rbp)
movq -0x210(%rbp), %rdi
movq -0x218(%rbp), %rsi
leaq -0x204(%rbp), %rdx
callq 0x43410
movb %al, -0x302(%rbp)
jmp 0x3c6a0
movb -0x302(%rbp), %al
testb $0x1, %al
jne 0x3c6af
jmp 0x3c751
movq -0xe8(%rbp), %rdi
callq 0x6680
movq %rax, -0x220(%rbp)
movq -0xe8(%rbp), %rdi
callq 0x66b0
movq %rax, -0x228(%rbp)
movq -0x220(%rbp), %rdi
movq -0x228(%rbp), %rsi
leaq -0x204(%rbp), %rdx
callq 0x43410
movb %al, -0x303(%rbp)
jmp 0x3c6f7
movb -0x303(%rbp), %al
testb $0x1, %al
jne 0x3c74f
jmp 0x3c703
leaq -0x1e0(%rbp), %rdi
leaq -0x204(%rbp), %rsi
callq 0xdff0
jmp 0x3c718
movb $0x1, -0x1e1(%rbp)
jmp 0x3c74f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x3c9ab
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0x1e0(%rbp), %rdi
callq 0x6d30
jmp 0x3c9ab
jmp 0x3c751
jmp 0x3c753
leaq -0x1f8(%rbp), %rdi
callq 0xbc80
jmp 0x3c628
testb $0x1, -0x1e1(%rbp)
je 0x3c953
leaq -0xc8(%rbp), %rdi
leaq -0x1e0(%rbp), %rsi
callq 0x43570
movq %rax, -0x310(%rbp)
jmp 0x3c78d
movq -0x310(%rbp), %rax
cmpq $0x0, %rax
je 0x3c7a9
movl $0xb, -0x22c(%rbp)
jmp 0x3c95d
leaq -0xc8(%rbp), %rdi
leaq -0x1e0(%rbp), %rsi
callq 0x435d0
movb %dl, -0x319(%rbp)
movq %rax, -0x318(%rbp)
jmp 0x3c7cb
movb -0x319(%rbp), %al
movq -0x318(%rbp), %rcx
movq %rcx, -0x240(%rbp)
movb %al, -0x238(%rbp)
cmpl $0x4, 0x40(%rbp)
jne 0x3c8a3
movq -0x10(%rbp), %rdi
leaq -0x1e0(%rbp), %rsi
callq 0x3ab20
movb %al, -0x31a(%rbp)
jmp 0x3c807
movb -0x31a(%rbp), %al
testb $0x1, %al
jne 0x3c816
jmp 0x3c89e
movq -0x2a8(%rbp), %rax
movq -0x10(%rbp), %rdi
movaps (%rax), %xmm0
movaps 0x10(%rax), %xmm1
movaps 0x20(%rax), %xmm2
movaps %xmm2, -0x250(%rbp)
movaps %xmm1, -0x260(%rbp)
movaps %xmm0, -0x270(%rbp)
movl 0x40(%rbp), %edx
movaps -0x270(%rbp), %xmm0
movaps -0x260(%rbp), %xmm1
movaps -0x250(%rbp), %xmm2
movq %rsp, %rax
movaps %xmm2, 0x20(%rax)
movaps %xmm1, 0x10(%rax)
movaps %xmm0, (%rax)
leaq -0x1e0(%rbp), %rsi
callq 0x3be20
movb %al, -0x31b(%rbp)
jmp 0x3c87b
movb -0x31b(%rbp), %al
testb $0x1, %al
jne 0x3c887
jmp 0x3c89e
movq -0x2b8(%rbp), %rdi
leaq -0x1e0(%rbp), %rsi
callq 0x17bb0
jmp 0x3c89c
jmp 0x3c89e
jmp 0x3c951
movq -0x2a8(%rbp), %rax
movq -0x10(%rbp), %rdi
movaps (%rax), %xmm0
movaps 0x10(%rax), %xmm1
movaps 0x20(%rax), %xmm2
movaps %xmm2, -0x280(%rbp)
movaps %xmm1, -0x290(%rbp)
movaps %xmm0, -0x2a0(%rbp)
movl 0x40(%rbp), %edx
movaps -0x2a0(%rbp), %xmm0
movaps -0x290(%rbp), %xmm1
movaps -0x280(%rbp), %xmm2
movq %rsp, %rax
movaps %xmm2, 0x20(%rax)
movaps %xmm1, 0x10(%rax)
movaps %xmm0, (%rax)
leaq -0x1e0(%rbp), %rsi
callq 0x3be20
movb %al, -0x31c(%rbp)
jmp 0x3c908
movb -0x31c(%rbp), %al
testb $0x1, %al
jne 0x3c914
jmp 0x3c94f
movq -0x10(%rbp), %rdi
leaq -0x1e0(%rbp), %rsi
callq 0x3ab20
movb %al, -0x31d(%rbp)
jmp 0x3c92c
movb -0x31d(%rbp), %al
testb $0x1, %al
jne 0x3c938
jmp 0x3c94f
movq -0x2b8(%rbp), %rdi
leaq -0x1e0(%rbp), %rsi
callq 0x17bb0
jmp 0x3c94d
jmp 0x3c94f
jmp 0x3c951
jmp 0x3c953
movl $0x0, -0x22c(%rbp)
leaq -0x1e0(%rbp), %rdi
callq 0x6d30
movl -0x22c(%rbp), %eax
testl %eax, %eax
je 0x3c977
jmp 0x3c975
jmp 0x3c979
jmp 0x3c979
leaq -0x1b8(%rbp), %rdi
callq 0x59c0
jmp 0x3c5a9
jmp 0x3c98c
leaq -0x198(%rbp), %rdi
callq 0x6430
jmp 0x3c546
leaq -0x188(%rbp), %rdi
callq 0x5e20
jmp 0x3c9b9
leaq -0x188(%rbp), %rdi
callq 0x5e20
jmp 0x3c9ee
jmp 0x3c9bb
leaq -0xd8(%rbp), %rdi
callq 0x6430
jmp 0x3c17e
movb $0x1, -0x2d(%rbp)
movl $0x1, -0x22c(%rbp)
leaq -0xc8(%rbp), %rdi
callq 0x43620
testb $0x1, -0x2d(%rbp)
jne 0x3ca08
jmp 0x3c9fc
leaq -0xc8(%rbp), %rdi
callq 0x43620
jmp 0x3ca18
movq -0x2b8(%rbp), %rdi
callq 0x5e20
movq -0x2b0(%rbp), %rax
addq $0x350, %rsp            # imm = 0x350
popq %rbp
retq
movq -0x2b8(%rbp), %rdi
callq 0x5e20
movq -0x58(%rbp), %rdi
callq 0x3480
nopl (%rax)