@agorapulse/ui-components 18.1.11 → 18.1.12
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.
- package/agorapulse-ui-components-18.1.12.tgz +0 -0
- package/esm2022/nav-selector/nav-selector-category/nav-selector-category.component.mjs +4 -4
- package/esm2022/nav-selector/nav-selector-group/nav-selector-group.component.mjs +4 -4
- package/esm2022/nav-selector/nav-selector-leaf/nav-selector-leaf.component.mjs +2 -2
- package/esm2022/nav-selector/nav-selector.state.mjs +3 -3
- package/esm2022/nav-selector/testing/agorapulse-ui-components-nav-selector-testing.mjs +5 -0
- package/esm2022/nav-selector/testing/nav-selector-entry.mock.mjs +91 -0
- package/esm2022/nav-selector/testing/public_api.mjs +2 -0
- package/fesm2022/agorapulse-ui-components-nav-selector-testing.mjs +97 -0
- package/fesm2022/agorapulse-ui-components-nav-selector-testing.mjs.map +1 -0
- package/fesm2022/agorapulse-ui-components-nav-selector.mjs +9 -9
- package/fesm2022/agorapulse-ui-components-nav-selector.mjs.map +1 -1
- package/nav-selector/testing/index.d.ts +5 -0
- package/nav-selector/testing/nav-selector-entry.mock.d.ts +67 -0
- package/nav-selector/testing/public_api.d.ts +1 -0
- package/package.json +7 -1
- package/agorapulse-ui-components-18.1.11.tgz +0 -0
|
Binary file
|
|
@@ -15,7 +15,7 @@ export class NavSelectorCategoryComponent {
|
|
|
15
15
|
category = input.required();
|
|
16
16
|
actionClicked = output();
|
|
17
17
|
foldSymbol = computed(() => (this.category().folded ? 'chevron-down' : 'chevron-up'));
|
|
18
|
-
foldedWithDelay = signal(
|
|
18
|
+
foldedWithDelay = signal(true);
|
|
19
19
|
animationState = computed(() => (this.category().folded ? 'collapsed' : 'expanded'));
|
|
20
20
|
aliasEl = viewChild('alias');
|
|
21
21
|
aliasBoundedClientRect = signal({
|
|
@@ -78,7 +78,7 @@ export class NavSelectorCategoryComponent {
|
|
|
78
78
|
}
|
|
79
79
|
}
|
|
80
80
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: NavSelectorCategoryComponent, deps: [{ token: i0.ElementRef }, { token: i1.NavSelectorCategoryPresenter }], target: i0.ɵɵFactoryTarget.Component });
|
|
81
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.9", type: NavSelectorCategoryComponent, isStandalone: true, selector: "ap-nav-selector-category", inputs: { category: { classPropertyName: "category", publicName: "category", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { actionClicked: "actionClicked" }, host: { listeners: { "keydown.arrowLeft": "navSelectorCategoryPresenter.fold($event, this.category())", "keydown.arrowRight": "navSelectorCategoryPresenter.unfold($event, this.category())" }, properties: { "class.minified": "!navSelectorCategoryPresenter.expanded()" } }, providers: [withSymbols(apChevronDown, apChevronUp), NavSelectorCategoryPresenter], viewQueries: [{ propertyName: "aliasEl", first: true, predicate: ["alias"], descendants: true, isSignal: true }], ngImport: i0, template: "@if (navSelectorCategoryPresenter.expanded()) {\n <div\n class=\"content\"\n apTooltipPosition=\"right\"\n [apTooltip]=\"tooltipContent()\"\n [apTooltipDisabled]=\"tooltipDisabled()\"\n [apTreeNodeAccessibility]=\"category()\"\n (keydown.space)=\"navSelectorCategoryPresenter.toggleFolding($event, this.category())\"\n (keydown.enter)=\"navSelectorCategoryPresenter.toggleFolding($event, this.category())\"\n (click)=\"navSelectorCategoryPresenter.toggleFolding($event, this.category())\">\n <span\n #alias\n class=\"caption\">\n {{ category().alias }}\n </span>\n\n <ap-symbol\n class=\"folding-button\"\n size=\"sm\"\n [symbolId]=\"foldSymbol()\" />\n </div>\n\n <div\n class=\"children-container\"\n [@accordion]=\"{\n value: animationState(),\n params: {\n maxHeight: maxHeight()
|
|
81
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.9", type: NavSelectorCategoryComponent, isStandalone: true, selector: "ap-nav-selector-category", inputs: { category: { classPropertyName: "category", publicName: "category", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { actionClicked: "actionClicked" }, host: { listeners: { "keydown.arrowLeft": "navSelectorCategoryPresenter.fold($event, this.category())", "keydown.arrowRight": "navSelectorCategoryPresenter.unfold($event, this.category())" }, properties: { "class.minified": "!navSelectorCategoryPresenter.expanded()" } }, providers: [withSymbols(apChevronDown, apChevronUp), NavSelectorCategoryPresenter], viewQueries: [{ propertyName: "aliasEl", first: true, predicate: ["alias"], descendants: true, isSignal: true }], ngImport: i0, template: "<!-- eslint-disable @angular-eslint/template/interactive-supports-focus -->\n@if (navSelectorCategoryPresenter.expanded()) {\n <div\n class=\"content\"\n apTooltipPosition=\"right\"\n [apTooltip]=\"tooltipContent()\"\n [apTooltipDisabled]=\"tooltipDisabled()\"\n [apTreeNodeAccessibility]=\"category()\"\n (keydown.space)=\"navSelectorCategoryPresenter.toggleFolding($event, this.category())\"\n (keydown.enter)=\"navSelectorCategoryPresenter.toggleFolding($event, this.category())\"\n (click)=\"navSelectorCategoryPresenter.toggleFolding($event, this.category())\">\n <span\n #alias\n class=\"caption\">\n {{ category().alias }}\n </span>\n\n <ap-symbol\n class=\"folding-button\"\n size=\"sm\"\n [symbolId]=\"foldSymbol()\" />\n </div>\n\n <div\n class=\"children-container\"\n [@accordion]=\"{\n value: animationState(),\n params: {\n maxHeight: maxHeight(),\n },\n }\">\n @if (!foldedWithDelay()) {\n <div class=\"children\">\n @if (category().children.length === 0) {\n @if (category().emptyStateTitle) {\n <div class=\"empty-state\">\n {{ category().emptyStateTitle }}\n </div>\n }\n } @else {\n @for (child of category().children; track child.uid) {\n @if (!child.hidden) {\n <div\n class=\"entry\"\n [class.folder]=\"child.type === 'GROUP'\">\n @if (child.type === 'LEAF') {\n <ap-nav-selector-leaf\n [leaf]=\"child\"\n (actionClicked)=\"actionClicked.emit($event)\" />\n } @else if (child.type === 'GROUP') {\n <ap-nav-selector-group\n [group]=\"child\"\n (actionClicked)=\"actionClicked.emit($event)\" />\n }\n </div>\n }\n }\n }\n </div>\n }\n </div>\n} @else {\n <div\n class=\"content\"\n apTooltipPosition=\"right\"\n [apTreeNodeAccessibility]=\"category()\"\n [apTooltip]=\"tooltipContent()\"\n [apTooltipDisabled]=\"tooltipDisabled()\"\n (click)=\"navSelectorCategoryPresenter.toggleFolding($event, this.category())\"\n (keydown.space)=\"navSelectorCategoryPresenter.toggleFolding($event, this.category())\"\n (keydown.enter)=\"navSelectorCategoryPresenter.toggleFolding($event, this.category())\">\n <div class=\"name-container\">\n <span class=\"caption\">{{ category().alias }}</span>\n </div>\n\n <div class=\"toggle\">\n <ap-symbol\n size=\"sm\"\n [symbolId]=\"foldSymbol()\" />\n </div>\n </div>\n\n <div\n class=\"children-container\"\n [@accordion]=\"{\n value: animationState(),\n params: {\n maxHeight: maxHeight(),\n },\n }\">\n @if (!foldedWithDelay()) {\n <div class=\"children\">\n @for (child of category().children; track child.uid) {\n @if (!child.hidden) {\n <div\n class=\"entry\"\n [class.folder]=\"child.type === 'GROUP'\">\n @if (child.type === 'LEAF') {\n <ap-nav-selector-leaf\n [leaf]=\"child\"\n (actionClicked)=\"actionClicked.emit($event)\" />\n } @else if (child.type === 'GROUP') {\n <ap-nav-selector-group\n [group]=\"child\"\n (actionClicked)=\"actionClicked.emit($event)\" />\n }\n </div>\n }\n }\n </div>\n }\n </div>\n}\n", styles: [":host{display:flex;align-items:center;flex-shrink:0;align-self:stretch;flex-direction:column}:host .children-container{align-self:stretch}:host .children-container .empty-state{font-size:var(--ref-font-size-xs);font-weight:var(--ref-font-weight-regular);font-style:italic;color:var(--ref-color-grey-80);padding:var(--ref-spacing-xxs)}:host .folding-button{display:flex;width:16px;height:16px;justify-content:center;align-items:center;flex-shrink:0}:host .content{padding:0 var(--ref-spacing-xxs);display:flex;height:36px;align-items:center;gap:var(--ref-spacing-xxs);flex-shrink:0;flex-grow:1;align-self:stretch;cursor:pointer}:host .content:hover{border-radius:var(--ref-border-radius-sm);background:var(--ref-color-electric-blue-10)}:host .content:active{border-radius:var(--ref-border-radius-sm);background:var(--ref-color-electric-blue-20)}:host .content:focus-visible{outline:none;border-radius:var(--ref-border-radius-sm);background:var(--ref-color-electric-blue-10);box-shadow:0 0 0 1px var(--ref-color-white),0 0 0 3px var(--ref-color-electric-blue-100)}:host ap-symbol[symbol-id=chevron-down],:host ap-symbol[symbol-id=chevron-up]{color:var(--ref-color-grey-80)}:host .caption{-webkit-box-orient:vertical;-webkit-line-clamp:1;flex:1 0 0;overflow:hidden;white-space:nowrap;color:var(--ref-color-grey-100);text-overflow:ellipsis;font-family:Averta;font-size:var(--sys-text-style-h4-size);font-style:normal;font-weight:var(--ref-font-weight-bold);line-height:var(--ref-font-line-height-md)}:host .children{display:flex;flex-direction:column;align-items:flex-start;flex:1 0 0;align-self:stretch}:host .children .entry{display:flex;flex-direction:column;align-items:flex-start;flex:1 0 0;align-self:stretch;margin-left:calc(-1 * var(--ref-spacing-xxs));margin-right:calc(-1 * var(--ref-spacing-xxs))}:host .children .entry.folder{padding:var(--ref-spacing-xxs);border-bottom:1px solid var(--sys-border-color-default)}:host .children .entry.folder+.entry:not(.folder){padding-top:var(--ref-spacing-xxs)}:host .children .entry.folder:first-child{padding-top:0}:host .children .entry.folder:last-child{border-bottom:none;padding-bottom:0}:host .children .entry:not(.folder){padding-left:var(--ref-spacing-xxs);padding-right:var(--ref-spacing-xxs)}:host .children .entry:not(.folder):first-child:not(:last-child){padding-top:var(--ref-spacing-xxs)}:host .children .entry:not(.folder):last-child:not(:first-child){padding-bottom:var(--ref-spacing-xxs);border-bottom:none}:host .children .entry:not(.folder):has(+.entry.folder){padding-bottom:var(--ref-spacing-xxs)}:host .children .entry:not(.folder)+.entry.folder{border-top:1px solid var(--sys-border-color-default)}:host.minified .name-container{overflow:hidden;display:flex}:host.minified .name-container span{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;display:inline-block}:host.minified .caption{white-space:nowrap}:host.minified .content{position:relative}:host.minified .content .toggle{position:absolute;display:none}:host.minified .content:hover .toggle,:host.minified .content:focus-visible .toggle{inset:0;display:flex;justify-content:center;align-items:center}:host.minified .content:hover .name-container,:host.minified .content:focus-visible .name-container{display:none}\n"], dependencies: [{ kind: "component", type: NavSelectorLeafComponent, selector: "ap-nav-selector-leaf", inputs: ["leaf"], outputs: ["actionClicked"] }, { kind: "component", type: SymbolComponent, selector: "ap-symbol", inputs: ["symbolId", "color", "size"], outputs: ["sizeChange"] }, { kind: "component", type: NavSelectorGroupComponent, selector: "ap-nav-selector-group", inputs: ["group"], outputs: ["actionClicked"] }, { kind: "directive", type: TreeNodeAccessibilityDirective, selector: "[apTreeNodeAccessibility]", inputs: ["apTreeNodeAccessibility"] }, { kind: "directive", type: TooltipDirective, selector: "[apTooltip]", inputs: ["apTooltip", "apTooltipPosition", "apTooltipShowDelay", "apTooltipHideDelay", "apTooltipDuration", "apTooltipDisabled", "apTooltipTruncatedTextOnly", "apTooltipTemplateContext", "apTooltipVirtualScrollElement"] }], animations: [
|
|
82
82
|
/**
|
|
83
83
|
* Overflow hidden is put only during the animation and on the collapsed state because if it is put on the expanded state then children’s border will be cut (hover / focus)
|
|
84
84
|
*/
|
|
@@ -124,6 +124,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
|
|
|
124
124
|
animate('250ms cubic-bezier(.4, 0, .3, 1)', keyframes([style({ maxHeight: '{{maxHeight}}' }), style({ overflow: 'hidden', maxHeight: 0 })])),
|
|
125
125
|
]),
|
|
126
126
|
]),
|
|
127
|
-
], template: "@if (navSelectorCategoryPresenter.expanded()) {\n <div\n class=\"content\"\n apTooltipPosition=\"right\"\n [apTooltip]=\"tooltipContent()\"\n [apTooltipDisabled]=\"tooltipDisabled()\"\n [apTreeNodeAccessibility]=\"category()\"\n (keydown.space)=\"navSelectorCategoryPresenter.toggleFolding($event, this.category())\"\n (keydown.enter)=\"navSelectorCategoryPresenter.toggleFolding($event, this.category())\"\n (click)=\"navSelectorCategoryPresenter.toggleFolding($event, this.category())\">\n <span\n #alias\n class=\"caption\">\n {{ category().alias }}\n </span>\n\n <ap-symbol\n class=\"folding-button\"\n size=\"sm\"\n [symbolId]=\"foldSymbol()\" />\n </div>\n\n <div\n class=\"children-container\"\n [@accordion]=\"{\n value: animationState(),\n params: {\n maxHeight: maxHeight()
|
|
127
|
+
], template: "<!-- eslint-disable @angular-eslint/template/interactive-supports-focus -->\n@if (navSelectorCategoryPresenter.expanded()) {\n <div\n class=\"content\"\n apTooltipPosition=\"right\"\n [apTooltip]=\"tooltipContent()\"\n [apTooltipDisabled]=\"tooltipDisabled()\"\n [apTreeNodeAccessibility]=\"category()\"\n (keydown.space)=\"navSelectorCategoryPresenter.toggleFolding($event, this.category())\"\n (keydown.enter)=\"navSelectorCategoryPresenter.toggleFolding($event, this.category())\"\n (click)=\"navSelectorCategoryPresenter.toggleFolding($event, this.category())\">\n <span\n #alias\n class=\"caption\">\n {{ category().alias }}\n </span>\n\n <ap-symbol\n class=\"folding-button\"\n size=\"sm\"\n [symbolId]=\"foldSymbol()\" />\n </div>\n\n <div\n class=\"children-container\"\n [@accordion]=\"{\n value: animationState(),\n params: {\n maxHeight: maxHeight(),\n },\n }\">\n @if (!foldedWithDelay()) {\n <div class=\"children\">\n @if (category().children.length === 0) {\n @if (category().emptyStateTitle) {\n <div class=\"empty-state\">\n {{ category().emptyStateTitle }}\n </div>\n }\n } @else {\n @for (child of category().children; track child.uid) {\n @if (!child.hidden) {\n <div\n class=\"entry\"\n [class.folder]=\"child.type === 'GROUP'\">\n @if (child.type === 'LEAF') {\n <ap-nav-selector-leaf\n [leaf]=\"child\"\n (actionClicked)=\"actionClicked.emit($event)\" />\n } @else if (child.type === 'GROUP') {\n <ap-nav-selector-group\n [group]=\"child\"\n (actionClicked)=\"actionClicked.emit($event)\" />\n }\n </div>\n }\n }\n }\n </div>\n }\n </div>\n} @else {\n <div\n class=\"content\"\n apTooltipPosition=\"right\"\n [apTreeNodeAccessibility]=\"category()\"\n [apTooltip]=\"tooltipContent()\"\n [apTooltipDisabled]=\"tooltipDisabled()\"\n (click)=\"navSelectorCategoryPresenter.toggleFolding($event, this.category())\"\n (keydown.space)=\"navSelectorCategoryPresenter.toggleFolding($event, this.category())\"\n (keydown.enter)=\"navSelectorCategoryPresenter.toggleFolding($event, this.category())\">\n <div class=\"name-container\">\n <span class=\"caption\">{{ category().alias }}</span>\n </div>\n\n <div class=\"toggle\">\n <ap-symbol\n size=\"sm\"\n [symbolId]=\"foldSymbol()\" />\n </div>\n </div>\n\n <div\n class=\"children-container\"\n [@accordion]=\"{\n value: animationState(),\n params: {\n maxHeight: maxHeight(),\n },\n }\">\n @if (!foldedWithDelay()) {\n <div class=\"children\">\n @for (child of category().children; track child.uid) {\n @if (!child.hidden) {\n <div\n class=\"entry\"\n [class.folder]=\"child.type === 'GROUP'\">\n @if (child.type === 'LEAF') {\n <ap-nav-selector-leaf\n [leaf]=\"child\"\n (actionClicked)=\"actionClicked.emit($event)\" />\n } @else if (child.type === 'GROUP') {\n <ap-nav-selector-group\n [group]=\"child\"\n (actionClicked)=\"actionClicked.emit($event)\" />\n }\n </div>\n }\n }\n </div>\n }\n </div>\n}\n", styles: [":host{display:flex;align-items:center;flex-shrink:0;align-self:stretch;flex-direction:column}:host .children-container{align-self:stretch}:host .children-container .empty-state{font-size:var(--ref-font-size-xs);font-weight:var(--ref-font-weight-regular);font-style:italic;color:var(--ref-color-grey-80);padding:var(--ref-spacing-xxs)}:host .folding-button{display:flex;width:16px;height:16px;justify-content:center;align-items:center;flex-shrink:0}:host .content{padding:0 var(--ref-spacing-xxs);display:flex;height:36px;align-items:center;gap:var(--ref-spacing-xxs);flex-shrink:0;flex-grow:1;align-self:stretch;cursor:pointer}:host .content:hover{border-radius:var(--ref-border-radius-sm);background:var(--ref-color-electric-blue-10)}:host .content:active{border-radius:var(--ref-border-radius-sm);background:var(--ref-color-electric-blue-20)}:host .content:focus-visible{outline:none;border-radius:var(--ref-border-radius-sm);background:var(--ref-color-electric-blue-10);box-shadow:0 0 0 1px var(--ref-color-white),0 0 0 3px var(--ref-color-electric-blue-100)}:host ap-symbol[symbol-id=chevron-down],:host ap-symbol[symbol-id=chevron-up]{color:var(--ref-color-grey-80)}:host .caption{-webkit-box-orient:vertical;-webkit-line-clamp:1;flex:1 0 0;overflow:hidden;white-space:nowrap;color:var(--ref-color-grey-100);text-overflow:ellipsis;font-family:Averta;font-size:var(--sys-text-style-h4-size);font-style:normal;font-weight:var(--ref-font-weight-bold);line-height:var(--ref-font-line-height-md)}:host .children{display:flex;flex-direction:column;align-items:flex-start;flex:1 0 0;align-self:stretch}:host .children .entry{display:flex;flex-direction:column;align-items:flex-start;flex:1 0 0;align-self:stretch;margin-left:calc(-1 * var(--ref-spacing-xxs));margin-right:calc(-1 * var(--ref-spacing-xxs))}:host .children .entry.folder{padding:var(--ref-spacing-xxs);border-bottom:1px solid var(--sys-border-color-default)}:host .children .entry.folder+.entry:not(.folder){padding-top:var(--ref-spacing-xxs)}:host .children .entry.folder:first-child{padding-top:0}:host .children .entry.folder:last-child{border-bottom:none;padding-bottom:0}:host .children .entry:not(.folder){padding-left:var(--ref-spacing-xxs);padding-right:var(--ref-spacing-xxs)}:host .children .entry:not(.folder):first-child:not(:last-child){padding-top:var(--ref-spacing-xxs)}:host .children .entry:not(.folder):last-child:not(:first-child){padding-bottom:var(--ref-spacing-xxs);border-bottom:none}:host .children .entry:not(.folder):has(+.entry.folder){padding-bottom:var(--ref-spacing-xxs)}:host .children .entry:not(.folder)+.entry.folder{border-top:1px solid var(--sys-border-color-default)}:host.minified .name-container{overflow:hidden;display:flex}:host.minified .name-container span{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;display:inline-block}:host.minified .caption{white-space:nowrap}:host.minified .content{position:relative}:host.minified .content .toggle{position:absolute;display:none}:host.minified .content:hover .toggle,:host.minified .content:focus-visible .toggle{inset:0;display:flex;justify-content:center;align-items:center}:host.minified .content:hover .name-container,:host.minified .content:focus-visible .name-container{display:none}\n"] }]
|
|
128
128
|
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i1.NavSelectorCategoryPresenter }] });
|
|
129
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2LXNlbGVjdG9yLWNhdGVnb3J5LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvdWktY29tcG9uZW50cy9uYXYtc2VsZWN0b3Ivc3JjL25hdi1zZWxlY3Rvci1jYXRlZ29yeS9uYXYtc2VsZWN0b3ItY2F0ZWdvcnkuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vbGlicy91aS1jb21wb25lbnRzL25hdi1zZWxlY3Rvci9zcmMvbmF2LXNlbGVjdG9yLWNhdGVnb3J5L25hdi1zZWxlY3Rvci1jYXRlZ29yeS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNyRSxPQUFPLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxlQUFlLEVBQUUsV0FBVyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDakcsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDNUYsT0FBTyxFQUNILFdBQVcsRUFDWCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixNQUFNLEVBRU4sS0FBSyxFQUNMLE1BQU0sRUFDTixNQUFNLEVBQ04sU0FBUyxFQUNULFNBQVMsR0FDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUVqRyxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUMvRixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUM1RixPQUFPLEVBQUUsMENBQTBDLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRixPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQzs7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QztnQ0FDRixTQUFTLEVBQUUsQ0FBQztnQ0FDWixRQUFRLEVBQUUsUUFBUTs2QkFDckIsQ0FBQyxDQUNMOzRCQUNELEtBQUssQ0FDRCxVQUFVLEVBQ1YsS0FBSyxDQUFDO2dDQUNGLFNBQVMsRUFBRSxTQUFTOzZCQUN2QixDQUFDLENBQ0w7NEJBQ0QsVUFBVSxDQUFDLHVCQUF1QixFQUFFO2dDQUNoQyxPQUFPLENBQUMsa0NBQWtDLEVBQUUsS0FBSyxDQUFDLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLENBQUMsQ0FBQzs2QkFDekcsQ0FBQzs0QkFDRixVQUFVLENBQUMsdUJBQXVCLEVBQUU7Z0NBQ2hDLE9BQU8sQ0FDSCxrQ0FBa0MsRUFDbEMsU0FBUyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQ2xHOzZCQUNKLENBQUM7eUJBQ0wsQ0FBQztxQkFDTCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRvb2x0aXBEaXJlY3RpdmUgfSBmcm9tICdAYWdvcmFwdWxzZS91aS1jb21wb25lbnRzL3Rvb2x0aXAnO1xuaW1wb3J0IHsgYXBDaGV2cm9uRG93biwgYXBDaGV2cm9uVXAsIFN5bWJvbENvbXBvbmVudCwgd2l0aFN5bWJvbHMgfSBmcm9tICdAYWdvcmFwdWxzZS91aS1zeW1ib2wnO1xuaW1wb3J0IHsgYW5pbWF0ZSwga2V5ZnJhbWVzLCBzdGF0ZSwgc3R5bGUsIHRyYW5zaXRpb24sIHRyaWdnZXIgfSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcbmltcG9ydCB7XG4gICAgYWZ0ZXJSZW5kZXIsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ29tcG9uZW50LFxuICAgIGNvbXB1dGVkLFxuICAgIGVmZmVjdCxcbiAgICBFbGVtZW50UmVmLFxuICAgIGlucHV0LFxuICAgIG91dHB1dCxcbiAgICBzaWduYWwsXG4gICAgdW50cmFja2VkLFxuICAgIHZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUcmVlTm9kZUFjY2Vzc2liaWxpdHlEaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL3RyZWUtbm9kZS1hY2Nlc3NpYmlsaXR5LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBJbnRlcm5hbE5hdlNlbGVjdG9yQ2F0ZWdvcnksIE5hdlNlbGVjdG9yTGVhZkFjdGlvbkNsaWNrZWRFdmVudCB9IGZyb20gJy4uL25hdi1zZWxlY3Rvcic7XG5pbXBvcnQgeyBOYXZTZWxlY3Rvckdyb3VwQ29tcG9uZW50IH0gZnJvbSAnLi4vbmF2LXNlbGVjdG9yLWdyb3VwL25hdi1zZWxlY3Rvci1ncm91cC5jb21wb25lbnQnO1xuaW1wb3J0IHsgTmF2U2VsZWN0b3JMZWFmQ29tcG9uZW50IH0gZnJvbSAnLi4vbmF2LXNlbGVjdG9yLWxlYWYvbmF2LXNlbGVjdG9yLWxlYWYuY29tcG9uZW50JztcbmltcG9ydCB7IGNvbXB1dGVOdW1iZXJPZkRpc3BsYXlhYmxlQ2hpbGRyZW5PblVuZm9sZCB9IGZyb20gJy4uL3V0aWxzL2xlYWYudXRpbHMnO1xuaW1wb3J0IHsgTmF2U2VsZWN0b3JDYXRlZ29yeVByZXNlbnRlciB9IGZyb20gJy4vbmF2LXNlbGVjdG9yLWNhdGVnb3J5LnByZXNlbnRlcic7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYXAtbmF2LXNlbGVjdG9yLWNhdGVnb3J5JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vbmF2LXNlbGVjdG9yLWNhdGVnb3J5LmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9uYXYtc2VsZWN0b3ItY2F0ZWdvcnkuY29tcG9uZW50LnNjc3MnXSxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIGltcG9ydHM6IFtOYXZTZWxlY3RvckxlYWZDb21wb25lbnQsIFN5bWJvbENvbXBvbmVudCwgTmF2U2VsZWN0b3JHcm91cENvbXBvbmVudCwgVHJlZU5vZGVBY2Nlc3NpYmlsaXR5RGlyZWN0aXZlLCBUb29sdGlwRGlyZWN0aXZlXSxcbiAgICBwcm92aWRlcnM6IFt3aXRoU3ltYm9scyhhcENoZXZyb25Eb3duLCBhcENoZXZyb25VcCksIE5hdlNlbGVjdG9yQ2F0ZWdvcnlQcmVzZW50ZXJdLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgJ1tjbGFzcy5taW5pZmllZF0nOiAnIW5hdlNlbGVjdG9yQ2F0ZWdvcnlQcmVzZW50ZXIuZXhwYW5kZWQoKScsXG4gICAgICAgICcoa2V5ZG93bi5hcnJvd0xlZnQpJzogJ25hdlNlbGVjdG9yQ2F0ZWdvcnlQcmVzZW50ZXIuZm9sZCgkZXZlbnQsIHRoaXMuY2F0ZWdvcnkoKSknLFxuICAgICAgICAnKGtleWRvd24uYXJyb3dSaWdodCknOiAnbmF2U2VsZWN0b3JDYXRlZ29yeVByZXNlbnRlci51bmZvbGQoJGV2ZW50LCB0aGlzLmNhdGVnb3J5KCkpJyxcbiAgICB9LFxuICAgIGFuaW1hdGlvbnM6IFtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIE92ZXJmbG93IGhpZGRlbiBpcyBwdXQgb25seSBkdXJpbmcgdGhlIGFuaW1hdGlvbiBhbmQgb24gdGhlIGNvbGxhcHNlZCBzdGF0ZSBiZWNhdXNlIGlmIGl0IGlzIHB1dCBvbiB0aGUgZXhwYW5kZWQgc3RhdGUgdGhlbiBjaGlsZHJlbuKAmXMgYm9yZGVyIHdpbGwgYmUgY3V0IChob3ZlciAvIGZvY3VzKVxuICAgICAgICAgKi9cbiAgICAgICAgdHJpZ2dlcignYWNjb3JkaW9uJywgW1xuICAgICAgICAgICAgc3RhdGUoXG4gICAgICAgICAgICAgICAgJ2NvbGxhcHNlZCcsXG4gICAgICAgICAgICAgICAgc3R5bGUoe1xuICAgICAgICAgICAgICAgICAgICBtYXhIZWlnaHQ6IDAsXG4gICAgICAgICAgICAgICAgICAgIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHN0YXRlKFxuICAgICAgICAgICAgICAgICdleHBhbmRlZCcsXG4gICAgICAgICAgICAgICAgc3R5bGUoe1xuICAgICAgICAgICAgICAgICAgICBtYXhIZWlnaHQ6ICdpbml0aWFsJyxcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHRyYW5zaXRpb24oJ2NvbGxhcHNlZCA9PiBleHBhbmRlZCcsIFtcbiAgICAgICAgICAgICAgICBhbmltYXRlKCcyNTBtcyBjdWJpYy1iZXppZXIoLjQsIDAsIC4zLCAxKScsIHN0eWxlKHsgb3ZlcmZsb3c6ICdoaWRkZW4nLCBtYXhIZWlnaHQ6ICd7e21heEhlaWdodH19JyB9KSksXG4gICAgICAgICAgICBdKSxcbiAgICAgICAgICAgIHRyYW5zaXRpb24oJ2V4cGFuZGVkID0+IGNvbGxhcHNlZCcsIFtcbiAgICAgICAgICAgICAgICBhbmltYXRlKFxuICAgICAgICAgICAgICAgICAgICAnMjUwbXMgY3ViaWMtYmV6aWVyKC40LCAwLCAuMywgMSknLFxuICAgICAgICAgICAgICAgICAgICBrZXlmcmFtZXMoW3N0eWxlKHsgbWF4SGVpZ2h0OiAne3ttYXhIZWlnaHR9fScgfSksIHN0eWxlKHsgb3ZlcmZsb3c6ICdoaWRkZW4nLCBtYXhIZWlnaHQ6IDAgfSldKVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICBdKSxcbiAgICAgICAgXSksXG4gICAgXSxcbn0pXG5leHBvcnQgY2xhc3MgTmF2U2VsZWN0b3JDYXRlZ29yeUNvbXBvbmVudCB7XG4gICAgY2F0ZWdvcnkgPSBpbnB1dC5yZXF1aXJlZDxJbnRlcm5hbE5hdlNlbGVjdG9yQ2F0ZWdvcnk+KCk7XG4gICAgYWN0aW9uQ2xpY2tlZCA9IG91dHB1dDxOYXZTZWxlY3RvckxlYWZBY3Rpb25DbGlja2VkRXZlbnQ+KCk7XG5cbiAgICBmb2xkU3ltYm9sID0gY29tcHV0ZWQoKCkgPT4gKHRoaXMuY2F0ZWdvcnkoKS5mb2xkZWQgPyAnY2hldnJvbi1kb3duJyA6ICdjaGV2cm9uLXVwJykpO1xuXG4gICAgZm9sZGVkV2l0aERlbGF5ID0gc2lnbmFsKGZhbHNlKTtcblxuICAgIGFuaW1hdGlvblN0YXRlID0gY29tcHV0ZWQoKCkgPT4gKHRoaXMuY2F0ZWdvcnkoKS5mb2xkZWQgPyAnY29sbGFwc2VkJyA6ICdleHBhbmRlZCcpKTtcblxuICAgIGFsaWFzRWwgPSB2aWV3Q2hpbGQ8RWxlbWVudFJlZj4oJ2FsaWFzJyk7XG4gICAgYWxpYXNCb3VuZGVkQ2xpZW50UmVjdCA9IHNpZ25hbDx7XG4gICAgICAgIG9mZnNldFdpZHRoOiBudW1iZXI7XG4gICAgICAgIG9mZnNldEhlaWdodDogbnVtYmVyO1xuICAgICAgICBzY3JvbGxXaWR0aDogbnVtYmVyO1xuICAgICAgICBzY3JvbGxIZWlnaHQ6IG51bWJlcjtcbiAgICB9Pih7XG4gICAgICAgIG9mZnNldFdpZHRoOiAwLFxuICAgICAgICBvZmZzZXRIZWlnaHQ6IDAsXG4gICAgICAgIHNjcm9sbFdpZHRoOiAwLFxuICAgICAgICBzY3JvbGxIZWlnaHQ6IDAsXG4gICAgfSk7XG5cbiAgICB0b29sdGlwQ29udGVudCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgY29uc3QgZWwgPSB0aGlzLmFsaWFzQm91bmRlZENsaWVudFJlY3QoKTtcbiAgICAgICAgaWYgKCF0aGlzLm5hdlNlbGVjdG9yQ2F0ZWdvcnlQcmVzZW50ZXIuZXhwYW5kZWQoKSB8fCBlbC5vZmZzZXRXaWR0aCA8IGVsLnNjcm9sbFdpZHRoIHx8IGVsLm9mZnNldEhlaWdodCA8IGVsLnNjcm9sbEhlaWdodCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2F0ZWdvcnkoKS5hbGlhcztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAnJztcbiAgICB9KTtcbiAgICB0b29sdGlwRGlzYWJsZWQgPSBjb21wdXRlZCgoKSA9PiAhdGhpcy50b29sdGlwQ29udGVudCgpLmxlbmd0aCk7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBlbDogRWxlbWVudFJlZixcbiAgICAgICAgcHVibGljIG5hdlNlbGVjdG9yQ2F0ZWdvcnlQcmVzZW50ZXI6IE5hdlNlbGVjdG9yQ2F0ZWdvcnlQcmVzZW50ZXJcbiAgICApIHtcbiAgICAgICAgYWZ0ZXJSZW5kZXIoKCkgPT5cbiAgICAgICAgICAgIHVudHJhY2tlZCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbWF4SGVpZ2h0ID0gdGhpcy5jb21wdXRlTWF4SGVpZ2h0KCk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubWF4SGVpZ2h0KCkgIT09IG1heEhlaWdodCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1heEhlaWdodC5zZXQobWF4SGVpZ2h0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVBbGlhc0JvdW5kZWRDbGllbnRSZWN0KCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuXG4gICAgICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmb2xkZWQgPSB0aGlzLmNhdGVnb3J5KCkuZm9sZGVkO1xuICAgICAgICAgICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZm9sZGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5mb2xkZWRXaXRoRGVsYXkuc2V0KHRydWUpLCAxNTApO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9sZGVkV2l0aERlbGF5LnNldChmYWxzZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG1heEhlaWdodCA9IHNpZ25hbCgnMHB4Jyk7XG5cbiAgICBwcml2YXRlIGNvbXB1dGVNYXhIZWlnaHQoKSB7XG4gICAgICAgIGxldCBtYXhIZWlnaHQgPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuY2xpZW50SGVpZ2h0O1xuICAgICAgICBpZiAodGhpcy5jYXRlZ29yeSgpLmZvbGRlZCkge1xuICAgICAgICAgICAgY29uc3QgbnVtYmVyT2ZEaXNwbGF5YWJsZUNoaWxkcmVuID0gY29tcHV0ZU51bWJlck9mRGlzcGxheWFibGVDaGlsZHJlbk9uVW5mb2xkKHRoaXMuY2F0ZWdvcnkoKSk7XG4gICAgICAgICAgICBtYXhIZWlnaHQgPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuY2xpZW50SGVpZ2h0ICogbnVtYmVyT2ZEaXNwbGF5YWJsZUNoaWxkcmVuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBgJHttYXhIZWlnaHR9cHhgO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlQWxpYXNCb3VuZGVkQ2xpZW50UmVjdCgpIHtcbiAgICAgICAgY29uc3QgZWwgPSB0aGlzLmFsaWFzRWwoKT8ubmF0aXZlRWxlbWVudDtcbiAgICAgICAgaWYgKGVsKSB7XG4gICAgICAgICAgICBjb25zdCBib3VuZGVkQ2xpZW50UmVjdCA9IHtcbiAgICAgICAgICAgICAgICBvZmZzZXRXaWR0aDogZWwub2Zmc2V0V2lkdGgsXG4gICAgICAgICAgICAgICAgb2Zmc2V0SGVpZ2h0OiBlbC5vZmZzZXRIZWlnaHQsXG4gICAgICAgICAgICAgICAgc2Nyb2xsV2lkdGg6IGVsLnNjcm9sbFdpZHRoLFxuICAgICAgICAgICAgICAgIHNjcm9sbEhlaWdodDogZWwuc2Nyb2xsSGVpZ2h0LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChKU09OLnN0cmluZ2lmeSh0aGlzLmFsaWFzQm91bmRlZENsaWVudFJlY3QoKSkgIT09IEpTT04uc3RyaW5naWZ5KGJvdW5kZWRDbGllbnRSZWN0KSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYWxpYXNCb3VuZGVkQ2xpZW50UmVjdC5zZXQoYm91bmRlZENsaWVudFJlY3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuIiwiQGlmIChuYXZTZWxlY3RvckNhdGVnb3J5UHJlc2VudGVyLmV4cGFuZGVkKCkpIHtcbiAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiY29udGVudFwiXG4gICAgICAgIGFwVG9vbHRpcFBvc2l0aW9uPVwicmlnaHRcIlxuICAgICAgICBbYXBUb29sdGlwXT1cInRvb2x0aXBDb250ZW50KClcIlxuICAgICAgICBbYXBUb29sdGlwRGlzYWJsZWRdPVwidG9vbHRpcERpc2FibGVkKClcIlxuICAgICAgICBbYXBUcmVlTm9kZUFjY2Vzc2liaWxpdHldPVwiY2F0ZWdvcnkoKVwiXG4gICAgICAgIChrZXlkb3duLnNwYWNlKT1cIm5hdlNlbGVjdG9yQ2F0ZWdvcnlQcmVzZW50ZXIudG9nZ2xlRm9sZGluZygkZXZlbnQsIHRoaXMuY2F0ZWdvcnkoKSlcIlxuICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJuYXZTZWxlY3RvckNhdGVnb3J5UHJlc2VudGVyLnRvZ2dsZUZvbGRpbmcoJGV2ZW50LCB0aGlzLmNhdGVnb3J5KCkpXCJcbiAgICAgICAgKGNsaWNrKT1cIm5hdlNlbGVjdG9yQ2F0ZWdvcnlQcmVzZW50ZXIudG9nZ2xlRm9sZGluZygkZXZlbnQsIHRoaXMuY2F0ZWdvcnkoKSlcIj5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICNhbGlhc1xuICAgICAgICAgICAgY2xhc3M9XCJjYXB0aW9uXCI+XG4gICAgICAgICAgICB7eyBjYXRlZ29yeSgpLmFsaWFzIH19XG4gICAgICAgIDwvc3Bhbj5cblxuICAgICAgICA8YXAtc3ltYm9sXG4gICAgICAgICAgICBjbGFzcz1cImZvbGRpbmctYnV0dG9uXCJcbiAgICAgICAgICAgIHNpemU9XCJzbVwiXG4gICAgICAgICAgICBbc3ltYm9sSWRdPVwiZm9sZFN5bWJvbCgpXCIgLz5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJjaGlsZHJlbi1jb250YWluZXJcIlxuICAgICAgICBbQGFjY29yZGlvbl09XCJ7XG4gICAgICAgICAgICB2YWx1ZTogYW5pbWF0aW9uU3RhdGUoKSxcbiAgICAgICAgICAgIHBhcmFtczoge1xuICAgICAgICAgICAgICAgIG1heEhlaWdodDogbWF4SGVpZ2h0KClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVwiPlxuICAgICAgICBAaWYgKCFmb2xkZWRXaXRoRGVsYXkoKSkge1xuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoaWxkcmVuXCI+XG4gICAgICAgICAgICAgICAgQGlmIChjYXRlZ29yeSgpLmNoaWxkcmVuLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBAaWYgKGNhdGVnb3J5KCkuZW1wdHlTdGF0ZVRpdGxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZW1wdHktc3RhdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBjYXRlZ29yeSgpLmVtcHR5U3RhdGVUaXRsZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgQGZvciAoY2hpbGQgb2YgY2F0ZWdvcnkoKS5jaGlsZHJlbjsgdHJhY2sgY2hpbGQudWlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKCFjaGlsZC5oaWRkZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZW50cnlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZm9sZGVyXT1cImNoaWxkLnR5cGUgPT09ICdHUk9VUCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChjaGlsZC50eXBlID09PSAnTEVBRicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcC1uYXYtc2VsZWN0b3ItbGVhZlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsZWFmXT1cImNoaWxkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYWN0aW9uQ2xpY2tlZCk9XCJhY3Rpb25DbGlja2VkLmVtaXQoJGV2ZW50KVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gQGVsc2UgaWYgKGNoaWxkLnR5cGUgPT09ICdHUk9VUCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcC1uYXYtc2VsZWN0b3ItZ3JvdXBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZ3JvdXBdPVwiY2hpbGRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhY3Rpb25DbGlja2VkKT1cImFjdGlvbkNsaWNrZWQuZW1pdCgkZXZlbnQpXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICA8L2Rpdj5cbn0gQGVsc2Uge1xuICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJjb250ZW50XCJcbiAgICAgICAgYXBUb29sdGlwUG9zaXRpb249XCJyaWdodFwiXG4gICAgICAgIFthcFRyZWVOb2RlQWNjZXNzaWJpbGl0eV09XCJjYXRlZ29yeSgpXCJcbiAgICAgICAgW2FwVG9vbHRpcF09XCJ0b29sdGlwQ29udGVudCgpXCJcbiAgICAgICAgW2FwVG9vbHRpcERpc2FibGVkXT1cInRvb2x0aXBEaXNhYmxlZCgpXCJcbiAgICAgICAgKGNsaWNrKT1cIm5hdlNlbGVjdG9yQ2F0ZWdvcnlQcmVzZW50ZXIudG9nZ2xlRm9sZGluZygkZXZlbnQsIHRoaXMuY2F0ZWdvcnkoKSlcIlxuICAgICAgICAoa2V5ZG93bi5zcGFjZSk9XCJuYXZTZWxlY3RvckNhdGVnb3J5UHJlc2VudGVyLnRvZ2dsZUZvbGRpbmcoJGV2ZW50LCB0aGlzLmNhdGVnb3J5KCkpXCJcbiAgICAgICAgKGtleWRvd24uZW50ZXIpPVwibmF2U2VsZWN0b3JDYXRlZ29yeVByZXNlbnRlci50b2dnbGVGb2xkaW5nKCRldmVudCwgdGhpcy5jYXRlZ29yeSgpKVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibmFtZS1jb250YWluZXJcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2FwdGlvblwiPnt7IGNhdGVnb3J5KCkuYWxpYXMgfX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0b2dnbGVcIj5cbiAgICAgICAgICAgIDxhcC1zeW1ib2xcbiAgICAgICAgICAgICAgICBzaXplPVwic21cIlxuICAgICAgICAgICAgICAgIFtzeW1ib2xJZF09XCJmb2xkU3ltYm9sKClcIiAvPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJjaGlsZHJlbi1jb250YWluZXJcIlxuICAgICAgICBbQGFjY29yZGlvbl09XCJ7XG4gICAgICAgICAgICB2YWx1ZTogYW5pbWF0aW9uU3RhdGUoKSxcbiAgICAgICAgICAgIHBhcmFtczoge1xuICAgICAgICAgICAgICAgIG1heEhlaWdodDogbWF4SGVpZ2h0KClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVwiPlxuICAgICAgICBAaWYgKCFmb2xkZWRXaXRoRGVsYXkoKSkge1xuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoaWxkcmVuXCI+XG4gICAgICAgICAgICAgICAgQGZvciAoY2hpbGQgb2YgY2F0ZWdvcnkoKS5jaGlsZHJlbjsgdHJhY2sgY2hpbGQudWlkKSB7XG4gICAgICAgICAgICAgICAgICAgIEBpZiAoIWNoaWxkLmhpZGRlbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZW50cnlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5mb2xkZXJdPVwiY2hpbGQudHlwZSA9PT0gJ0dST1VQJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoY2hpbGQudHlwZSA9PT0gJ0xFQUYnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcC1uYXYtc2VsZWN0b3ItbGVhZlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xlYWZdPVwiY2hpbGRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFjdGlvbkNsaWNrZWQpPVwiYWN0aW9uQ2xpY2tlZC5lbWl0KCRldmVudClcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gQGVsc2UgaWYgKGNoaWxkLnR5cGUgPT09ICdHUk9VUCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFwLW5hdi1zZWxlY3Rvci1ncm91cFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2dyb3VwXT1cImNoaWxkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhY3Rpb25DbGlja2VkKT1cImFjdGlvbkNsaWNrZWQuZW1pdCgkZXZlbnQpXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgPC9kaXY+XG59XG4iXX0=
|
|
129
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2LXNlbGVjdG9yLWNhdGVnb3J5LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvdWktY29tcG9uZW50cy9uYXYtc2VsZWN0b3Ivc3JjL25hdi1zZWxlY3Rvci1jYXRlZ29yeS9uYXYtc2VsZWN0b3ItY2F0ZWdvcnkuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vbGlicy91aS1jb21wb25lbnRzL25hdi1zZWxlY3Rvci9zcmMvbmF2LXNlbGVjdG9yLWNhdGVnb3J5L25hdi1zZWxlY3Rvci1jYXRlZ29yeS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNyRSxPQUFPLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxlQUFlLEVBQUUsV0FBVyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDakcsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDNUYsT0FBTyxFQUNILFdBQVcsRUFDWCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixNQUFNLEVBRU4sS0FBSyxFQUNMLE1BQU0sRUFDTixNQUFNLEVBQ04sU0FBUyxFQUNULFNBQVMsR0FDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUVqRyxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUMvRixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUM1RixPQUFPLEVBQUUsMENBQTBDLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRixPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQzs7O0FBNkNqRixNQUFNLE9BQU8sNEJBQTRCO0lBa0N6QjtJQUNEO0lBbENYLFFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUErQixDQUFDO0lBQ3pELGFBQWEsR0FBRyxNQUFNLEVBQXFDLENBQUM7SUFFNUQsVUFBVSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztJQUV0RixlQUFlLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRS9CLGNBQWMsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7SUFFckYsT0FBTyxHQUFHLFNBQVMsQ0FBYSxPQUFPLENBQUMsQ0FBQztJQUN6QyxzQkFBc0IsR0FBRyxNQUFNLENBSzVCO1FBQ0MsV0FBVyxFQUFFLENBQUM7UUFDZCxZQUFZLEVBQUUsQ0FBQztRQUNmLFdBQVcsRUFBRSxDQUFDO1FBQ2QsWUFBWSxFQUFFLENBQUM7S0FDbEIsQ0FBQyxDQUFDO0lBRUgsY0FBYyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7UUFDM0IsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7UUFDekMsSUFBSSxDQUFDLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQyxXQUFXLElBQUksRUFBRSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDeEgsT0FBTyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsS0FBSyxDQUFDO1FBQ2pDLENBQUM7UUFFRCxPQUFPLEVBQUUsQ0FBQztJQUNkLENBQUMsQ0FBQyxDQUFDO0lBQ0gsZUFBZSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUVoRSxZQUNZLEVBQWMsRUFDZiw0QkFBMEQ7UUFEekQsT0FBRSxHQUFGLEVBQUUsQ0FBWTtRQUNmLGlDQUE0QixHQUE1Qiw0QkFBNEIsQ0FBOEI7UUFFakUsV0FBVyxDQUFDLEdBQUcsRUFBRSxDQUNiLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDWCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUMxQyxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDakMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDbEMsQ0FBQztZQUNELElBQUksQ0FBQyw0QkFBNEIsRUFBRSxDQUFDO1FBQ3hDLENBQUMsQ0FBQyxDQUNMLENBQUM7UUFFRixNQUFNLENBQUMsR0FBRyxFQUFFO1lBQ1IsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLE1BQU0sQ0FBQztZQUN0QyxTQUFTLENBQUMsR0FBRyxFQUFFO2dCQUNYLElBQUksTUFBTSxFQUFFLENBQUM7b0JBQ1QsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUMxRCxDQUFDO3FCQUFNLENBQUM7b0JBQ0osSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3BDLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELFNBQVMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFbEIsZ0JBQWdCO1FBQ3BCLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQztRQUNuRCxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUN6QixNQUFNLDJCQUEyQixHQUFHLDBDQUEwQyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQ2hHLFNBQVMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxZQUFZLEdBQUcsMkJBQTJCLENBQUM7UUFDakYsQ0FBQztRQUNELE9BQU8sR0FBRyxTQUFTLElBQUksQ0FBQztJQUM1QixDQUFDO0lBRU8sNEJBQTRCO1FBQ2hDLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxhQUFhLENBQUM7UUFDekMsSUFBSSxFQUFFLEVBQUUsQ0FBQztZQUNMLE1BQU0saUJBQWlCLEdBQUc7Z0JBQ3RCLFdBQVcsRUFBRSxFQUFFLENBQUMsV0FBVztnQkFDM0IsWUFBWSxFQUFFLEVBQUUsQ0FBQyxZQUFZO2dCQUM3QixXQUFXLEVBQUUsRUFBRSxDQUFDLFdBQVc7Z0JBQzNCLFlBQVksRUFBRSxFQUFFLENBQUMsWUFBWTthQUNoQyxDQUFDO1lBQ0YsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDLEtBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUM7Z0JBQ3RGLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsQ0FBQztZQUN2RCxDQUFDO1FBQ0wsQ0FBQztJQUNMLENBQUM7dUdBbkZRLDRCQUE0QjsyRkFBNUIsNEJBQTRCLGdoQkFwQzFCLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFBRSxXQUFXLENBQUMsRUFBRSw0QkFBNEIsQ0FBQyw0SUM5QnRGLGk2SUFpSEEsOHVHRHBGYyx3QkFBd0IsK0dBQUUsZUFBZSxzSEFBRSx5QkFBeUIsaUhBQUUsOEJBQThCLDJHQUFFLGdCQUFnQix1UUFPcEg7WUFDUjs7ZUFFRztZQUNILE9BQU8sQ0FBQyxXQUFXLEVBQUU7Z0JBQ2pCLEtBQUssQ0FDRCxXQUFXLEVBQ1gsS0FBSyxDQUFDO29CQUNGLFNBQVMsRUFBRSxDQUFDO29CQUNaLFFBQVEsRUFBRSxRQUFRO2lCQUNyQixDQUFDLENBQ0w7Z0JBQ0QsS0FBSyxDQUNELFVBQVUsRUFDVixLQUFLLENBQUM7b0JBQ0YsU0FBUyxFQUFFLFNBQVM7aUJBQ3ZCLENBQUMsQ0FDTDtnQkFDRCxVQUFVLENBQUMsdUJBQXVCLEVBQUU7b0JBQ2hDLE9BQU8sQ0FBQyxrQ0FBa0MsRUFBRSxLQUFLLENBQUMsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsQ0FBQyxDQUFDO2lCQUN6RyxDQUFDO2dCQUNGLFVBQVUsQ0FBQyx1QkFBdUIsRUFBRTtvQkFDaEMsT0FBTyxDQUNILGtDQUFrQyxFQUNsQyxTQUFTLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FDbEc7aUJBQ0osQ0FBQzthQUNMLENBQUM7U0FDTDs7MkZBRVEsNEJBQTRCO2tCQTNDeEMsU0FBUzsrQkFDSSwwQkFBMEIsY0FHeEIsSUFBSSxtQkFDQyx1QkFBdUIsQ0FBQyxNQUFNLFdBQ3RDLENBQUMsd0JBQXdCLEVBQUUsZUFBZSxFQUFFLHlCQUF5QixFQUFFLDhCQUE4QixFQUFFLGdCQUFnQixDQUFDLGFBQ3RILENBQUMsV0FBVyxDQUFDLGFBQWEsRUFBRSxXQUFXLENBQUMsRUFBRSw0QkFBNEIsQ0FBQyxRQUM1RTt3QkFDRixrQkFBa0IsRUFBRSwwQ0FBMEM7d0JBQzlELHFCQUFxQixFQUFFLDREQUE0RDt3QkFDbkYsc0JBQXNCLEVBQUUsOERBQThEO3FCQUN6RixjQUNXO3dCQUNSOzsyQkFFRzt3QkFDSCxPQUFPLENBQUMsV0FBVyxFQUFFOzRCQUNqQixLQUFLLENBQ0QsV0FBVyxFQUNYLEtBQUssQ0FBQztnQ0FDRixTQUFTLEVBQUUsQ0FBQztnQ0FDWixRQUFRLEVBQUUsUUFBUTs2QkFDckIsQ0FBQyxDQUNMOzRCQUNELEtBQUssQ0FDRCxVQUFVLEVBQ1YsS0FBSyxDQUFDO2dDQUNGLFNBQVMsRUFBRSxTQUFTOzZCQUN2QixDQUFDLENBQ0w7NEJBQ0QsVUFBVSxDQUFDLHVCQUF1QixFQUFFO2dDQUNoQyxPQUFPLENBQUMsa0NBQWtDLEVBQUUsS0FBSyxDQUFDLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLENBQUMsQ0FBQzs2QkFDekcsQ0FBQzs0QkFDRixVQUFVLENBQUMsdUJBQXVCLEVBQUU7Z0NBQ2hDLE9BQU8sQ0FDSCxrQ0FBa0MsRUFDbEMsU0FBUyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQ2xHOzZCQUNKLENBQUM7eUJBQ0wsQ0FBQztxQkFDTCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRvb2x0aXBEaXJlY3RpdmUgfSBmcm9tICdAYWdvcmFwdWxzZS91aS1jb21wb25lbnRzL3Rvb2x0aXAnO1xuaW1wb3J0IHsgYXBDaGV2cm9uRG93biwgYXBDaGV2cm9uVXAsIFN5bWJvbENvbXBvbmVudCwgd2l0aFN5bWJvbHMgfSBmcm9tICdAYWdvcmFwdWxzZS91aS1zeW1ib2wnO1xuaW1wb3J0IHsgYW5pbWF0ZSwga2V5ZnJhbWVzLCBzdGF0ZSwgc3R5bGUsIHRyYW5zaXRpb24sIHRyaWdnZXIgfSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcbmltcG9ydCB7XG4gICAgYWZ0ZXJSZW5kZXIsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ29tcG9uZW50LFxuICAgIGNvbXB1dGVkLFxuICAgIGVmZmVjdCxcbiAgICBFbGVtZW50UmVmLFxuICAgIGlucHV0LFxuICAgIG91dHB1dCxcbiAgICBzaWduYWwsXG4gICAgdW50cmFja2VkLFxuICAgIHZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUcmVlTm9kZUFjY2Vzc2liaWxpdHlEaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL3RyZWUtbm9kZS1hY2Nlc3NpYmlsaXR5LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBJbnRlcm5hbE5hdlNlbGVjdG9yQ2F0ZWdvcnksIE5hdlNlbGVjdG9yTGVhZkFjdGlvbkNsaWNrZWRFdmVudCB9IGZyb20gJy4uL25hdi1zZWxlY3Rvcic7XG5pbXBvcnQgeyBOYXZTZWxlY3Rvckdyb3VwQ29tcG9uZW50IH0gZnJvbSAnLi4vbmF2LXNlbGVjdG9yLWdyb3VwL25hdi1zZWxlY3Rvci1ncm91cC5jb21wb25lbnQnO1xuaW1wb3J0IHsgTmF2U2VsZWN0b3JMZWFmQ29tcG9uZW50IH0gZnJvbSAnLi4vbmF2LXNlbGVjdG9yLWxlYWYvbmF2LXNlbGVjdG9yLWxlYWYuY29tcG9uZW50JztcbmltcG9ydCB7IGNvbXB1dGVOdW1iZXJPZkRpc3BsYXlhYmxlQ2hpbGRyZW5PblVuZm9sZCB9IGZyb20gJy4uL3V0aWxzL2xlYWYudXRpbHMnO1xuaW1wb3J0IHsgTmF2U2VsZWN0b3JDYXRlZ29yeVByZXNlbnRlciB9IGZyb20gJy4vbmF2LXNlbGVjdG9yLWNhdGVnb3J5LnByZXNlbnRlcic7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYXAtbmF2LXNlbGVjdG9yLWNhdGVnb3J5JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vbmF2LXNlbGVjdG9yLWNhdGVnb3J5LmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9uYXYtc2VsZWN0b3ItY2F0ZWdvcnkuY29tcG9uZW50LnNjc3MnXSxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIGltcG9ydHM6IFtOYXZTZWxlY3RvckxlYWZDb21wb25lbnQsIFN5bWJvbENvbXBvbmVudCwgTmF2U2VsZWN0b3JHcm91cENvbXBvbmVudCwgVHJlZU5vZGVBY2Nlc3NpYmlsaXR5RGlyZWN0aXZlLCBUb29sdGlwRGlyZWN0aXZlXSxcbiAgICBwcm92aWRlcnM6IFt3aXRoU3ltYm9scyhhcENoZXZyb25Eb3duLCBhcENoZXZyb25VcCksIE5hdlNlbGVjdG9yQ2F0ZWdvcnlQcmVzZW50ZXJdLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgJ1tjbGFzcy5taW5pZmllZF0nOiAnIW5hdlNlbGVjdG9yQ2F0ZWdvcnlQcmVzZW50ZXIuZXhwYW5kZWQoKScsXG4gICAgICAgICcoa2V5ZG93bi5hcnJvd0xlZnQpJzogJ25hdlNlbGVjdG9yQ2F0ZWdvcnlQcmVzZW50ZXIuZm9sZCgkZXZlbnQsIHRoaXMuY2F0ZWdvcnkoKSknLFxuICAgICAgICAnKGtleWRvd24uYXJyb3dSaWdodCknOiAnbmF2U2VsZWN0b3JDYXRlZ29yeVByZXNlbnRlci51bmZvbGQoJGV2ZW50LCB0aGlzLmNhdGVnb3J5KCkpJyxcbiAgICB9LFxuICAgIGFuaW1hdGlvbnM6IFtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIE92ZXJmbG93IGhpZGRlbiBpcyBwdXQgb25seSBkdXJpbmcgdGhlIGFuaW1hdGlvbiBhbmQgb24gdGhlIGNvbGxhcHNlZCBzdGF0ZSBiZWNhdXNlIGlmIGl0IGlzIHB1dCBvbiB0aGUgZXhwYW5kZWQgc3RhdGUgdGhlbiBjaGlsZHJlbuKAmXMgYm9yZGVyIHdpbGwgYmUgY3V0IChob3ZlciAvIGZvY3VzKVxuICAgICAgICAgKi9cbiAgICAgICAgdHJpZ2dlcignYWNjb3JkaW9uJywgW1xuICAgICAgICAgICAgc3RhdGUoXG4gICAgICAgICAgICAgICAgJ2NvbGxhcHNlZCcsXG4gICAgICAgICAgICAgICAgc3R5bGUoe1xuICAgICAgICAgICAgICAgICAgICBtYXhIZWlnaHQ6IDAsXG4gICAgICAgICAgICAgICAgICAgIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHN0YXRlKFxuICAgICAgICAgICAgICAgICdleHBhbmRlZCcsXG4gICAgICAgICAgICAgICAgc3R5bGUoe1xuICAgICAgICAgICAgICAgICAgICBtYXhIZWlnaHQ6ICdpbml0aWFsJyxcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHRyYW5zaXRpb24oJ2NvbGxhcHNlZCA9PiBleHBhbmRlZCcsIFtcbiAgICAgICAgICAgICAgICBhbmltYXRlKCcyNTBtcyBjdWJpYy1iZXppZXIoLjQsIDAsIC4zLCAxKScsIHN0eWxlKHsgb3ZlcmZsb3c6ICdoaWRkZW4nLCBtYXhIZWlnaHQ6ICd7e21heEhlaWdodH19JyB9KSksXG4gICAgICAgICAgICBdKSxcbiAgICAgICAgICAgIHRyYW5zaXRpb24oJ2V4cGFuZGVkID0+IGNvbGxhcHNlZCcsIFtcbiAgICAgICAgICAgICAgICBhbmltYXRlKFxuICAgICAgICAgICAgICAgICAgICAnMjUwbXMgY3ViaWMtYmV6aWVyKC40LCAwLCAuMywgMSknLFxuICAgICAgICAgICAgICAgICAgICBrZXlmcmFtZXMoW3N0eWxlKHsgbWF4SGVpZ2h0OiAne3ttYXhIZWlnaHR9fScgfSksIHN0eWxlKHsgb3ZlcmZsb3c6ICdoaWRkZW4nLCBtYXhIZWlnaHQ6IDAgfSldKVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICBdKSxcbiAgICAgICAgXSksXG4gICAgXSxcbn0pXG5leHBvcnQgY2xhc3MgTmF2U2VsZWN0b3JDYXRlZ29yeUNvbXBvbmVudCB7XG4gICAgY2F0ZWdvcnkgPSBpbnB1dC5yZXF1aXJlZDxJbnRlcm5hbE5hdlNlbGVjdG9yQ2F0ZWdvcnk+KCk7XG4gICAgYWN0aW9uQ2xpY2tlZCA9IG91dHB1dDxOYXZTZWxlY3RvckxlYWZBY3Rpb25DbGlja2VkRXZlbnQ+KCk7XG5cbiAgICBmb2xkU3ltYm9sID0gY29tcHV0ZWQoKCkgPT4gKHRoaXMuY2F0ZWdvcnkoKS5mb2xkZWQgPyAnY2hldnJvbi1kb3duJyA6ICdjaGV2cm9uLXVwJykpO1xuXG4gICAgZm9sZGVkV2l0aERlbGF5ID0gc2lnbmFsKHRydWUpO1xuXG4gICAgYW5pbWF0aW9uU3RhdGUgPSBjb21wdXRlZCgoKSA9PiAodGhpcy5jYXRlZ29yeSgpLmZvbGRlZCA/ICdjb2xsYXBzZWQnIDogJ2V4cGFuZGVkJykpO1xuXG4gICAgYWxpYXNFbCA9IHZpZXdDaGlsZDxFbGVtZW50UmVmPignYWxpYXMnKTtcbiAgICBhbGlhc0JvdW5kZWRDbGllbnRSZWN0ID0gc2lnbmFsPHtcbiAgICAgICAgb2Zmc2V0V2lkdGg6IG51bWJlcjtcbiAgICAgICAgb2Zmc2V0SGVpZ2h0OiBudW1iZXI7XG4gICAgICAgIHNjcm9sbFdpZHRoOiBudW1iZXI7XG4gICAgICAgIHNjcm9sbEhlaWdodDogbnVtYmVyO1xuICAgIH0+KHtcbiAgICAgICAgb2Zmc2V0V2lkdGg6IDAsXG4gICAgICAgIG9mZnNldEhlaWdodDogMCxcbiAgICAgICAgc2Nyb2xsV2lkdGg6IDAsXG4gICAgICAgIHNjcm9sbEhlaWdodDogMCxcbiAgICB9KTtcblxuICAgIHRvb2x0aXBDb250ZW50ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICBjb25zdCBlbCA9IHRoaXMuYWxpYXNCb3VuZGVkQ2xpZW50UmVjdCgpO1xuICAgICAgICBpZiAoIXRoaXMubmF2U2VsZWN0b3JDYXRlZ29yeVByZXNlbnRlci5leHBhbmRlZCgpIHx8IGVsLm9mZnNldFdpZHRoIDwgZWwuc2Nyb2xsV2lkdGggfHwgZWwub2Zmc2V0SGVpZ2h0IDwgZWwuc2Nyb2xsSGVpZ2h0KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jYXRlZ29yeSgpLmFsaWFzO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH0pO1xuICAgIHRvb2x0aXBEaXNhYmxlZCA9IGNvbXB1dGVkKCgpID0+ICF0aGlzLnRvb2x0aXBDb250ZW50KCkubGVuZ3RoKTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGVsOiBFbGVtZW50UmVmLFxuICAgICAgICBwdWJsaWMgbmF2U2VsZWN0b3JDYXRlZ29yeVByZXNlbnRlcjogTmF2U2VsZWN0b3JDYXRlZ29yeVByZXNlbnRlclxuICAgICkge1xuICAgICAgICBhZnRlclJlbmRlcigoKSA9PlxuICAgICAgICAgICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBtYXhIZWlnaHQgPSB0aGlzLmNvbXB1dGVNYXhIZWlnaHQoKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5tYXhIZWlnaHQoKSAhPT0gbWF4SGVpZ2h0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWF4SGVpZ2h0LnNldChtYXhIZWlnaHQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUFsaWFzQm91bmRlZENsaWVudFJlY3QoKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG5cbiAgICAgICAgZWZmZWN0KCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZvbGRlZCA9IHRoaXMuY2F0ZWdvcnkoKS5mb2xkZWQ7XG4gICAgICAgICAgICB1bnRyYWNrZWQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChmb2xkZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmZvbGRlZFdpdGhEZWxheS5zZXQodHJ1ZSksIDE1MCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb2xkZWRXaXRoRGVsYXkuc2V0KGZhbHNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbWF4SGVpZ2h0ID0gc2lnbmFsKCcwcHgnKTtcblxuICAgIHByaXZhdGUgY29tcHV0ZU1heEhlaWdodCgpIHtcbiAgICAgICAgbGV0IG1heEhlaWdodCA9IHRoaXMuZWwubmF0aXZlRWxlbWVudC5jbGllbnRIZWlnaHQ7XG4gICAgICAgIGlmICh0aGlzLmNhdGVnb3J5KCkuZm9sZGVkKSB7XG4gICAgICAgICAgICBjb25zdCBudW1iZXJPZkRpc3BsYXlhYmxlQ2hpbGRyZW4gPSBjb21wdXRlTnVtYmVyT2ZEaXNwbGF5YWJsZUNoaWxkcmVuT25VbmZvbGQodGhpcy5jYXRlZ29yeSgpKTtcbiAgICAgICAgICAgIG1heEhlaWdodCA9IHRoaXMuZWwubmF0aXZlRWxlbWVudC5jbGllbnRIZWlnaHQgKiBudW1iZXJPZkRpc3BsYXlhYmxlQ2hpbGRyZW47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGAke21heEhlaWdodH1weGA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVBbGlhc0JvdW5kZWRDbGllbnRSZWN0KCkge1xuICAgICAgICBjb25zdCBlbCA9IHRoaXMuYWxpYXNFbCgpPy5uYXRpdmVFbGVtZW50O1xuICAgICAgICBpZiAoZWwpIHtcbiAgICAgICAgICAgIGNvbnN0IGJvdW5kZWRDbGllbnRSZWN0ID0ge1xuICAgICAgICAgICAgICAgIG9mZnNldFdpZHRoOiBlbC5vZmZzZXRXaWR0aCxcbiAgICAgICAgICAgICAgICBvZmZzZXRIZWlnaHQ6IGVsLm9mZnNldEhlaWdodCxcbiAgICAgICAgICAgICAgICBzY3JvbGxXaWR0aDogZWwuc2Nyb2xsV2lkdGgsXG4gICAgICAgICAgICAgICAgc2Nyb2xsSGVpZ2h0OiBlbC5zY3JvbGxIZWlnaHQsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKEpTT04uc3RyaW5naWZ5KHRoaXMuYWxpYXNCb3VuZGVkQ2xpZW50UmVjdCgpKSAhPT0gSlNPTi5zdHJpbmdpZnkoYm91bmRlZENsaWVudFJlY3QpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hbGlhc0JvdW5kZWRDbGllbnRSZWN0LnNldChib3VuZGVkQ2xpZW50UmVjdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCI8IS0tIGVzbGludC1kaXNhYmxlIEBhbmd1bGFyLWVzbGludC90ZW1wbGF0ZS9pbnRlcmFjdGl2ZS1zdXBwb3J0cy1mb2N1cyAtLT5cbkBpZiAobmF2U2VsZWN0b3JDYXRlZ29yeVByZXNlbnRlci5leHBhbmRlZCgpKSB7XG4gICAgPGRpdlxuICAgICAgICBjbGFzcz1cImNvbnRlbnRcIlxuICAgICAgICBhcFRvb2x0aXBQb3NpdGlvbj1cInJpZ2h0XCJcbiAgICAgICAgW2FwVG9vbHRpcF09XCJ0b29sdGlwQ29udGVudCgpXCJcbiAgICAgICAgW2FwVG9vbHRpcERpc2FibGVkXT1cInRvb2x0aXBEaXNhYmxlZCgpXCJcbiAgICAgICAgW2FwVHJlZU5vZGVBY2Nlc3NpYmlsaXR5XT1cImNhdGVnb3J5KClcIlxuICAgICAgICAoa2V5ZG93bi5zcGFjZSk9XCJuYXZTZWxlY3RvckNhdGVnb3J5UHJlc2VudGVyLnRvZ2dsZUZvbGRpbmcoJGV2ZW50LCB0aGlzLmNhdGVnb3J5KCkpXCJcbiAgICAgICAgKGtleWRvd24uZW50ZXIpPVwibmF2U2VsZWN0b3JDYXRlZ29yeVByZXNlbnRlci50b2dnbGVGb2xkaW5nKCRldmVudCwgdGhpcy5jYXRlZ29yeSgpKVwiXG4gICAgICAgIChjbGljayk9XCJuYXZTZWxlY3RvckNhdGVnb3J5UHJlc2VudGVyLnRvZ2dsZUZvbGRpbmcoJGV2ZW50LCB0aGlzLmNhdGVnb3J5KCkpXCI+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgICAjYWxpYXNcbiAgICAgICAgICAgIGNsYXNzPVwiY2FwdGlvblwiPlxuICAgICAgICAgICAge3sgY2F0ZWdvcnkoKS5hbGlhcyB9fVxuICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgPGFwLXN5bWJvbFxuICAgICAgICAgICAgY2xhc3M9XCJmb2xkaW5nLWJ1dHRvblwiXG4gICAgICAgICAgICBzaXplPVwic21cIlxuICAgICAgICAgICAgW3N5bWJvbElkXT1cImZvbGRTeW1ib2woKVwiIC8+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiY2hpbGRyZW4tY29udGFpbmVyXCJcbiAgICAgICAgW0BhY2NvcmRpb25dPVwie1xuICAgICAgICAgICAgdmFsdWU6IGFuaW1hdGlvblN0YXRlKCksXG4gICAgICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICAgICAgICBtYXhIZWlnaHQ6IG1heEhlaWdodCgpLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfVwiPlxuICAgICAgICBAaWYgKCFmb2xkZWRXaXRoRGVsYXkoKSkge1xuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoaWxkcmVuXCI+XG4gICAgICAgICAgICAgICAgQGlmIChjYXRlZ29yeSgpLmNoaWxkcmVuLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBAaWYgKGNhdGVnb3J5KCkuZW1wdHlTdGF0ZVRpdGxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZW1wdHktc3RhdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBjYXRlZ29yeSgpLmVtcHR5U3RhdGVUaXRsZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgQGZvciAoY2hpbGQgb2YgY2F0ZWdvcnkoKS5jaGlsZHJlbjsgdHJhY2sgY2hpbGQudWlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKCFjaGlsZC5oaWRkZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZW50cnlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZm9sZGVyXT1cImNoaWxkLnR5cGUgPT09ICdHUk9VUCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChjaGlsZC50eXBlID09PSAnTEVBRicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcC1uYXYtc2VsZWN0b3ItbGVhZlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsZWFmXT1cImNoaWxkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYWN0aW9uQ2xpY2tlZCk9XCJhY3Rpb25DbGlja2VkLmVtaXQoJGV2ZW50KVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gQGVsc2UgaWYgKGNoaWxkLnR5cGUgPT09ICdHUk9VUCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcC1uYXYtc2VsZWN0b3ItZ3JvdXBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZ3JvdXBdPVwiY2hpbGRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhY3Rpb25DbGlja2VkKT1cImFjdGlvbkNsaWNrZWQuZW1pdCgkZXZlbnQpXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICA8L2Rpdj5cbn0gQGVsc2Uge1xuICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJjb250ZW50XCJcbiAgICAgICAgYXBUb29sdGlwUG9zaXRpb249XCJyaWdodFwiXG4gICAgICAgIFthcFRyZWVOb2RlQWNjZXNzaWJpbGl0eV09XCJjYXRlZ29yeSgpXCJcbiAgICAgICAgW2FwVG9vbHRpcF09XCJ0b29sdGlwQ29udGVudCgpXCJcbiAgICAgICAgW2FwVG9vbHRpcERpc2FibGVkXT1cInRvb2x0aXBEaXNhYmxlZCgpXCJcbiAgICAgICAgKGNsaWNrKT1cIm5hdlNlbGVjdG9yQ2F0ZWdvcnlQcmVzZW50ZXIudG9nZ2xlRm9sZGluZygkZXZlbnQsIHRoaXMuY2F0ZWdvcnkoKSlcIlxuICAgICAgICAoa2V5ZG93bi5zcGFjZSk9XCJuYXZTZWxlY3RvckNhdGVnb3J5UHJlc2VudGVyLnRvZ2dsZUZvbGRpbmcoJGV2ZW50LCB0aGlzLmNhdGVnb3J5KCkpXCJcbiAgICAgICAgKGtleWRvd24uZW50ZXIpPVwibmF2U2VsZWN0b3JDYXRlZ29yeVByZXNlbnRlci50b2dnbGVGb2xkaW5nKCRldmVudCwgdGhpcy5jYXRlZ29yeSgpKVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibmFtZS1jb250YWluZXJcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2FwdGlvblwiPnt7IGNhdGVnb3J5KCkuYWxpYXMgfX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0b2dnbGVcIj5cbiAgICAgICAgICAgIDxhcC1zeW1ib2xcbiAgICAgICAgICAgICAgICBzaXplPVwic21cIlxuICAgICAgICAgICAgICAgIFtzeW1ib2xJZF09XCJmb2xkU3ltYm9sKClcIiAvPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJjaGlsZHJlbi1jb250YWluZXJcIlxuICAgICAgICBbQGFjY29yZGlvbl09XCJ7XG4gICAgICAgICAgICB2YWx1ZTogYW5pbWF0aW9uU3RhdGUoKSxcbiAgICAgICAgICAgIHBhcmFtczoge1xuICAgICAgICAgICAgICAgIG1heEhlaWdodDogbWF4SGVpZ2h0KCksXG4gICAgICAgICAgICB9LFxuICAgICAgICB9XCI+XG4gICAgICAgIEBpZiAoIWZvbGRlZFdpdGhEZWxheSgpKSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hpbGRyZW5cIj5cbiAgICAgICAgICAgICAgICBAZm9yIChjaGlsZCBvZiBjYXRlZ29yeSgpLmNoaWxkcmVuOyB0cmFjayBjaGlsZC51aWQpIHtcbiAgICAgICAgICAgICAgICAgICAgQGlmICghY2hpbGQuaGlkZGVuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJlbnRyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmZvbGRlcl09XCJjaGlsZC50eXBlID09PSAnR1JPVVAnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChjaGlsZC50eXBlID09PSAnTEVBRicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFwLW5hdi1zZWxlY3Rvci1sZWFmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGVhZl09XCJjaGlsZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYWN0aW9uQ2xpY2tlZCk9XCJhY3Rpb25DbGlja2VkLmVtaXQoJGV2ZW50KVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSBpZiAoY2hpbGQudHlwZSA9PT0gJ0dST1VQJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXAtbmF2LXNlbGVjdG9yLWdyb3VwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZ3JvdXBdPVwiY2hpbGRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFjdGlvbkNsaWNrZWQpPVwiYWN0aW9uQ2xpY2tlZC5lbWl0KCRldmVudClcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICA8L2Rpdj5cbn1cbiJdfQ==
|
|
@@ -36,7 +36,7 @@ export class NavSelectorGroupComponent {
|
|
|
36
36
|
return content.join('<br>');
|
|
37
37
|
});
|
|
38
38
|
tooltipDisabled = computed(() => !this.tooltipContent().length);
|
|
39
|
-
foldedWithDelay = signal(
|
|
39
|
+
foldedWithDelay = signal(true);
|
|
40
40
|
animationState = computed(() => (this.group().folded ? 'collapsed' : 'expanded'));
|
|
41
41
|
constructor(el, navSelectorGroupPresenter) {
|
|
42
42
|
this.el = el;
|
|
@@ -115,7 +115,7 @@ export class NavSelectorGroupComponent {
|
|
|
115
115
|
}
|
|
116
116
|
}
|
|
117
117
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: NavSelectorGroupComponent, deps: [{ token: i0.ElementRef }, { token: i1.NavSelectorGroupPresenter }], target: i0.ɵɵFactoryTarget.Component });
|
|
118
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.9", type: NavSelectorGroupComponent, isStandalone: true, selector: "ap-nav-selector-group", inputs: { group: { classPropertyName: "group", publicName: "group", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { actionClicked: "actionClicked" }, host: { listeners: { "keydown.arrowLeft": "fold($event)", "keydown.arrowRight": "unfold($event)" }, properties: { "class.minified": "!navSelectorGroupPresenter.expanded()" } }, providers: [withSymbols(apFolder, apErrorFill, apChevronDown, apChevronUp), NavSelectorGroupPresenter], viewQueries: [{ propertyName: "aliasEl", first: true, predicate: ["alias"], descendants: true, isSignal: true }], ngImport: i0, template: "@if (navSelectorGroupPresenter.expanded()) {\n <div\n class=\"content\"\n apTooltipPosition=\"right\"\n [apTooltip]=\"tooltipContent()\"\n [apTooltipDisabled]=\"tooltipDisabled()\"\n [apTreeNodeAccessibility]=\"group()\"\n (keydown.space)=\"onKeydownSpaceOrEnter($event)\"\n (keydown.enter)=\"onKeydownSpaceOrEnter($event)\"\n (click)=\"toggleFolding($event)\">\n @if (navSelectorGroupPresenter.isMultipleModeEnabled()) {\n <ap-checkbox\n [name]=\"group().uid\"\n [checked]=\"group().selected\"\n [disabled]=\"!group().selectable\"\n [indeterminate]=\"group().undeterminedSelection\"\n (click)=\"eventStopper($event)\"\n (change)=\"onGroupSelected()\" />\n }\n\n <ap-symbol\n symbolId=\"folder\"\n size=\"sm\" />\n\n <span\n #alias\n class=\"caption\">\n {{ group().alias }}\n </span>\n\n @if (group().displayTokenInvalid) {\n <ap-symbol\n symbolId=\"error_fill\"\n size=\"sm\" />\n }\n\n @if (group().displayCounter) {\n <ap-counter\n color=\"orange\"\n size=\"normal\"\n [background]=\"false\">\n {{ group().counter }}\n </ap-counter>\n }\n\n <ap-symbol\n size=\"sm\"\n class=\"folding-button\"\n [symbolId]=\"foldSymbol()\" />\n </div>\n\n <div\n class=\"children-container\"\n [@accordion]=\"{\n value: animationState(),\n params: {\n maxHeight: maxHeight()\n }\n }\">\n @if (!foldedWithDelay()) {\n <div class=\"children\">\n @for (child of group().children; track child.uid) {\n @if (!child.hidden) {\n <ap-nav-selector-leaf\n [leaf]=\"child\"\n (actionClicked)=\"actionClicked.emit($event)\" />\n }\n }\n </div>\n }\n </div>\n} @else {\n <div\n class=\"content\"\n apTooltipPosition=\"right\"\n [class.token-invalid]=\"group().displayTokenInvalid\"\n [class.multiple-mode]=\"navSelectorGroupPresenter.isMultipleModeEnabled()\"\n [apTooltip]=\"tooltipContent()\"\n [apTooltipDisabled]=\"tooltipDisabled()\"\n [apTreeNodeAccessibility]=\"group()\"\n (click)=\"toggleFolding($event)\"\n (keydown.space)=\"onKeydownSpaceOrEnter($event)\"\n (keydown.enter)=\"onKeydownSpaceOrEnter($event)\">\n @if (navSelectorGroupPresenter.isMultipleModeEnabled()) {\n <ap-checkbox\n [name]=\"group().uid\"\n [checked]=\"group().selected\"\n [disabled]=\"!group().selectable\"\n [indeterminate]=\"group().undeterminedSelection\"\n (click)=\"eventStopper($event)\"\n (change)=\"onGroupSelected()\" />\n }\n\n <div class=\"picture-url-sample-container\">\n <div class=\"picture-url-sample\">\n <div class=\"avatars\">\n @for (pictureUrlSample of group().childrenPictureUrlSample; track pictureUrlSample) {\n <ap-avatar\n class=\"avatar-sample\"\n [size]=\"24\"\n [profilePicture]=\"pictureUrlSample.url ?? undefined\"\n [showInitials]=\"pictureUrlSample.initial\" />\n }\n </div>\n\n <div class=\"status\">\n @if (group().displayCounter) {\n <ap-counter\n class=\"counter-override\"\n color=\"orange\"\n size=\"normal\"\n [notif]=\"true\"\n [background]=\"true\">\n {{ group().counter }}\n </ap-counter>\n }\n </div>\n </div>\n\n <div class=\"toggle\">\n <ap-symbol\n size=\"sm\"\n [symbolId]=\"foldSymbol()\" />\n </div>\n </div>\n </div>\n\n <div\n class=\"children-container\"\n [@accordion]=\"{\n value: animationState(),\n params: {\n maxHeight: maxHeight()\n }\n }\">\n @if (!foldedWithDelay()) {\n <div class=\"children\">\n @for (child of group().children; track child.uid) {\n @if (!child.hidden) {\n <ap-nav-selector-leaf\n [leaf]=\"child\"\n (actionClicked)=\"actionClicked.emit($event)\" />\n }\n }\n </div>\n }\n </div>\n}\n", styles: [":host{display:flex;align-items:center;flex-shrink:0;align-self:stretch;flex-direction:column}:host .children-container{align-self:stretch}:host .content{padding:0 var(--ref-spacing-xxs);display:flex;height:36px;align-items:center;gap:var(--ref-spacing-xxs);flex-shrink:0;flex-grow:1;align-self:stretch;cursor:pointer}:host .content ::ng-deep ap-checkbox .checkbox .checkbox-container{padding:0}:host .content:hover{border-radius:var(--ref-border-radius-sm);background:var(--ref-color-electric-blue-10)}:host .content:active{border-radius:var(--ref-border-radius-sm);background:var(--ref-color-electric-blue-20)}:host .content:focus-visible{outline:none;border-radius:var(--ref-border-radius-sm);background:var(--ref-color-electric-blue-10);box-shadow:0 0 0 1px var(--ref-color-white),0 0 0 3px var(--ref-color-electric-blue-100)}:host ap-symbol[symbol-id=error_fill]{color:var(--ref-color-red-100)}:host ap-symbol[symbol-id=folder]{color:var(--ref-color-grey-100)}:host ap-symbol[symbol-id=chevron-down],:host ap-symbol[symbol-id=chevron-up]{color:var(--ref-color-grey-80)}:host .folding-button{display:flex;width:16px;height:16px;justify-content:center;align-items:center;flex-shrink:0}:host .caption{-webkit-box-orient:vertical;-webkit-line-clamp:1;flex:1 0 0;overflow:hidden;white-space:nowrap;color:var(--ref-color-grey-100);text-overflow:ellipsis;font-family:Averta;font-size:var(--ref-font-size-xs);font-style:normal;font-weight:var(--ref-font-weight-bold);line-height:var(--ref-font-line-height-xs)}:host .children{display:flex;flex-direction:column;align-items:flex-start;flex:1 0 0;align-self:stretch}:host .picture-url-sample-container{position:relative;width:26px}:host .picture-url-sample{display:flex;width:26px;align-items:center;align-content:center}:host .avatars{display:flex;width:24px;height:24px;transform:scale(.5);gap:var(--ref-spacing-xxxs);align-content:center;justify-content:center}:host .avatars:has(:nth-child(3)){display:grid;grid-template-columns:1fr 1fr}:host.minified .content{gap:var(--ref-spacing-xxxs);padding:var(--ref-spacing-xxxs);position:relative}:host.minified .content:not(.multiple-mode){justify-content:center}:host.minified .content .toggle{display:none}:host.minified .content .counter-override{background-color:var(--ref-color-orange-150)}:host.minified .content:hover .toggle,:host.minified .content:focus-visible .toggle{width:26px;display:flex;justify-content:center;align-items:center}:host.minified .content:hover .picture-url-sample,:host.minified .content:focus-visible .picture-url-sample{display:none}:host.minified ::ng-deep ap-checkbox .checkbox .checkbox-container{padding:0}:host.minified .status{position:absolute;right:-12px;top:-2px;background-color:var(--ref-color-white);border-radius:100%}\n"], dependencies: [{ kind: "component", type: SymbolComponent, selector: "ap-symbol", inputs: ["symbolId", "color", "size"], outputs: ["sizeChange"] }, { kind: "component", type: CounterComponent, selector: "ap-counter", inputs: ["color", "size", "notif", "background", "role"] }, { kind: "component", type: NavSelectorLeafComponent, selector: "ap-nav-selector-leaf", inputs: ["leaf"], outputs: ["actionClicked"] }, { kind: "component", type: CheckboxComponent, selector: "ap-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "disabled", "indeterminate", "checked", "required", "name"], outputs: ["change"] }, { kind: "component", type: AvatarComponent, selector: "ap-avatar", inputs: ["profilePicture", "alt", "network", "size", "username", "showInitials", "bigNetwork", "anonymous", "online", "youtubeAvatarMode", "rounded"] }, { kind: "directive", type: TooltipDirective, selector: "[apTooltip]", inputs: ["apTooltip", "apTooltipPosition", "apTooltipShowDelay", "apTooltipHideDelay", "apTooltipDuration", "apTooltipDisabled", "apTooltipTruncatedTextOnly", "apTooltipTemplateContext", "apTooltipVirtualScrollElement"] }, { kind: "directive", type: TreeNodeAccessibilityDirective, selector: "[apTreeNodeAccessibility]", inputs: ["apTreeNodeAccessibility"] }], animations: [
|
|
118
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.9", type: NavSelectorGroupComponent, isStandalone: true, selector: "ap-nav-selector-group", inputs: { group: { classPropertyName: "group", publicName: "group", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { actionClicked: "actionClicked" }, host: { listeners: { "keydown.arrowLeft": "fold($event)", "keydown.arrowRight": "unfold($event)" }, properties: { "class.minified": "!navSelectorGroupPresenter.expanded()" } }, providers: [withSymbols(apFolder, apErrorFill, apChevronDown, apChevronUp), NavSelectorGroupPresenter], viewQueries: [{ propertyName: "aliasEl", first: true, predicate: ["alias"], descendants: true, isSignal: true }], ngImport: i0, template: "<!-- eslint-disable @angular-eslint/template/interactive-supports-focus -->\n@if (navSelectorGroupPresenter.expanded()) {\n <div\n class=\"content\"\n apTooltipPosition=\"right\"\n [apTooltip]=\"tooltipContent()\"\n [apTooltipDisabled]=\"tooltipDisabled()\"\n [apTreeNodeAccessibility]=\"group()\"\n (keydown.space)=\"onKeydownSpaceOrEnter($event)\"\n (keydown.enter)=\"onKeydownSpaceOrEnter($event)\"\n (click)=\"toggleFolding($event)\">\n @if (navSelectorGroupPresenter.isMultipleModeEnabled()) {\n <ap-checkbox\n [name]=\"group().uid\"\n [checked]=\"group().selected\"\n [disabled]=\"!group().selectable\"\n [indeterminate]=\"group().undeterminedSelection\"\n (click)=\"eventStopper($event)\"\n (change)=\"onGroupSelected()\" />\n }\n\n <ap-symbol\n symbolId=\"folder\"\n size=\"sm\" />\n\n <span\n #alias\n class=\"caption\">\n {{ group().alias }}\n </span>\n\n @if (group().displayTokenInvalid) {\n <ap-symbol\n symbolId=\"error_fill\"\n size=\"sm\" />\n }\n\n @if (group().displayCounter) {\n <ap-counter\n color=\"orange\"\n size=\"normal\"\n [background]=\"false\">\n {{ group().counter }}\n </ap-counter>\n }\n\n <ap-symbol\n size=\"sm\"\n class=\"folding-button\"\n [symbolId]=\"foldSymbol()\" />\n </div>\n\n <div\n class=\"children-container\"\n [@accordion]=\"{\n value: animationState(),\n params: {\n maxHeight: maxHeight(),\n },\n }\">\n @if (!foldedWithDelay()) {\n <div class=\"children\">\n @for (child of group().children; track child.uid) {\n @if (!child.hidden) {\n <ap-nav-selector-leaf\n [leaf]=\"child\"\n (actionClicked)=\"actionClicked.emit($event)\" />\n }\n }\n </div>\n }\n </div>\n} @else {\n <div\n class=\"content\"\n apTooltipPosition=\"right\"\n [class.token-invalid]=\"group().displayTokenInvalid\"\n [class.multiple-mode]=\"navSelectorGroupPresenter.isMultipleModeEnabled()\"\n [apTooltip]=\"tooltipContent()\"\n [apTooltipDisabled]=\"tooltipDisabled()\"\n [apTreeNodeAccessibility]=\"group()\"\n (click)=\"toggleFolding($event)\"\n (keydown.space)=\"onKeydownSpaceOrEnter($event)\"\n (keydown.enter)=\"onKeydownSpaceOrEnter($event)\">\n @if (navSelectorGroupPresenter.isMultipleModeEnabled()) {\n <ap-checkbox\n [name]=\"group().uid\"\n [checked]=\"group().selected\"\n [disabled]=\"!group().selectable\"\n [indeterminate]=\"group().undeterminedSelection\"\n (click)=\"eventStopper($event)\"\n (change)=\"onGroupSelected()\" />\n }\n\n <div class=\"picture-url-sample-container\">\n <div class=\"picture-url-sample\">\n <div class=\"avatars\">\n @for (pictureUrlSample of group().childrenPictureUrlSample; track pictureUrlSample) {\n <ap-avatar\n class=\"avatar-sample\"\n [size]=\"24\"\n [profilePicture]=\"pictureUrlSample.url ?? undefined\"\n [showInitials]=\"pictureUrlSample.initial\" />\n }\n </div>\n\n <div class=\"status\">\n @if (group().displayCounter) {\n <ap-counter\n class=\"counter-override\"\n color=\"orange\"\n size=\"normal\"\n [notif]=\"true\"\n [background]=\"true\">\n {{ group().counter }}\n </ap-counter>\n }\n </div>\n </div>\n\n <div class=\"toggle\">\n <ap-symbol\n size=\"sm\"\n [symbolId]=\"foldSymbol()\" />\n </div>\n </div>\n </div>\n\n <div\n class=\"children-container\"\n [@accordion]=\"{\n value: animationState(),\n params: {\n maxHeight: maxHeight(),\n },\n }\">\n @if (!foldedWithDelay()) {\n <div class=\"children\">\n @for (child of group().children; track child.uid) {\n @if (!child.hidden) {\n <ap-nav-selector-leaf\n [leaf]=\"child\"\n (actionClicked)=\"actionClicked.emit($event)\" />\n }\n }\n </div>\n }\n </div>\n}\n", styles: [":host{display:flex;align-items:center;flex-shrink:0;align-self:stretch;flex-direction:column}:host .children-container{align-self:stretch}:host .content{padding:0 var(--ref-spacing-xxs);display:flex;height:36px;align-items:center;gap:var(--ref-spacing-xxs);flex-shrink:0;flex-grow:1;align-self:stretch;cursor:pointer}:host .content ::ng-deep ap-checkbox .checkbox .checkbox-container{padding:0}:host .content:hover{border-radius:var(--ref-border-radius-sm);background:var(--ref-color-electric-blue-10)}:host .content:active{border-radius:var(--ref-border-radius-sm);background:var(--ref-color-electric-blue-20)}:host .content:focus-visible{outline:none;border-radius:var(--ref-border-radius-sm);background:var(--ref-color-electric-blue-10);box-shadow:0 0 0 1px var(--ref-color-white),0 0 0 3px var(--ref-color-electric-blue-100)}:host ap-symbol[symbol-id=error_fill]{color:var(--ref-color-red-100)}:host ap-symbol[symbol-id=folder]{color:var(--ref-color-grey-100)}:host ap-symbol[symbol-id=chevron-down],:host ap-symbol[symbol-id=chevron-up]{color:var(--ref-color-grey-80)}:host .folding-button{display:flex;width:16px;height:16px;justify-content:center;align-items:center;flex-shrink:0}:host .caption{-webkit-box-orient:vertical;-webkit-line-clamp:1;flex:1 0 0;overflow:hidden;white-space:nowrap;color:var(--ref-color-grey-100);text-overflow:ellipsis;font-family:Averta;font-size:var(--ref-font-size-xs);font-style:normal;font-weight:var(--ref-font-weight-bold);line-height:var(--ref-font-line-height-xs)}:host .children{display:flex;flex-direction:column;align-items:flex-start;flex:1 0 0;align-self:stretch}:host .picture-url-sample-container{position:relative;width:26px}:host .picture-url-sample{display:flex;width:26px;align-items:center;align-content:center}:host .avatars{display:flex;width:24px;height:24px;transform:scale(.5);gap:var(--ref-spacing-xxxs);align-content:center;justify-content:center}:host .avatars:has(:nth-child(3)){display:grid;grid-template-columns:1fr 1fr}:host.minified .content{gap:var(--ref-spacing-xxxs);padding:var(--ref-spacing-xxxs);position:relative}:host.minified .content:not(.multiple-mode){justify-content:center}:host.minified .content .toggle{display:none}:host.minified .content .counter-override{background-color:var(--ref-color-orange-150)}:host.minified .content:hover .toggle,:host.minified .content:focus-visible .toggle{width:26px;display:flex;justify-content:center;align-items:center}:host.minified .content:hover .picture-url-sample,:host.minified .content:focus-visible .picture-url-sample{display:none}:host.minified ::ng-deep ap-checkbox .checkbox .checkbox-container{padding:0}:host.minified .status{position:absolute;right:-12px;top:-2px;background-color:var(--ref-color-white);border-radius:100%}\n"], dependencies: [{ kind: "component", type: SymbolComponent, selector: "ap-symbol", inputs: ["symbolId", "color", "size"], outputs: ["sizeChange"] }, { kind: "component", type: CounterComponent, selector: "ap-counter", inputs: ["color", "size", "notif", "background", "role"] }, { kind: "component", type: NavSelectorLeafComponent, selector: "ap-nav-selector-leaf", inputs: ["leaf"], outputs: ["actionClicked"] }, { kind: "component", type: CheckboxComponent, selector: "ap-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "disabled", "indeterminate", "checked", "required", "name"], outputs: ["change"] }, { kind: "component", type: AvatarComponent, selector: "ap-avatar", inputs: ["profilePicture", "alt", "network", "size", "username", "showInitials", "bigNetwork", "anonymous", "online", "youtubeAvatarMode", "rounded"] }, { kind: "directive", type: TooltipDirective, selector: "[apTooltip]", inputs: ["apTooltip", "apTooltipPosition", "apTooltipShowDelay", "apTooltipHideDelay", "apTooltipDuration", "apTooltipDisabled", "apTooltipTruncatedTextOnly", "apTooltipTemplateContext", "apTooltipVirtualScrollElement"] }, { kind: "directive", type: TreeNodeAccessibilityDirective, selector: "[apTreeNodeAccessibility]", inputs: ["apTreeNodeAccessibility"] }], animations: [
|
|
119
119
|
/**
|
|
120
120
|
* Overflow hidden is put only during the animation and on the collapsed state because if it is put on the expanded state then children’s border will be cut (hover / focus)
|
|
121
121
|
*/
|
|
@@ -169,6 +169,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
|
|
|
169
169
|
animate('250ms cubic-bezier(.4, 0, .3, 1)', keyframes([style({ maxHeight: '{{maxHeight}}', overflow: 'hidden' }), style({ maxHeight: 0, overflow: 'hidden' })])),
|
|
170
170
|
]),
|
|
171
171
|
]),
|
|
172
|
-
], template: "@if (navSelectorGroupPresenter.expanded()) {\n <div\n class=\"content\"\n apTooltipPosition=\"right\"\n [apTooltip]=\"tooltipContent()\"\n [apTooltipDisabled]=\"tooltipDisabled()\"\n [apTreeNodeAccessibility]=\"group()\"\n (keydown.space)=\"onKeydownSpaceOrEnter($event)\"\n (keydown.enter)=\"onKeydownSpaceOrEnter($event)\"\n (click)=\"toggleFolding($event)\">\n @if (navSelectorGroupPresenter.isMultipleModeEnabled()) {\n <ap-checkbox\n [name]=\"group().uid\"\n [checked]=\"group().selected\"\n [disabled]=\"!group().selectable\"\n [indeterminate]=\"group().undeterminedSelection\"\n (click)=\"eventStopper($event)\"\n (change)=\"onGroupSelected()\" />\n }\n\n <ap-symbol\n symbolId=\"folder\"\n size=\"sm\" />\n\n <span\n #alias\n class=\"caption\">\n {{ group().alias }}\n </span>\n\n @if (group().displayTokenInvalid) {\n <ap-symbol\n symbolId=\"error_fill\"\n size=\"sm\" />\n }\n\n @if (group().displayCounter) {\n <ap-counter\n color=\"orange\"\n size=\"normal\"\n [background]=\"false\">\n {{ group().counter }}\n </ap-counter>\n }\n\n <ap-symbol\n size=\"sm\"\n class=\"folding-button\"\n [symbolId]=\"foldSymbol()\" />\n </div>\n\n <div\n class=\"children-container\"\n [@accordion]=\"{\n value: animationState(),\n params: {\n maxHeight: maxHeight()
|
|
172
|
+
], template: "<!-- eslint-disable @angular-eslint/template/interactive-supports-focus -->\n@if (navSelectorGroupPresenter.expanded()) {\n <div\n class=\"content\"\n apTooltipPosition=\"right\"\n [apTooltip]=\"tooltipContent()\"\n [apTooltipDisabled]=\"tooltipDisabled()\"\n [apTreeNodeAccessibility]=\"group()\"\n (keydown.space)=\"onKeydownSpaceOrEnter($event)\"\n (keydown.enter)=\"onKeydownSpaceOrEnter($event)\"\n (click)=\"toggleFolding($event)\">\n @if (navSelectorGroupPresenter.isMultipleModeEnabled()) {\n <ap-checkbox\n [name]=\"group().uid\"\n [checked]=\"group().selected\"\n [disabled]=\"!group().selectable\"\n [indeterminate]=\"group().undeterminedSelection\"\n (click)=\"eventStopper($event)\"\n (change)=\"onGroupSelected()\" />\n }\n\n <ap-symbol\n symbolId=\"folder\"\n size=\"sm\" />\n\n <span\n #alias\n class=\"caption\">\n {{ group().alias }}\n </span>\n\n @if (group().displayTokenInvalid) {\n <ap-symbol\n symbolId=\"error_fill\"\n size=\"sm\" />\n }\n\n @if (group().displayCounter) {\n <ap-counter\n color=\"orange\"\n size=\"normal\"\n [background]=\"false\">\n {{ group().counter }}\n </ap-counter>\n }\n\n <ap-symbol\n size=\"sm\"\n class=\"folding-button\"\n [symbolId]=\"foldSymbol()\" />\n </div>\n\n <div\n class=\"children-container\"\n [@accordion]=\"{\n value: animationState(),\n params: {\n maxHeight: maxHeight(),\n },\n }\">\n @if (!foldedWithDelay()) {\n <div class=\"children\">\n @for (child of group().children; track child.uid) {\n @if (!child.hidden) {\n <ap-nav-selector-leaf\n [leaf]=\"child\"\n (actionClicked)=\"actionClicked.emit($event)\" />\n }\n }\n </div>\n }\n </div>\n} @else {\n <div\n class=\"content\"\n apTooltipPosition=\"right\"\n [class.token-invalid]=\"group().displayTokenInvalid\"\n [class.multiple-mode]=\"navSelectorGroupPresenter.isMultipleModeEnabled()\"\n [apTooltip]=\"tooltipContent()\"\n [apTooltipDisabled]=\"tooltipDisabled()\"\n [apTreeNodeAccessibility]=\"group()\"\n (click)=\"toggleFolding($event)\"\n (keydown.space)=\"onKeydownSpaceOrEnter($event)\"\n (keydown.enter)=\"onKeydownSpaceOrEnter($event)\">\n @if (navSelectorGroupPresenter.isMultipleModeEnabled()) {\n <ap-checkbox\n [name]=\"group().uid\"\n [checked]=\"group().selected\"\n [disabled]=\"!group().selectable\"\n [indeterminate]=\"group().undeterminedSelection\"\n (click)=\"eventStopper($event)\"\n (change)=\"onGroupSelected()\" />\n }\n\n <div class=\"picture-url-sample-container\">\n <div class=\"picture-url-sample\">\n <div class=\"avatars\">\n @for (pictureUrlSample of group().childrenPictureUrlSample; track pictureUrlSample) {\n <ap-avatar\n class=\"avatar-sample\"\n [size]=\"24\"\n [profilePicture]=\"pictureUrlSample.url ?? undefined\"\n [showInitials]=\"pictureUrlSample.initial\" />\n }\n </div>\n\n <div class=\"status\">\n @if (group().displayCounter) {\n <ap-counter\n class=\"counter-override\"\n color=\"orange\"\n size=\"normal\"\n [notif]=\"true\"\n [background]=\"true\">\n {{ group().counter }}\n </ap-counter>\n }\n </div>\n </div>\n\n <div class=\"toggle\">\n <ap-symbol\n size=\"sm\"\n [symbolId]=\"foldSymbol()\" />\n </div>\n </div>\n </div>\n\n <div\n class=\"children-container\"\n [@accordion]=\"{\n value: animationState(),\n params: {\n maxHeight: maxHeight(),\n },\n }\">\n @if (!foldedWithDelay()) {\n <div class=\"children\">\n @for (child of group().children; track child.uid) {\n @if (!child.hidden) {\n <ap-nav-selector-leaf\n [leaf]=\"child\"\n (actionClicked)=\"actionClicked.emit($event)\" />\n }\n }\n </div>\n }\n </div>\n}\n", styles: [":host{display:flex;align-items:center;flex-shrink:0;align-self:stretch;flex-direction:column}:host .children-container{align-self:stretch}:host .content{padding:0 var(--ref-spacing-xxs);display:flex;height:36px;align-items:center;gap:var(--ref-spacing-xxs);flex-shrink:0;flex-grow:1;align-self:stretch;cursor:pointer}:host .content ::ng-deep ap-checkbox .checkbox .checkbox-container{padding:0}:host .content:hover{border-radius:var(--ref-border-radius-sm);background:var(--ref-color-electric-blue-10)}:host .content:active{border-radius:var(--ref-border-radius-sm);background:var(--ref-color-electric-blue-20)}:host .content:focus-visible{outline:none;border-radius:var(--ref-border-radius-sm);background:var(--ref-color-electric-blue-10);box-shadow:0 0 0 1px var(--ref-color-white),0 0 0 3px var(--ref-color-electric-blue-100)}:host ap-symbol[symbol-id=error_fill]{color:var(--ref-color-red-100)}:host ap-symbol[symbol-id=folder]{color:var(--ref-color-grey-100)}:host ap-symbol[symbol-id=chevron-down],:host ap-symbol[symbol-id=chevron-up]{color:var(--ref-color-grey-80)}:host .folding-button{display:flex;width:16px;height:16px;justify-content:center;align-items:center;flex-shrink:0}:host .caption{-webkit-box-orient:vertical;-webkit-line-clamp:1;flex:1 0 0;overflow:hidden;white-space:nowrap;color:var(--ref-color-grey-100);text-overflow:ellipsis;font-family:Averta;font-size:var(--ref-font-size-xs);font-style:normal;font-weight:var(--ref-font-weight-bold);line-height:var(--ref-font-line-height-xs)}:host .children{display:flex;flex-direction:column;align-items:flex-start;flex:1 0 0;align-self:stretch}:host .picture-url-sample-container{position:relative;width:26px}:host .picture-url-sample{display:flex;width:26px;align-items:center;align-content:center}:host .avatars{display:flex;width:24px;height:24px;transform:scale(.5);gap:var(--ref-spacing-xxxs);align-content:center;justify-content:center}:host .avatars:has(:nth-child(3)){display:grid;grid-template-columns:1fr 1fr}:host.minified .content{gap:var(--ref-spacing-xxxs);padding:var(--ref-spacing-xxxs);position:relative}:host.minified .content:not(.multiple-mode){justify-content:center}:host.minified .content .toggle{display:none}:host.minified .content .counter-override{background-color:var(--ref-color-orange-150)}:host.minified .content:hover .toggle,:host.minified .content:focus-visible .toggle{width:26px;display:flex;justify-content:center;align-items:center}:host.minified .content:hover .picture-url-sample,:host.minified .content:focus-visible .picture-url-sample{display:none}:host.minified ::ng-deep ap-checkbox .checkbox .checkbox-container{padding:0}:host.minified .status{position:absolute;right:-12px;top:-2px;background-color:var(--ref-color-white);border-radius:100%}\n"] }]
|
|
173
173
|
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i1.NavSelectorGroupPresenter }] });
|
|
174
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2LXNlbGVjdG9yLWdyb3VwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvdWktY29tcG9uZW50cy9uYXYtc2VsZWN0b3Ivc3JjL25hdi1zZWxlY3Rvci1ncm91cC9uYXYtc2VsZWN0b3ItZ3JvdXAuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vbGlicy91aS1jb21wb25lbnRzL25hdi1zZWxlY3Rvci9zcmMvbmF2LXNlbGVjdG9yLWdyb3VwL25hdi1zZWxlY3Rvci1ncm91cC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDbkUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDdkUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDckUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDckUsT0FBTyxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUUsV0FBVyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDeEgsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDNUYsT0FBTyxFQUNILFdBQVcsRUFDWCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixNQUFNLEVBRU4sS0FBSyxFQUNMLE1BQU0sRUFDTixNQUFNLEVBQ04sU0FBUyxFQUNULFNBQVMsR0FDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUVqRyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxrREFBa0QsQ0FB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Q0FBQztxQkFDTCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEF2YXRhckNvbXBvbmVudCB9IGZyb20gJ0BhZ29yYXB1bHNlL3VpLWNvbXBvbmVudHMvYXZhdGFyJztcbmltcG9ydCB7IENoZWNrYm94Q29tcG9uZW50IH0gZnJvbSAnQGFnb3JhcHVsc2UvdWktY29tcG9uZW50cy9jaGVja2JveCc7XG5pbXBvcnQgeyBDb3VudGVyQ29tcG9uZW50IH0gZnJvbSAnQGFnb3JhcHVsc2UvdWktY29tcG9uZW50cy9jb3VudGVyJztcbmltcG9ydCB7IFRvb2x0aXBEaXJlY3RpdmUgfSBmcm9tICdAYWdvcmFwdWxzZS91aS1jb21wb25lbnRzL3Rvb2x0aXAnO1xuaW1wb3J0IHsgYXBDaGV2cm9uRG93biwgYXBDaGV2cm9uVXAsIGFwRXJyb3JGaWxsLCBhcEZvbGRlciwgU3ltYm9sQ29tcG9uZW50LCB3aXRoU3ltYm9scyB9IGZyb20gJ0BhZ29yYXB1bHNlL3VpLXN5bWJvbCc7XG5pbXBvcnQgeyBhbmltYXRlLCBrZXlmcmFtZXMsIHN0YXRlLCBzdHlsZSwgdHJhbnNpdGlvbiwgdHJpZ2dlciB9IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xuaW1wb3J0IHtcbiAgICBhZnRlclJlbmRlcixcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDb21wb25lbnQsXG4gICAgY29tcHV0ZWQsXG4gICAgZWZmZWN0LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgaW5wdXQsXG4gICAgb3V0cHV0LFxuICAgIHNpZ25hbCxcbiAgICB1bnRyYWNrZWQsXG4gICAgdmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRyZWVOb2RlQWNjZXNzaWJpbGl0eURpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvdHJlZS1ub2RlLWFjY2Vzc2liaWxpdHkuZGlyZWN0aXZlJztcbmltcG9ydCB7IEludGVybmFsTmF2U2VsZWN0b3JHcm91cCwgTmF2U2VsZWN0b3JMZWFmQWN0aW9uQ2xpY2tlZEV2ZW50IH0gZnJvbSAnLi4vbmF2LXNlbGVjdG9yJztcbmltcG9ydCB7IE5hdlNlbGVjdG9yTGVhZkNvbXBvbmVudCB9IGZyb20gJy4uL25hdi1zZWxlY3Rvci1sZWFmL25hdi1zZWxlY3Rvci1sZWFmLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBjb21wdXRlTnVtYmVyT2ZEaXNwbGF5YWJsZUNoaWxkcmVuT25VbmZvbGQgfSBmcm9tICcuLi91dGlscy9sZWFmLnV0aWxzJztcbmltcG9ydCB7IE5hdlNlbGVjdG9yR3JvdXBQcmVzZW50ZXIgfSBmcm9tICcuL25hdi1zZWxlY3Rvci1ncm91cC5wcmVzZW50ZXInO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2FwLW5hdi1zZWxlY3Rvci1ncm91cCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL25hdi1zZWxlY3Rvci1ncm91cC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vbmF2LXNlbGVjdG9yLWdyb3VwLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBwcm92aWRlcnM6IFt3aXRoU3ltYm9scyhhcEZvbGRlciwgYXBFcnJvckZpbGwsIGFwQ2hldnJvbkRvd24sIGFwQ2hldnJvblVwKSwgTmF2U2VsZWN0b3JHcm91cFByZXNlbnRlcl0sXG4gICAgaW1wb3J0czogW1xuICAgICAgICBTeW1ib2xDb21wb25lbnQsXG4gICAgICAgIENvdW50ZXJDb21wb25lbnQsXG4gICAgICAgIE5hdlNlbGVjdG9yTGVhZkNvbXBvbmVudCxcbiAgICAgICAgQ2hlY2tib3hDb21wb25lbnQsXG4gICAgICAgIEF2YXRhckNvbXBvbmVudCxcbiAgICAgICAgVG9vbHRpcERpcmVjdGl2ZSxcbiAgICAgICAgVHJlZU5vZGVBY2Nlc3NpYmlsaXR5RGlyZWN0aXZlLFxuICAgIF0sXG4gICAgaG9zdDoge1xuICAgICAgICAnW2NsYXNzLm1pbmlmaWVkXSc6ICchbmF2U2VsZWN0b3JHcm91cFByZXNlbnRlci5leHBhbmRlZCgpJyxcbiAgICAgICAgJyhrZXlkb3duLmFycm93TGVmdCknOiAnZm9sZCgkZXZlbnQpJyxcbiAgICAgICAgJyhrZXlkb3duLmFycm93UmlnaHQpJzogJ3VuZm9sZCgkZXZlbnQpJyxcbiAgICB9LFxuICAgIGFuaW1hdGlvbnM6IFtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIE92ZXJmbG93IGhpZGRlbiBpcyBwdXQgb25seSBkdXJpbmcgdGhlIGFuaW1hdGlvbiBhbmQgb24gdGhlIGNvbGxhcHNlZCBzdGF0ZSBiZWNhdXNlIGlmIGl0IGlzIHB1dCBvbiB0aGUgZXhwYW5kZWQgc3RhdGUgdGhlbiBjaGlsZHJlbuKAmXMgYm9yZGVyIHdpbGwgYmUgY3V0IChob3ZlciAvIGZvY3VzKVxuICAgICAgICAgKi9cbiAgICAgICAgdHJpZ2dlcignYWNjb3JkaW9uJywgW1xuICAgICAgICAgICAgc3RhdGUoXG4gICAgICAgICAgICAgICAgJ2NvbGxhcHNlZCcsXG4gICAgICAgICAgICAgICAgc3R5bGUoe1xuICAgICAgICAgICAgICAgICAgICBtYXhIZWlnaHQ6IDAsXG4gICAgICAgICAgICAgICAgICAgIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHN0YXRlKFxuICAgICAgICAgICAgICAgICdleHBhbmRlZCcsXG4gICAgICAgICAgICAgICAgc3R5bGUoe1xuICAgICAgICAgICAgICAgICAgICBtYXhIZWlnaHQ6ICdpbml0aWFsJyxcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHRyYW5zaXRpb24oJ2NvbGxhcHNlZCA9PiBleHBhbmRlZCcsIFtcbiAgICAgICAgICAgICAgICBhbmltYXRlKCcyNTBtcyBjdWJpYy1iZXppZXIoLjQsIDAsIC4zLCAxKScsIHN0eWxlKHsgbWF4SGVpZ2h0OiAne3ttYXhIZWlnaHR9fScsIG92ZXJmbG93OiAnaGlkZGVuJyB9KSksXG4gICAgICAgICAgICBdKSxcbiAgICAgICAgICAgIHRyYW5zaXRpb24oJ2V4cGFuZGVkID0+IGNvbGxhcHNlZCcsIFtcbiAgICAgICAgICAgICAgICBhbmltYXRlKFxuICAgICAgICAgICAgICAgICAgICAnMjUwbXMgY3ViaWMtYmV6aWVyKC40LCAwLCAuMywgMSknLFxuICAgICAgICAgICAgICAgICAgICBrZXlmcmFtZXMoW3N0eWxlKHsgbWF4SGVpZ2h0OiAne3ttYXhIZWlnaHR9fScsIG92ZXJmbG93OiAnaGlkZGVuJyB9KSwgc3R5bGUoeyBtYXhIZWlnaHQ6IDAsIG92ZXJmbG93OiAnaGlkZGVuJyB9KV0pXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIF0pLFxuICAgICAgICBdKSxcbiAgICBdLFxufSlcbmV4cG9ydCBjbGFzcyBOYXZTZWxlY3Rvckdyb3VwQ29tcG9uZW50IHtcbiAgICBncm91cCA9IGlucHV0LnJlcXVpcmVkPEludGVybmFsTmF2U2VsZWN0b3JHcm91cD4oKTtcbiAgICBhY3Rpb25DbGlja2VkID0gb3V0cHV0PE5hdlNlbGVjdG9yTGVhZkFjdGlvbkNsaWNrZWRFdmVudD4oKTtcblxuICAgIGZvbGRTeW1ib2wgPSBjb21wdXRlZCgoKSA9PiAodGhpcy5ncm91cCgpLmZvbGRlZCA/ICdjaGV2cm9uLWRvd24nIDogJ2NoZXZyb24tdXAnKSk7XG5cbiAgICBhbGlhc0VsID0gdmlld0NoaWxkPEVsZW1lbnRSZWY+KCdhbGlhcycpO1xuICAgIGFsaWFzQm91bmRlZENsaWVudFJlY3QgPSBzaWduYWw8e1xuICAgICAgICBvZmZzZXRXaWR0aDogbnVtYmVyO1xuICAgICAgICBvZmZzZXRIZWlnaHQ6IG51bWJlcjtcbiAgICAgICAgc2Nyb2xsV2lkdGg6IG51bWJlcjtcbiAgICAgICAgc2Nyb2xsSGVpZ2h0OiBudW1iZXI7XG4gICAgfT4oe1xuICAgICAgICBvZmZzZXRXaWR0aDogMCxcbiAgICAgICAgb2Zmc2V0SGVpZ2h0OiAwLFxuICAgICAgICBzY3JvbGxXaWR0aDogMCxcbiAgICAgICAgc2Nyb2xsSGVpZ2h0OiAwLFxuICAgIH0pO1xuXG4gICAgdG9vbHRpcENvbnRlbnQgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSBbXTtcblxuICAgICAgICBjb25zdCBlbCA9IHRoaXMuYWxpYXNCb3VuZGVkQ2xpZW50UmVjdCgpO1xuICAgICAgICBpZiAoIXRoaXMubmF2U2VsZWN0b3JHcm91cFByZXNlbnRlci5leHBhbmRlZCgpIHx8IGVsLm9mZnNldFdpZHRoIDwgZWwuc2Nyb2xsV2lkdGggfHwgZWwub2Zmc2V0SGVpZ2h0IDwgZWwuc2Nyb2xsSGVpZ2h0KSB7XG4gICAgICAgICAgICBjb250ZW50LnB1c2godGhpcy5ncm91cCgpLmFsaWFzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmdyb3VwKCkuZGlzcGxheVRva2VuSW52YWxpZCkge1xuICAgICAgICAgICAgY29udGVudC5wdXNoKHRoaXMubmF2U2VsZWN0b3JHcm91cFByZXNlbnRlci50ZXh0cygpLmdyb3VwVG9rZW5JbnZhbGlkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb250ZW50LmpvaW4oJzxicj4nKTtcbiAgICB9KTtcbiAgICB0b29sdGlwRGlzYWJsZWQgPSBjb21wdXRlZCgoKSA9PiAhdGhpcy50b29sdGlwQ29udGVudCgpLmxlbmd0aCk7XG5cbiAgICBmb2xkZWRXaXRoRGVsYXkgPSBzaWduYWwoZmFsc2UpO1xuXG4gICAgYW5pbWF0aW9uU3RhdGUgPSBjb21wdXRlZCgoKSA9PiAodGhpcy5ncm91cCgpLmZvbGRlZCA/ICdjb2xsYXBzZWQnIDogJ2V4cGFuZGVkJykpO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgZWw6IEVsZW1lbnRSZWYsXG4gICAgICAgIHB1YmxpYyBuYXZTZWxlY3Rvckdyb3VwUHJlc2VudGVyOiBOYXZTZWxlY3Rvckdyb3VwUHJlc2VudGVyXG4gICAgKSB7XG4gICAgICAgIGFmdGVyUmVuZGVyKCgpID0+XG4gICAgICAgICAgICB1bnRyYWNrZWQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1heEhlaWdodCA9IHRoaXMuY29tcHV0ZU1heEhlaWdodCgpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLm1heEhlaWdodCgpICE9PSBtYXhIZWlnaHQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXhIZWlnaHQuc2V0KG1heEhlaWdodCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlQWxpYXNCb3VuZGVkQ2xpZW50UmVjdCgpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcblxuICAgICAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZm9sZGVkID0gdGhpcy5ncm91cCgpLmZvbGRlZDtcbiAgICAgICAgICAgIHVudHJhY2tlZCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGZvbGRlZCkge1xuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuZm9sZGVkV2l0aERlbGF5LnNldCh0cnVlKSwgMTUwKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvbGRlZFdpdGhEZWxheS5zZXQoZmFsc2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBtYXhIZWlnaHQgPSBzaWduYWwoJzBweCcpO1xuXG4gICAgb25LZXlkb3duU3BhY2VPckVudGVyKGV2ZW50OiBFdmVudCkge1xuICAgICAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgICAgICAgLy8gUHJldmVudCB0byB0b2dnbGUgZm9sZGluZyB3aGVuIGZvY3VzIGlzIG9uIHRoZSBjaGVja2JveFxuICAgICAgICBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gdGhpcy5lbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5jb250ZW50JykpIHtcbiAgICAgICAgICAgIHRoaXMudG9nZ2xlRm9sZGluZyhldmVudCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm5hdlNlbGVjdG9yR3JvdXBQcmVzZW50ZXIub25Hcm91cFNlbGVjdGVkKHRoaXMuZ3JvdXAoKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkdyb3VwU2VsZWN0ZWQoKSB7XG4gICAgICAgIHRoaXMubmF2U2VsZWN0b3JHcm91cFByZXNlbnRlci5vbkdyb3VwU2VsZWN0ZWQodGhpcy5ncm91cCgpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGb3IgY2hlY2tib3hlcywgYXMgdGhleSBkbyBub3Qgc3RvcCBldmVudCBwcm9wYWdhdGlvbiwgd2UgbmVlZCB0byBzdG9wIGl0IG1hbnVhbGx5XG4gICAgICovXG4gICAgZXZlbnRTdG9wcGVyKGV2ZW50OiBFdmVudCkge1xuICAgICAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgICB9XG5cbiAgICB0b2dnbGVGb2xkaW5nKGV2ZW50OiBFdmVudCkge1xuICAgICAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgICAgICAgdGhpcy5uYXZTZWxlY3Rvckdyb3VwUHJlc2VudGVyLm9uR3JvdXBUb2dnbGVGb2xkaW5nKHRoaXMuZ3JvdXAoKSk7XG4gICAgfVxuXG4gICAgZm9sZChldmVudDogRXZlbnQpIHtcbiAgICAgICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgICAgIHRoaXMubmF2U2VsZWN0b3JHcm91cFByZXNlbnRlci5mb2xkKHRoaXMuZ3JvdXAoKSk7XG4gICAgfVxuXG4gICAgdW5mb2xkKGV2ZW50OiBFdmVudCkge1xuICAgICAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgICAgICAgdGhpcy5uYXZTZWxlY3Rvckdyb3VwUHJlc2VudGVyLnVuZm9sZCh0aGlzLmdyb3VwKCkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY29tcHV0ZU1heEhlaWdodCgpIHtcbiAgICAgICAgbGV0IG1heEhlaWdodCA9IHRoaXMuZWwubmF0aXZlRWxlbWVudC5jbGllbnRIZWlnaHQ7XG4gICAgICAgIGlmICh0aGlzLmdyb3VwKCkuZm9sZGVkKSB7XG4gICAgICAgICAgICBjb25zdCBudW1iZXJPZkRpc3BsYXlhYmxlQ2hpbGRyZW4gPSBjb21wdXRlTnVtYmVyT2ZEaXNwbGF5YWJsZUNoaWxkcmVuT25VbmZvbGQodGhpcy5ncm91cCgpKTtcbiAgICAgICAgICAgIG1heEhlaWdodCA9IHRoaXMuZWwubmF0aXZlRWxlbWVudC5jbGllbnRIZWlnaHQgKiBudW1iZXJPZkRpc3BsYXlhYmxlQ2hpbGRyZW47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGAke21heEhlaWdodH1weGA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVBbGlhc0JvdW5kZWRDbGllbnRSZWN0KCkge1xuICAgICAgICBjb25zdCBlbCA9IHRoaXMuYWxpYXNFbCgpPy5uYXRpdmVFbGVtZW50O1xuICAgICAgICBpZiAoZWwpIHtcbiAgICAgICAgICAgIGNvbnN0IGJvdW5kZWRDbGllbnRSZWN0ID0ge1xuICAgICAgICAgICAgICAgIG9mZnNldFdpZHRoOiBlbC5vZmZzZXRXaWR0aCxcbiAgICAgICAgICAgICAgICBvZmZzZXRIZWlnaHQ6IGVsLm9mZnNldEhlaWdodCxcbiAgICAgICAgICAgICAgICBzY3JvbGxXaWR0aDogZWwuc2Nyb2xsV2lkdGgsXG4gICAgICAgICAgICAgICAgc2Nyb2xsSGVpZ2h0OiBlbC5zY3JvbGxIZWlnaHQsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKEpTT04uc3RyaW5naWZ5KHRoaXMuYWxpYXNCb3VuZGVkQ2xpZW50UmVjdCgpKSAhPT0gSlNPTi5zdHJpbmdpZnkoYm91bmRlZENsaWVudFJlY3QpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hbGlhc0JvdW5kZWRDbGllbnRSZWN0LnNldChib3VuZGVkQ2xpZW50UmVjdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCJAaWYgKG5hdlNlbGVjdG9yR3JvdXBQcmVzZW50ZXIuZXhwYW5kZWQoKSkge1xuICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJjb250ZW50XCJcbiAgICAgICAgYXBUb29sdGlwUG9zaXRpb249XCJyaWdodFwiXG4gICAgICAgIFthcFRvb2x0aXBdPVwidG9vbHRpcENvbnRlbnQoKVwiXG4gICAgICAgIFthcFRvb2x0aXBEaXNhYmxlZF09XCJ0b29sdGlwRGlzYWJsZWQoKVwiXG4gICAgICAgIFthcFRyZWVOb2RlQWNjZXNzaWJpbGl0eV09XCJncm91cCgpXCJcbiAgICAgICAgKGtleWRvd24uc3BhY2UpPVwib25LZXlkb3duU3BhY2VPckVudGVyKCRldmVudClcIlxuICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJvbktleWRvd25TcGFjZU9yRW50ZXIoJGV2ZW50KVwiXG4gICAgICAgIChjbGljayk9XCJ0b2dnbGVGb2xkaW5nKCRldmVudClcIj5cbiAgICAgICAgQGlmIChuYXZTZWxlY3Rvckdyb3VwUHJlc2VudGVyLmlzTXVsdGlwbGVNb2RlRW5hYmxlZCgpKSB7XG4gICAgICAgICAgICA8YXAtY2hlY2tib3hcbiAgICAgICAgICAgICAgICBbbmFtZV09XCJncm91cCgpLnVpZFwiXG4gICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiZ3JvdXAoKS5zZWxlY3RlZFwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFncm91cCgpLnNlbGVjdGFibGVcIlxuICAgICAgICAgICAgICAgIFtpbmRldGVybWluYXRlXT1cImdyb3VwKCkudW5kZXRlcm1pbmVkU2VsZWN0aW9uXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiZXZlbnRTdG9wcGVyKCRldmVudClcIlxuICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25Hcm91cFNlbGVjdGVkKClcIiAvPlxuICAgICAgICB9XG5cbiAgICAgICAgPGFwLXN5bWJvbFxuICAgICAgICAgICAgc3ltYm9sSWQ9XCJmb2xkZXJcIlxuICAgICAgICAgICAgc2l6ZT1cInNtXCIgLz5cblxuICAgICAgICA8c3BhblxuICAgICAgICAgICAgI2FsaWFzXG4gICAgICAgICAgICBjbGFzcz1cImNhcHRpb25cIj5cbiAgICAgICAgICAgIHt7IGdyb3VwKCkuYWxpYXMgfX1cbiAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgIEBpZiAoZ3JvdXAoKS5kaXNwbGF5VG9rZW5JbnZhbGlkKSB7XG4gICAgICAgICAgICA8YXAtc3ltYm9sXG4gICAgICAgICAgICAgICAgc3ltYm9sSWQ9XCJlcnJvcl9maWxsXCJcbiAgICAgICAgICAgICAgICBzaXplPVwic21cIiAvPlxuICAgICAgICB9XG5cbiAgICAgICAgQGlmIChncm91cCgpLmRpc3BsYXlDb3VudGVyKSB7XG4gICAgICAgICAgICA8YXAtY291bnRlclxuICAgICAgICAgICAgICAgIGNvbG9yPVwib3JhbmdlXCJcbiAgICAgICAgICAgICAgICBzaXplPVwibm9ybWFsXCJcbiAgICAgICAgICAgICAgICBbYmFja2dyb3VuZF09XCJmYWxzZVwiPlxuICAgICAgICAgICAgICAgIHt7IGdyb3VwKCkuY291bnRlciB9fVxuICAgICAgICAgICAgPC9hcC1jb3VudGVyPlxuICAgICAgICB9XG5cbiAgICAgICAgPGFwLXN5bWJvbFxuICAgICAgICAgICAgc2l6ZT1cInNtXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZm9sZGluZy1idXR0b25cIlxuICAgICAgICAgICAgW3N5bWJvbElkXT1cImZvbGRTeW1ib2woKVwiIC8+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiY2hpbGRyZW4tY29udGFpbmVyXCJcbiAgICAgICAgW0BhY2NvcmRpb25dPVwie1xuICAgICAgICAgICAgdmFsdWU6IGFuaW1hdGlvblN0YXRlKCksXG4gICAgICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICAgICAgICBtYXhIZWlnaHQ6IG1heEhlaWdodCgpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cIj5cbiAgICAgICAgQGlmICghZm9sZGVkV2l0aERlbGF5KCkpIHtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGlsZHJlblwiPlxuICAgICAgICAgICAgICAgIEBmb3IgKGNoaWxkIG9mIGdyb3VwKCkuY2hpbGRyZW47IHRyYWNrIGNoaWxkLnVpZCkge1xuICAgICAgICAgICAgICAgICAgICBAaWYgKCFjaGlsZC5oaWRkZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxhcC1uYXYtc2VsZWN0b3ItbGVhZlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsZWFmXT1cImNoaWxkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYWN0aW9uQ2xpY2tlZCk9XCJhY3Rpb25DbGlja2VkLmVtaXQoJGV2ZW50KVwiIC8+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgIDwvZGl2PlxufSBAZWxzZSB7XG4gICAgPGRpdlxuICAgICAgICBjbGFzcz1cImNvbnRlbnRcIlxuICAgICAgICBhcFRvb2x0aXBQb3NpdGlvbj1cInJpZ2h0XCJcbiAgICAgICAgW2NsYXNzLnRva2VuLWludmFsaWRdPVwiZ3JvdXAoKS5kaXNwbGF5VG9rZW5JbnZhbGlkXCJcbiAgICAgICAgW2NsYXNzLm11bHRpcGxlLW1vZGVdPVwibmF2U2VsZWN0b3JHcm91cFByZXNlbnRlci5pc011bHRpcGxlTW9kZUVuYWJsZWQoKVwiXG4gICAgICAgIFthcFRvb2x0aXBdPVwidG9vbHRpcENvbnRlbnQoKVwiXG4gICAgICAgIFthcFRvb2x0aXBEaXNhYmxlZF09XCJ0b29sdGlwRGlzYWJsZWQoKVwiXG4gICAgICAgIFthcFRyZWVOb2RlQWNjZXNzaWJpbGl0eV09XCJncm91cCgpXCJcbiAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUZvbGRpbmcoJGV2ZW50KVwiXG4gICAgICAgIChrZXlkb3duLnNwYWNlKT1cIm9uS2V5ZG93blNwYWNlT3JFbnRlcigkZXZlbnQpXCJcbiAgICAgICAgKGtleWRvd24uZW50ZXIpPVwib25LZXlkb3duU3BhY2VPckVudGVyKCRldmVudClcIj5cbiAgICAgICAgQGlmIChuYXZTZWxlY3Rvckdyb3VwUHJlc2VudGVyLmlzTXVsdGlwbGVNb2RlRW5hYmxlZCgpKSB7XG4gICAgICAgICAgICA8YXAtY2hlY2tib3hcbiAgICAgICAgICAgICAgICBbbmFtZV09XCJncm91cCgpLnVpZFwiXG4gICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiZ3JvdXAoKS5zZWxlY3RlZFwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFncm91cCgpLnNlbGVjdGFibGVcIlxuICAgICAgICAgICAgICAgIFtpbmRldGVybWluYXRlXT1cImdyb3VwKCkudW5kZXRlcm1pbmVkU2VsZWN0aW9uXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiZXZlbnRTdG9wcGVyKCRldmVudClcIlxuICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25Hcm91cFNlbGVjdGVkKClcIiAvPlxuICAgICAgICB9XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cInBpY3R1cmUtdXJsLXNhbXBsZS1jb250YWluZXJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwaWN0dXJlLXVybC1zYW1wbGVcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXZhdGFyc1wiPlxuICAgICAgICAgICAgICAgICAgICBAZm9yIChwaWN0dXJlVXJsU2FtcGxlIG9mIGdyb3VwKCkuY2hpbGRyZW5QaWN0dXJlVXJsU2FtcGxlOyB0cmFjayBwaWN0dXJlVXJsU2FtcGxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8YXAtYXZhdGFyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhdmF0YXItc2FtcGxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2l6ZV09XCIyNFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Byb2ZpbGVQaWN0dXJlXT1cInBpY3R1cmVVcmxTYW1wbGUudXJsID8/IHVuZGVmaW5lZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dJbml0aWFsc109XCJwaWN0dXJlVXJsU2FtcGxlLmluaXRpYWxcIiAvPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3RhdHVzXCI+XG4gICAgICAgICAgICAgICAgICAgIEBpZiAoZ3JvdXAoKS5kaXNwbGF5Q291bnRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgPGFwLWNvdW50ZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvdW50ZXItb3ZlcnJpZGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPVwib3JhbmdlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplPVwibm9ybWFsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbm90aWZdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2JhY2tncm91bmRdPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGdyb3VwKCkuY291bnRlciB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9hcC1jb3VudGVyPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRvZ2dsZVwiPlxuICAgICAgICAgICAgICAgIDxhcC1zeW1ib2xcbiAgICAgICAgICAgICAgICAgICAgc2l6ZT1cInNtXCJcbiAgICAgICAgICAgICAgICAgICAgW3N5bWJvbElkXT1cImZvbGRTeW1ib2woKVwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiY2hpbGRyZW4tY29udGFpbmVyXCJcbiAgICAgICAgW0BhY2NvcmRpb25dPVwie1xuICAgICAgICAgICAgdmFsdWU6IGFuaW1hdGlvblN0YXRlKCksXG4gICAgICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICAgICAgICBtYXhIZWlnaHQ6IG1heEhlaWdodCgpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cIj5cbiAgICAgICAgQGlmICghZm9sZGVkV2l0aERlbGF5KCkpIHtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGlsZHJlblwiPlxuICAgICAgICAgICAgICAgIEBmb3IgKGNoaWxkIG9mIGdyb3VwKCkuY2hpbGRyZW47IHRyYWNrIGNoaWxkLnVpZCkge1xuICAgICAgICAgICAgICAgICAgICBAaWYgKCFjaGlsZC5oaWRkZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxhcC1uYXYtc2VsZWN0b3ItbGVhZlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsZWFmXT1cImNoaWxkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYWN0aW9uQ2xpY2tlZCk9XCJhY3Rpb25DbGlja2VkLmVtaXQoJGV2ZW50KVwiIC8+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgIDwvZGl2PlxufVxuIl19
|
|
174
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2LXNlbGVjdG9yLWdyb3VwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvdWktY29tcG9uZW50cy9uYXYtc2VsZWN0b3Ivc3JjL25hdi1zZWxlY3Rvci1ncm91cC9uYXYtc2VsZWN0b3ItZ3JvdXAuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vbGlicy91aS1jb21wb25lbnRzL25hdi1zZWxlY3Rvci9zcmMvbmF2LXNlbGVjdG9yLWdyb3VwL25hdi1zZWxlY3Rvci1ncm91cC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDbkUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDdkUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDckUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDckUsT0FBTyxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUUsV0FBVyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDeEgsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDNUYsT0FBTyxFQUNILFdBQVcsRUFDWCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixNQUFNLEVBRU4sS0FBSyxFQUNMLE1BQU0sRUFDTixNQUFNLEVBQ04sU0FBUyxFQUNULFNBQVMsR0FDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUVqRyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxrREFBa0QsQ0FB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Q0FBQztxQkFDTCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEF2YXRhckNvbXBvbmVudCB9IGZyb20gJ0BhZ29yYXB1bHNlL3VpLWNvbXBvbmVudHMvYXZhdGFyJztcbmltcG9ydCB7IENoZWNrYm94Q29tcG9uZW50IH0gZnJvbSAnQGFnb3JhcHVsc2UvdWktY29tcG9uZW50cy9jaGVja2JveCc7XG5pbXBvcnQgeyBDb3VudGVyQ29tcG9uZW50IH0gZnJvbSAnQGFnb3JhcHVsc2UvdWktY29tcG9uZW50cy9jb3VudGVyJztcbmltcG9ydCB7IFRvb2x0aXBEaXJlY3RpdmUgfSBmcm9tICdAYWdvcmFwdWxzZS91aS1jb21wb25lbnRzL3Rvb2x0aXAnO1xuaW1wb3J0IHsgYXBDaGV2cm9uRG93biwgYXBDaGV2cm9uVXAsIGFwRXJyb3JGaWxsLCBhcEZvbGRlciwgU3ltYm9sQ29tcG9uZW50LCB3aXRoU3ltYm9scyB9IGZyb20gJ0BhZ29yYXB1bHNlL3VpLXN5bWJvbCc7XG5pbXBvcnQgeyBhbmltYXRlLCBrZXlmcmFtZXMsIHN0YXRlLCBzdHlsZSwgdHJhbnNpdGlvbiwgdHJpZ2dlciB9IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xuaW1wb3J0IHtcbiAgICBhZnRlclJlbmRlcixcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDb21wb25lbnQsXG4gICAgY29tcHV0ZWQsXG4gICAgZWZmZWN0LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgaW5wdXQsXG4gICAgb3V0cHV0LFxuICAgIHNpZ25hbCxcbiAgICB1bnRyYWNrZWQsXG4gICAgdmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRyZWVOb2RlQWNjZXNzaWJpbGl0eURpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvdHJlZS1ub2RlLWFjY2Vzc2liaWxpdHkuZGlyZWN0aXZlJztcbmltcG9ydCB7IEludGVybmFsTmF2U2VsZWN0b3JHcm91cCwgTmF2U2VsZWN0b3JMZWFmQWN0aW9uQ2xpY2tlZEV2ZW50IH0gZnJvbSAnLi4vbmF2LXNlbGVjdG9yJztcbmltcG9ydCB7IE5hdlNlbGVjdG9yTGVhZkNvbXBvbmVudCB9IGZyb20gJy4uL25hdi1zZWxlY3Rvci1sZWFmL25hdi1zZWxlY3Rvci1sZWFmLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBjb21wdXRlTnVtYmVyT2ZEaXNwbGF5YWJsZUNoaWxkcmVuT25VbmZvbGQgfSBmcm9tICcuLi91dGlscy9sZWFmLnV0aWxzJztcbmltcG9ydCB7IE5hdlNlbGVjdG9yR3JvdXBQcmVzZW50ZXIgfSBmcm9tICcuL25hdi1zZWxlY3Rvci1ncm91cC5wcmVzZW50ZXInO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2FwLW5hdi1zZWxlY3Rvci1ncm91cCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL25hdi1zZWxlY3Rvci1ncm91cC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vbmF2LXNlbGVjdG9yLWdyb3VwLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBwcm92aWRlcnM6IFt3aXRoU3ltYm9scyhhcEZvbGRlciwgYXBFcnJvckZpbGwsIGFwQ2hldnJvbkRvd24sIGFwQ2hldnJvblVwKSwgTmF2U2VsZWN0b3JHcm91cFByZXNlbnRlcl0sXG4gICAgaW1wb3J0czogW1xuICAgICAgICBTeW1ib2xDb21wb25lbnQsXG4gICAgICAgIENvdW50ZXJDb21wb25lbnQsXG4gICAgICAgIE5hdlNlbGVjdG9yTGVhZkNvbXBvbmVudCxcbiAgICAgICAgQ2hlY2tib3hDb21wb25lbnQsXG4gICAgICAgIEF2YXRhckNvbXBvbmVudCxcbiAgICAgICAgVG9vbHRpcERpcmVjdGl2ZSxcbiAgICAgICAgVHJlZU5vZGVBY2Nlc3NpYmlsaXR5RGlyZWN0aXZlLFxuICAgIF0sXG4gICAgaG9zdDoge1xuICAgICAgICAnW2NsYXNzLm1pbmlmaWVkXSc6ICchbmF2U2VsZWN0b3JHcm91cFByZXNlbnRlci5leHBhbmRlZCgpJyxcbiAgICAgICAgJyhrZXlkb3duLmFycm93TGVmdCknOiAnZm9sZCgkZXZlbnQpJyxcbiAgICAgICAgJyhrZXlkb3duLmFycm93UmlnaHQpJzogJ3VuZm9sZCgkZXZlbnQpJyxcbiAgICB9LFxuICAgIGFuaW1hdGlvbnM6IFtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIE92ZXJmbG93IGhpZGRlbiBpcyBwdXQgb25seSBkdXJpbmcgdGhlIGFuaW1hdGlvbiBhbmQgb24gdGhlIGNvbGxhcHNlZCBzdGF0ZSBiZWNhdXNlIGlmIGl0IGlzIHB1dCBvbiB0aGUgZXhwYW5kZWQgc3RhdGUgdGhlbiBjaGlsZHJlbuKAmXMgYm9yZGVyIHdpbGwgYmUgY3V0IChob3ZlciAvIGZvY3VzKVxuICAgICAgICAgKi9cbiAgICAgICAgdHJpZ2dlcignYWNjb3JkaW9uJywgW1xuICAgICAgICAgICAgc3RhdGUoXG4gICAgICAgICAgICAgICAgJ2NvbGxhcHNlZCcsXG4gICAgICAgICAgICAgICAgc3R5bGUoe1xuICAgICAgICAgICAgICAgICAgICBtYXhIZWlnaHQ6IDAsXG4gICAgICAgICAgICAgICAgICAgIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHN0YXRlKFxuICAgICAgICAgICAgICAgICdleHBhbmRlZCcsXG4gICAgICAgICAgICAgICAgc3R5bGUoe1xuICAgICAgICAgICAgICAgICAgICBtYXhIZWlnaHQ6ICdpbml0aWFsJyxcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHRyYW5zaXRpb24oJ2NvbGxhcHNlZCA9PiBleHBhbmRlZCcsIFtcbiAgICAgICAgICAgICAgICBhbmltYXRlKCcyNTBtcyBjdWJpYy1iZXppZXIoLjQsIDAsIC4zLCAxKScsIHN0eWxlKHsgbWF4SGVpZ2h0OiAne3ttYXhIZWlnaHR9fScsIG92ZXJmbG93OiAnaGlkZGVuJyB9KSksXG4gICAgICAgICAgICBdKSxcbiAgICAgICAgICAgIHRyYW5zaXRpb24oJ2V4cGFuZGVkID0+IGNvbGxhcHNlZCcsIFtcbiAgICAgICAgICAgICAgICBhbmltYXRlKFxuICAgICAgICAgICAgICAgICAgICAnMjUwbXMgY3ViaWMtYmV6aWVyKC40LCAwLCAuMywgMSknLFxuICAgICAgICAgICAgICAgICAgICBrZXlmcmFtZXMoW3N0eWxlKHsgbWF4SGVpZ2h0OiAne3ttYXhIZWlnaHR9fScsIG92ZXJmbG93OiAnaGlkZGVuJyB9KSwgc3R5bGUoeyBtYXhIZWlnaHQ6IDAsIG92ZXJmbG93OiAnaGlkZGVuJyB9KV0pXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIF0pLFxuICAgICAgICBdKSxcbiAgICBdLFxufSlcbmV4cG9ydCBjbGFzcyBOYXZTZWxlY3Rvckdyb3VwQ29tcG9uZW50IHtcbiAgICBncm91cCA9IGlucHV0LnJlcXVpcmVkPEludGVybmFsTmF2U2VsZWN0b3JHcm91cD4oKTtcbiAgICBhY3Rpb25DbGlja2VkID0gb3V0cHV0PE5hdlNlbGVjdG9yTGVhZkFjdGlvbkNsaWNrZWRFdmVudD4oKTtcblxuICAgIGZvbGRTeW1ib2wgPSBjb21wdXRlZCgoKSA9PiAodGhpcy5ncm91cCgpLmZvbGRlZCA/ICdjaGV2cm9uLWRvd24nIDogJ2NoZXZyb24tdXAnKSk7XG5cbiAgICBhbGlhc0VsID0gdmlld0NoaWxkPEVsZW1lbnRSZWY+KCdhbGlhcycpO1xuICAgIGFsaWFzQm91bmRlZENsaWVudFJlY3QgPSBzaWduYWw8e1xuICAgICAgICBvZmZzZXRXaWR0aDogbnVtYmVyO1xuICAgICAgICBvZmZzZXRIZWlnaHQ6IG51bWJlcjtcbiAgICAgICAgc2Nyb2xsV2lkdGg6IG51bWJlcjtcbiAgICAgICAgc2Nyb2xsSGVpZ2h0OiBudW1iZXI7XG4gICAgfT4oe1xuICAgICAgICBvZmZzZXRXaWR0aDogMCxcbiAgICAgICAgb2Zmc2V0SGVpZ2h0OiAwLFxuICAgICAgICBzY3JvbGxXaWR0aDogMCxcbiAgICAgICAgc2Nyb2xsSGVpZ2h0OiAwLFxuICAgIH0pO1xuXG4gICAgdG9vbHRpcENvbnRlbnQgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSBbXTtcblxuICAgICAgICBjb25zdCBlbCA9IHRoaXMuYWxpYXNCb3VuZGVkQ2xpZW50UmVjdCgpO1xuICAgICAgICBpZiAoIXRoaXMubmF2U2VsZWN0b3JHcm91cFByZXNlbnRlci5leHBhbmRlZCgpIHx8IGVsLm9mZnNldFdpZHRoIDwgZWwuc2Nyb2xsV2lkdGggfHwgZWwub2Zmc2V0SGVpZ2h0IDwgZWwuc2Nyb2xsSGVpZ2h0KSB7XG4gICAgICAgICAgICBjb250ZW50LnB1c2godGhpcy5ncm91cCgpLmFsaWFzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmdyb3VwKCkuZGlzcGxheVRva2VuSW52YWxpZCkge1xuICAgICAgICAgICAgY29udGVudC5wdXNoKHRoaXMubmF2U2VsZWN0b3JHcm91cFByZXNlbnRlci50ZXh0cygpLmdyb3VwVG9rZW5JbnZhbGlkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb250ZW50LmpvaW4oJzxicj4nKTtcbiAgICB9KTtcbiAgICB0b29sdGlwRGlzYWJsZWQgPSBjb21wdXRlZCgoKSA9PiAhdGhpcy50b29sdGlwQ29udGVudCgpLmxlbmd0aCk7XG5cbiAgICBmb2xkZWRXaXRoRGVsYXkgPSBzaWduYWwodHJ1ZSk7XG5cbiAgICBhbmltYXRpb25TdGF0ZSA9IGNvbXB1dGVkKCgpID0+ICh0aGlzLmdyb3VwKCkuZm9sZGVkID8gJ2NvbGxhcHNlZCcgOiAnZXhwYW5kZWQnKSk7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBlbDogRWxlbWVudFJlZixcbiAgICAgICAgcHVibGljIG5hdlNlbGVjdG9yR3JvdXBQcmVzZW50ZXI6IE5hdlNlbGVjdG9yR3JvdXBQcmVzZW50ZXJcbiAgICApIHtcbiAgICAgICAgYWZ0ZXJSZW5kZXIoKCkgPT5cbiAgICAgICAgICAgIHVudHJhY2tlZCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbWF4SGVpZ2h0ID0gdGhpcy5jb21wdXRlTWF4SGVpZ2h0KCk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubWF4SGVpZ2h0KCkgIT09IG1heEhlaWdodCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1heEhlaWdodC5zZXQobWF4SGVpZ2h0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVBbGlhc0JvdW5kZWRDbGllbnRSZWN0KCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuXG4gICAgICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmb2xkZWQgPSB0aGlzLmdyb3VwKCkuZm9sZGVkO1xuICAgICAgICAgICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZm9sZGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5mb2xkZWRXaXRoRGVsYXkuc2V0KHRydWUpLCAxNTApO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9sZGVkV2l0aERlbGF5LnNldChmYWxzZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG1heEhlaWdodCA9IHNpZ25hbCgnMHB4Jyk7XG5cbiAgICBvbktleWRvd25TcGFjZU9yRW50ZXIoZXZlbnQ6IEV2ZW50KSB7XG4gICAgICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgICAgICAvLyBQcmV2ZW50IHRvIHRvZ2dsZSBmb2xkaW5nIHdoZW4gZm9jdXMgaXMgb24gdGhlIGNoZWNrYm94XG4gICAgICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLmNvbnRlbnQnKSkge1xuICAgICAgICAgICAgdGhpcy50b2dnbGVGb2xkaW5nKGV2ZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubmF2U2VsZWN0b3JHcm91cFByZXNlbnRlci5vbkdyb3VwU2VsZWN0ZWQodGhpcy5ncm91cCgpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uR3JvdXBTZWxlY3RlZCgpIHtcbiAgICAgICAgdGhpcy5uYXZTZWxlY3Rvckdyb3VwUHJlc2VudGVyLm9uR3JvdXBTZWxlY3RlZCh0aGlzLmdyb3VwKCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZvciBjaGVja2JveGVzLCBhcyB0aGV5IGRvIG5vdCBzdG9wIGV2ZW50IHByb3BhZ2F0aW9uLCB3ZSBuZWVkIHRvIHN0b3AgaXQgbWFudWFsbHlcbiAgICAgKi9cbiAgICBldmVudFN0b3BwZXIoZXZlbnQ6IEV2ZW50KSB7XG4gICAgICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgIH1cblxuICAgIHRvZ2dsZUZvbGRpbmcoZXZlbnQ6IEV2ZW50KSB7XG4gICAgICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgICAgICB0aGlzLm5hdlNlbGVjdG9yR3JvdXBQcmVzZW50ZXIub25Hcm91cFRvZ2dsZUZvbGRpbmcodGhpcy5ncm91cCgpKTtcbiAgICB9XG5cbiAgICBmb2xkKGV2ZW50OiBFdmVudCkge1xuICAgICAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgICAgICAgdGhpcy5uYXZTZWxlY3Rvckdyb3VwUHJlc2VudGVyLmZvbGQodGhpcy5ncm91cCgpKTtcbiAgICB9XG5cbiAgICB1bmZvbGQoZXZlbnQ6IEV2ZW50KSB7XG4gICAgICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgICAgICB0aGlzLm5hdlNlbGVjdG9yR3JvdXBQcmVzZW50ZXIudW5mb2xkKHRoaXMuZ3JvdXAoKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjb21wdXRlTWF4SGVpZ2h0KCkge1xuICAgICAgICBsZXQgbWF4SGVpZ2h0ID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50LmNsaWVudEhlaWdodDtcbiAgICAgICAgaWYgKHRoaXMuZ3JvdXAoKS5mb2xkZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IG51bWJlck9mRGlzcGxheWFibGVDaGlsZHJlbiA9IGNvbXB1dGVOdW1iZXJPZkRpc3BsYXlhYmxlQ2hpbGRyZW5PblVuZm9sZCh0aGlzLmdyb3VwKCkpO1xuICAgICAgICAgICAgbWF4SGVpZ2h0ID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50LmNsaWVudEhlaWdodCAqIG51bWJlck9mRGlzcGxheWFibGVDaGlsZHJlbjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYCR7bWF4SGVpZ2h0fXB4YDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZUFsaWFzQm91bmRlZENsaWVudFJlY3QoKSB7XG4gICAgICAgIGNvbnN0IGVsID0gdGhpcy5hbGlhc0VsKCk/Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIGlmIChlbCkge1xuICAgICAgICAgICAgY29uc3QgYm91bmRlZENsaWVudFJlY3QgPSB7XG4gICAgICAgICAgICAgICAgb2Zmc2V0V2lkdGg6IGVsLm9mZnNldFdpZHRoLFxuICAgICAgICAgICAgICAgIG9mZnNldEhlaWdodDogZWwub2Zmc2V0SGVpZ2h0LFxuICAgICAgICAgICAgICAgIHNjcm9sbFdpZHRoOiBlbC5zY3JvbGxXaWR0aCxcbiAgICAgICAgICAgICAgICBzY3JvbGxIZWlnaHQ6IGVsLnNjcm9sbEhlaWdodCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAoSlNPTi5zdHJpbmdpZnkodGhpcy5hbGlhc0JvdW5kZWRDbGllbnRSZWN0KCkpICE9PSBKU09OLnN0cmluZ2lmeShib3VuZGVkQ2xpZW50UmVjdCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFsaWFzQm91bmRlZENsaWVudFJlY3Quc2V0KGJvdW5kZWRDbGllbnRSZWN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIjwhLS0gZXNsaW50LWRpc2FibGUgQGFuZ3VsYXItZXNsaW50L3RlbXBsYXRlL2ludGVyYWN0aXZlLXN1cHBvcnRzLWZvY3VzIC0tPlxuQGlmIChuYXZTZWxlY3Rvckdyb3VwUHJlc2VudGVyLmV4cGFuZGVkKCkpIHtcbiAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiY29udGVudFwiXG4gICAgICAgIGFwVG9vbHRpcFBvc2l0aW9uPVwicmlnaHRcIlxuICAgICAgICBbYXBUb29sdGlwXT1cInRvb2x0aXBDb250ZW50KClcIlxuICAgICAgICBbYXBUb29sdGlwRGlzYWJsZWRdPVwidG9vbHRpcERpc2FibGVkKClcIlxuICAgICAgICBbYXBUcmVlTm9kZUFjY2Vzc2liaWxpdHldPVwiZ3JvdXAoKVwiXG4gICAgICAgIChrZXlkb3duLnNwYWNlKT1cIm9uS2V5ZG93blNwYWNlT3JFbnRlcigkZXZlbnQpXCJcbiAgICAgICAgKGtleWRvd24uZW50ZXIpPVwib25LZXlkb3duU3BhY2VPckVudGVyKCRldmVudClcIlxuICAgICAgICAoY2xpY2spPVwidG9nZ2xlRm9sZGluZygkZXZlbnQpXCI+XG4gICAgICAgIEBpZiAobmF2U2VsZWN0b3JHcm91cFByZXNlbnRlci5pc011bHRpcGxlTW9kZUVuYWJsZWQoKSkge1xuICAgICAgICAgICAgPGFwLWNoZWNrYm94XG4gICAgICAgICAgICAgICAgW25hbWVdPVwiZ3JvdXAoKS51aWRcIlxuICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cImdyb3VwKCkuc2VsZWN0ZWRcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhZ3JvdXAoKS5zZWxlY3RhYmxlXCJcbiAgICAgICAgICAgICAgICBbaW5kZXRlcm1pbmF0ZV09XCJncm91cCgpLnVuZGV0ZXJtaW5lZFNlbGVjdGlvblwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImV2ZW50U3RvcHBlcigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uR3JvdXBTZWxlY3RlZCgpXCIgLz5cbiAgICAgICAgfVxuXG4gICAgICAgIDxhcC1zeW1ib2xcbiAgICAgICAgICAgIHN5bWJvbElkPVwiZm9sZGVyXCJcbiAgICAgICAgICAgIHNpemU9XCJzbVwiIC8+XG5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICNhbGlhc1xuICAgICAgICAgICAgY2xhc3M9XCJjYXB0aW9uXCI+XG4gICAgICAgICAgICB7eyBncm91cCgpLmFsaWFzIH19XG4gICAgICAgIDwvc3Bhbj5cblxuICAgICAgICBAaWYgKGdyb3VwKCkuZGlzcGxheVRva2VuSW52YWxpZCkge1xuICAgICAgICAgICAgPGFwLXN5bWJvbFxuICAgICAgICAgICAgICAgIHN5bWJvbElkPVwiZXJyb3JfZmlsbFwiXG4gICAgICAgICAgICAgICAgc2l6ZT1cInNtXCIgLz5cbiAgICAgICAgfVxuXG4gICAgICAgIEBpZiAoZ3JvdXAoKS5kaXNwbGF5Q291bnRlcikge1xuICAgICAgICAgICAgPGFwLWNvdW50ZXJcbiAgICAgICAgICAgICAgICBjb2xvcj1cIm9yYW5nZVwiXG4gICAgICAgICAgICAgICAgc2l6ZT1cIm5vcm1hbFwiXG4gICAgICAgICAgICAgICAgW2JhY2tncm91bmRdPVwiZmFsc2VcIj5cbiAgICAgICAgICAgICAgICB7eyBncm91cCgpLmNvdW50ZXIgfX1cbiAgICAgICAgICAgIDwvYXAtY291bnRlcj5cbiAgICAgICAgfVxuXG4gICAgICAgIDxhcC1zeW1ib2xcbiAgICAgICAgICAgIHNpemU9XCJzbVwiXG4gICAgICAgICAgICBjbGFzcz1cImZvbGRpbmctYnV0dG9uXCJcbiAgICAgICAgICAgIFtzeW1ib2xJZF09XCJmb2xkU3ltYm9sKClcIiAvPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdlxuICAgICAgICBjbGFzcz1cImNoaWxkcmVuLWNvbnRhaW5lclwiXG4gICAgICAgIFtAYWNjb3JkaW9uXT1cIntcbiAgICAgICAgICAgIHZhbHVlOiBhbmltYXRpb25TdGF0ZSgpLFxuICAgICAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgICAgICAgbWF4SGVpZ2h0OiBtYXhIZWlnaHQoKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH1cIj5cbiAgICAgICAgQGlmICghZm9sZGVkV2l0aERlbGF5KCkpIHtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGlsZHJlblwiPlxuICAgICAgICAgICAgICAgIEBmb3IgKGNoaWxkIG9mIGdyb3VwKCkuY2hpbGRyZW47IHRyYWNrIGNoaWxkLnVpZCkge1xuICAgICAgICAgICAgICAgICAgICBAaWYgKCFjaGlsZC5oaWRkZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxhcC1uYXYtc2VsZWN0b3ItbGVhZlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsZWFmXT1cImNoaWxkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYWN0aW9uQ2xpY2tlZCk9XCJhY3Rpb25DbGlja2VkLmVtaXQoJGV2ZW50KVwiIC8+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgIDwvZGl2PlxufSBAZWxzZSB7XG4gICAgPGRpdlxuICAgICAgICBjbGFzcz1cImNvbnRlbnRcIlxuICAgICAgICBhcFRvb2x0aXBQb3NpdGlvbj1cInJpZ2h0XCJcbiAgICAgICAgW2NsYXNzLnRva2VuLWludmFsaWRdPVwiZ3JvdXAoKS5kaXNwbGF5VG9rZW5JbnZhbGlkXCJcbiAgICAgICAgW2NsYXNzLm11bHRpcGxlLW1vZGVdPVwibmF2U2VsZWN0b3JHcm91cFByZXNlbnRlci5pc011bHRpcGxlTW9kZUVuYWJsZWQoKVwiXG4gICAgICAgIFthcFRvb2x0aXBdPVwidG9vbHRpcENvbnRlbnQoKVwiXG4gICAgICAgIFthcFRvb2x0aXBEaXNhYmxlZF09XCJ0b29sdGlwRGlzYWJsZWQoKVwiXG4gICAgICAgIFthcFRyZWVOb2RlQWNjZXNzaWJpbGl0eV09XCJncm91cCgpXCJcbiAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUZvbGRpbmcoJGV2ZW50KVwiXG4gICAgICAgIChrZXlkb3duLnNwYWNlKT1cIm9uS2V5ZG93blNwYWNlT3JFbnRlcigkZXZlbnQpXCJcbiAgICAgICAgKGtleWRvd24uZW50ZXIpPVwib25LZXlkb3duU3BhY2VPckVudGVyKCRldmVudClcIj5cbiAgICAgICAgQGlmIChuYXZTZWxlY3Rvckdyb3VwUHJlc2VudGVyLmlzTXVsdGlwbGVNb2RlRW5hYmxlZCgpKSB7XG4gICAgICAgICAgICA8YXAtY2hlY2tib3hcbiAgICAgICAgICAgICAgICBbbmFtZV09XCJncm91cCgpLnVpZFwiXG4gICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiZ3JvdXAoKS5zZWxlY3RlZFwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFncm91cCgpLnNlbGVjdGFibGVcIlxuICAgICAgICAgICAgICAgIFtpbmRldGVybWluYXRlXT1cImdyb3VwKCkudW5kZXRlcm1pbmVkU2VsZWN0aW9uXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiZXZlbnRTdG9wcGVyKCRldmVudClcIlxuICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25Hcm91cFNlbGVjdGVkKClcIiAvPlxuICAgICAgICB9XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cInBpY3R1cmUtdXJsLXNhbXBsZS1jb250YWluZXJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwaWN0dXJlLXVybC1zYW1wbGVcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXZhdGFyc1wiPlxuICAgICAgICAgICAgICAgICAgICBAZm9yIChwaWN0dXJlVXJsU2FtcGxlIG9mIGdyb3VwKCkuY2hpbGRyZW5QaWN0dXJlVXJsU2FtcGxlOyB0cmFjayBwaWN0dXJlVXJsU2FtcGxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8YXAtYXZhdGFyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhdmF0YXItc2FtcGxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2l6ZV09XCIyNFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Byb2ZpbGVQaWN0dXJlXT1cInBpY3R1cmVVcmxTYW1wbGUudXJsID8/IHVuZGVmaW5lZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dJbml0aWFsc109XCJwaWN0dXJlVXJsU2FtcGxlLmluaXRpYWxcIiAvPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3RhdHVzXCI+XG4gICAgICAgICAgICAgICAgICAgIEBpZiAoZ3JvdXAoKS5kaXNwbGF5Q291bnRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgPGFwLWNvdW50ZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvdW50ZXItb3ZlcnJpZGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPVwib3JhbmdlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplPVwibm9ybWFsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbm90aWZdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2JhY2tncm91bmRdPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGdyb3VwKCkuY291bnRlciB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9hcC1jb3VudGVyPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRvZ2dsZVwiPlxuICAgICAgICAgICAgICAgIDxhcC1zeW1ib2xcbiAgICAgICAgICAgICAgICAgICAgc2l6ZT1cInNtXCJcbiAgICAgICAgICAgICAgICAgICAgW3N5bWJvbElkXT1cImZvbGRTeW1ib2woKVwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiY2hpbGRyZW4tY29udGFpbmVyXCJcbiAgICAgICAgW0BhY2NvcmRpb25dPVwie1xuICAgICAgICAgICAgdmFsdWU6IGFuaW1hdGlvblN0YXRlKCksXG4gICAgICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICAgICAgICBtYXhIZWlnaHQ6IG1heEhlaWdodCgpLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfVwiPlxuICAgICAgICBAaWYgKCFmb2xkZWRXaXRoRGVsYXkoKSkge1xuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoaWxkcmVuXCI+XG4gICAgICAgICAgICAgICAgQGZvciAoY2hpbGQgb2YgZ3JvdXAoKS5jaGlsZHJlbjsgdHJhY2sgY2hpbGQudWlkKSB7XG4gICAgICAgICAgICAgICAgICAgIEBpZiAoIWNoaWxkLmhpZGRlbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgPGFwLW5hdi1zZWxlY3Rvci1sZWFmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xlYWZdPVwiY2hpbGRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhY3Rpb25DbGlja2VkKT1cImFjdGlvbkNsaWNrZWQuZW1pdCgkZXZlbnQpXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgPC9kaXY+XG59XG4iXX0=
|