@skyux/lists 10.0.0-alpha.2 → 10.0.0-alpha.3

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.
@@ -493,11 +493,11 @@ export class SkyRepeaterItemComponent {
493
493
  });
494
494
  }
495
495
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.1", ngImport: i0, type: SkyRepeaterItemComponent, deps: [{ token: i1.SkyRepeaterService }, { token: i0.ChangeDetectorRef }, { token: i2.SkyRepeaterAdapterService }, { token: i0.ElementRef }, { token: i3.SkyLibResourcesService }], target: i0.ɵɵFactoryTarget.Component }); }
496
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.1", type: SkyRepeaterItemComponent, selector: "sky-repeater-item", inputs: { disabled: "disabled", itemName: "itemName", inlineFormConfig: "inlineFormConfig", inlineFormTemplate: "inlineFormTemplate", isExpanded: "isExpanded", isSelected: "isSelected", reorderable: "reorderable", selectable: "selectable", showInlineForm: "showInlineForm", tag: "tag" }, outputs: { collapse: "collapse", expand: "expand", inlineFormClose: "inlineFormClose", isSelectedChange: "isSelectedChange" }, host: { listeners: { "keydown": "onKeydown($event)" }, properties: { "class": "this.repeaterGroupClass" } }, providers: [SkyContentInfoProvider], queries: [{ propertyName: "contextMenu", first: true, predicate: SkyRepeaterItemContextMenuComponent, descendants: true, read: ElementRef }, { propertyName: "titleComponent", first: true, predicate: SkyRepeaterItemTitleComponent, descendants: true, read: ElementRef }, { propertyName: "repeaterItemContentComponents", predicate: SkyRepeaterItemContentComponent }], viewQueries: [{ propertyName: "grabHandle", first: true, predicate: ["grabHandle"], descendants: true, read: ElementRef }, { propertyName: "itemContentRef", first: true, predicate: ["itemContentRef"], descendants: true, read: ElementRef }, { propertyName: "itemHeaderRef", first: true, predicate: ["itemHeaderRef"], descendants: true, read: ElementRef }, { propertyName: "itemRef", first: true, predicate: ["itemRef"], descendants: true, read: ElementRef }], ngImport: i0, template: "<div\n class=\"sky-repeater-item sky-padding-even-default\"\n [attr.aria-label]=\"itemName\"\n [attr.aria-labelledby]=\"itemName || titleId\"\n [attr.aria-selected]=\"selectable ? !!isSelected : undefined\"\n [attr.role]=\"(itemRole$ | async)?.item\"\n [attr.tabIndex]=\"tabindex\"\n [ngClass]=\"{\n 'sky-repeater-item-active': isActive,\n 'sky-repeater-item-collapsible': isCollapsible,\n 'sky-repeater-item-selected': isSelected\n }\"\n (click)=\"onRepeaterItemClick($event)\"\n #itemRef\n>\n <div #inlineDelete>\n <ng-content select=\"sky-inline-delete\" />\n </div>\n\n <ng-container *ngIf=\"inlineFormTemplate\">\n <sky-inline-form\n [config]=\"inlineFormConfig\"\n [showForm]=\"showInlineForm\"\n [template]=\"inlineFormTemplate\"\n (close)=\"onInlineFormClose($event)\"\n >\n <ng-container *ngTemplateOutlet=\"skyRepeaterItemLeft\"></ng-container>\n <ng-container *ngTemplateOutlet=\"skyRepeaterItemRight\"></ng-container>\n </sky-inline-form>\n </ng-container>\n\n <ng-container *ngIf=\"!inlineFormTemplate\">\n <ng-container *ngTemplateOutlet=\"skyRepeaterItemLeft\"></ng-container>\n <ng-container *ngTemplateOutlet=\"skyRepeaterItemRight\"></ng-container>\n </ng-container>\n</div>\n\n<ng-template #skyRepeaterItemLeft>\n <div\n [attr.role]=\"!showInlineForm ? (itemRole$ | async)?.content : undefined\"\n class=\"sky-repeater-item-left\"\n >\n <ng-container *ngIf=\"reorderable\">\n <span\n aria-live=\"assertive\"\n class=\"sky-screen-reader-only\"\n [id]=\"contentId + '-reorder-state'\"\n >\n {{ reorderState }}\n </span>\n <span\n class=\"sky-screen-reader-only\"\n [id]=\"contentId + '-reorder-instructions'\"\n >{{ reorderButtonLabel }}</span\n >\n <button\n class=\"sky-btn sky-tile-tools-control sky-repeater-item-grab-handle\"\n type=\"button\"\n [attr.aria-describedby]=\"contentId + '-reorder-instructions'\"\n [attr.aria-label]=\"\n itemName\n ? ('skyux_repeater_item_reorder_label' | skyLibResources : itemName)\n : ('skyux_repeater_item_reorder_label_default' | skyLibResources)\n \"\n (blur)=\"onReorderHandleBlur($event)\"\n (keydown)=\"onReorderHandleKeyDown($event)\"\n #grabHandle\n >\n <sky-icon icon=\"arrows-v\" />\n </button>\n </ng-container>\n <sky-checkbox\n *ngIf=\"selectable\"\n class=\"sky-repeater-item-checkbox\"\n [checked]=\"isSelected\"\n [label]=\"\n itemName\n ? ('skyux_repeater_item_checkbox_label' | skyLibResources : itemName)\n : ('skyux_repeater_item_checkbox_label_default' | skyLibResources)\n \"\n (change)=\"onCheckboxChange($event)\"\n >\n </sky-checkbox>\n <div\n class=\"sky-repeater-item-context-menu\"\n [hidden]=\"contextMenuEl.children.length === 0\"\n #contextMenuEl\n >\n <ng-content select=\"sky-repeater-item-context-menu\" />\n </div>\n </div>\n</ng-template>\n\n<ng-template #skyRepeaterItemRight>\n <div class=\"sky-repeater-item-right\" #itemHeaderRef>\n <div\n class=\"sky-repeater-item-header\"\n [attr.role]=\"(itemRole$ | async)?.title\"\n [hidden]=\"titleRef.children.length === 0\"\n (click)=\"headerClick()\"\n >\n <div\n class=\"sky-repeater-item-title sky-font-emphasized\"\n [attr.id]=\"titleId\"\n #titleRef\n >\n <ng-content select=\"sky-repeater-item-title\" />\n </div>\n <button\n *ngIf=\"reorderable\"\n class=\"sky-btn sky-btn-link sky-repeater-item-reorder-top\"\n type=\"button\"\n [attr.aria-label]=\"\n itemName\n ? ('skyux_repeater_item_reorder_top_label'\n | skyLibResources : itemName)\n : ('skyux_repeater_item_reorder_top_label_default'\n | skyLibResources)\n \"\n (click)=\"moveToTop($event)\"\n >\n <sky-icon icon=\"arrow-circle-up\" />\n {{ 'skyux_repeater_item_reorder_top' | skyLibResources }}\n </button>\n <div *ngIf=\"isCollapsible\" class=\"sky-repeater-item-chevron\">\n <sky-chevron\n [ariaControls]=\"contentId\"\n [ariaLabel]=\"\n itemName\n ? isExpanded\n ? ('skyux_repeater_item_expand' | skyLibResources : itemName)\n : ('skyux_repeater_item_collapse' | skyLibResources : itemName)\n : isExpanded\n ? ('skyux_repeater_item_expand_default' | skyLibResources)\n : ('skyux_repeater_item_collapse_default' | skyLibResources)\n \"\n [direction]=\"isExpanded ? 'up' : 'down'\"\n (directionChange)=\"chevronDirectionChange($event)\"\n >\n </sky-chevron>\n </div>\n <!-- Used for when the chevron is hidden to ensure that the right side is the same height as the left.-->\n <div\n *ngIf=\"!isCollapsible && !contextMenu\"\n class=\"sky-repeater-item-chevron-placeholder\"\n ></div>\n <!-- Used to ensure that the right side is the same height as the left.-->\n <div\n *ngIf=\"contextMenu\"\n class=\"sky-repeater-item-chevron-placeholder-with-context\"\n ></div>\n </div>\n <div\n class=\"sky-repeater-item-content\"\n [id]=\"contentId\"\n [@.disabled]=\"animationDisabled\"\n [@skyAnimationSlide]=\"slideDirection\"\n #itemContentRef\n [attr.role]=\"(itemRole$ | async)?.content\"\n >\n <ng-content select=\"sky-repeater-item-content\" />\n </div>\n </div>\n</ng-template>\n", styles: ["sky-repeater-item .sky-repeater-item{display:flex;border-bottom:1px dotted #cdcfd2;padding-top:0;position:relative;transition:box-shadow .15s;align-items:flex-start}sky-repeater-item .sky-repeater-item sky-inline-form{display:block;width:100%}sky-repeater-item .sky-repeater-item sky-inline-form>:first-child,sky-repeater-item .sky-repeater-item sky-inline-form .sky-slide-dissolve-first,sky-repeater-item .sky-repeater-item sky-inline-form .sky-slide-dissolve-last{display:flex;align-items:flex-start;flex:1 0 auto;width:100%}sky-repeater-item .sky-repeater-item sky-inline-form .sky-slide-dissolve-last{padding-top:10px}sky-repeater-item .sky-repeater-item.sky-repeater-item-active{background-color:#eeeeef;color:#212327;padding-left:6px;border-left:4px solid #00b4f1}sky-repeater-item .sky-repeater-item.sky-repeater-item-active .sky-inline-delete{margin-left:-4px;width:calc(100% + 4px)}sky-repeater-item .sky-repeater-item-left{display:flex;padding-top:10px;align-items:center}sky-repeater-item .sky-repeater-item-left sky-checkbox{display:flex}sky-repeater-item .sky-repeater-item-right{max-width:100%;flex-grow:1;align-self:center}sky-repeater-item .sky-repeater-item-header{align-items:center;display:flex;padding-top:10px}sky-repeater-item .sky-repeater-item-chevron{margin-left:10px}sky-repeater-item .sky-repeater-item-chevron-placeholder{height:24px}sky-repeater-item .sky-repeater-item-chevron-placeholder-with-context{height:29px}sky-repeater-item .sky-repeater-item-context-menu{padding:0 10px 0 0}sky-repeater-item .sky-repeater-item-checkbox{padding:0 5px 0 0}sky-repeater-item .sky-repeater-item-selected{background-color:#f1eef6;transition:background-color .15s}sky-repeater-item .sky-repeater-item-title{margin:0;flex-grow:1;line-height:1.1;color:#212327}sky-repeater-item sky-repeater-item-content{display:block;margin:10px 0 0}sky-repeater-item .sky-repeater-item-collapsible .sky-repeater-item-header{cursor:pointer}sky-repeater-item .sky-repeater-item-collapsible .sky-repeater-item-content{padding-right:34px}sky-repeater-item .sky-repeater-item-collapsed .sky-repeater-item-content{display:none}sky-repeater-item .sky-repeater-item-grab-handle{color:#cdcfd2;cursor:pointer;border:0;width:24px;height:24px;cursor:grab;cursor:-webkit-grab;cursor:-moz-grab;padding:0;margin:5px 10px 5px 0}sky-repeater-item .sky-repeater-item-grab-handle:hover{color:#979ba2;transition:color .15s}sky-repeater-item.sky-repeater-item-dragging.gu-mirror{opacity:initial;-ms-filter:initial;filter:initial;background-color:#fff;box-shadow:0 0 5px #0000004d}sky-repeater-item.sky-repeater-item-dragging.gu-transit .sky-repeater-item{background-color:#d8d8d8}sky-repeater-item.sky-repeater-item-dragging.gu-transit .sky-repeater-item .sky-repeater-item-left,sky-repeater-item.sky-repeater-item-dragging.gu-transit .sky-repeater-item .sky-repeater-item-right{visibility:hidden}sky-repeater-item.sky-repeater-item-dragging .sky-repeater-item-grab-handle{cursor:grabbing;cursor:-moz-grabbing;cursor:-webkit-grabbing}.sky-theme-modern .sky-split-view-drawer sky-repeater-item .sky-repeater-item{padding-left:var(--sky-padding-even-md)}.sky-theme-modern .sky-split-view-drawer sky-repeater-item .sky-repeater-item.sky-repeater-item-active{padding-left:calc(var(--sky-padding-even-md) - 4px)}.sky-theme-modern sky-repeater-item .sky-repeater-item{padding-bottom:20px}.sky-theme-modern sky-repeater-item .sky-repeater-item.sky-repeater-item-active{background-color:#fff;border-left-color:#1870b8}.sky-theme-modern sky-repeater-item .sky-repeater-item:focus,.sky-theme-modern sky-repeater-item .sky-repeater-item:active:focus{outline:solid 2px #1870B8;outline-offset:-2px}.sky-theme-modern sky-repeater-item .sky-repeater-item:focus:not(:active){box-shadow:0 1px 8px #0000004d}.sky-theme-modern sky-repeater-item .sky-repeater-item-header[hidden]+.sky-repeater-item-content sky-repeater-item-content{margin:20px 0 0}.sky-theme-modern sky-repeater-item .sky-repeater-item-header,.sky-theme-modern sky-repeater-item .sky-repeater-item-left{padding-top:20px}.sky-theme-modern sky-repeater-item sky-inline-form .sky-slide-dissolve-last{padding-top:20px}.sky-theme-modern.sky-theme-mode-dark sky-repeater-item .sky-repeater-item{border-bottom-color:#686c73}.sky-theme-modern.sky-theme-mode-dark sky-repeater-item .sky-repeater-item.sky-repeater-item-active{color:#fbfcfe}.sky-theme-modern.sky-theme-mode-dark sky-repeater-item .sky-repeater-item-title{color:#fbfcfe}\n"], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i5.λ2, selector: "sky-chevron", inputs: ["ariaControls", "ariaLabel", "direction", "disabled"], outputs: ["directionChange"] }, { kind: "component", type: i6.λ3, selector: "sky-checkbox", inputs: ["label", "labelledBy", "id", "disabled", "tabindex", "name", "icon", "checkboxType", "checked", "indeterminate", "required", "labelText"], outputs: ["change", "checkedChange", "disabledChange", "indeterminateChange"] }, { kind: "component", type: i5.λ4, selector: "sky-icon", inputs: ["icon", "iconType", "size", "fixedWidth", "variant"] }, { kind: "component", type: i7.λ1, selector: "sky-inline-form", inputs: ["config", "template", "showForm"], outputs: ["close"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.SkyLibResourcesPipe, name: "skyLibResources" }], animations: [skyAnimationSlide], encapsulation: i0.ViewEncapsulation.None }); }
496
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.1", type: SkyRepeaterItemComponent, selector: "sky-repeater-item", inputs: { disabled: "disabled", itemName: "itemName", inlineFormConfig: "inlineFormConfig", inlineFormTemplate: "inlineFormTemplate", isExpanded: "isExpanded", isSelected: "isSelected", reorderable: "reorderable", selectable: "selectable", showInlineForm: "showInlineForm", tag: "tag" }, outputs: { collapse: "collapse", expand: "expand", inlineFormClose: "inlineFormClose", isSelectedChange: "isSelectedChange" }, host: { listeners: { "keydown": "onKeydown($event)" }, properties: { "class": "this.repeaterGroupClass" } }, providers: [SkyContentInfoProvider], queries: [{ propertyName: "contextMenu", first: true, predicate: SkyRepeaterItemContextMenuComponent, descendants: true, read: ElementRef }, { propertyName: "titleComponent", first: true, predicate: SkyRepeaterItemTitleComponent, descendants: true, read: ElementRef }, { propertyName: "repeaterItemContentComponents", predicate: SkyRepeaterItemContentComponent }], viewQueries: [{ propertyName: "grabHandle", first: true, predicate: ["grabHandle"], descendants: true, read: ElementRef }, { propertyName: "itemContentRef", first: true, predicate: ["itemContentRef"], descendants: true, read: ElementRef }, { propertyName: "itemHeaderRef", first: true, predicate: ["itemHeaderRef"], descendants: true, read: ElementRef }, { propertyName: "itemRef", first: true, predicate: ["itemRef"], descendants: true, read: ElementRef }], ngImport: i0, template: "<div\n class=\"sky-repeater-item sky-padding-even-default\"\n [attr.aria-label]=\"itemName\"\n [attr.aria-labelledby]=\"itemName || titleId\"\n [attr.aria-selected]=\"selectable ? !!isSelected : undefined\"\n [attr.role]=\"(itemRole$ | async)?.item\"\n [attr.tabIndex]=\"tabindex\"\n [ngClass]=\"{\n 'sky-repeater-item-active': isActive,\n 'sky-repeater-item-collapsible': isCollapsible,\n 'sky-repeater-item-selected': isSelected\n }\"\n (click)=\"onRepeaterItemClick($event)\"\n #itemRef\n>\n <div #inlineDelete>\n <ng-content select=\"sky-inline-delete\" />\n </div>\n\n <ng-container *ngIf=\"inlineFormTemplate\">\n <sky-inline-form\n [config]=\"inlineFormConfig\"\n [showForm]=\"showInlineForm\"\n [template]=\"inlineFormTemplate\"\n (close)=\"onInlineFormClose($event)\"\n >\n <ng-container *ngTemplateOutlet=\"skyRepeaterItemLeft\"></ng-container>\n <ng-container *ngTemplateOutlet=\"skyRepeaterItemRight\"></ng-container>\n </sky-inline-form>\n </ng-container>\n\n <ng-container *ngIf=\"!inlineFormTemplate\">\n <ng-container *ngTemplateOutlet=\"skyRepeaterItemLeft\"></ng-container>\n <ng-container *ngTemplateOutlet=\"skyRepeaterItemRight\"></ng-container>\n </ng-container>\n</div>\n\n<ng-template #skyRepeaterItemLeft>\n <div\n [attr.role]=\"!showInlineForm ? (itemRole$ | async)?.content : undefined\"\n class=\"sky-repeater-item-left\"\n >\n <ng-container *ngIf=\"reorderable\">\n <span\n aria-live=\"assertive\"\n class=\"sky-screen-reader-only\"\n [id]=\"contentId + '-reorder-state'\"\n >\n {{ reorderState }}\n </span>\n <span\n class=\"sky-screen-reader-only\"\n [id]=\"contentId + '-reorder-instructions'\"\n >{{ reorderButtonLabel }}</span\n >\n <button\n class=\"sky-btn sky-tile-tools-control sky-repeater-item-grab-handle\"\n type=\"button\"\n [attr.aria-describedby]=\"contentId + '-reorder-instructions'\"\n [attr.aria-label]=\"\n itemName\n ? ('skyux_repeater_item_reorder_label' | skyLibResources: itemName)\n : ('skyux_repeater_item_reorder_label_default' | skyLibResources)\n \"\n (blur)=\"onReorderHandleBlur($event)\"\n (keydown)=\"onReorderHandleKeyDown($event)\"\n #grabHandle\n >\n <sky-icon icon=\"arrows-v\" />\n </button>\n </ng-container>\n <sky-checkbox\n *ngIf=\"selectable\"\n class=\"sky-repeater-item-checkbox\"\n [checked]=\"isSelected\"\n [label]=\"\n itemName\n ? ('skyux_repeater_item_checkbox_label' | skyLibResources: itemName)\n : ('skyux_repeater_item_checkbox_label_default' | skyLibResources)\n \"\n (change)=\"onCheckboxChange($event)\"\n >\n </sky-checkbox>\n <div\n class=\"sky-repeater-item-context-menu\"\n [hidden]=\"contextMenuEl.children.length === 0\"\n #contextMenuEl\n >\n <ng-content select=\"sky-repeater-item-context-menu\" />\n </div>\n </div>\n</ng-template>\n\n<ng-template #skyRepeaterItemRight>\n <div class=\"sky-repeater-item-right\" #itemHeaderRef>\n <div\n class=\"sky-repeater-item-header\"\n [attr.role]=\"(itemRole$ | async)?.title\"\n [hidden]=\"titleRef.children.length === 0\"\n (click)=\"headerClick()\"\n >\n <div\n class=\"sky-repeater-item-title sky-font-emphasized\"\n [attr.id]=\"titleId\"\n #titleRef\n >\n <ng-content select=\"sky-repeater-item-title\" />\n </div>\n <button\n *ngIf=\"reorderable\"\n class=\"sky-btn sky-btn-link sky-repeater-item-reorder-top\"\n type=\"button\"\n [attr.aria-label]=\"\n itemName\n ? ('skyux_repeater_item_reorder_top_label'\n | skyLibResources: itemName)\n : ('skyux_repeater_item_reorder_top_label_default'\n | skyLibResources)\n \"\n (click)=\"moveToTop($event)\"\n >\n <sky-icon icon=\"arrow-up\" />\n {{ 'skyux_repeater_item_reorder_top' | skyLibResources }}\n </button>\n <div *ngIf=\"isCollapsible\" class=\"sky-repeater-item-chevron\">\n <sky-chevron\n [ariaControls]=\"contentId\"\n [ariaLabel]=\"\n itemName\n ? isExpanded\n ? ('skyux_repeater_item_expand' | skyLibResources: itemName)\n : ('skyux_repeater_item_collapse' | skyLibResources: itemName)\n : isExpanded\n ? ('skyux_repeater_item_expand_default' | skyLibResources)\n : ('skyux_repeater_item_collapse_default' | skyLibResources)\n \"\n [direction]=\"isExpanded ? 'up' : 'down'\"\n (directionChange)=\"chevronDirectionChange($event)\"\n >\n </sky-chevron>\n </div>\n <!-- Used for when the chevron is hidden to ensure that the right side is the same height as the left.-->\n <div\n *ngIf=\"!isCollapsible && !contextMenu\"\n class=\"sky-repeater-item-chevron-placeholder\"\n ></div>\n <!-- Used to ensure that the right side is the same height as the left.-->\n <div\n *ngIf=\"contextMenu\"\n class=\"sky-repeater-item-chevron-placeholder-with-context\"\n ></div>\n </div>\n <div\n class=\"sky-repeater-item-content\"\n [id]=\"contentId\"\n [@.disabled]=\"animationDisabled\"\n [@skyAnimationSlide]=\"slideDirection\"\n #itemContentRef\n [attr.role]=\"(itemRole$ | async)?.content\"\n >\n <ng-content select=\"sky-repeater-item-content\" />\n </div>\n </div>\n</ng-template>\n", styles: ["sky-repeater-item .sky-repeater-item{display:flex;border-bottom:1px dotted #cdcfd2;padding-top:0;position:relative;transition:box-shadow .15s;align-items:flex-start}sky-repeater-item .sky-repeater-item sky-inline-form{display:block;width:100%}sky-repeater-item .sky-repeater-item sky-inline-form>:first-child,sky-repeater-item .sky-repeater-item sky-inline-form .sky-slide-dissolve-first,sky-repeater-item .sky-repeater-item sky-inline-form .sky-slide-dissolve-last{display:flex;align-items:flex-start;flex:1 0 auto;width:100%}sky-repeater-item .sky-repeater-item sky-inline-form .sky-slide-dissolve-last{padding-top:10px}sky-repeater-item .sky-repeater-item.sky-repeater-item-active{background-color:#eeeeef;color:#212327;padding-left:6px;border-left:4px solid #00b4f1}sky-repeater-item .sky-repeater-item.sky-repeater-item-active .sky-inline-delete{margin-left:-4px;width:calc(100% + 4px)}sky-repeater-item .sky-repeater-item-left{display:flex;padding-top:10px;align-items:center}sky-repeater-item .sky-repeater-item-left sky-checkbox{display:flex}sky-repeater-item .sky-repeater-item-right{max-width:100%;flex-grow:1;align-self:center}sky-repeater-item .sky-repeater-item-header{align-items:center;display:flex;padding-top:10px}sky-repeater-item .sky-repeater-item-chevron{margin-left:10px}sky-repeater-item .sky-repeater-item-chevron-placeholder{height:24px}sky-repeater-item .sky-repeater-item-chevron-placeholder-with-context{height:29px}sky-repeater-item .sky-repeater-item-context-menu{padding:0 10px 0 0}sky-repeater-item .sky-repeater-item-checkbox{padding:0 5px 0 0}sky-repeater-item .sky-repeater-item-selected{background-color:#f1eef6;transition:background-color .15s}sky-repeater-item .sky-repeater-item-title{margin:0;flex-grow:1;line-height:1.1;color:#212327}sky-repeater-item sky-repeater-item-content{display:block;margin:10px 0 0}sky-repeater-item .sky-repeater-item-collapsible .sky-repeater-item-header{cursor:pointer}sky-repeater-item .sky-repeater-item-collapsible .sky-repeater-item-content{padding-right:34px}sky-repeater-item .sky-repeater-item-collapsed .sky-repeater-item-content{display:none}sky-repeater-item .sky-repeater-item-grab-handle{color:#cdcfd2;cursor:pointer;border:0;width:24px;height:24px;cursor:grab;cursor:-webkit-grab;cursor:-moz-grab;padding:0;margin:5px 10px 5px 0}sky-repeater-item .sky-repeater-item-grab-handle:hover{color:#979ba2;transition:color .15s}sky-repeater-item.sky-repeater-item-dragging.gu-mirror{opacity:initial;-ms-filter:initial;filter:initial;background-color:#fff;box-shadow:0 0 5px #0000004d}sky-repeater-item.sky-repeater-item-dragging.gu-transit .sky-repeater-item{background-color:#d8d8d8}sky-repeater-item.sky-repeater-item-dragging.gu-transit .sky-repeater-item .sky-repeater-item-left,sky-repeater-item.sky-repeater-item-dragging.gu-transit .sky-repeater-item .sky-repeater-item-right{visibility:hidden}sky-repeater-item.sky-repeater-item-dragging .sky-repeater-item-grab-handle{cursor:grabbing;cursor:-moz-grabbing;cursor:-webkit-grabbing}.sky-theme-modern .sky-split-view-drawer sky-repeater-item .sky-repeater-item{padding-left:var(--sky-padding-even-md)}.sky-theme-modern .sky-split-view-drawer sky-repeater-item .sky-repeater-item.sky-repeater-item-active{padding-left:calc(var(--sky-padding-even-md) - 4px)}.sky-theme-modern sky-repeater-item .sky-repeater-item{padding-bottom:20px}.sky-theme-modern sky-repeater-item .sky-repeater-item.sky-repeater-item-active{background-color:#fff;border-left-color:#1870b8}.sky-theme-modern sky-repeater-item .sky-repeater-item:focus,.sky-theme-modern sky-repeater-item .sky-repeater-item:active:focus{outline:solid 2px #1870B8;outline-offset:-2px}.sky-theme-modern sky-repeater-item .sky-repeater-item:focus:not(:active){box-shadow:0 1px 8px #0000004d}.sky-theme-modern sky-repeater-item .sky-repeater-item-header[hidden]+.sky-repeater-item-content sky-repeater-item-content{margin:20px 0 0}.sky-theme-modern sky-repeater-item .sky-repeater-item-header,.sky-theme-modern sky-repeater-item .sky-repeater-item-left{padding-top:20px}.sky-theme-modern sky-repeater-item sky-inline-form .sky-slide-dissolve-last{padding-top:20px}.sky-theme-modern.sky-theme-mode-dark sky-repeater-item .sky-repeater-item{border-bottom-color:#686c73}.sky-theme-modern.sky-theme-mode-dark sky-repeater-item .sky-repeater-item.sky-repeater-item-active{color:#fbfcfe}.sky-theme-modern.sky-theme-mode-dark sky-repeater-item .sky-repeater-item-title{color:#fbfcfe}\n"], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i5.λ2, selector: "sky-chevron", inputs: ["ariaControls", "ariaLabel", "direction", "disabled"], outputs: ["directionChange"] }, { kind: "component", type: i6.λ3, selector: "sky-checkbox", inputs: ["label", "labelledBy", "id", "disabled", "tabindex", "name", "icon", "checkboxType", "checked", "indeterminate", "required", "labelText", "labelHidden"], outputs: ["change", "checkedChange", "disabledChange", "indeterminateChange"] }, { kind: "component", type: i5.λ4, selector: "sky-icon", inputs: ["icon", "iconType", "size", "fixedWidth", "variant"] }, { kind: "component", type: i7.λ1, selector: "sky-inline-form", inputs: ["config", "template", "showForm"], outputs: ["close"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.SkyLibResourcesPipe, name: "skyLibResources" }], animations: [skyAnimationSlide], encapsulation: i0.ViewEncapsulation.None }); }
497
497
  }
498
498
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.1", ngImport: i0, type: SkyRepeaterItemComponent, decorators: [{
499
499
  type: Component,
500
- args: [{ selector: 'sky-repeater-item', animations: [skyAnimationSlide], providers: [SkyContentInfoProvider], encapsulation: ViewEncapsulation.None, template: "<div\n class=\"sky-repeater-item sky-padding-even-default\"\n [attr.aria-label]=\"itemName\"\n [attr.aria-labelledby]=\"itemName || titleId\"\n [attr.aria-selected]=\"selectable ? !!isSelected : undefined\"\n [attr.role]=\"(itemRole$ | async)?.item\"\n [attr.tabIndex]=\"tabindex\"\n [ngClass]=\"{\n 'sky-repeater-item-active': isActive,\n 'sky-repeater-item-collapsible': isCollapsible,\n 'sky-repeater-item-selected': isSelected\n }\"\n (click)=\"onRepeaterItemClick($event)\"\n #itemRef\n>\n <div #inlineDelete>\n <ng-content select=\"sky-inline-delete\" />\n </div>\n\n <ng-container *ngIf=\"inlineFormTemplate\">\n <sky-inline-form\n [config]=\"inlineFormConfig\"\n [showForm]=\"showInlineForm\"\n [template]=\"inlineFormTemplate\"\n (close)=\"onInlineFormClose($event)\"\n >\n <ng-container *ngTemplateOutlet=\"skyRepeaterItemLeft\"></ng-container>\n <ng-container *ngTemplateOutlet=\"skyRepeaterItemRight\"></ng-container>\n </sky-inline-form>\n </ng-container>\n\n <ng-container *ngIf=\"!inlineFormTemplate\">\n <ng-container *ngTemplateOutlet=\"skyRepeaterItemLeft\"></ng-container>\n <ng-container *ngTemplateOutlet=\"skyRepeaterItemRight\"></ng-container>\n </ng-container>\n</div>\n\n<ng-template #skyRepeaterItemLeft>\n <div\n [attr.role]=\"!showInlineForm ? (itemRole$ | async)?.content : undefined\"\n class=\"sky-repeater-item-left\"\n >\n <ng-container *ngIf=\"reorderable\">\n <span\n aria-live=\"assertive\"\n class=\"sky-screen-reader-only\"\n [id]=\"contentId + '-reorder-state'\"\n >\n {{ reorderState }}\n </span>\n <span\n class=\"sky-screen-reader-only\"\n [id]=\"contentId + '-reorder-instructions'\"\n >{{ reorderButtonLabel }}</span\n >\n <button\n class=\"sky-btn sky-tile-tools-control sky-repeater-item-grab-handle\"\n type=\"button\"\n [attr.aria-describedby]=\"contentId + '-reorder-instructions'\"\n [attr.aria-label]=\"\n itemName\n ? ('skyux_repeater_item_reorder_label' | skyLibResources : itemName)\n : ('skyux_repeater_item_reorder_label_default' | skyLibResources)\n \"\n (blur)=\"onReorderHandleBlur($event)\"\n (keydown)=\"onReorderHandleKeyDown($event)\"\n #grabHandle\n >\n <sky-icon icon=\"arrows-v\" />\n </button>\n </ng-container>\n <sky-checkbox\n *ngIf=\"selectable\"\n class=\"sky-repeater-item-checkbox\"\n [checked]=\"isSelected\"\n [label]=\"\n itemName\n ? ('skyux_repeater_item_checkbox_label' | skyLibResources : itemName)\n : ('skyux_repeater_item_checkbox_label_default' | skyLibResources)\n \"\n (change)=\"onCheckboxChange($event)\"\n >\n </sky-checkbox>\n <div\n class=\"sky-repeater-item-context-menu\"\n [hidden]=\"contextMenuEl.children.length === 0\"\n #contextMenuEl\n >\n <ng-content select=\"sky-repeater-item-context-menu\" />\n </div>\n </div>\n</ng-template>\n\n<ng-template #skyRepeaterItemRight>\n <div class=\"sky-repeater-item-right\" #itemHeaderRef>\n <div\n class=\"sky-repeater-item-header\"\n [attr.role]=\"(itemRole$ | async)?.title\"\n [hidden]=\"titleRef.children.length === 0\"\n (click)=\"headerClick()\"\n >\n <div\n class=\"sky-repeater-item-title sky-font-emphasized\"\n [attr.id]=\"titleId\"\n #titleRef\n >\n <ng-content select=\"sky-repeater-item-title\" />\n </div>\n <button\n *ngIf=\"reorderable\"\n class=\"sky-btn sky-btn-link sky-repeater-item-reorder-top\"\n type=\"button\"\n [attr.aria-label]=\"\n itemName\n ? ('skyux_repeater_item_reorder_top_label'\n | skyLibResources : itemName)\n : ('skyux_repeater_item_reorder_top_label_default'\n | skyLibResources)\n \"\n (click)=\"moveToTop($event)\"\n >\n <sky-icon icon=\"arrow-circle-up\" />\n {{ 'skyux_repeater_item_reorder_top' | skyLibResources }}\n </button>\n <div *ngIf=\"isCollapsible\" class=\"sky-repeater-item-chevron\">\n <sky-chevron\n [ariaControls]=\"contentId\"\n [ariaLabel]=\"\n itemName\n ? isExpanded\n ? ('skyux_repeater_item_expand' | skyLibResources : itemName)\n : ('skyux_repeater_item_collapse' | skyLibResources : itemName)\n : isExpanded\n ? ('skyux_repeater_item_expand_default' | skyLibResources)\n : ('skyux_repeater_item_collapse_default' | skyLibResources)\n \"\n [direction]=\"isExpanded ? 'up' : 'down'\"\n (directionChange)=\"chevronDirectionChange($event)\"\n >\n </sky-chevron>\n </div>\n <!-- Used for when the chevron is hidden to ensure that the right side is the same height as the left.-->\n <div\n *ngIf=\"!isCollapsible && !contextMenu\"\n class=\"sky-repeater-item-chevron-placeholder\"\n ></div>\n <!-- Used to ensure that the right side is the same height as the left.-->\n <div\n *ngIf=\"contextMenu\"\n class=\"sky-repeater-item-chevron-placeholder-with-context\"\n ></div>\n </div>\n <div\n class=\"sky-repeater-item-content\"\n [id]=\"contentId\"\n [@.disabled]=\"animationDisabled\"\n [@skyAnimationSlide]=\"slideDirection\"\n #itemContentRef\n [attr.role]=\"(itemRole$ | async)?.content\"\n >\n <ng-content select=\"sky-repeater-item-content\" />\n </div>\n </div>\n</ng-template>\n", styles: ["sky-repeater-item .sky-repeater-item{display:flex;border-bottom:1px dotted #cdcfd2;padding-top:0;position:relative;transition:box-shadow .15s;align-items:flex-start}sky-repeater-item .sky-repeater-item sky-inline-form{display:block;width:100%}sky-repeater-item .sky-repeater-item sky-inline-form>:first-child,sky-repeater-item .sky-repeater-item sky-inline-form .sky-slide-dissolve-first,sky-repeater-item .sky-repeater-item sky-inline-form .sky-slide-dissolve-last{display:flex;align-items:flex-start;flex:1 0 auto;width:100%}sky-repeater-item .sky-repeater-item sky-inline-form .sky-slide-dissolve-last{padding-top:10px}sky-repeater-item .sky-repeater-item.sky-repeater-item-active{background-color:#eeeeef;color:#212327;padding-left:6px;border-left:4px solid #00b4f1}sky-repeater-item .sky-repeater-item.sky-repeater-item-active .sky-inline-delete{margin-left:-4px;width:calc(100% + 4px)}sky-repeater-item .sky-repeater-item-left{display:flex;padding-top:10px;align-items:center}sky-repeater-item .sky-repeater-item-left sky-checkbox{display:flex}sky-repeater-item .sky-repeater-item-right{max-width:100%;flex-grow:1;align-self:center}sky-repeater-item .sky-repeater-item-header{align-items:center;display:flex;padding-top:10px}sky-repeater-item .sky-repeater-item-chevron{margin-left:10px}sky-repeater-item .sky-repeater-item-chevron-placeholder{height:24px}sky-repeater-item .sky-repeater-item-chevron-placeholder-with-context{height:29px}sky-repeater-item .sky-repeater-item-context-menu{padding:0 10px 0 0}sky-repeater-item .sky-repeater-item-checkbox{padding:0 5px 0 0}sky-repeater-item .sky-repeater-item-selected{background-color:#f1eef6;transition:background-color .15s}sky-repeater-item .sky-repeater-item-title{margin:0;flex-grow:1;line-height:1.1;color:#212327}sky-repeater-item sky-repeater-item-content{display:block;margin:10px 0 0}sky-repeater-item .sky-repeater-item-collapsible .sky-repeater-item-header{cursor:pointer}sky-repeater-item .sky-repeater-item-collapsible .sky-repeater-item-content{padding-right:34px}sky-repeater-item .sky-repeater-item-collapsed .sky-repeater-item-content{display:none}sky-repeater-item .sky-repeater-item-grab-handle{color:#cdcfd2;cursor:pointer;border:0;width:24px;height:24px;cursor:grab;cursor:-webkit-grab;cursor:-moz-grab;padding:0;margin:5px 10px 5px 0}sky-repeater-item .sky-repeater-item-grab-handle:hover{color:#979ba2;transition:color .15s}sky-repeater-item.sky-repeater-item-dragging.gu-mirror{opacity:initial;-ms-filter:initial;filter:initial;background-color:#fff;box-shadow:0 0 5px #0000004d}sky-repeater-item.sky-repeater-item-dragging.gu-transit .sky-repeater-item{background-color:#d8d8d8}sky-repeater-item.sky-repeater-item-dragging.gu-transit .sky-repeater-item .sky-repeater-item-left,sky-repeater-item.sky-repeater-item-dragging.gu-transit .sky-repeater-item .sky-repeater-item-right{visibility:hidden}sky-repeater-item.sky-repeater-item-dragging .sky-repeater-item-grab-handle{cursor:grabbing;cursor:-moz-grabbing;cursor:-webkit-grabbing}.sky-theme-modern .sky-split-view-drawer sky-repeater-item .sky-repeater-item{padding-left:var(--sky-padding-even-md)}.sky-theme-modern .sky-split-view-drawer sky-repeater-item .sky-repeater-item.sky-repeater-item-active{padding-left:calc(var(--sky-padding-even-md) - 4px)}.sky-theme-modern sky-repeater-item .sky-repeater-item{padding-bottom:20px}.sky-theme-modern sky-repeater-item .sky-repeater-item.sky-repeater-item-active{background-color:#fff;border-left-color:#1870b8}.sky-theme-modern sky-repeater-item .sky-repeater-item:focus,.sky-theme-modern sky-repeater-item .sky-repeater-item:active:focus{outline:solid 2px #1870B8;outline-offset:-2px}.sky-theme-modern sky-repeater-item .sky-repeater-item:focus:not(:active){box-shadow:0 1px 8px #0000004d}.sky-theme-modern sky-repeater-item .sky-repeater-item-header[hidden]+.sky-repeater-item-content sky-repeater-item-content{margin:20px 0 0}.sky-theme-modern sky-repeater-item .sky-repeater-item-header,.sky-theme-modern sky-repeater-item .sky-repeater-item-left{padding-top:20px}.sky-theme-modern sky-repeater-item sky-inline-form .sky-slide-dissolve-last{padding-top:20px}.sky-theme-modern.sky-theme-mode-dark sky-repeater-item .sky-repeater-item{border-bottom-color:#686c73}.sky-theme-modern.sky-theme-mode-dark sky-repeater-item .sky-repeater-item.sky-repeater-item-active{color:#fbfcfe}.sky-theme-modern.sky-theme-mode-dark sky-repeater-item .sky-repeater-item-title{color:#fbfcfe}\n"] }]
500
+ args: [{ selector: 'sky-repeater-item', animations: [skyAnimationSlide], providers: [SkyContentInfoProvider], encapsulation: ViewEncapsulation.None, template: "<div\n class=\"sky-repeater-item sky-padding-even-default\"\n [attr.aria-label]=\"itemName\"\n [attr.aria-labelledby]=\"itemName || titleId\"\n [attr.aria-selected]=\"selectable ? !!isSelected : undefined\"\n [attr.role]=\"(itemRole$ | async)?.item\"\n [attr.tabIndex]=\"tabindex\"\n [ngClass]=\"{\n 'sky-repeater-item-active': isActive,\n 'sky-repeater-item-collapsible': isCollapsible,\n 'sky-repeater-item-selected': isSelected\n }\"\n (click)=\"onRepeaterItemClick($event)\"\n #itemRef\n>\n <div #inlineDelete>\n <ng-content select=\"sky-inline-delete\" />\n </div>\n\n <ng-container *ngIf=\"inlineFormTemplate\">\n <sky-inline-form\n [config]=\"inlineFormConfig\"\n [showForm]=\"showInlineForm\"\n [template]=\"inlineFormTemplate\"\n (close)=\"onInlineFormClose($event)\"\n >\n <ng-container *ngTemplateOutlet=\"skyRepeaterItemLeft\"></ng-container>\n <ng-container *ngTemplateOutlet=\"skyRepeaterItemRight\"></ng-container>\n </sky-inline-form>\n </ng-container>\n\n <ng-container *ngIf=\"!inlineFormTemplate\">\n <ng-container *ngTemplateOutlet=\"skyRepeaterItemLeft\"></ng-container>\n <ng-container *ngTemplateOutlet=\"skyRepeaterItemRight\"></ng-container>\n </ng-container>\n</div>\n\n<ng-template #skyRepeaterItemLeft>\n <div\n [attr.role]=\"!showInlineForm ? (itemRole$ | async)?.content : undefined\"\n class=\"sky-repeater-item-left\"\n >\n <ng-container *ngIf=\"reorderable\">\n <span\n aria-live=\"assertive\"\n class=\"sky-screen-reader-only\"\n [id]=\"contentId + '-reorder-state'\"\n >\n {{ reorderState }}\n </span>\n <span\n class=\"sky-screen-reader-only\"\n [id]=\"contentId + '-reorder-instructions'\"\n >{{ reorderButtonLabel }}</span\n >\n <button\n class=\"sky-btn sky-tile-tools-control sky-repeater-item-grab-handle\"\n type=\"button\"\n [attr.aria-describedby]=\"contentId + '-reorder-instructions'\"\n [attr.aria-label]=\"\n itemName\n ? ('skyux_repeater_item_reorder_label' | skyLibResources: itemName)\n : ('skyux_repeater_item_reorder_label_default' | skyLibResources)\n \"\n (blur)=\"onReorderHandleBlur($event)\"\n (keydown)=\"onReorderHandleKeyDown($event)\"\n #grabHandle\n >\n <sky-icon icon=\"arrows-v\" />\n </button>\n </ng-container>\n <sky-checkbox\n *ngIf=\"selectable\"\n class=\"sky-repeater-item-checkbox\"\n [checked]=\"isSelected\"\n [label]=\"\n itemName\n ? ('skyux_repeater_item_checkbox_label' | skyLibResources: itemName)\n : ('skyux_repeater_item_checkbox_label_default' | skyLibResources)\n \"\n (change)=\"onCheckboxChange($event)\"\n >\n </sky-checkbox>\n <div\n class=\"sky-repeater-item-context-menu\"\n [hidden]=\"contextMenuEl.children.length === 0\"\n #contextMenuEl\n >\n <ng-content select=\"sky-repeater-item-context-menu\" />\n </div>\n </div>\n</ng-template>\n\n<ng-template #skyRepeaterItemRight>\n <div class=\"sky-repeater-item-right\" #itemHeaderRef>\n <div\n class=\"sky-repeater-item-header\"\n [attr.role]=\"(itemRole$ | async)?.title\"\n [hidden]=\"titleRef.children.length === 0\"\n (click)=\"headerClick()\"\n >\n <div\n class=\"sky-repeater-item-title sky-font-emphasized\"\n [attr.id]=\"titleId\"\n #titleRef\n >\n <ng-content select=\"sky-repeater-item-title\" />\n </div>\n <button\n *ngIf=\"reorderable\"\n class=\"sky-btn sky-btn-link sky-repeater-item-reorder-top\"\n type=\"button\"\n [attr.aria-label]=\"\n itemName\n ? ('skyux_repeater_item_reorder_top_label'\n | skyLibResources: itemName)\n : ('skyux_repeater_item_reorder_top_label_default'\n | skyLibResources)\n \"\n (click)=\"moveToTop($event)\"\n >\n <sky-icon icon=\"arrow-up\" />\n {{ 'skyux_repeater_item_reorder_top' | skyLibResources }}\n </button>\n <div *ngIf=\"isCollapsible\" class=\"sky-repeater-item-chevron\">\n <sky-chevron\n [ariaControls]=\"contentId\"\n [ariaLabel]=\"\n itemName\n ? isExpanded\n ? ('skyux_repeater_item_expand' | skyLibResources: itemName)\n : ('skyux_repeater_item_collapse' | skyLibResources: itemName)\n : isExpanded\n ? ('skyux_repeater_item_expand_default' | skyLibResources)\n : ('skyux_repeater_item_collapse_default' | skyLibResources)\n \"\n [direction]=\"isExpanded ? 'up' : 'down'\"\n (directionChange)=\"chevronDirectionChange($event)\"\n >\n </sky-chevron>\n </div>\n <!-- Used for when the chevron is hidden to ensure that the right side is the same height as the left.-->\n <div\n *ngIf=\"!isCollapsible && !contextMenu\"\n class=\"sky-repeater-item-chevron-placeholder\"\n ></div>\n <!-- Used to ensure that the right side is the same height as the left.-->\n <div\n *ngIf=\"contextMenu\"\n class=\"sky-repeater-item-chevron-placeholder-with-context\"\n ></div>\n </div>\n <div\n class=\"sky-repeater-item-content\"\n [id]=\"contentId\"\n [@.disabled]=\"animationDisabled\"\n [@skyAnimationSlide]=\"slideDirection\"\n #itemContentRef\n [attr.role]=\"(itemRole$ | async)?.content\"\n >\n <ng-content select=\"sky-repeater-item-content\" />\n </div>\n </div>\n</ng-template>\n", styles: ["sky-repeater-item .sky-repeater-item{display:flex;border-bottom:1px dotted #cdcfd2;padding-top:0;position:relative;transition:box-shadow .15s;align-items:flex-start}sky-repeater-item .sky-repeater-item sky-inline-form{display:block;width:100%}sky-repeater-item .sky-repeater-item sky-inline-form>:first-child,sky-repeater-item .sky-repeater-item sky-inline-form .sky-slide-dissolve-first,sky-repeater-item .sky-repeater-item sky-inline-form .sky-slide-dissolve-last{display:flex;align-items:flex-start;flex:1 0 auto;width:100%}sky-repeater-item .sky-repeater-item sky-inline-form .sky-slide-dissolve-last{padding-top:10px}sky-repeater-item .sky-repeater-item.sky-repeater-item-active{background-color:#eeeeef;color:#212327;padding-left:6px;border-left:4px solid #00b4f1}sky-repeater-item .sky-repeater-item.sky-repeater-item-active .sky-inline-delete{margin-left:-4px;width:calc(100% + 4px)}sky-repeater-item .sky-repeater-item-left{display:flex;padding-top:10px;align-items:center}sky-repeater-item .sky-repeater-item-left sky-checkbox{display:flex}sky-repeater-item .sky-repeater-item-right{max-width:100%;flex-grow:1;align-self:center}sky-repeater-item .sky-repeater-item-header{align-items:center;display:flex;padding-top:10px}sky-repeater-item .sky-repeater-item-chevron{margin-left:10px}sky-repeater-item .sky-repeater-item-chevron-placeholder{height:24px}sky-repeater-item .sky-repeater-item-chevron-placeholder-with-context{height:29px}sky-repeater-item .sky-repeater-item-context-menu{padding:0 10px 0 0}sky-repeater-item .sky-repeater-item-checkbox{padding:0 5px 0 0}sky-repeater-item .sky-repeater-item-selected{background-color:#f1eef6;transition:background-color .15s}sky-repeater-item .sky-repeater-item-title{margin:0;flex-grow:1;line-height:1.1;color:#212327}sky-repeater-item sky-repeater-item-content{display:block;margin:10px 0 0}sky-repeater-item .sky-repeater-item-collapsible .sky-repeater-item-header{cursor:pointer}sky-repeater-item .sky-repeater-item-collapsible .sky-repeater-item-content{padding-right:34px}sky-repeater-item .sky-repeater-item-collapsed .sky-repeater-item-content{display:none}sky-repeater-item .sky-repeater-item-grab-handle{color:#cdcfd2;cursor:pointer;border:0;width:24px;height:24px;cursor:grab;cursor:-webkit-grab;cursor:-moz-grab;padding:0;margin:5px 10px 5px 0}sky-repeater-item .sky-repeater-item-grab-handle:hover{color:#979ba2;transition:color .15s}sky-repeater-item.sky-repeater-item-dragging.gu-mirror{opacity:initial;-ms-filter:initial;filter:initial;background-color:#fff;box-shadow:0 0 5px #0000004d}sky-repeater-item.sky-repeater-item-dragging.gu-transit .sky-repeater-item{background-color:#d8d8d8}sky-repeater-item.sky-repeater-item-dragging.gu-transit .sky-repeater-item .sky-repeater-item-left,sky-repeater-item.sky-repeater-item-dragging.gu-transit .sky-repeater-item .sky-repeater-item-right{visibility:hidden}sky-repeater-item.sky-repeater-item-dragging .sky-repeater-item-grab-handle{cursor:grabbing;cursor:-moz-grabbing;cursor:-webkit-grabbing}.sky-theme-modern .sky-split-view-drawer sky-repeater-item .sky-repeater-item{padding-left:var(--sky-padding-even-md)}.sky-theme-modern .sky-split-view-drawer sky-repeater-item .sky-repeater-item.sky-repeater-item-active{padding-left:calc(var(--sky-padding-even-md) - 4px)}.sky-theme-modern sky-repeater-item .sky-repeater-item{padding-bottom:20px}.sky-theme-modern sky-repeater-item .sky-repeater-item.sky-repeater-item-active{background-color:#fff;border-left-color:#1870b8}.sky-theme-modern sky-repeater-item .sky-repeater-item:focus,.sky-theme-modern sky-repeater-item .sky-repeater-item:active:focus{outline:solid 2px #1870B8;outline-offset:-2px}.sky-theme-modern sky-repeater-item .sky-repeater-item:focus:not(:active){box-shadow:0 1px 8px #0000004d}.sky-theme-modern sky-repeater-item .sky-repeater-item-header[hidden]+.sky-repeater-item-content sky-repeater-item-content{margin:20px 0 0}.sky-theme-modern sky-repeater-item .sky-repeater-item-header,.sky-theme-modern sky-repeater-item .sky-repeater-item-left{padding-top:20px}.sky-theme-modern sky-repeater-item sky-inline-form .sky-slide-dissolve-last{padding-top:20px}.sky-theme-modern.sky-theme-mode-dark sky-repeater-item .sky-repeater-item{border-bottom-color:#686c73}.sky-theme-modern.sky-theme-mode-dark sky-repeater-item .sky-repeater-item.sky-repeater-item-active{color:#fbfcfe}.sky-theme-modern.sky-theme-mode-dark sky-repeater-item .sky-repeater-item-title{color:#fbfcfe}\n"] }]
501
501
  }], ctorParameters: () => [{ type: i1.SkyRepeaterService }, { type: i0.ChangeDetectorRef }, { type: i2.SkyRepeaterAdapterService }, { type: i0.ElementRef }, { type: i3.SkyLibResourcesService }], propDecorators: { disabled: [{
502
502
  type: Input
503
503
  }], itemName: [{
@@ -554,4 +554,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.1", ngImpor
554
554
  type: HostListener,
555
555
  args: ['keydown', ['$event']]
556
556
  }] } });
557
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwZWF0ZXItaXRlbS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvbGlzdHMvc3JjL2xpYi9tb2R1bGVzL3JlcGVhdGVyL3JlcGVhdGVyLWl0ZW0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2xpc3RzL3NyYy9saWIvbW9kdWxlcy9yZXBlYXRlci9yZXBlYXRlci1pdGVtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLGVBQWUsRUFDZixVQUFVLEVBQ1YsWUFBWSxFQUNaLFdBQVcsRUFDWCxZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sRUFHTixTQUFTLEVBQ1QsaUJBQWlCLEVBQ2pCLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsWUFBWSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBUW5FLE9BQU8sRUFBYyxPQUFPLEVBQUUsUUFBUSxJQUFJLGtCQUFrQixFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzNFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUczQyxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNwRixPQUFPLEVBQUUsbUNBQW1DLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUU3RixPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQzs7Ozs7Ozs7O0FBR2hGLElBQUksYUFBYSxHQUFHLENBQUMsQ0FBQztBQUV0Qjs7R0FFRztBQVNILE1BQU0sT0FBTyx3QkFBd0I7SUFHbkM7Ozs7T0FJRztJQUNILElBQVcsUUFBUTtRQUNq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QUFjO3NCQURwQixTQUFTO3VCQUFDLGdCQUFnQixFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkFJMUMsYUFBYTtzQkFEbkIsU0FBUzt1QkFBQyxlQUFlLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQUl6QyxPQUFPO3NCQURiLFNBQVM7dUJBQUMsU0FBUyxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkFJL0IsY0FBYztzQkFEeEIsWUFBWTt1QkFBQyw2QkFBNkIsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7Z0JBTzFELDZCQUE2QjtzQkFEbkMsZUFBZTt1QkFBQywrQkFBK0I7Z0JBMkd6QyxTQUFTO3NCQURmLFlBQVk7dUJBQUMsU0FBUyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkLFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdEJpbmRpbmcsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFF1ZXJ5TGlzdCxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG4gIGluamVjdCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBza3lBbmltYXRpb25TbGlkZSB9IGZyb20gJ0Bza3l1eC9hbmltYXRpb25zJztcbmltcG9ydCB7IFNreUNvbnRlbnRJbmZvUHJvdmlkZXIsIFNreUlkU2VydmljZSB9IGZyb20gJ0Bza3l1eC9jb3JlJztcbmltcG9ydCB7IFNreUNoZWNrYm94Q2hhbmdlIH0gZnJvbSAnQHNreXV4L2Zvcm1zJztcbmltcG9ydCB7IFNreUxpYlJlc291cmNlc1NlcnZpY2UgfSBmcm9tICdAc2t5dXgvaTE4bic7XG5pbXBvcnQge1xuICBTa3lJbmxpbmVGb3JtQ2xvc2VBcmdzLFxuICBTa3lJbmxpbmVGb3JtQ29uZmlnLFxufSBmcm9tICdAc2t5dXgvaW5saW5lLWZvcm0nO1xuXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0LCBmb3JrSm9pbiBhcyBvYnNlcnZhYmxlRm9ya0pvaW4gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgU2t5UmVwZWF0ZXJBZGFwdGVyU2VydmljZSB9IGZyb20gJy4vcmVwZWF0ZXItYWRhcHRlci5zZXJ2aWNlJztcbmltcG9ydCB7IFNreVJlcGVhdGVySXRlbUNvbnRlbnRDb21wb25lbnQgfSBmcm9tICcuL3JlcGVhdGVyLWl0ZW0tY29udGVudC5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2t5UmVwZWF0ZXJJdGVtQ29udGV4dE1lbnVDb21wb25lbnQgfSBmcm9tICcuL3JlcGVhdGVyLWl0ZW0tY29udGV4dC1tZW51LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTa3lSZXBlYXRlckl0ZW1Sb2xlc1R5cGUgfSBmcm9tICcuL3JlcGVhdGVyLWl0ZW0tcm9sZXMudHlwZSc7XG5pbXBvcnQgeyBTa3lSZXBlYXRlckl0ZW1UaXRsZUNvbXBvbmVudCB9IGZyb20gJy4vcmVwZWF0ZXItaXRlbS10aXRsZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2t5UmVwZWF0ZXJTZXJ2aWNlIH0gZnJvbSAnLi9yZXBlYXRlci5zZXJ2aWNlJztcblxubGV0IG5leHRDb250ZW50SWQgPSAwO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gaW5kaXZpZHVhbCByZXBlYXRlciBpdGVtLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdza3ktcmVwZWF0ZXItaXRlbScsXG4gIHN0eWxlVXJsczogWycuL3JlcGVhdGVyLWl0ZW0uY29tcG9uZW50LnNjc3MnXSxcbiAgdGVtcGxhdGVVcmw6ICcuL3JlcGVhdGVyLWl0ZW0uY29tcG9uZW50Lmh0bWwnLFxuICBhbmltYXRpb25zOiBbc2t5QW5pbWF0aW9uU2xpZGVdLFxuICBwcm92aWRlcnM6IFtTa3lDb250ZW50SW5mb1Byb3ZpZGVyXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbn0pXG5leHBvcnQgY2xhc3MgU2t5UmVwZWF0ZXJJdGVtQ29tcG9uZW50XG4gIGltcGxlbWVudHMgT25EZXN0cm95LCBPbkluaXQsIEFmdGVyVmlld0luaXRcbntcbiAgLyoqXG4gICAqIE1ha2UgdGhlIGZpcnN0LCBub24tZGlzYWJsZWQgaXRlbSB0YWItZm9jdXNhYmxlLlxuICAgKiAtIERpc2FibGVkIGl0ZW1zIHNob3VsZCBub3QgYmUgZm9jdXNhYmxlIHBlciBbVzNDXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtcHJhY3RpY2VzLTEuMS8ja2JkX2Rpc2FibGVkX2NvbnRyb2xzKS5cbiAgICogLSBPbmUgaXRlbSBwZXIgbGlzdC9ncmlkL2xpc3Rib3ggc2hvdWxkIGJlIHRhYiBmb2N1c2FibGUgcGVyIFtXM0NdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS1wcmFjdGljZXMtMS4xLyNncmlkKS5cbiAgICovXG4gIHB1YmxpYyBnZXQgdGFiaW5kZXgoKTogMCB8IC0xIHtcbiAgICByZXR1cm4gdGhpcy4jcmVwZWF0ZXJTZXJ2aWNlLml0ZW1zLmZpbHRlcigoaXRlbSkgPT4gIWl0ZW0uZGlzYWJsZWQpWzBdID09PVxuICAgICAgdGhpc1xuICAgICAgPyAwXG4gICAgICA6IC0xO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZXhjbHVkZSBhbiBpdGVtIHdoZW4gY3ljbGluZyB0aHJvdWdoLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBkaXNhYmxlZCh2YWx1ZTogYm9vbGVhbiB8IHVuZGVmaW5lZCkge1xuICAgIGlmICh0aGlzLiNfaXNEaXNhYmxlZCAhPT0gdmFsdWUpIHtcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICB0aGlzLmlzU2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy4jX2lzRGlzYWJsZWQgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy4jX2lzRGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmlzQWN0aXZlKSB7XG4gICAgICAgIHRoaXMuI3JlcGVhdGVyU2VydmljZS5hY3RpdmF0ZUl0ZW1CeUluZGV4KHVuZGVmaW5lZCk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy4jZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Lm1hdGNoZXMoJzpmb2N1cy13aXRoaW4nKSkge1xuICAgICAgICB0aGlzLiNlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQub3duZXJEb2N1bWVudC5hY3RpdmVFbGVtZW50LmJsdXIoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuI2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLiNfaXNEaXNhYmxlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgaHVtYW4tcmVhZGFibGUgbmFtZSBmb3IgdGhlIHJlcGVhdGVyIGl0ZW0gdGhhdCBpcyBhdmFpbGFibGUgZm9yIG11bHRpcGxlIHB1cnBvc2VzLFxuICAgKiBzdWNoIGFzIGFjY2Vzc2liaWxpdHkgYW5kIGluc3RydW1lbnRhdGlvbi4gRm9yIGV4YW1wbGUsIHRoZSBjb21wb25lbnQgdXNlcyB0aGUgbmFtZSB0b1xuICAgKiBjb25zdHJ1Y3QgQVJJQSBsYWJlbHMgZm9yIHRoZSByZXBlYXRlciBpdGVtIGNvbnRyb2xzXG4gICAqIHRvIFtzdXBwb3J0IGFjY2Vzc2liaWxpdHldKGh0dHBzOi8vZGV2ZWxvcGVyLmJsYWNrYmF1ZC5jb20vc2t5dXgvbGVhcm4vYWNjZXNzaWJpbGl0eSkuXG4gICAqIElmIG5vdCBzcGVjaWZpZWQsIHRoZSByZXBlYXRlciBpdGVtJ3MgdGl0bGUgd2lsbCBiZSB1c2VkIGZvciB0aGlzIHZhbHVlLlxuICAgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgYGFyaWEtbGFiZWxgIGF0dHJpYnV0ZSwgc2VlIHRoZSBbV0FJLUFSSUEgZGVmaW5pdGlvbl0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLyNhcmlhLWxhYmVsKS5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgaXRlbU5hbWUodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuI19pdGVtTmFtZSA9IHZhbHVlO1xuICAgIHRoaXMuI3VwZGF0ZUNvbnRlbnRJbmZvKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGl0ZW1OYW1lKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuI19pdGVtTmFtZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBidXR0b25zIHRvIGRpc3BsYXkgb24gYW4gaW5saW5lIGZvcm1cbiAgICogd2l0aGluIHRoZSByZXBlYXRlci4gVGhpcyBwcm9wZXJ0eSBhY2NlcHRzXG4gICAqIFthIGBTa3lJbmxpbmVGb3JtQ29uZmlnYCBvYmplY3RdKGh0dHBzOi8vZGV2ZWxvcGVyLmJsYWNrYmF1ZC5jb20vc2t5dXgvY29tcG9uZW50cy9pbmxpbmUtZm9ybSNza3lpbmxpbmVmb3JtY29uZmlnLXByb3BlcnRpZXMpLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGlubGluZUZvcm1Db25maWc6IFNreUlubGluZUZvcm1Db25maWcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyBbYW4gQW5ndWxhciBgVGVtcGxhdGVSZWZgXShodHRwczovL2FuZ3VsYXIuaW8vYXBpL2NvcmUvVGVtcGxhdGVSZWYpIHRvIHVzZVxuICAgKiBhcyBhIHRlbXBsYXRlIHRvIGluc3RhbnRpYXRlIGFuIGlubGluZSBmb3JtIHdpdGhpbiB0aGUgcmVwZWF0ZXIuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgaW5saW5lRm9ybVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjx1bmtub3duPiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgcmVwZWF0ZXIgaXRlbSBpcyBleHBhbmRlZC5cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBpc0V4cGFuZGVkKHZhbHVlOiBib29sZWFuIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy51cGRhdGVGb3JFeHBhbmRlZCh2YWx1ZSAhPT0gZmFsc2UsIHRydWUpO1xuICB9XG5cbiAgcHVibGljIGdldCBpc0V4cGFuZGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLiNpc0V4cGFuZGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHJlcGVhdGVyIGl0ZW0ncyBjaGVja2JveCBpcyBzZWxlY3RlZC5cbiAgICogV2hlbiB1c2VycyBzZWxlY3QgdGhlIHJlcGVhdGVyIGl0ZW0sIHRoZSBzcGVjaWZpZWQgcHJvcGVydHkgb24geW91ciBtb2RlbCBpcyB1cGRhdGVkIGFjY29yZGluZ2x5LlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBpc1NlbGVjdGVkKHZhbHVlOiBib29sZWFuIHwgdW5kZWZpbmVkKSB7XG4gICAgaWYgKCF0aGlzLmRpc2FibGVkICYmIHZhbHVlICE9PSB0aGlzLiNfaXNTZWxlY3RlZCkge1xuICAgICAgdGhpcy4jX2lzU2VsZWN0ZWQgPSB2YWx1ZTtcbiAgICAgIHRoaXMuaXNTZWxlY3RlZENoYW5nZS5lbWl0KHRoaXMuI19pc1NlbGVjdGVkKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0IGlzU2VsZWN0ZWQoKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuI19pc1NlbGVjdGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdXNlcnMgY2FuIGNoYW5nZSB0aGUgb3JkZXIgb2YgdGhlIHJlcGVhdGVyIGl0ZW0uXG4gICAqIFRoZSByZXBlYXRlciBjb21wb25lbnQncyBgcmVvcmRlcmFibGVgIHByb3BlcnR5IG11c3QgYWxzbyBiZSBzZXQgdG8gYHRydWVgLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHJlb3JkZXJhYmxlOiBib29sZWFuIHwgdW5kZWZpbmVkID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZGlzcGxheSBhIGNoZWNrYm94IGluIHRoZSBsZWZ0IG9mIHRoZSByZXBlYXRlciBpdGVtLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNlbGVjdGFibGU6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSBmYWxzZTtcblxuICAvKipcbiAgICogV2hldGhlciB0byBkaXNwbGF5IGFuIGlubGluZSBmb3JtIHdpdGhpbiB0aGUgcmVwZWF0ZXIuXG4gICAqIFVzZXJzIGNhbiB0b2dnbGUgYmV0d2VlbiBkaXNwbGF5aW5nIGFuZCBoaWRpbmcgdGhlIGlubGluZSBmb3JtLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNob3dJbmxpbmVGb3JtOiBib29sZWFuIHwgdW5kZWZpbmVkID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFRoZSBvYmplY3QgdGhhdCB0aGUgcmVwZWF0ZXIgY29tcG9uZW50IHJldHVybnMgZm9yIHRoaXMgcmVwZWF0ZXIgaXRlbVxuICAgKiB3aGVuIHRoZSBgb3JkZXJDaGFuZ2VgIGV2ZW50IGZpcmVzLiBUaGlzIGlzIHJlcXVpcmVkXG4gICAqIGlmIHlvdSBzZXQgdGhlIGByZW9yZGVyYWJsZWAgcHJvcGVydHkgdG8gYHRydWVgLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHRhZzogYW55O1xuXG4gIC8qKlxuICAgKiBGaXJlcyB3aGVuIHVzZXJzIGNvbGxhcHNlIHRoZSByZXBlYXRlciBpdGVtLlxuICAgKi9cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBjb2xsYXBzZSA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAvKipcbiAgICogRmlyZXMgd2hlbiB1c2VycyBleHBhbmQgdGhlIHJlcGVhdGVyIGl0ZW0uXG4gICAqL1xuICBAT3V0cHV0KClcbiAgcHVibGljIGV4cGFuZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAvKipcbiAgICogRmlyZXMgd2hlbiB0aGUgcmVwZWF0ZXIgaW5jbHVkZXMgYW4gaW5saW5lIGZvcm0gYW5kIHVzZXJzIGNsb3NlIGl0LiBUaGlzIGV2ZW50IGVtaXRzXG4gICAqIFthIGBTa3lJbmxpbmVGb3JtQ2xvc2VBcmdzYCB0eXBlXShodHRwczovL2RldmVsb3Blci5ibGFja2JhdWQuY29tL3NreXV4L2NvbXBvbmVudHMvaW5saW5lLWZvcm0jc2t5aW5saW5lZm9ybWNsb3NlYXJncy1wcm9wZXJ0aWVzKS5cbiAgICovXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgaW5saW5lRm9ybUNsb3NlID0gbmV3IEV2ZW50RW1pdHRlcjxTa3lJbmxpbmVGb3JtQ2xvc2VBcmdzPigpO1xuXG4gIC8qKlxuICAgKiBGaXJlcyB3aGVuIHVzZXJzIHNlbGVjdCBvciBjbGVhciB0aGUgY2hlY2tib3ggZm9yIHRoZSByZXBlYXRlciBpdGVtLlxuICAgKi9cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBpc1NlbGVjdGVkQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gIEBDb250ZW50Q2hpbGQoU2t5UmVwZWF0ZXJJdGVtQ29udGV4dE1lbnVDb21wb25lbnQsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxuICBwdWJsaWMgY29udGV4dE1lbnU6IEVsZW1lbnRSZWYgfCB1bmRlZmluZWQ7XG5cbiAgcHVibGljIGNvbnRlbnRJZDogc3RyaW5nO1xuXG4gIHB1YmxpYyBoYXNJdGVtQ29udGVudCA9IGZhbHNlO1xuXG4gIHB1YmxpYyBpc0FjdGl2ZSA9IGZhbHNlO1xuXG4gIHB1YmxpYyBzZXQgaXNDb2xsYXBzaWJsZSh2YWx1ZTogYm9vbGVhbiB8IHVuZGVmaW5lZCkge1xuICAgIGlmICh0aGlzLmlzQ29sbGFwc2libGUgIT09IHZhbHVlKSB7XG4gICAgICB0aGlzLiNfaXNDb2xsYXBzaWJsZSA9IHZhbHVlICE9PSBmYWxzZTtcblxuICAgICAgLyppc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgaWYgKCF0aGlzLiNfaXNDb2xsYXBzaWJsZSkge1xuICAgICAgICB0aGlzLnVwZGF0ZUZvckV4cGFuZGVkKHRydWUsIHRydWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuI2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHVibGljIGdldCBpc0NvbGxhcHNpYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLiNfaXNDb2xsYXBzaWJsZTtcbiAgfVxuXG4gIHB1YmxpYyBpdGVtUm9sZSQ6IE9ic2VydmFibGU8U2t5UmVwZWF0ZXJJdGVtUm9sZXNUeXBlPjtcblxuICBwdWJsaWMgcmVvcmRlckJ1dHRvbkxhYmVsID0gJyc7XG5cbiAgcHVibGljIHJlb3JkZXJTdGF0ZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIHB1YmxpYyBzbGlkZURpcmVjdGlvbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIHB1YmxpYyBhbmltYXRpb25EaXNhYmxlZCA9IGZhbHNlO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MnKVxuICBwdWJsaWMgZ2V0IHJlcGVhdGVyR3JvdXBDbGFzcygpOiBzdHJpbmcge1xuICAgIHJldHVybiAnc2t5LXJlcGVhdGVyLWl0ZW0tZ3JvdXAtJyArIHRoaXMuI3JlcGVhdGVyU2VydmljZS5yZXBlYXRlckdyb3VwSWQ7XG4gIH1cblxuICBAVmlld0NoaWxkKCdncmFiSGFuZGxlJywgeyByZWFkOiBFbGVtZW50UmVmIH0pXG4gIHB1YmxpYyBncmFiSGFuZGxlOiBFbGVtZW50UmVmIHwgdW5kZWZpbmVkO1xuXG4gIEBWaWV3Q2hpbGQoJ2l0ZW1Db250ZW50UmVmJywgeyByZWFkOiBFbGVtZW50UmVmIH0pXG4gIHB1YmxpYyBpdGVtQ29udGVudFJlZjogRWxlbWVudFJlZiB8IHVuZGVmaW5lZDtcblxuICBAVmlld0NoaWxkKCdpdGVtSGVhZGVyUmVmJywgeyByZWFkOiBFbGVtZW50UmVmIH0pXG4gIHB1YmxpYyBpdGVtSGVhZGVyUmVmOiBFbGVtZW50UmVmIHwgdW5kZWZpbmVkO1xuXG4gIEBWaWV3Q2hpbGQoJ2l0ZW1SZWYnLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgcHVibGljIGl0ZW1SZWY6IEVsZW1lbnRSZWYgfCB1bmRlZmluZWQ7XG5cbiAgQENvbnRlbnRDaGlsZChTa3lSZXBlYXRlckl0ZW1UaXRsZUNvbXBvbmVudCwgeyByZWFkOiBFbGVtZW50UmVmIH0pXG4gIHB1YmxpYyBzZXQgdGl0bGVDb21wb25lbnQodmFsdWU6IEVsZW1lbnRSZWYgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLiN0aXRsZUNvbXBvbmVudCA9IHZhbHVlO1xuICAgIHRoaXMuI3VwZGF0ZUNvbnRlbnRJbmZvKCk7XG4gIH1cblxuICBAQ29udGVudENoaWxkcmVuKFNreVJlcGVhdGVySXRlbUNvbnRlbnRDb21wb25lbnQpXG4gIHB1YmxpYyByZXBlYXRlckl0ZW1Db250ZW50Q29tcG9uZW50czpcbiAgICB8IFF1ZXJ5TGlzdDxTa3lSZXBlYXRlckl0ZW1Db250ZW50Q29tcG9uZW50PlxuICAgIHwgdW5kZWZpbmVkO1xuXG4gIHByb3RlY3RlZCB0aXRsZUlkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgI2FkYXB0ZXJTZXJ2aWNlOiBTa3lSZXBlYXRlckFkYXB0ZXJTZXJ2aWNlO1xuICAjY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmO1xuICAjY29udGVudEluZm9Qcm92aWRlciA9IGluamVjdChTa3lDb250ZW50SW5mb1Byb3ZpZGVyKTtcbiAgI2VsZW1lbnRSZWY6IEVsZW1lbnRSZWY7XG4gICNpc0V4cGFuZGVkID0gdHJ1ZTtcbiAgI2tleWJvYXJkUmVvcmRlcmluZ0VuYWJsZWQgPSBmYWxzZTtcbiAgI25nVW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICAjcmVvcmRlckNhbmNlbFRleHQgPSAnJztcbiAgI3Jlb3JkZXJDdXJyZW50SW5kZXggPSAtMTtcbiAgI3Jlb3JkZXJGaW5pc2hUZXh0ID0gJyc7XG4gICNyZW9yZGVySW5zdHJ1Y3Rpb25zID0gJyc7XG4gICNyZW9yZGVyTW92ZWRUZXh0ID0gJyc7XG4gICNyZW9yZGVyU3RhdGVEZXNjcmlwdGlvbiA9ICcnO1xuICAjcmVvcmRlclN0ZXBzID0gMDtcbiAgI3JlcGVhdGVyU2VydmljZTogU2t5UmVwZWF0ZXJTZXJ2aWNlO1xuICAjcmVzb3VyY2VTZXJ2aWNlOiBTa3lMaWJSZXNvdXJjZXNTZXJ2aWNlO1xuICAjdGl0bGVDb21wb25lbnQ6IEVsZW1lbnRSZWYgfCB1bmRlZmluZWQ7XG4gICNfaXNDb2xsYXBzaWJsZSA9IHRydWU7XG4gICNfaXNEaXNhYmxlZDogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IGZhbHNlO1xuICAjX2lzU2VsZWN0ZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gICNfaXRlbU5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICByZWFkb25seSAjaWRTdmMgPSBpbmplY3QoU2t5SWRTZXJ2aWNlKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICByZXBlYXRlclNlcnZpY2U6IFNreVJlcGVhdGVyU2VydmljZSxcbiAgICBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgYWRhcHRlclNlcnZpY2U6IFNreVJlcGVhdGVyQWRhcHRlclNlcnZpY2UsXG4gICAgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICByZXNvdXJjZVNlcnZpY2U6IFNreUxpYlJlc291cmNlc1NlcnZpY2UsXG4gICkge1xuICAgIHRoaXMuI3JlcGVhdGVyU2VydmljZSA9IHJlcGVhdGVyU2VydmljZTtcbiAgICB0aGlzLiNjaGFuZ2VEZXRlY3RvciA9IGNoYW5nZURldGVjdG9yO1xuICAgIHRoaXMuI2FkYXB0ZXJTZXJ2aWNlID0gYWRhcHRlclNlcnZpY2U7XG4gICAgdGhpcy4jZWxlbWVudFJlZiA9IGVsZW1lbnRSZWY7XG4gICAgdGhpcy4jcmVzb3VyY2VTZXJ2aWNlID0gcmVzb3VyY2VTZXJ2aWNlO1xuXG4gICAgdGhpcy4jc2xpZGVGb3JFeHBhbmRlZChmYWxzZSk7XG5cbiAgICBvYnNlcnZhYmxlRm9ya0pvaW4oW1xuICAgICAgdGhpcy4jcmVzb3VyY2VTZXJ2aWNlLmdldFN0cmluZygnc2t5dXhfcmVwZWF0ZXJfaXRlbV9yZW9yZGVyX2NhbmNlbCcpLFxuICAgICAgdGhpcy4jcmVzb3VyY2VTZXJ2aWNlLmdldFN0cmluZygnc2t5dXhfcmVwZWF0ZXJfaXRlbV9yZW9yZGVyX2ZpbmlzaCcpLFxuICAgICAgdGhpcy4jcmVzb3VyY2VTZXJ2aWNlLmdldFN0cmluZyhcbiAgICAgICAgJ3NreXV4X3JlcGVhdGVyX2l0ZW1fcmVvcmRlcl9pbnN0cnVjdGlvbnMnLFxuICAgICAgKSxcbiAgICAgIHRoaXMuI3Jlc291cmNlU2VydmljZS5nZXRTdHJpbmcoJ3NreXV4X3JlcGVhdGVyX2l0ZW1fcmVvcmRlcl9vcGVyYXRpb24nKSxcbiAgICAgIHRoaXMuI3Jlc291cmNlU2VydmljZS5nZXRTdHJpbmcoJ3NreXV4X3JlcGVhdGVyX2l0ZW1fcmVvcmRlcl9tb3ZlZCcpLFxuICAgIF0pXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy4jbmdVbnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAoW1xuICAgICAgICAgIHJlb3JkZXJDYW5jZWxUZXh0LFxuICAgICAgICAgIHJlb3JkZXJGaW5pc2hUZXh0LFxuICAgICAgICAgIHJlb3JkZXJJbnN0cnVjdGlvbnNUZXh0LFxuICAgICAgICAgIHJlb3JkZXJPcGVyYXRpb25UZXh0LFxuICAgICAgICAgIHJlb3JkZXJNb3ZlZFRleHQsXG4gICAgICAgIF0pID0+IHtcbiAgICAgICAgICB0aGlzLiNyZW9yZGVyQ2FuY2VsVGV4dCA9IHJlb3JkZXJDYW5jZWxUZXh0O1xuICAgICAgICAgIHRoaXMuI3Jlb3JkZXJGaW5pc2hUZXh0ID0gcmVvcmRlckZpbmlzaFRleHQ7XG4gICAgICAgICAgdGhpcy4jcmVvcmRlclN0YXRlRGVzY3JpcHRpb24gPSByZW9yZGVySW5zdHJ1Y3Rpb25zVGV4dDtcbiAgICAgICAgICB0aGlzLiNyZW9yZGVySW5zdHJ1Y3Rpb25zID0gcmVvcmRlck9wZXJhdGlvblRleHQ7XG4gICAgICAgICAgdGhpcy4jcmVvcmRlck1vdmVkVGV4dCA9IHJlb3JkZXJNb3ZlZFRleHQ7XG4gICAgICAgICAgdGhpcy5yZW9yZGVyQnV0dG9uTGFiZWwgPSB0aGlzLiNyZW9yZGVySW5zdHJ1Y3Rpb25zO1xuICAgICAgICB9LFxuICAgICAgKTtcbiAgICB0aGlzLmNvbnRlbnRJZCA9IGBza3ktcmVwZWF0ZXItaXRlbS1jb250ZW50LSR7KytuZXh0Q29udGVudElkfWA7XG4gICAgdGhpcy5pdGVtUm9sZSQgPSB0aGlzLiNyZXBlYXRlclNlcnZpY2UuaXRlbVJvbGUuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy4jcmVwZWF0ZXJTZXJ2aWNlLnJlZ2lzdGVySXRlbSh0aGlzKTtcbiAgICB0aGlzLiNyZXBlYXRlclNlcnZpY2UuYWN0aXZlSXRlbUNoYW5nZVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuI25nVW5zdWJzY3JpYmUpKVxuICAgICAgLnN1YnNjcmliZSgoaXRlbSkgPT4ge1xuICAgICAgICBjb25zdCBuZXdJc0FjdGl2ZVZhbHVlID0gdGhpcyA9PT0gaXRlbTtcbiAgICAgICAgaWYgKG5ld0lzQWN0aXZlVmFsdWUgIT09IHRoaXMuaXNBY3RpdmUpIHtcbiAgICAgICAgICB0aGlzLmlzQWN0aXZlID0gbmV3SXNBY3RpdmVWYWx1ZTtcbiAgICAgICAgICB0aGlzLiNjaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuaGFzSXRlbUNvbnRlbnQgPSAhIXRoaXMucmVwZWF0ZXJJdGVtQ29udGVudENvbXBvbmVudHM/Lmxlbmd0aDtcbiAgICB0aGlzLiN1cGRhdGVFeHBhbmRPbkNvbnRlbnRDaGFuZ2UoKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmNvbGxhcHNlLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5leHBhbmQuY29tcGxldGUoKTtcbiAgICB0aGlzLmlubGluZUZvcm1DbG9zZS5jb21wbGV0ZSgpO1xuICAgIHRoaXMuaXNTZWxlY3RlZENoYW5nZS5jb21wbGV0ZSgpO1xuXG4gICAgdGhpcy4jbmdVbnN1YnNjcmliZS5uZXh0KCk7XG4gICAgdGhpcy4jbmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpO1xuXG4gICAgdGhpcy4jcmVwZWF0ZXJTZXJ2aWNlLnVucmVnaXN0ZXJJdGVtKHRoaXMpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bicsIFsnJGV2ZW50J10pXG4gIHB1YmxpYyBvbktleWRvd24oJGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKFxuICAgICAgWycgJywgJ0VudGVyJywgJ0hvbWUnLCAnRW5kJywgJ0Fycm93VXAnLCAnQXJyb3dEb3duJ10uaW5jbHVkZXMoJGV2ZW50LmtleSlcbiAgICApIHtcbiAgICAgIGlmIChcbiAgICAgICAgKCRldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpLm1hdGNoZXMoXG4gICAgICAgICAgJ2lucHV0LCB0ZXh0YXJlYSwgc2VsZWN0LCBvcHRpb24sIFtjb250ZW50ZWRpdGFibGVdLCBbY29udGVudGVkaXRhYmxlXSAqJyxcbiAgICAgICAgKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgbGV0IGFjdGl2YXRlSXRlbTogU2t5UmVwZWF0ZXJJdGVtQ29tcG9uZW50IHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgIGlmIChbJyAnLCAnRW50ZXInXS5pbmNsdWRlcygkZXZlbnQua2V5KSkge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RhYmxlKSB7XG4gICAgICAgICAgdGhpcy5pc1NlbGVjdGVkID0gIXRoaXMuaXNTZWxlY3RlZDtcbiAgICAgICAgfVxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXRoaXMtYWxpYXNcbiAgICAgICAgYWN0aXZhdGVJdGVtID0gdGhpcztcbiAgICAgIH1cbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICBpZiAoWydIb21lJywgJ0VuZCddLmluY2x1ZGVzKCRldmVudC5rZXkpKSB7XG4gICAgICAgIGNvbnN0IGl0ZW1zID0gdGhpcy4jcmVwZWF0ZXJTZXJ2aWNlLml0ZW1zLmZpbHRlcihcbiAgICAgICAgICAoaXRlbSkgPT4gIWl0ZW0uZGlzYWJsZWQsXG4gICAgICAgICk7XG4gICAgICAgIGlmICgkZXZlbnQua2V5ID09PSAnSG9tZScpIHtcbiAgICAgICAgICBhY3RpdmF0ZUl0ZW0gPSBpdGVtcy5zaGlmdCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGFjdGl2YXRlSXRlbSA9IGl0ZW1zLnBvcCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgaWYgKFsnQXJyb3dVcCcsICdBcnJvd0Rvd24nXS5pbmNsdWRlcygkZXZlbnQua2V5KSkge1xuICAgICAgICBjb25zdCBjdXJyZW50SW5kZXggPSB0aGlzLiNyZXBlYXRlclNlcnZpY2UuaXRlbXMuZmluZEluZGV4KFxuICAgICAgICAgIChpdGVtKSA9PiBpdGVtID09PSB0aGlzLFxuICAgICAgICApO1xuICAgICAgICBsZXQgc2xpY2VGcm9tOiBudW1iZXI7XG4gICAgICAgIGxldCBzbGljZVRvOiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gICAgICAgIGlmICgkZXZlbnQua2V5ID09PSAnQXJyb3dVcCcpIHtcbiAgICAgICAgICBzbGljZUZyb20gPSAwO1xuICAgICAgICAgIHNsaWNlVG8gPSBjdXJyZW50SW5kZXg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2xpY2VGcm9tID0gY3VycmVudEluZGV4ICsgMTtcbiAgICAgICAgICBzbGljZVRvID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGl0ZW1zID0gdGhpcy4jcmVwZWF0ZXJTZXJ2aWNlLml0ZW1zXG4gICAgICAgICAgLnNsaWNlKHNsaWNlRnJvbSwgc2xpY2VUbylcbiAgICAgICAgICAuZmlsdGVyKChpdGVtKSA9PiAhaXRlbS5kaXNhYmxlZCk7XG4gICAgICAgIGFjdGl2YXRlSXRlbSA9ICRldmVudC5rZXkgPT09ICdBcnJvd1VwJyA/IGl0ZW1zLnBvcCgpIDogaXRlbXMuc2hpZnQoKTtcbiAgICAgICAgaWYgKCFhY3RpdmF0ZUl0ZW0pIHtcbiAgICAgICAgICAvLyBXcmFwIGFyb3VuZC5cbiAgICAgICAgICBpZiAoJGV2ZW50LmtleSA9PT0gJ0Fycm93RG93bicpIHtcbiAgICAgICAgICAgIHNsaWNlRnJvbSA9IDA7XG4gICAgICAgICAgICBzbGljZVRvID0gY3VycmVudEluZGV4O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzbGljZUZyb20gPSBjdXJyZW50SW5kZXggKyAxO1xuICAgICAgICAgICAgc2xpY2VUbyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgaXRlbXMgPSB0aGlzLiNyZXBlYXRlclNlcnZpY2UuaXRlbXNcbiAgICAgICAgICAgIC5zbGljZShzbGljZUZyb20sIHNsaWNlVG8pXG4gICAgICAgICAgICAuZmlsdGVyKChpdGVtKSA9PiAhaXRlbS5kaXNhYmxlZCk7XG4gICAgICAgICAgYWN0aXZhdGVJdGVtID0gJGV2ZW50LmtleSA9PT0gJ0Fycm93VXAnID8gaXRlbXMucG9wKCkgOiBpdGVtcy5zaGlmdCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgaWYgKGFjdGl2YXRlSXRlbSAmJiAhYWN0aXZhdGVJdGVtLmlzQWN0aXZlKSB7XG4gICAgICAgIHRoaXMuI3JlcGVhdGVyU2VydmljZS5hY3RpdmF0ZUl0ZW0oYWN0aXZhdGVJdGVtKTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICEoYWN0aXZhdGVJdGVtLiNlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQgYXMgRWxlbWVudCkubWF0Y2hlcyhcbiAgICAgICAgICAgICc6Zm9jdXMtd2l0aGluJyxcbiAgICAgICAgICApXG4gICAgICAgICkge1xuICAgICAgICAgIGFjdGl2YXRlSXRlbS5pdGVtUmVmPy5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgaGVhZGVyQ2xpY2soKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNDb2xsYXBzaWJsZSkge1xuICAgICAgdGhpcy51cGRhdGVGb3JFeHBhbmRlZCghdGhpcy5pc0V4cGFuZGVkLCB0cnVlKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgY2hldnJvbkRpcmVjdGlvbkNoYW5nZShkaXJlY3Rpb246IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMudXBkYXRlRm9yRXhwYW5kZWQoZGlyZWN0aW9uID09PSAndXAnLCB0cnVlKTtcbiAgfVxuXG4gIHB1YmxpYyBvblJlcGVhdGVySXRlbUNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgLy8gT25seSBhY3RpdmF0ZSBpdGVtIGlmIGNsaWNraW5nIG9uIHRoZSB0aXRsZSwgY29udGVudCwgb3IgcGFyZW50IGl0ZW0gZGl2LlxuICAgIC8vIFRoaXMgd2lsbCBhdm9pZCBhY2NpZGVudGFsIGFjdGl2YXRpb25zIHdoZW4gY2xpY2tpbmcgaW5zaWRlIGludGVyYWN0aXZlIGVsZW1lbnRzIGxpa2VcbiAgICAvLyB0aGUgZXhwYW5kL2NvbGxhcHNlIGNoZXZyb24sIGRyb3Bkb3duLCBpbmxpbmUtZGVsZXRlLCBldGMuLi5cbiAgICBpZiAoXG4gICAgICBldmVudC50YXJnZXQgPT09IHRoaXMuaXRlbVJlZj8ubmF0aXZlRWxlbWVudCB8fFxuICAgICAgdGhpcy5pdGVtQ29udGVudFJlZj8ubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpIHx8XG4gICAgICB0aGlzLml0ZW1IZWFkZXJSZWY/Lm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KVxuICAgICkge1xuICAgICAgdGhpcy4jcmVwZWF0ZXJTZXJ2aWNlLmFjdGl2YXRlSXRlbSh0aGlzKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlRm9yRXhwYW5kZWQodmFsdWU6IGJvb2xlYW4sIGFuaW1hdGU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0NvbGxhcHNpYmxlID09PSBmYWxzZSAmJiB2YWx1ZSA9PT0gZmFsc2UpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgYFNldHRpbmcgaXNFeHBhbmRlZCB0byBmYWxzZSB3aGVuIHRoZSByZXBlYXRlciBpdGVtIGlzIG5vdCBjb2xsYXBzaWJsZVxuICAgICAgICB3aWxsIGhhdmUgbm8gZWZmZWN0LmAsXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAodGhpcy4jaXNFeHBhbmRlZCAhPT0gdmFsdWUpIHtcbiAgICAgIHRoaXMuI2lzRXhwYW5kZWQgPSB2YWx1ZTtcblxuICAgICAgaWYgKHRoaXMuI2lzRXhwYW5kZWQpIHtcbiAgICAgICAgdGhpcy5leHBhbmQuZW1pdCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jb2xsYXBzZS5lbWl0KCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuI3JlcGVhdGVyU2VydmljZS5vbkl0ZW1Db2xsYXBzZVN0YXRlQ2hhbmdlKHRoaXMpO1xuICAgICAgdGhpcy4jc2xpZGVGb3JFeHBhbmRlZChhbmltYXRlKTtcbiAgICAgIHRoaXMuI2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvbkNoZWNrYm94Q2hhbmdlKHZhbHVlOiBTa3lDaGVja2JveENoYW5nZSk6IHZvaWQge1xuICAgIHRoaXMuaXNTZWxlY3RlZCA9IHZhbHVlLmNoZWNrZWQ7XG4gIH1cblxuICBwdWJsaWMgb25JbmxpbmVGb3JtQ2xvc2UoaW5saW5lRm9ybUNsb3NlQXJnczogU2t5SW5saW5lRm9ybUNsb3NlQXJncyk6IHZvaWQge1xuICAgIHRoaXMuaW5saW5lRm9ybUNsb3NlLmVtaXQoaW5saW5lRm9ybUNsb3NlQXJncyk7XG4gIH1cblxuICBwdWJsaWMgbW92ZVRvVG9wKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuI2FkYXB0ZXJTZXJ2aWNlLm1vdmVJdGVtVXAodGhpcy4jZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCB0cnVlKTtcbiAgICB0aGlzLiNhZGFwdGVyU2VydmljZS5mb2N1c0VsZW1lbnQoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KTtcbiAgICB0aGlzLiNyZXBlYXRlclNlcnZpY2UucmVnaXN0ZXJPcmRlckNoYW5nZSgpO1xuICB9XG5cbiAgcHVibGljIG9uUmVvcmRlckhhbmRsZUtleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAvKmlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKGV2ZW50LmtleSkge1xuICAgICAgc3dpdGNoIChldmVudC5rZXkudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICBjYXNlICcgJzpcbiAgICAgICAgY2FzZSAnZW50ZXInOlxuICAgICAgICAgIHRoaXMuI2tleWJvYXJkVG9nZ2xlUmVvcmRlcigpO1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnZXNjYXBlJzpcbiAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICAgIGlmICh0aGlzLiNrZXlib2FyZFJlb3JkZXJpbmdFbmFibGVkKSB7XG4gICAgICAgICAgICB0aGlzLiNrZXlib2FyZFJlb3JkZXJpbmdFbmFibGVkID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLiNyZXZlcnRSZW9yZGVyU3RlcHMoKTtcbiAgICAgICAgICAgIHRoaXMucmVvcmRlckJ1dHRvbkxhYmVsID1cbiAgICAgICAgICAgICAgdGhpcy4jcmVvcmRlckNhbmNlbFRleHQgKyAnICcgKyB0aGlzLiNyZW9yZGVySW5zdHJ1Y3Rpb25zO1xuICAgICAgICAgICAgdGhpcy4jYWRhcHRlclNlcnZpY2UuZm9jdXNFbGVtZW50KGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCk7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ2Fycm93dXAnOlxuICAgICAgICAgIGlmICh0aGlzLiNrZXlib2FyZFJlb3JkZXJpbmdFbmFibGVkKSB7XG4gICAgICAgICAgICB0aGlzLiNrZXlib2FyZFJlb3JkZXJVcCgpO1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgdGhpcy4jcmVwZWF0ZXJTZXJ2aWNlLnJlZ2lzdGVyT3JkZXJDaGFuZ2UoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnYXJyb3dkb3duJzpcbiAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICAgIGlmICh0aGlzLiNrZXlib2FyZFJlb3JkZXJpbmdFbmFibGVkKSB7XG4gICAgICAgICAgICB0aGlzLiNrZXlib2FyZFJlb3JkZXJEb3duKCk7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICB0aGlzLiNyZXBlYXRlclNlcnZpY2UucmVnaXN0ZXJPcmRlckNoYW5nZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdhcnJvd2xlZnQnOlxuICAgICAgICBjYXNlICdhcnJvd3JpZ2h0JzpcbiAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICAgIGlmICh0aGlzLiNrZXlib2FyZFJlb3JkZXJpbmdFbmFibGVkKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG9uUmVvcmRlckhhbmRsZUJsdXIoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuI2tleWJvYXJkUmVvcmRlcmluZ0VuYWJsZWQgPSBmYWxzZTtcbiAgICB0aGlzLiNyZXZlcnRSZW9yZGVyU3RlcHMoKTtcbiAgICB0aGlzLnJlb3JkZXJCdXR0b25MYWJlbCA9IHRoaXMuI3Jlb3JkZXJJbnN0cnVjdGlvbnM7XG4gICAgdGhpcy5yZW9yZGVyU3RhdGUgPSB1bmRlZmluZWQ7XG4gIH1cblxuICAjc2xpZGVGb3JFeHBhbmRlZChhbmltYXRlOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5hbmltYXRpb25EaXNhYmxlZCA9ICFhbmltYXRlO1xuICAgIHRoaXMuc2xpZGVEaXJlY3Rpb24gPSB0aGlzLmlzRXhwYW5kZWQgPyAnZG93bicgOiAndXAnO1xuICB9XG5cbiAgI2tleWJvYXJkUmVvcmRlclVwKCk6IHZvaWQge1xuICAgIGNvbnN0IG5ld0luZGV4ID0gdGhpcy4jYWRhcHRlclNlcnZpY2UubW92ZUl0ZW1VcChcbiAgICAgIHRoaXMuI2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICApO1xuICAgIGlmIChuZXdJbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLiNyZW9yZGVyQ3VycmVudEluZGV4ID0gbmV3SW5kZXg7XG4gICAgICB0aGlzLiNyZW9yZGVyU3RlcHMtLTtcbiAgICAgIHRoaXMuI2FkYXB0ZXJTZXJ2aWNlLmZvY3VzRWxlbWVudCh0aGlzLmdyYWJIYW5kbGUpO1xuICAgICAgdGhpcy4ja2V5Ym9hcmRSZW9yZGVyaW5nRW5hYmxlZCA9IHRydWU7XG4gICAgICB0aGlzLnJlb3JkZXJCdXR0b25MYWJlbCA9IGAke3RoaXMuI3Jlb3JkZXJNb3ZlZFRleHR9ICR7XG4gICAgICAgIHRoaXMuI3Jlb3JkZXJDdXJyZW50SW5kZXggKyAxXG4gICAgICB9YDtcbiAgICB9XG4gIH1cblxuICAja2V5Ym9hcmRSZW9yZGVyRG93bigpOiB2b2lkIHtcbiAgICBjb25zdCBuZXdJbmRleCA9IHRoaXMuI2FkYXB0ZXJTZXJ2aWNlLm1vdmVJdGVtRG93bihcbiAgICAgIHRoaXMuI2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICApO1xuICAgIGlmIChuZXdJbmRleCkge1xuICAgICAgdGhpcy4jcmVvcmRlckN1cnJlbnRJbmRleCA9IG5ld0luZGV4O1xuICAgICAgdGhpcy4jcmVvcmRlclN0ZXBzKys7XG4gICAgICB0aGlzLiNhZGFwdGVyU2VydmljZS5mb2N1c0VsZW1lbnQodGhpcy5ncmFiSGFuZGxlKTtcbiAgICAgIHRoaXMuI2tleWJvYXJkUmVvcmRlcmluZ0VuYWJsZWQgPSB0cnVlO1xuICAgICAgdGhpcy5yZW9yZGVyQnV0dG9uTGFiZWwgPSBgJHt0aGlzLiNyZW9yZGVyTW92ZWRUZXh0fSAke1xuICAgICAgICB0aGlzLiNyZW9yZGVyQ3VycmVudEluZGV4ICsgMVxuICAgICAgfWA7XG4gICAgfVxuICB9XG5cbiAgI2tleWJvYXJkVG9nZ2xlUmVvcmRlcigpOiB2b2lkIHtcbiAgICB0aGlzLiNrZXlib2FyZFJlb3JkZXJpbmdFbmFibGVkID0gIXRoaXMuI2tleWJvYXJkUmVvcmRlcmluZ0VuYWJsZWQ7XG4gICAgdGhpcy4jcmVvcmRlclN0ZXBzID0gMDtcblxuICAgIGlmICh0aGlzLiNrZXlib2FyZFJlb3JkZXJpbmdFbmFibGVkKSB7XG4gICAgICB0aGlzLnJlb3JkZXJTdGF0ZSA9IHRoaXMuI3Jlb3JkZXJTdGF0ZURlc2NyaXB0aW9uO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUT0RPOiBOZWVkcyBpbXByb3ZlbWVudCB0byBiZSBsb2NhbGl6ZWRcbiAgICAgIHRoaXMucmVvcmRlclN0YXRlID0gYCR7dGhpcy4jcmVvcmRlckZpbmlzaFRleHR9ICR7XG4gICAgICAgIHRoaXMuI3Jlb3JkZXJDdXJyZW50SW5kZXggKyAxXG4gICAgICB9ICR7dGhpcy4jcmVvcmRlckluc3RydWN0aW9uc31gO1xuICAgICAgdGhpcy4jcmVvcmRlckN1cnJlbnRJbmRleCA9IC0xO1xuICAgIH1cbiAgfVxuXG4gICNyZXZlcnRSZW9yZGVyU3RlcHMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuI3Jlb3JkZXJTdGVwcyA8IDApIHtcbiAgICAgIHRoaXMuI2FkYXB0ZXJTZXJ2aWNlLm1vdmVJdGVtRG93bihcbiAgICAgICAgdGhpcy4jZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgICBNYXRoLmFicyh0aGlzLiNyZW9yZGVyU3RlcHMpLFxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuI3Jlb3JkZXJTdGVwcyA+IDApIHtcbiAgICAgIHRoaXMuI2FkYXB0ZXJTZXJ2aWNlLm1vdmVJdGVtVXAoXG4gICAgICAgIHRoaXMuI2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICAgZmFsc2UsXG4gICAgICAgIHRoaXMuI3Jlb3JkZXJTdGVwcyxcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMuI3JlcGVhdGVyU2VydmljZS5yZWdpc3Rlck9yZGVyQ2hhbmdlKCk7XG4gIH1cblxuICAjdXBkYXRlQ29udGVudEluZm8oKTogdm9pZCB7XG4gICAgLy8gVGhlIGBzZXRUaW1lb3V0YCBoZXJlIGlzIG5lY2Vzc2FyeSB0byBjb3VudGVyYWN0IHRoZSB0aW1pbmcgZm9yIGNoYW5nZSBkZXRlY3Rpb24gd2l0aCB0aGUgY29udGVudCBjaGlsZCBmb3IgdGhlIHRpdGxlIGNvbXBvbmVudC5cbiAgICAvLyBCZWNhdXNlIHRoZSB0aXRsZSBjb21wb25lbnQgaXMgcmVuZGVyZWQgd2l0aGluIGEgdGVtcGxhdGUgcmVmIC0gdGhlIGxvYWRpbmcgb2YgdGhlIGNvbnRlbnQgY2hpbGQgYW5kIHRoZW4gYWN0aW5nIHVwb24gdGhhdCBjYW4gY2F1c2UgXCJjaGFuZ2VkIGFmdGVyIGNoZWNrZWRcIiBlcnJvcnMuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5pdGVtTmFtZSkge1xuICAgICAgICB0aGlzLiNjb250ZW50SW5mb1Byb3ZpZGVyLnBhdGNoSW5mbyh7XG4gICAgICAgICAgZGVzY3JpcHRvcjogeyB0eXBlOiAndGV4dCcsIHZhbHVlOiB0aGlzLml0ZW1OYW1lIH0sXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLiN0aXRsZUNvbXBvbmVudCkge1xuICAgICAgICB0aGlzLnRpdGxlSWQgPSB0aGlzLiNpZFN2Yy5nZW5lcmF0ZUlkKCk7XG5cbiAgICAgICAgdGhpcy4jY29udGVudEluZm9Qcm92aWRlci5wYXRjaEluZm8oe1xuICAgICAgICAgIGRlc2NyaXB0b3I6IHtcbiAgICAgICAgICAgIHR5cGU6ICdlbGVtZW50SWQnLFxuICAgICAgICAgICAgdmFsdWU6IHRoaXMudGl0bGVJZCxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudGl0bGVJZCA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gICN1cGRhdGVFeHBhbmRPbkNvbnRlbnRDaGFuZ2UoKTogdm9pZCB7XG4gICAgdGhpcy5yZXBlYXRlckl0ZW1Db250ZW50Q29tcG9uZW50cz8uY2hhbmdlc1xuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuI25nVW5zdWJzY3JpYmUpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuaGFzSXRlbUNvbnRlbnQgPSAhIXRoaXMucmVwZWF0ZXJJdGVtQ29udGVudENvbXBvbmVudHM/Lmxlbmd0aDtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgdGhpcy5pc0NvbGxhcHNpYmxlID1cbiAgICAgICAgICB0aGlzLmhhc0l0ZW1Db250ZW50ICYmIHRoaXMuI3JlcGVhdGVyU2VydmljZS5leHBhbmRNb2RlICE9PSAnbm9uZSc7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgIGlmICh0aGlzLiNyZXBlYXRlclNlcnZpY2UuZXhwYW5kTW9kZSA9PT0gJ3NpbmdsZScpIHtcbiAgICAgICAgICB0aGlzLiNyZXBlYXRlclNlcnZpY2Uub25JdGVtQ29sbGFwc2VTdGF0ZUNoYW5nZSh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cbn1cbiIsIjxkaXZcbiAgY2xhc3M9XCJza3ktcmVwZWF0ZXItaXRlbSBza3ktcGFkZGluZy1ldmVuLWRlZmF1bHRcIlxuICBbYXR0ci5hcmlhLWxhYmVsXT1cIml0ZW1OYW1lXCJcbiAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cIml0ZW1OYW1lIHx8IHRpdGxlSWRcIlxuICBbYXR0ci5hcmlhLXNlbGVjdGVkXT1cInNlbGVjdGFibGUgPyAhIWlzU2VsZWN0ZWQgOiB1bmRlZmluZWRcIlxuICBbYXR0ci5yb2xlXT1cIihpdGVtUm9sZSQgfCBhc3luYyk/Lml0ZW1cIlxuICBbYXR0ci50YWJJbmRleF09XCJ0YWJpbmRleFwiXG4gIFtuZ0NsYXNzXT1cIntcbiAgICAnc2t5LXJlcGVhdGVyLWl0ZW0tYWN0aXZlJzogaXNBY3RpdmUsXG4gICAgJ3NreS1yZXBlYXRlci1pdGVtLWNvbGxhcHNpYmxlJzogaXNDb2xsYXBzaWJsZSxcbiAgICAnc2t5LXJlcGVhdGVyLWl0ZW0tc2VsZWN0ZWQnOiBpc1NlbGVjdGVkXG4gIH1cIlxuICAoY2xpY2spPVwib25SZXBlYXRlckl0ZW1DbGljaygkZXZlbnQpXCJcbiAgI2l0ZW1SZWZcbj5cbiAgPGRpdiAjaW5saW5lRGVsZXRlPlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cInNreS1pbmxpbmUtZGVsZXRlXCIgLz5cbiAgPC9kaXY+XG5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlubGluZUZvcm1UZW1wbGF0ZVwiPlxuICAgIDxza3ktaW5saW5lLWZvcm1cbiAgICAgIFtjb25maWddPVwiaW5saW5lRm9ybUNvbmZpZ1wiXG4gICAgICBbc2hvd0Zvcm1dPVwic2hvd0lubGluZUZvcm1cIlxuICAgICAgW3RlbXBsYXRlXT1cImlubGluZUZvcm1UZW1wbGF0ZVwiXG4gICAgICAoY2xvc2UpPVwib25JbmxpbmVGb3JtQ2xvc2UoJGV2ZW50KVwiXG4gICAgPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInNreVJlcGVhdGVySXRlbUxlZnRcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJza3lSZXBlYXRlckl0ZW1SaWdodFwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvc2t5LWlubGluZS1mb3JtPlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlubGluZUZvcm1UZW1wbGF0ZVwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJza3lSZXBlYXRlckl0ZW1MZWZ0XCI+PC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInNreVJlcGVhdGVySXRlbVJpZ2h0XCI+PC9uZy1jb250YWluZXI+XG4gIDwvbmctY29udGFpbmVyPlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjc2t5UmVwZWF0ZXJJdGVtTGVmdD5cbiAgPGRpdlxuICAgIFthdHRyLnJvbGVdPVwiIXNob3dJbmxpbmVGb3JtID8gKGl0ZW1Sb2xlJCB8IGFzeW5jKT8uY29udGVudCA6IHVuZGVmaW5lZFwiXG4gICAgY2xhc3M9XCJza3ktcmVwZWF0ZXItaXRlbS1sZWZ0XCJcbiAgPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJyZW9yZGVyYWJsZVwiPlxuICAgICAgPHNwYW5cbiAgICAgICAgYXJpYS1saXZlPVwiYXNzZXJ0aXZlXCJcbiAgICAgICAgY2xhc3M9XCJza3ktc2NyZWVuLXJlYWRlci1vbmx5XCJcbiAgICAgICAgW2lkXT1cImNvbnRlbnRJZCArICctcmVvcmRlci1zdGF0ZSdcIlxuICAgICAgPlxuICAgICAgICB7eyByZW9yZGVyU3RhdGUgfX1cbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxzcGFuXG4gICAgICAgIGNsYXNzPVwic2t5LXNjcmVlbi1yZWFkZXItb25seVwiXG4gICAgICAgIFtpZF09XCJjb250ZW50SWQgKyAnLXJlb3JkZXItaW5zdHJ1Y3Rpb25zJ1wiXG4gICAgICAgID57eyByZW9yZGVyQnV0dG9uTGFiZWwgfX08L3NwYW5cbiAgICAgID5cbiAgICAgIDxidXR0b25cbiAgICAgICAgY2xhc3M9XCJza3ktYnRuIHNreS10aWxlLXRvb2xzLWNvbnRyb2wgc2t5LXJlcGVhdGVyLWl0ZW0tZ3JhYi1oYW5kbGVcIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgW2F0dHIuYXJpYS1kZXNjcmliZWRieV09XCJjb250ZW50SWQgKyAnLXJlb3JkZXItaW5zdHJ1Y3Rpb25zJ1wiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiXG4gICAgICAgICAgaXRlbU5hbWVcbiAgICAgICAgICAgID8gKCdza3l1eF9yZXBlYXRlcl9pdGVtX3Jlb3JkZXJfbGFiZWwnIHwgc2t5TGliUmVzb3VyY2VzIDogaXRlbU5hbWUpXG4gICAgICAgICAgICA6ICgnc2t5dXhfcmVwZWF0ZXJfaXRlbV9yZW9yZGVyX2xhYmVsX2RlZmF1bHQnIHwgc2t5TGliUmVzb3VyY2VzKVxuICAgICAgICBcIlxuICAgICAgICAoYmx1cik9XCJvblJlb3JkZXJIYW5kbGVCbHVyKCRldmVudClcIlxuICAgICAgICAoa2V5ZG93bik9XCJvblJlb3JkZXJIYW5kbGVLZXlEb3duKCRldmVudClcIlxuICAgICAgICAjZ3JhYkhhbmRsZVxuICAgICAgPlxuICAgICAgICA8c2t5LWljb24gaWNvbj1cImFycm93cy12XCIgLz5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxza3ktY2hlY2tib3hcbiAgICAgICpuZ0lmPVwic2VsZWN0YWJsZVwiXG4gICAgICBjbGFzcz1cInNreS1yZXBlYXRlci1pdGVtLWNoZWNrYm94XCJcbiAgICAgIFtjaGVja2VkXT1cImlzU2VsZWN0ZWRcIlxuICAgICAgW2xhYmVsXT1cIlxuICAgICAgICBpdGVtTmFtZVxuICAgICAgICAgID8gKCdza3l1eF9yZXBlYXRlcl9pdGVtX2NoZWNrYm94X2xhYmVsJyB8IHNreUxpYlJlc291cmNlcyA6IGl0ZW1OYW1lKVxuICAgICAgICAgIDogKCdza3l1eF9yZXBlYXRlcl9pdGVtX2NoZWNrYm94X2xhYmVsX2RlZmF1bHQnIHwgc2t5TGliUmVzb3VyY2VzKVxuICAgICAgXCJcbiAgICAgIChjaGFuZ2UpPVwib25DaGVja2JveENoYW5nZSgkZXZlbnQpXCJcbiAgICA+XG4gICAgPC9za3ktY2hlY2tib3g+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJza3ktcmVwZWF0ZXItaXRlbS1jb250ZXh0LW1lbnVcIlxuICAgICAgW2hpZGRlbl09XCJjb250ZXh0TWVudUVsLmNoaWxkcmVuLmxlbmd0aCA9PT0gMFwiXG4gICAgICAjY29udGV4dE1lbnVFbFxuICAgID5cbiAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cInNreS1yZXBlYXRlci1pdGVtLWNvbnRleHQtbWVudVwiIC8+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNza3lSZXBlYXRlckl0ZW1SaWdodD5cbiAgPGRpdiBjbGFzcz1cInNreS1yZXBlYXRlci1pdGVtLXJpZ2h0XCIgI2l0ZW1IZWFkZXJSZWY+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJza3ktcmVwZWF0ZXItaXRlbS1oZWFkZXJcIlxuICAgICAgW2F0dHIucm9sZV09XCIoaXRlbVJvbGUkIHwgYXN5bmMpPy50aXRsZVwiXG4gICAgICBbaGlkZGVuXT1cInRpdGxlUmVmLmNoaWxkcmVuLmxlbmd0aCA9PT0gMFwiXG4gICAgICAoY2xpY2spPVwiaGVhZGVyQ2xpY2soKVwiXG4gICAgPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cInNreS1yZXBlYXRlci1pdGVtLXRpdGxlIHNreS1mb250LWVtcGhhc2l6ZWRcIlxuICAgICAgICBbYXR0ci5pZF09XCJ0aXRsZUlkXCJcbiAgICAgICAgI3RpdGxlUmVmXG4gICAgICA+XG4gICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cInNreS1yZXBlYXRlci1pdGVtLXRpdGxlXCIgLz5cbiAgICAgIDwvZGl2PlxuICAgICAgPGJ1dHRvblxuICAgICAgICAqbmdJZj1cInJlb3JkZXJhYmxlXCJcbiAgICAgICAgY2xhc3M9XCJza3ktYnRuIHNreS1idG4tbGluayBza3ktcmVwZWF0ZXItaXRlbS1yZW9yZGVyLXRvcFwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIlxuICAgICAgICAgIGl0ZW1OYW1lXG4gICAgICAgICAgICA/ICgnc2t5dXhfcmVwZWF0ZXJfaXRlbV9yZW9yZGVyX3RvcF9sYWJlbCdcbiAgICAgICAgICAgICAgfCBza3lMaWJSZXNvdXJjZXMgOiBpdGVtTmFtZSlcbiAgICAgICAgICAgIDogKCdza3l1eF9yZXBlYXRlcl9pdGVtX3Jlb3JkZXJfdG9wX2xhYmVsX2RlZmF1bHQnXG4gICAgICAgICAgICAgIHwgc2t5TGliUmVzb3VyY2VzKVxuICAgICAgICBcIlxuICAgICAgICAoY2xpY2spPVwibW92ZVRvVG9wKCRldmVudClcIlxuICAgICAgPlxuICAgICAgICA8c2t5LWljb24gaWNvbj1cImFycm93LWNpcmNsZS11cFwiIC8+XG4gICAgICAgIHt7ICdza3l1eF9yZXBlYXRlcl9pdGVtX3Jlb3JkZXJfdG9wJyB8IHNreUxpYlJlc291cmNlcyB9fVxuICAgICAgPC9idXR0b24+XG4gICAgICA8ZGl2ICpuZ0lmPVwiaXNDb2xsYXBzaWJsZVwiIGNsYXNzPVwic2t5LXJlcGVhdGVyLWl0ZW0tY2hldnJvblwiPlxuICAgICAgICA8c2t5LWNoZXZyb25cbiAgICAgICAgICBbYXJpYUNvbnRyb2xzXT1cImNvbnRlbnRJZFwiXG4gICAgICAgICAgW2FyaWFMYWJlbF09XCJcbiAgICAgICAgICAgIGl0ZW1OYW1lXG4gICAgICAgICAgICAgID8gaXNFeHBhbmRlZFxuICAgICAgICAgICAgICAgID8gKCdza3l1eF9yZXBlYXRlcl9pdGVtX2V4cGFuZCcgfCBza3lMaWJSZXNvdXJjZXMgOiBpdGVtTmFtZSlcbiAgICAgICAgICAgICAgICA6ICgnc2t5dXhfcmVwZWF0ZXJfaXRlbV9jb2xsYXBzZScgfCBza3lMaWJSZXNvdXJjZXMgOiBpdGVtTmFtZSlcbiAgICAgICAgICAgICAgOiBpc0V4cGFuZGVkXG4gICAgICAgICAgICAgID8gKCdza3l1eF9yZXBlYXRlcl9pdGVtX2V4cGFuZF9kZWZhdWx0JyB8IHNreUxpYlJlc291cmNlcylcbiAgICAgICAgICAgICAgOiAoJ3NreXV4X3JlcGVhdGVyX2l0ZW1fY29sbGFwc2VfZGVmYXVsdCcgfCBza3lMaWJSZXNvdXJjZXMpXG4gICAgICAgICAgXCJcbiAgICAgICAgICBbZGlyZWN0aW9uXT1cImlzRXhwYW5kZWQgPyAndXAnIDogJ2Rvd24nXCJcbiAgICAgICAgICAoZGlyZWN0aW9uQ2hhbmdlKT1cImNoZXZyb25EaXJlY3Rpb25DaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgID5cbiAgICAgICAgPC9za3ktY2hldnJvbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPCEtLSBVc2VkIGZvciB3aGVuIHRoZSBjaGV2cm9uIGlzIGhpZGRlbiB0byBlbnN1cmUgdGhhdCB0aGUgcmlnaHQgc2lkZSBpcyB0aGUgc2FtZSBoZWlnaHQgYXMgdGhlIGxlZnQuLS0+XG4gICAgICA8ZGl2XG4gICAgICAgICpuZ0lmPVwiIWlzQ29sbGFwc2libGUgJiYgIWNvbnRleHRNZW51XCJcbiAgICAgICAgY2xhc3M9XCJza3ktcmVwZWF0ZXItaXRlbS1jaGV2cm9uLXBsYWNlaG9sZGVyXCJcbiAgICAgID48L2Rpdj5cbiAgICAgIDwhLS0gVXNlZCB0byBlbnN1cmUgdGhhdCB0aGUgcmlnaHQgc2lkZSBpcyB0aGUgc2FtZSBoZWlnaHQgYXMgdGhlIGxlZnQuLS0+XG4gICAgICA8ZGl2XG4gICAgICAgICpuZ0lmPVwiY29udGV4dE1lbnVcIlxuICAgICAgICBjbGFzcz1cInNreS1yZXBlYXRlci1pdGVtLWNoZXZyb24tcGxhY2Vob2xkZXItd2l0aC1jb250ZXh0XCJcbiAgICAgID48L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cInNreS1yZXBlYXRlci1pdGVtLWNvbnRlbnRcIlxuICAgICAgW2lkXT1cImNvbnRlbnRJZFwiXG4gICAgICBbQC5kaXNhYmxlZF09XCJhbmltYXRpb25EaXNhYmxlZFwiXG4gICAgICBbQHNreUFuaW1hdGlvblNsaWRlXT1cInNsaWRlRGlyZWN0aW9uXCJcbiAgICAgICNpdGVtQ29udGVudFJlZlxuICAgICAgW2F0dHIucm9sZV09XCIoaXRlbVJvbGUkIHwgYXN5bmMpPy5jb250ZW50XCJcbiAgICA+XG4gICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJza3ktcmVwZWF0ZXItaXRlbS1jb250ZW50XCIgLz5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
557
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwZWF0ZXItaXRlbS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvbGlzdHMvc3JjL2xpYi9tb2R1bGVzL3JlcGVhdGVyL3JlcGVhdGVyLWl0ZW0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2xpc3RzL3NyYy9saWIvbW9kdWxlcy9yZXBlYXRlci9yZXBlYXRlci1pdGVtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLGVBQWUsRUFDZixVQUFVLEVBQ1YsWUFBWSxFQUNaLFdBQVcsRUFDWCxZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sRUFHTixTQUFTLEVBQ1QsaUJBQWlCLEVBQ2pCLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsWUFBWSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBUW5FLE9BQU8sRUFBYyxPQUFPLEVBQUUsUUFBUSxJQUFJLGtCQUFrQixFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzNFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUczQyxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNwRixPQUFPLEVBQUUsbUNBQW1DLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUU3RixPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQzs7Ozs7Ozs7O0FBR2hGLElBQUksYUFBYSxHQUFHLENBQUMsQ0FBQztBQUV0Qjs7R0FFRztBQVNILE1BQU0sT0FBTyx3QkFBd0I7SUFHbkM7Ozs7T0FJRztJQUNILElBQVcsUUFBUTtRQUNq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QUFjO3NCQURwQixTQUFTO3VCQUFDLGdCQUFnQixFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkFJMUMsYUFBYTtzQkFEbkIsU0FBUzt1QkFBQyxlQUFlLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQUl6QyxPQUFPO3NCQURiLFNBQVM7dUJBQUMsU0FBUyxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkFJL0IsY0FBYztzQkFEeEIsWUFBWTt1QkFBQyw2QkFBNkIsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7Z0JBTzFELDZCQUE2QjtzQkFEbkMsZUFBZTt1QkFBQywrQkFBK0I7Z0JBMkd6QyxTQUFTO3NCQURmLFlBQVk7dUJBQUMsU0FBUyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkLFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdEJpbmRpbmcsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFF1ZXJ5TGlzdCxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG4gIGluamVjdCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBza3lBbmltYXRpb25TbGlkZSB9IGZyb20gJ0Bza3l1eC9hbmltYXRpb25zJztcbmltcG9ydCB7IFNreUNvbnRlbnRJbmZvUHJvdmlkZXIsIFNreUlkU2VydmljZSB9IGZyb20gJ0Bza3l1eC9jb3JlJztcbmltcG9ydCB7IFNreUNoZWNrYm94Q2hhbmdlIH0gZnJvbSAnQHNreXV4L2Zvcm1zJztcbmltcG9ydCB7IFNreUxpYlJlc291cmNlc1NlcnZpY2UgfSBmcm9tICdAc2t5dXgvaTE4bic7XG5pbXBvcnQge1xuICBTa3lJbmxpbmVGb3JtQ2xvc2VBcmdzLFxuICBTa3lJbmxpbmVGb3JtQ29uZmlnLFxufSBmcm9tICdAc2t5dXgvaW5saW5lLWZvcm0nO1xuXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0LCBmb3JrSm9pbiBhcyBvYnNlcnZhYmxlRm9ya0pvaW4gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgU2t5UmVwZWF0ZXJBZGFwdGVyU2VydmljZSB9IGZyb20gJy4vcmVwZWF0ZXItYWRhcHRlci5zZXJ2aWNlJztcbmltcG9ydCB7IFNreVJlcGVhdGVySXRlbUNvbnRlbnRDb21wb25lbnQgfSBmcm9tICcuL3JlcGVhdGVyLWl0ZW0tY29udGVudC5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2t5UmVwZWF0ZXJJdGVtQ29udGV4dE1lbnVDb21wb25lbnQgfSBmcm9tICcuL3JlcGVhdGVyLWl0ZW0tY29udGV4dC1tZW51LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTa3lSZXBlYXRlckl0ZW1Sb2xlc1R5cGUgfSBmcm9tICcuL3JlcGVhdGVyLWl0ZW0tcm9sZXMudHlwZSc7XG5pbXBvcnQgeyBTa3lSZXBlYXRlckl0ZW1UaXRsZUNvbXBvbmVudCB9IGZyb20gJy4vcmVwZWF0ZXItaXRlbS10aXRsZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2t5UmVwZWF0ZXJTZXJ2aWNlIH0gZnJvbSAnLi9yZXBlYXRlci5zZXJ2aWNlJztcblxubGV0IG5leHRDb250ZW50SWQgPSAwO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gaW5kaXZpZHVhbCByZXBlYXRlciBpdGVtLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdza3ktcmVwZWF0ZXItaXRlbScsXG4gIHN0eWxlVXJsczogWycuL3JlcGVhdGVyLWl0ZW0uY29tcG9uZW50LnNjc3MnXSxcbiAgdGVtcGxhdGVVcmw6ICcuL3JlcGVhdGVyLWl0ZW0uY29tcG9uZW50Lmh0bWwnLFxuICBhbmltYXRpb25zOiBbc2t5QW5pbWF0aW9uU2xpZGVdLFxuICBwcm92aWRlcnM6IFtTa3lDb250ZW50SW5mb1Byb3ZpZGVyXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbn0pXG5leHBvcnQgY2xhc3MgU2t5UmVwZWF0ZXJJdGVtQ29tcG9uZW50XG4gIGltcGxlbWVudHMgT25EZXN0cm95LCBPbkluaXQsIEFmdGVyVmlld0luaXRcbntcbiAgLyoqXG4gICAqIE1ha2UgdGhlIGZpcnN0LCBub24tZGlzYWJsZWQgaXRlbSB0YWItZm9jdXNhYmxlLlxuICAgKiAtIERpc2FibGVkIGl0ZW1zIHNob3VsZCBub3QgYmUgZm9jdXNhYmxlIHBlciBbVzNDXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtcHJhY3RpY2VzLTEuMS8ja2JkX2Rpc2FibGVkX2NvbnRyb2xzKS5cbiAgICogLSBPbmUgaXRlbSBwZXIgbGlzdC9ncmlkL2xpc3Rib3ggc2hvdWxkIGJlIHRhYiBmb2N1c2FibGUgcGVyIFtXM0NdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS1wcmFjdGljZXMtMS4xLyNncmlkKS5cbiAgICovXG4gIHB1YmxpYyBnZXQgdGFiaW5kZXgoKTogMCB8IC0xIHtcbiAgICByZXR1cm4gdGhpcy4jcmVwZWF0ZXJTZXJ2aWNlLml0ZW1zLmZpbHRlcigoaXRlbSkgPT4gIWl0ZW0uZGlzYWJsZWQpWzBdID09PVxuICAgICAgdGhpc1xuICAgICAgPyAwXG4gICAgICA6IC0xO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZXhjbHVkZSBhbiBpdGVtIHdoZW4gY3ljbGluZyB0aHJvdWdoLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBkaXNhYmxlZCh2YWx1ZTogYm9vbGVhbiB8IHVuZGVmaW5lZCkge1xuICAgIGlmICh0aGlzLiNfaXNEaXNhYmxlZCAhPT0gdmFsdWUpIHtcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICB0aGlzLmlzU2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy4jX2lzRGlzYWJsZWQgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy4jX2lzRGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmlzQWN0aXZlKSB7XG4gICAgICAgIHRoaXMuI3JlcGVhdGVyU2VydmljZS5hY3RpdmF0ZUl0ZW1CeUluZGV4KHVuZGVmaW5lZCk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy4jZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Lm1hdGNoZXMoJzpmb2N1cy13aXRoaW4nKSkge1xuICAgICAgICB0aGlzLiNlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQub3duZXJEb2N1bWVudC5hY3RpdmVFbGVtZW50LmJsdXIoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuI2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLiNfaXNEaXNhYmxlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgaHVtYW4tcmVhZGFibGUgbmFtZSBmb3IgdGhlIHJlcGVhdGVyIGl0ZW0gdGhhdCBpcyBhdmFpbGFibGUgZm9yIG11bHRpcGxlIHB1cnBvc2VzLFxuICAgKiBzdWNoIGFzIGFjY2Vzc2liaWxpdHkgYW5kIGluc3RydW1lbnRhdGlvbi4gRm9yIGV4YW1wbGUsIHRoZSBjb21wb25lbnQgdXNlcyB0aGUgbmFtZSB0b1xuICAgKiBjb25zdHJ1Y3QgQVJJQSBsYWJlbHMgZm9yIHRoZSByZXBlYXRlciBpdGVtIGNvbnRyb2xzXG4gICAqIHRvIFtzdXBwb3J0IGFjY2Vzc2liaWxpdHldKGh0dHBzOi8vZGV2ZWxvcGVyLmJsYWNrYmF1ZC5jb20vc2t5dXgvbGVhcm4vYWNjZXNzaWJpbGl0eSkuXG4gICAqIElmIG5vdCBzcGVjaWZpZWQsIHRoZSByZXBlYXRlciBpdGVtJ3MgdGl0bGUgd2lsbCBiZSB1c2VkIGZvciB0aGlzIHZhbHVlLlxuICAgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgYGFyaWEtbGFiZWxgIGF0dHJpYnV0ZSwgc2VlIHRoZSBbV0FJLUFSSUEgZGVmaW5pdGlvbl0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLyNhcmlhLWxhYmVsKS5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgaXRlbU5hbWUodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuI19pdGVtTmFtZSA9IHZhbHVlO1xuICAgIHRoaXMuI3VwZGF0ZUNvbnRlbnRJbmZvKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGl0ZW1OYW1lKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuI19pdGVtTmFtZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBidXR0b25zIHRvIGRpc3BsYXkgb24gYW4gaW5saW5lIGZvcm1cbiAgICogd2l0aGluIHRoZSByZXBlYXRlci4gVGhpcyBwcm9wZXJ0eSBhY2NlcHRzXG4gICAqIFthIGBTa3lJbmxpbmVGb3JtQ29uZmlnYCBvYmplY3RdKGh0dHBzOi8vZGV2ZWxvcGVyLmJsYWNrYmF1ZC5jb20vc2t5dXgvY29tcG9uZW50cy9pbmxpbmUtZm9ybSNza3lpbmxpbmVmb3JtY29uZmlnLXByb3BlcnRpZXMpLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGlubGluZUZvcm1Db25maWc6IFNreUlubGluZUZvcm1Db25maWcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyBbYW4gQW5ndWxhciBgVGVtcGxhdGVSZWZgXShodHRwczovL2FuZ3VsYXIuaW8vYXBpL2NvcmUvVGVtcGxhdGVSZWYpIHRvIHVzZVxuICAgKiBhcyBhIHRlbXBsYXRlIHRvIGluc3RhbnRpYXRlIGFuIGlubGluZSBmb3JtIHdpdGhpbiB0aGUgcmVwZWF0ZXIuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgaW5saW5lRm9ybVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjx1bmtub3duPiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgcmVwZWF0ZXIgaXRlbSBpcyBleHBhbmRlZC5cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBpc0V4cGFuZGVkKHZhbHVlOiBib29sZWFuIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy51cGRhdGVGb3JFeHBhbmRlZCh2YWx1ZSAhPT0gZmFsc2UsIHRydWUpO1xuICB9XG5cbiAgcHVibGljIGdldCBpc0V4cGFuZGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLiNpc0V4cGFuZGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHJlcGVhdGVyIGl0ZW0ncyBjaGVja2JveCBpcyBzZWxlY3RlZC5cbiAgICogV2hlbiB1c2VycyBzZWxlY3QgdGhlIHJlcGVhdGVyIGl0ZW0sIHRoZSBzcGVjaWZpZWQgcHJvcGVydHkgb24geW91ciBtb2RlbCBpcyB1cGRhdGVkIGFjY29yZGluZ2x5LlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBpc1NlbGVjdGVkKHZhbHVlOiBib29sZWFuIHwgdW5kZWZpbmVkKSB7XG4gICAgaWYgKCF0aGlzLmRpc2FibGVkICYmIHZhbHVlICE9PSB0aGlzLiNfaXNTZWxlY3RlZCkge1xuICAgICAgdGhpcy4jX2lzU2VsZWN0ZWQgPSB2YWx1ZTtcbiAgICAgIHRoaXMuaXNTZWxlY3RlZENoYW5nZS5lbWl0KHRoaXMuI19pc1NlbGVjdGVkKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0IGlzU2VsZWN0ZWQoKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuI19pc1NlbGVjdGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdXNlcnMgY2FuIGNoYW5nZSB0aGUgb3JkZXIgb2YgdGhlIHJlcGVhdGVyIGl0ZW0uXG4gICAqIFRoZSByZXBlYXRlciBjb21wb25lbnQncyBgcmVvcmRlcmFibGVgIHByb3BlcnR5IG11c3QgYWxzbyBiZSBzZXQgdG8gYHRydWVgLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHJlb3JkZXJhYmxlOiBib29sZWFuIHwgdW5kZWZpbmVkID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZGlzcGxheSBhIGNoZWNrYm94IGluIHRoZSBsZWZ0IG9mIHRoZSByZXBlYXRlciBpdGVtLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNlbGVjdGFibGU6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSBmYWxzZTtcblxuICAvKipcbiAgICogV2hldGhlciB0byBkaXNwbGF5IGFuIGlubGluZSBmb3JtIHdpdGhpbiB0aGUgcmVwZWF0ZXIuXG4gICAqIFVzZXJzIGNhbiB0b2dnbGUgYmV0d2VlbiBkaXNwbGF5aW5nIGFuZCBoaWRpbmcgdGhlIGlubGluZSBmb3JtLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNob3dJbmxpbmVGb3JtOiBib29sZWFuIHwgdW5kZWZpbmVkID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFRoZSBvYmplY3QgdGhhdCB0aGUgcmVwZWF0ZXIgY29tcG9uZW50IHJldHVybnMgZm9yIHRoaXMgcmVwZWF0ZXIgaXRlbVxuICAgKiB3aGVuIHRoZSBgb3JkZXJDaGFuZ2VgIGV2ZW50IGZpcmVzLiBUaGlzIGlzIHJlcXVpcmVkXG4gICAqIGlmIHlvdSBzZXQgdGhlIGByZW9yZGVyYWJsZWAgcHJvcGVydHkgdG8gYHRydWVgLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHRhZzogYW55O1xuXG4gIC8qKlxuICAgKiBGaXJlcyB3aGVuIHVzZXJzIGNvbGxhcHNlIHRoZSByZXBlYXRlciBpdGVtLlxuICAgKi9cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBjb2xsYXBzZSA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAvKipcbiAgICogRmlyZXMgd2hlbiB1c2VycyBleHBhbmQgdGhlIHJlcGVhdGVyIGl0ZW0uXG4gICAqL1xuICBAT3V0cHV0KClcbiAgcHVibGljIGV4cGFuZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAvKipcbiAgICogRmlyZXMgd2hlbiB0aGUgcmVwZWF0ZXIgaW5jbHVkZXMgYW4gaW5saW5lIGZvcm0gYW5kIHVzZXJzIGNsb3NlIGl0LiBUaGlzIGV2ZW50IGVtaXRzXG4gICAqIFthIGBTa3lJbmxpbmVGb3JtQ2xvc2VBcmdzYCB0eXBlXShodHRwczovL2RldmVsb3Blci5ibGFja2JhdWQuY29tL3NreXV4L2NvbXBvbmVudHMvaW5saW5lLWZvcm0jc2t5aW5saW5lZm9ybWNsb3NlYXJncy1wcm9wZXJ0aWVzKS5cbiAgICovXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgaW5saW5lRm9ybUNsb3NlID0gbmV3IEV2ZW50RW1pdHRlcjxTa3lJbmxpbmVGb3JtQ2xvc2VBcmdzPigpO1xuXG4gIC8qKlxuICAgKiBGaXJlcyB3aGVuIHVzZXJzIHNlbGVjdCBvciBjbGVhciB0aGUgY2hlY2tib3ggZm9yIHRoZSByZXBlYXRlciBpdGVtLlxuICAgKi9cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBpc1NlbGVjdGVkQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gIEBDb250ZW50Q2hpbGQoU2t5UmVwZWF0ZXJJdGVtQ29udGV4dE1lbnVDb21wb25lbnQsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxuICBwdWJsaWMgY29udGV4dE1lbnU6IEVsZW1lbnRSZWYgfCB1bmRlZmluZWQ7XG5cbiAgcHVibGljIGNvbnRlbnRJZDogc3RyaW5nO1xuXG4gIHB1YmxpYyBoYXNJdGVtQ29udGVudCA9IGZhbHNlO1xuXG4gIHB1YmxpYyBpc0FjdGl2ZSA9IGZhbHNlO1xuXG4gIHB1YmxpYyBzZXQgaXNDb2xsYXBzaWJsZSh2YWx1ZTogYm9vbGVhbiB8IHVuZGVmaW5lZCkge1xuICAgIGlmICh0aGlzLmlzQ29sbGFwc2libGUgIT09IHZhbHVlKSB7XG4gICAgICB0aGlzLiNfaXNDb2xsYXBzaWJsZSA9IHZhbHVlICE9PSBmYWxzZTtcblxuICAgICAgLyppc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgaWYgKCF0aGlzLiNfaXNDb2xsYXBzaWJsZSkge1xuICAgICAgICB0aGlzLnVwZGF0ZUZvckV4cGFuZGVkKHRydWUsIHRydWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuI2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHVibGljIGdldCBpc0NvbGxhcHNpYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLiNfaXNDb2xsYXBzaWJsZTtcbiAgfVxuXG4gIHB1YmxpYyBpdGVtUm9sZSQ6IE9ic2VydmFibGU8U2t5UmVwZWF0ZXJJdGVtUm9sZXNUeXBlPjtcblxuICBwdWJsaWMgcmVvcmRlckJ1dHRvbkxhYmVsID0gJyc7XG5cbiAgcHVibGljIHJlb3JkZXJTdGF0ZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIHB1YmxpYyBzbGlkZURpcmVjdGlvbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIHB1YmxpYyBhbmltYXRpb25EaXNhYmxlZCA9IGZhbHNlO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MnKVxuICBwdWJsaWMgZ2V0IHJlcGVhdGVyR3JvdXBDbGFzcygpOiBzdHJpbmcge1xuICAgIHJldHVybiAnc2t5LXJlcGVhdGVyLWl0ZW0tZ3JvdXAtJyArIHRoaXMuI3JlcGVhdGVyU2VydmljZS5yZXBlYXRlckdyb3VwSWQ7XG4gIH1cblxuICBAVmlld0NoaWxkKCdncmFiSGFuZGxlJywgeyByZWFkOiBFbGVtZW50UmVmIH0pXG4gIHB1YmxpYyBncmFiSGFuZGxlOiBFbGVtZW50UmVmIHwgdW5kZWZpbmVkO1xuXG4gIEBWaWV3Q2hpbGQoJ2l0ZW1Db250ZW50UmVmJywgeyByZWFkOiBFbGVtZW50UmVmIH0pXG4gIHB1YmxpYyBpdGVtQ29udGVudFJlZjogRWxlbWVudFJlZiB8IHVuZGVmaW5lZDtcblxuICBAVmlld0NoaWxkKCdpdGVtSGVhZGVyUmVmJywgeyByZWFkOiBFbGVtZW50UmVmIH0pXG4gIHB1YmxpYyBpdGVtSGVhZGVyUmVmOiBFbGVtZW50UmVmIHwgdW5kZWZpbmVkO1xuXG4gIEBWaWV3Q2hpbGQoJ2l0ZW1SZWYnLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgcHVibGljIGl0ZW1SZWY6IEVsZW1lbnRSZWYgfCB1bmRlZmluZWQ7XG5cbiAgQENvbnRlbnRDaGlsZChTa3lSZXBlYXRlckl0ZW1UaXRsZUNvbXBvbmVudCwgeyByZWFkOiBFbGVtZW50UmVmIH0pXG4gIHB1YmxpYyBzZXQgdGl0bGVDb21wb25lbnQodmFsdWU6IEVsZW1lbnRSZWYgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLiN0aXRsZUNvbXBvbmVudCA9IHZhbHVlO1xuICAgIHRoaXMuI3VwZGF0ZUNvbnRlbnRJbmZvKCk7XG4gIH1cblxuICBAQ29udGVudENoaWxkcmVuKFNreVJlcGVhdGVySXRlbUNvbnRlbnRDb21wb25lbnQpXG4gIHB1YmxpYyByZXBlYXRlckl0ZW1Db250ZW50Q29tcG9uZW50czpcbiAgICB8IFF1ZXJ5TGlzdDxTa3lSZXBlYXRlckl0ZW1Db250ZW50Q29tcG9uZW50PlxuICAgIHwgdW5kZWZpbmVkO1xuXG4gIHByb3RlY3RlZCB0aXRsZUlkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgI2FkYXB0ZXJTZXJ2aWNlOiBTa3lSZXBlYXRlckFkYXB0ZXJTZXJ2aWNlO1xuICAjY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmO1xuICAjY29udGVudEluZm9Qcm92aWRlciA9IGluamVjdChTa3lDb250ZW50SW5mb1Byb3ZpZGVyKTtcbiAgI2VsZW1lbnRSZWY6IEVsZW1lbnRSZWY7XG4gICNpc0V4cGFuZGVkID0gdHJ1ZTtcbiAgI2tleWJvYXJkUmVvcmRlcmluZ0VuYWJsZWQgPSBmYWxzZTtcbiAgI25nVW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICAjcmVvcmRlckNhbmNlbFRleHQgPSAnJztcbiAgI3Jlb3JkZXJDdXJyZW50SW5kZXggPSAtMTtcbiAgI3Jlb3JkZXJGaW5pc2hUZXh0ID0gJyc7XG4gICNyZW9yZGVySW5zdHJ1Y3Rpb25zID0gJyc7XG4gICNyZW9yZGVyTW92ZWRUZXh0ID0gJyc7XG4gICNyZW9yZGVyU3RhdGVEZXNjcmlwdGlvbiA9ICcnO1xuICAjcmVvcmRlclN0ZXBzID0gMDtcbiAgI3JlcGVhdGVyU2VydmljZTogU2t5UmVwZWF0ZXJTZXJ2aWNlO1xuICAjcmVzb3VyY2VTZXJ2aWNlOiBTa3lMaWJSZXNvdXJjZXNTZXJ2aWNlO1xuICAjdGl0bGVDb21wb25lbnQ6IEVsZW1lbnRSZWYgfCB1bmRlZmluZWQ7XG4gICNfaXNDb2xsYXBzaWJsZSA9IHRydWU7XG4gICNfaXNEaXNhYmxlZDogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IGZhbHNlO1xuICAjX2lzU2VsZWN0ZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gICNfaXRlbU5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICByZWFkb25seSAjaWRTdmMgPSBpbmplY3QoU2t5SWRTZXJ2aWNlKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICByZXBlYXRlclNlcnZpY2U6IFNreVJlcGVhdGVyU2VydmljZSxcbiAgICBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgYWRhcHRlclNlcnZpY2U6IFNreVJlcGVhdGVyQWRhcHRlclNlcnZpY2UsXG4gICAgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICByZXNvdXJjZVNlcnZpY2U6IFNreUxpYlJlc291cmNlc1NlcnZpY2UsXG4gICkge1xuICAgIHRoaXMuI3JlcGVhdGVyU2VydmljZSA9IHJlcGVhdGVyU2VydmljZTtcbiAgICB0aGlzLiNjaGFuZ2VEZXRlY3RvciA9IGNoYW5nZURldGVjdG9yO1xuICAgIHRoaXMuI2FkYXB0ZXJTZXJ2aWNlID0gYWRhcHRlclNlcnZpY2U7XG4gICAgdGhpcy4jZWxlbWVudFJlZiA9IGVsZW1lbnRSZWY7XG4gICAgdGhpcy4jcmVzb3VyY2VTZXJ2aWNlID0gcmVzb3VyY2VTZXJ2aWNlO1xuXG4gICAgdGhpcy4jc2xpZGVGb3JFeHBhbmRlZChmYWxzZSk7XG5cbiAgICBvYnNlcnZhYmxlRm9ya0pvaW4oW1xuICAgICAgdGhpcy4jcmVzb3VyY2VTZXJ2aWNlLmdldFN0cmluZygnc2t5dXhfcmVwZWF0ZXJfaXRlbV9yZW9yZGVyX2NhbmNlbCcpLFxuICAgICAgdGhpcy4jcmVzb3VyY2VTZXJ2aWNlLmdldFN0cmluZygnc2t5dXhfcmVwZWF0ZXJfaXRlbV9yZW9yZGVyX2ZpbmlzaCcpLFxuICAgICAgdGhpcy4jcmVzb3VyY2VTZXJ2aWNlLmdldFN0cmluZyhcbiAgICAgICAgJ3NreXV4X3JlcGVhdGVyX2l0ZW1fcmVvcmRlcl9pbnN0cnVjdGlvbnMnLFxuICAgICAgKSxcbiAgICAgIHRoaXMuI3Jlc291cmNlU2VydmljZS5nZXRTdHJpbmcoJ3NreXV4X3JlcGVhdGVyX2l0ZW1fcmVvcmRlcl9vcGVyYXRpb24nKSxcbiAgICAgIHRoaXMuI3Jlc291cmNlU2VydmljZS5nZXRTdHJpbmcoJ3NreXV4X3JlcGVhdGVyX2l0ZW1fcmVvcmRlcl9tb3ZlZCcpLFxuICAgIF0pXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy4jbmdVbnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAoW1xuICAgICAgICAgIHJlb3JkZXJDYW5jZWxUZXh0LFxuICAgICAgICAgIHJlb3JkZXJGaW5pc2hUZXh0LFxuICAgICAgICAgIHJlb3JkZXJJbnN0cnVjdGlvbnNUZXh0LFxuICAgICAgICAgIHJlb3JkZXJPcGVyYXRpb25UZXh0LFxuICAgICAgICAgIHJlb3JkZXJNb3ZlZFRleHQsXG4gICAgICAgIF0pID0+IHtcbiAgICAgICAgICB0aGlzLiNyZW9yZGVyQ2FuY2VsVGV4dCA9IHJlb3JkZXJDYW5jZWxUZXh0O1xuICAgICAgICAgIHRoaXMuI3Jlb3JkZXJGaW5pc2hUZXh0ID0gcmVvcmRlckZpbmlzaFRleHQ7XG4gICAgICAgICAgdGhpcy4jcmVvcmRlclN0YXRlRGVzY3JpcHRpb24gPSByZW9yZGVySW5zdHJ1Y3Rpb25zVGV4dDtcbiAgICAgICAgICB0aGlzLiNyZW9yZGVySW5zdHJ1Y3Rpb25zID0gcmVvcmRlck9wZXJhdGlvblRleHQ7XG4gICAgICAgICAgdGhpcy4jcmVvcmRlck1vdmVkVGV4dCA9IHJlb3JkZXJNb3ZlZFRleHQ7XG4gICAgICAgICAgdGhpcy5yZW9yZGVyQnV0dG9uTGFiZWwgPSB0aGlzLiNyZW9yZGVySW5zdHJ1Y3Rpb25zO1xuICAgICAgICB9LFxuICAgICAgKTtcbiAgICB0aGlzLmNvbnRlbnRJZCA9IGBza3ktcmVwZWF0ZXItaXRlbS1jb250ZW50LSR7KytuZXh0Q29udGVudElkfWA7XG4gICAgdGhpcy5pdGVtUm9sZSQgPSB0aGlzLiNyZXBlYXRlclNlcnZpY2UuaXRlbVJvbGUuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy4jcmVwZWF0ZXJTZXJ2aWNlLnJlZ2lzdGVySXRlbSh0aGlzKTtcbiAgICB0aGlzLiNyZXBlYXRlclNlcnZpY2UuYWN0aXZlSXRlbUNoYW5nZVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuI25nVW5zdWJzY3JpYmUpKVxuICAgICAgLnN1YnNjcmliZSgoaXRlbSkgPT4ge1xuICAgICAgICBjb25zdCBuZXdJc0FjdGl2ZVZhbHVlID0gdGhpcyA9PT0gaXRlbTtcbiAgICAgICAgaWYgKG5ld0lzQWN0aXZlVmFsdWUgIT09IHRoaXMuaXNBY3RpdmUpIHtcbiAgICAgICAgICB0aGlzLmlzQWN0aXZlID0gbmV3SXNBY3RpdmVWYWx1ZTtcbiAgICAgICAgICB0aGlzLiNjaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuaGFzSXRlbUNvbnRlbnQgPSAhIXRoaXMucmVwZWF0ZXJJdGVtQ29udGVudENvbXBvbmVudHM/Lmxlbmd0aDtcbiAgICB0aGlzLiN1cGRhdGVFeHBhbmRPbkNvbnRlbnRDaGFuZ2UoKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmNvbGxhcHNlLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5leHBhbmQuY29tcGxldGUoKTtcbiAgICB0aGlzLmlubGluZUZvcm1DbG9zZS5jb21wbGV0ZSgpO1xuICAgIHRoaXMuaXNTZWxlY3RlZENoYW5nZS5jb21wbGV0ZSgpO1xuXG4gICAgdGhpcy4jbmdVbnN1YnNjcmliZS5uZXh0KCk7XG4gICAgdGhpcy4jbmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpO1xuXG4gICAgdGhpcy4jcmVwZWF0ZXJTZXJ2aWNlLnVucmVnaXN0ZXJJdGVtKHRoaXMpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bicsIFsnJGV2ZW50J10pXG4gIHB1YmxpYyBvbktleWRvd24oJGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKFxuICAgICAgWycgJywgJ0VudGVyJywgJ0hvbWUnLCAnRW5kJywgJ0Fycm93VXAnLCAnQXJyb3dEb3duJ10uaW5jbHVkZXMoJGV2ZW50LmtleSlcbiAgICApIHtcbiAgICAgIGlmIChcbiAgICAgICAgKCRldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpLm1hdGNoZXMoXG4gICAgICAgICAgJ2lucHV0LCB0ZXh0YXJlYSwgc2VsZWN0LCBvcHRpb24sIFtjb250ZW50ZWRpdGFibGVdLCBbY29udGVudGVkaXRhYmxlXSAqJyxcbiAgICAgICAgKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgbGV0IGFjdGl2YXRlSXRlbTogU2t5UmVwZWF0ZXJJdGVtQ29tcG9uZW50IHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgIGlmIChbJyAnLCAnRW50ZXInXS5pbmNsdWRlcygkZXZlbnQua2V5KSkge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RhYmxlKSB7XG4gICAgICAgICAgdGhpcy5pc1NlbGVjdGVkID0gIXRoaXMuaXNTZWxlY3RlZDtcbiAgICAgICAgfVxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXRoaXMtYWxpYXNcbiAgICAgICAgYWN0aXZhdGVJdGVtID0gdGhpcztcbiAgICAgIH1cbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICBpZiAoWydIb21lJywgJ0VuZCddLmluY2x1ZGVzKCRldmVudC5rZXkpKSB7XG4gICAgICAgIGNvbnN0IGl0ZW1zID0gdGhpcy4jcmVwZWF0ZXJTZXJ2aWNlLml0ZW1zLmZpbHRlcihcbiAgICAgICAgICAoaXRlbSkgPT4gIWl0ZW0uZGlzYWJsZWQsXG4gICAgICAgICk7XG4gICAgICAgIGlmICgkZXZlbnQua2V5ID09PSAnSG9tZScpIHtcbiAgICAgICAgICBhY3RpdmF0ZUl0ZW0gPSBpdGVtcy5zaGlmdCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGFjdGl2YXRlSXRlbSA9IGl0ZW1zLnBvcCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgaWYgKFsnQXJyb3dVcCcsICdBcnJvd0Rvd24nXS5pbmNsdWRlcygkZXZlbnQua2V5KSkge1xuICAgICAgICBjb25zdCBjdXJyZW50SW5kZXggPSB0aGlzLiNyZXBlYXRlclNlcnZpY2UuaXRlbXMuZmluZEluZGV4KFxuICAgICAgICAgIChpdGVtKSA9PiBpdGVtID09PSB0aGlzLFxuICAgICAgICApO1xuICAgICAgICBsZXQgc2xpY2VGcm9tOiBudW1iZXI7XG4gICAgICAgIGxldCBzbGljZVRvOiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gICAgICAgIGlmICgkZXZlbnQua2V5ID09PSAnQXJyb3dVcCcpIHtcbiAgICAgICAgICBzbGljZUZyb20gPSAwO1xuICAgICAgICAgIHNsaWNlVG8gPSBjdXJyZW50SW5kZXg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2xpY2VGcm9tID0gY3VycmVudEluZGV4ICsgMTtcbiAgICAgICAgICBzbGljZVRvID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGl0ZW1zID0gdGhpcy4jcmVwZWF0ZXJTZXJ2aWNlLml0ZW1zXG4gICAgICAgICAgLnNsaWNlKHNsaWNlRnJvbSwgc2xpY2VUbylcbiAgICAgICAgICAuZmlsdGVyKChpdGVtKSA9PiAhaXRlbS5kaXNhYmxlZCk7XG4gICAgICAgIGFjdGl2YXRlSXRlbSA9ICRldmVudC5rZXkgPT09ICdBcnJvd1VwJyA/IGl0ZW1zLnBvcCgpIDogaXRlbXMuc2hpZnQoKTtcbiAgICAgICAgaWYgKCFhY3RpdmF0ZUl0ZW0pIHtcbiAgICAgICAgICAvLyBXcmFwIGFyb3VuZC5cbiAgICAgICAgICBpZiAoJGV2ZW50LmtleSA9PT0gJ0Fycm93RG93bicpIHtcbiAgICAgICAgICAgIHNsaWNlRnJvbSA9IDA7XG4gICAgICAgICAgICBzbGljZVRvID0gY3VycmVudEluZGV4O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzbGljZUZyb20gPSBjdXJyZW50SW5kZXggKyAxO1xuICAgICAgICAgICAgc2xpY2VUbyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgaXRlbXMgPSB0aGlzLiNyZXBlYXRlclNlcnZpY2UuaXRlbXNcbiAgICAgICAgICAgIC5zbGljZShzbGljZUZyb20sIHNsaWNlVG8pXG4gICAgICAgICAgICAuZmlsdGVyKChpdGVtKSA9PiAhaXRlbS5kaXNhYmxlZCk7XG4gICAgICAgICAgYWN0aXZhdGVJdGVtID0gJGV2ZW50LmtleSA9PT0gJ0Fycm93VXAnID8gaXRlbXMucG9wKCkgOiBpdGVtcy5zaGlmdCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgaWYgKGFjdGl2YXRlSXRlbSAmJiAhYWN0aXZhdGVJdGVtLmlzQWN0aXZlKSB7XG4gICAgICAgIHRoaXMuI3JlcGVhdGVyU2VydmljZS5hY3RpdmF0ZUl0ZW0oYWN0aXZhdGVJdGVtKTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICEoYWN0aXZhdGVJdGVtLiNlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQgYXMgRWxlbWVudCkubWF0Y2hlcyhcbiAgICAgICAgICAgICc6Zm9jdXMtd2l0aGluJyxcbiAgICAgICAgICApXG4gICAgICAgICkge1xuICAgICAgICAgIGFjdGl2YXRlSXRlbS5pdGVtUmVmPy5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgaGVhZGVyQ2xpY2soKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNDb2xsYXBzaWJsZSkge1xuICAgICAgdGhpcy51cGRhdGVGb3JFeHBhbmRlZCghdGhpcy5pc0V4cGFuZGVkLCB0cnVlKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgY2hldnJvbkRpcmVjdGlvbkNoYW5nZShkaXJlY3Rpb246IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMudXBkYXRlRm9yRXhwYW5kZWQoZGlyZWN0aW9uID09PSAndXAnLCB0cnVlKTtcbiAgfVxuXG4gIHB1YmxpYyBvblJlcGVhdGVySXRlbUNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgLy8gT25seSBhY3RpdmF0ZSBpdGVtIGlmIGNsaWNraW5nIG9uIHRoZSB0aXRsZSwgY29udGVudCwgb3IgcGFyZW50IGl0ZW0gZGl2LlxuICAgIC8vIFRoaXMgd2lsbCBhdm9pZCBhY2NpZGVudGFsIGFjdGl2YXRpb25zIHdoZW4gY2xpY2tpbmcgaW5zaWRlIGludGVyYWN0aXZlIGVsZW1lbnRzIGxpa2VcbiAgICAvLyB0aGUgZXhwYW5kL2NvbGxhcHNlIGNoZXZyb24sIGRyb3Bkb3duLCBpbmxpbmUtZGVsZXRlLCBldGMuLi5cbiAgICBpZiAoXG4gICAgICBldmVudC50YXJnZXQgPT09IHRoaXMuaXRlbVJlZj8ubmF0aXZlRWxlbWVudCB8fFxuICAgICAgdGhpcy5pdGVtQ29udGVudFJlZj8ubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpIHx8XG4gICAgICB0aGlzLml0ZW1IZWFkZXJSZWY/Lm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KVxuICAgICkge1xuICAgICAgdGhpcy4jcmVwZWF0ZXJTZXJ2aWNlLmFjdGl2YXRlSXRlbSh0aGlzKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlRm9yRXhwYW5kZWQodmFsdWU6IGJvb2xlYW4sIGFuaW1hdGU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0NvbGxhcHNpYmxlID09PSBmYWxzZSAmJiB2YWx1ZSA9PT0gZmFsc2UpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgYFNldHRpbmcgaXNFeHBhbmRlZCB0byBmYWxzZSB3aGVuIHRoZSByZXBlYXRlciBpdGVtIGlzIG5vdCBjb2xsYXBzaWJsZVxuICAgICAgICB3aWxsIGhhdmUgbm8gZWZmZWN0LmAsXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAodGhpcy4jaXNFeHBhbmRlZCAhPT0gdmFsdWUpIHtcbiAgICAgIHRoaXMuI2lzRXhwYW5kZWQgPSB2YWx1ZTtcblxuICAgICAgaWYgKHRoaXMuI2lzRXhwYW5kZWQpIHtcbiAgICAgICAgdGhpcy5leHBhbmQuZW1pdCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jb2xsYXBzZS5lbWl0KCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuI3JlcGVhdGVyU2VydmljZS5vbkl0ZW1Db2xsYXBzZVN0YXRlQ2hhbmdlKHRoaXMpO1xuICAgICAgdGhpcy4jc2xpZGVGb3JFeHBhbmRlZChhbmltYXRlKTtcbiAgICAgIHRoaXMuI2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvbkNoZWNrYm94Q2hhbmdlKHZhbHVlOiBTa3lDaGVja2JveENoYW5nZSk6IHZvaWQge1xuICAgIHRoaXMuaXNTZWxlY3RlZCA9IHZhbHVlLmNoZWNrZWQ7XG4gIH1cblxuICBwdWJsaWMgb25JbmxpbmVGb3JtQ2xvc2UoaW5saW5lRm9ybUNsb3NlQXJnczogU2t5SW5saW5lRm9ybUNsb3NlQXJncyk6IHZvaWQge1xuICAgIHRoaXMuaW5saW5lRm9ybUNsb3NlLmVtaXQoaW5saW5lRm9ybUNsb3NlQXJncyk7XG4gIH1cblxuICBwdWJsaWMgbW92ZVRvVG9wKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuI2FkYXB0ZXJTZXJ2aWNlLm1vdmVJdGVtVXAodGhpcy4jZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCB0cnVlKTtcbiAgICB0aGlzLiNhZGFwdGVyU2VydmljZS5mb2N1c0VsZW1lbnQoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KTtcbiAgICB0aGlzLiNyZXBlYXRlclNlcnZpY2UucmVnaXN0ZXJPcmRlckNoYW5nZSgpO1xuICB9XG5cbiAgcHVibGljIG9uUmVvcmRlckhhbmRsZUtleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAvKmlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKGV2ZW50LmtleSkge1xuICAgICAgc3dpdGNoIChldmVudC5rZXkudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICBjYXNlICcgJzpcbiAgICAgICAgY2FzZSAnZW50ZXInOlxuICAgICAgICAgIHRoaXMuI2tleWJvYXJkVG9nZ2xlUmVvcmRlcigpO1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnZXNjYXBlJzpcbiAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICAgIGlmICh0aGlzLiNrZXlib2FyZFJlb3JkZXJpbmdFbmFibGVkKSB7XG4gICAgICAgICAgICB0aGlzLiNrZXlib2FyZFJlb3JkZXJpbmdFbmFibGVkID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLiNyZXZlcnRSZW9yZGVyU3RlcHMoKTtcbiAgICAgICAgICAgIHRoaXMucmVvcmRlckJ1dHRvbkxhYmVsID1cbiAgICAgICAgICAgICAgdGhpcy4jcmVvcmRlckNhbmNlbFRleHQgKyAnICcgKyB0aGlzLiNyZW9yZGVySW5zdHJ1Y3Rpb25zO1xuICAgICAgICAgICAgdGhpcy4jYWRhcHRlclNlcnZpY2UuZm9jdXNFbGVtZW50KGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCk7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ2Fycm93dXAnOlxuICAgICAgICAgIGlmICh0aGlzLiNrZXlib2FyZFJlb3JkZXJpbmdFbmFibGVkKSB7XG4gICAgICAgICAgICB0aGlzLiNrZXlib2FyZFJlb3JkZXJVcCgpO1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgdGhpcy4jcmVwZWF0ZXJTZXJ2aWNlLnJlZ2lzdGVyT3JkZXJDaGFuZ2UoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnYXJyb3dkb3duJzpcbiAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICAgIGlmICh0aGlzLiNrZXlib2FyZFJlb3JkZXJpbmdFbmFibGVkKSB7XG4gICAgICAgICAgICB0aGlzLiNrZXlib2FyZFJlb3JkZXJEb3duKCk7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICB0aGlzLiNyZXBlYXRlclNlcnZpY2UucmVnaXN0ZXJPcmRlckNoYW5nZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdhcnJvd2xlZnQnOlxuICAgICAgICBjYXNlICdhcnJvd3JpZ2h0JzpcbiAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICAgIGlmICh0aGlzLiNrZXlib2FyZFJlb3JkZXJpbmdFbmFibGVkKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG9uUmVvcmRlckhhbmRsZUJsdXIoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuI2tleWJvYXJkUmVvcmRlcmluZ0VuYWJsZWQgPSBmYWxzZTtcbiAgICB0aGlzLiNyZXZlcnRSZW9yZGVyU3RlcHMoKTtcbiAgICB0aGlzLnJlb3JkZXJCdXR0b25MYWJlbCA9IHRoaXMuI3Jlb3JkZXJJbnN0cnVjdGlvbnM7XG4gICAgdGhpcy5yZW9yZGVyU3RhdGUgPSB1bmRlZmluZWQ7XG4gIH1cblxuICAjc2xpZGVGb3JFeHBhbmRlZChhbmltYXRlOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5hbmltYXRpb25EaXNhYmxlZCA9ICFhbmltYXRlO1xuICAgIHRoaXMuc2xpZGVEaXJlY3Rpb24gPSB0aGlzLmlzRXhwYW5kZWQgPyAnZG93bicgOiAndXAnO1xuICB9XG5cbiAgI2tleWJvYXJkUmVvcmRlclVwKCk6IHZvaWQge1xuICAgIGNvbnN0IG5ld0luZGV4ID0gdGhpcy4jYWRhcHRlclNlcnZpY2UubW92ZUl0ZW1VcChcbiAgICAgIHRoaXMuI2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICApO1xuICAgIGlmIChuZXdJbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLiNyZW9yZGVyQ3VycmVudEluZGV4ID0gbmV3SW5kZXg7XG4gICAgICB0aGlzLiNyZW9yZGVyU3RlcHMtLTtcbiAgICAgIHRoaXMuI2FkYXB0ZXJTZXJ2aWNlLmZvY3VzRWxlbWVudCh0aGlzLmdyYWJIYW5kbGUpO1xuICAgICAgdGhpcy4ja2V5Ym9hcmRSZW9yZGVyaW5nRW5hYmxlZCA9IHRydWU7XG4gICAgICB0aGlzLnJlb3JkZXJCdXR0b25MYWJlbCA9IGAke3RoaXMuI3Jlb3JkZXJNb3ZlZFRleHR9ICR7XG4gICAgICAgIHRoaXMuI3Jlb3JkZXJDdXJyZW50SW5kZXggKyAxXG4gICAgICB9YDtcbiAgICB9XG4gIH1cblxuICAja2V5Ym9hcmRSZW9yZGVyRG93bigpOiB2b2lkIHtcbiAgICBjb25zdCBuZXdJbmRleCA9IHRoaXMuI2FkYXB0ZXJTZXJ2aWNlLm1vdmVJdGVtRG93bihcbiAgICAgIHRoaXMuI2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICApO1xuICAgIGlmIChuZXdJbmRleCkge1xuICAgICAgdGhpcy4jcmVvcmRlckN1cnJlbnRJbmRleCA9IG5ld0luZGV4O1xuICAgICAgdGhpcy4jcmVvcmRlclN0ZXBzKys7XG4gICAgICB0aGlzLiNhZGFwdGVyU2VydmljZS5mb2N1c0VsZW1lbnQodGhpcy5ncmFiSGFuZGxlKTtcbiAgICAgIHRoaXMuI2tleWJvYXJkUmVvcmRlcmluZ0VuYWJsZWQgPSB0cnVlO1xuICAgICAgdGhpcy5yZW9yZGVyQnV0dG9uTGFiZWwgPSBgJHt0aGlzLiNyZW9yZGVyTW92ZWRUZXh0fSAke1xuICAgICAgICB0aGlzLiNyZW9yZGVyQ3VycmVudEluZGV4ICsgMVxuICAgICAgfWA7XG4gICAgfVxuICB9XG5cbiAgI2tleWJvYXJkVG9nZ2xlUmVvcmRlcigpOiB2b2lkIHtcbiAgICB0aGlzLiNrZXlib2FyZFJlb3JkZXJpbmdFbmFibGVkID0gIXRoaXMuI2tleWJvYXJkUmVvcmRlcmluZ0VuYWJsZWQ7XG4gICAgdGhpcy4jcmVvcmRlclN0ZXBzID0gMDtcblxuICAgIGlmICh0aGlzLiNrZXlib2FyZFJlb3JkZXJpbmdFbmFibGVkKSB7XG4gICAgICB0aGlzLnJlb3JkZXJTdGF0ZSA9IHRoaXMuI3Jlb3JkZXJTdGF0ZURlc2NyaXB0aW9uO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUT0RPOiBOZWVkcyBpbXByb3ZlbWVudCB0byBiZSBsb2NhbGl6ZWRcbiAgICAgIHRoaXMucmVvcmRlclN0YXRlID0gYCR7dGhpcy4jcmVvcmRlckZpbmlzaFRleHR9ICR7XG4gICAgICAgIHRoaXMuI3Jlb3JkZXJDdXJyZW50SW5kZXggKyAxXG4gICAgICB9ICR7dGhpcy4jcmVvcmRlckluc3RydWN0aW9uc31gO1xuICAgICAgdGhpcy4jcmVvcmRlckN1cnJlbnRJbmRleCA9IC0xO1xuICAgIH1cbiAgfVxuXG4gICNyZXZlcnRSZW9yZGVyU3RlcHMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuI3Jlb3JkZXJTdGVwcyA8IDApIHtcbiAgICAgIHRoaXMuI2FkYXB0ZXJTZXJ2aWNlLm1vdmVJdGVtRG93bihcbiAgICAgICAgdGhpcy4jZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgICBNYXRoLmFicyh0aGlzLiNyZW9yZGVyU3RlcHMpLFxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuI3Jlb3JkZXJTdGVwcyA+IDApIHtcbiAgICAgIHRoaXMuI2FkYXB0ZXJTZXJ2aWNlLm1vdmVJdGVtVXAoXG4gICAgICAgIHRoaXMuI2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICAgZmFsc2UsXG4gICAgICAgIHRoaXMuI3Jlb3JkZXJTdGVwcyxcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMuI3JlcGVhdGVyU2VydmljZS5yZWdpc3Rlck9yZGVyQ2hhbmdlKCk7XG4gIH1cblxuICAjdXBkYXRlQ29udGVudEluZm8oKTogdm9pZCB7XG4gICAgLy8gVGhlIGBzZXRUaW1lb3V0YCBoZXJlIGlzIG5lY2Vzc2FyeSB0byBjb3VudGVyYWN0IHRoZSB0aW1pbmcgZm9yIGNoYW5nZSBkZXRlY3Rpb24gd2l0aCB0aGUgY29udGVudCBjaGlsZCBmb3IgdGhlIHRpdGxlIGNvbXBvbmVudC5cbiAgICAvLyBCZWNhdXNlIHRoZSB0aXRsZSBjb21wb25lbnQgaXMgcmVuZGVyZWQgd2l0aGluIGEgdGVtcGxhdGUgcmVmIC0gdGhlIGxvYWRpbmcgb2YgdGhlIGNvbnRlbnQgY2hpbGQgYW5kIHRoZW4gYWN0aW5nIHVwb24gdGhhdCBjYW4gY2F1c2UgXCJjaGFuZ2VkIGFmdGVyIGNoZWNrZWRcIiBlcnJvcnMuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5pdGVtTmFtZSkge1xuICAgICAgICB0aGlzLiNjb250ZW50SW5mb1Byb3ZpZGVyLnBhdGNoSW5mbyh7XG4gICAgICAgICAgZGVzY3JpcHRvcjogeyB0eXBlOiAndGV4dCcsIHZhbHVlOiB0aGlzLml0ZW1OYW1lIH0sXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLiN0aXRsZUNvbXBvbmVudCkge1xuICAgICAgICB0aGlzLnRpdGxlSWQgPSB0aGlzLiNpZFN2Yy5nZW5lcmF0ZUlkKCk7XG5cbiAgICAgICAgdGhpcy4jY29udGVudEluZm9Qcm92aWRlci5wYXRjaEluZm8oe1xuICAgICAgICAgIGRlc2NyaXB0b3I6IHtcbiAgICAgICAgICAgIHR5cGU6ICdlbGVtZW50SWQnLFxuICAgICAgICAgICAgdmFsdWU6IHRoaXMudGl0bGVJZCxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudGl0bGVJZCA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gICN1cGRhdGVFeHBhbmRPbkNvbnRlbnRDaGFuZ2UoKTogdm9pZCB7XG4gICAgdGhpcy5yZXBlYXRlckl0ZW1Db250ZW50Q29tcG9uZW50cz8uY2hhbmdlc1xuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuI25nVW5zdWJzY3JpYmUpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuaGFzSXRlbUNvbnRlbnQgPSAhIXRoaXMucmVwZWF0ZXJJdGVtQ29udGVudENvbXBvbmVudHM/Lmxlbmd0aDtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgdGhpcy5pc0NvbGxhcHNpYmxlID1cbiAgICAgICAgICB0aGlzLmhhc0l0ZW1Db250ZW50ICYmIHRoaXMuI3JlcGVhdGVyU2VydmljZS5leHBhbmRNb2RlICE9PSAnbm9uZSc7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgIGlmICh0aGlzLiNyZXBlYXRlclNlcnZpY2UuZXhwYW5kTW9kZSA9PT0gJ3NpbmdsZScpIHtcbiAgICAgICAgICB0aGlzLiNyZXBlYXRlclNlcnZpY2Uub25JdGVtQ29sbGFwc2VTdGF0ZUNoYW5nZSh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cbn1cbiIsIjxkaXZcbiAgY2xhc3M9XCJza3ktcmVwZWF0ZXItaXRlbSBza3ktcGFkZGluZy1ldmVuLWRlZmF1bHRcIlxuICBbYXR0ci5hcmlhLWxhYmVsXT1cIml0ZW1OYW1lXCJcbiAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cIml0ZW1OYW1lIHx8IHRpdGxlSWRcIlxuICBbYXR0ci5hcmlhLXNlbGVjdGVkXT1cInNlbGVjdGFibGUgPyAhIWlzU2VsZWN0ZWQgOiB1bmRlZmluZWRcIlxuICBbYXR0ci5yb2xlXT1cIihpdGVtUm9sZSQgfCBhc3luYyk/Lml0ZW1cIlxuICBbYXR0ci50YWJJbmRleF09XCJ0YWJpbmRleFwiXG4gIFtuZ0NsYXNzXT1cIntcbiAgICAnc2t5LXJlcGVhdGVyLWl0ZW0tYWN0aXZlJzogaXNBY3RpdmUsXG4gICAgJ3NreS1yZXBlYXRlci1pdGVtLWNvbGxhcHNpYmxlJzogaXNDb2xsYXBzaWJsZSxcbiAgICAnc2t5LXJlcGVhdGVyLWl0ZW0tc2VsZWN0ZWQnOiBpc1NlbGVjdGVkXG4gIH1cIlxuICAoY2xpY2spPVwib25SZXBlYXRlckl0ZW1DbGljaygkZXZlbnQpXCJcbiAgI2l0ZW1SZWZcbj5cbiAgPGRpdiAjaW5saW5lRGVsZXRlPlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cInNreS1pbmxpbmUtZGVsZXRlXCIgLz5cbiAgPC9kaXY+XG5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlubGluZUZvcm1UZW1wbGF0ZVwiPlxuICAgIDxza3ktaW5saW5lLWZvcm1cbiAgICAgIFtjb25maWddPVwiaW5saW5lRm9ybUNvbmZpZ1wiXG4gICAgICBbc2hvd0Zvcm1dPVwic2hvd0lubGluZUZvcm1cIlxuICAgICAgW3RlbXBsYXRlXT1cImlubGluZUZvcm1UZW1wbGF0ZVwiXG4gICAgICAoY2xvc2UpPVwib25JbmxpbmVGb3JtQ2xvc2UoJGV2ZW50KVwiXG4gICAgPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInNreVJlcGVhdGVySXRlbUxlZnRcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJza3lSZXBlYXRlckl0ZW1SaWdodFwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvc2t5LWlubGluZS1mb3JtPlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlubGluZUZvcm1UZW1wbGF0ZVwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJza3lSZXBlYXRlckl0ZW1MZWZ0XCI+PC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInNreVJlcGVhdGVySXRlbVJpZ2h0XCI+PC9uZy1jb250YWluZXI+XG4gIDwvbmctY29udGFpbmVyPlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjc2t5UmVwZWF0ZXJJdGVtTGVmdD5cbiAgPGRpdlxuICAgIFthdHRyLnJvbGVdPVwiIXNob3dJbmxpbmVGb3JtID8gKGl0ZW1Sb2xlJCB8IGFzeW5jKT8uY29udGVudCA6IHVuZGVmaW5lZFwiXG4gICAgY2xhc3M9XCJza3ktcmVwZWF0ZXItaXRlbS1sZWZ0XCJcbiAgPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJyZW9yZGVyYWJsZVwiPlxuICAgICAgPHNwYW5cbiAgICAgICAgYXJpYS1saXZlPVwiYXNzZXJ0aXZlXCJcbiAgICAgICAgY2xhc3M9XCJza3ktc2NyZWVuLXJlYWRlci1vbmx5XCJcbiAgICAgICAgW2lkXT1cImNvbnRlbnRJZCArICctcmVvcmRlci1zdGF0ZSdcIlxuICAgICAgPlxuICAgICAgICB7eyByZW9yZGVyU3RhdGUgfX1cbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxzcGFuXG4gICAgICAgIGNsYXNzPVwic2t5LXNjcmVlbi1yZWFkZXItb25seVwiXG4gICAgICAgIFtpZF09XCJjb250ZW50SWQgKyAnLXJlb3JkZXItaW5zdHJ1Y3Rpb25zJ1wiXG4gICAgICAgID57eyByZW9yZGVyQnV0dG9uTGFiZWwgfX08L3NwYW5cbiAgICAgID5cbiAgICAgIDxidXR0b25cbiAgICAgICAgY2xhc3M9XCJza3ktYnRuIHNreS10aWxlLXRvb2xzLWNvbnRyb2wgc2t5LXJlcGVhdGVyLWl0ZW0tZ3JhYi1oYW5kbGVcIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgW2F0dHIuYXJpYS1kZXNjcmliZWRieV09XCJjb250ZW50SWQgKyAnLXJlb3JkZXItaW5zdHJ1Y3Rpb25zJ1wiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiXG4gICAgICAgICAgaXRlbU5hbWVcbiAgICAgICAgICAgID8gKCdza3l1eF9yZXBlYXRlcl9pdGVtX3Jlb3JkZXJfbGFiZWwnIHwgc2t5TGliUmVzb3VyY2VzOiBpdGVtTmFtZSlcbiAgICAgICAgICAgIDogKCdza3l1eF9yZXBlYXRlcl9pdGVtX3Jlb3JkZXJfbGFiZWxfZGVmYXVsdCcgfCBza3lMaWJSZXNvdXJjZXMpXG4gICAgICAgIFwiXG4gICAgICAgIChibHVyKT1cIm9uUmVvcmRlckhhbmRsZUJsdXIoJGV2ZW50KVwiXG4gICAgICAgIChrZXlkb3duKT1cIm9uUmVvcmRlckhhbmRsZUtleURvd24oJGV2ZW50KVwiXG4gICAgICAgICNncmFiSGFuZGxlXG4gICAgICA+XG4gICAgICAgIDxza3ktaWNvbiBpY29uPVwiYXJyb3dzLXZcIiAvPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPHNreS1jaGVja2JveFxuICAgICAgKm5nSWY9XCJzZWxlY3RhYmxlXCJcbiAgICAgIGNsYXNzPVwic2t5LXJlcGVhdGVyLWl0ZW0tY2hlY2tib3hcIlxuICAgICAgW2NoZWNrZWRdPVwiaXNTZWxlY3RlZFwiXG4gICAgICBbbGFiZWxdPVwiXG4gICAgICAgIGl0ZW1OYW1lXG4gICAgICAgICAgPyAoJ3NreXV4X3JlcGVhdGVyX2l0ZW1fY2hlY2tib3hfbGFiZWwnIHwgc2t5TGliUmVzb3VyY2VzOiBpdGVtTmFtZSlcbiAgICAgICAgICA6ICgnc2t5dXhfcmVwZWF0ZXJfaXRlbV9jaGVja2JveF9sYWJlbF9kZWZhdWx0JyB8IHNreUxpYlJlc291cmNlcylcbiAgICAgIFwiXG4gICAgICAoY2hhbmdlKT1cIm9uQ2hlY2tib3hDaGFuZ2UoJGV2ZW50KVwiXG4gICAgPlxuICAgIDwvc2t5LWNoZWNrYm94PlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwic2t5LXJlcGVhdGVyLWl0ZW0tY29udGV4dC1tZW51XCJcbiAgICAgIFtoaWRkZW5dPVwiY29udGV4dE1lbnVFbC5jaGlsZHJlbi5sZW5ndGggPT09IDBcIlxuICAgICAgI2NvbnRleHRNZW51RWxcbiAgICA+XG4gICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJza3ktcmVwZWF0ZXItaXRlbS1jb250ZXh0LW1lbnVcIiAvPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjc2t5UmVwZWF0ZXJJdGVtUmlnaHQ+XG4gIDxkaXYgY2xhc3M9XCJza3ktcmVwZWF0ZXItaXRlbS1yaWdodFwiICNpdGVtSGVhZGVyUmVmPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwic2t5LXJlcGVhdGVyLWl0ZW0taGVhZGVyXCJcbiAgICAgIFthdHRyLnJvbGVdPVwiKGl0ZW1Sb2xlJCB8IGFzeW5jKT8udGl0bGVcIlxuICAgICAgW2hpZGRlbl09XCJ0aXRsZVJlZi5jaGlsZHJlbi5sZW5ndGggPT09IDBcIlxuICAgICAgKGNsaWNrKT1cImhlYWRlckNsaWNrKClcIlxuICAgID5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJza3ktcmVwZWF0ZXItaXRlbS10aXRsZSBza3ktZm9udC1lbXBoYXNpemVkXCJcbiAgICAgICAgW2F0dHIuaWRdPVwidGl0bGVJZFwiXG4gICAgICAgICN0aXRsZVJlZlxuICAgICAgPlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJza3ktcmVwZWF0ZXItaXRlbS10aXRsZVwiIC8+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgKm5nSWY9XCJyZW9yZGVyYWJsZVwiXG4gICAgICAgIGNsYXNzPVwic2t5LWJ0biBza3ktYnRuLWxpbmsgc2t5LXJlcGVhdGVyLWl0ZW0tcmVvcmRlci10b3BcIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJcbiAgICAgICAgICBpdGVtTmFtZVxuICAgICAgICAgICAgPyAoJ3NreXV4X3JlcGVhdGVyX2l0ZW1fcmVvcmRlcl90b3BfbGFiZWwnXG4gICAgICAgICAgICAgIHwgc2t5TGliUmVzb3VyY2VzOiBpdGVtTmFtZSlcbiAgICAgICAgICAgIDogKCdza3l1eF9yZXBlYXRlcl9pdGVtX3Jlb3JkZXJfdG9wX2xhYmVsX2RlZmF1bHQnXG4gICAgICAgICAgICAgIHwgc2t5TGliUmVzb3VyY2VzKVxuICAgICAgICBcIlxuICAgICAgICAoY2xpY2spPVwibW92ZVRvVG9wKCRldmVudClcIlxuICAgICAgPlxuICAgICAgICA8c2t5LWljb24gaWNvbj1cImFycm93LXVwXCIgLz5cbiAgICAgICAge3sgJ3NreXV4X3JlcGVhdGVyX2l0ZW1fcmVvcmRlcl90b3AnIHwgc2t5TGliUmVzb3VyY2VzIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxkaXYgKm5nSWY9XCJpc0NvbGxhcHNpYmxlXCIgY2xhc3M9XCJza3ktcmVwZWF0ZXItaXRlbS1jaGV2cm9uXCI+XG4gICAgICAgIDxza3ktY2hldnJvblxuICAgICAgICAgIFthcmlhQ29udHJvbHNdPVwiY29udGVudElkXCJcbiAgICAgICAgICBbYXJpYUxhYmVsXT1cIlxuICAgICAgICAgICAgaXRlbU5hbWVcbiAgICAgICAgICAgICAgPyBpc0V4cGFuZGVkXG4gICAgICAgICAgICAgICAgPyAoJ3NreXV4X3JlcGVhdGVyX2l0ZW1fZXhwYW5kJyB8IHNreUxpYlJlc291cmNlczogaXRlbU5hbWUpXG4gICAgICAgICAgICAgICAgOiAoJ3NreXV4X3JlcGVhdGVyX2l0ZW1fY29sbGFwc2UnIHwgc2t5TGliUmVzb3VyY2VzOiBpdGVtTmFtZSlcbiAgICAgICAgICAgICAgOiBpc0V4cGFuZGVkXG4gICAgICAgICAgICAgICAgPyAoJ3NreXV4X3JlcGVhdGVyX2l0ZW1fZXhwYW5kX2RlZmF1bHQnIHwgc2t5TGliUmVzb3VyY2VzKVxuICAgICAgICAgICAgICAgIDogKCdza3l1eF9yZXBlYXRlcl9pdGVtX2NvbGxhcHNlX2RlZmF1bHQnIHwgc2t5TGliUmVzb3VyY2VzKVxuICAgICAgICAgIFwiXG4gICAgICAgICAgW2RpcmVjdGlvbl09XCJpc0V4cGFuZGVkID8gJ3VwJyA6ICdkb3duJ1wiXG4gICAgICAgICAgKGRpcmVjdGlvbkNoYW5nZSk9XCJjaGV2cm9uRGlyZWN0aW9uQ2hhbmdlKCRldmVudClcIlxuICAgICAgICA+XG4gICAgICAgIDwvc2t5LWNoZXZyb24+XG4gICAgICA8L2Rpdj5cbiAgICAgIDwhLS0gVXNlZCBmb3Igd2hlbiB0aGUgY2hldnJvbiBpcyBoaWRkZW4gdG8gZW5zdXJlIHRoYXQgdGhlIHJpZ2h0IHNpZGUgaXMgdGhlIHNhbWUgaGVpZ2h0IGFzIHRoZSBsZWZ0Li0tPlxuICAgICAgPGRpdlxuICAgICAgICAqbmdJZj1cIiFpc0NvbGxhcHNpYmxlICYmICFjb250ZXh0TWVudVwiXG4gICAgICAgIGNsYXNzPVwic2t5LXJlcGVhdGVyLWl0ZW0tY2hldnJvbi1wbGFjZWhvbGRlclwiXG4gICAgICA+PC9kaXY+XG4gICAgICA8IS0tIFVzZWQgdG8gZW5zdXJlIHRoYXQgdGhlIHJpZ2h0IHNpZGUgaXMgdGhlIHNhbWUgaGVpZ2h0IGFzIHRoZSBsZWZ0Li0tPlxuICAgICAgPGRpdlxuICAgICAgICAqbmdJZj1cImNvbnRleHRNZW51XCJcbiAgICAgICAgY2xhc3M9XCJza3ktcmVwZWF0ZXItaXRlbS1jaGV2cm9uLXBsYWNlaG9sZGVyLXdpdGgtY29udGV4dFwiXG4gICAgICA+PC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJza3ktcmVwZWF0ZXItaXRlbS1jb250ZW50XCJcbiAgICAgIFtpZF09XCJjb250ZW50SWRcIlxuICAgICAgW0AuZGlzYWJsZWRdPVwiYW5pbWF0aW9uRGlzYWJsZWRcIlxuICAgICAgW0Bza3lBbmltYXRpb25TbGlkZV09XCJzbGlkZURpcmVjdGlvblwiXG4gICAgICAjaXRlbUNvbnRlbnRSZWZcbiAgICAgIFthdHRyLnJvbGVdPVwiKGl0ZW1Sb2xlJCB8IGFzeW5jKT8uY29udGVudFwiXG4gICAgPlxuICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwic2t5LXJlcGVhdGVyLWl0ZW0tY29udGVudFwiIC8+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
@@ -369,4 +369,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.1", ngImpor
369
369
  type: ContentChildren,
370
370
  args: [SkyRepeaterItemComponent]
371
371
  }] } });
372
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwZWF0ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2xpc3RzL3NyYy9saWIvbW9kdWxlcy9yZXBlYXRlci9yZXBlYXRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvbGlzdHMvc3JjL2xpYi9tb2R1bGVzL3JlcGVhdGVyL3JlcGVhdGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxlQUFlLEVBQ2YsVUFBVSxFQUNWLFlBQVksRUFDWixLQUFLLEVBSUwsTUFBTSxFQUVOLFNBQVMsRUFFVCxNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGFBQWEsRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUV0RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTNDLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBSTlFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRXJFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDOzs7OztBQUV4RDs7R0FFRztBQVlILE1BQU0sT0FBTyxvQkFBb0I7SUE4Qi9COzs7Ozs7Ozs7Ozs7Ozs7Ozs7T0FrQkc7SUFDSCxJQUNXLFVBQVUsQ0FBQyxLQUE0QztRQUNoRSxJQUFJLENBQUMsZ0JBQWdCLENB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QUksQ0FBQyxXQUFXLENBQUM7WUFDdEMsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsYUFBYTtRQUNYLElBQUksSUFBSSxDQUFDLFdBQVcsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLENBQUM7WUFDakQsT0FBTyxDQUFDLElBQUksQ0FDViwrRkFBK0YsQ0FDaEcsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDOzhHQTlhVSxvQkFBb0I7a0dBQXBCLG9CQUFvQiw4T0FQcEI7WUFDVCxrQkFBa0I7WUFDbEIseUJBQXlCO1lBQ3pCLDRCQUE0QjtTQUM3QixnREE0RWdCLHdCQUF3QixrREN6SDNDLDRUQVdBOzsyRkRxQ2Esb0JBQW9CO2tCQVhoQyxTQUFTOytCQUNFLGNBQWMsYUFHYjt3QkFDVCxrQkFBa0I7d0JBQ2xCLHlCQUF5Qjt3QkFDekIsNEJBQTRCO3FCQUM3QixtQkFDZ0IsdUJBQXVCLENBQUMsTUFBTTt3REFZeEMsV0FBVztzQkFEakIsS0FBSztnQkFXQyxTQUFTO3NCQURmLEtBQUs7Z0JBU0MsV0FBVztzQkFEakIsS0FBSztnQkF1QkssVUFBVTtzQkFEcEIsS0FBSztnQkFjQyxpQkFBaUI7c0JBRHZCLE1BQU07Z0JBU0EsV0FBVztzQkFGakIsTUFBTTtnQkFLQSxLQUFLO3NCQURYLGVBQWU7dUJBQUMsd0JBQXdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgQWZ0ZXJWaWV3Q2hlY2tlZCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBRdWVyeUxpc3QsXG4gIFJlbmRlcmVyMixcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgaW5qZWN0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFNreUxvZ1NlcnZpY2UsIFNreVNjcm9sbGFibGVIb3N0U2VydmljZSB9IGZyb20gJ0Bza3l1eC9jb3JlJztcblxuaW1wb3J0IHsgRHJhZ3VsYVNlcnZpY2UgfSBmcm9tICduZzItZHJhZ3VsYSc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IFNreVJlcGVhdGVyQWRhcHRlclNlcnZpY2UgfSBmcm9tICcuL3JlcGVhdGVyLWFkYXB0ZXIuc2VydmljZSc7XG5pbXBvcnQgeyBTa3lSZXBlYXRlckF1dG9TY3JvbGxTZXJ2aWNlIH0gZnJvbSAnLi9yZXBlYXRlci1hdXRvLXNjcm9sbC5zZXJ2aWNlJztcbmltcG9ydCB7IFNreVJlcGVhdGVyQXV0b1Njcm9sbGVyIH0gZnJvbSAnLi9yZXBlYXRlci1hdXRvLXNjcm9sbGVyJztcbmltcG9ydCB7IFNreVJlcGVhdGVyRXhwYW5kTW9kZVR5cGUgfSBmcm9tICcuL3JlcGVhdGVyLWV4cGFuZC1tb2RlLXR5cGUnO1xuaW1wb3J0IHsgU2t5UmVwZWF0ZXJJdGVtUm9sZXNUeXBlIH0gZnJvbSAnLi9yZXBlYXRlci1pdGVtLXJvbGVzLnR5cGUnO1xuaW1wb3J0IHsgU2t5UmVwZWF0ZXJJdGVtQ29tcG9uZW50IH0gZnJvbSAnLi9yZXBlYXRlci1pdGVtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTa3lSZXBlYXRlclJvbGVUeXBlIH0gZnJvbSAnLi9yZXBlYXRlci1yb2xlLnR5cGUnO1xuaW1wb3J0IHsgU2t5UmVwZWF0ZXJTZXJ2aWNlIH0gZnJvbSAnLi9yZXBlYXRlci5zZXJ2aWNlJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgY29udGFpbmVyIHRvIGRpc3BsYXkgcmVwZWF0ZXIgaXRlbXMuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NreS1yZXBlYXRlcicsXG4gIHN0eWxlVXJsczogWycuL3JlcGVhdGVyLmNvbXBvbmVudC5zY3NzJ10sXG4gIHRlbXBsYXRlVXJsOiAnLi9yZXBlYXRlci5jb21wb25lbnQuaHRtbCcsXG4gIHByb3ZpZGVyczogW1xuICAgIFNreVJlcGVhdGVyU2VydmljZSxcbiAgICBTa3lSZXBlYXRlckFkYXB0ZXJTZXJ2aWNlLFxuICAgIFNreVJlcGVhdGVyQXV0b1Njcm9sbFNlcnZpY2UsXG4gIF0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBTa3lSZXBlYXRlckNvbXBvbmVudFxuICBpbXBsZW1lbnRzIEFmdGVyQ29udGVudEluaXQsIEFmdGVyVmlld0NoZWNrZWQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBPbkluaXRcbntcbiAgLyoqXG4gICAqIFRoZSBpbmRleCBvZiB0aGUgcmVwZWF0ZXIgaXRlbSB0byB2aXN1YWxseSBoaWdobGlnaHQgYXMgYWN0aXZlLlxuICAgKiBGb3IgZXhhbXBsZSwgdXNlIHRoaXMgcHJvcGVydHkgaW4gY29uanVuY3Rpb24gd2l0aCB0aGVcbiAgICogW3NwbGl0IHZpZXcgY29tcG9uZW50XShodHRwczovL2RldmVsb3Blci5ibGFja2JhdWQuY29tL3NreXV4L2NvbXBvbmVudHMvc3BsaXQtdmlldylcbiAgICogdG8gaGlnaGxpZ2h0IGEgcmVwZWF0ZXIgaXRlbSB3aGlsZSB1c2VycyBlZGl0IGl0LiBPbmx5IG9uZSBpdGVtIGNhbiBiZSBhY3RpdmUgYXQgYSB0aW1lLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGFjdGl2ZUluZGV4OiBudW1iZXIgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFRoZSBBUklBIGxhYmVsIGZvciB0aGUgcmVwZWF0ZXIgbGlzdC5cbiAgICogVGhpcyBzZXRzIHRoZSByZXBlYXRlciBsaXN0J3MgYGFyaWEtbGFiZWxgIGF0dHJpYnV0ZSB0byBwcm92aWRlIGEgdGV4dCBlcXVpdmFsZW50IGZvciBzY3JlZW4gcmVhZGVyc1xuICAgKiBbdG8gc3VwcG9ydCBhY2Nlc3NpYmlsaXR5XShodHRwczovL2RldmVsb3Blci5ibGFja2JhdWQuY29tL3NreXV4L2xlYXJuL2FjY2Vzc2liaWxpdHkpLlxuICAgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgYGFyaWEtbGFiZWxgIGF0dHJpYnV0ZSwgc2VlIHRoZSBbV0FJLUFSSUEgZGVmaW5pdGlvbl0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLyNhcmlhLWxhYmVsKS5cbiAgICogQGRlZmF1bHQgXCJMaXN0IG9mIGl0ZW1zXCJcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBhcmlhTGFiZWw6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogV2hldGhlciB1c2VycyBjYW4gY2hhbmdlIHRoZSBvcmRlciBvZiBpdGVtcyBpbiB0aGUgcmVwZWF0ZXIgbGlzdC5cbiAgICogRWFjaCByZXBlYXRlciBpdGVtIGFsc28gaGFzIGByZW9yZGVyYWJsZWAgcHJvcGVydHkgdG8gaW5kaWNhdGUgd2hldGhlclxuICAgKiB1c2VycyBjYW4gY2hhbmdlIGl0cyBvcmRlci5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyByZW9yZGVyYWJsZTogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBUaGUgbGF5b3V0IHRoYXQgZGV0ZXJtaW5lcyB3aGljaCByZXBlYXRlciBpdGVtcyBhcmUgZXhwYW5kZWQgYnkgZGVmYXVsdCBhbmQgd2hldGhlclxuICAgKiByZXBlYXRlciBpdGVtcyBhcmUgZXhwYW5kYWJsZSBhbmQgY29sbGFwc2libGUuIENvbGxhcHNlZCBpdGVtcyBkaXNwbGF5IHRpdGxlcyBvbmx5LlxuICAgKiBUaGUgdmFsaWQgb3B0aW9ucyBhcmUgYG11bHRpcGxlYCwgYG5vbmVgLCBhbmQgYHNpbmdsZWAuXG4gICAqIC0gYG11bHRpcGxlYCBsb2FkcyByZXBlYXRlciBpdGVtcyBpbiBhbiBleHBhbmRlZCBzdGF0ZSB1bmxlc3MgYGlzRXhwYW5kZWRgIGlzIHNldCB0b1xuICAgKiBgZmFsc2VgIGZvciBhIHJlcGVhdGVyIGl0ZW0uIFRoaXMgbGF5b3V0IGFsbG93cyB1c2VycyB0byBleHBhbmQgYW5kIGNvbGxhcHNlXG4gICAqIGFzIG1hbnkgcmVwZWF0ZXIgaXRlbXMgYXMgbmVjZXNzYXJ5LiBJdCBpcyBiZXN0LXN1aXRlZCB0byByZXBlYXRlciBpdGVtcyB3aGVyZSBib2R5XG4gICAqIGNvbnRlbnQgaXMgaW1wb3J0YW50IGJ1dCB1c2VycyBkb24ndCBhbHdheXMgbmVlZCB0byBzZWUgaXQuXG4gICAqIC0gYG5vbmVgIGxvYWRzIGFsbCByZXBlYXRlciBpdGVtcyBpbiBhbiBleHBhbmRlZCBzdGF0ZSBhbmQgZG9lcyBub3QgYWxsb3cgdXNlcnMgdG9cbiAgICogY29sbGFwc2UgdGhlbS4gVGhpcyBkZWZhdWx0IGxheW91dCBwcm92aWRlcyB0aGUgcXVpY2tlc3QgYWNjZXNzIHRvIHRoZSBkZXRhaWxzIGluIHRoZVxuICAgKiByZXBlYXRlciBpdGVtcy4gSXQgaXMgYmVzdC1zdWl0ZWQgdG8gcmVwZWF0ZXIgaXRlbXMgd2l0aCBjb25jaXNlIGNvbnRlbnRcbiAgICogdGhhdCB1c2VycyBuZWVkIHRvIHZpZXcgZnJlcXVlbnRseS5cbiAgICogLSBgc2luZ2xlYCBsb2FkcyBvbmUgcmVwZWF0ZXIgaXRlbSBpbiBhbiBleHBhbmRlZCBzdGF0ZSBhbmQgY29sbGFwc2VzIGFsbCBvdGhlcnMuXG4gICAqIFRoZSBleHBhbmRlZCByZXBlYXRlciBpdGVtIGlzIHRoZSBmaXJzdCBvbmUgd2hlcmUgYGlzRXhwYW5kZWRgIGlzIHNldCB0byBgdHJ1ZWAuIFRoaXMgbGF5b3V0XG4gICAqIGFsbG93cyB1c2VycyB0byBleHBhbmQgb25lIGl0ZW0gYXQgYSB0aW1lLiBJdCBwcm92aWRlcyB0aGUgbW9zdCBjb21wYWN0IHZpZXcgYW5kIGlzXG4gICAqIGJlc3Qtc3VpdGVkIHRvIHJlcGVhdGVyIGl0ZW1zIHdoZXJlIHRoZSBtb3N0IGltcG9ydGFudCBpbmZvcm1hdGlvbiBpcyBpbiB0aGUgdGl0bGVzXG4gICAqIGFuZCB1c2VycyBvbmx5IG9jY2FzaW9uYWxseSBuZWVkIHRvIHZpZXcgdGhlIGJvZHkgY29udGVudC5cbiAgICogQGRlZmF1bHQgXCJub25lXCJcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgZXhwYW5kTW9kZSh2YWx1ZTogU2t5UmVwZWF0ZXJFeHBhbmRNb2RlVHlwZSB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuI3JlcGVhdGVyU2VydmljZS5leHBhbmRNb2RlID0gdmFsdWU7XG4gICAgdGhpcy4jdXBkYXRlRm9yRXhwYW5kTW9kZSgpO1xuICB9XG5cbiAgcHVibGljIGdldCBleHBhbmRNb2RlKCk6IFNreVJlcGVhdGVyRXhwYW5kTW9kZVR5cGUge1xuICAgIHJldHVybiB0aGlzLiNyZXBlYXRlclNlcnZpY2UuZXhwYW5kTW9kZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaXJlcyB3aGVuIHRoZSBhY3RpdmUgcmVwZWF0ZXIgaXRlbSBjaGFuZ2VzLlxuICAgKi9cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBhY3RpdmVJbmRleENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuXG4gIC8qKlxuICAgKiBGaXJlcyB3aGVuIHVzZXJzIGNoYW5nZSB0aGUgb3JkZXIgb2YgcmVwZWF0ZXIgaXRlbXMuXG4gICAqIFRoaXMgZXZlbnQgZW1pdHMgYW4gb3JkZXJlZCBhcnJheSBvZiB0aGUgYHRhZ2AgcHJvcGVydGllcyB0aGF0IHRoZSBjb25zdW1lciBwcm92aWRlcyBmb3IgZWFjaCByZXBlYXRlciBpdGVtLlxuICAgKi9cbiAgQE91dHB1dCgpXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIHB1YmxpYyBvcmRlckNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55W10+KCk7XG5cbiAgQENvbnRlbnRDaGlsZHJlbihTa3lSZXBlYXRlckl0ZW1Db21wb25lbnQpXG4gIHB1YmxpYyBpdGVtczogUXVlcnlMaXN0PFNreVJlcGVhdGVySXRlbUNvbXBvbmVudD4gfCB1bmRlZmluZWQ7XG5cbiAgcHVibGljIGRyYWd1bGFHcm91cE5hbWU6IHN0cmluZztcblxuICBwdWJsaWMgcm9sZTogU2t5UmVwZWF0ZXJSb2xlVHlwZSB8IHVuZGVmaW5lZDtcblxuICAjYXV0b1Njcm9sbGVyOiBTa3lSZXBlYXRlckF1dG9TY3JvbGxlciB8IHVuZGVmaW5lZDtcbiAgI25nVW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICAjaXRlbU5hbWVXYXJuZWQgPSBmYWxzZTtcblxuICAjYWRhcHRlclNlcnZpY2UgPSBpbmplY3QoU2t5UmVwZWF0ZXJBZGFwdGVyU2VydmljZSk7XG4gICNjaGFuZ2VEZXRlY3RvciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG4gICNkcmFndWxhU2VydmljZSA9IGluamVjdChEcmFndWxhU2VydmljZSk7XG4gICNlbGVtZW50UmVmID0gaW5qZWN0KEVsZW1lbnRSZWYpO1xuICAjcmVuZGVyZXIgPSBpbmplY3QoUmVuZGVyZXIyKTtcbiAgI3JlcGVhdGVyU2VydmljZSA9IGluamVjdChTa3lSZXBlYXRlclNlcnZpY2UpO1xuICAjYXV0b1Njcm9sbFN2YyA9IGluamVjdChTa3lSZXBlYXRlckF1dG9TY3JvbGxTZXJ2aWNlKTtcbiAgI3Njcm9sbGFibGVIb3N0U3ZjID0gaW5qZWN0KFNreVNjcm9sbGFibGVIb3N0U2VydmljZSk7XG4gICNsb2dTdmMgPSBpbmplY3QoU2t5TG9nU2VydmljZSk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5kcmFndWxhR3JvdXBOYW1lID0gYHNreS1yZXBlYXRlci1kcmFndWxhLSR7XG4gICAgICB0aGlzLiNyZXBlYXRlclNlcnZpY2UucmVwZWF0ZXJHcm91cElkXG4gICAgfWA7XG5cbiAgICB0aGlzLiNyZXBlYXRlclNlcnZpY2UuaXRlbUNvbGxhcHNlU3RhdGVDaGFuZ2VcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLiNuZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoKGl0ZW06IFNreVJlcGVhdGVySXRlbUNvbXBvbmVudCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5leHBhbmRNb2RlID09PSAnc2luZ2xlJyAmJiBpdGVtLmlzRXhwYW5kZWQpIHtcbiAgICAgICAgICB0aGlzLml0ZW1zPy5mb3JFYWNoKChvdGhlckl0ZW0pID0+IHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgb3RoZXJJdGVtICE9PSBpdGVtICYmXG4gICAgICAgICAgICAgIG90aGVySXRlbS5pc0V4cGFuZGVkICYmXG4gICAgICAgICAgICAgIG90aGVySXRlbS5pc0NvbGxhcHNpYmxlXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgb3RoZXJJdGVtLmlzRXhwYW5kZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICB0aGlzLiNyZXBlYXRlclNlcnZpY2UuYWN0aXZlSXRlbUluZGV4Q2hhbmdlXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy4jbmdVbnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKChpbmRleCkgPT4ge1xuICAgICAgICBpZiAoaW5kZXggIT09IHRoaXMuYWN0aXZlSW5kZXgpIHtcbiAgICAgICAgICB0aGlzLmFjdGl2ZUluZGV4ID0gaW5kZXg7XG4gICAgICAgICAgdGhpcy5hY3RpdmVJbmRleENoYW5nZS5lbWl0KGluZGV4KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICB0aGlzLiNyZXBlYXRlclNlcnZpY2Uub3JkZXJDaGFuZ2VcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLiNuZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLiNlbWl0VGFncygpO1xuICAgICAgfSk7XG5cbiAgICB0aGlzLiN1cGRhdGVGb3JFeHBhbmRNb2RlKCk7XG5cbiAgICB0aGlzLiNhZGFwdGVyU2VydmljZS5zZXRSZXBlYXRlckhvc3QodGhpcy4jZWxlbWVudFJlZik7XG5cbiAgICB0aGlzLiNpbml0aWFsaXplRHJhZ0FuZERyb3AoKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XG4gICAgLy8gSWYgYWN0aXZlSW5kZXggaGFzIGJlZW4gc2V0IG9uIGluaXQsIGNhbGwgc2VydmljZSB0byBhY3RpdmF0ZSB0aGUgYXBwcm9wcmlhdGUgaXRlbS5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLmFjdGl2ZUluZGV4IHx8IHRoaXMuYWN0aXZlSW5kZXggPT09IDApIHtcbiAgICAgICAgdGhpcy4jcmVwZWF0ZXJTZXJ2aWNlLmFjdGl2YXRlSXRlbUJ5SW5kZXgodGhpcy5hY3RpdmVJbmRleCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuI3ZhbGlkYXRlVGFncygpO1xuICAgIH0pO1xuXG4gICAgLy8gSEFDSzogTm90IHVwZGF0aW5nIGZvciBleHBhbmQgbW9kZSBpbiBhIHRpbWVvdXQgY2F1c2VzIGFuIGVycm9yLlxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIvaXNzdWVzLzYwMDVcbiAgICB0aGlzLml0ZW1zPy5jaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuI25nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLml0ZW1zPy5sZW5ndGgpIHtcbiAgICAgICAgICB0aGlzLiN1cGRhdGVGb3JFeHBhbmRNb2RlKHRoaXMuaXRlbXMubGFzdCk7XG5cbiAgICAgICAgICB0aGlzLiN1cGRhdGVSZW9yZGVyYWJpbGl0eSgpO1xuXG4gICAgICAgICAgdGhpcy4jcmVwZWF0ZXJTZXJ2aWNlLml0ZW1zID0gdGhpcy5pdGVtcy50b0FycmF5KCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5hY3RpdmVJbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy4jcmVwZWF0ZXJTZXJ2aWNlLmFjdGl2YXRlSXRlbUJ5SW5kZXgodGhpcy5hY3RpdmVJbmRleCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLiN1cGRhdGVSb2xlKCk7XG5cbiAgICAgICAgdGhpcy4jdmFsaWRhdGVUYWdzKCk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy4jdXBkYXRlRm9yRXhwYW5kTW9kZSgpO1xuXG4gICAgICB0aGlzLml0ZW1zPy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgIGl0ZW0ucmVvcmRlcmFibGUgPSB0aGlzLnJlb3JkZXJhYmxlO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuI3VwZGF0ZVJvbGUoKTtcbiAgICB9LCAwKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ0FmdGVyVmlld0NoZWNrZWQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLiNpdGVtTmFtZVdhcm5lZCAmJiB0aGlzLml0ZW1zPy5zb21lKChpdGVtKSA9PiAhaXRlbS5pdGVtTmFtZSkpIHtcbiAgICAgIHRoaXMuI2xvZ1N2Yz8uZGVwcmVjYXRlZCgnU2t5UmVwZWF0ZXJJdGVtQ29tcG9uZW50IHdpdGhvdXQgYGl0ZW1OYW1lYCcsIHtcbiAgICAgICAgZGVwcmVjYXRpb25NYWpvclZlcnNpb246IDgsXG4gICAgICAgIHJlcGxhY2VtZW50UmVjb21tZW5kYXRpb246ICdBbHdheXMgc3BlY2lmeSBhbiBgaXRlbU5hbWVgIHByb3BlcnR5LicsXG4gICAgICB9KTtcblxuICAgICAgdGhpcy4jaXRlbU5hbWVXYXJuZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXNbJ2FjdGl2ZUluZGV4J10pIHtcbiAgICAgIHRoaXMuI3JlcGVhdGVyU2VydmljZS5lbmFibGVBY3RpdmVTdGF0ZSA9IHRydWU7XG4gICAgICBpZiAoXG4gICAgICAgIGNoYW5nZXNbJ2FjdGl2ZUluZGV4J10uY3VycmVudFZhbHVlICE9PVxuICAgICAgICBjaGFuZ2VzWydhY3RpdmVJbmRleCddLnByZXZpb3VzVmFsdWVcbiAgICAgICkge1xuICAgICAgICB0aGlzLiNyZXBlYXRlclNlcnZpY2UuYWN0aXZhdGVJdGVtQnlJbmRleCh0aGlzLmFjdGl2ZUluZGV4KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlc1sncmVvcmRlcmFibGUnXSkge1xuICAgICAgaWYgKHRoaXMuaXRlbXMpIHtcbiAgICAgICAgdGhpcy4jdXBkYXRlUmVvcmRlcmFiaWxpdHkoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuI3VwZGF0ZVJvbGUoKTtcblxuICAgICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuI25nVW5zdWJzY3JpYmUubmV4dCgpO1xuICAgIHRoaXMuI25nVW5zdWJzY3JpYmUuY29tcGxldGUoKTtcbiAgICB0aGlzLiNkZXN0cm95RHJhZ0FuZERyb3AoKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLiN1cGRhdGVSb2xlKCk7XG4gIH1cblxuICBwdWJsaWMgb25DZGtPYnNlcnZlQ29udGVudCgpOiB2b2lkIHtcbiAgICB0aGlzLiN1cGRhdGVSb2xlKCk7XG4gIH1cblxuICAjdXBkYXRlRm9yRXhwYW5kTW9kZShpdGVtQWRkZWQ/OiBTa3lSZXBlYXRlckl0ZW1Db21wb25lbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pdGVtcykge1xuICAgICAgbGV0IGZvdW5kRXhwYW5kZWQgPSBmYWxzZTtcbiAgICAgIGNvbnN0IGlzQ29sbGFwc2libGUgPSB0aGlzLmV4cGFuZE1vZGUgIT09ICdub25lJztcbiAgICAgIGNvbnN0IGlzU2luZ2xlID0gdGhpcy5leHBhbmRNb2RlID09PSAnc2luZ2xlJztcblxuICAgICAgLy8gS2VlcCBhbnkgbmV3bHktYWRkZWQgZXhwYW5kZWQgaXRlbSBleHBhbmRlZCBhbmQgY29sbGFwc2UgdGhlIHJlc3QuXG4gICAgICBpZiAoaXRlbUFkZGVkICYmIGl0ZW1BZGRlZC5pc0V4cGFuZGVkKSB7XG4gICAgICAgIGZvdW5kRXhwYW5kZWQgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy5pdGVtcykge1xuICAgICAgICBpdGVtLmlzQ29sbGFwc2libGUgPSBpc0NvbGxhcHNpYmxlICYmICEhaXRlbS5oYXNJdGVtQ29udGVudDtcblxuICAgICAgICAvLyBDb2xsYXBzZSBhbnkgaXRlbXMgdGhhdCBhcmVuJ3QgdGhlIGl0ZW0gdGhhdCB3YXMganVzdCBhZGRlZC5cbiAgICAgICAgaWYgKGl0ZW0gIT09IGl0ZW1BZGRlZCAmJiBpc1NpbmdsZSAmJiBpdGVtLmlzRXhwYW5kZWQpIHtcbiAgICAgICAgICBpZiAoZm91bmRFeHBhbmRlZCkge1xuICAgICAgICAgICAgLy8gSWYgdGhpcyBpdGVtIGlzIGJlaW5nIGNvbGxhcHNlZCBiZWNhdXNlIGEgbmV3IGl0ZW0gd2FzXG4gICAgICAgICAgICAvLyBhZGRlZCwgYW5pbWF0ZSBpdC5cbiAgICAgICAgICAgIGl0ZW0udXBkYXRlRm9yRXhwYW5kZWQoZmFsc2UsICEhaXRlbUFkZGVkKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBmb3VuZEV4cGFuZGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLiN1cGRhdGVSb2xlKCk7XG4gICAgfVxuICB9XG5cbiAgI2luaXRpYWxpemVEcmFnQW5kRHJvcCgpOiB2b2lkIHtcbiAgICAvKiBTYW5pdHkgY2hlY2sgdGhhdCB3ZSBoYXZlbid0IGFscmVhZHkgc2V0IHVwIGRyYWdnaW5nIGFiaWxpdGllcyAqL1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKCF0aGlzLiNkcmFndWxhU2VydmljZS5maW5kKHRoaXMuZHJhZ3VsYUdyb3VwTmFtZSkpIHtcbiAgICAgIHRoaXMuI2RyYWd1bGFTZXJ2aWNlLmNyZWF0ZUdyb3VwKHRoaXMuZHJhZ3VsYUdyb3VwTmFtZSwge1xuICAgICAgICBtb3ZlczogKGVsLCBfY29udGFpbmVyLCBoYW5kbGUpID0+IHtcbiAgICAgICAgICBjb25zdCB0YXJnZXQgPSBlbD8ucXVlcnlTZWxlY3RvcignLnNreS1yZXBlYXRlci1pdGVtLWdyYWItaGFuZGxlJyk7XG4gICAgICAgICAgcmV0dXJuICEhKFxuICAgICAgICAgICAgdGhpcy5yZW9yZGVyYWJsZSAmJiB0YXJnZXQ/LmNvbnRhaW5zKGhhbmRsZSBhcyBFbGVtZW50IHwgbnVsbClcbiAgICAgICAgICApO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgbGV0IGRyYWdnZWRJdGVtSW5kZXggPSAtMTtcblxuICAgIHRoaXMuI2RyYWd1bGFTZXJ2aWNlXG4gICAgICAuZHJhZyh0aGlzLmRyYWd1bGFHcm91cE5hbWUpXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy4jbmdVbnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKChhcmdzKSA9PiB7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgIGlmIChhcmdzLm5hbWUgPT09IHRoaXMuZHJhZ3VsYUdyb3VwTmFtZSkge1xuICAgICAgICAgIHRoaXMuI2Rlc3Ryb3lBdXRvU2Nyb2xsKCk7XG5cbiAgICAgICAgICB0aGlzLiNhdXRvU2Nyb2xsZXIgPSB0aGlzLiNhdXRvU2Nyb2xsU3ZjLmF1dG9TY3JvbGwoXG4gICAgICAgICAgICBbdGhpcy4jc2Nyb2xsYWJsZUhvc3RTdmMuZ2V0U2Nyb2xsYWJsZUhvc3QodGhpcy4jZWxlbWVudFJlZildLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBtYXJnaW46IDIwLFxuICAgICAgICAgICAgICBtYXhTcGVlZDogMTAsXG4gICAgICAgICAgICAgIHNjcm9sbFdoZW5PdXRzaWRlOiB0cnVlLFxuICAgICAgICAgICAgICBhdXRvU2Nyb2xsOiAoKSA9PiB0cnVlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgdGhpcy4jcmVuZGVyZXIuYWRkQ2xhc3MoYXJncy5lbCwgJ3NreS1yZXBlYXRlci1pdGVtLWRyYWdnaW5nJyk7XG4gICAgICAgICAgZHJhZ2dlZEl0ZW1JbmRleCA9IHRoaXMuI2FkYXB0ZXJTZXJ2aWNlLmdldFJlcGVhdGVySXRlbUluZGV4KFxuICAgICAgICAgICAgYXJncy5lbCBhcyBIVE1MRWxlbWVudCxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgIHRoaXMuI2RyYWd1bGFTZXJ2aWNlXG4gICAgICAuZHJhZ2VuZCh0aGlzLmRyYWd1bGFHcm91cE5hbWUpXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy4jbmdVbnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKChhcmdzKSA9PiB7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgIGlmIChhcmdzLm5hbWUgPT09IHRoaXMuZHJhZ3VsYUdyb3VwTmFtZSkge1xuICAgICAgICAgIHRoaXMuI2Rlc3Ryb3lBdXRvU2Nyb2xsKCk7XG5cbiAgICAgICAgICB0aGlzLiNyZW5kZXJlci5yZW1vdmVDbGFzcyhhcmdzLmVsLCAnc2t5LXJlcGVhdGVyLWl0ZW0tZHJhZ2dpbmcnKTtcbiAgICAgICAgICBjb25zdCBuZXdJdGVtSW5kZXggPSB0aGlzLiNhZGFwdGVyU2VydmljZS5nZXRSZXBlYXRlckl0ZW1JbmRleChcbiAgICAgICAgICAgIGFyZ3MuZWwgYXMgSFRNTEVsZW1lbnQsXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIC8qIHNhbml0eSBjaGVjayAqL1xuICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgICAgaWYgKGRyYWdnZWRJdGVtSW5kZXggPj0gMCkge1xuICAgICAgICAgICAgdGhpcy4jcmVwZWF0ZXJTZXJ2aWNlLnJlb3JkZXJJdGVtKGRyYWdnZWRJdGVtSW5kZXgsIG5ld0l0ZW1JbmRleCk7XG4gICAgICAgICAgICBkcmFnZ2VkSXRlbUluZGV4ID0gLTE7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy4jZW1pdFRhZ3MoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICAjZGVzdHJveURyYWdBbmREcm9wKCk6IHZvaWQge1xuICAgIC8qIFNhbml0eSBjaGVjayB0aGF0IHdlIGhhdmUgc2V0IHVwIGRyYWdnaW5nIGFiaWxpdGllcyAqL1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKHRoaXMuI2RyYWd1bGFTZXJ2aWNlLmZpbmQodGhpcy5kcmFndWxhR3JvdXBOYW1lKSkge1xuICAgICAgdGhpcy4jZHJhZ3VsYVNlcnZpY2UuZGVzdHJveSh0aGlzLmRyYWd1bGFHcm91cE5hbWUpO1xuICAgIH1cblxuICAgIHRoaXMuI2Rlc3Ryb3lBdXRvU2Nyb2xsKCk7XG4gIH1cblxuICAjZGVzdHJveUF1dG9TY3JvbGwoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuI2F1dG9TY3JvbGxlcikge1xuICAgICAgdGhpcy4jYXV0b1Njcm9sbGVyLmRlc3Ryb3koKTtcbiAgICAgIHRoaXMuI2F1dG9TY3JvbGxlciA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICAjZW1pdFRhZ3MoKTogdm9pZCB7XG4gICAgY29uc3QgdGFncyA9IHRoaXMuI3JlcGVhdGVyU2VydmljZS5pdGVtcy5tYXAoKGl0ZW0pID0+IGl0ZW0udGFnKTtcbiAgICB0aGlzLm9yZGVyQ2hhbmdlLmVtaXQodGFncyk7XG4gIH1cblxuICAjZXZlcnlJdGVtSGFzVGFnKCk6IGJvb2xlYW4ge1xuICAgIC8qIHNhbml0eSBjaGVjayAqL1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmICghdGhpcy5pdGVtcyB8fCB0aGlzLml0ZW1zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5pdGVtcy50b0FycmF5KCkuZXZlcnkoKGl0ZW0pID0+IHtcbiAgICAgIHJldHVybiBpdGVtLnRhZyAhPT0gdW5kZWZpbmVkO1xuICAgIH0pO1xuICB9XG5cbiAgI3VwZGF0ZVJvbGUoKTogdm9pZCB7XG4gICAgLy8gRGV0ZXJtaW5lIGEgcm9sZSB1c2luZyBhIGhpZXJhcmNoeSBiYXNlZCBvbiBodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtcHJhY3RpY2VzLTEuMS9cbiAgICAvLyAgIDEuIElmIHRoZXJlIGFyZSBvbmUgb3IgbW9yZSBpbnRlcmFjdGlvbnMgaW4gdGhlIHJlcGVhdGVyIGl0ZW0gcHJvamVjdGVkIGNvbnRlbnQsIHVzZSBncmlkLlxuICAgIC8vICAgMi4gSWYgdGhlcmUgYXJlIHNlbGVjdGFibGUgcmVwZWF0ZXIgaXRlbXMgYW5kIG5vIG90aGVyIGludGVyYWN0aW9ucywgdXNlIGxpc3Rib3guXG4gICAgLy8gICAzLiBJZiB0aGVyZSBhcmUgbm8gaW50ZXJhY3Rpb25zLCB1c2UgbGlzdC5cblxuICAgIC8vIERlZmF1bHQgdG8gbGlzdCByb2xlLlxuICAgIGxldCBhdXRvUm9sZTogU2t5UmVwZWF0ZXJSb2xlVHlwZSA9ICdsaXN0JztcblxuICAgIGNvbnN0IHJvbGVNYXA6IFJlY29yZDxTa3lSZXBlYXRlclJvbGVUeXBlLCBTa3lSZXBlYXRlckl0ZW1Sb2xlc1R5cGU+ID0ge1xuICAgICAgbGlzdDogeyBpdGVtOiAnbGlzdGl0ZW0nLCB0aXRsZTogdW5kZWZpbmVkLCBjb250ZW50OiB1bmRlZmluZWQgfSxcbiAgICAgIGxpc3Rib3g6IHsgaXRlbTogJ29wdGlvbicsIHRpdGxlOiB1bmRlZmluZWQsIGNvbnRlbnQ6IHVuZGVmaW5lZCB9LFxuICAgICAgZ3JpZDogeyBpdGVtOiAncm93JywgdGl0bGU6ICdyb3doZWFkZXInLCBjb250ZW50OiAnZ3JpZGNlbGwnIH0sXG4gICAgfTtcblxuICAgIC8vIEJhc2VkIG9uIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2RvbS5odG1sI2ludGVyYWN0aXZlLWNvbnRlbnRcbiAgICBjb25zdCBpbnRlcmFjdGlvblNlbGVjdG9yID0gW1xuICAgICAgJ2FbaHJlZl0nLFxuICAgICAgJ2F1ZGlvW2NvbnRyb2xzXScsXG4gICAgICAnYnV0dG9uJyxcbiAgICAgICdkZXRhaWxzJyxcbiAgICAgICdlbWJlZCcsXG4gICAgICAnaWZyYW1lJyxcbiAgICAgICdpbWdbdXNlbWFwXScsXG4gICAgICAnaW5wdXQ6bm90KFt0eXBlPVwiaGlkZGVuXCJdKScsXG4gICAgICAnbGFiZWwnLFxuICAgICAgJ3NlbGVjdCcsXG4gICAgICAndGV4dGFyZWEnLFxuICAgICAgJ3ZpZGVvW2NvbnRyb2xzXScsXG4gICAgICAnW2NvbnRlbnRlZGl0YWJsZV0nLFxuICAgICAgJy5za3ktcmVwZWF0ZXJbcm9sZT1cImdyaWRcIl0nLFxuICAgIF1cbiAgICAgIC5tYXAoXG4gICAgICAgIChzZWxlY3RvcikgPT5cbiAgICAgICAgICBgc2t5LXJlcGVhdGVyLWl0ZW0tdGl0bGUgJHtzZWxlY3Rvcn06bm90KFtoaWRkZW5dKSwgc2t5LXJlcGVhdGVyLWl0ZW0tY29udGVudCAke3NlbGVjdG9yfTpub3QoW2hpZGRlbl0pYCxcbiAgICAgIClcbiAgICAgIC5jb25jYXQoW2Bza3l1eC1kcm9wZG93bmBdKVxuICAgICAgLmpvaW4oJywgJyk7XG5cbiAgICBjb25zdCBoYXNJbnRlcmFjdGlvbiA9XG4gICAgICB0aGlzLnJlb3JkZXJhYmxlIHx8XG4gICAgICB0aGlzLml0ZW1zPy5zb21lKChpdGVtKSA9PiBpdGVtLmlzQ29sbGFwc2libGUpIHx8XG4gICAgICB0aGlzLml0ZW1zPy5zb21lKChpdGVtKSA9PiAhIWl0ZW0uc2VsZWN0YWJsZSkgfHxcbiAgICAgICEhKHRoaXMuI2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudCkucXVlcnlTZWxlY3RvcihcbiAgICAgICAgaW50ZXJhY3Rpb25TZWxlY3RvcixcbiAgICAgICk7XG5cbiAgICBpZiAoaGFzSW50ZXJhY3Rpb24pIHtcbiAgICAgIC8vIElmIHRoZSByZXBlYXRlciBtYXRjaGVzIGludGVyYWN0aW9uIHNlbGVjdG9yIGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS1wcmFjdGljZXMtMS4xLyNncmlkXG4gICAgICBhdXRvUm9sZSA9ICdncmlkJztcbiAgICB9XG5cbiAgICBpZiAodGhpcy5yb2xlICE9PSBhdXRvUm9sZSkge1xuICAgICAgdGhpcy4jcmVwZWF0ZXJTZXJ2aWNlLml0ZW1Sb2xlLm5leHQoe1xuICAgICAgICAuLi5yb2xlTWFwW2F1dG9Sb2xlXSxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5yb2xlID0gYCR7YXV0b1JvbGV9YDtcbiAgICAgIHRoaXMuI2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gICN1cGRhdGVSZW9yZGVyYWJpbGl0eSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pdGVtcykge1xuICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHRoaXMuaXRlbXMpIHtcbiAgICAgICAgaXRlbS5yZW9yZGVyYWJsZSA9IHRoaXMucmVvcmRlcmFibGU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgI3ZhbGlkYXRlVGFncygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZW9yZGVyYWJsZSAmJiAhdGhpcy4jZXZlcnlJdGVtSGFzVGFnKCkpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgJ1BsZWFzZSBzdXBwbHkgdGFnIHByb3BlcnRpZXMgZm9yIGVhY2ggcmVwZWF0ZXIgaXRlbSB3aGVuIHJlb3JkZXJpbmcgZnVuY3Rpb25hbGl0eSBpcyBlbmFibGVkLicsXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuIiwiPG5nLWNvbnRhaW5lciAjcmVwZWF0ZXJIb3N0PlxuICA8ZGl2XG4gICAgY2xhc3M9XCJza3ktcmVwZWF0ZXJcIlxuICAgIFthdHRyLnJvbGVdPVwicm9sZVwiXG4gICAgW2F0dHIuYXJpYS1sYWJlbF09XCJhcmlhTGFiZWwgfHwgKCdza3l1eF9yZXBlYXRlcl9sYWJlbCcgfCBza3lMaWJSZXNvdXJjZXMpXCJcbiAgICBbZHJhZ3VsYV09XCJkcmFndWxhR3JvdXBOYW1lXCJcbiAgICAoY2RrT2JzZXJ2ZUNvbnRlbnQpPVwib25DZGtPYnNlcnZlQ29udGVudCgpXCJcbiAgPlxuICAgIDxuZy1jb250ZW50IC8+XG4gIDwvZGl2PlxuPC9uZy1jb250YWluZXI+XG4iXX0=
372
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwZWF0ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2xpc3RzL3NyYy9saWIvbW9kdWxlcy9yZXBlYXRlci9yZXBlYXRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvbGlzdHMvc3JjL2xpYi9tb2R1bGVzL3JlcGVhdGVyL3JlcGVhdGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxlQUFlLEVBQ2YsVUFBVSxFQUNWLFlBQVksRUFDWixLQUFLLEVBSUwsTUFBTSxFQUVOLFNBQVMsRUFFVCxNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGFBQWEsRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUV0RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTNDLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBSTlFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRXJFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDOzs7OztBQUV4RDs7R0FFRztBQVlILE1BQU0sT0FBTyxvQkFBb0I7SUE4Qi9COzs7Ozs7Ozs7Ozs7Ozs7Ozs7T0FrQkc7SUFDSCxJQUNXLFVBQVUsQ0FBQyxLQUE0QztRQUNoRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztRQUN6QyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRUQsSUFBVyxVQUFVO1FBQ25CLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQztJQUMxQyxDQUFDO0lBdUJELGFBQWEsQ0FBc0M7SUFDbkQsY0FBYyxDQUF1QjtJQUNyQyxlQUFlLENBQVM7SUFFeEIsZUFBZSxDQUFxQztJQUNwRCxlQUFlLENBQTZCO0lBQzVDLGVBQWUsQ0FBMEI7SUFDekMsV0FBVyxDQUFzQjtJQUNqQyxTQUFTLENBQXFCO0lBQzlCLGdCQUFnQixDQUE4QjtJQUM5QyxjQUFjLENBQXdDO0lBQ3RELGtCQUFrQixDQUFvQztJQUN0RCxPQUFPLENBQXlCO0lBRWhDO1FBeEVBOzs7O1dBSUc7UUFFSSxnQkFBVyxHQUF3QixLQUFLLENBQUM7UUErQmhEOztXQUVHO1FBRUksc0JBQWlCLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUV0RDs7O1dBR0c7UUFHSSxnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFTLENBQUM7UUFVL0MsbUJBQWMsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBQ3JDLG9CQUFlLEdBQUcsS0FBSyxDQUFDO1FBRXhCLG9CQUFlLEdBQUcsTUFBTSxDQUFDLHlCQUF5QixDQUFDLENBQUM7UUFDcEQsb0JBQWUsR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUM1QyxvQkFBZSxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUN6QyxnQkFBVyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNqQyxjQUFTLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzlCLHFCQUFnQixHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQzlDLG1CQUFjLEdBQUcsTUFBTSxDQUFDLDRCQUE0QixDQUFDLENBQUM7UUFDdEQsdUJBQWtCLEdBQUcsTUFBTSxDQUFDLHdCQUF3QixDQUFDLENBQUM7UUFDdEQsWUFBTyxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUc5QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsd0JBQXdCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUV4RixJQUFJLENBQUMsZ0JBQWdCLENBQUMsdUJBQXVCO2FBQzFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO2FBQ3BDLFNBQVMsQ0FBQyxDQUFDLElBQThCLEVBQUUsRUFBRTtZQUM1QyxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssUUFBUSxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDcEQsSUFBSSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRTtvQkFDaEMsSUFDRSxTQUFTLEtBQUssSUFBSTt3QkFDbEIsU0FBUyxDQUFDLFVBQVU7d0JBQ3BCLFNBQVMsQ0FBQyxhQUFhLEVBQ3ZCLENBQUM7d0JBQ0QsU0FBUyxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7b0JBQy9CLENBQUM7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFTCxJQUFJLENBQUMsZ0JBQWdCLENBQUMscUJBQXFCO2FBQ3hDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO2FBQ3BDLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ25CLElBQUksS0FBSyxLQUFLLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDL0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7Z0JBQ3pCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDckMsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUwsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVc7YUFDOUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7YUFDcEMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNuQixDQUFDLENBQUMsQ0FBQztRQUVMLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBRTVCLElBQUksQ0FBQyxlQUFlLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUV2RCxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0lBRU0sa0JBQWtCO1FBQ3ZCLHNGQUFzRjtRQUN0RixVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxXQUFXLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQy9DLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDOUQsQ0FBQztZQUVELElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN2QixDQUFDLENBQUMsQ0FBQztRQUVILG1FQUFtRTtRQUNuRSxpREFBaUQ7UUFDakQsSUFBSSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ3RFLFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2QsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDO29CQUN2QixJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFFM0MsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7b0JBRTdCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDckQsQ0FBQztnQkFFRCxJQUFJLElBQUksQ0FBQyxXQUFXLEtBQUssU0FBUyxFQUFFLENBQUM7b0JBQ25DLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQzlELENBQUM7Z0JBRUQsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUVuQixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDdkIsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztZQUU1QixJQUFJLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO2dCQUMzQixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7WUFDdEMsQ0FBQyxDQUFDLENBQUM7WUFFSCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDckIsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ1IsQ0FBQztJQUVNLGtCQUFrQjtRQUN2QixJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUN4RSxJQUFJLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyw2Q0FBNkMsRUFBRTtnQkFDdEUsdUJBQXVCLEVBQUUsQ0FBQztnQkFDMUIseUJBQXlCLEVBQUUsd0NBQXdDO2FBQ3BFLENBQUMsQ0FBQztZQUVILElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO1FBQzlCLENBQUM7SUFDSCxDQUFDO0lBRU0sV0FBVyxDQUFDLE9BQXNCO1FBQ3ZDLElBQUksT0FBTyxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUM7WUFDM0IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQztZQUMvQyxJQUNFLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQyxZQUFZO2dCQUNuQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUMsYUFBYSxFQUNwQyxDQUFDO2dCQUNELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDOUQsQ0FBQztRQUNILENBQUM7UUFFRCxJQUFJLE9BQU8sQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDO1lBQzNCLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNmLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1lBQy9CLENBQUM7WUFDRCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFFbkIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN0QyxDQUFDO0lBQ0gsQ0FBQztJQUVNLFdBQVc7UUFDaEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUMzQixJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQy9CLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFTSxRQUFRO1FBQ2IsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFTSxtQkFBbUI7UUFDeEIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxTQUFvQztRQUN2RCxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNmLElBQUksYUFBYSxHQUFHLEtBQUssQ0FBQztZQUMxQixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsVUFBVSxLQUFLLE1BQU0sQ0FBQztZQUNqRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsVUFBVSxLQUFLLFFBQVEsQ0FBQztZQUU5QyxxRUFBcUU7WUFDckUsSUFBSSxTQUFTLElBQUksU0FBUyxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUN0QyxhQUFhLEdBQUcsSUFBSSxDQUFDO1lBQ3ZCLENBQUM7WUFFRCxLQUFLLE1BQU0sSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDOUIsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUM7Z0JBRTVELCtEQUErRDtnQkFDL0QsSUFBSSxJQUFJLEtBQUssU0FBUyxJQUFJLFFBQVEsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7b0JBQ3RELElBQUksYUFBYSxFQUFFLENBQUM7d0JBQ2xCLHlEQUF5RDt3QkFDekQscUJBQXFCO3dCQUNyQixJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQztvQkFDN0MsQ0FBQztvQkFFRCxhQUFhLEdBQUcsSUFBSSxDQUFDO2dCQUN2QixDQUFDO1lBQ0gsQ0FBQztZQUVELElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNyQixDQUFDO0lBQ0gsQ0FBQztJQUVELHNCQUFzQjtRQUNwQixvRUFBb0U7UUFDcEUsMEJBQTBCO1FBQzFCLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDO1lBQ3RELElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtnQkFDdEQsS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsRUFBRTtvQkFDaEMsTUFBTSxNQUFNLEdBQUcsRUFBRSxFQUFFLGFBQWEsQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO29CQUNuRSxPQUFPLENBQUMsQ0FBQyxDQUNQLElBQUksQ0FBQyxXQUFXLElBQUksTUFBTSxFQUFFLFFBQVEsQ0FBQyxNQUF3QixDQUFDLENBQy9ELENBQUM7Z0JBQ0osQ0FBQzthQUNGLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCxJQUFJLGdCQUFnQixHQUFHLENBQUMsQ0FBQyxDQUFDO1FBRTFCLElBQUksQ0FBQyxlQUFlO2FBQ2pCLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7YUFDM0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7YUFDcEMsU0FBUyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDbEIsMEJBQTBCO1lBQzFCLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztnQkFDeEMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7Z0JBRTFCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQ2pELENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUM3RDtvQkFDRSxNQUFNLEVBQUUsRUFBRTtvQkFDVixRQUFRLEVBQUUsRUFBRTtvQkFDWixpQkFBaUIsRUFBRSxJQUFJO29CQUN2QixVQUFVLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSTtpQkFDdkIsQ0FDRixDQUFDO2dCQUVGLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsNEJBQTRCLENBQUMsQ0FBQztnQkFDL0QsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxvQkFBb0IsQ0FDMUQsSUFBSSxDQUFDLEVBQWlCLENBQ3ZCLENBQUM7WUFDSixDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFTCxJQUFJLENBQUMsZUFBZTthQUNqQixPQUFPLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDO2FBQzlCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO2FBQ3BDLFNBQVMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ2xCLDBCQUEwQjtZQUMxQixJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7Z0JBQ3hDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO2dCQUUxQixJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLDRCQUE0QixDQUFDLENBQUM7Z0JBQ2xFLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsb0JBQW9CLENBQzVELElBQUksQ0FBQyxFQUFpQixDQUN2QixDQUFDO2dCQUVGLGtCQUFrQjtnQkFDbEIsMEJBQTBCO2dCQUMxQixJQUFJLGdCQUFnQixJQUFJLENBQUMsRUFBRSxDQUFDO29CQUMxQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLGdCQUFnQixFQUFFLFlBQVksQ0FBQyxDQUFDO29CQUNsRSxnQkFBZ0IsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDeEIsQ0FBQztnQkFFRCxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDbkIsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELG1CQUFtQjtRQUNqQix5REFBeUQ7UUFDekQsMEJBQTBCO1FBQzFCLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQztZQUNyRCxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUN0RCxDQUFDO1FBRUQsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVELGtCQUFrQjtRQUNoQixJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQzdCLElBQUksQ0FBQyxhQUFhLEdBQUcsU0FBUyxDQUFDO1FBQ2pDLENBQUM7SUFDSCxDQUFDO0lBRUQsU0FBUztRQUNQLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDakUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVELGdCQUFnQjtRQUNkLGtCQUFrQjtRQUNsQix3QkFBd0I7UUFDeEIsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDM0MsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ3pDLE9BQU8sSUFBSSxDQUFDLEdBQUcsS0FBSyxTQUFTLENBQUM7UUFDaEMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsV0FBVztRQUNULDRGQUE0RjtRQUM1RiwrRkFBK0Y7UUFDL0Ysc0ZBQXNGO1FBQ3RGLCtDQUErQztRQUUvQyx3QkFBd0I7UUFDeEIsSUFBSSxRQUFRLEdBQXdCLE1BQU0sQ0FBQztRQUUzQyxNQUFNLE9BQU8sR0FBMEQ7WUFDckUsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUU7WUFDaEUsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUU7WUFDakUsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUU7U0FDL0QsQ0FBQztRQUVGLCtFQUErRTtRQUMvRSxNQUFNLG1CQUFtQixHQUFHO1lBQzFCLFNBQVM7WUFDVCxpQkFBaUI7WUFDakIsUUFBUTtZQUNSLFNBQVM7WUFDVCxPQUFPO1lBQ1AsUUFBUTtZQUNSLGFBQWE7WUFDYiw0QkFBNEI7WUFDNUIsT0FBTztZQUNQLFFBQVE7WUFDUixVQUFVO1lBQ1YsaUJBQWlCO1lBQ2pCLG1CQUFtQjtZQUNuQiw0QkFBNEI7U0FDN0I7YUFDRSxHQUFHLENBQ0YsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUNYLDJCQUEyQixRQUFRLDZDQUE2QyxRQUFRLGdCQUFnQixDQUMzRzthQUNBLE1BQU0sQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUM7YUFDMUIsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRWQsTUFBTSxjQUFjLEdBQ2xCLElBQUksQ0FBQyxXQUFXO1lBQ2hCLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDO1lBQzlDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztZQUM3QyxDQUFDLENBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUE2QixDQUFDLGFBQWEsQ0FDN0QsbUJBQW1CLENBQ3BCLENBQUM7UUFFSixJQUFJLGNBQWMsRUFBRSxDQUFDO1lBQ25CLGtHQUFrRztZQUNsRyxRQUFRLEdBQUcsTUFBTSxDQUFDO1FBQ3BCLENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDM0IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7Z0JBQ2xDLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQzthQUNyQixDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUcsUUFBUSxFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN0QyxDQUFDO0lBQ0gsQ0FBQztJQUVELHFCQUFxQjtRQUNuQixJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNmLEtBQUssTUFBTSxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUM5QixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7WUFDdEMsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsYUFBYTtRQUNYLElBQUksSUFBSSxDQUFDLFdBQVcsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLENBQUM7WUFDakQsT0FBTyxDQUFDLElBQUksQ0FDViwrRkFBK0YsQ0FDaEcsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDOzhHQTVhVSxvQkFBb0I7a0dBQXBCLG9CQUFvQiw4T0FQcEI7WUFDVCxrQkFBa0I7WUFDbEIseUJBQXlCO1lBQ3pCLDRCQUE0QjtTQUM3QixnREE0RWdCLHdCQUF3QixrREN6SDNDLDRUQVdBOzsyRkRxQ2Esb0JBQW9CO2tCQVhoQyxTQUFTOytCQUNFLGNBQWMsYUFHYjt3QkFDVCxrQkFBa0I7d0JBQ2xCLHlCQUF5Qjt3QkFDekIsNEJBQTRCO3FCQUM3QixtQkFDZ0IsdUJBQXVCLENBQUMsTUFBTTt3REFZeEMsV0FBVztzQkFEakIsS0FBSztnQkFXQyxTQUFTO3NCQURmLEtBQUs7Z0JBU0MsV0FBVztzQkFEakIsS0FBSztnQkF1QkssVUFBVTtzQkFEcEIsS0FBSztnQkFjQyxpQkFBaUI7c0JBRHZCLE1BQU07Z0JBU0EsV0FBVztzQkFGakIsTUFBTTtnQkFLQSxLQUFLO3NCQURYLGVBQWU7dUJBQUMsd0JBQXdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgQWZ0ZXJWaWV3Q2hlY2tlZCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBRdWVyeUxpc3QsXG4gIFJlbmRlcmVyMixcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgaW5qZWN0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFNreUxvZ1NlcnZpY2UsIFNreVNjcm9sbGFibGVIb3N0U2VydmljZSB9IGZyb20gJ0Bza3l1eC9jb3JlJztcblxuaW1wb3J0IHsgRHJhZ3VsYVNlcnZpY2UgfSBmcm9tICduZzItZHJhZ3VsYSc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IFNreVJlcGVhdGVyQWRhcHRlclNlcnZpY2UgfSBmcm9tICcuL3JlcGVhdGVyLWFkYXB0ZXIuc2VydmljZSc7XG5pbXBvcnQgeyBTa3lSZXBlYXRlckF1dG9TY3JvbGxTZXJ2aWNlIH0gZnJvbSAnLi9yZXBlYXRlci1hdXRvLXNjcm9sbC5zZXJ2aWNlJztcbmltcG9ydCB7IFNreVJlcGVhdGVyQXV0b1Njcm9sbGVyIH0gZnJvbSAnLi9yZXBlYXRlci1hdXRvLXNjcm9sbGVyJztcbmltcG9ydCB7IFNreVJlcGVhdGVyRXhwYW5kTW9kZVR5cGUgfSBmcm9tICcuL3JlcGVhdGVyLWV4cGFuZC1tb2RlLXR5cGUnO1xuaW1wb3J0IHsgU2t5UmVwZWF0ZXJJdGVtUm9sZXNUeXBlIH0gZnJvbSAnLi9yZXBlYXRlci1pdGVtLXJvbGVzLnR5cGUnO1xuaW1wb3J0IHsgU2t5UmVwZWF0ZXJJdGVtQ29tcG9uZW50IH0gZnJvbSAnLi9yZXBlYXRlci1pdGVtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTa3lSZXBlYXRlclJvbGVUeXBlIH0gZnJvbSAnLi9yZXBlYXRlci1yb2xlLnR5cGUnO1xuaW1wb3J0IHsgU2t5UmVwZWF0ZXJTZXJ2aWNlIH0gZnJvbSAnLi9yZXBlYXRlci5zZXJ2aWNlJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgY29udGFpbmVyIHRvIGRpc3BsYXkgcmVwZWF0ZXIgaXRlbXMuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NreS1yZXBlYXRlcicsXG4gIHN0eWxlVXJsczogWycuL3JlcGVhdGVyLmNvbXBvbmVudC5zY3NzJ10sXG4gIHRlbXBsYXRlVXJsOiAnLi9yZXBlYXRlci5jb21wb25lbnQuaHRtbCcsXG4gIHByb3ZpZGVyczogW1xuICAgIFNreVJlcGVhdGVyU2VydmljZSxcbiAgICBTa3lSZXBlYXRlckFkYXB0ZXJTZXJ2aWNlLFxuICAgIFNreVJlcGVhdGVyQXV0b1Njcm9sbFNlcnZpY2UsXG4gIF0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBTa3lSZXBlYXRlckNvbXBvbmVudFxuICBpbXBsZW1lbnRzIEFmdGVyQ29udGVudEluaXQsIEFmdGVyVmlld0NoZWNrZWQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBPbkluaXRcbntcbiAgLyoqXG4gICAqIFRoZSBpbmRleCBvZiB0aGUgcmVwZWF0ZXIgaXRlbSB0byB2aXN1YWxseSBoaWdobGlnaHQgYXMgYWN0aXZlLlxuICAgKiBGb3IgZXhhbXBsZSwgdXNlIHRoaXMgcHJvcGVydHkgaW4gY29uanVuY3Rpb24gd2l0aCB0aGVcbiAgICogW3NwbGl0IHZpZXcgY29tcG9uZW50XShodHRwczovL2RldmVsb3Blci5ibGFja2JhdWQuY29tL3NreXV4L2NvbXBvbmVudHMvc3BsaXQtdmlldylcbiAgICogdG8gaGlnaGxpZ2h0IGEgcmVwZWF0ZXIgaXRlbSB3aGlsZSB1c2VycyBlZGl0IGl0LiBPbmx5IG9uZSBpdGVtIGNhbiBiZSBhY3RpdmUgYXQgYSB0aW1lLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGFjdGl2ZUluZGV4OiBudW1iZXIgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFRoZSBBUklBIGxhYmVsIGZvciB0aGUgcmVwZWF0ZXIgbGlzdC5cbiAgICogVGhpcyBzZXRzIHRoZSByZXBlYXRlciBsaXN0J3MgYGFyaWEtbGFiZWxgIGF0dHJpYnV0ZSB0byBwcm92aWRlIGEgdGV4dCBlcXVpdmFsZW50IGZvciBzY3JlZW4gcmVhZGVyc1xuICAgKiBbdG8gc3VwcG9ydCBhY2Nlc3NpYmlsaXR5XShodHRwczovL2RldmVsb3Blci5ibGFja2JhdWQuY29tL3NreXV4L2xlYXJuL2FjY2Vzc2liaWxpdHkpLlxuICAgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgYGFyaWEtbGFiZWxgIGF0dHJpYnV0ZSwgc2VlIHRoZSBbV0FJLUFSSUEgZGVmaW5pdGlvbl0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLyNhcmlhLWxhYmVsKS5cbiAgICogQGRlZmF1bHQgXCJMaXN0IG9mIGl0ZW1zXCJcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBhcmlhTGFiZWw6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogV2hldGhlciB1c2VycyBjYW4gY2hhbmdlIHRoZSBvcmRlciBvZiBpdGVtcyBpbiB0aGUgcmVwZWF0ZXIgbGlzdC5cbiAgICogRWFjaCByZXBlYXRlciBpdGVtIGFsc28gaGFzIGByZW9yZGVyYWJsZWAgcHJvcGVydHkgdG8gaW5kaWNhdGUgd2hldGhlclxuICAgKiB1c2VycyBjYW4gY2hhbmdlIGl0cyBvcmRlci5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyByZW9yZGVyYWJsZTogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBUaGUgbGF5b3V0IHRoYXQgZGV0ZXJtaW5lcyB3aGljaCByZXBlYXRlciBpdGVtcyBhcmUgZXhwYW5kZWQgYnkgZGVmYXVsdCBhbmQgd2hldGhlclxuICAgKiByZXBlYXRlciBpdGVtcyBhcmUgZXhwYW5kYWJsZSBhbmQgY29sbGFwc2libGUuIENvbGxhcHNlZCBpdGVtcyBkaXNwbGF5IHRpdGxlcyBvbmx5LlxuICAgKiBUaGUgdmFsaWQgb3B0aW9ucyBhcmUgYG11bHRpcGxlYCwgYG5vbmVgLCBhbmQgYHNpbmdsZWAuXG4gICAqIC0gYG11bHRpcGxlYCBsb2FkcyByZXBlYXRlciBpdGVtcyBpbiBhbiBleHBhbmRlZCBzdGF0ZSB1bmxlc3MgYGlzRXhwYW5kZWRgIGlzIHNldCB0b1xuICAgKiBgZmFsc2VgIGZvciBhIHJlcGVhdGVyIGl0ZW0uIFRoaXMgbGF5b3V0IGFsbG93cyB1c2VycyB0byBleHBhbmQgYW5kIGNvbGxhcHNlXG4gICAqIGFzIG1hbnkgcmVwZWF0ZXIgaXRlbXMgYXMgbmVjZXNzYXJ5LiBJdCBpcyBiZXN0LXN1aXRlZCB0byByZXBlYXRlciBpdGVtcyB3aGVyZSBib2R5XG4gICAqIGNvbnRlbnQgaXMgaW1wb3J0YW50IGJ1dCB1c2VycyBkb24ndCBhbHdheXMgbmVlZCB0byBzZWUgaXQuXG4gICAqIC0gYG5vbmVgIGxvYWRzIGFsbCByZXBlYXRlciBpdGVtcyBpbiBhbiBleHBhbmRlZCBzdGF0ZSBhbmQgZG9lcyBub3QgYWxsb3cgdXNlcnMgdG9cbiAgICogY29sbGFwc2UgdGhlbS4gVGhpcyBkZWZhdWx0IGxheW91dCBwcm92aWRlcyB0aGUgcXVpY2tlc3QgYWNjZXNzIHRvIHRoZSBkZXRhaWxzIGluIHRoZVxuICAgKiByZXBlYXRlciBpdGVtcy4gSXQgaXMgYmVzdC1zdWl0ZWQgdG8gcmVwZWF0ZXIgaXRlbXMgd2l0aCBjb25jaXNlIGNvbnRlbnRcbiAgICogdGhhdCB1c2VycyBuZWVkIHRvIHZpZXcgZnJlcXVlbnRseS5cbiAgICogLSBgc2luZ2xlYCBsb2FkcyBvbmUgcmVwZWF0ZXIgaXRlbSBpbiBhbiBleHBhbmRlZCBzdGF0ZSBhbmQgY29sbGFwc2VzIGFsbCBvdGhlcnMuXG4gICAqIFRoZSBleHBhbmRlZCByZXBlYXRlciBpdGVtIGlzIHRoZSBmaXJzdCBvbmUgd2hlcmUgYGlzRXhwYW5kZWRgIGlzIHNldCB0byBgdHJ1ZWAuIFRoaXMgbGF5b3V0XG4gICAqIGFsbG93cyB1c2VycyB0byBleHBhbmQgb25lIGl0ZW0gYXQgYSB0aW1lLiBJdCBwcm92aWRlcyB0aGUgbW9zdCBjb21wYWN0IHZpZXcgYW5kIGlzXG4gICAqIGJlc3Qtc3VpdGVkIHRvIHJlcGVhdGVyIGl0ZW1zIHdoZXJlIHRoZSBtb3N0IGltcG9ydGFudCBpbmZvcm1hdGlvbiBpcyBpbiB0aGUgdGl0bGVzXG4gICAqIGFuZCB1c2VycyBvbmx5IG9jY2FzaW9uYWxseSBuZWVkIHRvIHZpZXcgdGhlIGJvZHkgY29udGVudC5cbiAgICogQGRlZmF1bHQgXCJub25lXCJcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgZXhwYW5kTW9kZSh2YWx1ZTogU2t5UmVwZWF0ZXJFeHBhbmRNb2RlVHlwZSB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuI3JlcGVhdGVyU2VydmljZS5leHBhbmRNb2RlID0gdmFsdWU7XG4gICAgdGhpcy4jdXBkYXRlRm9yRXhwYW5kTW9kZSgpO1xuICB9XG5cbiAgcHVibGljIGdldCBleHBhbmRNb2RlKCk6IFNreVJlcGVhdGVyRXhwYW5kTW9kZVR5cGUge1xuICAgIHJldHVybiB0aGlzLiNyZXBlYXRlclNlcnZpY2UuZXhwYW5kTW9kZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaXJlcyB3aGVuIHRoZSBhY3RpdmUgcmVwZWF0ZXIgaXRlbSBjaGFuZ2VzLlxuICAgKi9cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBhY3RpdmVJbmRleENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuXG4gIC8qKlxuICAgKiBGaXJlcyB3aGVuIHVzZXJzIGNoYW5nZSB0aGUgb3JkZXIgb2YgcmVwZWF0ZXIgaXRlbXMuXG4gICAqIFRoaXMgZXZlbnQgZW1pdHMgYW4gb3JkZXJlZCBhcnJheSBvZiB0aGUgYHRhZ2AgcHJvcGVydGllcyB0aGF0IHRoZSBjb25zdW1lciBwcm92aWRlcyBmb3IgZWFjaCByZXBlYXRlciBpdGVtLlxuICAgKi9cbiAgQE91dHB1dCgpXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIHB1YmxpYyBvcmRlckNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55W10+KCk7XG5cbiAgQENvbnRlbnRDaGlsZHJlbihTa3lSZXBlYXRlckl0ZW1Db21wb25lbnQpXG4gIHB1YmxpYyBpdGVtczogUXVlcnlMaXN0PFNreVJlcGVhdGVySXRlbUNvbXBvbmVudD4gfCB1bmRlZmluZWQ7XG5cbiAgcHVibGljIGRyYWd1bGFHcm91cE5hbWU6IHN0cmluZztcblxuICBwdWJsaWMgcm9sZTogU2t5UmVwZWF0ZXJSb2xlVHlwZSB8IHVuZGVmaW5lZDtcblxuICAjYXV0b1Njcm9sbGVyOiBTa3lSZXBlYXRlckF1dG9TY3JvbGxlciB8IHVuZGVmaW5lZDtcbiAgI25nVW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICAjaXRlbU5hbWVXYXJuZWQgPSBmYWxzZTtcblxuICAjYWRhcHRlclNlcnZpY2UgPSBpbmplY3QoU2t5UmVwZWF0ZXJBZGFwdGVyU2VydmljZSk7XG4gICNjaGFuZ2VEZXRlY3RvciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG4gICNkcmFndWxhU2VydmljZSA9IGluamVjdChEcmFndWxhU2VydmljZSk7XG4gICNlbGVtZW50UmVmID0gaW5qZWN0KEVsZW1lbnRSZWYpO1xuICAjcmVuZGVyZXIgPSBpbmplY3QoUmVuZGVyZXIyKTtcbiAgI3JlcGVhdGVyU2VydmljZSA9IGluamVjdChTa3lSZXBlYXRlclNlcnZpY2UpO1xuICAjYXV0b1Njcm9sbFN2YyA9IGluamVjdChTa3lSZXBlYXRlckF1dG9TY3JvbGxTZXJ2aWNlKTtcbiAgI3Njcm9sbGFibGVIb3N0U3ZjID0gaW5qZWN0KFNreVNjcm9sbGFibGVIb3N0U2VydmljZSk7XG4gICNsb2dTdmMgPSBpbmplY3QoU2t5TG9nU2VydmljZSk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5kcmFndWxhR3JvdXBOYW1lID0gYHNreS1yZXBlYXRlci1kcmFndWxhLSR7dGhpcy4jcmVwZWF0ZXJTZXJ2aWNlLnJlcGVhdGVyR3JvdXBJZH1gO1xuXG4gICAgdGhpcy4jcmVwZWF0ZXJTZXJ2aWNlLml0ZW1Db2xsYXBzZVN0YXRlQ2hhbmdlXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy4jbmdVbnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKChpdGVtOiBTa3lSZXBlYXRlckl0ZW1Db21wb25lbnQpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuZXhwYW5kTW9kZSA9PT0gJ3NpbmdsZScgJiYgaXRlbS5pc0V4cGFuZGVkKSB7XG4gICAgICAgICAgdGhpcy5pdGVtcz8uZm9yRWFjaCgob3RoZXJJdGVtKSA9PiB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIG90aGVySXRlbSAhPT0gaXRlbSAmJlxuICAgICAgICAgICAgICBvdGhlckl0ZW0uaXNFeHBhbmRlZCAmJlxuICAgICAgICAgICAgICBvdGhlckl0ZW0uaXNDb2xsYXBzaWJsZVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIG90aGVySXRlbS5pc0V4cGFuZGVkID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgdGhpcy4jcmVwZWF0ZXJTZXJ2aWNlLmFjdGl2ZUl0ZW1JbmRleENoYW5nZVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuI25nVW5zdWJzY3JpYmUpKVxuICAgICAgLnN1YnNjcmliZSgoaW5kZXgpID0+IHtcbiAgICAgICAgaWYgKGluZGV4ICE9PSB0aGlzLmFjdGl2ZUluZGV4KSB7XG4gICAgICAgICAgdGhpcy5hY3RpdmVJbmRleCA9IGluZGV4O1xuICAgICAgICAgIHRoaXMuYWN0aXZlSW5kZXhDaGFuZ2UuZW1pdChpbmRleCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgdGhpcy4jcmVwZWF0ZXJTZXJ2aWNlLm9yZGVyQ2hhbmdlXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy4jbmdVbnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy4jZW1pdFRhZ3MoKTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy4jdXBkYXRlRm9yRXhwYW5kTW9kZSgpO1xuXG4gICAgdGhpcy4jYWRhcHRlclNlcnZpY2Uuc2V0UmVwZWF0ZXJIb3N0KHRoaXMuI2VsZW1lbnRSZWYpO1xuXG4gICAgdGhpcy4jaW5pdGlhbGl6ZURyYWdBbmREcm9wKCk7XG4gIH1cblxuICBwdWJsaWMgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgIC8vIElmIGFjdGl2ZUluZGV4IGhhcyBiZWVuIHNldCBvbiBpbml0LCBjYWxsIHNlcnZpY2UgdG8gYWN0aXZhdGUgdGhlIGFwcHJvcHJpYXRlIGl0ZW0uXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5hY3RpdmVJbmRleCB8fCB0aGlzLmFjdGl2ZUluZGV4ID09PSAwKSB7XG4gICAgICAgIHRoaXMuI3JlcGVhdGVyU2VydmljZS5hY3RpdmF0ZUl0ZW1CeUluZGV4KHRoaXMuYWN0aXZlSW5kZXgpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLiN2YWxpZGF0ZVRhZ3MoKTtcbiAgICB9KTtcblxuICAgIC8vIEhBQ0s6IE5vdCB1cGRhdGluZyBmb3IgZXhwYW5kIG1vZGUgaW4gYSB0aW1lb3V0IGNhdXNlcyBhbiBlcnJvci5cbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyL2lzc3Vlcy82MDA1XG4gICAgdGhpcy5pdGVtcz8uY2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLiNuZ1Vuc3Vic2NyaWJlKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5pdGVtcz8ubGVuZ3RoKSB7XG4gICAgICAgICAgdGhpcy4jdXBkYXRlRm9yRXhwYW5kTW9kZSh0aGlzLml0ZW1zLmxhc3QpO1xuXG4gICAgICAgICAgdGhpcy4jdXBkYXRlUmVvcmRlcmFiaWxpdHkoKTtcblxuICAgICAgICAgIHRoaXMuI3JlcGVhdGVyU2VydmljZS5pdGVtcyA9IHRoaXMuaXRlbXMudG9BcnJheSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlSW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRoaXMuI3JlcGVhdGVyU2VydmljZS5hY3RpdmF0ZUl0ZW1CeUluZGV4KHRoaXMuYWN0aXZlSW5kZXgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy4jdXBkYXRlUm9sZSgpO1xuXG4gICAgICAgIHRoaXMuI3ZhbGlkYXRlVGFncygpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuI3VwZGF0ZUZvckV4cGFuZE1vZGUoKTtcblxuICAgICAgdGhpcy5pdGVtcz8uZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICBpdGVtLnJlb3JkZXJhYmxlID0gdGhpcy5yZW9yZGVyYWJsZTtcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLiN1cGRhdGVSb2xlKCk7XG4gICAgfSwgMCk7XG4gIH1cblxuICBwdWJsaWMgbmdBZnRlclZpZXdDaGVja2VkKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy4jaXRlbU5hbWVXYXJuZWQgJiYgdGhpcy5pdGVtcz8uc29tZSgoaXRlbSkgPT4gIWl0ZW0uaXRlbU5hbWUpKSB7XG4gICAgICB0aGlzLiNsb2dTdmM/LmRlcHJlY2F0ZWQoJ1NreVJlcGVhdGVySXRlbUNvbXBvbmVudCB3aXRob3V0IGBpdGVtTmFtZWAnLCB7XG4gICAgICAgIGRlcHJlY2F0aW9uTWFqb3JWZXJzaW9uOiA4LFxuICAgICAgICByZXBsYWNlbWVudFJlY29tbWVuZGF0aW9uOiAnQWx3YXlzIHNwZWNpZnkgYW4gYGl0ZW1OYW1lYCBwcm9wZXJ0eS4nLFxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuI2l0ZW1OYW1lV2FybmVkID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzWydhY3RpdmVJbmRleCddKSB7XG4gICAgICB0aGlzLiNyZXBlYXRlclNlcnZpY2UuZW5hYmxlQWN0aXZlU3RhdGUgPSB0cnVlO1xuICAgICAgaWYgKFxuICAgICAgICBjaGFuZ2VzWydhY3RpdmVJbmRleCddLmN1cnJlbnRWYWx1ZSAhPT1cbiAgICAgICAgY2hhbmdlc1snYWN0aXZlSW5kZXgnXS5wcmV2aW91c1ZhbHVlXG4gICAgICApIHtcbiAgICAgICAgdGhpcy4jcmVwZWF0ZXJTZXJ2aWNlLmFjdGl2YXRlSXRlbUJ5SW5kZXgodGhpcy5hY3RpdmVJbmRleCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZXNbJ3Jlb3JkZXJhYmxlJ10pIHtcbiAgICAgIGlmICh0aGlzLml0ZW1zKSB7XG4gICAgICAgIHRoaXMuI3VwZGF0ZVJlb3JkZXJhYmlsaXR5KCk7XG4gICAgICB9XG4gICAgICB0aGlzLiN1cGRhdGVSb2xlKCk7XG5cbiAgICAgIHRoaXMuI2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLiNuZ1Vuc3Vic2NyaWJlLm5leHQoKTtcbiAgICB0aGlzLiNuZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCk7XG4gICAgdGhpcy4jZGVzdHJveURyYWdBbmREcm9wKCk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy4jdXBkYXRlUm9sZSgpO1xuICB9XG5cbiAgcHVibGljIG9uQ2RrT2JzZXJ2ZUNvbnRlbnQoKTogdm9pZCB7XG4gICAgdGhpcy4jdXBkYXRlUm9sZSgpO1xuICB9XG5cbiAgI3VwZGF0ZUZvckV4cGFuZE1vZGUoaXRlbUFkZGVkPzogU2t5UmVwZWF0ZXJJdGVtQ29tcG9uZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXRlbXMpIHtcbiAgICAgIGxldCBmb3VuZEV4cGFuZGVkID0gZmFsc2U7XG4gICAgICBjb25zdCBpc0NvbGxhcHNpYmxlID0gdGhpcy5leHBhbmRNb2RlICE9PSAnbm9uZSc7XG4gICAgICBjb25zdCBpc1NpbmdsZSA9IHRoaXMuZXhwYW5kTW9kZSA9PT0gJ3NpbmdsZSc7XG5cbiAgICAgIC8vIEtlZXAgYW55IG5ld2x5LWFkZGVkIGV4cGFuZGVkIGl0ZW0gZXhwYW5kZWQgYW5kIGNvbGxhcHNlIHRoZSByZXN0LlxuICAgICAgaWYgKGl0ZW1BZGRlZCAmJiBpdGVtQWRkZWQuaXNFeHBhbmRlZCkge1xuICAgICAgICBmb3VuZEV4cGFuZGVkID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHRoaXMuaXRlbXMpIHtcbiAgICAgICAgaXRlbS5pc0NvbGxhcHNpYmxlID0gaXNDb2xsYXBzaWJsZSAmJiAhIWl0ZW0uaGFzSXRlbUNvbnRlbnQ7XG5cbiAgICAgICAgLy8gQ29sbGFwc2UgYW55IGl0ZW1zIHRoYXQgYXJlbid0IHRoZSBpdGVtIHRoYXQgd2FzIGp1c3QgYWRkZWQuXG4gICAgICAgIGlmIChpdGVtICE9PSBpdGVtQWRkZWQgJiYgaXNTaW5nbGUgJiYgaXRlbS5pc0V4cGFuZGVkKSB7XG4gICAgICAgICAgaWYgKGZvdW5kRXhwYW5kZWQpIHtcbiAgICAgICAgICAgIC8vIElmIHRoaXMgaXRlbSBpcyBiZWluZyBjb2xsYXBzZWQgYmVjYXVzZSBhIG5ldyBpdGVtIHdhc1xuICAgICAgICAgICAgLy8gYWRkZWQsIGFuaW1hdGUgaXQuXG4gICAgICAgICAgICBpdGVtLnVwZGF0ZUZvckV4cGFuZGVkKGZhbHNlLCAhIWl0ZW1BZGRlZCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZm91bmRFeHBhbmRlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy4jdXBkYXRlUm9sZSgpO1xuICAgIH1cbiAgfVxuXG4gICNpbml0aWFsaXplRHJhZ0FuZERyb3AoKTogdm9pZCB7XG4gICAgLyogU2FuaXR5IGNoZWNrIHRoYXQgd2UgaGF2ZW4ndCBhbHJlYWR5IHNldCB1cCBkcmFnZ2luZyBhYmlsaXRpZXMgKi9cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmICghdGhpcy4jZHJhZ3VsYVNlcnZpY2UuZmluZCh0aGlzLmRyYWd1bGFHcm91cE5hbWUpKSB7XG4gICAgICB0aGlzLiNkcmFndWxhU2VydmljZS5jcmVhdGVHcm91cCh0aGlzLmRyYWd1bGFHcm91cE5hbWUsIHtcbiAgICAgICAgbW92ZXM6IChlbCwgX2NvbnRhaW5lciwgaGFuZGxlKSA9PiB7XG4gICAgICAgICAgY29uc3QgdGFyZ2V0ID0gZWw/LnF1ZXJ5U2VsZWN0b3IoJy5za3ktcmVwZWF0ZXItaXRlbS1ncmFiLWhhbmRsZScpO1xuICAgICAgICAgIHJldHVybiAhIShcbiAgICAgICAgICAgIHRoaXMucmVvcmRlcmFibGUgJiYgdGFyZ2V0Py5jb250YWlucyhoYW5kbGUgYXMgRWxlbWVudCB8IG51bGwpXG4gICAgICAgICAgKTtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGxldCBkcmFnZ2VkSXRlbUluZGV4ID0gLTE7XG5cbiAgICB0aGlzLiNkcmFndWxhU2VydmljZVxuICAgICAgLmRyYWcodGhpcy5kcmFndWxhR3JvdXBOYW1lKVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuI25nVW5zdWJzY3JpYmUpKVxuICAgICAgLnN1YnNjcmliZSgoYXJncykgPT4ge1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICBpZiAoYXJncy5uYW1lID09PSB0aGlzLmRyYWd1bGFHcm91cE5hbWUpIHtcbiAgICAgICAgICB0aGlzLiNkZXN0cm95QXV0b1Njcm9sbCgpO1xuXG4gICAgICAgICAgdGhpcy4jYXV0b1Njcm9sbGVyID0gdGhpcy4jYXV0b1Njcm9sbFN2Yy5hdXRvU2Nyb2xsKFxuICAgICAgICAgICAgW3RoaXMuI3Njcm9sbGFibGVIb3N0U3ZjLmdldFNjcm9sbGFibGVIb3N0KHRoaXMuI2VsZW1lbnRSZWYpXSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbWFyZ2luOiAyMCxcbiAgICAgICAgICAgICAgbWF4U3BlZWQ6IDEwLFxuICAgICAgICAgICAgICBzY3JvbGxXaGVuT3V0c2lkZTogdHJ1ZSxcbiAgICAgICAgICAgICAgYXV0b1Njcm9sbDogKCkgPT4gdHJ1ZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIHRoaXMuI3JlbmRlcmVyLmFkZENsYXNzKGFyZ3MuZWwsICdza3ktcmVwZWF0ZXItaXRlbS1kcmFnZ2luZycpO1xuICAgICAgICAgIGRyYWdnZWRJdGVtSW5kZXggPSB0aGlzLiNhZGFwdGVyU2VydmljZS5nZXRSZXBlYXRlckl0ZW1JbmRleChcbiAgICAgICAgICAgIGFyZ3MuZWwgYXMgSFRNTEVsZW1lbnQsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICB0aGlzLiNkcmFndWxhU2VydmljZVxuICAgICAgLmRyYWdlbmQodGhpcy5kcmFndWxhR3JvdXBOYW1lKVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuI25nVW5zdWJzY3JpYmUpKVxuICAgICAgLnN1YnNjcmliZSgoYXJncykgPT4ge1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICBpZiAoYXJncy5uYW1lID09PSB0aGlzLmRyYWd1bGFHcm91cE5hbWUpIHtcbiAgICAgICAgICB0aGlzLiNkZXN0cm95QXV0b1Njcm9sbCgpO1xuXG4gICAgICAgICAgdGhpcy4jcmVuZGVyZXIucmVtb3ZlQ2xhc3MoYXJncy5lbCwgJ3NreS1yZXBlYXRlci1pdGVtLWRyYWdnaW5nJyk7XG4gICAgICAgICAgY29uc3QgbmV3SXRlbUluZGV4ID0gdGhpcy4jYWRhcHRlclNlcnZpY2UuZ2V0UmVwZWF0ZXJJdGVtSW5kZXgoXG4gICAgICAgICAgICBhcmdzLmVsIGFzIEhUTUxFbGVtZW50LFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICAvKiBzYW5pdHkgY2hlY2sgKi9cbiAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICAgIGlmIChkcmFnZ2VkSXRlbUluZGV4ID49IDApIHtcbiAgICAgICAgICAgIHRoaXMuI3JlcGVhdGVyU2VydmljZS5yZW9yZGVySXRlbShkcmFnZ2VkSXRlbUluZGV4LCBuZXdJdGVtSW5kZXgpO1xuICAgICAgICAgICAgZHJhZ2dlZEl0ZW1JbmRleCA9IC0xO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuI2VtaXRUYWdzKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgI2Rlc3Ryb3lEcmFnQW5kRHJvcCgpOiB2b2lkIHtcbiAgICAvKiBTYW5pdHkgY2hlY2sgdGhhdCB3ZSBoYXZlIHNldCB1cCBkcmFnZ2luZyBhYmlsaXRpZXMgKi9cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmICh0aGlzLiNkcmFndWxhU2VydmljZS5maW5kKHRoaXMuZHJhZ3VsYUdyb3VwTmFtZSkpIHtcbiAgICAgIHRoaXMuI2RyYWd1bGFTZXJ2aWNlLmRlc3Ryb3kodGhpcy5kcmFndWxhR3JvdXBOYW1lKTtcbiAgICB9XG5cbiAgICB0aGlzLiNkZXN0cm95QXV0b1Njcm9sbCgpO1xuICB9XG5cbiAgI2Rlc3Ryb3lBdXRvU2Nyb2xsKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLiNhdXRvU2Nyb2xsZXIpIHtcbiAgICAgIHRoaXMuI2F1dG9TY3JvbGxlci5kZXN0cm95KCk7XG4gICAgICB0aGlzLiNhdXRvU2Nyb2xsZXIgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgI2VtaXRUYWdzKCk6IHZvaWQge1xuICAgIGNvbnN0IHRhZ3MgPSB0aGlzLiNyZXBlYXRlclNlcnZpY2UuaXRlbXMubWFwKChpdGVtKSA9PiBpdGVtLnRhZyk7XG4gICAgdGhpcy5vcmRlckNoYW5nZS5lbWl0KHRhZ3MpO1xuICB9XG5cbiAgI2V2ZXJ5SXRlbUhhc1RhZygpOiBib29sZWFuIHtcbiAgICAvKiBzYW5pdHkgY2hlY2sgKi9cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoIXRoaXMuaXRlbXMgfHwgdGhpcy5pdGVtcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaXRlbXMudG9BcnJheSgpLmV2ZXJ5KChpdGVtKSA9PiB7XG4gICAgICByZXR1cm4gaXRlbS50YWcgIT09IHVuZGVmaW5lZDtcbiAgICB9KTtcbiAgfVxuXG4gICN1cGRhdGVSb2xlKCk6IHZvaWQge1xuICAgIC8vIERldGVybWluZSBhIHJvbGUgdXNpbmcgYSBoaWVyYXJjaHkgYmFzZWQgb24gaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLXByYWN0aWNlcy0xLjEvXG4gICAgLy8gICAxLiBJZiB0aGVyZSBhcmUgb25lIG9yIG1vcmUgaW50ZXJhY3Rpb25zIGluIHRoZSByZXBlYXRlciBpdGVtIHByb2plY3RlZCBjb250ZW50LCB1c2UgZ3JpZC5cbiAgICAvLyAgIDIuIElmIHRoZXJlIGFyZSBzZWxlY3RhYmxlIHJlcGVhdGVyIGl0ZW1zIGFuZCBubyBvdGhlciBpbnRlcmFjdGlvbnMsIHVzZSBsaXN0Ym94LlxuICAgIC8vICAgMy4gSWYgdGhlcmUgYXJlIG5vIGludGVyYWN0aW9ucywgdXNlIGxpc3QuXG5cbiAgICAvLyBEZWZhdWx0IHRvIGxpc3Qgcm9sZS5cbiAgICBsZXQgYXV0b1JvbGU6IFNreVJlcGVhdGVyUm9sZVR5cGUgPSAnbGlzdCc7XG5cbiAgICBjb25zdCByb2xlTWFwOiBSZWNvcmQ8U2t5UmVwZWF0ZXJSb2xlVHlwZSwgU2t5UmVwZWF0ZXJJdGVtUm9sZXNUeXBlPiA9IHtcbiAgICAgIGxpc3Q6IHsgaXRlbTogJ2xpc3RpdGVtJywgdGl0bGU6IHVuZGVmaW5lZCwgY29udGVudDogdW5kZWZpbmVkIH0sXG4gICAgICBsaXN0Ym94OiB7IGl0ZW06ICdvcHRpb24nLCB0aXRsZTogdW5kZWZpbmVkLCBjb250ZW50OiB1bmRlZmluZWQgfSxcbiAgICAgIGdyaWQ6IHsgaXRlbTogJ3JvdycsIHRpdGxlOiAncm93aGVhZGVyJywgY29udGVudDogJ2dyaWRjZWxsJyB9LFxuICAgIH07XG5cbiAgICAvLyBCYXNlZCBvbiBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9kb20uaHRtbCNpbnRlcmFjdGl2ZS1jb250ZW50XG4gICAgY29uc3QgaW50ZXJhY3Rpb25TZWxlY3RvciA9IFtcbiAgICAgICdhW2hyZWZdJyxcbiAgICAgICdhdWRpb1tjb250cm9sc10nLFxuICAgICAgJ2J1dHRvbicsXG4gICAgICAnZGV0YWlscycsXG4gICAgICAnZW1iZWQnLFxuICAgICAgJ2lmcmFtZScsXG4gICAgICAnaW1nW3VzZW1hcF0nLFxuICAgICAgJ2lucHV0Om5vdChbdHlwZT1cImhpZGRlblwiXSknLFxuICAgICAgJ2xhYmVsJyxcbiAgICAgICdzZWxlY3QnLFxuICAgICAgJ3RleHRhcmVhJyxcbiAgICAgICd2aWRlb1tjb250cm9sc10nLFxuICAgICAgJ1tjb250ZW50ZWRpdGFibGVdJyxcbiAgICAgICcuc2t5LXJlcGVhdGVyW3JvbGU9XCJncmlkXCJdJyxcbiAgICBdXG4gICAgICAubWFwKFxuICAgICAgICAoc2VsZWN0b3IpID0+XG4gICAgICAgICAgYHNreS1yZXBlYXRlci1pdGVtLXRpdGxlICR7c2VsZWN0b3J9Om5vdChbaGlkZGVuXSksIHNreS1yZXBlYXRlci1pdGVtLWNvbnRlbnQgJHtzZWxlY3Rvcn06bm90KFtoaWRkZW5dKWAsXG4gICAgICApXG4gICAgICAuY29uY2F0KFtgc2t5dXgtZHJvcGRvd25gXSlcbiAgICAgIC5qb2luKCcsICcpO1xuXG4gICAgY29uc3QgaGFzSW50ZXJhY3Rpb24gPVxuICAgICAgdGhpcy5yZW9yZGVyYWJsZSB8fFxuICAgICAgdGhpcy5pdGVtcz8uc29tZSgoaXRlbSkgPT4gaXRlbS5pc0NvbGxhcHNpYmxlKSB8fFxuICAgICAgdGhpcy5pdGVtcz8uc29tZSgoaXRlbSkgPT4gISFpdGVtLnNlbGVjdGFibGUpIHx8XG4gICAgICAhISh0aGlzLiNlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQpLnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgIGludGVyYWN0aW9uU2VsZWN0b3IsXG4gICAgICApO1xuXG4gICAgaWYgKGhhc0ludGVyYWN0aW9uKSB7XG4gICAgICAvLyBJZiB0aGUgcmVwZWF0ZXIgbWF0Y2hlcyBpbnRlcmFjdGlvbiBzZWxlY3RvciBodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtcHJhY3RpY2VzLTEuMS8jZ3JpZFxuICAgICAgYXV0b1JvbGUgPSAnZ3JpZCc7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucm9sZSAhPT0gYXV0b1JvbGUpIHtcbiAgICAgIHRoaXMuI3JlcGVhdGVyU2VydmljZS5pdGVtUm9sZS5uZXh0KHtcbiAgICAgICAgLi4ucm9sZU1hcFthdXRvUm9sZV0sXG4gICAgICB9KTtcbiAgICAgIHRoaXMucm9sZSA9IGAke2F1dG9Sb2xlfWA7XG4gICAgICB0aGlzLiNjaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICAjdXBkYXRlUmVvcmRlcmFiaWxpdHkoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXRlbXMpIHtcbiAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB0aGlzLml0ZW1zKSB7XG4gICAgICAgIGl0ZW0ucmVvcmRlcmFibGUgPSB0aGlzLnJlb3JkZXJhYmxlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gICN2YWxpZGF0ZVRhZ3MoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmVvcmRlcmFibGUgJiYgIXRoaXMuI2V2ZXJ5SXRlbUhhc1RhZygpKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICdQbGVhc2Ugc3VwcGx5IHRhZyBwcm9wZXJ0aWVzIGZvciBlYWNoIHJlcGVhdGVyIGl0ZW0gd2hlbiByZW9yZGVyaW5nIGZ1bmN0aW9uYWxpdHkgaXMgZW5hYmxlZC4nLFxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cbiIsIjxuZy1jb250YWluZXIgI3JlcGVhdGVySG9zdD5cbiAgPGRpdlxuICAgIGNsYXNzPVwic2t5LXJlcGVhdGVyXCJcbiAgICBbYXR0ci5yb2xlXT1cInJvbGVcIlxuICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiYXJpYUxhYmVsIHx8ICgnc2t5dXhfcmVwZWF0ZXJfbGFiZWwnIHwgc2t5TGliUmVzb3VyY2VzKVwiXG4gICAgW2RyYWd1bGFdPVwiZHJhZ3VsYUdyb3VwTmFtZVwiXG4gICAgKGNka09ic2VydmVDb250ZW50KT1cIm9uQ2RrT2JzZXJ2ZUNvbnRlbnQoKVwiXG4gID5cbiAgICA8bmctY29udGVudCAvPlxuICA8L2Rpdj5cbjwvbmctY29udGFpbmVyPlxuIl19