Function at 0x14002a2a0
Capabilities:
Parse credit card information

Disassembly:
push rsi
push r14
push r15
sub rsp, 0x30
mov r9d, dword [rcx + 0x20]
mov r15, r8
mov rsi, rdx
mov r14, rcx
lea eax, [r9 - 1]
mov dword [rcx + 0x20], eax
test r9d, r9d
je 0x14002a856
mov rdx, qword [rcx + 0x10]
mov qword [rsp + 0x58], rbx
mov qword [rsp + 0x60], rbp
mov qword [rsp + 0x68], rdi
mov qword [rsp + 0x28], r12
mov qword [rsp + 0x20], r13
cmp r8, rdx
je 0x14002a82c
lea rbp, [0x140000000]
xor r13d, r13d
movabs r9, 0x8000240000000000
movzx r10d, byte [r15]
movsx ecx, r10b
sub ecx, 0x24
je 0x14002a4fb
sub ecx, 1
je 0x14002a36c
sub ecx, 3
je 0x14002a673
cmp ecx, 1
jne case.0x14002a395.51
movzx eax, byte [r14 + 0x24]
mov ecx, eax
sub rcx, 1
lea edx, [rax - 1]
js 0x14002a867
lea rax, [rcx + 3]
shl rax, 4
add rax, r14
nop dword [rax + rax]
cmp qword [rax], 0xffffffffffffffff
je 0x14002a632
dec edx
sub rax, 0x10
sub rcx, 1
js 0x14002a867
jmp 0x14002a350
movzx r8d, byte [r15 + 1]
movsx eax, r8b
add eax, 0xffffffd0
cmp eax, 0x36
ja case.0x14002a395.51
cdqe
movzx eax, byte [rax + rbp + 0x2a914]
mov ecx, dword [rbp + rax*4 + 0x2a904]
add rcx, rbp
jmp rcx
lea rcx, [r15 + 2]
lea rax, [rdx - 1]
cmp rcx, rax
jae 0x14002a89a
movzx r9d, byte [rcx]
cmp byte [rsi], r9b
jne 0x14002a829
mov r8, qword [r14 + 8]
lea rax, [rsi + 1]
movzx r10d, byte [rcx + 1]
mov ecx, 1
cmp rax, r8
jae 0x14002a829
movzx edx, byte [rax]
cmp dl, r10b
jne 0x14002a3f3
sub ecx, 1
jne 0x14002a3fa
lea rsi, [rax + 1]
test rsi, rsi
je 0x14002a82c
add r15, 4
jmp 0x14002a616
cmp dl, r9b
jne 0x14002a3fa
inc ecx
inc rax
cmp rax, r8
jb 0x14002a3d0
jmp 0x14002a829
cmp byte [r15 + 2], 0x5b
jne 0x14002a8bc
cmp byte [r15 + 3], 0x5e
lea rax, [r15 + 3]
jne 0x14002a420
inc rax
cmp rax, rdx
je 0x14002a8ab
movzx ecx, byte [rax]
inc rax
cmp cl, 0x25
jne 0x14002a43c
cmp rax, rdx
jae 0x14002a43c
inc rax
cmp byte [rax], 0x5d
jne 0x14002a420
lea rbx, [rax + 1]
cmp rsi, qword [r14]
jne 0x14002a44e
xor al, al
jmp 0x14002a452
movzx eax, byte [rsi - 1]
movzx ecx, al
lea r8, [rbx - 1]
lea rdx, [r15 + 2]
call fcn.14002a1f0
test eax, eax
jne 0x14002a829
movzx ecx, byte [rsi]
lea r8, [rbx - 1]
lea rdx, [r15 + 2]
call fcn.14002a1f0
test eax, eax
je 0x14002a829
mov r15, rbx
jmp 0x14002a616
mov rcx, r8
add r8d, 0xffffffcf
js 0x14002a8cd
movzx eax, byte [r14 + 0x24]
cmp r8d, eax
jge 0x14002a8cd
add rcx, 0xffffffffffffffcf
lea rax, [rcx + 3]
add rax, rax
mov rbx, qword [r14 + rax*8]
cmp rbx, 0xffffffffffffffff
je 0x14002a8cd
mov rax, qword [r14 + 8]
sub rax, rsi
cmp rax, rbx
jb 0x14002a829
add rcx, rcx
mov r8, rbx
mov rdx, rsi
mov rcx, qword [r14 + rcx*8 + 0x28]
call sub.VCRUNTIME140.dll_memcmp
test eax, eax
jne 0x14002a829
add rsi, rbx
je 0x14002a82c
add r15, 2
jmp 0x14002a616
lea rax, [r15 + 1]
cmp rax, rdx
je 0x14002a821
lea rbx, [r15 + 1]
cmp r10b, 0x25
je 0x14002a544
cmp r10b, 0x5b
jne 0x14002a550
cmp byte [r15 + 1], 0x5e
jne 0x14002a522
inc rbx
cmp rbx, rdx
je 0x14002a8e1
movzx eax, byte [rbx]
inc rbx
cmp al, 0x25
jne 0x14002a53d
cmp rbx, rdx
jae 0x14002a53d
inc rbx
cmp byte [rbx], 0x5d
jne 0x14002a522
jmp 0x14002a54d
cmp rbx, rdx
je 0x14002a8f2
inc rbx
cmp rsi, qword [r14 + 8]
jb 0x14002a55e
movzx eax, byte [rbx]
jmp 0x14002a5de
movzx r9d, byte [rsi]
movzx eax, r10b
cmp r10b, 0x25
je 0x14002a5be
cmp al, 0x2e
je 0x14002a590
cmp al, 0x5b
je 0x14002a57f
cmp r10d, r9d
mov ecx, r13d
sete cl
jmp 0x14002a5cd
lea r8, [rbx - 1]
mov rdx, r15
mov ecx, r9d
call fcn.14002a1f0
jmp 0x14002a5cb
movzx eax, byte [rbx]
movsx ecx, al
sub ecx, 0x2a
je 0x14002a797
sub ecx, 1
je 0x14002a794
sub ecx, 2
je 0x14002a6fc
cmp ecx, 0x12
je 0x14002a5fa
inc rsi
mov r15, rbx
jmp 0x14002a616
movzx edx, byte [r15 + 1]
mov ecx, r9d
call fcn.14002a080
mov ecx, eax
movzx eax, byte [rbx]
test ecx, ecx
jne 0x14002a593
movabs r9, 0x8000240000000000
cmp al, 0x3f
ja 0x14002a829
movsx rax, al
bt r9, rax
jae 0x14002a829
lea r15, [rbx + 1]
jmp 0x14002a620
lea r15, [rbx + 1]
mov rcx, r14
mov r8, r15
lea rdx, [rsi + 1]
call fcn.14002a2a0
test rax, rax
jne 0x14002a6f4
movabs r9, 0x8000240000000000
mov rdx, qword [r14 + 0x10]
cmp r15, rdx
jne 0x14002a301
jmp 0x14002a82c
movsxd rcx, edx
lea r8, [r15 + 1]
mov rax, rsi
mov rdx, rsi
lea rbx, [rcx + 3]
add rcx, rcx
add rbx, rbx
sub rax, qword [r14 + rcx*8 + 0x28]
mov rcx, r14
mov qword [r14 + rbx*8], rax
call fcn.14002a2a0
mov rsi, rax
test rax, rax
jne 0x14002a82c
mov qword [r14 + rbx*8], 0xffffffffffffffff
jmp 0x14002a82c
cmp byte [r15 + 1], 0x29
lea r8, [r15 + 1]
movzx edx, byte [r14 + 0x24]
jne 0x14002a6ab
cmp dl, 0x20
jae 0x14002a878
mov eax, edx
lea r8, [r15 + 2]
add rax, rax
mov qword [r14 + rax*8 + 0x28], rsi
lea rax, [rdx + 3]
add rax, rax
mov qword [r14 + rax*8], 0xfffffffffffffffe
jmp 0x14002a6ce
cmp dl, 0x20
jae 0x14002a889
mov rax, rdx
add rax, rax
mov qword [r14 + rax*8 + 0x28], rsi
lea rax, [rdx + 3]
add rax, rax
mov qword [r14 + rax*8], 0xffffffffffffffff
inc dl
mov rcx, r14
mov byte [r14 + 0x24], dl
mov rdx, rsi
call fcn.14002a2a0
mov rsi, rax
test rax, rax
jne 0x14002a82c
dec byte [r14 + 0x24]
jmp 0x14002a82c
mov rsi, rax
jmp 0x14002a82c
lea r8, [rbx + 1]
mov rdx, rsi
mov rcx, r14
mov rdi, rsi
call fcn.14002a2a0
mov rsi, rax
test rax, rax
jne 0x14002a82c
nop word [rax + rax]
cmp rdi, qword [r14 + 8]
jae 0x14002a829
movzx ecx, byte [r15]
movzx r9d, byte [rdi]
movzx eax, cl
cmp cl, 0x25
je 0x14002a75e
cmp al, 0x2e
je 0x14002a775
cmp al, 0x5b
je 0x14002a74d
cmp ecx, r9d
mov ecx, r13d
sete cl
jmp 0x14002a76d
lea r8, [rbx - 1]
mov rdx, r15
mov ecx, r9d
call fcn.14002a1f0
jmp 0x14002a76b
movzx edx, byte [r15 + 1]
mov ecx, r9d
call fcn.14002a080
mov ecx, eax
test ecx, ecx
je 0x14002a829
inc rdi
lea r8, [rbx + 1]
mov rdx, rdi
mov rcx, r14
call fcn.14002a2a0
mov rsi, rax
test rax, rax
je 0x14002a720
jmp 0x14002a82c
inc rsi
mov rdi, r13
mov rbp, rsi
nop dword [rax]
cmp rbp, qword [r14 + 8]
jae 0x14002a7f6
movzx ecx, byte [r15]
movzx r9d, byte [rbp]
movzx eax, cl
cmp cl, 0x25
je 0x14002a7db
cmp al, 0x2e
je 0x14002a7ee
cmp al, 0x5b
je 0x14002a7ca
cmp ecx, r9d
mov ecx, r13d
sete cl
jmp 0x14002a7ea
lea r8, [rbx - 1]
mov rdx, r15
mov ecx, r9d
call fcn.14002a1f0
jmp 0x14002a7e8
movzx edx, byte [r15 + 1]
mov ecx, r9d
call fcn.14002a080
mov ecx, eax
test ecx, ecx
je 0x14002a7f6
inc rdi
inc rbp
jmp 0x14002a7a0
test rdi, rdi
js 0x14002a829
nop dword [rax + rax]
lea rdx, [rdi + rsi]
mov rcx, r14
lea r8, [rbx + 1]
call fcn.14002a2a0
test rax, rax
jne 0x14002a6f4
sub rdi, 1
jns 0x14002a800
jmp 0x14002a829
cmp rsi, qword [r14 + 8]
cmove r13, rsi
mov rsi, r13
inc dword [r14 + 0x20]
mov rax, rsi
mov r12, qword [rsp + 0x28]
mov rdi, qword [rsp + 0x68]
mov rbp, qword [rsp + 0x60]
mov rbx, qword [rsp + 0x58]
mov r13, qword [rsp + 0x20]
add rsp, 0x30
pop r15
pop r14
pop rsi
ret
mov rcx, qword [rcx + 0x18]
lea rdx, str.pattern_too_complex
call fcn.1400050c0
int3
mov rcx, qword [r14 + 0x18]
lea rdx, str.invalid_pattern_capture
call fcn.1400050c0
int3
mov rcx, qword [r14 + 0x18]
lea rdx, str.too_many_captures
call fcn.1400050c0
int3
mov rcx, qword [r14 + 0x18]
lea rdx, str.too_many_captures
call fcn.1400050c0
int3
mov rcx, qword [r14 + 0x18]
lea rdx, str.malformed_pattern__missing_arguments_to___b_
call fcn.1400050c0
int3
mov rcx, qword [r14 + 0x18]
lea rdx, str.malformed_pattern__missing___
call fcn.1400050c0
int3
mov rcx, qword [r14 + 0x18]
lea rdx, str.missing___after___f_in_pattern
call fcn.1400050c0
int3
mov rcx, qword [r14 + 0x18]
lea rdx, str.invalid_capture_index____d
inc r8d
call fcn.1400050c0
int3
mov rcx, qword [r14 + 0x18]
lea rdx, str.malformed_pattern__missing___
call fcn.1400050c0
int3
mov rcx, qword [r14 + 0x18]
lea rdx, str.malformed_pattern__ends_with____
call fcn.1400050c0
int3