Function at 0x402450
Capabilities:
Authenticate hmac
Encode data using base64
Parse credit card information

Disassembly:
push ebp
mov ebp, esp
sub esp, 0x10
mov ecx, dword [0x4147dc]
mov eax, ecx
or eax, 0x36
je 0x40246d
sub dword [0x4147a4], 0xf42
mov eax, dword [str.__1]
push ebx
sub ecx, eax
push esi
shl eax, cl
push edi
push 0xf81
push 0x559
push 0
mov dword [str.__1], eax
call fcn.0040c250
push 0x5fb
push 0xb30
push 1
call fcn.0040c250
push 1
push 1
push 0
push 0
call fcn.00403af0
push 0x60
call fcn.00410ca0
push 0
push 1
push 0x2f
push 0x3c
push 0x29
push 0
call fcn.00412230
push 0
push 0x2f
push 0x22
push 1
call fcn.0040c110
push 0
push 0xffffffffffffffa7
push 1
push 0x3d
call fcn.00403af0
mov ecx, dword [ebp + 0x14]
push 0
push 0
push 0
push 0
mov dword [ebp - 4], ecx
call fcn.0040c110
mov edi, dword [ebp + 0x10]
xor esi, esi
test edi, edi
mov ebx, 0x5c
jle 0x4027a8
mov ecx, dword [ebp + 8]
mov eax, dword [ebp + 0xc]
sub eax, ecx
mov dword [ebp - 8], ecx
mov dword [ebp - 0xc], eax
mov dword [ebp + 0xc], edi
or esi, 1
xor edx, edx
cmp esi, 0x20
setge dl
and ebx, 1
lea eax, [esi - 0x2b]
or edx, ebx
push eax
mov edi, edx
xor edx, edx
cmp edi, 0x32
lea ecx, [esi - 0x21]
push 0xffffffffffffffff
push ecx
setne dl
push edx
call fcn.00403af0
mov ebx, edi
mov ecx, esi
sar ebx, cl
mov eax, edi
sar eax, 0xc7
and ebx, esi
sub ebx, eax
lea ecx, [ebx + edi]
or ebx, ecx
mov eax, ebx
xor eax, edi
push eax
push eax
push 1
push 0
call fcn.0040c110
xor edx, edx
cmp edi, ebx
setne dl
sub ebx, edx
mov eax, ebx
imul eax, edi
xor ebx, eax
mov eax, 0x3c
mov edx, ebx
mov ecx, ebx
shl edx, cl
sub eax, ebx
xor ebx, eax
and edi, edx
cmp ebx, edi
jl 0x4025a1
lea ecx, [ebx + ebx*4]
mov eax, ebx
or eax, edi
lea ecx, [ebx + ecx*2]
lea edx, [ecx + ecx*4]
mov ecx, ebx
push edx
xor ecx, edi
push eax
push ecx
push eax
call fcn.00403870
mov edx, dword [ebp - 0xc]
mov eax, dword [ebp - 8]
xor ecx, ecx
cmp edi, ebx
setne cl
sar edi, cl
mov cl, byte [edx + eax]
xor eax, eax
mov byte [ebp + 0x17], cl
push 0
mov edx, edi
imul edx, edi
xor edi, edx
cmp ebx, 0xffffffc7
setg al
xor ecx, ecx
cmp ebx, 0x28
setg cl
push eax
push ecx
mov edx, edi
mov ecx, edi
shl edx, cl
push edx
call fcn.00403af0
test edi, edi
je 0x402602
xor eax, eax
cmp ebx, 0xffffffdc
mov ecx, ebx
setl al
or ecx, edi
xor edx, edx
push eax
cmp ebx, 0x3d
mov eax, ebx
push ecx
setge dl
xor eax, edi
push edx
push eax
call fcn.0040c110
mov ecx, ebx
mov eax, ebx
and ecx, edi
mov esi, ebx
sar edi, cl
mov ecx, ebx
mov edx, edi
xor eax, edi
shl edx, cl
and ecx, 0x36
and esi, edi
push edx
push 0x65
push eax
push ecx
push 1
push esi
call fcn.00412230
mov edx, 0x31
mov ecx, edi
sar edx, cl
mov eax, 0x3c
sub edx, esi
add ebx, edx
mov ecx, ebx
shl eax, cl
mov ecx, edi
shl ecx, 0x3c
and edi, ecx
mov edx, edi
and ebx, eax
xor edx, 0x33
je 0x402655
lea eax, [edi + 0x24]
push eax
call fcn.00410ca0
and edi, 1
mov edx, 0x37
mov ecx, edi
xor eax, eax
shl edx, cl
mov ecx, eax
or edi, edx
mov edx, 0x32
shl edx, cl
mov ecx, edx
shl eax, cl
or eax, 0x31
je 0x402678
dec edi
xor ebx, ebx
cmp edi, 0xffffffd4
jg 0x402686
mov ecx, edi
imul ecx, edi
sar ebx, cl
xor eax, eax
cmp edi, ebx
setge al
push eax
push 1
push 0
call fcn.0040c250
mov edx, 0x38
mov ecx, edi
mov al, byte [ebp + 0x17]
sar edx, cl
mov ecx, dword [ebp - 8]
mov byte [ecx], al
sub ebx, edx
cmp ebx, 0xffffffde
jge 0x4026cb
mov edx, 0x3e
xor ecx, ecx
sub edx, edi
cmp edi, 0x35
lea eax, [edi + 0x2c]
push edx
setg cl
push eax
push ecx
push 0
call fcn.00403af0
mov esi, ebx
xor edx, edx
test esi, esi
sete dl
push 0
push edx
push 0xffffffffffffffc1
push 1
call fcn.00403af0
sar ebx, 0x3e
neg ebx
mov edi, esi
xor eax, eax
sub edi, ebx
cmp ebx, esi
setg al
xor ecx, ecx
cmp ebx, 0x38
setl cl
push eax
push ecx
push edi
call fcn.0040c250
or esi, edi
mov edx, esi
imul edx, ebx
test edx, edx
je 0x40271c
mov eax, esi
xor eax, 0x3d
push eax
push 0
push 0
push 0xfffffffffffffff1
call fcn.00403870
xor ecx, ecx
cmp esi, 0xffffffd4
setle cl
xor ebx, ecx
xor eax, eax
cmp ebx, 0x36
lea edx, [esi + esi]
setne al
push edx
push eax
push 0x2c
call fcn.0040c250
mov ecx, 0x2b
xor edx, edx
sub ecx, ebx
and esi, ecx
cmp ebx, esi
mov eax, esi
setl dl
shl eax, 4
add eax, esi
xor ecx, ecx
shl eax, 1
cmp esi, 0x2d
push edx
sete cl
push eax
push ecx
call fcn.0040c250
push 0
call fcn.00410ca0
mov ecx, esi
mov edx, 0x3b
imul ecx, esi
shl ebx, cl
mov ecx, esi
xor eax, eax
sar edx, cl
mov ecx, dword [ebp - 8]
and esi, edx
cmp esi, 0x2b
setl al
and esi, eax
mov eax, dword [ebp + 0xc]
inc ecx
dec eax
mov dword [ebp - 8], ecx
mov dword [ebp + 0xc], eax
jne 0x402515
cmp ebx, esi
jne 0x4027a5
mov ecx, ebx
xor ecx, 0x26
add esi, ecx
mov edi, dword [ebp + 0x10]
xor ecx, ecx
cmp ebx, 0x24
setge cl
shl ebx, cl
xor edx, edx
mov eax, esi
cmp ebx, esi
setge dl
add ebx, edx
mov ecx, ebx
shl eax, cl
test eax, eax
je 0x4027cb
mov edx, esi
sar edx, cl
xor ebx, edx
mov eax, 0x39
mov ecx, ebx
sar eax, cl
add ebx, eax
mov ecx, ebx
and ecx, 0xffffffd5
sar ebx, cl
cmp esi, 0xffffffdd
jle 0x4027e9
push 0x6e
call fcn.00410ca0
mov ecx, esi
xor edx, edx
imul ecx, esi
cmp esi, 0xffffffde
setl dl
xor ecx, edx
xor ebx, ecx
cmp esi, ebx
jne 0x402827
mov eax, ebx
mov ecx, ebx
or al, 0x3e
or ecx, 0x21
xor edx, edx
push eax
cmp esi, 0x3a
mov eax, esi
push ecx
setne dl
and eax, ebx
xor ecx, ecx
cmp esi, 0xffffffcf
push edx
push eax
push 0
setne cl
push ecx
call fcn.00412230
mov edx, esi
xor ecx, ecx
xor edx, 0x33
mov eax, 0x3a
add esi, edx
cmp ebx, 0x2c
setle cl
shl ebx, cl
sub eax, esi
and ebx, eax
lea ecx, [ebx + 0x23]
shl esi, cl
test edi, edi
je 0x4030a2
mov ecx, dword [ebp + 8]
mov eax, 1
sub eax, ecx
lea edx, [ecx + edi - 1]
mov dword [ebp - 0x10], eax
mov dword [ebp - 8], edx
mov edi, ebx
push 0x95a
mov eax, edi
mov ecx, edi
shl eax, cl
sub edi, eax
lea ecx, [esi + edi]
sar edi, cl
call fcn.00410ca0
lea ecx, [esi + 0x2e]
xor esi, ecx
mov ecx, 0xffffffd7
sub ecx, edi
mov eax, esi
shl edi, cl
xor eax, 0xffffffc2
lea edx, [esi + 0x39]
je 0x40289a
mov ecx, esi
xor ecx, 0xffffffd3
sub edi, ecx
mov edx, edi
lea esi, [esi + edi*2]
imul edx, edi
test edx, edx
je 0x4028b0
xor ecx, ecx
cmp esi, 0xffffffd7
setge cl
sar edi, cl
xor eax, eax
cmp esi, edi
setne al
add edi, eax
mov ecx, esi
or ecx, edi
xor edx, edx
cmp edi, 0x31
push ecx
sete dl
lea eax, [edi - 0x3e]
push edx
push eax
call fcn.0040c250
xor ecx, ecx
cmp esi, 0x2a
sete cl
xor esi, ecx
mov ecx, edi
mov edx, esi
mov eax, esi
or edx, 0x3a
and eax, 0x29
push edx
mov edx, esi
shl edx, cl
push edi
push eax
push edx
call fcn.00403af0
mov eax, esi
xor edx, edx
xor eax, 0x3e
sub esi, eax
mov eax, dword [ebp - 4]
div dword [ebp + 0x10]
mov ecx, esi
mov eax, esi
and eax, edi
mov ebx, edx
mov edx, esi
shl edx, cl
xor ecx, ecx
cmp edi, 0x39
setl cl
mov dword [ebp - 0xc], ebx
push edx
push eax
push ecx
call fcn.0040c250
mov ecx, esi
and ecx, 0xffffffc6
sar edi, cl
mov ecx, esi
shl ecx, 0x36
shl esi, cl
cmp edi, esi
jne 0x402935
xor esi, esi
xor edx, edx
cmp esi, edi
setge dl
or edi, edx
xor ecx, ecx
mov eax, edi
or al, 0x2f
sub edi, eax
cmp esi, 0xffffffd4
setg cl
sar edi, cl
mov ecx, esi
xor ecx, edi
je 0x40297a
mov edx, edi
xor eax, eax
neg edx
shl edx, 3
sub edx, edi
shl edx, 2
cmp edi, 0xffffffd7
push edx
sete al
xor ecx, ecx
cmp esi, 0x2f
push eax
push 0
setne cl
push ecx
call fcn.00403870
mov edx, 0x26
mov ecx, esi
sar edx, cl
xor eax, eax
or esi, edx
cmp esi, 0x35
setl al
push eax
call fcn.00410ca0
xor ecx, ecx
cmp esi, edi
mov edx, esi
push 0xa
setl cl
xor edx, 0x24
or ecx, edx
or edi, ecx
lea ecx, [esi + 0x30]
shl esi, cl
mov eax, esi
xor eax, 0x3e
sub esi, eax
mov eax, 0x26
mov edx, esi
mov ecx, esi
sar edx, cl
mov ecx, edx
shl esi, cl
lea ecx, [esi + edi]
sar esi, cl
lea ecx, [esi*8]
sub ecx, esi
shl ecx, 3
sar esi, cl
mov ecx, esi
mov edx, esi
shl eax, cl
xor ecx, ecx
cmp esi, 0xffffffde
setl cl
sar edx, 0x2e
push eax
push ecx
push edx
call fcn.00403870
xor eax, eax
cmp esi, edi
mov ecx, esi
push 0
setge al
sub ecx, edi
xor edx, edx
cmp esi, 0x20
push eax
setg dl
push ecx
push edx
call fcn.00403870
lea esi, [esi + edi + 0x3f]
cmp esi, 0x20
jle 0x402a18
mov ecx, esi
and ecx, edi
sar edi, cl
test esi, esi
je 0x402a1f
and edi, 1
mov eax, edi
xor ecx, ecx
or al, 0x2b
cmp esi, edi
push eax
push 0
setne cl
push ecx
call fcn.0040c250
xor ecx, ecx
cmp esi, 0x29
mov edx, dword [ebp + 8]
push 0
setne cl
sar edi, cl
mov al, byte [ebx + edx]
push 0
push 1
mov byte [ebp + 0xf], al
mov ecx, edi
or ecx, 0x3a
push ecx
call fcn.00403870
xor esi, esi
lea edx, [edi - 0x25]
mov eax, edi
push edx
sub eax, esi
push esi
push eax
call fcn.0040c250
xor ecx, ecx
cmp edi, 0x31
setge cl
shl esi, cl
mov ecx, edi
sub esi, 0x15
mov edx, esi
sar edx, cl
lea eax, [esi + esi]
and edi, edx
mov edx, esi
and edx, edi
lea ecx, [edi + 0x32]
push ecx
push eax
push edx
call fcn.0040c250
xor ebx, ebx
cmp esi, 0xffffffdf
sete bl
and ebx, edi
xor eax, eax
shl ebx, 1
cmp esi, 0xffffffc5
setne al
or ebx, eax
xor ecx, ecx
cmp ebx, 0x3f
mov eax, ebx
setl cl
xor edx, edx
cmp ebx, 0xffffffe0
sete dl
push ecx
xor eax, 0x22
push edx
push eax
lea eax, [esi + esi]
push eax
call fcn.00403870
mov edx, dword [ebp - 8]
xor ecx, ecx
cmp esi, 0x3c
mov al, byte [edx]
sete cl
sub ebx, ecx
xor ecx, ecx
cmp ebx, 0x26
mov byte [ebp + 0x17], al
setl cl
lea eax, [esi + esi*2]
mov edx, esi
shl eax, 3
sub eax, esi
push ecx
and edx, 0x29
xor ecx, ecx
shl eax, 1
cmp esi, 0x21
push edx
setl cl
push eax
push ecx
call fcn.00403870
lea edx, [esi + 0x2a]
mov edi, 1
xor esi, edx
mov ecx, esi
mov eax, esi
sar ecx, 0x22
shl esi, cl
or eax, ebx
sub ebx, eax
sub edi, esi
imul edi, esi
cmp edi, 0x2c
jne 0x402b28
mov ecx, ebx
sar ecx, 0x20
sub edi, ecx
mov edx, ebx
mov eax, edi
sar edx, 0x36
or eax, ebx
xor ecx, ecx
cmp edi, 0x23
push edx
push eax
push 0
setg cl
push ecx
call fcn.0040c110
lea esi, [ebx + ebx]
mov edx, 0x33
sub esi, edi
mov ecx, esi
sar edx, cl
xor esi, edx
and edi, esi
cmp esi, 0x22
jne 0x402b6f
mov eax, edi
push 0x20
shl eax, 4
add eax, edi
push 0
shl eax, 1
push eax
push 1
call fcn.00403870
mov edx, dword [ebp - 0xc]
mov eax, dword [ebp + 8]
mov cl, byte [ebp + 0x17]
xor esi, 0x3f
mov byte [edx + eax], cl
xor ecx, ecx
cmp edi, esi
sete cl
sar esi, cl
xor ecx, ecx
xor esi, 1
cmp edi, 0x27
mov ebx, esi
setge cl
mov edx, ebx
sub edi, ecx
xor edx, 0x3a
xor ecx, ecx
or edi, edx
cmp ebx, 0x3a
setl cl
shl ebx, cl
lea eax, [ebx + 0x22]
test eax, eax
je 0x402bb7
mov ecx, 0xffffffc3
sub ecx, ebx
and ebx, ecx
lea edx, [edi + edi*4]
shl edx, 3
sub edx, edi
je 0x402bc4
and ebx, 0x20
mov eax, ebx
mov esi, 0x20
xor eax, 0x2a
push eax
push 1
push 0
call fcn.0040c250
xor ecx, ecx
cmp ebx, 0x32
setge cl
and ebx, ecx
mov ecx, ebx
shl ecx, 0x20
shl ebx, cl
cmp ebx, esi
jge 0x402bf0
sub ebx, 0x3e
cmp ebx, 0x39
jg 0x402c02
xor edx, edx
cmp ebx, 0x20
sete dl
add edx, 0x20
mov esi, edx
xor eax, eax
xor ecx, ecx
cmp eax, 0xffffffcf
mov edx, 0xffffffd3
setg cl
sub edx, eax
push ecx
push edx
push eax
call fcn.0040c250
mov eax, 0xffffffcf
mov ecx, esi
sar eax, cl
mov edx, dword [ebp - 8]
mov ecx, eax
mov eax, 0xffffffd6
sar esi, cl
mov cl, byte [ebp + 0xf]
mov byte [edx], cl
xor edx, edx
mov ecx, esi
sar eax, cl
mov ecx, eax
mov eax, dword [ebp - 4]
shl esi, cl
dec esi
mov ebx, esi
mov ecx, esi
sar ebx, cl
mov ecx, ebx
shl ecx, 0xdc
or ebx, ecx
cmp ebx, 0x33
setl dl
sar esi, 0xf3
mov ecx, esi
and ebx, edx
xor ecx, 0xffffffc4
mov edx, ebx
sar esi, cl
mov ecx, eax
and edx, 0x3d
shr ecx, 0x19
shl eax, 7
or ecx, eax
mov eax, esi
mov edi, ecx
mov ecx, ebx
sar eax, cl
mov ecx, esi
push edx
xor ecx, 0x36
xor edx, edx
cmp ebx, 0x31
push eax
push ecx
setle dl
push edx
call fcn.00403af0
lea eax, [esi + esi]
or esi, eax
mov ecx, esi
xor ecx, 0x3a
je 0x402ca5
xor ecx, ecx
cmp esi, 0x24
setge cl
sar esi, cl
xor edx, edx
cmp esi, 0x2d
setle dl
sub ebx, edx
xor eax, eax
cmp esi, 0x3e
mov edx, ebx
setne al
push 1
lea ecx, [esi - 0x29]
push 0
and edx, 0xffffffc4
push ecx
push edx
mov dword [ebp + 0x14], eax
push eax
mov eax, esi
shl eax, 0x29
push eax
call fcn.00412230
mov ecx, dword [ebp + 0x14]
shl esi, cl
cmp ebx, 0xffffffd6
jle 0x402ce8
xor ecx, ecx
cmp ebx, 0x30
setl cl
sub ebx, ecx
cmp ebx, 0x39
jle 0x402cf7
xor edx, edx
cmp esi, 0xffffffc3
sete dl
add ebx, edx
xor eax, eax
cmp ebx, esi
setl al
xor ebx, ebx
xor esi, eax
xor ecx, ecx
cmp ebx, 0xffffffcf
setg cl
sar ebx, cl
xor ecx, ecx
cmp esi, 0x20
setne cl
xor edx, edx
push 0
cmp ebx, 0x32
push ecx
setne dl
xor eax, eax
cmp esi, 0x22
setl al
push edx
push eax
call fcn.00403af0
xor ecx, ecx
cmp ebx, 0x36
setne cl
xor esi, ecx
mov edx, 0x3a
mov ecx, esi
xor eax, eax
shl edx, cl
cmp ebx, 0x27
sete al
or esi, 0x35
xor ecx, ecx
cmp ebx, 0x3b
push edx
push eax
push esi
sete cl
push ecx
call fcn.00403870
mov esi, ebx
mov edx, 0x28
neg esi
mov ecx, esi
xor eax, eax
shl edx, cl
mov ecx, edx
shl ebx, cl
cmp ebx, 0xffffffd8
mov ebx, 0x17
setl al
and esi, eax
xor eax, eax
mov edx, esi
mov ecx, esi
sar edx, cl
mov ecx, edx
shl esi, cl
mov ecx, dword [ebp + 0x10]
test esi, esi
sete al
sub ebx, eax
sub edi, ecx
shl ebx, 1
cmp esi, 0xffffffdc
mov dword [ebp - 4], edi
jle 0x402db6
mov edx, esi
mov ecx, esi
sar edx, cl
xor eax, eax
cmp ebx, esi
setl al
push edx
push eax
push 0
push ebx
call fcn.00403af0
mov edx, esi
mov ecx, ebx
shl edx, cl
mov ecx, edx
sar esi, cl
cmp esi, 0x2c
jne 0x402dcc
push 0x53
call fcn.00410ca0
xor eax, eax
cmp ebx, esi
setne al
mov ecx, 0x34
xor esi, eax
sub ecx, ebx
xor edx, edx
cmp esi, 0x31
push ecx
setl dl
xor eax, eax
cmp esi, 0x36
setle al
push edx
push eax
call fcn.0040c250
mov ecx, 0xffffffcf
xor edx, edx
sub ecx, esi
push 1
xor esi, ecx
cmp esi, 0xffffffcb
setl dl
xor eax, eax
cmp ebx, esi
setg al
push edx
push eax
push 0xffffffffffffffa5
call fcn.00403af0
lea edi, [esi + ebx + 0x3e]
xor ecx, ecx
cmp ebx, 0xffffffc5
mov edx, edi
setl cl
xor edx, 0x30
xor eax, eax
cmp edi, ebx
push ecx
push edx
push 0
setge al
push eax
call fcn.00403870
mov ecx, ebx
mov esi, 0xffffffc3
or ecx, 0xffffffcc
add ebx, ecx
mov ecx, ebx
shl esi, cl
sar edi, 1
lea ecx, [ebx - 0x3f]
or esi, edi
shl esi, cl
cmp ebx, 0x29
jne 0x402e5e
push 0
call fcn.00410ca0
mov edx, esi
or edx, ebx
xor ebx, edx
lea eax, [esi + ebx]
test eax, eax
je 0x402e6d
and esi, ebx
mov ecx, esi
lea esi, [esi + esi + 0x33]
xor ecx, 0x27
xor esi, 1
add ebx, ecx
mov edx, esi
push 0xffffffffffffffe6
xor edx, ebx
push 0
push edx
call fcn.0040c250
push 0
lea ebx, [ebx + ebx + 0x26]
call fcn.00410ca0
push 0
call fcn.00410ca0
mov eax, esi
xor ecx, ecx
sub eax, ebx
cmp ebx, 0xffffffdd
setne cl
and eax, ecx
xor ecx, ecx
and eax, esi
cmp ebx, 0x26
sete cl
shl eax, cl
lea edx, [eax + ebx]
test edx, edx
je 0x402ec0
lea ebx, [ebx + ebx + 0x38]
mov esi, dword [ebp - 4]
mov ecx, ebx
sub esi, 0x4995d299
mov dword [ebp - 4], esi
mov esi, 0x39
shl esi, cl
and esi, eax
mov eax, ebx
xor esi, ebx
sub eax, esi
je 0x402ef9
mov eax, esi
xor ecx, ecx
or eax, ebx
cmp ebx, esi
setl cl
push ecx
mov edx, esi
mov ecx, esi
push eax
shl edx, cl
push edx
push eax
call fcn.00403870
mov eax, ebx
push 0x69
sar eax, 0x28
or esi, eax
push 1
mov ecx, esi
mov edx, esi
and ecx, 0xffffffdb
mov eax, esi
add ebx, ecx
and edx, ebx
xor eax, ebx
push edx
push eax
call fcn.00403af0
mov ecx, ebx
push 1
imul ecx, ebx
push ecx
push 0xffffffffffffff94
push 0
or esi, 0x29
call fcn.0040c110
mov edi, esi
mov ecx, ebx
shl edi, cl
xor eax, eax
or edi, ebx
dec edi
cmp esi, edi
lea edx, [edi - 0x20]
setge al
push edx
xor ecx, ecx
push 1
cmp esi, edi
push 1
push eax
setne cl
push 0
push ecx
call fcn.00412230
xor edx, edx
cmp esi, 0x20
setl dl
sub edi, edx
xor eax, eax
cmp esi, 0xffffffcb
setg al
add esi, eax
push esi
call fcn.00410ca0
mov ebx, esi
mov ecx, edi
shl ebx, cl
mov ecx, esi
sar ecx, 0xda
or ebx, edi
shl ebx, cl
cmp ebx, 0xffffffc3
jle 0x402f88
mov ecx, esi
shl ebx, cl
mov ecx, esi
or ecx, ebx
je 0x402f95
mov edx, esi
xor edx, 0x27
or esi, edx
xor eax, eax
cmp ebx, 0x36
setl al
mov edx, ebx
mov ecx, esi
push eax
mov eax, esi
shl edx, cl
mov ecx, ebx
shl eax, cl
push edx
push 0
push eax
call fcn.0040c110
xor ecx, ecx
cmp esi, 0xffffffd0
mov edx, esi
setg cl
sar edx, 0xdd
push edx
or ebx, ecx
call fcn.00410ca0
mov ecx, dword [ebp - 4]
xor eax, eax
cmp esi, ebx
setl al
sub ecx, 0x3039
add ebx, eax
mov dword [ebp - 4], ecx
mov ecx, ebx
sub ecx, esi
je 0x402ff1
lea edx, [esi*8]
sub edx, esi
shl edx, 3
xor esi, edx
inc ebx
mov ecx, esi
sub ecx, ebx
xor eax, eax
shl ebx, cl
mov ecx, esi
push 0x37
add ebx, esi
imul ecx, ebx
shl ebx, cl
mov ecx, esi
cmp ebx, esi
setge al
xor ebx, eax
xor ecx, ebx
sub ebx, ecx
lea ecx, [ebx - 0x34]
sar esi, cl
mov ecx, ebx
xor ecx, 0x22
mov edx, esi
imul edx, ebx
sar ebx, cl
xor esi, edx
xor ecx, ecx
mov eax, ebx
xor eax, 0xffffffd7
cmp esi, 0xffffffd3
setne cl
xor edx, edx
cmp ebx, 0xffffffc2
push eax
push ecx
setl dl
push edx
call fcn.00403870
or esi, 1
cmp ebx, esi
jge 0x403053
xor eax, eax
cmp ebx, 0x37
setle al
add esi, eax
dec ebx
xor ecx, ecx
cmp esi, ebx
push 1
setl cl
add ebx, ecx
call fcn.00410ca0
mov edx, ebx
xor eax, eax
and edx, 0x22
push 1
or esi, edx
cmp ebx, esi
mov edx, esi
sete al
imul edx, ebx
mov ecx, esi
push eax
and ecx, ebx
push ecx
push edx
call fcn.00403870
mov ecx, dword [ebp - 0x10]
mov eax, esi
and al, 0xcc
sub ebx, 0x10
sub esi, eax
mov eax, dword [ebp - 8]
dec eax
add ecx, eax
mov dword [ebp - 8], eax
test ecx, ecx
jne 0x402862
mov edx, 0xffffffcc
mov ecx, ebx
shl edx, cl
xor eax, eax
push 0x3d
push 1
add esi, edx
cmp esi, ebx
setne al
xor ecx, ecx
cmp ebx, esi
setne cl
push eax
push ecx
call fcn.0040c110
mov edx, 0x23
push 0
sub edx, ebx
push 0
or esi, edx
push 0x6f
mov eax, esi
xor eax, ebx
push eax
call fcn.0040c110
xor ecx, ecx
cmp esi, ebx
setge cl
and esi, ecx
xor edx, edx
cmp ebx, esi
setg dl
sub esi, edx
mov eax, esi
xor eax, ebx
je 0x403100
xor ecx, ecx
cmp ebx, esi
setl cl
xor esi, ecx
xor ebx, 1
mov eax, esi
mov ecx, ebx
shl eax, cl
mov ecx, esi
xor eax, ebx
shl eax, 1
sar eax, cl
mov edx, eax
mov ecx, eax
sar edx, cl
add edx, eax
mov eax, esi
and edx, 0xffffffd6
and eax, edx
add esi, eax
mov eax, edx
mov ecx, esi
sub eax, esi
imul ecx, edx
push ecx
mov ecx, edx
shl esi, cl
push eax
push esi
push 1
call fcn.0040c110
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret