Function at 0x1800d28c0
Capabilities:
Validate payment card number using luhn algorithm

Disassembly:
mov rax, rsp
mov qword [rax + 8], rbx
mov qword [rax + 0x18], rsi
mov qword [rax + 0x10], rdx
push rbp
push rdi
push r12
push r13
push r14
mov rbp, rsp
sub rsp, 0x60
movups xmm0, xmmword [rdx]
mov rbx, r8
mov rdi, rcx
movaps xmmword [rax - 0x38], xmm6
xorps xmm2, xmm2
movsd xmm6, qword [rdx + 0x10]
movq r9, xmm0
mov rax, r9
movsd qword [rbp - 0x28], xmm6
sub rax, qword [rbp - 0x28]
xorps xmm1, xmm1
movups xmmword [rbp - 0x38], xmm0
mov r13b, byte [r9]
mov r8d, 1
mov qword [rbp + 0x48], rax
cmp r13b, 0x2d
jne 0x1800d2925
add r9, r8
mov qword [rbp - 0x38], r9
movsx ecx, byte [r9]
xor r10d, r10d
movsd xmm3, qword [0x1800c43d0]
xor r12b, r12b
xor edx, edx
lea r14d, [r10 + 0x30]
cmp cl, r14b
jne 0x1800d2953
add r9, r8
xor esi, esi
mov qword [rbp - 0x38], r9
xor r11b, r11b
jmp 0x1800d2ae9
lea eax, [rcx - 0x31]
cmp al, 8
ja 0x1800d2ecf
add r9, r8
mov esi, ecx
sub esi, r14d
mov qword [rbp - 0x38], r9
mov al, byte [r9]
cmp r13b, 0x2d
jne 0x1800d29ad
cmp al, r14b
jl 0x1800d29ed
mov r11d, 0xccccccc
cmp al, 0x39
ja 0x1800d29ed
cmp esi, r11d
jb 0x1800d298d
jne 0x1800d29e7
cmp al, 0x38
ja 0x1800d29e7
add r9, r8
movzx eax, al
lea esi, [rsi + rsi*4]
mov qword [rbp - 0x38], r9
lea esi, [rsi - 0x18]
add edx, r8d
lea esi, [rax + rsi*2]
mov al, byte [r9]
cmp al, r14b
jge 0x1800d297e
jmp 0x1800d29ed
cmp al, r14b
jl 0x1800d29ed
mov r11d, 0x19999999
cmp al, 0x39
ja 0x1800d29ed
cmp esi, r11d
jb 0x1800d29c7
jne 0x1800d29e7
cmp al, 0x35
ja 0x1800d29e7
add r9, r8
movzx eax, al
lea esi, [rsi + rsi*4]
mov qword [rbp - 0x38], r9
lea esi, [rsi - 0x18]
add edx, r8d
lea esi, [rax + rsi*2]
mov al, byte [r9]
cmp al, r14b
jge 0x1800d29b8
jmp 0x1800d29ed
mov r12b, r8b
mov r10d, esi
xor r11b, r11b
test r12b, r12b
je 0x1800d2ae9
mov al, byte [r9]
cmp r13b, 0x2d
jne 0x1800d2a5d
cmp al, r14b
jl 0x1800d2ae9
movabs rcx, 0xccccccccccccccc
cmp al, 0x39
ja 0x1800d2ae9
cmp r10, rcx
jb 0x1800d2a28
jne 0x1800d2a45
cmp al, 0x38
ja 0x1800d2a45
movzx ecx, al
add r9, r8
sub ecx, r14d
mov qword [rbp - 0x38], r9
lea rax, [r10 + r10*4]
add edx, r8d
lea r10, [rcx + rax*2]
mov al, byte [r9]
jmp 0x1800d2a02
mov rcx, r10
mov r11b, r8b
xorps xmm1, xmm1
test rcx, rcx
js 0x1800d2aa9
cvtsi2sd xmm1, rcx
jmp 0x1800d2ae1
cmp al, r14b
jl 0x1800d2ae9
movabs rcx, 0x1999999999999999
mov qword [rbp - 0x40], rcx
mov rcx, r10
cmp al, 0x39
ja 0x1800d2ae9
cmp r10, qword [rbp - 0x40]
jb 0x1800d2a87
jne 0x1800d2a48
cmp al, 0x35
ja 0x1800d2a48
movzx ecx, al
add r9, r8
sub ecx, r14d
mov qword [rbp - 0x38], r9
lea rax, [r10 + r10*4]
add edx, r8d
lea r10, [rcx + rax*2]
mov al, byte [r9]
cmp al, r14b
jge 0x1800d2a74
jmp 0x1800d2ae9
mov rax, rcx
and rcx, r8
shr rax, 1
or rax, rcx
cvtsi2sd xmm1, rax
addsd xmm1, xmm1
jmp 0x1800d2ae1
cmp al, 0x39
ja 0x1800d2ae9
add r9, r8
movzx eax, al
sub eax, r14d
mulsd xmm1, xmm3
mov qword [rbp - 0x38], r9
movd xmm0, eax
cvtdq2pd xmm0, xmm0
addsd xmm1, xmm0
mov al, byte [r9]
cmp al, r14b
jge 0x1800d2ac0
xor r14d, r14d
cmp byte [r9], 0x2e
jne 0x1800d2bc9
inc r9
mov qword [rbp - 0x38], r9
mov al, byte [r9]
sub al, 0x30
cmp al, 9
ja 0x1800d2c00
test r11b, r11b
jne 0x1800d2bc2
test r12b, r12b
jne 0x1800d2b51
mov r10d, esi
jmp 0x1800d2b51
movsx eax, byte [r9]
cmp al, 0x39
jg 0x1800d2b57
movabs rcx, 0x1fffffffffffff
cmp r10, rcx
ja 0x1800d2b57
lea ecx, [rax - 0x30]
add r9, r8
lea rax, [r10 + r10*4]
mov qword [rbp - 0x38], r9
lea r10, [rcx + rax*2]
sub r14d, r8d
test r10, r10
je 0x1800d2b51
add edx, r8d
cmp byte [r9], 0x30
jge 0x1800d2b1d
xorps xmm1, xmm1
test r10, r10
js 0x1800d2b66
cvtsi2sd xmm1, r10
jmp 0x1800d2b7e
mov rcx, r10
mov rax, r10
shr rcx, 1
and rax, r8
or rcx, rax
cvtsi2sd xmm1, rcx
addsd xmm1, xmm1
mov r11b, r8b
jmp 0x1800d2bc2
cmp al, 0x39
ja 0x1800d2bc9
cmp edx, 0x11
jge 0x1800d2bbb
movsx eax, byte [r9]
sub r14d, r8d
sub eax, 0x30
mulsd xmm1, xmm3
add r9, r8
mov qword [rbp - 0x38], r9
movd xmm0, eax
cvtdq2pd xmm0, xmm0
addsd xmm0, xmm1
comisd xmm0, xmm2
movaps xmm1, xmm0
jbe 0x1800d2bc2
add edx, r8d
jmp 0x1800d2bc2
add r9, r8
mov qword [rbp - 0x38], r9
mov al, byte [r9]
cmp al, 0x30
jge 0x1800d2b83
xor r8d, r8d
cmp byte [r9], 0x65
je 0x1800d2bdc
cmp byte [r9], 0x45
jne 0x1800d2cc8
inc r9
mov qword [rbp - 0x38], r9
test r11b, r11b
jne 0x1800d2c24
test r12b, r12b
mov ecx, esi
xorps xmm1, xmm1
cmovne rcx, r10
test rcx, rcx
js 0x1800d2c0c
cvtsi2sd xmm1, rcx
jmp 0x1800d2c21
mov dword [rdi + 0x30], 0xe
jmp 0x1800d2ed6
mov rax, rcx
and ecx, 1
shr rax, 1
or rax, rcx
cvtsi2sd xmm1, rax
addsd xmm1, xmm1
mov r11b, 1
mov al, byte [r9]
xor cl, cl
cmp al, 0x2b
je 0x1800d2c33
cmp al, 0x2d
jne 0x1800d2c3d
mov cl, 1
inc r9
mov qword [rbp - 0x38], r9
mov al, byte [r9]
cmp al, 0x30
jl 0x1800d2d84
movsx eax, byte [r9]
cmp al, 0x39
jg 0x1800d2d84
inc r9
lea r8d, [rax - 0x30]
mov qword [rbp - 0x38], r9
test cl, cl
je 0x1800d2d37
lea ecx, [r14 + 0x7ffffff7]
mov eax, 0x66666667
imul ecx
sar edx, 2
mov eax, edx
shr eax, 0x1f
add edx, eax
cmp byte [r9], 0x30
jl 0x1800d2cc5
mov al, byte [r9]
cmp al, 0x39
ja 0x1800d2cc5
movsx eax, byte [r9]
lea r8d, [r8 + r8*4]
inc r9
lea r8d, [r8 - 0x18]
mov qword [rbp - 0x38], r9
lea r8d, [rax + r8*2]
cmp r8d, edx
jle 0x1800d2cbe
mov al, byte [r9]
cmp al, 0x30
jl 0x1800d2cc5
cmp al, 0x39
ja 0x1800d2cba
inc r9
mov al, byte [r9]
cmp al, 0x30
jge 0x1800d2cac
mov qword [rbp - 0x38], r9
mov al, byte [r9]
cmp al, 0x30
jge 0x1800d2c85
neg r8d
test r11b, r11b
je 0x1800d2db3
lea ecx, [r8 + r14]
mov edx, 0xfffffecc
cmp ecx, edx
jge 0x1800d2d90
mulsd xmm1, qword [0x1800c4178]
lea eax, [rcx + 0x134]
cmp eax, edx
jl 0x1800d2d10
movsxd rax, ecx
lea rax, [rax*8 + 0x9a0]
lea rcx, [0x1800bd120]
movaps xmm2, xmm1
sub rcx, rax
divsd xmm2, qword [rcx]
comisd xmm2, xmmword [0x1800c4588]
ja 0x1800d2d70
cmp r13b, 0x2d
jne 0x1800d2d27
xorps xmm2, xmmword [0x1800c4c70]
movaps xmm1, xmm2
mov rcx, rbx
call fcn.1800d32d8
jmp 0x1800d2ebf
mov edx, 0x134
sub edx, r14d
jmp 0x1800d2d65
movsx eax, byte [r9]
cmp al, 0x39
jg 0x1800d2cc8
lea r8d, [r8 + r8*4]
inc r9
lea r8d, [r8 - 0x18]
mov qword [rbp - 0x38], r9
lea r8d, [rax + r8*2]
cmp r8d, edx
jg 0x1800d2d70
cmp byte [r9], 0x30
jge 0x1800d2d41
jmp 0x1800d2cc8
mov dword [rdi + 0x30], 0xd
mov rax, qword [rbp + 0x48]
mov qword [rdi + 0x38], rax
jmp 0x1800d2ede
mov dword [rdi + 0x30], 0xf
jmp 0x1800d2ed6
movsxd rax, ecx
shl rax, 3
test ecx, ecx
js 0x1800d2cff
lea rcx, [0x1800bd120]
movaps xmm2, xmm1
mulsd xmm2, qword [rax + rcx]
jmp 0x1800d2d10
test r12b, r12b
je 0x1800d2dde
mov rcx, rbx
cmp r13b, 0x2d
jne 0x1800d2dd1
neg r10
mov rdx, r10
call fcn.1800d34d8
jmp 0x1800d2ebf
mov rdx, r10
call fcn.1800d33c0
jmp 0x1800d2ebf
cmp r13b, 0x2d
jne 0x1800d2eb5
mov rdx, qword [rbx + 0x40]
neg esi
mov rcx, qword [rbx + 0x38]
mov rax, rdx
sub rax, rcx
cmp rax, 0x10
jge 0x1800d2e8b
mov r8, qword [rbx + 0x30]
test r8, r8
jne 0x1800d2e43
cmp qword [rbx + 0x20], r8
jne 0x1800d2e3d
mov ecx, 0x810
call fcn.180143a68
lea rcx, [rax + 0x10]
mov qword [rax], rcx
add rcx, 0x800
mov qword [rax + 8], rcx
mov rcx, qword [rbx + 0x38]
mov r8, qword [rbx + 0x30]
mov qword [rbx + 0x20], rax
mov qword [rbx + 0x28], rax
mov rdx, qword [rbx + 0x48]
jmp 0x1800d2e50
sub rdx, r8
lea rax, [rdx + 1]
shr rax, 1
add rdx, rax
mov r9, qword [rbx + 0x20]
sub rcx, r8
lea r8, [rcx + 0x10]
cmp rdx, r8
cmovae r8, rdx
test r8, r8
je 0x1800d2e7a
mov rdx, qword [r9]
lea rax, [rdx + r8]
mov qword [r9], rax
cmp rax, qword [r9 + 8]
jbe 0x1800d2e7c
mov qword [r9], rdx
xor edx, edx
lea rax, [rdx + r8]
mov qword [rbx + 0x30], rdx
mov qword [rbx + 0x40], rax
add rcx, rdx
lea rax, [rcx + 0x10]
xorps xmm0, xmm0
mov qword [rbx + 0x38], rax
test esi, esi
movsxd rax, esi
mov edx, 0x1f6
movups xmmword [rcx], xmm0
mov qword [rcx], rax
mov eax, 0xb6
cmovns ax, dx
mov word [rcx + 0xe], ax
jmp 0x1800d2ede
mov edx, esi
mov rcx, rbx
call fcn.1800d3600
test al, al
jne 0x1800d2ede
mov dword [rdi + 0x30], 0x10
jmp 0x1800d2d77
mov dword [rdi + 0x30], 3
sub r9, qword [rbp - 0x28]
mov qword [rdi + 0x38], r9
mov rax, qword [rbp + 0x38]
lea r11, [rsp + 0x60]
movups xmm0, xmmword [rbp - 0x38]
mov rbx, qword [r11 + 0x30]
mov rsi, qword [r11 + 0x40]
movups xmmword [rax], xmm0
movsd qword [rax + 0x10], xmm6
movaps xmm6, xmmword [rsp + 0x50]
mov rsp, r11
pop r14
pop r13
pop r12
pop rdi
pop rbp
ret