// File: /workspace/github_cpp_makefile_star2_O3/ksabry[P]bfbrute/src/ProgramIterator.h
// Function: ProgramIterator<400ul, 32ul, 12ul, 32ul>::Deserialize(std::istream&)
bool Deserialize(std::istream& input)
	{
		serializeLock.lock();

		input >> programSize >> threadOffset >> threadDelta;
		input >> currentCount;
		input >> iteratorCount;
		for (uint_fast32_t i = 0; i < iteratorCount; i++)
		{
			input >> iteratorSizes[i];
		}
		for (uint_fast32_t i = 0; i < iteratorCount; i++)
		{
			if (!iterators[i].Deserialize(input))
			{
				serializeLock.unlock();
				return false;
			}
		}
		for (uint_fast32_t i = 0; i < iteratorCount - 1; i++)
		{
			int bracketInt;
			input >> bracketInt >> brackets[i].depth;
			brackets[i].bracket = bracketInt == 0 ? Bracket::EMPTY : bracketInt == 1 ? Bracket::LEFT : Bracket::RIGHT;
		}
		for (uint_fast32_t i = 0; i < iteratorCount - 1; i++)
		{
			input >> jumps[i].zero >> jumps[i].nonzero;
		}
		input >> iteratorIdx >> bracketIdx >> remainingSize;
		input >> firstIteratorWithNonZeroDataDelta >> lastExecutionSuccessful >> lastExecutionMaxProgramIdx;

		serializeLock.unlock();
		return true;
	}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x18, %rsp
movq %rsi, %r15
movq %rdi, %r14
leaq 0x4248(%rdi), %rbp
movq %rbp, %rdi
callq 0x22d0
testl %eax, %eax
jne 0x56d5
leaq 0x18(%r14), %rsi
movq %r15, %rdi
callq 0x20f0
leaq 0x8(%r14), %rsi
movq %rax, %rdi
callq 0x20f0
leaq 0x10(%r14), %rsi
movq %rax, %rdi
callq 0x20f0
leaq 0x4270(%r14), %rsi
movq %r15, %rdi
callq 0x20f0
leaq 0x20(%r14), %r12
movq %r15, %rdi
movq %r12, %rsi
callq 0x20f0
cmpq $0x0, 0x20(%r14)
je 0x55c1
leaq 0x28(%r14), %r13
xorl %ebx, %ebx
movq %r15, %rdi
movq %r13, %rsi
callq 0x2240
incq %rbx
movq (%r12), %rax
addq $0x8, %r13
cmpq %rax, %rbx
jb 0x5568
testq %rax, %rax
je 0x55c1
leaq 0x128(%r14), %r13
xorl %ebx, %ebx
movq %r13, %rdi
movq %r15, %rsi
callq 0x57fa
testb %al, %al
je 0x56c9
incq %rbx
movq (%r12), %rax
addq $0x1e8, %r13            # imm = 0x1E8
cmpq %rax, %rbx
jb 0x5591
cmpq $0x1, %rax
je 0x5653
movq %rbp, 0x10(%rsp)
leaq 0x3e38(%r14), %r13
xorl %ebx, %ebx
leaq 0xc(%rsp), %rbp
movq %r15, %rdi
movq %rbp, %rsi
callq 0x2110
movq %rax, %rdi
movq %r13, %rsi
callq 0x20f0
movl 0xc(%rsp), %eax
xorl %ecx, %ecx
cmpl $0x1, %eax
setne %cl
incl %ecx
testl %eax, %eax
cmovel %eax, %ecx
movl %ecx, -0x8(%r13)
incq %rbx
movq (%r12), %rax
leaq -0x1(%rax), %rcx
addq $0x10, %r13
cmpq %rcx, %rbx
jb 0x55d4
cmpq $0x1, %rax
movq 0x10(%rsp), %rbp
je 0x5653
leaq 0x4030(%r14), %r13
xorl %ebx, %ebx
movq %r15, %rdi
movq %r13, %rsi
callq 0x20f0
leaq 0x8(%r13), %rsi
movq %rax, %rdi
callq 0x20f0
incq %rbx
movq (%r12), %rax
decq %rax
addq $0x10, %r13
cmpq %rax, %rbx
jb 0x5629
leaq 0x4238(%r14), %rsi
movq %r15, %rdi
callq 0x2240
leaq 0x4230(%r14), %rsi
movq %rax, %rdi
callq 0x2240
leaq 0x3e28(%r14), %rsi
movq %rax, %rdi
callq 0x2240
leaq 0x4240(%r14), %rsi
movq %r15, %rdi
callq 0x2240
leaq 0x4468(%r14), %rsi
movq %rax, %rdi
callq 0x21c0
addq $0x4470, %r14           # imm = 0x4470
movq %rax, %rdi
movq %r14, %rsi
callq 0x20f0
movq %rbp, %rdi
callq 0x2170
movb $0x1, %al
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %rbp, %rdi
callq 0x2170
xorl %eax, %eax
jmp 0x56ba
movl %eax, %edi
callq 0x2130