@acorex/components 16.18.14 → 16.18.15
Sign up to get free protection for your applications and to get access to all the features.
- package/esm2022/lib/base/element.class.mjs +8 -2
- package/esm2022/lib/button/button.component.mjs +3 -3
- package/esm2022/lib/calendar/calendar-box/calendar-box.component.mjs +9 -3
- package/esm2022/lib/calendar/scheduler/toolbars/scheduler-toolbar-navigator.mjs +1 -1
- package/esm2022/lib/calendar/scheduler/toolbars/scheduler-toolbar-views.mjs +1 -1
- package/esm2022/lib/checkbox/checkbox.component.mjs +3 -3
- package/esm2022/lib/color-picker/color-box/color-box.component.mjs +1 -1
- package/esm2022/lib/color-picker/color-picker.component.mjs +3 -3
- package/esm2022/lib/context-menu/context-menu.component.mjs +9 -3
- package/esm2022/lib/data-filter/columns/filter-column-date.component.mjs +1 -1
- package/esm2022/lib/data-filter/columns/filter-column-number.component.mjs +1 -1
- package/esm2022/lib/data-filter/columns/filter-column-selection.component.mjs +1 -1
- package/esm2022/lib/data-filter/columns/filter-column-string.component.mjs +1 -1
- package/esm2022/lib/data-filter/filter-panel/filter-panel.component.mjs +9 -3
- package/esm2022/lib/data-filter/toolbar/filter-toolbar.component.mjs +1 -1
- package/esm2022/lib/data-list/list/list.component.mjs +3 -3
- package/esm2022/lib/date-picker/date-picker.component.mjs +3 -3
- package/esm2022/lib/dropdown/dropdown.component.mjs +3 -3
- package/esm2022/lib/fieldset/fieldset.component.mjs +10 -3
- package/esm2022/lib/form-group/form-group.component.mjs +3 -3
- package/esm2022/lib/label/label.component.mjs +4 -3
- package/esm2022/lib/loading/loading-indicator.component.mjs +9 -3
- package/esm2022/lib/loading/loading-panel.component.mjs +9 -3
- package/esm2022/lib/menu/menu.component.mjs +9 -3
- package/esm2022/lib/number-box/number-box.component.mjs +3 -3
- package/esm2022/lib/panel-box/panel-box.component.mjs +9 -3
- package/esm2022/lib/password-box/password-box.component.mjs +3 -3
- package/esm2022/lib/popover/popover.component.mjs +10 -3
- package/esm2022/lib/popup/popup.component.mjs +11 -7
- package/esm2022/lib/popup/popup.service.mjs +6 -2
- package/esm2022/lib/progress-bar/progress-bar.component.mjs +9 -3
- package/esm2022/lib/property-editor/editors/column-editor/column.editor.mjs +1 -1
- package/esm2022/lib/property-editor/editors/conditional-color-editor/conditional-color.editor.mjs +1 -1
- package/esm2022/lib/property-editor/editors/range-editor/range.editor.mjs +1 -1
- package/esm2022/lib/property-editor/editors/searchbar-selectbox-editor/searchbar-selectbox-editor.mjs +1 -1
- package/esm2022/lib/property-editor/editors/selectbox-editor/selectbox.editor.mjs +1 -1
- package/esm2022/lib/property-editor/editors/selection-editor/selection-editor.mjs +1 -1
- package/esm2022/lib/property-editor/editors/switch-editor/number.editor.mjs +1 -1
- package/esm2022/lib/property-editor/editors/text-editor/text.editor.mjs +1 -1
- package/esm2022/lib/property-editor/editors/textarea-editor/textarea.editor.mjs +1 -1
- package/esm2022/lib/property-editor/editors/time-editor/time.editor.mjs +1 -1
- package/esm2022/lib/query-builder/query-builder-popup/query-builder-popup.component.mjs +1 -1
- package/esm2022/lib/query-builder/query-builder-rule.component.mjs +1 -1
- package/esm2022/lib/search-bar/search-bar.component.mjs +9 -3
- package/esm2022/lib/searchbox/searchbox.component.mjs +9 -3
- package/esm2022/lib/selectbox/selectbox.component.mjs +10 -4
- package/esm2022/lib/selectbox/selectbox2.component.mjs +1 -1
- package/esm2022/lib/selection-list/selection-list.component.mjs +9 -3
- package/esm2022/lib/switch/switch.component.mjs +14 -7
- package/esm2022/lib/tab-page/tab-page-Renderer.component.mjs +3 -1
- package/esm2022/lib/tab-page/tab-page-host.component.mjs +7 -6
- package/esm2022/lib/tab-page/tab-page.service.mjs +7 -3
- package/esm2022/lib/tab-strip/tab-strip.component.mjs +9 -3
- package/esm2022/lib/tab-view/tab-view.component.mjs +10 -4
- package/esm2022/lib/tab-view/tab.component.mjs +9 -3
- package/esm2022/lib/textarea/textarea.component.mjs +15 -5
- package/esm2022/lib/textbox/textbox.component.mjs +15 -5
- package/esm2022/lib/time-picker/time-picker.component.mjs +10 -4
- package/esm2022/lib/toast/toast-message/toast-message.component.mjs +9 -3
- package/esm2022/lib/toolbar/group-button/toolbar-group-button.component.mjs +27 -18
- package/esm2022/lib/toolbar/menu/toolbar-menu.component.mjs +9 -3
- package/esm2022/lib/toolbar/search/toolbar-search.component.mjs +9 -3
- package/esm2022/lib/toolbar/title/toolbar-title.component.mjs +23 -8
- package/esm2022/lib/toolbar/toolbar.component.mjs +11 -5
- package/esm2022/lib/tree-side-menu/tree-side-menu.component.mjs +9 -3
- package/esm2022/lib/tree-view/tree-view.component.mjs +9 -3
- package/esm2022/lib/upload-file/upload-file.component.mjs +9 -3
- package/fesm2022/acorex-components.mjs +357 -137
- package/fesm2022/acorex-components.mjs.map +1 -1
- package/lib/base/element.class.d.ts +3 -1
- package/lib/calendar/calendar-box/calendar-box.component.d.ts +3 -1
- package/lib/context-menu/context-menu.component.d.ts +3 -1
- package/lib/data-filter/filter-panel/filter-panel.component.d.ts +3 -1
- package/lib/fieldset/fieldset.component.d.ts +3 -1
- package/lib/loading/loading-indicator.component.d.ts +3 -1
- package/lib/loading/loading-panel.component.d.ts +3 -1
- package/lib/menu/menu.component.d.ts +3 -1
- package/lib/panel-box/panel-box.component.d.ts +3 -1
- package/lib/popover/popover.component.d.ts +3 -1
- package/lib/popup/popup.component.d.ts +2 -0
- package/lib/popup/popup.service.d.ts +2 -0
- package/lib/progress-bar/progress-bar.component.d.ts +3 -1
- package/lib/search-bar/search-bar.component.d.ts +3 -1
- package/lib/searchbox/searchbox.component.d.ts +3 -1
- package/lib/selectbox/selectbox.component.d.ts +3 -1
- package/lib/selection-list/selection-list.component.d.ts +3 -1
- package/lib/switch/switch.component.d.ts +3 -1
- package/lib/tab-page/tab-page.service.d.ts +2 -0
- package/lib/tab-strip/tab-strip.component.d.ts +3 -1
- package/lib/tab-view/tab-view.component.d.ts +3 -1
- package/lib/tab-view/tab.component.d.ts +3 -1
- package/lib/textarea/textarea.component.d.ts +3 -1
- package/lib/textbox/textbox.component.d.ts +3 -1
- package/lib/time-picker/time-picker.component.d.ts +3 -1
- package/lib/toast/toast-message/toast-message.component.d.ts +3 -1
- package/lib/toolbar/group-button/toolbar-group-button.component.d.ts +6 -4
- package/lib/toolbar/menu/toolbar-menu.component.d.ts +3 -1
- package/lib/toolbar/search/toolbar-search.component.d.ts +3 -1
- package/lib/toolbar/title/toolbar-title.component.d.ts +3 -2
- package/lib/toolbar/toolbar.component.d.ts +3 -1
- package/lib/tree-side-menu/tree-side-menu.component.d.ts +3 -1
- package/lib/tree-view/tree-view.component.d.ts +3 -1
- package/lib/upload-file/upload-file.component.d.ts +3 -1
- package/package.json +1 -1
@@ -138,6 +138,8 @@ export class AXSelectBoxComponent extends AXValidatableComponent {
|
|
138
138
|
// });
|
139
139
|
// }
|
140
140
|
}
|
141
|
+
axId = '';
|
142
|
+
axClass = '';
|
141
143
|
setSelectedItemsChange(v, old = this.selectedItems) {
|
142
144
|
if (!v) {
|
143
145
|
v = [];
|
@@ -1028,15 +1030,15 @@ export class AXSelectBoxComponent extends AXValidatableComponent {
|
|
1028
1030
|
}
|
1029
1031
|
}
|
1030
1032
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.7", ngImport: i0, type: AXSelectBoxComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
|
1031
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.7", type: AXSelectBoxComponent, selector: "ax-select-box", inputs: { showDropDownButton: "showDropDownButton", rowInputTemplate: "rowInputTemplate", showCheckBox: "showCheckBox", readonly: "readonly", rtl: "rtl", disabled: "disabled", placeholder: "placeholder", size: "size", allowNull: "allowNull", textAlign: "textAlign", bufferSize: "bufferSize", remoteOperation: "remoteOperation", fitParent: "fitParent", dropdownWidth: "dropdownWidth", multiLine: "multiLine", onDemandTranslate: "onDemandTranslate", dataSource: "dataSource", validation: "validation", disabledCallback: "disabledCallback", allowSearch: "allowSearch", textField: "textField", valueField: "valueField", disabledField: "disabledField", mode: "mode", items: "items", selectedItems: "selectedItems", selectedValues: "selectedValues" }, outputs: { dropdownToggle: "dropdownToggle", itemsChange: "itemsChange", onBlur: "onBlur", onFocus: "onFocus", selectionChanged: "selectionChanged", selectedItemsChange: "selectedItemsChange", selectedValuesChange: "selectedValuesChange" }, host: { styleAttribute: "width: 100%" }, providers: [
|
1033
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.7", type: AXSelectBoxComponent, selector: "ax-select-box", inputs: { showDropDownButton: "showDropDownButton", rowInputTemplate: "rowInputTemplate", showCheckBox: "showCheckBox", readonly: "readonly", rtl: "rtl", disabled: "disabled", placeholder: "placeholder", size: "size", allowNull: "allowNull", textAlign: "textAlign", bufferSize: "bufferSize", remoteOperation: "remoteOperation", fitParent: "fitParent", dropdownWidth: "dropdownWidth", multiLine: "multiLine", onDemandTranslate: "onDemandTranslate", dataSource: "dataSource", validation: "validation", disabledCallback: "disabledCallback", allowSearch: "allowSearch", textField: "textField", valueField: "valueField", disabledField: "disabledField", mode: "mode", items: "items", selectedItems: "selectedItems", axId: "axId", axClass: "axClass", selectedValues: "selectedValues" }, outputs: { dropdownToggle: "dropdownToggle", itemsChange: "itemsChange", onBlur: "onBlur", onFocus: "onFocus", selectionChanged: "selectionChanged", selectedItemsChange: "selectedItemsChange", selectedValuesChange: "selectedValuesChange" }, host: { styleAttribute: "width: 100%" }, providers: [
|
1032
1034
|
{ provide: AXValidatableComponent, useExisting: AXSelectBoxComponent },
|
1033
|
-
], queries: [{ propertyName: "rowTemplate", first: true, predicate: TemplateRef, descendants: true, static: true }, { propertyName: "_contentDataSource", first: true, predicate: AXDataSourceComponent, descendants: true, static: true }, { propertyName: "_contentValidation", first: true, predicate: AXValidation, descendants: true, static: true }], viewQueries: [{ propertyName: "span", first: true, predicate: AXTextBoxComponent, descendants: true, static: true }, { propertyName: "textbox", first: true, predicate: AXTextBoxComponent, descendants: true, static: true }, { propertyName: "listContainer", first: true, predicate: ["listContainer"], descendants: true, static: true }, { propertyName: "serchBox", first: true, predicate: ["serchBox"], descendants: true }, { propertyName: "textBoxSelectBox", first: true, predicate: ["textBoxSelectBox"], descendants: true, static: true }, { propertyName: "dropdown", first: true, predicate: ["d"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<ax-drop-down\n #d\n [size]=\"size\"\n [fitParent]=\"fitParent\"\n [dropdownWidth]=\"dropdownWidth\"\n [rtl]=\"rtl\"\n [showDropDownButton]=\"showDropDownButton\"\n [disabled]=\"disabled\"\n [readonly]=\"readonly\"\n (dropdownToggle)=\"dropdownToggleSelecBox($event)\"\n>\n <ng-container start>\n <ng-content select=\"[start]\"> </ng-content>\n </ng-container>\n <ng-container header>\n <div\n class=\"ax chips-container\"\n [class.multiline]=\"multiLine\"\n [style.padding]=\"selectedItems.length && multiLine ? '0.25rem' : ''\"\n >\n <div\n class=\"chips\"\n [class.chips-blank]=\"mode === 'single'\"\n [title]=\"item[textField]\"\n *ngFor=\"let item of selectedItems\"\n >\n <span\n class=\"chips-text\"\n [ngStyle]=\"{\n width:\n item[textField].length > 15 &&\n this.mode === 'multiple' &&\n !multiLine\n ? '110px'\n : 'auto'\n }\"\n >\n {{ item[textField] }}\n </span>\n <span\n class=\"close-icon\"\n (click)=\"handleItemRemoveClick(item)\"\n *ngIf=\"\n (readonly != true || itemRemove == true) &&\n disabled != true &&\n (allowNull == true || selectedItems.length > 1)\n \"\n >\n <i class=\"far fa-times close\"></i>\n </span>\n </div>\n <div class=\"search-wrapper\" (click)=\"onTextBoxClick($event)\">\n <ax-text-box\n #textBoxSelectBox\n [textAlign]=\"textAlign\"\n [placeholder]=\"selectedItems.length == 0 ? placeholder : ''\"\n [readonly]=\"readonly\"\n [disabled]=\"disabled\"\n (onkey)=\"handleKeyEvent($event)\"\n [size]=\"size\"\n (onFocus)=\"onFocusTextBox($event)\"\n >\n </ax-text-box>\n </div>\n </div>\n </ng-container>\n <ng-container end>\n <ng-content select=\"[end]\"> </ng-content>\n </ng-container>\n\n <ng-container panel>\n <div
|
1035
|
+
], queries: [{ propertyName: "rowTemplate", first: true, predicate: TemplateRef, descendants: true, static: true }, { propertyName: "_contentDataSource", first: true, predicate: AXDataSourceComponent, descendants: true, static: true }, { propertyName: "_contentValidation", first: true, predicate: AXValidation, descendants: true, static: true }], viewQueries: [{ propertyName: "span", first: true, predicate: AXTextBoxComponent, descendants: true, static: true }, { propertyName: "textbox", first: true, predicate: AXTextBoxComponent, descendants: true, static: true }, { propertyName: "listContainer", first: true, predicate: ["listContainer"], descendants: true, static: true }, { propertyName: "serchBox", first: true, predicate: ["serchBox"], descendants: true }, { propertyName: "textBoxSelectBox", first: true, predicate: ["textBoxSelectBox"], descendants: true, static: true }, { propertyName: "dropdown", first: true, predicate: ["d"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<ax-drop-down\n #d\n [size]=\"size\"\n [fitParent]=\"fitParent\"\n [dropdownWidth]=\"dropdownWidth\"\n [rtl]=\"rtl\"\n [showDropDownButton]=\"showDropDownButton\"\n [disabled]=\"disabled\"\n [readonly]=\"readonly\"\n (dropdownToggle)=\"dropdownToggleSelecBox($event)\"\n [attr.id]=\"axId\"\n [ngClass]=\"axClass\"\n>\n <ng-container start>\n <ng-content select=\"[start]\"> </ng-content>\n </ng-container>\n\n <ng-container header>\n <div\n class=\"ax chips-container\"\n [class.multiline]=\"multiLine\"\n [style.padding]=\"selectedItems.length && multiLine ? '0.25rem' : ''\"\n [attr.id]=\"axId + '-header'\"\n >\n <div\n class=\"chips\"\n [class.chips-blank]=\"mode === 'single'\"\n [title]=\"item[textField]\"\n *ngFor=\"let item of selectedItems\"\n [attr.id]=\"axId + '-chip-' + item[valueField]\"\n >\n <span\n class=\"chips-text\"\n [ngStyle]=\"{\n width:\n item[textField].length > 15 &&\n this.mode === 'multiple' &&\n !multiLine\n ? '110px'\n : 'auto'\n }\"\n >\n {{ item[textField] }}\n </span>\n <span\n class=\"close-icon\"\n (click)=\"handleItemRemoveClick(item)\"\n *ngIf=\"\n (readonly != true || itemRemove == true) &&\n disabled != true &&\n (allowNull == true || selectedItems.length > 1)\n \"\n >\n <i class=\"far fa-times close\"></i>\n </span>\n </div>\n <div class=\"search-wrapper\" (click)=\"onTextBoxClick($event)\">\n <ax-text-box\n #textBoxSelectBox\n [textAlign]=\"textAlign\"\n [placeholder]=\"selectedItems.length == 0 ? placeholder : ''\"\n [readonly]=\"readonly\"\n [disabled]=\"disabled\"\n (onkey)=\"handleKeyEvent($event)\"\n [size]=\"size\"\n (onFocus)=\"onFocusTextBox($event)\"\n [attr.id]=\"axId + '-text-box'\"\n >\n </ax-text-box>\n </div>\n </div>\n </ng-container>\n\n <ng-container end>\n <ng-content select=\"[end]\"> </ng-content>\n </ng-container>\n\n <ng-container panel>\n <div\n *ngIf=\"allowSearch\"\n class=\"search-wrapper\"\n style=\"padding: 0.7em\"\n [attr.id]=\"axId + '-search-wrapper'\"\n >\n <ax-search-box\n #serchBox\n [onDemandTranslate]=\"onDemandTranslate\"\n [(value)]=\"text\"\n (onkey)=\"handleKeyEventSearch($event)\"\n (textChanged)=\"textChanged($event)\"\n (onButtonClick)=\"textChanged($event)\"\n [attr.id]=\"axId + '-search-box'\"\n >\n </ax-search-box>\n </div>\n <div class=\"ax list-container\" [attr.id]=\"axId + '-list-container'\">\n <div\n #listContainer\n class=\"list-container-items\"\n (scroll)=\"scrolled($event)\"\n [attr.id]=\"axId + '-list'\"\n >\n <ng-container\n *ngIf=\"getItems().length > 0; then thenTemplate; else elseTemplate\"\n ></ng-container>\n <ng-template #thenTemplate>\n <div\n [class.ax-state-disabled]=\"isItemDisabled(item)\"\n class=\"list-item\"\n *ngFor=\"let item of getItems(); let i = index\"\n [class.focused]=\"i == currentfocusedIndex\"\n [class.selected]=\"isItemSelected(item)\"\n (click)=\"handleItemClick($event, item)\"\n [attr.id]=\"axId + '-list-item-' + i\"\n >\n <div style=\"display: flex\">\n <ax-check-box\n *ngIf=\"showCheckBox\"\n [size]=\"size\"\n [value]=\"isItemSelected(item)\"\n [disabled]=\"\n (!allowNull &&\n selectedItems.length === 1 &&\n isItemSelected(item)) ||\n isItemDisabled(item)\n \"\n (onClick)=\"handleItemClick($event, item)\"\n [attr.id]=\"axId + '-check-box-' + i\"\n >\n </ax-check-box>\n <ng-container *ngIf=\"rowTemplate; else elseTemplate\">\n <div\n style=\"\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n flex: 1;\n \"\n [title]=\"item[textField]\"\n [ngStyle]=\"\n showCheckBox ? { 'padding-inline-start': '0.5rem' } : ''\n \"\n >\n <ng-container\n *ngTemplateOutlet=\"\n rowTemplate;\n context: { $implicit: item }\n \"\n >\n </ng-container>\n </div>\n </ng-container>\n <ng-template #elseTemplate>\n <div\n style=\"\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n flex: 1;\n \"\n [title]=\"item[textField]\"\n [ngStyle]=\"\n showCheckBox ? { 'padding-inline-start': '0.5rem' } : ''\n \"\n >\n {{ item[textField] }}\n </div>\n </ng-template>\n </div>\n </div>\n </ng-template>\n <div *ngIf=\"showLoading\" class=\"ax-pad-sm\" style=\"text-align: center\">\n <i\n class=\"far fa-spinner-third fa-pulse fa-2x\"\n style=\"color: var(--ax-primary-color)\"\n ></i>\n </div>\n <!-- <ax-loading-indicator ></ax-loading-indicator> -->\n <ng-template #elseTemplate>\n <ng-container\n *ngIf=\"\n showLoading == true;\n then searchTemplate;\n else noDataTemplate\n \"\n ></ng-container>\n <ng-template #searchTemplate>\n <div class=\"list-item\">\n {{ 'common.search' | trans }}\n </div>\n </ng-template>\n <ng-template #noDataTemplate>\n <div class=\"list-item\">\n {{ 'common.noDataFound' | trans }}\n </div>\n </ng-template>\n </ng-template>\n </div>\n </div>\n </ng-container>\n</ax-drop-down>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { 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.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i2.AXDropdownComponent, selector: "ax-drop-down", inputs: ["rtl", "readonly", "loading", "dropdownWidth"], outputs: ["dropdownToggle", "onButtonClick"] }, { kind: "component", type: i3.AXTextBoxComponent, selector: "ax-text-box", inputs: ["mask", "showMask", "type", "maxLength", "maskGuid", "maskPlaceholder", "maskKeepCharPositions", "axId", "axClass"] }, { kind: "component", type: i4.AXCheckBoxComponent, selector: "ax-check-box", inputs: ["readonly", "disabled", "size", "label", "tabIndex", "indeterminate", "useTreeView", "value"], outputs: ["onValueChanged", "valueChange", "onClick"] }, { kind: "component", type: i5.AXSearchBoxComponent, selector: "ax-search-box", inputs: ["placeholder", "onDemandTranslate", "text", "axId", "axClass", "delay"], outputs: ["textChanged", "onButtonClick"] }, { kind: "pipe", type: i6.AXTranslatorPipe, name: "trans" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
1034
1036
|
}
|
1035
1037
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.7", ngImport: i0, type: AXSelectBoxComponent, decorators: [{
|
1036
1038
|
type: Component,
|
1037
1039
|
args: [{ selector: 'ax-select-box', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: { style: 'width: 100%' }, providers: [
|
1038
1040
|
{ provide: AXValidatableComponent, useExisting: AXSelectBoxComponent },
|
1039
|
-
], template: "<ax-drop-down\n #d\n [size]=\"size\"\n [fitParent]=\"fitParent\"\n [dropdownWidth]=\"dropdownWidth\"\n [rtl]=\"rtl\"\n [showDropDownButton]=\"showDropDownButton\"\n [disabled]=\"disabled\"\n [readonly]=\"readonly\"\n (dropdownToggle)=\"dropdownToggleSelecBox($event)\"\n>\n <ng-container start>\n <ng-content select=\"[start]\"> </ng-content>\n </ng-container>\n <ng-container header>\n <div\n class=\"ax chips-container\"\n [class.multiline]=\"multiLine\"\n [style.padding]=\"selectedItems.length && multiLine ? '0.25rem' : ''\"\n >\n <div\n class=\"chips\"\n [class.chips-blank]=\"mode === 'single'\"\n [title]=\"item[textField]\"\n *ngFor=\"let item of selectedItems\"\n >\n <span\n class=\"chips-text\"\n [ngStyle]=\"{\n width:\n item[textField].length > 15 &&\n this.mode === 'multiple' &&\n !multiLine\n ? '110px'\n : 'auto'\n }\"\n >\n {{ item[textField] }}\n </span>\n <span\n class=\"close-icon\"\n (click)=\"handleItemRemoveClick(item)\"\n *ngIf=\"\n (readonly != true || itemRemove == true) &&\n disabled != true &&\n (allowNull == true || selectedItems.length > 1)\n \"\n >\n <i class=\"far fa-times close\"></i>\n </span>\n </div>\n <div class=\"search-wrapper\" (click)=\"onTextBoxClick($event)\">\n <ax-text-box\n #textBoxSelectBox\n [textAlign]=\"textAlign\"\n [placeholder]=\"selectedItems.length == 0 ? placeholder : ''\"\n [readonly]=\"readonly\"\n [disabled]=\"disabled\"\n (onkey)=\"handleKeyEvent($event)\"\n [size]=\"size\"\n (onFocus)=\"onFocusTextBox($event)\"\n >\n </ax-text-box>\n </div>\n </div>\n </ng-container>\n <ng-container end>\n <ng-content select=\"[end]\"> </ng-content>\n </ng-container>\n\n <ng-container panel>\n <div
|
1041
|
+
], template: "<ax-drop-down\n #d\n [size]=\"size\"\n [fitParent]=\"fitParent\"\n [dropdownWidth]=\"dropdownWidth\"\n [rtl]=\"rtl\"\n [showDropDownButton]=\"showDropDownButton\"\n [disabled]=\"disabled\"\n [readonly]=\"readonly\"\n (dropdownToggle)=\"dropdownToggleSelecBox($event)\"\n [attr.id]=\"axId\"\n [ngClass]=\"axClass\"\n>\n <ng-container start>\n <ng-content select=\"[start]\"> </ng-content>\n </ng-container>\n\n <ng-container header>\n <div\n class=\"ax chips-container\"\n [class.multiline]=\"multiLine\"\n [style.padding]=\"selectedItems.length && multiLine ? '0.25rem' : ''\"\n [attr.id]=\"axId + '-header'\"\n >\n <div\n class=\"chips\"\n [class.chips-blank]=\"mode === 'single'\"\n [title]=\"item[textField]\"\n *ngFor=\"let item of selectedItems\"\n [attr.id]=\"axId + '-chip-' + item[valueField]\"\n >\n <span\n class=\"chips-text\"\n [ngStyle]=\"{\n width:\n item[textField].length > 15 &&\n this.mode === 'multiple' &&\n !multiLine\n ? '110px'\n : 'auto'\n }\"\n >\n {{ item[textField] }}\n </span>\n <span\n class=\"close-icon\"\n (click)=\"handleItemRemoveClick(item)\"\n *ngIf=\"\n (readonly != true || itemRemove == true) &&\n disabled != true &&\n (allowNull == true || selectedItems.length > 1)\n \"\n >\n <i class=\"far fa-times close\"></i>\n </span>\n </div>\n <div class=\"search-wrapper\" (click)=\"onTextBoxClick($event)\">\n <ax-text-box\n #textBoxSelectBox\n [textAlign]=\"textAlign\"\n [placeholder]=\"selectedItems.length == 0 ? placeholder : ''\"\n [readonly]=\"readonly\"\n [disabled]=\"disabled\"\n (onkey)=\"handleKeyEvent($event)\"\n [size]=\"size\"\n (onFocus)=\"onFocusTextBox($event)\"\n [attr.id]=\"axId + '-text-box'\"\n >\n </ax-text-box>\n </div>\n </div>\n </ng-container>\n\n <ng-container end>\n <ng-content select=\"[end]\"> </ng-content>\n </ng-container>\n\n <ng-container panel>\n <div\n *ngIf=\"allowSearch\"\n class=\"search-wrapper\"\n style=\"padding: 0.7em\"\n [attr.id]=\"axId + '-search-wrapper'\"\n >\n <ax-search-box\n #serchBox\n [onDemandTranslate]=\"onDemandTranslate\"\n [(value)]=\"text\"\n (onkey)=\"handleKeyEventSearch($event)\"\n (textChanged)=\"textChanged($event)\"\n (onButtonClick)=\"textChanged($event)\"\n [attr.id]=\"axId + '-search-box'\"\n >\n </ax-search-box>\n </div>\n <div class=\"ax list-container\" [attr.id]=\"axId + '-list-container'\">\n <div\n #listContainer\n class=\"list-container-items\"\n (scroll)=\"scrolled($event)\"\n [attr.id]=\"axId + '-list'\"\n >\n <ng-container\n *ngIf=\"getItems().length > 0; then thenTemplate; else elseTemplate\"\n ></ng-container>\n <ng-template #thenTemplate>\n <div\n [class.ax-state-disabled]=\"isItemDisabled(item)\"\n class=\"list-item\"\n *ngFor=\"let item of getItems(); let i = index\"\n [class.focused]=\"i == currentfocusedIndex\"\n [class.selected]=\"isItemSelected(item)\"\n (click)=\"handleItemClick($event, item)\"\n [attr.id]=\"axId + '-list-item-' + i\"\n >\n <div style=\"display: flex\">\n <ax-check-box\n *ngIf=\"showCheckBox\"\n [size]=\"size\"\n [value]=\"isItemSelected(item)\"\n [disabled]=\"\n (!allowNull &&\n selectedItems.length === 1 &&\n isItemSelected(item)) ||\n isItemDisabled(item)\n \"\n (onClick)=\"handleItemClick($event, item)\"\n [attr.id]=\"axId + '-check-box-' + i\"\n >\n </ax-check-box>\n <ng-container *ngIf=\"rowTemplate; else elseTemplate\">\n <div\n style=\"\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n flex: 1;\n \"\n [title]=\"item[textField]\"\n [ngStyle]=\"\n showCheckBox ? { 'padding-inline-start': '0.5rem' } : ''\n \"\n >\n <ng-container\n *ngTemplateOutlet=\"\n rowTemplate;\n context: { $implicit: item }\n \"\n >\n </ng-container>\n </div>\n </ng-container>\n <ng-template #elseTemplate>\n <div\n style=\"\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n flex: 1;\n \"\n [title]=\"item[textField]\"\n [ngStyle]=\"\n showCheckBox ? { 'padding-inline-start': '0.5rem' } : ''\n \"\n >\n {{ item[textField] }}\n </div>\n </ng-template>\n </div>\n </div>\n </ng-template>\n <div *ngIf=\"showLoading\" class=\"ax-pad-sm\" style=\"text-align: center\">\n <i\n class=\"far fa-spinner-third fa-pulse fa-2x\"\n style=\"color: var(--ax-primary-color)\"\n ></i>\n </div>\n <!-- <ax-loading-indicator ></ax-loading-indicator> -->\n <ng-template #elseTemplate>\n <ng-container\n *ngIf=\"\n showLoading == true;\n then searchTemplate;\n else noDataTemplate\n \"\n ></ng-container>\n <ng-template #searchTemplate>\n <div class=\"list-item\">\n {{ 'common.search' | trans }}\n </div>\n </ng-template>\n <ng-template #noDataTemplate>\n <div class=\"list-item\">\n {{ 'common.noDataFound' | trans }}\n </div>\n </ng-template>\n </ng-template>\n </div>\n </div>\n </ng-container>\n</ax-drop-down>\n" }]
|
1040
1042
|
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: i0.NgZone }], propDecorators: { showDropDownButton: [{
|
1041
1043
|
type: Input
|
1042
1044
|
}], rowTemplate: [{
|
@@ -1128,9 +1130,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.7", ngImpor
|
|
1128
1130
|
type: Output
|
1129
1131
|
}], selectedItems: [{
|
1130
1132
|
type: Input
|
1133
|
+
}], axId: [{
|
1134
|
+
type: Input
|
1135
|
+
}], axClass: [{
|
1136
|
+
type: Input
|
1131
1137
|
}], selectedValuesChange: [{
|
1132
1138
|
type: Output
|
1133
1139
|
}], selectedValues: [{
|
1134
1140
|
type: Input
|
1135
1141
|
}] } });
|
1136
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0Ym94LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9zcmMvbGliL3NlbGVjdGJveC9zZWxlY3Rib3guY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL3NyYy9saWIvc2VsZWN0Ym94L3NlbGVjdGJveC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3hDLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osVUFBVSxFQUNWLFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUNOLE1BQU0sRUFDTixXQUFXLEVBQ1gsU0FBUyxFQUNULGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbEMsT0FBTyxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3BFLE9BQU8sRUFJTCxzQkFBc0IsR0FDdkIsTUFBTSx1QkFBdUIsQ0FBQztBQUMvQixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbkQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFFNUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDckUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDeEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9DQUFvQyxDQUFD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QkFBbEIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFFSSxXQUFXO3NCQUFwQixNQUFNO2dCQUVHLE1BQU07c0JBQWYsTUFBTTtnQkFFRyxPQUFPO3NCQUFoQixNQUFNO2dCQUlJLEtBQUs7c0JBRGYsS0FBSztnQkFzQk4sZ0JBQWdCO3NCQURmLE1BQU07Z0JBS1AsbUJBQW1CO3NCQURsQixNQUFNO2dCQUtJLGFBQWE7c0JBRHZCLEtBQUs7Z0JBME1OLG9CQUFvQjtzQkFEbkIsTUFBTTtnQkFNSSxjQUFjO3NCQUR4QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVhDb25maWcgfSBmcm9tICdAYWNvcmV4L2NvcmUnO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgTmdab25lLFxuICBPdXRwdXQsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGRpZmZlcmVuY2VCeSB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtcbiAgQVhCYXNlSW5wdXRDb21wb25lbnQsXG4gIEFYQmFzZVNpemFibGVDb21wb25lbnQsXG4gIEFYRWxlbWVudFNpemUsXG4gIEFYVmFsaWRhdGFibGVDb21wb25lbnQsXG59IGZyb20gJy4uL2Jhc2UvZWxlbWVudC5jbGFzcyc7XG5pbXBvcnQgeyBBWEJhc2VFdmVudCB9IGZyb20gJy4uL2Jhc2UvZXZlbnRzLmNsYXNzJztcbmltcG9ydCB7IEFYRGF0YVNvdXJjZUNvbXBvbmVudCB9IGZyb20gJy4uL2RhdGEtc291cmNlL2RhdGFzb3VyY2UuY29tcG9uZW50JztcbmltcG9ydCB7IEFYRGF0YVNvdXJjZVJlYWRQYXJhbXMgfSBmcm9tICcuLi9kYXRhLXNvdXJjZS9yZWFkLXBhcmFtJztcbmltcG9ydCB7IEFYRHJvcGRvd25Db21wb25lbnQgfSBmcm9tICcuLi9kcm9wZG93bi9kcm9wZG93bi5jb21wb25lbnQnO1xuaW1wb3J0IHsgQVhTZWFyY2hCb3hDb21wb25lbnQgfSBmcm9tICcuLi9zZWFyY2hib3gvc2VhcmNoYm94LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBWFRleHRCb3hDb21wb25lbnQgfSBmcm9tICcuLi90ZXh0Ym94L3RleHRib3guY29tcG9uZW50JztcbmltcG9ydCB7IEFYVmFsaWRhdGlvbiB9IGZyb20gJy4uL3ZhbGlkYXRpb24vdmFsaWRhdGlvbi5jb21wb25lbnQnO1xuZXhwb3J0IGNsYXNzIEFYU2VsZWN0Qm94U2VsZWN0aW9uQ2hhbmdlZEV2ZW50IGV4dGVuZHMgQVhCYXNlRXZlbnQge1xuICBjb25zdHJ1Y3RvcihcbiAgICBjb21wb25lbnQ6IGFueSxcbiAgICBwdWJsaWMgc2VsZWN0ZWRJdGVtczogYW55W10sXG4gICAgcHVibGljIHNlbGVjdGVkVmFsdWVzOiBhbnlbXSB8IGFueVxuICApIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuY29tcG9uZW50ID0gY29tcG9uZW50O1xuICB9XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2F4LXNlbGVjdC1ib3gnLFxuICB0ZW1wbGF0ZVVybDogJy4vc2VsZWN0Ym94LmNvbXBvbmVudC5odG1sJyxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGhvc3Q6IHsgc3R5bGU6ICd3aWR0aDogMTAwJScgfSxcbiAgcHJvdmlkZXJzOiBbXG4gICAgeyBwcm92aWRlOiBBWFZhbGlkYXRhYmxlQ29tcG9uZW50LCB1c2VFeGlzdGluZzogQVhTZWxlY3RCb3hDb21wb25lbnQgfSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgQVhTZWxlY3RCb3hDb21wb25lbnRcbiAgZXh0ZW5kcyBBWFZhbGlkYXRhYmxlQ29tcG9uZW50XG4gIGltcGxlbWVudHMgQVhCYXNlU2l6YWJsZUNvbXBvbmVudCwgQVhCYXNlSW5wdXRDb21wb25lbnRcbntcbiAgQElucHV0KCkgc2hvd0Ryb3BEb3duQnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcblxuICBAQ29udGVudENoaWxkKFRlbXBsYXRlUmVmLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICByb3dUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICBASW5wdXQoKVxuICByb3dJbnB1dFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBAVmlld0NoaWxkKEFYVGV4dEJveENvbXBvbmVudCwgeyBzdGF0aWM6IHRydWUgfSlcbiAgc3BhbjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG5cbiAgQFZpZXdDaGlsZChBWFRleHRCb3hDb21wb25lbnQsIHsgc3RhdGljOiB0cnVlIH0pXG4gIHRleHRib3g6IEFYVGV4dEJveENvbXBvbmVudDtcblxuICBAVmlld0NoaWxkKCdsaXN0Q29udGFpbmVyJywgeyBzdGF0aWM6IHRydWUgfSlcbiAgbGlzdENvbnRhaW5lcjogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XG5cbiAgQFZpZXdDaGlsZCgnc2VyY2hCb3gnLCB7IHN0YXRpYzogZmFsc2UgfSlcbiAgc2VyY2hCb3g6IEFYU2VhcmNoQm94Q29tcG9uZW50O1xuXG4gIEBWaWV3Q2hpbGQoJ3RleHRCb3hTZWxlY3RCb3gnLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICB0ZXh0Qm94U2VsZWN0Qm94OiBBWFRleHRCb3hDb21wb25lbnQ7XG5cbiAgQElucHV0KCkgc2hvd0NoZWNrQm94OiBib29sZWFuID0gdHJ1ZTtcblxuICBASW5wdXQoKSByZWFkb25seTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIHJ0bDogYm9vbGVhbiA9IEFYQ29uZmlnLmdldCgnbGF5b3V0LnJ0bCcpO1xuXG4gIEBJbnB1dCgpIGRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KCkgcGxhY2Vob2xkZXI6IHN0cmluZztcblxuICBASW5wdXQoKSBzaXplOiBBWEVsZW1lbnRTaXplID0gJ21kJztcblxuICBASW5wdXQoKSBhbGxvd051bGw6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIEBJbnB1dCgpIHRleHRBbGlnbjogJ3JpZ2h0JyB8ICdsZWZ0JyB8IG51bGwgPSBudWxsO1xuXG4gIEBJbnB1dCgpIGJ1ZmZlclNpemU6IG51bWJlciA9IDIwO1xuXG4gIEBJbnB1dCgpIHJlbW90ZU9wZXJhdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIGZpdFBhcmVudDogYm9vbGVhbiA9IHRydWU7XG5cbiAgQElucHV0KCkgZHJvcGRvd25XaWR0aDogc3RyaW5nID0gJzMwMHB4JztcblxuICBASW5wdXQoKSBtdWx0aUxpbmUgPSBmYWxzZTtcblxuICBAT3V0cHV0KClcbiAgZHJvcGRvd25Ub2dnbGU6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIC8vIHRoaXMgaW5wdXQgaXMgUHJpdmF0ZSBhbmQgb25seSB1c2UgaW4gTE9WXG5cbiAgQElucHV0KCkgb25EZW1hbmRUcmFuc2xhdGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBjdXJyZW50Zm9jdXNlZEluZGV4OiBudW1iZXIgPSAtMTtcbiAgc2hvd0xvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBza2lwOiBudW1iZXIgPSAtMTtcbiAgc2VhcmNoVGV4dDogc3RyaW5nID0gJyc7XG4gIC8vIEBJbnB1dCgpXG4gIC8vIGNoaXBzV2lkdGg6IHN0cmluZyA9ICcnO1xuXG4gIHRleHQ6IHN0cmluZyA9ICcnO1xuICB0b3RhbENvdW50OiBudW1iZXIgPSAwO1xuXG4gIEBDb250ZW50Q2hpbGQoQVhEYXRhU291cmNlQ29tcG9uZW50LCB7IHN0YXRpYzogdHJ1ZSB9KVxuICBwcml2YXRlIF9jb250ZW50RGF0YVNvdXJjZTogQVhEYXRhU291cmNlQ29tcG9uZW50O1xuXG4gIHByaXZhdGUgX2RhdGFTb3VyY2U6IEFYRGF0YVNvdXJjZUNvbXBvbmVudDtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgZ2V0IGRhdGFTb3VyY2UoKTogQVhEYXRhU291cmNlQ29tcG9uZW50IHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YVNvdXJjZSA/IHRoaXMuX2RhdGFTb3VyY2UgOiB0aGlzLl9jb250ZW50RGF0YVNvdXJjZTtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgZGF0YVNvdXJjZSh2OiBBWERhdGFTb3VyY2VDb21wb25lbnQpIHtcbiAgICB0aGlzLl9kYXRhU291cmNlID0gdjtcbiAgfVxuXG4gIEBDb250ZW50Q2hpbGQoQVhWYWxpZGF0aW9uLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICBwcml2YXRlIF9jb250ZW50VmFsaWRhdGlvbjogQVhWYWxpZGF0aW9uO1xuXG4gIHByaXZhdGUgX3ZhbGlkYXRpb246IEFYVmFsaWRhdGlvbjtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgZ2V0IHZhbGlkYXRpb24oKTogQVhWYWxpZGF0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5fdmFsaWRhdGlvbiA/IHRoaXMuX3ZhbGlkYXRpb24gOiB0aGlzLl9jb250ZW50VmFsaWRhdGlvbjtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgdmFsaWRhdGlvbih2OiBBWFZhbGlkYXRpb24pIHtcbiAgICB0aGlzLl92YWxpZGF0aW9uID0gdjtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIHJlZjogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIHpvbmU6IE5nWm9uZVxuICApIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgQFZpZXdDaGlsZCgnZCcsIHsgc3RhdGljOiB0cnVlIH0pXG4gIGRyb3Bkb3duOiBBWERyb3Bkb3duQ29tcG9uZW50O1xuXG4gIEBJbnB1dCgpIGRpc2FibGVkQ2FsbGJhY2s6IChlOiB7IGl0ZW06IGFueTsgaW5kZXg6IG51bWJlciB9KSA9PiBib29sZWFuO1xuXG4gIEBJbnB1dCgpIGFsbG93U2VhcmNoOiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KCkgdGV4dEZpZWxkOiBzdHJpbmcgPSAndGV4dCc7XG4gIEBJbnB1dCgpIHZhbHVlRmllbGQ6IHN0cmluZyA9ICd2YWx1ZSc7XG4gIEBJbnB1dCgpIGRpc2FibGVkRmllbGQ6IHN0cmluZyA9ICdkaXNhYmxlZCc7XG4gIEBJbnB1dCgpIG1vZGU6ICdzaW5nbGUnIHwgJ211bHRpcGxlJyA9ICdzaW5nbGUnO1xuICBpdGVtUmVtb3ZlOiBib29sZWFuID0gZmFsc2U7XG4gIEBPdXRwdXQoKSBpdGVtc0NoYW5nZTogRXZlbnRFbWl0dGVyPGFueVtdPiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55W10+KCk7XG5cbiAgQE91dHB1dCgpIG9uQmx1cjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBAT3V0cHV0KCkgb25Gb2N1czogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBwcml2YXRlIF9pdGVtczogYW55W10gPSBbXTtcbiAgQElucHV0KClcbiAgcHVibGljIGdldCBpdGVtcygpOiBhbnlbXSB7XG4gICAgcmV0dXJuIHRoaXMuX2l0ZW1zO1xuICB9XG4gIHB1YmxpYyBzZXQgaXRlbXModjogYW55W10pIHtcbiAgICB0aGlzLl9pdGVtcyA9IHY7XG4gICAgaWYgKHRoaXMuaXRlbXNDaGFuZ2UpIHtcbiAgICAgIHRoaXMuaXRlbXNDaGFuZ2UuZW1pdCh2KTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXRlbXNTdGF0dXNPYnNlcnZlcikge1xuICAgICAgdGhpcy5pdGVtc1N0YXR1c09ic2VydmVyLm5leHQodGhpcy5pdGVtcy5sZW5ndGgpO1xuICAgIH1cbiAgfVxuXG4gIGhhc1NlbGVjdGVkVmFsdWU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXRlbXNGaWx0ZXJlZDogYW55W10gPSBbXTtcblxuICAvLyAjZW5kcmVnaW9uXG5cbiAgZHJvcERvd25EaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBPdXRwdXQoKVxuICBzZWxlY3Rpb25DaGFuZ2VkOiBFdmVudEVtaXR0ZXI8QVhTZWxlY3RCb3hTZWxlY3Rpb25DaGFuZ2VkRXZlbnQ+ID1cbiAgICBuZXcgRXZlbnRFbWl0dGVyPEFYU2VsZWN0Qm94U2VsZWN0aW9uQ2hhbmdlZEV2ZW50PigpO1xuXG4gIEBPdXRwdXQoKVxuICBzZWxlY3RlZEl0ZW1zQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55W10+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnlbXT4oKTtcblxuICBwcml2YXRlIF9zZWxlY3RlZEl0ZW1zOiBhbnlbXSA9IFtdO1xuICBASW5wdXQoKVxuICBwdWJsaWMgZ2V0IHNlbGVjdGVkSXRlbXMoKTogYW55W10ge1xuICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZEl0ZW1zIHx8IFtdO1xuICB9XG4gIHB1YmxpYyBzZXQgc2VsZWN0ZWRJdGVtcyh2OiBhbnlbXSkge1xuICAgIHRoaXMuc2V0U2VsZWN0ZWRJdGVtc0NoYW5nZSh2KTtcbiAgICAvLyBpZiAoIXYpIHtcbiAgICAvLyAgIHYgPSBbXTtcbiAgICAvLyB9XG5cbiAgICAvLyBjb25zdCBvbGQgPSB0aGlzLnNlbGVjdGVkSXRlbXM7XG4gICAgLy8gaWYgKEpTT04uc3RyaW5naWZ5KG9sZCkgIT09IEpTT04uc3RyaW5naWZ5KHYpKSB7XG4gICAgLy8gICB0aGlzLl9zZWxlY3RlZEl0ZW1zID0gdGhpcy5tb2RlID09ICdzaW5nbGUnID8gdi5zbGljZSgwLCAxKSA6IFsuLi5uZXcgU2V0KHYpXTsgLy9bLi4ubmV3IFNldCh2WzBdKV0gOiBbLi4ubmV3IFNldCh2KV07XG4gICAgLy8gICB0aGlzLl9zZWxlY3RlZEl0ZW1zLmZvckVhY2goKGMpID0+IChjLnNlbGVjdGVkID0gdHJ1ZSkpO1xuICAgIC8vICAgdGhpcy5zZWxlY3RlZEl0ZW1zQ2hhbmdlLmVtaXQodGhpcy5fc2VsZWN0ZWRJdGVtcyk7XG4gICAgLy8gICB0aGlzLnNlbGVjdGVkVmFsdWVzQ2hhbmdlLmVtaXQodGhpcy5zZWxlY3RlZFZhbHVlcyk7XG4gICAgLy8gICB0aGlzLmNsZWFyVmFsaWRhdGlvblN0eWxlKHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQpO1xuICAgIC8vICAgdGhpcy53YWl0Rm9yRGF0YSgoKSA9PiB7XG4gICAgLy8gICAgIGlmICh0aGlzLl9zZWxlY3RlZEl0ZW1zKSB7XG4gICAgLy8gICAgICAgdGhpcy5pdGVtcy5mb3JFYWNoKChjKSA9PiAoYy5zZWxlY3RlZCA9IHRoaXMuX3NlbGVjdGVkSXRlbXMuc29tZSgoaSkgPT4gaVt0aGlzLnZhbHVlRmllbGRdID09IGNbdGhpcy52YWx1ZUZpZWxkXSkpKTtcbiAgICAvLyAgICAgfVxuICAgIC8vICAgfSk7XG4gICAgLy8gfVxuICB9XG5cbiAgc2V0U2VsZWN0ZWRJdGVtc0NoYW5nZSh2OiBhbnlbXSwgb2xkOiBhbnlbXSA9IHRoaXMuc2VsZWN0ZWRJdGVtcykge1xuICAgIGlmICghdikge1xuICAgICAgdiA9IFtdO1xuICAgIH1cbiAgICAvLyBjb25zdCBvbGQgPSB0aGlzLnNlbGVjdGVkSXRlbXM7XG4gICAgdmFyIGYgPSBkaWZmZXJlbmNlQnkob2xkLCB2LCB0aGlzLnZhbHVlRmllbGQpO1xuICAgIHZhciBzID0gZGlmZmVyZW5jZUJ5KHYsIG9sZCwgdGhpcy52YWx1ZUZpZWxkKTtcbiAgICAvLyBpZiAoSlNPTi5zdHJpbmdpZnkob2xkKSAhPT0gSlNPTi5zdHJpbmdpZnkodikpIHtcbiAgICBpZiAoZi5sZW5ndGggIT0gMCB8fCBzLmxlbmd0aCAhPSAwKSB7XG4gICAgICB0aGlzLl9zZWxlY3RlZEl0ZW1zID1cbiAgICAgICAgdGhpcy5tb2RlID09ICdzaW5nbGUnID8gdi5zbGljZSgwLCAxKSA6IFsuLi5uZXcgU2V0KHYpXTsgLy9bLi4ubmV3IFNldCh2WzBdKV0gOiBbLi4ubmV3IFNldCh2KV07XG4gICAgICB0aGlzLl9zZWxlY3RlZEl0ZW1zLmZvckVhY2goKGMpID0+IChjLnNlbGVjdGVkID0gdHJ1ZSkpO1xuICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zQ2hhbmdlLmVtaXQodGhpcy5fc2VsZWN0ZWRJdGVtcyk7XG4gICAgICB0aGlzLnNlbGVjdGVkVmFsdWVzQ2hhbmdlLmVtaXQodGhpcy5zZWxlY3RlZFZhbHVlcyk7XG4gICAgICB0aGlzLmNsZWFyVmFsaWRhdGlvblN0eWxlKHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgdGhpcy53YWl0Rm9yRGF0YSgoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9zZWxlY3RlZEl0ZW1zKSB7XG4gICAgICAgICAgdGhpcy5pdGVtcy5mb3JFYWNoKFxuICAgICAgICAgICAgKGMpID0+XG4gICAgICAgICAgICAgIChjLnNlbGVjdGVkID0gdGhpcy5fc2VsZWN0ZWRJdGVtcy5zb21lKFxuICAgICAgICAgICAgICAgIChpKSA9PiBpW3RoaXMudmFsdWVGaWVsZF0gPT0gY1t0aGlzLnZhbHVlRmllbGRdXG4gICAgICAgICAgICAgICkpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgaWYgKHRoaXMucm93VGVtcGxhdGUgPT09IHVuZGVmaW5lZCAmJiB0aGlzLnJvd0lucHV0VGVtcGxhdGUgIT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnJvd1RlbXBsYXRlID0gdGhpcy5yb3dJbnB1dFRlbXBsYXRlO1xuICAgIH1cbiAgICBpZiAodGhpcy5ydGwgPT0gbnVsbCkge1xuICAgICAgdGhpcy5ydGwgPVxuICAgICAgICB3aW5kb3dcbiAgICAgICAgICAuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLnJlZi5uYXRpdmVFbGVtZW50LCBudWxsKVxuICAgICAgICAgIC5nZXRQcm9wZXJ0eVZhbHVlKCdkaXJlY3Rpb24nKSA9PT0gJ3J0bCc7XG4gICAgfVxuICB9XG5cbiAgc2Nyb2xsZWQoZSkge1xuICAgIGlmIChcbiAgICAgIHRoaXMucmVtb3RlT3BlcmF0aW9uICYmXG4gICAgICB0aGlzLnRvdGFsQ291bnQgPiB0aGlzLml0ZW1zLmxlbmd0aCAmJlxuICAgICAgdGhpcy5saXN0Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsSGVpZ2h0ICE9IDAgJiZcbiAgICAgIHRoaXMubGlzdENvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbEhlaWdodCAtXG4gICAgICAgIHRoaXMubGlzdENvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcCAtXG4gICAgICAgIDMwMCA8XG4gICAgICAgIDUwXG4gICAgKSB7XG4gICAgICBpZiAodGhpcy5za2lwICE9PSB0aGlzLml0ZW1zLmxlbmd0aCkge1xuICAgICAgICB0aGlzLnNob3dMb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5za2lwID0gdGhpcy5pdGVtcy5sZW5ndGg7XG4gICAgICAgIGNvbnN0IHBhcmFtczogQVhEYXRhU291cmNlUmVhZFBhcmFtcyA9IHt9O1xuICAgICAgICBwYXJhbXMuc2tpcCA9IHRoaXMuaXRlbXMubGVuZ3RoO1xuICAgICAgICBwYXJhbXMudGFrZSA9IHRoaXMuYnVmZmVyU2l6ZTsgLy8qIChNYXRoLmZsb29yKHRoaXMuaXRlbXMubGVuZ3RoIC8gdGhpcy5idWZmZXJTaXplKSArIDEpO1xuICAgICAgICBpZiAodGhpcy50ZXh0Ym94KSB7XG4gICAgICAgICAgcGFyYW1zLnNlYXJjaFRleHQgPSB0aGlzLnRleHQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGFyYW1zLnNlYXJjaFRleHQgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZmV0Y2gocGFyYW1zKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBzZXRTZWxlY3RlZEl0ZW1zKHY6IGFueVtdLCBpc1VzZXJJbnB1dDogYm9vbGVhbikge1xuICAgIGxldCBjaGFuZ2VkID0gZmFsc2U7XG4gICAgaWYgKGlzVXNlcklucHV0KSB7XG4gICAgICBjaGFuZ2VkID0gSlNPTi5zdHJpbmdpZnkodikgIT09IEpTT04uc3RyaW5naWZ5KHRoaXMuc2VsZWN0ZWRJdGVtcyk7XG4gICAgfVxuICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IHY7XG4gICAgdGhpcy5zZXRTZWxlY3RlZEluZGV4KCk7XG4gICAgaWYgKGlzVXNlcklucHV0ICYmIGNoYW5nZWQpIHtcbiAgICAgIHRoaXMuZW1pdFNlbGVjdGlvbkNoYW5nZWRFdmVudCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2VhcmNoQ2hhbmdlT2JzZXJ2ZXI6IGFueTtcblxuICBkZWxheTogbnVtYmVyID0gNTAwO1xuXG4gIHRleHRDaGFuZ2VkKGUpIHtcbiAgICBpZiAoXG4gICAgICAoZS52YWx1ZSA9PT0gbnVsbCB8fCBlLnZhbHVlID09PSB1bmRlZmluZWQgfHwgZS52YWx1ZSA9PT0gJycpICYmXG4gICAgICAoZS5vbGRWYWx1ZSA9PT0gbnVsbCB8fCBlLm9sZFZhbHVlID09PSB1bmRlZmluZWQgfHwgZS5vbGRWYWx1ZSA9PT0gJycpXG4gICAgKSB7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY3VycmVudGZvY3VzZWRJbmRleCA9IC0xO1xuICAgICAgaWYgKHRoaXMucmVtb3RlT3BlcmF0aW9uKSB7XG4gICAgICAgIHRoaXMuc2VhcmNoVGV4dCA9IHRoaXMudGV4dDtcbiAgICAgICAgLy8gIHRoaXMuc2VhcmNoVGV4dCA9IGUudmFsdWU7XG4gICAgICAgIC8vIHRoaXMudGV4dCA9IGUudmFsdWU7XG4gICAgICAgIC8vIHRoaXMuaXRlbXMgPSBbXTtcbiAgICAgICAgaWYgKHRoaXMuaXRlbXMpIHtcbiAgICAgICAgICBsZXQgdCA9IHRoaXMuaXRlbXMubGVuZ3RoO1xuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdDsgaSsrKSB7XG4gICAgICAgICAgICB0aGlzLml0ZW1zLnBvcCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHRoaXMuaXRlbXMuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgICAgICAvLyAgIHRoaXMuaXRlbXMucG9wKCk7XG4gICAgICAgIC8vIH0pO1xuICAgICAgICBjb25zdCBwYXJhbXM6IEFYRGF0YVNvdXJjZVJlYWRQYXJhbXMgPSB7fTtcbiAgICAgICAgcGFyYW1zLnNlYXJjaFRleHQgPSB0aGlzLnRleHQ7XG4gICAgICAgIC8vIHBhcmFtcy5zZWFyY2hUZXh0ID0gZS52YWx1ZTtcbiAgICAgICAgcGFyYW1zLnNraXAgPSAwO1xuICAgICAgICBwYXJhbXMudGFrZSA9IHRoaXMuYnVmZmVyU2l6ZTtcbiAgICAgICAgdGhpcy5mZXRjaChwYXJhbXMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlzSXRlbURpc2FibGVkKGl0ZW06IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmIChpdGVtW3RoaXMuZGlzYWJsZWRGaWVsZF0gPT0gdHJ1ZSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmICh0aGlzLmRpc2FibGVkQ2FsbGJhY2spIHtcbiAgICAgIHJldHVybiB0aGlzLmRpc2FibGVkQ2FsbGJhY2soeyBpdGVtLCBpbmRleDogLTEgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBvbkJ1dHRvbkNsaWNrKGUpIHt9XG5cbiAgcHJpdmF0ZSBzZXRTZWxlY3RlZEluZGV4KHNpZ246IC0xIHwgMSB8IG51bGwgPSBudWxsKTogdm9pZCB7XG4gICAgaWYgKHNpZ24gPT0gbnVsbCkge1xuICAgICAgaWYgKCF0aGlzLnJlbW90ZU9wZXJhdGlvbiAmJiB0aGlzLnRleHQgJiYgdGhpcy50ZXh0ICE9PSAnJykge1xuICAgICAgICB0aGlzLmN1cnJlbnRmb2N1c2VkSW5kZXggPSB0aGlzLml0ZW1zXG4gICAgICAgICAgLmZpbHRlcigoYykgPT5cbiAgICAgICAgICAgIChjW3RoaXMudGV4dEZpZWxkXSBhcyBzdHJpbmcpXG4gICAgICAgICAgICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICAgIC5pbmNsdWRlcyh0aGlzLnRleHQudG9Mb3dlckNhc2UoKSlcbiAgICAgICAgICApXG4gICAgICAgICAgLmluZGV4T2YodGhpcy5zZWxlY3RlZEl0ZW1zW3RoaXMuc2VsZWN0ZWRJdGVtcy5sZW5ndGggLSAxXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmN1cnJlbnRmb2N1c2VkSW5kZXggPSB0aGlzLml0ZW1zLmluZGV4T2YoXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zW3RoaXMuc2VsZWN0ZWRJdGVtcy5sZW5ndGggLSAxXVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzaWduID09PSAtMSA/IHRoaXMuY3VycmVudGZvY3VzZWRJbmRleC0tIDogdGhpcy5jdXJyZW50Zm9jdXNlZEluZGV4Kys7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucmVtb3RlT3BlcmF0aW9uKSB7XG4gICAgICB0aGlzLml0ZW1zRmlsdGVyZWQgPSB0aGlzLml0ZW1zO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLml0ZW1zRmlsdGVyZWQgPSB0aGlzLnRleHRcbiAgICAgICAgPyB0aGlzLml0ZW1zLmZpbHRlcigoYykgPT5cbiAgICAgICAgICAgIChjW3RoaXMudGV4dEZpZWxkXSBhcyBzdHJpbmcpXG4gICAgICAgICAgICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICAgIC5pbmNsdWRlcyh0aGlzLnRleHQudG9Mb3dlckNhc2UoKSlcbiAgICAgICAgICApXG4gICAgICAgIDogdGhpcy5pdGVtcztcbiAgICB9XG5cbiAgICB0aGlzLmN1cnJlbnRmb2N1c2VkSW5kZXggPVxuICAgICAgdGhpcy5jdXJyZW50Zm9jdXNlZEluZGV4IDwgMFxuICAgICAgICA/IDBcbiAgICAgICAgOiB0aGlzLmN1cnJlbnRmb2N1c2VkSW5kZXggPj0gdGhpcy5pdGVtc0ZpbHRlcmVkLmxlbmd0aFxuICAgICAgICA/IHRoaXMuaXRlbXNGaWx0ZXJlZC5sZW5ndGggLSAxXG4gICAgICAgIDogdGhpcy5jdXJyZW50Zm9jdXNlZEluZGV4O1xuICAgIC8vXG4gICAgLy8gc2V0IHNjcm9sbFxuICAgIGlmICh0aGlzLmxpc3RDb250YWluZXIpIHtcbiAgICAgIHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgIGNvbnN0IGl0ZW1EaXYgPSB0aGlzLmxpc3RDb250YWluZXIubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgICAgIGAubGlzdC1pdGVtOm50aC1jaGlsZCgke3RoaXMuY3VycmVudGZvY3VzZWRJbmRleH0pYFxuICAgICAgICApO1xuICAgICAgICBpZiAoaXRlbURpdikge1xuICAgICAgICAgIGl0ZW1EaXYuc2Nyb2xsSW50b1ZpZXcoeyBiZWhhdmlvcjogJ3Ntb290aCcgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIEBPdXRwdXQoKVxuICBzZWxlY3RlZFZhbHVlc0NoYW5nZTogRXZlbnRFbWl0dGVyPGFueVtdIHwgYW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8XG4gICAgYW55W10gfCBhbnlcbiAgPigpO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBnZXQgc2VsZWN0ZWRWYWx1ZXMoKTogYW55W10gfCBhbnkge1xuICAgIGlmICh0aGlzLm1vZGUgPT09ICdzaW5nbGUnKSB7XG4gICAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWRJdGVtcy5tYXAoKGMpID0+IGNbdGhpcy52YWx1ZUZpZWxkXSlbMF07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZEl0ZW1zLm1hcCgoYykgPT4gY1t0aGlzLnZhbHVlRmllbGRdKSB8fCBbXTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc2V0IHNlbGVjdGVkVmFsdWVzKHY6IGFueVtdIHwgYW55KSB7XG4gICAgaWYgKHRoaXMuY29tcGFyZVNlbGVjdGVkVmFsdWVzKHYpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh2ID09IG51bGwpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IFtdO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh2ICE9IFtdISAmJiB2ICE9ICcnICYmIHYgIT0gbnVsbCkge1xuICAgICAgICAgIHRoaXMuaGFzU2VsZWN0ZWRWYWx1ZSA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLndhaXRGb3JEYXRhKCgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5tb2RlID09PSAnc2luZ2xlJykge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXRlbXMuZmlsdGVyKChjKSA9PiB2ID09IGNbdGhpcy52YWx1ZUZpZWxkXSkpIHtcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gdGhpcy5pdGVtcy5maWx0ZXIoXG4gICAgICAgICAgICAgICAgKGMpID0+IHYgPT0gY1t0aGlzLnZhbHVlRmllbGRdXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodikpIHtcbiAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRJdGVtcy5sZW5ndGggPiB2Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IHRoaXMuc2VsZWN0ZWRJdGVtcy5maWx0ZXIoKGMpID0+XG4gICAgICAgICAgICAgICAgICB2LmluY2x1ZGVzKGNbdGhpcy52YWx1ZUZpZWxkXSlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGxldCBhZGRJZCA9IFtdO1xuICAgICAgICAgICAgICAgIHYuZm9yRWFjaCgodklkKSA9PiB7XG4gICAgICAgICAgICAgICAgICBhZGRJZC5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgW3RoaXMudmFsdWVGaWVsZF06IHZJZCxcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgbGV0IG5ld0lkID0gZGlmZmVyZW5jZUJ5KFxuICAgICAgICAgICAgICAgICAgYWRkSWQsXG4gICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMsXG4gICAgICAgICAgICAgICAgICB0aGlzLnZhbHVlRmllbGRcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGxldCB2diA9IFtdO1xuICAgICAgICAgICAgICAgIG5ld0lkLmZvckVhY2goKHJjKSA9PiB7XG4gICAgICAgICAgICAgICAgICB2di5wdXNoKHJjW3RoaXMudmFsdWVGaWVsZF0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNcbiAgICAgICAgICAgICAgICAgIC5maWx0ZXIoKGMpID0+IHZ2LmluY2x1ZGVzKGNbdGhpcy52YWx1ZUZpZWxkXSkpXG4gICAgICAgICAgICAgICAgICAuZm9yRWFjaCgocmVzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5wdXNoKHJlcyk7XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAvLyAgdGhpcy5zZWxlY3RlZEl0ZW1zLnB1c2godGhpcy5pdGVtcy5maWx0ZXIoKGMpID0+IHZ2LmluY2x1ZGVzKGNbdGhpcy52YWx1ZUZpZWxkXSkpKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFNlbGVjdGVkSXRlbXNDaGFuZ2UoXG4gICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMsXG4gICAgICAgICAgICAgICAgICB2di5sZW5ndGggPiAwID8gWzFdIDogdGhpcy5zZWxlY3RlZEl0ZW1zXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIC8vICB0aGlzLnNlbGVjdGVkSXRlbXMgPSB0aGlzLml0ZW1zLmZpbHRlcigoYykgPT4gdi5pbmNsdWRlcyhjW3RoaXMudmFsdWVGaWVsZF0pKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodikge1xuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSB0aGlzLml0ZW1zLmZpbHRlcihcbiAgICAgICAgICAgICAgICAoYykgPT4gdiA9PT0gY1t0aGlzLnZhbHVlRmllbGRdXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlc0NoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWRWYWx1ZXMpO1xuICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjb21wYXJlU2VsZWN0ZWRWYWx1ZXMobmV3VmFsdWU6IGFueVtdIHwgYW55KSB7XG4gICAgY29uc3QgY3VycmVudFZhbHVlID0gdGhpcy5zZWxlY3RlZFZhbHVlcztcbiAgICByZXR1cm4gKFxuICAgICAgKGN1cnJlbnRWYWx1ZSA9PSBudWxsICYmIG5ld1ZhbHVlID09IG51bGwpIHx8XG4gICAgICBKU09OLnN0cmluZ2lmeShjdXJyZW50VmFsdWUpID09PSBKU09OLnN0cmluZ2lmeShuZXdWYWx1ZSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRTZWxlY3RlZFZhbHVlcyh2OiBhbnlbXSB8IGFueSwgaXNVc2VySW5wdXQ6IGJvb2xlYW4pIHtcbiAgICBjb25zdCBjaGFuZ2VkID0gaXNVc2VySW5wdXQgPyAhdGhpcy5jb21wYXJlU2VsZWN0ZWRWYWx1ZXModikgOiBmYWxzZTtcbiAgICB0aGlzLnNlbGVjdGVkVmFsdWVzID0gdjtcbiAgICBpZiAoaXNVc2VySW5wdXQgJiYgY2hhbmdlZCkge1xuICAgICAgdGhpcy5lbWl0U2VsZWN0aW9uQ2hhbmdlZEV2ZW50KCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBlbWl0U2VsZWN0aW9uQ2hhbmdlZEV2ZW50KCkge1xuICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZXNDaGFuZ2UuZW1pdCh0aGlzLnNlbGVjdGVkVmFsdWVzKTtcbiAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZWQuZW1pdChcbiAgICAgIG5ldyBBWFNlbGVjdEJveFNlbGVjdGlvbkNoYW5nZWRFdmVudChcbiAgICAgICAgdGhpcyxcbiAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLFxuICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVzXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5idWZmZXJTaXplIDwgMTApIHtcbiAgICAgIHRoaXMuYnVmZmVyU2l6ZSA9IDEwO1xuICAgIH1cbiAgICBpZiAodGhpcy5tb2RlID09ICdzaW5nbGUnKSB7XG4gICAgICB0aGlzLnNob3dDaGVja0JveCA9IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNob3dDaGVja0JveCA9IHRydWU7XG4gICAgfVxuICAgIGlmIChcbiAgICAgICF0aGlzLnJlbW90ZU9wZXJhdGlvbiB8fFxuICAgICAgKHRoaXMucmVtb3RlT3BlcmF0aW9uICYmIHRoaXMuaGFzU2VsZWN0ZWRWYWx1ZSlcbiAgICApIHtcbiAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgIH1cbiAgfVxuICBkcm9wZG93blRvZ2dsZVNlbGVjQm94KGUpIHtcbiAgICB0aGlzLnRleHQgPSAnJztcbiAgICBpZiAodGhpcy5kcm9wZG93bi5pc09wZW4pIHtcbiAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLnNlcmNoQm94KSB7XG4gICAgICAgICAgdGhpcy5zZXJjaEJveC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICB9LCAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gIHRoaXMucmVmcmVzaCgpO1xuICAgIH1cbiAgICB0aGlzLmRyb3Bkb3duVG9nZ2xlLmVtaXQoZSk7XG4gIH1cblxuICBuZ0FmdGVyQ29udGVudEluaXQoKSB7XG4gICAgLy8gaWYgKCF0aGlzLmFsbG93U2VhcmNoKSB7XG4gICAgLy8gICAgIGlmICh0aGlzLnJlYWRvbmx5ID09IGZhbHNlKSB7XG4gICAgLy8gICAgICAgICB0aGlzLml0ZW1SZW1vdmUgPSB0cnVlO1xuICAgIC8vICAgICAgICAgdGhpcy5yZWFkb25seSA9IHRydWU7XG4gICAgLy8gICAgIH1cbiAgICAvLyB9XG4gICAgdGhpcy5pbml0VmFsaWRhdGlvbih0aGlzLnJlZiwgJ3NlbGVjdGVkSXRlbXMnLCB0aGlzLnZhbGlkYXRpb24pO1xuICAgIGlmICh0aGlzLmRhdGFTb3VyY2UpIHtcbiAgICAgIC8vIGlmICh0aGlzLmFsbG93U2VhcmNoID09IGZhbHNlKSB7XG4gICAgICAvLyAgIHRoaXMuZmV0Y2goKTtcbiAgICAgIC8vIH1cbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5vbkRhdGFSZWNlaXZlZC5zdWJzY3JpYmUoKGMpID0+IHtcbiAgICAgICAgdGhpcy5zaG93TG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmRhdGFSZWNlaXZlZChjLmRhdGEucmVzdWx0KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBwcml2YXRlIGRhdGFSZWNlaXZlZChkYXRhOiBhbnkpIHtcbiAgICBpZiAodGhpcy5yZW1vdGVPcGVyYXRpb24pIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5zZWFyY2hUZXh0ICYmXG4gICAgICAgIHRoaXMuc2VhcmNoVGV4dCAhPSBudWxsICYmXG4gICAgICAgIHRoaXMuc2VhcmNoVGV4dCAhPT0gJydcbiAgICAgICkge1xuICAgICAgICBpZiAoZGF0YS50b3RhbENvdW50KSB7XG4gICAgICAgICAgaWYgKHRoaXMuaXRlbXMubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgIC8vdGhpcy5pdGVtcyA9IGRhdGEuaXRlbXM7XG4gICAgICAgICAgICBkYXRhLml0ZW1zLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5pdGVtcy5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRhdGEuaXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgIXRoaXMuaXRlbXMuc29tZShcbiAgICAgICAgICAgICAgICAgICh4KSA9PiB4W3RoaXMudmFsdWVGaWVsZF0gPT09IGl0ZW1bdGhpcy52YWx1ZUZpZWxkXVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtcy5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIGlmICh0aGlzLml0ZW1zU3RhdHVzT2JzZXJ2ZXIpIHtcbiAgICAgICAgICAgIC8vICAgdGhpcy5pdGVtc1N0YXR1c09ic2VydmVyLm5leHQodGhpcy5pdGVtcy5sZW5ndGgpO1xuICAgICAgICAgICAgLy8gfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMudG90YWxDb3VudCA9IGRhdGEudG90YWxDb3VudDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAodGhpcy5pdGVtcy5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgdGhpcy5pdGVtcyA9IGRhdGEuaXRlbXM7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRhdGEuaXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLml0ZW1zLnB1c2goaXRlbSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIGlmICh0aGlzLml0ZW1zU3RhdHVzT2JzZXJ2ZXIpIHtcbiAgICAgICAgICAgIC8vICAgdGhpcy5pdGVtc1N0YXR1c09ic2VydmVyLm5leHQodGhpcy5pdGVtcy5sZW5ndGgpO1xuICAgICAgICAgICAgLy8gfVxuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnRvdGFsQ291bnQgPSBkYXRhLml0ZW1zID09IHVuZGVmaW5lZCA/IDAgOiBkYXRhLml0ZW1zLmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChkYXRhLml0ZW1zICYmIGRhdGEuaXRlbXMubGVuZ3RoID09PSBkYXRhLnRvdGFsQ291bnQpIHtcbiAgICAgICAgdGhpcy5pdGVtcyA9IGRhdGEuaXRlbXM7XG4gICAgICAgIHRoaXMudG90YWxDb3VudCA9IGRhdGEuaXRlbXMubGVuZ3RoO1xuICAgICAgfSBlbHNlIGlmIChkYXRhLnRvdGFsQ291bnQpIHtcbiAgICAgICAgZGF0YS5pdGVtcy5mb3JFYWNoKChlbG0pID0+IHtcbiAgICAgICAgICB0aGlzLml0ZW1zLnB1c2goZWxtKTtcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIGlmICh0aGlzLml0ZW1zU3RhdHVzT2JzZXJ2ZXIpIHtcbiAgICAgICAgLy8gICB0aGlzLml0ZW1zU3RhdHVzT2JzZXJ2ZXIubmV4dCh0aGlzLml0ZW1zLmxlbmd0aCk7XG4gICAgICAgIC8vIH1cbiAgICAgICAgdGhpcy50b3RhbENvdW50ID0gZGF0YS50b3RhbENvdW50O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGF0YS5mb3JFYWNoKChlbG0pID0+IHtcbiAgICAgICAgICB0aGlzLml0ZW1zLnB1c2goZWxtKTtcbiAgICAgICAgICAvLyBpZiAodGhpcy5pdGVtc1N0YXR1c09ic2VydmVyKSB7XG4gICAgICAgICAgLy8gICB0aGlzLml0ZW1zU3RhdHVzT2JzZXJ2ZXIubmV4dCh0aGlzLml0ZW1zLmxlbmd0aCk7XG4gICAgICAgICAgLy8gfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy50b3RhbENvdW50ID0gZGF0YS5sZW5ndGg7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaXRlbXMgPSBkYXRhO1xuICAgIH1cblxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcblxuICAgIHRoaXMuZHJvcGRvd24udXBkYXRlUG9zaXRpb24oKTtcbiAgfVxuXG4gIC8vIHByaXZhdGUgcGFyYW1zOiBBWERhdGFTb3VyY2VSZWFkUGFyYW1zID0ge307XG5cbiAgZmV0Y2gocGFyYW1zOiBBWERhdGFTb3VyY2VSZWFkUGFyYW1zID0ge30pIHtcbiAgICAvLyAgdGhpcy5wYXJhbXMgPSBwYXJhbXM7XG4gICAgaWYgKHRoaXMuZGF0YVNvdXJjZSkge1xuICAgICAgaWYgKHRoaXMub25EZW1hbmRUcmFuc2xhdGUgJiYgcGFyYW1zPy5zZWFyY2hUZXh0KSB7XG4gICAgICAgIHBhcmFtcy5zZWFyY2hUZXh0ID0gdGhpcy50cmFuc2xhdGVTZWFyY2gocGFyYW1zPy5zZWFyY2hUZXh0KTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2hvd0xvYWRpbmcgPSB0cnVlO1xuICAgICAgdGhpcy5kYXRhU291cmNlLmZldGNoKHBhcmFtcyk7XG4gICAgfVxuICB9XG5cbiAgdHJhbnNsYXRlU2VhcmNoKHNlYXJjaFRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgbGF0aW5QYXR0ZXJuID0gL1tBLVphLXo7J1xcL1xcXFxbXFxdLF0vO1xuICAgIGNvbnN0IGFzY2lpVG9QZXJzaWFuTWFwID0ge1xuICAgICAgMTEzOiAn2LYnLFxuICAgICAgMTE5OiAn2LUnLFxuICAgICAgMTAxOiAn2KsnLFxuICAgICAgMTE0OiAn2YInLFxuICAgICAgMTE2OiAn2YEnLFxuICAgICAgMTIxOiAn2LonLFxuICAgICAgMTE3OiAn2LknLFxuICAgICAgMTA1OiAn2YcnLFxuICAgICAgMTExOiAn2K4nLFxuICAgICAgMTEyOiAn2K0nLFxuICAgICAgOTc6ICfYtCcsXG4gICAgICAxMTU6ICfYsycsXG4gICAgICAxMDA6ICfbjCcsXG4gICAgICAxMDI6ICfYqCcsXG4gICAgICAxMDM6ICfZhCcsXG4gICAgICAxMDQ6ICfYpycsXG4gICAgICAxMDY6ICfYqicsXG4gICAgICAxMDc6ICfZhicsXG4gICAgICAxMDg6ICfZhScsXG4gICAgICA1OTogJ9qpJyxcbiAgICAgIDEyMjogJ9i4JyxcbiAgICAgIDEyMDogJ9i3JyxcbiAgICAgIDk5OiAn2LInLFxuICAgICAgMTE4OiAn2LEnLFxuICAgICAgOTg6ICfYsCcsXG4gICAgICAxMTA6ICfYrycsXG4gICAgICA0NDogJ9mIJyxcbiAgICAgIDM5OiAn2q8nLFxuICAgICAgNjc6ICfamCcsXG4gICAgICA5MzogJ9qGJyxcbiAgICAgIDkxOiAn2KwnLFxuICAgICAgOTI6ICfZvicsXG4gICAgICAxMDk6ICfYpicsXG4gICAgfTtcbiAgICBpZiAobGF0aW5QYXR0ZXJuLnRlc3Qoc2VhcmNoVGV4dCkpIHtcbiAgICAgIHNlYXJjaFRleHQgPSBzZWFyY2hUZXh0XG4gICAgICAgIC5zcGxpdCgnJylcbiAgICAgICAgLm1hcCgoY2hhcikgPT4ge1xuICAgICAgICAgIGNvbnN0IGFzY2lpVmFsdWUgPSBjaGFyLmNoYXJDb2RlQXQoMCk7XG4gICAgICAgICAgaWYgKGFzY2lpVG9QZXJzaWFuTWFwW2FzY2lpVmFsdWVdKSB7XG4gICAgICAgICAgICByZXR1cm4gYXNjaWlUb1BlcnNpYW5NYXBbYXNjaWlWYWx1ZV07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBjaGFyO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLmpvaW4oJycpO1xuICAgIH1cbiAgICByZXR1cm4gc2VhcmNoVGV4dDtcbiAgfVxuXG4gIHJlZnJlc2goKSB7XG4gICAgY29uc3QgcGFyYW1zOiBBWERhdGFTb3VyY2VSZWFkUGFyYW1zID0ge307XG4gICAgaWYgKHRoaXMucmVtb3RlT3BlcmF0aW9uKSB7XG4gICAgICBwYXJhbXMuc2tpcCA9IDA7XG4gICAgICB0aGlzLnNraXAgPSAwO1xuICAgICAgcGFyYW1zLnRha2UgPSB0aGlzLmJ1ZmZlclNpemU7XG4gICAgfVxuICAgIGlmICh0aGlzLmRhdGFTb3VyY2UgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyB0aGlzLml0ZW1zID0gW107XG4gICAgICAvLyB0aGlzLml0ZW1zLmZvckVhY2goKGVsZW1lbnQpID0+IHtcbiAgICAgIC8vICAgdGhpcy5pdGVtcy5wb3AoKTtcbiAgICAgIC8vIH0pO1xuXG4gICAgICBpZiAodGhpcy5pdGVtcykge1xuICAgICAgICBsZXQgdCA9IHRoaXMuaXRlbXMubGVuZ3RoO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHQ7IGkrKykge1xuICAgICAgICAgIHRoaXMuaXRlbXMucG9wKCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5mZXRjaChwYXJhbXMpO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZUl0ZW1SZW1vdmVDbGljayhpdGVtKSB7XG4gICAgaWYgKHRoaXMubW9kZSA9PT0gJ3NpbmdsZScpIHtcbiAgICAgIC8vIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IG51bGw7XG4gICAgICB0aGlzLnNldFNlbGVjdGVkVmFsdWVzKG51bGwsIHRydWUpO1xuICAgICAgLy8gdGhpcy5zZWxlY3RlZEl0ZW1zQ2hhbmdlLmVtaXQodGhpcy5fc2VsZWN0ZWRJdGVtcyk7XG4gICAgICAvLyB0aGlzLmNsZWFyVmFsaWRhdGlvblN0eWxlKHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyB0aGlzLnNlbGVjdGVkSXRlbXMgPSB0aGlzLnNlbGVjdGVkSXRlbXMuZmlsdGVyKChjKSA9PiBjICE9PSBpdGVtKTtcbiAgICAgIHRoaXMuc2V0U2VsZWN0ZWRJdGVtcyhcbiAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLmZpbHRlcihcbiAgICAgICAgICAoYykgPT4gY1t0aGlzLnZhbHVlRmllbGRdICE9PSBpdGVtW3RoaXMudmFsdWVGaWVsZF1cbiAgICAgICAgKSxcbiAgICAgICAgdHJ1ZVxuICAgICAgKTtcbiAgICAgIC8vIHRoaXMuX3NlbGVjdGVkSXRlbXMgPSB0aGlzLl9zZWxlY3RlZEl0ZW1zLmZpbHRlcihjID0+IGMgIT09IGl0ZW0pO1xuICAgICAgLy8gdGhpcy5zZWxlY3RlZEl0ZW1zQ2hhbmdlLmVtaXQodGhpcy5fc2VsZWN0ZWRJdGVtcyk7XG4gICAgICAvLyB0aGlzLmNsZWFyVmFsaWRhdGlvblN0eWxlKHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQpO1xuICAgIH1cbiAgICAvLyB0aGlzLnRleHQgPSAnJztcbiAgICB0aGlzLnZhbGlkYXRlKCk7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBvbkZvY3VzVGV4dEJveChlKSB7fVxuXG4gIG9uVGV4dEJveENsaWNrKGUpIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCA9PSBmYWxzZSAmJiB0aGlzLnJlYWRvbmx5ID09IGZhbHNlKSB7XG4gICAgICB0aGlzLmRyb3Bkb3duLm9wZW4oKTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVJdGVtQ2xpY2soZTogTW91c2VFdmVudCwgaXRlbTogYW55KSB7XG4gICAgaWYgKHRoaXMuaXNJdGVtRGlzYWJsZWQoaXRlbSkgPT0gZmFsc2UpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gaXRlbVt0aGlzLnZhbHVlRmllbGRdO1xuXG4gICAgICBpZiAodGhpcy5tb2RlID09PSAnc2luZ2xlJykge1xuICAgICAgICAvLyB0aGlzLnNlbGVjdGVkVmFsdWVzID0gdmFsdWU7XG4gICAgICAgIHRoaXMuc2V0U2VsZWN0ZWRWYWx1ZXModmFsdWUsIHRydWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZXhpc3RzID0gdGhpcy5zZWxlY3RlZFZhbHVlcy5zbGljZSgwKTtcbiAgICAgICAgaWYgKGV4aXN0cy5pbmNsdWRlcyh2YWx1ZSkpIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLmFsbG93TnVsbCA9PSB0cnVlIHx8XG4gICAgICAgICAgICAodGhpcy5hbGxvd051bGwgPT0gZmFsc2UgJiYgdGhpcy5zZWxlY3RlZEl0ZW1zLmxlbmd0aCA+IDEpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZUl0ZW1SZW1vdmVDbGljayhpdGVtKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZXhpc3RzLnB1c2godmFsdWUpO1xuICAgICAgICAgIC8vIHRoaXMuc2VsZWN0ZWRWYWx1ZXMgPSBleGlzdHM7XG4gICAgICAgICAgdGhpcy5zZXRTZWxlY3RlZFZhbHVlcyhleGlzdHMsIHRydWUpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLm1vZGUgPT0gJ3NpbmdsZScpIHtcbiAgICAgICAgdGhpcy50ZXh0ID0gJyc7XG4gICAgICAgIHRoaXMuZHJvcGRvd24uY2xvc2UoKTtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICB9XG4gICAgICAvLyBpZiAoZS5zdG9wUHJvcGFnYXRpb24oKSA9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgLy8gfVxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLnNlcmNoQm94KSB7XG4gICAgICAgICAgdGhpcy5zZXJjaEJveC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICB9LCAwKTtcbiAgICB9XG5cbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICB9XG5cbiAgaGFuZGxlS2V5RXZlbnRTZWFyY2goZTogS2V5Ym9hcmRFdmVudCkge1xuICAgIGlmICh0aGlzLmRpc2FibGVkIHx8IHRoaXMucmVhZG9ubHkpIHtcbiAgICAgIHRoaXMuZHJvcGRvd24uY2xvc2UoKTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnRleHRCb3hTZWxlY3RCb3guZm9jdXMoKTtcbiAgICAgIH0sIDApO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoZS5rZXkgPT09ICdFc2NhcGUnKSB7XG4gICAgICB0aGlzLnRleHQgPSBudWxsO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMudGV4dEJveFNlbGVjdEJveC5mb2N1cygpO1xuICAgICAgfSwgMCk7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIChlLmtleSA9PT0gJ0Fycm93RG93bicgfHwgZS5rZXkgPT09ICdBcnJvd1VwJykgJiZcbiAgICAgIHRoaXMuZ2V0SXRlbXMoKS5sZW5ndGggPiAwICYmXG4gICAgICBlLnR5cGUgPT09ICdrZXlkb3duJ1xuICAgICkge1xuICAgICAgaWYgKHRoaXMubW9kZSA9PT0gJ3NpbmdsZScpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50Zm9jdXNlZEluZGV4ID1cbiAgICAgICAgICB0aGlzLmN1cnJlbnRmb2N1c2VkSW5kZXggKyAoZS5rZXkgPT09ICdBcnJvd0Rvd24nID8gMSA6IC0xKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1CeUluZGV4KHRoaXMuY3VycmVudGZvY3VzZWRJbmRleCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodGhpcy5kcm9wZG93bi5pc09wZW4pIHtcbiAgICAgICAgICB0aGlzLnNldFNlbGVjdGVkSW5kZXgoZS5rZXkgPT09ICdBcnJvd0Rvd24nID8gMSA6IC0xKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmRyb3Bkb3duLm9wZW4oKTtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLnNlcmNoQm94KSB7XG4gICAgICAgICAgICAgIHRoaXMuc2VyY2hCb3guZm9jdXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LCAwKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICAvLyBpZiAoZS5rZXkgPT0gJ0VudGVyJyAmJiB0aGlzLmRyb3Bkb3duLmlzT3BlbiAmJiB0aGlzLm1vZGUgPT0gJ3NpbmdsZScpIHtcbiAgICAvLyAgICAgdGhpcy5kcm9wZG93bi5jbG9zZSgpO1xuICAgIC8vICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAvLyAgICAgICAgIHRoaXMuZHJvcGRvd24uZm9jdXMoKTtcbiAgICAvLyAgICAgfSwgMCk7XG4gICAgLy8gfVxuICAgIC8vZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAvL2UucHJldmVudERlZmF1bHQoKTtcbiAgICBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgIGlmIChlLnR5cGUgPT09ICdrZXlkb3duJyAmJiBlLmtleSA9PSAnRW50ZXInICYmIHRoaXMuZHJvcGRvd24uaXNPcGVuKSB7XG4gICAgICBpZiAoIXRoaXMucmVtb3RlT3BlcmF0aW9uICYmIHRoaXMudGV4dCAmJiB0aGlzLnRleHQgIT09ICcnKSB7XG4gICAgICAgIHRoaXMuaXRlbXNGaWx0ZXJlZCA9IHRoaXMuaXRlbXMuZmlsdGVyKChjKSA9PlxuICAgICAgICAgIChjW3RoaXMudGV4dEZpZWxkXSBhcyBzdHJpbmcpXG4gICAgICAgICAgICAudG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgLmluY2x1ZGVzKHRoaXMudGV4dC50b0xvd2VyQ2FzZSgpKVxuICAgICAgICApO1xuICAgICAgICBpZiAodGhpcy5pdGVtc0ZpbHRlcmVkLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgIHRoaXMuY3VycmVudGZvY3VzZWRJbmRleCA9IDA7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaXRlbXNGaWx0ZXJlZCA9IHRoaXMuaXRlbXM7XG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLmZpbHRlcihcbiAgICAgICAgICAoYykgPT5cbiAgICAgICAgICAgIGNbdGhpcy52YWx1ZUZpZWxkXSA9PT1cbiAgICAgICAgICAgIHRoaXMuaXRlbXNGaWx0ZXJlZFt0aGlzLmN1cnJlbnRmb2N1c2VkSW5kZXhdW3RoaXMudmFsdWVGaWVsZF1cbiAgICAgICAgKS5sZW5ndGggPiAwICYmXG4gICAgICAgIHRoaXMubW9kZSA9PSAnbXVsdGlwbGUnXG4gICAgICApIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRoaXMuYWxsb3dOdWxsID09IHRydWUgfHxcbiAgICAgICAgICAodGhpcy5hbGxvd051bGwgPT0gZmFsc2UgJiYgdGhpcy5zZWxlY3RlZEl0ZW1zLmxlbmd0aCA+IDEpXG4gICAgICAgICkge1xuICAgICAgICAgIGlmICghdGhpcy5yZW1vdGVPcGVyYXRpb24gJiYgdGhpcy50ZXh0ICYmIHRoaXMudGV4dCAhPT0gJycpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IHRoaXMuc2VsZWN0ZWRJdGVtcy5maWx0ZXIoXG4gICAgICAgICAgICAgIChjKSA9PlxuICAgICAgICAgICAgICAgIGMgIT09XG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtcy5maWx0ZXIoKGMpID0+XG4gICAgICAgICAgICAgICAgICAoY1t0aGlzLnRleHRGaWVsZF0gYXMgc3RyaW5nKVxuICAgICAgICAgICAgICAgICAgICAudG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgICAgICAgICAuaW5jbHVkZXModGhpcy50ZXh0LnRvTG93ZXJDYXNlKCkpXG4gICAgICAgICAgICAgICAgKVt0aGlzLmN1cnJlbnRmb2N1c2VkSW5kZXhdXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSB0aGlzLnNlbGVjdGVkSXRlbXMuZmlsdGVyKFxuICAgICAgICAgICAgICAoYykgPT5cbiAgICAgICAgICAgICAgICBjW3RoaXMudmFsdWVGaWVsZF0gIT09XG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtc1t0aGlzLmN1cnJlbnRmb2N1c2VkSW5kZXhdW3RoaXMudmFsdWVGaWVsZF1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuZW1pdFNlbGVjdGlvbkNoYW5nZWRFdmVudCgpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodGhpcy5tb2RlID09ICdtdWx0aXBsZScpIHtcbiAgICAgICAgICBpZiAodGhpcy5jdXJyZW50Zm9jdXNlZEluZGV4ICE9IC0xKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMucmVtb3RlT3BlcmF0aW9uICYmIHRoaXMudGV4dCAmJiB0aGlzLnRleHQgIT09ICcnKSB7XG4gICAgICAgICAgICAgIGlmICh0aGlzLml0ZW1zRmlsdGVyZWQubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLnB1c2godGhpcy5pdGVtc0ZpbHRlcmVkWzBdKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMucHVzaChcbiAgICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNGaWx0ZXJlZFt0aGlzLmN1cnJlbnRmb2N1c2VkSW5kZXhdXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLnB1c2godGhpcy5pdGVtc1t0aGlzLmN1cnJlbnRmb2N1c2VkSW5kZXhdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZW1pdFNlbGVjdGlvbkNoYW5nZWRFdmVudCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAodGhpcy50ZXh0ICYmIHRoaXMuaXRlbXNGaWx0ZXJlZD8ubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICB0aGlzLnNldFNlbGVjdGVkSXRlbXModGhpcy5pdGVtc0ZpbHRlcmVkLCB0cnVlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHRoaXMubW9kZSA9PSAnc2luZ2xlJykge1xuICAgICAgICAgICAgdGhpcy5kcm9wZG93bi5jbG9zZSgpO1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMudGV4dEJveFNlbGVjdEJveC5mb2N1cygpO1xuICAgICAgICAgICAgfSwgMCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgICB9XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBpc0NoYXIoc3RyOiBzdHJpbmcpIHtcbiAgICBpZiAoXG4gICAgICBzdHIuaW5jbHVkZXMoJ1NoaWZ0JykgfHxcbiAgICAgIHN0ci5pbmNsdWRlcygnVGFiJykgfHxcbiAgICAgIHN0ci5pbmNsdWRlcygnQ29udHJvbCcpIHx8XG4gICAgICBzdHIuaW5jbHVkZXMoJ0FsdCcpIHx8XG4gICAgICBzdHIuaW5jbHVkZXMoJ0NhcHNMb2NrJykgfHxcbiAgICAgIHN0ci5pbmNsdWRlcygnTWV0YScpIHx8XG4gICAgICBzdHIuaW5jbHVkZXMoJ0NvbnRleHRNZW51JykgfHxcbiAgICAgIHN0ci5pbmNsdWRlcygnRW50ZXInKSB8fFxuICAgICAgc3RyLmluY2x1ZGVzKCdCYWNrc3BhY2UnKSB8fFxuICAgICAgc3RyLmluY2x1ZGVzKCdQcmludFNjcmVlbicpIHx8XG4gICAgICBzdHIuaW5jbHVkZXMoJ1Njcm9sbExvY2snKSB8fFxuICAgICAgc3RyLmluY2x1ZGVzKCdQYXVzZScpIHx8XG4gICAgICBzdHIuaW5jbHVkZXMoJ0hvbWUnKSB8fFxuICAgICAgc3RyLmluY2x1ZGVzKCdFbmQnKSB8fFxuICAgICAgc3RyLmluY2x1ZGVzKCdJbnNlcnQnKSB8fFxuICAgICAgc3RyLmluY2x1ZGVzKCdQYWdlVXAnKSB8fFxuICAgICAgc3RyLmluY2x1ZGVzKCdEZWxldGUnKSB8fFxuICAgICAgc3RyLmluY2x1ZGVzKCdQYWdlRG93bicpIHx8XG4gICAgICBzdHIuaW5jbHVkZXMoJ051bUxvY2snKSB8fFxuICAgICAgc3RyLmluY2x1ZGVzKCdFc2NhcGUnKSB8fFxuICAgICAgc3RyLmluY2x1ZGVzKCdBcnJvdycpIHx8XG4gICAgICBzdHIuaW5jbHVkZXMoJ9mRRjEnKSB8fFxuICAgICAgc3RyLmluY2x1ZGVzKCdGMicpIHx8XG4gICAgICBzdHIuaW5jbHVkZXMoJ0YzJykgfHxcbiAgICAgIHN0ci5pbmNsdWRlcygnRjQnKSB8fFxuICAgICAgc3RyLmluY2x1ZGVzKCdGNScpIHx8XG4gICAgICBzdHIuaW5jbHVkZXMoJ0Y2JykgfHxcbiAgICAgIHN0ci5pbmNsdWRlcygnRjcnKSB8fFxuICAgICAgc3RyLmluY2x1ZGVzKCdGOCcpIHx8XG4gICAgICBzdHIuaW5jbHVkZXMoJ0Y5JykgfHxcbiAgICAgIHN0ci5pbmNsdWRlcygnRjEwJykgfHxcbiAgICAgIHN0ci5pbmNsdWRlcygnRjExJykgfHxcbiAgICAgIHN0ci5pbmNsdWRlcygnRjEyJylcbiAgICApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlS2V5RXZlbnQoZTogYW55KSB7XG4gICAgLy8gY29uc3QgTnVtYmVyTWludXNQYXR0ZXJuID0gL1thLXpBLVowLTlcXC1dL2c7XG4gICAgLy8gY29uc3QgRmFyc2kgPSAvW9m+2obYrNit2K7Zh9i52LrZgdmC2KvYtdi22LTYs9uM2KjZhNin2KrZhtmF2qnar9mI2KbYr9iw2LHYsti32LjamNik2KXYo9ih2YvZjNmN2Y7Zj9mQ2ZFcXHNdKyQvO1xuICAgIC8vICBjb25zdCBpbnB1dENoYXIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGUuY2hhckNvZGUpO1xuICAgIC8vIGNvbnN0IHBhdHRlcm5FbiA9IC9eW2EtekEtWjAtOV0qJC87XG4gICAgLy8gY29uc3QgcGF0dGVybiA9IC9eW1xcdTA2MDAtXFx1MDZGRlxcc10rJC87XG4gICAgY29uc3QgaW5wdXRDaGFyID0gZS5rZXk7XG4gICAgaWYgKFxuICAgICAgKGlucHV0Q2hhciAhPSAnQmFja3NwYWNlJyAmJlxuICAgICAgICBpbnB1dENoYXIgIT0gJ0JhY2tzcGFjZScgJiZcbiAgICAgICAgaW5wdXRDaGFyICE9ICdUYWInICYmXG4gICAgICAgIGlucHV0Q2hhciAhPSAnRW50ZXInICYmXG4gICAgICAgIGlucHV0Q2hhciAhPSAnRXNjYXBlJyAmJlxuICAgICAgICBpbnB1dENoYXIgIT0gJ0Fycm93RG93bicgJiZcbiAgICAgICAgaW5wdXRDaGFyICE9ICdBcnJvd1VwJykgfHxcbiAgICAgIGUuY29kZSA9PT0gJ1NwYWNlJyB8fFxuICAgICAgZS5jdHJsS2V5ID09IHRydWVcbiAgICApIHtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgZS5rZXkgPT09ICdCYWNrc3BhY2UnICYmXG4gICAgICBlLnR5cGUgPT09ICdrZXlkb3duJyAmJlxuICAgICAgKCh0aGlzLmFsbG93TnVsbCA9PT0gdHJ1ZSAmJiB0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoID4gMCkgfHxcbiAgICAgICAgKHRoaXMuYWxsb3dOdWxsID09PSBmYWxzZSAmJiB0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoID4gMSkpXG4gICAgKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbXMucG9wKCk7XG4gICAgICB0aGlzLmVtaXRTZWxlY3Rpb25DaGFuZ2VkRXZlbnQoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5yZWFkb25seSkge1xuICAgICAgdGhpcy5kcm9wZG93bi5jbG9zZSgpO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMudGV4dEJveFNlbGVjdEJveC5mb2N1cygpO1xuICAgICAgfSwgMCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IElOUFVUID0gU3RyaW5nLmZyb21DaGFyQ29kZShlLmtleUNvZGUpO1xuICAgIGlmICh0aGlzLmlzQ2hhcihlLmtleSkgJiYgdGhpcy5hbGxvd1NlYXJjaCAmJiBlLmN0cmxLZXkgPT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuZHJvcGRvd24ub3BlbigpO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLnNlcmNoQm94KSB7XG4gICAgICAgICAgdGhpcy5zZXJjaEJveC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICB9LCAwKTtcbiAgICAgIHRoaXMudGV4dCA9IGUua2V5O1xuICAgIH1cblxuICAgIGlmIChlLmtleSA9PT0gJ0VzY2FwZScpIHtcbiAgICAgIHRoaXMudGV4dCA9IG51bGw7XG4gICAgICB0aGlzLmRyb3Bkb3duLmNsb3NlKCk7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy50ZXh0Qm94U2VsZWN0Qm94LmZvY3VzKCk7XG4gICAgICB9LCAwKTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgKGUua2V5ID09PSAnQXJyb3dEb3duJyB8fCBlLmtleSA9PT0gJ0Fycm93VXAnKSAmJlxuICAgICAgdGhpcy5nZXRJdGVtcygpLmxlbmd0aCA+IDAgJiZcbiAgICAgIGUudHlwZSA9PT0gJ2tleWRvd24nXG4gICAgKSB7XG4gICAgICBpZiAodGhpcy5tb2RlID09PSAnc2luZ2xlJykge1xuICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbUJ5SW5kZXgoXG4gICAgICAgICAgdGhpcy5jdXJyZW50Zm9jdXNlZEluZGV4ICsgKGUua2V5ID09PSAnQXJyb3dEb3duJyA/IDEgOiAtMSlcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0aGlzLmRyb3Bkb3duLmlzT3Blbikge1xuICAgICAgICAgIC8vICB0aGlzLnNldFNlbGVjdGVkSW5kZXgoKGUua2V5ID09PSAnQXJyb3dEb3duJyA/IDEgOiAtMSkpO1xuICAgICAgICAgIGlmICh0aGlzLmFsbG93U2VhcmNoID09IGZhbHNlKSB7XG4gICAgICAgICAgICB0aGlzLnNldFNlbGVjdGVkSW5kZXgoZS5rZXkgPT09ICdBcnJvd0Rvd24nID8gMSA6IC0xKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgIGlmICh0aGlzLnNlcmNoQm94KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXJjaEJveC5mb2N1cygpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCAwKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5kcm9wZG93bi5vcGVuKCk7XG4gICAgICAgICAgaWYgKHRoaXMuYWxsb3dTZWFyY2ggPT0gdHJ1ZSkge1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgIGlmICh0aGlzLnNlcmNoQm94KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXJjaEJveC5mb2N1cygpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCAwKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5hbGxvd1NlYXJjaCA9PT0gZmFsc2UpIHtcbiAgICAgIGlmIChlLnR5cGUgPT09ICdrZXlkb3duJyAmJiBlLmtleSA9PSAnRW50ZXInICYmIHRoaXMuZHJvcGRvd24uaXNPcGVuKSB7XG4gICAgICAgIGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMuZmlsdGVyKFxuICAgICAgICAgICAgKGMpID0+XG4gICAgICAgICAgICAgIGNbdGhpcy52YWx1ZUZpZWxkXSA9PT1cbiAgICAgICAgICAgICAgdGhpcy5pdGVtc0ZpbHRlcmVkW3RoaXMuY3VycmVudGZvY3VzZWRJbmRleF1bdGhpcy52YWx1ZUZpZWxkXVxuICAgICAgICAgICkubGVuZ3RoID4gMCAmJlxuICAgICAgICAgIHRoaXMubW9kZSA9PSAnbXVsdGlwbGUnXG4gICAgICAgICkge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuYWxsb3dOdWxsID09IHRydWUgfHxcbiAgICAgICAgICAgICh0aGlzLmFsbG93TnVsbCA9PSBmYWxzZSAmJiB0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoID4gMSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5yZW1vdGVPcGVyYXRpb24gJiYgdGhpcy50ZXh0ICYmIHRoaXMudGV4dCAhPT0gJycpIHtcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gdGhpcy5zZWxlY3RlZEl0ZW1zLmZpbHRlcihcbiAgICAgICAgICAgICAgICAoYykgPT5cbiAgICAgICAgICAgICAgICAgIGMgIT09XG4gICAgICAgICAgICAgICAgICB0aGlzLml0ZW1zLmZpbHRlcigoYykgPT5cbiAgICAgICAgICAgICAgICAgICAgKGNbdGhpcy50ZXh0RmllbGRdIGFzIHN0cmluZylcbiAgICAgICAgICAgICAgICAgICAgICAudG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgICAgICAgICAgIC5pbmNsdWRlcyh0aGlzLnRleHQudG9Mb3dlckNhc2UoKSlcbiAgICAgICAgICAgICAgICAgIClbdGhpcy5jdXJyZW50Zm9jdXNlZEluZGV4XVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gdGhpcy5zZWxlY3RlZEl0ZW1zLmZpbHRlcihcbiAgICAgICAgICAgICAgICAoYykgPT5cbiAgICAgICAgICAgICAgICAgIGNbdGhpcy52YWx1ZUZpZWxkXSAhPT1cbiAgICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbdGhpcy5jdXJyZW50Zm9jdXNlZEluZGV4XVt0aGlzLnZhbHVlRmllbGRdXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmVtaXRTZWxlY3Rpb25DaGFuZ2VkRXZlbnQoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHRoaXMubW9kZSA9PSAnbXVsdGlwbGUnKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5jdXJyZW50Zm9jdXNlZEluZGV4ICE9IC0xKSB7XG4gICAgICAgICAgICAgIGlmICghdGhpcy5yZW1vdGVPcGVyYXRpb24gJiYgdGhpcy50ZXh0ICYmIHRoaXMudGV4dCAhPT0gJycpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pdGVtc0ZpbHRlcmVkLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLnB1c2godGhpcy5pdGVtc0ZpbHRlcmVkWzBdKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLnB1c2goXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNGaWx0ZXJlZFt0aGlzLmN1cnJlbnRmb2N1c2VkSW5kZXhdXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMucHVzaCh0aGlzLml0ZW1zW3RoaXMuY3VycmVudGZvY3VzZWRJbmRleF0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHRoaXMuZW1pdFNlbGVjdGlvbkNoYW5nZWRFdmVudCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodGhpcy50ZXh0ICYmIHRoaXMuaXRlbXNGaWx0ZXJlZC5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgdGhpcy5zZXRTZWxlY3RlZEl0ZW1zKHRoaXMuaXRlbXNGaWx0ZXJlZCwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5tb2RlID09ICdzaW5nbGUnKSB7XG4gICAgICAgICAgICAgIHRoaXMuZHJvcGRvd24uY2xvc2UoKTtcbiAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy50ZXh0Qm94U2VsZWN0Qm94LmZvY3VzKCk7XG4gICAgICAgICAgICAgIH0sIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgZm9jdXMoKTogdm9pZCB7XG4gICAgdGhpcy50ZXh0Ym94LmZvY3VzKCk7XG4gIH1cblxuICBzZWxlY3RlZEl0ZW1CeUluZGV4KGluZGV4OiBudW1iZXIpIHtcbiAgICBsZXQgaXRlbSA9IFtdO1xuICAgIGlmICghdGhpcy5yZW1vdGVPcGVyYXRpb24gJiYgdGhpcy50ZXh0ICYmIHRoaXMudGV4dCAhPT0gJycpIHtcbiAgICAgIHRoaXMuaXRlbXNGaWx0ZXJlZCA9IHRoaXMuaXRlbXMuZmlsdGVyKChjKSA9PlxuICAgICAgICAoY1t0aGlzLnRleHRGaWVsZF0gYXMgc3RyaW5nKVxuICAgICAgICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgLmluY2x1ZGVzKHRoaXMudGV4dC50b0xvd2VyQ2FzZSgpKVxuICAgICAgKTtcblxuICAgICAgaXRlbSA9IHRoaXMuaXRlbXNGaWx0ZXJlZFtpbmRleF07XG4gICAgfSBlbHNlIHtcbiAgICAgIGl0ZW0gPSB0aGlzLml0ZW1zW2luZGV4XTtcbiAgICB9XG4gICAgLy9cbiAgICAvLyAgY29uc3QgaXRlbSA9IHRoaXMudGV4dCA/IHRoaXMuaXRlbXMuZmlsdGVyKChjKSA9PiAoY1t0aGlzLnRleHRGaWVsZF0gYXMgc3RyaW5nKS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRoaXMudGV4dC50b0xvd2VyQ2FzZSgpKSlbaW5kZXhdIDogdGhpcy5pdGVtc1tpbmRleF07XG4gICAgaWYgKGl0ZW0pIHtcbiAgICAgIHRoaXMuc2V0U2VsZWN0ZWRJdGVtcyhbaXRlbV0sIHRydWUpO1xuICAgIH1cblxuICAgIHRoaXMuc2V0U2VsZWN0ZWRJbmRleCgpO1xuICB9XG5cbiAgbm9BY2NlbnRPcmlnaW4gPSB7XG4gICAg2YM6ICfaqScsXG4gICAg77u3OiAn2YTYpycsXG4gICAg2KQ6ICfZiCcsXG4gICAg2Yk6ICfbjCcsXG4gICAg2Yo6ICfbjCcsXG4gICAg2KY6ICfbjCcsXG4gICAg2KM6ICfYpycsXG4gICAg2KU6ICfYpycsXG4gICAg2KI6ICfYpycsXG4gICAg2bE6ICfYpycsXG4gICAg2bM6ICfYpycsXG4gICAg2Kk6ICfZhycsXG4gICAg2KE6ICcnLFxuICAgICfZkCc6ICcnLFxuICAgICfZkic6ICcnLFxuICAgICfZjyc6ICcnLFxuICAgICfZjic6ICcnLFxuICAgICfZkSc6ICcnLFxuICAgICfZjSc6ICcnLFxuICAgICfZiyc6ICcnLFxuICAgICfZjCc6ICcnLFxuICAgICfZkyc6ICcnLFxuICAgICfZsCc6ICcnLFxuICAgICfZlCc6ICcnLFxuICAgICfvv70nOiAnJyxcbiAgfTtcblxuICBnZXRJdGVtcygpOiBhbnlbXSB7XG4gICAgaWYgKHRoaXMuaXRlbXMgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBpZiAoIXRoaXMucmVtb3RlT3BlcmF0aW9uICYmIHRoaXMudGV4dCAmJiB0aGlzLnRleHQgIT09ICcnKSB7XG4gICAgICByZXR1cm4gdGhpcy5pdGVtcy5maWx0ZXIoKGMpID0+IHtcbiAgICAgICAgY29uc3QgY29udmVydGVkVGV4dEZpZWxkID0gdGhpcy5jb252ZXJ0QXJhYmljVG9QZXJzaWFuKFxuICAgICAgICAgIGNbdGhpcy50ZXh0RmllbGRdLFxuICAgICAgICAgIHRoaXMubm9BY2NlbnRPcmlnaW5cbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgY29udmVydGVkVGV4dCA9IHRoaXMuY29udmVydEFyYWJpY1RvUGVyc2lhbihcbiAgICAgICAgICB0aGlzLnRleHQsXG4gICAgICAgICAgdGhpcy5ub0FjY2VudE9yaWdpblxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gY29udmVydGVkVGV4dEZpZWxkXG4gICAgICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAuaW5jbHVkZXMoY29udmVydGVkVGV4dC50b0xvd2VyQ2FzZSgpKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5pdGVtcztcbiAgICB9XG4gIH1cblxuICBjb252ZXJ0QXJhYmljVG9QZXJzaWFuKGlucHV0U3RyaW5nLCBjb252ZXJzaW9uTWFwKSB7XG4gICAgbGV0IHRleHRDb252ZXJ0ID0gJyc7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnB1dFN0cmluZy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgY3VycmVudENoYXIgPSBpbnB1dFN0cmluZ1tpXTtcbiAgICAgIGlmIChjb252ZXJzaW9uTWFwW2N1cnJlbnRDaGFyXSkge1xuICAgICAgICB0ZXh0Q29udmVydCArPSBjb252ZXJzaW9uTWFwW2N1cnJlbnRDaGFyXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRleHRDb252ZXJ0ICs9IGN1cnJlbnRDaGFyO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGV4dENvbnZlcnQ7XG4gIH1cblxuICBpc0l0ZW1TZWxlY3RlZChpdGVtOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zICYmXG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbXMuZmlsdGVyKFxuICAgICAgICAoYykgPT4gY1t0aGlzLnZhbHVlRmllbGRdID09PSBpdGVtW3RoaXMudmFsdWVGaWVsZF1cbiAgICAgICkubGVuZ3RoID4gMFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGl0ZW1zU3RhdHVzT2JzZXJ2ZXI6IGFueTtcbiAgcHJpdmF0ZSB3YWl0Rm9yRGF0YShjYWxsYmFja2ZuOiAoKSA9PiB2b2lkKSB7XG4gICAgaWYgKHRoaXMuaXRlbXMgJiYgdGhpcy5pdGVtcy5sZW5ndGgpIHtcbiAgICAgIGNhbGxiYWNrZm4oKTtcbiAgICB9IGVsc2UgaWYgKCF0aGlzLml0ZW1zU3RhdHVzT2JzZXJ2ZXIpIHtcbiAgICAgIE9ic2VydmFibGUuY3JlYXRlKChvYnNlcnZlcikgPT4ge1xuICAgICAgICB0aGlzLml0ZW1zU3RhdHVzT2JzZXJ2ZXIgPSBvYnNlcnZlcjtcbiAgICAgIH0pXG4gICAgICAgIC5waXBlKGRlYm91bmNlVGltZSgxMDApKVxuICAgICAgICAucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKVxuICAgICAgICAuc3Vic2NyaWJlKChjKSA9PiB7XG4gICAgICAgICAgY2FsbGJhY2tmbigpO1xuICAgICAgICB9KTtcbiAgICB9XG4gIH1cbn1cbiIsIjxheC1kcm9wLWRvd25cbiAgI2RcbiAgW3NpemVdPVwic2l6ZVwiXG4gIFtmaXRQYXJlbnRdPVwiZml0UGFyZW50XCJcbiAgW2Ryb3Bkb3duV2lkdGhdPVwiZHJvcGRvd25XaWR0aFwiXG4gIFtydGxdPVwicnRsXCJcbiAgW3Nob3dEcm9wRG93bkJ1dHRvbl09XCJzaG93RHJvcERvd25CdXR0b25cIlxuICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICBbcmVhZG9ubHldPVwicmVhZG9ubHlcIlxuICAoZHJvcGRvd25Ub2dnbGUpPVwiZHJvcGRvd25Ub2dnbGVTZWxlY0JveCgkZXZlbnQpXCJcbj5cbiAgPG5nLWNvbnRhaW5lciBzdGFydD5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbc3RhcnRdXCI+IDwvbmctY29udGVudD5cbiAgPC9uZy1jb250YWluZXI+XG4gIDxuZy1jb250YWluZXIgaGVhZGVyPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiYXggY2hpcHMtY29udGFpbmVyXCJcbiAgICAgIFtjbGFzcy5tdWx0aWxpbmVdPVwibXVsdGlMaW5lXCJcbiAgICAgIFtzdHlsZS5wYWRkaW5nXT1cInNlbGVjdGVkSXRlbXMubGVuZ3RoICYmIG11bHRpTGluZSA/ICcwLjI1cmVtJyA6ICcnXCJcbiAgICA+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiY2hpcHNcIlxuICAgICAgICBbY2xhc3MuY2hpcHMtYmxhbmtdPVwibW9kZSA9PT0gJ3NpbmdsZSdcIlxuICAgICAgICBbdGl0bGVdPVwiaXRlbVt0ZXh0RmllbGRdXCJcbiAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2Ygc2VsZWN0ZWRJdGVtc1wiXG4gICAgICA+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgY2xhc3M9XCJjaGlwcy10ZXh0XCJcbiAgICAgICAgICBbbmdTdHlsZV09XCJ7XG4gICAgICAgICAgICB3aWR0aDpcbiAgICAgICAgICAgICAgaXRlbVt0ZXh0RmllbGRdLmxlbmd0aCA+IDE1ICYmXG4gICAgICAgICAgICAgIHRoaXMubW9kZSA9PT0gJ211bHRpcGxlJyAmJlxuICAgICAgICAgICAgICAhbXVsdGlMaW5lXG4gICAgICAgICAgICAgICAgPyAnMTEwcHgnXG4gICAgICAgICAgICAgICAgOiAnYXV0bydcbiAgICAgICAgICB9XCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IGl0ZW1bdGV4dEZpZWxkXSB9fVxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgY2xhc3M9XCJjbG9zZS1pY29uXCJcbiAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlSXRlbVJlbW92ZUNsaWNrKGl0ZW0pXCJcbiAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgKHJlYWRvbmx5ICE9IHRydWUgfHwgaXRlbVJlbW92ZSA9PSB0cnVlKSAmJlxuICAgICAgICAgICAgZGlzYWJsZWQgIT0gdHJ1ZSAmJlxuICAgICAgICAgICAgKGFsbG93TnVsbCA9PSB0cnVlIHx8IHNlbGVjdGVkSXRlbXMubGVuZ3RoID4gMSlcbiAgICAgICAgICBcIlxuICAgICAgICA+XG4gICAgICAgICAgPGkgY2xhc3M9XCJmYXIgZmEtdGltZXMgY2xvc2VcIj48L2k+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaC13cmFwcGVyXCIgKGNsaWNrKT1cIm9uVGV4dEJveENsaWNrKCRldmVudClcIj5cbiAgICAgICAgPGF4LXRleHQtYm94XG4gICAgICAgICAgI3RleHRCb3hTZWxlY3RCb3hcbiAgICAgICAgICBbdGV4dEFsaWduXT1cInRleHRBbGlnblwiXG4gICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInNlbGVjdGVkSXRlbXMubGVuZ3RoID09IDAgPyBwbGFjZWhvbGRlciA6ICcnXCJcbiAgICAgICAgICBbcmVhZG9ubHldPVwicmVhZG9ubHlcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgKG9ua2V5KT1cImhhbmRsZUtleUV2ZW50KCRldmVudClcIlxuICAgICAgICAgIFtzaXplXT1cInNpemVcIlxuICAgICAgICAgIChvbkZvY3VzKT1cIm9uRm9jdXNUZXh0Qm94KCRldmVudClcIlxuICAgICAgICA+XG4gICAgICAgIDwvYXgtdGV4dC1ib3g+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9uZy1jb250YWluZXI+XG4gIDxuZy1jb250YWluZXIgZW5kPlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltlbmRdXCI+IDwvbmctY29udGVudD5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPG5nLWNvbnRhaW5lciBwYW5lbD5cbiAgICA8ZGl2ICpuZ0lmPVwiYWxsb3dTZWFyY2hcIiBjbGFzcz1cInNlYXJjaC13cmFwcGVyXCIgc3R5bGU9XCJwYWRkaW5nOiAwLjdlbVwiPlxuICAgICAgPGF4LXNlYXJjaC1ib3hcbiAgICAgICAgI3NlcmNoQm94XG4gICAgICAgIFtvbkRlbWFuZFRyYW5zbGF0ZV09XCJvbkRlbWFuZFRyYW5zbGF0ZVwiXG4gICAgICAgIFsodmFsdWUpXT1cInRleHRcIlxuICAgICAgICAob25rZXkpPVwiaGFuZGxlS2V5RXZlbnRTZWFyY2goJGV2ZW50KVwiXG4gICAgICAgICh0ZXh0Q2hhbmdlZCk9XCJ0ZXh0Q2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgICAgKG9uQnV0dG9uQ2xpY2spPVwidGV4dENoYW5nZWQoJGV2ZW50KVwiXG4gICAgICA+XG4gICAgICA8L2F4LXNlYXJjaC1ib3g+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImF4IGxpc3QtY29udGFpbmVyXCI+XG4gICAgICA8ZGl2XG4gICAgICAgICNsaXN0Q29udGFpbmVyXG4gICAgICAgIGNsYXNzPVwibGlzdC1jb250YWluZXItaXRlbXNcIlxuICAgICAgICAoc2Nyb2xsKT1cInNjcm9sbGVkKCRldmVudClcIlxuICAgICAgPlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgKm5nSWY9XCJnZXRJdGVtcygpLmxlbmd0aCA+IDA7IHRoZW4gdGhlblRlbXBsYXRlOyBlbHNlIGVsc2VUZW1wbGF0ZVwiXG4gICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICN0aGVuVGVtcGxhdGU+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgW2NsYXNzLmF4LXN0YXRlLWRpc2FibGVkXT1cImlzSXRlbURpc2FibGVkKGl0ZW0pXCJcbiAgICAgICAgICAgIGNsYXNzPVwibGlzdC1pdGVtXCJcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGdldEl0ZW1zKCk7IGxldCBpID0gaW5kZXhcIlxuICAgICAgICAgICAgW2NsYXNzLmZvY3VzZWRdPVwiaSA9PSBjdXJyZW50Zm9jdXNlZEluZGV4XCJcbiAgICAgICAgICAgIFtjbGFzcy5zZWxlY3RlZF09XCJpc0l0ZW1TZWxlY3RlZChpdGVtKVwiXG4gICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlSXRlbUNsaWNrKCRldmVudCwgaXRlbSlcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OiBmbGV4XCI+XG4gICAgICAgICAgICAgIDxheC1jaGVjay1ib3hcbiAgICAgICAgICAgICAgICAqbmdJZj1cInNob3dDaGVja0JveFwiXG4gICAgICAgICAgICAgICAgW3NpemVdPVwic2l6ZVwiXG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cImlzSXRlbVNlbGVjdGVkKGl0ZW0pXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiXG4gICAgICAgICAgICAgICAgICAoIWFsbG93TnVsbCAmJlxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZEl0ZW1zLmxlbmd0aCA9PT0gMSAmJlxuICAgICAgICAgICAgICAgICAgICBpc0l0ZW1TZWxlY3RlZChpdGVtKSkgfHxcbiAgICAgICAgICAgICAgICAgIGlzSXRlbURpc2FibGVkKGl0ZW0pXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAob25DbGljayk9XCJoYW5kbGVJdGVtQ2xpY2soJGV2ZW50LCBpdGVtKVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPC9heC1jaGVjay1ib3g+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJyb3dUZW1wbGF0ZTsgZWxzZSBlbHNlVGVtcGxhdGVcIj5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICBzdHlsZT1cIlxuICAgICAgICAgICAgICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgICAgICAgICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgICAgICAgICAgICAgZmxleDogMTtcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiaXRlbVt0ZXh0RmllbGRdXCJcbiAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cIlxuICAgICAgICAgICAgICAgICAgICBzaG93Q2hlY2tCb3ggPyB7ICdwYWRkaW5nLWlubGluZS1zdGFydCc6ICcwLjVyZW0nIH0gOiAnJ1xuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgICAgICAgcm93VGVtcGxhdGU7XG4gICAgICAgICAgICAgICAgICAgICAgY29udGV4dDogeyAkaW1wbGljaXQ6IGl0ZW0gfVxuICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2Vsc2VUZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICBzdHlsZT1cIlxuICAgICAgICAgICAgICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgICAgICAgICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgICAgICAgICAgICAgZmxleDogMTtcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiaXRlbVt0ZXh0RmllbGRdXCJcbiAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cIlxuICAgICAgICAgICAgICAgICAgICBzaG93Q2hlY2tCb3ggPyB7ICdwYWRkaW5nLWlubGluZS1zdGFydCc6ICcwLjVyZW0nIH0gOiAnJ1xuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7eyBpdGVtW3RleHRGaWVsZF0gfX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd0xvYWRpbmdcIiBjbGFzcz1cImF4LXBhZC1zbVwiIHN0eWxlPVwidGV4dC1hbGlnbjogY2VudGVyXCI+XG4gICAgICAgICAgPGlcbiAgICAgICAgICAgIGNsYXNzPVwiZmFyIGZhLXNwaW5uZXItdGhpcmQgZmEtcHVsc2UgZmEtMnhcIlxuICAgICAgICAgICAgc3R5bGU9XCJjb2xvcjogdmFyKC0tYXgtcHJpbWFyeS1jb2xvcilcIlxuICAgICAgICAgID48L2k+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8IS0tIDxheC1sb2FkaW5nLWluZGljYXRvciA+PC9heC1sb2FkaW5nLWluZGljYXRvcj4gLS0+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjZWxzZVRlbXBsYXRlPlxuICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgIHNob3dMb2FkaW5nID09IHRydWU7XG4gICAgICAgICAgICAgIHRoZW4gc2VhcmNoVGVtcGxhdGU7XG4gICAgICAgICAgICAgIGVsc2Ugbm9EYXRhVGVtcGxhdGVcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjc2VhcmNoVGVtcGxhdGU+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlzdC1pdGVtXCI+XG4gICAgICAgICAgICAgIHt7ICdjb21tb24uc2VhcmNoJyB8IHRyYW5zIH19XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9EYXRhVGVtcGxhdGU+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlzdC1pdGVtXCI+XG4gICAgICAgICAgICAgIHt7ICdjb21tb24ubm9EYXRhRm91bmQnIHwgdHJhbnMgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9uZy1jb250YWluZXI+XG48L2F4LWRyb3AtZG93bj5cbiJdfQ==
|
1142
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0Ym94LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9zcmMvbGliL3NlbGVjdGJveC9zZWxlY3Rib3guY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL3NyYy9saWIvc2VsZWN0Ym94L3NlbGVjdGJveC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3hDLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osVUFBVSxFQUNWLFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUNOLE1BQU0sRUFDTixXQUFXLEVBQ1gsU0FBUyxFQUNULGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbEMsT0FBTyxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3BFLE9BQU8sRUFJTCxzQkFBc0IsR0FDdkIsTUFBTSx1QkFBdUIsQ0FBQztBQUMvQixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbkQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFFNUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDckUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDeEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9DQUFvQyxDQUFD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V0FBVztzQkFBbkIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBRUksV0FBVztzQkFBcEIsTUFBTTtnQkFFRyxNQUFNO3NCQUFmLE1BQU07Z0JBRUcsT0FBTztzQkFBaEIsTUFBTTtnQkFJSSxLQUFLO3NCQURmLEtBQUs7Z0JBc0JOLGdCQUFnQjtzQkFEZixNQUFNO2dCQUtQLG1CQUFtQjtzQkFEbEIsTUFBTTtnQkFLSSxhQUFhO3NCQUR2QixLQUFLO2dCQXlCRyxJQUFJO3NCQUFaLEtBQUs7Z0JBRUcsT0FBTztzQkFBZixLQUFLO2dCQW1MTixvQkFBb0I7c0JBRG5CLE1BQU07Z0JBTUksY0FBYztzQkFEeEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFYQ29uZmlnIH0gZnJvbSAnQGFjb3JleC9jb3JlJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE5nWm9uZSxcbiAgT3V0cHV0LFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBkaWZmZXJlbmNlQnkgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7XG4gIEFYQmFzZUlucHV0Q29tcG9uZW50LFxuICBBWEJhc2VTaXphYmxlQ29tcG9uZW50LFxuICBBWEVsZW1lbnRTaXplLFxuICBBWFZhbGlkYXRhYmxlQ29tcG9uZW50LFxufSBmcm9tICcuLi9iYXNlL2VsZW1lbnQuY2xhc3MnO1xuaW1wb3J0IHsgQVhCYXNlRXZlbnQgfSBmcm9tICcuLi9iYXNlL2V2ZW50cy5jbGFzcyc7XG5pbXBvcnQgeyBBWERhdGFTb3VyY2VDb21wb25lbnQgfSBmcm9tICcuLi9kYXRhLXNvdXJjZS9kYXRhc291cmNlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBWERhdGFTb3VyY2VSZWFkUGFyYW1zIH0gZnJvbSAnLi4vZGF0YS1zb3VyY2UvcmVhZC1wYXJhbSc7XG5pbXBvcnQgeyBBWERyb3Bkb3duQ29tcG9uZW50IH0gZnJvbSAnLi4vZHJvcGRvd24vZHJvcGRvd24uY29tcG9uZW50JztcbmltcG9ydCB7IEFYU2VhcmNoQm94Q29tcG9uZW50IH0gZnJvbSAnLi4vc2VhcmNoYm94L3NlYXJjaGJveC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQVhUZXh0Qm94Q29tcG9uZW50IH0gZnJvbSAnLi4vdGV4dGJveC90ZXh0Ym94LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBWFZhbGlkYXRpb24gfSBmcm9tICcuLi92YWxpZGF0aW9uL3ZhbGlkYXRpb24uY29tcG9uZW50JztcbmV4cG9ydCBjbGFzcyBBWFNlbGVjdEJveFNlbGVjdGlvbkNoYW5nZWRFdmVudCBleHRlbmRzIEFYQmFzZUV2ZW50IHtcbiAgY29uc3RydWN0b3IoXG4gICAgY29tcG9uZW50OiBhbnksXG4gICAgcHVibGljIHNlbGVjdGVkSXRlbXM6IGFueVtdLFxuICAgIHB1YmxpYyBzZWxlY3RlZFZhbHVlczogYW55W10gfCBhbnlcbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmNvbXBvbmVudCA9IGNvbXBvbmVudDtcbiAgfVxufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdheC1zZWxlY3QtYm94JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3NlbGVjdGJveC5jb21wb25lbnQuaHRtbCcsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBob3N0OiB7IHN0eWxlOiAnd2lkdGg6IDEwMCUnIH0sXG4gIHByb3ZpZGVyczogW1xuICAgIHsgcHJvdmlkZTogQVhWYWxpZGF0YWJsZUNvbXBvbmVudCwgdXNlRXhpc3Rpbmc6IEFYU2VsZWN0Qm94Q29tcG9uZW50IH0sXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIEFYU2VsZWN0Qm94Q29tcG9uZW50XG4gIGV4dGVuZHMgQVhWYWxpZGF0YWJsZUNvbXBvbmVudFxuICBpbXBsZW1lbnRzIEFYQmFzZVNpemFibGVDb21wb25lbnQsIEFYQmFzZUlucHV0Q29tcG9uZW50XG57XG4gIEBJbnB1dCgpIHNob3dEcm9wRG93bkJ1dHRvbjogYm9vbGVhbiA9IHRydWU7XG5cbiAgQENvbnRlbnRDaGlsZChUZW1wbGF0ZVJlZiwgeyBzdGF0aWM6IHRydWUgfSlcbiAgcm93VGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgQElucHV0KClcbiAgcm93SW5wdXRUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcbiAgQFZpZXdDaGlsZChBWFRleHRCb3hDb21wb25lbnQsIHsgc3RhdGljOiB0cnVlIH0pXG4gIHNwYW46IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuXG4gIEBWaWV3Q2hpbGQoQVhUZXh0Qm94Q29tcG9uZW50LCB7IHN0YXRpYzogdHJ1ZSB9KVxuICB0ZXh0Ym94OiBBWFRleHRCb3hDb21wb25lbnQ7XG5cbiAgQFZpZXdDaGlsZCgnbGlzdENvbnRhaW5lcicsIHsgc3RhdGljOiB0cnVlIH0pXG4gIGxpc3RDb250YWluZXI6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuXG4gIEBWaWV3Q2hpbGQoJ3NlcmNoQm94JywgeyBzdGF0aWM6IGZhbHNlIH0pXG4gIHNlcmNoQm94OiBBWFNlYXJjaEJveENvbXBvbmVudDtcblxuICBAVmlld0NoaWxkKCd0ZXh0Qm94U2VsZWN0Qm94JywgeyBzdGF0aWM6IHRydWUgfSlcbiAgdGV4dEJveFNlbGVjdEJveDogQVhUZXh0Qm94Q29tcG9uZW50O1xuXG4gIEBJbnB1dCgpIHNob3dDaGVja0JveDogYm9vbGVhbiA9IHRydWU7XG5cbiAgQElucHV0KCkgcmVhZG9ubHk6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBASW5wdXQoKSBydGw6IGJvb2xlYW4gPSBBWENvbmZpZy5nZXQoJ2xheW91dC5ydGwnKTtcblxuICBASW5wdXQoKSBkaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyOiBzdHJpbmc7XG5cbiAgQElucHV0KCkgc2l6ZTogQVhFbGVtZW50U2l6ZSA9ICdtZCc7XG5cbiAgQElucHV0KCkgYWxsb3dOdWxsOiBib29sZWFuID0gdHJ1ZTtcblxuICBASW5wdXQoKSB0ZXh0QWxpZ246ICdyaWdodCcgfCAnbGVmdCcgfCBudWxsID0gbnVsbDtcblxuICBASW5wdXQoKSBidWZmZXJTaXplOiBudW1iZXIgPSAyMDtcblxuICBASW5wdXQoKSByZW1vdGVPcGVyYXRpb246IGJvb2xlYW4gPSBmYWxzZTtcblxuICBASW5wdXQoKSBmaXRQYXJlbnQ6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIEBJbnB1dCgpIGRyb3Bkb3duV2lkdGg6IHN0cmluZyA9ICczMDBweCc7XG5cbiAgQElucHV0KCkgbXVsdGlMaW5lID0gZmFsc2U7XG5cbiAgQE91dHB1dCgpXG4gIGRyb3Bkb3duVG9nZ2xlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAvLyB0aGlzIGlucHV0IGlzIFByaXZhdGUgYW5kIG9ubHkgdXNlIGluIExPVlxuXG4gIEBJbnB1dCgpIG9uRGVtYW5kVHJhbnNsYXRlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgY3VycmVudGZvY3VzZWRJbmRleDogbnVtYmVyID0gLTE7XG4gIHNob3dMb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XG5cbiAgc2tpcDogbnVtYmVyID0gLTE7XG4gIHNlYXJjaFRleHQ6IHN0cmluZyA9ICcnO1xuICAvLyBASW5wdXQoKVxuICAvLyBjaGlwc1dpZHRoOiBzdHJpbmcgPSAnJztcblxuICB0ZXh0OiBzdHJpbmcgPSAnJztcbiAgdG90YWxDb3VudDogbnVtYmVyID0gMDtcblxuICBAQ29udGVudENoaWxkKEFYRGF0YVNvdXJjZUNvbXBvbmVudCwgeyBzdGF0aWM6IHRydWUgfSlcbiAgcHJpdmF0ZSBfY29udGVudERhdGFTb3VyY2U6IEFYRGF0YVNvdXJjZUNvbXBvbmVudDtcblxuICBwcml2YXRlIF9kYXRhU291cmNlOiBBWERhdGFTb3VyY2VDb21wb25lbnQ7XG5cbiAgQElucHV0KClcbiAgcHVibGljIGdldCBkYXRhU291cmNlKCk6IEFYRGF0YVNvdXJjZUNvbXBvbmVudCB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGFTb3VyY2UgPyB0aGlzLl9kYXRhU291cmNlIDogdGhpcy5fY29udGVudERhdGFTb3VyY2U7XG4gIH1cblxuICBwdWJsaWMgc2V0IGRhdGFTb3VyY2UodjogQVhEYXRhU291cmNlQ29tcG9uZW50KSB7XG4gICAgdGhpcy5fZGF0YVNvdXJjZSA9IHY7XG4gIH1cblxuICBAQ29udGVudENoaWxkKEFYVmFsaWRhdGlvbiwgeyBzdGF0aWM6IHRydWUgfSlcbiAgcHJpdmF0ZSBfY29udGVudFZhbGlkYXRpb246IEFYVmFsaWRhdGlvbjtcblxuICBwcml2YXRlIF92YWxpZGF0aW9uOiBBWFZhbGlkYXRpb247XG5cbiAgQElucHV0KClcbiAgcHVibGljIGdldCB2YWxpZGF0aW9uKCk6IEFYVmFsaWRhdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbGlkYXRpb24gPyB0aGlzLl92YWxpZGF0aW9uIDogdGhpcy5fY29udGVudFZhbGlkYXRpb247XG4gIH1cblxuICBwdWJsaWMgc2V0IHZhbGlkYXRpb24odjogQVhWYWxpZGF0aW9uKSB7XG4gICAgdGhpcy5fdmFsaWRhdGlvbiA9IHY7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSByZWY6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSB6b25lOiBOZ1pvbmVcbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIEBWaWV3Q2hpbGQoJ2QnLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICBkcm9wZG93bjogQVhEcm9wZG93bkNvbXBvbmVudDtcblxuICBASW5wdXQoKSBkaXNhYmxlZENhbGxiYWNrOiAoZTogeyBpdGVtOiBhbnk7IGluZGV4OiBudW1iZXIgfSkgPT4gYm9vbGVhbjtcblxuICBASW5wdXQoKSBhbGxvd1NlYXJjaDogYm9vbGVhbiA9IHRydWU7XG4gIEBJbnB1dCgpIHRleHRGaWVsZDogc3RyaW5nID0gJ3RleHQnO1xuICBASW5wdXQoKSB2YWx1ZUZpZWxkOiBzdHJpbmcgPSAndmFsdWUnO1xuICBASW5wdXQoKSBkaXNhYmxlZEZpZWxkOiBzdHJpbmcgPSAnZGlzYWJsZWQnO1xuICBASW5wdXQoKSBtb2RlOiAnc2luZ2xlJyB8ICdtdWx0aXBsZScgPSAnc2luZ2xlJztcbiAgaXRlbVJlbW92ZTogYm9vbGVhbiA9IGZhbHNlO1xuICBAT3V0cHV0KCkgaXRlbXNDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnlbXT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueVtdPigpO1xuXG4gIEBPdXRwdXQoKSBvbkJsdXI6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgQE91dHB1dCgpIG9uRm9jdXM6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgcHJpdmF0ZSBfaXRlbXM6IGFueVtdID0gW107XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBnZXQgaXRlbXMoKTogYW55W10ge1xuICAgIHJldHVybiB0aGlzLl9pdGVtcztcbiAgfVxuICBwdWJsaWMgc2V0IGl0ZW1zKHY6IGFueVtdKSB7XG4gICAgdGhpcy5faXRlbXMgPSB2O1xuICAgIGlmICh0aGlzLml0ZW1zQ2hhbmdlKSB7XG4gICAgICB0aGlzLml0ZW1zQ2hhbmdlLmVtaXQodik7XG4gICAgfVxuICAgIGlmICh0aGlzLml0ZW1zU3RhdHVzT2JzZXJ2ZXIpIHtcbiAgICAgIHRoaXMuaXRlbXNTdGF0dXNPYnNlcnZlci5uZXh0KHRoaXMuaXRlbXMubGVuZ3RoKTtcbiAgICB9XG4gIH1cblxuICBoYXNTZWxlY3RlZFZhbHVlOiBib29sZWFuID0gZmFsc2U7XG4gIGl0ZW1zRmlsdGVyZWQ6IGFueVtdID0gW107XG5cbiAgLy8gI2VuZHJlZ2lvblxuXG4gIGRyb3BEb3duRGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBAT3V0cHV0KClcbiAgc2VsZWN0aW9uQ2hhbmdlZDogRXZlbnRFbWl0dGVyPEFYU2VsZWN0Qm94U2VsZWN0aW9uQ2hhbmdlZEV2ZW50PiA9XG4gICAgbmV3IEV2ZW50RW1pdHRlcjxBWFNlbGVjdEJveFNlbGVjdGlvbkNoYW5nZWRFdmVudD4oKTtcblxuICBAT3V0cHV0KClcbiAgc2VsZWN0ZWRJdGVtc0NoYW5nZTogRXZlbnRFbWl0dGVyPGFueVtdPiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55W10+KCk7XG5cbiAgcHJpdmF0ZSBfc2VsZWN0ZWRJdGVtczogYW55W10gPSBbXTtcbiAgQElucHV0KClcbiAgcHVibGljIGdldCBzZWxlY3RlZEl0ZW1zKCk6IGFueVtdIHtcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWRJdGVtcyB8fCBbXTtcbiAgfVxuICBwdWJsaWMgc2V0IHNlbGVjdGVkSXRlbXModjogYW55W10pIHtcbiAgICB0aGlzLnNldFNlbGVjdGVkSXRlbXNDaGFuZ2Uodik7XG4gICAgLy8gaWYgKCF2KSB7XG4gICAgLy8gICB2ID0gW107XG4gICAgLy8gfVxuXG4gICAgLy8gY29uc3Qgb2xkID0gdGhpcy5zZWxlY3RlZEl0ZW1zO1xuICAgIC8vIGlmIChKU09OLnN0cmluZ2lmeShvbGQpICE9PSBKU09OLnN0cmluZ2lmeSh2KSkge1xuICAgIC8vICAgdGhpcy5fc2VsZWN0ZWRJdGVtcyA9IHRoaXMubW9kZSA9PSAnc2luZ2xlJyA/IHYuc2xpY2UoMCwgMSkgOiBbLi4ubmV3IFNldCh2KV07IC8vWy4uLm5ldyBTZXQodlswXSldIDogWy4uLm5ldyBTZXQodildO1xuICAgIC8vICAgdGhpcy5fc2VsZWN0ZWRJdGVtcy5mb3JFYWNoKChjKSA9PiAoYy5zZWxlY3RlZCA9IHRydWUpKTtcbiAgICAvLyAgIHRoaXMuc2VsZWN0ZWRJdGVtc0NoYW5nZS5lbWl0KHRoaXMuX3NlbGVjdGVkSXRlbXMpO1xuICAgIC8vICAgdGhpcy5zZWxlY3RlZFZhbHVlc0NoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWRWYWx1ZXMpO1xuICAgIC8vICAgdGhpcy5jbGVhclZhbGlkYXRpb25TdHlsZSh0aGlzLnJlZi5uYXRpdmVFbGVtZW50KTtcbiAgICAvLyAgIHRoaXMud2FpdEZvckRhdGEoKCkgPT4ge1xuICAgIC8vICAgICBpZiAodGhpcy5fc2VsZWN0ZWRJdGVtcykge1xuICAgIC8vICAgICAgIHRoaXMuaXRlbXMuZm9yRWFjaCgoYykgPT4gKGMuc2VsZWN0ZWQgPSB0aGlzLl9zZWxlY3RlZEl0ZW1zLnNvbWUoKGkpID0+IGlbdGhpcy52YWx1ZUZpZWxkXSA9PSBjW3RoaXMudmFsdWVGaWVsZF0pKSk7XG4gICAgLy8gICAgIH1cbiAgICAvLyAgIH0pO1xuICAgIC8vIH1cbiAgfVxuXG4gIEBJbnB1dCgpIGF4SWQ/OiBzdHJpbmcgPSAnJztcblxuICBASW5wdXQoKSBheENsYXNzPzogc3RyaW5nID0gJyc7XG5cbiAgc2V0U2VsZWN0ZWRJdGVtc0NoYW5nZSh2OiBhbnlbXSwgb2xkOiBhbnlbXSA9IHRoaXMuc2VsZWN0ZWRJdGVtcykge1xuICAgIGlmICghdikge1xuICAgICAgdiA9IFtdO1xuICAgIH1cbiAgICAvLyBjb25zdCBvbGQgPSB0aGlzLnNlbGVjdGVkSXRlbXM7XG4gICAgdmFyIGYgPSBkaWZmZXJlbmNlQnkob2xkLCB2LCB0aGlzLnZhbHVlRmllbGQpO1xuICAgIHZhciBzID0gZGlmZmVyZW5jZUJ5KHYsIG9sZCwgdGhpcy52YWx1ZUZpZWxkKTtcbiAgICAvLyBpZiAoSlNPTi5zdHJpbmdpZnkob2xkKSAhPT0gSlNPTi5zdHJpbmdpZnkodikpIHtcbiAgICBpZiAoZi5sZW5ndGggIT0gMCB8fCBzLmxlbmd0aCAhPSAwKSB7XG4gICAgICB0aGlzLl9zZWxlY3RlZEl0ZW1zID1cbiAgICAgICAgdGhpcy5tb2RlID09ICdzaW5nbGUnID8gdi5zbGljZSgwLCAxKSA6IFsuLi5uZXcgU2V0KHYpXTsgLy9bLi4ubmV3IFNldCh2WzBdKV0gOiBbLi4ubmV3IFNldCh2KV07XG4gICAgICB0aGlzLl9zZWxlY3RlZEl0ZW1zLmZvckVhY2goKGMpID0+IChjLnNlbGVjdGVkID0gdHJ1ZSkpO1xuICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zQ2hhbmdlLmVtaXQodGhpcy5fc2VsZWN0ZWRJdGVtcyk7XG4gICAgICB0aGlzLnNlbGVjdGVkVmFsdWVzQ2hhbmdlLmVtaXQodGhpcy5zZWxlY3RlZFZhbHVlcyk7XG4gICAgICB0aGlzLmNsZWFyVmFsaWRhdGlvblN0eWxlKHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgdGhpcy53YWl0Rm9yRGF0YSgoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9zZWxlY3RlZEl0ZW1zKSB7XG4gICAgICAgICAgdGhpcy5pdGVtcy5mb3JFYWNoKFxuICAgICAgICAgICAgKGMpID0+XG4gICAgICAgICAgICAgIChjLnNlbGVjdGVkID0gdGhpcy5fc2VsZWN0ZWRJdGVtcy5zb21lKFxuICAgICAgICAgICAgICAgIChpKSA9PiBpW3RoaXMudmFsdWVGaWVsZF0gPT0gY1t0aGlzLnZhbHVlRmllbGRdXG4gICAgICAgICAgICAgICkpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgaWYgKHRoaXMucm93VGVtcGxhdGUgPT09IHVuZGVmaW5lZCAmJiB0aGlzLnJvd0lucHV0VGVtcGxhdGUgIT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnJvd1RlbXBsYXRlID0gdGhpcy5yb3dJbnB1dFRlbXBsYXRlO1xuICAgIH1cbiAgICBpZiAodGhpcy5ydGwgPT0gbnVsbCkge1xuICAgICAgdGhpcy5ydGwgPVxuICAgICAgICB3aW5kb3dcbiAgICAgICAgICAuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLnJlZi5uYXRpdmVFbGVtZW50LCBudWxsKVxuICAgICAgICAgIC5nZXRQcm9wZXJ0eVZhbHVlKCdkaXJlY3Rpb24nKSA9PT0gJ3J0bCc7XG4gICAgfVxuICB9XG5cbiAgc2Nyb2xsZWQoZSkge1xuICAgIGlmIChcbiAgICAgIHRoaXMucmVtb3RlT3BlcmF0aW9uICYmXG4gICAgICB0aGlzLnRvdGFsQ291bnQgPiB0aGlzLml0ZW1zLmxlbmd0aCAmJlxuICAgICAgdGhpcy5saXN0Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsSGVpZ2h0ICE9IDAgJiZcbiAgICAgIHRoaXMubGlzdENvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbEhlaWdodCAtXG4gICAgICAgIHRoaXMubGlzdENvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcCAtXG4gICAgICAgIDMwMCA8XG4gICAgICAgIDUwXG4gICAgKSB7XG4gICAgICBpZiAodGhpcy5za2lwICE9PSB0aGlzLml0ZW1zLmxlbmd0aCkge1xuICAgICAgICB0aGlzLnNob3dMb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5za2lwID0gdGhpcy5pdGVtcy5sZW5ndGg7XG4gICAgICAgIGNvbnN0IHBhcmFtczogQVhEYXRhU291cmNlUmVhZFBhcmFtcyA9IHt9O1xuICAgICAgICBwYXJhbXMuc2tpcCA9IHRoaXMuaXRlbXMubGVuZ3RoO1xuICAgICAgICBwYXJhbXMudGFrZSA9IHRoaXMuYnVmZmVyU2l6ZTsgLy8qIChNYXRoLmZsb29yKHRoaXMuaXRlbXMubGVuZ3RoIC8gdGhpcy5idWZmZXJTaXplKSArIDEpO1xuICAgICAgICBpZiAodGhpcy50ZXh0Ym94KSB7XG4gICAgICAgICAgcGFyYW1zLnNlYXJjaFRleHQgPSB0aGlzLnRleHQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGFyYW1zLnNlYXJjaFRleHQgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZmV0Y2gocGFyYW1zKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBzZXRTZWxlY3RlZEl0ZW1zKHY6IGFueVtdLCBpc1VzZXJJbnB1dDogYm9vbGVhbikge1xuICAgIGxldCBjaGFuZ2VkID0gZmFsc2U7XG4gICAgaWYgKGlzVXNlcklucHV0KSB7XG4gICAgICBjaGFuZ2VkID0gSlNPTi5zdHJpbmdpZnkodikgIT09IEpTT04uc3RyaW5naWZ5KHRoaXMuc2VsZWN0ZWRJdGVtcyk7XG4gICAgfVxuICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IHY7XG4gICAgdGhpcy5zZXRTZWxlY3RlZEluZGV4KCk7XG4gICAgaWYgKGlzVXNlcklucHV0ICYmIGNoYW5nZWQpIHtcbiAgICAgIHRoaXMuZW1pdFNlbGVjdGlvbkNoYW5nZWRFdmVudCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2VhcmNoQ2hhbmdlT2JzZXJ2ZXI6IGFueTtcblxuICBkZWxheTogbnVtYmVyID0gNTAwO1xuXG4gIHRleHRDaGFuZ2VkKGUpIHtcbiAgICBpZiAoXG4gICAgICAoZS52YWx1ZSA9PT0gbnVsbCB8fCBlLnZhbHVlID09PSB1bmRlZmluZWQgfHwgZS52YWx1ZSA9PT0gJycpICYmXG4gICAgICAoZS5vbGRWYWx1ZSA9PT0gbnVsbCB8fCBlLm9sZFZhbHVlID09PSB1bmRlZmluZWQgfHwgZS5vbGRWYWx1ZSA9PT0gJycpXG4gICAgKSB7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY3VycmVudGZvY3VzZWRJbmRleCA9IC0xO1xuICAgICAgaWYgKHRoaXMucmVtb3RlT3BlcmF0aW9uKSB7XG4gICAgICAgIHRoaXMuc2VhcmNoVGV4dCA9IHRoaXMudGV4dDtcbiAgICAgICAgLy8gIHRoaXMuc2VhcmNoVGV4dCA9IGUudmFsdWU7XG4gICAgICAgIC8vIHRoaXMudGV4dCA9IGUudmFsdWU7XG4gICAgICAgIC8vIHRoaXMuaXRlbXMgPSBbXTtcbiAgICAgICAgaWYgKHRoaXMuaXRlbXMpIHtcbiAgICAgICAgICBsZXQgdCA9IHRoaXMuaXRlbXMubGVuZ3RoO1xuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdDsgaSsrKSB7XG4gICAgICAgICAgICB0aGlzLml0ZW1zLnBvcCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHRoaXMuaXRlbXMuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgICAgICAvLyAgIHRoaXMuaXRlbXMucG9wKCk7XG4gICAgICAgIC8vIH0pO1xuICAgICAgICBjb25zdCBwYXJhbXM6IEFYRGF0YVNvdXJjZVJlYWRQYXJhbXMgPSB7fTtcbiAgICAgICAgcGFyYW1zLnNlYXJjaFRleHQgPSB0aGlzLnRleHQ7XG4gICAgICAgIC8vIHBhcmFtcy5zZWFyY2hUZXh0ID0gZS52YWx1ZTtcbiAgICAgICAgcGFyYW1zLnNraXAgPSAwO1xuICAgICAgICBwYXJhbXMudGFrZSA9IHRoaXMuYnVmZmVyU2l6ZTtcbiAgICAgICAgdGhpcy5mZXRjaChwYXJhbXMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlzSXRlbURpc2FibGVkKGl0ZW06IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmIChpdGVtW3RoaXMuZGlzYWJsZWRGaWVsZF0gPT0gdHJ1ZSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmICh0aGlzLmRpc2FibGVkQ2FsbGJhY2spIHtcbiAgICAgIHJldHVybiB0aGlzLmRpc2FibGVkQ2FsbGJhY2soeyBpdGVtLCBpbmRleDogLTEgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBvbkJ1dHRvbkNsaWNrKGUpIHt9XG5cbiAgcHJpdmF0ZSBzZXRTZWxlY3RlZEluZGV4KHNpZ246IC0xIHwgMSB8IG51bGwgPSBudWxsKTogdm9pZCB7XG4gICAgaWYgKHNpZ24gPT0gbnVsbCkge1xuICAgICAgaWYgKCF0aGlzLnJlbW90ZU9wZXJhdGlvbiAmJiB0aGlzLnRleHQgJiYgdGhpcy50ZXh0ICE9PSAnJykge1xuICAgICAgICB0aGlzLmN1cnJlbnRmb2N1c2VkSW5kZXggPSB0aGlzLml0ZW1zXG4gICAgICAgICAgLmZpbHRlcigoYykgPT5cbiAgICAgICAgICAgIChjW3RoaXMudGV4dEZpZWxkXSBhcyBzdHJpbmcpXG4gICAgICAgICAgICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICAgIC5pbmNsdWRlcyh0aGlzLnRleHQudG9Mb3dlckNhc2UoKSlcbiAgICAgICAgICApXG4gICAgICAgICAgLmluZGV4T2YodGhpcy5zZWxlY3RlZEl0ZW1zW3RoaXMuc2VsZWN0ZWRJdGVtcy5sZW5ndGggLSAxXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmN1cnJlbnRmb2N1c2VkSW5kZXggPSB0aGlzLml0ZW1zLmluZGV4T2YoXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zW3RoaXMuc2VsZWN0ZWRJdGVtcy5sZW5ndGggLSAxXVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzaWduID09PSAtMSA/IHRoaXMuY3VycmVudGZvY3VzZWRJbmRleC0tIDogdGhpcy5jdXJyZW50Zm9jdXNlZEluZGV4Kys7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucmVtb3RlT3BlcmF0aW9uKSB7XG4gICAgICB0aGlzLml0ZW1zRmlsdGVyZWQgPSB0aGlzLml0ZW1zO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLml0ZW1zRmlsdGVyZWQgPSB0aGlzLnRleHRcbiAgICAgICAgPyB0aGlzLml0ZW1zLmZpbHRlcigoYykgPT5cbiAgICAgICAgICAgIChjW3RoaXMudGV4dEZpZWxkXSBhcyBzdHJpbmcpXG4gICAgICAgICAgICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICAgIC5pbmNsdWRlcyh0aGlzLnRleHQudG9Mb3dlckNhc2UoKSlcbiAgICAgICAgICApXG4gICAgICAgIDogdGhpcy5pdGVtcztcbiAgICB9XG5cbiAgICB0aGlzLmN1cnJlbnRmb2N1c2VkSW5kZXggPVxuICAgICAgdGhpcy5jdXJyZW50Zm9jdXNlZEluZGV4IDwgMFxuICAgICAgICA/IDBcbiAgICAgICAgOiB0aGlzLmN1cnJlbnRmb2N1c2VkSW5kZXggPj0gdGhpcy5pdGVtc0ZpbHRlcmVkLmxlbmd0aFxuICAgICAgICA/IHRoaXMuaXRlbXNGaWx0ZXJlZC5sZW5ndGggLSAxXG4gICAgICAgIDogdGhpcy5jdXJyZW50Zm9jdXNlZEluZGV4O1xuICAgIC8vXG4gICAgLy8gc2V0IHNjcm9sbFxuICAgIGlmICh0aGlzLmxpc3RDb250YWluZXIpIHtcbiAgICAgIHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgIGNvbnN0IGl0ZW1EaXYgPSB0aGlzLmxpc3RDb250YWluZXIubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgICAgIGAubGlzdC1pdGVtOm50aC1jaGlsZCgke3RoaXMuY3VycmVudGZvY3VzZWRJbmRleH0pYFxuICAgICAgICApO1xuICAgICAgICBpZiAoaXRlbURpdikge1xuICAgICAgICAgIGl0ZW1EaXYuc2Nyb2xsSW50b1ZpZXcoeyBiZWhhdmlvcjogJ3Ntb290aCcgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIEBPdXRwdXQoKVxuICBzZWxlY3RlZFZhbHVlc0NoYW5nZTogRXZlbnRFbWl0dGVyPGFueVtdIHwgYW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8XG4gICAgYW55W10gfCBhbnlcbiAgPigpO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBnZXQgc2VsZWN0ZWRWYWx1ZXMoKTogYW55W10gfCBhbnkge1xuICAgIGlmICh0aGlzLm1vZGUgPT09ICdzaW5nbGUnKSB7XG4gICAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWRJdGVtcy5tYXAoKGMpID0+IGNbdGhpcy52YWx1ZUZpZWxkXSlbMF07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZEl0ZW1zLm1hcCgoYykgPT4gY1t0aGlzLnZhbHVlRmllbGRdKSB8fCBbXTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc2V0IHNlbGVjdGVkVmFsdWVzKHY6IGFueVtdIHwgYW55KSB7XG4gICAgaWYgKHRoaXMuY29tcGFyZVNlbGVjdGVkVmFsdWVzKHYpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh2ID09IG51bGwpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IFtdO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh2ICE9IFtdISAmJiB2ICE9ICcnICYmIHYgIT0gbnVsbCkge1xuICAgICAgICAgIHRoaXMuaGFzU2VsZWN0ZWRWYWx1ZSA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLndhaXRGb3JEYXRhKCgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5tb2RlID09PSAnc2luZ2xlJykge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXRlbXMuZmlsdGVyKChjKSA9PiB2ID09IGNbdGhpcy52YWx1ZUZpZWxkXSkpIHtcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gdGhpcy5pdGVtcy5maWx0ZXIoXG4gICAgICAgICAgICAgICAgKGMpID0+IHYgPT0gY1t0aGlzLnZhbHVlRmllbGRdXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodikpIHtcbiAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRJdGVtcy5sZW5ndGggPiB2Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IHRoaXMuc2VsZWN0ZWRJdGVtcy5maWx0ZXIoKGMpID0+XG4gICAgICAgICAgICAgICAgICB2LmluY2x1ZGVzKGNbdGhpcy52YWx1ZUZpZWxkXSlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGxldCBhZGRJZCA9IFtdO1xuICAgICAgICAgICAgICAgIHYuZm9yRWFjaCgodklkKSA9PiB7XG4gICAgICAgICAgICAgICAgICBhZGRJZC5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgW3RoaXMudmFsdWVGaWVsZF06IHZJZCxcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgbGV0IG5ld0lkID0gZGlmZmVyZW5jZUJ5KFxuICAgICAgICAgICAgICAgICAgYWRkSWQsXG4gICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMsXG4gICAgICAgICAgICAgICAgICB0aGlzLnZhbHVlRmllbGRcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGxldCB2diA9IFtdO1xuICAgICAgICAgICAgICAgIG5ld0lkLmZvckVhY2goKHJjKSA9PiB7XG4gICAgICAgICAgICAgICAgICB2di5wdXNoKHJjW3RoaXMudmFsdWVGaWVsZF0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNcbiAgICAgICAgICAgICAgICAgIC5maWx0ZXIoKGMpID0+IHZ2LmluY2x1ZGVzKGNbdGhpcy52YWx1ZUZpZWxkXSkpXG4gICAgICAgICAgICAgICAgICAuZm9yRWFjaCgocmVzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5wdXNoKHJlcyk7XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAvLyAgdGhpcy5zZWxlY3RlZEl0ZW1zLnB1c2godGhpcy5pdGVtcy5maWx0ZXIoKGMpID0+IHZ2LmluY2x1ZGVzKGNbdGhpcy52YWx1ZUZpZWxkXSkpKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFNlbGVjdGVkSXRlbXNDaGFuZ2UoXG4gICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMsXG4gICAgICAgICAgICAgICAgICB2di5sZW5ndGggPiAwID8gWzFdIDogdGhpcy5zZWxlY3RlZEl0ZW1zXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIC8vICB0aGlzLnNlbGVjdGVkSXRlbXMgPSB0aGlzLml0ZW1zLmZpbHRlcigoYykgPT4gdi5pbmNsdWRlcyhjW3RoaXMudmFsdWVGaWVsZF0pKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodikge1xuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSB0aGlzLml0ZW1zLmZpbHRlcihcbiAgICAgICAgICAgICAgICAoYykgPT4gdiA9PT0gY1t0aGlzLnZhbHVlRmllbGRdXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlc0NoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWRWYWx1ZXMpO1xuICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjb21wYXJlU2VsZWN0ZWRWYWx1ZXMobmV3VmFsdWU6IGFueVtdIHwgYW55KSB7XG4gICAgY29uc3QgY3VycmVudFZhbHVlID0gdGhpcy5zZWxlY3RlZFZhbHVlcztcbiAgICByZXR1cm4gKFxuICAgICAgKGN1cnJlbnRWYWx1ZSA9PSBudWxsICYmIG5ld1ZhbHVlID09IG51bGwpIHx8XG4gICAgICBKU09OLnN0cmluZ2lmeShjdXJyZW50VmFsdWUpID09PSBKU09OLnN0cmluZ2lmeShuZXdWYWx1ZSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRTZWxlY3RlZFZhbHVlcyh2OiBhbnlbXSB8IGFueSwgaXNVc2VySW5wdXQ6IGJvb2xlYW4pIHtcbiAgICBjb25zdCBjaGFuZ2VkID0gaXNVc2VySW5wdXQgPyAhdGhpcy5jb21wYXJlU2VsZWN0ZWRWYWx1ZXModikgOiBmYWxzZTtcbiAgICB0aGlzLnNlbGVjdGVkVmFsdWVzID0gdjtcbiAgICBpZiAoaXNVc2VySW5wdXQgJiYgY2hhbmdlZCkge1xuICAgICAgdGhpcy5lbWl0U2VsZWN0aW9uQ2hhbmdlZEV2ZW50KCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBlbWl0U2VsZWN0aW9uQ2hhbmdlZEV2ZW50KCkge1xuICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZXNDaGFuZ2UuZW1pdCh0aGlzLnNlbGVjdGVkVmFsdWVzKTtcbiAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZWQuZW1pdChcbiAgICAgIG5ldyBBWFNlbGVjdEJveFNlbGVjdGlvbkNoYW5nZWRFdmVudChcbiAgICAgICAgdGhpcyxcbiAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLFxuICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVzXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5idWZmZXJTaXplIDwgMTApIHtcbiAgICAgIHRoaXMuYnVmZmVyU2l6ZSA9IDEwO1xuICAgIH1cbiAgICBpZiAodGhpcy5tb2RlID09ICdzaW5nbGUnKSB7XG4gICAgICB0aGlzLnNob3dDaGVja0JveCA9IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNob3dDaGVja0JveCA9IHRydWU7XG4gICAgfVxuICAgIGlmIChcbiAgICAgICF0aGlzLnJlbW90ZU9wZXJhdGlvbiB8fFxuICAgICAgKHRoaXMucmVtb3RlT3BlcmF0aW9uICYmIHRoaXMuaGFzU2VsZWN0ZWRWYWx1ZSlcbiAgICApIHtcbiAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgIH1cbiAgfVxuICBkcm9wZG93blRvZ2dsZVNlbGVjQm94KGUpIHtcbiAgICB0aGlzLnRleHQgPSAnJztcbiAgICBpZiAodGhpcy5kcm9wZG93bi5pc09wZW4pIHtcbiAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLnNlcmNoQm94KSB7XG4gICAgICAgICAgdGhpcy5zZXJjaEJveC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICB9LCAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gIHRoaXMucmVmcmVzaCgpO1xuICAgIH1cbiAgICB0aGlzLmRyb3Bkb3duVG9nZ2xlLmVtaXQoZSk7XG4gIH1cblxuICBuZ0FmdGVyQ29udGVudEluaXQoKSB7XG4gICAgLy8gaWYgKCF0aGlzLmFsbG93U2VhcmNoKSB7XG4gICAgLy8gICAgIGlmICh0aGlzLnJlYWRvbmx5ID09IGZhbHNlKSB7XG4gICAgLy8gICAgICAgICB0aGlzLml0ZW1SZW1vdmUgPSB0cnVlO1xuICAgIC8vICAgICAgICAgdGhpcy5yZWFkb25seSA9IHRydWU7XG4gICAgLy8gICAgIH1cbiAgICAvLyB9XG4gICAgdGhpcy5pbml0VmFsaWRhdGlvbih0aGlzLnJlZiwgJ3NlbGVjdGVkSXRlbXMnLCB0aGlzLnZhbGlkYXRpb24pO1xuICAgIGlmICh0aGlzLmRhdGFTb3VyY2UpIHtcbiAgICAgIC8vIGlmICh0aGlzLmFsbG93U2VhcmNoID09IGZhbHNlKSB7XG4gICAgICAvLyAgIHRoaXMuZmV0Y2goKTtcbiAgICAgIC8vIH1cbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5vbkRhdGFSZWNlaXZlZC5zdWJzY3JpYmUoKGMpID0+IHtcbiAgICAgICAgdGhpcy5zaG93TG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmRhdGFSZWNlaXZlZChjLmRhdGEucmVzdWx0KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBwcml2YXRlIGRhdGFSZWNlaXZlZChkYXRhOiBhbnkpIHtcbiAgICBpZiAodGhpcy5yZW1vdGVPcGVyYXRpb24pIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5zZWFyY2hUZXh0ICYmXG4gICAgICAgIHRoaXMuc2VhcmNoVGV4dCAhPSBudWxsICYmXG4gICAgICAgIHRoaXMuc2VhcmNoVGV4dCAhPT0gJydcbiAgICAgICkge1xuICAgICAgICBpZiAoZGF0YS50b3RhbENvdW50KSB7XG4gICAgICAgICAgaWYgKHRoaXMuaXRlbXMubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgIC8vdGhpcy5pdGVtcyA9IGRhdGEuaXRlbXM7XG4gICAgICAgICAgICBkYXRhLml0ZW1zLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5pdGVtcy5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRhdGEuaXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgIXRoaXMuaXRlbXMuc29tZShcbiAgICAgICAgICAgICAgICAgICh4KSA9PiB4W3RoaXMudmFsdWVGaWVsZF0gPT09IGl0ZW1bdGhpcy52YWx1ZUZpZWxkXVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtcy5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIGlmICh0aGlzLml0ZW1zU3RhdHVzT2JzZXJ2ZXIpIHtcbiAgICAgICAgICAgIC8vICAgdGhpcy5pdGVtc1N0YXR1c09ic2VydmVyLm5leHQodGhpcy5pdGVtcy5sZW5ndGgpO1xuICAgICAgICAgICAgLy8gfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMudG90YWxDb3VudCA9IGRhdGEudG90YWxDb3VudDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAodGhpcy5pdGVtcy5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgdGhpcy5pdGVtcyA9IGRhdGEuaXRlbXM7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRhdGEuaXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLml0ZW1zLnB1c2goaXRlbSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIGlmICh0aGlzLml0ZW1zU3RhdHVzT2JzZXJ2ZXIpIHtcbiAgICAgICAgICAgIC8vICAgdGhpcy5pdGVtc1N0YXR1c09ic2VydmVyLm5leHQodGhpcy5pdGVtcy5sZW5ndGgpO1xuICAgICAgICAgICAgLy8gfVxuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnRvdGFsQ291bnQgPSBkYXRhLml0ZW1zID09IHVuZGVmaW5lZCA/IDAgOiBkYXRhLml0ZW1zLmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChkYXRhLml0ZW1zICYmIGRhdGEuaXRlbXMubGVuZ3RoID09PSBkYXRhLnRvdGFsQ291bnQpIHtcbiAgICAgICAgdGhpcy5pdGVtcyA9IGRhdGEuaXRlbXM7XG4gICAgICAgIHRoaXMudG90YWxDb3VudCA9IGRhdGEuaXRlbXMubGVuZ3RoO1xuICAgICAgfSBlbHNlIGlmIChkYXRhLnRvdGFsQ291bnQpIHtcbiAgICAgICAgZGF0YS5pdGVtcy5mb3JFYWNoKChlbG0pID0+IHtcbiAgICAgICAgICB0aGlzLml0ZW1zLnB1c2goZWxtKTtcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIGlmICh0aGlzLml0ZW1zU3RhdHVzT2JzZXJ2ZXIpIHtcbiAgICAgICAgLy8gICB0aGlzLml0ZW1zU3RhdHVzT2JzZXJ2ZXIubmV4dCh0aGlzLml0ZW1zLmxlbmd0aCk7XG4gICAgICAgIC8vIH1cbiAgICAgICAgdGhpcy50b3RhbENvdW50ID0gZGF0YS50b3RhbENvdW50O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGF0YS5mb3JFYWNoKChlbG0pID0+IHtcbiAgICAgICAgICB0aGlzLml0ZW1zLnB1c2goZWxtKTtcbiAgICAgICAgICAvLyBpZiAodGhpcy5pdGVtc1N0YXR1c09ic2VydmVyKSB7XG4gICAgICAgICAgLy8gICB0aGlzLml0ZW1zU3RhdHVzT2JzZXJ2ZXIubmV4dCh0aGlzLml0ZW1zLmxlbmd0aCk7XG4gICAgICAgICAgLy8gfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy50b3RhbENvdW50ID0gZGF0YS5sZW5ndGg7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaXRlbXMgPSBkYXRhO1xuICAgIH1cblxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcblxuICAgIHRoaXMuZHJvcGRvd24udXBkYXRlUG9zaXRpb24oKTtcbiAgfVxuXG4gIC8vIHByaXZhdGUgcGFyYW1zOiBBWERhdGFTb3VyY2VSZWFkUGFyYW1zID0ge307XG5cbiAgZmV0Y2gocGFyYW1zOiBBWERhdGFTb3VyY2VSZWFkUGFyYW1zID0ge30pIHtcbiAgICAvLyAgdGhpcy5wYXJhbXMgPSBwYXJhbXM7XG4gICAgaWYgKHRoaXMuZGF0YVNvdXJjZSkge1xuICAgICAgaWYgKHRoaXMub25EZW1hbmRUcmFuc2xhdGUgJiYgcGFyYW1zPy5zZWFyY2hUZXh0KSB7XG4gICAgICAgIHBhcmFtcy5zZWFyY2hUZXh0ID0gdGhpcy50cmFuc2xhdGVTZWFyY2gocGFyYW1zPy5zZWFyY2hUZXh0KTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2hvd0xvYWRpbmcgPSB0cnVlO1xuICAgICAgdGhpcy5kYXRhU291cmNlLmZldGNoKHBhcmFtcyk7XG4gICAgfVxuICB9XG5cbiAgdHJhbnNsYXRlU2VhcmNoKHNlYXJjaFRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgbGF0aW5QYXR0ZXJuID0gL1tBLVphLXo7J1xcL1xcXFxbXFxdLF0vO1xuICAgIGNvbnN0IGFzY2lpVG9QZXJzaWFuTWFwID0ge1xuICAgICAgMTEzOiAn2LYnLFxuICAgICAgMTE5OiAn2LUnLFxuICAgICAgMTAxOiAn2KsnLFxuICAgICAgMTE0OiAn2YInLFxuICAgICAgMTE2OiAn2YEnLFxuICAgICAgMTIxOiAn2LonLFxuICAgICAgMTE3OiAn2LknLFxuICAgICAgMTA1OiAn2YcnLFxuICAgICAgMTExOiAn2K4nLFxuICAgICAgMTEyOiAn2K0nLFxuICAgICAgOTc6ICfYtCcsXG4gICAgICAxMTU6ICfYsycsXG4gICAgICAxMDA6ICfbjCcsXG4gICAgICAxMDI6ICfYqCcsXG4gICAgICAxMDM6ICfZhCcsXG4gICAgICAxMDQ6ICfYpycsXG4gICAgICAxMDY6ICfYqicsXG4gICAgICAxMDc6ICfZhicsXG4gICAgICAxMDg6ICfZhScsXG4gICAgICA1OTogJ9qpJyxcbiAgICAgIDEyMjogJ9i4JyxcbiAgICAgIDEyMDogJ9i3JyxcbiAgICAgIDk5OiAn2LInLFxuICAgICAgMTE4OiAn2LEnLFxuICAgICAgOTg6ICfYsCcsXG4gICAgICAxMTA6ICfYrycsXG4gICAgICA0NDogJ9mIJyxcbiAgICAgIDM5OiAn2q8nLFxuICAgICAgNjc6ICfamCcsXG4gICAgICA5MzogJ9qGJyxcbiAgICAgIDkxOiAn2KwnLFxuICAgICAgOTI6ICfZvicsXG4gICAgICAxMDk6ICfYpicsXG4gICAgfTtcbiAgICBpZiAobGF0aW5QYXR0ZXJuLnRlc3Qoc2VhcmNoVGV4dCkpIHtcbiAgICAgIHNlYXJjaFRleHQgPSBzZWFyY2hUZXh0XG4gICAgICAgIC5zcGxpdCgnJylcbiAgICAgICAgLm1hcCgoY2hhcikgPT4ge1xuICAgICAgICAgIGNvbnN0IGFzY2lpVmFsdWUgPSBjaGFyLmNoYXJDb2RlQXQoMCk7XG4gICAgICAgICAgaWYgKGFzY2lpVG9QZXJzaWFuTWFwW2FzY2lpVmFsdWVdKSB7XG4gICAgICAgICAgICByZXR1cm4gYXNjaWlUb1BlcnNpYW5NYXBbYXNjaWlWYWx1ZV07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBjaGFyO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLmpvaW4oJycpO1xuICAgIH1cbiAgICByZXR1cm4gc2VhcmNoVGV4dDtcbiAgfVxuXG4gIHJlZnJlc2goKSB7XG4gICAgY29uc3QgcGFyYW1zOiBBWERhdGFTb3VyY2VSZWFkUGFyYW1zID0ge307XG4gICAgaWYgKHRoaXMucmVtb3RlT3BlcmF0aW9uKSB7XG4gICAgICBwYXJhbXMuc2tpcCA9IDA7XG4gICAgICB0aGlzLnNraXAgPSAwO1xuICAgICAgcGFyYW1zLnRha2UgPSB0aGlzLmJ1ZmZlclNpemU7XG4gICAgfVxuICAgIGlmICh0aGlzLmRhdGFTb3VyY2UgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyB0aGlzLml0ZW1zID0gW107XG4gICAgICAvLyB0aGlzLml0ZW1zLmZvckVhY2goKGVsZW1lbnQpID0+IHtcbiAgICAgIC8vICAgdGhpcy5pdGVtcy5wb3AoKTtcbiAgICAgIC8vIH0pO1xuXG4gICAgICBpZiAodGhpcy5pdGVtcykge1xuICAgICAgICBsZXQgdCA9IHRoaXMuaXRlbXMubGVuZ3RoO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHQ7IGkrKykge1xuICAgICAgICAgIHRoaXMuaXRlbXMucG9wKCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5mZXRjaChwYXJhbXMpO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZUl0ZW1SZW1vdmVDbGljayhpdGVtKSB7XG4gICAgaWYgKHRoaXMubW9kZSA9PT0gJ3NpbmdsZScpIHtcbiAgICAgIC8vIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IG51bGw7XG4gICAgICB0aGlzLnNldFNlbGVjdGVkVmFsdWVzKG51bGwsIHRydWUpO1xuICAgICAgLy8gdGhpcy5zZWxlY3RlZEl0ZW1zQ2hhbmdlLmVtaXQodGhpcy5fc2VsZWN0ZWRJdGVtcyk7XG4gICAgICAvLyB0aGlzLmNsZWFyVmFsaWRhdGlvblN0eWxlKHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyB0aGlzLnNlbGVjdGVkSXRlbXMgPSB0aGlzLnNlbGVjdGVkSXRlbXMuZmlsdGVyKChjKSA9PiBjICE9PSBpdGVtKTtcbiAgICAgIHRoaXMuc2V0U2VsZWN0ZWRJdGVtcyhcbiAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLmZpbHRlcihcbiAgICAgICAgICAoYykgPT4gY1t0aGlzLnZhbHVlRmllbGRdICE9PSBpdGVtW3RoaXMudmFsdWVGaWVsZF1cbiAgICAgICAgKSxcbiAgICAgICAgdHJ1ZVxuICAgICAgKTtcbiAgICAgIC8vIHRoaXMuX3NlbGVjdGVkSXRlbXMgPSB0aGlzLl9zZWxlY3RlZEl0ZW1zLmZpbHRlcihjID0+IGMgIT09IGl0ZW0pO1xuICAgICAgLy8gdGhpcy5zZWxlY3RlZEl0ZW1zQ2hhbmdlLmVtaXQodGhpcy5fc2VsZWN0ZWRJdGVtcyk7XG4gICAgICAvLyB0aGlzLmNsZWFyVmFsaWRhdGlvblN0eWxlKHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQpO1xuICAgIH1cbiAgICAvLyB0aGlzLnRleHQgPSAnJztcbiAgICB0aGlzLnZhbGlkYXRlKCk7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBvbkZvY3VzVGV4dEJveChlKSB7fVxuXG4gIG9uVGV4dEJveENsaWNrKGUpIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCA9PSBmYWxzZSAmJiB0aGlzLnJlYWRvbmx5ID09IGZhbHNlKSB7XG4gICAgICB0aGlzLmRyb3Bkb3duLm9wZW4oKTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVJdGVtQ2xpY2soZTogTW91c2VFdmVudCwgaXRlbTogYW55KSB7XG4gICAgaWYgKHRoaXMuaXNJdGVtRGlzYWJsZWQoaXRlbSkgPT0gZmFsc2UpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gaXRlbVt0aGlzLnZhbHVlRmllbGRdO1xuXG4gICAgICBpZiAodGhpcy5tb2RlID09PSAnc2luZ2xlJykge1xuICAgICAgICAvLyB0aGlzLnNlbGVjdGVkVmFsdWVzID0gdmFsdWU7XG4gICAgICAgIHRoaXMuc2V0U2VsZWN0ZWRWYWx1ZXModmFsdWUsIHRydWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZXhpc3RzID0gdGhpcy5zZWxlY3RlZFZhbHVlcy5zbGljZSgwKTtcbiAgICAgICAgaWYgKGV4aXN0cy5pbmNsdWRlcyh2YWx1ZSkpIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLmFsbG93TnVsbCA9PSB0cnVlIHx8XG4gICAgICAgICAgICAodGhpcy5hbGxvd051bGwgPT0gZmFsc2UgJiYgdGhpcy5zZWxlY3RlZEl0ZW1zLmxlbmd0aCA+IDEpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZUl0ZW1SZW1vdmVDbGljayhpdGVtKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZXhpc3RzLnB1c2godmFsdWUpO1xuICAgICAgICAgIC8vIHRoaXMuc2VsZWN0ZWRWYWx1ZXMgPSBleGlzdHM7XG4gICAgICAgICAgdGhpcy5zZXRTZWxlY3RlZFZhbHVlcyhleGlzdHMsIHRydWUpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLm1vZGUgPT0gJ3NpbmdsZScpIHtcbiAgICAgICAgdGhpcy50ZXh0ID0gJyc7XG4gICAgICAgIHRoaXMuZHJvcGRvd24uY2xvc2UoKTtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICB9XG4gICAgICAvLyBpZiAoZS5zdG9wUHJvcGFnYXRpb24oKSA9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgLy8gfVxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLnNlcmNoQm94KSB7XG4gICAgICAgICAgdGhpcy5zZXJjaEJveC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICB9LCAwKTtcbiAgICB9XG5cbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICB9XG5cbiAgaGFuZGxlS2V5RXZlbnRTZWFyY2goZTogS2V5Ym9hcmRFdmVudCkge1xuICAgIGlmICh0aGlzLmRpc2FibGVkIHx8IHRoaXMucmVhZG9ubHkpIHtcbiAgICAgIHRoaXMuZHJvcGRvd24uY2xvc2UoKTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnRleHRCb3hTZWxlY3RCb3guZm9jdXMoKTtcbiAgICAgIH0sIDApO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoZS5rZXkgPT09ICdFc2NhcGUnKSB7XG4gICAgICB0aGlzLnRleHQgPSBudWxsO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMudGV4dEJveFNlbGVjdEJveC5mb2N1cygpO1xuICAgICAgfSwgMCk7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIChlLmtleSA9PT0gJ0Fycm93RG93bicgfHwgZS5rZXkgPT09ICdBcnJvd1VwJykgJiZcbiAgICAgIHRoaXMuZ2V0SXRlbXMoKS5sZW5ndGggPiAwICYmXG4gICAgICBlLnR5cGUgPT09ICdrZXlkb3duJ1xuICAgICkge1xuICAgICAgaWYgKHRoaXMubW9kZSA9PT0gJ3NpbmdsZScpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50Zm9jdXNlZEluZGV4ID1cbiAgICAgICAgICB0aGlzLmN1cnJlbnRmb2N1c2VkSW5kZXggKyAoZS5rZXkgPT09ICdBcnJvd0Rvd24nID8gMSA6IC0xKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1CeUluZGV4KHRoaXMuY3VycmVudGZvY3VzZWRJbmRleCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodGhpcy5kcm9wZG93bi5pc09wZW4pIHtcbiAgICAgICAgICB0aGlzLnNldFNlbGVjdGVkSW5kZXgoZS5rZXkgPT09ICdBcnJvd0Rvd24nID8gMSA6IC0xKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmRyb3Bkb3duLm9wZW4oKTtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLnNlcmNoQm94KSB7XG4gICAgICAgICAgICAgIHRoaXMuc2VyY2hCb3guZm9jdXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LCAwKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICAvLyBpZiAoZS5rZXkgPT0gJ0VudGVyJyAmJiB0aGlzLmRyb3Bkb3duLmlzT3BlbiAmJiB0aGlzLm1vZGUgPT0gJ3NpbmdsZScpIHtcbiAgICAvLyAgICAgdGhpcy5kcm9wZG93bi5jbG9zZSgpO1xuICAgIC8vICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAvLyAgICAgICAgIHRoaXMuZHJvcGRvd24uZm9jdXMoKTtcbiAgICAvLyAgICAgfSwgMCk7XG4gICAgLy8gfVxuICAgIC8vZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAvL2UucHJldmVudERlZmF1bHQoKTtcbiAgICBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgIGlmIChlLnR5cGUgPT09ICdrZXlkb3duJyAmJiBlLmtleSA9PSAnRW50ZXInICYmIHRoaXMuZHJvcGRvd24uaXNPcGVuKSB7XG4gICAgICBpZiAoIXRoaXMucmVtb3RlT3BlcmF0aW9uICYmIHRoaXMudGV4dCAmJiB0aGlzLnRleHQgIT09ICcnKSB7XG4gICAgICAgIHRoaXMuaXRlbXNGaWx0ZXJlZCA9IHRoaXMuaXRlbXMuZmlsdGVyKChjKSA9PlxuICAgICAgICAgIChjW3RoaXMudGV4dEZpZWxkXSBhcyBzdHJpbmcpXG4gICAgICAgICAgICAudG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgLmluY2x1ZGVzKHRoaXMudGV4dC50b0xvd2VyQ2FzZSgpKVxuICAgICAgICApO1xuICAgICAgICBpZiAodGhpcy5pdGVtc0ZpbHRlcmVkLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgIHRoaXMuY3VycmVudGZvY3VzZWRJbmRleCA9IDA7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaXRlbXNGaWx0ZXJlZCA9IHRoaXMuaXRlbXM7XG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLmZpbHRlcihcbiAgICAgICAgICAoYykgPT5cbiAgICAgICAgICAgIGNbdGhpcy52YWx1ZUZpZWxkXSA9PT1cbiAgICAgICAgICAgIHRoaXMuaXRlbXNGaWx0ZXJlZFt0aGlzLmN1cnJlbnRmb2N1c2VkSW5kZXhdW3RoaXMudmFsdWVGaWVsZF1cbiAgICAgICAgKS5sZW5ndGggPiAwICYmXG4gICAgICAgIHRoaXMubW9kZSA9PSAnbXVsdGlwbGUnXG4gICAgICApIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRoaXMuYWxsb3dOdWxsID09IHRydWUgfHxcbiAgICAgICAgICAodGhpcy5hbGxvd051bGwgPT0gZmFsc2UgJiYgdGhpcy5zZWxlY3RlZEl0ZW1zLmxlbmd0aCA+IDEpXG4gICAgICAgICkge1xuICAgICAgICAgIGlmICghdGhpcy5yZW1vdGVPcGVyYXRpb24gJiYgdGhpcy50ZXh0ICYmIHRoaXMudGV4dCAhPT0gJycpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IHRoaXMuc2VsZWN0ZWRJdGVtcy5maWx0ZXIoXG4gICAgICAgICAgICAgIChjKSA9PlxuICAgICAgICAgICAgICAgIGMgIT09XG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtcy5maWx0ZXIoKGMpID0+XG4gICAgICAgICAgICAgICAgICAoY1t0aGlzLnRleHRGaWVsZF0gYXMgc3RyaW5nKVxuICAgICAgICAgICAgICAgICAgICAudG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgICAgICAgICAuaW5jbHVkZXModGhpcy50ZXh0LnRvTG93ZXJDYXNlKCkpXG4gICAgICAgICAgICAgICAgKVt0aGlzLmN1cnJlbnRmb2N1c2VkSW5kZXhdXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSB0aGlzLnNlbGVjdGVkSXRlbXMuZmlsdGVyKFxuICAgICAgICAgICAgICAoYykgPT5cbiAgICAgICAgICAgICAgICBjW3RoaXMudmFsdWVGaWVsZF0gIT09XG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtc1t0aGlzLmN1cnJlbnRmb2N1c2VkSW5kZXhdW3RoaXMudmFsdWVGaWVsZF1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuZW1pdFNlbGVjdGlvbkNoYW5nZWRFdmVudCgpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodGhpcy5tb2RlID09ICdtdWx0aXBsZScpIHtcbiAgICAgICAgICBpZiAodGhpcy5jdXJyZW50Zm9jdXNlZEluZGV4ICE9IC0xKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMucmVtb3RlT3BlcmF0aW9uICYmIHRoaXMudGV4dCAmJiB0aGlzLnRleHQgIT09ICcnKSB7XG4gICAgICAgICAgICAgIGlmICh0aGlzLml0ZW1zRmlsdGVyZWQubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLnB1c2godGhpcy5pdGVtc0ZpbHRlcmVkWzBdKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMucHVzaChcbiAgICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNGaWx0ZXJlZFt0aGlzLmN1cnJlbnRmb2N1c2VkSW5kZXhdXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLnB1c2godGhpcy5pdGVtc1t0aGlzLmN1cnJlbnRmb2N1c2VkSW5kZXhdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZW1pdFNlbGVjdGlvbkNoYW5nZWRFdmVudCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAodGhpcy50ZXh0ICYmIHRoaXMuaXRlbXNGaWx0ZXJlZD8ubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICB0aGlzLnNldFNlbGVjdGVkSXRlbXModGhpcy5pdGVtc0ZpbHRlcmVkLCB0cnVlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHRoaXMubW9kZSA9PSAnc2luZ2xlJykge1xuICAgICAgICAgICAgdGhpcy5kcm9wZG93bi5jbG9zZSgpO1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMudGV4dEJveFNlbGVjdEJveC5mb2N1cygpO1xuICAgICAgICAgICAgfSwgMCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgICB9XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBpc0NoYXIoc3RyOiBzdHJpbmcpIHtcbiAgICBpZiAoXG4gICAgICBzdHIuaW5jbHVkZXMoJ1NoaWZ0JykgfHxcbiAgICAgIHN0ci5pbmNsdWRlcygnVGFiJykgfHxcbiAgICAgIHN0ci5pbmNsdWRlcygnQ29udHJvbCcpIHx8XG4gICAgICBzdHIuaW5jbHVkZXMoJ0FsdCcpIHx8XG4gICAgICBzdHIuaW5jbHVkZXMoJ0NhcHNMb2NrJykgfHxcbiAgICAgIHN0ci5pbmNsdWRlcygnTWV0YScpIHx8XG4gICAgICBzdHIuaW5jbHVkZXMoJ0NvbnRleHRNZW51JykgfHxcbiAgICAgIHN0ci5pbmNsdWRlcygnRW50ZXInKSB8fFxuICAgICAgc3RyLmluY2x1ZGVzKCdCYWNrc3BhY2UnKSB8fFxuICAgICAgc3RyLmluY2x1ZGVzKCdQcmludFNjcmVlbicpIHx8XG4gICAgICBzdHIuaW5jbHVkZXMoJ1Njcm9sbExvY2snKSB8fFxuICAgICAgc3RyLmluY2x1ZGVzKCdQYXVzZScpIHx8XG4gICAgICBzdHIuaW5jbHVkZXMoJ0hvbWUnKSB8fFxuICAgICAgc3RyLmluY2x1ZGVzKCdFbmQnKSB8fFxuICAgICAgc3RyLmluY2x1ZGVzKCdJbnNlcnQnKSB8fFxuICAgICAgc3RyLmluY2x1ZGVzKCdQYWdlVXAnKSB8fFxuICAgICAgc3RyLmluY2x1ZGVzKCdEZWxldGUnKSB8fFxuICAgICAgc3RyLmluY2x1ZGVzKCdQYWdlRG93bicpIHx8XG4gICAgICBzdHIuaW5jbHVkZXMoJ051bUxvY2snKSB8fFxuICAgICAgc3RyLmluY2x1ZGVzKCdFc2NhcGUnKSB8fFxuICAgICAgc3RyLmluY2x1ZGVzKCdBcnJvdycpIHx8XG4gICAgICBzdHIuaW5jbHVkZXMoJ9mRRjEnKSB8fFxuICAgICAgc3RyLmluY2x1ZGVzKCdGMicpIHx8XG4gICAgICBzdHIuaW5jbHVkZXMoJ0YzJykgfHxcbiAgICAgIHN0ci5pbmNsdWRlcygnRjQnKSB8fFxuICAgICAgc3RyLmluY2x1ZGVzKCdGNScpIHx8XG4gICAgICBzdHIuaW5jbHVkZXMoJ0Y2JykgfHxcbiAgICAgIHN0ci5pbmNsdWRlcygnRjcnKSB8fFxuICAgICAgc3RyLmluY2x1ZGVzKCdGOCcpIHx8XG4gICAgICBzdHIuaW5jbHVkZXMoJ0Y5JykgfHxcbiAgICAgIHN0ci5pbmNsdWRlcygnRjEwJykgfHxcbiAgICAgIHN0ci5pbmNsdWRlcygnRjExJykgfHxcbiAgICAgIHN0ci5pbmNsdWRlcygnRjEyJylcbiAgICApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlS2V5RXZlbnQoZTogYW55KSB7XG4gICAgLy8gY29uc3QgTnVtYmVyTWludXNQYXR0ZXJuID0gL1thLXpBLVowLTlcXC1dL2c7XG4gICAgLy8gY29uc3QgRmFyc2kgPSAvW9m+2obYrNit2K7Zh9i52LrZgdmC2KvYtdi22LTYs9uM2KjZhNin2KrZhtmF2qnar9mI2KbYr9iw2LHYsti32LjamNik2KXYo9ih2YvZjNmN2Y7Zj9mQ2ZFcXHNdKyQvO1xuICAgIC8vICBjb25zdCBpbnB1dENoYXIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGUuY2hhckNvZGUpO1xuICAgIC8vIGNvbnN0IHBhdHRlcm5FbiA9IC9eW2EtekEtWjAtOV0qJC87XG4gICAgLy8gY29uc3QgcGF0dGVybiA9IC9eW1xcdTA2MDAtXFx1MDZGRlxcc10rJC87XG4gICAgY29uc3QgaW5wdXRDaGFyID0gZS5rZXk7XG4gICAgaWYgKFxuICAgICAgKGlucHV0Q2hhciAhPSAnQmFja3NwYWNlJyAmJlxuICAgICAgICBpbnB1dENoYXIgIT0gJ0JhY2tzcGFjZScgJiZcbiAgICAgICAgaW5wdXRDaGFyICE9ICdUYWInICYmXG4gICAgICAgIGlucHV0Q2hhciAhPSAnRW50ZXInICYmXG4gICAgICAgIGlucHV0Q2hhciAhPSAnRXNjYXBlJyAmJlxuICAgICAgICBpbnB1dENoYXIgIT0gJ0Fycm93RG93bicgJiZcbiAgICAgICAgaW5wdXRDaGFyICE9ICdBcnJvd1VwJykgfHxcbiAgICAgIGUuY29kZSA9PT0gJ1NwYWNlJyB8fFxuICAgICAgZS5jdHJsS2V5ID09IHRydWVcbiAgICApIHtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgZS5rZXkgPT09ICdCYWNrc3BhY2UnICYmXG4gICAgICBlLnR5cGUgPT09ICdrZXlkb3duJyAmJlxuICAgICAgKCh0aGlzLmFsbG93TnVsbCA9PT0gdHJ1ZSAmJiB0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoID4gMCkgfHxcbiAgICAgICAgKHRoaXMuYWxsb3dOdWxsID09PSBmYWxzZSAmJiB0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoID4gMSkpXG4gICAgKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbXMucG9wKCk7XG4gICAgICB0aGlzLmVtaXRTZWxlY3Rpb25DaGFuZ2VkRXZlbnQoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5yZWFkb25seSkge1xuICAgICAgdGhpcy5kcm9wZG93bi5jbG9zZSgpO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMudGV4dEJveFNlbGVjdEJveC5mb2N1cygpO1xuICAgICAgfSwgMCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IElOUFVUID0gU3RyaW5nLmZyb21DaGFyQ29kZShlLmtleUNvZGUpO1xuICAgIGlmICh0aGlzLmlzQ2hhcihlLmtleSkgJiYgdGhpcy5hbGxvd1NlYXJjaCAmJiBlLmN0cmxLZXkgPT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuZHJvcGRvd24ub3BlbigpO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLnNlcmNoQm94KSB7XG4gICAgICAgICAgdGhpcy5zZXJjaEJveC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICB9LCAwKTtcbiAgICAgIHRoaXMudGV4dCA9IGUua2V5O1xuICAgIH1cblxuICAgIGlmIChlLmtleSA9PT0gJ0VzY2FwZScpIHtcbiAgICAgIHRoaXMudGV4dCA9IG51bGw7XG4gICAgICB0aGlzLmRyb3Bkb3duLmNsb3NlKCk7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy50ZXh0Qm94U2VsZWN0Qm94LmZvY3VzKCk7XG4gICAgICB9LCAwKTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgKGUua2V5ID09PSAnQXJyb3dEb3duJyB8fCBlLmtleSA9PT0gJ0Fycm93VXAnKSAmJlxuICAgICAgdGhpcy5nZXRJdGVtcygpLmxlbmd0aCA+IDAgJiZcbiAgICAgIGUudHlwZSA9PT0gJ2tleWRvd24nXG4gICAgKSB7XG4gICAgICBpZiAodGhpcy5tb2RlID09PSAnc2luZ2xlJykge1xuICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbUJ5SW5kZXgoXG4gICAgICAgICAgdGhpcy5jdXJyZW50Zm9jdXNlZEluZGV4ICsgKGUua2V5ID09PSAnQXJyb3dEb3duJyA/IDEgOiAtMSlcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0aGlzLmRyb3Bkb3duLmlzT3Blbikge1xuICAgICAgICAgIC8vICB0aGlzLnNldFNlbGVjdGVkSW5kZXgoKGUua2V5ID09PSAnQXJyb3dEb3duJyA/IDEgOiAtMSkpO1xuICAgICAgICAgIGlmICh0aGlzLmFsbG93U2VhcmNoID09IGZhbHNlKSB7XG4gICAgICAgICAgICB0aGlzLnNldFNlbGVjdGVkSW5kZXgoZS5rZXkgPT09ICdBcnJvd0Rvd24nID8gMSA6IC0xKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgIGlmICh0aGlzLnNlcmNoQm94KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXJjaEJveC5mb2N1cygpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCAwKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5kcm9wZG93bi5vcGVuKCk7XG4gICAgICAgICAgaWYgKHRoaXMuYWxsb3dTZWFyY2ggPT0gdHJ1ZSkge1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgIGlmICh0aGlzLnNlcmNoQm94KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXJjaEJveC5mb2N1cygpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCAwKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5hbGxvd1NlYXJjaCA9PT0gZmFsc2UpIHtcbiAgICAgIGlmIChlLnR5cGUgPT09ICdrZXlkb3duJyAmJiBlLmtleSA9PSAnRW50ZXInICYmIHRoaXMuZHJvcGRvd24uaXNPcGVuKSB7XG4gICAgICAgIGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMuZmlsdGVyKFxuICAgICAgICAgICAgKGMpID0+XG4gICAgICAgICAgICAgIGNbdGhpcy52YWx1ZUZpZWxkXSA9PT1cbiAgICAgICAgICAgICAgdGhpcy5pdGVtc0ZpbHRlcmVkW3RoaXMuY3VycmVudGZvY3VzZWRJbmRleF1bdGhpcy52YWx1ZUZpZWxkXVxuICAgICAgICAgICkubGVuZ3RoID4gMCAmJlxuICAgICAgICAgIHRoaXMubW9kZSA9PSAnbXVsdGlwbGUnXG4gICAgICAgICkge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuYWxsb3dOdWxsID09IHRydWUgfHxcbiAgICAgICAgICAgICh0aGlzLmFsbG93TnVsbCA9PSBmYWxzZSAmJiB0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoID4gMSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5yZW1vdGVPcGVyYXRpb24gJiYgdGhpcy50ZXh0ICYmIHRoaXMudGV4dCAhPT0gJycpIHtcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gdGhpcy5zZWxlY3RlZEl0ZW1zLmZpbHRlcihcbiAgICAgICAgICAgICAgICAoYykgPT5cbiAgICAgICAgICAgICAgICAgIGMgIT09XG4gICAgICAgICAgICAgICAgICB0aGlzLml0ZW1zLmZpbHRlcigoYykgPT5cbiAgICAgICAgICAgICAgICAgICAgKGNbdGhpcy50ZXh0RmllbGRdIGFzIHN0cmluZylcbiAgICAgICAgICAgICAgICAgICAgICAudG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgICAgICAgICAgIC5pbmNsdWRlcyh0aGlzLnRleHQudG9Mb3dlckNhc2UoKSlcbiAgICAgICAgICAgICAgICAgIClbdGhpcy5jdXJyZW50Zm9jdXNlZEluZGV4XVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gdGhpcy5zZWxlY3RlZEl0ZW1zLmZpbHRlcihcbiAgICAgICAgICAgICAgICAoYykgPT5cbiAgICAgICAgICAgICAgICAgIGNbdGhpcy52YWx1ZUZpZWxkXSAhPT1cbiAgICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbdGhpcy5jdXJyZW50Zm9jdXNlZEluZGV4XVt0aGlzLnZhbHVlRmllbGRdXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmVtaXRTZWxlY3Rpb25DaGFuZ2VkRXZlbnQoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHRoaXMubW9kZSA9PSAnbXVsdGlwbGUnKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5jdXJyZW50Zm9jdXNlZEluZGV4ICE9IC0xKSB7XG4gICAgICAgICAgICAgIGlmICghdGhpcy5yZW1vdGVPcGVyYXRpb24gJiYgdGhpcy50ZXh0ICYmIHRoaXMudGV4dCAhPT0gJycpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pdGVtc0ZpbHRlcmVkLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLnB1c2godGhpcy5pdGVtc0ZpbHRlcmVkWzBdKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLnB1c2goXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNGaWx0ZXJlZFt0aGlzLmN1cnJlbnRmb2N1c2VkSW5kZXhdXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMucHVzaCh0aGlzLml0ZW1zW3RoaXMuY3VycmVudGZvY3VzZWRJbmRleF0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHRoaXMuZW1pdFNlbGVjdGlvbkNoYW5nZWRFdmVudCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodGhpcy50ZXh0ICYmIHRoaXMuaXRlbXNGaWx0ZXJlZC5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgdGhpcy5zZXRTZWxlY3RlZEl0ZW1zKHRoaXMuaXRlbXNGaWx0ZXJlZCwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5tb2RlID09ICdzaW5nbGUnKSB7XG4gICAgICAgICAgICAgIHRoaXMuZHJvcGRvd24uY2xvc2UoKTtcbiAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy50ZXh0Qm94U2VsZWN0Qm94LmZvY3VzKCk7XG4gICAgICAgICAgICAgIH0sIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgZm9jdXMoKTogdm9pZCB7XG4gICAgdGhpcy50ZXh0Ym94LmZvY3VzKCk7XG4gIH1cblxuICBzZWxlY3RlZEl0ZW1CeUluZGV4KGluZGV4OiBudW1iZXIpIHtcbiAgICBsZXQgaXRlbSA9IFtdO1xuICAgIGlmICghdGhpcy5yZW1vdGVPcGVyYXRpb24gJiYgdGhpcy50ZXh0ICYmIHRoaXMudGV4dCAhPT0gJycpIHtcbiAgICAgIHRoaXMuaXRlbXNGaWx0ZXJlZCA9IHRoaXMuaXRlbXMuZmlsdGVyKChjKSA9PlxuICAgICAgICAoY1t0aGlzLnRleHRGaWVsZF0gYXMgc3RyaW5nKVxuICAgICAgICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgLmluY2x1ZGVzKHRoaXMudGV4dC50b0xvd2VyQ2FzZSgpKVxuICAgICAgKTtcblxuICAgICAgaXRlbSA9IHRoaXMuaXRlbXNGaWx0ZXJlZFtpbmRleF07XG4gICAgfSBlbHNlIHtcbiAgICAgIGl0ZW0gPSB0aGlzLml0ZW1zW2luZGV4XTtcbiAgICB9XG4gICAgLy9cbiAgICAvLyAgY29uc3QgaXRlbSA9IHRoaXMudGV4dCA/IHRoaXMuaXRlbXMuZmlsdGVyKChjKSA9PiAoY1t0aGlzLnRleHRGaWVsZF0gYXMgc3RyaW5nKS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRoaXMudGV4dC50b0xvd2VyQ2FzZSgpKSlbaW5kZXhdIDogdGhpcy5pdGVtc1tpbmRleF07XG4gICAgaWYgKGl0ZW0pIHtcbiAgICAgIHRoaXMuc2V0U2VsZWN0ZWRJdGVtcyhbaXRlbV0sIHRydWUpO1xuICAgIH1cblxuICAgIHRoaXMuc2V0U2VsZWN0ZWRJbmRleCgpO1xuICB9XG5cbiAgbm9BY2NlbnRPcmlnaW4gPSB7XG4gICAg2YM6ICfaqScsXG4gICAg77u3OiAn2YTYpycsXG4gICAg2KQ6ICfZiCcsXG4gICAg2Yk6ICfbjCcsXG4gICAg2Yo6ICfbjCcsXG4gICAg2KY6ICfbjCcsXG4gICAg2KM6ICfYpycsXG4gICAg2KU6ICfYpycsXG4gICAg2KI6ICfYpycsXG4gICAg2bE6ICfYpycsXG4gICAg2bM6ICfYpycsXG4gICAg2Kk6ICfZhycsXG4gICAg2KE6ICcnLFxuICAgICfZkCc6ICcnLFxuICAgICfZkic6ICcnLFxuICAgICfZjyc6ICcnLFxuICAgICfZjic6ICcnLFxuICAgICfZkSc6ICcnLFxuICAgICfZjSc6ICcnLFxuICAgICfZiyc6ICcnLFxuICAgICfZjCc6ICcnLFxuICAgICfZkyc6ICcnLFxuICAgICfZsCc6ICcnLFxuICAgICfZlCc6ICcnLFxuICAgICfvv70nOiAnJyxcbiAgfTtcblxuICBnZXRJdGVtcygpOiBhbnlbXSB7XG4gICAgaWYgKHRoaXMuaXRlbXMgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBpZiAoIXRoaXMucmVtb3RlT3BlcmF0aW9uICYmIHRoaXMudGV4dCAmJiB0aGlzLnRleHQgIT09ICcnKSB7XG4gICAgICByZXR1cm4gdGhpcy5pdGVtcy5maWx0ZXIoKGMpID0+IHtcbiAgICAgICAgY29uc3QgY29udmVydGVkVGV4dEZpZWxkID0gdGhpcy5jb252ZXJ0QXJhYmljVG9QZXJzaWFuKFxuICAgICAgICAgIGNbdGhpcy50ZXh0RmllbGRdLFxuICAgICAgICAgIHRoaXMubm9BY2NlbnRPcmlnaW5cbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgY29udmVydGVkVGV4dCA9IHRoaXMuY29udmVydEFyYWJpY1RvUGVyc2lhbihcbiAgICAgICAgICB0aGlzLnRleHQsXG4gICAgICAgICAgdGhpcy5ub0FjY2VudE9yaWdpblxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gY29udmVydGVkVGV4dEZpZWxkXG4gICAgICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAuaW5jbHVkZXMoY29udmVydGVkVGV4dC50b0xvd2VyQ2FzZSgpKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5pdGVtcztcbiAgICB9XG4gIH1cblxuICBjb252ZXJ0QXJhYmljVG9QZXJzaWFuKGlucHV0U3RyaW5nLCBjb252ZXJzaW9uTWFwKSB7XG4gICAgbGV0IHRleHRDb252ZXJ0ID0gJyc7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnB1dFN0cmluZy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgY3VycmVudENoYXIgPSBpbnB1dFN0cmluZ1tpXTtcbiAgICAgIGlmIChjb252ZXJzaW9uTWFwW2N1cnJlbnRDaGFyXSkge1xuICAgICAgICB0ZXh0Q29udmVydCArPSBjb252ZXJzaW9uTWFwW2N1cnJlbnRDaGFyXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRleHRDb252ZXJ0ICs9IGN1cnJlbnRDaGFyO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGV4dENvbnZlcnQ7XG4gIH1cblxuICBpc0l0ZW1TZWxlY3RlZChpdGVtOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zICYmXG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbXMuZmlsdGVyKFxuICAgICAgICAoYykgPT4gY1t0aGlzLnZhbHVlRmllbGRdID09PSBpdGVtW3RoaXMudmFsdWVGaWVsZF1cbiAgICAgICkubGVuZ3RoID4gMFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGl0ZW1zU3RhdHVzT2JzZXJ2ZXI6IGFueTtcbiAgcHJpdmF0ZSB3YWl0Rm9yRGF0YShjYWxsYmFja2ZuOiAoKSA9PiB2b2lkKSB7XG4gICAgaWYgKHRoaXMuaXRlbXMgJiYgdGhpcy5pdGVtcy5sZW5ndGgpIHtcbiAgICAgIGNhbGxiYWNrZm4oKTtcbiAgICB9IGVsc2UgaWYgKCF0aGlzLml0ZW1zU3RhdHVzT2JzZXJ2ZXIpIHtcbiAgICAgIE9ic2VydmFibGUuY3JlYXRlKChvYnNlcnZlcikgPT4ge1xuICAgICAgICB0aGlzLml0ZW1zU3RhdHVzT2JzZXJ2ZXIgPSBvYnNlcnZlcjtcbiAgICAgIH0pXG4gICAgICAgIC5waXBlKGRlYm91bmNlVGltZSgxMDApKVxuICAgICAgICAucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKVxuICAgICAgICAuc3Vic2NyaWJlKChjKSA9PiB7XG4gICAgICAgICAgY2FsbGJhY2tmbigpO1xuICAgICAgICB9KTtcbiAgICB9XG4gIH1cbn1cbiIsIjxheC1kcm9wLWRvd25cbiAgI2RcbiAgW3NpemVdPVwic2l6ZVwiXG4gIFtmaXRQYXJlbnRdPVwiZml0UGFyZW50XCJcbiAgW2Ryb3Bkb3duV2lkdGhdPVwiZHJvcGRvd25XaWR0aFwiXG4gIFtydGxdPVwicnRsXCJcbiAgW3Nob3dEcm9wRG93bkJ1dHRvbl09XCJzaG93RHJvcERvd25CdXR0b25cIlxuICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICBbcmVhZG9ubHldPVwicmVhZG9ubHlcIlxuICAoZHJvcGRvd25Ub2dnbGUpPVwiZHJvcGRvd25Ub2dnbGVTZWxlY0JveCgkZXZlbnQpXCJcbiAgW2F0dHIuaWRdPVwiYXhJZFwiXG4gIFtuZ0NsYXNzXT1cImF4Q2xhc3NcIlxuPlxuICA8bmctY29udGFpbmVyIHN0YXJ0PlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltzdGFydF1cIj4gPC9uZy1jb250ZW50PlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8bmctY29udGFpbmVyIGhlYWRlcj5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImF4IGNoaXBzLWNvbnRhaW5lclwiXG4gICAgICBbY2xhc3MubXVsdGlsaW5lXT1cIm11bHRpTGluZVwiXG4gICAgICBbc3R5bGUucGFkZGluZ109XCJzZWxlY3RlZEl0ZW1zLmxlbmd0aCAmJiBtdWx0aUxpbmUgPyAnMC4yNXJlbScgOiAnJ1wiXG4gICAgICBbYXR0ci5pZF09XCJheElkICsgJy1oZWFkZXInXCJcbiAgICA+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiY2hpcHNcIlxuICAgICAgICBbY2xhc3MuY2hpcHMtYmxhbmtdPVwibW9kZSA9PT0gJ3NpbmdsZSdcIlxuICAgICAgICBbdGl0bGVdPVwiaXRlbVt0ZXh0RmllbGRdXCJcbiAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2Ygc2VsZWN0ZWRJdGVtc1wiXG4gICAgICAgIFthdHRyLmlkXT1cImF4SWQgKyAnLWNoaXAtJyArIGl0ZW1bdmFsdWVGaWVsZF1cIlxuICAgICAgPlxuICAgICAgICA8c3BhblxuICAgICAgICAgIGNsYXNzPVwiY2hpcHMtdGV4dFwiXG4gICAgICAgICAgW25nU3R5bGVdPVwie1xuICAgICAgICAgICAgd2lkdGg6XG4gICAgICAgICAgICAgIGl0ZW1bdGV4dEZpZWxkXS5sZW5ndGggPiAxNSAmJlxuICAgICAgICAgICAgICB0aGlzLm1vZGUgPT09ICdtdWx0aXBsZScgJiZcbiAgICAgICAgICAgICAgIW11bHRpTGluZVxuICAgICAgICAgICAgICAgID8gJzExMHB4J1xuICAgICAgICAgICAgICAgIDogJ2F1dG8nXG4gICAgICAgICAgfVwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyBpdGVtW3RleHRGaWVsZF0gfX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8c3BhblxuICAgICAgICAgIGNsYXNzPVwiY2xvc2UtaWNvblwiXG4gICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUl0ZW1SZW1vdmVDbGljayhpdGVtKVwiXG4gICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgIChyZWFkb25seSAhPSB0cnVlIHx8IGl0ZW1SZW1vdmUgPT0gdHJ1ZSkgJiZcbiAgICAgICAgICAgIGRpc2FibGVkICE9IHRydWUgJiZcbiAgICAgICAgICAgIChhbGxvd051bGwgPT0gdHJ1ZSB8fCBzZWxlY3RlZEl0ZW1zLmxlbmd0aCA+IDEpXG4gICAgICAgICAgXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxpIGNsYXNzPVwiZmFyIGZhLXRpbWVzIGNsb3NlXCI+PC9pPlxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2gtd3JhcHBlclwiIChjbGljayk9XCJvblRleHRCb3hDbGljaygkZXZlbnQpXCI+XG4gICAgICAgIDxheC10ZXh0LWJveFxuICAgICAgICAgICN0ZXh0Qm94U2VsZWN0Qm94XG4gICAgICAgICAgW3RleHRBbGlnbl09XCJ0ZXh0QWxpZ25cIlxuICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJzZWxlY3RlZEl0ZW1zLmxlbmd0aCA9PSAwID8gcGxhY2Vob2xkZXIgOiAnJ1wiXG4gICAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgIChvbmtleSk9XCJoYW5kbGVLZXlFdmVudCgkZXZlbnQpXCJcbiAgICAgICAgICBbc2l6ZV09XCJzaXplXCJcbiAgICAgICAgICAob25Gb2N1cyk9XCJvbkZvY3VzVGV4dEJveCgkZXZlbnQpXCJcbiAgICAgICAgICBbYXR0ci5pZF09XCJheElkICsgJy10ZXh0LWJveCdcIlxuICAgICAgICA+XG4gICAgICAgIDwvYXgtdGV4dC1ib3g+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPG5nLWNvbnRhaW5lciBlbmQ+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2VuZF1cIj4gPC9uZy1jb250ZW50PlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8bmctY29udGFpbmVyIHBhbmVsPlxuICAgIDxkaXZcbiAgICAgICpuZ0lmPVwiYWxsb3dTZWFyY2hcIlxuICAgICAgY2xhc3M9XCJzZWFyY2gtd3JhcHBlclwiXG4gICAgICBzdHlsZT1cInBhZGRpbmc6IDAuN2VtXCJcbiAgICAgIFthdHRyLmlkXT1cImF4SWQgKyAnLXNlYXJjaC13cmFwcGVyJ1wiXG4gICAgPlxuICAgICAgPGF4LXNlYXJjaC1ib3hcbiAgICAgICAgI3NlcmNoQm94XG4gICAgICAgIFtvbkRlbWFuZFRyYW5zbGF0ZV09XCJvbkRlbWFuZFRyYW5zbGF0ZVwiXG4gICAgICAgIFsodmFsdWUpXT1cInRleHRcIlxuICAgICAgICAob25rZXkpPVwiaGFuZGxlS2V5RXZlbnRTZWFyY2goJGV2ZW50KVwiXG4gICAgICAgICh0ZXh0Q2hhbmdlZCk9XCJ0ZXh0Q2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgICAgKG9uQnV0dG9uQ2xpY2spPVwidGV4dENoYW5nZWQoJGV2ZW50KVwiXG4gICAgICAgIFthdHRyLmlkXT1cImF4SWQgKyAnLXNlYXJjaC1ib3gnXCJcbiAgICAgID5cbiAgICAgIDwvYXgtc2VhcmNoLWJveD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiYXggbGlzdC1jb250YWluZXJcIiBbYXR0ci5pZF09XCJheElkICsgJy1saXN0LWNvbnRhaW5lcidcIj5cbiAgICAgIDxkaXZcbiAgICAgICAgI2xpc3RDb250YWluZXJcbiAgICAgICAgY2xhc3M9XCJsaXN0LWNvbnRhaW5lci1pdGVtc1wiXG4gICAgICAgIChzY3JvbGwpPVwic2Nyb2xsZWQoJGV2ZW50KVwiXG4gICAgICAgIFthdHRyLmlkXT1cImF4SWQgKyAnLWxpc3QnXCJcbiAgICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ0lmPVwiZ2V0SXRlbXMoKS5sZW5ndGggPiAwOyB0aGVuIHRoZW5UZW1wbGF0ZTsgZWxzZSBlbHNlVGVtcGxhdGVcIlxuICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjdGhlblRlbXBsYXRlPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIFtjbGFzcy5heC1zdGF0ZS1kaXNhYmxlZF09XCJpc0l0ZW1EaXNhYmxlZChpdGVtKVwiXG4gICAgICAgICAgICBjbGFzcz1cImxpc3QtaXRlbVwiXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBnZXRJdGVtcygpOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgICAgICAgIFtjbGFzcy5mb2N1c2VkXT1cImkgPT0gY3VycmVudGZvY3VzZWRJbmRleFwiXG4gICAgICAgICAgICBbY2xhc3Muc2VsZWN0ZWRdPVwiaXNJdGVtU2VsZWN0ZWQoaXRlbSlcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUl0ZW1DbGljaygkZXZlbnQsIGl0ZW0pXCJcbiAgICAgICAgICAgIFthdHRyLmlkXT1cImF4SWQgKyAnLWxpc3QtaXRlbS0nICsgaVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6IGZsZXhcIj5cbiAgICAgICAgICAgICAgPGF4LWNoZWNrLWJveFxuICAgICAgICAgICAgICAgICpuZ0lmPVwic2hvd0NoZWNrQm94XCJcbiAgICAgICAgICAgICAgICBbc2l6ZV09XCJzaXplXCJcbiAgICAgICAgICAgICAgICBbdmFsdWVdPVwiaXNJdGVtU2VsZWN0ZWQoaXRlbSlcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJcbiAgICAgICAgICAgICAgICAgICghYWxsb3dOdWxsICYmXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkSXRlbXMubGVuZ3RoID09PSAxICYmXG4gICAgICAgICAgICAgICAgICAgIGlzSXRlbVNlbGVjdGVkKGl0ZW0pKSB8fFxuICAgICAgICAgICAgICAgICAgaXNJdGVtRGlzYWJsZWQoaXRlbSlcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIChvbkNsaWNrKT1cImhhbmRsZUl0ZW1DbGljaygkZXZlbnQsIGl0ZW0pXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5pZF09XCJheElkICsgJy1jaGVjay1ib3gtJyArIGlcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDwvYXgtY2hlY2stYm94PlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicm93VGVtcGxhdGU7IGVsc2UgZWxzZVRlbXBsYXRlXCI+XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgc3R5bGU9XCJcbiAgICAgICAgICAgICAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAgICAgICAgICAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgICAgICAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgICAgICAgICAgICAgIGZsZXg6IDE7XG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIml0ZW1bdGV4dEZpZWxkXVwiXG4gICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJcbiAgICAgICAgICAgICAgICAgICAgc2hvd0NoZWNrQm94ID8geyAncGFkZGluZy1pbmxpbmUtc3RhcnQnOiAnMC41cmVtJyB9IDogJydcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgICAgIHJvd1RlbXBsYXRlO1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHsgJGltcGxpY2l0OiBpdGVtIH1cbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNlbHNlVGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgc3R5bGU9XCJcbiAgICAgICAgICAgICAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAgICAgICAgICAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgICAgICAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgICAgICAgICAgICAgIGZsZXg6IDE7XG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIml0ZW1bdGV4dEZpZWxkXVwiXG4gICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJcbiAgICAgICAgICAgICAgICAgICAgc2hvd0NoZWNrQm94ID8geyAncGFkZGluZy1pbmxpbmUtc3RhcnQnOiAnMC41cmVtJyB9IDogJydcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge3sgaXRlbVt0ZXh0RmllbGRdIH19XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPGRpdiAqbmdJZj1cInNob3dMb2FkaW5nXCIgY2xhc3M9XCJheC1wYWQtc21cIiBzdHlsZT1cInRleHQtYWxpZ246IGNlbnRlclwiPlxuICAgICAgICAgIDxpXG4gICAgICAgICAgICBjbGFzcz1cImZhciBmYS1zcGlubmVyLXRoaXJkIGZhLXB1bHNlIGZhLTJ4XCJcbiAgICAgICAgICAgIHN0eWxlPVwiY29sb3I6IHZhcigtLWF4LXByaW1hcnktY29sb3IpXCJcbiAgICAgICAgICA+PC9pPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPCEtLSA8YXgtbG9hZGluZy1pbmRpY2F0b3IgPjwvYXgtbG9hZGluZy1pbmRpY2F0b3I+IC0tPlxuICAgICAgICA8bmctdGVtcGxhdGUgI2Vsc2VUZW1wbGF0ZT5cbiAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICBzaG93TG9hZGluZyA9PSB0cnVlO1xuICAgICAgICAgICAgICB0aGVuIHNlYXJjaFRlbXBsYXRlO1xuICAgICAgICAgICAgICBlbHNlIG5vRGF0YVRlbXBsYXRlXG4gICAgICAgICAgICBcIlxuICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI3NlYXJjaFRlbXBsYXRlPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxpc3QtaXRlbVwiPlxuICAgICAgICAgICAgICB7eyAnY29tbW9uLnNlYXJjaCcgfCB0cmFucyB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI25vRGF0YVRlbXBsYXRlPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxpc3QtaXRlbVwiPlxuICAgICAgICAgICAgICB7eyAnY29tbW9uLm5vRGF0YUZvdW5kJyB8IHRyYW5zIH19XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuPC9heC1kcm9wLWRvd24+XG4iXX0=
|