@churchillliving/se-ui-toolkit 6.54.576 → 6.54.577
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { formatDate } from '@angular/common';
|
|
2
2
|
import { EFormatType, EFormControl, EHyperlink, EMatchMode, EOperator, } from '../models/form.model';
|
|
3
|
+
import { EGridlink } from '../models/grid.model';
|
|
3
4
|
import { Subject } from 'rxjs';
|
|
4
5
|
/* #region public methods */
|
|
5
6
|
/**
|
|
@@ -1115,5 +1116,23 @@ export function calendarMinMaxValue(item, value, index) {
|
|
|
1115
1116
|
}
|
|
1116
1117
|
return validation;
|
|
1117
1118
|
}
|
|
1119
|
+
export function navigateWithUserPreference(page, params, overrideUserSetting = false, target) {
|
|
1120
|
+
let finalTarget = EGridlink.BLANK;
|
|
1121
|
+
if (!overrideUserSetting) {
|
|
1122
|
+
const userSetting = localStorage.getItem("UserSetting");
|
|
1123
|
+
if (userSetting) {
|
|
1124
|
+
const parsedSetting = JSON.parse(userSetting);
|
|
1125
|
+
finalTarget = parsedSetting?.value === "openLinkInCurrentTab" ? EGridlink.SELF : EGridlink.BLANK;
|
|
1126
|
+
}
|
|
1127
|
+
}
|
|
1128
|
+
else if (target) {
|
|
1129
|
+
finalTarget = target;
|
|
1130
|
+
}
|
|
1131
|
+
const url = this.router.createUrlTree([page], { queryParams: params?.queryParams }).toString();
|
|
1132
|
+
const anchor = document.createElement('a');
|
|
1133
|
+
anchor.href = url;
|
|
1134
|
+
anchor.target = finalTarget;
|
|
1135
|
+
anchor.click();
|
|
1136
|
+
}
|
|
1118
1137
|
/* #endregion */
|
|
1119
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbGl0aWVzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zZS11aS10b29sa2l0L3NyYy9saWIvc2VydmljZXMvdXRpbGl0aWVzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRzdDLE9BQU8sRUFDTCxXQUFXLEVBQ1gsWUFBWSxFQUNaLFVBQVUsRUFDVixVQUFVLEVBQ1YsU0FBUyxHQU1WLE1BQU0sc0JBQXNCLENBQUM7QUFFOUIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUvQiw0QkFBNEI7QUFFNUI7Ozs7Ozs7R0FPRztBQUNGLElBQUksV0FBVyxHQUFHLElBQUksT0FBTyxFQUFPLENBQUM7QUFDckMsSUFBSSxTQUFTLEdBQUcsSUFBSSxPQUFPLEVBQU8sQ0FBQztBQUNuQyxJQUFJLFlBQVksR0FBRyxJQUFJLE9BQU8sRUFBTyxDQUFDO0FBQ3RDLElBQUksU0FBUyxHQUFHLElBQUksT0FBTyxFQUFPLENBQUM7QUFDbkMsSUFBSSxXQUFXLEdBQUcsSUFBSSxPQUFPLEVBQU8sQ0FBQztBQUNyQyxJQUFJLGVBQWUsR0FBRyxJQUFJLE9BQU8sRUFBTyxDQUFDO0FBRTFDLE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxXQUFnQjtJQUNqRCxZQUFZLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ2pDLENBQUM7QUFFRCxNQUFNLFVBQVUsb0JBQW9CO0lBQ2xDLE9BQU8sWUFBWSxDQUFDLFlBQVksRUFBRSxDQUFDO0FBQ3JDLENBQUM7QUFDRCxNQUFNLFVBQVUsbUJBQW1CO0lBQ2pDLE9BQU8sV0FBVyxDQUFDLFlBQVksRUFBRSxDQUFDO0FBQ3BDLENBQUM7QUFDRCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsUUFBUTtJQUN4QyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUMs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QzdELElBQUksV0FBVyxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2xDLElBQUksU0FBUyxDQUFDLE9BQU8sRUFBRSxHQUFHLFdBQVcsQ0FBQyxPQUFPLEVBQUUsRUFBQztRQUM5QyxVQUFVLEdBQUcsU0FBUyxDQUFDO0tBQ3hCO1NBQ0ksSUFBSSxTQUFTLENBQUMsT0FBTyxFQUFFLEdBQUcsV0FBVyxDQUFDLE9BQU8sRUFBRSxFQUFDO1FBQ25ELFVBQVUsR0FBRyxTQUFTLENBQUM7S0FDeEI7SUFDRCxPQUFPLFVBQVUsQ0FBQztBQUNwQixDQUFDO0FBQ0QsZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZm9ybWF0RGF0ZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbmltcG9ydCB7IElEaWN0aW9uYXJ5LCBJRmlsdGVyRGljdGlvbmFyeSB9IGZyb20gJy4uL21vZGVscy9jb21tb24ubW9kZWwnO1xuaW1wb3J0IHtcbiAgRUZvcm1hdFR5cGUsXG4gIEVGb3JtQ29udHJvbCxcbiAgRUh5cGVybGluayxcbiAgRU1hdGNoTW9kZSxcbiAgRU9wZXJhdG9yLFxuICBJRHluYW1pY0NhcmQsXG4gIElEeW5hbWljRm9ybSxcbiAgSUZvcm1hdCxcbiAgSUZvcm1GaWVsZCxcbiAgSUZvcm1TZWN0aW9uLFxufSBmcm9tICcuLi9tb2RlbHMvZm9ybS5tb2RlbCc7XG5pbXBvcnQgeyBhZGRHbG9iYWxGaWx0ZXIsIEVHcmlkQ29sdW1uVHlwZSwgSUdsb2JhbEZpbHRlciwgSUdyaWRDb2x1bW4sIElHcmlkRmlsdGVyIH0gZnJvbSAnLi4vbW9kZWxzL2dyaWQubW9kZWwnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG4vKiAjcmVnaW9uIHB1YmxpYyBtZXRob2RzICovXG5cbi8qKlxuICpcbiAqIEBwYXJhbSB2YWx1ZSA6IGFueVxuICogRnVuY3Rpb24gcmVjZWl2ZXMgdGhlIHZhbHVlIGFuZCBleHBlY3RzIHRoZSB2YWx1ZSB0byBiZSBmb3JtYXRlZC5cbiAqIERvIG5vdCB1c2UgZmF0IGFycm93IGZ1bmN0aW9uIGFzIHRoZXkgZG8gbm90IHByZXNlcnZlIHRoZSBjb250ZXh0LlxuICogdGhpcy52YWx1ZSByZWZlcnMgdG8gdGhlIHZhbHVlIG9mIElGb3JtRmllbGQgT2JqZWN0XG4gKiBNb2RpZnkgdGhpcy52YWx1ZSBkaXJlY3RseSB0byByZWNlaXZlIGVmZmVjdFxuICovXG4gdmFyIHNwbGl0U2NyZWVuID0gbmV3IFN1YmplY3Q8YW55PigpO1xuIHZhciBmb3Jtc3RhdGUgPSBuZXcgU3ViamVjdDxhbnk+KCk7XG4gdmFyIGNvbHVtbnNTdGF0ZSA9IG5ldyBTdWJqZWN0PGFueT4oKTtcbiB2YXIgY2FyZFN0YXRlID0gbmV3IFN1YmplY3Q8YW55PigpO1xuIHZhciByb3V0ZUNoYW5nZSA9IG5ldyBTdWJqZWN0PGFueT4oKTtcbiB2YXIgZmlsdGVyQnRuQ2hhbmdlID0gbmV3IFN1YmplY3Q8YW55PigpO1xuXG5leHBvcnQgZnVuY3Rpb24gY2hhbmdlQ29sdW1uc1N0YXRlKHBhZ2VTZXR0aW5nOiBhbnkpIHtcbiAgY29sdW1uc1N0YXRlLm5leHQocGFnZVNldHRpbmcpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gb25Db2x1bW5zU3RhdGVDaGFuZ2UoKSB7XG4gIHJldHVybiBjb2x1bW5zU3RhdGUuYXNPYnNlcnZhYmxlKCk7XG59XG5leHBvcnQgZnVuY3Rpb24gb25TY3JlZW5TcGxpdENoYW5nZSAoKXtcbiAgcmV0dXJuIHNwbGl0U2NyZWVuLmFzT2JzZXJ2YWJsZSgpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNoYW5nZVNwbGl0U2NyZWVuKG1lbnVJdGVtKXtcbiAgc3BsaXRTY3JlZW4ubmV4dCh7b3JpZ0NvbXBvbmVudDogbWVudUl0ZW0ub3JpZ0NvbXBvbmVudCwgcGFuZWxDb21wb25lbnQ6IG1lbnVJdGVtPy5jb21wb25lbnQsIGNvbmZpZ0RhdGE6bWVudUl0ZW0/LmRhdGE/LmRhdGF9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNoYW5nZUR5bmFtaWNGb3JtU3RhdGUoaWQ6IGFueSwgZGF0YTogYW55LCBsb2FkQ29tcG9uZW50PzogYW55KSB7XG4gIGZvcm1zdGF0ZS5uZXh0KHsgaWQsIGRhdGEsIGxvYWRDb21wb25lbnQgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBvbkR5bmFtaWNGb3JtU3RhdGVDaGFuZ2UoKSB7XG4gIHJldHVybiBmb3Jtc3RhdGUuYXNPYnNlcnZhYmxlKCk7XG59XG5leHBvcnQgZnVuY3Rpb24gb25HbG9iYWxGaWx0ZXJDb250cm9sUmlnaHRCdG4oc3RhdGVWYWx1ZSkge1xuICBmaWx0ZXJCdG5DaGFuZ2UubmV4dChzdGF0ZVZhbHVlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG9uR2xvYmFsRmlsdGVyQ29udHJvbFJpZ2h0QnRuU3RhdGVDaGFuZ2UoKSB7XG4gIHJldHVybiBmaWx0ZXJCdG5DaGFuZ2UuYXNPYnNlcnZhYmxlKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBvblJvdXRlQ2hhbmdlRXZlbnQoKSB7XG4gIHJldHVybiByb3V0ZUNoYW5nZS5hc09ic2VydmFibGUoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJvdXRlQ2hhbmdlRXZlbnQoKSB7XG4gIHJvdXRlQ2hhbmdlLm5leHQoKTtcbn1cblxuIGV4cG9ydCBmdW5jdGlvbiBvbkR5bmFtaWNDYXJkU3RhdGVDaGFuZ2UoKSB7XG4gIHJldHVybiBjYXJkU3RhdGUuYXNPYnNlcnZhYmxlKCk7XG4gfVxuXG4gZXhwb3J0IGZ1bmN0aW9uIGNoYW5nZUR5bmFtaWNDYXJkU3RhdGUoZGF0YTogYW55KSB7XG4gIGNhcmRTdGF0ZS5uZXh0KHsgZGF0YSB9KTtcbn1cblxuIGV4cG9ydCBmdW5jdGlvbiBjbG9zZUlGcmFtZSgpe1xuICBsZXQgY2xvc2UgPSB3aW5kb3cucGFyZW50LmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5wLWRpYWxvZy1oZWFkZXItaWNvbicpYXMgSFRNTEVsZW1lbnRcbiAgaWYoY2xvc2UpIHtcbiAgICBjbG9zZS5jbGljaygpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b0RlY2ltYWwodmFsdWU6IGFueSk6IGFueSB7XG4gIGlmICh2YWx1ZSkge1xuICAgIHJldHVybiBwYXJzZUZsb2F0KHZhbHVlLnRvU3RyaW5nKCkpLnRvRml4ZWQoMik7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvQm9vbGVhbih2YWx1ZTogYW55KSB7XG4gIHJldHVybiB2YWx1ZT8udG9Mb3dlckNhc2UoKSA9PT0gJ3knID8gdHJ1ZSA6IGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9TaG9ydERhdGUodmFsdWU6IGFueSwgZm9ybWF0PzogSUZvcm1hdCkge1xuICBpZiAodmFsdWUgJiYgdmFsdWUgIT09ICcnKSB7XG4gICAgaWYgKFxuICAgICAgZm9ybWF0ICYmXG4gICAgICAoZm9ybWF0LnR5cGUgPT09IEVGb3JtYXRUeXBlLkxPTkdEQVRFIHx8XG4gICAgICAgIGZvcm1hdC50eXBlID09PSBFRm9ybWF0VHlwZS5NRURJVU1EQVRFKVxuICAgICkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZm9ybWF0RGF0ZSh2YWx1ZSwgJ01NL2RkL3l5eXknLCAnZW4tVVMnKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvU2hvcnREYXRlVGltZSh2YWx1ZTogYW55LCBmb3JtYXQ/OiBJRm9ybWF0KSB7XG4gIGlmICh2YWx1ZSAmJiB2YWx1ZSAhPT0gJycgJiYgdmFsdWU/LnRvU3RyaW5nKCkgIT0gXCJJbnZhbGlkIERhdGVcIikge1xuICAgIGlmIChcbiAgICAgIGZvcm1hdCAmJlxuICAgICAgKGZvcm1hdC50eXBlID09PSBFRm9ybWF0VHlwZS5MT05HREFURSB8fFxuICAgICAgICBmb3JtYXQudHlwZSA9PT0gRUZvcm1hdFR5cGUuTUVESVVNREFURSlcbiAgICApIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZvcm1hdERhdGUodmFsdWUsICdNTS9kZC95eXl5IGhoOm1tIGEnLCAnZW4tVVMnKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldERpYWxvZ0RhdGEoY29sdW1uczpJR3JpZENvbHVtbltdLCBmaWVsZE5hbWU6c3RyaW5nLCB2YWx1ZTphbnkpe1xuICBjb2x1bW5zPy5mb3JFYWNoKChjb2x1bW4pPT57XG4gICAgICBpZihjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IGZpZWxkTmFtZT8udG9Mb3dlckNhc2UoKSAmJiBjb2x1bW4uY29tcG9uZW50KXtcbiAgICAgICAgbGV0IGtleXM9T2JqZWN0LmtleXModmFsdWUpO1xuICAgICAgICBrZXlzLmZvckVhY2goKGtleSk9PntcbiAgICAgICAgICBjb2x1bW4uZGF0YS5kYXRhPXsuLi5jb2x1bW4uZGF0YT8uZGF0YSwgW2tleV06dmFsdWVba2V5XX07XG4gICAgICAgIH0pXG4gICAgICB9XG4gIH0pXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b1RyaW0odGV4dDogYW55KSB7XG4gIGlmICh0eXBlb2YgdGV4dCA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdGV4dC50cmltKCk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHRleHQ7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE1hdGNoS2V5KG9iajogYW55LCBwcm9wTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKCFvYmogfHwgIXByb3BOYW1lKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgbGV0IG1hdGNoZWRLZXkgPSAnJztcbiAgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgIG9iai5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgIGNvbnN0IGtleXM6IGFueVtdID0gT2JqZWN0LmtleXMocm93KTtcbiAgICAgIGlmICghbWF0Y2hlZEtleSB8fCBtYXRjaGVkS2V5Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBtYXRjaGVkS2V5ID0ga2V5cy5maW5kKFxuICAgICAgICAgICh4KSA9PiB4LnRvTG93ZXJDYXNlKCkgPT09IHByb3BOYW1lLnRvTG93ZXJDYXNlKClcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBrZXlzOiBhbnlbXSA9IE9iamVjdC5rZXlzKG9iaik7XG4gICAgbWF0Y2hlZEtleSA9IGtleXMuZmluZCgoeCkgPT4geC50b0xvd2VyQ2FzZSgpID09PSBwcm9wTmFtZS50b0xvd2VyQ2FzZSgpKTtcbiAgfVxuXG4gIHJldHVybiBtYXRjaGVkS2V5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0Rm9ybUZpZWxkVmFsdWUoZm9ybUZpZWxkOiBJRm9ybUZpZWxkLCB2YWx1ZTogYW55KTogYW55IHtcbiAgbGV0IGZvcm1hdHRlZFZhbHVlOiBhbnkgPSB2YWx1ZTtcbiAgaWYgKGZvcm1GaWVsZC5mb3JtYXQpIHtcbiAgICBzd2l0Y2ggKGZvcm1GaWVsZC5mb3JtYXQudHlwZSkge1xuICAgICAgY2FzZSBFRm9ybWF0VHlwZS5ERUNJTUFMOlxuICAgICAgICBmb3JtYXR0ZWRWYWx1ZSA9IHRvRGVjaW1hbCh2YWx1ZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFRm9ybWF0VHlwZS5CT09MRUFOX1lOOlxuICAgICAgICBmb3JtYXR0ZWRWYWx1ZSA9IHRvQm9vbGVhbih2YWx1ZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFRm9ybWF0VHlwZS5TSE9SVERBVEU6XG4gICAgICAgIGZvcm1hdHRlZFZhbHVlID0gdG9TaG9ydERhdGUodmFsdWUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUZvcm1hdFR5cGUuQ1VTVE9NOlxuICAgICAgICBpZiAoZm9ybUZpZWxkLmZvcm1hdC5mb3JtYXR0ZXIpIHtcbiAgICAgICAgICBmb3JtYXR0ZWRWYWx1ZSA9IGZvcm1GaWVsZC5mb3JtYXQuZm9ybWF0dGVyKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZm9ybWF0dGVkVmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRGb3JtRmllbGQgKFxuICB7IGZvcm1TZWN0aW9ucyB9OiBJRHluYW1pY0Zvcm0sXG4gIGZvcm1GaWVsZE9iajogSUZvcm1GaWVsZFxuKSB7XG4gIHJldHVybiBmb3JtU2VjdGlvbnM/Lm1hcCgoc2VjdGlvbikgPT4ge1xuICAgIHJldHVybiAoc2VjdGlvbi5maWVsZHMgPSBzZWN0aW9uLmZpZWxkcy5tYXAoKGZvcm1GaWVsZDogSUZvcm1GaWVsZCkgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICBmb3JtRmllbGQuZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IGZvcm1GaWVsZE9iai5maWVsZD8udG9Mb3dlckNhc2UoKSB8fFxuICAgICAgICAoZm9ybUZpZWxkLmxhYmVsICYmIGZvcm1GaWVsZC5sYWJlbCA9PT0gZm9ybUZpZWxkT2JqLmxhYmVsKVxuICAgICAgKSB7XG4gICAgICAgIGZvcm1GaWVsZCA9IGZvcm1GaWVsZE9iajtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmb3JtRmllbGQ7XG4gICAgfSkpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEh5cGVybGlua0NvbXBvbmVudERhdGEgKFxuICB7IGZvcm1TZWN0aW9ucyB9OiBJRHluYW1pY0Zvcm0sXG4gIGxhYmVsOiBzdHJpbmcsXG4gIGRhdGE6IGFueVxuKXtcbiAgZm9ybVNlY3Rpb25zPy5mb3JFYWNoKChzZWN0aW9uKSA9PiB7XG4gICAgY29uc3QgZmllbGQgPSBzZWN0aW9uLmZpZWxkcy5maW5kKChmaWVsZCkgPT4gZmllbGQubGFiZWwgJiYgKHR5cGVvZiAoZmllbGQubGFiZWwpID09IFwib2JqZWN0XCIgPyBmaWVsZC5sYWJlbD8ubmFtZSA9PSBsYWJlbCA6IGZpZWxkLmxhYmVsID09PSBsYWJlbCkpXG4gICAgaWYgKGZpZWxkICYmIHR5cGVvZiAoZmllbGQubGFiZWwpID09IFwib2JqZWN0XCIgJiYgZmllbGQubGFiZWwubGFiZWxDb250cm9sPy5oeXBlcmxpbmspIHtcbiAgICAgIGZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbC5oeXBlcmxpbmsucGFyYW1zID0gZGF0YTtcbiAgICB9IGVsc2UgaWYgKGZpZWxkICYmIGZpZWxkLmh5cGVybGluaykge1xuICAgICAgZmllbGQuaHlwZXJsaW5rLnBhcmFtcyA9IGRhdGE7XG4gICAgfVxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEF1dG9Db21wbGV0ZURhdGEoXG4gIHZhbHVlczogYW55W10sXG4gIHVuaXF1ZUlkOiBhbnksXG4gIGxhYmVsS2V5OiBzdHJpbmcsXG4gIFZhbHVlS2V5OiBzdHJpbmcsXG4pe1xuICBpZih2YWx1ZXM/Lmxlbmd0aCA+IDApe1xuICAgIHZhbHVlcyA9IHZhbHVlcz8ubWFwKChyb3dWYWx1ZSkgPT4gKHtbbGFiZWxLZXldOiByb3dWYWx1ZSwgW1ZhbHVlS2V5XTogdW5pcXVlSWR9KSk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldExvb2t1cERhdGEoXG4gIHsgZm9ybVNlY3Rpb25zIH06IElEeW5hbWljRm9ybSxcbiAgZmllbGQ6IHN0cmluZyxcbiAgZGF0YTogYW55XG4pIHtcbiAgZm9ybVNlY3Rpb25zPy5tYXAoKHNlY3Rpb246IElGb3JtU2VjdGlvbikgPT4ge1xuICAgIHNlY3Rpb24uZmllbGRzLm1hcCgoZm9ybUZpZWxkOiBhbnkpID0+IHtcbiAgICAgIGlmIChmb3JtRmllbGQuZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IGZpZWxkPy50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBmb3JtRmllbGQubGFiZWwgJiZcbiAgICAgICAgICBmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sICYmXG4gICAgICAgICAgZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbC5sb29rdXBDb250cm9sICYmXG4gICAgICAgICAgZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbC5sb29rdXBDb250cm9sLmRhdGEgJiZcbiAgICAgICAgICBkYXRhXG4gICAgICAgICkge1xuICAgICAgICAgIGZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2wubG9va3VwQ29udHJvbC5kYXRhLmRhdGEgPSBkYXRhO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmb3JtRmllbGQubG9va3VwQ29udHJvbCAmJiBmb3JtRmllbGQubG9va3VwQ29udHJvbC5kYXRhICYmIGRhdGEpIHtcbiAgICAgICAgICBmb3JtRmllbGQubG9va3VwQ29udHJvbC5kYXRhLmRhdGEgPSBkYXRhO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuICByZXR1cm4gZm9ybVNlY3Rpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0U2lkZWJhckxpbmtQYXJhbVZhbHVlcyhsaW5rOiBzdHJpbmcsIHBhcmFtczogYW55W10pOiBzdHJpbmcge1xuICBsZXQgbmV3TGluazogc3RyaW5nID0gbGluaztcbiAgaWYgKHBhcmFtcyAmJiBwYXJhbXMubGVuZ3RoID4gMCkge1xuICAgIHBhcmFtcy5tYXAoKHBhcmFtKSA9PiB7XG4gICAgICBjb25zdCB1cmwgPSBwYXJhbS5uYW1lID8gJ3t7JyArIHBhcmFtLm5hbWUgKyAnfX0nIDogJyc7XG4gICAgICBpZiAobmV3TGluay5sb2NhbGVDb21wYXJlKHVybCkpIHtcbiAgICAgICAgbmV3TGluayA9IG5ld0xpbmsucmVwbGFjZShuZXcgUmVnRXhwKHVybCwgJ2lnJyksIHRvVHJpbShwYXJhbS52YWx1ZSkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIHJldHVybiBuZXdMaW5rO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYWRkTmV3RmllbGRJbkZvcm0oZHluYW1pY0Zvcm06IElEeW5hbWljRm9ybSwgc2VjdGlvbk5hbWU6c3RyaW5nLCBmb3JtRmllbGQ6SUZvcm1GaWVsZCl7XG4gIGNvbnN0IHNlY3Rpb24gPSBkeW5hbWljRm9ybT8uZm9ybVNlY3Rpb25zPy5maW5kKChzZWN0aW9uKT0+IHNlY3Rpb24ubmFtZSA9PT0gc2VjdGlvbk5hbWUpO1xuICBpZihzZWN0aW9uKXtcbiAgICBzZWN0aW9uLmZpZWxkcy5wdXNoKGZvcm1GaWVsZCk7XG4gIH1cbiAgcmV0dXJuIGR5bmFtaWNGb3JtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0Rm9ybUZpZWxkcyhcbiAgeyBmb3JtU2VjdGlvbnMgfTogSUR5bmFtaWNGb3JtLFxuICBmb3JtRmllbGRzOiBJRm9ybUZpZWxkW11cbikge1xuICByZXR1cm4gZm9ybVNlY3Rpb25zPy5tYXAoKHNlY3Rpb24pID0+IHtcbiAgICByZXR1cm4gKHNlY3Rpb24uZmllbGRzID0gc2VjdGlvbi5maWVsZHMubWFwKChmb3JtRmllbGQpID0+IHtcbiAgICAgIGxldCBtYXRjaGVkRmllbGQgPSBmb3JtRmllbGRzLmZpbmQoXG4gICAgICAgICh4KSA9PiB4LmZpZWxkPy50b0xvd2VyQ2FzZSgpID09IGZvcm1GaWVsZC5maWVsZD8udG9Mb3dlckNhc2UoKVxuICAgICAgKTtcbiAgICAgIGlmIChtYXRjaGVkRmllbGQpIHtcbiAgICAgICAgZm9ybUZpZWxkID0gbWF0Y2hlZEZpZWxkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZvcm1GaWVsZDtcbiAgICB9KSk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0R2xvYmFsRmlsdGVycyhcbiAgZ2xvYmFsRmlsdGVyczogYWRkR2xvYmFsRmlsdGVyW10sXG4gIGZpZWxkOiBzdHJpbmcsXG4pIHtcbiAgbGV0IGZvcm1GaWVsZE9iajogYW55O1xuICBnbG9iYWxGaWx0ZXJzLm1hcCgoZmlsdGVyKT0+e1xuICAgIGlmIChmaWx0ZXIuZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IGZpZWxkPy50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICBmb3JtRmllbGRPYmogPSBmaWx0ZXI7XG4gICAgICB9XG4gIH0pO1xuICByZXR1cm4gZm9ybUZpZWxkT2JqO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Rm9ybUZpZWxkcyhcbiAgeyBmb3JtU2VjdGlvbnMgfTogSUR5bmFtaWNGb3JtLFxuICBmb3JtQ29udHJvbDogRUZvcm1Db250cm9sXG4pOiBJRm9ybUZpZWxkW10ge1xuICBsZXQgZm9ybUZpZWxkczogSUZvcm1GaWVsZFtdID0gW107XG4gIGZvcm1TZWN0aW9ucz8uZm9yRWFjaCgoc2VjdGlvbikgPT4ge1xuICAgIHNlY3Rpb24uZmllbGRzLmZvckVhY2goKGZvcm1GaWVsZCkgPT4ge1xuICAgICAgaWYgKGZvcm1GaWVsZC5jb250cm9sID09PSBmb3JtQ29udHJvbCkge1xuICAgICAgICBpZiAodHlwZW9mKGZvcm1GaWVsZC52YWx1ZSkgPT09ICdvYmplY3QnICYmIGZvcm1GaWVsZC52YWx1ZT8udGV4dCAmJiB0eXBlb2YoZm9ybUZpZWxkLnZhbHVlLnRleHQpID09PSAnc3RyaW5nJylcbiAgICAgICAge1xuICAgICAgICAgICBmb3JtRmllbGQudmFsdWUgPSBmb3JtRmllbGQudmFsdWUudGV4dC50cmltKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZm9ybUZpZWxkLnZhbHVlICYmIHR5cGVvZihmb3JtRmllbGQudmFsdWUpID09PSAnc3RyaW5nJylcbiAgICAgICAge1xuICAgICAgICAgIGZvcm1GaWVsZC52YWx1ZSA9IGZvcm1GaWVsZC52YWx1ZS50cmltKCk7XG4gICAgICAgIH1cbiAgICAgICAgZm9ybUZpZWxkcy5wdXNoKGZvcm1GaWVsZCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuICByZXR1cm4gZm9ybUZpZWxkcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZvcm1GaWVsZChcbiAgeyBmb3JtU2VjdGlvbnMgfTogSUR5bmFtaWNGb3JtLFxuICBmaWVsZDogc3RyaW5nXG4pOiBJRm9ybUZpZWxkIHtcbiAgbGV0IGZvcm1GaWVsZE9iajogYW55O1xuICBmb3JtU2VjdGlvbnM/LmZvckVhY2goKHNlY3Rpb24pID0+IHtcbiAgICBzZWN0aW9uLmZpZWxkcy5mb3JFYWNoKChmb3JtRmllbGQpID0+IHtcbiAgICAgIGlmIChmb3JtRmllbGQuZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IGZpZWxkPy50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgIGZvcm1GaWVsZE9iaiA9IGZvcm1GaWVsZDtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG4gIHJldHVybiBmb3JtRmllbGRPYmo7XG59XG5cbi8vIHRoaXMgZnVuY3Rpb24gaXMgYWx3YXlzIHJldHVybiBhIHZhbHVlIG9mIHRoZSBmaWVsZC4gSWYgcmV0dXJuRGlzcGxheUZpZWxkVmFsdWUgaXMgdHJ1ZSBhbmQgZGlzcGxheUZpZWxkXG4vLyBleGlzdCBpbiB0aGUgZmllbGQgdGhlbiBhbHdheXMgcmV0dXJuIGEgZGlzcGxheUZpZWxkIHZhbHVlLlxuZXhwb3J0IGZ1bmN0aW9uIGdldEZvcm1GaWVsZFZhbHVlKFxuICB7IGZvcm1TZWN0aW9ucyB9OiBJRHluYW1pY0Zvcm0sXG4gIGZpZWxkOiBzdHJpbmcsXG4gIHJldHVybkRpc3BsYXlGaWVsZFZhbHVlOmJvb2xlYW4gPSBmYWxzZVxuKSB7XG4gIGxldCB2YWx1ZTtcbiAgZm9yIChjb25zdCBzZWN0aW9uIG9mIGZvcm1TZWN0aW9ucyBhcyBhbnkpIHtcbiAgICBzZWN0aW9uLmZpZWxkcy5mb3JFYWNoKChmb3JtRmllbGQ6IGFueSkgPT4ge1xuICAgICAgaWYgKGZvcm1GaWVsZC5maWVsZD8udG9Mb3dlckNhc2UoKSA9PT0gZmllbGQ/LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgbGV0IGlzVmFsaWQgPSB0eXBlb2YgZm9ybUZpZWxkLnZhbHVlID09PSAnb2JqZWN0JyAmJiBmb3JtRmllbGQuY29udHJvbCAhPT0gRUZvcm1Db250cm9sLkNBTEVOREFSICYmIHJldHVybkRpc3BsYXlGaWVsZFZhbHVlO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgKGZvcm1GaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuTE9PS1VQX0lOUFVUIHx8IGZvcm1GaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuSU5QVVQpICYmXG4gICAgICAgICAgZm9ybUZpZWxkLmRpc3BsYXlGaWVsZFxuICAgICAgICApIHtcbiAgICAgICAgICB2YWx1ZSA9IGlzVmFsaWQgPyBmb3JtRmllbGQudmFsdWU/LnRleHQgOiBmb3JtRmllbGQudmFsdWU/LnZhbHVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhbHVlID0gaXNWYWxpZFxuICAgICAgICAgICAgPyBmb3JtRmllbGQudmFsdWU/LnRleHRcbiAgICAgICAgICAgIDogdHlwZW9mIGZvcm1GaWVsZC52YWx1ZSA9PT0gJ29iamVjdCcgJiYgZm9ybUZpZWxkLmNvbnRyb2wgIT09IEVGb3JtQ29udHJvbC5DQUxFTkRBUiAmJiBmb3JtRmllbGQuY29udHJvbCAhPT0gRUZvcm1Db250cm9sLk1VTFRJU0VMRUNUXG4gICAgICAgICAgICA/IGZvcm1GaWVsZC52YWx1ZT8udmFsdWVcbiAgICAgICAgICAgIDogZm9ybUZpZWxkLnZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Rm9ybUZpZWxkVmFsdWVBc1N0cmluZyhkeW5hbWljRm9ybTpJRHluYW1pY0Zvcm0sZmllbGQ6c3RyaW5nKTpzdHJpbmd7XG4gIGxldCB2YWx1ZTphbnkgPSBnZXRGb3JtRmllbGRWYWx1ZShkeW5hbWljRm9ybSxmaWVsZCwgdHJ1ZSk7XG4gIGlmICh2YWx1ZSl7XG4gICAgdmFsdWUgPSB2YWx1ZS50b1N0cmluZygpO1xuICAgfVxuICAgcmV0dXJuIHZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2VjdGlvbkZpZWxkVmFsdWUoXG4gIGZvcm1TZWN0aW9uczogSUZvcm1TZWN0aW9uW10sXG4gIGZpZWxkOiBzdHJpbmdcbikge1xuICBsZXQgZm9ybTogSUR5bmFtaWNGb3JtID0geyBmb3JtU2VjdGlvbnMgfTtcbiAgcmV0dXJuIGdldEZvcm1GaWVsZFZhbHVlKGZvcm0sIGZpZWxkLCB0cnVlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldFNhdmVGb3JtVmFsdWVzKFxuICBmb3JtU2VjdGlvbnM6IElGb3JtU2VjdGlvbltdLFxuICB0YWJsZXM/OiBzdHJpbmdbXSxcbikge1xuICBsZXQgc2VjdGlvbkZpZWxkczogYW55O1xuICBsZXQgcmVzcG9uc2U6IGFueSA9IHt9O1xuICBpZiAodGFibGVzICYmIHRhYmxlcy5sZW5ndGggPiAwKSB7XG4gICAgdGFibGVzLmZvckVhY2goKHRhYmxlTmFtZSkgPT4ge1xuICAgICAgZm9ybVNlY3Rpb25zLmZvckVhY2goKGZvcm1TZWN0aW9uKSA9PiB7XG4gICAgICAgIGlmIChmb3JtU2VjdGlvbi5maWVsZHM/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBzZWN0aW9uRmllbGRzID0gZm9ybVNlY3Rpb24uZmllbGRzPy5maWx0ZXIoeCA9PiB4LmNvbnRyb2wgIT09IEVGb3JtQ29udHJvbC5DQVJEKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZm9ybVNlY3Rpb24uaGVhZGVyRmllbGRzPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgc2VjdGlvbkZpZWxkcyA9IGZvcm1TZWN0aW9uLmhlYWRlckZpZWxkcz8uZmlsdGVyKHggPT4geC5jb250cm9sICE9PSBFRm9ybUNvbnRyb2wuQ0FSRCk7XG4gICAgICAgIH1cbiAgICAgICAgICBzZWN0aW9uRmllbGRzPy5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHRhYmxlID0gZmllbGQudGFibGVzPy5tYXAoKHRhYmxlKSA9PiB0YWJsZS50b0xvd2VyQ2FzZSgpKTtcblxuICAgICAgICAgIGlmICh0YWJsZSAmJiB0YWJsZS5pbmNsdWRlcyh0YWJsZU5hbWUudG9Mb3dlckNhc2UoKSkpIHtcbiAgICAgICAgICAgIGlmICghcmVzcG9uc2VbdGFibGVOYW1lXSkge1xuICAgICAgICAgICAgICByZXNwb25zZVt0YWJsZU5hbWVdID0ge307XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChmaWVsZC5maWVsZCAmJiBmaWVsZC5maWVsZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIHJlc3BvbnNlW3RhYmxlTmFtZV1bZmllbGQuZmllbGRdID0gZm9ybWF0Rm9ybUZpZWxkQ1ZhbHVlKGZpZWxkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgZm9ybVNlY3Rpb25zLmZvckVhY2goKGZvcm1TZWN0aW9uKSA9PiB7XG4gICAgICBpZiAoZm9ybVNlY3Rpb24uZmllbGRzPy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHNlY3Rpb25GaWVsZHMgPSBmb3JtU2VjdGlvbi5maWVsZHM/LmZpbHRlcih4ID0+IHguY29udHJvbCAhPT0gRUZvcm1Db250cm9sLkNBUkQpO1xuICAgICAgfVxuICAgICAgaWYgKGZvcm1TZWN0aW9uLmhlYWRlckZpZWxkcz8ubGVuZ3RoID4gMCkge1xuICAgICAgICBzZWN0aW9uRmllbGRzID0gZm9ybVNlY3Rpb24uaGVhZGVyRmllbGRzPy5maWx0ZXIoeCA9PiB4LmNvbnRyb2wgIT09IEVGb3JtQ29udHJvbC5DQVJEKTtcbiAgICAgIH1cbiAgICAgIHNlY3Rpb25GaWVsZHM/LmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICAgIGlmIChmaWVsZC5maWVsZCAmJiBmaWVsZC5maWVsZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgcmVzcG9uc2VbZmllbGQuZmllbGRdID0gZm9ybWF0Rm9ybUZpZWxkQ1ZhbHVlKGZpZWxkKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gcmVzcG9uc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRTYXZlQ2FyZFZhbHVlcyhcbiAgZm9ybVNlY3Rpb25zOiBJRm9ybVNlY3Rpb25bXSxcbiAgdGFibGVzPzogc3RyaW5nW11cbikge1xuICBsZXQgdmFsdWVzOiBJRm9ybUZpZWxkW10gPSBbXTtcbiAgZm9ybVNlY3Rpb25zPy5mb3JFYWNoKChzZWN0aW9uKSA9PiB7XG4gICAgc2VjdGlvbi5maWVsZHM/LmZvckVhY2goKGZpZWxkOiBhbnkpID0+IHtcbiAgICAgIGlmIChmaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuQ0FSRCAmJiBmaWVsZC5jYXJkLmRhdGEpIHtcbiAgICAgICAgZmllbGQuY2FyZC5kYXRhLmZvckVhY2goKGNhcmREYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAoY2FyZERhdGEuZHluYW1pY0Zvcm0uZm9ybVNlY3Rpb25zKSB7XG4gICAgICAgICAgICB2YWx1ZXMucHVzaChcbiAgICAgICAgICAgICAgc2V0U2F2ZUZvcm1WYWx1ZXMoY2FyZERhdGEuZHluYW1pY0Zvcm0uZm9ybVNlY3Rpb25zLCB0YWJsZXMpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuICByZXR1cm4gdmFsdWVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0RWRpdEZvcm1GaWVsZHMoZGF0YTogYW55LCBkeW5hbWljRm9ybTogSUR5bmFtaWNGb3JtKSB7XG4gIGlmIChkYXRhICYmIGRhdGEubGVuZ3RoID4gMCAmJiBBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgZGF0YS5mb3JFYWNoKChkYXRhUm93KSA9PiB7XG4gICAgICBzZXRFZGl0Rm9ybUZpZWxkc0luZm8oZGF0YVJvdywgZHluYW1pY0Zvcm0sIGRhdGEpO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIHNldEVkaXRGb3JtRmllbGRzSW5mbyhkYXRhLCBkeW5hbWljRm9ybSk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEZpbHRlcihcbiAgZmllbGQ6IHN0cmluZyxcbiAgdmFsdWU6IGFueSxcbiAgbWF0Y2hNb2RlOiBFTWF0Y2hNb2RlID0gRU1hdGNoTW9kZS5FUVVBTFMsXG4gIG9wZXJhdG9yOiBFT3BlcmF0b3IgPSBFT3BlcmF0b3IuQU5ELFxuKSB7XG4gIGNvbnN0IGZpbHRlcjogYW55ID0ge1xuICAgIGZpZWxkOiBmaWVsZCxcbiAgICBtYXRjaE1vZGU6IG1hdGNoTW9kZSxcbiAgICBvcGVyYXRvcjogb3BlcmF0b3IsXG4gICAgdmFsdWU6IHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgKHZhbHVlPy52YWx1ZSB8fCB2YWx1ZT8udGV4dCkgPyB2YWx1ZT8udmFsdWUgOiAodmFsdWUgfHwgdmFsdWUgPT0gJycpID8gdmFsdWUgOiBudWxsLFxuICB9O1xuICByZXR1cm4gZmlsdGVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0QW5kRmlsdGVyKGZpZWxkOiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcbiAgcmV0dXJuIHNldEZpbHRlcihmaWVsZCwgdmFsdWUsIEVNYXRjaE1vZGUuRVFVQUxTLCBFT3BlcmF0b3IuQU5EKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0T3JpZ0RhdGFGaWVsZFZhbHVlKGRhdGE6IGFueSwgcHJvcE5hbWU6IHN0cmluZyk6IGFueSB7XG4gIGxldCB2YWx1ZTogYW55O1xuICBpZiAoZGF0YSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFsdWUgPSBnZXRQcm9wZXJ0eVZhbHVlKGRhdGFbaV0sIHByb3BOYW1lKTtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlID0gZ2V0UHJvcGVydHlWYWx1ZShkYXRhLCBwcm9wTmFtZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE9yaWdEYXRhRmllbGRWYWx1ZUFzU3RyaW5nKFxuICBkYXRhOiBhbnksXG4gIHByb3BOYW1lOiBzdHJpbmdcbik6IHN0cmluZyB7XG4gIGxldCB2YWx1ZSA9IGdldE9yaWdEYXRhRmllbGRWYWx1ZShkYXRhLCBwcm9wTmFtZSk7XG4gIGlmICh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAnJztcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0U2VjdGlvblByb3BWYWx1ZXMoXG4gIHsgZm9ybVNlY3Rpb25zIH06IElEeW5hbWljRm9ybSxcbiAgc2VjdGlvbk5hbWU6IHN0cmluZyxcbiAgcHJvcHM6IElEaWN0aW9uYXJ5W11cbikge1xuICBmb3JtU2VjdGlvbnM/Lm1hcCgoc2VjdGlvbikgPT4ge1xuICAgIGlmIChzZWN0aW9uLm5hbWU/LnRvTG93ZXJDYXNlKCkgPT09IHNlY3Rpb25OYW1lLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgIHByb3BzLm1hcCgocHJvcCkgPT4ge1xuICAgICAgICByZXR1cm4gc2V0UHJvcFZhbHVlKHNlY3Rpb24sIHByb3ApO1xuICAgICAgfSk7XG4gICAgfVxuICB9KTtcbn1cblxuLyogI2VuZHJlZ2lvbiAqL1xuXG4vKiAjcmVnaW9uIHByaXZhdGUgbWV0aG9kcyAqL1xuXG5mdW5jdGlvbiBzZXRFZGl0Rm9ybUZpZWxkc0luZm8oZGF0YTogYW55LCBkeW5hbWljRm9ybTogSUR5bmFtaWNGb3JtIHwgSUR5bmFtaWNDYXJkLCBhbGxEYXRhOiBhbnlbXSA9IFtdKSB7XG4gIGlmIChkYXRhLnJlY29yZHMgJiYgZGF0YS5yZWNvcmRzLmxlbmd0aCA+IDApIHtcbiAgICBkYXRhLnJlY29yZHMuZm9yRWFjaCgocmVjb3JkOiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IGtleXM6IHN0cmluZ1tdID0gT2JqZWN0LmtleXMocmVjb3JkKTtcbiAgICAgIGR5bmFtaWNGb3JtPy5mb3JtU2VjdGlvbnM/LmZvckVhY2goKGZvcm1TZWN0aW9uKSA9PiB7XG4gICAgICAgIGlmIChmb3JtU2VjdGlvbi5maWVsZHMpIHtcbiAgICAgICAgICBzZXRFZGl0Rm9ybUZpZWxkc1ZhbHVlKGRhdGEsIGZvcm1TZWN0aW9uPy5maWVsZHMsIGtleXMsIHJlY29yZCwgYWxsRGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZvcm1TZWN0aW9uLmhlYWRlckZpZWxkcykge1xuICAgICAgICAgIHNldEVkaXRGb3JtRmllbGRzVmFsdWUoZGF0YSwgZm9ybVNlY3Rpb24/LmhlYWRlckZpZWxkcywga2V5cywgcmVjb3JkLCBhbGxEYXRhKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2V0RWRpdEZvcm1GaWVsZHNWYWx1ZShkYXRhOiBhbnksIGZvcm1GaWVsZHM6IGFueSwga2V5czogYW55LCByZWNvcmQ6IGFueSwgYWxsRGF0YTogYW55KXtcbiAgZm9ybUZpZWxkcz8uZm9yRWFjaCgoZm9ybUZpZWxkOiBhbnkpID0+IHtcbiAgICBjb25zdCBtYXRjaGVkS2V5OiBhbnkgPSBrZXlzLmZpbmQoXG4gICAgICAoeCkgPT4geC50b0xvd2VyQ2FzZSgpID09PSBmb3JtRmllbGQuZmllbGQ/LnRvTG93ZXJDYXNlKClcbiAgICApO1xuXG4gICAgaWYgKG1hdGNoZWRLZXkpIHtcbiAgICAgIC8vIHNldCBsYWJlbCBoeXBlcmxpbmtcbiAgICAgIHNldExhYmVsSHlwZXJsaW5rKGZvcm1GaWVsZCwgcmVjb3JkLCBrZXlzLCBhbGxEYXRhKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBmb3JtRmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkhZUEVSTElOSyAmJlxuICAgICAgZm9ybUZpZWxkLmh5cGVybGluayAmJlxuICAgICAgKChmb3JtRmllbGQuaHlwZXJsaW5rLmxpbmtJZCAmJiBmb3JtRmllbGQuaHlwZXJsaW5rLnBhcmFtcykgfHxcbiAgICAgICAgZm9ybUZpZWxkLmh5cGVybGluay5saW5rKVxuICAgICkge1xuICAgICAgbGV0IHBhcmFtcyA9IGZvcm1GaWVsZC5oeXBlcmxpbmsucGFyYW1zO1xuICAgICAgbGV0IHBhcmFtS2V5czogc3RyaW5nW10gPSBbXTtcblxuICAgICAgaWYgKFxuICAgICAgICAhcGFyYW1zICYmXG4gICAgICAgIGZvcm1GaWVsZC5oeXBlcmxpbmsubGluayAmJlxuICAgICAgICBmb3JtRmllbGQuaHlwZXJsaW5rLmxpbmsuaW5jbHVkZXMoJ319JylcbiAgICAgICkge1xuICAgICAgICBwYXJhbUtleXMgPSBmb3JtRmllbGQuaHlwZXJsaW5rLmxpbmsuc3BsaXQoJ319Jyk7XG4gICAgICAgIHBhcmFtS2V5cyA9IHBhcmFtS2V5cy5tYXAoKHBhcmFtS2V5KSA9PiB7XG4gICAgICAgICAgcGFyYW1LZXkgPSBwYXJhbUtleS5yZXBsYWNlKCd7eycsICcnKS50cmltKCk7XG4gICAgICAgICAgcmV0dXJuIHBhcmFtS2V5O1xuICAgICAgICB9KTtcbiAgICAgICAgcGFyYW1LZXlzID0gcGFyYW1LZXlzLmZpbHRlcigoeCkgPT4geC5sZW5ndGggPiAwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmKHBhcmFtcyl7XG4gICAgICAgICAgcGFyYW1LZXlzID0gT2JqZWN0LmtleXMocGFyYW1zKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmb3JtRmllbGQuaHlwZXJsaW5rLmxpbmsgPSBzZXRIeXBlcmxpbmsoXG4gICAgICAgIGtleXMsXG4gICAgICAgIHJlY29yZCxcbiAgICAgICAgZm9ybUZpZWxkLm9yaWduYWxMaW5rLFxuICAgICAgICBwYXJhbUtleXMsXG4gICAgICAgIGZvcm1GaWVsZC5oeXBlcmxpbmsucGFyYW1zLFxuICAgICAgICBhbGxEYXRhXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICBmb3JtRmllbGQubGFiZWw/LmxhYmVsQ29udHJvbD8uaHlwZXJsaW5rICYmXG4gICAgICAoKGZvcm1GaWVsZC5sYWJlbD8ubGFiZWxDb250cm9sPy5oeXBlcmxpbms/LmxpbmtJZCAmJiBmb3JtRmllbGQubGFiZWw/LmxhYmVsQ29udHJvbD8uaHlwZXJsaW5rPy5wYXJhbXMpIHx8XG4gICAgICAgIGZvcm1GaWVsZC5sYWJlbD8ubGFiZWxDb250cm9sPy5oeXBlcmxpbms/LmxpbmspXG4gICAgKSB7XG4gICAgICBsZXQgcGFyYW1zID0gZm9ybUZpZWxkLmxhYmVsPy5sYWJlbENvbnRyb2w/Lmh5cGVybGluaz8ucGFyYW1zO1xuICAgICAgbGV0IHBhcmFtS2V5czogc3RyaW5nW10gPSBbXTtcbiAgICAgIGlmICghcGFyYW1zICYmXG4gICAgICAgIGZvcm1GaWVsZC5sYWJlbD8ubGFiZWxDb250cm9sPy5oeXBlcmxpbmsubGluayAmJlxuICAgICAgICBmb3JtRmllbGQubGFiZWw/LmxhYmVsQ29udHJvbD8uaHlwZXJsaW5rPy5saW5rLmluY2x1ZGVzKCd9fScpXG4gICAgICApIHtcbiAgICAgICAgcGFyYW1LZXlzID0gZm9ybUZpZWxkLmxhYmVsPy5sYWJlbENvbnRyb2w/Lmh5cGVybGluaz8ubGluay5zcGxpdCgnfX0nKTtcbiAgICAgICAgcGFyYW1LZXlzID0gcGFyYW1LZXlzLm1hcCgocGFyYW1LZXkpID0+IHtcbiAgICAgICAgICBwYXJhbUtleSA9IHBhcmFtS2V5LnJlcGxhY2UoJ3t7JywgJycpLnRyaW0oKTtcbiAgICAgICAgICByZXR1cm4gcGFyYW1LZXk7XG4gICAgICAgIH0pO1xuICAgICAgICBwYXJhbUtleXMgPSBwYXJhbUtleXMuZmlsdGVyKCh4KSA9PiB4Lmxlbmd0aCA+IDApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHBhcmFtcykge1xuICAgICAgICAgIHBhcmFtS2V5cyA9IE9iamVjdC5rZXlzKHBhcmFtcyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbC5oeXBlcmxpbmsubGluayA9IHNldEh5cGVybGluayhcbiAgICAgICAga2V5cyxcbiAgICAgICAgcmVjb3JkLFxuICAgICAgICBmb3JtRmllbGQubGFiZWw/LmxhYmVsQ29udHJvbD8uaHlwZXJsaW5rPy5saW5rLFxuICAgICAgICBwYXJhbUtleXMsXG4gICAgICAgIHBhcmFtcyxcbiAgICAgICAgYWxsRGF0YVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGZvcm1GaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuQ0FMRU5EQVIgJiYgbWF0Y2hlZEtleSkge1xuICAgICAgICBmb3JtRmllbGQudmFsdWUgPSBmb3JtRmllbGQudGltZU9ubHkgPyByZWNvcmRbbWF0Y2hlZEtleV0gOiByZWNvcmRbbWF0Y2hlZEtleV1cbiAgICAgICAgICA/IG5ldyBEYXRlKHJlY29yZFttYXRjaGVkS2V5XSBhcyBzdHJpbmcpXG4gICAgICAgICAgOiAnJztcbiAgICAgICAgfSBlbHNlIGlmIChmb3JtRmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkNBUkQpIHtcbiAgICAgICAgICBpZiAoZm9ybUZpZWxkLmNhcmQgJiYgZm9ybUZpZWxkLmNhcmQuZm9ybVNlY3Rpb25zKSB7XG4gICAgICAgICAgICBpZiAoIWZvcm1GaWVsZC5jYXJkLmRhdGEpIHtcbiAgICAgICAgICAgICAgZm9ybUZpZWxkLmNhcmQuZGF0YSA9IGRhdGE7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHNldEVkaXRGb3JtRmllbGRzSW5mbyhkYXRhLCBmb3JtRmllbGQuY2FyZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICBmb3JtRmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkFVVE9DT01QTEVURSAmJlxuICAgICAgICBtYXRjaGVkS2V5XG4gICAgICApIHtcbiAgICAgICAgbGV0IGFycmF5VmFsdWUgPSBbXTtcbiAgICAgICAgaWYgKHJlY29yZFttYXRjaGVkS2V5XSAmJiBmb3JtRmllbGQuZGlzcGxheUZpZWxkKSB7XG4gICAgICAgICAgYXJyYXlWYWx1ZS5wdXNoKHtbZm9ybUZpZWxkLmRpc3BsYXlGaWVsZF0gOiByZWNvcmRbbWF0Y2hlZEtleV19KTtcbiAgICAgICAgfVxuICAgICAgICBmb3JtRmllbGQudmFsdWUgPSBhcnJheVZhbHVlO1xuICAgICAgfSBlbHNlIGlmIChmb3JtRmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkxPT0tVUF9JTlBVVCB8fCBmb3JtRmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLklOUFVUKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBmb3JtRmllbGQubGFiZWwgJiZcbiAgICAgICAgICBmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sICYmXG4gICAgICAgICAgZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbC5sb29rdXBDb250cm9sICYmXG4gICAgICAgICAgZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbC5sb29rdXBDb250cm9sLmRhdGFcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29uc3Qgb2JqID0gYXV0b1NldExvb2t1cERhdGEoXG4gICAgICAgICAgICBmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sLmxvb2t1cENvbnRyb2wuZGF0YS5kYXRhLFxuICAgICAgICAgICAgcmVjb3JkXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAob2JqKSB7XG4gICAgICAgICAgICBmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sLmxvb2t1cENvbnRyb2wuZGF0YS5kYXRhID0gb2JqO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBmb3JtRmllbGQubG9va3VwQ29udHJvbCAmJlxuICAgICAgICAgIGZvcm1GaWVsZC5sb29rdXBDb250cm9sLmRhdGEgJiZcbiAgICAgICAgICBmb3JtRmllbGQubG9va3VwQ29udHJvbC5kYXRhLmRhdGFcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29uc3Qgb2JqID0gYXV0b1NldExvb2t1cERhdGEoXG4gICAgICAgICAgICBmb3JtRmllbGQubG9va3VwQ29udHJvbC5kYXRhLmRhdGEsXG4gICAgICAgICAgICByZWNvcmRcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChvYmopIHtcbiAgICAgICAgICAgIGZvcm1GaWVsZC5sb29rdXBDb250cm9sLmRhdGEuZGF0YSA9IG9iajtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYocmVjb3JkW21hdGNoZWRLZXldKXtcbiAgICAgICAgICBmb3JtRmllbGQudmFsdWUgPSB0b1RyaW0ocmVjb3JkW21hdGNoZWRLZXldKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgZm9ybUZpZWxkLmRpc3BsYXlGaWVsZCAmJlxuICAgICAgICAgIGZvcm1GaWVsZC5kaXNwbGF5RmllbGQubGVuZ3RoID4gMFxuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCBtYXRjaERpc3BsYXlGaWVsZCA9IGdldE1hdGNoS2V5KFxuICAgICAgICAgICAgcmVjb3JkLFxuICAgICAgICAgICAgZm9ybUZpZWxkLmRpc3BsYXlGaWVsZFxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKG1hdGNoRGlzcGxheUZpZWxkKSB7XG4gICAgICAgICAgICBmb3JtRmllbGQudmFsdWUgPSB7XG4gICAgICAgICAgICAgIHRleHQ6IHRvVHJpbShyZWNvcmRbbWF0Y2hEaXNwbGF5RmllbGRdKSxcbiAgICAgICAgICAgICAgdmFsdWU6IGZvcm1GaWVsZC52YWx1ZT8udmFsdWUsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IG1hdGNoVmFsdWVGaWVsZCA9IGdldE1hdGNoS2V5KHJlY29yZCwgZm9ybUZpZWxkLmZpZWxkKTtcbiAgICAgICAgICBpZiAobWF0Y2hWYWx1ZUZpZWxkKSB7XG4gICAgICAgICAgICBmb3JtRmllbGQudmFsdWUgPSB7XG4gICAgICAgICAgICAgIHRleHQ6IGZvcm1GaWVsZC52YWx1ZT8udGV4dCxcbiAgICAgICAgICAgICAgdmFsdWU6IHRvVHJpbShyZWNvcmRbbWF0Y2hWYWx1ZUZpZWxkXSksXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgZm9ybUZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5DT01QT05FTlQgJiZcbiAgICAgICAgZm9ybUZpZWxkLmNvbXBvbmVudENvbnRyb2w/LmRhdGFcbiAgICAgICkge1xuICAgICAgICBjb25zdCBzZXREYXRhRnJvbVJlY29yZCA9IGZpbmRLZXlzQW5kVmFsdWUoXG4gICAgICAgICAgZm9ybUZpZWxkLmNvbXBvbmVudENvbnRyb2wuZGF0YSxcbiAgICAgICAgICByZWNvcmRcbiAgICAgICAgKTtcbiAgICAgICAgZm9ybUZpZWxkLmNvbXBvbmVudENvbnRyb2wuZGF0YSA9IHNldERhdGFGcm9tUmVjb3JkPy5kYXRhO1xuICAgICAgICBpZihzZXREYXRhRnJvbVJlY29yZD8ubWF0Y2hEYXRhKXtcbiAgICAgICAgICBjaGFuZ2VEeW5hbWljRm9ybVN0YXRlKFxuICAgICAgICAgICAgZm9ybUZpZWxkLmNvbXBvbmVudENvbnRyb2wuaWQsXG4gICAgICAgICAgICBmb3JtRmllbGQuY29tcG9uZW50Q29udHJvbD8uZGF0YSxcbiAgICAgICAgICAgIGZhbHNlXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgZm9ybUZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5OVU1FUklDICYmXG4gICAgICAgIGZvcm1GaWVsZC5sYWJlbD8ubGFiZWxDb250cm9sPy5sb29rdXBDb250cm9sPy5kYXRhPy5kYXRhXG4gICAgICApIHtcbiAgICAgICAgbGV0IHNldERhdGEgPSBmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sLmxvb2t1cENvbnRyb2w7XG4gICAgICAgIHNldERhdGEuZGF0YS5kYXRhID0gZmluZEtleXNBbmRWYWx1ZShzZXREYXRhLmRhdGEuZGF0YSwgcmVjb3JkKT8uZGF0YTtcbiAgICAgICAgY2hhbmdlRHluYW1pY0Zvcm1TdGF0ZShzZXREYXRhLmlkLCBzZXREYXRhLmRhdGEuZGF0YSwgZmFsc2UpO1xuICAgICAgfSBlbHNlIGlmIChmb3JtRmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkhZUEVSTElOSyBcbiAgICAgICAgJiYgIGZvcm1GaWVsZC5oeXBlcmxpbms/LnRhcmdldCA9PT0gRUh5cGVybGluay5ESUFMT0cgXG4gICAgICAgICYmIGZvcm1GaWVsZC5oeXBlcmxpbmsucGFyYW1zXG4gICAgICApIHtcbiAgICAgICAgZm9ybUZpZWxkLmh5cGVybGluay5wYXJhbXMgPSBmaW5kS2V5c0FuZFZhbHVlKGZvcm1GaWVsZC5oeXBlcmxpbmsucGFyYW1zLCByZWNvcmQpPy5kYXRhO1xuICAgICAgfSBlbHNlIGlmIChtYXRjaGVkS2V5KSB7XG4gICAgICAgIGlmIChmb3JtRmllbGQuZm9ybWF0KSB7XG4gICAgICAgICAgZm9ybUZpZWxkLnZhbHVlID0gZm9ybWF0Rm9ybUZpZWxkVmFsdWUoXG4gICAgICAgICAgICBmb3JtRmllbGQsXG4gICAgICAgICAgICByZWNvcmRbbWF0Y2hlZEtleV1cbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2UgaWYgKGZvcm1GaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuQ0hFQ0tCT1gpIHtcbiAgICAgICAgICBmb3JtRmllbGQudmFsdWUgPVxuICAgICAgICAgICAgcmVjb3JkW21hdGNoZWRLZXldICYmXG4gICAgICAgICAgICAocmVjb3JkW21hdGNoZWRLZXldLnRvU3RyaW5nKCkgPT09ICcxJyB8fFxuICAgICAgICAgICAgICByZWNvcmRbbWF0Y2hlZEtleV0udG9TdHJpbmcoKSA9PT0gJ3RydWUnKVxuICAgICAgICAgICAgICA/IHRydWVcbiAgICAgICAgICAgICAgOiBmYWxzZTtcbiAgICAgICAgfWVsc2UgaWYgKGZvcm1GaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuRFJPUERPV04pIHtcbiAgICAgICAgICBsZXQgZHJvcFZhbHVlID0gcmVjb3JkW21hdGNoZWRLZXldO1xuICAgICAgICAgIGlmIChkcm9wVmFsdWUgJiYgZHJvcFZhbHVlPy50b1N0cmluZygpICE9PSAnMCcpIHtcbiAgICAgICAgICAgIGZvcm1GaWVsZC52YWx1ZSA9IGRyb3BWYWx1ZS50b1N0cmluZygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmKGZvcm1GaWVsZC5jb250cm9sPT09RUZvcm1Db250cm9sLlNFTEVDVEJVVFRPTil7XG4gICAgICAgICAgIGZvcm1GaWVsZC52YWx1ZT10b1RyaW0ocmVjb3JkW21hdGNoZWRLZXldKSB8fCBmb3JtRmllbGQudmFsdWVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmb3JtRmllbGQudmFsdWUgPSB0b1RyaW0ocmVjb3JkW21hdGNoZWRLZXldKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSk7XG59XG4vL3NldCBoeXBlcmxpbmsgcGFyYW0gdmFsdWUgYXMgZmllbGQgdmFsdWVcbmV4cG9ydCBmdW5jdGlvbiBzZXRIeXBlcmxpbmtQYXJhbVZhbHVlKHJlY29yZDphbnksIGR5bmFtaWNGb3JtOiBJRHluYW1pY0Zvcm0pIHtcbiAgbGV0IGtleXM6IHN0cmluZ1tdID0gW107XG4gIGxldCBsaW5rOiBzdHJpbmcgPScnO1xuICBsZXQgcGFyYW1LZXlzOiBzdHJpbmdbXSA9IFtdO1xuICBsZXQgcGFyYW06IGFueTtcbiAgbGV0IGZpZWxkSW5mbzogYW55O1xuICAgIGR5bmFtaWNGb3JtPy5mb3JtU2VjdGlvbnM/LmZvckVhY2goKHNlY3Rpb246IGFueSkgPT4ge1xuICAgICAgc2VjdGlvbj8uZmllbGRzPy5mb3JFYWNoKChmb3JtRmllbGQ6IGFueSkgPT4ge1xuICAgICAgICBpZihmb3JtRmllbGQubGFiZWwgJiYgZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbCAmJiBmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sLmh5cGVybGluaz8ubGluayl7XG4gICAgICAgICAga2V5cyA9IE9iamVjdC5rZXlzKHJlY29yZCk7XG4gICAgICAgICAgaWYoZm9ybUZpZWxkPy5sYWJlbD8ubGFiZWxDb250cm9sPy5vcmlnbmFsTGluayl7XG4gICAgICAgICAgIGxpbmsgPSBmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sLm9yaWduYWxMaW5rO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmKGZvcm1GaWVsZD8ubGFiZWw/LmxhYmVsQ29udHJvbD8uaHlwZXJsaW5rPy5wYXJhbXMpe1xuICAgICAgICAgICBwYXJhbSA9IGZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2wuaHlwZXJsaW5rLnBhcmFtcztcbiAgICAgICAgICAgcGFyYW1LZXlzID0gT2JqZWN0LmtleXMocGFyYW0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmaWVsZEluZm8gPSBmb3JtRmllbGQ7XG4gICAgICAgICAgaWYocmVjb3JkICYmIGtleXMgJiYgbGluayAmJiBwYXJhbUtleXMgJiYgcGFyYW0gJiYgZmllbGRJbmZvKXtcbiAgICAgICAgICAgIGZpZWxkSW5mby5sYWJlbC5sYWJlbENvbnRyb2wuaHlwZXJsaW5rLmxpbmsgPSBzZXRIeXBlcmxpbmsoa2V5cywgcmVjb3JkLCBsaW5rLCBwYXJhbUtleXMsIHBhcmFtKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gb2JqQ29udmVydFRvTG93ZXIob2JqOiBhbnksIGlnbm9yZUNhc2luZzogYm9vbGVhbiA9IGZhbHNlKSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhvYmopLnJlZHVjZSgoYWNjdW11bGF0b3I6IGFueSwga2V5KSA9PiB7XG4gICAgYWNjdW11bGF0b3JbaWdub3JlQ2FzaW5nID8ga2V5IDoga2V5LnRvTG93ZXJDYXNlKCldID0gb2JqW2tleV07XG4gICAgcmV0dXJuIGFjY3VtdWxhdG9yO1xuICB9LCB7fSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGlja1NlY3Rpb25IaWdobGlnaHQodmFsdWU6IGFueSkge1xuICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcubGVmdC1zaWRlQmFyIC5wLXBhbmVsbWVudSAucC1wYW5lbG1lbnUtcGFuZWwnKTtcbiAgICAgICBjb25zdCB0aXRsZSA9IGRvY3VtZW50LmJvZHk/LnF1ZXJ5U2VsZWN0b3IoJ1t0aXRsZSA9IFwiJysgdmFsdWU/Lm5hbWUgKydcIl0nKTtcbiAgICAgICBjb25zdCBhbGxNZW51SXRlbXMgPSBkb2N1bWVudC5ib2R5Py5xdWVyeVNlbGVjdG9yQWxsKCcubGVmdC1zaWRlQmFyIC5wLXBhbmVsbWVudS1wYW5lbCcpO1xuICAgICAgIGFsbE1lbnVJdGVtcz8uZm9yRWFjaCgobWVuYXVJdGVtOiBhbnkpID0+IHtcbiAgICAgICAgbWVuYXVJdGVtPy5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgJ3AtcGFuZWxtZW51LXBhbmVsJyk7XG4gICAgICAgfSlcbiAgICAgICAgdGl0bGU/LnBhcmVudEVsZW1lbnQ/LnBhcmVudEVsZW1lbnQ/LnNldEF0dHJpYnV0ZSgnY2xhc3MnLCAncC1wYW5lbG1lbnUtcGFuZWwgYWN0aXZlJyk7XG4gICAgICAgIHRpdGxlPy5wYXJlbnRFbGVtZW50Py5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgJ3AtZWxlbWVudCBwLWNvbXBvbmVudCBwLXBhbmVsbWVudS1oZWFkZXIgcC1oaWdobGlnaHQnKTtcblxuICAgICAgICBjb25zdCBhY3RpdmVJY29uID0gZG9jdW1lbnQuYm9keT8ucXVlcnlTZWxlY3RvckFsbCgnLmFjdGl2ZS1pY29uJyk7XG4gIGFjdGl2ZUljb24/LmZvckVhY2goKGljb246IGFueSwgaW5kZXg6IGFueSkgPT4ge1xuICAgICAgaWNvbj8uc2V0QXR0cmlidXRlKCdjbGFzcycsICdwLWVsZW1lbnQgcC1jb21wb25lbnQgcC1wYW5lbG1lbnUtaGVhZGVyIHAtaGlnaGxpZ2h0Jyk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlQWN0aXZlSWNvbkNsYXNzKCkge1xuICBjb25zdCBhY3RpdmVJY29uID0gZG9jdW1lbnQuYm9keT8ucXVlcnlTZWxlY3RvckFsbCgnLmFjdGl2ZS1pY29uJyk7XG4gIGlmIChhY3RpdmVJY29uICYmIGFjdGl2ZUljb24ubGVuZ3RoID4gMCkge1xuICAgIGFjdGl2ZUljb24/LmZvckVhY2goKGljb246IGFueSwgaW5kZXg6IGFueSkgPT4ge1xuICAgICAgaWNvbj8uc2V0QXR0cmlidXRlKCdjbGFzcycsJ3AtZWxlbWVudCBwLWNvbXBvbmVudCBwLXBhbmVsbWVudS1oZWFkZXIgcC1oaWdobGlnaHQnKTtcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaGlnaGxpZ2h0TGVmdFNpZGViYXIoKXtcbiAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5mb3JtLWNvbnRhaW5lclwiKT8uYWRkRXZlbnRMaXN0ZW5lcihcIndoZWVsXCIsICgpID0+e1xuICBjb25zdCBzY3JvbGxUb3BQb3NpdGlvbjogYW55ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5mb3JtLWNvbnRhaW5lclwiKT8uc2Nyb2xsVG9wO1xuICBjb25zdCBhbGxJY29uRWxlbWVudHM6IGFueSA9IGRvY3VtZW50LmJvZHkucXVlcnlTZWxlY3RvckFsbChcIi5sZWZ0LXNpZGVCYXIgLnAtcGFuZWxtZW51IC5wLXBhbmVsbWVudS1wYW5lbFwiKTtcblxuICBhbGxJY29uRWxlbWVudHM/LmZvckVhY2goKGljb246IGFueSwgaW5kZXg6IGFueSkgPT4ge1xuICAgIGljb24/LnNldEF0dHJpYnV0ZSgndGFiSW5kZXgnLCAnc2VjdGlvbicgKyBpbmRleCk7XG4gIH0pO1xuICAgICByZW1vdmVBY3RpdmVJY29uQ2xhc3MoKTtcbiAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuZm9ybS1jb250YWluZXIgLmNhcmQnKT8uZm9yRWFjaCgoY2FyZDogYW55LCBpbmRleDogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRJZCA9IFwic2VjdGlvblwiICsgaW5kZXg7XG4gICAgICAgIGlmIChzY3JvbGxUb3BQb3NpdGlvbiA+PSBjYXJkLm9mZnNldFRvcCAmJiBzY3JvbGxUb3BQb3NpdGlvbiA8PSBjYXJkLm9mZnNldFRvcCArIGNhcmQub2Zmc2V0SGVpZ2h0KXtcbiAgICAgICAgICByZXR1cm4gIGRvY3VtZW50LmJvZHk/LnF1ZXJ5U2VsZWN0b3IoJ1t0YWJJbmRleD0nKyBjdXJyZW50SWQgKyAnXScpPy5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgJ3AtcGFuZWxtZW51LXBhbmVsIGFjdGl2ZScpO1xuICAgICAgICB9IGVsc2V7XG4gICAgICAgICAgcmV0dXJuICBkb2N1bWVudC5ib2R5Py5xdWVyeVNlbGVjdG9yKCdbdGFiSW5kZXg9JysgY3VycmVudElkICsgJ10nKT8uc2V0QXR0cmlidXRlKCdjbGFzcycsICdwLXBhbmVsbWVudS1wYW5lbCcpOyAgICBcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH0pO1xuICAgIH1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRLZXlzQW5kVmFsdWUoZGF0YTogYW55LCByZWNvcmQ6IGFueSkge1xuICBsZXQgdmFsdWVLZXk6IHN0cmluZyA9ICcnO1xuICBsZXQgc2V0RGF0YUZyb21SZWNvcmQgPSBmYWxzZTtcbiAgT2JqZWN0LmtleXMoZGF0YSkuZm9yRWFjaCgoZGF0YUtleSkgPT4ge1xuICAgIGxldCB2YWx1ZUNvbnRhaW5zS2V5OiBib29sZWFuID0gZmFsc2U7XG4gICAgaWYoZGF0YVtkYXRhS2V5XSAmJiBkYXRhW2RhdGFLZXldPy50b1N0cmluZygpPy5pbmNsdWRlcygneycpKXtcbiAgICAgIHZhbHVlQ29udGFpbnNLZXkgPSB0cnVlO1xuICAgICAgdmFsdWVLZXkgPSBkYXRhW2RhdGFLZXldPy50b1N0cmluZygpPy5yZXBsYWNlKFwie1wiLCBcIlwiKT8ucmVwbGFjZShcIn1cIiwgXCJcIilcbiAgICB9XG4gICAgbGV0IGtleSA9IE9iamVjdC5rZXlzKHJlY29yZCkuZmluZCgoa2V5KSA9PiB2YWx1ZUNvbnRhaW5zS2V5ID8gKHZhbHVlS2V5LnRvTG93ZXJDYXNlKCkgPT09IGtleS50b0xvd2VyQ2FzZSgpKSA6IChkYXRhS2V5LnRvTG93ZXJDYXNlKCkgPT09IGtleS50b0xvd2VyQ2FzZSgpKSk7XG4gICAgaWYgKChrZXkgJiYga2V5Lmxlbmd0aCA+IDAgJiYgcmVjb3JkW2tleV0pfHwgcmVjb3JkW2tleV0gPT09IGZhbHNlKSB7XG4gICAgICBzZXREYXRhRnJvbVJlY29yZCA9IHRydWVcbiAgICAgIGRhdGEgPSB7IC4uLmRhdGEsIFtkYXRhS2V5XTogcmVjb3JkW2tleV0gfTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4ge21hdGNoRGF0YTogc2V0RGF0YUZyb21SZWNvcmQsIGRhdGE6IGRhdGF9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0UHJvcFZhbHVlKG9iajogYW55LCBwcm9wOiBJRGljdGlvbmFyeSkge1xuICBjb25zdCBtYXRjaGVkS2V5OiBzdHJpbmcgPSBnZXRNYXRjaEtleShvYmosIHByb3AubmFtZSk7XG4gIGlmIChtYXRjaGVkS2V5KSB7XG4gICAgcmV0dXJuIChvYmpbbWF0Y2hlZEtleV0gPSBwcm9wLnZhbHVlKTtcbiAgfVxuICBlbHNle1xuICAgcmV0dXJuKCBvYmpbcHJvcC5uYW1lXT1wcm9wLnZhbHVlKVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNSb2xlKHJvbGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBsZXQgc3RvcmFnZSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdDdXJyZW50VXNlckluZm8nKTtcbiAgaWYgKHN0b3JhZ2UpIHtcbiAgICBsZXQgY3VycmVudFVzZXIgPSBKU09OLnBhcnNlKHN0b3JhZ2UpO1xuICAgIGlmIChjdXJyZW50VXNlciAmJiBjdXJyZW50VXNlci5yb2xlcyAmJiBjdXJyZW50VXNlci5yb2xlcy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gY3VycmVudFVzZXIucm9sZXMuc29tZSgoaXRlbTogYW55KSA9PiBpdGVtLmNvZGUudG9TdHJpbmcoKT8udHJpbSgpPy50b0xvd2VyQ2FzZSgpID09PSByb2xlPy50cmltKCk/LnRvTG93ZXJDYXNlKCkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIHNldExhYmVsSHlwZXJsaW5rKGl0ZW06IGFueSwgcmVjb3JkOiBhbnksIGtleXM6IHN0cmluZ1tdLCBhbGxEYXRhOiBhbnlbXSA9IFtdKSB7XG4gIGlmIChcbiAgICBpdGVtLmxhYmVsICYmXG4gICAgaXRlbS5sYWJlbC5sYWJlbENvbnRyb2wgJiZcbiAgICBpdGVtLmxhYmVsLmxhYmVsQ29udHJvbC5oeXBlcmxpbmsgJiZcbiAgICBpdGVtLmxhYmVsLmxhYmVsQ29udHJvbC5oeXBlcmxpbmsucGFyYW1zXG4gICkge1xuICAgIGNvbnN0IHBhcmFtS2V5cyA9IE9iamVjdC5rZXlzKGl0ZW0ubGFiZWwubGFiZWxDb250cm9sLmh5cGVybGluay5wYXJhbXMpO1xuICAgIGNvbnN0IGxpbmsgPSBpdGVtLmxhYmVsLmxhYmVsQ29udHJvbC5oeXBlcmxpbmsubGluaztcbiAgICBpZiAoaXRlbS5sYWJlbC5sYWJlbENvbnRyb2wuaHlwZXJsaW5rLmxpbmspIHtcbiAgICAgIGl0ZW0ubGFiZWwubGFiZWxDb250cm9sLmh5cGVybGluay5saW5rID0gc2V0SHlwZXJsaW5rKFxuICAgICAgICBrZXlzLFxuICAgICAgICByZWNvcmQsXG4gICAgICAgIGxpbmssXG4gICAgICAgIHBhcmFtS2V5cyxcbiAgICAgICAgaXRlbS5sYWJlbC5sYWJlbENvbnRyb2wuaHlwZXJsaW5rLnBhcmFtcyxcbiAgICAgICAgYWxsRGF0YVxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEh5cGVybGluayhcbiAga2V5czogc3RyaW5nW10sXG4gIHJlY29yZDogYW55LFxuICBsaW5rOiBzdHJpbmcsXG4gIHBhcmFtS2V5czogc3RyaW5nW10sXG4gIHBhcmFtczogYW55LFxuICBhbGxEYXRhOiBhbnlbXSA9IFtdXG4pOiBzdHJpbmcge1xuICBsZXQgbmV3TGluazogc3RyaW5nID0gbGluaztcbiAgcmVjb3JkID0gb2JqQ29udmVydFRvTG93ZXIocmVjb3JkKTtcbiAgcGFyYW1LZXlzLmZvckVhY2goKHBhcmFta2V5KSA9PiB7XG4gICAgY29uc3QgcGFyYW06IHN0cmluZyA9ICd7eycgKyBwYXJhbWtleS50b0xvd2VyQ2FzZSgpICsgJ319JztcbiAgICBjb25zdCBpc1BhcmFtTWF0Y2hlZCA9IG5ld0xpbmsubG9jYWxlQ29tcGFyZShwYXJhbSk7XG4gICAgY29uc3QgcGFyYW1JblJlY29yZCA9IHNldFBhcmFtS2V5VmFsdWUocmVjb3JkLCBhbGxEYXRhLCBwYXJhbWtleSk7XG5cbiAgICBpZiAoaXNQYXJhbU1hdGNoZWQpIHtcbiAgICAgIGxldCBwYXJhbVZhbHVlID0gcGFyYW1zID8gcGFyYW1zW3BhcmFta2V5XSA6IG51bGw7XG4gICAgICBpZihwYXJhbVZhbHVlID09PSAnJyAmJiBwYXJhbUluUmVjb3JkKXtcbiAgICAgICAgcGFyYW1WYWx1ZSA9ICd7JytwYXJhbWtleSsnfSc7XG4gICAgICB9XG4gICAgICBpZiAocGFyYW1WYWx1ZSkge1xuICAgICAgICBjb25zdCBwcm9wTmFtZSA9IHBhcmFtVmFsdWUudG9TdHJpbmcoKS5yZXBsYWNlKCd7JywgJycpLnJlcGxhY2UoJ30nLCAnJyk7XG4gICAgICAgIGxldCBwcm9wVmFsdWUgPSByZWNvcmRbcHJvcE5hbWUudG9Mb3dlckNhc2UoKV07XG4gICAgICAgIGlmICh0eXBlb2YgcHJvcFZhbHVlID09PSAnc3RyaW5nJyAgJiYgcHJvcFZhbHVlICE9IG51bGwgJiYgcHJvcFZhbHVlLmluY2x1ZGVzKFwiJlwiKSkge1xuICAgICAgICAgIHByb3BWYWx1ZSA9IGVuY29kZVVSSUNvbXBvbmVudChwcm9wVmFsdWUpO1xuICAgICAgICB9IFxuICAgICAgICBcbiAgICAgICAgLy8gaW4gY2FzZSBvZiBwcm9wIG5vdCBmb3VuZCBpbiByZWNvcmQgdGhlbiB0cnkgdG8gZmluZCBwcm9wIGluIGFsbCBkYXRhIGFycmF5LCB0byBnZXQgaXRzIHZhbHVlIFxuICAgICAgICBpZiAoIXByb3BWYWx1ZSAmJiBhbGxEYXRhICYmIGFsbERhdGEubGVuZ3RoID4gMClcbiAgICAgICAge1xuICAgICAgICAgIGFsbERhdGEuZm9yRWFjaCgoZGF0YSk9PntcbiAgICAgICAgICAgIC8vY29uc3QgdmFsdWUgPSBkYXRhLnJlY29yZHMuZmluZCgoeCk9PiB4W3Byb3BOYW1lXSk7XG4gICAgICAgICAgICBkYXRhLnJlY29yZHMuZm9yRWFjaCgoYWxsUmVjb3JkOiBhbnkpPT57XG4gICAgICAgICAgICAgIGxldCBrZXlzID0gT2JqZWN0LmtleXMoYWxsUmVjb3JkKTtcbiAgICAgICAgICAgICAgbGV0IG1hdGNoS2V5ID0ga2V5cy5maW5kKCh4KT0+IHgudG9Mb3dlckNhc2UoKSA9PT0gcHJvcE5hbWUudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgICAgICAgIGlmIChtYXRjaEtleSl7XG4gICAgICAgICAgICAgICAgIHByb3BWYWx1ZSA9IGFsbFJlY29yZFttYXRjaEtleV07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG5ld0xpbmsgPSBuZXdMaW5rLnJlcGxhY2UobmV3IFJlZ0V4cChwYXJhbSwgJ2lnJyksIHRvVHJpbShwYXJhbVZhbHVlLnRvU3RyaW5nKCkuaW5jbHVkZXMoJ3snKSA/IHByb3BWYWx1ZSA6IHBhcmFtVmFsdWUpKTtcbiAgICAgIFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gZ2V0IHBhcmFtIHZhbHVlIGZyb20gYXBpIHJlc3BvbnNlLCBpZiBwYXJhbSBrZXkgZXhpc3RzIGluIGl0XG4gICAgICAgIGNvbnN0IG1hdGNoZWRLZXk6IGFueSA9IGtleXMuZmluZChcbiAgICAgICAgICAoeCkgPT4geC50b0xvd2VyQ2FzZSgpID09PSBwYXJhbWtleS50b0xvd2VyQ2FzZSgpXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKG1hdGNoZWRLZXkpIHtcbiAgICAgICAgICBwYXJhbVZhbHVlID0gcmVjb3JkW21hdGNoZWRLZXldO1xuICAgICAgICAgIGlmIChwYXJhbVZhbHVlKSB7XG4gICAgICAgICAgICBuZXdMaW5rID0gbmV3TGluay5yZXBsYWNlKFxuICAgICAgICAgICAgICBuZXcgUmVnRXhwKHBhcmFtLCAnaWcnKSxcbiAgICAgICAgICAgICAgdG9UcmltKHBhcmFtVmFsdWUpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBuZXdMaW5rID0gbmV3TGluay5yZXBsYWNlKG5ldyBSZWdFeHAocGFyYW0sICdpZycpLCB0b1RyaW0oJycpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICAvLyByZXBsYWNlIHRoZSB7e3BhcmFtfX0gd2l0aCBlbXB0eVxuICBpZihuZXdMaW5rICYmIG5ld0xpbmsuaW5jbHVkZXMoXCJ7e1wiKSAmJiBuZXdMaW5rLmluY2x1ZGVzKFwifX1cIikpe1xuICAgIG5ld0xpbmsgPSBuZXdMaW5rPy5yZXBsYWNlKC97Ky4qP30rL2csIFwiXCIpO1xuICB9XG4gIHJldHVybiBuZXdMaW5rO1xufVxuXG4vLyBpdHMgY2hlY2tpbmcgaWYgdGhlcmUgaXMgbm8gdmFsdWUgaW4gaHlwZXJsaW5rIHBhcmFtIHRoZW4gaXQgc2V0IGtleSBhcyBhIHBhcmFtVmFsdWVcbmZ1bmN0aW9uIHNldFBhcmFtS2V5VmFsdWUocmVjb3JkOiBhbnksIGFsbERhdGE6IGFueVtdID0gW10sIHBhcmFta2V5OiBhbnkpe1xuICBsZXQgcGFyYW1WYWx1ZTogYm9vbGVhbiA9IGZhbHNlO1xuICBpZihhbGxEYXRhICYmIGFsbERhdGEubGVuZ3RoID4gMCl7XG4gICAgYWxsRGF0YS5mb3JFYWNoKChkYXRhOiBhbnkpPT57XG4gICAgICBpZihkYXRhLnJlY29yZHMgJiYgZGF0YS5yZWNvcmRzLmxlbmd0aCA+IDApe1xuICAgICAgICBkYXRhLnJlY29yZHMuZm9yRWFjaCgoYWxsUmVjb3JkOiBhbnkpID0+e1xuICAgICAgICAgICBpZihwYXJhbVZhbHVlID09PSBmYWxzZSl7XG4gICAgICAgICAgICBwYXJhbVZhbHVlID0gT2JqZWN0LmtleXMoYWxsUmVjb3JkKS5zb21lKChyZWNvcmQpPT4gcmVjb3JkLnRvTG93ZXJDYXNlKCkgPT09IHBhcmFta2V5LnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgfSk7XG4gIH1lbHNle1xuICAgICAgIHBhcmFtVmFsdWUgPSBPYmplY3Qua2V5cyhyZWNvcmQpLnNvbWUoKHgpPT4geCA9PT0gcGFyYW1rZXkudG9Mb3dlckNhc2UoKSk7XG4gIH1cbiAgcmV0dXJuIHBhcmFtVmFsdWU7XG59XG5cbmZ1bmN0aW9uIGdldFByb3BlcnR5VmFsdWUoZGF0YTogYW55LCBwcm9wTmFtZTogc3RyaW5nKSB7XG4gIGxldCBwcm9wVmFsdWU6IGFueTtcbiAgZGF0YS5yZWNvcmRzPy5mb3JFYWNoKChyZWNvcmQ6IGFueSkgPT4ge1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHJlY29yZCkpIHtcbiAgICAgIGlmIChrZXkgJiYgcHJvcE5hbWUgJiYga2V5LnRvTG93ZXJDYXNlKCkgPT09IHByb3BOYW1lLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgcHJvcFZhbHVlID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHByb3BWYWx1ZTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0Rm9ybUZpZWxkQ1ZhbHVlKGZpZWxkOiBhbnkpIHtcbiAgaWYgKFxuICAgIGZpZWxkLmZvcm1hdD8udHlwZSA9PT0gRUZvcm1hdFR5cGUuQk9PTEVBTl9ZTiB8fFxuICAgIGZpZWxkLmZvcm1hdD8uZm9ybWF0dGVyPy5uYW1lID09PSAndG9Cb29sZWFuJ1xuICApIHtcbiAgICByZXR1cm4gKGZpZWxkLnZhbHVlID09PSAxIHx8IGZpZWxkLnZhbHVlPy50b1N0cmluZygpID09PSAndHJ1ZScgfHwgZmllbGQudmFsdWU/LnRvU3RyaW5nKCkgPT09ICdZJykgPyAnWScgOiAnTic7XG4gIH0gZWxzZSBpZiAoXG4gICAgZmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkNBTEVOREFSICYmXG4gICAgKGZpZWxkLnZhbHVlIHx8IGZpZWxkLnZhbHVlID09PSAnJylcbiAgKSB7XG4gICAgaWYoZmllbGQudGltZU9ubHkgfHwgZmllbGQuc2hvd3RpbWUpe1xuICAgICAgLy8gY29uc3QgZGF0ZVRpbWVSZWdleCA9IC9eXFxkezR9LVxcZHsyfS1cXGR7Mn0gKFxcZHsyfSk6KFxcZHsyfSk6KFxcZHsyfSkkLzsgLy8gUmVnZXggZm9yIGRhdGV0aW1lIGZvcm1hdFxuICAgICAgLy8gY29uc3QgbWF0Y2ggPSBmaWVsZC52YWx1ZS5tYXRjaChkYXRlVGltZVJlZ2V4KTtcbiAgICAgIC8vIGlmIChtYXRjaCkge1xuICAgICAgLy8gICBmaWVsZC52YWx1ZSA9IGZvcm1hdERhdGUoZmllbGQudmFsdWUsICdoaDptbSBhJywgJ2VuLVVTJyk7XG4gICAgICAvLyB9ZWxzZSB7XG4gICAgICAgIGZpZWxkLnZhbHVlID0gZmllbGQudmFsdWU7XG4gICAgICAvLyB9XG4gICAgfWVsc2V7XG4gICAgICBmaWVsZC52YWx1ZSA9XG4gICAgICBmaWVsZC5zaG93VGltZSA9PT0gdHJ1ZVxuICAgICAgICA/IHRvU2hvcnREYXRlVGltZShmaWVsZC52YWx1ZSwgZmllbGQuZm9ybWF0KVxuICAgICAgICA6IHRvU2hvcnREYXRlKGZpZWxkLnZhbHVlLCBmaWVsZC5mb3JtYXQpXG4gICAgfVxuICAgIHJldHVybiBmaWVsZC52YWx1ZTtcbiAgfSBlbHNlIGlmIChcbiAgICAoZmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkxPT0tVUF9JTlBVVCB8fCBmaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuSU5QVVQpICYmXG4gICAgZmllbGQudmFsdWUgJiZcbiAgICB0eXBlb2YgZmllbGQudmFsdWUgPT09ICdvYmplY3QnXG4gICkge1xuICAgIHJldHVybiBmaWVsZC52YWx1ZS52YWx1ZSA9PSB1bmRlZmluZWQgPyBudWxsIDogZmllbGQudmFsdWUudmFsdWU7XG4gIH0gZWxzZSBpZiAoXG4gICAgZmllbGQubGFiZWwgJiZcbiAgICBmaWVsZC5sYWJlbC5sYWJlbENvbnRyb2wgJiZcbiAgICBmaWVsZC5sYWJlbC5sYWJlbENvbnRyb2wuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkxPT0tVUF9JTlBVVCAmJlxuICAgIGZpZWxkLnZhbHVlICYmXG4gICAgdHlwZW9mIGZpZWxkLnZhbHVlID09PSAnb2JqZWN0J1xuICApIHtcbiAgICByZXR1cm4gZmllbGQudmFsdWUudmFsdWU7XG4gIH0gZWxzZSB7XG4gICAgZmllbGQudmFsdWUgPSBmaWVsZC52YWx1ZSA9PSB1bmRlZmluZWQgPyBudWxsIDogZmllbGQudmFsdWU7XG4gICAgcmV0dXJuIGZpZWxkLnZhbHVlO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhdXRvU2V0TG9va3VwRGF0YShcbiAgZmllbGREYXRhOiBhbnksXG4gIHJlc3BvbnNlOiBhbnlcbiAgKSB7XG4gIGxldCBvYmogPSB7fTtcbiAgbGV0IHJlY29yZCA9IHNldERhdGFGaWVsZHMoW3Jlc3BvbnNlXSk7XG4gIGlmIChyZWNvcmQgJiYgcmVjb3JkLmxlbmd0aCA+IDApIHtcbiAgICByZWNvcmQuZm9yRWFjaCgoeDogYW55KSA9PiB7XG4gICAgICByZWNvcmQgPSB4O1xuICAgIH0pO1xuICB9XG4gIGlmIChmaWVsZERhdGEgJiYgcmVjb3JkKSB7XG4gICAgT2JqZWN0LmVudHJpZXMoZmllbGREYXRhKS5mb3JFYWNoKChbZGF0YUtleSwgZGF0YVZhbHVlXTogYW55KSA9PiB7XG4gICAgICBsZXQgcm93S2V5cyA9IE9iamVjdC5rZXlzKHJlY29yZCk7XG4gICAgICBsZXQga2V5ID0gcm93S2V5cz8uZmluZCgoeCkgPT4geD8udG9Mb3dlckNhc2UoKSA9PT0gZGF0YUtleT8udG9TdHJpbmcoKT8udG9Mb3dlckNhc2UoKSk7XG4gICAgICBsZXQgdmFsdWUgPSByb3dLZXlzPy5maW5kKFxuICAgICAgICAoeCkgPT4gZGF0YVZhbHVlICYmIGRhdGFWYWx1ZT8udG9TdHJpbmcoKS5pbmNsdWRlcygneycpICYmIHg/LnRvTG93ZXJDYXNlKCkgPT09IGRhdGFWYWx1ZT8udG9TdHJpbmcoKT8udG9Mb3dlckNhc2UoKT8ucmVwbGFjZShcIntcIiwgXCJcIik/LnJlcGxhY2UoXCJ9XCIsIFwiXCIpXG4gICAgICApPy50b0xvd2VyQ2FzZSgpO1xuICAgICAgaWYgKHZhbHVlICYmIHZhbHVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgb2JqID0geyAuLi5vYmosIFtkYXRhS2V5XTogcmVjb3JkW3ZhbHVlKydfb2JqJ10/Lm9wdGlvblZhbHVlID8gcmVjb3JkW3ZhbHVlKydfb2JqJ10/Lm9wdGlvblZhbHVlIDogcmVjb3JkW3ZhbHVlXSB9O1xuICAgICAgfSBlbHNlIGlmIChrZXkgJiYga2V5Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgb2JqID0geyAuLi5vYmosIFtkYXRhS2V5XTogcmVjb3JkW2tleS50b0xvd2VyQ2FzZSgpXSB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb2JqID0geyAuLi5vYmosIFtkYXRhS2V5XTogZGF0YVZhbHVlIH07XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIG9iajtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0R3JpZExvb2t1cERhdGEoY29sdW1uOiBJR3JpZENvbHVtbltdLCBmaWVsZDogc3RyaW5nLCBkYXRhOiBhbnkpe1xuICBsZXQgb2JqID0gY29sdW1uLmZpbmQoKHgpPT4geC5maWVsZD8udG9Mb3dlckNhc2UoKSA9PT0gZmllbGQudG9Mb3dlckNhc2UoKSk7XG4gIGlmKG9iaiAmJiBvYmoubG9va3VwQ29udHJvbD8uZGF0YSl7XG4gICAgb2JqLmxvb2t1cENvbnRyb2wuZGF0YS5kYXRhID0gZGF0YTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0RGF0YUZpZWxkcyhyZXNwb25zZTogYW55W10pIHtcbiAgbGV0IGRhdGE6IGFueSA9IFtdO1xuICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UubGVuZ3RoID4gMCkge1xuICAgIHJlc3BvbnNlLm1hcCgoeDogYW55LCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBPYmplY3Qua2V5cyh4KS5yZWR1Y2UoXG4gICAgICAgIChwcmV2LCBjdXJyZW50KSA9PiAoeyAuLi5wcmV2LCBbY3VycmVudC50b0xvd2VyQ2FzZSgpXTogeFtjdXJyZW50XSB9KSxcbiAgICAgICAge31cbiAgICAgICk7XG5cbiAgICAgIGRhdGEucHVzaChyZXN1bHQpO1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBkYXRhO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0RGlhbG9nUmVzcG9uc2UoXG4gIGZvcm1GaWVsZDogYW55LFxuICBmb3JtRGF0YTogYW55LFxuICByZXNwb25zZTogYW55XG4pIHtcbiAgbGV0IHZhbHVlOiBhbnk7XG4gIGlmIChyZXNwb25zZSkge1xuICAgIC8vIGlmIHNlbGVjdGVkVmFsdWUgZG9lcyBub3QgZXhpc3QgdGhlbiBjb25zaWRlciB2YWx1ZUZpZWxkIGFzIHNlbGVjdGVkVmFsdWVcbiAgICBpZiAoXG4gICAgICBmb3JtRGF0YSAmJlxuICAgICAgZm9ybURhdGEuZGF0YSAmJlxuICAgICAgZm9ybURhdGEuZGF0YS5sYWJlbFByb3AgJiZcbiAgICAgICFmb3JtRGF0YS5kYXRhLnZhbHVlUHJvcFxuICAgICkge1xuICAgICAgZm9ybURhdGEuZGF0YS52YWx1ZVByb3AgPSBmb3JtRGF0YS5kYXRhLmxhYmVsUHJvcDtcbiAgICB9XG4gICAgZWxzZSBpZiAoXG4gICAgICBmb3JtRGF0YSAmJlxuICAgICAgZm9ybURhdGEuZGF0YSAmJlxuICAgICAgZm9ybURhdGEuZGF0YS52YWx1ZVByb3AgJiZcbiAgICAgICFmb3JtRGF0YS5kYXRhLmxhYmVsUHJvcFxuICAgICkge1xuICAgICAgZm9ybURhdGEuZGF0YS5sYWJlbFByb3AgPSBmb3JtRGF0YS5kYXRhLnZhbHVlUHJvcDtcbiAgICB9XG5cbiAgICBjb25zdCBtYXRjaFZhbHVlS2V5OiBzdHJpbmcgPSBnZXRNYXRjaEtleShcbiAgICAgIHJlc3BvbnNlLFxuICAgICAgZm9ybURhdGE/LmRhdGE/LnZhbHVlUHJvcFxuICAgICk7XG4gICAgY29uc3QgbWF0Y2hGaWVsZEtleTogc3RyaW5nID0gZ2V0TWF0Y2hLZXkoXG4gICAgICByZXNwb25zZSxcbiAgICAgIGZvcm1EYXRhPy5kYXRhPy5sYWJlbFByb3BcbiAgICApO1xuXG4gICAgaWYgKFxuICAgICAgZm9ybURhdGE/LmRhdGEgJiZcbiAgICAgIGZvcm1EYXRhPy5kYXRhLnZhbHVlUHJvcCAmJlxuICAgICAgZm9ybURhdGE/LmRhdGEubGFiZWxQcm9wXG4gICAgKSB7XG4gICAgICBsZXQgdmFsdWVQcm9wID0gcmVzcG9uc2VbbWF0Y2hWYWx1ZUtleV07XG4gICAgICBsZXQgbWF0Y2hUZXh0ID0gcmVzcG9uc2VbbWF0Y2hGaWVsZEtleV07XG4gICAgICBpZiAodHlwZW9mIHZhbHVlUHJvcCA9PT0gJ3N0cmluZycgJiYgdHlwZW9mIG1hdGNoVGV4dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgdmFsdWVQcm9wID0gdmFsdWVQcm9wLnRyaW0oKTtcbiAgICAgICAgbWF0Y2hUZXh0ID0gbWF0Y2hUZXh0LnRyaW0oKTtcbiAgICAgIH1cbiAgICAgIHZhbHVlID0geyB0ZXh0OiBtYXRjaFRleHQsIHZhbHVlOiB2YWx1ZVByb3AgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgRmllbGRLZXk6IHN0cmluZyA9IGdldE1hdGNoS2V5KHJlc3BvbnNlLCBmb3JtRmllbGQuZmllbGQpO1xuICAgICAgbGV0IHZhbHVlID0gcmVzcG9uc2VbRmllbGRLZXldO1xuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWU/LnRvU3RyaW5nKCk/LnRyaW0oKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3VycmVudFVybCgpOnN0cmluZ3tcbiAgbGV0IGN1cnJlbnRSb3V0ZTogc3RyaW5nID0gJyc7XG4gIGxldCB1cmwgPSB3aW5kb3cubG9jYXRpb24uaHJlZjtcbiAgaWYodXJsKXtcbiAgICBsZXQgYXJyID0gdXJsLnNwbGl0KCcvJyk7XG4gICAgY3VycmVudFJvdXRlID0gYXJyW2Fyci5sZW5ndGgtMV1cbiAgfSAgICBcbiAgcmV0dXJuIGN1cnJlbnRSb3V0ZTtcbn1cblxuZXhwb3J0ICBmdW5jdGlvbiBnZXRHcmlkRmlsdGVycygpe1xuICBsZXQgZmlsdGVyczogYW55ID0gW107XG4gIGxldCBncmlkRmlsdGVycyA9IGN1cnJlbnRVcmwoKTtcbiAgICBpZihncmlkRmlsdGVycyAmJiBncmlkRmlsdGVycy5sZW5ndGggPiAwKXtcbiAgICAgIGNvbnN0IGxvY2FsRmlsdGVyID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnU2V0RmlsdGVycy0nK2dyaWRGaWx0ZXJzKSBhcyBhbnkpO1xuICAgICAgZmlsdGVycyA9IGxvY2FsRmlsdGVyPy5maWx0ZXJzO1xuICAgIH1cbiAgICByZXR1cm4gZmlsdGVycztcbn1cblxuLy91cGRhdGUgdGhlIGhpZGRlbiBvciBkaXNhYmxlZCBhbmQgdmFsdWUgYmFzZWQgb2ZmIG90aGVyIGdsb2JhbCBmaWx0ZXJzLlxuZXhwb3J0IGZ1bmN0aW9uIHNldEdsb2JhbEZpbHRlclByb3BWYWx1ZXMoXG4gIGdsb2JhbEZpbHRlcjogSUdsb2JhbEZpbHRlcltdLFxuICBmaWVsZDogc3RyaW5nLFxuICBwcm9wczogSUZpbHRlckRpY3Rpb25hcnlbXSxcbikge1xuICByZXR1cm4gZ2xvYmFsRmlsdGVyLm1hcCgoZmlsdGVyOiBhbnkpID0+IHtcbiAgICBpZiAoXG4gICAgICAoZmlsdGVyLmZpZWxkICYmIGZpbHRlci5maWVsZC50b0xvd2VyQ2FzZSgpID09PSBmaWVsZD8udG9Mb3dlckNhc2UoKSkgfHxcbiAgICAgIChmaWx0ZXIuZGlzcGxheVRleHQgJiZcbiAgICAgICAgZmlsdGVyLmRpc3BsYXlUZXh0LnRvTG93ZXJDYXNlKCkgPT09IGZpZWxkPy50b0xvd2VyQ2FzZSgpKVxuICAgICkge1xuICAgICAgcHJvcHM/Lm1hcCgocHJvcDogSUZpbHRlckRpY3Rpb25hcnkpID0+IHtcbiAgICAgICAgaWYgKGZpbHRlci5oYXNPd25Qcm9wZXJ0eShwcm9wLnByb3BOYW1lKSkge1xuICAgICAgICAgIHJldHVybiAoZmlsdGVyW3Byb3AucHJvcE5hbWVdID0gcHJvcC5wcm9wVmFsdWUpO1xuICAgICAgICB9IGVsc2UgaWYgKHByb3AucHJvcFZhbHVlICYmIHByb3AucHJvcFZhbHVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICByZXR1cm4gKGZpbHRlci52YWx1ZSA9IHByb3AucHJvcFZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldENhcmRGaWVsZHNEYXRhKGZvcm06IGFueSkge1xuICBpZiAoZm9ybSAmJiBmb3JtLmR5bmFtaWNmb3JtKSB7XG4gICAgY29uc3QgeyBkeW5hbWljZm9ybSwgLi4ubmV3RGF0YSB9ID0gZm9ybTtcbiAgICBkeW5hbWljZm9ybT8uZm9ybVNlY3Rpb25zPy5mb3JFYWNoKChzZWN0aW9uOiBhbnkpID0+IHtcbiAgICAgIHNlY3Rpb24uZmllbGRzPy5mb3JFYWNoKChmaWVsZDogYW55KSA9PiB7XG4gICAgICAgIGlmIChuZXdEYXRhKSB7XG4gICAgICAgICAgc2V0RWRpdEZvcm1GaWVsZHMoeyByZWNvcmRzOiBbbmV3RGF0YV0gfSwgZHluYW1pY2Zvcm0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxufVxuXG4vLyBkaXNhYmxlIEdyaWQgRWRpdGFibGVSb3cgQ29sdW1uXG5leHBvcnQgZnVuY3Rpb24gZGlzYWJsZUVkaXRSb3dDb2x1bW4oY29sdW1uczogSUdyaWRDb2x1bW5bXSwgZmllbGQ6IHN0cmluZyk6IElHcmlkQ29sdW1uW10ge1xuICBpZiAoZmllbGQgJiYgY29sdW1ucyAmJiBjb2x1bW5zLmxlbmd0aCA+IDApIHtcbiAgICBsZXQgb2JqID0gY29sdW1ucy5maW5kKCh4KSA9PiB4LmZpZWxkPy50b0xvd2VyQ2FzZSgpID09PSBmaWVsZC50b0xvd2VyQ2FzZSgpKTtcbiAgICBsZXQgZGlzYWJsZU9iaiA9IHsgLi4ub2JqLCBkaXNhYmxlZDogdHJ1ZSB9O1xuICAgIGNvbnN0IGluZGV4ID0gY29sdW1ucy5maW5kSW5kZXgoKGk6IGFueSkgPT4gaS5maWVsZC50b0xvd2VyQ2FzZSgpID09PSBmaWVsZC50b0xvd2VyQ2FzZSgpKTtcbiAgICBpZiAoaW5kZXggIT09IC0xKSBjb2x1bW5zW2luZGV4XSA9IGRpc2FibGVPYmo7XG4gIH1cbiAgcmV0dXJuIGNvbHVtbnM7XG59XG5cbi8vIGVuYWJsZWQgR3JpZCBFZGl0YWJsZVJvdyBDb2x1bW5cbmV4cG9ydCBmdW5jdGlvbiBlbmFibGVkRWRpdFJvd0NvbHVtbihjb2x1bW5zOiBJR3JpZENvbHVtbltdLCBmaWVsZDogc3RyaW5nKTogSUdyaWRDb2x1bW5bXSB7XG4gIGlmIChmaWVsZCAmJiBjb2x1bW5zICYmIGNvbHVtbnMubGVuZ3RoID4gMCkge1xuICAgIGxldCBvYmogPSBjb2x1bW5zLmZpbmQoKHgpID0+IHguZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IGZpZWxkPy50b0xvd2VyQ2FzZSgpKTtcbiAgICBsZXQgZW5hYmxlT2JqID0geyAuLi5vYmosIGRpc2FibGVkOiBmYWxzZSB9O1xuICAgIGNvbnN0IGluZGV4ID0gY29sdW1ucy5maW5kSW5kZXgoKGk6IGFueSkgPT4gaS5maWVsZD8udG9Mb3dlckNhc2UoKSA9PT0gZmllbGQ/LnRvTG93ZXJDYXNlKCkpO1xuICAgIGlmIChpbmRleCAhPT0gLTEpIGNvbHVtbnNbaW5kZXhdID0gZW5hYmxlT2JqO1xuICB9XG4gIHJldHVybiBjb2x1bW5zO1xufVxuXG4gLy8gY2hlY2sgdGhlIE1pbnV0ZXMgSW50ZXJ2YWxcbiBleHBvcnQgZnVuY3Rpb24gc2V0TWludXRlc0ludGVydmFsKHZhbHVlOiBhbnkpe1xuICBpZiAodmFsdWUpIHtcbiAgICBjb25zdCBtaW4gPSB2YWx1ZS5nZXRNaW51dGVzKCkudG9TdHJpbmcoKTtcbiAgICBpZiAobWluKSB7XG4gICAgIHZhbHVlID0gdmFsdWUuc2V0TWludXRlcygwKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG4gLy8gdXBkYXRlIHRoZSByZXNwb25zZSByZWNvcmRzXG4gZXhwb3J0IGZ1bmN0aW9uIHNldFVwZGF0ZWRSZWNvcmQocmVjb3JkczogYW55W10sIHJvd0RhdGE6IGFueSwgZGF0YUtleTogc3RyaW5nKTogYW55W117XG4gIGNvbnN0IGluZGV4ID0gcmVjb3Jkcz8uZmluZEluZGV4KChyZWNvcmQpPT4gcmVjb3JkW2RhdGFLZXk/LnRvTG93ZXJDYXNlKCldID09IHJvd0RhdGFbZGF0YUtleT8udG9Mb3dlckNhc2UoKV0pO1xuICBpZihpbmRleCA+IC0xKXtcbiAgICByZWNvcmRzW2luZGV4XSA9IHJvd0RhdGE7XG4gIH1lbHNle1xuICAgIHJlY29yZHMucHVzaChyb3dEYXRhKTtcbiAgfVxuICByZXR1cm4gcmVjb3Jkcztcbn1cblxuLy9jb252ZXJ0IHRoZSB0aW1lIGludG8gZGF0ZVxuZXhwb3J0IGZ1bmN0aW9uIHNldFRpbWVJbkRhdGUodGltZTogYW55KSB7XG4gIGNvbnN0IGNvbnZlcnRUaW1lMTJ0bzI0ID0gKHRpbWUxMmg6IGFueSkgPT4ge1xuICAgIGNvbnN0IFt0aW1lLCBtb2RpZmllcl0gPSB0aW1lMTJoPy50b1N0cmluZygpPy5zcGxpdCgnICcpO1xuICAgIGxldCBbaG91cnMsIG1pbnV0ZXNdID0gdGltZT8uc3BsaXQoJzonKTtcbiAgICBpZiAoaG91cnMgPT09ICcxMicpIHtcbiAgICAgIGhvdXJzID0gJzAwJztcbiAgICB9XG4gICAgaWYgKG1vZGlmaWVyID09PSAnUE0nKSB7XG4gICAgICBob3VycyA9IHBhcnNlSW50KGhvdXJzLCAxMCkgKyAxMjtcbiAgICB9XG4gICAgcmV0dXJuIGAke2hvdXJzfToke21pbnV0ZXN9YDtcbiAgfTtcbiAgY29uc3QgZGF0ZSA9IGNvbnZlcnRUaW1lMTJ0bzI0KHRpbWUpO1xuICBjb25zdCB0ZW1wRGF0ZSA9IG5ldyBEYXRlKCdKdWx5IDEsIDE5OTksICcgKyBkYXRlICsgJzowMCcpO1xuICBjb25zdCBmdXR1cmVEYXRlID0gbmV3IERhdGUoKTtcbiAgZnV0dXJlRGF0ZS5zZXRUaW1lKHRlbXBEYXRlLmdldFRpbWUoKSk7XG4gIHJldHVybiBmdXR1cmVEYXRlO1xufVxuXG4vLyByZXR1cm4gdGhlIGRhdGEgb2YgdGhlIGZpZWxkIFxuZXhwb3J0IGZ1bmN0aW9uIGdldEZpZWxkRGF0YSh7IGZvcm1TZWN0aW9ucyB9OiBhbnksIGZpZWxkOiBzdHJpbmcpe1xuICBsZXQgZGF0YTogYW55ID0gW11cbiAgaWYoZm9ybVNlY3Rpb25zPy5sZW5ndGggPiAwICYmIGZpZWxkKXtcbiAgICBmb3JtU2VjdGlvbnMuZm9yRWFjaCgoc2VjdGlvbjogYW55KT0+e1xuICAgICAgaWYoc2VjdGlvbi5maWVsZHMuc29tZSgoZm9ybUZpZWxkOmFueSk9PiBmb3JtRmllbGQuZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT0gZmllbGQudG9Mb3dlckNhc2UoKSkpe1xuICAgICAgICBkYXRhPXNlY3Rpb24uZmllbGRzLmZpbmQoKGZvcm1GaWVsZDphbnkpPT4gZm9ybUZpZWxkLmZpZWxkPy50b0xvd2VyQ2FzZSgpID09IGZpZWxkLnRvTG93ZXJDYXNlKCkpPy5kYXRhXG4gICAgICB9XG4gICAgfSlcbiAgfVxuICByZXR1cm4gZGF0YTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEFsbEZvcm1GaWVsZHNWYWx1ZXMoXG4gIHsgZm9ybVNlY3Rpb25zIH06IElEeW5hbWljRm9ybSxcbiAgcHJvcHM6IElGaWx0ZXJEaWN0aW9uYXJ5W11cbikge1xuICBmb3JtU2VjdGlvbnM/Lm1hcCgoc2VjdGlvbjogSUZvcm1TZWN0aW9uKSA9PiB7XG4gICAgaWYgKHNlY3Rpb24pIHtcbiAgICAgIHNlY3Rpb24uZmllbGRzLm1hcCgoZm9ybUZpZWxkOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHByb3BzLm1hcCgocHJvcDogSUZpbHRlckRpY3Rpb25hcnkpID0+IHtcbiAgICAgICAgICBpZiAoZm9ybUZpZWxkKSB7XG4gICAgICAgICAgICByZXR1cm4gKGZvcm1GaWVsZFtwcm9wLnByb3BOYW1lXSA9IHByb3AucHJvcFZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICB9KTtcbn1cblxuLy8gcmV0dXJucyB0aGUgcmVzcG9uc2UgaGVhZGVyIGZpbGVOYW1lXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVzcG9uc2VIZWFkZXJGaWxlTmFtZShyZXNwb25zZSl7XG4gIGNvbnN0IGhlYWRlciA9IHJlc3BvbnNlPy5oZWFkZXJzPy5nZXQoJ0NvbnRlbnQtRGlzcG9zaXRpb24nKTtcbiAgcmV0dXJuIGhlYWRlcj8uc3BsaXQoJ2ZpbGVuYW1lPScpPy5bMV0/LnNwbGl0KFwiO1wiKVswXT8ucmVwbGFjZUFsbCgvXFxcIi9nLCAnJyk7XG59XG5cbiBleHBvcnQgZnVuY3Rpb24gZHJhZ2dhYmxlRGlhbG9nKGlkOmFueSl7XG4gICAgY29uc3QgZGlhbG9nID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgncC1kaWFsb2cnKVxuICAgIGRpYWxvZ1swXT8uc2V0QXR0cmlidXRlKCdpZCcsJ215ZGl2JyArIGlkKVxuICAgIGNvbnN0IGRpYWxvZ2hlYWRlciA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3AtZGlhbG9nLWhlYWRlcicpXG4gICAgZGlhbG9naGVhZGVyWzBdPy5zZXRBdHRyaWJ1dGUoJ2lkJywnbXlkaXZoZWFkZXInICsgaWQpXG4gICAgY29uc3QgZWxtbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbXlkaXYnICsgaWQpO1xuXG4gICAgICBsZXQgcG9zMSA9IDAsXG4gICAgICAgIHBvczIgPSAwLFxuICAgICAgICBwb3MzID0gMCxcbiAgICAgICAgcG9zNCA9IDA7XG4gIFxuICAgICAgY29uc3QgZHJhZ01vdXNlRG93biA9IChlKSA9PiB7XG4gICAgICAgIGUgPSBlIHx8IHdpbmRvdy5ldmVudDtcbiAgICAgICAgcG9zMyA9IGUuY2xpZW50WDtcbiAgICAgICAgcG9zNCA9IGUuY2xpZW50WTtcbiAgICAgICAgZG9jdW1lbnQub25tb3VzZXVwID0gY2xvc2VEcmFnRWxlbWVudDtcbiAgICAgICAgZG9jdW1lbnQub25tb3VzZW1vdmUgPSBlbGVtZW50RHJhZztcbiAgICAgIH07XG4gIFxuICAgICAgY29uc3QgZWxlbWVudERyYWcgPSAoZSkgPT4ge1xuICAgICAgICBlID0gZSB8fCB3aW5kb3cuZXZlbnQ7XG4gICAgICAgIHBvczEgPSBwb3MzIC0gZS5jbGllbnRYO1xuICAgICAgICBwb3MyID0gcG9zNCAtIGUuY2xpZW50WTtcbiAgICAgICAgcG9zMyA9IGUuY2xpZW50WDtcbiAgICAgICAgcG9zNCA9IGUuY2xpZW50WTtcbiAgICAgICAgZWxtbnQuc3R5bGUudG9wID0gZWxtbnQ/Lm9mZnNldFRvcCAtIHBvczIgKyAncHgnO1xuICAgICAgICBlbG1udC5zdHlsZS5sZWZ0ID0gZWxtbnQ/Lm9mZnNldExlZnQgLSBwb3MxICsgJ3B4JztcbiAgICAgIH07XG4gIFxuICAgICAgY29uc3QgY2xvc2VEcmFnRWxlbWVudCA9ICgpID0+IHtcbiAgICAgICAgZG9jdW1lbnQub25tb3VzZXVwID0gbnVsbDtcbiAgICAgICAgZG9jdW1lbnQub25tb3VzZW1vdmUgPSBudWxsO1xuICAgICAgfTtcbiAgXG4gICAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ215ZGl2aGVhZGVyJyArIGlkKSkge1xuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbXlkaXZoZWFkZXInICsgaWQpLm9ubW91c2Vkb3duID0gZHJhZ01vdXNlRG93bjtcbiAgICAgIH0gZWxzZSBpZihlbG1udCkge1xuICAgICAgICBlbG1udC5vbm1vdXNlZG93biA9IGRyYWdNb3VzZURvd247XG4gICAgICB9XG4gICAgfSAgXG5leHBvcnQgZnVuY3Rpb24gY2FsZW5kYXJNaW5NYXhWYWx1ZShpdGVtOiBhbnksdmFsdWU6IGFueSwgaW5kZXgpe1xuICBsZXQgdmFsaWRhdGlvbjogc3RyaW5nID0gJ2VxdWFsJztcbiAgdmFyIHZhbGlkRGF0ZSA9IG5ldyBEYXRlKGl0ZW0udmFsaWRhdGlvbnNbaW5kZXhdLmV4cHJlc3Npb24pO1xuICB2YXIgY3VycmVudERhdGUgPSBuZXcgRGF0ZSh2YWx1ZSk7XG4gIGlmICh2YWxpZERhdGUuZ2V0VGltZSgpIDwgY3VycmVudERhdGUuZ2V0VGltZSgpKXtcbiAgICB2YWxpZGF0aW9uID0gJ2dyZWF0ZXInO1xuICB9XG4gIGVsc2UgaWYgKHZhbGlkRGF0ZS5nZXRUaW1lKCkgPiBjdXJyZW50RGF0ZS5nZXRUaW1lKCkpe1xuICAgIHZhbGlkYXRpb24gPSAnbWluaW11bSc7XG4gIH1cbiAgcmV0dXJuIHZhbGlkYXRpb247XG59XG4vKiAjZW5kcmVnaW9uICovXG4iXX0=
|
|
1138
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbGl0aWVzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zZS11aS10b29sa2l0L3NyYy9saWIvc2VydmljZXMvdXRpbGl0aWVzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRzdDLE9BQU8sRUFDTCxXQUFXLEVBQ1gsWUFBWSxFQUNaLFVBQVUsRUFDVixVQUFVLEVBQ1YsU0FBUyxHQU1WLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFvQyxTQUFTLEVBQTJDLE1BQU0sc0JBQXNCLENBQUM7QUFDNUgsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUvQiw0QkFBNEI7QUFFNUI7Ozs7Ozs7R0FPRztBQUNGLElBQUksV0FBVyxHQUFHLElBQUksT0FBTyxFQUFPLENBQUM7QUFDckMsSUFBSSxTQUFTLEdBQUcsSUFBSSxPQUFPLEVBQU8sQ0FBQztBQUNuQyxJQUFJLFlBQVksR0FBRyxJQUFJLE9BQU8sRUFBTyxDQUFDO0FBQ3RDLElBQUksU0FBUyxHQUFHLElBQUksT0FBTyxFQUFPLENBQUM7QUFDbkMsSUFBSSxXQUFXLEdBQUcsSUFBSSxPQUFPLEVBQU8sQ0FBQztBQUNyQyxJQUFJLGVBQWUsR0FBRyxJQUFJLE9BQU8sRUFBTyxDQUFDO0FBRTFDLE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxXQUFnQjtJQUNqRCxZQUFZLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ2pDLENBQUM7QUFFRCxNQUFNLFVBQVUsb0JBQW9CO0lBQ2xDLE9BQU8sWUFBWSxDQUFDLFlBQVksRUFBRSxDQUFDO0FBQ3JDLENBQUM7QUFDRCxNQUFNLFVBQVUsbUJBQW1CO0lBQ2pDLE9BQU8sV0FBVyxDQUFDLFlBQVksRUFBRSxDQUFDO0FBQ3BDLENBQUM7QUFDRCxNQUFNLFVBQVUsaUJB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QUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMzQyxNQUFNLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztJQUNsQixNQUFNLENBQUMsTUFBTSxHQUFHLFdBQVcsQ0FBQztJQUM1QixNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDakIsQ0FBQztBQUNELGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGZvcm1hdERhdGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5pbXBvcnQgeyBJRGljdGlvbmFyeSwgSUZpbHRlckRpY3Rpb25hcnkgfSBmcm9tICcuLi9tb2RlbHMvY29tbW9uLm1vZGVsJztcbmltcG9ydCB7XG4gIEVGb3JtYXRUeXBlLFxuICBFRm9ybUNvbnRyb2wsXG4gIEVIeXBlcmxpbmssXG4gIEVNYXRjaE1vZGUsXG4gIEVPcGVyYXRvcixcbiAgSUR5bmFtaWNDYXJkLFxuICBJRHluYW1pY0Zvcm0sXG4gIElGb3JtYXQsXG4gIElGb3JtRmllbGQsXG4gIElGb3JtU2VjdGlvbixcbn0gZnJvbSAnLi4vbW9kZWxzL2Zvcm0ubW9kZWwnO1xuaW1wb3J0IHsgYWRkR2xvYmFsRmlsdGVyLCBFR3JpZENvbHVtblR5cGUsIEVHcmlkbGluaywgSUdsb2JhbEZpbHRlciwgSUdyaWRDb2x1bW4sIElHcmlkRmlsdGVyIH0gZnJvbSAnLi4vbW9kZWxzL2dyaWQubW9kZWwnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG4vKiAjcmVnaW9uIHB1YmxpYyBtZXRob2RzICovXG5cbi8qKlxuICpcbiAqIEBwYXJhbSB2YWx1ZSA6IGFueVxuICogRnVuY3Rpb24gcmVjZWl2ZXMgdGhlIHZhbHVlIGFuZCBleHBlY3RzIHRoZSB2YWx1ZSB0byBiZSBmb3JtYXRlZC5cbiAqIERvIG5vdCB1c2UgZmF0IGFycm93IGZ1bmN0aW9uIGFzIHRoZXkgZG8gbm90IHByZXNlcnZlIHRoZSBjb250ZXh0LlxuICogdGhpcy52YWx1ZSByZWZlcnMgdG8gdGhlIHZhbHVlIG9mIElGb3JtRmllbGQgT2JqZWN0XG4gKiBNb2RpZnkgdGhpcy52YWx1ZSBkaXJlY3RseSB0byByZWNlaXZlIGVmZmVjdFxuICovXG4gdmFyIHNwbGl0U2NyZWVuID0gbmV3IFN1YmplY3Q8YW55PigpO1xuIHZhciBmb3Jtc3RhdGUgPSBuZXcgU3ViamVjdDxhbnk+KCk7XG4gdmFyIGNvbHVtbnNTdGF0ZSA9IG5ldyBTdWJqZWN0PGFueT4oKTtcbiB2YXIgY2FyZFN0YXRlID0gbmV3IFN1YmplY3Q8YW55PigpO1xuIHZhciByb3V0ZUNoYW5nZSA9IG5ldyBTdWJqZWN0PGFueT4oKTtcbiB2YXIgZmlsdGVyQnRuQ2hhbmdlID0gbmV3IFN1YmplY3Q8YW55PigpO1xuXG5leHBvcnQgZnVuY3Rpb24gY2hhbmdlQ29sdW1uc1N0YXRlKHBhZ2VTZXR0aW5nOiBhbnkpIHtcbiAgY29sdW1uc1N0YXRlLm5leHQocGFnZVNldHRpbmcpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gb25Db2x1bW5zU3RhdGVDaGFuZ2UoKSB7XG4gIHJldHVybiBjb2x1bW5zU3RhdGUuYXNPYnNlcnZhYmxlKCk7XG59XG5leHBvcnQgZnVuY3Rpb24gb25TY3JlZW5TcGxpdENoYW5nZSAoKXtcbiAgcmV0dXJuIHNwbGl0U2NyZWVuLmFzT2JzZXJ2YWJsZSgpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNoYW5nZVNwbGl0U2NyZWVuKG1lbnVJdGVtKXtcbiAgc3BsaXRTY3JlZW4ubmV4dCh7b3JpZ0NvbXBvbmVudDogbWVudUl0ZW0ub3JpZ0NvbXBvbmVudCwgcGFuZWxDb21wb25lbnQ6IG1lbnVJdGVtPy5jb21wb25lbnQsIGNvbmZpZ0RhdGE6bWVudUl0ZW0/LmRhdGE/LmRhdGF9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNoYW5nZUR5bmFtaWNGb3JtU3RhdGUoaWQ6IGFueSwgZGF0YTogYW55LCBsb2FkQ29tcG9uZW50PzogYW55KSB7XG4gIGZvcm1zdGF0ZS5uZXh0KHsgaWQsIGRhdGEsIGxvYWRDb21wb25lbnQgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBvbkR5bmFtaWNGb3JtU3RhdGVDaGFuZ2UoKSB7XG4gIHJldHVybiBmb3Jtc3RhdGUuYXNPYnNlcnZhYmxlKCk7XG59XG5leHBvcnQgZnVuY3Rpb24gb25HbG9iYWxGaWx0ZXJDb250cm9sUmlnaHRCdG4oc3RhdGVWYWx1ZSkge1xuICBmaWx0ZXJCdG5DaGFuZ2UubmV4dChzdGF0ZVZhbHVlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG9uR2xvYmFsRmlsdGVyQ29udHJvbFJpZ2h0QnRuU3RhdGVDaGFuZ2UoKSB7XG4gIHJldHVybiBmaWx0ZXJCdG5DaGFuZ2UuYXNPYnNlcnZhYmxlKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBvblJvdXRlQ2hhbmdlRXZlbnQoKSB7XG4gIHJldHVybiByb3V0ZUNoYW5nZS5hc09ic2VydmFibGUoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJvdXRlQ2hhbmdlRXZlbnQoKSB7XG4gIHJvdXRlQ2hhbmdlLm5leHQoKTtcbn1cblxuIGV4cG9ydCBmdW5jdGlvbiBvbkR5bmFtaWNDYXJkU3RhdGVDaGFuZ2UoKSB7XG4gIHJldHVybiBjYXJkU3RhdGUuYXNPYnNlcnZhYmxlKCk7XG4gfVxuXG4gZXhwb3J0IGZ1bmN0aW9uIGNoYW5nZUR5bmFtaWNDYXJkU3RhdGUoZGF0YTogYW55KSB7XG4gIGNhcmRTdGF0ZS5uZXh0KHsgZGF0YSB9KTtcbn1cblxuIGV4cG9ydCBmdW5jdGlvbiBjbG9zZUlGcmFtZSgpe1xuICBsZXQgY2xvc2UgPSB3aW5kb3cucGFyZW50LmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5wLWRpYWxvZy1oZWFkZXItaWNvbicpYXMgSFRNTEVsZW1lbnRcbiAgaWYoY2xvc2UpIHtcbiAgICBjbG9zZS5jbGljaygpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b0RlY2ltYWwodmFsdWU6IGFueSk6IGFueSB7XG4gIGlmICh2YWx1ZSkge1xuICAgIHJldHVybiBwYXJzZUZsb2F0KHZhbHVlLnRvU3RyaW5nKCkpLnRvRml4ZWQoMik7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvQm9vbGVhbih2YWx1ZTogYW55KSB7XG4gIHJldHVybiB2YWx1ZT8udG9Mb3dlckNhc2UoKSA9PT0gJ3knID8gdHJ1ZSA6IGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9TaG9ydERhdGUodmFsdWU6IGFueSwgZm9ybWF0PzogSUZvcm1hdCkge1xuICBpZiAodmFsdWUgJiYgdmFsdWUgIT09ICcnKSB7XG4gICAgaWYgKFxuICAgICAgZm9ybWF0ICYmXG4gICAgICAoZm9ybWF0LnR5cGUgPT09IEVGb3JtYXRUeXBlLkxPTkdEQVRFIHx8XG4gICAgICAgIGZvcm1hdC50eXBlID09PSBFRm9ybWF0VHlwZS5NRURJVU1EQVRFKVxuICAgICkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZm9ybWF0RGF0ZSh2YWx1ZSwgJ01NL2RkL3l5eXknLCAnZW4tVVMnKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvU2hvcnREYXRlVGltZSh2YWx1ZTogYW55LCBmb3JtYXQ/OiBJRm9ybWF0KSB7XG4gIGlmICh2YWx1ZSAmJiB2YWx1ZSAhPT0gJycgJiYgdmFsdWU/LnRvU3RyaW5nKCkgIT0gXCJJbnZhbGlkIERhdGVcIikge1xuICAgIGlmIChcbiAgICAgIGZvcm1hdCAmJlxuICAgICAgKGZvcm1hdC50eXBlID09PSBFRm9ybWF0VHlwZS5MT05HREFURSB8fFxuICAgICAgICBmb3JtYXQudHlwZSA9PT0gRUZvcm1hdFR5cGUuTUVESVVNREFURSlcbiAgICApIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZvcm1hdERhdGUodmFsdWUsICdNTS9kZC95eXl5IGhoOm1tIGEnLCAnZW4tVVMnKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldERpYWxvZ0RhdGEoY29sdW1uczpJR3JpZENvbHVtbltdLCBmaWVsZE5hbWU6c3RyaW5nLCB2YWx1ZTphbnkpe1xuICBjb2x1bW5zPy5mb3JFYWNoKChjb2x1bW4pPT57XG4gICAgICBpZihjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IGZpZWxkTmFtZT8udG9Mb3dlckNhc2UoKSAmJiBjb2x1bW4uY29tcG9uZW50KXtcbiAgICAgICAgbGV0IGtleXM9T2JqZWN0LmtleXModmFsdWUpO1xuICAgICAgICBrZXlzLmZvckVhY2goKGtleSk9PntcbiAgICAgICAgICBjb2x1bW4uZGF0YS5kYXRhPXsuLi5jb2x1bW4uZGF0YT8uZGF0YSwgW2tleV06dmFsdWVba2V5XX07XG4gICAgICAgIH0pXG4gICAgICB9XG4gIH0pXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b1RyaW0odGV4dDogYW55KSB7XG4gIGlmICh0eXBlb2YgdGV4dCA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdGV4dC50cmltKCk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHRleHQ7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE1hdGNoS2V5KG9iajogYW55LCBwcm9wTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKCFvYmogfHwgIXByb3BOYW1lKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgbGV0IG1hdGNoZWRLZXkgPSAnJztcbiAgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgIG9iai5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgIGNvbnN0IGtleXM6IGFueVtdID0gT2JqZWN0LmtleXMocm93KTtcbiAgICAgIGlmICghbWF0Y2hlZEtleSB8fCBtYXRjaGVkS2V5Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBtYXRjaGVkS2V5ID0ga2V5cy5maW5kKFxuICAgICAgICAgICh4KSA9PiB4LnRvTG93ZXJDYXNlKCkgPT09IHByb3BOYW1lLnRvTG93ZXJDYXNlKClcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBrZXlzOiBhbnlbXSA9IE9iamVjdC5rZXlzKG9iaik7XG4gICAgbWF0Y2hlZEtleSA9IGtleXMuZmluZCgoeCkgPT4geC50b0xvd2VyQ2FzZSgpID09PSBwcm9wTmFtZS50b0xvd2VyQ2FzZSgpKTtcbiAgfVxuXG4gIHJldHVybiBtYXRjaGVkS2V5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0Rm9ybUZpZWxkVmFsdWUoZm9ybUZpZWxkOiBJRm9ybUZpZWxkLCB2YWx1ZTogYW55KTogYW55IHtcbiAgbGV0IGZvcm1hdHRlZFZhbHVlOiBhbnkgPSB2YWx1ZTtcbiAgaWYgKGZvcm1GaWVsZC5mb3JtYXQpIHtcbiAgICBzd2l0Y2ggKGZvcm1GaWVsZC5mb3JtYXQudHlwZSkge1xuICAgICAgY2FzZSBFRm9ybWF0VHlwZS5ERUNJTUFMOlxuICAgICAgICBmb3JtYXR0ZWRWYWx1ZSA9IHRvRGVjaW1hbCh2YWx1ZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFRm9ybWF0VHlwZS5CT09MRUFOX1lOOlxuICAgICAgICBmb3JtYXR0ZWRWYWx1ZSA9IHRvQm9vbGVhbih2YWx1ZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFRm9ybWF0VHlwZS5TSE9SVERBVEU6XG4gICAgICAgIGZvcm1hdHRlZFZhbHVlID0gdG9TaG9ydERhdGUodmFsdWUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUZvcm1hdFR5cGUuQ1VTVE9NOlxuICAgICAgICBpZiAoZm9ybUZpZWxkLmZvcm1hdC5mb3JtYXR0ZXIpIHtcbiAgICAgICAgICBmb3JtYXR0ZWRWYWx1ZSA9IGZvcm1GaWVsZC5mb3JtYXQuZm9ybWF0dGVyKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZm9ybWF0dGVkVmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRGb3JtRmllbGQgKFxuICB7IGZvcm1TZWN0aW9ucyB9OiBJRHluYW1pY0Zvcm0sXG4gIGZvcm1GaWVsZE9iajogSUZvcm1GaWVsZFxuKSB7XG4gIHJldHVybiBmb3JtU2VjdGlvbnM/Lm1hcCgoc2VjdGlvbikgPT4ge1xuICAgIHJldHVybiAoc2VjdGlvbi5maWVsZHMgPSBzZWN0aW9uLmZpZWxkcy5tYXAoKGZvcm1GaWVsZDogSUZvcm1GaWVsZCkgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICBmb3JtRmllbGQuZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IGZvcm1GaWVsZE9iai5maWVsZD8udG9Mb3dlckNhc2UoKSB8fFxuICAgICAgICAoZm9ybUZpZWxkLmxhYmVsICYmIGZvcm1GaWVsZC5sYWJlbCA9PT0gZm9ybUZpZWxkT2JqLmxhYmVsKVxuICAgICAgKSB7XG4gICAgICAgIGZvcm1GaWVsZCA9IGZvcm1GaWVsZE9iajtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmb3JtRmllbGQ7XG4gICAgfSkpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEh5cGVybGlua0NvbXBvbmVudERhdGEgKFxuICB7IGZvcm1TZWN0aW9ucyB9OiBJRHluYW1pY0Zvcm0sXG4gIGxhYmVsOiBzdHJpbmcsXG4gIGRhdGE6IGFueVxuKXtcbiAgZm9ybVNlY3Rpb25zPy5mb3JFYWNoKChzZWN0aW9uKSA9PiB7XG4gICAgY29uc3QgZmllbGQgPSBzZWN0aW9uLmZpZWxkcy5maW5kKChmaWVsZCkgPT4gZmllbGQubGFiZWwgJiYgKHR5cGVvZiAoZmllbGQubGFiZWwpID09IFwib2JqZWN0XCIgPyBmaWVsZC5sYWJlbD8ubmFtZSA9PSBsYWJlbCA6IGZpZWxkLmxhYmVsID09PSBsYWJlbCkpXG4gICAgaWYgKGZpZWxkICYmIHR5cGVvZiAoZmllbGQubGFiZWwpID09IFwib2JqZWN0XCIgJiYgZmllbGQubGFiZWwubGFiZWxDb250cm9sPy5oeXBlcmxpbmspIHtcbiAgICAgIGZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbC5oeXBlcmxpbmsucGFyYW1zID0gZGF0YTtcbiAgICB9IGVsc2UgaWYgKGZpZWxkICYmIGZpZWxkLmh5cGVybGluaykge1xuICAgICAgZmllbGQuaHlwZXJsaW5rLnBhcmFtcyA9IGRhdGE7XG4gICAgfVxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEF1dG9Db21wbGV0ZURhdGEoXG4gIHZhbHVlczogYW55W10sXG4gIHVuaXF1ZUlkOiBhbnksXG4gIGxhYmVsS2V5OiBzdHJpbmcsXG4gIFZhbHVlS2V5OiBzdHJpbmcsXG4pe1xuICBpZih2YWx1ZXM/Lmxlbmd0aCA+IDApe1xuICAgIHZhbHVlcyA9IHZhbHVlcz8ubWFwKChyb3dWYWx1ZSkgPT4gKHtbbGFiZWxLZXldOiByb3dWYWx1ZSwgW1ZhbHVlS2V5XTogdW5pcXVlSWR9KSk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldExvb2t1cERhdGEoXG4gIHsgZm9ybVNlY3Rpb25zIH06IElEeW5hbWljRm9ybSxcbiAgZmllbGQ6IHN0cmluZyxcbiAgZGF0YTogYW55XG4pIHtcbiAgZm9ybVNlY3Rpb25zPy5tYXAoKHNlY3Rpb246IElGb3JtU2VjdGlvbikgPT4ge1xuICAgIHNlY3Rpb24uZmllbGRzLm1hcCgoZm9ybUZpZWxkOiBhbnkpID0+IHtcbiAgICAgIGlmIChmb3JtRmllbGQuZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IGZpZWxkPy50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBmb3JtRmllbGQubGFiZWwgJiZcbiAgICAgICAgICBmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sICYmXG4gICAgICAgICAgZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbC5sb29rdXBDb250cm9sICYmXG4gICAgICAgICAgZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbC5sb29rdXBDb250cm9sLmRhdGEgJiZcbiAgICAgICAgICBkYXRhXG4gICAgICAgICkge1xuICAgICAgICAgIGZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2wubG9va3VwQ29udHJvbC5kYXRhLmRhdGEgPSBkYXRhO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmb3JtRmllbGQubG9va3VwQ29udHJvbCAmJiBmb3JtRmllbGQubG9va3VwQ29udHJvbC5kYXRhICYmIGRhdGEpIHtcbiAgICAgICAgICBmb3JtRmllbGQubG9va3VwQ29udHJvbC5kYXRhLmRhdGEgPSBkYXRhO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuICByZXR1cm4gZm9ybVNlY3Rpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0U2lkZWJhckxpbmtQYXJhbVZhbHVlcyhsaW5rOiBzdHJpbmcsIHBhcmFtczogYW55W10pOiBzdHJpbmcge1xuICBsZXQgbmV3TGluazogc3RyaW5nID0gbGluaztcbiAgaWYgKHBhcmFtcyAmJiBwYXJhbXMubGVuZ3RoID4gMCkge1xuICAgIHBhcmFtcy5tYXAoKHBhcmFtKSA9PiB7XG4gICAgICBjb25zdCB1cmwgPSBwYXJhbS5uYW1lID8gJ3t7JyArIHBhcmFtLm5hbWUgKyAnfX0nIDogJyc7XG4gICAgICBpZiAobmV3TGluay5sb2NhbGVDb21wYXJlKHVybCkpIHtcbiAgICAgICAgbmV3TGluayA9IG5ld0xpbmsucmVwbGFjZShuZXcgUmVnRXhwKHVybCwgJ2lnJyksIHRvVHJpbShwYXJhbS52YWx1ZSkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIHJldHVybiBuZXdMaW5rO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYWRkTmV3RmllbGRJbkZvcm0oZHluYW1pY0Zvcm06IElEeW5hbWljRm9ybSwgc2VjdGlvbk5hbWU6c3RyaW5nLCBmb3JtRmllbGQ6SUZvcm1GaWVsZCl7XG4gIGNvbnN0IHNlY3Rpb24gPSBkeW5hbWljRm9ybT8uZm9ybVNlY3Rpb25zPy5maW5kKChzZWN0aW9uKT0+IHNlY3Rpb24ubmFtZSA9PT0gc2VjdGlvbk5hbWUpO1xuICBpZihzZWN0aW9uKXtcbiAgICBzZWN0aW9uLmZpZWxkcy5wdXNoKGZvcm1GaWVsZCk7XG4gIH1cbiAgcmV0dXJuIGR5bmFtaWNGb3JtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0Rm9ybUZpZWxkcyhcbiAgeyBmb3JtU2VjdGlvbnMgfTogSUR5bmFtaWNGb3JtLFxuICBmb3JtRmllbGRzOiBJRm9ybUZpZWxkW11cbikge1xuICByZXR1cm4gZm9ybVNlY3Rpb25zPy5tYXAoKHNlY3Rpb24pID0+IHtcbiAgICByZXR1cm4gKHNlY3Rpb24uZmllbGRzID0gc2VjdGlvbi5maWVsZHMubWFwKChmb3JtRmllbGQpID0+IHtcbiAgICAgIGxldCBtYXRjaGVkRmllbGQgPSBmb3JtRmllbGRzLmZpbmQoXG4gICAgICAgICh4KSA9PiB4LmZpZWxkPy50b0xvd2VyQ2FzZSgpID09IGZvcm1GaWVsZC5maWVsZD8udG9Mb3dlckNhc2UoKVxuICAgICAgKTtcbiAgICAgIGlmIChtYXRjaGVkRmllbGQpIHtcbiAgICAgICAgZm9ybUZpZWxkID0gbWF0Y2hlZEZpZWxkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZvcm1GaWVsZDtcbiAgICB9KSk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0R2xvYmFsRmlsdGVycyhcbiAgZ2xvYmFsRmlsdGVyczogYWRkR2xvYmFsRmlsdGVyW10sXG4gIGZpZWxkOiBzdHJpbmcsXG4pIHtcbiAgbGV0IGZvcm1GaWVsZE9iajogYW55O1xuICBnbG9iYWxGaWx0ZXJzLm1hcCgoZmlsdGVyKT0+e1xuICAgIGlmIChmaWx0ZXIuZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IGZpZWxkPy50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICBmb3JtRmllbGRPYmogPSBmaWx0ZXI7XG4gICAgICB9XG4gIH0pO1xuICByZXR1cm4gZm9ybUZpZWxkT2JqO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Rm9ybUZpZWxkcyhcbiAgeyBmb3JtU2VjdGlvbnMgfTogSUR5bmFtaWNGb3JtLFxuICBmb3JtQ29udHJvbDogRUZvcm1Db250cm9sXG4pOiBJRm9ybUZpZWxkW10ge1xuICBsZXQgZm9ybUZpZWxkczogSUZvcm1GaWVsZFtdID0gW107XG4gIGZvcm1TZWN0aW9ucz8uZm9yRWFjaCgoc2VjdGlvbikgPT4ge1xuICAgIHNlY3Rpb24uZmllbGRzLmZvckVhY2goKGZvcm1GaWVsZCkgPT4ge1xuICAgICAgaWYgKGZvcm1GaWVsZC5jb250cm9sID09PSBmb3JtQ29udHJvbCkge1xuICAgICAgICBpZiAodHlwZW9mKGZvcm1GaWVsZC52YWx1ZSkgPT09ICdvYmplY3QnICYmIGZvcm1GaWVsZC52YWx1ZT8udGV4dCAmJiB0eXBlb2YoZm9ybUZpZWxkLnZhbHVlLnRleHQpID09PSAnc3RyaW5nJylcbiAgICAgICAge1xuICAgICAgICAgICBmb3JtRmllbGQudmFsdWUgPSBmb3JtRmllbGQudmFsdWUudGV4dC50cmltKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZm9ybUZpZWxkLnZhbHVlICYmIHR5cGVvZihmb3JtRmllbGQudmFsdWUpID09PSAnc3RyaW5nJylcbiAgICAgICAge1xuICAgICAgICAgIGZvcm1GaWVsZC52YWx1ZSA9IGZvcm1GaWVsZC52YWx1ZS50cmltKCk7XG4gICAgICAgIH1cbiAgICAgICAgZm9ybUZpZWxkcy5wdXNoKGZvcm1GaWVsZCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuICByZXR1cm4gZm9ybUZpZWxkcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZvcm1GaWVsZChcbiAgeyBmb3JtU2VjdGlvbnMgfTogSUR5bmFtaWNGb3JtLFxuICBmaWVsZDogc3RyaW5nXG4pOiBJRm9ybUZpZWxkIHtcbiAgbGV0IGZvcm1GaWVsZE9iajogYW55O1xuICBmb3JtU2VjdGlvbnM/LmZvckVhY2goKHNlY3Rpb24pID0+IHtcbiAgICBzZWN0aW9uLmZpZWxkcy5mb3JFYWNoKChmb3JtRmllbGQpID0+IHtcbiAgICAgIGlmIChmb3JtRmllbGQuZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IGZpZWxkPy50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgIGZvcm1GaWVsZE9iaiA9IGZvcm1GaWVsZDtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG4gIHJldHVybiBmb3JtRmllbGRPYmo7XG59XG5cbi8vIHRoaXMgZnVuY3Rpb24gaXMgYWx3YXlzIHJldHVybiBhIHZhbHVlIG9mIHRoZSBmaWVsZC4gSWYgcmV0dXJuRGlzcGxheUZpZWxkVmFsdWUgaXMgdHJ1ZSBhbmQgZGlzcGxheUZpZWxkXG4vLyBleGlzdCBpbiB0aGUgZmllbGQgdGhlbiBhbHdheXMgcmV0dXJuIGEgZGlzcGxheUZpZWxkIHZhbHVlLlxuZXhwb3J0IGZ1bmN0aW9uIGdldEZvcm1GaWVsZFZhbHVlKFxuICB7IGZvcm1TZWN0aW9ucyB9OiBJRHluYW1pY0Zvcm0sXG4gIGZpZWxkOiBzdHJpbmcsXG4gIHJldHVybkRpc3BsYXlGaWVsZFZhbHVlOmJvb2xlYW4gPSBmYWxzZVxuKSB7XG4gIGxldCB2YWx1ZTtcbiAgZm9yIChjb25zdCBzZWN0aW9uIG9mIGZvcm1TZWN0aW9ucyBhcyBhbnkpIHtcbiAgICBzZWN0aW9uLmZpZWxkcy5mb3JFYWNoKChmb3JtRmllbGQ6IGFueSkgPT4ge1xuICAgICAgaWYgKGZvcm1GaWVsZC5maWVsZD8udG9Mb3dlckNhc2UoKSA9PT0gZmllbGQ/LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgbGV0IGlzVmFsaWQgPSB0eXBlb2YgZm9ybUZpZWxkLnZhbHVlID09PSAnb2JqZWN0JyAmJiBmb3JtRmllbGQuY29udHJvbCAhPT0gRUZvcm1Db250cm9sLkNBTEVOREFSICYmIHJldHVybkRpc3BsYXlGaWVsZFZhbHVlO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgKGZvcm1GaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuTE9PS1VQX0lOUFVUIHx8IGZvcm1GaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuSU5QVVQpICYmXG4gICAgICAgICAgZm9ybUZpZWxkLmRpc3BsYXlGaWVsZFxuICAgICAgICApIHtcbiAgICAgICAgICB2YWx1ZSA9IGlzVmFsaWQgPyBmb3JtRmllbGQudmFsdWU/LnRleHQgOiBmb3JtRmllbGQudmFsdWU/LnZhbHVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhbHVlID0gaXNWYWxpZFxuICAgICAgICAgICAgPyBmb3JtRmllbGQudmFsdWU/LnRleHRcbiAgICAgICAgICAgIDogdHlwZW9mIGZvcm1GaWVsZC52YWx1ZSA9PT0gJ29iamVjdCcgJiYgZm9ybUZpZWxkLmNvbnRyb2wgIT09IEVGb3JtQ29udHJvbC5DQUxFTkRBUiAmJiBmb3JtRmllbGQuY29udHJvbCAhPT0gRUZvcm1Db250cm9sLk1VTFRJU0VMRUNUXG4gICAgICAgICAgICA/IGZvcm1GaWVsZC52YWx1ZT8udmFsdWVcbiAgICAgICAgICAgIDogZm9ybUZpZWxkLnZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Rm9ybUZpZWxkVmFsdWVBc1N0cmluZyhkeW5hbWljRm9ybTpJRHluYW1pY0Zvcm0sZmllbGQ6c3RyaW5nKTpzdHJpbmd7XG4gIGxldCB2YWx1ZTphbnkgPSBnZXRGb3JtRmllbGRWYWx1ZShkeW5hbWljRm9ybSxmaWVsZCwgdHJ1ZSk7XG4gIGlmICh2YWx1ZSl7XG4gICAgdmFsdWUgPSB2YWx1ZS50b1N0cmluZygpO1xuICAgfVxuICAgcmV0dXJuIHZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2VjdGlvbkZpZWxkVmFsdWUoXG4gIGZvcm1TZWN0aW9uczogSUZvcm1TZWN0aW9uW10sXG4gIGZpZWxkOiBzdHJpbmdcbikge1xuICBsZXQgZm9ybTogSUR5bmFtaWNGb3JtID0geyBmb3JtU2VjdGlvbnMgfTtcbiAgcmV0dXJuIGdldEZvcm1GaWVsZFZhbHVlKGZvcm0sIGZpZWxkLCB0cnVlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldFNhdmVGb3JtVmFsdWVzKFxuICBmb3JtU2VjdGlvbnM6IElGb3JtU2VjdGlvbltdLFxuICB0YWJsZXM/OiBzdHJpbmdbXSxcbikge1xuICBsZXQgc2VjdGlvbkZpZWxkczogYW55O1xuICBsZXQgcmVzcG9uc2U6IGFueSA9IHt9O1xuICBpZiAodGFibGVzICYmIHRhYmxlcy5sZW5ndGggPiAwKSB7XG4gICAgdGFibGVzLmZvckVhY2goKHRhYmxlTmFtZSkgPT4ge1xuICAgICAgZm9ybVNlY3Rpb25zLmZvckVhY2goKGZvcm1TZWN0aW9uKSA9PiB7XG4gICAgICAgIGlmIChmb3JtU2VjdGlvbi5maWVsZHM/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBzZWN0aW9uRmllbGRzID0gZm9ybVNlY3Rpb24uZmllbGRzPy5maWx0ZXIoeCA9PiB4LmNvbnRyb2wgIT09IEVGb3JtQ29udHJvbC5DQVJEKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZm9ybVNlY3Rpb24uaGVhZGVyRmllbGRzPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgc2VjdGlvbkZpZWxkcyA9IGZvcm1TZWN0aW9uLmhlYWRlckZpZWxkcz8uZmlsdGVyKHggPT4geC5jb250cm9sICE9PSBFRm9ybUNvbnRyb2wuQ0FSRCk7XG4gICAgICAgIH1cbiAgICAgICAgICBzZWN0aW9uRmllbGRzPy5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHRhYmxlID0gZmllbGQudGFibGVzPy5tYXAoKHRhYmxlKSA9PiB0YWJsZS50b0xvd2VyQ2FzZSgpKTtcblxuICAgICAgICAgIGlmICh0YWJsZSAmJiB0YWJsZS5pbmNsdWRlcyh0YWJsZU5hbWUudG9Mb3dlckNhc2UoKSkpIHtcbiAgICAgICAgICAgIGlmICghcmVzcG9uc2VbdGFibGVOYW1lXSkge1xuICAgICAgICAgICAgICByZXNwb25zZVt0YWJsZU5hbWVdID0ge307XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChmaWVsZC5maWVsZCAmJiBmaWVsZC5maWVsZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIHJlc3BvbnNlW3RhYmxlTmFtZV1bZmllbGQuZmllbGRdID0gZm9ybWF0Rm9ybUZpZWxkQ1ZhbHVlKGZpZWxkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgZm9ybVNlY3Rpb25zLmZvckVhY2goKGZvcm1TZWN0aW9uKSA9PiB7XG4gICAgICBpZiAoZm9ybVNlY3Rpb24uZmllbGRzPy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHNlY3Rpb25GaWVsZHMgPSBmb3JtU2VjdGlvbi5maWVsZHM/LmZpbHRlcih4ID0+IHguY29udHJvbCAhPT0gRUZvcm1Db250cm9sLkNBUkQpO1xuICAgICAgfVxuICAgICAgaWYgKGZvcm1TZWN0aW9uLmhlYWRlckZpZWxkcz8ubGVuZ3RoID4gMCkge1xuICAgICAgICBzZWN0aW9uRmllbGRzID0gZm9ybVNlY3Rpb24uaGVhZGVyRmllbGRzPy5maWx0ZXIoeCA9PiB4LmNvbnRyb2wgIT09IEVGb3JtQ29udHJvbC5DQVJEKTtcbiAgICAgIH1cbiAgICAgIHNlY3Rpb25GaWVsZHM/LmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICAgIGlmIChmaWVsZC5maWVsZCAmJiBmaWVsZC5maWVsZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgcmVzcG9uc2VbZmllbGQuZmllbGRdID0gZm9ybWF0Rm9ybUZpZWxkQ1ZhbHVlKGZpZWxkKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gcmVzcG9uc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRTYXZlQ2FyZFZhbHVlcyhcbiAgZm9ybVNlY3Rpb25zOiBJRm9ybVNlY3Rpb25bXSxcbiAgdGFibGVzPzogc3RyaW5nW11cbikge1xuICBsZXQgdmFsdWVzOiBJRm9ybUZpZWxkW10gPSBbXTtcbiAgZm9ybVNlY3Rpb25zPy5mb3JFYWNoKChzZWN0aW9uKSA9PiB7XG4gICAgc2VjdGlvbi5maWVsZHM/LmZvckVhY2goKGZpZWxkOiBhbnkpID0+IHtcbiAgICAgIGlmIChmaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuQ0FSRCAmJiBmaWVsZC5jYXJkLmRhdGEpIHtcbiAgICAgICAgZmllbGQuY2FyZC5kYXRhLmZvckVhY2goKGNhcmREYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAoY2FyZERhdGEuZHluYW1pY0Zvcm0uZm9ybVNlY3Rpb25zKSB7XG4gICAgICAgICAgICB2YWx1ZXMucHVzaChcbiAgICAgICAgICAgICAgc2V0U2F2ZUZvcm1WYWx1ZXMoY2FyZERhdGEuZHluYW1pY0Zvcm0uZm9ybVNlY3Rpb25zLCB0YWJsZXMpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuICByZXR1cm4gdmFsdWVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0RWRpdEZvcm1GaWVsZHMoZGF0YTogYW55LCBkeW5hbWljRm9ybTogSUR5bmFtaWNGb3JtKSB7XG4gIGlmIChkYXRhICYmIGRhdGEubGVuZ3RoID4gMCAmJiBBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgZGF0YS5mb3JFYWNoKChkYXRhUm93KSA9PiB7XG4gICAgICBzZXRFZGl0Rm9ybUZpZWxkc0luZm8oZGF0YVJvdywgZHluYW1pY0Zvcm0sIGRhdGEpO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIHNldEVkaXRGb3JtRmllbGRzSW5mbyhkYXRhLCBkeW5hbWljRm9ybSk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEZpbHRlcihcbiAgZmllbGQ6IHN0cmluZyxcbiAgdmFsdWU6IGFueSxcbiAgbWF0Y2hNb2RlOiBFTWF0Y2hNb2RlID0gRU1hdGNoTW9kZS5FUVVBTFMsXG4gIG9wZXJhdG9yOiBFT3BlcmF0b3IgPSBFT3BlcmF0b3IuQU5ELFxuKSB7XG4gIGNvbnN0IGZpbHRlcjogYW55ID0ge1xuICAgIGZpZWxkOiBmaWVsZCxcbiAgICBtYXRjaE1vZGU6IG1hdGNoTW9kZSxcbiAgICBvcGVyYXRvcjogb3BlcmF0b3IsXG4gICAgdmFsdWU6IHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgKHZhbHVlPy52YWx1ZSB8fCB2YWx1ZT8udGV4dCkgPyB2YWx1ZT8udmFsdWUgOiAodmFsdWUgfHwgdmFsdWUgPT0gJycpID8gdmFsdWUgOiBudWxsLFxuICB9O1xuICByZXR1cm4gZmlsdGVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0QW5kRmlsdGVyKGZpZWxkOiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcbiAgcmV0dXJuIHNldEZpbHRlcihmaWVsZCwgdmFsdWUsIEVNYXRjaE1vZGUuRVFVQUxTLCBFT3BlcmF0b3IuQU5EKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0T3JpZ0RhdGFGaWVsZFZhbHVlKGRhdGE6IGFueSwgcHJvcE5hbWU6IHN0cmluZyk6IGFueSB7XG4gIGxldCB2YWx1ZTogYW55O1xuICBpZiAoZGF0YSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFsdWUgPSBnZXRQcm9wZXJ0eVZhbHVlKGRhdGFbaV0sIHByb3BOYW1lKTtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlID0gZ2V0UHJvcGVydHlWYWx1ZShkYXRhLCBwcm9wTmFtZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE9yaWdEYXRhRmllbGRWYWx1ZUFzU3RyaW5nKFxuICBkYXRhOiBhbnksXG4gIHByb3BOYW1lOiBzdHJpbmdcbik6IHN0cmluZyB7XG4gIGxldCB2YWx1ZSA9IGdldE9yaWdEYXRhRmllbGRWYWx1ZShkYXRhLCBwcm9wTmFtZSk7XG4gIGlmICh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAnJztcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0U2VjdGlvblByb3BWYWx1ZXMoXG4gIHsgZm9ybVNlY3Rpb25zIH06IElEeW5hbWljRm9ybSxcbiAgc2VjdGlvbk5hbWU6IHN0cmluZyxcbiAgcHJvcHM6IElEaWN0aW9uYXJ5W11cbikge1xuICBmb3JtU2VjdGlvbnM/Lm1hcCgoc2VjdGlvbikgPT4ge1xuICAgIGlmIChzZWN0aW9uLm5hbWU/LnRvTG93ZXJDYXNlKCkgPT09IHNlY3Rpb25OYW1lLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgIHByb3BzLm1hcCgocHJvcCkgPT4ge1xuICAgICAgICByZXR1cm4gc2V0UHJvcFZhbHVlKHNlY3Rpb24sIHByb3ApO1xuICAgICAgfSk7XG4gICAgfVxuICB9KTtcbn1cblxuLyogI2VuZHJlZ2lvbiAqL1xuXG4vKiAjcmVnaW9uIHByaXZhdGUgbWV0aG9kcyAqL1xuXG5mdW5jdGlvbiBzZXRFZGl0Rm9ybUZpZWxkc0luZm8oZGF0YTogYW55LCBkeW5hbWljRm9ybTogSUR5bmFtaWNGb3JtIHwgSUR5bmFtaWNDYXJkLCBhbGxEYXRhOiBhbnlbXSA9IFtdKSB7XG4gIGlmIChkYXRhLnJlY29yZHMgJiYgZGF0YS5yZWNvcmRzLmxlbmd0aCA+IDApIHtcbiAgICBkYXRhLnJlY29yZHMuZm9yRWFjaCgocmVjb3JkOiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IGtleXM6IHN0cmluZ1tdID0gT2JqZWN0LmtleXMocmVjb3JkKTtcbiAgICAgIGR5bmFtaWNGb3JtPy5mb3JtU2VjdGlvbnM/LmZvckVhY2goKGZvcm1TZWN0aW9uKSA9PiB7XG4gICAgICAgIGlmIChmb3JtU2VjdGlvbi5maWVsZHMpIHtcbiAgICAgICAgICBzZXRFZGl0Rm9ybUZpZWxkc1ZhbHVlKGRhdGEsIGZvcm1TZWN0aW9uPy5maWVsZHMsIGtleXMsIHJlY29yZCwgYWxsRGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZvcm1TZWN0aW9uLmhlYWRlckZpZWxkcykge1xuICAgICAgICAgIHNldEVkaXRGb3JtRmllbGRzVmFsdWUoZGF0YSwgZm9ybVNlY3Rpb24/LmhlYWRlckZpZWxkcywga2V5cywgcmVjb3JkLCBhbGxEYXRhKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2V0RWRpdEZvcm1GaWVsZHNWYWx1ZShkYXRhOiBhbnksIGZvcm1GaWVsZHM6IGFueSwga2V5czogYW55LCByZWNvcmQ6IGFueSwgYWxsRGF0YTogYW55KXtcbiAgZm9ybUZpZWxkcz8uZm9yRWFjaCgoZm9ybUZpZWxkOiBhbnkpID0+IHtcbiAgICBjb25zdCBtYXRjaGVkS2V5OiBhbnkgPSBrZXlzLmZpbmQoXG4gICAgICAoeCkgPT4geC50b0xvd2VyQ2FzZSgpID09PSBmb3JtRmllbGQuZmllbGQ/LnRvTG93ZXJDYXNlKClcbiAgICApO1xuXG4gICAgaWYgKG1hdGNoZWRLZXkpIHtcbiAgICAgIC8vIHNldCBsYWJlbCBoeXBlcmxpbmtcbiAgICAgIHNldExhYmVsSHlwZXJsaW5rKGZvcm1GaWVsZCwgcmVjb3JkLCBrZXlzLCBhbGxEYXRhKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBmb3JtRmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkhZUEVSTElOSyAmJlxuICAgICAgZm9ybUZpZWxkLmh5cGVybGluayAmJlxuICAgICAgKChmb3JtRmllbGQuaHlwZXJsaW5rLmxpbmtJZCAmJiBmb3JtRmllbGQuaHlwZXJsaW5rLnBhcmFtcykgfHxcbiAgICAgICAgZm9ybUZpZWxkLmh5cGVybGluay5saW5rKVxuICAgICkge1xuICAgICAgbGV0IHBhcmFtcyA9IGZvcm1GaWVsZC5oeXBlcmxpbmsucGFyYW1zO1xuICAgICAgbGV0IHBhcmFtS2V5czogc3RyaW5nW10gPSBbXTtcblxuICAgICAgaWYgKFxuICAgICAgICAhcGFyYW1zICYmXG4gICAgICAgIGZvcm1GaWVsZC5oeXBlcmxpbmsubGluayAmJlxuICAgICAgICBmb3JtRmllbGQuaHlwZXJsaW5rLmxpbmsuaW5jbHVkZXMoJ319JylcbiAgICAgICkge1xuICAgICAgICBwYXJhbUtleXMgPSBmb3JtRmllbGQuaHlwZXJsaW5rLmxpbmsuc3BsaXQoJ319Jyk7XG4gICAgICAgIHBhcmFtS2V5cyA9IHBhcmFtS2V5cy5tYXAoKHBhcmFtS2V5KSA9PiB7XG4gICAgICAgICAgcGFyYW1LZXkgPSBwYXJhbUtleS5yZXBsYWNlKCd7eycsICcnKS50cmltKCk7XG4gICAgICAgICAgcmV0dXJuIHBhcmFtS2V5O1xuICAgICAgICB9KTtcbiAgICAgICAgcGFyYW1LZXlzID0gcGFyYW1LZXlzLmZpbHRlcigoeCkgPT4geC5sZW5ndGggPiAwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmKHBhcmFtcyl7XG4gICAgICAgICAgcGFyYW1LZXlzID0gT2JqZWN0LmtleXMocGFyYW1zKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmb3JtRmllbGQuaHlwZXJsaW5rLmxpbmsgPSBzZXRIeXBlcmxpbmsoXG4gICAgICAgIGtleXMsXG4gICAgICAgIHJlY29yZCxcbiAgICAgICAgZm9ybUZpZWxkLm9yaWduYWxMaW5rLFxuICAgICAgICBwYXJhbUtleXMsXG4gICAgICAgIGZvcm1GaWVsZC5oeXBlcmxpbmsucGFyYW1zLFxuICAgICAgICBhbGxEYXRhXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICBmb3JtRmllbGQubGFiZWw/LmxhYmVsQ29udHJvbD8uaHlwZXJsaW5rICYmXG4gICAgICAoKGZvcm1GaWVsZC5sYWJlbD8ubGFiZWxDb250cm9sPy5oeXBlcmxpbms/LmxpbmtJZCAmJiBmb3JtRmllbGQubGFiZWw/LmxhYmVsQ29udHJvbD8uaHlwZXJsaW5rPy5wYXJhbXMpIHx8XG4gICAgICAgIGZvcm1GaWVsZC5sYWJlbD8ubGFiZWxDb250cm9sPy5oeXBlcmxpbms/LmxpbmspXG4gICAgKSB7XG4gICAgICBsZXQgcGFyYW1zID0gZm9ybUZpZWxkLmxhYmVsPy5sYWJlbENvbnRyb2w/Lmh5cGVybGluaz8ucGFyYW1zO1xuICAgICAgbGV0IHBhcmFtS2V5czogc3RyaW5nW10gPSBbXTtcbiAgICAgIGlmICghcGFyYW1zICYmXG4gICAgICAgIGZvcm1GaWVsZC5sYWJlbD8ubGFiZWxDb250cm9sPy5oeXBlcmxpbmsubGluayAmJlxuICAgICAgICBmb3JtRmllbGQubGFiZWw/LmxhYmVsQ29udHJvbD8uaHlwZXJsaW5rPy5saW5rLmluY2x1ZGVzKCd9fScpXG4gICAgICApIHtcbiAgICAgICAgcGFyYW1LZXlzID0gZm9ybUZpZWxkLmxhYmVsPy5sYWJlbENvbnRyb2w/Lmh5cGVybGluaz8ubGluay5zcGxpdCgnfX0nKTtcbiAgICAgICAgcGFyYW1LZXlzID0gcGFyYW1LZXlzLm1hcCgocGFyYW1LZXkpID0+IHtcbiAgICAgICAgICBwYXJhbUtleSA9IHBhcmFtS2V5LnJlcGxhY2UoJ3t7JywgJycpLnRyaW0oKTtcbiAgICAgICAgICByZXR1cm4gcGFyYW1LZXk7XG4gICAgICAgIH0pO1xuICAgICAgICBwYXJhbUtleXMgPSBwYXJhbUtleXMuZmlsdGVyKCh4KSA9PiB4Lmxlbmd0aCA+IDApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHBhcmFtcykge1xuICAgICAgICAgIHBhcmFtS2V5cyA9IE9iamVjdC5rZXlzKHBhcmFtcyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbC5oeXBlcmxpbmsubGluayA9IHNldEh5cGVybGluayhcbiAgICAgICAga2V5cyxcbiAgICAgICAgcmVjb3JkLFxuICAgICAgICBmb3JtRmllbGQubGFiZWw/LmxhYmVsQ29udHJvbD8uaHlwZXJsaW5rPy5saW5rLFxuICAgICAgICBwYXJhbUtleXMsXG4gICAgICAgIHBhcmFtcyxcbiAgICAgICAgYWxsRGF0YVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGZvcm1GaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuQ0FMRU5EQVIgJiYgbWF0Y2hlZEtleSkge1xuICAgICAgICBmb3JtRmllbGQudmFsdWUgPSBmb3JtRmllbGQudGltZU9ubHkgPyByZWNvcmRbbWF0Y2hlZEtleV0gOiByZWNvcmRbbWF0Y2hlZEtleV1cbiAgICAgICAgICA/IG5ldyBEYXRlKHJlY29yZFttYXRjaGVkS2V5XSBhcyBzdHJpbmcpXG4gICAgICAgICAgOiAnJztcbiAgICAgICAgfSBlbHNlIGlmIChmb3JtRmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkNBUkQpIHtcbiAgICAgICAgICBpZiAoZm9ybUZpZWxkLmNhcmQgJiYgZm9ybUZpZWxkLmNhcmQuZm9ybVNlY3Rpb25zKSB7XG4gICAgICAgICAgICBpZiAoIWZvcm1GaWVsZC5jYXJkLmRhdGEpIHtcbiAgICAgICAgICAgICAgZm9ybUZpZWxkLmNhcmQuZGF0YSA9IGRhdGE7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHNldEVkaXRGb3JtRmllbGRzSW5mbyhkYXRhLCBmb3JtRmllbGQuY2FyZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICBmb3JtRmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkFVVE9DT01QTEVURSAmJlxuICAgICAgICBtYXRjaGVkS2V5XG4gICAgICApIHtcbiAgICAgICAgbGV0IGFycmF5VmFsdWUgPSBbXTtcbiAgICAgICAgaWYgKHJlY29yZFttYXRjaGVkS2V5XSAmJiBmb3JtRmllbGQuZGlzcGxheUZpZWxkKSB7XG4gICAgICAgICAgYXJyYXlWYWx1ZS5wdXNoKHtbZm9ybUZpZWxkLmRpc3BsYXlGaWVsZF0gOiByZWNvcmRbbWF0Y2hlZEtleV19KTtcbiAgICAgICAgfVxuICAgICAgICBmb3JtRmllbGQudmFsdWUgPSBhcnJheVZhbHVlO1xuICAgICAgfSBlbHNlIGlmIChmb3JtRmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkxPT0tVUF9JTlBVVCB8fCBmb3JtRmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLklOUFVUKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBmb3JtRmllbGQubGFiZWwgJiZcbiAgICAgICAgICBmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sICYmXG4gICAgICAgICAgZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbC5sb29rdXBDb250cm9sICYmXG4gICAgICAgICAgZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbC5sb29rdXBDb250cm9sLmRhdGFcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29uc3Qgb2JqID0gYXV0b1NldExvb2t1cERhdGEoXG4gICAgICAgICAgICBmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sLmxvb2t1cENvbnRyb2wuZGF0YS5kYXRhLFxuICAgICAgICAgICAgcmVjb3JkXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAob2JqKSB7XG4gICAgICAgICAgICBmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sLmxvb2t1cENvbnRyb2wuZGF0YS5kYXRhID0gb2JqO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBmb3JtRmllbGQubG9va3VwQ29udHJvbCAmJlxuICAgICAgICAgIGZvcm1GaWVsZC5sb29rdXBDb250cm9sLmRhdGEgJiZcbiAgICAgICAgICBmb3JtRmllbGQubG9va3VwQ29udHJvbC5kYXRhLmRhdGFcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29uc3Qgb2JqID0gYXV0b1NldExvb2t1cERhdGEoXG4gICAgICAgICAgICBmb3JtRmllbGQubG9va3VwQ29udHJvbC5kYXRhLmRhdGEsXG4gICAgICAgICAgICByZWNvcmRcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChvYmopIHtcbiAgICAgICAgICAgIGZvcm1GaWVsZC5sb29rdXBDb250cm9sLmRhdGEuZGF0YSA9IG9iajtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYocmVjb3JkW21hdGNoZWRLZXldKXtcbiAgICAgICAgICBmb3JtRmllbGQudmFsdWUgPSB0b1RyaW0ocmVjb3JkW21hdGNoZWRLZXldKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgZm9ybUZpZWxkLmRpc3BsYXlGaWVsZCAmJlxuICAgICAgICAgIGZvcm1GaWVsZC5kaXNwbGF5RmllbGQubGVuZ3RoID4gMFxuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCBtYXRjaERpc3BsYXlGaWVsZCA9IGdldE1hdGNoS2V5KFxuICAgICAgICAgICAgcmVjb3JkLFxuICAgICAgICAgICAgZm9ybUZpZWxkLmRpc3BsYXlGaWVsZFxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKG1hdGNoRGlzcGxheUZpZWxkKSB7XG4gICAgICAgICAgICBmb3JtRmllbGQudmFsdWUgPSB7XG4gICAgICAgICAgICAgIHRleHQ6IHRvVHJpbShyZWNvcmRbbWF0Y2hEaXNwbGF5RmllbGRdKSxcbiAgICAgICAgICAgICAgdmFsdWU6IGZvcm1GaWVsZC52YWx1ZT8udmFsdWUsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IG1hdGNoVmFsdWVGaWVsZCA9IGdldE1hdGNoS2V5KHJlY29yZCwgZm9ybUZpZWxkLmZpZWxkKTtcbiAgICAgICAgICBpZiAobWF0Y2hWYWx1ZUZpZWxkKSB7XG4gICAgICAgICAgICBmb3JtRmllbGQudmFsdWUgPSB7XG4gICAgICAgICAgICAgIHRleHQ6IGZvcm1GaWVsZC52YWx1ZT8udGV4dCxcbiAgICAgICAgICAgICAgdmFsdWU6IHRvVHJpbShyZWNvcmRbbWF0Y2hWYWx1ZUZpZWxkXSksXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgZm9ybUZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5DT01QT05FTlQgJiZcbiAgICAgICAgZm9ybUZpZWxkLmNvbXBvbmVudENvbnRyb2w/LmRhdGFcbiAgICAgICkge1xuICAgICAgICBjb25zdCBzZXREYXRhRnJvbVJlY29yZCA9IGZpbmRLZXlzQW5kVmFsdWUoXG4gICAgICAgICAgZm9ybUZpZWxkLmNvbXBvbmVudENvbnRyb2wuZGF0YSxcbiAgICAgICAgICByZWNvcmRcbiAgICAgICAgKTtcbiAgICAgICAgZm9ybUZpZWxkLmNvbXBvbmVudENvbnRyb2wuZGF0YSA9IHNldERhdGFGcm9tUmVjb3JkPy5kYXRhO1xuICAgICAgICBpZihzZXREYXRhRnJvbVJlY29yZD8ubWF0Y2hEYXRhKXtcbiAgICAgICAgICBjaGFuZ2VEeW5hbWljRm9ybVN0YXRlKFxuICAgICAgICAgICAgZm9ybUZpZWxkLmNvbXBvbmVudENvbnRyb2wuaWQsXG4gICAgICAgICAgICBmb3JtRmllbGQuY29tcG9uZW50Q29udHJvbD8uZGF0YSxcbiAgICAgICAgICAgIGZhbHNlXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgZm9ybUZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5OVU1FUklDICYmXG4gICAgICAgIGZvcm1GaWVsZC5sYWJlbD8ubGFiZWxDb250cm9sPy5sb29rdXBDb250cm9sPy5kYXRhPy5kYXRhXG4gICAgICApIHtcbiAgICAgICAgbGV0IHNldERhdGEgPSBmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sLmxvb2t1cENvbnRyb2w7XG4gICAgICAgIHNldERhdGEuZGF0YS5kYXRhID0gZmluZEtleXNBbmRWYWx1ZShzZXREYXRhLmRhdGEuZGF0YSwgcmVjb3JkKT8uZGF0YTtcbiAgICAgICAgY2hhbmdlRHluYW1pY0Zvcm1TdGF0ZShzZXREYXRhLmlkLCBzZXREYXRhLmRhdGEuZGF0YSwgZmFsc2UpO1xuICAgICAgfSBlbHNlIGlmIChmb3JtRmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkhZUEVSTElOSyBcbiAgICAgICAgJiYgIGZvcm1GaWVsZC5oeXBlcmxpbms/LnRhcmdldCA9PT0gRUh5cGVybGluay5ESUFMT0cgXG4gICAgICAgICYmIGZvcm1GaWVsZC5oeXBlcmxpbmsucGFyYW1zXG4gICAgICApIHtcbiAgICAgICAgZm9ybUZpZWxkLmh5cGVybGluay5wYXJhbXMgPSBmaW5kS2V5c0FuZFZhbHVlKGZvcm1GaWVsZC5oeXBlcmxpbmsucGFyYW1zLCByZWNvcmQpPy5kYXRhO1xuICAgICAgfSBlbHNlIGlmIChtYXRjaGVkS2V5KSB7XG4gICAgICAgIGlmIChmb3JtRmllbGQuZm9ybWF0KSB7XG4gICAgICAgICAgZm9ybUZpZWxkLnZhbHVlID0gZm9ybWF0Rm9ybUZpZWxkVmFsdWUoXG4gICAgICAgICAgICBmb3JtRmllbGQsXG4gICAgICAgICAgICByZWNvcmRbbWF0Y2hlZEtleV1cbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2UgaWYgKGZvcm1GaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuQ0hFQ0tCT1gpIHtcbiAgICAgICAgICBmb3JtRmllbGQudmFsdWUgPVxuICAgICAgICAgICAgcmVjb3JkW21hdGNoZWRLZXldICYmXG4gICAgICAgICAgICAocmVjb3JkW21hdGNoZWRLZXldLnRvU3RyaW5nKCkgPT09ICcxJyB8fFxuICAgICAgICAgICAgICByZWNvcmRbbWF0Y2hlZEtleV0udG9TdHJpbmcoKSA9PT0gJ3RydWUnKVxuICAgICAgICAgICAgICA/IHRydWVcbiAgICAgICAgICAgICAgOiBmYWxzZTtcbiAgICAgICAgfWVsc2UgaWYgKGZvcm1GaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuRFJPUERPV04pIHtcbiAgICAgICAgICBsZXQgZHJvcFZhbHVlID0gcmVjb3JkW21hdGNoZWRLZXldO1xuICAgICAgICAgIGlmIChkcm9wVmFsdWUgJiYgZHJvcFZhbHVlPy50b1N0cmluZygpICE9PSAnMCcpIHtcbiAgICAgICAgICAgIGZvcm1GaWVsZC52YWx1ZSA9IGRyb3BWYWx1ZS50b1N0cmluZygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmKGZvcm1GaWVsZC5jb250cm9sPT09RUZvcm1Db250cm9sLlNFTEVDVEJVVFRPTil7XG4gICAgICAgICAgIGZvcm1GaWVsZC52YWx1ZT10b1RyaW0ocmVjb3JkW21hdGNoZWRLZXldKSB8fCBmb3JtRmllbGQudmFsdWVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmb3JtRmllbGQudmFsdWUgPSB0b1RyaW0ocmVjb3JkW21hdGNoZWRLZXldKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSk7XG59XG4vL3NldCBoeXBlcmxpbmsgcGFyYW0gdmFsdWUgYXMgZmllbGQgdmFsdWVcbmV4cG9ydCBmdW5jdGlvbiBzZXRIeXBlcmxpbmtQYXJhbVZhbHVlKHJlY29yZDphbnksIGR5bmFtaWNGb3JtOiBJRHluYW1pY0Zvcm0pIHtcbiAgbGV0IGtleXM6IHN0cmluZ1tdID0gW107XG4gIGxldCBsaW5rOiBzdHJpbmcgPScnO1xuICBsZXQgcGFyYW1LZXlzOiBzdHJpbmdbXSA9IFtdO1xuICBsZXQgcGFyYW06IGFueTtcbiAgbGV0IGZpZWxkSW5mbzogYW55O1xuICAgIGR5bmFtaWNGb3JtPy5mb3JtU2VjdGlvbnM/LmZvckVhY2goKHNlY3Rpb246IGFueSkgPT4ge1xuICAgICAgc2VjdGlvbj8uZmllbGRzPy5mb3JFYWNoKChmb3JtRmllbGQ6IGFueSkgPT4ge1xuICAgICAgICBpZihmb3JtRmllbGQubGFiZWwgJiYgZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbCAmJiBmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sLmh5cGVybGluaz8ubGluayl7XG4gICAgICAgICAga2V5cyA9IE9iamVjdC5rZXlzKHJlY29yZCk7XG4gICAgICAgICAgaWYoZm9ybUZpZWxkPy5sYWJlbD8ubGFiZWxDb250cm9sPy5vcmlnbmFsTGluayl7XG4gICAgICAgICAgIGxpbmsgPSBmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sLm9yaWduYWxMaW5rO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmKGZvcm1GaWVsZD8ubGFiZWw/LmxhYmVsQ29udHJvbD8uaHlwZXJsaW5rPy5wYXJhbXMpe1xuICAgICAgICAgICBwYXJhbSA9IGZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2wuaHlwZXJsaW5rLnBhcmFtcztcbiAgICAgICAgICAgcGFyYW1LZXlzID0gT2JqZWN0LmtleXMocGFyYW0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmaWVsZEluZm8gPSBmb3JtRmllbGQ7XG4gICAgICAgICAgaWYocmVjb3JkICYmIGtleXMgJiYgbGluayAmJiBwYXJhbUtleXMgJiYgcGFyYW0gJiYgZmllbGRJbmZvKXtcbiAgICAgICAgICAgIGZpZWxkSW5mby5sYWJlbC5sYWJlbENvbnRyb2wuaHlwZXJsaW5rLmxpbmsgPSBzZXRIeXBlcmxpbmsoa2V5cywgcmVjb3JkLCBsaW5rLCBwYXJhbUtleXMsIHBhcmFtKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gb2JqQ29udmVydFRvTG93ZXIob2JqOiBhbnksIGlnbm9yZUNhc2luZzogYm9vbGVhbiA9IGZhbHNlKSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhvYmopLnJlZHVjZSgoYWNjdW11bGF0b3I6IGFueSwga2V5KSA9PiB7XG4gICAgYWNjdW11bGF0b3JbaWdub3JlQ2FzaW5nID8ga2V5IDoga2V5LnRvTG93ZXJDYXNlKCldID0gb2JqW2tleV07XG4gICAgcmV0dXJuIGFjY3VtdWxhdG9yO1xuICB9LCB7fSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGlja1NlY3Rpb25IaWdobGlnaHQodmFsdWU6IGFueSkge1xuICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcubGVmdC1zaWRlQmFyIC5wLXBhbmVsbWVudSAucC1wYW5lbG1lbnUtcGFuZWwnKTtcbiAgICAgICBjb25zdCB0aXRsZSA9IGRvY3VtZW50LmJvZHk/LnF1ZXJ5U2VsZWN0b3IoJ1t0aXRsZSA9IFwiJysgdmFsdWU/Lm5hbWUgKydcIl0nKTtcbiAgICAgICBjb25zdCBhbGxNZW51SXRlbXMgPSBkb2N1bWVudC5ib2R5Py5xdWVyeVNlbGVjdG9yQWxsKCcubGVmdC1zaWRlQmFyIC5wLXBhbmVsbWVudS1wYW5lbCcpO1xuICAgICAgIGFsbE1lbnVJdGVtcz8uZm9yRWFjaCgobWVuYXVJdGVtOiBhbnkpID0+IHtcbiAgICAgICAgbWVuYXVJdGVtPy5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgJ3AtcGFuZWxtZW51LXBhbmVsJyk7XG4gICAgICAgfSlcbiAgICAgICAgdGl0bGU/LnBhcmVudEVsZW1lbnQ/LnBhcmVudEVsZW1lbnQ/LnNldEF0dHJpYnV0ZSgnY2xhc3MnLCAncC1wYW5lbG1lbnUtcGFuZWwgYWN0aXZlJyk7XG4gICAgICAgIHRpdGxlPy5wYXJlbnRFbGVtZW50Py5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgJ3AtZWxlbWVudCBwLWNvbXBvbmVudCBwLXBhbmVsbWVudS1oZWFkZXIgcC1oaWdobGlnaHQnKTtcblxuICAgICAgICBjb25zdCBhY3RpdmVJY29uID0gZG9jdW1lbnQuYm9keT8ucXVlcnlTZWxlY3RvckFsbCgnLmFjdGl2ZS1pY29uJyk7XG4gIGFjdGl2ZUljb24/LmZvckVhY2goKGljb246IGFueSwgaW5kZXg6IGFueSkgPT4ge1xuICAgICAgaWNvbj8uc2V0QXR0cmlidXRlKCdjbGFzcycsICdwLWVsZW1lbnQgcC1jb21wb25lbnQgcC1wYW5lbG1lbnUtaGVhZGVyIHAtaGlnaGxpZ2h0Jyk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlQWN0aXZlSWNvbkNsYXNzKCkge1xuICBjb25zdCBhY3RpdmVJY29uID0gZG9jdW1lbnQuYm9keT8ucXVlcnlTZWxlY3RvckFsbCgnLmFjdGl2ZS1pY29uJyk7XG4gIGlmIChhY3RpdmVJY29uICYmIGFjdGl2ZUljb24ubGVuZ3RoID4gMCkge1xuICAgIGFjdGl2ZUljb24/LmZvckVhY2goKGljb246IGFueSwgaW5kZXg6IGFueSkgPT4ge1xuICAgICAgaWNvbj8uc2V0QXR0cmlidXRlKCdjbGFzcycsJ3AtZWxlbWVudCBwLWNvbXBvbmVudCBwLXBhbmVsbWVudS1oZWFkZXIgcC1oaWdobGlnaHQnKTtcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaGlnaGxpZ2h0TGVmdFNpZGViYXIoKXtcbiAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5mb3JtLWNvbnRhaW5lclwiKT8uYWRkRXZlbnRMaXN0ZW5lcihcIndoZWVsXCIsICgpID0+e1xuICBjb25zdCBzY3JvbGxUb3BQb3NpdGlvbjogYW55ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5mb3JtLWNvbnRhaW5lclwiKT8uc2Nyb2xsVG9wO1xuICBjb25zdCBhbGxJY29uRWxlbWVudHM6IGFueSA9IGRvY3VtZW50LmJvZHkucXVlcnlTZWxlY3RvckFsbChcIi5sZWZ0LXNpZGVCYXIgLnAtcGFuZWxtZW51IC5wLXBhbmVsbWVudS1wYW5lbFwiKTtcblxuICBhbGxJY29uRWxlbWVudHM/LmZvckVhY2goKGljb246IGFueSwgaW5kZXg6IGFueSkgPT4ge1xuICAgIGljb24/LnNldEF0dHJpYnV0ZSgndGFiSW5kZXgnLCAnc2VjdGlvbicgKyBpbmRleCk7XG4gIH0pO1xuICAgICByZW1vdmVBY3RpdmVJY29uQ2xhc3MoKTtcbiAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuZm9ybS1jb250YWluZXIgLmNhcmQnKT8uZm9yRWFjaCgoY2FyZDogYW55LCBpbmRleDogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRJZCA9IFwic2VjdGlvblwiICsgaW5kZXg7XG4gICAgICAgIGlmIChzY3JvbGxUb3BQb3NpdGlvbiA+PSBjYXJkLm9mZnNldFRvcCAmJiBzY3JvbGxUb3BQb3NpdGlvbiA8PSBjYXJkLm9mZnNldFRvcCArIGNhcmQub2Zmc2V0SGVpZ2h0KXtcbiAgICAgICAgICByZXR1cm4gIGRvY3VtZW50LmJvZHk/LnF1ZXJ5U2VsZWN0b3IoJ1t0YWJJbmRleD0nKyBjdXJyZW50SWQgKyAnXScpPy5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgJ3AtcGFuZWxtZW51LXBhbmVsIGFjdGl2ZScpO1xuICAgICAgICB9IGVsc2V7XG4gICAgICAgICAgcmV0dXJuICBkb2N1bWVudC5ib2R5Py5xdWVyeVNlbGVjdG9yKCdbdGFiSW5kZXg9JysgY3VycmVudElkICsgJ10nKT8uc2V0QXR0cmlidXRlKCdjbGFzcycsICdwLXBhbmVsbWVudS1wYW5lbCcpOyAgICBcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH0pO1xuICAgIH1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRLZXlzQW5kVmFsdWUoZGF0YTogYW55LCByZWNvcmQ6IGFueSkge1xuICBsZXQgdmFsdWVLZXk6IHN0cmluZyA9ICcnO1xuICBsZXQgc2V0RGF0YUZyb21SZWNvcmQgPSBmYWxzZTtcbiAgT2JqZWN0LmtleXMoZGF0YSkuZm9yRWFjaCgoZGF0YUtleSkgPT4ge1xuICAgIGxldCB2YWx1ZUNvbnRhaW5zS2V5OiBib29sZWFuID0gZmFsc2U7XG4gICAgaWYoZGF0YVtkYXRhS2V5XSAmJiBkYXRhW2RhdGFLZXldPy50b1N0cmluZygpPy5pbmNsdWRlcygneycpKXtcbiAgICAgIHZhbHVlQ29udGFpbnNLZXkgPSB0cnVlO1xuICAgICAgdmFsdWVLZXkgPSBkYXRhW2RhdGFLZXldPy50b1N0cmluZygpPy5yZXBsYWNlKFwie1wiLCBcIlwiKT8ucmVwbGFjZShcIn1cIiwgXCJcIilcbiAgICB9XG4gICAgbGV0IGtleSA9IE9iamVjdC5rZXlzKHJlY29yZCkuZmluZCgoa2V5KSA9PiB2YWx1ZUNvbnRhaW5zS2V5ID8gKHZhbHVlS2V5LnRvTG93ZXJDYXNlKCkgPT09IGtleS50b0xvd2VyQ2FzZSgpKSA6IChkYXRhS2V5LnRvTG93ZXJDYXNlKCkgPT09IGtleS50b0xvd2VyQ2FzZSgpKSk7XG4gICAgaWYgKChrZXkgJiYga2V5Lmxlbmd0aCA+IDAgJiYgcmVjb3JkW2tleV0pfHwgcmVjb3JkW2tleV0gPT09IGZhbHNlKSB7XG4gICAgICBzZXREYXRhRnJvbVJlY29yZCA9IHRydWVcbiAgICAgIGRhdGEgPSB7IC4uLmRhdGEsIFtkYXRhS2V5XTogcmVjb3JkW2tleV0gfTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4ge21hdGNoRGF0YTogc2V0RGF0YUZyb21SZWNvcmQsIGRhdGE6IGRhdGF9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0UHJvcFZhbHVlKG9iajogYW55LCBwcm9wOiBJRGljdGlvbmFyeSkge1xuICBjb25zdCBtYXRjaGVkS2V5OiBzdHJpbmcgPSBnZXRNYXRjaEtleShvYmosIHByb3AubmFtZSk7XG4gIGlmIChtYXRjaGVkS2V5KSB7XG4gICAgcmV0dXJuIChvYmpbbWF0Y2hlZEtleV0gPSBwcm9wLnZhbHVlKTtcbiAgfVxuICBlbHNle1xuICAgcmV0dXJuKCBvYmpbcHJvcC5uYW1lXT1wcm9wLnZhbHVlKVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNSb2xlKHJvbGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBsZXQgc3RvcmFnZSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdDdXJyZW50VXNlckluZm8nKTtcbiAgaWYgKHN0b3JhZ2UpIHtcbiAgICBsZXQgY3VycmVudFVzZXIgPSBKU09OLnBhcnNlKHN0b3JhZ2UpO1xuICAgIGlmIChjdXJyZW50VXNlciAmJiBjdXJyZW50VXNlci5yb2xlcyAmJiBjdXJyZW50VXNlci5yb2xlcy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gY3VycmVudFVzZXIucm9sZXMuc29tZSgoaXRlbTogYW55KSA9PiBpdGVtLmNvZGUudG9TdHJpbmcoKT8udHJpbSgpPy50b0xvd2VyQ2FzZSgpID09PSByb2xlPy50cmltKCk/LnRvTG93ZXJDYXNlKCkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIHNldExhYmVsSHlwZXJsaW5rKGl0ZW06IGFueSwgcmVjb3JkOiBhbnksIGtleXM6IHN0cmluZ1tdLCBhbGxEYXRhOiBhbnlbXSA9IFtdKSB7XG4gIGlmIChcbiAgICBpdGVtLmxhYmVsICYmXG4gICAgaXRlbS5sYWJlbC5sYWJlbENvbnRyb2wgJiZcbiAgICBpdGVtLmxhYmVsLmxhYmVsQ29udHJvbC5oeXBlcmxpbmsgJiZcbiAgICBpdGVtLmxhYmVsLmxhYmVsQ29udHJvbC5oeXBlcmxpbmsucGFyYW1zXG4gICkge1xuICAgIGNvbnN0IHBhcmFtS2V5cyA9IE9iamVjdC5rZXlzKGl0ZW0ubGFiZWwubGFiZWxDb250cm9sLmh5cGVybGluay5wYXJhbXMpO1xuICAgIGNvbnN0IGxpbmsgPSBpdGVtLmxhYmVsLmxhYmVsQ29udHJvbC5oeXBlcmxpbmsubGluaztcbiAgICBpZiAoaXRlbS5sYWJlbC5sYWJlbENvbnRyb2wuaHlwZXJsaW5rLmxpbmspIHtcbiAgICAgIGl0ZW0ubGFiZWwubGFiZWxDb250cm9sLmh5cGVybGluay5saW5rID0gc2V0SHlwZXJsaW5rKFxuICAgICAgICBrZXlzLFxuICAgICAgICByZWNvcmQsXG4gICAgICAgIGxpbmssXG4gICAgICAgIHBhcmFtS2V5cyxcbiAgICAgICAgaXRlbS5sYWJlbC5sYWJlbENvbnRyb2wuaHlwZXJsaW5rLnBhcmFtcyxcbiAgICAgICAgYWxsRGF0YVxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEh5cGVybGluayhcbiAga2V5czogc3RyaW5nW10sXG4gIHJlY29yZDogYW55LFxuICBsaW5rOiBzdHJpbmcsXG4gIHBhcmFtS2V5czogc3RyaW5nW10sXG4gIHBhcmFtczogYW55LFxuICBhbGxEYXRhOiBhbnlbXSA9IFtdXG4pOiBzdHJpbmcge1xuICBsZXQgbmV3TGluazogc3RyaW5nID0gbGluaztcbiAgcmVjb3JkID0gb2JqQ29udmVydFRvTG93ZXIocmVjb3JkKTtcbiAgcGFyYW1LZXlzLmZvckVhY2goKHBhcmFta2V5KSA9PiB7XG4gICAgY29uc3QgcGFyYW06IHN0cmluZyA9ICd7eycgKyBwYXJhbWtleS50b0xvd2VyQ2FzZSgpICsgJ319JztcbiAgICBjb25zdCBpc1BhcmFtTWF0Y2hlZCA9IG5ld0xpbmsubG9jYWxlQ29tcGFyZShwYXJhbSk7XG4gICAgY29uc3QgcGFyYW1JblJlY29yZCA9IHNldFBhcmFtS2V5VmFsdWUocmVjb3JkLCBhbGxEYXRhLCBwYXJhbWtleSk7XG5cbiAgICBpZiAoaXNQYXJhbU1hdGNoZWQpIHtcbiAgICAgIGxldCBwYXJhbVZhbHVlID0gcGFyYW1zID8gcGFyYW1zW3BhcmFta2V5XSA6IG51bGw7XG4gICAgICBpZihwYXJhbVZhbHVlID09PSAnJyAmJiBwYXJhbUluUmVjb3JkKXtcbiAgICAgICAgcGFyYW1WYWx1ZSA9ICd7JytwYXJhbWtleSsnfSc7XG4gICAgICB9XG4gICAgICBpZiAocGFyYW1WYWx1ZSkge1xuICAgICAgICBjb25zdCBwcm9wTmFtZSA9IHBhcmFtVmFsdWUudG9TdHJpbmcoKS5yZXBsYWNlKCd7JywgJycpLnJlcGxhY2UoJ30nLCAnJyk7XG4gICAgICAgIGxldCBwcm9wVmFsdWUgPSByZWNvcmRbcHJvcE5hbWUudG9Mb3dlckNhc2UoKV07XG4gICAgICAgIGlmICh0eXBlb2YgcHJvcFZhbHVlID09PSAnc3RyaW5nJyAgJiYgcHJvcFZhbHVlICE9IG51bGwgJiYgcHJvcFZhbHVlLmluY2x1ZGVzKFwiJlwiKSkge1xuICAgICAgICAgIHByb3BWYWx1ZSA9IGVuY29kZVVSSUNvbXBvbmVudChwcm9wVmFsdWUpO1xuICAgICAgICB9IFxuICAgICAgICBcbiAgICAgICAgLy8gaW4gY2FzZSBvZiBwcm9wIG5vdCBmb3VuZCBpbiByZWNvcmQgdGhlbiB0cnkgdG8gZmluZCBwcm9wIGluIGFsbCBkYXRhIGFycmF5LCB0byBnZXQgaXRzIHZhbHVlIFxuICAgICAgICBpZiAoIXByb3BWYWx1ZSAmJiBhbGxEYXRhICYmIGFsbERhdGEubGVuZ3RoID4gMClcbiAgICAgICAge1xuICAgICAgICAgIGFsbERhdGEuZm9yRWFjaCgoZGF0YSk9PntcbiAgICAgICAgICAgIC8vY29uc3QgdmFsdWUgPSBkYXRhLnJlY29yZHMuZmluZCgoeCk9PiB4W3Byb3BOYW1lXSk7XG4gICAgICAgICAgICBkYXRhLnJlY29yZHMuZm9yRWFjaCgoYWxsUmVjb3JkOiBhbnkpPT57XG4gICAgICAgICAgICAgIGxldCBrZXlzID0gT2JqZWN0LmtleXMoYWxsUmVjb3JkKTtcbiAgICAgICAgICAgICAgbGV0IG1hdGNoS2V5ID0ga2V5cy5maW5kKCh4KT0+IHgudG9Mb3dlckNhc2UoKSA9PT0gcHJvcE5hbWUudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgICAgICAgIGlmIChtYXRjaEtleSl7XG4gICAgICAgICAgICAgICAgIHByb3BWYWx1ZSA9IGFsbFJlY29yZFttYXRjaEtleV07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG5ld0xpbmsgPSBuZXdMaW5rLnJlcGxhY2UobmV3IFJlZ0V4cChwYXJhbSwgJ2lnJyksIHRvVHJpbShwYXJhbVZhbHVlLnRvU3RyaW5nKCkuaW5jbHVkZXMoJ3snKSA/IHByb3BWYWx1ZSA6IHBhcmFtVmFsdWUpKTtcbiAgICAgIFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gZ2V0IHBhcmFtIHZhbHVlIGZyb20gYXBpIHJlc3BvbnNlLCBpZiBwYXJhbSBrZXkgZXhpc3RzIGluIGl0XG4gICAgICAgIGNvbnN0IG1hdGNoZWRLZXk6IGFueSA9IGtleXMuZmluZChcbiAgICAgICAgICAoeCkgPT4geC50b0xvd2VyQ2FzZSgpID09PSBwYXJhbWtleS50b0xvd2VyQ2FzZSgpXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKG1hdGNoZWRLZXkpIHtcbiAgICAgICAgICBwYXJhbVZhbHVlID0gcmVjb3JkW21hdGNoZWRLZXldO1xuICAgICAgICAgIGlmIChwYXJhbVZhbHVlKSB7XG4gICAgICAgICAgICBuZXdMaW5rID0gbmV3TGluay5yZXBsYWNlKFxuICAgICAgICAgICAgICBuZXcgUmVnRXhwKHBhcmFtLCAnaWcnKSxcbiAgICAgICAgICAgICAgdG9UcmltKHBhcmFtVmFsdWUpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBuZXdMaW5rID0gbmV3TGluay5yZXBsYWNlKG5ldyBSZWdFeHAocGFyYW0sICdpZycpLCB0b1RyaW0oJycpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICAvLyByZXBsYWNlIHRoZSB7e3BhcmFtfX0gd2l0aCBlbXB0eVxuICBpZihuZXdMaW5rICYmIG5ld0xpbmsuaW5jbHVkZXMoXCJ7e1wiKSAmJiBuZXdMaW5rLmluY2x1ZGVzKFwifX1cIikpe1xuICAgIG5ld0xpbmsgPSBuZXdMaW5rPy5yZXBsYWNlKC97Ky4qP30rL2csIFwiXCIpO1xuICB9XG4gIHJldHVybiBuZXdMaW5rO1xufVxuXG4vLyBpdHMgY2hlY2tpbmcgaWYgdGhlcmUgaXMgbm8gdmFsdWUgaW4gaHlwZXJsaW5rIHBhcmFtIHRoZW4gaXQgc2V0IGtleSBhcyBhIHBhcmFtVmFsdWVcbmZ1bmN0aW9uIHNldFBhcmFtS2V5VmFsdWUocmVjb3JkOiBhbnksIGFsbERhdGE6IGFueVtdID0gW10sIHBhcmFta2V5OiBhbnkpe1xuICBsZXQgcGFyYW1WYWx1ZTogYm9vbGVhbiA9IGZhbHNlO1xuICBpZihhbGxEYXRhICYmIGFsbERhdGEubGVuZ3RoID4gMCl7XG4gICAgYWxsRGF0YS5mb3JFYWNoKChkYXRhOiBhbnkpPT57XG4gICAgICBpZihkYXRhLnJlY29yZHMgJiYgZGF0YS5yZWNvcmRzLmxlbmd0aCA+IDApe1xuICAgICAgICBkYXRhLnJlY29yZHMuZm9yRWFjaCgoYWxsUmVjb3JkOiBhbnkpID0+e1xuICAgICAgICAgICBpZihwYXJhbVZhbHVlID09PSBmYWxzZSl7XG4gICAgICAgICAgICBwYXJhbVZhbHVlID0gT2JqZWN0LmtleXMoYWxsUmVjb3JkKS5zb21lKChyZWNvcmQpPT4gcmVjb3JkLnRvTG93ZXJDYXNlKCkgPT09IHBhcmFta2V5LnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgfSk7XG4gIH1lbHNle1xuICAgICAgIHBhcmFtVmFsdWUgPSBPYmplY3Qua2V5cyhyZWNvcmQpLnNvbWUoKHgpPT4geCA9PT0gcGFyYW1rZXkudG9Mb3dlckNhc2UoKSk7XG4gIH1cbiAgcmV0dXJuIHBhcmFtVmFsdWU7XG59XG5cbmZ1bmN0aW9uIGdldFByb3BlcnR5VmFsdWUoZGF0YTogYW55LCBwcm9wTmFtZTogc3RyaW5nKSB7XG4gIGxldCBwcm9wVmFsdWU6IGFueTtcbiAgZGF0YS5yZWNvcmRzPy5mb3JFYWNoKChyZWNvcmQ6IGFueSkgPT4ge1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHJlY29yZCkpIHtcbiAgICAgIGlmIChrZXkgJiYgcHJvcE5hbWUgJiYga2V5LnRvTG93ZXJDYXNlKCkgPT09IHByb3BOYW1lLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgcHJvcFZhbHVlID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHByb3BWYWx1ZTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0Rm9ybUZpZWxkQ1ZhbHVlKGZpZWxkOiBhbnkpIHtcbiAgaWYgKFxuICAgIGZpZWxkLmZvcm1hdD8udHlwZSA9PT0gRUZvcm1hdFR5cGUuQk9PTEVBTl9ZTiB8fFxuICAgIGZpZWxkLmZvcm1hdD8uZm9ybWF0dGVyPy5uYW1lID09PSAndG9Cb29sZWFuJ1xuICApIHtcbiAgICByZXR1cm4gKGZpZWxkLnZhbHVlID09PSAxIHx8IGZpZWxkLnZhbHVlPy50b1N0cmluZygpID09PSAndHJ1ZScgfHwgZmllbGQudmFsdWU/LnRvU3RyaW5nKCkgPT09ICdZJykgPyAnWScgOiAnTic7XG4gIH0gZWxzZSBpZiAoXG4gICAgZmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkNBTEVOREFSICYmXG4gICAgKGZpZWxkLnZhbHVlIHx8IGZpZWxkLnZhbHVlID09PSAnJylcbiAgKSB7XG4gICAgaWYoZmllbGQudGltZU9ubHkgfHwgZmllbGQuc2hvd3RpbWUpe1xuICAgICAgLy8gY29uc3QgZGF0ZVRpbWVSZWdleCA9IC9eXFxkezR9LVxcZHsyfS1cXGR7Mn0gKFxcZHsyfSk6KFxcZHsyfSk6KFxcZHsyfSkkLzsgLy8gUmVnZXggZm9yIGRhdGV0aW1lIGZvcm1hdFxuICAgICAgLy8gY29uc3QgbWF0Y2ggPSBmaWVsZC52YWx1ZS5tYXRjaChkYXRlVGltZVJlZ2V4KTtcbiAgICAgIC8vIGlmIChtYXRjaCkge1xuICAgICAgLy8gICBmaWVsZC52YWx1ZSA9IGZvcm1hdERhdGUoZmllbGQudmFsdWUsICdoaDptbSBhJywgJ2VuLVVTJyk7XG4gICAgICAvLyB9ZWxzZSB7XG4gICAgICAgIGZpZWxkLnZhbHVlID0gZmllbGQudmFsdWU7XG4gICAgICAvLyB9XG4gICAgfWVsc2V7XG4gICAgICBmaWVsZC52YWx1ZSA9XG4gICAgICBmaWVsZC5zaG93VGltZSA9PT0gdHJ1ZVxuICAgICAgICA/IHRvU2hvcnREYXRlVGltZShmaWVsZC52YWx1ZSwgZmllbGQuZm9ybWF0KVxuICAgICAgICA6IHRvU2hvcnREYXRlKGZpZWxkLnZhbHVlLCBmaWVsZC5mb3JtYXQpXG4gICAgfVxuICAgIHJldHVybiBmaWVsZC52YWx1ZTtcbiAgfSBlbHNlIGlmIChcbiAgICAoZmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkxPT0tVUF9JTlBVVCB8fCBmaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuSU5QVVQpICYmXG4gICAgZmllbGQudmFsdWUgJiZcbiAgICB0eXBlb2YgZmllbGQudmFsdWUgPT09ICdvYmplY3QnXG4gICkge1xuICAgIHJldHVybiBmaWVsZC52YWx1ZS52YWx1ZSA9PSB1bmRlZmluZWQgPyBudWxsIDogZmllbGQudmFsdWUudmFsdWU7XG4gIH0gZWxzZSBpZiAoXG4gICAgZmllbGQubGFiZWwgJiZcbiAgICBmaWVsZC5sYWJlbC5sYWJlbENvbnRyb2wgJiZcbiAgICBmaWVsZC5sYWJlbC5sYWJlbENvbnRyb2wuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkxPT0tVUF9JTlBVVCAmJlxuICAgIGZpZWxkLnZhbHVlICYmXG4gICAgdHlwZW9mIGZpZWxkLnZhbHVlID09PSAnb2JqZWN0J1xuICApIHtcbiAgICByZXR1cm4gZmllbGQudmFsdWUudmFsdWU7XG4gIH0gZWxzZSB7XG4gICAgZmllbGQudmFsdWUgPSBmaWVsZC52YWx1ZSA9PSB1bmRlZmluZWQgPyBudWxsIDogZmllbGQudmFsdWU7XG4gICAgcmV0dXJuIGZpZWxkLnZhbHVlO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhdXRvU2V0TG9va3VwRGF0YShcbiAgZmllbGREYXRhOiBhbnksXG4gIHJlc3BvbnNlOiBhbnlcbiAgKSB7XG4gIGxldCBvYmogPSB7fTtcbiAgbGV0IHJlY29yZCA9IHNldERhdGFGaWVsZHMoW3Jlc3BvbnNlXSk7XG4gIGlmIChyZWNvcmQgJiYgcmVjb3JkLmxlbmd0aCA+IDApIHtcbiAgICByZWNvcmQuZm9yRWFjaCgoeDogYW55KSA9PiB7XG4gICAgICByZWNvcmQgPSB4O1xuICAgIH0pO1xuICB9XG4gIGlmIChmaWVsZERhdGEgJiYgcmVjb3JkKSB7XG4gICAgT2JqZWN0LmVudHJpZXMoZmllbGREYXRhKS5mb3JFYWNoKChbZGF0YUtleSwgZGF0YVZhbHVlXTogYW55KSA9PiB7XG4gICAgICBsZXQgcm93S2V5cyA9IE9iamVjdC5rZXlzKHJlY29yZCk7XG4gICAgICBsZXQga2V5ID0gcm93S2V5cz8uZmluZCgoeCkgPT4geD8udG9Mb3dlckNhc2UoKSA9PT0gZGF0YUtleT8udG9TdHJpbmcoKT8udG9Mb3dlckNhc2UoKSk7XG4gICAgICBsZXQgdmFsdWUgPSByb3dLZXlzPy5maW5kKFxuICAgICAgICAoeCkgPT4gZGF0YVZhbHVlICYmIGRhdGFWYWx1ZT8udG9TdHJpbmcoKS5pbmNsdWRlcygneycpICYmIHg/LnRvTG93ZXJDYXNlKCkgPT09IGRhdGFWYWx1ZT8udG9TdHJpbmcoKT8udG9Mb3dlckNhc2UoKT8ucmVwbGFjZShcIntcIiwgXCJcIik/LnJlcGxhY2UoXCJ9XCIsIFwiXCIpXG4gICAgICApPy50b0xvd2VyQ2FzZSgpO1xuICAgICAgaWYgKHZhbHVlICYmIHZhbHVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgb2JqID0geyAuLi5vYmosIFtkYXRhS2V5XTogcmVjb3JkW3ZhbHVlKydfb2JqJ10/Lm9wdGlvblZhbHVlID8gcmVjb3JkW3ZhbHVlKydfb2JqJ10/Lm9wdGlvblZhbHVlIDogcmVjb3JkW3ZhbHVlXSB9O1xuICAgICAgfSBlbHNlIGlmIChrZXkgJiYga2V5Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgb2JqID0geyAuLi5vYmosIFtkYXRhS2V5XTogcmVjb3JkW2tleS50b0xvd2VyQ2FzZSgpXSB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb2JqID0geyAuLi5vYmosIFtkYXRhS2V5XTogZGF0YVZhbHVlIH07XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIG9iajtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0R3JpZExvb2t1cERhdGEoY29sdW1uOiBJR3JpZENvbHVtbltdLCBmaWVsZDogc3RyaW5nLCBkYXRhOiBhbnkpe1xuICBsZXQgb2JqID0gY29sdW1uLmZpbmQoKHgpPT4geC5maWVsZD8udG9Mb3dlckNhc2UoKSA9PT0gZmllbGQudG9Mb3dlckNhc2UoKSk7XG4gIGlmKG9iaiAmJiBvYmoubG9va3VwQ29udHJvbD8uZGF0YSl7XG4gICAgb2JqLmxvb2t1cENvbnRyb2wuZGF0YS5kYXRhID0gZGF0YTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0RGF0YUZpZWxkcyhyZXNwb25zZTogYW55W10pIHtcbiAgbGV0IGRhdGE6IGFueSA9IFtdO1xuICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UubGVuZ3RoID4gMCkge1xuICAgIHJlc3BvbnNlLm1hcCgoeDogYW55LCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBPYmplY3Qua2V5cyh4KS5yZWR1Y2UoXG4gICAgICAgIChwcmV2LCBjdXJyZW50KSA9PiAoeyAuLi5wcmV2LCBbY3VycmVudC50b0xvd2VyQ2FzZSgpXTogeFtjdXJyZW50XSB9KSxcbiAgICAgICAge31cbiAgICAgICk7XG5cbiAgICAgIGRhdGEucHVzaChyZXN1bHQpO1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBkYXRhO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0RGlhbG9nUmVzcG9uc2UoXG4gIGZvcm1GaWVsZDogYW55LFxuICBmb3JtRGF0YTogYW55LFxuICByZXNwb25zZTogYW55XG4pIHtcbiAgbGV0IHZhbHVlOiBhbnk7XG4gIGlmIChyZXNwb25zZSkge1xuICAgIC8vIGlmIHNlbGVjdGVkVmFsdWUgZG9lcyBub3QgZXhpc3QgdGhlbiBjb25zaWRlciB2YWx1ZUZpZWxkIGFzIHNlbGVjdGVkVmFsdWVcbiAgICBpZiAoXG4gICAgICBmb3JtRGF0YSAmJlxuICAgICAgZm9ybURhdGEuZGF0YSAmJlxuICAgICAgZm9ybURhdGEuZGF0YS5sYWJlbFByb3AgJiZcbiAgICAgICFmb3JtRGF0YS5kYXRhLnZhbHVlUHJvcFxuICAgICkge1xuICAgICAgZm9ybURhdGEuZGF0YS52YWx1ZVByb3AgPSBmb3JtRGF0YS5kYXRhLmxhYmVsUHJvcDtcbiAgICB9XG4gICAgZWxzZSBpZiAoXG4gICAgICBmb3JtRGF0YSAmJlxuICAgICAgZm9ybURhdGEuZGF0YSAmJlxuICAgICAgZm9ybURhdGEuZGF0YS52YWx1ZVByb3AgJiZcbiAgICAgICFmb3JtRGF0YS5kYXRhLmxhYmVsUHJvcFxuICAgICkge1xuICAgICAgZm9ybURhdGEuZGF0YS5sYWJlbFByb3AgPSBmb3JtRGF0YS5kYXRhLnZhbHVlUHJvcDtcbiAgICB9XG5cbiAgICBjb25zdCBtYXRjaFZhbHVlS2V5OiBzdHJpbmcgPSBnZXRNYXRjaEtleShcbiAgICAgIHJlc3BvbnNlLFxuICAgICAgZm9ybURhdGE/LmRhdGE/LnZhbHVlUHJvcFxuICAgICk7XG4gICAgY29uc3QgbWF0Y2hGaWVsZEtleTogc3RyaW5nID0gZ2V0TWF0Y2hLZXkoXG4gICAgICByZXNwb25zZSxcbiAgICAgIGZvcm1EYXRhPy5kYXRhPy5sYWJlbFByb3BcbiAgICApO1xuXG4gICAgaWYgKFxuICAgICAgZm9ybURhdGE/LmRhdGEgJiZcbiAgICAgIGZvcm1EYXRhPy5kYXRhLnZhbHVlUHJvcCAmJlxuICAgICAgZm9ybURhdGE/LmRhdGEubGFiZWxQcm9wXG4gICAgKSB7XG4gICAgICBsZXQgdmFsdWVQcm9wID0gcmVzcG9uc2VbbWF0Y2hWYWx1ZUtleV07XG4gICAgICBsZXQgbWF0Y2hUZXh0ID0gcmVzcG9uc2VbbWF0Y2hGaWVsZEtleV07XG4gICAgICBpZiAodHlwZW9mIHZhbHVlUHJvcCA9PT0gJ3N0cmluZycgJiYgdHlwZW9mIG1hdGNoVGV4dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgdmFsdWVQcm9wID0gdmFsdWVQcm9wLnRyaW0oKTtcbiAgICAgICAgbWF0Y2hUZXh0ID0gbWF0Y2hUZXh0LnRyaW0oKTtcbiAgICAgIH1cbiAgICAgIHZhbHVlID0geyB0ZXh0OiBtYXRjaFRleHQsIHZhbHVlOiB2YWx1ZVByb3AgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgRmllbGRLZXk6IHN0cmluZyA9IGdldE1hdGNoS2V5KHJlc3BvbnNlLCBmb3JtRmllbGQuZmllbGQpO1xuICAgICAgbGV0IHZhbHVlID0gcmVzcG9uc2VbRmllbGRLZXldO1xuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWU/LnRvU3RyaW5nKCk/LnRyaW0oKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3VycmVudFVybCgpOnN0cmluZ3tcbiAgbGV0IGN1cnJlbnRSb3V0ZTogc3RyaW5nID0gJyc7XG4gIGxldCB1cmwgPSB3aW5kb3cubG9jYXRpb24uaHJlZjtcbiAgaWYodXJsKXtcbiAgICBsZXQgYXJyID0gdXJsLnNwbGl0KCcvJyk7XG4gICAgY3VycmVudFJvdXRlID0gYXJyW2Fyci5sZW5ndGgtMV1cbiAgfSAgICBcbiAgcmV0dXJuIGN1cnJlbnRSb3V0ZTtcbn1cblxuZXhwb3J0ICBmdW5jdGlvbiBnZXRHcmlkRmlsdGVycygpe1xuICBsZXQgZmlsdGVyczogYW55ID0gW107XG4gIGxldCBncmlkRmlsdGVycyA9IGN1cnJlbnRVcmwoKTtcbiAgICBpZihncmlkRmlsdGVycyAmJiBncmlkRmlsdGVycy5sZW5ndGggPiAwKXtcbiAgICAgIGNvbnN0IGxvY2FsRmlsdGVyID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnU2V0RmlsdGVycy0nK2dyaWRGaWx0ZXJzKSBhcyBhbnkpO1xuICAgICAgZmlsdGVycyA9IGxvY2FsRmlsdGVyPy5maWx0ZXJzO1xuICAgIH1cbiAgICByZXR1cm4gZmlsdGVycztcbn1cblxuLy91cGRhdGUgdGhlIGhpZGRlbiBvciBkaXNhYmxlZCBhbmQgdmFsdWUgYmFzZWQgb2ZmIG90aGVyIGdsb2JhbCBmaWx0ZXJzLlxuZXhwb3J0IGZ1bmN0aW9uIHNldEdsb2JhbEZpbHRlclByb3BWYWx1ZXMoXG4gIGdsb2JhbEZpbHRlcjogSUdsb2JhbEZpbHRlcltdLFxuICBmaWVsZDogc3RyaW5nLFxuICBwcm9wczogSUZpbHRlckRpY3Rpb25hcnlbXSxcbikge1xuICByZXR1cm4gZ2xvYmFsRmlsdGVyLm1hcCgoZmlsdGVyOiBhbnkpID0+IHtcbiAgICBpZiAoXG4gICAgICAoZmlsdGVyLmZpZWxkICYmIGZpbHRlci5maWVsZC50b0xvd2VyQ2FzZSgpID09PSBmaWVsZD8udG9Mb3dlckNhc2UoKSkgfHxcbiAgICAgIChmaWx0ZXIuZGlzcGxheVRleHQgJiZcbiAgICAgICAgZmlsdGVyLmRpc3BsYXlUZXh0LnRvTG93ZXJDYXNlKCkgPT09IGZpZWxkPy50b0xvd2VyQ2FzZSgpKVxuICAgICkge1xuICAgICAgcHJvcHM/Lm1hcCgocHJvcDogSUZpbHRlckRpY3Rpb25hcnkpID0+IHtcbiAgICAgICAgaWYgKGZpbHRlci5oYXNPd25Qcm9wZXJ0eShwcm9wLnByb3BOYW1lKSkge1xuICAgICAgICAgIHJldHVybiAoZmlsdGVyW3Byb3AucHJvcE5hbWVdID0gcHJvcC5wcm9wVmFsdWUpO1xuICAgICAgICB9IGVsc2UgaWYgKHByb3AucHJvcFZhbHVlICYmIHByb3AucHJvcFZhbHVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICByZXR1cm4gKGZpbHRlci52YWx1ZSA9IHByb3AucHJvcFZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldENhcmRGaWVsZHNEYXRhKGZvcm06IGFueSkge1xuICBpZiAoZm9ybSAmJiBmb3JtLmR5bmFtaWNmb3JtKSB7XG4gICAgY29uc3QgeyBkeW5hbWljZm9ybSwgLi4ubmV3RGF0YSB9ID0gZm9ybTtcbiAgICBkeW5hbWljZm9ybT8uZm9ybVNlY3Rpb25zPy5mb3JFYWNoKChzZWN0aW9uOiBhbnkpID0+IHtcbiAgICAgIHNlY3Rpb24uZmllbGRzPy5mb3JFYWNoKChmaWVsZDogYW55KSA9PiB7XG4gICAgICAgIGlmIChuZXdEYXRhKSB7XG4gICAgICAgICAgc2V0RWRpdEZvcm1GaWVsZHMoeyByZWNvcmRzOiBbbmV3RGF0YV0gfSwgZHluYW1pY2Zvcm0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxufVxuXG4vLyBkaXNhYmxlIEdyaWQgRWRpdGFibGVSb3cgQ29sdW1uXG5leHBvcnQgZnVuY3Rpb24gZGlzYWJsZUVkaXRSb3dDb2x1bW4oY29sdW1uczogSUdyaWRDb2x1bW5bXSwgZmllbGQ6IHN0cmluZyk6IElHcmlkQ29sdW1uW10ge1xuICBpZiAoZmllbGQgJiYgY29sdW1ucyAmJiBjb2x1bW5zLmxlbmd0aCA+IDApIHtcbiAgICBsZXQgb2JqID0gY29sdW1ucy5maW5kKCh4KSA9PiB4LmZpZWxkPy50b0xvd2VyQ2FzZSgpID09PSBmaWVsZC50b0xvd2VyQ2FzZSgpKTtcbiAgICBsZXQgZGlzYWJsZU9iaiA9IHsgLi4ub2JqLCBkaXNhYmxlZDogdHJ1ZSB9O1xuICAgIGNvbnN0IGluZGV4ID0gY29sdW1ucy5maW5kSW5kZXgoKGk6IGFueSkgPT4gaS5maWVsZC50b0xvd2VyQ2FzZSgpID09PSBmaWVsZC50b0xvd2VyQ2FzZSgpKTtcbiAgICBpZiAoaW5kZXggIT09IC0xKSBjb2x1bW5zW2luZGV4XSA9IGRpc2FibGVPYmo7XG4gIH1cbiAgcmV0dXJuIGNvbHVtbnM7XG59XG5cbi8vIGVuYWJsZWQgR3JpZCBFZGl0YWJsZVJvdyBDb2x1bW5cbmV4cG9ydCBmdW5jdGlvbiBlbmFibGVkRWRpdFJvd0NvbHVtbihjb2x1bW5zOiBJR3JpZENvbHVtbltdLCBmaWVsZDogc3RyaW5nKTogSUdyaWRDb2x1bW5bXSB7XG4gIGlmIChmaWVsZCAmJiBjb2x1bW5zICYmIGNvbHVtbnMubGVuZ3RoID4gMCkge1xuICAgIGxldCBvYmogPSBjb2x1bW5zLmZpbmQoKHgpID0+IHguZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IGZpZWxkPy50b0xvd2VyQ2FzZSgpKTtcbiAgICBsZXQgZW5hYmxlT2JqID0geyAuLi5vYmosIGRpc2FibGVkOiBmYWxzZSB9O1xuICAgIGNvbnN0IGluZGV4ID0gY29sdW1ucy5maW5kSW5kZXgoKGk6IGFueSkgPT4gaS5maWVsZD8udG9Mb3dlckNhc2UoKSA9PT0gZmllbGQ/LnRvTG93ZXJDYXNlKCkpO1xuICAgIGlmIChpbmRleCAhPT0gLTEpIGNvbHVtbnNbaW5kZXhdID0gZW5hYmxlT2JqO1xuICB9XG4gIHJldHVybiBjb2x1bW5zO1xufVxuXG4gLy8gY2hlY2sgdGhlIE1pbnV0ZXMgSW50ZXJ2YWxcbiBleHBvcnQgZnVuY3Rpb24gc2V0TWludXRlc0ludGVydmFsKHZhbHVlOiBhbnkpe1xuICBpZiAodmFsdWUpIHtcbiAgICBjb25zdCBtaW4gPSB2YWx1ZS5nZXRNaW51dGVzKCkudG9TdHJpbmcoKTtcbiAgICBpZiAobWluKSB7XG4gICAgIHZhbHVlID0gdmFsdWUuc2V0TWludXRlcygwKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG4gLy8gdXBkYXRlIHRoZSByZXNwb25zZSByZWNvcmRzXG4gZXhwb3J0IGZ1bmN0aW9uIHNldFVwZGF0ZWRSZWNvcmQocmVjb3JkczogYW55W10sIHJvd0RhdGE6IGFueSwgZGF0YUtleTogc3RyaW5nKTogYW55W117XG4gIGNvbnN0IGluZGV4ID0gcmVjb3Jkcz8uZmluZEluZGV4KChyZWNvcmQpPT4gcmVjb3JkW2RhdGFLZXk/LnRvTG93ZXJDYXNlKCldID09IHJvd0RhdGFbZGF0YUtleT8udG9Mb3dlckNhc2UoKV0pO1xuICBpZihpbmRleCA+IC0xKXtcbiAgICByZWNvcmRzW2luZGV4XSA9IHJvd0RhdGE7XG4gIH1lbHNle1xuICAgIHJlY29yZHMucHVzaChyb3dEYXRhKTtcbiAgfVxuICByZXR1cm4gcmVjb3Jkcztcbn1cblxuLy9jb252ZXJ0IHRoZSB0aW1lIGludG8gZGF0ZVxuZXhwb3J0IGZ1bmN0aW9uIHNldFRpbWVJbkRhdGUodGltZTogYW55KSB7XG4gIGNvbnN0IGNvbnZlcnRUaW1lMTJ0bzI0ID0gKHRpbWUxMmg6IGFueSkgPT4ge1xuICAgIGNvbnN0IFt0aW1lLCBtb2RpZmllcl0gPSB0aW1lMTJoPy50b1N0cmluZygpPy5zcGxpdCgnICcpO1xuICAgIGxldCBbaG91cnMsIG1pbnV0ZXNdID0gdGltZT8uc3BsaXQoJzonKTtcbiAgICBpZiAoaG91cnMgPT09ICcxMicpIHtcbiAgICAgIGhvdXJzID0gJzAwJztcbiAgICB9XG4gICAgaWYgKG1vZGlmaWVyID09PSAnUE0nKSB7XG4gICAgICBob3VycyA9IHBhcnNlSW50KGhvdXJzLCAxMCkgKyAxMjtcbiAgICB9XG4gICAgcmV0dXJuIGAke2hvdXJzfToke21pbnV0ZXN9YDtcbiAgfTtcbiAgY29uc3QgZGF0ZSA9IGNvbnZlcnRUaW1lMTJ0bzI0KHRpbWUpO1xuICBjb25zdCB0ZW1wRGF0ZSA9IG5ldyBEYXRlKCdKdWx5IDEsIDE5OTksICcgKyBkYXRlICsgJzowMCcpO1xuICBjb25zdCBmdXR1cmVEYXRlID0gbmV3IERhdGUoKTtcbiAgZnV0dXJlRGF0ZS5zZXRUaW1lKHRlbXBEYXRlLmdldFRpbWUoKSk7XG4gIHJldHVybiBmdXR1cmVEYXRlO1xufVxuXG4vLyByZXR1cm4gdGhlIGRhdGEgb2YgdGhlIGZpZWxkIFxuZXhwb3J0IGZ1bmN0aW9uIGdldEZpZWxkRGF0YSh7IGZvcm1TZWN0aW9ucyB9OiBhbnksIGZpZWxkOiBzdHJpbmcpe1xuICBsZXQgZGF0YTogYW55ID0gW11cbiAgaWYoZm9ybVNlY3Rpb25zPy5sZW5ndGggPiAwICYmIGZpZWxkKXtcbiAgICBmb3JtU2VjdGlvbnMuZm9yRWFjaCgoc2VjdGlvbjogYW55KT0+e1xuICAgICAgaWYoc2VjdGlvbi5maWVsZHMuc29tZSgoZm9ybUZpZWxkOmFueSk9PiBmb3JtRmllbGQuZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT0gZmllbGQudG9Mb3dlckNhc2UoKSkpe1xuICAgICAgICBkYXRhPXNlY3Rpb24uZmllbGRzLmZpbmQoKGZvcm1GaWVsZDphbnkpPT4gZm9ybUZpZWxkLmZpZWxkPy50b0xvd2VyQ2FzZSgpID09IGZpZWxkLnRvTG93ZXJDYXNlKCkpPy5kYXRhXG4gICAgICB9XG4gICAgfSlcbiAgfVxuICByZXR1cm4gZGF0YTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEFsbEZvcm1GaWVsZHNWYWx1ZXMoXG4gIHsgZm9ybVNlY3Rpb25zIH06IElEeW5hbWljRm9ybSxcbiAgcHJvcHM6IElGaWx0ZXJEaWN0aW9uYXJ5W11cbikge1xuICBmb3JtU2VjdGlvbnM/Lm1hcCgoc2VjdGlvbjogSUZvcm1TZWN0aW9uKSA9PiB7XG4gICAgaWYgKHNlY3Rpb24pIHtcbiAgICAgIHNlY3Rpb24uZmllbGRzLm1hcCgoZm9ybUZpZWxkOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHByb3BzLm1hcCgocHJvcDogSUZpbHRlckRpY3Rpb25hcnkpID0+IHtcbiAgICAgICAgICBpZiAoZm9ybUZpZWxkKSB7XG4gICAgICAgICAgICByZXR1cm4gKGZvcm1GaWVsZFtwcm9wLnByb3BOYW1lXSA9IHByb3AucHJvcFZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICB9KTtcbn1cblxuLy8gcmV0dXJucyB0aGUgcmVzcG9uc2UgaGVhZGVyIGZpbGVOYW1lXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVzcG9uc2VIZWFkZXJGaWxlTmFtZShyZXNwb25zZSl7XG4gIGNvbnN0IGhlYWRlciA9IHJlc3BvbnNlPy5oZWFkZXJzPy5nZXQoJ0NvbnRlbnQtRGlzcG9zaXRpb24nKTtcbiAgcmV0dXJuIGhlYWRlcj8uc3BsaXQoJ2ZpbGVuYW1lPScpPy5bMV0/LnNwbGl0KFwiO1wiKVswXT8ucmVwbGFjZUFsbCgvXFxcIi9nLCAnJyk7XG59XG5cbiBleHBvcnQgZnVuY3Rpb24gZHJhZ2dhYmxlRGlhbG9nKGlkOmFueSl7XG4gICAgY29uc3QgZGlhbG9nID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgncC1kaWFsb2cnKVxuICAgIGRpYWxvZ1swXT8uc2V0QXR0cmlidXRlKCdpZCcsJ215ZGl2JyArIGlkKVxuICAgIGNvbnN0IGRpYWxvZ2hlYWRlciA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3AtZGlhbG9nLWhlYWRlcicpXG4gICAgZGlhbG9naGVhZGVyWzBdPy5zZXRBdHRyaWJ1dGUoJ2lkJywnbXlkaXZoZWFkZXInICsgaWQpXG4gICAgY29uc3QgZWxtbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbXlkaXYnICsgaWQpO1xuXG4gICAgICBsZXQgcG9zMSA9IDAsXG4gICAgICAgIHBvczIgPSAwLFxuICAgICAgICBwb3MzID0gMCxcbiAgICAgICAgcG9zNCA9IDA7XG4gIFxuICAgICAgY29uc3QgZHJhZ01vdXNlRG93biA9IChlKSA9PiB7XG4gICAgICAgIGUgPSBlIHx8IHdpbmRvdy5ldmVudDtcbiAgICAgICAgcG9zMyA9IGUuY2xpZW50WDtcbiAgICAgICAgcG9zNCA9IGUuY2xpZW50WTtcbiAgICAgICAgZG9jdW1lbnQub25tb3VzZXVwID0gY2xvc2VEcmFnRWxlbWVudDtcbiAgICAgICAgZG9jdW1lbnQub25tb3VzZW1vdmUgPSBlbGVtZW50RHJhZztcbiAgICAgIH07XG4gIFxuICAgICAgY29uc3QgZWxlbWVudERyYWcgPSAoZSkgPT4ge1xuICAgICAgICBlID0gZSB8fCB3aW5kb3cuZXZlbnQ7XG4gICAgICAgIHBvczEgPSBwb3MzIC0gZS5jbGllbnRYO1xuICAgICAgICBwb3MyID0gcG9zNCAtIGUuY2xpZW50WTtcbiAgICAgICAgcG9zMyA9IGUuY2xpZW50WDtcbiAgICAgICAgcG9zNCA9IGUuY2xpZW50WTtcbiAgICAgICAgZWxtbnQuc3R5bGUudG9wID0gZWxtbnQ/Lm9mZnNldFRvcCAtIHBvczIgKyAncHgnO1xuICAgICAgICBlbG1udC5zdHlsZS5sZWZ0ID0gZWxtbnQ/Lm9mZnNldExlZnQgLSBwb3MxICsgJ3B4JztcbiAgICAgIH07XG4gIFxuICAgICAgY29uc3QgY2xvc2VEcmFnRWxlbWVudCA9ICgpID0+IHtcbiAgICAgICAgZG9jdW1lbnQub25tb3VzZXVwID0gbnVsbDtcbiAgICAgICAgZG9jdW1lbnQub25tb3VzZW1vdmUgPSBudWxsO1xuICAgICAgfTtcbiAgXG4gICAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ215ZGl2aGVhZGVyJyArIGlkKSkge1xuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbXlkaXZoZWFkZXInICsgaWQpLm9ubW91c2Vkb3duID0gZHJhZ01vdXNlRG93bjtcbiAgICAgIH0gZWxzZSBpZihlbG1udCkge1xuICAgICAgICBlbG1udC5vbm1vdXNlZG93biA9IGRyYWdNb3VzZURvd247XG4gICAgICB9XG4gICAgfSAgXG5leHBvcnQgZnVuY3Rpb24gY2FsZW5kYXJNaW5NYXhWYWx1ZShpdGVtOiBhbnksdmFsdWU6IGFueSwgaW5kZXgpe1xuICBsZXQgdmFsaWRhdGlvbjogc3RyaW5nID0gJ2VxdWFsJztcbiAgdmFyIHZhbGlkRGF0ZSA9IG5ldyBEYXRlKGl0ZW0udmFsaWRhdGlvbnNbaW5kZXhdLmV4cHJlc3Npb24pO1xuICB2YXIgY3VycmVudERhdGUgPSBuZXcgRGF0ZSh2YWx1ZSk7XG4gIGlmICh2YWxpZERhdGUuZ2V0VGltZSgpIDwgY3VycmVudERhdGUuZ2V0VGltZSgpKXtcbiAgICB2YWxpZGF0aW9uID0gJ2dyZWF0ZXInO1xuICB9XG4gIGVsc2UgaWYgKHZhbGlkRGF0ZS5nZXRUaW1lKCkgPiBjdXJyZW50RGF0ZS5nZXRUaW1lKCkpe1xuICAgIHZhbGlkYXRpb24gPSAnbWluaW11bSc7XG4gIH1cbiAgcmV0dXJuIHZhbGlkYXRpb247XG59XG5leHBvcnQgZnVuY3Rpb24gbmF2aWdhdGVXaXRoVXNlclByZWZlcmVuY2UocGFnZTogc3RyaW5nLCBwYXJhbXM/OiBhbnksIG92ZXJyaWRlVXNlclNldHRpbmc6IGJvb2xlYW4gPSBmYWxzZSwgdGFyZ2V0PzogRUdyaWRsaW5rKSB7XG4gIGxldCBmaW5hbFRhcmdldCA9IEVHcmlkbGluay5CTEFOSztcbiAgaWYgKCFvdmVycmlkZVVzZXJTZXR0aW5nKSB7XG4gICAgY29uc3QgdXNlclNldHRpbmcgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcIlVzZXJTZXR0aW5nXCIpO1xuICAgIGlmICh1c2VyU2V0dGluZykge1xuICAgICAgY29uc3QgcGFyc2VkU2V0dGluZyA9IEpTT04ucGFyc2UodXNlclNldHRpbmcpO1xuICAgICAgZmluYWxUYXJnZXQgPSBwYXJzZWRTZXR0aW5nPy52YWx1ZSA9PT0gXCJvcGVuTGlua0luQ3VycmVudFRhYlwiID8gRUdyaWRsaW5rLlNFTEYgOiBFR3JpZGxpbmsuQkxBTks7XG4gICAgfVxuICB9IGVsc2UgaWYgKHRhcmdldCkge1xuICAgIGZpbmFsVGFyZ2V0ID0gdGFyZ2V0O1xuICB9XG5cbiAgY29uc3QgdXJsID0gdGhpcy5yb3V0ZXIuY3JlYXRlVXJsVHJlZShbcGFnZV0sIHsgcXVlcnlQYXJhbXM6IHBhcmFtcz8ucXVlcnlQYXJhbXMgfSkudG9TdHJpbmcoKTtcbiAgY29uc3QgYW5jaG9yID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICBhbmNob3IuaHJlZiA9IHVybDtcbiAgYW5jaG9yLnRhcmdldCA9IGZpbmFsVGFyZ2V0O1xuICBhbmNob3IuY2xpY2soKTtcbn1cbi8qICNlbmRyZWdpb24gKi9cbiJdfQ==
|