mmhglobal-dynamicform 2.7.0 → 2.7.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -13,10 +13,16 @@ export class ZtexteditorComponent extends InputFieldBase {
13
13
  constructor(componentService) {
14
14
  super(componentService);
15
15
  this.componentService = componentService;
16
+ this.pasteCleanupSettings = {
17
+ removeMsClasses: true,
18
+ removeMsStyles: true,
19
+ removeInvalidHTML: true,
20
+ };
16
21
  }
17
22
  ngOnInit() {
18
23
  super.setupInnerField();
19
24
  this.data.ToolBarUploadImageMethod = this.data.ToolBarUploadImageMethod || 'explorer'; // || 'default';
25
+ this.setupPasteCleanupSettings();
20
26
  super.focusOnDefault(this.focus.bind(this));
21
27
  }
22
28
  ngAfterViewInit() {
@@ -33,6 +39,17 @@ export class ZtexteditorComponent extends InputFieldBase {
33
39
  }
34
40
  return false;
35
41
  }
42
+ setupPasteCleanupSettings() {
43
+ if (this.data.Options) {
44
+ if (typeof this.data.Options == 'string') {
45
+ const option = ZComponentHelper.getGroupValue(this.data.Options, this.group);
46
+ Object.assign(this.pasteCleanupSettings, option);
47
+ }
48
+ else if (typeof this.data.Options == 'object') {
49
+ Object.assign(this.pasteCleanupSettings, this.data.Options);
50
+ }
51
+ }
52
+ }
36
53
  // #region Custom Image Upload
37
54
  openFileExplorer() {
38
55
  const input = document.getElementById(`${this.data.Value}-upload-file`);
@@ -55,12 +72,12 @@ export class ZtexteditorComponent extends InputFieldBase {
55
72
  }
56
73
  }
57
74
  ZtexteditorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: ZtexteditorComponent, deps: [{ token: i1.ZComponentService }], target: i0.ɵɵFactoryTarget.Component });
58
- ZtexteditorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: ZtexteditorComponent, selector: "app-ztexteditor", viewQueries: [{ propertyName: "editor", first: true, predicate: ["editor"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div [formGroup]=\"form\" class=\"ztexteditor-container e1tag-style\" [style]=\"componentProperties.style.style\">\r\n <kendo-editor #editor [id]=\"data.Value\" [formControlName]=\"data.Value\" class=\"e1tag-style1\"\r\n [style]=\"componentProperties.style.style1\" [readonly]=\"(!!componentProperties.isReadOnlyField ? group[componentProperties.isReadOnlyField] :\r\n componentProperties.isReadOnly)\" (valueChange)=\"onChange($event)\">\r\n <kendo-toolbar [style.display]=\"data.ToolBarStyle === 'basic' ? 'inherit' : 'none'\" class=\"e1tag-style2\"\r\n [style]=\"componentProperties.style.style2\">\r\n <kendo-toolbar-buttongroup>\r\n <kendo-toolbar-button kendoEditorUndoButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorRedoButton></kendo-toolbar-button>\r\n </kendo-toolbar-buttongroup>\r\n <kendo-toolbar-buttongroup>\r\n <kendo-toolbar-button kendoEditorBoldButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorItalicButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorUnderlineButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorStrikethroughButton></kendo-toolbar-button>\r\n </kendo-toolbar-buttongroup>\r\n <kendo-toolbar-buttongroup>\r\n <kendo-toolbar-button kendoEditorSubscriptButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorSuperscriptButton></kendo-toolbar-button>\r\n </kendo-toolbar-buttongroup>\r\n <kendo-toolbar-buttongroup>\r\n <kendo-toolbar-button kendoEditorAlignLeftButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorAlignCenterButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorAlignRightButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorAlignJustifyButton></kendo-toolbar-button>\r\n </kendo-toolbar-buttongroup>\r\n <kendo-toolbar-dropdownlist kendoEditorFormat></kendo-toolbar-dropdownlist>\r\n <kendo-toolbar-dropdownlist kendoEditorFontSize></kendo-toolbar-dropdownlist>\r\n <kendo-toolbar-dropdownlist kendoEditorFontFamily></kendo-toolbar-dropdownlist>\r\n <kendo-toolbar-colorpicker kendoEditorForeColor></kendo-toolbar-colorpicker>\r\n <kendo-toolbar-colorpicker kendoEditorBackColor></kendo-toolbar-colorpicker>\r\n <kendo-toolbar-buttongroup>\r\n <kendo-toolbar-button kendoEditorInsertUnorderedListButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorInsertOrderedListButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorIndentButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorOutdentButton></kendo-toolbar-button>\r\n </kendo-toolbar-buttongroup>\r\n <kendo-toolbar-buttongroup>\r\n <kendo-toolbar-button kendoEditorCreateLinkButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorUnlinkButton></kendo-toolbar-button>\r\n </kendo-toolbar-buttongroup>\r\n <kendo-editor-insert-table-button></kendo-editor-insert-table-button>\r\n <kendo-toolbar-buttongroup>\r\n <kendo-toolbar-button kendoEditorAddColumnBeforeButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorAddColumnAfterButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorAddRowBeforeButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorAddRowAfterButton></kendo-toolbar-button>\r\n </kendo-toolbar-buttongroup>\r\n <kendo-toolbar-buttongroup>\r\n <kendo-toolbar-button kendoEditorDeleteColumnButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorDeleteRowButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorDeleteTableButton></kendo-toolbar-button>\r\n </kendo-toolbar-buttongroup>\r\n <kendo-toolbar-button kendoEditorInsertFileButton></kendo-toolbar-button>\r\n <kendo-toolbar-button *ngIf=\"data.ToolBarUploadImageMethod == 'default'\" kendoEditorInsertImageButton></kendo-toolbar-button>\r\n <kendo-toolbar-button *ngIf=\"data.ToolBarUploadImageMethod == 'explorer'\" icon=\"k-i-image k-i-photo\" (click)=\"openFileExplorer()\"></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorViewSourceButton></kendo-toolbar-button>\r\n </kendo-toolbar>\r\n <kendo-toolbar [style.display]=\"data.ToolBarStyle === 'full' ? 'inherit' : 'none'\" class=\"e1tag-style2\" [style]=\"componentProperties.style.style2\">\r\n <kendo-toolbar-buttongroup>\r\n <kendo-toolbar-button kendoEditorUndoButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorRedoButton></kendo-toolbar-button>\r\n </kendo-toolbar-buttongroup>\r\n <kendo-toolbar-buttongroup>\r\n <kendo-toolbar-button kendoEditorBoldButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorItalicButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorUnderlineButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorStrikethroughButton></kendo-toolbar-button>\r\n </kendo-toolbar-buttongroup>\r\n <kendo-toolbar-buttongroup>\r\n <kendo-toolbar-button kendoEditorSubscriptButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorSuperscriptButton></kendo-toolbar-button>\r\n </kendo-toolbar-buttongroup>\r\n <kendo-toolbar-buttongroup>\r\n <kendo-toolbar-button kendoEditorAlignLeftButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorAlignCenterButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorAlignRightButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorAlignJustifyButton></kendo-toolbar-button>\r\n </kendo-toolbar-buttongroup>\r\n <kendo-toolbar-dropdownlist kendoEditorFontSize></kendo-toolbar-dropdownlist>\r\n <kendo-toolbar-dropdownlist kendoEditorFontFamily></kendo-toolbar-dropdownlist>\r\n <kendo-toolbar-colorpicker kendoEditorForeColor view=\"gradient\"></kendo-toolbar-colorpicker>\r\n <kendo-toolbar-colorpicker kendoEditorBackColor view=\"gradient\"></kendo-toolbar-colorpicker>\r\n <kendo-toolbar-buttongroup>\r\n <kendo-toolbar-button kendoEditorInsertUnorderedListButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorInsertOrderedListButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorIndentButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorOutdentButton></kendo-toolbar-button>\r\n </kendo-toolbar-buttongroup>\r\n <kendo-toolbar-buttongroup>\r\n <kendo-toolbar-button kendoEditorCreateLinkButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorUnlinkButton></kendo-toolbar-button>\r\n </kendo-toolbar-buttongroup>\r\n <kendo-toolbar-button *ngIf=\"data.ToolBarUploadImageMethod == 'default'\" kendoEditorInsertImageButton></kendo-toolbar-button>\r\n <kendo-toolbar-button *ngIf=\"data.ToolBarUploadImageMethod == 'explorer'\" icon=\"k-i-image k-i-photo\" (click)=\"openFileExplorer()\"></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorViewSourceButton></kendo-toolbar-button>\r\n <kendo-editor-insert-table-button></kendo-editor-insert-table-button>\r\n <kendo-toolbar-buttongroup>\r\n <kendo-toolbar-button kendoEditorAddColumnBeforeButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorAddColumnAfterButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorAddRowBeforeButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorAddRowAfterButton></kendo-toolbar-button>\r\n </kendo-toolbar-buttongroup>\r\n <kendo-toolbar-buttongroup>\r\n <kendo-toolbar-button kendoEditorDeleteColumnButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorDeleteRowButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorDeleteTableButton></kendo-toolbar-button>\r\n </kendo-toolbar-buttongroup>\r\n <kendo-toolbar-buttongroup>\r\n <kendo-toolbar-button kendoEditorMergeCellsButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorSplitCellButton></kendo-toolbar-button>\r\n </kendo-toolbar-buttongroup>\r\n </kendo-toolbar>\r\n </kendo-editor>\r\n <input style=\"display:none;\" type=\"file\" [id]=\"data.Value +'-upload-file'\" [name]=\"data.Value +'-upload-file'\" accept=\"image/*\" ngf-max-size=\"5MB\" (change)=\"uploadImage($event)\">\r\n</div>\r\n", styles: [".title{margin:20px 10px 5px;font-size:18px;font-weight:700}\n"], components: [{ type: i2.EditorComponent, selector: "kendo-editor", inputs: ["value", "disabled", "readonly", "iframe", "iframeCss", "applyToWord", "schema", "plugins", "placeholder", "preserveWhitespace", "pasteCleanupSettings", "resizable"], outputs: ["valueChange", "focus", "paste", "blur"] }, { type: i3.ToolBarComponent, selector: "kendo-toolbar", inputs: ["overflow", "resizable", "popupSettings", "tabindex", "tabIndex"], outputs: ["open", "close"], exportAs: ["kendoToolBar"] }, { type: i3.ToolBarButtonGroupComponent, selector: "kendo-toolbar-buttongroup", inputs: ["disabled", "selection", "width", "look"], exportAs: ["kendoToolBarButtonGroup"] }, { type: i3.ToolBarButtonComponent, selector: "kendo-toolbar-button", inputs: ["showText", "showIcon", "text", "style", "className", "title", "disabled", "toggleable", "look", "togglable", "selected", "fillMode", "themeColor", "icon", "iconClass", "imageUrl"], outputs: ["click", "pointerdown", "selectedChange"], exportAs: ["kendoToolBarButton"] }, { type: i2.EditorFormatComponent, selector: "kendo-toolbar-dropdownlist[kendoEditorFormat]", inputs: ["data"], outputs: ["valueChange"] }, { type: i2.EditorFontSizeComponent, selector: "kendo-toolbar-dropdownlist[kendoEditorFontSize]", inputs: ["data"], outputs: ["valueChange"] }, { type: i2.EditorFontFamilyComponent, selector: "kendo-toolbar-dropdownlist[kendoEditorFontFamily]", inputs: ["data"], outputs: ["valueChange"] }, { type: i2.EditorColorPickerComponent, selector: "kendo-toolbar-colorpicker", inputs: ["value", "icon", "paletteSettings", "editorCommand", "disabled", "views", "view"] }, { type: i2.EditorInsertTableButtonComponent, selector: "kendo-editor-insert-table-button" }], directives: [{ type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i4.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i2.EditorUndoButtonDirective, selector: "kendo-toolbar-button[kendoEditorUndoButton]" }, { type: i2.EditorRedoButtonDirective, selector: "kendo-toolbar-button[kendoEditorRedoButton]" }, { type: i2.EditorBoldButtonDirective, selector: "kendo-toolbar-button[kendoEditorBoldButton]" }, { type: i2.EditorItalicButtonDirective, selector: "kendo-toolbar-button[kendoEditorItalicButton]" }, { type: i2.EditorUnderlineButtonDirective, selector: "kendo-toolbar-button[kendoEditorUnderlineButton]" }, { type: i2.EditorStrikethroughButtonDirective, selector: "kendo-toolbar-button[kendoEditorStrikethroughButton]" }, { type: i2.EditorSubscriptButtonDirective, selector: "kendo-toolbar-button[kendoEditorSubscriptButton]" }, { type: i2.EditorSuperscriptButtonDirective, selector: "kendo-toolbar-button[kendoEditorSuperscriptButton]" }, { type: i2.EditorAlignLeftButtonDirective, selector: "kendo-toolbar-button[kendoEditorAlignLeftButton]" }, { type: i2.EditorAlignCenterButtonDirective, selector: "kendo-toolbar-button[kendoEditorAlignCenterButton]" }, { type: i2.EditorAlignRightButtonDirective, selector: "kendo-toolbar-button[kendoEditorAlignRightButton]" }, { type: i2.EditorAlignJustifyButtonDirective, selector: "kendo-toolbar-button[kendoEditorAlignJustifyButton]" }, { type: i2.EditorForeColorDirective, selector: "[kendoEditorForeColor]" }, { type: i2.EditorBackColorDirective, selector: "[kendoEditorBackColor]" }, { type: i2.EditorInsertUnorderedListButtonDirective, selector: "kendo-toolbar-button[kendoEditorInsertUnorderedListButton]" }, { type: i2.EditorInsertOrderedListButtonDirective, selector: "kendo-toolbar-button[kendoEditorInsertOrderedListButton]" }, { type: i2.EditorIndentButtonDirective, selector: "kendo-toolbar-button[kendoEditorIndentButton]" }, { type: i2.EditorOutdentButtonDirective, selector: "kendo-toolbar-button[kendoEditorOutdentButton]" }, { type: i2.EditorCreateLinkButtonDirective, selector: "kendo-toolbar-button[kendoEditorCreateLinkButton]" }, { type: i2.EditorUnlinkButtonDirective, selector: "kendo-toolbar-button[kendoEditorUnlinkButton]" }, { type: i2.EditorAddColumnBeforeButtonDirective, selector: "kendo-toolbar-button[kendoEditorAddColumnBeforeButton]" }, { type: i2.EditorAddColumnAfterButtonDirective, selector: "kendo-toolbar-button[kendoEditorAddColumnAfterButton]" }, { type: i2.EditorAddRowBeforeButtonDirective, selector: "kendo-toolbar-button[kendoEditorAddRowBeforeButton]" }, { type: i2.EditorAddRowAfterButtonDirective, selector: "kendo-toolbar-button[kendoEditorAddRowAfterButton]" }, { type: i2.EditorDeleteColumnButtonDirective, selector: "kendo-toolbar-button[kendoEditorDeleteColumnButton]" }, { type: i2.EditorDeleteRowButtonDirective, selector: "kendo-toolbar-button[kendoEditorDeleteRowButton]" }, { type: i2.EditorDeleteTableButtonDirective, selector: "kendo-toolbar-button[kendoEditorDeleteTableButton]" }, { type: i2.EditorInsertFileButtonDirective, selector: "kendo-toolbar-button[kendoEditorInsertFileButton]" }, { type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.EditorInsertImageButtonDirective, selector: "kendo-toolbar-button[kendoEditorInsertImageButton]" }, { type: i2.EditorViewSourceButtonDirective, selector: "kendo-toolbar-button[kendoEditorViewSourceButton]" }, { type: i2.EditorMergeCellsButtonDirective, selector: "kendo-toolbar-button[kendoEditorMergeCellsButton]" }, { type: i2.EditorSplitCellButtonDirective, selector: "kendo-toolbar-button[kendoEditorSplitCellButton]" }] });
75
+ ZtexteditorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: ZtexteditorComponent, selector: "app-ztexteditor", viewQueries: [{ propertyName: "editor", first: true, predicate: ["editor"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div [formGroup]=\"form\" class=\"ztexteditor-container e1tag-style\" [style]=\"componentProperties.style.style\">\r\n <kendo-editor #editor [id]=\"data.Value\" [formControlName]=\"data.Value\" class=\"e1tag-style1\"\r\n [style]=\"componentProperties.style.style1\" [readonly]=\"(!!componentProperties.isReadOnlyField ? group[componentProperties.isReadOnlyField] :\r\n componentProperties.isReadOnly)\" (valueChange)=\"onChange($event)\"\r\n [pasteCleanupSettings]=\"pasteCleanupSettings\">\r\n <kendo-toolbar [style.display]=\"data.ToolBarStyle === 'basic' ? 'inherit' : 'none'\" class=\"e1tag-style2\"\r\n [style]=\"componentProperties.style.style2\">\r\n <kendo-toolbar-buttongroup>\r\n <kendo-toolbar-button kendoEditorUndoButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorRedoButton></kendo-toolbar-button>\r\n </kendo-toolbar-buttongroup>\r\n <kendo-toolbar-buttongroup>\r\n <kendo-toolbar-button kendoEditorBoldButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorItalicButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorUnderlineButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorStrikethroughButton></kendo-toolbar-button>\r\n </kendo-toolbar-buttongroup>\r\n <kendo-toolbar-buttongroup>\r\n <kendo-toolbar-button kendoEditorSubscriptButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorSuperscriptButton></kendo-toolbar-button>\r\n </kendo-toolbar-buttongroup>\r\n <kendo-toolbar-buttongroup>\r\n <kendo-toolbar-button kendoEditorAlignLeftButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorAlignCenterButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorAlignRightButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorAlignJustifyButton></kendo-toolbar-button>\r\n </kendo-toolbar-buttongroup>\r\n <kendo-toolbar-dropdownlist kendoEditorFormat></kendo-toolbar-dropdownlist>\r\n <kendo-toolbar-dropdownlist kendoEditorFontSize></kendo-toolbar-dropdownlist>\r\n <kendo-toolbar-dropdownlist kendoEditorFontFamily></kendo-toolbar-dropdownlist>\r\n <kendo-toolbar-colorpicker kendoEditorForeColor></kendo-toolbar-colorpicker>\r\n <kendo-toolbar-colorpicker kendoEditorBackColor></kendo-toolbar-colorpicker>\r\n <kendo-toolbar-buttongroup>\r\n <kendo-toolbar-button kendoEditorInsertUnorderedListButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorInsertOrderedListButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorIndentButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorOutdentButton></kendo-toolbar-button>\r\n </kendo-toolbar-buttongroup>\r\n <kendo-toolbar-buttongroup>\r\n <kendo-toolbar-button kendoEditorCreateLinkButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorUnlinkButton></kendo-toolbar-button>\r\n </kendo-toolbar-buttongroup>\r\n <kendo-editor-insert-table-button></kendo-editor-insert-table-button>\r\n <kendo-toolbar-buttongroup>\r\n <kendo-toolbar-button kendoEditorAddColumnBeforeButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorAddColumnAfterButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorAddRowBeforeButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorAddRowAfterButton></kendo-toolbar-button>\r\n </kendo-toolbar-buttongroup>\r\n <kendo-toolbar-buttongroup>\r\n <kendo-toolbar-button kendoEditorDeleteColumnButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorDeleteRowButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorDeleteTableButton></kendo-toolbar-button>\r\n </kendo-toolbar-buttongroup>\r\n <kendo-toolbar-button kendoEditorInsertFileButton></kendo-toolbar-button>\r\n <kendo-toolbar-button *ngIf=\"data.ToolBarUploadImageMethod == 'default'\" kendoEditorInsertImageButton></kendo-toolbar-button>\r\n <kendo-toolbar-button *ngIf=\"data.ToolBarUploadImageMethod == 'explorer'\" icon=\"k-i-image k-i-photo\" (click)=\"openFileExplorer()\"></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorViewSourceButton></kendo-toolbar-button>\r\n </kendo-toolbar>\r\n <kendo-toolbar [style.display]=\"data.ToolBarStyle === 'full' ? 'inherit' : 'none'\" class=\"e1tag-style2\" [style]=\"componentProperties.style.style2\">\r\n <kendo-toolbar-buttongroup>\r\n <kendo-toolbar-button kendoEditorUndoButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorRedoButton></kendo-toolbar-button>\r\n </kendo-toolbar-buttongroup>\r\n <kendo-toolbar-buttongroup>\r\n <kendo-toolbar-button kendoEditorBoldButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorItalicButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorUnderlineButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorStrikethroughButton></kendo-toolbar-button>\r\n </kendo-toolbar-buttongroup>\r\n <kendo-toolbar-buttongroup>\r\n <kendo-toolbar-button kendoEditorSubscriptButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorSuperscriptButton></kendo-toolbar-button>\r\n </kendo-toolbar-buttongroup>\r\n <kendo-toolbar-buttongroup>\r\n <kendo-toolbar-button kendoEditorAlignLeftButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorAlignCenterButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorAlignRightButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorAlignJustifyButton></kendo-toolbar-button>\r\n </kendo-toolbar-buttongroup>\r\n <kendo-toolbar-dropdownlist kendoEditorFontSize></kendo-toolbar-dropdownlist>\r\n <kendo-toolbar-dropdownlist kendoEditorFontFamily></kendo-toolbar-dropdownlist>\r\n <kendo-toolbar-colorpicker kendoEditorForeColor view=\"gradient\"></kendo-toolbar-colorpicker>\r\n <kendo-toolbar-colorpicker kendoEditorBackColor view=\"gradient\"></kendo-toolbar-colorpicker>\r\n <kendo-toolbar-buttongroup>\r\n <kendo-toolbar-button kendoEditorInsertUnorderedListButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorInsertOrderedListButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorIndentButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorOutdentButton></kendo-toolbar-button>\r\n </kendo-toolbar-buttongroup>\r\n <kendo-toolbar-buttongroup>\r\n <kendo-toolbar-button kendoEditorCreateLinkButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorUnlinkButton></kendo-toolbar-button>\r\n </kendo-toolbar-buttongroup>\r\n <kendo-toolbar-button *ngIf=\"data.ToolBarUploadImageMethod == 'default'\" kendoEditorInsertImageButton></kendo-toolbar-button>\r\n <kendo-toolbar-button *ngIf=\"data.ToolBarUploadImageMethod == 'explorer'\" icon=\"k-i-image k-i-photo\" (click)=\"openFileExplorer()\"></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorViewSourceButton></kendo-toolbar-button>\r\n <kendo-editor-insert-table-button></kendo-editor-insert-table-button>\r\n <kendo-toolbar-buttongroup>\r\n <kendo-toolbar-button kendoEditorAddColumnBeforeButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorAddColumnAfterButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorAddRowBeforeButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorAddRowAfterButton></kendo-toolbar-button>\r\n </kendo-toolbar-buttongroup>\r\n <kendo-toolbar-buttongroup>\r\n <kendo-toolbar-button kendoEditorDeleteColumnButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorDeleteRowButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorDeleteTableButton></kendo-toolbar-button>\r\n </kendo-toolbar-buttongroup>\r\n <kendo-toolbar-buttongroup>\r\n <kendo-toolbar-button kendoEditorMergeCellsButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorSplitCellButton></kendo-toolbar-button>\r\n </kendo-toolbar-buttongroup>\r\n </kendo-toolbar>\r\n </kendo-editor>\r\n <input style=\"display:none;\" type=\"file\" [id]=\"data.Value +'-upload-file'\" [name]=\"data.Value +'-upload-file'\" accept=\"image/*\" ngf-max-size=\"5MB\" (change)=\"uploadImage($event)\">\r\n</div>\r\n", styles: [".title{margin:20px 10px 5px;font-size:18px;font-weight:700}\n"], components: [{ type: i2.EditorComponent, selector: "kendo-editor", inputs: ["value", "disabled", "readonly", "iframe", "iframeCss", "applyToWord", "schema", "plugins", "placeholder", "preserveWhitespace", "pasteCleanupSettings", "resizable"], outputs: ["valueChange", "focus", "paste", "blur"] }, { type: i3.ToolBarComponent, selector: "kendo-toolbar", inputs: ["overflow", "resizable", "popupSettings", "tabindex", "tabIndex"], outputs: ["open", "close"], exportAs: ["kendoToolBar"] }, { type: i3.ToolBarButtonGroupComponent, selector: "kendo-toolbar-buttongroup", inputs: ["disabled", "selection", "width", "look"], exportAs: ["kendoToolBarButtonGroup"] }, { type: i3.ToolBarButtonComponent, selector: "kendo-toolbar-button", inputs: ["showText", "showIcon", "text", "style", "className", "title", "disabled", "toggleable", "look", "togglable", "selected", "fillMode", "themeColor", "icon", "iconClass", "imageUrl"], outputs: ["click", "pointerdown", "selectedChange"], exportAs: ["kendoToolBarButton"] }, { type: i2.EditorFormatComponent, selector: "kendo-toolbar-dropdownlist[kendoEditorFormat]", inputs: ["data"], outputs: ["valueChange"] }, { type: i2.EditorFontSizeComponent, selector: "kendo-toolbar-dropdownlist[kendoEditorFontSize]", inputs: ["data"], outputs: ["valueChange"] }, { type: i2.EditorFontFamilyComponent, selector: "kendo-toolbar-dropdownlist[kendoEditorFontFamily]", inputs: ["data"], outputs: ["valueChange"] }, { type: i2.EditorColorPickerComponent, selector: "kendo-toolbar-colorpicker", inputs: ["value", "icon", "paletteSettings", "editorCommand", "disabled", "views", "view"] }, { type: i2.EditorInsertTableButtonComponent, selector: "kendo-editor-insert-table-button" }], directives: [{ type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i4.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i2.EditorUndoButtonDirective, selector: "kendo-toolbar-button[kendoEditorUndoButton]" }, { type: i2.EditorRedoButtonDirective, selector: "kendo-toolbar-button[kendoEditorRedoButton]" }, { type: i2.EditorBoldButtonDirective, selector: "kendo-toolbar-button[kendoEditorBoldButton]" }, { type: i2.EditorItalicButtonDirective, selector: "kendo-toolbar-button[kendoEditorItalicButton]" }, { type: i2.EditorUnderlineButtonDirective, selector: "kendo-toolbar-button[kendoEditorUnderlineButton]" }, { type: i2.EditorStrikethroughButtonDirective, selector: "kendo-toolbar-button[kendoEditorStrikethroughButton]" }, { type: i2.EditorSubscriptButtonDirective, selector: "kendo-toolbar-button[kendoEditorSubscriptButton]" }, { type: i2.EditorSuperscriptButtonDirective, selector: "kendo-toolbar-button[kendoEditorSuperscriptButton]" }, { type: i2.EditorAlignLeftButtonDirective, selector: "kendo-toolbar-button[kendoEditorAlignLeftButton]" }, { type: i2.EditorAlignCenterButtonDirective, selector: "kendo-toolbar-button[kendoEditorAlignCenterButton]" }, { type: i2.EditorAlignRightButtonDirective, selector: "kendo-toolbar-button[kendoEditorAlignRightButton]" }, { type: i2.EditorAlignJustifyButtonDirective, selector: "kendo-toolbar-button[kendoEditorAlignJustifyButton]" }, { type: i2.EditorForeColorDirective, selector: "[kendoEditorForeColor]" }, { type: i2.EditorBackColorDirective, selector: "[kendoEditorBackColor]" }, { type: i2.EditorInsertUnorderedListButtonDirective, selector: "kendo-toolbar-button[kendoEditorInsertUnorderedListButton]" }, { type: i2.EditorInsertOrderedListButtonDirective, selector: "kendo-toolbar-button[kendoEditorInsertOrderedListButton]" }, { type: i2.EditorIndentButtonDirective, selector: "kendo-toolbar-button[kendoEditorIndentButton]" }, { type: i2.EditorOutdentButtonDirective, selector: "kendo-toolbar-button[kendoEditorOutdentButton]" }, { type: i2.EditorCreateLinkButtonDirective, selector: "kendo-toolbar-button[kendoEditorCreateLinkButton]" }, { type: i2.EditorUnlinkButtonDirective, selector: "kendo-toolbar-button[kendoEditorUnlinkButton]" }, { type: i2.EditorAddColumnBeforeButtonDirective, selector: "kendo-toolbar-button[kendoEditorAddColumnBeforeButton]" }, { type: i2.EditorAddColumnAfterButtonDirective, selector: "kendo-toolbar-button[kendoEditorAddColumnAfterButton]" }, { type: i2.EditorAddRowBeforeButtonDirective, selector: "kendo-toolbar-button[kendoEditorAddRowBeforeButton]" }, { type: i2.EditorAddRowAfterButtonDirective, selector: "kendo-toolbar-button[kendoEditorAddRowAfterButton]" }, { type: i2.EditorDeleteColumnButtonDirective, selector: "kendo-toolbar-button[kendoEditorDeleteColumnButton]" }, { type: i2.EditorDeleteRowButtonDirective, selector: "kendo-toolbar-button[kendoEditorDeleteRowButton]" }, { type: i2.EditorDeleteTableButtonDirective, selector: "kendo-toolbar-button[kendoEditorDeleteTableButton]" }, { type: i2.EditorInsertFileButtonDirective, selector: "kendo-toolbar-button[kendoEditorInsertFileButton]" }, { type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.EditorInsertImageButtonDirective, selector: "kendo-toolbar-button[kendoEditorInsertImageButton]" }, { type: i2.EditorViewSourceButtonDirective, selector: "kendo-toolbar-button[kendoEditorViewSourceButton]" }, { type: i2.EditorMergeCellsButtonDirective, selector: "kendo-toolbar-button[kendoEditorMergeCellsButton]" }, { type: i2.EditorSplitCellButtonDirective, selector: "kendo-toolbar-button[kendoEditorSplitCellButton]" }] });
59
76
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: ZtexteditorComponent, decorators: [{
60
77
  type: Component,
61
- args: [{ selector: 'app-ztexteditor', template: "<div [formGroup]=\"form\" class=\"ztexteditor-container e1tag-style\" [style]=\"componentProperties.style.style\">\r\n <kendo-editor #editor [id]=\"data.Value\" [formControlName]=\"data.Value\" class=\"e1tag-style1\"\r\n [style]=\"componentProperties.style.style1\" [readonly]=\"(!!componentProperties.isReadOnlyField ? group[componentProperties.isReadOnlyField] :\r\n componentProperties.isReadOnly)\" (valueChange)=\"onChange($event)\">\r\n <kendo-toolbar [style.display]=\"data.ToolBarStyle === 'basic' ? 'inherit' : 'none'\" class=\"e1tag-style2\"\r\n [style]=\"componentProperties.style.style2\">\r\n <kendo-toolbar-buttongroup>\r\n <kendo-toolbar-button kendoEditorUndoButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorRedoButton></kendo-toolbar-button>\r\n </kendo-toolbar-buttongroup>\r\n <kendo-toolbar-buttongroup>\r\n <kendo-toolbar-button kendoEditorBoldButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorItalicButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorUnderlineButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorStrikethroughButton></kendo-toolbar-button>\r\n </kendo-toolbar-buttongroup>\r\n <kendo-toolbar-buttongroup>\r\n <kendo-toolbar-button kendoEditorSubscriptButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorSuperscriptButton></kendo-toolbar-button>\r\n </kendo-toolbar-buttongroup>\r\n <kendo-toolbar-buttongroup>\r\n <kendo-toolbar-button kendoEditorAlignLeftButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorAlignCenterButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorAlignRightButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorAlignJustifyButton></kendo-toolbar-button>\r\n </kendo-toolbar-buttongroup>\r\n <kendo-toolbar-dropdownlist kendoEditorFormat></kendo-toolbar-dropdownlist>\r\n <kendo-toolbar-dropdownlist kendoEditorFontSize></kendo-toolbar-dropdownlist>\r\n <kendo-toolbar-dropdownlist kendoEditorFontFamily></kendo-toolbar-dropdownlist>\r\n <kendo-toolbar-colorpicker kendoEditorForeColor></kendo-toolbar-colorpicker>\r\n <kendo-toolbar-colorpicker kendoEditorBackColor></kendo-toolbar-colorpicker>\r\n <kendo-toolbar-buttongroup>\r\n <kendo-toolbar-button kendoEditorInsertUnorderedListButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorInsertOrderedListButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorIndentButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorOutdentButton></kendo-toolbar-button>\r\n </kendo-toolbar-buttongroup>\r\n <kendo-toolbar-buttongroup>\r\n <kendo-toolbar-button kendoEditorCreateLinkButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorUnlinkButton></kendo-toolbar-button>\r\n </kendo-toolbar-buttongroup>\r\n <kendo-editor-insert-table-button></kendo-editor-insert-table-button>\r\n <kendo-toolbar-buttongroup>\r\n <kendo-toolbar-button kendoEditorAddColumnBeforeButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorAddColumnAfterButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorAddRowBeforeButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorAddRowAfterButton></kendo-toolbar-button>\r\n </kendo-toolbar-buttongroup>\r\n <kendo-toolbar-buttongroup>\r\n <kendo-toolbar-button kendoEditorDeleteColumnButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorDeleteRowButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorDeleteTableButton></kendo-toolbar-button>\r\n </kendo-toolbar-buttongroup>\r\n <kendo-toolbar-button kendoEditorInsertFileButton></kendo-toolbar-button>\r\n <kendo-toolbar-button *ngIf=\"data.ToolBarUploadImageMethod == 'default'\" kendoEditorInsertImageButton></kendo-toolbar-button>\r\n <kendo-toolbar-button *ngIf=\"data.ToolBarUploadImageMethod == 'explorer'\" icon=\"k-i-image k-i-photo\" (click)=\"openFileExplorer()\"></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorViewSourceButton></kendo-toolbar-button>\r\n </kendo-toolbar>\r\n <kendo-toolbar [style.display]=\"data.ToolBarStyle === 'full' ? 'inherit' : 'none'\" class=\"e1tag-style2\" [style]=\"componentProperties.style.style2\">\r\n <kendo-toolbar-buttongroup>\r\n <kendo-toolbar-button kendoEditorUndoButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorRedoButton></kendo-toolbar-button>\r\n </kendo-toolbar-buttongroup>\r\n <kendo-toolbar-buttongroup>\r\n <kendo-toolbar-button kendoEditorBoldButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorItalicButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorUnderlineButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorStrikethroughButton></kendo-toolbar-button>\r\n </kendo-toolbar-buttongroup>\r\n <kendo-toolbar-buttongroup>\r\n <kendo-toolbar-button kendoEditorSubscriptButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorSuperscriptButton></kendo-toolbar-button>\r\n </kendo-toolbar-buttongroup>\r\n <kendo-toolbar-buttongroup>\r\n <kendo-toolbar-button kendoEditorAlignLeftButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorAlignCenterButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorAlignRightButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorAlignJustifyButton></kendo-toolbar-button>\r\n </kendo-toolbar-buttongroup>\r\n <kendo-toolbar-dropdownlist kendoEditorFontSize></kendo-toolbar-dropdownlist>\r\n <kendo-toolbar-dropdownlist kendoEditorFontFamily></kendo-toolbar-dropdownlist>\r\n <kendo-toolbar-colorpicker kendoEditorForeColor view=\"gradient\"></kendo-toolbar-colorpicker>\r\n <kendo-toolbar-colorpicker kendoEditorBackColor view=\"gradient\"></kendo-toolbar-colorpicker>\r\n <kendo-toolbar-buttongroup>\r\n <kendo-toolbar-button kendoEditorInsertUnorderedListButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorInsertOrderedListButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorIndentButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorOutdentButton></kendo-toolbar-button>\r\n </kendo-toolbar-buttongroup>\r\n <kendo-toolbar-buttongroup>\r\n <kendo-toolbar-button kendoEditorCreateLinkButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorUnlinkButton></kendo-toolbar-button>\r\n </kendo-toolbar-buttongroup>\r\n <kendo-toolbar-button *ngIf=\"data.ToolBarUploadImageMethod == 'default'\" kendoEditorInsertImageButton></kendo-toolbar-button>\r\n <kendo-toolbar-button *ngIf=\"data.ToolBarUploadImageMethod == 'explorer'\" icon=\"k-i-image k-i-photo\" (click)=\"openFileExplorer()\"></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorViewSourceButton></kendo-toolbar-button>\r\n <kendo-editor-insert-table-button></kendo-editor-insert-table-button>\r\n <kendo-toolbar-buttongroup>\r\n <kendo-toolbar-button kendoEditorAddColumnBeforeButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorAddColumnAfterButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorAddRowBeforeButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorAddRowAfterButton></kendo-toolbar-button>\r\n </kendo-toolbar-buttongroup>\r\n <kendo-toolbar-buttongroup>\r\n <kendo-toolbar-button kendoEditorDeleteColumnButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorDeleteRowButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorDeleteTableButton></kendo-toolbar-button>\r\n </kendo-toolbar-buttongroup>\r\n <kendo-toolbar-buttongroup>\r\n <kendo-toolbar-button kendoEditorMergeCellsButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorSplitCellButton></kendo-toolbar-button>\r\n </kendo-toolbar-buttongroup>\r\n </kendo-toolbar>\r\n </kendo-editor>\r\n <input style=\"display:none;\" type=\"file\" [id]=\"data.Value +'-upload-file'\" [name]=\"data.Value +'-upload-file'\" accept=\"image/*\" ngf-max-size=\"5MB\" (change)=\"uploadImage($event)\">\r\n</div>\r\n", styles: [".title{margin:20px 10px 5px;font-size:18px;font-weight:700}\n"] }]
78
+ args: [{ selector: 'app-ztexteditor', template: "<div [formGroup]=\"form\" class=\"ztexteditor-container e1tag-style\" [style]=\"componentProperties.style.style\">\r\n <kendo-editor #editor [id]=\"data.Value\" [formControlName]=\"data.Value\" class=\"e1tag-style1\"\r\n [style]=\"componentProperties.style.style1\" [readonly]=\"(!!componentProperties.isReadOnlyField ? group[componentProperties.isReadOnlyField] :\r\n componentProperties.isReadOnly)\" (valueChange)=\"onChange($event)\"\r\n [pasteCleanupSettings]=\"pasteCleanupSettings\">\r\n <kendo-toolbar [style.display]=\"data.ToolBarStyle === 'basic' ? 'inherit' : 'none'\" class=\"e1tag-style2\"\r\n [style]=\"componentProperties.style.style2\">\r\n <kendo-toolbar-buttongroup>\r\n <kendo-toolbar-button kendoEditorUndoButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorRedoButton></kendo-toolbar-button>\r\n </kendo-toolbar-buttongroup>\r\n <kendo-toolbar-buttongroup>\r\n <kendo-toolbar-button kendoEditorBoldButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorItalicButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorUnderlineButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorStrikethroughButton></kendo-toolbar-button>\r\n </kendo-toolbar-buttongroup>\r\n <kendo-toolbar-buttongroup>\r\n <kendo-toolbar-button kendoEditorSubscriptButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorSuperscriptButton></kendo-toolbar-button>\r\n </kendo-toolbar-buttongroup>\r\n <kendo-toolbar-buttongroup>\r\n <kendo-toolbar-button kendoEditorAlignLeftButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorAlignCenterButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorAlignRightButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorAlignJustifyButton></kendo-toolbar-button>\r\n </kendo-toolbar-buttongroup>\r\n <kendo-toolbar-dropdownlist kendoEditorFormat></kendo-toolbar-dropdownlist>\r\n <kendo-toolbar-dropdownlist kendoEditorFontSize></kendo-toolbar-dropdownlist>\r\n <kendo-toolbar-dropdownlist kendoEditorFontFamily></kendo-toolbar-dropdownlist>\r\n <kendo-toolbar-colorpicker kendoEditorForeColor></kendo-toolbar-colorpicker>\r\n <kendo-toolbar-colorpicker kendoEditorBackColor></kendo-toolbar-colorpicker>\r\n <kendo-toolbar-buttongroup>\r\n <kendo-toolbar-button kendoEditorInsertUnorderedListButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorInsertOrderedListButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorIndentButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorOutdentButton></kendo-toolbar-button>\r\n </kendo-toolbar-buttongroup>\r\n <kendo-toolbar-buttongroup>\r\n <kendo-toolbar-button kendoEditorCreateLinkButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorUnlinkButton></kendo-toolbar-button>\r\n </kendo-toolbar-buttongroup>\r\n <kendo-editor-insert-table-button></kendo-editor-insert-table-button>\r\n <kendo-toolbar-buttongroup>\r\n <kendo-toolbar-button kendoEditorAddColumnBeforeButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorAddColumnAfterButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorAddRowBeforeButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorAddRowAfterButton></kendo-toolbar-button>\r\n </kendo-toolbar-buttongroup>\r\n <kendo-toolbar-buttongroup>\r\n <kendo-toolbar-button kendoEditorDeleteColumnButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorDeleteRowButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorDeleteTableButton></kendo-toolbar-button>\r\n </kendo-toolbar-buttongroup>\r\n <kendo-toolbar-button kendoEditorInsertFileButton></kendo-toolbar-button>\r\n <kendo-toolbar-button *ngIf=\"data.ToolBarUploadImageMethod == 'default'\" kendoEditorInsertImageButton></kendo-toolbar-button>\r\n <kendo-toolbar-button *ngIf=\"data.ToolBarUploadImageMethod == 'explorer'\" icon=\"k-i-image k-i-photo\" (click)=\"openFileExplorer()\"></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorViewSourceButton></kendo-toolbar-button>\r\n </kendo-toolbar>\r\n <kendo-toolbar [style.display]=\"data.ToolBarStyle === 'full' ? 'inherit' : 'none'\" class=\"e1tag-style2\" [style]=\"componentProperties.style.style2\">\r\n <kendo-toolbar-buttongroup>\r\n <kendo-toolbar-button kendoEditorUndoButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorRedoButton></kendo-toolbar-button>\r\n </kendo-toolbar-buttongroup>\r\n <kendo-toolbar-buttongroup>\r\n <kendo-toolbar-button kendoEditorBoldButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorItalicButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorUnderlineButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorStrikethroughButton></kendo-toolbar-button>\r\n </kendo-toolbar-buttongroup>\r\n <kendo-toolbar-buttongroup>\r\n <kendo-toolbar-button kendoEditorSubscriptButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorSuperscriptButton></kendo-toolbar-button>\r\n </kendo-toolbar-buttongroup>\r\n <kendo-toolbar-buttongroup>\r\n <kendo-toolbar-button kendoEditorAlignLeftButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorAlignCenterButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorAlignRightButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorAlignJustifyButton></kendo-toolbar-button>\r\n </kendo-toolbar-buttongroup>\r\n <kendo-toolbar-dropdownlist kendoEditorFontSize></kendo-toolbar-dropdownlist>\r\n <kendo-toolbar-dropdownlist kendoEditorFontFamily></kendo-toolbar-dropdownlist>\r\n <kendo-toolbar-colorpicker kendoEditorForeColor view=\"gradient\"></kendo-toolbar-colorpicker>\r\n <kendo-toolbar-colorpicker kendoEditorBackColor view=\"gradient\"></kendo-toolbar-colorpicker>\r\n <kendo-toolbar-buttongroup>\r\n <kendo-toolbar-button kendoEditorInsertUnorderedListButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorInsertOrderedListButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorIndentButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorOutdentButton></kendo-toolbar-button>\r\n </kendo-toolbar-buttongroup>\r\n <kendo-toolbar-buttongroup>\r\n <kendo-toolbar-button kendoEditorCreateLinkButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorUnlinkButton></kendo-toolbar-button>\r\n </kendo-toolbar-buttongroup>\r\n <kendo-toolbar-button *ngIf=\"data.ToolBarUploadImageMethod == 'default'\" kendoEditorInsertImageButton></kendo-toolbar-button>\r\n <kendo-toolbar-button *ngIf=\"data.ToolBarUploadImageMethod == 'explorer'\" icon=\"k-i-image k-i-photo\" (click)=\"openFileExplorer()\"></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorViewSourceButton></kendo-toolbar-button>\r\n <kendo-editor-insert-table-button></kendo-editor-insert-table-button>\r\n <kendo-toolbar-buttongroup>\r\n <kendo-toolbar-button kendoEditorAddColumnBeforeButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorAddColumnAfterButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorAddRowBeforeButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorAddRowAfterButton></kendo-toolbar-button>\r\n </kendo-toolbar-buttongroup>\r\n <kendo-toolbar-buttongroup>\r\n <kendo-toolbar-button kendoEditorDeleteColumnButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorDeleteRowButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorDeleteTableButton></kendo-toolbar-button>\r\n </kendo-toolbar-buttongroup>\r\n <kendo-toolbar-buttongroup>\r\n <kendo-toolbar-button kendoEditorMergeCellsButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorSplitCellButton></kendo-toolbar-button>\r\n </kendo-toolbar-buttongroup>\r\n </kendo-toolbar>\r\n </kendo-editor>\r\n <input style=\"display:none;\" type=\"file\" [id]=\"data.Value +'-upload-file'\" [name]=\"data.Value +'-upload-file'\" accept=\"image/*\" ngf-max-size=\"5MB\" (change)=\"uploadImage($event)\">\r\n</div>\r\n", styles: [".title{margin:20px 10px 5px;font-size:18px;font-weight:700}\n"] }]
62
79
  }], ctorParameters: function () { return [{ type: i1.ZComponentService }]; }, propDecorators: { editor: [{
63
80
  type: ViewChild,
64
81
  args: ['editor']
65
82
  }] } });
66
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoienRleHRlZGl0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvenRleHRlZGl0b3IvenRleHRlZGl0b3IuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvenRleHRlZGl0b3IvenRleHRlZGl0b3IuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0JBQStCO0FBQy9CLE9BQU8sRUFBRSxTQUFTLEVBQWlCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQU9wRSwyQ0FBMkM7QUFDM0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBRXhFLE9BQU8sRUFBYyxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7Ozs7O0FBUy9ELE1BQU0sT0FBTyxvQkFBcUIsU0FBUSxjQUFjO0lBR3RELFlBQ1MsZ0JBQW1DO1FBRTFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBRmpCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBbUI7SUFHNUMsQ0FBQztJQUVELFFBQVE7UUFDTixLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLHdCQUF3QixJQUFJLFVBQVUsQ0FBQyxDQUFDLGlCQUFpQjtRQUN4RyxLQUFLLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLENBQUMsZ0JBQWdCLENBQUMsaUNBQWlDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3JFLENBQUM7SUFFTSxRQUFRLENBQUMsS0FBVTtRQUN4QixnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVFLElBQUksQ0FBQyxZQUFZLENBQUMscUJBQXFCLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDdEUsQ0FBQztJQUVNLEtBQUs7UUFDVixJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDZixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ3BCLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCw4QkFBOEI7SUFDdkIsZ0JBQWdCO1FBQ3JCLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssY0FBYyxDQUFDLENBQUM7UUFDeEUsSUFBSSxLQUFLLEVBQUU7WUFDVCxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDZjtJQUNILENBQUM7SUFFTSxXQUFXLENBQUMsU0FBYztRQUMvQixNQUFNLGFBQWEsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoRCxJQUFJLGFBQWEsRUFBRTtZQUNqQixJQUFJLENBQUMscUJBQXFCLENBQUMsYUFBYSxDQUFDLENBQUM7U0FDM0M7SUFDSCxDQUFDO0lBRU8scUJBQXFCLENBQUMsSUFBSTtRQUNoQyxJQUFJLE1BQU0sR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDO1FBQzlCLE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDM0IsTUFBTSxDQUFDLE1BQU0sR0FBRztZQUNkLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFFLEdBQUcsRUFBRSxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUMxRCxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUN2QixDQUFDOztpSEFyRFUsb0JBQW9CO3FHQUFwQixvQkFBb0IsZ0xDcEJqQyx5NlFBb0hBOzJGRGhHYSxvQkFBb0I7a0JBTmhDLFNBQVM7K0JBQ0UsaUJBQWlCO3dHQU1DLE1BQU07c0JBQWpDLFNBQVM7dUJBQUMsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbIi8qKioqKioqKioqIEFuZ3VsYXIgKioqKioqKioqKi9cclxuaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbi8qKioqKioqKioqIElvbmljICoqKioqKioqKiovXHJcblxyXG4vKioqKioqKioqKiBQbHVnaW4gKioqKioqKioqKi9cclxuaW1wb3J0IHsgRWRpdG9yQ29tcG9uZW50IH0gZnJvbSAnQHByb2dyZXNzL2tlbmRvLWFuZ3VsYXItZWRpdG9yJztcclxuXHJcbi8qKioqKioqKioqIENvbXBvbmVudCAmIFNlcnZpY2UgKioqKioqKioqKi9cclxuaW1wb3J0IHsgSW5wdXRGaWVsZEJhc2UgfSBmcm9tICcuLi9jb21wb25lbnRzL2lucHV0ZmllbGRiYXNlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFpDb21wb25lbnRTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvemNvbXBvbmVudC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgWkNvbXBvbmVudCwgWkNvbXBvbmVudEhlbHBlciB9IGZyb20gJ21taGdsb2JhbC16Y29yZSc7XHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtenRleHRlZGl0b3InLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi96dGV4dGVkaXRvci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4venRleHRlZGl0b3IuY29tcG9uZW50LnNjc3MnXSxcclxufSlcclxuXHJcbmV4cG9ydCBjbGFzcyBadGV4dGVkaXRvckNvbXBvbmVudCBleHRlbmRzIElucHV0RmllbGRCYXNlIGltcGxlbWVudHMgWkNvbXBvbmVudCwgT25Jbml0IHtcclxuICBAVmlld0NoaWxkKCdlZGl0b3InKSBwdWJsaWMgZWRpdG9yOiBFZGl0b3JDb21wb25lbnQ7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIGNvbXBvbmVudFNlcnZpY2U6IFpDb21wb25lbnRTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICBzdXBlcihjb21wb25lbnRTZXJ2aWNlKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgc3VwZXIuc2V0dXBJbm5lckZpZWxkKCk7XHJcbiAgICB0aGlzLmRhdGEuVG9vbEJhclVwbG9hZEltYWdlTWV0aG9kID0gdGhpcy5kYXRhLlRvb2xCYXJVcGxvYWRJbWFnZU1ldGhvZCB8fCAnZXhwbG9yZXInOyAvLyAgfHwgJ2RlZmF1bHQnO1xyXG4gICAgc3VwZXIuZm9jdXNPbkRlZmF1bHQodGhpcy5mb2N1cy5iaW5kKHRoaXMpKTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIHRoaXMuY29tcG9uZW50U2VydmljZS5kZWNyZW1lbnRDb21wb25lbnRDb3VudGVyRm9yRmllbGQodGhpcy5kYXRhKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbkNoYW5nZSh2YWx1ZTogYW55KSB7XHJcbiAgICBaQ29tcG9uZW50SGVscGVyLnNldFRvWk1vZGVsKHRoaXMuZGF0YS5WYWx1ZSwgdmFsdWUsIHRoaXMuZ3JvdXAsIHRoaXMuZGF0YSk7XHJcbiAgICB0aGlzLnRyaWdnZXJFdmVudChcImlucHV0ZmllbGQtb25DaGFuZ2VcIiwgdGhpcy5kYXRhLk9uQ2hhbmdlLCB2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZm9jdXMoKSB7XHJcbiAgICBpZiAodGhpcy5lZGl0b3IpIHtcclxuICAgICAgdGhpcy5lZGl0b3IuZm9jdXMoKTtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvLyAjcmVnaW9uIEN1c3RvbSBJbWFnZSBVcGxvYWRcclxuICBwdWJsaWMgb3BlbkZpbGVFeHBsb3JlcigpIHtcclxuICAgIGNvbnN0IGlucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYCR7dGhpcy5kYXRhLlZhbHVlfS11cGxvYWQtZmlsZWApO1xyXG4gICAgaWYgKGlucHV0KSB7XHJcbiAgICAgIGlucHV0LmNsaWNrKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdXBsb2FkSW1hZ2UoZmlsZUlucHV0OiBhbnkpIHtcclxuICAgIGNvbnN0IHVwbG9hZGVkSW1hZ2UgPSBmaWxlSW5wdXQudGFyZ2V0LmZpbGVzWzBdO1xyXG4gICAgaWYgKHVwbG9hZGVkSW1hZ2UpIHtcclxuICAgICAgdGhpcy5pbnNlcnRJbWFnZUludG9FZGl0b3IodXBsb2FkZWRJbWFnZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluc2VydEltYWdlSW50b0VkaXRvcihmaWxlKSB7XHJcbiAgICB2YXIgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpO1xyXG4gICAgcmVhZGVyLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgdGhpcy5lZGl0b3IuZXhlYyhcImluc2VydEltYWdlXCIsIHsgc3JjOiByZWFkZXIucmVzdWx0IH0pO1xyXG4gICAgfS5iaW5kKHRoaXMsIHJlYWRlcik7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG59XHJcbiIsIjxkaXYgW2Zvcm1Hcm91cF09XCJmb3JtXCIgY2xhc3M9XCJ6dGV4dGVkaXRvci1jb250YWluZXIgZTF0YWctc3R5bGVcIiBbc3R5bGVdPVwiY29tcG9uZW50UHJvcGVydGllcy5zdHlsZS5zdHlsZVwiPlxyXG4gIDxrZW5kby1lZGl0b3IgI2VkaXRvciBbaWRdPVwiZGF0YS5WYWx1ZVwiIFtmb3JtQ29udHJvbE5hbWVdPVwiZGF0YS5WYWx1ZVwiIGNsYXNzPVwiZTF0YWctc3R5bGUxXCJcclxuICAgICAgICAgICAgICAgIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLnN0eWxlLnN0eWxlMVwiIFtyZWFkb25seV09XCIoISFjb21wb25lbnRQcm9wZXJ0aWVzLmlzUmVhZE9ubHlGaWVsZCA/IGdyb3VwW2NvbXBvbmVudFByb3BlcnRpZXMuaXNSZWFkT25seUZpZWxkXSA6XHJcbiAgICBjb21wb25lbnRQcm9wZXJ0aWVzLmlzUmVhZE9ubHkpXCIgKHZhbHVlQ2hhbmdlKT1cIm9uQ2hhbmdlKCRldmVudClcIj5cclxuICAgIDxrZW5kby10b29sYmFyIFtzdHlsZS5kaXNwbGF5XT1cImRhdGEuVG9vbEJhclN0eWxlID09PSAnYmFzaWMnID8gJ2luaGVyaXQnIDogJ25vbmUnXCIgY2xhc3M9XCJlMXRhZy1zdHlsZTJcIlxyXG4gICAgICAgICAgICAgICAgICAgW3N0eWxlXT1cImNvbXBvbmVudFByb3BlcnRpZXMuc3R5bGUuc3R5bGUyXCI+XHJcbiAgICAgIDxrZW5kby10b29sYmFyLWJ1dHRvbmdyb3VwPlxyXG4gICAgICAgIDxrZW5kby10b29sYmFyLWJ1dHRvbiBrZW5kb0VkaXRvclVuZG9CdXR0b24+PC9rZW5kby10b29sYmFyLWJ1dHRvbj5cclxuICAgICAgICA8a2VuZG8tdG9vbGJhci1idXR0b24ga2VuZG9FZGl0b3JSZWRvQnV0dG9uPjwva2VuZG8tdG9vbGJhci1idXR0b24+XHJcbiAgICAgIDwva2VuZG8tdG9vbGJhci1idXR0b25ncm91cD5cclxuICAgICAgPGtlbmRvLXRvb2xiYXItYnV0dG9uZ3JvdXA+XHJcbiAgICAgICAgPGtlbmRvLXRvb2xiYXItYnV0dG9uIGtlbmRvRWRpdG9yQm9sZEJ1dHRvbj48L2tlbmRvLXRvb2xiYXItYnV0dG9uPlxyXG4gICAgICAgIDxrZW5kby10b29sYmFyLWJ1dHRvbiBrZW5kb0VkaXRvckl0YWxpY0J1dHRvbj48L2tlbmRvLXRvb2xiYXItYnV0dG9uPlxyXG4gICAgICAgIDxrZW5kby10b29sYmFyLWJ1dHRvbiBrZW5kb0VkaXRvclVuZGVybGluZUJ1dHRvbj48L2tlbmRvLXRvb2xiYXItYnV0dG9uPlxyXG4gICAgICAgIDxrZW5kby10b29sYmFyLWJ1dHRvbiBrZW5kb0VkaXRvclN0cmlrZXRocm91Z2hCdXR0b24+PC9rZW5kby10b29sYmFyLWJ1dHRvbj5cclxuICAgICAgPC9rZW5kby10b29sYmFyLWJ1dHRvbmdyb3VwPlxyXG4gICAgICA8a2VuZG8tdG9vbGJhci1idXR0b25ncm91cD5cclxuICAgICAgICA8a2VuZG8tdG9vbGJhci1idXR0b24ga2VuZG9FZGl0b3JTdWJzY3JpcHRCdXR0b24+PC9rZW5kby10b29sYmFyLWJ1dHRvbj5cclxuICAgICAgICA8a2VuZG8tdG9vbGJhci1idXR0b24ga2VuZG9FZGl0b3JTdXBlcnNjcmlwdEJ1dHRvbj48L2tlbmRvLXRvb2xiYXItYnV0dG9uPlxyXG4gICAgICA8L2tlbmRvLXRvb2xiYXItYnV0dG9uZ3JvdXA+XHJcbiAgICAgIDxrZW5kby10b29sYmFyLWJ1dHRvbmdyb3VwPlxyXG4gICAgICAgIDxrZW5kby10b29sYmFyLWJ1dHRvbiBrZW5kb0VkaXRvckFsaWduTGVmdEJ1dHRvbj48L2tlbmRvLXRvb2xiYXItYnV0dG9uPlxyXG4gICAgICAgIDxrZW5kby10b29sYmFyLWJ1dHRvbiBrZW5kb0VkaXRvckFsaWduQ2VudGVyQnV0dG9uPjwva2VuZG8tdG9vbGJhci1idXR0b24+XHJcbiAgICAgICAgPGtlbmRvLXRvb2xiYXItYnV0dG9uIGtlbmRvRWRpdG9yQWxpZ25SaWdodEJ1dHRvbj48L2tlbmRvLXRvb2xiYXItYnV0dG9uPlxyXG4gICAgICAgIDxrZW5kby10b29sYmFyLWJ1dHRvbiBrZW5kb0VkaXRvckFsaWduSnVzdGlmeUJ1dHRvbj48L2tlbmRvLXRvb2xiYXItYnV0dG9uPlxyXG4gICAgICA8L2tlbmRvLXRvb2xiYXItYnV0dG9uZ3JvdXA+XHJcbiAgICAgIDxrZW5kby10b29sYmFyLWRyb3Bkb3dubGlzdCBrZW5kb0VkaXRvckZvcm1hdD48L2tlbmRvLXRvb2xiYXItZHJvcGRvd25saXN0PlxyXG4gICAgICA8a2VuZG8tdG9vbGJhci1kcm9wZG93bmxpc3Qga2VuZG9FZGl0b3JGb250U2l6ZT48L2tlbmRvLXRvb2xiYXItZHJvcGRvd25saXN0PlxyXG4gICAgICA8a2VuZG8tdG9vbGJhci1kcm9wZG93bmxpc3Qga2VuZG9FZGl0b3JGb250RmFtaWx5Pjwva2VuZG8tdG9vbGJhci1kcm9wZG93bmxpc3Q+XHJcbiAgICAgIDxrZW5kby10b29sYmFyLWNvbG9ycGlja2VyIGtlbmRvRWRpdG9yRm9yZUNvbG9yPjwva2VuZG8tdG9vbGJhci1jb2xvcnBpY2tlcj5cclxuICAgICAgPGtlbmRvLXRvb2xiYXItY29sb3JwaWNrZXIga2VuZG9FZGl0b3JCYWNrQ29sb3I+PC9rZW5kby10b29sYmFyLWNvbG9ycGlja2VyPlxyXG4gICAgICA8a2VuZG8tdG9vbGJhci1idXR0b25ncm91cD5cclxuICAgICAgICA8a2VuZG8tdG9vbGJhci1idXR0b24ga2VuZG9FZGl0b3JJbnNlcnRVbm9yZGVyZWRMaXN0QnV0dG9uPjwva2VuZG8tdG9vbGJhci1idXR0b24+XHJcbiAgICAgICAgPGtlbmRvLXRvb2xiYXItYnV0dG9uIGtlbmRvRWRpdG9ySW5zZXJ0T3JkZXJlZExpc3RCdXR0b24+PC9rZW5kby10b29sYmFyLWJ1dHRvbj5cclxuICAgICAgICA8a2VuZG8tdG9vbGJhci1idXR0b24ga2VuZG9FZGl0b3JJbmRlbnRCdXR0b24+PC9rZW5kby10b29sYmFyLWJ1dHRvbj5cclxuICAgICAgICA8a2VuZG8tdG9vbGJhci1idXR0b24ga2VuZG9FZGl0b3JPdXRkZW50QnV0dG9uPjwva2VuZG8tdG9vbGJhci1idXR0b24+XHJcbiAgICAgIDwva2VuZG8tdG9vbGJhci1idXR0b25ncm91cD5cclxuICAgICAgPGtlbmRvLXRvb2xiYXItYnV0dG9uZ3JvdXA+XHJcbiAgICAgICAgPGtlbmRvLXRvb2xiYXItYnV0dG9uIGtlbmRvRWRpdG9yQ3JlYXRlTGlua0J1dHRvbj48L2tlbmRvLXRvb2xiYXItYnV0dG9uPlxyXG4gICAgICAgIDxrZW5kby10b29sYmFyLWJ1dHRvbiBrZW5kb0VkaXRvclVubGlua0J1dHRvbj48L2tlbmRvLXRvb2xiYXItYnV0dG9uPlxyXG4gICAgICA8L2tlbmRvLXRvb2xiYXItYnV0dG9uZ3JvdXA+XHJcbiAgICAgIDxrZW5kby1lZGl0b3ItaW5zZXJ0LXRhYmxlLWJ1dHRvbj48L2tlbmRvLWVkaXRvci1pbnNlcnQtdGFibGUtYnV0dG9uPlxyXG4gICAgICA8a2VuZG8tdG9vbGJhci1idXR0b25ncm91cD5cclxuICAgICAgICA8a2VuZG8tdG9vbGJhci1idXR0b24ga2VuZG9FZGl0b3JBZGRDb2x1bW5CZWZvcmVCdXR0b24+PC9rZW5kby10b29sYmFyLWJ1dHRvbj5cclxuICAgICAgICA8a2VuZG8tdG9vbGJhci1idXR0b24ga2VuZG9FZGl0b3JBZGRDb2x1bW5BZnRlckJ1dHRvbj48L2tlbmRvLXRvb2xiYXItYnV0dG9uPlxyXG4gICAgICAgIDxrZW5kby10b29sYmFyLWJ1dHRvbiBrZW5kb0VkaXRvckFkZFJvd0JlZm9yZUJ1dHRvbj48L2tlbmRvLXRvb2xiYXItYnV0dG9uPlxyXG4gICAgICAgIDxrZW5kby10b29sYmFyLWJ1dHRvbiBrZW5kb0VkaXRvckFkZFJvd0FmdGVyQnV0dG9uPjwva2VuZG8tdG9vbGJhci1idXR0b24+XHJcbiAgICAgIDwva2VuZG8tdG9vbGJhci1idXR0b25ncm91cD5cclxuICAgICAgPGtlbmRvLXRvb2xiYXItYnV0dG9uZ3JvdXA+XHJcbiAgICAgICAgPGtlbmRvLXRvb2xiYXItYnV0dG9uIGtlbmRvRWRpdG9yRGVsZXRlQ29sdW1uQnV0dG9uPjwva2VuZG8tdG9vbGJhci1idXR0b24+XHJcbiAgICAgICAgPGtlbmRvLXRvb2xiYXItYnV0dG9uIGtlbmRvRWRpdG9yRGVsZXRlUm93QnV0dG9uPjwva2VuZG8tdG9vbGJhci1idXR0b24+XHJcbiAgICAgICAgPGtlbmRvLXRvb2xiYXItYnV0dG9uIGtlbmRvRWRpdG9yRGVsZXRlVGFibGVCdXR0b24+PC9rZW5kby10b29sYmFyLWJ1dHRvbj5cclxuICAgICAgPC9rZW5kby10b29sYmFyLWJ1dHRvbmdyb3VwPlxyXG4gICAgICA8a2VuZG8tdG9vbGJhci1idXR0b24ga2VuZG9FZGl0b3JJbnNlcnRGaWxlQnV0dG9uPjwva2VuZG8tdG9vbGJhci1idXR0b24+XHJcbiAgICAgIDxrZW5kby10b29sYmFyLWJ1dHRvbiAqbmdJZj1cImRhdGEuVG9vbEJhclVwbG9hZEltYWdlTWV0aG9kID09ICdkZWZhdWx0J1wiIGtlbmRvRWRpdG9ySW5zZXJ0SW1hZ2VCdXR0b24+PC9rZW5kby10b29sYmFyLWJ1dHRvbj5cclxuICAgICAgPGtlbmRvLXRvb2xiYXItYnV0dG9uICpuZ0lmPVwiZGF0YS5Ub29sQmFyVXBsb2FkSW1hZ2VNZXRob2QgPT0gJ2V4cGxvcmVyJ1wiIGljb249XCJrLWktaW1hZ2Ugay1pLXBob3RvXCIgKGNsaWNrKT1cIm9wZW5GaWxlRXhwbG9yZXIoKVwiPjwva2VuZG8tdG9vbGJhci1idXR0b24+XHJcbiAgICAgIDxrZW5kby10b29sYmFyLWJ1dHRvbiBrZW5kb0VkaXRvclZpZXdTb3VyY2VCdXR0b24+PC9rZW5kby10b29sYmFyLWJ1dHRvbj5cclxuICAgIDwva2VuZG8tdG9vbGJhcj5cclxuICAgIDxrZW5kby10b29sYmFyIFtzdHlsZS5kaXNwbGF5XT1cImRhdGEuVG9vbEJhclN0eWxlID09PSAnZnVsbCcgPyAnaW5oZXJpdCcgOiAnbm9uZSdcIiBjbGFzcz1cImUxdGFnLXN0eWxlMlwiIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLnN0eWxlLnN0eWxlMlwiPlxyXG4gICAgICA8a2VuZG8tdG9vbGJhci1idXR0b25ncm91cD5cclxuICAgICAgICA8a2VuZG8tdG9vbGJhci1idXR0b24ga2VuZG9FZGl0b3JVbmRvQnV0dG9uPjwva2VuZG8tdG9vbGJhci1idXR0b24+XHJcbiAgICAgICAgPGtlbmRvLXRvb2xiYXItYnV0dG9uIGtlbmRvRWRpdG9yUmVkb0J1dHRvbj48L2tlbmRvLXRvb2xiYXItYnV0dG9uPlxyXG4gICAgICA8L2tlbmRvLXRvb2xiYXItYnV0dG9uZ3JvdXA+XHJcbiAgICAgIDxrZW5kby10b29sYmFyLWJ1dHRvbmdyb3VwPlxyXG4gICAgICAgIDxrZW5kby10b29sYmFyLWJ1dHRvbiBrZW5kb0VkaXRvckJvbGRCdXR0b24+PC9rZW5kby10b29sYmFyLWJ1dHRvbj5cclxuICAgICAgICA8a2VuZG8tdG9vbGJhci1idXR0b24ga2VuZG9FZGl0b3JJdGFsaWNCdXR0b24+PC9rZW5kby10b29sYmFyLWJ1dHRvbj5cclxuICAgICAgICA8a2VuZG8tdG9vbGJhci1idXR0b24ga2VuZG9FZGl0b3JVbmRlcmxpbmVCdXR0b24+PC9rZW5kby10b29sYmFyLWJ1dHRvbj5cclxuICAgICAgICA8a2VuZG8tdG9vbGJhci1idXR0b24ga2VuZG9FZGl0b3JTdHJpa2V0aHJvdWdoQnV0dG9uPjwva2VuZG8tdG9vbGJhci1idXR0b24+XHJcbiAgICAgIDwva2VuZG8tdG9vbGJhci1idXR0b25ncm91cD5cclxuICAgICAgPGtlbmRvLXRvb2xiYXItYnV0dG9uZ3JvdXA+XHJcbiAgICAgICAgPGtlbmRvLXRvb2xiYXItYnV0dG9uIGtlbmRvRWRpdG9yU3Vic2NyaXB0QnV0dG9uPjwva2VuZG8tdG9vbGJhci1idXR0b24+XHJcbiAgICAgICAgPGtlbmRvLXRvb2xiYXItYnV0dG9uIGtlbmRvRWRpdG9yU3VwZXJzY3JpcHRCdXR0b24+PC9rZW5kby10b29sYmFyLWJ1dHRvbj5cclxuICAgICAgPC9rZW5kby10b29sYmFyLWJ1dHRvbmdyb3VwPlxyXG4gICAgICA8a2VuZG8tdG9vbGJhci1idXR0b25ncm91cD5cclxuICAgICAgICA8a2VuZG8tdG9vbGJhci1idXR0b24ga2VuZG9FZGl0b3JBbGlnbkxlZnRCdXR0b24+PC9rZW5kby10b29sYmFyLWJ1dHRvbj5cclxuICAgICAgICA8a2VuZG8tdG9vbGJhci1idXR0b24ga2VuZG9FZGl0b3JBbGlnbkNlbnRlckJ1dHRvbj48L2tlbmRvLXRvb2xiYXItYnV0dG9uPlxyXG4gICAgICAgIDxrZW5kby10b29sYmFyLWJ1dHRvbiBrZW5kb0VkaXRvckFsaWduUmlnaHRCdXR0b24+PC9rZW5kby10b29sYmFyLWJ1dHRvbj5cclxuICAgICAgICA8a2VuZG8tdG9vbGJhci1idXR0b24ga2VuZG9FZGl0b3JBbGlnbkp1c3RpZnlCdXR0b24+PC9rZW5kby10b29sYmFyLWJ1dHRvbj5cclxuICAgICAgPC9rZW5kby10b29sYmFyLWJ1dHRvbmdyb3VwPlxyXG4gICAgICA8a2VuZG8tdG9vbGJhci1kcm9wZG93bmxpc3Qga2VuZG9FZGl0b3JGb250U2l6ZT48L2tlbmRvLXRvb2xiYXItZHJvcGRvd25saXN0PlxyXG4gICAgICA8a2VuZG8tdG9vbGJhci1kcm9wZG93bmxpc3Qga2VuZG9FZGl0b3JGb250RmFtaWx5Pjwva2VuZG8tdG9vbGJhci1kcm9wZG93bmxpc3Q+XHJcbiAgICAgIDxrZW5kby10b29sYmFyLWNvbG9ycGlja2VyIGtlbmRvRWRpdG9yRm9yZUNvbG9yIHZpZXc9XCJncmFkaWVudFwiPjwva2VuZG8tdG9vbGJhci1jb2xvcnBpY2tlcj5cclxuICAgICAgPGtlbmRvLXRvb2xiYXItY29sb3JwaWNrZXIga2VuZG9FZGl0b3JCYWNrQ29sb3Igdmlldz1cImdyYWRpZW50XCI+PC9rZW5kby10b29sYmFyLWNvbG9ycGlja2VyPlxyXG4gICAgICA8a2VuZG8tdG9vbGJhci1idXR0b25ncm91cD5cclxuICAgICAgICA8a2VuZG8tdG9vbGJhci1idXR0b24ga2VuZG9FZGl0b3JJbnNlcnRVbm9yZGVyZWRMaXN0QnV0dG9uPjwva2VuZG8tdG9vbGJhci1idXR0b24+XHJcbiAgICAgICAgPGtlbmRvLXRvb2xiYXItYnV0dG9uIGtlbmRvRWRpdG9ySW5zZXJ0T3JkZXJlZExpc3RCdXR0b24+PC9rZW5kby10b29sYmFyLWJ1dHRvbj5cclxuICAgICAgICA8a2VuZG8tdG9vbGJhci1idXR0b24ga2VuZG9FZGl0b3JJbmRlbnRCdXR0b24+PC9rZW5kby10b29sYmFyLWJ1dHRvbj5cclxuICAgICAgICA8a2VuZG8tdG9vbGJhci1idXR0b24ga2VuZG9FZGl0b3JPdXRkZW50QnV0dG9uPjwva2VuZG8tdG9vbGJhci1idXR0b24+XHJcbiAgICAgIDwva2VuZG8tdG9vbGJhci1idXR0b25ncm91cD5cclxuICAgICAgPGtlbmRvLXRvb2xiYXItYnV0dG9uZ3JvdXA+XHJcbiAgICAgICAgPGtlbmRvLXRvb2xiYXItYnV0dG9uIGtlbmRvRWRpdG9yQ3JlYXRlTGlua0J1dHRvbj48L2tlbmRvLXRvb2xiYXItYnV0dG9uPlxyXG4gICAgICAgIDxrZW5kby10b29sYmFyLWJ1dHRvbiBrZW5kb0VkaXRvclVubGlua0J1dHRvbj48L2tlbmRvLXRvb2xiYXItYnV0dG9uPlxyXG4gICAgICA8L2tlbmRvLXRvb2xiYXItYnV0dG9uZ3JvdXA+XHJcbiAgICAgIDxrZW5kby10b29sYmFyLWJ1dHRvbiAqbmdJZj1cImRhdGEuVG9vbEJhclVwbG9hZEltYWdlTWV0aG9kID09ICdkZWZhdWx0J1wiIGtlbmRvRWRpdG9ySW5zZXJ0SW1hZ2VCdXR0b24+PC9rZW5kby10b29sYmFyLWJ1dHRvbj5cclxuICAgICAgPGtlbmRvLXRvb2xiYXItYnV0dG9uICpuZ0lmPVwiZGF0YS5Ub29sQmFyVXBsb2FkSW1hZ2VNZXRob2QgPT0gJ2V4cGxvcmVyJ1wiIGljb249XCJrLWktaW1hZ2Ugay1pLXBob3RvXCIgKGNsaWNrKT1cIm9wZW5GaWxlRXhwbG9yZXIoKVwiPjwva2VuZG8tdG9vbGJhci1idXR0b24+XHJcbiAgICAgIDxrZW5kby10b29sYmFyLWJ1dHRvbiBrZW5kb0VkaXRvclZpZXdTb3VyY2VCdXR0b24+PC9rZW5kby10b29sYmFyLWJ1dHRvbj5cclxuICAgICAgPGtlbmRvLWVkaXRvci1pbnNlcnQtdGFibGUtYnV0dG9uPjwva2VuZG8tZWRpdG9yLWluc2VydC10YWJsZS1idXR0b24+XHJcbiAgICAgIDxrZW5kby10b29sYmFyLWJ1dHRvbmdyb3VwPlxyXG4gICAgICAgIDxrZW5kby10b29sYmFyLWJ1dHRvbiBrZW5kb0VkaXRvckFkZENvbHVtbkJlZm9yZUJ1dHRvbj48L2tlbmRvLXRvb2xiYXItYnV0dG9uPlxyXG4gICAgICAgIDxrZW5kby10b29sYmFyLWJ1dHRvbiBrZW5kb0VkaXRvckFkZENvbHVtbkFmdGVyQnV0dG9uPjwva2VuZG8tdG9vbGJhci1idXR0b24+XHJcbiAgICAgICAgPGtlbmRvLXRvb2xiYXItYnV0dG9uIGtlbmRvRWRpdG9yQWRkUm93QmVmb3JlQnV0dG9uPjwva2VuZG8tdG9vbGJhci1idXR0b24+XHJcbiAgICAgICAgPGtlbmRvLXRvb2xiYXItYnV0dG9uIGtlbmRvRWRpdG9yQWRkUm93QWZ0ZXJCdXR0b24+PC9rZW5kby10b29sYmFyLWJ1dHRvbj5cclxuICAgICAgPC9rZW5kby10b29sYmFyLWJ1dHRvbmdyb3VwPlxyXG4gICAgICA8a2VuZG8tdG9vbGJhci1idXR0b25ncm91cD5cclxuICAgICAgICA8a2VuZG8tdG9vbGJhci1idXR0b24ga2VuZG9FZGl0b3JEZWxldGVDb2x1bW5CdXR0b24+PC9rZW5kby10b29sYmFyLWJ1dHRvbj5cclxuICAgICAgICA8a2VuZG8tdG9vbGJhci1idXR0b24ga2VuZG9FZGl0b3JEZWxldGVSb3dCdXR0b24+PC9rZW5kby10b29sYmFyLWJ1dHRvbj5cclxuICAgICAgICA8a2VuZG8tdG9vbGJhci1idXR0b24ga2VuZG9FZGl0b3JEZWxldGVUYWJsZUJ1dHRvbj48L2tlbmRvLXRvb2xiYXItYnV0dG9uPlxyXG4gICAgICA8L2tlbmRvLXRvb2xiYXItYnV0dG9uZ3JvdXA+XHJcbiAgICAgIDxrZW5kby10b29sYmFyLWJ1dHRvbmdyb3VwPlxyXG4gICAgICAgIDxrZW5kby10b29sYmFyLWJ1dHRvbiBrZW5kb0VkaXRvck1lcmdlQ2VsbHNCdXR0b24+PC9rZW5kby10b29sYmFyLWJ1dHRvbj5cclxuICAgICAgICA8a2VuZG8tdG9vbGJhci1idXR0b24ga2VuZG9FZGl0b3JTcGxpdENlbGxCdXR0b24+PC9rZW5kby10b29sYmFyLWJ1dHRvbj5cclxuICAgICAgPC9rZW5kby10b29sYmFyLWJ1dHRvbmdyb3VwPlxyXG4gICAgPC9rZW5kby10b29sYmFyPlxyXG4gIDwva2VuZG8tZWRpdG9yPlxyXG4gIDxpbnB1dCBzdHlsZT1cImRpc3BsYXk6bm9uZTtcIiB0eXBlPVwiZmlsZVwiIFtpZF09XCJkYXRhLlZhbHVlICsnLXVwbG9hZC1maWxlJ1wiIFtuYW1lXT1cImRhdGEuVmFsdWUgKyctdXBsb2FkLWZpbGUnXCIgYWNjZXB0PVwiaW1hZ2UvKlwiIG5nZi1tYXgtc2l6ZT1cIjVNQlwiIChjaGFuZ2UpPVwidXBsb2FkSW1hZ2UoJGV2ZW50KVwiPlxyXG48L2Rpdj5cclxuIl19
83
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoienRleHRlZGl0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvenRleHRlZGl0b3IvenRleHRlZGl0b3IuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvenRleHRlZGl0b3IvenRleHRlZGl0b3IuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0JBQStCO0FBQy9CLE9BQU8sRUFBRSxTQUFTLEVBQWlCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQU9wRSwyQ0FBMkM7QUFDM0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBRXhFLE9BQU8sRUFBYyxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7Ozs7O0FBUy9ELE1BQU0sT0FBTyxvQkFBcUIsU0FBUSxjQUFjO0lBUXRELFlBQ1MsZ0JBQW1DO1FBRTFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBRmpCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBbUI7UUFQckMseUJBQW9CLEdBQUc7WUFDNUIsZUFBZSxFQUFFLElBQUk7WUFDckIsY0FBYyxFQUFFLElBQUk7WUFDcEIsaUJBQWlCLEVBQUUsSUFBSTtTQUN4QixDQUFDO0lBTUYsQ0FBQztJQUVELFFBQVE7UUFDTixLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLHdCQUF3QixJQUFJLFVBQVUsQ0FBQyxDQUFDLGlCQUFpQjtRQUN4RyxJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQztRQUNqQyxLQUFLLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLENBQUMsZ0JBQWdCLENBQUMsaUNBQWlDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3JFLENBQUM7SUFFTSxRQUFRLENBQUMsS0FBVTtRQUN4QixnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVFLElBQUksQ0FBQyxZQUFZLENBQUMscUJBQXFCLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDdEUsQ0FBQztJQUVNLEtBQUs7UUFDVixJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDZixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ3BCLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFTyx5QkFBeUI7UUFDL0IsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNyQixJQUFJLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksUUFBUSxFQUFFO2dCQUN4QyxNQUFNLE1BQU0sR0FBRyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUM3RSxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxNQUFNLENBQUMsQ0FBQzthQUNsRDtpQkFDSSxJQUFJLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksUUFBUSxFQUFFO2dCQUM3QyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2FBQzdEO1NBQ0Y7SUFDSCxDQUFDO0lBRUQsOEJBQThCO0lBQ3ZCLGdCQUFnQjtRQUNyQixNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLGNBQWMsQ0FBQyxDQUFDO1FBQ3hFLElBQUksS0FBSyxFQUFFO1lBQ1QsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO1NBQ2Y7SUFDSCxDQUFDO0lBRU0sV0FBVyxDQUFDLFNBQWM7UUFDL0IsTUFBTSxhQUFhLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEQsSUFBSSxhQUFhLEVBQUU7WUFDakIsSUFBSSxDQUFDLHFCQUFxQixDQUFDLGFBQWEsQ0FBQyxDQUFDO1NBQzNDO0lBQ0gsQ0FBQztJQUVPLHFCQUFxQixDQUFDLElBQUk7UUFDaEMsSUFBSSxNQUFNLEdBQUcsSUFBSSxVQUFVLEVBQUUsQ0FBQztRQUM5QixNQUFNLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzNCLE1BQU0sQ0FBQyxNQUFNLEdBQUc7WUFDZCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRSxHQUFHLEVBQUUsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDMUQsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDdkIsQ0FBQzs7aUhBdkVVLG9CQUFvQjtxR0FBcEIsb0JBQW9CLGdMQ3BCakMsZytRQXFIQTsyRkRqR2Esb0JBQW9CO2tCQU5oQyxTQUFTOytCQUNFLGlCQUFpQjt3R0FNQyxNQUFNO3NCQUFqQyxTQUFTO3VCQUFDLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyIvKioqKioqKioqKiBBbmd1bGFyICoqKioqKioqKiovXHJcbmltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG4vKioqKioqKioqKiBJb25pYyAqKioqKioqKioqL1xyXG5cclxuLyoqKioqKioqKiogUGx1Z2luICoqKioqKioqKiovXHJcbmltcG9ydCB7IEVkaXRvckNvbXBvbmVudCB9IGZyb20gJ0Bwcm9ncmVzcy9rZW5kby1hbmd1bGFyLWVkaXRvcic7XHJcblxyXG4vKioqKioqKioqKiBDb21wb25lbnQgJiBTZXJ2aWNlICoqKioqKioqKiovXHJcbmltcG9ydCB7IElucHV0RmllbGRCYXNlIH0gZnJvbSAnLi4vY29tcG9uZW50cy9pbnB1dGZpZWxkYmFzZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBaQ29tcG9uZW50U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3pjb21wb25lbnQuc2VydmljZSc7XHJcbmltcG9ydCB7IFpDb21wb25lbnQsIFpDb21wb25lbnRIZWxwZXIgfSBmcm9tICdtbWhnbG9iYWwtemNvcmUnO1xyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLXp0ZXh0ZWRpdG9yJyxcclxuICB0ZW1wbGF0ZVVybDogJy4venRleHRlZGl0b3IuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3p0ZXh0ZWRpdG9yLmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcblxyXG5leHBvcnQgY2xhc3MgWnRleHRlZGl0b3JDb21wb25lbnQgZXh0ZW5kcyBJbnB1dEZpZWxkQmFzZSBpbXBsZW1lbnRzIFpDb21wb25lbnQsIE9uSW5pdCB7XHJcbiAgQFZpZXdDaGlsZCgnZWRpdG9yJykgcHVibGljIGVkaXRvcjogRWRpdG9yQ29tcG9uZW50O1xyXG4gIHB1YmxpYyBwYXN0ZUNsZWFudXBTZXR0aW5ncyA9IHtcclxuICAgIHJlbW92ZU1zQ2xhc3NlczogdHJ1ZSxcclxuICAgIHJlbW92ZU1zU3R5bGVzOiB0cnVlLFxyXG4gICAgcmVtb3ZlSW52YWxpZEhUTUw6IHRydWUsXHJcbiAgfTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgY29tcG9uZW50U2VydmljZTogWkNvbXBvbmVudFNlcnZpY2VcclxuICApIHtcclxuICAgIHN1cGVyKGNvbXBvbmVudFNlcnZpY2UpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICBzdXBlci5zZXR1cElubmVyRmllbGQoKTtcclxuICAgIHRoaXMuZGF0YS5Ub29sQmFyVXBsb2FkSW1hZ2VNZXRob2QgPSB0aGlzLmRhdGEuVG9vbEJhclVwbG9hZEltYWdlTWV0aG9kIHx8ICdleHBsb3Jlcic7IC8vICB8fCAnZGVmYXVsdCc7XHJcbiAgICB0aGlzLnNldHVwUGFzdGVDbGVhbnVwU2V0dGluZ3MoKTtcclxuICAgIHN1cGVyLmZvY3VzT25EZWZhdWx0KHRoaXMuZm9jdXMuYmluZCh0aGlzKSk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICB0aGlzLmNvbXBvbmVudFNlcnZpY2UuZGVjcmVtZW50Q29tcG9uZW50Q291bnRlckZvckZpZWxkKHRoaXMuZGF0YSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25DaGFuZ2UodmFsdWU6IGFueSkge1xyXG4gICAgWkNvbXBvbmVudEhlbHBlci5zZXRUb1pNb2RlbCh0aGlzLmRhdGEuVmFsdWUsIHZhbHVlLCB0aGlzLmdyb3VwLCB0aGlzLmRhdGEpO1xyXG4gICAgdGhpcy50cmlnZ2VyRXZlbnQoXCJpbnB1dGZpZWxkLW9uQ2hhbmdlXCIsIHRoaXMuZGF0YS5PbkNoYW5nZSwgdmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGZvY3VzKCkge1xyXG4gICAgaWYgKHRoaXMuZWRpdG9yKSB7XHJcbiAgICAgIHRoaXMuZWRpdG9yLmZvY3VzKCk7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXR1cFBhc3RlQ2xlYW51cFNldHRpbmdzKCkge1xyXG4gICAgaWYgKHRoaXMuZGF0YS5PcHRpb25zKSB7XHJcbiAgICAgIGlmICh0eXBlb2YgdGhpcy5kYXRhLk9wdGlvbnMgPT0gJ3N0cmluZycpIHtcclxuICAgICAgICBjb25zdCBvcHRpb24gPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwVmFsdWUodGhpcy5kYXRhLk9wdGlvbnMsIHRoaXMuZ3JvdXApO1xyXG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5wYXN0ZUNsZWFudXBTZXR0aW5ncywgb3B0aW9uKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh0eXBlb2YgdGhpcy5kYXRhLk9wdGlvbnMgPT0gJ29iamVjdCcpIHtcclxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMucGFzdGVDbGVhbnVwU2V0dGluZ3MsIHRoaXMuZGF0YS5PcHRpb25zKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gI3JlZ2lvbiBDdXN0b20gSW1hZ2UgVXBsb2FkXHJcbiAgcHVibGljIG9wZW5GaWxlRXhwbG9yZXIoKSB7XHJcbiAgICBjb25zdCBpbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGAke3RoaXMuZGF0YS5WYWx1ZX0tdXBsb2FkLWZpbGVgKTtcclxuICAgIGlmIChpbnB1dCkge1xyXG4gICAgICBpbnB1dC5jbGljaygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHVwbG9hZEltYWdlKGZpbGVJbnB1dDogYW55KSB7XHJcbiAgICBjb25zdCB1cGxvYWRlZEltYWdlID0gZmlsZUlucHV0LnRhcmdldC5maWxlc1swXTtcclxuICAgIGlmICh1cGxvYWRlZEltYWdlKSB7XHJcbiAgICAgIHRoaXMuaW5zZXJ0SW1hZ2VJbnRvRWRpdG9yKHVwbG9hZGVkSW1hZ2UpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbnNlcnRJbWFnZUludG9FZGl0b3IoZmlsZSkge1xyXG4gICAgdmFyIHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcbiAgICByZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlKTtcclxuICAgIHJlYWRlci5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHRoaXMuZWRpdG9yLmV4ZWMoXCJpbnNlcnRJbWFnZVwiLCB7IHNyYzogcmVhZGVyLnJlc3VsdCB9KTtcclxuICAgIH0uYmluZCh0aGlzLCByZWFkZXIpO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxufVxyXG4iLCI8ZGl2IFtmb3JtR3JvdXBdPVwiZm9ybVwiIGNsYXNzPVwienRleHRlZGl0b3ItY29udGFpbmVyIGUxdGFnLXN0eWxlXCIgW3N0eWxlXT1cImNvbXBvbmVudFByb3BlcnRpZXMuc3R5bGUuc3R5bGVcIj5cclxuICA8a2VuZG8tZWRpdG9yICNlZGl0b3IgW2lkXT1cImRhdGEuVmFsdWVcIiBbZm9ybUNvbnRyb2xOYW1lXT1cImRhdGEuVmFsdWVcIiBjbGFzcz1cImUxdGFnLXN0eWxlMVwiXHJcbiAgICAgICAgICAgICAgICBbc3R5bGVdPVwiY29tcG9uZW50UHJvcGVydGllcy5zdHlsZS5zdHlsZTFcIiBbcmVhZG9ubHldPVwiKCEhY29tcG9uZW50UHJvcGVydGllcy5pc1JlYWRPbmx5RmllbGQgPyBncm91cFtjb21wb25lbnRQcm9wZXJ0aWVzLmlzUmVhZE9ubHlGaWVsZF0gOlxyXG4gICAgY29tcG9uZW50UHJvcGVydGllcy5pc1JlYWRPbmx5KVwiICh2YWx1ZUNoYW5nZSk9XCJvbkNoYW5nZSgkZXZlbnQpXCJcclxuICAgIFtwYXN0ZUNsZWFudXBTZXR0aW5nc109XCJwYXN0ZUNsZWFudXBTZXR0aW5nc1wiPlxyXG4gICAgPGtlbmRvLXRvb2xiYXIgW3N0eWxlLmRpc3BsYXldPVwiZGF0YS5Ub29sQmFyU3R5bGUgPT09ICdiYXNpYycgPyAnaW5oZXJpdCcgOiAnbm9uZSdcIiBjbGFzcz1cImUxdGFnLXN0eWxlMlwiXHJcbiAgICAgICAgICAgICAgICAgICBbc3R5bGVdPVwiY29tcG9uZW50UHJvcGVydGllcy5zdHlsZS5zdHlsZTJcIj5cclxuICAgICAgPGtlbmRvLXRvb2xiYXItYnV0dG9uZ3JvdXA+XHJcbiAgICAgICAgPGtlbmRvLXRvb2xiYXItYnV0dG9uIGtlbmRvRWRpdG9yVW5kb0J1dHRvbj48L2tlbmRvLXRvb2xiYXItYnV0dG9uPlxyXG4gICAgICAgIDxrZW5kby10b29sYmFyLWJ1dHRvbiBrZW5kb0VkaXRvclJlZG9CdXR0b24+PC9rZW5kby10b29sYmFyLWJ1dHRvbj5cclxuICAgICAgPC9rZW5kby10b29sYmFyLWJ1dHRvbmdyb3VwPlxyXG4gICAgICA8a2VuZG8tdG9vbGJhci1idXR0b25ncm91cD5cclxuICAgICAgICA8a2VuZG8tdG9vbGJhci1idXR0b24ga2VuZG9FZGl0b3JCb2xkQnV0dG9uPjwva2VuZG8tdG9vbGJhci1idXR0b24+XHJcbiAgICAgICAgPGtlbmRvLXRvb2xiYXItYnV0dG9uIGtlbmRvRWRpdG9ySXRhbGljQnV0dG9uPjwva2VuZG8tdG9vbGJhci1idXR0b24+XHJcbiAgICAgICAgPGtlbmRvLXRvb2xiYXItYnV0dG9uIGtlbmRvRWRpdG9yVW5kZXJsaW5lQnV0dG9uPjwva2VuZG8tdG9vbGJhci1idXR0b24+XHJcbiAgICAgICAgPGtlbmRvLXRvb2xiYXItYnV0dG9uIGtlbmRvRWRpdG9yU3RyaWtldGhyb3VnaEJ1dHRvbj48L2tlbmRvLXRvb2xiYXItYnV0dG9uPlxyXG4gICAgICA8L2tlbmRvLXRvb2xiYXItYnV0dG9uZ3JvdXA+XHJcbiAgICAgIDxrZW5kby10b29sYmFyLWJ1dHRvbmdyb3VwPlxyXG4gICAgICAgIDxrZW5kby10b29sYmFyLWJ1dHRvbiBrZW5kb0VkaXRvclN1YnNjcmlwdEJ1dHRvbj48L2tlbmRvLXRvb2xiYXItYnV0dG9uPlxyXG4gICAgICAgIDxrZW5kby10b29sYmFyLWJ1dHRvbiBrZW5kb0VkaXRvclN1cGVyc2NyaXB0QnV0dG9uPjwva2VuZG8tdG9vbGJhci1idXR0b24+XHJcbiAgICAgIDwva2VuZG8tdG9vbGJhci1idXR0b25ncm91cD5cclxuICAgICAgPGtlbmRvLXRvb2xiYXItYnV0dG9uZ3JvdXA+XHJcbiAgICAgICAgPGtlbmRvLXRvb2xiYXItYnV0dG9uIGtlbmRvRWRpdG9yQWxpZ25MZWZ0QnV0dG9uPjwva2VuZG8tdG9vbGJhci1idXR0b24+XHJcbiAgICAgICAgPGtlbmRvLXRvb2xiYXItYnV0dG9uIGtlbmRvRWRpdG9yQWxpZ25DZW50ZXJCdXR0b24+PC9rZW5kby10b29sYmFyLWJ1dHRvbj5cclxuICAgICAgICA8a2VuZG8tdG9vbGJhci1idXR0b24ga2VuZG9FZGl0b3JBbGlnblJpZ2h0QnV0dG9uPjwva2VuZG8tdG9vbGJhci1idXR0b24+XHJcbiAgICAgICAgPGtlbmRvLXRvb2xiYXItYnV0dG9uIGtlbmRvRWRpdG9yQWxpZ25KdXN0aWZ5QnV0dG9uPjwva2VuZG8tdG9vbGJhci1idXR0b24+XHJcbiAgICAgIDwva2VuZG8tdG9vbGJhci1idXR0b25ncm91cD5cclxuICAgICAgPGtlbmRvLXRvb2xiYXItZHJvcGRvd25saXN0IGtlbmRvRWRpdG9yRm9ybWF0Pjwva2VuZG8tdG9vbGJhci1kcm9wZG93bmxpc3Q+XHJcbiAgICAgIDxrZW5kby10b29sYmFyLWRyb3Bkb3dubGlzdCBrZW5kb0VkaXRvckZvbnRTaXplPjwva2VuZG8tdG9vbGJhci1kcm9wZG93bmxpc3Q+XHJcbiAgICAgIDxrZW5kby10b29sYmFyLWRyb3Bkb3dubGlzdCBrZW5kb0VkaXRvckZvbnRGYW1pbHk+PC9rZW5kby10b29sYmFyLWRyb3Bkb3dubGlzdD5cclxuICAgICAgPGtlbmRvLXRvb2xiYXItY29sb3JwaWNrZXIga2VuZG9FZGl0b3JGb3JlQ29sb3I+PC9rZW5kby10b29sYmFyLWNvbG9ycGlja2VyPlxyXG4gICAgICA8a2VuZG8tdG9vbGJhci1jb2xvcnBpY2tlciBrZW5kb0VkaXRvckJhY2tDb2xvcj48L2tlbmRvLXRvb2xiYXItY29sb3JwaWNrZXI+XHJcbiAgICAgIDxrZW5kby10b29sYmFyLWJ1dHRvbmdyb3VwPlxyXG4gICAgICAgIDxrZW5kby10b29sYmFyLWJ1dHRvbiBrZW5kb0VkaXRvckluc2VydFVub3JkZXJlZExpc3RCdXR0b24+PC9rZW5kby10b29sYmFyLWJ1dHRvbj5cclxuICAgICAgICA8a2VuZG8tdG9vbGJhci1idXR0b24ga2VuZG9FZGl0b3JJbnNlcnRPcmRlcmVkTGlzdEJ1dHRvbj48L2tlbmRvLXRvb2xiYXItYnV0dG9uPlxyXG4gICAgICAgIDxrZW5kby10b29sYmFyLWJ1dHRvbiBrZW5kb0VkaXRvckluZGVudEJ1dHRvbj48L2tlbmRvLXRvb2xiYXItYnV0dG9uPlxyXG4gICAgICAgIDxrZW5kby10b29sYmFyLWJ1dHRvbiBrZW5kb0VkaXRvck91dGRlbnRCdXR0b24+PC9rZW5kby10b29sYmFyLWJ1dHRvbj5cclxuICAgICAgPC9rZW5kby10b29sYmFyLWJ1dHRvbmdyb3VwPlxyXG4gICAgICA8a2VuZG8tdG9vbGJhci1idXR0b25ncm91cD5cclxuICAgICAgICA8a2VuZG8tdG9vbGJhci1idXR0b24ga2VuZG9FZGl0b3JDcmVhdGVMaW5rQnV0dG9uPjwva2VuZG8tdG9vbGJhci1idXR0b24+XHJcbiAgICAgICAgPGtlbmRvLXRvb2xiYXItYnV0dG9uIGtlbmRvRWRpdG9yVW5saW5rQnV0dG9uPjwva2VuZG8tdG9vbGJhci1idXR0b24+XHJcbiAgICAgIDwva2VuZG8tdG9vbGJhci1idXR0b25ncm91cD5cclxuICAgICAgPGtlbmRvLWVkaXRvci1pbnNlcnQtdGFibGUtYnV0dG9uPjwva2VuZG8tZWRpdG9yLWluc2VydC10YWJsZS1idXR0b24+XHJcbiAgICAgIDxrZW5kby10b29sYmFyLWJ1dHRvbmdyb3VwPlxyXG4gICAgICAgIDxrZW5kby10b29sYmFyLWJ1dHRvbiBrZW5kb0VkaXRvckFkZENvbHVtbkJlZm9yZUJ1dHRvbj48L2tlbmRvLXRvb2xiYXItYnV0dG9uPlxyXG4gICAgICAgIDxrZW5kby10b29sYmFyLWJ1dHRvbiBrZW5kb0VkaXRvckFkZENvbHVtbkFmdGVyQnV0dG9uPjwva2VuZG8tdG9vbGJhci1idXR0b24+XHJcbiAgICAgICAgPGtlbmRvLXRvb2xiYXItYnV0dG9uIGtlbmRvRWRpdG9yQWRkUm93QmVmb3JlQnV0dG9uPjwva2VuZG8tdG9vbGJhci1idXR0b24+XHJcbiAgICAgICAgPGtlbmRvLXRvb2xiYXItYnV0dG9uIGtlbmRvRWRpdG9yQWRkUm93QWZ0ZXJCdXR0b24+PC9rZW5kby10b29sYmFyLWJ1dHRvbj5cclxuICAgICAgPC9rZW5kby10b29sYmFyLWJ1dHRvbmdyb3VwPlxyXG4gICAgICA8a2VuZG8tdG9vbGJhci1idXR0b25ncm91cD5cclxuICAgICAgICA8a2VuZG8tdG9vbGJhci1idXR0b24ga2VuZG9FZGl0b3JEZWxldGVDb2x1bW5CdXR0b24+PC9rZW5kby10b29sYmFyLWJ1dHRvbj5cclxuICAgICAgICA8a2VuZG8tdG9vbGJhci1idXR0b24ga2VuZG9FZGl0b3JEZWxldGVSb3dCdXR0b24+PC9rZW5kby10b29sYmFyLWJ1dHRvbj5cclxuICAgICAgICA8a2VuZG8tdG9vbGJhci1idXR0b24ga2VuZG9FZGl0b3JEZWxldGVUYWJsZUJ1dHRvbj48L2tlbmRvLXRvb2xiYXItYnV0dG9uPlxyXG4gICAgICA8L2tlbmRvLXRvb2xiYXItYnV0dG9uZ3JvdXA+XHJcbiAgICAgIDxrZW5kby10b29sYmFyLWJ1dHRvbiBrZW5kb0VkaXRvckluc2VydEZpbGVCdXR0b24+PC9rZW5kby10b29sYmFyLWJ1dHRvbj5cclxuICAgICAgPGtlbmRvLXRvb2xiYXItYnV0dG9uICpuZ0lmPVwiZGF0YS5Ub29sQmFyVXBsb2FkSW1hZ2VNZXRob2QgPT0gJ2RlZmF1bHQnXCIga2VuZG9FZGl0b3JJbnNlcnRJbWFnZUJ1dHRvbj48L2tlbmRvLXRvb2xiYXItYnV0dG9uPlxyXG4gICAgICA8a2VuZG8tdG9vbGJhci1idXR0b24gKm5nSWY9XCJkYXRhLlRvb2xCYXJVcGxvYWRJbWFnZU1ldGhvZCA9PSAnZXhwbG9yZXInXCIgaWNvbj1cImstaS1pbWFnZSBrLWktcGhvdG9cIiAoY2xpY2spPVwib3BlbkZpbGVFeHBsb3JlcigpXCI+PC9rZW5kby10b29sYmFyLWJ1dHRvbj5cclxuICAgICAgPGtlbmRvLXRvb2xiYXItYnV0dG9uIGtlbmRvRWRpdG9yVmlld1NvdXJjZUJ1dHRvbj48L2tlbmRvLXRvb2xiYXItYnV0dG9uPlxyXG4gICAgPC9rZW5kby10b29sYmFyPlxyXG4gICAgPGtlbmRvLXRvb2xiYXIgW3N0eWxlLmRpc3BsYXldPVwiZGF0YS5Ub29sQmFyU3R5bGUgPT09ICdmdWxsJyA/ICdpbmhlcml0JyA6ICdub25lJ1wiIGNsYXNzPVwiZTF0YWctc3R5bGUyXCIgW3N0eWxlXT1cImNvbXBvbmVudFByb3BlcnRpZXMuc3R5bGUuc3R5bGUyXCI+XHJcbiAgICAgIDxrZW5kby10b29sYmFyLWJ1dHRvbmdyb3VwPlxyXG4gICAgICAgIDxrZW5kby10b29sYmFyLWJ1dHRvbiBrZW5kb0VkaXRvclVuZG9CdXR0b24+PC9rZW5kby10b29sYmFyLWJ1dHRvbj5cclxuICAgICAgICA8a2VuZG8tdG9vbGJhci1idXR0b24ga2VuZG9FZGl0b3JSZWRvQnV0dG9uPjwva2VuZG8tdG9vbGJhci1idXR0b24+XHJcbiAgICAgIDwva2VuZG8tdG9vbGJhci1idXR0b25ncm91cD5cclxuICAgICAgPGtlbmRvLXRvb2xiYXItYnV0dG9uZ3JvdXA+XHJcbiAgICAgICAgPGtlbmRvLXRvb2xiYXItYnV0dG9uIGtlbmRvRWRpdG9yQm9sZEJ1dHRvbj48L2tlbmRvLXRvb2xiYXItYnV0dG9uPlxyXG4gICAgICAgIDxrZW5kby10b29sYmFyLWJ1dHRvbiBrZW5kb0VkaXRvckl0YWxpY0J1dHRvbj48L2tlbmRvLXRvb2xiYXItYnV0dG9uPlxyXG4gICAgICAgIDxrZW5kby10b29sYmFyLWJ1dHRvbiBrZW5kb0VkaXRvclVuZGVybGluZUJ1dHRvbj48L2tlbmRvLXRvb2xiYXItYnV0dG9uPlxyXG4gICAgICAgIDxrZW5kby10b29sYmFyLWJ1dHRvbiBrZW5kb0VkaXRvclN0cmlrZXRocm91Z2hCdXR0b24+PC9rZW5kby10b29sYmFyLWJ1dHRvbj5cclxuICAgICAgPC9rZW5kby10b29sYmFyLWJ1dHRvbmdyb3VwPlxyXG4gICAgICA8a2VuZG8tdG9vbGJhci1idXR0b25ncm91cD5cclxuICAgICAgICA8a2VuZG8tdG9vbGJhci1idXR0b24ga2VuZG9FZGl0b3JTdWJzY3JpcHRCdXR0b24+PC9rZW5kby10b29sYmFyLWJ1dHRvbj5cclxuICAgICAgICA8a2VuZG8tdG9vbGJhci1idXR0b24ga2VuZG9FZGl0b3JTdXBlcnNjcmlwdEJ1dHRvbj48L2tlbmRvLXRvb2xiYXItYnV0dG9uPlxyXG4gICAgICA8L2tlbmRvLXRvb2xiYXItYnV0dG9uZ3JvdXA+XHJcbiAgICAgIDxrZW5kby10b29sYmFyLWJ1dHRvbmdyb3VwPlxyXG4gICAgICAgIDxrZW5kby10b29sYmFyLWJ1dHRvbiBrZW5kb0VkaXRvckFsaWduTGVmdEJ1dHRvbj48L2tlbmRvLXRvb2xiYXItYnV0dG9uPlxyXG4gICAgICAgIDxrZW5kby10b29sYmFyLWJ1dHRvbiBrZW5kb0VkaXRvckFsaWduQ2VudGVyQnV0dG9uPjwva2VuZG8tdG9vbGJhci1idXR0b24+XHJcbiAgICAgICAgPGtlbmRvLXRvb2xiYXItYnV0dG9uIGtlbmRvRWRpdG9yQWxpZ25SaWdodEJ1dHRvbj48L2tlbmRvLXRvb2xiYXItYnV0dG9uPlxyXG4gICAgICAgIDxrZW5kby10b29sYmFyLWJ1dHRvbiBrZW5kb0VkaXRvckFsaWduSnVzdGlmeUJ1dHRvbj48L2tlbmRvLXRvb2xiYXItYnV0dG9uPlxyXG4gICAgICA8L2tlbmRvLXRvb2xiYXItYnV0dG9uZ3JvdXA+XHJcbiAgICAgIDxrZW5kby10b29sYmFyLWRyb3Bkb3dubGlzdCBrZW5kb0VkaXRvckZvbnRTaXplPjwva2VuZG8tdG9vbGJhci1kcm9wZG93bmxpc3Q+XHJcbiAgICAgIDxrZW5kby10b29sYmFyLWRyb3Bkb3dubGlzdCBrZW5kb0VkaXRvckZvbnRGYW1pbHk+PC9rZW5kby10b29sYmFyLWRyb3Bkb3dubGlzdD5cclxuICAgICAgPGtlbmRvLXRvb2xiYXItY29sb3JwaWNrZXIga2VuZG9FZGl0b3JGb3JlQ29sb3Igdmlldz1cImdyYWRpZW50XCI+PC9rZW5kby10b29sYmFyLWNvbG9ycGlja2VyPlxyXG4gICAgICA8a2VuZG8tdG9vbGJhci1jb2xvcnBpY2tlciBrZW5kb0VkaXRvckJhY2tDb2xvciB2aWV3PVwiZ3JhZGllbnRcIj48L2tlbmRvLXRvb2xiYXItY29sb3JwaWNrZXI+XHJcbiAgICAgIDxrZW5kby10b29sYmFyLWJ1dHRvbmdyb3VwPlxyXG4gICAgICAgIDxrZW5kby10b29sYmFyLWJ1dHRvbiBrZW5kb0VkaXRvckluc2VydFVub3JkZXJlZExpc3RCdXR0b24+PC9rZW5kby10b29sYmFyLWJ1dHRvbj5cclxuICAgICAgICA8a2VuZG8tdG9vbGJhci1idXR0b24ga2VuZG9FZGl0b3JJbnNlcnRPcmRlcmVkTGlzdEJ1dHRvbj48L2tlbmRvLXRvb2xiYXItYnV0dG9uPlxyXG4gICAgICAgIDxrZW5kby10b29sYmFyLWJ1dHRvbiBrZW5kb0VkaXRvckluZGVudEJ1dHRvbj48L2tlbmRvLXRvb2xiYXItYnV0dG9uPlxyXG4gICAgICAgIDxrZW5kby10b29sYmFyLWJ1dHRvbiBrZW5kb0VkaXRvck91dGRlbnRCdXR0b24+PC9rZW5kby10b29sYmFyLWJ1dHRvbj5cclxuICAgICAgPC9rZW5kby10b29sYmFyLWJ1dHRvbmdyb3VwPlxyXG4gICAgICA8a2VuZG8tdG9vbGJhci1idXR0b25ncm91cD5cclxuICAgICAgICA8a2VuZG8tdG9vbGJhci1idXR0b24ga2VuZG9FZGl0b3JDcmVhdGVMaW5rQnV0dG9uPjwva2VuZG8tdG9vbGJhci1idXR0b24+XHJcbiAgICAgICAgPGtlbmRvLXRvb2xiYXItYnV0dG9uIGtlbmRvRWRpdG9yVW5saW5rQnV0dG9uPjwva2VuZG8tdG9vbGJhci1idXR0b24+XHJcbiAgICAgIDwva2VuZG8tdG9vbGJhci1idXR0b25ncm91cD5cclxuICAgICAgPGtlbmRvLXRvb2xiYXItYnV0dG9uICpuZ0lmPVwiZGF0YS5Ub29sQmFyVXBsb2FkSW1hZ2VNZXRob2QgPT0gJ2RlZmF1bHQnXCIga2VuZG9FZGl0b3JJbnNlcnRJbWFnZUJ1dHRvbj48L2tlbmRvLXRvb2xiYXItYnV0dG9uPlxyXG4gICAgICA8a2VuZG8tdG9vbGJhci1idXR0b24gKm5nSWY9XCJkYXRhLlRvb2xCYXJVcGxvYWRJbWFnZU1ldGhvZCA9PSAnZXhwbG9yZXInXCIgaWNvbj1cImstaS1pbWFnZSBrLWktcGhvdG9cIiAoY2xpY2spPVwib3BlbkZpbGVFeHBsb3JlcigpXCI+PC9rZW5kby10b29sYmFyLWJ1dHRvbj5cclxuICAgICAgPGtlbmRvLXRvb2xiYXItYnV0dG9uIGtlbmRvRWRpdG9yVmlld1NvdXJjZUJ1dHRvbj48L2tlbmRvLXRvb2xiYXItYnV0dG9uPlxyXG4gICAgICA8a2VuZG8tZWRpdG9yLWluc2VydC10YWJsZS1idXR0b24+PC9rZW5kby1lZGl0b3ItaW5zZXJ0LXRhYmxlLWJ1dHRvbj5cclxuICAgICAgPGtlbmRvLXRvb2xiYXItYnV0dG9uZ3JvdXA+XHJcbiAgICAgICAgPGtlbmRvLXRvb2xiYXItYnV0dG9uIGtlbmRvRWRpdG9yQWRkQ29sdW1uQmVmb3JlQnV0dG9uPjwva2VuZG8tdG9vbGJhci1idXR0b24+XHJcbiAgICAgICAgPGtlbmRvLXRvb2xiYXItYnV0dG9uIGtlbmRvRWRpdG9yQWRkQ29sdW1uQWZ0ZXJCdXR0b24+PC9rZW5kby10b29sYmFyLWJ1dHRvbj5cclxuICAgICAgICA8a2VuZG8tdG9vbGJhci1idXR0b24ga2VuZG9FZGl0b3JBZGRSb3dCZWZvcmVCdXR0b24+PC9rZW5kby10b29sYmFyLWJ1dHRvbj5cclxuICAgICAgICA8a2VuZG8tdG9vbGJhci1idXR0b24ga2VuZG9FZGl0b3JBZGRSb3dBZnRlckJ1dHRvbj48L2tlbmRvLXRvb2xiYXItYnV0dG9uPlxyXG4gICAgICA8L2tlbmRvLXRvb2xiYXItYnV0dG9uZ3JvdXA+XHJcbiAgICAgIDxrZW5kby10b29sYmFyLWJ1dHRvbmdyb3VwPlxyXG4gICAgICAgIDxrZW5kby10b29sYmFyLWJ1dHRvbiBrZW5kb0VkaXRvckRlbGV0ZUNvbHVtbkJ1dHRvbj48L2tlbmRvLXRvb2xiYXItYnV0dG9uPlxyXG4gICAgICAgIDxrZW5kby10b29sYmFyLWJ1dHRvbiBrZW5kb0VkaXRvckRlbGV0ZVJvd0J1dHRvbj48L2tlbmRvLXRvb2xiYXItYnV0dG9uPlxyXG4gICAgICAgIDxrZW5kby10b29sYmFyLWJ1dHRvbiBrZW5kb0VkaXRvckRlbGV0ZVRhYmxlQnV0dG9uPjwva2VuZG8tdG9vbGJhci1idXR0b24+XHJcbiAgICAgIDwva2VuZG8tdG9vbGJhci1idXR0b25ncm91cD5cclxuICAgICAgPGtlbmRvLXRvb2xiYXItYnV0dG9uZ3JvdXA+XHJcbiAgICAgICAgPGtlbmRvLXRvb2xiYXItYnV0dG9uIGtlbmRvRWRpdG9yTWVyZ2VDZWxsc0J1dHRvbj48L2tlbmRvLXRvb2xiYXItYnV0dG9uPlxyXG4gICAgICAgIDxrZW5kby10b29sYmFyLWJ1dHRvbiBrZW5kb0VkaXRvclNwbGl0Q2VsbEJ1dHRvbj48L2tlbmRvLXRvb2xiYXItYnV0dG9uPlxyXG4gICAgICA8L2tlbmRvLXRvb2xiYXItYnV0dG9uZ3JvdXA+XHJcbiAgICA8L2tlbmRvLXRvb2xiYXI+XHJcbiAgPC9rZW5kby1lZGl0b3I+XHJcbiAgPGlucHV0IHN0eWxlPVwiZGlzcGxheTpub25lO1wiIHR5cGU9XCJmaWxlXCIgW2lkXT1cImRhdGEuVmFsdWUgKyctdXBsb2FkLWZpbGUnXCIgW25hbWVdPVwiZGF0YS5WYWx1ZSArJy11cGxvYWQtZmlsZSdcIiBhY2NlcHQ9XCJpbWFnZS8qXCIgbmdmLW1heC1zaXplPVwiNU1CXCIgKGNoYW5nZSk9XCJ1cGxvYWRJbWFnZSgkZXZlbnQpXCI+XHJcbjwvZGl2PlxyXG4iXX0=
@@ -94,6 +94,7 @@ export class ZtreeComponent extends DataListingFieldBase {
94
94
  }
95
95
  this.data.isHideAllAddNode = this.data.isHideAllAddNode == undefined ? false : ZComponentHelper.getGroupValue(this.data.isHideAllAddNode, this.group);
96
96
  this.data.isHideAllRemoveNode = this.data.isHideAllRemoveNode == undefined ? false : ZComponentHelper.getGroupValue(this.data.isHideAllRemoveNode, this.group);
97
+ this.setDefaultExpandable();
97
98
  // fix text align issue
98
99
  // if (this.data.OnAddNode || this.data.OnRemoveNode) {
99
100
  // this.absoluteText = true;
@@ -390,6 +391,14 @@ export class ZtreeComponent extends DataListingFieldBase {
390
391
  this.items = [];
391
392
  this.originalItems = [];
392
393
  }
394
+ setDefaultExpandable() {
395
+ if (this.data.TreeListInitiallyExpandedDataIds) {
396
+ const idList = typeof this.data.TreeListInitiallyExpandedDataIds == 'string' ? ZComponentHelper.getGroupValue(this.data.TreeListInitiallyExpandedDataIds, this.group) : this.data.TreeListInitiallyExpandedDataIds;
397
+ if (idList && Array.isArray(idList)) {
398
+ this.state.expandedkeys = idList;
399
+ }
400
+ }
401
+ }
393
402
  getSelectedValues() {
394
403
  if (this.allNodesWitoutHierachy && this.selectedKeys && this.allNodesWitoutHierachy.length > 0 && this.selectedKeys.length > 0) {
395
404
  return this.allNodesWitoutHierachy.filter(x => this.selectedKeys.includes(x[this.data.SelectOptions]));
@@ -412,12 +421,12 @@ export class ZtreeComponent extends DataListingFieldBase {
412
421
  }
413
422
  }
414
423
  ZtreeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: ZtreeComponent, deps: [{ token: i1.ZComponentService }], target: i0.ɵɵFactoryTarget.Component });
415
- ZtreeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: ZtreeComponent, selector: "app-ztree", viewQueries: [{ propertyName: "nodetemplate", first: true, predicate: ["nodetemplate"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<div style=\"width:100%\" [style]=\"componentProperties.style.style\" class=\"e1tag-style\"\r\n *ngIf=\"(!!componentProperties.isVisibleField ? group[componentProperties.isVisibleField] : componentProperties.isVisible)\">\r\n <kendo-treeview [nodes]=\"getItems()\"\r\n kendoTreeViewExpandable\r\n [kendoTreeViewSelectable]=\"selection\"\r\n kendoTreeViewDragAndDrop\r\n kendoTreeViewDragAndDropEditing\r\n [isExpanded]=\"isExpanded\"\r\n (collapse)=\"handleCollapse($event)\"\r\n (expand)=\"handleExpand($event)\"\r\n (nodeDrop)=\"handleNodeDrop($event)\"\r\n (nodeDragEnd)=\"handleNodeDragEnd($event)\"\r\n (selectionChange)=\"onSelectionChange($event)\"\r\n [(selectedKeys)]=\"selectedKeys\"\r\n kendoTreeViewHierarchyBinding\r\n childrenField=\"Value\"\r\n textField=\"Name\"\r\n [selectBy]=\"data.SelectOptions\"\r\n [filterable]=\"data.Filterable\"\r\n (filterChange)=\"handleFilter($event)\"\r\n [style]=\"componentProperties.style.style1\" class=\"e1tag-style1\"\r\n [ngClass]=\"data.Class\">\r\n <ng-template kendoTreeViewNodeTemplate let-dataItem #nodetemplate>\r\n <div class=\"tree-content-container\">\r\n <ion-button *ngIf=\"!!data.OnAddNode && !data.isHideAllAddNode\"\r\n (click)=\"onAddNode($event, dataItem, data, group)\"\r\n style=\"zoom: 0.6; margin: 0 0 0 2px;\" mat-raised-button color=\"primary\" size=\"medium\"\r\n [hidden]=\"(!!dataItem.OnAddNodeVisible)\" [style]=\"componentProperties.style.style2\" class=\"e1tag-style2\">\r\n <fa-icon [icon]=\"'plus'\"></fa-icon>\r\n </ion-button>\r\n <ion-button *ngIf=\"!!data.OnRemoveNode && !data.isHideAllRemoveNode\" (click)=\"onRemoveNode($event, dataItem, data, group)\"\r\n style=\"zoom: 0.6; margin: 0 0 0 10px;\" color=\"danger\" mat-raised-button size=\"medium\"\r\n [hidden]=\"(!!dataItem.OnRemoveNodeVisible)\" [style]=\"componentProperties.style.style3\" class=\"e1tag-style3\">\r\n <fa-icon [icon]=\"'minus'\"></fa-icon>\r\n </ion-button>\r\n <span class=\"btn-seperator\"></span>\r\n\r\n <ion-label [style]=\"componentProperties.style.style4\" class=\"e1tag-style4\" [ngClass]=\"dataItem.class\">\r\n {{ getTemplate(dataItem, data, group) }}\r\n </ion-label>\r\n <!--dom to display the tree row properly if there no button to show.-->\r\n <!-- <div *ngIf=\"(!data.OnAddNode && !data.OnRemoveNode) && data.doubleHeight\" style=\"zoom: 0.6; margin: 15px 0 15px 0;\">\r\n &nbsp;\r\n </div> -->\r\n </div>\r\n </ng-template>\r\n </kendo-treeview>\r\n</div>\r\n", styles: [":host ::ng-deep .k-treeview .k-treeview-leaf{width:100%;margin:5px;padding:9px 20px 9px 8px;border-radius:2px;background:rgba(var(--ion-color-primary-rgb),.15);color:var(--ion-color-primary-shade);border:1px solid rgba(var(--ion-color-primary-rgb),1);font-size:13px;cursor:pointer}:host ::ng-deep .k-treeview .k-treeview-leaf.k-selected,:host ::ng-deep .k-treeview .k-treeview-leaf.k-state-selected{width:100%;margin:5px;padding:9px 20px 9px 8px;border-radius:2px;background:rgba(var(--ion-color-primary-rgb),.3)!important;font-size:13px;cursor:pointer}:host ::ng-deep .k-treeview .k-treeview-leaf:hover,:host ::ng-deep .k-treeview .k-treeview-leaf.k-hover .k-treeview-leaf.k-state-hover{width:100%;margin:5px;padding:9px 20px 9px 8px;border-radius:2px;background:rgba(var(--ion-color-primary-rgb),.1);font-size:13px;cursor:pointer}:host ::ng-deep .k-treeview .tree-content-container{display:flex;align-items:center;justify-content:center}:host ::ng-deep .k-treeview .btn-seperator{width:10px;display:inline-block}\n"], components: [{ type: i2.TreeViewComponent, selector: "kendo-treeview", inputs: ["filterInputPlaceholder", "expandDisabledNodes", "animate", "nodeTemplate", "loadMoreButtonTemplate", "trackBy", "nodes", "textField", "hasChildren", "isChecked", "isDisabled", "isExpanded", "isSelected", "isVisible", "navigable", "children", "loadOnDemand", "filterable", "filter", "size", "disableParentNodesOnly"], outputs: ["childrenLoaded", "blur", "focus", "expand", "collapse", "nodeDragStart", "nodeDrag", "filterStateChange", "nodeDrop", "nodeDragEnd", "addItem", "removeItem", "checkedChange", "selectionChange", "filterChange", "nodeClick", "nodeDblClick"], exportAs: ["kendoTreeView"] }, { type: i3.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { type: i4.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "classes", "transform", "a11yRole"] }, { type: i3.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }], directives: [{ type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.ExpandDirective, selector: "[kendoTreeViewExpandable]", inputs: ["isExpanded", "expandBy", "expandOnFilter", "expandedKeys"], outputs: ["expandedKeysChange"] }, { type: i2.DragAndDropDirective, selector: "[kendoTreeViewDragAndDrop]", inputs: ["allowCopy", "dropZoneTreeViews", "startDragAfter", "autoScroll"] }, { type: i2.DragAndDropEditingDirective, selector: "[kendoTreeViewDragAndDropEditing]", inputs: ["editService"] }, { type: i2.HierarchyBindingDirective, selector: "[kendoTreeViewHierarchyBinding]", inputs: ["childrenField", "nodes", "isVisible", "loadOnDemand"] }, { type: i2.SelectDirective, selector: "[kendoTreeViewSelectable]", inputs: ["isSelected", "selectBy", "kendoTreeViewSelectable", "selectedKeys"], outputs: ["selectedKeysChange"] }, { type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i6.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }, { type: i2.NodeTemplateDirective, selector: "[kendoTreeViewNodeTemplate]" }] });
424
+ ZtreeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: ZtreeComponent, selector: "app-ztree", viewQueries: [{ propertyName: "nodetemplate", first: true, predicate: ["nodetemplate"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<div style=\"width:100%\" [style]=\"componentProperties.style.style\" class=\"e1tag-style\"\r\n *ngIf=\"(!!componentProperties.isVisibleField ? group[componentProperties.isVisibleField] : componentProperties.isVisible)\">\r\n <kendo-treeview [nodes]=\"getItems()\"\r\n kendoTreeViewExpandable\r\n [kendoTreeViewSelectable]=\"selection\"\r\n kendoTreeViewDragAndDrop\r\n kendoTreeViewDragAndDropEditing\r\n [isExpanded]=\"isExpanded\"\r\n (collapse)=\"handleCollapse($event)\"\r\n (expand)=\"handleExpand($event)\"\r\n (nodeDrop)=\"handleNodeDrop($event)\"\r\n (nodeDragEnd)=\"handleNodeDragEnd($event)\"\r\n (selectionChange)=\"onSelectionChange($event)\"\r\n [(selectedKeys)]=\"selectedKeys\"\r\n kendoTreeViewHierarchyBinding\r\n childrenField=\"Value\"\r\n textField=\"Name\"\r\n [selectBy]=\"data.SelectOptions\"\r\n [filterable]=\"data.Filterable\"\r\n (filterChange)=\"handleFilter($event)\"\r\n [style]=\"componentProperties.style.style1\" class=\"e1tag-style1\"\r\n [ngClass]=\"data.Class\">\r\n <ng-template kendoTreeViewNodeTemplate let-dataItem #nodetemplate>\r\n <div class=\"tree-content-container\">\r\n <ion-button *ngIf=\"!!data.OnAddNode && !data.isHideAllAddNode\"\r\n (click)=\"onAddNode($event, dataItem, data, group)\"\r\n style=\"zoom: 0.6; margin: 0 0 0 2px;\" mat-raised-button color=\"primary\" size=\"medium\"\r\n [hidden]=\"(!!dataItem.OnAddNodeVisible)\" [style]=\"componentProperties.style.style2\" class=\"e1tag-style2\">\r\n <fa-icon [icon]=\"'plus'\"></fa-icon>\r\n </ion-button>\r\n <ion-button *ngIf=\"!!data.OnRemoveNode && !data.isHideAllRemoveNode\" (click)=\"onRemoveNode($event, dataItem, data, group)\"\r\n style=\"zoom: 0.6; margin: 0 0 0 10px;\" color=\"danger\" mat-raised-button size=\"medium\"\r\n [hidden]=\"(!!dataItem.OnRemoveNodeVisible)\" [style]=\"componentProperties.style.style3\" class=\"e1tag-style3\">\r\n <fa-icon [icon]=\"'minus'\"></fa-icon>\r\n </ion-button>\r\n <span class=\"btn-seperator\"></span>\r\n\r\n <ion-label [style]=\"componentProperties.style.style4\" class=\"e1tag-style4\" [ngClass]=\"dataItem.class\">\r\n {{ getTemplate(dataItem, data, group) }}\r\n </ion-label>\r\n <!--dom to display the tree row properly if there no button to show.-->\r\n <!-- <div *ngIf=\"(!data.OnAddNode && !data.OnRemoveNode) && data.doubleHeight\" style=\"zoom: 0.6; margin: 15px 0 15px 0;\">\r\n &nbsp;\r\n </div> -->\r\n </div>\r\n </ng-template>\r\n </kendo-treeview>\r\n</div>\r\n", styles: [":host ::ng-deep .k-treeview .k-treeview-leaf{width:100%;margin:5px;padding:9px 20px 9px 8px;border-radius:2px;background:rgba(var(--ion-color-primary-rgb),.15);color:var(--ion-color-primary-shade);border:1px solid rgba(var(--ion-color-primary-rgb),1);font-size:13px;cursor:pointer}:host ::ng-deep .k-treeview .k-treeview-leaf.k-selected,:host ::ng-deep .k-treeview .k-treeview-leaf.k-state-selected{width:100%;margin:5px;padding:9px 20px 9px 8px;border-radius:2px;background:rgba(var(--ion-color-primary-rgb),.3);font-size:13px;cursor:pointer}:host ::ng-deep .k-treeview .k-treeview-leaf:hover,:host ::ng-deep .k-treeview .k-treeview-leaf.k-hover .k-treeview-leaf.k-state-hover{width:100%;margin:5px;padding:9px 20px 9px 8px;border-radius:2px;background:rgba(var(--ion-color-primary-rgb),.1);font-size:13px;cursor:pointer}:host ::ng-deep .k-treeview .tree-content-container{display:flex;align-items:center;justify-content:center}:host ::ng-deep .k-treeview .btn-seperator{width:10px;display:inline-block}\n"], components: [{ type: i2.TreeViewComponent, selector: "kendo-treeview", inputs: ["filterInputPlaceholder", "expandDisabledNodes", "animate", "nodeTemplate", "loadMoreButtonTemplate", "trackBy", "nodes", "textField", "hasChildren", "isChecked", "isDisabled", "isExpanded", "isSelected", "isVisible", "navigable", "children", "loadOnDemand", "filterable", "filter", "size", "disableParentNodesOnly"], outputs: ["childrenLoaded", "blur", "focus", "expand", "collapse", "nodeDragStart", "nodeDrag", "filterStateChange", "nodeDrop", "nodeDragEnd", "addItem", "removeItem", "checkedChange", "selectionChange", "filterChange", "nodeClick", "nodeDblClick"], exportAs: ["kendoTreeView"] }, { type: i3.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { type: i4.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "classes", "transform", "a11yRole"] }, { type: i3.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }], directives: [{ type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.ExpandDirective, selector: "[kendoTreeViewExpandable]", inputs: ["isExpanded", "expandBy", "expandOnFilter", "expandedKeys"], outputs: ["expandedKeysChange"] }, { type: i2.DragAndDropDirective, selector: "[kendoTreeViewDragAndDrop]", inputs: ["allowCopy", "dropZoneTreeViews", "startDragAfter", "autoScroll"] }, { type: i2.DragAndDropEditingDirective, selector: "[kendoTreeViewDragAndDropEditing]", inputs: ["editService"] }, { type: i2.HierarchyBindingDirective, selector: "[kendoTreeViewHierarchyBinding]", inputs: ["childrenField", "nodes", "isVisible", "loadOnDemand"] }, { type: i2.SelectDirective, selector: "[kendoTreeViewSelectable]", inputs: ["isSelected", "selectBy", "kendoTreeViewSelectable", "selectedKeys"], outputs: ["selectedKeysChange"] }, { type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i6.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }, { type: i2.NodeTemplateDirective, selector: "[kendoTreeViewNodeTemplate]" }] });
416
425
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: ZtreeComponent, decorators: [{
417
426
  type: Component,
418
- args: [{ selector: "app-ztree", template: "<div style=\"width:100%\" [style]=\"componentProperties.style.style\" class=\"e1tag-style\"\r\n *ngIf=\"(!!componentProperties.isVisibleField ? group[componentProperties.isVisibleField] : componentProperties.isVisible)\">\r\n <kendo-treeview [nodes]=\"getItems()\"\r\n kendoTreeViewExpandable\r\n [kendoTreeViewSelectable]=\"selection\"\r\n kendoTreeViewDragAndDrop\r\n kendoTreeViewDragAndDropEditing\r\n [isExpanded]=\"isExpanded\"\r\n (collapse)=\"handleCollapse($event)\"\r\n (expand)=\"handleExpand($event)\"\r\n (nodeDrop)=\"handleNodeDrop($event)\"\r\n (nodeDragEnd)=\"handleNodeDragEnd($event)\"\r\n (selectionChange)=\"onSelectionChange($event)\"\r\n [(selectedKeys)]=\"selectedKeys\"\r\n kendoTreeViewHierarchyBinding\r\n childrenField=\"Value\"\r\n textField=\"Name\"\r\n [selectBy]=\"data.SelectOptions\"\r\n [filterable]=\"data.Filterable\"\r\n (filterChange)=\"handleFilter($event)\"\r\n [style]=\"componentProperties.style.style1\" class=\"e1tag-style1\"\r\n [ngClass]=\"data.Class\">\r\n <ng-template kendoTreeViewNodeTemplate let-dataItem #nodetemplate>\r\n <div class=\"tree-content-container\">\r\n <ion-button *ngIf=\"!!data.OnAddNode && !data.isHideAllAddNode\"\r\n (click)=\"onAddNode($event, dataItem, data, group)\"\r\n style=\"zoom: 0.6; margin: 0 0 0 2px;\" mat-raised-button color=\"primary\" size=\"medium\"\r\n [hidden]=\"(!!dataItem.OnAddNodeVisible)\" [style]=\"componentProperties.style.style2\" class=\"e1tag-style2\">\r\n <fa-icon [icon]=\"'plus'\"></fa-icon>\r\n </ion-button>\r\n <ion-button *ngIf=\"!!data.OnRemoveNode && !data.isHideAllRemoveNode\" (click)=\"onRemoveNode($event, dataItem, data, group)\"\r\n style=\"zoom: 0.6; margin: 0 0 0 10px;\" color=\"danger\" mat-raised-button size=\"medium\"\r\n [hidden]=\"(!!dataItem.OnRemoveNodeVisible)\" [style]=\"componentProperties.style.style3\" class=\"e1tag-style3\">\r\n <fa-icon [icon]=\"'minus'\"></fa-icon>\r\n </ion-button>\r\n <span class=\"btn-seperator\"></span>\r\n\r\n <ion-label [style]=\"componentProperties.style.style4\" class=\"e1tag-style4\" [ngClass]=\"dataItem.class\">\r\n {{ getTemplate(dataItem, data, group) }}\r\n </ion-label>\r\n <!--dom to display the tree row properly if there no button to show.-->\r\n <!-- <div *ngIf=\"(!data.OnAddNode && !data.OnRemoveNode) && data.doubleHeight\" style=\"zoom: 0.6; margin: 15px 0 15px 0;\">\r\n &nbsp;\r\n </div> -->\r\n </div>\r\n </ng-template>\r\n </kendo-treeview>\r\n</div>\r\n", styles: [":host ::ng-deep .k-treeview .k-treeview-leaf{width:100%;margin:5px;padding:9px 20px 9px 8px;border-radius:2px;background:rgba(var(--ion-color-primary-rgb),.15);color:var(--ion-color-primary-shade);border:1px solid rgba(var(--ion-color-primary-rgb),1);font-size:13px;cursor:pointer}:host ::ng-deep .k-treeview .k-treeview-leaf.k-selected,:host ::ng-deep .k-treeview .k-treeview-leaf.k-state-selected{width:100%;margin:5px;padding:9px 20px 9px 8px;border-radius:2px;background:rgba(var(--ion-color-primary-rgb),.3)!important;font-size:13px;cursor:pointer}:host ::ng-deep .k-treeview .k-treeview-leaf:hover,:host ::ng-deep .k-treeview .k-treeview-leaf.k-hover .k-treeview-leaf.k-state-hover{width:100%;margin:5px;padding:9px 20px 9px 8px;border-radius:2px;background:rgba(var(--ion-color-primary-rgb),.1);font-size:13px;cursor:pointer}:host ::ng-deep .k-treeview .tree-content-container{display:flex;align-items:center;justify-content:center}:host ::ng-deep .k-treeview .btn-seperator{width:10px;display:inline-block}\n"] }]
427
+ args: [{ selector: "app-ztree", template: "<div style=\"width:100%\" [style]=\"componentProperties.style.style\" class=\"e1tag-style\"\r\n *ngIf=\"(!!componentProperties.isVisibleField ? group[componentProperties.isVisibleField] : componentProperties.isVisible)\">\r\n <kendo-treeview [nodes]=\"getItems()\"\r\n kendoTreeViewExpandable\r\n [kendoTreeViewSelectable]=\"selection\"\r\n kendoTreeViewDragAndDrop\r\n kendoTreeViewDragAndDropEditing\r\n [isExpanded]=\"isExpanded\"\r\n (collapse)=\"handleCollapse($event)\"\r\n (expand)=\"handleExpand($event)\"\r\n (nodeDrop)=\"handleNodeDrop($event)\"\r\n (nodeDragEnd)=\"handleNodeDragEnd($event)\"\r\n (selectionChange)=\"onSelectionChange($event)\"\r\n [(selectedKeys)]=\"selectedKeys\"\r\n kendoTreeViewHierarchyBinding\r\n childrenField=\"Value\"\r\n textField=\"Name\"\r\n [selectBy]=\"data.SelectOptions\"\r\n [filterable]=\"data.Filterable\"\r\n (filterChange)=\"handleFilter($event)\"\r\n [style]=\"componentProperties.style.style1\" class=\"e1tag-style1\"\r\n [ngClass]=\"data.Class\">\r\n <ng-template kendoTreeViewNodeTemplate let-dataItem #nodetemplate>\r\n <div class=\"tree-content-container\">\r\n <ion-button *ngIf=\"!!data.OnAddNode && !data.isHideAllAddNode\"\r\n (click)=\"onAddNode($event, dataItem, data, group)\"\r\n style=\"zoom: 0.6; margin: 0 0 0 2px;\" mat-raised-button color=\"primary\" size=\"medium\"\r\n [hidden]=\"(!!dataItem.OnAddNodeVisible)\" [style]=\"componentProperties.style.style2\" class=\"e1tag-style2\">\r\n <fa-icon [icon]=\"'plus'\"></fa-icon>\r\n </ion-button>\r\n <ion-button *ngIf=\"!!data.OnRemoveNode && !data.isHideAllRemoveNode\" (click)=\"onRemoveNode($event, dataItem, data, group)\"\r\n style=\"zoom: 0.6; margin: 0 0 0 10px;\" color=\"danger\" mat-raised-button size=\"medium\"\r\n [hidden]=\"(!!dataItem.OnRemoveNodeVisible)\" [style]=\"componentProperties.style.style3\" class=\"e1tag-style3\">\r\n <fa-icon [icon]=\"'minus'\"></fa-icon>\r\n </ion-button>\r\n <span class=\"btn-seperator\"></span>\r\n\r\n <ion-label [style]=\"componentProperties.style.style4\" class=\"e1tag-style4\" [ngClass]=\"dataItem.class\">\r\n {{ getTemplate(dataItem, data, group) }}\r\n </ion-label>\r\n <!--dom to display the tree row properly if there no button to show.-->\r\n <!-- <div *ngIf=\"(!data.OnAddNode && !data.OnRemoveNode) && data.doubleHeight\" style=\"zoom: 0.6; margin: 15px 0 15px 0;\">\r\n &nbsp;\r\n </div> -->\r\n </div>\r\n </ng-template>\r\n </kendo-treeview>\r\n</div>\r\n", styles: [":host ::ng-deep .k-treeview .k-treeview-leaf{width:100%;margin:5px;padding:9px 20px 9px 8px;border-radius:2px;background:rgba(var(--ion-color-primary-rgb),.15);color:var(--ion-color-primary-shade);border:1px solid rgba(var(--ion-color-primary-rgb),1);font-size:13px;cursor:pointer}:host ::ng-deep .k-treeview .k-treeview-leaf.k-selected,:host ::ng-deep .k-treeview .k-treeview-leaf.k-state-selected{width:100%;margin:5px;padding:9px 20px 9px 8px;border-radius:2px;background:rgba(var(--ion-color-primary-rgb),.3);font-size:13px;cursor:pointer}:host ::ng-deep .k-treeview .k-treeview-leaf:hover,:host ::ng-deep .k-treeview .k-treeview-leaf.k-hover .k-treeview-leaf.k-state-hover{width:100%;margin:5px;padding:9px 20px 9px 8px;border-radius:2px;background:rgba(var(--ion-color-primary-rgb),.1);font-size:13px;cursor:pointer}:host ::ng-deep .k-treeview .tree-content-container{display:flex;align-items:center;justify-content:center}:host ::ng-deep .k-treeview .btn-seperator{width:10px;display:inline-block}\n"] }]
419
428
  }], ctorParameters: function () { return [{ type: i1.ZComponentService }]; }, propDecorators: { nodetemplate: [{
420
429
  type: ViewChild,
421
430
  args: ["nodetemplate", { static: true }]
422
431
  }] } });
423
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoienRyZWUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvenRyZWUvenRyZWUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvenRyZWUvenRyZWUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0JBQStCO0FBQy9CLE9BQU8sRUFBRSxTQUFTLEVBQVUsU0FBUyxFQUE2QixNQUFNLGVBQWUsQ0FBQztBQU94RiwyQ0FBMkM7QUFDM0MsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFFcEYsT0FBTyxFQUFjLGdCQUFnQixFQUE4RCxNQUFNLGlCQUFpQixDQUFDOzs7Ozs7OztBQVMzSCxNQUFNLE9BQU8sY0FBZSxTQUFRLG9CQUFvQjtJQWN0RCxZQUNTLGdCQUFtQztRQUUxQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQTtRQUZoQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQW1CO1FBWjVDLFVBQUssR0FBZSxFQUFFLENBQUM7UUFDdkIsa0JBQWEsR0FBZSxFQUFFLENBQUM7UUFDL0IsZUFBVSxHQUFHLEtBQUssQ0FBQztRQUNaLFVBQUssR0FBRyxFQUFFLFlBQVksRUFBRSxFQUFFLEVBQUUsQ0FBQztRQUM3QixjQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ2YsaUJBQVksR0FBVSxFQUFFLENBQUM7UUFDekIsY0FBUyxHQUF1QixFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsQ0FBQztRQUNuRCxVQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ1YsMkJBQXNCLEdBQUcsRUFBRSxDQUFDO1FBQzVCLGlCQUFZLEdBQUcsSUFBSSxDQUFDO1FBNEVyQixlQUFVLEdBQUcsQ0FBQyxRQUFhLEVBQUUsS0FBYSxFQUFFLEVBQUU7WUFDbkQsc0JBQXNCO1lBQ3RCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ25ELGVBQWU7UUFDakIsQ0FBQyxDQUFBO1FBRU0sZUFBVSxHQUFHLENBQUMsS0FBYSxFQUFFLEtBQWEsRUFBRSxhQUFzQixFQUFFLEVBQUU7WUFDM0UsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBRWhCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBRW5ELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7WUFDN0IsSUFBSSxhQUFhLEVBQUU7Z0JBQ2pCLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO2FBQzNCO1lBQ0QsTUFBTSxRQUFRLEdBQUcsRUFBRSxDQUFDO1lBQ3BCLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRTtnQkFDdkIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDekIsSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDO2dCQUNoQixHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUU7b0JBQ3JCLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDdEMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3JDLENBQUMsQ0FBQyxDQUFBO1lBQ0osQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDckUsQ0FBQyxDQUFBO1FBRU0saUJBQVksR0FBRyxDQUFDLEtBQWEsRUFBRSxLQUFhLEVBQUUsY0FBdUIsRUFBRSxFQUFFO1lBQzlFLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUVoQixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUVuRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1lBQzdCLElBQUksUUFBUSxHQUFHLEVBQUUsQ0FBQztZQUNsQixJQUFJLGNBQWMsRUFBRTtnQkFDbEIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFO29CQUN2QixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUN6QixJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7b0JBQ2hCLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRTt3QkFDckIsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUN0QyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDckMsQ0FBQyxDQUFDLENBQUE7Z0JBQ0osQ0FBQyxDQUFDLENBQUM7YUFDSjtpQkFBTTtnQkFDTCxRQUFRLEdBQUcsS0FBSyxDQUFDO2FBQ2xCO1lBRUQsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUMzRCxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMvQixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQTtRQWlCTSxjQUFTLEdBQUcsR0FBRyxFQUFFO1lBQ3RCLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNoQixJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7Z0JBQ2QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2FBQ3BDO1FBQ0gsQ0FBQyxDQUFBO1FBRU0sZ0JBQVcsR0FBRyxHQUFHLEVBQUU7WUFDeEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO1FBQy9CLENBQUMsQ0FBQTtJQXBKRCxDQUFDO0lBRUQsUUFBUTtRQUNOLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ25DLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNoQixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUMzQixJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztZQUM3QixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUM7WUFDMUQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO1lBRWpFLE1BQU0sZ0JBQWdCLEdBQUcsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQXdCLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3hHLElBQUksZ0JBQWdCLEVBQUU7Z0JBQ3BCLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQzthQUNsQjtZQUVELElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQXVCLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzdKLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQTBCLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3RLLHVCQUF1QjtZQUN2Qix1REFBdUQ7WUFDdkQsOEJBQThCO1lBQzlCLElBQUk7UUFDTixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxlQUFlO1FBQ2Isa0VBQWtFO1FBQ2xFLDhDQUE4QztRQUM5QyxnQkFBZ0IsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsaUNBQWlDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3JFLENBQUM7SUFFTyxtQkFBbUI7UUFDekIsSUFBSSxDQUFDLHNCQUFzQixHQUFHLEVBQUUsQ0FBQztRQUNqQyxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDZCxLQUFLLE1BQU0sVUFBVSxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7Z0JBQ25DLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQzdDLElBQUksVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUU7b0JBQzdELEtBQUssTUFBTSxTQUFTLElBQUksVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFFO3dCQUMzQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO3FCQUM3QztpQkFDRjthQUNGO1NBQ0Y7SUFDSCxDQUFDO0lBRUQsUUFBUTtRQUNOLHdCQUF3QjtRQUN4Qix1Q0FBdUM7UUFDdkMsSUFBSTtRQUNKLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQ25DLElBQUksVUFBVSxFQUFFO1lBQ2QsSUFBSSxDQUFDLEtBQUssR0FBRyxnQkFBZ0IsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDN0U7YUFBTTtZQUNMLE9BQU8sQ0FBQyxJQUFJLENBQUMsMENBQTBDLEVBQUUsVUFBVSxDQUFDLENBQUM7WUFDckUsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7U0FDakI7UUFFRCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7UUFFbEIsdURBQXVEO1FBQ3ZELG9FQUFvRTtRQUNwRSxzQ0FBc0M7UUFDdEMsZ0ZBQWdGO1FBQ2hGLDJCQUEyQjtRQUMzQiw2QkFBNkI7UUFDN0IsV0FBVztRQUNYLDBFQUEwRTtRQUMxRSxJQUFJO0lBQ04sQ0FBQztJQXdETSxlQUFlLENBQUMsSUFBUyxFQUFFLEtBQWEsRUFBRSxHQUFXLEVBQUUsS0FBYTtRQUN6RSxJQUFJLEdBQUcsRUFBRTtZQUNQLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO1NBQ2pCO1FBQ0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQU0sRUFBRSxDQUFTLEVBQUUsRUFBRTtZQUNqQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEtBQUssRUFBRTtnQkFDcEQsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO2FBQ3REO1lBQ0QsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDMUIsTUFBTSxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQ3ZCLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO2FBQ2hEO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBYU8sYUFBYSxDQUFDLElBQVMsRUFBRSxHQUFXO1FBQzFDLElBQUksR0FBRyxFQUFFO1lBQ1AsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7U0FDakI7UUFDRCxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBTSxFQUFFLENBQVMsRUFBRSxFQUFFO1lBQ2pDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQzFCLE1BQU0sQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUN2QixJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzVELElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQzthQUNoQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVNLGNBQWMsQ0FBQyxJQUFJO1FBQ3hCLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbEYsQ0FBQztJQUVNLFlBQVksQ0FBQyxJQUFJO1FBQ3RCLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdkUsQ0FBQztJQUVELFdBQVcsQ0FBQyxRQUFhLEVBQUUsSUFBWSxFQUFFLEtBQWE7UUFDcEQsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ3JCLE1BQU0sZUFBZSxHQUFHLGdCQUFnQixDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FDN0QsSUFBSSxFQUNKLElBQUksQ0FBQyxZQUFZLENBQ2xCLENBQUM7WUFDRixJQUFJLENBQUMsZUFBZSxFQUFFO2dCQUNwQixPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsWUFBWSxHQUFHLDhDQUE4QyxFQUFFLGVBQWUsQ0FBQyxDQUFDO2dCQUM1RyxPQUFPO2FBQ1I7WUFFRCxPQUFPLGVBQWUsQ0FBQztnQkFDckIsUUFBUTtnQkFDUixJQUFJO2dCQUNKLEtBQUs7YUFDaUIsQ0FBQyxDQUFDO1NBQzNCO2FBQU07WUFDTCxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDO2lCQUMzQixNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLElBQUksS0FBSyxRQUFRLENBQUM7aUJBQ3hDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNmO0lBQ0gsQ0FBQztJQUVELGtCQUFrQixDQUFDLE9BQWM7UUFDL0IsT0FBTyxDQUFDLElBQUksQ0FBQyxtRkFBbUYsQ0FBQyxDQUFDO1FBRWxHLE1BQU0sV0FBVyxHQUFVLEVBQUUsQ0FBQztRQUM5QixNQUFNLFNBQVMsR0FBUSxFQUFFLENBQUM7UUFDMUIsTUFBTSxZQUFZLEdBQVUsRUFBRSxDQUFDO1FBQy9CLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRTtZQUN6QixJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRTtnQkFDZixXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNwQixTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUNyQjtpQkFBTTtnQkFDTCxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUU7b0JBQ3pCLE1BQU0sVUFBVSxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQ3pDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFO3dCQUNyQixVQUFVLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztxQkFDdkI7b0JBQ0QsVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3pCLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2lCQUNyQjtxQkFBTTtvQkFDTCxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUN0QjthQUNGO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQzNCLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRTtnQkFDOUIsSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFO29CQUN6QixNQUFNLFVBQVUsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUN6QyxVQUFVLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDekIsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7aUJBQ3JCO1lBQ0gsQ0FBQyxDQUFDLENBQUM7U0FDSjtRQUVELE9BQU8sV0FBVyxDQUFDO0lBQ3JCLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxLQUFVO1FBQzFCLElBQUksVUFBNEIsQ0FBQztRQUNqQyxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDckIsUUFBUSxJQUFJLENBQUMsWUFBWSxFQUFFO2dCQUN6QixLQUFLLFNBQVM7b0JBQ1osVUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO29CQUNqQyxNQUFNO2dCQUNSLEtBQUssWUFBWTtvQkFDZixVQUFVLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUM7b0JBQ3BDLE1BQU07YUFDVDtTQUNGO1FBRUQsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNmLFVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztTQUNwQztRQUVELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztZQUN0QixJQUFJLEVBQUUseUJBQXlCO1lBQy9CLE1BQU0sRUFBRSxVQUFVO1lBQ2xCLElBQUksRUFBRSxLQUFLLENBQUMsUUFBUTtZQUNwQixLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUs7U0FDTSxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVELFNBQVMsQ0FBQyxLQUFVLEVBQUUsUUFBYSxFQUFFLElBQVksRUFBRSxLQUFhO1FBQzlELElBQUksQ0FBQyxZQUFZLEdBQUcsU0FBUyxDQUFDO1FBQzlCLDJCQUEyQjtRQUMzQiw2QkFBNkI7UUFDN0IscUZBQXFGO1FBQ3JGLHNDQUFzQztRQUN0Qyx3REFBd0Q7UUFDeEQsb0RBQW9EO1FBQ3BELE1BQU07UUFDTixZQUFZO1FBQ1osSUFBSTtJQUNOLENBQUM7SUFFRCxZQUFZLENBQUMsS0FBVSxFQUFFLFFBQWEsRUFBRSxJQUFZLEVBQUUsS0FBYTtRQUNqRSxJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztJQUNuQyxDQUFDO0lBRUQsVUFBVSxDQUFDLEtBQVU7UUFDbkIsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUN4QixNQUFNLElBQUksR0FBRyxnQkFBZ0IsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDakYsSUFBSSxPQUFPLElBQUksS0FBSyxVQUFVLEVBQUU7Z0JBQzlCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDakQsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ2pCO1lBQ0QsT0FBTztTQUNSO0lBQ0gsQ0FBQztJQUVELGNBQWMsQ0FBQyxLQUF3QjtRQUNyQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxLQUFLLEtBQUssRUFBRTtZQUNqQyxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3RCLE9BQU87U0FDUjtRQUVELElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLE1BQU0sV0FBVyxHQUFHLGdCQUFnQixDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FDekQsSUFBSSxFQUNKLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUNqQixDQUFDO1FBQ0YsSUFBSSxPQUFPLFdBQVcsS0FBSyxVQUFVLEVBQUU7WUFDckMsTUFBTSxRQUFRLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN4QyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDakI7UUFFRCw0Q0FBNEM7UUFDNUMsc0dBQXNHO1FBQ3RHLDZCQUE2QjtRQUM3QixJQUFJO0lBQ04sQ0FBQztJQUVELGlCQUFpQixDQUFDLEtBQXdCO1FBQ3hDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ3BCLE9BQU87U0FDUjtRQUNELElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNoQixzQ0FBc0M7UUFDdEMsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQy9DLHlCQUF5QjtRQUN6QixnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwRSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7WUFDdEIsSUFBSSxFQUFFLHlCQUF5QjtZQUMvQixNQUFNLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRO1lBQzFCLElBQUksRUFBRSxNQUFNO1NBQ1ksQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFTyxxQkFBcUIsQ0FBQyxNQUFrQixFQUFFLE1BQWtCO1FBQ2xFLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDakIsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDMUIsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3hDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO2dCQUNiLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2YsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQzlDO2lCQUFNO2dCQUNMLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUMvQixDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxVQUFVLENBQUM7Z0JBQ3ZCLE9BQU8sQ0FBQyxDQUFDLFVBQVUsQ0FBQztnQkFDcEIsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNoQjtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELDRDQUE0QztJQUNyQyxZQUFZLENBQUMsS0FBYTtRQUMvQixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRTtZQUMxQixJQUFJLENBQUMsS0FBSyxHQUFHLGdCQUFnQixDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUM3RTtRQUVELElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRTtZQUM1RCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztTQUM3RDthQUNJLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRTtZQUNqRSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztTQUM3RDtRQUVELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyRCxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztRQUV2RCxJQUFJLGdCQUFnQixDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ2hELElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUNwQjtJQUNILENBQUM7SUFFTyxZQUFZLENBQUMsU0FBYztRQUNqQyxJQUFJLFNBQVMsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDbEMsT0FBTyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzNCO1FBQ0QsSUFBSSxTQUFTLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxFQUFFO1lBQ3hDLE9BQU8sU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUM1QjtRQUNELElBQUksU0FBUyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUNsQyxPQUFPLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDM0I7UUFDRCxJQUFJLFNBQVMsRUFBRTtZQUNiLE9BQU8sU0FBUyxDQUFDO1NBQ2xCO0lBQ0gsQ0FBQztJQUVPLE1BQU0sQ0FBQyxLQUFZLEVBQUUsSUFBWTtRQUN2QyxPQUFPLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUU7WUFDaEMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUU7Z0JBQ2xDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDaEI7aUJBQU0sSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDOUMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUUvQyxJQUFJLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO29CQUN2QixJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUM7b0JBQ3RCLFVBQVUsQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDO29CQUM1QixHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2lCQUN0QjthQUNGO1lBQ0QsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDVCxDQUFDO0lBRU8sUUFBUSxDQUFDLElBQVksRUFBRSxJQUFZO1FBQ3pDLE9BQU8sSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNyRSxDQUFDO0lBQ0QsK0NBQStDO0lBRXhDLFdBQVcsQ0FBQyxRQUFRLEdBQUcsSUFBSTtRQUNoQyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFFBQVEsQ0FBQztJQUN4QyxDQUFDO0lBRU0sY0FBYyxDQUFDLFFBQVEsR0FBRyxJQUFJO1FBQ25DLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsUUFBUSxDQUFDO0lBQzNDLENBQUM7SUFFTSxrQkFBa0IsQ0FBQyxRQUFpQixJQUFJO1FBQzdDLE9BQU8sQ0FBQyxJQUFJLENBQUMsK0NBQStDLENBQUMsQ0FBQztRQUM5RCxrQ0FBa0M7SUFDcEMsQ0FBQztJQUVNLFdBQVc7UUFDaEIsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDaEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVNLGlCQUFpQjtRQUN0QixJQUFJLElBQUksQ0FBQyxzQkFBc0IsSUFBSSxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUM5SCxPQUFPLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDeEc7UUFDRCxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFTSxpQkFBaUIsQ0FBQyxJQUFTO1FBQ2hDLElBQUksSUFBSSxFQUFFO1lBQ1IsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDekQ7YUFDSTtZQUNILElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO1NBQ3hCO0lBQ0gsQ0FBQztJQUVPLHFCQUFxQjtRQUMzQixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQzVCLE1BQU0sYUFBYSxHQUFHLGdCQUFnQixDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUM5RixJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxDQUFDLENBQUM7U0FDdkM7SUFDSCxDQUFDOzsyR0F4Y1UsY0FBYzsrRkFBZCxjQUFjLG9NQ3BCM0IsKzNGQWdEQTsyRkQ1QmEsY0FBYztrQkFOMUIsU0FBUzsrQkFDRSxXQUFXO3dHQU13QixZQUFZO3NCQUF4RCxTQUFTO3VCQUFDLGNBQWMsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyIvKioqKioqKioqKiBBbmd1bGFyICoqKioqKioqKiovXHJcbmltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBWaWV3Q2hpbGQsIEVsZW1lbnRSZWYsIEFmdGVyVmlld0luaXQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxuLyoqKioqKioqKiogSW9uaWMgKioqKioqKioqKi9cclxuXHJcbi8qKioqKioqKioqIFBsdWdpbiAqKioqKioqKioqL1xyXG5pbXBvcnQgeyBUcmVlSXRlbURyb3BFdmVudCwgVHJlZUl0ZW1EcmFnRXZlbnQsIFNlbGVjdGFibGVTZXR0aW5ncyB9IGZyb20gXCJAcHJvZ3Jlc3Mva2VuZG8tYW5ndWxhci10cmVldmlld1wiO1xyXG5cclxuLyoqKioqKioqKiogQ29tcG9uZW50ICYgU2VydmljZSAqKioqKioqKioqL1xyXG5pbXBvcnQgeyBEYXRhTGlzdGluZ0ZpZWxkQmFzZSB9IGZyb20gXCIuLi9jb21wb25lbnRzL2RhdGFsaXN0aW5nZmllbGRiYXNlLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBaQ29tcG9uZW50U2VydmljZSB9IGZyb20gXCIuLi9zZXJ2aWNlcy96Y29tcG9uZW50LnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgWkNvbXBvbmVudCwgWkNvbXBvbmVudEhlbHBlciwgWkNvbXBvbmVudE91dHB1dEV2ZW50LCBaRmllbGQsIFpHcm91cCwgWlRyZWVUZW1wbGF0ZVBhcmFtcyB9IGZyb20gXCJtbWhnbG9iYWwtemNvcmVcIjtcclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJhcHAtenRyZWVcIixcclxuICB0ZW1wbGF0ZVVybDogXCIuL3p0cmVlLmNvbXBvbmVudC5odG1sXCIsXHJcbiAgc3R5bGVVcmxzOiBbXCIuL3p0cmVlLmNvbXBvbmVudC5zY3NzXCJdXHJcbn0pXHJcblxyXG5leHBvcnQgY2xhc3MgWnRyZWVDb21wb25lbnQgZXh0ZW5kcyBEYXRhTGlzdGluZ0ZpZWxkQmFzZSBpbXBsZW1lbnRzIFpDb21wb25lbnQsIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgQFZpZXdDaGlsZChcIm5vZGV0ZW1wbGF0ZVwiLCB7IHN0YXRpYzogdHJ1ZSB9KSBub2RldGVtcGxhdGU6IEVsZW1lbnRSZWY7XHJcblxyXG4gIGl0ZW1zOiBBcnJheTxhbnk+ID0gW107XHJcbiAgb3JpZ2luYWxJdGVtczogQXJyYXk8YW55PiA9IFtdO1xyXG4gIGlzTm9kZURyb3AgPSBmYWxzZTtcclxuICBwdWJsaWMgc3RhdGUgPSB7IGV4cGFuZGVka2V5czogW10gfTtcclxuICBwdWJsaWMgaXRlbUluZGV4ID0gW107XHJcbiAgcHVibGljIHNlbGVjdGVkS2V5czogYW55W10gPSBbXTtcclxuICBwdWJsaWMgc2VsZWN0aW9uOiBTZWxlY3RhYmxlU2V0dGluZ3MgPSB7IG1vZGU6IFwic2luZ2xlXCIgfTtcclxuICBwdWJsaWMgbm9kZXMgPSBbXTtcclxuICBwcml2YXRlIGFsbE5vZGVzV2l0b3V0SGllcmFjaHkgPSBbXTtcclxuICBwcml2YXRlIGNsaWNrQWN0TmFtZSA9IG51bGw7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIGNvbXBvbmVudFNlcnZpY2U6IFpDb21wb25lbnRTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICBzdXBlcihjb21wb25lbnRTZXJ2aWNlKVxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICBzdXBlci5pbml0Q29tcG9uZW50KCkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgdGhpcy5nZXRJdGVtcygpO1xyXG4gICAgICB0aGlzLnNldEFsbE9yaWdpbmFsSXRlbXMoKTtcclxuICAgICAgdGhpcy5pbml0U2V0U2VsZWN0ZWRWYWx1ZXMoKTtcclxuICAgICAgdGhpcy5kYXRhLlNlbGVjdE9wdGlvbnMgPSB0aGlzLmRhdGEuU2VsZWN0T3B0aW9ucyB8fCAnSWQnO1xyXG4gICAgICB0aGlzLnNlbGVjdGlvbi5tb2RlID0gdGhpcy5kYXRhLk11bHRpcGxlID8gXCJtdWx0aXBsZVwiIDogXCJzaW5nbGVcIjtcclxuXHJcbiAgICAgIGNvbnN0IGlzRXhwYW5kQWxsTm9kZXMgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwVmFsdWUodGhpcy5kYXRhLlRyZWV2aWV3RXhwYW5kQWxsIGFzIGFueSwgdGhpcy5ncm91cCk7XHJcbiAgICAgIGlmIChpc0V4cGFuZEFsbE5vZGVzKSB7XHJcbiAgICAgICAgdGhpcy5leHBhbmRBbGwoKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5kYXRhLmlzSGlkZUFsbEFkZE5vZGUgPSB0aGlzLmRhdGEuaXNIaWRlQWxsQWRkTm9kZSA9PSB1bmRlZmluZWQgPyBmYWxzZSA6IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBWYWx1ZSh0aGlzLmRhdGEuaXNIaWRlQWxsQWRkTm9kZSBhcyBhbnksIHRoaXMuZ3JvdXApO1xyXG4gICAgICB0aGlzLmRhdGEuaXNIaWRlQWxsUmVtb3ZlTm9kZSA9IHRoaXMuZGF0YS5pc0hpZGVBbGxSZW1vdmVOb2RlID09IHVuZGVmaW5lZCA/IGZhbHNlIDogWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cFZhbHVlKHRoaXMuZGF0YS5pc0hpZGVBbGxSZW1vdmVOb2RlIGFzIGFueSwgdGhpcy5ncm91cCk7XHJcbiAgICAgIC8vIGZpeCB0ZXh0IGFsaWduIGlzc3VlXHJcbiAgICAgIC8vIGlmICh0aGlzLmRhdGEuT25BZGROb2RlIHx8IHRoaXMuZGF0YS5PblJlbW92ZU5vZGUpIHtcclxuICAgICAgLy8gICB0aGlzLmFic29sdXRlVGV4dCA9IHRydWU7XHJcbiAgICAgIC8vIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgLy8gY29uc3QgY29tcG9uZW50SWQgPSBaQ29tcG9uZW50SGVscGVyLmdldENvbXBvbmVudElkKHRoaXMuZGF0YSk7XHJcbiAgICAvLyB0aGlzLmdyb3VwLnpDb21wb25lbnRzW2NvbXBvbmVudElkXSA9IHRoaXM7XHJcbiAgICBaQ29tcG9uZW50SGVscGVyLnJlZ2lzdGVyQ29tcG9uZW50KHRoaXMpO1xyXG4gICAgdGhpcy5jb21wb25lbnRTZXJ2aWNlLmRlY3JlbWVudENvbXBvbmVudENvdW50ZXJGb3JGaWVsZCh0aGlzLmRhdGEpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRBbGxPcmlnaW5hbEl0ZW1zKCkge1xyXG4gICAgdGhpcy5hbGxOb2Rlc1dpdG91dEhpZXJhY2h5ID0gW107XHJcbiAgICBpZiAodGhpcy5ub2Rlcykge1xyXG4gICAgICBmb3IgKGNvbnN0IHBhcmVudE5vZGUgb2YgdGhpcy5ub2Rlcykge1xyXG4gICAgICAgIHRoaXMuYWxsTm9kZXNXaXRvdXRIaWVyYWNoeS5wdXNoKHBhcmVudE5vZGUpO1xyXG4gICAgICAgIGlmIChwYXJlbnROb2RlWydWYWx1ZSddICYmIEFycmF5LmlzQXJyYXkocGFyZW50Tm9kZVsnVmFsdWUnXSkpIHtcclxuICAgICAgICAgIGZvciAoY29uc3QgY2hpbGROb2RlIG9mIHBhcmVudE5vZGVbJ1ZhbHVlJ10pIHtcclxuICAgICAgICAgICAgdGhpcy5hbGxOb2Rlc1dpdG91dEhpZXJhY2h5LnB1c2goY2hpbGROb2RlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldEl0ZW1zKCkge1xyXG4gICAgLy8gaWYgKHRoaXMubW9kZWxOYW1lKSB7XHJcbiAgICAvLyAgIHJldHVybiB0aGlzLmdyb3VwW3RoaXMubW9kZWxOYW1lXTtcclxuICAgIC8vIH1cclxuICAgIGNvbnN0IGZpZWxkVmFsdWUgPSB0aGlzLmRhdGEuVmFsdWU7XHJcbiAgICBpZiAoZmllbGRWYWx1ZSkge1xyXG4gICAgICB0aGlzLm5vZGVzID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cEV2YWxWYWx1ZS5jYWxsKHRoaXMsIHRoaXMuZGF0YS5WYWx1ZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLndhcm4oJ3p0cmVlIGZpZWxkIFZhbHVlIGlzIG5vdCBzZXQgY29ycmVjdGx5LiAnLCBmaWVsZFZhbHVlKTtcclxuICAgICAgdGhpcy5ub2RlcyA9IFtdO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLm5vZGVzO1xyXG5cclxuICAgIC8vIGlmIChmaWVsZFZhbHVlICYmIGZpZWxkVmFsdWUuc3RhcnRzV2l0aCgnZ3JvdXAuJykpIHtcclxuICAgIC8vICAgLy8gY29uc3QgbmV3RGF0YVNldCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5kYXRhU2V0KSk7XHJcbiAgICAvLyAgIGNvbnN0IG5hbWUgPSBmaWVsZFZhbHVlLnNsaWNlKDYpO1xyXG4gICAgLy8gICAvLyB0aGlzLmdyb3VwW25hbWVdID0gdGhpcy5zZXRWYWx1ZVByb3BUb051bGxBdExlYWZMZWF2ZSh0aGlzLmdyb3VwW25hbWVdKTtcclxuICAgIC8vICAgdGhpcy5tb2RlbE5hbWUgPSBuYW1lO1xyXG4gICAgLy8gICByZXR1cm4gdGhpcy5ncm91cFtuYW1lXTtcclxuICAgIC8vIH0gZWxzZSB7XHJcbiAgICAvLyAgIGNvbnNvbGUud2FybignenRyZWUgZmllbGQgVmFsdWUgaXMgbm90IHNldCBjb3JyZWN0bHkuICcsIGZpZWxkVmFsdWUpO1xyXG4gICAgLy8gfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGlzRXhwYW5kZWQgPSAoZGF0YUl0ZW06IGFueSwgaW5kZXg6IHN0cmluZykgPT4ge1xyXG4gICAgLy8gY29uc29sZS5sb2coaW5kZXgpO1xyXG4gICAgcmV0dXJuIHRoaXMuc3RhdGUuZXhwYW5kZWRrZXlzLmluZGV4T2YoaW5kZXgpID4gLTE7XHJcbiAgICAvLyByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBleHBhbmROb2RlID0gKGZpZWxkOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcsIHNldEFzU2VsZWN0ZWQ6IGJvb2xlYW4pID0+IHtcclxuICAgIHRoaXMuaXRlbUluZGV4ID0gW107XHJcbiAgICB0aGlzLmdldEl0ZW1zKCk7XHJcblxyXG4gICAgdGhpcy5zZWFyY2hOb2RlSW5kZXgodGhpcy5ub2RlcywgdmFsdWUsICcnLCBmaWVsZCk7XHJcblxyXG4gICAgY29uc3QgaW5kZXggPSB0aGlzLml0ZW1JbmRleDtcclxuICAgIGlmIChzZXRBc1NlbGVjdGVkKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRLZXlzID0gaW5kZXg7XHJcbiAgICB9XHJcbiAgICBjb25zdCBpbmRleEFyciA9IFtdO1xyXG4gICAgaW5kZXguZm9yRWFjaCgoaTogYW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IGFyciA9IGkuc3BsaXQoJ18nKTtcclxuICAgICAgbGV0IGluZGV4cyA9IFwiXCI7XHJcbiAgICAgIGFyci5mb3JFYWNoKCh4OiBhbnkpID0+IHtcclxuICAgICAgICBpbmRleHMgPSBpbmRleHMuY29uY2F0KFwiX1wiKS5jb25jYXQoeCk7XHJcbiAgICAgICAgaW5kZXhBcnIucHVzaChpbmRleHMuc3Vic3RyaW5nKDEpKTtcclxuICAgICAgfSlcclxuICAgIH0pO1xyXG4gICAgdGhpcy5zdGF0ZS5leHBhbmRlZGtleXMgPSB0aGlzLnN0YXRlLmV4cGFuZGVka2V5cy5jb25jYXQoaW5kZXhBcnIpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNvbGxhcHNlTm9kZSA9IChmaWVsZDogc3RyaW5nLCB2YWx1ZTogc3RyaW5nLCBjb2xsYXBzZVBhcmVudDogYm9vbGVhbikgPT4ge1xyXG4gICAgdGhpcy5pdGVtSW5kZXggPSBbXTtcclxuICAgIHRoaXMuZ2V0SXRlbXMoKTtcclxuXHJcbiAgICB0aGlzLnNlYXJjaE5vZGVJbmRleCh0aGlzLm5vZGVzLCB2YWx1ZSwgJycsIGZpZWxkKTtcclxuXHJcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuaXRlbUluZGV4O1xyXG4gICAgbGV0IGluZGV4QXJyID0gW107XHJcbiAgICBpZiAoY29sbGFwc2VQYXJlbnQpIHtcclxuICAgICAgaW5kZXguZm9yRWFjaCgoaTogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc3QgYXJyID0gaS5zcGxpdCgnXycpO1xyXG4gICAgICAgIGxldCBpbmRleHMgPSBcIlwiO1xyXG4gICAgICAgIGFyci5mb3JFYWNoKCh4OiBhbnkpID0+IHtcclxuICAgICAgICAgIGluZGV4cyA9IGluZGV4cy5jb25jYXQoXCJfXCIpLmNvbmNhdCh4KTtcclxuICAgICAgICAgIGluZGV4QXJyLnB1c2goaW5kZXhzLnN1YnN0cmluZygxKSk7XHJcbiAgICAgICAgfSlcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpbmRleEFyciA9IGluZGV4O1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc3RhdGUuZXhwYW5kZWRrZXlzID0gdGhpcy5zdGF0ZS5leHBhbmRlZGtleXMuZmlsdGVyKHYgPT4ge1xyXG4gICAgICByZXR1cm4gIWluZGV4QXJyLmluY2x1ZGVzKHYpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2VhcmNoTm9kZUluZGV4KG5vZGU6IGFueSwgdmFsdWU6IHN0cmluZywga2V5OiBzdHJpbmcsIGZpZWxkOiBzdHJpbmcpIHtcclxuICAgIGlmIChrZXkpIHtcclxuICAgICAga2V5ID0ga2V5ICsgJ18nO1xyXG4gICAgfVxyXG4gICAgbm9kZS5mb3JFYWNoKChkOiBhbnksIGk6IG51bWJlcikgPT4ge1xyXG4gICAgICBpZiAoZFtmaWVsZF0gPT09IE51bWJlcih2YWx1ZSkgfHwgZFtmaWVsZF0gPT09IHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5pdGVtSW5kZXggPSB0aGlzLml0ZW1JbmRleC5jb25jYXQoa2V5ICsgJycgKyBpKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShkLlZhbHVlKSkge1xyXG4gICAgICAgIGNvbnN0IGsgPSBrZXkgKyAnJyArIGk7XHJcbiAgICAgICAgdGhpcy5zZWFyY2hOb2RlSW5kZXgoZC5WYWx1ZSwgdmFsdWUsIGssIGZpZWxkKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZXhwYW5kQWxsID0gKCkgPT4ge1xyXG4gICAgdGhpcy5nZXRJdGVtcygpO1xyXG4gICAgaWYgKHRoaXMubm9kZXMpIHtcclxuICAgICAgdGhpcy5leHBhbmRBbGxOb2RlKHRoaXMubm9kZXMsICcnKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBjb2xsYXBzZUFsbCA9ICgpID0+IHtcclxuICAgIHRoaXMuc3RhdGUuZXhwYW5kZWRrZXlzID0gW107XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV4cGFuZEFsbE5vZGUobm9kZTogYW55LCBrZXk6IHN0cmluZykge1xyXG4gICAgaWYgKGtleSkge1xyXG4gICAgICBrZXkgPSBrZXkgKyAnXyc7XHJcbiAgICB9XHJcbiAgICBub2RlLmZvckVhY2goKGQ6IGFueSwgaTogbnVtYmVyKSA9PiB7XHJcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGQuVmFsdWUpKSB7XHJcbiAgICAgICAgY29uc3QgayA9IGtleSArICcnICsgaTtcclxuICAgICAgICB0aGlzLnN0YXRlLmV4cGFuZGVka2V5cyA9IHRoaXMuc3RhdGUuZXhwYW5kZWRrZXlzLmNvbmNhdChrKTtcclxuICAgICAgICB0aGlzLmV4cGFuZEFsbE5vZGUoZC5WYWx1ZSwgayk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGhhbmRsZUNvbGxhcHNlKG5vZGUpIHtcclxuICAgIHRoaXMuc3RhdGUuZXhwYW5kZWRrZXlzID0gdGhpcy5zdGF0ZS5leHBhbmRlZGtleXMuZmlsdGVyKGsgPT4gayAhPT0gbm9kZS5pbmRleCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaGFuZGxlRXhwYW5kKG5vZGUpIHtcclxuICAgIHRoaXMuc3RhdGUuZXhwYW5kZWRrZXlzID0gdGhpcy5zdGF0ZS5leHBhbmRlZGtleXMuY29uY2F0KG5vZGUuaW5kZXgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0VGVtcGxhdGUoZGF0YUl0ZW06IGFueSwgZGF0YTogWkZpZWxkLCBncm91cDogWkdyb3VwKSB7XHJcbiAgICBpZiAoZGF0YS5JdGVtVGVtcGxhdGUpIHtcclxuICAgICAgY29uc3QgZ2V0VGVtcGxhdGVGdW5jID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cEV2YWxWYWx1ZS5jYWxsKFxyXG4gICAgICAgIHRoaXMsXHJcbiAgICAgICAgZGF0YS5JdGVtVGVtcGxhdGVcclxuICAgICAgKTtcclxuICAgICAgaWYgKCFnZXRUZW1wbGF0ZUZ1bmMpIHtcclxuICAgICAgICBjb25zb2xlLndhcm4oXCJUaGUgKFwiICsgZGF0YS5JdGVtVGVtcGxhdGUgKyBcIikgaXMgbm90IGRlZmluZWQgY29ycmVjdGx5LiBWYWx1ZSBjb250YWluczogXCIsIGdldFRlbXBsYXRlRnVuYyk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gZ2V0VGVtcGxhdGVGdW5jKHtcclxuICAgICAgICBkYXRhSXRlbSxcclxuICAgICAgICBkYXRhLFxyXG4gICAgICAgIGdyb3VwXHJcbiAgICAgIH0gYXMgWlRyZWVUZW1wbGF0ZVBhcmFtcyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhkYXRhSXRlbSlcclxuICAgICAgICAuZmlsdGVyKGRhdGEgPT4gdHlwZW9mIGRhdGEgPT09IFwic3RyaW5nXCIpXHJcbiAgICAgICAgLmpvaW4oXCIsIFwiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNvbnZlcnRUb1RyZWVJdGVtcyhkYXRhU2V0OiBhbnlbXSkge1xyXG4gICAgY29uc29sZS53YXJuKFwiVGhpcyBtZXRob2QgaXMgdG8gYmUgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSBaQ29tcG9uZW50SGVscGVyLmNvbnZlcnRUb1RyZWVJdGVtcygpXCIpO1xyXG5cclxuICAgIGNvbnN0IHRvVHJlZUl0ZW1zOiBhbnlbXSA9IFtdO1xyXG4gICAgY29uc3QgdHJlZUluZGV4OiBhbnkgPSB7fTtcclxuICAgIGNvbnN0IHBlbmRpbmdJdGVtczogYW55W10gPSBbXTtcclxuICAgIGRhdGFTZXQuZm9yRWFjaCgoZDogYW55KSA9PiB7XHJcbiAgICAgIGlmICghZC5QYXJlbnRJZCkge1xyXG4gICAgICAgIHRvVHJlZUl0ZW1zLnB1c2goZCk7XHJcbiAgICAgICAgdHJlZUluZGV4W2QuSWRdID0gZDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAodHJlZUluZGV4W2QuUGFyZW50SWRdKSB7XHJcbiAgICAgICAgICBjb25zdCBwYXJlbnRJdGVtID0gdHJlZUluZGV4W2QuUGFyZW50SWRdO1xyXG4gICAgICAgICAgaWYgKCFwYXJlbnRJdGVtLlZhbHVlKSB7XHJcbiAgICAgICAgICAgIHBhcmVudEl0ZW0uVmFsdWUgPSBbXTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHBhcmVudEl0ZW0uVmFsdWUucHVzaChkKTtcclxuICAgICAgICAgIHRyZWVJbmRleFtkLklkXSA9IGQ7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHBlbmRpbmdJdGVtcy5wdXNoKGQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKHBlbmRpbmdJdGVtcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHBlbmRpbmdJdGVtcy5mb3JFYWNoKChkOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAodHJlZUluZGV4W2QuUGFyZW50SWRdKSB7XHJcbiAgICAgICAgICBjb25zdCBwYXJlbnRJdGVtID0gdHJlZUluZGV4W2QuUGFyZW50SWRdO1xyXG4gICAgICAgICAgcGFyZW50SXRlbS5WYWx1ZS5wdXNoKGQpO1xyXG4gICAgICAgICAgdHJlZUluZGV4W2QuSWRdID0gZDtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0b1RyZWVJdGVtcztcclxuICB9XHJcblxyXG4gIG9uU2VsZWN0aW9uQ2hhbmdlKGV2ZW50OiBhbnkpIHtcclxuICAgIGxldCB0YXJnZXROYW1lOiBib29sZWFuIHwgc3RyaW5nO1xyXG4gICAgaWYgKHRoaXMuY2xpY2tBY3ROYW1lKSB7XHJcbiAgICAgIHN3aXRjaCAodGhpcy5jbGlja0FjdE5hbWUpIHtcclxuICAgICAgICBjYXNlICdBZGROb2RlJzpcclxuICAgICAgICAgIHRhcmdldE5hbWUgPSB0aGlzLmRhdGEuT25BZGROb2RlO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnUmVtb3ZlTm9kZSc6XHJcbiAgICAgICAgICB0YXJnZXROYW1lID0gdGhpcy5kYXRhLk9uUmVtb3ZlTm9kZTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0YXJnZXROYW1lKSB7XHJcbiAgICAgIHRhcmdldE5hbWUgPSB0aGlzLmRhdGEuT25JdGVtQ2xpY2s7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jbGlja0FjdE5hbWUgPSBudWxsO1xyXG4gICAgdGhpcy5ncm91cC5zdWJqZWN0Lm5leHQoe1xyXG4gICAgICB0eXBlOiBcInp0cmVlX29uU2VsZWN0aW9uQ2hhbmdlXCIsXHJcbiAgICAgIHRhcmdldDogdGFyZ2V0TmFtZSxcclxuICAgICAgZGF0YTogZXZlbnQuZGF0YUl0ZW0sXHJcbiAgICAgIGV2ZW50OiBldmVudC5pbmRleFxyXG4gICAgfSBhcyBaQ29tcG9uZW50T3V0cHV0RXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgb25BZGROb2RlKGV2ZW50OiBhbnksIGRhdGFJdGVtOiBhbnksIGRhdGE6IFpGaWVsZCwgZ3JvdXA6IFpHcm91cCkge1xyXG4gICAgdGhpcy5jbGlja0FjdE5hbWUgPSAnQWRkTm9kZSc7XHJcbiAgICAvLyBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIC8vIGlmICh0aGlzLmRhdGEuT25BZGROb2RlKSB7XHJcbiAgICAvLyAgIGNvbnN0IGZ1bmMgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwRXZhbFZhbHVlLmNhbGwodGhpcywgdGhpcy5kYXRhLk9uQWRkTm9kZSk7XHJcbiAgICAvLyAgIGlmICh0eXBlb2YgZnVuYyA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgLy8gICAgIGNvbnN0IGNhbGxGdW5jID0gZnVuYy5iaW5kKHRoaXMuZ3JvdXAuY3RybFNjb3BlKTtcclxuICAgIC8vICAgICBjYWxsRnVuYyhkYXRhSXRlbSwgZGF0YSwgZ3JvdXAsIGV2ZW50LmluZGV4KTtcclxuICAgIC8vICAgfVxyXG4gICAgLy8gICByZXR1cm47XHJcbiAgICAvLyB9XHJcbiAgfVxyXG5cclxuICBvblJlbW92ZU5vZGUoZXZlbnQ6IGFueSwgZGF0YUl0ZW06IGFueSwgZGF0YTogWkZpZWxkLCBncm91cDogWkdyb3VwKSB7XHJcbiAgICB0aGlzLmNsaWNrQWN0TmFtZSA9ICdSZW1vdmVOb2RlJztcclxuICB9XHJcblxyXG4gIG9uRWRpdE5vZGUoZXZlbnQ6IGFueSkge1xyXG4gICAgaWYgKHRoaXMuZGF0YS5PbkVkaXROb2RlKSB7XHJcbiAgICAgIGNvbnN0IGZ1bmMgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwRXZhbFZhbHVlLmNhbGwodGhpcywgdGhpcy5kYXRhLk9uRWRpdE5vZGUpO1xyXG4gICAgICBpZiAodHlwZW9mIGZ1bmMgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICBjb25zdCBjYWxsRnVuYyA9IGZ1bmMuYmluZCh0aGlzLmdyb3VwLmN0cmxTY29wZSk7XHJcbiAgICAgICAgY2FsbEZ1bmMoZXZlbnQpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGhhbmRsZU5vZGVEcm9wKGV2ZW50OiBUcmVlSXRlbURyb3BFdmVudCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuZGF0YS5EcmFnZ2FibGUgPT09IGZhbHNlKSB7XHJcbiAgICAgIGV2ZW50LnNldFZhbGlkKGZhbHNlKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaXNOb2RlRHJvcCA9IHRydWU7XHJcbiAgICBjb25zdCBkcm9wSGFuZGxlciA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBFdmFsVmFsdWUuY2FsbChcclxuICAgICAgdGhpcyxcclxuICAgICAgdGhpcy5kYXRhLk9uRHJvcFxyXG4gICAgKTtcclxuICAgIGlmICh0eXBlb2YgZHJvcEhhbmRsZXIgPT09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICBjb25zdCBjYWxsRnVuYyA9IGRyb3BIYW5kbGVyLmJpbmQodGhpcyk7XHJcbiAgICAgIGNhbGxGdW5jKGV2ZW50KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBwcmV2ZW50IGRyb3AgaWYgYXR0ZW1wdGluZyB0byBhZGQgdG8gZmlsZVxyXG4gICAgLy8gaWYgKGlzRmlsZShldmVudC5kZXN0aW5hdGlvbkl0ZW0uaXRlbS5kYXRhSXRlbS50ZXh0KSAmJiBldmVudC5kcm9wUG9zaXRpb24gPT09IERyb3BQb3NpdGlvbi5PdmVyKSB7XHJcbiAgICAvLyAgICAgZXZlbnQuc2V0VmFsaWQoZmFsc2UpO1xyXG4gICAgLy8gfVxyXG4gIH1cclxuXHJcbiAgaGFuZGxlTm9kZURyYWdFbmQoZXZlbnQ6IFRyZWVJdGVtRHJhZ0V2ZW50KSB7XHJcbiAgICBpZiAoIXRoaXMuaXNOb2RlRHJvcCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLmlzTm9kZURyb3AgPSBmYWxzZTtcclxuICAgIHRoaXMuZ2V0SXRlbXMoKTtcclxuICAgIC8vIGNvbnNvbGUubG9nKCdJdGVtczogJywgdGhpcy5pdGVtcyk7XHJcbiAgICBjb25zdCB0YXJnZXQgPSBbXTtcclxuICAgIHRoaXMudXBkYXRlQ2hhbmdlVG9EYXRhU2V0KHRoaXMubm9kZXMsIHRhcmdldCk7XHJcbiAgICAvLyB0aGlzLmRhdGFTZXQgPSB0YXJnZXQ7XHJcbiAgICBaQ29tcG9uZW50SGVscGVyLnNldE1vZGVsVmFsdWUodGhpcy5kYXRhLlZhbHVlLCB0YXJnZXQsIHRoaXMuZ3JvdXApO1xyXG4gICAgdGhpcy5ncm91cC5zdWJqZWN0Lm5leHQoe1xyXG4gICAgICB0eXBlOiBcInp0cmVlLW9uVHJlZU5vZGVEcmFnRW5kXCIsXHJcbiAgICAgIHRhcmdldDogdGhpcy5kYXRhLk9uQ2hhbmdlLFxyXG4gICAgICBkYXRhOiB0YXJnZXRcclxuICAgIH0gYXMgWkNvbXBvbmVudE91dHB1dEV2ZW50KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlQ2hhbmdlVG9EYXRhU2V0KHNvdXJjZTogQXJyYXk8YW55PiwgdGFyZ2V0OiBBcnJheTxhbnk+KSB7XHJcbiAgICBzb3VyY2UuZm9yRWFjaChkID0+IHtcclxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZC5WYWx1ZSkpIHtcclxuICAgICAgICBjb25zdCB0ID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShkKSk7XHJcbiAgICAgICAgdC5WYWx1ZSA9IFtdO1xyXG4gICAgICAgIHRhcmdldC5wdXNoKHQpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlQ2hhbmdlVG9EYXRhU2V0KGQuVmFsdWUsIHQuVmFsdWUpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IHQgPSBPYmplY3QuYXNzaWduKHt9LCBkKTtcclxuICAgICAgICB0LlZhbHVlID0gdC5fRGF0YVZhbHVlO1xyXG4gICAgICAgIGRlbGV0ZSB0Ll9EYXRhVmFsdWU7XHJcbiAgICAgICAgdGFyZ2V0LnB1c2godCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy8gI3JlZ2lvbiBzZWFyY2ggZmVhdHVyZSAtIGZpbHRlcmFibGU6IHRydWVcclxuICBwdWJsaWMgaGFuZGxlRmlsdGVyKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLml0ZW1zLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgIHRoaXMuaXRlbXMgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwRXZhbFZhbHVlLmNhbGwodGhpcywgdGhpcy5kYXRhLlZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5pdGVtcy5sZW5ndGggIT0gMCAmJiB0aGlzLm9yaWdpbmFsSXRlbXMubGVuZ3RoID09IDApIHtcclxuICAgICAgdGhpcy5vcmlnaW5hbEl0ZW1zID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLml0ZW1zKSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0aGlzLml0ZW1zLmxlbmd0aCAhPSAwICYmIHRoaXMub3JpZ2luYWxJdGVtcy5sZW5ndGggIT0gMCkge1xyXG4gICAgICB0aGlzLml0ZW1zID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLm9yaWdpbmFsSXRlbXMpKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBncmlkVmFsdWUgPSB0aGlzLmZpbHRlclByZWZpeCh0aGlzLmRhdGEuVmFsdWUpO1xyXG4gICAgdGhpcy5ncm91cFtncmlkVmFsdWVdID0gdGhpcy5zZWFyY2godGhpcy5pdGVtcywgdmFsdWUpO1xyXG5cclxuICAgIGlmIChaQ29tcG9uZW50SGVscGVyLmlzTnVsbFVuZGVmaW5lZEVtcHR5KHZhbHVlKSkge1xyXG4gICAgICB0aGlzLmNsZWFyRmlsdGVyKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZpbHRlclByZWZpeCh2YWx1ZU5hbWU6IGFueSkge1xyXG4gICAgaWYgKHZhbHVlTmFtZS5zdGFydHNXaXRoKCd6RGF0YS4nKSkge1xyXG4gICAgICByZXR1cm4gdmFsdWVOYW1lLnNsaWNlKDYpO1xyXG4gICAgfVxyXG4gICAgaWYgKHZhbHVlTmFtZS5zdGFydHNXaXRoKCdncm91cC56RGF0YS4nKSkge1xyXG4gICAgICByZXR1cm4gdmFsdWVOYW1lLnNsaWNlKDEyKTtcclxuICAgIH1cclxuICAgIGlmICh2YWx1ZU5hbWUuc3RhcnRzV2l0aCgnZ3JvdXAuJykpIHtcclxuICAgICAgcmV0dXJuIHZhbHVlTmFtZS5zbGljZSg2KTtcclxuICAgIH1cclxuICAgIGlmICh2YWx1ZU5hbWUpIHtcclxuICAgICAgcmV0dXJuIHZhbHVlTmFtZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2VhcmNoKGl0ZW1zOiBhbnlbXSwgdGVybTogc3RyaW5nKTogYW55W10ge1xyXG4gICAgcmV0dXJuIGl0ZW1zLnJlZHVjZSgoYWNjLCBpdGVtKSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLmNvbnRhaW5zKGl0ZW0uTmFtZSwgdGVybSkpIHtcclxuICAgICAgICBhY2MucHVzaChpdGVtKTtcclxuICAgICAgfSBlbHNlIGlmIChpdGVtLlZhbHVlICYmIGl0ZW0uVmFsdWUubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGNvbnN0IG5ld0l0ZW1zID0gdGhpcy5zZWFyY2goaXRlbS5WYWx1ZSwgdGVybSk7XHJcblxyXG4gICAgICAgIGlmIChuZXdJdGVtcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICB2YXIgZmlsdGVySXRlbSA9IGl0ZW07XHJcbiAgICAgICAgICBmaWx0ZXJJdGVtLlZhbHVlID0gbmV3SXRlbXM7XHJcbiAgICAgICAgICBhY2MucHVzaChmaWx0ZXJJdGVtKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGFjYztcclxuICAgIH0sIFtdKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY29udGFpbnModGV4dDogc3RyaW5nLCB0ZXJtOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0ZXh0LnRvTG93ZXJDYXNlKCkuaW5kZXhPZigodGVybSB8fCBcIlwiKS50b0xvd2VyQ2FzZSgpKSA+PSAwO1xyXG4gIH1cclxuICAvLyAjZW5kcmVnaW9uIHNlYXJjaCBmZWF0dXJlIC0gZmlsdGVyYWJsZTogdHJ1ZVxyXG5cclxuICBwdWJsaWMgaGlkZUFkZE5vZGUoaXNIaWRkZW4gPSB0cnVlKSB7XHJcbiAgICB0aGlzLmRhdGEuaXNIaWRlQWxsQWRkTm9kZSA9IGlzSGlkZGVuO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGhpZGVSZW1vdmVOb2RlKGlzSGlkZGVuID0gdHJ1ZSkge1xyXG4gICAgdGhpcy5kYXRhLmlzSGlkZUFsbFJlbW92ZU5vZGUgPSBpc0hpZGRlbjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRSb3dIZWlnaHREb3VibGUodmFsdWU6IGJvb2xlYW4gPSB0cnVlKSB7XHJcbiAgICBjb25zb2xlLndhcm4oJ0RlcHJlY2F0ZWQgLSBubyBsb25kZXIgbmVlZCB0byBzZXQgdGhlIGhlaWdodCcpO1xyXG4gICAgLy8gdGhpcy5kYXRhLmRvdWJsZUhlaWdodCA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNsZWFyRmlsdGVyKCkge1xyXG4gICAgdGhpcy5pdGVtcyA9IFtdO1xyXG4gICAgdGhpcy5vcmlnaW5hbEl0ZW1zID0gW107XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0U2VsZWN0ZWRWYWx1ZXMoKTogQXJyYXk8YW55PiB7XHJcbiAgICBpZiAodGhpcy5hbGxOb2Rlc1dpdG91dEhpZXJhY2h5ICYmIHRoaXMuc2VsZWN0ZWRLZXlzICYmIHRoaXMuYWxsTm9kZXNXaXRvdXRIaWVyYWNoeS5sZW5ndGggPiAwICYmIHRoaXMuc2VsZWN0ZWRLZXlzLmxlbmd0aCA+IDApIHtcclxuICAgICAgcmV0dXJuIHRoaXMuYWxsTm9kZXNXaXRvdXRIaWVyYWNoeS5maWx0ZXIoeCA9PiB0aGlzLnNlbGVjdGVkS2V5cy5pbmNsdWRlcyh4W3RoaXMuZGF0YS5TZWxlY3RPcHRpb25zXSkpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFtdO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldFNlbGVjdGVkVmFsdWVzKGRhdGE6IGFueSkge1xyXG4gICAgaWYgKGRhdGEpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEtleXMgPSBBcnJheS5pc0FycmF5KGRhdGEpID8gZGF0YSA6IFtkYXRhXTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkS2V5cyA9IFtdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbml0U2V0U2VsZWN0ZWRWYWx1ZXMoKSB7XHJcbiAgICBpZiAodGhpcy5kYXRhLlNlbGVjdGVkVmFsdWVzKSB7XHJcbiAgICAgIGNvbnN0IHNlbGVjdGVkTm9kZXMgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwRXZhbFZhbHVlLmNhbGwodGhpcywgdGhpcy5kYXRhLlNlbGVjdGVkVmFsdWVzKTtcclxuICAgICAgdGhpcy5zZXRTZWxlY3RlZFZhbHVlcyhzZWxlY3RlZE5vZGVzKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPGRpdiBzdHlsZT1cIndpZHRoOjEwMCVcIiBbc3R5bGVdPVwiY29tcG9uZW50UHJvcGVydGllcy5zdHlsZS5zdHlsZVwiIGNsYXNzPVwiZTF0YWctc3R5bGVcIlxyXG4gICAgICpuZ0lmPVwiKCEhY29tcG9uZW50UHJvcGVydGllcy5pc1Zpc2libGVGaWVsZCA/IGdyb3VwW2NvbXBvbmVudFByb3BlcnRpZXMuaXNWaXNpYmxlRmllbGRdIDogY29tcG9uZW50UHJvcGVydGllcy5pc1Zpc2libGUpXCI+XHJcbiAgPGtlbmRvLXRyZWV2aWV3IFtub2Rlc109XCJnZXRJdGVtcygpXCJcclxuICAgICAgICAgICAgICAgICAga2VuZG9UcmVlVmlld0V4cGFuZGFibGVcclxuICAgICAgICAgICAgICAgICAgW2tlbmRvVHJlZVZpZXdTZWxlY3RhYmxlXT1cInNlbGVjdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgIGtlbmRvVHJlZVZpZXdEcmFnQW5kRHJvcFxyXG4gICAgICAgICAgICAgICAgICBrZW5kb1RyZWVWaWV3RHJhZ0FuZERyb3BFZGl0aW5nXHJcbiAgICAgICAgICAgICAgICAgIFtpc0V4cGFuZGVkXT1cImlzRXhwYW5kZWRcIlxyXG4gICAgICAgICAgICAgICAgICAoY29sbGFwc2UpPVwiaGFuZGxlQ29sbGFwc2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgIChleHBhbmQpPVwiaGFuZGxlRXhwYW5kKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAobm9kZURyb3ApPVwiaGFuZGxlTm9kZURyb3AoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgIChub2RlRHJhZ0VuZCk9XCJoYW5kbGVOb2RlRHJhZ0VuZCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvblNlbGVjdGlvbkNoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgWyhzZWxlY3RlZEtleXMpXT1cInNlbGVjdGVkS2V5c1wiXHJcbiAgICAgICAgICAgICAgICAgIGtlbmRvVHJlZVZpZXdIaWVyYXJjaHlCaW5kaW5nXHJcbiAgICAgICAgICAgICAgICAgIGNoaWxkcmVuRmllbGQ9XCJWYWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgIHRleHRGaWVsZD1cIk5hbWVcIlxyXG4gICAgICAgICAgICAgICAgICBbc2VsZWN0QnldPVwiZGF0YS5TZWxlY3RPcHRpb25zXCJcclxuICAgICAgICAgICAgICAgICAgW2ZpbHRlcmFibGVdPVwiZGF0YS5GaWx0ZXJhYmxlXCJcclxuICAgICAgICAgICAgICAgICAgKGZpbHRlckNoYW5nZSk9XCJoYW5kbGVGaWx0ZXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLnN0eWxlLnN0eWxlMVwiIGNsYXNzPVwiZTF0YWctc3R5bGUxXCJcclxuICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiZGF0YS5DbGFzc1wiPlxyXG4gICAgPG5nLXRlbXBsYXRlIGtlbmRvVHJlZVZpZXdOb2RlVGVtcGxhdGUgbGV0LWRhdGFJdGVtICNub2RldGVtcGxhdGU+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ0cmVlLWNvbnRlbnQtY29udGFpbmVyXCI+XHJcbiAgICAgICAgPGlvbi1idXR0b24gKm5nSWY9XCIhIWRhdGEuT25BZGROb2RlICYmICFkYXRhLmlzSGlkZUFsbEFkZE5vZGVcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cIm9uQWRkTm9kZSgkZXZlbnQsIGRhdGFJdGVtLCBkYXRhLCBncm91cClcIlxyXG4gICAgICAgICAgc3R5bGU9XCJ6b29tOiAwLjY7IG1hcmdpbjogMCAwIDAgMnB4O1wiIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIHNpemU9XCJtZWRpdW1cIlxyXG4gICAgICAgICAgW2hpZGRlbl09XCIoISFkYXRhSXRlbS5PbkFkZE5vZGVWaXNpYmxlKVwiIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLnN0eWxlLnN0eWxlMlwiIGNsYXNzPVwiZTF0YWctc3R5bGUyXCI+XHJcbiAgICAgICAgICA8ZmEtaWNvbiBbaWNvbl09XCIncGx1cydcIj48L2ZhLWljb24+XHJcbiAgICAgICAgPC9pb24tYnV0dG9uPlxyXG4gICAgICAgIDxpb24tYnV0dG9uICpuZ0lmPVwiISFkYXRhLk9uUmVtb3ZlTm9kZSAmJiAhZGF0YS5pc0hpZGVBbGxSZW1vdmVOb2RlXCIgKGNsaWNrKT1cIm9uUmVtb3ZlTm9kZSgkZXZlbnQsIGRhdGFJdGVtLCBkYXRhLCBncm91cClcIlxyXG4gICAgICAgICAgICAgICAgc3R5bGU9XCJ6b29tOiAwLjY7IG1hcmdpbjogMCAwIDAgMTBweDtcIiBjb2xvcj1cImRhbmdlclwiIG1hdC1yYWlzZWQtYnV0dG9uIHNpemU9XCJtZWRpdW1cIlxyXG4gICAgICAgICAgICAgICAgW2hpZGRlbl09XCIoISFkYXRhSXRlbS5PblJlbW92ZU5vZGVWaXNpYmxlKVwiIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLnN0eWxlLnN0eWxlM1wiIGNsYXNzPVwiZTF0YWctc3R5bGUzXCI+XHJcbiAgICAgICAgPGZhLWljb24gW2ljb25dPVwiJ21pbnVzJ1wiPjwvZmEtaWNvbj5cclxuICAgICAgICA8L2lvbi1idXR0b24+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJidG4tc2VwZXJhdG9yXCI+PC9zcGFuPlxyXG5cclxuICAgICAgICA8aW9uLWxhYmVsIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLnN0eWxlLnN0eWxlNFwiIGNsYXNzPVwiZTF0YWctc3R5bGU0XCIgW25nQ2xhc3NdPVwiZGF0YUl0ZW0uY2xhc3NcIj5cclxuICAgICAgICB7eyBnZXRUZW1wbGF0ZShkYXRhSXRlbSwgZGF0YSwgZ3JvdXApIH19XHJcbiAgICAgICAgPC9pb24tbGFiZWw+XHJcbiAgICAgICAgPCEtLWRvbSB0byBkaXNwbGF5IHRoZSB0cmVlIHJvdyBwcm9wZXJseSBpZiB0aGVyZSBubyBidXR0b24gdG8gc2hvdy4tLT5cclxuICAgICAgICA8IS0tIDxkaXYgKm5nSWY9XCIoIWRhdGEuT25BZGROb2RlICYmICFkYXRhLk9uUmVtb3ZlTm9kZSkgJiYgZGF0YS5kb3VibGVIZWlnaHRcIiBzdHlsZT1cInpvb206IDAuNjsgbWFyZ2luOiAxNXB4IDAgMTVweCAwO1wiPlxyXG4gICAgICAgICAgJm5ic3A7XHJcbiAgICAgICAgPC9kaXY+IC0tPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgPC9rZW5kby10cmVldmlldz5cclxuPC9kaXY+XHJcbiJdfQ==
432
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoienRyZWUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvenRyZWUvenRyZWUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvenRyZWUvenRyZWUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0JBQStCO0FBQy9CLE9BQU8sRUFBRSxTQUFTLEVBQVUsU0FBUyxFQUE2QixNQUFNLGVBQWUsQ0FBQztBQU94RiwyQ0FBMkM7QUFDM0MsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFFcEYsT0FBTyxFQUFjLGdCQUFnQixFQUE4RCxNQUFNLGlCQUFpQixDQUFDOzs7Ozs7OztBQVMzSCxNQUFNLE9BQU8sY0FBZSxTQUFRLG9CQUFvQjtJQWN0RCxZQUNTLGdCQUFtQztRQUUxQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQTtRQUZoQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQW1CO1FBWjVDLFVBQUssR0FBZSxFQUFFLENBQUM7UUFDdkIsa0JBQWEsR0FBZSxFQUFFLENBQUM7UUFDL0IsZUFBVSxHQUFHLEtBQUssQ0FBQztRQUNaLFVBQUssR0FBRyxFQUFFLFlBQVksRUFBRSxFQUFFLEVBQUUsQ0FBQztRQUM3QixjQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ2YsaUJBQVksR0FBVSxFQUFFLENBQUM7UUFDekIsY0FBUyxHQUF1QixFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsQ0FBQztRQUNuRCxVQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ1YsMkJBQXNCLEdBQUcsRUFBRSxDQUFDO1FBQzVCLGlCQUFZLEdBQUcsSUFBSSxDQUFDO1FBOEVyQixlQUFVLEdBQUcsQ0FBQyxRQUFhLEVBQUUsS0FBYSxFQUFFLEVBQUU7WUFD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LElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUM5SCxPQUFPLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDeEc7UUFDRCxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFTSxpQkFBaUIsQ0FBQyxJQUFTO1FBQ2hDLElBQUksSUFBSSxFQUFFO1lBQ1IsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDekQ7YUFDSTtZQUNILElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO1NBQ3hCO0lBQ0gsQ0FBQztJQUVPLHFCQUFxQjtRQUMzQixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQzVCLE1BQU0sYUFBYSxHQUFHLGdCQUFnQixDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUM5RixJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxDQUFDLENBQUM7U0FDdkM7SUFDSCxDQUFDOzsyR0FuZFUsY0FBYzsrRkFBZCxjQUFjLG9NQ3BCM0IsKzNGQWdEQTsyRkQ1QmEsY0FBYztrQkFOMUIsU0FBUzsrQkFDRSxXQUFXO3dHQU13QixZQUFZO3NCQUF4RCxTQUFTO3VCQUFDLGNBQWMsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyIvKioqKioqKioqKiBBbmd1bGFyICoqKioqKioqKiovXHJcbmltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBWaWV3Q2hpbGQsIEVsZW1lbnRSZWYsIEFmdGVyVmlld0luaXQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxuLyoqKioqKioqKiogSW9uaWMgKioqKioqKioqKi9cclxuXHJcbi8qKioqKioqKioqIFBsdWdpbiAqKioqKioqKioqL1xyXG5pbXBvcnQgeyBUcmVlSXRlbURyb3BFdmVudCwgVHJlZUl0ZW1EcmFnRXZlbnQsIFNlbGVjdGFibGVTZXR0aW5ncyB9IGZyb20gXCJAcHJvZ3Jlc3Mva2VuZG8tYW5ndWxhci10cmVldmlld1wiO1xyXG5cclxuLyoqKioqKioqKiogQ29tcG9uZW50ICYgU2VydmljZSAqKioqKioqKioqL1xyXG5pbXBvcnQgeyBEYXRhTGlzdGluZ0ZpZWxkQmFzZSB9IGZyb20gXCIuLi9jb21wb25lbnRzL2RhdGFsaXN0aW5nZmllbGRiYXNlLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBaQ29tcG9uZW50U2VydmljZSB9IGZyb20gXCIuLi9zZXJ2aWNlcy96Y29tcG9uZW50LnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgWkNvbXBvbmVudCwgWkNvbXBvbmVudEhlbHBlciwgWkNvbXBvbmVudE91dHB1dEV2ZW50LCBaRmllbGQsIFpHcm91cCwgWlRyZWVUZW1wbGF0ZVBhcmFtcyB9IGZyb20gXCJtbWhnbG9iYWwtemNvcmVcIjtcclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJhcHAtenRyZWVcIixcclxuICB0ZW1wbGF0ZVVybDogXCIuL3p0cmVlLmNvbXBvbmVudC5odG1sXCIsXHJcbiAgc3R5bGVVcmxzOiBbXCIuL3p0cmVlLmNvbXBvbmVudC5zY3NzXCJdXHJcbn0pXHJcblxyXG5leHBvcnQgY2xhc3MgWnRyZWVDb21wb25lbnQgZXh0ZW5kcyBEYXRhTGlzdGluZ0ZpZWxkQmFzZSBpbXBsZW1lbnRzIFpDb21wb25lbnQsIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgQFZpZXdDaGlsZChcIm5vZGV0ZW1wbGF0ZVwiLCB7IHN0YXRpYzogdHJ1ZSB9KSBub2RldGVtcGxhdGU6IEVsZW1lbnRSZWY7XHJcblxyXG4gIGl0ZW1zOiBBcnJheTxhbnk+ID0gW107XHJcbiAgb3JpZ2luYWxJdGVtczogQXJyYXk8YW55PiA9IFtdO1xyXG4gIGlzTm9kZURyb3AgPSBmYWxzZTtcclxuICBwdWJsaWMgc3RhdGUgPSB7IGV4cGFuZGVka2V5czogW10gfTtcclxuICBwdWJsaWMgaXRlbUluZGV4ID0gW107XHJcbiAgcHVibGljIHNlbGVjdGVkS2V5czogYW55W10gPSBbXTtcclxuICBwdWJsaWMgc2VsZWN0aW9uOiBTZWxlY3RhYmxlU2V0dGluZ3MgPSB7IG1vZGU6IFwic2luZ2xlXCIgfTtcclxuICBwdWJsaWMgbm9kZXMgPSBbXTtcclxuICBwcml2YXRlIGFsbE5vZGVzV2l0b3V0SGllcmFjaHkgPSBbXTtcclxuICBwcml2YXRlIGNsaWNrQWN0TmFtZSA9IG51bGw7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIGNvbXBvbmVudFNlcnZpY2U6IFpDb21wb25lbnRTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICBzdXBlcihjb21wb25lbnRTZXJ2aWNlKVxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICBzdXBlci5pbml0Q29tcG9uZW50KCkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgdGhpcy5nZXRJdGVtcygpO1xyXG4gICAgICB0aGlzLnNldEFsbE9yaWdpbmFsSXRlbXMoKTtcclxuICAgICAgdGhpcy5pbml0U2V0U2VsZWN0ZWRWYWx1ZXMoKTtcclxuICAgICAgdGhpcy5kYXRhLlNlbGVjdE9wdGlvbnMgPSB0aGlzLmRhdGEuU2VsZWN0T3B0aW9ucyB8fCAnSWQnO1xyXG4gICAgICB0aGlzLnNlbGVjdGlvbi5tb2RlID0gdGhpcy5kYXRhLk11bHRpcGxlID8gXCJtdWx0aXBsZVwiIDogXCJzaW5nbGVcIjtcclxuXHJcbiAgICAgIGNvbnN0IGlzRXhwYW5kQWxsTm9kZXMgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwVmFsdWUodGhpcy5kYXRhLlRyZWV2aWV3RXhwYW5kQWxsIGFzIGFueSwgdGhpcy5ncm91cCk7XHJcbiAgICAgIGlmIChpc0V4cGFuZEFsbE5vZGVzKSB7XHJcbiAgICAgICAgdGhpcy5leHBhbmRBbGwoKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5kYXRhLmlzSGlkZUFsbEFkZE5vZGUgPSB0aGlzLmRhdGEuaXNIaWRlQWxsQWRkTm9kZSA9PSB1bmRlZmluZWQgPyBmYWxzZSA6IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBWYWx1ZSh0aGlzLmRhdGEuaXNIaWRlQWxsQWRkTm9kZSBhcyBhbnksIHRoaXMuZ3JvdXApO1xyXG4gICAgICB0aGlzLmRhdGEuaXNIaWRlQWxsUmVtb3ZlTm9kZSA9IHRoaXMuZGF0YS5pc0hpZGVBbGxSZW1vdmVOb2RlID09IHVuZGVmaW5lZCA/IGZhbHNlIDogWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cFZhbHVlKHRoaXMuZGF0YS5pc0hpZGVBbGxSZW1vdmVOb2RlIGFzIGFueSwgdGhpcy5ncm91cCk7XHJcblxyXG4gICAgICB0aGlzLnNldERlZmF1bHRFeHBhbmRhYmxlKCk7XHJcbiAgICAgIC8vIGZpeCB0ZXh0IGFsaWduIGlzc3VlXHJcbiAgICAgIC8vIGlmICh0aGlzLmRhdGEuT25BZGROb2RlIHx8IHRoaXMuZGF0YS5PblJlbW92ZU5vZGUpIHtcclxuICAgICAgLy8gICB0aGlzLmFic29sdXRlVGV4dCA9IHRydWU7XHJcbiAgICAgIC8vIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgLy8gY29uc3QgY29tcG9uZW50SWQgPSBaQ29tcG9uZW50SGVscGVyLmdldENvbXBvbmVudElkKHRoaXMuZGF0YSk7XHJcbiAgICAvLyB0aGlzLmdyb3VwLnpDb21wb25lbnRzW2NvbXBvbmVudElkXSA9IHRoaXM7XHJcbiAgICBaQ29tcG9uZW50SGVscGVyLnJlZ2lzdGVyQ29tcG9uZW50KHRoaXMpO1xyXG4gICAgdGhpcy5jb21wb25lbnRTZXJ2aWNlLmRlY3JlbWVudENvbXBvbmVudENvdW50ZXJGb3JGaWVsZCh0aGlzLmRhdGEpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRBbGxPcmlnaW5hbEl0ZW1zKCkge1xyXG4gICAgdGhpcy5hbGxOb2Rlc1dpdG91dEhpZXJhY2h5ID0gW107XHJcbiAgICBpZiAodGhpcy5ub2Rlcykge1xyXG4gICAgICBmb3IgKGNvbnN0IHBhcmVudE5vZGUgb2YgdGhpcy5ub2Rlcykge1xyXG4gICAgICAgIHRoaXMuYWxsTm9kZXNXaXRvdXRIaWVyYWNoeS5wdXNoKHBhcmVudE5vZGUpO1xyXG4gICAgICAgIGlmIChwYXJlbnROb2RlWydWYWx1ZSddICYmIEFycmF5LmlzQXJyYXkocGFyZW50Tm9kZVsnVmFsdWUnXSkpIHtcclxuICAgICAgICAgIGZvciAoY29uc3QgY2hpbGROb2RlIG9mIHBhcmVudE5vZGVbJ1ZhbHVlJ10pIHtcclxuICAgICAgICAgICAgdGhpcy5hbGxOb2Rlc1dpdG91dEhpZXJhY2h5LnB1c2goY2hpbGROb2RlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldEl0ZW1zKCkge1xyXG4gICAgLy8gaWYgKHRoaXMubW9kZWxOYW1lKSB7XHJcbiAgICAvLyAgIHJldHVybiB0aGlzLmdyb3VwW3RoaXMubW9kZWxOYW1lXTtcclxuICAgIC8vIH1cclxuICAgIGNvbnN0IGZpZWxkVmFsdWUgPSB0aGlzLmRhdGEuVmFsdWU7XHJcbiAgICBpZiAoZmllbGRWYWx1ZSkge1xyXG4gICAgICB0aGlzLm5vZGVzID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cEV2YWxWYWx1ZS5jYWxsKHRoaXMsIHRoaXMuZGF0YS5WYWx1ZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLndhcm4oJ3p0cmVlIGZpZWxkIFZhbHVlIGlzIG5vdCBzZXQgY29ycmVjdGx5LiAnLCBmaWVsZFZhbHVlKTtcclxuICAgICAgdGhpcy5ub2RlcyA9IFtdO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLm5vZGVzO1xyXG5cclxuICAgIC8vIGlmIChmaWVsZFZhbHVlICYmIGZpZWxkVmFsdWUuc3RhcnRzV2l0aCgnZ3JvdXAuJykpIHtcclxuICAgIC8vICAgLy8gY29uc3QgbmV3RGF0YVNldCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5kYXRhU2V0KSk7XHJcbiAgICAvLyAgIGNvbnN0IG5hbWUgPSBmaWVsZFZhbHVlLnNsaWNlKDYpO1xyXG4gICAgLy8gICAvLyB0aGlzLmdyb3VwW25hbWVdID0gdGhpcy5zZXRWYWx1ZVByb3BUb051bGxBdExlYWZMZWF2ZSh0aGlzLmdyb3VwW25hbWVdKTtcclxuICAgIC8vICAgdGhpcy5tb2RlbE5hbWUgPSBuYW1lO1xyXG4gICAgLy8gICByZXR1cm4gdGhpcy5ncm91cFtuYW1lXTtcclxuICAgIC8vIH0gZWxzZSB7XHJcbiAgICAvLyAgIGNvbnNvbGUud2FybignenRyZWUgZmllbGQgVmFsdWUgaXMgbm90IHNldCBjb3JyZWN0bHkuICcsIGZpZWxkVmFsdWUpO1xyXG4gICAgLy8gfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGlzRXhwYW5kZWQgPSAoZGF0YUl0ZW06IGFueSwgaW5kZXg6IHN0cmluZykgPT4ge1xyXG4gICAgLy8gY29uc29sZS5sb2coaW5kZXgpO1xyXG4gICAgcmV0dXJuIHRoaXMuc3RhdGUuZXhwYW5kZWRrZXlzLmluZGV4T2YoaW5kZXgpID4gLTE7XHJcbiAgICAvLyByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBleHBhbmROb2RlID0gKGZpZWxkOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcsIHNldEFzU2VsZWN0ZWQ6IGJvb2xlYW4pID0+IHtcclxuICAgIHRoaXMuaXRlbUluZGV4ID0gW107XHJcbiAgICB0aGlzLmdldEl0ZW1zKCk7XHJcblxyXG4gICAgdGhpcy5zZWFyY2hOb2RlSW5kZXgodGhpcy5ub2RlcywgdmFsdWUsICcnLCBmaWVsZCk7XHJcblxyXG4gICAgY29uc3QgaW5kZXggPSB0aGlzLml0ZW1JbmRleDtcclxuICAgIGlmIChzZXRBc1NlbGVjdGVkKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRLZXlzID0gaW5kZXg7XHJcbiAgICB9XHJcbiAgICBjb25zdCBpbmRleEFyciA9IFtdO1xyXG4gICAgaW5kZXguZm9yRWFjaCgoaTogYW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IGFyciA9IGkuc3BsaXQoJ18nKTtcclxuICAgICAgbGV0IGluZGV4cyA9IFwiXCI7XHJcbiAgICAgIGFyci5mb3JFYWNoKCh4OiBhbnkpID0+IHtcclxuICAgICAgICBpbmRleHMgPSBpbmRleHMuY29uY2F0KFwiX1wiKS5jb25jYXQoeCk7XHJcbiAgICAgICAgaW5kZXhBcnIucHVzaChpbmRleHMuc3Vic3RyaW5nKDEpKTtcclxuICAgICAgfSlcclxuICAgIH0pO1xyXG4gICAgdGhpcy5zdGF0ZS5leHBhbmRlZGtleXMgPSB0aGlzLnN0YXRlLmV4cGFuZGVka2V5cy5jb25jYXQoaW5kZXhBcnIpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNvbGxhcHNlTm9kZSA9IChmaWVsZDogc3RyaW5nLCB2YWx1ZTogc3RyaW5nLCBjb2xsYXBzZVBhcmVudDogYm9vbGVhbikgPT4ge1xyXG4gICAgdGhpcy5pdGVtSW5kZXggPSBbXTtcclxuICAgIHRoaXMuZ2V0SXRlbXMoKTtcclxuXHJcbiAgICB0aGlzLnNlYXJjaE5vZGVJbmRleCh0aGlzLm5vZGVzLCB2YWx1ZSwgJycsIGZpZWxkKTtcclxuXHJcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuaXRlbUluZGV4O1xyXG4gICAgbGV0IGluZGV4QXJyID0gW107XHJcbiAgICBpZiAoY29sbGFwc2VQYXJlbnQpIHtcclxuICAgICAgaW5kZXguZm9yRWFjaCgoaTogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc3QgYXJyID0gaS5zcGxpdCgnXycpO1xyXG4gICAgICAgIGxldCBpbmRleHMgPSBcIlwiO1xyXG4gICAgICAgIGFyci5mb3JFYWNoKCh4OiBhbnkpID0+IHtcclxuICAgICAgICAgIGluZGV4cyA9IGluZGV4cy5jb25jYXQoXCJfXCIpLmNvbmNhdCh4KTtcclxuICAgICAgICAgIGluZGV4QXJyLnB1c2goaW5kZXhzLnN1YnN0cmluZygxKSk7XHJcbiAgICAgICAgfSlcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpbmRleEFyciA9IGluZGV4O1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc3RhdGUuZXhwYW5kZWRrZXlzID0gdGhpcy5zdGF0ZS5leHBhbmRlZGtleXMuZmlsdGVyKHYgPT4ge1xyXG4gICAgICByZXR1cm4gIWluZGV4QXJyLmluY2x1ZGVzKHYpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2VhcmNoTm9kZUluZGV4KG5vZGU6IGFueSwgdmFsdWU6IHN0cmluZywga2V5OiBzdHJpbmcsIGZpZWxkOiBzdHJpbmcpIHtcclxuICAgIGlmIChrZXkpIHtcclxuICAgICAga2V5ID0ga2V5ICsgJ18nO1xyXG4gICAgfVxyXG4gICAgbm9kZS5mb3JFYWNoKChkOiBhbnksIGk6IG51bWJlcikgPT4ge1xyXG4gICAgICBpZiAoZFtmaWVsZF0gPT09IE51bWJlcih2YWx1ZSkgfHwgZFtmaWVsZF0gPT09IHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5pdGVtSW5kZXggPSB0aGlzLml0ZW1JbmRleC5jb25jYXQoa2V5ICsgJycgKyBpKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShkLlZhbHVlKSkge1xyXG4gICAgICAgIGNvbnN0IGsgPSBrZXkgKyAnJyArIGk7XHJcbiAgICAgICAgdGhpcy5zZWFyY2hOb2RlSW5kZXgoZC5WYWx1ZSwgdmFsdWUsIGssIGZpZWxkKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZXhwYW5kQWxsID0gKCkgPT4ge1xyXG4gICAgdGhpcy5nZXRJdGVtcygpO1xyXG4gICAgaWYgKHRoaXMubm9kZXMpIHtcclxuICAgICAgdGhpcy5leHBhbmRBbGxOb2RlKHRoaXMubm9kZXMsICcnKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBjb2xsYXBzZUFsbCA9ICgpID0+IHtcclxuICAgIHRoaXMuc3RhdGUuZXhwYW5kZWRrZXlzID0gW107XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV4cGFuZEFsbE5vZGUobm9kZTogYW55LCBrZXk6IHN0cmluZykge1xyXG4gICAgaWYgKGtleSkge1xyXG4gICAgICBrZXkgPSBrZXkgKyAnXyc7XHJcbiAgICB9XHJcbiAgICBub2RlLmZvckVhY2goKGQ6IGFueSwgaTogbnVtYmVyKSA9PiB7XHJcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGQuVmFsdWUpKSB7XHJcbiAgICAgICAgY29uc3QgayA9IGtleSArICcnICsgaTtcclxuICAgICAgICB0aGlzLnN0YXRlLmV4cGFuZGVka2V5cyA9IHRoaXMuc3RhdGUuZXhwYW5kZWRrZXlzLmNvbmNhdChrKTtcclxuICAgICAgICB0aGlzLmV4cGFuZEFsbE5vZGUoZC5WYWx1ZSwgayk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGhhbmRsZUNvbGxhcHNlKG5vZGUpIHtcclxuICAgIHRoaXMuc3RhdGUuZXhwYW5kZWRrZXlzID0gdGhpcy5zdGF0ZS5leHBhbmRlZGtleXMuZmlsdGVyKGsgPT4gayAhPT0gbm9kZS5pbmRleCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaGFuZGxlRXhwYW5kKG5vZGUpIHtcclxuICAgIHRoaXMuc3RhdGUuZXhwYW5kZWRrZXlzID0gdGhpcy5zdGF0ZS5leHBhbmRlZGtleXMuY29uY2F0KG5vZGUuaW5kZXgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0VGVtcGxhdGUoZGF0YUl0ZW06IGFueSwgZGF0YTogWkZpZWxkLCBncm91cDogWkdyb3VwKSB7XHJcbiAgICBpZiAoZGF0YS5JdGVtVGVtcGxhdGUpIHtcclxuICAgICAgY29uc3QgZ2V0VGVtcGxhdGVGdW5jID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cEV2YWxWYWx1ZS5jYWxsKFxyXG4gICAgICAgIHRoaXMsXHJcbiAgICAgICAgZGF0YS5JdGVtVGVtcGxhdGVcclxuICAgICAgKTtcclxuICAgICAgaWYgKCFnZXRUZW1wbGF0ZUZ1bmMpIHtcclxuICAgICAgICBjb25zb2xlLndhcm4oXCJUaGUgKFwiICsgZGF0YS5JdGVtVGVtcGxhdGUgKyBcIikgaXMgbm90IGRlZmluZWQgY29ycmVjdGx5LiBWYWx1ZSBjb250YWluczogXCIsIGdldFRlbXBsYXRlRnVuYyk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gZ2V0VGVtcGxhdGVGdW5jKHtcclxuICAgICAgICBkYXRhSXRlbSxcclxuICAgICAgICBkYXRhLFxyXG4gICAgICAgIGdyb3VwXHJcbiAgICAgIH0gYXMgWlRyZWVUZW1wbGF0ZVBhcmFtcyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhkYXRhSXRlbSlcclxuICAgICAgICAuZmlsdGVyKGRhdGEgPT4gdHlwZW9mIGRhdGEgPT09IFwic3RyaW5nXCIpXHJcbiAgICAgICAgLmpvaW4oXCIsIFwiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNvbnZlcnRUb1RyZWVJdGVtcyhkYXRhU2V0OiBhbnlbXSkge1xyXG4gICAgY29uc29sZS53YXJuKFwiVGhpcyBtZXRob2QgaXMgdG8gYmUgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSBaQ29tcG9uZW50SGVscGVyLmNvbnZlcnRUb1RyZWVJdGVtcygpXCIpO1xyXG5cclxuICAgIGNvbnN0IHRvVHJlZUl0ZW1zOiBhbnlbXSA9IFtdO1xyXG4gICAgY29uc3QgdHJlZUluZGV4OiBhbnkgPSB7fTtcclxuICAgIGNvbnN0IHBlbmRpbmdJdGVtczogYW55W10gPSBbXTtcclxuICAgIGRhdGFTZXQuZm9yRWFjaCgoZDogYW55KSA9PiB7XHJcbiAgICAgIGlmICghZC5QYXJlbnRJZCkge1xyXG4gICAgICAgIHRvVHJlZUl0ZW1zLnB1c2goZCk7XHJcbiAgICAgICAgdHJlZUluZGV4W2QuSWRdID0gZDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAodHJlZUluZGV4W2QuUGFyZW50SWRdKSB7XHJcbiAgICAgICAgICBjb25zdCBwYXJlbnRJdGVtID0gdHJlZUluZGV4W2QuUGFyZW50SWRdO1xyXG4gICAgICAgICAgaWYgKCFwYXJlbnRJdGVtLlZhbHVlKSB7XHJcbiAgICAgICAgICAgIHBhcmVudEl0ZW0uVmFsdWUgPSBbXTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHBhcmVudEl0ZW0uVmFsdWUucHVzaChkKTtcclxuICAgICAgICAgIHRyZWVJbmRleFtkLklkXSA9IGQ7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHBlbmRpbmdJdGVtcy5wdXNoKGQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKHBlbmRpbmdJdGVtcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHBlbmRpbmdJdGVtcy5mb3JFYWNoKChkOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAodHJlZUluZGV4W2QuUGFyZW50SWRdKSB7XHJcbiAgICAgICAgICBjb25zdCBwYXJlbnRJdGVtID0gdHJlZUluZGV4W2QuUGFyZW50SWRdO1xyXG4gICAgICAgICAgcGFyZW50SXRlbS5WYWx1ZS5wdXNoKGQpO1xyXG4gICAgICAgICAgdHJlZUluZGV4W2QuSWRdID0gZDtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0b1RyZWVJdGVtcztcclxuICB9XHJcblxyXG4gIG9uU2VsZWN0aW9uQ2hhbmdlKGV2ZW50OiBhbnkpIHtcclxuICAgIGxldCB0YXJnZXROYW1lOiBib29sZWFuIHwgc3RyaW5nO1xyXG4gICAgaWYgKHRoaXMuY2xpY2tBY3ROYW1lKSB7XHJcbiAgICAgIHN3aXRjaCAodGhpcy5jbGlja0FjdE5hbWUpIHtcclxuICAgICAgICBjYXNlICdBZGROb2RlJzpcclxuICAgICAgICAgIHRhcmdldE5hbWUgPSB0aGlzLmRhdGEuT25BZGROb2RlO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnUmVtb3ZlTm9kZSc6XHJcbiAgICAgICAgICB0YXJnZXROYW1lID0gdGhpcy5kYXRhLk9uUmVtb3ZlTm9kZTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0YXJnZXROYW1lKSB7XHJcbiAgICAgIHRhcmdldE5hbWUgPSB0aGlzLmRhdGEuT25JdGVtQ2xpY2s7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jbGlja0FjdE5hbWUgPSBudWxsO1xyXG4gICAgdGhpcy5ncm91cC5zdWJqZWN0Lm5leHQoe1xyXG4gICAgICB0eXBlOiBcInp0cmVlX29uU2VsZWN0aW9uQ2hhbmdlXCIsXHJcbiAgICAgIHRhcmdldDogdGFyZ2V0TmFtZSxcclxuICAgICAgZGF0YTogZXZlbnQuZGF0YUl0ZW0sXHJcbiAgICAgIGV2ZW50OiBldmVudC5pbmRleFxyXG4gICAgfSBhcyBaQ29tcG9uZW50T3V0cHV0RXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgb25BZGROb2RlKGV2ZW50OiBhbnksIGRhdGFJdGVtOiBhbnksIGRhdGE6IFpGaWVsZCwgZ3JvdXA6IFpHcm91cCkge1xyXG4gICAgdGhpcy5jbGlja0FjdE5hbWUgPSAnQWRkTm9kZSc7XHJcbiAgICAvLyBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIC8vIGlmICh0aGlzLmRhdGEuT25BZGROb2RlKSB7XHJcbiAgICAvLyAgIGNvbnN0IGZ1bmMgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwRXZhbFZhbHVlLmNhbGwodGhpcywgdGhpcy5kYXRhLk9uQWRkTm9kZSk7XHJcbiAgICAvLyAgIGlmICh0eXBlb2YgZnVuYyA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgLy8gICAgIGNvbnN0IGNhbGxGdW5jID0gZnVuYy5iaW5kKHRoaXMuZ3JvdXAuY3RybFNjb3BlKTtcclxuICAgIC8vICAgICBjYWxsRnVuYyhkYXRhSXRlbSwgZGF0YSwgZ3JvdXAsIGV2ZW50LmluZGV4KTtcclxuICAgIC8vICAgfVxyXG4gICAgLy8gICByZXR1cm47XHJcbiAgICAvLyB9XHJcbiAgfVxyXG5cclxuICBvblJlbW92ZU5vZGUoZXZlbnQ6IGFueSwgZGF0YUl0ZW06IGFueSwgZGF0YTogWkZpZWxkLCBncm91cDogWkdyb3VwKSB7XHJcbiAgICB0aGlzLmNsaWNrQWN0TmFtZSA9ICdSZW1vdmVOb2RlJztcclxuICB9XHJcblxyXG4gIG9uRWRpdE5vZGUoZXZlbnQ6IGFueSkge1xyXG4gICAgaWYgKHRoaXMuZGF0YS5PbkVkaXROb2RlKSB7XHJcbiAgICAgIGNvbnN0IGZ1bmMgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwRXZhbFZhbHVlLmNhbGwodGhpcywgdGhpcy5kYXRhLk9uRWRpdE5vZGUpO1xyXG4gICAgICBpZiAodHlwZW9mIGZ1bmMgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICBjb25zdCBjYWxsRnVuYyA9IGZ1bmMuYmluZCh0aGlzLmdyb3VwLmN0cmxTY29wZSk7XHJcbiAgICAgICAgY2FsbEZ1bmMoZXZlbnQpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGhhbmRsZU5vZGVEcm9wKGV2ZW50OiBUcmVlSXRlbURyb3BFdmVudCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuZGF0YS5EcmFnZ2FibGUgPT09IGZhbHNlKSB7XHJcbiAgICAgIGV2ZW50LnNldFZhbGlkKGZhbHNlKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaXNOb2RlRHJvcCA9IHRydWU7XHJcbiAgICBjb25zdCBkcm9wSGFuZGxlciA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBFdmFsVmFsdWUuY2FsbChcclxuICAgICAgdGhpcyxcclxuICAgICAgdGhpcy5kYXRhLk9uRHJvcFxyXG4gICAgKTtcclxuICAgIGlmICh0eXBlb2YgZHJvcEhhbmRsZXIgPT09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICBjb25zdCBjYWxsRnVuYyA9IGRyb3BIYW5kbGVyLmJpbmQodGhpcyk7XHJcbiAgICAgIGNhbGxGdW5jKGV2ZW50KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBwcmV2ZW50IGRyb3AgaWYgYXR0ZW1wdGluZyB0byBhZGQgdG8gZmlsZVxyXG4gICAgLy8gaWYgKGlzRmlsZShldmVudC5kZXN0aW5hdGlvbkl0ZW0uaXRlbS5kYXRhSXRlbS50ZXh0KSAmJiBldmVudC5kcm9wUG9zaXRpb24gPT09IERyb3BQb3NpdGlvbi5PdmVyKSB7XHJcbiAgICAvLyAgICAgZXZlbnQuc2V0VmFsaWQoZmFsc2UpO1xyXG4gICAgLy8gfVxyXG4gIH1cclxuXHJcbiAgaGFuZGxlTm9kZURyYWdFbmQoZXZlbnQ6IFRyZWVJdGVtRHJhZ0V2ZW50KSB7XHJcbiAgICBpZiAoIXRoaXMuaXNOb2RlRHJvcCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLmlzTm9kZURyb3AgPSBmYWxzZTtcclxuICAgIHRoaXMuZ2V0SXRlbXMoKTtcclxuICAgIC8vIGNvbnNvbGUubG9nKCdJdGVtczogJywgdGhpcy5pdGVtcyk7XHJcbiAgICBjb25zdCB0YXJnZXQgPSBbXTtcclxuICAgIHRoaXMudXBkYXRlQ2hhbmdlVG9EYXRhU2V0KHRoaXMubm9kZXMsIHRhcmdldCk7XHJcbiAgICAvLyB0aGlzLmRhdGFTZXQgPSB0YXJnZXQ7XHJcbiAgICBaQ29tcG9uZW50SGVscGVyLnNldE1vZGVsVmFsdWUodGhpcy5kYXRhLlZhbHVlLCB0YXJnZXQsIHRoaXMuZ3JvdXApO1xyXG4gICAgdGhpcy5ncm91cC5zdWJqZWN0Lm5leHQoe1xyXG4gICAgICB0eXBlOiBcInp0cmVlLW9uVHJlZU5vZGVEcmFnRW5kXCIsXHJcbiAgICAgIHRhcmdldDogdGhpcy5kYXRhLk9uQ2hhbmdlLFxyXG4gICAgICBkYXRhOiB0YXJnZXRcclxuICAgIH0gYXMgWkNvbXBvbmVudE91dHB1dEV2ZW50KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlQ2hhbmdlVG9EYXRhU2V0KHNvdXJjZTogQXJyYXk8YW55PiwgdGFyZ2V0OiBBcnJheTxhbnk+KSB7XHJcbiAgICBzb3VyY2UuZm9yRWFjaChkID0+IHtcclxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZC5WYWx1ZSkpIHtcclxuICAgICAgICBjb25zdCB0ID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShkKSk7XHJcbiAgICAgICAgdC5WYWx1ZSA9IFtdO1xyXG4gICAgICAgIHRhcmdldC5wdXNoKHQpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlQ2hhbmdlVG9EYXRhU2V0KGQuVmFsdWUsIHQuVmFsdWUpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IHQgPSBPYmplY3QuYXNzaWduKHt9LCBkKTtcclxuICAgICAgICB0LlZhbHVlID0gdC5fRGF0YVZhbHVlO1xyXG4gICAgICAgIGRlbGV0ZSB0Ll9EYXRhVmFsdWU7XHJcbiAgICAgICAgdGFyZ2V0LnB1c2godCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy8gI3JlZ2lvbiBzZWFyY2ggZmVhdHVyZSAtIGZpbHRlcmFibGU6IHRydWVcclxuICBwdWJsaWMgaGFuZGxlRmlsdGVyKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLml0ZW1zLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgIHRoaXMuaXRlbXMgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwRXZhbFZhbHVlLmNhbGwodGhpcywgdGhpcy5kYXRhLlZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5pdGVtcy5sZW5ndGggIT0gMCAmJiB0aGlzLm9yaWdpbmFsSXRlbXMubGVuZ3RoID09IDApIHtcclxuICAgICAgdGhpcy5vcmlnaW5hbEl0ZW1zID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLml0ZW1zKSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0aGlzLml0ZW1zLmxlbmd0aCAhPSAwICYmIHRoaXMub3JpZ2luYWxJdGVtcy5sZW5ndGggIT0gMCkge1xyXG4gICAgICB0aGlzLml0ZW1zID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLm9yaWdpbmFsSXRlbXMpKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBncmlkVmFsdWUgPSB0aGlzLmZpbHRlclByZWZpeCh0aGlzLmRhdGEuVmFsdWUpO1xyXG4gICAgdGhpcy5ncm91cFtncmlkVmFsdWVdID0gdGhpcy5zZWFyY2godGhpcy5pdGVtcywgdmFsdWUpO1xyXG5cclxuICAgIGlmIChaQ29tcG9uZW50SGVscGVyLmlzTnVsbFVuZGVmaW5lZEVtcHR5KHZhbHVlKSkge1xyXG4gICAgICB0aGlzLmNsZWFyRmlsdGVyKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZpbHRlclByZWZpeCh2YWx1ZU5hbWU6IGFueSkge1xyXG4gICAgaWYgKHZhbHVlTmFtZS5zdGFydHNXaXRoKCd6RGF0YS4nKSkge1xyXG4gICAgICByZXR1cm4gdmFsdWVOYW1lLnNsaWNlKDYpO1xyXG4gICAgfVxyXG4gICAgaWYgKHZhbHVlTmFtZS5zdGFydHNXaXRoKCdncm91cC56RGF0YS4nKSkge1xyXG4gICAgICByZXR1cm4gdmFsdWVOYW1lLnNsaWNlKDEyKTtcclxuICAgIH1cclxuICAgIGlmICh2YWx1ZU5hbWUuc3RhcnRzV2l0aCgnZ3JvdXAuJykpIHtcclxuICAgICAgcmV0dXJuIHZhbHVlTmFtZS5zbGljZSg2KTtcclxuICAgIH1cclxuICAgIGlmICh2YWx1ZU5hbWUpIHtcclxuICAgICAgcmV0dXJuIHZhbHVlTmFtZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2VhcmNoKGl0ZW1zOiBhbnlbXSwgdGVybTogc3RyaW5nKTogYW55W10ge1xyXG4gICAgcmV0dXJuIGl0ZW1zLnJlZHVjZSgoYWNjLCBpdGVtKSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLmNvbnRhaW5zKGl0ZW0uTmFtZSwgdGVybSkpIHtcclxuICAgICAgICBhY2MucHVzaChpdGVtKTtcclxuICAgICAgfSBlbHNlIGlmIChpdGVtLlZhbHVlICYmIGl0ZW0uVmFsdWUubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGNvbnN0IG5ld0l0ZW1zID0gdGhpcy5zZWFyY2goaXRlbS5WYWx1ZSwgdGVybSk7XHJcblxyXG4gICAgICAgIGlmIChuZXdJdGVtcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICB2YXIgZmlsdGVySXRlbSA9IGl0ZW07XHJcbiAgICAgICAgICBmaWx0ZXJJdGVtLlZhbHVlID0gbmV3SXRlbXM7XHJcbiAgICAgICAgICBhY2MucHVzaChmaWx0ZXJJdGVtKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGFjYztcclxuICAgIH0sIFtdKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY29udGFpbnModGV4dDogc3RyaW5nLCB0ZXJtOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0ZXh0LnRvTG93ZXJDYXNlKCkuaW5kZXhPZigodGVybSB8fCBcIlwiKS50b0xvd2VyQ2FzZSgpKSA+PSAwO1xyXG4gIH1cclxuICAvLyAjZW5kcmVnaW9uIHNlYXJjaCBmZWF0dXJlIC0gZmlsdGVyYWJsZTogdHJ1ZVxyXG5cclxuICBwdWJsaWMgaGlkZUFkZE5vZGUoaXNIaWRkZW4gPSB0cnVlKSB7XHJcbiAgICB0aGlzLmRhdGEuaXNIaWRlQWxsQWRkTm9kZSA9IGlzSGlkZGVuO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGhpZGVSZW1vdmVOb2RlKGlzSGlkZGVuID0gdHJ1ZSkge1xyXG4gICAgdGhpcy5kYXRhLmlzSGlkZUFsbFJlbW92ZU5vZGUgPSBpc0hpZGRlbjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRSb3dIZWlnaHREb3VibGUodmFsdWU6IGJvb2xlYW4gPSB0cnVlKSB7XHJcbiAgICBjb25zb2xlLndhcm4oJ0RlcHJlY2F0ZWQgLSBubyBsb25kZXIgbmVlZCB0byBzZXQgdGhlIGhlaWdodCcpO1xyXG4gICAgLy8gdGhpcy5kYXRhLmRvdWJsZUhlaWdodCA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNsZWFyRmlsdGVyKCkge1xyXG4gICAgdGhpcy5pdGVtcyA9IFtdO1xyXG4gICAgdGhpcy5vcmlnaW5hbEl0ZW1zID0gW107XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0RGVmYXVsdEV4cGFuZGFibGUoKSB7XHJcbiAgICBpZiAodGhpcy5kYXRhLlRyZWVMaXN0SW5pdGlhbGx5RXhwYW5kZWREYXRhSWRzKSB7XHJcbiAgICAgIGNvbnN0IGlkTGlzdCA9IHR5cGVvZiB0aGlzLmRhdGEuVHJlZUxpc3RJbml0aWFsbHlFeHBhbmRlZERhdGFJZHMgPT0gJ3N0cmluZycgPyBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwVmFsdWUodGhpcy5kYXRhLlRyZWVMaXN0SW5pdGlhbGx5RXhwYW5kZWREYXRhSWRzIGFzIHN0cmluZywgdGhpcy5ncm91cCkgOiB0aGlzLmRhdGEuVHJlZUxpc3RJbml0aWFsbHlFeHBhbmRlZERhdGFJZHM7XHJcbiAgICAgIGlmIChpZExpc3QgJiYgQXJyYXkuaXNBcnJheShpZExpc3QpKSB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZS5leHBhbmRlZGtleXMgPSBpZExpc3Q7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRTZWxlY3RlZFZhbHVlcygpOiBBcnJheTxhbnk+IHtcclxuICAgIGlmICh0aGlzLmFsbE5vZGVzV2l0b3V0SGllcmFjaHkgJiYgdGhpcy5zZWxlY3RlZEtleXMgJiYgdGhpcy5hbGxOb2Rlc1dpdG91dEhpZXJhY2h5Lmxlbmd0aCA+IDAgJiYgdGhpcy5zZWxlY3RlZEtleXMubGVuZ3RoID4gMCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5hbGxOb2Rlc1dpdG91dEhpZXJhY2h5LmZpbHRlcih4ID0+IHRoaXMuc2VsZWN0ZWRLZXlzLmluY2x1ZGVzKHhbdGhpcy5kYXRhLlNlbGVjdE9wdGlvbnNdKSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gW107XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0U2VsZWN0ZWRWYWx1ZXMoZGF0YTogYW55KSB7XHJcbiAgICBpZiAoZGF0YSkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkS2V5cyA9IEFycmF5LmlzQXJyYXkoZGF0YSkgPyBkYXRhIDogW2RhdGFdO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRLZXlzID0gW107XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluaXRTZXRTZWxlY3RlZFZhbHVlcygpIHtcclxuICAgIGlmICh0aGlzLmRhdGEuU2VsZWN0ZWRWYWx1ZXMpIHtcclxuICAgICAgY29uc3Qgc2VsZWN0ZWROb2RlcyA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBFdmFsVmFsdWUuY2FsbCh0aGlzLCB0aGlzLmRhdGEuU2VsZWN0ZWRWYWx1ZXMpO1xyXG4gICAgICB0aGlzLnNldFNlbGVjdGVkVmFsdWVzKHNlbGVjdGVkTm9kZXMpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCI8ZGl2IHN0eWxlPVwid2lkdGg6MTAwJVwiIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLnN0eWxlLnN0eWxlXCIgY2xhc3M9XCJlMXRhZy1zdHlsZVwiXHJcbiAgICAgKm5nSWY9XCIoISFjb21wb25lbnRQcm9wZXJ0aWVzLmlzVmlzaWJsZUZpZWxkID8gZ3JvdXBbY29tcG9uZW50UHJvcGVydGllcy5pc1Zpc2libGVGaWVsZF0gOiBjb21wb25lbnRQcm9wZXJ0aWVzLmlzVmlzaWJsZSlcIj5cclxuICA8a2VuZG8tdHJlZXZpZXcgW25vZGVzXT1cImdldEl0ZW1zKClcIlxyXG4gICAgICAgICAgICAgICAgICBrZW5kb1RyZWVWaWV3RXhwYW5kYWJsZVxyXG4gICAgICAgICAgICAgICAgICBba2VuZG9UcmVlVmlld1NlbGVjdGFibGVdPVwic2VsZWN0aW9uXCJcclxuICAgICAgICAgICAgICAgICAga2VuZG9UcmVlVmlld0RyYWdBbmREcm9wXHJcbiAgICAgICAgICAgICAgICAgIGtlbmRvVHJlZVZpZXdEcmFnQW5kRHJvcEVkaXRpbmdcclxuICAgICAgICAgICAgICAgICAgW2lzRXhwYW5kZWRdPVwiaXNFeHBhbmRlZFwiXHJcbiAgICAgICAgICAgICAgICAgIChjb2xsYXBzZSk9XCJoYW5kbGVDb2xsYXBzZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgKGV4cGFuZCk9XCJoYW5kbGVFeHBhbmQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgIChub2RlRHJvcCk9XCJoYW5kbGVOb2RlRHJvcCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgKG5vZGVEcmFnRW5kKT1cImhhbmRsZU5vZGVEcmFnRW5kKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uU2VsZWN0aW9uQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICBbKHNlbGVjdGVkS2V5cyldPVwic2VsZWN0ZWRLZXlzXCJcclxuICAgICAgICAgICAgICAgICAga2VuZG9UcmVlVmlld0hpZXJhcmNoeUJpbmRpbmdcclxuICAgICAgICAgICAgICAgICAgY2hpbGRyZW5GaWVsZD1cIlZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgdGV4dEZpZWxkPVwiTmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgIFtzZWxlY3RCeV09XCJkYXRhLlNlbGVjdE9wdGlvbnNcIlxyXG4gICAgICAgICAgICAgICAgICBbZmlsdGVyYWJsZV09XCJkYXRhLkZpbHRlcmFibGVcIlxyXG4gICAgICAgICAgICAgICAgICAoZmlsdGVyQ2hhbmdlKT1cImhhbmRsZUZpbHRlcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgW3N0eWxlXT1cImNvbXBvbmVudFByb3BlcnRpZXMuc3R5bGUuc3R5bGUxXCIgY2xhc3M9XCJlMXRhZy1zdHlsZTFcIlxyXG4gICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJkYXRhLkNsYXNzXCI+XHJcbiAgICA8bmctdGVtcGxhdGUga2VuZG9UcmVlVmlld05vZGVUZW1wbGF0ZSBsZXQtZGF0YUl0ZW0gI25vZGV0ZW1wbGF0ZT5cclxuICAgICAgPGRpdiBjbGFzcz1cInRyZWUtY29udGVudC1jb250YWluZXJcIj5cclxuICAgICAgICA8aW9uLWJ1dHRvbiAqbmdJZj1cIiEhZGF0YS5PbkFkZE5vZGUgJiYgIWRhdGEuaXNIaWRlQWxsQWRkTm9kZVwiXHJcbiAgICAgICAgICAoY2xpY2spPVwib25BZGROb2RlKCRldmVudCwgZGF0YUl0ZW0sIGRhdGEsIGdyb3VwKVwiXHJcbiAgICAgICAgICBzdHlsZT1cInpvb206IDAuNjsgbWFyZ2luOiAwIDAgMCAycHg7XCIgbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgc2l6ZT1cIm1lZGl1bVwiXHJcbiAgICAgICAgICBbaGlkZGVuXT1cIighIWRhdGFJdGVtLk9uQWRkTm9kZVZpc2libGUpXCIgW3N0eWxlXT1cImNvbXBvbmVudFByb3BlcnRpZXMuc3R5bGUuc3R5bGUyXCIgY2xhc3M9XCJlMXRhZy1zdHlsZTJcIj5cclxuICAgICAgICAgIDxmYS1pY29uIFtpY29uXT1cIidwbHVzJ1wiPjwvZmEtaWNvbj5cclxuICAgICAgICA8L2lvbi1idXR0b24+XHJcbiAgICAgICAgPGlvbi1idXR0b24gKm5nSWY9XCIhIWRhdGEuT25SZW1vdmVOb2RlICYmICFkYXRhLmlzSGlkZUFsbFJlbW92ZU5vZGVcIiAoY2xpY2spPVwib25SZW1vdmVOb2RlKCRldmVudCwgZGF0YUl0ZW0sIGRhdGEsIGdyb3VwKVwiXHJcbiAgICAgICAgICAgICAgICBzdHlsZT1cInpvb206IDAuNjsgbWFyZ2luOiAwIDAgMCAxMHB4O1wiIGNvbG9yPVwiZGFuZ2VyXCIgbWF0LXJhaXNlZC1idXR0b24gc2l6ZT1cIm1lZGl1bVwiXHJcbiAgICAgICAgICAgICAgICBbaGlkZGVuXT1cIighIWRhdGFJdGVtLk9uUmVtb3ZlTm9kZVZpc2libGUpXCIgW3N0eWxlXT1cImNvbXBvbmVudFByb3BlcnRpZXMuc3R5bGUuc3R5bGUzXCIgY2xhc3M9XCJlMXRhZy1zdHlsZTNcIj5cclxuICAgICAgICA8ZmEtaWNvbiBbaWNvbl09XCInbWludXMnXCI+PC9mYS1pY29uPlxyXG4gICAgICAgIDwvaW9uLWJ1dHRvbj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cImJ0bi1zZXBlcmF0b3JcIj48L3NwYW4+XHJcblxyXG4gICAgICAgIDxpb24tbGFiZWwgW3N0eWxlXT1cImNvbXBvbmVudFByb3BlcnRpZXMuc3R5bGUuc3R5bGU0XCIgY2xhc3M9XCJlMXRhZy1zdHlsZTRcIiBbbmdDbGFzc109XCJkYXRhSXRlbS5jbGFzc1wiPlxyXG4gICAgICAgIHt7IGdldFRlbXBsYXRlKGRhdGFJdGVtLCBkYXRhLCBncm91cCkgfX1cclxuICAgICAgICA8L2lvbi1sYWJlbD5cclxuICAgICAgICA8IS0tZG9tIHRvIGRpc3BsYXkgdGhlIHRyZWUgcm93IHByb3Blcmx5IGlmIHRoZXJlIG5vIGJ1dHRvbiB0byBzaG93Li0tPlxyXG4gICAgICAgIDwhLS0gPGRpdiAqbmdJZj1cIighZGF0YS5PbkFkZE5vZGUgJiYgIWRhdGEuT25SZW1vdmVOb2RlKSAmJiBkYXRhLmRvdWJsZUhlaWdodFwiIHN0eWxlPVwiem9vbTogMC42OyBtYXJnaW46IDE1cHggMCAxNXB4IDA7XCI+XHJcbiAgICAgICAgICAmbmJzcDtcclxuICAgICAgICA8L2Rpdj4gLS0+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICA8L2tlbmRvLXRyZWV2aWV3PlxyXG48L2Rpdj5cclxuIl19