// File: ksabry[P]bfbrute/src/ProgramIterator.h
// Function: ProgramIterator<400ul, 32ul, 12ul, 32ul>::NextIteratorSizes()
bool NextIteratorSizes()
	{
		int_fast32_t iteratorSizesIdx;
	restart:;
		iteratorSizesIdx = iteratorCount - 2;
		while (iteratorSizesIdx >= 0)
		{
			if (remainingSize == 0)
			{
				remainingSize += iteratorSizes[iteratorSizesIdx];
				assert(iteratorSizesIdx >= 0 && iteratorSizesIdx < max_program_size);
				iteratorSizes[iteratorSizesIdx] = 0;
				iteratorSizesIdx--;
			}
			else
			{
				assert(iteratorSizesIdx >= 0 && iteratorSizesIdx < max_program_size);
#ifdef MAX_FIRST_SIZE
				if (iteratorSizesIdx == 0 && iteratorSizes[0] >= MAX_FIRST_SIZE)
					return false;
#endif
				iteratorSizes[iteratorSizesIdx]++;
				assert(iteratorCount - 1 >= 0 && iteratorCount - 1 < max_program_size);
				remainingSize--;
#ifdef NO_ENDING
				if (remainingSize != 0) goto restart;
#endif
				iteratorSizes[iteratorCount - 1] = remainingSize;
				return true;
			}
		}
		return false;
	}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x30, %rsp
movq %rdi, -0x10(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x20(%rbp)
movq -0x20(%rbp), %rax
movq 0x20(%rax), %rax
subq $0x2, %rax
movq %rax, -0x18(%rbp)
cmpq $0x0, -0x18(%rbp)
jl 0xded8
movq -0x20(%rbp), %rax
cmpq $0x0, 0x3e28(%rax)
jne 0xddcb
movq -0x20(%rbp), %rax
movq -0x18(%rbp), %rcx
movq 0x28(%rax,%rcx,8), %rcx
addq 0x3e28(%rax), %rcx
movq %rcx, 0x3e28(%rax)
xorl %eax, %eax
cmpq $0x0, -0x18(%rbp)
movb %al, -0x21(%rbp)
jl 0xdd7f
cmpq $0x20, -0x18(%rbp)
setb %al
movb %al, -0x21(%rbp)
movb -0x21(%rbp), %al
testb $0x1, %al
jne 0xdd88
jmp 0xdd8a
jmp 0xdda9
leaq 0x565e(%rip), %rdi      # 0x133ef
leaq 0x5569(%rip), %rsi      # 0x13301
movl $0x1db, %edx            # imm = 0x1DB
leaq 0x5688(%rip), %rcx      # 0x1342c
callq 0x3180
movq -0x20(%rbp), %rax
movq -0x18(%rbp), %rcx
movq $0x0, 0x28(%rax,%rcx,8)
movq -0x18(%rbp), %rax
addq $-0x1, %rax
movq %rax, -0x18(%rbp)
jmp 0xded3
xorl %eax, %eax
cmpq $0x0, -0x18(%rbp)
movb %al, -0x22(%rbp)
jl 0xdde2
cmpq $0x20, -0x18(%rbp)
setb %al
movb %al, -0x22(%rbp)
movb -0x22(%rbp), %al
testb $0x1, %al
jne 0xddeb
jmp 0xdded
jmp 0xde0c
leaq 0x55fb(%rip), %rdi      # 0x133ef
leaq 0x5506(%rip), %rsi      # 0x13301
movl $0x1e1, %edx            # imm = 0x1E1
leaq 0x5625(%rip), %rcx      # 0x1342c
callq 0x3180
cmpq $0x0, -0x18(%rbp)
jne 0xde27
movq -0x20(%rbp), %rax
cmpq $0x1, 0x28(%rax)
jl 0xde27
movb $0x0, -0x1(%rbp)
jmp 0xdedc
movq -0x20(%rbp), %rax
movq -0x18(%rbp), %rcx
movq 0x28(%rax,%rcx,8), %rdx
addq $0x1, %rdx
movq %rdx, 0x28(%rax,%rcx,8)
movq 0x20(%rax), %rcx
subq $0x1, %rcx
xorl %eax, %eax
cmpq $0x0, %rcx
movb %al, -0x23(%rbp)
jb 0xde66
movq -0x20(%rbp), %rax
movq 0x20(%rax), %rax
subq $0x1, %rax
cmpq $0x20, %rax
setb %al
movb %al, -0x23(%rbp)
movb -0x23(%rbp), %al
testb $0x1, %al
jne 0xde6f
jmp 0xde71
jmp 0xde90
leaq 0x563b(%rip), %rdi      # 0x134b3
leaq 0x5482(%rip), %rsi      # 0x13301
movl $0x1e7, %edx            # imm = 0x1E7
leaq 0x55a1(%rip), %rcx      # 0x1342c
callq 0x3180
movq -0x20(%rbp), %rax
movq 0x3e28(%rax), %rcx
addq $-0x1, %rcx
movq %rcx, 0x3e28(%rax)
cmpq $0x0, 0x3e28(%rax)
je 0xdeb5
jmp 0xdd24
movq -0x20(%rbp), %rax
movq 0x3e28(%rax), %rdx
movq 0x20(%rax), %rcx
subq $0x1, %rcx
movq %rdx, 0x28(%rax,%rcx,8)
movb $0x1, -0x1(%rbp)
jmp 0xdedc
jmp 0xdd34
movb $0x0, -0x1(%rbp)
movb -0x1(%rbp), %al
andb $0x1, %al
addq $0x30, %rsp
popq %rbp
retq
nopw (%rax,%rax)