@eui/components 17.1.1-snapshot-1705631166669 → 17.1.1-snapshot-1705977245006

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.
@@ -352,7 +352,7 @@ export class EuiDropdownComponent extends BaseDirective {
352
352
  }
353
353
  }
354
354
  /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: EuiDropdownComponent, deps: [{ token: i1.Overlay }, { token: i0.ViewContainerRef }, { token: i1.ScrollDispatcher }, { token: i2.EuiDropdownService }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component }); }
355
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.8", type: EuiDropdownComponent, selector: "eui-dropdown", inputs: { e2eAttr: "e2eAttr", tabIndex: "tabIndex", width: "width", position: "position", isBlock: "isBlock", isDropDownRightAligned: "isDropDownRightAligned", isClosedOnClickInside: "isClosedOnClickInside", isLabelUpdatedFromSelectedItem: "isLabelUpdatedFromSelectedItem", isExpandOnHover: "isExpandOnHover", hasTabNavigation: "hasTabNavigation" }, host: { properties: { "class": "this.cssClasses" } }, queries: [{ propertyName: "euiDropdownItems", predicate: EuiDropdownItemComponent, descendants: true }], viewQueries: [{ propertyName: "templatePortalContent", first: true, predicate: ["templatePortalContent"], descendants: true }, { propertyName: "triggerRef", first: true, predicate: ["triggerRef"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div #triggerRef class=\"eui-dropdown__trigger-container\" (click)=\"onTriggerClicked($event)\">\n <ng-content></ng-content>\n</div>\n\n<ng-template #templatePortalContent>\n <div\n attr.data-e2e=\"{{ e2eAttr }}\"\n [@openClose]=\"isOpen ? 'open' : 'closed'\"\n cdkTrapFocus\n [cdkTrapFocusAutoCapture]=\"trapFocusAutoCapture\"\n role=\"dialog\"\n aria-label=\"eUI dropdown panel\"\n class=\"eui-dropdown__panel-container\"\n [style.width]=\"width\"\n [tabindex]=\"tabIndex\"\n (click)=\"onClick()\">\n <ng-content select=\"eui-dropdown-content\"></ng-content>\n </div>\n</ng-template>\n", styles: [".eui-dropdown .eui-dropdown{display:none}.eui-dropdown .eui-dropdown__trigger-container{display:inherit}.eui-dropdown__panel{position:inherit}.eui-dropdown__panel eui-dropdown-content{display:block}.eui-dropdown__panel-container{background:var(--eui-base-color-white);border-radius:var(--eui-base-border-radius);box-shadow:0 2px 4px -1px #0003,0 4px 5px #00000024,0 1px 10px #0000001f;display:block;height:auto;min-width:8rem;overflow:auto;position:relative}.eui-dropdown__panel-container::-webkit-scrollbar{display:inherit;height:5px;width:5px;background-color:var(--eui-base-color-grey-5)}.eui-dropdown__panel-container::-webkit-scrollbar-thumb{background-color:var(--eui-base-color-grey-20);border-radius:5rem}.eui-dropdown__panel-container::-webkit-scrollbar-thumb:hover{background-color:var(--eui-base-color-grey-50)}.eui-dropdown__panel-container::-webkit-scrollbar-track{background-color:var(--eui-base-color-grey-5);border-radius:0}.eui-dropdown__panel-container .eui-dropdown-item{background:none;border:none;box-shadow:none;cursor:pointer;display:block;outline:none;padding:var(--eui-base-spacing-xs) var(--eui-base-spacing-s);position:relative;-webkit-tap-highlight-color:transparent;text-align:left;text-decoration:none;-webkit-user-select:none;user-select:none;width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.eui-dropdown__panel-container .eui-dropdown-item--has-subdropdown+*:not(.eui-dropdown-item){display:none}.eui-dropdown__panel-container .eui-dropdown-item .eui-dropdown-item__container{align-items:center;display:flex;min-height:calc(var(--eui-base-spacing-m) + var(--eui-base-spacing-2xs))}.eui-dropdown__panel-container .eui-dropdown-item .eui-dropdown-item__container .eui-dropdown-item__content{align-items:center;display:flex;width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.eui-dropdown__panel-container .eui-dropdown-item .eui-dropdown-item__container .eui-dropdown-item__content .eui-dropdown-item__content-text{align-items:center;display:flex;width:100%}.eui-dropdown__panel-container .eui-dropdown-item .eui-dropdown-item__container .eui-dropdown-item__content .eui-dropdown-item__content-text .eui-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.eui-dropdown__panel-container .eui-dropdown-item .eui-dropdown-item__container .eui-dropdown-item__content .eui-dropdown-item__content-icon{align-items:center;display:flex;margin-left:var(--eui-base-spacing-s)}.eui-dropdown-item:hover{background-color:var(--eui-base-color-grey-5)}.eui-dropdown-item:disabled{pointer-events:none;color:var(--eui-base-color-grey-50);font:normal normal 400 1rem/1.25rem var(--eui-base-font-family);font-style:italic}.eui-dropdown-item:disabled:hover,.eui-dropdown-item:disabled:focus{background:none}.eui-dropdown-item--active{background-color:var(--eui-base-color-primary-10)!important;outline:2px solid var(--eui-base-color-accessible-focus)!important;outline-offset:-2px!important}.eui-dropdown-item--active:disabled{background:none!important}.eui-dropdown--block .eui-dropdown__trigger-container .eui-button{display:block;width:100%}\n"], dependencies: [{ kind: "directive", type: i3.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }], animations: [openClose], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
355
+ /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.8", type: EuiDropdownComponent, selector: "eui-dropdown", inputs: { e2eAttr: "e2eAttr", tabIndex: "tabIndex", width: "width", position: "position", isBlock: "isBlock", isDropDownRightAligned: "isDropDownRightAligned", isClosedOnClickInside: "isClosedOnClickInside", isLabelUpdatedFromSelectedItem: "isLabelUpdatedFromSelectedItem", isExpandOnHover: "isExpandOnHover", hasTabNavigation: "hasTabNavigation" }, host: { properties: { "class": "this.cssClasses" } }, queries: [{ propertyName: "euiDropdownItems", predicate: EuiDropdownItemComponent, descendants: true }], viewQueries: [{ propertyName: "templatePortalContent", first: true, predicate: ["templatePortalContent"], descendants: true }, { propertyName: "triggerRef", first: true, predicate: ["triggerRef"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div #triggerRef class=\"eui-dropdown__trigger-container\" (click)=\"onTriggerClicked($event)\">\n <ng-content></ng-content>\n</div>\n\n<ng-template #templatePortalContent>\n <div\n attr.data-e2e=\"{{ e2eAttr }}\"\n [@openClose]=\"isOpen ? 'open' : 'closed'\"\n cdkTrapFocus\n [cdkTrapFocusAutoCapture]=\"trapFocusAutoCapture\"\n role=\"dialog\"\n aria-label=\"eUI dropdown panel\"\n class=\"eui-dropdown__panel-container\"\n [style.width]=\"width\"\n [tabindex]=\"tabIndex\"\n (click)=\"onClick()\">\n <ng-content select=\"eui-dropdown-content\"></ng-content>\n </div>\n</ng-template>\n", styles: [".eui-dropdown .eui-dropdown{display:none}.eui-dropdown .eui-dropdown__trigger-container{display:inherit}.eui-dropdown__panel{position:inherit}.eui-dropdown__panel eui-dropdown-content{display:block}.eui-dropdown__panel-container{background:var(--eui-base-color-white);border-radius:var(--eui-base-border-radius);box-shadow:0 2px 4px -1px #0003,0 4px 5px #00000024,0 1px 10px #0000001f;display:block;height:auto;min-width:8rem;overflow:auto;position:relative}.eui-dropdown__panel-container::-webkit-scrollbar{display:inherit;height:5px;width:5px;background-color:var(--eui-base-color-grey-5)}.eui-dropdown__panel-container::-webkit-scrollbar-thumb{background-color:var(--eui-base-color-grey-20);border-radius:5rem}.eui-dropdown__panel-container::-webkit-scrollbar-thumb:hover{background-color:var(--eui-base-color-grey-50)}.eui-dropdown__panel-container::-webkit-scrollbar-track{background-color:var(--eui-base-color-grey-5);border-radius:0}.eui-dropdown__panel-container .eui-dropdown-item{background:none;border:none;box-shadow:none;cursor:pointer;display:block;outline:none;padding:var(--eui-base-spacing-xs) var(--eui-base-spacing-s);position:relative;-webkit-tap-highlight-color:transparent;text-align:left;text-decoration:none;-webkit-user-select:none;user-select:none;width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.eui-dropdown__panel-container .eui-dropdown-item--has-subdropdown+*:not(.eui-dropdown-item){display:none}.eui-dropdown__panel-container .eui-dropdown-item .eui-dropdown-item__container{align-items:center;display:flex;min-height:calc(var(--eui-base-spacing-m) + var(--eui-base-spacing-2xs))}.eui-dropdown__panel-container .eui-dropdown-item .eui-dropdown-item__container .eui-dropdown-item__content{align-items:center;display:flex;width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.eui-dropdown__panel-container .eui-dropdown-item .eui-dropdown-item__container .eui-dropdown-item__content .eui-dropdown-item__content-text{align-items:center;display:flex;width:100%}.eui-dropdown__panel-container .eui-dropdown-item .eui-dropdown-item__container .eui-dropdown-item__content .eui-dropdown-item__content-text .eui-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.eui-dropdown__panel-container .eui-dropdown-item .eui-dropdown-item__container .eui-dropdown-item__content .eui-dropdown-item__content-icon{align-items:center;display:flex;margin-left:var(--eui-base-spacing-s)}.eui-dropdown-item:hover{background-color:var(--eui-base-color-grey-5)}.eui-dropdown-item:disabled{pointer-events:none;color:var(--eui-base-color-grey-50);font:normal normal 400 1rem/1.25rem var(--eui-base-font-family);font-style:italic}.eui-dropdown-item:disabled:hover,.eui-dropdown-item:disabled:focus{background:none}.eui-dropdown-item--active{background-color:var(--eui-base-color-primary-10)!important;outline:2px solid var(--eui-base-color-accessible-focus)!important;outline-offset:-2px!important}.eui-dropdown-item--active:disabled{background:none!important}.eui-dropdown--block .eui-dropdown__trigger-container .eui-button{display:inherit;width:100%}\n"], dependencies: [{ kind: "directive", type: i3.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }], animations: [openClose], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
356
356
  }
357
357
  __decorate([
358
358
  coerceBoolean
@@ -374,7 +374,7 @@ __decorate([
374
374
  ], EuiDropdownComponent.prototype, "hasTabNavigation", void 0);
375
375
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: EuiDropdownComponent, decorators: [{
376
376
  type: Component,
377
- args: [{ selector: 'eui-dropdown', animations: [openClose], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<div #triggerRef class=\"eui-dropdown__trigger-container\" (click)=\"onTriggerClicked($event)\">\n <ng-content></ng-content>\n</div>\n\n<ng-template #templatePortalContent>\n <div\n attr.data-e2e=\"{{ e2eAttr }}\"\n [@openClose]=\"isOpen ? 'open' : 'closed'\"\n cdkTrapFocus\n [cdkTrapFocusAutoCapture]=\"trapFocusAutoCapture\"\n role=\"dialog\"\n aria-label=\"eUI dropdown panel\"\n class=\"eui-dropdown__panel-container\"\n [style.width]=\"width\"\n [tabindex]=\"tabIndex\"\n (click)=\"onClick()\">\n <ng-content select=\"eui-dropdown-content\"></ng-content>\n </div>\n</ng-template>\n", styles: [".eui-dropdown .eui-dropdown{display:none}.eui-dropdown .eui-dropdown__trigger-container{display:inherit}.eui-dropdown__panel{position:inherit}.eui-dropdown__panel eui-dropdown-content{display:block}.eui-dropdown__panel-container{background:var(--eui-base-color-white);border-radius:var(--eui-base-border-radius);box-shadow:0 2px 4px -1px #0003,0 4px 5px #00000024,0 1px 10px #0000001f;display:block;height:auto;min-width:8rem;overflow:auto;position:relative}.eui-dropdown__panel-container::-webkit-scrollbar{display:inherit;height:5px;width:5px;background-color:var(--eui-base-color-grey-5)}.eui-dropdown__panel-container::-webkit-scrollbar-thumb{background-color:var(--eui-base-color-grey-20);border-radius:5rem}.eui-dropdown__panel-container::-webkit-scrollbar-thumb:hover{background-color:var(--eui-base-color-grey-50)}.eui-dropdown__panel-container::-webkit-scrollbar-track{background-color:var(--eui-base-color-grey-5);border-radius:0}.eui-dropdown__panel-container .eui-dropdown-item{background:none;border:none;box-shadow:none;cursor:pointer;display:block;outline:none;padding:var(--eui-base-spacing-xs) var(--eui-base-spacing-s);position:relative;-webkit-tap-highlight-color:transparent;text-align:left;text-decoration:none;-webkit-user-select:none;user-select:none;width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.eui-dropdown__panel-container .eui-dropdown-item--has-subdropdown+*:not(.eui-dropdown-item){display:none}.eui-dropdown__panel-container .eui-dropdown-item .eui-dropdown-item__container{align-items:center;display:flex;min-height:calc(var(--eui-base-spacing-m) + var(--eui-base-spacing-2xs))}.eui-dropdown__panel-container .eui-dropdown-item .eui-dropdown-item__container .eui-dropdown-item__content{align-items:center;display:flex;width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.eui-dropdown__panel-container .eui-dropdown-item .eui-dropdown-item__container .eui-dropdown-item__content .eui-dropdown-item__content-text{align-items:center;display:flex;width:100%}.eui-dropdown__panel-container .eui-dropdown-item .eui-dropdown-item__container .eui-dropdown-item__content .eui-dropdown-item__content-text .eui-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.eui-dropdown__panel-container .eui-dropdown-item .eui-dropdown-item__container .eui-dropdown-item__content .eui-dropdown-item__content-icon{align-items:center;display:flex;margin-left:var(--eui-base-spacing-s)}.eui-dropdown-item:hover{background-color:var(--eui-base-color-grey-5)}.eui-dropdown-item:disabled{pointer-events:none;color:var(--eui-base-color-grey-50);font:normal normal 400 1rem/1.25rem var(--eui-base-font-family);font-style:italic}.eui-dropdown-item:disabled:hover,.eui-dropdown-item:disabled:focus{background:none}.eui-dropdown-item--active{background-color:var(--eui-base-color-primary-10)!important;outline:2px solid var(--eui-base-color-accessible-focus)!important;outline-offset:-2px!important}.eui-dropdown-item--active:disabled{background:none!important}.eui-dropdown--block .eui-dropdown__trigger-container .eui-button{display:block;width:100%}\n"] }]
377
+ args: [{ selector: 'eui-dropdown', animations: [openClose], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<div #triggerRef class=\"eui-dropdown__trigger-container\" (click)=\"onTriggerClicked($event)\">\n <ng-content></ng-content>\n</div>\n\n<ng-template #templatePortalContent>\n <div\n attr.data-e2e=\"{{ e2eAttr }}\"\n [@openClose]=\"isOpen ? 'open' : 'closed'\"\n cdkTrapFocus\n [cdkTrapFocusAutoCapture]=\"trapFocusAutoCapture\"\n role=\"dialog\"\n aria-label=\"eUI dropdown panel\"\n class=\"eui-dropdown__panel-container\"\n [style.width]=\"width\"\n [tabindex]=\"tabIndex\"\n (click)=\"onClick()\">\n <ng-content select=\"eui-dropdown-content\"></ng-content>\n </div>\n</ng-template>\n", styles: [".eui-dropdown .eui-dropdown{display:none}.eui-dropdown .eui-dropdown__trigger-container{display:inherit}.eui-dropdown__panel{position:inherit}.eui-dropdown__panel eui-dropdown-content{display:block}.eui-dropdown__panel-container{background:var(--eui-base-color-white);border-radius:var(--eui-base-border-radius);box-shadow:0 2px 4px -1px #0003,0 4px 5px #00000024,0 1px 10px #0000001f;display:block;height:auto;min-width:8rem;overflow:auto;position:relative}.eui-dropdown__panel-container::-webkit-scrollbar{display:inherit;height:5px;width:5px;background-color:var(--eui-base-color-grey-5)}.eui-dropdown__panel-container::-webkit-scrollbar-thumb{background-color:var(--eui-base-color-grey-20);border-radius:5rem}.eui-dropdown__panel-container::-webkit-scrollbar-thumb:hover{background-color:var(--eui-base-color-grey-50)}.eui-dropdown__panel-container::-webkit-scrollbar-track{background-color:var(--eui-base-color-grey-5);border-radius:0}.eui-dropdown__panel-container .eui-dropdown-item{background:none;border:none;box-shadow:none;cursor:pointer;display:block;outline:none;padding:var(--eui-base-spacing-xs) var(--eui-base-spacing-s);position:relative;-webkit-tap-highlight-color:transparent;text-align:left;text-decoration:none;-webkit-user-select:none;user-select:none;width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.eui-dropdown__panel-container .eui-dropdown-item--has-subdropdown+*:not(.eui-dropdown-item){display:none}.eui-dropdown__panel-container .eui-dropdown-item .eui-dropdown-item__container{align-items:center;display:flex;min-height:calc(var(--eui-base-spacing-m) + var(--eui-base-spacing-2xs))}.eui-dropdown__panel-container .eui-dropdown-item .eui-dropdown-item__container .eui-dropdown-item__content{align-items:center;display:flex;width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.eui-dropdown__panel-container .eui-dropdown-item .eui-dropdown-item__container .eui-dropdown-item__content .eui-dropdown-item__content-text{align-items:center;display:flex;width:100%}.eui-dropdown__panel-container .eui-dropdown-item .eui-dropdown-item__container .eui-dropdown-item__content .eui-dropdown-item__content-text .eui-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.eui-dropdown__panel-container .eui-dropdown-item .eui-dropdown-item__container .eui-dropdown-item__content .eui-dropdown-item__content-icon{align-items:center;display:flex;margin-left:var(--eui-base-spacing-s)}.eui-dropdown-item:hover{background-color:var(--eui-base-color-grey-5)}.eui-dropdown-item:disabled{pointer-events:none;color:var(--eui-base-color-grey-50);font:normal normal 400 1rem/1.25rem var(--eui-base-font-family);font-style:italic}.eui-dropdown-item:disabled:hover,.eui-dropdown-item:disabled:focus{background:none}.eui-dropdown-item--active{background-color:var(--eui-base-color-primary-10)!important;outline:2px solid var(--eui-base-color-accessible-focus)!important;outline-offset:-2px!important}.eui-dropdown-item--active:disabled{background:none!important}.eui-dropdown--block .eui-dropdown__trigger-container .eui-button{display:inherit;width:100%}\n"] }]
378
378
  }], ctorParameters: () => [{ type: i1.Overlay }, { type: i0.ViewContainerRef }, { type: i1.ScrollDispatcher }, { type: i2.EuiDropdownService }, { type: i0.Renderer2 }], propDecorators: { e2eAttr: [{
379
379
  type: Input
380
380
  }], tabIndex: [{
@@ -408,4 +408,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.8", ngImpor
408
408
  type: HostBinding,
409
409
  args: ['class']
410
410
  }] } });
411
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXVpLWRyb3Bkb3duLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2V1aS1kcm9wZG93bi9ldWktZHJvcGRvd24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vZXVpLWRyb3Bkb3duL2V1aS1kcm9wZG93bi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCx1QkFBdUIsRUFDdkIsV0FBVyxFQUNYLGlCQUFpQixFQUNqQixLQUFLLEVBS0wsU0FBUyxFQUVULGVBQWUsR0FJbEIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUVILHNCQUFzQixHQU16QixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFBRSxlQUFlLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsMEJBQTBCLEVBQWlCLE1BQU0sbUJBQW1CLENBQUM7QUFFOUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFMUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3BELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDZDQUE2QyxDQUFDOzs7OztBQVV2RixNQUFNLE9BQU8sb0JBQXFCLFNBQVEsYUFBYTtJQStDbkQsSUFDSSxVQUFVO1FBQ1YsT0FBTztZQUNILElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ3pDLEtBQUssQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDO1NBQ3RDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUks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QUZmLEtBQUs7Z0JBb0JGLFVBQVU7c0JBRGIsV0FBVzt1QkFBQyxPQUFPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgVmlld0VuY2Fwc3VsYXRpb24sXG4gICAgSW5wdXQsXG4gICAgT25Jbml0LFxuICAgIE9uRGVzdHJveSxcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIFZpZXdDb250YWluZXJSZWYsXG4gICAgVmlld0NoaWxkLFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIENvbnRlbnRDaGlsZHJlbixcbiAgICBRdWVyeUxpc3QsXG4gICAgRWxlbWVudFJlZixcbiAgICBSZW5kZXJlcjIsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgY29lcmNlQm9vbGVhblByb3BlcnR5LCBCb29sZWFuSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHtcbiAgICBDZGtTY3JvbGxhYmxlLFxuICAgIENvbm5lY3Rpb25Qb3NpdGlvblBhaXIsXG4gICAgRmxleGlibGVDb25uZWN0ZWRQb3NpdGlvblN0cmF0ZWd5LFxuICAgIEZsZXhpYmxlQ29ubmVjdGVkUG9zaXRpb25TdHJhdGVneU9yaWdpbixcbiAgICBPdmVybGF5LFxuICAgIE92ZXJsYXlSZWYsXG4gICAgU2Nyb2xsRGlzcGF0Y2hlcixcbn0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBmcm9tRXZlbnQsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBUZW1wbGF0ZVBvcnRhbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnO1xuaW1wb3J0IHsgQWN0aXZlRGVzY2VuZGFudEtleU1hbmFnZXIsIEhpZ2hsaWdodGFibGUgfSBmcm9tICdAYW5ndWxhci9jZGsvYTExeSc7XG5cbmltcG9ydCB7IEJhc2VEaXJlY3RpdmUgfSBmcm9tICdAZXVpL2NvbXBvbmVudHMvc2hhcmVkJztcbmltcG9ydCB7IGNvZXJjZUJvb2xlYW4gfSBmcm9tICdAZXVpL2Jhc2UnO1xuXG5pbXBvcnQgeyBvcGVuQ2xvc2UgfSBmcm9tICcuL2FuaW1hdGlvbnMvb3Blbi1jbG9zZSc7XG5pbXBvcnQgeyBFdWlEcm9wZG93bkl0ZW1Db21wb25lbnQgfSBmcm9tICcuL2Ryb3Bkb3duLWl0ZW0vZXVpLWRyb3Bkb3duLWl0ZW0uY29tcG9uZW50JztcbmltcG9ydCB7IEV1aURyb3Bkb3duU2VydmljZSB9IGZyb20gJy4vZXVpLWRyb3Bkb3duLnNlcnZpY2UnO1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdldWktZHJvcGRvd24nLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9ldWktZHJvcGRvd24uY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3N0eWxlcy9faW5kZXguc2NzcyddLFxuICAgIGFuaW1hdGlvbnM6IFtvcGVuQ2xvc2VdLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG59KVxuZXhwb3J0IGNsYXNzIEV1aURyb3Bkb3duQ29tcG9uZW50IGV4dGVuZHMgQmFzZURpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBBZnRlclZpZXdJbml0IHtcbiAgICBASW5wdXQoKSBlMmVBdHRyID0gJ2V1aS1kcm9wZG93bic7XG4gICAgQElucHV0KCkgdGFiSW5kZXggPSAtMTtcbiAgICBASW5wdXQoKSB3aWR0aCA9ICdhdXRvJztcbiAgICBASW5wdXQoKSBwb3NpdGlvbjogJ3RvcCcgfCAncmlnaHQnIHwgJ2JvdHRvbScgfCAnbGVmdCcgPSAnYm90dG9tJztcblxuICAgIEBWaWV3Q2hpbGQoJ3RlbXBsYXRlUG9ydGFsQ29udGVudCcpIHRlbXBsYXRlUG9ydGFsQ29udGVudDogVGVtcGxhdGVSZWY8dW5rbm93bj47XG4gICAgQFZpZXdDaGlsZCgndHJpZ2dlclJlZicpIHRyaWdnZXJSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuICAgIEBDb250ZW50Q2hpbGRyZW4oRXVpRHJvcGRvd25JdGVtQ29tcG9uZW50LCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pIGV1aURyb3Bkb3duSXRlbXM6IFF1ZXJ5TGlzdDxIaWdobGlnaHRhYmxlICYgRXVpRHJvcGRvd25JdGVtQ29tcG9uZW50PjtcblxuICAgIHB1YmxpYyB0cmFwRm9jdXNBdXRvQ2FwdHVyZSA9IHRydWU7XG4gICAgcHVibGljIHBhcmVudERyb3Bkb3duOiBFdWlEcm9wZG93bkNvbXBvbmVudDtcblxuICAgIEBJbnB1dCgpXG4gICAgQGNvZXJjZUJvb2xlYW5cbiAgICBpc0Jsb2NrOkJvb2xlYW5JbnB1dCA9IGZhbHNlO1xuICAgIEBJbnB1dCgpXG4gICAgQGNvZXJjZUJvb2xlYW5cbiAgICBpc0Ryb3BEb3duUmlnaHRBbGlnbmVkOkJvb2xlYW5JbnB1dCA9IGZhbHNlO1xuICAgIEBJbnB1dCgpXG4gICAgQGNvZXJjZUJvb2xlYW5cbiAgICBpc0Nsb3NlZE9uQ2xpY2tJbnNpZGU6Qm9vbGVhbklucHV0ID0gdHJ1ZTtcbiAgICBASW5wdXQoKVxuICAgIEBjb2VyY2VCb29sZWFuXG4gICAgaXNMYWJlbFVwZGF0ZWRGcm9tU2VsZWN0ZWRJdGVtOkJvb2xlYW5JbnB1dCA9IGZhbHNlO1xuICAgIEBJbnB1dCgpXG4gICAgQGNvZXJjZUJvb2xlYW5cbiAgICBpc0V4cGFuZE9uSG92ZXI6Qm9vbGVhbklucHV0ID0gZmFsc2U7XG4gICAgQElucHV0KClcbiAgICBAY29lcmNlQm9vbGVhblxuICAgIGhhc1RhYk5hdmlnYXRpb246Qm9vbGVhbklucHV0ID0gZmFsc2U7XG5cbiAgICBwcml2YXRlIG9yaWdpblg6ICdzdGFydCcgfCAnZW5kJyB8ICdjZW50ZXInID0gJ3N0YXJ0JztcbiAgICBwcml2YXRlIG9yaWdpblk6ICd0b3AnIHwgJ2JvdHRvbScgfCAnY2VudGVyJyA9ICdib3R0b20nO1xuICAgIHByaXZhdGUgb3ZlcmxheVg6ICdzdGFydCcgfCAnZW5kJyB8ICdjZW50ZXInID0gJ3N0YXJ0JztcbiAgICBwcml2YXRlIG92ZXJsYXlZOiAndG9wJyB8ICdib3R0b20nIHwgJ2NlbnRlcicgPSAndG9wJztcbiAgICBwcml2YXRlIHRlbXBsYXRlUG9ydGFsOiBUZW1wbGF0ZVBvcnRhbDtcbiAgICBwcml2YXRlIG92ZXJsYXlSZWY6IE92ZXJsYXlSZWY7XG4gICAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG4gICAgcHJpdmF0ZSBpc09wZW4kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgcHJpdmF0ZSBzY3JvbGxEaXNwYXRjaGVyU3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICAgIHByaXZhdGUga2V5ZG93bkxpc3RlbmVyU3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICAgIHByaXZhdGUgZXVpRHJvcGRvd25JdGVtc0V2ZW50U3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10gPSBbXTtcbiAgICBwcml2YXRlIGFjdGl2ZURlc2NlbmRhbnRLZXlNYW5hZ2VyQ2hhbmdlU3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICAgIHByaXZhdGUgYWN0aXZlRGVzY2VuZGFudEtleU1hbmFnZXI6IEFjdGl2ZURlc2NlbmRhbnRLZXlNYW5hZ2VyPEV1aURyb3Bkb3duSXRlbUNvbXBvbmVudD47XG4gICAgcHJpdmF0ZSBvcmlnaW46IEhUTUxFbGVtZW50O1xuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcycpXG4gICAgZ2V0IGNzc0NsYXNzZXMoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIHRoaXMuaXNCbG9jayA/ICdldWktZHJvcGRvd24tLWJsb2NrJyA6ICcnLFxuICAgICAgICAgICAgc3VwZXIuZ2V0Q3NzQ2xhc3NlcygnZXVpLWRyb3Bkb3duJyksXG4gICAgICAgIF0uam9pbignICcpLnRyaW0oKTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBvdmVybGF5OiBPdmVybGF5LFxuICAgICAgICBwcml2YXRlIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYsXG4gICAgICAgIHByaXZhdGUgc2Nyb2xsRGlzcGF0Y2hlcjogU2Nyb2xsRGlzcGF0Y2hlcixcbiAgICAgICAgcHJpdmF0ZSBkcm9wZG93blNlcnZpY2U6IEV1aURyb3Bkb3duU2VydmljZSxcbiAgICAgICAgcHJvdGVjdGVkIF9yZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgICkge1xuICAgICAgICBzdXBlcigpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICAvLyBDdXJyZW50bHkgdGhlIGBjZGtUcmFwRm9jdXNBdXRvQ2FwdHVyZWAgaXMgb25seSBjaGVja2VkIG9uY2Ugb24gaW5pdC5cbiAgICAgICAgaWYgKHRoaXMuaGFzRHJvcGRvd25JdGVtcykge1xuICAgICAgICAgICAgdGhpcy50cmFwRm9jdXNBdXRvQ2FwdHVyZSA9IGZhbHNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy50cmFwRm9jdXNBdXRvQ2FwdHVyZSA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5oYXNUYWJOYXZpZ2F0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLnRyYXBGb2N1c0F1dG9DYXB0dXJlID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuaXNDbG9zZWRPbkNsaWNrSW5zaWRlID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNldFBvc2l0aW9uKCk7XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnRlbXBsYXRlUG9ydGFsID0gbmV3IFRlbXBsYXRlUG9ydGFsKHRoaXMudGVtcGxhdGVQb3J0YWxDb250ZW50LCB0aGlzLnZpZXdDb250YWluZXJSZWYpO1xuXG4gICAgICAgIGlmKHRoaXMudHJpZ2dlclJlZiAmJiB0aGlzLnRyaWdnZXJSZWYubmF0aXZlRWxlbWVudC5maXJzdENoaWxkKXtcbiAgICAgICAgICAgIHRoaXMuX3JlbmRlcmVyLnNldEF0dHJpYnV0ZSh0aGlzLnRyaWdnZXJSZWYubmF0aXZlRWxlbWVudC5maXJzdENoaWxkLCAnYXJpYS1oYXNwb3B1cCcsICd0cnVlJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5uZXh0KHRydWUpO1xuICAgICAgICB0aGlzLmRlc3Ryb3kkLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuZXVpRHJvcGRvd25JdGVtc0V2ZW50U3Vic2NyaXB0aW9ucy5mb3JFYWNoKChldWlEcm9wZG93bkl0ZW1zRXZlbnRTdWJzY3JpcHRpb24pID0+IHtcbiAgICAgICAgICAgIGV1aURyb3Bkb3duSXRlbXNFdmVudFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5rZXlkb3duTGlzdGVuZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5zY3JvbGxEaXNwYXRjaGVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuYWN0aXZlRGVzY2VuZGFudEtleU1hbmFnZXJDaGFuZ2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5vdmVybGF5UmVmPy5kaXNwb3NlKCk7XG4gICAgICAgIHRoaXMub3ZlcmxheVJlZiA9IG51bGw7XG4gICAgICAgIHRoaXMuYWN0aXZlRGVzY2VuZGFudEtleU1hbmFnZXIgPSBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIGV1aS1kcm9wZG93biBpcyBvcGVuLlxuICAgICAqXG4gICAgICogQHVzYWdlTm90ZXNcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGV1aS1kcm9wZG93biAjZHJvcGRvd24+XG4gICAgICogICAgICA8bXktY29tcG9uZW50ICpuZ0lmPVwiZHJvcGRvd24uaXNPcGVuXCI+PC9teS1jb21wb25lbnQ+XG4gICAgICogPC9ldWktZHJvcGRvd24+XG4gICAgICogYGBgXG4gICAgICogQHJldHVybnMgQSBib29sZWFuIHdpdGggdmFsdWUgYHRydWVgIHdoZW4gb3Blbiwgb3RoZXJ3aXNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZ2V0IGlzT3BlbigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNPcGVuJC52YWx1ZTtcbiAgICB9XG5cbiAgICAvLyBUT0RPOiBmaW5kIHRoZSBjb3JyZWN0IHR5cGUgb3IgdHVybiBpbnRvIGEgZ2VuZXJpYywgaHR0cHM6Ly93d3cudHlwZXNjcmlwdGxhbmcub3JnL2RvY3MvaGFuZGJvb2svMi9nZW5lcmljcy5odG1sXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBwdWJsaWMgb25UcmlnZ2VyQ2xpY2tlZChlOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgIShlLnRhcmdldCBhcyBIVE1MRWxlbWVudCkucXVlcnlTZWxlY3RvcignLmRpc2FibGVkJykgJiZcbiAgICAgICAgICAgICEoZS50YXJnZXQgYXMgSFRNTEVsZW1lbnQpLnF1ZXJ5U2VsZWN0b3IoJzpkaXNhYmxlZCcpICYmXG4gICAgICAgICAgICAhdGhpcy5pc09wZW5cbiAgICAgICAgKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc0Jsb2NrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy53aWR0aCA9IHRoaXMudHJpZ2dlclJlZi5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoICsgJ3B4JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMub3BlbkRyb3Bkb3duKGUudGFyZ2V0IGFzIEhUTUxFbGVtZW50KTtcbiAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgb25DbGljaygpOiB2b2lkIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5pc0Nsb3NlZE9uQ2xpY2tJbnNpZGUgJiZcbiAgICAgICAgICAgICF0aGlzLmFjdGl2ZURlc2NlbmRhbnRLZXlNYW5hZ2VyPy5hY3RpdmVJdGVtLnN1YkRyb3Bkb3duICYmXG4gICAgICAgICAgICAhdGhpcy5hY3RpdmVEZXNjZW5kYW50S2V5TWFuYWdlcj8uYWN0aXZlSXRlbS5lbGVtZW50UmVmPy5uYXRpdmVFbGVtZW50Py5kaXNhYmxlZFxuICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VEcm9wZG93bih0cnVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE9wZW4gYSBkcm9wZG93blxuICAgICAqXG4gICAgICogQHBhcmFtIG9yaWdpbiBPcmlnaW4gb2YgdGhlIGRyb3Bkb3duIHBvc2l0aW9uXG4gICAgICovXG4gICAgcHVibGljIG9wZW5Ecm9wZG93bihvcmlnaW46IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gICAgICAgIHRoaXMub3JpZ2luID0gb3JpZ2luO1xuXG4gICAgICAgIGlmICghdGhpcy5pc1RyaWdnZXJGb2N1c2FibGVPbkNsb3NlKG9yaWdpbikpIHtcbiAgICAgICAgICAgIHRoaXMub3JpZ2luID0gb3JpZ2luLmNsb3Nlc3QoJ2J1dHRvbjpub3QoW2Rpc2FibGVkXSknKSB8fCAodGhpcy50cmlnZ2VyUmVmLm5hdGl2ZUVsZW1lbnQuZmlyc3RDaGlsZCBhcyBIVE1MRWxlbWVudCk7XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5vcmlnaW4pIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9yaWdpbiA9IG9yaWdpbi5jbG9zZXN0KCdhJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5vcmlnaW4pIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9yaWdpbiA9IG9yaWdpbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5pc09wZW4pIHtcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsRGlzcGF0Y2hlclN1YnNjcmlwdGlvbiA9IHRoaXMuc2Nyb2xsRGlzcGF0Y2hlclxuICAgICAgICAgICAgICAgIC5hbmNlc3RvclNjcm9sbGVkKHRoaXMub3JpZ2luKVxuICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChldmVudDogQ2RrU2Nyb2xsYWJsZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNWaXNpYmxlKHRoaXMub3JpZ2luLCBldmVudCA/IGV2ZW50LmdldEVsZW1lbnRSZWYoKS5uYXRpdmVFbGVtZW50IDogZG9jdW1lbnQucXVlcnlTZWxlY3RvcignYm9keScpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZURyb3Bkb3duKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgY29uc3QgcG9zaXRpb25TdHJhdGVneSA9IHRoaXMuZ2V0UG9zaXRpb25TdHJhdGVneSgpO1xuICAgICAgICAgICAgY29uc3Qgc2Nyb2xsU3RyYXRlZ3kgPSB0aGlzLm92ZXJsYXkuc2Nyb2xsU3RyYXRlZ2llcy5yZXBvc2l0aW9uKHsgc2Nyb2xsVGhyb3R0bGU6IDEwIH0pO1xuXG4gICAgICAgICAgICB0aGlzLm92ZXJsYXlSZWYgPSB0aGlzLm92ZXJsYXkuY3JlYXRlKHtcbiAgICAgICAgICAgICAgICBoYXNCYWNrZHJvcDogZmFsc2UsXG4gICAgICAgICAgICAgICAgYmFja2Ryb3BDbGFzczogJ2V1aS1kcm9wZG93bl9fYmFja2Ryb3AnLFxuICAgICAgICAgICAgICAgIHBhbmVsQ2xhc3M6ICdldWktZHJvcGRvd25fX3BhbmVsJyxcbiAgICAgICAgICAgICAgICBwb3NpdGlvblN0cmF0ZWd5LFxuICAgICAgICAgICAgICAgIHNjcm9sbFN0cmF0ZWd5LFxuICAgICAgICAgICAgICAgIGRpc3Bvc2VPbk5hdmlnYXRpb246IHRydWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMub3ZlcmxheVJlZi5hdHRhY2godGhpcy50ZW1wbGF0ZVBvcnRhbCk7XG5cbiAgICAgICAgICAgIHRoaXMub3ZlcmxheVJlZlxuICAgICAgICAgICAgICAgIC5vdXRzaWRlUG9pbnRlckV2ZW50cygpXG4gICAgICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNsb3NlRHJvcGRvd24oKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMub3ZlcmxheVJlZlxuICAgICAgICAgICAgICAgIC5iYWNrZHJvcENsaWNrKClcbiAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VEcm9wZG93bigpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5vdmVybGF5UmVmXG4gICAgICAgICAgICAgICAgLmtleWRvd25FdmVudHMoKVxuICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChrZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChrZXlib2FyZEV2ZW50LmtleT8udG9Mb3dlckNhc2UoKSA9PT0gJ2VzY2FwZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VEcm9wZG93bigpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmhhc0Ryb3Bkb3duSXRlbXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmV1aURyb3Bkb3duSXRlbXMudG9BcnJheSgpLmZvckVhY2goKGV1aURyb3Bkb3duSXRlbSwgaSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0V4cGFuZE9uSG92ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXVpRHJvcGRvd25JdGVtc0V2ZW50U3Vic2NyaXB0aW9uc1tpXSA9IGZyb21FdmVudChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldWlEcm9wZG93bkl0ZW0uZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtb3VzZWVudGVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICkuc3Vic2NyaWJlKChlOiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVEZXNjZW5kYW50S2V5TWFuYWdlci5zZXRBY3RpdmVJdGVtKGV1aURyb3Bkb3duSXRlbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuYWN0aXZlRGVzY2VuZGFudEtleU1hbmFnZXIuYWN0aXZlSXRlbS5zdWJEcm9wZG93bikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZURlc2NlbmRhbnRLZXlNYW5hZ2VyLmFjdGl2ZUl0ZW0uc3ViRHJvcGRvd24uc2V0UGFyZW50RHJvcGRvd24odGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlRGVzY2VuZGFudEtleU1hbmFnZXIuYWN0aXZlSXRlbS5zdWJEcm9wZG93bi5vdmVybGF5UmVmLmRldGFjaEJhY2tkcm9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMua2V5ZG93bkxpc3RlbmVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdHJpZ2dlck91dHNpZGVQb2ludGVyRXZlbnRzID0gKHN1YkRyb3Bkb3duOiBFdWlEcm9wZG93bkNvbXBvbmVudCk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJEcm9wZG93bj8ub3ZlcmxheVJlZj8uX291dHNpZGVQb2ludGVyRXZlbnRzLm5leHQoZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1YkRyb3Bkb3duPy5oYXNEcm9wZG93bkl0ZW1zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJEcm9wZG93bi5ldWlEcm9wZG93bkl0ZW1zLnRvQXJyYXkoKS5mb3JFYWNoKChzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlck91dHNpZGVQb2ludGVyRXZlbnRzKHMuc3ViRHJvcGRvd24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ldWlEcm9wZG93bkl0ZW1zXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoKGl0ZW0pID0+ICFpdGVtLmlzQWN0aXZlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZm9yRWFjaCgoZXVpRHJvcGRvd25JdGVtSGF2aW5nU3ViRHJvcGRvd24pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXJPdXRzaWRlUG9pbnRlckV2ZW50cyhldWlEcm9wZG93bkl0ZW1IYXZpbmdTdWJEcm9wZG93bi5zdWJEcm9wZG93bik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmV1aURyb3Bkb3duSXRlbXNFdmVudFN1YnNjcmlwdGlvbnNbaV0gPSBmcm9tRXZlbnQoZXVpRHJvcGRvd25JdGVtLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ2NsaWNrJykuc3Vic2NyaWJlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVEZXNjZW5kYW50S2V5TWFuYWdlci5zZXRBY3RpdmVJdGVtKGV1aURyb3Bkb3duSXRlbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmFjdGl2ZURlc2NlbmRhbnRLZXlNYW5hZ2VyLmFjdGl2ZUl0ZW0uc3ViRHJvcGRvd24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlRGVzY2VuZGFudEtleU1hbmFnZXIuYWN0aXZlSXRlbS5zdWJEcm9wZG93bi5zZXRQYXJlbnREcm9wZG93bih0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlRGVzY2VuZGFudEtleU1hbmFnZXIuYWN0aXZlSXRlbS5zdWJEcm9wZG93bi5vdmVybGF5UmVmLmRldGFjaEJhY2tkcm9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmtleWRvd25MaXN0ZW5lclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGFiZWxFbGVtZW50ID0gdGhpcy50cmlnZ2VyUmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignYnV0dG9uIC5ldWktbGFiZWwnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNMYWJlbFVwZGF0ZWRGcm9tU2VsZWN0ZWRJdGVtICYmIGxhYmVsRWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxhYmVsRWxlbWVudCBhcyBIVE1MRWxlbWVudCkuaW5uZXJUZXh0ID0gZXVpRHJvcGRvd25JdGVtLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5pbm5lclRleHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVEZXNjZW5kYW50S2V5TWFuYWdlciA9IG5ldyBBY3RpdmVEZXNjZW5kYW50S2V5TWFuYWdlcih0aGlzLmV1aURyb3Bkb3duSXRlbXMpXG4gICAgICAgICAgICAgICAgICAgIC53aXRoSG9tZUFuZEVuZCh0cnVlKVxuICAgICAgICAgICAgICAgICAgICAud2l0aFZlcnRpY2FsT3JpZW50YXRpb24odHJ1ZSlcbiAgICAgICAgICAgICAgICAgICAgLndpdGhXcmFwKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVEZXNjZW5kYW50S2V5TWFuYWdlci5zZXRGaXJzdEl0ZW1BY3RpdmUoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5jcmVhdGVLZXlib2FyZEhhbmRsZXJTdWJzY3JpcHRpb24oKTtcbiAgICAgICAgICAgIHRoaXMuaXNPcGVuJC5uZXh0KHRydWUpO1xuICAgICAgICAgICAgdGhpcy5kcm9wZG93blNlcnZpY2UuaXNEcm9wZG93bk9wZW4uZW1pdCh0cnVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENsb3NlIGEgZHJvcGRvd25cbiAgICAgKi9cbiAgICBwdWJsaWMgY2xvc2VEcm9wZG93bihyZWN1cnNpdmVseSA9IGZhbHNlKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXNPcGVuJC5uZXh0KGZhbHNlKTtcbiAgICAgICAgdGhpcy5ldWlEcm9wZG93bkl0ZW1zRXZlbnRTdWJzY3JpcHRpb25zLmZvckVhY2goKGV1aURyb3Bkb3duSXRlbXNFdmVudFN1YnNjcmlwdGlvbikgPT4ge1xuICAgICAgICAgICAgZXVpRHJvcGRvd25JdGVtc0V2ZW50U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmtleWRvd25MaXN0ZW5lclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICBpZiAodGhpcy5oYXNEcm9wZG93bkl0ZW1zKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZURlc2NlbmRhbnRLZXlNYW5hZ2VyPy5zZXRGaXJzdEl0ZW1BY3RpdmUoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNjcm9sbERpc3BhdGNoZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5hY3RpdmVEZXNjZW5kYW50S2V5TWFuYWdlckNoYW5nZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLm92ZXJsYXlSZWY/LmRpc3Bvc2UoKTtcbiAgICAgICAgdGhpcy5vdmVybGF5UmVmID0gbnVsbDtcbiAgICAgICAgdGhpcy5hY3RpdmVEZXNjZW5kYW50S2V5TWFuYWdlciA9IG51bGw7XG4gICAgICAgIGlmICh0aGlzLnRyYXBGb2N1c0F1dG9DYXB0dXJlKSB7XG4gICAgICAgICAgICB0aGlzLm9yaWdpbi5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZWN1cnNpdmVseSAmJiB0aGlzLnBhcmVudERyb3Bkb3duKSB7XG4gICAgICAgICAgICB0aGlzLnBhcmVudERyb3Bkb3duLmNsb3NlRHJvcGRvd24odHJ1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmRyb3Bkb3duU2VydmljZS5pc0Ryb3Bkb3duT3Blbi5lbWl0KGZhbHNlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY3JlYXRlS2V5Ym9hcmRIYW5kbGVyU3Vic2NyaXB0aW9uKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmtleWRvd25MaXN0ZW5lclN1YnNjcmlwdGlvbiA9IGZyb21FdmVudChkb2N1bWVudCwgJ2tleWRvd24nKS5zdWJzY3JpYmUoKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc09wZW4pIHtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LmNvZGUgPT09ICdFbnRlcicgJiZcbiAgICAgICAgICAgICAgICAgICAgIXRoaXMuaGFzVGFiTmF2aWdhdGlvbiAmJlxuICAgICAgICAgICAgICAgICAgICAhdGhpcy5hY3RpdmVEZXNjZW5kYW50S2V5TWFuYWdlcj8uYWN0aXZlSXRlbS5lbGVtZW50UmVmPy5uYXRpdmVFbGVtZW50Py5kaXNhYmxlZFxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZURlc2NlbmRhbnRLZXlNYW5hZ2VyPy5hY3RpdmVJdGVtLmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNFeHBhbmRPbkhvdmVyXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHRoaXMuYWN0aXZlRGVzY2VuZGFudEtleU1hbmFnZXIuYWN0aXZlSXRlbS5tb3VzZWVudGVyKClcbiAgICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy5hY3RpdmVEZXNjZW5kYW50S2V5TWFuYWdlcj8uYWN0aXZlSXRlbS5jbGljaygpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmFjdGl2ZURlc2NlbmRhbnRLZXlNYW5hZ2VyPy5hY3RpdmVJdGVtLnN1YkRyb3Bkb3duKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZURlc2NlbmRhbnRLZXlNYW5hZ2VyLmFjdGl2ZUl0ZW0uc3ViRHJvcGRvd24uc2V0UGFyZW50RHJvcGRvd24odGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmtleWRvd25MaXN0ZW5lclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZURyb3Bkb3duKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmNvZGUgPT09ICdBcnJvd0xlZnQnKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnBhcmVudERyb3Bkb3duKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhcmVudERyb3Bkb3duLmNyZWF0ZUtleWJvYXJkSGFuZGxlclN1YnNjcmlwdGlvbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZURyb3Bkb3duKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmNvZGUgPT09ICdBcnJvd1JpZ2h0Jykge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5hY3RpdmVEZXNjZW5kYW50S2V5TWFuYWdlcj8uYWN0aXZlSXRlbS5zdWJEcm9wZG93bikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVEZXNjZW5kYW50S2V5TWFuYWdlci5hY3RpdmVJdGVtLmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzRXhwYW5kT25Ib3ZlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gdGhpcy5hY3RpdmVEZXNjZW5kYW50S2V5TWFuYWdlci5hY3RpdmVJdGVtLm1vdXNlZW50ZXIoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy5hY3RpdmVEZXNjZW5kYW50S2V5TWFuYWdlci5hY3RpdmVJdGVtLmNsaWNrKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZURlc2NlbmRhbnRLZXlNYW5hZ2VyLmFjdGl2ZUl0ZW0uc3ViRHJvcGRvd24uc2V0UGFyZW50RHJvcGRvd24odGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmtleWRvd25MaXN0ZW5lclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudC5jb2RlID09PSAnVGFiJyAmJiAhdGhpcy5oYXNUYWJOYXZpZ2F0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VEcm9wZG93bih0cnVlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZURlc2NlbmRhbnRLZXlNYW5hZ2VyPy5vbktleWRvd24oZXZlbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldFBhcmVudERyb3Bkb3duKHBhcmVudERyb3Bkb3duOiBFdWlEcm9wZG93bkNvbXBvbmVudCk6IHZvaWQge1xuICAgICAgICB0aGlzLnBhcmVudERyb3Bkb3duID0gcGFyZW50RHJvcGRvd247XG4gICAgICAgIHRoaXMucG9zaXRpb24gPSAncmlnaHQnO1xuICAgICAgICB0aGlzLnNldFBvc2l0aW9uKCk7XG5cbiAgICAgICAgY29uc3QgcG9zaXRpb25TdHJhdGVneSA9IHRoaXMuZ2V0UG9zaXRpb25TdHJhdGVneSgpO1xuICAgICAgICB0aGlzLm92ZXJsYXlSZWYudXBkYXRlUG9zaXRpb25TdHJhdGVneShwb3NpdGlvblN0cmF0ZWd5KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldCBoYXNEcm9wZG93bkl0ZW1zKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5ldWlEcm9wZG93bkl0ZW1zPy5sZW5ndGggPiAwO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0UG9zaXRpb25TdHJhdGVneSgpOiBGbGV4aWJsZUNvbm5lY3RlZFBvc2l0aW9uU3RyYXRlZ3kge1xuICAgICAgICByZXR1cm4gdGhpcy5vdmVybGF5XG4gICAgICAgICAgICAucG9zaXRpb24oKVxuICAgICAgICAgICAgLmZsZXhpYmxlQ29ubmVjdGVkVG8odGhpcy5vcmlnaW4gYXMgRmxleGlibGVDb25uZWN0ZWRQb3NpdGlvblN0cmF0ZWd5T3JpZ2luKVxuICAgICAgICAgICAgLndpdGhQb3NpdGlvbnMoW1xuICAgICAgICAgICAgICAgIG5ldyBDb25uZWN0aW9uUG9zaXRpb25QYWlyKFxuICAgICAgICAgICAgICAgICAgICB7IG9yaWdpblg6IHRoaXMub3JpZ2luWCwgb3JpZ2luWTogdGhpcy5vcmlnaW5ZIH0sXG4gICAgICAgICAgICAgICAgICAgIHsgb3ZlcmxheVg6IHRoaXMub3ZlcmxheVgsIG92ZXJsYXlZOiB0aGlzLm92ZXJsYXlZIH0sXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAud2l0aEZsZXhpYmxlRGltZW5zaW9ucyhmYWxzZSlcbiAgICAgICAgICAgIC53aXRoTG9ja2VkUG9zaXRpb24odHJ1ZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc1Zpc2libGUob3JpZ2luOiBIVE1MRWxlbWVudCwgc2Nyb2xsYWJsZVBhcmVudDogSFRNTEVsZW1lbnQpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3Qgb3JpZ2luWSA9IG9yaWdpbi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS55O1xuICAgICAgICBjb25zdCBzY3JvbGxhYmxlUGFyZW50WSA9IE1hdGguYWJzKHNjcm9sbGFibGVQYXJlbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkueSk7XG4gICAgICAgIGNvbnN0IHNjcm9sbGFibGVQYXJlbnRIZWlnaHQgPSBzY3JvbGxhYmxlUGFyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodCAtIDUwO1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAob3JpZ2luWSA+IDAgJiYgb3JpZ2luWSA8IHNjcm9sbGFibGVQYXJlbnRIZWlnaHQpIHx8XG4gICAgICAgICAgICAob3JpZ2luWSAtIHNjcm9sbGFibGVQYXJlbnRZID4gMCAmJiBvcmlnaW5ZIDwgc2Nyb2xsYWJsZVBhcmVudFkgKyBzY3JvbGxhYmxlUGFyZW50SGVpZ2h0KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNUcmlnZ2VyRm9jdXNhYmxlT25DbG9zZShvcmlnaW46IEhUTUxFbGVtZW50KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBvcmlnaW4ubWF0Y2hlcygnYnV0dG9uOm5vdChbZGlzYWJsZWRdKScpIHx8IG9yaWdpbi5tYXRjaGVzKCdhJyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRQb3NpdGlvbigpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMucG9zaXRpb24gPT09ICd0b3AnKSB7XG4gICAgICAgICAgICB0aGlzLm9yaWdpblkgPSAndG9wJztcbiAgICAgICAgICAgIHRoaXMub3ZlcmxheVkgPSAnYm90dG9tJztcblxuICAgICAgICAgICAgaWYgKHRoaXMuaXNEcm9wRG93blJpZ2h0QWxpZ25lZCkge1xuICAgICAgICAgICAgICAgIHRoaXMub3JpZ2luWCA9ICdlbmQnO1xuICAgICAgICAgICAgICAgIHRoaXMub3ZlcmxheVggPSAnZW5kJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5wb3NpdGlvbiA9PT0gJ3JpZ2h0Jykge1xuICAgICAgICAgICAgdGhpcy5vcmlnaW5YID0gJ2VuZCc7XG4gICAgICAgICAgICB0aGlzLm92ZXJsYXlYID0gJ3N0YXJ0JztcbiAgICAgICAgICAgIHRoaXMub3ZlcmxheVkgPSAnY2VudGVyJztcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5wb3NpdGlvbiA9PT0gJ2JvdHRvbScpIHtcbiAgICAgICAgICAgIHRoaXMub3JpZ2luWSA9ICdib3R0b20nO1xuICAgICAgICAgICAgdGhpcy5vdmVybGF5WSA9ICd0b3AnO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5pc0Ryb3BEb3duUmlnaHRBbGlnbmVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcmlnaW5YID0gJ2VuZCc7XG4gICAgICAgICAgICAgICAgdGhpcy5vdmVybGF5WCA9ICdlbmQnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnBvc2l0aW9uID09PSAnbGVmdCcpIHtcbiAgICAgICAgICAgIHRoaXMub3JpZ2luWCA9ICdzdGFydCc7XG4gICAgICAgICAgICB0aGlzLm92ZXJsYXlYID0gJ2VuZCc7XG4gICAgICAgICAgICB0aGlzLm92ZXJsYXlZID0gJ2NlbnRlcic7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCI8ZGl2ICN0cmlnZ2VyUmVmIGNsYXNzPVwiZXVpLWRyb3Bkb3duX190cmlnZ2VyLWNvbnRhaW5lclwiIChjbGljayk9XCJvblRyaWdnZXJDbGlja2VkKCRldmVudClcIj5cbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICN0ZW1wbGF0ZVBvcnRhbENvbnRlbnQ+XG4gICAgPGRpdlxuICAgICAgICBhdHRyLmRhdGEtZTJlPVwie3sgZTJlQXR0ciB9fVwiXG4gICAgICAgIFtAb3BlbkNsb3NlXT1cImlzT3BlbiA/ICdvcGVuJyA6ICdjbG9zZWQnXCJcbiAgICAgICAgY2RrVHJhcEZvY3VzXG4gICAgICAgIFtjZGtUcmFwRm9jdXNBdXRvQ2FwdHVyZV09XCJ0cmFwRm9jdXNBdXRvQ2FwdHVyZVwiXG4gICAgICAgIHJvbGU9XCJkaWFsb2dcIlxuICAgICAgICBhcmlhLWxhYmVsPVwiZVVJIGRyb3Bkb3duIHBhbmVsXCJcbiAgICAgICAgY2xhc3M9XCJldWktZHJvcGRvd25fX3BhbmVsLWNvbnRhaW5lclwiXG4gICAgICAgIFtzdHlsZS53aWR0aF09XCJ3aWR0aFwiXG4gICAgICAgIFt0YWJpbmRleF09XCJ0YWJJbmRleFwiXG4gICAgICAgIChjbGljayk9XCJvbkNsaWNrKClcIj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiZXVpLWRyb3Bkb3duLWNvbnRlbnRcIj48L25nLWNvbnRlbnQ+XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
411
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXVpLWRyb3Bkb3duLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2V1aS1kcm9wZG93bi9ldWktZHJvcGRvd24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vZXVpLWRyb3Bkb3duL2V1aS1kcm9wZG93bi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCx1QkFBdUIsRUFDdkIsV0FBVyxFQUNYLGlCQUFpQixFQUNqQixLQUFLLEVBS0wsU0FBUyxFQUVULGVBQWUsR0FJbEIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUVILHNCQUFzQixHQU16QixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFBRSxlQUFlLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsMEJBQTBCLEVBQWlCLE1BQU0sbUJBQW1CLENBQUM7QUFFOUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFMUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3BELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDZDQUE2QyxDQUFDOzs7OztBQVV2RixNQUFNLE9BQU8sb0JBQXFCLFNBQVEsYUFBYTtJQStDbkQsSUFDSSxVQUFVO1FBQ1YsT0FBTztZQUNILElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ3pDLEtBQUssQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDO1NBQ3RDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUks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QUZmLEtBQUs7Z0JBb0JGLFVBQVU7c0JBRGIsV0FBVzt1QkFBQyxPQUFPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgVmlld0VuY2Fwc3VsYXRpb24sXG4gICAgSW5wdXQsXG4gICAgT25Jbml0LFxuICAgIE9uRGVzdHJveSxcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIFZpZXdDb250YWluZXJSZWYsXG4gICAgVmlld0NoaWxkLFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIENvbnRlbnRDaGlsZHJlbixcbiAgICBRdWVyeUxpc3QsXG4gICAgRWxlbWVudFJlZixcbiAgICBSZW5kZXJlcjIsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgY29lcmNlQm9vbGVhblByb3BlcnR5LCBCb29sZWFuSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHtcbiAgICBDZGtTY3JvbGxhYmxlLFxuICAgIENvbm5lY3Rpb25Qb3NpdGlvblBhaXIsXG4gICAgRmxleGlibGVDb25uZWN0ZWRQb3NpdGlvblN0cmF0ZWd5LFxuICAgIEZsZXhpYmxlQ29ubmVjdGVkUG9zaXRpb25TdHJhdGVneU9yaWdpbixcbiAgICBPdmVybGF5LFxuICAgIE92ZXJsYXlSZWYsXG4gICAgU2Nyb2xsRGlzcGF0Y2hlcixcbn0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBmcm9tRXZlbnQsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBUZW1wbGF0ZVBvcnRhbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnO1xuaW1wb3J0IHsgQWN0aXZlRGVzY2VuZGFudEtleU1hbmFnZXIsIEhpZ2hsaWdodGFibGUgfSBmcm9tICdAYW5ndWxhci9jZGsvYTExeSc7XG5cbmltcG9ydCB7IEJhc2VEaXJlY3RpdmUgfSBmcm9tICdAZXVpL2NvbXBvbmVudHMvc2hhcmVkJztcbmltcG9ydCB7IGNvZXJjZUJvb2xlYW4gfSBmcm9tICdAZXVpL2Jhc2UnO1xuXG5pbXBvcnQgeyBvcGVuQ2xvc2UgfSBmcm9tICcuL2FuaW1hdGlvbnMvb3Blbi1jbG9zZSc7XG5pbXBvcnQgeyBFdWlEcm9wZG93bkl0ZW1Db21wb25lbnQgfSBmcm9tICcuL2Ryb3Bkb3duLWl0ZW0vZXVpLWRyb3Bkb3duLWl0ZW0uY29tcG9uZW50JztcbmltcG9ydCB7IEV1aURyb3Bkb3duU2VydmljZSB9IGZyb20gJy4vZXVpLWRyb3Bkb3duLnNlcnZpY2UnO1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdldWktZHJvcGRvd24nLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9ldWktZHJvcGRvd24uY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3N0eWxlcy9faW5kZXguc2NzcyddLFxuICAgIGFuaW1hdGlvbnM6IFtvcGVuQ2xvc2VdLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG59KVxuZXhwb3J0IGNsYXNzIEV1aURyb3Bkb3duQ29tcG9uZW50IGV4dGVuZHMgQmFzZURpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBBZnRlclZpZXdJbml0IHtcbiAgICBASW5wdXQoKSBlMmVBdHRyID0gJ2V1aS1kcm9wZG93bic7XG4gICAgQElucHV0KCkgdGFiSW5kZXggPSAtMTtcbiAgICBASW5wdXQoKSB3aWR0aCA9ICdhdXRvJztcbiAgICBASW5wdXQoKSBwb3NpdGlvbjogJ3RvcCcgfCAncmlnaHQnIHwgJ2JvdHRvbScgfCAnbGVmdCcgPSAnYm90dG9tJztcblxuICAgIEBWaWV3Q2hpbGQoJ3RlbXBsYXRlUG9ydGFsQ29udGVudCcpIHRlbXBsYXRlUG9ydGFsQ29udGVudDogVGVtcGxhdGVSZWY8dW5rbm93bj47XG4gICAgQFZpZXdDaGlsZCgndHJpZ2dlclJlZicpIHRyaWdnZXJSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuICAgIEBDb250ZW50Q2hpbGRyZW4oRXVpRHJvcGRvd25JdGVtQ29tcG9uZW50LCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pIGV1aURyb3Bkb3duSXRlbXM6IFF1ZXJ5TGlzdDxIaWdobGlnaHRhYmxlICYgRXVpRHJvcGRvd25JdGVtQ29tcG9uZW50PjtcblxuICAgIHB1YmxpYyB0cmFwRm9jdXNBdXRvQ2FwdHVyZSA9IHRydWU7XG4gICAgcHVibGljIHBhcmVudERyb3Bkb3duOiBFdWlEcm9wZG93bkNvbXBvbmVudDtcblxuICAgIEBJbnB1dCgpXG4gICAgQGNvZXJjZUJvb2xlYW5cbiAgICBpc0Jsb2NrOkJvb2xlYW5JbnB1dCA9IGZhbHNlO1xuICAgIEBJbnB1dCgpXG4gICAgQGNvZXJjZUJvb2xlYW5cbiAgICBpc0Ryb3BEb3duUmlnaHRBbGlnbmVkOkJvb2xlYW5JbnB1dCA9IGZhbHNlO1xuICAgIEBJbnB1dCgpXG4gICAgQGNvZXJjZUJvb2xlYW5cbiAgICBpc0Nsb3NlZE9uQ2xpY2tJbnNpZGU6Qm9vbGVhbklucHV0ID0gdHJ1ZTtcbiAgICBASW5wdXQoKVxuICAgIEBjb2VyY2VCb29sZWFuXG4gICAgaXNMYWJlbFVwZGF0ZWRGcm9tU2VsZWN0ZWRJdGVtOkJvb2xlYW5JbnB1dCA9IGZhbHNlO1xuICAgIEBJbnB1dCgpXG4gICAgQGNvZXJjZUJvb2xlYW5cbiAgICBpc0V4cGFuZE9uSG92ZXI6Qm9vbGVhbklucHV0ID0gZmFsc2U7XG4gICAgQElucHV0KClcbiAgICBAY29lcmNlQm9vbGVhblxuICAgIGhhc1RhYk5hdmlnYXRpb246Qm9vbGVhbklucHV0ID0gZmFsc2U7XG5cbiAgICBwcml2YXRlIG9yaWdpblg6ICdzdGFydCcgfCAnZW5kJyB8ICdjZW50ZXInID0gJ3N0YXJ0JztcbiAgICBwcml2YXRlIG9yaWdpblk6ICd0b3AnIHwgJ2JvdHRvbScgfCAnY2VudGVyJyA9ICdib3R0b20nO1xuICAgIHByaXZhdGUgb3ZlcmxheVg6ICdzdGFydCcgfCAnZW5kJyB8ICdjZW50ZXInID0gJ3N0YXJ0JztcbiAgICBwcml2YXRlIG92ZXJsYXlZOiAndG9wJyB8ICdib3R0b20nIHwgJ2NlbnRlcicgPSAndG9wJztcbiAgICBwcml2YXRlIHRlbXBsYXRlUG9ydGFsOiBUZW1wbGF0ZVBvcnRhbDtcbiAgICBwcml2YXRlIG92ZXJsYXlSZWY6IE92ZXJsYXlSZWY7XG4gICAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG4gICAgcHJpdmF0ZSBpc09wZW4kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgcHJpdmF0ZSBzY3JvbGxEaXNwYXRjaGVyU3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICAgIHByaXZhdGUga2V5ZG93bkxpc3RlbmVyU3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICAgIHByaXZhdGUgZXVpRHJvcGRvd25JdGVtc0V2ZW50U3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10gPSBbXTtcbiAgICBwcml2YXRlIGFjdGl2ZURlc2NlbmRhbnRLZXlNYW5hZ2VyQ2hhbmdlU3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICAgIHByaXZhdGUgYWN0aXZlRGVzY2VuZGFudEtleU1hbmFnZXI6IEFjdGl2ZURlc2NlbmRhbnRLZXlNYW5hZ2VyPEV1aURyb3Bkb3duSXRlbUNvbXBvbmVudD47XG4gICAgcHJpdmF0ZSBvcmlnaW46IEhUTUxFbGVtZW50O1xuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcycpXG4gICAgZ2V0IGNzc0NsYXNzZXMoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIHRoaXMuaXNCbG9jayA/ICdldWktZHJvcGRvd24tLWJsb2NrJyA6ICcnLFxuICAgICAgICAgICAgc3VwZXIuZ2V0Q3NzQ2xhc3NlcygnZXVpLWRyb3Bkb3duJyksXG4gICAgICAgIF0uam9pbignICcpLnRyaW0oKTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBvdmVybGF5OiBPdmVybGF5LFxuICAgICAgICBwcml2YXRlIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYsXG4gICAgICAgIHByaXZhdGUgc2Nyb2xsRGlzcGF0Y2hlcjogU2Nyb2xsRGlzcGF0Y2hlcixcbiAgICAgICAgcHJpdmF0ZSBkcm9wZG93blNlcnZpY2U6IEV1aURyb3Bkb3duU2VydmljZSxcbiAgICAgICAgcHJvdGVjdGVkIF9yZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgICkge1xuICAgICAgICBzdXBlcigpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICAvLyBDdXJyZW50bHkgdGhlIGBjZGtUcmFwRm9jdXNBdXRvQ2FwdHVyZWAgaXMgb25seSBjaGVja2VkIG9uY2Ugb24gaW5pdC5cbiAgICAgICAgaWYgKHRoaXMuaGFzRHJvcGRvd25JdGVtcykge1xuICAgICAgICAgICAgdGhpcy50cmFwRm9jdXNBdXRvQ2FwdHVyZSA9IGZhbHNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy50cmFwRm9jdXNBdXRvQ2FwdHVyZSA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5oYXNUYWJOYXZpZ2F0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLnRyYXBGb2N1c0F1dG9DYXB0dXJlID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuaXNDbG9zZWRPbkNsaWNrSW5zaWRlID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNldFBvc2l0aW9uKCk7XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnRlbXBsYXRlUG9ydGFsID0gbmV3IFRlbXBsYXRlUG9ydGFsKHRoaXMudGVtcGxhdGVQb3J0YWxDb250ZW50LCB0aGlzLnZpZXdDb250YWluZXJSZWYpO1xuXG4gICAgICAgIGlmKHRoaXMudHJpZ2dlclJlZiAmJiB0aGlzLnRyaWdnZXJSZWYubmF0aXZlRWxlbWVudC5maXJzdENoaWxkKXtcbiAgICAgICAgICAgIHRoaXMuX3JlbmRlcmVyLnNldEF0dHJpYnV0ZSh0aGlzLnRyaWdnZXJSZWYubmF0aXZlRWxlbWVudC5maXJzdENoaWxkLCAnYXJpYS1oYXNwb3B1cCcsICd0cnVlJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5uZXh0KHRydWUpO1xuICAgICAgICB0aGlzLmRlc3Ryb3kkLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuZXVpRHJvcGRvd25JdGVtc0V2ZW50U3Vic2NyaXB0aW9ucy5mb3JFYWNoKChldWlEcm9wZG93bkl0ZW1zRXZlbnRTdWJzY3JpcHRpb24pID0+IHtcbiAgICAgICAgICAgIGV1aURyb3Bkb3duSXRlbXNFdmVudFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5rZXlkb3duTGlzdGVuZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5zY3JvbGxEaXNwYXRjaGVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuYWN0aXZlRGVzY2VuZGFudEtleU1hbmFnZXJDaGFuZ2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5vdmVybGF5UmVmPy5kaXNwb3NlKCk7XG4gICAgICAgIHRoaXMub3ZlcmxheVJlZiA9IG51bGw7XG4gICAgICAgIHRoaXMuYWN0aXZlRGVzY2VuZGFudEtleU1hbmFnZXIgPSBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIGV1aS1kcm9wZG93biBpcyBvcGVuLlxuICAgICAqXG4gICAgICogQHVzYWdlTm90ZXNcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGV1aS1kcm9wZG93biAjZHJvcGRvd24+XG4gICAgICogICAgICA8bXktY29tcG9uZW50ICpuZ0lmPVwiZHJvcGRvd24uaXNPcGVuXCI+PC9teS1jb21wb25lbnQ+XG4gICAgICogPC9ldWktZHJvcGRvd24+XG4gICAgICogYGBgXG4gICAgICogQHJldHVybnMgQSBib29sZWFuIHdpdGggdmFsdWUgYHRydWVgIHdoZW4gb3Blbiwgb3RoZXJ3aXNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZ2V0IGlzT3BlbigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNPcGVuJC52YWx1ZTtcbiAgICB9XG5cbiAgICAvLyBUT0RPOiBmaW5kIHRoZSBjb3JyZWN0IHR5cGUgb3IgdHVybiBpbnRvIGEgZ2VuZXJpYywgaHR0cHM6Ly93d3cudHlwZXNjcmlwdGxhbmcub3JnL2RvY3MvaGFuZGJvb2svMi9nZW5lcmljcy5odG1sXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBwdWJsaWMgb25UcmlnZ2VyQ2xpY2tlZChlOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgIShlLnRhcmdldCBhcyBIVE1MRWxlbWVudCkucXVlcnlTZWxlY3RvcignLmRpc2FibGVkJykgJiZcbiAgICAgICAgICAgICEoZS50YXJnZXQgYXMgSFRNTEVsZW1lbnQpLnF1ZXJ5U2VsZWN0b3IoJzpkaXNhYmxlZCcpICYmXG4gICAgICAgICAgICAhdGhpcy5pc09wZW5cbiAgICAgICAgKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc0Jsb2NrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy53aWR0aCA9IHRoaXMudHJpZ2dlclJlZi5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoICsgJ3B4JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMub3BlbkRyb3Bkb3duKGUudGFyZ2V0IGFzIEhUTUxFbGVtZW50KTtcbiAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgb25DbGljaygpOiB2b2lkIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5pc0Nsb3NlZE9uQ2xpY2tJbnNpZGUgJiZcbiAgICAgICAgICAgICF0aGlzLmFjdGl2ZURlc2NlbmRhbnRLZXlNYW5hZ2VyPy5hY3RpdmVJdGVtLnN1YkRyb3Bkb3duICYmXG4gICAgICAgICAgICAhdGhpcy5hY3RpdmVEZXNjZW5kYW50S2V5TWFuYWdlcj8uYWN0aXZlSXRlbS5lbGVtZW50UmVmPy5uYXRpdmVFbGVtZW50Py5kaXNhYmxlZFxuICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VEcm9wZG93bih0cnVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE9wZW4gYSBkcm9wZG93blxuICAgICAqXG4gICAgICogQHBhcmFtIG9yaWdpbiBPcmlnaW4gb2YgdGhlIGRyb3Bkb3duIHBvc2l0aW9uXG4gICAgICovXG4gICAgcHVibGljIG9wZW5Ecm9wZG93bihvcmlnaW46IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gICAgICAgIHRoaXMub3JpZ2luID0gb3JpZ2luO1xuXG4gICAgICAgIGlmICghdGhpcy5pc1RyaWdnZXJGb2N1c2FibGVPbkNsb3NlKG9yaWdpbikpIHtcbiAgICAgICAgICAgIHRoaXMub3JpZ2luID0gb3JpZ2luLmNsb3Nlc3QoJ2J1dHRvbjpub3QoW2Rpc2FibGVkXSknKSB8fCAodGhpcy50cmlnZ2VyUmVmLm5hdGl2ZUVsZW1lbnQuZmlyc3RDaGlsZCBhcyBIVE1MRWxlbWVudCk7XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5vcmlnaW4pIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9yaWdpbiA9IG9yaWdpbi5jbG9zZXN0KCdhJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5vcmlnaW4pIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9yaWdpbiA9IG9yaWdpbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5pc09wZW4pIHtcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsRGlzcGF0Y2hlclN1YnNjcmlwdGlvbiA9IHRoaXMuc2Nyb2xsRGlzcGF0Y2hlclxuICAgICAgICAgICAgICAgIC5hbmNlc3RvclNjcm9sbGVkKHRoaXMub3JpZ2luKVxuICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChldmVudDogQ2RrU2Nyb2xsYWJsZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNWaXNpYmxlKHRoaXMub3JpZ2luLCBldmVudCA/IGV2ZW50LmdldEVsZW1lbnRSZWYoKS5uYXRpdmVFbGVtZW50IDogZG9jdW1lbnQucXVlcnlTZWxlY3RvcignYm9keScpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZURyb3Bkb3duKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgY29uc3QgcG9zaXRpb25TdHJhdGVneSA9IHRoaXMuZ2V0UG9zaXRpb25TdHJhdGVneSgpO1xuICAgICAgICAgICAgY29uc3Qgc2Nyb2xsU3RyYXRlZ3kgPSB0aGlzLm92ZXJsYXkuc2Nyb2xsU3RyYXRlZ2llcy5yZXBvc2l0aW9uKHsgc2Nyb2xsVGhyb3R0bGU6IDEwIH0pO1xuXG4gICAgICAgICAgICB0aGlzLm92ZXJsYXlSZWYgPSB0aGlzLm92ZXJsYXkuY3JlYXRlKHtcbiAgICAgICAgICAgICAgICBoYXNCYWNrZHJvcDogZmFsc2UsXG4gICAgICAgICAgICAgICAgYmFja2Ryb3BDbGFzczogJ2V1aS1kcm9wZG93bl9fYmFja2Ryb3AnLFxuICAgICAgICAgICAgICAgIHBhbmVsQ2xhc3M6ICdldWktZHJvcGRvd25fX3BhbmVsJyxcbiAgICAgICAgICAgICAgICBwb3NpdGlvblN0cmF0ZWd5LFxuICAgICAgICAgICAgICAgIHNjcm9sbFN0cmF0ZWd5LFxuICAgICAgICAgICAgICAgIGRpc3Bvc2VPbk5hdmlnYXRpb246IHRydWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMub3ZlcmxheVJlZi5hdHRhY2godGhpcy50ZW1wbGF0ZVBvcnRhbCk7XG5cbiAgICAgICAgICAgIHRoaXMub3ZlcmxheVJlZlxuICAgICAgICAgICAgICAgIC5vdXRzaWRlUG9pbnRlckV2ZW50cygpXG4gICAgICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNsb3NlRHJvcGRvd24oKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMub3ZlcmxheVJlZlxuICAgICAgICAgICAgICAgIC5iYWNrZHJvcENsaWNrKClcbiAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VEcm9wZG93bigpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5vdmVybGF5UmVmXG4gICAgICAgICAgICAgICAgLmtleWRvd25FdmVudHMoKVxuICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChrZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChrZXlib2FyZEV2ZW50LmtleT8udG9Mb3dlckNhc2UoKSA9PT0gJ2VzY2FwZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VEcm9wZG93bigpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmhhc0Ryb3Bkb3duSXRlbXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmV1aURyb3Bkb3duSXRlbXMudG9BcnJheSgpLmZvckVhY2goKGV1aURyb3Bkb3duSXRlbSwgaSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0V4cGFuZE9uSG92ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXVpRHJvcGRvd25JdGVtc0V2ZW50U3Vic2NyaXB0aW9uc1tpXSA9IGZyb21FdmVudChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldWlEcm9wZG93bkl0ZW0uZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtb3VzZWVudGVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICkuc3Vic2NyaWJlKChlOiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVEZXNjZW5kYW50S2V5TWFuYWdlci5zZXRBY3RpdmVJdGVtKGV1aURyb3Bkb3duSXRlbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuYWN0aXZlRGVzY2VuZGFudEtleU1hbmFnZXIuYWN0aXZlSXRlbS5zdWJEcm9wZG93bikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZURlc2NlbmRhbnRLZXlNYW5hZ2VyLmFjdGl2ZUl0ZW0uc3ViRHJvcGRvd24uc2V0UGFyZW50RHJvcGRvd24odGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlRGVzY2VuZGFudEtleU1hbmFnZXIuYWN0aXZlSXRlbS5zdWJEcm9wZG93bi5vdmVybGF5UmVmLmRldGFjaEJhY2tkcm9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMua2V5ZG93bkxpc3RlbmVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdHJpZ2dlck91dHNpZGVQb2ludGVyRXZlbnRzID0gKHN1YkRyb3Bkb3duOiBFdWlEcm9wZG93bkNvbXBvbmVudCk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJEcm9wZG93bj8ub3ZlcmxheVJlZj8uX291dHNpZGVQb2ludGVyRXZlbnRzLm5leHQoZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1YkRyb3Bkb3duPy5oYXNEcm9wZG93bkl0ZW1zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJEcm9wZG93bi5ldWlEcm9wZG93bkl0ZW1zLnRvQXJyYXkoKS5mb3JFYWNoKChzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlck91dHNpZGVQb2ludGVyRXZlbnRzKHMuc3ViRHJvcGRvd24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ldWlEcm9wZG93bkl0ZW1zXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoKGl0ZW0pID0+ICFpdGVtLmlzQWN0aXZlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZm9yRWFjaCgoZXVpRHJvcGRvd25JdGVtSGF2aW5nU3ViRHJvcGRvd24pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXJPdXRzaWRlUG9pbnRlckV2ZW50cyhldWlEcm9wZG93bkl0ZW1IYXZpbmdTdWJEcm9wZG93bi5zdWJEcm9wZG93bik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmV1aURyb3Bkb3duSXRlbXNFdmVudFN1YnNjcmlwdGlvbnNbaV0gPSBmcm9tRXZlbnQoZXVpRHJvcGRvd25JdGVtLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ2NsaWNrJykuc3Vic2NyaWJlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVEZXNjZW5kYW50S2V5TWFuYWdlci5zZXRBY3RpdmVJdGVtKGV1aURyb3Bkb3duSXRlbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmFjdGl2ZURlc2NlbmRhbnRLZXlNYW5hZ2VyLmFjdGl2ZUl0ZW0uc3ViRHJvcGRvd24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlRGVzY2VuZGFudEtleU1hbmFnZXIuYWN0aXZlSXRlbS5zdWJEcm9wZG93bi5zZXRQYXJlbnREcm9wZG93bih0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlRGVzY2VuZGFudEtleU1hbmFnZXIuYWN0aXZlSXRlbS5zdWJEcm9wZG93bi5vdmVybGF5UmVmLmRldGFjaEJhY2tkcm9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmtleWRvd25MaXN0ZW5lclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGFiZWxFbGVtZW50ID0gdGhpcy50cmlnZ2VyUmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignYnV0dG9uIC5ldWktbGFiZWwnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNMYWJlbFVwZGF0ZWRGcm9tU2VsZWN0ZWRJdGVtICYmIGxhYmVsRWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxhYmVsRWxlbWVudCBhcyBIVE1MRWxlbWVudCkuaW5uZXJUZXh0ID0gZXVpRHJvcGRvd25JdGVtLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5pbm5lclRleHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVEZXNjZW5kYW50S2V5TWFuYWdlciA9IG5ldyBBY3RpdmVEZXNjZW5kYW50S2V5TWFuYWdlcih0aGlzLmV1aURyb3Bkb3duSXRlbXMpXG4gICAgICAgICAgICAgICAgICAgIC53aXRoSG9tZUFuZEVuZCh0cnVlKVxuICAgICAgICAgICAgICAgICAgICAud2l0aFZlcnRpY2FsT3JpZW50YXRpb24odHJ1ZSlcbiAgICAgICAgICAgICAgICAgICAgLndpdGhXcmFwKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVEZXNjZW5kYW50S2V5TWFuYWdlci5zZXRGaXJzdEl0ZW1BY3RpdmUoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5jcmVhdGVLZXlib2FyZEhhbmRsZXJTdWJzY3JpcHRpb24oKTtcbiAgICAgICAgICAgIHRoaXMuaXNPcGVuJC5uZXh0KHRydWUpO1xuICAgICAgICAgICAgdGhpcy5kcm9wZG93blNlcnZpY2UuaXNEcm9wZG93bk9wZW4uZW1pdCh0cnVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENsb3NlIGEgZHJvcGRvd25cbiAgICAgKi9cbiAgICBwdWJsaWMgY2xvc2VEcm9wZG93bihyZWN1cnNpdmVseSA9IGZhbHNlKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXNPcGVuJC5uZXh0KGZhbHNlKTtcbiAgICAgICAgdGhpcy5ldWlEcm9wZG93bkl0ZW1zRXZlbnRTdWJzY3JpcHRpb25zLmZvckVhY2goKGV1aURyb3Bkb3duSXRlbXNFdmVudFN1YnNjcmlwdGlvbikgPT4ge1xuICAgICAgICAgICAgZXVpRHJvcGRvd25JdGVtc0V2ZW50U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmtleWRvd25MaXN0ZW5lclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICBpZiAodGhpcy5oYXNEcm9wZG93bkl0ZW1zKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZURlc2NlbmRhbnRLZXlNYW5hZ2VyPy5zZXRGaXJzdEl0ZW1BY3RpdmUoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNjcm9sbERpc3BhdGNoZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5hY3RpdmVEZXNjZW5kYW50S2V5TWFuYWdlckNoYW5nZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLm92ZXJsYXlSZWY/LmRpc3Bvc2UoKTtcbiAgICAgICAgdGhpcy5vdmVybGF5UmVmID0gbnVsbDtcbiAgICAgICAgdGhpcy5hY3RpdmVEZXNjZW5kYW50S2V5TWFuYWdlciA9IG51bGw7XG4gICAgICAgIGlmICh0aGlzLnRyYXBGb2N1c0F1dG9DYXB0dXJlKSB7XG4gICAgICAgICAgICB0aGlzLm9yaWdpbi5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZWN1cnNpdmVseSAmJiB0aGlzLnBhcmVudERyb3Bkb3duKSB7XG4gICAgICAgICAgICB0aGlzLnBhcmVudERyb3Bkb3duLmNsb3NlRHJvcGRvd24odHJ1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmRyb3Bkb3duU2VydmljZS5pc0Ryb3Bkb3duT3Blbi5lbWl0KGZhbHNlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY3JlYXRlS2V5Ym9hcmRIYW5kbGVyU3Vic2NyaXB0aW9uKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmtleWRvd25MaXN0ZW5lclN1YnNjcmlwdGlvbiA9IGZyb21FdmVudChkb2N1bWVudCwgJ2tleWRvd24nKS5zdWJzY3JpYmUoKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc09wZW4pIHtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LmNvZGUgPT09ICdFbnRlcicgJiZcbiAgICAgICAgICAgICAgICAgICAgIXRoaXMuaGFzVGFiTmF2aWdhdGlvbiAmJlxuICAgICAgICAgICAgICAgICAgICAhdGhpcy5hY3RpdmVEZXNjZW5kYW50S2V5TWFuYWdlcj8uYWN0aXZlSXRlbS5lbGVtZW50UmVmPy5uYXRpdmVFbGVtZW50Py5kaXNhYmxlZFxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZURlc2NlbmRhbnRLZXlNYW5hZ2VyPy5hY3RpdmVJdGVtLmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNFeHBhbmRPbkhvdmVyXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHRoaXMuYWN0aXZlRGVzY2VuZGFudEtleU1hbmFnZXIuYWN0aXZlSXRlbS5tb3VzZWVudGVyKClcbiAgICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy5hY3RpdmVEZXNjZW5kYW50S2V5TWFuYWdlcj8uYWN0aXZlSXRlbS5jbGljaygpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmFjdGl2ZURlc2NlbmRhbnRLZXlNYW5hZ2VyPy5hY3RpdmVJdGVtLnN1YkRyb3Bkb3duKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZURlc2NlbmRhbnRLZXlNYW5hZ2VyLmFjdGl2ZUl0ZW0uc3ViRHJvcGRvd24uc2V0UGFyZW50RHJvcGRvd24odGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmtleWRvd25MaXN0ZW5lclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZURyb3Bkb3duKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmNvZGUgPT09ICdBcnJvd0xlZnQnKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnBhcmVudERyb3Bkb3duKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhcmVudERyb3Bkb3duLmNyZWF0ZUtleWJvYXJkSGFuZGxlclN1YnNjcmlwdGlvbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZURyb3Bkb3duKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmNvZGUgPT09ICdBcnJvd1JpZ2h0Jykge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5hY3RpdmVEZXNjZW5kYW50S2V5TWFuYWdlcj8uYWN0aXZlSXRlbS5zdWJEcm9wZG93bikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVEZXNjZW5kYW50S2V5TWFuYWdlci5hY3RpdmVJdGVtLmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzRXhwYW5kT25Ib3ZlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gdGhpcy5hY3RpdmVEZXNjZW5kYW50S2V5TWFuYWdlci5hY3RpdmVJdGVtLm1vdXNlZW50ZXIoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy5hY3RpdmVEZXNjZW5kYW50S2V5TWFuYWdlci5hY3RpdmVJdGVtLmNsaWNrKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZURlc2NlbmRhbnRLZXlNYW5hZ2VyLmFjdGl2ZUl0ZW0uc3ViRHJvcGRvd24uc2V0UGFyZW50RHJvcGRvd24odGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmtleWRvd25MaXN0ZW5lclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudC5jb2RlID09PSAnVGFiJyAmJiAhdGhpcy5oYXNUYWJOYXZpZ2F0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VEcm9wZG93bih0cnVlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZURlc2NlbmRhbnRLZXlNYW5hZ2VyPy5vbktleWRvd24oZXZlbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldFBhcmVudERyb3Bkb3duKHBhcmVudERyb3Bkb3duOiBFdWlEcm9wZG93bkNvbXBvbmVudCk6IHZvaWQge1xuICAgICAgICB0aGlzLnBhcmVudERyb3Bkb3duID0gcGFyZW50RHJvcGRvd247XG4gICAgICAgIHRoaXMucG9zaXRpb24gPSAncmlnaHQnO1xuICAgICAgICB0aGlzLnNldFBvc2l0aW9uKCk7XG5cbiAgICAgICAgY29uc3QgcG9zaXRpb25TdHJhdGVneSA9IHRoaXMuZ2V0UG9zaXRpb25TdHJhdGVneSgpO1xuICAgICAgICB0aGlzLm92ZXJsYXlSZWYudXBkYXRlUG9zaXRpb25TdHJhdGVneShwb3NpdGlvblN0cmF0ZWd5KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldCBoYXNEcm9wZG93bkl0ZW1zKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5ldWlEcm9wZG93bkl0ZW1zPy5sZW5ndGggPiAwO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0UG9zaXRpb25TdHJhdGVneSgpOiBGbGV4aWJsZUNvbm5lY3RlZFBvc2l0aW9uU3RyYXRlZ3kge1xuICAgICAgICByZXR1cm4gdGhpcy5vdmVybGF5XG4gICAgICAgICAgICAucG9zaXRpb24oKVxuICAgICAgICAgICAgLmZsZXhpYmxlQ29ubmVjdGVkVG8odGhpcy5vcmlnaW4gYXMgRmxleGlibGVDb25uZWN0ZWRQb3NpdGlvblN0cmF0ZWd5T3JpZ2luKVxuICAgICAgICAgICAgLndpdGhQb3NpdGlvbnMoW1xuICAgICAgICAgICAgICAgIG5ldyBDb25uZWN0aW9uUG9zaXRpb25QYWlyKFxuICAgICAgICAgICAgICAgICAgICB7IG9yaWdpblg6IHRoaXMub3JpZ2luWCwgb3JpZ2luWTogdGhpcy5vcmlnaW5ZIH0sXG4gICAgICAgICAgICAgICAgICAgIHsgb3ZlcmxheVg6IHRoaXMub3ZlcmxheVgsIG92ZXJsYXlZOiB0aGlzLm92ZXJsYXlZIH0sXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAud2l0aEZsZXhpYmxlRGltZW5zaW9ucyhmYWxzZSlcbiAgICAgICAgICAgIC53aXRoTG9ja2VkUG9zaXRpb24odHJ1ZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc1Zpc2libGUob3JpZ2luOiBIVE1MRWxlbWVudCwgc2Nyb2xsYWJsZVBhcmVudDogSFRNTEVsZW1lbnQpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3Qgb3JpZ2luWSA9IG9yaWdpbi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS55O1xuICAgICAgICBjb25zdCBzY3JvbGxhYmxlUGFyZW50WSA9IE1hdGguYWJzKHNjcm9sbGFibGVQYXJlbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkueSk7XG4gICAgICAgIGNvbnN0IHNjcm9sbGFibGVQYXJlbnRIZWlnaHQgPSBzY3JvbGxhYmxlUGFyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodCAtIDUwO1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAob3JpZ2luWSA+IDAgJiYgb3JpZ2luWSA8IHNjcm9sbGFibGVQYXJlbnRIZWlnaHQpIHx8XG4gICAgICAgICAgICAob3JpZ2luWSAtIHNjcm9sbGFibGVQYXJlbnRZID4gMCAmJiBvcmlnaW5ZIDwgc2Nyb2xsYWJsZVBhcmVudFkgKyBzY3JvbGxhYmxlUGFyZW50SGVpZ2h0KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNUcmlnZ2VyRm9jdXNhYmxlT25DbG9zZShvcmlnaW46IEhUTUxFbGVtZW50KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBvcmlnaW4ubWF0Y2hlcygnYnV0dG9uOm5vdChbZGlzYWJsZWRdKScpIHx8IG9yaWdpbi5tYXRjaGVzKCdhJyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRQb3NpdGlvbigpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMucG9zaXRpb24gPT09ICd0b3AnKSB7XG4gICAgICAgICAgICB0aGlzLm9yaWdpblkgPSAndG9wJztcbiAgICAgICAgICAgIHRoaXMub3ZlcmxheVkgPSAnYm90dG9tJztcblxuICAgICAgICAgICAgaWYgKHRoaXMuaXNEcm9wRG93blJpZ2h0QWxpZ25lZCkge1xuICAgICAgICAgICAgICAgIHRoaXMub3JpZ2luWCA9ICdlbmQnO1xuICAgICAgICAgICAgICAgIHRoaXMub3ZlcmxheVggPSAnZW5kJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5wb3NpdGlvbiA9PT0gJ3JpZ2h0Jykge1xuICAgICAgICAgICAgdGhpcy5vcmlnaW5YID0gJ2VuZCc7XG4gICAgICAgICAgICB0aGlzLm92ZXJsYXlYID0gJ3N0YXJ0JztcbiAgICAgICAgICAgIHRoaXMub3ZlcmxheVkgPSAnY2VudGVyJztcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5wb3NpdGlvbiA9PT0gJ2JvdHRvbScpIHtcbiAgICAgICAgICAgIHRoaXMub3JpZ2luWSA9ICdib3R0b20nO1xuICAgICAgICAgICAgdGhpcy5vdmVybGF5WSA9ICd0b3AnO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5pc0Ryb3BEb3duUmlnaHRBbGlnbmVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcmlnaW5YID0gJ2VuZCc7XG4gICAgICAgICAgICAgICAgdGhpcy5vdmVybGF5WCA9ICdlbmQnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnBvc2l0aW9uID09PSAnbGVmdCcpIHtcbiAgICAgICAgICAgIHRoaXMub3JpZ2luWCA9ICdzdGFydCc7XG4gICAgICAgICAgICB0aGlzLm92ZXJsYXlYID0gJ2VuZCc7XG4gICAgICAgICAgICB0aGlzLm92ZXJsYXlZID0gJ2NlbnRlcic7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCI8ZGl2ICN0cmlnZ2VyUmVmIGNsYXNzPVwiZXVpLWRyb3Bkb3duX190cmlnZ2VyLWNvbnRhaW5lclwiIChjbGljayk9XCJvblRyaWdnZXJDbGlja2VkKCRldmVudClcIj5cbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICN0ZW1wbGF0ZVBvcnRhbENvbnRlbnQ+XG4gICAgPGRpdlxuICAgICAgICBhdHRyLmRhdGEtZTJlPVwie3sgZTJlQXR0ciB9fVwiXG4gICAgICAgIFtAb3BlbkNsb3NlXT1cImlzT3BlbiA/ICdvcGVuJyA6ICdjbG9zZWQnXCJcbiAgICAgICAgY2RrVHJhcEZvY3VzXG4gICAgICAgIFtjZGtUcmFwRm9jdXNBdXRvQ2FwdHVyZV09XCJ0cmFwRm9jdXNBdXRvQ2FwdHVyZVwiXG4gICAgICAgIHJvbGU9XCJkaWFsb2dcIlxuICAgICAgICBhcmlhLWxhYmVsPVwiZVVJIGRyb3Bkb3duIHBhbmVsXCJcbiAgICAgICAgY2xhc3M9XCJldWktZHJvcGRvd25fX3BhbmVsLWNvbnRhaW5lclwiXG4gICAgICAgIFtzdHlsZS53aWR0aF09XCJ3aWR0aFwiXG4gICAgICAgIFt0YWJpbmRleF09XCJ0YWJJbmRleFwiXG4gICAgICAgIChjbGljayk9XCJvbkNsaWNrKClcIj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiZXVpLWRyb3Bkb3duLWNvbnRlbnRcIj48L25nLWNvbnRlbnQ+XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19