// File: tewalds[P]pentagod/move.cpp
// Function: check(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>)
void check(const std::string a, const std::string b) {
	Move ma(a);
	Move mb(b);
	Move ar = ma.rotate(mb.orientation());
	Move br = mb.rotate(ma.orientation());
	if(ma != br || mb != ar){
		printf("%s => %s    %s => %s\n", a.c_str(),  ar.to_s(true).c_str(), b.c_str(), br.to_s(true).c_str());
		printf("%s\n", Board().to_s(true).c_str());
	}
	assert(ma == br);
	assert(mb == ar);
}

// Assembly:
subq $0x108, %rsp            # imm = 0x108
movq %rsi, %rax
movq %rdi, %rsi
movq %rsi, 0x40(%rsp)
movq %rax, 0x48(%rsp)
movq %rsi, 0x100(%rsp)
movq %rax, 0xf8(%rsp)
leaq 0xf4(%rsp), %rdi
movl $0x8, %edx
callq 0x155f0
movq 0x48(%rsp), %rsi
leaq 0xf0(%rsp), %rdi
movl $0x8, %edx
callq 0x155f0
leaq 0xf0(%rsp), %rdi
callq 0x28640
movl %eax, %esi
leaq 0xf4(%rsp), %rdi
callq 0xd2b0
movw %ax, 0xec(%rsp)
leaq 0xf4(%rsp), %rdi
callq 0x28640
movl %eax, %esi
leaq 0xf0(%rsp), %rdi
callq 0xd2b0
movw %ax, 0xe8(%rsp)
leaq 0xf4(%rsp), %rdi
leaq 0xe8(%rsp), %rsi
callq 0x28660
testb $0x1, %al
jne 0x252df
leaq 0xf0(%rsp), %rdi
leaq 0xec(%rsp), %rsi
callq 0x28660
testb $0x1, %al
jne 0x252df
jmp 0x25450
movq 0x40(%rsp), %rdi
callq 0x4160
movq %rax, 0x18(%rsp)
leaq 0xc8(%rsp), %rdi
movq %rdi, 0x20(%rsp)
leaq 0xec(%rsp), %rsi
movl $0x1, %edx
movl %edx, 0x34(%rsp)
callq 0xdec0
movq 0x20(%rsp), %rdi
callq 0x4160
movq 0x48(%rsp), %rdi
movq %rax, 0x28(%rsp)
callq 0x4160
movl 0x34(%rsp), %edx
movq %rax, 0x38(%rsp)
leaq 0xa8(%rsp), %rdi
leaq 0xe8(%rsp), %rsi
callq 0xdec0
jmp 0x2534a
leaq 0xa8(%rsp), %rdi
callq 0x4160
movq 0x18(%rsp), %rsi
movq 0x28(%rsp), %rdx
movq 0x38(%rsp), %rcx
movq %rax, %r8
leaq 0x1b16a(%rip), %rdi     # 0x404da
xorl %eax, %eax
callq 0x4060
jmp 0x25379
leaq 0xa8(%rsp), %rdi
callq 0x4210
leaq 0xc8(%rsp), %rdi
callq 0x4210
leaq 0x50(%rsp), %rdi
movq %rdi, 0x8(%rsp)
callq 0xcfe0
movq 0x8(%rsp), %rsi
leaq 0x78(%rsp), %rdi
movq %rdi, 0x10(%rsp)
movl $0x1, %edx
callq 0x1f740
movq 0x10(%rsp), %rdi
callq 0x4160
movq %rax, %rsi
leaq 0x1b11d(%rip), %rdi     # 0x404ec
xorl %eax, %eax
callq 0x4060
jmp 0x253d8
leaq 0x78(%rsp), %rdi
callq 0x4210
jmp 0x25450
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xa0(%rsp)
movl %eax, 0x9c(%rsp)
jmp 0x2541b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xa0(%rsp)
movl %eax, 0x9c(%rsp)
leaq 0xa8(%rsp), %rdi
callq 0x4210
leaq 0xc8(%rsp), %rdi
callq 0x4210
jmp 0x254d0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xa0(%rsp)
movl %eax, 0x9c(%rsp)
leaq 0x78(%rsp), %rdi
callq 0x4210
jmp 0x254d0
leaq 0xf4(%rsp), %rdi
leaq 0xe8(%rsp), %rsi
callq 0x285a0
testb $0x1, %al
jne 0x2546b
jmp 0x2546d
jmp 0x2548c
leaq 0x1b07c(%rip), %rdi     # 0x404f0
leaq 0x1b009(%rip), %rsi     # 0x40484
movl $0x19, %edx
leaq 0x1b072(%rip), %rcx     # 0x404f9
callq 0x4250
leaq 0xf0(%rsp), %rdi
leaq 0xec(%rsp), %rsi
callq 0x285a0
testb $0x1, %al
jne 0x254a7
jmp 0x254a9
jmp 0x254c8
leaq 0x1b07a(%rip), %rdi     # 0x4052a
leaq 0x1afcd(%rip), %rsi     # 0x40484
movl $0x1a, %edx
leaq 0x1b036(%rip), %rcx     # 0x404f9
callq 0x4250
addq $0x108, %rsp            # imm = 0x108
retq
movq 0xa0(%rsp), %rdi
callq 0x4660
nopl (%rax)