ngx-register-base 0.0.4 → 0.0.5

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.
@@ -76,11 +76,11 @@ export class FilterListHeaderComponent {
76
76
  return this._filterStateService.isPin;
77
77
  }
78
78
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FilterListHeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
79
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: FilterListHeaderComponent, selector: "sma-filter-list-header", inputs: { total: "total", showTotal: "showTotal", showPin: "showPin", showCloseButton: "showCloseButton", acceptButtonDisabled: "acceptButtonDisabled", applyButtonDisabled: "applyButtonDisabled", filterListHeaderTitle: "filterListHeaderTitle" }, outputs: { applyFilter: "applyFilter", resetFilter: "resetFilter" }, providers: [FilterListService], ngImport: i0, template: "<ng-container [ngSwitch]=\"filterState$ | async\">\n <h4 *ngSwitchCase=\"FilterState.FILTER_LIST\">{{ filterListHeaderTitle }}</h4>\n <h4 *ngSwitchCase=\"FilterState.SAVED_LIST\">\u0421\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u043D\u044B\u0435 \u0444\u0438\u043B\u044C\u0442\u0440\u044B</h4>\n <h4 *ngSwitchCase=\"FilterState.ON_EDIT_FILTER\">\u0420\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435 \u0444\u0438\u043B\u044C\u0442\u0440\u0430</h4>\n <h4 *ngSwitchCase=\"FilterState.ON_SAVE_FILTER\">\u0421\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u044C \u0444\u0438\u043B\u044C\u0442\u0440</h4>\n</ng-container>\n\n<div class=\"sma-filter-list-header-actions-button\">\n <ng-container [ngSwitch]=\"filterState$ | async\">\n <ng-container\n *ngSwitchCase=\"FilterState.FILTER_LIST\"\n [ngTemplateOutlet]=\"filterListTemplate\"\n ></ng-container>\n <ng-container\n *ngSwitchCase=\"FilterState.SAVED_LIST\"\n [ngTemplateOutlet]=\"savedListTemplate\"\n ></ng-container>\n <ng-container\n *ngSwitchCase=\"FilterState.ON_EDIT_FILTER\"\n [ngTemplateOutlet]=\"saveFilterTemplate\"\n ></ng-container>\n <ng-container\n *ngSwitchCase=\"FilterState.ON_SAVE_FILTER\"\n [ngTemplateOutlet]=\"saveFilterTemplate\"\n ></ng-container>\n <ng-container *ngSwitchDefault [ngTemplateOutlet]=\"backButtonTemplate\"></ng-container>\n </ng-container>\n</div>\n\n<ng-template #filterListTemplate>\n <ng-container *ngIf=\"showPin\">\n <button\n size=\"s\"\n appearanceType=\"ghost\"\n appearance=\"secondary\"\n prizmButton\n class=\"icon-button\"\n (click)=\"onTogglePin()\"\n >\n <img\n [src]=\"\n 'assets/ngx-register-base/icons/' + (isPin ? 'thumbtack-directly.svg' : 'thumbtack.svg')\n \"\n />\n </button>\n\n <sma-divider layout=\"vertical\"></sma-divider>\n </ng-container>\n\n <button\n icon=\"social-star\"\n size=\"s\"\n appearanceType=\"ghost\"\n appearance=\"secondary\"\n prizmButton\n class=\"icon-button\"\n (click)=\"onSavedList()\"\n ></button>\n\n <button\n icon=\"tools-content-save\"\n size=\"s\"\n appearanceType=\"ghost\"\n appearance=\"secondary\"\n prizmButton\n class=\"icon-button\"\n (click)=\"onSave()\"\n ></button>\n\n <sma-divider layout=\"vertical\"></sma-divider>\n\n <button\n icon=\"selection-check-simple\"\n size=\"s\"\n appearanceType=\"ghost\"\n appearance=\"primary\"\n prizmButton\n class=\"icon-button\"\n [disabled]=\"applyButtonDisabled\"\n (click)=\"onApplyFilter()\"\n ></button>\n\n <button\n icon=\"tools-eraser\"\n size=\"s\"\n appearanceType=\"ghost\"\n appearance=\"secondary\"\n prizmButton\n class=\"icon-button\"\n (click)=\"onReset()\"\n ></button>\n\n <button\n *ngIf=\"showCloseButton\"\n icon=\"cancel-close\"\n size=\"s\"\n appearanceType=\"ghost\"\n appearance=\"danger\"\n prizmButton\n class=\"icon-button\"\n (click)=\"onClose()\"\n ></button>\n</ng-template>\n\n<ng-template #savedListTemplate>\n <button\n icon=\"selection-check-simple\"\n size=\"s\"\n appearanceType=\"ghost\"\n appearance=\"primary\"\n prizmButton\n class=\"icon-button\"\n [disabled]=\"acceptButtonDisabled\"\n (click)=\"onApplySavedFilter()\"\n ></button>\n\n <ng-container *ngTemplateOutlet=\"backButtonTemplate\"></ng-container>\n</ng-template>\n\n<ng-template #saveFilterTemplate>\n <button\n icon=\"tools-content-save\"\n size=\"s\"\n appearanceType=\"ghost\"\n appearance=\"secondary\"\n prizmButton\n class=\"icon-button\"\n [disabled]=\"acceptButtonDisabled\"\n (click)=\"onSaveFilter()\"\n ></button>\n\n <ng-container *ngTemplateOutlet=\"backButtonTemplate\"></ng-container>\n</ng-template>\n\n<ng-template #backButtonTemplate>\n <button\n icon=\"arrows-corner-up-left\"\n size=\"s\"\n appearanceType=\"ghost\"\n appearance=\"secondary\"\n prizmButton\n class=\"icon-button\"\n prizmHint=\"\u0413\u043B\u0430\u0432\u043D\u043E\u0435 \u043C\u0435\u043D\u044E \u0444\u0438\u043B\u044C\u0442\u0440\u043E\u0432\"\n prizmHintTheme=\"light\"\n (click)=\"onBack()\"\n ></button>\n</ng-template>\n", styles: [".input-text-12px{font-family:Inter,serif;font-size:12px;font-weight:300;line-height:16px}.input-text-14px{font-family:Inter,serif;font-size:14px;font-weight:300;line-height:16px}.input-label{font-family:Inter,serif;font-size:12px;font-weight:300;line-height:16px}.table-heading-12px{font-family:Inter,serif;font-size:12px;font-weight:500;line-height:16px}.table-text-12px-400{font-family:Inter,serif;font-size:12px;font-weight:400;line-height:16px}.static-title-h4{font-family:Inter,serif;font-size:14px;font-weight:500;line-height:18px}.main-subtitle{font-family:Inter,serif;font-size:14px;font-weight:400;line-height:16px}:root{--input-text-12px: normal 300 12px / 16px \"Inter\";--input-text-14px: normal 300 14px / 16px \"Inter\"}:host{display:flex;align-items:center;justify-content:space-between;min-height:40px;padding:0 8px 0 16px;border-radius:2px 2px 0 0;background:var(--table-header, #eef0f5);border-bottom:1px solid rgba(119,123,146,.3)}:host h4{font-family:Inter,serif;font-size:14px;font-weight:500;line-height:18px}:host .sma-filter-list-header-actions-button{height:32px;display:flex}:host .sma-filter-list-header-actions-button .icon-button{height:32px}:host .sma-filter-list-header-actions-button .icon-button ::ng-deep .prizm-font-btn-links-14{height:16px}:host .sma-filter-list-header-actions-button .icon-button ::ng-deep .z-wrapper{display:flex;align-items:center}:host .sma-filter-list-header-actions-button .icon-button ::ng-deep .z-wrapper[data-appearance=secondary][data-appearance-type=ghost]{color:#4f5669}:host .sma-filter-list-header-actions-button .icon-button ::ng-deep .z-wrapper[data-appearance=secondary][data-appearance-type=ghost]:hover{color:var(--main-black)}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i1.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "component", type: i2.PrizmButtonComponent, selector: "button[prizmButton], button[prizmIconButton], a[prizmButton], a[prizmIconButton]", inputs: ["size", "icon", "iconRight", "appearance", "appearanceType", "disabled", "showLoader"] }, { kind: "directive", type: i2.PrizmHintDirective, selector: "[prizmHint]:not(ng-container)", inputs: ["prizmAutoReposition", "prizmHintDirection", "prizmHintId", "prizmHintTheme", "prizmHintShowDelay", "prizmHintHideDelay", "prizmHintHost", "prizmHintContext", "prizmHintCanShow", "prizmHint"], outputs: ["prizmHintShowed"], exportAs: ["prizmHint"] }, { kind: "component", type: i3.DividerComponent, selector: "sma-divider", inputs: ["layout"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
79
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: FilterListHeaderComponent, selector: "sma-filter-list-header", inputs: { total: "total", showTotal: "showTotal", showPin: "showPin", showCloseButton: "showCloseButton", acceptButtonDisabled: "acceptButtonDisabled", applyButtonDisabled: "applyButtonDisabled", filterListHeaderTitle: "filterListHeaderTitle" }, outputs: { applyFilter: "applyFilter", resetFilter: "resetFilter" }, providers: [FilterListService], ngImport: i0, template: "<ng-container [ngSwitch]=\"filterState$ | async\">\n <h4 *ngSwitchCase=\"FilterState.FILTER_LIST\">{{ filterListHeaderTitle }}</h4>\n <h4 *ngSwitchCase=\"FilterState.SAVED_LIST\">\u0421\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u043D\u044B\u0435 \u0444\u0438\u043B\u044C\u0442\u0440\u044B</h4>\n <h4 *ngSwitchCase=\"FilterState.ON_EDIT_FILTER\">\u0420\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435 \u0444\u0438\u043B\u044C\u0442\u0440\u0430</h4>\n <h4 *ngSwitchCase=\"FilterState.ON_SAVE_FILTER\">\u0421\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u044C \u0444\u0438\u043B\u044C\u0442\u0440</h4>\n</ng-container>\n\n<div class=\"sma-filter-list-header-actions-button\">\n <ng-container [ngSwitch]=\"filterState$ | async\">\n <ng-container\n *ngSwitchCase=\"FilterState.FILTER_LIST\"\n [ngTemplateOutlet]=\"filterListTemplate\"\n ></ng-container>\n <ng-container\n *ngSwitchCase=\"FilterState.SAVED_LIST\"\n [ngTemplateOutlet]=\"savedListTemplate\"\n ></ng-container>\n <ng-container\n *ngSwitchCase=\"FilterState.ON_EDIT_FILTER\"\n [ngTemplateOutlet]=\"saveFilterTemplate\"\n ></ng-container>\n <ng-container\n *ngSwitchCase=\"FilterState.ON_SAVE_FILTER\"\n [ngTemplateOutlet]=\"saveFilterTemplate\"\n ></ng-container>\n <ng-container *ngSwitchDefault [ngTemplateOutlet]=\"backButtonTemplate\"></ng-container>\n </ng-container>\n</div>\n\n<ng-template #filterListTemplate>\n <ng-container *ngIf=\"showPin\">\n <button\n size=\"s\"\n appearanceType=\"ghost\"\n appearance=\"secondary\"\n prizmButton\n class=\"icon-button\"\n (click)=\"onTogglePin()\"\n >\n <img\n [src]=\"\n 'assets/ngx-register-base/icons/' + (isPin ? 'thumbtack-directly.svg' : 'thumbtack.svg')\n \"\n />\n </button>\n\n <sma-divider layout=\"vertical\"></sma-divider>\n </ng-container>\n\n <button\n icon=\"social-star\"\n size=\"s\"\n appearanceType=\"ghost\"\n appearance=\"secondary\"\n prizmButton\n class=\"icon-button\"\n (click)=\"onSavedList()\"\n ></button>\n\n <button\n icon=\"tools-content-save\"\n size=\"s\"\n appearanceType=\"ghost\"\n appearance=\"secondary\"\n prizmButton\n class=\"icon-button\"\n (click)=\"onSave()\"\n ></button>\n\n <sma-divider layout=\"vertical\"></sma-divider>\n\n <button\n icon=\"selection-check-simple\"\n size=\"s\"\n appearanceType=\"ghost\"\n appearance=\"primary\"\n prizmButton\n class=\"icon-button\"\n [disabled]=\"applyButtonDisabled\"\n (click)=\"onApplyFilter()\"\n ></button>\n\n <button\n icon=\"tools-eraser\"\n size=\"s\"\n appearanceType=\"ghost\"\n appearance=\"secondary\"\n prizmButton\n class=\"icon-button\"\n (click)=\"onReset()\"\n ></button>\n\n <button\n *ngIf=\"showCloseButton\"\n icon=\"cancel-close\"\n size=\"s\"\n appearanceType=\"ghost\"\n appearance=\"danger\"\n prizmButton\n class=\"icon-button\"\n (click)=\"onClose()\"\n ></button>\n</ng-template>\n\n<ng-template #savedListTemplate>\n <button\n icon=\"selection-check-simple\"\n size=\"s\"\n appearanceType=\"ghost\"\n appearance=\"primary\"\n prizmButton\n class=\"icon-button\"\n [disabled]=\"acceptButtonDisabled\"\n (click)=\"onApplySavedFilter()\"\n ></button>\n\n <ng-container *ngTemplateOutlet=\"backButtonTemplate\"></ng-container>\n</ng-template>\n\n<ng-template #saveFilterTemplate>\n <button\n icon=\"tools-content-save\"\n size=\"s\"\n appearanceType=\"ghost\"\n appearance=\"secondary\"\n prizmButton\n class=\"icon-button\"\n [disabled]=\"acceptButtonDisabled\"\n (click)=\"onSaveFilter()\"\n ></button>\n\n <ng-container *ngTemplateOutlet=\"backButtonTemplate\"></ng-container>\n</ng-template>\n\n<ng-template #backButtonTemplate>\n <button\n icon=\"arrows-corner-up-left\"\n size=\"s\"\n appearanceType=\"ghost\"\n appearance=\"secondary\"\n prizmButton\n class=\"icon-button\"\n prizmHint=\"\u0413\u043B\u0430\u0432\u043D\u043E\u0435 \u043C\u0435\u043D\u044E \u0444\u0438\u043B\u044C\u0442\u0440\u043E\u0432\"\n prizmHintTheme=\"light\"\n (click)=\"onBack()\"\n ></button>\n</ng-template>\n", styles: [".input-text-12px{font-family:Inter,serif;font-size:12px;font-weight:300;line-height:16px}.input-text-14px{font-family:Inter,serif;font-size:14px;font-weight:300;line-height:16px}.input-label{font-family:Inter,serif;font-size:12px;font-weight:300;line-height:16px}.table-heading-12px{font-family:Inter,serif;font-size:12px;font-weight:500;line-height:16px}.table-text-12px-400{font-family:Inter,serif;font-size:12px;font-weight:400;line-height:16px}.static-title-h4{font-family:Inter,serif;font-size:14px;font-weight:500;line-height:18px}.main-subtitle{font-family:Inter,serif;font-size:14px;font-weight:400;line-height:16px}:root{--input-text-12px: normal 300 12px / 16px \"Inter\";--input-text-14px: normal 300 14px / 16px \"Inter\"}:host{display:flex;align-items:center;justify-content:space-between;min-height:40px;height:40px;padding:0 8px 0 16px;border-radius:2px 2px 0 0;background:var(--table-header, #eef0f5);border-bottom:1px solid rgba(119,123,146,.3)}:host h4{font-family:Inter,serif;font-size:14px;font-weight:500;line-height:18px}:host .sma-filter-list-header-actions-button{height:32px;display:flex}:host .sma-filter-list-header-actions-button .icon-button{height:32px}:host .sma-filter-list-header-actions-button .icon-button ::ng-deep .prizm-font-btn-links-14{height:16px}:host .sma-filter-list-header-actions-button .icon-button ::ng-deep .z-wrapper{display:flex;align-items:center}:host .sma-filter-list-header-actions-button .icon-button ::ng-deep .z-wrapper[data-appearance=secondary][data-appearance-type=ghost]{color:#4f5669}:host .sma-filter-list-header-actions-button .icon-button ::ng-deep .z-wrapper[data-appearance=secondary][data-appearance-type=ghost]:hover{color:var(--main-black)}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i1.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "component", type: i2.PrizmButtonComponent, selector: "button[prizmButton], button[prizmIconButton], a[prizmButton], a[prizmIconButton]", inputs: ["size", "icon", "iconRight", "appearance", "appearanceType", "disabled", "showLoader"] }, { kind: "directive", type: i2.PrizmHintDirective, selector: "[prizmHint]:not(ng-container)", inputs: ["prizmAutoReposition", "prizmHintDirection", "prizmHintId", "prizmHintTheme", "prizmHintShowDelay", "prizmHintHideDelay", "prizmHintHost", "prizmHintContext", "prizmHintCanShow", "prizmHint"], outputs: ["prizmHintShowed"], exportAs: ["prizmHint"] }, { kind: "component", type: i3.DividerComponent, selector: "sma-divider", inputs: ["layout"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
80
80
  }
81
81
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FilterListHeaderComponent, decorators: [{
82
82
  type: Component,
83
- args: [{ selector: 'sma-filter-list-header', changeDetection: ChangeDetectionStrategy.OnPush, providers: [FilterListService], template: "<ng-container [ngSwitch]=\"filterState$ | async\">\n <h4 *ngSwitchCase=\"FilterState.FILTER_LIST\">{{ filterListHeaderTitle }}</h4>\n <h4 *ngSwitchCase=\"FilterState.SAVED_LIST\">\u0421\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u043D\u044B\u0435 \u0444\u0438\u043B\u044C\u0442\u0440\u044B</h4>\n <h4 *ngSwitchCase=\"FilterState.ON_EDIT_FILTER\">\u0420\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435 \u0444\u0438\u043B\u044C\u0442\u0440\u0430</h4>\n <h4 *ngSwitchCase=\"FilterState.ON_SAVE_FILTER\">\u0421\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u044C \u0444\u0438\u043B\u044C\u0442\u0440</h4>\n</ng-container>\n\n<div class=\"sma-filter-list-header-actions-button\">\n <ng-container [ngSwitch]=\"filterState$ | async\">\n <ng-container\n *ngSwitchCase=\"FilterState.FILTER_LIST\"\n [ngTemplateOutlet]=\"filterListTemplate\"\n ></ng-container>\n <ng-container\n *ngSwitchCase=\"FilterState.SAVED_LIST\"\n [ngTemplateOutlet]=\"savedListTemplate\"\n ></ng-container>\n <ng-container\n *ngSwitchCase=\"FilterState.ON_EDIT_FILTER\"\n [ngTemplateOutlet]=\"saveFilterTemplate\"\n ></ng-container>\n <ng-container\n *ngSwitchCase=\"FilterState.ON_SAVE_FILTER\"\n [ngTemplateOutlet]=\"saveFilterTemplate\"\n ></ng-container>\n <ng-container *ngSwitchDefault [ngTemplateOutlet]=\"backButtonTemplate\"></ng-container>\n </ng-container>\n</div>\n\n<ng-template #filterListTemplate>\n <ng-container *ngIf=\"showPin\">\n <button\n size=\"s\"\n appearanceType=\"ghost\"\n appearance=\"secondary\"\n prizmButton\n class=\"icon-button\"\n (click)=\"onTogglePin()\"\n >\n <img\n [src]=\"\n 'assets/ngx-register-base/icons/' + (isPin ? 'thumbtack-directly.svg' : 'thumbtack.svg')\n \"\n />\n </button>\n\n <sma-divider layout=\"vertical\"></sma-divider>\n </ng-container>\n\n <button\n icon=\"social-star\"\n size=\"s\"\n appearanceType=\"ghost\"\n appearance=\"secondary\"\n prizmButton\n class=\"icon-button\"\n (click)=\"onSavedList()\"\n ></button>\n\n <button\n icon=\"tools-content-save\"\n size=\"s\"\n appearanceType=\"ghost\"\n appearance=\"secondary\"\n prizmButton\n class=\"icon-button\"\n (click)=\"onSave()\"\n ></button>\n\n <sma-divider layout=\"vertical\"></sma-divider>\n\n <button\n icon=\"selection-check-simple\"\n size=\"s\"\n appearanceType=\"ghost\"\n appearance=\"primary\"\n prizmButton\n class=\"icon-button\"\n [disabled]=\"applyButtonDisabled\"\n (click)=\"onApplyFilter()\"\n ></button>\n\n <button\n icon=\"tools-eraser\"\n size=\"s\"\n appearanceType=\"ghost\"\n appearance=\"secondary\"\n prizmButton\n class=\"icon-button\"\n (click)=\"onReset()\"\n ></button>\n\n <button\n *ngIf=\"showCloseButton\"\n icon=\"cancel-close\"\n size=\"s\"\n appearanceType=\"ghost\"\n appearance=\"danger\"\n prizmButton\n class=\"icon-button\"\n (click)=\"onClose()\"\n ></button>\n</ng-template>\n\n<ng-template #savedListTemplate>\n <button\n icon=\"selection-check-simple\"\n size=\"s\"\n appearanceType=\"ghost\"\n appearance=\"primary\"\n prizmButton\n class=\"icon-button\"\n [disabled]=\"acceptButtonDisabled\"\n (click)=\"onApplySavedFilter()\"\n ></button>\n\n <ng-container *ngTemplateOutlet=\"backButtonTemplate\"></ng-container>\n</ng-template>\n\n<ng-template #saveFilterTemplate>\n <button\n icon=\"tools-content-save\"\n size=\"s\"\n appearanceType=\"ghost\"\n appearance=\"secondary\"\n prizmButton\n class=\"icon-button\"\n [disabled]=\"acceptButtonDisabled\"\n (click)=\"onSaveFilter()\"\n ></button>\n\n <ng-container *ngTemplateOutlet=\"backButtonTemplate\"></ng-container>\n</ng-template>\n\n<ng-template #backButtonTemplate>\n <button\n icon=\"arrows-corner-up-left\"\n size=\"s\"\n appearanceType=\"ghost\"\n appearance=\"secondary\"\n prizmButton\n class=\"icon-button\"\n prizmHint=\"\u0413\u043B\u0430\u0432\u043D\u043E\u0435 \u043C\u0435\u043D\u044E \u0444\u0438\u043B\u044C\u0442\u0440\u043E\u0432\"\n prizmHintTheme=\"light\"\n (click)=\"onBack()\"\n ></button>\n</ng-template>\n", styles: [".input-text-12px{font-family:Inter,serif;font-size:12px;font-weight:300;line-height:16px}.input-text-14px{font-family:Inter,serif;font-size:14px;font-weight:300;line-height:16px}.input-label{font-family:Inter,serif;font-size:12px;font-weight:300;line-height:16px}.table-heading-12px{font-family:Inter,serif;font-size:12px;font-weight:500;line-height:16px}.table-text-12px-400{font-family:Inter,serif;font-size:12px;font-weight:400;line-height:16px}.static-title-h4{font-family:Inter,serif;font-size:14px;font-weight:500;line-height:18px}.main-subtitle{font-family:Inter,serif;font-size:14px;font-weight:400;line-height:16px}:root{--input-text-12px: normal 300 12px / 16px \"Inter\";--input-text-14px: normal 300 14px / 16px \"Inter\"}:host{display:flex;align-items:center;justify-content:space-between;min-height:40px;padding:0 8px 0 16px;border-radius:2px 2px 0 0;background:var(--table-header, #eef0f5);border-bottom:1px solid rgba(119,123,146,.3)}:host h4{font-family:Inter,serif;font-size:14px;font-weight:500;line-height:18px}:host .sma-filter-list-header-actions-button{height:32px;display:flex}:host .sma-filter-list-header-actions-button .icon-button{height:32px}:host .sma-filter-list-header-actions-button .icon-button ::ng-deep .prizm-font-btn-links-14{height:16px}:host .sma-filter-list-header-actions-button .icon-button ::ng-deep .z-wrapper{display:flex;align-items:center}:host .sma-filter-list-header-actions-button .icon-button ::ng-deep .z-wrapper[data-appearance=secondary][data-appearance-type=ghost]{color:#4f5669}:host .sma-filter-list-header-actions-button .icon-button ::ng-deep .z-wrapper[data-appearance=secondary][data-appearance-type=ghost]:hover{color:var(--main-black)}\n"] }]
83
+ args: [{ selector: 'sma-filter-list-header', changeDetection: ChangeDetectionStrategy.OnPush, providers: [FilterListService], template: "<ng-container [ngSwitch]=\"filterState$ | async\">\n <h4 *ngSwitchCase=\"FilterState.FILTER_LIST\">{{ filterListHeaderTitle }}</h4>\n <h4 *ngSwitchCase=\"FilterState.SAVED_LIST\">\u0421\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u043D\u044B\u0435 \u0444\u0438\u043B\u044C\u0442\u0440\u044B</h4>\n <h4 *ngSwitchCase=\"FilterState.ON_EDIT_FILTER\">\u0420\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435 \u0444\u0438\u043B\u044C\u0442\u0440\u0430</h4>\n <h4 *ngSwitchCase=\"FilterState.ON_SAVE_FILTER\">\u0421\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u044C \u0444\u0438\u043B\u044C\u0442\u0440</h4>\n</ng-container>\n\n<div class=\"sma-filter-list-header-actions-button\">\n <ng-container [ngSwitch]=\"filterState$ | async\">\n <ng-container\n *ngSwitchCase=\"FilterState.FILTER_LIST\"\n [ngTemplateOutlet]=\"filterListTemplate\"\n ></ng-container>\n <ng-container\n *ngSwitchCase=\"FilterState.SAVED_LIST\"\n [ngTemplateOutlet]=\"savedListTemplate\"\n ></ng-container>\n <ng-container\n *ngSwitchCase=\"FilterState.ON_EDIT_FILTER\"\n [ngTemplateOutlet]=\"saveFilterTemplate\"\n ></ng-container>\n <ng-container\n *ngSwitchCase=\"FilterState.ON_SAVE_FILTER\"\n [ngTemplateOutlet]=\"saveFilterTemplate\"\n ></ng-container>\n <ng-container *ngSwitchDefault [ngTemplateOutlet]=\"backButtonTemplate\"></ng-container>\n </ng-container>\n</div>\n\n<ng-template #filterListTemplate>\n <ng-container *ngIf=\"showPin\">\n <button\n size=\"s\"\n appearanceType=\"ghost\"\n appearance=\"secondary\"\n prizmButton\n class=\"icon-button\"\n (click)=\"onTogglePin()\"\n >\n <img\n [src]=\"\n 'assets/ngx-register-base/icons/' + (isPin ? 'thumbtack-directly.svg' : 'thumbtack.svg')\n \"\n />\n </button>\n\n <sma-divider layout=\"vertical\"></sma-divider>\n </ng-container>\n\n <button\n icon=\"social-star\"\n size=\"s\"\n appearanceType=\"ghost\"\n appearance=\"secondary\"\n prizmButton\n class=\"icon-button\"\n (click)=\"onSavedList()\"\n ></button>\n\n <button\n icon=\"tools-content-save\"\n size=\"s\"\n appearanceType=\"ghost\"\n appearance=\"secondary\"\n prizmButton\n class=\"icon-button\"\n (click)=\"onSave()\"\n ></button>\n\n <sma-divider layout=\"vertical\"></sma-divider>\n\n <button\n icon=\"selection-check-simple\"\n size=\"s\"\n appearanceType=\"ghost\"\n appearance=\"primary\"\n prizmButton\n class=\"icon-button\"\n [disabled]=\"applyButtonDisabled\"\n (click)=\"onApplyFilter()\"\n ></button>\n\n <button\n icon=\"tools-eraser\"\n size=\"s\"\n appearanceType=\"ghost\"\n appearance=\"secondary\"\n prizmButton\n class=\"icon-button\"\n (click)=\"onReset()\"\n ></button>\n\n <button\n *ngIf=\"showCloseButton\"\n icon=\"cancel-close\"\n size=\"s\"\n appearanceType=\"ghost\"\n appearance=\"danger\"\n prizmButton\n class=\"icon-button\"\n (click)=\"onClose()\"\n ></button>\n</ng-template>\n\n<ng-template #savedListTemplate>\n <button\n icon=\"selection-check-simple\"\n size=\"s\"\n appearanceType=\"ghost\"\n appearance=\"primary\"\n prizmButton\n class=\"icon-button\"\n [disabled]=\"acceptButtonDisabled\"\n (click)=\"onApplySavedFilter()\"\n ></button>\n\n <ng-container *ngTemplateOutlet=\"backButtonTemplate\"></ng-container>\n</ng-template>\n\n<ng-template #saveFilterTemplate>\n <button\n icon=\"tools-content-save\"\n size=\"s\"\n appearanceType=\"ghost\"\n appearance=\"secondary\"\n prizmButton\n class=\"icon-button\"\n [disabled]=\"acceptButtonDisabled\"\n (click)=\"onSaveFilter()\"\n ></button>\n\n <ng-container *ngTemplateOutlet=\"backButtonTemplate\"></ng-container>\n</ng-template>\n\n<ng-template #backButtonTemplate>\n <button\n icon=\"arrows-corner-up-left\"\n size=\"s\"\n appearanceType=\"ghost\"\n appearance=\"secondary\"\n prizmButton\n class=\"icon-button\"\n prizmHint=\"\u0413\u043B\u0430\u0432\u043D\u043E\u0435 \u043C\u0435\u043D\u044E \u0444\u0438\u043B\u044C\u0442\u0440\u043E\u0432\"\n prizmHintTheme=\"light\"\n (click)=\"onBack()\"\n ></button>\n</ng-template>\n", styles: [".input-text-12px{font-family:Inter,serif;font-size:12px;font-weight:300;line-height:16px}.input-text-14px{font-family:Inter,serif;font-size:14px;font-weight:300;line-height:16px}.input-label{font-family:Inter,serif;font-size:12px;font-weight:300;line-height:16px}.table-heading-12px{font-family:Inter,serif;font-size:12px;font-weight:500;line-height:16px}.table-text-12px-400{font-family:Inter,serif;font-size:12px;font-weight:400;line-height:16px}.static-title-h4{font-family:Inter,serif;font-size:14px;font-weight:500;line-height:18px}.main-subtitle{font-family:Inter,serif;font-size:14px;font-weight:400;line-height:16px}:root{--input-text-12px: normal 300 12px / 16px \"Inter\";--input-text-14px: normal 300 14px / 16px \"Inter\"}:host{display:flex;align-items:center;justify-content:space-between;min-height:40px;height:40px;padding:0 8px 0 16px;border-radius:2px 2px 0 0;background:var(--table-header, #eef0f5);border-bottom:1px solid rgba(119,123,146,.3)}:host h4{font-family:Inter,serif;font-size:14px;font-weight:500;line-height:18px}:host .sma-filter-list-header-actions-button{height:32px;display:flex}:host .sma-filter-list-header-actions-button .icon-button{height:32px}:host .sma-filter-list-header-actions-button .icon-button ::ng-deep .prizm-font-btn-links-14{height:16px}:host .sma-filter-list-header-actions-button .icon-button ::ng-deep .z-wrapper{display:flex;align-items:center}:host .sma-filter-list-header-actions-button .icon-button ::ng-deep .z-wrapper[data-appearance=secondary][data-appearance-type=ghost]{color:#4f5669}:host .sma-filter-list-header-actions-button .icon-button ::ng-deep .z-wrapper[data-appearance=secondary][data-appearance-type=ghost]:hover{color:var(--main-black)}\n"] }]
84
84
  }], propDecorators: { total: [{
85
85
  type: Input
86
86
  }], showTotal: [{
@@ -1,3 +1,3 @@
1
- export * from './inputs.consts';
2
- export * from './register-base.consts';
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtcmVnaXN0ZXItYmFzZS9zcmMvbGliL2NvbnN0cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGlCQUFpQixDQUFDO0FBQ2hDLGNBQWMsd0JBQXdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2lucHV0cy5jb25zdHMnO1xuZXhwb3J0ICogZnJvbSAnLi9yZWdpc3Rlci1iYXNlLmNvbnN0cyc7XG4iXX0=
1
+ export { INPUTS_STATE_CONFIG_KEY } from './inputs.consts';
2
+ export { EOrder, SETTINGS_TYPE, USER_SETTINGS_LOADER, USER_PROFILE_LOADER, } from './register-base.consts';
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtcmVnaXN0ZXItYmFzZS9zcmMvbGliL2NvbnN0cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMxRCxPQUFPLEVBQ0wsTUFBTSxFQUNOLGFBQWEsRUFDYixvQkFBb0IsRUFDcEIsbUJBQW1CLEdBQ3BCLE1BQU0sd0JBQXdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBJTlBVVFNfU1RBVEVfQ09ORklHX0tFWSB9IGZyb20gJy4vaW5wdXRzLmNvbnN0cyc7XG5leHBvcnQge1xuICBFT3JkZXIsXG4gIFNFVFRJTkdTX1RZUEUsXG4gIFVTRVJfU0VUVElOR1NfTE9BREVSLFxuICBVU0VSX1BST0ZJTEVfTE9BREVSLFxufSBmcm9tICcuL3JlZ2lzdGVyLWJhc2UuY29uc3RzJztcbiJdfQ==
@@ -1,3 +1,4 @@
1
- export const INPUTS_STATE_CONFIG_KEY = 'INPUTS_STATE_CONFIG_KEY';
1
+ import { InjectionToken } from '@angular/core';
2
+ export const INPUTS_STATE_CONFIG_KEY = new InjectionToken('INPUTS_STATE_CONFIG_KEY');
2
3
  export const WARN_SEARCH_INPUT_UNDEFINED = 'Поле поиска не инициализировано. Пожалуйста задайте конфигурацию createSearchInput: true при провайде INPUTS_STATE_CONFIG_KEY';
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXRzLmNvbnN0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1yZWdpc3Rlci1iYXNlL3NyYy9saWIvY29uc3RzL2lucHV0cy5jb25zdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUcseUJBQXlCLENBQUM7QUFFakUsTUFBTSxDQUFDLE1BQU0sMkJBQTJCLEdBQ3RDLCtIQUErSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IElOUFVUU19TVEFURV9DT05GSUdfS0VZID0gJ0lOUFVUU19TVEFURV9DT05GSUdfS0VZJztcblxuZXhwb3J0IGNvbnN0IFdBUk5fU0VBUkNIX0lOUFVUX1VOREVGSU5FRCA9XG4gICfQn9C+0LvQtSDQv9C+0LjRgdC60LAg0L3QtSDQuNC90LjRhtC40LDQu9C40LfQuNGA0L7QstCw0L3Qvi4g0J/QvtC20LDQu9GD0LnRgdGC0LAg0LfQsNC00LDQudGC0LUg0LrQvtC90YTQuNCz0YPRgNCw0YbQuNGOIGNyZWF0ZVNlYXJjaElucHV0OiB0cnVlINC/0YDQuCDQv9GA0L7QstCw0LnQtNC1IElOUFVUU19TVEFURV9DT05GSUdfS0VZJztcbiJdfQ==
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXRzLmNvbnN0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1yZWdpc3Rlci1iYXNlL3NyYy9saWIvY29uc3RzL2lucHV0cy5jb25zdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUcvQyxNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBRyxJQUFJLGNBQWMsQ0FDdkQseUJBQXlCLENBQzFCLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSwyQkFBMkIsR0FDdEMsK0hBQStILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSUlucHV0c1N0YXRlQ29uZmlnIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY29uc3QgSU5QVVRTX1NUQVRFX0NPTkZJR19LRVkgPSBuZXcgSW5qZWN0aW9uVG9rZW48SUlucHV0c1N0YXRlQ29uZmlnPihcbiAgJ0lOUFVUU19TVEFURV9DT05GSUdfS0VZJ1xuKTtcblxuZXhwb3J0IGNvbnN0IFdBUk5fU0VBUkNIX0lOUFVUX1VOREVGSU5FRCA9XG4gICfQn9C+0LvQtSDQv9C+0LjRgdC60LAg0L3QtSDQuNC90LjRhtC40LDQu9C40LfQuNGA0L7QstCw0L3Qvi4g0J/QvtC20LDQu9GD0LnRgdGC0LAg0LfQsNC00LDQudGC0LUg0LrQvtC90YTQuNCz0YPRgNCw0YbQuNGOIGNyZWF0ZVNlYXJjaElucHV0OiB0cnVlINC/0YDQuCDQv9GA0L7QstCw0LnQtNC1IElOUFVUU19TVEFURV9DT05GSUdfS0VZJztcbiJdfQ==
@@ -246,7 +246,7 @@ export class RegisterBase {
246
246
  }
247
247
  }
248
248
  actionCompleted() {
249
- const filter = this.buildFilter(this.limit, this.offset, this._filterState, this._user);
249
+ const filter = this.buildFilter(this.limit, this.offset, this._filterState);
250
250
  this.currentFilter = filter;
251
251
  this.objectsSubscription({ filter });
252
252
  this.clearSelections();
@@ -278,7 +278,7 @@ export class RegisterBase {
278
278
  return throwError(() => new Error(e));
279
279
  }), takeUntilDestroyed(this.destroyRef))
280
280
  .subscribe(([limit, offset, gqlFilter, sorter]) => {
281
- const filter = this.buildFilter(limit, offset, gqlFilter, this._user, sorter);
281
+ const filter = this.buildFilter(limit, offset, gqlFilter, sorter);
282
282
  const gqlFilterUpdated = !_.isEqual(this._filterState, gqlFilter);
283
283
  this.currentFilter = filter;
284
284
  this._filterState = gqlFilter;
@@ -360,7 +360,7 @@ export class RegisterBase {
360
360
  this.updateAllStateObjectsByState(ERegisterObjectState.UNSELECTED);
361
361
  if (value > this.limit) {
362
362
  const { sorter } = this.stateService;
363
- const filter = this.buildFilter(value, this.offset, this._filterState, this._user, sorter.length > 0 ? sorter : undefined);
363
+ const filter = this.buildFilter(value, this.offset, this._filterState, sorter.length > 0 ? sorter : undefined);
364
364
  this.objectsSubscription({
365
365
  filter,
366
366
  callback: this._selectFirstNLoadingObjects.bind(this),
@@ -517,11 +517,11 @@ export class RegisterBase {
517
517
  let filter = null;
518
518
  const { sorter } = this.stateService;
519
519
  if (selection === SelectionTypes.ALL) {
520
- filter = this.buildFilter(undefined, undefined, this._filterState, this._user);
520
+ filter = this.buildFilter(undefined, undefined, this._filterState);
521
521
  }
522
522
  else if (typeof selection === 'number') {
523
523
  if (selection > this.limit) {
524
- filter = this.buildFilter(selection, 0, this._filterState, this._user, sorter.length > 0 ? sorter : undefined);
524
+ filter = this.buildFilter(selection, 0, this._filterState, sorter.length > 0 ? sorter : undefined);
525
525
  }
526
526
  else {
527
527
  this._selectFirstNItems(selection);
@@ -542,7 +542,7 @@ export class RegisterBase {
542
542
  const updatedFilterState = Array.isArray(this._filterState)
543
543
  ? [...this._filterState, inverseFilter]
544
544
  : [this._filterState, inverseFilter];
545
- return this.buildFilter(undefined, undefined, updatedFilterState, this._user);
545
+ return this.buildFilter(undefined, undefined, updatedFilterState);
546
546
  }
547
547
  _setSelected(data) {
548
548
  this.selectedObjects = new Set(data);
@@ -584,4 +584,4 @@ export class RegisterBase {
584
584
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: RegisterBase, decorators: [{
585
585
  type: Directive
586
586
  }], ctorParameters: () => [{ type: i0.Injector }, { type: undefined }, { type: undefined }] });
587
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0ZXItYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1yZWdpc3Rlci1iYXNlL3NyYy9saWIvY29yZS9yZWdpc3Rlci1iYXNlL3JlZ2lzdGVyLWJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLGlCQUFpQixFQUNqQixVQUFVLEVBQ1YsU0FBUyxFQUNULE1BQU0sR0FJUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUNMLGVBQWUsRUFDZixVQUFVLEVBQ1YsYUFBYSxFQUNiLFlBQVksRUFDWixNQUFNLElBQUksVUFBVSxFQUNwQixHQUFHLEVBRUgsYUFBYSxFQUViLFNBQVMsRUFDVCxJQUFJLEVBQ0osR0FBRyxFQUNILFVBQVUsR0FDWCxNQUFNLE1BQU0sQ0FBQztBQUNkLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUV2QixPQUFPLEVBQ0wsb0JBQW9CLEdBTXJCLE1BQU0saUNBQWlDLENBQUM7QUFDekMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBQ3hGLE9BQU8sRUFDTCw4QkFBOEIsRUFDOUIsYUFBYSxFQUNiLG1CQUFtQixFQUNuQixvQkFBb0IsR0FDckIsTUFBTSxtQ0FBbUMsQ0FBQztBQUMzQyxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQVE1RixPQUFPLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBdUIsTUFBTSwwQkFBMEIsQ0FBQztBQUM1RixPQUFPLEVBQUUs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QUFDLFNBQVMsR0FBRyxjQUFjLENBQUM7SUFDeEUsQ0FBQztJQUVPLHlCQUF5QixDQUFDLE1BQW1CO1FBQ25ELE1BQU0sTUFBTSxHQUFhLEVBQUUsQ0FBQztRQUM1QixNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QixJQUFJLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNwQixNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUYsQ0FBQztRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxJQUFjLGFBQWE7UUFDekIsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLGVBQWdCLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUNyRSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsWUFBYSxFQUFFLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxTQUFTLENBQUM7UUFFaEUsT0FBTyxjQUFjLEtBQUssb0JBQW9CLENBQUMsUUFBUSxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQ3pFLENBQUM7d0dBcnZCbUIsWUFBWTs0RkFBWixZQUFZOzs0RkFBWixZQUFZO2tCQURqQyxTQUFTIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIERlc3Ryb3lSZWYsXG4gIERpcmVjdGl2ZSxcbiAgaW5qZWN0LFxuICBJbmplY3RvcixcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7XG4gIEJlaGF2aW9yU3ViamVjdCxcbiAgY2F0Y2hFcnJvcixcbiAgY29tYmluZUxhdGVzdCxcbiAgZGVib3VuY2VUaW1lLFxuICBmaWx0ZXIgYXMgcnhqc0ZpbHRlcixcbiAgbWFwLFxuICBPYnNlcnZhYmxlLFxuICBSZXBsYXlTdWJqZWN0LFxuICBTdWJzY3JpcHRpb24sXG4gIHN3aXRjaE1hcCxcbiAgdGFrZSxcbiAgdGFwLFxuICB0aHJvd0Vycm9yLFxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBTY2FsYXJVVUlEIH0gZnJvbSAnaGFzdXJhJztcbmltcG9ydCB7XG4gIEVSZWdpc3Rlck9iamVjdFN0YXRlLFxuICBJUmVnaXN0ZXJCYXNlLFxuICBJUmVnaXN0ZXJPYmplY3QsXG4gIElUcFVzZXJTZXR0aW5ncyxcbiAgSVRwVXNlclNldHRpbmdzU2V0dGluZ3NGaWx0ZXIsXG4gIE9iamVjdHNTdWJzY3JpcHRpb25Db25maWcsXG59IGZyb20gJy4uLy4uL3R5cGVzL3JlZ2lzdGVyLWJhc2UudHlwZXMnO1xuaW1wb3J0IHsgRmlsdGVyc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9maWx0ZXIvZmlsdGVycy5zZXJ2aWNlJztcbmltcG9ydCB7IEZpbHRlcnNTdGF0ZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9maWx0ZXIvZmlsdGVycy1zdGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IEZpbHRlcnNUcmFuc21pdFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9maWx0ZXIvZmlsdGVycy10cmFuc21pdC5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIFNFQVJDSF9JTlBVVF9ERUJPVU5DRV9USU1FX01MUyxcbiAgU0VUVElOR1NfVFlQRSxcbiAgVVNFUl9QUk9GSUxFX0xPQURFUixcbiAgVVNFUl9TRVRUSU5HU19MT0FERVIsXG59IGZyb20gJy4uLy4uL2NvbnN0cy9yZWdpc3Rlci1iYXNlLmNvbnN0cyc7XG5pbXBvcnQgeyBTZWxlY3RlZE9iamVjdHNTdGF0ZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zZWxlY3RlZC1vYmplY3RzLXN0YXRlLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgSUNvbHVtbkRhdGEsXG4gIElIYXN1cmFRdWVyeUZpbHRlcixcbiAgUmVnaXN0ZXJUYWJsZUNlbGxTb3J0ZXIsXG4gIFRoV2lkdGhFbnRyeSxcbn0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9yZWdpc3Rlci10YWJsZS9tb2RlbC9zY2hlbWEnO1xuaW1wb3J0IHsgRm9ybUdyb3VwV3JhcHBlciB9IGZyb20gJy4uL2Zvcm0tZ3JvdXAtd3JhcHBlci9mb3JtLWdyb3VwLXdyYXBwZXInO1xuaW1wb3J0IHsgRUlucHV0c0FjdGlvbiwgRUlucHV0c1N0YXRlLCBHcWxGaWVsZCwgR3FsRmllbGRzIH0gZnJvbSAnLi4vLi4vdHlwZXMvaW5wdXRzLnR5cGVzJztcbmltcG9ydCB7IGdldExhc3RTZWdtZW50T2ZQYXRoTmFtZSB9IGZyb20gJy4uLy4uL3V0aWxzL2dldC11cmwtc2VnbWVudCc7XG5pbXBvcnQgeyBJVXNlclByb2ZpbGUgfSBmcm9tICcuLi8uLi90eXBlcy91c2VyLXByb2ZpbGUudHlwZXMnO1xuaW1wb3J0IHtcbiAgQXBwbHlTZWxlY3Rpb25UeXBlcyxcbiAgU2VsZWN0aW9uVHlwZXMsXG59IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvY2hlY2tib3gtc2VsZWN0b3IvY2hlY2tib3gtc2VsZWN0b3IudHlwZXMnO1xuaW1wb3J0IHsgREVGQVVMVF9MSU1JVCB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2lucHV0cy1zdGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IGlzTm9uTnVsbCB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB7IElDb2x1bW5TZXR0aW5nc0NoYW5nZXMgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2NvbHVtbi1zZXR0aW5ncy90eXBlcy9jb2x1bW4tc2V0dGluZ3MudHlwZXMnO1xuaW1wb3J0IHsgUmVnaXN0ZXJCYXNlU3RvcmUgfSBmcm9tICcuL3JlZ2lzdGVyLWJhc2Uuc3RvcmUnO1xuXG5ARGlyZWN0aXZlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBSZWdpc3RlckJhc2U8VCBleHRlbmRzIElSZWdpc3RlckJhc2UsIEZvcm0gPSBhbnk+XG4gIGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3lcbntcbiAgLyoqINCh0LXRgNCy0LjRgdGLINGD0L/RgNCw0LLQu9C10L3QuNGPINGE0LjQu9GM0YLRgNCw0LzQuCAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZmlsdGVyc1NlcnZpY2UgPSBpbmplY3QoRmlsdGVyc1NlcnZpY2UpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc3RhdGVTZXJ2aWNlID0gaW5qZWN0KEZpbHRlcnNTdGF0ZVNlcnZpY2UpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgdHJhbnNtaXR0ZXIgPSBpbmplY3QoRmlsdGVyc1RyYW5zbWl0U2VydmljZSwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcbiAgLyoqINCh0LXRgNCy0LjRgSDRg9C/0YDQsNCy0LvQtdC90LjRjyDQv9C+0LvRjNC30L7QstCw0YLQtdC70LXQvCAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgdXNlclNlcnZpY2UgPSBpbmplY3QoVVNFUl9QUk9GSUxFX0xPQURFUik7XG4gIC8qKiDQodC10YDQstC40YEg0YPQv9GA0LDQstC70LXQvdC40Y8g0LTQsNC90L3Ri9C80Lgg0LIg0YDQtdC10YHRgtGA0LUgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGJhc2VTdG9yZSA9IGluamVjdChSZWdpc3RlckJhc2VTdG9yZTxUPiwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcbiAgLy8gVE9ETyDRg9C00LDQu9C40YLRjCBvcHRpb25hbDogdHJ1ZSDQv9C+0YHQu9C1INCy0YvQv9C+0LvQvdC10L3QuNGPINC30LDQtNCw0YfQuCBTTUEyLTMxMzRcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHNlbGVjdGVkU2VydmljZSA9IGluamVjdChTZWxlY3RlZE9iamVjdHNTdGF0ZVNlcnZpY2U8VD4sIHtcbiAgICBvcHRpb25hbDogdHJ1ZSxcbiAgfSk7XG4gIC8vIFRPRE8gcHJvdGVjdGVkIHJlYWRvbmx5IG5hdmlnYXRpb25TZXJ2aWNlID0gaW5qZWN0KE5hdmlnYXRpb25TZXJ2aWNlKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgY2RyID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBzZXR0aW5nc1NlcnZpY2UgPSBpbmplY3QoVVNFUl9TRVRUSU5HU19MT0FERVIpO1xuXG4gIHB1YmxpYyByZWFkb25seSBmaWx0ZXJBcHBsaWVkJDogT2JzZXJ2YWJsZTxib29sZWFuPiA9IHRoaXMuc3RhdGVTZXJ2aWNlLmdxbFZhbHVlcyQucGlwZShcbiAgICBtYXAoKGZpbHRlcikgPT4gTnVtYmVyKGZpbHRlci5sZW5ndGgpID4gMClcbiAgKTtcbiAgcHVibGljIHJlYWRvbmx5IHBhZ2UkID0gdGhpcy5zdGF0ZVNlcnZpY2UucGFnZSQ7XG4gIHB1YmxpYyByZWFkb25seSBsaW1pdCQgPSB0aGlzLnN0YXRlU2VydmljZS5saW1pdCQ7XG4gIHB1YmxpYyByZWFkb25seSBzZWxlY3RlZFJlY29yZHNMb2FkaW5nJCA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuXG4gIHB1YmxpYyBjb2x1bW5zRGF0YTogSUNvbHVtbkRhdGFbXTtcbiAgcHVibGljIGNvbHVtbnM6IHN0cmluZ1tdO1xuICBwdWJsaWMgZGF0YTogVFtdID0gW107XG4gIHB1YmxpYyB2aXNpYmxlRGF0YTogVFtdID0gW107XG4gIHB1YmxpYyBkYXRhQ291bnQgPSAwO1xuICAvKiogQGRlcHJlY2F0ZWQg0JjRgdC/0L7Qu9GM0LfRg9C50YLQtSBzZWxlY3RlZE9iamVjdHNGcm9tU3RhdGUgKi9cbiAgcHVibGljIHNlbGVjdGVkT2JqZWN0cyA9IG5ldyBTZXQ8YW55PigpO1xuICAvKiogQGRlcHJlY2F0ZWQg0JjRgdC/0L7Qu9GM0LfRg9C50YLQtSBzZWxlY3RlZElkc0Zyb21TdGF0ZSAqL1xuICBwdWJsaWMgc2VsZWN0ZWRJZHMgPSBuZXcgU2V0PFNjYWxhclVVSUQ+KCk7XG4gIHB1YmxpYyBfdXNlciA9IHRoaXMudXNlclNlcnZpY2UuZ2V0VXNlclByb2ZpbGUoKTtcbiAgcHVibGljIHN0aWNreUxlZnRJZHM6IHN0cmluZ1tdID0gW107XG4gIHB1YmxpYyBzdGlja3lSaWdodElkczogc3RyaW5nW10gPSBbXTtcbiAgcHVibGljIGN1cnJlbnRGaWx0ZXI6IElIYXN1cmFRdWVyeUZpbHRlcjxUPiB8IG51bGwgPSBudWxsO1xuICAvKipcbiAgICog0KTQvtGA0LzQsCDRhNC40LvRjNGC0YDQvtCyXG4gICAqL1xuICBwcm90ZWN0ZWQgZmlsdGVyc0Zvcm0hOiBGb3JtR3JvdXBXcmFwcGVyPEZvcm0+O1xuICBwcm90ZWN0ZWQgZmlsdGVyU3RhdGU6IElUcFVzZXJTZXR0aW5nc1NldHRpbmdzRmlsdGVyW10gPSBbXTtcblxuICBwcml2YXRlIF9saW1pdCE6IG51bWJlcjtcbiAgcHJpdmF0ZSBfb2Zmc2V0ITogbnVtYmVyO1xuICBwcml2YXRlIF9maWx0ZXJTdGF0ZSE6IEdxbEZpZWxkcztcbiAgcHJpdmF0ZSBfbW9kdWxlUGF0aCA9IGdldExhc3RTZWdtZW50T2ZQYXRoTmFtZSh0aGlzLnJvdXRlci51cmwpO1xuICBwcml2YXRlIF9kZWZhdWx0RmlsdGVyQXBwbGllZCQgPSBuZXcgUmVwbGF5U3ViamVjdDxib29sZWFuPigpO1xuICAvKipcbiAgICog0JLRgdC10LPQviDQt9Cw0L/QuNGB0LXQuSwg0LHQtdC3INGD0YfQtdGC0LAg0YTQuNC70YzRgtGA0LBcbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCB0b3RhbE5vdEZpbHRlcmVkJDogT2JzZXJ2YWJsZTxudW1iZXI+O1xuICAvKipcbiAgICog0JzQsNGA0YjRgNGD0YLRiyDQtNC70Y8g0LHRgNC10LTQutGA0LDQvNCx0LBcbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCByb3V0ZXM6IGFueVtdO1xuICAvKipcbiAgICog0JrQvtC90YLRgNC+0Lsg0YHRgtGA0L7QutC4INC/0L7QuNGB0LrQsFxuICAgKi9cbiAgcHVibGljIHNlYXJjaElucHV0ID0gdGhpcy5maWx0ZXJzU2VydmljZS5zZWFyY2hJbnB1dCE7XG4gIC8qKlxuICAgKiDQlNC10LnRgdGC0LLQuNC1INC30LDQstC10YDRiNC10L3QvlxuICAgKi9cbiAgcHVibGljIGFic3RyYWN0IGFjdGlvbkNvbXBsZXRlZCQ6IFJlcGxheVN1YmplY3Q8Ym9vbGVhbj47XG4gIC8qKlxuICAgKiDQn9C+0LvRg9GH0LXQvdC40LUg0L7QsdGJ0LXQs9C+INC60L7Qu9C40YfQtdGB0YLQstCwINC30LDQv9C40YHQtdC5XG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgZmV0Y2hUb3RhbE9iamVjdHM6IChcbiAgICBvYnNlcnZhYmxlT3JWYWx1ZTogUmVjb3JkPHN0cmluZywgYW55PiB8IE9ic2VydmFibGU8UmVjb3JkPHN0cmluZywgYW55Pj5cbiAgKSA9PiBTdWJzY3JpcHRpb247XG4gIC8qKlxuICAgKiDQl9Cw0L/RgNC+0YEg0L3QsCDQutC+0LvQuNGH0LXRgdGC0LLQviDQvtGC0YTQuNC70YzRgtGA0L7QstCw0L3QvdGL0YUg0LfQsNC/0LjRgdC10LlcbiAgICovXG4gIHB1YmxpYyBmZXRjaFRvdGFsRmlsdGVyZWRPYmplY3RzOlxuICAgIHwgKChvYnNlcnZhYmxlT3JWYWx1ZTogUmVjb3JkPHN0cmluZywgYW55PiB8IE9ic2VydmFibGU8UmVjb3JkPHN0cmluZywgYW55Pj4pID0+IFN1YnNjcmlwdGlvbilcbiAgICB8IHVuZGVmaW5lZDtcbiAgLyoqXG4gICAqINCf0L7QtNC/0LjRgdC60LAg0L3QsCDQv9C+0LvRg9GH0LXQvdC40LUg0LLRgdC10YUg0L7QsdGK0LXQutGC0L7QsiDQuCDRgSDQvtCx0YDQsNGC0L3Ri9C8INCy0YvQt9C+0LLQvtC8XG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3Qgb2JqZWN0c1N1YnNjcmlwdGlvbjogKFxuICAgIG9ic2VydmFibGVPclZhbHVlOiBPYmplY3RzU3Vic2NyaXB0aW9uQ29uZmlnPFQ+IHwgT2JzZXJ2YWJsZTxPYmplY3RzU3Vic2NyaXB0aW9uQ29uZmlnPFQ+PlxuICApID0+IFN1YnNjcmlwdGlvbjtcbiAgLyoqXG4gICAqINCR0LDQt9C+0LLRi9C5INGE0LjQu9GM0YLRgCwg0L/QviDRg9C80L7Qu9GH0LDQvdC40Y5cbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCBiYXNlRmlsdGVyOiAodXNlcjogSVVzZXJQcm9maWxlIHwgdW5kZWZpbmVkKSA9PiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuXG4gIC8qKlxuICAgKiDQodCx0L7RgNC60LAg0YTQuNC70YzRgtGA0LBcbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCBidWlsZEZpbHRlcihcbiAgICBsaW1pdD86IG51bWJlcixcbiAgICBvZmZzZXQ/OiBudW1iZXIsXG4gICAgZ3FsRmlsdGVyPzogR3FsRmllbGRzLFxuICAgIHVzZXI/OiBJVXNlclByb2ZpbGUsXG4gICAgc29ydGVyPzogUmVnaXN0ZXJUYWJsZUNlbGxTb3J0ZXI8VD5bXVxuICApOiBhbnk7XG5cbiAgLyoqXG4gICAqINCh0LHQvtGA0LrQsCDRhNC40LvRjNGC0YDQvtCyINGA0LXQtdGB0YLRgNCwXG4gICAqL1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgZ2V0IGJ1aWxkRm9ybSgpOiBGb3JtR3JvdXBXcmFwcGVyPEZvcm0+O1xuXG4gIHB1YmxpYyBnZXQgbGltaXQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fbGltaXQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0IG9mZnNldCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9vZmZzZXQ7XG4gIH1cblxuICAvKiogVXVpZCfRiyDQstGB0LXRhSDQstGL0LHRgNCw0L3QvdGL0YUg0LjQu9C4INC40YHQutC70Y7Rh9Cw0LXQvNGL0YUg0L7QsdGK0LXQutGC0L7QsiDRgNC10LXRgdGC0YDQsCAo0LfQsNCy0LjRgdC40YIg0L7RgiDRgdC+0YHRgtC+0Y/QvdC40Y8g0LXRidC1INC90LUg0LfQsNCz0YDRg9C20LXQvdC90YvRhSDQvtCx0YrQtdC60YLQvtCyKSAqL1xuICBwdWJsaWMgZ2V0IGlkc0Zyb21TdGF0ZSgpOiBTZXQ8U2NhbGFyVVVJRD4ge1xuICAgIGNvbnN0IHNlcnZpY2U6IFNlbGVjdGVkT2JqZWN0c1N0YXRlU2VydmljZTxUPiB8IG51bGwgPSB0aGlzLnNlbGVjdGVkU2VydmljZTtcblxuICAgIGlmICghc2VydmljZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTZWxlY3RlZE9iamVjdHNTdGF0ZVNlcnZpY2Ug0L3QtSDQt9Cw0L/RgNC+0LLQsNC50LbQtdC9Jyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNlcnZpY2Uua2V5cygpO1xuICB9XG5cbiAgLyoqINCS0YHQtSDQstGL0LHRgNCw0L3QvdGL0LUgdXVpZCfRiyDRgNC10LXRgdGC0YDQsCAqL1xuICBwdWJsaWMgZ2V0IHNlbGVjdGVkSWRzRnJvbVN0YXRlKCk6IFNldDxTY2FsYXJVVUlEPiB7XG4gICAgY29uc3Qgc2VydmljZTogU2VsZWN0ZWRPYmplY3RzU3RhdGVTZXJ2aWNlPFQ+IHwgbnVsbCA9IHRoaXMuc2VsZWN0ZWRTZXJ2aWNlO1xuXG4gICAgaWYgKCFzZXJ2aWNlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NlbGVjdGVkT2JqZWN0c1N0YXRlU2VydmljZSDQvdC1INC30LDQv9GA0L7QstCw0LnQttC10L0nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2VydmljZS5zZWxlY3RlZEtleXMoKTtcbiAgfVxuXG4gIC8qKiDQktGB0LUg0LLRi9Cx0YDQsNC90L3Ri9C1INC+0LHRitC10LrRgtGLINGA0LXQtdGB0YLRgNCwICovXG4gIHB1YmxpYyBnZXQgc2VsZWN0ZWRPYmplY3RzRnJvbVN0YXRlKCk6IFNldDxUPiB7XG4gICAgY29uc3Qgc2VydmljZTogU2VsZWN0ZWRPYmplY3RzU3RhdGVTZXJ2aWNlPFQ+IHwgbnVsbCA9IHRoaXMuc2VsZWN0ZWRTZXJ2aWNlO1xuXG4gICAgaWYgKCFzZXJ2aWNlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NlbGVjdGVkT2JqZWN0c1N0YXRlU2VydmljZSDQvdC1INC30LDQv9GA0L7QstCw0LnQttC10L0nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2VydmljZS5zZWxlY3RlZFZhbHVlcygpO1xuICB9XG5cbiAgcHJpdmF0ZSBfY29sdW1uc1NldHRpbmdzOiBJVHBVc2VyU2V0dGluZ3MgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgX3BhZ2VSb3dzTGltaXRTZXR0aW5nOiBJVHBVc2VyU2V0dGluZ3MgfCB1bmRlZmluZWQ7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfZGVmYXVsdENvbHVtbnNXaWR0aHM6IE1hcDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD47XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfc2VsZWN0aW9uVHlwZSQgPVxuICAgIHRoaXMuc2VsZWN0ZWRTZXJ2aWNlPy5zZWxlY3Rpb25UeXBlJCA/PyBuZXcgQmVoYXZpb3JTdWJqZWN0PEFwcGx5U2VsZWN0aW9uVHlwZXM+KG51bGwpO1xuXG4gIHB1YmxpYyByZWFkb25seSBzdGF0ZU9iamVjdHMgPSB0aGlzLnNlbGVjdGVkU2VydmljZT8uc3RhdGU7XG5cbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCByZWFkb25seSBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgY29sdW1uc0RhdGE6IElDb2x1bW5EYXRhW10sXG4gICAgaXNNdWx0aUhlYWQ6IGJvb2xlYW4gPSBmYWxzZVxuICApIHtcbiAgICB0aGlzLmNvbHVtbnNEYXRhID0gY29sdW1uc0RhdGE7XG4gICAgdGhpcy5fZGVmYXVsdENvbHVtbnNXaWR0aHMgPSBuZXcgTWFwKGNvbHVtbnNEYXRhLm1hcCgoY29sKSA9PiBbY29sLm5hbWUsIGNvbC53aWR0aF0pKTtcbiAgICB0aGlzLmNvbHVtbnMgPSBpc011bHRpSGVhZFxuICAgICAgPyBjb2x1bW5zRGF0YS5mbGF0TWFwKChjZCkgPT4gdGhpcy5fYnVpbGRDaGlsZGZyZWVDb2x1bW5EYXRhKGNkKSlcbiAgICAgIDogY29sdW1uc0RhdGEubWFwKChjZCkgPT4gY2QubmFtZSk7XG4gICAgdGhpcy5fc3Vic2NyaWJlT25TZXR0aW5ncygpO1xuICAgIHRoaXMuX2ZldGNoU2F2ZWRQYWdlUm93c0xpbWl0KCk7XG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLnJvdXRlci5nZXRDdXJyZW50TmF2aWdhdGlvbigpPy5leHRyYXM/LnN0YXRlO1xuICAgIGlmIChzdGF0ZSkge1xuICAgICAgdGhpcy5maWx0ZXJTdGF0ZSA9IHRoaXMucGFyc2VUb0ZpbHRlcnMoc3RhdGUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3N1YnNjcmliZU9uU2V0dGluZ3MoKTogdm9pZCB7XG4gICAgdGhpcy5zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3MkXG4gICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSlcbiAgICAgIC5zdWJzY3JpYmUoKFt1c2VyU2V0dGluZ10pID0+IHtcbiAgICAgICAgY29uc3QgeyB0YWJsZUNvbHVtbnNXaWR0aCB9ID0gdXNlclNldHRpbmc/LnNldHRpbmdzID8/IHt9O1xuICAgICAgICBjb25zdCB0eXBlID0gdXNlclNldHRpbmc/LnNldHRpbmdzX3R5cGU7XG5cbiAgICAgICAgaWYgKHR5cGUgJiYgdHlwZSAhPT0gU0VUVElOR1NfVFlQRS5DT0xVTU5TKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY2xlYW5lZEN1cnJlbnQgPSB0aGlzLl9vbWl0VW5kZWZpbmVkKFxuICAgICAgICAgIHRoaXMuX2NvbHVtbnNTZXR0aW5ncz8uc2V0dGluZ3MudGFibGVDb2x1bW5zV2lkdGhcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgY2xlYW5lZE5ldyA9IHRoaXMuX29taXRVbmRlZmluZWQodGFibGVDb2x1bW5zV2lkdGgpO1xuXG4gICAgICAgIGlmICghXy5pc0VxdWFsKGNsZWFuZWRDdXJyZW50LCBjbGVhbmVkTmV3KSkge1xuICAgICAgICAgIHRoaXMuX3NldENvbHVtbnNXaWR0aCh0YWJsZUNvbHVtbnNXaWR0aCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jb2x1bW5zU2V0dGluZ3MgPSB1c2VyU2V0dGluZztcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfb21pdFVuZGVmaW5lZChhcnI6IFRoV2lkdGhFbnRyeVtdIHwgdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIF8ubWFwKGFyciA/PyBbXSwgKG9iaikgPT4gXy5vbWl0Qnkob2JqLCBfLmlzVW5kZWZpbmVkKSk7XG4gIH1cblxuICBwcml2YXRlIF9zZXRDb2x1bW5zV2lkdGgoY29sdW1uc1dpZHRoOiBUaFdpZHRoRW50cnlbXSB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICAgIGNvbnN0IHRoc1dpZHRoTWFwID0gbmV3IE1hcChjb2x1bW5zV2lkdGg/Lm1hcCgoeyBuYW1lLCB3aWR0aCB9KSA9PiBbbmFtZSwgd2lkdGhdKSk7XG5cbiAgICB0aGlzLmNvbHVtbnNEYXRhID0gdGhpcy5jb2x1bW5zRGF0YS5tYXAoKGNvbCkgPT4ge1xuICAgICAgY29uc3QgZGVmYXVsdFdpZHRoID0gdGhpcy5fZGVmYXVsdENvbHVtbnNXaWR0aHMuZ2V0KGNvbC5uYW1lKSE7XG4gICAgICBjb25zdCBjdXJyZW50V2lkdGggPSB0aHNXaWR0aE1hcC5oYXMoY29sLm5hbWUpID8gdGhzV2lkdGhNYXAuZ2V0KGNvbC5uYW1lKSA6IG51bGw7XG5cbiAgICAgIGNvbnN0IHdpZHRoID0gY3VycmVudFdpZHRoID09PSBudWxsID8gZGVmYXVsdFdpZHRoIDogY3VycmVudFdpZHRoO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5jb2wsXG4gICAgICAgIHdpZHRoLFxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX2ZldGNoU2F2ZWRQYWdlUm93c0xpbWl0KCk6IHZvaWQge1xuICAgIHRoaXMuc2V0dGluZ3NTZXJ2aWNlXG4gICAgICAuZmV0Y2hVc2VyU2V0dGluZ3MkKFxuICAgICAgICB7XG4gICAgICAgICAgaWRfdXNlcjoge1xuICAgICAgICAgICAgX2VxOiB0aGlzLl91c2VyLmlkLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgc2V0dGluZ3NfdHlwZToge1xuICAgICAgICAgICAgX2VxOiBTRVRUSU5HU19UWVBFLlJFR0lTVEVSX1BBR0VfUk9XU19MSU1JVCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIG1vZHVsZV9uYW1lOiB7XG4gICAgICAgICAgICBfZXE6IHRoaXMuX21vZHVsZVBhdGgsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgdHJ1ZVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoW2ZpcnN0U2V0dGluZ10pID0+IHtcbiAgICAgICAgdGhpcy5fcGFnZVJvd3NMaW1pdFNldHRpbmcgPSBmaXJzdFNldHRpbmc7XG4gICAgICAgIGNvbnN0IHsgcGFnZVJvd3NMaW1pdCB9ID0gZmlyc3RTZXR0aW5nPy5zZXR0aW5ncyA/PyB7fTtcblxuICAgICAgICB0aGlzLnN0YXRlU2VydmljZS5zZXRMaW1pdChwYWdlUm93c0xpbWl0ID8/IERFRkFVTFRfTElNSVQpO1xuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5maWx0ZXJzRm9ybSA9IHRoaXMuYnVpbGRGb3JtO1xuICAgIHRoaXMuZmlsdGVyc1NlcnZpY2UuaW5pdCh0aGlzLmZpbHRlcnNGb3JtKTtcbiAgICB0aGlzLnN0YXRlU2VydmljZS5zZXRTdGF0ZSh7IHN0YXRlOiBFSW5wdXRzU3RhdGUuSElEREVOLCBhY3Rpb246IEVJbnB1dHNBY3Rpb24uT1BFTiB9KTtcblxuICAgIHRoaXMuZmV0Y2hUb3RhbE9iamVjdHModGhpcy5iYXNlRmlsdGVyKHRoaXMuX3VzZXIpKTtcbiAgICB0aGlzLl9zdWJzY3JpYmVPbk11dGF0aW9uQ29tcGxldGVkKCk7XG4gICAgdGhpcy5zdWJzY3JpYmVPblBhZ2luZygpO1xuXG4gICAgLy8gVE9ETyDQv9GA0L7QstC10YDQuNGC0Ywg0L3Rg9C20L3QsCDQu9C4INCf0LXRgNC10LfQsNCz0YDRg9C30LrQsCDRgdGC0YDQsNC90LjRhtGLXG4gICAgLy8gaWYgKHRoaXMubmF2aWdhdGlvblNlcnZpY2UucHJldmlvdXNVcmwgPT09IG51bGwpIHtcbiAgICAvLyAgIHRoaXMuc3RhdGVTZXJ2aWNlLnNldE9mZnNldCgwKTtcbiAgICAvLyAgIHRoaXMuc3RhdGVTZXJ2aWNlLnNldFBhZ2UoMSk7XG4gICAgLy8gfVxuXG4gICAgdGhpcy5iYXNlU3RvcmU/LmNvdW50JD8uc3Vic2NyaWJlKChjb3VudCkgPT4ge1xuICAgICAgdGhpcy5kYXRhQ291bnQgPSBjb3VudDtcbiAgICAgIHRoaXMuc3RhdGVTZXJ2aWNlLnNldENvdW50KGNvdW50KTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoc2VhcmNoTGltaXRlciA9IDIpOiB2b2lkIHtcbiAgICB0aGlzLl9zZXRGaWx0ZXJzKCk7XG4gICAgdGhpcy5zdWJzY3JpYmVPblNlYXJjaENoYW5nZXMoc2VhcmNoTGltaXRlcik7XG4gIH1cblxuICBwcml2YXRlIF9zZXRGaWx0ZXJzKCk6IHZvaWQge1xuICAgIGNvbnN0IHF1ZXJ5RmlsdGVycyA9IHRoaXMudHJhbnNtaXR0ZXI/LmZpbHRlcnM7XG4gICAgY29uc3QgcXVlcnlTZWFyY2ggPSB0aGlzLnRyYW5zbWl0dGVyPy5zZWFyY2g7XG4gICAgbGV0IGZpbHRlcnM6IElUcFVzZXJTZXR0aW5nc1NldHRpbmdzRmlsdGVyW10gfCB1bmRlZmluZWQ7XG5cbiAgICBpZiAocXVlcnlTZWFyY2gpIHtcbiAgICAgIHRoaXMuc2VhcmNoSW5wdXQuc2V0VmFsdWUocXVlcnlTZWFyY2gpO1xuICAgIH1cblxuICAgIGlmICghcXVlcnlGaWx0ZXJzIHx8IHF1ZXJ5RmlsdGVycy5sZW5ndGggPiAwKSB7XG4gICAgICBmaWx0ZXJzID0gcXVlcnlGaWx0ZXJzIHx8IFtdO1xuICAgIH1cblxuICAgIHRoaXMuYXBwbHlCYXNlRmlsdGVyKCk7XG4gICAgdGhpcy5faW5pdERlZmF1bHRGaWx0ZXIoZmlsdGVycyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXBwbHlCYXNlRmlsdGVyKF9kYXRhPzogYW55KTogdm9pZCB7fVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmFjdGlvbkNvbXBsZXRlZCQuY29tcGxldGUoKTtcbiAgICB0aGlzLnNlbGVjdGVkUmVjb3Jkc0xvYWRpbmckLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5maWx0ZXJzU2VydmljZS5jbGVhcigpO1xuICAgIHRoaXMuc3RhdGVTZXJ2aWNlLnNldE9mZnNldCgwKTtcbiAgICB0aGlzLnN0YXRlU2VydmljZS5zZXRHcWxWYWx1ZXMoe30pO1xuXG4gICAgaWYgKHRoaXMuc2VhcmNoSW5wdXQ/LnZhbHVlKSB7XG4gICAgICB0aGlzLnN0YXRlU2VydmljZS5zZXRTZWFyY2hGaWx0ZXJWYWx1ZSgnJyk7XG4gICAgICB0aGlzLnN0YXRlU2VydmljZS5zZXRHcWxWYWx1ZXModGhpcy5maWx0ZXJzU2VydmljZS5ncWxGaWx0ZXIpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBhcHBseUZpbHRlcnMoZmlsdGVyczogSVRwVXNlclNldHRpbmdzU2V0dGluZ3NGaWx0ZXJbXSk6IHZvaWQge1xuICAgIHRoaXMuZmlsdGVyc1NlcnZpY2Uuc2V0VXNlclNldHRpbmdzRmlsdGVyVmFsdWVzKGZpbHRlcnMpO1xuICAgIHRoaXMuc3RhdGVTZXJ2aWNlLnNldEdxbFZhbHVlcyh0aGlzLmZpbHRlcnNTZXJ2aWNlLmdxbEZpbHRlcik7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2V0RGF0YShkYXRhOiBUW10sIGNvdW50PzogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5kYXRhID0gZGF0YTtcblxuICAgIGlmIChjb3VudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmRhdGFDb3VudCA9IGNvdW50O1xuICAgICAgdGhpcy5zdGF0ZVNlcnZpY2Uuc2V0Q291bnQoY291bnQpO1xuICAgIH1cblxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHVwZGF0ZUFsbFN0YXRlT2JqZWN0c0J5U3RhdGUoc3RhdGU6IEVSZWdpc3Rlck9iamVjdFN0YXRlKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZFNlcnZpY2U/LnNldEFsbFN0YXRlT2JqZWN0c0J5U3RhdGUoc3RhdGUpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHVwZGF0ZVN0YXRlT2JqZWN0QnlLZXkoa2V5OiBTY2FsYXJVVUlELCB1cGRhdGVzOiBQYXJ0aWFsPElSZWdpc3Rlck9iamVjdDxUPj4pOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkU2VydmljZT8uc2V0U3RhdGVPYmplY3RCeUtleShrZXksIHVwZGF0ZXMpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNsZWFyU2VsZWN0aW9ucygpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkSWRzLmNsZWFyKCk7XG4gICAgdGhpcy5zZWxlY3RlZE9iamVjdHMuY2xlYXIoKTtcblxuICAgIGlmICh0aGlzLnNlbGVjdGVkU2VydmljZSkge1xuICAgICAgdGhpcy5zZWxlY3RlZFNlcnZpY2U/LnJlc2V0U3RhdGUodGhpcy5kYXRhKTtcbiAgICAgIHRoaXMuYnVpbGRBY3Rpb25zKHtcbiAgICAgICAgcm93OiBbXSxcbiAgICAgICAgY291bnQ6IDAsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgYWN0aW9uQ29tcGxldGVkKCk6IHZvaWQge1xuICAgIGNvbnN0IGZpbHRlciA9IHRoaXMuYnVpbGRGaWx0ZXIodGhpcy5saW1pdCwgdGhpcy5vZmZzZXQsIHRoaXMuX2ZpbHRlclN0YXRlLCB0aGlzLl91c2VyKTtcbiAgICB0aGlzLmN1cnJlbnRGaWx0ZXIgPSBmaWx0ZXI7XG5cbiAgICB0aGlzLm9iamVjdHNTdWJzY3JpcHRpb24oeyBmaWx0ZXIgfSk7XG4gICAgdGhpcy5jbGVhclNlbGVjdGlvbnMoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBidWlsZEFjdGlvbnMoX2RhdGE6IHsgcm93OiBUW107IGNvdW50OiBudW1iZXIgfSk6IHZvaWQge31cblxuICBwcm90ZWN0ZWQgc3Vic2NyaWJlT25TZWFyY2hDaGFuZ2VzKGxpbWl0ZXI6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuc2VhcmNoSW5wdXQ/LnZhbHVlQ2hhbmdlc1xuICAgICAgLnBpcGUoXG4gICAgICAgIHJ4anNGaWx0ZXIoKHZhbHVlKSA9PiAhdmFsdWUgfHwgdmFsdWUubGVuZ3RoID4gbGltaXRlciksXG4gICAgICAgIGRlYm91bmNlVGltZShTRUFSQ0hfSU5QVVRfREVCT1VOQ0VfVElNRV9NTFMpLFxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuc3RhdGVTZXJ2aWNlLnNldEdxbFZhbHVlcyh0aGlzLmZpbHRlcnNTZXJ2aWNlLmdxbEZpbHRlcik7XG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVSZWdpc3RlcigpOiB2b2lkIHtcbiAgICB0aGlzLnN0YXRlU2VydmljZS5zZXRMaW1pdCh0aGlzLnN0YXRlU2VydmljZS5saW1pdCk7XG4gIH1cblxuICBwdWJsaWMgc3Vic2NyaWJlT25QYWdpbmcoKTogdm9pZCB7XG4gICAgdGhpcy5fZGVmYXVsdEZpbHRlckFwcGxpZWQkXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+XG4gICAgICAgICAgY29tYmluZUxhdGVzdChbXG4gICAgICAgICAgICB0aGlzLnN0YXRlU2VydmljZS5saW1pdCQucGlwZShyeGpzRmlsdGVyKGlzTm9uTnVsbCkpLFxuICAgICAgICAgICAgdGhpcy5zdGF0ZVNlcnZpY2Uub2Zmc2V0JCxcbiAgICAgICAgICAgIHRoaXMuc3RhdGVTZXJ2aWNlLmdxbFZhbHVlcyQucGlwZShcbiAgICAgICAgICAgICAgdGFwKChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKE51bWJlcihkYXRhLmxlbmd0aCkgPiAwKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdENoYW5nZWQobnVsbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHRoaXMuc3RhdGVTZXJ2aWNlLnNvcnRlciQsXG4gICAgICAgICAgXSkucGlwZShkZWJvdW5jZVRpbWUoMjUwKSlcbiAgICAgICAgKSxcbiAgICAgICAgY2F0Y2hFcnJvcigoZSkgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ3BhZ2luYXRpb24nLCBlKTtcblxuICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IG5ldyBFcnJvcihlKSk7XG4gICAgICAgIH0pLFxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoW2xpbWl0LCBvZmZzZXQsIGdxbEZpbHRlciwgc29ydGVyXSkgPT4ge1xuICAgICAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLmJ1aWxkRmlsdGVyKGxpbWl0LCBvZmZzZXQsIGdxbEZpbHRlciwgdGhpcy5fdXNlciwgc29ydGVyKTtcbiAgICAgICAgY29uc3QgZ3FsRmlsdGVyVXBkYXRlZCA9ICFfLmlzRXF1YWwodGhpcy5fZmlsdGVyU3RhdGUsIGdxbEZpbHRlcik7XG4gICAgICAgIHRoaXMuY3VycmVudEZpbHRlciA9IGZpbHRlcjtcbiAgICAgICAgdGhpcy5fZmlsdGVyU3RhdGUgPSBncWxGaWx0ZXI7XG4gICAgICAgIHRoaXMuX2xpbWl0ID0gbGltaXQ7XG4gICAgICAgIHRoaXMuX29mZnNldCA9IG9mZnNldDtcbiAgICAgICAgaWYgKHRoaXMuc3RhdGVPYmplY3RzKSB7XG4gICAgICAgICAgaWYgKGdxbEZpbHRlclVwZGF0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTZXJ2aWNlPy5yZXNldFN0YXRlKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5vYmplY3RzU3Vic2NyaXB0aW9uKHsgZmlsdGVyLCBjYWxsYmFjazogdGhpcy5fc2V0U3RhdGVPYmplY3RzLmJpbmQodGhpcykgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5vYmplY3RzU3Vic2NyaXB0aW9uKHsgZmlsdGVyIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZmV0Y2hUb3RhbEZpbHRlcmVkT2JqZWN0cz8uKGZpbHRlci53aGVyZSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX3NldFN0YXRlT2JqZWN0cyhkYXRhOiBUW10pOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkU2VydmljZT8ubG9hZFN0YXRlT2JqZWN0cyhkYXRhKTtcbiAgfVxuXG4gIHB1YmxpYyBzZWxlY3RDaGFuZ2VkKHZhbHVlOiBBcHBseVNlbGVjdGlvblR5cGVzKTogdm9pZCB7XG4gICAgdGhpcy5fc2VsZWN0aW9uVHlwZSQubmV4dCh2YWx1ZSk7XG5cbiAgICBjb25zdCBzdGF0ZU9iamVjdHMgPSB0aGlzLnN0YXRlT2JqZWN0cztcblxuICAgIGlmIChzdGF0ZU9iamVjdHMpIHtcbiAgICAgIHRoaXMuX2NoYW5nZVN0YXRlT2JqZWN0cyhzdGF0ZU9iamVjdHMoKSwgdmFsdWUpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZmlsdGVyID0gdGhpcy5fc2VsZWN0Q2hhbmdlZEZpbHRlcih2YWx1ZSk7XG4gICAgdGhpcy5jdXJyZW50RmlsdGVyID0gZmlsdGVyO1xuXG4gICAgdGhpcy5idWlsZEFjdGlvbnMoe1xuICAgICAgcm93OiBbLi4uKHRoaXMuc2VsZWN0ZWRPYmplY3RzID8/IFtdKV0sXG4gICAgICBjb3VudDogdGhpcy5zZWxlY3RlZE9iamVjdHMgPyB0aGlzLnNlbGVjdGVkT2JqZWN0cy5zaXplIDogMCxcbiAgICB9KTtcblxuICAgIGlmICghZmlsdGVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zZWxlY3RlZFJlY29yZHNMb2FkaW5nJC5uZXh0KHRydWUpO1xuICAgIHRoaXMub2JqZWN0c1N1YnNjcmlwdGlvbih7XG4gICAgICBmaWx0ZXIsXG4gICAgICBjYWxsYmFjazogdGhpcy5fc2V0U2VsZWN0ZWQuYmluZCh0aGlzKSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX2NoYW5nZVN0YXRlT2JqZWN0cyhcbiAgICBzdGF0ZU9iamVjdHM6IE1hcDxTY2FsYXJVVUlELCBJUmVnaXN0ZXJPYmplY3Q8VD4+LFxuICAgIHZhbHVlOiBBcHBseVNlbGVjdGlvblR5cGVzXG4gICk6IHZvaWQge1xuICAgIGlmICh2YWx1ZSA9PT0gU2VsZWN0aW9uVHlwZXMuQUxMKSB7XG4gICAgICB0aGlzLnVwZGF0ZUFsbFN0YXRlT2JqZWN0c0J5U3RhdGUoRVJlZ2lzdGVyT2JqZWN0U3RhdGUuU0VMRUNURUQpO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IFNlbGVjdGlvblR5cGVzLklOVkVSU0UpIHtcbiAgICAgIHRoaXMuX2ludmVyc2VTdGF0ZU9iamVjdHMoc3RhdGVPYmplY3RzKTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlID09PSBTZWxlY3Rpb25UeXBlcy5WSVNJQkxFKSB7XG4gICAgICB0aGlzLl9zZWxlY3RWaXNpYmxlU3RhdGVPYmplY3RzKCk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICB0aGlzLl9zZWxlY3RGaXJzdE5TdGF0ZU9iamVjdHModmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNsZWFyU2VsZWN0aW9ucygpO1xuICAgIH1cblxuICAgIHRoaXMuYnVpbGRBY3Rpb25zKHtcbiAgICAgIHJvdzogWy4uLnRoaXMuc2VsZWN0ZWRPYmplY3RzRnJvbVN0YXRlXSxcbiAgICAgIGNvdW50OiB0aGlzLnNlbGVjdGVkT2JqZWN0c0Zyb21TdGF0ZS5zaXplLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfaW52ZXJzZVN0YXRlT2JqZWN0cyhzdGF0ZU9iamVjdHM6IE1hcDxTY2FsYXJVVUlELCBJUmVnaXN0ZXJPYmplY3Q8VD4+KTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBba2V5LCB7IHN0YXRlIH1dIG9mIHN0YXRlT2JqZWN0cykge1xuICAgICAgY29uc3QgaW52ZXJzZVN0YXRlID1cbiAgICAgICAgc3RhdGUgPT09IEVSZWdpc3Rlck9iamVjdFN0YXRlLlNFTEVDVEVEXG4gICAgICAgICAgPyBFUmVnaXN0ZXJPYmplY3RTdGF0ZS5VTlNFTEVDVEVEXG4gICAgICAgICAgOiBFUmVnaXN0ZXJPYmplY3RTdGF0ZS5TRUxFQ1RFRDtcblxuICAgICAgdGhpcy51cGRhdGVTdGF0ZU9iamVjdEJ5S2V5KGtleSwgeyBzdGF0ZTogaW52ZXJzZVN0YXRlIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3NlbGVjdFZpc2libGVTdGF0ZU9iamVjdHMoKTogdm9pZCB7XG4gICAgdGhpcy51cGRhdGVBbGxTdGF0ZU9iamVjdHNCeVN0YXRlKEVSZWdpc3Rlck9iamVjdFN0YXRlLlVOU0VMRUNURUQpO1xuICAgIGZvciAoY29uc3QgdmlzaWJsZU9iamVjdCBvZiB0aGlzLnZpc2libGVEYXRhKSB7XG4gICAgICB0aGlzLnVwZGF0ZVN0YXRlT2JqZWN0QnlLZXkodmlzaWJsZU9iamVjdC5pZCwgeyBzdGF0ZTogRVJlZ2lzdGVyT2JqZWN0U3RhdGUuU0VMRUNURUQgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfc2VsZWN0Rmlyc3ROU3RhdGVPYmplY3RzKHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLnVwZGF0ZUFsbFN0YXRlT2JqZWN0c0J5U3RhdGUoRVJlZ2lzdGVyT2JqZWN0U3RhdGUuVU5TRUxFQ1RFRCk7XG5cbiAgICBpZiAodmFsdWUgPiB0aGlzLmxpbWl0KSB7XG4gICAgICBjb25zdCB7IHNvcnRlciB9ID0gdGhpcy5zdGF0ZVNlcnZpY2U7XG4gICAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLmJ1aWxkRmlsdGVyKFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgdGhpcy5vZmZzZXQsXG4gICAgICAgIHRoaXMuX2ZpbHRlclN0YXRlLFxuICAgICAgICB0aGlzLl91c2VyLFxuICAgICAgICBzb3J0ZXIubGVuZ3RoID4gMCA/IHNvcnRlciA6IHVuZGVmaW5lZFxuICAgICAgKTtcbiAgICAgIHRoaXMub2JqZWN0c1N1YnNjcmlwdGlvbih7XG4gICAgICAgIGZpbHRlcixcbiAgICAgICAgY2FsbGJhY2s6IHRoaXMuX3NlbGVjdEZpcnN0TkxvYWRpbmdPYmplY3RzLmJpbmQodGhpcyksXG4gICAgICAgIG5vU2V0OiB0cnVlLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGZpcnN0Tk9iamVjdHMgPSB0aGlzLmRhdGEuc2xpY2UoMCwgdmFsdWUpO1xuICAgICAgdGhpcy5fc2VsZWN0Rmlyc3ROTG9hZGluZ09iamVjdHMoZmlyc3ROT2JqZWN0cyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfc2VsZWN0Rmlyc3ROTG9hZGluZ09iamVjdHMob2JqZWN0czogVFtdKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBvYmplY3Qgb2Ygb2JqZWN0cykge1xuICAgICAgdGhpcy51cGRhdGVTdGF0ZU9iamVjdEJ5S2V5KG9iamVjdC5pZCwgeyBzdGF0ZTogRVJlZ2lzdGVyT2JqZWN0U3RhdGUuU0VMRUNURUQsIG9iamVjdCB9KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZmlsdGVyVG9nZ2xlKCk6IHZvaWQge1xuICAgIHRoaXMuc3RhdGVTZXJ2aWNlLnRvZ2dsZSgpO1xuICB9XG5cbiAgcHVibGljIG9uUGFnaW5hdG9yQ2hhbmdlKHBhZ2luYXRvckNoYW5nZToge1xuICAgIGZpcnN0OiBudW1iZXI7XG4gICAgcGFnZTogbnVtYmVyO1xuICAgIHBhZ2VzQ291bnQ6IG51bWJlciB8IG51bGw7XG4gICAgcm93czogbnVtYmVyO1xuICB9KTogdm9pZCB7XG4gICAgY29uc3QgeyByb3dzLCBmaXJzdCwgcGFnZSB9ID0gcGFnaW5hdG9yQ2hhbmdlO1xuXG4gICAgaWYgKHRoaXMuc3RhdGVTZXJ2aWNlLmxpbWl0ICE9PSByb3dzKSB7XG4gICAgICB0aGlzLnN0YXRlU2VydmljZS5zZXRMaW1pdChyb3dzKTtcbiAgICAgIHRoaXMuX3NhdmVQYWdlUm93c0xpbWl0KHJvd3MpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnN0YXRlU2VydmljZS5vZmZzZXQgIT09IGZpcnN0IC0gMSkge1xuICAgICAgdGhpcy5zdGF0ZVNlcnZpY2Uuc2V0T2Zmc2V0KGZpcnN0IC0gMSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc3RhdGVTZXJ2aWNlLnBhZ2UgIT09IHBhZ2UpIHtcbiAgICAgIHRoaXMuc3RhdGVTZXJ2aWNlLnNldFBhZ2UocGFnZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfc2F2ZVBhZ2VSb3dzTGltaXQocGFnZVJvd3NMaW1pdDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5zZXR0aW5nc1NlcnZpY2VcbiAgICAgIC51cHNlcnRSZXR1cm5pbmdPbmUkKFNFVFRJTkdTX1RZUEUuUkVHSVNURVJfUEFHRV9ST1dTX0xJTUlUKVxuICAgICAgLnN1YnNjcmliZSgoc2V0dGluZykgPT4ge1xuICAgICAgICB0aGlzLl9wYWdlUm93c0xpbWl0U2V0dGluZyA9IHNldHRpbmcgfHwgdW5kZWZpbmVkO1xuICAgICAgfSk7XG4gICAgdGhpcy5zZXR0aW5nc1NlcnZpY2UudXBzZXJ0VXNlclNldHRpbmdzQnlVc2VySWQoe1xuICAgICAgc2V0dGluZ3M6IHtcbiAgICAgICAgaWQ6IHRoaXMuX3BhZ2VSb3dzTGltaXRTZXR0aW5nPy5pZCxcbiAgICAgICAgc2V0dGluZ3NfdHlwZTogU0VUVElOR1NfVFlQRS5SRUdJU1RFUl9QQUdFX1JPV1NfTElNSVQsXG4gICAgICAgIG1vZHVsZV9uYW1lOiB0aGlzLl9tb2R1bGVQYXRoLFxuICAgICAgICBzZXR0aW5nczogeyBwYWdlUm93c0xpbWl0IH0sXG4gICAgICB9LFxuICAgICAgaGlkZGVuOiB0cnVlLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZUNvbHVtblNldHRpbmdzKHsgc2V0dGluZ3MgfTogSUNvbHVtblNldHRpbmdzQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChzZXR0aW5ncykge1xuICAgICAgdGhpcy5zdGlja3lMZWZ0SWRzID0gc2V0dGluZ3Muc3RpY2t5TGVmdC5tYXAoKGVsKSA9PiBlbC5pZCk7XG4gICAgICB0aGlzLnN0aWNreVJpZ2h0SWRzID0gc2V0dGluZ3Muc3RpY2t5UmlnaHRcbiAgICAgICAgLmZpbHRlcigoZWwpID0+IGVsLnN0YXR1cyA9PT0gJ2RlZmF1bHQnKVxuICAgICAgICAubWFwKChlbCkgPT4gZWwuaWQpO1xuICAgICAgdGhpcy5jb2x1bW5zID0gW1xuICAgICAgICAuLi50aGlzLnN0aWNreUxlZnRJZHMsXG4gICAgICAgIC4uLnNldHRpbmdzLmNvbHVtbnMuZmlsdGVyKChlbCkgPT4gZWwuc3RhdHVzID09PSAnZGVmYXVsdCcpLm1hcCgoZWwpID0+IGVsLmlkKSxcbiAgICAgICAgLi4udGhpcy5zdGlja3lSaWdodElkcyxcbiAgICAgIF07XG4gICAgfVxuXG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlU29ydChzb3J0OiBSZWdpc3RlclRhYmxlQ2VsbFNvcnRlcjxhbnk+W10pOiB2b2lkIHtcbiAgICB0aGlzLnN0YXRlU2VydmljZS5zZXRTb3J0ZXIoc29ydCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2F2ZVRoc1dpZHRoVG9Vc2VyU2V0dGluZ3ModGFibGVDb2x1bW5zV2lkdGg6IFRoV2lkdGhFbnRyeVtdKTogdm9pZCB7XG4gICAgY29uc3Qgc2V0dGluZ3MgPSB0aGlzLl9jb2x1bW5zU2V0dGluZ3M7XG4gICAgaWYgKHNldHRpbmdzKSB7XG4gICAgICBzZXR0aW5ncy5zZXR0aW5ncy50YWJsZUNvbHVtbnNXaWR0aCA9IHRhYmxlQ29sdW1uc1dpZHRoO1xuICAgIH1cblxuICAgIHRoaXMuc2V0dGluZ3NTZXJ2aWNlLnVwc2VydFVzZXJTZXR0aW5nc0J5VXNlcklkKHtcbiAgICAgIHNldHRpbmdzOiB7XG4gICAgICAgIGlkOiB0aGlzLl9jb2x1bW5zU2V0dGluZ3M/LmlkLFxuICAgICAgICBzZXR0aW5nc190eXBlOiBTRVRUSU5HU19UWVBFLkNPTFVNTlMsXG4gICAgICAgIG1vZHVsZV9uYW1lOiB0aGlzLl9tb2R1bGVQYXRoLFxuICAgICAgICBzZXR0aW5nczogeyAuLi50aGlzLl9jb2x1bW5zU2V0dGluZ3M/LnNldHRpbmdzLCB0YWJsZUNvbHVtbnNXaWR0aCB9LFxuICAgICAgfSxcbiAgICAgIGhpZGRlbjogdHJ1ZSxcbiAgICAgIHVwZGF0ZVNldHRpbmdzOiB0cnVlLFxuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldCBmaWx0ZXJzQXJlT3BlbmVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnN0YXRlU2VydmljZS5zdGF0ZS5zdGF0ZSAhPT0gRUlucHV0c1N0YXRlLkhJRERFTjtcbiAgfVxuXG4gIHByaXZhdGUgX3N1YnNjcmliZU9uTXV0YXRpb25Db21wbGV0ZWQoKTogdm9pZCB7XG4gICAgdGhpcy5hY3Rpb25Db21wbGV0ZWQkXG4gICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5hY3Rpb25Db21wbGV0ZWQoKSk7XG4gIH1cblxuICBwcml2YXRlIF9pbml0RGVmYXVsdEZpbHRlcihxdWVyeUZpbHRlcnM6IElUcFVzZXJTZXR0aW5nc1NldHRpbmdzRmlsdGVyW10gfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICB0aGlzLnNldHRpbmdzU2VydmljZVxuICAgICAgLmZldGNoVXNlclNldHRpbmdzJCh7XG4gICAgICAgIGlkX3VzZXI6IHtcbiAgICAgICAgICBfZXE6IHRoaXMuX3VzZXIuaWQsXG4gICAgICAgIH0sXG4gICAgICAgIHNldHRpbmdzX3R5cGU6IHtcbiAgICAgICAgICBfaW46IFtTRVRUSU5HU19UWVBFLkZJTFRFUiwgU0VUVElOR1NfVFlQRS5SRUdJU1RFUl9QSU5ORURfSU5QVVRTXSxcbiAgICAgICAgfSxcbiAgICAgICAgbW9kdWxlX25hbWU6IHtcbiAgICAgICAgICBfZXE6IHRoaXMuX21vZHVsZVBhdGgsXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgIC5zdWJzY3JpYmUoKHVzZXJTZXR0aW5ncykgPT4ge1xuICAgICAgICBjb25zdCBwaW5uZWRGaWx0ZXIgPSB1c2VyU2V0dGluZ3MuZmluZChcbiAgICAgICAgICAoeyBzZXR0aW5nc190eXBlOiB0eXBlIH0pID0+IHR5cGUgPT09IFNFVFRJTkdTX1RZUEUuUkVHSVNURVJfUElOTkVEX0lOUFVUU1xuICAgICAgICApO1xuICAgICAgICBjb25zdCBpc1Bpbm5lZCA9ICEhcGlubmVkRmlsdGVyPy5zZXR0aW5ncy5waW5uZWQ7XG4gICAgICAgIGNvbnN0IGZhdm9yaXRlRmlsdGVyID0gdXNlclNldHRpbmdzLmZpbmQoKHsgc2V0dGluZ3MgfSkgPT4gc2V0dGluZ3MuZmF2b3JpdGUpO1xuXG4gICAgICAgIGlmIChpc1Bpbm5lZCkge1xuICAgICAgICAgIHRoaXMuc3RhdGVTZXJ2aWNlLnNldFBpbih0cnVlKTtcbiAgICAgICAgICB0aGlzLnN0YXRlU2VydmljZS5zZXRTdGF0ZSh7XG4gICAgICAgICAgICBzdGF0ZTogRUlucHV0c1N0YXRlLkZJTFRFUl9MSVNULFxuICAgICAgICAgICAgYWN0aW9uOiBFSW5wdXRzQWN0aW9uLkFQUExZX1NBVkVEX0ZJTFRFUixcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChxdWVyeUZpbHRlcnMgfHwgdGhpcy5zZWFyY2hJbnB1dD8uZ2V0UmF3VmFsdWUoKSkge1xuICAgICAgICAgIHRoaXMuYXBwbHlGaWx0ZXJzKHF1ZXJ5RmlsdGVycyA/PyBbXSk7XG4gICAgICAgIH0gZWxzZSBpZiAocGlubmVkRmlsdGVyICYmIGlzUGlubmVkKSB7XG4gICAgICAgICAgdGhpcy5fYXBwbHlGaWx0ZXJTZXR0aW5ncyhwaW5uZWRGaWx0ZXIpO1xuICAgICAgICB9IGVsc2UgaWYgKGZhdm9yaXRlRmlsdGVyKSB7XG4gICAgICAgICAgdGhpcy5fYXBwbHlGaWx0ZXJTZXR0aW5ncyhmYXZvcml0ZUZpbHRlcik7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9kZWZhdWx0RmlsdGVyQXBwbGllZCQubmV4dCh0cnVlKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfYXBwbHlGaWx0ZXJTZXR0aW5ncyhzZXR0aW5nczogSVRwVXNlclNldHRpbmdzKTogdm9pZCB7XG4gICAgdGhpcy5maWx0ZXJzU2VydmljZS5zZXRVc2VyU2V0dGluZ3NGaWx0ZXJWYWx1ZXMoc2V0dGluZ3Muc2V0dGluZ3MuZmlsdGVyID8/IFtdKTtcbiAgICBjb25zdCB7IGdxbEZpbHRlciB9ID0gdGhpcy5maWx0ZXJzU2VydmljZTtcbiAgICB0aGlzLnN0YXRlU2VydmljZS5zZXRHcWxWYWx1ZXMoZ3FsRmlsdGVyKTtcbiAgICB0aGlzLnN0YXRlU2VydmljZS5zZXRTdGF0ZSh7XG4gICAgICBzdGF0ZTogRUlucHV0c1N0YXRlLkhJRERFTixcbiAgICAgIGFjdGlvbjogRUlucHV0c0FjdGlvbi5BUFBMWV9TQVZFRF9GSUxURVIsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9zZWxlY3RDaGFuZ2VkRmlsdGVyKHNlbGVjdGlvbjogQXBwbHlTZWxlY3Rpb25UeXBlcyk6IGFueSB7XG4gICAgbGV0IGZpbHRlciA9IG51bGw7XG5cbiAgICBpZiAoc2VsZWN0aW9uID09PSBudWxsKSB7XG4gICAgICB0aGlzLmNsZWFyU2VsZWN0aW9ucygpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChzZWxlY3Rpb24gPT09IFNlbGVjdGlvblR5cGVzLkFMTCB8fCB0eXBlb2Ygc2VsZWN0aW9uID09PSAnbnVtYmVyJykge1xuICAgICAgZmlsdGVyID0gdGhpcy5faGFuZGxlQWxsT3JOdW1iZXJTZWxlY3Rpb24oc2VsZWN0aW9uKTtcbiAgICB9IGVsc2UgaWYgKHNlbGVjdGlvbiA9PT0gU2VsZWN0aW9uVHlwZXMuVklTSUJMRSkge1xuICAgICAgdGhpcy5fc2VsZWN0VmlzaWJsZUl0ZW1zKCk7XG4gICAgfSBlbHNlIGlmIChzZWxlY3Rpb24gPT09IFNlbGVjdGlvblR5cGVzLklOVkVSU0UpIHtcbiAgICAgIGZpbHRlciA9IHRoaXMuX2hhbmRsZUludmVyc2VTZWxlY3Rpb24oKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmlsdGVyO1xuICB9XG5cbiAgcHJpdmF0ZSBfaGFuZGxlQWxsT3JOdW1iZXJTZWxlY3Rpb24oc2VsZWN0aW9uOiBBcHBseVNlbGVjdGlvblR5cGVzKTogYW55IHtcbiAgICBsZXQgZmlsdGVyID0gbnVsbDtcbiAgICBjb25zdCB7IHNvcnRlciB9ID0gdGhpcy5zdGF0ZVNlcnZpY2U7XG5cbiAgICBpZiAoc2VsZWN0aW9uID09PSBTZWxlY3Rpb25UeXBlcy5BTEwpIHtcbiAgICAgIGZpbHRlciA9IHRoaXMuYnVpbGRGaWx0ZXIodW5kZWZpbmVkLCB1bmRlZmluZWQsIHRoaXMuX2ZpbHRlclN0YXRlLCB0aGlzLl91c2VyKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBzZWxlY3Rpb24gPT09ICdudW1iZXInKSB7XG4gICAgICBpZiAoc2VsZWN0aW9uID4gdGhpcy5saW1pdCkge1xuICAgICAgICBmaWx0ZXIgPSB0aGlzLmJ1aWxkRmlsdGVyKFxuICAgICAgICAgIHNlbGVjdGlvbixcbiAgICAgICAgICAwLFxuICAgICAgICAgIHRoaXMuX2ZpbHRlclN0YXRlLFxuICAgICAgICAgIHRoaXMuX3VzZXIsXG4gICAgICAgICAgc29ydGVyLmxlbmd0aCA+IDAgPyBzb3J0ZXIgOiB1bmRlZmluZWRcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX3NlbGVjdEZpcnN0Tkl0ZW1zKHNlbGVjdGlvbik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpbHRlcjtcbiAgfVxuXG4gIHByaXZhdGUgX3NlbGVjdEZpcnN0Tkl0ZW1zKGNvdW50OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkT2JqZWN0cyA9IG5ldyBTZXQodGhpcy5kYXRhLnNsaWNlKDAsIGNvdW50KSk7XG4gICAgdGhpcy5zZWxlY3RlZElkcyA9IG5ldyBTZXQodGhpcy5kYXRhLm1hcCgoZCkgPT4gZC5pZCkuc2xpY2UoMCwgY291bnQpKTtcbiAgfVxuXG4gIHByaXZhdGUgX3NlbGVjdFZpc2libGVJdGVtcygpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkT2JqZWN0cyA9IG5ldyBTZXQodGhpcy52aXNpYmxlRGF0YSk7XG4gICAgdGhpcy5zZWxlY3RlZElkcyA9IG5ldyBTZXQodGhpcy52aXNpYmxlRGF0YS5tYXAoKGQpID0+IGQuaWQpKTtcbiAgfVxuXG4gIHByaXZhdGUgX2hhbmRsZUludmVyc2VTZWxlY3Rpb24oKTogYW55IHtcbiAgICBjb25zdCBpbnZlcnNlRmlsdGVyID0geyBpZDogeyBfbmluOiBbLi4udGhpcy5zZWxlY3RlZElkc10gfSB9IGFzIEdxbEZpZWxkO1xuICAgIGNvbnN0IHVwZGF0ZWRGaWx0ZXJTdGF0ZSA9IEFycmF5LmlzQXJyYXkodGhpcy5fZmlsdGVyU3RhdGUpXG4gICAgICA/IFsuLi50aGlzLl9maWx0ZXJTdGF0ZSwgaW52ZXJzZUZpbHRlcl1cbiAgICAgIDogW3RoaXMuX2ZpbHRlclN0YXRlLCBpbnZlcnNlRmlsdGVyXTtcblxuICAgIHJldHVybiB0aGlzLmJ1aWxkRmlsdGVyKHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1cGRhdGVkRmlsdGVyU3RhdGUsIHRoaXMuX3VzZXIpO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2V0U2VsZWN0ZWQoZGF0YTogVFtdKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZE9iamVjdHMgPSBuZXcgU2V0KGRhdGEpO1xuICAgIHRoaXMuc2VsZWN0ZWRJZHMgPSBuZXcgU2V0KGRhdGEubWFwKChkKSA9PiBkLmlkKSk7XG4gICAgdGhpcy5zZWxlY3RlZFJlY29yZHNMb2FkaW5nJC5uZXh0KGZhbHNlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBwYXJzZVRvRmlsdGVycyhpbnB1dDogeyBba2V5OiBzdHJpbmddOiBhbnkgfSk6IElUcFVzZXJTZXR0aW5nc1NldHRpbmdzRmlsdGVyW10ge1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyhpbnB1dCkubWFwKChba2V5LCB2YWx1ZV0pID0+ICh7XG4gICAgICBpZDoga2V5LFxuICAgICAgdmFsdWUsXG4gICAgfSkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldCBzZWxlY3RlZENvdW50KCk6IG51bWJlciB7XG4gICAgY29uc3Qgc2VsZWN0ZWRTaXplID0gdGhpcy5zZWxlY3RlZFNlcnZpY2U/LnNlbGVjdGVkVmFsdWVzKCk/LnNpemUgPz8gbnVsbDtcbiAgICBjb25zdCB1bnNlbGVjdGVkU2l6ZSA9IHRoaXMuc2VsZWN0ZWRTZXJ2aWNlPy51bnNlbGVjdGVkVmFsdWVzKCk/LnNpemUgPz8gMDtcbiAgICBjb25zdCB1bmZldGNoZWRPYmplY3RzID0gdGhpcy5zZWxlY3RlZFNlcnZpY2U/LnN0YXRlVW5mZXRjaGVkT2JqZWN0cygpO1xuICAgIGNvbnN0IGlzTm90U2VsZWN0ZWQgPSB1bmZldGNoZWRPYmplY3RzICE9PSBFUmVnaXN0ZXJPYmplY3RTdGF0ZS5TRUxFQ1RFRDtcblxuICAgIGlmIChzZWxlY3RlZFNpemUgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkSWRzLnNpemU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGlzTm90U2VsZWN0ZWQgPyBzZWxlY3RlZFNpemUgOiB0aGlzLmRhdGFDb3VudCAtIHVuc2VsZWN0ZWRTaXplO1xuICB9XG5cbiAgcHJpdmF0ZSBfYnVpbGRDaGlsZGZyZWVDb2x1bW5EYXRhKGNvbHVtbjogSUNvbHVtbkRhdGEpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgcmVzdWx0OiBzdHJpbmdbXSA9IFtdO1xuICAgIHJlc3VsdC5wdXNoKGNvbHVtbi5uYW1lKTtcbiAgICBpZiAoY29sdW1uLmNoaWxkcmVuKSB7XG4gICAgICByZXN1bHQucHVzaCguLi5jb2x1bW4uY2hpbGRyZW4uZmxhdE1hcCgoY2hpbGQpID0+IHRoaXMuX2J1aWxkQ2hpbGRmcmVlQ29sdW1uRGF0YShjaGlsZCkpKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgbm90QWxsRmV0Y2hlZCgpOiBib29sZWFuIHtcbiAgICBjb25zdCB1bmZldGNoZWRTdGF0ZSA9IHRoaXMuc2VsZWN0ZWRTZXJ2aWNlIS5zdGF0ZVVuZmV0Y2hlZE9iamVjdHMoKTtcbiAgICBjb25zdCBhbGxGZXRjaGVkID0gdGhpcy5zdGF0ZU9iamVjdHMhKCkuc2l6ZSA9PT0gdGhpcy5kYXRhQ291bnQ7XG5cbiAgICByZXR1cm4gdW5mZXRjaGVkU3RhdGUgPT09IEVSZWdpc3Rlck9iamVjdFN0YXRlLlNFTEVDVEVEICYmICFhbGxGZXRjaGVkO1xuICB9XG59XG4iXX0=
587
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0ZXItYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1yZWdpc3Rlci1iYXNlL3NyYy9saWIvY29yZS9yZWdpc3Rlci1iYXNlL3JlZ2lzdGVyLWJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLGlCQUFpQixFQUNqQixVQUFVLEVBQ1YsU0FBUyxFQUNULE1BQU0sR0FJUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUNMLGVBQWUsRUFDZixVQUFVLEVBQ1YsYUFBYSxFQUNiLFlBQVksRUFDWixNQUFNLElBQUksVUFBVSxFQUNwQixHQUFHLEVBRUgsYUFBYSxFQUViLFNBQVMsRUFDVCxJQUFJLEVBQ0osR0FBRyxFQUNILFVBQVUsR0FDWCxNQUFNLE1BQU0sQ0FBQztBQUNkLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUV2QixPQUFPLEVBQ0wsb0JBQW9CLEdBTXJCLE1BQU0saUNBQWlDLENBQUM7QUFDekMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBQ3hGLE9BQU8sRUFDTCw4QkFBOEIsRUFDOUIsYUFBYSxFQUNiLG1CQUFtQixFQUNuQixvQkFBb0IsR0FDckIsTUFBTSxtQ0FBbUMsQ0FBQztBQUMzQyxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQVE1RixPQUFPLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBdUIsTUFBTSwwQkFBMEIsQ0FBQztBQUM1RixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUV2RSxPQUFPLEVBRUwsY0FBYyxHQUNmLE1BQU0sNERBQTRELENBQUM7QUFDcEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFeEMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7O0FBRzFELE1BQU0sT0FBZ0IsWUFBWTtJQStKWDtJQTVKckIsbUNBQW1DO0lBQ2hCLGNBQWMsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDeEMsWUFBWSxHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQzNDLFdBQVcsR0FBRyxNQUFNLENBQUMsc0JBQXNCLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNwRixzQ0FBc0M7SUFDbkIsV0FBVyxHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQzdELDBDQUEwQztJQUN2QixTQUFTLEdBQUcsTUFBTSxDQUFDLENBQUEsaUJBQW9CLENBQUEsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ2hGLGdFQUFnRTtJQUM3QyxlQUFlLEdBQUcsTUFBTSxDQUFDLENBQUEsMkJBQThCLENBQUEsRUFBRTtRQUMxRSxRQUFRLEVBQUUsSUFBSTtLQUNmLENBQUMsQ0FBQztJQUNILHlFQUF5RTtJQUN0RCxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3hCLEdBQUcsR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUNoQyxVQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBRWxDLGVBQWUsR0FBRyxNQUFNLENBQUMsb0JBQW9CLENBQUMsQ0FBQztJQUVoRCxjQUFjLEdBQXdCLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLElBQUksQ0FDckYsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUMzQyxDQUFDO0lBQ2MsS0FBSyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDO0lBQ2hDLE1BQU0sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQztJQUNsQyx1QkFBdUIsR0FBRyxJQUFJLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUU5RCxXQUFXLENBQWdCO0lBQzNCLE9BQU8sQ0FBVztJQUNsQixJQUFJLEdBQVEsRUFBRSxDQUFDO0lBQ2YsV0FBVyxHQUFRLEVBQUUsQ0FBQztJQUN0QixTQUFTLEdBQUcsQ0FBQyxDQUFDO0lBQ3JCLHVEQUF1RDtJQUNoRCxlQUFlLEdBQUcsSUFBSSxHQUFHLEVBQU8sQ0FBQztJQUN4QyxtREFBbUQ7SUFDNUMsV0FBVyxHQUFHLElBQUksR0FBRyxFQUFjLENBQUM7SUFDcEMsS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDMUMsYUFBYSxHQUFhLEVBQUUsQ0FBQztJQUM3QixjQUFjLEdBQWEsRUFBRSxDQUFDO0lBQzlCLGFBQWEsR0FBaUMsSUFBSSxDQUFDO0lBQzFEOztPQUVHO0lBQ08sV0FBVyxDQUEwQjtJQUNyQyxXQUFXLEdBQW9DLEVBQUUsQ0FBQztJQUVwRCxNQUFNLENBQVU7SUFDaEIsT0FBTyxDQUFVO0lBQ2pCLFlBQVksQ0FBYTtJQUN6QixXQUFXLEdBQUcsd0JBQXdCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN4RCxzQkFBc0IsR0FBRyxJQUFJLGFBQWEsRUFBVyxDQUFDO0lBUzlEOztPQUVHO0lBQ0ksV0FBVyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBWSxDQUFDO0lBV3REOztPQUVHO0lBQ0kseUJBQXlCLENBRWxCO0lBMkJkLElBQVcsS0FBSztRQUNkLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNyQixDQUFDO0lBRUQsSUFBVyxNQUFNO1FBQ2YsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3RCLENBQUM7SUFFRCxnSEFBZ0g7SUFDaEgsSUFBVyxZQUFZO1FBQ3JCLE1BQU0sT0FBTyxHQUEwQyxJQUFJLENBQUMsZUFBZSxDQUFDO1FBRTVFLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNiLE1BQU0sSUFBSSxLQUFLLENBQUMsNENBQTRDLENBQUMsQ0FBQztRQUNoRSxDQUFDO1FBRUQsT0FBTyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVELG1DQUFtQztJQUNuQyxJQUFXLG9CQUFvQjtRQUM3QixNQUFNLE9BQU8sR0FBMEMsSUFBSSxDQUFDLGVBQWUsQ0FBQztRQUU1RSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDYixNQUFNLElBQUksS0FBSyxDQUFDLDRDQUE0QyxDQUFDLENBQUM7UUFDaEUsQ0FBQztRQUVELE9BQU8sT0FBTyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFFRCxvQ0FBb0M7SUFDcEMsSUFBVyx3QkFBd0I7UUFDakMsTUFBTSxPQUFPLEdBQTBDLElBQUksQ0FBQyxlQUFlLENBQUM7UUFFNUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2IsTUFBTSxJQUFJLEtBQUssQ0FBQyw0Q0FBNEMsQ0FBQyxDQUFDO1FBQ2hFLENBQUM7UUFFRCxPQUFPLE9BQU8sQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUNsQyxDQUFDO0lBRU8sZ0JBQWdCLENBQThCO0lBQzlDLHFCQUFxQixDQUE4QjtJQUUxQyxxQkFBcUIsQ0FBa0M7SUFFdkQsZUFBZSxHQUM5QixJQUFJLENBQUMsZUFBZSxFQUFFLGNBQWMsSUFBSSxJQUFJLGVBQWUsQ0FBc0IsSUFBSSxDQUFDLENBQUM7SUFFekUsWUFBWSxHQUFHLElBQUksQ0FBQyxlQUFlLEVBQUUsS0FBSyxDQUFDO0lBRTNELFlBQ3FCLFFBQWtCLEVBQ3JDLFdBQTBCLEVBQzFCLGNBQXVCLEtBQUs7UUFGVCxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBSXJDLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO1FBQy9CLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLEdBQUcsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0RixJQUFJLENBQUMsT0FBTyxHQUFHLFdBQVc7WUFDeEIsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNqRSxDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1FBQ2hDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsb0JBQW9CLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDO1FBQ2hFLElBQUksS0FBSyxFQUFFLENBQUM7WUFDVixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEQsQ0FBQztJQUNILENBQUM7SUFFTyxvQkFBb0I7UUFDMUIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTO2FBQzNCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7YUFDekMsU0FBUyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFO1lBQzNCLE1BQU0sRUFBRSxpQkFBaUIsRUFBRSxHQUFHLFdBQVcsRUFBRSxRQUFRLElBQUksRUFBRSxDQUFDO1lBQzFELE1BQU0sSUFBSSxHQUFHLFdBQVcsRUFBRSxhQUFhLENBQUM7WUFFeEMsSUFBSSxJQUFJLElBQUksSUFBSSxLQUFLLGFBQWEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDM0MsT0FBTztZQUNULENBQUM7WUFFRCxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUN4QyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsUUFBUSxDQUFDLGlCQUFpQixDQUNsRCxDQUFDO1lBQ0YsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1lBRTFELElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRSxVQUFVLENBQUMsRUFBRSxDQUFDO2dCQUMzQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsaUJBQWlCLENBQUMsQ0FBQztZQUMzQyxDQUFDO1lBRUQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFdBQVcsQ0FBQztRQUN0QyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTyxjQUFjLENBQUMsR0FBK0I7UUFDcEQsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxZQUF3QztRQUMvRCxNQUFNLFdBQVcsR0FBRyxJQUFJLEdBQUcsQ0FBQyxZQUFZLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVuRixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDOUMsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFFLENBQUM7WUFDL0QsTUFBTSxZQUFZLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFFbEYsTUFBTSxLQUFLLEdBQUcsWUFBWSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUM7WUFFbEUsT0FBTztnQkFDTCxHQUFHLEdBQUc7Z0JBQ04sS0FBSzthQUNOLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyx3QkFBd0I7UUFDOUIsSUFBSSxDQUFDLGVBQWU7YUFDakIsa0JBQWtCLENBQ2pCO1lBQ0UsT0FBTyxFQUFFO2dCQUNQLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7YUFDbkI7WUFDRCxhQUFhLEVBQUU7Z0JBQ2IsR0FBRyxFQUFFLGFBQWEsQ0FBQyx3QkFBd0I7YUFDNUM7WUFDRCxXQUFXLEVBQUU7Z0JBQ1gsR0FBRyxFQUFFLElBQUksQ0FBQyxXQUFXO2FBQ3RCO1NBQ0YsRUFDRCxJQUFJLENBQ0w7YUFDQSxTQUFTLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxFQUFFLEVBQUU7WUFDNUIsSUFBSSxDQUFDLHFCQUFxQixHQUFHLFlBQVksQ0FBQztZQUMxQyxNQUFNLEVBQUUsYUFBYSxFQUFFLEdBQUcsWUFBWSxFQUFFLFFBQVEsSUFBSSxFQUFFLENBQUM7WUFFdkQsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsYUFBYSxJQUFJLGFBQWEsQ0FBQyxDQUFDO1FBQzdELENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVNLFFBQVE7UUFDYixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDbEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzNDLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLEVBQUUsS0FBSyxFQUFFLFlBQVksQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLGFBQWEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBRXZGLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQyw2QkFBNkIsRUFBRSxDQUFDO1FBQ3JDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBRXpCLGdEQUFnRDtRQUNoRCxxREFBcUQ7UUFDckQsb0NBQW9DO1FBQ3BDLGtDQUFrQztRQUNsQyxJQUFJO1FBRUosSUFBSSxDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDMUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7WUFDdkIsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDcEMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0sZUFBZSxDQUFDLGFBQWEsR0FBRyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNuQixJQUFJLENBQUMsd0JBQXdCLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVPLFdBQVc7UUFDakIsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUM7UUFDL0MsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxNQUFNLENBQUM7UUFDN0MsSUFBSSxPQUFvRCxDQUFDO1FBRXpELElBQUksV0FBVyxFQUFFLENBQUM7WUFDaEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDekMsQ0FBQztRQUVELElBQUksQ0FBQyxZQUFZLElBQUksWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUM3QyxPQUFPLEdBQUcsWUFBWSxJQUFJLEVBQUUsQ0FBQztRQUMvQixDQUFDO1FBRUQsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRVMsZUFBZSxDQUFDLEtBQVcsSUFBUyxDQUFDO0lBRXhDLFdBQVc7UUFDaEIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2pDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN4QyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQy9CLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRW5DLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxLQUFLLEVBQUUsQ0FBQztZQUM1QixJQUFJLENBQUMsWUFBWSxDQUFDLG9CQUFvQixDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzNDLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDaEUsQ0FBQztJQUNILENBQUM7SUFFUyxZQUFZLENBQUMsT0FBd0M7UUFDN0QsSUFBSSxDQUFDLGNBQWMsQ0FBQywyQkFBMkIsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFFUyxPQUFPLENBQUMsSUFBUyxFQUFFLEtBQWM7UUFDekMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFFakIsSUFBSSxLQUFLLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7WUFDdkIsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDcEMsQ0FBQztRQUVELElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVTLDRCQUE0QixDQUFDLEtBQTJCO1FBQ2hFLElBQUksQ0FBQyxlQUFlLEVBQUUseUJBQXlCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVTLHNCQUFzQixDQUFDLEdBQWUsRUFBRSxPQUFvQztRQUNwRixJQUFJLENBQUMsZUFBZSxFQUFFLG1CQUFtQixDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRVMsZUFBZTtRQUN2QixJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFLENBQUM7UUFFN0IsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLGVBQWUsRUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzVDLElBQUksQ0FBQyxZQUFZLENBQUM7Z0JBQ2hCLEdBQUcsRUFBRSxFQUFFO2dCQUNQLEtBQUssRUFBRSxDQUFDO2FBQ1QsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFFUyxlQUFlO1FBQ3ZCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUM1RSxJQUFJLENBQUMsYUFBYSxHQUFHLE1BQU0sQ0FBQztRQUU1QixJQUFJLENBQUMsbUJBQW1CLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRVMsWUFBWSxDQUFDLEtBQWtDLElBQVMsQ0FBQztJQUV6RCx3QkFBd0IsQ0FBQyxPQUFlO1FBQ2hELElBQUksQ0FBQyxXQUFXLEVBQUUsWUFBWTthQUMzQixJQUFJLENBQ0gsVUFBVSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxFQUN2RCxZQUFZLENBQUMsOEJBQThCLENBQUMsRUFDNUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUNwQzthQUNBLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2hFLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVNLGNBQWM7UUFDbkIsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRU0saUJBQWlCO1FBQ3RCLElBQUksQ0FBQyxzQkFBc0I7YUFDeEIsSUFBSSxDQUNILElBQUksQ0FBQyxDQUFDLENBQUMsRUFDUCxTQUFTLENBQUMsR0FBRyxFQUFFLENBQ2IsYUFBYSxDQUFDO1lBQ1osSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNwRCxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU87WUFDekIsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUMvQixHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtnQkFDWCxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7b0JBQzVCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzNCLENBQUM7WUFDSCxDQUFDLENBQUMsQ0FDSDtZQUNELElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTztTQUMxQixDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUMzQixFQUNELFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ2YsT0FBTyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFFL0IsT0FBTyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4QyxDQUFDLENBQUMsRUFDRixrQkFBa0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQ3BDO2FBQ0EsU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFO1lBQ2hELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDbEUsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxTQUFTLENBQUMsQ0FBQztZQUNsRSxJQUFJLENBQUMsYUFBYSxHQUFHLE1BQU0sQ0FBQztZQUM1QixJQUFJLENBQUMsWUFBWSxHQUFHLFNBQVMsQ0FBQztZQUM5QixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztZQUNwQixJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztZQUN0QixJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFDdEIsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO29CQUNyQixJQUFJLENBQUMsZUFBZSxFQUFFLFVBQVUsRUFBRSxDQUFDO2dCQUNyQyxDQUFDO2dCQUVELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDbkYsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7WUFDdkMsQ0FBQztZQUNELElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqRCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxJQUFTO1FBQ2hDLElBQUksQ0FBQyxlQUFlLEVBQUUsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVNLGFBQWEsQ0FBQyxLQUEwQjtRQUM3QyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVqQyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO1FBRXZDLElBQUksWUFBWSxFQUFFLENBQUM7WUFDakIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFlBQVksRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBRWhELE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hELElBQUksQ0FBQyxhQUFhLEdBQUcsTUFBTSxDQUFDO1FBRTVCLElBQUksQ0FBQyxZQUFZLENBQUM7WUFDaEIsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxlQUFlLElBQUksRUFBRSxDQUFDLENBQUM7WUFDdEMsS0FBSyxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzVELENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNaLE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN4QyxJQUFJLENBQUMsbUJBQW1CLENBQUM7WUFDdkIsTUFBTTtZQUNOLFFBQVEsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7U0FDdkMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLG1CQUFtQixDQUN6QixZQUFpRCxFQUNqRCxLQUEwQjtRQUUxQixJQUFJLEtBQUssS0FBSyxjQUFjLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDakMsSUFBSSxDQUFDLDRCQUE0QixDQUFDLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ25FLENBQUM7YUFBTSxJQUFJLEtBQUssS0FBSyxjQUFjLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDNUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzFDLENBQUM7YUFBTSxJQUFJLEtBQUssS0FBSyxjQUFjLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDNUMsSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUM7UUFDcEMsQ0FBQzthQUFNLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDckMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hDLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3pCLENBQUM7UUFFRCxJQUFJLENBQUMsWUFBWSxDQUFDO1lBQ2hCLEdBQUcsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixDQUFDO1lBQ3ZDLEtBQUssRUFBRSxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSTtTQUMxQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sb0JBQW9CLENBQUMsWUFBaUQ7UUFDNUUsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsSUFBSSxZQUFZLEVBQUUsQ0FBQztZQUM1QyxNQUFNLFlBQVksR0FDaEIsS0FBSyxLQUFLLG9CQUFvQixDQUFDLFFBQVE7Z0JBQ3JDLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxVQUFVO2dCQUNqQyxDQUFDLENBQUMsb0JBQW9CLENBQUMsUUFBUSxDQUFDO1lBRXBDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHLEVBQUUsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQztRQUM1RCxDQUFDO0lBQ0gsQ0FBQztJQUVPLDBCQUEwQjtRQUNoQyxJQUFJLENBQUMsNEJBQTRCLENBQUMsb0JBQW9CLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDbkUsS0FBSyxNQUFNLGFBQWEsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDN0MsSUFBSSxDQUFDLHNCQUFzQixDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsb0JBQW9CLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUMxRixDQUFDO0lBQ0gsQ0FBQztJQUVPLHlCQUF5QixDQUFDLEtBQWE7UUFDN0MsSUFBSSxDQUFDLDRCQUE0QixDQUFDLG9CQUFvQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRW5FLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUN2QixNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztZQUNyQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUM3QixLQUFLLEVBQ0wsSUFBSSxDQUFDLE1BQU0sRUFDWCxJQUFJLENBQUMsWUFBWSxFQUNqQixNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQ3ZDLENBQUM7WUFDRixJQUFJLENBQUMsbUJBQW1CLENBQUM7Z0JBQ3ZCLE1BQU07Z0JBQ04sUUFBUSxFQUFFLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO2dCQUNyRCxLQUFLLEVBQUUsSUFBSTthQUNaLENBQUMsQ0FBQztRQUNMLENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ2hELElBQUksQ0FBQywyQkFBMkIsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNsRCxDQUFDO0lBQ0gsQ0FBQztJQUVPLDJCQUEyQixDQUFDLE9BQVk7UUFDOUMsS0FBSyxNQUFNLE1BQU0sSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUM3QixJQUFJLENBQUMsc0JBQXNCLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxvQkFBb0IsQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUMzRixDQUFDO0lBQ0gsQ0FBQztJQUVNLFlBQVk7UUFDakIsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRU0saUJBQWlCLENBQUMsZUFLeEI7UUFDQyxNQUFNLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsR0FBRyxlQUFlLENBQUM7UUFFOUMsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUNyQyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNqQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEMsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEtBQUssS0FBSyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzNDLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztRQUN6QyxDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUNwQyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsQyxDQUFDO0lBQ0gsQ0FBQztJQUVPLGtCQUFrQixDQUFDLGFBQXFCO1FBQzlDLElBQUksQ0FBQyxlQUFlO2FBQ2pCLG1CQUFtQixDQUFDLGFBQWEsQ0FBQyx3QkFBd0IsQ0FBQzthQUMzRCxTQUFTLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUNyQixJQUFJLENBQUMscUJBQXFCLEdBQUcsT0FBTyxJQUFJLFNBQVMsQ0FBQztRQUNwRCxDQUFDLENBQUMsQ0FBQztRQUNMLElBQUksQ0FBQyxlQUFlLENBQUMsMEJBQTBCLENBQUM7WUFDOUMsUUFBUSxFQUFFO2dCQUNSLEVBQUUsRUFBRSxJQUFJLENBQUMscUJBQXFCLEVBQUUsRUFBRTtnQkFDbEMsYUFBYSxFQUFFLGFBQWEsQ0FBQyx3QkFBd0I7Z0JBQ3JELFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztnQkFDN0IsUUFBUSxFQUFFLEVBQUUsYUFBYSxFQUFFO2FBQzVCO1lBQ0QsTUFBTSxFQUFFLElBQUk7U0FDYixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0sb0JBQW9CLENBQUMsRUFBRSxRQUFRLEVBQTBCO1FBQzlELElBQUksUUFBUSxFQUFFLENBQUM7WUFDYixJQUFJLENBQUMsYUFBYSxHQUFHLFFBQVEsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDNUQsSUFBSSxDQUFDLGNBQWMsR0FBRyxRQUFRLENBQUMsV0FBVztpQkFDdkMsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsTUFBTSxLQUFLLFNBQVMsQ0FBQztpQkFDdkMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDdEIsSUFBSSxDQUFDLE9BQU8sR0FBRztnQkFDYixHQUFHLElBQUksQ0FBQyxhQUFhO2dCQUNyQixHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsTUFBTSxLQUFLLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztnQkFDOUUsR0FBRyxJQUFJLENBQUMsY0FBYzthQUN2QixDQUFDO1FBQ0osQ0FBQztRQUVELElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVNLFVBQVUsQ0FBQyxJQUFvQztRQUNwRCxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRVMsMEJBQTBCLENBQUMsaUJBQWlDO1FBQ3BFLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztRQUN2QyxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQ2IsUUFBUSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsR0FBRyxpQkFBaUIsQ0FBQztRQUMxRCxDQUFDO1FBRUQsSUFBSSxDQUFDLGVBQWUsQ0FBQywwQkFBMEIsQ0FBQztZQUM5QyxRQUFRLEVBQUU7Z0JBQ1IsRUFBRSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFO2dCQUM3QixhQUFhLEVBQUUsYUFBYSxDQUFDLE9BQU87Z0JBQ3BDLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztnQkFDN0IsUUFBUSxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLGlCQUFpQixFQUFFO2FBQ3BFO1lBQ0QsTUFBTSxFQUFFLElBQUk7WUFDWixjQUFjLEVBQUUsSUFBSTtTQUNyQixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsSUFBYyxnQkFBZ0I7UUFDNUIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxLQUFLLEtBQUssWUFBWSxDQUFDLE1BQU0sQ0FBQztJQUMvRCxDQUFDO0lBRU8sNkJBQTZCO1FBQ25DLElBQUksQ0FBQyxnQkFBZ0I7YUFDbEIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQzthQUN6QyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVPLGtCQUFrQixDQUFDLFlBQXlEO1FBQ2xGLElBQUksQ0FBQyxlQUFlO2FBQ2pCLGtCQUFrQixDQUFDO1lBQ2xCLE9BQU8sRUFBRTtnQkFDUCxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFO2FBQ25CO1lBQ0QsYUFBYSxFQUFFO2dCQUNiLEdBQUcsRUFBRSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsYUFBYSxDQUFDLHNCQUFzQixDQUFDO2FBQ2xFO1lBQ0QsV0FBVyxFQUFFO2dCQUNYLEdBQUcsRUFBRSxJQUFJLENBQUMsV0FBVzthQUN0QjtTQUNGLENBQUM7YUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ2IsU0FBUyxDQUFDLENBQUMsWUFBWSxFQUFFLEVBQUU7WUFDMUIsTUFBTSxZQUFZLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FDcEMsQ0FBQyxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBSSxLQUFLLGFBQWEsQ0FBQyxzQkFBc0IsQ0FDM0UsQ0FBQztZQUNGLE1BQU0sUUFBUSxHQUFHLENBQUMsQ0FBQyxZQUFZLEVBQUUsUUFBUSxDQUFDLE1BQU0sQ0FBQztZQUNqRCxNQUFNLGNBQWMsR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBRTlFLElBQUksUUFBUSxFQUFFLENBQUM7Z0JBQ2IsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQy9CLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDO29CQUN6QixLQUFLLEVBQUUsWUFBWSxDQUFDLFdBQVc7b0JBQy9CLE1BQU0sRUFBRSxhQUFhLENBQUMsa0JBQWtCO2lCQUN6QyxDQUFDLENBQUM7WUFDTCxDQUFDO1lBRUQsSUFBSSxZQUFZLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxXQUFXLEVBQUUsRUFBRSxDQUFDO2dCQUNwRCxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksSUFBSSxFQUFFLENBQUMsQ0FBQztZQUN4QyxDQUFDO2lCQUFNLElBQUksWUFBWSxJQUFJLFFBQVEsRUFBRSxDQUFDO2dCQUNwQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDMUMsQ0FBQztpQkFBTSxJQUFJLGNBQWMsRUFBRSxDQUFDO2dCQUMxQixJQUFJLENBQUMsb0JBQW9CLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDNUMsQ0FBQztZQUVELElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekMsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU8sb0JBQW9CLENBQUMsUUFBeUI7UUFDcEQsSUFBSSxDQUFDLGNBQWMsQ0FBQywyQkFBMkIsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNoRixNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztRQUMxQyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQztZQUN6QixLQUFLLEVBQUUsWUFBWSxDQUFDLE1BQU07WUFDMUIsTUFBTSxFQUFFLGFBQWEsQ0FBQyxrQkFBa0I7U0FDekMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLG9CQUFvQixDQUFDLFNBQThCO1FBQ3pELElBQUksTUFBTSxHQUFHLElBQUksQ0FBQztRQUVsQixJQUFJLFNBQVMsS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDdkIsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLFNBQVMsS0FBSyxjQUFjLENBQUMsR0FBRyxJQUFJLE9BQU8sU0FBUyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ3RFLE1BQU0sR0FBRyxJQUFJLENBQUMsMkJBQTJCLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDdkQsQ0FBQzthQUFNLElBQUksU0FBUyxLQUFLLGNBQWMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNoRCxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUM3QixDQUFDO2FBQU0sSUFBSSxTQUFTLEtBQUssY0FBYyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2hELE1BQU0sR0FBRyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztRQUMxQyxDQUFDO1FBRUQsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVPLDJCQUEyQixDQUFDLFNBQThCO1FBQ2hFLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQztRQUNsQixNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztRQUVyQyxJQUFJLFNBQVMsS0FBSyxjQUFjLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDckMsTUFBTSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDckUsQ0FBQzthQUFNLElBQUksT0FBTyxTQUFTLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDekMsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUMzQixNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FDdkIsU0FBUyxFQUNULENBQUMsRUFDRCxJQUFJLENBQUMsWUFBWSxFQUNqQixNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQ3ZDLENBQUM7WUFDSixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3JDLENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVPLGtCQUFrQixDQUFDLEtBQWE7UUFDdEMsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUMxRCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFFTyxtQkFBbUI7UUFDekIsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDakQsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUVPLHVCQUF1QjtRQUM3QixNQUFNLGFBQWEsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQWMsQ0FBQztRQUMxRSxNQUFNLGtCQUFrQixHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQztZQUN6RCxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsYUFBYSxDQUFDO1lBQ3ZDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFFdkMsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBRU8sWUFBWSxDQUFDLElBQVM7UUFDNUIsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2xELElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVTLGNBQWMsQ0FBQyxLQUE2QjtRQUNwRCxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDbEQsRUFBRSxFQUFFLEdBQUc7WUFDUCxLQUFLO1NBQ04sQ0FBQyxDQUFDLENBQUM7SUFDTixDQUFDO0lBRUQsSUFBYyxhQUFhO1FBQ3pCLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxlQUFlLEVBQUUsY0FBYyxFQUFFLEVBQUUsSUFBSSxJQUFJLElBQUksQ0FBQztRQUMxRSxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsZUFBZSxFQUFFLGdCQUFnQixFQUFFLEVBQUUsSUFBSSxJQUFJLENBQUMsQ0FBQztRQUMzRSxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxlQUFlLEVBQUUscUJBQXFCLEVBQUUsQ0FBQztRQUN2RSxNQUFNLGFBQWEsR0FBRyxnQkFBZ0IsS0FBSyxvQkFBb0IsQ0FBQyxRQUFRLENBQUM7UUFFekUsSUFBSSxZQUFZLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDMUIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQztRQUMvQixDQUFDO1FBRUQsT0FBTyxhQUFhLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxjQUFjLENBQUM7SUFDeEUsQ0FBQztJQUVPLHlCQUF5QixDQUFDLE1BQW1CO1FBQ25ELE1BQU0sTUFBTSxHQUFhLEVBQUUsQ0FBQztRQUM1QixNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QixJQUFJLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNwQixNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUYsQ0FBQztRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxJQUFjLGFBQWE7UUFDekIsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLGVBQWdCLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUNyRSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsWUFBYSxFQUFFLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxTQUFTLENBQUM7UUFFaEUsT0FBTyxjQUFjLEtBQUssb0JBQW9CLENBQUMsUUFBUSxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQ3pFLENBQUM7d0dBbHZCbUIsWUFBWTs0RkFBWixZQUFZOzs0RkFBWixZQUFZO2tCQURqQyxTQUFTIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIERlc3Ryb3lSZWYsXG4gIERpcmVjdGl2ZSxcbiAgaW5qZWN0LFxuICBJbmplY3RvcixcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7XG4gIEJlaGF2aW9yU3ViamVjdCxcbiAgY2F0Y2hFcnJvcixcbiAgY29tYmluZUxhdGVzdCxcbiAgZGVib3VuY2VUaW1lLFxuICBmaWx0ZXIgYXMgcnhqc0ZpbHRlcixcbiAgbWFwLFxuICBPYnNlcnZhYmxlLFxuICBSZXBsYXlTdWJqZWN0LFxuICBTdWJzY3JpcHRpb24sXG4gIHN3aXRjaE1hcCxcbiAgdGFrZSxcbiAgdGFwLFxuICB0aHJvd0Vycm9yLFxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBTY2FsYXJVVUlEIH0gZnJvbSAnaGFzdXJhJztcbmltcG9ydCB7XG4gIEVSZWdpc3Rlck9iamVjdFN0YXRlLFxuICBJUmVnaXN0ZXJCYXNlLFxuICBJUmVnaXN0ZXJPYmplY3QsXG4gIElUcFVzZXJTZXR0aW5ncyxcbiAgSVRwVXNlclNldHRpbmdzU2V0dGluZ3NGaWx0ZXIsXG4gIE9iamVjdHNTdWJzY3JpcHRpb25Db25maWcsXG59IGZyb20gJy4uLy4uL3R5cGVzL3JlZ2lzdGVyLWJhc2UudHlwZXMnO1xuaW1wb3J0IHsgRmlsdGVyc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9maWx0ZXIvZmlsdGVycy5zZXJ2aWNlJztcbmltcG9ydCB7IEZpbHRlcnNTdGF0ZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9maWx0ZXIvZmlsdGVycy1zdGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IEZpbHRlcnNUcmFuc21pdFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9maWx0ZXIvZmlsdGVycy10cmFuc21pdC5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIFNFQVJDSF9JTlBVVF9ERUJPVU5DRV9USU1FX01MUyxcbiAgU0VUVElOR1NfVFlQRSxcbiAgVVNFUl9QUk9GSUxFX0xPQURFUixcbiAgVVNFUl9TRVRUSU5HU19MT0FERVIsXG59IGZyb20gJy4uLy4uL2NvbnN0cy9yZWdpc3Rlci1iYXNlLmNvbnN0cyc7XG5pbXBvcnQgeyBTZWxlY3RlZE9iamVjdHNTdGF0ZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zZWxlY3RlZC1vYmplY3RzLXN0YXRlLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgSUNvbHVtbkRhdGEsXG4gIElIYXN1cmFRdWVyeUZpbHRlcixcbiAgUmVnaXN0ZXJUYWJsZUNlbGxTb3J0ZXIsXG4gIFRoV2lkdGhFbnRyeSxcbn0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9yZWdpc3Rlci10YWJsZS9tb2RlbC9zY2hlbWEnO1xuaW1wb3J0IHsgRm9ybUdyb3VwV3JhcHBlciB9IGZyb20gJy4uL2Zvcm0tZ3JvdXAtd3JhcHBlci9mb3JtLWdyb3VwLXdyYXBwZXInO1xuaW1wb3J0IHsgRUlucHV0c0FjdGlvbiwgRUlucHV0c1N0YXRlLCBHcWxGaWVsZCwgR3FsRmllbGRzIH0gZnJvbSAnLi4vLi4vdHlwZXMvaW5wdXRzLnR5cGVzJztcbmltcG9ydCB7IGdldExhc3RTZWdtZW50T2ZQYXRoTmFtZSB9IGZyb20gJy4uLy4uL3V0aWxzL2dldC11cmwtc2VnbWVudCc7XG5pbXBvcnQgeyBJVXNlclByb2ZpbGUgfSBmcm9tICcuLi8uLi90eXBlcy91c2VyLXByb2ZpbGUudHlwZXMnO1xuaW1wb3J0IHtcbiAgQXBwbHlTZWxlY3Rpb25UeXBlcyxcbiAgU2VsZWN0aW9uVHlwZXMsXG59IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvY2hlY2tib3gtc2VsZWN0b3IvY2hlY2tib3gtc2VsZWN0b3IudHlwZXMnO1xuaW1wb3J0IHsgREVGQVVMVF9MSU1JVCB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2lucHV0cy1zdGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IGlzTm9uTnVsbCB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB7IElDb2x1bW5TZXR0aW5nc0NoYW5nZXMgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2NvbHVtbi1zZXR0aW5ncy90eXBlcy9jb2x1bW4tc2V0dGluZ3MudHlwZXMnO1xuaW1wb3J0IHsgUmVnaXN0ZXJCYXNlU3RvcmUgfSBmcm9tICcuL3JlZ2lzdGVyLWJhc2Uuc3RvcmUnO1xuXG5ARGlyZWN0aXZlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBSZWdpc3RlckJhc2U8VCBleHRlbmRzIElSZWdpc3RlckJhc2UsIEZvcm0gPSBhbnk+XG4gIGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3lcbntcbiAgLyoqINCh0LXRgNCy0LjRgdGLINGD0L/RgNCw0LLQu9C10L3QuNGPINGE0LjQu9GM0YLRgNCw0LzQuCAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZmlsdGVyc1NlcnZpY2UgPSBpbmplY3QoRmlsdGVyc1NlcnZpY2UpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc3RhdGVTZXJ2aWNlID0gaW5qZWN0KEZpbHRlcnNTdGF0ZVNlcnZpY2UpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgdHJhbnNtaXR0ZXIgPSBpbmplY3QoRmlsdGVyc1RyYW5zbWl0U2VydmljZSwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcbiAgLyoqINCh0LXRgNCy0LjRgSDRg9C/0YDQsNCy0LvQtdC90LjRjyDQv9C+0LvRjNC30L7QstCw0YLQtdC70LXQvCAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgdXNlclNlcnZpY2UgPSBpbmplY3QoVVNFUl9QUk9GSUxFX0xPQURFUik7XG4gIC8qKiDQodC10YDQstC40YEg0YPQv9GA0LDQstC70LXQvdC40Y8g0LTQsNC90L3Ri9C80Lgg0LIg0YDQtdC10YHRgtGA0LUgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGJhc2VTdG9yZSA9IGluamVjdChSZWdpc3RlckJhc2VTdG9yZTxUPiwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcbiAgLy8gVE9ETyDRg9C00LDQu9C40YLRjCBvcHRpb25hbDogdHJ1ZSDQv9C+0YHQu9C1INCy0YvQv9C+0LvQvdC10L3QuNGPINC30LDQtNCw0YfQuCBTTUEyLTMxMzRcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHNlbGVjdGVkU2VydmljZSA9IGluamVjdChTZWxlY3RlZE9iamVjdHNTdGF0ZVNlcnZpY2U8VD4sIHtcbiAgICBvcHRpb25hbDogdHJ1ZSxcbiAgfSk7XG4gIC8vIFRPRE8gcHJvdGVjdGVkIHJlYWRvbmx5IG5hdmlnYXRpb25TZXJ2aWNlID0gaW5qZWN0KE5hdmlnYXRpb25TZXJ2aWNlKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgY2RyID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBzZXR0aW5nc1NlcnZpY2UgPSBpbmplY3QoVVNFUl9TRVRUSU5HU19MT0FERVIpO1xuXG4gIHB1YmxpYyByZWFkb25seSBmaWx0ZXJBcHBsaWVkJDogT2JzZXJ2YWJsZTxib29sZWFuPiA9IHRoaXMuc3RhdGVTZXJ2aWNlLmdxbFZhbHVlcyQucGlwZShcbiAgICBtYXAoKGZpbHRlcikgPT4gTnVtYmVyKGZpbHRlci5sZW5ndGgpID4gMClcbiAgKTtcbiAgcHVibGljIHJlYWRvbmx5IHBhZ2UkID0gdGhpcy5zdGF0ZVNlcnZpY2UucGFnZSQ7XG4gIHB1YmxpYyByZWFkb25seSBsaW1pdCQgPSB0aGlzLnN0YXRlU2VydmljZS5saW1pdCQ7XG4gIHB1YmxpYyByZWFkb25seSBzZWxlY3RlZFJlY29yZHNMb2FkaW5nJCA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuXG4gIHB1YmxpYyBjb2x1bW5zRGF0YTogSUNvbHVtbkRhdGFbXTtcbiAgcHVibGljIGNvbHVtbnM6IHN0cmluZ1tdO1xuICBwdWJsaWMgZGF0YTogVFtdID0gW107XG4gIHB1YmxpYyB2aXNpYmxlRGF0YTogVFtdID0gW107XG4gIHB1YmxpYyBkYXRhQ291bnQgPSAwO1xuICAvKiogQGRlcHJlY2F0ZWQg0JjRgdC/0L7Qu9GM0LfRg9C50YLQtSBzZWxlY3RlZE9iamVjdHNGcm9tU3RhdGUgKi9cbiAgcHVibGljIHNlbGVjdGVkT2JqZWN0cyA9IG5ldyBTZXQ8YW55PigpO1xuICAvKiogQGRlcHJlY2F0ZWQg0JjRgdC/0L7Qu9GM0LfRg9C50YLQtSBzZWxlY3RlZElkc0Zyb21TdGF0ZSAqL1xuICBwdWJsaWMgc2VsZWN0ZWRJZHMgPSBuZXcgU2V0PFNjYWxhclVVSUQ+KCk7XG4gIHB1YmxpYyBfdXNlciA9IHRoaXMudXNlclNlcnZpY2UuZ2V0VXNlclByb2ZpbGUoKTtcbiAgcHVibGljIHN0aWNreUxlZnRJZHM6IHN0cmluZ1tdID0gW107XG4gIHB1YmxpYyBzdGlja3lSaWdodElkczogc3RyaW5nW10gPSBbXTtcbiAgcHVibGljIGN1cnJlbnRGaWx0ZXI6IElIYXN1cmFRdWVyeUZpbHRlcjxUPiB8IG51bGwgPSBudWxsO1xuICAvKipcbiAgICog0KTQvtGA0LzQsCDRhNC40LvRjNGC0YDQvtCyXG4gICAqL1xuICBwcm90ZWN0ZWQgZmlsdGVyc0Zvcm0hOiBGb3JtR3JvdXBXcmFwcGVyPEZvcm0+O1xuICBwcm90ZWN0ZWQgZmlsdGVyU3RhdGU6IElUcFVzZXJTZXR0aW5nc1NldHRpbmdzRmlsdGVyW10gPSBbXTtcblxuICBwcml2YXRlIF9saW1pdCE6IG51bWJlcjtcbiAgcHJpdmF0ZSBfb2Zmc2V0ITogbnVtYmVyO1xuICBwcml2YXRlIF9maWx0ZXJTdGF0ZSE6IEdxbEZpZWxkcztcbiAgcHJpdmF0ZSBfbW9kdWxlUGF0aCA9IGdldExhc3RTZWdtZW50T2ZQYXRoTmFtZSh0aGlzLnJvdXRlci51cmwpO1xuICBwcml2YXRlIF9kZWZhdWx0RmlsdGVyQXBwbGllZCQgPSBuZXcgUmVwbGF5U3ViamVjdDxib29sZWFuPigpO1xuICAvKipcbiAgICog0JLRgdC10LPQviDQt9Cw0L/QuNGB0LXQuSwg0LHQtdC3INGD0YfQtdGC0LAg0YTQuNC70YzRgtGA0LBcbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCB0b3RhbE5vdEZpbHRlcmVkJDogT2JzZXJ2YWJsZTxudW1iZXI+O1xuICAvKipcbiAgICog0JzQsNGA0YjRgNGD0YLRiyDQtNC70Y8g0LHRgNC10LTQutGA0LDQvNCx0LBcbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCByb3V0ZXM6IGFueVtdO1xuICAvKipcbiAgICog0JrQvtC90YLRgNC+0Lsg0YHRgtGA0L7QutC4INC/0L7QuNGB0LrQsFxuICAgKi9cbiAgcHVibGljIHNlYXJjaElucHV0ID0gdGhpcy5maWx0ZXJzU2VydmljZS5zZWFyY2hJbnB1dCE7XG4gIC8qKlxuICAgKiDQlNC10LnRgdGC0LLQuNC1INC30LDQstC10YDRiNC10L3QvlxuICAgKi9cbiAgcHVibGljIGFic3RyYWN0IGFjdGlvbkNvbXBsZXRlZCQ6IFJlcGxheVN1YmplY3Q8Ym9vbGVhbj47XG4gIC8qKlxuICAgKiDQn9C+0LvRg9GH0LXQvdC40LUg0L7QsdGJ0LXQs9C+INC60L7Qu9C40YfQtdGB0YLQstCwINC30LDQv9C40YHQtdC5XG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgZmV0Y2hUb3RhbE9iamVjdHM6IChcbiAgICBvYnNlcnZhYmxlT3JWYWx1ZTogUmVjb3JkPHN0cmluZywgYW55PiB8IE9ic2VydmFibGU8UmVjb3JkPHN0cmluZywgYW55Pj5cbiAgKSA9PiBTdWJzY3JpcHRpb247XG4gIC8qKlxuICAgKiDQl9Cw0L/RgNC+0YEg0L3QsCDQutC+0LvQuNGH0LXRgdGC0LLQviDQvtGC0YTQuNC70YzRgtGA0L7QstCw0L3QvdGL0YUg0LfQsNC/0LjRgdC10LlcbiAgICovXG4gIHB1YmxpYyBmZXRjaFRvdGFsRmlsdGVyZWRPYmplY3RzOlxuICAgIHwgKChvYnNlcnZhYmxlT3JWYWx1ZTogUmVjb3JkPHN0cmluZywgYW55PiB8IE9ic2VydmFibGU8UmVjb3JkPHN0cmluZywgYW55Pj4pID0+IFN1YnNjcmlwdGlvbilcbiAgICB8IHVuZGVmaW5lZDtcbiAgLyoqXG4gICAqINCf0L7QtNC/0LjRgdC60LAg0L3QsCDQv9C+0LvRg9GH0LXQvdC40LUg0LLRgdC10YUg0L7QsdGK0LXQutGC0L7QsiDQuCDRgSDQvtCx0YDQsNGC0L3Ri9C8INCy0YvQt9C+0LLQvtC8XG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3Qgb2JqZWN0c1N1YnNjcmlwdGlvbjogKFxuICAgIG9ic2VydmFibGVPclZhbHVlOiBPYmplY3RzU3Vic2NyaXB0aW9uQ29uZmlnPFQ+IHwgT2JzZXJ2YWJsZTxPYmplY3RzU3Vic2NyaXB0aW9uQ29uZmlnPFQ+PlxuICApID0+IFN1YnNjcmlwdGlvbjtcbiAgLyoqXG4gICAqINCR0LDQt9C+0LLRi9C5INGE0LjQu9GM0YLRgCwg0L/QviDRg9C80L7Qu9GH0LDQvdC40Y5cbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCBiYXNlRmlsdGVyOiAodXNlcjogSVVzZXJQcm9maWxlIHwgdW5kZWZpbmVkKSA9PiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuXG4gIC8qKlxuICAgKiDQodCx0L7RgNC60LAg0YTQuNC70YzRgtGA0LBcbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCBidWlsZEZpbHRlcihcbiAgICBsaW1pdD86IG51bWJlcixcbiAgICBvZmZzZXQ/OiBudW1iZXIsXG4gICAgZ3FsRmlsdGVyPzogR3FsRmllbGRzLFxuICAgIHNvcnRlcj86IFJlZ2lzdGVyVGFibGVDZWxsU29ydGVyPFQ+W11cbiAgKTogYW55O1xuXG4gIC8qKlxuICAgKiDQodCx0L7RgNC60LAg0YTQuNC70YzRgtGA0L7QsiDRgNC10LXRgdGC0YDQsFxuICAgKi9cbiAgcHJvdGVjdGVkIGFic3RyYWN0IGdldCBidWlsZEZvcm0oKTogRm9ybUdyb3VwV3JhcHBlcjxGb3JtPjtcblxuICBwdWJsaWMgZ2V0IGxpbWl0KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2xpbWl0O1xuICB9XG5cbiAgcHVibGljIGdldCBvZmZzZXQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fb2Zmc2V0O1xuICB9XG5cbiAgLyoqIFV1aWQn0Ysg0LLRgdC10YUg0LLRi9Cx0YDQsNC90L3Ri9GFINC40LvQuCDQuNGB0LrQu9GO0YfQsNC10LzRi9GFINC+0LHRitC10LrRgtC+0LIg0YDQtdC10YHRgtGA0LAgKNC30LDQstC40YHQuNGCINC+0YIg0YHQvtGB0YLQvtGP0L3QuNGPINC10YnQtSDQvdC1INC30LDQs9GA0YPQttC10L3QvdGL0YUg0L7QsdGK0LXQutGC0L7QsikgKi9cbiAgcHVibGljIGdldCBpZHNGcm9tU3RhdGUoKTogU2V0PFNjYWxhclVVSUQ+IHtcbiAgICBjb25zdCBzZXJ2aWNlOiBTZWxlY3RlZE9iamVjdHNTdGF0ZVNlcnZpY2U8VD4gfCBudWxsID0gdGhpcy5zZWxlY3RlZFNlcnZpY2U7XG5cbiAgICBpZiAoIXNlcnZpY2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignU2VsZWN0ZWRPYmplY3RzU3RhdGVTZXJ2aWNlINC90LUg0LfQsNC/0YDQvtCy0LDQudC20LXQvScpO1xuICAgIH1cblxuICAgIHJldHVybiBzZXJ2aWNlLmtleXMoKTtcbiAgfVxuXG4gIC8qKiDQktGB0LUg0LLRi9Cx0YDQsNC90L3Ri9C1IHV1aWQn0Ysg0YDQtdC10YHRgtGA0LAgKi9cbiAgcHVibGljIGdldCBzZWxlY3RlZElkc0Zyb21TdGF0ZSgpOiBTZXQ8U2NhbGFyVVVJRD4ge1xuICAgIGNvbnN0IHNlcnZpY2U6IFNlbGVjdGVkT2JqZWN0c1N0YXRlU2VydmljZTxUPiB8IG51bGwgPSB0aGlzLnNlbGVjdGVkU2VydmljZTtcblxuICAgIGlmICghc2VydmljZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTZWxlY3RlZE9iamVjdHNTdGF0ZVNlcnZpY2Ug0L3QtSDQt9Cw0L/RgNC+0LLQsNC50LbQtdC9Jyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNlcnZpY2Uuc2VsZWN0ZWRLZXlzKCk7XG4gIH1cblxuICAvKiog0JLRgdC1INCy0YvQsdGA0LDQvdC90YvQtSDQvtCx0YrQtdC60YLRiyDRgNC10LXRgdGC0YDQsCAqL1xuICBwdWJsaWMgZ2V0IHNlbGVjdGVkT2JqZWN0c0Zyb21TdGF0ZSgpOiBTZXQ8VD4ge1xuICAgIGNvbnN0IHNlcnZpY2U6IFNlbGVjdGVkT2JqZWN0c1N0YXRlU2VydmljZTxUPiB8IG51bGwgPSB0aGlzLnNlbGVjdGVkU2VydmljZTtcblxuICAgIGlmICghc2VydmljZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTZWxlY3RlZE9iamVjdHNTdGF0ZVNlcnZpY2Ug0L3QtSDQt9Cw0L/RgNC+0LLQsNC50LbQtdC9Jyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNlcnZpY2Uuc2VsZWN0ZWRWYWx1ZXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgX2NvbHVtbnNTZXR0aW5nczogSVRwVXNlclNldHRpbmdzIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIF9wYWdlUm93c0xpbWl0U2V0dGluZzogSVRwVXNlclNldHRpbmdzIHwgdW5kZWZpbmVkO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2RlZmF1bHRDb2x1bW5zV2lkdGhzOiBNYXA8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+O1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3NlbGVjdGlvblR5cGUkID1cbiAgICB0aGlzLnNlbGVjdGVkU2VydmljZT8uc2VsZWN0aW9uVHlwZSQgPz8gbmV3IEJlaGF2aW9yU3ViamVjdDxBcHBseVNlbGVjdGlvblR5cGVzPihudWxsKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgc3RhdGVPYmplY3RzID0gdGhpcy5zZWxlY3RlZFNlcnZpY2U/LnN0YXRlO1xuXG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgIGNvbHVtbnNEYXRhOiBJQ29sdW1uRGF0YVtdLFxuICAgIGlzTXVsdGlIZWFkOiBib29sZWFuID0gZmFsc2VcbiAgKSB7XG4gICAgdGhpcy5jb2x1bW5zRGF0YSA9IGNvbHVtbnNEYXRhO1xuICAgIHRoaXMuX2RlZmF1bHRDb2x1bW5zV2lkdGhzID0gbmV3IE1hcChjb2x1bW5zRGF0YS5tYXAoKGNvbCkgPT4gW2NvbC5uYW1lLCBjb2wud2lkdGhdKSk7XG4gICAgdGhpcy5jb2x1bW5zID0gaXNNdWx0aUhlYWRcbiAgICAgID8gY29sdW1uc0RhdGEuZmxhdE1hcCgoY2QpID0+IHRoaXMuX2J1aWxkQ2hpbGRmcmVlQ29sdW1uRGF0YShjZCkpXG4gICAgICA6IGNvbHVtbnNEYXRhLm1hcCgoY2QpID0+IGNkLm5hbWUpO1xuICAgIHRoaXMuX3N1YnNjcmliZU9uU2V0dGluZ3MoKTtcbiAgICB0aGlzLl9mZXRjaFNhdmVkUGFnZVJvd3NMaW1pdCgpO1xuICAgIGNvbnN0IHN0YXRlID0gdGhpcy5yb3V0ZXIuZ2V0Q3VycmVudE5hdmlnYXRpb24oKT8uZXh0cmFzPy5zdGF0ZTtcbiAgICBpZiAoc3RhdGUpIHtcbiAgICAgIHRoaXMuZmlsdGVyU3RhdGUgPSB0aGlzLnBhcnNlVG9GaWx0ZXJzKHN0YXRlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9zdWJzY3JpYmVPblNldHRpbmdzKCk6IHZvaWQge1xuICAgIHRoaXMuc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzJFxuICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpXG4gICAgICAuc3Vic2NyaWJlKChbdXNlclNldHRpbmddKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgdGFibGVDb2x1bW5zV2lkdGggfSA9IHVzZXJTZXR0aW5nPy5zZXR0aW5ncyA/PyB7fTtcbiAgICAgICAgY29uc3QgdHlwZSA9IHVzZXJTZXR0aW5nPy5zZXR0aW5nc190eXBlO1xuXG4gICAgICAgIGlmICh0eXBlICYmIHR5cGUgIT09IFNFVFRJTkdTX1RZUEUuQ09MVU1OUykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNsZWFuZWRDdXJyZW50ID0gdGhpcy5fb21pdFVuZGVmaW5lZChcbiAgICAgICAgICB0aGlzLl9jb2x1bW5zU2V0dGluZ3M/LnNldHRpbmdzLnRhYmxlQ29sdW1uc1dpZHRoXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGNsZWFuZWROZXcgPSB0aGlzLl9vbWl0VW5kZWZpbmVkKHRhYmxlQ29sdW1uc1dpZHRoKTtcblxuICAgICAgICBpZiAoIV8uaXNFcXVhbChjbGVhbmVkQ3VycmVudCwgY2xlYW5lZE5ldykpIHtcbiAgICAgICAgICB0aGlzLl9zZXRDb2x1bW5zV2lkdGgodGFibGVDb2x1bW5zV2lkdGgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY29sdW1uc1NldHRpbmdzID0gdXNlclNldHRpbmc7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX29taXRVbmRlZmluZWQoYXJyOiBUaFdpZHRoRW50cnlbXSB8IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBfLm1hcChhcnIgPz8gW10sIChvYmopID0+IF8ub21pdEJ5KG9iaiwgXy5pc1VuZGVmaW5lZCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2V0Q29sdW1uc1dpZHRoKGNvbHVtbnNXaWR0aDogVGhXaWR0aEVudHJ5W10gfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICBjb25zdCB0aHNXaWR0aE1hcCA9IG5ldyBNYXAoY29sdW1uc1dpZHRoPy5tYXAoKHsgbmFtZSwgd2lkdGggfSkgPT4gW25hbWUsIHdpZHRoXSkpO1xuXG4gICAgdGhpcy5jb2x1bW5zRGF0YSA9IHRoaXMuY29sdW1uc0RhdGEubWFwKChjb2wpID0+IHtcbiAgICAgIGNvbnN0IGRlZmF1bHRXaWR0aCA9IHRoaXMuX2RlZmF1bHRDb2x1bW5zV2lkdGhzLmdldChjb2wubmFtZSkhO1xuICAgICAgY29uc3QgY3VycmVudFdpZHRoID0gdGhzV2lkdGhNYXAuaGFzKGNvbC5uYW1lKSA/IHRoc1dpZHRoTWFwLmdldChjb2wubmFtZSkgOiBudWxsO1xuXG4gICAgICBjb25zdCB3aWR0aCA9IGN1cnJlbnRXaWR0aCA9PT0gbnVsbCA/IGRlZmF1bHRXaWR0aCA6IGN1cnJlbnRXaWR0aDtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uY29sLFxuICAgICAgICB3aWR0aCxcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9mZXRjaFNhdmVkUGFnZVJvd3NMaW1pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnNldHRpbmdzU2VydmljZVxuICAgICAgLmZldGNoVXNlclNldHRpbmdzJChcbiAgICAgICAge1xuICAgICAgICAgIGlkX3VzZXI6IHtcbiAgICAgICAgICAgIF9lcTogdGhpcy5fdXNlci5pZCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNldHRpbmdzX3R5cGU6IHtcbiAgICAgICAgICAgIF9lcTogU0VUVElOR1NfVFlQRS5SRUdJU1RFUl9QQUdFX1JPV1NfTElNSVQsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBtb2R1bGVfbmFtZToge1xuICAgICAgICAgICAgX2VxOiB0aGlzLl9tb2R1bGVQYXRoLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHRydWVcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKFtmaXJzdFNldHRpbmddKSA9PiB7XG4gICAgICAgIHRoaXMuX3BhZ2VSb3dzTGltaXRTZXR0aW5nID0gZmlyc3RTZXR0aW5nO1xuICAgICAgICBjb25zdCB7IHBhZ2VSb3dzTGltaXQgfSA9IGZpcnN0U2V0dGluZz8uc2V0dGluZ3MgPz8ge307XG5cbiAgICAgICAgdGhpcy5zdGF0ZVNlcnZpY2Uuc2V0TGltaXQocGFnZVJvd3NMaW1pdCA/PyBERUZBVUxUX0xJTUlUKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuZmlsdGVyc0Zvcm0gPSB0aGlzLmJ1aWxkRm9ybTtcbiAgICB0aGlzLmZpbHRlcnNTZXJ2aWNlLmluaXQodGhpcy5maWx0ZXJzRm9ybSk7XG4gICAgdGhpcy5zdGF0ZVNlcnZpY2Uuc2V0U3RhdGUoeyBzdGF0ZTogRUlucHV0c1N0YXRlLkhJRERFTiwgYWN0aW9uOiBFSW5wdXRzQWN0aW9uLk9QRU4gfSk7XG5cbiAgICB0aGlzLmZldGNoVG90YWxPYmplY3RzKHRoaXMuYmFzZUZpbHRlcih0aGlzLl91c2VyKSk7XG4gICAgdGhpcy5fc3Vic2NyaWJlT25NdXRhdGlvbkNvbXBsZXRlZCgpO1xuICAgIHRoaXMuc3Vic2NyaWJlT25QYWdpbmcoKTtcblxuICAgIC8vIFRPRE8g0L/RgNC+0LLQtdGA0LjRgtGMINC90YPQttC90LAg0LvQuCDQn9C10YDQtdC30LDQs9GA0YPQt9C60LAg0YHRgtGA0LDQvdC40YbRi1xuICAgIC8vIGlmICh0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLnByZXZpb3VzVXJsID09PSBudWxsKSB7XG4gICAgLy8gICB0aGlzLnN0YXRlU2VydmljZS5zZXRPZmZzZXQoMCk7XG4gICAgLy8gICB0aGlzLnN0YXRlU2VydmljZS5zZXRQYWdlKDEpO1xuICAgIC8vIH1cblxuICAgIHRoaXMuYmFzZVN0b3JlPy5jb3VudCQ/LnN1YnNjcmliZSgoY291bnQpID0+IHtcbiAgICAgIHRoaXMuZGF0YUNvdW50ID0gY291bnQ7XG4gICAgICB0aGlzLnN0YXRlU2VydmljZS5zZXRDb3VudChjb3VudCk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KHNlYXJjaExpbWl0ZXIgPSAyKTogdm9pZCB7XG4gICAgdGhpcy5fc2V0RmlsdGVycygpO1xuICAgIHRoaXMuc3Vic2NyaWJlT25TZWFyY2hDaGFuZ2VzKHNlYXJjaExpbWl0ZXIpO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2V0RmlsdGVycygpOiB2b2lkIHtcbiAgICBjb25zdCBxdWVyeUZpbHRlcnMgPSB0aGlzLnRyYW5zbWl0dGVyPy5maWx0ZXJzO1xuICAgIGNvbnN0IHF1ZXJ5U2VhcmNoID0gdGhpcy50cmFuc21pdHRlcj8uc2VhcmNoO1xuICAgIGxldCBmaWx0ZXJzOiBJVHBVc2VyU2V0dGluZ3NTZXR0aW5nc0ZpbHRlcltdIHwgdW5kZWZpbmVkO1xuXG4gICAgaWYgKHF1ZXJ5U2VhcmNoKSB7XG4gICAgICB0aGlzLnNlYXJjaElucHV0LnNldFZhbHVlKHF1ZXJ5U2VhcmNoKTtcbiAgICB9XG5cbiAgICBpZiAoIXF1ZXJ5RmlsdGVycyB8fCBxdWVyeUZpbHRlcnMubGVuZ3RoID4gMCkge1xuICAgICAgZmlsdGVycyA9IHF1ZXJ5RmlsdGVycyB8fCBbXTtcbiAgICB9XG5cbiAgICB0aGlzLmFwcGx5QmFzZUZpbHRlcigpO1xuICAgIHRoaXMuX2luaXREZWZhdWx0RmlsdGVyKGZpbHRlcnMpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFwcGx5QmFzZUZpbHRlcihfZGF0YT86IGFueSk6IHZvaWQge31cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5hY3Rpb25Db21wbGV0ZWQkLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5zZWxlY3RlZFJlY29yZHNMb2FkaW5nJC5jb21wbGV0ZSgpO1xuICAgIHRoaXMuZmlsdGVyc1NlcnZpY2UuY2xlYXIoKTtcbiAgICB0aGlzLnN0YXRlU2VydmljZS5zZXRPZmZzZXQoMCk7XG4gICAgdGhpcy5zdGF0ZVNlcnZpY2Uuc2V0R3FsVmFsdWVzKHt9KTtcblxuICAgIGlmICh0aGlzLnNlYXJjaElucHV0Py52YWx1ZSkge1xuICAgICAgdGhpcy5zdGF0ZVNlcnZpY2Uuc2V0U2VhcmNoRmlsdGVyVmFsdWUoJycpO1xuICAgICAgdGhpcy5zdGF0ZVNlcnZpY2Uuc2V0R3FsVmFsdWVzKHRoaXMuZmlsdGVyc1NlcnZpY2UuZ3FsRmlsdGVyKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgYXBwbHlGaWx0ZXJzKGZpbHRlcnM6IElUcFVzZXJTZXR0aW5nc1NldHRpbmdzRmlsdGVyW10pOiB2b2lkIHtcbiAgICB0aGlzLmZpbHRlcnNTZXJ2aWNlLnNldFVzZXJTZXR0aW5nc0ZpbHRlclZhbHVlcyhmaWx0ZXJzKTtcbiAgICB0aGlzLnN0YXRlU2VydmljZS5zZXRHcWxWYWx1ZXModGhpcy5maWx0ZXJzU2VydmljZS5ncWxGaWx0ZXIpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNldERhdGEoZGF0YTogVFtdLCBjb3VudD86IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuZGF0YSA9IGRhdGE7XG5cbiAgICBpZiAoY291bnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5kYXRhQ291bnQgPSBjb3VudDtcbiAgICAgIHRoaXMuc3RhdGVTZXJ2aWNlLnNldENvdW50KGNvdW50KTtcbiAgICB9XG5cbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHByb3RlY3RlZCB1cGRhdGVBbGxTdGF0ZU9iamVjdHNCeVN0YXRlKHN0YXRlOiBFUmVnaXN0ZXJPYmplY3RTdGF0ZSk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0ZWRTZXJ2aWNlPy5zZXRBbGxTdGF0ZU9iamVjdHNCeVN0YXRlKHN0YXRlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCB1cGRhdGVTdGF0ZU9iamVjdEJ5S2V5KGtleTogU2NhbGFyVVVJRCwgdXBkYXRlczogUGFydGlhbDxJUmVnaXN0ZXJPYmplY3Q8VD4+KTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZFNlcnZpY2U/LnNldFN0YXRlT2JqZWN0QnlLZXkoa2V5LCB1cGRhdGVzKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjbGVhclNlbGVjdGlvbnMoKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZElkcy5jbGVhcigpO1xuICAgIHRoaXMuc2VsZWN0ZWRPYmplY3RzLmNsZWFyKCk7XG5cbiAgICBpZiAodGhpcy5zZWxlY3RlZFNlcnZpY2UpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRTZXJ2aWNlPy5yZXNldFN0YXRlKHRoaXMuZGF0YSk7XG4gICAgICB0aGlzLmJ1aWxkQWN0aW9ucyh7XG4gICAgICAgIHJvdzogW10sXG4gICAgICAgIGNvdW50OiAwLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGFjdGlvbkNvbXBsZXRlZCgpOiB2b2lkIHtcbiAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLmJ1aWxkRmlsdGVyKHRoaXMubGltaXQsIHRoaXMub2Zmc2V0LCB0aGlzLl9maWx0ZXJTdGF0ZSk7XG4gICAgdGhpcy5jdXJyZW50RmlsdGVyID0gZmlsdGVyO1xuXG4gICAgdGhpcy5vYmplY3RzU3Vic2NyaXB0aW9uKHsgZmlsdGVyIH0pO1xuICAgIHRoaXMuY2xlYXJTZWxlY3Rpb25zKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYnVpbGRBY3Rpb25zKF9kYXRhOiB7IHJvdzogVFtdOyBjb3VudDogbnVtYmVyIH0pOiB2b2lkIHt9XG5cbiAgcHJvdGVjdGVkIHN1YnNjcmliZU9uU2VhcmNoQ2hhbmdlcyhsaW1pdGVyOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLnNlYXJjaElucHV0Py52YWx1ZUNoYW5nZXNcbiAgICAgIC5waXBlKFxuICAgICAgICByeGpzRmlsdGVyKCh2YWx1ZSkgPT4gIXZhbHVlIHx8IHZhbHVlLmxlbmd0aCA+IGxpbWl0ZXIpLFxuICAgICAgICBkZWJvdW5jZVRpbWUoU0VBUkNIX0lOUFVUX0RFQk9VTkNFX1RJTUVfTUxTKSxcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZilcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLnN0YXRlU2VydmljZS5zZXRHcWxWYWx1ZXModGhpcy5maWx0ZXJzU2VydmljZS5ncWxGaWx0ZXIpO1xuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlUmVnaXN0ZXIoKTogdm9pZCB7XG4gICAgdGhpcy5zdGF0ZVNlcnZpY2Uuc2V0TGltaXQodGhpcy5zdGF0ZVNlcnZpY2UubGltaXQpO1xuICB9XG5cbiAgcHVibGljIHN1YnNjcmliZU9uUGFnaW5nKCk6IHZvaWQge1xuICAgIHRoaXMuX2RlZmF1bHRGaWx0ZXJBcHBsaWVkJFxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2UoMSksXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PlxuICAgICAgICAgIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICAgICAgdGhpcy5zdGF0ZVNlcnZpY2UubGltaXQkLnBpcGUocnhqc0ZpbHRlcihpc05vbk51bGwpKSxcbiAgICAgICAgICAgIHRoaXMuc3RhdGVTZXJ2aWNlLm9mZnNldCQsXG4gICAgICAgICAgICB0aGlzLnN0YXRlU2VydmljZS5ncWxWYWx1ZXMkLnBpcGUoXG4gICAgICAgICAgICAgIHRhcCgoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChOdW1iZXIoZGF0YS5sZW5ndGgpID4gMCkge1xuICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RDaGFuZ2VkKG51bGwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICB0aGlzLnN0YXRlU2VydmljZS5zb3J0ZXIkLFxuICAgICAgICAgIF0pLnBpcGUoZGVib3VuY2VUaW1lKDI1MCkpXG4gICAgICAgICksXG4gICAgICAgIGNhdGNoRXJyb3IoKGUpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdwYWdpbmF0aW9uJywgZSk7XG5cbiAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBuZXcgRXJyb3IoZSkpO1xuICAgICAgICB9KSxcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZilcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKFtsaW1pdCwgb2Zmc2V0LCBncWxGaWx0ZXIsIHNvcnRlcl0pID0+IHtcbiAgICAgICAgY29uc3QgZmlsdGVyID0gdGhpcy5idWlsZEZpbHRlcihsaW1pdCwgb2Zmc2V0LCBncWxGaWx0ZXIsIHNvcnRlcik7XG4gICAgICAgIGNvbnN0IGdxbEZpbHRlclVwZGF0ZWQgPSAhXy5pc0VxdWFsKHRoaXMuX2ZpbHRlclN0YXRlLCBncWxGaWx0ZXIpO1xuICAgICAgICB0aGlzLmN1cnJlbnRGaWx0ZXIgPSBmaWx0ZXI7XG4gICAgICAgIHRoaXMuX2ZpbHRlclN0YXRlID0gZ3FsRmlsdGVyO1xuICAgICAgICB0aGlzLl9saW1pdCA9IGxpbWl0O1xuICAgICAgICB0aGlzLl9vZmZzZXQgPSBvZmZzZXQ7XG4gICAgICAgIGlmICh0aGlzLnN0YXRlT2JqZWN0cykge1xuICAgICAgICAgIGlmIChncWxGaWx0ZXJVcGRhdGVkKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkU2VydmljZT8ucmVzZXRTdGF0ZSgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMub2JqZWN0c1N1YnNjcmlwdGlvbih7IGZpbHRlciwgY2FsbGJhY2s6IHRoaXMuX3NldFN0YXRlT2JqZWN0cy5iaW5kKHRoaXMpIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMub2JqZWN0c1N1YnNjcmlwdGlvbih7IGZpbHRlciB9KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZldGNoVG90YWxGaWx0ZXJlZE9iamVjdHM/LihmaWx0ZXIud2hlcmUpO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9zZXRTdGF0ZU9iamVjdHMoZGF0YTogVFtdKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZFNlcnZpY2U/LmxvYWRTdGF0ZU9iamVjdHMoZGF0YSk7XG4gIH1cblxuICBwdWJsaWMgc2VsZWN0Q2hhbmdlZCh2YWx1ZTogQXBwbHlTZWxlY3Rpb25UeXBlcyk6IHZvaWQge1xuICAgIHRoaXMuX3NlbGVjdGlvblR5cGUkLm5leHQodmFsdWUpO1xuXG4gICAgY29uc3Qgc3RhdGVPYmplY3RzID0gdGhpcy5zdGF0ZU9iamVjdHM7XG5cbiAgICBpZiAoc3RhdGVPYmplY3RzKSB7XG4gICAgICB0aGlzLl9jaGFuZ2VTdGF0ZU9iamVjdHMoc3RhdGVPYmplY3RzKCksIHZhbHVlKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGZpbHRlciA9IHRoaXMuX3NlbGVjdENoYW5nZWRGaWx0ZXIodmFsdWUpO1xuICAgIHRoaXMuY3VycmVudEZpbHRlciA9IGZpbHRlcjtcblxuICAgIHRoaXMuYnVpbGRBY3Rpb25zKHtcbiAgICAgIHJvdzogWy4uLih0aGlzLnNlbGVjdGVkT2JqZWN0cyA/PyBbXSldLFxuICAgICAgY291bnQ6IHRoaXMuc2VsZWN0ZWRPYmplY3RzID8gdGhpcy5zZWxlY3RlZE9iamVjdHMuc2l6ZSA6IDAsXG4gICAgfSk7XG5cbiAgICBpZiAoIWZpbHRlcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2VsZWN0ZWRSZWNvcmRzTG9hZGluZyQubmV4dCh0cnVlKTtcbiAgICB0aGlzLm9iamVjdHNTdWJzY3JpcHRpb24oe1xuICAgICAgZmlsdGVyLFxuICAgICAgY2FsbGJhY2s6IHRoaXMuX3NldFNlbGVjdGVkLmJpbmQodGhpcyksXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9jaGFuZ2VTdGF0ZU9iamVjdHMoXG4gICAgc3RhdGVPYmplY3RzOiBNYXA8U2NhbGFyVVVJRCwgSVJlZ2lzdGVyT2JqZWN0PFQ+PixcbiAgICB2YWx1ZTogQXBwbHlTZWxlY3Rpb25UeXBlc1xuICApOiB2b2lkIHtcbiAgICBpZiAodmFsdWUgPT09IFNlbGVjdGlvblR5cGVzLkFMTCkge1xuICAgICAgdGhpcy51cGRhdGVBbGxTdGF0ZU9iamVjdHNCeVN0YXRlKEVSZWdpc3Rlck9iamVjdFN0YXRlLlNFTEVDVEVEKTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlID09PSBTZWxlY3Rpb25UeXBlcy5JTlZFUlNFKSB7XG4gICAgICB0aGlzLl9pbnZlcnNlU3RhdGVPYmplY3RzKHN0YXRlT2JqZWN0cyk7XG4gICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gU2VsZWN0aW9uVHlwZXMuVklTSUJMRSkge1xuICAgICAgdGhpcy5fc2VsZWN0VmlzaWJsZVN0YXRlT2JqZWN0cygpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgdGhpcy5fc2VsZWN0Rmlyc3ROU3RhdGVPYmplY3RzKHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbnMoKTtcbiAgICB9XG5cbiAgICB0aGlzLmJ1aWxkQWN0aW9ucyh7XG4gICAgICByb3c6IFsuLi50aGlzLnNlbGVjdGVkT2JqZWN0c0Zyb21TdGF0ZV0sXG4gICAgICBjb3VudDogdGhpcy5zZWxlY3RlZE9iamVjdHNGcm9tU3RhdGUuc2l6ZSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX2ludmVyc2VTdGF0ZU9iamVjdHMoc3RhdGVPYmplY3RzOiBNYXA8U2NhbGFyVVVJRCwgSVJlZ2lzdGVyT2JqZWN0PFQ+Pik6IHZvaWQge1xuICAgIGZvciAoY29uc3QgW2tleSwgeyBzdGF0ZSB9XSBvZiBzdGF0ZU9iamVjdHMpIHtcbiAgICAgIGNvbnN0IGludmVyc2VTdGF0ZSA9XG4gICAgICAgIHN0YXRlID09PSBFUmVnaXN0ZXJPYmplY3RTdGF0ZS5TRUxFQ1RFRFxuICAgICAgICAgID8gRVJlZ2lzdGVyT2JqZWN0U3RhdGUuVU5TRUxFQ1RFRFxuICAgICAgICAgIDogRVJlZ2lzdGVyT2JqZWN0U3RhdGUuU0VMRUNURUQ7XG5cbiAgICAgIHRoaXMudXBkYXRlU3RhdGVPYmplY3RCeUtleShrZXksIHsgc3RhdGU6IGludmVyc2VTdGF0ZSB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9zZWxlY3RWaXNpYmxlU3RhdGVPYmplY3RzKCk6IHZvaWQge1xuICAgIHRoaXMudXBkYXRlQWxsU3RhdGVPYmplY3RzQnlTdGF0ZShFUmVnaXN0ZXJPYmplY3RTdGF0ZS5VTlNFTEVDVEVEKTtcbiAgICBmb3IgKGNvbnN0IHZpc2libGVPYmplY3Qgb2YgdGhpcy52aXNpYmxlRGF0YSkge1xuICAgICAgdGhpcy51cGRhdGVTdGF0ZU9iamVjdEJ5S2V5KHZpc2libGVPYmplY3QuaWQsIHsgc3RhdGU6IEVSZWdpc3Rlck9iamVjdFN0YXRlLlNFTEVDVEVEIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3NlbGVjdEZpcnN0TlN0YXRlT2JqZWN0cyh2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy51cGRhdGVBbGxTdGF0ZU9iamVjdHNCeVN0YXRlKEVSZWdpc3Rlck9iamVjdFN0YXRlLlVOU0VMRUNURUQpO1xuXG4gICAgaWYgKHZhbHVlID4gdGhpcy5saW1pdCkge1xuICAgICAgY29uc3QgeyBzb3J0ZXIgfSA9IHRoaXMuc3RhdGVTZXJ2aWNlO1xuICAgICAgY29uc3QgZmlsdGVyID0gdGhpcy5idWlsZEZpbHRlcihcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIHRoaXMub2Zmc2V0LFxuICAgICAgICB0aGlzLl9maWx0ZXJTdGF0ZSxcbiAgICAgICAgc29ydGVyLmxlbmd0aCA+IDAgPyBzb3J0ZXIgOiB1bmRlZmluZWRcbiAgICAgICk7XG4gICAgICB0aGlzLm9iamVjdHNTdWJzY3JpcHRpb24oe1xuICAgICAgICBmaWx0ZXIsXG4gICAgICAgIGNhbGxiYWNrOiB0aGlzLl9zZWxlY3RGaXJzdE5Mb2FkaW5nT2JqZWN0cy5iaW5kKHRoaXMpLFxuICAgICAgICBub1NldDogdHJ1ZSxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBmaXJzdE5PYmplY3RzID0gdGhpcy5kYXRhLnNsaWNlKDAsIHZhbHVlKTtcbiAgICAgIHRoaXMuX3NlbGVjdEZpcnN0TkxvYWRpbmdPYmplY3RzKGZpcnN0Tk9iamVjdHMpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3NlbGVjdEZpcnN0TkxvYWRpbmdPYmplY3RzKG9iamVjdHM6IFRbXSk6IHZvaWQge1xuICAgIGZvciAoY29uc3Qgb2JqZWN0IG9mIG9iamVjdHMpIHtcbiAgICAgIHRoaXMudXBkYXRlU3RhdGVPYmplY3RCeUtleShvYmplY3QuaWQsIHsgc3RhdGU6IEVSZWdpc3Rlck9iamVjdFN0YXRlLlNFTEVDVEVELCBvYmplY3QgfSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGZpbHRlclRvZ2dsZSgpOiB2b2lkIHtcbiAgICB0aGlzLnN0YXRlU2VydmljZS50b2dnbGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBvblBhZ2luYXRvckNoYW5nZShwYWdpbmF0b3JDaGFuZ2U6IHtcbiAgICBmaXJzdDogbnVtYmVyO1xuICAgIHBhZ2U6IG51bWJlcjtcbiAgICBwYWdlc0NvdW50OiBudW1iZXIgfCBudWxsO1xuICAgIHJvd3M6IG51bWJlcjtcbiAgfSk6IHZvaWQge1xuICAgIGNvbnN0IHsgcm93cywgZmlyc3QsIHBhZ2UgfSA9IHBhZ2luYXRvckNoYW5nZTtcblxuICAgIGlmICh0aGlzLnN0YXRlU2VydmljZS5saW1pdCAhPT0gcm93cykge1xuICAgICAgdGhpcy5zdGF0ZVNlcnZpY2Uuc2V0TGltaXQocm93cyk7XG4gICAgICB0aGlzLl9zYXZlUGFnZVJvd3NMaW1pdChyb3dzKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zdGF0ZVNlcnZpY2Uub2Zmc2V0ICE9PSBmaXJzdCAtIDEpIHtcbiAgICAgIHRoaXMuc3RhdGVTZXJ2aWNlLnNldE9mZnNldChmaXJzdCAtIDEpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnN0YXRlU2VydmljZS5wYWdlICE9PSBwYWdlKSB7XG4gICAgICB0aGlzLnN0YXRlU2VydmljZS5zZXRQYWdlKHBhZ2UpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3NhdmVQYWdlUm93c0xpbWl0KHBhZ2VSb3dzTGltaXQ6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuc2V0dGluZ3NTZXJ2aWNlXG4gICAgICAudXBzZXJ0UmV0dXJuaW5nT25lJChTRVRUSU5HU19UWVBFLlJFR0lTVEVSX1BBR0VfUk9XU19MSU1JVClcbiAgICAgIC5zdWJzY3JpYmUoKHNldHRpbmcpID0+IHtcbiAgICAgICAgdGhpcy5fcGFnZVJvd3NMaW1pdFNldHRpbmcgPSBzZXR0aW5nIHx8IHVuZGVmaW5lZDtcbiAgICAgIH0pO1xuICAgIHRoaXMuc2V0dGluZ3NTZXJ2aWNlLnVwc2VydFVzZXJTZXR0aW5nc0J5VXNlcklkKHtcbiAgICAgIHNldHRpbmdzOiB7XG4gICAgICAgIGlkOiB0aGlzLl9wYWdlUm93c0xpbWl0U2V0dGluZz8uaWQsXG4gICAgICAgIHNldHRpbmdzX3R5cGU6IFNFVFRJTkdTX1RZUEUuUkVHSVNURVJfUEFHRV9ST1dTX0xJTUlULFxuICAgICAgICBtb2R1bGVfbmFtZTogdGhpcy5fbW9kdWxlUGF0aCxcbiAgICAgICAgc2V0dGluZ3M6IHsgcGFnZVJvd3NMaW1pdCB9LFxuICAgICAgfSxcbiAgICAgIGhpZGRlbjogdHJ1ZSxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVDb2x1bW5TZXR0aW5ncyh7IHNldHRpbmdzIH06IElDb2x1bW5TZXR0aW5nc0NoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoc2V0dGluZ3MpIHtcbiAgICAgIHRoaXMuc3RpY2t5TGVmdElkcyA9IHNldHRpbmdzLnN0aWNreUxlZnQubWFwKChlbCkgPT4gZWwuaWQpO1xuICAgICAgdGhpcy5zdGlja3lSaWdodElkcyA9IHNldHRpbmdzLnN0aWNreVJpZ2h0XG4gICAgICAgIC5maWx0ZXIoKGVsKSA9PiBlbC5zdGF0dXMgPT09ICdkZWZhdWx0JylcbiAgICAgICAgLm1hcCgoZWwpID0+IGVsLmlkKTtcbiAgICAgIHRoaXMuY29sdW1ucyA9IFtcbiAgICAgICAgLi4udGhpcy5zdGlja3lMZWZ0SWRzLFxuICAgICAgICAuLi5zZXR0aW5ncy5jb2x1bW5zLmZpbHRlcigoZWwpID0+IGVsLnN0YXR1cyA9PT0gJ2RlZmF1bHQnKS5tYXAoKGVsKSA9PiBlbC5pZCksXG4gICAgICAgIC4uLnRoaXMuc3RpY2t5UmlnaHRJZHMsXG4gICAgICBdO1xuICAgIH1cblxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZVNvcnQoc29ydDogUmVnaXN0ZXJUYWJsZUNlbGxTb3J0ZXI8YW55PltdKTogdm9pZCB7XG4gICAgdGhpcy5zdGF0ZVNlcnZpY2Uuc2V0U29ydGVyKHNvcnQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNhdmVUaHNXaWR0aFRvVXNlclNldHRpbmdzKHRhYmxlQ29sdW1uc1dpZHRoOiBUaFdpZHRoRW50cnlbXSk6IHZvaWQge1xuICAgIGNvbnN0IHNldHRpbmdzID0gdGhpcy5fY29sdW1uc1NldHRpbmdzO1xuICAgIGlmIChzZXR0aW5ncykge1xuICAgICAgc2V0dGluZ3Muc2V0dGluZ3MudGFibGVDb2x1bW5zV2lkdGggPSB0YWJsZUNvbHVtbnNXaWR0aDtcbiAgICB9XG5cbiAgICB0aGlzLnNldHRpbmdzU2VydmljZS51cHNlcnRVc2VyU2V0dGluZ3NCeVVzZXJJZCh7XG4gICAgICBzZXR0aW5nczoge1xuICAgICAgICBpZDogdGhpcy5fY29sdW1uc1NldHRpbmdzPy5pZCxcbiAgICAgICAgc2V0dGluZ3NfdHlwZTogU0VUVElOR1NfVFlQRS5DT0xVTU5TLFxuICAgICAgICBtb2R1bGVfbmFtZTogdGhpcy5fbW9kdWxlUGF0aCxcbiAgICAgICAgc2V0dGluZ3M6IHsgLi4udGhpcy5fY29sdW1uc1NldHRpbmdzPy5zZXR0aW5ncywgdGFibGVDb2x1bW5zV2lkdGggfSxcbiAgICAgIH0sXG4gICAgICBoaWRkZW46IHRydWUsXG4gICAgICB1cGRhdGVTZXR0aW5nczogdHJ1ZSxcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgZmlsdGVyc0FyZU9wZW5lZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZVNlcnZpY2Uuc3RhdGUuc3RhdGUgIT09IEVJbnB1dHNTdGF0ZS5ISURERU47XG4gIH1cblxuICBwcml2YXRlIF9zdWJzY3JpYmVPbk11dGF0aW9uQ29tcGxldGVkKCk6IHZvaWQge1xuICAgIHRoaXMuYWN0aW9uQ29tcGxldGVkJFxuICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMuYWN0aW9uQ29tcGxldGVkKCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBfaW5pdERlZmF1bHRGaWx0ZXIocXVlcnlGaWx0ZXJzOiBJVHBVc2VyU2V0dGluZ3NTZXR0aW5nc0ZpbHRlcltdIHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgdGhpcy5zZXR0aW5nc1NlcnZpY2VcbiAgICAgIC5mZXRjaFVzZXJTZXR0aW5ncyQoe1xuICAgICAgICBpZF91c2VyOiB7XG4gICAgICAgICAgX2VxOiB0aGlzLl91c2VyLmlkLFxuICAgICAgICB9LFxuICAgICAgICBzZXR0aW5nc190eXBlOiB7XG4gICAgICAgICAgX2luOiBbU0VUVElOR1NfVFlQRS5GSUxURVIsIFNFVFRJTkdTX1RZUEUuUkVHSVNURVJfUElOTkVEX0lOUFVUU10sXG4gICAgICAgIH0sXG4gICAgICAgIG1vZHVsZV9uYW1lOiB7XG4gICAgICAgICAgX2VxOiB0aGlzLl9tb2R1bGVQYXRoLFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICAgIC5waXBlKHRha2UoMSkpXG4gICAgICAuc3Vic2NyaWJlKCh1c2VyU2V0dGluZ3MpID0+IHtcbiAgICAgICAgY29uc3QgcGlubmVkRmlsdGVyID0gdXNlclNldHRpbmdzLmZpbmQoXG4gICAgICAgICAgKHsgc2V0dGluZ3NfdHlwZTogdHlwZSB9KSA9PiB0eXBlID09PSBTRVRUSU5HU19UWVBFLlJFR0lTVEVSX1BJTk5FRF9JTlBVVFNcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgaXNQaW5uZWQgPSAhIXBpbm5lZEZpbHRlcj8uc2V0dGluZ3MucGlubmVkO1xuICAgICAgICBjb25zdCBmYXZvcml0ZUZpbHRlciA9IHVzZXJTZXR0aW5ncy5maW5kKCh7IHNldHRpbmdzIH0pID0+IHNldHRpbmdzLmZhdm9yaXRlKTtcblxuICAgICAgICBpZiAoaXNQaW5uZWQpIHtcbiAgICAgICAgICB0aGlzLnN0YXRlU2VydmljZS5zZXRQaW4odHJ1ZSk7XG4gICAgICAgICAgdGhpcy5zdGF0ZVNlcnZpY2Uuc2V0U3RhdGUoe1xuICAgICAgICAgICAgc3RhdGU6IEVJbnB1dHNTdGF0ZS5GSUxURVJfTElTVCxcbiAgICAgICAgICAgIGFjdGlvbjogRUlucHV0c0FjdGlvbi5BUFBMWV9TQVZFRF9GSUxURVIsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocXVlcnlGaWx0ZXJzIHx8IHRoaXMuc2VhcmNoSW5wdXQ/LmdldFJhd1ZhbHVlKCkpIHtcbiAgICAgICAgICB0aGlzLmFwcGx5RmlsdGVycyhxdWVyeUZpbHRlcnMgPz8gW10pO1xuICAgICAgICB9IGVsc2UgaWYgKHBpbm5lZEZpbHRlciAmJiBpc1Bpbm5lZCkge1xuICAgICAgICAgIHRoaXMuX2FwcGx5RmlsdGVyU2V0dGluZ3MocGlubmVkRmlsdGVyKTtcbiAgICAgICAgfSBlbHNlIGlmIChmYXZvcml0ZUZpbHRlcikge1xuICAgICAgICAgIHRoaXMuX2FwcGx5RmlsdGVyU2V0dGluZ3MoZmF2b3JpdGVGaWx0ZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fZGVmYXVsdEZpbHRlckFwcGxpZWQkLm5leHQodHJ1ZSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX2FwcGx5RmlsdGVyU2V0dGluZ3Moc2V0dGluZ3M6IElUcFVzZXJTZXR0aW5ncyk6IHZvaWQge1xuICAgIHRoaXMuZmlsdGVyc1NlcnZpY2Uuc2V0VXNlclNldHRpbmdzRmlsdGVyVmFsdWVzKHNldHRpbmdzLnNldHRpbmdzLmZpbHRlciA/PyBbXSk7XG4gICAgY29uc3QgeyBncWxGaWx0ZXIgfSA9IHRoaXMuZmlsdGVyc1NlcnZpY2U7XG4gICAgdGhpcy5zdGF0ZVNlcnZpY2Uuc2V0R3FsVmFsdWVzKGdxbEZpbHRlcik7XG4gICAgdGhpcy5zdGF0ZVNlcnZpY2Uuc2V0U3RhdGUoe1xuICAgICAgc3RhdGU6IEVJbnB1dHNTdGF0ZS5ISURERU4sXG4gICAgICBhY3Rpb246IEVJbnB1dHNBY3Rpb24uQVBQTFlfU0FWRURfRklMVEVSLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2VsZWN0Q2hhbmdlZEZpbHRlcihzZWxlY3Rpb246IEFwcGx5U2VsZWN0aW9uVHlwZXMpOiBhbnkge1xuICAgIGxldCBmaWx0ZXIgPSBudWxsO1xuXG4gICAgaWYgKHNlbGVjdGlvbiA9PT0gbnVsbCkge1xuICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbnMoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoc2VsZWN0aW9uID09PSBTZWxlY3Rpb25UeXBlcy5BTEwgfHwgdHlwZW9mIHNlbGVjdGlvbiA9PT0gJ251bWJlcicpIHtcbiAgICAgIGZpbHRlciA9IHRoaXMuX2hhbmRsZUFsbE9yTnVtYmVyU2VsZWN0aW9uKHNlbGVjdGlvbik7XG4gICAgfSBlbHNlIGlmIChzZWxlY3Rpb24gPT09IFNlbGVjdGlvblR5cGVzLlZJU0lCTEUpIHtcbiAgICAgIHRoaXMuX3NlbGVjdFZpc2libGVJdGVtcygpO1xuICAgIH0gZWxzZSBpZiAoc2VsZWN0aW9uID09PSBTZWxlY3Rpb25UeXBlcy5JTlZFUlNFKSB7XG4gICAgICBmaWx0ZXIgPSB0aGlzLl9oYW5kbGVJbnZlcnNlU2VsZWN0aW9uKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpbHRlcjtcbiAgfVxuXG4gIHByaXZhdGUgX2hhbmRsZUFsbE9yTnVtYmVyU2VsZWN0aW9uKHNlbGVjdGlvbjogQXBwbHlTZWxlY3Rpb25UeXBlcyk6IGFueSB7XG4gICAgbGV0IGZpbHRlciA9IG51bGw7XG4gICAgY29uc3QgeyBzb3J0ZXIgfSA9IHRoaXMuc3RhdGVTZXJ2aWNlO1xuXG4gICAgaWYgKHNlbGVjdGlvbiA9PT0gU2VsZWN0aW9uVHlwZXMuQUxMKSB7XG4gICAgICBmaWx0ZXIgPSB0aGlzLmJ1aWxkRmlsdGVyKHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB0aGlzLl9maWx0ZXJTdGF0ZSk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2Ygc2VsZWN0aW9uID09PSAnbnVtYmVyJykge1xuICAgICAgaWYgKHNlbGVjdGlvbiA+IHRoaXMubGltaXQpIHtcbiAgICAgICAgZmlsdGVyID0gdGhpcy5idWlsZEZpbHRlcihcbiAgICAgICAgICBzZWxlY3Rpb24sXG4gICAgICAgICAgMCxcbiAgICAgICAgICB0aGlzLl9maWx0ZXJTdGF0ZSxcbiAgICAgICAgICBzb3J0ZXIubGVuZ3RoID4gMCA/IHNvcnRlciA6IHVuZGVmaW5lZFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fc2VsZWN0Rmlyc3ROSXRlbXMoc2VsZWN0aW9uKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmlsdGVyO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2VsZWN0Rmlyc3ROSXRlbXMoY291bnQ6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0ZWRPYmplY3RzID0gbmV3IFNldCh0aGlzLmRhdGEuc2xpY2UoMCwgY291bnQpKTtcbiAgICB0aGlzLnNlbGVjdGVkSWRzID0gbmV3IFNldCh0aGlzLmRhdGEubWFwKChkKSA9PiBkLmlkKS5zbGljZSgwLCBjb3VudCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2VsZWN0VmlzaWJsZUl0ZW1zKCk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0ZWRPYmplY3RzID0gbmV3IFNldCh0aGlzLnZpc2libGVEYXRhKTtcbiAgICB0aGlzLnNlbGVjdGVkSWRzID0gbmV3IFNldCh0aGlzLnZpc2libGVEYXRhLm1hcCgoZCkgPT4gZC5pZCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBfaGFuZGxlSW52ZXJzZVNlbGVjdGlvbigpOiBhbnkge1xuICAgIGNvbnN0IGludmVyc2VGaWx0ZXIgPSB7IGlkOiB7IF9uaW46IFsuLi50aGlzLnNlbGVjdGVkSWRzXSB9IH0gYXMgR3FsRmllbGQ7XG4gICAgY29uc3QgdXBkYXRlZEZpbHRlclN0YXRlID0gQXJyYXkuaXNBcnJheSh0aGlzLl9maWx0ZXJTdGF0ZSlcbiAgICAgID8gWy4uLnRoaXMuX2ZpbHRlclN0YXRlLCBpbnZlcnNlRmlsdGVyXVxuICAgICAgOiBbdGhpcy5fZmlsdGVyU3RhdGUsIGludmVyc2VGaWx0ZXJdO1xuXG4gICAgcmV0dXJuIHRoaXMuYnVpbGRGaWx0ZXIodW5kZWZpbmVkLCB1bmRlZmluZWQsIHVwZGF0ZWRGaWx0ZXJTdGF0ZSk7XG4gIH1cblxuICBwcml2YXRlIF9zZXRTZWxlY3RlZChkYXRhOiBUW10pOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkT2JqZWN0cyA9IG5ldyBTZXQoZGF0YSk7XG4gICAgdGhpcy5zZWxlY3RlZElkcyA9IG5ldyBTZXQoZGF0YS5tYXAoKGQpID0+IGQuaWQpKTtcbiAgICB0aGlzLnNlbGVjdGVkUmVjb3Jkc0xvYWRpbmckLm5leHQoZmFsc2UpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHBhcnNlVG9GaWx0ZXJzKGlucHV0OiB7IFtrZXk6IHN0cmluZ106IGFueSB9KTogSVRwVXNlclNldHRpbmdzU2V0dGluZ3NGaWx0ZXJbXSB7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKGlucHV0KS5tYXAoKFtrZXksIHZhbHVlXSkgPT4gKHtcbiAgICAgIGlkOiBrZXksXG4gICAgICB2YWx1ZSxcbiAgICB9KSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0IHNlbGVjdGVkQ291bnQoKTogbnVtYmVyIHtcbiAgICBjb25zdCBzZWxlY3RlZFNpemUgPSB0aGlzLnNlbGVjdGVkU2VydmljZT8uc2VsZWN0ZWRWYWx1ZXMoKT8uc2l6ZSA/PyBudWxsO1xuICAgIGNvbnN0IHVuc2VsZWN0ZWRTaXplID0gdGhpcy5zZWxlY3RlZFNlcnZpY2U/LnVuc2VsZWN0ZWRWYWx1ZXMoKT8uc2l6ZSA/PyAwO1xuICAgIGNvbnN0IHVuZmV0Y2hlZE9iamVjdHMgPSB0aGlzLnNlbGVjdGVkU2VydmljZT8uc3RhdGVVbmZldGNoZWRPYmplY3RzKCk7XG4gICAgY29uc3QgaXNOb3RTZWxlY3RlZCA9IHVuZmV0Y2hlZE9iamVjdHMgIT09IEVSZWdpc3Rlck9iamVjdFN0YXRlLlNFTEVDVEVEO1xuXG4gICAgaWYgKHNlbGVjdGVkU2l6ZSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRJZHMuc2l6ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gaXNOb3RTZWxlY3RlZCA/IHNlbGVjdGVkU2l6ZSA6IHRoaXMuZGF0YUNvdW50IC0gdW5zZWxlY3RlZFNpemU7XG4gIH1cblxuICBwcml2YXRlIF9idWlsZENoaWxkZnJlZUNvbHVtbkRhdGEoY29sdW1uOiBJQ29sdW1uRGF0YSk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCByZXN1bHQ6IHN0cmluZ1tdID0gW107XG4gICAgcmVzdWx0LnB1c2goY29sdW1uLm5hbWUpO1xuICAgIGlmIChjb2x1bW4uY2hpbGRyZW4pIHtcbiAgICAgIHJlc3VsdC5wdXNoKC4uLmNvbHVtbi5jaGlsZHJlbi5mbGF0TWFwKChjaGlsZCkgPT4gdGhpcy5fYnVpbGRDaGlsZGZyZWVDb2x1bW5EYXRhKGNoaWxkKSkpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldCBub3RBbGxGZXRjaGVkKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHVuZmV0Y2hlZFN0YXRlID0gdGhpcy5zZWxlY3RlZFNlcnZpY2UhLnN0YXRlVW5mZXRjaGVkT2JqZWN0cygpO1xuICAgIGNvbnN0IGFsbEZldGNoZWQgPSB0aGlzLnN0YXRlT2JqZWN0cyEoKS5zaXplID09PSB0aGlzLmRhdGFDb3VudDtcblxuICAgIHJldHVybiB1bmZldGNoZWRTdGF0ZSA9PT0gRVJlZ2lzdGVyT2JqZWN0U3RhdGUuU0VMRUNURUQgJiYgIWFsbEZldGNoZWQ7XG4gIH1cbn1cbiJdfQ==