int
__cdecl main(
int
argc, const char
*
*
argv, const char
*
*
envp)
{
int
v3;
/
/
edi
int
v4;
/
/
eax
int
v6;
/
/
esi
int
v7;
/
/
eax
int
result;
/
/
eax
char
input
[
64
];
/
/
[esp
+
8h
] [ebp
-
40h
] BYREF
input
[
0
]
=
0
;
memset(&
input
[
1
],
0
,
0x3Cu
);
*
(_WORD
*
)&
input
[
61
]
=
0
;
input
[
63
]
=
0
;
printf(
"Input:"
);
gets(
input
);
v3
=
-
1
;
v4
=
0
;
if
( !
input
[
0
] )
goto LABEL_20;
do
{
if
( v4 >
=
64
)
break
;
if
(
input
[v4]
=
=
'-'
)
v3
=
v4;
}
while
(
input
[
+
+
v4] );
if
( v3 >
0
&& (v6
=
v4
-
v3, v4
-
v3 >
0
)
&& Bignum::from_str(&part1,
input
, v3,
"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
) >
0
&& Bignum::from_str(
&part2,
&
input
[v3
+
1
],
v6
-
1
,
"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
) >
0
&& (Bignum::from_str(
&a,
"IRtzloZ6iuB"
,
strlen(
"IRtzloZ6iuB"
),
"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
),
Bignum::from_int(&b,
0
),
Bignum::from_int(&c,
0
),
bignum::
cmp
(&part1, &part2) <
0
)
&& bignum::
cmp
(&part1, &a) <
0
&& bignum::
cmp
(&part2, &a) <
0
)
{
v7
=
0
;
while
(
1
)
{
round
=
v7
+
1
;
bignum::add(&b, &b, &part1);
bignum::add(&c, &c, &part2);
bignum::mod(&b, &b, &a);
bignum::mod(&c, &c, &a);
Bignum::from_int(&d,
1
);
bignum::sub(&d, &b, &d);
if
( !bignum::
cmp
(&d, &part1) )
{
+
+
match_count;
bignum::mul(&d, &d, &part1);
}
Bignum::from_int(&e,
1
);
bignum::add(&e, &c, &e);
if
( !bignum::
cmp
(&e, &part2) )
{
+
+
match_count;
bignum::div(&e, &a, &part2);
}
if
( match_count
=
=
10
)
break
;
v7
=
round
;
if
(
round
>
=
0x200000
)
goto LABEL_20;
}
printf(
"Success!\n"
);
result
=
0
;
}
else
{
LABEL_20:
printf(
"Error.\n"
);
result
=
0
;
}
return
result;
}