@eui/components 17.0.0-next.22 → 17.0.0-next.23
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/docs/components/EuiAlertComponent.html +36 -1
- package/docs/components/EuiDashboardCardComponent.html +21 -2
- package/docs/components/EuiTimelineComponent.html +48 -48
- package/docs/components/EuiTimelineItemComponent.html +94 -66
- package/docs/components/EuiTreeComponent.html +1 -1
- package/docs/components/EuiTreeListItemComponent.html +1 -1
- package/docs/dependencies.html +2 -2
- package/docs/js/menu-wc.js +12 -12
- package/docs/js/menu-wc_es5.js +1 -1
- package/docs/js/search/search_index.js +2 -2
- package/docs/miscellaneous/variables.html +14 -14
- package/esm2022/eui-alert/eui-alert.component.mjs +10 -6
- package/esm2022/eui-avatar/eui-avatar.component.mjs +2 -2
- package/esm2022/eui-dashboard-card/eui-dashboard-card.component.mjs +8 -4
- package/esm2022/eui-menu/eui-menu-item.component.mjs +2 -2
- package/esm2022/eui-timeline/eui-timeline-item.component.mjs +42 -19
- package/esm2022/eui-timeline/eui-timeline.component.mjs +26 -11
- package/esm2022/eui-tree/eui-tree.component.mjs +4 -4
- package/esm2022/eui-tree-list/eui-tree-list-item.component.mjs +3 -3
- package/eui-alert/eui-alert.component.d.ts +3 -2
- package/eui-alert/eui-alert.component.d.ts.map +1 -1
- package/eui-dashboard-card/eui-dashboard-card.component.d.ts +2 -1
- package/eui-dashboard-card/eui-dashboard-card.component.d.ts.map +1 -1
- package/eui-timeline/eui-timeline-item.component.d.ts +10 -8
- package/eui-timeline/eui-timeline-item.component.d.ts.map +1 -1
- package/eui-timeline/eui-timeline.component.d.ts +3 -3
- package/eui-timeline/eui-timeline.component.d.ts.map +1 -1
- package/fesm2022/eui-components-eui-alert.mjs +9 -5
- package/fesm2022/eui-components-eui-alert.mjs.map +1 -1
- package/fesm2022/eui-components-eui-avatar.mjs +2 -2
- package/fesm2022/eui-components-eui-avatar.mjs.map +1 -1
- package/fesm2022/eui-components-eui-dashboard-card.mjs +7 -3
- package/fesm2022/eui-components-eui-dashboard-card.mjs.map +1 -1
- package/fesm2022/eui-components-eui-menu.mjs +1 -1
- package/fesm2022/eui-components-eui-menu.mjs.map +1 -1
- package/fesm2022/eui-components-eui-timeline.mjs +61 -25
- package/fesm2022/eui-components-eui-timeline.mjs.map +1 -1
- package/fesm2022/eui-components-eui-tree-list.mjs +2 -2
- package/fesm2022/eui-components-eui-tree-list.mjs.map +1 -1
- package/fesm2022/eui-components-eui-tree.mjs +3 -3
- package/fesm2022/eui-components-eui-tree.mjs.map +1 -1
- package/package.json +12 -12
@@ -354,7 +354,7 @@ export class EuiTreeComponent {
|
|
354
354
|
this.treeDataRunTime = this.applyRunTimeLastItems(this.treeDataRunTime);
|
355
355
|
this.runTimeSelectionRecursiveState = this.createRunTimeSelectionRecursiveState(this.processedNodes);
|
356
356
|
this.treeDataRunTimeBackup = structuredClone(this.treeDataRunTime);
|
357
|
-
//
|
357
|
+
// todo It should be configurable, 800, 2 and 400 are hard coded right now
|
358
358
|
if (this.treeDataRunTimeBackup.length > 800) {
|
359
359
|
this.treePagination = new EuiTreePagination(this.treeDataRunTimeBackup, 1, 2, 400);
|
360
360
|
const paginatedData = this.treePagination.getViewData().data;
|
@@ -818,11 +818,11 @@ export class EuiTreeComponent {
|
|
818
818
|
return scrolled.getElementRef().nativeElement === this.cdkScrollableRef.getElementRef().nativeElement;
|
819
819
|
}
|
820
820
|
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.0-rc.2", ngImport: i0, type: EuiTreeComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.ScrollDispatcher }], target: i0.ɵɵFactoryTarget.Component }); }
|
821
|
-
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.0-rc.2", type: EuiTreeComponent, selector: "eui-tree", inputs: { e2eAttr: "e2eAttr", nodes: "nodes", nodeTemplateRef: "nodeTemplateRef", nodeContentMetadataTemplateRef: "nodeContentMetadataTemplateRef", rightContextMenuTemplateRef: "rightContextMenuTemplateRef", expandedIconClass: "expandedIconClass", collapsedIconClass: "collapsedIconClass", expandedSvgIconClass: "expandedSvgIconClass", collapsedSvgIconClass: "collapsedSvgIconClass", isClickTogglingNode: "isClickTogglingNode", isMultiselect: "isMultiselect", isSingleSelect: "isSingleSelect", isRecursiveSelection: "isRecursiveSelection", isRecursiveParentSelection: "isRecursiveParentSelection", showUnderlinedLinks: "showUnderlinedLinks", showLines: "showLines", autoTranslate: "autoTranslate", highlightPath: "highlightPath" }, outputs: { selectionChange: "selectionChange", nodeClick: "nodeClick", nodeToggle: "nodeToggle" }, host: { properties: { "class": "this.cssClasses", "attr.data-e2e": "this.e2eAttr" } }, viewQueries: [{ propertyName: "cdkScrollableRef", first: true, predicate: ["cdkScrollableRef"], descendants: true, read: CdkScrollable }, { propertyName: "treeComponentInstance", first: true, predicate: ["treeComponentInstance"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ul class=\"eui-tree__wrapper\" cdkScrollable #cdkScrollableRef style=\"overflow: auto; max-height: 400px\">\n <cdk-tree\n #treeComponentInstance\n [dataSource]=\"cdkArrayDataSource\"\n [treeControl]=\"cdkTreeControl\"\n [trackBy]=\"trackBy\"\n *ngIf=\"renderTree\"\n class=\"eui-cdk-tree\">\n <!-- There are two states of generic cdk-nested-tree-node declarations.\n First one is without child. No sub rendering.\n -->\n <cdk-nested-tree-node *cdkTreeNodeDef=\"let treeRunTimeItemModel\" class=\"eui-cdk-nested-tree-node\">\n <li\n class=\"eui-tree-node\"\n *ngIf=\"treeRunTimeItemModel\"\n title=\"{{\n getTreeItem(treeRunTimeItemModel?.path)?.node?.treeContentBlock?.tooltipLabel ||\n getTreeItem(treeRunTimeItemModel?.path)?.node?.treeContentBlock?.label\n }}\">\n <div\n class=\"eui-tree-node-wrapper\"\n (click)=\"onNodeClick(treeRunTimeItemModel)\"\n [class.eui-tree-node-wrapper--last]=\"treeRunTimeItemModel.last\"\n [class.eui-tree-node-wrapper--show-lines]=\"showLines && _isMultiLevel\">\n <div class=\"eui-tree-node-wrapper__container\">\n <!--\n Renders node in default or provided template's context.\n Generates onSelect with onSelectFn for developers to send the events from their custom check events.\n Provides id to be used on generic template\n -->\n <ng-container\n [ngTemplateOutlet]=\"nodeTemplateRef || nodeTemplateDefault\"\n [ngTemplateOutletContext]=\"{\n $implicit: getTreeItem(treeRunTimeItemModel?.path)?.node,\n onSelect: onSelectFn(treeRunTimeItemModel.path),\n id: uid + treeRunTimeItemModel.path\n }\">\n </ng-container>\n </div>\n </div>\n </li>\n </cdk-nested-tree-node>\n <!-- This is the tree node template for expandable nodes -->\n <cdk-nested-tree-node\n *cdkTreeNodeDef=\"let treeRunTimeItemModel; when: hasChild\"\n class=\"eui-cdk-nested-tree-node eui-cdk-nested-tree-node--with-child\">\n <li\n class=\"eui-tree-node\"\n *ngIf=\"treeRunTimeItemModel\"\n title=\"{{\n getTreeItem(treeRunTimeItemModel?.path)?.node?.treeContentBlock?.tooltipLabel ||\n getTreeItem(treeRunTimeItemModel?.path)?.node?.treeContentBlock?.label\n }}\">\n <div\n class=\"eui-tree-node-wrapper\"\n [class.eui-tree-node-wrapper--last]=\"treeRunTimeItemModel.last\"\n [class.eui-tree-node-wrapper--show-lines]=\"showLines\">\n <!--Here wraps the node, and listen for node clicks.-->\n <div (click)=\"onNodeClick(treeRunTimeItemModel)\" class=\"eui-tree-node-wrapper__container\">\n <!-- Expand/collapse action button -->\n <button\n euiButton\n euiIconButton\n euiBasicButton\n euiRounded\n euiSizeS\n type=\"button\"\n [attr.aria-label]=\"'Toggle ' + getTreeItem(treeRunTimeItemModel?.path)?.node?.treeContentBlock?.label\"\n (click)=\"onNodeToggle(treeRunTimeItemModel)\"\n cdkTreeNodeToggle\n class=\"eui-tree-node__button\">\n <span\n euiIcon\n *ngIf=\"!cdkTreeControl.isExpanded(treeRunTimeItemModel) && collapsedIconClass\"\n [iconClass]=\"collapsedIconClass\"></span>\n <span\n euiIcon\n *ngIf=\"cdkTreeControl.isExpanded(treeRunTimeItemModel) && expandedIconClass\"\n [iconClass]=\"expandedIconClass\"></span>\n <eui-icon-svg\n *ngIf=\"!cdkTreeControl.isExpanded(treeRunTimeItemModel) && !collapsedIconClass\"\n [icon]=\"expandedSvgIconClass\"></eui-icon-svg>\n <eui-icon-svg\n *ngIf=\"cdkTreeControl.isExpanded(treeRunTimeItemModel) && !expandedIconClass\"\n [icon]=\"collapsedSvgIconClass\"></eui-icon-svg>\n </button>\n <!--\n Renders node in default or provided template's context.\n Generates onSelect with onSelectFn for developers to send the events from their custom check events.\n Provides id to be used on generic template\n -->\n <ng-container\n [ngTemplateOutlet]=\"nodeTemplateRef || nodeTemplateDefault\"\n [ngTemplateOutletContext]=\"{\n $implicit: getTreeItem(treeRunTimeItemModel.path)?.node,\n onSelect: onSelectFn(treeRunTimeItemModel.path),\n id: uid + treeRunTimeItemModel.path,\n path: treeRunTimeItemModel.path\n }\">\n </ng-container>\n </div>\n </div>\n <!--uses cdkTreeNodeOutlet to render children nodes, CdkTreeControl is used to control isExpanded state.-->\n <ul class=\"eui-tree-node\" *ngIf=\"cdkTreeControl.isExpanded(treeRunTimeItemModel)\">\n <ng-container cdkTreeNodeOutlet></ng-container>\n </ul>\n </li>\n </cdk-nested-tree-node>\n </cdk-tree>\n</ul>\n\n<ng-template #nodeTemplateDefault let-node let-onSelect=\"onSelect\" let-id=\"id\" let-path=\"path\">\n <ng-container *ngIf=\"node\">\n <div class=\"eui-tree-node-wrapper__container-left\" [class.eui-tree-node-wrapper__container-left--selected]=\"node?.isSelected\">\n <!--input checkbox area-->\n <input\n euiInputCheckBox\n *ngIf=\"node && node.selectable\"\n type=\"checkbox\"\n id=\"{{ id }}\"\n [checked]=\"!!node?.isSelected\"\n [indeterminate]=\"!!node?.isIndeterminate\"\n (change)=\"onSelect($event)\"\n class=\"eui-u-mr-m\" />\n\n <!--icon area-->\n <ng-container *ngIf=\"node?.treeContentBlock?.iconClass\">\n <eui-icon\n [euiVariant]=\"node?.treeContentBlock?.iconTypeClass || 'primary'\"\n iconClass=\"{{ node?.treeContentBlock?.iconClass }}\"\n euiSizeS\n class=\"eui-u-mr-xs\">\n </eui-icon>\n </ng-container>\n <ng-container *ngIf=\"node?.treeContentBlock?.iconSvgName\">\n <eui-icon-svg\n icon=\"{{ node?.treeContentBlock?.iconSvgName }}\"\n fillColor=\"{{ node?.treeContentBlock?.iconTypeClass || 'grey-100' }}\"\n size=\"s\"\n class=\"eui-u-mr-xs\">\n </eui-icon-svg>\n </ng-container>\n\n <!--chips area-->\n <ng-container *ngIf=\"node?.treeContentBlock?.chips\">\n <eui-chip\n *ngFor=\"let chip of node.treeContentBlock.chips\"\n euiSizeXS\n [euiVariant]=\"chip.typeClass || 'secondary'\"\n [euiOutline]=\"chip.isOutline\"\n class=\"eui-chip--rounded eui-u-mb-none eui-u-mr-xs\">\n <span euiLabel>{{ chip.label }}</span>\n </eui-chip>\n </ng-container>\n\n <!--badge (typeLabel & typeClass) area-->\n <ng-container *ngIf=\"node?.treeContentBlock?.typeLabel\" [ngSwitch]=\"node?.treeContentBlock?.typeClass\">\n <eui-badge euiSizeM [euiVariant]=\"node?.treeContentBlock?.typeClass || 'primary'\" class=\"eui-u-flex-no-shrink eui-u-mr-xs\">\n {{ node?.treeContentBlock?.typeLabel }}\n </eui-badge>\n </ng-container>\n </div>\n\n <!--label area-->\n <div class=\"eui-tree-node-wrapper__container-middle\">\n <label\n *ngIf=\"!node?.treeContentBlock?.url && !node?.treeContentBlock?.urlExternal\"\n euiLabel\n for=\"{{ id }}\"\n class=\"eui-u-text-truncate eui-u-p-2xs\"\n [class.eui-label--selected]=\"\n highlightPath\n ? getRunTimeSelectionRecursiveState(path)?.selectionRecursiveState === 'indeterminate' || node?.isSelected\n : node?.isSelected\n \"\n [class.eui-u-cursor-pointer]=\"node?.selectable\">\n {{ autoTranslate ? (node?.treeContentBlock?.label | translate) : node?.treeContentBlock?.label }}\n </label>\n <label *ngIf=\"node?.treeContentBlock?.url\" euiLabel for=\"{{ id }}\" class=\"eui-u-text-truncate eui-u-p-2xs\">\n <a\n class=\"eui-u-text-link\"\n [class.eui-u-text-link-standalone]=\"!showUnderlinedLinks\"\n [routerLink]=\"node?.treeContentBlock?.url\">\n {{ autoTranslate ? (node?.treeContentBlock?.label | translate) : node?.treeContentBlock?.label }}\n </a>\n </label>\n <label *ngIf=\"node?.treeContentBlock?.urlExternal\" euiLabel for=\"{{ id }}\" class=\"eui-u-text-truncate eui-u-p-2xs\">\n <a\n class=\"eui-u-text-link-external\"\n [class.eui-u-text-link-external-standalone]=\"!showUnderlinedLinks\"\n href=\"{{ node?.treeContentBlock?.urlExternal }}\"\n target=\"{{ node?.treeContentBlock?.urlExternalTarget || 'blank' }}\">\n {{ autoTranslate ? (node?.treeContentBlock?.label | translate) : node?.treeContentBlock?.label }}\n </a>\n </label>\n </div>\n\n <div *ngIf=\"node?.treeContentBlock?.rightContent\" class=\"eui-tree-node-wrapper__container-right\">\n <!--badges area-->\n <ng-container *ngFor=\"let badge of node.treeContentBlock.rightContent?.badges\">\n <eui-badge euiSizeM euiOutline [euiVariant]=\"badge.typeClass || 'secondary'\" class=\"eui-u-ml-xs\">\n <span euiLabel>{{ badge.label }}</span>\n </eui-badge>\n </ng-container>\n\n <!--chips area-->\n <ng-container *ngFor=\"let chip of node.treeContentBlock.rightContent?.chips\">\n <eui-chip\n euiSizeXS\n [euiVariant]=\"chip.typeClass || 'secondary'\"\n [euiOutline]=\"chip.isOutline\"\n class=\"eui-chip--rounded eui-u-mb-none eui-u-ml-xs\">\n <span euiLabel>{{ chip.label }}</span>\n </eui-chip>\n </ng-container>\n\n <!--Context menu-->\n <ng-container *ngIf=\"node.treeContentBlock.rightContent?.contextMenuMetaData && rightContextMenuTemplateRef\">\n <eui-dropdown class=\"eui-u-ml-xs\">\n <button euiButton euiSizeS euiRounded euiIconButton euiBasicButton euiSecondary [attr.aria-label]=\"'Options menu'\">\n <eui-icon-svg icon=\"eui-ellipsis-vertical\"></eui-icon-svg>\n </button>\n <eui-dropdown-content>\n <ng-template\n [ngTemplateOutlet]=\"rightContextMenuTemplateRef\"\n [ngTemplateOutletContext]=\"{\n $implicit: node?.treeContentBlock?.rightContent?.contextMenuMetaData,\n metadata: node?.treeContentBlock?.rightContent?.contextMenuMetaData\n }\">\n </ng-template>\n </eui-dropdown-content>\n </eui-dropdown>\n </ng-container>\n </div>\n\n <!--metadata, uses the help of ng template to generate dynamic expand variable without handling state -->\n <ng-container\n *ngIf=\"node.treeContentBlock?.metadata && nodeContentMetadataTemplateRef\"\n [ngTemplateOutlet]=\"nodeContentMetadataContainer\"\n [ngTemplateOutletContext]=\"{\n $implicit: { expanded: false }\n }\">\n </ng-container>\n <ng-template #nodeContentMetadataContainer let-metaDataContainer>\n <button\n euiButton\n euiBasicButton\n euiIconButton\n euiRounded\n euiSizeS\n type=\"button\"\n aria-label=\"expand collapse tree item\"\n (click)=\"metaDataContainer.expanded = !metaDataContainer.expanded\">\n <eui-icon-svg [icon]=\"metaDataContainer.expanded ? 'eui-chevron-down' : 'eui-chevron-forward'\"></eui-icon-svg>\n </button>\n <div *ngIf=\"metaDataContainer.expanded\" class=\"eui-tree-node__metacontent\">\n <!--passing metadata of the node content to provided template-ref:nodeContentMetadataTemplateRef-->\n <ng-template\n [ngTemplateOutlet]=\"nodeContentMetadataTemplateRef\"\n [ngTemplateOutletContext]=\"{\n $implicit: node?.treeContentBlock?.metadata,\n metadata: node?.treeContentBlock?.metadata\n }\">\n </ng-template>\n </div>\n </ng-template>\n </ng-container>\n</ng-template>\n", styles: [".eui-tree{display:flex;overflow-x:hidden;overflow-y:auto;position:relative;width:100%}.eui-tree::-webkit-scrollbar{display:inherit;height:6px;width:6px;background-color:var(--eui-base-color-grey-5)}.eui-tree::-webkit-scrollbar-thumb{background-color:var(--eui-base-color-grey-20);border-radius:5rem}.eui-tree::-webkit-scrollbar-thumb:hover{background-color:var(--eui-base-color-grey-50)}.eui-tree::-webkit-scrollbar-track{background-color:var(--eui-base-color-grey-5);border-radius:0}.eui-tree .eui-tree__wrapper{display:flex;list-style:none;margin:0;padding:var(--eui-base-spacing-2xs);position:relative;width:100%}.eui-tree .eui-tree__wrapper .eui-cdk-tree{display:flex;flex-direction:column;width:100%}.eui-tree .eui-tree__wrapper .eui-cdk-tree .eui-cdk-nested-tree-node{display:flex;width:auto}.eui-tree .eui-tree__wrapper .eui-cdk-tree .eui-cdk-nested-tree-node:not(.eui-cdk-nested-tree-node--with-child){padding-inline-start:var(--eui-base-spacing-xl)}.eui-tree .eui-tree__wrapper .eui-cdk-tree .eui-cdk-nested-tree-node:not(.eui-cdk-nested-tree-node--with-child) .eui-tree-node-wrapper.eui-tree-node-wrapper--show-lines:before{position:relative;left:calc(-1 * var(--eui-base-spacing-l) + var(--eui-base-spacing-2xs));display:inline-flex;border-left:1px solid var(--eui-base-color-grey-25);content:\"\";height:100%}.eui-tree .eui-tree__wrapper .eui-cdk-tree .eui-cdk-nested-tree-node:not(.eui-cdk-nested-tree-node--with-child) .eui-tree-node-wrapper.eui-tree-node-wrapper--show-lines.eui-tree-node-wrapper--last:before{align-self:flex-start;display:inline-flex;height:50%;position:relative}.eui-tree .eui-tree__wrapper .eui-cdk-tree .eui-cdk-nested-tree-node:not(.eui-cdk-nested-tree-node--with-child) .eui-tree-node-wrapper.eui-tree-node-wrapper--show-lines .eui-tree-node-wrapper__container:before{position:relative;left:0;display:inline-flex;width:var(--eui-base-spacing-l);border-bottom:1px solid var(--eui-base-color-grey-25);border-left:1px solid var(--eui-base-color-grey-25);content:\"\";margin-left:calc(-1 * var(--eui-base-spacing-l) + var(--eui-base-spacing-2xs))}.eui-tree .eui-tree__wrapper .eui-cdk-tree .eui-cdk-nested-tree-node--with-child{display:flex;width:100%}.eui-tree .eui-tree__wrapper .eui-tree-node{display:flex;flex-direction:column;width:100%}.eui-tree .eui-tree__wrapper .eui-tree-node__metacontent{display:flex}.eui-tree .eui-tree__wrapper .eui-tree-node__button{margin-left:calc(-1 * var(--eui-base-spacing-2xs));margin-right:var(--eui-base-spacing-2xs)}.eui-tree .eui-tree__wrapper ul.eui-tree-node{padding-inline-start:var(--eui-base-spacing-l)}.eui-tree .eui-tree__wrapper .eui-tree-node-wrapper{align-items:center;display:flex;min-height:var(--eui-base-spacing-xl);width:100%}.eui-tree .eui-tree__wrapper .eui-tree-node-wrapper:hover{background-color:var(--eui-base-color-grey-5)}.eui-tree .eui-tree__wrapper .eui-tree-node-wrapper__container{align-items:center;display:flex;width:100%}.eui-tree .eui-tree__wrapper .eui-tree-node-wrapper__container-left{align-items:center;display:flex;justify-content:flex-start}.eui-tree .eui-tree__wrapper .eui-tree-node-wrapper__container-middle{align-items:center;display:flex;justify-content:flex-start;overflow:hidden;width:100%}.eui-tree .eui-tree__wrapper .eui-tree-node-wrapper__container-right{align-items:center;display:flex;justify-content:flex-end;margin-left:auto}.eui-tree:not(.eui-tree--with-children) .eui-tree__wrapper .eui-cdk-tree .eui-cdk-nested-tree-node{padding-inline-start:2px}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i3.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i4.EuiInputCheckboxComponent, selector: "input[euiInputCheckBox]", inputs: ["indeterminate", "isInvalid", "styleClass", "checked", "id"], outputs: ["indeterminateChange"] }, { kind: "directive", type: i5.CdkNestedTreeNode, selector: "cdk-nested-tree-node", inputs: ["role", "disabled", "tabIndex"], exportAs: ["cdkNestedTreeNode"] }, { kind: "directive", type: i5.CdkTreeNodeDef, selector: "[cdkTreeNodeDef]", inputs: ["cdkTreeNodeDefWhen"] }, { kind: "directive", type: i5.CdkTreeNodeToggle, selector: "[cdkTreeNodeToggle]", inputs: ["cdkTreeNodeToggleRecursive"] }, { kind: "component", type: i5.CdkTree, selector: "cdk-tree", inputs: ["dataSource", "treeControl", "trackBy"], exportAs: ["cdkTree"] }, { kind: "directive", type: i5.CdkTreeNodeOutlet, selector: "[cdkTreeNodeOutlet]" }, { kind: "component", type: i6.EuiButtonComponent, selector: "button[euiButton], a[euiButton]", inputs: ["e2eAttr", "id", "euiBasicButton", "euiButtonCall", "euiBlockButton", "isLoading", "euiIconButton", "euiLineWrap"], outputs: ["buttonClick"] }, { kind: "component", type: i7.EuiIconComponent, selector: "div[euiIcon], span[euiIcon], i[euiIcon], eui-icon", inputs: ["aria-label", "iconClass", "isLoading"] }, { kind: "component", type: i7.EuiIconSvgComponent, selector: "eui-icon-svg, span[euiIconSvg], i[euiIconSvg]", inputs: ["icon", "size", "fillColor", "set", "ariaLabelledby", "role", "style", "iconUrl", "transform", "aria-label", "ariaHidden", "focusable", "isLoading"] }, { kind: "component", type: i8.EuiLabelComponent, selector: "label[euiLabel], span[euiLabel], div[euiLabel], a[euiLabel], eui-label, label[euiSublabel], span[euiSublabel], div[euiSublabel], a[euiSublabel], eui-sublabel", inputs: ["euiRequired", "euiReadonly", "euiSublabel"] }, { kind: "component", type: i9.EuiBadgeComponent, selector: "div[euiBadge], span[euiBadge], eui-badge", inputs: ["aria-label"] }, { kind: "component", type: i10.EuiChipComponent, selector: "eui-chip, span[euiChip], li[euiChip]", inputs: ["euiInternalId", "tooltipMessage", "id", "data", "isChipRemovable", "isSquared"], outputs: ["remove"] }, { kind: "component", type: i11.EuiDropdownComponent, selector: "eui-dropdown", inputs: ["e2eAttr", "tabIndex", "width", "position", "isDropDownRightAligned", "isClosedOnClickInside", "isLabelUpdatedFromSelectedItem", "isExpandOnHover", "hasTabNavigation"] }, { kind: "directive", type: i11.EuiDropdownContentDirective, selector: "eui-dropdown-content" }, { kind: "directive", type: i1.CdkScrollable, selector: "[cdk-scrollable], [cdkScrollable]" }, { kind: "pipe", type: i12.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
821
|
+
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.0-rc.2", type: EuiTreeComponent, selector: "eui-tree", inputs: { e2eAttr: "e2eAttr", nodes: "nodes", nodeTemplateRef: "nodeTemplateRef", nodeContentMetadataTemplateRef: "nodeContentMetadataTemplateRef", rightContextMenuTemplateRef: "rightContextMenuTemplateRef", expandedIconClass: "expandedIconClass", collapsedIconClass: "collapsedIconClass", expandedSvgIconClass: "expandedSvgIconClass", collapsedSvgIconClass: "collapsedSvgIconClass", isClickTogglingNode: "isClickTogglingNode", isMultiselect: "isMultiselect", isSingleSelect: "isSingleSelect", isRecursiveSelection: "isRecursiveSelection", isRecursiveParentSelection: "isRecursiveParentSelection", showUnderlinedLinks: "showUnderlinedLinks", showLines: "showLines", autoTranslate: "autoTranslate", highlightPath: "highlightPath" }, outputs: { selectionChange: "selectionChange", nodeClick: "nodeClick", nodeToggle: "nodeToggle" }, host: { properties: { "class": "this.cssClasses", "attr.data-e2e": "this.e2eAttr" } }, viewQueries: [{ propertyName: "cdkScrollableRef", first: true, predicate: ["cdkScrollableRef"], descendants: true, read: CdkScrollable }, { propertyName: "treeComponentInstance", first: true, predicate: ["treeComponentInstance"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ul class=\"eui-tree__wrapper\" cdkScrollable #cdkScrollableRef>\n <cdk-tree\n #treeComponentInstance\n [dataSource]=\"cdkArrayDataSource\"\n [treeControl]=\"cdkTreeControl\"\n [trackBy]=\"trackBy\"\n *ngIf=\"renderTree\"\n class=\"eui-cdk-tree\">\n <!-- There are two states of generic cdk-nested-tree-node declarations.\n First one is without child. No sub rendering.\n -->\n <cdk-nested-tree-node *cdkTreeNodeDef=\"let treeRunTimeItemModel\" class=\"eui-cdk-nested-tree-node\">\n <li\n class=\"eui-tree-node\"\n *ngIf=\"treeRunTimeItemModel\"\n title=\"{{\n getTreeItem(treeRunTimeItemModel?.path)?.node?.treeContentBlock?.tooltipLabel ||\n getTreeItem(treeRunTimeItemModel?.path)?.node?.treeContentBlock?.label\n }}\">\n <div\n class=\"eui-tree-node-wrapper\"\n (click)=\"onNodeClick(treeRunTimeItemModel)\"\n [class.eui-tree-node-wrapper--last]=\"treeRunTimeItemModel.last\"\n [class.eui-tree-node-wrapper--show-lines]=\"showLines && _isMultiLevel\">\n <div class=\"eui-tree-node-wrapper__container\">\n <!--\n Renders node in default or provided template's context.\n Generates onSelect with onSelectFn for developers to send the events from their custom check events.\n Provides id to be used on generic template\n -->\n <ng-container\n [ngTemplateOutlet]=\"nodeTemplateRef || nodeTemplateDefault\"\n [ngTemplateOutletContext]=\"{\n $implicit: getTreeItem(treeRunTimeItemModel?.path)?.node,\n onSelect: onSelectFn(treeRunTimeItemModel.path),\n id: uid + treeRunTimeItemModel.path\n }\">\n </ng-container>\n </div>\n </div>\n </li>\n </cdk-nested-tree-node>\n <!-- This is the tree node template for expandable nodes -->\n <cdk-nested-tree-node\n *cdkTreeNodeDef=\"let treeRunTimeItemModel; when: hasChild\"\n class=\"eui-cdk-nested-tree-node eui-cdk-nested-tree-node--with-child\">\n <li\n class=\"eui-tree-node\"\n *ngIf=\"treeRunTimeItemModel\"\n title=\"{{\n getTreeItem(treeRunTimeItemModel?.path)?.node?.treeContentBlock?.tooltipLabel ||\n getTreeItem(treeRunTimeItemModel?.path)?.node?.treeContentBlock?.label\n }}\">\n <div\n class=\"eui-tree-node-wrapper\"\n [class.eui-tree-node-wrapper--last]=\"treeRunTimeItemModel.last\"\n [class.eui-tree-node-wrapper--show-lines]=\"showLines\">\n <!--Here wraps the node, and listen for node clicks.-->\n <div (click)=\"onNodeClick(treeRunTimeItemModel)\" class=\"eui-tree-node-wrapper__container\">\n <!-- Expand/collapse action button -->\n <button\n euiButton\n euiIconButton\n euiBasicButton\n euiRounded\n euiSizeS\n type=\"button\"\n [attr.aria-label]=\"'Toggle ' + getTreeItem(treeRunTimeItemModel?.path)?.node?.treeContentBlock?.label\"\n (click)=\"onNodeToggle(treeRunTimeItemModel)\"\n cdkTreeNodeToggle\n class=\"eui-tree-node__button\">\n <span\n euiIcon\n *ngIf=\"!cdkTreeControl.isExpanded(treeRunTimeItemModel) && collapsedIconClass\"\n [iconClass]=\"collapsedIconClass\"></span>\n <span\n euiIcon\n *ngIf=\"cdkTreeControl.isExpanded(treeRunTimeItemModel) && expandedIconClass\"\n [iconClass]=\"expandedIconClass\"></span>\n <eui-icon-svg\n *ngIf=\"!cdkTreeControl.isExpanded(treeRunTimeItemModel) && !collapsedIconClass\"\n [icon]=\"expandedSvgIconClass\"></eui-icon-svg>\n <eui-icon-svg\n *ngIf=\"cdkTreeControl.isExpanded(treeRunTimeItemModel) && !expandedIconClass\"\n [icon]=\"collapsedSvgIconClass\"></eui-icon-svg>\n </button>\n <!--\n Renders node in default or provided template's context.\n Generates onSelect with onSelectFn for developers to send the events from their custom check events.\n Provides id to be used on generic template\n -->\n <ng-container\n [ngTemplateOutlet]=\"nodeTemplateRef || nodeTemplateDefault\"\n [ngTemplateOutletContext]=\"{\n $implicit: getTreeItem(treeRunTimeItemModel.path)?.node,\n onSelect: onSelectFn(treeRunTimeItemModel.path),\n id: uid + treeRunTimeItemModel.path,\n path: treeRunTimeItemModel.path\n }\">\n </ng-container>\n </div>\n </div>\n <!--uses cdkTreeNodeOutlet to render children nodes, CdkTreeControl is used to control isExpanded state.-->\n <ul class=\"eui-tree-node\" *ngIf=\"cdkTreeControl.isExpanded(treeRunTimeItemModel)\">\n <ng-container cdkTreeNodeOutlet></ng-container>\n </ul>\n </li>\n </cdk-nested-tree-node>\n </cdk-tree>\n</ul>\n\n<ng-template #nodeTemplateDefault let-node let-onSelect=\"onSelect\" let-id=\"id\" let-path=\"path\">\n <ng-container *ngIf=\"node\">\n <div class=\"eui-tree-node-wrapper__container-left\" [class.eui-tree-node-wrapper__container-left--selected]=\"node?.isSelected\">\n <!--input checkbox area-->\n <input\n euiInputCheckBox\n *ngIf=\"node && node.selectable\"\n type=\"checkbox\"\n id=\"{{ id }}\"\n [checked]=\"!!node?.isSelected\"\n [indeterminate]=\"!!node?.isIndeterminate\"\n (change)=\"onSelect($event)\"\n class=\"eui-u-mr-m\" />\n\n <!--icon area-->\n <ng-container *ngIf=\"node?.treeContentBlock?.iconClass\">\n <eui-icon\n [euiVariant]=\"node?.treeContentBlock?.iconTypeClass || 'primary'\"\n iconClass=\"{{ node?.treeContentBlock?.iconClass }}\"\n euiSizeS\n class=\"eui-u-mr-xs\">\n </eui-icon>\n </ng-container>\n <ng-container *ngIf=\"node?.treeContentBlock?.iconSvgName\">\n <eui-icon-svg\n icon=\"{{ node?.treeContentBlock?.iconSvgName }}\"\n fillColor=\"{{ node?.treeContentBlock?.iconTypeClass || 'grey-100' }}\"\n size=\"s\"\n class=\"eui-u-mr-xs\">\n </eui-icon-svg>\n </ng-container>\n\n <!--chips area-->\n <ng-container *ngIf=\"node?.treeContentBlock?.chips\">\n <eui-chip\n *ngFor=\"let chip of node.treeContentBlock.chips\"\n euiSizeXS\n [euiVariant]=\"chip.typeClass || 'secondary'\"\n [euiOutline]=\"chip.isOutline\"\n class=\"eui-chip--rounded eui-u-mb-none eui-u-mr-xs\">\n <span euiLabel>{{ chip.label }}</span>\n </eui-chip>\n </ng-container>\n\n <!--badge (typeLabel & typeClass) area-->\n <ng-container *ngIf=\"node?.treeContentBlock?.typeLabel\" [ngSwitch]=\"node?.treeContentBlock?.typeClass\">\n <eui-badge euiSizeM [euiVariant]=\"node?.treeContentBlock?.typeClass || 'primary'\" class=\"eui-u-flex-no-shrink eui-u-mr-xs\">\n {{ node?.treeContentBlock?.typeLabel }}\n </eui-badge>\n </ng-container>\n </div>\n\n <!--label area-->\n <div class=\"eui-tree-node-wrapper__container-middle\">\n <label\n *ngIf=\"!node?.treeContentBlock?.url && !node?.treeContentBlock?.urlExternal\"\n euiLabel\n for=\"{{ id }}\"\n class=\"eui-u-text-truncate eui-u-p-2xs\"\n [class.eui-label--selected]=\"\n highlightPath\n ? getRunTimeSelectionRecursiveState(path)?.selectionRecursiveState === 'indeterminate' || node?.isSelected\n : node?.isSelected\n \"\n [class.eui-u-cursor-pointer]=\"node?.selectable\">\n {{ autoTranslate ? (node?.treeContentBlock?.label | translate) : node?.treeContentBlock?.label }}\n </label>\n <label *ngIf=\"node?.treeContentBlock?.url\" euiLabel for=\"{{ id }}\" class=\"eui-u-text-truncate eui-u-p-2xs\">\n <a\n class=\"eui-u-text-link\"\n [class.eui-u-text-link-standalone]=\"!showUnderlinedLinks\"\n [routerLink]=\"node?.treeContentBlock?.url\">\n {{ autoTranslate ? (node?.treeContentBlock?.label | translate) : node?.treeContentBlock?.label }}\n </a>\n </label>\n <label *ngIf=\"node?.treeContentBlock?.urlExternal\" euiLabel for=\"{{ id }}\" class=\"eui-u-text-truncate eui-u-p-2xs\">\n <a\n class=\"eui-u-text-link-external\"\n [class.eui-u-text-link-external-standalone]=\"!showUnderlinedLinks\"\n href=\"{{ node?.treeContentBlock?.urlExternal }}\"\n target=\"{{ node?.treeContentBlock?.urlExternalTarget || 'blank' }}\">\n {{ autoTranslate ? (node?.treeContentBlock?.label | translate) : node?.treeContentBlock?.label }}\n </a>\n </label>\n </div>\n\n <div *ngIf=\"node?.treeContentBlock?.rightContent\" class=\"eui-tree-node-wrapper__container-right\">\n <!--badges area-->\n <ng-container *ngFor=\"let badge of node.treeContentBlock.rightContent?.badges\">\n <eui-badge euiSizeM euiOutline [euiVariant]=\"badge.typeClass || 'secondary'\" class=\"eui-u-ml-xs\">\n <span euiLabel>{{ badge.label }}</span>\n </eui-badge>\n </ng-container>\n\n <!--chips area-->\n <ng-container *ngFor=\"let chip of node.treeContentBlock.rightContent?.chips\">\n <eui-chip\n euiSizeXS\n [euiVariant]=\"chip.typeClass || 'secondary'\"\n [euiOutline]=\"chip.isOutline\"\n class=\"eui-chip--rounded eui-u-mb-none eui-u-ml-xs\">\n <span euiLabel>{{ chip.label }}</span>\n </eui-chip>\n </ng-container>\n\n <!--Context menu-->\n <ng-container *ngIf=\"node.treeContentBlock.rightContent?.contextMenuMetaData && rightContextMenuTemplateRef\">\n <eui-dropdown class=\"eui-u-ml-xs\">\n <button euiButton euiSizeS euiRounded euiIconButton euiBasicButton euiSecondary [attr.aria-label]=\"'Options menu'\">\n <eui-icon-svg icon=\"eui-ellipsis-vertical\"></eui-icon-svg>\n </button>\n <eui-dropdown-content>\n <ng-template\n [ngTemplateOutlet]=\"rightContextMenuTemplateRef\"\n [ngTemplateOutletContext]=\"{\n $implicit: node?.treeContentBlock?.rightContent?.contextMenuMetaData,\n metadata: node?.treeContentBlock?.rightContent?.contextMenuMetaData\n }\">\n </ng-template>\n </eui-dropdown-content>\n </eui-dropdown>\n </ng-container>\n </div>\n\n <!--metadata, uses the help of ng template to generate dynamic expand variable without handling state -->\n <ng-container\n *ngIf=\"node.treeContentBlock?.metadata && nodeContentMetadataTemplateRef\"\n [ngTemplateOutlet]=\"nodeContentMetadataContainer\"\n [ngTemplateOutletContext]=\"{\n $implicit: { expanded: false }\n }\">\n </ng-container>\n <ng-template #nodeContentMetadataContainer let-metaDataContainer>\n <button\n euiButton\n euiBasicButton\n euiIconButton\n euiRounded\n euiSizeS\n type=\"button\"\n aria-label=\"expand collapse tree item\"\n (click)=\"metaDataContainer.expanded = !metaDataContainer.expanded\">\n <eui-icon-svg [icon]=\"metaDataContainer.expanded ? 'eui-chevron-down' : 'eui-chevron-forward'\"></eui-icon-svg>\n </button>\n <div *ngIf=\"metaDataContainer.expanded\" class=\"eui-tree-node__metacontent\">\n <!--passing metadata of the node content to provided template-ref:nodeContentMetadataTemplateRef-->\n <ng-template\n [ngTemplateOutlet]=\"nodeContentMetadataTemplateRef\"\n [ngTemplateOutletContext]=\"{\n $implicit: node?.treeContentBlock?.metadata,\n metadata: node?.treeContentBlock?.metadata\n }\">\n </ng-template>\n </div>\n </ng-template>\n </ng-container>\n</ng-template>\n", styles: [".eui-tree{display:flex;overflow-x:hidden;overflow-y:auto;position:relative;width:100%}.eui-tree::-webkit-scrollbar{display:inherit;height:6px;width:6px;background-color:var(--eui-base-color-grey-5)}.eui-tree::-webkit-scrollbar-thumb{background-color:var(--eui-base-color-grey-20);border-radius:5rem}.eui-tree::-webkit-scrollbar-thumb:hover{background-color:var(--eui-base-color-grey-50)}.eui-tree::-webkit-scrollbar-track{background-color:var(--eui-base-color-grey-5);border-radius:0}.eui-tree .eui-tree__wrapper{display:flex;list-style:none;margin:0;padding:var(--eui-base-spacing-2xs);position:relative;width:100%;overflow-y:auto}.eui-tree .eui-tree__wrapper::-webkit-scrollbar{display:inherit;height:6px;width:6px;background-color:var(--eui-base-color-grey-5)}.eui-tree .eui-tree__wrapper::-webkit-scrollbar-thumb{background-color:var(--eui-base-color-grey-20);border-radius:5rem}.eui-tree .eui-tree__wrapper::-webkit-scrollbar-thumb:hover{background-color:var(--eui-base-color-grey-50)}.eui-tree .eui-tree__wrapper::-webkit-scrollbar-track{background-color:var(--eui-base-color-grey-5);border-radius:0}.eui-tree .eui-tree__wrapper .eui-cdk-tree{display:flex;flex-direction:column;width:100%}.eui-tree .eui-tree__wrapper .eui-cdk-tree .eui-cdk-nested-tree-node{display:flex;width:auto}.eui-tree .eui-tree__wrapper .eui-cdk-tree .eui-cdk-nested-tree-node:not(.eui-cdk-nested-tree-node--with-child){padding-inline-start:var(--eui-base-spacing-xl)}.eui-tree .eui-tree__wrapper .eui-cdk-tree .eui-cdk-nested-tree-node:not(.eui-cdk-nested-tree-node--with-child) .eui-tree-node-wrapper.eui-tree-node-wrapper--show-lines:before{position:relative;left:calc(-1 * var(--eui-base-spacing-l) + var(--eui-base-spacing-2xs));display:inline-flex;border-left:1px solid var(--eui-base-color-grey-25);content:\"\";height:100%}.eui-tree .eui-tree__wrapper .eui-cdk-tree .eui-cdk-nested-tree-node:not(.eui-cdk-nested-tree-node--with-child) .eui-tree-node-wrapper.eui-tree-node-wrapper--show-lines.eui-tree-node-wrapper--last:before{align-self:flex-start;display:inline-flex;height:50%;position:relative}.eui-tree .eui-tree__wrapper .eui-cdk-tree .eui-cdk-nested-tree-node:not(.eui-cdk-nested-tree-node--with-child) .eui-tree-node-wrapper.eui-tree-node-wrapper--show-lines .eui-tree-node-wrapper__container:before{position:relative;left:0;display:inline-flex;width:var(--eui-base-spacing-l);border-bottom:1px solid var(--eui-base-color-grey-25);border-left:1px solid var(--eui-base-color-grey-25);content:\"\";margin-left:calc(-1 * var(--eui-base-spacing-l) + var(--eui-base-spacing-2xs))}.eui-tree .eui-tree__wrapper .eui-cdk-tree .eui-cdk-nested-tree-node--with-child{display:flex;width:100%}.eui-tree .eui-tree__wrapper .eui-tree-node{display:flex;flex-direction:column;width:100%}.eui-tree .eui-tree__wrapper .eui-tree-node__metacontent{display:flex}.eui-tree .eui-tree__wrapper .eui-tree-node__button{margin-left:calc(-1 * var(--eui-base-spacing-2xs));margin-right:var(--eui-base-spacing-2xs)}.eui-tree .eui-tree__wrapper ul.eui-tree-node{padding-inline-start:var(--eui-base-spacing-l)}.eui-tree .eui-tree__wrapper .eui-tree-node-wrapper{align-items:center;display:flex;min-height:var(--eui-base-spacing-xl);width:100%}.eui-tree .eui-tree__wrapper .eui-tree-node-wrapper:hover{background-color:var(--eui-base-color-grey-5)}.eui-tree .eui-tree__wrapper .eui-tree-node-wrapper__container{align-items:center;display:flex;width:100%}.eui-tree .eui-tree__wrapper .eui-tree-node-wrapper__container-left{align-items:center;display:flex;justify-content:flex-start}.eui-tree .eui-tree__wrapper .eui-tree-node-wrapper__container-middle{align-items:center;display:flex;justify-content:flex-start;overflow:hidden;width:100%}.eui-tree .eui-tree__wrapper .eui-tree-node-wrapper__container-right{align-items:center;display:flex;justify-content:flex-end;margin-left:auto}.eui-tree:not(.eui-tree--with-children) .eui-tree__wrapper .eui-cdk-tree .eui-cdk-nested-tree-node{padding-inline-start:2px}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i3.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i4.EuiInputCheckboxComponent, selector: "input[euiInputCheckBox]", inputs: ["indeterminate", "isInvalid", "styleClass", "checked", "id"], outputs: ["indeterminateChange"] }, { kind: "directive", type: i5.CdkNestedTreeNode, selector: "cdk-nested-tree-node", inputs: ["role", "disabled", "tabIndex"], exportAs: ["cdkNestedTreeNode"] }, { kind: "directive", type: i5.CdkTreeNodeDef, selector: "[cdkTreeNodeDef]", inputs: ["cdkTreeNodeDefWhen"] }, { kind: "directive", type: i5.CdkTreeNodeToggle, selector: "[cdkTreeNodeToggle]", inputs: ["cdkTreeNodeToggleRecursive"] }, { kind: "component", type: i5.CdkTree, selector: "cdk-tree", inputs: ["dataSource", "treeControl", "trackBy"], exportAs: ["cdkTree"] }, { kind: "directive", type: i5.CdkTreeNodeOutlet, selector: "[cdkTreeNodeOutlet]" }, { kind: "component", type: i6.EuiButtonComponent, selector: "button[euiButton], a[euiButton]", inputs: ["e2eAttr", "id", "euiBasicButton", "euiButtonCall", "euiBlockButton", "isLoading", "euiIconButton", "euiLineWrap"], outputs: ["buttonClick"] }, { kind: "component", type: i7.EuiIconComponent, selector: "div[euiIcon], span[euiIcon], i[euiIcon], eui-icon", inputs: ["aria-label", "iconClass", "isLoading"] }, { kind: "component", type: i7.EuiIconSvgComponent, selector: "eui-icon-svg, span[euiIconSvg], i[euiIconSvg]", inputs: ["icon", "size", "fillColor", "set", "ariaLabelledby", "role", "style", "iconUrl", "transform", "aria-label", "ariaHidden", "focusable", "isLoading"] }, { kind: "component", type: i8.EuiLabelComponent, selector: "label[euiLabel], span[euiLabel], div[euiLabel], a[euiLabel], eui-label, label[euiSublabel], span[euiSublabel], div[euiSublabel], a[euiSublabel], eui-sublabel", inputs: ["euiRequired", "euiReadonly", "euiSublabel"] }, { kind: "component", type: i9.EuiBadgeComponent, selector: "div[euiBadge], span[euiBadge], eui-badge", inputs: ["aria-label"] }, { kind: "component", type: i10.EuiChipComponent, selector: "eui-chip, span[euiChip], li[euiChip]", inputs: ["euiInternalId", "tooltipMessage", "id", "data", "isChipRemovable", "isSquared"], outputs: ["remove"] }, { kind: "component", type: i11.EuiDropdownComponent, selector: "eui-dropdown", inputs: ["e2eAttr", "tabIndex", "width", "position", "isDropDownRightAligned", "isClosedOnClickInside", "isLabelUpdatedFromSelectedItem", "isExpandOnHover", "hasTabNavigation"] }, { kind: "directive", type: i11.EuiDropdownContentDirective, selector: "eui-dropdown-content" }, { kind: "directive", type: i1.CdkScrollable, selector: "[cdk-scrollable], [cdkScrollable]" }, { kind: "pipe", type: i12.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
822
822
|
}
|
823
823
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.0-rc.2", ngImport: i0, type: EuiTreeComponent, decorators: [{
|
824
824
|
type: Component,
|
825
|
-
args: [{ selector: 'eui-tree', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<ul class=\"eui-tree__wrapper\" cdkScrollable #cdkScrollableRef style=\"overflow: auto; max-height: 400px\">\n <cdk-tree\n #treeComponentInstance\n [dataSource]=\"cdkArrayDataSource\"\n [treeControl]=\"cdkTreeControl\"\n [trackBy]=\"trackBy\"\n *ngIf=\"renderTree\"\n class=\"eui-cdk-tree\">\n <!-- There are two states of generic cdk-nested-tree-node declarations.\n First one is without child. No sub rendering.\n -->\n <cdk-nested-tree-node *cdkTreeNodeDef=\"let treeRunTimeItemModel\" class=\"eui-cdk-nested-tree-node\">\n <li\n class=\"eui-tree-node\"\n *ngIf=\"treeRunTimeItemModel\"\n title=\"{{\n getTreeItem(treeRunTimeItemModel?.path)?.node?.treeContentBlock?.tooltipLabel ||\n getTreeItem(treeRunTimeItemModel?.path)?.node?.treeContentBlock?.label\n }}\">\n <div\n class=\"eui-tree-node-wrapper\"\n (click)=\"onNodeClick(treeRunTimeItemModel)\"\n [class.eui-tree-node-wrapper--last]=\"treeRunTimeItemModel.last\"\n [class.eui-tree-node-wrapper--show-lines]=\"showLines && _isMultiLevel\">\n <div class=\"eui-tree-node-wrapper__container\">\n <!--\n Renders node in default or provided template's context.\n Generates onSelect with onSelectFn for developers to send the events from their custom check events.\n Provides id to be used on generic template\n -->\n <ng-container\n [ngTemplateOutlet]=\"nodeTemplateRef || nodeTemplateDefault\"\n [ngTemplateOutletContext]=\"{\n $implicit: getTreeItem(treeRunTimeItemModel?.path)?.node,\n onSelect: onSelectFn(treeRunTimeItemModel.path),\n id: uid + treeRunTimeItemModel.path\n }\">\n </ng-container>\n </div>\n </div>\n </li>\n </cdk-nested-tree-node>\n <!-- This is the tree node template for expandable nodes -->\n <cdk-nested-tree-node\n *cdkTreeNodeDef=\"let treeRunTimeItemModel; when: hasChild\"\n class=\"eui-cdk-nested-tree-node eui-cdk-nested-tree-node--with-child\">\n <li\n class=\"eui-tree-node\"\n *ngIf=\"treeRunTimeItemModel\"\n title=\"{{\n getTreeItem(treeRunTimeItemModel?.path)?.node?.treeContentBlock?.tooltipLabel ||\n getTreeItem(treeRunTimeItemModel?.path)?.node?.treeContentBlock?.label\n }}\">\n <div\n class=\"eui-tree-node-wrapper\"\n [class.eui-tree-node-wrapper--last]=\"treeRunTimeItemModel.last\"\n [class.eui-tree-node-wrapper--show-lines]=\"showLines\">\n <!--Here wraps the node, and listen for node clicks.-->\n <div (click)=\"onNodeClick(treeRunTimeItemModel)\" class=\"eui-tree-node-wrapper__container\">\n <!-- Expand/collapse action button -->\n <button\n euiButton\n euiIconButton\n euiBasicButton\n euiRounded\n euiSizeS\n type=\"button\"\n [attr.aria-label]=\"'Toggle ' + getTreeItem(treeRunTimeItemModel?.path)?.node?.treeContentBlock?.label\"\n (click)=\"onNodeToggle(treeRunTimeItemModel)\"\n cdkTreeNodeToggle\n class=\"eui-tree-node__button\">\n <span\n euiIcon\n *ngIf=\"!cdkTreeControl.isExpanded(treeRunTimeItemModel) && collapsedIconClass\"\n [iconClass]=\"collapsedIconClass\"></span>\n <span\n euiIcon\n *ngIf=\"cdkTreeControl.isExpanded(treeRunTimeItemModel) && expandedIconClass\"\n [iconClass]=\"expandedIconClass\"></span>\n <eui-icon-svg\n *ngIf=\"!cdkTreeControl.isExpanded(treeRunTimeItemModel) && !collapsedIconClass\"\n [icon]=\"expandedSvgIconClass\"></eui-icon-svg>\n <eui-icon-svg\n *ngIf=\"cdkTreeControl.isExpanded(treeRunTimeItemModel) && !expandedIconClass\"\n [icon]=\"collapsedSvgIconClass\"></eui-icon-svg>\n </button>\n <!--\n Renders node in default or provided template's context.\n Generates onSelect with onSelectFn for developers to send the events from their custom check events.\n Provides id to be used on generic template\n -->\n <ng-container\n [ngTemplateOutlet]=\"nodeTemplateRef || nodeTemplateDefault\"\n [ngTemplateOutletContext]=\"{\n $implicit: getTreeItem(treeRunTimeItemModel.path)?.node,\n onSelect: onSelectFn(treeRunTimeItemModel.path),\n id: uid + treeRunTimeItemModel.path,\n path: treeRunTimeItemModel.path\n }\">\n </ng-container>\n </div>\n </div>\n <!--uses cdkTreeNodeOutlet to render children nodes, CdkTreeControl is used to control isExpanded state.-->\n <ul class=\"eui-tree-node\" *ngIf=\"cdkTreeControl.isExpanded(treeRunTimeItemModel)\">\n <ng-container cdkTreeNodeOutlet></ng-container>\n </ul>\n </li>\n </cdk-nested-tree-node>\n </cdk-tree>\n</ul>\n\n<ng-template #nodeTemplateDefault let-node let-onSelect=\"onSelect\" let-id=\"id\" let-path=\"path\">\n <ng-container *ngIf=\"node\">\n <div class=\"eui-tree-node-wrapper__container-left\" [class.eui-tree-node-wrapper__container-left--selected]=\"node?.isSelected\">\n <!--input checkbox area-->\n <input\n euiInputCheckBox\n *ngIf=\"node && node.selectable\"\n type=\"checkbox\"\n id=\"{{ id }}\"\n [checked]=\"!!node?.isSelected\"\n [indeterminate]=\"!!node?.isIndeterminate\"\n (change)=\"onSelect($event)\"\n class=\"eui-u-mr-m\" />\n\n <!--icon area-->\n <ng-container *ngIf=\"node?.treeContentBlock?.iconClass\">\n <eui-icon\n [euiVariant]=\"node?.treeContentBlock?.iconTypeClass || 'primary'\"\n iconClass=\"{{ node?.treeContentBlock?.iconClass }}\"\n euiSizeS\n class=\"eui-u-mr-xs\">\n </eui-icon>\n </ng-container>\n <ng-container *ngIf=\"node?.treeContentBlock?.iconSvgName\">\n <eui-icon-svg\n icon=\"{{ node?.treeContentBlock?.iconSvgName }}\"\n fillColor=\"{{ node?.treeContentBlock?.iconTypeClass || 'grey-100' }}\"\n size=\"s\"\n class=\"eui-u-mr-xs\">\n </eui-icon-svg>\n </ng-container>\n\n <!--chips area-->\n <ng-container *ngIf=\"node?.treeContentBlock?.chips\">\n <eui-chip\n *ngFor=\"let chip of node.treeContentBlock.chips\"\n euiSizeXS\n [euiVariant]=\"chip.typeClass || 'secondary'\"\n [euiOutline]=\"chip.isOutline\"\n class=\"eui-chip--rounded eui-u-mb-none eui-u-mr-xs\">\n <span euiLabel>{{ chip.label }}</span>\n </eui-chip>\n </ng-container>\n\n <!--badge (typeLabel & typeClass) area-->\n <ng-container *ngIf=\"node?.treeContentBlock?.typeLabel\" [ngSwitch]=\"node?.treeContentBlock?.typeClass\">\n <eui-badge euiSizeM [euiVariant]=\"node?.treeContentBlock?.typeClass || 'primary'\" class=\"eui-u-flex-no-shrink eui-u-mr-xs\">\n {{ node?.treeContentBlock?.typeLabel }}\n </eui-badge>\n </ng-container>\n </div>\n\n <!--label area-->\n <div class=\"eui-tree-node-wrapper__container-middle\">\n <label\n *ngIf=\"!node?.treeContentBlock?.url && !node?.treeContentBlock?.urlExternal\"\n euiLabel\n for=\"{{ id }}\"\n class=\"eui-u-text-truncate eui-u-p-2xs\"\n [class.eui-label--selected]=\"\n highlightPath\n ? getRunTimeSelectionRecursiveState(path)?.selectionRecursiveState === 'indeterminate' || node?.isSelected\n : node?.isSelected\n \"\n [class.eui-u-cursor-pointer]=\"node?.selectable\">\n {{ autoTranslate ? (node?.treeContentBlock?.label | translate) : node?.treeContentBlock?.label }}\n </label>\n <label *ngIf=\"node?.treeContentBlock?.url\" euiLabel for=\"{{ id }}\" class=\"eui-u-text-truncate eui-u-p-2xs\">\n <a\n class=\"eui-u-text-link\"\n [class.eui-u-text-link-standalone]=\"!showUnderlinedLinks\"\n [routerLink]=\"node?.treeContentBlock?.url\">\n {{ autoTranslate ? (node?.treeContentBlock?.label | translate) : node?.treeContentBlock?.label }}\n </a>\n </label>\n <label *ngIf=\"node?.treeContentBlock?.urlExternal\" euiLabel for=\"{{ id }}\" class=\"eui-u-text-truncate eui-u-p-2xs\">\n <a\n class=\"eui-u-text-link-external\"\n [class.eui-u-text-link-external-standalone]=\"!showUnderlinedLinks\"\n href=\"{{ node?.treeContentBlock?.urlExternal }}\"\n target=\"{{ node?.treeContentBlock?.urlExternalTarget || 'blank' }}\">\n {{ autoTranslate ? (node?.treeContentBlock?.label | translate) : node?.treeContentBlock?.label }}\n </a>\n </label>\n </div>\n\n <div *ngIf=\"node?.treeContentBlock?.rightContent\" class=\"eui-tree-node-wrapper__container-right\">\n <!--badges area-->\n <ng-container *ngFor=\"let badge of node.treeContentBlock.rightContent?.badges\">\n <eui-badge euiSizeM euiOutline [euiVariant]=\"badge.typeClass || 'secondary'\" class=\"eui-u-ml-xs\">\n <span euiLabel>{{ badge.label }}</span>\n </eui-badge>\n </ng-container>\n\n <!--chips area-->\n <ng-container *ngFor=\"let chip of node.treeContentBlock.rightContent?.chips\">\n <eui-chip\n euiSizeXS\n [euiVariant]=\"chip.typeClass || 'secondary'\"\n [euiOutline]=\"chip.isOutline\"\n class=\"eui-chip--rounded eui-u-mb-none eui-u-ml-xs\">\n <span euiLabel>{{ chip.label }}</span>\n </eui-chip>\n </ng-container>\n\n <!--Context menu-->\n <ng-container *ngIf=\"node.treeContentBlock.rightContent?.contextMenuMetaData && rightContextMenuTemplateRef\">\n <eui-dropdown class=\"eui-u-ml-xs\">\n <button euiButton euiSizeS euiRounded euiIconButton euiBasicButton euiSecondary [attr.aria-label]=\"'Options menu'\">\n <eui-icon-svg icon=\"eui-ellipsis-vertical\"></eui-icon-svg>\n </button>\n <eui-dropdown-content>\n <ng-template\n [ngTemplateOutlet]=\"rightContextMenuTemplateRef\"\n [ngTemplateOutletContext]=\"{\n $implicit: node?.treeContentBlock?.rightContent?.contextMenuMetaData,\n metadata: node?.treeContentBlock?.rightContent?.contextMenuMetaData\n }\">\n </ng-template>\n </eui-dropdown-content>\n </eui-dropdown>\n </ng-container>\n </div>\n\n <!--metadata, uses the help of ng template to generate dynamic expand variable without handling state -->\n <ng-container\n *ngIf=\"node.treeContentBlock?.metadata && nodeContentMetadataTemplateRef\"\n [ngTemplateOutlet]=\"nodeContentMetadataContainer\"\n [ngTemplateOutletContext]=\"{\n $implicit: { expanded: false }\n }\">\n </ng-container>\n <ng-template #nodeContentMetadataContainer let-metaDataContainer>\n <button\n euiButton\n euiBasicButton\n euiIconButton\n euiRounded\n euiSizeS\n type=\"button\"\n aria-label=\"expand collapse tree item\"\n (click)=\"metaDataContainer.expanded = !metaDataContainer.expanded\">\n <eui-icon-svg [icon]=\"metaDataContainer.expanded ? 'eui-chevron-down' : 'eui-chevron-forward'\"></eui-icon-svg>\n </button>\n <div *ngIf=\"metaDataContainer.expanded\" class=\"eui-tree-node__metacontent\">\n <!--passing metadata of the node content to provided template-ref:nodeContentMetadataTemplateRef-->\n <ng-template\n [ngTemplateOutlet]=\"nodeContentMetadataTemplateRef\"\n [ngTemplateOutletContext]=\"{\n $implicit: node?.treeContentBlock?.metadata,\n metadata: node?.treeContentBlock?.metadata\n }\">\n </ng-template>\n </div>\n </ng-template>\n </ng-container>\n</ng-template>\n", styles: [".eui-tree{display:flex;overflow-x:hidden;overflow-y:auto;position:relative;width:100%}.eui-tree::-webkit-scrollbar{display:inherit;height:6px;width:6px;background-color:var(--eui-base-color-grey-5)}.eui-tree::-webkit-scrollbar-thumb{background-color:var(--eui-base-color-grey-20);border-radius:5rem}.eui-tree::-webkit-scrollbar-thumb:hover{background-color:var(--eui-base-color-grey-50)}.eui-tree::-webkit-scrollbar-track{background-color:var(--eui-base-color-grey-5);border-radius:0}.eui-tree .eui-tree__wrapper{display:flex;list-style:none;margin:0;padding:var(--eui-base-spacing-2xs);position:relative;width:100%}.eui-tree .eui-tree__wrapper .eui-cdk-tree{display:flex;flex-direction:column;width:100%}.eui-tree .eui-tree__wrapper .eui-cdk-tree .eui-cdk-nested-tree-node{display:flex;width:auto}.eui-tree .eui-tree__wrapper .eui-cdk-tree .eui-cdk-nested-tree-node:not(.eui-cdk-nested-tree-node--with-child){padding-inline-start:var(--eui-base-spacing-xl)}.eui-tree .eui-tree__wrapper .eui-cdk-tree .eui-cdk-nested-tree-node:not(.eui-cdk-nested-tree-node--with-child) .eui-tree-node-wrapper.eui-tree-node-wrapper--show-lines:before{position:relative;left:calc(-1 * var(--eui-base-spacing-l) + var(--eui-base-spacing-2xs));display:inline-flex;border-left:1px solid var(--eui-base-color-grey-25);content:\"\";height:100%}.eui-tree .eui-tree__wrapper .eui-cdk-tree .eui-cdk-nested-tree-node:not(.eui-cdk-nested-tree-node--with-child) .eui-tree-node-wrapper.eui-tree-node-wrapper--show-lines.eui-tree-node-wrapper--last:before{align-self:flex-start;display:inline-flex;height:50%;position:relative}.eui-tree .eui-tree__wrapper .eui-cdk-tree .eui-cdk-nested-tree-node:not(.eui-cdk-nested-tree-node--with-child) .eui-tree-node-wrapper.eui-tree-node-wrapper--show-lines .eui-tree-node-wrapper__container:before{position:relative;left:0;display:inline-flex;width:var(--eui-base-spacing-l);border-bottom:1px solid var(--eui-base-color-grey-25);border-left:1px solid var(--eui-base-color-grey-25);content:\"\";margin-left:calc(-1 * var(--eui-base-spacing-l) + var(--eui-base-spacing-2xs))}.eui-tree .eui-tree__wrapper .eui-cdk-tree .eui-cdk-nested-tree-node--with-child{display:flex;width:100%}.eui-tree .eui-tree__wrapper .eui-tree-node{display:flex;flex-direction:column;width:100%}.eui-tree .eui-tree__wrapper .eui-tree-node__metacontent{display:flex}.eui-tree .eui-tree__wrapper .eui-tree-node__button{margin-left:calc(-1 * var(--eui-base-spacing-2xs));margin-right:var(--eui-base-spacing-2xs)}.eui-tree .eui-tree__wrapper ul.eui-tree-node{padding-inline-start:var(--eui-base-spacing-l)}.eui-tree .eui-tree__wrapper .eui-tree-node-wrapper{align-items:center;display:flex;min-height:var(--eui-base-spacing-xl);width:100%}.eui-tree .eui-tree__wrapper .eui-tree-node-wrapper:hover{background-color:var(--eui-base-color-grey-5)}.eui-tree .eui-tree__wrapper .eui-tree-node-wrapper__container{align-items:center;display:flex;width:100%}.eui-tree .eui-tree__wrapper .eui-tree-node-wrapper__container-left{align-items:center;display:flex;justify-content:flex-start}.eui-tree .eui-tree__wrapper .eui-tree-node-wrapper__container-middle{align-items:center;display:flex;justify-content:flex-start;overflow:hidden;width:100%}.eui-tree .eui-tree__wrapper .eui-tree-node-wrapper__container-right{align-items:center;display:flex;justify-content:flex-end;margin-left:auto}.eui-tree:not(.eui-tree--with-children) .eui-tree__wrapper .eui-cdk-tree .eui-cdk-nested-tree-node{padding-inline-start:2px}\n"] }]
|
825
|
+
args: [{ selector: 'eui-tree', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<ul class=\"eui-tree__wrapper\" cdkScrollable #cdkScrollableRef>\n <cdk-tree\n #treeComponentInstance\n [dataSource]=\"cdkArrayDataSource\"\n [treeControl]=\"cdkTreeControl\"\n [trackBy]=\"trackBy\"\n *ngIf=\"renderTree\"\n class=\"eui-cdk-tree\">\n <!-- There are two states of generic cdk-nested-tree-node declarations.\n First one is without child. No sub rendering.\n -->\n <cdk-nested-tree-node *cdkTreeNodeDef=\"let treeRunTimeItemModel\" class=\"eui-cdk-nested-tree-node\">\n <li\n class=\"eui-tree-node\"\n *ngIf=\"treeRunTimeItemModel\"\n title=\"{{\n getTreeItem(treeRunTimeItemModel?.path)?.node?.treeContentBlock?.tooltipLabel ||\n getTreeItem(treeRunTimeItemModel?.path)?.node?.treeContentBlock?.label\n }}\">\n <div\n class=\"eui-tree-node-wrapper\"\n (click)=\"onNodeClick(treeRunTimeItemModel)\"\n [class.eui-tree-node-wrapper--last]=\"treeRunTimeItemModel.last\"\n [class.eui-tree-node-wrapper--show-lines]=\"showLines && _isMultiLevel\">\n <div class=\"eui-tree-node-wrapper__container\">\n <!--\n Renders node in default or provided template's context.\n Generates onSelect with onSelectFn for developers to send the events from their custom check events.\n Provides id to be used on generic template\n -->\n <ng-container\n [ngTemplateOutlet]=\"nodeTemplateRef || nodeTemplateDefault\"\n [ngTemplateOutletContext]=\"{\n $implicit: getTreeItem(treeRunTimeItemModel?.path)?.node,\n onSelect: onSelectFn(treeRunTimeItemModel.path),\n id: uid + treeRunTimeItemModel.path\n }\">\n </ng-container>\n </div>\n </div>\n </li>\n </cdk-nested-tree-node>\n <!-- This is the tree node template for expandable nodes -->\n <cdk-nested-tree-node\n *cdkTreeNodeDef=\"let treeRunTimeItemModel; when: hasChild\"\n class=\"eui-cdk-nested-tree-node eui-cdk-nested-tree-node--with-child\">\n <li\n class=\"eui-tree-node\"\n *ngIf=\"treeRunTimeItemModel\"\n title=\"{{\n getTreeItem(treeRunTimeItemModel?.path)?.node?.treeContentBlock?.tooltipLabel ||\n getTreeItem(treeRunTimeItemModel?.path)?.node?.treeContentBlock?.label\n }}\">\n <div\n class=\"eui-tree-node-wrapper\"\n [class.eui-tree-node-wrapper--last]=\"treeRunTimeItemModel.last\"\n [class.eui-tree-node-wrapper--show-lines]=\"showLines\">\n <!--Here wraps the node, and listen for node clicks.-->\n <div (click)=\"onNodeClick(treeRunTimeItemModel)\" class=\"eui-tree-node-wrapper__container\">\n <!-- Expand/collapse action button -->\n <button\n euiButton\n euiIconButton\n euiBasicButton\n euiRounded\n euiSizeS\n type=\"button\"\n [attr.aria-label]=\"'Toggle ' + getTreeItem(treeRunTimeItemModel?.path)?.node?.treeContentBlock?.label\"\n (click)=\"onNodeToggle(treeRunTimeItemModel)\"\n cdkTreeNodeToggle\n class=\"eui-tree-node__button\">\n <span\n euiIcon\n *ngIf=\"!cdkTreeControl.isExpanded(treeRunTimeItemModel) && collapsedIconClass\"\n [iconClass]=\"collapsedIconClass\"></span>\n <span\n euiIcon\n *ngIf=\"cdkTreeControl.isExpanded(treeRunTimeItemModel) && expandedIconClass\"\n [iconClass]=\"expandedIconClass\"></span>\n <eui-icon-svg\n *ngIf=\"!cdkTreeControl.isExpanded(treeRunTimeItemModel) && !collapsedIconClass\"\n [icon]=\"expandedSvgIconClass\"></eui-icon-svg>\n <eui-icon-svg\n *ngIf=\"cdkTreeControl.isExpanded(treeRunTimeItemModel) && !expandedIconClass\"\n [icon]=\"collapsedSvgIconClass\"></eui-icon-svg>\n </button>\n <!--\n Renders node in default or provided template's context.\n Generates onSelect with onSelectFn for developers to send the events from their custom check events.\n Provides id to be used on generic template\n -->\n <ng-container\n [ngTemplateOutlet]=\"nodeTemplateRef || nodeTemplateDefault\"\n [ngTemplateOutletContext]=\"{\n $implicit: getTreeItem(treeRunTimeItemModel.path)?.node,\n onSelect: onSelectFn(treeRunTimeItemModel.path),\n id: uid + treeRunTimeItemModel.path,\n path: treeRunTimeItemModel.path\n }\">\n </ng-container>\n </div>\n </div>\n <!--uses cdkTreeNodeOutlet to render children nodes, CdkTreeControl is used to control isExpanded state.-->\n <ul class=\"eui-tree-node\" *ngIf=\"cdkTreeControl.isExpanded(treeRunTimeItemModel)\">\n <ng-container cdkTreeNodeOutlet></ng-container>\n </ul>\n </li>\n </cdk-nested-tree-node>\n </cdk-tree>\n</ul>\n\n<ng-template #nodeTemplateDefault let-node let-onSelect=\"onSelect\" let-id=\"id\" let-path=\"path\">\n <ng-container *ngIf=\"node\">\n <div class=\"eui-tree-node-wrapper__container-left\" [class.eui-tree-node-wrapper__container-left--selected]=\"node?.isSelected\">\n <!--input checkbox area-->\n <input\n euiInputCheckBox\n *ngIf=\"node && node.selectable\"\n type=\"checkbox\"\n id=\"{{ id }}\"\n [checked]=\"!!node?.isSelected\"\n [indeterminate]=\"!!node?.isIndeterminate\"\n (change)=\"onSelect($event)\"\n class=\"eui-u-mr-m\" />\n\n <!--icon area-->\n <ng-container *ngIf=\"node?.treeContentBlock?.iconClass\">\n <eui-icon\n [euiVariant]=\"node?.treeContentBlock?.iconTypeClass || 'primary'\"\n iconClass=\"{{ node?.treeContentBlock?.iconClass }}\"\n euiSizeS\n class=\"eui-u-mr-xs\">\n </eui-icon>\n </ng-container>\n <ng-container *ngIf=\"node?.treeContentBlock?.iconSvgName\">\n <eui-icon-svg\n icon=\"{{ node?.treeContentBlock?.iconSvgName }}\"\n fillColor=\"{{ node?.treeContentBlock?.iconTypeClass || 'grey-100' }}\"\n size=\"s\"\n class=\"eui-u-mr-xs\">\n </eui-icon-svg>\n </ng-container>\n\n <!--chips area-->\n <ng-container *ngIf=\"node?.treeContentBlock?.chips\">\n <eui-chip\n *ngFor=\"let chip of node.treeContentBlock.chips\"\n euiSizeXS\n [euiVariant]=\"chip.typeClass || 'secondary'\"\n [euiOutline]=\"chip.isOutline\"\n class=\"eui-chip--rounded eui-u-mb-none eui-u-mr-xs\">\n <span euiLabel>{{ chip.label }}</span>\n </eui-chip>\n </ng-container>\n\n <!--badge (typeLabel & typeClass) area-->\n <ng-container *ngIf=\"node?.treeContentBlock?.typeLabel\" [ngSwitch]=\"node?.treeContentBlock?.typeClass\">\n <eui-badge euiSizeM [euiVariant]=\"node?.treeContentBlock?.typeClass || 'primary'\" class=\"eui-u-flex-no-shrink eui-u-mr-xs\">\n {{ node?.treeContentBlock?.typeLabel }}\n </eui-badge>\n </ng-container>\n </div>\n\n <!--label area-->\n <div class=\"eui-tree-node-wrapper__container-middle\">\n <label\n *ngIf=\"!node?.treeContentBlock?.url && !node?.treeContentBlock?.urlExternal\"\n euiLabel\n for=\"{{ id }}\"\n class=\"eui-u-text-truncate eui-u-p-2xs\"\n [class.eui-label--selected]=\"\n highlightPath\n ? getRunTimeSelectionRecursiveState(path)?.selectionRecursiveState === 'indeterminate' || node?.isSelected\n : node?.isSelected\n \"\n [class.eui-u-cursor-pointer]=\"node?.selectable\">\n {{ autoTranslate ? (node?.treeContentBlock?.label | translate) : node?.treeContentBlock?.label }}\n </label>\n <label *ngIf=\"node?.treeContentBlock?.url\" euiLabel for=\"{{ id }}\" class=\"eui-u-text-truncate eui-u-p-2xs\">\n <a\n class=\"eui-u-text-link\"\n [class.eui-u-text-link-standalone]=\"!showUnderlinedLinks\"\n [routerLink]=\"node?.treeContentBlock?.url\">\n {{ autoTranslate ? (node?.treeContentBlock?.label | translate) : node?.treeContentBlock?.label }}\n </a>\n </label>\n <label *ngIf=\"node?.treeContentBlock?.urlExternal\" euiLabel for=\"{{ id }}\" class=\"eui-u-text-truncate eui-u-p-2xs\">\n <a\n class=\"eui-u-text-link-external\"\n [class.eui-u-text-link-external-standalone]=\"!showUnderlinedLinks\"\n href=\"{{ node?.treeContentBlock?.urlExternal }}\"\n target=\"{{ node?.treeContentBlock?.urlExternalTarget || 'blank' }}\">\n {{ autoTranslate ? (node?.treeContentBlock?.label | translate) : node?.treeContentBlock?.label }}\n </a>\n </label>\n </div>\n\n <div *ngIf=\"node?.treeContentBlock?.rightContent\" class=\"eui-tree-node-wrapper__container-right\">\n <!--badges area-->\n <ng-container *ngFor=\"let badge of node.treeContentBlock.rightContent?.badges\">\n <eui-badge euiSizeM euiOutline [euiVariant]=\"badge.typeClass || 'secondary'\" class=\"eui-u-ml-xs\">\n <span euiLabel>{{ badge.label }}</span>\n </eui-badge>\n </ng-container>\n\n <!--chips area-->\n <ng-container *ngFor=\"let chip of node.treeContentBlock.rightContent?.chips\">\n <eui-chip\n euiSizeXS\n [euiVariant]=\"chip.typeClass || 'secondary'\"\n [euiOutline]=\"chip.isOutline\"\n class=\"eui-chip--rounded eui-u-mb-none eui-u-ml-xs\">\n <span euiLabel>{{ chip.label }}</span>\n </eui-chip>\n </ng-container>\n\n <!--Context menu-->\n <ng-container *ngIf=\"node.treeContentBlock.rightContent?.contextMenuMetaData && rightContextMenuTemplateRef\">\n <eui-dropdown class=\"eui-u-ml-xs\">\n <button euiButton euiSizeS euiRounded euiIconButton euiBasicButton euiSecondary [attr.aria-label]=\"'Options menu'\">\n <eui-icon-svg icon=\"eui-ellipsis-vertical\"></eui-icon-svg>\n </button>\n <eui-dropdown-content>\n <ng-template\n [ngTemplateOutlet]=\"rightContextMenuTemplateRef\"\n [ngTemplateOutletContext]=\"{\n $implicit: node?.treeContentBlock?.rightContent?.contextMenuMetaData,\n metadata: node?.treeContentBlock?.rightContent?.contextMenuMetaData\n }\">\n </ng-template>\n </eui-dropdown-content>\n </eui-dropdown>\n </ng-container>\n </div>\n\n <!--metadata, uses the help of ng template to generate dynamic expand variable without handling state -->\n <ng-container\n *ngIf=\"node.treeContentBlock?.metadata && nodeContentMetadataTemplateRef\"\n [ngTemplateOutlet]=\"nodeContentMetadataContainer\"\n [ngTemplateOutletContext]=\"{\n $implicit: { expanded: false }\n }\">\n </ng-container>\n <ng-template #nodeContentMetadataContainer let-metaDataContainer>\n <button\n euiButton\n euiBasicButton\n euiIconButton\n euiRounded\n euiSizeS\n type=\"button\"\n aria-label=\"expand collapse tree item\"\n (click)=\"metaDataContainer.expanded = !metaDataContainer.expanded\">\n <eui-icon-svg [icon]=\"metaDataContainer.expanded ? 'eui-chevron-down' : 'eui-chevron-forward'\"></eui-icon-svg>\n </button>\n <div *ngIf=\"metaDataContainer.expanded\" class=\"eui-tree-node__metacontent\">\n <!--passing metadata of the node content to provided template-ref:nodeContentMetadataTemplateRef-->\n <ng-template\n [ngTemplateOutlet]=\"nodeContentMetadataTemplateRef\"\n [ngTemplateOutletContext]=\"{\n $implicit: node?.treeContentBlock?.metadata,\n metadata: node?.treeContentBlock?.metadata\n }\">\n </ng-template>\n </div>\n </ng-template>\n </ng-container>\n</ng-template>\n", styles: [".eui-tree{display:flex;overflow-x:hidden;overflow-y:auto;position:relative;width:100%}.eui-tree::-webkit-scrollbar{display:inherit;height:6px;width:6px;background-color:var(--eui-base-color-grey-5)}.eui-tree::-webkit-scrollbar-thumb{background-color:var(--eui-base-color-grey-20);border-radius:5rem}.eui-tree::-webkit-scrollbar-thumb:hover{background-color:var(--eui-base-color-grey-50)}.eui-tree::-webkit-scrollbar-track{background-color:var(--eui-base-color-grey-5);border-radius:0}.eui-tree .eui-tree__wrapper{display:flex;list-style:none;margin:0;padding:var(--eui-base-spacing-2xs);position:relative;width:100%;overflow-y:auto}.eui-tree .eui-tree__wrapper::-webkit-scrollbar{display:inherit;height:6px;width:6px;background-color:var(--eui-base-color-grey-5)}.eui-tree .eui-tree__wrapper::-webkit-scrollbar-thumb{background-color:var(--eui-base-color-grey-20);border-radius:5rem}.eui-tree .eui-tree__wrapper::-webkit-scrollbar-thumb:hover{background-color:var(--eui-base-color-grey-50)}.eui-tree .eui-tree__wrapper::-webkit-scrollbar-track{background-color:var(--eui-base-color-grey-5);border-radius:0}.eui-tree .eui-tree__wrapper .eui-cdk-tree{display:flex;flex-direction:column;width:100%}.eui-tree .eui-tree__wrapper .eui-cdk-tree .eui-cdk-nested-tree-node{display:flex;width:auto}.eui-tree .eui-tree__wrapper .eui-cdk-tree .eui-cdk-nested-tree-node:not(.eui-cdk-nested-tree-node--with-child){padding-inline-start:var(--eui-base-spacing-xl)}.eui-tree .eui-tree__wrapper .eui-cdk-tree .eui-cdk-nested-tree-node:not(.eui-cdk-nested-tree-node--with-child) .eui-tree-node-wrapper.eui-tree-node-wrapper--show-lines:before{position:relative;left:calc(-1 * var(--eui-base-spacing-l) + var(--eui-base-spacing-2xs));display:inline-flex;border-left:1px solid var(--eui-base-color-grey-25);content:\"\";height:100%}.eui-tree .eui-tree__wrapper .eui-cdk-tree .eui-cdk-nested-tree-node:not(.eui-cdk-nested-tree-node--with-child) .eui-tree-node-wrapper.eui-tree-node-wrapper--show-lines.eui-tree-node-wrapper--last:before{align-self:flex-start;display:inline-flex;height:50%;position:relative}.eui-tree .eui-tree__wrapper .eui-cdk-tree .eui-cdk-nested-tree-node:not(.eui-cdk-nested-tree-node--with-child) .eui-tree-node-wrapper.eui-tree-node-wrapper--show-lines .eui-tree-node-wrapper__container:before{position:relative;left:0;display:inline-flex;width:var(--eui-base-spacing-l);border-bottom:1px solid var(--eui-base-color-grey-25);border-left:1px solid var(--eui-base-color-grey-25);content:\"\";margin-left:calc(-1 * var(--eui-base-spacing-l) + var(--eui-base-spacing-2xs))}.eui-tree .eui-tree__wrapper .eui-cdk-tree .eui-cdk-nested-tree-node--with-child{display:flex;width:100%}.eui-tree .eui-tree__wrapper .eui-tree-node{display:flex;flex-direction:column;width:100%}.eui-tree .eui-tree__wrapper .eui-tree-node__metacontent{display:flex}.eui-tree .eui-tree__wrapper .eui-tree-node__button{margin-left:calc(-1 * var(--eui-base-spacing-2xs));margin-right:var(--eui-base-spacing-2xs)}.eui-tree .eui-tree__wrapper ul.eui-tree-node{padding-inline-start:var(--eui-base-spacing-l)}.eui-tree .eui-tree__wrapper .eui-tree-node-wrapper{align-items:center;display:flex;min-height:var(--eui-base-spacing-xl);width:100%}.eui-tree .eui-tree__wrapper .eui-tree-node-wrapper:hover{background-color:var(--eui-base-color-grey-5)}.eui-tree .eui-tree__wrapper .eui-tree-node-wrapper__container{align-items:center;display:flex;width:100%}.eui-tree .eui-tree__wrapper .eui-tree-node-wrapper__container-left{align-items:center;display:flex;justify-content:flex-start}.eui-tree .eui-tree__wrapper .eui-tree-node-wrapper__container-middle{align-items:center;display:flex;justify-content:flex-start;overflow:hidden;width:100%}.eui-tree .eui-tree__wrapper .eui-tree-node-wrapper__container-right{align-items:center;display:flex;justify-content:flex-end;margin-left:auto}.eui-tree:not(.eui-tree--with-children) .eui-tree__wrapper .eui-cdk-tree .eui-cdk-nested-tree-node{padding-inline-start:2px}\n"] }]
|
826
826
|
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.ScrollDispatcher }], propDecorators: { cssClasses: [{
|
827
827
|
type: HostBinding,
|
828
828
|
args: ['class']
|
@@ -929,4 +929,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.0-rc.2", ng
|
|
929
929
|
exports: [EuiTreeComponent],
|
930
930
|
}]
|
931
931
|
}] });
|
932
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXVpLXRyZWUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vZXVpLXRyZWUvZXVpLXRyZWUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vZXVpLXRyZWUvZXVpLXRyZWUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCxLQUFLLEVBQ0wsUUFBUSxFQUNSLHVCQUF1QixFQUN2QixZQUFZLEVBQ1osTUFBTSxFQUNOLGlCQUFpQixFQU1qQixXQUFXLEVBRVgsU0FBUyxHQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQVFILGlCQUFpQixHQUNwQixNQUFNLGtCQUFrQixDQUFDO0FBQzFCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM1RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxhQUFhLEVBQVcsTUFBTSxtQkFBbUIsQ0FBQztBQUM5RSxPQUFPLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNF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LGNBQWM7WUFDZCxjQUFjO1lBQ2QsYUFBYTtZQUNiLGlCQUFpQjtZQUNqQixlQUFlOztnR0FLVixhQUFhO2tCQW5CekIsUUFBUTttQkFBQztvQkFDTixPQUFPLEVBQUU7d0JBQ0wsWUFBWTt3QkFDWixZQUFZO3dCQUNaLFdBQVc7d0JBQ1gsZUFBZTt3QkFDZixzQkFBc0I7d0JBQ3RCLGFBQWE7d0JBQ2IsZUFBZTt3QkFDZixhQUFhO3dCQUNiLGNBQWM7d0JBQ2QsY0FBYzt3QkFDZCxhQUFhO3dCQUNiLGlCQUFpQjt3QkFDakIsZUFBZTtxQkFDbEI7b0JBQ0QsWUFBWSxFQUFFLENBQUMsZ0JBQWdCLENBQUM7b0JBQ2hDLE9BQU8sRUFBRSxDQUFDLGdCQUFnQixDQUFDO2lCQUM5QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIElucHV0LFxuICAgIE5nTW9kdWxlLFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBPdXRwdXQsXG4gICAgVmlld0VuY2Fwc3VsYXRpb24sXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBPbkluaXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIE9uRGVzdHJveSxcbiAgICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFJvdXRlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge1xuICAgIFNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlLFxuICAgIFRyZWVEYXRhTW9kZWwsXG4gICAgVHJlZUl0ZW1Nb2RlbCxcbiAgICBUcmVlRGF0YVJ1blRpbWVNb2RlbCxcbiAgICBUcmVlSXRlbVJ1blRpbWVNb2RlbCxcbiAgICBUcmVlSXRlbVNlbGVjdGlvblJlY3Vyc2l2ZU1vZGVsLFxuICAgIEV1aVRyZWVTZWxlY3Rpb25DaGFuZ2VzLFxuICAgIEV1aVRyZWVQYWdpbmF0aW9uLFxufSBmcm9tICcuL2V1aS10cmVlLm1vZGVsJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRXVpSW5wdXRDaGVja2JveE1vZHVsZSB9IGZyb20gJ0BldWkvY29tcG9uZW50cy9ldWktaW5wdXQtY2hlY2tib3gnO1xuaW1wb3J0IHsgRXVpQnV0dG9uTW9kdWxlIH0gZnJvbSAnQGV1aS9jb21wb25lbnRzL2V1aS1idXR0b24nO1xuaW1wb3J0IHsgRXVpSWNvbk1vZHVsZSB9IGZyb20gJ0BldWkvY29tcG9uZW50cy9ldWktaWNvbic7XG5pbXBvcnQgeyBFdWlMYWJlbE1vZHVsZSB9IGZyb20gJ0BldWkvY29tcG9uZW50cy9ldWktbGFiZWwnO1xuaW1wb3J0IHsgRXVpQmFkZ2VNb2R1bGUgfSBmcm9tICdAZXVpL2NvbXBvbmVudHMvZXVpLWJhZGdlJztcbmltcG9ydCB7IEV1aUNoaXBNb2R1bGUgfSBmcm9tICdAZXVpL2NvbXBvbmVudHMvZXVpLWNoaXAnO1xuaW1wb3J0IHsgRXVpRHJvcGRvd25Nb2R1bGUgfSBmcm9tICdAZXVpL2NvbXBvbmVudHMvZXVpLWRyb3Bkb3duJztcbmltcG9ydCB7IE5lc3RlZFRyZWVDb250cm9sLCBDZGtUcmVlTW9kdWxlLCBDZGtUcmVlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3RyZWUnO1xuaW1wb3J0IHsgQXJyYXlEYXRhU291cmNlLCBTZWxlY3Rpb25Nb2RlbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucyc7XG5pbXBvcnQgeyBCb29sZWFuSW5wdXQsIGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IFNjcm9sbGluZ01vZHVsZSwgU2Nyb2xsRGlzcGF0Y2hlciwgQ2RrU2Nyb2xsYWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9zY3JvbGxpbmcnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lIH0gZnJvbSAncnhqcyc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZXVpLXRyZWUnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9ldWktdHJlZS5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vc3R5bGVzL19pbmRleC5zY3NzJ10sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbn0pXG5leHBvcnQgY2xhc3MgRXVpVHJlZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MnKVxuICAgIHB1YmxpYyBnZXQgY3NzQ2xhc3NlcygpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRDc3NDbGFzc2VzKCk7XG4gICAgfVxuICAgIEBIb3N0QmluZGluZygnYXR0ci5kYXRhLWUyZScpIEBJbnB1dCgpIGUyZUF0dHIgPSAnZXVpLXRyZWUnO1xuICAgIEBJbnB1dCgpIG5vZGVzOiBUcmVlRGF0YU1vZGVsO1xuICAgIC8vIFRPRE86IGZpbmQgdGhlIGNvcnJlY3QgdHlwZSBvciB0dXJuIGludG8gYSBnZW5lcmljLCBodHRwczovL3d3dy50eXBlc2NyaXB0bGFuZy5vcmcvZG9jcy9oYW5kYm9vay8yL2dlbmVyaWNzLmh0bWxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIEBJbnB1dCgpIG5vZGVUZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55PjtcbiAgICAvLyBUT0RPOiBmaW5kIHRoZSBjb3JyZWN0IHR5cGUgb3IgdHVybiBpbnRvIGEgZ2VuZXJpYywgaHR0cHM6Ly93d3cudHlwZXNjcmlwdGxhbmcub3JnL2RvY3MvaGFuZGJvb2svMi9nZW5lcmljcy5odG1sXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBASW5wdXQoKSBub2RlQ29udGVudE1ldGFkYXRhVGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgLy8gVE9ETzogZmluZCB0aGUgY29ycmVjdCB0eXBlIG9yIHR1cm4gaW50byBhIGdlbmVyaWMsIGh0dHBzOi8vd3d3LnR5cGVzY3JpcHRsYW5nLm9yZy9kb2NzL2hhbmRib29rLzIvZ2VuZXJpY3MuaHRtbFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgQElucHV0KCkgcmlnaHRDb250ZXh0TWVudVRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIEBJbnB1dCgpIGV4cGFuZGVkSWNvbkNsYXNzOiBzdHJpbmc7XG4gICAgQElucHV0KCkgY29sbGFwc2VkSWNvbkNsYXNzOiBzdHJpbmc7XG4gICAgQElucHV0KCkgZXhwYW5kZWRTdmdJY29uQ2xhc3MgPSAnZXVpLWNoZXZyb24tZm9yd2FyZDpldWknO1xuICAgIEBJbnB1dCgpIGNvbGxhcHNlZFN2Z0ljb25DbGFzcyA9ICdldWktY2hldnJvbi1kb3duOmV1aSc7XG5cbiAgICBAVmlld0NoaWxkKCdjZGtTY3JvbGxhYmxlUmVmJywgeyByZWFkOiBDZGtTY3JvbGxhYmxlIH0pIGNka1Njcm9sbGFibGVSZWY6IENka1Njcm9sbGFibGU7XG4gICAgQFZpZXdDaGlsZCgndHJlZUNvbXBvbmVudEluc3RhbmNlJykgcHVibGljIHRyZWVDb21wb25lbnRJbnN0YW5jZTogQ2RrVHJlZTxUcmVlSXRlbVJ1blRpbWVNb2RlbD47XG5cbiAgICAvLyBAVmlld0NoaWxkKCd0cmVlQ29tcG9uZW50SW5zdGFuY2UnKSBwdWJsaWMgdHJlZUNvbXBvbmVudEluc3RhbmNlOiBhbnk7XG5cbiAgICBASW5wdXQoKVxuICAgIGdldCBpc0NsaWNrVG9nZ2xpbmdOb2RlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNDbGlja1RvZ2dsaW5nTm9kZTtcbiAgICB9XG5cbiAgICBzZXQgaXNDbGlja1RvZ2dsaW5nTm9kZSh2YWx1ZTogQm9vbGVhbklucHV0KSB7XG4gICAgICAgIHRoaXMuX2lzQ2xpY2tUb2dnbGluZ05vZGUgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICAgIH1cblxuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGlzTXVsdGlzZWxlY3QoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc011bHRpc2VsZWN0O1xuICAgIH1cblxuICAgIHNldCBpc011bHRpc2VsZWN0KHZhbHVlOiBCb29sZWFuSW5wdXQpIHtcbiAgICAgICAgdGhpcy5faXNNdWx0aXNlbGVjdCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgQElucHV0KClcbiAgICBnZXQgaXNTaW5nbGVTZWxlY3QoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc1NpbmdsZVNlbGVjdDtcbiAgICB9XG5cbiAgICBzZXQgaXNTaW5nbGVTZWxlY3QodmFsdWU6IEJvb2xlYW5JbnB1dCkge1xuICAgICAgICB0aGlzLl9pc1NpbmdsZVNlbGVjdCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgQElucHV0KClcbiAgICBnZXQgaXNSZWN1cnNpdmVTZWxlY3Rpb24oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc1JlY3Vyc2l2ZVNlbGVjdGlvbjtcbiAgICB9XG5cbiAgICBzZXQgaXNSZWN1cnNpdmVTZWxlY3Rpb24odmFsdWU6IEJvb2xlYW5JbnB1dCkge1xuICAgICAgICB0aGlzLl9pc1JlY3Vyc2l2ZVNlbGVjdGlvbiA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgQElucHV0KClcbiAgICBnZXQgaXNSZWN1cnNpdmVQYXJlbnRTZWxlY3Rpb24oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc1JlY3Vyc2l2ZVBhcmVudFNlbGVjdGlvbjtcbiAgICB9XG5cbiAgICBzZXQgaXNSZWN1cnNpdmVQYXJlbnRTZWxlY3Rpb24odmFsdWU6IEJvb2xlYW5JbnB1dCkge1xuICAgICAgICB0aGlzLl9pc1JlY3Vyc2l2ZVBhcmVudFNlbGVjdGlvbiA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgQElucHV0KClcbiAgICBnZXQgc2hvd1VuZGVybGluZWRMaW5rcygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Nob3dVbmRlcmxpbmVkTGlua3M7XG4gICAgfVxuXG4gICAgc2V0IHNob3dVbmRlcmxpbmVkTGlua3ModmFsdWU6IEJvb2xlYW5JbnB1dCkge1xuICAgICAgICB0aGlzLl9zaG93VW5kZXJsaW5lZExpbmtzID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgICB9XG5cbiAgICBASW5wdXQoKVxuICAgIGdldCBzaG93TGluZXMoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zaG93TGluZXM7XG4gICAgfVxuXG4gICAgc2V0IHNob3dMaW5lcyh2YWx1ZTogQm9vbGVhbklucHV0KSB7XG4gICAgICAgIHRoaXMuX3Nob3dMaW5lcyA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgQElucHV0KClcbiAgICBnZXQgYXV0b1RyYW5zbGF0ZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2F1dG9UcmFuc2xhdGU7XG4gICAgfVxuXG4gICAgc2V0IGF1dG9UcmFuc2xhdGUodmFsdWU6IEJvb2xlYW5JbnB1dCkge1xuICAgICAgICB0aGlzLl9hdXRvVHJhbnNsYXRlID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgICB9XG5cbiAgICBASW5wdXQoKVxuICAgIGdldCBoaWdobGlnaHRQYXRoKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faGlnaGxpZ2h0UGF0aDtcbiAgICB9XG5cbiAgICBzZXQgaGlnaGxpZ2h0UGF0aCh2YWx1ZTogQm9vbGVhbklucHV0KSB7XG4gICAgICAgIHRoaXMuX2hpZ2hsaWdodFBhdGggPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICAgIH1cblxuICAgIEBPdXRwdXQoKSBzZWxlY3Rpb25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPEV1aVRyZWVTZWxlY3Rpb25DaGFuZ2VzPigpO1xuICAgIEBPdXRwdXQoKSBub2RlQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPFRyZWVJdGVtTW9kZWw+KCk7XG4gICAgQE91dHB1dCgpIG5vZGVUb2dnbGUgPSBuZXcgRXZlbnRFbWl0dGVyPFRyZWVJdGVtTW9kZWw+KCk7XG4gICAgY2RrQXJyYXlEYXRhU291cmNlOiBBcnJheURhdGFTb3VyY2U8VHJlZUl0ZW1SdW5UaW1lTW9kZWw+O1xuICAgIGNka1RyZWVDb250cm9sOiBOZXN0ZWRUcmVlQ29udHJvbDxUcmVlSXRlbVJ1blRpbWVNb2RlbD47XG4gICAgcmVuZGVyVHJlZTogYm9vbGVhbjtcbiAgICBwdWJsaWMgdWlkOiBzdHJpbmcgPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMDAwMDAwMDAwKS50b1N0cmluZygpO1xuICAgIHByb3RlY3RlZCBfaXNNdWx0aUxldmVsO1xuICAgIHByaXZhdGUgcHJvY2Vzc2VkTm9kZXM6IFRyZWVEYXRhTW9kZWw7XG4gICAgcHJpdmF0ZSB0cmVlRGF0YVJ1blRpbWU6IFRyZWVEYXRhUnVuVGltZU1vZGVsO1xuICAgIHByaXZhdGUgdHJlZURhdGFSdW5UaW1lQmFja3VwOiBUcmVlRGF0YVJ1blRpbWVNb2RlbDtcbiAgICBwcml2YXRlIHJ1blRpbWVTZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZTogQXJyYXk8VHJlZUl0ZW1TZWxlY3Rpb25SZWN1cnNpdmVNb2RlbD47XG4gICAgcHJpdmF0ZSBzZWxlY3Rpb25Nb2RlbDogU2VsZWN0aW9uTW9kZWw8VHJlZUl0ZW1SdW5UaW1lTW9kZWw+O1xuICAgIHByaXZhdGUgX2lzQ2xpY2tUb2dnbGluZ05vZGUgPSBmYWxzZTtcbiAgICBwcml2YXRlIF9pc011bHRpc2VsZWN0ID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBfaXNTaW5nbGVTZWxlY3QgPSBmYWxzZTtcbiAgICBwcml2YXRlIF9pc1JlY3Vyc2l2ZVNlbGVjdGlvbiA9IGZhbHNlO1xuICAgIHByaXZhdGUgX2lzUmVjdXJzaXZlUGFyZW50U2VsZWN0aW9uID0gdHJ1ZTtcbiAgICBwcml2YXRlIF9zaG93VW5kZXJsaW5lZExpbmtzID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBfc2hvd0xpbmVzID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBfYXV0b1RyYW5zbGF0ZSA9IHRydWU7XG4gICAgcHJpdmF0ZSBfaGlnaGxpZ2h0UGF0aCA9IGZhbHNlO1xuICAgIHByaXZhdGUgc2VsZWN0aW9uTW9kZWxTdWJzO1xuICAgIHByaXZhdGUgc2Nyb2xsRGlzcGF0Y2hlclN1YnM7XG4gICAgcHJpdmF0ZSBfc2VsZWN0aW9uO1xuICAgIHByaXZhdGUgdHJlZVBhZ2luYXRpb246IEV1aVRyZWVQYWdpbmF0aW9uPFRyZWVJdGVtUnVuVGltZU1vZGVsPjtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLCBwcml2YXRlIHNjcm9sbERpc3BhdGNoZXI6IFNjcm9sbERpc3BhdGNoZXIpIHt9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pbml0VHJlZSgpO1xuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKGNoYW5nZXNbJ25vZGVzJ10/LmN1cnJlbnRWYWx1ZSAhPT0gY2hhbmdlc1snbm9kZXMnXT8ucHJldmlvdXNWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJUcmVlID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmluaXRUcmVlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uTW9kZWxTdWJzKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbk1vZGVsU3Vicy51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnNjcm9sbERpc3BhdGNoZXJTdWJzKSB7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbERpc3BhdGNoZXJTdWJzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRTZWxlY3Rpb24oKTogVHJlZURhdGFNb2RlbCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zZWxlY3Rpb247XG4gICAgfVxuXG4gICAgZ2V0UHJvY2Vzc2VkTm9kZXMoKTogVHJlZURhdGFNb2RlbCB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NlZE5vZGVzO1xuICAgIH1cblxuICAgIC8vIFRPRE86IGZpbmQgdGhlIGNvcnJlY3QgdHlwZSBvciB0dXJuIGludG8gYSBnZW5lcmljLCBodHRwczovL3d3dy50eXBlc2NyaXB0bGFuZy5vcmcvZG9jcy9oYW5kYm9vay8yL2dlbmVyaWNzLmh0bWxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIHRyYWNrQnkoaW5kZXg6IG51bWJlciwgaXRlbTogVHJlZUl0ZW1SdW5UaW1lTW9kZWwpOiBhbnkge1xuICAgICAgICByZXR1cm4gaXRlbS5wYXRoO1xuICAgIH1cblxuICAgIC8vIFRPRE86IGZpbmQgdGhlIGNvcnJlY3QgdHlwZSBvciB0dXJuIGludG8gYSBnZW5lcmljLCBodHRwczovL3d3dy50eXBlc2NyaXB0bGFuZy5vcmcvZG9jcy9oYW5kYm9vay8yL2dlbmVyaWNzLmh0bWxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIHRyYWNrQnlDb250cm9sKGl0ZW06IFRyZWVJdGVtUnVuVGltZU1vZGVsKTogYW55IHtcbiAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgfVxuXG4gICAgZ2V0VHJlZUl0ZW0ocGF0aDogc3RyaW5nKTogVHJlZUl0ZW1Nb2RlbCB7XG4gICAgICAgIGNvbnN0IGluZGV4QXJyOiBBcnJheTxudW1iZXI+ID0gdGhpcy5yZXNvbHZlUGF0aChwYXRoKTtcbiAgICAgICAgbGV0IG5vZGVBcnIgPSB0aGlzLnByb2Nlc3NlZE5vZGVzO1xuICAgICAgICBsZXQgbm9kZTtcbiAgICAgICAgaWYgKG5vZGVBcnIgJiYgQXJyYXkuaXNBcnJheShub2RlQXJyKSkge1xuICAgICAgICAgICAgaW5kZXhBcnI/LmZvckVhY2goKHBhdGhJbmRleDogbnVtYmVyLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChpbmRleCA8IGluZGV4QXJyLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgbm9kZUFyciA9IG5vZGVBcnIgJiYgbm9kZUFycltwYXRoSW5kZXhdPy5jaGlsZHJlbjtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBub2RlID0gbm9kZUFycltwYXRoSW5kZXhdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBub2RlO1xuICAgIH1cblxuICAgIGV4cGFuZEFsbCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jZGtUcmVlQ29udHJvbC5leHBhbmRBbGwoKTtcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICBleHBhbmRBdChwYXRoOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jZGtUcmVlQ29udHJvbC5leHBhbmREZXNjZW5kYW50cyh0aGlzLmdldFJ1blRpbWVUcmVlSXRlbShwYXRoWzBdKSk7XG4gICAgICAgIHRoaXMuY2RrVHJlZUNvbnRyb2wudG9nZ2xlRGVzY2VuZGFudHModGhpcy5nZXRSdW5UaW1lVHJlZUl0ZW0ocGF0aCkpO1xuICAgICAgICB0aGlzLmNka1RyZWVDb250cm9sLmV4cGFuZCh0aGlzLmdldFJ1blRpbWVUcmVlSXRlbShwYXRoKSk7XG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgY29sbGFwc2VBbGwoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2RrVHJlZUNvbnRyb2wuY29sbGFwc2VBbGwoKTtcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICBmaWx0ZXJUZXJtKGZpbHRlcklucHV0OiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgaWYgKGZpbHRlcklucHV0ICE9PSAnJyAmJiBmaWx0ZXJJbnB1dCAhPT0gbnVsbCAmJiB0eXBlb2YgZmlsdGVySW5wdXQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICB0aGlzLnRyZWVEYXRhUnVuVGltZSA9IHRoaXMuZmlsdGVyVHJlZURhdGEoc3RydWN0dXJlZENsb25lKHRoaXMudHJlZURhdGFSdW5UaW1lQmFja3VwKSwgJ2xhYmVsJywgZmlsdGVySW5wdXQpO1xuICAgICAgICAgICAgdGhpcy50cmVlRGF0YVJ1blRpbWUgPSB0aGlzLmFwcGx5UnVuVGltZUxhc3RJdGVtcyh0aGlzLnRyZWVEYXRhUnVuVGltZSk7XG4gICAgICAgICAgICB0aGlzLmNka0FycmF5RGF0YVNvdXJjZSA9IG5ldyBBcnJheURhdGFTb3VyY2UodGhpcy50cmVlRGF0YVJ1blRpbWUpO1xuICAgICAgICAgICAgdGhpcy5jZGtUcmVlQ29udHJvbCA9IG5ldyBOZXN0ZWRUcmVlQ29udHJvbDxUcmVlSXRlbVJ1blRpbWVNb2RlbD4oKG5vZGUpID0+IG5vZGU/LmNoaWxkcmVuLCB7IHRyYWNrQnk6IHRoaXMudHJhY2tCeUNvbnRyb2wgfSk7XG4gICAgICAgICAgICB0aGlzLmNka1RyZWVDb250cm9sLmRhdGFOb2RlcyA9IHRoaXMudHJlZURhdGFSdW5UaW1lO1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJUcmVlID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyVHJlZSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIHRoaXMuZXhwYW5kQWxsKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnRyZWVEYXRhUnVuVGltZSA9IHN0cnVjdHVyZWRDbG9uZSh0aGlzLnRyZWVEYXRhUnVuVGltZUJhY2t1cCk7XG4gICAgICAgICAgICB0aGlzLmNka0FycmF5RGF0YVNvdXJjZSA9IG5ldyBBcnJheURhdGFTb3VyY2UodGhpcy50cmVlRGF0YVJ1blRpbWUpO1xuICAgICAgICAgICAgdGhpcy5jZGtUcmVlQ29udHJvbCA9IG5ldyBOZXN0ZWRUcmVlQ29udHJvbDxUcmVlSXRlbVJ1blRpbWVNb2RlbD4oKG5vZGUpID0+IG5vZGU/LmNoaWxkcmVuLCB7IHRyYWNrQnk6IHRoaXMudHJhY2tCeUNvbnRyb2wgfSk7XG4gICAgICAgICAgICB0aGlzLmNka1RyZWVDb250cm9sLmRhdGFOb2RlcyA9IHRoaXMudHJlZURhdGFSdW5UaW1lO1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJUcmVlID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyVHJlZSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIHRoaXMuZXhwYW5kQWxsKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZXRBbGxTZWxlY3Rpb24oaXNDaGVja2VkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2V0SXNDaGVja2VkRm9yQWxsKHRoaXMudHJlZURhdGFSdW5UaW1lLCBpc0NoZWNrZWQpO1xuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIHVwZGF0ZVRyZWVJdGVtKHRyZWVJdGVtOiBUcmVlSXRlbU1vZGVsLCBwYXRoOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZXRUcmVlRGF0YShwYXRoLCB0aGlzLnByb2Nlc3NJbnB1dHMoW3RyZWVJdGVtXSlbMF0pO1xuICAgICAgICBjb25zdCBwYXRoQXJyID0gcGF0aC5zcGxpdCgnLicpO1xuICAgICAgICBjb25zdCBpbmRleCA9IHBhcnNlSW50KHBhdGhBcnIucG9wKCksIDEwKTtcbiAgICAgICAgY29uc3QgdHJlZUl0ZW1SdW50aW1lID0gdGhpcy5jYWxjdWxhdGVSdW5UaW1lU3RhdGUodHJlZUl0ZW0sIGluZGV4LCBwYXRoQXJyLmpvaW4oJy4nKSk7XG4gICAgICAgIHRoaXMuc2V0VHJlZURhdGFSdW5UaW1lKHBhdGgsIHRyZWVJdGVtUnVudGltZSk7XG4gICAgICAgIC8vIGl0ZW1SZWN1cnNpdmVTZWxlY3Rpb25TdGF0ZVxuICAgICAgICBjb25zdCBpdGVtUmVjdXJzaXZlU2VsZWN0aW9uU3RhdGUgPSB0aGlzLmNhbGN1bGF0ZUl0ZW1TZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZSh0cmVlSXRlbSk7XG4gICAgICAgIHRoaXMuc2V0UnVuVGltZVNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlVHJlZShwYXRoLCBpdGVtUmVjdXJzaXZlU2VsZWN0aW9uU3RhdGUpO1xuICAgICAgICB0aGlzLnN5bmNTdGF0ZUNoYW5nZXNBdFBhdGgocGF0aCk7XG4gICAgICAgIC8vIFJlbmRlcmluZ1xuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgdGhpcy50cmVlQ29tcG9uZW50SW5zdGFuY2UucmVuZGVyTm9kZUNoYW5nZXMoW10pO1xuICAgICAgICB0aGlzLnRyZWVDb21wb25lbnRJbnN0YW5jZS5yZW5kZXJOb2RlQ2hhbmdlcyh0aGlzLnRyZWVEYXRhUnVuVGltZSk7XG4gICAgICAgIGlmICh0aGlzLmNka1RyZWVDb250cm9sLmlzRXhwYW5kZWQodHJlZUl0ZW1SdW50aW1lKSAmJiAhdHJlZUl0ZW0ubm9kZS5pc0V4cGFuZGVkKSB7XG4gICAgICAgICAgICB0aGlzLmNka1RyZWVDb250cm9sLnRvZ2dsZSh0cmVlSXRlbVJ1bnRpbWUpO1xuICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLmNka1RyZWVDb250cm9sLmlzRXhwYW5kZWQodHJlZUl0ZW1SdW50aW1lKSAmJiB0cmVlSXRlbS5ub2RlLmlzRXhwYW5kZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY2RrVHJlZUNvbnRyb2wuZXhwYW5kKHRyZWVJdGVtUnVudGltZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgb25Ob2RlQ2xpY2sodHJlZVJ1blRpbWVJdGVtOiBUcmVlSXRlbVJ1blRpbWVNb2RlbCk6IHZvaWQge1xuICAgICAgICB0aGlzLm5vZGVDbGljay5lbWl0KHRoaXMuZ2V0VHJlZUl0ZW0odHJlZVJ1blRpbWVJdGVtPy5wYXRoKSk7XG4gICAgICAgIGlmICh0aGlzLmlzQ2xpY2tUb2dnbGluZ05vZGUpIHtcbiAgICAgICAgICAgIHRoaXMuY2RrVHJlZUNvbnRyb2wudG9nZ2xlKHRyZWVSdW5UaW1lSXRlbSk7XG4gICAgICAgICAgICB0aGlzLm9uTm9kZVRvZ2dsZSh0cmVlUnVuVGltZUl0ZW0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25Ob2RlVG9nZ2xlKHRyZWVSdW5UaW1lSXRlbTogVHJlZUl0ZW1SdW5UaW1lTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5nZXRUcmVlSXRlbSh0cmVlUnVuVGltZUl0ZW0/LnBhdGgpLm5vZGUuaXNFeHBhbmRlZCA9IHRoaXMuY2RrVHJlZUNvbnRyb2wuaXNFeHBhbmRlZCh0cmVlUnVuVGltZUl0ZW0pO1xuICAgICAgICB0aGlzLm5vZGVUb2dnbGUuZW1pdCh0aGlzLmdldFRyZWVJdGVtKHRyZWVSdW5UaW1lSXRlbT8ucGF0aCkpO1xuICAgIH1cblxuICAgIC8vIFRPRE86IGZpbmQgdGhlIGNvcnJlY3QgdHlwZSBvciB0dXJuIGludG8gYSBnZW5lcmljLCBodHRwczovL3d3dy50eXBlc2NyaXB0bGFuZy5vcmcvZG9jcy9oYW5kYm9vay8yL2dlbmVyaWNzLmh0bWxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIG5vZGVTZWxlY3RlZChldnQ6IGFueSwgcGF0aDogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmdldFRyZWVJdGVtKHBhdGgpO1xuICAgICAgICBjb25zdCBydW5UaW1lVHJlZUl0ZW0gPSB0aGlzLmdldFJ1blRpbWVCYWNrdXBUcmVlSXRlbShwYXRoKTtcbiAgICAgICAgY29uc3QgcmVuZGVyZWRSdW5UaW1lVHJlZUl0ZW0gPSB0aGlzLmdldFJ1blRpbWVUcmVlSXRlbShwYXRoKTtcbiAgICAgICAgY29uc3Qgbm9kZSA9IGl0ZW0ubm9kZTtcbiAgICAgICAgLy8gY29uc29sZS5sb2cocGF0aCxpdGVtLHJ1blRpbWVUcmVlSXRlbSwgcmVuZGVyZWRSdW5UaW1lVHJlZUl0ZW0pO1xuICAgICAgICBpZiAoIW5vZGU/LnNlbGVjdENvbmZpZz8uc2luZ2xlU2VsZWN0KSB7XG4gICAgICAgICAgICBub2RlLmlzU2VsZWN0ZWQgPSBldnQudGFyZ2V0LmNoZWNrZWQ7XG4gICAgICAgICAgICBub2RlLmlzSW5kZXRlcm1pbmF0ZSA9IGZhbHNlO1xuICAgICAgICAgICAgLy8gSWYgdGhlIG5vZGUgaXMgcmVjdXJzaXZlIGl0IHNldHMgZXZlcnkgY2hpbGRyZW4gd2l0aCB0aGUgY2hhbmdlLlxuICAgICAgICAgICAgaWYgKHJlbmRlcmVkUnVuVGltZVRyZWVJdGVtPy5jaGlsZHJlbiAmJiByZW5kZXJlZFJ1blRpbWVUcmVlSXRlbT8uY2hpbGRyZW4/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBpZiAobm9kZT8uc2VsZWN0Q29uZmlnPy5yZWN1cnNpdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2cocmVuZGVyZWRSdW5UaW1lVHJlZUl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldElzQ2hlY2tlZEZvckFsbChyZW5kZXJlZFJ1blRpbWVUcmVlSXRlbT8uY2hpbGRyZW4sIGV2dC50YXJnZXQuY2hlY2tlZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnNldFJ1blRpbWVTZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZVRyZWUoXG4gICAgICAgICAgICAgICAgcGF0aCxcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGN1bGF0ZUl0ZW1TZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZShzdHJ1Y3R1cmVkQ2xvbmUodGhpcy5nZXRUcmVlSXRlbShwYXRoKSkpLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChyZW5kZXJlZFJ1blRpbWVUcmVlSXRlbT8uY2hpbGRyZW4gJiYgcmVuZGVyZWRSdW5UaW1lVHJlZUl0ZW0/LmNoaWxkcmVuPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgaWYgKG5vZGU/LnNlbGVjdENvbmZpZz8ucmVjdXJzaXZlKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHRoaXMuc2V0SXNDaGVja2VkRm9yQWxsKHJlbmRlcmVkUnVuVGltZVRyZWVJdGVtPy5jaGlsZHJlbiwgZXZ0LnRhcmdldC5jaGVja2VkKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ydW5TdGF0ZUNoYW5nZXNGb3JBbGwocmVuZGVyZWRSdW5UaW1lVHJlZUl0ZW0/LmNoaWxkcmVuKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy50cmVlQ29tcG9uZW50SW5zdGFuY2U/LnJlbmRlck5vZGVDaGFuZ2VzKFtdKTtcbiAgICAgICAgICAgICAgICB0aGlzLnRyZWVDb21wb25lbnRJbnN0YW5jZT8ucmVuZGVyTm9kZUNoYW5nZXModGhpcy50cmVlRGF0YVJ1blRpbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zeW5jU3RhdGVDaGFuZ2VzQXRQYXRoKHBhdGgpO1xuICAgICAgICAgICAgaWYgKHRoaXMuZ2V0VHJlZUl0ZW0ocGF0aCkubm9kZS5pc1NlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RUcmVlSXRlbShydW5UaW1lVHJlZUl0ZW0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRlc2VsZWN0VHJlZUl0ZW0ocnVuVGltZVRyZWVJdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG5vZGVQYXRoc1NlcSA9IHRoaXMuZ2V0UGFyZW50UGF0aHMocGF0aCk7XG4gICAgICAgICAgICBpZiAobm9kZVBhdGhzU2VxLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBub2RlUGF0aHNTZXEuZm9yRWFjaCgobm9kZVBhdGg6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0cmVlSXRlbSA9IHRoaXMuZ2V0VHJlZUl0ZW0obm9kZVBhdGgpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGlsZFN0YXRlcyA9IHRoaXMuZ2V0UnVuVGltZVNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlKG5vZGVQYXRoKS5jaGlsZHJlbi5tYXAoKF8pID0+IF8uc2VsZWN0aW9uUmVjdXJzaXZlU3RhdGUpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVJ1blRpbWVTZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZShcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVQYXRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWNpZGVTZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZFN0YXRlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmVlSXRlbS5ub2RlPy5pc1NlbGVjdGVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyZWVJdGVtLm5vZGU/LnNlbGVjdENvbmZpZz8ucmVjdXJzaXZlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyZWVJdGVtLm5vZGU/LnNlbGVjdENvbmZpZz8ubm9BdXRvU2VsZWN0UGFyZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zeW5jU3RhdGVDaGFuZ2VzQXRQYXRoKG5vZGVQYXRoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBwcmV2SXRlbSA9IHRoaXMuc2VsZWN0aW9uTW9kZWwuc2VsZWN0ZWRbMF07XG4gICAgICAgICAgICBpZiAoZXZ0LnRhcmdldC5jaGVja2VkKSB7XG4gICAgICAgICAgICAgICAgaWYgKHByZXZJdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0VHJlZUl0ZW0ocHJldkl0ZW0ucGF0aCkubm9kZS5pc1NlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uTW9kZWwuZGVzZWxlY3QocHJldkl0ZW0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpdGVtLm5vZGUuaXNTZWxlY3RlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25Nb2RlbC5zZWxlY3QocnVuVGltZVRyZWVJdGVtKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaXRlbS5ub2RlLmlzU2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbk1vZGVsLmRlc2VsZWN0KHJ1blRpbWVUcmVlSXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5oaWdobGlnaHRQYXRoKSB7XG4gICAgICAgICAgICAgICAgaWYgKGV2dC50YXJnZXQuY2hlY2tlZCAmJiBwcmV2SXRlbSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwcmV2SXRlbU5vZGVQYXRoc1NlcSA9IHRoaXMuZ2V0UGFyZW50UGF0aHMocHJldkl0ZW0ucGF0aCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwcmV2SXRlbU5vZGVQYXRoc1NlcS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcmV2SXRlbU5vZGVQYXRoc1NlcS5mb3JFYWNoKChub2RlUGF0aDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVSdW5UaW1lU2VsZWN0aW9uUmVjdXJzaXZlU3RhdGUobm9kZVBhdGgsICdhbGxOb3RTZWxlY3RlZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3luY1N0YXRlQ2hhbmdlc0F0UGF0aChub2RlUGF0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBub2RlUGF0aHNTZXEgPSB0aGlzLmdldFBhcmVudFBhdGhzKHBhdGgpO1xuICAgICAgICAgICAgICAgIGlmIChub2RlUGF0aHNTZXE/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgbm9kZVBhdGhzU2VxLmZvckVhY2goKG5vZGVQYXRoOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlUnVuVGltZVNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlKG5vZGVQYXRoLCBldnQudGFyZ2V0LmNoZWNrZWQgPyAnaW5kZXRlcm1pbmF0ZScgOiAnYWxsTm90U2VsZWN0ZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3luY1N0YXRlQ2hhbmdlc0F0UGF0aChub2RlUGF0aCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBoYXNDaGlsZCA9IChfOiBudW1iZXIsIGl0ZW06IFRyZWVJdGVtUnVuVGltZU1vZGVsKTogYm9vbGVhbiA9PiAhIWl0ZW0/LmNoaWxkcmVuICYmIGl0ZW0/LmNoaWxkcmVuPy5sZW5ndGggPj0gMDtcblxuICAgIC8vIFRPRE86IGZpbmQgdGhlIGNvcnJlY3QgdHlwZSBvciB0dXJuIGludG8gYSBnZW5lcmljLCBodHRwczovL3d3dy50eXBlc2NyaXB0bGFuZy5vcmcvZG9jcy9oYW5kYm9vay8yL2dlbmVyaWNzLmh0bWxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIG9uU2VsZWN0Rm4ocGF0aDogc3RyaW5nKTogKGV2dDogYW55KSA9PiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZ2V0VHJlZUl0ZW0ocGF0aCk/Lm5vZGU/LnNlbGVjdGFibGUpIHtcbiAgICAgICAgICAgIGNvbnN0IG5vZGVTZWxlY3RlZCA9IHRoaXMubm9kZVNlbGVjdGVkLmJpbmQodGhpcyk7XG4gICAgICAgICAgICAvLyBUT0RPOiBmaW5kIHRoZSBjb3JyZWN0IHR5cGUgb3IgdHVybiBpbnRvIGEgZ2VuZXJpYywgaHR0cHM6Ly93d3cudHlwZXNjcmlwdGxhbmcub3JnL2RvY3MvaGFuZGJvb2svMi9nZW5lcmljcy5odG1sXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICAgICAgcmV0dXJuIChldnQ6IGFueSkgPT4gbm9kZVNlbGVjdGVkKGV2dCwgcGF0aCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gVE9ETzogZmluZCB0aGUgY29ycmVjdCB0eXBlIG9yIHR1cm4gaW50byBhIGdlbmVyaWMsIGh0dHBzOi8vd3d3LnR5cGVzY3JpcHRsYW5nLm9yZy9kb2NzL2hhbmRib29rLzIvZ2VuZXJpY3MuaHRtbFxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICByZXR1cm4gKGV2dDogYW55KSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ3RyZWVJdGVtTW9kZWwubm9kZS5zZWxlY3RhYmxlIGlzIGZhbHNlLCB5b3UgY2FuIG5vdCBpbXBsZW1lbnQgb25TZWxlY3QnKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBnZXRSdW5UaW1lU2VsZWN0aW9uUmVjdXJzaXZlU3RhdGUocGF0aDogc3RyaW5nKTogVHJlZUl0ZW1TZWxlY3Rpb25SZWN1cnNpdmVNb2RlbCB7XG4gICAgICAgIGNvbnN0IGluZGV4QXJyOiBBcnJheTxudW1iZXI+ID0gdGhpcy5yZXNvbHZlUGF0aChwYXRoKTtcbiAgICAgICAgbGV0IG5vZGVBcnIgPSB0aGlzLnJ1blRpbWVTZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZTtcbiAgICAgICAgbGV0IG5vZGU7XG4gICAgICAgIGluZGV4QXJyPy5mb3JFYWNoKChwYXRoSW5kZXg6IG51bWJlciwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGlmIChpbmRleCA8IGluZGV4QXJyLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICBub2RlQXJyID0gbm9kZUFycltwYXRoSW5kZXhdPy5jaGlsZHJlbjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbm9kZSA9IG5vZGVBcnJbcGF0aEluZGV4XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBub2RlO1xuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdFRyZWUoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLm5vZGVzKSB7XG4gICAgICAgICAgICB0aGlzLl9pc011bHRpTGV2ZWwgPSB0aGlzLmNoZWNrSWZNdWx0aUxldmVsKHRoaXMubm9kZXMpO1xuICAgICAgICAgICAgdGhpcy5wcm9jZXNzZWROb2RlcyA9IHRoaXMucHJvY2Vzc0lucHV0cyhzdHJ1Y3R1cmVkQ2xvbmUodGhpcy5ub2RlcykpO1xuICAgICAgICAgICAgdGhpcy50cmVlRGF0YVJ1blRpbWUgPSB0aGlzLmNyZWF0ZVRyZWVEYXRhUnVudGltZSh0aGlzLnByb2Nlc3NlZE5vZGVzKTtcbiAgICAgICAgICAgIHRoaXMudHJlZURhdGFSdW5UaW1lID0gdGhpcy5hcHBseVJ1blRpbWVMYXN0SXRlbXModGhpcy50cmVlRGF0YVJ1blRpbWUpO1xuICAgICAgICAgICAgdGhpcy5ydW5UaW1lU2VsZWN0aW9uUmVjdXJzaXZlU3RhdGUgPSB0aGlzLmNyZWF0ZVJ1blRpbWVTZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZSh0aGlzLnByb2Nlc3NlZE5vZGVzKTtcbiAgICAgICAgICAgIHRoaXMudHJlZURhdGFSdW5UaW1lQmFja3VwID0gc3RydWN0dXJlZENsb25lKHRoaXMudHJlZURhdGFSdW5UaW1lKTtcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHRoaXMucHJvY2Vzc2VkTm9kZXMsdGhpcy50cmVlRGF0YVJ1blRpbWUpO1xuICAgICAgICAgICAgaWYgKHRoaXMudHJlZURhdGFSdW5UaW1lQmFja3VwLmxlbmd0aCA+IDgwMCkge1xuICAgICAgICAgICAgICAgIHRoaXMudHJlZVBhZ2luYXRpb24gPSBuZXcgRXVpVHJlZVBhZ2luYXRpb248VHJlZUl0ZW1SdW5UaW1lTW9kZWw+KHRoaXMudHJlZURhdGFSdW5UaW1lQmFja3VwLCAxLCAyLCA0MDApO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhZ2luYXRlZERhdGEgPSB0aGlzLnRyZWVQYWdpbmF0aW9uLmdldFZpZXdEYXRhKCkuZGF0YTtcbiAgICAgICAgICAgICAgICB0aGlzLmNka0FycmF5RGF0YVNvdXJjZSA9IG5ldyBBcnJheURhdGFTb3VyY2U8VHJlZUl0ZW1SdW5UaW1lTW9kZWw+KHBhZ2luYXRlZERhdGEpO1xuICAgICAgICAgICAgICAgIHRoaXMuY2RrVHJlZUNvbnRyb2wgPSBuZXcgTmVzdGVkVHJlZUNvbnRyb2w8VHJlZUl0ZW1SdW5UaW1lTW9kZWw+KChub2RlKSA9PiBub2RlPy5jaGlsZHJlbiwge1xuICAgICAgICAgICAgICAgICAgICB0cmFja0J5OiB0aGlzLnRyYWNrQnlDb250cm9sLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuY2RrVHJlZUNvbnRyb2wuZGF0YU5vZGVzID0gcGFnaW5hdGVkRGF0YTtcbiAgICAgICAgICAgICAgICB0aGlzLnJ1blNjcm9sbExpc3RlbmVyKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuY2RrQXJyYXlEYXRhU291cmNlID0gbmV3IEFycmF5RGF0YVNvdXJjZTxUcmVlSXRlbVJ1blRpbWVNb2RlbD4odGhpcy50cmVlRGF0YVJ1blRpbWUpO1xuICAgICAgICAgICAgICAgIHRoaXMuY2RrVHJlZUNvbnRyb2wgPSBuZXcgTmVzdGVkVHJlZUNvbnRyb2w8VHJlZUl0ZW1SdW5UaW1lTW9kZWw+KChub2RlKSA9PiBub2RlPy5jaGlsZHJlbiwge1xuICAgICAgICAgICAgICAgICAgICB0cmFja0J5OiB0aGlzLnRyYWNrQnlDb250cm9sLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuY2RrVHJlZUNvbnRyb2wuZGF0YU5vZGVzID0gdGhpcy50cmVlRGF0YVJ1blRpbWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnJlbmRlckluaXRpYWxFeHBhbmQodGhpcy50cmVlRGF0YVJ1blRpbWUpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25Nb2RlbCA9IG5ldyBTZWxlY3Rpb25Nb2RlbDxUcmVlSXRlbVJ1blRpbWVNb2RlbD4oXG4gICAgICAgICAgICAgICAgdHJ1ZSxcbiAgICAgICAgICAgICAgICB0aGlzLmdldEluaXRpYWxTZWxlY3Rpb24odGhpcy50cmVlRGF0YVJ1blRpbWUpLFxuICAgICAgICAgICAgICAgIHRydWUsXG4gICAgICAgICAgICAgICAgKGEsIGIpID0+IGE/LnBhdGggPT09IGI/LnBhdGgsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5fc2VsZWN0aW9uID0gWy4uLnRoaXMuc2VsZWN0aW9uTW9kZWwuc2VsZWN0ZWRdPy5tYXAoKGl0ZW0pID0+IHRoaXMuZ2V0VHJlZUl0ZW0oaXRlbT8ucGF0aCkpO1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJUcmVlID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbk1vZGVsU3Vicykge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uTW9kZWxTdWJzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbk1vZGVsU3VicyA9IHRoaXMuc2VsZWN0aW9uTW9kZWwuY2hhbmdlZC5waXBlKGRlYm91bmNlVGltZSgxKSkuc3Vic2NyaWJlKChzYykgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGlvbkNoYW5nZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgYWRkZWQ6IHNjLmFkZGVkLm1hcCgoXykgPT4gdGhpcy5nZXRUcmVlSXRlbShfLnBhdGgpKSxcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlZDogc2MucmVtb3ZlZC5tYXAoKF8pID0+IHRoaXMuZ2V0VHJlZUl0ZW0oXy5wYXRoKSksXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWy4uLnRoaXMuc2VsZWN0aW9uTW9kZWwuc2VsZWN0ZWRdLm1hcCgoaXRlbSkgPT4gdGhpcy5nZXRUcmVlSXRlbShpdGVtLnBhdGgpKSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHRoaXMuX3NlbGVjdGlvbiA9IHNlbGVjdGlvbkNoYW5nZS5zZWxlY3Rpb247XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2UuZW1pdChzZWxlY3Rpb25DaGFuZ2UpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwcm9jZXNzSW5wdXRzKHRyZWVEYXRhOiBUcmVlRGF0YU1vZGVsKTogVHJlZURhdGFNb2RlbCB7XG4gICAgICAgIGlmICh0aGlzLmlzTXVsdGlzZWxlY3QpIHtcbiAgICAgICAgICAgIHRyZWVEYXRhID0gdGhpcy5vdmVycmlkZVRyZWVEYXRhTW9kZWxGb3JTZWxlY3Rpb24odHJlZURhdGEsIHRoaXMuaXNSZWN1cnNpdmVTZWxlY3Rpb24sICF0aGlzLmlzUmVjdXJzaXZlUGFyZW50U2VsZWN0aW9uKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pc1NpbmdsZVNlbGVjdCkge1xuICAgICAgICAgICAgdHJlZURhdGEgPSB0aGlzLm92ZXJyaWRlVHJlZURhdGFNb2RlbEZvclNlbGVjdGlvbih0cmVlRGF0YSwgZmFsc2UsIGZhbHNlLCB0cnVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJlZURhdGE7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvdmVycmlkZVRyZWVEYXRhTW9kZWxGb3JTZWxlY3Rpb24oXG4gICAgICAgIG5vZGVBcnI6IFRyZWVEYXRhTW9kZWwsXG4gICAgICAgIGlzUmVjdXJzaXZlOiBib29sZWFuLFxuICAgICAgICBub0F1dG9TZWxlY3RQYXJlbnQ6IGJvb2xlYW4sXG4gICAgICAgIHNpbmdsZVNlbGVjdD86IGJvb2xlYW4sXG4gICAgKTogVHJlZURhdGFNb2RlbCB7XG4gICAgICAgIHJldHVybiBub2RlQXJyPy5tYXAoKGl0ZW06IFRyZWVJdGVtTW9kZWwsIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgIGlmIChpdGVtPy5jaGlsZHJlbiAmJiBpdGVtLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgICAgICAgICAgICBub2RlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5pdGVtLm5vZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RhYmxlOiB0eXBlb2YgaXRlbT8ubm9kZT8uc2VsZWN0YWJsZSA9PT0gJ3VuZGVmaW5lZCcgPyB0cnVlIDogaXRlbT8ubm9kZT8uc2VsZWN0YWJsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlzU2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaXNJbmRldGVybWluYXRlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdENvbmZpZzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLml0ZW0ubm9kZS5zZWxlY3RDb25maWcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdXJzaXZlOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgaXRlbT8ubm9kZT8uc2VsZWN0Q29uZmlnPy5yZWN1cnNpdmUgPT09ICd1bmRlZmluZWQnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICEhaXNSZWN1cnNpdmVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogaXRlbT8ubm9kZT8uc2VsZWN0Q29uZmlnPy5yZWN1cnNpdmUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9BdXRvU2VsZWN0UGFyZW50OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgaXRlbT8ubm9kZT8uc2VsZWN0Q29uZmlnPy5ub0F1dG9TZWxlY3RQYXJlbnQgPT09ICd1bmRlZmluZWQnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IG5vQXV0b1NlbGVjdFBhcmVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBpdGVtPy5ub2RlPy5zZWxlY3RDb25maWc/Lm5vQXV0b1NlbGVjdFBhcmVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVTZWxlY3Q6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiBpdGVtPy5ub2RlPy5zZWxlY3RDb25maWc/LnNpbmdsZVNlbGVjdCA9PT0gJ3VuZGVmaW5lZCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gc2luZ2xlU2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGl0ZW0/Lm5vZGU/LnNlbGVjdENvbmZpZz8uc2luZ2xlU2VsZWN0LFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IHRoaXMub3ZlcnJpZGVUcmVlRGF0YU1vZGVsRm9yU2VsZWN0aW9uKGl0ZW0uY2hpbGRyZW4sIGlzUmVjdXJzaXZlLCBub0F1dG9TZWxlY3RQYXJlbnQsIHNpbmdsZVNlbGVjdCksXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgbm9kZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4uaXRlbS5ub2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0YWJsZTogdHlwZW9mIGl0ZW0/Lm5vZGU/LnNlbGVjdGFibGUgPT09ICd1bmRlZmluZWQnID8gdHJ1ZSA6IGl0ZW0/Lm5vZGU/LnNlbGVjdGFibGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RDb25maWc6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5pdGVtLm5vZGU/LnNlbGVjdENvbmZpZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVTZWxlY3Q6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiBpdGVtPy5ub2RlPy5zZWxlY3RDb25maWc/LnNpbmdsZVNlbGVjdCA9PT0gJ3VuZGVmaW5lZCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gc2luZ2xlU2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGl0ZW0/Lm5vZGU/LnNlbGVjdENvbmZpZz8uc2luZ2xlU2VsZWN0LFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJ1blNjcm9sbExpc3RlbmVyKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNjcm9sbERpc3BhdGNoZXJTdWJzID0gdGhpcy5zY3JvbGxEaXNwYXRjaGVyLnNjcm9sbGVkKCkuc3Vic2NyaWJlKChzY3JvbGxhYmxlOiBDZGtTY3JvbGxhYmxlKSA9PiB7XG4gICAgICAgICAgICBpZiAoc2Nyb2xsYWJsZSAmJiB0aGlzLmNoZWNrSWZDdXJyZW50U2Nyb2xsYWJsZShzY3JvbGxhYmxlKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzQXRCb3R0b20gPVxuICAgICAgICAgICAgICAgICAgICBzY3JvbGxhYmxlPy5nZXRFbGVtZW50UmVmKCkubmF0aXZlRWxlbWVudC5zY3JvbGxUb3AgKyBzY3JvbGxhYmxlPy5nZXRFbGVtZW50UmVmKCkubmF0aXZlRWxlbWVudC5jbGllbnRIZWlnaHQgPj1cbiAgICAgICAgICAgICAgICAgICAgc2Nyb2xsYWJsZT8uZ2V0RWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsSGVpZ2h0O1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzQXRUb3AgPSBzY3JvbGxhYmxlPy5nZXRFbGVtZW50UmVmKCkubmF0aXZlRWxlbWVudC5zY3JvbGxUb3AgPT09IDA7XG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ0VsZW1lbnQ6JywgdGhpcy5jZGtTY3JvbGxhYmxlUmVmLmdldEVsZW1lbnRSZWYoKSk7XG4gICAgICAgICAgICAgICAgaWYgKGlzQXRCb3R0b20gJiYgIXRoaXMudHJlZVBhZ2luYXRpb24uaXNBdE1heCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm5vZGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJlZURhdGFSdW5UaW1lID0gdGhpcy50cmVlUGFnaW5hdGlvbi5wYWdpbmF0ZU5leHQoKS5kYXRhO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50cmVlRGF0YVJ1blRpbWUgPSB0aGlzLmFwcGx5UnVuVGltZUxhc3RJdGVtcyh0aGlzLnRyZWVEYXRhUnVuVGltZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNka0FycmF5RGF0YVNvdXJjZSA9IG5ldyBBcnJheURhdGFTb3VyY2UodGhpcy50cmVlRGF0YVJ1blRpbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jZGtUcmVlQ29udHJvbCA9IG5ldyBOZXN0ZWRUcmVlQ29udHJvbDxUcmVlSXRlbVJ1blRpbWVNb2RlbD4oKG5vZGUpID0+IG5vZGU/LmNoaWxkcmVuLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2tCeTogdGhpcy50cmFja0J5Q29udHJvbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jZGtUcmVlQ29udHJvbC5kYXRhTm9kZXMgPSB0aGlzLnRyZWVEYXRhUnVuVGltZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyVHJlZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbmRlclRyZWUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmV4cGFuZEFsbCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdG90YWxIZWlnaHQgPSBzY3JvbGxhYmxlLm1lYXN1cmVTY3JvbGxPZmZzZXQoJ2JvdHRvbScpICsgc2Nyb2xsYWJsZS5tZWFzdXJlU2Nyb2xsT2Zmc2V0KCd0b3AnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZpZXdwb3J0SGVpZ2h0ID0gc2Nyb2xsYWJsZS5nZXRFbGVtZW50UmVmKCkubmF0aXZlRWxlbWVudC5jbGllbnRIZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwb3NpdGlvblRvU2Nyb2xsID0gdG90YWxIZWlnaHQgLSB2aWV3cG9ydEhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjcm9sbGFibGUuc2Nyb2xsVG8oeyB0b3A6IHBvc2l0aW9uVG9TY3JvbGwgLyAyIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpc0F0VG9wICYmIHRoaXMudHJlZVBhZ2luYXRpb24uZ2V0Q3VycmVudFN0YXJ0UGFnZSgpID4gMSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5ub2Rlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyZWVEYXRhUnVuVGltZSA9IHRoaXMudHJlZVBhZ2luYXRpb24ucGFnaW5hdGVQcmV2KCkuZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJlZURhdGFSdW5UaW1lID0gdGhpcy5hcHBseVJ1blRpbWVMYXN0SXRlbXModGhpcy50cmVlRGF0YVJ1blRpbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jZGtBcnJheURhdGFTb3VyY2UgPSBuZXcgQXJyYXlEYXRhU291cmNlKHRoaXMudHJlZURhdGFSdW5UaW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2RrVHJlZUNvbnRyb2wgPSBuZXcgTmVzdGVkVHJlZUNvbnRyb2w8VHJlZUl0ZW1SdW5UaW1lTW9kZWw+KChub2RlKSA9PiBub2RlPy5jaGlsZHJlbiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNrQnk6IHRoaXMudHJhY2tCeUNvbnRyb2wsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2RrVHJlZUNvbnRyb2wuZGF0YU5vZGVzID0gdGhpcy50cmVlRGF0YVJ1blRpbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbmRlclRyZWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJUcmVlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5leHBhbmRBbGwoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRvdGFsSGVpZ2h0ID0gc2Nyb2xsYWJsZS5tZWFzdXJlU2Nyb2xsT2Zmc2V0KCdib3R0b20nKSArIHNjcm9sbGFibGUubWVhc3VyZVNjcm9sbE9mZnNldCgndG9wJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2aWV3cG9ydEhlaWdodCA9IHNjcm9sbGFibGUuZ2V0RWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQuY2xpZW50SGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcG9zaXRpb25Ub1Njcm9sbCA9IHRvdGFsSGVpZ2h0IC0gdmlld3BvcnRIZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBzY3JvbGxhYmxlLnNjcm9sbFRvKHsgdG9wOiBwb3NpdGlvblRvU2Nyb2xsIC8gMiArIHZpZXdwb3J0SGVpZ2h0IH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFNlbGVjdGlvbkluZGV4T2ZJdGVtKHJ1blRpbWVUcmVlSXRlbTogVHJlZUl0ZW1SdW5UaW1lTW9kZWwpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3Rpb25Nb2RlbC5zZWxlY3RlZC5maW5kSW5kZXgoKGkpID0+IGk/LnBhdGggPT09IHJ1blRpbWVUcmVlSXRlbT8ucGF0aCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZWxlY3RUcmVlSXRlbShydW5UaW1lVHJlZUl0ZW06IFRyZWVJdGVtUnVuVGltZU1vZGVsKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGluZGV4T2ZJdGVtID0gdGhpcy5nZXRTZWxlY3Rpb25JbmRleE9mSXRlbShydW5UaW1lVHJlZUl0ZW0pO1xuICAgICAgICBpZiAoaW5kZXhPZkl0ZW0gPT09IC0xKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbk1vZGVsLnNlbGVjdChydW5UaW1lVHJlZUl0ZW0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBkZXNlbGVjdFRyZWVJdGVtKHJ1blRpbWVUcmVlSXRlbTogVHJlZUl0ZW1SdW5UaW1lTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaW5kZXhPZkl0ZW0gPSB0aGlzLmdldFNlbGVjdGlvbkluZGV4T2ZJdGVtKHJ1blRpbWVUcmVlSXRlbSk7XG4gICAgICAgIGlmIChpbmRleE9mSXRlbSA+IC0xKSB7XG4gICAgICAgICAgICBjb25zdCBuZXdTZWxlY3Rpb24gPSBbLi4udGhpcy5zZWxlY3Rpb25Nb2RlbC5zZWxlY3RlZF07XG4gICAgICAgICAgICBuZXdTZWxlY3Rpb24uc3BsaWNlKGluZGV4T2ZJdGVtLCAxKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uTW9kZWwuc2V0U2VsZWN0aW9uKC4uLm5ld1NlbGVjdGlvbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZVRyZWVEYXRhUnVudGltZShub2RlczogVHJlZURhdGFNb2RlbCk6IFRyZWVEYXRhUnVuVGltZU1vZGVsIHtcbiAgICAgICAgcmV0dXJuIHN0cnVjdHVyZWRDbG9uZShub2Rlcyk/Lm1hcCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNhbGN1bGF0ZVJ1blRpbWVTdGF0ZShpdGVtLCBpbmRleCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXBwbHlSdW5UaW1lTGFzdEl0ZW1zKGl0ZW1zOiBUcmVlRGF0YVJ1blRpbWVNb2RlbCk6IFRyZWVEYXRhUnVuVGltZU1vZGVsIHtcbiAgICAgICAgcmV0dXJuIGl0ZW1zPy5tYXAoKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBpZiAoaXRlbT8uY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgICAgICAgICAgICBsYXN0OiBpdGVtcy5sZW5ndGggPT09IGluZGV4ICsgMSA/IHRydWUgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBpdGVtLmNoaWxkcmVuPy5sZW5ndGggPiAwID8gdGhpcy5hcHBseVJ1blRpbWVMYXN0SXRlbXMoaXRlbS5jaGlsZHJlbikgOiBpdGVtPy5jaGlsZHJlbixcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgICAgICAgICAgICBsYXN0OiBpdGVtcy5sZW5ndGggPT09IGluZGV4ICsgMSA/IHRydWUgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVSdW5UaW1lU2VsZWN0aW9uUmVjdXJzaXZlU3RhdGUobm9kZXM6IFRyZWVEYXRhTW9kZWwpOiBBcnJheTxUcmVlSXRlbVNlbGVjdGlvblJlY3Vyc2l2ZU1vZGVsPiB7XG4gICAgICAgIHJldHVybiBzdHJ1Y3R1cmVkQ2xvbmUobm9kZXMpPy5tYXAoKGl0ZW0pID0+IHRoaXMuY2FsY3VsYXRlSXRlbVNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlKHsgLi4uaXRlbSB9KSk7XG4gICAgfVxuXG4gICAgLy8gQ3JlYXRpbmcgcnVuIHRpbWUgc3RhdGUgd2hpY2ggaW5jbHVkZXMgY2hpbGRyZW4gc2VsZWN0aW9uIHN0YXRlIGZvciBzZWxlY3Rpb24gdHJlZS5cbiAgICBwcml2YXRlIGNhbGN1bGF0ZUl0ZW1TZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZSh0cmVlSXRlbTogVHJlZUl0ZW1Nb2RlbCwgaXNTZWxlY3RlZD86IGJvb2xlYW4pOiBUcmVlSXRlbVNlbGVjdGlvblJlY3Vyc2l2ZU1vZGVsIHtcbiAgICAgICAgY29uc3QgY2hpbGRyZW5TZWxlY3Rpb25SZWN1cnNpdmU6IEFycmF5PFRyZWVJdGVtU2VsZWN0aW9uUmVjdXJzaXZlTW9kZWw+ID0gW107XG4gICAgICAgIGlmICh0cmVlSXRlbS5jaGlsZHJlbiAmJiB0cmVlSXRlbS5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0cmVlSXRlbS5jaGlsZHJlbi5mb3JFYWNoKChjaGlsZCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBjaGlsZHJlblNlbGVjdGlvblJlY3Vyc2l2ZVtpbmRleF0gPSB0aGlzLmNhbGN1bGF0ZUl0ZW1TZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZShjaGlsZCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjaGlsZFN0YXRlcyA9IGNoaWxkcmVuU2VsZWN0aW9uUmVjdXJzaXZlLm1hcCgoXykgPT4gXy5zZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZSk7XG4gICAgICAgIGNvbnN0IGl0ZW1TdGF0ZTogU2VsZWN0aW9uUmVjdXJzaXZlU3RhdGUgPSB0aGlzLmRlY2lkZVNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlKFxuICAgICAgICAgICAgY2hpbGRTdGF0ZXMsXG4gICAgICAgICAgICBpc1NlbGVjdGVkIHx8IHRyZWVJdGVtLm5vZGUuaXNTZWxlY3RlZCxcbiAgICAgICAgICAgIHRyZWVJdGVtLm5vZGU/LnNlbGVjdENvbmZpZz8ucmVjdXJzaXZlLFxuICAgICAgICAgICAgdHJlZUl0ZW0ubm9kZT8uc2VsZWN0Q29uZmlnPy5ub0F1dG9TZWxlY3RQYXJlbnQsXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlOiBpdGVtU3RhdGUsXG4gICAgICAgICAgICBjaGlsZHJlbjogY2hpbGRyZW5TZWxlY3Rpb25SZWN1cnNpdmUsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBkZWNpZGVTZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZShcbiAgICAgICAgY2hpbGRTdGF0ZXM6IEFycmF5PFNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlPiA9IFtdLFxuICAgICAgICBpc1NlbGVjdGVkOiBib29sZWFuLFxuICAgICAgICByZWN1cnNpdmU6IGJvb2xlYW4sXG4gICAgICAgIG5vQXV0b1NlbGVjdFBhcmVudDogYm9vbGVhbixcbiAgICApOiBTZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZSB7XG4gICAgICAgIGxldCBpdGVtU3RhdGU6IFNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlID0gJ2luZGV0ZXJtaW5hdGUnO1xuICAgICAgICBpZiAoaXNTZWxlY3RlZCAmJiBjaGlsZFN0YXRlcy5ldmVyeSgoc3RhdGUpID0+IHN0YXRlID09PSAnYWxsU2VsZWN0ZWQnKSkge1xuICAgICAgICAgICAgaXRlbVN0YXRlID0gJ2FsbFNlbGVjdGVkJztcbiAgICAgICAgfSBlbHNlIGlmICghaXNTZWxlY3RlZCAmJiBjaGlsZFN0YXRlcy5ldmVyeSgoc3RhdGUpID0+IHN0YXRlID09PSAnYWxsTm90U2VsZWN0ZWQnKSkge1xuICAgICAgICAgICAgaXRlbVN0YXRlID0gJ2FsbE5vdFNlbGVjdGVkJztcbiAgICAgICAgfSBlbHNlIGlmIChyZWN1cnNpdmUgJiYgY2hpbGRTdGF0ZXMuZXZlcnkoKHN0YXRlKSA9PiBzdGF0ZSA9PT0gJ2FsbFNlbGVjdGVkJykgJiYgIWlzU2VsZWN0ZWQgJiYgIW5vQXV0b1NlbGVjdFBhcmVudCkge1xuICAgICAgICAgICAgaXRlbVN0YXRlID0gJ2FsbFNlbGVjdGVkJztcbiAgICAgICAgfSBlbHNlIGlmIChyZWN1cnNpdmUgJiYgY2hpbGRTdGF0ZXMuZXZlcnkoKHN0YXRlKSA9PiBzdGF0ZSA9PT0gJ2FsbE5vdFNlbGVjdGVkJykgJiYgaXNTZWxlY3RlZCkge1xuICAgICAgICAgICAgaXRlbVN0YXRlID0gJ2FsbE5vdFNlbGVjdGVkJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXRlbVN0YXRlO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3luY1N0YXRlQ2hhbmdlc0F0UGF0aChub2RlUGF0aCk6IHZvaWQge1xuICAgICAgICBjb25zdCB0cmVlSXRlbSA9IHRoaXMuZ2V0VHJlZUl0ZW0obm9kZVBhdGgpO1xuICAgICAgICBjb25zdCBydW5UaW1lVHJlZUl0ZW0gPSB0aGlzLmdldFJ1blRpbWVCYWNrdXBUcmVlSXRlbShub2RlUGF0aCk7XG4gICAgICAgIGNvbnN0IHJ1blRpbWVTZWxlY3Rpb25SZWN1cnNpdmVJdGVtID0gdGhpcy5nZXRSdW5UaW1lU2VsZWN0aW9uUmVjdXJzaXZlU3RhdGUobm9kZVBhdGgpO1xuICAgICAgICBpZiAodHJlZUl0ZW0/Lm5vZGU/LnNlbGVjdGFibGUgJiYgdHJlZUl0ZW0ubm9kZT8uc2VsZWN0Q29uZmlnPy5yZWN1cnNpdmUpIHtcbiAgICAgICAgICAgIGlmICghdHJlZUl0ZW0ubm9kZT8uc2VsZWN0Q29uZmlnPy5ub0F1dG9TZWxlY3RQYXJlbnQpIHtcbiAgICAgICAgICAgICAgICB0cmVlSXRlbS5ub2RlID0ge1xuICAgICAgICAgICAgICAgICAgICAuLi50cmVlSXRlbS5ub2RlLFxuICAgICAgICAgICAgICAgICAgICBpc1NlbGVjdGVkOiBydW5UaW1lU2VsZWN0aW9uUmVjdXJzaXZlSXRlbS5zZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZSA9PT0gJ2FsbFNlbGVjdGVkJyxcbiAgICAgICAgICAgICAgICAgICAgaXNJbmRldGVybWluYXRlOiBydW5UaW1lU2VsZWN0aW9uUmVjdXJzaXZlSXRlbS5zZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZSA9PT0gJ2luZGV0ZXJtaW5hdGUnLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRyZWVJdGVtLm5vZGUgPSB7XG4gICAgICAgICAgICAgICAgICAgIC4uLnRyZWVJdGVtLm5vZGUsXG4gICAgICAgICAgICAgICAgICAgIGlzU2VsZWN0ZWQ6IHRyZWVJdGVtLm5vZGUuaXNTZWxlY3RlZCAmJiBydW5UaW1lU2VsZWN0aW9uUmVjdXJzaXZlSXRlbS5zZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZSA9PT0gJ2FsbFNlbGVjdGVkJyxcbiAgICAgICAgICAgICAgICAgICAgaXNJbmRldGVybWluYXRlOlxuICAgICAgICAgICAgICAgICAgICAgICAgcnVuVGltZVNlbGVjdGlvblJlY3Vyc2l2ZUl0ZW0uc2VsZWN0aW9uUmVjdXJzaXZlU3RhdGUgPT09ICdpbmRldGVybWluYXRlJyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgKCF0cmVlSXRlbS5ub2RlLmlzU2VsZWN0ZWQgJiYgcnVuVGltZVNlbGVjdGlvblJlY3Vyc2l2ZUl0ZW0uc2VsZWN0aW9uUmVjdXJzaXZlU3RhdGUgPT09ICdhbGxTZWxlY3RlZCcpLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyh0cmVlSXRlbSwgdHJlZUl0ZW0ubm9kZS50cmVlQ29udGVudEJsb2NrLmxhYmVsLCAnaXNTZWxlY3RlZDonICsgdHJlZUl0ZW0ubm9kZS5pc1NlbGVjdGVkLCAnaXNJbmRldGVybWluYXRlOicgKyB0cmVlSXRlbS5ub2RlLmlzSW5kZXRlcm1pbmF0ZSk7XG4gICAgICAgICAgICBpZiAodHJlZUl0ZW0ubm9kZS5pc1NlbGVjdGVkID09PSB0cnVlICYmICF0aGlzLnNlbGVjdGlvbk1vZGVsLmlzU2VsZWN0ZWQocnVuVGltZVRyZWVJdGVtKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0VHJlZUl0ZW0ocnVuVGltZVRyZWVJdGVtKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHJlZUl0ZW0ubm9kZS5pc1NlbGVjdGVkID09PSBmYWxzZSAmJiB0aGlzLnNlbGVjdGlvbk1vZGVsLmlzU2VsZWN0ZWQocnVuVGltZVRyZWVJdGVtKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGVzZWxlY3RUcmVlSXRlbShydW5UaW1lVHJlZUl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRUcmVlRGF0YShwYXRoOiBzdHJpbmcsIGl0ZW06IFRyZWVJdGVtTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaW5kZXhBcnI6IEFycmF5PG51bWJlcj4gPSB0aGlzLnJlc29sdmVQYXRoKHBhdGgpO1xuICAgICAgICBsZXQgaXRlbUFyciA9IHRoaXMucHJvY2Vzc2VkTm9kZXM7XG4gICAgICAgIGluZGV4QXJyLmZvckVhY2goKHBhdGhJbmRleDogbnVtYmVyLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgaWYgKGluZGV4IDwgaW5kZXhBcnIubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgIGl0ZW1BcnIgPSBpdGVtQXJyW3BhdGhJbmRleF0/LmNoaWxkcmVuO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpdGVtQXJyW3BhdGhJbmRleF0gPSBpdGVtO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldFRyZWVEYXRhUnVuVGltZShwYXRoOiBzdHJpbmcsIGl0ZW06IFRyZWVJdGVtUnVuVGltZU1vZGVsKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGluZGV4QXJyOiBBcnJheTxudW1iZXI+ID0gdGhpcy5yZXNvbHZlUGF0aChwYXRoKTtcbiAgICAgICAgbGV0IGl0ZW1BcnIgPSB0aGlzLnRyZWVEYXRhUnVuVGltZTtcbiAgICAgICAgaW5kZXhBcnIuZm9yRWFjaCgocGF0aEluZGV4OiBudW1iZXIsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBpZiAoaW5kZXggPCBpbmRleEFyci5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgaXRlbUFyciA9IGl0ZW1BcnJbcGF0aEluZGV4XT8uY2hpbGRyZW47XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGl0ZW1BcnJbcGF0aEluZGV4XSA9IGl0ZW07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0UnVuVGltZVNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlVHJlZShwYXRoOiBzdHJpbmcsIGl0ZW06IFRyZWVJdGVtU2VsZWN0aW9uUmVjdXJzaXZlTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaW5kZXhBcnI6IEFycmF5PG51bWJlcj4gPSB0aGlzLnJlc29sdmVQYXRoKHBhdGgpO1xuICAgICAgICBsZXQgaXRlbUFyciA9IHRoaXMucnVuVGltZVNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlO1xuICAgICAgICBpbmRleEFyci5mb3JFYWNoKChwYXRoSW5kZXg6IG51bWJlciwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGlmIChpbmRleCA8IGluZGV4QXJyLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICBpdGVtQXJyID0gaXRlbUFycltwYXRoSW5kZXhdPy5jaGlsZHJlbjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaXRlbUFycltwYXRoSW5kZXhdID0gaXRlbTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVSdW5UaW1lU2VsZWN0aW9uUmVjdXJzaXZlU3RhdGUocGF0aDogc3RyaW5nLCBzZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZTogU2VsZWN0aW9uUmVjdXJzaXZlU3RhdGUpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaW5kZXhBcnI6IEFycmF5PG51bWJlcj4gPSB0aGlzLnJlc29sdmVQYXRoKHBhdGgpO1xuICAgICAgICBsZXQgaXRlbUFyciA9IHRoaXMucnVuVGltZVNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlO1xuICAgICAgICBpbmRleEFyci5mb3JFYWNoKChwYXRoSW5kZXg6IG51bWJlciwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGlmIChpbmRleCA8IGluZGV4QXJyLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICBpdGVtQXJyID0gaXRlbUFycltwYXRoSW5kZXhdPy5jaGlsZHJlbjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaXRlbUFycltwYXRoSW5kZXhdID0ge1xuICAgICAgICAgICAgICAgICAgICAuLi5pdGVtQXJyW3BhdGhJbmRleF0sXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0SXNDaGVja2VkRm9yQWxsKG5vZGVBcnI6IEFycmF5PFRyZWVJdGVtUnVuVGltZU1vZGVsPiwgaXNDaGVja2VkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIG5vZGVBcnIuZm9yRWFjaCgocnVuVGltZUl0ZW06IFRyZWVJdGVtUnVuVGltZU1vZGVsLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0cmVlSXRlbSA9IHRoaXMuZ2V0VHJlZUl0ZW0ocnVuVGltZUl0ZW0ucGF0aCk7XG4gICAgICAgICAgICBjb25zdCBub2RlID0gdHJlZUl0ZW0ubm9kZTtcbiAgICAgICAgICAgIGlmIChub2RlPy5zZWxlY3RhYmxlKSB7XG4gICAgICAgICAgICAgICAgbm9kZS5pc1NlbGVjdGVkID0gaXNDaGVja2VkO1xuICAgICAgICAgICAgICAgIG5vZGUuaXNJbmRldGVybWluYXRlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgaWYgKGlzQ2hlY2tlZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdFRyZWVJdGVtKHJ1blRpbWVJdGVtKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRlc2VsZWN0VHJlZUl0ZW0ocnVuVGltZUl0ZW0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChydW5UaW1lSXRlbT8uY2hpbGRyZW4/Lmxlbmd0aCA+IDAgJiYgcnVuVGltZUl0ZW0/LmNoaWxkcmVuICYmIHJ1blRpbWVJdGVtPy5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRJc0NoZWNrZWRGb3JBbGwobm9kZUFycltpbmRleF0uY2hpbGRyZW4sIGlzQ2hlY2tlZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgcnVuU3RhdGVDaGFuZ2VzRm9yQWxsKG5vZGVBcnI6IEFycmF5PFRyZWVJdGVtUnVuVGltZU1vZGVsPik6IHZvaWQge1xuICAgICAgICBub2RlQXJyLmZvckVhY2goKHJ1blRpbWVJdGVtOiBUcmVlSXRlbVJ1blRpbWVNb2RlbCwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgaWYgKHJ1blRpbWVJdGVtPy5jaGlsZHJlbj8ubGVuZ3RoID4gMCAmJiBydW5UaW1lSXRlbT8uY2hpbGRyZW4gJiYgcnVuVGltZUl0ZW0/LmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN5bmNTZWxlY3Rpb25BdFBhdGgocnVuVGltZUl0ZW0pO1xuICAgICAgICAgICAgICAgIHRoaXMucnVuU3RhdGVDaGFuZ2VzRm9yQWxsKG5vZGVBcnJbaW5kZXhdLmNoaWxkcmVuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzeW5jU2VsZWN0aW9uQXRQYXRoKHJ1blRpbWVUcmVlSXRlbTogVHJlZUl0ZW1SdW5UaW1lTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgLy8gSXQgaXMgaGVyZSBmb3IgdGhlIGZpbHRlciBlZGdlIGNhc2UuXG4gICAgICAgIHRoaXMuc3luY1N0YXRlQ2hhbmdlc0F0UGF0aChydW5UaW1lVHJlZUl0ZW0ucGF0aCk7XG4gICAgICAgIC8vIFNldHMgaXNTZWxlY3RlZCBjaGFuZ2Ugb24gdGhlIGNvbnRyb2wuXG4gICAgICAgIGlmICh0aGlzLmdldFRyZWVJdGVtKHJ1blRpbWVUcmVlSXRlbS5wYXRoKS5ub2RlLmlzU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0VHJlZUl0ZW0ocnVuVGltZVRyZWVJdGVtKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGVzZWxlY3RUcmVlSXRlbShydW5UaW1lVHJlZUl0ZW0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZXNvbHZlUGF0aChwYXRoOiBzdHJpbmcpOiBBcnJheTxudW1iZXI+IHtcbiAgICAgICAgcmV0dXJuIHBhdGg/LnNwbGl0KCcuJykubWFwKChpbmRleDogc3RyaW5nKSA9PiBwYXJzZUludChpbmRleCwgMTApKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFBhcmVudFBhdGhzKHBhdGg6IHN0cmluZyk6IEFycmF5PHN0cmluZz4ge1xuICAgICAgICBjb25zdCBwYXRoQXJyID0gcGF0aC5zcGxpdCgnLicpO1xuICAgICAgICBjb25zdCBoYXNQYXJlbnQgPSBwYXRoQXJyLmxlbmd0aCA+IDE7XG4gICAgICAgIC8vIFNldHMgdGhlIGhhc1BhcmVudCBJZiB0aGVyZSBpcyBhIHBhcmVudCwgYW5kIHJlbW92ZXMgdGhlIGxhc3QgZWxlbWVudCBmb3JtIHBhdGhBcnIuXG4gICAgICAgIGlmIChoYXNQYXJlbnQpIHtcbiAgICAgICAgICAgIHBhdGhBcnIucG9wKCk7XG4gICAgICAgICAgICAvLyBDYWxjdWxhdGVzIHBhcmVudCBwYXRoXG4gICAgICAgICAgICBjb25zdCBwYXJlbnRQYXRoID0gcGF0aEFyci5qb2luKCcuJyk7XG4gICAgICAgICAgICAvLyBDcmVhdGluZyBub2RlIGluZGV4IHNlcXVlbmNlIGYuZSBJZiBwYXRoIGlzICcxLjInIGl0IHdpbGwgYmUgWzEsMl1cbiAgICAgICAgICAgIGNvbnN0IG5vZGVJbmRleFNlcSA9IHBhcmVudFBhdGguc3BsaXQoJy4nKS5tYXAoKGluZGV4U3RyKSA9PiBwYXJzZUludChpbmRleFN0ciwgMTApKTtcbiAgICAgICAgICAgIC8vIENhbGN1bGF0aW5nIHRoZSBub2RlIHBhdGhzIGFycmF5IHRvIGJlIHJlLWNhbGN1bGF0ZWQgZnJvbSBib3R0b20gdG8gdG9wXG4gICAgICAgICAgICBjb25zdCBub2RlUGF0aHNTZXEgPSBbXTtcbiAgICAgICAgICAgIG5vZGVJbmRleFNlcS5mb3JFYWNoKChub2RlSW5kZXgsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgbm9kZVBhdGhzU2VxW2luZGV4XSA9IG5vZGVJbmRleFNlcS5zbGljZSgwLCBpbmRleCArIDEpLmpvaW4oJy4nKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIG5vZGVQYXRoc1NlcS5yZXZlcnNlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGNhbGN1bGF0ZVJ1blRpbWVTdGF0ZSh0cmVlSXRlbTogVHJlZUl0ZW1Nb2RlbCwgaW5kZXg6IG51bWJlciwgcGFyZW50UGF0aD86IHN0cmluZyk6IFRyZWVJdGVtUnVuVGltZU1vZGVsIHtcbiAgICAgICAgY29uc3QgcnVuVGltZVRyZWVJdGVtOiBUcmVlSXRlbVJ1blRpbWVNb2RlbCA9IHtcbiAgICAgICAgICAgIHBhdGg6IHBhcmVudFBhdGggPyBwYXJlbnRQYXRoICsgJy4nICsgaW5kZXggOiBpbmRleC50b1N0cmluZygpLFxuICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0cmVlSXRlbS5jaGlsZHJlbiAmJiB0cmVlSXRlbS5jaGlsZHJlbi5sZW5ndGggPj0gMCkge1xuICAgICAgICAgICAgcnVuVGltZVRyZWVJdGVtLmNoaWxkcmVuID0gW107XG4gICAgICAgICAgICB0cmVlSXRlbS5jaGlsZHJlbi5mb3JFYWNoKChjaGlsZCwgdHJlZUl0ZW1JbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIHJ1blRpbWVUcmVlSXRlbS5jaGlsZHJlblt0cmVlSXRlbUluZGV4XSA9IHRoaXMuY2FsY3VsYXRlUnVuVGltZVN0YXRlKGNoaWxkLCB0cmVlSXRlbUluZGV4LCBydW5UaW1lVHJlZUl0ZW0ucGF0aCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcnVuVGltZVRyZWVJdGVtO1xuICAgIH1cblxuICAgIHByaXZhdGUgZmlsdGVyVHJlZURhdGEocnVuVGltZVRyZWVEYXRhOiBUcmVlRGF0YVJ1blRpbWVNb2RlbCwga2V5ID0gJ2xhYmVsJywgZmlsdGVyU3RyOiBzdHJpbmcpOiBUcmVlRGF0YVJ1blRpbWVNb2RlbCB7XG4gICAgICAgIHJldHVybiBydW5UaW1lVHJlZURhdGEuZmlsdGVyKChydW5UaW1lSXRlbSkgPT4ge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHRoaXMubm9ybWFsaXplZFN0cih0aGlzLmdldFRyZWVJdGVtKHJ1blRpbWVJdGVtLnBhdGgpLm5vZGUudHJlZUNvbnRlbnRCbG9jay5sYWJlbCkuaW5jbHVkZXModGhpcy5ub3JtYWxpemVkU3RyKGZpbHRlclN0cikpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocnVuVGltZUl0ZW0/LmNoaWxkcmVuPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgcnVuVGltZUl0ZW0uY2hpbGRyZW4gPSB0aGlzLmZpbHRlclRyZWVEYXRhKHN0cnVjdHVyZWRDbG9uZShydW5UaW1lSXRlbS5jaGlsZHJlbiksIGtleSwgZmlsdGVyU3RyKTtcbiAgICAgICAgICAgICAgICBydW5UaW1lSXRlbS5jaGlsZHJlbiA9IHJ1blRpbWVJdGVtLmNoaWxkcmVuLmxlbmd0aCA+IDAgPyBydW5UaW1lSXRlbS5jaGlsZHJlbiA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICByZXR1cm4gcnVuVGltZUl0ZW0/LmNoaWxkcmVuPy5sZW5ndGggPiAwO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgbm9ybWFsaXplZFN0cihzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBzdHJcbiAgICAgICAgICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICAubm9ybWFsaXplKCdORkQnKVxuICAgICAgICAgICAgLnJlcGxhY2UoL1tcXHUwMzAwLVxcdTAzNmZdL2csICcnKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEluaXRpYWxTZWxlY3Rpb24obm9kZXM6IFRyZWVEYXRhUnVuVGltZU1vZGVsKTogQXJyYXk8VHJlZUl0ZW1SdW5UaW1lTW9kZWw+IHtcbiAgICAgICAgY29uc3Qgc2VsZWN0aW9uOiBBcnJheTxUcmVlSXRlbVJ1blRpbWVNb2RlbD4gPSBbXTtcbiAgICAgICAgdGhpcy5zY2FuU2VsZWN0aW9uKG5vZGVzLCBzZWxlY3Rpb24pO1xuICAgICAgICByZXR1cm4gc2VsZWN0aW9uO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2NhblNlbGVjdGlvbihub2RlczogVHJlZURhdGFSdW5UaW1lTW9kZWwsIHNlbGVjdGlvbjogQXJyYXk8VHJlZUl0ZW1SdW5UaW1lTW9kZWw+KTogdm9pZCB7XG4gICAgICAgIG5vZGVzLmZvckVhY2goKGl0ZW06IFRyZWVJdGVtUnVuVGltZU1vZGVsKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5nZXRUcmVlSXRlbShpdGVtLnBhdGgpLm5vZGU/LnNlbGVjdGFibGUgJiYgdGhpcy5nZXRUcmVlSXRlbShpdGVtLnBhdGgpLm5vZGUuaXNTZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgIHNlbGVjdGlvbi5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGl0ZW0/LmNoaWxkcmVuPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zY2FuU2VsZWN0aW9uKGl0ZW0uY2hpbGRyZW4sIHNlbGVjdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVuZGVySW5pdGlhbEV4cGFuZChub2RlczogVHJlZURhdGFSdW5UaW1lTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgbm9kZXMuZm9yRWFjaCgoaXRlbTogVHJlZUl0ZW1SdW5UaW1lTW9kZWwpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmdldFRyZWVJdGVtKGl0ZW0ucGF0aCkubm9kZS5pc0V4cGFuZGVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5leHBhbmRBdChpdGVtLnBhdGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGl0ZW0/LmNoaWxkcmVuPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJJbml0aWFsRXhwYW5kKGl0ZW0uY2hpbGRyZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFJ1blRpbWVUcmVlSXRlbShwYXRoOiBzdHJpbmcpOiBUcmVlSXRlbVJ1blRpbWVNb2RlbCB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpbmRSdW5UaW1lVHJlZUl0ZW0odGhpcy50cmVlRGF0YVJ1blRpbWUsIHBhdGgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZmluZFJ1blRpbWVUcmVlSXRlbSh0cmVlRGF0YVJ1blRpbWU6IFRyZWVEYXRhUnVuVGltZU1vZGVsLCBwYXRoKTogVHJlZUl0ZW1SdW5UaW1lTW9kZWwge1xuICAgICAgICBmb3IgKGNvbnN0IHJ1blRpbWVJdGVtIG9mIHRyZWVEYXRhUnVuVGltZSkge1xuICAgICAgICAgICAgaWYgKHJ1blRpbWVJdGVtLnBhdGggPT09IHBhdGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcnVuVGltZUl0ZW07XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHJ1blRpbWVJdGVtPy5jaGlsZHJlbj8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZvdW5kID0gdGhpcy5maW5kUnVuVGltZVRyZWVJdGVtKHJ1blRpbWVJdGVtLmNoaWxkcmVuLCBwYXRoKTtcbiAgICAgICAgICAgICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZvdW5kO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFJ1blRpbWVCYWNrdXBUcmVlSXRlbShwYXRoOiBzdHJpbmcpOiBUcmVlSXRlbVJ1blRpbWVNb2RlbCB7XG4gICAgICAgIGNvbnN0IGluZGV4QXJyOiBBcnJheTxudW1iZXI+ID0gdGhpcy5yZXNvbHZlUGF0aChwYXRoKTtcbiAgICAgICAgbGV0IG5vZGVBcnIgPSB0aGlzLnRyZWVEYXRhUnVuVGltZUJhY2t1cDtcbiAgICAgICAgbGV0IG5vZGU7XG4gICAgICAgIGlmIChub2RlQXJyICYmIEFycmF5LmlzQXJyYXkobm9kZUFycikpIHtcbiAgICAgICAgICAgIGluZGV4QXJyPy5mb3JFYWNoKChwYXRoSW5kZXg6IG51bWJlciwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPCBpbmRleEFyci5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIG5vZGVBcnIgPSBub2RlQXJyICYmIG5vZGVBcnJbcGF0aEluZGV4XT8uY2hpbGRyZW47XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbm9kZSA9IG5vZGVBcnJbcGF0aEluZGV4XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldENzc0NsYXNzZXMoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIFsnZXVpLXRyZWUnLCB0aGlzLmlzTXVsdGlzZWxlY3QgPyAnZXVpLXRyZWUtLW11bHRpc2VsZWN0JyA6ICcnLCB0aGlzLl9pc011bHRpTGV2ZWwgPyAnZXVpLXRyZWUtLXdpdGgtY2hpbGRyZW4nIDogJyddXG4gICAgICAgICAgICAuam9pbignICcpXG4gICAgICAgICAgICAudHJpbSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2hlY2tJZk11bHRpTGV2ZWwodHJlZTogVHJlZURhdGFNb2RlbCk6IGJvb2xlYW4ge1xuICAgICAgICBsZXQgaXNNdWx0aUxldmVsID0gZmFsc2U7XG4gICAgICAgIHRyZWUuZm9yRWFjaCgoaXRlbTogVHJlZUl0ZW1Nb2RlbCkgPT4ge1xuICAgICAgICAgICAgaWYgKGl0ZW0/LmNoaWxkcmVuPy5sZW5ndGggPj0gMCkge1xuICAgICAgICAgICAgICAgIGlzTXVsdGlMZXZlbCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gaXNNdWx0aUxldmVsO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2hlY2tJZkN1cnJlbnRTY3JvbGxhYmxlKHNjcm9sbGVkOiBDZGtTY3JvbGxhYmxlKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBzY3JvbGxlZC5nZXRFbGVtZW50UmVmKCkubmF0aXZlRWxlbWVudCA9PT0gdGhpcy5jZGtTY3JvbGxhYmxlUmVmLmdldEVsZW1lbnRSZWYoKS5uYXRpdmVFbGVtZW50O1xuICAgIH1cbn1cblxuQE5nTW9kdWxlKHtcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIENvbW1vbk1vZHVsZSxcbiAgICAgICAgUm91dGVyTW9kdWxlLFxuICAgICAgICBGb3Jtc01vZHVsZSxcbiAgICAgICAgVHJhbnNsYXRlTW9kdWxlLFxuICAgICAgICBFdWlJbnB1dENoZWNrYm94TW9kdWxlLFxuICAgICAgICBDZGtUcmVlTW9kdWxlLFxuICAgICAgICBFdWlCdXR0b25Nb2R1bGUsXG4gICAgICAgIEV1aUljb25Nb2R1bGUsXG4gICAgICAgIEV1aUxhYmVsTW9kdWxlLFxuICAgICAgICBFdWlCYWRnZU1vZHVsZSxcbiAgICAgICAgRXVpQ2hpcE1vZHVsZSxcbiAgICAgICAgRXVpRHJvcGRvd25Nb2R1bGUsXG4gICAgICAgIFNjcm9sbGluZ01vZHVsZSxcbiAgICBdLFxuICAgIGRlY2xhcmF0aW9uczogW0V1aVRyZWVDb21wb25lbnRdLFxuICAgIGV4cG9ydHM6IFtFdWlUcmVlQ29tcG9uZW50XSxcbn0pXG5leHBvcnQgY2xhc3MgRXVpVHJlZU1vZHVsZSB7fVxuIiwiPHVsIGNsYXNzPVwiZXVpLXRyZWVfX3dyYXBwZXJcIiBjZGtTY3JvbGxhYmxlICNjZGtTY3JvbGxhYmxlUmVmIHN0eWxlPVwib3ZlcmZsb3c6IGF1dG87IG1heC1oZWlnaHQ6IDQwMHB4XCI+XG4gICAgPGNkay10cmVlXG4gICAgICAgICN0cmVlQ29tcG9uZW50SW5zdGFuY2VcbiAgICAgICAgW2RhdGFTb3VyY2VdPVwiY2RrQXJyYXlEYXRhU291cmNlXCJcbiAgICAgICAgW3RyZWVDb250cm9sXT1cImNka1RyZWVDb250cm9sXCJcbiAgICAgICAgW3RyYWNrQnldPVwidHJhY2tCeVwiXG4gICAgICAgICpuZ0lmPVwicmVuZGVyVHJlZVwiXG4gICAgICAgIGNsYXNzPVwiZXVpLWNkay10cmVlXCI+XG4gICAgICAgIDwhLS0gVGhlcmUgYXJlIHR3byBzdGF0ZXMgb2YgZ2VuZXJpYyBjZGstbmVzdGVkLXRyZWUtbm9kZSBkZWNsYXJhdGlvbnMuXG4gICAgICAgIEZpcnN0IG9uZSBpcyB3aXRob3V0IGNoaWxkLiBObyBzdWIgcmVuZGVyaW5nLlxuICAgICAgICAtLT5cbiAgICAgICAgPGNkay1uZXN0ZWQtdHJlZS1ub2RlICpjZGtUcmVlTm9kZURlZj1cImxldCB0cmVlUnVuVGltZUl0ZW1Nb2RlbFwiIGNsYXNzPVwiZXVpLWNkay1uZXN0ZWQtdHJlZS1ub2RlXCI+XG4gICAgICAgICAgICA8bGlcbiAgICAgICAgICAgICAgICBjbGFzcz1cImV1aS10cmVlLW5vZGVcIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwidHJlZVJ1blRpbWVJdGVtTW9kZWxcIlxuICAgICAgICAgICAgICAgIHRpdGxlPVwie3tcbiAgICAgICAgICAgICAgICAgICAgZ2V0VHJlZUl0ZW0odHJlZVJ1blRpbWVJdGVtTW9kZWw/LnBhdGgpPy5ub2RlPy50cmVlQ29udGVudEJsb2NrPy50b29sdGlwTGFiZWwgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldFRyZWVJdGVtKHRyZWVSdW5UaW1lSXRlbU1vZGVsPy5wYXRoKT8ubm9kZT8udHJlZUNvbnRlbnRCbG9jaz8ubGFiZWxcbiAgICAgICAgICAgICAgICB9fVwiPlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJldWktdHJlZS1ub2RlLXdyYXBwZXJcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25Ob2RlQ2xpY2sodHJlZVJ1blRpbWVJdGVtTW9kZWwpXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmV1aS10cmVlLW5vZGUtd3JhcHBlci0tbGFzdF09XCJ0cmVlUnVuVGltZUl0ZW1Nb2RlbC5sYXN0XCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmV1aS10cmVlLW5vZGUtd3JhcHBlci0tc2hvdy1saW5lc109XCJzaG93TGluZXMgJiYgX2lzTXVsdGlMZXZlbFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXVpLXRyZWUtbm9kZS13cmFwcGVyX19jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS1cbiAgICAgICAgICAgICAgICAgICAgICAgIFJlbmRlcnMgbm9kZSBpbiBkZWZhdWx0IG9yIHByb3ZpZGVkIHRlbXBsYXRlJ3MgY29udGV4dC5cbiAgICAgICAgICAgICAgICAgICAgICAgIEdlbmVyYXRlcyBvblNlbGVjdCB3aXRoIG9uU2VsZWN0Rm4gZm9yIGRldmVsb3BlcnMgdG8gc2VuZCB0aGUgZXZlbnRzIGZyb20gdGhlaXIgY3VzdG9tIGNoZWNrIGV2ZW50cy5cbiAgICAgICAgICAgICAgICAgICAgICAgIFByb3ZpZGVzIGlkIHRvIGJlIHVzZWQgb24gZ2VuZXJpYyB0ZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwibm9kZVRlbXBsYXRlUmVmIHx8IG5vZGVUZW1wbGF0ZURlZmF1bHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpbXBsaWNpdDogZ2V0VHJlZUl0ZW0odHJlZVJ1blRpbWVJdGVtTW9kZWw/LnBhdGgpPy5ub2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvblNlbGVjdDogb25TZWxlY3RGbih0cmVlUnVuVGltZUl0ZW1Nb2RlbC5wYXRoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IHVpZCArIHRyZWVSdW5UaW1lSXRlbU1vZGVsLnBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2xpPlxuICAgICAgICA8L2Nkay1uZXN0ZWQtdHJlZS1ub2RlPlxuICAgICAgICA8IS0tIFRoaXMgaXMgdGhlIHRyZWUgbm9kZSB0ZW1wbGF0ZSBmb3IgZXhwYW5kYWJsZSBub2RlcyAtLT5cbiAgICAgICAgPGNkay1uZXN0ZWQtdHJlZS1ub2RlXG4gICAgICAgICAgICAqY2RrVHJlZU5vZGVEZWY9XCJsZXQgdHJlZVJ1blRpbWVJdGVtTW9kZWw7IHdoZW46IGhhc0NoaWxkXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZXVpLWNkay1uZXN0ZWQtdHJlZS1ub2RlIGV1aS1jZGstbmVzdGVkLXRyZWUtbm9kZS0td2l0aC1jaGlsZFwiPlxuICAgICAgICAgICAgPGxpXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJldWktdHJlZS1ub2RlXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cInRyZWVSdW5UaW1lSXRlbU1vZGVsXCJcbiAgICAgICAgICAgICAgICB0aXRsZT1cInt7XG4gICAgICAgICAgICAgICAgICAgIGdldFRyZWVJdGVtKHRyZWVSdW5UaW1lSXRlbU1vZGVsPy5wYXRoKT8ubm9kZT8udHJlZUNvbnRlbnRCbG9jaz8udG9vbHRpcExhYmVsIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRUcmVlSXRlbSh0cmVlUnVuVGltZUl0ZW1Nb2RlbD8ucGF0aCk/Lm5vZGU/LnRyZWVDb250ZW50QmxvY2s/LmxhYmVsXG4gICAgICAgICAgICAgICAgfX1cIj5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZXVpLXRyZWUtbm9kZS13cmFwcGVyXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmV1aS10cmVlLW5vZGUtd3JhcHBlci0tbGFzdF09XCJ0cmVlUnVuVGltZUl0ZW1Nb2RlbC5sYXN0XCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmV1aS10cmVlLW5vZGUtd3JhcHBlci0tc2hvdy1saW5lc109XCJzaG93TGluZXNcIj5cbiAgICAgICAgICAgICAgICAgICAgPCEtLUhlcmUgd3JhcHMgdGhlIG5vZGUsIGFuZCBsaXN0ZW4gZm9yIG5vZGUgY2xpY2tzLi0tPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IChjbGljayk9XCJvbk5vZGVDbGljayh0cmVlUnVuVGltZUl0ZW1Nb2RlbClcIiBjbGFzcz1cImV1aS10cmVlLW5vZGUtd3JhcHBlcl9fY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEV4cGFuZC9jb2xsYXBzZSBhY3Rpb24gYnV0dG9uIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV1aUJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV1aUljb25CdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldWlCYXNpY0J1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV1aVJvdW5kZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldWlTaXplU1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ1RvZ2dsZSAnICsgZ2V0VHJlZUl0ZW0odHJlZVJ1blRpbWVJdGVtTW9kZWw/LnBhdGgpPy5ub2RlPy50cmVlQ29udGVudEJsb2NrPy5sYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uTm9kZVRvZ2dsZSh0cmVlUnVuVGltZUl0ZW1Nb2RlbClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNka1RyZWVOb2RlVG9nZ2xlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJldWktdHJlZS1ub2RlX19idXR0b25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldWlJY29uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWNka1RyZWVDb250cm9sLmlzRXhwYW5kZWQodHJlZVJ1blRpbWVJdGVtTW9kZWwpICYmIGNvbGxhcHNlZEljb25DbGFzc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpY29uQ2xhc3NdPVwiY29sbGFwc2VkSWNvbkNsYXNzXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV1aUljb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjZGtUcmVlQ29udHJvbC5pc0V4cGFuZGVkKHRyZWVSdW5UaW1lSXRlbU1vZGVsKSAmJiBleHBhbmRlZEljb25DbGFzc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpY29uQ2xhc3NdPVwiZXhwYW5kZWRJY29uQ2xhc3NcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGV1aS1pY29uLXN2Z1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFjZGtUcmVlQ29udHJvbC5pc0V4cGFuZGVkKHRyZWVSdW5UaW1lSXRlbU1vZGVsKSAmJiAhY29sbGFwc2VkSWNvbkNsYXNzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ljb25dPVwiZXhwYW5kZWRTdmdJY29uQ2xhc3NcIj48L2V1aS1pY29uLXN2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXVpLWljb24tc3ZnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY2RrVHJlZUNvbnRyb2wuaXNFeHBhbmRlZCh0cmVlUnVuVGltZUl0ZW1Nb2RlbCkgJiYgIWV4cGFuZGVkSWNvbkNsYXNzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ljb25dPVwiY29sbGFwc2VkU3ZnSWNvbkNsYXNzXCI+PC9ldWktaWNvbi1zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS1cbiAgICAgICAgICAgICAgICAgICAgICAgIFJlbmRlcnMgbm9kZSBpbiBkZWZhdWx0IG9yIHByb3ZpZGVkIHRlbXBsYXRlJ3MgY29udGV4dC5cbiAgICAgICAgICAgICAgICAgICAgICAgIEdlbmVyYXRlcyBvblNlbGVjdCB3aXRoIG9uU2VsZWN0Rm4gZm9yIGRldmVsb3BlcnMgdG8gc2VuZCB0aGUgZXZlbnRzIGZyb20gdGhlaXIgY3VzdG9tIGNoZWNrIGV2ZW50cy5cbiAgICAgICAgICAgICAgICAgICAgICAgIFByb3ZpZGVzIGlkIHRvIGJlIHVzZWQgb24gZ2VuZXJpYyB0ZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwibm9kZVRlbXBsYXRlUmVmIHx8IG5vZGVUZW1wbGF0ZURlZmF1bHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpbXBsaWNpdDogZ2V0VHJlZUl0ZW0odHJlZVJ1blRpbWVJdGVtTW9kZWwucGF0aCk/Lm5vZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uU2VsZWN0OiBvblNlbGVjdEZuKHRyZWVSdW5UaW1lSXRlbU1vZGVsLnBhdGgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogdWlkICsgdHJlZVJ1blRpbWVJdGVtTW9kZWwucGF0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aDogdHJlZVJ1blRpbWVJdGVtTW9kZWwucGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8IS0tdXNlcyBjZGtUcmVlTm9kZU91dGxldCB0byByZW5kZXIgY2hpbGRyZW4gbm9kZXMsIENka1RyZWVDb250cm9sIGlzIHVzZWQgdG8gY29udHJvbCBpc0V4cGFuZGVkIHN0YXRlLi0tPlxuICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cImV1aS10cmVlLW5vZGVcIiAqbmdJZj1cImNka1RyZWVDb250cm9sLmlzRXhwYW5kZWQodHJlZVJ1blRpbWVJdGVtTW9kZWwpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgY2RrVHJlZU5vZGVPdXRsZXQ+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgIDwvbGk+XG4gICAgICAgIDwvY2RrLW5lc3RlZC10cmVlLW5vZGU+XG4gICAgPC9jZGstdHJlZT5cbjwvdWw+XG5cbjxuZy10ZW1wbGF0ZSAjbm9kZVRlbXBsYXRlRGVmYXVsdCBsZXQtbm9kZSBsZXQtb25TZWxlY3Q9XCJvblNlbGVjdFwiIGxldC1pZD1cImlkXCIgbGV0LXBhdGg9XCJwYXRoXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm5vZGVcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImV1aS10cmVlLW5vZGUtd3JhcHBlcl9fY29udGFpbmVyLWxlZnRcIiBbY2xhc3MuZXVpLXRyZWUtbm9kZS13cmFwcGVyX19jb250YWluZXItbGVmdC0tc2VsZWN0ZWRdPVwibm9kZT8uaXNTZWxlY3RlZFwiPlxuICAgICAgICAgICAgPCEtLWlucHV0IGNoZWNrYm94IGFyZWEtLT5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIGV1aUlucHV0Q2hlY2tCb3hcbiAgICAgICAgICAgICAgICAqbmdJZj1cIm5vZGUgJiYgbm9kZS5zZWxlY3RhYmxlXCJcbiAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgIGlkPVwie3sgaWQgfX1cIlxuICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cIiEhbm9kZT8uaXNTZWxlY3RlZFwiXG4gICAgICAgICAgICAgICAgW2luZGV0ZXJtaW5hdGVdPVwiISFub2RlPy5pc0luZGV0ZXJtaW5hdGVcIlxuICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25TZWxlY3QoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJldWktdS1tci1tXCIgLz5cblxuICAgICAgICAgICAgPCEtLWljb24gYXJlYS0tPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm5vZGU/LnRyZWVDb250ZW50QmxvY2s/Lmljb25DbGFzc1wiPlxuICAgICAgICAgICAgICAgIDxldWktaWNvblxuICAgICAgICAgICAgICAgICAgICBbZXVpVmFyaWFudF09XCJub2RlPy50cmVlQ29udGVudEJsb2NrPy5pY29uVHlwZUNsYXNzIHx8ICdwcmltYXJ5J1wiXG4gICAgICAgICAgICAgICAgICAgIGljb25DbGFzcz1cInt7IG5vZGU/LnRyZWVDb250ZW50QmxvY2s/Lmljb25DbGFzcyB9fVwiXG4gICAgICAgICAgICAgICAgICAgIGV1aVNpemVTXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZXVpLXUtbXIteHNcIj5cbiAgICAgICAgICAgICAgICA8L2V1aS1pY29uPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibm9kZT8udHJlZUNvbnRlbnRCbG9jaz8uaWNvblN2Z05hbWVcIj5cbiAgICAgICAgICAgICAgICA8ZXVpLWljb24tc3ZnXG4gICAgICAgICAgICAgICAgICAgIGljb249XCJ7eyBub2RlPy50cmVlQ29udGVudEJsb2NrPy5pY29uU3ZnTmFtZSB9fVwiXG4gICAgICAgICAgICAgICAgICAgIGZpbGxDb2xvcj1cInt7IG5vZGU/LnRyZWVDb250ZW50QmxvY2s/Lmljb25UeXBlQ2xhc3MgfHwgJ2dyZXktMTAwJyB9fVwiXG4gICAgICAgICAgICAgICAgICAgIHNpemU9XCJzXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJldWktdS1tci14c1wiPlxuICAgICAgICAgICAgICAgIDwvZXVpLWljb24tc3ZnPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgIDwhLS1jaGlwcyBhcmVhLS0+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibm9kZT8udHJlZUNvbnRlbnRCbG9jaz8uY2hpcHNcIj5cbiAgICAgICAgICAgICAgICA8ZXVpLWNoaXBcbiAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNoaXAgb2Ygbm9kZS50cmVlQ29udGVudEJsb2NrLmNoaXBzXCJcbiAgICAgICAgICAgICAgICAgICAgZXVpU2l6ZVhTXG4gICAgICAgICAgICAgICAgICAgIFtldWlWYXJpYW50XT1cImNoaXAudHlwZUNsYXNzIHx8ICdzZWNvbmRhcnknXCJcbiAgICAgICAgICAgICAgICAgICAgW2V1aU91dGxpbmVdPVwiY2hpcC5pc091dGxpbmVcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImV1aS1jaGlwLS1yb3VuZGVkIGV1aS11LW1iLW5vbmUgZXVpLXUtbXIteHNcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gZXVpTGFiZWw+e3sgY2hpcC5sYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2V1aS1jaGlwPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgIDwhLS1iYWRnZSAodHlwZUxhYmVsICYgdHlwZUNsYXNzKSBhcmVhLS0+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibm9kZT8udHJlZUNvbnRlbnRCbG9jaz8udHlwZUxhYmVsXCIgW25nU3dpdGNoXT1cIm5vZGU/LnRyZWVDb250ZW50QmxvY2s/LnR5cGVDbGFzc1wiPlxuICAgICAgICAgICAgICAgIDxldWktYmFkZ2UgZXVpU2l6ZU0gW2V1aVZhcmlhbnRdPVwibm9kZT8udHJlZUNvbnRlbnRCbG9jaz8udHlwZUNsYXNzIHx8ICdwcmltYXJ5J1wiIGNsYXNzPVwiZXVpLXUtZmxleC1uby1zaHJpbmsgZXVpLXUtbXIteHNcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgbm9kZT8udHJlZUNvbnRlbnRCbG9jaz8udHlwZUxhYmVsIH19XG4gICAgICAgICAgICAgICAgPC9ldWktYmFkZ2U+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLWxhYmVsIGFyZWEtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cImV1aS10cmVlLW5vZGUtd3JhcHBlcl9fY29udGFpbmVyLW1pZGRsZVwiPlxuICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgICAgKm5nSWY9XCIhbm9kZT8udHJlZUNvbnRlbnRCbG9jaz8udXJsICYmICFub2RlPy50cmVlQ29udGVudEJsb2NrPy51cmxFeHRlcm5hbFwiXG4gICAgICAgICAgICAgICAgZXVpTGFiZWxcbiAgICAgICAgICAgICAgICBmb3I9XCJ7eyBpZCB9fVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJldWktdS10ZXh0LXRydW5jYXRlIGV1aS11LXAtMnhzXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuZXVpLWxhYmVsLS1zZWxlY3RlZF09XCJcbiAgICAgICAgICAgICAgICAgICAgaGlnaGxpZ2h0UGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgPyBnZXRSdW5UaW1lU2VsZWN0aW9uUmVjdXJzaXZlU3RhdGUocGF0aCk/LnNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlID09PSAnaW5kZXRlcm1pbmF0ZScgfHwgbm9kZT8uaXNTZWxlY3RlZFxuICAgICAgICAgICAgICAgICAgICAgICAgOiBub2RlPy5pc1NlbGVjdGVkXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuZXVpLXUtY3Vyc29yLXBvaW50ZXJdPVwibm9kZT8uc2VsZWN0YWJsZVwiPlxuICAgICAgICAgICAgICAgIHt7IGF1dG9UcmFuc2xhdGUgPyAobm9kZT8udHJlZUNvbnRlbnRCbG9jaz8ubGFiZWwgfCB0cmFuc2xhdGUpIDogbm9kZT8udHJlZUNvbnRlbnRCbG9jaz8ubGFiZWwgfX1cbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICA8bGFiZWwgKm5nSWY9XCJub2RlPy50cmVlQ29udGVudEJsb2NrPy51cmxcIiBldWlMYWJlbCBmb3I9XCJ7eyBpZCB9fVwiIGNsYXNzPVwiZXVpLXUtdGV4dC10cnVuY2F0ZSBldWktdS1wLTJ4c1wiPlxuICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZXVpLXUtdGV4dC1saW5rXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmV1aS11LXRleHQtbGluay1zdGFuZGFsb25lXT1cIiFzaG93VW5kZXJsaW5lZExpbmtzXCJcbiAgICAgICAgICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwibm9kZT8udHJlZUNvbnRlbnRCbG9jaz8udXJsXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IGF1dG9UcmFuc2xhdGUgPyAobm9kZT8udHJlZUNvbnRlbnRCbG9jaz8ubGFiZWwgfCB0cmFuc2xhdGUpIDogbm9kZT8udHJlZUNvbnRlbnRCbG9jaz8ubGFiZWwgfX1cbiAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgPGxhYmVsICpuZ0lmPVwibm9kZT8udHJlZUNvbnRlbnRCbG9jaz8udXJsRXh0ZXJuYWxcIiBldWlMYWJlbCBmb3I9XCJ7eyBpZCB9fVwiIGNsYXNzPVwiZXVpLXUtdGV4dC10cnVuY2F0ZSBldWktdS1wLTJ4c1wiPlxuICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZXVpLXUtdGV4dC1saW5rLWV4dGVybmFsXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmV1aS11LXRleHQtbGluay1leHRlcm5hbC1zdGFuZGFsb25lXT1cIiFzaG93VW5kZXJsaW5lZExpbmtzXCJcbiAgICAgICAgICAgICAgICAgICAgaHJlZj1cInt7IG5vZGU/LnRyZWVDb250ZW50QmxvY2s/LnVybEV4dGVybmFsIH19XCJcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0PVwie3sgbm9kZT8udHJlZUNvbnRlbnRCbG9jaz8udXJsRXh0ZXJuYWxUYXJnZXQgfHwgJ2JsYW5rJyB9fVwiPlxuICAgICAgICAgICAgICAgICAgICB7eyBhdXRvVHJhbnNsYXRlID8gKG5vZGU/LnRyZWVDb250ZW50QmxvY2s/LmxhYmVsIHwgdHJhbnNsYXRlKSA6IG5vZGU/LnRyZWVDb250ZW50QmxvY2s/LmxhYmVsIH19XG4gICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiAqbmdJZj1cIm5vZGU/LnRyZWVDb250ZW50QmxvY2s/LnJpZ2h0Q29udGVudFwiIGNsYXNzPVwiZXVpLXRyZWUtbm9kZS13cmFwcGVyX19jb250YWluZXItcmlnaHRcIj5cbiAgICAgICAgICAgIDwhLS1iYWRnZXMgYXJlYS0tPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYmFkZ2Ugb2Ygbm9kZS50cmVlQ29udGVudEJsb2NrLnJpZ2h0Q29udGVudD8uYmFkZ2VzXCI+XG4gICAgICAgICAgICAgICAgPGV1aS1iYWRnZSBldWlTaXplTSBldWlPdXRsaW5lIFtldWlWYXJpYW50XT1cImJhZGdlLnR5cGVDbGFzcyB8fCAnc2Vjb25kYXJ5J1wiIGNsYXNzPVwiZXVpLXUtbWwteHNcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gZXVpTGFiZWw+e3sgYmFkZ2UubGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9ldWktYmFkZ2U+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgPCEtLWNoaXBzIGFyZWEtLT5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNoaXAgb2Ygbm9kZS50cmVlQ29udGVudEJsb2NrLnJpZ2h0Q29udGVudD8uY2hpcHNcIj5cbiAgICAgICAgICAgICAgICA8ZXVpLWNoaXBcbiAgICAgICAgICAgICAgICAgICAgZXVpU2l6ZVhTXG4gICAgICAgICAgICAgICAgICAgIFtldWlWYXJpYW50XT1cImNoaXAudHlwZUNsYXNzIHx8ICdzZWNvbmRhcnknXCJcbiAgICAgICAgICAgICAgICAgICAgW2V1aU91dGxpbmVdPVwiY2hpcC5pc091dGxpbmVcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImV1aS1jaGlwLS1yb3VuZGVkIGV1aS11LW1iLW5vbmUgZXVpLXUtbWwteHNcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gZXVpTGFiZWw+e3sgY2hpcC5sYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2V1aS1jaGlwPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgIDwhLS1Db250ZXh0IG1lbnUtLT5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJub2RlLnRyZWVDb250ZW50QmxvY2sucmlnaHRDb250ZW50Py5jb250ZXh0TWVudU1ldGFEYXRhICYmIHJpZ2h0Q29udGV4dE1lbnVUZW1wbGF0ZVJlZlwiPlxuICAgICAgICAgICAgICAgIDxldWktZHJvcGRvd24gY2xhc3M9XCJldWktdS1tbC14c1wiPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGV1aUJ1dHRvbiBldWlTaXplUyBldWlSb3VuZGVkIGV1aUljb25CdXR0b24gZXVpQmFzaWNCdXR0b24gZXVpU2Vjb25kYXJ5IFthdHRyLmFyaWEtbGFiZWxdPVwiJ09wdGlvbnMgbWVudSdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxldWktaWNvbi1zdmcgaWNvbj1cImV1aS1lbGxpcHNpcy12ZXJ0aWNhbFwiPjwvZXVpLWljb24tc3ZnPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPGV1aS1kcm9wZG93bi1jb250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwicmlnaHRDb250ZXh0TWVudVRlbXBsYXRlUmVmXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaW1wbGljaXQ6IG5vZGU/LnRyZWVDb250ZW50QmxvY2s/LnJpZ2h0Q29udGVudD8uY29udGV4dE1lbnVNZXRhRGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGE6IG5vZGU/LnRyZWVDb250ZW50QmxvY2s/LnJpZ2h0Q29udGVudD8uY29udGV4dE1lbnVNZXRhRGF0YVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDwvZXVpLWRyb3Bkb3duLWNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgPC9ldWktZHJvcGRvd24+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLW1ldGFkYXRhLCB1c2VzIHRoZSBoZWxwIG9mIG5nIHRlbXBsYXRlIHRvIGdlbmVyYXRlIGR5bmFtaWMgZXhwYW5kIHZhcmlhYmxlIHdpdGhvdXQgaGFuZGxpbmcgc3RhdGUgLS0+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ0lmPVwibm9kZS50cmVlQ29udGVudEJsb2NrPy5tZXRhZGF0YSAmJiBub2RlQ29udGVudE1ldGFkYXRhVGVtcGxhdGVSZWZcIlxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwibm9kZUNvbnRlbnRNZXRhZGF0YUNvbnRhaW5lclwiXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie1xuICAgICAgICAgICAgICAgICRpbXBsaWNpdDogeyBleHBhbmRlZDogZmFsc2UgfVxuICAgICAgICAgICAgfVwiPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNub2RlQ29udGVudE1ldGFkYXRhQ29udGFpbmVyIGxldC1tZXRhRGF0YUNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBldWlCdXR0b25cbiAgICAgICAgICAgICAgICBldWlCYXNpY0J1dHRvblxuICAgICAgICAgICAgICAgIGV1aUljb25CdXR0b25cbiAgICAgICAgICAgICAgICBldWlSb3VuZGVkXG4gICAgICAgICAgICAgICAgZXVpU2l6ZVNcbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiZXhwYW5kIGNvbGxhcHNlIHRyZWUgaXRlbVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm1ldGFEYXRhQ29udGFpbmVyLmV4cGFuZGVkID0gIW1ldGFEYXRhQ29udGFpbmVyLmV4cGFuZGVkXCI+XG4gICAgICAgICAgICAgICAgPGV1aS1pY29uLXN2ZyBbaWNvbl09XCJtZXRhRGF0YUNvbnRhaW5lci5leHBhbmRlZCA/ICdldWktY2hldnJvbi1kb3duJyA6ICdldWktY2hldnJvbi1mb3J3YXJkJ1wiPjwvZXVpLWljb24tc3ZnPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwibWV0YURhdGFDb250YWluZXIuZXhwYW5kZWRcIiBjbGFzcz1cImV1aS10cmVlLW5vZGVfX21ldGFjb250ZW50XCI+XG4gICAgICAgICAgICAgICAgPCEtLXBhc3NpbmcgbWV0YWRhdGEgb2YgdGhlIG5vZGUgY29udGVudCB0byBwcm92aWRlZCB0ZW1wbGF0ZS1yZWY6bm9kZUNvbnRlbnRNZXRhZGF0YVRlbXBsYXRlUmVmLS0+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm5vZGVDb250ZW50TWV0YWRhdGFUZW1wbGF0ZVJlZlwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICAkaW1wbGljaXQ6IG5vZGU/LnRyZWVDb250ZW50QmxvY2s/Lm1ldGFkYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGE6IG5vZGU/LnRyZWVDb250ZW50QmxvY2s/Lm1ldGFkYXRhXG4gICAgICAgICAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuIl19
|
932
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXVpLXRyZWUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vZXVpLXRyZWUvZXVpLXRyZWUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vZXVpLXRyZWUvZXVpLXRyZWUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCxLQUFLLEVBQ0wsUUFBUSxFQUNSLHVCQUF1QixFQUN2QixZQUFZLEVBQ1osTUFBTSxFQUNOLGlCQUFpQixFQU1qQixXQUFXLEVBRVgsU0FBUyxHQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQVFILGlCQUFpQixHQUNwQixNQUFNLGtCQUFrQixDQUFDO0FBQzFCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM1RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxhQUFhLEVBQVcsTUFBTSxtQkFBbUIsQ0FBQztBQUM5RSxPQUFPLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNF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LGNBQWM7WUFDZCxjQUFjO1lBQ2QsYUFBYTtZQUNiLGlCQUFpQjtZQUNqQixlQUFlOztnR0FLVixhQUFhO2tCQW5CekIsUUFBUTttQkFBQztvQkFDTixPQUFPLEVBQUU7d0JBQ0wsWUFBWTt3QkFDWixZQUFZO3dCQUNaLFdBQVc7d0JBQ1gsZUFBZTt3QkFDZixzQkFBc0I7d0JBQ3RCLGFBQWE7d0JBQ2IsZUFBZTt3QkFDZixhQUFhO3dCQUNiLGNBQWM7d0JBQ2QsY0FBYzt3QkFDZCxhQUFhO3dCQUNiLGlCQUFpQjt3QkFDakIsZUFBZTtxQkFDbEI7b0JBQ0QsWUFBWSxFQUFFLENBQUMsZ0JBQWdCLENBQUM7b0JBQ2hDLE9BQU8sRUFBRSxDQUFDLGdCQUFnQixDQUFDO2lCQUM5QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIElucHV0LFxuICAgIE5nTW9kdWxlLFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBPdXRwdXQsXG4gICAgVmlld0VuY2Fwc3VsYXRpb24sXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBPbkluaXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIE9uRGVzdHJveSxcbiAgICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFJvdXRlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge1xuICAgIFNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlLFxuICAgIFRyZWVEYXRhTW9kZWwsXG4gICAgVHJlZUl0ZW1Nb2RlbCxcbiAgICBUcmVlRGF0YVJ1blRpbWVNb2RlbCxcbiAgICBUcmVlSXRlbVJ1blRpbWVNb2RlbCxcbiAgICBUcmVlSXRlbVNlbGVjdGlvblJlY3Vyc2l2ZU1vZGVsLFxuICAgIEV1aVRyZWVTZWxlY3Rpb25DaGFuZ2VzLFxuICAgIEV1aVRyZWVQYWdpbmF0aW9uLFxufSBmcm9tICcuL2V1aS10cmVlLm1vZGVsJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRXVpSW5wdXRDaGVja2JveE1vZHVsZSB9IGZyb20gJ0BldWkvY29tcG9uZW50cy9ldWktaW5wdXQtY2hlY2tib3gnO1xuaW1wb3J0IHsgRXVpQnV0dG9uTW9kdWxlIH0gZnJvbSAnQGV1aS9jb21wb25lbnRzL2V1aS1idXR0b24nO1xuaW1wb3J0IHsgRXVpSWNvbk1vZHVsZSB9IGZyb20gJ0BldWkvY29tcG9uZW50cy9ldWktaWNvbic7XG5pbXBvcnQgeyBFdWlMYWJlbE1vZHVsZSB9IGZyb20gJ0BldWkvY29tcG9uZW50cy9ldWktbGFiZWwnO1xuaW1wb3J0IHsgRXVpQmFkZ2VNb2R1bGUgfSBmcm9tICdAZXVpL2NvbXBvbmVudHMvZXVpLWJhZGdlJztcbmltcG9ydCB7IEV1aUNoaXBNb2R1bGUgfSBmcm9tICdAZXVpL2NvbXBvbmVudHMvZXVpLWNoaXAnO1xuaW1wb3J0IHsgRXVpRHJvcGRvd25Nb2R1bGUgfSBmcm9tICdAZXVpL2NvbXBvbmVudHMvZXVpLWRyb3Bkb3duJztcbmltcG9ydCB7IE5lc3RlZFRyZWVDb250cm9sLCBDZGtUcmVlTW9kdWxlLCBDZGtUcmVlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3RyZWUnO1xuaW1wb3J0IHsgQXJyYXlEYXRhU291cmNlLCBTZWxlY3Rpb25Nb2RlbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucyc7XG5pbXBvcnQgeyBCb29sZWFuSW5wdXQsIGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IFNjcm9sbGluZ01vZHVsZSwgU2Nyb2xsRGlzcGF0Y2hlciwgQ2RrU2Nyb2xsYWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9zY3JvbGxpbmcnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lIH0gZnJvbSAncnhqcyc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZXVpLXRyZWUnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9ldWktdHJlZS5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vc3R5bGVzL19pbmRleC5zY3NzJ10sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbn0pXG5leHBvcnQgY2xhc3MgRXVpVHJlZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MnKVxuICAgIHB1YmxpYyBnZXQgY3NzQ2xhc3NlcygpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRDc3NDbGFzc2VzKCk7XG4gICAgfVxuICAgIEBIb3N0QmluZGluZygnYXR0ci5kYXRhLWUyZScpIEBJbnB1dCgpIGUyZUF0dHIgPSAnZXVpLXRyZWUnO1xuICAgIEBJbnB1dCgpIG5vZGVzOiBUcmVlRGF0YU1vZGVsO1xuICAgIC8vIFRPRE86IGZpbmQgdGhlIGNvcnJlY3QgdHlwZSBvciB0dXJuIGludG8gYSBnZW5lcmljLCBodHRwczovL3d3dy50eXBlc2NyaXB0bGFuZy5vcmcvZG9jcy9oYW5kYm9vay8yL2dlbmVyaWNzLmh0bWxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIEBJbnB1dCgpIG5vZGVUZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55PjtcbiAgICAvLyBUT0RPOiBmaW5kIHRoZSBjb3JyZWN0IHR5cGUgb3IgdHVybiBpbnRvIGEgZ2VuZXJpYywgaHR0cHM6Ly93d3cudHlwZXNjcmlwdGxhbmcub3JnL2RvY3MvaGFuZGJvb2svMi9nZW5lcmljcy5odG1sXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBASW5wdXQoKSBub2RlQ29udGVudE1ldGFkYXRhVGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgLy8gVE9ETzogZmluZCB0aGUgY29ycmVjdCB0eXBlIG9yIHR1cm4gaW50byBhIGdlbmVyaWMsIGh0dHBzOi8vd3d3LnR5cGVzY3JpcHRsYW5nLm9yZy9kb2NzL2hhbmRib29rLzIvZ2VuZXJpY3MuaHRtbFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgQElucHV0KCkgcmlnaHRDb250ZXh0TWVudVRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIEBJbnB1dCgpIGV4cGFuZGVkSWNvbkNsYXNzOiBzdHJpbmc7XG4gICAgQElucHV0KCkgY29sbGFwc2VkSWNvbkNsYXNzOiBzdHJpbmc7XG4gICAgQElucHV0KCkgZXhwYW5kZWRTdmdJY29uQ2xhc3MgPSAnZXVpLWNoZXZyb24tZm9yd2FyZDpldWknO1xuICAgIEBJbnB1dCgpIGNvbGxhcHNlZFN2Z0ljb25DbGFzcyA9ICdldWktY2hldnJvbi1kb3duOmV1aSc7XG5cbiAgICBAVmlld0NoaWxkKCdjZGtTY3JvbGxhYmxlUmVmJywgeyByZWFkOiBDZGtTY3JvbGxhYmxlIH0pIGNka1Njcm9sbGFibGVSZWY6IENka1Njcm9sbGFibGU7XG4gICAgQFZpZXdDaGlsZCgndHJlZUNvbXBvbmVudEluc3RhbmNlJykgcHVibGljIHRyZWVDb21wb25lbnRJbnN0YW5jZTogQ2RrVHJlZTxUcmVlSXRlbVJ1blRpbWVNb2RlbD47XG5cbiAgICAvLyBAVmlld0NoaWxkKCd0cmVlQ29tcG9uZW50SW5zdGFuY2UnKSBwdWJsaWMgdHJlZUNvbXBvbmVudEluc3RhbmNlOiBhbnk7XG5cbiAgICBASW5wdXQoKVxuICAgIGdldCBpc0NsaWNrVG9nZ2xpbmdOb2RlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNDbGlja1RvZ2dsaW5nTm9kZTtcbiAgICB9XG5cbiAgICBzZXQgaXNDbGlja1RvZ2dsaW5nTm9kZSh2YWx1ZTogQm9vbGVhbklucHV0KSB7XG4gICAgICAgIHRoaXMuX2lzQ2xpY2tUb2dnbGluZ05vZGUgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICAgIH1cblxuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGlzTXVsdGlzZWxlY3QoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc011bHRpc2VsZWN0O1xuICAgIH1cblxuICAgIHNldCBpc011bHRpc2VsZWN0KHZhbHVlOiBCb29sZWFuSW5wdXQpIHtcbiAgICAgICAgdGhpcy5faXNNdWx0aXNlbGVjdCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgQElucHV0KClcbiAgICBnZXQgaXNTaW5nbGVTZWxlY3QoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc1NpbmdsZVNlbGVjdDtcbiAgICB9XG5cbiAgICBzZXQgaXNTaW5nbGVTZWxlY3QodmFsdWU6IEJvb2xlYW5JbnB1dCkge1xuICAgICAgICB0aGlzLl9pc1NpbmdsZVNlbGVjdCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgQElucHV0KClcbiAgICBnZXQgaXNSZWN1cnNpdmVTZWxlY3Rpb24oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc1JlY3Vyc2l2ZVNlbGVjdGlvbjtcbiAgICB9XG5cbiAgICBzZXQgaXNSZWN1cnNpdmVTZWxlY3Rpb24odmFsdWU6IEJvb2xlYW5JbnB1dCkge1xuICAgICAgICB0aGlzLl9pc1JlY3Vyc2l2ZVNlbGVjdGlvbiA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgQElucHV0KClcbiAgICBnZXQgaXNSZWN1cnNpdmVQYXJlbnRTZWxlY3Rpb24oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc1JlY3Vyc2l2ZVBhcmVudFNlbGVjdGlvbjtcbiAgICB9XG5cbiAgICBzZXQgaXNSZWN1cnNpdmVQYXJlbnRTZWxlY3Rpb24odmFsdWU6IEJvb2xlYW5JbnB1dCkge1xuICAgICAgICB0aGlzLl9pc1JlY3Vyc2l2ZVBhcmVudFNlbGVjdGlvbiA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgQElucHV0KClcbiAgICBnZXQgc2hvd1VuZGVybGluZWRMaW5rcygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Nob3dVbmRlcmxpbmVkTGlua3M7XG4gICAgfVxuXG4gICAgc2V0IHNob3dVbmRlcmxpbmVkTGlua3ModmFsdWU6IEJvb2xlYW5JbnB1dCkge1xuICAgICAgICB0aGlzLl9zaG93VW5kZXJsaW5lZExpbmtzID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgICB9XG5cbiAgICBASW5wdXQoKVxuICAgIGdldCBzaG93TGluZXMoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zaG93TGluZXM7XG4gICAgfVxuXG4gICAgc2V0IHNob3dMaW5lcyh2YWx1ZTogQm9vbGVhbklucHV0KSB7XG4gICAgICAgIHRoaXMuX3Nob3dMaW5lcyA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgQElucHV0KClcbiAgICBnZXQgYXV0b1RyYW5zbGF0ZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2F1dG9UcmFuc2xhdGU7XG4gICAgfVxuXG4gICAgc2V0IGF1dG9UcmFuc2xhdGUodmFsdWU6IEJvb2xlYW5JbnB1dCkge1xuICAgICAgICB0aGlzLl9hdXRvVHJhbnNsYXRlID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgICB9XG5cbiAgICBASW5wdXQoKVxuICAgIGdldCBoaWdobGlnaHRQYXRoKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faGlnaGxpZ2h0UGF0aDtcbiAgICB9XG5cbiAgICBzZXQgaGlnaGxpZ2h0UGF0aCh2YWx1ZTogQm9vbGVhbklucHV0KSB7XG4gICAgICAgIHRoaXMuX2hpZ2hsaWdodFBhdGggPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICAgIH1cblxuICAgIEBPdXRwdXQoKSBzZWxlY3Rpb25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPEV1aVRyZWVTZWxlY3Rpb25DaGFuZ2VzPigpO1xuICAgIEBPdXRwdXQoKSBub2RlQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPFRyZWVJdGVtTW9kZWw+KCk7XG4gICAgQE91dHB1dCgpIG5vZGVUb2dnbGUgPSBuZXcgRXZlbnRFbWl0dGVyPFRyZWVJdGVtTW9kZWw+KCk7XG4gICAgY2RrQXJyYXlEYXRhU291cmNlOiBBcnJheURhdGFTb3VyY2U8VHJlZUl0ZW1SdW5UaW1lTW9kZWw+O1xuICAgIGNka1RyZWVDb250cm9sOiBOZXN0ZWRUcmVlQ29udHJvbDxUcmVlSXRlbVJ1blRpbWVNb2RlbD47XG4gICAgcmVuZGVyVHJlZTogYm9vbGVhbjtcbiAgICBwdWJsaWMgdWlkOiBzdHJpbmcgPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMDAwMDAwMDAwKS50b1N0cmluZygpO1xuICAgIHByb3RlY3RlZCBfaXNNdWx0aUxldmVsO1xuICAgIHByaXZhdGUgcHJvY2Vzc2VkTm9kZXM6IFRyZWVEYXRhTW9kZWw7XG4gICAgcHJpdmF0ZSB0cmVlRGF0YVJ1blRpbWU6IFRyZWVEYXRhUnVuVGltZU1vZGVsO1xuICAgIHByaXZhdGUgdHJlZURhdGFSdW5UaW1lQmFja3VwOiBUcmVlRGF0YVJ1blRpbWVNb2RlbDtcbiAgICBwcml2YXRlIHJ1blRpbWVTZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZTogQXJyYXk8VHJlZUl0ZW1TZWxlY3Rpb25SZWN1cnNpdmVNb2RlbD47XG4gICAgcHJpdmF0ZSBzZWxlY3Rpb25Nb2RlbDogU2VsZWN0aW9uTW9kZWw8VHJlZUl0ZW1SdW5UaW1lTW9kZWw+O1xuICAgIHByaXZhdGUgX2lzQ2xpY2tUb2dnbGluZ05vZGUgPSBmYWxzZTtcbiAgICBwcml2YXRlIF9pc011bHRpc2VsZWN0ID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBfaXNTaW5nbGVTZWxlY3QgPSBmYWxzZTtcbiAgICBwcml2YXRlIF9pc1JlY3Vyc2l2ZVNlbGVjdGlvbiA9IGZhbHNlO1xuICAgIHByaXZhdGUgX2lzUmVjdXJzaXZlUGFyZW50U2VsZWN0aW9uID0gdHJ1ZTtcbiAgICBwcml2YXRlIF9zaG93VW5kZXJsaW5lZExpbmtzID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBfc2hvd0xpbmVzID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBfYXV0b1RyYW5zbGF0ZSA9IHRydWU7XG4gICAgcHJpdmF0ZSBfaGlnaGxpZ2h0UGF0aCA9IGZhbHNlO1xuICAgIHByaXZhdGUgc2VsZWN0aW9uTW9kZWxTdWJzO1xuICAgIHByaXZhdGUgc2Nyb2xsRGlzcGF0Y2hlclN1YnM7XG4gICAgcHJpdmF0ZSBfc2VsZWN0aW9uO1xuICAgIHByaXZhdGUgdHJlZVBhZ2luYXRpb246IEV1aVRyZWVQYWdpbmF0aW9uPFRyZWVJdGVtUnVuVGltZU1vZGVsPjtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLCBwcml2YXRlIHNjcm9sbERpc3BhdGNoZXI6IFNjcm9sbERpc3BhdGNoZXIpIHt9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pbml0VHJlZSgpO1xuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKGNoYW5nZXNbJ25vZGVzJ10/LmN1cnJlbnRWYWx1ZSAhPT0gY2hhbmdlc1snbm9kZXMnXT8ucHJldmlvdXNWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJUcmVlID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmluaXRUcmVlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uTW9kZWxTdWJzKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbk1vZGVsU3Vicy51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnNjcm9sbERpc3BhdGNoZXJTdWJzKSB7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbERpc3BhdGNoZXJTdWJzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRTZWxlY3Rpb24oKTogVHJlZURhdGFNb2RlbCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zZWxlY3Rpb247XG4gICAgfVxuXG4gICAgZ2V0UHJvY2Vzc2VkTm9kZXMoKTogVHJlZURhdGFNb2RlbCB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NlZE5vZGVzO1xuICAgIH1cblxuICAgIC8vIFRPRE86IGZpbmQgdGhlIGNvcnJlY3QgdHlwZSBvciB0dXJuIGludG8gYSBnZW5lcmljLCBodHRwczovL3d3dy50eXBlc2NyaXB0bGFuZy5vcmcvZG9jcy9oYW5kYm9vay8yL2dlbmVyaWNzLmh0bWxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIHRyYWNrQnkoaW5kZXg6IG51bWJlciwgaXRlbTogVHJlZUl0ZW1SdW5UaW1lTW9kZWwpOiBhbnkge1xuICAgICAgICByZXR1cm4gaXRlbS5wYXRoO1xuICAgIH1cblxuICAgIC8vIFRPRE86IGZpbmQgdGhlIGNvcnJlY3QgdHlwZSBvciB0dXJuIGludG8gYSBnZW5lcmljLCBodHRwczovL3d3dy50eXBlc2NyaXB0bGFuZy5vcmcvZG9jcy9oYW5kYm9vay8yL2dlbmVyaWNzLmh0bWxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIHRyYWNrQnlDb250cm9sKGl0ZW06IFRyZWVJdGVtUnVuVGltZU1vZGVsKTogYW55IHtcbiAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgfVxuXG4gICAgZ2V0VHJlZUl0ZW0ocGF0aDogc3RyaW5nKTogVHJlZUl0ZW1Nb2RlbCB7XG4gICAgICAgIGNvbnN0IGluZGV4QXJyOiBBcnJheTxudW1iZXI+ID0gdGhpcy5yZXNvbHZlUGF0aChwYXRoKTtcbiAgICAgICAgbGV0IG5vZGVBcnIgPSB0aGlzLnByb2Nlc3NlZE5vZGVzO1xuICAgICAgICBsZXQgbm9kZTtcbiAgICAgICAgaWYgKG5vZGVBcnIgJiYgQXJyYXkuaXNBcnJheShub2RlQXJyKSkge1xuICAgICAgICAgICAgaW5kZXhBcnI/LmZvckVhY2goKHBhdGhJbmRleDogbnVtYmVyLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChpbmRleCA8IGluZGV4QXJyLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgbm9kZUFyciA9IG5vZGVBcnIgJiYgbm9kZUFycltwYXRoSW5kZXhdPy5jaGlsZHJlbjtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBub2RlID0gbm9kZUFycltwYXRoSW5kZXhdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBub2RlO1xuICAgIH1cblxuICAgIGV4cGFuZEFsbCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jZGtUcmVlQ29udHJvbC5leHBhbmRBbGwoKTtcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICBleHBhbmRBdChwYXRoOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jZGtUcmVlQ29udHJvbC5leHBhbmREZXNjZW5kYW50cyh0aGlzLmdldFJ1blRpbWVUcmVlSXRlbShwYXRoWzBdKSk7XG4gICAgICAgIHRoaXMuY2RrVHJlZUNvbnRyb2wudG9nZ2xlRGVzY2VuZGFudHModGhpcy5nZXRSdW5UaW1lVHJlZUl0ZW0ocGF0aCkpO1xuICAgICAgICB0aGlzLmNka1RyZWVDb250cm9sLmV4cGFuZCh0aGlzLmdldFJ1blRpbWVUcmVlSXRlbShwYXRoKSk7XG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgY29sbGFwc2VBbGwoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2RrVHJlZUNvbnRyb2wuY29sbGFwc2VBbGwoKTtcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICBmaWx0ZXJUZXJtKGZpbHRlcklucHV0OiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgaWYgKGZpbHRlcklucHV0ICE9PSAnJyAmJiBmaWx0ZXJJbnB1dCAhPT0gbnVsbCAmJiB0eXBlb2YgZmlsdGVySW5wdXQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICB0aGlzLnRyZWVEYXRhUnVuVGltZSA9IHRoaXMuZmlsdGVyVHJlZURhdGEoc3RydWN0dXJlZENsb25lKHRoaXMudHJlZURhdGFSdW5UaW1lQmFja3VwKSwgJ2xhYmVsJywgZmlsdGVySW5wdXQpO1xuICAgICAgICAgICAgdGhpcy50cmVlRGF0YVJ1blRpbWUgPSB0aGlzLmFwcGx5UnVuVGltZUxhc3RJdGVtcyh0aGlzLnRyZWVEYXRhUnVuVGltZSk7XG4gICAgICAgICAgICB0aGlzLmNka0FycmF5RGF0YVNvdXJjZSA9IG5ldyBBcnJheURhdGFTb3VyY2UodGhpcy50cmVlRGF0YVJ1blRpbWUpO1xuICAgICAgICAgICAgdGhpcy5jZGtUcmVlQ29udHJvbCA9IG5ldyBOZXN0ZWRUcmVlQ29udHJvbDxUcmVlSXRlbVJ1blRpbWVNb2RlbD4oKG5vZGUpID0+IG5vZGU/LmNoaWxkcmVuLCB7IHRyYWNrQnk6IHRoaXMudHJhY2tCeUNvbnRyb2wgfSk7XG4gICAgICAgICAgICB0aGlzLmNka1RyZWVDb250cm9sLmRhdGFOb2RlcyA9IHRoaXMudHJlZURhdGFSdW5UaW1lO1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJUcmVlID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyVHJlZSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIHRoaXMuZXhwYW5kQWxsKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnRyZWVEYXRhUnVuVGltZSA9IHN0cnVjdHVyZWRDbG9uZSh0aGlzLnRyZWVEYXRhUnVuVGltZUJhY2t1cCk7XG4gICAgICAgICAgICB0aGlzLmNka0FycmF5RGF0YVNvdXJjZSA9IG5ldyBBcnJheURhdGFTb3VyY2UodGhpcy50cmVlRGF0YVJ1blRpbWUpO1xuICAgICAgICAgICAgdGhpcy5jZGtUcmVlQ29udHJvbCA9IG5ldyBOZXN0ZWRUcmVlQ29udHJvbDxUcmVlSXRlbVJ1blRpbWVNb2RlbD4oKG5vZGUpID0+IG5vZGU/LmNoaWxkcmVuLCB7IHRyYWNrQnk6IHRoaXMudHJhY2tCeUNvbnRyb2wgfSk7XG4gICAgICAgICAgICB0aGlzLmNka1RyZWVDb250cm9sLmRhdGFOb2RlcyA9IHRoaXMudHJlZURhdGFSdW5UaW1lO1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJUcmVlID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyVHJlZSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIHRoaXMuZXhwYW5kQWxsKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZXRBbGxTZWxlY3Rpb24oaXNDaGVja2VkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2V0SXNDaGVja2VkRm9yQWxsKHRoaXMudHJlZURhdGFSdW5UaW1lLCBpc0NoZWNrZWQpO1xuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIHVwZGF0ZVRyZWVJdGVtKHRyZWVJdGVtOiBUcmVlSXRlbU1vZGVsLCBwYXRoOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZXRUcmVlRGF0YShwYXRoLCB0aGlzLnByb2Nlc3NJbnB1dHMoW3RyZWVJdGVtXSlbMF0pO1xuICAgICAgICBjb25zdCBwYXRoQXJyID0gcGF0aC5zcGxpdCgnLicpO1xuICAgICAgICBjb25zdCBpbmRleCA9IHBhcnNlSW50KHBhdGhBcnIucG9wKCksIDEwKTtcbiAgICAgICAgY29uc3QgdHJlZUl0ZW1SdW50aW1lID0gdGhpcy5jYWxjdWxhdGVSdW5UaW1lU3RhdGUodHJlZUl0ZW0sIGluZGV4LCBwYXRoQXJyLmpvaW4oJy4nKSk7XG4gICAgICAgIHRoaXMuc2V0VHJlZURhdGFSdW5UaW1lKHBhdGgsIHRyZWVJdGVtUnVudGltZSk7XG4gICAgICAgIC8vIGl0ZW1SZWN1cnNpdmVTZWxlY3Rpb25TdGF0ZVxuICAgICAgICBjb25zdCBpdGVtUmVjdXJzaXZlU2VsZWN0aW9uU3RhdGUgPSB0aGlzLmNhbGN1bGF0ZUl0ZW1TZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZSh0cmVlSXRlbSk7XG4gICAgICAgIHRoaXMuc2V0UnVuVGltZVNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlVHJlZShwYXRoLCBpdGVtUmVjdXJzaXZlU2VsZWN0aW9uU3RhdGUpO1xuICAgICAgICB0aGlzLnN5bmNTdGF0ZUNoYW5nZXNBdFBhdGgocGF0aCk7XG4gICAgICAgIC8vIFJlbmRlcmluZ1xuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgdGhpcy50cmVlQ29tcG9uZW50SW5zdGFuY2UucmVuZGVyTm9kZUNoYW5nZXMoW10pO1xuICAgICAgICB0aGlzLnRyZWVDb21wb25lbnRJbnN0YW5jZS5yZW5kZXJOb2RlQ2hhbmdlcyh0aGlzLnRyZWVEYXRhUnVuVGltZSk7XG4gICAgICAgIGlmICh0aGlzLmNka1RyZWVDb250cm9sLmlzRXhwYW5kZWQodHJlZUl0ZW1SdW50aW1lKSAmJiAhdHJlZUl0ZW0ubm9kZS5pc0V4cGFuZGVkKSB7XG4gICAgICAgICAgICB0aGlzLmNka1RyZWVDb250cm9sLnRvZ2dsZSh0cmVlSXRlbVJ1bnRpbWUpO1xuICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLmNka1RyZWVDb250cm9sLmlzRXhwYW5kZWQodHJlZUl0ZW1SdW50aW1lKSAmJiB0cmVlSXRlbS5ub2RlLmlzRXhwYW5kZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY2RrVHJlZUNvbnRyb2wuZXhwYW5kKHRyZWVJdGVtUnVudGltZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgb25Ob2RlQ2xpY2sodHJlZVJ1blRpbWVJdGVtOiBUcmVlSXRlbVJ1blRpbWVNb2RlbCk6IHZvaWQge1xuICAgICAgICB0aGlzLm5vZGVDbGljay5lbWl0KHRoaXMuZ2V0VHJlZUl0ZW0odHJlZVJ1blRpbWVJdGVtPy5wYXRoKSk7XG4gICAgICAgIGlmICh0aGlzLmlzQ2xpY2tUb2dnbGluZ05vZGUpIHtcbiAgICAgICAgICAgIHRoaXMuY2RrVHJlZUNvbnRyb2wudG9nZ2xlKHRyZWVSdW5UaW1lSXRlbSk7XG4gICAgICAgICAgICB0aGlzLm9uTm9kZVRvZ2dsZSh0cmVlUnVuVGltZUl0ZW0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25Ob2RlVG9nZ2xlKHRyZWVSdW5UaW1lSXRlbTogVHJlZUl0ZW1SdW5UaW1lTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5nZXRUcmVlSXRlbSh0cmVlUnVuVGltZUl0ZW0/LnBhdGgpLm5vZGUuaXNFeHBhbmRlZCA9IHRoaXMuY2RrVHJlZUNvbnRyb2wuaXNFeHBhbmRlZCh0cmVlUnVuVGltZUl0ZW0pO1xuICAgICAgICB0aGlzLm5vZGVUb2dnbGUuZW1pdCh0aGlzLmdldFRyZWVJdGVtKHRyZWVSdW5UaW1lSXRlbT8ucGF0aCkpO1xuICAgIH1cblxuICAgIC8vIFRPRE86IGZpbmQgdGhlIGNvcnJlY3QgdHlwZSBvciB0dXJuIGludG8gYSBnZW5lcmljLCBodHRwczovL3d3dy50eXBlc2NyaXB0bGFuZy5vcmcvZG9jcy9oYW5kYm9vay8yL2dlbmVyaWNzLmh0bWxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIG5vZGVTZWxlY3RlZChldnQ6IGFueSwgcGF0aDogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmdldFRyZWVJdGVtKHBhdGgpO1xuICAgICAgICBjb25zdCBydW5UaW1lVHJlZUl0ZW0gPSB0aGlzLmdldFJ1blRpbWVCYWNrdXBUcmVlSXRlbShwYXRoKTtcbiAgICAgICAgY29uc3QgcmVuZGVyZWRSdW5UaW1lVHJlZUl0ZW0gPSB0aGlzLmdldFJ1blRpbWVUcmVlSXRlbShwYXRoKTtcbiAgICAgICAgY29uc3Qgbm9kZSA9IGl0ZW0ubm9kZTtcbiAgICAgICAgLy8gY29uc29sZS5sb2cocGF0aCxpdGVtLHJ1blRpbWVUcmVlSXRlbSwgcmVuZGVyZWRSdW5UaW1lVHJlZUl0ZW0pO1xuICAgICAgICBpZiAoIW5vZGU/LnNlbGVjdENvbmZpZz8uc2luZ2xlU2VsZWN0KSB7XG4gICAgICAgICAgICBub2RlLmlzU2VsZWN0ZWQgPSBldnQudGFyZ2V0LmNoZWNrZWQ7XG4gICAgICAgICAgICBub2RlLmlzSW5kZXRlcm1pbmF0ZSA9IGZhbHNlO1xuICAgICAgICAgICAgLy8gSWYgdGhlIG5vZGUgaXMgcmVjdXJzaXZlIGl0IHNldHMgZXZlcnkgY2hpbGRyZW4gd2l0aCB0aGUgY2hhbmdlLlxuICAgICAgICAgICAgaWYgKHJlbmRlcmVkUnVuVGltZVRyZWVJdGVtPy5jaGlsZHJlbiAmJiByZW5kZXJlZFJ1blRpbWVUcmVlSXRlbT8uY2hpbGRyZW4/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBpZiAobm9kZT8uc2VsZWN0Q29uZmlnPy5yZWN1cnNpdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2cocmVuZGVyZWRSdW5UaW1lVHJlZUl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldElzQ2hlY2tlZEZvckFsbChyZW5kZXJlZFJ1blRpbWVUcmVlSXRlbT8uY2hpbGRyZW4sIGV2dC50YXJnZXQuY2hlY2tlZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnNldFJ1blRpbWVTZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZVRyZWUoXG4gICAgICAgICAgICAgICAgcGF0aCxcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGN1bGF0ZUl0ZW1TZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZShzdHJ1Y3R1cmVkQ2xvbmUodGhpcy5nZXRUcmVlSXRlbShwYXRoKSkpLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChyZW5kZXJlZFJ1blRpbWVUcmVlSXRlbT8uY2hpbGRyZW4gJiYgcmVuZGVyZWRSdW5UaW1lVHJlZUl0ZW0/LmNoaWxkcmVuPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgaWYgKG5vZGU/LnNlbGVjdENvbmZpZz8ucmVjdXJzaXZlKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHRoaXMuc2V0SXNDaGVja2VkRm9yQWxsKHJlbmRlcmVkUnVuVGltZVRyZWVJdGVtPy5jaGlsZHJlbiwgZXZ0LnRhcmdldC5jaGVja2VkKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ydW5TdGF0ZUNoYW5nZXNGb3JBbGwocmVuZGVyZWRSdW5UaW1lVHJlZUl0ZW0/LmNoaWxkcmVuKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy50cmVlQ29tcG9uZW50SW5zdGFuY2U/LnJlbmRlck5vZGVDaGFuZ2VzKFtdKTtcbiAgICAgICAgICAgICAgICB0aGlzLnRyZWVDb21wb25lbnRJbnN0YW5jZT8ucmVuZGVyTm9kZUNoYW5nZXModGhpcy50cmVlRGF0YVJ1blRpbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zeW5jU3RhdGVDaGFuZ2VzQXRQYXRoKHBhdGgpO1xuICAgICAgICAgICAgaWYgKHRoaXMuZ2V0VHJlZUl0ZW0ocGF0aCkubm9kZS5pc1NlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RUcmVlSXRlbShydW5UaW1lVHJlZUl0ZW0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRlc2VsZWN0VHJlZUl0ZW0ocnVuVGltZVRyZWVJdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG5vZGVQYXRoc1NlcSA9IHRoaXMuZ2V0UGFyZW50UGF0aHMocGF0aCk7XG4gICAgICAgICAgICBpZiAobm9kZVBhdGhzU2VxLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBub2RlUGF0aHNTZXEuZm9yRWFjaCgobm9kZVBhdGg6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0cmVlSXRlbSA9IHRoaXMuZ2V0VHJlZUl0ZW0obm9kZVBhdGgpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGlsZFN0YXRlcyA9IHRoaXMuZ2V0UnVuVGltZVNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlKG5vZGVQYXRoKS5jaGlsZHJlbi5tYXAoKF8pID0+IF8uc2VsZWN0aW9uUmVjdXJzaXZlU3RhdGUpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVJ1blRpbWVTZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZShcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVQYXRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWNpZGVTZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZFN0YXRlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmVlSXRlbS5ub2RlPy5pc1NlbGVjdGVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyZWVJdGVtLm5vZGU/LnNlbGVjdENvbmZpZz8ucmVjdXJzaXZlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyZWVJdGVtLm5vZGU/LnNlbGVjdENvbmZpZz8ubm9BdXRvU2VsZWN0UGFyZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zeW5jU3RhdGVDaGFuZ2VzQXRQYXRoKG5vZGVQYXRoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBwcmV2SXRlbSA9IHRoaXMuc2VsZWN0aW9uTW9kZWwuc2VsZWN0ZWRbMF07XG4gICAgICAgICAgICBpZiAoZXZ0LnRhcmdldC5jaGVja2VkKSB7XG4gICAgICAgICAgICAgICAgaWYgKHByZXZJdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0VHJlZUl0ZW0ocHJldkl0ZW0ucGF0aCkubm9kZS5pc1NlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uTW9kZWwuZGVzZWxlY3QocHJldkl0ZW0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpdGVtLm5vZGUuaXNTZWxlY3RlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25Nb2RlbC5zZWxlY3QocnVuVGltZVRyZWVJdGVtKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaXRlbS5ub2RlLmlzU2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbk1vZGVsLmRlc2VsZWN0KHJ1blRpbWVUcmVlSXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5oaWdobGlnaHRQYXRoKSB7XG4gICAgICAgICAgICAgICAgaWYgKGV2dC50YXJnZXQuY2hlY2tlZCAmJiBwcmV2SXRlbSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwcmV2SXRlbU5vZGVQYXRoc1NlcSA9IHRoaXMuZ2V0UGFyZW50UGF0aHMocHJldkl0ZW0ucGF0aCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwcmV2SXRlbU5vZGVQYXRoc1NlcS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcmV2SXRlbU5vZGVQYXRoc1NlcS5mb3JFYWNoKChub2RlUGF0aDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVSdW5UaW1lU2VsZWN0aW9uUmVjdXJzaXZlU3RhdGUobm9kZVBhdGgsICdhbGxOb3RTZWxlY3RlZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3luY1N0YXRlQ2hhbmdlc0F0UGF0aChub2RlUGF0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBub2RlUGF0aHNTZXEgPSB0aGlzLmdldFBhcmVudFBhdGhzKHBhdGgpO1xuICAgICAgICAgICAgICAgIGlmIChub2RlUGF0aHNTZXE/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgbm9kZVBhdGhzU2VxLmZvckVhY2goKG5vZGVQYXRoOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlUnVuVGltZVNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlKG5vZGVQYXRoLCBldnQudGFyZ2V0LmNoZWNrZWQgPyAnaW5kZXRlcm1pbmF0ZScgOiAnYWxsTm90U2VsZWN0ZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3luY1N0YXRlQ2hhbmdlc0F0UGF0aChub2RlUGF0aCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBoYXNDaGlsZCA9IChfOiBudW1iZXIsIGl0ZW06IFRyZWVJdGVtUnVuVGltZU1vZGVsKTogYm9vbGVhbiA9PiAhIWl0ZW0/LmNoaWxkcmVuICYmIGl0ZW0/LmNoaWxkcmVuPy5sZW5ndGggPj0gMDtcblxuICAgIC8vIFRPRE86IGZpbmQgdGhlIGNvcnJlY3QgdHlwZSBvciB0dXJuIGludG8gYSBnZW5lcmljLCBodHRwczovL3d3dy50eXBlc2NyaXB0bGFuZy5vcmcvZG9jcy9oYW5kYm9vay8yL2dlbmVyaWNzLmh0bWxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIG9uU2VsZWN0Rm4ocGF0aDogc3RyaW5nKTogKGV2dDogYW55KSA9PiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZ2V0VHJlZUl0ZW0ocGF0aCk/Lm5vZGU/LnNlbGVjdGFibGUpIHtcbiAgICAgICAgICAgIGNvbnN0IG5vZGVTZWxlY3RlZCA9IHRoaXMubm9kZVNlbGVjdGVkLmJpbmQodGhpcyk7XG4gICAgICAgICAgICAvLyBUT0RPOiBmaW5kIHRoZSBjb3JyZWN0IHR5cGUgb3IgdHVybiBpbnRvIGEgZ2VuZXJpYywgaHR0cHM6Ly93d3cudHlwZXNjcmlwdGxhbmcub3JnL2RvY3MvaGFuZGJvb2svMi9nZW5lcmljcy5odG1sXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICAgICAgcmV0dXJuIChldnQ6IGFueSkgPT4gbm9kZVNlbGVjdGVkKGV2dCwgcGF0aCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gVE9ETzogZmluZCB0aGUgY29ycmVjdCB0eXBlIG9yIHR1cm4gaW50byBhIGdlbmVyaWMsIGh0dHBzOi8vd3d3LnR5cGVzY3JpcHRsYW5nLm9yZy9kb2NzL2hhbmRib29rLzIvZ2VuZXJpY3MuaHRtbFxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICByZXR1cm4gKGV2dDogYW55KSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ3RyZWVJdGVtTW9kZWwubm9kZS5zZWxlY3RhYmxlIGlzIGZhbHNlLCB5b3UgY2FuIG5vdCBpbXBsZW1lbnQgb25TZWxlY3QnKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBnZXRSdW5UaW1lU2VsZWN0aW9uUmVjdXJzaXZlU3RhdGUocGF0aDogc3RyaW5nKTogVHJlZUl0ZW1TZWxlY3Rpb25SZWN1cnNpdmVNb2RlbCB7XG4gICAgICAgIGNvbnN0IGluZGV4QXJyOiBBcnJheTxudW1iZXI+ID0gdGhpcy5yZXNvbHZlUGF0aChwYXRoKTtcbiAgICAgICAgbGV0IG5vZGVBcnIgPSB0aGlzLnJ1blRpbWVTZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZTtcbiAgICAgICAgbGV0IG5vZGU7XG4gICAgICAgIGluZGV4QXJyPy5mb3JFYWNoKChwYXRoSW5kZXg6IG51bWJlciwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGlmIChpbmRleCA8IGluZGV4QXJyLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICBub2RlQXJyID0gbm9kZUFycltwYXRoSW5kZXhdPy5jaGlsZHJlbjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbm9kZSA9IG5vZGVBcnJbcGF0aEluZGV4XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBub2RlO1xuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdFRyZWUoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLm5vZGVzKSB7XG4gICAgICAgICAgICB0aGlzLl9pc011bHRpTGV2ZWwgPSB0aGlzLmNoZWNrSWZNdWx0aUxldmVsKHRoaXMubm9kZXMpO1xuICAgICAgICAgICAgdGhpcy5wcm9jZXNzZWROb2RlcyA9IHRoaXMucHJvY2Vzc0lucHV0cyhzdHJ1Y3R1cmVkQ2xvbmUodGhpcy5ub2RlcykpO1xuICAgICAgICAgICAgdGhpcy50cmVlRGF0YVJ1blRpbWUgPSB0aGlzLmNyZWF0ZVRyZWVEYXRhUnVudGltZSh0aGlzLnByb2Nlc3NlZE5vZGVzKTtcbiAgICAgICAgICAgIHRoaXMudHJlZURhdGFSdW5UaW1lID0gdGhpcy5hcHBseVJ1blRpbWVMYXN0SXRlbXModGhpcy50cmVlRGF0YVJ1blRpbWUpO1xuICAgICAgICAgICAgdGhpcy5ydW5UaW1lU2VsZWN0aW9uUmVjdXJzaXZlU3RhdGUgPSB0aGlzLmNyZWF0ZVJ1blRpbWVTZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZSh0aGlzLnByb2Nlc3NlZE5vZGVzKTtcbiAgICAgICAgICAgIHRoaXMudHJlZURhdGFSdW5UaW1lQmFja3VwID0gc3RydWN0dXJlZENsb25lKHRoaXMudHJlZURhdGFSdW5UaW1lKTtcbiAgICAgICAgICAgIC8vIHRvZG8gSXQgc2hvdWxkIGJlIGNvbmZpZ3VyYWJsZSwgODAwLCAyIGFuZCA0MDAgYXJlIGhhcmQgY29kZWQgcmlnaHQgbm93XG4gICAgICAgICAgICBpZiAodGhpcy50cmVlRGF0YVJ1blRpbWVCYWNrdXAubGVuZ3RoID4gODAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50cmVlUGFnaW5hdGlvbiA9IG5ldyBFdWlUcmVlUGFnaW5hdGlvbjxUcmVlSXRlbVJ1blRpbWVNb2RlbD4odGhpcy50cmVlRGF0YVJ1blRpbWVCYWNrdXAsIDEsIDIsIDQwMCk7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFnaW5hdGVkRGF0YSA9IHRoaXMudHJlZVBhZ2luYXRpb24uZ2V0Vmlld0RhdGEoKS5kYXRhO1xuICAgICAgICAgICAgICAgIHRoaXMuY2RrQXJyYXlEYXRhU291cmNlID0gbmV3IEFycmF5RGF0YVNvdXJjZTxUcmVlSXRlbVJ1blRpbWVNb2RlbD4ocGFnaW5hdGVkRGF0YSk7XG4gICAgICAgICAgICAgICAgdGhpcy5jZGtUcmVlQ29udHJvbCA9IG5ldyBOZXN0ZWRUcmVlQ29udHJvbDxUcmVlSXRlbVJ1blRpbWVNb2RlbD4oKG5vZGUpID0+IG5vZGU/LmNoaWxkcmVuLCB7XG4gICAgICAgICAgICAgICAgICAgIHRyYWNrQnk6IHRoaXMudHJhY2tCeUNvbnRyb2wsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5jZGtUcmVlQ29udHJvbC5kYXRhTm9kZXMgPSBwYWdpbmF0ZWREYXRhO1xuICAgICAgICAgICAgICAgIHRoaXMucnVuU2Nyb2xsTGlzdGVuZXIoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jZGtBcnJheURhdGFTb3VyY2UgPSBuZXcgQXJyYXlEYXRhU291cmNlPFRyZWVJdGVtUnVuVGltZU1vZGVsPih0aGlzLnRyZWVEYXRhUnVuVGltZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5jZGtUcmVlQ29udHJvbCA9IG5ldyBOZXN0ZWRUcmVlQ29udHJvbDxUcmVlSXRlbVJ1blRpbWVNb2RlbD4oKG5vZGUpID0+IG5vZGU/LmNoaWxkcmVuLCB7XG4gICAgICAgICAgICAgICAgICAgIHRyYWNrQnk6IHRoaXMudHJhY2tCeUNvbnRyb2wsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5jZGtUcmVlQ29udHJvbC5kYXRhTm9kZXMgPSB0aGlzLnRyZWVEYXRhUnVuVGltZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucmVuZGVySW5pdGlhbEV4cGFuZCh0aGlzLnRyZWVEYXRhUnVuVGltZSk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbk1vZGVsID0gbmV3IFNlbGVjdGlvbk1vZGVsPFRyZWVJdGVtUnVuVGltZU1vZGVsPihcbiAgICAgICAgICAgICAgICB0cnVlLFxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0SW5pdGlhbFNlbGVjdGlvbih0aGlzLnRyZWVEYXRhUnVuVGltZSksXG4gICAgICAgICAgICAgICAgdHJ1ZSxcbiAgICAgICAgICAgICAgICAoYSwgYikgPT4gYT8ucGF0aCA9PT0gYj8ucGF0aCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLl9zZWxlY3Rpb24gPSBbLi4udGhpcy5zZWxlY3Rpb25Nb2RlbC5zZWxlY3RlZF0/Lm1hcCgoaXRlbSkgPT4gdGhpcy5nZXRUcmVlSXRlbShpdGVtPy5wYXRoKSk7XG4gICAgICAgICAgICB0aGlzLnJlbmRlclRyZWUgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uTW9kZWxTdWJzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25Nb2RlbFN1YnMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uTW9kZWxTdWJzID0gdGhpcy5zZWxlY3Rpb25Nb2RlbC5jaGFuZ2VkLnBpcGUoZGVib3VuY2VUaW1lKDEpKS5zdWJzY3JpYmUoKHNjKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0aW9uQ2hhbmdlID0ge1xuICAgICAgICAgICAgICAgICAgICBhZGRlZDogc2MuYWRkZWQubWFwKChfKSA9PiB0aGlzLmdldFRyZWVJdGVtKF8ucGF0aCkpLFxuICAgICAgICAgICAgICAgICAgICByZW1vdmVkOiBzYy5yZW1vdmVkLm1hcCgoXykgPT4gdGhpcy5nZXRUcmVlSXRlbShfLnBhdGgpKSxcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbLi4udGhpcy5zZWxlY3Rpb25Nb2RlbC5zZWxlY3RlZF0ubWFwKChpdGVtKSA9PiB0aGlzLmdldFRyZWVJdGVtKGl0ZW0ucGF0aCkpLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0aW9uID0gc2VsZWN0aW9uQ2hhbmdlLnNlbGVjdGlvbjtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZS5lbWl0KHNlbGVjdGlvbkNoYW5nZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHByb2Nlc3NJbnB1dHModHJlZURhdGE6IFRyZWVEYXRhTW9kZWwpOiBUcmVlRGF0YU1vZGVsIHtcbiAgICAgICAgaWYgKHRoaXMuaXNNdWx0aXNlbGVjdCkge1xuICAgICAgICAgICAgdHJlZURhdGEgPSB0aGlzLm92ZXJyaWRlVHJlZURhdGFNb2RlbEZvclNlbGVjdGlvbih0cmVlRGF0YSwgdGhpcy5pc1JlY3Vyc2l2ZVNlbGVjdGlvbiwgIXRoaXMuaXNSZWN1cnNpdmVQYXJlbnRTZWxlY3Rpb24pO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmlzU2luZ2xlU2VsZWN0KSB7XG4gICAgICAgICAgICB0cmVlRGF0YSA9IHRoaXMub3ZlcnJpZGVUcmVlRGF0YU1vZGVsRm9yU2VsZWN0aW9uKHRyZWVEYXRhLCBmYWxzZSwgZmFsc2UsIHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cmVlRGF0YTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG92ZXJyaWRlVHJlZURhdGFNb2RlbEZvclNlbGVjdGlvbihcbiAgICAgICAgbm9kZUFycjogVHJlZURhdGFNb2RlbCxcbiAgICAgICAgaXNSZWN1cnNpdmU6IGJvb2xlYW4sXG4gICAgICAgIG5vQXV0b1NlbGVjdFBhcmVudDogYm9vbGVhbixcbiAgICAgICAgc2luZ2xlU2VsZWN0PzogYm9vbGVhbixcbiAgICApOiBUcmVlRGF0YU1vZGVsIHtcbiAgICAgICAgcmV0dXJuIG5vZGVBcnI/Lm1hcCgoaXRlbTogVHJlZUl0ZW1Nb2RlbCwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgaWYgKGl0ZW0/LmNoaWxkcmVuICYmIGl0ZW0uY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgICAgICAgICAgIG5vZGU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLml0ZW0ubm9kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGFibGU6IHR5cGVvZiBpdGVtPy5ub2RlPy5zZWxlY3RhYmxlID09PSAndW5kZWZpbmVkJyA/IHRydWUgOiBpdGVtPy5ub2RlPy5zZWxlY3RhYmxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaXNTZWxlY3RlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpc0luZGV0ZXJtaW5hdGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0Q29uZmlnOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uaXRlbS5ub2RlLnNlbGVjdENvbmZpZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWN1cnNpdmU6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiBpdGVtPy5ub2RlPy5zZWxlY3RDb25maWc/LnJlY3Vyc2l2ZSA9PT0gJ3VuZGVmaW5lZCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gISFpc1JlY3Vyc2l2ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBpdGVtPy5ub2RlPy5zZWxlY3RDb25maWc/LnJlY3Vyc2l2ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub0F1dG9TZWxlY3RQYXJlbnQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiBpdGVtPy5ub2RlPy5zZWxlY3RDb25maWc/Lm5vQXV0b1NlbGVjdFBhcmVudCA9PT0gJ3VuZGVmaW5lZCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gbm9BdXRvU2VsZWN0UGFyZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGl0ZW0/Lm5vZGU/LnNlbGVjdENvbmZpZz8ubm9BdXRvU2VsZWN0UGFyZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZVNlbGVjdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIGl0ZW0/Lm5vZGU/LnNlbGVjdENvbmZpZz8uc2luZ2xlU2VsZWN0ID09PSAndW5kZWZpbmVkJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBzaW5nbGVTZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogaXRlbT8ubm9kZT8uc2VsZWN0Q29uZmlnPy5zaW5nbGVTZWxlY3QsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogdGhpcy5vdmVycmlkZVRyZWVEYXRhTW9kZWxGb3JTZWxlY3Rpb24oaXRlbS5jaGlsZHJlbiwgaXNSZWN1cnNpdmUsIG5vQXV0b1NlbGVjdFBhcmVudCwgc2luZ2xlU2VsZWN0KSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgICAgICAgICAgICBub2RlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5pdGVtLm5vZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RhYmxlOiB0eXBlb2YgaXRlbT8ubm9kZT8uc2VsZWN0YWJsZSA9PT0gJ3VuZGVmaW5lZCcgPyB0cnVlIDogaXRlbT8ubm9kZT8uc2VsZWN0YWJsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdENvbmZpZzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLml0ZW0ubm9kZT8uc2VsZWN0Q29uZmlnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZVNlbGVjdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIGl0ZW0/Lm5vZGU/LnNlbGVjdENvbmZpZz8uc2luZ2xlU2VsZWN0ID09PSAndW5kZWZpbmVkJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBzaW5nbGVTZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogaXRlbT8ubm9kZT8uc2VsZWN0Q29uZmlnPy5zaW5nbGVTZWxlY3QsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgcnVuU2Nyb2xsTGlzdGVuZXIoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2Nyb2xsRGlzcGF0Y2hlclN1YnMgPSB0aGlzLnNjcm9sbERpc3BhdGNoZXIuc2Nyb2xsZWQoKS5zdWJzY3JpYmUoKHNjcm9sbGFibGU6IENka1Njcm9sbGFibGUpID0+IHtcbiAgICAgICAgICAgIGlmIChzY3JvbGxhYmxlICYmIHRoaXMuY2hlY2tJZkN1cnJlbnRTY3JvbGxhYmxlKHNjcm9sbGFibGUpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNBdEJvdHRvbSA9XG4gICAgICAgICAgICAgICAgICAgIHNjcm9sbGFibGU/LmdldEVsZW1lbnRSZWYoKS5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcCArIHNjcm9sbGFibGU/LmdldEVsZW1lbnRSZWYoKS5uYXRpdmVFbGVtZW50LmNsaWVudEhlaWdodCA+PVxuICAgICAgICAgICAgICAgICAgICBzY3JvbGxhYmxlPy5nZXRFbGVtZW50UmVmKCkubmF0aXZlRWxlbWVudC5zY3JvbGxIZWlnaHQ7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNBdFRvcCA9IHNjcm9sbGFibGU/LmdldEVsZW1lbnRSZWYoKS5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcCA9PT0gMDtcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnRWxlbWVudDonLCB0aGlzLmNka1Njcm9sbGFibGVSZWYuZ2V0RWxlbWVudFJlZigpKTtcbiAgICAgICAgICAgICAgICBpZiAoaXNBdEJvdHRvbSAmJiAhdGhpcy50cmVlUGFnaW5hdGlvbi5pc0F0TWF4KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubm9kZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50cmVlRGF0YVJ1blRpbWUgPSB0aGlzLnRyZWVQYWdpbmF0aW9uLnBhZ2luYXRlTmV4dCgpLmRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyZWVEYXRhUnVuVGltZSA9IHRoaXMuYXBwbHlSdW5UaW1lTGFzdEl0ZW1zKHRoaXMudHJlZURhdGFSdW5UaW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2RrQXJyYXlEYXRhU291cmNlID0gbmV3IEFycmF5RGF0YVNvdXJjZSh0aGlzLnRyZWVEYXRhUnVuVGltZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNka1RyZWVDb250cm9sID0gbmV3IE5lc3RlZFRyZWVDb250cm9sPFRyZWVJdGVtUnVuVGltZU1vZGVsPigobm9kZSkgPT4gbm9kZT8uY2hpbGRyZW4sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFja0J5OiB0aGlzLnRyYWNrQnlDb250cm9sLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNka1RyZWVDb250cm9sLmRhdGFOb2RlcyA9IHRoaXMudHJlZURhdGFSdW5UaW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJUcmVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyVHJlZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXhwYW5kQWxsKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0b3RhbEhlaWdodCA9IHNjcm9sbGFibGUubWVhc3VyZVNjcm9sbE9mZnNldCgnYm90dG9tJykgKyBzY3JvbGxhYmxlLm1lYXN1cmVTY3JvbGxPZmZzZXQoJ3RvcCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdmlld3BvcnRIZWlnaHQgPSBzY3JvbGxhYmxlLmdldEVsZW1lbnRSZWYoKS5uYXRpdmVFbGVtZW50LmNsaWVudEhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBvc2l0aW9uVG9TY3JvbGwgPSB0b3RhbEhlaWdodCAtIHZpZXdwb3J0SGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgc2Nyb2xsYWJsZS5zY3JvbGxUbyh7IHRvcDogcG9zaXRpb25Ub1Njcm9sbCAvIDIgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzQXRUb3AgJiYgdGhpcy50cmVlUGFnaW5hdGlvbi5nZXRDdXJyZW50U3RhcnRQYWdlKCkgPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm5vZGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJlZURhdGFSdW5UaW1lID0gdGhpcy50cmVlUGFnaW5hdGlvbi5wYWdpbmF0ZVByZXYoKS5kYXRhO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50cmVlRGF0YVJ1blRpbWUgPSB0aGlzLmFwcGx5UnVuVGltZUxhc3RJdGVtcyh0aGlzLnRyZWVEYXRhUnVuVGltZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNka0FycmF5RGF0YVNvdXJjZSA9IG5ldyBBcnJheURhdGFTb3VyY2UodGhpcy50cmVlRGF0YVJ1blRpbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jZGtUcmVlQ29udHJvbCA9IG5ldyBOZXN0ZWRUcmVlQ29udHJvbDxUcmVlSXRlbVJ1blRpbWVNb2RlbD4oKG5vZGUpID0+IG5vZGU/LmNoaWxkcmVuLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2tCeTogdGhpcy50cmFja0J5Q29udHJvbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jZGtUcmVlQ29udHJvbC5kYXRhTm9kZXMgPSB0aGlzLnRyZWVEYXRhUnVuVGltZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyVHJlZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbmRlclRyZWUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmV4cGFuZEFsbCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdG90YWxIZWlnaHQgPSBzY3JvbGxhYmxlLm1lYXN1cmVTY3JvbGxPZmZzZXQoJ2JvdHRvbScpICsgc2Nyb2xsYWJsZS5tZWFzdXJlU2Nyb2xsT2Zmc2V0KCd0b3AnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZpZXdwb3J0SGVpZ2h0ID0gc2Nyb2xsYWJsZS5nZXRFbGVtZW50UmVmKCkubmF0aXZlRWxlbWVudC5jbGllbnRIZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwb3NpdGlvblRvU2Nyb2xsID0gdG90YWxIZWlnaHQgLSB2aWV3cG9ydEhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjcm9sbGFibGUuc2Nyb2xsVG8oeyB0b3A6IHBvc2l0aW9uVG9TY3JvbGwgLyAyICsgdmlld3BvcnRIZWlnaHQgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0U2VsZWN0aW9uSW5kZXhPZkl0ZW0ocnVuVGltZVRyZWVJdGVtOiBUcmVlSXRlbVJ1blRpbWVNb2RlbCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGlvbk1vZGVsLnNlbGVjdGVkLmZpbmRJbmRleCgoaSkgPT4gaT8ucGF0aCA9PT0gcnVuVGltZVRyZWVJdGVtPy5wYXRoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNlbGVjdFRyZWVJdGVtKHJ1blRpbWVUcmVlSXRlbTogVHJlZUl0ZW1SdW5UaW1lTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaW5kZXhPZkl0ZW0gPSB0aGlzLmdldFNlbGVjdGlvbkluZGV4T2ZJdGVtKHJ1blRpbWVUcmVlSXRlbSk7XG4gICAgICAgIGlmIChpbmRleE9mSXRlbSA9PT0gLTEpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uTW9kZWwuc2VsZWN0KHJ1blRpbWVUcmVlSXRlbSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGRlc2VsZWN0VHJlZUl0ZW0ocnVuVGltZVRyZWVJdGVtOiBUcmVlSXRlbVJ1blRpbWVNb2RlbCk6IHZvaWQge1xuICAgICAgICBjb25zdCBpbmRleE9mSXRlbSA9IHRoaXMuZ2V0U2VsZWN0aW9uSW5kZXhPZkl0ZW0ocnVuVGltZVRyZWVJdGVtKTtcbiAgICAgICAgaWYgKGluZGV4T2ZJdGVtID4gLTEpIHtcbiAgICAgICAgICAgIGNvbnN0IG5ld1NlbGVjdGlvbiA9IFsuLi50aGlzLnNlbGVjdGlvbk1vZGVsLnNlbGVjdGVkXTtcbiAgICAgICAgICAgIG5ld1NlbGVjdGlvbi5zcGxpY2UoaW5kZXhPZkl0ZW0sIDEpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25Nb2RlbC5zZXRTZWxlY3Rpb24oLi4ubmV3U2VsZWN0aW9uKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlVHJlZURhdGFSdW50aW1lKG5vZGVzOiBUcmVlRGF0YU1vZGVsKTogVHJlZURhdGFSdW5UaW1lTW9kZWwge1xuICAgICAgICByZXR1cm4gc3RydWN0dXJlZENsb25lKG5vZGVzKT8ubWFwKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2FsY3VsYXRlUnVuVGltZVN0YXRlKGl0ZW0sIGluZGV4KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhcHBseVJ1blRpbWVMYXN0SXRlbXMoaXRlbXM6IFRyZWVEYXRhUnVuVGltZU1vZGVsKTogVHJlZURhdGFSdW5UaW1lTW9kZWwge1xuICAgICAgICByZXR1cm4gaXRlbXM/Lm1hcCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGlmIChpdGVtPy5jaGlsZHJlbikge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgICAgICAgICAgIGxhc3Q6IGl0ZW1zLmxlbmd0aCA9PT0gaW5kZXggKyAxID8gdHJ1ZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IGl0ZW0uY2hpbGRyZW4/Lmxlbmd0aCA+IDAgPyB0aGlzLmFwcGx5UnVuVGltZUxhc3RJdGVtcyhpdGVtLmNoaWxkcmVuKSA6IGl0ZW0/LmNoaWxkcmVuLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgICAgICAgICAgIGxhc3Q6IGl0ZW1zLmxlbmd0aCA9PT0gaW5kZXggKyAxID8gdHJ1ZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZVJ1blRpbWVTZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZShub2RlczogVHJlZURhdGFNb2RlbCk6IEFycmF5PFRyZWVJdGVtU2VsZWN0aW9uUmVjdXJzaXZlTW9kZWw+IHtcbiAgICAgICAgcmV0dXJuIHN0cnVjdHVyZWRDbG9uZShub2Rlcyk/Lm1hcCgoaXRlbSkgPT4gdGhpcy5jYWxjdWxhdGVJdGVtU2VsZWN0aW9uUmVjdXJzaXZlU3RhdGUoeyAuLi5pdGVtIH0pKTtcbiAgICB9XG5cbiAgICAvLyBDcmVhdGluZyBydW4gdGltZSBzdGF0ZSB3aGljaCBpbmNsdWRlcyBjaGlsZHJlbiBzZWxlY3Rpb24gc3RhdGUgZm9yIHNlbGVjdGlvbiB0cmVlLlxuICAgIHByaXZhdGUgY2FsY3VsYXRlSXRlbVNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlKHRyZWVJdGVtOiBUcmVlSXRlbU1vZGVsLCBpc1NlbGVjdGVkPzogYm9vbGVhbik6IFRyZWVJdGVtU2VsZWN0aW9uUmVjdXJzaXZlTW9kZWwge1xuICAgICAgICBjb25zdCBjaGlsZHJlblNlbGVjdGlvblJlY3Vyc2l2ZTogQXJyYXk8VHJlZUl0ZW1TZWxlY3Rpb25SZWN1cnNpdmVNb2RlbD4gPSBbXTtcbiAgICAgICAgaWYgKHRyZWVJdGVtLmNoaWxkcmVuICYmIHRyZWVJdGVtLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRyZWVJdGVtLmNoaWxkcmVuLmZvckVhY2goKGNoaWxkLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIGNoaWxkcmVuU2VsZWN0aW9uUmVjdXJzaXZlW2luZGV4XSA9IHRoaXMuY2FsY3VsYXRlSXRlbVNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlKGNoaWxkKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNoaWxkU3RhdGVzID0gY2hpbGRyZW5TZWxlY3Rpb25SZWN1cnNpdmUubWFwKChfKSA9PiBfLnNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlKTtcbiAgICAgICAgY29uc3QgaXRlbVN0YXRlOiBTZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZSA9IHRoaXMuZGVjaWRlU2VsZWN0aW9uUmVjdXJzaXZlU3RhdGUoXG4gICAgICAgICAgICBjaGlsZFN0YXRlcyxcbiAgICAgICAgICAgIGlzU2VsZWN0ZWQgfHwgdHJlZUl0ZW0ubm9kZS5pc1NlbGVjdGVkLFxuICAgICAgICAgICAgdHJlZUl0ZW0ubm9kZT8uc2VsZWN0Q29uZmlnPy5yZWN1cnNpdmUsXG4gICAgICAgICAgICB0cmVlSXRlbS5ub2RlPy5zZWxlY3RDb25maWc/Lm5vQXV0b1NlbGVjdFBhcmVudCxcbiAgICAgICAgKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc2VsZWN0aW9uUmVjdXJzaXZlU3RhdGU6IGl0ZW1TdGF0ZSxcbiAgICAgICAgICAgIGNoaWxkcmVuOiBjaGlsZHJlblNlbGVjdGlvblJlY3Vyc2l2ZSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGRlY2lkZVNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlKFxuICAgICAgICBjaGlsZFN0YXRlczogQXJyYXk8U2VsZWN0aW9uUmVjdXJzaXZlU3RhdGU+ID0gW10sXG4gICAgICAgIGlzU2VsZWN0ZWQ6IGJvb2xlYW4sXG4gICAgICAgIHJlY3Vyc2l2ZTogYm9vbGVhbixcbiAgICAgICAgbm9BdXRvU2VsZWN0UGFyZW50OiBib29sZWFuLFxuICAgICk6IFNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlIHtcbiAgICAgICAgbGV0IGl0ZW1TdGF0ZTogU2VsZWN0aW9uUmVjdXJzaXZlU3RhdGUgPSAnaW5kZXRlcm1pbmF0ZSc7XG4gICAgICAgIGlmIChpc1NlbGVjdGVkICYmIGNoaWxkU3RhdGVzLmV2ZXJ5KChzdGF0ZSkgPT4gc3RhdGUgPT09ICdhbGxTZWxlY3RlZCcpKSB7XG4gICAgICAgICAgICBpdGVtU3RhdGUgPSAnYWxsU2VsZWN0ZWQnO1xuICAgICAgICB9IGVsc2UgaWYgKCFpc1NlbGVjdGVkICYmIGNoaWxkU3RhdGVzLmV2ZXJ5KChzdGF0ZSkgPT4gc3RhdGUgPT09ICdhbGxOb3RTZWxlY3RlZCcpKSB7XG4gICAgICAgICAgICBpdGVtU3RhdGUgPSAnYWxsTm90U2VsZWN0ZWQnO1xuICAgICAgICB9IGVsc2UgaWYgKHJlY3Vyc2l2ZSAmJiBjaGlsZFN0YXRlcy5ldmVyeSgoc3RhdGUpID0+IHN0YXRlID09PSAnYWxsU2VsZWN0ZWQnKSAmJiAhaXNTZWxlY3RlZCAmJiAhbm9BdXRvU2VsZWN0UGFyZW50KSB7XG4gICAgICAgICAgICBpdGVtU3RhdGUgPSAnYWxsU2VsZWN0ZWQnO1xuICAgICAgICB9IGVsc2UgaWYgKHJlY3Vyc2l2ZSAmJiBjaGlsZFN0YXRlcy5ldmVyeSgoc3RhdGUpID0+IHN0YXRlID09PSAnYWxsTm90U2VsZWN0ZWQnKSAmJiBpc1NlbGVjdGVkKSB7XG4gICAgICAgICAgICBpdGVtU3RhdGUgPSAnYWxsTm90U2VsZWN0ZWQnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpdGVtU3RhdGU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzeW5jU3RhdGVDaGFuZ2VzQXRQYXRoKG5vZGVQYXRoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHRyZWVJdGVtID0gdGhpcy5nZXRUcmVlSXRlbShub2RlUGF0aCk7XG4gICAgICAgIGNvbnN0IHJ1blRpbWVUcmVlSXRlbSA9IHRoaXMuZ2V0UnVuVGltZUJhY2t1cFRyZWVJdGVtKG5vZGVQYXRoKTtcbiAgICAgICAgY29uc3QgcnVuVGltZVNlbGVjdGlvblJlY3Vyc2l2ZUl0ZW0gPSB0aGlzLmdldFJ1blRpbWVTZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZShub2RlUGF0aCk7XG4gICAgICAgIGlmICh0cmVlSXRlbT8ubm9kZT8uc2VsZWN0YWJsZSAmJiB0cmVlSXRlbS5ub2RlPy5zZWxlY3RDb25maWc/LnJlY3Vyc2l2ZSkge1xuICAgICAgICAgICAgaWYgKCF0cmVlSXRlbS5ub2RlPy5zZWxlY3RDb25maWc/Lm5vQXV0b1NlbGVjdFBhcmVudCkge1xuICAgICAgICAgICAgICAgIHRyZWVJdGVtLm5vZGUgPSB7XG4gICAgICAgICAgICAgICAgICAgIC4uLnRyZWVJdGVtLm5vZGUsXG4gICAgICAgICAgICAgICAgICAgIGlzU2VsZWN0ZWQ6IHJ1blRpbWVTZWxlY3Rpb25SZWN1cnNpdmVJdGVtLnNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlID09PSAnYWxsU2VsZWN0ZWQnLFxuICAgICAgICAgICAgICAgICAgICBpc0luZGV0ZXJtaW5hdGU6IHJ1blRpbWVTZWxlY3Rpb25SZWN1cnNpdmVJdGVtLnNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlID09PSAnaW5kZXRlcm1pbmF0ZScsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdHJlZUl0ZW0ubm9kZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgLi4udHJlZUl0ZW0ubm9kZSxcbiAgICAgICAgICAgICAgICAgICAgaXNTZWxlY3RlZDogdHJlZUl0ZW0ubm9kZS5pc1NlbGVjdGVkICYmIHJ1blRpbWVTZWxlY3Rpb25SZWN1cnNpdmVJdGVtLnNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlID09PSAnYWxsU2VsZWN0ZWQnLFxuICAgICAgICAgICAgICAgICAgICBpc0luZGV0ZXJtaW5hdGU6XG4gICAgICAgICAgICAgICAgICAgICAgICBydW5UaW1lU2VsZWN0aW9uUmVjdXJzaXZlSXRlbS5zZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZSA9PT0gJ2luZGV0ZXJtaW5hdGUnIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAoIXRyZWVJdGVtLm5vZGUuaXNTZWxlY3RlZCAmJiBydW5UaW1lU2VsZWN0aW9uUmVjdXJzaXZlSXRlbS5zZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZSA9PT0gJ2FsbFNlbGVjdGVkJyksXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHRyZWVJdGVtLCB0cmVlSXRlbS5ub2RlLnRyZWVDb250ZW50QmxvY2subGFiZWwsICdpc1NlbGVjdGVkOicgKyB0cmVlSXRlbS5ub2RlLmlzU2VsZWN0ZWQsICdpc0luZGV0ZXJtaW5hdGU6JyArIHRyZWVJdGVtLm5vZGUuaXNJbmRldGVybWluYXRlKTtcbiAgICAgICAgICAgIGlmICh0cmVlSXRlbS5ub2RlLmlzU2VsZWN0ZWQgPT09IHRydWUgJiYgIXRoaXMuc2VsZWN0aW9uTW9kZWwuaXNTZWxlY3RlZChydW5UaW1lVHJlZUl0ZW0pKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RUcmVlSXRlbShydW5UaW1lVHJlZUl0ZW0pO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0cmVlSXRlbS5ub2RlLmlzU2VsZWN0ZWQgPT09IGZhbHNlICYmIHRoaXMuc2VsZWN0aW9uTW9kZWwuaXNTZWxlY3RlZChydW5UaW1lVHJlZUl0ZW0pKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXNlbGVjdFRyZWVJdGVtKHJ1blRpbWVUcmVlSXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNldFRyZWVEYXRhKHBhdGg6IHN0cmluZywgaXRlbTogVHJlZUl0ZW1Nb2RlbCk6IHZvaWQge1xuICAgICAgICBjb25zdCBpbmRleEFycjogQXJyYXk8bnVtYmVyPiA9IHRoaXMucmVzb2x2ZVBhdGgocGF0aCk7XG4gICAgICAgIGxldCBpdGVtQXJyID0gdGhpcy5wcm9jZXNzZWROb2RlcztcbiAgICAgICAgaW5kZXhBcnIuZm9yRWFjaCgocGF0aEluZGV4OiBudW1iZXIsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBpZiAoaW5kZXggPCBpbmRleEFyci5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgaXRlbUFyciA9IGl0ZW1BcnJbcGF0aEluZGV4XT8uY2hpbGRyZW47XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGl0ZW1BcnJbcGF0aEluZGV4XSA9IGl0ZW07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0VHJlZURhdGFSdW5UaW1lKHBhdGg6IHN0cmluZywgaXRlbTogVHJlZUl0ZW1SdW5UaW1lTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaW5kZXhBcnI6IEFycmF5PG51bWJlcj4gPSB0aGlzLnJlc29sdmVQYXRoKHBhdGgpO1xuICAgICAgICBsZXQgaXRlbUFyciA9IHRoaXMudHJlZURhdGFSdW5UaW1lO1xuICAgICAgICBpbmRleEFyci5mb3JFYWNoKChwYXRoSW5kZXg6IG51bWJlciwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGlmIChpbmRleCA8IGluZGV4QXJyLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICBpdGVtQXJyID0gaXRlbUFycltwYXRoSW5kZXhdPy5jaGlsZHJlbjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaXRlbUFycltwYXRoSW5kZXhdID0gaXRlbTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRSdW5UaW1lU2VsZWN0aW9uUmVjdXJzaXZlU3RhdGVUcmVlKHBhdGg6IHN0cmluZywgaXRlbTogVHJlZUl0ZW1TZWxlY3Rpb25SZWN1cnNpdmVNb2RlbCk6IHZvaWQge1xuICAgICAgICBjb25zdCBpbmRleEFycjogQXJyYXk8bnVtYmVyPiA9IHRoaXMucmVzb2x2ZVBhdGgocGF0aCk7XG4gICAgICAgIGxldCBpdGVtQXJyID0gdGhpcy5ydW5UaW1lU2VsZWN0aW9uUmVjdXJzaXZlU3RhdGU7XG4gICAgICAgIGluZGV4QXJyLmZvckVhY2goKHBhdGhJbmRleDogbnVtYmVyLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgaWYgKGluZGV4IDwgaW5kZXhBcnIubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgIGl0ZW1BcnIgPSBpdGVtQXJyW3BhdGhJbmRleF0/LmNoaWxkcmVuO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpdGVtQXJyW3BhdGhJbmRleF0gPSBpdGVtO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZVJ1blRpbWVTZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZShwYXRoOiBzdHJpbmcsIHNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlOiBTZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZSk6IHZvaWQge1xuICAgICAgICBjb25zdCBpbmRleEFycjogQXJyYXk8bnVtYmVyPiA9IHRoaXMucmVzb2x2ZVBhdGgocGF0aCk7XG4gICAgICAgIGxldCBpdGVtQXJyID0gdGhpcy5ydW5UaW1lU2VsZWN0aW9uUmVjdXJzaXZlU3RhdGU7XG4gICAgICAgIGluZGV4QXJyLmZvckVhY2goKHBhdGhJbmRleDogbnVtYmVyLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgaWYgKGluZGV4IDwgaW5kZXhBcnIubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgIGl0ZW1BcnIgPSBpdGVtQXJyW3BhdGhJbmRleF0/LmNoaWxkcmVuO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpdGVtQXJyW3BhdGhJbmRleF0gPSB7XG4gICAgICAgICAgICAgICAgICAgIC4uLml0ZW1BcnJbcGF0aEluZGV4XSxcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uUmVjdXJzaXZlU3RhdGUsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRJc0NoZWNrZWRGb3JBbGwobm9kZUFycjogQXJyYXk8VHJlZUl0ZW1SdW5UaW1lTW9kZWw+LCBpc0NoZWNrZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgbm9kZUFyci5mb3JFYWNoKChydW5UaW1lSXRlbTogVHJlZUl0ZW1SdW5UaW1lTW9kZWwsIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRyZWVJdGVtID0gdGhpcy5nZXRUcmVlSXRlbShydW5UaW1lSXRlbS5wYXRoKTtcbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSB0cmVlSXRlbS5ub2RlO1xuICAgICAgICAgICAgaWYgKG5vZGU/LnNlbGVjdGFibGUpIHtcbiAgICAgICAgICAgICAgICBub2RlLmlzU2VsZWN0ZWQgPSBpc0NoZWNrZWQ7XG4gICAgICAgICAgICAgICAgbm9kZS5pc0luZGV0ZXJtaW5hdGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBpZiAoaXNDaGVja2VkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0VHJlZUl0ZW0ocnVuVGltZUl0ZW0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGVzZWxlY3RUcmVlSXRlbShydW5UaW1lSXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJ1blRpbWVJdGVtPy5jaGlsZHJlbj8ubGVuZ3RoID4gMCAmJiBydW5UaW1lSXRlbT8uY2hpbGRyZW4gJiYgcnVuVGltZUl0ZW0/LmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldElzQ2hlY2tlZEZvckFsbChub2RlQXJyW2luZGV4XS5jaGlsZHJlbiwgaXNDaGVja2VkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBydW5TdGF0ZUNoYW5nZXNGb3JBbGwobm9kZUFycjogQXJyYXk8VHJlZUl0ZW1SdW5UaW1lTW9kZWw+KTogdm9pZCB7XG4gICAgICAgIG5vZGVBcnIuZm9yRWFjaCgocnVuVGltZUl0ZW06IFRyZWVJdGVtUnVuVGltZU1vZGVsLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICBpZiAocnVuVGltZUl0ZW0/LmNoaWxkcmVuPy5sZW5ndGggPiAwICYmIHJ1blRpbWVJdGVtPy5jaGlsZHJlbiAmJiBydW5UaW1lSXRlbT8uY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc3luY1NlbGVjdGlvbkF0UGF0aChydW5UaW1lSXRlbSk7XG4gICAgICAgICAgICAgICAgdGhpcy5ydW5TdGF0ZUNoYW5nZXNGb3JBbGwobm9kZUFycltpbmRleF0uY2hpbGRyZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN5bmNTZWxlY3Rpb25BdFBhdGgocnVuVGltZVRyZWVJdGVtOiBUcmVlSXRlbVJ1blRpbWVNb2RlbCk6IHZvaWQge1xuICAgICAgICAvLyBJdCBpcyBoZXJlIGZvciB0aGUgZmlsdGVyIGVkZ2UgY2FzZS5cbiAgICAgICAgdGhpcy5zeW5jU3RhdGVDaGFuZ2VzQXRQYXRoKHJ1blRpbWVUcmVlSXRlbS5wYXRoKTtcbiAgICAgICAgLy8gU2V0cyBpc1NlbGVjdGVkIGNoYW5nZSBvbiB0aGUgY29udHJvbC5cbiAgICAgICAgaWYgKHRoaXMuZ2V0VHJlZUl0ZW0ocnVuVGltZVRyZWVJdGVtLnBhdGgpLm5vZGUuaXNTZWxlY3RlZCkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RUcmVlSXRlbShydW5UaW1lVHJlZUl0ZW0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kZXNlbGVjdFRyZWVJdGVtKHJ1blRpbWVUcmVlSXRlbSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHJlc29sdmVQYXRoKHBhdGg6IHN0cmluZyk6IEFycmF5PG51bWJlcj4ge1xuICAgICAgICByZXR1cm4gcGF0aD8uc3BsaXQoJy4nKS5tYXAoKGluZGV4OiBzdHJpbmcpID0+IHBhcnNlSW50KGluZGV4LCAxMCkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0UGFyZW50UGF0aHMocGF0aDogc3RyaW5nKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgICAgIGNvbnN0IHBhdGhBcnIgPSBwYXRoLnNwbGl0KCcuJyk7XG4gICAgICAgIGNvbnN0IGhhc1BhcmVudCA9IHBhdGhBcnIubGVuZ3RoID4gMTtcbiAgICAgICAgLy8gU2V0cyB0aGUgaGFzUGFyZW50IElmIHRoZXJlIGlzIGEgcGFyZW50LCBhbmQgcmVtb3ZlcyB0aGUgbGFzdCBlbGVtZW50IGZvcm0gcGF0aEFyci5cbiAgICAgICAgaWYgKGhhc1BhcmVudCkge1xuICAgICAgICAgICAgcGF0aEFyci5wb3AoKTtcbiAgICAgICAgICAgIC8vIENhbGN1bGF0ZXMgcGFyZW50IHBhdGhcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudFBhdGggPSBwYXRoQXJyLmpvaW4oJy4nKTtcbiAgICAgICAgICAgIC8vIENyZWF0aW5nIG5vZGUgaW5kZXggc2VxdWVuY2UgZi5lIElmIHBhdGggaXMgJzEuMicgaXQgd2lsbCBiZSBbMSwyXVxuICAgICAgICAgICAgY29uc3Qgbm9kZUluZGV4U2VxID0gcGFyZW50UGF0aC5zcGxpdCgnLicpLm1hcCgoaW5kZXhTdHIpID0+IHBhcnNlSW50KGluZGV4U3RyLCAxMCkpO1xuICAgICAgICAgICAgLy8gQ2FsY3VsYXRpbmcgdGhlIG5vZGUgcGF0aHMgYXJyYXkgdG8gYmUgcmUtY2FsY3VsYXRlZCBmcm9tIGJvdHRvbSB0byB0b3BcbiAgICAgICAgICAgIGNvbnN0IG5vZGVQYXRoc1NlcSA9IFtdO1xuICAgICAgICAgICAgbm9kZUluZGV4U2VxLmZvckVhY2goKG5vZGVJbmRleCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBub2RlUGF0aHNTZXFbaW5kZXhdID0gbm9kZUluZGV4U2VxLnNsaWNlKDAsIGluZGV4ICsgMSkuam9pbignLicpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gbm9kZVBhdGhzU2VxLnJldmVyc2UoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgY2FsY3VsYXRlUnVuVGltZVN0YXRlKHRyZWVJdGVtOiBUcmVlSXRlbU1vZGVsLCBpbmRleDogbnVtYmVyLCBwYXJlbnRQYXRoPzogc3RyaW5nKTogVHJlZUl0ZW1SdW5UaW1lTW9kZWwge1xuICAgICAgICBjb25zdCBydW5UaW1lVHJlZUl0ZW06IFRyZWVJdGVtUnVuVGltZU1vZGVsID0ge1xuICAgICAgICAgICAgcGF0aDogcGFyZW50UGF0aCA/IHBhcmVudFBhdGggKyAnLicgKyBpbmRleCA6IGluZGV4LnRvU3RyaW5nKCksXG4gICAgICAgICAgICBpbmRleCxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHRyZWVJdGVtLmNoaWxkcmVuICYmIHRyZWVJdGVtLmNoaWxkcmVuLmxlbmd0aCA+PSAwKSB7XG4gICAgICAgICAgICBydW5UaW1lVHJlZUl0ZW0uY2hpbGRyZW4gPSBbXTtcbiAgICAgICAgICAgIHRyZWVJdGVtLmNoaWxkcmVuLmZvckVhY2goKGNoaWxkLCB0cmVlSXRlbUluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgcnVuVGltZVRyZWVJdGVtLmNoaWxkcmVuW3RyZWVJdGVtSW5kZXhdID0gdGhpcy5jYWxjdWxhdGVSdW5UaW1lU3RhdGUoY2hpbGQsIHRyZWVJdGVtSW5kZXgsIHJ1blRpbWVUcmVlSXRlbS5wYXRoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBydW5UaW1lVHJlZUl0ZW07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmaWx0ZXJUcmVlRGF0YShydW5UaW1lVHJlZURhdGE6IFRyZWVEYXRhUnVuVGltZU1vZGVsLCBrZXkgPSAnbGFiZWwnLCBmaWx0ZXJTdHI6IHN0cmluZyk6IFRyZWVEYXRhUnVuVGltZU1vZGVsIHtcbiAgICAgICAgcmV0dXJuIHJ1blRpbWVUcmVlRGF0YS5maWx0ZXIoKHJ1blRpbWVJdGVtKSA9PiB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgdGhpcy5ub3JtYWxpemVkU3RyKHRoaXMuZ2V0VHJlZUl0ZW0ocnVuVGltZUl0ZW0ucGF0aCkubm9kZS50cmVlQ29udGVudEJsb2NrLmxhYmVsKS5pbmNsdWRlcyh0aGlzLm5vcm1hbGl6ZWRTdHIoZmlsdGVyU3RyKSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChydW5UaW1lSXRlbT8uY2hpbGRyZW4/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBydW5UaW1lSXRlbS5jaGlsZHJlbiA9IHRoaXMuZmlsdGVyVHJlZURhdGEoc3RydWN0dXJlZENsb25lKHJ1blRpbWVJdGVtLmNoaWxkcmVuKSwga2V5LCBmaWx0ZXJTdHIpO1xuICAgICAgICAgICAgICAgIHJ1blRpbWVJdGVtLmNoaWxkcmVuID0gcnVuVGltZUl0ZW0uY2hpbGRyZW4ubGVuZ3RoID4gMCA/IHJ1blRpbWVJdGVtLmNoaWxkcmVuIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIHJldHVybiBydW5UaW1lSXRlbT8uY2hpbGRyZW4/Lmxlbmd0aCA+IDA7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBub3JtYWxpemVkU3RyKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHN0clxuICAgICAgICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgIC5ub3JtYWxpemUoJ05GRCcpXG4gICAgICAgICAgICAucmVwbGFjZSgvW1xcdTAzMDAtXFx1MDM2Zl0vZywgJycpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0SW5pdGlhbFNlbGVjdGlvbihub2RlczogVHJlZURhdGFSdW5UaW1lTW9kZWwpOiBBcnJheTxUcmVlSXRlbVJ1blRpbWVNb2RlbD4ge1xuICAgICAgICBjb25zdCBzZWxlY3Rpb246IEFycmF5PFRyZWVJdGVtUnVuVGltZU1vZGVsPiA9IFtdO1xuICAgICAgICB0aGlzLnNjYW5TZWxlY3Rpb24obm9kZXMsIHNlbGVjdGlvbik7XG4gICAgICAgIHJldHVybiBzZWxlY3Rpb247XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzY2FuU2VsZWN0aW9uKG5vZGVzOiBUcmVlRGF0YVJ1blRpbWVNb2RlbCwgc2VsZWN0aW9uOiBBcnJheTxUcmVlSXRlbVJ1blRpbWVNb2RlbD4pOiB2b2lkIHtcbiAgICAgICAgbm9kZXMuZm9yRWFjaCgoaXRlbTogVHJlZUl0ZW1SdW5UaW1lTW9kZWwpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmdldFRyZWVJdGVtKGl0ZW0ucGF0aCkubm9kZT8uc2VsZWN0YWJsZSAmJiB0aGlzLmdldFRyZWVJdGVtKGl0ZW0ucGF0aCkubm9kZS5pc1NlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uLnB1c2goaXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXRlbT8uY2hpbGRyZW4/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNjYW5TZWxlY3Rpb24oaXRlbS5jaGlsZHJlbiwgc2VsZWN0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW5kZXJJbml0aWFsRXhwYW5kKG5vZGVzOiBUcmVlRGF0YVJ1blRpbWVNb2RlbCk6IHZvaWQge1xuICAgICAgICBub2Rlcy5mb3JFYWNoKChpdGVtOiBUcmVlSXRlbVJ1blRpbWVNb2RlbCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuZ2V0VHJlZUl0ZW0oaXRlbS5wYXRoKS5ub2RlLmlzRXhwYW5kZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmV4cGFuZEF0KGl0ZW0ucGF0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXRlbT8uY2hpbGRyZW4/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlckluaXRpYWxFeHBhbmQoaXRlbS5jaGlsZHJlbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0UnVuVGltZVRyZWVJdGVtKHBhdGg6IHN0cmluZyk6IFRyZWVJdGVtUnVuVGltZU1vZGVsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmluZFJ1blRpbWVUcmVlSXRlbSh0aGlzLnRyZWVEYXRhUnVuVGltZSwgcGF0aCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmaW5kUnVuVGltZVRyZWVJdGVtKHRyZWVEYXRhUnVuVGltZTogVHJlZURhdGFSdW5UaW1lTW9kZWwsIHBhdGgpOiBUcmVlSXRlbVJ1blRpbWVNb2RlbCB7XG4gICAgICAgIGZvciAoY29uc3QgcnVuVGltZUl0ZW0gb2YgdHJlZURhdGFSdW5UaW1lKSB7XG4gICAgICAgICAgICBpZiAocnVuVGltZUl0ZW0ucGF0aCA9PT0gcGF0aCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBydW5UaW1lSXRlbTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocnVuVGltZUl0ZW0/LmNoaWxkcmVuPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZm91bmQgPSB0aGlzLmZpbmRSdW5UaW1lVHJlZUl0ZW0ocnVuVGltZUl0ZW0uY2hpbGRyZW4sIHBhdGgpO1xuICAgICAgICAgICAgICAgIGlmIChmb3VuZCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm91bmQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0UnVuVGltZUJhY2t1cFRyZWVJdGVtKHBhdGg6IHN0cmluZyk6IFRyZWVJdGVtUnVuVGltZU1vZGVsIHtcbiAgICAgICAgY29uc3QgaW5kZXhBcnI6IEFycmF5PG51bWJlcj4gPSB0aGlzLnJlc29sdmVQYXRoKHBhdGgpO1xuICAgICAgICBsZXQgbm9kZUFyciA9IHRoaXMudHJlZURhdGFSdW5UaW1lQmFja3VwO1xuICAgICAgICBsZXQgbm9kZTtcbiAgICAgICAgaWYgKG5vZGVBcnIgJiYgQXJyYXkuaXNBcnJheShub2RlQXJyKSkge1xuICAgICAgICAgICAgaW5kZXhBcnI/LmZvckVhY2goKHBhdGhJbmRleDogbnVtYmVyLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChpbmRleCA8IGluZGV4QXJyLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgbm9kZUFyciA9IG5vZGVBcnIgJiYgbm9kZUFycltwYXRoSW5kZXhdPy5jaGlsZHJlbjtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBub2RlID0gbm9kZUFycltwYXRoSW5kZXhdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBub2RlO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Q3NzQ2xhc3NlcygpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gWydldWktdHJlZScsIHRoaXMuaXNNdWx0aXNlbGVjdCA/ICdldWktdHJlZS0tbXVsdGlzZWxlY3QnIDogJycsIHRoaXMuX2lzTXVsdGlMZXZlbCA/ICdldWktdHJlZS0td2l0aC1jaGlsZHJlbicgOiAnJ11cbiAgICAgICAgICAgIC5qb2luKCcgJylcbiAgICAgICAgICAgIC50cmltKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjaGVja0lmTXVsdGlMZXZlbCh0cmVlOiBUcmVlRGF0YU1vZGVsKTogYm9vbGVhbiB7XG4gICAgICAgIGxldCBpc011bHRpTGV2ZWwgPSBmYWxzZTtcbiAgICAgICAgdHJlZS5mb3JFYWNoKChpdGVtOiBUcmVlSXRlbU1vZGVsKSA9PiB7XG4gICAgICAgICAgICBpZiAoaXRlbT8uY2hpbGRyZW4/Lmxlbmd0aCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgaXNNdWx0aUxldmVsID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBpc011bHRpTGV2ZWw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjaGVja0lmQ3VycmVudFNjcm9sbGFibGUoc2Nyb2xsZWQ6IENka1Njcm9sbGFibGUpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHNjcm9sbGVkLmdldEVsZW1lbnRSZWYoKS5uYXRpdmVFbGVtZW50ID09PSB0aGlzLmNka1Njcm9sbGFibGVSZWYuZ2V0RWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQ7XG4gICAgfVxufVxuXG5ATmdNb2R1bGUoe1xuICAgIGltcG9ydHM6IFtcbiAgICAgICAgQ29tbW9uTW9kdWxlLFxuICAgICAgICBSb3V0ZXJNb2R1bGUsXG4gICAgICAgIEZvcm1zTW9kdWxlLFxuICAgICAgICBUcmFuc2xhdGVNb2R1bGUsXG4gICAgICAgIEV1aUlucHV0Q2hlY2tib3hNb2R1bGUsXG4gICAgICAgIENka1RyZWVNb2R1bGUsXG4gICAgICAgIEV1aUJ1dHRvbk1vZHVsZSxcbiAgICAgICAgRXVpSWNvbk1vZHVsZSxcbiAgICAgICAgRXVpTGFiZWxNb2R1bGUsXG4gICAgICAgIEV1aUJhZGdlTW9kdWxlLFxuICAgICAgICBFdWlDaGlwTW9kdWxlLFxuICAgICAgICBFdWlEcm9wZG93bk1vZHVsZSxcbiAgICAgICAgU2Nyb2xsaW5nTW9kdWxlLFxuICAgIF0sXG4gICAgZGVjbGFyYXRpb25zOiBbRXVpVHJlZUNvbXBvbmVudF0sXG4gICAgZXhwb3J0czogW0V1aVRyZWVDb21wb25lbnRdLFxufSlcbmV4cG9ydCBjbGFzcyBFdWlUcmVlTW9kdWxlIHt9XG4iLCI8dWwgY2xhc3M9XCJldWktdHJlZV9fd3JhcHBlclwiIGNka1Njcm9sbGFibGUgI2Nka1Njcm9sbGFibGVSZWY+XG4gICAgPGNkay10cmVlXG4gICAgICAgICN0cmVlQ29tcG9uZW50SW5zdGFuY2VcbiAgICAgICAgW2RhdGFTb3VyY2VdPVwiY2RrQXJyYXlEYXRhU291cmNlXCJcbiAgICAgICAgW3RyZWVDb250cm9sXT1cImNka1RyZWVDb250cm9sXCJcbiAgICAgICAgW3RyYWNrQnldPVwidHJhY2tCeVwiXG4gICAgICAgICpuZ0lmPVwicmVuZGVyVHJlZVwiXG4gICAgICAgIGNsYXNzPVwiZXVpLWNkay10cmVlXCI+XG4gICAgICAgIDwhLS0gVGhlcmUgYXJlIHR3byBzdGF0ZXMgb2YgZ2VuZXJpYyBjZGstbmVzdGVkLXRyZWUtbm9kZSBkZWNsYXJhdGlvbnMuXG4gICAgICAgIEZpcnN0IG9uZSBpcyB3aXRob3V0IGNoaWxkLiBObyBzdWIgcmVuZGVyaW5nLlxuICAgICAgICAtLT5cbiAgICAgICAgPGNkay1uZXN0ZWQtdHJlZS1ub2RlICpjZGtUcmVlTm9kZURlZj1cImxldCB0cmVlUnVuVGltZUl0ZW1Nb2RlbFwiIGNsYXNzPVwiZXVpLWNkay1uZXN0ZWQtdHJlZS1ub2RlXCI+XG4gICAgICAgICAgICA8bGlcbiAgICAgICAgICAgICAgICBjbGFzcz1cImV1aS10cmVlLW5vZGVcIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwidHJlZVJ1blRpbWVJdGVtTW9kZWxcIlxuICAgICAgICAgICAgICAgIHRpdGxlPVwie3tcbiAgICAgICAgICAgICAgICAgICAgZ2V0VHJlZUl0ZW0odHJlZVJ1blRpbWVJdGVtTW9kZWw/LnBhdGgpPy5ub2RlPy50cmVlQ29udGVudEJsb2NrPy50b29sdGlwTGFiZWwgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldFRyZWVJdGVtKHRyZWVSdW5UaW1lSXRlbU1vZGVsPy5wYXRoKT8ubm9kZT8udHJlZUNvbnRlbnRCbG9jaz8ubGFiZWxcbiAgICAgICAgICAgICAgICB9fVwiPlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJldWktdHJlZS1ub2RlLXdyYXBwZXJcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25Ob2RlQ2xpY2sodHJlZVJ1blRpbWVJdGVtTW9kZWwpXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmV1aS10cmVlLW5vZGUtd3JhcHBlci0tbGFzdF09XCJ0cmVlUnVuVGltZUl0ZW1Nb2RlbC5sYXN0XCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmV1aS10cmVlLW5vZGUtd3JhcHBlci0tc2hvdy1saW5lc109XCJzaG93TGluZXMgJiYgX2lzTXVsdGlMZXZlbFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXVpLXRyZWUtbm9kZS13cmFwcGVyX19jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS1cbiAgICAgICAgICAgICAgICAgICAgICAgIFJlbmRlcnMgbm9kZSBpbiBkZWZhdWx0IG9yIHByb3ZpZGVkIHRlbXBsYXRlJ3MgY29udGV4dC5cbiAgICAgICAgICAgICAgICAgICAgICAgIEdlbmVyYXRlcyBvblNlbGVjdCB3aXRoIG9uU2VsZWN0Rm4gZm9yIGRldmVsb3BlcnMgdG8gc2VuZCB0aGUgZXZlbnRzIGZyb20gdGhlaXIgY3VzdG9tIGNoZWNrIGV2ZW50cy5cbiAgICAgICAgICAgICAgICAgICAgICAgIFByb3ZpZGVzIGlkIHRvIGJlIHVzZWQgb24gZ2VuZXJpYyB0ZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwibm9kZVRlbXBsYXRlUmVmIHx8IG5vZGVUZW1wbGF0ZURlZmF1bHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpbXBsaWNpdDogZ2V0VHJlZUl0ZW0odHJlZVJ1blRpbWVJdGVtTW9kZWw/LnBhdGgpPy5ub2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvblNlbGVjdDogb25TZWxlY3RGbih0cmVlUnVuVGltZUl0ZW1Nb2RlbC5wYXRoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IHVpZCArIHRyZWVSdW5UaW1lSXRlbU1vZGVsLnBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2xpPlxuICAgICAgICA8L2Nkay1uZXN0ZWQtdHJlZS1ub2RlPlxuICAgICAgICA8IS0tIFRoaXMgaXMgdGhlIHRyZWUgbm9kZSB0ZW1wbGF0ZSBmb3IgZXhwYW5kYWJsZSBub2RlcyAtLT5cbiAgICAgICAgPGNkay1uZXN0ZWQtdHJlZS1ub2RlXG4gICAgICAgICAgICAqY2RrVHJlZU5vZGVEZWY9XCJsZXQgdHJlZVJ1blRpbWVJdGVtTW9kZWw7IHdoZW46IGhhc0NoaWxkXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZXVpLWNkay1uZXN0ZWQtdHJlZS1ub2RlIGV1aS1jZGstbmVzdGVkLXRyZWUtbm9kZS0td2l0aC1jaGlsZFwiPlxuICAgICAgICAgICAgPGxpXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJldWktdHJlZS1ub2RlXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cInRyZWVSdW5UaW1lSXRlbU1vZGVsXCJcbiAgICAgICAgICAgICAgICB0aXRsZT1cInt7XG4gICAgICAgICAgICAgICAgICAgIGdldFRyZWVJdGVtKHRyZWVSdW5UaW1lSXRlbU1vZGVsPy5wYXRoKT8ubm9kZT8udHJlZUNvbnRlbnRCbG9jaz8udG9vbHRpcExhYmVsIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRUcmVlSXRlbSh0cmVlUnVuVGltZUl0ZW1Nb2RlbD8ucGF0aCk/Lm5vZGU/LnRyZWVDb250ZW50QmxvY2s/LmxhYmVsXG4gICAgICAgICAgICAgICAgfX1cIj5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZXVpLXRyZWUtbm9kZS13cmFwcGVyXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmV1aS10cmVlLW5vZGUtd3JhcHBlci0tbGFzdF09XCJ0cmVlUnVuVGltZUl0ZW1Nb2RlbC5sYXN0XCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmV1aS10cmVlLW5vZGUtd3JhcHBlci0tc2hvdy1saW5lc109XCJzaG93TGluZXNcIj5cbiAgICAgICAgICAgICAgICAgICAgPCEtLUhlcmUgd3JhcHMgdGhlIG5vZGUsIGFuZCBsaXN0ZW4gZm9yIG5vZGUgY2xpY2tzLi0tPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IChjbGljayk9XCJvbk5vZGVDbGljayh0cmVlUnVuVGltZUl0ZW1Nb2RlbClcIiBjbGFzcz1cImV1aS10cmVlLW5vZGUtd3JhcHBlcl9fY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEV4cGFuZC9jb2xsYXBzZSBhY3Rpb24gYnV0dG9uIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV1aUJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV1aUljb25CdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldWlCYXNpY0J1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV1aVJvdW5kZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldWlTaXplU1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ1RvZ2dsZSAnICsgZ2V0VHJlZUl0ZW0odHJlZVJ1blRpbWVJdGVtTW9kZWw/LnBhdGgpPy5ub2RlPy50cmVlQ29udGVudEJsb2NrPy5sYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uTm9kZVRvZ2dsZSh0cmVlUnVuVGltZUl0ZW1Nb2RlbClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNka1RyZWVOb2RlVG9nZ2xlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJldWktdHJlZS1ub2RlX19idXR0b25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldWlJY29uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWNka1RyZWVDb250cm9sLmlzRXhwYW5kZWQodHJlZVJ1blRpbWVJdGVtTW9kZWwpICYmIGNvbGxhcHNlZEljb25DbGFzc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpY29uQ2xhc3NdPVwiY29sbGFwc2VkSWNvbkNsYXNzXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV1aUljb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjZGtUcmVlQ29udHJvbC5pc0V4cGFuZGVkKHRyZWVSdW5UaW1lSXRlbU1vZGVsKSAmJiBleHBhbmRlZEljb25DbGFzc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpY29uQ2xhc3NdPVwiZXhwYW5kZWRJY29uQ2xhc3NcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGV1aS1pY29uLXN2Z1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFjZGtUcmVlQ29udHJvbC5pc0V4cGFuZGVkKHRyZWVSdW5UaW1lSXRlbU1vZGVsKSAmJiAhY29sbGFwc2VkSWNvbkNsYXNzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ljb25dPVwiZXhwYW5kZWRTdmdJY29uQ2xhc3NcIj48L2V1aS1pY29uLXN2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXVpLWljb24tc3ZnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY2RrVHJlZUNvbnRyb2wuaXNFeHBhbmRlZCh0cmVlUnVuVGltZUl0ZW1Nb2RlbCkgJiYgIWV4cGFuZGVkSWNvbkNsYXNzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ljb25dPVwiY29sbGFwc2VkU3ZnSWNvbkNsYXNzXCI+PC9ldWktaWNvbi1zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS1cbiAgICAgICAgICAgICAgICAgICAgICAgIFJlbmRlcnMgbm9kZSBpbiBkZWZhdWx0IG9yIHByb3ZpZGVkIHRlbXBsYXRlJ3MgY29udGV4dC5cbiAgICAgICAgICAgICAgICAgICAgICAgIEdlbmVyYXRlcyBvblNlbGVjdCB3aXRoIG9uU2VsZWN0Rm4gZm9yIGRldmVsb3BlcnMgdG8gc2VuZCB0aGUgZXZlbnRzIGZyb20gdGhlaXIgY3VzdG9tIGNoZWNrIGV2ZW50cy5cbiAgICAgICAgICAgICAgICAgICAgICAgIFByb3ZpZGVzIGlkIHRvIGJlIHVzZWQgb24gZ2VuZXJpYyB0ZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwibm9kZVRlbXBsYXRlUmVmIHx8IG5vZGVUZW1wbGF0ZURlZmF1bHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpbXBsaWNpdDogZ2V0VHJlZUl0ZW0odHJlZVJ1blRpbWVJdGVtTW9kZWwucGF0aCk/Lm5vZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uU2VsZWN0OiBvblNlbGVjdEZuKHRyZWVSdW5UaW1lSXRlbU1vZGVsLnBhdGgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogdWlkICsgdHJlZVJ1blRpbWVJdGVtTW9kZWwucGF0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aDogdHJlZVJ1blRpbWVJdGVtTW9kZWwucGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8IS0tdXNlcyBjZGtUcmVlTm9kZU91dGxldCB0byByZW5kZXIgY2hpbGRyZW4gbm9kZXMsIENka1RyZWVDb250cm9sIGlzIHVzZWQgdG8gY29udHJvbCBpc0V4cGFuZGVkIHN0YXRlLi0tPlxuICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cImV1aS10cmVlLW5vZGVcIiAqbmdJZj1cImNka1RyZWVDb250cm9sLmlzRXhwYW5kZWQodHJlZVJ1blRpbWVJdGVtTW9kZWwpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgY2RrVHJlZU5vZGVPdXRsZXQ+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgIDwvbGk+XG4gICAgICAgIDwvY2RrLW5lc3RlZC10cmVlLW5vZGU+XG4gICAgPC9jZGstdHJlZT5cbjwvdWw+XG5cbjxuZy10ZW1wbGF0ZSAjbm9kZVRlbXBsYXRlRGVmYXVsdCBsZXQtbm9kZSBsZXQtb25TZWxlY3Q9XCJvblNlbGVjdFwiIGxldC1pZD1cImlkXCIgbGV0LXBhdGg9XCJwYXRoXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm5vZGVcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImV1aS10cmVlLW5vZGUtd3JhcHBlcl9fY29udGFpbmVyLWxlZnRcIiBbY2xhc3MuZXVpLXRyZWUtbm9kZS13cmFwcGVyX19jb250YWluZXItbGVmdC0tc2VsZWN0ZWRdPVwibm9kZT8uaXNTZWxlY3RlZFwiPlxuICAgICAgICAgICAgPCEtLWlucHV0IGNoZWNrYm94IGFyZWEtLT5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIGV1aUlucHV0Q2hlY2tCb3hcbiAgICAgICAgICAgICAgICAqbmdJZj1cIm5vZGUgJiYgbm9kZS5zZWxlY3RhYmxlXCJcbiAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgIGlkPVwie3sgaWQgfX1cIlxuICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cIiEhbm9kZT8uaXNTZWxlY3RlZFwiXG4gICAgICAgICAgICAgICAgW2luZGV0ZXJtaW5hdGVdPVwiISFub2RlPy5pc0luZGV0ZXJtaW5hdGVcIlxuICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25TZWxlY3QoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJldWktdS1tci1tXCIgLz5cblxuICAgICAgICAgICAgPCEtLWljb24gYXJlYS0tPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm5vZGU/LnRyZWVDb250ZW50QmxvY2s/Lmljb25DbGFzc1wiPlxuICAgICAgICAgICAgICAgIDxldWktaWNvblxuICAgICAgICAgICAgICAgICAgICBbZXVpVmFyaWFudF09XCJub2RlPy50cmVlQ29udGVudEJsb2NrPy5pY29uVHlwZUNsYXNzIHx8ICdwcmltYXJ5J1wiXG4gICAgICAgICAgICAgICAgICAgIGljb25DbGFzcz1cInt7IG5vZGU/LnRyZWVDb250ZW50QmxvY2s/Lmljb25DbGFzcyB9fVwiXG4gICAgICAgICAgICAgICAgICAgIGV1aVNpemVTXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZXVpLXUtbXIteHNcIj5cbiAgICAgICAgICAgICAgICA8L2V1aS1pY29uPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibm9kZT8udHJlZUNvbnRlbnRCbG9jaz8uaWNvblN2Z05hbWVcIj5cbiAgICAgICAgICAgICAgICA8ZXVpLWljb24tc3ZnXG4gICAgICAgICAgICAgICAgICAgIGljb249XCJ7eyBub2RlPy50cmVlQ29udGVudEJsb2NrPy5pY29uU3ZnTmFtZSB9fVwiXG4gICAgICAgICAgICAgICAgICAgIGZpbGxDb2xvcj1cInt7IG5vZGU/LnRyZWVDb250ZW50QmxvY2s/Lmljb25UeXBlQ2xhc3MgfHwgJ2dyZXktMTAwJyB9fVwiXG4gICAgICAgICAgICAgICAgICAgIHNpemU9XCJzXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJldWktdS1tci14c1wiPlxuICAgICAgICAgICAgICAgIDwvZXVpLWljb24tc3ZnPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgIDwhLS1jaGlwcyBhcmVhLS0+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibm9kZT8udHJlZUNvbnRlbnRCbG9jaz8uY2hpcHNcIj5cbiAgICAgICAgICAgICAgICA8ZXVpLWNoaXBcbiAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNoaXAgb2Ygbm9kZS50cmVlQ29udGVudEJsb2NrLmNoaXBzXCJcbiAgICAgICAgICAgICAgICAgICAgZXVpU2l6ZVhTXG4gICAgICAgICAgICAgICAgICAgIFtldWlWYXJpYW50XT1cImNoaXAudHlwZUNsYXNzIHx8ICdzZWNvbmRhcnknXCJcbiAgICAgICAgICAgICAgICAgICAgW2V1aU91dGxpbmVdPVwiY2hpcC5pc091dGxpbmVcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImV1aS1jaGlwLS1yb3VuZGVkIGV1aS11LW1iLW5vbmUgZXVpLXUtbXIteHNcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gZXVpTGFiZWw+e3sgY2hpcC5sYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2V1aS1jaGlwPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgIDwhLS1iYWRnZSAodHlwZUxhYmVsICYgdHlwZUNsYXNzKSBhcmVhLS0+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibm9kZT8udHJlZUNvbnRlbnRCbG9jaz8udHlwZUxhYmVsXCIgW25nU3dpdGNoXT1cIm5vZGU/LnRyZWVDb250ZW50QmxvY2s/LnR5cGVDbGFzc1wiPlxuICAgICAgICAgICAgICAgIDxldWktYmFkZ2UgZXVpU2l6ZU0gW2V1aVZhcmlhbnRdPVwibm9kZT8udHJlZUNvbnRlbnRCbG9jaz8udHlwZUNsYXNzIHx8ICdwcmltYXJ5J1wiIGNsYXNzPVwiZXVpLXUtZmxleC1uby1zaHJpbmsgZXVpLXUtbXIteHNcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgbm9kZT8udHJlZUNvbnRlbnRCbG9jaz8udHlwZUxhYmVsIH19XG4gICAgICAgICAgICAgICAgPC9ldWktYmFkZ2U+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLWxhYmVsIGFyZWEtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cImV1aS10cmVlLW5vZGUtd3JhcHBlcl9fY29udGFpbmVyLW1pZGRsZVwiPlxuICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgICAgKm5nSWY9XCIhbm9kZT8udHJlZUNvbnRlbnRCbG9jaz8udXJsICYmICFub2RlPy50cmVlQ29udGVudEJsb2NrPy51cmxFeHRlcm5hbFwiXG4gICAgICAgICAgICAgICAgZXVpTGFiZWxcbiAgICAgICAgICAgICAgICBmb3I9XCJ7eyBpZCB9fVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJldWktdS10ZXh0LXRydW5jYXRlIGV1aS11LXAtMnhzXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuZXVpLWxhYmVsLS1zZWxlY3RlZF09XCJcbiAgICAgICAgICAgICAgICAgICAgaGlnaGxpZ2h0UGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgPyBnZXRSdW5UaW1lU2VsZWN0aW9uUmVjdXJzaXZlU3RhdGUocGF0aCk/LnNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlID09PSAnaW5kZXRlcm1pbmF0ZScgfHwgbm9kZT8uaXNTZWxlY3RlZFxuICAgICAgICAgICAgICAgICAgICAgICAgOiBub2RlPy5pc1NlbGVjdGVkXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuZXVpLXUtY3Vyc29yLXBvaW50ZXJdPVwibm9kZT8uc2VsZWN0YWJsZVwiPlxuICAgICAgICAgICAgICAgIHt7IGF1dG9UcmFuc2xhdGUgPyAobm9kZT8udHJlZUNvbnRlbnRCbG9jaz8ubGFiZWwgfCB0cmFuc2xhdGUpIDogbm9kZT8udHJlZUNvbnRlbnRCbG9jaz8ubGFiZWwgfX1cbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICA8bGFiZWwgKm5nSWY9XCJub2RlPy50cmVlQ29udGVudEJsb2NrPy51cmxcIiBldWlMYWJlbCBmb3I9XCJ7eyBpZCB9fVwiIGNsYXNzPVwiZXVpLXUtdGV4dC10cnVuY2F0ZSBldWktdS1wLTJ4c1wiPlxuICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZXVpLXUtdGV4dC1saW5rXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmV1aS11LXRleHQtbGluay1zdGFuZGFsb25lXT1cIiFzaG93VW5kZXJsaW5lZExpbmtzXCJcbiAgICAgICAgICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwibm9kZT8udHJlZUNvbnRlbnRCbG9jaz8udXJsXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IGF1dG9UcmFuc2xhdGUgPyAobm9kZT8udHJlZUNvbnRlbnRCbG9jaz8ubGFiZWwgfCB0cmFuc2xhdGUpIDogbm9kZT8udHJlZUNvbnRlbnRCbG9jaz8ubGFiZWwgfX1cbiAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgPGxhYmVsICpuZ0lmPVwibm9kZT8udHJlZUNvbnRlbnRCbG9jaz8udXJsRXh0ZXJuYWxcIiBldWlMYWJlbCBmb3I9XCJ7eyBpZCB9fVwiIGNsYXNzPVwiZXVpLXUtdGV4dC10cnVuY2F0ZSBldWktdS1wLTJ4c1wiPlxuICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZXVpLXUtdGV4dC1saW5rLWV4dGVybmFsXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmV1aS11LXRleHQtbGluay1leHRlcm5hbC1zdGFuZGFsb25lXT1cIiFzaG93VW5kZXJsaW5lZExpbmtzXCJcbiAgICAgICAgICAgICAgICAgICAgaHJlZj1cInt7IG5vZGU/LnRyZWVDb250ZW50QmxvY2s/LnVybEV4dGVybmFsIH19XCJcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0PVwie3sgbm9kZT8udHJlZUNvbnRlbnRCbG9jaz8udXJsRXh0ZXJuYWxUYXJnZXQgfHwgJ2JsYW5rJyB9fVwiPlxuICAgICAgICAgICAgICAgICAgICB7eyBhdXRvVHJhbnNsYXRlID8gKG5vZGU/LnRyZWVDb250ZW50QmxvY2s/LmxhYmVsIHwgdHJhbnNsYXRlKSA6IG5vZGU/LnRyZWVDb250ZW50QmxvY2s/LmxhYmVsIH19XG4gICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiAqbmdJZj1cIm5vZGU/LnRyZWVDb250ZW50QmxvY2s/LnJpZ2h0Q29udGVudFwiIGNsYXNzPVwiZXVpLXRyZWUtbm9kZS13cmFwcGVyX19jb250YWluZXItcmlnaHRcIj5cbiAgICAgICAgICAgIDwhLS1iYWRnZXMgYXJlYS0tPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYmFkZ2Ugb2Ygbm9kZS50cmVlQ29udGVudEJsb2NrLnJpZ2h0Q29udGVudD8uYmFkZ2VzXCI+XG4gICAgICAgICAgICAgICAgPGV1aS1iYWRnZSBldWlTaXplTSBldWlPdXRsaW5lIFtldWlWYXJpYW50XT1cImJhZGdlLnR5cGVDbGFzcyB8fCAnc2Vjb25kYXJ5J1wiIGNsYXNzPVwiZXVpLXUtbWwteHNcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gZXVpTGFiZWw+e3sgYmFkZ2UubGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9ldWktYmFkZ2U+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgPCEtLWNoaXBzIGFyZWEtLT5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNoaXAgb2Ygbm9kZS50cmVlQ29udGVudEJsb2NrLnJpZ2h0Q29udGVudD8uY2hpcHNcIj5cbiAgICAgICAgICAgICAgICA8ZXVpLWNoaXBcbiAgICAgICAgICAgICAgICAgICAgZXVpU2l6ZVhTXG4gICAgICAgICAgICAgICAgICAgIFtldWlWYXJpYW50XT1cImNoaXAudHlwZUNsYXNzIHx8ICdzZWNvbmRhcnknXCJcbiAgICAgICAgICAgICAgICAgICAgW2V1aU91dGxpbmVdPVwiY2hpcC5pc091dGxpbmVcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImV1aS1jaGlwLS1yb3VuZGVkIGV1aS11LW1iLW5vbmUgZXVpLXUtbWwteHNcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gZXVpTGFiZWw+e3sgY2hpcC5sYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2V1aS1jaGlwPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgIDwhLS1Db250ZXh0IG1lbnUtLT5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJub2RlLnRyZWVDb250ZW50QmxvY2sucmlnaHRDb250ZW50Py5jb250ZXh0TWVudU1ldGFEYXRhICYmIHJpZ2h0Q29udGV4dE1lbnVUZW1wbGF0ZVJlZlwiPlxuICAgICAgICAgICAgICAgIDxldWktZHJvcGRvd24gY2xhc3M9XCJldWktdS1tbC14c1wiPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGV1aUJ1dHRvbiBldWlTaXplUyBldWlSb3VuZGVkIGV1aUljb25CdXR0b24gZXVpQmFzaWNCdXR0b24gZXVpU2Vjb25kYXJ5IFthdHRyLmFyaWEtbGFiZWxdPVwiJ09wdGlvbnMgbWVudSdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxldWktaWNvbi1zdmcgaWNvbj1cImV1aS1lbGxpcHNpcy12ZXJ0aWNhbFwiPjwvZXVpLWljb24tc3ZnPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPGV1aS1kcm9wZG93bi1jb250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwicmlnaHRDb250ZXh0TWVudVRlbXBsYXRlUmVmXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaW1wbGljaXQ6IG5vZGU/LnRyZWVDb250ZW50QmxvY2s/LnJpZ2h0Q29udGVudD8uY29udGV4dE1lbnVNZXRhRGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGE6IG5vZGU/LnRyZWVDb250ZW50QmxvY2s/LnJpZ2h0Q29udGVudD8uY29udGV4dE1lbnVNZXRhRGF0YVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDwvZXVpLWRyb3Bkb3duLWNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgPC9ldWktZHJvcGRvd24+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLW1ldGFkYXRhLCB1c2VzIHRoZSBoZWxwIG9mIG5nIHRlbXBsYXRlIHRvIGdlbmVyYXRlIGR5bmFtaWMgZXhwYW5kIHZhcmlhYmxlIHdpdGhvdXQgaGFuZGxpbmcgc3RhdGUgLS0+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ0lmPVwibm9kZS50cmVlQ29udGVudEJsb2NrPy5tZXRhZGF0YSAmJiBub2RlQ29udGVudE1ldGFkYXRhVGVtcGxhdGVSZWZcIlxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwibm9kZUNvbnRlbnRNZXRhZGF0YUNvbnRhaW5lclwiXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie1xuICAgICAgICAgICAgICAgICRpbXBsaWNpdDogeyBleHBhbmRlZDogZmFsc2UgfVxuICAgICAgICAgICAgfVwiPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNub2RlQ29udGVudE1ldGFkYXRhQ29udGFpbmVyIGxldC1tZXRhRGF0YUNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBldWlCdXR0b25cbiAgICAgICAgICAgICAgICBldWlCYXNpY0J1dHRvblxuICAgICAgICAgICAgICAgIGV1aUljb25CdXR0b25cbiAgICAgICAgICAgICAgICBldWlSb3VuZGVkXG4gICAgICAgICAgICAgICAgZXVpU2l6ZVNcbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiZXhwYW5kIGNvbGxhcHNlIHRyZWUgaXRlbVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm1ldGFEYXRhQ29udGFpbmVyLmV4cGFuZGVkID0gIW1ldGFEYXRhQ29udGFpbmVyLmV4cGFuZGVkXCI+XG4gICAgICAgICAgICAgICAgPGV1aS1pY29uLXN2ZyBbaWNvbl09XCJtZXRhRGF0YUNvbnRhaW5lci5leHBhbmRlZCA/ICdldWktY2hldnJvbi1kb3duJyA6ICdldWktY2hldnJvbi1mb3J3YXJkJ1wiPjwvZXVpLWljb24tc3ZnPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwibWV0YURhdGFDb250YWluZXIuZXhwYW5kZWRcIiBjbGFzcz1cImV1aS10cmVlLW5vZGVfX21ldGFjb250ZW50XCI+XG4gICAgICAgICAgICAgICAgPCEtLXBhc3NpbmcgbWV0YWRhdGEgb2YgdGhlIG5vZGUgY29udGVudCB0byBwcm92aWRlZCB0ZW1wbGF0ZS1yZWY6bm9kZUNvbnRlbnRNZXRhZGF0YVRlbXBsYXRlUmVmLS0+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm5vZGVDb250ZW50TWV0YWRhdGFUZW1wbGF0ZVJlZlwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICAkaW1wbGljaXQ6IG5vZGU/LnRyZWVDb250ZW50QmxvY2s/Lm1ldGFkYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGE6IG5vZGU/LnRyZWVDb250ZW50QmxvY2s/Lm1ldGFkYXRhXG4gICAgICAgICAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuIl19
|