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

Disassembly:
push r14
push r13
push r12
push rbp
push rdi
push rsi
push rbx
sub rsp, 0x220
test rdx, rdx
mov r9, rcx
mov rax, rdx
mov rsi, r8
jle 0x14000491e
mov dl, byte [rcx]
lea ecx, [rdx - 0x2b]
and cl, 0xfd
jne 0x14000491e
cmp dl, 0x2d
movsd xmm2, qword [0x14002fa28]
mov r11b, 1
je 0x14000492d
movsd xmm2, qword [0x14002fa20]
jmp 0x14000492d
movsd xmm2, qword [0x14002fa20]
xor r11d, r11d
xor ebx, ebx
jmp 0x140004932
mov ebx, 1
cmp rbx, 1
sbb rdx, rdx
add rdx, 3
cmp rdx, rax
jl 0x140004954
or r8, 0xffffffffffffffff
cmp rbx, rax
jge 0x140004a67
jmp 0x140004a52
mov dl, byte [r9 + rbx]
mov rcx, rbx
mov r8d, edx
and r8d, 0xffffffdf
cmp r8b, 0x4e
je 0x14000496f
cmp dl, 0x49
jne 0x1400049e4
jmp 0x1400049e9
mov dl, byte [r9 + rbx + 1]
and edx, 0xffffffdf
cmp dl, 0x41
jne 0x140004db7
mov dl, byte [r9 + rbx + 2]
and edx, 0xffffffdf
cmp dl, 0x4e
jne 0x140004db7
add rbx, 3
cmp rbx, rax
jge 0x1400049c4
mov al, byte [r9 + rcx + 3]
mov edx, eax
and edx, 0xffffffdf
sub edx, 0x41
cmp dl, 0x19
jbe 0x140004db7
lea edx, [rax - 0x30]
cmp dl, 9
jbe 0x140004db7
cmp al, 0x5f
je 0x140004db7
movsd xmm0, qword [0x14002fa30]
xorps xmm1, xmm1
mulsd xmm0, xmm0
cvtsd2ss xmm0, xmm0
mulss xmm0, xmm1
cvtss2sd xmm0, xmm0
jmp 0x140004c2e
cmp dl, 0x69
jne 0x140004a52
mov dl, byte [r9 + rbx + 1]
and edx, 0xffffffdf
cmp dl, 0x4e
jne 0x140004db7
mov dl, byte [r9 + rbx + 2]
and edx, 0xffffffdf
cmp dl, 0x46
jne 0x140004db7
add rbx, 3
cmp rbx, rax
jge 0x140004a3e
mov al, byte [r9 + rcx + 3]
mov edx, eax
and edx, 0xffffffdf
sub edx, 0x41
cmp dl, 0x19
jbe 0x140004db7
lea edx, [rax - 0x30]
cmp dl, 9
jbe 0x140004db7
cmp al, 0x5f
je 0x140004db7
movsd xmm0, qword [0x14002fa20]
xorps xmm1, xmm1
divsd xmm0, xmm1
jmp 0x140004c37
movsx rdx, byte [r9 + rbx]
or r8, 0xffffffffffffffff
lea ecx, [rdx - 0x30]
cmp cl, 9
ja 0x140004a67
lea r8, [rdx - 0x30]
xor edx, edx
xor edi, edi
cmp rbx, rax
jge 0x140004b36
movsx rcx, byte [r9 + rbx]
lea r10d, [rcx - 0x30]
cmp r10b, 9
ja 0x140004aa4
imul rdx, rdx, 0xa
inc rdi
lea rdx, [rdx + rcx - 0x30]
inc rbx
cmp rbx, rax
jge 0x140004b36
cmp byte [r9 + rbx], 0x5f
je 0x140004a8f
jmp 0x140004a6b
cmp byte [r9 + rbx], 0x2e
jne 0x140004b36
inc rbx
xor r10d, r10d
test rdi, rdi
jne 0x140004ade
cmp rbx, rax
jge 0x140004ade
cmp byte [r9 + rbx], 0x30
jne 0x140004dbb
inc r10
inc rbx
cmp rbx, rax
jge 0x140004ade
cmp byte [r9 + rbx], 0x5f
je 0x140004acd
jmp 0x140004aba
cmp r8, 0xffffffffffffffff
jne 0x140004aff
cmp rbx, rax
jge 0x140004aff
movsx rcx, byte [r9 + rbx]
or r8, 0xffffffffffffffff
lea ebp, [rcx - 0x30]
cmp bpl, 9
ja 0x140004aff
lea r8, [rcx - 0x30]
xor ecx, ecx
lea r12, [r10 + rcx]
cmp rbx, rax
jge 0x140004b3b
movsx rbp, byte [r9 + rbx]
lea r13d, [rbp - 0x30]
cmp r13b, 9
ja 0x140004b3b
imul rdx, rdx, 0xa
inc rcx
lea rdx, [rdx + rbp - 0x30]
inc rbx
cmp rbx, rax
jge 0x140004b01
cmp byte [r9 + rbx], 0x5f
je 0x140004b25
jmp 0x140004b01
xor r12d, r12d
xor ecx, ecx
mov rbp, rdi
add rbp, rcx
jne 0x140004b5b
test rbx, rbx
je 0x140004dca
cmp rbx, 1
jne 0x140004b5b
test r11b, r11b
jne 0x140004db7
lea r10, [rbx + 1]
cmp r10, rax
jge 0x140004be3
mov r11b, byte [r9 + rbx]
and r11d, 0xffffffdf
cmp r11b, 0x45
jne 0x140004be3
mov r11b, byte [r9 + r10]
lea r13d, [r11 - 0x2b]
and r13b, 0xfd
jne 0x140004b97
cmp r11b, 0x2d
setne r11b
add rbx, 2
movzx r11d, r11b
lea r11, [r11 + r11 - 1]
jmp 0x140004ba0
mov rbx, r10
mov r11d, 1
mov r14b, byte [r9 + rbx]
lea r10d, [r14 - 0x30]
cmp r10b, 9
ja 0x140004db7
xor r10d, r10d
cmp rbx, rax
jge 0x140004bec
movsx r13, byte [r9 + rbx]
lea r14d, [r13 - 0x30]
cmp r14b, 9
ja 0x140004bec
imul r10, r10, 0xa
lea r10, [r10 + r13 - 0x30]
inc rbx
cmp rbx, rax
jge 0x140004bec
cmp byte [r9 + rbx], 0x5f
je 0x140004bd2
jmp 0x140004bb5
mov r11d, 1
xor r10d, r10d
imul r10, r11
sub r10, r12
mov r11, r10
neg r11
cmovs r11, r10
cmp r11, 0x3e7
jg 0x140004c0e
cmp rbp, 0xf
jg 0x140004c3d
jmp 0x140004c51
test rdx, rdx
xorps xmm0, xmm0
je 0x140004c2e
test r10, r10
js 0x140004c37
movsd xmm1, qword [0x14002fa20]
divsd xmm1, xmm0
mulsd xmm1, xmm2
movaps xmm0, xmm1
movsd qword [rsi], xmm0
jmp 0x140004dca
mulsd xmm0, xmm2
jmp 0x140004c2e
cmp r8, 8
jg 0x140004cfd
cmp rbp, 0x10
jne 0x140004cfd
cmp r11, 0x16
jle 0x140004c70
mov eax, 0xf
sub rax, rdi
sub rax, rcx
lea rcx, [rax + 0x16]
cmp rcx, r11
jge 0x140004cb6
jmp 0x140004cfd
test rdx, rdx
js 0x140004c7c
cvtsi2sd xmm0, rdx
jmp 0x140004c91
mov rax, rdx
and edx, 1
shr rax, 1
or rax, rdx
cvtsi2sd xmm0, rax
addsd xmm0, xmm0
lea rax, [0x14002f6a0]
test r10, r10
mulsd xmm0, xmm2
movsd xmm1, qword [rax + r11*8]
js 0x140004cad
mulsd xmm0, xmm1
jmp 0x140004c2e
divsd xmm0, xmm1
jmp 0x140004c2e
test r10, r10
js 0x140004cfd
test rdx, rdx
js 0x140004cc7
cvtsi2sd xmm1, rdx
jmp 0x140004cdc
mov rcx, rdx
and edx, 1
shr rcx, 1
or rcx, rdx
cvtsi2sd xmm1, rcx
addsd xmm1, xmm1
mulsd xmm1, xmm2
sub r11, rax
lea rdx, [0x14002f6a0]
movaps xmm0, xmm1
mulsd xmm0, qword [rdx + rax*8]
mulsd xmm0, qword [rdx + r11*8]
jmp 0x140004c2e
lea rdi, [rsp + 0x2c]
mov edx, 0x1f4
mov rcx, rdi
call fcn.140003148
xor edx, edx
test rbx, rbx
jle 0x140004d1f
xor edx, edx
cmp byte [r9], 0x2e
sete dl
mov ebp, 0x7fe5
xor ecx, ecx
shl rbp, 0x2b
lea r8, [rcx + 1]
cmp rbx, rdx
jle 0x140004d41
mov al, byte [r9 + rdx]
cmp al, 0x39
ja 0x140004d41
bt rbp, rax
jb 0x140004d8e
sar r10, 0x3f
mov rax, r11
mov byte [rsp + rcx + 0x2c], 0x45
and r10d, 2
cqo
add r10d, 0x2b
mov byte [rsp + r8 + 0x2c], r10b
mov r8d, 0xa
idiv r8
add edx, 0x30
mov byte [rsp + rcx + 0x30], dl
cqo
idiv r8
add edx, 0x30
add eax, 0x30
mov byte [rsp + rcx + 0x2f], dl
xor edx, edx
mov byte [rsp + rcx + 0x2e], al
mov rcx, rdi
call fcn.140024870
jmp 0x140004c2e
cmp rcx, 0x1ed
jg 0x140004d9e
mov byte [rsp + rcx + 0x2c], al
mov rcx, r8
inc rdx
cmp rbx, rdx
jle 0x140004d2a
mov al, byte [r9 + rdx]
cmp al, 0x2e
je 0x140004d9e
cmp al, 0x5f
je 0x140004d9e
jmp 0x140004d2a
xor ebx, ebx
jmp 0x140004dca
cmp r8, 0xffffffffffffffff
jne 0x140004aff
jmp 0x140004ae9
mov rax, rbx
add rsp, 0x220
pop rbx
pop rsi
pop rdi
pop rbp
pop r12
pop r13
pop r14
ret