// File: ksabry[P]bfbrute/src/ProgramIterator.h
// Function: ProgramIterator<400ul, 32ul, 12ul, 32ul>::NextValidIteratorSizes(unsigned long)
bool NextValidIteratorSizes(uint_fast32_t count)
	{
		for (int_fast32_t c = count; c > 0; c--)
		{
			while (!NextIteratorSizes())
			{
#ifdef SINGLE_ITER_COUNT
				if (iteratorCount == 1) iteratorCount = SINGLE_ITER_COUNT;
				else return false;
#else
				iteratorCount += 2;
#endif
				remainingSize = programSize - iteratorCount + 1;
				if (remainingSize <= 0) return false;

				for (uint_fast32_t i = 0; i < iteratorCount - 2; i++)
				{
					assert(i >= 0 && i < max_program_size);
					iteratorSizes[i] = 0;
				}
#ifdef INITIAL_ZERO
				iteratorSizes[0] = 1;
				remainingSize--;
				if (remainingSize < 0) return false;
#endif
				assert(iteratorCount - 2 >= 0 && iteratorCount - 2 < max_program_size);
				// Set to -1 so that after the first call to NextIteratorSizes it will be 0
				iteratorSizes[iteratorCount - 2] = -1;
				remainingSize++;
				firstIteratorWithNonZeroDataDelta = 0;
			}
		}
		return true;
	}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x40, %rsp
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x30(%rbp)
movq -0x18(%rbp), %rax
movq %rax, -0x20(%rbp)
cmpq $0x0, -0x20(%rbp)
jle 0xd906
jmp 0xd76d
movq -0x30(%rbp), %rdi
callq 0xdd10
xorb $-0x1, %al
testb $0x1, %al
jne 0xd781
jmp 0xd8f3
movq -0x30(%rbp), %rax
movq 0x20(%rax), %rcx
addq $0x2, %rcx
movq %rcx, 0x20(%rax)
movq 0x18(%rax), %rcx
subq 0x20(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x3e28(%rax)
cmpq $0x0, 0x3e28(%rax)
jg 0xd7b7
movb $0x0, -0x1(%rbp)
jmp 0xd90a
movq $0x0, -0x28(%rbp)
movq -0x30(%rbp), %rcx
movq -0x28(%rbp), %rax
movq 0x20(%rcx), %rcx
subq $0x2, %rcx
cmpq %rcx, %rax
jae 0xd834
xorl %eax, %eax
cmpq $0x0, -0x28(%rbp)
movb %al, -0x31(%rbp)
jb 0xd7eb
cmpq $0x20, -0x28(%rbp)
setb %al
movb %al, -0x31(%rbp)
movb -0x31(%rbp), %al
testb $0x1, %al
jne 0xd7f4
jmp 0xd7f6
jmp 0xd815
leaq 0x5ae5(%rip), %rdi      # 0x132e2
leaq 0x5afd(%rip), %rsi      # 0x13301
movl $0x103, %edx            # imm = 0x103
leaq 0x5b07(%rip), %rcx      # 0x13317
callq 0x3180
movq -0x30(%rbp), %rax
movq -0x28(%rbp), %rcx
movq $0x0, 0x28(%rax,%rcx,8)
movq -0x28(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x28(%rbp)
jmp 0xd7bf
movq -0x30(%rbp), %rax
movq $0x1, 0x28(%rax)
movq 0x3e28(%rax), %rcx
addq $-0x1, %rcx
movq %rcx, 0x3e28(%rax)
cmpq $0x0, 0x3e28(%rax)
jge 0xd865
movb $0x0, -0x1(%rbp)
jmp 0xd90a
movq -0x30(%rbp), %rax
movq 0x20(%rax), %rcx
subq $0x2, %rcx
xorl %eax, %eax
cmpq $0x0, %rcx
movb %al, -0x32(%rbp)
jb 0xd892
movq -0x30(%rbp), %rax
movq 0x20(%rax), %rax
subq $0x2, %rax
cmpq $0x20, %rax
setb %al
movb %al, -0x32(%rbp)
movb -0x32(%rbp), %al
testb $0x1, %al
jne 0xd89b
jmp 0xd89d
jmp 0xd8bc
leaq 0x5b0c(%rip), %rdi      # 0x133b0
leaq 0x5a56(%rip), %rsi      # 0x13301
movl $0x10b, %edx            # imm = 0x10B
leaq 0x5a60(%rip), %rcx      # 0x13317
callq 0x3180
movq -0x30(%rbp), %rax
movq 0x20(%rax), %rcx
subq $0x2, %rcx
movq $-0x1, 0x28(%rax,%rcx,8)
movq 0x3e28(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x3e28(%rax)
movq $0x0, 0x4240(%rax)
jmp 0xd76d
jmp 0xd8f5
movq -0x20(%rbp), %rax
addq $-0x1, %rax
movq %rax, -0x20(%rbp)
jmp 0xd760
movb $0x1, -0x1(%rbp)
movb -0x1(%rbp), %al
andb $0x1, %al
addq $0x40, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)
nop