@churchillliving/se-ui-toolkit 6.53.849 → 6.53.851
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.
|
@@ -624,7 +624,7 @@ export function findKeysAndValue(data, record) {
|
|
|
624
624
|
valueKey = data[dataKey]?.toString()?.replace("{", "")?.replace("}", "");
|
|
625
625
|
}
|
|
626
626
|
let key = Object.keys(record).find((key) => valueContainsKey ? (valueKey.toLowerCase() === key.toLowerCase()) : (dataKey.toLowerCase() === key.toLowerCase()));
|
|
627
|
-
if (key && key.length > 0) {
|
|
627
|
+
if ((key && key.length > 0 && record[key]) || record[key] === false) {
|
|
628
628
|
setDataFromRecord = true;
|
|
629
629
|
data = { ...data, [dataKey]: record[key] };
|
|
630
630
|
}
|
|
@@ -1052,4 +1052,4 @@ export function calendarMinMaxValue(item, value, index) {
|
|
|
1052
1052
|
return validation;
|
|
1053
1053
|
}
|
|
1054
1054
|
/* #endregion */
|
|
1055
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbGl0aWVzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zZS11aS10b29sa2l0L3NyYy9saWIvc2VydmljZXMvdXRpbGl0aWVzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRzdDLE9BQU8sRUFDTCxXQUFXLEVBQ1gsWUFBWSxFQUNaLFVBQVUsRUFDVixVQUFVLEVBQ1YsU0FBUyxHQU1WLE1BQU0sc0JBQXNCLENBQUM7QUFFOUIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUvQiw0QkFBNEI7QUFFNUI7Ozs7Ozs7R0FPRztBQUVGLElBQUksU0FBUyxHQUFHLElBQUksT0FBTyxFQUFPLENBQUM7QUFDbkMsSUFBSSxZQUFZLEdBQUcsSUFBSSxPQUFPLEVBQU8sQ0FBQztBQUN0QyxJQUFJLFNBQVMsR0FBRyxJQUFJLE9BQU8sRUFBTyxDQUFDO0FBQ25DLElBQUksV0FBVyxHQUFHLElBQUksT0FBTyxFQUFPLENBQUM7QUFFdEMsTUFBTSxVQUFVLHNCQUFzQixDQUFDLEVBQU8sRUFBRSxJQUFTLEVBQUUsYUFBbUI7SUFDNUUsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLENBQUMsQ0FBQztBQUM5QyxDQUFDO0FBRUQsTUFBTSxVQUFVLGtCQUFrQixDQUFDLFdBQWdCO0lBQ2pELFlBQVksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDakMsQ0FBQztBQUVELE1BQU0sVUFBVSxvQkFBb0I7SUFDbEMsT0FBTyxZQUFZLENBQUMsWUFBWSxFQUFFLENBQUM7QUFDckMsQ0FBQztBQUVELE1BQU0sVUFBVSx3QkFBd0I7SUFDdEMsT0FBTyxTQUFTLENBQUMsWUFBWSxFQUFFLENBQUM7QUFDbEMsQ0FBQztBQUVELE1BQU0s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O1lBQzFCLFFBQVEsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBQzlCLENBQUMsQ0FBQztRQUVGLElBQUksUUFBUSxDQUFDLGNBQWMsQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDLEVBQUU7WUFDL0MsUUFBUSxDQUFDLGNBQWMsQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDLENBQUMsV0FBVyxHQUFHLGFBQWEsQ0FBQztTQUN6RTthQUFNO1lBQ0wsS0FBSyxDQUFDLFdBQVcsR0FBRyxhQUFhLENBQUM7U0FDbkM7SUFDSCxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDUixDQUFDO0FBQ0wsTUFBTSxVQUFVLG1CQUFtQixDQUFDLElBQVMsRUFBQyxLQUFVLEVBQUUsS0FBSztJQUM3RCxJQUFJLFVBQVUsR0FBVyxPQUFPLENBQUM7SUFDakMsSUFBSSxTQUFTLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUM3RCxJQUFJLFdBQVcsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNsQyxJQUFJLFNBQVMsQ0FBQyxPQUFPLEVBQUUsR0FBRyxXQUFXLENBQUMsT0FBTyxFQUFFLEVBQUM7UUFDOUMsVUFBVSxHQUFHLFNBQVMsQ0FBQztLQUN4QjtTQUNJLElBQUksU0FBUyxDQUFDLE9BQU8sRUFBRSxHQUFHLFdBQVcsQ0FBQyxPQUFPLEVBQUUsRUFBQztRQUNuRCxVQUFVLEdBQUcsU0FBUyxDQUFDO0tBQ3hCO0lBQ0QsT0FBTyxVQUFVLENBQUM7QUFDcEIsQ0FBQztBQUNELGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGZvcm1hdERhdGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5pbXBvcnQgeyBJRGljdGlvbmFyeSwgSUZpbHRlckRpY3Rpb25hcnkgfSBmcm9tICcuLi9tb2RlbHMvY29tbW9uLm1vZGVsJztcbmltcG9ydCB7XG4gIEVGb3JtYXRUeXBlLFxuICBFRm9ybUNvbnRyb2wsXG4gIEVIeXBlcmxpbmssXG4gIEVNYXRjaE1vZGUsXG4gIEVPcGVyYXRvcixcbiAgSUR5bmFtaWNDYXJkLFxuICBJRHluYW1pY0Zvcm0sXG4gIElGb3JtYXQsXG4gIElGb3JtRmllbGQsXG4gIElGb3JtU2VjdGlvbixcbn0gZnJvbSAnLi4vbW9kZWxzL2Zvcm0ubW9kZWwnO1xuaW1wb3J0IHsgYWRkR2xvYmFsRmlsdGVyLCBFR3JpZENvbHVtblR5cGUsIElHbG9iYWxGaWx0ZXIsIElHcmlkQ29sdW1uLCBJR3JpZEZpbHRlciB9IGZyb20gJy4uL21vZGVscy9ncmlkLm1vZGVsJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuLyogI3JlZ2lvbiBwdWJsaWMgbWV0aG9kcyAqL1xuXG4vKipcbiAqXG4gKiBAcGFyYW0gdmFsdWUgOiBhbnlcbiAqIEZ1bmN0aW9uIHJlY2VpdmVzIHRoZSB2YWx1ZSBhbmQgZXhwZWN0cyB0aGUgdmFsdWUgdG8gYmUgZm9ybWF0ZWQuXG4gKiBEbyBub3QgdXNlIGZhdCBhcnJvdyBmdW5jdGlvbiBhcyB0aGV5IGRvIG5vdCBwcmVzZXJ2ZSB0aGUgY29udGV4dC5cbiAqIHRoaXMudmFsdWUgcmVmZXJzIHRvIHRoZSB2YWx1ZSBvZiBJRm9ybUZpZWxkIE9iamVjdFxuICogTW9kaWZ5IHRoaXMudmFsdWUgZGlyZWN0bHkgdG8gcmVjZWl2ZSBlZmZlY3RcbiAqL1xuXG4gdmFyIGZvcm1zdGF0ZSA9IG5ldyBTdWJqZWN0PGFueT4oKTtcbiB2YXIgY29sdW1uc1N0YXRlID0gbmV3IFN1YmplY3Q8YW55PigpO1xuIHZhciBjYXJkU3RhdGUgPSBuZXcgU3ViamVjdDxhbnk+KCk7XG4gdmFyIHJvdXRlQ2hhbmdlID0gbmV3IFN1YmplY3Q8YW55PigpO1xuXG5leHBvcnQgZnVuY3Rpb24gY2hhbmdlRHluYW1pY0Zvcm1TdGF0ZShpZDogYW55LCBkYXRhOiBhbnksIGxvYWRDb21wb25lbnQ/OiBhbnkpIHtcbiAgZm9ybXN0YXRlLm5leHQoeyBpZCwgZGF0YSwgbG9hZENvbXBvbmVudCB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNoYW5nZUNvbHVtbnNTdGF0ZShwYWdlU2V0dGluZzogYW55KSB7XG4gIGNvbHVtbnNTdGF0ZS5uZXh0KHBhZ2VTZXR0aW5nKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG9uQ29sdW1uc1N0YXRlQ2hhbmdlKCkge1xuICByZXR1cm4gY29sdW1uc1N0YXRlLmFzT2JzZXJ2YWJsZSgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gb25EeW5hbWljRm9ybVN0YXRlQ2hhbmdlKCkge1xuICByZXR1cm4gZm9ybXN0YXRlLmFzT2JzZXJ2YWJsZSgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gb25Sb3V0ZUNoYW5nZUV2ZW50KCkge1xuICByZXR1cm4gcm91dGVDaGFuZ2UuYXNPYnNlcnZhYmxlKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByb3V0ZUNoYW5nZUV2ZW50KCkge1xuICByb3V0ZUNoYW5nZS5uZXh0KCk7XG59XG5cbiBleHBvcnQgZnVuY3Rpb24gb25EeW5hbWljQ2FyZFN0YXRlQ2hhbmdlKCkge1xuICByZXR1cm4gY2FyZFN0YXRlLmFzT2JzZXJ2YWJsZSgpO1xuIH1cblxuIGV4cG9ydCBmdW5jdGlvbiBjaGFuZ2VEeW5hbWljQ2FyZFN0YXRlKGRhdGE6IGFueSkge1xuICBjYXJkU3RhdGUubmV4dCh7IGRhdGEgfSk7XG59XG5cbiBleHBvcnQgZnVuY3Rpb24gY2xvc2VJRnJhbWUoKXtcbiAgbGV0IGNsb3NlID0gd2luZG93LnBhcmVudC5kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcucC1kaWFsb2ctaGVhZGVyLWljb24nKWFzIEhUTUxFbGVtZW50XG4gIGlmKGNsb3NlKSB7XG4gICAgY2xvc2UuY2xpY2soKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9EZWNpbWFsKHZhbHVlOiBhbnkpOiBhbnkge1xuICBpZiAodmFsdWUpIHtcbiAgICByZXR1cm4gcGFyc2VGbG9hdCh2YWx1ZS50b1N0cmluZygpKS50b0ZpeGVkKDIpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b0Jvb2xlYW4odmFsdWU6IGFueSkge1xuICByZXR1cm4gdmFsdWU/LnRvTG93ZXJDYXNlKCkgPT09ICd5JyA/IHRydWUgOiBmYWxzZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvU2hvcnREYXRlKHZhbHVlOiBhbnksIGZvcm1hdD86IElGb3JtYXQpIHtcbiAgaWYgKHZhbHVlICYmIHZhbHVlICE9PSAnJykge1xuICAgIGlmIChcbiAgICAgIGZvcm1hdCAmJlxuICAgICAgKGZvcm1hdC50eXBlID09PSBFRm9ybWF0VHlwZS5MT05HREFURSB8fFxuICAgICAgICBmb3JtYXQudHlwZSA9PT0gRUZvcm1hdFR5cGUuTUVESVVNREFURSlcbiAgICApIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZvcm1hdERhdGUodmFsdWUsICdNTS9kZC95eXl5JywgJ2VuLVVTJyk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b1Nob3J0RGF0ZVRpbWUodmFsdWU6IGFueSwgZm9ybWF0PzogSUZvcm1hdCkge1xuICBpZiAodmFsdWUgJiYgdmFsdWUgIT09ICcnICYmIHZhbHVlPy50b1N0cmluZygpICE9IFwiSW52YWxpZCBEYXRlXCIpIHtcbiAgICBpZiAoXG4gICAgICBmb3JtYXQgJiZcbiAgICAgIChmb3JtYXQudHlwZSA9PT0gRUZvcm1hdFR5cGUuTE9OR0RBVEUgfHxcbiAgICAgICAgZm9ybWF0LnR5cGUgPT09IEVGb3JtYXRUeXBlLk1FRElVTURBVEUpXG4gICAgKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmb3JtYXREYXRlKHZhbHVlLCAnTU0vZGQveXl5eSBoaDptbSBhJywgJ2VuLVVTJyk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXREaWFsb2dEYXRhKGNvbHVtbnM6SUdyaWRDb2x1bW5bXSwgZmllbGROYW1lOnN0cmluZywgdmFsdWU6YW55KXtcbiAgY29sdW1ucz8uZm9yRWFjaCgoY29sdW1uKT0+e1xuICAgICAgaWYoY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpID09PSBmaWVsZE5hbWU/LnRvTG93ZXJDYXNlKCkgJiYgY29sdW1uLmNvbXBvbmVudCl7XG4gICAgICAgIGxldCBrZXlzPU9iamVjdC5rZXlzKHZhbHVlKTtcbiAgICAgICAga2V5cy5mb3JFYWNoKChrZXkpPT57XG4gICAgICAgICAgY29sdW1uLmRhdGEuZGF0YT17Li4uY29sdW1uLmRhdGE/LmRhdGEsIFtrZXldOnZhbHVlW2tleV19O1xuICAgICAgICB9KVxuICAgICAgfVxuICB9KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9UcmltKHRleHQ6IGFueSkge1xuICBpZiAodHlwZW9mIHRleHQgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHRleHQudHJpbSgpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB0ZXh0O1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRNYXRjaEtleShvYmo6IGFueSwgcHJvcE5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmICghb2JqIHx8ICFwcm9wTmFtZSkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGxldCBtYXRjaGVkS2V5ID0gJyc7XG4gIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICBvYmouZm9yRWFjaCgocm93KSA9PiB7XG4gICAgICBjb25zdCBrZXlzOiBhbnlbXSA9IE9iamVjdC5rZXlzKHJvdyk7XG4gICAgICBpZiAoIW1hdGNoZWRLZXkgfHwgbWF0Y2hlZEtleS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgbWF0Y2hlZEtleSA9IGtleXMuZmluZChcbiAgICAgICAgICAoeCkgPT4geC50b0xvd2VyQ2FzZSgpID09PSBwcm9wTmFtZS50b0xvd2VyQ2FzZSgpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3Qga2V5czogYW55W10gPSBPYmplY3Qua2V5cyhvYmopO1xuICAgIG1hdGNoZWRLZXkgPSBrZXlzLmZpbmQoKHgpID0+IHgudG9Mb3dlckNhc2UoKSA9PT0gcHJvcE5hbWUudG9Mb3dlckNhc2UoKSk7XG4gIH1cblxuICByZXR1cm4gbWF0Y2hlZEtleTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdEZvcm1GaWVsZFZhbHVlKGZvcm1GaWVsZDogSUZvcm1GaWVsZCwgdmFsdWU6IGFueSk6IGFueSB7XG4gIGxldCBmb3JtYXR0ZWRWYWx1ZTogYW55ID0gdmFsdWU7XG4gIGlmIChmb3JtRmllbGQuZm9ybWF0KSB7XG4gICAgc3dpdGNoIChmb3JtRmllbGQuZm9ybWF0LnR5cGUpIHtcbiAgICAgIGNhc2UgRUZvcm1hdFR5cGUuREVDSU1BTDpcbiAgICAgICAgZm9ybWF0dGVkVmFsdWUgPSB0b0RlY2ltYWwodmFsdWUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUZvcm1hdFR5cGUuQk9PTEVBTl9ZTjpcbiAgICAgICAgZm9ybWF0dGVkVmFsdWUgPSB0b0Jvb2xlYW4odmFsdWUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUZvcm1hdFR5cGUuU0hPUlREQVRFOlxuICAgICAgICBmb3JtYXR0ZWRWYWx1ZSA9IHRvU2hvcnREYXRlKHZhbHVlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVGb3JtYXRUeXBlLkNVU1RPTTpcbiAgICAgICAgaWYgKGZvcm1GaWVsZC5mb3JtYXQuZm9ybWF0dGVyKSB7XG4gICAgICAgICAgZm9ybWF0dGVkVmFsdWUgPSBmb3JtRmllbGQuZm9ybWF0LmZvcm1hdHRlcih2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZvcm1hdHRlZFZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0Rm9ybUZpZWxkIChcbiAgeyBmb3JtU2VjdGlvbnMgfTogSUR5bmFtaWNGb3JtLFxuICBmb3JtRmllbGRPYmo6IElGb3JtRmllbGRcbikge1xuICByZXR1cm4gZm9ybVNlY3Rpb25zPy5tYXAoKHNlY3Rpb24pID0+IHtcbiAgICByZXR1cm4gKHNlY3Rpb24uZmllbGRzID0gc2VjdGlvbi5maWVsZHMubWFwKChmb3JtRmllbGQ6IElGb3JtRmllbGQpID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgZm9ybUZpZWxkLmZpZWxkPy50b0xvd2VyQ2FzZSgpID09PSBmb3JtRmllbGRPYmouZmllbGQ/LnRvTG93ZXJDYXNlKCkgfHxcbiAgICAgICAgKGZvcm1GaWVsZC5sYWJlbCAmJiBmb3JtRmllbGQubGFiZWwgPT09IGZvcm1GaWVsZE9iai5sYWJlbClcbiAgICAgICkge1xuICAgICAgICBmb3JtRmllbGQgPSBmb3JtRmllbGRPYmo7XG4gICAgICB9XG4gICAgICByZXR1cm4gZm9ybUZpZWxkO1xuICAgIH0pKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRIeXBlcmxpbmtDb21wb25lbnREYXRhIChcbiAgeyBmb3JtU2VjdGlvbnMgfTogSUR5bmFtaWNGb3JtLFxuICBsYWJlbDogc3RyaW5nLFxuICBkYXRhOiBhbnlcbil7XG4gIGZvcm1TZWN0aW9ucz8uZm9yRWFjaCgoc2VjdGlvbikgPT4ge1xuICAgIGxldCBmaWVsZD1zZWN0aW9uLmZpZWxkcy5maW5kKChmaWVsZCk9PiBmaWVsZC5sYWJlbCAmJiBmaWVsZC5sYWJlbD09PWxhYmVsKVxuICAgaWYoZmllbGQgJiYgZmllbGQuaHlwZXJsaW5rKSBmaWVsZC5oeXBlcmxpbmsucGFyYW1zID0gZGF0YTtcbn0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0QXV0b0NvbXBsZXRlRGF0YShcbiAgdmFsdWVzOiBhbnlbXSxcbiAgdW5pcXVlSWQ6IGFueSxcbiAgbGFiZWxLZXk6IHN0cmluZyxcbiAgVmFsdWVLZXk6IHN0cmluZyxcbil7XG4gIGlmKHZhbHVlcz8ubGVuZ3RoID4gMCl7XG4gICAgdmFsdWVzID0gdmFsdWVzPy5tYXAoKHJvd1ZhbHVlKSA9PiAoe1tsYWJlbEtleV06IHJvd1ZhbHVlLCBbVmFsdWVLZXldOiB1bmlxdWVJZH0pKTtcbiAgfVxuICByZXR1cm4gdmFsdWVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0TG9va3VwRGF0YShcbiAgeyBmb3JtU2VjdGlvbnMgfTogSUR5bmFtaWNGb3JtLFxuICBmaWVsZDogc3RyaW5nLFxuICBkYXRhOiBhbnlcbikge1xuICBmb3JtU2VjdGlvbnM/Lm1hcCgoc2VjdGlvbjogSUZvcm1TZWN0aW9uKSA9PiB7XG4gICAgc2VjdGlvbi5maWVsZHMubWFwKChmb3JtRmllbGQ6IGFueSkgPT4ge1xuICAgICAgaWYgKGZvcm1GaWVsZC5maWVsZD8udG9Mb3dlckNhc2UoKSA9PT0gZmllbGQ/LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGZvcm1GaWVsZC5sYWJlbCAmJlxuICAgICAgICAgIGZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2wgJiZcbiAgICAgICAgICBmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sLmxvb2t1cENvbnRyb2wgJiZcbiAgICAgICAgICBmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sLmxvb2t1cENvbnRyb2wuZGF0YSAmJlxuICAgICAgICAgIGRhdGFcbiAgICAgICAgKSB7XG4gICAgICAgICAgZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbC5sb29rdXBDb250cm9sLmRhdGEuZGF0YSA9IGRhdGE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZvcm1GaWVsZC5sb29rdXBDb250cm9sICYmIGZvcm1GaWVsZC5sb29rdXBDb250cm9sLmRhdGEgJiYgZGF0YSkge1xuICAgICAgICAgIGZvcm1GaWVsZC5sb29rdXBDb250cm9sLmRhdGEuZGF0YSA9IGRhdGE7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG4gIHJldHVybiBmb3JtU2VjdGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRTaWRlYmFyTGlua1BhcmFtVmFsdWVzKGxpbms6IHN0cmluZywgcGFyYW1zOiBhbnlbXSk6IHN0cmluZyB7XG4gIGxldCBuZXdMaW5rOiBzdHJpbmcgPSBsaW5rO1xuICBpZiAocGFyYW1zICYmIHBhcmFtcy5sZW5ndGggPiAwKSB7XG4gICAgcGFyYW1zLm1hcCgocGFyYW0pID0+IHtcbiAgICAgIGNvbnN0IHVybCA9IHBhcmFtLm5hbWUgPyAne3snICsgcGFyYW0ubmFtZSArICd9fScgOiAnJztcbiAgICAgIGlmIChuZXdMaW5rLmxvY2FsZUNvbXBhcmUodXJsKSkge1xuICAgICAgICBuZXdMaW5rID0gbmV3TGluay5yZXBsYWNlKG5ldyBSZWdFeHAodXJsLCAnaWcnKSwgdG9UcmltKHBhcmFtLnZhbHVlKSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIG5ld0xpbms7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhZGROZXdGaWVsZEluRm9ybShkeW5hbWljRm9ybTogSUR5bmFtaWNGb3JtLCBzZWN0aW9uTmFtZTpzdHJpbmcsIGZvcm1GaWVsZDpJRm9ybUZpZWxkKXtcbiAgY29uc3Qgc2VjdGlvbiA9IGR5bmFtaWNGb3JtPy5mb3JtU2VjdGlvbnM/LmZpbmQoKHNlY3Rpb24pPT4gc2VjdGlvbi5uYW1lID09PSBzZWN0aW9uTmFtZSk7XG4gIGlmKHNlY3Rpb24pe1xuICAgIHNlY3Rpb24uZmllbGRzLnB1c2goZm9ybUZpZWxkKTtcbiAgfVxuICByZXR1cm4gZHluYW1pY0Zvcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRGb3JtRmllbGRzKFxuICB7IGZvcm1TZWN0aW9ucyB9OiBJRHluYW1pY0Zvcm0sXG4gIGZvcm1GaWVsZHM6IElGb3JtRmllbGRbXVxuKSB7XG4gIHJldHVybiBmb3JtU2VjdGlvbnM/Lm1hcCgoc2VjdGlvbikgPT4ge1xuICAgIHJldHVybiAoc2VjdGlvbi5maWVsZHMgPSBzZWN0aW9uLmZpZWxkcy5tYXAoKGZvcm1GaWVsZCkgPT4ge1xuICAgICAgbGV0IG1hdGNoZWRGaWVsZCA9IGZvcm1GaWVsZHMuZmluZChcbiAgICAgICAgKHgpID0+IHguZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT0gZm9ybUZpZWxkLmZpZWxkPy50b0xvd2VyQ2FzZSgpXG4gICAgICApO1xuICAgICAgaWYgKG1hdGNoZWRGaWVsZCkge1xuICAgICAgICBmb3JtRmllbGQgPSBtYXRjaGVkRmllbGQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gZm9ybUZpZWxkO1xuICAgIH0pKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRHbG9iYWxGaWx0ZXJzKFxuICBnbG9iYWxGaWx0ZXJzOiBhZGRHbG9iYWxGaWx0ZXJbXSxcbiAgZmllbGQ6IHN0cmluZyxcbikge1xuICBsZXQgZm9ybUZpZWxkT2JqOiBhbnk7XG4gIGdsb2JhbEZpbHRlcnMubWFwKChmaWx0ZXIpPT57XG4gICAgaWYgKGZpbHRlci5maWVsZD8udG9Mb3dlckNhc2UoKSA9PT0gZmllbGQ/LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgIGZvcm1GaWVsZE9iaiA9IGZpbHRlcjtcbiAgICAgIH1cbiAgfSk7XG4gIHJldHVybiBmb3JtRmllbGRPYmo7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGb3JtRmllbGRzKFxuICB7IGZvcm1TZWN0aW9ucyB9OiBJRHluYW1pY0Zvcm0sXG4gIGZvcm1Db250cm9sOiBFRm9ybUNvbnRyb2xcbik6IElGb3JtRmllbGRbXSB7XG4gIGxldCBmb3JtRmllbGRzOiBJRm9ybUZpZWxkW10gPSBbXTtcbiAgZm9ybVNlY3Rpb25zPy5mb3JFYWNoKChzZWN0aW9uKSA9PiB7XG4gICAgc2VjdGlvbi5maWVsZHMuZm9yRWFjaCgoZm9ybUZpZWxkKSA9PiB7XG4gICAgICBpZiAoZm9ybUZpZWxkLmNvbnRyb2wgPT09IGZvcm1Db250cm9sKSB7XG4gICAgICAgIGlmICh0eXBlb2YoZm9ybUZpZWxkLnZhbHVlKSA9PT0gJ29iamVjdCcgJiYgZm9ybUZpZWxkLnZhbHVlPy50ZXh0ICYmIHR5cGVvZihmb3JtRmllbGQudmFsdWUudGV4dCkgPT09ICdzdHJpbmcnKVxuICAgICAgICB7XG4gICAgICAgICAgIGZvcm1GaWVsZC52YWx1ZSA9IGZvcm1GaWVsZC52YWx1ZS50ZXh0LnRyaW0oKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChmb3JtRmllbGQudmFsdWUgJiYgdHlwZW9mKGZvcm1GaWVsZC52YWx1ZSkgPT09ICdzdHJpbmcnKVxuICAgICAgICB7XG4gICAgICAgICAgZm9ybUZpZWxkLnZhbHVlID0gZm9ybUZpZWxkLnZhbHVlLnRyaW0oKTtcbiAgICAgICAgfVxuICAgICAgICBmb3JtRmllbGRzLnB1c2goZm9ybUZpZWxkKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG4gIHJldHVybiBmb3JtRmllbGRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Rm9ybUZpZWxkKFxuICB7IGZvcm1TZWN0aW9ucyB9OiBJRHluYW1pY0Zvcm0sXG4gIGZpZWxkOiBzdHJpbmdcbik6IElGb3JtRmllbGQge1xuICBsZXQgZm9ybUZpZWxkT2JqOiBhbnk7XG4gIGZvcm1TZWN0aW9ucz8uZm9yRWFjaCgoc2VjdGlvbikgPT4ge1xuICAgIHNlY3Rpb24uZmllbGRzLmZvckVhY2goKGZvcm1GaWVsZCkgPT4ge1xuICAgICAgaWYgKGZvcm1GaWVsZC5maWVsZD8udG9Mb3dlckNhc2UoKSA9PT0gZmllbGQ/LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgZm9ybUZpZWxkT2JqID0gZm9ybUZpZWxkO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbiAgcmV0dXJuIGZvcm1GaWVsZE9iajtcbn1cblxuLy8gdGhpcyBmdW5jdGlvbiBpcyBhbHdheXMgcmV0dXJuIGEgdmFsdWUgb2YgdGhlIGZpZWxkLiBJZiByZXR1cm5EaXNwbGF5RmllbGRWYWx1ZSBpcyB0cnVlIGFuZCBkaXNwbGF5RmllbGRcbi8vIGV4aXN0IGluIHRoZSBmaWVsZCB0aGVuIGFsd2F5cyByZXR1cm4gYSBkaXNwbGF5RmllbGQgdmFsdWUuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Rm9ybUZpZWxkVmFsdWUoXG4gIHsgZm9ybVNlY3Rpb25zIH06IElEeW5hbWljRm9ybSxcbiAgZmllbGQ6IHN0cmluZyxcbiAgcmV0dXJuRGlzcGxheUZpZWxkVmFsdWU6Ym9vbGVhbiA9IGZhbHNlXG4pIHtcbiAgbGV0IHZhbHVlO1xuICBmb3IgKGNvbnN0IHNlY3Rpb24gb2YgZm9ybVNlY3Rpb25zIGFzIGFueSkge1xuICAgIHNlY3Rpb24uZmllbGRzLmZvckVhY2goKGZvcm1GaWVsZDogYW55KSA9PiB7XG4gICAgICBpZiAoZm9ybUZpZWxkLmZpZWxkPy50b0xvd2VyQ2FzZSgpID09PSBmaWVsZD8udG9Mb3dlckNhc2UoKSkge1xuICAgICAgICBsZXQgaXNWYWxpZCA9IHR5cGVvZiBmb3JtRmllbGQudmFsdWUgPT09ICdvYmplY3QnICYmIGZvcm1GaWVsZC5jb250cm9sICE9PSBFRm9ybUNvbnRyb2wuQ0FMRU5EQVIgJiYgcmV0dXJuRGlzcGxheUZpZWxkVmFsdWU7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAoZm9ybUZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5MT09LVVBfSU5QVVQgfHwgZm9ybUZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5JTlBVVCkgJiZcbiAgICAgICAgICBmb3JtRmllbGQuZGlzcGxheUZpZWxkXG4gICAgICAgICkge1xuICAgICAgICAgIHZhbHVlID0gaXNWYWxpZCA/IGZvcm1GaWVsZC52YWx1ZT8udGV4dCA6IGZvcm1GaWVsZC52YWx1ZT8udmFsdWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFsdWUgPSBpc1ZhbGlkXG4gICAgICAgICAgICA/IGZvcm1GaWVsZC52YWx1ZT8udGV4dFxuICAgICAgICAgICAgOiB0eXBlb2YgZm9ybUZpZWxkLnZhbHVlID09PSAnb2JqZWN0JyAmJiBmb3JtRmllbGQuY29udHJvbCAhPT0gRUZvcm1Db250cm9sLkNBTEVOREFSICYmIGZvcm1GaWVsZC5jb250cm9sICE9PSBFRm9ybUNvbnRyb2wuTVVMVElTRUxFQ1RcbiAgICAgICAgICAgID8gZm9ybUZpZWxkLnZhbHVlPy52YWx1ZVxuICAgICAgICAgICAgOiBmb3JtRmllbGQudmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICByZXR1cm4gdmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGb3JtRmllbGRWYWx1ZUFzU3RyaW5nKGR5bmFtaWNGb3JtOklEeW5hbWljRm9ybSxmaWVsZDpzdHJpbmcpOnN0cmluZ3tcbiAgbGV0IHZhbHVlOmFueSA9IGdldEZvcm1GaWVsZFZhbHVlKGR5bmFtaWNGb3JtLGZpZWxkLCB0cnVlKTtcbiAgaWYgKHZhbHVlKXtcbiAgICB2YWx1ZSA9IHZhbHVlLnRvU3RyaW5nKCk7XG4gICB9XG4gICByZXR1cm4gdmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZWN0aW9uRmllbGRWYWx1ZShcbiAgZm9ybVNlY3Rpb25zOiBJRm9ybVNlY3Rpb25bXSxcbiAgZmllbGQ6IHN0cmluZ1xuKSB7XG4gIGxldCBmb3JtOiBJRHluYW1pY0Zvcm0gPSB7IGZvcm1TZWN0aW9ucyB9O1xuICByZXR1cm4gZ2V0Rm9ybUZpZWxkVmFsdWUoZm9ybSwgZmllbGQsIHRydWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0U2F2ZUZvcm1WYWx1ZXMoXG4gIGZvcm1TZWN0aW9uczogSUZvcm1TZWN0aW9uW10sXG4gIHRhYmxlcz86IHN0cmluZ1tdXG4pIHtcbiAgbGV0IHJlc3BvbnNlOiBhbnkgPSB7fTtcbiAgaWYgKHRhYmxlcyAmJiB0YWJsZXMubGVuZ3RoID4gMCkge1xuICAgIHRhYmxlcy5mb3JFYWNoKCh0YWJsZU5hbWUpID0+IHtcbiAgICAgIGZvcm1TZWN0aW9ucy5mb3JFYWNoKChmb3JtU2VjdGlvbikgPT4ge1xuICAgICAgICBjb25zdCBzZWN0aW9uRmllbGRzID0gZm9ybVNlY3Rpb24uZmllbGRzPy5maWx0ZXIoeCA9PiB4LmNvbnRyb2wgIT09IEVGb3JtQ29udHJvbC5DQVJEKTtcblxuICAgICAgICBzZWN0aW9uRmllbGRzPy5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHRhYmxlID0gZmllbGQudGFibGVzPy5tYXAoKHRhYmxlKSA9PiB0YWJsZS50b0xvd2VyQ2FzZSgpKTtcblxuICAgICAgICAgIGlmICh0YWJsZSAmJiB0YWJsZS5pbmNsdWRlcyh0YWJsZU5hbWUudG9Mb3dlckNhc2UoKSkpIHtcbiAgICAgICAgICAgIGlmICghcmVzcG9uc2VbdGFibGVOYW1lXSkge1xuICAgICAgICAgICAgICByZXNwb25zZVt0YWJsZU5hbWVdID0ge307XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChmaWVsZC5maWVsZCAmJiBmaWVsZC5maWVsZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIHJlc3BvbnNlW3RhYmxlTmFtZV1bZmllbGQuZmllbGRdID0gZm9ybWF0Rm9ybUZpZWxkQ1ZhbHVlKGZpZWxkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgZm9ybVNlY3Rpb25zLmZvckVhY2goKGZvcm1TZWN0aW9uKSA9PiB7XG4gICAgICBjb25zdCBzZWN0aW9uRmllbGRzID0gZm9ybVNlY3Rpb24uZmllbGRzPy5maWx0ZXIoeCA9PiB4LmNvbnRyb2wgIT09IEVGb3JtQ29udHJvbC5DQVJEKTtcbiAgICAgICAgc2VjdGlvbkZpZWxkcz8uZm9yRWFjaCgoZmllbGQpID0+IHtcbiAgICAgICAgICBpZiAoZmllbGQuZmllbGQgJiYgZmllbGQuZmllbGQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcmVzcG9uc2VbZmllbGQuZmllbGRdID0gZm9ybWF0Rm9ybUZpZWxkQ1ZhbHVlKGZpZWxkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHJlc3BvbnNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0U2F2ZUNhcmRWYWx1ZXMoXG4gIGZvcm1TZWN0aW9uczogSUZvcm1TZWN0aW9uW10sXG4gIHRhYmxlcz86IHN0cmluZ1tdXG4pIHtcbiAgbGV0IHZhbHVlczogSUZvcm1GaWVsZFtdID0gW107XG4gIGZvcm1TZWN0aW9ucz8uZm9yRWFjaCgoc2VjdGlvbikgPT4ge1xuICAgIHNlY3Rpb24uZmllbGRzPy5mb3JFYWNoKChmaWVsZDogYW55KSA9PiB7XG4gICAgICBpZiAoZmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkNBUkQgJiYgZmllbGQuY2FyZC5kYXRhKSB7XG4gICAgICAgIGZpZWxkLmNhcmQuZGF0YS5mb3JFYWNoKChjYXJkRGF0YTogYW55KSA9PiB7XG4gICAgICAgICAgaWYgKGNhcmREYXRhLmR5bmFtaWNGb3JtLmZvcm1TZWN0aW9ucykge1xuICAgICAgICAgICAgdmFsdWVzLnB1c2goXG4gICAgICAgICAgICAgIHNldFNhdmVGb3JtVmFsdWVzKGNhcmREYXRhLmR5bmFtaWNGb3JtLmZvcm1TZWN0aW9ucywgdGFibGVzKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbiAgcmV0dXJuIHZhbHVlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEVkaXRGb3JtRmllbGRzKGRhdGE6IGFueSwgZHluYW1pY0Zvcm06IElEeW5hbWljRm9ybSkge1xuICBpZiAoZGF0YSAmJiBkYXRhLmxlbmd0aCA+IDAgJiYgQXJyYXkuaXNBcnJheShkYXRhKSkge1xuICAgIGRhdGEuZm9yRWFjaCgoZGF0YVJvdykgPT4ge1xuICAgICAgc2V0RWRpdEZvcm1GaWVsZHNJbmZvKGRhdGFSb3csIGR5bmFtaWNGb3JtLCBkYXRhKTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBzZXRFZGl0Rm9ybUZpZWxkc0luZm8oZGF0YSwgZHluYW1pY0Zvcm0pO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRGaWx0ZXIoXG4gIGZpZWxkOiBzdHJpbmcsXG4gIHZhbHVlOiBhbnksXG4gIG1hdGNoTW9kZTogRU1hdGNoTW9kZSA9IEVNYXRjaE1vZGUuRVFVQUxTLFxuICBvcGVyYXRvcjogRU9wZXJhdG9yID0gRU9wZXJhdG9yLkFORCxcbikge1xuICBjb25zdCBmaWx0ZXI6IGFueSA9IHtcbiAgICBmaWVsZDogZmllbGQsXG4gICAgbWF0Y2hNb2RlOiBtYXRjaE1vZGUsXG4gICAgb3BlcmF0b3I6IG9wZXJhdG9yLFxuICAgIHZhbHVlOiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmICh2YWx1ZT8udmFsdWUgfHwgdmFsdWU/LnRleHQpID8gdmFsdWU/LnZhbHVlIDogdmFsdWUsXG4gIH07XG4gIHJldHVybiBmaWx0ZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRBbmRGaWx0ZXIoZmllbGQ6IHN0cmluZywgdmFsdWU6IGFueSkge1xuICByZXR1cm4gc2V0RmlsdGVyKGZpZWxkLCB2YWx1ZSwgRU1hdGNoTW9kZS5FUVVBTFMsIEVPcGVyYXRvci5BTkQpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRPcmlnRGF0YUZpZWxkVmFsdWUoZGF0YTogYW55LCBwcm9wTmFtZTogc3RyaW5nKTogYW55IHtcbiAgbGV0IHZhbHVlOiBhbnk7XG4gIGlmIChkYXRhKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YWx1ZSA9IGdldFByb3BlcnR5VmFsdWUoZGF0YVtpXSwgcHJvcE5hbWUpO1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdmFsdWUgPSBnZXRQcm9wZXJ0eVZhbHVlKGRhdGEsIHByb3BOYW1lKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0T3JpZ0RhdGFGaWVsZFZhbHVlQXNTdHJpbmcoXG4gIGRhdGE6IGFueSxcbiAgcHJvcE5hbWU6IHN0cmluZ1xuKTogc3RyaW5nIHtcbiAgbGV0IHZhbHVlID0gZ2V0T3JpZ0RhdGFGaWVsZFZhbHVlKGRhdGEsIHByb3BOYW1lKTtcbiAgaWYgKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRTZWN0aW9uUHJvcFZhbHVlcyhcbiAgeyBmb3JtU2VjdGlvbnMgfTogSUR5bmFtaWNGb3JtLFxuICBzZWN0aW9uTmFtZTogc3RyaW5nLFxuICBwcm9wczogSURpY3Rpb25hcnlbXVxuKSB7XG4gIGZvcm1TZWN0aW9ucz8ubWFwKChzZWN0aW9uKSA9PiB7XG4gICAgaWYgKHNlY3Rpb24ubmFtZT8udG9Mb3dlckNhc2UoKSA9PT0gc2VjdGlvbk5hbWUudG9Mb3dlckNhc2UoKSkge1xuICAgICAgcHJvcHMubWFwKChwcm9wKSA9PiB7XG4gICAgICAgIHJldHVybiBzZXRQcm9wVmFsdWUoc2VjdGlvbiwgcHJvcCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xufVxuXG4vKiAjZW5kcmVnaW9uICovXG5cbi8qICNyZWdpb24gcHJpdmF0ZSBtZXRob2RzICovXG5cbmZ1bmN0aW9uIHNldEVkaXRGb3JtRmllbGRzSW5mbyhkYXRhOiBhbnksIGR5bmFtaWNGb3JtOiBJRHluYW1pY0Zvcm0gfCBJRHluYW1pY0NhcmQsIGFsbERhdGE6IGFueVtdID0gW10pIHtcbiAgaWYgKGRhdGEucmVjb3JkcyAmJiBkYXRhLnJlY29yZHMubGVuZ3RoID4gMCkge1xuICAgIGRhdGEucmVjb3Jkcy5mb3JFYWNoKChyZWNvcmQ6IGFueSkgPT4ge1xuICAgICAgY29uc3Qga2V5czogc3RyaW5nW10gPSBPYmplY3Qua2V5cyhyZWNvcmQpO1xuICAgICAgZHluYW1pY0Zvcm0uZm9ybVNlY3Rpb25zPy5mb3JFYWNoKChmb3JtU2VjdGlvbikgPT4ge1xuICAgICAgICBpZiAoZm9ybVNlY3Rpb24uZmllbGRzKSB7XG4gICAgICAgICAgZm9ybVNlY3Rpb24uZmllbGRzLmZvckVhY2goKGZvcm1GaWVsZDogYW55KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBtYXRjaGVkS2V5OiBhbnkgPSBrZXlzLmZpbmQoXG4gICAgICAgICAgICAgICh4KSA9PiB4LnRvTG93ZXJDYXNlKCkgPT09IGZvcm1GaWVsZC5maWVsZD8udG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgaWYgKG1hdGNoZWRLZXkpIHtcbiAgICAgICAgICAgICAgLy8gc2V0IGxhYmVsIGh5cGVybGlua1xuICAgICAgICAgICAgICBzZXRMYWJlbEh5cGVybGluayhmb3JtRmllbGQsIHJlY29yZCwga2V5cywgYWxsRGF0YSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgZm9ybUZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5IWVBFUkxJTksgJiZcbiAgICAgICAgICAgICAgZm9ybUZpZWxkLmh5cGVybGluayAmJlxuICAgICAgICAgICAgICAoKGZvcm1GaWVsZC5oeXBlcmxpbmsubGlua0lkICYmIGZvcm1GaWVsZC5oeXBlcmxpbmsucGFyYW1zKSB8fFxuICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5oeXBlcmxpbmsubGluaylcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBsZXQgcGFyYW1zID0gZm9ybUZpZWxkLmh5cGVybGluay5wYXJhbXM7XG4gICAgICAgICAgICAgIGxldCBwYXJhbUtleXM6IHN0cmluZ1tdID0gW107XG5cbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICFwYXJhbXMgJiZcbiAgICAgICAgICAgICAgICBmb3JtRmllbGQuaHlwZXJsaW5rLmxpbmsgJiZcbiAgICAgICAgICAgICAgICBmb3JtRmllbGQuaHlwZXJsaW5rLmxpbmsuaW5jbHVkZXMoJ319JylcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcGFyYW1LZXlzID0gZm9ybUZpZWxkLmh5cGVybGluay5saW5rLnNwbGl0KCd9fScpO1xuICAgICAgICAgICAgICAgIHBhcmFtS2V5cyA9IHBhcmFtS2V5cy5tYXAoKHBhcmFtS2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgICBwYXJhbUtleSA9IHBhcmFtS2V5LnJlcGxhY2UoJ3t7JywgJycpLnRyaW0oKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBwYXJhbUtleTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBwYXJhbUtleXMgPSBwYXJhbUtleXMuZmlsdGVyKCh4KSA9PiB4Lmxlbmd0aCA+IDApO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmKHBhcmFtcyl7XG4gICAgICAgICAgICAgICAgICBwYXJhbUtleXMgPSBPYmplY3Qua2V5cyhwYXJhbXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGZvcm1GaWVsZC5oeXBlcmxpbmsubGluayA9IHNldEh5cGVybGluayhcbiAgICAgICAgICAgICAgICBrZXlzLFxuICAgICAgICAgICAgICAgIHJlY29yZCxcbiAgICAgICAgICAgICAgICBmb3JtRmllbGQuaHlwZXJsaW5rLmxpbmssXG4gICAgICAgICAgICAgICAgcGFyYW1LZXlzLFxuICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5oeXBlcmxpbmsucGFyYW1zLFxuICAgICAgICAgICAgICAgIGFsbERhdGFcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGlmIChmb3JtRmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkNBTEVOREFSICYmIG1hdGNoZWRLZXkpIHtcbiAgICAgICAgICAgICAgICBmb3JtRmllbGQudmFsdWUgPSBmb3JtRmllbGQudGltZU9ubHkgPyByZWNvcmRbbWF0Y2hlZEtleV0gOiByZWNvcmRbbWF0Y2hlZEtleV1cbiAgICAgICAgICAgICAgICAgID8gbmV3IERhdGUocmVjb3JkW21hdGNoZWRLZXldIGFzIHN0cmluZylcbiAgICAgICAgICAgICAgICAgIDogJyc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChmb3JtRmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkNBUkQpIHtcbiAgICAgICAgICAgICAgICAgIGlmIChmb3JtRmllbGQuY2FyZCAmJiBmb3JtRmllbGQuY2FyZC5mb3JtU2VjdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFmb3JtRmllbGQuY2FyZC5kYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmNhcmQuZGF0YSA9IGRhdGE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgXG4gICAgICAgICAgICAgICAgICAgIHNldEVkaXRGb3JtRmllbGRzSW5mbyhkYXRhLCBmb3JtRmllbGQuY2FyZCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICBmb3JtRmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkFVVE9DT01QTEVURSAmJlxuICAgICAgICAgICAgICAgIG1hdGNoZWRLZXlcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgbGV0IGFycmF5VmFsdWUgPSBbXTtcbiAgICAgICAgICAgICAgICBpZiAocmVjb3JkW21hdGNoZWRLZXldICYmIGZvcm1GaWVsZC5kaXNwbGF5RmllbGQpIHtcbiAgICAgICAgICAgICAgICAgIGFycmF5VmFsdWUucHVzaCh7W2Zvcm1GaWVsZC5kaXNwbGF5RmllbGRdIDogcmVjb3JkW21hdGNoZWRLZXldfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZvcm1GaWVsZC52YWx1ZSA9IGFycmF5VmFsdWU7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9ybUZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5MT09LVVBfSU5QVVQgfHwgZm9ybUZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5JTlBVVCkge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5sYWJlbCAmJlxuICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbCAmJlxuICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbC5sb29rdXBDb250cm9sICYmXG4gICAgICAgICAgICAgICAgICBmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sLmxvb2t1cENvbnRyb2wuZGF0YVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgY29uc3Qgb2JqID0gYXV0b1NldExvb2t1cERhdGEoXG4gICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2wubG9va3VwQ29udHJvbC5kYXRhLmRhdGEsXG4gICAgICAgICAgICAgICAgICAgIHJlY29yZFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIGlmIChvYmopIHtcbiAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbC5sb29rdXBDb250cm9sLmRhdGEuZGF0YSA9IG9iajtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICBmb3JtRmllbGQubG9va3VwQ29udHJvbCAmJlxuICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmxvb2t1cENvbnRyb2wuZGF0YSAmJlxuICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmxvb2t1cENvbnRyb2wuZGF0YS5kYXRhXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBvYmogPSBhdXRvU2V0TG9va3VwRGF0YShcbiAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmxvb2t1cENvbnRyb2wuZGF0YS5kYXRhLFxuICAgICAgICAgICAgICAgICAgICByZWNvcmRcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICBpZiAob2JqKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5sb29rdXBDb250cm9sLmRhdGEuZGF0YSA9IG9iajtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYocmVjb3JkW21hdGNoZWRLZXldKXtcbiAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC52YWx1ZSA9IHRvVHJpbShyZWNvcmRbbWF0Y2hlZEtleV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICBmb3JtRmllbGQuZGlzcGxheUZpZWxkICYmXG4gICAgICAgICAgICAgICAgICBmb3JtRmllbGQuZGlzcGxheUZpZWxkLmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IG1hdGNoRGlzcGxheUZpZWxkID0gZ2V0TWF0Y2hLZXkoXG4gICAgICAgICAgICAgICAgICAgIHJlY29yZCxcbiAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmRpc3BsYXlGaWVsZFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIGlmIChtYXRjaERpc3BsYXlGaWVsZCkge1xuICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQudmFsdWUgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgdGV4dDogdG9UcmltKHJlY29yZFttYXRjaERpc3BsYXlGaWVsZF0pLFxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmb3JtRmllbGQudmFsdWU/LnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICBjb25zdCBtYXRjaFZhbHVlRmllbGQgPSBnZXRNYXRjaEtleShyZWNvcmQsIGZvcm1GaWVsZC5maWVsZCk7XG4gICAgICAgICAgICAgICAgICBpZiAobWF0Y2hWYWx1ZUZpZWxkKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC52YWx1ZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBmb3JtRmllbGQudmFsdWU/LnRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRvVHJpbShyZWNvcmRbbWF0Y2hWYWx1ZUZpZWxkXSksXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuQ09NUE9ORU5UICYmXG4gICAgICAgICAgICAgICAgZm9ybUZpZWxkLmNvbXBvbmVudENvbnRyb2w/LmRhdGFcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2V0RGF0YUZyb21SZWNvcmQgPSBmaW5kS2V5c0FuZFZhbHVlKFxuICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmNvbXBvbmVudENvbnRyb2wuZGF0YSxcbiAgICAgICAgICAgICAgICAgIHJlY29yZFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgZm9ybUZpZWxkLmNvbXBvbmVudENvbnRyb2wuZGF0YSA9IHNldERhdGFGcm9tUmVjb3JkPy5kYXRhO1xuICAgICAgICAgICAgICAgIGlmKHNldERhdGFGcm9tUmVjb3JkPy5tYXRjaERhdGEpe1xuICAgICAgICAgICAgICAgICAgY2hhbmdlRHluYW1pY0Zvcm1TdGF0ZShcbiAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmNvbXBvbmVudENvbnRyb2wuaWQsXG4gICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5jb21wb25lbnRDb250cm9sPy5kYXRhLFxuICAgICAgICAgICAgICAgICAgICBmYWxzZVxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgZm9ybUZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5OVU1FUklDICYmXG4gICAgICAgICAgICAgICAgZm9ybUZpZWxkLmxhYmVsPy5sYWJlbENvbnRyb2w/Lmxvb2t1cENvbnRyb2w/LmRhdGE/LmRhdGFcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgbGV0IHNldERhdGEgPSBmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sLmxvb2t1cENvbnRyb2w7XG4gICAgICAgICAgICAgICAgc2V0RGF0YS5kYXRhLmRhdGEgPSBmaW5kS2V5c0FuZFZhbHVlKHNldERhdGEuZGF0YS5kYXRhLCByZWNvcmQpPy5kYXRhO1xuICAgICAgICAgICAgICAgIGNoYW5nZUR5bmFtaWNGb3JtU3RhdGUoc2V0RGF0YS5pZCwgc2V0RGF0YS5kYXRhLmRhdGEsIGZhbHNlKTtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChmb3JtRmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkhZUEVSTElOSyBcbiAgICAgICAgICAgICAgICAmJiAgZm9ybUZpZWxkLmh5cGVybGluaz8udGFyZ2V0ID09PSBFSHlwZXJsaW5rLkRJQUxPRyBcbiAgICAgICAgICAgICAgICAmJiBmb3JtRmllbGQuaHlwZXJsaW5rLnBhcmFtc1xuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBmb3JtRmllbGQuaHlwZXJsaW5rLnBhcmFtcyA9IGZpbmRLZXlzQW5kVmFsdWUoZm9ybUZpZWxkLmh5cGVybGluay5wYXJhbXMsIHJlY29yZCk/LmRhdGE7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAobWF0Y2hlZEtleSkge1xuICAgICAgICAgICAgICAgIGlmIChmb3JtRmllbGQuZm9ybWF0KSB7XG4gICAgICAgICAgICAgICAgICBmb3JtRmllbGQudmFsdWUgPSBmb3JtYXRGb3JtRmllbGRWYWx1ZShcbiAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLFxuICAgICAgICAgICAgICAgICAgICByZWNvcmRbbWF0Y2hlZEtleV1cbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChmb3JtRmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkNIRUNLQk9YKSB7XG4gICAgICAgICAgICAgICAgICBmb3JtRmllbGQudmFsdWUgPVxuICAgICAgICAgICAgICAgICAgICByZWNvcmRbbWF0Y2hlZEtleV0gJiZcbiAgICAgICAgICAgICAgICAgICAgKHJlY29yZFttYXRjaGVkS2V5XS50b1N0cmluZygpID09PSAnMScgfHxcbiAgICAgICAgICAgICAgICAgICAgICByZWNvcmRbbWF0Y2hlZEtleV0udG9TdHJpbmcoKSA9PT0gJ3RydWUnKVxuICAgICAgICAgICAgICAgICAgICAgID8gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgIDogZmFsc2U7XG4gICAgICAgICAgICAgICAgfWVsc2UgaWYgKGZvcm1GaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuRFJPUERPV04pIHtcbiAgICAgICAgICAgICAgICAgIGxldCBkcm9wVmFsdWUgPSByZWNvcmRbbWF0Y2hlZEtleV07XG4gICAgICAgICAgICAgICAgICBmb3JtRmllbGQudmFsdWUgPSBkcm9wVmFsdWVcbiAgICAgICAgICAgICAgICAgICAgPyBkcm9wVmFsdWUudG9TdHJpbmcoKVxuICAgICAgICAgICAgICAgICAgICA6IGRyb3BWYWx1ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYoZm9ybUZpZWxkLmNvbnRyb2w9PT1FRm9ybUNvbnRyb2wuU0VMRUNUQlVUVE9OKXtcbiAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQudmFsdWU9dG9UcmltKHJlY29yZFttYXRjaGVkS2V5XSkgfHwgZm9ybUZpZWxkLnZhbHVlXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC52YWx1ZSA9IHRvVHJpbShyZWNvcmRbbWF0Y2hlZEtleV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxufVxuXG4vL3NldCBoeXBlcmxpbmsgcGFyYW0gdmFsdWUgYXMgZmllbGQgdmFsdWVcbmV4cG9ydCBmdW5jdGlvbiBzZXRIeXBlcmxpbmtQYXJhbVZhbHVlKHJlY29yZDphbnksIGR5bmFtaWNGb3JtOiBJRHluYW1pY0Zvcm0pIHtcbiAgbGV0IGtleXM6IHN0cmluZ1tdID0gW107XG4gIGxldCBsaW5rOiBzdHJpbmcgPScnO1xuICBsZXQgcGFyYW1LZXlzOiBzdHJpbmdbXSA9IFtdO1xuICBsZXQgcGFyYW06IGFueTtcbiAgbGV0IGZpZWxkSW5mbzogYW55O1xuICAgIGR5bmFtaWNGb3JtLmZvcm1TZWN0aW9ucz8uZm9yRWFjaCgoc2VjdGlvbjogYW55KSA9PiB7XG4gICAgICBzZWN0aW9uLmZpZWxkcy5mb3JFYWNoKChmb3JtRmllbGQ6IGFueSkgPT4ge1xuICAgICAgICBpZihmb3JtRmllbGQubGFiZWwgJiYgZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbCAmJiBmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sLmh5cGVybGluaz8ubGluayl7XG4gICAgICAgICAga2V5cyA9IE9iamVjdC5rZXlzKHJlY29yZCk7XG4gICAgICAgICAgaWYoZm9ybUZpZWxkPy5sYWJlbD8ubGFiZWxDb250cm9sPy5vcmlnbmFsTGluayl7XG4gICAgICAgICAgIGxpbmsgPSBmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sLm9yaWduYWxMaW5rO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmKGZvcm1GaWVsZD8ubGFiZWw/LmxhYmVsQ29udHJvbD8uaHlwZXJsaW5rPy5wYXJhbXMpe1xuICAgICAgICAgICBwYXJhbSA9IGZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2wuaHlwZXJsaW5rLnBhcmFtcztcbiAgICAgICAgICAgcGFyYW1LZXlzID0gT2JqZWN0LmtleXMocGFyYW0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmaWVsZEluZm8gPSBmb3JtRmllbGQ7XG4gICAgICAgICAgaWYocmVjb3JkICYmIGtleXMgJiYgbGluayAmJiBwYXJhbUtleXMgJiYgcGFyYW0gJiYgZmllbGRJbmZvKXtcbiAgICAgICAgICAgIGZpZWxkSW5mby5sYWJlbC5sYWJlbENvbnRyb2wuaHlwZXJsaW5rLmxpbmsgPSBzZXRIeXBlcmxpbmsoa2V5cywgcmVjb3JkLCBsaW5rLCBwYXJhbUtleXMsIHBhcmFtKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gb2JqQ29udmVydFRvTG93ZXIob2JqOiBhbnkpIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKG9iaikucmVkdWNlKChhY2N1bXVsYXRvcjogYW55LCBrZXkpID0+IHtcbiAgICBhY2N1bXVsYXRvcltrZXkudG9Mb3dlckNhc2UoKV0gPSBvYmpba2V5XTtcbiAgICByZXR1cm4gYWNjdW11bGF0b3I7XG4gIH0sIHt9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNsaWNrU2VjdGlvbkhpZ2hsaWdodCh2YWx1ZTogYW55KSB7XG4gIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5sZWZ0LXNpZGVCYXIgLnAtcGFuZWxtZW51IC5wLXBhbmVsbWVudS1wYW5lbCcpO1xuICAgICAgIGNvbnN0IHRpdGxlID0gZG9jdW1lbnQuYm9keT8ucXVlcnlTZWxlY3RvcignW3RpdGxlID0gXCInKyB2YWx1ZT8ubmFtZSArJ1wiXScpO1xuICAgICAgIGNvbnN0IGFsbE1lbnVJdGVtcyA9IGRvY3VtZW50LmJvZHk/LnF1ZXJ5U2VsZWN0b3JBbGwoJy5sZWZ0LXNpZGVCYXIgLnAtcGFuZWxtZW51LXBhbmVsJyk7XG4gICAgICAgYWxsTWVudUl0ZW1zPy5mb3JFYWNoKChtZW5hdUl0ZW06IGFueSkgPT4ge1xuICAgICAgICBtZW5hdUl0ZW0/LnNldEF0dHJpYnV0ZSgnY2xhc3MnLCAncC1wYW5lbG1lbnUtcGFuZWwnKTtcbiAgICAgICB9KVxuICAgICAgICB0aXRsZT8ucGFyZW50RWxlbWVudD8ucGFyZW50RWxlbWVudD8uc2V0QXR0cmlidXRlKCdjbGFzcycsICdwLXBhbmVsbWVudS1wYW5lbCBhY3RpdmUnKTtcbiAgICAgICAgdGl0bGU/LnBhcmVudEVsZW1lbnQ/LnNldEF0dHJpYnV0ZSgnY2xhc3MnLCAncC1lbGVtZW50IHAtY29tcG9uZW50IHAtcGFuZWxtZW51LWhlYWRlciBwLWhpZ2hsaWdodCcpO1xuXG4gICAgICAgIGNvbnN0IGFjdGl2ZUljb24gPSBkb2N1bWVudC5ib2R5Py5xdWVyeVNlbGVjdG9yQWxsKCcuYWN0aXZlLWljb24nKTtcbiAgYWN0aXZlSWNvbj8uZm9yRWFjaCgoaWNvbjogYW55LCBpbmRleDogYW55KSA9PiB7XG4gICAgICBpY29uPy5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgJ3AtZWxlbWVudCBwLWNvbXBvbmVudCBwLXBhbmVsbWVudS1oZWFkZXIgcC1oaWdobGlnaHQnKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVBY3RpdmVJY29uQ2xhc3MoKSB7XG4gIGNvbnN0IGFjdGl2ZUljb24gPSBkb2N1bWVudC5ib2R5Py5xdWVyeVNlbGVjdG9yQWxsKCcuYWN0aXZlLWljb24nKTtcbiAgaWYgKGFjdGl2ZUljb24gJiYgYWN0aXZlSWNvbi5sZW5ndGggPiAwKSB7XG4gICAgYWN0aXZlSWNvbj8uZm9yRWFjaCgoaWNvbjogYW55LCBpbmRleDogYW55KSA9PiB7XG4gICAgICBpY29uPy5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywncC1lbGVtZW50IHAtY29tcG9uZW50IHAtcGFuZWxtZW51LWhlYWRlciBwLWhpZ2hsaWdodCcpO1xuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoaWdobGlnaHRMZWZ0U2lkZWJhcigpe1xuICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmZvcm0tY29udGFpbmVyXCIpPy5hZGRFdmVudExpc3RlbmVyKFwid2hlZWxcIiwgKCkgPT57XG4gIGNvbnN0IHNjcm9sbFRvcFBvc2l0aW9uOiBhbnkgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmZvcm0tY29udGFpbmVyXCIpPy5zY3JvbGxUb3A7XG4gIGNvbnN0IGFsbEljb25FbGVtZW50czogYW55ID0gZG9jdW1lbnQuYm9keS5xdWVyeVNlbGVjdG9yQWxsKFwiLmxlZnQtc2lkZUJhciAucC1wYW5lbG1lbnUgLnAtcGFuZWxtZW51LXBhbmVsXCIpO1xuXG4gIGFsbEljb25FbGVtZW50cz8uZm9yRWFjaCgoaWNvbjogYW55LCBpbmRleDogYW55KSA9PiB7XG4gICAgaWNvbj8uc2V0QXR0cmlidXRlKCd0YWJJbmRleCcsICdzZWN0aW9uJyArIGluZGV4KTtcbiAgfSk7XG4gICAgIHJlbW92ZUFjdGl2ZUljb25DbGFzcygpO1xuICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5mb3JtLWNvbnRhaW5lciAuY2FyZCcpPy5mb3JFYWNoKChjYXJkOiBhbnksIGluZGV4OiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgY3VycmVudElkID0gXCJzZWN0aW9uXCIgKyBpbmRleDtcbiAgICAgICAgaWYgKHNjcm9sbFRvcFBvc2l0aW9uID49IGNhcmQub2Zmc2V0VG9wICYmIHNjcm9sbFRvcFBvc2l0aW9uIDw9IGNhcmQub2Zmc2V0VG9wICsgY2FyZC5vZmZzZXRIZWlnaHQpe1xuICAgICAgICAgIHJldHVybiAgZG9jdW1lbnQuYm9keT8ucXVlcnlTZWxlY3RvcignW3RhYkluZGV4PScrIGN1cnJlbnRJZCArICddJyk/LnNldEF0dHJpYnV0ZSgnY2xhc3MnLCAncC1wYW5lbG1lbnUtcGFuZWwgYWN0aXZlJyk7XG4gICAgICAgIH0gZWxzZXtcbiAgICAgICAgICByZXR1cm4gIGRvY3VtZW50LmJvZHk/LnF1ZXJ5U2VsZWN0b3IoJ1t0YWJJbmRleD0nKyBjdXJyZW50SWQgKyAnXScpPy5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgJ3AtcGFuZWxtZW51LXBhbmVsJyk7ICAgIFxuICAgICAgICB9XG4gICAgICB9KTtcbiAgfSk7XG4gICAgfVxuXG5leHBvcnQgZnVuY3Rpb24gZmluZEtleXNBbmRWYWx1ZShkYXRhOiBhbnksIHJlY29yZDogYW55KSB7XG4gIGxldCB2YWx1ZUtleTogc3RyaW5nID0gJyc7XG4gIGxldCBzZXREYXRhRnJvbVJlY29yZCA9IGZhbHNlO1xuICBPYmplY3Qua2V5cyhkYXRhKS5mb3JFYWNoKChkYXRhS2V5KSA9PiB7XG4gICAgbGV0IHZhbHVlQ29udGFpbnNLZXk6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBpZihkYXRhW2RhdGFLZXldICYmIGRhdGFbZGF0YUtleV0/LnRvU3RyaW5nKCk/LmluY2x1ZGVzKCd7Jykpe1xuICAgICAgdmFsdWVDb250YWluc0tleSA9IHRydWU7XG4gICAgICB2YWx1ZUtleSA9IGRhdGFbZGF0YUtleV0/LnRvU3RyaW5nKCk/LnJlcGxhY2UoXCJ7XCIsIFwiXCIpPy5yZXBsYWNlKFwifVwiLCBcIlwiKVxuICAgIH1cbiAgICBsZXQga2V5ID0gT2JqZWN0LmtleXMocmVjb3JkKS5maW5kKChrZXkpID0+IHZhbHVlQ29udGFpbnNLZXkgPyAodmFsdWVLZXkudG9Mb3dlckNhc2UoKSA9PT0ga2V5LnRvTG93ZXJDYXNlKCkpIDogKGRhdGFLZXkudG9Mb3dlckNhc2UoKSA9PT0ga2V5LnRvTG93ZXJDYXNlKCkpKTtcbiAgICBpZiAoa2V5ICYmIGtleS5sZW5ndGggPiAwKSB7XG4gICAgICBzZXREYXRhRnJvbVJlY29yZCA9IHRydWVcbiAgICAgIGRhdGEgPSB7IC4uLmRhdGEsIFtkYXRhS2V5XTogcmVjb3JkW2tleV0gfTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4ge21hdGNoRGF0YTogc2V0RGF0YUZyb21SZWNvcmQsIGRhdGE6IGRhdGF9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0UHJvcFZhbHVlKG9iajogYW55LCBwcm9wOiBJRGljdGlvbmFyeSkge1xuICBjb25zdCBtYXRjaGVkS2V5OiBzdHJpbmcgPSBnZXRNYXRjaEtleShvYmosIHByb3AubmFtZSk7XG4gIGlmIChtYXRjaGVkS2V5KSB7XG4gICAgcmV0dXJuIChvYmpbbWF0Y2hlZEtleV0gPSBwcm9wLnZhbHVlKTtcbiAgfVxuICBlbHNle1xuICAgcmV0dXJuKCBvYmpbcHJvcC5uYW1lXT1wcm9wLnZhbHVlKVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNSb2xlKHJvbGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBsZXQgc3RvcmFnZSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdDdXJyZW50VXNlckluZm8nKTtcbiAgaWYgKHN0b3JhZ2UpIHtcbiAgICBsZXQgY3VycmVudFVzZXIgPSBKU09OLnBhcnNlKHN0b3JhZ2UpO1xuICAgIGlmIChjdXJyZW50VXNlciAmJiBjdXJyZW50VXNlci5yb2xlcyAmJiBjdXJyZW50VXNlci5yb2xlcy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gY3VycmVudFVzZXIucm9sZXMuc29tZSgoaXRlbTogYW55KSA9PiBpdGVtLmNvZGUudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpID09PSByb2xlLnRvTG93ZXJDYXNlKCkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIHNldExhYmVsSHlwZXJsaW5rKGl0ZW06IGFueSwgcmVjb3JkOiBhbnksIGtleXM6IHN0cmluZ1tdLCBhbGxEYXRhOiBhbnlbXSA9IFtdKSB7XG4gIGlmIChcbiAgICBpdGVtLmxhYmVsICYmXG4gICAgaXRlbS5sYWJlbC5sYWJlbENvbnRyb2wgJiZcbiAgICBpdGVtLmxhYmVsLmxhYmVsQ29udHJvbC5oeXBlcmxpbmsgJiZcbiAgICBpdGVtLmxhYmVsLmxhYmVsQ29udHJvbC5oeXBlcmxpbmsucGFyYW1zXG4gICkge1xuICAgIGNvbnN0IHBhcmFtS2V5cyA9IE9iamVjdC5rZXlzKGl0ZW0ubGFiZWwubGFiZWxDb250cm9sLmh5cGVybGluay5wYXJhbXMpO1xuICAgIGNvbnN0IGxpbmsgPSBpdGVtLmxhYmVsLmxhYmVsQ29udHJvbC5oeXBlcmxpbmsubGluaztcbiAgICBpZiAoaXRlbS5sYWJlbC5sYWJlbENvbnRyb2wuaHlwZXJsaW5rLmxpbmspIHtcbiAgICAgIGl0ZW0ubGFiZWwubGFiZWxDb250cm9sLmh5cGVybGluay5saW5rID0gc2V0SHlwZXJsaW5rKFxuICAgICAgICBrZXlzLFxuICAgICAgICByZWNvcmQsXG4gICAgICAgIGxpbmssXG4gICAgICAgIHBhcmFtS2V5cyxcbiAgICAgICAgaXRlbS5sYWJlbC5sYWJlbENvbnRyb2wuaHlwZXJsaW5rLnBhcmFtcyxcbiAgICAgICAgYWxsRGF0YVxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEh5cGVybGluayhcbiAga2V5czogc3RyaW5nW10sXG4gIHJlY29yZDogYW55LFxuICBsaW5rOiBzdHJpbmcsXG4gIHBhcmFtS2V5czogc3RyaW5nW10sXG4gIHBhcmFtczogYW55LFxuICBhbGxEYXRhOiBhbnlbXSA9IFtdXG4pOiBzdHJpbmcge1xuICBsZXQgbmV3TGluazogc3RyaW5nID0gbGluaztcbiAgcmVjb3JkID0gb2JqQ29udmVydFRvTG93ZXIocmVjb3JkKTtcbiAgcGFyYW1LZXlzLmZvckVhY2goKHBhcmFta2V5KSA9PiB7XG4gICAgY29uc3QgcGFyYW06IHN0cmluZyA9ICd7eycgKyBwYXJhbWtleS50b0xvd2VyQ2FzZSgpICsgJ319JztcbiAgICBjb25zdCBpc1BhcmFtTWF0Y2hlZCA9IG5ld0xpbmsubG9jYWxlQ29tcGFyZShwYXJhbSk7XG4gICAgY29uc3QgcGFyYW1JblJlY29yZCA9IHNldFBhcmFtS2V5VmFsdWUocmVjb3JkLCBhbGxEYXRhLCBwYXJhbWtleSk7XG5cbiAgICBpZiAoaXNQYXJhbU1hdGNoZWQpIHtcbiAgICAgIGxldCBwYXJhbVZhbHVlID0gcGFyYW1zID8gcGFyYW1zW3BhcmFta2V5XSA6IG51bGw7XG4gICAgICBpZihwYXJhbVZhbHVlID09PSAnJyAmJiBwYXJhbUluUmVjb3JkKXtcbiAgICAgICAgcGFyYW1WYWx1ZSA9ICd7JytwYXJhbWtleSsnfSc7XG4gICAgICB9XG4gICAgICBpZiAocGFyYW1WYWx1ZSkge1xuICAgICAgICBjb25zdCBwcm9wTmFtZSA9IHBhcmFtVmFsdWUudG9TdHJpbmcoKS5yZXBsYWNlKCd7JywgJycpLnJlcGxhY2UoJ30nLCAnJyk7XG4gICAgICAgIGxldCBwcm9wVmFsdWUgPSByZWNvcmRbcHJvcE5hbWUudG9Mb3dlckNhc2UoKV07XG4gICAgICAgIFxuICAgICAgICAvLyBpbiBjYXNlIG9mIHByb3Agbm90IGZvdW5kIGluIHJlY29yZCB0aGVuIHRyeSB0byBmaW5kIHByb3AgaW4gYWxsIGRhdGEgYXJyYXksIHRvIGdldCBpdHMgdmFsdWUgXG4gICAgICAgIGlmICghcHJvcFZhbHVlICYmIGFsbERhdGEgJiYgYWxsRGF0YS5sZW5ndGggPiAwKVxuICAgICAgICB7XG4gICAgICAgICAgYWxsRGF0YS5mb3JFYWNoKChkYXRhKT0+e1xuICAgICAgICAgICAgLy9jb25zdCB2YWx1ZSA9IGRhdGEucmVjb3Jkcy5maW5kKCh4KT0+IHhbcHJvcE5hbWVdKTtcbiAgICAgICAgICAgIGRhdGEucmVjb3Jkcy5mb3JFYWNoKChhbGxSZWNvcmQ6IGFueSk9PntcbiAgICAgICAgICAgICAgbGV0IGtleXMgPSBPYmplY3Qua2V5cyhhbGxSZWNvcmQpO1xuICAgICAgICAgICAgICBsZXQgbWF0Y2hLZXkgPSBrZXlzLmZpbmQoKHgpPT4geC50b0xvd2VyQ2FzZSgpID09PSBwcm9wTmFtZS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgICAgICAgaWYgKG1hdGNoS2V5KXtcbiAgICAgICAgICAgICAgICAgcHJvcFZhbHVlID0gYWxsUmVjb3JkW21hdGNoS2V5XTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgbmV3TGluayA9IG5ld0xpbmsucmVwbGFjZShuZXcgUmVnRXhwKHBhcmFtLCAnaWcnKSwgdG9UcmltKHBhcmFtVmFsdWUudG9TdHJpbmcoKS5pbmNsdWRlcygneycpID8gcHJvcFZhbHVlIDogcGFyYW1WYWx1ZSkpO1xuICAgICAgXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBnZXQgcGFyYW0gdmFsdWUgZnJvbSBhcGkgcmVzcG9uc2UsIGlmIHBhcmFtIGtleSBleGlzdHMgaW4gaXRcbiAgICAgICAgY29uc3QgbWF0Y2hlZEtleTogYW55ID0ga2V5cy5maW5kKFxuICAgICAgICAgICh4KSA9PiB4LnRvTG93ZXJDYXNlKCkgPT09IHBhcmFta2V5LnRvTG93ZXJDYXNlKClcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAobWF0Y2hlZEtleSkge1xuICAgICAgICAgIHBhcmFtVmFsdWUgPSByZWNvcmRbbWF0Y2hlZEtleV07XG4gICAgICAgICAgaWYgKHBhcmFtVmFsdWUpIHtcbiAgICAgICAgICAgIG5ld0xpbmsgPSBuZXdMaW5rLnJlcGxhY2UoXG4gICAgICAgICAgICAgIG5ldyBSZWdFeHAocGFyYW0sICdpZycpLFxuICAgICAgICAgICAgICB0b1RyaW0ocGFyYW1WYWx1ZSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5ld0xpbmsgPSBuZXdMaW5rLnJlcGxhY2UobmV3IFJlZ0V4cChwYXJhbSwgJ2lnJyksIHRvVHJpbSgnJykpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIC8vIHJlcGxhY2UgdGhlIHt7cGFyYW19fSB3aXRoIGVtcHR5XG4gIGlmKG5ld0xpbmsgJiYgbmV3TGluay5pbmNsdWRlcyhcInt7XCIpICYmIG5ld0xpbmsuaW5jbHVkZXMoXCJ9fVwiKSl7XG4gICAgbmV3TGluayA9IG5ld0xpbms/LnJlcGxhY2UoL3srLio/fSsvZywgXCJcIik7XG4gIH1cbiAgcmV0dXJuIG5ld0xpbms7XG59XG5cbi8vIGl0cyBjaGVja2luZyBpZiB0aGVyZSBpcyBubyB2YWx1ZSBpbiBoeXBlcmxpbmsgcGFyYW0gdGhlbiBpdCBzZXQga2V5IGFzIGEgcGFyYW1WYWx1ZVxuZnVuY3Rpb24gc2V0UGFyYW1LZXlWYWx1ZShyZWNvcmQ6IGFueSwgYWxsRGF0YTogYW55W10gPSBbXSwgcGFyYW1rZXk6IGFueSl7XG4gIGxldCBwYXJhbVZhbHVlOiBib29sZWFuID0gZmFsc2U7XG4gIGlmKGFsbERhdGEgJiYgYWxsRGF0YS5sZW5ndGggPiAwKXtcbiAgICBhbGxEYXRhLmZvckVhY2goKGRhdGE6IGFueSk9PntcbiAgICAgIGlmKGRhdGEucmVjb3JkcyAmJiBkYXRhLnJlY29yZHMubGVuZ3RoID4gMCl7XG4gICAgICAgIGRhdGEucmVjb3Jkcy5mb3JFYWNoKChhbGxSZWNvcmQ6IGFueSkgPT57XG4gICAgICAgICAgIGlmKHBhcmFtVmFsdWUgPT09IGZhbHNlKXtcbiAgICAgICAgICAgIHBhcmFtVmFsdWUgPSBPYmplY3Qua2V5cyhhbGxSZWNvcmQpLnNvbWUoKHJlY29yZCk9PiByZWNvcmQudG9Mb3dlckNhc2UoKSA9PT0gcGFyYW1rZXkudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICB9KTtcbiAgfWVsc2V7XG4gICAgICAgcGFyYW1WYWx1ZSA9IE9iamVjdC5rZXlzKHJlY29yZCkuc29tZSgoeCk9PiB4ID09PSBwYXJhbWtleS50b0xvd2VyQ2FzZSgpKTtcbiAgfVxuICByZXR1cm4gcGFyYW1WYWx1ZTtcbn1cblxuZnVuY3Rpb24gZ2V0UHJvcGVydHlWYWx1ZShkYXRhOiBhbnksIHByb3BOYW1lOiBzdHJpbmcpIHtcbiAgbGV0IHByb3BWYWx1ZTogYW55O1xuICBkYXRhLnJlY29yZHM/LmZvckVhY2goKHJlY29yZDogYW55KSA9PiB7XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMocmVjb3JkKSkge1xuICAgICAgaWYgKGtleSAmJiBwcm9wTmFtZSAmJiBrZXkudG9Mb3dlckNhc2UoKSA9PT0gcHJvcE5hbWUudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICBwcm9wVmFsdWUgPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcHJvcFZhbHVlO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRGb3JtRmllbGRDVmFsdWUoZmllbGQ6IGFueSkge1xuICBpZiAoXG4gICAgZmllbGQuZm9ybWF0Py50eXBlID09PSBFRm9ybWF0VHlwZS5CT09MRUFOX1lOIHx8XG4gICAgZmllbGQuZm9ybWF0Py5mb3JtYXR0ZXI/Lm5hbWUgPT09ICd0b0Jvb2xlYW4nXG4gICkge1xuICAgIHJldHVybiAoZmllbGQudmFsdWUgPT09IDEgfHwgZmllbGQudmFsdWU/LnRvU3RyaW5nKCkgPT09ICd0cnVlJyB8fCBmaWVsZC52YWx1ZT8udG9TdHJpbmcoKSA9PT0gJ1knKSA/ICdZJyA6ICdOJztcbiAgfSBlbHNlIGlmIChcbiAgICBmaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuQ0FMRU5EQVIgJiZcbiAgICAoZmllbGQudmFsdWUgfHwgZmllbGQudmFsdWUgPT09ICcnKVxuICApIHtcbiAgICBpZihmaWVsZC50aW1lT25seSl7XG4gICAgICBmaWVsZC52YWx1ZSA9IGZpZWxkLnZhbHVlO1xuICAgIH1lbHNle1xuICAgICAgZmllbGQudmFsdWUgPVxuICAgICAgZmllbGQuc2hvd1RpbWUgPT09IHRydWVcbiAgICAgICAgPyB0b1Nob3J0RGF0ZVRpbWUoZmllbGQudmFsdWUsIGZpZWxkLmZvcm1hdClcbiAgICAgICAgOiB0b1Nob3J0RGF0ZShmaWVsZC52YWx1ZSwgZmllbGQuZm9ybWF0KVxuICAgIH1cbiAgICByZXR1cm4gZmllbGQudmFsdWU7XG4gIH0gZWxzZSBpZiAoXG4gICAgKGZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5MT09LVVBfSU5QVVQgfHwgZmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLklOUFVUKSAmJlxuICAgIGZpZWxkLnZhbHVlICYmXG4gICAgdHlwZW9mIGZpZWxkLnZhbHVlID09PSAnb2JqZWN0J1xuICApIHtcbiAgICByZXR1cm4gZmllbGQudmFsdWUudmFsdWUgPT0gdW5kZWZpbmVkID8gbnVsbCA6IGZpZWxkLnZhbHVlLnZhbHVlO1xuICB9IGVsc2UgaWYgKFxuICAgIGZpZWxkLmxhYmVsICYmXG4gICAgZmllbGQubGFiZWwubGFiZWxDb250cm9sICYmXG4gICAgZmllbGQubGFiZWwubGFiZWxDb250cm9sLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5MT09LVVBfSU5QVVQgJiZcbiAgICBmaWVsZC52YWx1ZSAmJlxuICAgIHR5cGVvZiBmaWVsZC52YWx1ZSA9PT0gJ29iamVjdCdcbiAgKSB7XG4gICAgcmV0dXJuIGZpZWxkLnZhbHVlLnZhbHVlO1xuICB9IGVsc2Uge1xuICAgIGZpZWxkLnZhbHVlID0gZmllbGQudmFsdWUgPT0gdW5kZWZpbmVkID8gbnVsbCA6IGZpZWxkLnZhbHVlO1xuICAgIHJldHVybiBmaWVsZC52YWx1ZTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYXV0b1NldExvb2t1cERhdGEoXG4gIGZpZWxkRGF0YTogYW55LFxuICByZXNwb25zZTogYW55XG4pIHtcbiAgbGV0IG9iaiA9IHt9O1xuICBsZXQgcmVjb3JkID0gc2V0RGF0YUZpZWxkcyhbcmVzcG9uc2VdKTtcbiAgaWYgKHJlY29yZCAmJiByZWNvcmQubGVuZ3RoID4gMCkge1xuICAgIHJlY29yZC5mb3JFYWNoKCh4OiBhbnkpID0+IHtcbiAgICAgIHJlY29yZCA9IHg7XG4gICAgfSk7XG4gIH1cbiAgaWYgKGZpZWxkRGF0YSAmJiByZWNvcmQpIHtcbiAgICBPYmplY3QuZW50cmllcyhmaWVsZERhdGEpLmZvckVhY2goKFtkYXRhS2V5LCBkYXRhVmFsdWVdOiBhbnkpID0+IHtcbiAgICAgIGxldCByb3dLZXlzID0gT2JqZWN0LmtleXMocmVjb3JkKTtcbiAgICAgIGxldCBrZXkgPSByb3dLZXlzPy5maW5kKCh4KSA9PiB4Py50b0xvd2VyQ2FzZSgpID09PSBkYXRhS2V5Py50b1N0cmluZygpPy50b0xvd2VyQ2FzZSgpKTtcbiAgICAgIGxldCB2YWx1ZSA9IHJvd0tleXM/LmZpbmQoXG4gICAgICAgICh4KSA9PiBkYXRhVmFsdWUgJiYgZGF0YVZhbHVlPy50b1N0cmluZygpLmluY2x1ZGVzKCd7JykgJiYgeD8udG9Mb3dlckNhc2UoKSA9PT0gZGF0YVZhbHVlPy50b1N0cmluZygpPy50b0xvd2VyQ2FzZSgpPy5yZXBsYWNlKFwie1wiLCBcIlwiKT8ucmVwbGFjZShcIn1cIiwgXCJcIilcbiAgICAgICk7XG4gICAgICBpZiAodmFsdWUgJiYgdmFsdWUubGVuZ3RoID4gMCkge1xuICAgICAgICBvYmogPSB7IC4uLm9iaiwgW2RhdGFLZXldOiByZWNvcmRbdmFsdWUudG9Mb3dlckNhc2UoKV0gfTtcbiAgICAgIH0gZWxzZSBpZiAoa2V5ICYmIGtleS5sZW5ndGggPiAwKSB7XG4gICAgICAgIG9iaiA9IHsgLi4ub2JqLCBbZGF0YUtleV06IHJlY29yZFtrZXkudG9Mb3dlckNhc2UoKV0gfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9iaiA9IHsgLi4ub2JqLCBbZGF0YUtleV06IGRhdGFWYWx1ZSB9O1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBvYmo7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEdyaWRMb29rdXBEYXRhKGNvbHVtbjogSUdyaWRDb2x1bW5bXSwgZmllbGQ6IHN0cmluZywgZGF0YTogYW55KXtcbiAgbGV0IG9iaiA9IGNvbHVtbi5maW5kKCh4KT0+IHguZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IGZpZWxkLnRvTG93ZXJDYXNlKCkpO1xuICBpZihvYmogJiYgb2JqLmxvb2t1cENvbnRyb2w/LmRhdGEpe1xuICAgIG9iai5sb29rdXBDb250cm9sLmRhdGEuZGF0YSA9IGRhdGE7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldERhdGFGaWVsZHMocmVzcG9uc2U6IGFueVtdKSB7XG4gIGxldCBkYXRhOiBhbnkgPSBbXTtcbiAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLmxlbmd0aCA+IDApIHtcbiAgICByZXNwb25zZS5tYXAoKHg6IGFueSwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gT2JqZWN0LmtleXMoeCkucmVkdWNlKFxuICAgICAgICAocHJldiwgY3VycmVudCkgPT4gKHsgLi4ucHJldiwgW2N1cnJlbnQudG9Mb3dlckNhc2UoKV06IHhbY3VycmVudF0gfSksXG4gICAgICAgIHt9XG4gICAgICApO1xuXG4gICAgICBkYXRhLnB1c2gocmVzdWx0KTtcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gZGF0YTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldERpYWxvZ1Jlc3BvbnNlKFxuICBmb3JtRmllbGQ6IGFueSxcbiAgZm9ybURhdGE6IGFueSxcbiAgcmVzcG9uc2U6IGFueVxuKSB7XG4gIGxldCB2YWx1ZTogYW55O1xuICBpZiAocmVzcG9uc2UpIHtcbiAgICAvLyBpZiBzZWxlY3RlZFZhbHVlIGRvZXMgbm90IGV4aXN0IHRoZW4gY29uc2lkZXIgdmFsdWVGaWVsZCBhcyBzZWxlY3RlZFZhbHVlXG4gICAgaWYgKFxuICAgICAgZm9ybURhdGEgJiZcbiAgICAgIGZvcm1EYXRhLmRhdGEgJiZcbiAgICAgIGZvcm1EYXRhLmRhdGEubGFiZWxQcm9wICYmXG4gICAgICAhZm9ybURhdGEuZGF0YS52YWx1ZVByb3BcbiAgICApIHtcbiAgICAgIGZvcm1EYXRhLmRhdGEudmFsdWVQcm9wID0gZm9ybURhdGEuZGF0YS5sYWJlbFByb3A7XG4gICAgfVxuICAgIGVsc2UgaWYgKFxuICAgICAgZm9ybURhdGEgJiZcbiAgICAgIGZvcm1EYXRhLmRhdGEgJiZcbiAgICAgIGZvcm1EYXRhLmRhdGEudmFsdWVQcm9wICYmXG4gICAgICAhZm9ybURhdGEuZGF0YS5sYWJlbFByb3BcbiAgICApIHtcbiAgICAgIGZvcm1EYXRhLmRhdGEubGFiZWxQcm9wID0gZm9ybURhdGEuZGF0YS52YWx1ZVByb3A7XG4gICAgfVxuXG4gICAgY29uc3QgbWF0Y2hWYWx1ZUtleTogc3RyaW5nID0gZ2V0TWF0Y2hLZXkoXG4gICAgICByZXNwb25zZSxcbiAgICAgIGZvcm1EYXRhPy5kYXRhPy52YWx1ZVByb3BcbiAgICApO1xuICAgIGNvbnN0IG1hdGNoRmllbGRLZXk6IHN0cmluZyA9IGdldE1hdGNoS2V5KFxuICAgICAgcmVzcG9uc2UsXG4gICAgICBmb3JtRGF0YT8uZGF0YT8ubGFiZWxQcm9wXG4gICAgKTtcblxuICAgIGlmIChcbiAgICAgIGZvcm1EYXRhPy5kYXRhICYmXG4gICAgICBmb3JtRGF0YT8uZGF0YS52YWx1ZVByb3AgJiZcbiAgICAgIGZvcm1EYXRhPy5kYXRhLmxhYmVsUHJvcFxuICAgICkge1xuICAgICAgbGV0IHZhbHVlUHJvcCA9IHJlc3BvbnNlW21hdGNoVmFsdWVLZXldO1xuICAgICAgbGV0IG1hdGNoVGV4dCA9IHJlc3BvbnNlW21hdGNoRmllbGRLZXldO1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZVByb3AgPT09ICdzdHJpbmcnICYmIHR5cGVvZiBtYXRjaFRleHQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHZhbHVlUHJvcCA9IHZhbHVlUHJvcC50cmltKCk7XG4gICAgICAgIG1hdGNoVGV4dCA9IG1hdGNoVGV4dC50cmltKCk7XG4gICAgICB9XG4gICAgICB2YWx1ZSA9IHsgdGV4dDogbWF0Y2hUZXh0LCB2YWx1ZTogdmFsdWVQcm9wIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IEZpZWxkS2V5OiBzdHJpbmcgPSBnZXRNYXRjaEtleShyZXNwb25zZSwgZm9ybUZpZWxkLmZpZWxkKTtcbiAgICAgIGxldCB2YWx1ZSA9IHJlc3BvbnNlW0ZpZWxkS2V5XTtcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlPy50b1N0cmluZygpPy50cmltKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGN1cnJlbnRVcmwoKTpzdHJpbmd7XG4gIGxldCBjdXJyZW50Um91dGU6IHN0cmluZyA9ICcnO1xuICBsZXQgdXJsID0gd2luZG93LmxvY2F0aW9uLmhyZWY7XG4gIGlmKHVybCl7XG4gICAgbGV0IGFyciA9IHVybC5zcGxpdCgnLycpO1xuICAgIGN1cnJlbnRSb3V0ZSA9IGFyclthcnIubGVuZ3RoLTFdXG4gIH0gICAgXG4gIHJldHVybiBjdXJyZW50Um91dGU7XG59XG5cbmV4cG9ydCAgZnVuY3Rpb24gZ2V0R3JpZEZpbHRlcnMoKXtcbiAgbGV0IGZpbHRlcnM6IGFueSA9IFtdO1xuICBsZXQgZ3JpZEZpbHRlcnMgPSBjdXJyZW50VXJsKCk7XG4gICAgaWYoZ3JpZEZpbHRlcnMgJiYgZ3JpZEZpbHRlcnMubGVuZ3RoID4gMCl7XG4gICAgICBjb25zdCBsb2NhbEZpbHRlciA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ1NldEZpbHRlcnMtJytncmlkRmlsdGVycykgYXMgYW55KTtcbiAgICAgIGZpbHRlcnMgPSBsb2NhbEZpbHRlcj8uZmlsdGVycztcbiAgICB9XG4gICAgcmV0dXJuIGZpbHRlcnM7XG59XG5cbi8vdXBkYXRlIHRoZSBoaWRkZW4gb3IgZGlzYWJsZWQgYW5kIHZhbHVlIGJhc2VkIG9mZiBvdGhlciBnbG9iYWwgZmlsdGVycy5cbmV4cG9ydCBmdW5jdGlvbiBzZXRHbG9iYWxGaWx0ZXJQcm9wVmFsdWVzKFxuICBnbG9iYWxGaWx0ZXI6IElHbG9iYWxGaWx0ZXJbXSxcbiAgZmllbGQ6IHN0cmluZyxcbiAgcHJvcHM6IElGaWx0ZXJEaWN0aW9uYXJ5W10sXG4pIHtcbiAgcmV0dXJuIGdsb2JhbEZpbHRlci5tYXAoKGZpbHRlcjogYW55KSA9PiB7XG4gICAgaWYgKFxuICAgICAgKGZpbHRlci5maWVsZCAmJiBmaWx0ZXIuZmllbGQudG9Mb3dlckNhc2UoKSA9PT0gZmllbGQ/LnRvTG93ZXJDYXNlKCkpIHx8XG4gICAgICAoZmlsdGVyLmRpc3BsYXlUZXh0ICYmXG4gICAgICAgIGZpbHRlci5kaXNwbGF5VGV4dC50b0xvd2VyQ2FzZSgpID09PSBmaWVsZD8udG9Mb3dlckNhc2UoKSlcbiAgICApIHtcbiAgICAgIHByb3BzPy5tYXAoKHByb3A6IElGaWx0ZXJEaWN0aW9uYXJ5KSA9PiB7XG4gICAgICAgIGlmIChmaWx0ZXIuaGFzT3duUHJvcGVydHkocHJvcC5wcm9wTmFtZSkpIHtcbiAgICAgICAgICByZXR1cm4gKGZpbHRlcltwcm9wLnByb3BOYW1lXSA9IHByb3AucHJvcFZhbHVlKTtcbiAgICAgICAgfSBlbHNlIGlmIChwcm9wLnByb3BWYWx1ZSAmJiBwcm9wLnByb3BWYWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgcmV0dXJuIChmaWx0ZXIudmFsdWUgPSBwcm9wLnByb3BWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRDYXJkRmllbGRzRGF0YShmb3JtOiBhbnkpIHtcbiAgaWYgKGZvcm0gJiYgZm9ybS5keW5hbWljZm9ybSkge1xuICAgIGNvbnN0IHsgZHluYW1pY2Zvcm0sIC4uLm5ld0RhdGEgfSA9IGZvcm07XG4gICAgZHluYW1pY2Zvcm0/LmZvcm1TZWN0aW9ucz8uZm9yRWFjaCgoc2VjdGlvbjogYW55KSA9PiB7XG4gICAgICBzZWN0aW9uLmZpZWxkcz8uZm9yRWFjaCgoZmllbGQ6IGFueSkgPT4ge1xuICAgICAgICBpZiAobmV3RGF0YSkge1xuICAgICAgICAgIHNldEVkaXRGb3JtRmllbGRzKHsgcmVjb3JkczogW25ld0RhdGFdIH0sIGR5bmFtaWNmb3JtKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn1cblxuLy8gZGlzYWJsZSBHcmlkIEVkaXRhYmxlUm93IENvbHVtblxuZXhwb3J0IGZ1bmN0aW9uIGRpc2FibGVFZGl0Um93Q29sdW1uKGNvbHVtbnM6IElHcmlkQ29sdW1uW10sIGZpZWxkOiBzdHJpbmcpOiBJR3JpZENvbHVtbltdIHtcbiAgaWYgKGZpZWxkICYmIGNvbHVtbnMgJiYgY29sdW1ucy5sZW5ndGggPiAwKSB7XG4gICAgbGV0IG9iaiA9IGNvbHVtbnMuZmluZCgoeCkgPT4geC5maWVsZD8udG9Mb3dlckNhc2UoKSA9PT0gZmllbGQudG9Mb3dlckNhc2UoKSk7XG4gICAgbGV0IGRpc2FibGVPYmogPSB7IC4uLm9iaiwgZGlzYWJsZWQ6IHRydWUgfTtcbiAgICBjb25zdCBpbmRleCA9IGNvbHVtbnMuZmluZEluZGV4KChpOiBhbnkpID0+IGkuZmllbGQudG9Mb3dlckNhc2UoKSA9PT0gZmllbGQudG9Mb3dlckNhc2UoKSk7XG4gICAgaWYgKGluZGV4ICE9PSAtMSkgY29sdW1uc1tpbmRleF0gPSBkaXNhYmxlT2JqO1xuICB9XG4gIHJldHVybiBjb2x1bW5zO1xufVxuXG4vLyBlbmFibGVkIEdyaWQgRWRpdGFibGVSb3cgQ29sdW1uXG5leHBvcnQgZnVuY3Rpb24gZW5hYmxlZEVkaXRSb3dDb2x1bW4oY29sdW1uczogSUdyaWRDb2x1bW5bXSwgZmllbGQ6IHN0cmluZyk6IElHcmlkQ29sdW1uW10ge1xuICBpZiAoZmllbGQgJiYgY29sdW1ucyAmJiBjb2x1bW5zLmxlbmd0aCA+IDApIHtcbiAgICBsZXQgb2JqID0gY29sdW1ucy5maW5kKCh4KSA9PiB4LmZpZWxkPy50b0xvd2VyQ2FzZSgpID09PSBmaWVsZD8udG9Mb3dlckNhc2UoKSk7XG4gICAgbGV0IGVuYWJsZU9iaiA9IHsgLi4ub2JqLCBkaXNhYmxlZDogZmFsc2UgfTtcbiAgICBjb25zdCBpbmRleCA9IGNvbHVtbnMuZmluZEluZGV4KChpOiBhbnkpID0+IGkuZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IGZpZWxkPy50b0xvd2VyQ2FzZSgpKTtcbiAgICBpZiAoaW5kZXggIT09IC0xKSBjb2x1bW5zW2luZGV4XSA9IGVuYWJsZU9iajtcbiAgfVxuICByZXR1cm4gY29sdW1ucztcbn1cblxuIC8vIGNoZWNrIHRoZSBNaW51dGVzIEludGVydmFsXG4gZXhwb3J0IGZ1bmN0aW9uIHNldE1pbnV0ZXNJbnRlcnZhbCh2YWx1ZTogYW55KXtcbiAgaWYgKHZhbHVlKSB7XG4gICAgY29uc3QgbWluID0gdmFsdWUuZ2V0TWludXRlcygpLnRvU3RyaW5nKCk7XG4gICAgaWYgKG1pbikge1xuICAgICB2YWx1ZSA9IHZhbHVlLnNldE1pbnV0ZXMoMCk7XG4gICAgfVxuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuIC8vIHVwZGF0ZSB0aGUgcmVzcG9uc2UgcmVjb3Jkc1xuIGV4cG9ydCBmdW5jdGlvbiBzZXRVcGRhdGVkUmVjb3JkKHJlY29yZHM6IGFueVtdLCByb3dEYXRhOiBhbnksIGRhdGFLZXk6IHN0cmluZyk6IGFueVtde1xuICBjb25zdCBpbmRleCA9IHJlY29yZHM/LmZpbmRJbmRleCgocmVjb3JkKT0+IHJlY29yZFtkYXRhS2V5Py50b0xvd2VyQ2FzZSgpXSA9PSByb3dEYXRhW2RhdGFLZXk/LnRvTG93ZXJDYXNlKCldKTtcbiAgaWYoaW5kZXggPiAtMSl7XG4gICAgcmVjb3Jkc1tpbmRleF0gPSByb3dEYXRhO1xuICB9ZWxzZXtcbiAgICByZWNvcmRzLnB1c2gocm93RGF0YSk7XG4gIH1cbiAgcmV0dXJuIHJlY29yZHM7XG59XG5cbi8vY29udmVydCB0aGUgdGltZSBpbnRvIGRhdGVcbmV4cG9ydCBmdW5jdGlvbiBzZXRUaW1lSW5EYXRlKHRpbWU6IGFueSkge1xuICBjb25zdCBjb252ZXJ0VGltZTEydG8yNCA9ICh0aW1lMTJoOiBhbnkpID0+IHtcbiAgICBjb25zdCBbdGltZSwgbW9kaWZpZXJdID0gdGltZTEyaD8udG9TdHJpbmcoKT8uc3BsaXQoJyAnKTtcbiAgICBsZXQgW2hvdXJzLCBtaW51dGVzXSA9IHRpbWU/LnNwbGl0KCc6Jyk7XG4gICAgaWYgKGhvdXJzID09PSAnMTInKSB7XG4gICAgICBob3VycyA9ICcwMCc7XG4gICAgfVxuICAgIGlmIChtb2RpZmllciA9PT0gJ1BNJykge1xuICAgICAgaG91cnMgPSBwYXJzZUludChob3VycywgMTApICsgMTI7XG4gICAgfVxuICAgIHJldHVybiBgJHtob3Vyc306JHttaW51dGVzfWA7XG4gIH07XG4gIGNvbnN0IGRhdGUgPSBjb252ZXJ0VGltZTEydG8yNCh0aW1lKTtcbiAgY29uc3QgdGVtcERhdGUgPSBuZXcgRGF0ZSgnSnVseSAxLCAxOTk5LCAnICsgZGF0ZSArICc6MDAnKTtcbiAgY29uc3QgZnV0dXJlRGF0ZSA9IG5ldyBEYXRlKCk7XG4gIGZ1dHVyZURhdGUuc2V0VGltZSh0ZW1wRGF0ZS5nZXRUaW1lKCkpO1xuICByZXR1cm4gZnV0dXJlRGF0ZTtcbn1cblxuLy8gcmV0dXJuIHRoZSBkYXRhIG9mIHRoZSBmaWVsZCBcbmV4cG9ydCBmdW5jdGlvbiBnZXRGaWVsZERhdGEoeyBmb3JtU2VjdGlvbnMgfTogYW55LCBmaWVsZDogc3RyaW5nKXtcbiAgbGV0IGRhdGE6IGFueSA9IFtdXG4gIGlmKGZvcm1TZWN0aW9ucz8ubGVuZ3RoID4gMCAmJiBmaWVsZCl7XG4gICAgZm9ybVNlY3Rpb25zLmZvckVhY2goKHNlY3Rpb246IGFueSk9PntcbiAgICAgIGlmKHNlY3Rpb24uZmllbGRzLnNvbWUoKGZvcm1GaWVsZDphbnkpPT4gZm9ybUZpZWxkLmZpZWxkPy50b0xvd2VyQ2FzZSgpID09IGZpZWxkLnRvTG93ZXJDYXNlKCkpKXtcbiAgICAgICAgZGF0YT1zZWN0aW9uLmZpZWxkcy5maW5kKChmb3JtRmllbGQ6YW55KT0+IGZvcm1GaWVsZC5maWVsZD8udG9Mb3dlckNhc2UoKSA9PSBmaWVsZC50b0xvd2VyQ2FzZSgpKT8uZGF0YVxuICAgICAgfVxuICAgIH0pXG4gIH1cbiAgcmV0dXJuIGRhdGE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRBbGxGb3JtRmllbGRzVmFsdWVzKFxuICB7IGZvcm1TZWN0aW9ucyB9OiBJRHluYW1pY0Zvcm0sXG4gIHByb3BzOiBJRmlsdGVyRGljdGlvbmFyeVtdXG4pIHtcbiAgZm9ybVNlY3Rpb25zPy5tYXAoKHNlY3Rpb246IElGb3JtU2VjdGlvbikgPT4ge1xuICAgIGlmIChzZWN0aW9uKSB7XG4gICAgICBzZWN0aW9uLmZpZWxkcy5tYXAoKGZvcm1GaWVsZDogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiBwcm9wcy5tYXAoKHByb3A6IElGaWx0ZXJEaWN0aW9uYXJ5KSA9PiB7XG4gICAgICAgICAgaWYgKGZvcm1GaWVsZCkge1xuICAgICAgICAgICAgcmV0dXJuIChmb3JtRmllbGRbcHJvcC5wcm9wTmFtZV0gPSBwcm9wLnByb3BWYWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG59XG5cbi8vIHJldHVybnMgdGhlIHJlc3BvbnNlIGhlYWRlciBmaWxlTmFtZVxuZXhwb3J0IGZ1bmN0aW9uIGdldFJlc3BvbnNlSGVhZGVyRmlsZU5hbWUocmVzcG9uc2Upe1xuICBjb25zdCBoZWFkZXIgPSByZXNwb25zZT8uaGVhZGVycz8uZ2V0KCdDb250ZW50LURpc3Bvc2l0aW9uJyk7XG4gIHJldHVybiBoZWFkZXI/LnNwbGl0KCdmaWxlbmFtZT0nKT8uWzFdPy5zcGxpdChcIjtcIilbMF0/LnJlcGxhY2VBbGwoL1xcXCIvZywgJycpO1xufVxuXG4gZXhwb3J0IGZ1bmN0aW9uIGRyYWdnYWJsZURpYWxvZyhpZDphbnkpe1xuICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICBjb25zdCBkaWFsb2cgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdwLWRpYWxvZycpXG4gICAgZGlhbG9nWzBdPy5zZXRBdHRyaWJ1dGUoJ2lkJywnbXlkaXYnICsgaWQpXG4gICAgY29uc3QgZGlhbG9naGVhZGVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgncC1kaWFsb2ctaGVhZGVyJylcbiAgICBkaWFsb2doZWFkZXJbMF0/LnNldEF0dHJpYnV0ZSgnaWQnLCdteWRpdmhlYWRlcicgKyBpZClcbiAgICBjb25zdCBlbG1udCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdteWRpdicgKyBpZCk7XG5cbiAgICAgIGxldCBwb3MxID0gMCxcbiAgICAgICAgcG9zMiA9IDAsXG4gICAgICAgIHBvczMgPSAwLFxuICAgICAgICBwb3M0ID0gMDtcbiAgXG4gICAgICBjb25zdCBkcmFnTW91c2VEb3duID0gKGUpID0+IHtcbiAgICAgICAgZSA9IGUgfHwgd2luZG93LmV2ZW50O1xuICAgICAgICBwb3MzID0gZS5jbGllbnRYO1xuICAgICAgICBwb3M0ID0gZS5jbGllbnRZO1xuICAgICAgICBkb2N1bWVudC5vbm1vdXNldXAgPSBjbG9zZURyYWdFbGVtZW50O1xuICAgICAgICBkb2N1bWVudC5vbm1vdXNlbW92ZSA9IGVsZW1lbnREcmFnO1xuICAgICAgfTtcbiAgXG4gICAgICBjb25zdCBlbGVtZW50RHJhZyA9IChlKSA9PiB7XG4gICAgICAgIGUgPSBlIHx8IHdpbmRvdy5ldmVudDtcbiAgICAgICAgcG9zMSA9IHBvczMgLSBlLmNsaWVudFg7XG4gICAgICAgIHBvczIgPSBwb3M0IC0gZS5jbGllbnRZO1xuICAgICAgICBwb3MzID0gZS5jbGllbnRYO1xuICAgICAgICBwb3M0ID0gZS5jbGllbnRZO1xuICAgICAgICBlbG1udC5zdHlsZS50b3AgPSBlbG1udD8ub2Zmc2V0VG9wIC0gcG9zMiArICdweCc7XG4gICAgICAgIGVsbW50LnN0eWxlLmxlZnQgPSBlbG1udD8ub2Zmc2V0TGVmdCAtIHBvczEgKyAncHgnO1xuICAgICAgfTtcbiAgXG4gICAgICBjb25zdCBjbG9zZURyYWdFbGVtZW50ID0gKCkgPT4ge1xuICAgICAgICBkb2N1bWVudC5vbm1vdXNldXAgPSBudWxsO1xuICAgICAgICBkb2N1bWVudC5vbm1vdXNlbW92ZSA9IG51bGw7XG4gICAgICB9O1xuICBcbiAgICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbXlkaXZoZWFkZXInICsgaWQpKSB7XG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdteWRpdmhlYWRlcicgKyBpZCkub25tb3VzZWRvd24gPSBkcmFnTW91c2VEb3duO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZWxtbnQub25tb3VzZWRvd24gPSBkcmFnTW91c2VEb3duO1xuICAgICAgfVxuICAgIH0sIDEwMCk7XG4gICAgfSAgXG5leHBvcnQgZnVuY3Rpb24gY2FsZW5kYXJNaW5NYXhWYWx1ZShpdGVtOiBhbnksdmFsdWU6IGFueSwgaW5kZXgpe1xuICBsZXQgdmFsaWRhdGlvbjogc3RyaW5nID0gJ2VxdWFsJztcbiAgdmFyIHZhbGlkRGF0ZSA9IG5ldyBEYXRlKGl0ZW0udmFsaWRhdGlvbnNbaW5kZXhdLmV4cHJlc3Npb24pO1xuICB2YXIgY3VycmVudERhdGUgPSBuZXcgRGF0ZSh2YWx1ZSk7XG4gIGlmICh2YWxpZERhdGUuZ2V0VGltZSgpIDwgY3VycmVudERhdGUuZ2V0VGltZSgpKXtcbiAgICB2YWxpZGF0aW9uID0gJ2dyZWF0ZXInO1xuICB9XG4gIGVsc2UgaWYgKHZhbGlkRGF0ZS5nZXRUaW1lKCkgPiBjdXJyZW50RGF0ZS5nZXRUaW1lKCkpe1xuICAgIHZhbGlkYXRpb24gPSAnbWluaW11bSc7XG4gIH1cbiAgcmV0dXJuIHZhbGlkYXRpb247XG59XG4vKiAjZW5kcmVnaW9uICovXG4iXX0=
|
|
1055
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbGl0aWVzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zZS11aS10b29sa2l0L3NyYy9saWIvc2VydmljZXMvdXRpbGl0aWVzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRzdDLE9BQU8sRUFDTCxXQUFXLEVBQ1gsWUFBWSxFQUNaLFVBQVUsRUFDVixVQUFVLEVBQ1YsU0FBUyxHQU1WLE1BQU0sc0JBQXNCLENBQUM7QUFFOUIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUvQiw0QkFBNEI7QUFFNUI7Ozs7Ozs7R0FPRztBQUVGLElBQUksU0FBUyxHQUFHLElBQUksT0FBTyxFQUFPLENBQUM7QUFDbkMsSUFBSSxZQUFZLEdBQUcsSUFBSSxPQUFPLEVBQU8sQ0FBQztBQUN0QyxJQUFJLFNBQVMsR0FBRyxJQUFJLE9BQU8sRUFBTyxDQUFDO0FBQ25DLElBQUksV0FBVyxHQUFHLElBQUksT0FBTyxFQUFPLENBQUM7QUFFdEMsTUFBTSxVQUFVLHNCQUFzQixDQUFDLEVBQU8sRUFBRSxJQUFTLEVBQUUsYUFBbUI7SUFDNUUsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLENBQUMsQ0FBQztBQUM5QyxDQUFDO0FBRUQsTUFBTSxVQUFVLGtCQUFrQixDQUFDLFdBQWdCO0lBQ2pELFlBQVksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDakMsQ0FBQztBQUVELE1BQU0sVUFBVSxvQkFBb0I7SUFDbEMsT0FBTyxZQUFZLENBQUMsWUFBWSxFQUFFLENBQUM7QUFDckMsQ0FBQztBQUVELE1BQU0sVUFBVSx3QkFBd0I7SUFDdEMsT0FBTyxTQUFTLENBQUMsWUFBWSxFQUFFLENBQUM7QUFDbEMsQ0FBQztBQUVELE1BQU0sVUFBVSxrQkFBa0I7SUFDaEMsT0FBTyxXQUFXLENBQUMsWUFBWSxFQUFFLENBQUM7QUFDcEMsQ0FBQztBQUVELE1BQU0sVUFBVSxnQkFBZ0I7SUFDOUIsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3JCLENBQUM7QUFFQSxNQUFNLFVBQVUsd0JBQXdCO0lBQ3ZDLE9BQU8sU0FBUyxDQUFDLFlBQVksRUFBRSxDQUFDO0FBQ2pDLENBQUM7QUFFRCxNQUFNLFVBQVUsc0JBQXNCLENBQUMsSUFBUztJQUMvQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUMzQixDQUFDO0FBRUEsTUFBTSxVQUFVLFdBQVc7SUFDMUIsSUFBSSxLQUFLLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLHVCQUF1QixDQUFlLENBQUE7SUFDdkYsSUFBRyxLQUFLLEVBQUU7UUFDUixLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7S0FDZjtBQUNILENBQUM7QUFFRCxNQUFNLFVBQVUsU0FBUyxDQUFDLEtBQVU7SUFDbEMsSUFBSSxLQUFLLEVBQUU7UUFDVCxPQUFPLFVBQVUsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDaEQ7QUFDSCxDQUFDO0FBRUQsTUFBTSxVQUFVLFNBQVMsQ0FBQyxLQUFVO0lBQ2xDLE9BQU8sS0FBSyxFQUFFLFdBQVcsRUFBRSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDckQsQ0FBQztBQUVELE1BQU0sVUFBVSxXQUFXLENBQUMsS0FBVSxFQUFFLE1BQWdCO0lBQ3RELElBQUksS0FBSyxJQUFJLEtBQUssS0FBSyxFQUFFLEVBQUU7UUFDekIsSUFDRSxNQUFNO1lBQ04sQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLFdBQVcsQ0FBQyxRQUFRO2dCQUNuQyxNQUFNLENBQUMsSUFBSSxLQUFLLFdBQVcsQ0FBQyxVQUFVLENBQUMsRUFDekM7WUFDQSxPQUFPLEtBQUssQ0FBQztTQUNkO2FBQU07WUFDTCxPQUFPLFVBQVUsQ0FBQyxLQUFLLEVBQUUsWUFBWSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1NBQ2pEO0tBQ0Y7U0FBTTtRQUNMLE9BQU8sSUFBSSxDQUFDO0tBQ2I7QUFDSCxDQUFDO0FBRUQsTUFBTSxVQUFVLGVBQWUsQ0FBQyxLQUFVLEVBQUUsTUFBZ0I7SUFDMUQsSUFBSSxLQUFLLElBQUksS0FBSyxLQUFLLEVBQUUsSUFBSSxLQUFLLEVBQUUsUUFBUSxFQUFFLElBQUksY0FBYyxFQUFFO1FBQ2hFLElBQ0UsTUFBTTtZQUNOLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxXQUFXLENBQUMsUUFBUTtnQkFDbkMsTUFBTSxDQUFDLElBQUksS0FBSyxXQUFXLENBQUMsVUFBVSxDQUFDLEVBQ3pDO1lBQ0EsT0FBTyxLQUFLLENBQUM7U0FDZDthQUFNO1lBQ0wsT0FBTyxVQUFVLENBQUMsS0FBSyxFQUFFLG9CQUFvQixFQUFFLE9BQU8sQ0FBQyxDQUFDO1NBQ3pEO0tBQ0Y7U0FBTTtRQUNMLE9BQU8sSUFBSSxDQUFDO0tBQ2I7QUFDSCxDQUFDO0FBRUQsTUFBTSxVQUFVLGFBQWEsQ0FBQyxPQUFxQixFQUFFLFNBQWdCLEVBQUUsS0FBUztJQUM5RSxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFDLEVBQUU7UUFDdkIsSUFBRyxNQUFNLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxLQUFLLFNBQVMsRUFBRSxXQUFXLEVBQUUsSUFBSSxNQUFNLENBQUMsU0FBUyxFQUFDO1lBQzlFLElBQUksSUFBSSxHQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDNUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBQyxFQUFFO2dCQUNsQixNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksR0FBQyxFQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUMsQ0FBQztZQUM1RCxDQUFDLENBQUMsQ0FBQTtTQUNIO0lBQ0wsQ0FBQyxDQUFDLENBQUE7QUFDSixDQUFDO0FBRUQsTUFBTSxVQUFVLE1BQU0sQ0FBQyxJQUFTO0lBQzlCLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxFQUFFO1FBQzVCLE9BQU8sSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0tBQ3BCO1NBQU07UUFDTCxPQUFPLElBQUksQ0FBQztLQUNiO0FBQ0gsQ0FBQztBQUVELE1BQU0sVUFBVSxXQUFXLENBQUMsR0FBUSxFQUFFLFFBQWdCO0lBQ3BELElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUU7UUFDckIsT0FBTyxFQUFFLENBQUM7S0FDWDtJQUVELElBQUksVUFBVSxHQUFHLEVBQUUsQ0FBQztJQUNwQixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDdEIsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ2xCLE1BQU0sSUFBSSxHQUFVLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDckMsSUFBSSxDQUFDLFVBQVUsSUFBSSxVQUFVLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtnQkFDMUMsVUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQ3BCLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLEtBQUssUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUNsRCxDQUFDO2FBQ0g7UUFDSCxDQUFDLENBQUMsQ0FBQztLQUNKO1NBQU07UUFDTCxNQUFNLElBQUksR0FBVSxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3JDLFVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLEtBQUssUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7S0FDM0U7SUFFRCxPQUFPLFVBQVUsQ0FBQztBQUNwQixDQUFDO0FBRUQsTUFBTSxVQUFVLG9CQUFvQixDQUFDLFNBQXFCLEVBQUUsS0FBVTtJQUNwRSxJQUFJLGNBQWMsR0FBUSxLQUFLLENBQUM7SUFDaEMsSUFBSSxTQUFTLENBQUMsTUFBTSxFQUFFO1FBQ3BCLFFBQVEsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUU7WUFDN0IsS0FBSyxXQUFXLENBQUMsT0FBTztnQkFDdEIsY0FBYyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDbEMsTUFBTTtZQUNSLEtBQUssV0FBVyxDQUFDLFVBQVU7Z0JBQ3pCLGNBQWMsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ2xDLE1BQU07WUFDUixLQUFLLFdBQVcsQ0FBQyxTQUFTO2dCQUN4QixjQUFjLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNwQyxNQUFNO1lBQ1IsS0FBSyxXQUFXLENBQUMsTUFBTTtnQkFDckIsSUFBSSxTQUFTLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRTtvQkFDOUIsY0FBYyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO2lCQUNwRDtnQkFDRCxNQUFNO1lBQ1I7Z0JBQ0UsTUFBTTtTQUNUO0tBQ0Y7SUFDRCxPQUFPLGNBQWMsQ0FBQztBQUN4QixDQUFDO0FBRUQsTUFBTSxVQUFVLFlBQVksQ0FDMUIsRUFBRSxZQUFZLEVBQWdCLEVBQzlCLFlBQXdCO0lBRXhCLE9BQU8sWUFBWSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1FBQ25DLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBcUIsRUFBRSxFQUFFO1lBQ3BFLElBQ0UsU0FBUyxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsS0FBSyxZQUFZLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRTtnQkFDcEUsQ0FBQyxTQUFTLENBQUMsS0FBSyxJQUFJLFNBQVMsQ0FBQyxLQUFLLEtBQUssWUFBWSxDQUFDLEtBQUssQ0FBQyxFQUMzRDtnQkFDQSxTQUFTLEdBQUcsWUFBWSxDQUFDO2FBQzFCO1lBQ0QsT0FBTyxTQUFTLENBQUM7UUFDbkIsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNOLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELE1BQU0sVUFBVSx5QkFBeUIsQ0FDdkMsRUFBRSxZQUFZLEVBQWdCLEVBQzlCLEtBQWEsRUFDYixJQUFTO0lBRVQsWUFBWSxFQUFFLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1FBQ2hDLElBQUksS0FBSyxHQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxLQUFLLEtBQUcsS0FBSyxDQUFDLENBQUE7UUFDNUUsSUFBRyxLQUFLLElBQUksS0FBSyxDQUFDLFNBQVM7WUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7SUFDOUQsQ0FBQyxDQUFDLENBQUM7QUFDSCxDQUFDO0FBRUQsTUFBTSxVQUFVLG1CQUFtQixDQUNqQyxNQUFhLEVBQ2IsUUFBYSxFQUNiLFFBQWdCLEVBQ2hCLFFBQWdCO0lBRWhCLElBQUcsTUFBTSxFQUFFLE1BQU0sR0FBRyxDQUFDLEVBQUM7UUFDcEIsTUFBTSxHQUFHLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLFFBQVEsRUFBQyxDQUFDLENBQUMsQ0FBQztLQUNwRjtJQUNELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFFRCxNQUFNLFVBQVUsYUFBYSxDQUMzQixFQUFFLFlBQVksRUFBZ0IsRUFDOUIsS0FBYSxFQUNiLElBQVM7SUFFVCxZQUFZLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBcUIsRUFBRSxFQUFFO1FBQzFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBYyxFQUFFLEVBQUU7WUFDcEMsSUFBSSxTQUFTLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxLQUFLLEtBQUssRUFBRSxXQUFXLEVBQUUsRUFBRTtnQkFDM0QsSUFDRSxTQUFTLENBQUMsS0FBSztvQkFDZixTQUFTLENBQUMsS0FBSyxDQUFDLFlBQVk7b0JBQzVCLFNBQVMsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLGFBQWE7b0JBQzFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxJQUFJO29CQUMvQyxJQUFJLEVBQ0o7b0JBQ0EsU0FBUyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO2lCQUM3RDtnQkFDRCxJQUFJLFNBQVMsQ0FBQyxhQUFhLElBQUksU0FBUyxDQUFDLGFBQWEsQ0FBQyxJQUFJLElBQUksSUFBSSxFQUFFO29CQUNuRSxTQUFTLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO2lCQUMxQzthQUNGO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUNILE9BQU8sWUFBWSxDQUFDO0FBQ3RCLENBQUM7QUFFRCxNQUFNLFVBQVUseUJBQXlCLENBQUMsSUFBWSxFQUFFLE1BQWE7SUFDbkUsSUFBSSxPQUFPLEdBQVcsSUFBSSxDQUFDO0lBQzNCLElBQUksTUFBTSxJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1FBQy9CLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNuQixNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUN2RCxJQUFJLE9BQU8sQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQzlCLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksTUFBTSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7YUFDdkU7UUFDSCxDQUFDLENBQUMsQ0FBQztLQUNKO0lBQ0QsT0FBTyxPQUFPLENBQUM7QUFDakIsQ0FBQztBQUVELE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxXQUF5QixFQUFFLFdBQWtCLEVBQUUsU0FBb0I7SUFDbkcsTUFBTSxPQUFPLEdBQUcsV0FBVyxFQUFFLFlBQVksRUFBRSxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEtBQUssV0FBVyxDQUFDLENBQUM7SUFDMUYsSUFBRyxPQUFPLEVBQUM7UUFDVCxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztLQUNoQztJQUNELE9BQU8sV0FBVyxDQUFDO0FBQ3JCLENBQUM7QUFFRCxNQUFNLFVBQVUsYUFBYSxDQUMzQixFQUFFLFlBQVksRUFBZ0IsRUFDOUIsVUFBd0I7SUFFeEIsT0FBTyxZQUFZLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7UUFDbkMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRTtZQUN4RCxJQUFJLFlBQVksR0FBRyxVQUFVLENBQUMsSUFBSSxDQUNoQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsSUFBSSxTQUFTLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxDQUNoRSxDQUFDO1lBQ0YsSUFBSSxZQUFZLEVBQUU7Z0JBQ2hCLFNBQVMsR0FBRyxZQUFZLENBQUM7YUFDMUI7WUFDRCxPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ04sQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsTUFBTSxVQUFVLGdCQUFnQixDQUM5QixhQUFnQyxFQUNoQyxLQUFhO0lBRWIsSUFBSSxZQUFpQixDQUFDO0lBQ3RCLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUMsRUFBRTtRQUMxQixJQUFJLE1BQU0sQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLEtBQUssS0FBSyxFQUFFLFdBQVcsRUFBRSxFQUFFO1lBQ3hELFlBQVksR0FBRyxNQUFNLENBQUM7U0FDckI7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUNILE9BQU8sWUFBWSxDQUFDO0FBQ3RCLENBQUM7QUFFRCxNQUFNLFVBQVUsYUFBYSxDQUMzQixFQUFFLFlBQVksRUFBZ0IsRUFDOUIsV0FBeUI7SUFFekIsSUFBSSxVQUFVLEdBQWlCLEVBQUUsQ0FBQztJQUNsQyxZQUFZLEVBQUUsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7UUFDaEMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRTtZQUNuQyxJQUFJLFNBQVMsQ0FBQyxPQUFPLEtBQUssV0FBVyxFQUFFO2dCQUNyQyxJQUFJLE9BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEtBQUssUUFBUSxJQUFJLFNBQVMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxJQUFJLE9BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLFFBQVEsRUFDOUc7b0JBQ0csU0FBUyxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztpQkFDaEQ7cUJBQ0ksSUFBSSxTQUFTLENBQUMsS0FBSyxJQUFJLE9BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEtBQUssUUFBUSxFQUNoRTtvQkFDRSxTQUFTLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7aUJBQzFDO2dCQUNELFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7YUFDNUI7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0gsT0FBTyxVQUFVLENBQUM7QUFDcEIsQ0FBQztBQUVELE1BQU0sVUFBVSxZQUFZLENBQzFCLEVBQUUsWUFBWSxFQUFnQixFQUM5QixLQUFhO0lBRWIsSUFBSSxZQUFpQixDQUFDO0lBQ3RCLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtRQUNoQyxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFO1lBQ25DLElBQUksU0FBUyxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsS0FBSyxLQUFLLEVBQUUsV0FBVyxFQUFFLEVBQUU7Z0JBQzNELFlBQVksR0FBRyxTQUFTLENBQUM7YUFDMUI7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0gsT0FBTyxZQUFZLENBQUM7QUFDdEIsQ0FBQztBQUVELDJHQUEyRztBQUMzRyw4REFBOEQ7QUFDOUQsTUFBTSxVQUFVLGlCQUFpQixDQUMvQixFQUFFLFlBQVksRUFBZ0IsRUFDOUIsS0FBYSxFQUNiLDBCQUFrQyxLQUFLO0lBRXZDLElBQUksS0FBSyxDQUFDO0lBQ1YsS0FBSyxNQUFNLE9BQU8sSUFBSSxZQUFtQixFQUFFO1FBQ3pDLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBYyxFQUFFLEVBQUU7WUFDeEMsSUFBSSxTQUFTLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxLQUFLLEtBQUssRUFBRSxXQUFXLEVBQUUsRUFBRTtnQkFDM0QsSUFBSSxPQUFPLEdBQUcsT0FBTyxTQUFTLENBQUMsS0FBSyxLQUFLLFFBQVEsSUFBSSxTQUFTLENBQUMsT0FBTyxLQUFLLFlBQVksQ0FBQyxRQUFRLElBQUksdUJBQXVCLENBQUM7Z0JBQzVILElBQ0UsQ0FBQyxTQUFTLENBQUMsT0FBTyxLQUFLLFlBQVksQ0FBQyxZQUFZLElBQUksU0FBUyxDQUFDLE9BQU8sS0FBSyxZQUFZLENBQUMsS0FBSyxDQUFDO29CQUM3RixTQUFTLENBQUMsWUFBWSxFQUN0QjtvQkFDQSxLQUFLLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUM7aUJBQ2xFO3FCQUFNO29CQUNMLEtBQUssR0FBRyxPQUFPO3dCQUNiLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLElBQUk7d0JBQ3ZCLENBQUMsQ0FBQyxPQUFPLFNBQVMsQ0FBQyxLQUFLLEtBQUssUUFBUSxJQUFJLFNBQVMsQ0FBQyxPQUFPLEtBQUssWUFBWSxDQUFDLFFBQVEsSUFBSSxTQUFTLENBQUMsT0FBTyxLQUFLLFlBQVksQ0FBQyxXQUFXOzRCQUN0SSxDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxLQUFLOzRCQUN4QixDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQztpQkFDckI7YUFDRjtRQUNILENBQUMsQ0FBQyxDQUFDO0tBQ0o7SUFDRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFRCxNQUFNLFVBQVUseUJBQXlCLENBQUMsV0FBd0IsRUFBQyxLQUFZO0lBQzdFLElBQUksS0FBSyxHQUFPLGlCQUFpQixDQUFDLFdBQVcsRUFBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDM0QsSUFBSSxLQUFLLEVBQUM7UUFDUixLQUFLLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO0tBQ3pCO0lBQ0QsT0FBTyxLQUFLLENBQUM7QUFDaEIsQ0FBQztBQUVELE1BQU0sVUFBVSxvQkFBb0IsQ0FDbEMsWUFBNEIsRUFDNUIsS0FBYTtJQUViLElBQUksSUFBSSxHQUFpQixFQUFFLFlBQVksRUFBRSxDQUFDO0lBQzFDLE9BQU8saUJBQWlCLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztBQUM5QyxDQUFDO0FBRUQsTUFBTSxVQUFVLGlCQUFpQixDQUMvQixZQUE0QixFQUM1QixNQUFpQjtJQUVqQixJQUFJLFFBQVEsR0FBUSxFQUFFLENBQUM7SUFDdkIsSUFBSSxNQUFNLElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7UUFDL0IsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFO1lBQzNCLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRTtnQkFDbkMsTUFBTSxhQUFhLEdBQUcsV0FBVyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxLQUFLLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFFdkYsYUFBYSxFQUFFLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO29CQUMvQixNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7b0JBRWhFLElBQUksS0FBSyxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDLEVBQUU7d0JBQ3BELElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEVBQUU7NEJBQ3hCLFFBQVEsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUM7eUJBQzFCO3dCQUVELElBQUksS0FBSyxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7NEJBQ3pDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUM7eUJBQ2pFO3FCQUNGO2dCQUNILENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztLQUNKO1NBQU07UUFDTCxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsV0FBVyxFQUFFLEVBQUU7WUFDbkMsTUFBTSxhQUFhLEdBQUcsV0FBVyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxLQUFLLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNyRixhQUFhLEVBQUUsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQy9CLElBQUksS0FBSyxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7b0JBQ3pDLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUM7aUJBQ3REO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDLENBQUMsQ0FBQztLQUNKO0lBRUQsT0FBTyxRQUFRLENBQUM7QUFDbEIsQ0FBQztBQUVELE1BQU0sVUFBVSxpQkFBaUIsQ0FDL0IsWUFBNEIsRUFDNUIsTUFBaUI7SUFFakIsSUFBSSxNQUFNLEdBQWlCLEVBQUUsQ0FBQztJQUM5QixZQUFZLEVBQUUsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7UUFDaEMsT0FBTyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQyxLQUFVLEVBQUUsRUFBRTtZQUNyQyxJQUFJLEtBQUssQ0FBQyxPQUFPLEtBQUssWUFBWSxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRTtnQkFDMUQsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBYSxFQUFFLEVBQUU7b0JBQ3hDLElBQUksUUFBUSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUU7d0JBQ3JDLE1BQU0sQ0FBQyxJQUFJLENBQ1QsaUJBQWlCLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUUsTUFBTSxDQUFDLENBQzdELENBQUM7cUJBQ0g7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7YUFDSjtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDSCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBRUQsTUFBTSxVQUFVLGlCQUFpQixDQUFDLElBQVMsRUFBRSxXQUF5QjtJQUNwRSxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO1FBQ2xELElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUN2QixxQkFBcUIsQ0FBQyxPQUFPLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3BELENBQUMsQ0FBQyxDQUFDO0tBQ0o7U0FBTTtRQUNMLHFCQUFxQixDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQztLQUMxQztBQUNILENBQUM7QUFFRCxNQUFNLFVBQVUsU0FBUyxDQUN2QixLQUFhLEVBQ2IsS0FBVSxFQUNWLFlBQXdCLFVBQVUsQ0FBQyxNQUFNLEVBQ3pDLFdBQXNCLFNBQVMsQ0FBQyxHQUFHO0lBRW5DLE1BQU0sTUFBTSxHQUFRO1FBQ2xCLEtBQUssRUFBRSxLQUFLO1FBQ1osU0FBUyxFQUFFLFNBQVM7UUFDcEIsUUFBUSxFQUFFLFFBQVE7UUFDbEIsS0FBSyxFQUFFLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxDQUFDLEtBQUssRUFBRSxLQUFLLElBQUksS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLO0tBQ3pGLENBQUM7SUFDRixPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBRUQsTUFBTSxVQUFVLFlBQVksQ0FBQyxLQUFhLEVBQUUsS0FBVTtJQUNwRCxPQUFPLFNBQVMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLFVBQVUsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0FBQ2xFLENBQUM7QUFFRCxNQUFNLFVBQVUscUJBQXFCLENBQUMsSUFBUyxFQUFFLFFBQWdCO0lBQy9ELElBQUksS0FBVSxDQUFDO0lBQ2YsSUFBSSxJQUFJLEVBQUU7UUFDUixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDdkIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ3BDLEtBQUssR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUM7Z0JBQzVDLElBQUksS0FBSyxFQUFFO29CQUNULE9BQU8sS0FBSyxDQUFDO2lCQUNkO2FBQ0Y7U0FDRjthQUFNO1lBQ0wsS0FBSyxHQUFHLGdCQUFnQixDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztTQUMxQztLQUNGO0lBQ0QsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBRUQsTUFBTSxVQUFVLDZCQUE2QixDQUMzQyxJQUFTLEVBQ1QsUUFBZ0I7SUFFaEIsSUFBSSxLQUFLLEdBQUcscUJBQXFCLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ2xELElBQUksS0FBSyxFQUFFO1FBQ1QsT0FBTyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7S0FDekI7U0FBTTtRQUNMLE9BQU8sRUFBRSxDQUFDO0tBQ1g7QUFDSCxDQUFDO0FBRUQsTUFBTSxVQUFVLG9CQUFvQixDQUNsQyxFQUFFLFlBQVksRUFBZ0IsRUFDOUIsV0FBbUIsRUFDbkIsS0FBb0I7SUFFcEIsWUFBWSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1FBQzVCLElBQUksT0FBTyxDQUFDLElBQUksRUFBRSxXQUFXLEVBQUUsS0FBSyxXQUFXLENBQUMsV0FBVyxFQUFFLEVBQUU7WUFDN0QsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO2dCQUNqQixPQUFPLFlBQVksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDckMsQ0FBQyxDQUFDLENBQUM7U0FDSjtJQUNILENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELGdCQUFnQjtBQUVoQiw2QkFBNkI7QUFFN0IsU0FBUyxxQkFBcUIsQ0FBQyxJQUFTLEVBQUUsV0FBd0MsRUFBRSxVQUFpQixFQUFFO0lBQ3JHLElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7UUFDM0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFXLEVBQUUsRUFBRTtZQUNuQyxNQUFNLElBQUksR0FBYSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzNDLFdBQVcsQ0FBQyxZQUFZLEVBQUUsT0FBTyxDQUFDLENBQUMsV0FBVyxFQUFFLEVBQUU7Z0JBQ2hELElBQUksV0FBVyxDQUFDLE1BQU0sRUFBRTtvQkFDdEIsV0FBVyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFjLEVBQUUsRUFBRTt3QkFDNUMsTUFBTSxVQUFVLEdBQVEsSUFBSSxDQUFDLElBQUksQ0FDL0IsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsS0FBSyxTQUFTLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxDQUMxRCxDQUFDO3dCQUVGLElBQUksVUFBVSxFQUFFOzRCQUNkLHNCQUFzQjs0QkFDdEIsaUJBQWlCLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7eUJBQ3JEO3dCQUVELElBQ0UsU0FBUyxDQUFDLE9BQU8sS0FBSyxZQUFZLENBQUMsU0FBUzs0QkFDNUMsU0FBUyxDQUFDLFNBQVM7NEJBQ25CLENBQUMsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sSUFBSSxTQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQztnQ0FDekQsU0FBUyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFDM0I7NEJBQ0EsSUFBSSxNQUFNLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUM7NEJBQ3hDLElBQUksU0FBUyxHQUFhLEVBQUUsQ0FBQzs0QkFFN0IsSUFDRSxDQUFDLE1BQU07Z0NBQ1AsU0FBUyxDQUFDLFNBQVMsQ0FBQyxJQUFJO2dDQUN4QixTQUFTLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQ3ZDO2dDQUNBLFNBQVMsR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7Z0NBQ2pELFNBQVMsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUU7b0NBQ3JDLFFBQVEsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztvQ0FDN0MsT0FBTyxRQUFRLENBQUM7Z0NBQ2xCLENBQUMsQ0FBQyxDQUFDO2dDQUNILFNBQVMsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDOzZCQUNuRDtpQ0FBTTtnQ0FDTCxJQUFHLE1BQU0sRUFBQztvQ0FDUixTQUFTLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztpQ0FDakM7NkJBQ0Y7NEJBRUQsU0FBUyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEdBQUcsWUFBWSxDQUNyQyxJQUFJLEVBQ0osTUFBTSxFQUNOLFNBQVMsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUN4QixTQUFTLEVBQ1QsU0FBUyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQzFCLE9BQU8sQ0FDUixDQUFDO3lCQUNIOzZCQUFNOzRCQUNMLElBQUksU0FBUyxDQUFDLE9BQU8sS0FBSyxZQUFZLENBQUMsUUFBUSxJQUFJLFVBQVUsRUFBRTtnQ0FDN0QsU0FBUyxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUM7b0NBQzVFLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFXLENBQUM7b0NBQ3hDLENBQUMsQ0FBQyxFQUFFLENBQUM7NkJBQ047aUNBQU0sSUFBSSxTQUFTLENBQUMsT0FBTyxLQUFLLFlBQVksQ0FBQyxJQUFJLEVBQUU7Z0NBQ2xELElBQUksU0FBUyxDQUFDLElBQUksSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRTtvQ0FDakQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFO3dDQUN4QixTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7cUNBQzVCO29DQUVELHFCQUFxQixDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7aUNBQzdDOzZCQUNGO2lDQUFNLElBQ1AsU0FBUyxDQUFDLE9BQU8sS0FBSyxZQUFZLENBQUMsWUFBWTtnQ0FDL0MsVUFBVSxFQUNWO2dDQUNBLElBQUksVUFBVSxHQUFHLEVBQUUsQ0FBQztnQ0FDcEIsSUFBSSxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksU0FBUyxDQUFDLFlBQVksRUFBRTtvQ0FDaEQsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFDLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxFQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsRUFBQyxDQUFDLENBQUM7aUNBQ2xFO2dDQUNELFNBQVMsQ0FBQyxLQUFLLEdBQUcsVUFBVSxDQUFDOzZCQUM5QjtpQ0FBTSxJQUFJLFNBQVMsQ0FBQyxPQUFPLEtBQUssWUFBWSxDQUFDLFlBQVksSUFBSSxTQUFTLENBQUMsT0FBTyxLQUFLLFlBQVksQ0FBQyxLQUFLLEVBQUU7Z0NBQ3RHLElBQ0UsU0FBUyxDQUFDLEtBQUs7b0NBQ2YsU0FBUyxDQUFDLEtBQUssQ0FBQyxZQUFZO29DQUM1QixTQUFTLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxhQUFhO29DQUMxQyxTQUFTLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUMvQztvQ0FDQSxNQUFNLEdBQUcsR0FBRyxpQkFBaUIsQ0FDM0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQ3BELE1BQU0sQ0FDUCxDQUFDO29DQUNGLElBQUksR0FBRyxFQUFFO3dDQUNQLFNBQVMsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztxQ0FDNUQ7aUNBQ0Y7Z0NBRUQsSUFDRSxTQUFTLENBQUMsYUFBYTtvQ0FDdkIsU0FBUyxDQUFDLGFBQWEsQ0FBQyxJQUFJO29DQUM1QixTQUFTLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQ2pDO29DQUNBLE1BQU0sR0FBRyxHQUFHLGlCQUFpQixDQUMzQixTQUFTLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQ2pDLE1BQU0sQ0FDUCxDQUFDO29DQUNGLElBQUksR0FBRyxFQUFFO3dDQUNQLFNBQVMsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7cUNBQ3pDO2lDQUNGO2dDQUNELElBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxFQUFDO29DQUNwQixTQUFTLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztpQ0FDOUM7Z0NBQ0QsSUFDRSxTQUFTLENBQUMsWUFBWTtvQ0FDdEIsU0FBUyxDQUFDLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUNqQztvQ0FDQSxNQUFNLGlCQUFpQixHQUFHLFdBQVcsQ0FDbkMsTUFBTSxFQUNOLFNBQVMsQ0FBQyxZQUFZLENBQ3ZCLENBQUM7b0NBQ0YsSUFBSSxpQkFBaUIsRUFBRTt3Q0FDckIsU0FBUyxDQUFDLEtBQUssR0FBRzs0Q0FDaEIsSUFBSSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQzs0Q0FDdkMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxLQUFLLEVBQUUsS0FBSzt5Q0FDOUIsQ0FBQztxQ0FDSDtvQ0FFRCxNQUFNLGVBQWUsR0FBRyxXQUFXLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztvQ0FDN0QsSUFBSSxlQUFlLEVBQUU7d0NBQ25CLFNBQVMsQ0FBQyxLQUFLLEdBQUc7NENBQ2hCLElBQUksRUFBRSxTQUFTLENBQUMsS0FBSyxFQUFFLElBQUk7NENBQzNCLEtBQUssRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO3lDQUN2QyxDQUFDO3FDQUNIO2lDQUNGOzZCQUNGO2lDQUFNLElBQ0wsU0FBUyxDQUFDLE9BQU8sS0FBSyxZQUFZLENBQUMsU0FBUztnQ0FDNUMsU0FBUyxDQUFDLGdCQUFnQixFQUFFLElBQUksRUFDaEM7Z0NBQ0EsTUFBTSxpQkFBaUIsR0FBRyxnQkFBZ0IsQ0FDeEMsU0FBUyxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFDL0IsTUFBTSxDQUNQLENBQUM7Z0NBQ0YsU0FBUyxDQUFDLGdCQUFnQixDQUFDLElBQUksR0FBRyxpQkFBaUIsRUFBRSxJQUFJLENBQUM7Z0NBQzFELElBQUcsaUJBQWlCLEVBQUUsU0FBUyxFQUFDO29DQUM5QixzQkFBc0IsQ0FDcEIsU0FBUyxDQUFDLGdCQUFnQixDQUFDLEVBQUUsRUFDN0IsU0FBUyxDQUFDLGdCQUFnQixFQUFFLElBQUksRUFDaEMsS0FBSyxDQUNOLENBQUM7aUNBQ0g7NkJBQ0Y7aUNBQU0sSUFDTCxTQUFTLENBQUMsT0FBTyxLQUFLLFlBQVksQ0FBQyxPQUFPO2dDQUMxQyxTQUFTLENBQUMsS0FBSyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLElBQUksRUFDeEQ7Z0NBQ0EsSUFBSSxPQUFPLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDO2dDQUN6RCxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsRUFBRSxJQUFJLENBQUM7Z0NBQ3RFLHNCQUFzQixDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7NkJBQzlEO2lDQUFNLElBQUksU0FBUyxDQUFDLE9BQU8sS0FBSyxZQUFZLENBQUMsU0FBUzttQ0FDakQsU0FBUyxDQUFDLFNBQVMsRUFBRSxNQUFNLEtBQUssVUFBVSxDQUFDLE1BQU07bUNBQ2xELFNBQVMsQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUM3QjtnQ0FDQSxTQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsRUFBRSxJQUFJLENBQUM7NkJBQ3pGO2lDQUFNLElBQUksVUFBVSxFQUFFO2dDQUNyQixJQUFJLFNBQVMsQ0FBQyxNQUFNLEVBQUU7b0NBQ3BCLFNBQVMsQ0FBQyxLQUFLLEdBQUcsb0JBQW9CLENBQ3BDLFNBQVMsRUFDVCxNQUFNLENBQUMsVUFBVSxDQUFDLENBQ25CLENBQUM7aUNBQ0g7cUNBQU0sSUFBSSxTQUFTLENBQUMsT0FBTyxLQUFLLFlBQVksQ0FBQyxRQUFRLEVBQUU7b0NBQ3RELFNBQVMsQ0FBQyxLQUFLO3dDQUNiLE1BQU0sQ0FBQyxVQUFVLENBQUM7NENBQ2xCLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxLQUFLLEdBQUc7Z0RBQ3BDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxRQUFRLEVBQUUsS0FBSyxNQUFNLENBQUM7NENBQ3pDLENBQUMsQ0FBQyxJQUFJOzRDQUNOLENBQUMsQ0FBQyxLQUFLLENBQUM7aUNBQ2I7cUNBQUssSUFBSSxTQUFTLENBQUMsT0FBTyxLQUFLLFlBQVksQ0FBQyxRQUFRLEVBQUU7b0NBQ3JELElBQUksU0FBUyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztvQ0FDbkMsU0FBUyxDQUFDLEtBQUssR0FBRyxTQUFTO3dDQUN6QixDQUFDLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRTt3Q0FDdEIsQ0FBQyxDQUFDLFNBQVMsQ0FBQztpQ0FDZjtxQ0FBTSxJQUFHLFNBQVMsQ0FBQyxPQUFPLEtBQUcsWUFBWSxDQUFDLFlBQVksRUFBQztvQ0FDckQsU0FBUyxDQUFDLEtBQUssR0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksU0FBUyxDQUFDLEtBQUssQ0FBQTtpQ0FDL0Q7cUNBQU07b0NBQ0wsU0FBUyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7aUNBQzlDOzZCQUNGO3lCQUNGO29CQUNILENBQUMsQ0FBQyxDQUFDO2lCQUNKO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztLQUNKO0FBQ0gsQ0FBQztBQUVELDBDQUEwQztBQUMxQyxNQUFNLFVBQVUsc0JBQXNCLENBQUMsTUFBVSxFQUFFLFdBQXlCO0lBQzFFLElBQUksSUFBSSxHQUFhLEVBQUUsQ0FBQztJQUN4QixJQUFJLElBQUksR0FBVSxFQUFFLENBQUM7SUFDckIsSUFBSSxTQUFTLEdBQWEsRUFBRSxDQUFDO0lBQzdCLElBQUksS0FBVSxDQUFDO0lBQ2YsSUFBSSxTQUFjLENBQUM7SUFDakIsV0FBVyxDQUFDLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FBQyxPQUFZLEVBQUUsRUFBRTtRQUNqRCxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQWMsRUFBRSxFQUFFO1lBQ3hDLElBQUcsU0FBUyxDQUFDLEtBQUssSUFBSSxTQUFTLENBQUMsS0FBSyxDQUFDLFlBQVksSUFBSSxTQUFTLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFDO2dCQUNqRyxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDM0IsSUFBRyxTQUFTLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUM7b0JBQzlDLElBQUksR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUM7aUJBQ2hEO2dCQUVELElBQUcsU0FBUyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBQztvQkFDcEQsS0FBSyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUM7b0JBQ3RELFNBQVMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2lCQUMvQjtnQkFDRCxTQUFTLEdBQUcsU0FBUyxDQUFDO2dCQUN0QixJQUFHLE1BQU0sSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLFNBQVMsSUFBSSxLQUFLLElBQUksU0FBUyxFQUFDO29CQUMzRCxTQUFTLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsSUFBSSxHQUFHLFlBQVksQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7aUJBQ2xHO2FBQ0Y7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQztBQUVELE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxHQUFRO0lBQ3hDLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxXQUFnQixFQUFFLEdBQUcsRUFBRSxFQUFFO1FBQ3ZELFdBQVcsQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDMUMsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ1QsQ0FBQztBQUVELE1BQU0sVUFBVSxxQkFBcUIsQ0FBQyxLQUFVO0lBQzlDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQywrQ0FBK0MsQ0FBQyxDQUFDO0lBQ3RFLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxJQUFJLEVBQUUsYUFBYSxDQUFDLFlBQVksR0FBRSxLQUFLLEVBQUUsSUFBSSxHQUFFLElBQUksQ0FBQyxDQUFDO0lBQzVFLE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLENBQUMsa0NBQWtDLENBQUMsQ0FBQztJQUN6RixZQUFZLEVBQUUsT0FBTyxDQUFDLENBQUMsU0FBYyxFQUFFLEVBQUU7UUFDeEMsU0FBUyxFQUFFLFlBQVksQ0FBQyxPQUFPLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztJQUN2RCxDQUFDLENBQUMsQ0FBQTtJQUNELEtBQUssRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLFlBQVksQ0FBQyxPQUFPLEVBQUUsMEJBQTBCLENBQUMsQ0FBQztJQUN2RixLQUFLLEVBQUUsYUFBYSxFQUFFLFlBQVksQ0FBQyxPQUFPLEVBQUUsc0RBQXNELENBQUMsQ0FBQztJQUVwRyxNQUFNLFVBQVUsR0FBRyxRQUFRLENBQUMsSUFBSSxFQUFFLGdCQUFnQixDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3pFLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQyxJQUFTLEVBQUUsS0FBVSxFQUFFLEVBQUU7UUFDMUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxPQUFPLEVBQUUsc0RBQXNELENBQUMsQ0FBQztJQUN4RixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxNQUFNLFVBQVUscUJBQXFCO0lBQ25DLE1BQU0sVUFBVSxHQUFHLFFBQVEsQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDbkUsSUFBSSxVQUFVLElBQUksVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7UUFDdkMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDLElBQVMsRUFBRSxLQUFVLEVBQUUsRUFBRTtZQUM1QyxJQUFJLEVBQUUsWUFBWSxDQUFDLE9BQU8sRUFBQyxzREFBc0QsQ0FBQyxDQUFDO1FBQ3JGLENBQUMsQ0FBQyxDQUFDO0tBQ0o7QUFDSCxDQUFDO0FBRUQsTUFBTSxVQUFVLG9CQUFvQjtJQUNsQyxRQUFRLENBQUMsYUFBYSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRTtRQUMxRSxNQUFNLGlCQUFpQixHQUFRLFFBQVEsQ0FBQyxhQUFhLENBQUMsaUJBQWlCLENBQUMsRUFBRSxTQUFTLENBQUM7UUFDcEYsTUFBTSxlQUFlLEdBQVEsUUFBUSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQywrQ0FBK0MsQ0FBQyxDQUFDO1FBRTdHLGVBQWUsRUFBRSxPQUFPLENBQUMsQ0FBQyxJQUFTLEVBQUUsS0FBVSxFQUFFLEVBQUU7WUFDakQsSUFBSSxFQUFFLFlBQVksQ0FBQyxVQUFVLEVBQUUsU0FBUyxHQUFHLEtBQUssQ0FBQyxDQUFDO1FBQ3BELENBQUMsQ0FBQyxDQUFDO1FBQ0EscUJBQXFCLEVBQUUsQ0FBQztRQUN6QixRQUFRLENBQUMsZ0JBQWdCLENBQUMsdUJBQXVCLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxJQUFTLEVBQUUsS0FBVSxFQUFFLEVBQUU7WUFDbEYsTUFBTSxTQUFTLEdBQUcsU0FBUyxHQUFHLEtBQUssQ0FBQztZQUNwQyxJQUFJLGlCQUFpQixJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksaUJBQWlCLElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFDO2dCQUNqRyxPQUFRLFFBQVEsQ0FBQyxJQUFJLEVBQUUsYUFBYSxDQUFDLFlBQVksR0FBRSxTQUFTLEdBQUcsR0FBRyxDQUFDLEVBQUUsWUFBWSxDQUFDLE9BQU8sRUFBRSwwQkFBMEIsQ0FBQyxDQUFDO2FBQ3hIO2lCQUFLO2dCQUNKLE9BQVEsUUFBUSxDQUFDLElBQUksRUFBRSxhQUFhLENBQUMsWUFBWSxHQUFFLFNBQVMsR0FBRyxHQUFHLENBQUMsRUFBRSxZQUFZLENBQUMsT0FBTyxFQUFFLG1CQUFtQixDQUFDLENBQUM7YUFDakg7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUMsQ0FBQyxDQUFDO0FBQ0QsQ0FBQztBQUVMLE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxJQUFTLEVBQUUsTUFBVztJQUNyRCxJQUFJLFFBQVEsR0FBVyxFQUFFLENBQUM7SUFDMUIsSUFBSSxpQkFBaUIsR0FBRyxLQUFLLENBQUM7SUFDOUIsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtRQUNwQyxJQUFJLGdCQUFnQixHQUFZLEtBQUssQ0FBQztRQUN0QyxJQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFDO1lBQzNELGdCQUFnQixHQUFHLElBQUksQ0FBQztZQUN4QixRQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQTtTQUN6RTtRQUNELElBQUksR0FBRyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLEtBQUssR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxLQUFLLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDL0osSUFBSSxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBRyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssS0FBSyxFQUFFO1lBQ2xFLGlCQUFpQixHQUFHLElBQUksQ0FBQTtZQUN4QixJQUFJLEdBQUcsRUFBRSxHQUFHLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1NBQzVDO0lBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDSCxPQUFPLEVBQUMsU0FBUyxFQUFFLGlCQUFpQixFQUFFLElBQUksRUFBRSxJQUFJLEVBQUMsQ0FBQztBQUNwRCxDQUFDO0FBRUQsTUFBTSxVQUFVLFlBQVksQ0FBQyxHQUFRLEVBQUUsSUFBaUI7SUFDdEQsTUFBTSxVQUFVLEdBQVcsV0FBVyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdkQsSUFBSSxVQUFVLEVBQUU7UUFDZCxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUN2QztTQUNHO1FBQ0gsT0FBTSxDQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO0tBQ2xDO0FBQ0gsQ0FBQztBQUVELE1BQU0sVUFBVSxPQUFPLENBQUMsSUFBWTtJQUNsQyxJQUFJLE9BQU8sR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDdEQsSUFBSSxPQUFPLEVBQUU7UUFDWCxJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3RDLElBQUksV0FBVyxJQUFJLFdBQVcsQ0FBQyxLQUFLLElBQUksV0FBVyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3BFLE9BQU8sV0FBVyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsV0FBVyxFQUFFLEtBQUssSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7U0FDekc7S0FDRjtJQUNELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQztBQUVELFNBQVMsaUJBQWlCLENBQUMsSUFBUyxFQUFFLE1BQVcsRUFBRSxJQUFjLEVBQUUsVUFBaUIsRUFBRTtJQUNwRixJQUNFLElBQUksQ0FBQyxLQUFLO1FBQ1YsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZO1FBQ3ZCLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLFNBQVM7UUFDakMsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFDeEM7UUFDQSxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN4RSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDO1FBQ3BELElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRTtZQUMxQyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsSUFBSSxHQUFHLFlBQVksQ0FDbkQsSUFBSSxFQUNKLE1BQU0sRUFDTixJQUFJLEVBQ0osU0FBUyxFQUNULElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQ3hDLE9BQU8sQ0FDUixDQUFDO1NBQ0g7S0FDRjtBQUNILENBQUM7QUFFRCxNQUFNLFVBQVUsWUFBWSxDQUMxQixJQUFjLEVBQ2QsTUFBVyxFQUNYLElBQVksRUFDWixTQUFtQixFQUNuQixNQUFXLEVBQ1gsVUFBaUIsRUFBRTtJQUVuQixJQUFJLE9BQU8sR0FBVyxJQUFJLENBQUM7SUFDM0IsTUFBTSxHQUFHLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ25DLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtRQUM3QixNQUFNLEtBQUssR0FBVyxJQUFJLEdBQUcsUUFBUSxDQUFDLFdBQVcsRUFBRSxHQUFHLElBQUksQ0FBQztRQUMzRCxNQUFNLGNBQWMsR0FBRyxPQUFPLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BELE1BQU0sYUFBYSxHQUFHLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFFbEUsSUFBSSxjQUFjLEVBQUU7WUFDbEIsSUFBSSxVQUFVLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUNsRCxJQUFHLFVBQVUsS0FBSyxFQUFFLElBQUksYUFBYSxFQUFDO2dCQUNwQyxVQUFVLEdBQUcsR0FBRyxHQUFDLFFBQVEsR0FBQyxHQUFHLENBQUM7YUFDL0I7WUFDRCxJQUFJLFVBQVUsRUFBRTtnQkFDZCxNQUFNLFFBQVEsR0FBRyxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUN6RSxJQUFJLFNBQVMsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7Z0JBRS9DLGlHQUFpRztnQkFDakcsSUFBSSxDQUFDLFNBQVMsSUFBSSxPQUFPLElBQUksT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQy9DO29CQUNFLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUMsRUFBRTt3QkFDdEIscURBQXFEO3dCQUNyRCxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQWMsRUFBQyxFQUFFOzRCQUNyQyxJQUFJLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDOzRCQUNsQyxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLEtBQUssUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7NEJBQzNFLElBQUksUUFBUSxFQUFDO2dDQUNWLFNBQVMsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7NkJBQ2xDO3dCQUNILENBQUMsQ0FBQyxDQUFDO29CQUNMLENBQUMsQ0FBQyxDQUFDO2lCQUNKO2dCQUNELE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksTUFBTSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRSxNQUFNLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO2FBRTFIO2lCQUFNO2dCQUNMLCtEQUErRDtnQkFDL0QsTUFBTSxVQUFVLEdBQVEsSUFBSSxDQUFDLElBQUksQ0FDL0IsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsS0FBSyxRQUFRLENBQUMsV0FBVyxFQUFFLENBQ2xELENBQUM7Z0JBRUYsSUFBSSxVQUFVLEVBQUU7b0JBQ2QsVUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztvQkFDaEMsSUFBSSxVQUFVLEVBQUU7d0JBQ2QsT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQ3ZCLElBQUksTUFBTSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsRUFDdkIsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUNuQixDQUFDO3FCQUNIO3lCQUFNO3dCQUNMLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksTUFBTSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztxQkFDaEU7aUJBQ0Y7YUFDRjtTQUNGO0lBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDSCxtQ0FBbUM7SUFDbkMsSUFBRyxPQUFPLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFDO1FBQzdELE9BQU8sR0FBRyxPQUFPLEVBQUUsT0FBTyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQztLQUM1QztJQUNELE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUM7QUFFRCx1RkFBdUY7QUFDdkYsU0FBUyxnQkFBZ0IsQ0FBQyxNQUFXLEVBQUUsVUFBaUIsRUFBRSxFQUFFLFFBQWE7SUFDdkUsSUFBSSxVQUFVLEdBQVksS0FBSyxDQUFDO0lBQ2hDLElBQUcsT0FBTyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFDO1FBQy9CLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFTLEVBQUMsRUFBRTtZQUMzQixJQUFHLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFDO2dCQUN6QyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQWMsRUFBRSxFQUFFO29CQUNyQyxJQUFHLFVBQVUsS0FBSyxLQUFLLEVBQUM7d0JBQ3ZCLFVBQVUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxLQUFLLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO3FCQUNyRztvQkFBQSxDQUFDO2dCQUNMLENBQUMsQ0FBQyxDQUFDO2FBQ0o7WUFBQSxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7S0FDSjtTQUFJO1FBQ0EsVUFBVSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7S0FDOUU7SUFDRCxPQUFPLFVBQVUsQ0FBQztBQUNwQixDQUFDO0FBRUQsU0FBUyxnQkFBZ0IsQ0FBQyxJQUFTLEVBQUUsUUFBZ0I7SUFDbkQsSUFBSSxTQUFjLENBQUM7SUFDbkIsSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQyxNQUFXLEVBQUUsRUFBRTtRQUNwQyxLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNqRCxJQUFJLEdBQUcsSUFBSSxRQUFRLElBQUksR0FBRyxDQUFDLFdBQVcsRUFBRSxLQUFLLFFBQVEsQ0FBQyxXQUFXLEVBQUUsRUFBRTtnQkFDbkUsU0FBUyxHQUFHLEtBQUssQ0FBQzthQUNuQjtTQUNGO0lBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDSCxPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDO0FBRUQsU0FBUyxxQkFBcUIsQ0FBQyxLQUFVO0lBQ3ZDLElBQ0UsS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLEtBQUssV0FBVyxDQUFDLFVBQVU7UUFDN0MsS0FBSyxDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsSUFBSSxLQUFLLFdBQVcsRUFDN0M7UUFDQSxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsS0FBSyxNQUFNLElBQUksS0FBSyxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7S0FDakg7U0FBTSxJQUNMLEtBQUssQ0FBQyxPQUFPLEtBQUssWUFBWSxDQUFDLFFBQVE7UUFDdkMsQ0FBQyxLQUFLLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxLQUFLLEtBQUssRUFBRSxDQUFDLEVBQ25DO1FBQ0EsSUFBRyxLQUFLLENBQUMsUUFBUSxFQUFDO1lBQ2hCLEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztTQUMzQjthQUFJO1lBQ0gsS0FBSyxDQUFDLEtBQUs7Z0JBQ1gsS0FBSyxDQUFDLFFBQVEsS0FBSyxJQUFJO29CQUNyQixDQUFDLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQztvQkFDNUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQTtTQUMzQztRQUNELE9BQU8sS0FBSyxDQUFDLEtBQUssQ0FBQztLQUNwQjtTQUFNLElBQ0wsQ0FBQyxLQUFLLENBQUMsT0FBTyxLQUFLLFlBQVksQ0FBQyxZQUFZLElBQUksS0FBSyxDQUFDLE9BQU8sS0FBSyxZQUFZLENBQUMsS0FBSyxDQUFDO1FBQ3JGLEtBQUssQ0FBQyxLQUFLO1FBQ1gsT0FBTyxLQUFLLENBQUMsS0FBSyxLQUFLLFFBQVEsRUFDL0I7UUFDQSxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQztLQUNsRTtTQUFNLElBQ0wsS0FBSyxDQUFDLEtBQUs7UUFDWCxLQUFLLENBQUMsS0FBSyxDQUFDLFlBQVk7UUFDeEIsS0FBSyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsT0FBTyxLQUFLLFlBQVksQ0FBQyxZQUFZO1FBQzlELEtBQUssQ0FBQyxLQUFLO1FBQ1gsT0FBTyxLQUFLLENBQUMsS0FBSyxLQUFLLFFBQVEsRUFDL0I7UUFDQSxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDO0tBQzFCO1NBQU07UUFDTCxLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7UUFDNUQsT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDO0tBQ3BCO0FBQ0gsQ0FBQztBQUVELE1BQU0sVUFBVSxpQkFBaUIsQ0FDL0IsU0FBYyxFQUNkLFFBQWE7SUFFYixJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUM7SUFDYixJQUFJLE1BQU0sR0FBRyxhQUFhLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQ3ZDLElBQUksTUFBTSxJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1FBQy9CLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRTtZQUN4QixNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQ2IsQ0FBQyxDQUFDLENBQUM7S0FDSjtJQUNELElBQUksU0FBUyxJQUFJLE1BQU0sRUFBRTtRQUN2QixNQUFNLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBTSxFQUFFLEVBQUU7WUFDOUQsSUFBSSxPQUFPLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNsQyxJQUFJLEdBQUcsR0FBRyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLEtBQUssT0FBTyxFQUFFLFFBQVEsRUFBRSxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUM7WUFDeEYsSUFBSSxLQUFLLEdBQUcsT0FBTyxFQUFFLElBQUksQ0FDdkIsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLFNBQVMsSUFBSSxTQUFTLEVBQUUsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxXQUFXLEVBQUUsS0FBSyxTQUFTLEVBQUUsUUFBUSxFQUFFLEVBQUUsV0FBVyxFQUFFLEVBQUUsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUN6SixDQUFDO1lBQ0YsSUFBSSxLQUFLLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQzdCLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQyxFQUFFLENBQUM7YUFDMUQ7aUJBQU0sSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQ2hDLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxFQUFFLENBQUM7YUFDeEQ7aUJBQU07Z0JBQ0wsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQzthQUN4QztRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxHQUFHLENBQUM7S0FDWjtTQUFNO1FBQ0wsT0FBTyxJQUFJLENBQUM7S0FDYjtBQUNILENBQUM7QUFFRCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsTUFBcUIsRUFBRSxLQUFhLEVBQUUsSUFBUztJQUMvRSxJQUFJLEdBQUcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxLQUFLLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQzVFLElBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQyxhQUFhLEVBQUUsSUFBSSxFQUFDO1FBQ2hDLEdBQUcsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7S0FDcEM7QUFDSCxDQUFDO0FBRUQsTUFBTSxVQUFVLGFBQWEsQ0FBQyxRQUFlO0lBQzNDLElBQUksSUFBSSxHQUFRLEVBQUUsQ0FBQztJQUNuQixJQUFJLFFBQVEsSUFBSSxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtRQUNuQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBTSxFQUFFLEtBQWEsRUFBRSxFQUFFO1lBQ3JDLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUNsQyxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQ3JFLEVBQUUsQ0FDSCxDQUFDO1lBRUYsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNwQixDQUFDLENBQUMsQ0FBQztLQUNKO0lBQ0QsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBRUQsTUFBTSxVQUFVLGlCQUFpQixDQUMvQixTQUFjLEVBQ2QsUUFBYSxFQUNiLFFBQWE7SUFFYixJQUFJLEtBQVUsQ0FBQztJQUNmLElBQUksUUFBUSxFQUFFO1FBQ1osNEVBQTRFO1FBQzVFLElBQ0UsUUFBUTtZQUNSLFFBQVEsQ0FBQyxJQUFJO1lBQ2IsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTO1lBQ3ZCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQ3hCO1lBQ0EsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7U0FDbkQ7YUFDSSxJQUNILFFBQVE7WUFDUixRQUFRLENBQUMsSUFBSTtZQUNiLFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUztZQUN2QixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUN4QjtZQUNBLFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO1NBQ25EO1FBRUQsTUFBTSxhQUFhLEdBQVcsV0FBVyxDQUN2QyxRQUFRLEVBQ1IsUUFBUSxFQUFFLElBQUksRUFBRSxTQUFTLENBQzFCLENBQUM7UUFDRixNQUFNLGFBQWEsR0FBVyxXQUFXLENBQ3ZDLFFBQVEsRUFDUixRQUFRLEVBQUUsSUFBSSxFQUFFLFNBQVMsQ0FDMUIsQ0FBQztRQUVGLElBQ0UsUUFBUSxFQUFFLElBQUk7WUFDZCxRQUFRLEVBQUUsSUFBSSxDQUFDLFNBQVM7WUFDeEIsUUFBUSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQ3hCO1lBQ0EsSUFBSSxTQUFTLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ3hDLElBQUksU0FBUyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUN4QyxJQUFJLE9BQU8sU0FBUyxLQUFLLFFBQVEsSUFBSSxPQUFPLFNBQVMsS0FBSyxRQUFRLEVBQUU7Z0JBQ2xFLFNBQVMsR0FBRyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQzdCLFNBQVMsR0FBRyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7YUFDOUI7WUFDRCxLQUFLLEdBQUcsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsQ0FBQztTQUMvQzthQUFNO1lBQ0wsTUFBTSxRQUFRLEdBQVcsV0FBVyxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDaEUsSUFBSSxLQUFLLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQy9CLElBQUksS0FBSyxFQUFFO2dCQUNULEtBQUssR0FBRyxLQUFLLEVBQUUsUUFBUSxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUM7YUFDbkM7U0FDRjtLQUNGO0lBQ0QsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBRUQsTUFBTSxVQUFVLFVBQVU7SUFDeEIsSUFBSSxZQUFZLEdBQVcsRUFBRSxDQUFDO0lBQzlCLElBQUksR0FBRyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO0lBQy9CLElBQUcsR0FBRyxFQUFDO1FBQ0wsSUFBSSxHQUFHLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN6QixZQUFZLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEdBQUMsQ0FBQyxDQUFDLENBQUE7S0FDakM7SUFDRCxPQUFPLFlBQVksQ0FBQztBQUN0QixDQUFDO0FBRUQsTUFBTSxVQUFXLGNBQWM7SUFDN0IsSUFBSSxPQUFPLEdBQVEsRUFBRSxDQUFDO0lBQ3RCLElBQUksV0FBVyxHQUFHLFVBQVUsRUFBRSxDQUFDO0lBQzdCLElBQUcsV0FBVyxJQUFJLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFDO1FBQ3ZDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEdBQUMsV0FBVyxDQUFRLENBQUMsQ0FBQztRQUN2RixPQUFPLEdBQUcsV0FBVyxFQUFFLE9BQU8sQ0FBQztLQUNoQztJQUNELE9BQU8sT0FBTyxDQUFDO0FBQ25CLENBQUM7QUFFRCx5RUFBeUU7QUFDekUsTUFBTSxVQUFVLHlCQUF5QixDQUN2QyxZQUE2QixFQUM3QixLQUFhLEVBQ2IsS0FBMEI7SUFFMUIsT0FBTyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBVyxFQUFFLEVBQUU7UUFDdEMsSUFDRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsS0FBSyxLQUFLLEVBQUUsV0FBVyxFQUFFLENBQUM7WUFDckUsQ0FBQyxNQUFNLENBQUMsV0FBVztnQkFDakIsTUFBTSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsS0FBSyxLQUFLLEVBQUUsV0FBVyxFQUFFLENBQUMsRUFDNUQ7WUFDQSxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsSUFBdUIsRUFBRSxFQUFFO2dCQUNyQyxJQUFJLE1BQU0sQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFO29CQUN4QyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7aUJBQ2pEO3FCQUFNLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7b0JBQ3RELE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztpQkFDeEM7WUFDSCxDQUFDLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsTUFBTSxVQUFVLGlCQUFpQixDQUFDLElBQVM7SUFDekMsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtRQUM1QixNQUFNLEVBQUUsV0FBVyxFQUFFLEdBQUcsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDO1FBQ3pDLFdBQVcsRUFBRSxZQUFZLEVBQUUsT0FBTyxDQUFDLENBQUMsT0FBWSxFQUFFLEVBQUU7WUFDbEQsT0FBTyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQyxLQUFVLEVBQUUsRUFBRTtnQkFDckMsSUFBSSxPQUFPLEVBQUU7b0JBQ1gsaUJBQWlCLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLFdBQVcsQ0FBQyxDQUFDO2lCQUN4RDtZQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7S0FDSjtBQUNILENBQUM7QUFFRCxrQ0FBa0M7QUFDbEMsTUFBTSxVQUFVLG9CQUFvQixDQUFDLE9BQXNCLEVBQUUsS0FBYTtJQUN4RSxJQUFJLEtBQUssSUFBSSxPQUFPLElBQUksT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7UUFDMUMsSUFBSSxHQUFHLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsS0FBSyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUM5RSxJQUFJLFVBQVUsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUM1QyxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxLQUFLLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQzNGLElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQztZQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxVQUFVLENBQUM7S0FDL0M7SUFDRCxPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDO0FBRUQsa0NBQWtDO0FBQ2xDLE1BQU0sVUFBVSxvQkFBb0IsQ0FBQyxPQUFzQixFQUFFLEtBQWE7SUFDeEUsSUFBSSxLQUFLLElBQUksT0FBTyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1FBQzFDLElBQUksR0FBRyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLEtBQUssS0FBSyxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFDL0UsSUFBSSxTQUFTLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUM7UUFDNUMsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsS0FBSyxLQUFLLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUM3RixJQUFJLEtBQUssS0FBSyxDQUFDLENBQUM7WUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsU0FBUyxDQUFDO0tBQzlDO0lBQ0QsT0FBTyxPQUFPLENBQUM7QUFDakIsQ0FBQztBQUVBLDZCQUE2QjtBQUM3QixNQUFNLFVBQVUsa0JBQWtCLENBQUMsS0FBVTtJQUM1QyxJQUFJLEtBQUssRUFBRTtRQUNULE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUMxQyxJQUFJLEdBQUcsRUFBRTtZQUNSLEtBQUssR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzVCO0tBQ0Y7SUFDRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFQSw4QkFBOEI7QUFDOUIsTUFBTSxVQUFVLGdCQUFnQixDQUFDLE9BQWMsRUFBRSxPQUFZLEVBQUUsT0FBZTtJQUM3RSxNQUFNLEtBQUssR0FBRyxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUMsTUFBTSxFQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxDQUFDLElBQUksT0FBTyxDQUFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDL0csSUFBRyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEVBQUM7UUFDWixPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsT0FBTyxDQUFDO0tBQzFCO1NBQUk7UUFDSCxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0tBQ3ZCO0lBQ0QsT0FBTyxPQUFPLENBQUM7QUFDakIsQ0FBQztBQUVELDRCQUE0QjtBQUM1QixNQUFNLFVBQVUsYUFBYSxDQUFDLElBQVM7SUFDckMsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLE9BQVksRUFBRSxFQUFFO1FBQ3pDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLEdBQUcsT0FBTyxFQUFFLFFBQVEsRUFBRSxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxHQUFHLElBQUksRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDeEMsSUFBSSxLQUFLLEtBQUssSUFBSSxFQUFFO1lBQ2xCLEtBQUssR0FBRyxJQUFJLENBQUM7U0FDZDtRQUNELElBQUksUUFBUSxLQUFLLElBQUksRUFBRTtZQUNyQixLQUFLLEdBQUcsUUFBUSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7U0FDbEM7UUFDRCxPQUFPLEdBQUcsS0FBSyxJQUFJLE9BQU8sRUFBRSxDQUFDO0lBQy9CLENBQUMsQ0FBQztJQUNGLE1BQU0sSUFBSSxHQUFHLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3JDLE1BQU0sUUFBUSxHQUFHLElBQUksSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQztJQUMzRCxNQUFNLFVBQVUsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO0lBQzlCLFVBQVUsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDdkMsT0FBTyxVQUFVLENBQUM7QUFDcEIsQ0FBQztBQUVELGdDQUFnQztBQUNoQyxNQUFNLFVBQVUsWUFBWSxDQUFDLEVBQUUsWUFBWSxFQUFPLEVBQUUsS0FBYTtJQUMvRCxJQUFJLElBQUksR0FBUSxFQUFFLENBQUE7SUFDbEIsSUFBRyxZQUFZLEVBQUUsTUFBTSxHQUFHLENBQUMsSUFBSSxLQUFLLEVBQUM7UUFDbkMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQVksRUFBQyxFQUFFO1lBQ25DLElBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFhLEVBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLElBQUksS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDLEVBQUM7Z0JBQzlGLElBQUksR0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQWEsRUFBQyxFQUFFLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsSUFBSSxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUE7YUFDeEc7UUFDSCxDQUFDLENBQUMsQ0FBQTtLQUNIO0lBQ0QsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBRUQsTUFBTSxVQUFVLHNCQUFzQixDQUNwQyxFQUFFLFlBQVksRUFBZ0IsRUFDOUIsS0FBMEI7SUFFMUIsWUFBWSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQXFCLEVBQUUsRUFBRTtRQUMxQyxJQUFJLE9BQU8sRUFBRTtZQUNYLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBYyxFQUFFLEVBQUU7Z0JBQ3BDLE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQXVCLEVBQUUsRUFBRTtvQkFDM0MsSUFBSSxTQUFTLEVBQUU7d0JBQ2IsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO3FCQUNwRDtnQkFDSCxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCx1Q0FBdUM7QUFDdkMsTUFBTSxVQUFVLHlCQUF5QixDQUFDLFFBQVE7SUFDaEQsTUFBTSxNQUFNLEdBQUcsUUFBUSxFQUFFLE9BQU8sRUFBRSxHQUFHLENBQUMscUJBQXFCLENBQUMsQ0FBQztJQUM3RCxPQUFPLE1BQU0sRUFBRSxLQUFLLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztBQUMvRSxDQUFDO0FBRUEsTUFBTSxVQUFVLGVBQWUsQ0FBQyxFQUFNO0lBQ3JDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7UUFDZCxNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsc0JBQXNCLENBQUMsVUFBVSxDQUFDLENBQUE7UUFDMUQsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLFlBQVksQ0FBQyxJQUFJLEVBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQyxDQUFBO1FBQzFDLE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxzQkFBc0IsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFBO1FBQ3ZFLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLENBQUMsSUFBSSxFQUFDLGFBQWEsR0FBRyxFQUFFLENBQUMsQ0FBQTtRQUN0RCxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUMsQ0FBQztRQUVsRCxJQUFJLElBQUksR0FBRyxDQUFDLEVBQ1YsSUFBSSxHQUFHLENBQUMsRUFDUixJQUFJLEdBQUcsQ0FBQyxFQUNSLElBQUksR0FBRyxDQUFDLENBQUM7UUFFWCxNQUFNLGFBQWEsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQzFCLENBQUMsR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQztZQUN0QixJQUFJLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQztZQUNqQixJQUFJLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQztZQUNqQixRQUFRLENBQUMsU0FBUyxHQUFHLGdCQUFnQixDQUFDO1lBQ3RDLFFBQVEsQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO1FBQ3JDLENBQUMsQ0FBQztRQUVGLE1BQU0sV0FBVyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDeEIsQ0FBQyxHQUFHLENBQUMsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDO1lBQ3RCLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQztZQUN4QixJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUM7WUFDeEIsSUFBSSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUM7WUFDakIsSUFBSSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUM7WUFDakIsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsS0FBSyxFQUFFLFNBQVMsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDO1lBQ2pELEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLEtBQUssRUFBRSxVQUFVLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNyRCxDQUFDLENBQUM7UUFFRixNQUFNLGdCQUFnQixHQUFHLEdBQUcsRUFBRTtZQUM1QixRQUFRLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztZQUMxQixRQUFRLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztRQUM5QixDQUFDLENBQUM7UUFFRixJQUFJLFFBQVEsQ0FBQyxjQUFjLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQyxFQUFFO1lBQy9DLFFBQVEsQ0FBQyxjQUFjLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQyxDQUFDLFdBQVcsR0FBRyxhQUFhLENBQUM7U0FDekU7YUFBTTtZQUNMLEtBQUssQ0FBQyxXQUFXLEdBQUcsYUFBYSxDQUFDO1NBQ25DO0lBQ0gsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ1IsQ0FBQztBQUNMLE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxJQUFTLEVBQUMsS0FBVSxFQUFFLEtBQUs7SUFDN0QsSUFBSSxVQUFVLEdBQVcsT0FBTyxDQUFDO0lBQ2pDLElBQUksU0FBUyxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDN0QsSUFBSSxXQUFXLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbEMsSUFBSSxTQUFTLENBQUMsT0FBTyxFQUFFLEdBQUcsV0FBVyxDQUFDLE9BQU8sRUFBRSxFQUFDO1FBQzlDLFVBQVUsR0FBRyxTQUFTLENBQUM7S0FDeEI7U0FDSSxJQUFJLFNBQVMsQ0FBQyxPQUFPLEVBQUUsR0FBRyxXQUFXLENBQUMsT0FBTyxFQUFFLEVBQUM7UUFDbkQsVUFBVSxHQUFHLFNBQVMsQ0FBQztLQUN4QjtJQUNELE9BQU8sVUFBVSxDQUFDO0FBQ3BCLENBQUM7QUFDRCxnQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmb3JtYXREYXRlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuaW1wb3J0IHsgSURpY3Rpb25hcnksIElGaWx0ZXJEaWN0aW9uYXJ5IH0gZnJvbSAnLi4vbW9kZWxzL2NvbW1vbi5tb2RlbCc7XG5pbXBvcnQge1xuICBFRm9ybWF0VHlwZSxcbiAgRUZvcm1Db250cm9sLFxuICBFSHlwZXJsaW5rLFxuICBFTWF0Y2hNb2RlLFxuICBFT3BlcmF0b3IsXG4gIElEeW5hbWljQ2FyZCxcbiAgSUR5bmFtaWNGb3JtLFxuICBJRm9ybWF0LFxuICBJRm9ybUZpZWxkLFxuICBJRm9ybVNlY3Rpb24sXG59IGZyb20gJy4uL21vZGVscy9mb3JtLm1vZGVsJztcbmltcG9ydCB7IGFkZEdsb2JhbEZpbHRlciwgRUdyaWRDb2x1bW5UeXBlLCBJR2xvYmFsRmlsdGVyLCBJR3JpZENvbHVtbiwgSUdyaWRGaWx0ZXIgfSBmcm9tICcuLi9tb2RlbHMvZ3JpZC5tb2RlbCc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbi8qICNyZWdpb24gcHVibGljIG1ldGhvZHMgKi9cblxuLyoqXG4gKlxuICogQHBhcmFtIHZhbHVlIDogYW55XG4gKiBGdW5jdGlvbiByZWNlaXZlcyB0aGUgdmFsdWUgYW5kIGV4cGVjdHMgdGhlIHZhbHVlIHRvIGJlIGZvcm1hdGVkLlxuICogRG8gbm90IHVzZSBmYXQgYXJyb3cgZnVuY3Rpb24gYXMgdGhleSBkbyBub3QgcHJlc2VydmUgdGhlIGNvbnRleHQuXG4gKiB0aGlzLnZhbHVlIHJlZmVycyB0byB0aGUgdmFsdWUgb2YgSUZvcm1GaWVsZCBPYmplY3RcbiAqIE1vZGlmeSB0aGlzLnZhbHVlIGRpcmVjdGx5IHRvIHJlY2VpdmUgZWZmZWN0XG4gKi9cblxuIHZhciBmb3Jtc3RhdGUgPSBuZXcgU3ViamVjdDxhbnk+KCk7XG4gdmFyIGNvbHVtbnNTdGF0ZSA9IG5ldyBTdWJqZWN0PGFueT4oKTtcbiB2YXIgY2FyZFN0YXRlID0gbmV3IFN1YmplY3Q8YW55PigpO1xuIHZhciByb3V0ZUNoYW5nZSA9IG5ldyBTdWJqZWN0PGFueT4oKTtcblxuZXhwb3J0IGZ1bmN0aW9uIGNoYW5nZUR5bmFtaWNGb3JtU3RhdGUoaWQ6IGFueSwgZGF0YTogYW55LCBsb2FkQ29tcG9uZW50PzogYW55KSB7XG4gIGZvcm1zdGF0ZS5uZXh0KHsgaWQsIGRhdGEsIGxvYWRDb21wb25lbnQgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjaGFuZ2VDb2x1bW5zU3RhdGUocGFnZVNldHRpbmc6IGFueSkge1xuICBjb2x1bW5zU3RhdGUubmV4dChwYWdlU2V0dGluZyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBvbkNvbHVtbnNTdGF0ZUNoYW5nZSgpIHtcbiAgcmV0dXJuIGNvbHVtbnNTdGF0ZS5hc09ic2VydmFibGUoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG9uRHluYW1pY0Zvcm1TdGF0ZUNoYW5nZSgpIHtcbiAgcmV0dXJuIGZvcm1zdGF0ZS5hc09ic2VydmFibGUoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG9uUm91dGVDaGFuZ2VFdmVudCgpIHtcbiAgcmV0dXJuIHJvdXRlQ2hhbmdlLmFzT2JzZXJ2YWJsZSgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcm91dGVDaGFuZ2VFdmVudCgpIHtcbiAgcm91dGVDaGFuZ2UubmV4dCgpO1xufVxuXG4gZXhwb3J0IGZ1bmN0aW9uIG9uRHluYW1pY0NhcmRTdGF0ZUNoYW5nZSgpIHtcbiAgcmV0dXJuIGNhcmRTdGF0ZS5hc09ic2VydmFibGUoKTtcbiB9XG5cbiBleHBvcnQgZnVuY3Rpb24gY2hhbmdlRHluYW1pY0NhcmRTdGF0ZShkYXRhOiBhbnkpIHtcbiAgY2FyZFN0YXRlLm5leHQoeyBkYXRhIH0pO1xufVxuXG4gZXhwb3J0IGZ1bmN0aW9uIGNsb3NlSUZyYW1lKCl7XG4gIGxldCBjbG9zZSA9IHdpbmRvdy5wYXJlbnQuZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnAtZGlhbG9nLWhlYWRlci1pY29uJylhcyBIVE1MRWxlbWVudFxuICBpZihjbG9zZSkge1xuICAgIGNsb3NlLmNsaWNrKCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvRGVjaW1hbCh2YWx1ZTogYW55KTogYW55IHtcbiAgaWYgKHZhbHVlKSB7XG4gICAgcmV0dXJuIHBhcnNlRmxvYXQodmFsdWUudG9TdHJpbmcoKSkudG9GaXhlZCgyKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9Cb29sZWFuKHZhbHVlOiBhbnkpIHtcbiAgcmV0dXJuIHZhbHVlPy50b0xvd2VyQ2FzZSgpID09PSAneScgPyB0cnVlIDogZmFsc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b1Nob3J0RGF0ZSh2YWx1ZTogYW55LCBmb3JtYXQ/OiBJRm9ybWF0KSB7XG4gIGlmICh2YWx1ZSAmJiB2YWx1ZSAhPT0gJycpIHtcbiAgICBpZiAoXG4gICAgICBmb3JtYXQgJiZcbiAgICAgIChmb3JtYXQudHlwZSA9PT0gRUZvcm1hdFR5cGUuTE9OR0RBVEUgfHxcbiAgICAgICAgZm9ybWF0LnR5cGUgPT09IEVGb3JtYXRUeXBlLk1FRElVTURBVEUpXG4gICAgKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmb3JtYXREYXRlKHZhbHVlLCAnTU0vZGQveXl5eScsICdlbi1VUycpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9TaG9ydERhdGVUaW1lKHZhbHVlOiBhbnksIGZvcm1hdD86IElGb3JtYXQpIHtcbiAgaWYgKHZhbHVlICYmIHZhbHVlICE9PSAnJyAmJiB2YWx1ZT8udG9TdHJpbmcoKSAhPSBcIkludmFsaWQgRGF0ZVwiKSB7XG4gICAgaWYgKFxuICAgICAgZm9ybWF0ICYmXG4gICAgICAoZm9ybWF0LnR5cGUgPT09IEVGb3JtYXRUeXBlLkxPTkdEQVRFIHx8XG4gICAgICAgIGZvcm1hdC50eXBlID09PSBFRm9ybWF0VHlwZS5NRURJVU1EQVRFKVxuICAgICkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZm9ybWF0RGF0ZSh2YWx1ZSwgJ01NL2RkL3l5eXkgaGg6bW0gYScsICdlbi1VUycpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0RGlhbG9nRGF0YShjb2x1bW5zOklHcmlkQ29sdW1uW10sIGZpZWxkTmFtZTpzdHJpbmcsIHZhbHVlOmFueSl7XG4gIGNvbHVtbnM/LmZvckVhY2goKGNvbHVtbik9PntcbiAgICAgIGlmKGNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSA9PT0gZmllbGROYW1lPy50b0xvd2VyQ2FzZSgpICYmIGNvbHVtbi5jb21wb25lbnQpe1xuICAgICAgICBsZXQga2V5cz1PYmplY3Qua2V5cyh2YWx1ZSk7XG4gICAgICAgIGtleXMuZm9yRWFjaCgoa2V5KT0+e1xuICAgICAgICAgIGNvbHVtbi5kYXRhLmRhdGE9ey4uLmNvbHVtbi5kYXRhPy5kYXRhLCBba2V5XTp2YWx1ZVtrZXldfTtcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgfSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvVHJpbSh0ZXh0OiBhbnkpIHtcbiAgaWYgKHR5cGVvZiB0ZXh0ID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB0ZXh0LnRyaW0oKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdGV4dDtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TWF0Y2hLZXkob2JqOiBhbnksIHByb3BOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAoIW9iaiB8fCAhcHJvcE5hbWUpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBsZXQgbWF0Y2hlZEtleSA9ICcnO1xuICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7XG4gICAgb2JqLmZvckVhY2goKHJvdykgPT4ge1xuICAgICAgY29uc3Qga2V5czogYW55W10gPSBPYmplY3Qua2V5cyhyb3cpO1xuICAgICAgaWYgKCFtYXRjaGVkS2V5IHx8IG1hdGNoZWRLZXkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIG1hdGNoZWRLZXkgPSBrZXlzLmZpbmQoXG4gICAgICAgICAgKHgpID0+IHgudG9Mb3dlckNhc2UoKSA9PT0gcHJvcE5hbWUudG9Mb3dlckNhc2UoKVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGtleXM6IGFueVtdID0gT2JqZWN0LmtleXMob2JqKTtcbiAgICBtYXRjaGVkS2V5ID0ga2V5cy5maW5kKCh4KSA9PiB4LnRvTG93ZXJDYXNlKCkgPT09IHByb3BOYW1lLnRvTG93ZXJDYXNlKCkpO1xuICB9XG5cbiAgcmV0dXJuIG1hdGNoZWRLZXk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRGb3JtRmllbGRWYWx1ZShmb3JtRmllbGQ6IElGb3JtRmllbGQsIHZhbHVlOiBhbnkpOiBhbnkge1xuICBsZXQgZm9ybWF0dGVkVmFsdWU6IGFueSA9IHZhbHVlO1xuICBpZiAoZm9ybUZpZWxkLmZvcm1hdCkge1xuICAgIHN3aXRjaCAoZm9ybUZpZWxkLmZvcm1hdC50eXBlKSB7XG4gICAgICBjYXNlIEVGb3JtYXRUeXBlLkRFQ0lNQUw6XG4gICAgICAgIGZvcm1hdHRlZFZhbHVlID0gdG9EZWNpbWFsKHZhbHVlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVGb3JtYXRUeXBlLkJPT0xFQU5fWU46XG4gICAgICAgIGZvcm1hdHRlZFZhbHVlID0gdG9Cb29sZWFuKHZhbHVlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVGb3JtYXRUeXBlLlNIT1JUREFURTpcbiAgICAgICAgZm9ybWF0dGVkVmFsdWUgPSB0b1Nob3J0RGF0ZSh2YWx1ZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFRm9ybWF0VHlwZS5DVVNUT006XG4gICAgICAgIGlmIChmb3JtRmllbGQuZm9ybWF0LmZvcm1hdHRlcikge1xuICAgICAgICAgIGZvcm1hdHRlZFZhbHVlID0gZm9ybUZpZWxkLmZvcm1hdC5mb3JtYXR0ZXIodmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBmb3JtYXR0ZWRWYWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEZvcm1GaWVsZCAoXG4gIHsgZm9ybVNlY3Rpb25zIH06IElEeW5hbWljRm9ybSxcbiAgZm9ybUZpZWxkT2JqOiBJRm9ybUZpZWxkXG4pIHtcbiAgcmV0dXJuIGZvcm1TZWN0aW9ucz8ubWFwKChzZWN0aW9uKSA9PiB7XG4gICAgcmV0dXJuIChzZWN0aW9uLmZpZWxkcyA9IHNlY3Rpb24uZmllbGRzLm1hcCgoZm9ybUZpZWxkOiBJRm9ybUZpZWxkKSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIGZvcm1GaWVsZC5maWVsZD8udG9Mb3dlckNhc2UoKSA9PT0gZm9ybUZpZWxkT2JqLmZpZWxkPy50b0xvd2VyQ2FzZSgpIHx8XG4gICAgICAgIChmb3JtRmllbGQubGFiZWwgJiYgZm9ybUZpZWxkLmxhYmVsID09PSBmb3JtRmllbGRPYmoubGFiZWwpXG4gICAgICApIHtcbiAgICAgICAgZm9ybUZpZWxkID0gZm9ybUZpZWxkT2JqO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZvcm1GaWVsZDtcbiAgICB9KSk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0SHlwZXJsaW5rQ29tcG9uZW50RGF0YSAoXG4gIHsgZm9ybVNlY3Rpb25zIH06IElEeW5hbWljRm9ybSxcbiAgbGFiZWw6IHN0cmluZyxcbiAgZGF0YTogYW55XG4pe1xuICBmb3JtU2VjdGlvbnM/LmZvckVhY2goKHNlY3Rpb24pID0+IHtcbiAgICBsZXQgZmllbGQ9c2VjdGlvbi5maWVsZHMuZmluZCgoZmllbGQpPT4gZmllbGQubGFiZWwgJiYgZmllbGQubGFiZWw9PT1sYWJlbClcbiAgIGlmKGZpZWxkICYmIGZpZWxkLmh5cGVybGluaykgZmllbGQuaHlwZXJsaW5rLnBhcmFtcyA9IGRhdGE7XG59KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEF1dG9Db21wbGV0ZURhdGEoXG4gIHZhbHVlczogYW55W10sXG4gIHVuaXF1ZUlkOiBhbnksXG4gIGxhYmVsS2V5OiBzdHJpbmcsXG4gIFZhbHVlS2V5OiBzdHJpbmcsXG4pe1xuICBpZih2YWx1ZXM/Lmxlbmd0aCA+IDApe1xuICAgIHZhbHVlcyA9IHZhbHVlcz8ubWFwKChyb3dWYWx1ZSkgPT4gKHtbbGFiZWxLZXldOiByb3dWYWx1ZSwgW1ZhbHVlS2V5XTogdW5pcXVlSWR9KSk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldExvb2t1cERhdGEoXG4gIHsgZm9ybVNlY3Rpb25zIH06IElEeW5hbWljRm9ybSxcbiAgZmllbGQ6IHN0cmluZyxcbiAgZGF0YTogYW55XG4pIHtcbiAgZm9ybVNlY3Rpb25zPy5tYXAoKHNlY3Rpb246IElGb3JtU2VjdGlvbikgPT4ge1xuICAgIHNlY3Rpb24uZmllbGRzLm1hcCgoZm9ybUZpZWxkOiBhbnkpID0+IHtcbiAgICAgIGlmIChmb3JtRmllbGQuZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IGZpZWxkPy50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBmb3JtRmllbGQubGFiZWwgJiZcbiAgICAgICAgICBmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sICYmXG4gICAgICAgICAgZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbC5sb29rdXBDb250cm9sICYmXG4gICAgICAgICAgZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbC5sb29rdXBDb250cm9sLmRhdGEgJiZcbiAgICAgICAgICBkYXRhXG4gICAgICAgICkge1xuICAgICAgICAgIGZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2wubG9va3VwQ29udHJvbC5kYXRhLmRhdGEgPSBkYXRhO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmb3JtRmllbGQubG9va3VwQ29udHJvbCAmJiBmb3JtRmllbGQubG9va3VwQ29udHJvbC5kYXRhICYmIGRhdGEpIHtcbiAgICAgICAgICBmb3JtRmllbGQubG9va3VwQ29udHJvbC5kYXRhLmRhdGEgPSBkYXRhO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuICByZXR1cm4gZm9ybVNlY3Rpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0U2lkZWJhckxpbmtQYXJhbVZhbHVlcyhsaW5rOiBzdHJpbmcsIHBhcmFtczogYW55W10pOiBzdHJpbmcge1xuICBsZXQgbmV3TGluazogc3RyaW5nID0gbGluaztcbiAgaWYgKHBhcmFtcyAmJiBwYXJhbXMubGVuZ3RoID4gMCkge1xuICAgIHBhcmFtcy5tYXAoKHBhcmFtKSA9PiB7XG4gICAgICBjb25zdCB1cmwgPSBwYXJhbS5uYW1lID8gJ3t7JyArIHBhcmFtLm5hbWUgKyAnfX0nIDogJyc7XG4gICAgICBpZiAobmV3TGluay5sb2NhbGVDb21wYXJlKHVybCkpIHtcbiAgICAgICAgbmV3TGluayA9IG5ld0xpbmsucmVwbGFjZShuZXcgUmVnRXhwKHVybCwgJ2lnJyksIHRvVHJpbShwYXJhbS52YWx1ZSkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIHJldHVybiBuZXdMaW5rO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYWRkTmV3RmllbGRJbkZvcm0oZHluYW1pY0Zvcm06IElEeW5hbWljRm9ybSwgc2VjdGlvbk5hbWU6c3RyaW5nLCBmb3JtRmllbGQ6SUZvcm1GaWVsZCl7XG4gIGNvbnN0IHNlY3Rpb24gPSBkeW5hbWljRm9ybT8uZm9ybVNlY3Rpb25zPy5maW5kKChzZWN0aW9uKT0+IHNlY3Rpb24ubmFtZSA9PT0gc2VjdGlvbk5hbWUpO1xuICBpZihzZWN0aW9uKXtcbiAgICBzZWN0aW9uLmZpZWxkcy5wdXNoKGZvcm1GaWVsZCk7XG4gIH1cbiAgcmV0dXJuIGR5bmFtaWNGb3JtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0Rm9ybUZpZWxkcyhcbiAgeyBmb3JtU2VjdGlvbnMgfTogSUR5bmFtaWNGb3JtLFxuICBmb3JtRmllbGRzOiBJRm9ybUZpZWxkW11cbikge1xuICByZXR1cm4gZm9ybVNlY3Rpb25zPy5tYXAoKHNlY3Rpb24pID0+IHtcbiAgICByZXR1cm4gKHNlY3Rpb24uZmllbGRzID0gc2VjdGlvbi5maWVsZHMubWFwKChmb3JtRmllbGQpID0+IHtcbiAgICAgIGxldCBtYXRjaGVkRmllbGQgPSBmb3JtRmllbGRzLmZpbmQoXG4gICAgICAgICh4KSA9PiB4LmZpZWxkPy50b0xvd2VyQ2FzZSgpID09IGZvcm1GaWVsZC5maWVsZD8udG9Mb3dlckNhc2UoKVxuICAgICAgKTtcbiAgICAgIGlmIChtYXRjaGVkRmllbGQpIHtcbiAgICAgICAgZm9ybUZpZWxkID0gbWF0Y2hlZEZpZWxkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZvcm1GaWVsZDtcbiAgICB9KSk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0R2xvYmFsRmlsdGVycyhcbiAgZ2xvYmFsRmlsdGVyczogYWRkR2xvYmFsRmlsdGVyW10sXG4gIGZpZWxkOiBzdHJpbmcsXG4pIHtcbiAgbGV0IGZvcm1GaWVsZE9iajogYW55O1xuICBnbG9iYWxGaWx0ZXJzLm1hcCgoZmlsdGVyKT0+e1xuICAgIGlmIChmaWx0ZXIuZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IGZpZWxkPy50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICBmb3JtRmllbGRPYmogPSBmaWx0ZXI7XG4gICAgICB9XG4gIH0pO1xuICByZXR1cm4gZm9ybUZpZWxkT2JqO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Rm9ybUZpZWxkcyhcbiAgeyBmb3JtU2VjdGlvbnMgfTogSUR5bmFtaWNGb3JtLFxuICBmb3JtQ29udHJvbDogRUZvcm1Db250cm9sXG4pOiBJRm9ybUZpZWxkW10ge1xuICBsZXQgZm9ybUZpZWxkczogSUZvcm1GaWVsZFtdID0gW107XG4gIGZvcm1TZWN0aW9ucz8uZm9yRWFjaCgoc2VjdGlvbikgPT4ge1xuICAgIHNlY3Rpb24uZmllbGRzLmZvckVhY2goKGZvcm1GaWVsZCkgPT4ge1xuICAgICAgaWYgKGZvcm1GaWVsZC5jb250cm9sID09PSBmb3JtQ29udHJvbCkge1xuICAgICAgICBpZiAodHlwZW9mKGZvcm1GaWVsZC52YWx1ZSkgPT09ICdvYmplY3QnICYmIGZvcm1GaWVsZC52YWx1ZT8udGV4dCAmJiB0eXBlb2YoZm9ybUZpZWxkLnZhbHVlLnRleHQpID09PSAnc3RyaW5nJylcbiAgICAgICAge1xuICAgICAgICAgICBmb3JtRmllbGQudmFsdWUgPSBmb3JtRmllbGQudmFsdWUudGV4dC50cmltKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZm9ybUZpZWxkLnZhbHVlICYmIHR5cGVvZihmb3JtRmllbGQudmFsdWUpID09PSAnc3RyaW5nJylcbiAgICAgICAge1xuICAgICAgICAgIGZvcm1GaWVsZC52YWx1ZSA9IGZvcm1GaWVsZC52YWx1ZS50cmltKCk7XG4gICAgICAgIH1cbiAgICAgICAgZm9ybUZpZWxkcy5wdXNoKGZvcm1GaWVsZCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuICByZXR1cm4gZm9ybUZpZWxkcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZvcm1GaWVsZChcbiAgeyBmb3JtU2VjdGlvbnMgfTogSUR5bmFtaWNGb3JtLFxuICBmaWVsZDogc3RyaW5nXG4pOiBJRm9ybUZpZWxkIHtcbiAgbGV0IGZvcm1GaWVsZE9iajogYW55O1xuICBmb3JtU2VjdGlvbnM/LmZvckVhY2goKHNlY3Rpb24pID0+IHtcbiAgICBzZWN0aW9uLmZpZWxkcy5mb3JFYWNoKChmb3JtRmllbGQpID0+IHtcbiAgICAgIGlmIChmb3JtRmllbGQuZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IGZpZWxkPy50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgIGZvcm1GaWVsZE9iaiA9IGZvcm1GaWVsZDtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG4gIHJldHVybiBmb3JtRmllbGRPYmo7XG59XG5cbi8vIHRoaXMgZnVuY3Rpb24gaXMgYWx3YXlzIHJldHVybiBhIHZhbHVlIG9mIHRoZSBmaWVsZC4gSWYgcmV0dXJuRGlzcGxheUZpZWxkVmFsdWUgaXMgdHJ1ZSBhbmQgZGlzcGxheUZpZWxkXG4vLyBleGlzdCBpbiB0aGUgZmllbGQgdGhlbiBhbHdheXMgcmV0dXJuIGEgZGlzcGxheUZpZWxkIHZhbHVlLlxuZXhwb3J0IGZ1bmN0aW9uIGdldEZvcm1GaWVsZFZhbHVlKFxuICB7IGZvcm1TZWN0aW9ucyB9OiBJRHluYW1pY0Zvcm0sXG4gIGZpZWxkOiBzdHJpbmcsXG4gIHJldHVybkRpc3BsYXlGaWVsZFZhbHVlOmJvb2xlYW4gPSBmYWxzZVxuKSB7XG4gIGxldCB2YWx1ZTtcbiAgZm9yIChjb25zdCBzZWN0aW9uIG9mIGZvcm1TZWN0aW9ucyBhcyBhbnkpIHtcbiAgICBzZWN0aW9uLmZpZWxkcy5mb3JFYWNoKChmb3JtRmllbGQ6IGFueSkgPT4ge1xuICAgICAgaWYgKGZvcm1GaWVsZC5maWVsZD8udG9Mb3dlckNhc2UoKSA9PT0gZmllbGQ/LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgbGV0IGlzVmFsaWQgPSB0eXBlb2YgZm9ybUZpZWxkLnZhbHVlID09PSAnb2JqZWN0JyAmJiBmb3JtRmllbGQuY29udHJvbCAhPT0gRUZvcm1Db250cm9sLkNBTEVOREFSICYmIHJldHVybkRpc3BsYXlGaWVsZFZhbHVlO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgKGZvcm1GaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuTE9PS1VQX0lOUFVUIHx8IGZvcm1GaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuSU5QVVQpICYmXG4gICAgICAgICAgZm9ybUZpZWxkLmRpc3BsYXlGaWVsZFxuICAgICAgICApIHtcbiAgICAgICAgICB2YWx1ZSA9IGlzVmFsaWQgPyBmb3JtRmllbGQudmFsdWU/LnRleHQgOiBmb3JtRmllbGQudmFsdWU/LnZhbHVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhbHVlID0gaXNWYWxpZFxuICAgICAgICAgICAgPyBmb3JtRmllbGQudmFsdWU/LnRleHRcbiAgICAgICAgICAgIDogdHlwZW9mIGZvcm1GaWVsZC52YWx1ZSA9PT0gJ29iamVjdCcgJiYgZm9ybUZpZWxkLmNvbnRyb2wgIT09IEVGb3JtQ29udHJvbC5DQUxFTkRBUiAmJiBmb3JtRmllbGQuY29udHJvbCAhPT0gRUZvcm1Db250cm9sLk1VTFRJU0VMRUNUXG4gICAgICAgICAgICA/IGZvcm1GaWVsZC52YWx1ZT8udmFsdWVcbiAgICAgICAgICAgIDogZm9ybUZpZWxkLnZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Rm9ybUZpZWxkVmFsdWVBc1N0cmluZyhkeW5hbWljRm9ybTpJRHluYW1pY0Zvcm0sZmllbGQ6c3RyaW5nKTpzdHJpbmd7XG4gIGxldCB2YWx1ZTphbnkgPSBnZXRGb3JtRmllbGRWYWx1ZShkeW5hbWljRm9ybSxmaWVsZCwgdHJ1ZSk7XG4gIGlmICh2YWx1ZSl7XG4gICAgdmFsdWUgPSB2YWx1ZS50b1N0cmluZygpO1xuICAgfVxuICAgcmV0dXJuIHZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2VjdGlvbkZpZWxkVmFsdWUoXG4gIGZvcm1TZWN0aW9uczogSUZvcm1TZWN0aW9uW10sXG4gIGZpZWxkOiBzdHJpbmdcbikge1xuICBsZXQgZm9ybTogSUR5bmFtaWNGb3JtID0geyBmb3JtU2VjdGlvbnMgfTtcbiAgcmV0dXJuIGdldEZvcm1GaWVsZFZhbHVlKGZvcm0sIGZpZWxkLCB0cnVlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldFNhdmVGb3JtVmFsdWVzKFxuICBmb3JtU2VjdGlvbnM6IElGb3JtU2VjdGlvbltdLFxuICB0YWJsZXM/OiBzdHJpbmdbXVxuKSB7XG4gIGxldCByZXNwb25zZTogYW55ID0ge307XG4gIGlmICh0YWJsZXMgJiYgdGFibGVzLmxlbmd0aCA+IDApIHtcbiAgICB0YWJsZXMuZm9yRWFjaCgodGFibGVOYW1lKSA9PiB7XG4gICAgICBmb3JtU2VjdGlvbnMuZm9yRWFjaCgoZm9ybVNlY3Rpb24pID0+IHtcbiAgICAgICAgY29uc3Qgc2VjdGlvbkZpZWxkcyA9IGZvcm1TZWN0aW9uLmZpZWxkcz8uZmlsdGVyKHggPT4geC5jb250cm9sICE9PSBFRm9ybUNvbnRyb2wuQ0FSRCk7XG5cbiAgICAgICAgc2VjdGlvbkZpZWxkcz8uZm9yRWFjaCgoZmllbGQpID0+IHtcbiAgICAgICAgICBjb25zdCB0YWJsZSA9IGZpZWxkLnRhYmxlcz8ubWFwKCh0YWJsZSkgPT4gdGFibGUudG9Mb3dlckNhc2UoKSk7XG5cbiAgICAgICAgICBpZiAodGFibGUgJiYgdGFibGUuaW5jbHVkZXModGFibGVOYW1lLnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgICAgICAgICBpZiAoIXJlc3BvbnNlW3RhYmxlTmFtZV0pIHtcbiAgICAgICAgICAgICAgcmVzcG9uc2VbdGFibGVOYW1lXSA9IHt9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZmllbGQuZmllbGQgJiYgZmllbGQuZmllbGQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICByZXNwb25zZVt0YWJsZU5hbWVdW2ZpZWxkLmZpZWxkXSA9IGZvcm1hdEZvcm1GaWVsZENWYWx1ZShmaWVsZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGZvcm1TZWN0aW9ucy5mb3JFYWNoKChmb3JtU2VjdGlvbikgPT4ge1xuICAgICAgY29uc3Qgc2VjdGlvbkZpZWxkcyA9IGZvcm1TZWN0aW9uLmZpZWxkcz8uZmlsdGVyKHggPT4geC5jb250cm9sICE9PSBFRm9ybUNvbnRyb2wuQ0FSRCk7XG4gICAgICAgIHNlY3Rpb25GaWVsZHM/LmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICAgICAgaWYgKGZpZWxkLmZpZWxkICYmIGZpZWxkLmZpZWxkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHJlc3BvbnNlW2ZpZWxkLmZpZWxkXSA9IGZvcm1hdEZvcm1GaWVsZENWYWx1ZShmaWVsZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiByZXNwb25zZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldFNhdmVDYXJkVmFsdWVzKFxuICBmb3JtU2VjdGlvbnM6IElGb3JtU2VjdGlvbltdLFxuICB0YWJsZXM/OiBzdHJpbmdbXVxuKSB7XG4gIGxldCB2YWx1ZXM6IElGb3JtRmllbGRbXSA9IFtdO1xuICBmb3JtU2VjdGlvbnM/LmZvckVhY2goKHNlY3Rpb24pID0+IHtcbiAgICBzZWN0aW9uLmZpZWxkcz8uZm9yRWFjaCgoZmllbGQ6IGFueSkgPT4ge1xuICAgICAgaWYgKGZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5DQVJEICYmIGZpZWxkLmNhcmQuZGF0YSkge1xuICAgICAgICBmaWVsZC5jYXJkLmRhdGEuZm9yRWFjaCgoY2FyZERhdGE6IGFueSkgPT4ge1xuICAgICAgICAgIGlmIChjYXJkRGF0YS5keW5hbWljRm9ybS5mb3JtU2VjdGlvbnMpIHtcbiAgICAgICAgICAgIHZhbHVlcy5wdXNoKFxuICAgICAgICAgICAgICBzZXRTYXZlRm9ybVZhbHVlcyhjYXJkRGF0YS5keW5hbWljRm9ybS5mb3JtU2VjdGlvbnMsIHRhYmxlcylcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG4gIHJldHVybiB2YWx1ZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRFZGl0Rm9ybUZpZWxkcyhkYXRhOiBhbnksIGR5bmFtaWNGb3JtOiBJRHluYW1pY0Zvcm0pIHtcbiAgaWYgKGRhdGEgJiYgZGF0YS5sZW5ndGggPiAwICYmIEFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICBkYXRhLmZvckVhY2goKGRhdGFSb3cpID0+IHtcbiAgICAgIHNldEVkaXRGb3JtRmllbGRzSW5mbyhkYXRhUm93LCBkeW5hbWljRm9ybSwgZGF0YSk7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgc2V0RWRpdEZvcm1GaWVsZHNJbmZvKGRhdGEsIGR5bmFtaWNGb3JtKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0RmlsdGVyKFxuICBmaWVsZDogc3RyaW5nLFxuICB2YWx1ZTogYW55LFxuICBtYXRjaE1vZGU6IEVNYXRjaE1vZGUgPSBFTWF0Y2hNb2RlLkVRVUFMUyxcbiAgb3BlcmF0b3I6IEVPcGVyYXRvciA9IEVPcGVyYXRvci5BTkQsXG4pIHtcbiAgY29uc3QgZmlsdGVyOiBhbnkgPSB7XG4gICAgZmllbGQ6IGZpZWxkLFxuICAgIG1hdGNoTW9kZTogbWF0Y2hNb2RlLFxuICAgIG9wZXJhdG9yOiBvcGVyYXRvcixcbiAgICB2YWx1ZTogdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiAodmFsdWU/LnZhbHVlIHx8IHZhbHVlPy50ZXh0KSA/IHZhbHVlPy52YWx1ZSA6IHZhbHVlLFxuICB9O1xuICByZXR1cm4gZmlsdGVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0QW5kRmlsdGVyKGZpZWxkOiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcbiAgcmV0dXJuIHNldEZpbHRlcihmaWVsZCwgdmFsdWUsIEVNYXRjaE1vZGUuRVFVQUxTLCBFT3BlcmF0b3IuQU5EKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0T3JpZ0RhdGFGaWVsZFZhbHVlKGRhdGE6IGFueSwgcHJvcE5hbWU6IHN0cmluZyk6IGFueSB7XG4gIGxldCB2YWx1ZTogYW55O1xuICBpZiAoZGF0YSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFsdWUgPSBnZXRQcm9wZXJ0eVZhbHVlKGRhdGFbaV0sIHByb3BOYW1lKTtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlID0gZ2V0UHJvcGVydHlWYWx1ZShkYXRhLCBwcm9wTmFtZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE9yaWdEYXRhRmllbGRWYWx1ZUFzU3RyaW5nKFxuICBkYXRhOiBhbnksXG4gIHByb3BOYW1lOiBzdHJpbmdcbik6IHN0cmluZyB7XG4gIGxldCB2YWx1ZSA9IGdldE9yaWdEYXRhRmllbGRWYWx1ZShkYXRhLCBwcm9wTmFtZSk7XG4gIGlmICh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAnJztcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0U2VjdGlvblByb3BWYWx1ZXMoXG4gIHsgZm9ybVNlY3Rpb25zIH06IElEeW5hbWljRm9ybSxcbiAgc2VjdGlvbk5hbWU6IHN0cmluZyxcbiAgcHJvcHM6IElEaWN0aW9uYXJ5W11cbikge1xuICBmb3JtU2VjdGlvbnM/Lm1hcCgoc2VjdGlvbikgPT4ge1xuICAgIGlmIChzZWN0aW9uLm5hbWU/LnRvTG93ZXJDYXNlKCkgPT09IHNlY3Rpb25OYW1lLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgIHByb3BzLm1hcCgocHJvcCkgPT4ge1xuICAgICAgICByZXR1cm4gc2V0UHJvcFZhbHVlKHNlY3Rpb24sIHByb3ApO1xuICAgICAgfSk7XG4gICAgfVxuICB9KTtcbn1cblxuLyogI2VuZHJlZ2lvbiAqL1xuXG4vKiAjcmVnaW9uIHByaXZhdGUgbWV0aG9kcyAqL1xuXG5mdW5jdGlvbiBzZXRFZGl0Rm9ybUZpZWxkc0luZm8oZGF0YTogYW55LCBkeW5hbWljRm9ybTogSUR5bmFtaWNGb3JtIHwgSUR5bmFtaWNDYXJkLCBhbGxEYXRhOiBhbnlbXSA9IFtdKSB7XG4gIGlmIChkYXRhLnJlY29yZHMgJiYgZGF0YS5yZWNvcmRzLmxlbmd0aCA+IDApIHtcbiAgICBkYXRhLnJlY29yZHMuZm9yRWFjaCgocmVjb3JkOiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IGtleXM6IHN0cmluZ1tdID0gT2JqZWN0LmtleXMocmVjb3JkKTtcbiAgICAgIGR5bmFtaWNGb3JtLmZvcm1TZWN0aW9ucz8uZm9yRWFjaCgoZm9ybVNlY3Rpb24pID0+IHtcbiAgICAgICAgaWYgKGZvcm1TZWN0aW9uLmZpZWxkcykge1xuICAgICAgICAgIGZvcm1TZWN0aW9uLmZpZWxkcy5mb3JFYWNoKChmb3JtRmllbGQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbWF0Y2hlZEtleTogYW55ID0ga2V5cy5maW5kKFxuICAgICAgICAgICAgICAoeCkgPT4geC50b0xvd2VyQ2FzZSgpID09PSBmb3JtRmllbGQuZmllbGQ/LnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGlmIChtYXRjaGVkS2V5KSB7XG4gICAgICAgICAgICAgIC8vIHNldCBsYWJlbCBoeXBlcmxpbmtcbiAgICAgICAgICAgICAgc2V0TGFiZWxIeXBlcmxpbmsoZm9ybUZpZWxkLCByZWNvcmQsIGtleXMsIGFsbERhdGEpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGZvcm1GaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuSFlQRVJMSU5LICYmXG4gICAgICAgICAgICAgIGZvcm1GaWVsZC5oeXBlcmxpbmsgJiZcbiAgICAgICAgICAgICAgKChmb3JtRmllbGQuaHlwZXJsaW5rLmxpbmtJZCAmJiBmb3JtRmllbGQuaHlwZXJsaW5rLnBhcmFtcykgfHxcbiAgICAgICAgICAgICAgICBmb3JtRmllbGQuaHlwZXJsaW5rLmxpbmspXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgbGV0IHBhcmFtcyA9IGZvcm1GaWVsZC5oeXBlcmxpbmsucGFyYW1zO1xuICAgICAgICAgICAgICBsZXQgcGFyYW1LZXlzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAhcGFyYW1zICYmXG4gICAgICAgICAgICAgICAgZm9ybUZpZWxkLmh5cGVybGluay5saW5rICYmXG4gICAgICAgICAgICAgICAgZm9ybUZpZWxkLmh5cGVybGluay5saW5rLmluY2x1ZGVzKCd9fScpXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHBhcmFtS2V5cyA9IGZvcm1GaWVsZC5oeXBlcmxpbmsubGluay5zcGxpdCgnfX0nKTtcbiAgICAgICAgICAgICAgICBwYXJhbUtleXMgPSBwYXJhbUtleXMubWFwKChwYXJhbUtleSkgPT4ge1xuICAgICAgICAgICAgICAgICAgcGFyYW1LZXkgPSBwYXJhbUtleS5yZXBsYWNlKCd7eycsICcnKS50cmltKCk7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gcGFyYW1LZXk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcGFyYW1LZXlzID0gcGFyYW1LZXlzLmZpbHRlcigoeCkgPT4geC5sZW5ndGggPiAwKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZihwYXJhbXMpe1xuICAgICAgICAgICAgICAgICAgcGFyYW1LZXlzID0gT2JqZWN0LmtleXMocGFyYW1zKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBmb3JtRmllbGQuaHlwZXJsaW5rLmxpbmsgPSBzZXRIeXBlcmxpbmsoXG4gICAgICAgICAgICAgICAga2V5cyxcbiAgICAgICAgICAgICAgICByZWNvcmQsXG4gICAgICAgICAgICAgICAgZm9ybUZpZWxkLmh5cGVybGluay5saW5rLFxuICAgICAgICAgICAgICAgIHBhcmFtS2V5cyxcbiAgICAgICAgICAgICAgICBmb3JtRmllbGQuaHlwZXJsaW5rLnBhcmFtcyxcbiAgICAgICAgICAgICAgICBhbGxEYXRhXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBpZiAoZm9ybUZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5DQUxFTkRBUiAmJiBtYXRjaGVkS2V5KSB7XG4gICAgICAgICAgICAgICAgZm9ybUZpZWxkLnZhbHVlID0gZm9ybUZpZWxkLnRpbWVPbmx5ID8gcmVjb3JkW21hdGNoZWRLZXldIDogcmVjb3JkW21hdGNoZWRLZXldXG4gICAgICAgICAgICAgICAgICA/IG5ldyBEYXRlKHJlY29yZFttYXRjaGVkS2V5XSBhcyBzdHJpbmcpXG4gICAgICAgICAgICAgICAgICA6ICcnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9ybUZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5DQVJEKSB7XG4gICAgICAgICAgICAgICAgICBpZiAoZm9ybUZpZWxkLmNhcmQgJiYgZm9ybUZpZWxkLmNhcmQuZm9ybVNlY3Rpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghZm9ybUZpZWxkLmNhcmQuZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5jYXJkLmRhdGEgPSBkYXRhO1xuICAgICAgICAgICAgICAgICAgICB9XG4gIFxuICAgICAgICAgICAgICAgICAgICBzZXRFZGl0Rm9ybUZpZWxkc0luZm8oZGF0YSwgZm9ybUZpZWxkLmNhcmQpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgZm9ybUZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5BVVRPQ09NUExFVEUgJiZcbiAgICAgICAgICAgICAgICBtYXRjaGVkS2V5XG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGxldCBhcnJheVZhbHVlID0gW107XG4gICAgICAgICAgICAgICAgaWYgKHJlY29yZFttYXRjaGVkS2V5XSAmJiBmb3JtRmllbGQuZGlzcGxheUZpZWxkKSB7XG4gICAgICAgICAgICAgICAgICBhcnJheVZhbHVlLnB1c2goe1tmb3JtRmllbGQuZGlzcGxheUZpZWxkXSA6IHJlY29yZFttYXRjaGVkS2V5XX0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmb3JtRmllbGQudmFsdWUgPSBhcnJheVZhbHVlO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZvcm1GaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuTE9PS1VQX0lOUFVUIHx8IGZvcm1GaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuSU5QVVQpIHtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICBmb3JtRmllbGQubGFiZWwgJiZcbiAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2wgJiZcbiAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2wubG9va3VwQ29udHJvbCAmJlxuICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbC5sb29rdXBDb250cm9sLmRhdGFcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IG9iaiA9IGF1dG9TZXRMb29rdXBEYXRhKFxuICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sLmxvb2t1cENvbnRyb2wuZGF0YS5kYXRhLFxuICAgICAgICAgICAgICAgICAgICByZWNvcmRcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICBpZiAob2JqKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2wubG9va3VwQ29udHJvbC5kYXRhLmRhdGEgPSBvYmo7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmxvb2t1cENvbnRyb2wgJiZcbiAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5sb29rdXBDb250cm9sLmRhdGEgJiZcbiAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5sb29rdXBDb250cm9sLmRhdGEuZGF0YVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgY29uc3Qgb2JqID0gYXV0b1NldExvb2t1cERhdGEoXG4gICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5sb29rdXBDb250cm9sLmRhdGEuZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgcmVjb3JkXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgaWYgKG9iaikge1xuICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQubG9va3VwQ29udHJvbC5kYXRhLmRhdGEgPSBvYmo7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmKHJlY29yZFttYXRjaGVkS2V5XSl7XG4gICAgICAgICAgICAgICAgICBmb3JtRmllbGQudmFsdWUgPSB0b1RyaW0ocmVjb3JkW21hdGNoZWRLZXldKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmRpc3BsYXlGaWVsZCAmJlxuICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmRpc3BsYXlGaWVsZC5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBtYXRjaERpc3BsYXlGaWVsZCA9IGdldE1hdGNoS2V5KFxuICAgICAgICAgICAgICAgICAgICByZWNvcmQsXG4gICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5kaXNwbGF5RmllbGRcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICBpZiAobWF0Y2hEaXNwbGF5RmllbGQpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLnZhbHVlID0ge1xuICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IHRvVHJpbShyZWNvcmRbbWF0Y2hEaXNwbGF5RmllbGRdKSxcbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZm9ybUZpZWxkLnZhbHVlPy52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgY29uc3QgbWF0Y2hWYWx1ZUZpZWxkID0gZ2V0TWF0Y2hLZXkocmVjb3JkLCBmb3JtRmllbGQuZmllbGQpO1xuICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoVmFsdWVGaWVsZCkge1xuICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQudmFsdWUgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgdGV4dDogZm9ybUZpZWxkLnZhbHVlPy50ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0b1RyaW0ocmVjb3JkW21hdGNoVmFsdWVGaWVsZF0pLFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICBmb3JtRmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkNPTVBPTkVOVCAmJlxuICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5jb21wb25lbnRDb250cm9sPy5kYXRhXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNldERhdGFGcm9tUmVjb3JkID0gZmluZEtleXNBbmRWYWx1ZShcbiAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5jb21wb25lbnRDb250cm9sLmRhdGEsXG4gICAgICAgICAgICAgICAgICByZWNvcmRcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5jb21wb25lbnRDb250cm9sLmRhdGEgPSBzZXREYXRhRnJvbVJlY29yZD8uZGF0YTtcbiAgICAgICAgICAgICAgICBpZihzZXREYXRhRnJvbVJlY29yZD8ubWF0Y2hEYXRhKXtcbiAgICAgICAgICAgICAgICAgIGNoYW5nZUR5bmFtaWNGb3JtU3RhdGUoXG4gICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5jb21wb25lbnRDb250cm9sLmlkLFxuICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQuY29tcG9uZW50Q29udHJvbD8uZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgZmFsc2VcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuTlVNRVJJQyAmJlxuICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5sYWJlbD8ubGFiZWxDb250cm9sPy5sb29rdXBDb250cm9sPy5kYXRhPy5kYXRhXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGxldCBzZXREYXRhID0gZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbC5sb29rdXBDb250cm9sO1xuICAgICAgICAgICAgICAgIHNldERhdGEuZGF0YS5kYXRhID0gZmluZEtleXNBbmRWYWx1ZShzZXREYXRhLmRhdGEuZGF0YSwgcmVjb3JkKT8uZGF0YTtcbiAgICAgICAgICAgICAgICBjaGFuZ2VEeW5hbWljRm9ybVN0YXRlKHNldERhdGEuaWQsIHNldERhdGEuZGF0YS5kYXRhLCBmYWxzZSk7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9ybUZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5IWVBFUkxJTksgXG4gICAgICAgICAgICAgICAgJiYgIGZvcm1GaWVsZC5oeXBlcmxpbms/LnRhcmdldCA9PT0gRUh5cGVybGluay5ESUFMT0cgXG4gICAgICAgICAgICAgICAgJiYgZm9ybUZpZWxkLmh5cGVybGluay5wYXJhbXNcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgZm9ybUZpZWxkLmh5cGVybGluay5wYXJhbXMgPSBmaW5kS2V5c0FuZFZhbHVlKGZvcm1GaWVsZC5oeXBlcmxpbmsucGFyYW1zLCByZWNvcmQpPy5kYXRhO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1hdGNoZWRLZXkpIHtcbiAgICAgICAgICAgICAgICBpZiAoZm9ybUZpZWxkLmZvcm1hdCkge1xuICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLnZhbHVlID0gZm9ybWF0Rm9ybUZpZWxkVmFsdWUoXG4gICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZCxcbiAgICAgICAgICAgICAgICAgICAgcmVjb3JkW21hdGNoZWRLZXldXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9ybUZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5DSEVDS0JPWCkge1xuICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLnZhbHVlID1cbiAgICAgICAgICAgICAgICAgICAgcmVjb3JkW21hdGNoZWRLZXldICYmXG4gICAgICAgICAgICAgICAgICAgIChyZWNvcmRbbWF0Y2hlZEtleV0udG9TdHJpbmcoKSA9PT0gJzEnIHx8XG4gICAgICAgICAgICAgICAgICAgICAgcmVjb3JkW21hdGNoZWRLZXldLnRvU3RyaW5nKCkgPT09ICd0cnVlJylcbiAgICAgICAgICAgICAgICAgICAgICA/IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICA6IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1lbHNlIGlmIChmb3JtRmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkRST1BET1dOKSB7XG4gICAgICAgICAgICAgICAgICBsZXQgZHJvcFZhbHVlID0gcmVjb3JkW21hdGNoZWRLZXldO1xuICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLnZhbHVlID0gZHJvcFZhbHVlXG4gICAgICAgICAgICAgICAgICAgID8gZHJvcFZhbHVlLnRvU3RyaW5nKClcbiAgICAgICAgICAgICAgICAgICAgOiBkcm9wVmFsdWU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmKGZvcm1GaWVsZC5jb250cm9sPT09RUZvcm1Db250cm9sLlNFTEVDVEJVVFRPTil7XG4gICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLnZhbHVlPXRvVHJpbShyZWNvcmRbbWF0Y2hlZEtleV0pIHx8IGZvcm1GaWVsZC52YWx1ZVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBmb3JtRmllbGQudmFsdWUgPSB0b1RyaW0ocmVjb3JkW21hdGNoZWRLZXldKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn1cblxuLy9zZXQgaHlwZXJsaW5rIHBhcmFtIHZhbHVlIGFzIGZpZWxkIHZhbHVlXG5leHBvcnQgZnVuY3Rpb24gc2V0SHlwZXJsaW5rUGFyYW1WYWx1ZShyZWNvcmQ6YW55LCBkeW5hbWljRm9ybTogSUR5bmFtaWNGb3JtKSB7XG4gIGxldCBrZXlzOiBzdHJpbmdbXSA9IFtdO1xuICBsZXQgbGluazogc3RyaW5nID0nJztcbiAgbGV0IHBhcmFtS2V5czogc3RyaW5nW10gPSBbXTtcbiAgbGV0IHBhcmFtOiBhbnk7XG4gIGxldCBmaWVsZEluZm86IGFueTtcbiAgICBkeW5hbWljRm9ybS5mb3JtU2VjdGlvbnM/LmZvckVhY2goKHNlY3Rpb246IGFueSkgPT4ge1xuICAgICAgc2VjdGlvbi5maWVsZHMuZm9yRWFjaCgoZm9ybUZpZWxkOiBhbnkpID0+IHtcbiAgICAgICAgaWYoZm9ybUZpZWxkLmxhYmVsICYmIGZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2wgJiYgZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbC5oeXBlcmxpbms/Lmxpbmspe1xuICAgICAgICAgIGtleXMgPSBPYmplY3Qua2V5cyhyZWNvcmQpO1xuICAgICAgICAgIGlmKGZvcm1GaWVsZD8ubGFiZWw/LmxhYmVsQ29udHJvbD8ub3JpZ25hbExpbmspe1xuICAgICAgICAgICBsaW5rID0gZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbC5vcmlnbmFsTGluaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZihmb3JtRmllbGQ/LmxhYmVsPy5sYWJlbENvbnRyb2w/Lmh5cGVybGluaz8ucGFyYW1zKXtcbiAgICAgICAgICAgcGFyYW0gPSBmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sLmh5cGVybGluay5wYXJhbXM7XG4gICAgICAgICAgIHBhcmFtS2V5cyA9IE9iamVjdC5rZXlzKHBhcmFtKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZmllbGRJbmZvID0gZm9ybUZpZWxkO1xuICAgICAgICAgIGlmKHJlY29yZCAmJiBrZXlzICYmIGxpbmsgJiYgcGFyYW1LZXlzICYmIHBhcmFtICYmIGZpZWxkSW5mbyl7XG4gICAgICAgICAgICBmaWVsZEluZm8ubGFiZWwubGFiZWxDb250cm9sLmh5cGVybGluay5saW5rID0gc2V0SHlwZXJsaW5rKGtleXMsIHJlY29yZCwgbGluaywgcGFyYW1LZXlzLCBwYXJhbSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG9iakNvbnZlcnRUb0xvd2VyKG9iajogYW55KSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhvYmopLnJlZHVjZSgoYWNjdW11bGF0b3I6IGFueSwga2V5KSA9PiB7XG4gICAgYWNjdW11bGF0b3Jba2V5LnRvTG93ZXJDYXNlKCldID0gb2JqW2tleV07XG4gICAgcmV0dXJuIGFjY3VtdWxhdG9yO1xuICB9LCB7fSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGlja1NlY3Rpb25IaWdobGlnaHQodmFsdWU6IGFueSkge1xuICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcubGVmdC1zaWRlQmFyIC5wLXBhbmVsbWVudSAucC1wYW5lbG1lbnUtcGFuZWwnKTtcbiAgICAgICBjb25zdCB0aXRsZSA9IGRvY3VtZW50LmJvZHk/LnF1ZXJ5U2VsZWN0b3IoJ1t0aXRsZSA9IFwiJysgdmFsdWU/Lm5hbWUgKydcIl0nKTtcbiAgICAgICBjb25zdCBhbGxNZW51SXRlbXMgPSBkb2N1bWVudC5ib2R5Py5xdWVyeVNlbGVjdG9yQWxsKCcubGVmdC1zaWRlQmFyIC5wLXBhbmVsbWVudS1wYW5lbCcpO1xuICAgICAgIGFsbE1lbnVJdGVtcz8uZm9yRWFjaCgobWVuYXVJdGVtOiBhbnkpID0+IHtcbiAgICAgICAgbWVuYXVJdGVtPy5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgJ3AtcGFuZWxtZW51LXBhbmVsJyk7XG4gICAgICAgfSlcbiAgICAgICAgdGl0bGU/LnBhcmVudEVsZW1lbnQ/LnBhcmVudEVsZW1lbnQ/LnNldEF0dHJpYnV0ZSgnY2xhc3MnLCAncC1wYW5lbG1lbnUtcGFuZWwgYWN0aXZlJyk7XG4gICAgICAgIHRpdGxlPy5wYXJlbnRFbGVtZW50Py5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgJ3AtZWxlbWVudCBwLWNvbXBvbmVudCBwLXBhbmVsbWVudS1oZWFkZXIgcC1oaWdobGlnaHQnKTtcblxuICAgICAgICBjb25zdCBhY3RpdmVJY29uID0gZG9jdW1lbnQuYm9keT8ucXVlcnlTZWxlY3RvckFsbCgnLmFjdGl2ZS1pY29uJyk7XG4gIGFjdGl2ZUljb24/LmZvckVhY2goKGljb246IGFueSwgaW5kZXg6IGFueSkgPT4ge1xuICAgICAgaWNvbj8uc2V0QXR0cmlidXRlKCdjbGFzcycsICdwLWVsZW1lbnQgcC1jb21wb25lbnQgcC1wYW5lbG1lbnUtaGVhZGVyIHAtaGlnaGxpZ2h0Jyk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlQWN0aXZlSWNvbkNsYXNzKCkge1xuICBjb25zdCBhY3RpdmVJY29uID0gZG9jdW1lbnQuYm9keT8ucXVlcnlTZWxlY3RvckFsbCgnLmFjdGl2ZS1pY29uJyk7XG4gIGlmIChhY3RpdmVJY29uICYmIGFjdGl2ZUljb24ubGVuZ3RoID4gMCkge1xuICAgIGFjdGl2ZUljb24/LmZvckVhY2goKGljb246IGFueSwgaW5kZXg6IGFueSkgPT4ge1xuICAgICAgaWNvbj8uc2V0QXR0cmlidXRlKCdjbGFzcycsJ3AtZWxlbWVudCBwLWNvbXBvbmVudCBwLXBhbmVsbWVudS1oZWFkZXIgcC1oaWdobGlnaHQnKTtcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaGlnaGxpZ2h0TGVmdFNpZGViYXIoKXtcbiAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5mb3JtLWNvbnRhaW5lclwiKT8uYWRkRXZlbnRMaXN0ZW5lcihcIndoZWVsXCIsICgpID0+e1xuICBjb25zdCBzY3JvbGxUb3BQb3NpdGlvbjogYW55ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5mb3JtLWNvbnRhaW5lclwiKT8uc2Nyb2xsVG9wO1xuICBjb25zdCBhbGxJY29uRWxlbWVudHM6IGFueSA9IGRvY3VtZW50LmJvZHkucXVlcnlTZWxlY3RvckFsbChcIi5sZWZ0LXNpZGVCYXIgLnAtcGFuZWxtZW51IC5wLXBhbmVsbWVudS1wYW5lbFwiKTtcblxuICBhbGxJY29uRWxlbWVudHM/LmZvckVhY2goKGljb246IGFueSwgaW5kZXg6IGFueSkgPT4ge1xuICAgIGljb24/LnNldEF0dHJpYnV0ZSgndGFiSW5kZXgnLCAnc2VjdGlvbicgKyBpbmRleCk7XG4gIH0pO1xuICAgICByZW1vdmVBY3RpdmVJY29uQ2xhc3MoKTtcbiAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuZm9ybS1jb250YWluZXIgLmNhcmQnKT8uZm9yRWFjaCgoY2FyZDogYW55LCBpbmRleDogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRJZCA9IFwic2VjdGlvblwiICsgaW5kZXg7XG4gICAgICAgIGlmIChzY3JvbGxUb3BQb3NpdGlvbiA+PSBjYXJkLm9mZnNldFRvcCAmJiBzY3JvbGxUb3BQb3NpdGlvbiA8PSBjYXJkLm9mZnNldFRvcCArIGNhcmQub2Zmc2V0SGVpZ2h0KXtcbiAgICAgICAgICByZXR1cm4gIGRvY3VtZW50LmJvZHk/LnF1ZXJ5U2VsZWN0b3IoJ1t0YWJJbmRleD0nKyBjdXJyZW50SWQgKyAnXScpPy5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgJ3AtcGFuZWxtZW51LXBhbmVsIGFjdGl2ZScpO1xuICAgICAgICB9IGVsc2V7XG4gICAgICAgICAgcmV0dXJuICBkb2N1bWVudC5ib2R5Py5xdWVyeVNlbGVjdG9yKCdbdGFiSW5kZXg9JysgY3VycmVudElkICsgJ10nKT8uc2V0QXR0cmlidXRlKCdjbGFzcycsICdwLXBhbmVsbWVudS1wYW5lbCcpOyAgICBcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH0pO1xuICAgIH1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRLZXlzQW5kVmFsdWUoZGF0YTogYW55LCByZWNvcmQ6IGFueSkge1xuICBsZXQgdmFsdWVLZXk6IHN0cmluZyA9ICcnO1xuICBsZXQgc2V0RGF0YUZyb21SZWNvcmQgPSBmYWxzZTtcbiAgT2JqZWN0LmtleXMoZGF0YSkuZm9yRWFjaCgoZGF0YUtleSkgPT4ge1xuICAgIGxldCB2YWx1ZUNvbnRhaW5zS2V5OiBib29sZWFuID0gZmFsc2U7XG4gICAgaWYoZGF0YVtkYXRhS2V5XSAmJiBkYXRhW2RhdGFLZXldPy50b1N0cmluZygpPy5pbmNsdWRlcygneycpKXtcbiAgICAgIHZhbHVlQ29udGFpbnNLZXkgPSB0cnVlO1xuICAgICAgdmFsdWVLZXkgPSBkYXRhW2RhdGFLZXldPy50b1N0cmluZygpPy5yZXBsYWNlKFwie1wiLCBcIlwiKT8ucmVwbGFjZShcIn1cIiwgXCJcIilcbiAgICB9XG4gICAgbGV0IGtleSA9IE9iamVjdC5rZXlzKHJlY29yZCkuZmluZCgoa2V5KSA9PiB2YWx1ZUNvbnRhaW5zS2V5ID8gKHZhbHVlS2V5LnRvTG93ZXJDYXNlKCkgPT09IGtleS50b0xvd2VyQ2FzZSgpKSA6IChkYXRhS2V5LnRvTG93ZXJDYXNlKCkgPT09IGtleS50b0xvd2VyQ2FzZSgpKSk7XG4gICAgaWYgKChrZXkgJiYga2V5Lmxlbmd0aCA+IDAgJiYgcmVjb3JkW2tleV0pfHwgcmVjb3JkW2tleV0gPT09IGZhbHNlKSB7XG4gICAgICBzZXREYXRhRnJvbVJlY29yZCA9IHRydWVcbiAgICAgIGRhdGEgPSB7IC4uLmRhdGEsIFtkYXRhS2V5XTogcmVjb3JkW2tleV0gfTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4ge21hdGNoRGF0YTogc2V0RGF0YUZyb21SZWNvcmQsIGRhdGE6IGRhdGF9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0UHJvcFZhbHVlKG9iajogYW55LCBwcm9wOiBJRGljdGlvbmFyeSkge1xuICBjb25zdCBtYXRjaGVkS2V5OiBzdHJpbmcgPSBnZXRNYXRjaEtleShvYmosIHByb3AubmFtZSk7XG4gIGlmIChtYXRjaGVkS2V5KSB7XG4gICAgcmV0dXJuIChvYmpbbWF0Y2hlZEtleV0gPSBwcm9wLnZhbHVlKTtcbiAgfVxuICBlbHNle1xuICAgcmV0dXJuKCBvYmpbcHJvcC5uYW1lXT1wcm9wLnZhbHVlKVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNSb2xlKHJvbGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBsZXQgc3RvcmFnZSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdDdXJyZW50VXNlckluZm8nKTtcbiAgaWYgKHN0b3JhZ2UpIHtcbiAgICBsZXQgY3VycmVudFVzZXIgPSBKU09OLnBhcnNlKHN0b3JhZ2UpO1xuICAgIGlmIChjdXJyZW50VXNlciAmJiBjdXJyZW50VXNlci5yb2xlcyAmJiBjdXJyZW50VXNlci5yb2xlcy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gY3VycmVudFVzZXIucm9sZXMuc29tZSgoaXRlbTogYW55KSA9PiBpdGVtLmNvZGUudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpID09PSByb2xlLnRvTG93ZXJDYXNlKCkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIHNldExhYmVsSHlwZXJsaW5rKGl0ZW06IGFueSwgcmVjb3JkOiBhbnksIGtleXM6IHN0cmluZ1tdLCBhbGxEYXRhOiBhbnlbXSA9IFtdKSB7XG4gIGlmIChcbiAgICBpdGVtLmxhYmVsICYmXG4gICAgaXRlbS5sYWJlbC5sYWJlbENvbnRyb2wgJiZcbiAgICBpdGVtLmxhYmVsLmxhYmVsQ29udHJvbC5oeXBlcmxpbmsgJiZcbiAgICBpdGVtLmxhYmVsLmxhYmVsQ29udHJvbC5oeXBlcmxpbmsucGFyYW1zXG4gICkge1xuICAgIGNvbnN0IHBhcmFtS2V5cyA9IE9iamVjdC5rZXlzKGl0ZW0ubGFiZWwubGFiZWxDb250cm9sLmh5cGVybGluay5wYXJhbXMpO1xuICAgIGNvbnN0IGxpbmsgPSBpdGVtLmxhYmVsLmxhYmVsQ29udHJvbC5oeXBlcmxpbmsubGluaztcbiAgICBpZiAoaXRlbS5sYWJlbC5sYWJlbENvbnRyb2wuaHlwZXJsaW5rLmxpbmspIHtcbiAgICAgIGl0ZW0ubGFiZWwubGFiZWxDb250cm9sLmh5cGVybGluay5saW5rID0gc2V0SHlwZXJsaW5rKFxuICAgICAgICBrZXlzLFxuICAgICAgICByZWNvcmQsXG4gICAgICAgIGxpbmssXG4gICAgICAgIHBhcmFtS2V5cyxcbiAgICAgICAgaXRlbS5sYWJlbC5sYWJlbENvbnRyb2wuaHlwZXJsaW5rLnBhcmFtcyxcbiAgICAgICAgYWxsRGF0YVxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEh5cGVybGluayhcbiAga2V5czogc3RyaW5nW10sXG4gIHJlY29yZDogYW55LFxuICBsaW5rOiBzdHJpbmcsXG4gIHBhcmFtS2V5czogc3RyaW5nW10sXG4gIHBhcmFtczogYW55LFxuICBhbGxEYXRhOiBhbnlbXSA9IFtdXG4pOiBzdHJpbmcge1xuICBsZXQgbmV3TGluazogc3RyaW5nID0gbGluaztcbiAgcmVjb3JkID0gb2JqQ29udmVydFRvTG93ZXIocmVjb3JkKTtcbiAgcGFyYW1LZXlzLmZvckVhY2goKHBhcmFta2V5KSA9PiB7XG4gICAgY29uc3QgcGFyYW06IHN0cmluZyA9ICd7eycgKyBwYXJhbWtleS50b0xvd2VyQ2FzZSgpICsgJ319JztcbiAgICBjb25zdCBpc1BhcmFtTWF0Y2hlZCA9IG5ld0xpbmsubG9jYWxlQ29tcGFyZShwYXJhbSk7XG4gICAgY29uc3QgcGFyYW1JblJlY29yZCA9IHNldFBhcmFtS2V5VmFsdWUocmVjb3JkLCBhbGxEYXRhLCBwYXJhbWtleSk7XG5cbiAgICBpZiAoaXNQYXJhbU1hdGNoZWQpIHtcbiAgICAgIGxldCBwYXJhbVZhbHVlID0gcGFyYW1zID8gcGFyYW1zW3BhcmFta2V5XSA6IG51bGw7XG4gICAgICBpZihwYXJhbVZhbHVlID09PSAnJyAmJiBwYXJhbUluUmVjb3JkKXtcbiAgICAgICAgcGFyYW1WYWx1ZSA9ICd7JytwYXJhbWtleSsnfSc7XG4gICAgICB9XG4gICAgICBpZiAocGFyYW1WYWx1ZSkge1xuICAgICAgICBjb25zdCBwcm9wTmFtZSA9IHBhcmFtVmFsdWUudG9TdHJpbmcoKS5yZXBsYWNlKCd7JywgJycpLnJlcGxhY2UoJ30nLCAnJyk7XG4gICAgICAgIGxldCBwcm9wVmFsdWUgPSByZWNvcmRbcHJvcE5hbWUudG9Mb3dlckNhc2UoKV07XG4gICAgICAgIFxuICAgICAgICAvLyBpbiBjYXNlIG9mIHByb3Agbm90IGZvdW5kIGluIHJlY29yZCB0aGVuIHRyeSB0byBmaW5kIHByb3AgaW4gYWxsIGRhdGEgYXJyYXksIHRvIGdldCBpdHMgdmFsdWUgXG4gICAgICAgIGlmICghcHJvcFZhbHVlICYmIGFsbERhdGEgJiYgYWxsRGF0YS5sZW5ndGggPiAwKVxuICAgICAgICB7XG4gICAgICAgICAgYWxsRGF0YS5mb3JFYWNoKChkYXRhKT0+e1xuICAgICAgICAgICAgLy9jb25zdCB2YWx1ZSA9IGRhdGEucmVjb3Jkcy5maW5kKCh4KT0+IHhbcHJvcE5hbWVdKTtcbiAgICAgICAgICAgIGRhdGEucmVjb3Jkcy5mb3JFYWNoKChhbGxSZWNvcmQ6IGFueSk9PntcbiAgICAgICAgICAgICAgbGV0IGtleXMgPSBPYmplY3Qua2V5cyhhbGxSZWNvcmQpO1xuICAgICAgICAgICAgICBsZXQgbWF0Y2hLZXkgPSBrZXlzLmZpbmQoKHgpPT4geC50b0xvd2VyQ2FzZSgpID09PSBwcm9wTmFtZS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgICAgICAgaWYgKG1hdGNoS2V5KXtcbiAgICAgICAgICAgICAgICAgcHJvcFZhbHVlID0gYWxsUmVjb3JkW21hdGNoS2V5XTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgbmV3TGluayA9IG5ld0xpbmsucmVwbGFjZShuZXcgUmVnRXhwKHBhcmFtLCAnaWcnKSwgdG9UcmltKHBhcmFtVmFsdWUudG9TdHJpbmcoKS5pbmNsdWRlcygneycpID8gcHJvcFZhbHVlIDogcGFyYW1WYWx1ZSkpO1xuICAgICAgXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBnZXQgcGFyYW0gdmFsdWUgZnJvbSBhcGkgcmVzcG9uc2UsIGlmIHBhcmFtIGtleSBleGlzdHMgaW4gaXRcbiAgICAgICAgY29uc3QgbWF0Y2hlZEtleTogYW55ID0ga2V5cy5maW5kKFxuICAgICAgICAgICh4KSA9PiB4LnRvTG93ZXJDYXNlKCkgPT09IHBhcmFta2V5LnRvTG93ZXJDYXNlKClcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAobWF0Y2hlZEtleSkge1xuICAgICAgICAgIHBhcmFtVmFsdWUgPSByZWNvcmRbbWF0Y2hlZEtleV07XG4gICAgICAgICAgaWYgKHBhcmFtVmFsdWUpIHtcbiAgICAgICAgICAgIG5ld0xpbmsgPSBuZXdMaW5rLnJlcGxhY2UoXG4gICAgICAgICAgICAgIG5ldyBSZWdFeHAocGFyYW0sICdpZycpLFxuICAgICAgICAgICAgICB0b1RyaW0ocGFyYW1WYWx1ZSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5ld0xpbmsgPSBuZXdMaW5rLnJlcGxhY2UobmV3IFJlZ0V4cChwYXJhbSwgJ2lnJyksIHRvVHJpbSgnJykpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIC8vIHJlcGxhY2UgdGhlIHt7cGFyYW19fSB3aXRoIGVtcHR5XG4gIGlmKG5ld0xpbmsgJiYgbmV3TGluay5pbmNsdWRlcyhcInt7XCIpICYmIG5ld0xpbmsuaW5jbHVkZXMoXCJ9fVwiKSl7XG4gICAgbmV3TGluayA9IG5ld0xpbms/LnJlcGxhY2UoL3srLio/fSsvZywgXCJcIik7XG4gIH1cbiAgcmV0dXJuIG5ld0xpbms7XG59XG5cbi8vIGl0cyBjaGVja2luZyBpZiB0aGVyZSBpcyBubyB2YWx1ZSBpbiBoeXBlcmxpbmsgcGFyYW0gdGhlbiBpdCBzZXQga2V5IGFzIGEgcGFyYW1WYWx1ZVxuZnVuY3Rpb24gc2V0UGFyYW1LZXlWYWx1ZShyZWNvcmQ6IGFueSwgYWxsRGF0YTogYW55W10gPSBbXSwgcGFyYW1rZXk6IGFueSl7XG4gIGxldCBwYXJhbVZhbHVlOiBib29sZWFuID0gZmFsc2U7XG4gIGlmKGFsbERhdGEgJiYgYWxsRGF0YS5sZW5ndGggPiAwKXtcbiAgICBhbGxEYXRhLmZvckVhY2goKGRhdGE6IGFueSk9PntcbiAgICAgIGlmKGRhdGEucmVjb3JkcyAmJiBkYXRhLnJlY29yZHMubGVuZ3RoID4gMCl7XG4gICAgICAgIGRhdGEucmVjb3Jkcy5mb3JFYWNoKChhbGxSZWNvcmQ6IGFueSkgPT57XG4gICAgICAgICAgIGlmKHBhcmFtVmFsdWUgPT09IGZhbHNlKXtcbiAgICAgICAgICAgIHBhcmFtVmFsdWUgPSBPYmplY3Qua2V5cyhhbGxSZWNvcmQpLnNvbWUoKHJlY29yZCk9PiByZWNvcmQudG9Mb3dlckNhc2UoKSA9PT0gcGFyYW1rZXkudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICB9KTtcbiAgfWVsc2V7XG4gICAgICAgcGFyYW1WYWx1ZSA9IE9iamVjdC5rZXlzKHJlY29yZCkuc29tZSgoeCk9PiB4ID09PSBwYXJhbWtleS50b0xvd2VyQ2FzZSgpKTtcbiAgfVxuICByZXR1cm4gcGFyYW1WYWx1ZTtcbn1cblxuZnVuY3Rpb24gZ2V0UHJvcGVydHlWYWx1ZShkYXRhOiBhbnksIHByb3BOYW1lOiBzdHJpbmcpIHtcbiAgbGV0IHByb3BWYWx1ZTogYW55O1xuICBkYXRhLnJlY29yZHM/LmZvckVhY2goKHJlY29yZDogYW55KSA9PiB7XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMocmVjb3JkKSkge1xuICAgICAgaWYgKGtleSAmJiBwcm9wTmFtZSAmJiBrZXkudG9Mb3dlckNhc2UoKSA9PT0gcHJvcE5hbWUudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICBwcm9wVmFsdWUgPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcHJvcFZhbHVlO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRGb3JtRmllbGRDVmFsdWUoZmllbGQ6IGFueSkge1xuICBpZiAoXG4gICAgZmllbGQuZm9ybWF0Py50eXBlID09PSBFRm9ybWF0VHlwZS5CT09MRUFOX1lOIHx8XG4gICAgZmllbGQuZm9ybWF0Py5mb3JtYXR0ZXI/Lm5hbWUgPT09ICd0b0Jvb2xlYW4nXG4gICkge1xuICAgIHJldHVybiAoZmllbGQudmFsdWUgPT09IDEgfHwgZmllbGQudmFsdWU/LnRvU3RyaW5nKCkgPT09ICd0cnVlJyB8fCBmaWVsZC52YWx1ZT8udG9TdHJpbmcoKSA9PT0gJ1knKSA/ICdZJyA6ICdOJztcbiAgfSBlbHNlIGlmIChcbiAgICBmaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuQ0FMRU5EQVIgJiZcbiAgICAoZmllbGQudmFsdWUgfHwgZmllbGQudmFsdWUgPT09ICcnKVxuICApIHtcbiAgICBpZihmaWVsZC50aW1lT25seSl7XG4gICAgICBmaWVsZC52YWx1ZSA9IGZpZWxkLnZhbHVlO1xuICAgIH1lbHNle1xuICAgICAgZmllbGQudmFsdWUgPVxuICAgICAgZmllbGQuc2hvd1RpbWUgPT09IHRydWVcbiAgICAgICAgPyB0b1Nob3J0RGF0ZVRpbWUoZmllbGQudmFsdWUsIGZpZWxkLmZvcm1hdClcbiAgICAgICAgOiB0b1Nob3J0RGF0ZShmaWVsZC52YWx1ZSwgZmllbGQuZm9ybWF0KVxuICAgIH1cbiAgICByZXR1cm4gZmllbGQudmFsdWU7XG4gIH0gZWxzZSBpZiAoXG4gICAgKGZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5MT09LVVBfSU5QVVQgfHwgZmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLklOUFVUKSAmJlxuICAgIGZpZWxkLnZhbHVlICYmXG4gICAgdHlwZW9mIGZpZWxkLnZhbHVlID09PSAnb2JqZWN0J1xuICApIHtcbiAgICByZXR1cm4gZmllbGQudmFsdWUudmFsdWUgPT0gdW5kZWZpbmVkID8gbnVsbCA6IGZpZWxkLnZhbHVlLnZhbHVlO1xuICB9IGVsc2UgaWYgKFxuICAgIGZpZWxkLmxhYmVsICYmXG4gICAgZmllbGQubGFiZWwubGFiZWxDb250cm9sICYmXG4gICAgZmllbGQubGFiZWwubGFiZWxDb250cm9sLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5MT09LVVBfSU5QVVQgJiZcbiAgICBmaWVsZC52YWx1ZSAmJlxuICAgIHR5cGVvZiBmaWVsZC52YWx1ZSA9PT0gJ29iamVjdCdcbiAgKSB7XG4gICAgcmV0dXJuIGZpZWxkLnZhbHVlLnZhbHVlO1xuICB9IGVsc2Uge1xuICAgIGZpZWxkLnZhbHVlID0gZmllbGQudmFsdWUgPT0gdW5kZWZpbmVkID8gbnVsbCA6IGZpZWxkLnZhbHVlO1xuICAgIHJldHVybiBmaWVsZC52YWx1ZTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYXV0b1NldExvb2t1cERhdGEoXG4gIGZpZWxkRGF0YTogYW55LFxuICByZXNwb25zZTogYW55XG4pIHtcbiAgbGV0IG9iaiA9IHt9O1xuICBsZXQgcmVjb3JkID0gc2V0RGF0YUZpZWxkcyhbcmVzcG9uc2VdKTtcbiAgaWYgKHJlY29yZCAmJiByZWNvcmQubGVuZ3RoID4gMCkge1xuICAgIHJlY29yZC5mb3JFYWNoKCh4OiBhbnkpID0+IHtcbiAgICAgIHJlY29yZCA9IHg7XG4gICAgfSk7XG4gIH1cbiAgaWYgKGZpZWxkRGF0YSAmJiByZWNvcmQpIHtcbiAgICBPYmplY3QuZW50cmllcyhmaWVsZERhdGEpLmZvckVhY2goKFtkYXRhS2V5LCBkYXRhVmFsdWVdOiBhbnkpID0+IHtcbiAgICAgIGxldCByb3dLZXlzID0gT2JqZWN0LmtleXMocmVjb3JkKTtcbiAgICAgIGxldCBrZXkgPSByb3dLZXlzPy5maW5kKCh4KSA9PiB4Py50b0xvd2VyQ2FzZSgpID09PSBkYXRhS2V5Py50b1N0cmluZygpPy50b0xvd2VyQ2FzZSgpKTtcbiAgICAgIGxldCB2YWx1ZSA9IHJvd0tleXM/LmZpbmQoXG4gICAgICAgICh4KSA9PiBkYXRhVmFsdWUgJiYgZGF0YVZhbHVlPy50b1N0cmluZygpLmluY2x1ZGVzKCd7JykgJiYgeD8udG9Mb3dlckNhc2UoKSA9PT0gZGF0YVZhbHVlPy50b1N0cmluZygpPy50b0xvd2VyQ2FzZSgpPy5yZXBsYWNlKFwie1wiLCBcIlwiKT8ucmVwbGFjZShcIn1cIiwgXCJcIilcbiAgICAgICk7XG4gICAgICBpZiAodmFsdWUgJiYgdmFsdWUubGVuZ3RoID4gMCkge1xuICAgICAgICBvYmogPSB7IC4uLm9iaiwgW2RhdGFLZXldOiByZWNvcmRbdmFsdWUudG9Mb3dlckNhc2UoKV0gfTtcbiAgICAgIH0gZWxzZSBpZiAoa2V5ICYmIGtleS5sZW5ndGggPiAwKSB7XG4gICAgICAgIG9iaiA9IHsgLi4ub2JqLCBbZGF0YUtleV06IHJlY29yZFtrZXkudG9Mb3dlckNhc2UoKV0gfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9iaiA9IHsgLi4ub2JqLCBbZGF0YUtleV06IGRhdGFWYWx1ZSB9O1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBvYmo7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEdyaWRMb29rdXBEYXRhKGNvbHVtbjogSUdyaWRDb2x1bW5bXSwgZmllbGQ6IHN0cmluZywgZGF0YTogYW55KXtcbiAgbGV0IG9iaiA9IGNvbHVtbi5maW5kKCh4KT0+IHguZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IGZpZWxkLnRvTG93ZXJDYXNlKCkpO1xuICBpZihvYmogJiYgb2JqLmxvb2t1cENvbnRyb2w/LmRhdGEpe1xuICAgIG9iai5sb29rdXBDb250cm9sLmRhdGEuZGF0YSA9IGRhdGE7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldERhdGFGaWVsZHMocmVzcG9uc2U6IGFueVtdKSB7XG4gIGxldCBkYXRhOiBhbnkgPSBbXTtcbiAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLmxlbmd0aCA+IDApIHtcbiAgICByZXNwb25zZS5tYXAoKHg6IGFueSwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gT2JqZWN0LmtleXMoeCkucmVkdWNlKFxuICAgICAgICAocHJldiwgY3VycmVudCkgPT4gKHsgLi4ucHJldiwgW2N1cnJlbnQudG9Mb3dlckNhc2UoKV06IHhbY3VycmVudF0gfSksXG4gICAgICAgIHt9XG4gICAgICApO1xuXG4gICAgICBkYXRhLnB1c2gocmVzdWx0KTtcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gZGF0YTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldERpYWxvZ1Jlc3BvbnNlKFxuICBmb3JtRmllbGQ6IGFueSxcbiAgZm9ybURhdGE6IGFueSxcbiAgcmVzcG9uc2U6IGFueVxuKSB7XG4gIGxldCB2YWx1ZTogYW55O1xuICBpZiAocmVzcG9uc2UpIHtcbiAgICAvLyBpZiBzZWxlY3RlZFZhbHVlIGRvZXMgbm90IGV4aXN0IHRoZW4gY29uc2lkZXIgdmFsdWVGaWVsZCBhcyBzZWxlY3RlZFZhbHVlXG4gICAgaWYgKFxuICAgICAgZm9ybURhdGEgJiZcbiAgICAgIGZvcm1EYXRhLmRhdGEgJiZcbiAgICAgIGZvcm1EYXRhLmRhdGEubGFiZWxQcm9wICYmXG4gICAgICAhZm9ybURhdGEuZGF0YS52YWx1ZVByb3BcbiAgICApIHtcbiAgICAgIGZvcm1EYXRhLmRhdGEudmFsdWVQcm9wID0gZm9ybURhdGEuZGF0YS5sYWJlbFByb3A7XG4gICAgfVxuICAgIGVsc2UgaWYgKFxuICAgICAgZm9ybURhdGEgJiZcbiAgICAgIGZvcm1EYXRhLmRhdGEgJiZcbiAgICAgIGZvcm1EYXRhLmRhdGEudmFsdWVQcm9wICYmXG4gICAgICAhZm9ybURhdGEuZGF0YS5sYWJlbFByb3BcbiAgICApIHtcbiAgICAgIGZvcm1EYXRhLmRhdGEubGFiZWxQcm9wID0gZm9ybURhdGEuZGF0YS52YWx1ZVByb3A7XG4gICAgfVxuXG4gICAgY29uc3QgbWF0Y2hWYWx1ZUtleTogc3RyaW5nID0gZ2V0TWF0Y2hLZXkoXG4gICAgICByZXNwb25zZSxcbiAgICAgIGZvcm1EYXRhPy5kYXRhPy52YWx1ZVByb3BcbiAgICApO1xuICAgIGNvbnN0IG1hdGNoRmllbGRLZXk6IHN0cmluZyA9IGdldE1hdGNoS2V5KFxuICAgICAgcmVzcG9uc2UsXG4gICAgICBmb3JtRGF0YT8uZGF0YT8ubGFiZWxQcm9wXG4gICAgKTtcblxuICAgIGlmIChcbiAgICAgIGZvcm1EYXRhPy5kYXRhICYmXG4gICAgICBmb3JtRGF0YT8uZGF0YS52YWx1ZVByb3AgJiZcbiAgICAgIGZvcm1EYXRhPy5kYXRhLmxhYmVsUHJvcFxuICAgICkge1xuICAgICAgbGV0IHZhbHVlUHJvcCA9IHJlc3BvbnNlW21hdGNoVmFsdWVLZXldO1xuICAgICAgbGV0IG1hdGNoVGV4dCA9IHJlc3BvbnNlW21hdGNoRmllbGRLZXldO1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZVByb3AgPT09ICdzdHJpbmcnICYmIHR5cGVvZiBtYXRjaFRleHQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHZhbHVlUHJvcCA9IHZhbHVlUHJvcC50cmltKCk7XG4gICAgICAgIG1hdGNoVGV4dCA9IG1hdGNoVGV4dC50cmltKCk7XG4gICAgICB9XG4gICAgICB2YWx1ZSA9IHsgdGV4dDogbWF0Y2hUZXh0LCB2YWx1ZTogdmFsdWVQcm9wIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IEZpZWxkS2V5OiBzdHJpbmcgPSBnZXRNYXRjaEtleShyZXNwb25zZSwgZm9ybUZpZWxkLmZpZWxkKTtcbiAgICAgIGxldCB2YWx1ZSA9IHJlc3BvbnNlW0ZpZWxkS2V5XTtcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlPy50b1N0cmluZygpPy50cmltKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGN1cnJlbnRVcmwoKTpzdHJpbmd7XG4gIGxldCBjdXJyZW50Um91dGU6IHN0cmluZyA9ICcnO1xuICBsZXQgdXJsID0gd2luZG93LmxvY2F0aW9uLmhyZWY7XG4gIGlmKHVybCl7XG4gICAgbGV0IGFyciA9IHVybC5zcGxpdCgnLycpO1xuICAgIGN1cnJlbnRSb3V0ZSA9IGFyclthcnIubGVuZ3RoLTFdXG4gIH0gICAgXG4gIHJldHVybiBjdXJyZW50Um91dGU7XG59XG5cbmV4cG9ydCAgZnVuY3Rpb24gZ2V0R3JpZEZpbHRlcnMoKXtcbiAgbGV0IGZpbHRlcnM6IGFueSA9IFtdO1xuICBsZXQgZ3JpZEZpbHRlcnMgPSBjdXJyZW50VXJsKCk7XG4gICAgaWYoZ3JpZEZpbHRlcnMgJiYgZ3JpZEZpbHRlcnMubGVuZ3RoID4gMCl7XG4gICAgICBjb25zdCBsb2NhbEZpbHRlciA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ1NldEZpbHRlcnMtJytncmlkRmlsdGVycykgYXMgYW55KTtcbiAgICAgIGZpbHRlcnMgPSBsb2NhbEZpbHRlcj8uZmlsdGVycztcbiAgICB9XG4gICAgcmV0dXJuIGZpbHRlcnM7XG59XG5cbi8vdXBkYXRlIHRoZSBoaWRkZW4gb3IgZGlzYWJsZWQgYW5kIHZhbHVlIGJhc2VkIG9mZiBvdGhlciBnbG9iYWwgZmlsdGVycy5cbmV4cG9ydCBmdW5jdGlvbiBzZXRHbG9iYWxGaWx0ZXJQcm9wVmFsdWVzKFxuICBnbG9iYWxGaWx0ZXI6IElHbG9iYWxGaWx0ZXJbXSxcbiAgZmllbGQ6IHN0cmluZyxcbiAgcHJvcHM6IElGaWx0ZXJEaWN0aW9uYXJ5W10sXG4pIHtcbiAgcmV0dXJuIGdsb2JhbEZpbHRlci5tYXAoKGZpbHRlcjogYW55KSA9PiB7XG4gICAgaWYgKFxuICAgICAgKGZpbHRlci5maWVsZCAmJiBmaWx0ZXIuZmllbGQudG9Mb3dlckNhc2UoKSA9PT0gZmllbGQ/LnRvTG93ZXJDYXNlKCkpIHx8XG4gICAgICAoZmlsdGVyLmRpc3BsYXlUZXh0ICYmXG4gICAgICAgIGZpbHRlci5kaXNwbGF5VGV4dC50b0xvd2VyQ2FzZSgpID09PSBmaWVsZD8udG9Mb3dlckNhc2UoKSlcbiAgICApIHtcbiAgICAgIHByb3BzPy5tYXAoKHByb3A6IElGaWx0ZXJEaWN0aW9uYXJ5KSA9PiB7XG4gICAgICAgIGlmIChmaWx0ZXIuaGFzT3duUHJvcGVydHkocHJvcC5wcm9wTmFtZSkpIHtcbiAgICAgICAgICByZXR1cm4gKGZpbHRlcltwcm9wLnByb3BOYW1lXSA9IHByb3AucHJvcFZhbHVlKTtcbiAgICAgICAgfSBlbHNlIGlmIChwcm9wLnByb3BWYWx1ZSAmJiBwcm9wLnByb3BWYWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgcmV0dXJuIChmaWx0ZXIudmFsdWUgPSBwcm9wLnByb3BWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRDYXJkRmllbGRzRGF0YShmb3JtOiBhbnkpIHtcbiAgaWYgKGZvcm0gJiYgZm9ybS5keW5hbWljZm9ybSkge1xuICAgIGNvbnN0IHsgZHluYW1pY2Zvcm0sIC4uLm5ld0RhdGEgfSA9IGZvcm07XG4gICAgZHluYW1pY2Zvcm0/LmZvcm1TZWN0aW9ucz8uZm9yRWFjaCgoc2VjdGlvbjogYW55KSA9PiB7XG4gICAgICBzZWN0aW9uLmZpZWxkcz8uZm9yRWFjaCgoZmllbGQ6IGFueSkgPT4ge1xuICAgICAgICBpZiAobmV3RGF0YSkge1xuICAgICAgICAgIHNldEVkaXRGb3JtRmllbGRzKHsgcmVjb3JkczogW25ld0RhdGFdIH0sIGR5bmFtaWNmb3JtKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn1cblxuLy8gZGlzYWJsZSBHcmlkIEVkaXRhYmxlUm93IENvbHVtblxuZXhwb3J0IGZ1bmN0aW9uIGRpc2FibGVFZGl0Um93Q29sdW1uKGNvbHVtbnM6IElHcmlkQ29sdW1uW10sIGZpZWxkOiBzdHJpbmcpOiBJR3JpZENvbHVtbltdIHtcbiAgaWYgKGZpZWxkICYmIGNvbHVtbnMgJiYgY29sdW1ucy5sZW5ndGggPiAwKSB7XG4gICAgbGV0IG9iaiA9IGNvbHVtbnMuZmluZCgoeCkgPT4geC5maWVsZD8udG9Mb3dlckNhc2UoKSA9PT0gZmllbGQudG9Mb3dlckNhc2UoKSk7XG4gICAgbGV0IGRpc2FibGVPYmogPSB7IC4uLm9iaiwgZGlzYWJsZWQ6IHRydWUgfTtcbiAgICBjb25zdCBpbmRleCA9IGNvbHVtbnMuZmluZEluZGV4KChpOiBhbnkpID0+IGkuZmllbGQudG9Mb3dlckNhc2UoKSA9PT0gZmllbGQudG9Mb3dlckNhc2UoKSk7XG4gICAgaWYgKGluZGV4ICE9PSAtMSkgY29sdW1uc1tpbmRleF0gPSBkaXNhYmxlT2JqO1xuICB9XG4gIHJldHVybiBjb2x1bW5zO1xufVxuXG4vLyBlbmFibGVkIEdyaWQgRWRpdGFibGVSb3cgQ29sdW1uXG5leHBvcnQgZnVuY3Rpb24gZW5hYmxlZEVkaXRSb3dDb2x1bW4oY29sdW1uczogSUdyaWRDb2x1bW5bXSwgZmllbGQ6IHN0cmluZyk6IElHcmlkQ29sdW1uW10ge1xuICBpZiAoZmllbGQgJiYgY29sdW1ucyAmJiBjb2x1bW5zLmxlbmd0aCA+IDApIHtcbiAgICBsZXQgb2JqID0gY29sdW1ucy5maW5kKCh4KSA9PiB4LmZpZWxkPy50b0xvd2VyQ2FzZSgpID09PSBmaWVsZD8udG9Mb3dlckNhc2UoKSk7XG4gICAgbGV0IGVuYWJsZU9iaiA9IHsgLi4ub2JqLCBkaXNhYmxlZDogZmFsc2UgfTtcbiAgICBjb25zdCBpbmRleCA9IGNvbHVtbnMuZmluZEluZGV4KChpOiBhbnkpID0+IGkuZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IGZpZWxkPy50b0xvd2VyQ2FzZSgpKTtcbiAgICBpZiAoaW5kZXggIT09IC0xKSBjb2x1bW5zW2luZGV4XSA9IGVuYWJsZU9iajtcbiAgfVxuICByZXR1cm4gY29sdW1ucztcbn1cblxuIC8vIGNoZWNrIHRoZSBNaW51dGVzIEludGVydmFsXG4gZXhwb3J0IGZ1bmN0aW9uIHNldE1pbnV0ZXNJbnRlcnZhbCh2YWx1ZTogYW55KXtcbiAgaWYgKHZhbHVlKSB7XG4gICAgY29uc3QgbWluID0gdmFsdWUuZ2V0TWludXRlcygpLnRvU3RyaW5nKCk7XG4gICAgaWYgKG1pbikge1xuICAgICB2YWx1ZSA9IHZhbHVlLnNldE1pbnV0ZXMoMCk7XG4gICAgfVxuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuIC8vIHVwZGF0ZSB0aGUgcmVzcG9uc2UgcmVjb3Jkc1xuIGV4cG9ydCBmdW5jdGlvbiBzZXRVcGRhdGVkUmVjb3JkKHJlY29yZHM6IGFueVtdLCByb3dEYXRhOiBhbnksIGRhdGFLZXk6IHN0cmluZyk6IGFueVtde1xuICBjb25zdCBpbmRleCA9IHJlY29yZHM/LmZpbmRJbmRleCgocmVjb3JkKT0+IHJlY29yZFtkYXRhS2V5Py50b0xvd2VyQ2FzZSgpXSA9PSByb3dEYXRhW2RhdGFLZXk/LnRvTG93ZXJDYXNlKCldKTtcbiAgaWYoaW5kZXggPiAtMSl7XG4gICAgcmVjb3Jkc1tpbmRleF0gPSByb3dEYXRhO1xuICB9ZWxzZXtcbiAgICByZWNvcmRzLnB1c2gocm93RGF0YSk7XG4gIH1cbiAgcmV0dXJuIHJlY29yZHM7XG59XG5cbi8vY29udmVydCB0aGUgdGltZSBpbnRvIGRhdGVcbmV4cG9ydCBmdW5jdGlvbiBzZXRUaW1lSW5EYXRlKHRpbWU6IGFueSkge1xuICBjb25zdCBjb252ZXJ0VGltZTEydG8yNCA9ICh0aW1lMTJoOiBhbnkpID0+IHtcbiAgICBjb25zdCBbdGltZSwgbW9kaWZpZXJdID0gdGltZTEyaD8udG9TdHJpbmcoKT8uc3BsaXQoJyAnKTtcbiAgICBsZXQgW2hvdXJzLCBtaW51dGVzXSA9IHRpbWU/LnNwbGl0KCc6Jyk7XG4gICAgaWYgKGhvdXJzID09PSAnMTInKSB7XG4gICAgICBob3VycyA9ICcwMCc7XG4gICAgfVxuICAgIGlmIChtb2RpZmllciA9PT0gJ1BNJykge1xuICAgICAgaG91cnMgPSBwYXJzZUludChob3VycywgMTApICsgMTI7XG4gICAgfVxuICAgIHJldHVybiBgJHtob3Vyc306JHttaW51dGVzfWA7XG4gIH07XG4gIGNvbnN0IGRhdGUgPSBjb252ZXJ0VGltZTEydG8yNCh0aW1lKTtcbiAgY29uc3QgdGVtcERhdGUgPSBuZXcgRGF0ZSgnSnVseSAxLCAxOTk5LCAnICsgZGF0ZSArICc6MDAnKTtcbiAgY29uc3QgZnV0dXJlRGF0ZSA9IG5ldyBEYXRlKCk7XG4gIGZ1dHVyZURhdGUuc2V0VGltZSh0ZW1wRGF0ZS5nZXRUaW1lKCkpO1xuICByZXR1cm4gZnV0dXJlRGF0ZTtcbn1cblxuLy8gcmV0dXJuIHRoZSBkYXRhIG9mIHRoZSBmaWVsZCBcbmV4cG9ydCBmdW5jdGlvbiBnZXRGaWVsZERhdGEoeyBmb3JtU2VjdGlvbnMgfTogYW55LCBmaWVsZDogc3RyaW5nKXtcbiAgbGV0IGRhdGE6IGFueSA9IFtdXG4gIGlmKGZvcm1TZWN0aW9ucz8ubGVuZ3RoID4gMCAmJiBmaWVsZCl7XG4gICAgZm9ybVNlY3Rpb25zLmZvckVhY2goKHNlY3Rpb246IGFueSk9PntcbiAgICAgIGlmKHNlY3Rpb24uZmllbGRzLnNvbWUoKGZvcm1GaWVsZDphbnkpPT4gZm9ybUZpZWxkLmZpZWxkPy50b0xvd2VyQ2FzZSgpID09IGZpZWxkLnRvTG93ZXJDYXNlKCkpKXtcbiAgICAgICAgZGF0YT1zZWN0aW9uLmZpZWxkcy5maW5kKChmb3JtRmllbGQ6YW55KT0+IGZvcm1GaWVsZC5maWVsZD8udG9Mb3dlckNhc2UoKSA9PSBmaWVsZC50b0xvd2VyQ2FzZSgpKT8uZGF0YVxuICAgICAgfVxuICAgIH0pXG4gIH1cbiAgcmV0dXJuIGRhdGE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRBbGxGb3JtRmllbGRzVmFsdWVzKFxuICB7IGZvcm1TZWN0aW9ucyB9OiBJRHluYW1pY0Zvcm0sXG4gIHByb3BzOiBJRmlsdGVyRGljdGlvbmFyeVtdXG4pIHtcbiAgZm9ybVNlY3Rpb25zPy5tYXAoKHNlY3Rpb246IElGb3JtU2VjdGlvbikgPT4ge1xuICAgIGlmIChzZWN0aW9uKSB7XG4gICAgICBzZWN0aW9uLmZpZWxkcy5tYXAoKGZvcm1GaWVsZDogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiBwcm9wcy5tYXAoKHByb3A6IElGaWx0ZXJEaWN0aW9uYXJ5KSA9PiB7XG4gICAgICAgICAgaWYgKGZvcm1GaWVsZCkge1xuICAgICAgICAgICAgcmV0dXJuIChmb3JtRmllbGRbcHJvcC5wcm9wTmFtZV0gPSBwcm9wLnByb3BWYWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG59XG5cbi8vIHJldHVybnMgdGhlIHJlc3BvbnNlIGhlYWRlciBmaWxlTmFtZVxuZXhwb3J0IGZ1bmN0aW9uIGdldFJlc3BvbnNlSGVhZGVyRmlsZU5hbWUocmVzcG9uc2Upe1xuICBjb25zdCBoZWFkZXIgPSByZXNwb25zZT8uaGVhZGVycz8uZ2V0KCdDb250ZW50LURpc3Bvc2l0aW9uJyk7XG4gIHJldHVybiBoZWFkZXI/LnNwbGl0KCdmaWxlbmFtZT0nKT8uWzFdPy5zcGxpdChcIjtcIilbMF0/LnJlcGxhY2VBbGwoL1xcXCIvZywgJycpO1xufVxuXG4gZXhwb3J0IGZ1bmN0aW9uIGRyYWdnYWJsZURpYWxvZyhpZDphbnkpe1xuICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICBjb25zdCBkaWFsb2cgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdwLWRpYWxvZycpXG4gICAgZGlhbG9nWzBdPy5zZXRBdHRyaWJ1dGUoJ2lkJywnbXlkaXYnICsgaWQpXG4gICAgY29uc3QgZGlhbG9naGVhZGVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgncC1kaWFsb2ctaGVhZGVyJylcbiAgICBkaWFsb2doZWFkZXJbMF0/LnNldEF0dHJpYnV0ZSgnaWQnLCdteWRpdmhlYWRlcicgKyBpZClcbiAgICBjb25zdCBlbG1udCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdteWRpdicgKyBpZCk7XG5cbiAgICAgIGxldCBwb3MxID0gMCxcbiAgICAgICAgcG9zMiA9IDAsXG4gICAgICAgIHBvczMgPSAwLFxuICAgICAgICBwb3M0ID0gMDtcbiAgXG4gICAgICBjb25zdCBkcmFnTW91c2VEb3duID0gKGUpID0+IHtcbiAgICAgICAgZSA9IGUgfHwgd2luZG93LmV2ZW50O1xuICAgICAgICBwb3MzID0gZS5jbGllbnRYO1xuICAgICAgICBwb3M0ID0gZS5jbGllbnRZO1xuICAgICAgICBkb2N1bWVudC5vbm1vdXNldXAgPSBjbG9zZURyYWdFbGVtZW50O1xuICAgICAgICBkb2N1bWVudC5vbm1vdXNlbW92ZSA9IGVsZW1lbnREcmFnO1xuICAgICAgfTtcbiAgXG4gICAgICBjb25zdCBlbGVtZW50RHJhZyA9IChlKSA9PiB7XG4gICAgICAgIGUgPSBlIHx8IHdpbmRvdy5ldmVudDtcbiAgICAgICAgcG9zMSA9IHBvczMgLSBlLmNsaWVudFg7XG4gICAgICAgIHBvczIgPSBwb3M0IC0gZS5jbGllbnRZO1xuICAgICAgICBwb3MzID0gZS5jbGllbnRYO1xuICAgICAgICBwb3M0ID0gZS5jbGllbnRZO1xuICAgICAgICBlbG1udC5zdHlsZS50b3AgPSBlbG1udD8ub2Zmc2V0VG9wIC0gcG9zMiArICdweCc7XG4gICAgICAgIGVsbW50LnN0eWxlLmxlZnQgPSBlbG1udD8ub2Zmc2V0TGVmdCAtIHBvczEgKyAncHgnO1xuICAgICAgfTtcbiAgXG4gICAgICBjb25zdCBjbG9zZURyYWdFbGVtZW50ID0gKCkgPT4ge1xuICAgICAgICBkb2N1bWVudC5vbm1vdXNldXAgPSBudWxsO1xuICAgICAgICBkb2N1bWVudC5vbm1vdXNlbW92ZSA9IG51bGw7XG4gICAgICB9O1xuICBcbiAgICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbXlkaXZoZWFkZXInICsgaWQpKSB7XG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdteWRpdmhlYWRlcicgKyBpZCkub25tb3VzZWRvd24gPSBkcmFnTW91c2VEb3duO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZWxtbnQub25tb3VzZWRvd24gPSBkcmFnTW91c2VEb3duO1xuICAgICAgfVxuICAgIH0sIDEwMCk7XG4gICAgfSAgXG5leHBvcnQgZnVuY3Rpb24gY2FsZW5kYXJNaW5NYXhWYWx1ZShpdGVtOiBhbnksdmFsdWU6IGFueSwgaW5kZXgpe1xuICBsZXQgdmFsaWRhdGlvbjogc3RyaW5nID0gJ2VxdWFsJztcbiAgdmFyIHZhbGlkRGF0ZSA9IG5ldyBEYXRlKGl0ZW0udmFsaWRhdGlvbnNbaW5kZXhdLmV4cHJlc3Npb24pO1xuICB2YXIgY3VycmVudERhdGUgPSBuZXcgRGF0ZSh2YWx1ZSk7XG4gIGlmICh2YWxpZERhdGUuZ2V0VGltZSgpIDwgY3VycmVudERhdGUuZ2V0VGltZSgpKXtcbiAgICB2YWxpZGF0aW9uID0gJ2dyZWF0ZXInO1xuICB9XG4gIGVsc2UgaWYgKHZhbGlkRGF0ZS5nZXRUaW1lKCkgPiBjdXJyZW50RGF0ZS5nZXRUaW1lKCkpe1xuICAgIHZhbGlkYXRpb24gPSAnbWluaW11bSc7XG4gIH1cbiAgcmV0dXJuIHZhbGlkYXRpb247XG59XG4vKiAjZW5kcmVnaW9uICovXG4iXX0=
|
|
@@ -980,7 +980,7 @@ function findKeysAndValue(data, record) {
|
|
|
980
980
|
valueKey = data[dataKey]?.toString()?.replace("{", "")?.replace("}", "");
|
|
981
981
|
}
|
|
982
982
|
let key = Object.keys(record).find((key) => valueContainsKey ? (valueKey.toLowerCase() === key.toLowerCase()) : (dataKey.toLowerCase() === key.toLowerCase()));
|
|
983
|
-
if (key && key.length > 0) {
|
|
983
|
+
if ((key && key.length > 0 && record[key]) || record[key] === false) {
|
|
984
984
|
setDataFromRecord = true;
|
|
985
985
|
data = { ...data, [dataKey]: record[key] };
|
|
986
986
|
}
|