#include <stdio.h>
#include <string.h>
#include <stddef.h>
#include <stdint.h>
int main(int argc, const char **argv) {
uint32_t check = 0xBADBEEF;
uint32_t i;
uint8_t digit;
const char *key;
char c;
if (argc < 2) {
printf("USAGE: prosum <cdkey>\n"); return 1;
}
key = argv[1];
printf("ERROR: cdkey must be 8 chars\n"); return 1;
}
for (i=0; i < 8; i++) {
c = key[i];
if (c < 'A' && c > 'F' && c < '0' && c > '9') {
printf("ERROR: cdkey must contain uppercase letters and numbers\n"); return 1;
}
digit = (uint8_t)c;
check += (0x1337B00B * digit);
}
digit = ((check & 0xFF) / 2) * 2;
if (digit != 42) {
printf("ERROR: cdkey is invalid\n"); return 1;
}
printf("Pro version unlocked\n"); return 0;
}
CiNpbmNsdWRlIDxzdGRpby5oPgojaW5jbHVkZSA8c3RyaW5nLmg+CiNpbmNsdWRlIDxzdGRkZWYuaD4KI2luY2x1ZGUgPHN0ZGludC5oPgoKaW50IG1haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KSB7CiAgICB1aW50MzJfdCBjaGVjayA9IDB4QkFEQkVFRjsKICAgIHVpbnQzMl90IGk7CiAgICB1aW50OF90IGRpZ2l0OwogICAgY29uc3QgY2hhciAqa2V5OwogICAgY2hhciBjOwoKICAgIGlmIChhcmdjIDwgMikgewogICAgICAgIHByaW50ZigiVVNBR0U6IHByb3N1bSA8Y2RrZXk+XG4iKTsKICAgICAgICByZXR1cm4gMTsKICAgIH0KCiAgICBrZXkgPSBhcmd2WzFdOwoKICAgIGlmIChzdHJsZW4oa2V5KSAhPSA4KSB7CiAgICAgICAgcHJpbnRmKCJFUlJPUjogY2RrZXkgbXVzdCBiZSA4IGNoYXJzXG4iKTsKICAgICAgICByZXR1cm4gMTsKICAgIH0KCiAgICBmb3IgKGk9MDsgaSA8IDg7IGkrKykgewogICAgICAgIGMgPSBrZXlbaV07CgogICAgICAgIGlmIChjIDwgJ0EnICYmIGMgPiAnRicgJiYgYyA8ICcwJyAmJiBjID4gJzknKSB7CiAgICAgICAgICAgIHByaW50ZigiRVJST1I6IGNka2V5IG11c3QgY29udGFpbiB1cHBlcmNhc2UgbGV0dGVycyBhbmQgbnVtYmVyc1xuIik7CiAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgIH0KCiAgICAgICAgZGlnaXQgPSAodWludDhfdCljOwogICAgICAgIGNoZWNrICs9ICgweDEzMzdCMDBCICogZGlnaXQpOwogICAgfQoKICAgIGRpZ2l0ID0gKChjaGVjayAmIDB4RkYpIC8gMikgKiAyOwoKICAgIGlmIChkaWdpdCAhPSA0MikgewogICAgICAgIHByaW50ZigiRVJST1I6IGNka2V5IGlzIGludmFsaWRcbiIpOwogICAgICAgIHJldHVybiAxOwogICAgfQoKICAgIHByaW50ZigiUHJvIHZlcnNpb24gdW5sb2NrZWRcbiIpOwogICAgcmV0dXJuIDA7Cn0K