@myrtex-org/form 1.0.48 → 1.0.49

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.
Files changed (20) hide show
  1. package/esm2022/lib/modules/object-form/components/elements/content/tooltip/content-tooltip.component.mjs +3 -3
  2. package/esm2022/lib/modules/object-form/components/elements/input/checkbox-group/input-checkbox-group.component.mjs +1 -1
  3. package/esm2022/lib/modules/object-form/components/elements/input/date/input-date.component.mjs +1 -1
  4. package/esm2022/lib/modules/object-form/components/elements/input/file/input-file.component.mjs +1 -1
  5. package/esm2022/lib/modules/object-form/components/elements/input/inn/input-inn.component.mjs +1 -1
  6. package/esm2022/lib/modules/object-form/components/elements/input/link/input-link.component.mjs +1 -1
  7. package/esm2022/lib/modules/object-form/components/elements/input/number/input-number.component.mjs +1 -1
  8. package/esm2022/lib/modules/object-form/components/elements/input/phone/input-phone.component.mjs +1 -1
  9. package/esm2022/lib/modules/object-form/components/elements/input/radio-group/input-radio-group.component.mjs +1 -1
  10. package/esm2022/lib/modules/object-form/components/elements/input/select/input-select.component.mjs +1 -1
  11. package/esm2022/lib/modules/object-form/components/elements/input/switch/input-switch.component.mjs +1 -1
  12. package/esm2022/lib/modules/object-form/components/elements/input/table/components/input-table-modal/form-dispenser-modal/form-dispenser-modal.component.mjs +2 -2
  13. package/esm2022/lib/modules/object-form/components/elements/input/table/components/input-table-modal/input-table-modal.component.mjs +2 -2
  14. package/esm2022/lib/modules/object-form/components/elements/input/table/input-table.component.mjs +1 -1
  15. package/esm2022/lib/modules/object-form/components/elements/input/text/input-text.component.mjs +1 -1
  16. package/esm2022/lib/modules/object-form/components/elements/input/textarea/input-textarea.component.mjs +1 -1
  17. package/esm2022/lib/modules/object-form/components/form-dispenser/form-dispenser.component.mjs +2 -2
  18. package/fesm2022/myrtex-org-form.mjs +18 -18
  19. package/fesm2022/myrtex-org-form.mjs.map +1 -1
  20. package/package.json +1 -1
@@ -45,7 +45,7 @@ export class InputTextareaComponent extends BaseFieldComponent {
45
45
  return !(this.settings.options.minLength && model.value && this.settings.options.minLength > model.value.length);
46
46
  }
47
47
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: InputTextareaComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
48
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: InputTextareaComponent, selector: "app-input-textarea", usesInheritance: true, ngImport: i0, template: "@if (settings) {\r\n <div class=\"input-textarea-content\">\r\n @if (settings.options.label) {\r\n <mrx-label\r\n [required]=\"settings.options.required\"\r\n [tooltip]=\"settings.options.tooltip || ''\"\r\n >\r\n {{ settings.options.label }}\r\n </mrx-label>\r\n }\r\n\r\n @if (!settings.options.editor) {\r\n <mrx-input-textarea\r\n [(ngModel)]=\"model.value\"\r\n [fields]=\"autosaveFields\"\r\n [rows]=\"2\"\r\n [autosize]=\"true\"\r\n [readonly]=\"false\"\r\n [placeholder]=\"settings.options.placeholder || '\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u0442\u0435\u043A\u0441\u0442'\"\r\n [disabled]=\"disabled\"\r\n [minlength]=\"settings.options.minLength || 0\"\r\n [maxlength]=\"settings.options.maxLength || 0\"\r\n [invalid]=\"getInvalid\"\r\n [invalidMessage]=\"getInvalidMessage\"\r\n (modelChange)=\"dispatchModify($event)\"\r\n\r\n ></mrx-input-textarea>\r\n } @else {\r\n <mrx-editor\r\n [(ngModel)]=\"model.value\"\r\n [readonly]=\"false\"\r\n [fields]=\"autosaveFields\"\r\n [toolbar]=\"config\"\r\n [invalid]=\"getInvalid\"\r\n [invalidMessage]=\"getInvalidMessage\"\r\n [placeholder]=\"settings.options.placeholder || '\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u0442\u0435\u043A\u0441\u0442'\"\r\n (modelChange)=\"dispatchModify($event)\"\r\n (change)=\"onChangeInput()\"\r\n ></mrx-editor>\r\n }\r\n\r\n @if (settings.options.minLength) {\r\n <mrx-hint-error-message\r\n message=\"\u041C\u0438\u043D\u0438\u043C\u0430\u043B\u044C\u043D\u043E\u0435 \u043A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432 \u2014 {{ settings.options.minLength }}\"\r\n [value]=\"validateValue\"\r\n [minLength]=\"settings.options.minLength\"\r\n ></mrx-hint-error-message>\r\n }\r\n </div>\r\n}\r\n", styles: [""], dependencies: [{ kind: "component", type: i1.LabelComponent, selector: "mrx-label", inputs: ["requiredHidden", "required", "boldLabel", "disabled", "placeholder", "label", "customClasses", "triggerTextPosition", "isPublicInfo", "publicInfoTooltip", "isSwitch", "switchLabel", "switchValue", "isCheckbox", "checkboxLabel", "checkboxValue", "counter", "linkText", "linkPrevent", "linkType", "linkMonochrome", "href", "triggerType", "tooltip", "tooltipInitialVisible", "isSaveToStorage"], outputs: ["changeSwitchValue", "changeCheckboxValue", "clickedLink"] }, { kind: "component", type: i1.EditorComponent, selector: "mrx-editor", inputs: ["fields", "toolbar", "maxLength", "minHeight", "customClasses", "placeholder", "disabled", "readonly", "iframe", "defaultInlineStyle", "config", "editHTMLDocumentMode", "defaultMode", "invalid", "invalidMessage", "checkInvalid"], outputs: ["changed", "modelChange"] }, { kind: "component", type: i1.InputTextareaComponent, selector: "mrx-input-textarea", inputs: ["fields", "disabled", "readonly", "autosize", "maxlength", "minlength", "rows", "placeholder", "invalid", "invalidMessage", "checkInvalid", "customClasses", "mask", "size"], outputs: ["changed", "blurred", "modelChange"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.MinLengthValidator, selector: "[minlength][formControlName],[minlength][formControl],[minlength][ngModel]", inputs: ["minlength"] }, { kind: "directive", type: i2.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i1.HintErrorMessageComponent, selector: "mrx-hint-error-message", inputs: ["message", "value", "maxValue", "minValue", "minLength", "maxLength", "checkInvalid"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
48
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: InputTextareaComponent, selector: "app-input-textarea", usesInheritance: true, ngImport: i0, template: "@if (settings) {\r\n <div class=\"input-textarea-content\">\r\n @if (settings.options.label) {\r\n <mrx-label\r\n [required]=\"settings.options.required\"\r\n [tooltip]=\"settings.options.tooltip || ''\"\r\n >\r\n {{ settings.options.label }}\r\n </mrx-label>\r\n }\r\n\r\n @if (!settings.options.editor) {\r\n <mrx-input-textarea\r\n [(ngModel)]=\"model.value\"\r\n [fields]=\"autosaveFields\"\r\n [rows]=\"2\"\r\n [autosize]=\"true\"\r\n [readonly]=\"false\"\r\n [placeholder]=\"settings.options.placeholder || '\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u0442\u0435\u043A\u0441\u0442'\"\r\n [disabled]=\"disabled\"\r\n [minlength]=\"settings.options.minLength || 0\"\r\n [maxlength]=\"settings.options.maxLength || 0\"\r\n [invalid]=\"getInvalid\"\r\n [invalidMessage]=\"getInvalidMessage\"\r\n (modelChange)=\"dispatchModify($event)\"\r\n\r\n ></mrx-input-textarea>\r\n } @else {\r\n <mrx-editor\r\n [(ngModel)]=\"model.value\"\r\n [readonly]=\"false\"\r\n [fields]=\"autosaveFields\"\r\n [toolbar]=\"config\"\r\n [invalid]=\"getInvalid\"\r\n [invalidMessage]=\"getInvalidMessage\"\r\n [placeholder]=\"settings.options.placeholder || '\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u0442\u0435\u043A\u0441\u0442'\"\r\n (modelChange)=\"dispatchModify($event)\"\r\n (change)=\"onChangeInput()\"\r\n ></mrx-editor>\r\n }\r\n\r\n @if (settings.options.minLength) {\r\n <mrx-hint-error-message\r\n message=\"\u041C\u0438\u043D\u0438\u043C\u0430\u043B\u044C\u043D\u043E\u0435 \u043A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432 \u2014 {{ settings.options.minLength }}\"\r\n [value]=\"validateValue\"\r\n [minLength]=\"settings.options.minLength\"\r\n ></mrx-hint-error-message>\r\n }\r\n </div>\r\n}\r\n", styles: [""], dependencies: [{ kind: "component", type: i1.LabelComponent, selector: "mrx-label", inputs: ["requiredHidden", "required", "boldLabel", "disabled", "placeholder", "label", "customClasses", "triggerTextPosition", "isPublicInfo", "publicInfoTooltip", "isSwitch", "switchLabel", "switchValue", "switchSize", "isCheckbox", "checkboxLabel", "checkboxValue", "counter", "linkText", "linkPrevent", "linkType", "linkMonochrome", "href", "triggerType", "tooltip", "tooltipInitialVisible", "isSaveToStorage"], outputs: ["changeSwitchValue", "changeCheckboxValue", "clickedLink"] }, { kind: "component", type: i1.EditorComponent, selector: "mrx-editor", inputs: ["fields", "toolbar", "maxLength", "minHeight", "customClasses", "placeholder", "disabled", "readonly", "iframe", "defaultInlineStyle", "config", "editHTMLDocumentMode", "defaultMode", "invalid", "invalidMessage", "checkInvalid"], outputs: ["changed", "modelChange"] }, { kind: "component", type: i1.InputTextareaComponent, selector: "mrx-input-textarea", inputs: ["sanitizeEnabled", "allowedPattern", "fields", "disabled", "readonly", "autosize", "maxlength", "minlength", "rows", "placeholder", "invalid", "invalidMessage", "checkInvalid", "customClasses", "mask", "size"], outputs: ["changed", "blurred", "modelChange"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.MinLengthValidator, selector: "[minlength][formControlName],[minlength][formControl],[minlength][ngModel]", inputs: ["minlength"] }, { kind: "directive", type: i2.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i1.HintErrorMessageComponent, selector: "mrx-hint-error-message", inputs: ["message", "value", "maxValue", "minValue", "minLength", "maxLength", "checkInvalid"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
49
49
  }
50
50
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: InputTextareaComponent, decorators: [{
51
51
  type: Component,
@@ -48,7 +48,7 @@ export class FormDispenser {
48
48
  return visible;
49
49
  }
50
50
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FormDispenser, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
51
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: FormDispenser, isStandalone: true, selector: "app-form-dispenser", inputs: { sectionSettings: "sectionSettings", values: "values", valueMode: "valueMode" }, outputs: { changed: "changed" }, ngImport: i0, template: "@if (sectionSettings?.components?.length) {\r\n <div class=\"row application-form__content\">\r\n @for (component of sectionSettings?.components; track component.id) {\r\n @switch (component.type) {\r\n @case ('group') {\r\n <ng-container\r\n [ngTemplateOutlet]=\"dragGroup\"\r\n [ngTemplateOutletContext]=\"{component: component}\"\r\n ></ng-container>\r\n }\r\n @default {\r\n <ng-container\r\n [ngTemplateOutlet]=\"dragInput\"\r\n [ngTemplateOutletContext]=\"{component: component}\"\r\n ></ng-container>\r\n }\r\n }\r\n }\r\n </div>\r\n}\r\n\r\n<ng-template #dragGroup let-component='component'>\r\n <div class=\"col col-{{component.options.width}}\">\r\n <div class=\"row\">\r\n <div class=\"col-12\">\r\n @if (component.options.label) {\r\n <mrx-label [tooltip]=\"component.options.tooltip || ''\">\r\n {{ component.options.label }}\r\n </mrx-label>\r\n }\r\n </div>\r\n </div>\r\n\r\n <div class=\"application-form__group p-2\">\r\n @if (component.components.length) {\r\n <div class=\"row\">\r\n @for (component of component.components; track component.id) {\r\n @switch (component.type) {\r\n @case ('group') {\r\n <ng-container\r\n [ngTemplateOutlet]=\"dragGroup\"\r\n [ngTemplateOutletContext]=\"{component: component}\"\r\n ></ng-container>\r\n }\r\n @default {\r\n <ng-container\r\n [ngTemplateOutlet]=\"dragInput\"\r\n [ngTemplateOutletContext]=\"{component: component}\"\r\n ></ng-container>\r\n }\r\n }\r\n }\r\n </div>\r\n } @else {\r\n <p class=\"p-2\">\u042D\u043B\u0435\u043C\u0435\u043D\u0442\u044B \u0433\u0440\u0443\u043F\u043F\u044B \u043E\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044E\u0442</p>\r\n }\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #dragInput let-component='component'>\r\n @if (isComponentVisible(component.sysName)) {\r\n <div class=\"col col-{{component.options.width}}\">\r\n <div class=\"application-form__input\">\r\n <ng-template\r\n appComponentFactory\r\n [type]=\"component.type\"\r\n [data]=\"component\"\r\n [map]=\"mapper\"\r\n [values]=\"values\"\r\n [valueMode]=\"valueMode\"\r\n (changed)=\"componentValueChanged($event)\"\r\n ></ng-template>\r\n </div>\r\n </div>\r\n }\r\n</ng-template>\r\n", styles: [".application-form__group{border-radius:4px;border:1px solid var(--neutral-bg-stroke-default, #DBDFE5)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: LabelModule }, { kind: "component", type: i2.LabelComponent, selector: "mrx-label", inputs: ["requiredHidden", "required", "boldLabel", "disabled", "placeholder", "label", "customClasses", "triggerTextPosition", "isPublicInfo", "publicInfoTooltip", "isSwitch", "switchLabel", "switchValue", "isCheckbox", "checkboxLabel", "checkboxValue", "counter", "linkText", "linkPrevent", "linkType", "linkMonochrome", "href", "triggerType", "tooltip", "tooltipInitialVisible", "isSaveToStorage"], outputs: ["changeSwitchValue", "changeCheckboxValue", "clickedLink"] }, { kind: "directive", type: ComponentFactoryDirective, selector: "[appComponentFactory]", inputs: ["type", "data", "values", "valueMode", "map"], outputs: ["changed"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
51
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: FormDispenser, isStandalone: true, selector: "app-form-dispenser", inputs: { sectionSettings: "sectionSettings", values: "values", valueMode: "valueMode" }, outputs: { changed: "changed" }, ngImport: i0, template: "@if (sectionSettings?.components?.length) {\r\n <div class=\"row application-form__content\">\r\n @for (component of sectionSettings?.components; track component.id) {\r\n @switch (component.type) {\r\n @case ('group') {\r\n <ng-container\r\n [ngTemplateOutlet]=\"dragGroup\"\r\n [ngTemplateOutletContext]=\"{component: component}\"\r\n ></ng-container>\r\n }\r\n @default {\r\n <ng-container\r\n [ngTemplateOutlet]=\"dragInput\"\r\n [ngTemplateOutletContext]=\"{component: component}\"\r\n ></ng-container>\r\n }\r\n }\r\n }\r\n </div>\r\n}\r\n\r\n<ng-template #dragGroup let-component='component'>\r\n <div class=\"col col-{{component.options.width}}\">\r\n <div class=\"row\">\r\n <div class=\"col-12\">\r\n @if (component.options.label) {\r\n <mrx-label [tooltip]=\"component.options.tooltip || ''\">\r\n {{ component.options.label }}\r\n </mrx-label>\r\n }\r\n </div>\r\n </div>\r\n\r\n <div class=\"application-form__group p-2\">\r\n @if (component.components.length) {\r\n <div class=\"row\">\r\n @for (component of component.components; track component.id) {\r\n @switch (component.type) {\r\n @case ('group') {\r\n <ng-container\r\n [ngTemplateOutlet]=\"dragGroup\"\r\n [ngTemplateOutletContext]=\"{component: component}\"\r\n ></ng-container>\r\n }\r\n @default {\r\n <ng-container\r\n [ngTemplateOutlet]=\"dragInput\"\r\n [ngTemplateOutletContext]=\"{component: component}\"\r\n ></ng-container>\r\n }\r\n }\r\n }\r\n </div>\r\n } @else {\r\n <p class=\"p-2\">\u042D\u043B\u0435\u043C\u0435\u043D\u0442\u044B \u0433\u0440\u0443\u043F\u043F\u044B \u043E\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044E\u0442</p>\r\n }\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #dragInput let-component='component'>\r\n @if (isComponentVisible(component.sysName)) {\r\n <div class=\"col col-{{component.options.width}}\">\r\n <div class=\"application-form__input\">\r\n <ng-template\r\n appComponentFactory\r\n [type]=\"component.type\"\r\n [data]=\"component\"\r\n [map]=\"mapper\"\r\n [values]=\"values\"\r\n [valueMode]=\"valueMode\"\r\n (changed)=\"componentValueChanged($event)\"\r\n ></ng-template>\r\n </div>\r\n </div>\r\n }\r\n</ng-template>\r\n", styles: [".application-form__group{border-radius:4px;border:1px solid var(--neutral-bg-stroke-default, #DBDFE5)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: LabelModule }, { kind: "component", type: i2.LabelComponent, selector: "mrx-label", inputs: ["requiredHidden", "required", "boldLabel", "disabled", "placeholder", "label", "customClasses", "triggerTextPosition", "isPublicInfo", "publicInfoTooltip", "isSwitch", "switchLabel", "switchValue", "switchSize", "isCheckbox", "checkboxLabel", "checkboxValue", "counter", "linkText", "linkPrevent", "linkType", "linkMonochrome", "href", "triggerType", "tooltip", "tooltipInitialVisible", "isSaveToStorage"], outputs: ["changeSwitchValue", "changeCheckboxValue", "clickedLink"] }, { kind: "directive", type: ComponentFactoryDirective, selector: "[appComponentFactory]", inputs: ["type", "data", "values", "valueMode", "map"], outputs: ["changed"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
52
52
  }
53
53
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FormDispenser, decorators: [{
54
54
  type: Component,
@@ -66,4 +66,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
66
66
  }], changed: [{
67
67
  type: Output
68
68
  }] } });
69
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1kaXNwZW5zZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXlydGV4LWZvcm0vc3JjL2xpYi9tb2R1bGVzL29iamVjdC1mb3JtL2NvbXBvbmVudHMvZm9ybS1kaXNwZW5zZXIvZm9ybS1kaXNwZW5zZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXlydGV4LWZvcm0vc3JjL2xpYi9tb2R1bGVzL29iamVjdC1mb3JtL2NvbXBvbmVudHMvZm9ybS1kaXNwZW5zZXIvZm9ybS1kaXNwZW5zZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFlBQVksRUFBRSxNQUFNLEVBQ3BCLEtBQUssRUFHTCxNQUFNLEVBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUVwQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUVsRSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUVwRyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDbEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7OztBQWM3QyxNQUFNLE9BQU8sYUFBYTtJQVoxQjtRQWFVLFdBQU0sR0FBVSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDN0IsY0FBUyxHQUFzQixNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQTtRQUV4RCxvQkFBZSxHQUFtQixFQUFFLENBQUM7UUFDckMsc0NBQWlDLEdBQXNDLEVBQUUsQ0FBQztRQUUzRSxXQUFNLEdBQUcsb0JBQW9CLENBQUM7UUFHckIsV0FBTSxHQUFpQixFQUFFLENBQUM7UUFDMUIsY0FBUyxHQUFzQixNQUFNLENBQUM7UUFFNUMsWUFBTyxHQUE4RCxJQUFJLFlBQVksRUFBK0MsQ0FBQztLQXNDaEo7SUFwQ0MsUUFBUTtRQUNOLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLDRCQUE0QixDQUFDO2FBQzNGLFNBQVMsQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUNuQixJQUFJLENBQUMsaUNBQWlDLEdBQUcsT0FBTyxDQUFDO1lBQ2pELElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDakMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNSLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQzdFLENBQUM7SUFFRCxxQkFBcUIsQ0FBQyxLQUFrRDtRQUN0RSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBRUQsa0JBQWtCLENBQUMsT0FBZTtRQUNoQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsaUNBQWlDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sS0FBSyxPQUFPLENBQUMsQ0FBQztRQUV2RixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDWixPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFFRCxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFFbkIsUUFBUSxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDMUIsS0FBSyxvQkFBb0IsQ0FBQyxJQUFJO2dCQUM1QixPQUFPLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQztnQkFDakMsTUFBTTtZQUVSO2dCQUNFLE1BQU07UUFDVixDQUFDO1FBRUQsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQzsrR0FsRFUsYUFBYTttR0FBYixhQUFhLHlNQ2hDMUIsNHBGQTZFQSxpS0RsREksWUFBWSxxTUFDWixXQUFXLDhqQkFDWCx5QkFBeUI7OzRGQUdoQixhQUFhO2tCQVp6QixTQUFTOytCQUNFLG9CQUFvQixtQkFHYix1QkFBdUIsQ0FBQyxNQUFNLGNBQ25DLElBQUksV0FDUDt3QkFDUCxZQUFZO3dCQUNaLFdBQVc7d0JBQ1gseUJBQXlCO3FCQUMxQjs4QkFXZSxlQUFlO3NCQUE5QixLQUFLO2dCQUNVLE1BQU07c0JBQXJCLEtBQUs7Z0JBQ1UsU0FBUztzQkFBeEIsS0FBSztnQkFFSSxPQUFPO3NCQUFoQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBDb21wb25lbnQsXHJcbiAgRXZlbnRFbWl0dGVyLCBpbmplY3QsXHJcbiAgSW5wdXQsXHJcbiAgT25EZXN0cm95LFxyXG4gIE9uSW5pdCxcclxuICBPdXRwdXRcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgU3RvcmUgfSBmcm9tICdAbmdyeC9zdG9yZSc7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBEZXBlbmRlbmNlQWN0aW9uVHlwZSB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC1mb3JtL2VudW1zJztcclxuaW1wb3J0IHsgQ29tcG9uZW50VmFsdWVNb2RlbCwgRmllbGREZXBlbmRlbmN5Q2hlY2tSZXN1bHRNb2RlbCwgVmFsdWVNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscyc7XHJcbmltcG9ydCB7IENvbXBvbmVudEZhY3RvcnlEaXJlY3RpdmUsIGNvbnRlbnRDb21wb25lbnRzTWFwIH0gZnJvbSAnLi4vLi4vZmFjdG9yaWVzL2NvbXBvbmVudC1mYWN0b3J5JztcclxuaW1wb3J0IHsgU2VjdGlvbk1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2VsZW1ldHMnO1xyXG5pbXBvcnQgeyBvYmplY3RGb3JtU2VsZWN0b3JzIH0gZnJvbSAnLi4vLi4vc3RvcmUnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBMYWJlbE1vZHVsZSB9IGZyb20gJ0BteXJ0ZXgtb3JnL3VpJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLWZvcm0tZGlzcGVuc2VyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZm9ybS1kaXNwZW5zZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2Zvcm0tZGlzcGVuc2VyLmNvbXBvbmVudC5sZXNzJ10sXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBMYWJlbE1vZHVsZSxcclxuICAgIENvbXBvbmVudEZhY3RvcnlEaXJlY3RpdmVcclxuICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGb3JtRGlzcGVuc2VyIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIHByaXZhdGUgX3N0b3JlOiBTdG9yZSA9IGluamVjdChTdG9yZSlcclxuICBwcml2YXRlIF9kZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpXHJcblxyXG4gIHByaXZhdGUgX3N1YnNjcmlwdGlvbnMkOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xyXG4gIHByaXZhdGUgX2ZpZWxkRGVwZW5kZW5jeVJ1bGVzQ2hlY2tSZXN1bHRzOiBGaWVsZERlcGVuZGVuY3lDaGVja1Jlc3VsdE1vZGVsW10gPSBbXTtcclxuXHJcbiAgcHVibGljIG1hcHBlciA9IGNvbnRlbnRDb21wb25lbnRzTWFwO1xyXG5cclxuICBASW5wdXQoKSBwdWJsaWMgc2VjdGlvblNldHRpbmdzITogU2VjdGlvbk1vZGVsIHwgbnVsbDtcclxuICBASW5wdXQoKSBwdWJsaWMgdmFsdWVzOiBWYWx1ZU1vZGVsW10gPSBbXTtcclxuICBASW5wdXQoKSBwdWJsaWMgdmFsdWVNb2RlOiAnYXV0bycgfCAnbWFudWFsJyA9ICdhdXRvJztcclxuXHJcbiAgQE91dHB1dCgpIGNoYW5nZWQ6IEV2ZW50RW1pdHRlcjxDb21wb25lbnRWYWx1ZU1vZGVsIHwgQ29tcG9uZW50VmFsdWVNb2RlbFtdPiA9IG5ldyBFdmVudEVtaXR0ZXI8Q29tcG9uZW50VmFsdWVNb2RlbCB8IENvbXBvbmVudFZhbHVlTW9kZWxbXT4oKTtcclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9zdWJzY3JpcHRpb25zJC5wdXNoKHRoaXMuX3N0b3JlLnNlbGVjdChvYmplY3RGb3JtU2VsZWN0b3JzLnNlbGVjdERlcGVuZGVuY3lSdWxlc1Jlc3VsdHMpXHJcbiAgICAgIC5zdWJzY3JpYmUocmVzdWx0cyA9PiB7XHJcbiAgICAgICAgdGhpcy5fZmllbGREZXBlbmRlbmN5UnVsZXNDaGVja1Jlc3VsdHMgPSByZXN1bHRzO1xyXG4gICAgICAgIHRoaXMuX2RldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgfSkpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLl9zdWJzY3JpcHRpb25zJC5mb3JFYWNoKChzdWJzY3JpcHRpb24pID0+IHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpKTtcclxuICB9XHJcblxyXG4gIGNvbXBvbmVudFZhbHVlQ2hhbmdlZChldmVudDogQ29tcG9uZW50VmFsdWVNb2RlbCB8IENvbXBvbmVudFZhbHVlTW9kZWxbXSkge1xyXG4gICAgdGhpcy5jaGFuZ2VkLmVtaXQoZXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgaXNDb21wb25lbnRWaXNpYmxlKHN5c05hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgcmVzdWx0ID0gdGhpcy5fZmllbGREZXBlbmRlbmN5UnVsZXNDaGVja1Jlc3VsdHMuZmluZCh4ID0+IHguc3lzTmFtZSA9PT0gc3lzTmFtZSk7XHJcblxyXG4gICAgaWYgKCFyZXN1bHQpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHZpc2libGUgPSB0cnVlO1xyXG5cclxuICAgIHN3aXRjaCAocmVzdWx0LmFjdGlvblR5cGUpIHtcclxuICAgICAgY2FzZSBEZXBlbmRlbmNlQWN0aW9uVHlwZS5zaG93OlxyXG4gICAgICAgIHZpc2libGUgPSByZXN1bHQuY29uZGl0aW9uUmVzdWx0O1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdmlzaWJsZTtcclxuICB9XHJcbn1cclxuIiwiQGlmIChzZWN0aW9uU2V0dGluZ3M/LmNvbXBvbmVudHM/Lmxlbmd0aCkge1xyXG4gIDxkaXYgY2xhc3M9XCJyb3cgYXBwbGljYXRpb24tZm9ybV9fY29udGVudFwiPlxyXG4gICAgQGZvciAoY29tcG9uZW50IG9mIHNlY3Rpb25TZXR0aW5ncz8uY29tcG9uZW50czsgdHJhY2sgY29tcG9uZW50LmlkKSB7XHJcbiAgICAgIEBzd2l0Y2ggKGNvbXBvbmVudC50eXBlKSB7XHJcbiAgICAgICAgQGNhc2UgKCdncm91cCcpIHtcclxuICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiZHJhZ0dyb3VwXCJcclxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntjb21wb25lbnQ6IGNvbXBvbmVudH1cIlxyXG4gICAgICAgICAgPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIH1cclxuICAgICAgICBAZGVmYXVsdCB7XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImRyYWdJbnB1dFwiXHJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7Y29tcG9uZW50OiBjb21wb25lbnR9XCJcclxuICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICA8L2Rpdj5cclxufVxyXG5cclxuPG5nLXRlbXBsYXRlICNkcmFnR3JvdXAgbGV0LWNvbXBvbmVudD0nY29tcG9uZW50Jz5cclxuICA8ZGl2IGNsYXNzPVwiY29sIGNvbC17e2NvbXBvbmVudC5vcHRpb25zLndpZHRofX1cIj5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMlwiPlxyXG4gICAgICAgIEBpZiAoY29tcG9uZW50Lm9wdGlvbnMubGFiZWwpIHtcclxuICAgICAgICAgIDxtcngtbGFiZWwgW3Rvb2x0aXBdPVwiY29tcG9uZW50Lm9wdGlvbnMudG9vbHRpcCB8fCAnJ1wiPlxyXG4gICAgICAgICAgICB7eyBjb21wb25lbnQub3B0aW9ucy5sYWJlbCB9fVxyXG4gICAgICAgICAgPC9tcngtbGFiZWw+XHJcbiAgICAgICAgfVxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJhcHBsaWNhdGlvbi1mb3JtX19ncm91cCBwLTJcIj5cclxuICAgICAgQGlmIChjb21wb25lbnQuY29tcG9uZW50cy5sZW5ndGgpIHtcclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICBAZm9yIChjb21wb25lbnQgb2YgY29tcG9uZW50LmNvbXBvbmVudHM7IHRyYWNrIGNvbXBvbmVudC5pZCkge1xyXG4gICAgICAgICAgICBAc3dpdGNoIChjb21wb25lbnQudHlwZSkge1xyXG4gICAgICAgICAgICAgIEBjYXNlICgnZ3JvdXAnKSB7XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImRyYWdHcm91cFwiXHJcbiAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7Y29tcG9uZW50OiBjb21wb25lbnR9XCJcclxuICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgQGRlZmF1bHQge1xyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJkcmFnSW5wdXRcIlxyXG4gICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie2NvbXBvbmVudDogY29tcG9uZW50fVwiXHJcbiAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIH0gQGVsc2Uge1xyXG4gICAgICAgIDxwIGNsYXNzPVwicC0yXCI+0K3Qu9C10LzQtdC90YLRiyDQs9GA0YPQv9C/0Ysg0L7RgtGB0YPRgtGB0YLQstGD0Y7RgjwvcD5cclxuICAgICAgfVxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI2RyYWdJbnB1dCBsZXQtY29tcG9uZW50PSdjb21wb25lbnQnPlxyXG4gIEBpZiAoaXNDb21wb25lbnRWaXNpYmxlKGNvbXBvbmVudC5zeXNOYW1lKSkge1xyXG4gICAgPGRpdiBjbGFzcz1cImNvbCBjb2wte3tjb21wb25lbnQub3B0aW9ucy53aWR0aH19XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJhcHBsaWNhdGlvbi1mb3JtX19pbnB1dFwiPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZVxyXG4gICAgICAgICAgYXBwQ29tcG9uZW50RmFjdG9yeVxyXG4gICAgICAgICAgW3R5cGVdPVwiY29tcG9uZW50LnR5cGVcIlxyXG4gICAgICAgICAgW2RhdGFdPVwiY29tcG9uZW50XCJcclxuICAgICAgICAgIFttYXBdPVwibWFwcGVyXCJcclxuICAgICAgICAgIFt2YWx1ZXNdPVwidmFsdWVzXCJcclxuICAgICAgICAgIFt2YWx1ZU1vZGVdPVwidmFsdWVNb2RlXCJcclxuICAgICAgICAgIChjaGFuZ2VkKT1cImNvbXBvbmVudFZhbHVlQ2hhbmdlZCgkZXZlbnQpXCJcclxuICAgICAgICA+PC9uZy10ZW1wbGF0ZT5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICB9XHJcbjwvbmctdGVtcGxhdGU+XHJcbiJdfQ==
69
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1kaXNwZW5zZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXlydGV4LWZvcm0vc3JjL2xpYi9tb2R1bGVzL29iamVjdC1mb3JtL2NvbXBvbmVudHMvZm9ybS1kaXNwZW5zZXIvZm9ybS1kaXNwZW5zZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXlydGV4LWZvcm0vc3JjL2xpYi9tb2R1bGVzL29iamVjdC1mb3JtL2NvbXBvbmVudHMvZm9ybS1kaXNwZW5zZXIvZm9ybS1kaXNwZW5zZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFlBQVksRUFBRSxNQUFNLEVBQ3BCLEtBQUssRUFHTCxNQUFNLEVBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUVwQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUVsRSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUVwRyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDbEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7OztBQWM3QyxNQUFNLE9BQU8sYUFBYTtJQVoxQjtRQWFVLFdBQU0sR0FBVSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDN0IsY0FBUyxHQUFzQixNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQTtRQUV4RCxvQkFBZSxHQUFtQixFQUFFLENBQUM7UUFDckMsc0NBQWlDLEdBQXNDLEVBQUUsQ0FBQztRQUUzRSxXQUFNLEdBQUcsb0JBQW9CLENBQUM7UUFHckIsV0FBTSxHQUFpQixFQUFFLENBQUM7UUFDMUIsY0FBUyxHQUFzQixNQUFNLENBQUM7UUFFNUMsWUFBTyxHQUE4RCxJQUFJLFlBQVksRUFBK0MsQ0FBQztLQXNDaEo7SUFwQ0MsUUFBUTtRQUNOLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLDRCQUE0QixDQUFDO2FBQzNGLFNBQVMsQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUNuQixJQUFJLENBQUMsaUNBQWlDLEdBQUcsT0FBTyxDQUFDO1lBQ2pELElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDakMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNSLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQzdFLENBQUM7SUFFRCxxQkFBcUIsQ0FBQyxLQUFrRDtRQUN0RSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBRUQsa0JBQWtCLENBQUMsT0FBZTtRQUNoQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsaUNBQWlDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sS0FBSyxPQUFPLENBQUMsQ0FBQztRQUV2RixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDWixPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFFRCxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFFbkIsUUFBUSxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDMUIsS0FBSyxvQkFBb0IsQ0FBQyxJQUFJO2dCQUM1QixPQUFPLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQztnQkFDakMsTUFBTTtZQUVSO2dCQUNFLE1BQU07UUFDVixDQUFDO1FBRUQsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQzsrR0FsRFUsYUFBYTttR0FBYixhQUFhLHlNQ2hDMUIsNHBGQTZFQSxpS0RsREksWUFBWSxxTUFDWixXQUFXLDRrQkFDWCx5QkFBeUI7OzRGQUdoQixhQUFhO2tCQVp6QixTQUFTOytCQUNFLG9CQUFvQixtQkFHYix1QkFBdUIsQ0FBQyxNQUFNLGNBQ25DLElBQUksV0FDUDt3QkFDUCxZQUFZO3dCQUNaLFdBQVc7d0JBQ1gseUJBQXlCO3FCQUMxQjs4QkFXZSxlQUFlO3NCQUE5QixLQUFLO2dCQUNVLE1BQU07c0JBQXJCLEtBQUs7Z0JBQ1UsU0FBUztzQkFBeEIsS0FBSztnQkFFSSxPQUFPO3NCQUFoQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBDb21wb25lbnQsXHJcbiAgRXZlbnRFbWl0dGVyLCBpbmplY3QsXHJcbiAgSW5wdXQsXHJcbiAgT25EZXN0cm95LFxyXG4gIE9uSW5pdCxcclxuICBPdXRwdXRcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgU3RvcmUgfSBmcm9tICdAbmdyeC9zdG9yZSc7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBEZXBlbmRlbmNlQWN0aW9uVHlwZSB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC1mb3JtL2VudW1zJztcclxuaW1wb3J0IHsgQ29tcG9uZW50VmFsdWVNb2RlbCwgRmllbGREZXBlbmRlbmN5Q2hlY2tSZXN1bHRNb2RlbCwgVmFsdWVNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscyc7XHJcbmltcG9ydCB7IENvbXBvbmVudEZhY3RvcnlEaXJlY3RpdmUsIGNvbnRlbnRDb21wb25lbnRzTWFwIH0gZnJvbSAnLi4vLi4vZmFjdG9yaWVzL2NvbXBvbmVudC1mYWN0b3J5JztcclxuaW1wb3J0IHsgU2VjdGlvbk1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2VsZW1ldHMnO1xyXG5pbXBvcnQgeyBvYmplY3RGb3JtU2VsZWN0b3JzIH0gZnJvbSAnLi4vLi4vc3RvcmUnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBMYWJlbE1vZHVsZSB9IGZyb20gJ0BteXJ0ZXgtb3JnL3VpJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLWZvcm0tZGlzcGVuc2VyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZm9ybS1kaXNwZW5zZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2Zvcm0tZGlzcGVuc2VyLmNvbXBvbmVudC5sZXNzJ10sXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBMYWJlbE1vZHVsZSxcclxuICAgIENvbXBvbmVudEZhY3RvcnlEaXJlY3RpdmVcclxuICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGb3JtRGlzcGVuc2VyIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIHByaXZhdGUgX3N0b3JlOiBTdG9yZSA9IGluamVjdChTdG9yZSlcclxuICBwcml2YXRlIF9kZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpXHJcblxyXG4gIHByaXZhdGUgX3N1YnNjcmlwdGlvbnMkOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xyXG4gIHByaXZhdGUgX2ZpZWxkRGVwZW5kZW5jeVJ1bGVzQ2hlY2tSZXN1bHRzOiBGaWVsZERlcGVuZGVuY3lDaGVja1Jlc3VsdE1vZGVsW10gPSBbXTtcclxuXHJcbiAgcHVibGljIG1hcHBlciA9IGNvbnRlbnRDb21wb25lbnRzTWFwO1xyXG5cclxuICBASW5wdXQoKSBwdWJsaWMgc2VjdGlvblNldHRpbmdzITogU2VjdGlvbk1vZGVsIHwgbnVsbDtcclxuICBASW5wdXQoKSBwdWJsaWMgdmFsdWVzOiBWYWx1ZU1vZGVsW10gPSBbXTtcclxuICBASW5wdXQoKSBwdWJsaWMgdmFsdWVNb2RlOiAnYXV0bycgfCAnbWFudWFsJyA9ICdhdXRvJztcclxuXHJcbiAgQE91dHB1dCgpIGNoYW5nZWQ6IEV2ZW50RW1pdHRlcjxDb21wb25lbnRWYWx1ZU1vZGVsIHwgQ29tcG9uZW50VmFsdWVNb2RlbFtdPiA9IG5ldyBFdmVudEVtaXR0ZXI8Q29tcG9uZW50VmFsdWVNb2RlbCB8IENvbXBvbmVudFZhbHVlTW9kZWxbXT4oKTtcclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9zdWJzY3JpcHRpb25zJC5wdXNoKHRoaXMuX3N0b3JlLnNlbGVjdChvYmplY3RGb3JtU2VsZWN0b3JzLnNlbGVjdERlcGVuZGVuY3lSdWxlc1Jlc3VsdHMpXHJcbiAgICAgIC5zdWJzY3JpYmUocmVzdWx0cyA9PiB7XHJcbiAgICAgICAgdGhpcy5fZmllbGREZXBlbmRlbmN5UnVsZXNDaGVja1Jlc3VsdHMgPSByZXN1bHRzO1xyXG4gICAgICAgIHRoaXMuX2RldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgfSkpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLl9zdWJzY3JpcHRpb25zJC5mb3JFYWNoKChzdWJzY3JpcHRpb24pID0+IHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpKTtcclxuICB9XHJcblxyXG4gIGNvbXBvbmVudFZhbHVlQ2hhbmdlZChldmVudDogQ29tcG9uZW50VmFsdWVNb2RlbCB8IENvbXBvbmVudFZhbHVlTW9kZWxbXSkge1xyXG4gICAgdGhpcy5jaGFuZ2VkLmVtaXQoZXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgaXNDb21wb25lbnRWaXNpYmxlKHN5c05hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgcmVzdWx0ID0gdGhpcy5fZmllbGREZXBlbmRlbmN5UnVsZXNDaGVja1Jlc3VsdHMuZmluZCh4ID0+IHguc3lzTmFtZSA9PT0gc3lzTmFtZSk7XHJcblxyXG4gICAgaWYgKCFyZXN1bHQpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHZpc2libGUgPSB0cnVlO1xyXG5cclxuICAgIHN3aXRjaCAocmVzdWx0LmFjdGlvblR5cGUpIHtcclxuICAgICAgY2FzZSBEZXBlbmRlbmNlQWN0aW9uVHlwZS5zaG93OlxyXG4gICAgICAgIHZpc2libGUgPSByZXN1bHQuY29uZGl0aW9uUmVzdWx0O1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdmlzaWJsZTtcclxuICB9XHJcbn1cclxuIiwiQGlmIChzZWN0aW9uU2V0dGluZ3M/LmNvbXBvbmVudHM/Lmxlbmd0aCkge1xyXG4gIDxkaXYgY2xhc3M9XCJyb3cgYXBwbGljYXRpb24tZm9ybV9fY29udGVudFwiPlxyXG4gICAgQGZvciAoY29tcG9uZW50IG9mIHNlY3Rpb25TZXR0aW5ncz8uY29tcG9uZW50czsgdHJhY2sgY29tcG9uZW50LmlkKSB7XHJcbiAgICAgIEBzd2l0Y2ggKGNvbXBvbmVudC50eXBlKSB7XHJcbiAgICAgICAgQGNhc2UgKCdncm91cCcpIHtcclxuICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiZHJhZ0dyb3VwXCJcclxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntjb21wb25lbnQ6IGNvbXBvbmVudH1cIlxyXG4gICAgICAgICAgPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIH1cclxuICAgICAgICBAZGVmYXVsdCB7XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImRyYWdJbnB1dFwiXHJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7Y29tcG9uZW50OiBjb21wb25lbnR9XCJcclxuICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICA8L2Rpdj5cclxufVxyXG5cclxuPG5nLXRlbXBsYXRlICNkcmFnR3JvdXAgbGV0LWNvbXBvbmVudD0nY29tcG9uZW50Jz5cclxuICA8ZGl2IGNsYXNzPVwiY29sIGNvbC17e2NvbXBvbmVudC5vcHRpb25zLndpZHRofX1cIj5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMlwiPlxyXG4gICAgICAgIEBpZiAoY29tcG9uZW50Lm9wdGlvbnMubGFiZWwpIHtcclxuICAgICAgICAgIDxtcngtbGFiZWwgW3Rvb2x0aXBdPVwiY29tcG9uZW50Lm9wdGlvbnMudG9vbHRpcCB8fCAnJ1wiPlxyXG4gICAgICAgICAgICB7eyBjb21wb25lbnQub3B0aW9ucy5sYWJlbCB9fVxyXG4gICAgICAgICAgPC9tcngtbGFiZWw+XHJcbiAgICAgICAgfVxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJhcHBsaWNhdGlvbi1mb3JtX19ncm91cCBwLTJcIj5cclxuICAgICAgQGlmIChjb21wb25lbnQuY29tcG9uZW50cy5sZW5ndGgpIHtcclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICBAZm9yIChjb21wb25lbnQgb2YgY29tcG9uZW50LmNvbXBvbmVudHM7IHRyYWNrIGNvbXBvbmVudC5pZCkge1xyXG4gICAgICAgICAgICBAc3dpdGNoIChjb21wb25lbnQudHlwZSkge1xyXG4gICAgICAgICAgICAgIEBjYXNlICgnZ3JvdXAnKSB7XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImRyYWdHcm91cFwiXHJcbiAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7Y29tcG9uZW50OiBjb21wb25lbnR9XCJcclxuICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgQGRlZmF1bHQge1xyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJkcmFnSW5wdXRcIlxyXG4gICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie2NvbXBvbmVudDogY29tcG9uZW50fVwiXHJcbiAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIH0gQGVsc2Uge1xyXG4gICAgICAgIDxwIGNsYXNzPVwicC0yXCI+0K3Qu9C10LzQtdC90YLRiyDQs9GA0YPQv9C/0Ysg0L7RgtGB0YPRgtGB0YLQstGD0Y7RgjwvcD5cclxuICAgICAgfVxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI2RyYWdJbnB1dCBsZXQtY29tcG9uZW50PSdjb21wb25lbnQnPlxyXG4gIEBpZiAoaXNDb21wb25lbnRWaXNpYmxlKGNvbXBvbmVudC5zeXNOYW1lKSkge1xyXG4gICAgPGRpdiBjbGFzcz1cImNvbCBjb2wte3tjb21wb25lbnQub3B0aW9ucy53aWR0aH19XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJhcHBsaWNhdGlvbi1mb3JtX19pbnB1dFwiPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZVxyXG4gICAgICAgICAgYXBwQ29tcG9uZW50RmFjdG9yeVxyXG4gICAgICAgICAgW3R5cGVdPVwiY29tcG9uZW50LnR5cGVcIlxyXG4gICAgICAgICAgW2RhdGFdPVwiY29tcG9uZW50XCJcclxuICAgICAgICAgIFttYXBdPVwibWFwcGVyXCJcclxuICAgICAgICAgIFt2YWx1ZXNdPVwidmFsdWVzXCJcclxuICAgICAgICAgIFt2YWx1ZU1vZGVdPVwidmFsdWVNb2RlXCJcclxuICAgICAgICAgIChjaGFuZ2VkKT1cImNvbXBvbmVudFZhbHVlQ2hhbmdlZCgkZXZlbnQpXCJcclxuICAgICAgICA+PC9uZy10ZW1wbGF0ZT5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICB9XHJcbjwvbmctdGVtcGxhdGU+XHJcbiJdfQ==