// File: auton1[P]viterbi/entry_getters.cpp
// Function: entry::get_multiple_genotype_counts(std::vector<bool, std::allocator<bool>> const&, std::vector<bool, std::allocator<bool>> const&, std::vector<unsigned int, std::allocator<unsigned int>>&, std::vector<unsigned int, std::allocator<unsigned int>>&) const
void entry::get_multiple_genotype_counts(const vector<bool> &include_indv, const vector<bool> &include_genotype, vector<unsigned int> &out_N_hom, vector<unsigned int> &out_N_het) const
{
	out_N_hom.assign(ALT.size()+1, 0);
	out_N_het.assign(ALT.size()+1, 0);
	pair<int, int> genotype;

	for (unsigned int ui=0; ui<N_indv; ui++)
	{
		if ((include_indv[ui] == true) && (include_genotype[ui] == true))
		{
			assert(parsed_GT[ui] == true);
			get_indv_GENOTYPE_ids(ui, genotype);

			for (int uj=0; uj<=(int)ALT.size(); uj++)
			{
				if ((genotype.first == uj) && (genotype.second == uj))
					out_N_hom[uj]++;
				else if (((genotype.first == uj) || (genotype.second == uj)) && (genotype.first != -1) && (genotype.second != -1))
					out_N_het[uj]++;
			}
		}
	}
}

// Assembly:
subq $0x68, %rsp
movq %rdi, 0x60(%rsp)
movq %rsi, 0x58(%rsp)
movq %rdx, 0x50(%rsp)
movq %rcx, 0x48(%rsp)
movq %r8, 0x40(%rsp)
movq 0x60(%rsp), %rdi
movq %rdi, 0x18(%rsp)
movq 0x48(%rsp), %rax
movq %rax, 0x10(%rsp)
addq $0x448, %rdi            # imm = 0x448
callq 0x10270
movq 0x10(%rsp), %rdi
movq %rax, %rsi
addq $0x1, %rsi
movl $0x0, 0x3c(%rsp)
leaq 0x3c(%rsp), %rdx
callq 0x4d820
movq 0x18(%rsp), %rdi
movq 0x40(%rsp), %rax
movq %rax, 0x20(%rsp)
addq $0x448, %rdi            # imm = 0x448
callq 0x10270
movq 0x20(%rsp), %rdi
movq %rax, %rsi
addq $0x1, %rsi
movl $0x0, 0x38(%rsp)
leaq 0x38(%rsp), %rdx
callq 0x4d820
leaq 0x30(%rsp), %rdi
callq 0x2a380
movl $0x0, 0x2c(%rsp)
movq 0x18(%rsp), %rcx
movl 0x2c(%rsp), %eax
cmpl 0x8(%rcx), %eax
jae 0x4cb41
movq 0x58(%rsp), %rdi
movl 0x2c(%rsp), %eax
movl %eax, %esi
callq 0xf150
andb $0x1, %al
movzbl %al, %eax
cmpl $0x1, %eax
jne 0x4cb2f
movq 0x50(%rsp), %rdi
movl 0x2c(%rsp), %eax
movl %eax, %esi
callq 0xf150
andb $0x1, %al
movzbl %al, %eax
cmpl $0x1, %eax
jne 0x4cb2f
movq 0x18(%rsp), %rdi
addq $0x560, %rdi            # imm = 0x560
movl 0x2c(%rsp), %eax
movl %eax, %esi
callq 0xf150
andb $0x1, %al
movzbl %al, %eax
cmpl $0x1, %eax
jne 0x4ca57
jmp 0x4ca76
leaq 0x288c2(%rip), %rdi     # 0x75320
leaq 0x2884b(%rip), %rsi     # 0x752b0
movl $0x1cc, %edx            # imm = 0x1CC
leaq 0x28f77(%rip), %rcx     # 0x759e8
callq 0x6300
movq 0x18(%rsp), %rdi
movl 0x2c(%rsp), %esi
leaq 0x30(%rsp), %rdx
callq 0x4bd10
movl $0x0, 0x28(%rsp)
movq 0x18(%rsp), %rdi
movl 0x28(%rsp), %eax
movl %eax, 0xc(%rsp)
addq $0x448, %rdi            # imm = 0x448
callq 0x10270
movq %rax, %rcx
movl 0xc(%rsp), %eax
cmpl %ecx, %eax
jg 0x4cb2d
movl 0x30(%rsp), %eax
cmpl 0x28(%rsp), %eax
jne 0x4cae1
movl 0x34(%rsp), %eax
cmpl 0x28(%rsp), %eax
jne 0x4cae1
movq 0x48(%rsp), %rdi
movslq 0x28(%rsp), %rsi
callq 0xe8b0
movl (%rax), %ecx
addl $0x1, %ecx
movl %ecx, (%rax)
jmp 0x4cb1b
movl 0x30(%rsp), %eax
cmpl 0x28(%rsp), %eax
je 0x4caf5
movl 0x34(%rsp), %eax
cmpl 0x28(%rsp), %eax
jne 0x4cb19
cmpl $-0x1, 0x30(%rsp)
je 0x4cb19
cmpl $-0x1, 0x34(%rsp)
je 0x4cb19
movq 0x40(%rsp), %rdi
movslq 0x28(%rsp), %rsi
callq 0xe8b0
movl (%rax), %ecx
addl $0x1, %ecx
movl %ecx, (%rax)
jmp 0x4cb1b
jmp 0x4cb1d
movl 0x28(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x28(%rsp)
jmp 0x4ca91
jmp 0x4cb2f
jmp 0x4cb31
movl 0x2c(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x2c(%rsp)
jmp 0x4c9e6
addq $0x68, %rsp
retq
nopw %cs:(%rax,%rax)