// File: xdsopl[P]FEC/./find_locations.hh
// Function: FindLocations<6, GF::Types<4, 19, unsigned char>>::search(GF::Value<4, 19, unsigned char>*, int, GF::Index<4, 19, unsigned char>*)
static int search(ValueType *locator, int locator_degree, IndexType *locations)
	{
		if (locator_degree == 1) {
			locations[0] = (index(locator[0]) / index(locator[1])) / IndexType(1);
			return 1;
		}
		if (locator_degree == 2) {
			if (!locator[1] || !locator[0])
				return 0;
			ValueType a(locator[2]), b(locator[1]), c(locator[0]);
			ValueType ba(b/a), R(Artin_Schreier_imap(a*c/(b*b)));
			if (!R)
				return 0;
			locations[0] = index(ba * R) / IndexType(1);
			locations[1] = index(ba * R + ba) / IndexType(1);
			return 2;
		}
		return Chien<NR, GF>::search(locator, locator_degree, locations);
	}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x50, %rsp
movq %rdi, -0x10(%rbp)
movl %esi, -0x14(%rbp)
movq %rdx, -0x20(%rbp)
cmpl $0x1, -0x14(%rbp)
jne 0xd79b
movq -0x10(%rbp), %rax
movb (%rax), %al
movb %al, -0x24(%rbp)
movzbl -0x24(%rbp), %edi
callq 0xc200
movb %al, -0x23(%rbp)
movq -0x10(%rbp), %rax
movb 0x1(%rax), %al
movb %al, -0x26(%rbp)
movzbl -0x26(%rbp), %edi
callq 0xc200
movb %al, -0x25(%rbp)
movb -0x23(%rbp), %al
movzbl %al, %edi
movzbl -0x25(%rbp), %esi
callq 0xd240
movb %al, -0x22(%rbp)
leaq -0x27(%rbp), %rdi
movl $0x1, %esi
callq 0xbd80
movb -0x22(%rbp), %al
movzbl %al, %edi
movzbl -0x27(%rbp), %esi
callq 0xd240
movb %al, -0x21(%rbp)
movq -0x20(%rbp), %rax
movb -0x21(%rbp), %cl
movb %cl, (%rax)
movl $0x1, -0x4(%rbp)
jmp 0xd95a
cmpl $0x2, -0x14(%rbp)
jne 0xd947
movq -0x10(%rbp), %rdi
addq $0x1, %rdi
callq 0xbce0
testb $0x1, %al
jne 0xd7b8
jmp 0xd7c5
movq -0x10(%rbp), %rdi
callq 0xbce0
testb $0x1, %al
jne 0xd7d1
movl $0x0, -0x4(%rbp)
jmp 0xd95a
movq -0x10(%rbp), %rax
movb 0x2(%rax), %al
movb %al, -0x28(%rbp)
movq -0x10(%rbp), %rax
movb 0x1(%rax), %al
movb %al, -0x29(%rbp)
movq -0x10(%rbp), %rax
movb (%rax), %al
movb %al, -0x2a(%rbp)
movb -0x29(%rbp), %al
movb %al, -0x2c(%rbp)
movb -0x28(%rbp), %al
movb %al, -0x2d(%rbp)
movb -0x2c(%rbp), %al
movzbl %al, %edi
movzbl -0x2d(%rbp), %esi
callq 0xdbd0
movb %al, -0x2b(%rbp)
movb -0x28(%rbp), %al
movb %al, -0x31(%rbp)
movb -0x2a(%rbp), %al
movb %al, -0x32(%rbp)
movb -0x31(%rbp), %al
movzbl %al, %edi
movzbl -0x32(%rbp), %esi
callq 0xd9f0
movb %al, -0x30(%rbp)
movb -0x29(%rbp), %al
movb %al, -0x34(%rbp)
movb -0x29(%rbp), %al
movb %al, -0x35(%rbp)
movb -0x34(%rbp), %al
movzbl %al, %edi
movzbl -0x35(%rbp), %esi
callq 0xd9f0
movb %al, -0x33(%rbp)
movb -0x30(%rbp), %al
movzbl %al, %edi
movzbl -0x33(%rbp), %esi
callq 0xdbd0
movb %al, -0x2f(%rbp)
movzbl -0x2f(%rbp), %edi
callq 0xdcc0
movb %al, -0x2e(%rbp)
leaq -0x2e(%rbp), %rdi
callq 0xbce0
testb $0x1, %al
jne 0xd87f
movl $0x0, -0x4(%rbp)
jmp 0xd95a
movb -0x2b(%rbp), %al
movb %al, -0x39(%rbp)
movb -0x2e(%rbp), %al
movb %al, -0x3a(%rbp)
movb -0x39(%rbp), %al
movzbl %al, %edi
movzbl -0x3a(%rbp), %esi
callq 0xd9f0
movb %al, -0x38(%rbp)
movzbl -0x38(%rbp), %edi
callq 0xc200
movb %al, -0x37(%rbp)
leaq -0x3b(%rbp), %rdi
movl $0x1, %esi
callq 0xbd80
movb -0x37(%rbp), %al
movzbl %al, %edi
movzbl -0x3b(%rbp), %esi
callq 0xd240
movb %al, -0x36(%rbp)
movq -0x20(%rbp), %rax
movb -0x36(%rbp), %cl
movb %cl, (%rax)
movb -0x2b(%rbp), %al
movb %al, -0x40(%rbp)
movb -0x2e(%rbp), %al
movb %al, -0x41(%rbp)
movb -0x40(%rbp), %al
movzbl %al, %edi
movzbl -0x41(%rbp), %esi
callq 0xd9f0
movb %al, -0x3f(%rbp)
movb -0x2b(%rbp), %al
movb %al, -0x42(%rbp)
movb -0x3f(%rbp), %al
movzbl %al, %edi
movzbl -0x42(%rbp), %esi
callq 0xc000
movb %al, -0x3e(%rbp)
movzbl -0x3e(%rbp), %edi
callq 0xc200
movb %al, -0x3d(%rbp)
leaq -0x43(%rbp), %rdi
movl $0x1, %esi
callq 0xbd80
movb -0x3d(%rbp), %al
movzbl %al, %edi
movzbl -0x43(%rbp), %esi
callq 0xd240
movb %al, -0x3c(%rbp)
movq -0x20(%rbp), %rax
movb -0x3c(%rbp), %cl
movb %cl, 0x1(%rax)
movl $0x2, -0x4(%rbp)
jmp 0xd95a
movq -0x10(%rbp), %rdi
movl -0x14(%rbp), %esi
movq -0x20(%rbp), %rdx
callq 0xdd40
movl %eax, -0x4(%rbp)
movl -0x4(%rbp), %eax
addq $0x50, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)
nopl (%rax)