@alauda-fe/common
Version:
Alauda frontend team common codes.
155 lines • 21.9 kB
JavaScript
import { Validators } from '@angular/forms';
import parser from 'cron-parser';
import { map } from 'rxjs';
import { K8S_RESOURCE_LABEL_KEY_NAME_PATTERN, K8S_RESOURCE_LABEL_KEY_PREFIX_PATTERN, K8S_RESOURCE_LABEL_VALUE_PATTERN, } from '../../core/constants/patterns';
import { isCronFieldCountCorrect, isCronWeekDayCorrect, publishRef, } from '../../core/public-api';
export const STRONG_PASSWORD_SPECIAL_CHARS = '~!@#$%^&*()-_=+?';
const K8S_RESOURCE_LABEL_KEY_NAME_MAX_LENGTH = 63;
const K8S_RESOURCE_LABEL_KEY_PREFIX_MAX_LENGTH = 253;
export function randomPassword({ length = 12, symbols = STRONG_PASSWORD_SPECIAL_CHARS, } = {}) {
const lowerCase = 'abcdefghijklmnopqrstuvwxyz';
const upperCase = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
const numbers = '0123456789';
const password = Array.from({ length });
const randomPosition = (i = Math.floor(Math.random() * length)) => {
if (password[i]) {
return randomPosition(++i >= length ? i - length : i);
}
return i;
};
const randomChar = (options) => options.charAt(Math.floor(Math.random() * options.length));
const randomGenerator = () => {
const options = [lowerCase, upperCase, numbers];
if (symbols) {
options.push(symbols);
}
return randomChar(options[Math.floor(Math.random() * options.length)]);
};
password[randomPosition()] = randomChar(lowerCase);
password[randomPosition()] = randomChar(numbers);
if (symbols) {
password[randomPosition()] = randomChar(symbols);
}
password.forEach((char, index) => {
if (!char) {
password[index] = randomGenerator();
}
});
return password.join('');
}
export function k8sResourceLabelKeyValidator(control) {
if (!control.value) {
return null;
}
const keyPartition = control.value.split('/');
const [prefix, ...nameParts] = keyPartition;
let checkPrefix = true;
let checkName = true;
let name;
if (keyPartition.length > 1) {
name = nameParts.join('/');
checkPrefix = K8S_RESOURCE_LABEL_KEY_PREFIX_PATTERN.pattern.test(prefix);
checkName = K8S_RESOURCE_LABEL_KEY_NAME_PATTERN.pattern.test(name);
}
else {
name = keyPartition[0];
checkName = K8S_RESOURCE_LABEL_KEY_NAME_PATTERN.pattern.test(keyPartition[0]);
}
if (keyPartition.length > 1) {
if (!checkPrefix) {
return { prefixPattern: true };
}
if (prefix.length > K8S_RESOURCE_LABEL_KEY_PREFIX_MAX_LENGTH) {
return { prefixTooLong: prefix.length };
}
}
if (!checkName) {
return { namePattern: true };
}
if (name.length > K8S_RESOURCE_LABEL_KEY_NAME_MAX_LENGTH) {
return { nameTooLong: name.length };
}
return null;
}
export const k8sResourceAnnotationKeyValidator = k8sResourceLabelKeyValidator;
export const k8sResourceLabelValueValidator = Validators.compose([
Validators.pattern(K8S_RESOURCE_LABEL_VALUE_PATTERN.pattern),
Validators.maxLength(63),
]);
export const k8sResourceLabelValidator = {
key: k8sResourceLabelKeyValidator,
value: k8sResourceLabelValueValidator,
};
export const k8sResourceAnnotationValidator = {
key: k8sResourceAnnotationKeyValidator,
};
export const getK8sResourceLabelErrorMapper = (translate) => ({
key: {
namePattern: translate.get(K8S_RESOURCE_LABEL_KEY_NAME_PATTERN.tip),
prefixPattern: translate.get(K8S_RESOURCE_LABEL_KEY_PREFIX_PATTERN.tip),
nameTooLong: translate.get('k8s_resource_label_key_exceeding'),
prefixTooLong: translate.get('k8s_label_prefix_too_long'),
},
value: {
pattern: translate.get(K8S_RESOURCE_LABEL_VALUE_PATTERN.tip),
maxlength: translate.get('k8s_resource_label_value_exceeding'),
},
});
export const getK8sResourceLabelErrorMapper$ = (translate) => translate.locale$.pipe(map(() => getK8sResourceLabelErrorMapper(translate)), publishRef());
export const getK8sResourceAnnotationErrorMapper = (translate) => ({
key: {
namePattern: translate.get(K8S_RESOURCE_LABEL_KEY_NAME_PATTERN.tip),
prefixPattern: translate.get(K8S_RESOURCE_LABEL_KEY_PREFIX_PATTERN.tip),
nameTooLong: translate.get('k8s_resource_label_key_exceeding'),
prefixTooLong: translate.get('k8s_label_prefix_too_long'),
},
});
export const getK8sResourceAnnotationErrorMapper$ = (translate) => translate.locale$.pipe(map(() => getK8sResourceAnnotationErrorMapper(translate)), publishRef());
// CRON_FORMAT_ERROR: cronFormatError 标识格式错误
// CRON_MIN_INTERVAL_ERROR: cronMinIntervalError 标识最小间隔错误
export const CRON_FORMAT_ERROR = 'cronFormatError';
export const CRON_MIN_INTERVAL_ERROR = 'cronMinIntervalError';
export function cronValidator(minInterval) {
return (control) => {
const value = control.value;
return cronValidatorBasic(value, minInterval);
};
}
export function cronValidatorBasic(value, minInterval) {
if (!value) {
return null;
}
if (!isCronWeekDayCorrect(value)) {
return {
[CRON_FORMAT_ERROR]: true,
};
}
if (!isCronFieldCountCorrect(value)) {
return {
[CRON_FORMAT_ERROR]: true,
};
}
try {
const iterator = parser.parseExpression(value);
let minIntervalValidity = true;
if (minInterval) {
const next1 = iterator.next();
const next2 = iterator.next();
// minute
if ((next2._date - next1._date) / 1000 / 60 < minInterval) {
minIntervalValidity = false;
}
}
return minIntervalValidity
? null
: {
[CRON_MIN_INTERVAL_ERROR]: true,
};
}
catch {
return {
[CRON_FORMAT_ERROR]: true,
};
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbW1vbi9zcmMvZm9ybS92YWxpZGF0b3JzL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBcUMsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0UsT0FBTyxNQUFNLE1BQU0sYUFBYSxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFM0IsT0FBTyxFQUNMLG1DQUFtQyxFQUNuQyxxQ0FBcUMsRUFDckMsZ0NBQWdDLEdBQ2pDLE1BQU0sK0JBQStCLENBQUM7QUFDdkMsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixvQkFBb0IsRUFDcEIsVUFBVSxHQUNYLE1BQU0sdUJBQXVCLENBQUM7QUFHL0IsTUFBTSxDQUFDLE1BQU0sNkJBQTZCLEdBQUcsa0JBQWtCLENBQUM7QUFDaEUsTUFBTSxzQ0FBc0MsR0FBRyxFQUFFLENBQUM7QUFDbEQsTUFBTSx3Q0FBd0MsR0FBRyxHQUFHLENBQUM7QUFFckQsTUFBTSxVQUFVLGNBQWMsQ0FBQyxFQUM3QixNQUFNLEdBQUcsRUFBRSxFQUNYLE9BQU8sR0FBRyw2QkFBNkIsTUFJckMsRUFBRTtJQUNKLE1BQU0sU0FBUyxHQUFHLDRCQUE0QixDQUFDO0lBQy9DLE1BQU0sU0FBUyxHQUFHLDRCQUE0QixDQUFDO0lBQy9DLE1BQU0sT0FBTyxHQUFHLFlBQVksQ0FBQztJQUU3QixNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUV4QyxNQUFNLGNBQWMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUMsRUFBVSxFQUFFO1FBQ3hFLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDaEIs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QyxLQUFLLENBQUMsR0FBRyxJQUFJLEdBQUcsRUFBRSxHQUFHLFdBQVcsRUFBRSxDQUFDO2dCQUMxRCxtQkFBbUIsR0FBRyxLQUFLLENBQUM7WUFDOUIsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPLG1CQUFtQjtZQUN4QixDQUFDLENBQUMsSUFBSTtZQUNOLENBQUMsQ0FBQztnQkFDRSxDQUFDLHVCQUF1QixDQUFDLEVBQUUsSUFBSTthQUNoQyxDQUFDO0lBQ1IsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLE9BQU87WUFDTCxDQUFDLGlCQUFpQixDQUFDLEVBQUUsSUFBSTtTQUMxQixDQUFDO0lBQ0osQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIFZhbGlkYXRpb25FcnJvcnMsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgcGFyc2VyIGZyb20gJ2Nyb24tcGFyc2VyJztcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQge1xuICBLOFNfUkVTT1VSQ0VfTEFCRUxfS0VZX05BTUVfUEFUVEVSTixcbiAgSzhTX1JFU09VUkNFX0xBQkVMX0tFWV9QUkVGSVhfUEFUVEVSTixcbiAgSzhTX1JFU09VUkNFX0xBQkVMX1ZBTFVFX1BBVFRFUk4sXG59IGZyb20gJy4uLy4uL2NvcmUvY29uc3RhbnRzL3BhdHRlcm5zJztcbmltcG9ydCB7XG4gIGlzQ3JvbkZpZWxkQ291bnRDb3JyZWN0LFxuICBpc0Nyb25XZWVrRGF5Q29ycmVjdCxcbiAgcHVibGlzaFJlZixcbn0gZnJvbSAnLi4vLi4vY29yZS9wdWJsaWMtYXBpJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICcuLi8uLi90cmFuc2xhdGUvcHVibGljLWFwaSc7XG5cbmV4cG9ydCBjb25zdCBTVFJPTkdfUEFTU1dPUkRfU1BFQ0lBTF9DSEFSUyA9ICd+IUAjJCVeJiooKS1fPSs/JztcbmNvbnN0IEs4U19SRVNPVVJDRV9MQUJFTF9LRVlfTkFNRV9NQVhfTEVOR1RIID0gNjM7XG5jb25zdCBLOFNfUkVTT1VSQ0VfTEFCRUxfS0VZX1BSRUZJWF9NQVhfTEVOR1RIID0gMjUzO1xuXG5leHBvcnQgZnVuY3Rpb24gcmFuZG9tUGFzc3dvcmQoe1xuICBsZW5ndGggPSAxMixcbiAgc3ltYm9scyA9IFNUUk9OR19QQVNTV09SRF9TUEVDSUFMX0NIQVJTLFxufToge1xuICBsZW5ndGg/OiBudW1iZXI7XG4gIHN5bWJvbHM/OiBzdHJpbmc7XG59ID0ge30pOiBzdHJpbmcge1xuICBjb25zdCBsb3dlckNhc2UgPSAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonO1xuICBjb25zdCB1cHBlckNhc2UgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonO1xuICBjb25zdCBudW1iZXJzID0gJzAxMjM0NTY3ODknO1xuXG4gIGNvbnN0IHBhc3N3b3JkID0gQXJyYXkuZnJvbSh7IGxlbmd0aCB9KTtcblxuICBjb25zdCByYW5kb21Qb3NpdGlvbiA9IChpID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogbGVuZ3RoKSk6IG51bWJlciA9PiB7XG4gICAgaWYgKHBhc3N3b3JkW2ldKSB7XG4gICAgICByZXR1cm4gcmFuZG9tUG9zaXRpb24oKytpID49IGxlbmd0aCA/IGkgLSBsZW5ndGggOiBpKTtcbiAgICB9XG4gICAgcmV0dXJuIGk7XG4gIH07XG5cbiAgY29uc3QgcmFuZG9tQ2hhciA9IChvcHRpb25zOiBzdHJpbmcpID0+XG4gICAgb3B0aW9ucy5jaGFyQXQoTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogb3B0aW9ucy5sZW5ndGgpKTtcblxuICBjb25zdCByYW5kb21HZW5lcmF0b3IgPSAoKSA9PiB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IFtsb3dlckNhc2UsIHVwcGVyQ2FzZSwgbnVtYmVyc107XG4gICAgaWYgKHN5bWJvbHMpIHtcbiAgICAgIG9wdGlvbnMucHVzaChzeW1ib2xzKTtcbiAgICB9XG4gICAgcmV0dXJuIHJhbmRvbUNoYXIob3B0aW9uc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBvcHRpb25zLmxlbmd0aCldKTtcbiAgfTtcblxuICBwYXNzd29yZFtyYW5kb21Qb3NpdGlvbigpXSA9IHJhbmRvbUNoYXIobG93ZXJDYXNlKTtcbiAgcGFzc3dvcmRbcmFuZG9tUG9zaXRpb24oKV0gPSByYW5kb21DaGFyKG51bWJlcnMpO1xuICBpZiAoc3ltYm9scykge1xuICAgIHBhc3N3b3JkW3JhbmRvbVBvc2l0aW9uKCldID0gcmFuZG9tQ2hhcihzeW1ib2xzKTtcbiAgfVxuXG4gIHBhc3N3b3JkLmZvckVhY2goKGNoYXIsIGluZGV4KSA9PiB7XG4gICAgaWYgKCFjaGFyKSB7XG4gICAgICBwYXNzd29yZFtpbmRleF0gPSByYW5kb21HZW5lcmF0b3IoKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBwYXNzd29yZC5qb2luKCcnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGs4c1Jlc291cmNlTGFiZWxLZXlWYWxpZGF0b3IoXG4gIGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCxcbik6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgaWYgKCFjb250cm9sLnZhbHVlKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBrZXlQYXJ0aXRpb24gPSAoY29udHJvbC52YWx1ZSBhcyBzdHJpbmcpLnNwbGl0KCcvJyk7XG4gIGNvbnN0IFtwcmVmaXgsIC4uLm5hbWVQYXJ0c10gPSBrZXlQYXJ0aXRpb247XG4gIGxldCBjaGVja1ByZWZpeCA9IHRydWU7XG4gIGxldCBjaGVja05hbWUgPSB0cnVlO1xuICBsZXQgbmFtZTogc3RyaW5nO1xuICBpZiAoa2V5UGFydGl0aW9uLmxlbmd0aCA+IDEpIHtcbiAgICBuYW1lID0gbmFtZVBhcnRzLmpvaW4oJy8nKTtcbiAgICBjaGVja1ByZWZpeCA9IEs4U19SRVNPVVJDRV9MQUJFTF9LRVlfUFJFRklYX1BBVFRFUk4ucGF0dGVybi50ZXN0KHByZWZpeCk7XG4gICAgY2hlY2tOYW1lID0gSzhTX1JFU09VUkNFX0xBQkVMX0tFWV9OQU1FX1BBVFRFUk4ucGF0dGVybi50ZXN0KG5hbWUpO1xuICB9IGVsc2Uge1xuICAgIG5hbWUgPSBrZXlQYXJ0aXRpb25bMF07XG4gICAgY2hlY2tOYW1lID0gSzhTX1JFU09VUkNFX0xBQkVMX0tFWV9OQU1FX1BBVFRFUk4ucGF0dGVybi50ZXN0KFxuICAgICAga2V5UGFydGl0aW9uWzBdLFxuICAgICk7XG4gIH1cbiAgaWYgKGtleVBhcnRpdGlvbi5sZW5ndGggPiAxKSB7XG4gICAgaWYgKCFjaGVja1ByZWZpeCkge1xuICAgICAgcmV0dXJuIHsgcHJlZml4UGF0dGVybjogdHJ1ZSB9O1xuICAgIH1cbiAgICBpZiAocHJlZml4Lmxlbmd0aCA+IEs4U19SRVNPVVJDRV9MQUJFTF9LRVlfUFJFRklYX01BWF9MRU5HVEgpIHtcbiAgICAgIHJldHVybiB7IHByZWZpeFRvb0xvbmc6IHByZWZpeC5sZW5ndGggfTtcbiAgICB9XG4gIH1cblxuICBpZiAoIWNoZWNrTmFtZSkge1xuICAgIHJldHVybiB7IG5hbWVQYXR0ZXJuOiB0cnVlIH07XG4gIH1cblxuICBpZiAobmFtZS5sZW5ndGggPiBLOFNfUkVTT1VSQ0VfTEFCRUxfS0VZX05BTUVfTUFYX0xFTkdUSCkge1xuICAgIHJldHVybiB7IG5hbWVUb29Mb25nOiBuYW1lLmxlbmd0aCB9O1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmV4cG9ydCBjb25zdCBrOHNSZXNvdXJjZUFubm90YXRpb25LZXlWYWxpZGF0b3IgPSBrOHNSZXNvdXJjZUxhYmVsS2V5VmFsaWRhdG9yO1xuXG5leHBvcnQgY29uc3QgazhzUmVzb3VyY2VMYWJlbFZhbHVlVmFsaWRhdG9yID0gVmFsaWRhdG9ycy5jb21wb3NlKFtcbiAgVmFsaWRhdG9ycy5wYXR0ZXJuKEs4U19SRVNPVVJDRV9MQUJFTF9WQUxVRV9QQVRURVJOLnBhdHRlcm4pLFxuICBWYWxpZGF0b3JzLm1heExlbmd0aCg2MyksXG5dKTtcblxuZXhwb3J0IGNvbnN0IGs4c1Jlc291cmNlTGFiZWxWYWxpZGF0b3IgPSB7XG4gIGtleTogazhzUmVzb3VyY2VMYWJlbEtleVZhbGlkYXRvcixcbiAgdmFsdWU6IGs4c1Jlc291cmNlTGFiZWxWYWx1ZVZhbGlkYXRvcixcbn07XG5cbmV4cG9ydCBjb25zdCBrOHNSZXNvdXJjZUFubm90YXRpb25WYWxpZGF0b3IgPSB7XG4gIGtleTogazhzUmVzb3VyY2VBbm5vdGF0aW9uS2V5VmFsaWRhdG9yLFxufTtcblxuZXhwb3J0IGNvbnN0IGdldEs4c1Jlc291cmNlTGFiZWxFcnJvck1hcHBlciA9IChcbiAgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuKSA9PiAoe1xuICBrZXk6IHtcbiAgICBuYW1lUGF0dGVybjogdHJhbnNsYXRlLmdldChLOFNfUkVTT1VSQ0VfTEFCRUxfS0VZX05BTUVfUEFUVEVSTi50aXApLFxuICAgIHByZWZpeFBhdHRlcm46IHRyYW5zbGF0ZS5nZXQoSzhTX1JFU09VUkNFX0xBQkVMX0tFWV9QUkVGSVhfUEFUVEVSTi50aXApLFxuICAgIG5hbWVUb29Mb25nOiB0cmFuc2xhdGUuZ2V0KCdrOHNfcmVzb3VyY2VfbGFiZWxfa2V5X2V4Y2VlZGluZycpLFxuICAgIHByZWZpeFRvb0xvbmc6IHRyYW5zbGF0ZS5nZXQoJ2s4c19sYWJlbF9wcmVmaXhfdG9vX2xvbmcnKSxcbiAgfSxcbiAgdmFsdWU6IHtcbiAgICBwYXR0ZXJuOiB0cmFuc2xhdGUuZ2V0KEs4U19SRVNPVVJDRV9MQUJFTF9WQUxVRV9QQVRURVJOLnRpcCksXG4gICAgbWF4bGVuZ3RoOiB0cmFuc2xhdGUuZ2V0KCdrOHNfcmVzb3VyY2VfbGFiZWxfdmFsdWVfZXhjZWVkaW5nJyksXG4gIH0sXG59KTtcblxuZXhwb3J0IGNvbnN0IGdldEs4c1Jlc291cmNlTGFiZWxFcnJvck1hcHBlciQgPSAodHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlKSA9PlxuICB0cmFuc2xhdGUubG9jYWxlJC5waXBlKFxuICAgIG1hcCgoKSA9PiBnZXRLOHNSZXNvdXJjZUxhYmVsRXJyb3JNYXBwZXIodHJhbnNsYXRlKSksXG4gICAgcHVibGlzaFJlZigpLFxuICApO1xuXG5leHBvcnQgY29uc3QgZ2V0SzhzUmVzb3VyY2VBbm5vdGF0aW9uRXJyb3JNYXBwZXIgPSAoXG4gIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbikgPT4gKHtcbiAga2V5OiB7XG4gICAgbmFtZVBhdHRlcm46IHRyYW5zbGF0ZS5nZXQoSzhTX1JFU09VUkNFX0xBQkVMX0tFWV9OQU1FX1BBVFRFUk4udGlwKSxcbiAgICBwcmVmaXhQYXR0ZXJuOiB0cmFuc2xhdGUuZ2V0KEs4U19SRVNPVVJDRV9MQUJFTF9LRVlfUFJFRklYX1BBVFRFUk4udGlwKSxcbiAgICBuYW1lVG9vTG9uZzogdHJhbnNsYXRlLmdldCgnazhzX3Jlc291cmNlX2xhYmVsX2tleV9leGNlZWRpbmcnKSxcbiAgICBwcmVmaXhUb29Mb25nOiB0cmFuc2xhdGUuZ2V0KCdrOHNfbGFiZWxfcHJlZml4X3Rvb19sb25nJyksXG4gIH0sXG59KTtcblxuZXhwb3J0IGNvbnN0IGdldEs4c1Jlc291cmNlQW5ub3RhdGlvbkVycm9yTWFwcGVyJCA9IChcbiAgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuKSA9PlxuICB0cmFuc2xhdGUubG9jYWxlJC5waXBlKFxuICAgIG1hcCgoKSA9PiBnZXRLOHNSZXNvdXJjZUFubm90YXRpb25FcnJvck1hcHBlcih0cmFuc2xhdGUpKSxcbiAgICBwdWJsaXNoUmVmKCksXG4gICk7XG5cbi8vIENST05fRk9STUFUX0VSUk9SOiBjcm9uRm9ybWF0RXJyb3Ig5qCH6K+G5qC85byP6ZSZ6K+vXG4vLyBDUk9OX01JTl9JTlRFUlZBTF9FUlJPUjogY3Jvbk1pbkludGVydmFsRXJyb3Ig5qCH6K+G5pyA5bCP6Ze06ZqU6ZSZ6K+vXG5cbmV4cG9ydCBjb25zdCBDUk9OX0ZPUk1BVF9FUlJPUiA9ICdjcm9uRm9ybWF0RXJyb3InO1xuZXhwb3J0IGNvbnN0IENST05fTUlOX0lOVEVSVkFMX0VSUk9SID0gJ2Nyb25NaW5JbnRlcnZhbEVycm9yJztcbmV4cG9ydCBmdW5jdGlvbiBjcm9uVmFsaWRhdG9yKG1pbkludGVydmFsPzogbnVtYmVyKSB7XG4gIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xuICAgIGNvbnN0IHZhbHVlID0gY29udHJvbC52YWx1ZSBhcyBzdHJpbmc7XG4gICAgcmV0dXJuIGNyb25WYWxpZGF0b3JCYXNpYyh2YWx1ZSwgbWluSW50ZXJ2YWwpO1xuICB9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyb25WYWxpZGF0b3JCYXNpYyh2YWx1ZTogc3RyaW5nLCBtaW5JbnRlcnZhbD86IG51bWJlcikge1xuICBpZiAoIXZhbHVlKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAoIWlzQ3JvbldlZWtEYXlDb3JyZWN0KHZhbHVlKSkge1xuICAgIHJldHVybiB7XG4gICAgICBbQ1JPTl9GT1JNQVRfRVJST1JdOiB0cnVlLFxuICAgIH07XG4gIH1cblxuICBpZiAoIWlzQ3JvbkZpZWxkQ291bnRDb3JyZWN0KHZhbHVlKSkge1xuICAgIHJldHVybiB7XG4gICAgICBbQ1JPTl9GT1JNQVRfRVJST1JdOiB0cnVlLFxuICAgIH07XG4gIH1cbiAgdHJ5IHtcbiAgICBjb25zdCBpdGVyYXRvciA9IHBhcnNlci5wYXJzZUV4cHJlc3Npb24odmFsdWUpO1xuXG4gICAgbGV0IG1pbkludGVydmFsVmFsaWRpdHkgPSB0cnVlO1xuXG4gICAgaWYgKG1pbkludGVydmFsKSB7XG4gICAgICBjb25zdCBuZXh0MSA9IGl0ZXJhdG9yLm5leHQoKSBhcyBhbnk7XG4gICAgICBjb25zdCBuZXh0MiA9IGl0ZXJhdG9yLm5leHQoKSBhcyBhbnk7XG4gICAgICAvLyBtaW51dGVcbiAgICAgIGlmICgobmV4dDIuX2RhdGUgLSBuZXh0MS5fZGF0ZSkgLyAxMDAwIC8gNjAgPCBtaW5JbnRlcnZhbCkge1xuICAgICAgICBtaW5JbnRlcnZhbFZhbGlkaXR5ID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1pbkludGVydmFsVmFsaWRpdHlcbiAgICAgID8gbnVsbFxuICAgICAgOiB7XG4gICAgICAgICAgW0NST05fTUlOX0lOVEVSVkFMX0VSUk9SXTogdHJ1ZSxcbiAgICAgICAgfTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIFtDUk9OX0ZPUk1BVF9FUlJPUl06IHRydWUsXG4gICAgfTtcbiAgfVxufVxuIl19