@wavemaker/app-ng-runtime 11.4.0-next.24593 → 11.4.0-next.24653
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.
- app-ng-runtime/build-task/bundles/index.umd.js +2 -2
- app-ng-runtime/build-task/bundles/index.umd.js.map +1 -1
- app-ng-runtime/build-task/esm2015/navigation/popover/popover.build.js +3 -3
- app-ng-runtime/build-task/fesm2015/index.js +2 -2
- app-ng-runtime/build-task/fesm2015/index.js.map +1 -1
- app-ng-runtime/components/base/bundles/index.umd.js +6 -3
- app-ng-runtime/components/base/bundles/index.umd.js.map +1 -1
- app-ng-runtime/components/base/esm2015/utils/widget-utils.js +7 -4
- app-ng-runtime/components/base/fesm2015/index.js +6 -3
- app-ng-runtime/components/base/fesm2015/index.js.map +1 -1
- app-ng-runtime/components/base/utils/widget-utils.d.ts +1 -1
- app-ng-runtime/components/data/list/bundles/index.umd.js +28 -4
- app-ng-runtime/components/data/list/bundles/index.umd.js.map +1 -1
- app-ng-runtime/components/data/list/esm2015/list.component.js +29 -5
- app-ng-runtime/components/data/list/fesm2015/index.js +28 -4
- app-ng-runtime/components/data/list/fesm2015/index.js.map +1 -1
- app-ng-runtime/components/data/list/index.metadata.json +1 -1
- app-ng-runtime/components/dialogs/default/bundles/index.umd.js.map +1 -1
- app-ng-runtime/components/dialogs/default/esm2015/base-dialog.js +1 -1
- app-ng-runtime/components/dialogs/default/fesm2015/index.js.map +1 -1
- app-ng-runtime/components/dialogs/default/index.metadata.json +1 -1
- app-ng-runtime/components/input/epoch/bundles/index.umd.js +39 -21
- app-ng-runtime/components/input/epoch/bundles/index.umd.js.map +1 -1
- app-ng-runtime/components/input/epoch/esm2015/base-date-time.component.js +43 -25
- app-ng-runtime/components/input/epoch/esm2015/date/date.component.js +3 -3
- app-ng-runtime/components/input/epoch/esm2015/date-time/date-time.component.js +2 -2
- app-ng-runtime/components/input/epoch/fesm2015/index.js +45 -27
- app-ng-runtime/components/input/epoch/fesm2015/index.js.map +1 -1
- app-ng-runtime/components/input/epoch/index.metadata.json +1 -1
- app-ng-runtime/components/navigation/popover/bundles/index.umd.js +3 -4
- app-ng-runtime/components/navigation/popover/bundles/index.umd.js.map +1 -1
- app-ng-runtime/components/navigation/popover/esm2015/popover.component.js +5 -6
- app-ng-runtime/components/navigation/popover/fesm2015/index.js +4 -5
- app-ng-runtime/components/navigation/popover/fesm2015/index.js.map +1 -1
- app-ng-runtime/package.json +1 -1
|
@@ -473,9 +473,12 @@ export const setFocusTrap = (container, allowOutsideClick, setReturnFocusElement
|
|
|
473
473
|
* @returns {Array}
|
|
474
474
|
*/
|
|
475
475
|
export const getKeyboardFocusableElements = (element) => {
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
476
|
+
const elementNodeList = element.querySelectorAll('a, button, input, textarea, select, details, iframe, embed, object, summary dialog, audio[controls], video[controls], [contenteditable]');
|
|
477
|
+
const elements = Array.from(elementNodeList);
|
|
478
|
+
return elements.filter(el => {
|
|
479
|
+
return (!el.hasAttribute('disabled') && !el.hasAttribute('hidden')
|
|
480
|
+
&& (!el.hasAttribute('tabindex') || (el.hasAttribute('tabindex') && !el.getAttribute("tabindex").startsWith('-'))));
|
|
481
|
+
});
|
|
479
482
|
};
|
|
480
483
|
export { ɵ0, ɵ1, ɵ2, ɵ3 };
|
|
481
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LXV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9iYXNlL3NyYy91dGlscy93aWRnZXQtdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxnQkFBZ0IsRUFBRSxjQUFjLEVBQUUsVUFBVSxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSwyQkFBMkIsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUN0TCxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUt4RSxNQUFNLGVBQWUsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsY0FBYyxDQUFDLFdBQVcsRUFBRSxjQUFjLENBQUMsUUFBUTtJQUN2RyxjQUFjLENBQUMsTUFBTSxFQUFFLGNBQWMsQ0FBQyxZQUFZLEVBQUUsY0FBYyxDQUFDLEtBQUssRUFBRSxjQUFjLENBQUMsU0FBUyxFQUFFLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ2hJOzs7O0dBSUc7QUFDSCxNQUFNLGNBQWMsR0FBRyxDQUFDLElBQVksRUFBRSxFQUFFO0lBQ3BDLElBQUksT0FBTyxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLG9CQUFvQixDQUFDO0lBRWpHLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGtCQUFrQixFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBRWpELEtBQUssQ0FBQyxHQUFH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QUFNLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxXQUFXLEVBQUU7UUFDOUMsY0FBYyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUM3QjtJQUNELE9BQU8sY0FBYyxDQUFDO0FBQzFCLENBQUMsQ0FBQTtBQUVELE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxDQUFDLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxxQkFBc0IsRUFBRSxFQUFFO0lBQ2pGLE9BQU8sZUFBZSxDQUFDLFNBQVMsRUFBRTtRQUM5QixVQUFVLEVBQUUsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDO1FBQ3RELFlBQVksRUFBRSxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUM7UUFDM0QsaUJBQWlCLEVBQUUsaUJBQWlCO1FBQ3BDLGNBQWMsRUFBRSxxQkFBcUI7S0FDeEMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQyxDQUFBO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLDRCQUE0QixHQUFHLENBQUMsT0FBb0IsRUFBRSxFQUFFO0lBQ2pFLE9BQU8sQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQzVCLDBLQUEwSyxDQUM3SyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFO1FBQ1gsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUM5RSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNWLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGZvcndhcmRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgZW5jb2RlVXJsLCBpc1ZhbGlkV2ViVVJMLCBzdHJpbmdTdGFydHNXaXRoLCBGb3JtV2lkZ2V0VHlwZSwgJHBhcnNlRXhwciwgZ2V0Q2xvbmVkT2JqZWN0LCBwcmV0dGlmeUxhYmVsLCBpbml0Q2FwcywgZGVIeXBoZW5hdGUsIGNoZWNrSXNDdXN0b21QaXBlRXhwcmVzc2lvbiB9IGZyb20gJ0B3bS9jb3JlJztcbmltcG9ydCB7IERpYWxvZ1JlZiwgV2lkZ2V0UmVmIH0gZnJvbSAnLi4vd2lkZ2V0cy9mcmFtZXdvcmsvdHlwZXMnO1xuaW1wb3J0IHsgY3JlYXRlRm9jdXNUcmFwIH0gZnJvbSAnQHdhdmVtYWtlci9mb2N1cy10cmFwL2Rpc3QvZm9jdXMtdHJhcCc7XG5pbXBvcnQgeyBOYXZOb2RlIH0gZnJvbSBcIi4uL3dpZGdldHMvY29tbW9uL2Jhc2UvZGF0YXNldC1hd2FyZS1uYXYuY29tcG9uZW50XCI7XG5cbmRlY2xhcmUgY29uc3QgXztcblxuY29uc3QgREFUQVNFVF9XSURHRVRTID0gbmV3IFNldChbRm9ybVdpZGdldFR5cGUuU0VMRUNULCBGb3JtV2lkZ2V0VHlwZS5DSEVDS0JPWFNFVCwgRm9ybVdpZGdldFR5cGUuUkFESU9TRVQsXG4gICAgRm9ybVdpZGdldFR5cGUuU1dJVENILCBGb3JtV2lkZ2V0VHlwZS5BVVRPQ09NUExFVEUsIEZvcm1XaWRnZXRUeXBlLkNISVBTLCBGb3JtV2lkZ2V0VHlwZS5UWVBFQUhFQUQsIEZvcm1XaWRnZXRUeXBlLlJBVElOR10pO1xuLyoqXG4gKiBSZXR1cm5zIHRoZSBwYXJzZWQsIHVwZGF0ZWQgYm91bmQgZXhwcmVzc2lvblxuICogaWYgdGhlIGV4cHJlc3Npb24gaXMgJFtkYXRhWyRpXVtmaXJzdE5hbWVdXSArICctLScgKyAkW2xhc3ROYW1lXSArICctLScgKyAkWydASURAJ11cbiAqIHJldHVybnMgX18xLmZpcnN0TmFtZSArICctLScgKyBsYXN0TmFtZSArICctLScgKyBfXzFbJ0BJREAnXVxuICovXG5jb25zdCBnZXRVcGRhdGVkRXhwciA9IChleHByOiBzdHJpbmcpID0+IHtcbiAgICBsZXQgdXBkYXRlZCA9ICcnLCBjaCwgbmV4dCwgaSwgaiwgbWF0Y2hDaCwgbWF0Y2hDb3VudCwgaXNRdW90ZWRTdHIsIHN1YlN0ciwgaXNRdW90ZWRTdHJFdmFsdWF0ZWQ7XG5cbiAgICBleHByID0gZXhwci5yZXBsYWNlKC9cXCRcXFtkYXRhXFxbXFwkaVxcXS9nLCAnJFtfXzEnKTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBleHByLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNoID0gZXhwcltpXTtcbiAgICAgICAgbmV4dCA9IGV4cHJbaSArIDFdO1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBpZiB0aGUgZXhwcmVzc2lvbiBzdGFydHMgd2l0aCAkWywgY2hlY2sgdGhlIG5leHQoY2gpIGNoYXJhY3RlcixcbiAgICAgICAgICogICAgaWYgY2ggaXMgYSBxdW90ZSgnLCBcIikgY2hhbmdlIHRoZSBleHByIHRvIF9fW1xuICAgICAgICAgKiAgICBpZiBjaCBpcyBhIHdoaXRlU3BhY2UsIHJlbW92ZSBpdFxuICAgICAgICAgKiAgICBlbHNlIHJlbW92ZSAkW1xuICAgICAgICAgKi9cbiAgICAgICAgaWYgKGNoID09PSAnJCcgJiYgbmV4dCA9PT0gJ1snKSB7XG4gICAgICAgICAgICBtYXRjaENvdW50ID0gMTtcbiAgICAgICAgICAgIGlzUXVvdGVkU3RyRXZhbHVhdGVkID0gZmFsc2U7XG4gICAgICAgICAgICBpc1F1b3RlZFN0ciA9IGZhbHNlO1xuXG4gICAgICAgICAgICBmb3IgKGogPSBpICsgMjsgaiA8IGV4cHIubGVuZ3RoOyBqKyspIHtcblxuICAgICAgICAgICAgICAgIG1hdGNoQ2ggPSBleHByW2pdO1xuXG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoQ2ggPT09ICcgJykge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoIWlzUXVvdGVkU3RyRXZhbHVhdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGlzUXVvdGVkU3RyID0gZXhwcltqXSA9PT0gJ1wiJyB8fCBleHByW2pdID09PSAnXFwnJztcbiAgICAgICAgICAgICAgICAgICAgaXNRdW90ZWRTdHJFdmFsdWF0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChtYXRjaENoID09PSAnWycpIHtcbiAgICAgICAgICAgICAgICAgICAgbWF0Y2hDb3VudCsrO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobWF0Y2hDaCA9PT0gJ10nKSB7XG4gICAgICAgICAgICAgICAgICAgIG1hdGNoQ291bnQtLTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoIW1hdGNoQ291bnQpIHtcbiAgICAgICAgICAgICAgICAgICAgc3ViU3RyID0gZXhwci5zdWJzdHJpbmcoaSArIDIsIGopO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNRdW90ZWRTdHIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZWQgKz0gJ19fMVsnICsgc3ViU3RyICsgJ10nO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlZCArPSBzdWJTdHI7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpID0gajtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHVwZGF0ZWQgKz0gY2g7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdXBkYXRlZDtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgdmFsdWUgZm9yIHRoZSBwcm92aWRlZCBrZXkgaW4gdGhlIG9iamVjdFxuICovXG5leHBvcnQgY29uc3QgZ2V0T2JqVmFsdWVCeUtleSA9IChvYmo6IGFueSwgc3RyS2V5OiBzdHJpbmcpID0+IHtcbiAgICAvKiBjaGVjayBmb3IgdGhlIGtleS1zdHJpbmcgKi9cbiAgICBpZiAoc3RyS2V5KSB7XG4gICAgICAgIGxldCB2YWw7XG4gICAgICAgIC8qIGNvbnZlcnQgaW5kZXhlcyB0byBwcm9wZXJ0aWVzLCBzbyBhcyB0byB3b3JrIGZvciBldmVuICdrZXkxWzBdLmNoaWxkMScqL1xuICAgICAgICBzdHJLZXkucmVwbGFjZSgvXFxbKFxcdyspXFxdL2csICcuJDEnKS5zcGxpdCgnLicpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgIC8vIElmIG9iaiBpcyBudWxsLCB0aGVuIGFzc2lnbiB2YWwgdG8gbnVsbC5cbiAgICAgICAgICAgIHZhbCA9ICh2YWwgJiYgdmFsW2tleV0pIHx8IChfLmlzTnVsbChvYmopID8gb2JqIDogb2JqW2tleV0pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHZhbDtcbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbn07XG5cbi8qKlxuICogcmV0dXJucyB0aGUgZGlzcGxheSBmaWVsZCBkYXRhIGZvciBhbnkgZGF0YXNldCB3aWRnZXRzXG4gKiBCYXNlZCBvbiB0aGUgYmluZCBkaXNwbGF5IGV4cHJlc3Npb24gb3IgZGlzcGxheSBleHByZXNzaW9uIG9yIGRpc3BsYXkgbmFtZSxcbiAqIGRhdGEgaXMgZXh0cmFjdGVkIGFuZCBmb3JtYXR0ZWQgZnJvbSB0aGUgcGFzc2VkIG9wdGlvbiBvYmplY3RcbiAqIElmIHRoZXJlIGlzIGZpZWxkIGlzIHNwZWNpZmllZCwgZmllbGQgdmFsdWUgaXMgb2J0YWluZWQgZnJvbSB0aGUgZGF0YU9iai5cbiAqIElmIGV4cHJlc3Npb24gaXMgZ2l2ZW4sIGV2YWx1YXRlcyB0aGUgZXhwcmVzc2lvbiB2YWx1ZS5cbiAqIGVsc2UgY2hlY2sgZm9yIGJpbmRFeHByZXNzaW9uLCBleHRyYWN0IHRoZSB2YWx1ZSBmcm9tIHRoZSBkYXRhT2JqXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRFdmFsdWF0ZWREYXRhID0gKGRhdGFPYmo6IGFueSwgb3B0aW9uczogYW55LCBjb250ZXh0PzogYW55KSA9PiB7XG4gICAgbGV0IGV4cHJlc3Npb25WYWx1ZTtcbiAgICBjb25zdCBmaWVsZCA9IG9wdGlvbnMuZmllbGQsXG4gICAgICAgIGV4cHIgPSBvcHRpb25zLmV4cHJlc3Npb24sXG4gICAgICAgIGJpbmRFeHByID0gb3B0aW9ucy5iaW5kRXhwcmVzc2lvbjtcblxuICAgIC8vIGlmIGtleSBpcyBib3VuZCBleHByZXNzaW9uXG4gICAgaWYgKGJpbmRFeHByKSB7XG4gICAgICAgIC8vIHJlbW92ZSAnYmluZDonIHByZWZpeCBmcm9tIHRoZSBib3VuZEV4cHJlc3Npb25OYW1lXG4gICAgICAgIGV4cHJlc3Npb25WYWx1ZSA9IGJpbmRFeHByLnJlcGxhY2UoJ2JpbmQ6JywgJycpO1xuXG4gICAgICAgIC8vIEZvciBiaW5kIGV4cHJlc3Npb24gcGFzc2luZyB0aGUgbGFzdCBhcmd1bWVudCB0aGF0IHRoZSBvYmplY3Qgb2YgZGF0YXNldCBpdGVtLlxuICAgICAgICAvLyBOb3RlOiBGb3IgcGFyc2UgZXhwcmVzc2lvbiB3ZSBhcmUgc2VuZGluZyBkYXRhT2JqIHdpdGggdGhlIHByb3BlcnkgbmFtZSBcIl9fMVwiLCB3ZSB1c2VkIHRoZSBzYW1lIHByb3BlcnkgdG8gc2VuZCB0aGUgbGFzdCBhcmd1bWVudCBhcyBkYXRhc2V0IGl0ZW1cbiAgICAgICAgaWYoY2hlY2tJc0N1c3RvbVBpcGVFeHByZXNzaW9uKGV4cHJlc3Npb25WYWx1ZSkpe1xuICAgICAgICAgICAgZXhwcmVzc2lvblZhbHVlID0gZXhwcmVzc2lvblZhbHVlKyc6IF9fMSc7XG4gICAgICAgIH1cbiAgICAgICAgLy8gcGFyc2UgdGhlIGV4cHJlc3Npb25WYWx1ZSBmb3IgcmVwbGFjaW5nIGFsbCB0aGUgZXhwcmVzc2lvbnMgd2l0aCB2YWx1ZXMgaW4gdGhlIG9iamVjdFxuICAgICAgICBleHByZXNzaW9uVmFsdWUgPSBnZXRVcGRhdGVkRXhwcihleHByZXNzaW9uVmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGV4cHJlc3Npb25WYWx1ZSA9IGV4cHIgPyBleHByIDogZmllbGQ7XG4gICAgfVxuXG4gICAgLy8gSGFuZGxpbmcgZmllbGQgbmFtZSB3aXRoIHNwZWNpYWwgY2hhcmVjdGVyc1xuICAgIC8vIEV4OiBmaWVsZCA9IFwiZiBuYW1lXCJcbiAgICBpZiAoIWJpbmRFeHByICYmICFleHByKSB7XG4gICAgICAgIHJldHVybiBfLmdldChkYXRhT2JqLCBmaWVsZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuICRwYXJzZUV4cHIoZXhwcmVzc2lvblZhbHVlKShjb250ZXh0LCBPYmplY3QuYXNzaWduKHt9LCBkYXRhT2JqLCB7X18xOiBkYXRhT2JqfSkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzQWN0aXZlTmF2SXRlbSA9IChsaW5rLCByb3V0ZU5hbWUpID0+IHtcbiAgICBpZiAoIWxpbmsgfHwgIXJvdXRlTmFtZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJvdXRlTmFtZSA9IHJvdXRlTmFtZS5pbmRleE9mKCc/JykgPT09IC0xID8gcm91dGVOYW1lIDogcm91dGVOYW1lLnN1YnN0cmluZygwLCByb3V0ZU5hbWUuaW5kZXhPZignPycpKTtcbiAgICBsaW5rID0gbGluay5pbmRleE9mKCc/JykgPT09IC0xID8gbGluayA6IGxpbmsuc3Vic3RyaW5nKDAsIGxpbmsuaW5kZXhPZignPycpKTtcbiAgICBjb25zdCByb3V0ZVJlZ2V4ID0gbmV3IFJlZ0V4cCgnXigjXFwvfCMpJyArIHJvdXRlTmFtZSArICckJyk7XG4gICAgcmV0dXJuIHJvdXRlUmVnZXgudGVzdChsaW5rKTtcbn07XG5cbi8qKlxuKiByZXR1cm5zIHRydWUgaWYgdGhlIG1lbnUgaGFzIGxpbmsgdG8gdGhlIGN1cnJlbnQgcGFnZS5cbiogQHBhcmFtIG5vZGVzXG4qIEBwYXJhbSByb3V0ZVVybFxuKi9cbmV4cG9ydCBjb25zdCBoYXNMaW5rVG9DdXJyZW50UGFnZSA9IChub2RlczogQXJyYXk8TmF2Tm9kZT4sIHJvdXRlVXJsKSA9PiB7XG4gICAgcmV0dXJuIG5vZGVzLnNvbWUobm9kZSA9PiB7XG4gICAgICAgIGlmIChpc0FjdGl2ZU5hdkl0ZW0obm9kZS5saW5rLCByb3V0ZVVybCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICByZXR1cm4gaGFzTGlua1RvQ3VycmVudFBhZ2Uobm9kZS5jaGlsZHJlbiwgcm91dGVVcmwpO1xuICAgICAgICB9XG4gICAgfSk7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgb3JkZXJCeSBFeHByZXNzaW9uIGJhc2VkIG9uIHRoZSAnc29ydCAnb3B0aW9uIGluIHBhZ2VhYmxlIG9iamVjdFxuICogcmV0dXJuZWQgYnkgYmFja2VuZFxuICogQHBhcmFtIHBhZ2VhYmxlT2JqXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgY29uc3QgZ2V0T3JkZXJCeUV4cHIgPSBwYWdlYWJsZU9iaiA9PiB7XG4gICAgcGFnZWFibGVPYmogPSBwYWdlYWJsZU9iaiB8fCBbXTtcbiAgICBjb25zdCBleHByZXNzaW9ucyAgICAgICA9IFtdLFxuICAgICAgICBLRVlfVkFMX1NFUEFSQVRPUiA9ICcgJyxcbiAgICAgICAgRklFTERfU0VQQVJBVE9SICAgPSAnLCc7XG4gICAgXy5mb3JFYWNoKHBhZ2VhYmxlT2JqLCBvYmogPT4ge1xuICAgICAgICBpZiAob2JqLmRpcmVjdGlvbikge1xuICAgICAgICAgICAgZXhwcmVzc2lvbnMucHVzaChvYmoucHJvcGVydHkgKyBLRVlfVkFMX1NFUEFSQVRPUiArIG9iai5kaXJlY3Rpb24udG9Mb3dlckNhc2UoKSk7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBfLmpvaW4oZXhwcmVzc2lvbnMsIEZJRUxEX1NFUEFSQVRPUik7XG59O1xuXG5leHBvcnQgY29uc3QgaXNEYXRhU2V0V2lkZ2V0ID0gd2lkZ2V0ID0+IHtcbiAgICByZXR1cm4gREFUQVNFVF9XSURHRVRTLmhhcyh3aWRnZXQpO1xufTtcblxuLypUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHVybCB0byB0aGUgaW1hZ2UgYWZ0ZXIgY2hlY2tpbmcgdGhlIHZhbGlkaXR5IG9mIHVybCovXG5leHBvcnQgY29uc3QgZ2V0SW1hZ2VVcmwgPSAodXJsU3RyaW5nLCBzaG91bGRFbmNvZGU/LCBkZWZhdWx0VXJsPykgPT4ge1xuICAgIC8qSW4gc3R1ZGlvIG1vZGUgYmVmb3JlIHNldHRpbmcgcGljdHVyZXNvdXJjZSwgY2hlY2sgaWYgdGhlIHN0dWRpb0NvbnRyb2xsZXIgaXMgbG9hZGVkIGFuZCBuZXcgcGljdHVyZXNvdXJjZSBpcyBpbiAnc3R5bGVzL2ltYWdlcy8nIHBhdGggb3Igbm90LlxuICAgICAqIFdoZW4gcGFnZSBpcyByZWZyZXNoZWQsIGxvYWRlci5naWYgd2lsbCBiZSBsb2FkZWQgZmlyc3QgYW5kIGl0IHdpbGwgYmUgaW4gJ3N0eWxlL2ltYWdlcy8nLlxuICAgICAqIFByZXBlbmQgJ3NlcnZpY2VzL3Byb2plY3RzLycgKyAkcm9vdFNjb3BlLnByb2plY3QuaWQgKyAnL3dlYi9yZXNvdXJjZXMvaW1hZ2VzL2ltYWdlbGlzdHMvJyAgaWYgdGhlIGltYWdlIHVybCBpcyBqdXN0IGltYWdlIG5hbWUgaW4gdGhlIHByb2plY3Qgcm9vdCxcbiAgICAgKiBhbmQgaWYgdGhlIHVybCBwb2ludGluZyB0byByZXNvdXJjZXMvaW1hZ2VzLyB0aGVuICdzZXJ2aWNlcy9wcm9qZWN0cy8nICsgJHJvb3RTY29wZS5wcm9qZWN0LmlkICsgJy93ZWIvJyovXG4gICAgaWYgKGlzVmFsaWRXZWJVUkwodXJsU3RyaW5nKSkge1xuICAgICAgICByZXR1cm4gdXJsU3RyaW5nO1xuICAgIH1cblxuICAgIC8vIElmIG5vIHZhbHVlIGlzIHByb3ZpZGVkIGZvciBwaWN0dXJlc291cmNlIGFzc2lnbiBwaWN0dXJlcGxhY2Vob2xkZXIgb3IgZGVmYXVsdC1pbWFnZVxuICAgIGlmICghdXJsU3RyaW5nKSB7XG4gICAgICAgIHVybFN0cmluZyA9IGRlZmF1bHRVcmwgfHwgJ3Jlc291cmNlcy9pbWFnZXMvaW1hZ2VsaXN0cy9kZWZhdWx0LWltYWdlLnBuZyc7XG4gICAgfVxuXG4gICAgdXJsU3RyaW5nID0gc2hvdWxkRW5jb2RlID8gZW5jb2RlVXJsKHVybFN0cmluZykgOiB1cmxTdHJpbmc7XG5cbiAgICAvLyBpZiB0aGUgcmVzb3VyY2UgdG8gYmUgbG9hZGVkIGlzIGluc2lkZSBhIHByZWZhYlxuICAgIGlmIChzdHJpbmdTdGFydHNXaXRoKHVybFN0cmluZywgJ3NlcnZpY2VzL3ByZWZhYnMnKSkge1xuICAgICAgICByZXR1cm4gdXJsU3RyaW5nO1xuICAgIH1cblxuICAgIHJldHVybiB1cmxTdHJpbmc7XG59O1xuXG4vKlRoaXMgbWV0aG9kIHJldHVybnMgdGhlIHVybCB0byB0aGUgYmFja2dyb3VuZEltYWdlKi9cbmV4cG9ydCBjb25zdCBnZXRCYWNrR3JvdW5kSW1hZ2VVcmwgPSAodXJsU3RyaW5nKSA9PiB7XG4gICAgaWYgKHVybFN0cmluZyA9PT0gJycgfHwgdXJsU3RyaW5nID09PSAnbm9uZScpIHtcbiAgICAgICAgcmV0dXJuIHVybFN0cmluZztcbiAgICB9XG4gICAgcmV0dXJuICd1cmwoJyArIGdldEltYWdlVXJsKHVybFN0cmluZykgKyAnKSc7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZUFzKHJlZmVyZW5jZTogYW55LCBrZXk6IGFueSwgbXVsdGk/OiBib29sZWFuKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgcHJvdmlkZToga2V5LFxuICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiByZWZlcmVuY2UpLFxuICAgICAgICBtdWx0aTogbXVsdGlcbiAgICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZUFzV2lkZ2V0UmVmKHJlZmVyZW5jZTogYW55KSB7XG4gICAgcmV0dXJuIHByb3ZpZGVBcyhyZWZlcmVuY2UsIFdpZGdldFJlZik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm92aWRlQXNEaWFsb2dSZWYocmVmZXJlbmNlOiBhbnkpIHtcbiAgICByZXR1cm4gcHJvdmlkZUFzKHJlZmVyZW5jZSwgRGlhbG9nUmVmKTtcbn1cblxuZXhwb3J0IGNvbnN0IE5BVklHQVRJT05fVFlQRSA9IHtcbiAgICBBRFZBTkNFRDogJ0FkdmFuY2VkJyxcbiAgICBCQVNJQzogJ0Jhc2ljJyxcbiAgICBDTEFTU0lDOiAnQ2xhc3NpYycsXG4gICAgSU5MSU5FOiAnSW5saW5lJyxcbiAgICBOT05FOiAnTm9uZScsXG4gICAgT05ERU1BTkQ6ICdPbi1EZW1hbmQnLFxuICAgIFBBR0VSOiAnUGFnZXInLFxuICAgIFNDUk9MTDogJ1Njcm9sbCdcbn07XG5cbmV4cG9ydCBjb25zdCBJTlBVVE1PREUgPSB7XG4gICAgRklOQU5DSUFMOiAnZmluYW5jaWFsJyxcbiAgICBOQVRVUkFMOiAnbmF0dXJhbCdcbn07XG5cbmV4cG9ydCBjb25zdCBBVVRPQ0xPU0VfVFlQRSA9IHtcbiAgICBPVVRTSURFQ0xJQ0s6ICdvdXRzaWRlQ2xpY2snLFxuICAgIEFMV0FZUzogJ2Fsd2F5cycsXG4gICAgRElTQUJMRUQ6ICdkaXNhYmxlZCdcbn1cblxuZXhwb3J0IGNvbnN0IHVuc3VwcG9ydGVkU3RhdGVQZXJzaXN0ZW5jZVR5cGVzID0gWydPbi1EZW1hbmQnLCAnU2Nyb2xsJ107XG5cbmV4cG9ydCBjb25zdCBnZXRXYXRjaElkZW50aWZpZXIgPSAoLi4uYXJncykgPT4gYXJncy5qb2luKCdfJyk7XG5cbmNvbnN0IHR5cGVzTWFwID0ge1xuICAgIG51bWJlcjogWydudW1iZXInLCAnaW50ZWdlcicsICdiaWdfaW50ZWdlcicsICdzaG9ydCcsICdmbG9hdCcsICdiaWdfZGVjaW1hbCcsICdkb3VibGUnLCAnbG9uZycsICdieXRlJ10sXG4gICAgc3RyaW5nOiBbJ3N0cmluZycsICd0ZXh0J10sXG4gICAgY2hhcmFjdGVyOiBbJ2NoYXJhY3RlciddLFxuICAgIGRhdGU6IFsnZGF0ZScsICd0aW1lJywgICd0aW1lc3RhbXAnLCAnZGF0ZXRpbWUnXVxufTtcbmNvbnN0IG1vZGVzID0ge1xuICAgIG51bWJlcjogWydleGFjdCcsICdub3RlcXVhbHMnLCAnbGVzc3RoYW4nLCAnbGVzc3RoYW5lcXVhbCcsICdncmVhdGVydGhhbicsICdncmVhdGVydGhhbmVxdWFsJywgJ251bGwnLCAnaXNub3RudWxsJ10sXG4gICAgc3RyaW5nOiBbJ2FueXdoZXJlaWdub3JlY2FzZScsICdhbnl3aGVyZScsICdzdGFydGlnbm9yZWNhc2UnLCAnc3RhcnQnLCAnZW5kaWdub3JlY2FzZScsICdlbmQnLCAnZXhhY3RpZ25vcmVjYXNlJywgJ2V4YWN0JywgJ25vdGVxdWFsc2lnbm9yZWNhc2UnLCAnbm90ZXF1YWxzJywgJ251bGwnLCAnaXNub3RudWxsJywgJ2VtcHR5JywgJ2lzbm90ZW1wdHknLCAnbnVsbG9yZW1wdHknXSxcbiAgICBjaGFyYWN0ZXI6IFsnZXhhY3RpZ25vcmVjYXNlJywgJ2V4YWN0JywgJ25vdGVxdWFsc2lnbm9yZWNhc2UnLCAnbm90ZXF1YWxzJywgJ251bGwnLCAnaXNub3RudWxsJywgJ2VtcHR5JywgJ2lzbm90ZW1wdHknLCAnbnVsbG9yZW1wdHknXSxcbiAgICBkYXRlOiBbJ2V4YWN0JywgJ2xlc3N0aGFuJywgJ2xlc3N0aGFuZXF1YWwnLCAnZ3JlYXRlcnRoYW4nLCAnZ3JlYXRlcnRoYW5lcXVhbCcsICdudWxsJywgJ25vdGVxdWFscycsICdpc25vdG51bGwnXVxufTtcbmNvbnN0IG1hdGNoTW9kZVR5cGVzTWFwID0ge1xuICAgIGJvb2xlYW46IFsnZXhhY3QnLCAnbnVsbCcsICdpc25vdG51bGwnXSxcbiAgICBjbG9iOiBbXSxcbiAgICBibG9iOiBbXVxufTtcbmV4cG9ydCBjb25zdCBnZXRNYXRjaE1vZGVUeXBlc01hcCA9IChtdWx0aU1vZGU/KSA9PiB7XG4gICAgaWYgKG11bHRpTW9kZSkge1xuICAgICAgICBtb2Rlcy5udW1iZXIucHVzaCgnaW4nLCAnbm90aW4nLCAnYmV0d2VlbicpO1xuICAgICAgICBtb2Rlcy5kYXRlLnB1c2goJ2JldHdlZW4nKTtcbiAgICAgICAgbW9kZXMuc3RyaW5nLnB1c2goJ2luJywgJ25vdGluJyk7XG4gICAgICAgIG1vZGVzLmNoYXJhY3Rlci5wdXNoKCdpbicsICdub3RpbicpO1xuICAgIH1cblxuICAgIF8uZm9yRWFjaCh0eXBlc01hcCwgKHR5cGVzLCBwcmltVHlwZSkgPT4ge1xuICAgICAgICBfLmZvckVhY2godHlwZXMsIHR5cGUgPT4ge1xuICAgICAgICAgICAgbWF0Y2hNb2RlVHlwZXNNYXBbdHlwZV0gPSBtb2Rlc1twcmltVHlwZV07XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIC8vIHRoaXMgaXMgdXNlZCBpbiBmaWx0ZXIgY3JpdGVyaWEgd2hlbiB0aGUgdXNlciB0eXBlcyB0aGUgY29sdW1uIG5hbWUgbWFudWFsbHkgYW5kIHdoZXJlIHdlIGRvbnQga25vdyB0aGUgdHlwZSBvZiB0aGUgY29sdW1uXG4gICAgbWF0Y2hNb2RlVHlwZXNNYXBbJ2RlZmF1bHQnXSA9IF8udW5pb24obW9kZXNbJ251bWJlciddLCBtb2Rlc1snc3RyaW5nJ10sIG1vZGVzWydjaGFyYWN0ZXInXSwgbW9kZXNbJ2RhdGUnXSwgbW9kZXNbJ2RhdGUnXSk7XG4gICAgcmV0dXJuIG1hdGNoTW9kZVR5cGVzTWFwO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldE1hdGNoTW9kZU1zZ3MgPSAoYXBwTG9jYWxlKSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgc3RhcnQgICAgICAgICAgICA6IGFwcExvY2FsZS5MQUJFTF9TVEFSVFNfV0lUSCxcbiAgICAgICAgc3RhcnRpZ25vcmVjYXNlICA6IGFwcExvY2FsZS5MQUJFTF9TVEFSVFNfV0lUSF9JR05PUkVDQVNFLFxuICAgICAgICBlbmQgICAgICAgICAgICAgIDogYXBwTG9jYWxlLkxBQkVMX0VORFNfV0lUSCxcbiAgICAgICAgZW5kaWdub3JlY2FzZSAgICA6IGFwcExvY2FsZS5MQUJFTF9FTkRTX1dJVEhfSUdOT1JFQ0FTRSxcbiAgICAgICAgYW55d2hlcmUgICAgICAgICA6IGFwcExvY2FsZS5MQUJFTF9DT05UQUlOUyxcbiAgICAgICAgYW55d2hlcmVpZ25vcmVjYXNlOiBhcHBMb2NhbGUuTEFCRUxfQ09OVEFJTlNfSUdOT1JFQ0FTRSxcbiAgICAgICAgZXhhY3QgICAgICAgICAgICA6IGFwcExvY2FsZS5MQUJFTF9JU19FUVVBTF9UTyxcbiAgICAgICAgZXhhY3RpZ25vcmVjYXNlICA6IGFwcExvY2FsZS5MQUJFTF9JU19FUVVBTF9UT19JR05PUkVDQVNFLFxuICAgICAgICBub3RlcXVhbHMgICAgICAgIDogYXBwTG9jYWxlLkxBQkVMX0lTX05PVF9FUVVBTF9UTyxcbiAgICAgICAgbm90ZXF1YWxzaWdub3JlY2FzZTogYXBwTG9jYWxlLkxBQkVMX0lTX05PVF9FUVVBTF9UT19JR05PUkVDQVNFLFxuICAgICAgICBsZXNzdGhhbiAgICAgICAgIDogYXBwTG9jYWxlLkxBQkVMX0xFU1NfVEhBTixcbiAgICAgICAgbGVzc3RoYW5lcXVhbCAgICA6IGFwcExvY2FsZS5MQUJFTF9MRVNTX1RIQU5fT1JfRVFVQUxTX1RPLFxuICAgICAgICBncmVhdGVydGhhbiAgICAgIDogYXBwTG9jYWxlLkxBQkVMX0dSRUFURVJfVEhBTixcbiAgICAgICAgZ3JlYXRlcnRoYW5lcXVhbCA6IGFwcExvY2FsZS5MQUJFTF9HUkVBVEVSX1RIQU5fT1JfRVFVQUxTX1RPLFxuICAgICAgICBudWxsICAgICAgICAgICAgIDogYXBwTG9jYWxlLkxBQkVMX0lTX05VTEwsXG4gICAgICAgIGlzbm90bnVsbCAgICAgICAgOiBhcHBMb2NhbGUuTEFCRUxfSVNfTk9UX05VTEwsXG4gICAgICAgIGVtcHR5ICAgICAgICAgICAgOiBhcHBMb2NhbGUuTEFCRUxfSVNfRU1QVFksXG4gICAgICAgIGlzbm90ZW1wdHkgICAgICAgOiBhcHBMb2NhbGUuTEFCRUxfSVNfTk9UX0VNUFRZLFxuICAgICAgICBudWxsb3JlbXB0eSAgICAgIDogYXBwTG9jYWxlLkxBQkVMX0lTX05VTExfT1JfRU1QVFksXG4gICAgICAgIGluICAgICAgICAgICAgICAgOiBhcHBMb2NhbGUuTEFCRUxfSU4sXG4gICAgICAgIG5vdGluICAgICAgICAgICAgOiBhcHBMb2NhbGUuTEFCRUxfTk9UX0lOLFxuICAgICAgICBiZXR3ZWVuICAgICAgICAgIDogYXBwTG9jYWxlLkxBQkVMX0JFVFdFRU5cbiAgICB9O1xufTtcblxuLy8gUmV0dXJucyBhcnJheSBvZiBjbGFzc2VzIHRoYXQgYXJlIGV2YWx1YXRlZCB0cnVlIGZvciBnaXZlbiBvYmplY3Qgb3IgYXJyYXlcbmNvbnN0IGdldENsYXNzZXNBcnJheSA9IGNsYXNzVmFsID0+IHtcbiAgICBsZXQgY2xhc3NlcyA9IFtdO1xuXG4gICAgaWYgKF8uaXNBcnJheShjbGFzc1ZhbCkpIHtcbiAgICAgICAgY2xhc3NWYWwuZm9yRWFjaCh2ID0+IHtcbiAgICAgICAgICAgIGNsYXNzZXMgPSBjbGFzc2VzLmNvbmNhdChnZXRDbGFzc2VzQXJyYXkodikpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNsYXNzZXM7XG4gICAgfVxuICAgIGlmIChfLmlzT2JqZWN0KGNsYXNzVmFsKSkge1xuICAgICAgICBfLmZvckVhY2goY2xhc3NWYWwsICh2YWwsIGtleSkgPT4ge1xuICAgICAgICAgICAgaWYgKHZhbCkge1xuICAgICAgICAgICAgICAgIGNsYXNzZXMgPSBjbGFzc2VzLmNvbmNhdChrZXkuc3BsaXQoJyAnKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gY2xhc3NlcztcbiAgICB9XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q29uZGl0aW9uYWxDbGFzc2VzID0gKG52LCBvdj8pID0+IHtcbiAgICBsZXQgdG9BZGQ7XG4gICAgbGV0IHRvUmVtb3ZlO1xuICAgIC8vIGlmIHRoZSBjb25kaXRpb25hbCBjbGFzcyBwcm9wZXJ0eSBoYXMgYWxyZWFkeSB0b0FkZCBhbmQgdG9SZW1vdmUgYXJyYXlzIHRoZW4gdGFrZSB0aGF0IG90aGVyd2lzZSBidWlsZCB0aG9zZSBhcnJheXNcbiAgICBjb25zdCBjbGFzc1RvQWRkID0gbnYudG9BZGQgfHwgbnY7XG4gICAgY29uc3QgY2xhc3NUb1JlbW92ZSA9IG52LnRvUmVtb3ZlIHx8IG92O1xuICAgIGlmIChfLmlzT2JqZWN0KG52KSkge1xuICAgICAgICB0b0FkZCA9IF8uaXNBcnJheShjbGFzc1RvQWRkKSA/IGNsYXNzVG9BZGQgOiBnZXRDbGFzc2VzQXJyYXkoY2xhc3NUb0FkZCB8fCBbXSk7XG4gICAgICAgIHRvUmVtb3ZlID0gY2xhc3NUb1JlbW92ZSA/IChfLmlzQXJyYXkoY2xhc3NUb1JlbW92ZSkgPyBjbGFzc1RvUmVtb3ZlIDogZ2V0Q2xhc3Nlc0FycmF5KGNsYXNzVG9SZW1vdmUpKSA6IFtdO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRvQWRkID0gY2xhc3NUb0FkZCA/IFtjbGFzc1RvQWRkXSA6IFtdO1xuICAgICAgICB0b1JlbW92ZSA9IGNsYXNzVG9SZW1vdmUgPyBbY2xhc3NUb1JlbW92ZV0gOiBbXTtcbiAgICB9XG4gICAgcmV0dXJuIHt0b0FkZCwgdG9SZW1vdmV9O1xufTtcblxuLypoZWxwZXIgZnVuY3Rpb24gZm9yIHByZXBhcmVGaWVsZERlZnMqL1xuY29uc3QgcHVzaEZpZWxkRGVmID0gKGRhdGFPYmplY3QsIGNvbHVtbkRlZk9iaiwgbmFtZVByZWZpeCwgb3B0aW9ucykgPT4ge1xuICAgIC8qbG9vcCBvdmVyIHRoZSBmaWVsZHMgaW4gdGhlIGRhdGFPYmplY3QgdG8gcHJvY2VzcyB0aGVtKi9cbiAgICBsZXQgbW9kaWZpZWRUaXRsZSxcbiAgICAgICAgcmVsYXRlZFRhYmxlLFxuICAgICAgICByZWxhdGVkRmllbGQsXG4gICAgICAgIHJlbGF0ZWRJbmZvLFxuICAgICAgICBmaWVsZE5hbWUsXG4gICAgICAgIGlzUmVsYXRlZDtcbiAgICBpZiAoIW9wdGlvbnMpIHtcbiAgICAgICAgb3B0aW9ucyA9IHt9O1xuICAgIH1cbiAgICBfLmZvckVhY2goZGF0YU9iamVjdCwgKHZhbHVlLCB0aXRsZSkgPT4ge1xuICAgICAgICBpZiAoXy5pbmNsdWRlcyh0aXRsZSwgJy4nKSkge1xuICAgICAgICAgICAgcmVsYXRlZEluZm8gID0gXy5zcGxpdCh0aXRsZSwgJy4nKTtcbiAgICAgICAgICAgIHJlbGF0ZWRUYWJsZSA9IHJlbGF0ZWRJbmZvWzBdO1xuICAgICAgICAgICAgcmVsYXRlZEZpZWxkID0gcmVsYXRlZEluZm9bMV07XG4gICAgICAgICAgICBpc1JlbGF0ZWQgICAgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLm5vTW9kaWZ5VGl0bGUpIHtcbiAgICAgICAgICAgIG1vZGlmaWVkVGl0bGUgPSB0aXRsZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChfLmlzU3RyaW5nKHRpdGxlKSkge1xuICAgICAgICAgICAgICAgIG1vZGlmaWVkVGl0bGUgPSBwcmV0dGlmeUxhYmVsKHRpdGxlKTtcbiAgICAgICAgICAgICAgICBtb2RpZmllZFRpdGxlID0gZGVIeXBoZW5hdGUobW9kaWZpZWRUaXRsZSk7XG4gICAgICAgICAgICAgICAgbW9kaWZpZWRUaXRsZSA9IG5hbWVQcmVmaXggPyBpbml0Q2FwcyhuYW1lUHJlZml4KSArICcgJyArIG1vZGlmaWVkVGl0bGUgOiBtb2RpZmllZFRpdGxlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBtb2RpZmllZFRpdGxlID0gdGl0bGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGl0bGUgPSBuYW1lUHJlZml4ID8gbmFtZVByZWZpeCArICcuJyArIHRpdGxlIDogdGl0bGU7XG4gICAgICAgIGlmIChpc1JlbGF0ZWQpIHtcbiAgICAgICAgICAgIC8vIEZvciByZWxhdGVkIGNvbHVtbnMsIHNob3J0ZW4gdGhlIHRpdGxlIHRvIGxhc3QgdHdvIHdvcmRzXG4gICAgICAgICAgICBmaWVsZE5hbWUgPSBfLnNwbGl0KG1vZGlmaWVkVGl0bGUsICcgJyk7XG4gICAgICAgICAgICBmaWVsZE5hbWUgPSBmaWVsZE5hbWUubGVuZ3RoID4gMSA/IGZpZWxkTmFtZVtmaWVsZE5hbWUubGVuZ3RoIC0gMl0gKyAnICcgKyBmaWVsZE5hbWVbZmllbGROYW1lLmxlbmd0aCAtIDFdIDogZmllbGROYW1lWzBdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZmllbGROYW1lID0gbW9kaWZpZWRUaXRsZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkZWZPYmogPSBvcHRpb25zLnNldEJpbmRpbmdGaWVsZCA/IHsnZGlzcGxheU5hbWUnOiBmaWVsZE5hbWUsICdmaWVsZCc6IHRpdGxlLCAncmVsYXRlZFRhYmxlJzogcmVsYXRlZFRhYmxlLCAncmVsYXRlZEZpZWxkJzogcmVsYXRlZEZpZWxkIHx8IG1vZGlmaWVkVGl0bGV9XG4gICAgICAgIDogeydkaXNwbGF5TmFtZSc6IGZpZWxkTmFtZSwgJ3JlbGF0ZWRUYWJsZSc6IHJlbGF0ZWRUYWJsZSwgJ3JlbGF0ZWRGaWVsZCc6IHJlbGF0ZWRGaWVsZCB8fCBtb2RpZmllZFRpdGxlfTtcbiAgICAgICAgLyppZiBmaWVsZCBpcyBhIGxlYWYgbm9kZSwgcHVzaCBpdCBpbiB0aGUgY29sdW1uRGVmcyovXG4gICAgICAgIGlmICghXy5pc09iamVjdCh2YWx1ZSkgfHwgKF8uaXNBcnJheSh2YWx1ZSkgJiYgIXZhbHVlWzBdKSkge1xuICAgICAgICAgICAgLyppZiB0aGUgY29sdW1uIGNvdW50ZXIgaGFzIHJlYWNoZWQgdXBwZXJCb3VuZCByZXR1cm4qL1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMudXBwZXJCb3VuZCAmJiBvcHRpb25zLmNvbHVtbkNvdW50ID09PSBvcHRpb25zLnVwcGVyQm91bmQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb2x1bW5EZWZPYmoudGVybWluYWxzLnB1c2goZGVmT2JqKTtcbiAgICAgICAgICAgIC8qaW5jcmVtZW50IHRoZSBjb2x1bW4gY291bnRlciovXG4gICAgICAgICAgICBvcHRpb25zLmNvbHVtbkNvdW50ICs9IDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvKmVsc2UgZmllbGQgaXMgYW4gb2JqZWN0LCBwcm9jZXNzIGl0IHJlY3Vyc2l2ZWx5Ki9cbiAgICAgICAgICAgIC8qIGlmIHBhcmVudCBub2RlIHRvIGJlIGluY2x1ZGVkLCBpbmNsdWRlIGl0ICovXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5jb2x1bW5Db3VudCAhPT0gb3B0aW9ucy51cHBlckJvdW5kKSB7XG4gICAgICAgICAgICAgICAgY29sdW1uRGVmT2JqLm9iamVjdHMucHVzaChkZWZPYmopO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvKiBpZiBmaWVsZCBpcyBhbiBhcnJheSBub2RlLCBwcm9jZXNzIGl0cyBmaXJzdCBjaGlsZCAqL1xuICAgICAgICAgICAgaWYgKF8uaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWVbMF0pIHtcbiAgICAgICAgICAgICAgICBwdXNoRmllbGREZWYodmFsdWVbMF0sIGNvbHVtbkRlZk9iaiwgdGl0bGUgKyAnWzBdJywgb3B0aW9ucyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHB1c2hGaWVsZERlZih2YWx1ZSwgY29sdW1uRGVmT2JqLCB0aXRsZSwgb3B0aW9ucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbn07XG5cbmNvbnN0IGdldE1ldGFEYXRhRnJvbURhdGEgPSAoZGF0YSkgPT4ge1xuICAgIGxldCBkYXRhT2JqZWN0O1xuICAgIGlmIChfLmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgaWYgKF8uaXNPYmplY3QoZGF0YVswXSkpIHtcbiAgICAgICAgICAgIGRhdGFPYmplY3QgPSBnZXRDbG9uZWRPYmplY3QoZGF0YVswXSk7XG4gICAgICAgICAgICAvKkxvb3Agb3ZlciB0aGUgb2JqZWN0IHRvIGZpbmQgb3V0IGFueSBudWxsIHZhbHVlcy4gSWYgYW55IG51bGwgdmFsdWVzIGFyZSBwcmVzZW50IGluIHRoZSBmaXJzdCByb3csIGNoZWNrIGFuZCBhc3NpZ24gdGhlIHZhbHVlcyBmcm9tIG90aGVyIHJvdy5cbiAgICAgICAgICAgICAqIEFzIGNvbHVtbiBnZW5lcmF0aW9uIGlzIGRlcGVuZGVudCBvbiBkYXRhLCBmb3IgcmVsYXRlZCBmaWVsZHMgaWYgZmlyc3Qgcm93IHZhbHVlIGlzIG51bGwsIGNvbHVtbnMgYXJlIG5vdCBnZW5lcmF0ZWQuXG4gICAgICAgICAgICAgKiBUbyBwcmV2ZW50IHRoaXMsIGNoZWNrIHRoZSBkYXRhIGluIG90aGVyIHJvd3MgYW5kIGdlbmVyYXRlIHRoZSBjb2x1bW5zLiBOZXcga2V5cyBmcm9tIG90aGVycyByb3dzIGFyZSBhbHNvIGFkZGVkKi9cbiAgICAgICAgICAgIF8uZm9yRWFjaChkYXRhLCAocm93LCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICgoaW5kZXggKyAxKSA+PSAxMCkgeyAvLyBMaW1pdCB0aGUgZGF0YSBzZWFyY2ggdG8gZmlyc3QgMTAgcmVjb3Jkc1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF8uYXNzaWduV2l0aChkYXRhT2JqZWN0LCByb3csIChvYmpWYWx1ZSwgc3JjVmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChvYmpWYWx1ZSA9PT0gbnVsbCB8fCBvYmpWYWx1ZSA9PT0gdW5kZWZpbmVkKSA/IHNyY1ZhbHVlIDogb2JqVmFsdWU7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRhdGFPYmplY3QgPSBkYXRhWzBdO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZGF0YU9iamVjdCA9IGRhdGE7XG4gICAgfVxuICAgIHJldHVybiBkYXRhT2JqZWN0O1xufTtcblxuZXhwb3J0IGNvbnN0IHByZXBhcmVGaWVsZERlZnMgPSAoZGF0YSwgb3B0aW9ucz8pID0+IHtcbiAgICBsZXQgZGF0YU9iamVjdDtcbiAgICBjb25zdCBjb2x1bW5EZWYgPSB7XG4gICAgICAgICAgICAnb2JqZWN0cycgOiBbXSxcbiAgICAgICAgICAgICd0ZXJtaW5hbHMnIDogW11cbiAgICAgICAgfTtcbiAgICAvKmlmIG5vIGRhdGEgcHJvdmlkZWQsIGluaXRpYWxpemUgZGVmYXVsdCBjb2x1bW4gZGVmaW5pdGlvbnMqL1xuICAgIGlmICghZGF0YSkge1xuICAgICAgICBkYXRhID0gW107XG4gICAgfVxuICAgIGlmICghb3B0aW9ucykge1xuICAgICAgICBvcHRpb25zID0ge307XG4gICAgfVxuICAgIG9wdGlvbnMuc2V0QmluZGluZ0ZpZWxkID0gdHJ1ZTtcbiAgICBvcHRpb25zLmNvbHVtbkNvdW50ID0gMDtcbiAgICBkYXRhT2JqZWN0ID0gZ2V0TWV0YURhdGFGcm9tRGF0YShkYXRhKTtcbiAgICAvKmZpcnN0IG9mIHRoZSBtYW55IGRhdGEgb2JqZWN0cyBmcm9tIGdyaWQgZGF0YSovXG4gICAgcHVzaEZpZWxkRGVmKGRhdGFPYmplY3QsIGNvbHVtbkRlZiwgJycsIG9wdGlvbnMpO1xuICAgIGlmICghb3B0aW9ucyB8fCAob3B0aW9ucyAmJiAhb3B0aW9ucy5maWx0ZXIpKSB7XG4gICAgICAgIHJldHVybiBjb2x1bW5EZWYudGVybWluYWxzO1xuICAgIH1cbiAgICBzd2l0Y2ggKG9wdGlvbnMuZmlsdGVyKSB7XG4gICAgICAgIGNhc2UgJ2FsbCc6XG4gICAgICAgICAgICByZXR1cm4gY29sdW1uRGVmO1xuICAgICAgICBjYXNlICdvYmplY3RzJzpcbiAgICAgICAgICAgIHJldHVybiBjb2x1bW5EZWYub2JqZWN0cztcbiAgICAgICAgY2FzZSAndGVybWluYWxzJzpcbiAgICAgICAgICAgIHJldHVybiBjb2x1bW5EZWYudGVybWluYWxzO1xuICAgIH1cbiAgICByZXR1cm4gY29sdW1uRGVmO1xufTtcblxuXG4vKipcbiAqIFRvIGdldCBjb250YWluZXIgdGFyZ2V0IGVsZW1lbnQgdG8gYXBwZW5kIHRoZSBsaXN0IGZvciBzZWFyY2ggYW5kIGRhdGVwaWNrZXIgcGFuZWwgd2hlbiBmaWVsZCBwcmVzZW50IGluIGRpYWxvZ1xuICovXG5leHBvcnQgY29uc3QgZ2V0Q29udGFpbmVyVGFyZ2V0Q2xhc3MgPSAoZWxlbWVudCkgPT4ge1xuICAgIHJldHVybiAnLndtLWFwcCc7XG5cbiAgICAvLyBCZWxvdyBjb2RlIGlzIG5vdCB3b3JraW5nIHdoZW4gd2UgaGF2ZSBuZXN0ZWQgZGlhbG9ncy5cbiAgICAvLyBOZXN0ZWQgZGlhbG9ncyBjYXNlIHdlIHdpbGwgaGF2ZSAgbXVsdGlwbGUgJy5tb2RhbC1jb250ZW50JyBjbGFzc2VzIG9uIERPTSBkdWUgdG8gdGhhdCBjb250YWluZXIgcG9zaXRpb25zIGlzIG5vdCB3b3JraW5nIGFzIGV4cGVjdGVkLlxuICAgIC8vIEJlbG93IGNvZGUgdG8gZml4IHRoZSBpc3N1ZSA9PT4gV01TLTE4NzUxXG4gICAgLy8gQXMgcmVncmVzc2lvbiB3ZSBnb3QgPT0+IFdNUy0xOTgzNVxuXG4gICAgLy8gaWYgKGVsZW1lbnQuY2xvc2VzdCgnLm1vZGFsLWRpYWxvZycpKSB7XG4gICAgLy8gICAgIHJldHVybiAnLm1vZGFsLWNvbnRlbnQnO1xuICAgIC8vIH0gZWxzZSB7XG4gICAgLy8gICAgIHJldHVybiAnYm9keSc7XG4gICAgLy8gfVxuXG59XG5cbi8qKlxuICogVG8gZXh0cmFjdCB0aGUgVmFyaWFibGUgTmFtZSBmcm9tIGEgV2lkZ2V0J3MgYmluZGRhdGFzb3VyY2UgYXR0cmlidXRlXG4gKi9cbmV4cG9ydCBjb25zdCBleHRyYWN0RGF0YVNvdXJjZU5hbWUgPSAoYmluZERhdGFTb3VyY2UpID0+IHtcbiAgICBpZiAoIWJpbmREYXRhU291cmNlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IGRhdGFTb3VyY2VOYW1lO1xuICAgIGNvbnN0IHBhcnRzID0gYmluZERhdGFTb3VyY2Uuc3BsaXQoJy4nKTtcbiAgICBpZiAocGFydHMubGVuZ3RoID4gMSAmJiBwYXJ0c1swXSA9PT0gJ1ZhcmlhYmxlcycpIHtcbiAgICAgICAgZGF0YVNvdXJjZU5hbWUgPSBwYXJ0c1sxXTtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGFTb3VyY2VOYW1lO1xufVxuXG5leHBvcnQgY29uc3Qgc2V0Rm9jdXNUcmFwID0gKGNvbnRhaW5lciwgYWxsb3dPdXRzaWRlQ2xpY2ssIHNldFJldHVybkZvY3VzRWxlbWVudD8pID0+IHtcbiAgICByZXR1cm4gY3JlYXRlRm9jdXNUcmFwKGNvbnRhaW5lciwge1xuICAgICAgICBvbkFjdGl2YXRlOiAoKSA9PiBjb250YWluZXIuY2xhc3NMaXN0LmFkZCgnaXMtYWN0aXZlJyksXG4gICAgICAgIG9uRGVhY3RpdmF0ZTogKCkgPT4gY29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoJ2lzLWFjdGl2ZScpLFxuICAgICAgICBhbGxvd091dHNpZGVDbGljazogYWxsb3dPdXRzaWRlQ2xpY2ssXG4gICAgICAgIHNldFJldHVybkZvY3VzOiBzZXRSZXR1cm5Gb2N1c0VsZW1lbnQsXG4gICAgfSk7XG59XG5cbi8qKlxuICogR2V0cyBrZXlib2FyZCBmb2N1c2FibGUgZWxlbWVudHMgd2l0aGluIGEgc3BlY2lmaWVkIGVsZW1lbnRcbiAqIEBwYXJhbSBlbGVtZW50IHtIVE1MRWxlbWVudH1cbiAqIEByZXR1cm5zIHtBcnJheX1cbiAqL1xuZXhwb3J0IGNvbnN0IGdldEtleWJvYXJkRm9jdXNhYmxlRWxlbWVudHMgPSAoZWxlbWVudDogSFRNTEVsZW1lbnQpID0+IHtcbiAgICByZXR1cm4gW2VsZW1lbnQucXVlcnlTZWxlY3RvckFsbChcbiAgICAgICAgJ2EsIGJ1dHRvbiwgaW5wdXQsIHRleHRhcmVhLCBzZWxlY3QsIGRldGFpbHMsIGlmcmFtZSwgZW1iZWQsIG9iamVjdCwgc3VtbWFyeSBkaWFsb2csIGF1ZGlvW2NvbnRyb2xzXSwgdmlkZW9bY29udHJvbHNdLCBbY29udGVudGVkaXRhYmxlXSwgW3RhYmluZGV4XTpub3QoW3RhYmluZGV4PVwiLTFcIl0pJ1xuICAgICldLmZpbHRlcihlbCA9PiB7XG4gICAgICAgIHJldHVybiAoIWVsWzBdLmhhc0F0dHJpYnV0ZSgnZGlzYWJsZWQnKSAmJiAhZWxbMF0uaGFzQXR0cmlidXRlKCdoaWRkZW4nKSk7XG4gICAgfSlbMF07XG59XG4iXX0=
|
|
484
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LXV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9iYXNlL3NyYy91dGlscy93aWRnZXQtdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxnQkFBZ0IsRUFBRSxjQUFjLEVBQUUsVUFBVSxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSwyQkFBMkIsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUN0TCxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUt4RSxNQUFNLGVBQWUsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsY0FBYyxDQUFDLFdBQVcsRUFBRSxjQUFjLENBQUMsUUFBUTtJQUN2RyxjQUFjLENBQUMsTUFBTSxFQUFFLGNBQWMsQ0FBQyxZQUFZLEVBQUUsY0FBYyxDQUFDLEtBQUssRUFBRSxjQUFjLENBQUMsU0FBUyxFQUFFLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ2hJOzs7O0dBSUc7QUFDSCxNQUFNLGNBQWMsR0FBRyxDQUFDLElBQVksRUFBRSxFQUFFO0lBQ3BDLElBQUksT0FBTyxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLG9CQUFvQixDQUFDO0lBRWpHLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGtCQUFrQixFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBRWpELEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUM5QixFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2IsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFFbkI7Ozs7O1dBS0c7UUFDSCxJQUFJLEVBQUUsS0FBSyxHQUFHLElBQUksSUFBSSxLQUFLLEdBQUcsRUFBRTtZQUM1QixVQUFVLEdBQUcsQ0FBQyxDQUFDO1lBQ2Ysb0JBQW9CLEdBQUcsS0FBSyxDQUFDO1lBQzdCLFdBQVcsR0FBRyxLQUFLLENBQUM7WUFFcEIsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFFbEMsT0FBTyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFFbEIsSUFBSSxPQUFPLEtBQUssR0FBRyxFQUFFO29CQUNqQixTQUFTO2lCQUNaO2dCQUVELElBQUksQ0FBQyxvQkFBb0IsRUFBRTtvQkFDdkIsV0FBVyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQztvQkFDbEQsb0JBQW9CLEdBQUcsSUFBSSxDQUFDO2lCQUMvQjtnQkFFRCxJQUFJLE9BQU8sS0FBSyxHQUFHLEVBQUU7b0JBQ2pCLFVBQVUsRUFBRSxDQUFDO2lCQUNoQjtxQkFBTSxJQUFJLE9BQU8sS0FBSyxHQUFHLEVBQUU7b0JBQ3hCLFVBQVUsRUFBRSxDQUFDO2lCQUNoQjtnQkFFRCxJQUFJLENBQUMsVUFBVSxFQUFFO29CQUNiLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7b0JBQ2xDLElBQUksV0FBVyxFQUFFO3dCQUNiLE9BQU8sSUFBSSxNQUFNLEdBQUcsTUFBTSxHQUFHLEdBQUcsQ0FBQztxQkFDcEM7eUJBQU07d0JBQ0gsT0FBTyxJQUFJLE1BQU0sQ0FBQztxQkFDckI7b0JBRUQsTUFBTTtpQkFDVDthQUNKO1lBQ0QsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUNUO2FBQU07WUFDSCxPQUFPLElBQUksRUFBRSxDQUFDO1NBQ2pCO0tBQ0o7SUFFRCxPQUFPLE9BQU8sQ0FBQztBQUNuQixDQUFDLENBQUM7O0FBRUY7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLEdBQVEsRUFBRSxNQUFjLEVBQUUsRUFBRTtJQUN6RCw4QkFBOEI7SUFDOUIsSUFBSSxNQUFNLEVBQUU7UUFDUixJQUFJLEdBQUcsQ0FBQztRQUNSLDJFQUEyRTtRQUMzRSxNQUFNLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3pELDJDQUEyQztZQUMzQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ2hFLENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxHQUFHLENBQUM7S0FDZDtJQUNELE9BQU8sR0FBRyxDQUFDO0FBQ2YsQ0FBQyxDQUFDO0FBRUY7Ozs7Ozs7R0FPRztBQUNILE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLENBQUMsT0FBWSxFQUFFLE9BQVksRUFBRSxPQUFhLEVBQUUsRUFBRTtJQUMxRSxJQUFJLGVBQWUsQ0FBQztJQUNwQixNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxFQUN2QixJQUFJLEdBQUcsT0FBTyxDQUFDLFVBQVUsRUFDekIsUUFBUSxHQUFHLE9BQU8sQ0FBQyxjQUFjLENBQUM7SUFFdEMsNkJBQTZCO0lBQzdCLElBQUksUUFBUSxFQUFFO1FBQ1YscURBQXFEO1FBQ3JELGVBQWUsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVoRCxpRkFBaUY7UUFDakYsb0pBQW9KO1FBQ3BKLElBQUcsMkJBQTJCLENBQUMsZUFBZSxDQUFDLEVBQUM7WUFDNUMsZUFBZSxHQUFHLGVBQWUsR0FBQyxPQUFPLENBQUM7U0FDN0M7UUFDRCx3RkFBd0Y7UUFDeEYsZUFBZSxHQUFHLGNBQWMsQ0FBQyxlQUFlLENBQUMsQ0FBQztLQUNyRDtTQUFNO1FBQ0gsZUFBZSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7S0FDekM7SUFFRCw4Q0FBOEM7SUFDOUMsdUJBQXVCO0lBQ3ZCLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUU7UUFDcEIsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztLQUNoQztJQUVELE9BQU8sVUFBVSxDQUFDLGVBQWUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBQyxHQUFHLEVBQUUsT0FBTyxFQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVGLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsRUFBRTtJQUMvQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO1FBQ3JCLE9BQU8sS0FBSyxDQUFDO0tBQ2hCO0lBQ0QsU0FBUyxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3ZHLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM5RSxNQUFNLFVBQVUsR0FBRyxJQUFJLE1BQU0sQ0FBQyxVQUFVLEdBQUcsU0FBUyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQzVELE9BQU8sVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNqQyxDQUFDLENBQUM7QUFFRjs7OztFQUlFO0FBQ0YsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxLQUFxQixFQUFFLFFBQVEsRUFBRSxFQUFFO0lBQ3BFLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUNyQixJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxFQUFFO1lBQ3RDLE9BQU8sSUFBSSxDQUFDO1NBQ2Y7UUFDRCxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDZixPQUFPLG9CQUFvQixDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7U0FDeEQ7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUMsQ0FBQTtBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLFdBQVcsQ0FBQyxFQUFFO0lBQ3hDLFdBQVcsR0FBRyxXQUFXLElBQUksRUFBRSxDQUFDO0lBQ2hDLE1BQU0sV0FBVyxHQUFTLEVBQUUsRUFDeEIsaUJBQWlCLEdBQUcsR0FBRyxFQUN2QixlQUFlLEdBQUssR0FBRyxDQUFDO0lBQzVCLENBQUMsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQyxFQUFFO1FBQ3pCLElBQUksR0FBRyxDQUFDLFNBQVMsRUFBRTtZQUNmLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsR0FBRyxpQkFBaUIsR0FBRyxHQUFHLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7U0FDcEY7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsZUFBZSxDQUFDLENBQUM7QUFDaEQsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxFQUFFO0lBQ3BDLE9BQU8sZUFBZSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN2QyxDQUFDLENBQUM7QUFFRixpRkFBaUY7QUFDakYsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLENBQUMsU0FBUyxFQUFFLFlBQWEsRUFBRSxVQUFXLEVBQUUsRUFBRTtJQUNqRTs7O2lIQUc2RztJQUM3RyxJQUFJLGFBQWEsQ0FBQyxTQUFTLENBQUMsRUFBRTtRQUMxQixPQUFPLFNBQVMsQ0FBQztLQUNwQjtJQUVELHVGQUF1RjtJQUN2RixJQUFJLENBQUMsU0FBUyxFQUFFO1FBQ1osU0FBUyxHQUFHLFVBQVUsSUFBSSwrQ0FBK0MsQ0FBQztLQUM3RTtJQUVELFNBQVMsR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBRTVELGtEQUFrRDtJQUNsRCxJQUFJLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxrQkFBa0IsQ0FBQyxFQUFFO1FBQ2pELE9BQU8sU0FBUyxDQUFDO0tBQ3BCO0lBRUQsT0FBTyxTQUFTLENBQUM7QUFDckIsQ0FBQyxDQUFDO0FBRUYsc0RBQXNEO0FBQ3RELE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLENBQUMsU0FBUyxFQUFFLEVBQUU7SUFDL0MsSUFBSSxTQUFTLEtBQUssRUFBRSxJQUFJLFNBQVMsS0FBSyxNQUFNLEVBQUU7UUFDMUMsT0FBTyxTQUFTLENBQUM7S0FDcEI7SUFDRCxPQUFPLE1BQU0sR0FBRyxXQUFXLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2pELENBQUMsQ0FBQztBQUVGLE1BQU0sVUFBVSxTQUFTLENBQUMsU0FBYyxFQUFFLEdBQVEsRUFBRSxLQUFlO0lBQy9ELE9BQU87UUFDSCxPQUFPLEVBQUUsR0FBRztRQUNaLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDO1FBQ3hDLEtBQUssRUFBRSxLQUFLO0tBQ2YsQ0FBQztBQUNOLENBQUM7QUFFRCxNQUFNLFVBQVUsa0JBQWtCLENBQUMsU0FBYztJQUM3QyxPQUFPLFNBQVMsQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDM0MsQ0FBQztBQUVELE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxTQUFjO0lBQzdDLE9BQU8sU0FBUyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUMzQyxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHO0lBQzNCLFFBQVEsRUFBRSxVQUFVO0lBQ3BCLEtBQUssRUFBRSxPQUFPO0lBQ2QsT0FBTyxFQUFFLFNBQVM7SUFDbEIsTUFBTSxFQUFFLFFBQVE7SUFDaEIsSUFBSSxFQUFFLE1BQU07SUFDWixRQUFRLEVBQUUsV0FBVztJQUNyQixLQUFLLEVBQUUsT0FBTztJQUNkLE1BQU0sRUFBRSxRQUFRO0NBQ25CLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUc7SUFDckIsU0FBUyxFQUFFLFdBQVc7SUFDdEIsT0FBTyxFQUFFLFNBQVM7Q0FDckIsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRztJQUMxQixZQUFZLEVBQUUsY0FBYztJQUM1QixNQUFNLEVBQUUsUUFBUTtJQUNoQixRQUFRLEVBQUUsVUFBVTtDQUN2QixDQUFBO0FBRUQsTUFBTSxDQUFDLE1BQU0sZ0NBQWdDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFFeEUsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUU5RCxNQUFNLFFBQVEsR0FBRztJQUNiLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDO0lBQ3ZHLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUM7SUFDMUIsU0FBUyxFQUFFLENBQUMsV0FBVyxDQUFDO0lBQ3hCLElBQUksRUFBRSxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUcsV0FBVyxFQUFFLFVBQVUsQ0FBQztDQUNuRCxDQUFDO0FBQ0YsTUFBTSxLQUFLLEdBQUc7SUFDVixNQUFNLEVBQUUsQ0FBQyxPQUFPLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLGtCQUFrQixFQUFFLE1BQU0sRUFBRSxXQUFXLENBQUM7SUFDbkgsTUFBTSxFQUFFLENBQUMsb0JBQW9CLEVBQUUsVUFBVSxFQUFFLGlCQUFpQixFQUFFLE9BQU8sRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFFLGlCQUFpQixFQUFFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLGFBQWEsQ0FBQztJQUN6TixTQUFTLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxhQUFhLENBQUM7SUFDdEksSUFBSSxFQUFFLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLGtCQUFrQixFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsV0FBVyxDQUFDO0NBQ3BILENBQUM7QUFDRixNQUFNLGlCQUFpQixHQUFHO0lBQ3RCLE9BQU8sRUFBRSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsV0FBVyxDQUFDO0lBQ3ZDLElBQUksRUFBRSxFQUFFO0lBQ1IsSUFBSSxFQUFFLEVBQUU7Q0FDWCxDQUFDO0FBQ0YsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxTQUFVLEVBQUUsRUFBRTtJQUMvQyxJQUFJLFNBQVMsRUFBRTtRQUNYLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDNUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDM0IsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ2pDLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztLQUN2QztJQUVELENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxFQUFFO1FBQ3BDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxFQUFFO1lBQ3BCLGlCQUFpQixDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM5QyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUMsQ0FBQyxDQUFDO0lBQ0gsNkhBQTZIO0lBQzdILGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsRUFBRSxLQUFLLENBQUMsV0FBVyxDQUFDLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQzNILE9BQU8saUJBQWlCLENBQUM7QUFDN0IsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxTQUFTLEVBQUUsRUFBRTtJQUMxQyxPQUFPO1FBQ0gsS0FBSyxFQUFjLFNBQVMsQ0FBQyxpQkFBaUI7UUFDOUMsZUFBZSxFQUFJLFNBQVMsQ0FBQyw0QkFBNEI7UUFDekQsR0FBRyxFQUFnQixTQUFTLENBQUMsZUFBZTtRQUM1QyxhQUFhLEVBQU0sU0FBUyxDQUFDLDBCQUEwQjtRQUN2RCxRQUFRLEVBQVcsU0FBUyxDQUFDLGNBQWM7UUFDM0Msa0JBQWtCLEVBQUUsU0FBUyxDQUFDLHlCQUF5QjtRQUN2RCxLQUFLLEVBQWMsU0FBUyxDQUFDLGlCQUFpQjtRQUM5QyxlQUFlLEVBQUksU0FBUyxDQUFDLDRCQUE0QjtRQUN6RCxTQUFTLEVBQVUsU0FBUyxDQUFDLHFCQUFxQjtRQUNsRCxtQkFBbUIsRUFBRSxTQUFTLENBQUMsZ0NBQWdDO1FBQy9ELFFBQVEsRUFBVyxTQUFTLENBQUMsZUFBZTtRQUM1QyxhQUFhLEVBQU0sU0FBUyxDQUFDLDRCQUE0QjtRQUN6RCxXQUFXLEVBQVEsU0FBUyxDQUFDLGtCQUFrQjtRQUMvQyxnQkFBZ0IsRUFBRyxTQUFTLENBQUMsK0JBQStCO1FBQzVELElBQUksRUFBZSxTQUFTLENBQUMsYUFBYTtRQUMxQyxTQUFTLEVBQVUsU0FBUyxDQUFDLGlCQUFpQjtRQUM5QyxLQUFLLEVBQWMsU0FBUyxDQUFDLGNBQWM7UUFDM0MsVUFBVSxFQUFTLFNBQVMsQ0FBQyxrQkFBa0I7UUFDL0MsV0FBVyxFQUFRLFNBQVMsQ0FBQyxzQkFBc0I7UUFDbkQsRUFBRSxFQUFpQixTQUFTLENBQUMsUUFBUTtRQUNyQyxLQUFLLEVBQWMsU0FBUyxDQUFDLFlBQVk7UUFDekMsT0FBTyxFQUFZLFNBQVMsQ0FBQyxhQUFhO0tBQzdDLENBQUM7QUFDTixDQUFDLENBQUM7QUFFRiw2RUFBNkU7QUFDN0UsTUFBTSxlQUFlLEdBQUcsUUFBUSxDQUFDLEVBQUU7SUFDL0IsSUFBSSxPQUFPLEdBQUcsRUFBRSxDQUFDO0lBRWpCLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRTtRQUNyQixRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ2pCLE9BQU8sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pELENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxPQUFPLENBQUM7S0FDbEI7SUFDRCxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUU7UUFDdEIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUU7WUFDN0IsSUFBSSxHQUFHLEVBQUU7Z0JBQ0wsT0FBTyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2FBQzVDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLE9BQU8sQ0FBQztLQUNsQjtBQUNMLENBQUMsQ0FBQzs7QUFFRixNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFHLEVBQUUsRUFBRTtJQUM3QyxJQUFJLEtBQUssQ0FBQztJQUNWLElBQUksUUFBUSxDQUFDO0lBQ2Isc0hBQXNIO0lBQ3RILE1BQU0sVUFBVSxHQUFHLEVBQUUsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDO0lBQ2xDLE1BQU0sYUFBYSxHQUFHLEVBQUUsQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDO0lBQ3hDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsRUFBRTtRQUNoQixLQUFLLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsVUFBVSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQy9FLFFBQVEsR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0tBQy9HO1NBQU07UUFDSCxLQUFLLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDdkMsUUFBUSxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0tBQ25EO0lBQ0QsT0FBTyxFQUFDLEtBQUssRUFBRSxRQUFRLEVBQUMsQ0FBQztBQUM3QixDQUFDLENBQUM7QUFFRix3Q0FBd0M7QUFDeEMsTUFBTSxZQUFZLEdBQUcsQ0FBQyxVQUFVLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsRUFBRTtJQUNuRSwwREFBMEQ7SUFDMUQsSUFBSSxhQUFhLEVBQ2IsWUFBWSxFQUNaLFlBQVksRUFDWixXQUFXLEVBQ1gsU0FBUyxFQUNULFNBQVMsQ0FBQztJQUNkLElBQUksQ0FBQyxPQUFPLEVBQUU7UUFDVixPQUFPLEdBQUcsRUFBRSxDQUFDO0tBQ2hCO0lBQ0QsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUU7UUFDbkMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsRUFBRTtZQUN4QixXQUFXLEdBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDbkMsWUFBWSxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM5QixZQUFZLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzlCLFNBQVMsR0FBTSxJQUFJLENBQUM7U0FDdkI7UUFDRCxJQUFJLE9BQU8sQ0FBQyxhQUFhLEVBQUU7WUFDdkIsYUFBYSxHQUFHLEtBQUssQ0FBQztTQUN6QjthQUFNO1lBQ0gsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUNuQixhQUFhLEdBQUcsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNyQyxhQUFhLEdBQUcsV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUMzQyxhQUFhLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDO2FBQzNGO2lCQUFNO2dCQUNILGFBQWEsR0FBRyxLQUFLLENBQUM7YUFDekI7U0FDSjtRQUNELEtBQUssR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxHQUFHLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDdEQsSUFBSSxTQUFTLEVBQUU7WUFDWCwyREFBMkQ7WUFDM0QsU0FBUyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ3hDLFNBQVMsR0FBRyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDN0g7YUFBTTtZQUNILFNBQVMsR0FBRyxhQUFhLENBQUM7U0FDN0I7UUFDRCxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxFQUFDLGFBQWEsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxZQUFZLElBQUksYUFBYSxFQUFDO1lBQ2hLLENBQUMsQ0FBQyxFQUFDLGFBQWEsRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBRSxjQUFjLEVBQUUsWUFBWSxJQUFJLGFBQWEsRUFBQyxDQUFDO1FBQzFHLHNEQUFzRDtRQUN0RCxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUN2RCx1REFBdUQ7WUFDdkQsSUFBSSxPQUFPLENBQUMsVUFBVSxJQUFJLE9BQU8sQ0FBQyxXQUFXLEtBQUssT0FBTyxDQUFDLFVBQVUsRUFBRTtnQkFDbEUsT0FBTzthQUNWO1lBQ0QsWUFBWSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDcEMsZ0NBQWdDO1lBQ2hDLE9BQU8sQ0FBQyxXQUFXLElBQUksQ0FBQyxDQUFDO1NBQzVCO2FBQU07WUFDSCxtREFBbUQ7WUFDbkQsK0NBQStDO1lBQy9DLElBQUksT0FBTyxDQUFDLFdBQVcsS0FBSyxPQUFPLENBQUMsVUFBVSxFQUFFO2dCQUM1QyxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUNyQztZQUVELHdEQUF3RDtZQUN4RCxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUM5QixZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLFlBQVksRUFBRSxLQUFLLEdBQUcsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO2FBQ2hFO2lCQUFNO2dCQUNILFlBQVksQ0FBQyxLQUFLLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQzthQUNyRDtTQUNKO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDLENBQUM7O0FBRUYsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLElBQUksRUFBRSxFQUFFO0lBQ2pDLElBQUksVUFBVSxDQUFDO0lBQ2YsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO1FBQ2pCLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNyQixVQUFVLEdBQUcsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3RDOztpSUFFcUg7WUFDckgsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUU7Z0JBQzNCLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsNENBQTRDO29CQUNqRSxPQUFPLEtBQUssQ0FBQztpQkFDaEI7Z0JBQ0QsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUUsR0FBRyxFQUFFLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxFQUFFO29CQUNqRCxPQUFPLENBQUMsUUFBUSxLQUFLLElBQUksSUFBSSxRQUFRLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO2dCQUMvRSxDQUFDLENBQUMsQ0FBQztZQUNQLENBQUMsQ0FBQyxDQUFDO1NBQ047YUFBTTtZQUNILFVBQVUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDeEI7S0FDSjtTQUFNO1FBQ0gsVUFBVSxHQUFHLElBQUksQ0FBQztLQUNyQjtJQUNELE9BQU8sVUFBVSxDQUFDO0FBQ3RCLENBQUMsQ0FBQzs7QUFFRixNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLElBQUksRUFBRSxPQUFRLEVBQUUsRUFBRTtJQUMvQyxJQUFJLFVBQVUsQ0FBQztJQUNmLE1BQU0sU0FBUyxHQUFHO1FBQ1YsU0FBUyxFQUFHLEVBQUU7UUFDZCxXQUFXLEVBQUcsRUFBRTtLQUNuQixDQUFDO0lBQ04sOERBQThEO0lBQzlELElBQUksQ0FBQyxJQUFJLEVBQUU7UUFDUCxJQUFJLEdBQUcsRUFBRSxDQUFDO0tBQ2I7SUFDRCxJQUFJLENBQUMsT0FBTyxFQUFFO1FBQ1YsT0FBTyxHQUFHLEVBQUUsQ0FBQztLQUNoQjtJQUNELE9BQU8sQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO0lBQy9CLE9BQU8sQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDO0lBQ3hCLFVBQVUsR0FBRyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN2QyxpREFBaUQ7SUFDakQsWUFBWSxDQUFDLFVBQVUsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ2pELElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7UUFDMUMsT0FBTyxTQUFTLENBQUMsU0FBUyxDQUFDO0tBQzlCO0lBQ0QsUUFBUSxPQUFPLENBQUMsTUFBTSxFQUFFO1FBQ3BCLEtBQUssS0FBSztZQUNOLE9BQU8sU0FBUyxDQUFDO1FBQ3JCLEtBQUssU0FBUztZQUNWLE9BQU8sU0FBUyxDQUFDLE9BQU8sQ0FBQztRQUM3QixLQUFLLFdBQVc7WUFDWixPQUFPLFNBQVMsQ0FBQyxTQUFTLENBQUM7S0FDbEM7SUFDRCxPQUFPLFNBQVMsQ0FBQztBQUNyQixDQUFDLENBQUM7QUFHRjs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLENBQUMsT0FBTyxFQUFFLEVBQUU7SUFDL0MsT0FBTyxTQUFTLENBQUM7SUFFakIseURBQXlEO0lBQ3pELHlJQUF5STtJQUN6SSw0Q0FBNEM7SUFDNUMscUNBQXFDO0lBRXJDLDBDQUEwQztJQUMxQywrQkFBK0I7SUFDL0IsV0FBVztJQUNYLHFCQUFxQjtJQUNyQixJQUFJO0FBRVIsQ0FBQyxDQUFBO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxDQUFDLGNBQWMsRUFBRSxFQUFFO0lBQ3BELElBQUksQ0FBQyxjQUFjLEVBQUU7UUFDakIsT0FBTztLQUNWO0lBQ0QsSUFBSSxjQUFjLENBQUM7SUFDbkIsTUFBTSxLQUFLLEdBQUcsY0FBYyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN4QyxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxXQUFXLEVBQUU7UUFDOUMsY0FBYyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUM3QjtJQUNELE9BQU8sY0FBYyxDQUFDO0FBQzFCLENBQUMsQ0FBQTtBQUVELE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxDQUFDLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxxQkFBc0IsRUFBRSxFQUFFO0lBQ2pGLE9BQU8sZUFBZSxDQUFDLFNBQVMsRUFBRTtRQUM5QixVQUFVLEVBQUUsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDO1FBQ3RELFlBQVksRUFBRSxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUM7UUFDM0QsaUJBQWlCLEVBQUUsaUJBQWlCO1FBQ3BDLGNBQWMsRUFBRSxxQkFBcUI7S0FDeEMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQyxDQUFBO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLDRCQUE0QixHQUFHLENBQUMsT0FBb0IsRUFBRSxFQUFFO0lBQ2pFLE1BQU0sZUFBZSxHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyx5SUFBeUksQ0FBQyxDQUFDO0lBQzVMLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDN0MsT0FBTyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFO1FBQ3hCLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQztlQUMzRCxDQUFDLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1SCxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGZvcndhcmRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgZW5jb2RlVXJsLCBpc1ZhbGlkV2ViVVJMLCBzdHJpbmdTdGFydHNXaXRoLCBGb3JtV2lkZ2V0VHlwZSwgJHBhcnNlRXhwciwgZ2V0Q2xvbmVkT2JqZWN0LCBwcmV0dGlmeUxhYmVsLCBpbml0Q2FwcywgZGVIeXBoZW5hdGUsIGNoZWNrSXNDdXN0b21QaXBlRXhwcmVzc2lvbiB9IGZyb20gJ0B3bS9jb3JlJztcbmltcG9ydCB7IERpYWxvZ1JlZiwgV2lkZ2V0UmVmIH0gZnJvbSAnLi4vd2lkZ2V0cy9mcmFtZXdvcmsvdHlwZXMnO1xuaW1wb3J0IHsgY3JlYXRlRm9jdXNUcmFwIH0gZnJvbSAnQHdhdmVtYWtlci9mb2N1cy10cmFwL2Rpc3QvZm9jdXMtdHJhcCc7XG5pbXBvcnQgeyBOYXZOb2RlIH0gZnJvbSBcIi4uL3dpZGdldHMvY29tbW9uL2Jhc2UvZGF0YXNldC1hd2FyZS1uYXYuY29tcG9uZW50XCI7XG5cbmRlY2xhcmUgY29uc3QgXztcblxuY29uc3QgREFUQVNFVF9XSURHRVRTID0gbmV3IFNldChbRm9ybVdpZGdldFR5cGUuU0VMRUNULCBGb3JtV2lkZ2V0VHlwZS5DSEVDS0JPWFNFVCwgRm9ybVdpZGdldFR5cGUuUkFESU9TRVQsXG4gICAgRm9ybVdpZGdldFR5cGUuU1dJVENILCBGb3JtV2lkZ2V0VHlwZS5BVVRPQ09NUExFVEUsIEZvcm1XaWRnZXRUeXBlLkNISVBTLCBGb3JtV2lkZ2V0VHlwZS5UWVBFQUhFQUQsIEZvcm1XaWRnZXRUeXBlLlJBVElOR10pO1xuLyoqXG4gKiBSZXR1cm5zIHRoZSBwYXJzZWQsIHVwZGF0ZWQgYm91bmQgZXhwcmVzc2lvblxuICogaWYgdGhlIGV4cHJlc3Npb24gaXMgJFtkYXRhWyRpXVtmaXJzdE5hbWVdXSArICctLScgKyAkW2xhc3ROYW1lXSArICctLScgKyAkWydASURAJ11cbiAqIHJldHVybnMgX18xLmZpcnN0TmFtZSArICctLScgKyBsYXN0TmFtZSArICctLScgKyBfXzFbJ0BJREAnXVxuICovXG5jb25zdCBnZXRVcGRhdGVkRXhwciA9IChleHByOiBzdHJpbmcpID0+IHtcbiAgICBsZXQgdXBkYXRlZCA9ICcnLCBjaCwgbmV4dCwgaSwgaiwgbWF0Y2hDaCwgbWF0Y2hDb3VudCwgaXNRdW90ZWRTdHIsIHN1YlN0ciwgaXNRdW90ZWRTdHJFdmFsdWF0ZWQ7XG5cbiAgICBleHByID0gZXhwci5yZXBsYWNlKC9cXCRcXFtkYXRhXFxbXFwkaVxcXS9nLCAnJFtfXzEnKTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBleHByLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNoID0gZXhwcltpXTtcbiAgICAgICAgbmV4dCA9IGV4cHJbaSArIDFdO1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBpZiB0aGUgZXhwcmVzc2lvbiBzdGFydHMgd2l0aCAkWywgY2hlY2sgdGhlIG5leHQoY2gpIGNoYXJhY3RlcixcbiAgICAgICAgICogICAgaWYgY2ggaXMgYSBxdW90ZSgnLCBcIikgY2hhbmdlIHRoZSBleHByIHRvIF9fW1xuICAgICAgICAgKiAgICBpZiBjaCBpcyBhIHdoaXRlU3BhY2UsIHJlbW92ZSBpdFxuICAgICAgICAgKiAgICBlbHNlIHJlbW92ZSAkW1xuICAgICAgICAgKi9cbiAgICAgICAgaWYgKGNoID09PSAnJCcgJiYgbmV4dCA9PT0gJ1snKSB7XG4gICAgICAgICAgICBtYXRjaENvdW50ID0gMTtcbiAgICAgICAgICAgIGlzUXVvdGVkU3RyRXZhbHVhdGVkID0gZmFsc2U7XG4gICAgICAgICAgICBpc1F1b3RlZFN0ciA9IGZhbHNlO1xuXG4gICAgICAgICAgICBmb3IgKGogPSBpICsgMjsgaiA8IGV4cHIubGVuZ3RoOyBqKyspIHtcblxuICAgICAgICAgICAgICAgIG1hdGNoQ2ggPSBleHByW2pdO1xuXG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoQ2ggPT09ICcgJykge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoIWlzUXVvdGVkU3RyRXZhbHVhdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGlzUXVvdGVkU3RyID0gZXhwcltqXSA9PT0gJ1wiJyB8fCBleHByW2pdID09PSAnXFwnJztcbiAgICAgICAgICAgICAgICAgICAgaXNRdW90ZWRTdHJFdmFsdWF0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChtYXRjaENoID09PSAnWycpIHtcbiAgICAgICAgICAgICAgICAgICAgbWF0Y2hDb3VudCsrO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobWF0Y2hDaCA9PT0gJ10nKSB7XG4gICAgICAgICAgICAgICAgICAgIG1hdGNoQ291bnQtLTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoIW1hdGNoQ291bnQpIHtcbiAgICAgICAgICAgICAgICAgICAgc3ViU3RyID0gZXhwci5zdWJzdHJpbmcoaSArIDIsIGopO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNRdW90ZWRTdHIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZWQgKz0gJ19fMVsnICsgc3ViU3RyICsgJ10nO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlZCArPSBzdWJTdHI7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpID0gajtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHVwZGF0ZWQgKz0gY2g7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdXBkYXRlZDtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgdmFsdWUgZm9yIHRoZSBwcm92aWRlZCBrZXkgaW4gdGhlIG9iamVjdFxuICovXG5leHBvcnQgY29uc3QgZ2V0T2JqVmFsdWVCeUtleSA9IChvYmo6IGFueSwgc3RyS2V5OiBzdHJpbmcpID0+IHtcbiAgICAvKiBjaGVjayBmb3IgdGhlIGtleS1zdHJpbmcgKi9cbiAgICBpZiAoc3RyS2V5KSB7XG4gICAgICAgIGxldCB2YWw7XG4gICAgICAgIC8qIGNvbnZlcnQgaW5kZXhlcyB0byBwcm9wZXJ0aWVzLCBzbyBhcyB0byB3b3JrIGZvciBldmVuICdrZXkxWzBdLmNoaWxkMScqL1xuICAgICAgICBzdHJLZXkucmVwbGFjZSgvXFxbKFxcdyspXFxdL2csICcuJDEnKS5zcGxpdCgnLicpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgIC8vIElmIG9iaiBpcyBudWxsLCB0aGVuIGFzc2lnbiB2YWwgdG8gbnVsbC5cbiAgICAgICAgICAgIHZhbCA9ICh2YWwgJiYgdmFsW2tleV0pIHx8IChfLmlzTnVsbChvYmopID8gb2JqIDogb2JqW2tleV0pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHZhbDtcbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbn07XG5cbi8qKlxuICogcmV0dXJucyB0aGUgZGlzcGxheSBmaWVsZCBkYXRhIGZvciBhbnkgZGF0YXNldCB3aWRnZXRzXG4gKiBCYXNlZCBvbiB0aGUgYmluZCBkaXNwbGF5IGV4cHJlc3Npb24gb3IgZGlzcGxheSBleHByZXNzaW9uIG9yIGRpc3BsYXkgbmFtZSxcbiAqIGRhdGEgaXMgZXh0cmFjdGVkIGFuZCBmb3JtYXR0ZWQgZnJvbSB0aGUgcGFzc2VkIG9wdGlvbiBvYmplY3RcbiAqIElmIHRoZXJlIGlzIGZpZWxkIGlzIHNwZWNpZmllZCwgZmllbGQgdmFsdWUgaXMgb2J0YWluZWQgZnJvbSB0aGUgZGF0YU9iai5cbiAqIElmIGV4cHJlc3Npb24gaXMgZ2l2ZW4sIGV2YWx1YXRlcyB0aGUgZXhwcmVzc2lvbiB2YWx1ZS5cbiAqIGVsc2UgY2hlY2sgZm9yIGJpbmRFeHByZXNzaW9uLCBleHRyYWN0IHRoZSB2YWx1ZSBmcm9tIHRoZSBkYXRhT2JqXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRFdmFsdWF0ZWREYXRhID0gKGRhdGFPYmo6IGFueSwgb3B0aW9uczogYW55LCBjb250ZXh0PzogYW55KSA9PiB7XG4gICAgbGV0IGV4cHJlc3Npb25WYWx1ZTtcbiAgICBjb25zdCBmaWVsZCA9IG9wdGlvbnMuZmllbGQsXG4gICAgICAgIGV4cHIgPSBvcHRpb25zLmV4cHJlc3Npb24sXG4gICAgICAgIGJpbmRFeHByID0gb3B0aW9ucy5iaW5kRXhwcmVzc2lvbjtcblxuICAgIC8vIGlmIGtleSBpcyBib3VuZCBleHByZXNzaW9uXG4gICAgaWYgKGJpbmRFeHByKSB7XG4gICAgICAgIC8vIHJlbW92ZSAnYmluZDonIHByZWZpeCBmcm9tIHRoZSBib3VuZEV4cHJlc3Npb25OYW1lXG4gICAgICAgIGV4cHJlc3Npb25WYWx1ZSA9IGJpbmRFeHByLnJlcGxhY2UoJ2JpbmQ6JywgJycpO1xuXG4gICAgICAgIC8vIEZvciBiaW5kIGV4cHJlc3Npb24gcGFzc2luZyB0aGUgbGFzdCBhcmd1bWVudCB0aGF0IHRoZSBvYmplY3Qgb2YgZGF0YXNldCBpdGVtLlxuICAgICAgICAvLyBOb3RlOiBGb3IgcGFyc2UgZXhwcmVzc2lvbiB3ZSBhcmUgc2VuZGluZyBkYXRhT2JqIHdpdGggdGhlIHByb3BlcnkgbmFtZSBcIl9fMVwiLCB3ZSB1c2VkIHRoZSBzYW1lIHByb3BlcnkgdG8gc2VuZCB0aGUgbGFzdCBhcmd1bWVudCBhcyBkYXRhc2V0IGl0ZW1cbiAgICAgICAgaWYoY2hlY2tJc0N1c3RvbVBpcGVFeHByZXNzaW9uKGV4cHJlc3Npb25WYWx1ZSkpe1xuICAgICAgICAgICAgZXhwcmVzc2lvblZhbHVlID0gZXhwcmVzc2lvblZhbHVlKyc6IF9fMSc7XG4gICAgICAgIH1cbiAgICAgICAgLy8gcGFyc2UgdGhlIGV4cHJlc3Npb25WYWx1ZSBmb3IgcmVwbGFjaW5nIGFsbCB0aGUgZXhwcmVzc2lvbnMgd2l0aCB2YWx1ZXMgaW4gdGhlIG9iamVjdFxuICAgICAgICBleHByZXNzaW9uVmFsdWUgPSBnZXRVcGRhdGVkRXhwcihleHByZXNzaW9uVmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGV4cHJlc3Npb25WYWx1ZSA9IGV4cHIgPyBleHByIDogZmllbGQ7XG4gICAgfVxuXG4gICAgLy8gSGFuZGxpbmcgZmllbGQgbmFtZSB3aXRoIHNwZWNpYWwgY2hhcmVjdGVyc1xuICAgIC8vIEV4OiBmaWVsZCA9IFwiZiBuYW1lXCJcbiAgICBpZiAoIWJpbmRFeHByICYmICFleHByKSB7XG4gICAgICAgIHJldHVybiBfLmdldChkYXRhT2JqLCBmaWVsZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuICRwYXJzZUV4cHIoZXhwcmVzc2lvblZhbHVlKShjb250ZXh0LCBPYmplY3QuYXNzaWduKHt9LCBkYXRhT2JqLCB7X18xOiBkYXRhT2JqfSkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzQWN0aXZlTmF2SXRlbSA9IChsaW5rLCByb3V0ZU5hbWUpID0+IHtcbiAgICBpZiAoIWxpbmsgfHwgIXJvdXRlTmFtZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJvdXRlTmFtZSA9IHJvdXRlTmFtZS5pbmRleE9mKCc/JykgPT09IC0xID8gcm91dGVOYW1lIDogcm91dGVOYW1lLnN1YnN0cmluZygwLCByb3V0ZU5hbWUuaW5kZXhPZignPycpKTtcbiAgICBsaW5rID0gbGluay5pbmRleE9mKCc/JykgPT09IC0xID8gbGluayA6IGxpbmsuc3Vic3RyaW5nKDAsIGxpbmsuaW5kZXhPZignPycpKTtcbiAgICBjb25zdCByb3V0ZVJlZ2V4ID0gbmV3IFJlZ0V4cCgnXigjXFwvfCMpJyArIHJvdXRlTmFtZSArICckJyk7XG4gICAgcmV0dXJuIHJvdXRlUmVnZXgudGVzdChsaW5rKTtcbn07XG5cbi8qKlxuKiByZXR1cm5zIHRydWUgaWYgdGhlIG1lbnUgaGFzIGxpbmsgdG8gdGhlIGN1cnJlbnQgcGFnZS5cbiogQHBhcmFtIG5vZGVzXG4qIEBwYXJhbSByb3V0ZVVybFxuKi9cbmV4cG9ydCBjb25zdCBoYXNMaW5rVG9DdXJyZW50UGFnZSA9IChub2RlczogQXJyYXk8TmF2Tm9kZT4sIHJvdXRlVXJsKSA9PiB7XG4gICAgcmV0dXJuIG5vZGVzLnNvbWUobm9kZSA9PiB7XG4gICAgICAgIGlmIChpc0FjdGl2ZU5hdkl0ZW0obm9kZS5saW5rLCByb3V0ZVVybCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICByZXR1cm4gaGFzTGlua1RvQ3VycmVudFBhZ2Uobm9kZS5jaGlsZHJlbiwgcm91dGVVcmwpO1xuICAgICAgICB9XG4gICAgfSk7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgb3JkZXJCeSBFeHByZXNzaW9uIGJhc2VkIG9uIHRoZSAnc29ydCAnb3B0aW9uIGluIHBhZ2VhYmxlIG9iamVjdFxuICogcmV0dXJuZWQgYnkgYmFja2VuZFxuICogQHBhcmFtIHBhZ2VhYmxlT2JqXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgY29uc3QgZ2V0T3JkZXJCeUV4cHIgPSBwYWdlYWJsZU9iaiA9PiB7XG4gICAgcGFnZWFibGVPYmogPSBwYWdlYWJsZU9iaiB8fCBbXTtcbiAgICBjb25zdCBleHByZXNzaW9ucyAgICAgICA9IFtdLFxuICAgICAgICBLRVlfVkFMX1NFUEFSQVRPUiA9ICcgJyxcbiAgICAgICAgRklFTERfU0VQQVJBVE9SICAgPSAnLCc7XG4gICAgXy5mb3JFYWNoKHBhZ2VhYmxlT2JqLCBvYmogPT4ge1xuICAgICAgICBpZiAob2JqLmRpcmVjdGlvbikge1xuICAgICAgICAgICAgZXhwcmVzc2lvbnMucHVzaChvYmoucHJvcGVydHkgKyBLRVlfVkFMX1NFUEFSQVRPUiArIG9iai5kaXJlY3Rpb24udG9Mb3dlckNhc2UoKSk7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBfLmpvaW4oZXhwcmVzc2lvbnMsIEZJRUxEX1NFUEFSQVRPUik7XG59O1xuXG5leHBvcnQgY29uc3QgaXNEYXRhU2V0V2lkZ2V0ID0gd2lkZ2V0ID0+IHtcbiAgICByZXR1cm4gREFUQVNFVF9XSURHRVRTLmhhcyh3aWRnZXQpO1xufTtcblxuLypUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHVybCB0byB0aGUgaW1hZ2UgYWZ0ZXIgY2hlY2tpbmcgdGhlIHZhbGlkaXR5IG9mIHVybCovXG5leHBvcnQgY29uc3QgZ2V0SW1hZ2VVcmwgPSAodXJsU3RyaW5nLCBzaG91bGRFbmNvZGU/LCBkZWZhdWx0VXJsPykgPT4ge1xuICAgIC8qSW4gc3R1ZGlvIG1vZGUgYmVmb3JlIHNldHRpbmcgcGljdHVyZXNvdXJjZSwgY2hlY2sgaWYgdGhlIHN0dWRpb0NvbnRyb2xsZXIgaXMgbG9hZGVkIGFuZCBuZXcgcGljdHVyZXNvdXJjZSBpcyBpbiAnc3R5bGVzL2ltYWdlcy8nIHBhdGggb3Igbm90LlxuICAgICAqIFdoZW4gcGFnZSBpcyByZWZyZXNoZWQsIGxvYWRlci5naWYgd2lsbCBiZSBsb2FkZWQgZmlyc3QgYW5kIGl0IHdpbGwgYmUgaW4gJ3N0eWxlL2ltYWdlcy8nLlxuICAgICAqIFByZXBlbmQgJ3NlcnZpY2VzL3Byb2plY3RzLycgKyAkcm9vdFNjb3BlLnByb2plY3QuaWQgKyAnL3dlYi9yZXNvdXJjZXMvaW1hZ2VzL2ltYWdlbGlzdHMvJyAgaWYgdGhlIGltYWdlIHVybCBpcyBqdXN0IGltYWdlIG5hbWUgaW4gdGhlIHByb2plY3Qgcm9vdCxcbiAgICAgKiBhbmQgaWYgdGhlIHVybCBwb2ludGluZyB0byByZXNvdXJjZXMvaW1hZ2VzLyB0aGVuICdzZXJ2aWNlcy9wcm9qZWN0cy8nICsgJHJvb3RTY29wZS5wcm9qZWN0LmlkICsgJy93ZWIvJyovXG4gICAgaWYgKGlzVmFsaWRXZWJVUkwodXJsU3RyaW5nKSkge1xuICAgICAgICByZXR1cm4gdXJsU3RyaW5nO1xuICAgIH1cblxuICAgIC8vIElmIG5vIHZhbHVlIGlzIHByb3ZpZGVkIGZvciBwaWN0dXJlc291cmNlIGFzc2lnbiBwaWN0dXJlcGxhY2Vob2xkZXIgb3IgZGVmYXVsdC1pbWFnZVxuICAgIGlmICghdXJsU3RyaW5nKSB7XG4gICAgICAgIHVybFN0cmluZyA9IGRlZmF1bHRVcmwgfHwgJ3Jlc291cmNlcy9pbWFnZXMvaW1hZ2VsaXN0cy9kZWZhdWx0LWltYWdlLnBuZyc7XG4gICAgfVxuXG4gICAgdXJsU3RyaW5nID0gc2hvdWxkRW5jb2RlID8gZW5jb2RlVXJsKHVybFN0cmluZykgOiB1cmxTdHJpbmc7XG5cbiAgICAvLyBpZiB0aGUgcmVzb3VyY2UgdG8gYmUgbG9hZGVkIGlzIGluc2lkZSBhIHByZWZhYlxuICAgIGlmIChzdHJpbmdTdGFydHNXaXRoKHVybFN0cmluZywgJ3NlcnZpY2VzL3ByZWZhYnMnKSkge1xuICAgICAgICByZXR1cm4gdXJsU3RyaW5nO1xuICAgIH1cblxuICAgIHJldHVybiB1cmxTdHJpbmc7XG59O1xuXG4vKlRoaXMgbWV0aG9kIHJldHVybnMgdGhlIHVybCB0byB0aGUgYmFja2dyb3VuZEltYWdlKi9cbmV4cG9ydCBjb25zdCBnZXRCYWNrR3JvdW5kSW1hZ2VVcmwgPSAodXJsU3RyaW5nKSA9PiB7XG4gICAgaWYgKHVybFN0cmluZyA9PT0gJycgfHwgdXJsU3RyaW5nID09PSAnbm9uZScpIHtcbiAgICAgICAgcmV0dXJuIHVybFN0cmluZztcbiAgICB9XG4gICAgcmV0dXJuICd1cmwoJyArIGdldEltYWdlVXJsKHVybFN0cmluZykgKyAnKSc7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZUFzKHJlZmVyZW5jZTogYW55LCBrZXk6IGFueSwgbXVsdGk/OiBib29sZWFuKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgcHJvdmlkZToga2V5LFxuICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiByZWZlcmVuY2UpLFxuICAgICAgICBtdWx0aTogbXVsdGlcbiAgICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZUFzV2lkZ2V0UmVmKHJlZmVyZW5jZTogYW55KSB7XG4gICAgcmV0dXJuIHByb3ZpZGVBcyhyZWZlcmVuY2UsIFdpZGdldFJlZik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm92aWRlQXNEaWFsb2dSZWYocmVmZXJlbmNlOiBhbnkpIHtcbiAgICByZXR1cm4gcHJvdmlkZUFzKHJlZmVyZW5jZSwgRGlhbG9nUmVmKTtcbn1cblxuZXhwb3J0IGNvbnN0IE5BVklHQVRJT05fVFlQRSA9IHtcbiAgICBBRFZBTkNFRDogJ0FkdmFuY2VkJyxcbiAgICBCQVNJQzogJ0Jhc2ljJyxcbiAgICBDTEFTU0lDOiAnQ2xhc3NpYycsXG4gICAgSU5MSU5FOiAnSW5saW5lJyxcbiAgICBOT05FOiAnTm9uZScsXG4gICAgT05ERU1BTkQ6ICdPbi1EZW1hbmQnLFxuICAgIFBBR0VSOiAnUGFnZXInLFxuICAgIFNDUk9MTDogJ1Njcm9sbCdcbn07XG5cbmV4cG9ydCBjb25zdCBJTlBVVE1PREUgPSB7XG4gICAgRklOQU5DSUFMOiAnZmluYW5jaWFsJyxcbiAgICBOQVRVUkFMOiAnbmF0dXJhbCdcbn07XG5cbmV4cG9ydCBjb25zdCBBVVRPQ0xPU0VfVFlQRSA9IHtcbiAgICBPVVRTSURFQ0xJQ0s6ICdvdXRzaWRlQ2xpY2snLFxuICAgIEFMV0FZUzogJ2Fsd2F5cycsXG4gICAgRElTQUJMRUQ6ICdkaXNhYmxlZCdcbn1cblxuZXhwb3J0IGNvbnN0IHVuc3VwcG9ydGVkU3RhdGVQZXJzaXN0ZW5jZVR5cGVzID0gWydPbi1EZW1hbmQnLCAnU2Nyb2xsJ107XG5cbmV4cG9ydCBjb25zdCBnZXRXYXRjaElkZW50aWZpZXIgPSAoLi4uYXJncykgPT4gYXJncy5qb2luKCdfJyk7XG5cbmNvbnN0IHR5cGVzTWFwID0ge1xuICAgIG51bWJlcjogWydudW1iZXInLCAnaW50ZWdlcicsICdiaWdfaW50ZWdlcicsICdzaG9ydCcsICdmbG9hdCcsICdiaWdfZGVjaW1hbCcsICdkb3VibGUnLCAnbG9uZycsICdieXRlJ10sXG4gICAgc3RyaW5nOiBbJ3N0cmluZycsICd0ZXh0J10sXG4gICAgY2hhcmFjdGVyOiBbJ2NoYXJhY3RlciddLFxuICAgIGRhdGU6IFsnZGF0ZScsICd0aW1lJywgICd0aW1lc3RhbXAnLCAnZGF0ZXRpbWUnXVxufTtcbmNvbnN0IG1vZGVzID0ge1xuICAgIG51bWJlcjogWydleGFjdCcsICdub3RlcXVhbHMnLCAnbGVzc3RoYW4nLCAnbGVzc3RoYW5lcXVhbCcsICdncmVhdGVydGhhbicsICdncmVhdGVydGhhbmVxdWFsJywgJ251bGwnLCAnaXNub3RudWxsJ10sXG4gICAgc3RyaW5nOiBbJ2FueXdoZXJlaWdub3JlY2FzZScsICdhbnl3aGVyZScsICdzdGFydGlnbm9yZWNhc2UnLCAnc3RhcnQnLCAnZW5kaWdub3JlY2FzZScsICdlbmQnLCAnZXhhY3RpZ25vcmVjYXNlJywgJ2V4YWN0JywgJ25vdGVxdWFsc2lnbm9yZWNhc2UnLCAnbm90ZXF1YWxzJywgJ251bGwnLCAnaXNub3RudWxsJywgJ2VtcHR5JywgJ2lzbm90ZW1wdHknLCAnbnVsbG9yZW1wdHknXSxcbiAgICBjaGFyYWN0ZXI6IFsnZXhhY3RpZ25vcmVjYXNlJywgJ2V4YWN0JywgJ25vdGVxdWFsc2lnbm9yZWNhc2UnLCAnbm90ZXF1YWxzJywgJ251bGwnLCAnaXNub3RudWxsJywgJ2VtcHR5JywgJ2lzbm90ZW1wdHknLCAnbnVsbG9yZW1wdHknXSxcbiAgICBkYXRlOiBbJ2V4YWN0JywgJ2xlc3N0aGFuJywgJ2xlc3N0aGFuZXF1YWwnLCAnZ3JlYXRlcnRoYW4nLCAnZ3JlYXRlcnRoYW5lcXVhbCcsICdudWxsJywgJ25vdGVxdWFscycsICdpc25vdG51bGwnXVxufTtcbmNvbnN0IG1hdGNoTW9kZVR5cGVzTWFwID0ge1xuICAgIGJvb2xlYW46IFsnZXhhY3QnLCAnbnVsbCcsICdpc25vdG51bGwnXSxcbiAgICBjbG9iOiBbXSxcbiAgICBibG9iOiBbXVxufTtcbmV4cG9ydCBjb25zdCBnZXRNYXRjaE1vZGVUeXBlc01hcCA9IChtdWx0aU1vZGU/KSA9PiB7XG4gICAgaWYgKG11bHRpTW9kZSkge1xuICAgICAgICBtb2Rlcy5udW1iZXIucHVzaCgnaW4nLCAnbm90aW4nLCAnYmV0d2VlbicpO1xuICAgICAgICBtb2Rlcy5kYXRlLnB1c2goJ2JldHdlZW4nKTtcbiAgICAgICAgbW9kZXMuc3RyaW5nLnB1c2goJ2luJywgJ25vdGluJyk7XG4gICAgICAgIG1vZGVzLmNoYXJhY3Rlci5wdXNoKCdpbicsICdub3RpbicpO1xuICAgIH1cblxuICAgIF8uZm9yRWFjaCh0eXBlc01hcCwgKHR5cGVzLCBwcmltVHlwZSkgPT4ge1xuICAgICAgICBfLmZvckVhY2godHlwZXMsIHR5cGUgPT4ge1xuICAgICAgICAgICAgbWF0Y2hNb2RlVHlwZXNNYXBbdHlwZV0gPSBtb2Rlc1twcmltVHlwZV07XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIC8vIHRoaXMgaXMgdXNlZCBpbiBmaWx0ZXIgY3JpdGVyaWEgd2hlbiB0aGUgdXNlciB0eXBlcyB0aGUgY29sdW1uIG5hbWUgbWFudWFsbHkgYW5kIHdoZXJlIHdlIGRvbnQga25vdyB0aGUgdHlwZSBvZiB0aGUgY29sdW1uXG4gICAgbWF0Y2hNb2RlVHlwZXNNYXBbJ2RlZmF1bHQnXSA9IF8udW5pb24obW9kZXNbJ251bWJlciddLCBtb2Rlc1snc3RyaW5nJ10sIG1vZGVzWydjaGFyYWN0ZXInXSwgbW9kZXNbJ2RhdGUnXSwgbW9kZXNbJ2RhdGUnXSk7XG4gICAgcmV0dXJuIG1hdGNoTW9kZVR5cGVzTWFwO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldE1hdGNoTW9kZU1zZ3MgPSAoYXBwTG9jYWxlKSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgc3RhcnQgICAgICAgICAgICA6IGFwcExvY2FsZS5MQUJFTF9TVEFSVFNfV0lUSCxcbiAgICAgICAgc3RhcnRpZ25vcmVjYXNlICA6IGFwcExvY2FsZS5MQUJFTF9TVEFSVFNfV0lUSF9JR05PUkVDQVNFLFxuICAgICAgICBlbmQgICAgICAgICAgICAgIDogYXBwTG9jYWxlLkxBQkVMX0VORFNfV0lUSCxcbiAgICAgICAgZW5kaWdub3JlY2FzZSAgICA6IGFwcExvY2FsZS5MQUJFTF9FTkRTX1dJVEhfSUdOT1JFQ0FTRSxcbiAgICAgICAgYW55d2hlcmUgICAgICAgICA6IGFwcExvY2FsZS5MQUJFTF9DT05UQUlOUyxcbiAgICAgICAgYW55d2hlcmVpZ25vcmVjYXNlOiBhcHBMb2NhbGUuTEFCRUxfQ09OVEFJTlNfSUdOT1JFQ0FTRSxcbiAgICAgICAgZXhhY3QgICAgICAgICAgICA6IGFwcExvY2FsZS5MQUJFTF9JU19FUVVBTF9UTyxcbiAgICAgICAgZXhhY3RpZ25vcmVjYXNlICA6IGFwcExvY2FsZS5MQUJFTF9JU19FUVVBTF9UT19JR05PUkVDQVNFLFxuICAgICAgICBub3RlcXVhbHMgICAgICAgIDogYXBwTG9jYWxlLkxBQkVMX0lTX05PVF9FUVVBTF9UTyxcbiAgICAgICAgbm90ZXF1YWxzaWdub3JlY2FzZTogYXBwTG9jYWxlLkxBQkVMX0lTX05PVF9FUVVBTF9UT19JR05PUkVDQVNFLFxuICAgICAgICBsZXNzdGhhbiAgICAgICAgIDogYXBwTG9jYWxlLkxBQkVMX0xFU1NfVEhBTixcbiAgICAgICAgbGVzc3RoYW5lcXVhbCAgICA6IGFwcExvY2FsZS5MQUJFTF9MRVNTX1RIQU5fT1JfRVFVQUxTX1RPLFxuICAgICAgICBncmVhdGVydGhhbiAgICAgIDogYXBwTG9jYWxlLkxBQkVMX0dSRUFURVJfVEhBTixcbiAgICAgICAgZ3JlYXRlcnRoYW5lcXVhbCA6IGFwcExvY2FsZS5MQUJFTF9HUkVBVEVSX1RIQU5fT1JfRVFVQUxTX1RPLFxuICAgICAgICBudWxsICAgICAgICAgICAgIDogYXBwTG9jYWxlLkxBQkVMX0lTX05VTEwsXG4gICAgICAgIGlzbm90bnVsbCAgICAgICAgOiBhcHBMb2NhbGUuTEFCRUxfSVNfTk9UX05VTEwsXG4gICAgICAgIGVtcHR5ICAgICAgICAgICAgOiBhcHBMb2NhbGUuTEFCRUxfSVNfRU1QVFksXG4gICAgICAgIGlzbm90ZW1wdHkgICAgICAgOiBhcHBMb2NhbGUuTEFCRUxfSVNfTk9UX0VNUFRZLFxuICAgICAgICBudWxsb3JlbXB0eSAgICAgIDogYXBwTG9jYWxlLkxBQkVMX0lTX05VTExfT1JfRU1QVFksXG4gICAgICAgIGluICAgICAgICAgICAgICAgOiBhcHBMb2NhbGUuTEFCRUxfSU4sXG4gICAgICAgIG5vdGluICAgICAgICAgICAgOiBhcHBMb2NhbGUuTEFCRUxfTk9UX0lOLFxuICAgICAgICBiZXR3ZWVuICAgICAgICAgIDogYXBwTG9jYWxlLkxBQkVMX0JFVFdFRU5cbiAgICB9O1xufTtcblxuLy8gUmV0dXJucyBhcnJheSBvZiBjbGFzc2VzIHRoYXQgYXJlIGV2YWx1YXRlZCB0cnVlIGZvciBnaXZlbiBvYmplY3Qgb3IgYXJyYXlcbmNvbnN0IGdldENsYXNzZXNBcnJheSA9IGNsYXNzVmFsID0+IHtcbiAgICBsZXQgY2xhc3NlcyA9IFtdO1xuXG4gICAgaWYgKF8uaXNBcnJheShjbGFzc1ZhbCkpIHtcbiAgICAgICAgY2xhc3NWYWwuZm9yRWFjaCh2ID0+IHtcbiAgICAgICAgICAgIGNsYXNzZXMgPSBjbGFzc2VzLmNvbmNhdChnZXRDbGFzc2VzQXJyYXkodikpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNsYXNzZXM7XG4gICAgfVxuICAgIGlmIChfLmlzT2JqZWN0KGNsYXNzVmFsKSkge1xuICAgICAgICBfLmZvckVhY2goY2xhc3NWYWwsICh2YWwsIGtleSkgPT4ge1xuICAgICAgICAgICAgaWYgKHZhbCkge1xuICAgICAgICAgICAgICAgIGNsYXNzZXMgPSBjbGFzc2VzLmNvbmNhdChrZXkuc3BsaXQoJyAnKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gY2xhc3NlcztcbiAgICB9XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q29uZGl0aW9uYWxDbGFzc2VzID0gKG52LCBvdj8pID0+IHtcbiAgICBsZXQgdG9BZGQ7XG4gICAgbGV0IHRvUmVtb3ZlO1xuICAgIC8vIGlmIHRoZSBjb25kaXRpb25hbCBjbGFzcyBwcm9wZXJ0eSBoYXMgYWxyZWFkeSB0b0FkZCBhbmQgdG9SZW1vdmUgYXJyYXlzIHRoZW4gdGFrZSB0aGF0IG90aGVyd2lzZSBidWlsZCB0aG9zZSBhcnJheXNcbiAgICBjb25zdCBjbGFzc1RvQWRkID0gbnYudG9BZGQgfHwgbnY7XG4gICAgY29uc3QgY2xhc3NUb1JlbW92ZSA9IG52LnRvUmVtb3ZlIHx8IG92O1xuICAgIGlmIChfLmlzT2JqZWN0KG52KSkge1xuICAgICAgICB0b0FkZCA9IF8uaXNBcnJheShjbGFzc1RvQWRkKSA/IGNsYXNzVG9BZGQgOiBnZXRDbGFzc2VzQXJyYXkoY2xhc3NUb0FkZCB8fCBbXSk7XG4gICAgICAgIHRvUmVtb3ZlID0gY2xhc3NUb1JlbW92ZSA/IChfLmlzQXJyYXkoY2xhc3NUb1JlbW92ZSkgPyBjbGFzc1RvUmVtb3ZlIDogZ2V0Q2xhc3Nlc0FycmF5KGNsYXNzVG9SZW1vdmUpKSA6IFtdO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRvQWRkID0gY2xhc3NUb0FkZCA/IFtjbGFzc1RvQWRkXSA6IFtdO1xuICAgICAgICB0b1JlbW92ZSA9IGNsYXNzVG9SZW1vdmUgPyBbY2xhc3NUb1JlbW92ZV0gOiBbXTtcbiAgICB9XG4gICAgcmV0dXJuIHt0b0FkZCwgdG9SZW1vdmV9O1xufTtcblxuLypoZWxwZXIgZnVuY3Rpb24gZm9yIHByZXBhcmVGaWVsZERlZnMqL1xuY29uc3QgcHVzaEZpZWxkRGVmID0gKGRhdGFPYmplY3QsIGNvbHVtbkRlZk9iaiwgbmFtZVByZWZpeCwgb3B0aW9ucykgPT4ge1xuICAgIC8qbG9vcCBvdmVyIHRoZSBmaWVsZHMgaW4gdGhlIGRhdGFPYmplY3QgdG8gcHJvY2VzcyB0aGVtKi9cbiAgICBsZXQgbW9kaWZpZWRUaXRsZSxcbiAgICAgICAgcmVsYXRlZFRhYmxlLFxuICAgICAgICByZWxhdGVkRmllbGQsXG4gICAgICAgIHJlbGF0ZWRJbmZvLFxuICAgICAgICBmaWVsZE5hbWUsXG4gICAgICAgIGlzUmVsYXRlZDtcbiAgICBpZiAoIW9wdGlvbnMpIHtcbiAgICAgICAgb3B0aW9ucyA9IHt9O1xuICAgIH1cbiAgICBfLmZvckVhY2goZGF0YU9iamVjdCwgKHZhbHVlLCB0aXRsZSkgPT4ge1xuICAgICAgICBpZiAoXy5pbmNsdWRlcyh0aXRsZSwgJy4nKSkge1xuICAgICAgICAgICAgcmVsYXRlZEluZm8gID0gXy5zcGxpdCh0aXRsZSwgJy4nKTtcbiAgICAgICAgICAgIHJlbGF0ZWRUYWJsZSA9IHJlbGF0ZWRJbmZvWzBdO1xuICAgICAgICAgICAgcmVsYXRlZEZpZWxkID0gcmVsYXRlZEluZm9bMV07XG4gICAgICAgICAgICBpc1JlbGF0ZWQgICAgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLm5vTW9kaWZ5VGl0bGUpIHtcbiAgICAgICAgICAgIG1vZGlmaWVkVGl0bGUgPSB0aXRsZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChfLmlzU3RyaW5nKHRpdGxlKSkge1xuICAgICAgICAgICAgICAgIG1vZGlmaWVkVGl0bGUgPSBwcmV0dGlmeUxhYmVsKHRpdGxlKTtcbiAgICAgICAgICAgICAgICBtb2RpZmllZFRpdGxlID0gZGVIeXBoZW5hdGUobW9kaWZpZWRUaXRsZSk7XG4gICAgICAgICAgICAgICAgbW9kaWZpZWRUaXRsZSA9IG5hbWVQcmVmaXggPyBpbml0Q2FwcyhuYW1lUHJlZml4KSArICcgJyArIG1vZGlmaWVkVGl0bGUgOiBtb2RpZmllZFRpdGxlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBtb2RpZmllZFRpdGxlID0gdGl0bGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGl0bGUgPSBuYW1lUHJlZml4ID8gbmFtZVByZWZpeCArICcuJyArIHRpdGxlIDogdGl0bGU7XG4gICAgICAgIGlmIChpc1JlbGF0ZWQpIHtcbiAgICAgICAgICAgIC8vIEZvciByZWxhdGVkIGNvbHVtbnMsIHNob3J0ZW4gdGhlIHRpdGxlIHRvIGxhc3QgdHdvIHdvcmRzXG4gICAgICAgICAgICBmaWVsZE5hbWUgPSBfLnNwbGl0KG1vZGlmaWVkVGl0bGUsICcgJyk7XG4gICAgICAgICAgICBmaWVsZE5hbWUgPSBmaWVsZE5hbWUubGVuZ3RoID4gMSA/IGZpZWxkTmFtZVtmaWVsZE5hbWUubGVuZ3RoIC0gMl0gKyAnICcgKyBmaWVsZE5hbWVbZmllbGROYW1lLmxlbmd0aCAtIDFdIDogZmllbGROYW1lWzBdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZmllbGROYW1lID0gbW9kaWZpZWRUaXRsZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkZWZPYmogPSBvcHRpb25zLnNldEJpbmRpbmdGaWVsZCA/IHsnZGlzcGxheU5hbWUnOiBmaWVsZE5hbWUsICdmaWVsZCc6IHRpdGxlLCAncmVsYXRlZFRhYmxlJzogcmVsYXRlZFRhYmxlLCAncmVsYXRlZEZpZWxkJzogcmVsYXRlZEZpZWxkIHx8IG1vZGlmaWVkVGl0bGV9XG4gICAgICAgIDogeydkaXNwbGF5TmFtZSc6IGZpZWxkTmFtZSwgJ3JlbGF0ZWRUYWJsZSc6IHJlbGF0ZWRUYWJsZSwgJ3JlbGF0ZWRGaWVsZCc6IHJlbGF0ZWRGaWVsZCB8fCBtb2RpZmllZFRpdGxlfTtcbiAgICAgICAgLyppZiBmaWVsZCBpcyBhIGxlYWYgbm9kZSwgcHVzaCBpdCBpbiB0aGUgY29sdW1uRGVmcyovXG4gICAgICAgIGlmICghXy5pc09iamVjdCh2YWx1ZSkgfHwgKF8uaXNBcnJheSh2YWx1ZSkgJiYgIXZhbHVlWzBdKSkge1xuICAgICAgICAgICAgLyppZiB0aGUgY29sdW1uIGNvdW50ZXIgaGFzIHJlYWNoZWQgdXBwZXJCb3VuZCByZXR1cm4qL1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMudXBwZXJCb3VuZCAmJiBvcHRpb25zLmNvbHVtbkNvdW50ID09PSBvcHRpb25zLnVwcGVyQm91bmQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb2x1bW5EZWZPYmoudGVybWluYWxzLnB1c2goZGVmT2JqKTtcbiAgICAgICAgICAgIC8qaW5jcmVtZW50IHRoZSBjb2x1bW4gY291bnRlciovXG4gICAgICAgICAgICBvcHRpb25zLmNvbHVtbkNvdW50ICs9IDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvKmVsc2UgZmllbGQgaXMgYW4gb2JqZWN0LCBwcm9jZXNzIGl0IHJlY3Vyc2l2ZWx5Ki9cbiAgICAgICAgICAgIC8qIGlmIHBhcmVudCBub2RlIHRvIGJlIGluY2x1ZGVkLCBpbmNsdWRlIGl0ICovXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5jb2x1bW5Db3VudCAhPT0gb3B0aW9ucy51cHBlckJvdW5kKSB7XG4gICAgICAgICAgICAgICAgY29sdW1uRGVmT2JqLm9iamVjdHMucHVzaChkZWZPYmopO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvKiBpZiBmaWVsZCBpcyBhbiBhcnJheSBub2RlLCBwcm9jZXNzIGl0cyBmaXJzdCBjaGlsZCAqL1xuICAgICAgICAgICAgaWYgKF8uaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWVbMF0pIHtcbiAgICAgICAgICAgICAgICBwdXNoRmllbGREZWYodmFsdWVbMF0sIGNvbHVtbkRlZk9iaiwgdGl0bGUgKyAnWzBdJywgb3B0aW9ucyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHB1c2hGaWVsZERlZih2YWx1ZSwgY29sdW1uRGVmT2JqLCB0aXRsZSwgb3B0aW9ucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbn07XG5cbmNvbnN0IGdldE1ldGFEYXRhRnJvbURhdGEgPSAoZGF0YSkgPT4ge1xuICAgIGxldCBkYXRhT2JqZWN0O1xuICAgIGlmIChfLmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgaWYgKF8uaXNPYmplY3QoZGF0YVswXSkpIHtcbiAgICAgICAgICAgIGRhdGFPYmplY3QgPSBnZXRDbG9uZWRPYmplY3QoZGF0YVswXSk7XG4gICAgICAgICAgICAvKkxvb3Agb3ZlciB0aGUgb2JqZWN0IHRvIGZpbmQgb3V0IGFueSBudWxsIHZhbHVlcy4gSWYgYW55IG51bGwgdmFsdWVzIGFyZSBwcmVzZW50IGluIHRoZSBmaXJzdCByb3csIGNoZWNrIGFuZCBhc3NpZ24gdGhlIHZhbHVlcyBmcm9tIG90aGVyIHJvdy5cbiAgICAgICAgICAgICAqIEFzIGNvbHVtbiBnZW5lcmF0aW9uIGlzIGRlcGVuZGVudCBvbiBkYXRhLCBmb3IgcmVsYXRlZCBmaWVsZHMgaWYgZmlyc3Qgcm93IHZhbHVlIGlzIG51bGwsIGNvbHVtbnMgYXJlIG5vdCBnZW5lcmF0ZWQuXG4gICAgICAgICAgICAgKiBUbyBwcmV2ZW50IHRoaXMsIGNoZWNrIHRoZSBkYXRhIGluIG90aGVyIHJvd3MgYW5kIGdlbmVyYXRlIHRoZSBjb2x1bW5zLiBOZXcga2V5cyBmcm9tIG90aGVycyByb3dzIGFyZSBhbHNvIGFkZGVkKi9cbiAgICAgICAgICAgIF8uZm9yRWFjaChkYXRhLCAocm93LCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICgoaW5kZXggKyAxKSA+PSAxMCkgeyAvLyBMaW1pdCB0aGUgZGF0YSBzZWFyY2ggdG8gZmlyc3QgMTAgcmVjb3Jkc1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF8uYXNzaWduV2l0aChkYXRhT2JqZWN0LCByb3csIChvYmpWYWx1ZSwgc3JjVmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChvYmpWYWx1ZSA9PT0gbnVsbCB8fCBvYmpWYWx1ZSA9PT0gdW5kZWZpbmVkKSA/IHNyY1ZhbHVlIDogb2JqVmFsdWU7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRhdGFPYmplY3QgPSBkYXRhWzBdO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZGF0YU9iamVjdCA9IGRhdGE7XG4gICAgfVxuICAgIHJldHVybiBkYXRhT2JqZWN0O1xufTtcblxuZXhwb3J0IGNvbnN0IHByZXBhcmVGaWVsZERlZnMgPSAoZGF0YSwgb3B0aW9ucz8pID0+IHtcbiAgICBsZXQgZGF0YU9iamVjdDtcbiAgICBjb25zdCBjb2x1bW5EZWYgPSB7XG4gICAgICAgICAgICAnb2JqZWN0cycgOiBbXSxcbiAgICAgICAgICAgICd0ZXJtaW5hbHMnIDogW11cbiAgICAgICAgfTtcbiAgICAvKmlmIG5vIGRhdGEgcHJvdmlkZWQsIGluaXRpYWxpemUgZGVmYXVsdCBjb2x1bW4gZGVmaW5pdGlvbnMqL1xuICAgIGlmICghZGF0YSkge1xuICAgICAgICBkYXRhID0gW107XG4gICAgfVxuICAgIGlmICghb3B0aW9ucykge1xuICAgICAgICBvcHRpb25zID0ge307XG4gICAgfVxuICAgIG9wdGlvbnMuc2V0QmluZGluZ0ZpZWxkID0gdHJ1ZTtcbiAgICBvcHRpb25zLmNvbHVtbkNvdW50ID0gMDtcbiAgICBkYXRhT2JqZWN0ID0gZ2V0TWV0YURhdGFGcm9tRGF0YShkYXRhKTtcbiAgICAvKmZpcnN0IG9mIHRoZSBtYW55IGRhdGEgb2JqZWN0cyBmcm9tIGdyaWQgZGF0YSovXG4gICAgcHVzaEZpZWxkRGVmKGRhdGFPYmplY3QsIGNvbHVtbkRlZiwgJycsIG9wdGlvbnMpO1xuICAgIGlmICghb3B0aW9ucyB8fCAob3B0aW9ucyAmJiAhb3B0aW9ucy5maWx0ZXIpKSB7XG4gICAgICAgIHJldHVybiBjb2x1bW5EZWYudGVybWluYWxzO1xuICAgIH1cbiAgICBzd2l0Y2ggKG9wdGlvbnMuZmlsdGVyKSB7XG4gICAgICAgIGNhc2UgJ2FsbCc6XG4gICAgICAgICAgICByZXR1cm4gY29sdW1uRGVmO1xuICAgICAgICBjYXNlICdvYmplY3RzJzpcbiAgICAgICAgICAgIHJldHVybiBjb2x1bW5EZWYub2JqZWN0cztcbiAgICAgICAgY2FzZSAndGVybWluYWxzJzpcbiAgICAgICAgICAgIHJldHVybiBjb2x1bW5EZWYudGVybWluYWxzO1xuICAgIH1cbiAgICByZXR1cm4gY29sdW1uRGVmO1xufTtcblxuXG4vKipcbiAqIFRvIGdldCBjb250YWluZXIgdGFyZ2V0IGVsZW1lbnQgdG8gYXBwZW5kIHRoZSBsaXN0IGZvciBzZWFyY2ggYW5kIGRhdGVwaWNrZXIgcGFuZWwgd2hlbiBmaWVsZCBwcmVzZW50IGluIGRpYWxvZ1xuICovXG5leHBvcnQgY29uc3QgZ2V0Q29udGFpbmVyVGFyZ2V0Q2xhc3MgPSAoZWxlbWVudCkgPT4ge1xuICAgIHJldHVybiAnLndtLWFwcCc7XG5cbiAgICAvLyBCZWxvdyBjb2RlIGlzIG5vdCB3b3JraW5nIHdoZW4gd2UgaGF2ZSBuZXN0ZWQgZGlhbG9ncy5cbiAgICAvLyBOZXN0ZWQgZGlhbG9ncyBjYXNlIHdlIHdpbGwgaGF2ZSAgbXVsdGlwbGUgJy5tb2RhbC1jb250ZW50JyBjbGFzc2VzIG9uIERPTSBkdWUgdG8gdGhhdCBjb250YWluZXIgcG9zaXRpb25zIGlzIG5vdCB3b3JraW5nIGFzIGV4cGVjdGVkLlxuICAgIC8vIEJlbG93IGNvZGUgdG8gZml4IHRoZSBpc3N1ZSA9PT4gV01TLTE4NzUxXG4gICAgLy8gQXMgcmVncmVzc2lvbiB3ZSBnb3QgPT0+IFdNUy0xOTgzNVxuXG4gICAgLy8gaWYgKGVsZW1lbnQuY2xvc2VzdCgnLm1vZGFsLWRpYWxvZycpKSB7XG4gICAgLy8gICAgIHJldHVybiAnLm1vZGFsLWNvbnRlbnQnO1xuICAgIC8vIH0gZWxzZSB7XG4gICAgLy8gICAgIHJldHVybiAnYm9keSc7XG4gICAgLy8gfVxuXG59XG5cbi8qKlxuICogVG8gZXh0cmFjdCB0aGUgVmFyaWFibGUgTmFtZSBmcm9tIGEgV2lkZ2V0J3MgYmluZGRhdGFzb3VyY2UgYXR0cmlidXRlXG4gKi9cbmV4cG9ydCBjb25zdCBleHRyYWN0RGF0YVNvdXJjZU5hbWUgPSAoYmluZERhdGFTb3VyY2UpID0+IHtcbiAgICBpZiAoIWJpbmREYXRhU291cmNlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IGRhdGFTb3VyY2VOYW1lO1xuICAgIGNvbnN0IHBhcnRzID0gYmluZERhdGFTb3VyY2Uuc3BsaXQoJy4nKTtcbiAgICBpZiAocGFydHMubGVuZ3RoID4gMSAmJiBwYXJ0c1swXSA9PT0gJ1ZhcmlhYmxlcycpIHtcbiAgICAgICAgZGF0YVNvdXJjZU5hbWUgPSBwYXJ0c1sxXTtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGFTb3VyY2VOYW1lO1xufVxuXG5leHBvcnQgY29uc3Qgc2V0Rm9jdXNUcmFwID0gKGNvbnRhaW5lciwgYWxsb3dPdXRzaWRlQ2xpY2ssIHNldFJldHVybkZvY3VzRWxlbWVudD8pID0+IHtcbiAgICByZXR1cm4gY3JlYXRlRm9jdXNUcmFwKGNvbnRhaW5lciwge1xuICAgICAgICBvbkFjdGl2YXRlOiAoKSA9PiBjb250YWluZXIuY2xhc3NMaXN0LmFkZCgnaXMtYWN0aXZlJyksXG4gICAgICAgIG9uRGVhY3RpdmF0ZTogKCkgPT4gY29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoJ2lzLWFjdGl2ZScpLFxuICAgICAgICBhbGxvd091dHNpZGVDbGljazogYWxsb3dPdXRzaWRlQ2xpY2ssXG4gICAgICAgIHNldFJldHVybkZvY3VzOiBzZXRSZXR1cm5Gb2N1c0VsZW1lbnQsXG4gICAgfSk7XG59XG5cbi8qKlxuICogR2V0cyBrZXlib2FyZCBmb2N1c2FibGUgZWxlbWVudHMgd2l0aGluIGEgc3BlY2lmaWVkIGVsZW1lbnRcbiAqIEBwYXJhbSBlbGVtZW50IHtIVE1MRWxlbWVudH1cbiAqIEByZXR1cm5zIHtBcnJheX1cbiAqL1xuZXhwb3J0IGNvbnN0IGdldEtleWJvYXJkRm9jdXNhYmxlRWxlbWVudHMgPSAoZWxlbWVudDogSFRNTEVsZW1lbnQpID0+IHtcbiAgICBjb25zdCBlbGVtZW50Tm9kZUxpc3QgPSBlbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2EsIGJ1dHRvbiwgaW5wdXQsIHRleHRhcmVhLCBzZWxlY3QsIGRldGFpbHMsIGlmcmFtZSwgZW1iZWQsIG9iamVjdCwgc3VtbWFyeSBkaWFsb2csIGF1ZGlvW2NvbnRyb2xzXSwgdmlkZW9bY29udHJvbHNdLCBbY29udGVudGVkaXRhYmxlXScpO1xuICAgIGNvbnN0IGVsZW1lbnRzID0gQXJyYXkuZnJvbShlbGVtZW50Tm9kZUxpc3QpO1xuICAgIHJldHVybiBlbGVtZW50cy5maWx0ZXIoZWwgPT4ge1xuICAgICAgICByZXR1cm4gKCFlbC5oYXNBdHRyaWJ1dGUoJ2Rpc2FibGVkJykgJiYgIWVsLmhhc0F0dHJpYnV0ZSgnaGlkZGVuJylcbiAgICAgICAgICAgICYmICghZWwuaGFzQXR0cmlidXRlKCd0YWJpbmRleCcpIHx8IChlbC5oYXNBdHRyaWJ1dGUoJ3RhYmluZGV4JykgJiYgIWVsLmdldEF0dHJpYnV0ZShcInRhYmluZGV4XCIpLnN0YXJ0c1dpdGgoJy0nKSkpKTtcbiAgICB9KTtcbn1cbiJdfQ==
|
|
@@ -487,9 +487,12 @@ const setFocusTrap = (container, allowOutsideClick, setReturnFocusElement) => {
|
|
|
487
487
|
* @returns {Array}
|
|
488
488
|
*/
|
|
489
489
|
const getKeyboardFocusableElements = (element) => {
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
490
|
+
const elementNodeList = element.querySelectorAll('a, button, input, textarea, select, details, iframe, embed, object, summary dialog, audio[controls], video[controls], [contenteditable]');
|
|
491
|
+
const elements = Array.from(elementNodeList);
|
|
492
|
+
return elements.filter(el => {
|
|
493
|
+
return (!el.hasAttribute('disabled') && !el.hasAttribute('hidden')
|
|
494
|
+
&& (!el.hasAttribute('tabindex') || (el.hasAttribute('tabindex') && !el.getAttribute("tabindex").startsWith('-'))));
|
|
495
|
+
});
|
|
493
496
|
};
|
|
494
497
|
|
|
495
498
|
var APPLY_STYLES_TYPE;
|