UNPKG

@alauda-fe/common

Version:

Alauda frontend team common codes.

155 lines 21.9 kB
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